Skip to main content

Documentation Index

Fetch the complete documentation index at: https://docs.hyperauth.dev/llms.txt

Use this file to discover all available pages before exploring further.

This guide shows you how to resolve human-readable aliases to DIDs, look up on-chain DID and account data, check alias availability before registration, and fetch indexer statistics.

Compute an alias hash

The indexer stores aliases as Keccak-256 hashes. Before querying, compute the hash of the alias string:
import { computeAliasHash } from '@hyperauth/sdk';

const hash = await computeAliasHash('alice');
// '0x3d4f...'
By default computeAliasHash uses hash-wasm (already a dependency). If you already have a Keccak-256 implementation from viem or ethers, pass it to avoid loading a second one:
import { keccak256 } from 'viem';
import { computeAliasHash } from '@hyperauth/sdk';

const hash = await computeAliasHash('alice', keccak256);

Check alias availability before registration

Before registering a handle, verify that the alias is not already taken. The vault exposes an availability endpoint directly:
const res = await fetch(`/api/aliases/check?alias=${encodeURIComponent('alice')}`);
const { available, did } = await res.json();

if (!available) {
  console.log('Alias taken by DID:', did);
}
Use the indexer for a hash-based lookup instead if you need the full alias record:
const hash = await computeAliasHash('alice');
const alias = await lookupAlias(hash);

if (alias.found) {
  console.log('Alias hash:', alias.alias_hash);
  console.log('DID hash:', alias.did_hash);
  console.log('Active:', alias.active);
  console.log('Controller:', alias.controller);
} else {
  // Alias is available
}

Look up a DID

lookupDid resolves a DID hash to its on-chain record:
import { lookupDid } from '@hyperauth/sdk';

const result = await lookupDid('0xdidHash...');

if (result.found) {
  console.log('Controller:', result.controller);
  console.log('Metadata CID:', result.metadata_cid);
  console.log('Active:', result.active);
  console.log('Block number:', result.block_number);
  console.log('Tx hash:', result.tx_hash);
}
The DID hash is the Keccak-256 hash of the DID string. It is returned in RegistrationResult.did_hash after registration, and available in QueryOutput.did from client.query().

Look up a smart account

lookupAccount resolves a smart account address to its on-chain indexer record:
import { lookupAccount } from '@hyperauth/sdk';

const result = await lookupAccount('0xSmartAccountAddress');

if (result.found) {
  console.log('Account address:', result.account_address);
  console.log('Owner address:', result.owner_address);
  console.log('Block number:', result.block_number);
  console.log('Tx hash:', result.tx_hash);
}

Fetch indexer statistics

fetchStats returns aggregate counts for the entire registry:
import { fetchStats } from '@hyperauth/sdk';

const stats = await fetchStats();

console.log('Total DIDs:', stats.total_dids);
console.log('Active DIDs:', stats.active_dids);
console.log('Total aliases:', stats.total_aliases);
console.log('Total accounts:', stats.total_accounts);
console.log('Last indexed block:', stats.last_block_number);

Use a custom indexer URL

All indexer functions default to /api/indexer (the vault’s indexer proxy). Pass a custom URL as the last argument to target a different deployment:
const hash = await computeAliasHash('alice');
const alias = await lookupAlias(hash, 'https://indexer.example.com/api');
const did = await lookupDid(didHash, 'https://indexer.example.com/api');
const account = await lookupAccount(address, 'https://indexer.example.com/api');
const stats = await fetchStats('https://indexer.example.com/api');

Error handling

All indexer functions throw a NetworkError if the HTTP request fails. They do not throw on a not-found result — check the found field instead.
import { NetworkError } from '@hyperauth/sdk';

try {
  const alias = await lookupAlias(hash);
  if (!alias.found) {
    // Not registered
  }
} catch (err) {
  if (err instanceof NetworkError) {
    console.error('Indexer unreachable:', err.message);
  }
}