{"_id":"@crabnebula/better-auth-license","_rev":"15-e3d9b67ed23ec1bf4094343c0fd55e4e","name":"@crabnebula/better-auth-license","dist-tags":{"latest":"0.0.16"},"versions":{"0.0.1":{"name":"@crabnebula/better-auth-license","version":"0.0.1","keywords":["better-auth","license","plugin","authentication","typescript","desktop","validation","esm"],"author":{"name":"CrabNebula","email":"hello@crabnebula.dev"},"license":"Apache-2.0 OR MIT","_id":"@crabnebula/better-auth-license@0.0.1","maintainers":[{"name":"crabnebula-npm","email":"npm-admin@crabnebula.dev"},{"name":"lucasfernog-crabnebula","email":"lucas@crabnebula.dev"}],"homepage":"https://github.com/crabnebula-dev/better-auth-license#readme","bugs":{"url":"https://github.com/crabnebula-dev/better-auth-license/issues"},"dist":{"shasum":"6acdf9cdf2a2beb667921d0dbeb60b4a9aac7e17","tarball":"https://registry.npmjs.org/@crabnebula/better-auth-license/-/better-auth-license-0.0.1.tgz","fileCount":5,"integrity":"sha512-B/bbNsrnbvfzsFWvpWnIbKq9drUfiGeJ1cQ2inNv4Dgot4s/BgFoljD1PzOOvNxU9NxFIkFAnDU4pPV6UUJT3A==","signatures":[{"sig":"MEUCIQCVYvS0u9ytGvdIngqMH62yWIsgRI289R/9smsIn9yEQgIgFrGL2GsMxF1QaSGQeOGQvHffOMn5N2+IG7EuSlZTh2o=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":17894},"main":"./dist/index.mjs","_from":"file:crabnebula-better-auth-license-0.0.1.tgz","types":"./dist/index.d.mts","engines":{"node":">=18.0.0"},"exports":{".":{"types":"./dist/index.d.mts","default":"./dist/index.mjs"}},"scripts":{"test":"vitest","build":"tsup src/index.ts","clean":"rm -rf dist","format":"biome check .","version":"changeset version","prebuild":"pnpm clean","changeset":"changeset","format:fix":"biome check . --write"},"_npmUser":{"name":"crabnebula-npm","email":"npm-admin@crabnebula.dev"},"_resolved":"/tmp/e277a429b813dfb2908f6fc509a1513e/crabnebula-better-auth-license-0.0.1.tgz","_integrity":"sha512-B/bbNsrnbvfzsFWvpWnIbKq9drUfiGeJ1cQ2inNv4Dgot4s/BgFoljD1PzOOvNxU9NxFIkFAnDU4pPV6UUJT3A==","repository":{"url":"git+https://github.com/crabnebula-dev/better-auth-license.git","type":"git"},"_npmVersion":"11.6.1","description":"Better Auth plugin for license key validation and management.","directories":{},"_nodeVersion":"24.11.0","dependencies":{"zod":"^4.1.12","jose":"^6.1.0","@noble/ciphers":"^2.0.1"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.5.0","vitest":"^4.0.6","typescript":"^5.9.3","@biomejs/biome":"^2.3.3","@changesets/cli":"^2.29.7","vite-tsconfig-paths":"^5.1.4","@better-auth-kit/tests":"^0.2.0","@changesets/changelog-github":"^0.5.1"},"peerDependencies":{"better-auth":"^1.3.4","@better-auth/utils":"^0.3.0"},"_npmOperationalInternal":{"tmp":"tmp/better-auth-license_0.0.1_1762274010816_0.766360656167389","host":"s3://npm-registry-packages-npm-production"}},"0.0.2":{"name":"@crabnebula/better-auth-license","version":"0.0.2","keywords":["better-auth","license","plugin","authentication","typescript","desktop","validation","esm"],"author":{"name":"CrabNebula","email":"hello@crabnebula.dev"},"license":"Apache-2.0 OR MIT","_id":"@crabnebula/better-auth-license@0.0.2","maintainers":[{"name":"crabnebula-npm","email":"npm-admin@crabnebula.dev"},{"name":"lucasfernog-crabnebula","email":"lucas@crabnebula.dev"}],"homepage":"https://github.com/crabnebula-dev/better-auth-license#readme","bugs":{"url":"https://github.com/crabnebula-dev/better-auth-license/issues"},"dist":{"shasum":"19fa28baa3928fd20015aff55e2cac83ef6024a4","tarball":"https://registry.npmjs.org/@crabnebula/better-auth-license/-/better-auth-license-0.0.2.tgz","fileCount":7,"integrity":"sha512-6sqkZVHFouey5YoTEo6K4GNK2cx4RP6XrG76fATSaynFv5cHjhhW+z2uAAGSNWs8L+sYNS6dV1ZRlBJxrag8FA==","signatures":[{"sig":"MEUCID36mhll8E+o0wbzgXoWhpPecleYBRzMZpMdogxwm5RmAiEAxkvVgcS/RAQaVoD9NZzpLF9psn8AlipzQlZXLo/jbvs=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":77055},"main":"./dist/index.mjs","_from":"file:crabnebula-better-auth-license-0.0.2.tgz","types":"./dist/index.d.mts","engines":{"node":">=18.0.0"},"exports":{".":{"types":"./dist/index.d.mts","default":"./dist/index.mjs"}},"scripts":{"test":"vitest","build":"tsup src/index.ts","clean":"rm -rf dist","format":"biome check .","version":"changeset version","prebuild":"pnpm clean","changeset":"changeset","format:fix":"biome check . --write"},"_npmUser":{"name":"crabnebula-npm","email":"npm-admin@crabnebula.dev"},"_resolved":"/tmp/d14e00f87978108c127e9061ffae934b/crabnebula-better-auth-license-0.0.2.tgz","_integrity":"sha512-6sqkZVHFouey5YoTEo6K4GNK2cx4RP6XrG76fATSaynFv5cHjhhW+z2uAAGSNWs8L+sYNS6dV1ZRlBJxrag8FA==","repository":{"url":"git+https://github.com/crabnebula-dev/better-auth-license.git","type":"git"},"_npmVersion":"11.6.1","description":"Better Auth plugin for license key validation and management.","directories":{},"_nodeVersion":"24.11.0","dependencies":{"zod":"^4.1.12","jose":"^6.1.0","@noble/ciphers":"^2.0.1"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.5.0","vitest":"^4.0.6","typescript":"^5.9.3","@biomejs/biome":"^2.3.3","@changesets/cli":"^2.29.7","vite-tsconfig-paths":"^5.1.4","@better-auth-kit/tests":"^0.2.0","@changesets/changelog-github":"^0.5.1"},"peerDependencies":{"better-auth":"^1.3.4","@better-auth/utils":"^0.3.0"},"_npmOperationalInternal":{"tmp":"tmp/better-auth-license_0.0.2_1762275077832_0.44223714998059727","host":"s3://npm-registry-packages-npm-production"}},"0.0.3":{"name":"@crabnebula/better-auth-license","version":"0.0.3","keywords":["better-auth","license","plugin","authentication","typescript","desktop","validation","esm"],"author":{"name":"CrabNebula","email":"hello@crabnebula.dev"},"license":"Apache-2.0 OR MIT","_id":"@crabnebula/better-auth-license@0.0.3","maintainers":[{"name":"crabnebula-npm","email":"npm-admin@crabnebula.dev"},{"name":"lucasfernog-crabnebula","email":"lucas@crabnebula.dev"}],"homepage":"https://github.com/crabnebula-dev/better-auth-license#readme","bugs":{"url":"https://github.com/crabnebula-dev/better-auth-license/issues"},"dist":{"shasum":"dd89b56964b960e51c0af4941123257127327d9b","tarball":"https://registry.npmjs.org/@crabnebula/better-auth-license/-/better-auth-license-0.0.3.tgz","fileCount":7,"integrity":"sha512-IW3bdX4AytY55GNrze3rkxy8XLdv3hkNFhzHhnW42xf/osJIhn46fU+eqP/1GSv9dX4KUbZzkjuyqPnSmW1rBA==","signatures":[{"sig":"MEUCIQDPIAw778QoUiNW325IgZM0YIK0bm4aIY5piSexsj4LIgIgBI7GaGTZG/JTEcHiLpaBV6yRMoXxrXNBhQIA6/7xkK0=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":77419},"main":"./dist/index.mjs","_from":"file:crabnebula-better-auth-license-0.0.3.tgz","types":"./dist/index.d.mts","engines":{"node":">=18.0.0"},"exports":{".":{"types":"./dist/index.d.mts","default":"./dist/index.mjs"}},"scripts":{"test":"vitest","build":"tsup src/index.ts","clean":"rm -rf dist","format":"biome check .","version":"changeset version","prebuild":"pnpm clean","changeset":"changeset","format:fix":"biome check . --write"},"_npmUser":{"name":"crabnebula-npm","email":"npm-admin@crabnebula.dev"},"_resolved":"/tmp/85753ebb87c0647c53b24aeb47901e7b/crabnebula-better-auth-license-0.0.3.tgz","_integrity":"sha512-IW3bdX4AytY55GNrze3rkxy8XLdv3hkNFhzHhnW42xf/osJIhn46fU+eqP/1GSv9dX4KUbZzkjuyqPnSmW1rBA==","repository":{"url":"git+https://github.com/crabnebula-dev/better-auth-license.git","type":"git"},"_npmVersion":"11.6.1","description":"Better Auth plugin for license key validation and management.","directories":{},"_nodeVersion":"24.11.0","dependencies":{"zod":"^4.1.12","jose":"^6.1.0","@noble/ciphers":"^2.0.1"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.5.0","vitest":"^4.0.6","typescript":"^5.9.3","@biomejs/biome":"^2.3.3","@changesets/cli":"^2.29.7","vite-tsconfig-paths":"^5.1.4","@better-auth-kit/tests":"^0.2.0","@changesets/changelog-github":"^0.5.1"},"peerDependencies":{"better-auth":"^1.3.4","@better-auth/utils":"^0.3.0"},"_npmOperationalInternal":{"tmp":"tmp/better-auth-license_0.0.3_1762278895435_0.7651590802529751","host":"s3://npm-registry-packages-npm-production"}},"0.0.5":{"name":"@crabnebula/better-auth-license","version":"0.0.5","keywords":["better-auth","license","plugin","authentication","typescript","desktop","validation","esm"],"author":{"name":"CrabNebula","email":"hello@crabnebula.dev"},"license":"Apache-2.0 OR MIT","_id":"@crabnebula/better-auth-license@0.0.5","maintainers":[{"name":"crabnebula-npm","email":"npm-admin@crabnebula.dev"},{"name":"lucasfernog-crabnebula","email":"lucas@crabnebula.dev"}],"homepage":"https://github.com/crabnebula-dev/better-auth-license#readme","bugs":{"url":"https://github.com/crabnebula-dev/better-auth-license/issues"},"dist":{"shasum":"6ab52ad57eac3ba7f97b60b9fd30601dcdf45306","tarball":"https://registry.npmjs.org/@crabnebula/better-auth-license/-/better-auth-license-0.0.5.tgz","fileCount":7,"integrity":"sha512-NZ6wRLeQ4wr4f9+YLGrOl8WAR/PCrWXOVMx0yIu2Ci6B8ymFNVSdkhaY3ONsbBk/KqfAlv86ZvuMhwjT7zO+7w==","signatures":[{"sig":"MEUCIQCmeTF9GVT3E4ImTB3o3NSdxGT83W+qCA7J+bKxii4vFwIgD97SU8qrw7xrs79kVSbBqR1u3CS9wRqDmFdgpHH2rnU=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":68153},"main":"./dist/index.js","type":"module","_from":"file:crabnebula-better-auth-license-0.0.5.tgz","types":"./dist/index.d.ts","engines":{"node":">=18.0.0"},"exports":{".":{"types":"./dist/index.d.ts","default":"./dist/index.js"}},"scripts":{"test":"vitest","build":"tsdown","prebuild":"rm -rf dist"},"_npmUser":{"name":"crabnebula-npm","email":"npm-admin@crabnebula.dev"},"_resolved":"/tmp/c1b866c622675a2864bd0211c80786f6/crabnebula-better-auth-license-0.0.5.tgz","_integrity":"sha512-NZ6wRLeQ4wr4f9+YLGrOl8WAR/PCrWXOVMx0yIu2Ci6B8ymFNVSdkhaY3ONsbBk/KqfAlv86ZvuMhwjT7zO+7w==","repository":{"url":"git+https://github.com/crabnebula-dev/better-auth-license.git","type":"git"},"_npmVersion":"11.6.1","description":"Better Auth plugin for license key validation and management.","directories":{},"_nodeVersion":"24.11.0","dependencies":{"zod":"^4.1.12","jose":"^6.1.0","@noble/ciphers":"^2.0.1"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsdown":"^0.15.12","vitest":"^4.0.7","typescript":"^5.9.3","vite-tsconfig-paths":"^5.1.4","@better-auth-kit/tests":"^0.2.0"},"peerDependencies":{"better-auth":"^1.3.4","@better-auth/utils":"^0.3.0"},"_npmOperationalInternal":{"tmp":"tmp/better-auth-license_0.0.5_1762364712760_0.46419308850219854","host":"s3://npm-registry-packages-npm-production"}},"0.0.6":{"name":"@crabnebula/better-auth-license","version":"0.0.6","keywords":["better-auth","license","plugin","authentication","typescript","desktop","validation","esm"],"author":{"name":"CrabNebula","email":"hello@crabnebula.dev"},"license":"Apache-2.0 OR MIT","_id":"@crabnebula/better-auth-license@0.0.6","maintainers":[{"name":"crabnebula-npm","email":"npm-admin@crabnebula.dev"},{"name":"lucasfernog-crabnebula","email":"lucas@crabnebula.dev"}],"homepage":"https://github.com/crabnebula-dev/better-auth-license#readme","bugs":{"url":"https://github.com/crabnebula-dev/better-auth-license/issues"},"dist":{"shasum":"a4ae8e61828ddf221eb2aa55cf6c124c87b0943c","tarball":"https://registry.npmjs.org/@crabnebula/better-auth-license/-/better-auth-license-0.0.6.tgz","fileCount":5,"integrity":"sha512-GhIuNwRFLMmtKrFeEPmHLac5w6A9JuXMnvfBrzXN1ZlIpdAvc/9TTDOAzbCdhwlfNxGeycqHxL9bzEkXpMAqPA==","signatures":[{"sig":"MEUCIEzP0/DcyRIdT91HrvUT1o/vrd1dqgCD1g3WAPXAXB2aAiEA5AyQMtzwk36x9/BdRtFd+D5XCO7GqbF4C7Stiu0q6ps=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":17546},"main":"./dist/index.js","type":"module","_from":"file:crabnebula-better-auth-license-0.0.6.tgz","types":"./dist/index.d.ts","engines":{"node":">=18.0.0"},"exports":{".":{"types":"./dist/index.d.ts","default":"./dist/index.js"}},"scripts":{"test":"vitest","build":"tsdown","prebuild":"rm -rf dist"},"_npmUser":{"name":"crabnebula-npm","email":"npm-admin@crabnebula.dev"},"_resolved":"/tmp/7c10a5cc7b8d08b1a371717cf11ee0ca/crabnebula-better-auth-license-0.0.6.tgz","_integrity":"sha512-GhIuNwRFLMmtKrFeEPmHLac5w6A9JuXMnvfBrzXN1ZlIpdAvc/9TTDOAzbCdhwlfNxGeycqHxL9bzEkXpMAqPA==","repository":{"url":"git+https://github.com/crabnebula-dev/better-auth-license.git","type":"git"},"_npmVersion":"11.6.1","description":"Better Auth plugin for license key validation and management.","directories":{},"_nodeVersion":"24.11.0","dependencies":{"zod":"^4.1.12","jose":"^6.1.0","@noble/ciphers":"^2.0.1"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsdown":"^0.15.12","vitest":"^4.0.7","typescript":"^5.9.3","vite-tsconfig-paths":"^5.1.4","@better-auth-kit/tests":"^0.2.0"},"peerDependencies":{"better-auth":"^1.3.4","@better-auth/utils":"^0.3.0"},"_npmOperationalInternal":{"tmp":"tmp/better-auth-license_0.0.6_1762374185295_0.3049392652187435","host":"s3://npm-registry-packages-npm-production"}},"0.0.7":{"name":"@crabnebula/better-auth-license","version":"0.0.7","keywords":["better-auth","license","plugin","authentication","typescript","desktop","validation","esm"],"author":{"name":"CrabNebula","email":"hello@crabnebula.dev"},"license":"Apache-2.0 OR MIT","_id":"@crabnebula/better-auth-license@0.0.7","maintainers":[{"name":"crabnebula-npm","email":"npm-admin@crabnebula.dev"},{"name":"lucasfernog-crabnebula","email":"lucas@crabnebula.dev"}],"homepage":"https://github.com/crabnebula-dev/better-auth-license#readme","bugs":{"url":"https://github.com/crabnebula-dev/better-auth-license/issues"},"dist":{"shasum":"eb2db6c6e70847c65f12db9a24cb7d012e262b08","tarball":"https://registry.npmjs.org/@crabnebula/better-auth-license/-/better-auth-license-0.0.7.tgz","fileCount":7,"integrity":"sha512-4NLWjGkTMkIDBIhMbbELaUE5hMVXVwpTGed0JALAil8pOAAn8W7DNGAdXmPWC7EFMm4LWDQ51UXJivyn7TTN1A==","signatures":[{"sig":"MEYCIQCvFYNlqqMLgTyqYbt8rMCWjoLBTimjVEs/2q1dY9rvygIhAN0WaN30dHImQk3MmDSAPFF2dUwagsGhQc9fk+Psg5wF","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":68757},"main":"./dist/index.mjs","type":"module","_from":"file:crabnebula-better-auth-license-0.0.7.tgz","types":"./dist/index.d.mts","engines":{"node":">=18.0.0"},"exports":{".":{"types":"./dist/index.d.mts","default":"./dist/index.mjs"}},"scripts":{"test":"vitest","build":"tsdown","prebuild":"rm -rf dist"},"_npmUser":{"name":"crabnebula-npm","email":"npm-admin@crabnebula.dev"},"_resolved":"/tmp/9558da6155866af1d97f3e478d16dbf5/crabnebula-better-auth-license-0.0.7.tgz","_integrity":"sha512-4NLWjGkTMkIDBIhMbbELaUE5hMVXVwpTGed0JALAil8pOAAn8W7DNGAdXmPWC7EFMm4LWDQ51UXJivyn7TTN1A==","repository":{"url":"git+https://github.com/crabnebula-dev/better-auth-license.git","type":"git"},"_npmVersion":"11.6.1","description":"Better Auth plugin for license key validation and management.","directories":{},"_nodeVersion":"24.11.0","dependencies":{"zod":"^4.1.12","jose":"^6.1.0","@noble/ciphers":"^2.0.1"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsdown":"^0.15.12","vitest":"^4.0.7","typescript":"^5.9.3","vite-tsconfig-paths":"^5.1.4","@better-auth-kit/tests":"^0.2.0"},"peerDependencies":{"better-auth":"^1.3.4","@better-auth/utils":"^0.3.0"},"_npmOperationalInternal":{"tmp":"tmp/better-auth-license_0.0.7_1762375198751_0.6640909886549733","host":"s3://npm-registry-packages-npm-production"}},"0.0.8":{"name":"@crabnebula/better-auth-license","version":"0.0.8","keywords":["better-auth","license","plugin","authentication","typescript","desktop","validation","esm"],"author":{"name":"CrabNebula","email":"hello@crabnebula.dev"},"license":"Apache-2.0 OR MIT","_id":"@crabnebula/better-auth-license@0.0.8","maintainers":[{"name":"crabnebula-npm","email":"npm-admin@crabnebula.dev"},{"name":"lucasfernog-crabnebula","email":"lucas@crabnebula.dev"}],"homepage":"https://github.com/crabnebula-dev/better-auth-license#readme","bugs":{"url":"https://github.com/crabnebula-dev/better-auth-license/issues"},"dist":{"shasum":"354db7ecf49367c5bb1a41e869da3c3aea01196f","tarball":"https://registry.npmjs.org/@crabnebula/better-auth-license/-/better-auth-license-0.0.8.tgz","fileCount":7,"integrity":"sha512-af9oCwMbfrzSxVOZ1d9pfbf+jUwYdHpUKFVH/0fR0djD5V1G/tIQKHTG4iRmL6HGKTGZRODqFmKTyjCRR/xJTA==","signatures":[{"sig":"MEUCIQCeGClDMZnuhOrZ7iy0cXc+HDBnBLCDDLH6586qQGIpaAIgB9boL/IU7t1+j/paD9y58jH/CN1ZlncfiEOBPv/V4rQ=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":72556},"main":"./dist/index.mjs","type":"module","_from":"file:crabnebula-better-auth-license-0.0.8.tgz","types":"./dist/index.d.mts","engines":{"node":">=18.0.0"},"exports":{".":{"types":"./dist/index.d.mts","default":"./dist/index.mjs"}},"scripts":{"test":"vitest","build":"tsdown","prebuild":"rm -rf dist"},"_npmUser":{"name":"crabnebula-npm","email":"npm-admin@crabnebula.dev"},"_resolved":"/tmp/bfa80a35b5b757f6d36234193ed6c6fe/crabnebula-better-auth-license-0.0.8.tgz","_integrity":"sha512-af9oCwMbfrzSxVOZ1d9pfbf+jUwYdHpUKFVH/0fR0djD5V1G/tIQKHTG4iRmL6HGKTGZRODqFmKTyjCRR/xJTA==","repository":{"url":"git+https://github.com/crabnebula-dev/better-auth-license.git","type":"git"},"_npmVersion":"11.6.1","description":"Better Auth plugin for license key validation and management.","directories":{},"_nodeVersion":"24.11.0","dependencies":{"zod":"^4.1.12","jose":"^6.1.0","@noble/ciphers":"^2.0.1"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsdown":"^0.15.12","vitest":"^4.0.7","typescript":"^5.9.3","vite-tsconfig-paths":"^5.1.4","@better-auth-kit/tests":"^0.2.0"},"peerDependencies":{"better-auth":"^1.3.4","@better-auth/utils":"^0.3.0"},"_npmOperationalInternal":{"tmp":"tmp/better-auth-license_0.0.8_1762885044485_0.5013289962687837","host":"s3://npm-registry-packages-npm-production"}},"0.0.9":{"name":"@crabnebula/better-auth-license","version":"0.0.9","keywords":["better-auth","license","plugin","authentication","typescript","desktop","validation","esm"],"author":{"name":"CrabNebula","email":"hello@crabnebula.dev"},"license":"Apache-2.0 OR MIT","_id":"@crabnebula/better-auth-license@0.0.9","maintainers":[{"name":"crabnebula-npm","email":"npm-admin@crabnebula.dev"},{"name":"lucasfernog-crabnebula","email":"lucas@crabnebula.dev"}],"homepage":"https://github.com/crabnebula-dev/better-auth-license#readme","bugs":{"url":"https://github.com/crabnebula-dev/better-auth-license/issues"},"dist":{"shasum":"0383e2fe6dc8d0c30986ff425ae02c7e60a37c4b","tarball":"https://registry.npmjs.org/@crabnebula/better-auth-license/-/better-auth-license-0.0.9.tgz","fileCount":7,"integrity":"sha512-GVWVV/nZy7LrfjVEGnRkGjl8A6E8zWXjZil1WI6gY8K2QLK2sjPU2EJnj7Lz6Ywfzf5cGtAS3/RslJ0YdrX64w==","signatures":[{"sig":"MEUCIQDamwqFcNDt+nz/1uMLR269I7rhznAkwrbDXO84ujuVtAIgaNqGaHte7El7gugXELs/kPn/S6uPk3356gvs1tmn4dE=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":75747},"main":"./dist/index.mjs","type":"module","_from":"file:crabnebula-better-auth-license-0.0.9.tgz","types":"./dist/index.d.mts","engines":{"node":">=18.0.0"},"exports":{".":{"types":"./dist/index.d.mts","default":"./dist/index.mjs"}},"scripts":{"test":"vitest","build":"tsdown","prebuild":"rm -rf dist"},"_npmUser":{"name":"crabnebula-npm","email":"npm-admin@crabnebula.dev"},"_resolved":"/tmp/4cad38e09081d53e5a3a3f06035e6a66/crabnebula-better-auth-license-0.0.9.tgz","_integrity":"sha512-GVWVV/nZy7LrfjVEGnRkGjl8A6E8zWXjZil1WI6gY8K2QLK2sjPU2EJnj7Lz6Ywfzf5cGtAS3/RslJ0YdrX64w==","repository":{"url":"git+https://github.com/crabnebula-dev/better-auth-license.git","type":"git"},"_npmVersion":"11.6.2","description":"Better Auth plugin for license key validation and management.","directories":{},"_nodeVersion":"24.11.1","dependencies":{"zod":"^4.1.12","jose":"^6.1.1","@noble/ciphers":"^2.0.1"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsdown":"^0.16.1","vitest":"^4.0.8","typescript":"^5.9.3","vite-tsconfig-paths":"^5.1.4","@better-auth-kit/tests":"^0.2.0"},"peerDependencies":{"better-auth":"^1.3.4","@better-auth/utils":"^0.3.0"},"_npmOperationalInternal":{"tmp":"tmp/better-auth-license_0.0.9_1763147728997_0.09577222117326745","host":"s3://npm-registry-packages-npm-production"}},"0.0.10":{"name":"@crabnebula/better-auth-license","version":"0.0.10","keywords":["better-auth","license","plugin","authentication","typescript","desktop","validation","esm"],"author":{"name":"CrabNebula","email":"hello@crabnebula.dev"},"license":"Apache-2.0 OR MIT","_id":"@crabnebula/better-auth-license@0.0.10","maintainers":[{"name":"crabnebula-npm","email":"npm-admin@crabnebula.dev"},{"name":"lucasfernog-crabnebula","email":"lucas@crabnebula.dev"}],"homepage":"https://github.com/crabnebula-dev/better-auth-license#readme","bugs":{"url":"https://github.com/crabnebula-dev/better-auth-license/issues"},"dist":{"shasum":"68ae13df34e51f2c7aff0a3b978571620006153c","tarball":"https://registry.npmjs.org/@crabnebula/better-auth-license/-/better-auth-license-0.0.10.tgz","fileCount":7,"integrity":"sha512-UrkqxbvNh9xXlg0uh/rePoyUg0PCipqX81EpXmYVR7gs7g3DxMZ5zRR99/PnzgHSJhdhUZgOncvYOtYVGTwRtA==","signatures":[{"sig":"MEUCIQCl8Ps/Ps9ywH3D/w4fnH3mQuFljKaW5T/5tn8bh6AMlQIgZZeUsnAKCUrvlYd+MmOeuFUJXpK3uvCRdBVfdT+IlLs=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":76279},"main":"./dist/index.mjs","type":"module","_from":"file:crabnebula-better-auth-license-0.0.10.tgz","types":"./dist/index.d.mts","engines":{"node":">=18.0.0"},"exports":{".":{"types":"./dist/index.d.mts","default":"./dist/index.mjs"}},"scripts":{"test":"vitest","build":"tsdown","prebuild":"rm -rf dist"},"_npmUser":{"name":"crabnebula-npm","email":"npm-admin@crabnebula.dev"},"_resolved":"/tmp/a486b59066cb68b401e257379feac251/crabnebula-better-auth-license-0.0.10.tgz","_integrity":"sha512-UrkqxbvNh9xXlg0uh/rePoyUg0PCipqX81EpXmYVR7gs7g3DxMZ5zRR99/PnzgHSJhdhUZgOncvYOtYVGTwRtA==","repository":{"url":"git+https://github.com/crabnebula-dev/better-auth-license.git","type":"git"},"_npmVersion":"11.6.2","description":"Better Auth plugin for license key validation and management.","directories":{},"_nodeVersion":"24.11.1","dependencies":{"zod":"^4.1.12","jose":"^6.1.1","@noble/ciphers":"^2.0.1"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsdown":"^0.16.1","vitest":"^4.0.8","typescript":"^5.9.3","vite-tsconfig-paths":"^5.1.4","@better-auth-kit/tests":"^0.2.0"},"peerDependencies":{"better-auth":"^1.3.4","@better-auth/utils":"^0.3.0"},"_npmOperationalInternal":{"tmp":"tmp/better-auth-license_0.0.10_1763391111660_0.7697386023189408","host":"s3://npm-registry-packages-npm-production"}},"0.0.11":{"name":"@crabnebula/better-auth-license","version":"0.0.11","keywords":["better-auth","license","plugin","authentication","typescript","desktop","validation","esm"],"author":{"name":"CrabNebula","email":"hello@crabnebula.dev"},"license":"Apache-2.0 OR MIT","_id":"@crabnebula/better-auth-license@0.0.11","maintainers":[{"name":"crabnebula-npm","email":"npm-admin@crabnebula.dev"},{"name":"lucasfernog-crabnebula","email":"lucas@crabnebula.dev"}],"homepage":"https://github.com/crabnebula-dev/better-auth-license#readme","bugs":{"url":"https://github.com/crabnebula-dev/better-auth-license/issues"},"dist":{"shasum":"e76e1a0ba0f247f2db1a663831649e9f872f7cff","tarball":"https://registry.npmjs.org/@crabnebula/better-auth-license/-/better-auth-license-0.0.11.tgz","fileCount":7,"integrity":"sha512-lNy0GDs2yKtOekZK/lqVeJH8OTd4xU7YWAHDRpdqUm8fP8H0YtGx3rbUzsYRV6GmWVi9hW7qoX3JE1x0zKC+MA==","signatures":[{"sig":"MEUCIQCo7BX0wxaG4asdO39GblDKIH/q/z5S1E00sVAsDdyn6gIgf8JOdXbj/Iq+tN6QVr+0Rh3Uvy5olWE/X7ediEmWtsU=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":76636},"main":"./dist/index.mjs","type":"module","_from":"file:crabnebula-better-auth-license-0.0.11.tgz","types":"./dist/index.d.mts","engines":{"node":">=18.0.0"},"exports":{".":{"types":"./dist/index.d.mts","default":"./dist/index.mjs"}},"scripts":{"test":"vitest","build":"tsdown","prebuild":"rm -rf dist"},"_npmUser":{"name":"crabnebula-npm","email":"npm-admin@crabnebula.dev"},"_resolved":"/tmp/6f5232bcaa5134fd9bb7c827a704d95c/crabnebula-better-auth-license-0.0.11.tgz","_integrity":"sha512-lNy0GDs2yKtOekZK/lqVeJH8OTd4xU7YWAHDRpdqUm8fP8H0YtGx3rbUzsYRV6GmWVi9hW7qoX3JE1x0zKC+MA==","repository":{"url":"git+https://github.com/crabnebula-dev/better-auth-license.git","type":"git"},"_npmVersion":"11.6.2","description":"Better Auth plugin for license key validation and management.","directories":{},"_nodeVersion":"24.11.1","dependencies":{"zod":"^4.1.12","jose":"^6.1.1","@noble/ciphers":"^2.0.1"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsdown":"^0.16.1","vitest":"^4.0.8","typescript":"^5.9.3","vite-tsconfig-paths":"^5.1.4","@better-auth-kit/tests":"^0.2.0"},"peerDependencies":{"better-auth":"^1.3.4","@better-auth/utils":"^0.3.0"},"_npmOperationalInternal":{"tmp":"tmp/better-auth-license_0.0.11_1763391746283_0.4738157147356197","host":"s3://npm-registry-packages-npm-production"}},"0.0.12":{"name":"@crabnebula/better-auth-license","version":"0.0.12","keywords":["better-auth","license","plugin","authentication","typescript","desktop","validation","esm"],"author":{"name":"CrabNebula","email":"hello@crabnebula.dev"},"license":"Apache-2.0 OR MIT","_id":"@crabnebula/better-auth-license@0.0.12","maintainers":[{"name":"crabnebula-npm","email":"npm-admin@crabnebula.dev"},{"name":"lucasfernog-crabnebula","email":"lucas@crabnebula.dev"}],"homepage":"https://github.com/crabnebula-dev/better-auth-license#readme","bugs":{"url":"https://github.com/crabnebula-dev/better-auth-license/issues"},"dist":{"shasum":"352df3a5c3f94552f92b387f1db5aa72f0228129","tarball":"https://registry.npmjs.org/@crabnebula/better-auth-license/-/better-auth-license-0.0.12.tgz","fileCount":7,"integrity":"sha512-V5KHvqvL1o/SAvh6v9WthEzKch/Niqh5dcUWsCHNchWEqdli1JOvmIVgixwSrN2yaKUKpWkoj/mfkWty48zNyw==","signatures":[{"sig":"MEUCIEHiOOHq4/16ZSaRYAUBno19TSqw7YCqe0DuGfmk3VdWAiEAiE2HM62pugwl3YdmgwyJvLN53/fW6leY923HKexT0h0=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":77489},"main":"./dist/index.mjs","type":"module","_from":"file:crabnebula-better-auth-license-0.0.12.tgz","types":"./dist/index.d.mts","engines":{"node":">=18.0.0"},"exports":{".":{"types":"./dist/index.d.mts","default":"./dist/index.mjs"}},"scripts":{"test":"vitest","build":"tsdown","prebuild":"rm -rf dist"},"_npmUser":{"name":"crabnebula-npm","email":"npm-admin@crabnebula.dev"},"_resolved":"/tmp/ec1ea1d853e6234d07e21f92af778b4d/crabnebula-better-auth-license-0.0.12.tgz","_integrity":"sha512-V5KHvqvL1o/SAvh6v9WthEzKch/Niqh5dcUWsCHNchWEqdli1JOvmIVgixwSrN2yaKUKpWkoj/mfkWty48zNyw==","repository":{"url":"git+https://github.com/crabnebula-dev/better-auth-license.git","type":"git"},"_npmVersion":"11.6.2","description":"Better Auth plugin for license key validation and management.","directories":{},"_nodeVersion":"24.11.1","dependencies":{"zod":"^4.1.12","jose":"^6.1.1","@noble/ciphers":"^2.0.1"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsdown":"^0.16.1","vitest":"^4.0.8","typescript":"^5.9.3","vite-tsconfig-paths":"^5.1.4","@better-auth-kit/tests":"^0.2.0"},"peerDependencies":{"better-auth":"^1.3.4","@better-auth/utils":"^0.3.0"},"_npmOperationalInternal":{"tmp":"tmp/better-auth-license_0.0.12_1763393666306_0.3100508188723261","host":"s3://npm-registry-packages-npm-production"}},"0.0.13":{"name":"@crabnebula/better-auth-license","version":"0.0.13","keywords":["better-auth","license","plugin","authentication","typescript","desktop","validation","esm"],"author":{"name":"CrabNebula","email":"hello@crabnebula.dev"},"license":"Apache-2.0 OR MIT","_id":"@crabnebula/better-auth-license@0.0.13","maintainers":[{"name":"crabnebula-npm","email":"npm-admin@crabnebula.dev"},{"name":"lucasfernog-crabnebula","email":"lucas@crabnebula.dev"}],"homepage":"https://github.com/crabnebula-dev/better-auth-license#readme","bugs":{"url":"https://github.com/crabnebula-dev/better-auth-license/issues"},"dist":{"shasum":"ecb3f1d7ad2b7b8c77ded61dff3a274ff916d3c3","tarball":"https://registry.npmjs.org/@crabnebula/better-auth-license/-/better-auth-license-0.0.13.tgz","fileCount":7,"integrity":"sha512-PKSdeP2dClBtUF41vYm29D2mczzTXtYS8jMdWV8rI1+iH95MDCIlhk1JbDI+n4hkgAlQ0NlCQZ7nInfIzEI3hQ==","signatures":[{"sig":"MEUCIQDFhxkl2awtKRcqDor6vvBkv4wWENGouZyWKQqHACXA1gIgXuvEDDjfMrOdCUS9Yev36lAxoey6RV+JfQbP4Fa8b1Y=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":77818},"main":"./dist/index.mjs","type":"module","_from":"file:crabnebula-better-auth-license-0.0.13.tgz","types":"./dist/index.d.mts","engines":{"node":">=18.0.0"},"exports":{".":{"types":"./dist/index.d.mts","default":"./dist/index.mjs"}},"scripts":{"test":"vitest","build":"tsdown","prebuild":"rm -rf dist"},"_npmUser":{"name":"crabnebula-npm","email":"npm-admin@crabnebula.dev"},"_resolved":"/tmp/f219aea0d3e829395b4ef0d3c0cff62c/crabnebula-better-auth-license-0.0.13.tgz","_integrity":"sha512-PKSdeP2dClBtUF41vYm29D2mczzTXtYS8jMdWV8rI1+iH95MDCIlhk1JbDI+n4hkgAlQ0NlCQZ7nInfIzEI3hQ==","repository":{"url":"git+https://github.com/crabnebula-dev/better-auth-license.git","type":"git"},"_npmVersion":"11.6.2","description":"Better Auth plugin for license key validation and management.","directories":{},"_nodeVersion":"24.11.1","dependencies":{"zod":"^4.1.12","jose":"^6.1.1","@noble/ciphers":"^2.0.1"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsdown":"^0.16.1","vitest":"^4.0.8","typescript":"^5.9.3","vite-tsconfig-paths":"^5.1.4","@better-auth-kit/tests":"^0.2.0"},"peerDependencies":{"better-auth":"^1.3.4","@better-auth/utils":"^0.3.0"},"_npmOperationalInternal":{"tmp":"tmp/better-auth-license_0.0.13_1764081393186_0.6937220293976964","host":"s3://npm-registry-packages-npm-production"}},"0.0.14":{"name":"@crabnebula/better-auth-license","version":"0.0.14","keywords":["better-auth","license","plugin","authentication","typescript","desktop","validation","esm"],"author":{"name":"CrabNebula","email":"hello@crabnebula.dev"},"license":"Apache-2.0 OR MIT","_id":"@crabnebula/better-auth-license@0.0.14","maintainers":[{"name":"crabnebula-npm","email":"npm-admin@crabnebula.dev"},{"name":"lucasfernog-crabnebula","email":"lucas@crabnebula.dev"}],"homepage":"https://github.com/crabnebula-dev/better-auth-license#readme","bugs":{"url":"https://github.com/crabnebula-dev/better-auth-license/issues"},"dist":{"shasum":"d8788175f585560ba2c12eb1f9ba8922f27aa7f0","tarball":"https://registry.npmjs.org/@crabnebula/better-auth-license/-/better-auth-license-0.0.14.tgz","fileCount":7,"integrity":"sha512-mDn6GorIEWlLN2+N3xTXsK7gswkVP0DXA78zvQjMNdE+qTyvUP5T1Apg3JRUL1I+n7tmdh3FNlSifNKBJBTMCw==","signatures":[{"sig":"MEYCIQDCN82J4HDLX/pB79s+VV1GZcVnMUIqmSXNkkEYl+c30QIhAL5nd/wWprae8m1MPDQkQfxa/CTHla1c87Oon8yqQVA5","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":73279},"main":"./dist/index.mjs","type":"module","_from":"file:crabnebula-better-auth-license-0.0.14.tgz","types":"./dist/index.d.mts","engines":{"node":">=18.0.0"},"exports":{".":{"types":"./dist/index.d.mts","default":"./dist/index.mjs"}},"scripts":{"test":"vitest","build":"tsdown","prebuild":"rm -rf dist"},"_npmUser":{"name":"crabnebula-npm","email":"npm-admin@crabnebula.dev"},"_resolved":"/tmp/3f596184ced42faf714244d4608b9ca2/crabnebula-better-auth-license-0.0.14.tgz","_integrity":"sha512-mDn6GorIEWlLN2+N3xTXsK7gswkVP0DXA78zvQjMNdE+qTyvUP5T1Apg3JRUL1I+n7tmdh3FNlSifNKBJBTMCw==","repository":{"url":"git+https://github.com/crabnebula-dev/better-auth-license.git","type":"git"},"_npmVersion":"11.6.2","description":"Better Auth plugin for license key validation and management.","directories":{},"_nodeVersion":"24.11.1","dependencies":{"zod":"^4.1.12","jose":"^6.1.1","@noble/ciphers":"^2.0.1"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsdown":"^0.16.1","vitest":"^4.0.8","typescript":"^5.9.3","vite-tsconfig-paths":"^5.1.4","@better-auth-kit/tests":"^0.2.0"},"peerDependencies":{"better-auth":"^1","@better-auth/utils":"^0.3"},"_npmOperationalInternal":{"tmp":"tmp/better-auth-license_0.0.14_1764185689356_0.3766108658408376","host":"s3://npm-registry-packages-npm-production"}},"0.0.15":{"name":"@crabnebula/better-auth-license","version":"0.0.15","keywords":["better-auth","license","plugin","authentication","typescript","desktop","validation","esm"],"author":{"name":"CrabNebula","email":"hello@crabnebula.dev"},"license":"Apache-2.0 OR MIT","_id":"@crabnebula/better-auth-license@0.0.15","maintainers":[{"name":"crabnebula-npm","email":"npm-admin@crabnebula.dev"},{"name":"lucasfernog-crabnebula","email":"lucas@crabnebula.dev"}],"homepage":"https://github.com/crabnebula-dev/better-auth-license#readme","bugs":{"url":"https://github.com/crabnebula-dev/better-auth-license/issues"},"dist":{"shasum":"4a817341f2213bcf24299130de0e531a7fe476e0","tarball":"https://registry.npmjs.org/@crabnebula/better-auth-license/-/better-auth-license-0.0.15.tgz","fileCount":7,"integrity":"sha512-bQyy855SSI0wC1BqYfWrLJUUkXsN1sXc6abONT0rnjTMvxAgjwNUEVBRrA3b0wMPiaV5tojpi6IZI7DQVIex4g==","signatures":[{"sig":"MEQCIB2GJzNiBUSPRdVo37gnlVR2eOKKQ57YqZl2GZSNV2I4AiBxw/10gK4N4vtl4wzz9LvbY7ZA0/LWPavxgexob+dJYA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":74200},"main":"./dist/index.mjs","type":"module","_from":"file:crabnebula-better-auth-license-0.0.15.tgz","types":"./dist/index.d.mts","engines":{"node":">=18.0.0"},"exports":{".":{"types":"./dist/index.d.mts","default":"./dist/index.mjs"}},"scripts":{"test":"vitest","build":"tsdown","prebuild":"rm -rf dist"},"_npmUser":{"name":"crabnebula-npm","email":"npm-admin@crabnebula.dev"},"_resolved":"/tmp/0d0052e19d433091c0d4d957051344bf/crabnebula-better-auth-license-0.0.15.tgz","_integrity":"sha512-bQyy855SSI0wC1BqYfWrLJUUkXsN1sXc6abONT0rnjTMvxAgjwNUEVBRrA3b0wMPiaV5tojpi6IZI7DQVIex4g==","repository":{"url":"git+https://github.com/crabnebula-dev/better-auth-license.git","type":"git"},"_npmVersion":"11.6.2","description":"Better Auth plugin for license key validation and management.","directories":{},"_nodeVersion":"24.11.1","dependencies":{"zod":"^4.1.12","jose":"^6.1.1","@noble/ciphers":"^2.0.1"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsdown":"^0.16.1","vitest":"^4.0.8","typescript":"^5.9.3","vite-tsconfig-paths":"^5.1.4","@better-auth-kit/tests":"^0.2.0"},"peerDependencies":{"better-auth":"^1","@better-auth/utils":"^0.3"},"_npmOperationalInternal":{"tmp":"tmp/better-auth-license_0.0.15_1764190264162_0.9182090241331895","host":"s3://npm-registry-packages-npm-production"}},"0.0.16":{"name":"@crabnebula/better-auth-license","version":"0.0.16","description":"Better Auth plugin for license key validation and management.","author":{"name":"CrabNebula","email":"hello@crabnebula.dev"},"license":"Apache-2.0 OR MIT","homepage":"https://github.com/crabnebula-dev/better-auth-license#readme","repository":{"type":"git","url":"git+https://github.com/crabnebula-dev/better-auth-license.git"},"bugs":{"url":"https://github.com/crabnebula-dev/better-auth-license/issues"},"keywords":["better-auth","license","plugin","authentication","typescript","desktop","validation","esm"],"main":"./dist/index.mjs","types":"./dist/index.d.mts","exports":{".":{"types":"./dist/index.d.mts","default":"./dist/index.mjs"}},"engines":{"node":">=18.0.0"},"type":"module","peerDependencies":{"@better-auth/utils":"^0.3","better-auth":"^1"},"dependencies":{"@noble/ciphers":"^2.0.1","jose":"^6.1.1","zod":"^4.1.12"},"devDependencies":{"@better-auth-kit/tests":"^0.2.0","tsdown":"^0.16.1","typescript":"^5.9.3","vite-tsconfig-paths":"^5.1.4","vitest":"^4.0.8"},"publishConfig":{"access":"public"},"scripts":{"build":"tsdown","test":"vitest","prebuild":"rm -rf dist"},"_id":"@crabnebula/better-auth-license@0.0.16","_integrity":"sha512-v+qqQxFnrczSYbkUZGUFmx3bmhlzR4VQ2aqWUjV+jipJC1r1Hm4VdOZ4XHUcvAwVD8N7mzmrTja6Z7mzaAhowg==","_resolved":"/tmp/65ab4c43b413da9185365c9f154a62ea/crabnebula-better-auth-license-0.0.16.tgz","_from":"file:crabnebula-better-auth-license-0.0.16.tgz","_nodeVersion":"24.11.1","_npmVersion":"11.6.2","dist":{"integrity":"sha512-v+qqQxFnrczSYbkUZGUFmx3bmhlzR4VQ2aqWUjV+jipJC1r1Hm4VdOZ4XHUcvAwVD8N7mzmrTja6Z7mzaAhowg==","shasum":"0ed65a9c7475c6e156fb1de1f6fd5197c90e9b71","tarball":"https://registry.npmjs.org/@crabnebula/better-auth-license/-/better-auth-license-0.0.16.tgz","fileCount":7,"unpackedSize":75829,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEUCIGJHYFUnMLyS/57p89wM3FGiS0xK091fK0Ng/nbCi/kvAiEAotAArIl2Dlpob63B5vdpqUZkaAvADRcDPCl3O3rh/e4="}]},"_npmUser":{"name":"crabnebula-npm","email":"npm-admin@crabnebula.dev"},"directories":{},"maintainers":[{"name":"crabnebula-npm","email":"npm-admin@crabnebula.dev"},{"name":"lucasfernog-crabnebula","email":"lucas@crabnebula.dev"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/better-auth-license_0.0.16_1764276562971_0.376073855523126"},"_hasShrinkwrap":false}},"time":{"created":"2025-11-04T16:33:30.732Z","modified":"2025-11-27T20:49:23.392Z","0.0.1":"2025-11-04T16:33:30.981Z","0.0.2":"2025-11-04T16:51:18.072Z","0.0.3":"2025-11-04T17:54:55.629Z","0.0.5":"2025-11-05T17:45:12.968Z","0.0.6":"2025-11-05T20:23:05.478Z","0.0.7":"2025-11-05T20:39:58.929Z","0.0.8":"2025-11-11T18:17:24.896Z","0.0.9":"2025-11-14T19:15:29.257Z","0.0.10":"2025-11-17T14:51:51.870Z","0.0.11":"2025-11-17T15:02:26.477Z","0.0.12":"2025-11-17T15:34:26.570Z","0.0.13":"2025-11-25T14:36:33.360Z","0.0.14":"2025-11-26T19:34:49.557Z","0.0.15":"2025-11-26T20:51:04.394Z","0.0.16":"2025-11-27T20:49:23.159Z"},"bugs":{"url":"https://github.com/crabnebula-dev/better-auth-license/issues"},"author":{"name":"CrabNebula","email":"hello@crabnebula.dev"},"license":"Apache-2.0 OR MIT","homepage":"https://github.com/crabnebula-dev/better-auth-license#readme","keywords":["better-auth","license","plugin","authentication","typescript","desktop","validation","esm"],"repository":{"type":"git","url":"git+https://github.com/crabnebula-dev/better-auth-license.git"},"description":"Better Auth plugin for license key validation and management.","maintainers":[{"name":"crabnebula-npm","email":"npm-admin@crabnebula.dev"},{"name":"lucasfernog-crabnebula","email":"lucas@crabnebula.dev"}],"readme":"# Better Auth License Plugin\n\nThis plugin adds device-bound licensing to [Better Auth](https://www.better-auth.com), enabling cryptographically secure activation flows and offline-verifiable JWT validation for desktop, mobile, and native applications.\n\nIt implements a hardened licensing pipeline based on ephemeral nonces, rotating JWK signature keys, and mandatory device-side public-key encryption. \n\nThe server issues, validates, and revokes licenses tied to an individual device keypair, ensuring tokens cannot be replayed, copied, or reused on other machines.\n\n---\n\n## Installation\n\n```bash\n# Using npm\nnpm install better-auth @crabnebula/better-auth-license\n\n# Using yarn\nyarn add better-auth @crabnebula/better-auth-license\n\n# Using pnpm\npnpm add better-auth @crabnebula/better-auth-license\n\n# Using bun\nbun add better-auth @crabnebula/better-auth-license\n```\n\n---\n\n## Overview\n\nThe plugin implements:\n\n- Device-bound activation using a one-time nonce\n- Mandatory device public key for all encrypted responses\n- All server -> client responses delivered as JWE encrypted with the device public key\n- Issuing a new nonce invalidates previous JWTs\n- Revocation and expiration enforcement on every request\n- Optional offline JWT verification using the `/license/jwks` public keys\n\n---\n\n## Basic Usage\n\n### Add the Plugin to Better Auth\n\n```typescript\n// auth.ts\nimport { betterAuth } from \"better-auth\";\nimport { license } from \"@crabnebula/better-auth-license\";\n\nexport const auth = betterAuth({\n  baseURL: \"https://license.yourapp.com\",\n  plugins: [\n    license({\n      middleware: {\n        header: \"X-License\",\n        matcher: req => req.path === \"/get-session\",\n      },\n      jwt: {\n        expirationTime: \"1d\",\n        issuer: \"yourapp\",\n      },\n      nonce: {\n        expirationTime: \"5m\",\n      },\n    }),\n  ],\n});\n```\n\n---\n\n### Endpoints\n\n| Endpoint | Method | Description |\n|-----------|---------|-------------|\n| `/license/nonce` | `POST` | Requests a one-time nonce to start activation |\n| `/license/exchange` | `POST` | Exchanges nonce + device ID for a signed JWT |\n| `/license/list` | `GET` | Lists all user-owned licenses |\n| `/license/revoke` | `POST` | Revokes a specific license |\n| `/license/jwks` | `GET` | List the server JWKS used to verify JWT signatures and encryptions |\n\nAll responses from `/license/nonce` and `/license/exchange` are JWE payloads encrypted with the provided device public key.\n\n---\n\n### Activation Flow\n\n#### Fetch server JWKS\n\nClient retrieves the encryption and signature public keys:\n\n```\nGET /license/jwks\n```\n\nResponse:\n\n```\n{\n  \"keys\": [\n    { \"use\": \"enc\", \"alg\": \"ECDH-ES+A256KW\", ... },\n    { \"use\": \"sig\", \"alg\": \"EdDSA\", ... }\n  ]\n}\n```\n\nClient extracts the `enc` key and uses it for encrypting payloads.\n\n#### Generate device keypair\n\nClient creates an X25519 keypair:\n\n```\nprivateKey (stored locally)\npublicKey  (sent to server)\n```\n\nStore both keys in a secure local vault (Keychain/Keyring/Windows DPAPI).\n\n#### Request nonce\n\nClient encrypts the JSON payload using the server `enc` JWK, producing JWE_STRING:\n\n```json\n{\n  \"licenseKey\": \"XXXX-XXXX-XXXX\",\n  \"devicePublicKey\": \"<base64url(public JWK)>\"\n}\n```\n\nServer expects :\n\n```json\nPOST /license/nonce\n\n{\n  \"payload\": \"<compact JWE string>\"\n}\n```\n\nServer returns:\n\n```json\n{\n  \"encrypted\": true,\n  \"payload\": \"<JWE encrypted with devicePublicKey>\"\n}\n```\n\nClient decrypts using the device private key. The decrypted response contains:\n\n```json\n{ \"nonce\": \"<value>\" }\n```\n\n#### Exchange nonce for JWT\n\nClient again encrypts:\n\n```json\n{\n  \"licenseKey\": \"XXXX-XXXX-XXXX\",\n  \"devicePublicKey\": \"<base64url(JSON(public JWK))>\",\n  \"nonce\": \"<value-received-previously>\"\n}\n```\n\nServer expects :\n\n```json\nPOST /license/exchange\n\n{\n  \"payload\": \"<compact JWE string>\"\n}\n```\n\nServer returns:\n\n```json\n{\n  \"encrypted\": true,\n  \"payload\": \"<JWE encrypted with devicePublicKey>\"\n}\n```\n\nClient decrypts with private key:\n\n```json\n{\n  \"success\": true,\n  \"jwt\": \"eyJhbGciOiJFZERTQSJ9....\",\n  \"license\": { \"key\": \"XXXX\", \"expiresAt\": 1761843168 },\n  \"device\": { \"publicKey\": \"<public JWK>\" }\n}\n```\n---\n\n### Using License Tokens With Middleware\n\nWhen the middleware is enabled, the server automatically validates license JWTs for matching routes.\n\nExample configuration:\n```ts\nlicense({\n  middleware: {\n    header: \"X-License-Token\",\n    matcher: req => req.path === \"/get-session\",\n  },\n})\n```\n\nWith this configuration:\n\n- `/get-session` accepts a license JWT and resolves the user who owns the license\n- The token is the JWT returned from `/license/exchange`\n\nExample Request\n```json\nGET /get-session\nX-License-Token: eyJhbGciOiJFZERTQSJ9...\n```\n\nIf the token is valid:\n\n```json\n{\n  \"user\": {\n    \"id\": \"2\",\n    \"email\": \"user@test.com\",\n    ...\n  }\n}\n```\n\nIf invalid, expired, or revoked:\n\n```json\n{\n  \"error\": {\n    \"status\": 401,\n    \"code\": \"invalid_license_token\"\n  }\n}\n```\n\nThis allows a device-bound license JWT to authenticate a route without traditional user login.\n\n---\n\n## Official Clients\n\n### Tauri\n\nA first-party Tauri plugin is available on crates.io:\n\n[![Crates.io Version](https://img.shields.io/crates/v/tauri-plugin-better-auth-license)](https://crates.io/crates/tauri-plugin-better-auth-license)\n\nIt provides:\n- Local X25519 keypair generation\n- Secure private-key storage using OS keyrings\n- Automatic JWE encryption/decryption for all requests\n- Local + remote JWT validation\n- Built-in device-bound activation flow\n\nThis is the recommended integration path for desktop applications built with Tauri.\n\n---\n\n## Security Model\n\n- Nonces are single-use and invalidate previous tokens.\n- Server -> client messages are always encrypted with the device public key.\n- JWTs are signed with rotating JWKs\n- A license cannot be reused on another device without invalidation\n- Offline verification using `/license/jwks` public key set\n- Middleware isolates license JWTs from user sessions\n\n## License\n\nMIT or MIT/Apache 2.0 where applicable.","readmeFilename":"README.md"}