@ensdomains/ensjs 3.0.0-alpha.2 → 3.0.0-alpha.5
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/cjs/functions/burnFuses.d.ts +3 -1
- package/dist/cjs/functions/burnFuses.js +1 -5
- package/dist/cjs/functions/createSubname.d.ts +1 -5
- package/dist/cjs/functions/createSubname.js +1 -5
- package/dist/cjs/functions/deleteSubname.d.ts +2 -2
- package/dist/cjs/functions/deleteSubname.js +5 -2
- package/dist/cjs/functions/getDNSOwner.d.ts +7 -0
- package/dist/cjs/functions/getDNSOwner.js +81 -0
- package/dist/cjs/functions/setName.d.ts +3 -2
- package/dist/cjs/functions/setName.js +3 -8
- package/dist/cjs/functions/setRecords.d.ts +4 -1
- package/dist/cjs/functions/setRecords.js +10 -8
- package/dist/cjs/functions/setResolver.d.ts +3 -2
- package/dist/cjs/functions/setResolver.js +3 -9
- package/dist/cjs/functions/transferName.d.ts +3 -2
- package/dist/cjs/functions/transferName.js +5 -10
- package/dist/cjs/functions/transferSubname.d.ts +3 -2
- package/dist/cjs/functions/transferSubname.js +1 -5
- package/dist/cjs/functions/unwrapName.d.ts +3 -2
- package/dist/cjs/functions/unwrapName.js +1 -6
- package/dist/cjs/functions/wrapName.d.ts +4 -2
- package/dist/cjs/functions/wrapName.js +6 -10
- package/dist/cjs/index.d.ts +52 -34
- package/dist/cjs/index.js +36 -22
- package/dist/esm/functions/burnFuses.d.ts +3 -1
- package/dist/esm/functions/burnFuses.js +1 -5
- package/dist/esm/functions/createSubname.d.ts +1 -5
- package/dist/esm/functions/createSubname.js +1 -5
- package/dist/esm/functions/deleteSubname.d.ts +2 -2
- package/dist/esm/functions/deleteSubname.js +5 -2
- package/dist/esm/functions/getDNSOwner.d.ts +7 -0
- package/dist/esm/functions/getDNSOwner.js +51 -0
- package/dist/esm/functions/setName.d.ts +3 -2
- package/dist/esm/functions/setName.js +3 -8
- package/dist/esm/functions/setRecords.d.ts +4 -1
- package/dist/esm/functions/setRecords.js +10 -8
- package/dist/esm/functions/setResolver.d.ts +3 -2
- package/dist/esm/functions/setResolver.js +3 -9
- package/dist/esm/functions/transferName.d.ts +3 -2
- package/dist/esm/functions/transferName.js +5 -10
- package/dist/esm/functions/transferSubname.d.ts +3 -2
- package/dist/esm/functions/transferSubname.js +1 -5
- package/dist/esm/functions/unwrapName.d.ts +3 -2
- package/dist/esm/functions/unwrapName.js +1 -6
- package/dist/esm/functions/wrapName.d.ts +4 -2
- package/dist/esm/functions/wrapName.js +6 -10
- package/dist/esm/index.d.ts +52 -34
- package/dist/esm/index.js +36 -22
- package/package.json +10 -5
- package/src/@types/dns-packet/index.d.ts +114 -0
- package/src/{tests → functions}/batch.test.ts +1 -1
- package/src/{tests → functions}/batchWrappers.test.ts +1 -1
- package/src/{tests → functions}/burnFuses.test.ts +9 -8
- package/src/functions/burnFuses.ts +6 -8
- package/src/{tests → functions}/createSubname.test.ts +8 -11
- package/src/functions/createSubname.ts +3 -10
- package/src/{tests → functions}/deleteSubname.test.ts +28 -27
- package/src/functions/deleteSubname.ts +9 -12
- package/src/functions/getDNSOwner.test.ts +122 -0
- package/src/functions/getDNSOwner.ts +61 -0
- package/src/{tests → functions}/getExpiry.test.ts +1 -1
- package/src/{tests → functions}/getFuses.test.ts +12 -10
- package/src/{tests → functions}/getHistory.test.ts +1 -1
- package/src/{tests → functions}/getName.test.ts +1 -1
- package/src/{tests → functions}/getNames.test.ts +1 -1
- package/src/{tests → functions}/getOwner.test.ts +4 -2
- package/src/{tests → functions}/getProfile.test.ts +1 -1
- package/src/{tests → functions}/getResolver.test.ts +1 -1
- package/src/{tests → functions}/getSpecificRecord.test.ts +1 -1
- package/src/{tests → functions}/getSubnames.test.ts +1 -1
- package/src/{tests → functions}/makeCommitment.test.ts +1 -1
- package/src/{tests → functions}/normalise.test.ts +0 -0
- package/src/{tests → functions}/setName.test.ts +3 -2
- package/src/functions/setName.ts +10 -12
- package/src/{tests → functions}/setRecords.test.ts +7 -5
- package/src/functions/setRecords.ts +18 -12
- package/src/{tests → functions}/setResolver.test.ts +12 -15
- package/src/functions/setResolver.ts +10 -18
- package/src/{tests → functions}/transferName.test.ts +27 -29
- package/src/functions/transferName.ts +12 -18
- package/src/{tests → functions}/transferSubname.test.ts +30 -29
- package/src/functions/transferSubname.ts +8 -10
- package/src/{tests → functions}/unwrapName.test.ts +22 -22
- package/src/functions/unwrapName.ts +8 -12
- package/src/{tests → functions}/wrapName.test.ts +15 -12
- package/src/functions/wrapName.ts +16 -15
- package/src/index.ts +85 -29
- package/src/tests/signerInjection.test.ts +42 -0
- package/src/tests/withProvider.test.ts +1 -1
|
@@ -1,3 +1,5 @@
|
|
|
1
1
|
import { ENSArgs } from '..';
|
|
2
2
|
import { FuseOptions } from '../@types/FuseOptions';
|
|
3
|
-
export default function ({ contracts,
|
|
3
|
+
export default function ({ contracts, signer }: ENSArgs<'contracts' | 'signer'>, name: string, { fusesToBurn, }: {
|
|
4
|
+
fusesToBurn: FuseOptions;
|
|
5
|
+
}): Promise<import("ethers").ContractTransaction>;
|
|
@@ -1,10 +1,6 @@
|
|
|
1
1
|
import generateFuseInput from '../utils/generateFuseInput';
|
|
2
2
|
import { namehash } from '../utils/normalise';
|
|
3
|
-
export default async function ({ contracts,
|
|
4
|
-
const signer = provider?.getSigner();
|
|
5
|
-
if (!signer) {
|
|
6
|
-
throw new Error('No signer found');
|
|
7
|
-
}
|
|
3
|
+
export default async function ({ contracts, signer }, name, { fusesToBurn, }) {
|
|
8
4
|
const nameWrapper = (await contracts?.getNameWrapper()).connect(signer);
|
|
9
5
|
const hash = namehash(name);
|
|
10
6
|
const encodedFuses = generateFuseInput(fusesToBurn);
|
|
@@ -2,18 +2,14 @@ import { ethers } from 'ethers';
|
|
|
2
2
|
import { ENSArgs } from '..';
|
|
3
3
|
import { FuseOptions } from '../@types/FuseOptions';
|
|
4
4
|
declare type BaseArgs = {
|
|
5
|
-
name: string;
|
|
6
5
|
owner: string;
|
|
7
6
|
resolverAddress?: string;
|
|
8
7
|
contract: 'registry' | 'nameWrapper';
|
|
9
|
-
options?: {
|
|
10
|
-
addressOrIndex?: string | number;
|
|
11
|
-
};
|
|
12
8
|
};
|
|
13
9
|
declare type NameWrapperArgs = {
|
|
14
10
|
contract: 'nameWrapper';
|
|
15
11
|
fuses?: FuseOptions;
|
|
16
12
|
} & BaseArgs;
|
|
17
13
|
declare type Args = BaseArgs | NameWrapperArgs;
|
|
18
|
-
export default function ({ contracts,
|
|
14
|
+
export default function ({ contracts, signer }: ENSArgs<'contracts' | 'signer'>, name: string, { owner, resolverAddress, contract, ...wrapperArgs }: Args): Promise<ethers.ContractTransaction>;
|
|
19
15
|
export {};
|
|
@@ -1,11 +1,7 @@
|
|
|
1
1
|
import { ethers } from 'ethers';
|
|
2
2
|
import generateFuseInput from '../utils/generateFuseInput';
|
|
3
3
|
import { namehash } from '../utils/normalise';
|
|
4
|
-
export default async function ({ contracts,
|
|
5
|
-
const signer = provider?.getSigner(options?.addressOrIndex);
|
|
6
|
-
if (!signer) {
|
|
7
|
-
throw new Error('No signer found');
|
|
8
|
-
}
|
|
4
|
+
export default async function ({ contracts, signer }, name, { owner, resolverAddress, contract, ...wrapperArgs }) {
|
|
9
5
|
const labels = name.split('.');
|
|
10
6
|
if (labels.length === 1) {
|
|
11
7
|
throw new Error('Subnames in ENS.js can only be created for 2LDs, not TLDs');
|
|
@@ -1,4 +1,4 @@
|
|
|
1
1
|
import { ENSArgs } from '..';
|
|
2
|
-
export default function ({
|
|
3
|
-
|
|
2
|
+
export default function ({ transferSubname }: ENSArgs<'transferSubname'>, name: string, { contract, }: {
|
|
3
|
+
contract: 'registry' | 'nameWrapper';
|
|
4
4
|
}): Promise<import("ethers").ContractTransaction>;
|
|
@@ -1,3 +1,6 @@
|
|
|
1
|
-
export default async function ({
|
|
2
|
-
return transferSubname(name,
|
|
1
|
+
export default async function ({ transferSubname }, name, { contract, }) {
|
|
2
|
+
return transferSubname(name, {
|
|
3
|
+
contract,
|
|
4
|
+
address: '0x0000000000000000000000000000000000000000',
|
|
5
|
+
});
|
|
3
6
|
}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import * as packet from 'dns-packet';
|
|
2
|
+
export declare function encodeURLParams(p: {
|
|
3
|
+
[key: string]: string;
|
|
4
|
+
}): string;
|
|
5
|
+
export declare const getDNS: (q: packet.Packet) => Promise<packet.Packet>;
|
|
6
|
+
export declare const dnsQuery: (qtype: string, qname: string) => Promise<packet.Packet>;
|
|
7
|
+
export default function (_: any, dnsName: string): Promise<any>;
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
import * as packet from 'dns-packet';
|
|
2
|
+
export function encodeURLParams(p) {
|
|
3
|
+
return Object.entries(p)
|
|
4
|
+
.map((kv) => kv.map(encodeURIComponent).join('='))
|
|
5
|
+
.join('&');
|
|
6
|
+
}
|
|
7
|
+
export const getDNS = async (q) => {
|
|
8
|
+
const response = await global.fetch(`https://cloudflare-dns.com/dns-query?${encodeURLParams({
|
|
9
|
+
ct: 'application/dns-udpwireformat',
|
|
10
|
+
dns: packet.encode(q)?.toString('base64'),
|
|
11
|
+
ts: Date.now().toString(),
|
|
12
|
+
})}`);
|
|
13
|
+
const arrayBuffer = await response.arrayBuffer();
|
|
14
|
+
// @ts-ignore:next-line
|
|
15
|
+
const fromArrayBuffer = Buffer.from(arrayBuffer);
|
|
16
|
+
return packet.decode(fromArrayBuffer);
|
|
17
|
+
};
|
|
18
|
+
export const dnsQuery = async (qtype, qname) => {
|
|
19
|
+
const query = {
|
|
20
|
+
type: 'query',
|
|
21
|
+
id: 1,
|
|
22
|
+
flags: packet.RECURSION_DESIRED,
|
|
23
|
+
questions: [
|
|
24
|
+
{
|
|
25
|
+
type: qtype,
|
|
26
|
+
class: 'IN',
|
|
27
|
+
name: qname,
|
|
28
|
+
},
|
|
29
|
+
],
|
|
30
|
+
additionals: [
|
|
31
|
+
{
|
|
32
|
+
type: 'OPT',
|
|
33
|
+
class: 'IN',
|
|
34
|
+
name: '.',
|
|
35
|
+
udpPayloadSize: 4096,
|
|
36
|
+
flags: packet.DNSSEC_OK,
|
|
37
|
+
},
|
|
38
|
+
],
|
|
39
|
+
answers: [],
|
|
40
|
+
};
|
|
41
|
+
const response = await getDNS(query);
|
|
42
|
+
if (response.rcode !== 'NOERROR') {
|
|
43
|
+
throw new Error(`DNS query failed: ${response.rcode}`);
|
|
44
|
+
}
|
|
45
|
+
return response;
|
|
46
|
+
};
|
|
47
|
+
export default async function (_, dnsName) {
|
|
48
|
+
const result = await dnsQuery('TXT', `_ens.${dnsName}`);
|
|
49
|
+
const address = result?.answers?.[0]?.data?.[0]?.toString()?.split('=')?.[1];
|
|
50
|
+
return address;
|
|
51
|
+
}
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { ENSArgs } from '..';
|
|
2
|
-
export default function ({ contracts,
|
|
3
|
-
|
|
2
|
+
export default function ({ contracts, signer }: ENSArgs<'contracts' | 'signer'>, name: string, { address, resolver, }?: {
|
|
3
|
+
address?: string;
|
|
4
|
+
resolver?: string;
|
|
4
5
|
}): Promise<import("ethers").ContractTransaction | undefined>;
|
|
@@ -1,11 +1,6 @@
|
|
|
1
|
-
export default async function ({ contracts,
|
|
2
|
-
const signerAddress = await
|
|
3
|
-
|
|
4
|
-
.getAddress();
|
|
5
|
-
if (!signerAddress) {
|
|
6
|
-
throw new Error('No signer found');
|
|
7
|
-
}
|
|
8
|
-
const reverseRegistrar = (await contracts?.getReverseRegistrar())?.connect(provider?.getSigner());
|
|
1
|
+
export default async function ({ contracts, signer }, name, { address, resolver, } = {}) {
|
|
2
|
+
const signerAddress = await signer.getAddress();
|
|
3
|
+
const reverseRegistrar = (await contracts?.getReverseRegistrar())?.connect(signer);
|
|
9
4
|
if (address) {
|
|
10
5
|
const publicResolver = await contracts?.getPublicResolver();
|
|
11
6
|
return reverseRegistrar?.setNameForAddr(address, signerAddress, resolver || publicResolver.address, name);
|
|
@@ -1,3 +1,6 @@
|
|
|
1
1
|
import { ENSArgs } from '..';
|
|
2
2
|
import { RecordOptions } from '../utils/recordHelpers';
|
|
3
|
-
export default function ({ contracts, provider, getResolver, }: ENSArgs<'contracts' | 'provider' | 'getResolver'>, name: string, records
|
|
3
|
+
export default function ({ contracts, provider, getResolver, signer, }: ENSArgs<'contracts' | 'provider' | 'getResolver' | 'signer'>, name: string, { records, resolverAddress, }: {
|
|
4
|
+
records: RecordOptions;
|
|
5
|
+
resolverAddress?: string;
|
|
6
|
+
}): Promise<import("ethers").ContractTransaction | undefined>;
|
|
@@ -1,18 +1,20 @@
|
|
|
1
1
|
import { namehash } from '../utils/normalise';
|
|
2
2
|
import { generateRecordCallArray } from '../utils/recordHelpers';
|
|
3
|
-
export default async function ({ contracts, provider, getResolver, }, name, records) {
|
|
3
|
+
export default async function ({ contracts, provider, getResolver, signer, }, name, { records, resolverAddress, }) {
|
|
4
4
|
if (!name.includes('.')) {
|
|
5
5
|
throw new Error('Input is not an ENS name');
|
|
6
6
|
}
|
|
7
|
-
|
|
8
|
-
if (
|
|
9
|
-
|
|
7
|
+
let resolverToUse;
|
|
8
|
+
if (resolverAddress) {
|
|
9
|
+
resolverToUse = resolverAddress;
|
|
10
|
+
}
|
|
11
|
+
else {
|
|
12
|
+
resolverToUse = await getResolver(name);
|
|
10
13
|
}
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
throw new Error('No signer found');
|
|
14
|
+
if (!resolverToUse) {
|
|
15
|
+
throw new Error('No resolver found for input address');
|
|
14
16
|
}
|
|
15
|
-
const resolver = (await contracts?.getPublicResolver(provider,
|
|
17
|
+
const resolver = (await contracts?.getPublicResolver(provider, resolverToUse))?.connect(signer);
|
|
16
18
|
const hash = namehash(name);
|
|
17
19
|
const calls = generateRecordCallArray(hash, records, resolver);
|
|
18
20
|
return resolver?.multicall(calls);
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { ENSArgs } from '..';
|
|
2
|
-
export default function ({ contracts,
|
|
3
|
-
|
|
2
|
+
export default function ({ contracts, signer }: ENSArgs<'contracts' | 'signer'>, name: string, { contract, resolver, }: {
|
|
3
|
+
contract: 'registry' | 'nameWrapper';
|
|
4
|
+
resolver?: string;
|
|
4
5
|
}): Promise<import("ethers").ContractTransaction>;
|
|
@@ -1,21 +1,15 @@
|
|
|
1
1
|
import { namehash } from '../utils/normalise';
|
|
2
|
-
export default async function ({ contracts,
|
|
3
|
-
const address = await provider
|
|
4
|
-
?.getSigner(options?.addressOrIndex)
|
|
5
|
-
.getAddress();
|
|
6
|
-
if (!address) {
|
|
7
|
-
throw new Error('No signer found');
|
|
8
|
-
}
|
|
2
|
+
export default async function ({ contracts, signer }, name, { contract, resolver, }) {
|
|
9
3
|
if (!resolver) {
|
|
10
4
|
resolver = (await contracts?.getPublicResolver()).address;
|
|
11
5
|
}
|
|
12
6
|
switch (contract) {
|
|
13
7
|
case 'registry': {
|
|
14
|
-
const registry = (await contracts?.getRegistry()).connect(
|
|
8
|
+
const registry = (await contracts?.getRegistry()).connect(signer);
|
|
15
9
|
return registry.setResolver(namehash(name), resolver);
|
|
16
10
|
}
|
|
17
11
|
case 'nameWrapper': {
|
|
18
|
-
const nameWrapper = (await contracts?.getNameWrapper()).connect(
|
|
12
|
+
const nameWrapper = (await contracts?.getNameWrapper()).connect(signer);
|
|
19
13
|
return nameWrapper.setResolver(namehash(name), resolver);
|
|
20
14
|
}
|
|
21
15
|
default: {
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { ethers } from 'ethers';
|
|
2
2
|
import { ENSArgs } from '..';
|
|
3
|
-
export default function ({ contracts,
|
|
4
|
-
|
|
3
|
+
export default function ({ contracts, signer }: ENSArgs<'contracts' | 'signer'>, name: string, { newOwner, contract, }: {
|
|
4
|
+
newOwner: string;
|
|
5
|
+
contract: 'registry' | 'nameWrapper' | 'baseRegistrar';
|
|
5
6
|
}): Promise<ethers.ContractTransaction>;
|
|
@@ -1,19 +1,14 @@
|
|
|
1
1
|
import { ethers } from 'ethers';
|
|
2
2
|
import { namehash } from '../utils/normalise';
|
|
3
|
-
export default async function ({ contracts,
|
|
4
|
-
const address = await
|
|
5
|
-
?.getSigner(options?.addressOrIndex)
|
|
6
|
-
.getAddress();
|
|
7
|
-
if (!address) {
|
|
8
|
-
throw new Error('No signer found');
|
|
9
|
-
}
|
|
3
|
+
export default async function ({ contracts, signer }, name, { newOwner, contract, }) {
|
|
4
|
+
const address = await signer.getAddress();
|
|
10
5
|
switch (contract) {
|
|
11
6
|
case 'registry': {
|
|
12
|
-
const registry = (await contracts?.getRegistry()).connect(
|
|
7
|
+
const registry = (await contracts?.getRegistry()).connect(signer);
|
|
13
8
|
return registry.setOwner(namehash(name), newOwner);
|
|
14
9
|
}
|
|
15
10
|
case 'baseRegistrar': {
|
|
16
|
-
const baseRegistrar = (await contracts?.getBaseRegistrar()).connect(
|
|
11
|
+
const baseRegistrar = (await contracts?.getBaseRegistrar()).connect(signer);
|
|
17
12
|
const labels = name.split('.');
|
|
18
13
|
if (labels.length > 2 || labels[labels.length - 1] !== 'eth') {
|
|
19
14
|
throw new Error('Invalid name for baseRegistrar');
|
|
@@ -21,7 +16,7 @@ export default async function ({ contracts, provider }, name, newOwner, contract
|
|
|
21
16
|
return baseRegistrar['safeTransferFrom(address,address,uint256)'](address, newOwner, ethers.utils.solidityKeccak256(['string'], [labels[0]]));
|
|
22
17
|
}
|
|
23
18
|
case 'nameWrapper': {
|
|
24
|
-
const nameWrapper = (await contracts?.getNameWrapper()).connect(
|
|
19
|
+
const nameWrapper = (await contracts?.getNameWrapper()).connect(signer);
|
|
25
20
|
return nameWrapper.safeTransferFrom(address, newOwner, namehash(name), 1, '0x');
|
|
26
21
|
}
|
|
27
22
|
default: {
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { ethers } from 'ethers';
|
|
2
2
|
import { ENSArgs } from '..';
|
|
3
|
-
export default function ({ contracts,
|
|
4
|
-
|
|
3
|
+
export default function ({ contracts, signer }: ENSArgs<'contracts' | 'signer'>, name: string, { contract, address, }: {
|
|
4
|
+
contract: 'registry' | 'nameWrapper';
|
|
5
|
+
address: string;
|
|
5
6
|
}): Promise<ethers.ContractTransaction>;
|
|
@@ -1,10 +1,6 @@
|
|
|
1
1
|
import { ethers } from 'ethers';
|
|
2
2
|
import { namehash } from '../utils/normalise';
|
|
3
|
-
export default async function ({ contracts,
|
|
4
|
-
const signer = provider?.getSigner(options?.addressOrIndex);
|
|
5
|
-
if (!signer) {
|
|
6
|
-
throw new Error('No signer found');
|
|
7
|
-
}
|
|
3
|
+
export default async function ({ contracts, signer }, name, { contract, address, }) {
|
|
8
4
|
const labels = name.split('.');
|
|
9
5
|
const label = labels.shift();
|
|
10
6
|
const labelhash = ethers.utils.solidityKeccak256(['string'], [label]);
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { ENSArgs } from '..';
|
|
2
|
-
export default function ({ contracts,
|
|
3
|
-
|
|
2
|
+
export default function ({ contracts, signer }: ENSArgs<'contracts' | 'signer'>, name: string, { newController, newRegistrant, }: {
|
|
3
|
+
newController: string;
|
|
4
|
+
newRegistrant?: string;
|
|
4
5
|
}): Promise<import("ethers").ContractTransaction>;
|
|
@@ -1,11 +1,6 @@
|
|
|
1
1
|
import { utils } from 'ethers';
|
|
2
2
|
import { namehash } from '../utils/normalise';
|
|
3
|
-
export default async function ({ contracts,
|
|
4
|
-
const signer = provider?.getSigner(options?.addressOrIndex);
|
|
5
|
-
const address = await signer?.getAddress();
|
|
6
|
-
if (!signer || !address) {
|
|
7
|
-
throw new Error('No signer found');
|
|
8
|
-
}
|
|
3
|
+
export default async function ({ contracts, signer }, name, { newController, newRegistrant, }) {
|
|
9
4
|
const labels = name.split('.');
|
|
10
5
|
const labelhash = utils.solidityKeccak256(['string'], [labels[0]]);
|
|
11
6
|
const parentNodehash = namehash(labels.slice(1).join('.'));
|
|
@@ -1,6 +1,8 @@
|
|
|
1
1
|
import { ethers } from 'ethers';
|
|
2
2
|
import { ENSArgs } from '..';
|
|
3
3
|
import type { FuseOptions } from '../@types/FuseOptions';
|
|
4
|
-
export default function ({ contracts,
|
|
5
|
-
|
|
4
|
+
export default function ({ contracts, signer }: ENSArgs<'contracts' | 'signer'>, name: string, { wrappedOwner, fuseOptions, resolverAddress, }: {
|
|
5
|
+
wrappedOwner: string;
|
|
6
|
+
fuseOptions?: FuseOptions | string | number;
|
|
7
|
+
resolverAddress?: string;
|
|
6
8
|
}): Promise<ethers.ContractTransaction>;
|
|
@@ -5,11 +5,11 @@ async function wrapETH({ contracts }, labels, wrappedOwner, decodedFuses, resolv
|
|
|
5
5
|
const nameWrapper = await contracts?.getNameWrapper();
|
|
6
6
|
const baseRegistrar = (await contracts?.getBaseRegistrar()).connect(signer);
|
|
7
7
|
const labelhash = ethers.utils.solidityKeccak256(['string'], [labels[0]]);
|
|
8
|
-
const data = ethers.utils.defaultAbiCoder.encode(['string', 'address', '
|
|
8
|
+
const data = ethers.utils.defaultAbiCoder.encode(['string', 'address', 'uint32', 'uint64', 'address'], [labels[0], wrappedOwner, '0x0', decodedFuses, resolverAddress]);
|
|
9
9
|
return baseRegistrar['safeTransferFrom(address,address,uint256,bytes)'](address, nameWrapper.address, labelhash, data);
|
|
10
10
|
}
|
|
11
|
-
async function wrapOther({ contracts }, name, wrappedOwner, decodedFuses, resolverAddress, address) {
|
|
12
|
-
const nameWrapper = await contracts?.getNameWrapper();
|
|
11
|
+
async function wrapOther({ contracts }, name, wrappedOwner, decodedFuses, resolverAddress, address, signer) {
|
|
12
|
+
const nameWrapper = (await contracts?.getNameWrapper()).connect(signer);
|
|
13
13
|
const registry = await contracts?.getRegistry();
|
|
14
14
|
const hasApproval = await registry.isApprovedForAll(address, nameWrapper.address);
|
|
15
15
|
if (!hasApproval) {
|
|
@@ -17,12 +17,8 @@ async function wrapOther({ contracts }, name, wrappedOwner, decodedFuses, resolv
|
|
|
17
17
|
}
|
|
18
18
|
return nameWrapper.wrap(hexEncodeName(name), wrappedOwner, decodedFuses, resolverAddress);
|
|
19
19
|
}
|
|
20
|
-
export default async function ({ contracts,
|
|
21
|
-
const
|
|
22
|
-
const address = await signer?.getAddress();
|
|
23
|
-
if (!signer || !address) {
|
|
24
|
-
throw new Error('No signer found');
|
|
25
|
-
}
|
|
20
|
+
export default async function ({ contracts, signer }, name, { wrappedOwner, fuseOptions, resolverAddress, }) {
|
|
21
|
+
const address = await signer.getAddress();
|
|
26
22
|
let decodedFuses;
|
|
27
23
|
switch (typeof fuseOptions) {
|
|
28
24
|
case 'object': {
|
|
@@ -53,6 +49,6 @@ export default async function ({ contracts, provider }, name, wrappedOwner, fuse
|
|
|
53
49
|
return wrapETH({ contracts }, labels, wrappedOwner, decodedFuses, resolverAddress, signer, address);
|
|
54
50
|
}
|
|
55
51
|
else {
|
|
56
|
-
return wrapOther({ contracts }, name, wrappedOwner, decodedFuses, resolverAddress, address);
|
|
52
|
+
return wrapOther({ contracts }, name, wrappedOwner, decodedFuses, resolverAddress, address, signer);
|
|
57
53
|
}
|
|
58
54
|
}
|
package/dist/esm/index.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { ethers } from 'ethers';
|
|
1
|
+
import { ethers, Signer } from 'ethers';
|
|
2
2
|
import ContractManager from './contracts';
|
|
3
3
|
import { getContractAddress as _getContractAddress } from './contracts/getContractAddress';
|
|
4
4
|
import { SupportedNetworkId } from './contracts/types';
|
|
@@ -10,6 +10,7 @@ declare type ENSOptions = {
|
|
|
10
10
|
export declare type InternalENS = {
|
|
11
11
|
options?: ENSOptions;
|
|
12
12
|
provider?: ethers.providers.Provider;
|
|
13
|
+
signer: Signer;
|
|
13
14
|
graphURI?: string | null;
|
|
14
15
|
} & ENS;
|
|
15
16
|
export declare type ENSArgs<K extends keyof InternalENS> = {
|
|
@@ -17,6 +18,10 @@ export declare type ENSArgs<K extends keyof InternalENS> = {
|
|
|
17
18
|
};
|
|
18
19
|
declare type OmitFirstArg<F> = F extends (x: any, ...args: infer P) => infer R ? (...args: P) => R : never;
|
|
19
20
|
declare type OmitFirstTwoArgs<F> = F extends (x: any, y: any, ...args: infer P) => infer R ? (...args: P) => R : never;
|
|
21
|
+
declare type WriteOptions = {
|
|
22
|
+
addressOrIndex?: string | number;
|
|
23
|
+
signer?: Signer;
|
|
24
|
+
};
|
|
20
25
|
export declare type RawFunction = {
|
|
21
26
|
raw: (...args: any[]) => Promise<{
|
|
22
27
|
to: string;
|
|
@@ -77,6 +82,14 @@ export declare class ENS {
|
|
|
77
82
|
* @returns {OmitFirstArg} - The generated wrapped function
|
|
78
83
|
*/
|
|
79
84
|
private generateFunction;
|
|
85
|
+
/**
|
|
86
|
+
* Generates a write wrapped function
|
|
87
|
+
* @param {string} path - The path of the exported function
|
|
88
|
+
* @param {FunctionDeps} dependencies - An array of ENS properties
|
|
89
|
+
* @param {string} exportName - The export name of the target function
|
|
90
|
+
* @returns {OmitFirstArg} - The generated wrapped function
|
|
91
|
+
*/
|
|
92
|
+
private generateWriteFunction;
|
|
80
93
|
/**
|
|
81
94
|
* Generates a wrapped function from raw and decode exports
|
|
82
95
|
* @param {string} path - The path of the exported function
|
|
@@ -423,48 +436,53 @@ export declare class ENS {
|
|
|
423
436
|
}>;
|
|
424
437
|
decode: ({ contracts }: ENSArgs<"contracts">, data: string) => Promise<any>;
|
|
425
438
|
}>;
|
|
426
|
-
setName: (name: string,
|
|
427
|
-
|
|
428
|
-
|
|
429
|
-
|
|
430
|
-
|
|
431
|
-
|
|
432
|
-
|
|
433
|
-
|
|
434
|
-
|
|
435
|
-
|
|
436
|
-
|
|
437
|
-
|
|
438
|
-
|
|
439
|
-
|
|
440
|
-
|
|
441
|
-
}
|
|
442
|
-
|
|
443
|
-
|
|
444
|
-
|
|
439
|
+
setName: (name: string, options?: ({
|
|
440
|
+
address?: string | undefined;
|
|
441
|
+
resolver?: string | undefined;
|
|
442
|
+
} & WriteOptions) | undefined) => Promise<ethers.ContractTransaction | undefined>;
|
|
443
|
+
setRecords: (name: string, options: {
|
|
444
|
+
records: import("./utils/recordHelpers").RecordOptions;
|
|
445
|
+
resolverAddress?: string | undefined;
|
|
446
|
+
} & WriteOptions) => Promise<ethers.ContractTransaction | undefined>;
|
|
447
|
+
setResolver: (name: string, options: {
|
|
448
|
+
contract: "nameWrapper" | "registry";
|
|
449
|
+
resolver?: string | undefined;
|
|
450
|
+
} & WriteOptions) => Promise<ethers.ContractTransaction>;
|
|
451
|
+
transferName: (name: string, options: {
|
|
452
|
+
newOwner: string;
|
|
453
|
+
contract: "nameWrapper" | "registry" | "baseRegistrar";
|
|
454
|
+
} & WriteOptions) => Promise<ethers.ContractTransaction>;
|
|
455
|
+
wrapName: (name: string, options: {
|
|
456
|
+
wrappedOwner: string;
|
|
457
|
+
fuseOptions?: string | number | import("./@types/FuseOptions").FuseOptions | undefined;
|
|
458
|
+
resolverAddress?: string | undefined;
|
|
459
|
+
} & WriteOptions) => Promise<ethers.ContractTransaction>;
|
|
460
|
+
unwrapName: (name: string, options: {
|
|
461
|
+
newController: string;
|
|
462
|
+
newRegistrant?: string | undefined;
|
|
463
|
+
} & WriteOptions) => Promise<ethers.ContractTransaction>;
|
|
464
|
+
burnFuses: (name: string, options: {
|
|
465
|
+
fusesToBurn: import("./@types/FuseOptions").FuseOptions;
|
|
466
|
+
} & WriteOptions) => Promise<ethers.ContractTransaction>;
|
|
467
|
+
createSubname: (name: string, options: ({
|
|
445
468
|
owner: string;
|
|
446
469
|
resolverAddress?: string | undefined;
|
|
447
470
|
contract: "nameWrapper" | "registry";
|
|
448
|
-
options?: {
|
|
449
|
-
addressOrIndex?: string | number | undefined;
|
|
450
|
-
} | undefined;
|
|
451
471
|
} | ({
|
|
452
472
|
contract: "nameWrapper";
|
|
453
473
|
fuses?: import("./@types/FuseOptions").FuseOptions | undefined;
|
|
454
474
|
} & {
|
|
455
|
-
name: string;
|
|
456
475
|
owner: string;
|
|
457
476
|
resolverAddress?: string | undefined;
|
|
458
477
|
contract: "nameWrapper" | "registry";
|
|
459
|
-
|
|
460
|
-
|
|
461
|
-
|
|
462
|
-
})
|
|
463
|
-
|
|
464
|
-
|
|
465
|
-
|
|
466
|
-
|
|
467
|
-
|
|
468
|
-
} | undefined) => Promise<ethers.ContractTransaction>;
|
|
478
|
+
})) & WriteOptions) => Promise<ethers.ContractTransaction>;
|
|
479
|
+
deleteSubname: (name: string, options: {
|
|
480
|
+
contract: "nameWrapper" | "registry";
|
|
481
|
+
} & WriteOptions) => Promise<ethers.ContractTransaction>;
|
|
482
|
+
transferSubname: (name: string, options: {
|
|
483
|
+
contract: "nameWrapper" | "registry";
|
|
484
|
+
address: string;
|
|
485
|
+
} & WriteOptions) => Promise<ethers.ContractTransaction>;
|
|
486
|
+
getDNSOwner: (dnsName: string) => Promise<any>;
|
|
469
487
|
}
|
|
470
488
|
export {};
|
package/dist/esm/index.js
CHANGED
|
@@ -58,9 +58,24 @@ export class ENS {
|
|
|
58
58
|
// otherwise, create a function from the raw and decode functions
|
|
59
59
|
if (subFunc !== 'combine') {
|
|
60
60
|
// get the function to call
|
|
61
|
-
const func = subFunc
|
|
61
|
+
const func = subFunc && subFunc !== 'write'
|
|
62
|
+
? mod[exportName][subFunc]
|
|
63
|
+
: mod[exportName];
|
|
62
64
|
// get the dependencies to forward to the function as the first arg
|
|
63
|
-
|
|
65
|
+
let dependenciesToForward = thisRef.forwardDependenciesFromArray(dependencies);
|
|
66
|
+
// if func is write func, inject signer into dependencies
|
|
67
|
+
if (subFunc === 'write') {
|
|
68
|
+
const options = (args[1] || {});
|
|
69
|
+
const signer = options.signer ||
|
|
70
|
+
thisRef.provider?.getSigner(options.addressOrIndex);
|
|
71
|
+
if (!signer) {
|
|
72
|
+
throw new Error('No signer specified');
|
|
73
|
+
}
|
|
74
|
+
delete options.addressOrIndex;
|
|
75
|
+
delete options.signer;
|
|
76
|
+
dependenciesToForward = { ...dependenciesToForward, signer };
|
|
77
|
+
return func(dependenciesToForward, args[0], options);
|
|
78
|
+
}
|
|
64
79
|
// return the function with the dependencies forwarded
|
|
65
80
|
return func(dependenciesToForward, ...args);
|
|
66
81
|
}
|
|
@@ -87,6 +102,14 @@ export class ENS {
|
|
|
87
102
|
* @returns {OmitFirstArg} - The generated wrapped function
|
|
88
103
|
*/
|
|
89
104
|
this.generateFunction = (path, dependencies, exportName = 'default') => this.importGenerator(path, dependencies, exportName);
|
|
105
|
+
/**
|
|
106
|
+
* Generates a write wrapped function
|
|
107
|
+
* @param {string} path - The path of the exported function
|
|
108
|
+
* @param {FunctionDeps} dependencies - An array of ENS properties
|
|
109
|
+
* @param {string} exportName - The export name of the target function
|
|
110
|
+
* @returns {OmitFirstArg} - The generated wrapped function
|
|
111
|
+
*/
|
|
112
|
+
this.generateWriteFunction = (path, dependencies, exportName = 'default') => this.importGenerator(path, dependencies, exportName, 'write');
|
|
90
113
|
/**
|
|
91
114
|
* Generates a wrapped function from raw and decode exports
|
|
92
115
|
* @param {string} path - The path of the exported function
|
|
@@ -157,32 +180,23 @@ export class ENS {
|
|
|
157
180
|
this.universalWrapper = this.generateRawFunction('initialGetters', ['contracts'], 'universalWrapper');
|
|
158
181
|
this.resolverMulticallWrapper = this.generateRawFunction('initialGetters', ['contracts'], 'resolverMulticallWrapper');
|
|
159
182
|
this.multicallWrapper = this.generateRawFunction('initialGetters', ['contracts'], 'multicallWrapper');
|
|
160
|
-
this.setName = this.
|
|
161
|
-
'contracts',
|
|
162
|
-
'provider',
|
|
163
|
-
]);
|
|
164
|
-
this.setRecords = this.generateFunction('setRecords', [
|
|
165
|
-
'contracts',
|
|
166
|
-
'provider',
|
|
167
|
-
'getResolver',
|
|
168
|
-
]);
|
|
169
|
-
this.setResolver = this.generateFunction('setResolver', ['contracts', 'provider']);
|
|
170
|
-
this.transferName = this.generateFunction('transferName', ['contracts', 'provider']);
|
|
171
|
-
this.wrapName = this.generateFunction('wrapName', [
|
|
183
|
+
this.setName = this.generateWriteFunction('setName', [
|
|
172
184
|
'contracts',
|
|
173
|
-
'provider',
|
|
174
185
|
]);
|
|
175
|
-
this.
|
|
186
|
+
this.setRecords = this.generateWriteFunction('setRecords', ['contracts', 'provider', 'getResolver']);
|
|
187
|
+
this.setResolver = this.generateWriteFunction('setResolver', ['contracts']);
|
|
188
|
+
this.transferName = this.generateWriteFunction('transferName', ['contracts']);
|
|
189
|
+
this.wrapName = this.generateWriteFunction('wrapName', [
|
|
176
190
|
'contracts',
|
|
177
|
-
'provider',
|
|
178
191
|
]);
|
|
179
|
-
this.
|
|
192
|
+
this.unwrapName = this.generateWriteFunction('unwrapName', ['contracts']);
|
|
193
|
+
this.burnFuses = this.generateWriteFunction('burnFuses', [
|
|
180
194
|
'contracts',
|
|
181
|
-
'provider',
|
|
182
195
|
]);
|
|
183
|
-
this.createSubname = this.
|
|
184
|
-
this.deleteSubname = this.
|
|
185
|
-
this.transferSubname = this.
|
|
196
|
+
this.createSubname = this.generateWriteFunction('createSubname', ['contracts']);
|
|
197
|
+
this.deleteSubname = this.generateWriteFunction('deleteSubname', ['transferSubname']);
|
|
198
|
+
this.transferSubname = this.generateWriteFunction('transferSubname', ['contracts']);
|
|
199
|
+
this.getDNSOwner = this.generateFunction('getDNSOwner', []);
|
|
186
200
|
this.options = options;
|
|
187
201
|
this.getContractAddress = options?.getContractAddress || _getContractAddress;
|
|
188
202
|
}
|