@thenewlabs/entangle-utils 1.0.0 → 2.0.1

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/config.d.ts CHANGED
@@ -19,6 +19,10 @@ export interface Config {
19
19
  maxArgCount: number;
20
20
  maxArgLen: number;
21
21
  relayUrl: string | undefined;
22
+ corsOrigins: string[];
23
+ trustProxy: boolean;
24
+ agentToken: string | undefined;
25
+ agentEnvPassthrough: string[];
22
26
  }
23
27
  export declare function getConfig(): Config;
24
28
  //# sourceMappingURL=config.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAQA,wBAAgB,UAAU,IAAI,IAAI,CAIjC;AAED,MAAM,WAAW,MAAM;IACrB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,YAAY,EAAE,MAAM,CAAC;IACrB,aAAa,EAAE,MAAM,CAAC;IACtB,kBAAkB,EAAE,MAAM,CAAC;IAC3B,gBAAgB,EAAE,MAAM,CAAC;IACzB,gBAAgB,EAAE,MAAM,CAAC;IACzB,gBAAgB,EAAE,MAAM,CAAC;IACzB,WAAW,EAAE,MAAM,CAAC;IACpB,QAAQ,EAAE,MAAM,CAAC;IACjB,YAAY,EAAE,MAAM,CAAC;IACrB,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC;IACnB,eAAe,EAAE,MAAM,CAAC;IACxB,eAAe,EAAE,MAAM,EAAE,GAAG,SAAS,CAAC;IACtC,YAAY,EAAE,MAAM,CAAC;IACrB,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,MAAM,GAAG,SAAS,CAAC;CAC9B;AAED,wBAAgB,SAAS,IAAI,MAAM,CAwBlC"}
1
+ {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAQA,wBAAgB,UAAU,IAAI,IAAI,CAIjC;AAED,MAAM,WAAW,MAAM;IACrB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,YAAY,EAAE,MAAM,CAAC;IACrB,aAAa,EAAE,MAAM,CAAC;IACtB,kBAAkB,EAAE,MAAM,CAAC;IAC3B,gBAAgB,EAAE,MAAM,CAAC;IACzB,gBAAgB,EAAE,MAAM,CAAC;IACzB,gBAAgB,EAAE,MAAM,CAAC;IACzB,WAAW,EAAE,MAAM,CAAC;IACpB,QAAQ,EAAE,MAAM,CAAC;IACjB,YAAY,EAAE,MAAM,CAAC;IACrB,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC;IACnB,eAAe,EAAE,MAAM,CAAC;IACxB,eAAe,EAAE,MAAM,EAAE,GAAG,SAAS,CAAC;IACtC,YAAY,EAAE,MAAM,CAAC;IACrB,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,MAAM,GAAG,SAAS,CAAC;IAG7B,WAAW,EAAE,MAAM,EAAE,CAAC;IAGtB,UAAU,EAAE,OAAO,CAAC;IAGpB,UAAU,EAAE,MAAM,GAAG,SAAS,CAAC;IAG/B,mBAAmB,EAAE,MAAM,EAAE,CAAC;CAC/B;AAED,wBAAgB,SAAS,IAAI,MAAM,CA4BlC"}
package/dist/config.js CHANGED
@@ -31,6 +31,10 @@ export function getConfig() {
31
31
  maxArgCount: parseInt(process.env.MAX_ARG_COUNT || '256', 10),
32
32
  maxArgLen: parseInt(process.env.MAX_ARG_LEN || '16384', 10),
33
33
  relayUrl: process.env.RELAY_URL,
34
+ corsOrigins: (process.env.CORS_ORIGINS || '').split(',').map(s => s.trim()).filter(Boolean),
35
+ trustProxy: process.env.TRUST_PROXY === '1' || process.env.TRUST_PROXY === 'true',
36
+ agentToken: process.env.RELAY_AGENT_TOKEN || undefined,
37
+ agentEnvPassthrough: (process.env.AGENT_ENV_PASSTHROUGH || '').split(',').map(s => s.trim()).filter(Boolean),
34
38
  };
35
39
  }
