fix: restore build and tests under TypeScript 6
Some checks failed
NYX Security Scan / nyx-scan (pull_request) Failing after 5m55s

The dependency bumps on main left `npm test` and `npm run build:types`
broken independently of any feature work; both fail on a clean checkout
of origin/main.

TypeScript 6 no longer auto-includes @types packages the way node10
resolution did, so every test suite failed to compile with "Cannot find
name 'describe'/'expect'". Declare the needed @types explicitly instead:
  - tsconfig.json: types: ["node"]
  - jest.config.js: types: ["jest", "node"]

TypeScript 6 also errors on two settings this config relied on:
  - moduleResolution "node" (node10) is deprecated -> "bundler", which
    matches how the package is actually consumed (rollup-bundled, with
    "module": "ESNext")
  - an implicit rootDir is now an error when outDir/declarationDir are
    set -> rootDir: "./src"

Drop three unused imports that noUnusedLocals turns into hard errors,
failing --emitDeclarationOnly.

Finally, NodeSecureMemory logged to stdout unconditionally on
construction. This was dormant while the native addon failed to load;
once it loads, it broke the "no console.log when debug=false" test. A
library must not write to stdout uninvited, and the client already
reports this via getProtectionInfo() behind its own debug flag.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
Alpha Nerd 2026-07-19 10:59:28 +02:00
parent 75867ef85a
commit 84eae58317
Signed by: alpha-nerd
SSH key fingerprint: SHA256:QkkAgVoYi9TQ0UKPkiKSfnerZy2h4qhi3SVPXJmBN+M
5 changed files with 10 additions and 6 deletions

View file

@ -15,6 +15,7 @@ module.exports = {
skipLibCheck: true,
moduleResolution: 'node',
resolveJsonModule: true,
types: ['jest', 'node'],
allowSyntheticDefaultImports: true,
// Relax unused-var rules in tests
noUnusedLocals: false,

View file

@ -3,7 +3,7 @@
* Matches the Python implementation using AES-256-GCM with random nonces
*/
import { getCrypto, arrayBufferToBase64, base64ToArrayBuffer, generateRandomBytes } from './utils';
import { getCrypto, generateRandomBytes } from './utils';
export class AESEncryption {
private subtle: SubtleCrypto;

View file

@ -3,7 +3,7 @@
* Matches the Python implementation using RSA-OAEP with SHA-256
*/
import { getCrypto, pemToArrayBuffer, arrayBufferToPem, stringToArrayBuffer, arrayBufferToString, generateRandomBytes } from './utils';
import { getCrypto, pemToArrayBuffer, arrayBufferToPem, stringToArrayBuffer, generateRandomBytes } from './utils';
import { SecureByteContext } from '../memory/secure';
export class RSAOperations {

View file

@ -37,10 +37,9 @@ export class NodeSecureMemory implements SecureMemory {
private readonly hasNative: boolean;
constructor() {
// Deliberately silent: a library must not write to stdout on construction.
// Callers surface this via getProtectionInfo() under their own debug flag.
this.hasNative = nativeAddon !== null;
if (this.hasNative) {
console.log('nomyo-native addon loaded: mlock + secure-zero available');
}
}
/**

View file

@ -9,11 +9,15 @@
"declaration": true,
"declarationDir": "./dist/types",
"outDir": "./dist",
"rootDir": "./src",
"strict": true,
"esModuleInterop": true,
"skipLibCheck": true,
"forceConsistentCasingInFileNames": true,
"moduleResolution": "node",
"moduleResolution": "bundler",
"types": [
"node"
],
"resolveJsonModule": true,
"allowSyntheticDefaultImports": true,
"noUnusedLocals": true,