@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.
Files changed (89) hide show
  1. package/dist/cjs/functions/burnFuses.d.ts +3 -1
  2. package/dist/cjs/functions/burnFuses.js +1 -5
  3. package/dist/cjs/functions/createSubname.d.ts +1 -5
  4. package/dist/cjs/functions/createSubname.js +1 -5
  5. package/dist/cjs/functions/deleteSubname.d.ts +2 -2
  6. package/dist/cjs/functions/deleteSubname.js +5 -2
  7. package/dist/cjs/functions/getDNSOwner.d.ts +7 -0
  8. package/dist/cjs/functions/getDNSOwner.js +81 -0
  9. package/dist/cjs/functions/setName.d.ts +3 -2
  10. package/dist/cjs/functions/setName.js +3 -8
  11. package/dist/cjs/functions/setRecords.d.ts +4 -1
  12. package/dist/cjs/functions/setRecords.js +10 -8
  13. package/dist/cjs/functions/setResolver.d.ts +3 -2
  14. package/dist/cjs/functions/setResolver.js +3 -9
  15. package/dist/cjs/functions/transferName.d.ts +3 -2
  16. package/dist/cjs/functions/transferName.js +5 -10
  17. package/dist/cjs/functions/transferSubname.d.ts +3 -2
  18. package/dist/cjs/functions/transferSubname.js +1 -5
  19. package/dist/cjs/functions/unwrapName.d.ts +3 -2
  20. package/dist/cjs/functions/unwrapName.js +1 -6
  21. package/dist/cjs/functions/wrapName.d.ts +4 -2
  22. package/dist/cjs/functions/wrapName.js +6 -10
  23. package/dist/cjs/index.d.ts +52 -34
  24. package/dist/cjs/index.js +36 -22
  25. package/dist/esm/functions/burnFuses.d.ts +3 -1
  26. package/dist/esm/functions/burnFuses.js +1 -5
  27. package/dist/esm/functions/createSubname.d.ts +1 -5
  28. package/dist/esm/functions/createSubname.js +1 -5
  29. package/dist/esm/functions/deleteSubname.d.ts +2 -2
  30. package/dist/esm/functions/deleteSubname.js +5 -2
  31. package/dist/esm/functions/getDNSOwner.d.ts +7 -0
  32. package/dist/esm/functions/getDNSOwner.js +51 -0
  33. package/dist/esm/functions/setName.d.ts +3 -2
  34. package/dist/esm/functions/setName.js +3 -8
  35. package/dist/esm/functions/setRecords.d.ts +4 -1
  36. package/dist/esm/functions/setRecords.js +10 -8
  37. package/dist/esm/functions/setResolver.d.ts +3 -2
  38. package/dist/esm/functions/setResolver.js +3 -9
  39. package/dist/esm/functions/transferName.d.ts +3 -2
  40. package/dist/esm/functions/transferName.js +5 -10
  41. package/dist/esm/functions/transferSubname.d.ts +3 -2
  42. package/dist/esm/functions/transferSubname.js +1 -5
  43. package/dist/esm/functions/unwrapName.d.ts +3 -2
  44. package/dist/esm/functions/unwrapName.js +1 -6
  45. package/dist/esm/functions/wrapName.d.ts +4 -2
  46. package/dist/esm/functions/wrapName.js +6 -10
  47. package/dist/esm/index.d.ts +52 -34
  48. package/dist/esm/index.js +36 -22
  49. package/package.json +10 -5
  50. package/src/@types/dns-packet/index.d.ts +114 -0
  51. package/src/{tests → functions}/batch.test.ts +1 -1
  52. package/src/{tests → functions}/batchWrappers.test.ts +1 -1
  53. package/src/{tests → functions}/burnFuses.test.ts +9 -8
  54. package/src/functions/burnFuses.ts +6 -8
  55. package/src/{tests → functions}/createSubname.test.ts +8 -11
  56. package/src/functions/createSubname.ts +3 -10
  57. package/src/{tests → functions}/deleteSubname.test.ts +28 -27
  58. package/src/functions/deleteSubname.ts +9 -12
  59. package/src/functions/getDNSOwner.test.ts +122 -0
  60. package/src/functions/getDNSOwner.ts +61 -0
  61. package/src/{tests → functions}/getExpiry.test.ts +1 -1
  62. package/src/{tests → functions}/getFuses.test.ts +12 -10
  63. package/src/{tests → functions}/getHistory.test.ts +1 -1
  64. package/src/{tests → functions}/getName.test.ts +1 -1
  65. package/src/{tests → functions}/getNames.test.ts +1 -1
  66. package/src/{tests → functions}/getOwner.test.ts +4 -2
  67. package/src/{tests → functions}/getProfile.test.ts +1 -1
  68. package/src/{tests → functions}/getResolver.test.ts +1 -1
  69. package/src/{tests → functions}/getSpecificRecord.test.ts +1 -1
  70. package/src/{tests → functions}/getSubnames.test.ts +1 -1
  71. package/src/{tests → functions}/makeCommitment.test.ts +1 -1
  72. package/src/{tests → functions}/normalise.test.ts +0 -0
  73. package/src/{tests → functions}/setName.test.ts +3 -2
  74. package/src/functions/setName.ts +10 -12
  75. package/src/{tests → functions}/setRecords.test.ts +7 -5
  76. package/src/functions/setRecords.ts +18 -12
  77. package/src/{tests → functions}/setResolver.test.ts +12 -15
  78. package/src/functions/setResolver.ts +10 -18
  79. package/src/{tests → functions}/transferName.test.ts +27 -29
  80. package/src/functions/transferName.ts +12 -18
  81. package/src/{tests → functions}/transferSubname.test.ts +30 -29
  82. package/src/functions/transferSubname.ts +8 -10
  83. package/src/{tests → functions}/unwrapName.test.ts +22 -22
  84. package/src/functions/unwrapName.ts +8 -12
  85. package/src/{tests → functions}/wrapName.test.ts +15 -12
  86. package/src/functions/wrapName.ts +16 -15
  87. package/src/index.ts +85 -29
  88. package/src/tests/signerInjection.test.ts +42 -0
  89. 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, provider }: ENSArgs<'contracts' | 'provider'>, name: string, fusesToBurn: FuseOptions): Promise<import("ethers").ContractTransaction>;