36
40
  //# sourceMappingURL=config.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAChC,OAAO,EAAE,OAAO,EAAE,MAAM,MAAM,CAAC;AAC/B,OAAO,EAAE,aAAa,EAAE,MAAM,KAAK,CAAC;AACpC,OAAO,EAAE,OAAO,EAAE,MAAM,MAAM,CAAC;AAE/B,MAAM,UAAU,GAAG,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AAClD,MAAM,SAAS,GAAG,OAAO,CAAC,UAAU,CAAC,CAAC;AAEtC,MAAM,UAAU,UAAU;IACxB,MAAM,OAAO,GAAG,OAAO,CAAC,SAAS,EAAE,UAAU,CAAC,CAAC;IAC/C,MAAM,OAAO,GAAG,OAAO,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;IACzC,MAAM,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC,CAAC;AAC5B,CAAC;AAwBD,MAAM,UAAU,SAAS;IACvB,UAAU,EAAE,CAAC;IAEb,OAAO;QACL,IAAI,EAAE,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,IAAI,MAAM,EAAE,EAAE,CAAC;QAC9C,IAAI,EAAE,OAAO,CAAC,GAAG,CAAC,IAAI,IAAI,SAAS;QACnC,YAAY,EAAE,OAAO,CAAC,GAAG,CAAC,aAAa,IAAI,uBAAuB;QAClE,aAAa,EAAE,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,eAAe,IAAI,SAAS,EAAE,EAAE,CAAC;QACrE,kBAAkB,EAAE,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,qBAAqB,IAAI,QAAQ,EAAE,EAAE,CAAC;QAC/E,gBAAgB,EAAE,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,kBAAkB,IAAI,OAAO,EAAE,EAAE,CAAC;QACzE,gBAAgB,EAAE,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,mBAAmB,IAAI,OAAO,EAAE,EAAE,CAAC;QAC1E,gBAAgB,EAAE,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,mBAAmB,IAAI,SAAS,EAAE,EAAE,CAAC;QAC5E,WAAW,EAAE,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,aAAa,IAAI,UAAU,EAAE,EAAE,CAAC;QAClE,QAAQ,EAAE,OAAO,CAAC,GAAG,CAAC,SAAS,IAAI,MAAM;QACzC,YAAY,EAAE,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,cAAc,IAAI,IAAI,EAAE,EAAE,CAAC;QAC9D,UAAU,EAAE,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,WAAW,IAAI,IAAI,EAAE,EAAE,CAAC;QACzD,UAAU,EAAE,OAAO,CAAC,GAAG,CAAC,WAAW,IAAI,OAAO,CAAC,GAAG,CAAC,KAAK,IAAI,WAAW;QACvE,eAAe,EAAE,OAAO,CAAC,GAAG,CAAC,iBAAiB,IAAI,OAAO,CAAC,GAAG,CAAC,IAAI,IAAI,OAAO,CAAC,GAAG,EAAE;QACnF,eAAe,EAAE,OAAO,CAAC,GAAG,CAAC,iBAAiB,EAAE,KAAK,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC;QAC1E,YAAY,EAAE,OAAO,CAAC,GAAG,CAAC,aAAa,IAAI,MAAM;QACjD,WAAW,EAAE,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,aAAa,IAAI,KAAK,EAAE,EAAE,CAAC;QAC7D,SAAS,EAAE,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,WAAW,IAAI,OAAO,EAAE,EAAE,CAAC;QAC3D,QAAQ,EAAE,OAAO,CAAC,GAAG,CAAC,SAAS;KAChC,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAChC,OAAO,EAAE,OAAO,EAAE,MAAM,MAAM,CAAC;AAC/B,OAAO,EAAE,aAAa,EAAE,MAAM,KAAK,CAAC;AACpC,OAAO,EAAE,OAAO,EAAE,MAAM,MAAM,CAAC;AAE/B,MAAM,UAAU,GAAG,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AAClD,MAAM,SAAS,GAAG,OAAO,CAAC,UAAU,CAAC,CAAC;AAEtC,MAAM,UAAU,UAAU;IACxB,MAAM,OAAO,GAAG,OAAO,CAAC,SAAS,EAAE,UAAU,CAAC,CAAC;IAC/C,MAAM,OAAO,GAAG,OAAO,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;IACzC,MAAM,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC,CAAC;AAC5B,CAAC;AAoCD,MAAM,UAAU,SAAS;IACvB,UAAU,EAAE,CAAC;IAEb,OAAO;QACL,IAAI,EAAE,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,IAAI,MAAM,EAAE,EAAE,CAAC;QAC9C,IAAI,EAAE,OAAO,CAAC,GAAG,CAAC,IAAI,IAAI,SAAS;QACnC,YAAY,EAAE,OAAO,CAAC,GAAG,CAAC,aAAa,IAAI,uBAAuB;QAClE,aAAa,EAAE,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,eAAe,IAAI,SAAS,EAAE,EAAE,CAAC;QACrE,kBAAkB,EAAE,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,qBAAqB,IAAI,QAAQ,EAAE,EAAE,CAAC;QAC/E,gBAAgB,EAAE,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,kBAAkB,IAAI,OAAO,EAAE,EAAE,CAAC;QACzE,gBAAgB,EAAE,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,mBAAmB,IAAI,OAAO,EAAE,EAAE,CAAC;QAC1E,gBAAgB,EAAE,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,mBAAmB,IAAI,SAAS,EAAE,EAAE,CAAC;QAC5E,WAAW,EAAE,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,aAAa,IAAI,UAAU,EAAE,EAAE,CAAC;QAClE,QAAQ,EAAE,OAAO,CAAC,GAAG,CAAC,SAAS,IAAI,MAAM;QACzC,YAAY,EAAE,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,cAAc,IAAI,IAAI,EAAE,EAAE,CAAC;QAC9D,UAAU,EAAE,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,WAAW,IAAI,IAAI,EAAE,EAAE,CAAC;QACzD,UAAU,EAAE,OAAO,CAAC,GAAG,CAAC,WAAW,IAAI,OAAO,CAAC,GAAG,CAAC,KAAK,IAAI,WAAW;QACvE,eAAe,EAAE,OAAO,CAAC,GAAG,CAAC,iBAAiB,IAAI,OAAO,CAAC,GAAG,CAAC,IAAI,IAAI,OAAO,CAAC,GAAG,EAAE;QACnF,eAAe,EAAE,OAAO,CAAC,GAAG,CAAC,iBAAiB,EAAE,KAAK,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC;QAC1E,YAAY,EAAE,OAAO,CAAC,GAAG,CAAC,aAAa,IAAI,MAAM;QACjD,WAAW,EAAE,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,aAAa,IAAI,KAAK,EAAE,EAAE,CAAC;QAC7D,SAAS,EAAE,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,WAAW,IAAI,OAAO,EAAE,EAAE,CAAC;QAC3D,QAAQ,EAAE,OAAO,CAAC,GAAG,CAAC,SAAS;QAC/B,WAAW,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,YAAY,IAAI,EAAE,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC;QAC3F,UAAU,EAAE,OAAO,CAAC,GAAG,CAAC,WAAW,KAAK,GAAG,IAAI,OAAO,CAAC,GAAG,CAAC,WAAW,KAAK,MAAM;QACjF,UAAU,EAAE,OAAO,CAAC,GAAG,CAAC,iBAAiB,IAAI,SAAS;QACtD,mBAAmB,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,qBAAqB,IAAI,EAAE,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC;KAC7G,CAAC;AACJ,CAAC"}
