New Case Study:See how Anthropic automated 95% of dependency reviews with Socket.Learn More
Socket
Sign inDemoInstall
Socket

get-ens

Package Overview
Dependencies
Maintainers
1
Versions
19
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

get-ens - npm Package Compare versions

Comparing version 1.0.2 to 2.0.0

18

dist/index.d.ts

@@ -1,4 +0,14 @@

export declare type ENSRecords = Record<string, string | {}> & {
web: Record<string, string>;
};
import { BaseProvider } from '@ethersproject/providers';
export declare type ENSRecords = {
[key: string]: string;
} & Partial<{
avatar: string;
github: string;
reddit: string;
instagram: string;
twitter: string;
email: string;
url: string;
description: string;
}>;
export interface ResolvedENS {

@@ -24,2 +34,2 @@ /**

*/
export declare const getENS: (provider?: any, contractAddress?: string) => (domain: string, fetchOptions?: RequestInit) => Promise<ResolvedENS>;
export declare const getENS: (provider?: BaseProvider, contractAddress?: string) => (_domain: string, fetchOptions?: RequestInit) => Promise<ResolvedENS>;

@@ -1,1 +0,1 @@

import createHash from"keccak";import{Contract}from"@ethersproject/contracts";import{getDefaultProvider}from"@ethersproject/providers";import assert from"assert";const sha3=x=>createHash("keccak256").update(x).digest().toString("hex");const ABI=[{anonymous:!1,inputs:[{indexed:!0,internalType:"bytes32",name:"node",type:"bytes32"},{indexed:!0,internalType:"string",name:"indexedKey",type:"string"},{indexed:!1,internalType:"string",name:"key",type:"string"}],name:"TextChanged",type:"event"},{inputs:[{internalType:"bytes32",name:"node",type:"bytes32"},{internalType:"string",name:"key",type:"string"},{internalType:"string",name:"value",type:"string"}],name:"setText",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"bytes4",name:"interfaceID",type:"bytes4"}],name:"supportsInterface",outputs:[{internalType:"bool",name:"",type:"bool"}],stateMutability:"pure",type:"function"},{inputs:[{internalType:"bytes32",name:"node",type:"bytes32"},{internalType:"string",name:"key",type:"string"}],name:"text",outputs:[{internalType:"string",name:"",type:"string"}],stateMutability:"view",type:"function"}],getENS=(provider=getDefaultProvider(),contractAddress="0x4976fb03C32e5B8cfe2b6cCB31c09Ba78EBaBa41")=>{const contract=new Contract(contractAddress,ABI,provider),getRecord=async(node,record)=>await contract.text(node,record);return async function(domain,fetchOptions){const node=function(name){let node="";for(let i=0;i<32;i++)node+="00";const labels=name.split(".");for(var i=labels.length-1;i>=0;i--){const labelSha=sha3(labels[i]);node=sha3(Buffer.from(node+labelSha,"hex"))}return"0x"+node}(domain);if(/^0x[a-fA-F0-9]{40}$/.test(domain))return{address:domain,owner:domain};{const{domains:domains}=await(async(endpoint,query,variables,fetchOptions={})=>{const res=await fetch(endpoint,{...fetchOptions,body:JSON.stringify({query:query,variables:variables}),method:"POST"});return assert.strictEqual(200,res.status),(await res.json()).data})("https://api.thegraph.com/subgraphs/name/ensdomains/ens","\nquery($domain: String!) {\n domains(where:{name: $domain}) { \n resolvedAddress {\n id\n }\n resolver {\n texts\n }\n owner {\n id\n }\n }\n}\n",{domain:domain},fetchOptions),records={web:{}};if(null==domains?void 0:domains[0]){const{resolvedAddress:address,resolver:resolver,owner:owner}=null==domains?void 0:domains[0];let data={owner:null,address:null};if(owner&&(data.owner=owner.id),address&&(data.address=address.id),null==resolver?void 0:resolver.texts){for(const record of resolver.texts)record.startsWith("com.")||record.startsWith("vnd.")?records.web[record.slice(record.indexOf(".")+1)]=await getRecord(node,record):records[record]=await getRecord(node,record);return data.records=records,data}return data}throw new Error("Invalid ENS domain or ethereum address")}}};export{getENS};
import jsSha3 from"js-sha3";import{Contract}from"@ethersproject/contracts";import{getDefaultProvider}from"@ethersproject/providers";import assert from"assert";const sha3=x=>jsSha3.keccak256(x);const ABI=[{anonymous:!1,inputs:[{indexed:!0,internalType:"bytes32",name:"node",type:"bytes32"},{indexed:!0,internalType:"string",name:"indexedKey",type:"string"},{indexed:!1,internalType:"string",name:"key",type:"string"}],name:"TextChanged",type:"event"},{inputs:[{internalType:"bytes32",name:"node",type:"bytes32"},{internalType:"string",name:"key",type:"string"},{internalType:"string",name:"value",type:"string"}],name:"setText",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"bytes4",name:"interfaceID",type:"bytes4"}],name:"supportsInterface",outputs:[{internalType:"bool",name:"",type:"bool"}],stateMutability:"pure",type:"function"},{inputs:[{internalType:"bytes32",name:"node",type:"bytes32"},{internalType:"string",name:"key",type:"string"}],name:"text",outputs:[{internalType:"string",name:"",type:"string"}],stateMutability:"view",type:"function"}],getENS=(provider=getDefaultProvider(),contractAddress="0x4976fb03C32e5B8cfe2b6cCB31c09Ba78EBaBa41")=>{const contract=new Contract(contractAddress,ABI,provider),getRecord=async(node,record)=>await contract.text(node,record);return async function(_domain,fetchOptions){const domain=/^0x[a-fA-F0-9]{40}$/.test(_domain)?await provider.lookupAddress(_domain):_domain,node=function(name){let node="";for(let i=0;i<32;i++)node+="00";const labels=name.split(".");for(var i=labels.length-1;i>=0;i--){const labelSha=sha3(labels[i]);node=sha3(Buffer.from(node+labelSha,"hex"))}return"0x"+node}(domain),{domains:domains}=await(async(endpoint,query,variables,fetchOptions={})=>{const res=await fetch(endpoint,{...fetchOptions,body:JSON.stringify({query:query,variables:variables}),method:"POST"});return assert.strictEqual(200,res.status),(await res.json()).data})("https://api.thegraph.com/subgraphs/name/ensdomains/ens","\nquery($domain: String!) {\n domains(where:{name: $domain}) { \n resolvedAddress {\n id\n }\n resolver {\n texts\n }\n owner {\n id\n }\n }\n}\n",{domain:domain},fetchOptions),records={};if(null==domains?void 0:domains[0]){const{resolvedAddress:address,resolver:resolver,owner:owner}=null==domains?void 0:domains[0];let data={owner:null,address:null};if(owner&&(data.owner=owner.id),address&&(data.address=address.id),null==resolver?void 0:resolver.texts){for(const record of resolver.texts)record.startsWith("com.")||record.startsWith("vnd.")?records[record.slice(record.indexOf(".")+1)]=await getRecord(node,record):records[record]=await getRecord(node,record);return data.records=records,data}return data}}};export{getENS};
{
"name": "get-ens",
"version": "1.0.2",
"version": "2.0.0",
"description": "Get text records of an ENS address with ease.",

@@ -30,3 +30,3 @@ "exports": "./dist/index.js",

"@ethersproject/providers": "^5.4.5",
"keccak": "^3.0.2"
"js-sha3": "^0.8.0"
},

@@ -37,4 +37,3 @@ "devDependencies": {

"@rollup/plugin-typescript": "^8.2.5",
"@types/keccak": "^3.0.1",
"@types/node": "^16.9.2",
"@types/node": "^16.9.4",
"c8": "^7.9.0",

@@ -41,0 +40,0 @@ "esbuild-node-loader": "^0.3.1",

@@ -15,2 +15,8 @@ <div align="center">

## Features
- Good types
- Custom ENS contract address support
- Reverse ENS lookup
## Install

@@ -17,0 +23,0 @@

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