Resolve Session ONS names to Session IDs in Node.js/Bun/browser
import{resolve}from'@session.js/ons'awaitresolve('keejef')// => 05d871fc80ca007eed9b2f4df72853e2a2d5465a92fcb1889fb5c84aa2833b3b40awaitresolve('hloth',{daemon: 'http://public-eu.optf.ngo:22023'})// => 057aeb66e45660c3bdfb7c62706f6440226af43ec13f3b6f899c1dd4db1b8fce5bawaitresolve('non-existing-but-valid-ons-name')// => nullawaitresolve('invalid ons name')// => throws `new Error('Invalid ONS name')`- ✅ Supports both modern (blake2b) and legacy (argon2) formats of encrypted value
- ✅ Works in browser
- ✅ Works on server (Node.js & Bun)
- ✅ Works on edge (Cloudflare workers)
- ✅ Input validation
- ✅ TypeScript definitions
- ✅ Tested with bun:test
This library is isomorphic meaning it runs everywhere, in every environment where WASM is supported: browser, server, edge. This is possible thanks to @noble/hashes, @noble/ciphers, argon2-browser which were implemented instead of libsodium dependency.
Every function used in algorithm is exported, so you can modify resolving algorithm, for example, to control server fetch.
Under the hood, the resolve function:
- Generates hash using
generateOnsHashfunction - fetches public daemon using
fetchfunction from globalThis - decrypts value with
decryptONSValuefunction- decryptONSValue function generates key with
generateKeyfunction - splits encoded value to message+nonce using
splitEncryptedValuefunction - depending on whether it's legacy format or not, it uses either
decryptSecretboxWithKeyordecryptXChachaWithKey
- decryptONSValue function generates key with
Use Session messenger programmatically with Session.js: Session bots, custom Session clients, and more.
hloth.dev/donate · Tor: hlothdevzkti6suoksy7lcy7hmpxnr3msu5waokzaslsi2mnx5ouu4qd.onion/donate