Resolve Session ONS names to Session IDs in Node.js/Bun/browser https://npmjs.com/package/@session.js/ons
Find a file
2025-06-13 22:06:20 +04:00
.vscode Replace libsodium-wrappers-sumo with edge-compatible libraries bundled with WASM 2025-06-05 01:20:53 +04:00
src feat: Replace hashes/cipher libraries to @noble libs 2025-06-13 22:21:23 +06:00
test feat: Replace hashes/cipher libraries to @noble libs 2025-06-13 22:21:23 +06:00
.gitignore Initial commit 2024-06-20 19:09:58 +04:00
.prettierignore Replace libsodium-wrappers-sumo with edge-compatible libraries bundled with WASM 2025-06-05 01:20:53 +04:00
.prettierrc Replace libsodium-wrappers-sumo with edge-compatible libraries bundled with WASM 2025-06-05 01:20:53 +04:00
bun.lock Bump version, migrate from bun.lockb to bun.lock 2025-06-13 22:06:20 +04:00
eslint.config.js Replace libsodium-wrappers-sumo with edge-compatible libraries bundled with WASM 2025-06-05 01:20:53 +04:00
package.json Bump version, migrate from bun.lockb to bun.lock 2025-06-13 22:06:20 +04:00
README.md docs(README): Remove libsodium and replaced libraries links 2025-06-13 22:30:04 +06:00
tsconfig.build.json Add TypeScript types 2024-06-20 19:13:44 +04:00
tsconfig.json Replace libsodium-wrappers-sumo with edge-compatible libraries bundled with WASM 2025-06-05 01:20:53 +04:00

@session.js/ons

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.

Advanced use

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:

  1. Generates hash using generateOnsHash function
  2. fetches public daemon using fetch function from globalThis
  3. decrypts value with decryptONSValue function
    1. decryptONSValue function generates key with generateKey function
    2. splits encoded value to message+nonce using splitEncryptedValue function
    3. depending on whether it's legacy format or not, it uses either decryptSecretboxWithKey or decryptXChachaWithKey

Made for session.js

Use Session messenger programmatically with Session.js: Session bots, custom Session clients, and more.

Donate

hloth.dev/donate