@naylence/advanced-security 0.3.15 → 0.4.0
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 +2673 -3
- package/dist/browser/index.mjs +2684 -14
- package/dist/cjs/advanced-security-isomorphic.js +4 -0
- package/dist/cjs/advanced-security-isomorphic.js.map +1 -1
- package/dist/cjs/naylence/fame/expr/ast.js +135 -0
- package/dist/cjs/naylence/fame/expr/ast.js.map +1 -0
- package/dist/cjs/naylence/fame/expr/builtins.js +477 -0
- package/dist/cjs/naylence/fame/expr/builtins.js.map +1 -0
- package/dist/cjs/naylence/fame/expr/errors.js +88 -0
- package/dist/cjs/naylence/fame/expr/errors.js.map +1 -0
- package/dist/cjs/naylence/fame/expr/evaluator.js +385 -0
- package/dist/cjs/naylence/fame/expr/evaluator.js.map +1 -0
- package/dist/cjs/naylence/fame/expr/index.js +21 -0
- package/dist/cjs/naylence/fame/expr/index.js.map +1 -0
- package/dist/cjs/naylence/fame/expr/limits.js +80 -0
- package/dist/cjs/naylence/fame/expr/limits.js.map +1 -0
- package/dist/cjs/naylence/fame/expr/parser.js +429 -0
- package/dist/cjs/naylence/fame/expr/parser.js.map +1 -0
- package/dist/cjs/naylence/fame/expr/tokenizer.js +336 -0
- package/dist/cjs/naylence/fame/expr/tokenizer.js.map +1 -0
- package/dist/cjs/naylence/fame/factory-manifest.js +2 -0
- package/dist/cjs/naylence/fame/factory-manifest.js.map +1 -1
- package/dist/cjs/naylence/fame/security/auth/index.js +7 -0
- package/dist/cjs/naylence/fame/security/auth/index.js.map +1 -0
- package/dist/cjs/naylence/fame/security/auth/policy/advanced-authorization-policy-factory.js +70 -0
- package/dist/cjs/naylence/fame/security/auth/policy/advanced-authorization-policy-factory.js.map +1 -0
- package/dist/cjs/naylence/fame/security/auth/policy/advanced-authorization-policy.js +562 -0
- package/dist/cjs/naylence/fame/security/auth/policy/advanced-authorization-policy.js.map +1 -0
- package/dist/cjs/naylence/fame/security/auth/policy/expr-builtins.js +129 -0
- package/dist/cjs/naylence/fame/security/auth/policy/expr-builtins.js.map +1 -0
- package/dist/cjs/naylence/fame/security/auth/policy/index.js +15 -0
- package/dist/cjs/naylence/fame/security/auth/policy/index.js.map +1 -0
- package/dist/cjs/naylence/fame/security/index.js +2 -0
- package/dist/cjs/naylence/fame/security/index.js.map +1 -1
- package/dist/cjs/naylence/fame/security/register-advanced-security-factories.js +2 -0
- package/dist/cjs/naylence/fame/security/register-advanced-security-factories.js.map +1 -1
- package/dist/cjs/naylence/fame/security/strict-overlay-security-profile.js +64 -0
- package/dist/cjs/naylence/fame/security/strict-overlay-security-profile.js.map +1 -0
- package/dist/cjs/plugin.js +2 -0
- package/dist/cjs/plugin.js.map +1 -1
- package/dist/cjs/version.js +2 -2
- package/dist/cjs/version.js.map +1 -1
- package/dist/esm/advanced-security-isomorphic.js +4 -0
- package/dist/esm/advanced-security-isomorphic.js.map +1 -1
- package/dist/esm/naylence/fame/expr/ast.js +135 -0
- package/dist/esm/naylence/fame/expr/ast.js.map +1 -0
- package/dist/esm/naylence/fame/expr/builtins.js +477 -0
- package/dist/esm/naylence/fame/expr/builtins.js.map +1 -0
- package/dist/esm/naylence/fame/expr/errors.js +88 -0
- package/dist/esm/naylence/fame/expr/errors.js.map +1 -0
- package/dist/esm/naylence/fame/expr/evaluator.js +385 -0
- package/dist/esm/naylence/fame/expr/evaluator.js.map +1 -0
- package/dist/esm/naylence/fame/expr/index.js +21 -0
- package/dist/esm/naylence/fame/expr/index.js.map +1 -0
- package/dist/esm/naylence/fame/expr/limits.js +80 -0
- package/dist/esm/naylence/fame/expr/limits.js.map +1 -0
- package/dist/esm/naylence/fame/expr/parser.js +429 -0
- package/dist/esm/naylence/fame/expr/parser.js.map +1 -0
- package/dist/esm/naylence/fame/expr/tokenizer.js +336 -0
- package/dist/esm/naylence/fame/expr/tokenizer.js.map +1 -0
- package/dist/esm/naylence/fame/factory-manifest.js +2 -0
- package/dist/esm/naylence/fame/factory-manifest.js.map +1 -1
- package/dist/esm/naylence/fame/security/auth/index.js +7 -0
- package/dist/esm/naylence/fame/security/auth/index.js.map +1 -0
- package/dist/esm/naylence/fame/security/auth/policy/advanced-authorization-policy-factory.js +70 -0
- package/dist/esm/naylence/fame/security/auth/policy/advanced-authorization-policy-factory.js.map +1 -0
- package/dist/esm/naylence/fame/security/auth/policy/advanced-authorization-policy.js +562 -0
- package/dist/esm/naylence/fame/security/auth/policy/advanced-authorization-policy.js.map +1 -0
- package/dist/esm/naylence/fame/security/auth/policy/expr-builtins.js +129 -0
- package/dist/esm/naylence/fame/security/auth/policy/expr-builtins.js.map +1 -0
- package/dist/esm/naylence/fame/security/auth/policy/index.js +15 -0
- package/dist/esm/naylence/fame/security/auth/policy/index.js.map +1 -0
- package/dist/esm/naylence/fame/security/index.js +2 -0
- package/dist/esm/naylence/fame/security/index.js.map +1 -1
- package/dist/esm/naylence/fame/security/register-advanced-security-factories.js +2 -0
- package/dist/esm/naylence/fame/security/register-advanced-security-factories.js.map +1 -1
- package/dist/esm/naylence/fame/security/strict-overlay-security-profile.js +64 -0
- package/dist/esm/naylence/fame/security/strict-overlay-security-profile.js.map +1 -0
- package/dist/esm/plugin.js +2 -0
- package/dist/esm/plugin.js.map +1 -1
- package/dist/esm/version.js +2 -2
- package/dist/esm/version.js.map +1 -1
- package/dist/node/index.cjs +2795 -6
- package/dist/node/index.mjs +2770 -15
- package/dist/node/node.cjs +2819 -3
- package/dist/node/node.mjs +2796 -15
- package/dist/types/advanced-security-isomorphic.d.ts +2 -0
- package/dist/types/advanced-security-isomorphic.d.ts.map +1 -1
- package/dist/types/naylence/fame/expr/ast.d.ts +85 -0
- package/dist/types/naylence/fame/expr/ast.d.ts.map +1 -0
- package/dist/types/naylence/fame/expr/builtins.d.ts +79 -0
- package/dist/types/naylence/fame/expr/builtins.d.ts.map +1 -0
- package/dist/types/naylence/fame/expr/errors.d.ts +61 -0
- package/dist/types/naylence/fame/expr/errors.d.ts.map +1 -0
- package/dist/types/naylence/fame/expr/evaluator.d.ts +90 -0
- package/dist/types/naylence/fame/expr/evaluator.d.ts.map +1 -0
- package/dist/types/naylence/fame/expr/index.d.ts +16 -0
- package/dist/types/naylence/fame/expr/index.d.ts.map +1 -0
- package/dist/types/naylence/fame/expr/limits.d.ts +65 -0
- package/dist/types/naylence/fame/expr/limits.d.ts.map +1 -0
- package/dist/types/naylence/fame/expr/parser.d.ts +102 -0
- package/dist/types/naylence/fame/expr/parser.d.ts.map +1 -0
- package/dist/types/naylence/fame/expr/tokenizer.d.ts +51 -0
- package/dist/types/naylence/fame/expr/tokenizer.d.ts.map +1 -0
- package/dist/types/naylence/fame/factory-manifest.d.ts +1 -1
- package/dist/types/naylence/fame/factory-manifest.d.ts.map +1 -1
- package/dist/types/naylence/fame/security/auth/index.d.ts +7 -0
- package/dist/types/naylence/fame/security/auth/index.d.ts.map +1 -0
- package/dist/types/naylence/fame/security/auth/policy/advanced-authorization-policy-factory.d.ts +47 -0
- package/dist/types/naylence/fame/security/auth/policy/advanced-authorization-policy-factory.d.ts.map +1 -0
- package/dist/types/naylence/fame/security/auth/policy/advanced-authorization-policy.d.ts +73 -0
- package/dist/types/naylence/fame/security/auth/policy/advanced-authorization-policy.d.ts.map +1 -0
- package/dist/types/naylence/fame/security/auth/policy/expr-builtins.d.ts +14 -0
- package/dist/types/naylence/fame/security/auth/policy/expr-builtins.d.ts.map +1 -0
- package/dist/types/naylence/fame/security/auth/policy/index.d.ts +12 -0
- package/dist/types/naylence/fame/security/auth/policy/index.d.ts.map +1 -0
- package/dist/types/naylence/fame/security/index.d.ts +2 -0
- package/dist/types/naylence/fame/security/index.d.ts.map +1 -1
- package/dist/types/naylence/fame/security/register-advanced-security-factories.d.ts +1 -0
- package/dist/types/naylence/fame/security/register-advanced-security-factories.d.ts.map +1 -1
- package/dist/types/naylence/fame/security/strict-overlay-security-profile.d.ts +11 -0
- package/dist/types/naylence/fame/security/strict-overlay-security-profile.d.ts.map +1 -0
- package/dist/types/plugin.d.ts.map +1 -1
- package/dist/types/version.d.ts +1 -1
- package/dist/types/version.d.ts.map +1 -1
- package/package.json +3 -3
|
@@ -5,6 +5,10 @@
|
|
|
5
5
|
* installing the shared dynamic importer shim used by Naylence plugins.
|
|
6
6
|
*/
|
|
7
7
|
export { VERSION } from "./version.js";
|
|
8
|
+
// Expression engine (browser-safe, uses @noble/hashes)
|
|
9
|
+
export * from "./naylence/fame/expr/index.js";
|
|
10
|
+
// Authorization policy with expression support (browser-safe)
|
|
11
|
+
export * from "./naylence/fame/security/auth/index.js";
|
|
8
12
|
export { validateJwkX5cCertificate, publicKeyFromX5c, } from "./naylence/fame/security/cert/util.js";
|
|
9
13
|
export { GRANT_PURPOSE_CA_SIGN } from "./naylence/fame/security/cert/grants.js";
|
|
10
14
|
export { createEd25519Csr, } from "./naylence/fame/security/cert/browser-csr.js";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"advanced-security-isomorphic.js","sourceRoot":"","sources":["../../src/advanced-security-isomorphic.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"advanced-security-isomorphic.js","sourceRoot":"","sources":["../../src/advanced-security-isomorphic.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,135 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Abstract Syntax Tree (AST) node types for the expression language.
|
|
3
|
+
*
|
|
4
|
+
* The AST is produced by the parser and consumed by the evaluator.
|
|
5
|
+
*/
|
|
6
|
+
// ============================================================
|
|
7
|
+
// AST Utilities
|
|
8
|
+
// ============================================================
|
|
9
|
+
/**
|
|
10
|
+
* Counts the total number of nodes in an AST.
|
|
11
|
+
*/
|
|
12
|
+
export function countAstNodes(node) {
|
|
13
|
+
let count = 1;
|
|
14
|
+
switch (node.type) {
|
|
15
|
+
case "StringLiteral":
|
|
16
|
+
case "NumberLiteral":
|
|
17
|
+
case "BooleanLiteral":
|
|
18
|
+
case "NullLiteral":
|
|
19
|
+
case "Identifier":
|
|
20
|
+
return count;
|
|
21
|
+
case "ArrayLiteral":
|
|
22
|
+
for (const element of node.elements) {
|
|
23
|
+
count += countAstNodes(element);
|
|
24
|
+
}
|
|
25
|
+
return count;
|
|
26
|
+
case "MemberAccess":
|
|
27
|
+
return count + countAstNodes(node.object);
|
|
28
|
+
case "IndexAccess":
|
|
29
|
+
return count + countAstNodes(node.object) + countAstNodes(node.index);
|
|
30
|
+
case "FunctionCall":
|
|
31
|
+
for (const arg of node.args) {
|
|
32
|
+
count += countAstNodes(arg);
|
|
33
|
+
}
|
|
34
|
+
return count;
|
|
35
|
+
case "UnaryOp":
|
|
36
|
+
return count + countAstNodes(node.operand);
|
|
37
|
+
case "BinaryOp":
|
|
38
|
+
return count + countAstNodes(node.left) + countAstNodes(node.right);
|
|
39
|
+
case "TernaryOp":
|
|
40
|
+
return (count +
|
|
41
|
+
countAstNodes(node.condition) +
|
|
42
|
+
countAstNodes(node.consequent) +
|
|
43
|
+
countAstNodes(node.alternate));
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
/**
|
|
47
|
+
* Calculates the maximum depth of an AST.
|
|
48
|
+
*/
|
|
49
|
+
export function calculateAstDepth(node) {
|
|
50
|
+
switch (node.type) {
|
|
51
|
+
case "StringLiteral":
|
|
52
|
+
case "NumberLiteral":
|
|
53
|
+
case "BooleanLiteral":
|
|
54
|
+
case "NullLiteral":
|
|
55
|
+
case "Identifier":
|
|
56
|
+
return 1;
|
|
57
|
+
case "ArrayLiteral": {
|
|
58
|
+
let maxChildDepth = 0;
|
|
59
|
+
for (const element of node.elements) {
|
|
60
|
+
maxChildDepth = Math.max(maxChildDepth, calculateAstDepth(element));
|
|
61
|
+
}
|
|
62
|
+
return 1 + maxChildDepth;
|
|
63
|
+
}
|
|
64
|
+
case "MemberAccess":
|
|
65
|
+
return 1 + calculateAstDepth(node.object);
|
|
66
|
+
case "IndexAccess":
|
|
67
|
+
return (1 +
|
|
68
|
+
Math.max(calculateAstDepth(node.object), calculateAstDepth(node.index)));
|
|
69
|
+
case "FunctionCall": {
|
|
70
|
+
let maxArgDepth = 0;
|
|
71
|
+
for (const arg of node.args) {
|
|
72
|
+
maxArgDepth = Math.max(maxArgDepth, calculateAstDepth(arg));
|
|
73
|
+
}
|
|
74
|
+
return 1 + maxArgDepth;
|
|
75
|
+
}
|
|
76
|
+
case "UnaryOp":
|
|
77
|
+
return 1 + calculateAstDepth(node.operand);
|
|
78
|
+
case "BinaryOp":
|
|
79
|
+
return (1 +
|
|
80
|
+
Math.max(calculateAstDepth(node.left), calculateAstDepth(node.right)));
|
|
81
|
+
case "TernaryOp":
|
|
82
|
+
return (1 +
|
|
83
|
+
Math.max(calculateAstDepth(node.condition), calculateAstDepth(node.consequent), calculateAstDepth(node.alternate)));
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
/**
|
|
87
|
+
* Returns a human-readable representation of an AST node for debugging.
|
|
88
|
+
*/
|
|
89
|
+
export function astToString(node, indent = 0) {
|
|
90
|
+
const prefix = " ".repeat(indent);
|
|
91
|
+
switch (node.type) {
|
|
92
|
+
case "StringLiteral":
|
|
93
|
+
return `${prefix}String: "${node.value}"`;
|
|
94
|
+
case "NumberLiteral":
|
|
95
|
+
return `${prefix}Number: ${node.value}`;
|
|
96
|
+
case "BooleanLiteral":
|
|
97
|
+
return `${prefix}Boolean: ${node.value}`;
|
|
98
|
+
case "NullLiteral":
|
|
99
|
+
return `${prefix}Null`;
|
|
100
|
+
case "ArrayLiteral":
|
|
101
|
+
return (`${prefix}Array:\n` +
|
|
102
|
+
node.elements.map((e) => astToString(e, indent + 1)).join("\n"));
|
|
103
|
+
case "Identifier":
|
|
104
|
+
return `${prefix}Identifier: ${node.name}`;
|
|
105
|
+
case "MemberAccess":
|
|
106
|
+
return (`${prefix}MemberAccess: .${node.property}\n` +
|
|
107
|
+
astToString(node.object, indent + 1));
|
|
108
|
+
case "IndexAccess":
|
|
109
|
+
return (`${prefix}IndexAccess:\n` +
|
|
110
|
+
`${prefix} object:\n` +
|
|
111
|
+
astToString(node.object, indent + 2) +
|
|
112
|
+
`\n${prefix} index:\n` +
|
|
113
|
+
astToString(node.index, indent + 2));
|
|
114
|
+
case "FunctionCall":
|
|
115
|
+
return (`${prefix}FunctionCall: ${node.name}\n` +
|
|
116
|
+
node.args.map((a) => astToString(a, indent + 1)).join("\n"));
|
|
117
|
+
case "UnaryOp":
|
|
118
|
+
return (`${prefix}UnaryOp: ${node.operator}\n` +
|
|
119
|
+
astToString(node.operand, indent + 1));
|
|
120
|
+
case "BinaryOp":
|
|
121
|
+
return (`${prefix}BinaryOp: ${node.operator}\n` +
|
|
122
|
+
astToString(node.left, indent + 1) +
|
|
123
|
+
"\n" +
|
|
124
|
+
astToString(node.right, indent + 1));
|
|
125
|
+
case "TernaryOp":
|
|
126
|
+
return (`${prefix}TernaryOp:\n` +
|
|
127
|
+
`${prefix} condition:\n` +
|
|
128
|
+
astToString(node.condition, indent + 2) +
|
|
129
|
+
`\n${prefix} consequent:\n` +
|
|
130
|
+
astToString(node.consequent, indent + 2) +
|
|
131
|
+
`\n${prefix} alternate:\n` +
|
|
132
|
+
astToString(node.alternate, indent + 2));
|
|
133
|
+
}
|
|
134
|
+
}
|
|
135
|
+
//# sourceMappingURL=ast.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ast.js","sourceRoot":"","sources":["../../../../../src/naylence/fame/expr/ast.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,477 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Built-in functions for the expression language.
|
|
3
|
+
*
|
|
4
|
+
* All built-in functions are pure and deterministic.
|
|
5
|
+
*
|
|
6
|
+
* Null handling semantics:
|
|
7
|
+
* - `undefined` is normalized to `null` throughout the expression value model.
|
|
8
|
+
* - Predicate-style builtins (starts_with, ends_with, contains, glob_match,
|
|
9
|
+
* regex_match, etc.) return `false` when passed `null` for required args
|
|
10
|
+
* instead of throwing an error.
|
|
11
|
+
* - Wrong non-null types still raise BuiltinError to surface real bugs.
|
|
12
|
+
* - Non-predicate operations (arithmetic, comparisons) remain strict.
|
|
13
|
+
*/
|
|
14
|
+
import { BuiltinError, EvaluationError } from "./errors.js";
|
|
15
|
+
import { sha256 } from '@noble/hashes/sha256';
|
|
16
|
+
import { generateFingerprintSync } from '@naylence/core';
|
|
17
|
+
import { checkGlobPatternLength, checkRegexPatternLength, } from "./limits.js";
|
|
18
|
+
/**
|
|
19
|
+
* Normalizes a JavaScript value to an ExprValue.
|
|
20
|
+
*
|
|
21
|
+
* Rules:
|
|
22
|
+
* - `undefined` -> `null`
|
|
23
|
+
* - `null` -> `null`
|
|
24
|
+
* - boolean/number/string -> returned as-is
|
|
25
|
+
* - array -> elements are recursively normalized
|
|
26
|
+
* - object -> returned as-is (reads will normalize on access)
|
|
27
|
+
* - other types (function, symbol, etc.) -> `null`
|
|
28
|
+
*
|
|
29
|
+
* This ensures `undefined` never leaks into the expression value model.
|
|
30
|
+
*/
|
|
31
|
+
export function normalizeJsValue(value) {
|
|
32
|
+
if (value === undefined || value === null) {
|
|
33
|
+
return null;
|
|
34
|
+
}
|
|
35
|
+
if (typeof value === "boolean" || typeof value === "number") {
|
|
36
|
+
return value;
|
|
37
|
+
}
|
|
38
|
+
if (typeof value === "string") {
|
|
39
|
+
return value;
|
|
40
|
+
}
|
|
41
|
+
if (Array.isArray(value)) {
|
|
42
|
+
return value.map((element) => normalizeJsValue(element));
|
|
43
|
+
}
|
|
44
|
+
if (typeof value === "object") {
|
|
45
|
+
// Return the object as-is; reads will normalize on access
|
|
46
|
+
return value;
|
|
47
|
+
}
|
|
48
|
+
// Function, symbol, bigint, etc. -> null
|
|
49
|
+
return null;
|
|
50
|
+
}
|
|
51
|
+
/**
|
|
52
|
+
* Gets the type name of a value for error messages.
|
|
53
|
+
*/
|
|
54
|
+
export function getTypeName(value) {
|
|
55
|
+
if (value === null)
|
|
56
|
+
return "null";
|
|
57
|
+
if (Array.isArray(value))
|
|
58
|
+
return "array";
|
|
59
|
+
return typeof value;
|
|
60
|
+
}
|
|
61
|
+
/**
|
|
62
|
+
* Asserts that a value is a string.
|
|
63
|
+
*/
|
|
64
|
+
function assertString(value, argName, functionName) {
|
|
65
|
+
if (typeof value !== "string") {
|
|
66
|
+
throw new BuiltinError(functionName, `${argName} must be a string, got ${getTypeName(value)}`);
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
/**
|
|
70
|
+
* Checks if a value is null (for null-tolerant predicates).
|
|
71
|
+
*/
|
|
72
|
+
function isNull(value) {
|
|
73
|
+
return value === null;
|
|
74
|
+
}
|
|
75
|
+
/**
|
|
76
|
+
* Asserts that a non-null value is a string (for null-tolerant predicates).
|
|
77
|
+
* Returns false if the value is null (indicating predicate should return false).
|
|
78
|
+
* Throws BuiltinError if the value is non-null but not a string.
|
|
79
|
+
*/
|
|
80
|
+
function assertStringOrNull(value, argName, functionName) {
|
|
81
|
+
if (isNull(value)) {
|
|
82
|
+
return false;
|
|
83
|
+
}
|
|
84
|
+
if (typeof value !== "string") {
|
|
85
|
+
throw new BuiltinError(functionName, `${argName} must be a string, got ${getTypeName(value)}`);
|
|
86
|
+
}
|
|
87
|
+
return true;
|
|
88
|
+
}
|
|
89
|
+
/**
|
|
90
|
+
* Gets an argument by index, throwing if not present.
|
|
91
|
+
*/
|
|
92
|
+
function getArg(args, index, functionName) {
|
|
93
|
+
const value = args[index];
|
|
94
|
+
if (value === undefined) {
|
|
95
|
+
throw new BuiltinError(functionName, `missing argument at index ${index}`);
|
|
96
|
+
}
|
|
97
|
+
return value;
|
|
98
|
+
}
|
|
99
|
+
/**
|
|
100
|
+
* Asserts argument count.
|
|
101
|
+
*/
|
|
102
|
+
function assertArgCount(args, expected, functionName) {
|
|
103
|
+
if (args.length !== expected) {
|
|
104
|
+
throw new BuiltinError(functionName, `expected ${expected} argument(s), got ${args.length}`);
|
|
105
|
+
}
|
|
106
|
+
}
|
|
107
|
+
/**
|
|
108
|
+
* Asserts argument count range.
|
|
109
|
+
*/
|
|
110
|
+
function assertArgCountRange(args, min, max, functionName) {
|
|
111
|
+
if (args.length < min || args.length > max) {
|
|
112
|
+
throw new BuiltinError(functionName, `expected ${min}-${max} argument(s), got ${args.length}`);
|
|
113
|
+
}
|
|
114
|
+
}
|
|
115
|
+
// ============================================================
|
|
116
|
+
// String Helpers
|
|
117
|
+
// ============================================================
|
|
118
|
+
/**
|
|
119
|
+
* lower(s: string) -> string
|
|
120
|
+
*
|
|
121
|
+
* Returns the lowercase version of the string.
|
|
122
|
+
*/
|
|
123
|
+
const lower = (args) => {
|
|
124
|
+
assertArgCount(args, 1, "lower");
|
|
125
|
+
const s = getArg(args, 0, "lower");
|
|
126
|
+
assertString(s, "s", "lower");
|
|
127
|
+
return s.toLowerCase();
|
|
128
|
+
};
|
|
129
|
+
/**
|
|
130
|
+
* upper(s: string) -> string
|
|
131
|
+
*
|
|
132
|
+
* Returns the uppercase version of the string.
|
|
133
|
+
*/
|
|
134
|
+
const upper = (args) => {
|
|
135
|
+
assertArgCount(args, 1, "upper");
|
|
136
|
+
const s = getArg(args, 0, "upper");
|
|
137
|
+
assertString(s, "s", "upper");
|
|
138
|
+
return s.toUpperCase();
|
|
139
|
+
};
|
|
140
|
+
/**
|
|
141
|
+
* starts_with(s: string, prefix: string) -> bool
|
|
142
|
+
*
|
|
143
|
+
* Returns true if the string starts with the prefix.
|
|
144
|
+
* Null-tolerant: returns false if either argument is null.
|
|
145
|
+
*/
|
|
146
|
+
const starts_with = (args) => {
|
|
147
|
+
assertArgCount(args, 2, "starts_with");
|
|
148
|
+
const s = getArg(args, 0, "starts_with");
|
|
149
|
+
const prefix = getArg(args, 1, "starts_with");
|
|
150
|
+
// Null-tolerant: return false if either arg is null
|
|
151
|
+
if (!assertStringOrNull(s, "s", "starts_with"))
|
|
152
|
+
return false;
|
|
153
|
+
if (!assertStringOrNull(prefix, "prefix", "starts_with"))
|
|
154
|
+
return false;
|
|
155
|
+
return s.startsWith(prefix);
|
|
156
|
+
};
|
|
157
|
+
/**
|
|
158
|
+
* ends_with(s: string, suffix: string) -> bool
|
|
159
|
+
*
|
|
160
|
+
* Returns true if the string ends with the suffix.
|
|
161
|
+
* Null-tolerant: returns false if either argument is null.
|
|
162
|
+
*/
|
|
163
|
+
const ends_with = (args) => {
|
|
164
|
+
assertArgCount(args, 2, "ends_with");
|
|
165
|
+
const s = getArg(args, 0, "ends_with");
|
|
166
|
+
const suffix = getArg(args, 1, "ends_with");
|
|
167
|
+
// Null-tolerant: return false if either arg is null
|
|
168
|
+
if (!assertStringOrNull(s, "s", "ends_with"))
|
|
169
|
+
return false;
|
|
170
|
+
if (!assertStringOrNull(suffix, "suffix", "ends_with"))
|
|
171
|
+
return false;
|
|
172
|
+
return s.endsWith(suffix);
|
|
173
|
+
};
|
|
174
|
+
/**
|
|
175
|
+
* contains(s: string, substring: string) -> bool
|
|
176
|
+
*
|
|
177
|
+
* Returns true if the string contains the substring.
|
|
178
|
+
* Null-tolerant: returns false if either argument is null.
|
|
179
|
+
*/
|
|
180
|
+
const contains = (args) => {
|
|
181
|
+
assertArgCount(args, 2, "contains");
|
|
182
|
+
const s = getArg(args, 0, "contains");
|
|
183
|
+
const substring = getArg(args, 1, "contains");
|
|
184
|
+
// Null-tolerant: return false if either arg is null
|
|
185
|
+
if (!assertStringOrNull(s, "s", "contains"))
|
|
186
|
+
return false;
|
|
187
|
+
if (!assertStringOrNull(substring, "substring", "contains"))
|
|
188
|
+
return false;
|
|
189
|
+
return s.includes(substring);
|
|
190
|
+
};
|
|
191
|
+
/**
|
|
192
|
+
* split(s: string, separator: string) -> string[]
|
|
193
|
+
*
|
|
194
|
+
* Splits the string by the separator.
|
|
195
|
+
*/
|
|
196
|
+
const split = (args) => {
|
|
197
|
+
assertArgCountRange(args, 1, 2, "split");
|
|
198
|
+
const s = getArg(args, 0, "split");
|
|
199
|
+
assertString(s, "s", "split");
|
|
200
|
+
const separator = args.length >= 2 ? getArg(args, 1, "split") : " ";
|
|
201
|
+
assertString(separator, "separator", "split");
|
|
202
|
+
return s.split(separator);
|
|
203
|
+
};
|
|
204
|
+
// ============================================================
|
|
205
|
+
// Collection Helpers
|
|
206
|
+
// ============================================================
|
|
207
|
+
/**
|
|
208
|
+
* len(x: string | array) -> number
|
|
209
|
+
*
|
|
210
|
+
* Returns the length of a string or array.
|
|
211
|
+
*/
|
|
212
|
+
const len = (args) => {
|
|
213
|
+
assertArgCount(args, 1, "len");
|
|
214
|
+
const x = getArg(args, 0, "len");
|
|
215
|
+
if (typeof x === "string") {
|
|
216
|
+
return x.length;
|
|
217
|
+
}
|
|
218
|
+
if (Array.isArray(x)) {
|
|
219
|
+
return x.length;
|
|
220
|
+
}
|
|
221
|
+
throw new BuiltinError("len", `expected string or array, got ${getTypeName(x)}`);
|
|
222
|
+
};
|
|
223
|
+
// ============================================================
|
|
224
|
+
// Generic Helpers
|
|
225
|
+
// ============================================================
|
|
226
|
+
/**
|
|
227
|
+
* exists(x: any) -> bool
|
|
228
|
+
*
|
|
229
|
+
* Returns true if the value is not null.
|
|
230
|
+
* Missing bindings and missing properties evaluate to null, so this
|
|
231
|
+
* can be used to check for presence.
|
|
232
|
+
*/
|
|
233
|
+
const exists = (args) => {
|
|
234
|
+
assertArgCount(args, 1, "exists");
|
|
235
|
+
const x = getArg(args, 0, "exists");
|
|
236
|
+
return x !== null;
|
|
237
|
+
};
|
|
238
|
+
/**
|
|
239
|
+
* coalesce(a: any, b: any) -> any
|
|
240
|
+
*
|
|
241
|
+
* Returns `a` if it is not null, otherwise returns `b`.
|
|
242
|
+
* This is useful for providing default values.
|
|
243
|
+
*/
|
|
244
|
+
const coalesce = (args) => {
|
|
245
|
+
assertArgCount(args, 2, "coalesce");
|
|
246
|
+
const a = getArg(args, 0, "coalesce");
|
|
247
|
+
const b = getArg(args, 1, "coalesce");
|
|
248
|
+
return a !== null ? a : b;
|
|
249
|
+
};
|
|
250
|
+
/**
|
|
251
|
+
* trim(s: string) -> string
|
|
252
|
+
*
|
|
253
|
+
* Trims whitespace from both ends of a string.
|
|
254
|
+
* Returns an empty string if `s` is null (for convenient composition).
|
|
255
|
+
* Throws BuiltinError if `s` is non-null but not a string.
|
|
256
|
+
*/
|
|
257
|
+
const trim = (args) => {
|
|
258
|
+
assertArgCount(args, 1, "trim");
|
|
259
|
+
const s = getArg(args, 0, "trim");
|
|
260
|
+
// Null-friendly: return empty string for null
|
|
261
|
+
if (s === null) {
|
|
262
|
+
return "";
|
|
263
|
+
}
|
|
264
|
+
// Strict type check for non-null values
|
|
265
|
+
if (typeof s !== "string") {
|
|
266
|
+
throw new BuiltinError("trim", `s must be a string, got ${getTypeName(s)}`);
|
|
267
|
+
}
|
|
268
|
+
return s.trim();
|
|
269
|
+
};
|
|
270
|
+
/**
|
|
271
|
+
* secure_hash(input_str: string, length: number) -> string
|
|
272
|
+
*
|
|
273
|
+
* Generates a deterministic secure hash/fingerprint of the input string.
|
|
274
|
+
* Uses SHA-256 hashing to create a stable identifier of the specified length.
|
|
275
|
+
* Returns base62-encoded string (alphanumeric, case-sensitive).
|
|
276
|
+
* Automatically rehashes if result contains blacklisted words.
|
|
277
|
+
* Returns empty string if input_str is null (for convenient composition).
|
|
278
|
+
* Throws BuiltinError if input_str is non-null but not a string, or if length is invalid.
|
|
279
|
+
*/
|
|
280
|
+
const secure_hash = (args) => {
|
|
281
|
+
assertArgCount(args, 2, "secure_hash");
|
|
282
|
+
const input_str = getArg(args, 0, "secure_hash");
|
|
283
|
+
const length = getArg(args, 1, "secure_hash");
|
|
284
|
+
// Null-friendly: return empty string for null input
|
|
285
|
+
if (input_str === null) {
|
|
286
|
+
return "";
|
|
287
|
+
}
|
|
288
|
+
// Strict type check for input_str
|
|
289
|
+
if (typeof input_str !== "string") {
|
|
290
|
+
throw new BuiltinError("secure_hash", `input_str must be a string, got ${getTypeName(input_str)}`);
|
|
291
|
+
}
|
|
292
|
+
// Strict type check for length
|
|
293
|
+
if (typeof length !== "number") {
|
|
294
|
+
throw new BuiltinError("secure_hash", `length must be a number, got ${getTypeName(length)}`);
|
|
295
|
+
}
|
|
296
|
+
// Validate length is a positive integer
|
|
297
|
+
if (!Number.isInteger(length) || length <= 0) {
|
|
298
|
+
throw new BuiltinError("secure_hash", `length must be a positive integer, got ${length}`);
|
|
299
|
+
}
|
|
300
|
+
// Use generateFingerprintSync from @naylence/core
|
|
301
|
+
// This provides SHA-256 hashing, base62 encoding, and profanity filtering
|
|
302
|
+
return generateFingerprintSync(input_str, length, sha256);
|
|
303
|
+
};
|
|
304
|
+
// ============================================================
|
|
305
|
+
// Pattern Helpers (BSL-only)
|
|
306
|
+
// ============================================================
|
|
307
|
+
/**
|
|
308
|
+
* Escapes special regex characters in a string.
|
|
309
|
+
*/
|
|
310
|
+
function escapeRegex(str) {
|
|
311
|
+
return str.replace(/[.*+?^${}()|[\]\\]/g, "\\$&");
|
|
312
|
+
}
|
|
313
|
+
/**
|
|
314
|
+
* Converts a glob pattern to a regex pattern.
|
|
315
|
+
*/
|
|
316
|
+
function globToRegex(glob) {
|
|
317
|
+
const parts = [];
|
|
318
|
+
let i = 0;
|
|
319
|
+
while (i < glob.length) {
|
|
320
|
+
const ch = glob[i];
|
|
321
|
+
if (ch === "*") {
|
|
322
|
+
if (glob[i + 1] === "*") {
|
|
323
|
+
// `**` matches any characters
|
|
324
|
+
parts.push(".*");
|
|
325
|
+
i += 2;
|
|
326
|
+
}
|
|
327
|
+
else {
|
|
328
|
+
// `*` matches any characters except dots
|
|
329
|
+
parts.push("[^.]*");
|
|
330
|
+
i += 1;
|
|
331
|
+
}
|
|
332
|
+
}
|
|
333
|
+
else if (ch === "?") {
|
|
334
|
+
// `?` matches a single character
|
|
335
|
+
parts.push("[^.]");
|
|
336
|
+
i += 1;
|
|
337
|
+
}
|
|
338
|
+
else {
|
|
339
|
+
parts.push(escapeRegex(ch));
|
|
340
|
+
i += 1;
|
|
341
|
+
}
|
|
342
|
+
}
|
|
343
|
+
return parts.join("");
|
|
344
|
+
}
|
|
345
|
+
/**
|
|
346
|
+
* glob_match(value: string, pattern: string) -> bool
|
|
347
|
+
*
|
|
348
|
+
* Returns true if the value matches the glob pattern.
|
|
349
|
+
* Glob syntax: * (single segment), ** (any depth), ? (single char)
|
|
350
|
+
* Null-tolerant: returns false if either argument is null.
|
|
351
|
+
*/
|
|
352
|
+
const glob_match = (args, context) => {
|
|
353
|
+
assertArgCount(args, 2, "glob_match");
|
|
354
|
+
const value = getArg(args, 0, "glob_match");
|
|
355
|
+
const pattern = getArg(args, 1, "glob_match");
|
|
356
|
+
// Null-tolerant: return false if either arg is null
|
|
357
|
+
if (!assertStringOrNull(value, "value", "glob_match"))
|
|
358
|
+
return false;
|
|
359
|
+
if (!assertStringOrNull(pattern, "pattern", "glob_match"))
|
|
360
|
+
return false;
|
|
361
|
+
// Validate pattern length
|
|
362
|
+
checkGlobPatternLength(pattern, context.limits);
|
|
363
|
+
// Convert glob to regex
|
|
364
|
+
const regexPattern = `^${globToRegex(pattern)}$`;
|
|
365
|
+
try {
|
|
366
|
+
const regex = new RegExp(regexPattern);
|
|
367
|
+
return regex.test(value);
|
|
368
|
+
}
|
|
369
|
+
catch {
|
|
370
|
+
throw new BuiltinError("glob_match", `invalid glob pattern: ${pattern}`);
|
|
371
|
+
}
|
|
372
|
+
};
|
|
373
|
+
/**
|
|
374
|
+
* Detects potentially catastrophic regex patterns.
|
|
375
|
+
*
|
|
376
|
+
* This is a best-effort heuristic check for common ReDoS patterns.
|
|
377
|
+
*/
|
|
378
|
+
function isSafeRegex(pattern) {
|
|
379
|
+
// Check for obvious catastrophic patterns:
|
|
380
|
+
// - Nested quantifiers: (a+)+, (a*)*
|
|
381
|
+
// - Overlapping alternation with quantifiers: (a|a)+
|
|
382
|
+
// Simple heuristic: reject patterns with nested quantifiers
|
|
383
|
+
const nestedQuantifiers = /([+*?]|\{\d+,?\d*\})\s*\)\s*([+*?]|\{\d+,?\d*\})/;
|
|
384
|
+
if (nestedQuantifiers.test(pattern)) {
|
|
385
|
+
return false;
|
|
386
|
+
}
|
|
387
|
+
// Reject patterns with excessive backtracking potential
|
|
388
|
+
const excessiveBacktracking = /(\.\*){3,}|(\.\+){3,}/;
|
|
389
|
+
if (excessiveBacktracking.test(pattern)) {
|
|
390
|
+
return false;
|
|
391
|
+
}
|
|
392
|
+
return true;
|
|
393
|
+
}
|
|
394
|
+
/**
|
|
395
|
+
* regex_match(value: string, pattern: string) -> bool
|
|
396
|
+
*
|
|
397
|
+
* Returns true if the value matches the regex pattern.
|
|
398
|
+
* The pattern is anchored (full match).
|
|
399
|
+
* Null-tolerant: returns false if either argument is null.
|
|
400
|
+
*/
|
|
401
|
+
const regex_match = (args, context) => {
|
|
402
|
+
assertArgCount(args, 2, "regex_match");
|
|
403
|
+
const value = getArg(args, 0, "regex_match");
|
|
404
|
+
const pattern = getArg(args, 1, "regex_match");
|
|
405
|
+
// Null-tolerant: return false if either arg is null
|
|
406
|
+
if (!assertStringOrNull(value, "value", "regex_match"))
|
|
407
|
+
return false;
|
|
408
|
+
if (!assertStringOrNull(pattern, "pattern", "regex_match"))
|
|
409
|
+
return false;
|
|
410
|
+
// Validate pattern length
|
|
411
|
+
checkRegexPatternLength(pattern, context.limits);
|
|
412
|
+
// Check for potentially unsafe patterns
|
|
413
|
+
if (!isSafeRegex(pattern)) {
|
|
414
|
+
throw new BuiltinError("regex_match", `pattern may cause excessive backtracking: ${pattern}`);
|
|
415
|
+
}
|
|
416
|
+
// Anchor the pattern for full match
|
|
417
|
+
const anchoredPattern = pattern.startsWith("^")
|
|
418
|
+
? pattern
|
|
419
|
+
: pattern.endsWith("$")
|
|
420
|
+
? pattern
|
|
421
|
+
: `^(?:${pattern})$`;
|
|
422
|
+
try {
|
|
423
|
+
const regex = new RegExp(anchoredPattern);
|
|
424
|
+
return regex.test(value);
|
|
425
|
+
}
|
|
426
|
+
catch (error) {
|
|
427
|
+
throw new BuiltinError("regex_match", `invalid regex pattern: ${pattern} - ${error instanceof Error ? error.message : String(error)}`);
|
|
428
|
+
}
|
|
429
|
+
};
|
|
430
|
+
// ============================================================
|
|
431
|
+
// Registry
|
|
432
|
+
// ============================================================
|
|
433
|
+
/**
|
|
434
|
+
* Registry of all built-in functions.
|
|
435
|
+
*/
|
|
436
|
+
export const BUILTIN_FUNCTIONS = new Map([
|
|
437
|
+
// String helpers
|
|
438
|
+
["lower", lower],
|
|
439
|
+
["upper", upper],
|
|
440
|
+
["starts_with", starts_with],
|
|
441
|
+
["ends_with", ends_with],
|
|
442
|
+
["contains", contains],
|
|
443
|
+
["split", split],
|
|
444
|
+
["trim", trim],
|
|
445
|
+
// Collection helpers
|
|
446
|
+
["len", len],
|
|
447
|
+
// Generic helpers
|
|
448
|
+
["exists", exists],
|
|
449
|
+
["coalesce", coalesce],
|
|
450
|
+
["secure_hash", secure_hash],
|
|
451
|
+
// Pattern helpers
|
|
452
|
+
["glob_match", glob_match],
|
|
453
|
+
["regex_match", regex_match],
|
|
454
|
+
]);
|
|
455
|
+
/**
|
|
456
|
+
* Calls a built-in function by name.
|
|
457
|
+
*
|
|
458
|
+
* @param name - The function name
|
|
459
|
+
* @param args - The function arguments
|
|
460
|
+
* @param context - The evaluation context
|
|
461
|
+
* @returns The function result
|
|
462
|
+
* @throws BuiltinError if the function doesn't exist or fails
|
|
463
|
+
*/
|
|
464
|
+
export function callBuiltin(name, args, context, functions = BUILTIN_FUNCTIONS) {
|
|
465
|
+
const fn = functions.get(name);
|
|
466
|
+
if (!fn) {
|
|
467
|
+
throw new EvaluationError(`Unknown function: ${name}`, context.position, context.source);
|
|
468
|
+
}
|
|
469
|
+
return fn(args, context);
|
|
470
|
+
}
|
|
471
|
+
/**
|
|
472
|
+
* Checks if a name is a built-in function.
|
|
473
|
+
*/
|
|
474
|
+
export function isBuiltinFunction(name, functions = BUILTIN_FUNCTIONS) {
|
|
475
|
+
return functions.has(name);
|
|
476
|
+
}
|
|
477
|
+
//# sourceMappingURL=builtins.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"builtins.js","sourceRoot":"","sources":["../../../../../src/naylence/fame/expr/builtins.ts"],"names":[],"mappings":"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"}
|