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 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-wrappers 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
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
Use Session messenger programmatically with Session.js: Session bots, custom Session clients, and more.