Huge News!Announcing our $40M Series B led by Abstract Ventures.Learn More
Socket
Sign inDemoInstall
Socket

@edgeandnode/ens

Package Overview
Dependencies
Maintainers
0
Versions
4
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

@edgeandnode/ens

Resolver for ENS names and avatars using the Graph Network Subgraph and ensdomains resolution

  • 2.0.1
  • latest
  • npm
  • Socket score

Version published
Weekly downloads
251
increased by35.68%
Maintainers
0
Weekly downloads
 
Created
Source

ENS

Resolver for ENS names and avatars using the Graph Network Subgraph and ensdomains resolution.

This lets us resolve the ENS name for a given address/addresses in a consistent way across all apps, following this business logic:

  1. Check if the wallet has set a default ENS name in the L1 GNS contract. Query the L1 Network Subgraph for the GraphAccount.defaultDisplayName to resolve.
  2. Do a lookup with the EnsPublicClient exposed by the @ensdomains/ensjs library to resolve the primary ENS for the given address. Also exposes batch functionality to resolve multiple ENS names if given multiple addresses.

The issue with the ENS subgraph is it does not have a way to determine which domain is the primary domain for a user, resulting in it resolving to any domain the user owns, causing issues (primarily in explorer).

API

  • buildEnsResolver(): EnsResolverConfig -> has two methods:
    • args: BuildEnsResolverArgs
      • infuraKey: [REQUIRED] infura key used to lookup the ENS from the EnsPublicClient
      • gatewayApiKey: [OPTIONAL] used to lookup the set default name from the L1 Network Subgraph
    • resolveEnsName -> resolves the ENS name (using the logic above) for a single address
      • args: ResolveEnsNameArgs
        • address: [REQUIRED] 0x EVM wallet address to lookup the ENS name for
        • gatewayApiKey: [OPTIONAL] used to lookup the set default name from the L1 Network Subgraph
        • testnet: [OPTIONAL, default = false] if true, look up is performed on the L1 testnet
        • timeout: [OPTIONAL, default = 5000] time, in milliseconds, before the client lookup fails
    • resolveEnsNamesBatch -> resolves the ENS names (using the logic above) for an array of addresses
      • args: ResolveEnsNamesBulkArgs
        • addresses: [REQUIRED] array of 0x EVM wallet addresses to lookup the ENS names for
        • gatewayApiKey: [OPTIONAL] used to lookup the set default name from the L1 network Subgraph
        • testnet: [OPTIONAL, default = false] if true, look up is performed on the L1 testnet
    • resolveAvatar -> resolves the Avatar for a single address from the network subgraph and then ENS
      • args: ResolveAvatarArgs
        • address: [REQUIRED] 0x EVM wallet address to lookup the avatar for
        • ens: [OPTIONAL] an already resolved ENS name. Finding the avatar from ENS is found through the ENS name, so passing this removes needing to resolve the ENS name using the user address
        • chain: [OPTIONAL, default = 42161 (arbitrum-one)] the chain to lookup the GraphAccount.metadata.image from the Network Subgraph on
        • gatewayApiKey: [OPTIONAL] used to lookup the GraphAccount.metadata.image from the Network Subgraph
        • timeout: [OPTIONAL, default = 5000] time, in milliseconds, before the client lookup fails
    • resolveAvatarsBatch -> resolves the avatars for an array of addresses
      • args: ResolveAvatarsBatchArgs
        • addresses: [REQUIRED] array of 0x EVM wallet addresses to lookup the avatar for
        • chain: [OPTIONAL, default = 42161 (arbitrum-one)] the chain to lookup the GraphAccount.metadata.image from the Network Subgraph on
        • gatewayApiKey: [OPTIONAL] used to lookup the GraphAccount.metadata.image from the Network Subgraph

Examples

  • EnsResolverConfig.resolveEnsName
import { type Address } from 'viem'
import { buildEnsResolver } from '@edgeandnode/graph-auth-kit/ens'

const resolver = buildEnsResolver({
  infuraKey: 'key',
  gatewayApiKey: 'some32digitapikey',
})

async function lookupEnsName(address: Address) {
  return await resolver.resolveEnsName({ address })
}
lookupEnsName('0x123').then((ens) => {
  // testuser.eth
})
  • EnsResolverConfig.resolveEnsNamesBatch
import { type Address } from 'viem'
import { buildEnsResolver } from '@edgeandnode/graph-auth-kit/ens'

const resolver = buildEnsResolver({
  infuraKey: 'key',
  gatewayApiKey: 'some32digitapikey',
})

async function lookupEnsNames(addresses: Address[]) {
  return await resolver.resolveEnsNamesBatch({ addresses })
}
lookupEnsNames(['0x123', '0x456']).then((ensMap) => {
  // { '0x123': 'testuser.eth', '0x456': null }
})
  • EnsResolverConfig.resolveAvatar
import { type Address } from 'viem'
import { buildEnsResolver } from '@edgeandnode/graph-auth-kit/ens'

const resolver = buildEnsResolver({
  infuraKey: 'key',
  gatewayApiKey: 'some32digitapikey',
})

async function lookupAvatar(address: Address) {
  return await resolver.resolveAvatar({
    address,
    timeout: 2500, // only wait 2.5sec before timing out
  })
}
lookupAvatar('0x123').then((avatar) => {
  // https://api.thegraph.com/ipfs/api/v0/cat?arg=QmdFKawEFPYzDVwZrXyJcyaYyCZd6PP9N5NCuTi2XmLJMD
})

async function lookupAvatarFromENS(address: Address, ens: string) {
  return await resolver.resolveAvatar({
    address,
    ens,
    timeout: 2500, // only wait 2.5sec before timing out
  })
}
lookupAvatarFromENS('0x123').then((avatar) => {
  // https://ipfs.io/ipfs/QmP9ayW28pbW2V9nYAjEbxv45MTezQpz8S913VbV56nkCg/1398.png
})
  • EnsResolverConfig.resolveAvatarsBatch
import { type Address } from 'viem'
import { buildEnsResolver } from '@edgeandnode/graph-auth-kit/ens'

const resolver = buildEnsResolver({
  infuraKey: 'key',
  gatewayApiKey: 'some32digitapikey',
})

async function lookupAvatars(addresses: Address[]) {
  return await resolver.resolveAvatarsBatch({
    addresses,
  })
}
lookupAvatars(['0x123', '0x456']).then((avatar) => {
  // { '0x123': 'https://api.thegraph.com/ipfs/api/v0/cat?arg=QmdFKawEFPYzDVwZrXyJcyaYyCZd6PP9N5NCuTi2XmLJMD', '0x456': null }
})

FAQs

Package last updated on 31 Oct 2024

Did you know?

Socket

Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.

Install

Related posts

SocketSocket SOC 2 Logo

Product

  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap
  • Changelog

Packages

npm

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc