{"_id":"snstr","_rev":"16-6930349c6b3cba679c1e2afa52ba98bc","name":"snstr","dist-tags":{"latest":"0.3.3"},"versions":{"0.1.0":{"name":"snstr","version":"0.1.0","keywords":["nostr","nostr-protocol","event","client","relay","typescript","lightweight","nip46","remote-signing","encryption","nip47","wallet-connect","lightning"],"author":{"name":"plebdev"},"license":"MIT","_id":"snstr@0.1.0","maintainers":[{"name":"bitcoinplebdev","email":"austinkelsay@protonmail.com"}],"dist":{"shasum":"8dfc791cfe23cf3f44d8e2dfef32db70d41bcb6a","tarball":"https://registry.npmjs.org/snstr/-/snstr-0.1.0.tgz","fileCount":569,"integrity":"sha512-qsYUwyeTS/Xx7Vptp9jRH986z4/WsPZNgMEvogrZfUlLCvJY2rfwPOvdtoUFHNlHbVnwTyR86yjo2/51mBJt/g==","signatures":[{"sig":"MEUCIQDobDZnXoBdnWvCf0zXN1IzD9pLRv4UfPYPMp2nBIxlywIgW3wq/HOzEoeyT75t4TD0EFrz0KHXSE75gBbhet6Hetc=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":4110102},"main":"dist/snstr/index.js","types":"dist/snstr/index.d.ts","gitHead":"48df258fe42ac5fd2db01beeedb7320077d07127","scripts":{"lint":"eslint . --ext .ts","test":"jest","build":"rimraf dist && tsc","start":"npm run example:nip07","format":"prettier --write \"src/**/*.ts\" \"tests/**/*.ts\" \"examples/**/*.ts\"","example":"ts-node examples/basic-example.ts","promote":"scripts/promote-to-main.sh","release":"npm run release:patch && npm run release:push","// Build":"-------------- Build Commands --------------","test:all":"npm test","test:core":"jest tests/nip01","// Release":"-------------- Release Commands --------------","example:dm":"ts-node examples/nip04/direct-message.ts","test:event":"jest tests/nip01/event/event.test.ts","test:nip01":"jest tests/nip01","test:nip02":"jest tests/nip02","test:nip04":"jest tests/nip04","test:nip05":"jest tests/nip05","test:nip07":"jest tests/nip07","test:nip09":"jest tests/nip09","test:nip10":"jest tests/nip10","test:nip11":"jest tests/nip11","test:nip17":"jest tests/nip17","test:nip19":"jest tests/nip19","test:nip21":"jest tests/nip21","test:nip44":"jest tests/nip44","test:nip46":"jest tests/nip46","test:nip47":"jest tests/nip47","test:nip50":"jest tests/nip50","test:nip57":"jest tests/nip57","test:nip65":"jest tests/nip65","test:nip66":"jest tests/nip66","test:nostr":"jest tests/nip01/nostr.test.ts","test:relay":"jest tests/nip01/relay","test:watch":"jest --watch","// Test NIP":"-------------- NIP-specific Tests --------------","example:all":"npm run example","test:crypto":"jest tests/crypto.test.ts tests/nip04 tests/nip44","// Test Core":"-------------- Core Component Tests --------------","// Test Main":"-------------- Main Test Commands --------------","release:push":"git push && git push --tags","example:basic":"npm run example && npm run example:crypto && npm run example:dm","example:debug":"DEBUG=true ts-node examples/basic-example.ts","example:nip01":"npm run example:nip01:event:ordering && npm run example:nip01:relay:connection && npm run example:nip01:relay:query && npm run example:nip01:validation","example:nip02":"ts-node examples/nip02/nip02-demo.ts","example:nip04":"ts-node examples/nip04/direct-message.ts","example:nip05":"ts-node examples/nip05/nip05-demo.ts","example:nip07":"cd examples/nip07 && npm install && npm run build && npm start","example:nip09":"ts-node examples/nip09/deletion-request.ts","example:nip10":"ts-node examples/nip10/nip10-demo.ts","example:nip11":"ts-node examples/nip11/relay-info-example.ts","example:nip17":"ts-node examples/nip17/nip17-demo.ts","example:nip19":"ts-node examples/nip19/nip19-demo.ts","example:nip21":"ts-node examples/nip21/nip21-demo.ts","example:nip44":"ts-node examples/nip44/nip44-demo.ts","example:nip46":"ts-node examples/nip46/unified-example.ts","example:nip47":"ts-node examples/nip47/basic-example.ts","example:nip50":"ts-node examples/nip50/search-demo.ts","example:nip57":"ts-node examples/nip57/basic-example.ts","example:nip65":"ts-node examples/nip65/nip65-demo.ts","example:nip66":"ts-node examples/nip66/nip66-demo.ts","release:major":"npm run release:prepare && npm version major","release:minor":"npm run release:prepare && npm version minor","release:patch":"npm run release:prepare && npm version patch","test:coverage":"jest --coverage","test:identity":"jest tests/nip05 tests/nip07 tests/nip19","// Example NIP":"-------------- Other NIP Examples --------------","// Test Groups":"-------------- Test Category Groups --------------","build:examples":"tsc -p examples/tsconfig.json","example:crypto":"ts-node examples/crypto-demo.ts","test:event:all":"jest tests/nip01/event","test:protocols":"jest tests/nip46 tests/nip47 tests/nip57","example:verbose":"VERBOSE=true ts-node examples/basic-example.ts","release:prepare":"npm run lint && npm test && npm run build","// App Shortcuts":"-------------- Application Shortcuts --------------","// Example Basic":"-------------- Basic Examples --------------","// Lint & Format":"-------------- Code Quality --------------","example:advanced":"npm run example:nip46 && npm run example:nip47:error-handling","example:identity":"npm run example:nip05 && npm run example:nip07 && npm run example:nip19","example:nip07:dm":"ts-node examples/nip07/direct-message.ts","example:nip44:js":"node examples/nip44/nip44-demo.js","example:payments":"npm run example:nip47 && npm run example:nip57","test:crypto:core":"jest tests/utils/crypto.test.ts","test:integration":"jest tests/integration.test.ts","test:nip01:event":"jest tests/nip01/event","test:nip01:relay":"jest tests/nip01/relay","// Example Groups":"-------------- Example Category Groups --------------","// Example NIP-01":"-------------- NIP-01 Examples --------------","example:messaging":"npm run example:dm && npm run example:nip04 && npm run example:nip44 && npm run example:nip17","example:nip19:tlv":"ts-node examples/nip19/tlv-example.ts","example:nip19:demo":"ts-node examples/nip19/nip19-demo.ts","example:validation":"npm run example:nip01:validation","example:nip07:build":"cd examples/nip07 && npm install && npm run build","example:nip46:basic":"ts-node examples/nip46/basic-example.ts","example:nip57:lnurl":"ts-node examples/nip57/lnurl-server-simulation.ts","test:event:ordering":"jest tests/nip01/event/event-ordering.test.ts","test:utils:relayUrl":"jest tests/utils/relayUrl.test.ts","// Branch Management":"-------------- Branch Management --------------","example:nip19:bech32":"ts-node examples/nip19/bech32-example.ts","example:nip46:simple":"ts-node examples/nip46/simple/simple-example.ts","example:nip57:client":"ts-node examples/nip57/zap-client-example.ts","example:nip46:minimal":"ts-node examples/nip46/minimal.ts","example:nip47:verbose":"VERBOSE=true ts-node examples/nip47/basic-example.ts","test:nip01:relay:pool":"jest tests/nip01/relay/relayPool.test.ts","example:nip19:security":"ts-node examples/nip19/nip19-security.ts","example:nip46:advanced":"ts-node examples/nip46/advanced/remote-signing-demo.ts","example:nip46:test-all":"ts-node examples/nip46/test-all-examples.ts","test:event:addressable":"jest tests/nip01/event/addressable-events.test.ts","test:nip01:relay:filter":"jest tests/nip01/relay/filters.test.ts","example:custom-websocket":"ts-node examples/custom-websocket-example.ts","example:nip01:relay:pool":"ts-node examples/nip01/relay/relay-pool-example.ts","example:nip01:validation":"ts-node examples/client/validation-flow.ts","example:nip19:validation":"ts-node examples/nip19/validation-example.ts","example:nip44:compliance":"ts-node examples/nip44/nip44-compliance-demo.ts","example:nip47:expiration":"ts-node examples/nip47/request-expiration-example.ts","example:nip57:validation":"ts-node examples/nip57/invoice-validation-example.ts","example:nip01:relay:query":"ts-node examples/nip01/relay/relay-query-example.ts","example:nip44:test-vector":"ts-node examples/nip44/nip44-test-vector.ts","example:nip46:from-scratch":"ts-node examples/nip46/from-scratch/implementation-from-scratch.ts","test:nip01:relay:reconnect":"jest tests/nip01/relay/relay-reconnect.test.ts","test:nip01:relay:websocket":"jest tests/nip01/relay/websocket-implementation.test.ts","example:nip01:relay:filters":"ts-node examples/nip01/relay/filter-types-example.ts","example:nip46:simple-client":"ts-node examples/nip46/simple/simple-client-test.ts","test:nip01:relay:connection":"jest tests/nip01/relay/relay.test.ts","example:nip01:event:ordering":"ts-node examples/nip01/event/event-ordering-demo.ts","example:nip44:version-compat":"ts-node examples/nip44/nip44-version-compatibility.ts","example:nip47:client-service":"ts-node examples/nip47/basic-client-service.ts","example:nip47:error-handling":"ts-node examples/nip47/error-handling-example.ts","example:nip01:relay:reconnect":"ts-node examples/nip01/relay/relay-reconnect-example.ts","example:nip01:relay:auto-close":"ts-node examples/nip01/relay/auto-unsubscribe-example.ts","example:nip01:relay:connection":"ts-node examples/nip01/relay/relay-connection-example.ts","example:nip19:security-example":"ts-node examples/nip19/security-example.ts","example:nip01:event:addressable":"ts-node examples/nip01/event/addressable-events.ts","example:nip01:event:replaceable":"ts-node examples/nip01/event/replaceable-events.ts","example:nip01:url-preprocessing":"ts-node examples/nip01/url-preprocessing-example.ts","example:nip02:pubkey-normalization":"ts-node examples/nip02/pubkey-normalization-example.ts","example:nip01:relay:pool-url-normalization":"ts-node examples/nip01/relay-pool-url-normalization-example.ts","example:nip46:connection-string-validation":"ts-node examples/nip46/connection-string-validation-example.ts"},"_npmUser":{"name":"bitcoinplebdev","actor":{"name":"bitcoinplebdev","type":"user","email":"austinkelsay@protonmail.com"},"email":"austinkelsay@protonmail.com"},"_npmVersion":"10.8.2","description":"Simple Nostr Software Toolkit for Relays - A comprehensive TypeScript library for Nostr protocol implementation","directories":{},"_nodeVersion":"20.19.3","dependencies":{"ws":"^8.15.1","zod":"^3.22.4","@scure/base":"^1.2.4","@noble/curves":"^1.8.1","@noble/hashes":"^1.3.3","@noble/ciphers":"^0.4.1","websocket-polyfill":"^0.0.3","light-bolt11-decoder":"^3.2.0"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^29.7.0","eslint":"^8.56.0","rimraf":"^3.0.2","ts-jest":"^29.1.1","ts-node":"^10.9.2","prettier":"^3.1.1","@types/ws":"^8.18.0","browserify":"^17.0.1","typescript":"^5.3.3","@types/jest":"^29.5.11","@types/node":"^20.10.6","@typescript-eslint/parser":"^6.17.0","@typescript-eslint/eslint-plugin":"^6.17.0"},"_npmOperationalInternal":{"tmp":"tmp/snstr_0.1.0_1751463072693_0.1736849404532479","host":"s3://npm-registry-packages-npm-production"}},"0.1.1":{"name":"snstr","version":"0.1.1","keywords":["nostr","nostr-protocol","event","client","relay","typescript","lightweight","nip46","remote-signing","encryption","nip47","wallet-connect","lightning"],"author":{"name":"plebdev"},"license":"MIT","_id":"snstr@0.1.1","maintainers":[{"name":"bitcoinplebdev","email":"austinkelsay@protonmail.com"}],"dist":{"shasum":"a0fda1a7b8bb26ac43425e2d5eaad0e416ecafa5","tarball":"https://registry.npmjs.org/snstr/-/snstr-0.1.1.tgz","fileCount":8,"integrity":"sha512-8/e54QiGA/WD4d59t4NGUrX9yUxxvzfSaURE5J2zA8pEf3xapGXi1BOwId7X5LbHM4Q6JgHUSN35tyWWiqXLIQ==","signatures":[{"sig":"MEUCIQD79mrt4lkT1fzfbPssAeuAgRD9W5qk8V2+nrePa1Qo/wIgHvGYDO6kzUl2u7+f1wv9R3J8ETk8lbVBuMdNnudY7lc=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":37240},"main":"dist/snstr/index.js","types":"dist/snstr/index.d.ts","gitHead":"12a049798aa81a458049becfe245c5313381cc24","scripts":{"lint":"eslint . --ext .ts","test":"jest","build":"rimraf dist && tsc","start":"npm run example:nip07","format":"prettier --write \"src/**/*.ts\" \"tests/**/*.ts\" \"examples/**/*.ts\"","example":"ts-node examples/basic-example.ts","promote":"scripts/promote-to-main.sh","release":"npm run release:patch && npm run release:push","// Build":"-------------- Build Commands --------------","test:all":"npm test","test:core":"jest tests/nip01","// Release":"-------------- Release Commands --------------","example:dm":"ts-node examples/nip04/direct-message.ts","test:event":"jest tests/nip01/event/event.test.ts","test:nip01":"jest tests/nip01","test:nip02":"jest tests/nip02","test:nip04":"jest tests/nip04","test:nip05":"jest tests/nip05","test:nip07":"jest tests/nip07","test:nip09":"jest tests/nip09","test:nip10":"jest tests/nip10","test:nip11":"jest tests/nip11","test:nip17":"jest tests/nip17","test:nip19":"jest tests/nip19","test:nip21":"jest tests/nip21","test:nip44":"jest tests/nip44","test:nip46":"jest tests/nip46","test:nip47":"jest tests/nip47","test:nip50":"jest tests/nip50","test:nip57":"jest tests/nip57","test:nip65":"jest tests/nip65","test:nip66":"jest tests/nip66","test:nostr":"jest tests/nip01/nostr.test.ts","test:relay":"jest tests/nip01/relay","test:watch":"jest --watch","// Test NIP":"-------------- NIP-specific Tests --------------","example:all":"npm run example","test:crypto":"jest tests/crypto.test.ts tests/nip04 tests/nip44","// Test Core":"-------------- Core Component Tests --------------","// Test Main":"-------------- Main Test Commands --------------","release:push":"git push && git push --tags","example:basic":"npm run example && npm run example:crypto && npm run example:dm","example:debug":"DEBUG=true ts-node examples/basic-example.ts","example:nip01":"npm run example:nip01:event:ordering && npm run example:nip01:relay:connection && npm run example:nip01:relay:query && npm run example:nip01:validation","example:nip02":"ts-node examples/nip02/nip02-demo.ts","example:nip04":"ts-node examples/nip04/direct-message.ts","example:nip05":"ts-node examples/nip05/nip05-demo.ts","example:nip07":"cd examples/nip07 && npm install && npm run build && npm start","example:nip09":"ts-node examples/nip09/deletion-request.ts","example:nip10":"ts-node examples/nip10/nip10-demo.ts","example:nip11":"ts-node examples/nip11/relay-info-example.ts","example:nip17":"ts-node examples/nip17/nip17-demo.ts","example:nip19":"ts-node examples/nip19/nip19-demo.ts","example:nip21":"ts-node examples/nip21/nip21-demo.ts","example:nip44":"ts-node examples/nip44/nip44-demo.ts","example:nip46":"ts-node examples/nip46/unified-example.ts","example:nip47":"ts-node examples/nip47/basic-example.ts","example:nip50":"ts-node examples/nip50/search-demo.ts","example:nip57":"ts-node examples/nip57/basic-example.ts","example:nip65":"ts-node examples/nip65/nip65-demo.ts","example:nip66":"ts-node examples/nip66/nip66-demo.ts","release:major":"npm run release:prepare && npm version major","release:minor":"npm run release:prepare && npm version minor","release:patch":"npm run release:prepare && npm version patch","test:coverage":"jest --coverage","test:identity":"jest tests/nip05 tests/nip07 tests/nip19","// Example NIP":"-------------- Other NIP Examples --------------","// Test Groups":"-------------- Test Category Groups --------------","build:examples":"tsc -p examples/tsconfig.json","example:crypto":"ts-node examples/crypto-demo.ts","test:event:all":"jest tests/nip01/event","test:protocols":"jest tests/nip46 tests/nip47 tests/nip57","example:verbose":"VERBOSE=true ts-node examples/basic-example.ts","release:prepare":"npm run lint && npm test && npm run build","// App Shortcuts":"-------------- Application Shortcuts --------------","// Example Basic":"-------------- Basic Examples --------------","// Lint & Format":"-------------- Code Quality --------------","example:advanced":"npm run example:nip46 && npm run example:nip47:error-handling","example:identity":"npm run example:nip05 && npm run example:nip07 && npm run example:nip19","example:nip07:dm":"ts-node examples/nip07/direct-message.ts","example:nip44:js":"node examples/nip44/nip44-demo.js","example:payments":"npm run example:nip47 && npm run example:nip57","test:crypto:core":"jest tests/utils/crypto.test.ts","test:integration":"jest tests/integration.test.ts","test:nip01:event":"jest tests/nip01/event","test:nip01:relay":"jest tests/nip01/relay","// Example Groups":"-------------- Example Category Groups --------------","// Example NIP-01":"-------------- NIP-01 Examples --------------","example:messaging":"npm run example:dm && npm run example:nip04 && npm run example:nip44 && npm run example:nip17","example:nip19:tlv":"ts-node examples/nip19/tlv-example.ts","example:nip19:demo":"ts-node examples/nip19/nip19-demo.ts","example:validation":"npm run example:nip01:validation","example:nip07:build":"cd examples/nip07 && npm install && npm run build","example:nip46:basic":"ts-node examples/nip46/basic-example.ts","example:nip47:nip44":"ts-node examples/nip47/nip44-encryption.ts","example:nip57:lnurl":"ts-node examples/nip57/lnurl-server-simulation.ts","example:rate-limits":"ts-node examples/rate-limit-configuration-example.ts","test:event:ordering":"jest tests/nip01/event/event-ordering.test.ts","test:utils:relayUrl":"jest tests/utils/relayUrl.test.ts","// Branch Management":"-------------- Branch Management --------------","example:nip19:bech32":"ts-node examples/nip19/bech32-example.ts","example:nip46:simple":"ts-node examples/nip46/simple/simple-example.ts","example:nip57:client":"ts-node examples/nip57/zap-client-example.ts","example:nip46:minimal":"ts-node examples/nip46/minimal.ts","example:nip47:verbose":"VERBOSE=true ts-node examples/nip47/basic-example.ts","test:nip01:relay:pool":"jest tests/nip01/relay/relayPool.test.ts","example:nip19:security":"ts-node examples/nip19/nip19-security.ts","example:nip46:advanced":"ts-node examples/nip46/advanced/remote-signing-demo.ts","example:nip46:test-all":"ts-node examples/nip46/test-all-examples.ts","test:event:addressable":"jest tests/nip01/event/addressable-events.test.ts","test:nip01:relay:filter":"jest tests/nip01/relay/filters.test.ts","example:custom-websocket":"ts-node examples/custom-websocket-example.ts","example:nip01:relay:pool":"ts-node examples/nip01/relay/relay-pool-example.ts","example:nip01:validation":"ts-node examples/client/validation-flow.ts","example:nip19:validation":"ts-node examples/nip19/validation-example.ts","example:nip44:compliance":"ts-node examples/nip44/nip44-compliance-demo.ts","example:nip47:expiration":"ts-node examples/nip47/request-expiration-example.ts","example:nip57:validation":"ts-node examples/nip57/invoice-validation-example.ts","example:nip01:relay:query":"ts-node examples/nip01/relay/relay-query-example.ts","example:nip44:test-vector":"ts-node examples/nip44/nip44-test-vector.ts","example:nip46:from-scratch":"ts-node examples/nip46/from-scratch/implementation-from-scratch.ts","test:nip01:relay:reconnect":"jest tests/nip01/relay/relay-reconnect.test.ts","test:nip01:relay:websocket":"jest tests/nip01/relay/websocket-implementation.test.ts","example:nip01:relay:filters":"ts-node examples/nip01/relay/filter-types-example.ts","example:nip46:simple-client":"ts-node examples/nip46/simple/simple-client-test.ts","test:nip01:relay:connection":"jest tests/nip01/relay/relay.test.ts","example:nip01:event:ordering":"ts-node examples/nip01/event/event-ordering-demo.ts","example:nip44:version-compat":"ts-node examples/nip44/nip44-version-compatibility.ts","example:nip47:client-service":"ts-node examples/nip47/basic-client-service.ts","example:nip47:error-handling":"ts-node examples/nip47/error-handling-example.ts","example:nip01:relay:reconnect":"ts-node examples/nip01/relay/relay-reconnect-example.ts","example:nip01:relay:auto-close":"ts-node examples/nip01/relay/auto-unsubscribe-example.ts","example:nip01:relay:connection":"ts-node examples/nip01/relay/relay-connection-example.ts","example:nip19:security-example":"ts-node examples/nip19/security-example.ts","example:nip01:event:addressable":"ts-node examples/nip01/event/addressable-events.ts","example:nip01:event:replaceable":"ts-node examples/nip01/event/replaceable-events.ts","example:nip01:url-preprocessing":"ts-node examples/nip01/url-preprocessing-example.ts","example:nip02:pubkey-normalization":"ts-node examples/nip02/pubkey-normalization-example.ts","example:nip47:encryption-negotiation":"ts-node examples/nip47/encryption-negotiation.ts","example:nip01:relay:pool-url-normalization":"ts-node examples/nip01/relay-pool-url-normalization-example.ts","example:nip46:connection-string-validation":"ts-node examples/nip46/connection-string-validation-example.ts"},"_npmUser":{"name":"bitcoinplebdev","email":"austinkelsay@protonmail.com"},"_npmVersion":"10.8.2","description":"Secure Nostr Software Toolkit for Renegades - A comprehensive TypeScript library for Nostr protocol implementation","directories":{},"_nodeVersion":"20.19.3","dependencies":{"ws":"^8.15.1","zod":"^3.22.4","@scure/base":"^1.2.4","@noble/curves":"^1.8.1","@noble/hashes":"^1.3.3","@noble/ciphers":"^0.4.1","websocket-polyfill":"^0.0.3","light-bolt11-decoder":"^3.2.0"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^29.7.0","eslint":"^8.56.0","rimraf":"^3.0.2","ts-jest":"^29.1.1","ts-node":"^10.9.2","prettier":"^3.1.1","@types/ws":"^8.18.0","browserify":"^17.0.1","typescript":"^5.3.3","@types/jest":"^29.5.11","@types/node":"^20.10.6","@typescript-eslint/parser":"^6.17.0","@typescript-eslint/eslint-plugin":"^6.17.0"},"_npmOperationalInternal":{"tmp":"tmp/snstr_0.1.1_1754607970472_0.43677463712485465","host":"s3://npm-registry-packages-npm-production"}},"0.1.2":{"name":"snstr","version":"0.1.2","keywords":["nostr","nostr-protocol","event","client","relay","typescript","lightweight","nip46","remote-signing","encryption","nip47","wallet-connect","lightning"],"author":{"name":"plebdev"},"license":"MIT","_id":"snstr@0.1.2","maintainers":[{"name":"bitcoinplebdev","email":"austinkelsay@protonmail.com"}],"dist":{"shasum":"ed72fbc2654037ae2761c2904bec9fd64f6d19ab","tarball":"https://registry.npmjs.org/snstr/-/snstr-0.1.2.tgz","fileCount":114,"integrity":"sha512-wM7CpuIjm15UU4jzg4M3wy0In6G1PkEACb7SxKWDEQszo5gvNI5nc72+/GvCuTL/EHo0p6GsrYYG1mthUuSohA==","signatures":[{"sig":"MEUCIAdltKJZ3m/R9D7N1WopFP3nJPiUNAwf6w3CKEzzF/B+AiEAzE1QtMUC4TgsapXe74OaUToHavXN+I6WwkioPNHXWLw=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":878118},"main":"dist/src/index.js","types":"dist/src/index.d.ts","gitHead":"ac9a92132064644c8ec0c71d0ccdd4bca98a71f9","scripts":{"lint":"eslint . --ext .ts","test":"jest","build":"rimraf dist && tsc","start":"npm run example:nip07","format":"prettier --write \"src/**/*.ts\" \"tests/**/*.ts\" \"examples/**/*.ts\"","example":"ts-node examples/basic-example.ts","promote":"scripts/promote-to-main.sh","release":"npm run release:patch && npm run release:push","// Build":"-------------- Build Commands --------------","test:all":"npm test","test:core":"jest tests/nip01","// Release":"-------------- Release Commands --------------","example:dm":"ts-node examples/nip04/direct-message.ts","test:event":"jest tests/nip01/event/event.test.ts","test:nip01":"jest tests/nip01","test:nip02":"jest tests/nip02","test:nip04":"jest tests/nip04","test:nip05":"jest tests/nip05","test:nip07":"jest tests/nip07","test:nip09":"jest tests/nip09","test:nip10":"jest tests/nip10","test:nip11":"jest tests/nip11","test:nip17":"jest tests/nip17","test:nip19":"jest tests/nip19","test:nip21":"jest tests/nip21","test:nip44":"jest tests/nip44","test:nip46":"jest tests/nip46","test:nip47":"jest tests/nip47","test:nip50":"jest tests/nip50","test:nip57":"jest tests/nip57","test:nip65":"jest tests/nip65","test:nip66":"jest tests/nip66","test:nostr":"jest tests/nip01/nostr.test.ts","test:relay":"jest tests/nip01/relay","test:watch":"jest --watch","// Test NIP":"-------------- NIP-specific Tests --------------","example:all":"npm run example","test:crypto":"jest tests/crypto.test.ts tests/nip04 tests/nip44","// Test Core":"-------------- Core Component Tests --------------","// Test Main":"-------------- Main Test Commands --------------","release:push":"git push && git push --tags","example:basic":"npm run example && npm run example:crypto && npm run example:dm","example:debug":"DEBUG=true ts-node examples/basic-example.ts","example:nip01":"npm run example:nip01:event:ordering && npm run example:nip01:relay:connection && npm run example:nip01:relay:query && npm run example:nip01:validation","example:nip02":"ts-node examples/nip02/nip02-demo.ts","example:nip04":"ts-node examples/nip04/direct-message.ts","example:nip05":"ts-node examples/nip05/nip05-demo.ts","example:nip07":"cd examples/nip07 && npm install && npm run build && npm start","example:nip09":"ts-node examples/nip09/deletion-request.ts","example:nip10":"ts-node examples/nip10/nip10-demo.ts","example:nip11":"ts-node examples/nip11/relay-info-example.ts","example:nip17":"ts-node examples/nip17/nip17-demo.ts","example:nip19":"ts-node examples/nip19/nip19-demo.ts","example:nip21":"ts-node examples/nip21/nip21-demo.ts","example:nip44":"ts-node examples/nip44/nip44-demo.ts","example:nip46":"ts-node examples/nip46/unified-example.ts","example:nip47":"ts-node examples/nip47/basic-example.ts","example:nip50":"ts-node examples/nip50/search-demo.ts","example:nip57":"ts-node examples/nip57/basic-example.ts","example:nip65":"ts-node examples/nip65/nip65-demo.ts","example:nip66":"ts-node examples/nip66/nip66-demo.ts","release:major":"npm run release:prepare && npm version major","release:minor":"npm run release:prepare && npm version minor","release:patch":"npm run release:prepare && npm version patch","test:coverage":"jest --coverage","test:identity":"jest tests/nip05 tests/nip07 tests/nip19","// Example NIP":"-------------- Other NIP Examples --------------","// Test Groups":"-------------- Test Category Groups --------------","build:examples":"tsc -p examples/tsconfig.json","example:crypto":"ts-node examples/crypto-demo.ts","test:event:all":"jest tests/nip01/event","test:protocols":"jest tests/nip46 tests/nip47 tests/nip57","example:verbose":"VERBOSE=true ts-node examples/basic-example.ts","release:prepare":"npm run lint && npm test && npm run build","// App Shortcuts":"-------------- Application Shortcuts --------------","// Example Basic":"-------------- Basic Examples --------------","// Lint & Format":"-------------- Code Quality --------------","example:advanced":"npm run example:nip46 && npm run example:nip47:error-handling","example:identity":"npm run example:nip05 && npm run example:nip07 && npm run example:nip19","example:nip07:dm":"ts-node examples/nip07/direct-message.ts","example:nip44:js":"node examples/nip44/nip44-demo.js","example:payments":"npm run example:nip47 && npm run example:nip57","test:crypto:core":"jest tests/utils/crypto.test.ts","test:integration":"jest tests/integration.test.ts","test:nip01:event":"jest tests/nip01/event","test:nip01:relay":"jest tests/nip01/relay","// Example Groups":"-------------- Example Category Groups --------------","// Example NIP-01":"-------------- NIP-01 Examples --------------","example:messaging":"npm run example:dm && npm run example:nip04 && npm run example:nip44 && npm run example:nip17","example:nip19:tlv":"ts-node examples/nip19/tlv-example.ts","example:nip19:demo":"ts-node examples/nip19/nip19-demo.ts","example:validation":"npm run example:nip01:validation","example:nip07:build":"cd examples/nip07 && npm install && npm run build","example:nip46:basic":"ts-node examples/nip46/basic-example.ts","example:nip47:nip44":"ts-node examples/nip47/nip44-encryption.ts","example:nip57:lnurl":"ts-node examples/nip57/lnurl-server-simulation.ts","example:rate-limits":"ts-node examples/rate-limit-configuration-example.ts","test:event:ordering":"jest tests/nip01/event/event-ordering.test.ts","test:utils:relayUrl":"jest tests/utils/relayUrl.test.ts","// Branch Management":"-------------- Branch Management --------------","example:nip19:bech32":"ts-node examples/nip19/bech32-example.ts","example:nip46:simple":"ts-node examples/nip46/simple/simple-example.ts","example:nip57:client":"ts-node examples/nip57/zap-client-example.ts","example:nip46:minimal":"ts-node examples/nip46/minimal.ts","example:nip47:verbose":"VERBOSE=true ts-node examples/nip47/basic-example.ts","test:nip01:relay:pool":"jest tests/nip01/relay/relayPool.test.ts","example:nip19:security":"ts-node examples/nip19/nip19-security.ts","example:nip46:advanced":"ts-node examples/nip46/advanced/remote-signing-demo.ts","example:nip46:test-all":"ts-node examples/nip46/test-all-examples.ts","test:event:addressable":"jest tests/nip01/event/addressable-events.test.ts","test:nip01:relay:filter":"jest tests/nip01/relay/filters.test.ts","example:custom-websocket":"ts-node examples/custom-websocket-example.ts","example:nip01:relay:pool":"ts-node examples/nip01/relay/relay-pool-example.ts","example:nip01:validation":"ts-node examples/client/validation-flow.ts","example:nip19:validation":"ts-node examples/nip19/validation-example.ts","example:nip44:compliance":"ts-node examples/nip44/nip44-compliance-demo.ts","example:nip47:expiration":"ts-node examples/nip47/request-expiration-example.ts","example:nip57:validation":"ts-node examples/nip57/invoice-validation-example.ts","example:nip01:relay:query":"ts-node examples/nip01/relay/relay-query-example.ts","example:nip44:test-vector":"ts-node examples/nip44/nip44-test-vector.ts","example:nip46:from-scratch":"ts-node examples/nip46/from-scratch/implementation-from-scratch.ts","test:nip01:relay:reconnect":"jest tests/nip01/relay/relay-reconnect.test.ts","test:nip01:relay:websocket":"jest tests/nip01/relay/websocket-implementation.test.ts","example:nip01:relay:filters":"ts-node examples/nip01/relay/filter-types-example.ts","example:nip46:simple-client":"ts-node examples/nip46/simple/simple-client-test.ts","test:nip01:relay:connection":"jest tests/nip01/relay/relay.test.ts","example:nip01:event:ordering":"ts-node examples/nip01/event/event-ordering-demo.ts","example:nip44:version-compat":"ts-node examples/nip44/nip44-version-compatibility.ts","example:nip47:client-service":"ts-node examples/nip47/basic-client-service.ts","example:nip47:error-handling":"ts-node examples/nip47/error-handling-example.ts","example:nip01:relay:reconnect":"ts-node examples/nip01/relay/relay-reconnect-example.ts","example:nip01:relay:auto-close":"ts-node examples/nip01/relay/auto-unsubscribe-example.ts","example:nip01:relay:connection":"ts-node examples/nip01/relay/relay-connection-example.ts","example:nip19:security-example":"ts-node examples/nip19/security-example.ts","example:nip01:event:addressable":"ts-node examples/nip01/event/addressable-events.ts","example:nip01:event:replaceable":"ts-node examples/nip01/event/replaceable-events.ts","example:nip01:url-preprocessing":"ts-node examples/nip01/url-preprocessing-example.ts","example:nip02:pubkey-normalization":"ts-node examples/nip02/pubkey-normalization-example.ts","example:nip47:encryption-negotiation":"ts-node examples/nip47/encryption-negotiation.ts","example:nip01:relay:pool-url-normalization":"ts-node examples/nip01/relay-pool-url-normalization-example.ts","example:nip46:connection-string-validation":"ts-node examples/nip46/connection-string-validation-example.ts"},"_npmUser":{"name":"bitcoinplebdev","email":"austinkelsay@protonmail.com"},"_npmVersion":"10.8.2","description":"Secure Nostr Software Toolkit for Renegades - A comprehensive TypeScript library for Nostr protocol implementation","directories":{},"_nodeVersion":"20.19.3","dependencies":{"ws":"^8.15.1","zod":"^3.22.4","@scure/base":"^1.2.4","@noble/curves":"^1.8.1","@noble/hashes":"^1.3.3","@noble/ciphers":"^0.4.1","websocket-polyfill":"^0.0.3","light-bolt11-decoder":"^3.2.0"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^29.7.0","eslint":"^8.56.0","rimraf":"^3.0.2","ts-jest":"^29.1.1","ts-node":"^10.9.2","prettier":"^3.1.1","@types/ws":"^8.18.0","browserify":"^17.0.1","typescript":"^5.3.3","@types/jest":"^29.5.11","@types/node":"^20.10.6","@typescript-eslint/parser":"^6.17.0","@typescript-eslint/eslint-plugin":"^6.17.0"},"_npmOperationalInternal":{"tmp":"tmp/snstr_0.1.2_1755379170999_0.9745951635403343","host":"s3://npm-registry-packages-npm-production"}},"0.1.3":{"name":"snstr","version":"0.1.3","keywords":["nostr","nostr-protocol","event","client","relay","typescript","lightweight","nip46","remote-signing","encryption","nip47","wallet-connect","lightning"],"author":{"name":"plebdev"},"license":"MIT","_id":"snstr@0.1.3","maintainers":[{"name":"bitcoinplebdev","email":"austinkelsay@protonmail.com"}],"dist":{"shasum":"45cc310651f1c35928e5e34145f6c6f2035cdc21","tarball":"https://registry.npmjs.org/snstr/-/snstr-0.1.3.tgz","fileCount":118,"integrity":"sha512-UhwOYz66TbKGQwb5Ow0SxeBT5B0ziSv3rMcFxIZuw/pHefkDwVjjMiiyATPJdPMRDw6SFWUmiTAtKjL3Tmmgrw==","signatures":[{"sig":"MEQCIG9WanAZH1FkDZF4M2HhTZnwvunfRU524XZcpldFO2ieAiBIq17S+Ugq1ZWiRf5GwIX4AF6TJi9lgwlADp5vWZZ7pA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":911891},"main":"dist/src/index.js","types":"dist/src/index.d.ts","exports":{".":{"types":"./dist/src/index.d.ts","browser":"./dist/src/entries/index.web.js","default":"./dist/src/index.js","react-native":"./dist/src/entries/index.web.js"},"./nip04":{"types":"./dist/src/nip04/index.d.ts","browser":"./dist/src/nip04/web.js","default":"./dist/src/nip04/index.js","react-native":"./dist/src/nip04/web.js"}},"gitHead":"f5c84a11a3b0cfb3bcc9e63262e8d2914f728440","scripts":{"lint":"eslint . --ext .ts","test":"jest","build":"rimraf dist && tsc","start":"npm run example:nip07","format":"prettier --write \"src/**/*.ts\" \"tests/**/*.ts\" \"examples/**/*.ts\"","example":"ts-node examples/basic-example.ts","promote":"scripts/promote-to-main.sh","release":"npm run release:patch && npm run release:push","// Build":"-------------- Build Commands --------------","test:all":"npm test","test:core":"jest tests/nip01","// Release":"-------------- Release Commands --------------","example:dm":"ts-node examples/nip04/direct-message.ts","test:event":"jest tests/nip01/event/event.test.ts","test:nip01":"jest tests/nip01","test:nip02":"jest tests/nip02","test:nip04":"jest tests/nip04","test:nip05":"jest tests/nip05","test:nip07":"jest tests/nip07","test:nip09":"jest tests/nip09","test:nip10":"jest tests/nip10","test:nip11":"jest tests/nip11","test:nip17":"jest tests/nip17","test:nip19":"jest tests/nip19","test:nip21":"jest tests/nip21","test:nip44":"jest tests/nip44","test:nip46":"jest tests/nip46","test:nip47":"jest tests/nip47","test:nip50":"jest tests/nip50","test:nip57":"jest tests/nip57","test:nip65":"jest tests/nip65","test:nip66":"jest tests/nip66","test:nostr":"jest tests/nip01/nostr.test.ts","test:relay":"jest tests/nip01/relay","test:watch":"jest --watch","// Test NIP":"-------------- NIP-specific Tests --------------","example:all":"npm run example","test:crypto":"jest tests/crypto.test.ts tests/nip04 tests/nip44","// Test Core":"-------------- Core Component Tests --------------","// Test Main":"-------------- Main Test Commands --------------","release:push":"git push && git push --tags","example:basic":"npm run example && npm run example:crypto && npm run example:dm","example:debug":"DEBUG=true ts-node examples/basic-example.ts","example:nip01":"npm run example:nip01:event:ordering && npm run example:nip01:relay:connection && npm run example:nip01:relay:query && npm run example:nip01:validation","example:nip02":"ts-node examples/nip02/nip02-demo.ts","example:nip04":"ts-node examples/nip04/direct-message.ts","example:nip05":"ts-node examples/nip05/nip05-demo.ts","example:nip07":"cd examples/nip07 && npm install && npm run build && npm start","example:nip09":"ts-node examples/nip09/deletion-request.ts","example:nip10":"ts-node examples/nip10/nip10-demo.ts","example:nip11":"ts-node examples/nip11/relay-info-example.ts","example:nip17":"ts-node examples/nip17/nip17-demo.ts","example:nip19":"ts-node examples/nip19/nip19-demo.ts","example:nip21":"ts-node examples/nip21/nip21-demo.ts","example:nip44":"ts-node examples/nip44/nip44-demo.ts","example:nip46":"ts-node examples/nip46/unified-example.ts","example:nip47":"ts-node examples/nip47/basic-example.ts","example:nip50":"ts-node examples/nip50/search-demo.ts","example:nip57":"ts-node examples/nip57/basic-example.ts","example:nip65":"ts-node examples/nip65/nip65-demo.ts","example:nip66":"ts-node examples/nip66/nip66-demo.ts","release:major":"npm run release:prepare && npm version major","release:minor":"npm run release:prepare && npm version minor","release:patch":"npm run release:prepare && npm version patch","test:coverage":"jest --coverage","test:identity":"jest tests/nip05 tests/nip07 tests/nip19","// Example NIP":"-------------- Other NIP Examples --------------","// Test Groups":"-------------- Test Category Groups --------------","build:examples":"tsc -p examples/tsconfig.json","example:crypto":"ts-node examples/crypto-demo.ts","test:event:all":"jest tests/nip01/event","test:protocols":"jest tests/nip46 tests/nip47 tests/nip57","example:verbose":"VERBOSE=true ts-node examples/basic-example.ts","release:prepare":"npm run lint && npm test && npm run build","// App Shortcuts":"-------------- Application Shortcuts --------------","// Example Basic":"-------------- Basic Examples --------------","// Lint & Format":"-------------- Code Quality --------------","example:advanced":"npm run example:nip46 && npm run example:nip47:error-handling","example:identity":"npm run example:nip05 && npm run example:nip07 && npm run example:nip19","example:nip07:dm":"ts-node examples/nip07/direct-message.ts","example:nip44:js":"node examples/nip44/nip44-demo.js","example:payments":"npm run example:nip47 && npm run example:nip57","test:crypto:core":"jest tests/utils/crypto.test.ts","test:integration":"jest tests/integration.test.ts","test:nip01:event":"jest tests/nip01/event","test:nip01:relay":"jest tests/nip01/relay","// Example Groups":"-------------- Example Category Groups --------------","// Example NIP-01":"-------------- NIP-01 Examples --------------","example:messaging":"npm run example:dm && npm run example:nip04 && npm run example:nip44 && npm run example:nip17","example:nip19:tlv":"ts-node examples/nip19/tlv-example.ts","example:nip19:demo":"ts-node examples/nip19/nip19-demo.ts","example:validation":"npm run example:nip01:validation","example:nip07:build":"cd examples/nip07 && npm install && npm run build","example:nip46:basic":"ts-node examples/nip46/basic-example.ts","example:nip47:nip44":"ts-node examples/nip47/nip44-encryption.ts","example:nip57:lnurl":"ts-node examples/nip57/lnurl-server-simulation.ts","example:rate-limits":"ts-node examples/rate-limit-configuration-example.ts","test:event:ordering":"jest tests/nip01/event/event-ordering.test.ts","test:utils:relayUrl":"jest tests/utils/relayUrl.test.ts","// Branch Management":"-------------- Branch Management --------------","example:nip19:bech32":"ts-node examples/nip19/bech32-example.ts","example:nip46:simple":"ts-node examples/nip46/simple/simple-example.ts","example:nip57:client":"ts-node examples/nip57/zap-client-example.ts","example:nip46:minimal":"ts-node examples/nip46/minimal.ts","example:nip47:verbose":"VERBOSE=true ts-node examples/nip47/basic-example.ts","test:nip01:relay:pool":"jest tests/nip01/relay/relayPool.test.ts","example:nip19:security":"ts-node examples/nip19/nip19-security.ts","example:nip46:advanced":"ts-node examples/nip46/advanced/remote-signing-demo.ts","example:nip46:test-all":"ts-node examples/nip46/test-all-examples.ts","test:event:addressable":"jest tests/nip01/event/addressable-events.test.ts","test:nip01:relay:filter":"jest tests/nip01/relay/filters.test.ts","example:custom-websocket":"ts-node examples/custom-websocket-example.ts","example:nip01:relay:pool":"ts-node examples/nip01/relay/relay-pool-example.ts","example:nip01:validation":"ts-node examples/client/validation-flow.ts","example:nip19:validation":"ts-node examples/nip19/validation-example.ts","example:nip44:compliance":"ts-node examples/nip44/nip44-compliance-demo.ts","example:nip47:expiration":"ts-node examples/nip47/request-expiration-example.ts","example:nip57:validation":"ts-node examples/nip57/invoice-validation-example.ts","example:nip01:relay:query":"ts-node examples/nip01/relay/relay-query-example.ts","example:nip44:test-vector":"ts-node examples/nip44/nip44-test-vector.ts","example:nip46:from-scratch":"ts-node examples/nip46/from-scratch/implementation-from-scratch.ts","test:nip01:relay:reconnect":"jest tests/nip01/relay/relay-reconnect.test.ts","test:nip01:relay:websocket":"jest tests/nip01/relay/websocket-implementation.test.ts","example:nip01:relay:filters":"ts-node examples/nip01/relay/filter-types-example.ts","example:nip46:simple-client":"ts-node examples/nip46/simple/simple-client-test.ts","test:nip01:relay:connection":"jest tests/nip01/relay/relay.test.ts","example:nip01:event:ordering":"ts-node examples/nip01/event/event-ordering-demo.ts","example:nip44:version-compat":"ts-node examples/nip44/nip44-version-compatibility.ts","example:nip47:client-service":"ts-node examples/nip47/basic-client-service.ts","example:nip47:error-handling":"ts-node examples/nip47/error-handling-example.ts","example:nip01:relay:reconnect":"ts-node examples/nip01/relay/relay-reconnect-example.ts","example:nip01:relay:auto-close":"ts-node examples/nip01/relay/auto-unsubscribe-example.ts","example:nip01:relay:connection":"ts-node examples/nip01/relay/relay-connection-example.ts","example:nip19:security-example":"ts-node examples/nip19/security-example.ts","example:nip01:event:addressable":"ts-node examples/nip01/event/addressable-events.ts","example:nip01:event:replaceable":"ts-node examples/nip01/event/replaceable-events.ts","example:nip01:url-preprocessing":"ts-node examples/nip01/url-preprocessing-example.ts","example:nip02:pubkey-normalization":"ts-node examples/nip02/pubkey-normalization-example.ts","example:nip47:encryption-negotiation":"ts-node examples/nip47/encryption-negotiation.ts","example:nip01:relay:pool-url-normalization":"ts-node examples/nip01/relay-pool-url-normalization-example.ts","example:nip46:connection-string-validation":"ts-node examples/nip46/connection-string-validation-example.ts"},"_npmUser":{"name":"bitcoinplebdev","email":"austinkelsay@protonmail.com"},"_npmVersion":"10.8.2","description":"Secure Nostr Software Toolkit for Renegades - A comprehensive TypeScript library for Nostr protocol implementation","directories":{},"_nodeVersion":"20.19.3","dependencies":{"ws":"^8.15.1","zod":"^3.22.4","crypto-js":"^4.2.0","@scure/base":"^1.2.4","@noble/curves":"^1.8.1","@noble/hashes":"^1.3.3","@noble/ciphers":"^0.4.1","websocket-polyfill":"^0.0.3","light-bolt11-decoder":"^3.2.0"},"react-native":"dist/src/entries/index.web.js","_hasShrinkwrap":false,"devDependencies":{"jest":"^29.7.0","eslint":"^8.56.0","rimraf":"^3.0.2","ts-jest":"^29.1.1","ts-node":"^10.9.2","prettier":"^3.1.1","@types/ws":"^8.18.0","browserify":"^17.0.1","typescript":"^5.3.3","@types/jest":"^29.5.11","@types/node":"^20.10.6","@typescript-eslint/parser":"^6.17.0","@typescript-eslint/eslint-plugin":"^6.17.0"},"_npmOperationalInternal":{"tmp":"tmp/snstr_0.1.3_1758306070499_0.5119338715938979","host":"s3://npm-registry-packages-npm-production"}},"0.1.4":{"name":"snstr","version":"0.1.4","keywords":["nostr","nostr-protocol","event","client","relay","typescript","lightweight","nip46","remote-signing","encryption","nip47","wallet-connect","lightning"],"author":{"name":"plebdev"},"license":"MIT","_id":"snstr@0.1.4","maintainers":[{"name":"bitcoinplebdev","email":"austinkelsay@protonmail.com"}],"dist":{"shasum":"5249e2daed3d67cdd20aa1b4c46c3d2e361e6d95","tarball":"https://registry.npmjs.org/snstr/-/snstr-0.1.4.tgz","fileCount":118,"integrity":"sha512-+lUuijpJUc+qT5MhYBBwGIATgoWoZ8E7TIsd5/z7ph2bs0S3pgs5IkJV6EAD4L7UTFOhDKjTlli2ITiMP6RUkg==","signatures":[{"sig":"MEUCIQDPCcaSm0YzqJKWI9VW5iwzRBStEaB36RB94qaFmRSvwwIgNPFqIHPfn9c4z71fZ1Y7zu09AGHDV89Ul5/a1/BE3MI=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":910217},"main":"dist/src/index.js","types":"dist/src/index.d.ts","exports":{".":{"types":"./dist/src/index.d.ts","browser":"./dist/src/entries/index.web.js","default":"./dist/src/index.js","react-native":"./dist/src/entries/index.web.js"},"./nip04":{"types":"./dist/src/nip04/index.d.ts","browser":"./dist/src/nip04/web.js","default":"./dist/src/nip04/index.js","react-native":"./dist/src/nip04/web.js"}},"gitHead":"2f1065c38c030d83ca4da94853d5bc867e55c77e","scripts":{"lint":"eslint . --ext .ts","test":"jest","build":"rimraf dist && tsc","start":"npm run example:nip07","format":"prettier --write \"src/**/*.ts\" \"tests/**/*.ts\" \"examples/**/*.ts\"","example":"ts-node examples/basic-example.ts","promote":"scripts/promote-to-main.sh","release":"npm run release:patch && npm run release:push","// Build":"-------------- Build Commands --------------","test:all":"npm test","test:core":"jest tests/nip01","// Release":"-------------- Release Commands --------------","example:dm":"ts-node examples/nip04/direct-message.ts","test:event":"jest tests/nip01/event/event.test.ts","test:nip01":"jest tests/nip01","test:nip02":"jest tests/nip02","test:nip04":"jest tests/nip04","test:nip05":"jest tests/nip05","test:nip07":"jest tests/nip07","test:nip09":"jest tests/nip09","test:nip10":"jest tests/nip10","test:nip11":"jest tests/nip11","test:nip17":"jest tests/nip17","test:nip19":"jest tests/nip19","test:nip21":"jest tests/nip21","test:nip44":"jest tests/nip44","test:nip46":"jest tests/nip46","test:nip47":"jest tests/nip47","test:nip50":"jest tests/nip50","test:nip57":"jest tests/nip57","test:nip65":"jest tests/nip65","test:nip66":"jest tests/nip66","test:nostr":"jest tests/nip01/nostr.test.ts","test:relay":"jest tests/nip01/relay","test:watch":"jest --watch","// Test NIP":"-------------- NIP-specific Tests --------------","example:all":"npm run example","test:crypto":"jest tests/crypto.test.ts tests/nip04 tests/nip44","// Test Core":"-------------- Core Component Tests --------------","// Test Main":"-------------- Main Test Commands --------------","release:push":"git push && git push --tags","example:basic":"npm run example && npm run example:crypto && npm run example:dm","example:debug":"DEBUG=true ts-node examples/basic-example.ts","example:nip01":"npm run example:nip01:event:ordering && npm run example:nip01:relay:connection && npm run example:nip01:relay:query && npm run example:nip01:validation","example:nip02":"ts-node examples/nip02/nip02-demo.ts","example:nip04":"ts-node examples/nip04/direct-message.ts","example:nip05":"ts-node examples/nip05/nip05-demo.ts","example:nip07":"cd examples/nip07 && npm install && npm run build && npm start","example:nip09":"ts-node examples/nip09/deletion-request.ts","example:nip10":"ts-node examples/nip10/nip10-demo.ts","example:nip11":"ts-node examples/nip11/relay-info-example.ts","example:nip17":"ts-node examples/nip17/nip17-demo.ts","example:nip19":"ts-node examples/nip19/nip19-demo.ts","example:nip21":"ts-node examples/nip21/nip21-demo.ts","example:nip44":"ts-node examples/nip44/nip44-demo.ts","example:nip46":"ts-node examples/nip46/unified-example.ts","example:nip47":"ts-node examples/nip47/basic-example.ts","example:nip50":"ts-node examples/nip50/search-demo.ts","example:nip57":"ts-node examples/nip57/basic-example.ts","example:nip65":"ts-node examples/nip65/nip65-demo.ts","example:nip66":"ts-node examples/nip66/nip66-demo.ts","release:major":"npm run release:prepare && npm version major","release:minor":"npm run release:prepare && npm version minor","release:patch":"npm run release:prepare && npm version patch","test:coverage":"jest --coverage","test:identity":"jest tests/nip05 tests/nip07 tests/nip19","// Example NIP":"-------------- Other NIP Examples --------------","// Test Groups":"-------------- Test Category Groups --------------","build:examples":"tsc -p examples/tsconfig.json","example:crypto":"ts-node examples/crypto-demo.ts","test:event:all":"jest tests/nip01/event","test:protocols":"jest tests/nip46 tests/nip47 tests/nip57","example:verbose":"VERBOSE=true ts-node examples/basic-example.ts","release:prepare":"npm run lint && npm test && npm run build","// App Shortcuts":"-------------- Application Shortcuts --------------","// Example Basic":"-------------- Basic Examples --------------","// Lint & Format":"-------------- Code Quality --------------","example:advanced":"npm run example:nip46 && npm run example:nip47:error-handling","example:identity":"npm run example:nip05 && npm run example:nip07 && npm run example:nip19","example:nip07:dm":"ts-node examples/nip07/direct-message.ts","example:nip44:js":"node examples/nip44/nip44-demo.js","example:payments":"npm run example:nip47 && npm run example:nip57","test:crypto:core":"jest tests/utils/crypto.test.ts","test:integration":"jest tests/integration.test.ts","test:nip01:event":"jest tests/nip01/event","test:nip01:relay":"jest tests/nip01/relay","// Example Groups":"-------------- Example Category Groups --------------","// Example NIP-01":"-------------- NIP-01 Examples --------------","example:messaging":"npm run example:dm && npm run example:nip04 && npm run example:nip44 && npm run example:nip17","example:nip19:tlv":"ts-node examples/nip19/tlv-example.ts","example:nip19:demo":"ts-node examples/nip19/nip19-demo.ts","example:validation":"npm run example:nip01:validation","example:nip07:build":"cd examples/nip07 && npm install && npm run build","example:nip46:basic":"ts-node examples/nip46/basic-example.ts","example:nip47:nip44":"ts-node examples/nip47/nip44-encryption.ts","example:nip57:lnurl":"ts-node examples/nip57/lnurl-server-simulation.ts","example:rate-limits":"ts-node examples/rate-limit-configuration-example.ts","test:event:ordering":"jest tests/nip01/event/event-ordering.test.ts","test:utils:relayUrl":"jest tests/utils/relayUrl.test.ts","// Branch Management":"-------------- Branch Management --------------","example:nip19:bech32":"ts-node examples/nip19/bech32-example.ts","example:nip46:simple":"ts-node examples/nip46/simple/simple-example.ts","example:nip57:client":"ts-node examples/nip57/zap-client-example.ts","example:nip46:minimal":"ts-node examples/nip46/minimal.ts","example:nip47:verbose":"VERBOSE=true ts-node examples/nip47/basic-example.ts","test:nip01:relay:pool":"jest tests/nip01/relay/relayPool.test.ts","example:nip19:security":"ts-node examples/nip19/nip19-security.ts","example:nip46:advanced":"ts-node examples/nip46/advanced/remote-signing-demo.ts","example:nip46:test-all":"ts-node examples/nip46/test-all-examples.ts","test:event:addressable":"jest tests/nip01/event/addressable-events.test.ts","test:nip01:relay:filter":"jest tests/nip01/relay/filters.test.ts","example:custom-websocket":"ts-node examples/custom-websocket-example.ts","example:nip01:relay:pool":"ts-node examples/nip01/relay/relay-pool-example.ts","example:nip01:validation":"ts-node examples/client/validation-flow.ts","example:nip19:validation":"ts-node examples/nip19/validation-example.ts","example:nip44:compliance":"ts-node examples/nip44/nip44-compliance-demo.ts","example:nip47:expiration":"ts-node examples/nip47/request-expiration-example.ts","example:nip57:validation":"ts-node examples/nip57/invoice-validation-example.ts","example:nip01:relay:query":"ts-node examples/nip01/relay/relay-query-example.ts","example:nip44:test-vector":"ts-node examples/nip44/nip44-test-vector.ts","example:nip46:from-scratch":"ts-node examples/nip46/from-scratch/implementation-from-scratch.ts","test:nip01:relay:reconnect":"jest tests/nip01/relay/relay-reconnect.test.ts","test:nip01:relay:websocket":"jest tests/nip01/relay/websocket-implementation.test.ts","example:nip01:relay:filters":"ts-node examples/nip01/relay/filter-types-example.ts","example:nip46:simple-client":"ts-node examples/nip46/simple/simple-client-test.ts","test:nip01:relay:connection":"jest tests/nip01/relay/relay.test.ts","example:nip01:event:ordering":"ts-node examples/nip01/event/event-ordering-demo.ts","example:nip44:version-compat":"ts-node examples/nip44/nip44-version-compatibility.ts","example:nip47:client-service":"ts-node examples/nip47/basic-client-service.ts","example:nip47:error-handling":"ts-node examples/nip47/error-handling-example.ts","example:nip01:relay:reconnect":"ts-node examples/nip01/relay/relay-reconnect-example.ts","example:nip01:relay:auto-close":"ts-node examples/nip01/relay/auto-unsubscribe-example.ts","example:nip01:relay:connection":"ts-node examples/nip01/relay/relay-connection-example.ts","example:nip19:security-example":"ts-node examples/nip19/security-example.ts","example:nip01:event:addressable":"ts-node examples/nip01/event/addressable-events.ts","example:nip01:event:replaceable":"ts-node examples/nip01/event/replaceable-events.ts","example:nip01:url-preprocessing":"ts-node examples/nip01/url-preprocessing-example.ts","example:nip02:pubkey-normalization":"ts-node examples/nip02/pubkey-normalization-example.ts","example:nip47:encryption-negotiation":"ts-node examples/nip47/encryption-negotiation.ts","example:nip01:relay:pool-url-normalization":"ts-node examples/nip01/relay-pool-url-normalization-example.ts","example:nip46:connection-string-validation":"ts-node examples/nip46/connection-string-validation-example.ts"},"_npmUser":{"name":"bitcoinplebdev","email":"austinkelsay@protonmail.com"},"_npmVersion":"10.8.2","description":"Secure Nostr Software Toolkit for Renegades - A comprehensive TypeScript library for Nostr protocol implementation","directories":{},"_nodeVersion":"20.19.3","dependencies":{"ws":"^8.15.1","zod":"^3.22.4","crypto-js":"^4.2.0","@scure/base":"^1.2.4","@noble/curves":"^1.8.1","@noble/hashes":"^1.3.3","@noble/ciphers":"^0.4.1","websocket-polyfill":"^0.0.3","light-bolt11-decoder":"^3.2.0"},"react-native":"dist/src/entries/index.web.js","_hasShrinkwrap":false,"devDependencies":{"jest":"^29.7.0","eslint":"^8.56.0","rimraf":"^3.0.2","ts-jest":"^29.1.1","ts-node":"^10.9.2","prettier":"^3.1.1","@types/ws":"^8.18.0","browserify":"^17.0.1","typescript":"^5.3.3","@types/jest":"^29.5.11","@types/node":"^20.10.6","@typescript-eslint/parser":"^6.17.0","@typescript-eslint/eslint-plugin":"^6.17.0"},"_npmOperationalInternal":{"tmp":"tmp/snstr_0.1.4_1758317742569_0.6497622486918913","host":"s3://npm-registry-packages-npm-production"}},"0.1.5":{"name":"snstr","version":"0.1.5","keywords":["nostr","nostr-protocol","event","client","relay","typescript","lightweight","nip46","remote-signing","encryption","nip47","wallet-connect","lightning"],"author":{"name":"plebdev"},"license":"MIT","_id":"snstr@0.1.5","maintainers":[{"name":"bitcoinplebdev","email":"austinkelsay@protonmail.com"}],"dist":{"shasum":"767183fe97ea2fbcc829c156b91d161d60a5e87f","tarball":"https://registry.npmjs.org/snstr/-/snstr-0.1.5.tgz","fileCount":121,"integrity":"sha512-inwpdduc1bo3sHa3/zYIw6ggu5wHrh/POv4LfvpYMDwvi9ma0jPbjTRhKaIOeVlEp0wPKZ0YAVUWVO2bEXPfCQ==","signatures":[{"sig":"MEYCIQCdUkvlZucV/8Rez4rPtgKJMVjkCeEb/kv6tF34UmQmygIhANk9zNnxISxPUsAvoswNqDjWqiUR+mvuIGrNOvjmGBgb","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":928808},"main":"dist/src/index.js","types":"dist/src/index.d.ts","exports":{".":{"types":"./dist/src/index.d.ts","browser":"./dist/src/entries/index.web.js","default":"./dist/src/index.js","react-native":"./dist/src/entries/index.web.js"},"./nip04":{"types":"./dist/src/nip04/index.d.ts","browser":"./dist/src/nip04/web.js","default":"./dist/src/nip04/index.js","react-native":"./dist/src/nip04/web.js"}},"gitHead":"5f0e86a8490801a04388f75648053bd6890efb1e","scripts":{"lint":"eslint . --ext .ts","test":"jest","build":"rimraf dist && tsc","start":"npm run example:nip07","format":"prettier --write \"src/**/*.ts\" \"tests/**/*.ts\" \"examples/**/*.ts\"","example":"ts-node examples/basic-example.ts","promote":"scripts/promote-to-main.sh","release":"npm run release:patch && npm run release:push","// Build":"-------------- Build Commands --------------","test:all":"npm test","test:core":"jest tests/nip01","// Release":"-------------- Release Commands --------------","example:dm":"ts-node examples/nip04/direct-message.ts","test:event":"jest tests/nip01/event/event.test.ts","test:nip01":"jest tests/nip01","test:nip02":"jest tests/nip02","test:nip04":"jest tests/nip04","test:nip05":"jest tests/nip05","test:nip07":"jest tests/nip07","test:nip09":"jest tests/nip09","test:nip10":"jest tests/nip10","test:nip11":"jest tests/nip11","test:nip17":"jest tests/nip17","test:nip19":"jest tests/nip19","test:nip21":"jest tests/nip21","test:nip44":"jest tests/nip44","test:nip46":"jest tests/nip46","test:nip47":"jest tests/nip47","test:nip50":"jest tests/nip50","test:nip57":"jest tests/nip57","test:nip65":"jest tests/nip65","test:nip66":"jest tests/nip66","test:nostr":"jest tests/nip01/nostr.test.ts","test:relay":"jest tests/nip01/relay","test:watch":"jest --watch","// Test NIP":"-------------- NIP-specific Tests --------------","example:all":"npm run example","test:crypto":"jest tests/crypto.test.ts tests/nip04 tests/nip44","// Test Core":"-------------- Core Component Tests --------------","// Test Main":"-------------- Main Test Commands --------------","release:push":"git push && git push --tags","example:basic":"npm run example && npm run example:crypto && npm run example:dm","example:debug":"DEBUG=true ts-node examples/basic-example.ts","example:nip01":"npm run example:nip01:event:ordering && npm run example:nip01:relay:connection && npm run example:nip01:relay:query && npm run example:nip01:validation","example:nip02":"ts-node examples/nip02/nip02-demo.ts","example:nip04":"ts-node examples/nip04/direct-message.ts","example:nip05":"ts-node examples/nip05/nip05-demo.ts","example:nip07":"cd examples/nip07 && npm install && npm run build && npm start","example:nip09":"ts-node examples/nip09/deletion-request.ts","example:nip10":"ts-node examples/nip10/nip10-demo.ts","example:nip11":"ts-node examples/nip11/relay-info-example.ts","example:nip17":"ts-node examples/nip17/nip17-demo.ts","example:nip19":"ts-node examples/nip19/nip19-demo.ts","example:nip21":"ts-node examples/nip21/nip21-demo.ts","example:nip44":"ts-node examples/nip44/nip44-demo.ts","example:nip46":"ts-node examples/nip46/unified-example.ts","example:nip47":"ts-node examples/nip47/basic-example.ts","example:nip50":"ts-node examples/nip50/search-demo.ts","example:nip57":"ts-node examples/nip57/basic-example.ts","example:nip65":"ts-node examples/nip65/nip65-demo.ts","example:nip66":"ts-node examples/nip66/nip66-demo.ts","release:major":"npm run release:prepare && npm version major","release:minor":"npm run release:prepare && npm version minor","release:patch":"npm run release:prepare && npm version patch","test:coverage":"jest --coverage","test:identity":"jest tests/nip05 tests/nip07 tests/nip19","// Example NIP":"-------------- Other NIP Examples --------------","// Test Groups":"-------------- Test Category Groups --------------","build:examples":"tsc -p examples/tsconfig.json","example:crypto":"ts-node examples/crypto-demo.ts","test:event:all":"jest tests/nip01/event","test:protocols":"jest tests/nip46 tests/nip47 tests/nip57","example:verbose":"VERBOSE=true ts-node examples/basic-example.ts","release:prepare":"npm run lint && npm test && npm run build","// App Shortcuts":"-------------- Application Shortcuts --------------","// Example Basic":"-------------- Basic Examples --------------","// Lint & Format":"-------------- Code Quality --------------","example:advanced":"npm run example:nip46 && npm run example:nip47:error-handling","example:identity":"npm run example:nip05 && npm run example:nip07 && npm run example:nip19","example:nip07:dm":"ts-node examples/nip07/direct-message.ts","example:nip44:js":"node examples/nip44/nip44-demo.js","example:payments":"npm run example:nip47 && npm run example:nip57","test:crypto:core":"jest tests/utils/crypto.test.ts","test:integration":"jest tests/integration.test.ts","test:nip01:event":"jest tests/nip01/event","test:nip01:relay":"jest tests/nip01/relay","// Example Groups":"-------------- Example Category Groups --------------","// Example NIP-01":"-------------- NIP-01 Examples --------------","example:messaging":"npm run example:dm && npm run example:nip04 && npm run example:nip44 && npm run example:nip17","example:nip19:tlv":"ts-node examples/nip19/tlv-example.ts","example:nip19:demo":"ts-node examples/nip19/nip19-demo.ts","example:validation":"npm run example:nip01:validation","example:nip07:build":"cd examples/nip07 && npm install && npm run build","example:nip46:basic":"ts-node examples/nip46/basic-example.ts","example:nip47:nip44":"ts-node examples/nip47/nip44-encryption.ts","example:nip57:lnurl":"ts-node examples/nip57/lnurl-server-simulation.ts","example:rate-limits":"ts-node examples/rate-limit-configuration-example.ts","test:event:ordering":"jest tests/nip01/event/event-ordering.test.ts","test:utils:relayUrl":"jest tests/utils/relayUrl.test.ts","// Branch Management":"-------------- Branch Management --------------","example:nip19:bech32":"ts-node examples/nip19/bech32-example.ts","example:nip46:simple":"ts-node examples/nip46/simple/simple-example.ts","example:nip57:client":"ts-node examples/nip57/zap-client-example.ts","example:nip46:minimal":"ts-node examples/nip46/minimal.ts","example:nip47:verbose":"VERBOSE=true ts-node examples/nip47/basic-example.ts","test:nip01:relay:pool":"jest tests/nip01/relay/relayPool.test.ts","example:nip19:security":"ts-node examples/nip19/nip19-security.ts","example:nip46:advanced":"ts-node examples/nip46/advanced/remote-signing-demo.ts","example:nip46:test-all":"ts-node examples/nip46/test-all-examples.ts","test:event:addressable":"jest tests/nip01/event/addressable-events.test.ts","test:nip01:relay:filter":"jest tests/nip01/relay/filters.test.ts","example:custom-websocket":"ts-node examples/custom-websocket-example.ts","example:nip01:relay:pool":"ts-node examples/nip01/relay/relay-pool-example.ts","example:nip01:validation":"ts-node examples/client/validation-flow.ts","example:nip19:validation":"ts-node examples/nip19/validation-example.ts","example:nip44:compliance":"ts-node examples/nip44/nip44-compliance-demo.ts","example:nip47:expiration":"ts-node examples/nip47/request-expiration-example.ts","example:nip57:validation":"ts-node examples/nip57/invoice-validation-example.ts","example:nip01:relay:query":"ts-node examples/nip01/relay/relay-query-example.ts","example:nip44:test-vector":"ts-node examples/nip44/nip44-test-vector.ts","example:nip46:from-scratch":"ts-node examples/nip46/from-scratch/implementation-from-scratch.ts","test:nip01:relay:reconnect":"jest tests/nip01/relay/relay-reconnect.test.ts","test:nip01:relay:websocket":"jest tests/nip01/relay/websocket-implementation.test.ts","example:nip01:relay:filters":"ts-node examples/nip01/relay/filter-types-example.ts","example:nip46:simple-client":"ts-node examples/nip46/simple/simple-client-test.ts","test:nip01:relay:connection":"jest tests/nip01/relay/relay.test.ts","example:nip01:event:ordering":"ts-node examples/nip01/event/event-ordering-demo.ts","example:nip44:version-compat":"ts-node examples/nip44/nip44-version-compatibility.ts","example:nip47:client-service":"ts-node examples/nip47/basic-client-service.ts","example:nip47:error-handling":"ts-node examples/nip47/error-handling-example.ts","example:nip01:relay:reconnect":"ts-node examples/nip01/relay/relay-reconnect-example.ts","example:nip01:relay:auto-close":"ts-node examples/nip01/relay/auto-unsubscribe-example.ts","example:nip01:relay:connection":"ts-node examples/nip01/relay/relay-connection-example.ts","example:nip19:security-example":"ts-node examples/nip19/security-example.ts","example:nip01:event:addressable":"ts-node examples/nip01/event/addressable-events.ts","example:nip01:event:replaceable":"ts-node examples/nip01/event/replaceable-events.ts","example:nip01:url-preprocessing":"ts-node examples/nip01/url-preprocessing-example.ts","example:nip02:pubkey-normalization":"ts-node examples/nip02/pubkey-normalization-example.ts","example:nip47:encryption-negotiation":"ts-node examples/nip47/encryption-negotiation.ts","example:nip01:relay:pool-url-normalization":"ts-node examples/nip01/relay-pool-url-normalization-example.ts","example:nip46:connection-string-validation":"ts-node examples/nip46/connection-string-validation-example.ts"},"_npmUser":{"name":"bitcoinplebdev","email":"austinkelsay@protonmail.com"},"_npmVersion":"11.6.2","description":"Secure Nostr Software Toolkit for Renegades - A comprehensive TypeScript library for Nostr protocol implementation","directories":{},"_nodeVersion":"25.1.0","dependencies":{"ws":"^8.15.1","zod":"^3.22.4","crypto-js":"^4.2.0","@scure/base":"^1.2.4","@noble/curves":"^1.8.1","@noble/hashes":"^1.3.3","@noble/ciphers":"^0.4.1","websocket-polyfill":"^0.0.3","light-bolt11-decoder":"^3.2.0"},"react-native":"dist/src/entries/index.web.js","_hasShrinkwrap":false,"devDependencies":{"jest":"^29.7.0","eslint":"^8.56.0","rimraf":"^3.0.2","ts-jest":"^29.1.1","ts-node":"^10.9.2","prettier":"^3.1.1","@types/ws":"^8.18.0","browserify":"^17.0.1","typescript":"^5.3.3","@types/jest":"^29.5.11","@types/node":"^20.10.6","@typescript-eslint/parser":"^6.17.0","@typescript-eslint/eslint-plugin":"^6.17.0"},"_npmOperationalInternal":{"tmp":"tmp/snstr_0.1.5_1762456720209_0.6028220632185513","host":"s3://npm-registry-packages-npm-production"}},"0.1.6":{"name":"snstr","version":"0.1.6","keywords":["nostr","nostr-protocol","event","client","relay","typescript","lightweight","nip46","remote-signing","encryption","nip47","wallet-connect","lightning"],"author":{"name":"plebdev"},"license":"MIT","_id":"snstr@0.1.6","maintainers":[{"name":"bitcoinplebdev","email":"austinkelsay@protonmail.com"}],"dist":{"shasum":"db0cbe72b32b404c77cd4890b6a61d43edadccaf","tarball":"https://registry.npmjs.org/snstr/-/snstr-0.1.6.tgz","fileCount":121,"integrity":"sha512-UtL38YEwtyMih92H2cT3JdL/Ffnd4qKg8dhOzitR58K9nYuVmWPlASsTpNv752bK6dCTAJ4Phim2F08YTMDPZg==","signatures":[{"sig":"MEQCIFIRxU4sC0EFob42glq5vNuEMJSFWa+PZcN9oZTIc1S9AiBsTPy6DXp3igJzXytZOy4hoCncXFSt8rgSo/nmItO6JQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":928814},"main":"dist/src/index.js","types":"dist/src/index.d.ts","exports":{".":{"types":"./dist/src/index.d.ts","browser":"./dist/src/entries/index.web.js","default":"./dist/src/index.js","react-native":"./dist/src/entries/index.web.js"},"./nip04":{"types":"./dist/src/nip04/index.d.ts","browser":"./dist/src/nip04/web.js","default":"./dist/src/nip04/index.js","react-native":"./dist/src/nip04/web.js"}},"gitHead":"b6e09ed9f2ffea0f37673a65ae0213913083d19a","scripts":{"lint":"eslint . --ext .ts","test":"jest","build":"rimraf dist && tsc","start":"npm run example:nip07","format":"prettier --write \"src/**/*.ts\" \"tests/**/*.ts\" \"examples/**/*.ts\"","example":"ts-node examples/basic-example.ts","promote":"scripts/promote-to-main.sh","release":"npm run release:patch && npm run release:push","// Build":"-------------- Build Commands --------------","test:all":"npm test","test:core":"jest tests/nip01","// Release":"-------------- Release Commands --------------","example:dm":"ts-node examples/nip04/direct-message.ts","test:event":"jest tests/nip01/event/event.test.ts","test:nip01":"jest tests/nip01","test:nip02":"jest tests/nip02","test:nip04":"jest tests/nip04","test:nip05":"jest tests/nip05","test:nip07":"jest tests/nip07","test:nip09":"jest tests/nip09","test:nip10":"jest tests/nip10","test:nip11":"jest tests/nip11","test:nip17":"jest tests/nip17","test:nip19":"jest tests/nip19","test:nip21":"jest tests/nip21","test:nip44":"jest tests/nip44","test:nip46":"jest tests/nip46","test:nip47":"jest tests/nip47","test:nip50":"jest tests/nip50","test:nip57":"jest tests/nip57","test:nip65":"jest tests/nip65","test:nip66":"jest tests/nip66","test:nostr":"jest tests/nip01/nostr.test.ts","test:relay":"jest tests/nip01/relay","test:watch":"jest --watch","// Test NIP":"-------------- NIP-specific Tests --------------","example:all":"npm run example","test:crypto":"jest tests/crypto.test.ts tests/nip04 tests/nip44","// Test Core":"-------------- Core Component Tests --------------","// Test Main":"-------------- Main Test Commands --------------","release:push":"git push && git push --tags","example:basic":"npm run example && npm run example:crypto && npm run example:dm","example:debug":"DEBUG=true ts-node examples/basic-example.ts","example:nip01":"npm run example:nip01:event:ordering && npm run example:nip01:relay:connection && npm run example:nip01:relay:query && npm run example:nip01:validation","example:nip02":"ts-node examples/nip02/nip02-demo.ts","example:nip04":"ts-node examples/nip04/direct-message.ts","example:nip05":"ts-node examples/nip05/nip05-demo.ts","example:nip07":"cd examples/nip07 && npm install && npm run build && npm start","example:nip09":"ts-node examples/nip09/deletion-request.ts","example:nip10":"ts-node examples/nip10/nip10-demo.ts","example:nip11":"ts-node examples/nip11/relay-info-example.ts","example:nip17":"ts-node examples/nip17/nip17-demo.ts","example:nip19":"ts-node examples/nip19/nip19-demo.ts","example:nip21":"ts-node examples/nip21/nip21-demo.ts","example:nip44":"ts-node examples/nip44/nip44-demo.ts","example:nip46":"ts-node examples/nip46/unified-example.ts","example:nip47":"ts-node examples/nip47/basic-example.ts","example:nip50":"ts-node examples/nip50/search-demo.ts","example:nip57":"ts-node examples/nip57/basic-example.ts","example:nip65":"ts-node examples/nip65/nip65-demo.ts","example:nip66":"ts-node examples/nip66/nip66-demo.ts","release:major":"npm run release:prepare && npm version major","release:minor":"npm run release:prepare && npm version minor","release:patch":"npm run release:prepare && npm version patch","test:coverage":"jest --coverage","test:identity":"jest tests/nip05 tests/nip07 tests/nip19","// Example NIP":"-------------- Other NIP Examples --------------","// Test Groups":"-------------- Test Category Groups --------------","build:examples":"tsc -p examples/tsconfig.json","example:crypto":"ts-node examples/crypto-demo.ts","test:event:all":"jest tests/nip01/event","test:protocols":"jest tests/nip46 tests/nip47 tests/nip57","example:verbose":"VERBOSE=true ts-node examples/basic-example.ts","release:prepare":"npm run lint && npm test && npm run build","// App Shortcuts":"-------------- Application Shortcuts --------------","// Example Basic":"-------------- Basic Examples --------------","// Lint & Format":"-------------- Code Quality --------------","example:advanced":"npm run example:nip46 && npm run example:nip47:error-handling","example:identity":"npm run example:nip05 && npm run example:nip07 && npm run example:nip19","example:nip07:dm":"ts-node examples/nip07/direct-message.ts","example:nip44:js":"node examples/nip44/nip44-demo.js","example:payments":"npm run example:nip47 && npm run example:nip57","test:crypto:core":"jest tests/utils/crypto.test.ts","test:integration":"jest tests/integration.test.ts","test:nip01:event":"jest tests/nip01/event","test:nip01:relay":"jest tests/nip01/relay","// Example Groups":"-------------- Example Category Groups --------------","// Example NIP-01":"-------------- NIP-01 Examples --------------","example:messaging":"npm run example:dm && npm run example:nip04 && npm run example:nip44 && npm run example:nip17","example:nip19:tlv":"ts-node examples/nip19/tlv-example.ts","example:nip19:demo":"ts-node examples/nip19/nip19-demo.ts","example:validation":"npm run example:nip01:validation","example:nip07:build":"cd examples/nip07 && npm install && npm run build","example:nip46:basic":"ts-node examples/nip46/basic-example.ts","example:nip47:nip44":"ts-node examples/nip47/nip44-encryption.ts","example:nip57:lnurl":"ts-node examples/nip57/lnurl-server-simulation.ts","example:rate-limits":"ts-node examples/rate-limit-configuration-example.ts","test:event:ordering":"jest tests/nip01/event/event-ordering.test.ts","test:utils:relayUrl":"jest tests/utils/relayUrl.test.ts","// Branch Management":"-------------- Branch Management --------------","example:nip19:bech32":"ts-node examples/nip19/bech32-example.ts","example:nip46:simple":"ts-node examples/nip46/simple/simple-example.ts","example:nip57:client":"ts-node examples/nip57/zap-client-example.ts","example:nip46:minimal":"ts-node examples/nip46/minimal.ts","example:nip47:verbose":"VERBOSE=true ts-node examples/nip47/basic-example.ts","test:nip01:relay:pool":"jest tests/nip01/relay/relayPool.test.ts","example:nip19:security":"ts-node examples/nip19/nip19-security.ts","example:nip46:advanced":"ts-node examples/nip46/advanced/remote-signing-demo.ts","example:nip46:test-all":"ts-node examples/nip46/test-all-examples.ts","test:event:addressable":"jest tests/nip01/event/addressable-events.test.ts","test:nip01:relay:filter":"jest tests/nip01/relay/filters.test.ts","example:custom-websocket":"ts-node examples/custom-websocket-example.ts","example:nip01:relay:pool":"ts-node examples/nip01/relay/relay-pool-example.ts","example:nip01:validation":"ts-node examples/client/validation-flow.ts","example:nip19:validation":"ts-node examples/nip19/validation-example.ts","example:nip44:compliance":"ts-node examples/nip44/nip44-compliance-demo.ts","example:nip47:expiration":"ts-node examples/nip47/request-expiration-example.ts","example:nip57:validation":"ts-node examples/nip57/invoice-validation-example.ts","example:nip01:relay:query":"ts-node examples/nip01/relay/relay-query-example.ts","example:nip44:test-vector":"ts-node examples/nip44/nip44-test-vector.ts","example:nip46:from-scratch":"ts-node examples/nip46/from-scratch/implementation-from-scratch.ts","test:nip01:relay:reconnect":"jest tests/nip01/relay/relay-reconnect.test.ts","test:nip01:relay:websocket":"jest tests/nip01/relay/websocket-implementation.test.ts","example:nip01:relay:filters":"ts-node examples/nip01/relay/filter-types-example.ts","example:nip46:simple-client":"ts-node examples/nip46/simple/simple-client-test.ts","test:nip01:relay:connection":"jest tests/nip01/relay/relay.test.ts","example:nip01:event:ordering":"ts-node examples/nip01/event/event-ordering-demo.ts","example:nip44:version-compat":"ts-node examples/nip44/nip44-version-compatibility.ts","example:nip47:client-service":"ts-node examples/nip47/basic-client-service.ts","example:nip47:error-handling":"ts-node examples/nip47/error-handling-example.ts","example:nip01:relay:reconnect":"ts-node examples/nip01/relay/relay-reconnect-example.ts","example:nip01:relay:auto-close":"ts-node examples/nip01/relay/auto-unsubscribe-example.ts","example:nip01:relay:connection":"ts-node examples/nip01/relay/relay-connection-example.ts","example:nip19:security-example":"ts-node examples/nip19/security-example.ts","example:nip01:event:addressable":"ts-node examples/nip01/event/addressable-events.ts","example:nip01:event:replaceable":"ts-node examples/nip01/event/replaceable-events.ts","example:nip01:url-preprocessing":"ts-node examples/nip01/url-preprocessing-example.ts","example:nip02:pubkey-normalization":"ts-node examples/nip02/pubkey-normalization-example.ts","example:nip47:encryption-negotiation":"ts-node examples/nip47/encryption-negotiation.ts","example:nip01:relay:pool-url-normalization":"ts-node examples/nip01/relay-pool-url-normalization-example.ts","example:nip46:connection-string-validation":"ts-node examples/nip46/connection-string-validation-example.ts"},"_npmUser":{"name":"bitcoinplebdev","email":"austinkelsay@protonmail.com"},"deprecated":"Published with stale dist; please use >=0.1.8","_npmVersion":"11.6.2","description":"Secure Nostr Software Toolkit for Renegades - A comprehensive TypeScript library for Nostr protocol implementation","directories":{},"_nodeVersion":"25.1.0","dependencies":{"ws":"^8.15.1","zod":"^3.22.4","crypto-js":"^4.2.0","@scure/base":"^1.2.4","@noble/curves":"^1.8.1","@noble/hashes":"^1.3.3","@noble/ciphers":"^0.4.1","websocket-polyfill":"^0.0.3","light-bolt11-decoder":"^3.2.0"},"react-native":"dist/src/entries/index.web.js","_hasShrinkwrap":false,"devDependencies":{"jest":"^29.7.0","eslint":"^8.56.0","rimraf":"^3.0.2","ts-jest":"^29.1.1","ts-node":"^10.9.2","prettier":"^3.1.1","@types/ws":"^8.18.0","browserify":"^17.0.1","typescript":"^5.3.3","@types/jest":"^29.5.11","@types/node":"^20.10.6","@typescript-eslint/parser":"^6.17.0","@typescript-eslint/eslint-plugin":"^6.17.0"},"_npmOperationalInternal":{"tmp":"tmp/snstr_0.1.6_1762905132822_0.7640066572312689","host":"s3://npm-registry-packages-npm-production"}},"0.1.8":{"name":"snstr","version":"0.1.8","keywords":["nostr","nostr-protocol","event","client","relay","typescript","lightweight","nip46","remote-signing","encryption","nip47","wallet-connect","lightning"],"author":{"name":"plebdev"},"license":"MIT","_id":"snstr@0.1.8","maintainers":[{"name":"bitcoinplebdev","email":"austinkelsay@protonmail.com"}],"dist":{"shasum":"fb829df46e988fc5eb17befadd83eccabca52d95","tarball":"https://registry.npmjs.org/snstr/-/snstr-0.1.8.tgz","fileCount":121,"integrity":"sha512-gYPdujMu+doAeyfNLtGgsR7MfuGYUiBxHwxg8WXkcHANA5x7U/EiKofKF11v64+c8PFhRCKPd4AsOtKQq46w9g==","signatures":[{"sig":"MEUCIQClcUoujV4mcAVaY9yEWTRdvCxHBSYOGg/xU+Omc9+XLAIgI6PsMTjPIdjbwO2FdglHkOxg4GJ6iyWQlwfvmjYOMA4=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":930180},"main":"dist/src/index.js","types":"dist/src/index.d.ts","exports":{".":{"types":"./dist/src/index.d.ts","browser":"./dist/src/entries/index.web.js","default":"./dist/src/index.js","react-native":"./dist/src/entries/index.web.js"},"./nip04":{"types":"./dist/src/nip04/index.d.ts","browser":"./dist/src/nip04/web.js","default":"./dist/src/nip04/index.js","react-native":"./dist/src/nip04/web.js"}},"gitHead":"6757c623eef791fa03b9201fe52d7d382e01af61","scripts":{"lint":"eslint . --ext .ts","test":"jest","build":"rimraf dist && tsc","start":"npm run example:nip07","format":"prettier --write \"src/**/*.ts\" \"tests/**/*.ts\" \"examples/**/*.ts\"","example":"ts-node examples/basic-example.ts","promote":"scripts/promote-to-main.sh","release":"npm run release:patch && npm run release:push","// Build":"-------------- Build Commands --------------","test:all":"npm test","test:core":"jest tests/nip01","// Release":"-------------- Release Commands --------------","example:dm":"ts-node examples/nip04/direct-message.ts","test:event":"jest tests/nip01/event/event.test.ts","test:nip01":"jest tests/nip01","test:nip02":"jest tests/nip02","test:nip04":"jest tests/nip04","test:nip05":"jest tests/nip05","test:nip07":"jest tests/nip07","test:nip09":"jest tests/nip09","test:nip10":"jest tests/nip10","test:nip11":"jest tests/nip11","test:nip17":"jest tests/nip17","test:nip19":"jest tests/nip19","test:nip21":"jest tests/nip21","test:nip44":"jest tests/nip44","test:nip46":"jest tests/nip46","test:nip47":"jest tests/nip47","test:nip50":"jest tests/nip50","test:nip57":"jest tests/nip57","test:nip65":"jest tests/nip65","test:nip66":"jest tests/nip66","test:nostr":"jest tests/nip01/nostr.test.ts","test:relay":"jest tests/nip01/relay","test:watch":"jest --watch","// Test NIP":"-------------- NIP-specific Tests --------------","example:all":"npm run example","test:crypto":"jest tests/crypto.test.ts tests/nip04 tests/nip44","// Test Core":"-------------- Core Component Tests --------------","// Test Main":"-------------- Main Test Commands --------------","release:push":"git push && git push --tags","example:basic":"npm run example && npm run example:crypto && npm run example:dm","example:debug":"DEBUG=true ts-node examples/basic-example.ts","example:nip01":"npm run example:nip01:event:ordering && npm run example:nip01:relay:connection && npm run example:nip01:relay:query && npm run example:nip01:validation","example:nip02":"ts-node examples/nip02/nip02-demo.ts","example:nip04":"ts-node examples/nip04/direct-message.ts","example:nip05":"ts-node examples/nip05/nip05-demo.ts","example:nip07":"cd examples/nip07 && npm install && npm run build && npm start","example:nip09":"ts-node examples/nip09/deletion-request.ts","example:nip10":"ts-node examples/nip10/nip10-demo.ts","example:nip11":"ts-node examples/nip11/relay-info-example.ts","example:nip17":"ts-node examples/nip17/nip17-demo.ts","example:nip19":"ts-node examples/nip19/nip19-demo.ts","example:nip21":"ts-node examples/nip21/nip21-demo.ts","example:nip44":"ts-node examples/nip44/nip44-demo.ts","example:nip46":"ts-node examples/nip46/unified-example.ts","example:nip47":"ts-node examples/nip47/basic-example.ts","example:nip50":"ts-node examples/nip50/search-demo.ts","example:nip57":"ts-node examples/nip57/basic-example.ts","example:nip65":"ts-node examples/nip65/nip65-demo.ts","example:nip66":"ts-node examples/nip66/nip66-demo.ts","release:major":"npm run release:prepare && npm version major","release:minor":"npm run release:prepare && npm version minor","release:patch":"npm run release:prepare && npm version patch","test:coverage":"jest --coverage","test:identity":"jest tests/nip05 tests/nip07 tests/nip19","// Example NIP":"-------------- Other NIP Examples --------------","// Test Groups":"-------------- Test Category Groups --------------","build:examples":"tsc -p examples/tsconfig.json","example:crypto":"ts-node examples/crypto-demo.ts","prepublishOnly":"npm run build","test:event:all":"jest tests/nip01/event","test:protocols":"jest tests/nip46 tests/nip47 tests/nip57","example:verbose":"VERBOSE=true ts-node examples/basic-example.ts","release:prepare":"npm run lint && npm test && npm run build","// App Shortcuts":"-------------- Application Shortcuts --------------","// Example Basic":"-------------- Basic Examples --------------","// Lint & Format":"-------------- Code Quality --------------","example:advanced":"npm run example:nip46 && npm run example:nip47:error-handling","example:identity":"npm run example:nip05 && npm run example:nip07 && npm run example:nip19","example:nip07:dm":"ts-node examples/nip07/direct-message.ts","example:nip44:js":"node examples/nip44/nip44-demo.js","example:payments":"npm run example:nip47 && npm run example:nip57","test:crypto:core":"jest tests/utils/crypto.test.ts","test:integration":"jest tests/integration.test.ts","test:nip01:event":"jest tests/nip01/event","test:nip01:relay":"jest tests/nip01/relay","// Example Groups":"-------------- Example Category Groups --------------","// Example NIP-01":"-------------- NIP-01 Examples --------------","example:messaging":"npm run example:dm && npm run example:nip04 && npm run example:nip44 && npm run example:nip17","example:nip19:tlv":"ts-node examples/nip19/tlv-example.ts","example:nip19:demo":"ts-node examples/nip19/nip19-demo.ts","example:validation":"npm run example:nip01:validation","example:nip07:build":"cd examples/nip07 && npm install && npm run build","example:nip46:basic":"ts-node examples/nip46/basic-example.ts","example:nip47:nip44":"ts-node examples/nip47/nip44-encryption.ts","example:nip57:lnurl":"ts-node examples/nip57/lnurl-server-simulation.ts","example:rate-limits":"ts-node examples/rate-limit-configuration-example.ts","test:event:ordering":"jest tests/nip01/event/event-ordering.test.ts","test:utils:relayUrl":"jest tests/utils/relayUrl.test.ts","// Branch Management":"-------------- Branch Management --------------","example:nip19:bech32":"ts-node examples/nip19/bech32-example.ts","example:nip46:simple":"ts-node examples/nip46/simple/simple-example.ts","example:nip57:client":"ts-node examples/nip57/zap-client-example.ts","example:nip46:minimal":"ts-node examples/nip46/minimal.ts","example:nip47:verbose":"VERBOSE=true ts-node examples/nip47/basic-example.ts","test:nip01:relay:pool":"jest tests/nip01/relay/relayPool.test.ts","example:nip19:security":"ts-node examples/nip19/nip19-security.ts","example:nip46:advanced":"ts-node examples/nip46/advanced/remote-signing-demo.ts","example:nip46:test-all":"ts-node examples/nip46/test-all-examples.ts","test:event:addressable":"jest tests/nip01/event/addressable-events.test.ts","test:nip01:relay:filter":"jest tests/nip01/relay/filters.test.ts","example:custom-websocket":"ts-node examples/custom-websocket-example.ts","example:nip01:relay:pool":"ts-node examples/nip01/relay/relay-pool-example.ts","example:nip01:validation":"ts-node examples/client/validation-flow.ts","example:nip19:validation":"ts-node examples/nip19/validation-example.ts","example:nip44:compliance":"ts-node examples/nip44/nip44-compliance-demo.ts","example:nip47:expiration":"ts-node examples/nip47/request-expiration-example.ts","example:nip57:validation":"ts-node examples/nip57/invoice-validation-example.ts","example:nip01:relay:query":"ts-node examples/nip01/relay/relay-query-example.ts","example:nip44:test-vector":"ts-node examples/nip44/nip44-test-vector.ts","example:nip46:from-scratch":"ts-node examples/nip46/from-scratch/implementation-from-scratch.ts","test:nip01:relay:reconnect":"jest tests/nip01/relay/relay-reconnect.test.ts","test:nip01:relay:websocket":"jest tests/nip01/relay/websocket-implementation.test.ts","example:nip01:relay:filters":"ts-node examples/nip01/relay/filter-types-example.ts","example:nip46:simple-client":"ts-node examples/nip46/simple/simple-client-test.ts","test:nip01:relay:connection":"jest tests/nip01/relay/relay.test.ts","example:nip01:event:ordering":"ts-node examples/nip01/event/event-ordering-demo.ts","example:nip44:version-compat":"ts-node examples/nip44/nip44-version-compatibility.ts","example:nip47:client-service":"ts-node examples/nip47/basic-client-service.ts","example:nip47:error-handling":"ts-node examples/nip47/error-handling-example.ts","example:nip01:relay:reconnect":"ts-node examples/nip01/relay/relay-reconnect-example.ts","example:nip01:relay:auto-close":"ts-node examples/nip01/relay/auto-unsubscribe-example.ts","example:nip01:relay:connection":"ts-node examples/nip01/relay/relay-connection-example.ts","example:nip19:security-example":"ts-node examples/nip19/security-example.ts","example:nip01:event:addressable":"ts-node examples/nip01/event/addressable-events.ts","example:nip01:event:replaceable":"ts-node examples/nip01/event/replaceable-events.ts","example:nip01:url-preprocessing":"ts-node examples/nip01/url-preprocessing-example.ts","example:nip02:pubkey-normalization":"ts-node examples/nip02/pubkey-normalization-example.ts","example:nip47:encryption-negotiation":"ts-node examples/nip47/encryption-negotiation.ts","example:nip01:relay:pool-url-normalization":"ts-node examples/nip01/relay-pool-url-normalization-example.ts","example:nip46:connection-string-validation":"ts-node examples/nip46/connection-string-validation-example.ts"},"_npmUser":{"name":"bitcoinplebdev","email":"austinkelsay@protonmail.com"},"_npmVersion":"11.6.2","description":"Secure Nostr Software Toolkit for Renegades - A comprehensive TypeScript library for Nostr protocol implementation","directories":{},"_nodeVersion":"25.1.0","dependencies":{"ws":"^8.15.1","zod":"^3.22.4","crypto-js":"^4.2.0","@scure/base":"^1.2.4","@noble/curves":"^1.8.1","@noble/hashes":"^1.3.3","@noble/ciphers":"^0.4.1","websocket-polyfill":"^0.0.3","light-bolt11-decoder":"^3.2.0"},"react-native":"dist/src/entries/index.web.js","_hasShrinkwrap":false,"devDependencies":{"jest":"^29.7.0","eslint":"^8.56.0","rimraf":"^3.0.2","ts-jest":"^29.1.1","ts-node":"^10.9.2","prettier":"^3.1.1","@types/ws":"^8.18.0","browserify":"^17.0.1","typescript":"^5.3.3","@types/jest":"^29.5.11","@types/node":"^20.10.6","@typescript-eslint/parser":"^6.17.0","@typescript-eslint/eslint-plugin":"^6.17.0"},"_npmOperationalInternal":{"tmp":"tmp/snstr_0.1.8_1762980033082_0.6120924073131377","host":"s3://npm-registry-packages-npm-production"}},"0.1.9":{"name":"snstr","version":"0.1.9","keywords":["nostr","nostr-protocol","event","client","relay","typescript","lightweight","nip46","remote-signing","encryption","nip47","wallet-connect","lightning"],"author":{"name":"plebdev"},"license":"MIT","_id":"snstr@0.1.9","maintainers":[{"name":"bitcoinplebdev","email":"austinkelsay@protonmail.com"}],"dist":{"shasum":"59d18c2fad00a2cdc9f76e96a4d28fcfd5f32432","tarball":"https://registry.npmjs.org/snstr/-/snstr-0.1.9.tgz","fileCount":127,"integrity":"sha512-+4RRa06yKND5Z4zsO4SWXNkH/TI/aXUVhaiN5uyUAg7U7fHiLWiDJlFIHpmou8u5GtRRMwvliTseIO5AKS9xQQ==","signatures":[{"sig":"MEQCIAcUIcAMGQXM5+kVZnS84E9xQha49DrBVfc4kJf3YEd8AiBh4K38xg7LX+n36877u6LypvGq9mStzmv8q7SFDaep3A==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":937456},"main":"dist/src/index.js","types":"dist/src/index.d.ts","exports":{".":{"types":"./dist/src/index.d.ts","import":"./dist/esm/src/index.js","browser":"./dist/esm/src/entries/index.web.js","default":"./dist/src/index.js","require":"./dist/src/index.js","react-native":"./dist/esm/src/entries/index.web.js"},"./nip04":{"types":"./dist/src/nip04/index.d.ts","import":"./dist/esm/src/nip04/index.js","browser":"./dist/esm/src/nip04/web.js","default":"./dist/src/nip04/index.js","require":"./dist/src/nip04/index.js","react-native":"./dist/esm/src/nip04/web.js"},"./nip07-ambient":{"types":"./dist/src/nip07/ambient.d.ts","import":"./dist/esm/src/nip07/ambient.js","default":"./dist/src/nip07/ambient.js","require":"./dist/src/nip07/ambient.js"}},"gitHead":"5efdc2ebda8e256b83f6cdd8fd082454f1fe693b","scripts":{"lint":"eslint . --ext .ts","test":"jest","build":"rimraf dist && npm run build:cjs && npm run build:esm","start":"npm run example:nip07","format":"prettier --write \"src/**/*.ts\" \"tests/**/*.ts\" \"examples/**/*.ts\"","example":"ts-node examples/basic-example.ts","promote":"scripts/promote-to-main.sh","release":"npm run release:patch && npm run release:push","// Build":"-------------- Build Commands --------------","test:all":"npm test","build:cjs":"tsc -p tsconfig.json","build:esm":"tsc -p tsconfig.esm.json && node scripts/postbuild-esm.js","test:core":"jest tests/nip01","// Release":"-------------- Release Commands --------------","example:dm":"ts-node examples/nip04/direct-message.ts","test:event":"jest tests/nip01/event/event.test.ts","test:nip01":"jest tests/nip01","test:nip02":"jest tests/nip02","test:nip04":"jest tests/nip04","test:nip05":"jest tests/nip05","test:nip07":"jest tests/nip07","test:nip09":"jest tests/nip09","test:nip10":"jest tests/nip10","test:nip11":"jest tests/nip11","test:nip17":"jest tests/nip17","test:nip19":"jest tests/nip19","test:nip21":"jest tests/nip21","test:nip44":"jest tests/nip44","test:nip46":"jest tests/nip46","test:nip47":"jest tests/nip47","test:nip50":"jest tests/nip50","test:nip57":"jest tests/nip57","test:nip65":"jest tests/nip65","test:nip66":"jest tests/nip66","test:nostr":"jest tests/nip01/nostr.test.ts","test:relay":"jest tests/nip01/relay","test:watch":"jest --watch","// Test NIP":"-------------- NIP-specific Tests --------------","example:all":"npm run example","test:crypto":"jest tests/utils/crypto.test.ts tests/nip04 tests/nip44","// Test Core":"-------------- Core Component Tests --------------","// Test Main":"-------------- Main Test Commands --------------","release:push":"git push && git push --tags","example:basic":"npm run example && npm run example:crypto && npm run example:dm","example:debug":"DEBUG=true ts-node examples/basic-example.ts","example:nip01":"npm run example:nip01:event:ordering && npm run example:nip01:relay:connection && npm run example:nip01:relay:query && npm run example:nip01:validation","example:nip02":"ts-node examples/nip02/nip02-demo.ts","example:nip04":"ts-node examples/nip04/direct-message.ts","example:nip05":"ts-node examples/nip05/nip05-demo.ts","example:nip07":"cd examples/nip07 && npm install && npm run build && npm start","example:nip09":"ts-node examples/nip09/deletion-request.ts","example:nip10":"ts-node examples/nip10/nip10-demo.ts","example:nip11":"ts-node examples/nip11/relay-info-example.ts","example:nip17":"ts-node examples/nip17/nip17-demo.ts","example:nip19":"ts-node examples/nip19/nip19-demo.ts","example:nip21":"ts-node examples/nip21/nip21-demo.ts","example:nip44":"ts-node examples/nip44/nip44-demo.ts","example:nip46":"ts-node examples/nip46/unified-example.ts","example:nip47":"ts-node examples/nip47/basic-example.ts","example:nip50":"ts-node examples/nip50/search-demo.ts","example:nip57":"ts-node examples/nip57/basic-example.ts","example:nip65":"ts-node examples/nip65/nip65-demo.ts","example:nip66":"ts-node examples/nip66/nip66-demo.ts","release:major":"npm run release:prepare && npm version major","release:minor":"npm run release:prepare && npm version minor","release:patch":"npm run release:prepare && npm version patch","test:coverage":"jest --coverage","test:identity":"jest tests/nip05 tests/nip07 tests/nip19","// Example NIP":"-------------- Other NIP Examples --------------","// Test Groups":"-------------- Test Category Groups --------------","build:examples":"tsc -p examples/tsconfig.json","example:crypto":"ts-node examples/crypto-demo.ts","prepublishOnly":"npm run build","test:event:all":"jest tests/nip01/event","test:protocols":"jest tests/nip46 tests/nip47 tests/nip57","example:verbose":"VERBOSE=true ts-node examples/basic-example.ts","release:prepare":"npm run lint && npm test && npm run build","// App Shortcuts":"-------------- Application Shortcuts --------------","// Example Basic":"-------------- Basic Examples --------------","// Lint & Format":"-------------- Code Quality --------------","example:advanced":"npm run example:nip46 && npm run example:nip47:error-handling","example:identity":"npm run example:nip05 && npm run example:nip07 && npm run example:nip19","example:nip07:dm":"ts-node examples/nip07/direct-message.ts","example:nip44:js":"node examples/nip44/nip44-demo.js","example:payments":"npm run example:nip47 && npm run example:nip57","test:crypto:core":"jest tests/utils/crypto.test.ts","test:integration":"jest tests/integration.test.ts","test:nip01:event":"jest tests/nip01/event","test:nip01:relay":"jest tests/nip01/relay","// Example Groups":"-------------- Example Category Groups --------------","// Example NIP-01":"-------------- NIP-01 Examples --------------","example:messaging":"npm run example:dm && npm run example:nip04 && npm run example:nip44 && npm run example:nip17","example:nip19:tlv":"ts-node examples/nip19/tlv-example.ts","example:nip19:demo":"ts-node examples/nip19/nip19-demo.ts","example:validation":"npm run example:nip01:validation","example:nip07:build":"cd examples/nip07 && npm install && npm run build","example:nip46:basic":"ts-node examples/nip46/basic-example.ts","example:nip47:nip44":"ts-node examples/nip47/nip44-encryption.ts","example:nip57:lnurl":"ts-node examples/nip57/lnurl-server-simulation.ts","example:rate-limits":"ts-node examples/rate-limit-configuration-example.ts","test:event:ordering":"jest tests/nip01/event/event-ordering.test.ts","test:utils:relayUrl":"jest tests/utils/relayUrl.test.ts","// Branch Management":"-------------- Branch Management --------------","example:nip19:bech32":"ts-node examples/nip19/bech32-example.ts","example:nip46:simple":"ts-node examples/nip46/simple/simple-example.ts","example:nip57:client":"ts-node examples/nip57/zap-client-example.ts","example:nip46:minimal":"ts-node examples/nip46/minimal.ts","example:nip47:verbose":"VERBOSE=true ts-node examples/nip47/basic-example.ts","test:nip01:relay:pool":"jest tests/nip01/relay/relayPool.test.ts","example:nip19:security":"ts-node examples/nip19/nip19-security.ts","example:nip46:advanced":"ts-node examples/nip46/advanced/remote-signing-demo.ts","example:nip46:test-all":"ts-node examples/nip46/test-all-examples.ts","test:event:addressable":"jest tests/nip01/event/addressable-events.test.ts","test:nip01:relay:filter":"jest tests/nip01/relay/filters.test.ts","example:custom-websocket":"ts-node examples/custom-websocket-example.ts","example:nip01:relay:pool":"ts-node examples/nip01/relay/relay-pool-example.ts","example:nip01:validation":"ts-node examples/client/validation-flow.ts","example:nip19:validation":"ts-node examples/nip19/validation-example.ts","example:nip44:compliance":"ts-node examples/nip44/nip44-compliance-demo.ts","example:nip47:expiration":"ts-node examples/nip47/request-expiration-example.ts","example:nip57:validation":"ts-node examples/nip57/invoice-validation-example.ts","example:nip01:relay:query":"ts-node examples/nip01/relay/relay-query-example.ts","example:nip44:test-vector":"ts-node examples/nip44/nip44-test-vector.ts","example:nip46:from-scratch":"ts-node examples/nip46/from-scratch/implementation-from-scratch.ts","test:nip01:relay:reconnect":"jest tests/nip01/relay/relay-reconnect.test.ts","test:nip01:relay:websocket":"jest tests/nip01/relay/websocket-implementation.test.ts","example:nip01:relay:filters":"ts-node examples/nip01/relay/filter-types-example.ts","example:nip46:simple-client":"ts-node examples/nip46/simple/simple-client-test.ts","test:nip01:relay:connection":"jest tests/nip01/relay/relay.test.ts","example:nip01:event:ordering":"ts-node examples/nip01/event/event-ordering-demo.ts","example:nip44:version-compat":"ts-node examples/nip44/nip44-version-compatibility.ts","example:nip47:client-service":"ts-node examples/nip47/basic-client-service.ts","example:nip47:error-handling":"ts-node examples/nip47/error-handling-example.ts","example:nip01:relay:reconnect":"ts-node examples/nip01/relay/relay-reconnect-example.ts","example:nip01:relay:auto-close":"ts-node examples/nip01/relay/auto-unsubscribe-example.ts","example:nip01:relay:connection":"ts-node examples/nip01/relay/relay-connection-example.ts","example:nip19:security-example":"ts-node examples/nip19/security-example.ts","example:nip01:event:addressable":"ts-node examples/nip01/event/addressable-events.ts","example:nip01:event:replaceable":"ts-node examples/nip01/event/replaceable-events.ts","example:nip01:url-preprocessing":"ts-node examples/nip01/url-preprocessing-example.ts","example:nip02:pubkey-normalization":"ts-node examples/nip02/pubkey-normalization-example.ts","example:nip47:encryption-negotiation":"ts-node examples/nip47/encryption-negotiation.ts","example:nip01:relay:pool-url-normalization":"ts-node examples/nip01/relay-pool-url-normalization-example.ts","example:nip46:connection-string-validation":"ts-node examples/nip46/connection-string-validation-example.ts"},"_npmUser":{"name":"bitcoinplebdev","email":"austinkelsay@protonmail.com"},"_npmVersion":"11.6.2","description":"Secure Nostr Software Toolkit for Renegades - A comprehensive TypeScript library for Nostr protocol implementation","directories":{},"_nodeVersion":"25.1.0","dependencies":{"ws":"^8.15.1","zod":"^3.22.4","crypto-js":"^4.2.0","@scure/base":"^1.2.4","@noble/curves":"^1.8.1","@noble/hashes":"^1.3.3","@noble/ciphers":"^0.4.1","websocket-polyfill":"^0.0.3","light-bolt11-decoder":"^3.2.0"},"react-native":"./dist/esm/src/entries/index.web.js","_hasShrinkwrap":false,"devDependencies":{"jest":"^29.7.0","eslint":"^8.56.0","rimraf":"^3.0.2","ts-jest":"^29.1.1","ts-node":"^10.9.2","prettier":"^3.1.1","@types/ws":"^8.18.0","browserify":"^17.0.1","typescript":"^5.3.3","@types/jest":"^29.5.11","@types/node":"^20.10.6","@typescript-eslint/parser":"^6.17.0","@typescript-eslint/eslint-plugin":"^6.17.0"},"_npmOperationalInternal":{"tmp":"tmp/snstr_0.1.9_1763148352534_0.9485147587706648","host":"s3://npm-registry-packages-npm-production"}},"0.1.10":{"name":"snstr","version":"0.1.10","keywords":["nostr","nostr-protocol","event","client","relay","typescript","lightweight","nip46","remote-signing","encryption","nip47","wallet-connect","lightning"],"author":{"name":"plebdev"},"license":"MIT","_id":"snstr@0.1.10","maintainers":[{"name":"bitcoinplebdev","email":"austinkelsay@protonmail.com"}],"dist":{"shasum":"5a03a52ea01524d42868a9ff2f980efdb5f5df78","tarball":"https://registry.npmjs.org/snstr/-/snstr-0.1.10.tgz","fileCount":247,"integrity":"sha512-poSv4Ho14zJAdMO55W6oIYcbIqPsYQEG4/LiL8xXpIYXqRJHrxnYiXWyY7+9Xx8iqASNs8W/3IwNgFO7A/4qIg==","signatures":[{"sig":"MEUCIQDWMchxzzNDvBkWJpzJ+hYxZPmKrNOcKj7vncJOC7pDPQIgA75IA8skp45OR6/FPCIByWs2I6GBo/LWe/aBJNGQCiM=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1765584},"main":"dist/src/index.js","types":"dist/src/index.d.ts","exports":{".":{"types":"./dist/src/index.d.ts","import":"./dist/esm/src/index.js","browser":"./dist/esm/src/entries/index.web.js","default":"./dist/src/index.js","require":"./dist/src/index.js","react-native":"./dist/esm/src/entries/index.web.js"},"./nip04":{"types":"./dist/src/nip04/index.d.ts","import":"./dist/esm/src/nip04/index.js","browser":"./dist/esm/src/nip04/web.js","default":"./dist/src/nip04/index.js","require":"./dist/src/nip04/index.js","react-native":"./dist/esm/src/nip04/web.js"},"./nip07-ambient":{"types":"./dist/src/nip07/ambient.d.ts","import":"./dist/esm/src/nip07/ambient.js","default":"./dist/src/nip07/ambient.js","require":"./dist/src/nip07/ambient.js"}},"gitHead":"53300d5af96b4714a4bda1e0b1c21d75910e4b08","scripts":{"lint":"eslint . --ext .ts","test":"jest","build":"rimraf dist && npm run build:cjs && npm run build:esm","start":"npm run example:nip07","format":"prettier --write \"src/**/*.ts\" \"tests/**/*.ts\" \"examples/**/*.ts\"","example":"ts-node examples/basic-example.ts","promote":"scripts/promote-to-main.sh","release":"npm run release:patch && npm run release:push","// Build":"-------------- Build Commands --------------","test:all":"npm test","build:cjs":"tsc -p tsconfig.json","build:esm":"tsc -p tsconfig.esm.json && node scripts/postbuild-esm.js","test:core":"jest tests/nip01","// Release":"-------------- Release Commands --------------","example:dm":"ts-node examples/nip04/direct-message.ts","test:event":"jest tests/nip01/event/event.test.ts","test:nip01":"jest tests/nip01","test:nip02":"jest tests/nip02","test:nip04":"jest tests/nip04","test:nip05":"jest tests/nip05","test:nip07":"jest tests/nip07","test:nip09":"jest tests/nip09","test:nip10":"jest tests/nip10","test:nip11":"jest tests/nip11","test:nip17":"jest tests/nip17","test:nip19":"jest tests/nip19","test:nip21":"jest tests/nip21","test:nip44":"jest tests/nip44","test:nip46":"jest tests/nip46","test:nip47":"jest tests/nip47","test:nip50":"jest tests/nip50","test:nip57":"jest tests/nip57","test:nip65":"jest tests/nip65","test:nip66":"jest tests/nip66","test:nostr":"jest tests/nip01/nostr.test.ts","test:relay":"jest tests/nip01/relay","test:watch":"jest --watch","// Test NIP":"-------------- NIP-specific Tests --------------","example:all":"npm run example","test:crypto":"jest tests/utils/crypto.test.ts tests/nip04 tests/nip44","// Test Core":"-------------- Core Component Tests --------------","// Test Main":"-------------- Main Test Commands --------------","release:push":"git push && git push --tags","example:basic":"npm run example && npm run example:crypto && npm run example:dm","example:debug":"DEBUG=true ts-node examples/basic-example.ts","example:nip01":"npm run example:nip01:event:ordering && npm run example:nip01:relay:connection && npm run example:nip01:relay:query && npm run example:nip01:validation","example:nip02":"ts-node examples/nip02/nip02-demo.ts","example:nip04":"ts-node examples/nip04/direct-message.ts","example:nip05":"ts-node examples/nip05/nip05-demo.ts","example:nip07":"cd examples/nip07 && npm install && npm run build && npm start","example:nip09":"ts-node examples/nip09/deletion-request.ts","example:nip10":"ts-node examples/nip10/nip10-demo.ts","example:nip11":"ts-node examples/nip11/relay-info-example.ts","example:nip17":"ts-node examples/nip17/nip17-demo.ts","example:nip19":"ts-node examples/nip19/nip19-demo.ts","example:nip21":"ts-node examples/nip21/nip21-demo.ts","example:nip44":"ts-node examples/nip44/nip44-demo.ts","example:nip46":"ts-node examples/nip46/unified-example.ts","example:nip47":"ts-node examples/nip47/basic-example.ts","example:nip50":"ts-node examples/nip50/search-demo.ts","example:nip57":"ts-node examples/nip57/basic-example.ts","example:nip65":"ts-node examples/nip65/nip65-demo.ts","example:nip66":"ts-node examples/nip66/nip66-demo.ts","release:major":"npm run release:prepare && npm version major","release:minor":"npm run release:prepare && npm version minor","release:patch":"npm run release:prepare && npm version patch","test:coverage":"jest --coverage","test:identity":"jest tests/nip05 tests/nip07 tests/nip19","// Example NIP":"-------------- Other NIP Examples --------------","// Test Groups":"-------------- Test Category Groups --------------","build:examples":"tsc -p examples/tsconfig.json","example:crypto":"ts-node examples/crypto-demo.ts","prepublishOnly":"npm run build","test:event:all":"jest tests/nip01/event","test:protocols":"jest tests/nip46 tests/nip47 tests/nip57","example:verbose":"VERBOSE=true ts-node examples/basic-example.ts","release:prepare":"npm run lint && npm test && npm run build","// App Shortcuts":"-------------- Application Shortcuts --------------","// Example Basic":"-------------- Basic Examples --------------","// Lint & Format":"-------------- Code Quality --------------","example:advanced":"npm run example:nip46 && npm run example:nip47:error-handling","example:identity":"npm run example:nip05 && npm run example:nip07 && npm run example:nip19","example:nip07:dm":"ts-node examples/nip07/direct-message.ts","example:nip44:js":"node examples/nip44/nip44-demo.js","example:payments":"npm run example:nip47 && npm run example:nip57","test:crypto:core":"jest tests/utils/crypto.test.ts","test:integration":"jest tests/integration.test.ts","test:nip01:event":"jest tests/nip01/event","test:nip01:relay":"jest tests/nip01/relay","// Example Groups":"-------------- Example Category Groups --------------","// Example NIP-01":"-------------- NIP-01 Examples --------------","example:messaging":"npm run example:dm && npm run example:nip04 && npm run example:nip44 && npm run example:nip17","example:nip19:tlv":"ts-node examples/nip19/tlv-example.ts","example:nip19:demo":"ts-node examples/nip19/nip19-demo.ts","example:validation":"npm run example:nip01:validation","example:nip07:build":"cd examples/nip07 && npm install && npm run build","example:nip46:basic":"ts-node examples/nip46/basic-example.ts","example:nip47:nip44":"ts-node examples/nip47/nip44-encryption.ts","example:nip57:lnurl":"ts-node examples/nip57/lnurl-server-simulation.ts","example:rate-limits":"ts-node examples/rate-limit-configuration-example.ts","test:event:ordering":"jest tests/nip01/event/event-ordering.test.ts","test:utils:relayUrl":"jest tests/utils/relayUrl.test.ts","// Branch Management":"-------------- Branch Management --------------","example:nip19:bech32":"ts-node examples/nip19/bech32-example.ts","example:nip46:simple":"ts-node examples/nip46/simple/simple-example.ts","example:nip57:client":"ts-node examples/nip57/zap-client-example.ts","example:nip46:minimal":"ts-node examples/nip46/minimal.ts","example:nip47:verbose":"VERBOSE=true ts-node examples/nip47/basic-example.ts","test:nip01:relay:pool":"jest tests/nip01/relay/relayPool.test.ts","example:nip19:security":"ts-node examples/nip19/nip19-security.ts","example:nip46:advanced":"ts-node examples/nip46/advanced/remote-signing-demo.ts","example:nip46:test-all":"ts-node examples/nip46/test-all-examples.ts","test:event:addressable":"jest tests/nip01/event/addressable-events.test.ts","test:nip01:relay:filter":"jest tests/nip01/relay/filters.test.ts","example:custom-websocket":"ts-node examples/custom-websocket-example.ts","example:nip01:relay:pool":"ts-node examples/nip01/relay/relay-pool-example.ts","example:nip01:validation":"ts-node examples/client/validation-flow.ts","example:nip19:validation":"ts-node examples/nip19/validation-example.ts","example:nip44:compliance":"ts-node examples/nip44/nip44-compliance-demo.ts","example:nip47:expiration":"ts-node examples/nip47/request-expiration-example.ts","example:nip57:validation":"ts-node examples/nip57/invoice-validation-example.ts","example:nip01:relay:query":"ts-node examples/nip01/relay/relay-query-example.ts","example:nip44:test-vector":"ts-node examples/nip44/nip44-test-vector.ts","example:nip46:from-scratch":"ts-node examples/nip46/from-scratch/implementation-from-scratch.ts","test:nip01:relay:reconnect":"jest tests/nip01/relay/relay-reconnect.test.ts","test:nip01:relay:websocket":"jest tests/nip01/relay/websocket-implementation.test.ts","example:nip01:relay:filters":"ts-node examples/nip01/relay/filter-types-example.ts","example:nip46:simple-client":"ts-node examples/nip46/simple/simple-client-test.ts","test:nip01:relay:connection":"jest tests/nip01/relay/relay.test.ts","example:nip01:event:ordering":"ts-node examples/nip01/event/event-ordering-demo.ts","example:nip44:version-compat":"ts-node examples/nip44/nip44-version-compatibility.ts","example:nip47:client-service":"ts-node examples/nip47/basic-client-service.ts","example:nip47:error-handling":"ts-node examples/nip47/error-handling-example.ts","example:nip01:relay:reconnect":"ts-node examples/nip01/relay/relay-reconnect-example.ts","example:nip01:relay:auto-close":"ts-node examples/nip01/relay/auto-unsubscribe-example.ts","example:nip01:relay:connection":"ts-node examples/nip01/relay/relay-connection-example.ts","example:nip19:security-example":"ts-node examples/nip19/security-example.ts","example:nip01:event:addressable":"ts-node examples/nip01/event/addressable-events.ts","example:nip01:event:replaceable":"ts-node examples/nip01/event/replaceable-events.ts","example:nip01:url-preprocessing":"ts-node examples/nip01/url-preprocessing-example.ts","example:nip02:pubkey-normalization":"ts-node examples/nip02/pubkey-normalization-example.ts","example:nip47:encryption-negotiation":"ts-node examples/nip47/encryption-negotiation.ts","example:nip01:relay:pool-url-normalization":"ts-node examples/nip01/relay-pool-url-normalization-example.ts","example:nip46:connection-string-validation":"ts-node examples/nip46/connection-string-validation-example.ts"},"_npmUser":{"name":"bitcoinplebdev","email":"austinkelsay@protonmail.com"},"_npmVersion":"11.6.2","description":"Secure Nostr Software Toolkit for Renegades - A comprehensive TypeScript library for Nostr protocol implementation","directories":{},"_nodeVersion":"25.1.0","dependencies":{"ws":"^8.15.1","zod":"^3.22.4","crypto-js":"^4.2.0","@scure/base":"^1.2.4","@noble/curves":"^1.8.1","@noble/hashes":"^1.3.3","@noble/ciphers":"^0.4.1","websocket-polyfill":"^0.0.3","light-bolt11-decoder":"^3.2.0"},"react-native":"./dist/esm/src/entries/index.web.js","_hasShrinkwrap":false,"devDependencies":{"jest":"^29.7.0","eslint":"^8.56.0","rimraf":"^3.0.2","ts-jest":"^29.1.1","ts-node":"^10.9.2","prettier":"^3.1.1","@types/ws":"^8.18.0","browserify":"^17.0.1","typescript":"^5.3.3","@types/jest":"^29.5.11","@types/node":"^20.10.6","@typescript-eslint/parser":"^6.17.0","@typescript-eslint/eslint-plugin":"^6.17.0"},"_npmOperationalInternal":{"tmp":"tmp/snstr_0.1.10_1763151630106_0.4760692543514269","host":"s3://npm-registry-packages-npm-production"}},"0.2.0":{"name":"snstr","version":"0.2.0","keywords":["nostr","nostr-protocol","event","client","relay","typescript","lightweight","nip46","remote-signing","encryption","nip47","wallet-connect","lightning"],"author":{"name":"plebdev"},"license":"MIT","_id":"snstr@0.2.0","maintainers":[{"name":"bitcoinplebdev","email":"austinkelsay@protonmail.com"}],"dist":{"shasum":"383ee1a9d5be917ea938fc4f9905c2d820978500","tarball":"https://registry.npmjs.org/snstr/-/snstr-0.2.0.tgz","fileCount":251,"integrity":"sha512-QRzoxWd/5qlG5/pWVhnFKklumeRTN1lLFbQbe/a0xuaD90kl8sUtrJC8eXI+FBz4HXo8iE3tMvOPU5/crJBb2g==","signatures":[{"sig":"MEUCIQD1wHlOnd2qs8Cps/3Almuyf+DEWfW4NZOPgMa+egDy3wIgM9E2v7kJtdbwYVOOXYCiC686EvI4r3fSerShsxiBIbc=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1774642},"main":"dist/src/index.js","types":"dist/src/index.d.ts","exports":{".":{"types":"./dist/src/index.d.ts","import":"./dist/esm/src/index.js","browser":"./dist/esm/src/entries/index.web.js","default":"./dist/src/index.js","require":"./dist/src/index.js","react-native":"./dist/esm/src/entries/index.web.js"},"./nip04":{"types":"./dist/src/nip04/index.d.ts","import":"./dist/esm/src/nip04/index.js","browser":"./dist/esm/src/nip04/web.js","default":"./dist/src/nip04/index.js","require":"./dist/src/nip04/index.js","react-native":"./dist/esm/src/nip04/web.js"},"./nip07-ambient":{"types":"./dist/src/nip07/ambient.d.ts","import":"./dist/esm/src/nip07/ambient.js","default":"./dist/src/nip07/ambient.js","require":"./dist/src/nip07/ambient.js"},"./utils/ephemeral-relay":{"types":"./dist/src/utils/ephemeral-relay.d.ts","import":"./dist/esm/src/utils/ephemeral-relay.js","default":"./dist/src/utils/ephemeral-relay.js","require":"./dist/src/utils/ephemeral-relay.js"}},"gitHead":"c3bc7f574069517e1146e4ea7d73a47b2cb043d2","scripts":{"lint":"eslint . --ext .ts","test":"jest","build":"rimraf dist && npm run build:cjs && npm run build:esm","start":"npm run example:nip07","format":"prettier --write \"src/**/*.ts\" \"tests/**/*.ts\" \"examples/**/*.ts\"","example":"ts-node examples/basic-example.ts","promote":"scripts/promote-to-main.sh","release":"npm run release:patch && npm run release:push","// Build":"-------------- Build Commands --------------","test:all":"npm test","build:cjs":"tsc -p tsconfig.json","build:esm":"tsc -p tsconfig.esm.json && node scripts/postbuild-esm.js","test:core":"jest tests/nip01","// Release":"-------------- Release Commands --------------","example:dm":"ts-node examples/nip04/direct-message.ts","test:event":"jest tests/nip01/event/event.test.ts","test:nip01":"jest tests/nip01","test:nip02":"jest tests/nip02","test:nip04":"jest tests/nip04","test:nip05":"jest tests/nip05","test:nip07":"jest tests/nip07","test:nip09":"jest tests/nip09","test:nip10":"jest tests/nip10","test:nip11":"jest tests/nip11","test:nip17":"jest tests/nip17","test:nip19":"jest tests/nip19","test:nip21":"jest tests/nip21","test:nip44":"jest tests/nip44","test:nip46":"jest tests/nip46","test:nip47":"jest tests/nip47","test:nip50":"jest tests/nip50","test:nip57":"jest tests/nip57","test:nip65":"jest tests/nip65","test:nip66":"jest tests/nip66","test:nostr":"jest tests/nip01/nostr.test.ts","test:relay":"jest tests/nip01/relay","test:watch":"jest --watch","// Test NIP":"-------------- NIP-specific Tests --------------","example:all":"npm run example","test:crypto":"jest tests/utils/crypto.test.ts tests/nip04 tests/nip44","// Test Core":"-------------- Core Component Tests --------------","// Test Main":"-------------- Main Test Commands --------------","release:push":"git push && git push --tags","example:basic":"npm run example && npm run example:crypto && npm run example:dm","example:debug":"DEBUG=true ts-node examples/basic-example.ts","example:nip01":"npm run example:nip01:event:ordering && npm run example:nip01:relay:connection && npm run example:nip01:relay:query && npm run example:nip01:validation","example:nip02":"ts-node examples/nip02/nip02-demo.ts","example:nip04":"ts-node examples/nip04/direct-message.ts","example:nip05":"ts-node examples/nip05/nip05-demo.ts","example:nip07":"cd examples/nip07 && npm install && npm run build && npm start","example:nip09":"ts-node examples/nip09/deletion-request.ts","example:nip10":"ts-node examples/nip10/nip10-demo.ts","example:nip11":"ts-node examples/nip11/relay-info-example.ts","example:nip17":"ts-node examples/nip17/nip17-demo.ts","example:nip19":"ts-node examples/nip19/nip19-demo.ts","example:nip21":"ts-node examples/nip21/nip21-demo.ts","example:nip44":"ts-node examples/nip44/nip44-demo.ts","example:nip46":"ts-node examples/nip46/unified-example.ts","example:nip47":"ts-node examples/nip47/basic-example.ts","example:nip50":"ts-node examples/nip50/search-demo.ts","example:nip57":"ts-node examples/nip57/basic-example.ts","example:nip65":"ts-node examples/nip65/nip65-demo.ts","example:nip66":"ts-node examples/nip66/nip66-demo.ts","release:major":"npm run release:prepare && npm version major","release:minor":"npm run release:prepare && npm version minor","release:patch":"npm run release:prepare && npm version patch","test:coverage":"jest --coverage","test:identity":"jest tests/nip05 tests/nip07 tests/nip19","// Example NIP":"-------------- Other NIP Examples --------------","// Test Groups":"-------------- Test Category Groups --------------","build:examples":"tsc -p examples/tsconfig.json","example:crypto":"ts-node examples/crypto-demo.ts","prepublishOnly":"npm run build","test:event:all":"jest tests/nip01/event","test:protocols":"jest tests/nip46 tests/nip47 tests/nip57","example:verbose":"VERBOSE=true ts-node examples/basic-example.ts","release:prepare":"npm run lint && npm test && npm run build","// App Shortcuts":"-------------- Application Shortcuts --------------","// Example Basic":"-------------- Basic Examples --------------","// Lint & Format":"-------------- Code Quality --------------","example:advanced":"npm run example:nip46 && npm run example:nip47:error-handling","example:identity":"npm run example:nip05 && npm run example:nip07 && npm run example:nip19","example:nip07:dm":"ts-node examples/nip07/direct-message.ts","example:nip44:js":"node examples/nip44/nip44-demo.js","example:payments":"npm run example:nip47 && npm run example:nip57","test:crypto:core":"jest tests/utils/crypto.test.ts","test:integration":"jest tests/integration.test.ts","test:nip01:event":"jest tests/nip01/event","test:nip01:relay":"jest tests/nip01/relay","// Example Groups":"-------------- Example Category Groups --------------","// Example NIP-01":"-------------- NIP-01 Examples --------------","example:messaging":"npm run example:dm && npm run example:nip04 && npm run example:nip44 && npm run example:nip17","example:nip19:tlv":"ts-node examples/nip19/tlv-example.ts","example:nip19:demo":"ts-node examples/nip19/nip19-demo.ts","example:validation":"npm run example:nip01:validation","example:nip07:build":"cd examples/nip07 && npm install && npm run build","example:nip46:basic":"ts-node examples/nip46/basic-example.ts","example:nip47:nip44":"ts-node examples/nip47/nip44-encryption.ts","example:nip57:lnurl":"ts-node examples/nip57/lnurl-server-simulation.ts","example:rate-limits":"ts-node examples/rate-limit-configuration-example.ts","test:event:ordering":"jest tests/nip01/event/event-ordering.test.ts","test:utils:relayUrl":"jest tests/utils/relayUrl.test.ts","// Branch Management":"-------------- Branch Management --------------","example:nip19:bech32":"ts-node examples/nip19/bech32-example.ts","example:nip46:simple":"ts-node examples/nip46/simple/simple-example.ts","example:nip57:client":"ts-node examples/nip57/zap-client-example.ts","example:nip46:minimal":"ts-node examples/nip46/minimal.ts","example:nip47:verbose":"VERBOSE=true ts-node examples/nip47/basic-example.ts","test:nip01:relay:pool":"jest tests/nip01/relay/relayPool.test.ts","example:nip19:security":"ts-node examples/nip19/nip19-security.ts","example:nip46:advanced":"ts-node examples/nip46/advanced/remote-signing-demo.ts","example:nip46:test-all":"ts-node examples/nip46/test-all-examples.ts","test:event:addressable":"jest tests/nip01/event/addressable-events.test.ts","test:nip01:relay:filter":"jest tests/nip01/relay/filters.test.ts","example:custom-websocket":"ts-node examples/custom-websocket-example.ts","example:nip01:relay:pool":"ts-node examples/nip01/relay/relay-pool-example.ts","example:nip01:validation":"ts-node examples/client/validation-flow.ts","example:nip19:validation":"ts-node examples/nip19/validation-example.ts","example:nip44:compliance":"ts-node examples/nip44/nip44-compliance-demo.ts","example:nip47:expiration":"ts-node examples/nip47/request-expiration-example.ts","example:nip57:validation":"ts-node examples/nip57/invoice-validation-example.ts","example:nip01:relay:query":"ts-node examples/nip01/relay/relay-query-example.ts","example:nip44:test-vector":"ts-node examples/nip44/nip44-test-vector.ts","example:nip46:from-scratch":"ts-node examples/nip46/from-scratch/implementation-from-scratch.ts","test:nip01:relay:reconnect":"jest tests/nip01/relay/relay-reconnect.test.ts","test:nip01:relay:websocket":"jest tests/nip01/relay/websocket-implementation.test.ts","example:nip01:relay:filters":"ts-node examples/nip01/relay/filter-types-example.ts","example:nip46:simple-client":"ts-node examples/nip46/simple/simple-client-test.ts","test:nip01:relay:connection":"jest tests/nip01/relay/relay.test.ts","example:nip01:event:ordering":"ts-node examples/nip01/event/event-ordering-demo.ts","example:nip44:version-compat":"ts-node examples/nip44/nip44-version-compatibility.ts","example:nip47:client-service":"ts-node examples/nip47/basic-client-service.ts","example:nip47:error-handling":"ts-node examples/nip47/error-handling-example.ts","example:nip01:relay:reconnect":"ts-node examples/nip01/relay/relay-reconnect-example.ts","example:nip01:relay:auto-close":"ts-node examples/nip01/relay/auto-unsubscribe-example.ts","example:nip01:relay:connection":"ts-node examples/nip01/relay/relay-connection-example.ts","example:nip19:security-example":"ts-node examples/nip19/security-example.ts","example:nip01:event:addressable":"ts-node examples/nip01/event/addressable-events.ts","example:nip01:event:replaceable":"ts-node examples/nip01/event/replaceable-events.ts","example:nip01:url-preprocessing":"ts-node examples/nip01/url-preprocessing-example.ts","example:nip02:pubkey-normalization":"ts-node examples/nip02/pubkey-normalization-example.ts","example:nip47:encryption-negotiation":"ts-node examples/nip47/encryption-negotiation.ts","example:nip01:relay:pool-url-normalization":"ts-node examples/nip01/relay-pool-url-normalization-example.ts","example:nip46:connection-string-validation":"ts-node examples/nip46/connection-string-validation-example.ts"},"_npmUser":{"name":"bitcoinplebdev","email":"austinkelsay@protonmail.com"},"_npmVersion":"11.6.2","description":"Secure Nostr Software Toolkit for Renegades - A comprehensive TypeScript library for Nostr protocol implementation","directories":{},"_nodeVersion":"25.2.1","dependencies":{"ws":"^8.15.1","zod":"^3.22.4","crypto-js":"^4.2.0","@scure/base":"^1.2.4","@noble/curves":"^1.8.1","@noble/hashes":"^1.3.3","@noble/ciphers":"^0.4.1","websocket-polyfill":"^0.0.3","light-bolt11-decoder":"^3.2.0"},"react-native":"./dist/esm/src/entries/index.web.js","_hasShrinkwrap":false,"devDependencies":{"jest":"^29.7.0","eslint":"^8.56.0","rimraf":"^3.0.2","ts-jest":"^29.1.1","ts-node":"^10.9.2","prettier":"^3.1.1","@types/ws":"^8.18.0","browserify":"^17.0.1","typescript":"^5.3.3","@types/jest":"^29.5.11","@types/node":"^20.10.6","@types/crypto-js":"^4.2.2","@typescript-eslint/parser":"^6.17.0","@typescript-eslint/eslint-plugin":"^6.17.0"},"_npmOperationalInternal":{"tmp":"tmp/snstr_0.2.0_1769130135994_0.7710946525328255","host":"s3://npm-registry-packages-npm-production"}},"0.3.0":{"name":"snstr","version":"0.3.0","keywords":["nostr","nostr-protocol","event","client","relay","typescript","lightweight","nip46","remote-signing","encryption","nip47","wallet-connect","lightning"],"author":"plebdev","license":"MIT","_id":"snstr@0.3.0","maintainers":[{"name":"bitcoinplebdev","email":"austinkelsay@protonmail.com"}],"dist":{"shasum":"3e82e8dfc7940508b1f0d1203340b2f4a21fe897","tarball":"https://registry.npmjs.org/snstr/-/snstr-0.3.0.tgz","fileCount":11,"integrity":"sha512-UKS51zQTWgePf42THIj3IUsbeRdAQUCM9OK+NlvgRyIahm1caXvbMIUzuvrSLNou9UFVENZe6kNebvFaj7LloQ==","signatures":[{"sig":"MEYCIQDfifn8mSwqO6/wS1hS9vAgc2GzwOTTc/sg3Q5rxihgLwIhALEPwokyyMO8cBROn2eNET/jhV875J4xaDunrTDzOVzt","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":53205},"main":"dist/src/index.js","types":"dist/src/index.d.ts","shasum":"3e82e8dfc7940508b1f0d1203340b2f4a21fe897","exports":{".":{"types":"./dist/src/index.d.ts","import":"./dist/esm/src/index.js","browser":"./dist/esm/src/entries/index.web.js","default":"./dist/src/index.js","require":"./dist/src/index.js","react-native":"./dist/esm/src/entries/index.web.js"},"./nip04":{"types":"./dist/src/nip04/index.d.ts","import":"./dist/esm/src/nip04/index.js","browser":"./dist/esm/src/nip04/web.js","default":"./dist/src/nip04/index.js","require":"./dist/src/nip04/index.js","react-native":"./dist/esm/src/nip04/web.js"},"./nip07-ambient":{"types":"./dist/src/nip07/ambient.d.ts","import":"./dist/esm/src/nip07/ambient.js","default":"./dist/src/nip07/ambient.js","require":"./dist/src/nip07/ambient.js"},"./utils/ephemeral-relay":{"types":"./dist/src/utils/ephemeral-relay.d.ts","import":"./dist/esm/src/utils/ephemeral-relay.js","default":"./dist/src/utils/ephemeral-relay.js","require":"./dist/src/utils/ephemeral-relay.js"}},"scripts":{"lint":"eslint . --ext .ts","test":"jest","build":"npx rimraf dist && npm run build:cjs && npm run build:esm","start":"npm run example:nip07","format":"prettier --write \"src/**/*.ts\" \"tests/**/*.ts\" \"examples/**/*.ts\"","example":"ts-node examples/basic-example.ts","promote":"scripts/promote-to-main.sh","release":"npm run release:patch && npm run release:push","// Build":"-------------- Build Commands --------------","test:all":"npm test","test:bun":"bun test ./tests --max-concurrency 1 --timeout 30000","build:cjs":"tsc -p tsconfig.json","build:esm":"tsc -p tsconfig.esm.json && node scripts/postbuild-esm.js","test:core":"jest tests/nip01","// Release":"-------------- Release Commands --------------","example:dm":"ts-node examples/nip04/direct-message.ts","test:event":"jest tests/nip01/event/event.test.ts","test:nip01":"jest tests/nip01","test:nip02":"jest tests/nip02","test:nip04":"jest tests/nip04","test:nip05":"jest tests/nip05","test:nip07":"jest tests/nip07","test:nip09":"jest tests/nip09","test:nip10":"jest tests/nip10","test:nip11":"jest tests/nip11","test:nip17":"jest tests/nip17","test:nip19":"jest tests/nip19","test:nip21":"jest tests/nip21","test:nip44":"jest tests/nip44","test:nip46":"jest tests/nip46","test:nip47":"jest tests/nip47","test:nip50":"jest tests/nip50","test:nip57":"jest tests/nip57","test:nip65":"jest tests/nip65","test:nip66":"jest tests/nip66","test:nostr":"jest tests/nip01/nostr.test.ts","test:relay":"jest tests/nip01/relay","test:watch":"jest --watch","// Test NIP":"-------------- NIP-specific Tests --------------","example:all":"npm run example","test:crypto":"jest tests/utils/crypto.test.ts tests/nip04 tests/nip44","// Test Core":"-------------- Core Component Tests --------------","// Test Main":"-------------- Main Test Commands --------------","release:push":"git push && git push --tags","example:basic":"npm run example && npm run example:crypto && npm run example:dm","example:debug":"DEBUG=true ts-node examples/basic-example.ts","example:nip01":"npm run example:nip01:event:ordering && npm run example:nip01:relay:connection && npm run example:nip01:relay:query && npm run example:nip01:validation","example:nip02":"ts-node examples/nip02/nip02-demo.ts","example:nip04":"ts-node examples/nip04/direct-message.ts","example:nip05":"ts-node examples/nip05/nip05-demo.ts","example:nip07":"cd examples/nip07 && npm install && npm run build && npm start","example:nip09":"ts-node examples/nip09/deletion-request.ts","example:nip10":"ts-node examples/nip10/nip10-demo.ts","example:nip11":"ts-node examples/nip11/relay-info-example.ts","example:nip17":"ts-node examples/nip17/nip17-demo.ts","example:nip19":"ts-node examples/nip19/nip19-demo.ts","example:nip21":"ts-node examples/nip21/nip21-demo.ts","example:nip44":"ts-node examples/nip44/nip44-demo.ts","example:nip46":"ts-node examples/nip46/unified-example.ts","example:nip47":"ts-node examples/nip47/basic-example.ts","example:nip50":"ts-node examples/nip50/search-demo.ts","example:nip57":"ts-node examples/nip57/basic-example.ts","example:nip65":"ts-node examples/nip65/nip65-demo.ts","example:nip66":"ts-node examples/nip66/nip66-demo.ts","release:major":"npm run release:prepare && npm version major","release:minor":"npm run release:prepare && npm version minor","release:patch":"npm run release:prepare && npm version patch","test:coverage":"jest --coverage","test:identity":"jest tests/nip05 tests/nip07 tests/nip19","// Example NIP":"-------------- Other NIP Examples --------------","// Test Groups":"-------------- Test Category Groups --------------","build:examples":"tsc -p examples/tsconfig.json","example:crypto":"ts-node examples/crypto-demo.ts","prepublishOnly":"npm run build","test:bun:watch":"bun test ./tests --watch --max-concurrency 1 --timeout 30000","test:event:all":"jest tests/nip01/event","test:protocols":"jest tests/nip46 tests/nip47 tests/nip57","example:verbose":"VERBOSE=true ts-node examples/basic-example.ts","release:prepare":"npm run lint && npm test && npm run build","// App Shortcuts":"-------------- Application Shortcuts --------------","// Bun Migration":"-------------- Bun Test Migration --------------","// Example Basic":"-------------- Basic Examples --------------","// Lint & Format":"-------------- Code Quality --------------","example:advanced":"npm run example:nip46 && npm run example:nip47:error-handling","example:identity":"npm run example:nip05 && npm run example:nip07 && npm run example:nip19","example:nip07:dm":"ts-node examples/nip07/direct-message.ts","example:nip44:js":"node examples/nip44/nip44-demo.js","example:payments":"npm run example:nip47 && npm run example:nip57","test:crypto:core":"jest tests/utils/crypto.test.ts","test:integration":"jest tests/integration.test.ts","test:nip01:event":"jest tests/nip01/event","test:nip01:relay":"jest tests/nip01/relay","// Example Groups":"-------------- Example Category Groups --------------","// Example NIP-01":"-------------- NIP-01 Examples --------------","example:messaging":"npm run example:dm && npm run example:nip04 && npm run example:nip44 && npm run example:nip17","example:nip19:tlv":"ts-node examples/nip19/tlv-example.ts","example:nip19:demo":"ts-node examples/nip19/nip19-demo.ts","example:validation":"npm run example:nip01:validation","example:nip07:build":"cd examples/nip07 && npm install && npm run build","example:nip46:basic":"ts-node examples/nip46/basic-example.ts","example:nip47:nip44":"ts-node examples/nip47/nip44-encryption.ts","example:nip57:lnurl":"ts-node examples/nip57/lnurl-server-simulation.ts","example:rate-limits":"ts-node examples/rate-limit-configuration-example.ts","test:event:ordering":"jest tests/nip01/event/event-ordering.test.ts","test:utils:relayUrl":"jest tests/utils/relayUrl.test.ts","// Branch Management":"-------------- Branch Management --------------","example:nip19:bech32":"ts-node examples/nip19/bech32-example.ts","example:nip46:simple":"ts-node examples/nip46/simple/simple-example.ts","example:nip57:client":"ts-node examples/nip57/zap-client-example.ts","example:nip46:minimal":"ts-node examples/nip46/minimal.ts","example:nip47:verbose":"VERBOSE=true ts-node examples/nip47/basic-example.ts","test:nip01:relay:pool":"jest tests/nip01/relay/relayPool.test.ts","example:nip19:security":"ts-node examples/nip19/nip19-security.ts","example:nip46:advanced":"ts-node examples/nip46/advanced/remote-signing-demo.ts","example:nip46:test-all":"ts-node examples/nip46/test-all-examples.ts","test:event:addressable":"jest tests/nip01/event/addressable-events.test.ts","test:nip01:relay:filter":"jest tests/nip01/relay/filters.test.ts","example:custom-websocket":"ts-node examples/custom-websocket-example.ts","example:nip01:relay:pool":"ts-node examples/nip01/relay/relay-pool-example.ts","example:nip01:validation":"ts-node examples/client/validation-flow.ts","example:nip19:validation":"ts-node examples/nip19/validation-example.ts","example:nip44:compliance":"ts-node examples/nip44/nip44-compliance-demo.ts","example:nip47:expiration":"ts-node examples/nip47/request-expiration-example.ts","example:nip57:validation":"ts-node examples/nip57/invoice-validation-example.ts","example:nip01:relay:query":"ts-node examples/nip01/relay/relay-query-example.ts","example:nip44:test-vector":"ts-node examples/nip44/nip44-test-vector.ts","example:nip46:from-scratch":"ts-node examples/nip46/from-scratch/implementation-from-scratch.ts","test:nip01:relay:reconnect":"jest tests/nip01/relay/relay-reconnect.test.ts","test:nip01:relay:websocket":"jest tests/nip01/relay/websocket-implementation.test.ts","example:nip01:relay:filters":"ts-node examples/nip01/relay/filter-types-example.ts","example:nip46:simple-client":"ts-node examples/nip46/simple/simple-client-test.ts","test:nip01:relay:connection":"jest tests/nip01/relay/relay.test.ts","example:nip01:event:ordering":"ts-node examples/nip01/event/event-ordering-demo.ts","example:nip44:version-compat":"ts-node examples/nip44/nip44-version-compatibility.ts","example:nip47:client-service":"ts-node examples/nip47/basic-client-service.ts","example:nip47:error-handling":"ts-node examples/nip47/error-handling-example.ts","example:nip01:relay:reconnect":"ts-node examples/nip01/relay/relay-reconnect-example.ts","example:nip01:relay:auto-close":"ts-node examples/nip01/relay/auto-unsubscribe-example.ts","example:nip01:relay:connection":"ts-node examples/nip01/relay/relay-connection-example.ts","example:nip19:security-example":"ts-node examples/nip19/security-example.ts","example:nip01:event:addressable":"ts-node examples/nip01/event/addressable-events.ts","example:nip01:event:replaceable":"ts-node examples/nip01/event/replaceable-events.ts","example:nip01:url-preprocessing":"ts-node examples/nip01/url-preprocessing-example.ts","example:nip02:pubkey-normalization":"ts-node examples/nip02/pubkey-normalization-example.ts","example:nip47:encryption-negotiation":"ts-node examples/nip47/encryption-negotiation.ts","example:nip01:relay:pool-url-normalization":"ts-node examples/nip01/relay-pool-url-normalization-example.ts","example:nip46:connection-string-validation":"ts-node examples/nip46/connection-string-validation-example.ts"},"_npmUser":{"name":"bitcoinplebdev","email":"austinkelsay@protonmail.com"},"_integrity":"sha512-UKS51zQTWgePf42THIj3IUsbeRdAQUCM9OK+NlvgRyIahm1caXvbMIUzuvrSLNou9UFVENZe6kNebvFaj7LloQ==","_npmVersion":"10.8.3","description":"Secure Nostr Software Toolkit for Renegades - A comprehensive TypeScript library for Nostr protocol implementation","directories":{},"_nodeVersion":"24.3.0","dependencies":{"ws":"^8.15.1","zod":"^3.22.4","crypto-js":"^4.2.0","@scure/base":"^1.2.4","@noble/curves":"^1.8.1","@noble/hashes":"^1.3.3","@noble/ciphers":"^0.4.1","websocket-polyfill":"^0.0.3","light-bolt11-decoder":"^3.2.0"},"react-native":"./dist/esm/src/entries/index.web.js","_hasShrinkwrap":false,"devDependencies":{"jest":"^29.7.0","eslint":"^8.56.0","rimraf":"^3.0.2","ts-jest":"^29.1.1","ts-node":"^10.9.2","prettier":"^3.1.1","@types/ws":"^8.18.0","browserify":"^17.0.1","typescript":"^5.3.3","@types/jest":"^29.5.11","@types/node":"^20.10.6","@types/crypto-js":"^4.2.2","@typescript-eslint/parser":"^6.17.0","@typescript-eslint/eslint-plugin":"^6.17.0"},"_npmOperationalInternal":{"tmp":"tmp/snstr_0.3.0_1770675260303_0.27643057931527704","host":"s3://npm-registry-packages-npm-production"}},"0.3.1":{"name":"snstr","version":"0.3.1","keywords":["nostr","nostr-protocol","event","client","relay","typescript","lightweight","nip46","remote-signing","encryption","nip47","wallet-connect","lightning"],"author":"plebdev","license":"MIT","_id":"snstr@0.3.1","maintainers":[{"name":"bitcoinplebdev","email":"austinkelsay@protonmail.com"}],"dist":{"shasum":"c92dacc230f2dc8f016d788ac5d9ab42dc160f64","tarball":"https://registry.npmjs.org/snstr/-/snstr-0.3.1.tgz","fileCount":252,"integrity":"sha512-uuY+6tMfk7oJ/0UDtKNnJiGbAIgyrfLLvKsTP7nc9PRcqMC67OEl8Q+J0rWxPFlbLlJnovNTkm6ScQyNlL2B2g==","signatures":[{"sig":"MEYCIQDKh7rVkm08wiYpj8vEeMSDg6v4JoDeYVp9qzOawdp3igIhALlj1aykQV6kwj7Mf4Ybcq9QFbpgqPJZ9VpGsSNZ8qMQ","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1794579},"main":"dist/src/index.js","types":"dist/src/index.d.ts","shasum":"c92dacc230f2dc8f016d788ac5d9ab42dc160f64","exports":{".":{"types":"./dist/src/index.d.ts","import":"./dist/esm/src/index.js","browser":"./dist/esm/src/entries/index.web.js","default":"./dist/src/index.js","require":"./dist/src/index.js","react-native":"./dist/esm/src/entries/index.web.js"},"./nip04":{"types":"./dist/src/nip04/index.d.ts","import":"./dist/esm/src/nip04/index.js","browser":"./dist/esm/src/nip04/web.js","default":"./dist/src/nip04/index.js","require":"./dist/src/nip04/index.js","react-native":"./dist/esm/src/nip04/web.js"},"./nip07-ambient":{"types":"./dist/src/nip07/ambient.d.ts","import":"./dist/esm/src/nip07/ambient.js","default":"./dist/src/nip07/ambient.js","require":"./dist/src/nip07/ambient.js"},"./utils/ephemeral-relay":{"types":"./dist/src/utils/ephemeral-relay.d.ts","import":"./dist/esm/src/utils/ephemeral-relay.js","default":"./dist/src/utils/ephemeral-relay.js","require":"./dist/src/utils/ephemeral-relay.js"}},"scripts":{"lint":"eslint . --ext .ts","test":"jest","build":"npx rimraf dist && npm run build:cjs && npm run build:esm","start":"npm run example:nip07","format":"prettier --write \"src/**/*.ts\" \"tests/**/*.ts\" \"examples/**/*.ts\"","example":"ts-node examples/basic-example.ts","prepack":"npm run build && npm run pack:verify","promote":"scripts/promote-to-main.sh","release":"npm run release:patch && npm run release:push","// Build":"-------------- Build Commands --------------","test:all":"npm test","test:bun":"bun test ./tests --max-concurrency 1 --timeout 30000","build:cjs":"tsc -p tsconfig.json","build:esm":"tsc -p tsconfig.esm.json && node scripts/postbuild-esm.js","test:core":"jest tests/nip01","// Release":"-------------- Release Commands --------------","example:dm":"ts-node examples/nip04/direct-message.ts","test:event":"jest tests/nip01/event/event.test.ts","test:nip01":"jest tests/nip01","test:nip02":"jest tests/nip02","test:nip04":"jest tests/nip04","test:nip05":"jest tests/nip05","test:nip07":"jest tests/nip07","test:nip09":"jest tests/nip09","test:nip10":"jest tests/nip10","test:nip11":"jest tests/nip11","test:nip17":"jest tests/nip17","test:nip19":"jest tests/nip19","test:nip21":"jest tests/nip21","test:nip44":"jest tests/nip44","test:nip46":"jest tests/nip46","test:nip47":"jest tests/nip47","test:nip50":"jest tests/nip50","test:nip57":"jest tests/nip57","test:nip65":"jest tests/nip65","test:nip66":"jest tests/nip66","test:nostr":"jest tests/nip01/nostr.test.ts","test:relay":"jest tests/nip01/relay","test:watch":"jest --watch","// Test NIP":"-------------- NIP-specific Tests --------------","example:all":"npm run example","pack:verify":"node scripts/verify-pack.js","test:crypto":"jest tests/utils/crypto.test.ts tests/nip04 tests/nip44","// Test Core":"-------------- Core Component Tests --------------","// Test Main":"-------------- Main Test Commands --------------","release:push":"git push && git push --tags","example:basic":"npm run example && npm run example:crypto && npm run example:dm","example:debug":"DEBUG=true ts-node examples/basic-example.ts","example:nip01":"npm run example:nip01:event:ordering && npm run example:nip01:relay:connection && npm run example:nip01:relay:query && npm run example:nip01:validation","example:nip02":"ts-node examples/nip02/nip02-demo.ts","example:nip04":"ts-node examples/nip04/direct-message.ts","example:nip05":"ts-node examples/nip05/nip05-demo.ts","example:nip07":"cd examples/nip07 && npm install && npm run build && npm start","example:nip09":"ts-node examples/nip09/deletion-request.ts","example:nip10":"ts-node examples/nip10/nip10-demo.ts","example:nip11":"ts-node examples/nip11/relay-info-example.ts","example:nip17":"ts-node examples/nip17/nip17-demo.ts","example:nip19":"ts-node examples/nip19/nip19-demo.ts","example:nip21":"ts-node examples/nip21/nip21-demo.ts","example:nip44":"ts-node examples/nip44/nip44-demo.ts","example:nip46":"ts-node examples/nip46/unified-example.ts","example:nip47":"ts-node examples/nip47/basic-example.ts","example:nip50":"ts-node examples/nip50/search-demo.ts","example:nip57":"ts-node examples/nip57/basic-example.ts","example:nip65":"ts-node examples/nip65/nip65-demo.ts","example:nip66":"ts-node examples/nip66/nip66-demo.ts","release:major":"npm run release:prepare && npm version major","release:minor":"npm run release:prepare && npm version minor","release:patch":"npm run release:prepare && npm version patch","test:coverage":"jest --coverage","test:identity":"jest tests/nip05 tests/nip07 tests/nip19","// Example NIP":"-------------- Other NIP Examples --------------","// Test Groups":"-------------- Test Category Groups --------------","build:examples":"tsc -p examples/tsconfig.json","example:crypto":"ts-node examples/crypto-demo.ts","test:bun:watch":"bun test ./tests --watch --max-concurrency 1 --timeout 30000","test:event:all":"jest tests/nip01/event","test:protocols":"jest tests/nip46 tests/nip47 tests/nip57","example:verbose":"VERBOSE=true ts-node examples/basic-example.ts","release:prepare":"npm run lint && npm test && npm run build && npm run pack:verify","// App Shortcuts":"-------------- Application Shortcuts --------------","// Bun Migration":"-------------- Bun Test Migration --------------","// Example Basic":"-------------- Basic Examples --------------","// Lint & Format":"-------------- Code Quality --------------","example:advanced":"npm run example:nip46 && npm run example:nip47:error-handling","example:identity":"npm run example:nip05 && npm run example:nip07 && npm run example:nip19","example:nip07:dm":"ts-node examples/nip07/direct-message.ts","example:nip44:js":"node examples/nip44/nip44-demo.js","example:payments":"npm run example:nip47 && npm run example:nip57","test:crypto:core":"jest tests/utils/crypto.test.ts","test:integration":"jest tests/integration.test.ts","test:nip01:event":"jest tests/nip01/event","test:nip01:relay":"jest tests/nip01/relay","// Example Groups":"-------------- Example Category Groups --------------","// Example NIP-01":"-------------- NIP-01 Examples --------------","example:messaging":"npm run example:dm && npm run example:nip04 && npm run example:nip44 && npm run example:nip17","example:nip19:tlv":"ts-node examples/nip19/tlv-example.ts","example:nip19:demo":"ts-node examples/nip19/nip19-demo.ts","example:validation":"npm run example:nip01:validation","example:nip07:build":"cd examples/nip07 && npm install && npm run build","example:nip46:basic":"ts-node examples/nip46/basic-example.ts","example:nip47:nip44":"ts-node examples/nip47/nip44-encryption.ts","example:nip57:lnurl":"ts-node examples/nip57/lnurl-server-simulation.ts","example:rate-limits":"ts-node examples/rate-limit-configuration-example.ts","test:event:ordering":"jest tests/nip01/event/event-ordering.test.ts","test:utils:relayUrl":"jest tests/utils/relayUrl.test.ts","// Branch Management":"-------------- Branch Management --------------","example:nip19:bech32":"ts-node examples/nip19/bech32-example.ts","example:nip46:simple":"ts-node examples/nip46/simple/simple-example.ts","example:nip57:client":"ts-node examples/nip57/zap-client-example.ts","example:nip46:minimal":"ts-node examples/nip46/minimal.ts","example:nip47:verbose":"VERBOSE=true ts-node examples/nip47/basic-example.ts","test:nip01:relay:pool":"jest tests/nip01/relay/relayPool.test.ts","example:nip19:security":"ts-node examples/nip19/nip19-security.ts","example:nip46:advanced":"ts-node examples/nip46/advanced/remote-signing-demo.ts","example:nip46:test-all":"ts-node examples/nip46/test-all-examples.ts","test:event:addressable":"jest tests/nip01/event/addressable-events.test.ts","test:nip01:relay:filter":"jest tests/nip01/relay/filters.test.ts","example:custom-websocket":"ts-node examples/custom-websocket-example.ts","example:nip01:relay:pool":"ts-node examples/nip01/relay/relay-pool-example.ts","example:nip01:validation":"ts-node examples/client/validation-flow.ts","example:nip19:validation":"ts-node examples/nip19/validation-example.ts","example:nip44:compliance":"ts-node examples/nip44/nip44-compliance-demo.ts","example:nip47:expiration":"ts-node examples/nip47/request-expiration-example.ts","example:nip57:validation":"ts-node examples/nip57/invoice-validation-example.ts","example:nip01:relay:query":"ts-node examples/nip01/relay/relay-query-example.ts","example:nip44:test-vector":"ts-node examples/nip44/nip44-test-vector.ts","example:nip46:from-scratch":"ts-node examples/nip46/from-scratch/implementation-from-scratch.ts","test:nip01:relay:reconnect":"jest tests/nip01/relay/relay-reconnect.test.ts","test:nip01:relay:websocket":"jest tests/nip01/relay/websocket-implementation.test.ts","example:nip01:relay:filters":"ts-node examples/nip01/relay/filter-types-example.ts","example:nip46:simple-client":"ts-node examples/nip46/simple/simple-client-test.ts","test:nip01:relay:connection":"jest tests/nip01/relay/relay.test.ts","example:nip01:event:ordering":"ts-node examples/nip01/event/event-ordering-demo.ts","example:nip44:version-compat":"ts-node examples/nip44/nip44-version-compatibility.ts","example:nip47:client-service":"ts-node examples/nip47/basic-client-service.ts","example:nip47:error-handling":"ts-node examples/nip47/error-handling-example.ts","example:nip01:relay:reconnect":"ts-node examples/nip01/relay/relay-reconnect-example.ts","example:nip01:relay:auto-close":"ts-node examples/nip01/relay/auto-unsubscribe-example.ts","example:nip01:relay:connection":"ts-node examples/nip01/relay/relay-connection-example.ts","example:nip19:security-example":"ts-node examples/nip19/security-example.ts","example:nip01:event:addressable":"ts-node examples/nip01/event/addressable-events.ts","example:nip01:event:replaceable":"ts-node examples/nip01/event/replaceable-events.ts","example:nip01:url-preprocessing":"ts-node examples/nip01/url-preprocessing-example.ts","example:nip02:pubkey-normalization":"ts-node examples/nip02/pubkey-normalization-example.ts","example:nip47:encryption-negotiation":"ts-node examples/nip47/encryption-negotiation.ts","example:nip01:relay:pool-url-normalization":"ts-node examples/nip01/relay-pool-url-normalization-example.ts","example:nip46:connection-string-validation":"ts-node examples/nip46/connection-string-validation-example.ts"},"_npmUser":{"name":"bitcoinplebdev","email":"austinkelsay@protonmail.com"},"_integrity":"sha512-uuY+6tMfk7oJ/0UDtKNnJiGbAIgyrfLLvKsTP7nc9PRcqMC67OEl8Q+J0rWxPFlbLlJnovNTkm6ScQyNlL2B2g==","_npmVersion":"10.8.3","description":"Secure Nostr Software Toolkit for Renegades - A comprehensive TypeScript library for Nostr protocol implementation","directories":{},"_nodeVersion":"24.3.0","dependencies":{"ws":"^8.15.1","zod":"^3.22.4","crypto-js":"^4.2.0","@scure/base":"^1.2.4","@noble/curves":"^1.8.1","@noble/hashes":"^1.3.3","@noble/ciphers":"^0.4.1","websocket-polyfill":"^0.0.3","light-bolt11-decoder":"^3.2.0"},"react-native":"./dist/esm/src/entries/index.web.js","_hasShrinkwrap":false,"devDependencies":{"jest":"^29.7.0","eslint":"^8.56.0","rimraf":"^3.0.2","ts-jest":"^29.1.1","ts-node":"^10.9.2","prettier":"^3.1.1","@types/ws":"^8.18.0","browserify":"^17.0.1","typescript":"^5.3.3","@types/jest":"^29.5.11","@types/node":"^20.10.6","@types/crypto-js":"^4.2.2","@typescript-eslint/parser":"^6.17.0","@typescript-eslint/eslint-plugin":"^6.17.0"},"_npmOperationalInternal":{"tmp":"tmp/snstr_0.3.1_1770680978722_0.5543460289667779","host":"s3://npm-registry-packages-npm-production"}},"0.3.2":{"name":"snstr","version":"0.3.2","keywords":["nostr","nostr-protocol","event","client","relay","typescript","lightweight","nip46","remote-signing","encryption","nip47","wallet-connect","lightning"],"author":{"name":"plebdev"},"license":"MIT","_id":"snstr@0.3.2","maintainers":[{"name":"bitcoinplebdev","email":"austinkelsay@protonmail.com"}],"dist":{"shasum":"655326993689b9e5063015f2298d3d5a88c1298a","tarball":"https://registry.npmjs.org/snstr/-/snstr-0.3.2.tgz","fileCount":252,"integrity":"sha512-0L+PFELzLvcn7VxDXS+WilPAXJPBIleIDlUqukGgrdHtt425bDxItuu106C6NQBOCHt49vTgIsgMnRKzUM59sQ==","signatures":[{"sig":"MEUCICxi1nQADPm92MzDdxvr+vmOTjNm+SNRUaEuc3wSXG0kAiEAvvfORrE7L/ycxVSjqOSE2fcSEvBheAH5A1wG6tQTQBE=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1794631},"main":"dist/src/index.js","types":"dist/src/index.d.ts","exports":{".":{"types":"./dist/src/index.d.ts","import":"./dist/esm/src/index.js","browser":"./dist/esm/src/entries/index.web.js","default":"./dist/src/index.js","require":"./dist/src/index.js","react-native":"./dist/esm/src/entries/index.web.js"},"./nip04":{"types":"./dist/src/nip04/index.d.ts","import":"./dist/esm/src/nip04/index.js","browser":"./dist/esm/src/nip04/web.js","default":"./dist/src/nip04/index.js","require":"./dist/src/nip04/index.js","react-native":"./dist/esm/src/nip04/web.js"},"./nip07-ambient":{"types":"./dist/src/nip07/ambient.d.ts","import":"./dist/esm/src/nip07/ambient.js","default":"./dist/src/nip07/ambient.js","require":"./dist/src/nip07/ambient.js"},"./utils/ephemeral-relay":{"types":"./dist/src/utils/ephemeral-relay.d.ts","import":"./dist/esm/src/utils/ephemeral-relay.js","default":"./dist/src/utils/ephemeral-relay.js","require":"./dist/src/utils/ephemeral-relay.js"}},"gitHead":"c88154449730c901fb7d4a78052d6923fc0c04b3","scripts":{"lint":"eslint . --ext .ts","test":"jest","build":"npx rimraf dist && npm run build:cjs && npm run build:esm","start":"npm run example:nip07","format":"prettier --write \"src/**/*.ts\" \"tests/**/*.ts\" \"examples/**/*.ts\"","example":"ts-node examples/basic-example.ts","prepack":"npm run build && npm run pack:verify","promote":"scripts/promote-to-main.sh","release":"npm run release:patch && npm run release:push","// Build":"-------------- Build Commands --------------","test:all":"npm test","test:bun":"bun test ./tests --max-concurrency 1 --timeout 30000","build:cjs":"tsc -p tsconfig.json","build:esm":"tsc -p tsconfig.esm.json && node scripts/postbuild-esm.js","test:core":"jest tests/nip01","// Release":"-------------- Release Commands --------------","example:dm":"ts-node examples/nip04/direct-message.ts","test:event":"jest tests/nip01/event/event.test.ts","test:nip01":"jest tests/nip01","test:nip02":"jest tests/nip02","test:nip04":"jest tests/nip04","test:nip05":"jest tests/nip05","test:nip07":"jest tests/nip07","test:nip09":"jest tests/nip09","test:nip10":"jest tests/nip10","test:nip11":"jest tests/nip11","test:nip17":"jest tests/nip17","test:nip19":"jest tests/nip19","test:nip21":"jest tests/nip21","test:nip44":"jest tests/nip44","test:nip46":"jest tests/nip46","test:nip47":"jest tests/nip47","test:nip50":"jest tests/nip50","test:nip57":"jest tests/nip57","test:nip65":"jest tests/nip65","test:nip66":"jest tests/nip66","test:nostr":"jest tests/nip01/nostr.test.ts","test:relay":"jest tests/nip01/relay","test:watch":"jest --watch","// Test NIP":"-------------- NIP-specific Tests --------------","example:all":"npm run example","pack:verify":"node scripts/verify-pack.js","test:crypto":"jest tests/utils/crypto.test.ts tests/nip04 tests/nip44","// Test Core":"-------------- Core Component Tests --------------","// Test Main":"-------------- Main Test Commands --------------","release:push":"git push && git push --tags","example:basic":"npm run example && npm run example:crypto && npm run example:dm","example:debug":"DEBUG=true ts-node examples/basic-example.ts","example:nip01":"npm run example:nip01:event:ordering && npm run example:nip01:relay:connection && npm run example:nip01:relay:query && npm run example:nip01:validation","example:nip02":"ts-node examples/nip02/nip02-demo.ts","example:nip04":"ts-node examples/nip04/direct-message.ts","example:nip05":"ts-node examples/nip05/nip05-demo.ts","example:nip07":"cd examples/nip07 && npm install && npm run build && npm start","example:nip09":"ts-node examples/nip09/deletion-request.ts","example:nip10":"ts-node examples/nip10/nip10-demo.ts","example:nip11":"ts-node examples/nip11/relay-info-example.ts","example:nip17":"ts-node examples/nip17/nip17-demo.ts","example:nip19":"ts-node examples/nip19/nip19-demo.ts","example:nip21":"ts-node examples/nip21/nip21-demo.ts","example:nip44":"ts-node examples/nip44/nip44-demo.ts","example:nip46":"ts-node examples/nip46/unified-example.ts","example:nip47":"ts-node examples/nip47/basic-example.ts","example:nip50":"ts-node examples/nip50/search-demo.ts","example:nip57":"ts-node examples/nip57/basic-example.ts","example:nip65":"ts-node examples/nip65/nip65-demo.ts","example:nip66":"ts-node examples/nip66/nip66-demo.ts","release:major":"npm run release:prepare && npm version major","release:minor":"npm run release:prepare && npm version minor","release:patch":"npm run release:prepare && npm version patch","test:coverage":"jest --coverage","test:identity":"jest tests/nip05 tests/nip07 tests/nip19","// Example NIP":"-------------- Other NIP Examples --------------","// Test Groups":"-------------- Test Category Groups --------------","build:examples":"tsc -p examples/tsconfig.json","example:crypto":"ts-node examples/crypto-demo.ts","test:bun:watch":"bun test ./tests --watch --max-concurrency 1 --timeout 30000","test:event:all":"jest tests/nip01/event","test:protocols":"jest tests/nip46 tests/nip47 tests/nip57","example:verbose":"VERBOSE=true ts-node examples/basic-example.ts","release:prepare":"npm run lint && npm test && npm run build && npm run pack:verify","// App Shortcuts":"-------------- Application Shortcuts --------------","// Bun Migration":"-------------- Bun Test Migration --------------","// Example Basic":"-------------- Basic Examples --------------","// Lint & Format":"-------------- Code Quality --------------","example:advanced":"npm run example:nip46 && npm run example:nip47:error-handling","example:identity":"npm run example:nip05 && npm run example:nip07 && npm run example:nip19","example:nip07:dm":"ts-node examples/nip07/direct-message.ts","example:nip44:js":"node examples/nip44/nip44-demo.js","example:payments":"npm run example:nip47 && npm run example:nip57","test:crypto:core":"jest tests/utils/crypto.test.ts","test:integration":"jest tests/integration.test.ts","test:nip01:event":"jest tests/nip01/event","test:nip01:relay":"jest tests/nip01/relay","// Example Groups":"-------------- Example Category Groups --------------","// Example NIP-01":"-------------- NIP-01 Examples --------------","example:messaging":"npm run example:dm && npm run example:nip04 && npm run example:nip44 && npm run example:nip17","example:nip19:tlv":"ts-node examples/nip19/tlv-example.ts","example:nip19:demo":"ts-node examples/nip19/nip19-demo.ts","example:validation":"npm run example:nip01:validation","example:nip07:build":"cd examples/nip07 && npm install && npm run build","example:nip46:basic":"ts-node examples/nip46/basic-example.ts","example:nip47:nip44":"ts-node examples/nip47/nip44-encryption.ts","example:nip57:lnurl":"ts-node examples/nip57/lnurl-server-simulation.ts","example:rate-limits":"ts-node examples/rate-limit-configuration-example.ts","test:event:ordering":"jest tests/nip01/event/event-ordering.test.ts","test:utils:relayUrl":"jest tests/utils/relayUrl.test.ts","// Branch Management":"-------------- Branch Management --------------","example:nip19:bech32":"ts-node examples/nip19/bech32-example.ts","example:nip46:simple":"ts-node examples/nip46/simple/simple-example.ts","example:nip57:client":"ts-node examples/nip57/zap-client-example.ts","example:nip46:minimal":"ts-node examples/nip46/minimal.ts","example:nip47:verbose":"VERBOSE=true ts-node examples/nip47/basic-example.ts","test:nip01:relay:pool":"jest tests/nip01/relay/relayPool.test.ts","example:nip19:security":"ts-node examples/nip19/nip19-security.ts","example:nip46:advanced":"ts-node examples/nip46/advanced/remote-signing-demo.ts","example:nip46:test-all":"ts-node examples/nip46/test-all-examples.ts","test:event:addressable":"jest tests/nip01/event/addressable-events.test.ts","test:nip01:relay:filter":"jest tests/nip01/relay/filters.test.ts","example:custom-websocket":"ts-node examples/custom-websocket-example.ts","example:nip01:relay:pool":"ts-node examples/nip01/relay/relay-pool-example.ts","example:nip01:validation":"ts-node examples/client/validation-flow.ts","example:nip19:validation":"ts-node examples/nip19/validation-example.ts","example:nip44:compliance":"ts-node examples/nip44/nip44-compliance-demo.ts","example:nip47:expiration":"ts-node examples/nip47/request-expiration-example.ts","example:nip57:validation":"ts-node examples/nip57/invoice-validation-example.ts","example:nip01:relay:query":"ts-node examples/nip01/relay/relay-query-example.ts","example:nip44:test-vector":"ts-node examples/nip44/nip44-test-vector.ts","example:nip46:from-scratch":"ts-node examples/nip46/from-scratch/implementation-from-scratch.ts","test:nip01:relay:reconnect":"jest tests/nip01/relay/relay-reconnect.test.ts","test:nip01:relay:websocket":"jest tests/nip01/relay/websocket-implementation.test.ts","example:nip01:relay:filters":"ts-node examples/nip01/relay/filter-types-example.ts","example:nip46:simple-client":"ts-node examples/nip46/simple/simple-client-test.ts","test:nip01:relay:connection":"jest tests/nip01/relay/relay.test.ts","example:nip01:event:ordering":"ts-node examples/nip01/event/event-ordering-demo.ts","example:nip44:version-compat":"ts-node examples/nip44/nip44-version-compatibility.ts","example:nip47:client-service":"ts-node examples/nip47/basic-client-service.ts","example:nip47:error-handling":"ts-node examples/nip47/error-handling-example.ts","example:nip01:relay:reconnect":"ts-node examples/nip01/relay/relay-reconnect-example.ts","example:nip01:relay:auto-close":"ts-node examples/nip01/relay/auto-unsubscribe-example.ts","example:nip01:relay:connection":"ts-node examples/nip01/relay/relay-connection-example.ts","example:nip19:security-example":"ts-node examples/nip19/security-example.ts","example:nip01:event:addressable":"ts-node examples/nip01/event/addressable-events.ts","example:nip01:event:replaceable":"ts-node examples/nip01/event/replaceable-events.ts","example:nip01:url-preprocessing":"ts-node examples/nip01/url-preprocessing-example.ts","example:nip02:pubkey-normalization":"ts-node examples/nip02/pubkey-normalization-example.ts","example:nip47:encryption-negotiation":"ts-node examples/nip47/encryption-negotiation.ts","example:nip01:relay:pool-url-normalization":"ts-node examples/nip01/relay-pool-url-normalization-example.ts","example:nip46:connection-string-validation":"ts-node examples/nip46/connection-string-validation-example.ts"},"_npmUser":{"name":"bitcoinplebdev","email":"austinkelsay@protonmail.com"},"_npmVersion":"10.9.4","description":"Secure Nostr Software Toolkit for Renegades - A comprehensive TypeScript library for Nostr protocol implementation","directories":{},"_nodeVersion":"22.21.1","dependencies":{"ws":"^8.15.1","zod":"^3.22.4","crypto-js":"^4.2.0","@scure/base":"^1.2.4","@noble/curves":"^1.8.1","@noble/hashes":"^1.3.3","@noble/ciphers":"^0.4.1","websocket-polyfill":"^0.0.3","light-bolt11-decoder":"^3.2.0"},"react-native":"./dist/esm/src/entries/index.web.js","_hasShrinkwrap":false,"devDependencies":{"jest":"^29.7.0","eslint":"^8.56.0","rimraf":"^3.0.2","ts-jest":"^29.1.1","ts-node":"^10.9.2","prettier":"^3.1.1","@types/ws":"^8.18.0","browserify":"^17.0.1","typescript":"^5.3.3","@types/jest":"^29.5.11","@types/node":"^20.10.6","@types/crypto-js":"^4.2.2","@typescript-eslint/parser":"^6.17.0","@typescript-eslint/eslint-plugin":"^6.17.0"},"_npmOperationalInternal":{"tmp":"tmp/snstr_0.3.2_1772393801658_0.3459825931166145","host":"s3://npm-registry-packages-npm-production"}},"0.3.3":{"name":"snstr","version":"0.3.3","description":"Secure Nostr Software Toolkit for Renegades - A comprehensive TypeScript library for Nostr protocol implementation","main":"dist/src/index.js","types":"dist/src/index.d.ts","react-native":"./dist/esm/src/entries/index.web.js","exports":{".":{"types":"./dist/src/index.d.ts","import":"./dist/esm/src/index.js","require":"./dist/src/index.js","react-native":"./dist/esm/src/entries/index.web.js","browser":"./dist/esm/src/entries/index.web.js","default":"./dist/src/index.js"},"./nip07-ambient":{"types":"./dist/src/nip07/ambient.d.ts","import":"./dist/esm/src/nip07/ambient.js","require":"./dist/src/nip07/ambient.js","default":"./dist/src/nip07/ambient.js"},"./nip04":{"types":"./dist/src/nip04/index.d.ts","import":"./dist/esm/src/nip04/index.js","require":"./dist/src/nip04/index.js","react-native":"./dist/esm/src/nip04/web.js","browser":"./dist/esm/src/nip04/web.js","default":"./dist/src/nip04/index.js"},"./utils/ephemeral-relay":{"types":"./dist/src/utils/ephemeral-relay.d.ts","import":"./dist/esm/src/utils/ephemeral-relay.js","require":"./dist/src/utils/ephemeral-relay.js","default":"./dist/src/utils/ephemeral-relay.js"}},"scripts":{"// Build":"-------------- Build Commands --------------","build":"npx rimraf dist && npm run build:cjs && npm run build:esm","build:cjs":"tsc -p tsconfig.json","build:esm":"tsc -p tsconfig.esm.json && node scripts/postbuild-esm.js","pack:verify":"node scripts/verify-pack.js","prepack":"npm run build && npm run pack:verify","build:examples":"tsc -p examples/tsconfig.json","// Lint & Format":"-------------- Code Quality --------------","lint":"eslint . --ext .ts","format":"prettier --write \"src/**/*.ts\" \"tests/**/*.ts\" \"examples/**/*.ts\"","// Test Main":"-------------- Main Test Commands --------------","test":"jest","test:watch":"jest --watch","test:coverage":"jest --coverage","test:integration":"jest tests/integration.test.ts","// Bun Migration":"-------------- Bun Test Migration --------------","test:bun":"bun test ./tests --max-concurrency 1 --timeout 30000","test:bun:watch":"bun test ./tests --watch --max-concurrency 1 --timeout 30000","// Test Core":"-------------- Core Component Tests --------------","test:nip01":"jest tests/nip01","test:nip01:event":"jest tests/nip01/event","test:nip01:relay":"jest tests/nip01/relay","test:event":"jest tests/nip01/event/event.test.ts","test:event:ordering":"jest tests/nip01/event/event-ordering.test.ts","test:event:addressable":"jest tests/nip01/event/addressable-events.test.ts","test:event:all":"jest tests/nip01/event","test:nostr":"jest tests/nip01/nostr.test.ts","test:relay":"jest tests/nip01/relay","test:nip01:relay:connection":"jest tests/nip01/relay/relay.test.ts","test:nip01:relay:filter":"jest tests/nip01/relay/filters.test.ts","test:nip01:relay:reconnect":"jest tests/nip01/relay/relay-reconnect.test.ts","test:nip01:relay:pool":"jest tests/nip01/relay/relayPool.test.ts","test:nip01:relay:websocket":"jest tests/nip01/relay/websocket-implementation.test.ts","test:crypto:core":"jest tests/utils/crypto.test.ts","test:utils:relayUrl":"jest tests/utils/relayUrl.test.ts","// Test NIP":"-------------- NIP-specific Tests --------------","test:nip02":"jest tests/nip02","test:nip04":"jest tests/nip04","test:nip05":"jest tests/nip05","test:nip07":"jest tests/nip07","test:nip09":"jest tests/nip09","test:nip10":"jest tests/nip10","test:nip11":"jest tests/nip11","test:nip17":"jest tests/nip17","test:nip19":"jest tests/nip19","test:nip21":"jest tests/nip21","test:nip44":"jest tests/nip44","test:nip46":"jest tests/nip46","test:nip47":"jest tests/nip47","test:nip50":"jest tests/nip50","test:nip57":"jest tests/nip57","test:nip65":"jest tests/nip65","test:nip66":"jest tests/nip66","// Test Groups":"-------------- Test Category Groups --------------","test:all":"npm test","test:core":"jest tests/nip01","test:crypto":"jest tests/utils/crypto.test.ts tests/nip04 tests/nip44","test:identity":"jest tests/nip05 tests/nip07 tests/nip19","test:protocols":"jest tests/nip46 tests/nip47 tests/nip57","// Example Basic":"-------------- Basic Examples --------------","example":"ts-node examples/basic-example.ts","example:verbose":"VERBOSE=true ts-node examples/basic-example.ts","example:debug":"DEBUG=true ts-node examples/basic-example.ts","example:custom-websocket":"ts-node examples/custom-websocket-example.ts","example:crypto":"ts-node examples/crypto-demo.ts","example:dm":"ts-node examples/nip04/direct-message.ts","example:rate-limits":"ts-node examples/rate-limit-configuration-example.ts","// Example NIP-01":"-------------- NIP-01 Examples --------------","example:nip01:event:ordering":"ts-node examples/nip01/event/event-ordering-demo.ts","example:nip01:event:addressable":"ts-node examples/nip01/event/addressable-events.ts","example:nip01:event:replaceable":"ts-node examples/nip01/event/replaceable-events.ts","example:nip01:relay:connection":"ts-node examples/nip01/relay/relay-connection-example.ts","example:nip01:relay:filters":"ts-node examples/nip01/relay/filter-types-example.ts","example:nip01:relay:auto-close":"ts-node examples/nip01/relay/auto-unsubscribe-example.ts","example:nip01:relay:query":"ts-node examples/nip01/relay/relay-query-example.ts","example:nip01:relay:reconnect":"ts-node examples/nip01/relay/relay-reconnect-example.ts","example:nip01:relay:pool":"ts-node examples/nip01/relay/relay-pool-example.ts","example:nip01:url-preprocessing":"ts-node examples/nip01/url-preprocessing-example.ts","example:nip01:relay:pool-url-normalization":"ts-node examples/nip01/relay-pool-url-normalization-example.ts","example:nip01:validation":"ts-node examples/client/validation-flow.ts","// Example NIP":"-------------- Other NIP Examples --------------","example:nip02":"ts-node examples/nip02/nip02-demo.ts","example:nip02:pubkey-normalization":"ts-node examples/nip02/pubkey-normalization-example.ts","example:nip04":"ts-node examples/nip04/direct-message.ts","example:nip05":"ts-node examples/nip05/nip05-demo.ts","example:nip09":"ts-node examples/nip09/deletion-request.ts","example:nip10":"ts-node examples/nip10/nip10-demo.ts","example:nip07":"cd examples/nip07 && npm install && npm run build && npm start","example:nip07:build":"cd examples/nip07 && npm install && npm run build","example:nip07:dm":"ts-node examples/nip07/direct-message.ts","example:nip11":"ts-node examples/nip11/relay-info-example.ts","example:nip19":"ts-node examples/nip19/nip19-demo.ts","example:nip19:bech32":"ts-node examples/nip19/bech32-example.ts","example:nip19:tlv":"ts-node examples/nip19/tlv-example.ts","example:nip19:validation":"ts-node examples/nip19/validation-example.ts","example:nip19:security":"ts-node examples/nip19/nip19-security.ts","example:nip19:security-example":"ts-node examples/nip19/security-example.ts","example:nip19:demo":"ts-node examples/nip19/nip19-demo.ts","example:nip21":"ts-node examples/nip21/nip21-demo.ts","example:nip44":"ts-node examples/nip44/nip44-demo.ts","example:nip44:js":"node examples/nip44/nip44-demo.js","example:nip44:version-compat":"ts-node examples/nip44/nip44-version-compatibility.ts","example:nip44:test-vector":"ts-node examples/nip44/nip44-test-vector.ts","example:nip44:compliance":"ts-node examples/nip44/nip44-compliance-demo.ts","example:nip17":"ts-node examples/nip17/nip17-demo.ts","example:nip46":"ts-node examples/nip46/unified-example.ts","example:nip46:minimal":"ts-node examples/nip46/minimal.ts","example:nip46:basic":"ts-node examples/nip46/basic-example.ts","example:nip46:advanced":"ts-node examples/nip46/advanced/remote-signing-demo.ts","example:nip46:from-scratch":"ts-node examples/nip46/from-scratch/implementation-from-scratch.ts","example:nip46:simple":"ts-node examples/nip46/simple/simple-example.ts","example:nip46:simple-client":"ts-node examples/nip46/simple/simple-client-test.ts","example:nip46:test-all":"ts-node examples/nip46/test-all-examples.ts","example:nip46:connection-string-validation":"ts-node examples/nip46/connection-string-validation-example.ts","example:nip47":"ts-node examples/nip47/basic-example.ts","example:nip47:verbose":"VERBOSE=true ts-node examples/nip47/basic-example.ts","example:nip47:client-service":"ts-node examples/nip47/basic-client-service.ts","example:nip47:error-handling":"ts-node examples/nip47/error-handling-example.ts","example:nip47:expiration":"ts-node examples/nip47/request-expiration-example.ts","example:nip47:nip44":"ts-node examples/nip47/nip44-encryption.ts","example:nip47:encryption-negotiation":"ts-node examples/nip47/encryption-negotiation.ts","example:nip50":"ts-node examples/nip50/search-demo.ts","example:nip57":"ts-node examples/nip57/basic-example.ts","example:nip57:client":"ts-node examples/nip57/zap-client-example.ts","example:nip57:lnurl":"ts-node examples/nip57/lnurl-server-simulation.ts","example:nip57:validation":"ts-node examples/nip57/invoice-validation-example.ts","example:nip65":"ts-node examples/nip65/nip65-demo.ts","example:nip66":"ts-node examples/nip66/nip66-demo.ts","// Example Groups":"-------------- Example Category Groups --------------","example:all":"npm run example","example:basic":"npm run example && npm run example:crypto && npm run example:dm","example:nip01":"npm run example:nip01:event:ordering && npm run example:nip01:relay:connection && npm run example:nip01:relay:query && npm run example:nip01:validation","example:messaging":"npm run example:dm && npm run example:nip04 && npm run example:nip44 && npm run example:nip17","example:identity":"npm run example:nip05 && npm run example:nip07 && npm run example:nip19","example:payments":"npm run example:nip47 && npm run example:nip57","example:advanced":"npm run example:nip46 && npm run example:nip47:error-handling","example:validation":"npm run example:nip01:validation","// Release":"-------------- Release Commands --------------","release:prepare":"npm run lint && npm test && npm run build && npm run pack:verify","release:patch":"npm run release:prepare && npm version patch","release:minor":"npm run release:prepare && npm version minor","release:major":"npm run release:prepare && npm version major","release:push":"git push && git push --tags","release":"npm run release:patch && npm run release:push","// Branch Management":"-------------- Branch Management --------------","promote":"scripts/promote-to-main.sh","// App Shortcuts":"-------------- Application Shortcuts --------------","start":"npm run example:nip07"},"keywords":["nostr","nostr-protocol","event","client","relay","typescript","lightweight","nip46","remote-signing","encryption","nip47","wallet-connect","lightning"],"author":{"name":"plebdev"},"license":"MIT","devDependencies":{"@types/crypto-js":"^4.2.2","@types/jest":"^29.5.11","@types/node":"^20.10.6","@types/ws":"^8.18.0","@typescript-eslint/eslint-plugin":"^6.17.0","@typescript-eslint/parser":"^6.17.0","browserify":"^17.0.1","eslint":"^8.56.0","jest":"^29.7.0","prettier":"^3.1.1","rimraf":"^3.0.2","ts-jest":"^29.1.1","ts-node":"^10.9.2","typescript":"^5.3.3"},"dependencies":{"@noble/ciphers":"^0.4.1","@noble/curves":"^1.8.1","@noble/hashes":"^1.3.3","@scure/base":"^1.2.4","crypto-js":"^4.2.0","light-bolt11-decoder":"^3.2.0","websocket-polyfill":"^0.0.3","ws":"^8.15.1","zod":"^3.22.4"},"_id":"snstr@0.3.3","gitHead":"1a4c10be11ccf130dbfc6d44f80c396f63160965","_nodeVersion":"22.21.1","_npmVersion":"10.9.4","dist":{"integrity":"sha512-GlGZeDSUvq2KrKOG2aB+4FZgP1zrvO0yC97TGXJkcOjvBzFPEbSFEgipYxZUXa09Fa4mbJ/lrdadnbN5bSKk1Q==","shasum":"ad152bf6c61be726ebd46823ad300da11bdae36d","tarball":"https://registry.npmjs.org/snstr/-/snstr-0.3.3.tgz","fileCount":292,"unpackedSize":1952980,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEUCIFgh1d1XLkpR8wvLUSLh1XPXAIGMCKt3tE8wjR4RdO3tAiEAgBx0RC7AYSUx8OmG8fP2aQs4BTLO4n74umdQbOorv/g="}]},"_npmUser":{"name":"bitcoinplebdev","email":"austinkelsay@protonmail.com"},"directories":{},"maintainers":[{"name":"bitcoinplebdev","email":"austinkelsay@protonmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/snstr_0.3.3_1772927932295_0.27427933773545843"},"_hasShrinkwrap":false}},"time":{"created":"2025-07-02T13:31:12.692Z","modified":"2026-03-07T23:58:52.587Z","0.1.0":"2025-07-02T13:31:12.935Z","0.1.1":"2025-08-07T23:06:10.654Z","0.1.2":"2025-08-16T21:19:31.299Z","0.1.3":"2025-09-19T18:21:10.758Z","0.1.4":"2025-09-19T21:35:42.835Z","0.1.5":"2025-11-06T19:18:40.411Z","0.1.6":"2025-11-11T23:52:13.054Z","0.1.8":"2025-11-12T20:40:33.313Z","0.1.9":"2025-11-14T19:25:52.758Z","0.1.10":"2025-11-14T20:20:30.347Z","0.2.0":"2026-01-23T01:02:16.218Z","0.3.0":"2026-02-09T22:14:20.445Z","0.3.1":"2026-02-09T23:49:38.892Z","0.3.2":"2026-03-01T19:36:41.905Z","0.3.3":"2026-03-07T23:58:52.473Z"},"author":{"name":"plebdev"},"license":"MIT","keywords":["nostr","nostr-protocol","event","client","relay","typescript","lightweight","nip46","remote-signing","encryption","nip47","wallet-connect","lightning"],"description":"Secure Nostr Software Toolkit for Renegades - A comprehensive TypeScript library for Nostr protocol implementation","maintainers":[{"name":"bitcoinplebdev","email":"austinkelsay@protonmail.com"}],"readme":"# SNSTR - Secure Nostr Software Toolkit for Renegades\n\n![SNSTR Logo](https://raw.githubusercontent.com/AustinKelsay/snstr/main/.github/images/snstr.jpg)\n\n[![npm version](https://badge.fury.io/js/snstr.svg)](https://www.npmjs.com/package/snstr)\n\n### Beta Release 🚧\n\nSNSTR is a secure, lightweight TypeScript library for interacting with the Nostr protocol. It provides a simple, easy-to-use API with minimal dependencies.\n\n*SNSTR is fierce. Fierce in its speed, in its flexibility, and most of all its security.*\n\n*SNSTR is steadfast, ever persistent, watching, waiting.*\n\n*SNSTR has vengeance on its mind.*\n\n*SNSTR is a Nostr Development Kit for people that go swimming in jeans*\n\n**⚠️ Important**: This library is in beta testing. While mostly stable, some features may still undergo changes. We encourage users to test thoroughly and report any issues or unexpected behavior.\n\n## Table of Contents\n\n- [Features](#features)\n- [Supported NIPs](#supported-nips)\n- [Installation](#installation)\n- [Basic Usage](#basic-usage)\n- [Configuring Rate Limits](#configuring-rate-limits)\n- [Documentation](#documentation)\n- [Examples](#examples)\n- [Testing](#testing)\n- [Scripts](#scripts)\n  - [Build Scripts](#build-scripts)\n  - [Testing Scripts](#testing-scripts)\n  - [Example Scripts](#example-scripts)\n  - [Code Quality Scripts](#code-quality-scripts)\n- [Development](#development)\n- [Security](#security)\n- [Next.js / Turbopack Guidance](#nextjs--turbopack-guidance)\n\n## Features\n\n![SNSTR Starter Pack](https://raw.githubusercontent.com/AustinKelsay/snstr/main/.github/images/snstr-starter-pack.png)\n\n### Core Functionality\n\n- Event creation and signing with comprehensive validation\n- Relay connections with automatic reconnect\n- **RelayPool for multi-relay management** - Efficient connection pooling, automatic failover, and batch operations\n- **Cross-relay event querying** - `fetchMany()` and `fetchOne()` methods for aggregated event retrieval\n- Filter-based subscriptions\n- Support for replaceable events (kinds 0, 3, 10000-19999)\n- Support for addressable events (kinds 30000-39999)\n\n### Advanced Features\n\n- Encrypted messaging with both NIP-04 (AES-CBC) and NIP-44 (ChaCha20+HMAC)\n- Identity verification with NIP-05 DNS-based identifiers\n- Browser extension integration via NIP-07\n- Remote signing capability via NIP-46\n- Automatic subscription cleanup with `autoClose` option\n- Lightning Zaps integration via NIP-57\n- Threaded conversations via NIP-10\n- Wallet connection via NIP-47\n- Relay list metadata via NIP-65\n- Built-in ephemeral relay for testing and development\n\n## Supported NIPs\n\nSNSTR currently implements the following Nostr Implementation Possibilities (NIPs):\n\n- **NIP-01**: Basic protocol functionality with comprehensive event validation\n- **NIP-02**: Contact List events and interactions (Kind 3)\n- **NIP-04**: Encrypted direct messages using AES-CBC\n- **NIP-05**: DNS identifier verification and relay discovery\n- **NIP-07**: Browser extension integration for key management\n- **NIP-09**: Event deletion requests for removing published events\n- **NIP-10**: Text notes and threading metadata\n- **NIP-11**: Relay Information Document for discovering relay capabilities\n- **NIP-17**: Gift wrapped direct messages using NIP-44 encryption\n- **NIP-19**: Bech32-encoded entities for human-readable identifiers\n- **NIP-21**: URI scheme for nostr links\n- **NIP-44**: Improved encryption with ChaCha20 and HMAC-SHA256 authentication\n- **NIP-46**: Remote signing (bunker) support for secure key management\n- **NIP-47**: Nostr Wallet Connect for secure wallet communication\n- **NIP-50**: Search capability via `search` subscription filters\n- **NIP-57**: Lightning Zaps protocol for Bitcoin payments via Lightning\n- **NIP-65**: Relay List metadata for read/write relay preferences\n- **NIP-66**: Relay discovery and liveness monitoring\n\nFor detailed information on each implementation, see the corresponding directories in the `src/` directory (e.g., `src/nip01/`, `src/nip04/`, etc.).\n\n## Installation\n\n```bash\n# Install from npm (beta release)\nnpm install snstr\n\n# Or clone and build locally for development:\ngit clone https://github.com/AustinKelsay/snstr.git\ncd snstr\nnpm install\nnpm run build\n```\n\n### React Native / Expo\n\n- Works out of the box — no Node polyfills are required.\n- Add secure RNG once at app startup (required by various features):\n  ```ts\n  import 'react-native-get-random-values';\n  ```\n- NIP-04 now works on Web and React Native with the exact same API as Node:\n  ```ts\n  import { encryptNIP04, decryptNIP04 } from 'snstr';\n  const c = encryptNIP04(alicePriv, bobPub, 'hello');\n  const p = decryptNIP04(bobPriv, alicePub, c);\n  ```\n- Prefer NIP-44 for new apps; keep NIP-04 for legacy compatibility.\n\n## Next.js / Turbopack Guidance\n\nsnstr ships both CommonJS and ESM builds and provides a dedicated web entry that avoids Node-only modules.\n\n- Prefer the default import in Next.js; do not add `snstr` to `transpilePackages` unless necessary.\n- If you must transpile third-party packages, rely on the ESM import condition we publish and avoid forcing CJS transforms of `snstr`.\n- At client-only boundaries, dynamic `import('snstr')` is a safe workaround for older setups.\n\nResolution summary:\n\n- Node (CJS): `require('snstr')` → `./dist/src/index.js`.\n- Node/ESM & modern bundlers: `import 'snstr'` → `./dist/esm/src/index.js`.\n- Browsers/React Native: `import 'snstr'` under `browser`/`react-native` conditions → `./dist/esm/src/entries/index.web.js`.\n\nThis dual build removes getter-based CJS re-exports from browser bundles and avoids interop issues observed with Turbopack.\n\n## Basic Usage\n\n```typescript\nimport { Nostr, RelayEvent } from \"snstr\";\n\nasync function main() {\n  // Initialize with relays and connection timeout\n  const client = new Nostr([\"wss://relay.nostr.band\"]);\n\n  // Generate keypair\n  const keys = await client.generateKeys();\n\n  // Connect to relays\n  await client.connectToRelays();\n\n  // Set up event handlers\n  client.on(RelayEvent.Connect, (relay) => {\n    console.log(`Connected to ${relay}`);\n  });\n\n  // Publish a note\n  const note = await client.publishTextNote(\"Hello, Nostr!\");\n  console.log(`Published note with ID: ${note?.id}`);\n\n  // Subscribe to events\n  const subIds = client.subscribe(\n    [{ kinds: [1], limit: 10 }], // Filter for text notes\n    (event, relay) => {\n      console.log(`Received event from ${relay}:`, event);\n    },\n    undefined,\n    { autoClose: true, eoseTimeout: 5000 },\n  );\n\n  // Query events from all relays\n  const manyEvents = await client.fetchMany(\n    [{ kinds: [1], authors: [\"pubkey\"], limit: 10 }],\n    { maxWait: 5000 }\n  );\n  console.log(`Found ${manyEvents.length} events`);\n\n  // Get the most recent event from all relays\n  const latestEvent = await client.fetchOne(\n    [{ kinds: [1], authors: [\"pubkey\"] }],\n    { maxWait: 3000 }\n  );\n  if (latestEvent) {\n    console.log(\"Latest event:\", latestEvent.content);\n  }\n\n  // Cleanup\n  setTimeout(() => {\n    client.unsubscribe(subIds);\n    client.disconnectFromRelays();\n  }, 10000);\n}\n\nmain().catch(console.error);\n```\n\n### Configuring Rate Limits\n\nSNSTR includes built-in rate limiting to prevent abuse. Configure custom limits when creating a client:\n\n```typescript\nimport { Nostr } from \"snstr\";\n\nconst client = new Nostr([\"wss://relay.nostr.band\"], {\n  rateLimits: {\n    subscribe: { limit: 100, windowMs: 60000 }, // 100 per minute (default: 50)\n    publish: { limit: 200, windowMs: 60000 },   // 200 per minute (default: 100)\n    fetch: { limit: 500, windowMs: 60000 }      // 500 per minute (default: 200)\n  }\n});\n\n// Update limits dynamically\nclient.updateRateLimits({ subscribe: { limit: 150, windowMs: 30000 } });\n```\n\nSee [NIP-01 documentation](src/nip01/README.md#rate-limiting) for detailed configuration options.\n\n### Using RelayPool for Multi-Relay Management\n\n```typescript\nimport { RelayPool, generateKeypair, createEvent } from \"snstr\";\n\nasync function relayPoolExample() {\n  // Initialize RelayPool with multiple relays\n  const pool = new RelayPool([\n    \"wss://relay.nostr.band\",\n    \"wss://nos.lol\", \n    \"wss://relay.damus.io\"\n  ]);\n\n  // Generate keypair\n  const keys = await generateKeypair();\n\n  // Publish to multiple relays simultaneously\n  const event = createEvent({\n    kind: 1,\n    content: \"Hello from RelayPool!\",\n    tags: [],\n    privateKey: keys.privateKey\n  });\n\n  const publishPromises = pool.publish(\n    [\"wss://relay.nostr.band\", \"wss://nos.lol\"], \n    event\n  );\n  const results = await Promise.all(publishPromises);\n\n  // Subscribe across multiple relays with automatic failover\n  const subscription = await pool.subscribe(\n    [\"wss://relay.nostr.band\", \"wss://nos.lol\", \"wss://relay.damus.io\"],\n    [{ kinds: [1], limit: 10 }],\n    (event, relayUrl) => {\n      console.log(`Event from ${relayUrl}:`, event.content);\n    },\n    () => {\n      console.log(\"All relays finished sending stored events\");\n    }\n  );\n\n  // Query events synchronously from multiple relays\n  const events = await pool.querySync(\n    [\"wss://relay.nostr.band\", \"wss://nos.lol\"],\n    { kinds: [1], limit: 5 },\n    { timeout: 10000 }\n  );\n  console.log(`Retrieved ${events.length} events`);\n\n  // Cleanup\n  subscription.close();\n  await pool.close();\n}\n\nrelayPoolExample().catch(console.error);\n```\n\n### Event Querying with fetchMany and fetchOne\n\n```typescript\nimport { Nostr } from \"snstr\";\n\nasync function queryExample() {\n  const client = new Nostr([\"wss://relay.nostr.band\", \"wss://nos.lol\"]);\n  await client.connectToRelays();\n\n  // Fetch multiple events from all connected relays\n  const events = await client.fetchMany(\n    [\n      { kinds: [1], authors: [\"pubkey1\", \"pubkey2\"], limit: 20 },\n      { kinds: [0], authors: [\"pubkey1\"] } // Profile metadata\n    ],\n    { maxWait: 5000 } // Wait up to 5 seconds\n  );\n  \n  console.log(`Retrieved ${events.length} events from all relays`);\n  \n  // Fetch the most recent single event\n  const latestNote = await client.fetchOne(\n    [{ kinds: [1], authors: [\"pubkey1\"] }],\n    { maxWait: 3000 }\n  );\n  \n  if (latestNote) {\n    console.log(\"Latest note:\", latestNote.content);\n  }\n\n  client.disconnectFromRelays();\n}\n\nqueryExample().catch(console.error);\n```\n\nFor more examples including encryption, relay management, and NIP-specific features, see the [examples directory](./examples/README.md).\n\n### Custom WebSocket Implementation\n\nSNSTR relies on `websocket-polyfill` when running in Node.js. If you want to provide your own `WebSocket` class (for example when using a different runtime), you can set it with `useWebSocketImplementation`:\n\n```typescript\nimport { useWebSocketImplementation } from \"snstr\";\nimport WS from \"isomorphic-ws\";\n\nuseWebSocketImplementation(WS);\n```\n\nYou can also reset back to the default implementation:\n\n```typescript\nimport { resetWebSocketImplementation } from \"snstr\";\n\nresetWebSocketImplementation();\n```\n\n**Note**: To run the custom WebSocket example (`npm run example:custom-websocket`), you need to install a WebSocket package first:\n\n```bash\n# Install the ws package (used in the example)\nnpm install ws\nnpm install --save-dev @types/ws\n\n# Or use isomorphic-ws for cross-platform compatibility\nnpm install isomorphic-ws\n```\n\n## Documentation\n\nThe project is organized with detailed documentation for different components:\n\n#### Core Documentation\n\n- **[Test Documentation](tests/README.md)**: Overview of test organization and execution\n- **[Examples Documentation](examples/README.md)**: Complete guide to examples for all features\n\n#### NIP Documentation\n\n- **[NIP-01](src/nip01/README.md)**: Basic protocol functionality\n- **[NIP-02](src/nip02/README.md)**: Contact List recommendation\n- **[NIP-04](src/nip04/README.md)**: Encrypted direct messages\n- **[NIP-05](src/nip05/README.md)**: DNS identifier verification\n- **[NIP-07](src/nip07/README.md)**: Browser extension integration\n- **[NIP-09](src/nip09/README.md)**: Event deletion requests\n- **[NIP-10](src/nip10/README.md)**: Text notes and threads\n- **[NIP-11](src/nip11/README.md)**: Relay information document\n- **[NIP-17](src/nip17/README.md)**: Gift wrapped direct messages\n- **[NIP-19](src/nip19/README.md)**: Bech32-encoded entities\n- **[NIP-21](src/nip21/README.md)**: URI scheme for nostr links\n- **[NIP-44](src/nip44/README.md)**: Versioned encryption\n- **[NIP-46](src/nip46/README.md)**: Remote signing protocol\n- **[NIP-47](src/nip47/README.md)**: Nostr Wallet Connect\n- **[NIP-50](src/nip50/README.md)**: Search capability\n- **[NIP-57](src/nip57/README.md)**: Lightning Zaps\n- **[NIP-65](src/nip65/README.md)**: Relay List metadata\n- **[NIP-66](src/nip66/README.md)**: Relay discovery and liveness monitoring\n\n#### Standardization Guidelines\n\n- **[NIP Implementation Guide](src/NIP_STANDARDIZATION.md)**: Standards for implementing NIPs\n- **[Test Standardization](tests/TEST_STANDARDIZATION.md)**: Guide for writing standardized tests\n- **[Example Standardization](examples/EXAMPLE_STANDARDIZATION.md)**: Guide for creating standardized examples\n\n## Examples\n\nSNSTR includes comprehensive examples for all supported features and NIPs:\n\n```bash\n# Run the basic example\nnpm run example\n\n# Run the direct messaging example\nnpm run example:dm  # Uses NIP-04 implementation\n\n# Run additional basic examples\nnpm run example:verbose         # Verbose logging\nnpm run example:debug           # Debug logging\nnpm run example:custom-websocket # Custom WebSocket implementation\nnpm run example:crypto          # Cryptographic functions\nnpm run example:rate-limits     # Rate limit configuration demo\n\n# Run NIP-01 examples\nnpm run example:nip01:event:ordering      # Event ordering demonstration\nnpm run example:nip01:event:addressable   # Addressable events\nnpm run example:nip01:event:replaceable   # Replaceable events\nnpm run example:nip01:relay:connection    # Relay connection management\nnpm run example:nip01:relay:pool          # RelayPool multi-relay demo\nnpm run example:nip01:relay:filters       # Filter types\nnpm run example:nip01:relay:auto-close    # Auto-unsubscribe example\nnpm run example:nip01:relay:query         # Pooled event queries\nnpm run example:nip01:relay:reconnect     # Relay reconnection\nnpm run example:nip01:validation          # NIP-01 validation flow\n\n# Run other NIP-specific examples\nnpm run example:nip04  # Encrypted direct messages\nnpm run example:nip05  # DNS identifiers\nnpm run example:nip09  # Deletion requests\nnpm run example:nip19  # Bech32-encoded entities\nnpm run example:nip44  # Versioned encryption\nnpm run example:nip17  # Gift wrapped direct messages\nnpm run example:nip46  # Remote signing protocol\nnpm run example:nip50  # Search capability\nnpm run example:nip57  # Lightning Zaps\nnpm run example:nip65  # Relay list metadata\nnpm run example:nip66  # Relay discovery and monitoring\n\n# Additional NIP-specific example variants\nnpm run example:nip07          # Browser extension (runs local server)\nnpm run example:nip07:build    # Build browser extension examples\nnpm run example:nip07:dm       # Browser extension direct message\nnpm run example:nip10          # Text Notes and Threads (see README)\nnpm run example:nip11          # Relay information\nnpm run example:nip19:bech32   # Basic Bech32 examples\nnpm run example:nip19:tlv      # TLV entity examples\nnpm run example:nip19:validation # Validation examples\nnpm run example:nip19:security # Security features\nnpm run example:nip21          # URI scheme\nnpm run example:nip44:js       # JavaScript version of NIP-44\nnpm run example:nip44:version-compat # Version compatibility\nnpm run example:nip44:test-vector    # Test vector validation\nnpm run example:nip46:minimal       # Minimal NIP-46 example\nnpm run example:nip46:basic         # Basic NIP-46 example\nnpm run example:nip46:advanced      # Advanced features\nnpm run example:nip46:from-scratch  # Implementation from scratch\nnpm run example:nip46:simple        # Simple client/server\nnpm run example:nip47:verbose       # Verbose wallet connect\nnpm run example:nip47:client-service # Client service example\nnpm run example:nip47:error-handling # Error handling\nnpm run example:nip47:expiration    # Request expiration\nnpm run example:nip57:client        # Zap client\nnpm run example:nip57:lnurl         # LNURL server simulation\nnpm run example:nip57:validation    # Invoice validation\n```\n\nFor a full list of examples and detailed descriptions, see the [examples README](./examples/README.md).\n\n## Testing\n\nSNSTR includes a comprehensive test suite that uses an ephemeral relay to avoid external dependencies:\n\n### Main Test Commands\n\n```bash\n# Run all tests\nnpm test\n\n# Run tests with watch mode for development\nnpm run test:watch\n\n# Generate code coverage report\nnpm run test:coverage\n\n# Run integration tests\nnpm run test:integration\n```\n\n### Test Categories\n\nTests are organized into logical categories for focused testing:\n\n```bash\nnpm run test:core       # Core functionality tests (all NIP-01)\nnpm run test:crypto     # All crypto tests (utils/crypto + NIP-04 + NIP-44)\nnpm run test:identity   # Identity-related tests (NIP-05, NIP-07, NIP-19)\nnpm run test:protocols  # Protocol implementations (NIP-46, NIP-47, NIP-57)\n```\n\n### NIP-01 Core Protocol Tests\n\nNIP-01 tests are further organized by component:\n\n```bash\n# Main NIP-01 tests\nnpm run test:nip01                      # All NIP-01 tests\nnpm run test:nip01:event                # All event-related tests\nnpm run test:nip01:relay                # All relay-related tests\n\n# Event-specific tests\nnpm run test:event                      # Core event creation/validation\nnpm run test:event:ordering             # Event ordering tests\nnpm run test:event:addressable          # Addressable events (kinds 30000-39999)\nnpm run test:event:all                  # All event tests combined\n\n# Relay-specific tests\nnpm run test:relay                      # All relay functionality\nnpm run test:nip01:relay:connection     # Relay connection management\nnpm run test:nip01:relay:filter         # Subscription filter tests\nnpm run test:nip01:relay:reconnect      # Relay reconnection logic\nnpm run test:nip01:relay:pool           # RelayPool multi-relay tests\nnpm run test:nip01:relay:websocket      # WebSocket implementation tests\n\n# Client and utilities\nnpm run test:nostr                      # Nostr client tests\nnpm run test:crypto:core                # Core cryptographic utilities\nnpm run test:utils:relayUrl             # Relay URL normalization\n```\n\n### NIP-Specific Tests\n\nRun tests for individual NIP implementations:\n\n```bash\nnpm run test:nip02    # NIP-02 (Contact Lists)\nnpm run test:nip04    # NIP-04 (Encrypted Direct Messages)\nnpm run test:nip05    # NIP-05 (DNS Identifiers)\nnpm run test:nip07    # NIP-07 (Browser Extensions)\nnpm run test:nip09    # NIP-09 (Event Deletion)\nnpm run test:nip10    # NIP-10 (Text Notes and Threads)\nnpm run test:nip11    # NIP-11 (Relay Information)\nnpm run test:nip17    # NIP-17 (Gift Wrapped Messages)\nnpm run test:nip19    # NIP-19 (Bech32 Entities)\nnpm run test:nip21    # NIP-21 (URI Scheme)\nnpm run test:nip44    # NIP-44 (Versioned Encryption)\nnpm run test:nip46    # NIP-46 (Remote Signing)\nnpm run test:nip47    # NIP-47 (Wallet Connect)\nnpm run test:nip50    # NIP-50 (Search Capability)\nnpm run test:nip57    # NIP-57 (Lightning Zaps)\nnpm run test:nip65    # NIP-65 (Relay List Metadata)\nnpm run test:nip66    # NIP-66 (Relay Discovery)\n```\n\nThe test suite is organized by NIP number, with dedicated directories for each implemented NIP (e.g., `tests/nip01/`, `tests/nip04/`, etc.). This structure allows for focused testing of specific implementations while maintaining comprehensive coverage.\n\nFor more information about the test structure and methodology, see the [tests README](./tests/README.md).\n\n## Scripts\n\nSNSTR provides numerous npm scripts to help with development, testing, and running examples:\n\n### Build Scripts\n\n```bash\n# Build the library\nnpm run build\n\n# Build example files\nnpm run build:examples\n```\n\n### Testing Scripts\n\n```bash\n# Run all tests\nnpm test\n\n# Run tests with watch mode\nnpm run test:watch\n\n# Generate code coverage report\nnpm run test:coverage\n\n# Test by category\nnpm run test:core          # Core functionality (NIP-01)\nnpm run test:crypto        # All crypto (utils/crypto + NIP-04 + NIP-44)\nnpm run test:identity      # Identity-related features (NIP-05, NIP-07, NIP-19)\nnpm run test:protocols     # Protocol implementations (NIP-46, NIP-47, NIP-57)\nnpm run test:integration   # Integration tests\n\n# Test specific NIP-01 components\nnpm run test:nip01         # All NIP-01 tests\nnpm run test:nip01:event   # Event-related tests\nnpm run test:nip01:relay   # Relay-related tests\nnpm run test:nip01:relay:connection      # Relay connection tests\nnpm run test:nip01:relay:filter      # Relay filter tests\nnpm run test:nip01:relay:reconnect   # Relay reconnection tests\nnpm run test:nip01:relay:pool        # RelayPool tests\nnpm run test:nip01:relay:websocket   # Custom WebSocket implementation tests\nnpm run test:nostr         # Nostr client\nnpm run test:event         # Event creation and validation\nnpm run test:event:ordering          # Event ordering tests\nnpm run test:event:addressable       # Addressable events tests\nnpm run test:event:all               # All event tests\nnpm run test:relay         # Relay functionality\nnpm run test:crypto:core   # Core crypto utilities\nnpm run test:utils:relayUrl # Relay URL normalization helpers\n\n# Test specific NIPs\nnpm run test:nip02         # NIP-02 (Contact Lists)\nnpm run test:nip04         # NIP-04 (Encrypted Direct Messages)\nnpm run test:nip05         # NIP-05 (DNS Identifiers)\nnpm run test:nip07         # NIP-07 (Browser Extensions)\nnpm run test:nip09         # NIP-09 (Event Deletion Requests)\nnpm run test:nip10         # NIP-10 (Text Notes and Threads)\nnpm run test:nip11         # NIP-11 (Relay Information)\nnpm run test:nip17         # NIP-17 (Direct Messages)\nnpm run test:nip19         # NIP-19 (Bech32 Entities)\nnpm run test:nip21         # NIP-21 (URI Scheme)\nnpm run test:nip44         # NIP-44 (Versioned Encryption)\nnpm run test:nip46         # NIP-46 (Remote Signing)\nnpm run test:nip47         # NIP-47 (Wallet Connect)\nnpm run test:nip50         # NIP-50 (Search Capability)\nnpm run test:nip57         # NIP-57 (Lightning Zaps)\nnpm run test:nip65         # NIP-65 (Relay List Metadata)\nnpm run test:nip66         # NIP-66 (Relay Discovery)\n```\n\n### Example Scripts\n\n```bash\n# Run the basic example\nnpm run example\n\nnpm run example:rate-limits # Rate limit configuration walkthrough\nnpm run example:verbose    # Verbose logging\nnpm run example:debug      # Debug logging\n\n# NIP-01 examples\nnpm run example:nip01:event:ordering     # Event ordering demonstration\nnpm run example:nip01:event:addressable  # Addressable events\nnpm run example:nip01:event:replaceable  # Replaceable events\nnpm run example:nip01:relay:connection   # Relay connection management\nnpm run example:nip01:relay:filters      # Filter types\nnpm run example:nip01:relay:auto-close   # Auto-unsubscribe demo\nnpm run example:nip01:relay:query        # Pooled event queries\nnpm run example:nip01:relay:reconnect    # Relay reconnection\nnpm run example:nip01:relay:pool        # RelayPool multi-relay demo\nnpm run example:nip01:relay:pool-url-normalization # RelayPool URL normalization helpers\nnpm run example:nip01:validation         # NIP-01 validation flow\nnpm run example:nip01:url-preprocessing  # Relay URL preprocessing utilities\n\n# Example categories\nnpm run example:basic      # Basic functionality (core, crypto, direct messages)\nnpm run example:messaging  # Messaging examples (DM, NIP-04, NIP-44)\nnpm run example:identity   # Identity examples (NIP-05, NIP-07, NIP-19)\nnpm run example:payments   # Payment examples (NIP-47, NIP-57)\nnpm run example:advanced   # Advanced protocol examples (NIP-46, error handling)\n\n# Feature-specific examples\nnpm run example:crypto     # Cryptographic functions\nnpm run example:dm         # Direct messaging (NIP-04)\n\n# NIP-specific examples\nnpm run example:nip02      # Contact Lists (NIP-02)\nnpm run example:nip02:pubkey-normalization # Pubkey normalization helpers\nnpm run example:nip04      # Encrypted direct messages (NIP-04)\nnpm run example:nip05      # DNS identifiers (NIP-05)\nnpm run example:nip07      # Browser extensions (NIP-07)\nnpm run example:nip07:build # Build browser bundles without running server\nnpm run example:nip07:dm   # Browser-hosted DM example\nnpm run example:nip09      # Deletion requests (NIP-09)\nnpm run example:nip10      # Text notes and threads (NIP-10)\nnpm run example:nip11      # Relay information (NIP-11)\nnpm run example:nip21      # URI scheme (NIP-21)\nnpm run example:nip17      # Gift wrapped direct messages (NIP-17)\nnpm run example:nip19      # Bech32-encoded entities (NIP-19)\nnpm run example:nip19:bech32      # npub/nsec/note focus\nnpm run example:nip19:tlv         # nprofile/nevent/naddr TLV usage\nnpm run example:nip19:validation  # Validation and error handling\nnpm run example:nip19:security    # Relay URL limits and security\nnpm run example:nip19:security-example # Advanced security scenarios\nnpm run example:nip19:demo        # Comprehensive walkthrough\nnpm run example:nip44      # Versioned encryption (NIP-44)\nnpm run example:nip44:js   # Plain JavaScript NIP-44 demo\nnpm run example:nip44:version-compat # Version compatibility showcase\nnpm run example:nip44:test-vector   # Official vector validation\nnpm run example:nip44:compliance    # Compliance and regression demo\nnpm run example:nip46      # Remote signing protocol (NIP-46)\nnpm run example:nip46:minimal      # Minimal implementation\nnpm run example:nip46:basic        # Basic implementation with error handling\nnpm run example:nip46:advanced     # Advanced remote signing demo\nnpm run example:nip46:from-scratch # Implementation without library helpers\nnpm run example:nip46:simple       # Simple bunker/client pair\nnpm run example:nip46:simple-client # Simple client-only runner\nnpm run example:nip46:test-all     # Run every NIP-46 example sequentially\nnpm run example:nip46:connection-string-validation # Validate connection URIs\nnpm run example:nip47      # Wallet connect (NIP-47)\nnpm run example:nip47:verbose      # Verbose logging for wallet connect\nnpm run example:nip47:client-service # Client/service pair demo\nnpm run example:nip47:error-handling # Failure scenarios\nnpm run example:nip47:expiration    # Request expiration handling\nnpm run example:nip47:nip44        # NIP-44 encrypted payload flow\nnpm run example:nip47:encryption-negotiation # Custom encryption negotiation\nnpm run example:nip50      # Search capability (NIP-50)\nnpm run example:nip57      # Lightning zaps (NIP-57)\nnpm run example:nip57:client       # Zap client example\nnpm run example:nip57:lnurl        # LNURL server simulation\nnpm run example:nip57:validation   # Invoice validation\nnpm run example:nip65      # Relay list metadata (NIP-65)\nnpm run example:nip66      # Relay discovery and monitoring (NIP-66)\n\n# Example bundles\nnpm run example:all        # Run the base example\nnpm run example:nip01      # Run a curated set of NIP-01 demos\nnpm run example:validation # End-to-end validation helpers\n```\n\n### Code Quality Scripts\n\n```bash\n# Run linting\nnpm run lint\n\n# Format code with Prettier\nnpm run format\n```\n\nFor a complete list of available scripts, see the `scripts` section in `package.json`.\n\n## Development\n\n```bash\n# Build the project\nnpm run build\n\n# Build examples\nnpm run build:examples\n\n# Run linting\nnpm run lint\n\n# Format code\nnpm run format\n```\n\n### Directory Structure Notes\n\n- **Source Code**: All NIP implementations follow the `src/nipXX` naming pattern (lowercase)\n- **Core Protocol**: NIP-01 is implemented in the `src/nip01/` directory with specialized files:\n  - `event.ts`: Event creation, validation, and utilities\n  - `nostr.ts`: Main Nostr client implementation\n  - `relay.ts`: Relay connection and subscription management\n  - `relayPool.ts`: Multi-relay pool management\n- **Examples**: Organized by NIP in `examples/nipXX` directories\n  - NIP-01 examples further divided into `event/` and `relay/` subdirectories\n  - Client-specific examples in `examples/client`\n- **Tests**: Organized by NIP in `tests/nipXX` directories\n- For more details on code organization standards, see the [NIP Implementation Guide](src/NIP_STANDARDIZATION.md)\n\n## Security\n\nSNSTR implements robust security features throughout the codebase:\n\n- **Comprehensive Event Validation**: Full verification of event signatures and structure\n- **Secure Key Generation**: Safe private key generation within the secp256k1 curve limits\n- **NIP-19 Security**: Relay URL validation and filtering to prevent injection attacks\n- **NIP-44 Encryption**: Authenticated encryption with ChaCha20 and HMAC-SHA256\n- **Input Validation**: Thorough validation and error checking across all components\n\nFor details on security considerations for specific NIPs, see the documentation in each implementation folder.\n","readmeFilename":"README.md"}