@naylence/runtime 0.4.0 → 0.4.2
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 +516 -407
- package/dist/browser/index.mjs +501 -408
- package/dist/cjs/naylence/fame/factory-manifest.js +2 -0
- package/dist/cjs/naylence/fame/node/default-node-identity-policy.js +9 -41
- package/dist/cjs/naylence/fame/security/auth/authorization-profile-factory.js +165 -0
- package/dist/cjs/naylence/fame/security/index.js +19 -1
- package/dist/cjs/naylence/fame/security/node-security-profile-factory.js +14 -74
- package/dist/cjs/version.js +2 -2
- package/dist/esm/naylence/fame/factory-manifest.js +2 -0
- package/dist/esm/naylence/fame/node/default-node-identity-policy.js +9 -41
- package/dist/esm/naylence/fame/security/auth/authorization-profile-factory.js +161 -0
- package/dist/esm/naylence/fame/security/index.js +2 -1
- package/dist/esm/naylence/fame/security/node-security-profile-factory.js +13 -73
- package/dist/esm/version.js +2 -2
- package/dist/node/index.cjs +516 -407
- package/dist/node/index.mjs +501 -408
- package/dist/node/node.cjs +508 -399
- package/dist/node/node.mjs +493 -400
- package/dist/types/naylence/fame/factory-manifest.d.ts +1 -1
- package/dist/types/naylence/fame/node/default-node-identity-policy.d.ts +6 -0
- package/dist/types/naylence/fame/security/auth/authorization-profile-factory.d.ts +29 -0
- package/dist/types/naylence/fame/security/index.d.ts +3 -1
- package/dist/types/naylence/fame/security/node-security-profile-factory.d.ts +1 -0
- package/dist/types/version.d.ts +1 -1
- package/package.json +1 -1
package/dist/node/index.mjs
CHANGED
|
@@ -13,12 +13,12 @@ import fastify from 'fastify';
|
|
|
13
13
|
import websocketPlugin from '@fastify/websocket';
|
|
14
14
|
|
|
15
15
|
// This file is auto-generated during build - do not edit manually
|
|
16
|
-
// Generated from package.json version: 0.4.
|
|
16
|
+
// Generated from package.json version: 0.4.2
|
|
17
17
|
/**
|
|
18
18
|
* The package version, injected at build time.
|
|
19
19
|
* @internal
|
|
20
20
|
*/
|
|
21
|
-
const VERSION = '0.4.
|
|
21
|
+
const VERSION = '0.4.2';
|
|
22
22
|
|
|
23
23
|
/**
|
|
24
24
|
* Fame protocol specific error classes with WebSocket close codes and proper inheritance.
|
|
@@ -3195,7 +3195,7 @@ class EnvCredentialProviderFactory extends CredentialProviderFactory {
|
|
|
3195
3195
|
return new EnvCredentialProvider(resolved.varName);
|
|
3196
3196
|
}
|
|
3197
3197
|
}
|
|
3198
|
-
const FACTORY_META$
|
|
3198
|
+
const FACTORY_META$1g = {
|
|
3199
3199
|
base: CREDENTIAL_PROVIDER_FACTORY_BASE_TYPE,
|
|
3200
3200
|
key: 'EnvCredentialProvider',
|
|
3201
3201
|
};
|
|
@@ -3203,7 +3203,7 @@ const FACTORY_META$1f = {
|
|
|
3203
3203
|
var envCredentialProviderFactory = /*#__PURE__*/Object.freeze({
|
|
3204
3204
|
__proto__: null,
|
|
3205
3205
|
EnvCredentialProviderFactory: EnvCredentialProviderFactory,
|
|
3206
|
-
FACTORY_META: FACTORY_META$
|
|
3206
|
+
FACTORY_META: FACTORY_META$1g,
|
|
3207
3207
|
default: EnvCredentialProviderFactory,
|
|
3208
3208
|
normalizeEnvConfig: normalizeEnvConfig
|
|
3209
3209
|
});
|
|
@@ -3301,14 +3301,14 @@ class PromptCredentialProviderFactory extends CredentialProviderFactory {
|
|
|
3301
3301
|
return new PromptCredentialProvider(resolved.credentialName);
|
|
3302
3302
|
}
|
|
3303
3303
|
}
|
|
3304
|
-
const FACTORY_META$
|
|
3304
|
+
const FACTORY_META$1f = {
|
|
3305
3305
|
base: CREDENTIAL_PROVIDER_FACTORY_BASE_TYPE,
|
|
3306
3306
|
key: 'PromptCredentialProvider',
|
|
3307
3307
|
};
|
|
3308
3308
|
|
|
3309
3309
|
var promptCredentialProviderFactory = /*#__PURE__*/Object.freeze({
|
|
3310
3310
|
__proto__: null,
|
|
3311
|
-
FACTORY_META: FACTORY_META$
|
|
3311
|
+
FACTORY_META: FACTORY_META$1f,
|
|
3312
3312
|
PromptCredentialProviderFactory: PromptCredentialProviderFactory,
|
|
3313
3313
|
default: PromptCredentialProviderFactory,
|
|
3314
3314
|
normalizePromptConfig: normalizePromptConfig
|
|
@@ -3362,14 +3362,14 @@ class SecretStoreCredentialProviderFactory extends CredentialProviderFactory {
|
|
|
3362
3362
|
return new SecretStoreCredentialProvider(resolved.secretName);
|
|
3363
3363
|
}
|
|
3364
3364
|
}
|
|
3365
|
-
const FACTORY_META$
|
|
3365
|
+
const FACTORY_META$1e = {
|
|
3366
3366
|
base: CREDENTIAL_PROVIDER_FACTORY_BASE_TYPE,
|
|
3367
3367
|
key: 'SecretStoreCredentialProvider',
|
|
3368
3368
|
};
|
|
3369
3369
|
|
|
3370
3370
|
var secretStoreCredentialProviderFactory = /*#__PURE__*/Object.freeze({
|
|
3371
3371
|
__proto__: null,
|
|
3372
|
-
FACTORY_META: FACTORY_META$
|
|
3372
|
+
FACTORY_META: FACTORY_META$1e,
|
|
3373
3373
|
SecretStoreCredentialProviderFactory: SecretStoreCredentialProviderFactory,
|
|
3374
3374
|
default: SecretStoreCredentialProviderFactory,
|
|
3375
3375
|
normalizeSecretStoreConfig: normalizeSecretStoreConfig
|
|
@@ -3418,14 +3418,14 @@ class StaticCredentialProviderFactory extends CredentialProviderFactory {
|
|
|
3418
3418
|
return new StaticCredentialProvider(resolved.credentialValue);
|
|
3419
3419
|
}
|
|
3420
3420
|
}
|
|
3421
|
-
const FACTORY_META$
|
|
3421
|
+
const FACTORY_META$1d = {
|
|
3422
3422
|
base: CREDENTIAL_PROVIDER_FACTORY_BASE_TYPE,
|
|
3423
3423
|
key: 'StaticCredentialProvider',
|
|
3424
3424
|
};
|
|
3425
3425
|
|
|
3426
3426
|
var staticCredentialProviderFactory = /*#__PURE__*/Object.freeze({
|
|
3427
3427
|
__proto__: null,
|
|
3428
|
-
FACTORY_META: FACTORY_META$
|
|
3428
|
+
FACTORY_META: FACTORY_META$1d,
|
|
3429
3429
|
StaticCredentialProviderFactory: StaticCredentialProviderFactory,
|
|
3430
3430
|
default: StaticCredentialProviderFactory,
|
|
3431
3431
|
normalizeStaticConfig: normalizeStaticConfig
|
|
@@ -3669,7 +3669,7 @@ const BASE_PROFILE_MAP = {
|
|
|
3669
3669
|
[PROFILE_NAME_INDEXEDDB]: INDEXEDDB_PROFILE_CONFIG,
|
|
3670
3670
|
};
|
|
3671
3671
|
// Extended profile map - can be augmented by Node.js environment
|
|
3672
|
-
const PROFILE_MAP$
|
|
3672
|
+
const PROFILE_MAP$7 = {
|
|
3673
3673
|
...BASE_PROFILE_MAP,
|
|
3674
3674
|
};
|
|
3675
3675
|
class StorageProfileFactory extends StorageProviderFactory {
|
|
@@ -3684,9 +3684,9 @@ class StorageProfileFactory extends StorageProviderFactory {
|
|
|
3684
3684
|
type: 'StorageProfile',
|
|
3685
3685
|
});
|
|
3686
3686
|
const profileName = (parsed.profile ?? PROFILE_NAME_MEMORY).toLowerCase();
|
|
3687
|
-
const profileConfig = PROFILE_MAP$
|
|
3687
|
+
const profileConfig = PROFILE_MAP$7[profileName];
|
|
3688
3688
|
if (!profileConfig) {
|
|
3689
|
-
throw new Error(`Unknown storage profile '${profileName}'. Supported profiles: ${Object.keys(PROFILE_MAP$
|
|
3689
|
+
throw new Error(`Unknown storage profile '${profileName}'. Supported profiles: ${Object.keys(PROFILE_MAP$7).join(', ')}`);
|
|
3690
3690
|
}
|
|
3691
3691
|
const createOptions = {
|
|
3692
3692
|
...options,
|
|
@@ -12714,44 +12714,12 @@ class ConnectionRetryPolicyFactory extends AbstractResourceFactory {
|
|
|
12714
12714
|
}
|
|
12715
12715
|
}
|
|
12716
12716
|
|
|
12717
|
-
|
|
12718
|
-
|
|
12719
|
-
|
|
12720
|
-
|
|
12721
|
-
|
|
12722
|
-
|
|
12723
|
-
throw new Error('Failed to create token provider from configuration');
|
|
12724
|
-
}
|
|
12725
|
-
return provider;
|
|
12726
|
-
}
|
|
12727
|
-
let provider = null;
|
|
12728
|
-
try {
|
|
12729
|
-
provider = await createDefaultResource(TOKEN_PROVIDER_FACTORY_BASE_TYPE, null, options);
|
|
12730
|
-
}
|
|
12731
|
-
catch (error) {
|
|
12732
|
-
const message = 'Failed to create default token provider' +
|
|
12733
|
-
(error instanceof Error && error.message ? `: ${error.message}` : '');
|
|
12734
|
-
throw new Error(message);
|
|
12735
|
-
}
|
|
12736
|
-
if (!provider) {
|
|
12737
|
-
throw new Error('Failed to create default token provider');
|
|
12738
|
-
}
|
|
12739
|
-
return provider;
|
|
12740
|
-
}
|
|
12741
|
-
}
|
|
12742
|
-
|
|
12743
|
-
function isTokenProvider(candidate) {
|
|
12744
|
-
return (typeof candidate === 'object' &&
|
|
12745
|
-
candidate !== null &&
|
|
12746
|
-
typeof candidate.getToken === 'function');
|
|
12747
|
-
}
|
|
12748
|
-
function isIdentityExposingTokenProvider(candidate) {
|
|
12749
|
-
return (isTokenProvider(candidate) &&
|
|
12750
|
-
typeof candidate.getIdentity ===
|
|
12751
|
-
'function');
|
|
12752
|
-
}
|
|
12753
|
-
|
|
12754
|
-
const logger$12 = getLogger('naylence.fame.node.default_node_identity_policy');
|
|
12717
|
+
/**
|
|
12718
|
+
* Default node identity policy that preserves the current node ID.
|
|
12719
|
+
*
|
|
12720
|
+
* This policy does NOT derive identity from tokens or grants.
|
|
12721
|
+
* For token-subject-based identity, use TokenSubjectNodeIdentityPolicy.
|
|
12722
|
+
*/
|
|
12755
12723
|
class DefaultNodeIdentityPolicy {
|
|
12756
12724
|
async resolveInitialNodeId(context) {
|
|
12757
12725
|
if (context.configuredId) {
|
|
@@ -12763,44 +12731,10 @@ class DefaultNodeIdentityPolicy {
|
|
|
12763
12731
|
return await generateIdAsync({ mode: 'fingerprint' });
|
|
12764
12732
|
}
|
|
12765
12733
|
async resolveAdmissionNodeId(context) {
|
|
12766
|
-
|
|
12767
|
-
|
|
12768
|
-
for (const grant of context.grants) {
|
|
12769
|
-
try {
|
|
12770
|
-
const auth = grant.auth;
|
|
12771
|
-
if (!auth) {
|
|
12772
|
-
continue;
|
|
12773
|
-
}
|
|
12774
|
-
const tokenProviderConfig = (auth.tokenProvider ??
|
|
12775
|
-
auth.token_provider);
|
|
12776
|
-
if (!tokenProviderConfig ||
|
|
12777
|
-
typeof tokenProviderConfig.type !== 'string') {
|
|
12778
|
-
continue;
|
|
12779
|
-
}
|
|
12780
|
-
const provider = await TokenProviderFactory.createTokenProvider(tokenProviderConfig);
|
|
12781
|
-
if (isIdentityExposingTokenProvider(provider)) {
|
|
12782
|
-
const identity = await provider.getIdentity();
|
|
12783
|
-
if (identity && identity.subject) {
|
|
12784
|
-
logger$12.debug('identity_extracted_from_grant', {
|
|
12785
|
-
identity_id: identity.subject,
|
|
12786
|
-
grant_type: grant.type,
|
|
12787
|
-
});
|
|
12788
|
-
return identity.subject;
|
|
12789
|
-
}
|
|
12790
|
-
}
|
|
12791
|
-
}
|
|
12792
|
-
catch (error) {
|
|
12793
|
-
logger$12.warning('identity_extraction_failed', {
|
|
12794
|
-
error: error instanceof Error ? error.message : String(error),
|
|
12795
|
-
grant_type: grant.type,
|
|
12796
|
-
});
|
|
12797
|
-
}
|
|
12798
|
-
}
|
|
12734
|
+
if (context.currentNodeId) {
|
|
12735
|
+
return context.currentNodeId;
|
|
12799
12736
|
}
|
|
12800
|
-
|
|
12801
|
-
return await generateIdAsync({ mode: 'fingerprint' });
|
|
12802
|
-
}
|
|
12803
|
-
return context.currentNodeId;
|
|
12737
|
+
return await generateIdAsync({ mode: 'fingerprint' });
|
|
12804
12738
|
}
|
|
12805
12739
|
}
|
|
12806
12740
|
|
|
@@ -12874,7 +12808,7 @@ class AttachmentKeyValidator {
|
|
|
12874
12808
|
}
|
|
12875
12809
|
}
|
|
12876
12810
|
|
|
12877
|
-
const logger$
|
|
12811
|
+
const logger$12 = getLogger('naylence.fame.node.admission.default_node_attach_client');
|
|
12878
12812
|
const HANDSHAKE_POLL_INTERVAL_MS = 20;
|
|
12879
12813
|
class DefaultNodeAttachClient {
|
|
12880
12814
|
constructor(options = {}) {
|
|
@@ -12898,7 +12832,7 @@ class DefaultNodeAttachClient {
|
|
|
12898
12832
|
}
|
|
12899
12833
|
else {
|
|
12900
12834
|
// Silently ignore frames from other agents during concurrent handshakes
|
|
12901
|
-
logger$
|
|
12835
|
+
logger$12.debug('handshake_ignoring_frame_from_different_system', {
|
|
12902
12836
|
frame_type: envelope.frame.type,
|
|
12903
12837
|
frame_system_id: frameSystemId,
|
|
12904
12838
|
expected_system_id: this.expectedSystemId,
|
|
@@ -12941,7 +12875,7 @@ class DefaultNodeAttachClient {
|
|
|
12941
12875
|
}
|
|
12942
12876
|
}
|
|
12943
12877
|
catch (error) {
|
|
12944
|
-
logger$
|
|
12878
|
+
logger$12.debug('stickiness_offer_skipped', {
|
|
12945
12879
|
error: error instanceof Error ? error.message : String(error),
|
|
12946
12880
|
});
|
|
12947
12881
|
}
|
|
@@ -12962,7 +12896,7 @@ class DefaultNodeAttachClient {
|
|
|
12962
12896
|
if (!processedEnvelope) {
|
|
12963
12897
|
throw new Error('Envelope was blocked by onForwardUpstream event');
|
|
12964
12898
|
}
|
|
12965
|
-
logger$
|
|
12899
|
+
logger$12.debug('sending_node_attach_envelope', {
|
|
12966
12900
|
envp_id: processedEnvelope.id ?? envelope.id ?? null,
|
|
12967
12901
|
frame_type: processedEnvelope.frame?.type ?? 'unknown',
|
|
12968
12902
|
trace_id: processedEnvelope.traceId ?? envelope.traceId ?? null,
|
|
@@ -12998,7 +12932,7 @@ class DefaultNodeAttachClient {
|
|
|
12998
12932
|
try {
|
|
12999
12933
|
const keyInfos = await this.attachmentKeyValidator.validateKeys(parentKeys);
|
|
13000
12934
|
if (Array.isArray(keyInfos) && keyInfos.length > 0) {
|
|
13001
|
-
logger$
|
|
12935
|
+
logger$12.debug('parent_certificate_validation_passed', {
|
|
13002
12936
|
parent_id: parentId,
|
|
13003
12937
|
correlation_id: corrId,
|
|
13004
12938
|
validated_keys: keyInfos.length,
|
|
@@ -13007,7 +12941,7 @@ class DefaultNodeAttachClient {
|
|
|
13007
12941
|
}
|
|
13008
12942
|
catch (error) {
|
|
13009
12943
|
if (error instanceof KeyValidationError) {
|
|
13010
|
-
logger$
|
|
12944
|
+
logger$12.error('parent_certificate_validation_failed', {
|
|
13011
12945
|
parent_id: parentId,
|
|
13012
12946
|
correlation_id: corrId,
|
|
13013
12947
|
error_code: error.code,
|
|
@@ -13021,12 +12955,12 @@ class DefaultNodeAttachClient {
|
|
|
13021
12955
|
}
|
|
13022
12956
|
}
|
|
13023
12957
|
else {
|
|
13024
|
-
logger$
|
|
12958
|
+
logger$12.debug('parent_certificate_validation_skipped', {
|
|
13025
12959
|
parent_id: parentId,
|
|
13026
12960
|
reason: 'no_validator',
|
|
13027
12961
|
});
|
|
13028
12962
|
}
|
|
13029
|
-
logger$
|
|
12963
|
+
logger$12.debug('processing_node_attach_ack', {
|
|
13030
12964
|
parent_id: ackFrame.targetSystemId,
|
|
13031
12965
|
});
|
|
13032
12966
|
this.inHandshake = false;
|
|
@@ -13057,7 +12991,7 @@ class DefaultNodeAttachClient {
|
|
|
13057
12991
|
}
|
|
13058
12992
|
}
|
|
13059
12993
|
catch (error) {
|
|
13060
|
-
logger$
|
|
12994
|
+
logger$12.debug('stickiness_accept_skipped', {
|
|
13061
12995
|
error: error instanceof Error ? error.message : String(error),
|
|
13062
12996
|
});
|
|
13063
12997
|
}
|
|
@@ -13111,7 +13045,7 @@ class DefaultNodeAttachClient {
|
|
|
13111
13045
|
// NodeAttach frames during handshake are expected in multi-agent scenarios
|
|
13112
13046
|
// where multiple agents attach concurrently to the same channel
|
|
13113
13047
|
if (envelope.frame.type === 'NodeAttach') {
|
|
13114
|
-
logger$
|
|
13048
|
+
logger$12.debug('handshake_ignoring_concurrent_attach', {
|
|
13115
13049
|
frame_type: envelope.frame.type,
|
|
13116
13050
|
frame_system_id: envelope.frame?.systemId ??
|
|
13117
13051
|
'unknown',
|
|
@@ -13119,7 +13053,7 @@ class DefaultNodeAttachClient {
|
|
|
13119
13053
|
}
|
|
13120
13054
|
else {
|
|
13121
13055
|
// Other unexpected frames are still logged as errors
|
|
13122
|
-
logger$
|
|
13056
|
+
logger$12.error('unexpected_frame_during_handshake', {
|
|
13123
13057
|
frame_type: envelope.frame.type,
|
|
13124
13058
|
});
|
|
13125
13059
|
}
|
|
@@ -13259,7 +13193,7 @@ class TraceEmitterFactory extends AbstractResourceFactory {
|
|
|
13259
13193
|
// void import('./trace-emitter-profile-factory.js');
|
|
13260
13194
|
|
|
13261
13195
|
const BINDING_STORE_NAMESPACE = '__binding_store';
|
|
13262
|
-
const logger$
|
|
13196
|
+
const logger$11 = getLogger('naylence.fame.node.factory_commons');
|
|
13263
13197
|
function isPlainRecord$2(value) {
|
|
13264
13198
|
return Boolean(value) && typeof value === 'object' && !Array.isArray(value);
|
|
13265
13199
|
}
|
|
@@ -13453,7 +13387,7 @@ async function resolveNodeIdentityPolicy(config, options) {
|
|
|
13453
13387
|
return await NodeIdentityPolicyFactory.createNodeIdentityPolicy(config ?? undefined, cloneCreateOptions(options));
|
|
13454
13388
|
}
|
|
13455
13389
|
catch (error) {
|
|
13456
|
-
logger$
|
|
13390
|
+
logger$11.warning('node_identity_policy_creation_failed', {
|
|
13457
13391
|
error: error instanceof Error ? error.message : String(error),
|
|
13458
13392
|
});
|
|
13459
13393
|
return null;
|
|
@@ -13464,7 +13398,7 @@ async function resolveConnectionRetryPolicy(config, options) {
|
|
|
13464
13398
|
return await ConnectionRetryPolicyFactory.createConnectionRetryPolicy(config ?? undefined, cloneCreateOptions(options));
|
|
13465
13399
|
}
|
|
13466
13400
|
catch (error) {
|
|
13467
|
-
logger$
|
|
13401
|
+
logger$11.warning('connection_retry_policy_creation_failed', {
|
|
13468
13402
|
error: error instanceof Error ? error.message : String(error),
|
|
13469
13403
|
});
|
|
13470
13404
|
return null;
|
|
@@ -13476,7 +13410,7 @@ async function resolveStorageProvider(config, options) {
|
|
|
13476
13410
|
return await StorageProviderFactory.createStorageProvider(config, cloneCreateOptions(options));
|
|
13477
13411
|
}
|
|
13478
13412
|
catch (error) {
|
|
13479
|
-
logger$
|
|
13413
|
+
logger$11.warning('storage_provider_creation_failed', {
|
|
13480
13414
|
error: error instanceof Error ? error.message : String(error),
|
|
13481
13415
|
});
|
|
13482
13416
|
}
|
|
@@ -13498,7 +13432,7 @@ async function resolveAdmissionClient(config, options, identityPolicy) {
|
|
|
13498
13432
|
return await AdmissionClientFactory.createAdmissionClient((config ?? null), createOptions);
|
|
13499
13433
|
}
|
|
13500
13434
|
catch (error) {
|
|
13501
|
-
logger$
|
|
13435
|
+
logger$11.warning('admission_client_creation_failed', {
|
|
13502
13436
|
error: error instanceof Error ? error.message : String(error),
|
|
13503
13437
|
});
|
|
13504
13438
|
return null;
|
|
@@ -13525,7 +13459,7 @@ async function resolveReplicaStickinessManager(hasParent, requestedLogicals, opt
|
|
|
13525
13459
|
return await ReplicaStickinessManagerFactory.createReplicaStickinessManager(undefined, cloneCreateOptions(options));
|
|
13526
13460
|
}
|
|
13527
13461
|
catch (error) {
|
|
13528
|
-
logger$
|
|
13462
|
+
logger$11.debug('replica_stickiness_manager_unavailable', { error });
|
|
13529
13463
|
return null;
|
|
13530
13464
|
}
|
|
13531
13465
|
}
|
|
@@ -13534,7 +13468,7 @@ async function resolveAttachmentKeyValidator(config, options) {
|
|
|
13534
13468
|
return await AttachmentKeyValidatorFactory.createAttachmentKeyValidator(config ?? undefined, cloneCreateOptions(options));
|
|
13535
13469
|
}
|
|
13536
13470
|
catch (error) {
|
|
13537
|
-
logger$
|
|
13471
|
+
logger$11.warning('attachment_key_validator_creation_failed', {
|
|
13538
13472
|
error: error instanceof Error ? error.message : String(error),
|
|
13539
13473
|
});
|
|
13540
13474
|
return null;
|
|
@@ -13552,7 +13486,7 @@ async function resolveDeliveryPolicy(config, options) {
|
|
|
13552
13486
|
return await DeliveryPolicyFactory.createDeliveryPolicy(config ?? undefined, cloneCreateOptions(options));
|
|
13553
13487
|
}
|
|
13554
13488
|
catch (error) {
|
|
13555
|
-
logger$
|
|
13489
|
+
logger$11.warning('delivery_policy_creation_failed', {
|
|
13556
13490
|
error: error instanceof Error ? error.message : String(error),
|
|
13557
13491
|
});
|
|
13558
13492
|
return null;
|
|
@@ -13566,7 +13500,7 @@ async function resolveTransportListeners(configs, eventListeners, options) {
|
|
|
13566
13500
|
return await TransportListenerFactory.createTransportListeners(configs, eventListeners, cloneCreateOptions(options));
|
|
13567
13501
|
}
|
|
13568
13502
|
catch (error) {
|
|
13569
|
-
logger$
|
|
13503
|
+
logger$11.warning('transport_listener_creation_failed', {
|
|
13570
13504
|
error: error instanceof Error ? error.message : String(error),
|
|
13571
13505
|
});
|
|
13572
13506
|
return [];
|
|
@@ -13577,7 +13511,7 @@ async function resolveTraceEmitter(config, options) {
|
|
|
13577
13511
|
return await TraceEmitterFactory.createTraceEmitter(config ?? undefined, cloneCreateOptions(options));
|
|
13578
13512
|
}
|
|
13579
13513
|
catch (error) {
|
|
13580
|
-
logger$
|
|
13514
|
+
logger$11.warning('trace_emitter_creation_failed', {
|
|
13581
13515
|
error: error instanceof Error ? error.message : String(error),
|
|
13582
13516
|
});
|
|
13583
13517
|
return null;
|
|
@@ -13633,7 +13567,7 @@ async function createSecurityManagerFromConfig(config, overrides, options) {
|
|
|
13633
13567
|
return manager ?? null;
|
|
13634
13568
|
}
|
|
13635
13569
|
catch (error) {
|
|
13636
|
-
logger$
|
|
13570
|
+
logger$11.warning('security_manager_creation_failed', {
|
|
13637
13571
|
error: error instanceof Error ? error.message : String(error),
|
|
13638
13572
|
});
|
|
13639
13573
|
return null;
|
|
@@ -13662,7 +13596,7 @@ async function resolveCryptoProvider(config, options) {
|
|
|
13662
13596
|
// This happens with overlay security profiles that need envelope signing
|
|
13663
13597
|
if (requiresCryptoProvider(config)) {
|
|
13664
13598
|
try {
|
|
13665
|
-
logger$
|
|
13599
|
+
logger$11.debug('auto_creating_crypto_provider', {
|
|
13666
13600
|
reason: 'overlay_security_requires_signing',
|
|
13667
13601
|
});
|
|
13668
13602
|
// Dynamically import to avoid circular dependencies
|
|
@@ -13682,7 +13616,7 @@ async function resolveCryptoProvider(config, options) {
|
|
|
13682
13616
|
});
|
|
13683
13617
|
}
|
|
13684
13618
|
catch (error) {
|
|
13685
|
-
logger$
|
|
13619
|
+
logger$11.error('failed_to_auto_create_crypto_provider', {
|
|
13686
13620
|
error: error instanceof Error ? error.message : String(error),
|
|
13687
13621
|
});
|
|
13688
13622
|
throw error;
|
|
@@ -14222,6 +14156,7 @@ const MODULES = [
|
|
|
14222
14156
|
"./node/node-identity-policy-profile-factory.js",
|
|
14223
14157
|
"./node/token-subject-node-identity-policy-factory.js",
|
|
14224
14158
|
"./placement/static-node-placement-strategy-factory.js",
|
|
14159
|
+
"./security/auth/authorization-profile-factory.js",
|
|
14225
14160
|
"./security/auth/bearer-token-header-auth-injection-strategy-factory.js",
|
|
14226
14161
|
"./security/auth/default-authorizer-factory.js",
|
|
14227
14162
|
"./security/auth/default-policy-authorizer-factory.js",
|
|
@@ -14304,6 +14239,7 @@ const MODULE_LOADERS = {
|
|
|
14304
14239
|
"./node/node-identity-policy-profile-factory.js": () => Promise.resolve().then(function () { return nodeIdentityPolicyProfileFactory; }),
|
|
14305
14240
|
"./node/token-subject-node-identity-policy-factory.js": () => Promise.resolve().then(function () { return tokenSubjectNodeIdentityPolicyFactory; }),
|
|
14306
14241
|
"./placement/static-node-placement-strategy-factory.js": () => Promise.resolve().then(function () { return staticNodePlacementStrategyFactory; }),
|
|
14242
|
+
"./security/auth/authorization-profile-factory.js": () => Promise.resolve().then(function () { return authorizationProfileFactory; }),
|
|
14307
14243
|
"./security/auth/bearer-token-header-auth-injection-strategy-factory.js": () => Promise.resolve().then(function () { return bearerTokenHeaderAuthInjectionStrategyFactory; }),
|
|
14308
14244
|
"./security/auth/default-authorizer-factory.js": () => Promise.resolve().then(function () { return defaultAuthorizerFactory; }),
|
|
14309
14245
|
"./security/auth/default-policy-authorizer-factory.js": () => Promise.resolve().then(function () { return defaultPolicyAuthorizerFactory; }),
|
|
@@ -14651,7 +14587,7 @@ class NodeLikeFactory extends AbstractResourceFactory {
|
|
|
14651
14587
|
// registerFactory(NODE_LIKE_FACTORY_BASE_TYPE, type, factory);
|
|
14652
14588
|
// }
|
|
14653
14589
|
|
|
14654
|
-
const FACTORY_META$
|
|
14590
|
+
const FACTORY_META$1c = {
|
|
14655
14591
|
base: NODE_LIKE_FACTORY_BASE_TYPE,
|
|
14656
14592
|
key: 'Node',
|
|
14657
14593
|
};
|
|
@@ -14693,7 +14629,7 @@ class NodeFactory extends NodeLikeFactory {
|
|
|
14693
14629
|
|
|
14694
14630
|
var nodeFactory = /*#__PURE__*/Object.freeze({
|
|
14695
14631
|
__proto__: null,
|
|
14696
|
-
FACTORY_META: FACTORY_META$
|
|
14632
|
+
FACTORY_META: FACTORY_META$1c,
|
|
14697
14633
|
NodeFactory: NodeFactory,
|
|
14698
14634
|
default: NodeFactory
|
|
14699
14635
|
});
|
|
@@ -15270,7 +15206,7 @@ function normalizeSecurityRequirements(value) {
|
|
|
15270
15206
|
};
|
|
15271
15207
|
}
|
|
15272
15208
|
|
|
15273
|
-
const logger
|
|
15209
|
+
const logger$10 = getLogger('naylence.fame.node.envelope_security_handler');
|
|
15274
15210
|
const ENCRYPTION_OPTION_ALIAS_PAIRS = [
|
|
15275
15211
|
['recipKid', 'recip_kid'],
|
|
15276
15212
|
['recipientKeyId', 'recipient_key_id'],
|
|
@@ -15319,7 +15255,7 @@ class EnvelopeSecurityHandler {
|
|
|
15319
15255
|
const shouldSign = this.securityPolicy
|
|
15320
15256
|
? await this.securityPolicy.shouldSignEnvelope(envelope, context, this.node)
|
|
15321
15257
|
: false;
|
|
15322
|
-
logger
|
|
15258
|
+
logger$10.debug('checking_signing', {
|
|
15323
15259
|
has_signer: Boolean(this.envelopeSigner),
|
|
15324
15260
|
should_sign: shouldSign,
|
|
15325
15261
|
envp_id: envelope.id,
|
|
@@ -15341,7 +15277,7 @@ class EnvelopeSecurityHandler {
|
|
|
15341
15277
|
const shouldEncrypt = this.securityPolicy
|
|
15342
15278
|
? await this.securityPolicy.shouldEncryptEnvelope(envelope, context, this.node)
|
|
15343
15279
|
: false;
|
|
15344
|
-
logger
|
|
15280
|
+
logger$10.debug('checking_encryption', {
|
|
15345
15281
|
has_encryption_manager: Boolean(this.encryptionManager),
|
|
15346
15282
|
should_encrypt: shouldEncrypt,
|
|
15347
15283
|
envp_id: envelope.id,
|
|
@@ -15349,7 +15285,7 @@ class EnvelopeSecurityHandler {
|
|
|
15349
15285
|
});
|
|
15350
15286
|
if (this.encryptionManager && this.securityPolicy) {
|
|
15351
15287
|
if (envelope.sec?.enc) {
|
|
15352
|
-
logger
|
|
15288
|
+
logger$10.debug('skipping_encryption_already_encrypted', {
|
|
15353
15289
|
envp_id: envelope.id,
|
|
15354
15290
|
destination: envelope.to ? String(envelope.to) : undefined,
|
|
15355
15291
|
});
|
|
@@ -15362,7 +15298,7 @@ class EnvelopeSecurityHandler {
|
|
|
15362
15298
|
CryptoLevel.PLAINTEXT;
|
|
15363
15299
|
desiredCryptoLevel =
|
|
15364
15300
|
await this.securityPolicy.decideResponseCryptoLevel(requestCryptoLevel, envelope, context);
|
|
15365
|
-
logger
|
|
15301
|
+
logger$10.debug('response_crypto_level_decided', {
|
|
15366
15302
|
envp_id: envelope.id,
|
|
15367
15303
|
crypto_level: desiredCryptoLevel,
|
|
15368
15304
|
destination: envelope.to ? String(envelope.to) : undefined,
|
|
@@ -15373,7 +15309,7 @@ class EnvelopeSecurityHandler {
|
|
|
15373
15309
|
else {
|
|
15374
15310
|
desiredCryptoLevel =
|
|
15375
15311
|
await this.securityPolicy.decideOutboundCryptoLevel(envelope, context, this.node);
|
|
15376
|
-
logger
|
|
15312
|
+
logger$10.debug('outbound_crypto_level_decided', {
|
|
15377
15313
|
envp_id: envelope.id,
|
|
15378
15314
|
frame_type: envelope.frame.type,
|
|
15379
15315
|
crypto_level: desiredCryptoLevel,
|
|
@@ -15381,11 +15317,11 @@ class EnvelopeSecurityHandler {
|
|
|
15381
15317
|
});
|
|
15382
15318
|
}
|
|
15383
15319
|
if (desiredCryptoLevel === CryptoLevel.SEALED) {
|
|
15384
|
-
logger
|
|
15320
|
+
logger$10.debug('applying_sealed_encryption', { envp_id: envelope.id });
|
|
15385
15321
|
return await this.handleSealedEncryption(envelope, context);
|
|
15386
15322
|
}
|
|
15387
15323
|
if (desiredCryptoLevel === CryptoLevel.CHANNEL) {
|
|
15388
|
-
logger
|
|
15324
|
+
logger$10.debug('applying_channel_encryption', { envp_id: envelope.id });
|
|
15389
15325
|
return await this.handleChannelEncryption(envelope, context);
|
|
15390
15326
|
}
|
|
15391
15327
|
}
|
|
@@ -15436,7 +15372,7 @@ class EnvelopeSecurityHandler {
|
|
|
15436
15372
|
frameType === 'KeyAnnounce' ||
|
|
15437
15373
|
frameType === 'SecureOpen' ||
|
|
15438
15374
|
frameType === 'SecureAccept') {
|
|
15439
|
-
logger
|
|
15375
|
+
logger$10.error('critical_frame_unsigned_rejected', {
|
|
15440
15376
|
envp_id: envelope.id,
|
|
15441
15377
|
frame_type: frameType,
|
|
15442
15378
|
reason: 'critical_frames_must_be_signed',
|
|
@@ -15444,7 +15380,7 @@ class EnvelopeSecurityHandler {
|
|
|
15444
15380
|
return [envelope, false];
|
|
15445
15381
|
}
|
|
15446
15382
|
const action = this.securityPolicy.getUnsignedViolationAction(envelope, context);
|
|
15447
|
-
logger
|
|
15383
|
+
logger$10.warning('unsigned_envelope_violation', {
|
|
15448
15384
|
envp_id: envelope.id,
|
|
15449
15385
|
frame_type: frameType,
|
|
15450
15386
|
action,
|
|
@@ -15456,26 +15392,26 @@ class EnvelopeSecurityHandler {
|
|
|
15456
15392
|
return [envelope, true];
|
|
15457
15393
|
}
|
|
15458
15394
|
async handleChannelHandshakeComplete(channelId, destination) {
|
|
15459
|
-
logger
|
|
15395
|
+
logger$10.debug('channel_handshake_completed', {
|
|
15460
15396
|
channel_id: channelId,
|
|
15461
15397
|
destination,
|
|
15462
15398
|
});
|
|
15463
15399
|
if (this.encryptionManager?.notifyChannelEstablished) {
|
|
15464
15400
|
await this.encryptionManager.notifyChannelEstablished(channelId);
|
|
15465
|
-
logger
|
|
15401
|
+
logger$10.debug('notified_encryption_manager_channel_ready', {
|
|
15466
15402
|
channel_id: channelId,
|
|
15467
15403
|
});
|
|
15468
15404
|
}
|
|
15469
15405
|
}
|
|
15470
15406
|
async handleChannelHandshakeFailed(channelId, destination, reason = 'handshake_failed') {
|
|
15471
|
-
logger
|
|
15407
|
+
logger$10.debug('channel_handshake_failed', {
|
|
15472
15408
|
channel_id: channelId,
|
|
15473
15409
|
destination,
|
|
15474
15410
|
reason,
|
|
15475
15411
|
});
|
|
15476
15412
|
if (this.encryptionManager?.notifyChannelFailed) {
|
|
15477
15413
|
await this.encryptionManager.notifyChannelFailed(channelId, reason);
|
|
15478
|
-
logger
|
|
15414
|
+
logger$10.debug('notified_encryption_manager_channel_failed', {
|
|
15479
15415
|
channel_id: channelId,
|
|
15480
15416
|
reason,
|
|
15481
15417
|
});
|
|
@@ -15522,7 +15458,7 @@ class EnvelopeSecurityHandler {
|
|
|
15522
15458
|
checkPayload: false,
|
|
15523
15459
|
});
|
|
15524
15460
|
if (verified) {
|
|
15525
|
-
logger
|
|
15461
|
+
logger$10.debug('envelope_verified', {
|
|
15526
15462
|
envp_id: envelope.id,
|
|
15527
15463
|
sid: envelope.sid,
|
|
15528
15464
|
kid,
|
|
@@ -15533,7 +15469,7 @@ class EnvelopeSecurityHandler {
|
|
|
15533
15469
|
}
|
|
15534
15470
|
this.keyManagementHandler.queuePendingSignedEnvelope(kid, envelope, context);
|
|
15535
15471
|
await this.keyManagementHandler.maybeRequestSigningKey(kid, context.originType, fromSystemId);
|
|
15536
|
-
logger
|
|
15472
|
+
logger$10.debug('queued_envelope_missing_signing_key', {
|
|
15537
15473
|
kid,
|
|
15538
15474
|
envp_id: envelope.id,
|
|
15539
15475
|
});
|
|
@@ -15541,7 +15477,7 @@ class EnvelopeSecurityHandler {
|
|
|
15541
15477
|
}
|
|
15542
15478
|
async handleSealedEncryption(envelope, context) {
|
|
15543
15479
|
if (!envelope.to) {
|
|
15544
|
-
logger
|
|
15480
|
+
logger$10.warning('sealed_encryption_requested_but_no_destination', {
|
|
15545
15481
|
envp_id: envelope.id,
|
|
15546
15482
|
});
|
|
15547
15483
|
return true;
|
|
@@ -15553,20 +15489,20 @@ class EnvelopeSecurityHandler {
|
|
|
15553
15489
|
: undefined;
|
|
15554
15490
|
if (options) {
|
|
15555
15491
|
if (options.encryptionType === 'channel') {
|
|
15556
|
-
logger
|
|
15492
|
+
logger$10.warning('policy_returned_channel_for_sealed_request', {
|
|
15557
15493
|
envp_id: envelope.id,
|
|
15558
15494
|
});
|
|
15559
15495
|
return await this.handleToBeEncryptedEnvelopeWithOptions(envelope, context, normalizeEncryptionOptions({
|
|
15560
15496
|
requestAddress: envelope.to,
|
|
15561
15497
|
}));
|
|
15562
15498
|
}
|
|
15563
|
-
logger
|
|
15499
|
+
logger$10.debug('using_sealed_encryption_options', {
|
|
15564
15500
|
envp_id: envelope.id,
|
|
15565
15501
|
options,
|
|
15566
15502
|
});
|
|
15567
15503
|
return await this.handleToBeEncryptedEnvelopeWithOptions(envelope, context, options);
|
|
15568
15504
|
}
|
|
15569
|
-
logger
|
|
15505
|
+
logger$10.debug('no_encryption_options_requesting_key', {
|
|
15570
15506
|
envp_id: envelope.id,
|
|
15571
15507
|
});
|
|
15572
15508
|
return await this.handleToBeEncryptedEnvelopeWithOptions(envelope, context, normalizeEncryptionOptions({
|
|
@@ -15574,7 +15510,7 @@ class EnvelopeSecurityHandler {
|
|
|
15574
15510
|
}));
|
|
15575
15511
|
}
|
|
15576
15512
|
catch (error) {
|
|
15577
|
-
logger
|
|
15513
|
+
logger$10.debug('sealed_key_lookup_failed_requesting', {
|
|
15578
15514
|
envp_id: envelope.id,
|
|
15579
15515
|
error: error instanceof Error ? error.message : String(error),
|
|
15580
15516
|
});
|
|
@@ -15585,7 +15521,7 @@ class EnvelopeSecurityHandler {
|
|
|
15585
15521
|
}
|
|
15586
15522
|
async handleChannelEncryption(envelope, context) {
|
|
15587
15523
|
if (!envelope.to) {
|
|
15588
|
-
logger
|
|
15524
|
+
logger$10.warning('channel_encryption_requested_but_no_destination', {
|
|
15589
15525
|
envp_id: envelope.id,
|
|
15590
15526
|
});
|
|
15591
15527
|
return true;
|
|
@@ -15600,13 +15536,13 @@ class EnvelopeSecurityHandler {
|
|
|
15600
15536
|
return true;
|
|
15601
15537
|
}
|
|
15602
15538
|
if (context.originType !== DeliveryOriginType.LOCAL) {
|
|
15603
|
-
logger
|
|
15539
|
+
logger$10.warning('envelope_encryption_rejected_non_local', {
|
|
15604
15540
|
origin: context.originType,
|
|
15605
15541
|
});
|
|
15606
15542
|
return true;
|
|
15607
15543
|
}
|
|
15608
15544
|
if (!isDataFrame$4(envelope.frame)) {
|
|
15609
|
-
logger
|
|
15545
|
+
logger$10.trace('skipping_encryption_non_dataframe', {
|
|
15610
15546
|
envp_id: envelope.id,
|
|
15611
15547
|
frame_type: envelope.frame.type,
|
|
15612
15548
|
});
|
|
@@ -15617,7 +15553,7 @@ class EnvelopeSecurityHandler {
|
|
|
15617
15553
|
? normalizeEncryptionOptions(rawOptions)
|
|
15618
15554
|
: undefined;
|
|
15619
15555
|
if (!options) {
|
|
15620
|
-
logger
|
|
15556
|
+
logger$10.warning('no_encryption_options_provided', {
|
|
15621
15557
|
envp_id: envelope.id,
|
|
15622
15558
|
});
|
|
15623
15559
|
return true;
|
|
@@ -15629,13 +15565,13 @@ class EnvelopeSecurityHandler {
|
|
|
15629
15565
|
return true;
|
|
15630
15566
|
}
|
|
15631
15567
|
if (context.originType !== DeliveryOriginType.LOCAL) {
|
|
15632
|
-
logger
|
|
15568
|
+
logger$10.warning('envelope_encryption_rejected_non_local', {
|
|
15633
15569
|
origin: context.originType,
|
|
15634
15570
|
});
|
|
15635
15571
|
return true;
|
|
15636
15572
|
}
|
|
15637
15573
|
if (!isDataFrame$4(envelope.frame)) {
|
|
15638
|
-
logger
|
|
15574
|
+
logger$10.trace('skipping_encryption_non_dataframe', {
|
|
15639
15575
|
envp_id: envelope.id,
|
|
15640
15576
|
frame_type: envelope.frame.type,
|
|
15641
15577
|
});
|
|
@@ -15652,7 +15588,7 @@ class EnvelopeSecurityHandler {
|
|
|
15652
15588
|
// Skip encryption if envelope is already encrypted
|
|
15653
15589
|
// This prevents re-queuing when replayed envelopes go through security again
|
|
15654
15590
|
if (envelope.sec?.enc) {
|
|
15655
|
-
logger
|
|
15591
|
+
logger$10.debug('skipping_encryption_already_encrypted', {
|
|
15656
15592
|
envp_id: envelope.id,
|
|
15657
15593
|
destination: envelope.to ? String(envelope.to) : undefined,
|
|
15658
15594
|
});
|
|
@@ -15661,14 +15597,14 @@ class EnvelopeSecurityHandler {
|
|
|
15661
15597
|
try {
|
|
15662
15598
|
const result = await this.encryptionManager.encryptEnvelope(envelope, normalizedOptions);
|
|
15663
15599
|
if (result.status === EncryptionStatus.QUEUED) {
|
|
15664
|
-
logger
|
|
15600
|
+
logger$10.debug('envelope_queued_for_encryption', {
|
|
15665
15601
|
envp_id: envelope.id,
|
|
15666
15602
|
});
|
|
15667
15603
|
await this.handleEncryptionQueueing(envelope, context, normalizedOptions);
|
|
15668
15604
|
return false;
|
|
15669
15605
|
}
|
|
15670
15606
|
if (result.status === EncryptionStatus.OK) {
|
|
15671
|
-
logger
|
|
15607
|
+
logger$10.debug('envelope_encrypted', { envp_id: envelope.id });
|
|
15672
15608
|
if (result.envelope) {
|
|
15673
15609
|
envelope.frame = result.envelope.frame;
|
|
15674
15610
|
envelope.sec = result.envelope.sec;
|
|
@@ -15676,17 +15612,17 @@ class EnvelopeSecurityHandler {
|
|
|
15676
15612
|
return true;
|
|
15677
15613
|
}
|
|
15678
15614
|
if (result.status === EncryptionStatus.SKIPPED) {
|
|
15679
|
-
logger
|
|
15615
|
+
logger$10.debug('envelope_encryption_skipped', { envp_id: envelope.id });
|
|
15680
15616
|
return true;
|
|
15681
15617
|
}
|
|
15682
|
-
logger
|
|
15618
|
+
logger$10.warning('unknown_encryption_status', {
|
|
15683
15619
|
envp_id: envelope.id,
|
|
15684
15620
|
status: result.status,
|
|
15685
15621
|
});
|
|
15686
15622
|
return true;
|
|
15687
15623
|
}
|
|
15688
15624
|
catch (error) {
|
|
15689
|
-
logger
|
|
15625
|
+
logger$10.error('encryption_failed', {
|
|
15690
15626
|
envp_id: envelope.id,
|
|
15691
15627
|
error: error instanceof Error ? error.message : String(error),
|
|
15692
15628
|
});
|
|
@@ -15725,7 +15661,7 @@ class EnvelopeSecurityHandler {
|
|
|
15725
15661
|
return;
|
|
15726
15662
|
}
|
|
15727
15663
|
if (normalizedOptions.encryptionType === 'channel') {
|
|
15728
|
-
logger
|
|
15664
|
+
logger$10.debug('channel_encryption_queueing_handled_internally', {
|
|
15729
15665
|
envp_id: envelope.id,
|
|
15730
15666
|
destination: normalizedOptions.destination
|
|
15731
15667
|
? String(normalizedOptions.destination)
|
|
@@ -15733,13 +15669,13 @@ class EnvelopeSecurityHandler {
|
|
|
15733
15669
|
});
|
|
15734
15670
|
return;
|
|
15735
15671
|
}
|
|
15736
|
-
logger
|
|
15672
|
+
logger$10.warning('unknown_encryption_queueing_options', {
|
|
15737
15673
|
envp_id: envelope.id,
|
|
15738
15674
|
options: normalizedOptions,
|
|
15739
15675
|
});
|
|
15740
15676
|
}
|
|
15741
15677
|
async handleFailedChannelEnvelopeCleanup(destination, reason) {
|
|
15742
|
-
logger
|
|
15678
|
+
logger$10.debug('channel_handshake_failure_cleanup_attempted', {
|
|
15743
15679
|
destination,
|
|
15744
15680
|
reason,
|
|
15745
15681
|
note: 'envelope_cleanup_handled_by_encryption_manager',
|
|
@@ -15750,7 +15686,7 @@ class EnvelopeSecurityHandler {
|
|
|
15750
15686
|
}
|
|
15751
15687
|
}
|
|
15752
15688
|
|
|
15753
|
-
const logger
|
|
15689
|
+
const logger$$ = getLogger('naylence.fame.node.secure_channel_frame_handler');
|
|
15754
15690
|
function isPlainRecord$1(value) {
|
|
15755
15691
|
if (typeof value !== 'object' || value === null) {
|
|
15756
15692
|
return false;
|
|
@@ -15840,7 +15776,7 @@ class SecureChannelFrameHandler {
|
|
|
15840
15776
|
assertSecureChannelManager(this.secureChannelManager);
|
|
15841
15777
|
const frame = envelope.frame;
|
|
15842
15778
|
assertFrameType(frame, 'SecureOpen');
|
|
15843
|
-
logger
|
|
15779
|
+
logger$$.debug('received_secure_open', {
|
|
15844
15780
|
cid: frame.cid,
|
|
15845
15781
|
algorithm: frame.alg,
|
|
15846
15782
|
});
|
|
@@ -15863,13 +15799,13 @@ class SecureChannelFrameHandler {
|
|
|
15863
15799
|
stickySid: envelope.sid ?? undefined,
|
|
15864
15800
|
expectedResponseType: FameResponseType.NONE,
|
|
15865
15801
|
};
|
|
15866
|
-
logger
|
|
15802
|
+
logger$$.debug('stickiness_requested_for_channel_encryption', {
|
|
15867
15803
|
cid: frame.cid,
|
|
15868
15804
|
reason: 'secure_channel_established',
|
|
15869
15805
|
});
|
|
15870
15806
|
}
|
|
15871
15807
|
await this.sendCallback(responseEnvelope, responseContext);
|
|
15872
|
-
logger
|
|
15808
|
+
logger$$.debug('sent_secure_accept', { cid: frame.cid, ok: acceptFrame.ok });
|
|
15873
15809
|
if (acceptFrame.ok && this.envelopeSecurityHandler) {
|
|
15874
15810
|
const destination = extractDestinationFromChannelId(frame.cid);
|
|
15875
15811
|
if (destination) {
|
|
@@ -15881,13 +15817,13 @@ class SecureChannelFrameHandler {
|
|
|
15881
15817
|
assertSecureChannelManager(this.secureChannelManager);
|
|
15882
15818
|
const frame = envelope.frame;
|
|
15883
15819
|
assertFrameType(frame, 'SecureAccept');
|
|
15884
|
-
logger
|
|
15820
|
+
logger$$.debug('received_secure_accept', { cid: frame.cid, ok: frame.ok });
|
|
15885
15821
|
const success = await this.secureChannelManager.handleAcceptFrame(frame);
|
|
15886
15822
|
if (!success) {
|
|
15887
|
-
logger
|
|
15823
|
+
logger$$.warning('failed_to_complete_channel', { cid: frame.cid });
|
|
15888
15824
|
}
|
|
15889
15825
|
else {
|
|
15890
|
-
logger
|
|
15826
|
+
logger$$.debug('channel_established', { cid: frame.cid });
|
|
15891
15827
|
if (this.envelopeSecurityHandler) {
|
|
15892
15828
|
const destination = extractDestinationFromChannelId(frame.cid);
|
|
15893
15829
|
if (destination) {
|
|
@@ -15899,7 +15835,7 @@ class SecureChannelFrameHandler {
|
|
|
15899
15835
|
const destination = extractDestinationFromChannelId(frame.cid);
|
|
15900
15836
|
if (destination) {
|
|
15901
15837
|
await this.envelopeSecurityHandler.handleChannelHandshakeFailed(frame.cid, destination, 'negative_secure_accept');
|
|
15902
|
-
logger
|
|
15838
|
+
logger$$.debug('notified_handshake_failure', {
|
|
15903
15839
|
cid: frame.cid,
|
|
15904
15840
|
destination,
|
|
15905
15841
|
});
|
|
@@ -15910,7 +15846,7 @@ class SecureChannelFrameHandler {
|
|
|
15910
15846
|
assertSecureChannelManager(this.secureChannelManager);
|
|
15911
15847
|
const frame = envelope.frame;
|
|
15912
15848
|
assertFrameType(frame, 'SecureClose');
|
|
15913
|
-
logger
|
|
15849
|
+
logger$$.debug('received_secure_close', {
|
|
15914
15850
|
cid: frame.cid,
|
|
15915
15851
|
reason: frame.reason,
|
|
15916
15852
|
});
|
|
@@ -15968,7 +15904,7 @@ function createNodeDeliveryContext(options = {}) {
|
|
|
15968
15904
|
class FameEnvironmentContext {
|
|
15969
15905
|
}
|
|
15970
15906
|
|
|
15971
|
-
const FACTORY_META$
|
|
15907
|
+
const FACTORY_META$1b = {
|
|
15972
15908
|
base: NODE_IDENTITY_POLICY_FACTORY_BASE_TYPE,
|
|
15973
15909
|
key: 'DefaultNodeIdentityPolicy',
|
|
15974
15910
|
};
|
|
@@ -15986,11 +15922,48 @@ class DefaultNodeIdentityPolicyFactory extends NodeIdentityPolicyFactory {
|
|
|
15986
15922
|
var defaultNodeIdentityPolicyFactory = /*#__PURE__*/Object.freeze({
|
|
15987
15923
|
__proto__: null,
|
|
15988
15924
|
DefaultNodeIdentityPolicyFactory: DefaultNodeIdentityPolicyFactory,
|
|
15989
|
-
FACTORY_META: FACTORY_META$
|
|
15925
|
+
FACTORY_META: FACTORY_META$1b,
|
|
15990
15926
|
default: DefaultNodeIdentityPolicyFactory
|
|
15991
15927
|
});
|
|
15992
15928
|
|
|
15993
|
-
const
|
|
15929
|
+
const TOKEN_PROVIDER_FACTORY_BASE_TYPE = 'TokenProviderFactory';
|
|
15930
|
+
class TokenProviderFactory extends AbstractResourceFactory {
|
|
15931
|
+
static async createTokenProvider(config, options = {}) {
|
|
15932
|
+
if (config) {
|
|
15933
|
+
const provider = await createResource$1(TOKEN_PROVIDER_FACTORY_BASE_TYPE, config, options);
|
|
15934
|
+
if (!provider) {
|
|
15935
|
+
throw new Error('Failed to create token provider from configuration');
|
|
15936
|
+
}
|
|
15937
|
+
return provider;
|
|
15938
|
+
}
|
|
15939
|
+
let provider = null;
|
|
15940
|
+
try {
|
|
15941
|
+
provider = await createDefaultResource(TOKEN_PROVIDER_FACTORY_BASE_TYPE, null, options);
|
|
15942
|
+
}
|
|
15943
|
+
catch (error) {
|
|
15944
|
+
const message = 'Failed to create default token provider' +
|
|
15945
|
+
(error instanceof Error && error.message ? `: ${error.message}` : '');
|
|
15946
|
+
throw new Error(message);
|
|
15947
|
+
}
|
|
15948
|
+
if (!provider) {
|
|
15949
|
+
throw new Error('Failed to create default token provider');
|
|
15950
|
+
}
|
|
15951
|
+
return provider;
|
|
15952
|
+
}
|
|
15953
|
+
}
|
|
15954
|
+
|
|
15955
|
+
function isTokenProvider(candidate) {
|
|
15956
|
+
return (typeof candidate === 'object' &&
|
|
15957
|
+
candidate !== null &&
|
|
15958
|
+
typeof candidate.getToken === 'function');
|
|
15959
|
+
}
|
|
15960
|
+
function isIdentityExposingTokenProvider(candidate) {
|
|
15961
|
+
return (isTokenProvider(candidate) &&
|
|
15962
|
+
typeof candidate.getIdentity ===
|
|
15963
|
+
'function');
|
|
15964
|
+
}
|
|
15965
|
+
|
|
15966
|
+
const logger$_ = getLogger('naylence.fame.node.token_subject_node_identity_policy');
|
|
15994
15967
|
class TokenSubjectNodeIdentityPolicy {
|
|
15995
15968
|
async resolveInitialNodeId(context) {
|
|
15996
15969
|
if (context.configuredId) {
|
|
@@ -16002,7 +15975,7 @@ class TokenSubjectNodeIdentityPolicy {
|
|
|
16002
15975
|
return generateIdAsync();
|
|
16003
15976
|
}
|
|
16004
15977
|
async resolveAdmissionNodeId(context) {
|
|
16005
|
-
logger$
|
|
15978
|
+
logger$_.debug('resolve_admission_node_id_start', {
|
|
16006
15979
|
grantsCount: context.grants?.length ?? 0,
|
|
16007
15980
|
currentNodeId: context.currentNodeId,
|
|
16008
15981
|
});
|
|
@@ -16011,31 +15984,31 @@ class TokenSubjectNodeIdentityPolicy {
|
|
|
16011
15984
|
try {
|
|
16012
15985
|
const auth = grant.auth;
|
|
16013
15986
|
if (!auth) {
|
|
16014
|
-
logger$
|
|
15987
|
+
logger$_.debug('skipping_grant_no_auth', { grantType: grant.type });
|
|
16015
15988
|
continue;
|
|
16016
15989
|
}
|
|
16017
15990
|
const tokenProviderConfig = (auth.tokenProvider ??
|
|
16018
15991
|
auth.token_provider);
|
|
16019
15992
|
if (!tokenProviderConfig ||
|
|
16020
15993
|
typeof tokenProviderConfig.type !== 'string') {
|
|
16021
|
-
logger$
|
|
15994
|
+
logger$_.debug('skipping_grant_invalid_token_provider_config', {
|
|
16022
15995
|
grantType: grant.type,
|
|
16023
15996
|
config: tokenProviderConfig,
|
|
16024
15997
|
});
|
|
16025
15998
|
continue;
|
|
16026
15999
|
}
|
|
16027
|
-
logger$
|
|
16000
|
+
logger$_.debug('creating_token_provider', {
|
|
16028
16001
|
type: tokenProviderConfig.type,
|
|
16029
16002
|
});
|
|
16030
16003
|
const provider = await TokenProviderFactory.createTokenProvider(tokenProviderConfig);
|
|
16031
16004
|
const isExposing = isIdentityExposingTokenProvider(provider);
|
|
16032
|
-
logger$
|
|
16005
|
+
logger$_.debug('token_provider_created', {
|
|
16033
16006
|
type: tokenProviderConfig.type,
|
|
16034
16007
|
isIdentityExposing: isExposing,
|
|
16035
16008
|
});
|
|
16036
16009
|
if (isExposing) {
|
|
16037
16010
|
const identity = await provider.getIdentity();
|
|
16038
|
-
logger$
|
|
16011
|
+
logger$_.debug('retrieved_identity', { identity });
|
|
16039
16012
|
if (identity && identity.subject) {
|
|
16040
16013
|
const hashedSubject = await generateIdAsync({
|
|
16041
16014
|
mode: 'fingerprint',
|
|
@@ -16043,7 +16016,7 @@ class TokenSubjectNodeIdentityPolicy {
|
|
|
16043
16016
|
length: 8,
|
|
16044
16017
|
});
|
|
16045
16018
|
const newNodeId = `${hashedSubject}-${context.currentNodeId}`;
|
|
16046
|
-
logger$
|
|
16019
|
+
logger$_.info('resolved_identity_from_token', {
|
|
16047
16020
|
subject: identity.subject,
|
|
16048
16021
|
hashedSubject,
|
|
16049
16022
|
newNodeId,
|
|
@@ -16051,17 +16024,17 @@ class TokenSubjectNodeIdentityPolicy {
|
|
|
16051
16024
|
return newNodeId;
|
|
16052
16025
|
}
|
|
16053
16026
|
else {
|
|
16054
|
-
logger$
|
|
16027
|
+
logger$_.debug('identity_missing_subject', { identity });
|
|
16055
16028
|
}
|
|
16056
16029
|
}
|
|
16057
16030
|
}
|
|
16058
16031
|
catch (err) {
|
|
16059
|
-
logger$
|
|
16032
|
+
logger$_.warning('failed_to_extract_identity_from_grant', { error: err });
|
|
16060
16033
|
}
|
|
16061
16034
|
}
|
|
16062
16035
|
}
|
|
16063
16036
|
else {
|
|
16064
|
-
logger$
|
|
16037
|
+
logger$_.debug('no_grants_available');
|
|
16065
16038
|
}
|
|
16066
16039
|
return context.currentNodeId;
|
|
16067
16040
|
}
|
|
@@ -16072,7 +16045,7 @@ var tokenSubjectNodeIdentityPolicy = /*#__PURE__*/Object.freeze({
|
|
|
16072
16045
|
TokenSubjectNodeIdentityPolicy: TokenSubjectNodeIdentityPolicy
|
|
16073
16046
|
});
|
|
16074
16047
|
|
|
16075
|
-
const FACTORY_META$
|
|
16048
|
+
const FACTORY_META$1a = {
|
|
16076
16049
|
base: NODE_IDENTITY_POLICY_FACTORY_BASE_TYPE,
|
|
16077
16050
|
key: 'TokenSubjectNodeIdentityPolicy',
|
|
16078
16051
|
};
|
|
@@ -16091,27 +16064,27 @@ class TokenSubjectNodeIdentityPolicyFactory extends NodeIdentityPolicyFactory {
|
|
|
16091
16064
|
|
|
16092
16065
|
var tokenSubjectNodeIdentityPolicyFactory = /*#__PURE__*/Object.freeze({
|
|
16093
16066
|
__proto__: null,
|
|
16094
|
-
FACTORY_META: FACTORY_META$
|
|
16067
|
+
FACTORY_META: FACTORY_META$1a,
|
|
16095
16068
|
TokenSubjectNodeIdentityPolicyFactory: TokenSubjectNodeIdentityPolicyFactory,
|
|
16096
16069
|
default: TokenSubjectNodeIdentityPolicyFactory
|
|
16097
16070
|
});
|
|
16098
16071
|
|
|
16099
|
-
const logger$
|
|
16100
|
-
const PROFILE_NAME_DEFAULT = 'default';
|
|
16072
|
+
const logger$Z = getLogger('naylence.fame.node.node_identity_policy_profile_factory');
|
|
16073
|
+
const PROFILE_NAME_DEFAULT$1 = 'default';
|
|
16101
16074
|
const PROFILE_NAME_TOKEN_SUBJECT = 'token-subject';
|
|
16102
16075
|
const PROFILE_NAME_TOKEN_SUBJECT_ALIAS = 'token_subject';
|
|
16103
|
-
const DEFAULT_PROFILE = {
|
|
16076
|
+
const DEFAULT_PROFILE$1 = {
|
|
16104
16077
|
type: 'DefaultNodeIdentityPolicy',
|
|
16105
16078
|
};
|
|
16106
16079
|
const TOKEN_SUBJECT_PROFILE = {
|
|
16107
16080
|
type: 'TokenSubjectNodeIdentityPolicy',
|
|
16108
16081
|
};
|
|
16109
|
-
const PROFILE_MAP$
|
|
16110
|
-
[PROFILE_NAME_DEFAULT]: DEFAULT_PROFILE,
|
|
16082
|
+
const PROFILE_MAP$6 = {
|
|
16083
|
+
[PROFILE_NAME_DEFAULT$1]: DEFAULT_PROFILE$1,
|
|
16111
16084
|
[PROFILE_NAME_TOKEN_SUBJECT]: TOKEN_SUBJECT_PROFILE,
|
|
16112
16085
|
[PROFILE_NAME_TOKEN_SUBJECT_ALIAS]: TOKEN_SUBJECT_PROFILE,
|
|
16113
16086
|
};
|
|
16114
|
-
const FACTORY_META$
|
|
16087
|
+
const FACTORY_META$19 = {
|
|
16115
16088
|
base: NODE_IDENTITY_POLICY_FACTORY_BASE_TYPE,
|
|
16116
16089
|
key: 'NodeIdentityPolicyProfile',
|
|
16117
16090
|
};
|
|
@@ -16121,17 +16094,17 @@ class NodeIdentityPolicyProfileFactory extends NodeIdentityPolicyFactory {
|
|
|
16121
16094
|
this.type = 'NodeIdentityPolicyProfile';
|
|
16122
16095
|
}
|
|
16123
16096
|
async create(config) {
|
|
16124
|
-
const normalized = normalizeConfig$
|
|
16125
|
-
const profileConfig = resolveProfileConfig$
|
|
16126
|
-
logger$
|
|
16097
|
+
const normalized = normalizeConfig$x(config);
|
|
16098
|
+
const profileConfig = resolveProfileConfig$5(normalized.profile);
|
|
16099
|
+
logger$Z.debug('enabling_node_identity_policy_profile', {
|
|
16127
16100
|
profile: normalized.profile,
|
|
16128
16101
|
});
|
|
16129
16102
|
return NodeIdentityPolicyFactory.createNodeIdentityPolicy(profileConfig);
|
|
16130
16103
|
}
|
|
16131
16104
|
}
|
|
16132
|
-
function normalizeConfig$
|
|
16105
|
+
function normalizeConfig$x(config) {
|
|
16133
16106
|
if (!config) {
|
|
16134
|
-
return { profile: PROFILE_NAME_DEFAULT };
|
|
16107
|
+
return { profile: PROFILE_NAME_DEFAULT$1 };
|
|
16135
16108
|
}
|
|
16136
16109
|
const candidate = config;
|
|
16137
16110
|
const profileValue = typeof candidate.profile === 'string' && candidate.profile.trim().length > 0
|
|
@@ -16142,24 +16115,24 @@ function normalizeConfig$w(config) {
|
|
|
16142
16115
|
: typeof candidate.profileName === 'string' &&
|
|
16143
16116
|
candidate.profileName.trim().length > 0
|
|
16144
16117
|
? candidate.profileName
|
|
16145
|
-
: PROFILE_NAME_DEFAULT;
|
|
16118
|
+
: PROFILE_NAME_DEFAULT$1;
|
|
16146
16119
|
const normalizedProfile = profileValue.trim().toLowerCase();
|
|
16147
16120
|
return { profile: normalizedProfile };
|
|
16148
16121
|
}
|
|
16149
|
-
function resolveProfileConfig$
|
|
16150
|
-
const profile = PROFILE_MAP$
|
|
16122
|
+
function resolveProfileConfig$5(profileName) {
|
|
16123
|
+
const profile = PROFILE_MAP$6[profileName];
|
|
16151
16124
|
if (!profile) {
|
|
16152
16125
|
throw new Error(`Unknown node identity policy profile: ${profileName}`);
|
|
16153
16126
|
}
|
|
16154
|
-
return deepClone$
|
|
16127
|
+
return deepClone$5(profile);
|
|
16155
16128
|
}
|
|
16156
|
-
function deepClone$
|
|
16129
|
+
function deepClone$5(value) {
|
|
16157
16130
|
return JSON.parse(JSON.stringify(value));
|
|
16158
16131
|
}
|
|
16159
16132
|
|
|
16160
16133
|
var nodeIdentityPolicyProfileFactory = /*#__PURE__*/Object.freeze({
|
|
16161
16134
|
__proto__: null,
|
|
16162
|
-
FACTORY_META: FACTORY_META$
|
|
16135
|
+
FACTORY_META: FACTORY_META$19,
|
|
16163
16136
|
NodeIdentityPolicyProfileFactory: NodeIdentityPolicyProfileFactory,
|
|
16164
16137
|
default: NodeIdentityPolicyProfileFactory
|
|
16165
16138
|
});
|
|
@@ -16212,8 +16185,8 @@ class DefaultConnectionRetryPolicy {
|
|
|
16212
16185
|
}
|
|
16213
16186
|
}
|
|
16214
16187
|
|
|
16215
|
-
const logger$
|
|
16216
|
-
const FACTORY_META$
|
|
16188
|
+
const logger$Y = getLogger('naylence.fame.node.default-connection-retry-policy-factory');
|
|
16189
|
+
const FACTORY_META$18 = {
|
|
16217
16190
|
base: CONNECTION_RETRY_POLICY_FACTORY_BASE_TYPE,
|
|
16218
16191
|
key: 'DefaultConnectionRetryPolicy',
|
|
16219
16192
|
};
|
|
@@ -16234,7 +16207,7 @@ class DefaultConnectionRetryPolicyFactory extends ConnectionRetryPolicyFactory {
|
|
|
16234
16207
|
}
|
|
16235
16208
|
}
|
|
16236
16209
|
const policy = new DefaultConnectionRetryPolicy(options);
|
|
16237
|
-
logger$
|
|
16210
|
+
logger$Y.debug('connection_retry_policy_created', {
|
|
16238
16211
|
maxInitialAttempts: policy.maxInitialAttempts,
|
|
16239
16212
|
});
|
|
16240
16213
|
return policy;
|
|
@@ -16244,7 +16217,7 @@ class DefaultConnectionRetryPolicyFactory extends ConnectionRetryPolicyFactory {
|
|
|
16244
16217
|
var defaultConnectionRetryPolicyFactory = /*#__PURE__*/Object.freeze({
|
|
16245
16218
|
__proto__: null,
|
|
16246
16219
|
DefaultConnectionRetryPolicyFactory: DefaultConnectionRetryPolicyFactory,
|
|
16247
|
-
FACTORY_META: FACTORY_META$
|
|
16220
|
+
FACTORY_META: FACTORY_META$18,
|
|
16248
16221
|
default: DefaultConnectionRetryPolicyFactory
|
|
16249
16222
|
});
|
|
16250
16223
|
|
|
@@ -16259,7 +16232,7 @@ class LoadBalancerStickinessManagerFactory extends AbstractResourceFactory {
|
|
|
16259
16232
|
}
|
|
16260
16233
|
}
|
|
16261
16234
|
|
|
16262
|
-
const logger$
|
|
16235
|
+
const logger$X = getLogger('naylence.fame.sentinel.load_balancing.composite_load_balancing_strategy');
|
|
16263
16236
|
class CompositeLoadBalancingStrategy {
|
|
16264
16237
|
constructor(strategies) {
|
|
16265
16238
|
if (!strategies.length) {
|
|
@@ -16276,7 +16249,7 @@ class CompositeLoadBalancingStrategy {
|
|
|
16276
16249
|
try {
|
|
16277
16250
|
const result = strategy.choose(poolKey, segments, envelope);
|
|
16278
16251
|
if (result !== null) {
|
|
16279
|
-
logger$
|
|
16252
|
+
logger$X.debug('composite_strategy_success', {
|
|
16280
16253
|
envelopeId: envelope.id,
|
|
16281
16254
|
poolKey,
|
|
16282
16255
|
strategyIndex: index,
|
|
@@ -16287,7 +16260,7 @@ class CompositeLoadBalancingStrategy {
|
|
|
16287
16260
|
}
|
|
16288
16261
|
}
|
|
16289
16262
|
catch (error) {
|
|
16290
|
-
logger$
|
|
16263
|
+
logger$X.warning('composite_strategy_error', {
|
|
16291
16264
|
envelopeId: envelope.id,
|
|
16292
16265
|
poolKey,
|
|
16293
16266
|
strategyIndex: index,
|
|
@@ -16296,7 +16269,7 @@ class CompositeLoadBalancingStrategy {
|
|
|
16296
16269
|
});
|
|
16297
16270
|
}
|
|
16298
16271
|
}
|
|
16299
|
-
logger$
|
|
16272
|
+
logger$X.debug('composite_strategy_all_failed', {
|
|
16300
16273
|
envelopeId: envelope.id,
|
|
16301
16274
|
poolKey,
|
|
16302
16275
|
strategyCount: this.strategies.length,
|
|
@@ -16305,7 +16278,7 @@ class CompositeLoadBalancingStrategy {
|
|
|
16305
16278
|
}
|
|
16306
16279
|
}
|
|
16307
16280
|
|
|
16308
|
-
const logger$
|
|
16281
|
+
const logger$W = getLogger('naylence.fame.sentinel.load_balancing.sticky_load_balancing_strategy');
|
|
16309
16282
|
class StickyLoadBalancingStrategy {
|
|
16310
16283
|
constructor(stickinessManager) {
|
|
16311
16284
|
this.lastChosenReplica = null;
|
|
@@ -16320,7 +16293,7 @@ class StickyLoadBalancingStrategy {
|
|
|
16320
16293
|
}
|
|
16321
16294
|
const stickyReplica = this.stickinessManager.getStickyReplicaSegment(envelope, segments);
|
|
16322
16295
|
if (stickyReplica && segments.includes(stickyReplica)) {
|
|
16323
|
-
logger$
|
|
16296
|
+
logger$W.debug('routing_via_stickiness', {
|
|
16324
16297
|
envelopeId: envelope.id,
|
|
16325
16298
|
poolKey,
|
|
16326
16299
|
replicaId: stickyReplica,
|
|
@@ -16330,7 +16303,7 @@ class StickyLoadBalancingStrategy {
|
|
|
16330
16303
|
this.lastChosenReplica = stickyReplica;
|
|
16331
16304
|
return stickyReplica;
|
|
16332
16305
|
}
|
|
16333
|
-
logger$
|
|
16306
|
+
logger$W.debug('no_stickiness_match_fallback', {
|
|
16334
16307
|
envelopeId: envelope.id,
|
|
16335
16308
|
poolKey,
|
|
16336
16309
|
aftPresent: Boolean(envelope.aft),
|
|
@@ -16418,7 +16391,7 @@ class RouteStoreFactory extends AbstractResourceFactory {
|
|
|
16418
16391
|
return store ?? null;
|
|
16419
16392
|
}
|
|
16420
16393
|
}
|
|
16421
|
-
const FACTORY_META$
|
|
16394
|
+
const FACTORY_META$17 = {
|
|
16422
16395
|
base: ROUTE_STORE_FACTORY_BASE_TYPE,
|
|
16423
16396
|
key: 'InMemoryRouteStore',
|
|
16424
16397
|
};
|
|
@@ -16436,7 +16409,7 @@ class InMemoryRouteStoreFactory extends RouteStoreFactory {
|
|
|
16436
16409
|
|
|
16437
16410
|
var routeStoreFactory = /*#__PURE__*/Object.freeze({
|
|
16438
16411
|
__proto__: null,
|
|
16439
|
-
FACTORY_META: FACTORY_META$
|
|
16412
|
+
FACTORY_META: FACTORY_META$17,
|
|
16440
16413
|
InMemoryRouteStoreFactory: InMemoryRouteStoreFactory,
|
|
16441
16414
|
ROUTE_STORE_FACTORY_BASE_TYPE: ROUTE_STORE_FACTORY_BASE_TYPE,
|
|
16442
16415
|
RouteStoreFactory: RouteStoreFactory,
|
|
@@ -16668,7 +16641,7 @@ function resolveRecordArray(primary, secondary) {
|
|
|
16668
16641
|
return pickRecordArray(candidate) ?? undefined;
|
|
16669
16642
|
}
|
|
16670
16643
|
|
|
16671
|
-
const logger$
|
|
16644
|
+
const logger$V = getLogger('naylence.fame.sentinel.route_manager');
|
|
16672
16645
|
const DEFAULT_CONNECTOR_CLEANUP_DELAY_MS$1 = 200;
|
|
16673
16646
|
function normalizeRouteManagerOptions(options) {
|
|
16674
16647
|
const { route_store, get_id, cleanup_delay_ms, retain_address_bindings_on_disconnect, ...rest } = options;
|
|
@@ -16752,7 +16725,7 @@ class RouteManager extends TaskSpawner {
|
|
|
16752
16725
|
await this.safeStop(entry.connector);
|
|
16753
16726
|
}
|
|
16754
16727
|
catch (error) {
|
|
16755
|
-
logger$
|
|
16728
|
+
logger$V.debug('pending_route_stop_failed', {
|
|
16756
16729
|
error: error instanceof Error ? error.message : String(error),
|
|
16757
16730
|
});
|
|
16758
16731
|
}
|
|
@@ -16775,7 +16748,7 @@ class RouteManager extends TaskSpawner {
|
|
|
16775
16748
|
this.cancelPendingCleanup(segment);
|
|
16776
16749
|
this.downstreamRoutes.set(segment, route);
|
|
16777
16750
|
});
|
|
16778
|
-
logger$
|
|
16751
|
+
logger$V.debug('registered_downstream_route', { route: segment });
|
|
16779
16752
|
}
|
|
16780
16753
|
async unregisterDownstreamRoute(segment, options) {
|
|
16781
16754
|
const normalizedOptions = normalizeRouteRemovalOptions(options);
|
|
@@ -16791,7 +16764,7 @@ class RouteManager extends TaskSpawner {
|
|
|
16791
16764
|
this.cancelPendingCleanup(segment);
|
|
16792
16765
|
this._peer_routes.set(segment, route);
|
|
16793
16766
|
});
|
|
16794
|
-
logger$
|
|
16767
|
+
logger$V.debug('registered_peer_route', { route: segment });
|
|
16795
16768
|
}
|
|
16796
16769
|
async unregisterPeerRoute(segment, options) {
|
|
16797
16770
|
const normalizedOptions = normalizeRouteRemovalOptions(options);
|
|
@@ -16809,11 +16782,11 @@ class RouteManager extends TaskSpawner {
|
|
|
16809
16782
|
await Promise.all(entryTuples.map(async ([segment, entry]) => {
|
|
16810
16783
|
const normalized = this.normalizeEntry(entry);
|
|
16811
16784
|
if (!normalized.connectorConfig) {
|
|
16812
|
-
logger$
|
|
16785
|
+
logger$V.warning('route_restore_missing_config', { segment });
|
|
16813
16786
|
return;
|
|
16814
16787
|
}
|
|
16815
16788
|
if (normalized.attachExpiresAt && normalized.attachExpiresAt < now) {
|
|
16816
|
-
logger$
|
|
16789
|
+
logger$V.debug('skipping_expired_route', { segment });
|
|
16817
16790
|
return;
|
|
16818
16791
|
}
|
|
16819
16792
|
const authorization = this.parseAuthorization(normalized.metadata);
|
|
@@ -16846,7 +16819,7 @@ class RouteManager extends TaskSpawner {
|
|
|
16846
16819
|
}
|
|
16847
16820
|
catch (error) {
|
|
16848
16821
|
if (this.isTransientError(error)) {
|
|
16849
|
-
logger$
|
|
16822
|
+
logger$V.warning('transient_restore_failure', {
|
|
16850
16823
|
segment,
|
|
16851
16824
|
attempt,
|
|
16852
16825
|
error: error instanceof Error ? error.message : String(error),
|
|
@@ -16855,7 +16828,7 @@ class RouteManager extends TaskSpawner {
|
|
|
16855
16828
|
backoff *= 2;
|
|
16856
16829
|
continue;
|
|
16857
16830
|
}
|
|
16858
|
-
logger$
|
|
16831
|
+
logger$V.error('failed_to_restore_route', {
|
|
16859
16832
|
segment,
|
|
16860
16833
|
error: error instanceof Error ? error.message : String(error),
|
|
16861
16834
|
});
|
|
@@ -16884,13 +16857,13 @@ class RouteManager extends TaskSpawner {
|
|
|
16884
16857
|
await this._downstream_route_store
|
|
16885
16858
|
.delete(segment)
|
|
16886
16859
|
.catch((error) => {
|
|
16887
|
-
logger$
|
|
16860
|
+
logger$V.warning('route_expiration_delete_failed', {
|
|
16888
16861
|
segment,
|
|
16889
16862
|
error: error instanceof Error ? error.message : String(error),
|
|
16890
16863
|
});
|
|
16891
16864
|
});
|
|
16892
16865
|
this.purgeRouteReferences(segment);
|
|
16893
|
-
logger$
|
|
16866
|
+
logger$V.debug('expired_route', { route: segment });
|
|
16894
16867
|
}
|
|
16895
16868
|
async removeDownstreamRoute(segment, options) {
|
|
16896
16869
|
const normalizedOptions = normalizeRouteRemovalOptions(options);
|
|
@@ -16948,7 +16921,7 @@ class RouteManager extends TaskSpawner {
|
|
|
16948
16921
|
this.purgeRouteReferences(segment);
|
|
16949
16922
|
}
|
|
16950
16923
|
await store.delete(segment).catch((error) => {
|
|
16951
|
-
logger$
|
|
16924
|
+
logger$V.warning('route_delete_failed', {
|
|
16952
16925
|
segment,
|
|
16953
16926
|
error: error instanceof Error ? error.message : String(error),
|
|
16954
16927
|
});
|
|
@@ -16967,7 +16940,7 @@ class RouteManager extends TaskSpawner {
|
|
|
16967
16940
|
caller_stack: captureStack ? captureCallerStack() : undefined,
|
|
16968
16941
|
retained_addresses: retainAddresses,
|
|
16969
16942
|
};
|
|
16970
|
-
logger$
|
|
16943
|
+
logger$V.debug('removed_route', removalMeta);
|
|
16971
16944
|
}
|
|
16972
16945
|
purgeRouteReferences(segment) {
|
|
16973
16946
|
for (const [address, info] of this._downstream_addresses_routes.entries()) {
|
|
@@ -17022,10 +16995,10 @@ class RouteManager extends TaskSpawner {
|
|
|
17022
16995
|
}
|
|
17023
16996
|
catch (error) {
|
|
17024
16997
|
if (combined.signal.aborted) {
|
|
17025
|
-
logger$
|
|
16998
|
+
logger$V.debug('connector_cleanup_cancelled', { segment });
|
|
17026
16999
|
}
|
|
17027
17000
|
else {
|
|
17028
|
-
logger$
|
|
17001
|
+
logger$V.debug('connector_cleanup_delay_failed', {
|
|
17029
17002
|
segment,
|
|
17030
17003
|
error: error instanceof Error ? error.message : String(error),
|
|
17031
17004
|
});
|
|
@@ -17048,7 +17021,7 @@ class RouteManager extends TaskSpawner {
|
|
|
17048
17021
|
}
|
|
17049
17022
|
catch (error) {
|
|
17050
17023
|
if (error instanceof Error) {
|
|
17051
|
-
logger$
|
|
17024
|
+
logger$V.debug('connector_stop_ignored', { error: error.message });
|
|
17052
17025
|
}
|
|
17053
17026
|
}
|
|
17054
17027
|
for (const [flowId, peer] of this.flowRoutes.entries()) {
|
|
@@ -17073,12 +17046,12 @@ class RouteManager extends TaskSpawner {
|
|
|
17073
17046
|
}
|
|
17074
17047
|
}
|
|
17075
17048
|
catch (error) {
|
|
17076
|
-
logger$
|
|
17049
|
+
logger$V.error('janitor_loop_error', {
|
|
17077
17050
|
error: error instanceof Error ? error.message : String(error),
|
|
17078
17051
|
});
|
|
17079
17052
|
}
|
|
17080
17053
|
finally {
|
|
17081
|
-
logger$
|
|
17054
|
+
logger$V.debug('janitor_loop_exited');
|
|
17082
17055
|
}
|
|
17083
17056
|
}
|
|
17084
17057
|
async scanStoreForExpirations(store, now, kind) {
|
|
@@ -17098,13 +17071,13 @@ class RouteManager extends TaskSpawner {
|
|
|
17098
17071
|
}
|
|
17099
17072
|
});
|
|
17100
17073
|
await store.delete(segment).catch((error) => {
|
|
17101
|
-
logger$
|
|
17074
|
+
logger$V.warning('route_auto_expire_delete_failed', {
|
|
17102
17075
|
segment,
|
|
17103
17076
|
error: error instanceof Error ? error.message : String(error),
|
|
17104
17077
|
});
|
|
17105
17078
|
});
|
|
17106
17079
|
this.purgeRouteReferences(segment);
|
|
17107
|
-
logger$
|
|
17080
|
+
logger$V.debug('auto_expired_route', { segment });
|
|
17108
17081
|
}));
|
|
17109
17082
|
}
|
|
17110
17083
|
parseAuthorization(metadata) {
|
|
@@ -17127,7 +17100,7 @@ class RouteManager extends TaskSpawner {
|
|
|
17127
17100
|
return { ...base, ...extraFields };
|
|
17128
17101
|
}
|
|
17129
17102
|
catch (error) {
|
|
17130
|
-
logger$
|
|
17103
|
+
logger$V.error('corrupt_route_metadata', {
|
|
17131
17104
|
error: error instanceof Error ? error.message : String(error),
|
|
17132
17105
|
});
|
|
17133
17106
|
return null;
|
|
@@ -17203,12 +17176,12 @@ function captureCallerStack(skip = 3, depth = 6) {
|
|
|
17203
17176
|
return frames.map((frame) => frame.trim()).join(' | ');
|
|
17204
17177
|
}
|
|
17205
17178
|
|
|
17206
|
-
const logger$
|
|
17179
|
+
const logger$U = getLogger('naylence.fame.sentinel.router');
|
|
17207
17180
|
const ZERO_EPH_PUB_BASE64 = 'AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA=';
|
|
17208
17181
|
class Drop {
|
|
17209
17182
|
async execute(envelope, router, state, context) {
|
|
17210
17183
|
await emitDeliveryNack(envelope, router, state, 'NO_ROUTE', context ?? undefined);
|
|
17211
|
-
logger$
|
|
17184
|
+
logger$U.debug('dropped_envelope', Object.assign(summarizeEnvelope(envelope, ''), {
|
|
17212
17185
|
localAddresses: Array.from(state.local.values()),
|
|
17213
17186
|
downstreamRoutes: Array.from(state.downstreamAddressRoutes.entries()),
|
|
17214
17187
|
peerRoutes: Array.from(state.peerAddressRoutes.entries()),
|
|
@@ -17238,7 +17211,7 @@ class ForwardChild {
|
|
|
17238
17211
|
}
|
|
17239
17212
|
catch (error) {
|
|
17240
17213
|
if (error instanceof FameTransportClose) {
|
|
17241
|
-
logger$
|
|
17214
|
+
logger$U.error('transport_closed_forward_child', {
|
|
17242
17215
|
segment: this.segment,
|
|
17243
17216
|
error: error.message,
|
|
17244
17217
|
});
|
|
@@ -17270,7 +17243,7 @@ class ForwardPeer {
|
|
|
17270
17243
|
}
|
|
17271
17244
|
catch (error) {
|
|
17272
17245
|
if (error instanceof FameTransportClose) {
|
|
17273
|
-
logger$
|
|
17246
|
+
logger$U.error('transport_closed_forward_peer', {
|
|
17274
17247
|
segment: this.segment,
|
|
17275
17248
|
error: error.message,
|
|
17276
17249
|
});
|
|
@@ -17305,7 +17278,7 @@ class Deny {
|
|
|
17305
17278
|
async execute(envelope, router, state, context) {
|
|
17306
17279
|
const { internalReason, deniedAction, matchedRule, context: extraContext, disclosure = 'opaque', } = this.options;
|
|
17307
17280
|
// Log detailed denial internally
|
|
17308
|
-
logger$
|
|
17281
|
+
logger$U.warning('route_authorization_denied', {
|
|
17309
17282
|
envp_id: envelope.id,
|
|
17310
17283
|
frame_type: envelope.frame?.type ?? null,
|
|
17311
17284
|
to: envelope.to?.toString() ?? null,
|
|
@@ -17351,7 +17324,7 @@ function mapRoutingActionToAuthorizationAction(action) {
|
|
|
17351
17324
|
return null;
|
|
17352
17325
|
}
|
|
17353
17326
|
// Unknown RoutingAction: return null, caller should deny by default
|
|
17354
|
-
logger$
|
|
17327
|
+
logger$U.warning('unknown_routing_action_for_authorization', {
|
|
17355
17328
|
action_type: action?.constructor?.name ?? 'unknown',
|
|
17356
17329
|
});
|
|
17357
17330
|
return null;
|
|
@@ -17384,7 +17357,7 @@ async function emitDeliveryNack(envelope, routingNode, state, code, context) {
|
|
|
17384
17357
|
return;
|
|
17385
17358
|
}
|
|
17386
17359
|
if (!state.envelopeFactory) {
|
|
17387
|
-
logger$
|
|
17360
|
+
logger$U.warning('router_missing_envelope_factory', summarizeEnvelope(envelope));
|
|
17388
17361
|
return;
|
|
17389
17362
|
}
|
|
17390
17363
|
const nackFrame = createNackFrame(envelope, code);
|
|
@@ -17415,7 +17388,7 @@ async function emitDeliveryNack(envelope, routingNode, state, code, context) {
|
|
|
17415
17388
|
}
|
|
17416
17389
|
}
|
|
17417
17390
|
catch (error) {
|
|
17418
|
-
logger$
|
|
17391
|
+
logger$U.warning('nack_forward_failed', {
|
|
17419
17392
|
error: error instanceof Error ? error.message : String(error),
|
|
17420
17393
|
...summarizeEnvelope(envelope),
|
|
17421
17394
|
});
|
|
@@ -17621,7 +17594,7 @@ class HRWLoadBalancingStrategy {
|
|
|
17621
17594
|
}
|
|
17622
17595
|
}
|
|
17623
17596
|
|
|
17624
|
-
const logger$
|
|
17597
|
+
const logger$T = getLogger('naylence.fame.sentinel.capability_aware_routing_policy');
|
|
17625
17598
|
function normalizeOptions$i(options) {
|
|
17626
17599
|
if (!options || typeof options !== 'object') {
|
|
17627
17600
|
return {};
|
|
@@ -17673,7 +17646,7 @@ class CapabilityAwareRoutingPolicy {
|
|
|
17673
17646
|
if (chosenSegment) {
|
|
17674
17647
|
return new ForwardChild(chosenSegment);
|
|
17675
17648
|
}
|
|
17676
|
-
logger$
|
|
17649
|
+
logger$T.warning('capability_policy_lb_failed', {
|
|
17677
17650
|
segments: providerSegments,
|
|
17678
17651
|
capabilities,
|
|
17679
17652
|
...summarizeEnvelope(envelope),
|
|
@@ -17702,7 +17675,7 @@ class CapabilityAwareRoutingPolicy {
|
|
|
17702
17675
|
}
|
|
17703
17676
|
}
|
|
17704
17677
|
catch (error) {
|
|
17705
|
-
logger$
|
|
17678
|
+
logger$T.warning('capability_policy_resolve_failed', {
|
|
17706
17679
|
error: error instanceof Error ? error.message : String(error),
|
|
17707
17680
|
});
|
|
17708
17681
|
}
|
|
@@ -17939,7 +17912,7 @@ function toFameAddress(address) {
|
|
|
17939
17912
|
return address instanceof FameAddress ? address : new FameAddress(address);
|
|
17940
17913
|
}
|
|
17941
17914
|
|
|
17942
|
-
const logger$
|
|
17915
|
+
const logger$S = getLogger('naylence.fame.sentinel.node_attach_frame_handler');
|
|
17943
17916
|
const DOWNSTREAM_ORIGINS = new Set([
|
|
17944
17917
|
DeliveryOriginType.DOWNSTREAM,
|
|
17945
17918
|
DeliveryOriginType.PEER,
|
|
@@ -18032,7 +18005,7 @@ class NodeAttachFrameHandler extends TaskSpawner {
|
|
|
18032
18005
|
this.maxTtlSec = options.maxTtlSec ?? null;
|
|
18033
18006
|
}
|
|
18034
18007
|
async acceptNodeAttach(envelope, context) {
|
|
18035
|
-
logger$
|
|
18008
|
+
logger$S.debug('handling_node_attach_request');
|
|
18036
18009
|
const normalizedContext = this.normalizeContext(context);
|
|
18037
18010
|
const frame = this.normalizeNodeAttachFrame(envelope.frame);
|
|
18038
18011
|
if (frame.type !== 'NodeAttach') {
|
|
@@ -18077,14 +18050,14 @@ class NodeAttachFrameHandler extends TaskSpawner {
|
|
|
18077
18050
|
let isRebind = false;
|
|
18078
18051
|
if (frame.originType === DeliveryOriginType.DOWNSTREAM) {
|
|
18079
18052
|
const hasExistingRoute = this.routeManager.downstreamRoutes.has(attachedSystemId);
|
|
18080
|
-
logger$
|
|
18053
|
+
logger$S.debug('checking_for_existing_route', {
|
|
18081
18054
|
system_id: attachedSystemId,
|
|
18082
18055
|
has_existing: hasExistingRoute,
|
|
18083
18056
|
existing_routes: Array.from(this.routeManager.downstreamRoutes.keys()),
|
|
18084
18057
|
});
|
|
18085
18058
|
if (hasExistingRoute) {
|
|
18086
18059
|
isRebind = true;
|
|
18087
|
-
logger$
|
|
18060
|
+
logger$S.warning('rebinding_existing_downstream_route', {
|
|
18088
18061
|
system_id: attachedSystemId,
|
|
18089
18062
|
});
|
|
18090
18063
|
oldAssignedPath = buildAssignedPath$1(this.routingNode.physicalPath, attachedSystemId);
|
|
@@ -18103,7 +18076,7 @@ class NodeAttachFrameHandler extends TaskSpawner {
|
|
|
18103
18076
|
meta: { systemId: attachedSystemId },
|
|
18104
18077
|
})
|
|
18105
18078
|
.catch((error) => {
|
|
18106
|
-
logger$
|
|
18079
|
+
logger$S.warning('failed_to_unregister_downstream_route_before_rebind', {
|
|
18107
18080
|
system_id: attachedSystemId,
|
|
18108
18081
|
error: error instanceof Error ? error.message : String(error),
|
|
18109
18082
|
});
|
|
@@ -18120,7 +18093,7 @@ class NodeAttachFrameHandler extends TaskSpawner {
|
|
|
18120
18093
|
for (const address of orphanedAddresses) {
|
|
18121
18094
|
encryptionMgr.clearChannelCacheForDestination(address);
|
|
18122
18095
|
}
|
|
18123
|
-
logger$
|
|
18096
|
+
logger$S.debug('cleared_channel_cache_for_rebind', {
|
|
18124
18097
|
system_id: attachedSystemId,
|
|
18125
18098
|
addresses: orphanedAddresses,
|
|
18126
18099
|
});
|
|
@@ -18132,7 +18105,7 @@ class NodeAttachFrameHandler extends TaskSpawner {
|
|
|
18132
18105
|
encryptionMgr.removeChannelsForDestination(address);
|
|
18133
18106
|
}
|
|
18134
18107
|
if (totalRemoved > 0) {
|
|
18135
|
-
logger$
|
|
18108
|
+
logger$S.debug('removed_channel_states_for_rebind', {
|
|
18136
18109
|
system_id: attachedSystemId,
|
|
18137
18110
|
channels_removed: totalRemoved,
|
|
18138
18111
|
});
|
|
@@ -18140,7 +18113,7 @@ class NodeAttachFrameHandler extends TaskSpawner {
|
|
|
18140
18113
|
}
|
|
18141
18114
|
}
|
|
18142
18115
|
catch (error) {
|
|
18143
|
-
logger$
|
|
18116
|
+
logger$S.warning('failed_to_cleanup_channels_for_rebind', {
|
|
18144
18117
|
system_id: attachedSystemId,
|
|
18145
18118
|
error: error instanceof Error ? error.message : String(error),
|
|
18146
18119
|
});
|
|
@@ -18163,7 +18136,7 @@ class NodeAttachFrameHandler extends TaskSpawner {
|
|
|
18163
18136
|
meta: { systemId: attachedSystemId },
|
|
18164
18137
|
})
|
|
18165
18138
|
.catch((error) => {
|
|
18166
|
-
logger$
|
|
18139
|
+
logger$S.warning('failed_to_unregister_peer_route_before_rebind', {
|
|
18167
18140
|
system_id: attachedSystemId,
|
|
18168
18141
|
error: error instanceof Error ? error.message : String(error),
|
|
18169
18142
|
});
|
|
@@ -18201,7 +18174,7 @@ class NodeAttachFrameHandler extends TaskSpawner {
|
|
|
18201
18174
|
? { stickiness: negotiatedStickiness }
|
|
18202
18175
|
: {}),
|
|
18203
18176
|
});
|
|
18204
|
-
logger$
|
|
18177
|
+
logger$S.debug('sending_node_attach_ack', {
|
|
18205
18178
|
env_id: ackEnvelope.id ?? 'unknown',
|
|
18206
18179
|
});
|
|
18207
18180
|
await this.sendAndNotify(connector, ackEnvelope, attachedSystemId, normalizedContext);
|
|
@@ -18248,7 +18221,7 @@ class NodeAttachFrameHandler extends TaskSpawner {
|
|
|
18248
18221
|
return this.stickinessManager.negotiate(stickiness);
|
|
18249
18222
|
}
|
|
18250
18223
|
catch (error) {
|
|
18251
|
-
logger$
|
|
18224
|
+
logger$S.debug('stickiness_negotiate_skipped', {
|
|
18252
18225
|
error: error instanceof Error ? error.message : String(error),
|
|
18253
18226
|
});
|
|
18254
18227
|
return null;
|
|
@@ -18264,13 +18237,13 @@ class NodeAttachFrameHandler extends TaskSpawner {
|
|
|
18264
18237
|
}
|
|
18265
18238
|
if (!attachExpiresAt || earliestKeyExpiry < attachExpiresAt) {
|
|
18266
18239
|
if (attachExpiresAt) {
|
|
18267
|
-
logger$
|
|
18240
|
+
logger$S.warning('attachment_ttl_limited_by_key_expiry', {
|
|
18268
18241
|
limited_attach_expires_at: earliestKeyExpiry.toISOString(),
|
|
18269
18242
|
original_attach_expires_at: attachExpiresAt.toISOString(),
|
|
18270
18243
|
});
|
|
18271
18244
|
}
|
|
18272
18245
|
else {
|
|
18273
|
-
logger$
|
|
18246
|
+
logger$S.debug('attachment_ttl_set_by_key_expiry', {
|
|
18274
18247
|
attach_expires_at: earliestKeyExpiry.toISOString(),
|
|
18275
18248
|
reason: 'no_max_ttl_configured',
|
|
18276
18249
|
});
|
|
@@ -18281,7 +18254,7 @@ class NodeAttachFrameHandler extends TaskSpawner {
|
|
|
18281
18254
|
}
|
|
18282
18255
|
async validateAttachmentKeys(frame, envelope, connector, context, systemId) {
|
|
18283
18256
|
if (!this.attachmentKeyValidator) {
|
|
18284
|
-
logger$
|
|
18257
|
+
logger$S.debug('child_key_validation_skipped', {
|
|
18285
18258
|
child_id: systemId,
|
|
18286
18259
|
reason: 'no_validator',
|
|
18287
18260
|
});
|
|
@@ -18297,7 +18270,7 @@ class NodeAttachFrameHandler extends TaskSpawner {
|
|
|
18297
18270
|
}
|
|
18298
18271
|
}
|
|
18299
18272
|
if (keyInfos.length > 0) {
|
|
18300
|
-
logger$
|
|
18273
|
+
logger$S.debug('node_attach_key_validation_passed', {
|
|
18301
18274
|
system_id: systemId,
|
|
18302
18275
|
instance_id: frame.instanceId,
|
|
18303
18276
|
correlation_id: envelope.corrId,
|
|
@@ -18317,13 +18290,13 @@ class NodeAttachFrameHandler extends TaskSpawner {
|
|
|
18317
18290
|
reason: `Certificate validation failed: ${error.message}`,
|
|
18318
18291
|
});
|
|
18319
18292
|
await this.sendAndNotify(connector, rejectionAck, systemId, context).catch((sendError) => {
|
|
18320
|
-
logger$
|
|
18293
|
+
logger$S.error('failed_sending_negative_attach_ack', {
|
|
18321
18294
|
error: sendError instanceof Error
|
|
18322
18295
|
? sendError.message
|
|
18323
18296
|
: String(sendError),
|
|
18324
18297
|
});
|
|
18325
18298
|
});
|
|
18326
|
-
logger$
|
|
18299
|
+
logger$S.error('node_attach_key_validation_failed', {
|
|
18327
18300
|
system_id: systemId,
|
|
18328
18301
|
instance_id: frame.instanceId,
|
|
18329
18302
|
correlation_id: envelope.corrId,
|
|
@@ -18389,10 +18362,10 @@ class NodeAttachFrameHandler extends TaskSpawner {
|
|
|
18389
18362
|
try {
|
|
18390
18363
|
await delay(delaySeconds * 1000);
|
|
18391
18364
|
await connector.close(1008, 'attach-unauthorized');
|
|
18392
|
-
logger$
|
|
18365
|
+
logger$S.debug('closed_unauthorized_connection');
|
|
18393
18366
|
}
|
|
18394
18367
|
catch (error) {
|
|
18395
|
-
logger$
|
|
18368
|
+
logger$S.error('failed_to_close_unauthorized_connection', {
|
|
18396
18369
|
error: error instanceof Error ? error.message : String(error),
|
|
18397
18370
|
});
|
|
18398
18371
|
}
|
|
@@ -18505,7 +18478,7 @@ class NodeAttachFrameHandler extends TaskSpawner {
|
|
|
18505
18478
|
}
|
|
18506
18479
|
}
|
|
18507
18480
|
|
|
18508
|
-
const logger$
|
|
18481
|
+
const logger$R = getLogger('naylence.fame.sentinel.address_bind_frame_handler');
|
|
18509
18482
|
const RESERVED_ADDRESS_NAMES = new Set(['__sys__', '__rpc__']);
|
|
18510
18483
|
function pickManagerField(manager, keys) {
|
|
18511
18484
|
const record = manager;
|
|
@@ -18829,7 +18802,7 @@ class AddressBindFrameHandler {
|
|
|
18829
18802
|
if (this.routingNode.forwardToPeers) {
|
|
18830
18803
|
await this.routingNode.forwardToPeers(envelope, undefined, [sourceSystemId], context);
|
|
18831
18804
|
}
|
|
18832
|
-
logger$
|
|
18805
|
+
logger$R.debug('address_bound', {
|
|
18833
18806
|
address: addressStr,
|
|
18834
18807
|
segment: sourceSystemId,
|
|
18835
18808
|
});
|
|
@@ -18927,7 +18900,7 @@ class AddressBindFrameHandler {
|
|
|
18927
18900
|
}
|
|
18928
18901
|
await this.routingNode.forwardToRoute(sourceSystemId, ackEnvelope, ackContext);
|
|
18929
18902
|
}
|
|
18930
|
-
logger$
|
|
18903
|
+
logger$R.debug('address_unbound', {
|
|
18931
18904
|
address: addressStr,
|
|
18932
18905
|
segment: sourceSystemId,
|
|
18933
18906
|
});
|
|
@@ -18945,7 +18918,7 @@ class AddressBindFrameHandler {
|
|
|
18945
18918
|
}
|
|
18946
18919
|
}
|
|
18947
18920
|
|
|
18948
|
-
const logger$
|
|
18921
|
+
const logger$Q = getLogger('naylence.fame.sentinel.node_heartbeat_frame_handler');
|
|
18949
18922
|
function normalizeOptions$h(options) {
|
|
18950
18923
|
if (!options || typeof options !== 'object') {
|
|
18951
18924
|
throw new Error('NodeHeartbeatFrameHandler requires a routingNode option');
|
|
@@ -18982,7 +18955,7 @@ class NodeHeartbeatFrameHandler {
|
|
|
18982
18955
|
if (!frame || frame.type !== 'NodeHeartbeat') {
|
|
18983
18956
|
throw new Error(`Invalid envelope frame. Expected: NodeHeartbeatFrame, actual: ${frame?.type ?? 'unknown'}`);
|
|
18984
18957
|
}
|
|
18985
|
-
logger$
|
|
18958
|
+
logger$Q.trace('handling_heartbeat', {
|
|
18986
18959
|
hb_system_id: frame.systemId ?? 'unknown',
|
|
18987
18960
|
hb_env_id: envelope.id ?? 'unknown',
|
|
18988
18961
|
hb_corr_id: envelope.corrId ?? 'unknown',
|
|
@@ -19010,7 +18983,7 @@ class NodeHeartbeatFrameHandler {
|
|
|
19010
18983
|
...(envelope.corrId ? { corrId: envelope.corrId } : {}),
|
|
19011
18984
|
...(envelope.traceId ? { traceId: envelope.traceId } : {}),
|
|
19012
18985
|
});
|
|
19013
|
-
logger$
|
|
18986
|
+
logger$Q.debug('sending_heartbeat_ack', {
|
|
19014
18987
|
hb_ack_env_id: ackEnvelope.id ?? 'unknown',
|
|
19015
18988
|
hb_ack_corr_id: ackEnvelope.corrId ?? 'unknown',
|
|
19016
18989
|
});
|
|
@@ -19038,7 +19011,7 @@ class NodeHeartbeatFrameHandler {
|
|
|
19038
19011
|
}
|
|
19039
19012
|
}
|
|
19040
19013
|
|
|
19041
|
-
const logger$
|
|
19014
|
+
const logger$P = getLogger('naylence.fame.sentinel.capability_frame_handler');
|
|
19042
19015
|
class CapabilityFrameHandler {
|
|
19043
19016
|
constructor(options) {
|
|
19044
19017
|
this.capabilityRoutes = new Map();
|
|
@@ -19065,7 +19038,7 @@ class CapabilityFrameHandler {
|
|
|
19065
19038
|
const segment = this.getSourceSystemId(context);
|
|
19066
19039
|
const downstreamRoutes = getDownstreamRoutes(this.routeManager);
|
|
19067
19040
|
if (!segment || !hasRoute(downstreamRoutes, segment)) {
|
|
19068
|
-
logger$
|
|
19041
|
+
logger$P.debug('capability_advertise_unknown_segment', { segment });
|
|
19069
19042
|
return;
|
|
19070
19043
|
}
|
|
19071
19044
|
const addressKey = this.normalizeAddress(frame.address);
|
|
@@ -19098,7 +19071,7 @@ class CapabilityFrameHandler {
|
|
|
19098
19071
|
}
|
|
19099
19072
|
const segment = this.getSourceSystemId(context);
|
|
19100
19073
|
if (!segment) {
|
|
19101
|
-
logger$
|
|
19074
|
+
logger$P.debug('capability_withdraw_missing_segment');
|
|
19102
19075
|
return;
|
|
19103
19076
|
}
|
|
19104
19077
|
const addressKey = this.normalizeAddress(frame.address);
|
|
@@ -19152,7 +19125,7 @@ class CapabilityFrameHandler {
|
|
|
19152
19125
|
async forwardAckToSegment(segment, ackFrame, originalEnvelope, ackContext) {
|
|
19153
19126
|
const envelopeFactory = this.routingNode.envelopeFactory;
|
|
19154
19127
|
if (!envelopeFactory) {
|
|
19155
|
-
logger$
|
|
19128
|
+
logger$P.warning('missing_envelope_factory_for_capability_ack');
|
|
19156
19129
|
return;
|
|
19157
19130
|
}
|
|
19158
19131
|
const ackEnvelope = envelopeFactory.createEnvelope({
|
|
@@ -19215,7 +19188,7 @@ function getStickySid(context) {
|
|
|
19215
19188
|
return typed.stickySid ?? typed.sticky_sid ?? undefined;
|
|
19216
19189
|
}
|
|
19217
19190
|
|
|
19218
|
-
const logger$
|
|
19191
|
+
const logger$O = getLogger('naylence.fame.sentinel.credit_update_frame_handler');
|
|
19219
19192
|
function normalizeOptions$g(options) {
|
|
19220
19193
|
if (!options || typeof options !== 'object') {
|
|
19221
19194
|
throw new Error('CreditUpdateFrameHandler requires a routeManager option');
|
|
@@ -19235,12 +19208,12 @@ class CreditUpdateFrameHandler {
|
|
|
19235
19208
|
async acceptCreditUpdate(envelope, context) {
|
|
19236
19209
|
const flowId = envelope.flowId;
|
|
19237
19210
|
if (!flowId) {
|
|
19238
|
-
logger$
|
|
19211
|
+
logger$O.warning('credit_update_missing_flow_id');
|
|
19239
19212
|
return;
|
|
19240
19213
|
}
|
|
19241
19214
|
const targetConnector = this.routeManager.getFlowRoute(flowId);
|
|
19242
19215
|
if (!targetConnector) {
|
|
19243
|
-
logger$
|
|
19216
|
+
logger$O.warning('credit_update_unknown_flow', { flowId });
|
|
19244
19217
|
return;
|
|
19245
19218
|
}
|
|
19246
19219
|
if (context?.fromConnector && context.fromConnector === targetConnector) {
|
|
@@ -19250,7 +19223,7 @@ class CreditUpdateFrameHandler {
|
|
|
19250
19223
|
}
|
|
19251
19224
|
}
|
|
19252
19225
|
|
|
19253
|
-
const logger$
|
|
19226
|
+
const logger$N = getLogger('naylence.fame.sentinel.sentinel');
|
|
19254
19227
|
const ALLOWED_BEFORE_ATTACH = new Set(['NodeAttach']);
|
|
19255
19228
|
const SYSTEM_INBOX = '__sys__';
|
|
19256
19229
|
const RESERVED_UPSTREAM_ADDRESS_NAMES = new Set(['__sys__', '__rpc__']);
|
|
@@ -19344,7 +19317,7 @@ class Sentinel extends FameNode {
|
|
|
19344
19317
|
routeStore = createPersistentRouteStore(this.storageProvider);
|
|
19345
19318
|
}
|
|
19346
19319
|
catch (error) {
|
|
19347
|
-
logger$
|
|
19320
|
+
logger$N.warning('persistent_route_store_unavailable', {
|
|
19348
19321
|
error: error instanceof Error ? error.message : String(error),
|
|
19349
19322
|
});
|
|
19350
19323
|
routeStore = getDefaultRouteStore();
|
|
@@ -19426,7 +19399,7 @@ class Sentinel extends FameNode {
|
|
|
19426
19399
|
bumpRoutingEpoch() {
|
|
19427
19400
|
const previousEpoch = this.routingEpochValue;
|
|
19428
19401
|
this.routingEpochValue = generateId();
|
|
19429
|
-
logger$
|
|
19402
|
+
logger$N.debug('routing_epoch_bumped', {
|
|
19430
19403
|
previous_epoch: previousEpoch,
|
|
19431
19404
|
new_epoch: this.routingEpochValue,
|
|
19432
19405
|
});
|
|
@@ -19517,7 +19490,7 @@ class Sentinel extends FameNode {
|
|
|
19517
19490
|
}
|
|
19518
19491
|
async forwardToRoute(nextSegment, envelope, context) {
|
|
19519
19492
|
if (this.originMatches(context, nextSegment, DeliveryOriginType.DOWNSTREAM)) {
|
|
19520
|
-
logger$
|
|
19493
|
+
logger$N.debug('downstream_loop_detected', {
|
|
19521
19494
|
envp_id: envelope.id,
|
|
19522
19495
|
segment: nextSegment,
|
|
19523
19496
|
});
|
|
@@ -19530,14 +19503,14 @@ class Sentinel extends FameNode {
|
|
|
19530
19503
|
}
|
|
19531
19504
|
const connector = this.routeManager.downstreamRoutes.get(nextSegment);
|
|
19532
19505
|
if (!connector) {
|
|
19533
|
-
logger$
|
|
19506
|
+
logger$N.warning('no_route_for_child_segment', { segment: nextSegment });
|
|
19534
19507
|
await this.emitDeliveryNack(processed, {
|
|
19535
19508
|
code: 'CHILD_UNREACHABLE',
|
|
19536
19509
|
context: context ?? null,
|
|
19537
19510
|
});
|
|
19538
19511
|
return;
|
|
19539
19512
|
}
|
|
19540
|
-
logger$
|
|
19513
|
+
logger$N.debug('forwarding_downstream', {
|
|
19541
19514
|
...summarizeEnvelope(processed, ''),
|
|
19542
19515
|
route: nextSegment,
|
|
19543
19516
|
});
|
|
@@ -19554,7 +19527,7 @@ class Sentinel extends FameNode {
|
|
|
19554
19527
|
}
|
|
19555
19528
|
async forwardToPeer(peerSegment, envelope, context) {
|
|
19556
19529
|
if (this.originMatches(context, peerSegment, DeliveryOriginType.PEER)) {
|
|
19557
|
-
logger$
|
|
19530
|
+
logger$N.debug('peer_loop_detected', {
|
|
19558
19531
|
envp_id: envelope.id,
|
|
19559
19532
|
segment: peerSegment,
|
|
19560
19533
|
});
|
|
@@ -19565,7 +19538,7 @@ class Sentinel extends FameNode {
|
|
|
19565
19538
|
}
|
|
19566
19539
|
const connector = this.routeManager._peer_routes.get(peerSegment);
|
|
19567
19540
|
if (!connector) {
|
|
19568
|
-
logger$
|
|
19541
|
+
logger$N.warning('no_route_for_peer_segment', {
|
|
19569
19542
|
peer_segment: peerSegment,
|
|
19570
19543
|
});
|
|
19571
19544
|
await this.emitDeliveryNack(processed, {
|
|
@@ -19608,7 +19581,7 @@ class Sentinel extends FameNode {
|
|
|
19608
19581
|
}
|
|
19609
19582
|
async forwardUpstream(envelope, context) {
|
|
19610
19583
|
if (context?.originType === DeliveryOriginType.UPSTREAM) {
|
|
19611
|
-
logger$
|
|
19584
|
+
logger$N.debug('skipping_forward_upstream', {
|
|
19612
19585
|
envp_id: envelope.id,
|
|
19613
19586
|
origin_type: context.originType,
|
|
19614
19587
|
});
|
|
@@ -19728,7 +19701,7 @@ class Sentinel extends FameNode {
|
|
|
19728
19701
|
}
|
|
19729
19702
|
catch (error) {
|
|
19730
19703
|
if (!combined.signal.aborted) {
|
|
19731
|
-
logger$
|
|
19704
|
+
logger$N.debug('attach_timeout_delay_failed', {
|
|
19732
19705
|
system_id: systemId,
|
|
19733
19706
|
error: error instanceof Error ? error.message : String(error),
|
|
19734
19707
|
});
|
|
@@ -19755,12 +19728,12 @@ class Sentinel extends FameNode {
|
|
|
19755
19728
|
await connector.stop();
|
|
19756
19729
|
}
|
|
19757
19730
|
catch (error) {
|
|
19758
|
-
logger$
|
|
19731
|
+
logger$N.debug('attach_timeout_stop_failed', {
|
|
19759
19732
|
system_id: systemId,
|
|
19760
19733
|
error: error instanceof Error ? error.message : String(error),
|
|
19761
19734
|
});
|
|
19762
19735
|
}
|
|
19763
|
-
logger$
|
|
19736
|
+
logger$N.warning('attach_timeout_expired', {
|
|
19764
19737
|
system_id: systemId,
|
|
19765
19738
|
timeout_ms: timeoutMs,
|
|
19766
19739
|
});
|
|
@@ -19814,7 +19787,7 @@ class Sentinel extends FameNode {
|
|
|
19814
19787
|
return new FameAddress(addressKey);
|
|
19815
19788
|
}
|
|
19816
19789
|
catch (error) {
|
|
19817
|
-
logger$
|
|
19790
|
+
logger$N.debug('invalid_capability_address', {
|
|
19818
19791
|
capability,
|
|
19819
19792
|
address: addressKey,
|
|
19820
19793
|
error: error instanceof Error ? error.message : String(error),
|
|
@@ -19970,7 +19943,7 @@ class Sentinel extends FameNode {
|
|
|
19970
19943
|
}
|
|
19971
19944
|
async propagateAddressBindingsUpstream() {
|
|
19972
19945
|
if (!this.hasParent) {
|
|
19973
|
-
logger$
|
|
19946
|
+
logger$N.warning('No upstream defined to rebind addresses');
|
|
19974
19947
|
return;
|
|
19975
19948
|
}
|
|
19976
19949
|
const entries = Array.from(this.routeManager._downstream_addresses_routes.entries());
|
|
@@ -19993,7 +19966,7 @@ class Sentinel extends FameNode {
|
|
|
19993
19966
|
await this.bindAddressUpstream(new FameAddress(address), info);
|
|
19994
19967
|
}
|
|
19995
19968
|
catch (error) {
|
|
19996
|
-
logger$
|
|
19969
|
+
logger$N.error('rebind_failed', {
|
|
19997
19970
|
address,
|
|
19998
19971
|
error: error instanceof Error ? error.message : String(error),
|
|
19999
19972
|
});
|
|
@@ -20091,7 +20064,7 @@ class Sentinel extends FameNode {
|
|
|
20091
20064
|
}
|
|
20092
20065
|
catch (error) {
|
|
20093
20066
|
// Hook threw => treat as denial, execute Drop
|
|
20094
|
-
logger$
|
|
20067
|
+
logger$N.warning('routing_action_hook_error', {
|
|
20095
20068
|
envp_id: envelope.id,
|
|
20096
20069
|
error: error instanceof Error ? error.message : String(error),
|
|
20097
20070
|
});
|
|
@@ -20115,7 +20088,7 @@ class Sentinel extends FameNode {
|
|
|
20115
20088
|
}
|
|
20116
20089
|
const abortSignal = signal ?? null;
|
|
20117
20090
|
if (abortSignal?.aborted) {
|
|
20118
|
-
logger$
|
|
20091
|
+
logger$N.info('shutdown_signal_received', { signal: 'abort' });
|
|
20119
20092
|
return;
|
|
20120
20093
|
}
|
|
20121
20094
|
// Build fabric options, preferring rootConfig if provided
|
|
@@ -20131,7 +20104,7 @@ class Sentinel extends FameNode {
|
|
|
20131
20104
|
if (node !== null) {
|
|
20132
20105
|
fabricCreateOptions.node = node;
|
|
20133
20106
|
}
|
|
20134
|
-
logger$
|
|
20107
|
+
logger$N.debug('fabric_create_options', {
|
|
20135
20108
|
hasRootConfig: 'rootConfig' in fabricCreateOptions,
|
|
20136
20109
|
hasNode: 'node' in fabricCreateOptions,
|
|
20137
20110
|
rootConfigKeys: fabricCreateOptions.rootConfig
|
|
@@ -20164,7 +20137,7 @@ class Sentinel extends FameNode {
|
|
|
20164
20137
|
const registerSignalListeners = () => {
|
|
20165
20138
|
for (const sig of signals) {
|
|
20166
20139
|
const listener = () => {
|
|
20167
|
-
logger$
|
|
20140
|
+
logger$N.info('shutdown_signal_received', { signal: sig });
|
|
20168
20141
|
cleanupListeners();
|
|
20169
20142
|
stopResolve();
|
|
20170
20143
|
};
|
|
@@ -20173,7 +20146,7 @@ class Sentinel extends FameNode {
|
|
|
20173
20146
|
}
|
|
20174
20147
|
if (abortSignal) {
|
|
20175
20148
|
abortListener = () => {
|
|
20176
|
-
logger$
|
|
20149
|
+
logger$N.info('shutdown_signal_received', { signal: 'abort' });
|
|
20177
20150
|
cleanupListeners();
|
|
20178
20151
|
stopResolve();
|
|
20179
20152
|
};
|
|
@@ -20186,12 +20159,12 @@ class Sentinel extends FameNode {
|
|
|
20186
20159
|
await providedFabric.enter();
|
|
20187
20160
|
try {
|
|
20188
20161
|
registerSignalListeners();
|
|
20189
|
-
logger$
|
|
20162
|
+
logger$N.info('sentinel_live', {
|
|
20190
20163
|
message: 'Node is live! Press Ctrl+C to stop.',
|
|
20191
20164
|
});
|
|
20192
20165
|
try {
|
|
20193
20166
|
await stopPromise;
|
|
20194
|
-
logger$
|
|
20167
|
+
logger$N.info('sentinel_shutdown_begin');
|
|
20195
20168
|
}
|
|
20196
20169
|
finally {
|
|
20197
20170
|
cleanupListeners();
|
|
@@ -20205,19 +20178,19 @@ class Sentinel extends FameNode {
|
|
|
20205
20178
|
// Use withFabric pattern for automatic lifecycle management
|
|
20206
20179
|
await withFabric(fabricCreateOptions, async () => {
|
|
20207
20180
|
registerSignalListeners();
|
|
20208
|
-
logger$
|
|
20181
|
+
logger$N.info('sentinel_live', {
|
|
20209
20182
|
message: 'Node is live! Press Ctrl+C to stop.',
|
|
20210
20183
|
});
|
|
20211
20184
|
try {
|
|
20212
20185
|
await stopPromise;
|
|
20213
|
-
logger$
|
|
20186
|
+
logger$N.info('sentinel_shutdown_begin');
|
|
20214
20187
|
}
|
|
20215
20188
|
finally {
|
|
20216
20189
|
cleanupListeners();
|
|
20217
20190
|
}
|
|
20218
20191
|
});
|
|
20219
20192
|
}
|
|
20220
|
-
logger$
|
|
20193
|
+
logger$N.info('sentinel_shutdown_complete');
|
|
20221
20194
|
}
|
|
20222
20195
|
}
|
|
20223
20196
|
function normalizeServeLogLevel(level) {
|
|
@@ -20362,7 +20335,7 @@ function isPlainRecord(value) {
|
|
|
20362
20335
|
return Boolean(value) && typeof value === 'object' && !Array.isArray(value);
|
|
20363
20336
|
}
|
|
20364
20337
|
|
|
20365
|
-
const FACTORY_META$
|
|
20338
|
+
const FACTORY_META$16 = {
|
|
20366
20339
|
base: NODE_LIKE_FACTORY_BASE_TYPE,
|
|
20367
20340
|
key: 'Sentinel',
|
|
20368
20341
|
};
|
|
@@ -20546,7 +20519,7 @@ class SentinelFactory extends NodeLikeFactory {
|
|
|
20546
20519
|
|
|
20547
20520
|
var sentinelFactory = /*#__PURE__*/Object.freeze({
|
|
20548
20521
|
__proto__: null,
|
|
20549
|
-
FACTORY_META: FACTORY_META$
|
|
20522
|
+
FACTORY_META: FACTORY_META$16,
|
|
20550
20523
|
SentinelFactory: SentinelFactory,
|
|
20551
20524
|
default: SentinelFactory
|
|
20552
20525
|
});
|
|
@@ -20590,7 +20563,7 @@ function createConnectorConfig(config) {
|
|
|
20590
20563
|
* A transport adapter that works with both Node.js and browser WebSocket APIs.
|
|
20591
20564
|
* Supports both native WebSocket clients and server-side WebSocket connections.
|
|
20592
20565
|
*/
|
|
20593
|
-
const logger$
|
|
20566
|
+
const logger$M = getLogger('naylence.fame.connector.websocket_connector');
|
|
20594
20567
|
/**
|
|
20595
20568
|
* WebSocket state constants (mirrors standard WebSocket states)
|
|
20596
20569
|
*/
|
|
@@ -20631,7 +20604,7 @@ class WebSocketConnector extends BaseAsyncConnector {
|
|
|
20631
20604
|
websocket.send_bytes &&
|
|
20632
20605
|
typeof websocket.receive_bytes === 'function' &&
|
|
20633
20606
|
typeof websocket.send_bytes === 'function');
|
|
20634
|
-
logger$
|
|
20607
|
+
logger$M.debug('websocket_connector_created', {
|
|
20635
20608
|
is_fastapi_like: this._isFastApiLike,
|
|
20636
20609
|
ready_state: websocket.readyState,
|
|
20637
20610
|
url: websocket.url,
|
|
@@ -20646,7 +20619,7 @@ class WebSocketConnector extends BaseAsyncConnector {
|
|
|
20646
20619
|
socketAny.binaryType = 'arraybuffer';
|
|
20647
20620
|
}
|
|
20648
20621
|
catch (error) {
|
|
20649
|
-
logger$
|
|
20622
|
+
logger$M.debug('websocket_set_binary_type_failed', {
|
|
20650
20623
|
error: error instanceof Error ? error.message : String(error),
|
|
20651
20624
|
current_type: socketAny.binaryType,
|
|
20652
20625
|
});
|
|
@@ -20702,7 +20675,7 @@ class WebSocketConnector extends BaseAsyncConnector {
|
|
|
20702
20675
|
else {
|
|
20703
20676
|
this._receiveQueue.push(data);
|
|
20704
20677
|
}
|
|
20705
|
-
logger$
|
|
20678
|
+
logger$M.debug('websocket_message_pushed_to_queue', {
|
|
20706
20679
|
queueLength: this._receiveQueue.length,
|
|
20707
20680
|
waitersLength: this._receiveWaiters.length,
|
|
20708
20681
|
});
|
|
@@ -20755,7 +20728,7 @@ class WebSocketConnector extends BaseAsyncConnector {
|
|
|
20755
20728
|
const result = receiveMethod.call(this._websocket);
|
|
20756
20729
|
// Ensure we have a Promise
|
|
20757
20730
|
if (!result || typeof result.then !== 'function') {
|
|
20758
|
-
logger$
|
|
20731
|
+
logger$M.error('fastapi_receive_not_awaitable', {
|
|
20759
20732
|
result_type: typeof result,
|
|
20760
20733
|
result_str: String(result).substring(0, 100),
|
|
20761
20734
|
});
|
|
@@ -20771,7 +20744,7 @@ class WebSocketConnector extends BaseAsyncConnector {
|
|
|
20771
20744
|
}
|
|
20772
20745
|
// Handle known WebSocket shutdown race condition
|
|
20773
20746
|
if (this._isAwaitFutureError(error)) {
|
|
20774
|
-
logger$
|
|
20747
|
+
logger$M.debug('websocket_shutdown_race_condition_handled', {
|
|
20775
20748
|
note: 'Normal WebSocket close timing - converting to cancellation',
|
|
20776
20749
|
websocket_state: this._websocket.client_state || 'unknown',
|
|
20777
20750
|
});
|
|
@@ -20814,7 +20787,7 @@ class WebSocketConnector extends BaseAsyncConnector {
|
|
|
20814
20787
|
}
|
|
20815
20788
|
catch (error) {
|
|
20816
20789
|
if (this._isAwaitFutureError(error)) {
|
|
20817
|
-
logger$
|
|
20790
|
+
logger$M.debug('websocket_shutdown_race_condition_detected', {
|
|
20818
20791
|
websocket_type: this._websocket.constructor.name,
|
|
20819
20792
|
is_fastapi: this._isFastApiLike,
|
|
20820
20793
|
note: 'Normal WebSocket close timing during shutdown',
|
|
@@ -20860,12 +20833,12 @@ class WebSocketConnector extends BaseAsyncConnector {
|
|
|
20860
20833
|
if (socketAny.readyState !== WebSocketState.CLOSED) {
|
|
20861
20834
|
try {
|
|
20862
20835
|
socketAny.terminate();
|
|
20863
|
-
logger$
|
|
20836
|
+
logger$M.debug('websocket_force_terminated', {
|
|
20864
20837
|
ready_state: socketAny.readyState,
|
|
20865
20838
|
});
|
|
20866
20839
|
}
|
|
20867
20840
|
catch (error) {
|
|
20868
|
-
logger$
|
|
20841
|
+
logger$M.debug('websocket_force_terminate_failed', {
|
|
20869
20842
|
error: error instanceof Error ? error.message : String(error),
|
|
20870
20843
|
});
|
|
20871
20844
|
}
|
|
@@ -20876,7 +20849,7 @@ class WebSocketConnector extends BaseAsyncConnector {
|
|
|
20876
20849
|
}
|
|
20877
20850
|
}
|
|
20878
20851
|
catch (error) {
|
|
20879
|
-
logger$
|
|
20852
|
+
logger$M.error('websocket_close_failed', {
|
|
20880
20853
|
error: error instanceof Error ? error.message : String(error),
|
|
20881
20854
|
});
|
|
20882
20855
|
// Don't re-throw - close errors are not critical during shutdown
|
|
@@ -21097,7 +21070,7 @@ class WebSocketConnector extends BaseAsyncConnector {
|
|
|
21097
21070
|
this._removeReceiveHandlers();
|
|
21098
21071
|
}
|
|
21099
21072
|
catch (error) {
|
|
21100
|
-
logger$
|
|
21073
|
+
logger$M.debug('websocket_remove_handlers_failed', {
|
|
21101
21074
|
error: error instanceof Error ? error.message : String(error),
|
|
21102
21075
|
});
|
|
21103
21076
|
}
|
|
@@ -21149,7 +21122,7 @@ class WebSocketConnector extends BaseAsyncConnector {
|
|
|
21149
21122
|
* Browser-local connector that routes binary frames between peers via an in-page EventTarget.
|
|
21150
21123
|
* Relies on BaseAsyncConnector for flow control and shutdown behavior.
|
|
21151
21124
|
*/
|
|
21152
|
-
const logger$
|
|
21125
|
+
const logger$L = getLogger('naylence.fame.connector.inpage_connector');
|
|
21153
21126
|
const INPAGE_CONNECTOR_TYPE = 'inpage-connector';
|
|
21154
21127
|
const DEFAULT_CHANNEL$6 = 'naylence-fabric';
|
|
21155
21128
|
const DEFAULT_INBOX_CAPACITY$6 = 2048;
|
|
@@ -21247,7 +21220,7 @@ class InPageConnector extends BaseAsyncConnector {
|
|
|
21247
21220
|
}
|
|
21248
21221
|
this.localNodeId = normalizedLocalNodeId;
|
|
21249
21222
|
this.targetNodeId = InPageConnector.normalizeTargetNodeId(config.initialTargetNodeId);
|
|
21250
|
-
logger$
|
|
21223
|
+
logger$L.debug('inpage_connector_initialized', {
|
|
21251
21224
|
channel: this.channelName,
|
|
21252
21225
|
connector_id: this.connectorId,
|
|
21253
21226
|
local_node_id: this.localNodeId,
|
|
@@ -21256,7 +21229,7 @@ class InPageConnector extends BaseAsyncConnector {
|
|
|
21256
21229
|
});
|
|
21257
21230
|
this.onMsg = (event) => {
|
|
21258
21231
|
if (!this.listenerRegistered) {
|
|
21259
|
-
logger$
|
|
21232
|
+
logger$L.warning('inpage_message_after_unregister', {
|
|
21260
21233
|
channel: this.channelName,
|
|
21261
21234
|
connector_id: this.connectorId,
|
|
21262
21235
|
timestamp: new Date().toISOString(),
|
|
@@ -21265,7 +21238,7 @@ class InPageConnector extends BaseAsyncConnector {
|
|
|
21265
21238
|
}
|
|
21266
21239
|
const messageEvent = event;
|
|
21267
21240
|
const message = messageEvent.data;
|
|
21268
|
-
logger$
|
|
21241
|
+
logger$L.debug('inpage_raw_event', {
|
|
21269
21242
|
channel: this.channelName,
|
|
21270
21243
|
connector_id: this.connectorId,
|
|
21271
21244
|
message_type: message && typeof message === 'object'
|
|
@@ -21285,7 +21258,7 @@ class InPageConnector extends BaseAsyncConnector {
|
|
|
21285
21258
|
: null;
|
|
21286
21259
|
const senderNodeId = InPageConnector.normalizeNodeId(busMessage.senderNodeId);
|
|
21287
21260
|
if (!senderId || !senderNodeId) {
|
|
21288
|
-
logger$
|
|
21261
|
+
logger$L.debug('inpage_message_rejected', {
|
|
21289
21262
|
channel: this.channelName,
|
|
21290
21263
|
connector_id: this.connectorId,
|
|
21291
21264
|
reason: 'missing_sender_metadata',
|
|
@@ -21293,7 +21266,7 @@ class InPageConnector extends BaseAsyncConnector {
|
|
|
21293
21266
|
return;
|
|
21294
21267
|
}
|
|
21295
21268
|
if (senderId === this.connectorId || senderNodeId === this.localNodeId) {
|
|
21296
|
-
logger$
|
|
21269
|
+
logger$L.debug('inpage_message_rejected', {
|
|
21297
21270
|
channel: this.channelName,
|
|
21298
21271
|
connector_id: this.connectorId,
|
|
21299
21272
|
reason: 'self_echo',
|
|
@@ -21307,14 +21280,14 @@ class InPageConnector extends BaseAsyncConnector {
|
|
|
21307
21280
|
}
|
|
21308
21281
|
const payload = InPageConnector.coercePayload(busMessage.payload);
|
|
21309
21282
|
if (!payload) {
|
|
21310
|
-
logger$
|
|
21283
|
+
logger$L.debug('inpage_payload_rejected', {
|
|
21311
21284
|
channel: this.channelName,
|
|
21312
21285
|
connector_id: this.connectorId,
|
|
21313
21286
|
reason: 'unrecognized_payload_type',
|
|
21314
21287
|
});
|
|
21315
21288
|
return;
|
|
21316
21289
|
}
|
|
21317
|
-
logger$
|
|
21290
|
+
logger$L.debug('inpage_message_received', {
|
|
21318
21291
|
channel: this.channelName,
|
|
21319
21292
|
sender_id: senderId,
|
|
21320
21293
|
sender_node_id: senderNodeId,
|
|
@@ -21343,14 +21316,14 @@ class InPageConnector extends BaseAsyncConnector {
|
|
|
21343
21316
|
}
|
|
21344
21317
|
catch (error) {
|
|
21345
21318
|
if (error instanceof QueueFullError) {
|
|
21346
|
-
logger$
|
|
21319
|
+
logger$L.warning('inpage_receive_queue_full', {
|
|
21347
21320
|
channel: this.channelName,
|
|
21348
21321
|
inbox_capacity: this.inboxCapacity,
|
|
21349
21322
|
inbox_remaining_capacity: this.inbox.remainingCapacity,
|
|
21350
21323
|
});
|
|
21351
21324
|
}
|
|
21352
21325
|
else {
|
|
21353
|
-
logger$
|
|
21326
|
+
logger$L.error('inpage_receive_error', {
|
|
21354
21327
|
channel: this.channelName,
|
|
21355
21328
|
error: error instanceof Error ? error.message : String(error),
|
|
21356
21329
|
});
|
|
@@ -21362,7 +21335,7 @@ class InPageConnector extends BaseAsyncConnector {
|
|
|
21362
21335
|
// Setup visibility change monitoring
|
|
21363
21336
|
this.visibilityChangeHandler = () => {
|
|
21364
21337
|
const isHidden = document.hidden;
|
|
21365
|
-
logger$
|
|
21338
|
+
logger$L.debug('inpage_visibility_changed', {
|
|
21366
21339
|
channel: this.channelName,
|
|
21367
21340
|
connector_id: this.connectorId,
|
|
21368
21341
|
visibility: isHidden ? 'hidden' : 'visible',
|
|
@@ -21371,7 +21344,7 @@ class InPageConnector extends BaseAsyncConnector {
|
|
|
21371
21344
|
// Pause/resume connector based on visibility
|
|
21372
21345
|
if (isHidden && this.state === ConnectorState.STARTED) {
|
|
21373
21346
|
this.pause().catch((err) => {
|
|
21374
|
-
logger$
|
|
21347
|
+
logger$L.warning('inpage_pause_failed', {
|
|
21375
21348
|
channel: this.channelName,
|
|
21376
21349
|
connector_id: this.connectorId,
|
|
21377
21350
|
error: err instanceof Error ? err.message : String(err),
|
|
@@ -21380,7 +21353,7 @@ class InPageConnector extends BaseAsyncConnector {
|
|
|
21380
21353
|
}
|
|
21381
21354
|
else if (!isHidden && this.state === ConnectorState.PAUSED) {
|
|
21382
21355
|
this.resume().catch((err) => {
|
|
21383
|
-
logger$
|
|
21356
|
+
logger$L.warning('inpage_resume_failed', {
|
|
21384
21357
|
channel: this.channelName,
|
|
21385
21358
|
connector_id: this.connectorId,
|
|
21386
21359
|
error: err instanceof Error ? err.message : String(err),
|
|
@@ -21394,7 +21367,7 @@ class InPageConnector extends BaseAsyncConnector {
|
|
|
21394
21367
|
// Track page lifecycle events to detect browser unload/discard
|
|
21395
21368
|
if (typeof window !== 'undefined') {
|
|
21396
21369
|
const lifecycleLogger = (event) => {
|
|
21397
|
-
logger$
|
|
21370
|
+
logger$L.info('inpage_page_lifecycle', {
|
|
21398
21371
|
channel: this.channelName,
|
|
21399
21372
|
connector_id: this.connectorId,
|
|
21400
21373
|
event_type: event.type,
|
|
@@ -21410,7 +21383,7 @@ class InPageConnector extends BaseAsyncConnector {
|
|
|
21410
21383
|
document.addEventListener('resume', lifecycleLogger);
|
|
21411
21384
|
}
|
|
21412
21385
|
// Log initial state with detailed visibility info
|
|
21413
|
-
logger$
|
|
21386
|
+
logger$L.debug('inpage_initial_visibility', {
|
|
21414
21387
|
channel: this.channelName,
|
|
21415
21388
|
connector_id: this.connectorId,
|
|
21416
21389
|
visibility: document.hidden ? 'hidden' : 'visible',
|
|
@@ -21428,7 +21401,7 @@ class InPageConnector extends BaseAsyncConnector {
|
|
|
21428
21401
|
await super.start(inboundHandler);
|
|
21429
21402
|
// After transitioning to STARTED, check if tab is already hidden
|
|
21430
21403
|
if (typeof document !== 'undefined' && document.hidden) {
|
|
21431
|
-
logger$
|
|
21404
|
+
logger$L.debug('inpage_start_in_hidden_tab', {
|
|
21432
21405
|
channel: this.channelName,
|
|
21433
21406
|
connector_id: this.connectorId,
|
|
21434
21407
|
document_hidden: document.hidden,
|
|
@@ -21438,7 +21411,7 @@ class InPageConnector extends BaseAsyncConnector {
|
|
|
21438
21411
|
});
|
|
21439
21412
|
// Immediately pause if tab is hidden at start time
|
|
21440
21413
|
await this.pause().catch((err) => {
|
|
21441
|
-
logger$
|
|
21414
|
+
logger$L.warning('inpage_initial_pause_failed', {
|
|
21442
21415
|
channel: this.channelName,
|
|
21443
21416
|
connector_id: this.connectorId,
|
|
21444
21417
|
error: err instanceof Error ? err.message : String(err),
|
|
@@ -21468,14 +21441,14 @@ class InPageConnector extends BaseAsyncConnector {
|
|
|
21468
21441
|
}
|
|
21469
21442
|
catch (error) {
|
|
21470
21443
|
if (error instanceof QueueFullError) {
|
|
21471
|
-
logger$
|
|
21444
|
+
logger$L.warning('inpage_push_queue_full', {
|
|
21472
21445
|
channel: this.channelName,
|
|
21473
21446
|
inbox_capacity: this.inboxCapacity,
|
|
21474
21447
|
inbox_remaining_capacity: this.inbox.remainingCapacity,
|
|
21475
21448
|
});
|
|
21476
21449
|
throw error;
|
|
21477
21450
|
}
|
|
21478
|
-
logger$
|
|
21451
|
+
logger$L.error('inpage_push_failed', {
|
|
21479
21452
|
channel: this.channelName,
|
|
21480
21453
|
error: error instanceof Error ? error.message : String(error),
|
|
21481
21454
|
});
|
|
@@ -21485,7 +21458,7 @@ class InPageConnector extends BaseAsyncConnector {
|
|
|
21485
21458
|
async _transportSendBytes(data) {
|
|
21486
21459
|
ensureBrowserEnvironment$2();
|
|
21487
21460
|
const targetNodeId = this.targetNodeId ?? '*';
|
|
21488
|
-
logger$
|
|
21461
|
+
logger$L.debug('inpage_message_sending', {
|
|
21489
21462
|
channel: this.channelName,
|
|
21490
21463
|
sender_id: this.connectorId,
|
|
21491
21464
|
sender_node_id: this.localNodeId,
|
|
@@ -21509,7 +21482,7 @@ class InPageConnector extends BaseAsyncConnector {
|
|
|
21509
21482
|
return item;
|
|
21510
21483
|
}
|
|
21511
21484
|
async _transportClose(code, reason) {
|
|
21512
|
-
logger$
|
|
21485
|
+
logger$L.debug('inpage_transport_closing', {
|
|
21513
21486
|
channel: this.channelName,
|
|
21514
21487
|
connector_id: this.connectorId,
|
|
21515
21488
|
code,
|
|
@@ -21518,14 +21491,14 @@ class InPageConnector extends BaseAsyncConnector {
|
|
|
21518
21491
|
timestamp: new Date().toISOString(),
|
|
21519
21492
|
});
|
|
21520
21493
|
if (this.listenerRegistered) {
|
|
21521
|
-
logger$
|
|
21494
|
+
logger$L.debug('inpage_removing_listener', {
|
|
21522
21495
|
channel: this.channelName,
|
|
21523
21496
|
connector_id: this.connectorId,
|
|
21524
21497
|
timestamp: new Date().toISOString(),
|
|
21525
21498
|
});
|
|
21526
21499
|
getSharedBus$1().removeEventListener(this.channelName, this.onMsg);
|
|
21527
21500
|
this.listenerRegistered = false;
|
|
21528
|
-
logger$
|
|
21501
|
+
logger$L.debug('inpage_listener_removed', {
|
|
21529
21502
|
channel: this.channelName,
|
|
21530
21503
|
connector_id: this.connectorId,
|
|
21531
21504
|
timestamp: new Date().toISOString(),
|
|
@@ -21557,7 +21530,7 @@ class InPageConnector extends BaseAsyncConnector {
|
|
|
21557
21530
|
if (targetNodeId &&
|
|
21558
21531
|
targetNodeId !== '*' &&
|
|
21559
21532
|
targetNodeId !== this.localNodeId) {
|
|
21560
|
-
logger$
|
|
21533
|
+
logger$L.debug('inpage_message_rejected', {
|
|
21561
21534
|
channel: this.channelName,
|
|
21562
21535
|
connector_id: this.connectorId,
|
|
21563
21536
|
reason: 'wildcard_target_mismatch',
|
|
@@ -21573,7 +21546,7 @@ class InPageConnector extends BaseAsyncConnector {
|
|
|
21573
21546
|
if (expectedSender &&
|
|
21574
21547
|
expectedSender !== '*' &&
|
|
21575
21548
|
senderNodeId !== expectedSender) {
|
|
21576
|
-
logger$
|
|
21549
|
+
logger$L.debug('inpage_message_rejected', {
|
|
21577
21550
|
channel: this.channelName,
|
|
21578
21551
|
connector_id: this.connectorId,
|
|
21579
21552
|
reason: 'unexpected_sender',
|
|
@@ -21586,7 +21559,7 @@ class InPageConnector extends BaseAsyncConnector {
|
|
|
21586
21559
|
if (targetNodeId &&
|
|
21587
21560
|
targetNodeId !== '*' &&
|
|
21588
21561
|
targetNodeId !== this.localNodeId) {
|
|
21589
|
-
logger$
|
|
21562
|
+
logger$L.debug('inpage_message_rejected', {
|
|
21590
21563
|
channel: this.channelName,
|
|
21591
21564
|
connector_id: this.connectorId,
|
|
21592
21565
|
reason: 'unexpected_target',
|
|
@@ -21611,7 +21584,7 @@ class InPageConnector extends BaseAsyncConnector {
|
|
|
21611
21584
|
return 'unknown';
|
|
21612
21585
|
}
|
|
21613
21586
|
logInboxSnapshot(event, extra = {}) {
|
|
21614
|
-
logger$
|
|
21587
|
+
logger$L.debug(event, {
|
|
21615
21588
|
channel: this.channelName,
|
|
21616
21589
|
connector_id: this.connectorId,
|
|
21617
21590
|
connector_state: this.state,
|
|
@@ -21630,7 +21603,7 @@ class InPageConnector extends BaseAsyncConnector {
|
|
|
21630
21603
|
return;
|
|
21631
21604
|
}
|
|
21632
21605
|
this.targetNodeId = normalized;
|
|
21633
|
-
logger$
|
|
21606
|
+
logger$L.debug('inpage_target_updated', {
|
|
21634
21607
|
channel: this.channelName,
|
|
21635
21608
|
connector_id: this.connectorId,
|
|
21636
21609
|
local_node_id: this.localNodeId,
|
|
@@ -21640,7 +21613,7 @@ class InPageConnector extends BaseAsyncConnector {
|
|
|
21640
21613
|
}
|
|
21641
21614
|
setWildcardTarget() {
|
|
21642
21615
|
this.targetNodeId = '*';
|
|
21643
|
-
logger$
|
|
21616
|
+
logger$L.debug('inpage_target_updated', {
|
|
21644
21617
|
channel: this.channelName,
|
|
21645
21618
|
connector_id: this.connectorId,
|
|
21646
21619
|
local_node_id: this.localNodeId,
|
|
@@ -21834,6 +21807,185 @@ class AuthorizerFactory extends AbstractResourceFactory {
|
|
|
21834
21807
|
}
|
|
21835
21808
|
}
|
|
21836
21809
|
|
|
21810
|
+
const logger$K = getLogger('naylence.fame.security.auth.authorization_profile_factory');
|
|
21811
|
+
const PROFILE_NAME_DEFAULT = 'jwt';
|
|
21812
|
+
const PROFILE_NAME_OAUTH2 = 'oauth2';
|
|
21813
|
+
const PROFILE_NAME_OAUTH2_GATED = 'oauth2-gated';
|
|
21814
|
+
const PROFILE_NAME_OAUTH2_CALLBACK = 'oauth2-callback';
|
|
21815
|
+
const PROFILE_NAME_NOOP$2 = 'noop';
|
|
21816
|
+
const ENV_VAR_JWT_TRUSTED_ISSUER$1 = 'FAME_JWT_TRUSTED_ISSUER';
|
|
21817
|
+
const ENV_VAR_JWT_ALGORITHM$1 = 'FAME_JWT_ALGORITHM';
|
|
21818
|
+
const ENV_VAR_JWT_AUDIENCE$2 = 'FAME_JWT_AUDIENCE';
|
|
21819
|
+
const ENV_VAR_JWKS_URL$1 = 'FAME_JWKS_URL';
|
|
21820
|
+
const ENV_VAR_ENFORCE_TOKEN_SUBJECT_NODE_IDENTITY$1 = 'FAME_ENFORCE_TOKEN_SUBJECT_NODE_IDENTITY';
|
|
21821
|
+
const ENV_VAR_TRUSTED_CLIENT_SCOPE$1 = 'FAME_TRUSTED_CLIENT_SCOPE';
|
|
21822
|
+
const ENV_VAR_JWT_REVERSE_AUTH_TRUSTED_ISSUER$1 = 'FAME_JWT_REVERSE_AUTH_TRUSTED_ISSUER';
|
|
21823
|
+
const ENV_VAR_JWT_REVERSE_AUTH_AUDIENCE$1 = 'FAME_JWT_REVERSE_AUTH_AUDIENCE';
|
|
21824
|
+
const ENV_VAR_HMAC_SECRET$1 = 'FAME_HMAC_SECRET';
|
|
21825
|
+
const DEFAULT_REVERSE_AUTH_ISSUER = 'reverse-auth.naylence.ai';
|
|
21826
|
+
const DEFAULT_REVERSE_AUTH_AUDIENCE = 'dev.naylence.ai';
|
|
21827
|
+
const DEFAULT_PROFILE = {
|
|
21828
|
+
type: 'DefaultAuthorizer',
|
|
21829
|
+
verifier: {
|
|
21830
|
+
type: 'JWKSJWTTokenVerifier',
|
|
21831
|
+
jwks_url: Expressions.env(ENV_VAR_JWKS_URL$1),
|
|
21832
|
+
issuer: Expressions.env(ENV_VAR_JWT_TRUSTED_ISSUER$1),
|
|
21833
|
+
},
|
|
21834
|
+
};
|
|
21835
|
+
const OAUTH2_PROFILE = {
|
|
21836
|
+
type: 'OAuth2Authorizer',
|
|
21837
|
+
issuer: Expressions.env(ENV_VAR_JWT_TRUSTED_ISSUER$1),
|
|
21838
|
+
required_scopes: ['node.connect'],
|
|
21839
|
+
require_scope: true,
|
|
21840
|
+
default_ttl_sec: 3600,
|
|
21841
|
+
max_ttl_sec: 86400,
|
|
21842
|
+
algorithm: Expressions.env(ENV_VAR_JWT_ALGORITHM$1, 'RS256'),
|
|
21843
|
+
audience: Expressions.env(ENV_VAR_JWT_AUDIENCE$2),
|
|
21844
|
+
};
|
|
21845
|
+
const OAUTH2_GATED_PROFILE = {
|
|
21846
|
+
...OAUTH2_PROFILE,
|
|
21847
|
+
enforce_token_subject_node_identity: Expressions.env(ENV_VAR_ENFORCE_TOKEN_SUBJECT_NODE_IDENTITY$1, 'false'),
|
|
21848
|
+
trusted_client_scope: Expressions.env(ENV_VAR_TRUSTED_CLIENT_SCOPE$1, 'node.trusted'),
|
|
21849
|
+
};
|
|
21850
|
+
const OAUTH2_CALLBACK_PROFILE = {
|
|
21851
|
+
type: 'OAuth2Authorizer',
|
|
21852
|
+
issuer: Expressions.env(ENV_VAR_JWT_REVERSE_AUTH_TRUSTED_ISSUER$1, DEFAULT_REVERSE_AUTH_ISSUER),
|
|
21853
|
+
audience: Expressions.env(ENV_VAR_JWT_REVERSE_AUTH_AUDIENCE$1),
|
|
21854
|
+
require_scope: true,
|
|
21855
|
+
default_ttl_sec: 3600,
|
|
21856
|
+
max_ttl_sec: 86400,
|
|
21857
|
+
reverse_auth_ttl_sec: 86400,
|
|
21858
|
+
token_verifier_config: {
|
|
21859
|
+
type: 'JWTTokenVerifier',
|
|
21860
|
+
algorithm: 'HS256',
|
|
21861
|
+
hmac_secret: Expressions.env(ENV_VAR_HMAC_SECRET$1),
|
|
21862
|
+
issuer: Expressions.env(ENV_VAR_JWT_REVERSE_AUTH_TRUSTED_ISSUER$1, DEFAULT_REVERSE_AUTH_ISSUER),
|
|
21863
|
+
ttl_sec: 86400,
|
|
21864
|
+
},
|
|
21865
|
+
token_issuer_config: {
|
|
21866
|
+
type: 'JWTTokenIssuer',
|
|
21867
|
+
algorithm: 'HS256',
|
|
21868
|
+
hmac_secret: Expressions.env(ENV_VAR_HMAC_SECRET$1),
|
|
21869
|
+
kid: 'hmac-reverse-auth-key',
|
|
21870
|
+
issuer: Expressions.env(ENV_VAR_JWT_REVERSE_AUTH_TRUSTED_ISSUER$1, DEFAULT_REVERSE_AUTH_ISSUER),
|
|
21871
|
+
ttl_sec: 86400,
|
|
21872
|
+
audience: Expressions.env(ENV_VAR_JWT_REVERSE_AUTH_AUDIENCE$1, DEFAULT_REVERSE_AUTH_AUDIENCE),
|
|
21873
|
+
},
|
|
21874
|
+
};
|
|
21875
|
+
const NOOP_PROFILE$2 = {
|
|
21876
|
+
type: 'NoopAuthorizer',
|
|
21877
|
+
};
|
|
21878
|
+
const PROFILE_MAP$5 = {
|
|
21879
|
+
[PROFILE_NAME_DEFAULT]: DEFAULT_PROFILE,
|
|
21880
|
+
[PROFILE_NAME_OAUTH2]: OAUTH2_PROFILE,
|
|
21881
|
+
[PROFILE_NAME_OAUTH2_GATED]: OAUTH2_GATED_PROFILE,
|
|
21882
|
+
[PROFILE_NAME_OAUTH2_CALLBACK]: OAUTH2_CALLBACK_PROFILE,
|
|
21883
|
+
[PROFILE_NAME_NOOP$2]: NOOP_PROFILE$2,
|
|
21884
|
+
};
|
|
21885
|
+
const PROFILE_ALIASES$1 = {
|
|
21886
|
+
jwt: PROFILE_NAME_DEFAULT,
|
|
21887
|
+
jwks: PROFILE_NAME_DEFAULT,
|
|
21888
|
+
default: PROFILE_NAME_DEFAULT,
|
|
21889
|
+
oauth2: PROFILE_NAME_OAUTH2,
|
|
21890
|
+
oidc: PROFILE_NAME_OAUTH2,
|
|
21891
|
+
'oauth2-gated': PROFILE_NAME_OAUTH2_GATED,
|
|
21892
|
+
oauth2_gated: PROFILE_NAME_OAUTH2_GATED,
|
|
21893
|
+
'oauth2-callback': PROFILE_NAME_OAUTH2_CALLBACK,
|
|
21894
|
+
oauth2_callback: PROFILE_NAME_OAUTH2_CALLBACK,
|
|
21895
|
+
'reverse-auth': PROFILE_NAME_OAUTH2_CALLBACK,
|
|
21896
|
+
noop: PROFILE_NAME_NOOP$2,
|
|
21897
|
+
'no-op': PROFILE_NAME_NOOP$2,
|
|
21898
|
+
no_op: PROFILE_NAME_NOOP$2,
|
|
21899
|
+
};
|
|
21900
|
+
const FACTORY_META$15 = {
|
|
21901
|
+
base: AUTHORIZER_FACTORY_BASE_TYPE,
|
|
21902
|
+
key: 'AuthorizationProfile',
|
|
21903
|
+
};
|
|
21904
|
+
class AuthorizationProfileFactory extends AuthorizerFactory {
|
|
21905
|
+
constructor() {
|
|
21906
|
+
super(...arguments);
|
|
21907
|
+
this.type = 'AuthorizationProfile';
|
|
21908
|
+
}
|
|
21909
|
+
async create(config, ...factoryArgs) {
|
|
21910
|
+
const normalized = normalizeConfig$w(config);
|
|
21911
|
+
const profileConfig = resolveProfileConfig$4(normalized.profile);
|
|
21912
|
+
logger$K.debug('enabling_authorization_profile', {
|
|
21913
|
+
profile: normalized.profile,
|
|
21914
|
+
});
|
|
21915
|
+
const authorizer = await AuthorizerFactory.createAuthorizer(profileConfig, { factoryArgs });
|
|
21916
|
+
if (!authorizer) {
|
|
21917
|
+
throw new Error(`Failed to create authorizer for profile: ${normalized.profile}`);
|
|
21918
|
+
}
|
|
21919
|
+
return authorizer;
|
|
21920
|
+
}
|
|
21921
|
+
}
|
|
21922
|
+
function normalizeConfig$w(config) {
|
|
21923
|
+
if (!config) {
|
|
21924
|
+
return { profile: PROFILE_NAME_OAUTH2 };
|
|
21925
|
+
}
|
|
21926
|
+
const candidate = config;
|
|
21927
|
+
const profileValue = resolveProfileName$2(candidate);
|
|
21928
|
+
const canonicalProfile = canonicalizeProfileName$1(profileValue);
|
|
21929
|
+
candidate.profile = canonicalProfile;
|
|
21930
|
+
return { profile: canonicalProfile };
|
|
21931
|
+
}
|
|
21932
|
+
function resolveProfileName$2(candidate) {
|
|
21933
|
+
const direct = coerceProfileString$2(candidate.profile);
|
|
21934
|
+
if (direct) {
|
|
21935
|
+
return direct;
|
|
21936
|
+
}
|
|
21937
|
+
const legacyKeys = ['profile_name', 'profileName'];
|
|
21938
|
+
for (const legacyKey of legacyKeys) {
|
|
21939
|
+
const legacyValue = coerceProfileString$2(candidate[legacyKey]);
|
|
21940
|
+
if (legacyValue) {
|
|
21941
|
+
return legacyValue;
|
|
21942
|
+
}
|
|
21943
|
+
}
|
|
21944
|
+
return PROFILE_NAME_OAUTH2;
|
|
21945
|
+
}
|
|
21946
|
+
function coerceProfileString$2(value) {
|
|
21947
|
+
if (typeof value !== 'string') {
|
|
21948
|
+
return null;
|
|
21949
|
+
}
|
|
21950
|
+
const trimmed = value.trim();
|
|
21951
|
+
return trimmed.length > 0 ? trimmed : null;
|
|
21952
|
+
}
|
|
21953
|
+
function canonicalizeProfileName$1(value) {
|
|
21954
|
+
const normalized = value.replace(/[\s_]+/g, '-').toLowerCase();
|
|
21955
|
+
return PROFILE_ALIASES$1[normalized] ?? normalized;
|
|
21956
|
+
}
|
|
21957
|
+
function resolveProfileConfig$4(profileName) {
|
|
21958
|
+
const profile = PROFILE_MAP$5[profileName];
|
|
21959
|
+
if (!profile) {
|
|
21960
|
+
throw new Error(`Unknown authorization profile: ${profileName}`);
|
|
21961
|
+
}
|
|
21962
|
+
return deepClone$4(profile);
|
|
21963
|
+
}
|
|
21964
|
+
function deepClone$4(value) {
|
|
21965
|
+
return JSON.parse(JSON.stringify(value));
|
|
21966
|
+
}
|
|
21967
|
+
|
|
21968
|
+
var authorizationProfileFactory = /*#__PURE__*/Object.freeze({
|
|
21969
|
+
__proto__: null,
|
|
21970
|
+
AuthorizationProfileFactory: AuthorizationProfileFactory,
|
|
21971
|
+
ENV_VAR_ENFORCE_TOKEN_SUBJECT_NODE_IDENTITY: ENV_VAR_ENFORCE_TOKEN_SUBJECT_NODE_IDENTITY$1,
|
|
21972
|
+
ENV_VAR_HMAC_SECRET: ENV_VAR_HMAC_SECRET$1,
|
|
21973
|
+
ENV_VAR_JWKS_URL: ENV_VAR_JWKS_URL$1,
|
|
21974
|
+
ENV_VAR_JWT_ALGORITHM: ENV_VAR_JWT_ALGORITHM$1,
|
|
21975
|
+
ENV_VAR_JWT_AUDIENCE: ENV_VAR_JWT_AUDIENCE$2,
|
|
21976
|
+
ENV_VAR_JWT_REVERSE_AUTH_AUDIENCE: ENV_VAR_JWT_REVERSE_AUTH_AUDIENCE$1,
|
|
21977
|
+
ENV_VAR_JWT_REVERSE_AUTH_TRUSTED_ISSUER: ENV_VAR_JWT_REVERSE_AUTH_TRUSTED_ISSUER$1,
|
|
21978
|
+
ENV_VAR_JWT_TRUSTED_ISSUER: ENV_VAR_JWT_TRUSTED_ISSUER$1,
|
|
21979
|
+
ENV_VAR_TRUSTED_CLIENT_SCOPE: ENV_VAR_TRUSTED_CLIENT_SCOPE$1,
|
|
21980
|
+
FACTORY_META: FACTORY_META$15,
|
|
21981
|
+
PROFILE_NAME_DEFAULT: PROFILE_NAME_DEFAULT,
|
|
21982
|
+
PROFILE_NAME_NOOP: PROFILE_NAME_NOOP$2,
|
|
21983
|
+
PROFILE_NAME_OAUTH2: PROFILE_NAME_OAUTH2,
|
|
21984
|
+
PROFILE_NAME_OAUTH2_CALLBACK: PROFILE_NAME_OAUTH2_CALLBACK,
|
|
21985
|
+
PROFILE_NAME_OAUTH2_GATED: PROFILE_NAME_OAUTH2_GATED,
|
|
21986
|
+
default: AuthorizationProfileFactory
|
|
21987
|
+
});
|
|
21988
|
+
|
|
21837
21989
|
function isAuthInjectionStrategy(candidate) {
|
|
21838
21990
|
return (typeof candidate === 'object' &&
|
|
21839
21991
|
candidate !== null &&
|
|
@@ -29315,14 +29467,13 @@ const ENV_VAR_JWT_REVERSE_AUTH_TRUSTED_ISSUER = 'FAME_JWT_REVERSE_AUTH_TRUSTED_I
|
|
|
29315
29467
|
const ENV_VAR_JWT_REVERSE_AUTH_AUDIENCE = 'FAME_JWT_REVERSE_AUTH_AUDIENCE';
|
|
29316
29468
|
const ENV_VAR_ENFORCE_TOKEN_SUBJECT_NODE_IDENTITY = 'FAME_ENFORCE_TOKEN_SUBJECT_NODE_IDENTITY';
|
|
29317
29469
|
const ENV_VAR_TRUSTED_CLIENT_SCOPE = 'FAME_TRUSTED_CLIENT_SCOPE';
|
|
29470
|
+
const ENV_VAR_AUTHORIZATION_PROFILE = 'FAME_AUTHORIZATION_PROFILE';
|
|
29318
29471
|
const PROFILE_NAME_STRICT_OVERLAY = 'strict-overlay';
|
|
29319
29472
|
const PROFILE_NAME_OVERLAY = 'overlay';
|
|
29320
29473
|
const PROFILE_NAME_OVERLAY_CALLBACK = 'overlay-callback';
|
|
29321
29474
|
const PROFILE_NAME_GATED = 'gated';
|
|
29322
29475
|
const PROFILE_NAME_GATED_CALLBACK = 'gated-callback';
|
|
29323
29476
|
const PROFILE_NAME_OPEN$1 = 'open';
|
|
29324
|
-
const DEFAULT_REVERSE_AUTH_ISSUER = 'reverse-auth.naylence.ai';
|
|
29325
|
-
const DEFAULT_REVERSE_AUTH_AUDIENCE = 'dev.naylence.ai';
|
|
29326
29477
|
const STRICT_OVERLAY_PROFILE = {
|
|
29327
29478
|
type: 'DefaultSecurityManager',
|
|
29328
29479
|
security_policy: {
|
|
@@ -29368,12 +29519,8 @@ const STRICT_OVERLAY_PROFILE = {
|
|
|
29368
29519
|
},
|
|
29369
29520
|
},
|
|
29370
29521
|
authorizer: {
|
|
29371
|
-
type: '
|
|
29372
|
-
|
|
29373
|
-
type: 'JWKSJWTTokenVerifier',
|
|
29374
|
-
jwks_url: Expressions.env(ENV_VAR_JWKS_URL),
|
|
29375
|
-
issuer: Expressions.env(ENV_VAR_JWT_TRUSTED_ISSUER),
|
|
29376
|
-
},
|
|
29522
|
+
type: 'AuthorizationProfile',
|
|
29523
|
+
profile: Expressions.env(ENV_VAR_AUTHORIZATION_PROFILE, 'jwt'),
|
|
29377
29524
|
},
|
|
29378
29525
|
};
|
|
29379
29526
|
const OVERLAY_PROFILE = {
|
|
@@ -29420,14 +29567,8 @@ const OVERLAY_PROFILE = {
|
|
|
29420
29567
|
},
|
|
29421
29568
|
},
|
|
29422
29569
|
authorizer: {
|
|
29423
|
-
type: '
|
|
29424
|
-
|
|
29425
|
-
required_scopes: ['node.connect'],
|
|
29426
|
-
require_scope: true,
|
|
29427
|
-
default_ttl_sec: 3600,
|
|
29428
|
-
max_ttl_sec: 86400,
|
|
29429
|
-
algorithm: Expressions.env(ENV_VAR_JWT_ALGORITHM, 'RS256'),
|
|
29430
|
-
audience: Expressions.env(ENV_VAR_JWT_AUDIENCE$1),
|
|
29570
|
+
type: 'AuthorizationProfile',
|
|
29571
|
+
profile: Expressions.env(ENV_VAR_AUTHORIZATION_PROFILE, 'oauth2'),
|
|
29431
29572
|
},
|
|
29432
29573
|
};
|
|
29433
29574
|
const OVERLAY_CALLBACK_PROFILE = {
|
|
@@ -29474,29 +29615,8 @@ const OVERLAY_CALLBACK_PROFILE = {
|
|
|
29474
29615
|
},
|
|
29475
29616
|
},
|
|
29476
29617
|
authorizer: {
|
|
29477
|
-
type: '
|
|
29478
|
-
|
|
29479
|
-
audience: Expressions.env(ENV_VAR_JWT_REVERSE_AUTH_AUDIENCE),
|
|
29480
|
-
require_scope: true,
|
|
29481
|
-
default_ttl_sec: 3600,
|
|
29482
|
-
max_ttl_sec: 86400,
|
|
29483
|
-
reverse_auth_ttl_sec: 86400,
|
|
29484
|
-
token_verifier_config: {
|
|
29485
|
-
type: 'JWTTokenVerifier',
|
|
29486
|
-
algorithm: 'HS256',
|
|
29487
|
-
hmac_secret: Expressions.env(ENV_VAR_HMAC_SECRET),
|
|
29488
|
-
issuer: Expressions.env(ENV_VAR_JWT_REVERSE_AUTH_TRUSTED_ISSUER, DEFAULT_REVERSE_AUTH_ISSUER),
|
|
29489
|
-
ttl_sec: 86400,
|
|
29490
|
-
},
|
|
29491
|
-
token_issuer_config: {
|
|
29492
|
-
type: 'JWTTokenIssuer',
|
|
29493
|
-
algorithm: 'HS256',
|
|
29494
|
-
hmac_secret: Expressions.env(ENV_VAR_HMAC_SECRET),
|
|
29495
|
-
kid: 'hmac-reverse-auth-key',
|
|
29496
|
-
issuer: Expressions.env(ENV_VAR_JWT_REVERSE_AUTH_TRUSTED_ISSUER, DEFAULT_REVERSE_AUTH_ISSUER),
|
|
29497
|
-
ttl_sec: 86400,
|
|
29498
|
-
audience: Expressions.env(ENV_VAR_JWT_REVERSE_AUTH_AUDIENCE, DEFAULT_REVERSE_AUTH_AUDIENCE),
|
|
29499
|
-
},
|
|
29618
|
+
type: 'AuthorizationProfile',
|
|
29619
|
+
profile: Expressions.env(ENV_VAR_AUTHORIZATION_PROFILE, 'oauth2-callback'),
|
|
29500
29620
|
},
|
|
29501
29621
|
};
|
|
29502
29622
|
const GATED_PROFILE = {
|
|
@@ -29542,16 +29662,8 @@ const GATED_PROFILE = {
|
|
|
29542
29662
|
},
|
|
29543
29663
|
},
|
|
29544
29664
|
authorizer: {
|
|
29545
|
-
type: '
|
|
29546
|
-
|
|
29547
|
-
required_scopes: ['node.connect'],
|
|
29548
|
-
require_scope: true,
|
|
29549
|
-
default_ttl_sec: 3600,
|
|
29550
|
-
max_ttl_sec: 86400,
|
|
29551
|
-
algorithm: Expressions.env(ENV_VAR_JWT_ALGORITHM, 'RS256'),
|
|
29552
|
-
audience: Expressions.env(ENV_VAR_JWT_AUDIENCE$1),
|
|
29553
|
-
enforce_token_subject_node_identity: Expressions.env(ENV_VAR_ENFORCE_TOKEN_SUBJECT_NODE_IDENTITY, 'false'),
|
|
29554
|
-
trusted_client_scope: Expressions.env(ENV_VAR_TRUSTED_CLIENT_SCOPE, 'node.trusted'),
|
|
29665
|
+
type: 'AuthorizationProfile',
|
|
29666
|
+
profile: Expressions.env(ENV_VAR_AUTHORIZATION_PROFILE, 'oauth2-gated'),
|
|
29555
29667
|
},
|
|
29556
29668
|
};
|
|
29557
29669
|
const GATED_CALLBACK_PROFILE = {
|
|
@@ -29597,29 +29709,8 @@ const GATED_CALLBACK_PROFILE = {
|
|
|
29597
29709
|
},
|
|
29598
29710
|
},
|
|
29599
29711
|
authorizer: {
|
|
29600
|
-
type: '
|
|
29601
|
-
|
|
29602
|
-
audience: Expressions.env(ENV_VAR_JWT_REVERSE_AUTH_AUDIENCE),
|
|
29603
|
-
require_scope: true,
|
|
29604
|
-
default_ttl_sec: 3600,
|
|
29605
|
-
max_ttl_sec: 86400,
|
|
29606
|
-
reverse_auth_ttl_sec: 86400,
|
|
29607
|
-
token_verifier_config: {
|
|
29608
|
-
type: 'JWTTokenVerifier',
|
|
29609
|
-
algorithm: 'HS256',
|
|
29610
|
-
hmac_secret: Expressions.env(ENV_VAR_HMAC_SECRET),
|
|
29611
|
-
issuer: Expressions.env(ENV_VAR_JWT_REVERSE_AUTH_TRUSTED_ISSUER, DEFAULT_REVERSE_AUTH_ISSUER),
|
|
29612
|
-
ttl_sec: 86400,
|
|
29613
|
-
},
|
|
29614
|
-
token_issuer_config: {
|
|
29615
|
-
type: 'JWTTokenIssuer',
|
|
29616
|
-
algorithm: 'HS256',
|
|
29617
|
-
hmac_secret: Expressions.env(ENV_VAR_HMAC_SECRET),
|
|
29618
|
-
kid: 'hmac-reverse-auth-key',
|
|
29619
|
-
issuer: Expressions.env(ENV_VAR_JWT_REVERSE_AUTH_TRUSTED_ISSUER, DEFAULT_REVERSE_AUTH_ISSUER),
|
|
29620
|
-
ttl_sec: 86400,
|
|
29621
|
-
audience: Expressions.env(ENV_VAR_JWT_REVERSE_AUTH_AUDIENCE, DEFAULT_REVERSE_AUTH_AUDIENCE),
|
|
29622
|
-
},
|
|
29712
|
+
type: 'AuthorizationProfile',
|
|
29713
|
+
profile: Expressions.env(ENV_VAR_AUTHORIZATION_PROFILE, 'oauth2-callback'),
|
|
29623
29714
|
},
|
|
29624
29715
|
};
|
|
29625
29716
|
const OPEN_PROFILE$1 = {
|
|
@@ -29628,7 +29719,8 @@ const OPEN_PROFILE$1 = {
|
|
|
29628
29719
|
type: 'NoSecurityPolicy',
|
|
29629
29720
|
},
|
|
29630
29721
|
authorizer: {
|
|
29631
|
-
type: '
|
|
29722
|
+
type: 'AuthorizationProfile',
|
|
29723
|
+
profile: Expressions.env(ENV_VAR_AUTHORIZATION_PROFILE, 'noop'),
|
|
29632
29724
|
},
|
|
29633
29725
|
};
|
|
29634
29726
|
const PROFILE_MAP$4 = {
|
|
@@ -29757,6 +29849,7 @@ function deepClone$3(value) {
|
|
|
29757
29849
|
|
|
29758
29850
|
var nodeSecurityProfileFactory = /*#__PURE__*/Object.freeze({
|
|
29759
29851
|
__proto__: null,
|
|
29852
|
+
ENV_VAR_AUTHORIZATION_PROFILE: ENV_VAR_AUTHORIZATION_PROFILE,
|
|
29760
29853
|
ENV_VAR_DEFAULT_ENCRYPTION_LEVEL: ENV_VAR_DEFAULT_ENCRYPTION_LEVEL,
|
|
29761
29854
|
ENV_VAR_ENFORCE_TOKEN_SUBJECT_NODE_IDENTITY: ENV_VAR_ENFORCE_TOKEN_SUBJECT_NODE_IDENTITY,
|
|
29762
29855
|
ENV_VAR_HMAC_SECRET: ENV_VAR_HMAC_SECRET,
|
|
@@ -43523,4 +43616,4 @@ var websocketTransportProvisioner = /*#__PURE__*/Object.freeze({
|
|
|
43523
43616
|
WebSocketTransportProvisionerFactory: WebSocketTransportProvisionerFactory
|
|
43524
43617
|
});
|
|
43525
43618
|
|
|
43526
|
-
export { ADMISSION_CLIENT_FACTORY_BASE_TYPE, ATTACHMENT_KEY_VALIDATOR_FACTORY_BASE_TYPE, AUTHORIZATION_POLICY_FACTORY_BASE_TYPE, AUTHORIZATION_POLICY_SOURCE_FACTORY_BASE_TYPE, AUTHORIZER_FACTORY_BASE_TYPE, AUTH_INJECTION_STRATEGY_FACTORY_BASE_TYPE, AnsiColor, AsyncLock, AttachmentKeyValidator, AuthInjectionStrategyFactory, AuthorizationPolicyFactory, AuthorizationPolicySourceFactory, AuthorizerFactory, BROADCAST_CHANNEL_CONNECTION_GRANT_TYPE, BackPressureFull, BaseAsyncConnector, BaseNodeEventListener, BasicAuthorizationPolicy, BasicAuthorizationPolicyFactory, BindingManager, BindingStoreEntryRecord, BrowserAutoKeyCredentialProvider, BrowserWrappedKeyCredentialProvider, CERTIFICATE_MANAGER_FACTORY_BASE_TYPE, CONNECTION_RETRY_POLICY_FACTORY_BASE_TYPE, CREDENTIAL_PROVIDER_FACTORY_BASE_TYPE, CRYPTO_LEVEL_SECURITY_ORDER, CertificateManagerFactory, ConnectionRetryPolicyFactory, ConnectorConfigDefaults, ConnectorFactory, ConsoleMetricsEmitter, CryptoLevel, FACTORY_META$11 as DEFAULT_WELCOME_FACTORY_META, DefaultConnectionRetryPolicy, DefaultConnectionRetryPolicyFactory, DefaultCryptoProvider, DefaultKeyManager, DefaultNodeIdentityPolicy, DefaultNodeIdentityPolicyFactory, DefaultSecurityManager, DefaultSecurityPolicy, DefaultWelcomeService, DefaultWelcomeServiceFactory, DevFixedKeyCredentialProvider, ENCRYPTION_MANAGER_FACTORY_BASE_TYPE, ENVELOPE_SIGNER_FACTORY_BASE_TYPE, ENVELOPE_VERIFIER_FACTORY_BASE_TYPE, ENV_VAR_DEFAULT_ENCRYPTION_LEVEL, ENV_VAR_HMAC_SECRET, ENV_VAR_JWKS_URL, ENV_VAR_JWT_ALGORITHM, ENV_VAR_JWT_AUDIENCE$1 as ENV_VAR_JWT_AUDIENCE, ENV_VAR_JWT_REVERSE_AUTH_AUDIENCE, ENV_VAR_JWT_REVERSE_AUTH_TRUSTED_ISSUER, ENV_VAR_JWT_TRUSTED_ISSUER, ENV_VAR_SESSION_MAX_INITIAL_ATTEMPTS, ENV_VAR_SHOW_ENVELOPES$1 as ENV_VAR_SHOW_ENVELOPES, EdDSAEnvelopeSigner, EncryptedKeyValueStore, EncryptedStorageProviderBase, EncryptedValue, EncryptionConfiguration, EncryptionManagerFactory, EncryptionResult, EncryptionStatus, EnvCredentialProvider, EnvelopeContext, EnvelopeListenerManager, EnvelopeSecurityHandler, EnvelopeSignerFactory, EnvelopeVerifierFactory, FACTORY_META$12 as FACTORY_META, FIXED_PREFIX_LEN, FameAuthorizedDeliveryContextSchema, FameConnectError, FameEnvironmentContext, FameError, FameMessageTooLarge, FameNode, FameNodeAuthorizationContextSchema, FameProtocolError, FameTransportClose, FlowController, GRANT_PURPOSE_NODE_ATTACH, HTTP_CONNECTION_GRANT_TYPE, HTTP_STATELESS_CONNECTOR_TYPE, INPAGE_CONNECTION_GRANT_TYPE, INPAGE_CONNECTOR_TYPE, InMemoryBinding, InMemoryFanoutBroker, InMemoryKeyValueStore, InMemoryReadWriteChannel, InMemoryStorageProvider, InPageConnector, IndexedDBKeyValueStore, IndexedDBStorageProvider, InvalidPassphraseError, JWKValidationError, KEY_MANAGER_FACTORY_BASE_TYPE, KEY_STORE_FACTORY_BASE_TYPE, KNOWN_POLICY_FIELDS, KNOWN_RULE_FIELDS, KeyInfo, KeyManagementHandler, KeyManagerFactory, KeyStore, KeyStoreFactory, KeyValidationError, LOAD_BALANCER_STICKINESS_MANAGER_FACTORY_BASE_TYPE, LoadBalancerStickinessManagerFactory, LogLevel, LogLevelNames, MAX_SCOPE_NESTING_DEPTH, MemoryMetricsEmitter, NODE_IDENTITY_POLICY_FACTORY_BASE_TYPE, NODE_LIKE_FACTORY_BASE_TYPE, NODE_PLACEMENT_STRATEGY_FACTORY_BASE_TYPE, NoOpMetricsEmitter, NoSecurityPolicy, NodeFactory, NodeIdentityPolicyFactory, NodeIdentityPolicyProfileFactory, NodePlacementStrategyFactory, NoneCredentialProvider, NoopEncryptionManager, NoopKeyValidator, NoopTrustStoreProvider, NotAuthorized, PROFILE_NAME_GATED, PROFILE_NAME_GATED_CALLBACK, PROFILE_NAME_OPEN$1 as PROFILE_NAME_OPEN, PROFILE_NAME_OVERLAY, PROFILE_NAME_OVERLAY_CALLBACK, PROFILE_NAME_STRICT_OVERLAY, PromptCredentialProvider, REPLICA_STICKINESS_MANAGER_FACTORY_BASE_TYPE, REQUIRED_FIELDS_BY_KTY, ReplicaStickinessManagerFactory, RootSessionManager, RouteManager, RpcMixin, RpcProxy, SEALED_ENVELOPE_NONCE_LENGTH, SEALED_ENVELOPE_OVERHEAD, SEALED_ENVELOPE_PRIVATE_KEY_LENGTH, SEALED_ENVELOPE_PUBLIC_KEY_LENGTH, SEALED_ENVELOPE_TAG_LENGTH, SECURE_CHANNEL_MANAGER_FACTORY_BASE_TYPE, SECURITY_MANAGER_FACTORY_BASE_TYPE, SECURITY_POLICY_FACTORY_BASE_TYPE, STORAGE_PROVIDER_FACTORY_BASE_TYPE, SecretSource, SecretStoreCredentialProvider, SecureChannelFrameHandler, SecureChannelManagerFactory, SecurityAction, SecurityRequirements, Sentinel, SentinelFactory, SessionKeyCredentialProvider, SignaturePolicy, SigningConfig as SigningConfigClass, SigningConfiguration, SimpleLoadBalancerStickinessManager, SimpleLoadBalancerStickinessManagerFactory, StaticCredentialProvider, StorageAESEncryptionManager, TOKEN_ISSUER_FACTORY_BASE_TYPE, TOKEN_PROVIDER_FACTORY_BASE_TYPE, TOKEN_VERIFIER_FACTORY_BASE_TYPE, TRANSPORT_PROVISIONER_FACTORY_BASE_TYPE, TRUST_STORE_PROVIDER_FACTORY_BASE_TYPE, TaskSpawner, TokenIssuerFactory, TokenProviderFactory, TokenSubjectNodeIdentityPolicy, TokenSubjectNodeIdentityPolicyFactory, TokenVerifierFactory, TransportProvisionerFactory, TrustStoreProviderFactory, TtlValidationError, UpstreamSessionManager, VALID_ACTIONS, VALID_CURVES_BY_KTY, VALID_EFFECTS, VALID_KEY_USES, VALID_ORIGIN_TYPES, VERSION, WEBSOCKET_CONNECTION_GRANT_TYPE, WELCOME_SERVICE_FACTORY_BASE_TYPE, WebSocketCloseCode, WebSocketConnector, WebSocketState, WelcomeServiceFactory, _NoopFlowController, __runtimePluginLoader, addEnvelopeFields, addLogLevel, addTimestamp, assertConnectionGrant, assertGrant, assertNotRegexPattern, basicConfig, broadcastChannelGrantToConnectorConfig, camelToSnakeCase, canonicalJson, capitalizeFirstLetter, color, compareCryptoLevels, compileGlobOnlyScopeRequirement, compileGlobPattern, compilePattern, compileScopeRequirement, compiledPathPattern, consoleTransport, convertWildcardLogicalToDnsConstraint, createConnectorConfig, createEd25519Keypair, createHostLogicalUri, createLogicalUri, createNodeDeliveryContext, createResource, createRpcProxy, createRsaKeypair, createTransportCloseError, createX25519Keypair, credentialToString, currentTraceId$1 as currentTraceId, debounce, decodeBase64Url, decodeFameDataPayload, deepMerge, defaultJsonEncoder, delay, dropEmpty, enableLogging, encodeUtf8, ensureRuntimeFactoriesRegistered, evaluateScopeRequirement, extractId, extractPoolAddressBase, extractPoolBase, filterKeysByUse, formatTimestamp, formatTimestampForConsole$1 as formatTimestampForConsole, frameDigest, getCompiledGlobPattern, getCurrentEnvelope, getFabricForNode, getFameRoot, getKeyProvider, getKeyStore, getLogger, hasCryptoSupport, hostnameToLogical, hostnamesToLogicals, httpGrantToConnectorConfig, immutableHeaders, inPageGrantToConnectorConfig, isAuthInjectionStrategy, isBroadcastChannelConnectionGrant, isConnectionGrant, isConnectorConfig, isEnvelopeLoggingEnabled, isFameError, isFameErrorType, isGrant, isHttpConnectionGrant, isIdentityExposingTokenProvider, isInPageConnectionGrant, isNodeLike, isPlainObject$4 as isPlainObject, isPoolAddress, isPoolLogical, isRegexPattern, isRegisterable, isTokenExpired, isTokenProvider, isTokenValid, isWebSocketConnectionGrant, jsonDumps, logicalPatternsToDnsConstraints, logicalToHostname, logicalsToHostnames, matchPattern, matchesPoolAddress, matchesPoolLogical, maybeAwait, nodeWelcomeRouter, nodeWelcomeRouterPlugin, normalizeBroadcastChannelConnectionGrant, normalizeEncryptionConfig, normalizeEnvelopeSnapshot, normalizeHttpConnectionGrant, normalizeInPageConnectionGrant, normalizeInboundCryptoRules, normalizeInboundSigningRules, normalizeOutboundCryptoRules, normalizeOutboundSigningRules, normalizePath, normalizeResponseCryptoRules, normalizeResponseSigningRules, normalizeScopeRequirement, normalizeSecretSource, normalizeSecurityRequirements, normalizeSigningConfig, normalizeWebSocketConnectionGrant, objectToBytes, operation, parseSealedEnvelope, pinoTransport, prettyModel$1 as prettyModel, registerDefaultFactories, registerDefaultKeyStoreFactory, registerNodePlacementStrategyFactory, registerRuntimeFactories, requireCryptoSupport, retryWithBackoff, safeColor, safeImport, sealedDecrypt, sealedEncrypt, secureDigest, setKeyStore, showEnvelopes$1 as showEnvelopes, sleep, snakeToCamelCase, stringifyNonPrimitives, supportsColor, throttle, urlsafeBase64Decode, urlsafeBase64Encode, validateCacheTtlSec, validateEncryptionKey, validateHostLogical, validateHostLogicals, validateJwkComplete, validateJwkStructure, validateJwkUseField, validateJwtTokenTtlSec, validateKeyCorrelationTtlSec, validateLogical, validateLogicalSegment, validateOAuth2TtlSec, validateSigningKey, validateTtlSec, waitForAll, waitForAllSettled, waitForAny, websocketGrantToConnectorConfig, withEnvelopeContext, withEnvelopeContextAsync, withLegacySnakeCaseKeys, withLock, withTimeout };
|
|
43619
|
+
export { ADMISSION_CLIENT_FACTORY_BASE_TYPE, ATTACHMENT_KEY_VALIDATOR_FACTORY_BASE_TYPE, AUTHORIZATION_POLICY_FACTORY_BASE_TYPE, AUTHORIZATION_POLICY_SOURCE_FACTORY_BASE_TYPE, AUTHORIZER_FACTORY_BASE_TYPE, AUTH_INJECTION_STRATEGY_FACTORY_BASE_TYPE, ENV_VAR_ENFORCE_TOKEN_SUBJECT_NODE_IDENTITY$1 as AUTH_PROFILE_ENV_VAR_ENFORCE_TOKEN_SUBJECT_NODE_IDENTITY, ENV_VAR_HMAC_SECRET$1 as AUTH_PROFILE_ENV_VAR_HMAC_SECRET, ENV_VAR_JWKS_URL$1 as AUTH_PROFILE_ENV_VAR_JWKS_URL, ENV_VAR_JWT_ALGORITHM$1 as AUTH_PROFILE_ENV_VAR_JWT_ALGORITHM, ENV_VAR_JWT_AUDIENCE$2 as AUTH_PROFILE_ENV_VAR_JWT_AUDIENCE, ENV_VAR_JWT_REVERSE_AUTH_AUDIENCE$1 as AUTH_PROFILE_ENV_VAR_JWT_REVERSE_AUTH_AUDIENCE, ENV_VAR_JWT_REVERSE_AUTH_TRUSTED_ISSUER$1 as AUTH_PROFILE_ENV_VAR_JWT_REVERSE_AUTH_TRUSTED_ISSUER, ENV_VAR_JWT_TRUSTED_ISSUER$1 as AUTH_PROFILE_ENV_VAR_JWT_TRUSTED_ISSUER, ENV_VAR_TRUSTED_CLIENT_SCOPE$1 as AUTH_PROFILE_ENV_VAR_TRUSTED_CLIENT_SCOPE, PROFILE_NAME_DEFAULT as AUTH_PROFILE_NAME_DEFAULT, PROFILE_NAME_NOOP$2 as AUTH_PROFILE_NAME_NOOP, PROFILE_NAME_OAUTH2 as AUTH_PROFILE_NAME_OAUTH2, PROFILE_NAME_OAUTH2_CALLBACK as AUTH_PROFILE_NAME_OAUTH2_CALLBACK, PROFILE_NAME_OAUTH2_GATED as AUTH_PROFILE_NAME_OAUTH2_GATED, AnsiColor, AsyncLock, AttachmentKeyValidator, AuthInjectionStrategyFactory, AuthorizationPolicyFactory, AuthorizationPolicySourceFactory, AuthorizationProfileFactory, AuthorizerFactory, BROADCAST_CHANNEL_CONNECTION_GRANT_TYPE, BackPressureFull, BaseAsyncConnector, BaseNodeEventListener, BasicAuthorizationPolicy, BasicAuthorizationPolicyFactory, BindingManager, BindingStoreEntryRecord, BrowserAutoKeyCredentialProvider, BrowserWrappedKeyCredentialProvider, CERTIFICATE_MANAGER_FACTORY_BASE_TYPE, CONNECTION_RETRY_POLICY_FACTORY_BASE_TYPE, CREDENTIAL_PROVIDER_FACTORY_BASE_TYPE, CRYPTO_LEVEL_SECURITY_ORDER, CertificateManagerFactory, ConnectionRetryPolicyFactory, ConnectorConfigDefaults, ConnectorFactory, ConsoleMetricsEmitter, CryptoLevel, FACTORY_META$11 as DEFAULT_WELCOME_FACTORY_META, DefaultConnectionRetryPolicy, DefaultConnectionRetryPolicyFactory, DefaultCryptoProvider, DefaultKeyManager, DefaultNodeIdentityPolicy, DefaultNodeIdentityPolicyFactory, DefaultSecurityManager, DefaultSecurityPolicy, DefaultWelcomeService, DefaultWelcomeServiceFactory, DevFixedKeyCredentialProvider, ENCRYPTION_MANAGER_FACTORY_BASE_TYPE, ENVELOPE_SIGNER_FACTORY_BASE_TYPE, ENVELOPE_VERIFIER_FACTORY_BASE_TYPE, ENV_VAR_AUTHORIZATION_PROFILE, ENV_VAR_DEFAULT_ENCRYPTION_LEVEL, ENV_VAR_HMAC_SECRET, ENV_VAR_JWKS_URL, ENV_VAR_JWT_ALGORITHM, ENV_VAR_JWT_AUDIENCE$1 as ENV_VAR_JWT_AUDIENCE, ENV_VAR_JWT_REVERSE_AUTH_AUDIENCE, ENV_VAR_JWT_REVERSE_AUTH_TRUSTED_ISSUER, ENV_VAR_JWT_TRUSTED_ISSUER, ENV_VAR_SESSION_MAX_INITIAL_ATTEMPTS, ENV_VAR_SHOW_ENVELOPES$1 as ENV_VAR_SHOW_ENVELOPES, EdDSAEnvelopeSigner, EncryptedKeyValueStore, EncryptedStorageProviderBase, EncryptedValue, EncryptionConfiguration, EncryptionManagerFactory, EncryptionResult, EncryptionStatus, EnvCredentialProvider, EnvelopeContext, EnvelopeListenerManager, EnvelopeSecurityHandler, EnvelopeSignerFactory, EnvelopeVerifierFactory, FACTORY_META$12 as FACTORY_META, FIXED_PREFIX_LEN, FameAuthorizedDeliveryContextSchema, FameConnectError, FameEnvironmentContext, FameError, FameMessageTooLarge, FameNode, FameNodeAuthorizationContextSchema, FameProtocolError, FameTransportClose, FlowController, GRANT_PURPOSE_NODE_ATTACH, HTTP_CONNECTION_GRANT_TYPE, HTTP_STATELESS_CONNECTOR_TYPE, INPAGE_CONNECTION_GRANT_TYPE, INPAGE_CONNECTOR_TYPE, InMemoryBinding, InMemoryFanoutBroker, InMemoryKeyValueStore, InMemoryReadWriteChannel, InMemoryStorageProvider, InPageConnector, IndexedDBKeyValueStore, IndexedDBStorageProvider, InvalidPassphraseError, JWKValidationError, KEY_MANAGER_FACTORY_BASE_TYPE, KEY_STORE_FACTORY_BASE_TYPE, KNOWN_POLICY_FIELDS, KNOWN_RULE_FIELDS, KeyInfo, KeyManagementHandler, KeyManagerFactory, KeyStore, KeyStoreFactory, KeyValidationError, LOAD_BALANCER_STICKINESS_MANAGER_FACTORY_BASE_TYPE, LoadBalancerStickinessManagerFactory, LogLevel, LogLevelNames, MAX_SCOPE_NESTING_DEPTH, MemoryMetricsEmitter, NODE_IDENTITY_POLICY_FACTORY_BASE_TYPE, NODE_LIKE_FACTORY_BASE_TYPE, NODE_PLACEMENT_STRATEGY_FACTORY_BASE_TYPE, NoOpMetricsEmitter, NoSecurityPolicy, NodeFactory, NodeIdentityPolicyFactory, NodeIdentityPolicyProfileFactory, NodePlacementStrategyFactory, NoneCredentialProvider, NoopEncryptionManager, NoopKeyValidator, NoopTrustStoreProvider, NotAuthorized, PROFILE_NAME_GATED, PROFILE_NAME_GATED_CALLBACK, PROFILE_NAME_OPEN$1 as PROFILE_NAME_OPEN, PROFILE_NAME_OVERLAY, PROFILE_NAME_OVERLAY_CALLBACK, PROFILE_NAME_STRICT_OVERLAY, PromptCredentialProvider, REPLICA_STICKINESS_MANAGER_FACTORY_BASE_TYPE, REQUIRED_FIELDS_BY_KTY, ReplicaStickinessManagerFactory, RootSessionManager, RouteManager, RpcMixin, RpcProxy, SEALED_ENVELOPE_NONCE_LENGTH, SEALED_ENVELOPE_OVERHEAD, SEALED_ENVELOPE_PRIVATE_KEY_LENGTH, SEALED_ENVELOPE_PUBLIC_KEY_LENGTH, SEALED_ENVELOPE_TAG_LENGTH, SECURE_CHANNEL_MANAGER_FACTORY_BASE_TYPE, SECURITY_MANAGER_FACTORY_BASE_TYPE, SECURITY_POLICY_FACTORY_BASE_TYPE, STORAGE_PROVIDER_FACTORY_BASE_TYPE, SecretSource, SecretStoreCredentialProvider, SecureChannelFrameHandler, SecureChannelManagerFactory, SecurityAction, SecurityRequirements, Sentinel, SentinelFactory, SessionKeyCredentialProvider, SignaturePolicy, SigningConfig as SigningConfigClass, SigningConfiguration, SimpleLoadBalancerStickinessManager, SimpleLoadBalancerStickinessManagerFactory, StaticCredentialProvider, StorageAESEncryptionManager, TOKEN_ISSUER_FACTORY_BASE_TYPE, TOKEN_PROVIDER_FACTORY_BASE_TYPE, TOKEN_VERIFIER_FACTORY_BASE_TYPE, TRANSPORT_PROVISIONER_FACTORY_BASE_TYPE, TRUST_STORE_PROVIDER_FACTORY_BASE_TYPE, TaskSpawner, TokenIssuerFactory, TokenProviderFactory, TokenSubjectNodeIdentityPolicy, TokenSubjectNodeIdentityPolicyFactory, TokenVerifierFactory, TransportProvisionerFactory, TrustStoreProviderFactory, TtlValidationError, UpstreamSessionManager, VALID_ACTIONS, VALID_CURVES_BY_KTY, VALID_EFFECTS, VALID_KEY_USES, VALID_ORIGIN_TYPES, VERSION, WEBSOCKET_CONNECTION_GRANT_TYPE, WELCOME_SERVICE_FACTORY_BASE_TYPE, WebSocketCloseCode, WebSocketConnector, WebSocketState, WelcomeServiceFactory, _NoopFlowController, __runtimePluginLoader, addEnvelopeFields, addLogLevel, addTimestamp, assertConnectionGrant, assertGrant, assertNotRegexPattern, basicConfig, broadcastChannelGrantToConnectorConfig, camelToSnakeCase, canonicalJson, capitalizeFirstLetter, color, compareCryptoLevels, compileGlobOnlyScopeRequirement, compileGlobPattern, compilePattern, compileScopeRequirement, compiledPathPattern, consoleTransport, convertWildcardLogicalToDnsConstraint, createConnectorConfig, createEd25519Keypair, createHostLogicalUri, createLogicalUri, createNodeDeliveryContext, createResource, createRpcProxy, createRsaKeypair, createTransportCloseError, createX25519Keypair, credentialToString, currentTraceId$1 as currentTraceId, debounce, decodeBase64Url, decodeFameDataPayload, deepMerge, defaultJsonEncoder, delay, dropEmpty, enableLogging, encodeUtf8, ensureRuntimeFactoriesRegistered, evaluateScopeRequirement, extractId, extractPoolAddressBase, extractPoolBase, filterKeysByUse, formatTimestamp, formatTimestampForConsole$1 as formatTimestampForConsole, frameDigest, getCompiledGlobPattern, getCurrentEnvelope, getFabricForNode, getFameRoot, getKeyProvider, getKeyStore, getLogger, hasCryptoSupport, hostnameToLogical, hostnamesToLogicals, httpGrantToConnectorConfig, immutableHeaders, inPageGrantToConnectorConfig, isAuthInjectionStrategy, isBroadcastChannelConnectionGrant, isConnectionGrant, isConnectorConfig, isEnvelopeLoggingEnabled, isFameError, isFameErrorType, isGrant, isHttpConnectionGrant, isIdentityExposingTokenProvider, isInPageConnectionGrant, isNodeLike, isPlainObject$4 as isPlainObject, isPoolAddress, isPoolLogical, isRegexPattern, isRegisterable, isTokenExpired, isTokenProvider, isTokenValid, isWebSocketConnectionGrant, jsonDumps, logicalPatternsToDnsConstraints, logicalToHostname, logicalsToHostnames, matchPattern, matchesPoolAddress, matchesPoolLogical, maybeAwait, nodeWelcomeRouter, nodeWelcomeRouterPlugin, normalizeBroadcastChannelConnectionGrant, normalizeEncryptionConfig, normalizeEnvelopeSnapshot, normalizeHttpConnectionGrant, normalizeInPageConnectionGrant, normalizeInboundCryptoRules, normalizeInboundSigningRules, normalizeOutboundCryptoRules, normalizeOutboundSigningRules, normalizePath, normalizeResponseCryptoRules, normalizeResponseSigningRules, normalizeScopeRequirement, normalizeSecretSource, normalizeSecurityRequirements, normalizeSigningConfig, normalizeWebSocketConnectionGrant, objectToBytes, operation, parseSealedEnvelope, pinoTransport, prettyModel$1 as prettyModel, registerDefaultFactories, registerDefaultKeyStoreFactory, registerNodePlacementStrategyFactory, registerRuntimeFactories, requireCryptoSupport, retryWithBackoff, safeColor, safeImport, sealedDecrypt, sealedEncrypt, secureDigest, setKeyStore, showEnvelopes$1 as showEnvelopes, sleep, snakeToCamelCase, stringifyNonPrimitives, supportsColor, throttle, urlsafeBase64Decode, urlsafeBase64Encode, validateCacheTtlSec, validateEncryptionKey, validateHostLogical, validateHostLogicals, validateJwkComplete, validateJwkStructure, validateJwkUseField, validateJwtTokenTtlSec, validateKeyCorrelationTtlSec, validateLogical, validateLogicalSegment, validateOAuth2TtlSec, validateSigningKey, validateTtlSec, waitForAll, waitForAllSettled, waitForAny, websocketGrantToConnectorConfig, withEnvelopeContext, withEnvelopeContextAsync, withLegacySnakeCaseKeys, withLock, withTimeout };
|