{"_id":"@dghila/walther","_rev":"14-d66f4cb52dc142ed026b5d0af2be06db","name":"@dghila/walther","dist-tags":{"dev":"0.1.0-dev","latest":"0.4.2"},"versions":{"0.1.0-dev":{"name":"@dghila/walther","version":"0.1.0-dev","author":{"name":"Davide Ghilardi"},"license":"MIT","_id":"@dghila/walther@0.1.0-dev","maintainers":[{"name":"dghila","email":"dghila@d71.dev"}],"dist":{"shasum":"af3a487c74be54bab5e5ee1366a8e58e4b5aa89b","tarball":"https://registry.npmjs.org/@dghila/walther/-/walther-0.1.0-dev.tgz","fileCount":26,"integrity":"sha512-+Q9+RPB85EBsklJWnDE64EqKaXZvAGW8LeQUpbkKPgzcpVLJvsI//KXh4hJ1YxW2wD3aSrZSkN4pvvG/J7zaRg==","signatures":[{"sig":"MEYCIQC55ejA2KHWLiwZg2Z6wAAy3xq9IvYt8Y8uUueQcS/xBAIhAOd19eXvoU9QQXtbHiThDLWq8ekeI7lbSEAw1oSuq72Y","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":103654},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"node":">=18.0.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"}},"gitHead":"b143d3efb245ca3b28c6915514e58609b22d7072","scripts":{"lint":"eslint src/**/*.ts","test":"node --import tsx --test","build":"tsc && npm run obfuscate","format":"prettier --write \"src/**/*.ts\"","obfuscate":"javascript-obfuscator ./dist --output ./dist --compact true --self-defending true --string-array true --string-array-encoding base64 --string-array-threshold 0.8","prepublishOnly":"npm run build"},"_npmUser":{"name":"dghila","email":"dghila@d71.dev"},"_npmVersion":"11.12.1","description":"Lightweight server-side license verification library for Node.js and Next.js applications.","directories":{},"_nodeVersion":"25.8.2","dependencies":{"jose":"^5.4.0"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.7.0","eslint":"^10.4.1","prettier":"^3.2.4","typescript":"^5.3.3","@types/node":"^20.11.0","javascript-obfuscator":"^5.4.3","@typescript-eslint/parser":"^8.61.0","@typescript-eslint/eslint-plugin":"^8.61.0"},"_npmOperationalInternal":{"tmp":"tmp/walther_0.1.0-dev_1781351655153_0.10848548467533559","host":"s3://npm-registry-packages-npm-production"}},"0.1.3":{"name":"@dghila/walther","version":"0.1.3","author":{"name":"Davide Ghilardi"},"license":"MIT","_id":"@dghila/walther@0.1.3","maintainers":[{"name":"dghila","email":"dghila@d71.dev"}],"dist":{"shasum":"571485aeed6bae6153d209750a7028743f12a7de","tarball":"https://registry.npmjs.org/@dghila/walther/-/walther-0.1.3.tgz","fileCount":26,"integrity":"sha512-kurvwglP/fPMnIUEbnsvKzljsXNpecv+0I0F70qs2Iss/hUsDJAkRPJaROoQy2h+nrmG9018ZnjRVyeFeieMPw==","signatures":[{"sig":"MEQCIA0UEXpN9kGkAxnteH0MxqSrfR5j5uFc2htR+Q6TkQGPAiB1wxiuvYQVaq1lmVs9cNe9vDXRrUefzkxuRbhn6ke86g==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":103082},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"node":">=18.0.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"}},"gitHead":"8fbd39138178aaa00321797fa0b9fe6bec4a9b6f","scripts":{"lint":"eslint src/**/*.ts","test":"node --import tsx --test","build":"tsc && npm run obfuscate","format":"prettier --write \"src/**/*.ts\"","obfuscate":"javascript-obfuscator ./dist --output ./dist --compact true --self-defending true --string-array true --string-array-encoding base64 --string-array-threshold 0.8","prepublishOnly":"npm run build"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:16dcd7e8-eaf5-4f94-a8c6-d357f9b3bbdb"}},"_npmVersion":"11.17.0","description":"Lightweight server-side license verification library for Node.js and Next.js applications.","directories":{},"_nodeVersion":"22.22.3","dependencies":{"jose":"^5.4.0"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.7.0","eslint":"^10.4.1","prettier":"^3.2.4","typescript":"^5.3.3","@types/node":"^20.11.0","javascript-obfuscator":"^5.4.3","@typescript-eslint/parser":"^8.61.0","@typescript-eslint/eslint-plugin":"^8.61.0"},"_npmOperationalInternal":{"tmp":"tmp/walther_0.1.3_1781355429378_0.03015150506289066","host":"s3://npm-registry-packages-npm-production"}},"0.1.4":{"name":"@dghila/walther","version":"0.1.4","author":{"name":"Davide Ghilardi"},"license":"MIT","_id":"@dghila/walther@0.1.4","maintainers":[{"name":"dghila","email":"dghila@d71.dev"}],"dist":{"shasum":"73c8a94e60e9e834f4f0ca2c5bad0affa0579f52","tarball":"https://registry.npmjs.org/@dghila/walther/-/walther-0.1.4.tgz","fileCount":29,"integrity":"sha512-ZZOpma9Sy4z6QiyTvzAXHXi5YVuz/1mYzHnLpQ4ZSxh3l9p1T2vbQNH/6LdS/ldN2cR89lLlR0eMgNhtK5XbiQ==","signatures":[{"sig":"MEUCIQCIVCmY1rHCMp628S5+t2h9DS3Rhek4WE1NZwhzMyLS6AIgK9WiGShoQdTNYNTr6piYj4cVeM9ML+ossW6wouO4e9I=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":124488},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"node":">=18.0.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"}},"gitHead":"4d8184826b928645abb41eef9bb90ee770acdb0e","scripts":{"lint":"eslint src/**/*.ts","test":"node --import tsx --test","build":"tsc && npm run obfuscate","format":"prettier --write \"src/**/*.ts\"","obfuscate":"javascript-obfuscator ./dist --output ./dist --compact true --self-defending true --string-array true --string-array-encoding base64 --string-array-threshold 0.8","prepublishOnly":"npm run build"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:16dcd7e8-eaf5-4f94-a8c6-d357f9b3bbdb"}},"_npmVersion":"11.17.0","description":"Lightweight server-side license verification library for Node.js and Next.js applications.","directories":{},"_nodeVersion":"22.22.3","dependencies":{"jose":"^5.4.0"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.7.0","eslint":"^10.4.1","prettier":"^3.2.4","typescript":"^5.3.3","@types/node":"^20.11.0","javascript-obfuscator":"^5.4.3","@typescript-eslint/parser":"^8.61.0","@typescript-eslint/eslint-plugin":"^8.61.0"},"_npmOperationalInternal":{"tmp":"tmp/walther_0.1.4_1781362858600_0.8288998422021647","host":"s3://npm-registry-packages-npm-production"}},"0.1.5":{"name":"@dghila/walther","version":"0.1.5","author":{"name":"Davide Ghilardi"},"license":"MIT","_id":"@dghila/walther@0.1.5","maintainers":[{"name":"dghila","email":"dghila@d71.dev"}],"dist":{"shasum":"a12cc7f375e05a398e4b882abea87b683c426d21","tarball":"https://registry.npmjs.org/@dghila/walther/-/walther-0.1.5.tgz","fileCount":29,"integrity":"sha512-fcjh+6XiZBdDU/TYR9Ge1cFFhpD9VnDBaw5GH107CBD4riDui73Yvb00L91Kh7WvxMfqqXTDoimexmXmYjZAEA==","signatures":[{"sig":"MEQCIBRx3H6juWovTqgLqfpYmOf6LXvxSzX5BIagDv5KpC1rAiBCDcU1MuGBEaDpE/+/sukxu2eE84BoShazqjR6XZ3lIg==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":126286},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"node":">=18.0.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"}},"gitHead":"895eefd665119b572cbd4e6063fe45cc9d7bcdc7","scripts":{"lint":"eslint src/**/*.ts","test":"node --import tsx --test","build":"tsc && npm run obfuscate","format":"prettier --write \"src/**/*.ts\"","release":"panrelease release","obfuscate":"javascript-obfuscator ./dist --output ./dist --compact true --self-defending true --string-array true --string-array-encoding base64 --string-array-threshold 0.8","prepublishOnly":"npm run build"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:16dcd7e8-eaf5-4f94-a8c6-d357f9b3bbdb"}},"_npmVersion":"11.17.0","description":"Lightweight server-side license verification library for Node.js and Next.js applications.","directories":{},"_nodeVersion":"22.22.3","dependencies":{"jose":"^5.4.0"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.7.0","eslint":"^10.4.1","prettier":"^3.2.4","panrelease":"^0.18.0","typescript":"^5.3.3","@types/node":"^20.11.0","javascript-obfuscator":"^5.4.3","@typescript-eslint/parser":"^8.61.0","@typescript-eslint/eslint-plugin":"^8.61.0"},"_npmOperationalInternal":{"tmp":"tmp/walther_0.1.5_1781374818523_0.1590965037979435","host":"s3://npm-registry-packages-npm-production"}},"0.1.6":{"name":"@dghila/walther","version":"0.1.6","author":{"name":"Davide Ghilardi"},"license":"MIT","_id":"@dghila/walther@0.1.6","maintainers":[{"name":"dghila","email":"dghila@d71.dev"}],"dist":{"shasum":"42b4272c3d6fd1904343cab8895e09eb64dea659","tarball":"https://registry.npmjs.org/@dghila/walther/-/walther-0.1.6.tgz","fileCount":29,"integrity":"sha512-v4GlZaQoHJrBRTXii2gt5Fu0Yor/7xbOt9xPcb/GhAQeHZMA8bcis0HWawzr9Q91zBxdkyZ8ejp98+E31ifl9A==","signatures":[{"sig":"MEQCIFqXkLYTTiRs7Ec9gjxtkn+8jbfrBmUD69ytSMXVYjyGAiAeTCwiv9fdj4SYiWD49NElULO5yOSNndKtHt4TbB1zlQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":129637},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"node":">=18.0.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"}},"gitHead":"946926b1d8820f34455131df5f98385d18be5c00","scripts":{"lint":"eslint src/**/*.ts","test":"node --import tsx --test","build":"tsc && npm run obfuscate","format":"prettier --write \"src/**/*.ts\"","release":"panrelease release","obfuscate":"javascript-obfuscator ./dist --output ./dist --compact true --self-defending true --string-array true --string-array-encoding base64 --string-array-threshold 0.8","prepublishOnly":"npm run build"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:16dcd7e8-eaf5-4f94-a8c6-d357f9b3bbdb"}},"_npmVersion":"11.17.0","description":"Lightweight server-side license verification library for Node.js and Next.js applications.","directories":{},"_nodeVersion":"22.22.3","dependencies":{"jose":"^5.4.0"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.7.0","eslint":"^10.4.1","prettier":"^3.2.4","panrelease":"^0.18.0","typescript":"^5.3.3","@types/node":"^20.11.0","javascript-obfuscator":"^5.4.3","@typescript-eslint/parser":"^8.61.0","@typescript-eslint/eslint-plugin":"^8.61.0"},"_npmOperationalInternal":{"tmp":"tmp/walther_0.1.6_1781385004589_0.6938754508731486","host":"s3://npm-registry-packages-npm-production"}},"0.1.7":{"name":"@dghila/walther","version":"0.1.7","author":{"name":"Davide Ghilardi"},"license":"MIT","_id":"@dghila/walther@0.1.7","maintainers":[{"name":"dghila","email":"dghila@d71.dev"}],"dist":{"shasum":"61de2e3899f78d87f3387a53c90af704ad7fccd1","tarball":"https://registry.npmjs.org/@dghila/walther/-/walther-0.1.7.tgz","fileCount":29,"integrity":"sha512-YWiRltevDBqo2wIf3rFnGhO57pC7WKcfaPijv5yN6fUCVWcaqhxBf6gnrYf7Xj09dGjl95TMNInKbV90mv3uDQ==","signatures":[{"sig":"MEUCIC+TFEOf7oKtGSnr6xusdZifE4IfrYbyLs2261uXpmftAiEAmvltVio+V79DGNhXBl14vY6ZKTDkQBiW1snuEs44HDc=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":129993},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"node":">=18.0.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","default":"./dist/index.js"}},"gitHead":"0bf91534c22141f85a1ff3576f4ff84981503b30","scripts":{"lint":"eslint src/**/*.ts","test":"node --import tsx --test","build":"tsc && npm run obfuscate","format":"prettier --write \"src/**/*.ts\"","release":"panrelease release","obfuscate":"javascript-obfuscator ./dist --output ./dist --compact true --self-defending true --string-array true --string-array-encoding base64 --string-array-threshold 0.8","prepublishOnly":"npm run build"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:16dcd7e8-eaf5-4f94-a8c6-d357f9b3bbdb"}},"_npmVersion":"11.17.0","description":"Lightweight server-side license verification library for Node.js and Next.js applications.","directories":{},"_nodeVersion":"22.22.3","dependencies":{"jose":"^5.4.0"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.7.0","eslint":"^10.4.1","prettier":"^3.2.4","panrelease":"^0.18.0","typescript":"^5.3.3","@types/node":"^20.11.0","javascript-obfuscator":"^5.4.3","@typescript-eslint/parser":"^8.61.0","@typescript-eslint/eslint-plugin":"^8.61.0"},"_npmOperationalInternal":{"tmp":"tmp/walther_0.1.7_1781395239084_0.40919876188627","host":"s3://npm-registry-packages-npm-production"}},"0.2.0":{"name":"@dghila/walther","version":"0.2.0","author":{"name":"Davide Ghilardi"},"license":"MIT","_id":"@dghila/walther@0.2.0","maintainers":[{"name":"dghila","email":"dghila@d71.dev"}],"dist":{"shasum":"23df5ceb68983b9f609a74cfe0ac37b1532cb35b","tarball":"https://registry.npmjs.org/@dghila/walther/-/walther-0.2.0.tgz","fileCount":29,"integrity":"sha512-ckw7fgcIfyQk9Jl5XSzoe5bk9p5bVU9rMf2G+vOakiKHdhdJlX+N2qtBLeYGPMBTLp915yGZbMDjUco7x4uqCg==","signatures":[{"sig":"MEUCIH4qoNFhe82pzLgSnTolnW/AA2WySgE8RHsYrwdE8YICAiEAxUg1MPVw980R2U/OcbU0oYMzGhuIjaP/mhtpbh9oHwY=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":148153},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"node":">=18.0.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","default":"./dist/index.js"}},"gitHead":"f9bd4aa45e77ec21a81a4811a86bf087a3921066","scripts":{"lint":"eslint src/**/*.ts","test":"node --import tsx --test","build":"tsc && npm run obfuscate","format":"prettier --write \"src/**/*.ts\"","release":"panrelease release","obfuscate":"javascript-obfuscator ./dist --output ./dist --compact true --self-defending true --string-array true --string-array-encoding base64 --string-array-threshold 0.8","prepublishOnly":"npm run build"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:16dcd7e8-eaf5-4f94-a8c6-d357f9b3bbdb"}},"_npmVersion":"11.17.0","description":"Lightweight server-side license verification library for Node.js and Next.js applications.","directories":{},"_nodeVersion":"22.22.3","dependencies":{"jose":"^5.4.0"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.7.0","eslint":"^10.4.1","prettier":"^3.2.4","panrelease":"^0.18.0","typescript":"^5.3.3","@types/node":"^20.11.0","javascript-obfuscator":"^5.4.3","@typescript-eslint/parser":"^8.61.0","@typescript-eslint/eslint-plugin":"^8.61.0"},"_npmOperationalInternal":{"tmp":"tmp/walther_0.2.0_1781447473984_0.24078814451873254","host":"s3://npm-registry-packages-npm-production"}},"0.3.0":{"name":"@dghila/walther","version":"0.3.0","author":{"name":"Davide Ghilardi"},"license":"MIT","_id":"@dghila/walther@0.3.0","maintainers":[{"name":"dghila","email":"dghila@d71.dev"}],"dist":{"shasum":"4d2d4470e6d2b9482a0e793021802516cad35d22","tarball":"https://registry.npmjs.org/@dghila/walther/-/walther-0.3.0.tgz","fileCount":29,"integrity":"sha512-BWHpOEzs5h7vpjJsTTrscSJU4hZYRg8lBlcY6k5eGJrV/u9gdJXeYDtvItO0xTDnZYYIM4Li6+BYH/Ndb1fmpA==","signatures":[{"sig":"MEUCIFMEwFmCq2UHf9NlMHsqzM8mAetnKMOVxF2fPipFaO4YAiEAg9ybBQEc8SmE23GU+wn2ux+otomxS5v5KtEghs9fUjI=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":178836},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"node":">=18.0.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","default":"./dist/index.js"}},"gitHead":"bf7d7202c89ffb25c51e7fee0c5031c56353f48f","scripts":{"lint":"eslint src/**/*.ts","test":"node --import tsx --test","build":"tsc && npm run obfuscate","format":"prettier --write \"src/**/*.ts\"","release":"panrelease release","obfuscate":"javascript-obfuscator ./dist --output ./dist --compact true --self-defending true --string-array true --string-array-encoding base64 --string-array-threshold 0.8","prepublishOnly":"npm run build"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:16dcd7e8-eaf5-4f94-a8c6-d357f9b3bbdb"}},"_npmVersion":"11.17.0","description":"Lightweight server-side license verification library for Node.js and Next.js applications.","directories":{},"_nodeVersion":"22.22.3","dependencies":{"jose":"^5.4.0"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.7.0","eslint":"^10.4.1","prettier":"^3.2.4","panrelease":"^0.18.0","typescript":"^5.3.3","@types/node":"^20.11.0","javascript-obfuscator":"^5.4.3","@typescript-eslint/parser":"^8.61.0","@typescript-eslint/eslint-plugin":"^8.61.0"},"_npmOperationalInternal":{"tmp":"tmp/walther_0.3.0_1781452773632_0.4903927620982149","host":"s3://npm-registry-packages-npm-production"}},"0.3.2":{"name":"@dghila/walther","version":"0.3.2","author":{"name":"Davide Ghilardi"},"license":"MIT","_id":"@dghila/walther@0.3.2","maintainers":[{"name":"dghila","email":"dghila@d71.dev"}],"dist":{"shasum":"fa1fb4c76776596b83865a7048a2e6b7240ced5a","tarball":"https://registry.npmjs.org/@dghila/walther/-/walther-0.3.2.tgz","fileCount":29,"integrity":"sha512-6IQvoiUSH+3lg0TjvIAXr+S1BYkMkarciqr+MpojUv8Ns/pF53tOq0dvrFs2hiLe11JEPi/NX6cvJP9i0tMcgA==","signatures":[{"sig":"MEUCIQCOmcNgjrOnVezwGmR9boOiovFUUBITZoX2mMp9O43EXwIgach0k0mlD9ARwprzHVjXQY+0LP/2lEFAzu0kwmz/kwY=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":182005},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"node":">=18.0.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","default":"./dist/index.js"}},"gitHead":"6a381bcd544e50f3060431cb4f8f443a821ede7c","scripts":{"lint":"eslint src/**/*.ts","test":"node --import tsx --test","build":"tsc && npm run obfuscate","format":"prettier --write \"src/**/*.ts\"","release":"panrelease release","obfuscate":"javascript-obfuscator ./dist --output ./dist --compact true --self-defending true --string-array true --string-array-encoding base64 --string-array-threshold 0.8","prepublishOnly":"npm run build"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:16dcd7e8-eaf5-4f94-a8c6-d357f9b3bbdb"}},"_npmVersion":"11.17.0","description":"Lightweight server-side license verification library for Node.js and Next.js applications.","directories":{},"_nodeVersion":"22.22.3","dependencies":{"jose":"^5.4.0"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.7.0","eslint":"^10.4.1","prettier":"^3.2.4","panrelease":"^0.18.0","typescript":"^5.3.3","@types/node":"^20.11.0","javascript-obfuscator":"^5.4.3","@typescript-eslint/parser":"^8.61.0","@typescript-eslint/eslint-plugin":"^8.61.0"},"_npmOperationalInternal":{"tmp":"tmp/walther_0.3.2_1781641393634_0.21170802297221014","host":"s3://npm-registry-packages-npm-production"}},"0.3.3":{"name":"@dghila/walther","version":"0.3.3","author":{"name":"Davide Ghilardi"},"license":"MIT","_id":"@dghila/walther@0.3.3","maintainers":[{"name":"dghila","email":"dghila@d71.dev"}],"dist":{"shasum":"a19aa1b0e33cad2f9175db31a9021bf30b6a8cfc","tarball":"https://registry.npmjs.org/@dghila/walther/-/walther-0.3.3.tgz","fileCount":29,"integrity":"sha512-2QKpdVz4sZg69fIf7M1aYWiOeX/5850Zc5ktcSJ4zErLZLmx+UtERMEqo9CYbk3AYNbfh7ul9xwIAbHqVewDwg==","signatures":[{"sig":"MEUCIQC8c8W63FKXeC+HkV8UtBD+Li7c3ZRwnPa4LCyo68Ul2wIgSyrYzBGafqr29aoGoawRUQTQyNjI8Oh2iBhxWl9+AjI=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":187621},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"node":">=18.0.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","default":"./dist/index.js"}},"gitHead":"e2b0d287538fabdb91226d8abd0067d05e87fd49","scripts":{"lint":"eslint src/**/*.ts","test":"node --import tsx --test","build":"tsc && npm run obfuscate","format":"prettier --write \"src/**/*.ts\"","release":"panrelease release","obfuscate":"javascript-obfuscator ./dist --output ./dist --compact true --self-defending true --string-array true --string-array-encoding base64 --string-array-threshold 0.8","prepublishOnly":"npm run build"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:16dcd7e8-eaf5-4f94-a8c6-d357f9b3bbdb"}},"_npmVersion":"11.17.0","description":"Lightweight server-side license verification library for Node.js and Next.js applications.","directories":{},"_nodeVersion":"22.22.3","dependencies":{"jose":"^5.4.0"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.7.0","eslint":"^10.4.1","prettier":"^3.2.4","panrelease":"^0.18.0","typescript":"^5.3.3","@types/node":"^20.11.0","javascript-obfuscator":"^5.4.3","@typescript-eslint/parser":"^8.61.0","@typescript-eslint/eslint-plugin":"^8.61.0"},"_npmOperationalInternal":{"tmp":"tmp/walther_0.3.3_1781716421005_0.0425073375620284","host":"s3://npm-registry-packages-npm-production"}},"0.3.4":{"name":"@dghila/walther","version":"0.3.4","author":{"name":"Davide Ghilardi"},"license":"MIT","_id":"@dghila/walther@0.3.4","maintainers":[{"name":"dghila","email":"dghila@d71.dev"}],"dist":{"shasum":"47802e69801aafc7836fcfe23c92022eb80695bc","tarball":"https://registry.npmjs.org/@dghila/walther/-/walther-0.3.4.tgz","fileCount":29,"integrity":"sha512-xlMvckjQGPyeK+zrlFmegNogWj7Ni4UWwmqPoRuK6KHI1MsbVnqutqB3jfpx5Gl/+fDzuH25ymfYa4bFlIIZ+g==","signatures":[{"sig":"MEUCIQDcs24Ac5n6KI8bSMVHr4ANoASpVVVVa+iN3qj6wFNROgIgdtz2PkWLmmdPv84sai/J6ZMUwiVUOTQi+HnhVihgQCI=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":189025},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"node":">=18.0.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","default":"./dist/index.js"}},"gitHead":"c683e5d10765b6a60049d44cf0f31115aee14081","scripts":{"lint":"eslint src/**/*.ts","test":"node --import tsx --test","build":"tsc && npm run obfuscate","format":"prettier --write \"src/**/*.ts\"","release":"panrelease release","obfuscate":"javascript-obfuscator ./dist --output ./dist --compact true --self-defending true --string-array true --string-array-encoding base64 --string-array-threshold 0.8","prepublishOnly":"npm run build"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:16dcd7e8-eaf5-4f94-a8c6-d357f9b3bbdb"}},"_npmVersion":"11.17.0","description":"Lightweight server-side license verification library for Node.js and Next.js applications.","directories":{},"_nodeVersion":"22.22.3","dependencies":{"jose":"^5.4.0"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.7.0","eslint":"^10.4.1","prettier":"^3.2.4","panrelease":"^0.18.0","typescript":"^5.3.3","@types/node":"^20.11.0","javascript-obfuscator":"^5.4.3","@typescript-eslint/parser":"^8.61.0","@typescript-eslint/eslint-plugin":"^8.61.0"},"_npmOperationalInternal":{"tmp":"tmp/walther_0.3.4_1781745889960_0.6743568033152567","host":"s3://npm-registry-packages-npm-production"}},"0.3.5":{"name":"@dghila/walther","version":"0.3.5","author":{"name":"Davide Ghilardi"},"license":"MIT","_id":"@dghila/walther@0.3.5","maintainers":[{"name":"dghila","email":"dghila@d71.dev"}],"dist":{"shasum":"3d113a46fb16610777b867578ed0f33d66029d3e","tarball":"https://registry.npmjs.org/@dghila/walther/-/walther-0.3.5.tgz","fileCount":29,"integrity":"sha512-+ISkPQJ5wWkFqvREQ4EW2Yd0PwuLN9W/OqYsRv4YymJAXIdMsW91hB4YCJ0gCXu3/wL0M0wXh/WUOIT4reEECQ==","signatures":[{"sig":"MEUCIHcz6tSdHA368NJ9iuj0Y0HJvEthSRU9Ck0emQh6AtL5AiEA2uGRNXeWGUe6kVBx3mKoIt3dXRQASCvluB6fbPM3lC8=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":189642},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"node":">=18.0.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","default":"./dist/index.js"}},"gitHead":"be8c8b2129fd3546b76bfe15929c950a9dda20f4","scripts":{"lint":"eslint src/**/*.ts","test":"node --import tsx --test","build":"tsc && npm run obfuscate","format":"prettier --write \"src/**/*.ts\"","release":"panrelease release","obfuscate":"javascript-obfuscator ./dist --output ./dist --compact true --self-defending true --string-array true --string-array-encoding base64 --string-array-threshold 0.8","prepublishOnly":"npm run build"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:16dcd7e8-eaf5-4f94-a8c6-d357f9b3bbdb"}},"_npmVersion":"11.17.0","description":"Lightweight server-side license verification library for Node.js and Next.js applications.","directories":{},"_nodeVersion":"22.22.3","dependencies":{"jose":"^5.4.0"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.7.0","eslint":"^10.4.1","prettier":"^3.2.4","panrelease":"^0.18.0","typescript":"^5.3.3","@types/node":"^20.11.0","javascript-obfuscator":"^5.4.3","@typescript-eslint/parser":"^8.61.0","@typescript-eslint/eslint-plugin":"^8.61.0"},"_npmOperationalInternal":{"tmp":"tmp/walther_0.3.5_1782050438977_0.9349992421210045","host":"s3://npm-registry-packages-npm-production"}},"0.4.1":{"name":"@dghila/walther","version":"0.4.1","author":{"name":"Davide Ghilardi"},"license":"MIT","_id":"@dghila/walther@0.4.1","maintainers":[{"name":"dghila","email":"dghila@d71.dev"}],"dist":{"shasum":"387c16fb363eeaaf1da95fb26746d5cd0f96c2b6","tarball":"https://registry.npmjs.org/@dghila/walther/-/walther-0.4.1.tgz","fileCount":38,"integrity":"sha512-6ex3x3jP3DbHigkTtr04Y93vtrx3K/4dTBGRP84IhPp3zsx5j+ib1ZzpEwACqht8snKrBUeJgzJn9jY0N+i6rA==","signatures":[{"sig":"MEYCIQD5z8aDmYuhh+B3n/Ox37qtlZeN8uBV1NJGFcwV3qn1zQIhALKIAvexAB6i6CVRtbbu/GS8cHJ3GdlphLDLUNLUsFod","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":209415},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"node":">=18.0.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","default":"./dist/index.js"}},"gitHead":"fd73789fea95aaa5bceb4272bf4f1f345a065f91","scripts":{"lint":"eslint src/**/*.ts","test":"node --import tsx --test","build":"tsc && npm run obfuscate","format":"prettier --write \"src/**/*.ts\"","release":"panrelease release","obfuscate":"javascript-obfuscator ./dist --output ./dist --compact true --self-defending true --string-array true --string-array-encoding base64 --string-array-threshold 0.8","prepublishOnly":"npm run build"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:16dcd7e8-eaf5-4f94-a8c6-d357f9b3bbdb"}},"_npmVersion":"11.17.0","description":"Lightweight server-side license verification library for Node.js and Next.js applications.","directories":{},"_nodeVersion":"22.22.3","dependencies":{"jose":"^5.4.0"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.7.0","eslint":"^10.4.1","prettier":"^3.2.4","panrelease":"^0.18.0","typescript":"^5.3.3","@types/node":"^20.11.0","javascript-obfuscator":"^5.4.3","@typescript-eslint/parser":"^8.61.0","@typescript-eslint/eslint-plugin":"^8.61.0"},"_npmOperationalInternal":{"tmp":"tmp/walther_0.4.1_1782066171341_0.36834420437449533","host":"s3://npm-registry-packages-npm-production"}},"0.4.2":{"name":"@dghila/walther","version":"0.4.2","description":"Lightweight server-side license verification library for Node.js and Next.js applications.","type":"module","main":"./dist/index.js","types":"./dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","default":"./dist/index.js"}},"scripts":{"build":"tsc && npm run obfuscate","obfuscate":"javascript-obfuscator ./dist --output ./dist --compact true --self-defending true --string-array true --string-array-encoding base64 --string-array-threshold 0.8","prepublishOnly":"npm run build","test":"node --import tsx --test","lint":"eslint src/**/*.ts","format":"prettier --write \"src/**/*.ts\"","release":"panrelease release"},"author":{"name":"Davide Ghilardi"},"license":"MIT","dependencies":{"jose":"^5.4.0"},"devDependencies":{"@types/node":"^20.11.0","@typescript-eslint/eslint-plugin":"^8.61.0","@typescript-eslint/parser":"^8.61.0","eslint":"^10.4.1","javascript-obfuscator":"^5.4.3","panrelease":"^0.18.0","prettier":"^3.2.4","tsx":"^4.7.0","typescript":"^5.3.3"},"engines":{"node":">=18.0.0"},"gitHead":"7905c8a2b960868147cfdc98055c7c5b6fb289f8","_id":"@dghila/walther@0.4.2","_nodeVersion":"22.23.0","_npmVersion":"11.17.0","dist":{"integrity":"sha512-FRJ/TON+zzGWNLgi50JIIoAfAdxzeY6MK4t/qVGL/IVhUzmk+WtNpWfRIA+6JCMXGzVkhRRfRP33odx13KwkIg==","shasum":"f43598432d04d40e47da000a885e77fbbd0d7916","tarball":"https://registry.npmjs.org/@dghila/walther/-/walther-0.4.2.tgz","fileCount":38,"unpackedSize":212834,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEUCIDqCH8IKoj46P4eORJ8HYdAXNDK6/UWUOwDLgZ7jnNq4AiEAvMCG/P548jcEGS6JI4Xnvu0k5erTN5pNL8hRn8BLGGU="}]},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:16dcd7e8-eaf5-4f94-a8c6-d357f9b3bbdb"}},"directories":{},"maintainers":[{"name":"dghila","email":"dghila@d71.dev"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/walther_0.4.2_1782434040447_0.44036786588517396"},"_hasShrinkwrap":false}},"time":{"created":"2026-06-13T11:54:15.042Z","modified":"2026-06-26T00:34:00.687Z","0.1.0-dev":"2026-06-13T11:54:15.290Z","0.1.3":"2026-06-13T12:57:09.526Z","0.1.4":"2026-06-13T15:00:58.837Z","0.1.5":"2026-06-13T18:20:18.732Z","0.1.6":"2026-06-13T21:10:04.783Z","0.1.7":"2026-06-14T00:00:39.227Z","0.2.0":"2026-06-14T14:31:14.119Z","0.3.0":"2026-06-14T15:59:33.769Z","0.3.2":"2026-06-16T20:23:13.786Z","0.3.3":"2026-06-17T17:13:41.200Z","0.3.4":"2026-06-18T01:24:50.087Z","0.3.5":"2026-06-21T14:00:39.119Z","0.4.1":"2026-06-21T18:22:51.486Z","0.4.2":"2026-06-26T00:34:00.596Z"},"author":{"name":"Davide Ghilardi"},"license":"MIT","description":"Lightweight server-side license verification library for Node.js and Next.js applications.","maintainers":[{"name":"dghila","email":"dghila@d71.dev"}],"readme":"# walther\n\n`walther` is a lightweight, strictly server-side licensing library designed to be embedded directly into host applications (such as Next.js backends). It serves as the local enforcer of the licensing system: securely identifying the host machine, activating licenses against `double-o`, and validating license chains offline.\n\n---\n\n## 🔒 Security & Validation Model\n\n`walther` operates on a **Zero Trust** model regarding license payloads. It executes a two-phase cryptographic validation sequence completely offline:\n\n1. **Infrastructure Validation (X.509):**\n   - Cryptographically validates the **Intermediate Certificate** against a hardcoded **Public Root CA Certificate**.\n   - Assures the Intermediate Certificate is within its validity dates (`NotBefore`/`NotAfter`).\n   - Checks the Intermediate Certificate against the local Certificate Revocation List (CRL) cache.\n\n2. **Application Validation (JWT):**\n   - Extracts the public key from the validated Intermediate Certificate.\n   - Validates the license **JWT** signature using the extracted key.\n   - Validates expiration (`exp`) and active entitlements.\n   - Computes the local hardware fingerprint and checks that it strictly matches the `machine_id` bound to the JWT.\n\n---\n\n## 🛠️ Technology Stack\n\n- **Language:** TypeScript\n- **Runtime:** Node.js (specifically targeting server-side environments like Next.js Server Components / API Routes). *It cannot run in the browser due to hardware access requirements.*\n- **Cryptography:** Node.js native `crypto` module and `jose` for secure JWT parsing and signature verification.\n- **Storage:** Local file system cache (`.walther_cache/`) for CRLs, Intermediate Certificates, and JWT payloads.\n\n---\n\n## 📁 Fingerprinting Engine\n\n`walther` generates a stable, reproducible `machine_id` without requiring internet access.\n- **Identifiers used:** Motherboard UUID, primary MAC address, and OS installation ID.\n- **Privacy:** Data is combined and hashed using **SHA-256** to generate an opaque `machine_id`, preserving privacy while enforcing strict node-locking.\n\n---\n\n## 🚀 Public API\n\n```typescript\nimport { Walther } from '@dghila/walther';\n\n// Initialize the library (e.g. for Double-O provider with background scheduling)\nWalther.init({\n  provider: \"double-o\",\n  config: {\n    rootCertificate: \"-----BEGIN CERTIFICATE-----\\n...\",\n    backendUrl: \"https://licensing.double-o.com\",\n    cacheDir: \"./.walther_cache\",\n    licenseKey: \"XXXX-XXXX-XXXX-XXXX\", // Optional, enables background JWT auto-renewal\n    checkIntervalMs: 3600000,           // Check every hour (unreferenced timer)\n    refreshThresholdMs: 86400000,       // Preemptively refresh if expiring in < 24 hours\n  }\n});\n\n// Perform initial online activation (binds machine and downloads JWT/certs)\nconst activated = await Walther.activate(\"XXXX-XXXX-XXXX-XXXX\");\n\n// Verify license status locally & synchronously\nif (Walther.isValid()) {\n  // Retrieve cryptographically validated entitlements\n  const entitlements = Walther.getEntitlements();\n  console.log(\"Active Tier:\", entitlements?.tier);\n  console.log(\"Expires At:\", entitlements?.expiresAt);\n}\n\n// Clean up background timers on application teardown\nWalther.stopScheduler();\n```\n\n---\n\n## 🔄 License Check & Refresh Scheduler\n\n`walther` supports automated background checking and proactive license renewal. This prevents application downtime by renewing the license before it actually expires.\n\n### Configuration Properties\n\nSpecify these options in the configuration object under the `config` field when calling `Walther.init()`:\n\n- **`checkIntervalMs` (number):** Frequency (in milliseconds) at which a background job is run to check license expiration. If specified, `walther` will run a timer using Node.js `setInterval()`. The timer is unreferenced (`.unref()`), meaning it will not prevent the Node.js process from exiting when the main application shuts down.\n- **`refreshThresholdMs` (number):** Duration before expiration (in milliseconds) under which the license will attempt a refresh. E.g., setting it to `86400000` (24 hours) will trigger a refresh attempt if the license is expiring in less than 24 hours.\n\n### Operational Modes\n\n1. **Active Background Scheduling (Timer-based):**\n   - Triggered when `checkIntervalMs` is set to a positive number.\n   - Runs periodically in the background.\n   - For tests or hot-reloading environments, call `Walther.stopScheduler()` to clear active background timers.\n   \n2. **Passive/Lazy Background Trigger:**\n   - Triggered when `refreshThresholdMs` is set but `checkIntervalMs` is not.\n   - Every time `Walther.isValid()` is called, it checks the license expiration time. If the remaining time is below the threshold, it triggers the check-refresh process asynchronously in the background as a floating promise (without blocking the calling code).\n   - Utilizes a concurrency lock to ensure only one refresh runs at a time.\n\n### Provider-Specific Refresh Actions\n\n- **`m-license`:** Calls `/licenses/:key/token` to fetch and cache a newly-extended JWT token.\n- **`double-o`:**\n  - If `licenseKey` is provided in `DoubleOProviderConfig`, it executes a re-activation step (`activate(licenseKey)`) to fetch and cache a new JWT.\n  - If `licenseKey` is absent, it only runs a refresh of the infrastructure (`refreshOnline()`) to update the Intermediate Certificate and CRL list.\n- **`local` (offline):** Executes a forced validation reload from the local disk cache (`validateOffline(true, true)`). This allows `walther` to seamlessly detect new license files written to disk by an external process or sidecar container.\n\n---\n\n## 🧪 Development & Testing\n\n### Installation\n```bash\nnpm install\n```\n\n### Run Tests\n```bash\nnpm test\n```\n\n### Linting & Formatting\n```bash\nnpm run lint\nnpm run format\n```\n\n---\n\n## 🗺️ Roadmap (Tamper Resistance)\n\nTo counter active code tampering (e.g., modifying JS files to bypass `isValid()`), the core cryptographic and fingerprinting components of `walther` will be migrated to **Rust** via `napi-rs` post-MVP. This will compile into a native `.node` binary, providing:\n- Memory safety and high performance.\n- Direct hardware access without shell child-processes.\n- Strong binary obfuscation while maintaining the identical TypeScript API interface.\n","readmeFilename":"README.md"}