@naylence/runtime 0.4.8 → 0.4.10
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 +23 -118
- package/dist/browser/index.mjs +24 -118
- package/dist/cjs/naylence/fame/node/factory-commons.js +2 -3
- package/dist/cjs/naylence/fame/security/auth/policy/authorization-policy-definition.js +1 -1
- package/dist/cjs/naylence/fame/security/auth/policy/basic-authorization-policy.js +18 -59
- package/dist/cjs/naylence/fame/security/index.js +1 -2
- package/dist/cjs/naylence/fame/security/node-security-profile-factory.js +1 -52
- package/dist/cjs/version.js +2 -2
- package/dist/esm/naylence/fame/node/factory-commons.js +2 -3
- package/dist/esm/naylence/fame/security/auth/policy/authorization-policy-definition.js +1 -1
- package/dist/esm/naylence/fame/security/auth/policy/basic-authorization-policy.js +18 -59
- package/dist/esm/naylence/fame/security/index.js +1 -1
- package/dist/esm/naylence/fame/security/node-security-profile-factory.js +0 -51
- package/dist/esm/version.js +2 -2
- package/dist/node/index.cjs +23 -118
- package/dist/node/index.mjs +24 -118
- package/dist/node/node.cjs +23 -118
- package/dist/node/node.mjs +24 -118
- package/dist/types/naylence/fame/security/auth/policy/authorization-policy-definition.d.ts +5 -1
- package/dist/types/naylence/fame/security/auth/policy/basic-authorization-policy.d.ts +0 -6
- package/dist/types/naylence/fame/security/index.d.ts +1 -1
- package/dist/types/naylence/fame/security/node-security-profile-factory.d.ts +0 -1
- package/dist/types/version.d.ts +1 -1
- package/package.json +1 -1
package/dist/browser/index.cjs
CHANGED
|
@@ -525,12 +525,12 @@ async function ensureRuntimeFactoriesRegistered(registry = factory.Registry) {
|
|
|
525
525
|
}
|
|
526
526
|
|
|
527
527
|
// This file is auto-generated during build - do not edit manually
|
|
528
|
-
// Generated from package.json version: 0.4.
|
|
528
|
+
// Generated from package.json version: 0.4.10
|
|
529
529
|
/**
|
|
530
530
|
* The package version, injected at build time.
|
|
531
531
|
* @internal
|
|
532
532
|
*/
|
|
533
|
-
const VERSION = '0.4.
|
|
533
|
+
const VERSION = '0.4.10';
|
|
534
534
|
|
|
535
535
|
let initialized = false;
|
|
536
536
|
const runtimePlugin = {
|
|
@@ -14219,9 +14219,8 @@ function requiresCryptoProvider(config) {
|
|
|
14219
14219
|
const profile = record.profile;
|
|
14220
14220
|
if (typeof profile === 'string') {
|
|
14221
14221
|
const profileLower = profile.toLowerCase();
|
|
14222
|
-
// Overlay variants require crypto provider for envelope signing
|
|
14223
|
-
if (profileLower.includes('overlay')
|
|
14224
|
-
profileLower === 'strict-overlay') {
|
|
14222
|
+
// Overlay variants (including strict-overlay) require crypto provider for envelope signing
|
|
14223
|
+
if (profileLower.includes('overlay')) {
|
|
14225
14224
|
return true;
|
|
14226
14225
|
}
|
|
14227
14226
|
}
|
|
@@ -22237,7 +22236,7 @@ const KNOWN_RULE_FIELDS = new Set([
|
|
|
22237
22236
|
'effect',
|
|
22238
22237
|
'action',
|
|
22239
22238
|
'address',
|
|
22240
|
-
'frame_type',
|
|
22239
|
+
'frame_type', // Reserved for advanced-security
|
|
22241
22240
|
'origin_type',
|
|
22242
22241
|
'scope',
|
|
22243
22242
|
'when', // Reserved for advanced-security
|
|
@@ -22760,11 +22759,6 @@ class BasicAuthorizationPolicy {
|
|
|
22760
22759
|
const resolvedActionNormalized = this.normalizeActionToken(resolvedAction) ?? resolvedAction;
|
|
22761
22760
|
const address = extractAddress(envelope);
|
|
22762
22761
|
const grantedScopes = extractGrantedScopes(context);
|
|
22763
|
-
const rawFrameType = envelope.frame
|
|
22764
|
-
?.type;
|
|
22765
|
-
const frameTypeNormalized = typeof rawFrameType === 'string' && rawFrameType.trim().length > 0
|
|
22766
|
-
? rawFrameType.trim().toLowerCase()
|
|
22767
|
-
: '';
|
|
22768
22762
|
// Extract and normalize origin type for rule matching
|
|
22769
22763
|
const rawOriginType = context?.originType;
|
|
22770
22764
|
const originTypeNormalized = typeof rawOriginType === 'string'
|
|
@@ -22782,22 +22776,16 @@ class BasicAuthorizationPolicy {
|
|
|
22782
22776
|
step.expression = 'when clause (skipped by basic policy)';
|
|
22783
22777
|
step.result = false;
|
|
22784
22778
|
evaluationTrace.push(step);
|
|
22779
|
+
logger$J.debug('rule_skipped_when_clause', { ruleId: rule.id });
|
|
22785
22780
|
continue;
|
|
22786
22781
|
}
|
|
22787
|
-
//
|
|
22788
|
-
if (rule.
|
|
22789
|
-
|
|
22790
|
-
|
|
22791
|
-
|
|
22792
|
-
|
|
22793
|
-
|
|
22794
|
-
}
|
|
22795
|
-
if (!rule.frameTypes.has(frameTypeNormalized)) {
|
|
22796
|
-
step.expression = `frame_type: ${rawFrameType ?? 'unknown'} not in rule set`;
|
|
22797
|
-
step.result = false;
|
|
22798
|
-
evaluationTrace.push(step);
|
|
22799
|
-
continue;
|
|
22800
|
-
}
|
|
22782
|
+
// Skip rules with 'frame_type' clause (reserved for advanced-security package)
|
|
22783
|
+
if (rule.hasFrameTypeClause) {
|
|
22784
|
+
step.expression = 'frame_type clause (skipped by basic policy)';
|
|
22785
|
+
step.result = false;
|
|
22786
|
+
evaluationTrace.push(step);
|
|
22787
|
+
logger$J.debug('rule_skipped_frame_type_clause', { ruleId: rule.id });
|
|
22788
|
+
continue;
|
|
22801
22789
|
}
|
|
22802
22790
|
// Check origin type match (early gate for efficiency)
|
|
22803
22791
|
if (rule.originTypes) {
|
|
@@ -22912,8 +22900,14 @@ class BasicAuthorizationPolicy {
|
|
|
22912
22900
|
const actions = this.compileActions(rule.action, id);
|
|
22913
22901
|
// Compile address patterns (glob-only, no regex)
|
|
22914
22902
|
const addressPatterns = this.compileAddress(rule.address, id);
|
|
22915
|
-
//
|
|
22916
|
-
const
|
|
22903
|
+
// Check for frame_type clause (reserved for advanced-security)
|
|
22904
|
+
const hasFrameTypeClause = rule.frame_type !== undefined;
|
|
22905
|
+
if (hasFrameTypeClause && warnOnUnknown) {
|
|
22906
|
+
logger$J.warning('reserved_field_frame_type_will_be_skipped', {
|
|
22907
|
+
ruleId: id,
|
|
22908
|
+
message: `Rule "${id}" uses reserved field "frame_type" which is only supported in advanced-security package. This rule will be skipped during evaluation.`,
|
|
22909
|
+
});
|
|
22910
|
+
}
|
|
22917
22911
|
// Compile origin type gating
|
|
22918
22912
|
const originTypes = this.compileOriginTypes(rule.origin_type, id);
|
|
22919
22913
|
// Compile scope matcher (glob-only, no regex)
|
|
@@ -22940,11 +22934,12 @@ class BasicAuthorizationPolicy {
|
|
|
22940
22934
|
description: rule.description,
|
|
22941
22935
|
effect: rule.effect,
|
|
22942
22936
|
actions,
|
|
22943
|
-
frameTypes,
|
|
22937
|
+
frameTypes: undefined, // No longer used; reserved for advanced-security
|
|
22944
22938
|
originTypes,
|
|
22945
22939
|
addressPatterns,
|
|
22946
22940
|
scopeMatcher,
|
|
22947
22941
|
hasWhenClause: typeof rule.when === 'string' && rule.when.length > 0,
|
|
22942
|
+
hasFrameTypeClause,
|
|
22948
22943
|
};
|
|
22949
22944
|
}
|
|
22950
22945
|
/**
|
|
@@ -23034,43 +23029,6 @@ class BasicAuthorizationPolicy {
|
|
|
23034
23029
|
}
|
|
23035
23030
|
return patterns;
|
|
23036
23031
|
}
|
|
23037
|
-
/**
|
|
23038
|
-
* Compiles frame_type field into a Set of normalized frame types.
|
|
23039
|
-
* Supports single string or array of strings (implicit any-of).
|
|
23040
|
-
* Returns undefined if not specified (no frame type gating).
|
|
23041
|
-
*/
|
|
23042
|
-
compileFrameTypes(frameType, ruleId) {
|
|
23043
|
-
if (frameType === undefined) {
|
|
23044
|
-
return undefined;
|
|
23045
|
-
}
|
|
23046
|
-
// Handle single frame type
|
|
23047
|
-
if (typeof frameType === 'string') {
|
|
23048
|
-
const normalized = frameType.trim().toLowerCase();
|
|
23049
|
-
if (!normalized) {
|
|
23050
|
-
throw new Error(`Invalid frame_type in rule "${ruleId}": value must not be empty`);
|
|
23051
|
-
}
|
|
23052
|
-
return new Set([normalized]);
|
|
23053
|
-
}
|
|
23054
|
-
// Handle array of frame types
|
|
23055
|
-
if (!Array.isArray(frameType)) {
|
|
23056
|
-
throw new Error(`Invalid frame_type in rule "${ruleId}": must be a string or array of strings`);
|
|
23057
|
-
}
|
|
23058
|
-
if (frameType.length === 0) {
|
|
23059
|
-
throw new Error(`Invalid frame_type in rule "${ruleId}": array must not be empty`);
|
|
23060
|
-
}
|
|
23061
|
-
const frameTypes = new Set();
|
|
23062
|
-
for (const ft of frameType) {
|
|
23063
|
-
if (typeof ft !== 'string') {
|
|
23064
|
-
throw new Error(`Invalid frame_type in rule "${ruleId}": all values must be strings`);
|
|
23065
|
-
}
|
|
23066
|
-
const normalized = ft.trim().toLowerCase();
|
|
23067
|
-
if (!normalized) {
|
|
23068
|
-
throw new Error(`Invalid frame_type in rule "${ruleId}": values must not be empty`);
|
|
23069
|
-
}
|
|
23070
|
-
frameTypes.add(normalized);
|
|
23071
|
-
}
|
|
23072
|
-
return frameTypes;
|
|
23073
|
-
}
|
|
23074
23032
|
/**
|
|
23075
23033
|
* Compiles origin_type field into a Set of normalized origin types.
|
|
23076
23034
|
* Supports single string or array of strings (implicit any-of).
|
|
@@ -29724,61 +29682,11 @@ const ENV_VAR_JWT_REVERSE_AUTH_AUDIENCE = 'FAME_JWT_REVERSE_AUTH_AUDIENCE';
|
|
|
29724
29682
|
const ENV_VAR_ENFORCE_TOKEN_SUBJECT_NODE_IDENTITY = 'FAME_ENFORCE_TOKEN_SUBJECT_NODE_IDENTITY';
|
|
29725
29683
|
const ENV_VAR_TRUSTED_CLIENT_SCOPE = 'FAME_TRUSTED_CLIENT_SCOPE';
|
|
29726
29684
|
const ENV_VAR_AUTHORIZATION_PROFILE = 'FAME_AUTHORIZATION_PROFILE';
|
|
29727
|
-
const PROFILE_NAME_STRICT_OVERLAY = 'strict-overlay';
|
|
29728
29685
|
const PROFILE_NAME_OVERLAY = 'overlay';
|
|
29729
29686
|
const PROFILE_NAME_OVERLAY_CALLBACK = 'overlay-callback';
|
|
29730
29687
|
const PROFILE_NAME_GATED = 'gated';
|
|
29731
29688
|
const PROFILE_NAME_GATED_CALLBACK = 'gated-callback';
|
|
29732
29689
|
const PROFILE_NAME_OPEN$1 = 'open';
|
|
29733
|
-
const STRICT_OVERLAY_PROFILE = {
|
|
29734
|
-
type: 'DefaultSecurityManager',
|
|
29735
|
-
security_policy: {
|
|
29736
|
-
type: 'DefaultSecurityPolicy',
|
|
29737
|
-
signing: {
|
|
29738
|
-
signing_material: 'x509-chain',
|
|
29739
|
-
require_cert_sid_match: true,
|
|
29740
|
-
inbound: {
|
|
29741
|
-
signature_policy: 'required',
|
|
29742
|
-
unsigned_violation_action: 'nack',
|
|
29743
|
-
invalid_signature_action: 'nack',
|
|
29744
|
-
},
|
|
29745
|
-
response: {
|
|
29746
|
-
mirror_request_signing: true,
|
|
29747
|
-
always_sign_responses: false,
|
|
29748
|
-
sign_error_responses: true,
|
|
29749
|
-
},
|
|
29750
|
-
outbound: {
|
|
29751
|
-
default_signing: true,
|
|
29752
|
-
sign_sensitive_operations: true,
|
|
29753
|
-
sign_if_recipient_expects: true,
|
|
29754
|
-
},
|
|
29755
|
-
},
|
|
29756
|
-
encryption: {
|
|
29757
|
-
inbound: {
|
|
29758
|
-
allow_plaintext: true,
|
|
29759
|
-
allow_channel: true,
|
|
29760
|
-
allow_sealed: true,
|
|
29761
|
-
plaintext_violation_action: 'nack',
|
|
29762
|
-
channel_violation_action: 'nack',
|
|
29763
|
-
sealed_violation_action: 'nack',
|
|
29764
|
-
},
|
|
29765
|
-
response: {
|
|
29766
|
-
mirror_request_level: true,
|
|
29767
|
-
minimum_response_level: 'plaintext',
|
|
29768
|
-
escalate_sealed_responses: false,
|
|
29769
|
-
},
|
|
29770
|
-
outbound: {
|
|
29771
|
-
default_level: factory.Expressions.env(ENV_VAR_DEFAULT_ENCRYPTION_LEVEL, 'channel'),
|
|
29772
|
-
escalate_if_peer_supports: false,
|
|
29773
|
-
prefer_sealed_for_sensitive: false,
|
|
29774
|
-
},
|
|
29775
|
-
},
|
|
29776
|
-
},
|
|
29777
|
-
authorizer: {
|
|
29778
|
-
type: 'AuthorizationProfile',
|
|
29779
|
-
profile: factory.Expressions.env(ENV_VAR_AUTHORIZATION_PROFILE, 'jwt'),
|
|
29780
|
-
},
|
|
29781
|
-
};
|
|
29782
29690
|
const OVERLAY_PROFILE = {
|
|
29783
29691
|
type: 'DefaultSecurityManager',
|
|
29784
29692
|
security_policy: {
|
|
@@ -29981,7 +29889,6 @@ const OPEN_PROFILE$1 = {
|
|
|
29981
29889
|
};
|
|
29982
29890
|
registerProfile(SECURITY_MANAGER_FACTORY_BASE_TYPE, PROFILE_NAME_OVERLAY, OVERLAY_PROFILE, { source: 'node-security-profile-factory' });
|
|
29983
29891
|
registerProfile(SECURITY_MANAGER_FACTORY_BASE_TYPE, PROFILE_NAME_OVERLAY_CALLBACK, OVERLAY_CALLBACK_PROFILE, { source: 'node-security-profile-factory' });
|
|
29984
|
-
registerProfile(SECURITY_MANAGER_FACTORY_BASE_TYPE, PROFILE_NAME_STRICT_OVERLAY, STRICT_OVERLAY_PROFILE, { source: 'node-security-profile-factory' });
|
|
29985
29892
|
registerProfile(SECURITY_MANAGER_FACTORY_BASE_TYPE, PROFILE_NAME_GATED, GATED_PROFILE, { source: 'node-security-profile-factory' });
|
|
29986
29893
|
registerProfile(SECURITY_MANAGER_FACTORY_BASE_TYPE, PROFILE_NAME_GATED_CALLBACK, GATED_CALLBACK_PROFILE, { source: 'node-security-profile-factory' });
|
|
29987
29894
|
registerProfile(SECURITY_MANAGER_FACTORY_BASE_TYPE, PROFILE_NAME_OPEN$1, OPEN_PROFILE$1, { source: 'node-security-profile-factory' });
|
|
@@ -30118,7 +30025,6 @@ var nodeSecurityProfileFactory = /*#__PURE__*/Object.freeze({
|
|
|
30118
30025
|
PROFILE_NAME_OPEN: PROFILE_NAME_OPEN$1,
|
|
30119
30026
|
PROFILE_NAME_OVERLAY: PROFILE_NAME_OVERLAY,
|
|
30120
30027
|
PROFILE_NAME_OVERLAY_CALLBACK: PROFILE_NAME_OVERLAY_CALLBACK,
|
|
30121
|
-
PROFILE_NAME_STRICT_OVERLAY: PROFILE_NAME_STRICT_OVERLAY,
|
|
30122
30028
|
default: NodeSecurityProfileFactory
|
|
30123
30029
|
});
|
|
30124
30030
|
|
|
@@ -43996,7 +43902,6 @@ exports.PROFILE_NAME_GATED_CALLBACK = PROFILE_NAME_GATED_CALLBACK;
|
|
|
43996
43902
|
exports.PROFILE_NAME_OPEN = PROFILE_NAME_OPEN$1;
|
|
43997
43903
|
exports.PROFILE_NAME_OVERLAY = PROFILE_NAME_OVERLAY;
|
|
43998
43904
|
exports.PROFILE_NAME_OVERLAY_CALLBACK = PROFILE_NAME_OVERLAY_CALLBACK;
|
|
43999
|
-
exports.PROFILE_NAME_STRICT_OVERLAY = PROFILE_NAME_STRICT_OVERLAY;
|
|
44000
43905
|
exports.PromptCredentialProvider = PromptCredentialProvider;
|
|
44001
43906
|
exports.REPLICA_STICKINESS_MANAGER_FACTORY_BASE_TYPE = REPLICA_STICKINESS_MANAGER_FACTORY_BASE_TYPE;
|
|
44002
43907
|
exports.REQUIRED_FIELDS_BY_KTY = REQUIRED_FIELDS_BY_KTY;
|
package/dist/browser/index.mjs
CHANGED
|
@@ -523,12 +523,12 @@ async function ensureRuntimeFactoriesRegistered(registry = Registry) {
|
|
|
523
523
|
}
|
|
524
524
|
|
|
525
525
|
// This file is auto-generated during build - do not edit manually
|
|
526
|
-
// Generated from package.json version: 0.4.
|
|
526
|
+
// Generated from package.json version: 0.4.10
|
|
527
527
|
/**
|
|
528
528
|
* The package version, injected at build time.
|
|
529
529
|
* @internal
|
|
530
530
|
*/
|
|
531
|
-
const VERSION = '0.4.
|
|
531
|
+
const VERSION = '0.4.10';
|
|
532
532
|
|
|
533
533
|
let initialized = false;
|
|
534
534
|
const runtimePlugin = {
|
|
@@ -14217,9 +14217,8 @@ function requiresCryptoProvider(config) {
|
|
|
14217
14217
|
const profile = record.profile;
|
|
14218
14218
|
if (typeof profile === 'string') {
|
|
14219
14219
|
const profileLower = profile.toLowerCase();
|
|
14220
|
-
// Overlay variants require crypto provider for envelope signing
|
|
14221
|
-
if (profileLower.includes('overlay')
|
|
14222
|
-
profileLower === 'strict-overlay') {
|
|
14220
|
+
// Overlay variants (including strict-overlay) require crypto provider for envelope signing
|
|
14221
|
+
if (profileLower.includes('overlay')) {
|
|
14223
14222
|
return true;
|
|
14224
14223
|
}
|
|
14225
14224
|
}
|
|
@@ -22235,7 +22234,7 @@ const KNOWN_RULE_FIELDS = new Set([
|
|
|
22235
22234
|
'effect',
|
|
22236
22235
|
'action',
|
|
22237
22236
|
'address',
|
|
22238
|
-
'frame_type',
|
|
22237
|
+
'frame_type', // Reserved for advanced-security
|
|
22239
22238
|
'origin_type',
|
|
22240
22239
|
'scope',
|
|
22241
22240
|
'when', // Reserved for advanced-security
|
|
@@ -22758,11 +22757,6 @@ class BasicAuthorizationPolicy {
|
|
|
22758
22757
|
const resolvedActionNormalized = this.normalizeActionToken(resolvedAction) ?? resolvedAction;
|
|
22759
22758
|
const address = extractAddress(envelope);
|
|
22760
22759
|
const grantedScopes = extractGrantedScopes(context);
|
|
22761
|
-
const rawFrameType = envelope.frame
|
|
22762
|
-
?.type;
|
|
22763
|
-
const frameTypeNormalized = typeof rawFrameType === 'string' && rawFrameType.trim().length > 0
|
|
22764
|
-
? rawFrameType.trim().toLowerCase()
|
|
22765
|
-
: '';
|
|
22766
22760
|
// Extract and normalize origin type for rule matching
|
|
22767
22761
|
const rawOriginType = context?.originType;
|
|
22768
22762
|
const originTypeNormalized = typeof rawOriginType === 'string'
|
|
@@ -22780,22 +22774,16 @@ class BasicAuthorizationPolicy {
|
|
|
22780
22774
|
step.expression = 'when clause (skipped by basic policy)';
|
|
22781
22775
|
step.result = false;
|
|
22782
22776
|
evaluationTrace.push(step);
|
|
22777
|
+
logger$J.debug('rule_skipped_when_clause', { ruleId: rule.id });
|
|
22783
22778
|
continue;
|
|
22784
22779
|
}
|
|
22785
|
-
//
|
|
22786
|
-
if (rule.
|
|
22787
|
-
|
|
22788
|
-
|
|
22789
|
-
|
|
22790
|
-
|
|
22791
|
-
|
|
22792
|
-
}
|
|
22793
|
-
if (!rule.frameTypes.has(frameTypeNormalized)) {
|
|
22794
|
-
step.expression = `frame_type: ${rawFrameType ?? 'unknown'} not in rule set`;
|
|
22795
|
-
step.result = false;
|
|
22796
|
-
evaluationTrace.push(step);
|
|
22797
|
-
continue;
|
|
22798
|
-
}
|
|
22780
|
+
// Skip rules with 'frame_type' clause (reserved for advanced-security package)
|
|
22781
|
+
if (rule.hasFrameTypeClause) {
|
|
22782
|
+
step.expression = 'frame_type clause (skipped by basic policy)';
|
|
22783
|
+
step.result = false;
|
|
22784
|
+
evaluationTrace.push(step);
|
|
22785
|
+
logger$J.debug('rule_skipped_frame_type_clause', { ruleId: rule.id });
|
|
22786
|
+
continue;
|
|
22799
22787
|
}
|
|
22800
22788
|
// Check origin type match (early gate for efficiency)
|
|
22801
22789
|
if (rule.originTypes) {
|
|
@@ -22910,8 +22898,14 @@ class BasicAuthorizationPolicy {
|
|
|
22910
22898
|
const actions = this.compileActions(rule.action, id);
|
|
22911
22899
|
// Compile address patterns (glob-only, no regex)
|
|
22912
22900
|
const addressPatterns = this.compileAddress(rule.address, id);
|
|
22913
|
-
//
|
|
22914
|
-
const
|
|
22901
|
+
// Check for frame_type clause (reserved for advanced-security)
|
|
22902
|
+
const hasFrameTypeClause = rule.frame_type !== undefined;
|
|
22903
|
+
if (hasFrameTypeClause && warnOnUnknown) {
|
|
22904
|
+
logger$J.warning('reserved_field_frame_type_will_be_skipped', {
|
|
22905
|
+
ruleId: id,
|
|
22906
|
+
message: `Rule "${id}" uses reserved field "frame_type" which is only supported in advanced-security package. This rule will be skipped during evaluation.`,
|
|
22907
|
+
});
|
|
22908
|
+
}
|
|
22915
22909
|
// Compile origin type gating
|
|
22916
22910
|
const originTypes = this.compileOriginTypes(rule.origin_type, id);
|
|
22917
22911
|
// Compile scope matcher (glob-only, no regex)
|
|
@@ -22938,11 +22932,12 @@ class BasicAuthorizationPolicy {
|
|
|
22938
22932
|
description: rule.description,
|
|
22939
22933
|
effect: rule.effect,
|
|
22940
22934
|
actions,
|
|
22941
|
-
frameTypes,
|
|
22935
|
+
frameTypes: undefined, // No longer used; reserved for advanced-security
|
|
22942
22936
|
originTypes,
|
|
22943
22937
|
addressPatterns,
|
|
22944
22938
|
scopeMatcher,
|
|
22945
22939
|
hasWhenClause: typeof rule.when === 'string' && rule.when.length > 0,
|
|
22940
|
+
hasFrameTypeClause,
|
|
22946
22941
|
};
|
|
22947
22942
|
}
|
|
22948
22943
|
/**
|
|
@@ -23032,43 +23027,6 @@ class BasicAuthorizationPolicy {
|
|
|
23032
23027
|
}
|
|
23033
23028
|
return patterns;
|
|
23034
23029
|
}
|
|
23035
|
-
/**
|
|
23036
|
-
* Compiles frame_type field into a Set of normalized frame types.
|
|
23037
|
-
* Supports single string or array of strings (implicit any-of).
|
|
23038
|
-
* Returns undefined if not specified (no frame type gating).
|
|
23039
|
-
*/
|
|
23040
|
-
compileFrameTypes(frameType, ruleId) {
|
|
23041
|
-
if (frameType === undefined) {
|
|
23042
|
-
return undefined;
|
|
23043
|
-
}
|
|
23044
|
-
// Handle single frame type
|
|
23045
|
-
if (typeof frameType === 'string') {
|
|
23046
|
-
const normalized = frameType.trim().toLowerCase();
|
|
23047
|
-
if (!normalized) {
|
|
23048
|
-
throw new Error(`Invalid frame_type in rule "${ruleId}": value must not be empty`);
|
|
23049
|
-
}
|
|
23050
|
-
return new Set([normalized]);
|
|
23051
|
-
}
|
|
23052
|
-
// Handle array of frame types
|
|
23053
|
-
if (!Array.isArray(frameType)) {
|
|
23054
|
-
throw new Error(`Invalid frame_type in rule "${ruleId}": must be a string or array of strings`);
|
|
23055
|
-
}
|
|
23056
|
-
if (frameType.length === 0) {
|
|
23057
|
-
throw new Error(`Invalid frame_type in rule "${ruleId}": array must not be empty`);
|
|
23058
|
-
}
|
|
23059
|
-
const frameTypes = new Set();
|
|
23060
|
-
for (const ft of frameType) {
|
|
23061
|
-
if (typeof ft !== 'string') {
|
|
23062
|
-
throw new Error(`Invalid frame_type in rule "${ruleId}": all values must be strings`);
|
|
23063
|
-
}
|
|
23064
|
-
const normalized = ft.trim().toLowerCase();
|
|
23065
|
-
if (!normalized) {
|
|
23066
|
-
throw new Error(`Invalid frame_type in rule "${ruleId}": values must not be empty`);
|
|
23067
|
-
}
|
|
23068
|
-
frameTypes.add(normalized);
|
|
23069
|
-
}
|
|
23070
|
-
return frameTypes;
|
|
23071
|
-
}
|
|
23072
23030
|
/**
|
|
23073
23031
|
* Compiles origin_type field into a Set of normalized origin types.
|
|
23074
23032
|
* Supports single string or array of strings (implicit any-of).
|
|
@@ -29722,61 +29680,11 @@ const ENV_VAR_JWT_REVERSE_AUTH_AUDIENCE = 'FAME_JWT_REVERSE_AUTH_AUDIENCE';
|
|
|
29722
29680
|
const ENV_VAR_ENFORCE_TOKEN_SUBJECT_NODE_IDENTITY = 'FAME_ENFORCE_TOKEN_SUBJECT_NODE_IDENTITY';
|
|
29723
29681
|
const ENV_VAR_TRUSTED_CLIENT_SCOPE = 'FAME_TRUSTED_CLIENT_SCOPE';
|
|
29724
29682
|
const ENV_VAR_AUTHORIZATION_PROFILE = 'FAME_AUTHORIZATION_PROFILE';
|
|
29725
|
-
const PROFILE_NAME_STRICT_OVERLAY = 'strict-overlay';
|
|
29726
29683
|
const PROFILE_NAME_OVERLAY = 'overlay';
|
|
29727
29684
|
const PROFILE_NAME_OVERLAY_CALLBACK = 'overlay-callback';
|
|
29728
29685
|
const PROFILE_NAME_GATED = 'gated';
|
|
29729
29686
|
const PROFILE_NAME_GATED_CALLBACK = 'gated-callback';
|
|
29730
29687
|
const PROFILE_NAME_OPEN$1 = 'open';
|
|
29731
|
-
const STRICT_OVERLAY_PROFILE = {
|
|
29732
|
-
type: 'DefaultSecurityManager',
|
|
29733
|
-
security_policy: {
|
|
29734
|
-
type: 'DefaultSecurityPolicy',
|
|
29735
|
-
signing: {
|
|
29736
|
-
signing_material: 'x509-chain',
|
|
29737
|
-
require_cert_sid_match: true,
|
|
29738
|
-
inbound: {
|
|
29739
|
-
signature_policy: 'required',
|
|
29740
|
-
unsigned_violation_action: 'nack',
|
|
29741
|
-
invalid_signature_action: 'nack',
|
|
29742
|
-
},
|
|
29743
|
-
response: {
|
|
29744
|
-
mirror_request_signing: true,
|
|
29745
|
-
always_sign_responses: false,
|
|
29746
|
-
sign_error_responses: true,
|
|
29747
|
-
},
|
|
29748
|
-
outbound: {
|
|
29749
|
-
default_signing: true,
|
|
29750
|
-
sign_sensitive_operations: true,
|
|
29751
|
-
sign_if_recipient_expects: true,
|
|
29752
|
-
},
|
|
29753
|
-
},
|
|
29754
|
-
encryption: {
|
|
29755
|
-
inbound: {
|
|
29756
|
-
allow_plaintext: true,
|
|
29757
|
-
allow_channel: true,
|
|
29758
|
-
allow_sealed: true,
|
|
29759
|
-
plaintext_violation_action: 'nack',
|
|
29760
|
-
channel_violation_action: 'nack',
|
|
29761
|
-
sealed_violation_action: 'nack',
|
|
29762
|
-
},
|
|
29763
|
-
response: {
|
|
29764
|
-
mirror_request_level: true,
|
|
29765
|
-
minimum_response_level: 'plaintext',
|
|
29766
|
-
escalate_sealed_responses: false,
|
|
29767
|
-
},
|
|
29768
|
-
outbound: {
|
|
29769
|
-
default_level: Expressions.env(ENV_VAR_DEFAULT_ENCRYPTION_LEVEL, 'channel'),
|
|
29770
|
-
escalate_if_peer_supports: false,
|
|
29771
|
-
prefer_sealed_for_sensitive: false,
|
|
29772
|
-
},
|
|
29773
|
-
},
|
|
29774
|
-
},
|
|
29775
|
-
authorizer: {
|
|
29776
|
-
type: 'AuthorizationProfile',
|
|
29777
|
-
profile: Expressions.env(ENV_VAR_AUTHORIZATION_PROFILE, 'jwt'),
|
|
29778
|
-
},
|
|
29779
|
-
};
|
|
29780
29688
|
const OVERLAY_PROFILE = {
|
|
29781
29689
|
type: 'DefaultSecurityManager',
|
|
29782
29690
|
security_policy: {
|
|
@@ -29979,7 +29887,6 @@ const OPEN_PROFILE$1 = {
|
|
|
29979
29887
|
};
|
|
29980
29888
|
registerProfile(SECURITY_MANAGER_FACTORY_BASE_TYPE, PROFILE_NAME_OVERLAY, OVERLAY_PROFILE, { source: 'node-security-profile-factory' });
|
|
29981
29889
|
registerProfile(SECURITY_MANAGER_FACTORY_BASE_TYPE, PROFILE_NAME_OVERLAY_CALLBACK, OVERLAY_CALLBACK_PROFILE, { source: 'node-security-profile-factory' });
|
|
29982
|
-
registerProfile(SECURITY_MANAGER_FACTORY_BASE_TYPE, PROFILE_NAME_STRICT_OVERLAY, STRICT_OVERLAY_PROFILE, { source: 'node-security-profile-factory' });
|
|
29983
29890
|
registerProfile(SECURITY_MANAGER_FACTORY_BASE_TYPE, PROFILE_NAME_GATED, GATED_PROFILE, { source: 'node-security-profile-factory' });
|
|
29984
29891
|
registerProfile(SECURITY_MANAGER_FACTORY_BASE_TYPE, PROFILE_NAME_GATED_CALLBACK, GATED_CALLBACK_PROFILE, { source: 'node-security-profile-factory' });
|
|
29985
29892
|
registerProfile(SECURITY_MANAGER_FACTORY_BASE_TYPE, PROFILE_NAME_OPEN$1, OPEN_PROFILE$1, { source: 'node-security-profile-factory' });
|
|
@@ -30116,7 +30023,6 @@ var nodeSecurityProfileFactory = /*#__PURE__*/Object.freeze({
|
|
|
30116
30023
|
PROFILE_NAME_OPEN: PROFILE_NAME_OPEN$1,
|
|
30117
30024
|
PROFILE_NAME_OVERLAY: PROFILE_NAME_OVERLAY,
|
|
30118
30025
|
PROFILE_NAME_OVERLAY_CALLBACK: PROFILE_NAME_OVERLAY_CALLBACK,
|
|
30119
|
-
PROFILE_NAME_STRICT_OVERLAY: PROFILE_NAME_STRICT_OVERLAY,
|
|
30120
30026
|
default: NodeSecurityProfileFactory
|
|
30121
30027
|
});
|
|
30122
30028
|
|
|
@@ -43836,4 +43742,4 @@ var otelSetup = /*#__PURE__*/Object.freeze({
|
|
|
43836
43742
|
setupOtel: setupOtel
|
|
43837
43743
|
});
|
|
43838
43744
|
|
|
43839
|
-
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, FACTORY_META$$ as BROADCAST_CHANNEL_CONNECTOR_FACTORY_META, BROADCAST_CHANNEL_CONNECTOR_TYPE, FACTORY_META$Z as BROADCAST_CHANNEL_LISTENER_FACTORY_META, BackPressureFull, BaseAsyncConnector, BaseNodeEventListener, BasicAuthorizationPolicy, BasicAuthorizationPolicyFactory, BindingManager, BindingStoreEntryRecord, BroadcastChannelConnector, BroadcastChannelConnectorFactory, BroadcastChannelListener, BroadcastChannelListenerFactory, 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, FACTORY_META$10 as INPAGE_CONNECTOR_FACTORY_META, INPAGE_CONNECTOR_TYPE, FACTORY_META$_ as INPAGE_LISTENER_FACTORY_META, InMemoryBinding, InMemoryFanoutBroker, InMemoryKeyValueStore, InMemoryReadWriteChannel, InMemoryStorageProvider, InPageConnector, InPageConnectorFactory, InPageListener, InPageListenerFactory, 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, clearProfiles, 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, getProfile, 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, listProfiles, 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, registerProfile, 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 };
|
|
43745
|
+
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, FACTORY_META$$ as BROADCAST_CHANNEL_CONNECTOR_FACTORY_META, BROADCAST_CHANNEL_CONNECTOR_TYPE, FACTORY_META$Z as BROADCAST_CHANNEL_LISTENER_FACTORY_META, BackPressureFull, BaseAsyncConnector, BaseNodeEventListener, BasicAuthorizationPolicy, BasicAuthorizationPolicyFactory, BindingManager, BindingStoreEntryRecord, BroadcastChannelConnector, BroadcastChannelConnectorFactory, BroadcastChannelListener, BroadcastChannelListenerFactory, 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, FACTORY_META$10 as INPAGE_CONNECTOR_FACTORY_META, INPAGE_CONNECTOR_TYPE, FACTORY_META$_ as INPAGE_LISTENER_FACTORY_META, InMemoryBinding, InMemoryFanoutBroker, InMemoryKeyValueStore, InMemoryReadWriteChannel, InMemoryStorageProvider, InPageConnector, InPageConnectorFactory, InPageListener, InPageListenerFactory, 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, 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, clearProfiles, 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, getProfile, 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, listProfiles, 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, registerProfile, 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 };
|
|
@@ -496,9 +496,8 @@ function requiresCryptoProvider(config) {
|
|
|
496
496
|
const profile = record.profile;
|
|
497
497
|
if (typeof profile === 'string') {
|
|
498
498
|
const profileLower = profile.toLowerCase();
|
|
499
|
-
// Overlay variants require crypto provider for envelope signing
|
|
500
|
-
if (profileLower.includes('overlay')
|
|
501
|
-
profileLower === 'strict-overlay') {
|
|
499
|
+
// Overlay variants (including strict-overlay) require crypto provider for envelope signing
|
|
500
|
+
if (profileLower.includes('overlay')) {
|
|
502
501
|
return true;
|
|
503
502
|
}
|
|
504
503
|
}
|
|
@@ -96,11 +96,6 @@ class BasicAuthorizationPolicy {
|
|
|
96
96
|
const resolvedActionNormalized = this.normalizeActionToken(resolvedAction) ?? resolvedAction;
|
|
97
97
|
const address = extractAddress(envelope);
|
|
98
98
|
const grantedScopes = extractGrantedScopes(context);
|
|
99
|
-
const rawFrameType = envelope.frame
|
|
100
|
-
?.type;
|
|
101
|
-
const frameTypeNormalized = typeof rawFrameType === 'string' && rawFrameType.trim().length > 0
|
|
102
|
-
? rawFrameType.trim().toLowerCase()
|
|
103
|
-
: '';
|
|
104
99
|
// Extract and normalize origin type for rule matching
|
|
105
100
|
const rawOriginType = context?.originType;
|
|
106
101
|
const originTypeNormalized = typeof rawOriginType === 'string'
|
|
@@ -118,22 +113,16 @@ class BasicAuthorizationPolicy {
|
|
|
118
113
|
step.expression = 'when clause (skipped by basic policy)';
|
|
119
114
|
step.result = false;
|
|
120
115
|
evaluationTrace.push(step);
|
|
116
|
+
logger.debug('rule_skipped_when_clause', { ruleId: rule.id });
|
|
121
117
|
continue;
|
|
122
118
|
}
|
|
123
|
-
//
|
|
124
|
-
if (rule.
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
}
|
|
131
|
-
if (!rule.frameTypes.has(frameTypeNormalized)) {
|
|
132
|
-
step.expression = `frame_type: ${rawFrameType ?? 'unknown'} not in rule set`;
|
|
133
|
-
step.result = false;
|
|
134
|
-
evaluationTrace.push(step);
|
|
135
|
-
continue;
|
|
136
|
-
}
|
|
119
|
+
// Skip rules with 'frame_type' clause (reserved for advanced-security package)
|
|
120
|
+
if (rule.hasFrameTypeClause) {
|
|
121
|
+
step.expression = 'frame_type clause (skipped by basic policy)';
|
|
122
|
+
step.result = false;
|
|
123
|
+
evaluationTrace.push(step);
|
|
124
|
+
logger.debug('rule_skipped_frame_type_clause', { ruleId: rule.id });
|
|
125
|
+
continue;
|
|
137
126
|
}
|
|
138
127
|
// Check origin type match (early gate for efficiency)
|
|
139
128
|
if (rule.originTypes) {
|
|
@@ -248,8 +237,14 @@ class BasicAuthorizationPolicy {
|
|
|
248
237
|
const actions = this.compileActions(rule.action, id);
|
|
249
238
|
// Compile address patterns (glob-only, no regex)
|
|
250
239
|
const addressPatterns = this.compileAddress(rule.address, id);
|
|
251
|
-
//
|
|
252
|
-
const
|
|
240
|
+
// Check for frame_type clause (reserved for advanced-security)
|
|
241
|
+
const hasFrameTypeClause = rule.frame_type !== undefined;
|
|
242
|
+
if (hasFrameTypeClause && warnOnUnknown) {
|
|
243
|
+
logger.warning('reserved_field_frame_type_will_be_skipped', {
|
|
244
|
+
ruleId: id,
|
|
245
|
+
message: `Rule "${id}" uses reserved field "frame_type" which is only supported in advanced-security package. This rule will be skipped during evaluation.`,
|
|
246
|
+
});
|
|
247
|
+
}
|
|
253
248
|
// Compile origin type gating
|
|
254
249
|
const originTypes = this.compileOriginTypes(rule.origin_type, id);
|
|
255
250
|
// Compile scope matcher (glob-only, no regex)
|
|
@@ -276,11 +271,12 @@ class BasicAuthorizationPolicy {
|
|
|
276
271
|
description: rule.description,
|
|
277
272
|
effect: rule.effect,
|
|
278
273
|
actions,
|
|
279
|
-
frameTypes,
|
|
274
|
+
frameTypes: undefined, // No longer used; reserved for advanced-security
|
|
280
275
|
originTypes,
|
|
281
276
|
addressPatterns,
|
|
282
277
|
scopeMatcher,
|
|
283
278
|
hasWhenClause: typeof rule.when === 'string' && rule.when.length > 0,
|
|
279
|
+
hasFrameTypeClause,
|
|
284
280
|
};
|
|
285
281
|
}
|
|
286
282
|
/**
|
|
@@ -370,43 +366,6 @@ class BasicAuthorizationPolicy {
|
|
|
370
366
|
}
|
|
371
367
|
return patterns;
|
|
372
368
|
}
|
|
373
|
-
/**
|
|
374
|
-
* Compiles frame_type field into a Set of normalized frame types.
|
|
375
|
-
* Supports single string or array of strings (implicit any-of).
|
|
376
|
-
* Returns undefined if not specified (no frame type gating).
|
|
377
|
-
*/
|
|
378
|
-
compileFrameTypes(frameType, ruleId) {
|
|
379
|
-
if (frameType === undefined) {
|
|
380
|
-
return undefined;
|
|
381
|
-
}
|
|
382
|
-
// Handle single frame type
|
|
383
|
-
if (typeof frameType === 'string') {
|
|
384
|
-
const normalized = frameType.trim().toLowerCase();
|
|
385
|
-
if (!normalized) {
|
|
386
|
-
throw new Error(`Invalid frame_type in rule "${ruleId}": value must not be empty`);
|
|
387
|
-
}
|
|
388
|
-
return new Set([normalized]);
|
|
389
|
-
}
|
|
390
|
-
// Handle array of frame types
|
|
391
|
-
if (!Array.isArray(frameType)) {
|
|
392
|
-
throw new Error(`Invalid frame_type in rule "${ruleId}": must be a string or array of strings`);
|
|
393
|
-
}
|
|
394
|
-
if (frameType.length === 0) {
|
|
395
|
-
throw new Error(`Invalid frame_type in rule "${ruleId}": array must not be empty`);
|
|
396
|
-
}
|
|
397
|
-
const frameTypes = new Set();
|
|
398
|
-
for (const ft of frameType) {
|
|
399
|
-
if (typeof ft !== 'string') {
|
|
400
|
-
throw new Error(`Invalid frame_type in rule "${ruleId}": all values must be strings`);
|
|
401
|
-
}
|
|
402
|
-
const normalized = ft.trim().toLowerCase();
|
|
403
|
-
if (!normalized) {
|
|
404
|
-
throw new Error(`Invalid frame_type in rule "${ruleId}": values must not be empty`);
|
|
405
|
-
}
|
|
406
|
-
frameTypes.add(normalized);
|
|
407
|
-
}
|
|
408
|
-
return frameTypes;
|
|
409
|
-
}
|
|
410
369
|
/**
|
|
411
370
|
* Compiles origin_type field into a Set of normalized origin types.
|
|
412
371
|
* Supports single string or array of strings (implicit any-of).
|