package/dist/env.d.ts ADDED
@@ -0,0 +1,12 @@
1
+ /**
2
+ * Build the environment for a spawned child process.
3
+ *
4
+ * Security: children get a MINIMAL, curated environment by default — never the
5
+ * agent's full `process.env` (which may hold cloud credentials, tokens, etc.).
6
+ * A caller may only set env vars whose names appear in `passthrough` (the
7
+ * operator-controlled AGENT_ENV_PASSTHROUGH allow-list); everything else the
8
+ * caller supplies is dropped. This also blocks caller-injected loader hooks
9
+ * such as LD_PRELOAD / NODE_OPTIONS unless the operator explicitly allows them.
10
+ */
11
+ export declare function buildChildEnv(passthrough: string[], callerEnv?: Record<string, string>): Record<string, string>;
12
+ //# sourceMappingURL=env.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"env.d.ts","sourceRoot":"","sources":["../src/env.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AACH,wBAAgB,aAAa,CAC3B,WAAW,EAAE,MAAM,EAAE,EACrB,SAAS,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GACjC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CA2BxB"}
package/dist/env.js ADDED
@@ -0,0 +1,37 @@
1
+ /**
2
+ * Build the environment for a spawned child process.
3
+ *
4
+ * Security: children get a MINIMAL, curated environment by default — never the
5
+ * agent's full `process.env` (which may hold cloud credentials, tokens, etc.).
6
+ * A caller may only set env vars whose names appear in `passthrough` (the
7
+ * operator-controlled AGENT_ENV_PASSTHROUGH allow-list); everything else the
8
+ * caller supplies is dropped. This also blocks caller-injected loader hooks
9
+ * such as LD_PRELOAD / NODE_OPTIONS unless the operator explicitly allows them.
10
+ */
11
+ export function buildChildEnv(passthrough, callerEnv) {
12
+ const env = {
13
+ PATH: process.env.PATH || '/usr/local/bin:/usr/bin:/bin',
14
+ HOME: process.env.HOME || '/',
15
+ USER: process.env.USER || 'nobody',
16
+ LANG: process.env.LANG || 'en_US.UTF-8',
17
+ LC_ALL: process.env.LC_ALL || 'en_US.UTF-8',
18
+ TZ: process.env.TZ || 'UTC',
19
+ TERM: process.env.TERM || 'xterm-256color',
20
+ };
21
+ const allow = new Set(passthrough);
22
+ // Pass through operator-approved vars from the agent's own environment.
23
+ for (const name of allow) {
24
+ const val = process.env[name];
25
+ if (val !== undefined)
26
+ env[name] = val;
27
+ }
28
+ // Let the caller override only the approved names.
29
+ if (callerEnv) {
30
+ for (const [name, val] of Object.entries(callerEnv)) {
31
+ if (allow.has(name) && typeof val === 'string')
32
+ env[name] = val;
33
+ }
34
+ }
35
+ return env;
36
+ }
37
+ //# sourceMappingURL=env.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"env.js","sourceRoot":"","sources":["../src/env.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AACH,MAAM,UAAU,aAAa,CAC3B,WAAqB,EACrB,SAAkC;IAElC,MAAM,GAAG,GAA2B;QAClC,IAAI,EAAE,OAAO,CAAC,GAAG,CAAC,IAAI,IAAI,8BAA8B;QACxD,IAAI,EAAE,OAAO,CAAC,GAAG,CAAC,IAAI,IAAI,GAAG;QAC7B,IAAI,EAAE,OAAO,CAAC,GAAG,CAAC,IAAI,IAAI,QAAQ;QAClC,IAAI,EAAE,OAAO,CAAC,GAAG,CAAC,IAAI,IAAI,aAAa;QACvC,MAAM,EAAE,OAAO,CAAC,GAAG,CAAC,MAAM,IAAI,aAAa;QAC3C,EAAE,EAAE,OAAO,CAAC,GAAG,CAAC,EAAE,IAAI,KAAK;QAC3B,IAAI,EAAE,OAAO,CAAC,GAAG,CAAC,IAAI,IAAI,gBAAgB;KAC3C,CAAC;IAEF,MAAM,KAAK,GAAG,IAAI,GAAG,CAAC,WAAW,CAAC,CAAC;IAEnC,wEAAwE;IACxE,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACzB,MAAM,GAAG,GAAG,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QAC9B,IAAI,GAAG,KAAK,SAAS;YAAE,GAAG,CAAC,IAAI,CAAC,GAAG,GAAG,CAAC;IACzC,CAAC;IAED,mDAAmD;IACnD,IAAI,SAAS,EAAE,CAAC;QACd,KAAK,MAAM,CAAC,IAAI,EAAE,GAAG,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,EAAE,CAAC;YACpD,IAAI,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,OAAO,GAAG,KAAK,QAAQ;gBAAE,GAAG,CAAC,IAAI,CAAC,GAAG,GAAG,CAAC;QAClE,CAAC;IACH,CAAC;IAED,OAAO,GAAG,CAAC;AACb,CAAC"}
package/dist/index.d.ts CHANGED
@@ -1,4 +1,5 @@
1
1
  export * from './config.js';
