@ensdomains/ensjs 3.0.0-alpha.40 → 3.0.0-alpha.42

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 (129) hide show
  1. package/dist/cjs/contracts/getContractAddress.js +4 -4
  2. package/dist/cjs/functions/commitName.js +2 -3
  3. package/dist/cjs/functions/createSubname.js +2 -8
  4. package/dist/cjs/functions/getHistory.js +14 -7
  5. package/dist/cjs/functions/getNames.js +10 -6
  6. package/dist/cjs/functions/getOwner.js +25 -12
  7. package/dist/cjs/functions/getSpecificRecord.js +83 -0
  8. package/dist/cjs/functions/getWrapperData.js +3 -4
  9. package/dist/cjs/functions/renewNames.js +13 -20
  10. package/dist/cjs/functions/{burnFuses.js → setFuses.js} +24 -6
  11. package/dist/cjs/functions/wrapName.js +7 -23
  12. package/dist/cjs/generated/factories/ETHRegistrarController__factory.js +6 -55
  13. package/dist/cjs/generated/factories/NameWrapper__factory.js +90 -69
  14. package/dist/cjs/generated/factories/PublicResolver__factory.js +83 -0
  15. package/dist/cjs/generated/factories/UniversalResolver__factory.js +67 -2
  16. package/dist/cjs/index.js +15 -4
  17. package/dist/cjs/utils/consts.js +3 -1
  18. package/dist/cjs/utils/fuses.js +218 -53
  19. package/dist/cjs/utils/normalise.js +2 -2
  20. package/dist/cjs/utils/recordHelpers.js +55 -0
  21. package/dist/cjs/utils/registerHelpers.js +9 -23
  22. package/dist/cjs/utils/subgraph-types.js +16 -0
  23. package/dist/cjs/utils/wrapper.js +2 -2
  24. package/dist/esm/contracts/getContractAddress.mjs +4 -4
  25. package/dist/esm/functions/commitName.mjs +2 -3
  26. package/dist/esm/functions/createSubname.mjs +2 -2
  27. package/dist/esm/functions/getHistory.mjs +14 -7
  28. package/dist/esm/functions/getNames.mjs +10 -6
  29. package/dist/esm/functions/getOwner.mjs +25 -12
  30. package/dist/esm/functions/getSpecificRecord.mjs +78 -1
  31. package/dist/esm/functions/getWrapperData.mjs +3 -4
  32. package/dist/esm/functions/renewNames.mjs +13 -20
  33. package/dist/esm/functions/setFuses.mjs +30 -0
  34. package/dist/esm/functions/wrapName.mjs +8 -18
  35. package/dist/esm/generated/factories/ETHRegistrarController__factory.mjs +6 -55
  36. package/dist/esm/generated/factories/NameWrapper__factory.mjs +90 -69
  37. package/dist/esm/generated/factories/PublicResolver__factory.mjs +83 -0
  38. package/dist/esm/generated/factories/UniversalResolver__factory.mjs +67 -2
  39. package/dist/esm/index.mjs +15 -4
  40. package/dist/esm/utils/consts.mjs +3 -1
  41. package/dist/esm/utils/fuses.mjs +218 -53
  42. package/dist/esm/utils/normalise.mjs +1 -1
  43. package/dist/esm/utils/recordHelpers.mjs +49 -0
  44. package/dist/esm/utils/registerHelpers.mjs +9 -17
  45. package/dist/esm/utils/subgraph-types.mjs +0 -0
  46. package/dist/esm/utils/wrapper.mjs +1 -1
  47. package/dist/types/functions/commitName.d.ts +5 -6
  48. package/dist/types/functions/createSubname.d.ts +3 -3
  49. package/dist/types/functions/deleteSubname.d.ts +1 -1
  50. package/dist/types/functions/getHistory.d.ts +1 -1
  51. package/dist/types/functions/getNames.d.ts +3 -3
  52. package/dist/types/functions/getOwner.d.ts +1 -0
  53. package/dist/types/functions/getSpecificRecord.d.ts +22 -0
  54. package/dist/types/functions/getWrapperData.d.ts +44 -5
  55. package/dist/types/functions/importDNSSECName.d.ts +1 -1
  56. package/dist/types/functions/registerName.d.ts +1 -1
  57. package/dist/types/functions/renewNames.d.ts +5 -6
  58. package/dist/types/functions/setFuses.d.ts +7 -0
  59. package/dist/types/functions/setName.d.ts +1 -1
  60. package/dist/types/functions/setRecord.d.ts +5 -1
  61. package/dist/types/functions/setRecords.d.ts +1 -1
  62. package/dist/types/functions/setResolver.d.ts +1 -1
  63. package/dist/types/functions/transferController.d.ts +1 -1
  64. package/dist/types/functions/transferName.d.ts +1 -1
  65. package/dist/types/functions/transferSubname.d.ts +1 -1
  66. package/dist/types/functions/types.d.ts +9 -5
  67. package/dist/types/functions/unwrapName.d.ts +1 -1
  68. package/dist/types/functions/wrapName.d.ts +4 -4
  69. package/dist/types/generated/ETHRegistrarController.d.ts +13 -36
  70. package/dist/types/generated/NameWrapper.d.ts +97 -52
  71. package/dist/types/generated/PublicResolver.d.ts +50 -1
  72. package/dist/types/generated/UniversalResolver.d.ts +79 -32
  73. package/dist/types/generated/factories/UniversalResolver__factory.d.ts +15 -0
  74. package/dist/types/index.d.ts +75 -11
  75. package/dist/types/utils/consts.d.ts +1 -0
  76. package/dist/types/utils/fuses.d.ts +115 -45
  77. package/dist/types/utils/recordHelpers.d.ts +14 -2
  78. package/dist/types/utils/registerHelpers.d.ts +7 -25
  79. package/dist/types/utils/subgraph-types.d.ts +284 -0
  80. package/dist/types/utils/writeTx.d.ts +5 -5
  81. package/package.json +8 -5
  82. package/src/@types/pako.d.ts +188 -0
  83. package/src/contracts/bulkRenewal.ts +1 -1
  84. package/src/contracts/getContractAddress.ts +4 -4
  85. package/src/functions/commitName.test.ts +0 -3
  86. package/src/functions/commitName.ts +1 -2
  87. package/src/functions/createSubname.ts +4 -5
  88. package/src/functions/getHistory.ts +59 -25
  89. package/src/functions/getNames.test.ts +1 -1
  90. package/src/functions/getNames.ts +26 -13
  91. package/src/functions/getOwner.test.ts +62 -3
  92. package/src/functions/getOwner.ts +31 -11
  93. package/src/functions/getSpecificRecord.test.ts +162 -0
  94. package/src/functions/getSpecificRecord.ts +95 -1
  95. package/src/functions/getWrapperData.test.ts +11 -45
  96. package/src/functions/getWrapperData.ts +7 -5
  97. package/src/functions/registerName.test.ts +3 -3
  98. package/src/functions/renewNames.ts +17 -23
  99. package/src/functions/setFuses.test.ts +240 -0
  100. package/src/functions/setFuses.ts +44 -0
  101. package/src/functions/setRecord.test.ts +147 -1
  102. package/src/functions/setRecord.ts +6 -1
  103. package/src/functions/types.ts +10 -4
  104. package/src/functions/wrapName.test.ts +8 -7
  105. package/src/functions/wrapName.ts +10 -24
  106. package/src/generated/ETHRegistrarController.ts +12 -79
  107. package/src/generated/NameWrapper.ts +155 -99
  108. package/src/generated/PublicResolver.ts +123 -0
  109. package/src/generated/UniversalResolver.ts +157 -16
  110. package/src/generated/factories/ETHRegistrarController__factory.ts +6 -55
  111. package/src/generated/factories/NameWrapper__factory.ts +90 -69
  112. package/src/generated/factories/PublicResolver__factory.ts +83 -0
  113. package/src/generated/factories/UniversalResolver__factory.ts +67 -2
  114. package/src/index.ts +23 -14
  115. package/src/utils/consts.ts +1 -0
  116. package/src/utils/fuses.ts +299 -102
  117. package/src/utils/normalise.ts +1 -1
  118. package/src/utils/recordHelpers.ts +64 -1
  119. package/src/utils/registerHelpers.ts +13 -41
  120. package/src/utils/subgraph-types.ts +312 -0
  121. package/src/utils/wrapper.ts +1 -1
  122. package/dist/cjs/utils/generateFuseInput.js +0 -40
  123. package/dist/esm/functions/burnFuses.mjs +0 -12
  124. package/dist/esm/utils/generateFuseInput.mjs +0 -15
  125. package/dist/types/functions/burnFuses.d.ts +0 -3
  126. package/dist/types/utils/generateFuseInput.d.ts +0 -3
  127. package/src/functions/burnFuses.test.ts +0 -148
  128. package/src/functions/burnFuses.ts +0 -16
  129. package/src/utils/generateFuseInput.ts +0 -13
