@timmeck/brain-core 2.0.4 → 2.2.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.
@@ -0,0 +1 @@
1
+ {"version":3,"file":"errors.js","sourceRoot":"","sources":["../../src/ipc/errors.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,MAAM,OAAO,QAAS,SAAQ,KAAK;IACxB,IAAI,CAAS;IACb,UAAU,CAAS;IAE5B,YAAY,OAAe,EAAE,IAAY,EAAE,aAAqB,GAAG;QACjE,KAAK,CAAC,OAAO,CAAC,CAAC;QACf,IAAI,CAAC,IAAI,GAAG,UAAU,CAAC;QACvB,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;QACjB,IAAI,CAAC,UAAU,GAAG,UAAU,CAAC;IAC/B,CAAC;CACF;AAED;;GAEG;AACH,MAAM,OAAO,eAAgB,SAAQ,QAAQ;IAC3C,YAAY,OAAe;QACzB,KAAK,CAAC,OAAO,EAAE,kBAAkB,EAAE,GAAG,CAAC,CAAC;QACxC,IAAI,CAAC,IAAI,GAAG,iBAAiB,CAAC;IAChC,CAAC;CACF;AAED;;GAEG;AACH,MAAM,OAAO,aAAc,SAAQ,QAAQ;IACzC,YAAY,OAAe;QACzB,KAAK,CAAC,OAAO,EAAE,WAAW,EAAE,GAAG,CAAC,CAAC;QACjC,IAAI,CAAC,IAAI,GAAG,eAAe,CAAC;IAC9B,CAAC;CACF;AAED;;GAEG;AACH,MAAM,OAAO,YAAa,SAAQ,QAAQ;IACxC,YAAY,UAAkB,qBAAqB;QACjD,KAAK,CAAC,OAAO,EAAE,SAAS,EAAE,GAAG,CAAC,CAAC;QAC/B,IAAI,CAAC,IAAI,GAAG,cAAc,CAAC;IAC7B,CAAC;CACF;AAED;;GAEG;AACH,MAAM,OAAO,uBAAwB,SAAQ,QAAQ;IACnD,YAAY,UAAkB,qBAAqB;QACjD,KAAK,CAAC,OAAO,EAAE,qBAAqB,EAAE,GAAG,CAAC,CAAC;QAC3C,IAAI,CAAC,IAAI,GAAG,yBAAyB,CAAC;IACxC,CAAC;CACF"}
@@ -0,0 +1,15 @@
1
+ export interface ValidationOptions {
2
+ maxStringLength?: number;
3
+ maxArrayLength?: number;
4
+ maxDepth?: number;
5
+ }
6
+ /**
7
+ * Validate IPC method params. Ensures params is a plain object,
8
+ * string fields don't exceed length limits, arrays aren't too large,
9
+ * and nesting isn't too deep. Throws ValidationError on failure.
10
+ */
11
+ export declare function validateParams(params: unknown, options?: ValidationOptions): Record<string, unknown>;
12
+ /**
13
+ * Create a validated IPC handler wrapper. Validates params before passing to the handler.
14
+ */
15
+ export declare function withValidation<T>(handler: (params: Record<string, unknown>) => T, options?: ValidationOptions): (params: unknown) => T;
@@ -0,0 +1,62 @@
1
+ import { ValidationError } from './errors.js';
2
+ const MAX_STRING_LENGTH = 10_240; // 10KB per string field
3
+ const MAX_ARRAY_LENGTH = 1000;
4
+ const MAX_DEPTH = 10;
5
+ /**
6
+ * Validate IPC method params. Ensures params is a plain object,
7
+ * string fields don't exceed length limits, arrays aren't too large,
8
+ * and nesting isn't too deep. Throws ValidationError on failure.
9
+ */
10
+ export function validateParams(params, options) {
11
+ const maxStr = options?.maxStringLength ?? MAX_STRING_LENGTH;
12
+ const maxArr = options?.maxArrayLength ?? MAX_ARRAY_LENGTH;
13
+ const maxDep = options?.maxDepth ?? MAX_DEPTH;
14
+ // Null/undefined → empty object (many methods accept no params)
15
+ if (params == null)
16
+ return {};
17
+ // Must be a plain object
18
+ if (typeof params !== 'object' || Array.isArray(params)) {
19
+ throw new ValidationError('Params must be a plain object');
20
+ }
21
+ // Deep validate
22
+ validateValue(params, 'params', maxStr, maxArr, maxDep, 0);
23
+ return params;
24
+ }
25
+ function validateValue(value, path, maxStr, maxArr, maxDep, depth) {
26
+ if (depth > maxDep) {
27
+ throw new ValidationError(`Maximum nesting depth exceeded at ${path}`);
28
+ }
29
+ if (typeof value === 'string') {
30
+ if (value.length > maxStr) {
31
+ throw new ValidationError(`String field "${path}" exceeds maximum length of ${maxStr}`);
32
+ }
33
+ return;
34
+ }
35
+ if (Array.isArray(value)) {
36
+ if (value.length > maxArr) {
37
+ throw new ValidationError(`Array field "${path}" exceeds maximum length of ${maxArr}`);
38
+ }
39
+ for (let i = 0; i < value.length; i++) {
40
+ validateValue(value[i], `${path}[${i}]`, maxStr, maxArr, maxDep, depth + 1);
41
+ }
42
+ return;
43
+ }
44
+ if (typeof value === 'object' && value !== null) {
45
+ const entries = Object.entries(value);
46
+ for (const [key, val] of entries) {
47
+ validateValue(val, `${path}.${key}`, maxStr, maxArr, maxDep, depth + 1);
48
+ }
49
+ return;
50
+ }
51
+ // Primitives (number, boolean, null) are fine
52
+ }
53
+ /**
54
+ * Create a validated IPC handler wrapper. Validates params before passing to the handler.
55
+ */
56
+ export function withValidation(handler, options) {
57
+ return (params) => {
58
+ const validated = validateParams(params, options);
59
+ return handler(validated);
60
+ };
61
+ }
62
+ //# sourceMappingURL=validation.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"validation.js","sourceRoot":"","sources":["../../src/ipc/validation.ts"],"names":[],"mappings":"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"}