2
+ export * from './env.js';
2
3
  export * from './validation.js';
3
4
  export * from './counters.js';
4
5
  export * from './stream-counters.js';
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,aAAa,CAAC;AAC5B,cAAc,iBAAiB,CAAC;AAChC,cAAc,eAAe,CAAC;AAC9B,cAAc,sBAAsB,CAAC;AACrC,cAAc,cAAc,CAAC;AAC7B,cAAc,aAAa,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,aAAa,CAAC;AAC5B,cAAc,UAAU,CAAC;AACzB,cAAc,iBAAiB,CAAC;AAChC,cAAc,eAAe,CAAC;AAC9B,cAAc,sBAAsB,CAAC;AACrC,cAAc,cAAc,CAAC;AAC7B,cAAc,aAAa,CAAC"}
package/dist/index.js CHANGED
@@ -1,4 +1,5 @@
1
1
  export * from './config.js';
2
+ export * from './env.js';
2
3
  export * from './validation.js';
3
4
  export * from './counters.js';
4
5
  export * from './stream-counters.js';
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,aAAa,CAAC;AAC5B,cAAc,iBAAiB,CAAC;AAChC,cAAc,eAAe,CAAC;AAC9B,cAAc,sBAAsB,CAAC;AACrC,cAAc,cAAc,CAAC;AAC7B,cAAc,aAAa,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,aAAa,CAAC;AAC5B,cAAc,UAAU,CAAC;AACzB,cAAc,iBAAiB,CAAC;AAChC,cAAc,eAAe,CAAC;AAC9B,cAAc,sBAAsB,CAAC;AACrC,cAAc,cAAc,CAAC;AAC7B,cAAc,aAAa,CAAC"}
package/dist/version.d.ts CHANGED
@@ -1,4 +1,4 @@
1
- export declare const VERSION = "1.0.0";
1
+ export declare const VERSION = "2.0.1";
2
2
  export declare const BUILD_TIME: string;
