{"_id":"@nostr-wot/identity","_rev":"6-43660ce476147afe9623e85a11a301fd","name":"@nostr-wot/identity","dist-tags":{"latest":"1.1.0","next":"1.1.0-next.2"},"versions":{"0.0.0-stage":{"name":"@nostr-wot/identity","version":"0.0.0-stage","_id":"@nostr-wot/identity@0.0.0-stage","stub":true,"maintainers":[{"name":"nostr-wot","email":"leon@nostr-wot.com"}],"dist":{"shasum":"3ffb2d293ba822b2d6ffe639033254d773cab30f","tarball":"https://registry.npmjs.org/@nostr-wot/identity/-/identity-0.0.0-stage.tgz","fileCount":2,"integrity":"sha512-DJsjgDpX/cD/XJKNFFe+8hUrkisQErNYtgjvDbgGFz2QwXHhyK+dhoKRSgaeKOrHpiiuDUvA1ucYSbC9A82dpQ==","signatures":[{"sig":"MEYCIQDwroGC7NL5gB6wwPGnrgTaV8rvvV2SvLAz9C92ZTRDDwIhANaXY4Bj4Bl+oVOMHnzVehAR9EJdjrBUZbySFkHYf5qw","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":341},"_npmUser":{"name":"nostr-wot","email":"leon@nostr-wot.com"},"description":"Temporary package placeholder for staged publishing","directories":{}},"1.0.0":{"name":"@nostr-wot/identity","version":"1.0.0","keywords":["nostr","vault","pbkdf2","aes-gcm","platform-neutral"],"author":{"name":"Leon Acosta","email":"leon@nostr-wot.com"},"license":"GPL-3.0-only","_id":"@nostr-wot/identity@1.0.0","maintainers":[{"name":"nostr-wot","email":"leon@nostr-wot.com"}],"homepage":"https://github.com/nostr-wot/nostr-wot-sdk/tree/main/packages/identity","bugs":{"url":"https://github.com/nostr-wot/nostr-wot-sdk/issues"},"dist":{"shasum":"b9dea4270a6ed52059fdb76c80dbc5b7750e26bf","tarball":"https://registry.npmjs.org/@nostr-wot/identity/-/identity-1.0.0.tgz","fileCount":43,"integrity":"sha512-/fob+C3L8KUihxl0seGBNXrNhg3ENzoN1btcslhXkxx6/HwUm/Mw+WsSwwCHn8XjEcaY7w8ax9V0AHZQrXTwgg==","signatures":[{"sig":"MEYCIQD/bzLocil8eUgfMjFPP54tqYZIkXyb3jCw+xGHKcekIgIhAJYGmgziVDqvbUiN+ElPPeHUfTz85dTWOJoHI3gAkWsu","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEUCIA7a85aoh0oWpxLDxYsl7dzvysBQL5I6d74sB4aeg9vKAiEA9oVx69g5/kpYGwN02Y8I5HVQIn+4hDPyYOmJ0i+DNKE=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@nostr-wot%2fidentity@1.0.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":1453895},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","exports":{".":{"import":{"types":"./dist/index.d.ts","default":"./dist/index.js"}},"./vault":{"import":{"types":"./dist/vault/index.d.ts","default":"./dist/vault/index.js"}},"./bunker":{"import":{"types":"./dist/bunker/index.d.ts","default":"./dist/bunker/index.js"}},"./signing":{"import":{"types":"./dist/signing/index.d.ts","default":"./dist/signing/index.js"}},"./accounts":{"import":{"types":"./dist/accounts/index.d.ts","default":"./dist/accounts/index.js"}},"./permissions":{"import":{"types":"./dist/permissions/index.d.ts","default":"./dist/permissions/index.js"}}},"gitHead":"a15c7d20203f873de455a6c9f69890c6993374fc","scripts":{"dev":"tsup --watch","test":"vitest run","build":"tsup && node ../../scripts/dist-stamp.mjs stamp","test:run":"vitest run","typecheck":"tsc --noEmit","check:dist":"node ../../scripts/dist-stamp.mjs check"},"_npmUser":{"name":"nostr-wot","email":"leon@nostr-wot.com"},"repository":{"url":"git+https://github.com/nostr-wot/nostr-wot-sdk.git","type":"git","directory":"packages/identity"},"_npmVersion":"11.19.0","description":"Accounts, encrypted vaults, passkeys, signing policies and remote signer hosting for Nostr.","directories":{},"sideEffects":false,"_nodeVersion":"24.21.0","dependencies":{"@scure/base":"^2.0.0","nostr-tools":"^2.24.1","@scure/bip32":"^2.0.1","@scure/bip39":"^2.0.1","@noble/curves":"^2.0.1","@noble/hashes":"^2.4.0","@nostr-wot/pq":"^1.0.0","nostr-wot-sdk":"^3.0.0","@noble/ciphers":"^2.1.1"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"devDependencies":{"ws":"^8.18.3","tsup":"^8.0.1","vitest":"^4.0.18","@types/ws":"^8.18.1","typescript":"^5.3.0","nostr-tools":"^2.24.1"},"peerDependencies":{},"_npmOperationalInternal":{"tmp":"tmp/identity_1.0.0_1792516826739_0.16785765401610409","host":"s3://npm-registry-packages-npm-production"}},"1.1.0-next.0":{"name":"@nostr-wot/identity","version":"1.1.0-next.0","keywords":["nostr","vault","pbkdf2","aes-gcm","platform-neutral"],"author":{"name":"Leon Acosta","email":"leon@nostr-wot.com"},"license":"GPL-3.0-only","_id":"@nostr-wot/identity@1.1.0-next.0","maintainers":[{"name":"nostr-wot","email":"leon@nostr-wot.com"}],"homepage":"https://github.com/nostr-wot/nostr-wot-sdk/tree/main/packages/identity","bugs":{"url":"https://github.com/nostr-wot/nostr-wot-sdk/issues"},"dist":{"shasum":"d592bcb8b53ef984cfc11174442747f0fdc4a08c","tarball":"https://registry.npmjs.org/@nostr-wot/identity/-/identity-1.1.0-next.0.tgz","fileCount":43,"integrity":"sha512-3p7/WmcKGin9KawSng1LxFLUaQwOL4xeZjK1NltqfUtStzE6+EbqM/kXLMQulRkFgfgAXjASqd8zxuK/eEgsMg==","signatures":[{"sig":"MEQCIDt/ZsQFPpwGW4ANlDUZZ3GCplePyIljPnqB1sI3+AcuAiBRBwmhvM/DJ3d4k9anU/j6SnN7G0CePhBwJaPX0ncJrg==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEUCIG4506FB0p+l8oJ5G9pZOR8Pmr0X49izxbm0yAWufdTRAiEA7NeSSBa0+GhnbOrI2E04VIEdsnKupl1D1HY4pFRLnkk=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@nostr-wot%2fidentity@1.1.0-next.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":1608822},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","exports":{".":{"import":{"types":"./dist/index.d.ts","default":"./dist/index.js"}},"./vault":{"import":{"types":"./dist/vault/index.d.ts","default":"./dist/vault/index.js"}},"./bunker":{"import":{"types":"./dist/bunker/index.d.ts","default":"./dist/bunker/index.js"}},"./signing":{"import":{"types":"./dist/signing/index.d.ts","default":"./dist/signing/index.js"}},"./accounts":{"import":{"types":"./dist/accounts/index.d.ts","default":"./dist/accounts/index.js"}},"./permissions":{"import":{"types":"./dist/permissions/index.d.ts","default":"./dist/permissions/index.js"}}},"gitHead":"18c4751fdc73746853bcedcf73d2e36b0b2be919","scripts":{"dev":"tsup --watch","test":"vitest run","build":"tsup && node ../../scripts/dist-stamp.mjs stamp","test:run":"vitest run","typecheck":"tsc --noEmit","check:dist":"node ../../scripts/dist-stamp.mjs check"},"_npmUser":{"name":"nostr-wot","email":"leon@nostr-wot.com"},"repository":{"url":"git+https://github.com/nostr-wot/nostr-wot-sdk.git","type":"git","directory":"packages/identity"},"_npmVersion":"11.19.0","description":"Accounts, encrypted vaults, passkeys, signing policies and remote signer hosting for Nostr.","directories":{},"sideEffects":false,"_nodeVersion":"24.21.0","dependencies":{"@scure/base":"^2.0.0","nostr-tools":"^2.24.1","@scure/bip32":"^2.0.1","@scure/bip39":"^2.0.1","@noble/curves":"^2.0.1","@noble/hashes":"^2.4.0","@nostr-wot/pq":"^1.0.0","nostr-wot-sdk":"^3.0.0","@noble/ciphers":"^2.1.1"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"ws":"^8.18.3","tsup":"^8.0.1","vitest":"^4.0.18","@types/ws":"^8.18.1","typescript":"^5.3.0","nostr-tools":"^2.24.1"},"peerDependencies":{},"_npmOperationalInternal":{"tmp":"tmp/identity_1.1.0-next.0_1792776998097_0.5263771318518609","host":"s3://npm-registry-packages-npm-production"}},"1.1.0-next.1":{"name":"@nostr-wot/identity","version":"1.1.0-next.1","keywords":["nostr","vault","pbkdf2","aes-gcm","platform-neutral"],"author":{"name":"Leon Acosta","email":"leon@nostr-wot.com"},"license":"GPL-3.0-only","_id":"@nostr-wot/identity@1.1.0-next.1","maintainers":[{"name":"nostr-wot","email":"leon@nostr-wot.com"}],"homepage":"https://github.com/nostr-wot/nostr-wot-sdk/tree/main/packages/identity","bugs":{"url":"https://github.com/nostr-wot/nostr-wot-sdk/issues"},"dist":{"shasum":"d9c7fc3cc94f34022a3ec0c02d167bf860a129f1","tarball":"https://registry.npmjs.org/@nostr-wot/identity/-/identity-1.1.0-next.1.tgz","fileCount":43,"integrity":"sha512-JTPVl0NtxeWE7uKvUB1Ts4mTo2/QX7DYvKik2MlWmZhJpy3uS0QHcrrTaeRvFTleb9O2rcKhjQoVG1UH51otrQ==","signatures":[{"sig":"MEUCIQCfrXWQQLkhrP2TXdwG/79i71yj+gT/Ws69WVX7rQP6mwIgXvvOxpxePQ5bK2FZMjsq03vdXMMOG+NFbNkmpMnr4Pk=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEUCIFd2pgj9r6aSXU434ZsWaINvDiuvubQ16fi85qbPfPFsAiEA06nCU+aiXg7X4yDDLfnYVhu2n+aYU5uUGDJzaTaBYx8=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@nostr-wot%2fidentity@1.1.0-next.1","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":1608940},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","exports":{".":{"import":{"types":"./dist/index.d.ts","default":"./dist/index.js"}},"./vault":{"import":{"types":"./dist/vault/index.d.ts","default":"./dist/vault/index.js"}},"./bunker":{"import":{"types":"./dist/bunker/index.d.ts","default":"./dist/bunker/index.js"}},"./signing":{"import":{"types":"./dist/signing/index.d.ts","default":"./dist/signing/index.js"}},"./accounts":{"import":{"types":"./dist/accounts/index.d.ts","default":"./dist/accounts/index.js"}},"./permissions":{"import":{"types":"./dist/permissions/index.d.ts","default":"./dist/permissions/index.js"}}},"gitHead":"0d1e0d4dd5a8113137e58947e11fdb5f95d31c31","scripts":{"dev":"tsup --watch","test":"vitest run","build":"tsup && node ../../scripts/dist-stamp.mjs stamp","test:run":"vitest run","typecheck":"tsc --noEmit","check:dist":"node ../../scripts/dist-stamp.mjs check"},"_npmUser":{"name":"nostr-wot","email":"leon@nostr-wot.com"},"repository":{"url":"git+https://github.com/nostr-wot/nostr-wot-sdk.git","type":"git","directory":"packages/identity"},"_npmVersion":"11.19.0","description":"Accounts, encrypted vaults, passkeys, signing policies and remote signer hosting for Nostr.","directories":{},"sideEffects":false,"_nodeVersion":"24.21.0","dependencies":{"@scure/base":"^2.0.0","nostr-tools":"^2.24.1","@scure/bip32":"^2.0.1","@scure/bip39":"^2.0.1","@noble/curves":"^2.0.1","@noble/hashes":"^2.4.0","@nostr-wot/pq":"^1.0.0","nostr-wot-sdk":"^3.0.0","@noble/ciphers":"^2.1.1"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"ws":"^8.18.3","tsup":"^8.0.1","vitest":"^4.0.18","@types/ws":"^8.18.1","typescript":"^5.3.0","nostr-tools":"^2.24.1"},"peerDependencies":{},"_npmOperationalInternal":{"tmp":"tmp/identity_1.1.0-next.1_1792779177906_0.23912396109452416","host":"s3://npm-registry-packages-npm-production"}},"1.1.0-next.2":{"name":"@nostr-wot/identity","version":"1.1.0-next.2","keywords":["nostr","vault","pbkdf2","aes-gcm","platform-neutral"],"author":{"name":"Leon Acosta","email":"leon@nostr-wot.com"},"license":"GPL-3.0-only","_id":"@nostr-wot/identity@1.1.0-next.2","maintainers":[{"name":"nostr-wot","email":"leon@nostr-wot.com"}],"homepage":"https://github.com/nostr-wot/nostr-wot-sdk/tree/main/packages/identity","bugs":{"url":"https://github.com/nostr-wot/nostr-wot-sdk/issues"},"dist":{"shasum":"ab00984a6f694b12b9a03ac5f6fe27988507e031","tarball":"https://registry.npmjs.org/@nostr-wot/identity/-/identity-1.1.0-next.2.tgz","fileCount":43,"integrity":"sha512-m60BOgLMLr5Tmoy/KI2kGvJ1serIVBU3nrvZ2xBUAyb7ItEDIfeyFEDdE4ZdPYH9n3vKmSdsGU8GT2HkWY4Y1w==","signatures":[{"sig":"MEUCIA+FeWL3ZiRel+Riy424Yae66066qFMl+H4lfl90tl5vAiEAxpEAQsYTqEHsfCHkAJPpTcsywXJHVY3UmB4Vy4HiV8s=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEQCIE9JYXcdzkXiqdCCBNczEkfjkbymYvoFP2oV1MWz6UAdAiBh9NYOjkbowEq2YHh1XaFBkdRXOEuLKtJ/2WnPijeNbg==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@nostr-wot%2fidentity@1.1.0-next.2","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":1619683},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","exports":{".":{"import":{"types":"./dist/index.d.ts","default":"./dist/index.js"}},"./vault":{"import":{"types":"./dist/vault/index.d.ts","default":"./dist/vault/index.js"}},"./bunker":{"import":{"types":"./dist/bunker/index.d.ts","default":"./dist/bunker/index.js"}},"./signing":{"import":{"types":"./dist/signing/index.d.ts","default":"./dist/signing/index.js"}},"./accounts":{"import":{"types":"./dist/accounts/index.d.ts","default":"./dist/accounts/index.js"}},"./permissions":{"import":{"types":"./dist/permissions/index.d.ts","default":"./dist/permissions/index.js"}}},"gitHead":"4939f4ec19186a7f797f021b6529c37d729bb42d","scripts":{"dev":"tsup --watch","test":"vitest run","build":"tsup && node ../../scripts/dist-stamp.mjs stamp","test:run":"vitest run","typecheck":"tsc --noEmit","check:dist":"node ../../scripts/dist-stamp.mjs check"},"_npmUser":{"name":"nostr-wot","email":"leon@nostr-wot.com"},"repository":{"url":"git+https://github.com/nostr-wot/nostr-wot-sdk.git","type":"git","directory":"packages/identity"},"_npmVersion":"11.19.0","description":"Accounts, encrypted vaults, passkeys, signing policies and remote signer hosting for Nostr.","directories":{},"sideEffects":false,"_nodeVersion":"24.21.0","dependencies":{"@scure/base":"^2.0.0","nostr-tools":"^2.24.1","@scure/bip32":"^2.0.1","@scure/bip39":"^2.0.1","@noble/curves":"^2.0.1","@noble/hashes":"^2.4.0","@nostr-wot/pq":"^1.0.0","nostr-wot-sdk":"^3.0.1-next.0","@noble/ciphers":"^2.1.1"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"ws":"^8.18.3","tsup":"^8.0.1","vitest":"^4.0.18","@types/ws":"^8.18.1","typescript":"^5.3.0","nostr-tools":"^2.24.1"},"peerDependencies":{},"_npmOperationalInternal":{"tmp":"tmp/identity_1.1.0-next.2_1792783183735_0.5842151934650124","host":"s3://npm-registry-packages-npm-production"}},"1.1.0":{"_id":"@nostr-wot/identity@1.1.0","bugs":{"url":"https://github.com/nostr-wot/nostr-wot-sdk/issues"},"dist":{"shasum":"e94f7e9039c27f328908ad142e15bceebb4028de","tarball":"https://registry.npmjs.org/@nostr-wot/identity/-/identity-1.1.0.tgz","fileCount":43,"integrity":"sha512-3BruglVPA4AvancDNWzTjaR4r5505W23pIbIZiRWYRINRGFQ7CUE+AJOxi3m1SIInOf+6ps4fYLFk9THYgCYaA==","signatures":[{"sig":"MEUCIC/xd0v/yfIHfpOgLVkydrKzWEtHedzF1SkQT4o9qXECAiEApz5kNtuWQGTfKkuBMdLsEJWoF78ryvnDvqiAw7rZQ60=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEYCIQD4DIAEXJi13f2JTboezGG+4sw4iu6Ds7aHsjsrC14kigIhAJpZWP9V8rvABiW5RLfoIg34z0aW+tLxNfqh9dyMdbG5"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@nostr-wot%2fidentity@1.1.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":1619669},"main":"./dist/index.js","name":"@nostr-wot/identity","type":"module","types":"./dist/index.d.ts","author":{"name":"Leon Acosta","email":"leon@nostr-wot.com"},"module":"./dist/index.js","exports":{".":{"import":{"types":"./dist/index.d.ts","default":"./dist/index.js"}},"./vault":{"import":{"types":"./dist/vault/index.d.ts","default":"./dist/vault/index.js"}},"./bunker":{"import":{"types":"./dist/bunker/index.d.ts","default":"./dist/bunker/index.js"}},"./signing":{"import":{"types":"./dist/signing/index.d.ts","default":"./dist/signing/index.js"}},"./accounts":{"import":{"types":"./dist/accounts/index.d.ts","default":"./dist/accounts/index.js"}},"./permissions":{"import":{"types":"./dist/permissions/index.d.ts","default":"./dist/permissions/index.js"}}},"gitHead":"384023f947e7dcfe4d54f7862308cdf78040067c","license":"GPL-3.0-only","scripts":{"dev":"tsup --watch","test":"vitest run","build":"tsup && node ../../scripts/dist-stamp.mjs stamp","test:run":"vitest run","typecheck":"tsc --noEmit","check:dist":"node ../../scripts/dist-stamp.mjs check"},"version":"1.1.0","_npmUser":{"name":"nostr-wot","email":"leon@nostr-wot.com"},"homepage":"https://github.com/nostr-wot/nostr-wot-sdk/tree/main/packages/identity","keywords":["nostr","vault","pbkdf2","aes-gcm","platform-neutral"],"repository":{"url":"git+https://github.com/nostr-wot/nostr-wot-sdk.git","type":"git","directory":"packages/identity"},"_npmVersion":"11.19.0","description":"Accounts, encrypted vaults, passkeys, signing policies and remote signer hosting for Nostr.","directories":{},"maintainers":[{"name":"nostr-wot","email":"leon@nostr-wot.com"}],"sideEffects":false,"_nodeVersion":"24.21.0","dependencies":{"@scure/base":"^2.0.0","nostr-tools":"^2.24.1","@scure/bip32":"^2.0.1","@scure/bip39":"^2.0.1","@noble/curves":"^2.0.1","@noble/hashes":"^2.4.0","@nostr-wot/pq":"^1.0.0","nostr-wot-sdk":"^3.0.1","@noble/ciphers":"^2.1.1"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"devDependencies":{"ws":"^8.18.3","tsup":"^8.0.1","vitest":"^4.0.18","@types/ws":"^8.18.1","typescript":"^5.3.0","nostr-tools":"^2.24.1"},"peerDependencies":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/identity_1.1.0_1792787085583_0.6340744113011738"}}},"time":{"created":"2026-10-20T17:18:48.923Z","modified":"2026-10-23T20:24:46.166Z","0.0.0-stage":"2026-10-20T17:18:48.923Z","1.0.0":"2026-10-20T17:20:26.865Z","1.1.0-next.0":"2026-10-23T17:36:38.278Z","1.1.0-next.1":"2026-10-23T18:12:58.102Z","1.1.0-next.2":"2026-10-23T19:19:43.834Z","1.1.0":"2026-10-23T20:24:45.684Z"},"bugs":{"url":"https://github.com/nostr-wot/nostr-wot-sdk/issues"},"author":{"name":"Leon Acosta","email":"leon@nostr-wot.com"},"license":"GPL-3.0-only","homepage":"https://github.com/nostr-wot/nostr-wot-sdk/tree/main/packages/identity","keywords":["nostr","vault","pbkdf2","aes-gcm","platform-neutral"],"repository":{"url":"git+https://github.com/nostr-wot/nostr-wot-sdk.git","type":"git","directory":"packages/identity"},"description":"Accounts, encrypted vaults, passkeys, signing policies and remote signer hosting for Nostr.","maintainers":[{"name":"nostr-wot","email":"leon@nostr-wot.com"}],"readme":"# @nostr-wot/identity\n\nBuild the account and approval boundary of a Nostr signer. This package owns seed derivation, portable encrypted vaults, permission records, the signing pipeline and the NIP-46 responder. Use it in an extension, mobile signer or server that controls accounts. Applications that only request signatures should use `nostr-wot-sdk/signers`.\n\n> Identity package: these entry points replace accounts, vault, permissions, signer-core and bunker packages in the consolidation release. Publish this replacement before deprecating the old npm names. See the [migration guide](https://github.com/nostr-wot/nostr-wot-sdk/blob/main/docs/package-migration.md).\n\n## Install\n\n```bash\nnpm install @nostr-wot/identity nostr-wot-sdk nostr-tools\n```\n\nUse ESM imports. Import explicit subpaths to identify the boundary you are using; `@nostr-wot/identity/vault` is an import path, not a separate package to install.\n\n## Entry points\n\n| Import | Use case and detailed guide |\n| --- | --- |\n| `@nostr-wot/identity/accounts` | [Generate/import accounts, derive NIP-06 keys, classify imported material, and encrypt/decrypt NIP-49 keys](https://github.com/nostr-wot/nostr-wot-sdk/blob/main/packages/accounts/README.md). |\n| `@nostr-wot/identity/vault` | [Password vault lifecycle, scoped secret access, passkey records and recovery](https://github.com/nostr-wot/nostr-wot-sdk/blob/main/packages/vault/README.md). |\n| `@nostr-wot/identity/permissions` | [Caller and method rules, site scopes and destination-specific authentication grants](https://github.com/nostr-wot/nostr-wot-sdk/blob/main/packages/permissions/README.md). |\n| `@nostr-wot/identity/signing` | [Authorize requests, request approval/unlock, sign locally or delegate to a remote signer, and report typed errors](https://github.com/nostr-wot/nostr-wot-sdk/blob/main/packages/signer-core/README.md). |\n| `@nostr-wot/identity/bunker` | [Serve NIP-46 clients over NIP-44 encrypted relay transport](https://github.com/nostr-wot/nostr-wot-sdk/blob/main/packages/bunker/README.md). |\n\n## Recognize imported account material\n\n```ts\nimport { detectImportKind, generateMnemonic, validateMnemonic } from '@nostr-wot/identity/accounts';\n\nconst mnemonic = generateMnemonic();\nif (!validateMnemonic(mnemonic)) throw new Error('Invalid mnemonic');\nconst kind = detectImportKind(mnemonic);\n```\n\nGenerating or parsing an account does not persist it, authorize requests or display a backup flow. The host supplies those decisions. Never log a mnemonic or private key. The account guide documents accepted input, derivation paths and import errors.\n\n## Compose a signer host\n\nUse a persistent `KeyValueStore` from your host with the vault and permission store; `nostr-wot-sdk/storage` supplies the interface, a namespacing wrapper and an in-memory implementation for tests. Give `SignerCore` the vault, permissions, approval UI and any remote-signing or unlock ports your host supports. Route verified transport requests to it. A NIP-46 `BunkerServer` receives and decrypts requests, but its injected handler remains responsible for authorization.\n\nA deny rule ends a signing request before approval. The core pins the account and rechecks authorization around asynchronous boundaries. Batch results report each item's success or failure; do not treat a partially successful batch as if nothing was signed. When composing with the bunker, use `handlerTimeoutMs: 0` so the signing pipeline owns request timeouts.\n\n## Vault and passkey responsibilities\n\nThe password vault uses PBKDF2-HMAC-SHA-256 and AES-256-GCM with an existing versioned record format. An empty password provides no secrecy against someone holding the stored record. Secret accessors give callbacks temporary byte copies and invalidate results after revocation; callbacks must not publish or otherwise externalize secrets or results before authorization completes. The host owns storage durability, unlock UI and lock/session lifetime.\n\nPasskey version 2 records use separate helpers; do not pass them to the password-only `Vault.unlock()`. The host performs WebAuthn registration/assertions, obtains PRF output, verifies the user and coordinates mutations. Recovery is not automatically a relay upload: provider-confirmed storage and explicit fallback behavior are described in the [passkey recovery guide](https://github.com/nostr-wot/nostr-wot-sdk/blob/main/docs/passkey-recovery.md). `resolvePasskeyIdentity` logs in with a discoverable passkey in either derived or stored mode, classifying its user handle first so a stored passkey never yields a derived key; an untagged passkey with no evidence either way comes back `ambiguous` for the user to confirm. `saveStoredRecord` writes key or vault records for tagged stored passkeys using provisional event kind 31778; seed inputs are normalized to a vault and legacy records remain readable. The same guide covers both.\n\n## Authentication is destination-specific\n\nNIP-42 and NIP-98 signing is credential issuance. A broad event-kind allow is insufficient. Supply transport-attested requester identity and display the parsed destination and method in approval UI. Web requesters require one-time consent by default; remembered grants are explicit policy. Malformed destinations, revoked permissions, changed accounts and stale requests fail rather than bypass approval. See the signing guide for `AuthenticationPolicy`, remembered grants and the host-only relay login path.\n\n## Runtime requirements\n\nPortable account, vault, permission and signing code does not depend on the DOM or WebExtension APIs. Hosts supply storage, clocks where configurable, approval and transport adapters. Required globals include `TextEncoder`, `TextDecoder`, secure `crypto.getRandomValues`, timers and `AbortController`. Post-quantum paths also need base64 support (`atob`/`btoa`, or the supported Buffer fallback). React Native/Hermes hosts must install the appropriate polyfills before loading the modules, including secure randomness; do not substitute a non-cryptographic random source.\n\nThe portable vault's cryptography does not require `crypto.subtle`. Browser WebAuthn and provider adapters still require their documented platform capabilities. A relay responder also needs a compatible WebSocket transport. Import only the entry point appropriate to your runtime.\n\n## License\n\nGNU General Public License version 3 only (`GPL-3.0-only`). See [LICENSE](LICENSE) and [NOTICE](NOTICE).\n","readmeFilename":"README.md"}