3
+ export default function ({ contracts, signer }: ENSArgs<'contracts' | 'signer'>, name: string, { fusesToBurn, }: {
4
+ fusesToBurn: FuseOptions;
5
+ }): Promise<import("ethers").ContractTransaction>;
@@ -5,11 +5,7 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
5
5
  Object.defineProperty(exports, "__esModule", { value: true });
6
6
  const generateFuseInput_1 = __importDefault(require("../utils/generateFuseInput"));
7
7
  const normalise_1 = require("../utils/normalise");
8
- async function default_1({ contracts, provider }, name, fusesToBurn) {
9
- const signer = provider?.getSigner();
10
- if (!signer) {
11
- throw new Error('No signer found');
12
- }
8
+ async function default_1({ contracts, signer }, name, { fusesToBurn, }) {
13
9
  const nameWrapper = (await contracts?.getNameWrapper()).connect(signer);
14
10
  const hash = (0, normalise_1.namehash)(name);
15
11
  const encodedFuses = (0, generateFuseInput_1.default)(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, provider }: ENSArgs<'contracts' | 'provider'>, { name, owner, resolverAddress, contract, options, ...wrapperArgs }: Args): Promise<ethers.ContractTransaction>;
14
+ export default function ({ contracts, signer }: ENSArgs<'contracts' | 'signer'>, name: string, { owner, resolverAddress, contract, ...wrapperArgs }: Args): Promise<ethers.ContractTransaction>;
19
15
  export {};
@@ -6,11 +6,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
6
6
  const ethers_1 = require("ethers");
7
7
  const generateFuseInput_1 = __importDefault(require("../utils/generateFuseInput"));
8
8
  const normalise_1 = require("../utils/normalise");
9
- async function default_1({ contracts, provider }, { name, owner, resolverAddress, contract, options, ...wrapperArgs }) {
10
- const signer = provider?.getSigner(options?.addressOrIndex);
11
- if (!signer) {
12
- throw new Error('No signer found');
13
- }
9
+ async function default_1({ contracts, signer }, name, { owner, resolverAddress, contract, ...wrapperArgs }) {
14
10
  const labels = name.split('.');
15
11
  if (labels.length === 1) {
16
12
  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 ({ contracts, provider, transferSubname, }: ENSArgs<'contracts' | 'provider' | 'transferSubname'>, name: string, contract: 'registry' | 'nameWrapper', options?: {
3
- addressOrIndex?: string | number;
2
+ export default function ({ transferSubname }: ENSArgs<'transferSubname'>, name: string, { contract, }: {
3
+ contract: 'registry' | 'nameWrapper';
4
4
  }): Promise<import("ethers").ContractTransaction>;
@@ -1,6 +1,9 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- async function default_1({ contracts, provider, transferSubname, }, name, contract, options) {
4
- return transferSubname(name, contract, '0x0000000000000000000000000000000000000000', options);
3
+ async function default_1({ transferSubname }, name, { contract, }) {
4
+ return transferSubname(name, {
5
+ contract,
6
+ address: '0x0000000000000000000000000000000000000000',
7
+ });
5
8
  }
6
9
  exports.default = default_1;
@@ -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,81 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || function (mod) {
19
+ if (mod && mod.__esModule) return mod;
20
+ var result = {};
21
+ if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
22
+ __setModuleDefault(result, mod);
23
+ return result;
24
+ };
25
+ Object.defineProperty(exports, "__esModule", { value: true });
26
+ exports.dnsQuery = exports.getDNS = exports.encodeURLParams = void 0;
27
+ const packet = __importStar(require("dns-packet"));
28
+ function encodeURLParams(p) {
29
+ return Object.entries(p)
30
+ .map((kv) => kv.map(encodeURIComponent).join('='))
31
+ .join('&');
32
+ }
33
+ exports.encodeURLParams = encodeURLParams;
34
+ const getDNS = async (q) => {
35
+ const response = await global.fetch(`https://cloudflare-dns.com/dns-query?${encodeURLParams({
36
+ ct: 'application/dns-udpwireformat',
37
+ dns: packet.encode(q)?.toString('base64'),
38
+ ts: Date.now().toString(),
39
+ })}`);
40
+ const arrayBuffer = await response.arrayBuffer();
41
+ // @ts-ignore:next-line
42
+ const fromArrayBuffer = Buffer.from(arrayBuffer);
43
+ return packet.decode(fromArrayBuffer);
44
+ };
45
+ exports.getDNS = getDNS;
46
+ const dnsQuery = async (qtype, qname) => {
47
+ const query = {
48
+ type: 'query',
49
+ id: 1,
50
+ flags: packet.RECURSION_DESIRED,
51
+ questions: [
52
+ {
53
+ type: qtype,
54
+ class: 'IN',
55
+ name: qname,
56
+ },
57
+ ],
58
+ additionals: [
59
+ {
60
+ type: 'OPT',
61
+ class: 'IN',
62
+ name: '.',
63
+ udpPayloadSize: 4096,
64
+ flags: packet.DNSSEC_OK,
65
+ },
66
+ ],
67
+ answers: [],
68
+ };
69
+ const response = await (0, exports.getDNS)(query);
70
+ if (response.rcode !== 'NOERROR') {
71
+ throw new Error(`DNS query failed: ${response.rcode}`);
72
+ }
73
+ return response;
74
+ };
75
+ exports.dnsQuery = dnsQuery;
76
+ async function default_1(_, dnsName) {
77
+ const result = await (0, exports.dnsQuery)('TXT', `_ens.${dnsName}`);
78
+ const address = result?.answers?.[0]?.data?.[0]?.toString()?.split('=')?.[1];
79
+ return address;
80
+ }
81
+ exports.default = default_1;
@@ -1,4 +1,5 @@
1
1
  import { ENSArgs } from '..';
2
- export default function ({ contracts, provider }: ENSArgs<'contracts' | 'provider'>, name: string, address?: string, resolver?: string, options?: {
3
- addressOrIndex?: string | number;
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,13 +1,8 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- async function default_1({ contracts, provider }, name, address, resolver, options) {
4
- const signerAddress = await provider
5
- ?.getSigner(options?.addressOrIndex)
6
- .getAddress();
7
- if (!signerAddress) {
8
- throw new Error('No signer found');
9
- }
10
- const reverseRegistrar = (await contracts?.getReverseRegistrar())?.connect(provider?.getSigner());
3
+ async function default_1({ contracts, signer }, name, { address, resolver, } = {}) {
4
+ const signerAddress = await signer.getAddress();
5
+ const reverseRegistrar = (await contracts?.getReverseRegistrar())?.connect(signer);
11
6
  if (address) {
12
7
  const publicResolver = await contracts?.getPublicResolver();
13
8
  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: RecordOptions): Promise<import("ethers").ContractTransaction | undefined>;
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>;
@@ -2,19 +2,21 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  const normalise_1 = require("../utils/normalise");
4
4
  const recordHelpers_1 = require("../utils/recordHelpers");
5
- async function default_1({ contracts, provider, getResolver, }, name, records) {
5
+ async function default_1({ contracts, provider, getResolver, signer, }, name, { records, resolverAddress, }) {
6
6
  if (!name.includes('.')) {
7
7
  throw new Error('Input is not an ENS name');
8
8
  }
9
- const resolverAddress = await getResolver(name);
10
- if (!resolverAddress) {
11
- throw new Error('No resolver found for input address');
9
+ let resolverToUse;
10
+ if (resolverAddress) {
11
+ resolverToUse = resolverAddress;
12
+ }
13
+ else {
14
+ resolverToUse = await getResolver(name);
12
15
  }
13
- const address = await provider?.getSigner().getAddress();
14
- if (!address) {
15
- throw new Error('No signer found');
16
+ if (!resolverToUse) {
17
+ throw new Error('No resolver found for input address');
16
18
  }
17
- const resolver = (await contracts?.getPublicResolver(provider, resolverAddress))?.connect(provider?.getSigner());
19
+ const resolver = (await contracts?.getPublicResolver(provider, resolverToUse))?.connect(signer);
18
20
  const hash = (0, normalise_1.namehash)(name);
19
21
  const calls = (0, recordHelpers_1.generateRecordCallArray)(hash, records, resolver);
20
22
  return resolver?.multicall(calls);
@@ -1,4 +1,5 @@
1
1
  import { ENSArgs } from '..';
2
- export default function ({ contracts, provider }: ENSArgs<'contracts' | 'provider'>, name: string, contract: 'registry' | 'nameWrapper', resolver?: string, options?: {
3
- addressOrIndex?: string | number;
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,23 +1,17 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  const normalise_1 = require("../utils/normalise");
4
- async function default_1({ contracts, provider }, name, contract, resolver, options) {
5
- const address = await provider
6
- ?.getSigner(options?.addressOrIndex)
7
- .getAddress();
8
- if (!address) {
9
- throw new Error('No signer found');
10
- }
4
+ async function default_1({ contracts, signer }, name, { contract, resolver, }) {
11
5
  if (!resolver) {
12
6
  resolver = (await contracts?.getPublicResolver()).address;
13
7
  }
14
8
  switch (contract) {
15
9
  case 'registry': {
16
- const registry = (await contracts?.getRegistry()).connect(provider?.getSigner(options?.addressOrIndex));
10
+ const registry = (await contracts?.getRegistry()).connect(signer);
17
11
  return registry.setResolver((0, normalise_1.namehash)(name), resolver);
18
12
  }
19
13
  case 'nameWrapper': {
20
- const nameWrapper = (await contracts?.getNameWrapper()).connect(provider?.getSigner(options?.addressOrIndex));
14
+ const nameWrapper = (await contracts?.getNameWrapper()).connect(signer);
21
15
  return nameWrapper.setResolver((0, normalise_1.namehash)(name), resolver);
22
16
  }
23
17
  default: {
@@ -1,5 +1,6 @@
1
1
  import { ethers } from 'ethers';
2
2
  import { ENSArgs } from '..';
3
- export default function ({ contracts, provider }: ENSArgs<'contracts' | 'provider'>, name: string, newOwner: string, contract: 'registry' | 'nameWrapper' | 'baseRegistrar', options?: {
4
- addressOrIndex?: string | number;
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>;
@@ -2,20 +2,15 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  const ethers_1 = require("ethers");
4
4
  const normalise_1 = require("../utils/normalise");
5
- async function default_1({ contracts, provider }, name, newOwner, contract, options) {
6
- const address = await provider
7
- ?.getSigner(options?.addressOrIndex)
8
- .getAddress();
9
- if (!address) {
10
- throw new Error('No signer found');
11
- }
5
+ async function default_1({ contracts, signer }, name, { newOwner, contract, }) {
6
+ const address = await signer.getAddress();
12
7
  switch (contract) {
13
8
  case 'registry': {
14
- const registry = (await contracts?.getRegistry()).connect(provider?.getSigner(options?.addressOrIndex));
9
+ const registry = (await contracts?.getRegistry()).connect(signer);
15
10
  return registry.setOwner((0, normalise_1.namehash)(name), newOwner);
16
11
  }
17
12
  case 'baseRegistrar': {
18
- const baseRegistrar = (await contracts?.getBaseRegistrar()).connect(provider?.getSigner(options?.addressOrIndex));
13
+ const baseRegistrar = (await contracts?.getBaseRegistrar()).connect(signer);
19
14
  const labels = name.split('.');
20
15
  if (labels.length > 2 || labels[labels.length - 1] !== 'eth') {
21
16
  throw new Error('Invalid name for baseRegistrar');
@@ -23,7 +18,7 @@ async function default_1({ contracts, provider }, name, newOwner, contract, opti
23
18
  return baseRegistrar['safeTransferFrom(address,address,uint256)'](address, newOwner, ethers_1.ethers.utils.solidityKeccak256(['string'], [labels[0]]));
24
19
  }
25
20
  case 'nameWrapper': {
26
- const nameWrapper = (await contracts?.getNameWrapper()).connect(provider?.getSigner(options?.addressOrIndex));
21
+ const nameWrapper = (await contracts?.getNameWrapper()).connect(signer);
27
22
  return nameWrapper.safeTransferFrom(address, newOwner, (0, normalise_1.namehash)(name), 1, '0x');
28
23
  }
29
24
  default: {
@@ -1,5 +1,6 @@
1
1
  import { ethers } from 'ethers';
2
2
  import { ENSArgs } from '..';
3
- export default function ({ contracts, provider }: ENSArgs<'contracts' | 'provider'>, name: string, contract: 'registry' | 'nameWrapper', address: string, options?: {
4
- addressOrIndex?: string | number;
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>;
@@ -2,11 +2,7 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  const ethers_1 = require("ethers");
4
4
  const normalise_1 = require("../utils/normalise");
5
- async function default_1({ contracts, provider }, name, contract, address, options) {
6
- const signer = provider?.getSigner(options?.addressOrIndex);
7
- if (!signer) {
8
- throw new Error('No signer found');
9
- }
5
+ async function default_1({ contracts, signer }, name, { contract, address, }) {
10
6
  const labels = name.split('.');
11
7
  const label = labels.shift();
12
8
  const labelhash = ethers_1.ethers.utils.solidityKeccak256(['string'], [label]);
@@ -1,4 +1,5 @@
1
1
  import { ENSArgs } from '..';
2
- export default function ({ contracts, provider }: ENSArgs<'contracts' | 'provider'>, name: string, newController: string, newRegistrant?: string, options?: {
3
- addressOrIndex?: string | number;
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>;
@@ -2,12 +2,7 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  const ethers_1 = require("ethers");
4
4
  const normalise_1 = require("../utils/normalise");
5
- async function default_1({ contracts, provider }, name, newController, newRegistrant, options) {
6
- const signer = provider?.getSigner(options?.addressOrIndex);
7
- const address = await signer?.getAddress();
8
- if (!signer || !address) {
9
- throw new Error('No signer found');
10
- }
5
+ async function default_1({ contracts, signer }, name, { newController, newRegistrant, }) {
11
6
  const labels = name.split('.');
12
7
  const labelhash = ethers_1.utils.solidityKeccak256(['string'], [labels[0]]);
13
8
  const parentNodehash = (0, normalise_1.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, provider }: ENSArgs<'contracts' | 'provider'>, name: string, wrappedOwner: string, fuseOptions?: FuseOptions | string | number, resolverAddress?: string, options?: {
5
- addressOrIndex?: string | number;
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>;
@@ -10,11 +10,11 @@ async function wrapETH({ contracts }, labels, wrappedOwner, decodedFuses, resolv
10
10
  const nameWrapper = await contracts?.getNameWrapper();
11
11
  const baseRegistrar = (await contracts?.getBaseRegistrar()).connect(signer);
12
12
  const labelhash = ethers_1.ethers.utils.solidityKeccak256(['string'], [labels[0]]);
13
- const data = ethers_1.ethers.utils.defaultAbiCoder.encode(['string', 'address', 'uint96', 'address'], [labels[0], wrappedOwner, decodedFuses, resolverAddress]);
13
+ const data = ethers_1.ethers.utils.defaultAbiCoder.encode(['string', 'address', 'uint32', 'uint64', 'address'], [labels[0], wrappedOwner, '0x0', decodedFuses, resolverAddress]);
14
14
  return baseRegistrar['safeTransferFrom(address,address,uint256,bytes)'](address, nameWrapper.address, labelhash, data);
15
15
  }
16
- async function wrapOther({ contracts }, name, wrappedOwner, decodedFuses, resolverAddress, address) {
17
- const nameWrapper = await contracts?.getNameWrapper();
16
+ async function wrapOther({ contracts }, name, wrappedOwner, decodedFuses, resolverAddress, address, signer) {
17
+ const nameWrapper = (await contracts?.getNameWrapper()).connect(signer);
18
18
  const registry = await contracts?.getRegistry();
19
19
  const hasApproval = await registry.isApprovedForAll(address, nameWrapper.address);
20
20
  if (!hasApproval) {
@@ -22,12 +22,8 @@ async function wrapOther({ contracts }, name, wrappedOwner, decodedFuses, resolv
22
22
  }
23
23
  return nameWrapper.wrap((0, hexEncodedName_1.hexEncodeName)(name), wrappedOwner, decodedFuses, resolverAddress);
24
24
  }
25
- async function default_1({ contracts, provider }, name, wrappedOwner, fuseOptions, resolverAddress, options) {
26
- const signer = provider?.getSigner(options?.addressOrIndex);
27
- const address = await signer?.getAddress();
28
- if (!signer || !address) {
29
- throw new Error('No signer found');
30
- }
25
+ async function default_1({ contracts, signer }, name, { wrappedOwner, fuseOptions, resolverAddress, }) {
26
+ const address = await signer.getAddress();
31
27
  let decodedFuses;
32
28
  switch (typeof fuseOptions) {
33
29
  case 'object': {
@@ -58,7 +54,7 @@ async function default_1({ contracts, provider }, name, wrappedOwner, fuseOption
58
54
  return wrapETH({ contracts }, labels, wrappedOwner, decodedFuses, resolverAddress, signer, address);
59
55
  }
60
56
  else {
61
- return wrapOther({ contracts }, name, wrappedOwner, decodedFuses, resolverAddress, address);
57
+ return wrapOther({ contracts }, name, wrappedOwner, decodedFuses, resolverAddress, address, signer);
62
58
  }
63
59
  }
64
60
  exports.default = default_1;
@@ -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, address?: string | undefined, resolver?: string | undefined, options?: {
427
- addressOrIndex?: string | number | undefined;
428
- } | undefined) => Promise<ethers.ContractTransaction | undefined>;
429
- setRecords: (name: string, records: import("./utils/recordHelpers").RecordOptions) => Promise<ethers.ContractTransaction | undefined>;
430
- setResolver: (name: string, contract: "nameWrapper" | "registry", resolver?: string | undefined, options?: {
431
- addressOrIndex?: string | number | undefined;
432
- } | undefined) => Promise<ethers.ContractTransaction>;
433
- transferName: (name: string, newOwner: string, contract: "nameWrapper" | "registry" | "baseRegistrar", options?: {
434
- addressOrIndex?: string | number | undefined;
435
- } | undefined) => Promise<ethers.ContractTransaction>;
436
- wrapName: (name: string, wrappedOwner: string, fuseOptions?: string | number | import("./@types/FuseOptions").FuseOptions | undefined, resolverAddress?: string | undefined, options?: {
437
- addressOrIndex?: string | number | undefined;
438
- } | undefined) => Promise<ethers.ContractTransaction>;
439
- unwrapName: (name: string, newController: string, newRegistrant?: string | undefined, options?: {
440
- addressOrIndex?: string | number | undefined;
441
- } | undefined) => Promise<ethers.ContractTransaction>;
442
- burnFuses: (name: string, fusesToBurn: import("./@types/FuseOptions").FuseOptions) => Promise<ethers.ContractTransaction>;
443
- createSubname: (args_0: {
444
- name: string;
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
- options?: {
460
- addressOrIndex?: string | number | undefined;
461
- } | undefined;
462
- })) => Promise<ethers.ContractTransaction>;
463
- deleteSubname: (name: string, contract: "nameWrapper" | "registry", options?: {
464
- addressOrIndex?: string | number | undefined;
465
- } | undefined) => Promise<ethers.ContractTransaction>;
466
- transferSubname: (name: string, contract: "nameWrapper" | "registry", address: string, options?: {
467
- addressOrIndex?: string | number | undefined;
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/cjs/index.js CHANGED
@@ -95,9 +95,24 @@ class ENS {
95
95
  // otherwise, create a function from the raw and decode functions
96
96
  if (subFunc !== 'combine') {
97
97
  // get the function to call
98
- const func = subFunc ? mod[exportName][subFunc] : mod[exportName];
98
+ const func = subFunc && subFunc !== 'write'
99
+ ? mod[exportName][subFunc]
100
+ : mod[exportName];
99
101
  // get the dependencies to forward to the function as the first arg
100
- const dependenciesToForward = thisRef.forwardDependenciesFromArray(dependencies);
102
+ let dependenciesToForward = thisRef.forwardDependenciesFromArray(dependencies);
103
+ // if func is write func, inject signer into dependencies
104
+ if (subFunc === 'write') {
105
+ const options = (args[1] || {});
106
+ const signer = options.signer ||
107
+ thisRef.provider?.getSigner(options.addressOrIndex);
108
+ if (!signer) {
109
+ throw new Error('No signer specified');
110
+ }
111
+ delete options.addressOrIndex;
112
+ delete options.signer;
113
+ dependenciesToForward = { ...dependenciesToForward, signer };
114
+ return func(dependenciesToForward, args[0], options);
115
+ }
101
116
  // return the function with the dependencies forwarded
102
117
  return func(dependenciesToForward, ...args);
103
118
  }
@@ -124,6 +139,14 @@ class ENS {
124
139
  * @returns {OmitFirstArg} - The generated wrapped function
125
140
  */
126
141
  generateFunction = (path, dependencies, exportName = 'default') => this.importGenerator(path, dependencies, exportName);
142
+ /**
143
+ * Generates a write wrapped function
144
+ * @param {string} path - The path of the exported function
145
+ * @param {FunctionDeps} dependencies - An array of ENS properties
146
+ * @param {string} exportName - The export name of the target function
147
+ * @returns {OmitFirstArg} - The generated wrapped function
148
+ */
149
+ generateWriteFunction = (path, dependencies, exportName = 'default') => this.importGenerator(path, dependencies, exportName, 'write');
127
150
  /**
128
151
  * Generates a wrapped function from raw and decode exports
129
152
  * @param {string} path - The path of the exported function
@@ -194,31 +217,22 @@ class ENS {
194
217
  universalWrapper = this.generateRawFunction('initialGetters', ['contracts'], 'universalWrapper');
195
218
  resolverMulticallWrapper = this.generateRawFunction('initialGetters', ['contracts'], 'resolverMulticallWrapper');
196
219
  multicallWrapper = this.generateRawFunction('initialGetters', ['contracts'], 'multicallWrapper');
197
- setName = this.generateFunction('setName', [
198
- 'contracts',
199
- 'provider',
200
- ]);
201
- setRecords = this.generateFunction('setRecords', [
202
- 'contracts',
203
- 'provider',
204
- 'getResolver',
205
- ]);
206
- setResolver = this.generateFunction('setResolver', ['contracts', 'provider']);
207
- transferName = this.generateFunction('transferName', ['contracts', 'provider']);
208
- wrapName = this.generateFunction('wrapName', [
220
+ setName = this.generateWriteFunction('setName', [
209
221
  'contracts',
210
- 'provider',
211
222
  ]);
212
- unwrapName = this.generateFunction('unwrapName', [
223
+ setRecords = this.generateWriteFunction('setRecords', ['contracts', 'provider', 'getResolver']);
224
+ setResolver = this.generateWriteFunction('setResolver', ['contracts']);
225
+ transferName = this.generateWriteFunction('transferName', ['contracts']);
226
+ wrapName = this.generateWriteFunction('wrapName', [
213
227
  'contracts',
214
- 'provider',
215
228
  ]);
216
- burnFuses = this.generateFunction('burnFuses', [
229
+ unwrapName = this.generateWriteFunction('unwrapName', ['contracts']);
230
+ burnFuses = this.generateWriteFunction('burnFuses', [
217
231
  'contracts',
218
- 'provider',
219
232
  ]);
220
- createSubname = this.generateFunction('createSubname', ['contracts', 'provider']);
221
- deleteSubname = this.generateFunction('deleteSubname', ['contracts', 'provider', 'transferSubname']);
222
- transferSubname = this.generateFunction('transferSubname', ['contracts', 'provider']);
233
+ createSubname = this.generateWriteFunction('createSubname', ['contracts']);
234
+ deleteSubname = this.generateWriteFunction('deleteSubname', ['transferSubname']);
235
+ transferSubname = this.generateWriteFunction('transferSubname', ['contracts']);
236
+ getDNSOwner = this.generateFunction('getDNSOwner', []);
223
237
  }
224
238
  exports.ENS = ENS;