3
3
  export declare function getVersionInfo(): string;
4
4
  //# sourceMappingURL=version.d.ts.map
package/dist/version.js CHANGED
@@ -1,4 +1,4 @@
1
- export const VERSION = '1.0.0';
1
+ export const VERSION = '2.0.1';
2
2
  export const BUILD_TIME = new Date().toISOString();
3
3
  export function getVersionInfo() {
4
4
  return `v${VERSION} (built: ${BUILD_TIME})`;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@thenewlabs/entangle-utils",
3
- "version": "1.0.0",
3
+ "version": "2.0.1",
4
4
  "type": "module",
5
5
  "main": "./dist/index.js",
6
6
  "types": "./dist/index.d.ts",
@@ -16,11 +16,11 @@
16
16
  },
17
17
  "scripts": {
18
18
  "build": "tsc",
19
- "clean": "rm -rf dist",
19
+ "clean": "rm -rf dist tsconfig.tsbuildinfo",
20
20
  "prepublishOnly": "npm run build"
21
21
  },
22
22
  "dependencies": {
23
- "@thenewlabs/entangle-protocol": "^1.0.0",
23
+ "@thenewlabs/entangle-protocol": "^2.0.1",
24
24
  "dotenv": "^17.4.2",
25
25
  "pino": "^10.3.1"
26
26
  },
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=counters.test.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"counters.test.d.ts","sourceRoot":"","sources":["../src/counters.test.ts"],"names":[],"mappings":""}
@@ -1,72 +0,0 @@
1
- import { describe, it, expect } from 'vitest';
2
- import { MonotonicCounter, BidirectionalCounters } from './counters.js';
3
- describe('Counters', () => {
4
- describe('MonotonicCounter', () => {
5
- it('should start at -1', () => {
6
- const counter = new MonotonicCounter();
7
- expect(counter.current()).toBe(-1);
8
- });
9
- it('should increment with next()', () => {
10
- const counter = new MonotonicCounter();
11
- expect(counter.next()).toBe(0);
12
- expect(counter.next()).toBe(1);
13
- expect(counter.next()).toBe(2);
14
- expect(counter.current()).toBe(2);
15
- });
16
- it('should validate strictly increasing values', () => {
17
- const counter = new MonotonicCounter();
18
- expect(() => counter.validate(0)).not.toThrow();
19
- expect(() => counter.validate(1)).not.toThrow();
20
- expect(() => counter.validate(2)).not.toThrow();
21
- });
22
- it('should reject non-increasing values', () => {
23
- const counter = new MonotonicCounter();
24
- counter.validate(5);
25
- expect(() => counter.validate(5))
26
- .toThrow('Counter not strictly increasing: 5 <= 5');
27
- expect(() => counter.validate(4))
28
- .toThrow('Counter not strictly increasing: 4 <= 5');
29
- });
30
- it('should reject zero after positive value', () => {
31
- const counter = new MonotonicCounter();
32
- counter.validate(10);
33
- expect(() => counter.validate(0))
34
- .toThrow('Counter not strictly increasing: 0 <= 10');
35
- });
36
- it('should handle large values', () => {
37
- const counter = new MonotonicCounter();
38
- counter.validate(1000000);
39
- expect(() => counter.validate(1000001)).not.toThrow();
40
- expect(counter.current()).toBe(1000001);
41
- });
42
- });
43
- describe('BidirectionalCounters', () => {
44
- it('should maintain separate incoming and outgoing counters', () => {
45
- const counters = new BidirectionalCounters();
46
- expect(counters.incoming.current()).toBe(-1);
47
- expect(counters.outgoing.current()).toBe(-1);
48
- });
49
- it('should increment counters independently', () => {
50
- const counters = new BidirectionalCounters();
51
- expect(counters.incoming.next()).toBe(0);
52
- expect(counters.incoming.next()).toBe(1);
53
- expect(counters.outgoing.next()).toBe(0);
54
- expect(counters.outgoing.next()).toBe(1);
55
- expect(counters.outgoing.next()).toBe(2);
56
- expect(counters.incoming.current()).toBe(1);
57
- expect(counters.outgoing.current()).toBe(2);
58
- });
59
- it('should validate counters independently', () => {
60
- const counters = new BidirectionalCounters();
61
- counters.incoming.validate(5);
62
- counters.outgoing.validate(10);
63
- expect(() => counters.incoming.validate(6)).not.toThrow();
64
- expect(() => counters.outgoing.validate(11)).not.toThrow();
65
- expect(() => counters.incoming.validate(5))
66
- .toThrow('Counter not strictly increasing: 5 <= 6');
67
- expect(() => counters.outgoing.validate(10))
68
- .toThrow('Counter not strictly increasing: 10 <= 11');
69
- });
70
- });
71
- });
72
- //# sourceMappingURL=counters.test.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"counters.test.js","sourceRoot":"","sources":["../src/counters.test.ts"],"names":[],"mappings":"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"}
package/dist/logger.d.ts DELETED
@@ -1,3 +0,0 @@
1
- import pino from 'pino';
2
- export declare function createLogger(name: string, outputMode?: string): pino.Logger;
3
- //# sourceMappingURL=logger.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"logger.d.ts","sourceRoot":"","sources":["../src/logger.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAM,MAAM,CAAC;AAQxB,wBAAgB,YAAY,CAAC,IAAI,EAAE,MAAM,EAAE,UAAU,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC,MAAM,CAmD3E"}
package/dist/logger.js DELETED
@@ -1,49 +0,0 @@
1
- import pino from 'pino';
2
- import { Writable } from 'stream';
3
- import { OutputHandler, parseOutputMode } from './output.js';
4
- export function createLogger(name, outputMode) {
5
- const level = process.env.LOG_LEVEL || 'info';
6
- const mode = parseOutputMode(outputMode || process.env.OUTPUT_MODE);
7
- const outputHandler = new OutputHandler({ mode });
8
- // Create a custom writable stream that routes Pino logs through OutputHandler
9
- const destination = new Writable({
10
- write(chunk, _encoding, callback) {
11
- try {
12
- const str = typeof chunk === 'string' ? chunk : chunk.toString();
13
- const obj = JSON.parse(str);
14
- const { level: lvl, msg, ...data } = obj;
15
- // Convert pino numeric level to name; if already a string, keep it
16
- const levelName = typeof lvl === 'number'
17
- ? (pino.levels.labels[lvl] || 'info')
18
- : (typeof lvl === 'string' ? lvl : 'info');
19
- // Remove boilerplate fields
20
- if (data.name === name)
21
- delete data.name;
22
- delete data.time;
23
- delete data.pid;
24
- delete data.hostname;
25
- const hasData = Object.keys(data).length > 0;
26
- outputHandler.log(levelName, msg, hasData ? data : undefined);
27
- }
28
- catch (_err) {
29
- // Fallback for non-JSON chunk
30
- const str = typeof chunk === 'string' ? chunk : chunk.toString();
31
- outputHandler.write(str);
32
- }
33
- finally {
34
- callback();
35
- }
36
- }
37
- });
38
- const logger = pino({
39
- name,
40
- level,
41
- formatters: {
42
- level: (label) => ({ level: label }),
43
- },
44
- }, destination);
45
- // Attach outputHandler for direct access if needed
46
- logger.outputHandler = outputHandler;
47
- return logger;
48
- }
49
- //# sourceMappingURL=logger.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"logger.js","sourceRoot":"","sources":["../src/logger.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAM,MAAM,CAAC;AACxB,OAAO,EAAE,QAAQ,EAAE,MAAM,QAAQ,CAAC;AAClC,OAAO,EAAE,aAAa,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAM7D,MAAM,UAAU,YAAY,CAAC,IAAY,EAAE,UAAmB;IAC5D,MAAM,KAAK,GAAG,OAAO,CAAC,GAAG,CAAC,SAAS,IAAI,MAAM,CAAC;IAC9C,MAAM,IAAI,GAAG,eAAe,CAAC,UAAU,IAAI,OAAO,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC;IACpE,MAAM,aAAa,GAAG,IAAI,aAAa,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC;IAElD,8EAA8E;IAC9E,MAAM,WAAW,GAAG,IAAI,QAAQ,CAAC;QAC/B,KAAK,CAAC,KAAK,EAAE,SAAS,EAAE,QAAQ;YAC9B,IAAI,CAAC;gBACH,MAAM,GAAG,GAAG,OAAO,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,QAAQ,EAAE,CAAC;gBACjE,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;gBAC5B,MAAM,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,IAAI,EAAE,GAAG,GAAU,CAAC;gBAEhD,mEAAmE;gBACnE,MAAM,SAAS,GAAG,OAAO,GAAG,KAAK,QAAQ;oBACvC,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,GAAsC,CAAC,IAAI,MAAM,CAAC;oBACxE,CAAC,CAAC,CAAC,OAAO,GAAG,KAAK,QAAQ,CAAC,CAAC,CAAE,GAAc,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC;gBAEzD,4BAA4B;gBAC5B,IAAK,IAAY,CAAC,IAAI,KAAK,IAAI;oBAAE,OAAQ,IAAY,CAAC,IAAI,CAAC;gBAC3D,OAAQ,IAAY,CAAC,IAAI,CAAC;gBAC1B,OAAQ,IAAY,CAAC,GAAG,CAAC;gBACzB,OAAQ,IAAY,CAAC,QAAQ,CAAC;gBAE9B,MAAM,OAAO,GAAG,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC;gBAC7C,aAAa,CAAC,GAAG,CAAC,SAAS,EAAE,GAAG,EAAE,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC;YAChE,CAAC;YAAC,OAAO,IAAI,EAAE,CAAC;gBACd,8BAA8B;gBAC9B,MAAM,GAAG,GAAG,OAAO,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,QAAQ,EAAE,CAAC;gBACjE,aAAa,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;YAC3B,CAAC;oBAAS,CAAC;gBACT,QAAQ,EAAE,CAAC;YACb,CAAC;QACH,CAAC;KACF,CAAC,CAAC;IAEH,MAAM,MAAM,GAAG,IAAI,CACjB;QACE,IAAI;QACJ,KAAK;QACL,UAAU,EAAE;YACV,KAAK,EAAE,CAAC,KAAa,EAAE,EAAE,CAAC,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC;SAC7C;KACF,EACD,WAAgD,CAC7B,CAAC;IAEtB,mDAAmD;IACnD,MAAM,CAAC,aAAa,GAAG,aAAa,CAAC;IAErC,OAAO,MAAM,CAAC;AAChB,CAAC"}
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=validation.test.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"validation.test.d.ts","sourceRoot":"","sources":["../src/validation.test.ts"],"names":[],"mappings":""}
@@ -1,121 +0,0 @@
1
- import { describe, it, expect } from 'vitest';
2
- import { validateArguments, validateCwd, validateLimits } from './validation.js';
3
- describe('Validation Utils', () => {
4
- describe('validateArguments', () => {
5
- it('should accept valid arguments', () => {
6
- const argv = ['--help', 'test', 'file.txt'];
7
- expect(() => validateArguments(argv, 10, 100)).not.toThrow();
8
- });
9
- it('should reject too many arguments', () => {
10
- const argv = new Array(10).fill('arg');
11
- expect(() => validateArguments(argv, 5, 100))
12
- .toThrow('Too many arguments: 10 > 5');
13
- });
14
- it('should reject arguments that are too long', () => {
15
- const argv = ['x'.repeat(101)];
16
- expect(() => validateArguments(argv, 10, 100))
17
- .toThrow('Argument too long: 101 > 100');
18
- });
19
- it('should reject arguments with NUL bytes', () => {
20
- const argv = ['test\0arg'];
21
- expect(() => validateArguments(argv, 10, 100))
22
- .toThrow('Arguments cannot contain NUL bytes');
23
- });
24
- it('should reject arguments with unpaired surrogates', () => {
25
- const argv = ['test\uD800'];
26
- expect(() => validateArguments(argv, 10, 100))
27
- .toThrow('Arguments cannot contain unpaired surrogates');
28
- });
29
- it('should accept empty arguments array', () => {
30
- expect(() => validateArguments([], 10, 100)).not.toThrow();
31
- });
32
- it('should accept arguments with paired surrogates', () => {
33
- const argv = ['test\uD800\uDC00']; // Valid surrogate pair
34
- expect(() => validateArguments(argv, 10, 100)).not.toThrow();
35
- });
36
- });
37
- describe('validateCwd', () => {
38
- it('should accept any cwd when no prefixes specified', () => {
39
- expect(() => validateCwd('/any/path')).not.toThrow();
40
- expect(() => validateCwd('/etc/passwd')).not.toThrow();
41
- });
42
- it('should accept cwd with empty prefixes array', () => {
43
- expect(() => validateCwd('/any/path', [])).not.toThrow();
44
- });
45
- it('should accept cwd matching allowed prefix', () => {
46
- const prefixes = ['/home', '/srv'];
47
- expect(() => validateCwd('/home/user/project', prefixes)).not.toThrow();
48
- expect(() => validateCwd('/srv/app', prefixes)).not.toThrow();
49
- });
50
- it('should reject cwd not matching any prefix', () => {
51
- const prefixes = ['/home', '/srv'];
52
- expect(() => validateCwd('/etc/passwd', prefixes))
53
- .toThrow('CWD not in allowed directories: /etc/passwd');
54
- });
55
- it('should normalize Windows paths', () => {
56
- const prefixes = ['/home'];
57
- expect(() => validateCwd('\\home\\user', prefixes)).not.toThrow();
58
- });
59
- it('should handle trailing slashes', () => {
60
- const prefixes = ['/home/'];
61
- expect(() => validateCwd('/home/user', prefixes)).not.toThrow();
62
- });
63
- });
64
- describe('validateLimits', () => {
65
- it('should accept undefined limits', () => {
66
- expect(() => validateLimits()).not.toThrow();
67
- });
68
- it('should accept valid limits', () => {
69
- const limits = {
70
- cpuMs: 1000,
71
- memMB: 256,
72
- wallMs: 5000,
73
- maxOutBytes: 1024,
74
- };
75
- expect(() => validateLimits(limits)).not.toThrow();
76
- });
77
- it('should reject zero CPU limit', () => {
78
- expect(() => validateLimits({ cpuMs: 0 }))
79
- .toThrow('Invalid CPU limit: 0');
80
- });
81
- it('should reject negative CPU limit', () => {
82
- expect(() => validateLimits({ cpuMs: -1 }))
83
- .toThrow('Invalid CPU limit: -1');
84
- });
85
- it('should reject CPU limit exceeding max', () => {
86
- expect(() => validateLimits({ cpuMs: 100000 }))
87
- .toThrow('Invalid CPU limit: 100000');
88
- });
89
- it('should reject zero memory limit', () => {
90
- expect(() => validateLimits({ memMB: 0 }))
91
- .toThrow('Invalid memory limit: 0');
92
- });
93
- it('should reject memory limit exceeding max', () => {
94
- expect(() => validateLimits({ memMB: 1024 }))
95
- .toThrow('Invalid memory limit: 1024');
96
- });
97
- it('should reject zero wall time limit', () => {
98
- expect(() => validateLimits({ wallMs: 0 }))
99
- .toThrow('Invalid wall time limit: 0');
100
- });
101
- it('should reject wall time limit exceeding max', () => {
102
- expect(() => validateLimits({ wallMs: 400000 }))
103
- .toThrow('Invalid wall time limit: 400000');
104
- });
105
- it('should reject zero output limit', () => {
106
- expect(() => validateLimits({ maxOutBytes: 0 }))
107
- .toThrow('Invalid output limit: 0');
108
- });
109
- it('should reject output limit exceeding max', () => {
110
- expect(() => validateLimits({ maxOutBytes: 20000000 }))
111
- .toThrow('Invalid output limit: 20000000');
112
- });
113
- it('should accept partial limits', () => {
114
- expect(() => validateLimits({ cpuMs: 1000 })).not.toThrow();
115
- expect(() => validateLimits({ memMB: 256 })).not.toThrow();
116
- expect(() => validateLimits({ wallMs: 5000 })).not.toThrow();
117
- expect(() => validateLimits({ maxOutBytes: 1024 })).not.toThrow();
118
- });
119
- });
120
- });
121
- //# sourceMappingURL=validation.test.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"validation.test.js","sourceRoot":"","sources":["../src/validation.test.ts"],"names":[],"mappings":"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"}