@@ -1,23 +1,43 @@
1
1
  // src/utils/fuses.ts
2
- import { BigNumber } from "@ethersproject/bignumber/lib.esm/bignumber.js";
3
2
  var CANNOT_UNWRAP = 1;
4
3
  var CANNOT_BURN_FUSES = 2;
5
4
  var CANNOT_TRANSFER = 4;
6
5
  var CANNOT_SET_RESOLVER = 8;
7
6
  var CANNOT_SET_TTL = 16;
8
7
  var CANNOT_CREATE_SUBDOMAIN = 32;
9
- var PARENT_CANNOT_CONTROL = 64;
8
+ var PARENT_CANNOT_CONTROL = 65536;
9
+ var IS_DOT_ETH = 131072;
10
+ var CAN_EXTEND_EXPIRY = 262144;
11
+ var CHILD_CONTROLLED_FUSES = 65535;
12
+ var PARENT_CONTROLLED_FUSES = 4294901760;
13
+ var USER_SETTABLE_FUSES = 4294836223;
10
14
  var CAN_DO_EVERYTHING = 0;
11
- var fuseEnum = {
15
+ var childFuseEnum = {
12
16
  CANNOT_UNWRAP,
13
17
  CANNOT_BURN_FUSES,
14
18
  CANNOT_TRANSFER,
15
19
  CANNOT_SET_RESOLVER,
16
20
  CANNOT_SET_TTL,
17
- CANNOT_CREATE_SUBDOMAIN,
18
- PARENT_CANNOT_CONTROL
21
+ CANNOT_CREATE_SUBDOMAIN
19
22
  };
20
- var unnamedFuses = [
23
+ var parentFuseEnum = {
24
+ PARENT_CANNOT_CONTROL,
25
+ CAN_EXTEND_EXPIRY
26
+ };
27
+ var fullParentFuseEnum = {
28
+ ...parentFuseEnum,
29
+ IS_DOT_ETH
30
+ };
31
+ var userSettableFuseEnum = {
32
+ ...childFuseEnum,
33
+ ...parentFuseEnum
34
+ };
35
+ var fullFuseEnum = {
36
+ ...userSettableFuseEnum,
37
+ CAN_DO_EVERYTHING
38
+ };
39
+ var unnamedChildFuses = [
40
+ 64,
21
41
  128,
22
42
  256,
23
43
  512,
@@ -26,10 +46,9 @@ var unnamedFuses = [
26
46
  4096,
27
47
  8192,
28
48
  16384,
29
- 32768,
30
- 65536,
31
- 131072,
32
- 262144,
49
+ 32768
50
+ ];
51
+ var unnamedParentFuses = [
33
52
  524288,
34
53
  1048576,
35
54
  2097152,
@@ -42,74 +61,220 @@ var unnamedFuses = [
42
61
  268435456,
43
62
  536870912,
44
63
  1073741824,
45
- 2147483648,
46
- 4294967296
64
+ 2147483648
47
65
  ];
48
- var fullFuseEnum = {
49
- ...fuseEnum,
50
- CAN_DO_EVERYTHING
66
+ var unnamedUserSettableFuses = [
67
+ ...unnamedChildFuses,
68
+ ...unnamedParentFuses
69
+ ];
70
+ var childFuseKeys = Object.keys(
71
+ childFuseEnum
72
+ );
73
+ var parentFuseKeys = Object.keys(
74
+ parentFuseEnum
75
+ );
76
+ var fullParentFuseKeys = Object.keys(
77
+ fullParentFuseEnum
78
+ );
79
+ var userSettableFuseKeys = Object.keys(
80
+ userSettableFuseEnum
81
+ );
82
+ var checkNumber = (fuses) => {
83
+ if (fuses > 2 ** 32 || fuses < 1) {
84
+ throw new Error(
85
+ `Fuse number must be limited to uint32, ${fuses} was too ${fuses < 1 ? "low" : "high"}.`
86
+ );
87
+ } else if (fuses % 1 !== 0) {
88
+ throw new Error(`Fuse number must be an integer, ${fuses} was not.`);
89
+ } else if ((fuses & USER_SETTABLE_FUSES) !== fuses) {
90
+ throw new Error(
91
+ `Fuse number must be limited to user settable fuses, ${fuses} was not.`
92
+ );
93
+ }
51
94
  };
52
- var validateFuses = (fuses) => {
53
- const isNumber = "fuseNumberToBurn" in fuses;
54
- const hasNamedArray = "namedFusesToBurn" in fuses;
55
- const hasUnnamedArray = "unnamedFusesToBurn" in fuses;
95
+ var testFuses = (fuses) => {
96
+ if ("named" in fuses && fuses.named.length > 0) {
97
+ return true;
98
+ }
99
+ if ("unnamed" in fuses && fuses.unnamed.length > 0) {
100
+ return true;
101
+ }
102
+ if ("number" in fuses && fuses.number !== 0) {
103
+ return true;
104
+ }
105
+ return false;
106
+ };
107
+ var hasFuses = (fuses) => {
108
+ if (typeof fuses === "number") {
109
+ return fuses !== 0;
110
+ }
111
+ if (typeof fuses === "object") {
112
+ if ("child" in fuses && testFuses(fuses.child)) {
113
+ return true;
114
+ }
115
+ if ("parent" in fuses && testFuses(fuses.parent)) {
116
+ return true;
117
+ }
118
+ if (testFuses(fuses)) {
119
+ return true;
120
+ }
121
+ }
122
+ return false;
123
+ };
124
+ function encodeFuses(fuses, restrictTo) {
56
125
  let encodedFuses = 0;
57
- if (isNumber) {
58
- if (fuses.fuseNumberToBurn > 2 ** 32 || fuses.fuseNumberToBurn < 1) {
59
- throw new Error(
60
- `Fuse number must be limited to uint32, ${fuses.fuseNumberToBurn} was too ${fuses.fuseNumberToBurn < 1 ? "low" : "high"}.`
61
- );
62
- } else if (fuses.fuseNumberToBurn % 1 !== 0) {
63
- throw new Error(
64
- `Fuse number must be an integer, ${fuses.fuseNumberToBurn} was not.`
65
- );
126
+ if (typeof fuses === "number") {
127
+ if (restrictTo) {
128
+ throw new Error("Cannot specify an exact fuse value when restricted.");
66
129
  }
67
- encodedFuses = fuses.fuseNumberToBurn;
130
+ checkNumber(fuses);
131
+ encodedFuses = fuses;
68
132
  } else {
69
- if (!hasNamedArray && !hasUnnamedArray) {
70
- throw new Error("Please provide fuses to burn");
133
+ let fusesRef = fuses;
134
+ let allowedNamed = [];
135
+ let allowedUnnamed = [];
136
+ let namedArray = [];
137
+ let unnamedArray = [];
138
+ if (restrictTo) {
139
+ if ("parent" in fuses || "child" in fuses) {
140
+ throw new Error("Can't specify fuse category when restricted.");
141
+ }
142
+ allowedNamed = restrictTo === "child" ? childFuseKeys : parentFuseKeys;
143
+ allowedUnnamed = restrictTo === "child" ? unnamedChildFuses : unnamedParentFuses;
144
+ fusesRef = { [restrictTo]: fuses };
145
+ } else {
146
+ allowedNamed = userSettableFuseKeys;
147
+ allowedUnnamed = unnamedUserSettableFuses;
148
+ }
149
+ if ("parent" in fusesRef) {
150
+ if ("named" in fusesRef.parent)
151
+ namedArray = fusesRef.parent.named;
152
+ if ("unnamed" in fusesRef.parent)
153
+ unnamedArray = fusesRef.parent.unnamed;
154
+ if ("number" in fusesRef.parent) {
155
+ if ("named" in fusesRef.parent || "unnamed" in fusesRef.parent) {
156
+ throw new Error(
157
+ "Cannot specify both a fuse number and named/unnamed fuses."
158
+ );
159
+ }
160
+ checkNumber(fusesRef.parent.number);
161
+ if ((fusesRef.parent.number & PARENT_CONTROLLED_FUSES) !== fusesRef.parent.number) {
162
+ throw new Error(
163
+ "Cannot specify a fuse value to set that is outside of the parent's control."
164
+ );
165
+ }
166
+ encodedFuses |= fusesRef.parent.number;
167
+ }
168
+ }
169
+ if ("child" in fusesRef) {
170
+ if ("named" in fusesRef.child)
171
+ namedArray = [...namedArray, ...fusesRef.child.named];
172
+ if ("unnamed" in fusesRef.child)
173
+ unnamedArray = [...unnamedArray, ...fusesRef.child.unnamed];
174
+ if ("number" in fusesRef.child) {
175
+ if ("named" in fusesRef.child || "unnamed" in fusesRef.child) {
176
+ throw new Error(
177
+ "Cannot specify both a fuse number and named/unnamed fuses."
178
+ );
179
+ }
180
+ checkNumber(fusesRef.child.number);
181
+ if ((fusesRef.child.number & CHILD_CONTROLLED_FUSES) !== fusesRef.child.number) {
182
+ throw new Error(
183
+ "Cannot specify a fuse value to set that is outside of the owner's control."
184
+ );
185
+ }
186
+ encodedFuses |= fusesRef.child.number;
187
+ }
71
188
  }
72
- if (hasNamedArray) {
73
- for (const fuse of fuses.namedFusesToBurn) {
74
- if (!(fuse in fuseEnum)) {
189
+ if (!namedArray.length && !unnamedArray.length && !encodedFuses) {
190
+ throw new Error("Must specify at least one fuse.");
191
+ }
192
+ for (const fuse of namedArray) {
193
+ if (!allowedNamed.includes(fuse)) {
194
+ if (!userSettableFuseKeys.includes(fuse)) {
75
195
  throw new Error(`${fuse} is not a valid named fuse.`);
76
196
  }
77
- encodedFuses |= fuseEnum[fuse];
197
+ throw new Error(`Fuse ${fuse} is not allowed for this operation.`);
78
198
  }
199
+ encodedFuses |= userSettableFuseEnum[fuse];
79
200
  }
80
- if (hasUnnamedArray) {
81
- for (const fuse of fuses.unnamedFusesToBurn) {
82
- if (!unnamedFuses.includes(fuse)) {
201
+ for (const fuse of unnamedArray) {
202
+ if (!allowedUnnamed.includes(fuse)) {
203
+ if (!unnamedUserSettableFuses.includes(fuse)) {
83
204
  throw new Error(
84
- `${fuse} is not a valid unnamed fuse. If you are trying to burn a named fuse, use the namedFusesToBurn property.`
205
+ `${fuse} is not a valid unnamed fuse. If you are trying to set a named fuse, use the named property.`
85
206
  );
86
207
  }
87
- encodedFuses |= fuse;
208
+ throw new Error(`Fuse ${fuse} is not allowed for this operation.`);
88
209
  }
210
+ encodedFuses |= fuse;
89
211
  }
90
212
  }
91
213
  return encodedFuses;
92
- };
93
- var decodeFuses = (fuses) => {
94
- const bnFuses = BigNumber.from(fuses);
214
+ }
215
+ var decodeNamedFuses = (fuses, arr) => {
95
216
  const fuseObj = Object.fromEntries(
96
- Object.keys(fuseEnum).map((fuse) => [
217
+ arr.map((fuse) => [
97
218
  fuse,
98
- bnFuses.and(fuseEnum[fuse]).gt(0)
219
+ (fuses & userSettableFuseEnum[fuse]) > 0
99
220
  ])
100
221
  );
101
- if (bnFuses.eq(0)) {
102
- fuseObj.CAN_DO_EVERYTHING = true;
103
- } else {
104
- fuseObj.CAN_DO_EVERYTHING = false;
105
- }
106
222
  return fuseObj;
107
223
  };
224
+ var decodeUnnamedFuses = (fuses, arr) => {
225
+ const fuseObj = Object.fromEntries(
226
+ arr.map((fuse) => [fuse, (fuses & fuse) > 0])
227
+ );
228
+ return fuseObj;
229
+ };
230
+ var decodeFuses = (fuses) => {
231
+ const parentNamedFuses = decodeNamedFuses(
232
+ fuses,
233
+ fullParentFuseKeys
234
+ );
235
+ const parentUnnamedFuses = decodeUnnamedFuses(
236
+ fuses,
237
+ unnamedParentFuses
238
+ );
239
+ const childNamedFuses = decodeNamedFuses(
240
+ fuses,
241
+ childFuseKeys
242
+ );
243
+ const childUnnamedFuses = decodeUnnamedFuses(
244
+ fuses,
245
+ unnamedChildFuses
246
+ );
247
+ return {
248
+ parent: {
249
+ ...parentNamedFuses,
250
+ unnamed: parentUnnamedFuses
251
+ },
252
+ child: {
253
+ ...childNamedFuses,
254
+ CAN_DO_EVERYTHING: (fuses & CHILD_CONTROLLED_FUSES) === 0,
255
+ unnamed: childUnnamedFuses
256
+ }
257
+ };
258
+ };
108
259
  var fuses_default = fullFuseEnum;
109
260
  export {
261
+ CHILD_CONTROLLED_FUSES,
262
+ PARENT_CONTROLLED_FUSES,
263
+ USER_SETTABLE_FUSES,
264
+ childFuseEnum,
265
+ childFuseKeys,
110
266
  decodeFuses,
111
267
  fuses_default as default,
112
- fuseEnum,
113
- unnamedFuses,
114
- validateFuses
268
+ encodeFuses,
269
+ fullFuseEnum,
270
+ fullParentFuseEnum,
271
+ fullParentFuseKeys,
272
+ hasFuses,
273
+ parentFuseEnum,
274
+ parentFuseKeys,
275
+ unnamedChildFuses,
276
+ unnamedParentFuses,
277
+ unnamedUserSettableFuses,
278
+ userSettableFuseEnum,
279
+ userSettableFuseKeys
115
280
  };
@@ -1,7 +1,7 @@
1
1
  // src/utils/normalise.ts
2
2
  import { concat, hexlify } from "@ethersproject/bytes";
3
3
  import { keccak256 } from "@ethersproject/keccak256";
4
- import { toUtf8Bytes } from "@ethersproject/strings/lib.esm/utf8.js";
4
+ import { toUtf8Bytes } from "@ethersproject/strings";
5
5
  import uts46 from "idna-uts46-hx/uts46bundle.js";
6
6
  import { decodeLabelhash, isEncodedLabelhash } from "./labels.mjs";
7
7
  var zeros = new Uint8Array(32);
@@ -1,5 +1,7 @@
1
1
  // src/utils/recordHelpers.ts
2
2
  import { formatsByCoinType, formatsByName } from "@ensdomains/address-encoder";
3
+ import { isBytesLike } from "@ethersproject/bytes";
4
+ import { toUtf8Bytes } from "@ethersproject/strings";
3
5
  import { encodeContenthash } from "./contentHash.mjs";
4
6
  var generateSetAddr = (namehash, coinType, address, resolver) => {
5
7
  let coinTypeInstance;
@@ -15,6 +17,34 @@ var generateSetAddr = (namehash, coinType, address, resolver) => {
15
17
  [namehash, inputCoinType, encodedAddress]
16
18
  );
17
19
  };
20
+ var generateABIInput = async (encodeAs, data) => {
21
+ let contentType;
22
+ let encodedData;
23
+ switch (encodeAs) {
24
+ case "json":
25
+ contentType = 1;
26
+ encodedData = JSON.stringify(data);
27
+ break;
28
+ case "zlib": {
29
+ contentType = 2;
30
+ const { deflate } = await import("pako/dist/pako_deflate.min.js");
31
+ encodedData = deflate(JSON.stringify(data));
32
+ break;
33
+ }
34
+ case "cbor": {
35
+ contentType = 4;
36
+ const { encode } = await import("cbor");
37
+ encodedData = encode(data);
38
+ break;
39
+ }
40
+ default: {
41
+ contentType = 8;
42
+ encodedData = data;
43
+ break;
44
+ }
45
+ }
46
+ return { contentType, data: encodedData };
47
+ };
18
48
  function generateSingleRecordCall(namehash, resolver, type) {
19
49
  if (type === "contentHash") {
20
50
  return (_r) => {
@@ -32,6 +62,24 @@ function generateSingleRecordCall(namehash, resolver, type) {
32
62
  ]);
33
63
  };
34
64
  }
65
+ if (type === "abi") {
66
+ return (_r) => {
67
+ const record = _r;
68
+ const { contentType = 1, data } = record;
69
+ let encodedData = data;
70
+ if (!isBytesLike(encodedData)) {
71
+ if (typeof encodedData === "object") {
72
+ encodedData = JSON.stringify(encodedData);
73
+ }
74
+ encodedData = toUtf8Bytes(encodedData);
75
+ }
76
+ return resolver.interface.encodeFunctionData("setABI", [
77
+ namehash,
78
+ contentType,
79
+ encodedData
80
+ ]);
81
+ };
82
+ }
35
83
  return (_r) => {
36
84
  const record = _r;
37
85
  if (type === "text") {
@@ -69,6 +117,7 @@ var generateRecordCallArray = (namehash, records, resolver) => {
69
117
  return calls;
70
118
  };
71
119
  export {
120
+ generateABIInput,
72
121
  generateRecordCallArray,
73
122
  generateSetAddr,
74
123
  generateSingleRecordCall
@@ -1,11 +1,10 @@
1
1
  // src/utils/registerHelpers.ts
2
2
  import { defaultAbiCoder } from "@ethersproject/abi/lib.esm/abi-coder.js";
3
3
  import { keccak256 } from "@ethersproject/keccak256";
4
- import generateFuseInput from "./generateFuseInput.mjs";
4
+ import { encodeFuses, hasFuses } from "./fuses.mjs";
5
5
  import { labelhash } from "./labels.mjs";
6
6
  import { namehash } from "./normalise.mjs";
7
7
  import { generateRecordCallArray } from "./recordHelpers.mjs";
8
- var MAX_INT_64 = 2n ** 64n - 1n;
9
8
  var randomSecret = () => {
10
9
  const bytes = Buffer.allocUnsafe(32);
11
10
  return `0x${crypto.getRandomValues(bytes).toString("hex")}`;
@@ -18,13 +17,12 @@ var makeCommitmentData = ({
18
17
  records,
19
18
  reverseRecord,
20
19
  fuses,
21
- wrapperExpiry,
22
20
  secret
23
21
  }) => {
24
- const label = labelhash(name.split(".")[0]);
22
+ const labelHash = labelhash(name.split(".")[0]);
25
23
  const hash = namehash(name);
26
24
  const resolverAddress = resolver.address;
27
- const fuseData = fuses ? generateFuseInput(fuses) : "0";
25
+ const fuseData = hasFuses(fuses) ? encodeFuses(fuses, "child") : 0;
28
26
  if (reverseRecord) {
29
27
  if (!records) {
30
28
  records = { coinTypes: [{ key: "ETH", value: owner }] };
@@ -36,23 +34,20 @@ var makeCommitmentData = ({
36
34
  }
37
35
  const data = records ? generateRecordCallArray(hash, records, resolver) : [];
38
36
  return [
39
- label,
37
+ labelHash,
40
38
  owner,
41
39
  duration,
40
+ secret,
42
41
  resolverAddress,
43
42
  data,
44
- secret,
45
43
  !!reverseRecord,
46
- fuseData,
47
- wrapperExpiry || MAX_INT_64
44
+ fuseData
48
45
  ];
49
46
  };
50
47
  var makeRegistrationData = (params) => {
51
48
  const commitmentData = makeCommitmentData(params);
52
49
  const label = params.name.split(".")[0];
53
50
  commitmentData[0] = label;
54
- const secret = commitmentData.splice(5, 1)[0];
55
- commitmentData.splice(3, 0, secret);
56
51
  return commitmentData;
57
52
  };
58
53
  var _makeCommitment = (params) => {
@@ -62,12 +57,11 @@ var _makeCommitment = (params) => {
62
57
  "bytes32",
63
58
  "address",
64
59
  "uint256",
60
+ "bytes32",
65
61
  "address",
66
62
  "bytes[]",
67
- "bytes32",
68
63
  "bool",
69
- "uint32",
70
- "uint64"
64
+ "uint16"
71
65
  ],
72
66
  params
73
67
  )
@@ -84,12 +78,10 @@ var makeCommitment = ({
84
78
  const commitment = _makeCommitment(generatedParams);
85
79
  return {
86
80
  secret,
87
- commitment,
88
- wrapperExpiry: generatedParams[8]
81
+ commitment
89
82
  };
90
83
  };
91
84
  export {
92
- MAX_INT_64,
93
85
  _makeCommitment,
94
86
  makeCommitment,
95
87
  makeCommitmentData,
File without changes
@@ -1,6 +1,6 @@
1
1
  // src/utils/wrapper.ts
2
2
  import { BigNumber } from "@ethersproject/bignumber/lib.esm/bignumber.js";
3
- import { toUtf8Bytes } from "@ethersproject/strings/lib.esm/utf8.js";
3
+ import { toUtf8Bytes } from "@ethersproject/strings";
4
4
  var MAX_EXPIRY = BigNumber.from(2).pow(64).sub(1);
5
5
  var makeExpiry = async ({ getExpiry }, name, expiry) => {
6
6
  if (expiry) {
@@ -7,20 +7,19 @@ export default function ({ contracts }: ENSArgs<'contracts'>, name: string, { re
7
7
  customData: {
8
8
  secret: string;
9
9
  commitment: string;
10
- wrapperExpiry: import("@ethersproject/bignumber").BigNumberish;
11
10
  };
12
11
  to?: string | undefined;
13
12
  from?: string | undefined;
14
13
  nonce?: number | undefined;
15
- gasLimit?: import("@ethersproject/bignumber").BigNumber | undefined;
16
- gasPrice?: import("@ethersproject/bignumber").BigNumber | undefined;
14
+ gasLimit?: import("ethers").BigNumber | undefined;
15
+ gasPrice?: import("ethers").BigNumber | undefined;
17
16
  data?: string | undefined;
18
- value?: import("@ethersproject/bignumber").BigNumber | undefined;
17
+ value?: import("ethers").BigNumber | undefined;
19
18
  chainId?: number | undefined;
20
19
  type?: number | undefined;
21
20
  accessList?: import("@ethersproject/transactions").AccessList | undefined;
22
- maxFeePerGas?: import("@ethersproject/bignumber").BigNumber | undefined;
23
- maxPriorityFeePerGas?: import("@ethersproject/bignumber").BigNumber | undefined;
21
+ maxFeePerGas?: import("ethers").BigNumber | undefined;
22
+ maxPriorityFeePerGas?: import("ethers").BigNumber | undefined;
24
23
  ccipReadEnabled?: boolean | undefined;
25
24
  }>;
26
25
  export {};
@@ -1,5 +1,5 @@
1
1
  import { ENSArgs } from '..';
2
- import { FuseOptions } from '../utils/fuses';
2
+ import { CombinedFuseInput } from '../utils/fuses';
3
3
  import { Expiry } from '../utils/wrapper';
4
4
  declare type BaseArgs = {
5
5
  owner: string;
@@ -8,9 +8,9 @@ declare type BaseArgs = {
8
8
  };
9
9
  declare type NameWrapperArgs = {
10
10
  contract: 'nameWrapper';
11
- fuses?: FuseOptions;
11
+ fuses?: CombinedFuseInput;
12
12
  expiry?: Expiry;
13
13
  } & BaseArgs;
14
14
  declare type Args = BaseArgs | NameWrapperArgs;
15
- export default function ({ contracts, signer, getExpiry, }: ENSArgs<'contracts' | 'signer' | 'getExpiry'>, name: string, { owner, resolverAddress, contract, ...wrapperArgs }: Args): Promise<import("@ethersproject/contracts").PopulatedTransaction>;
15
+ export default function ({ contracts, signer, getExpiry, }: ENSArgs<'contracts' | 'signer' | 'getExpiry'>, name: string, { owner, resolverAddress, contract, ...wrapperArgs }: Args): Promise<import("ethers").PopulatedTransaction>;
16
16
  export {};
@@ -2,5 +2,5 @@ import { ENSArgs } from '..';
2
2
  declare type Args = {
3
3
  contract: 'registry' | 'nameWrapper';
4
4
  };
5
- export default function ({ contracts, signer }: ENSArgs<'contracts' | 'signer' | 'getExpiry'>, name: string, { contract }: Args): Promise<import("@ethersproject/contracts").PopulatedTransaction>;
5
+ export default function ({ contracts, signer }: ENSArgs<'contracts' | 'signer' | 'getExpiry'>, name: string, { contract }: Args): Promise<import("ethers").PopulatedTransaction>;
6
6
  export {};
@@ -1,5 +1,5 @@
1
1
  import { ENSArgs } from '..';
2
- declare type DomainEvent = 'NewOwner' | 'NewResolver' | 'Transfer' | 'NewTTL' | 'WrappedTransfer' | 'NameWrapped' | 'NameUnwrapped' | 'FusesSet';
2
+ declare type DomainEvent = 'NewOwner' | 'NewResolver' | 'Transfer' | 'NewTTL' | 'WrappedTransfer' | 'NameWrapped' | 'NameUnwrapped' | 'FusesSet' | 'ExpiryExtended';
3
3
  declare type RegistrationEvent = 'NameRegistered' | 'NameRenewed' | 'NameTransferred';
4
4
  declare type ResolverEvent = 'AddrChanged' | 'MulticoinAddrChanged' | 'NameChanged' | 'AbiChanged' | 'PubkeyChanged' | 'TextChanged' | 'ContenthashChanged' | 'InterfaceChanged' | 'AuthorisationChanged' | 'VersionChanged';
5
5
  export declare function getHistory({ gqlInstance }: ENSArgs<'gqlInstance'>, name: string): Promise<{
@@ -1,5 +1,5 @@
1
1
  import { ENSArgs } from '..';
2
- import { CurrentFuses } from '../utils/fuses';
2
+ import { AllCurrentFuses } from '../utils/fuses';
3
3
  export declare type Name = {
4
4
  id: string;
5
5
  labelName: string | null;
@@ -13,7 +13,7 @@ export declare type Name = {
13
13
  createdAt?: Date;
14
14
  registrationDate?: Date;
15
15
  expiryDate?: Date;
16
- fuses?: CurrentFuses;
16
+ fuses?: AllCurrentFuses;
17
17
  registration?: {
18
18
  expiryDate: Date;
19
19
  registrationDate: Date;
@@ -37,7 +37,7 @@ declare type OwnerParams = {
37
37
  };
38
38
  declare type WrappedOwnerParams = {
39
39
  type: 'wrappedOwner';
40
- orderBy?: 'expiryDate' | 'labelName';
40
+ orderBy?: 'expiryDate' | 'name';
41
41
  };
42
42
  declare type AllParams = {
43
43
  type: 'all';
@@ -3,6 +3,7 @@ declare type Owner = {
3
3
  registrant?: string;
4
4
  owner?: string;
5
5
  ownershipLevel: 'nameWrapper' | 'registry' | 'registrar';
6
+ expired?: boolean;
6
7
  };
7
8
  declare const _default: {
8
9
  raw: ({ contracts, multicallWrapper }: ENSArgs<"contracts" | "multicallWrapper">, name: string, contract?: "nameWrapper" | "registrar" | "registry" | undefined) => Promise<{
@@ -71,3 +71,25 @@ export declare const getAddr: {
71
71
  addr: string;
72
72
  } | undefined>;
73
73
  };
74
+ export declare const _getABI: {
75
+ raw: ({ contracts }: ENSArgs<'contracts'>, name: string) => Promise<{
76
+ to: string;
77
+ data: string;
78
+ }>;
79
+ decode: ({ contracts }: ENSArgs<'contracts'>, data: string) => Promise<{
80
+ contentType: number;
81
+ decoded: boolean;
82
+ abi: string | object;
83
+ } | undefined>;
84
+ };
85
+ export declare const getABI: {
86
+ raw: ({ contracts, universalWrapper }: ENSArgs<'contracts' | 'universalWrapper'>, name: string) => Promise<{
87
+ to: string;
88
+ data: string;
89
+ }>;
90
+ decode: ({ contracts, universalWrapper }: ENSArgs<'contracts' | 'universalWrapper'>, data: string) => Promise<{
91
+ contentType: number;
92
+ decoded: boolean;
93
+ abi: string | object;
94
+ } | undefined>;
95
+ };