npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2024 – Pkg Stats / Ryan Hefner

@session.js/ons

v1.0.3

Published

Resolve Session ONS names to Session IDs in Node.js/Bun/browser

Downloads

4

Readme

@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 universally in browser and server thanks to universal libsodium-wrappers-sumo and blake2b
  • ✅ Validation
  • ✅ TypeScript
  • ✅ Tested with bun:test

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

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.

Made for session.js

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

Donate

hloth.dev/donate