Resolve Session ONS names to Session IDs in Node.js/Bun/browser
import { resolve } from '@session.js/ons'
await resolve('keejef') // => 05d871fc80ca007eed9b2f4df72853e2a2d5465a92fcb1889fb5c84aa2833b3b40
await resolve('hloth', {
daemon: 'http://public-eu.optf.ngo:22023'
}) // => 057aeb66e45660c3bdfb7c62706f6440226af43ec13f3b6f899c1dd4db1b8fce5b
await resolve('non-existing-but-valid-ons-name') // => null
await resolve('invalid ons name') // => throws `new Error('Invalid ONS name')`
- ✅ Supports both modern (blake2b) and legacy (argon2) formats of encrypted value
- ✅ Works universally in browser and server thanks to universal
libsodium-wrappers-sumo
andblake2b
- ✅ Validation
- ✅ TypeScript
- ✅ Tested with bun:test
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
generateOnsHash
function - fetches public daemon using
fetch
function from globalThis - decrypts value with
decryptONSValue
function- decryptONSValue function generates key with
generateKey
function - splits encoded value to message+nonce using
splitEncryptedValue
function - depending on whether it's legacy format or not, it uses either
decryptSecretboxWithKey
ordecryptXChachaWithKey
- decryptONSValue function generates key with
Make sure you're awaiting ready
from libsodium-wrappers-sumo if you're getting errors like sodium.crypto_aead_xchacha20poly1305_ietf_decrypt is not a function.
Use Session messenger programmatically with Session.js: Session bots, custom Session clients, and more.