@ensdomains/ensjs 3.0.0-alpha.10 → 3.0.0-alpha.11

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 (234) hide show
  1. package/dist/cjs/contracts/baseRegistrar.d.ts +1 -1
  2. package/dist/cjs/contracts/index.d.ts +3 -3
  3. package/dist/cjs/contracts/multicall.d.ts +1 -1
  4. package/dist/cjs/contracts/registry.d.ts +1 -1
  5. package/dist/cjs/functions/burnFuses.js +1 -1
  6. package/dist/cjs/functions/createSubname.d.ts +3 -1
  7. package/dist/cjs/functions/createSubname.js +4 -2
  8. package/dist/cjs/functions/deleteSubname.d.ts +1 -1
  9. package/dist/cjs/functions/deleteSubname.js +3 -2
  10. package/dist/cjs/functions/getExpiry.d.ts +9 -2
  11. package/dist/cjs/functions/getExpiry.js +52 -7
  12. package/dist/cjs/functions/getFuses.d.ts +2 -3
  13. package/dist/cjs/functions/getFuses.js +4 -13
  14. package/dist/cjs/functions/getSpecificRecord.js +8 -1
  15. package/dist/cjs/functions/getSubnames.d.ts +1 -1
  16. package/dist/cjs/functions/getSubnames.js +1 -1
  17. package/dist/cjs/functions/transferSubname.d.ts +12 -3
  18. package/dist/cjs/functions/transferSubname.js +5 -3
  19. package/dist/cjs/functions/wrapName.d.ts +3 -1
  20. package/dist/cjs/functions/wrapName.js +35 -29
  21. package/dist/cjs/generated/BaseRegistrarImplementation.d.ts +222 -201
  22. package/dist/cjs/generated/DNSRegistrar.d.ts +68 -64
  23. package/dist/cjs/generated/DNSSECImpl.d.ts +111 -111
  24. package/dist/cjs/generated/DefaultReverseResolver.d.ts +17 -17
  25. package/dist/cjs/generated/ENSRegistry.d.ts +126 -111
  26. package/dist/cjs/generated/ETHRegistrarController.d.ts +111 -109
  27. package/dist/cjs/generated/Multicall.d.ts +60 -60
  28. package/dist/cjs/generated/NameWrapper.d.ts +493 -354
  29. package/dist/cjs/generated/P256SHA256Algorithm.d.ts +11 -7
  30. package/dist/cjs/generated/PublicResolver.d.ts +259 -235
  31. package/dist/cjs/generated/RSASHA1Algorithm.d.ts +11 -7
  32. package/dist/cjs/generated/RSASHA256Algorithm.d.ts +11 -7
  33. package/dist/cjs/generated/ReverseRegistrar.d.ts +112 -103
  34. package/dist/cjs/generated/Root.d.ts +77 -77
  35. package/dist/cjs/generated/SHA1Digest.d.ts +7 -7
  36. package/dist/cjs/generated/SHA1NSEC3Digest.d.ts +11 -7
  37. package/dist/cjs/generated/SHA256Digest.d.ts +7 -7
  38. package/dist/cjs/generated/StaticMetadataService.d.ts +7 -7
  39. package/dist/cjs/generated/TLDPublicSuffixList.d.ts +7 -7
  40. package/dist/cjs/generated/UniversalResolver.d.ts +31 -31
  41. package/dist/cjs/generated/common.d.ts +1 -0
  42. package/dist/cjs/generated/factories/DNSRegistrar__factory.d.ts +3 -15
  43. package/dist/cjs/generated/factories/DNSRegistrar__factory.js +3 -26
  44. package/dist/cjs/generated/factories/DNSSECImpl__factory.d.ts +3 -15
  45. package/dist/cjs/generated/factories/DNSSECImpl__factory.js +3 -26
  46. package/dist/cjs/generated/factories/ETHRegistrarController__factory.js +14 -4
  47. package/dist/cjs/generated/factories/NameWrapper__factory.js +210 -79
  48. package/dist/cjs/generated/factories/P256SHA256Algorithm__factory.d.ts +3 -15
  49. package/dist/cjs/generated/factories/P256SHA256Algorithm__factory.js +3 -26
  50. package/dist/cjs/generated/factories/RSASHA1Algorithm__factory.d.ts +3 -15
  51. package/dist/cjs/generated/factories/RSASHA1Algorithm__factory.js +3 -26
  52. package/dist/cjs/generated/factories/RSASHA256Algorithm__factory.d.ts +3 -15
  53. package/dist/cjs/generated/factories/RSASHA256Algorithm__factory.js +3 -26
  54. package/dist/cjs/generated/factories/SHA1Digest__factory.d.ts +3 -15
  55. package/dist/cjs/generated/factories/SHA1Digest__factory.js +3 -26
  56. package/dist/cjs/generated/factories/SHA1NSEC3Digest__factory.d.ts +3 -15
  57. package/dist/cjs/generated/factories/SHA1NSEC3Digest__factory.js +3 -26
  58. package/dist/cjs/generated/factories/SHA256Digest__factory.d.ts +3 -15
  59. package/dist/cjs/generated/factories/SHA256Digest__factory.js +3 -26
  60. package/dist/cjs/generated/factories/TLDPublicSuffixList__factory.d.ts +3 -15
  61. package/dist/cjs/generated/factories/TLDPublicSuffixList__factory.js +3 -26
  62. package/dist/cjs/generated/factories/index.d.ts +14 -0
  63. package/dist/cjs/generated/factories/index.js +29 -1
  64. package/dist/cjs/generated/index.d.ts +29 -1
  65. package/dist/cjs/generated/index.js +31 -3
  66. package/dist/cjs/index.d.ts +12 -6
  67. package/dist/cjs/index.js +3 -2
  68. package/dist/cjs/utils/wrapperExpiry.d.ts +5 -0
  69. package/dist/cjs/utils/wrapperExpiry.js +30 -0
  70. package/dist/esm/contracts/baseRegistrar.d.ts +1 -1
  71. package/dist/esm/contracts/index.d.ts +3 -3
  72. package/dist/esm/contracts/multicall.d.ts +1 -1
  73. package/dist/esm/contracts/registry.d.ts +1 -1
  74. package/dist/esm/functions/burnFuses.js +1 -1
  75. package/dist/esm/functions/createSubname.d.ts +3 -1
  76. package/dist/esm/functions/createSubname.js +4 -2
  77. package/dist/esm/functions/deleteSubname.d.ts +1 -1
  78. package/dist/esm/functions/deleteSubname.js +3 -2
  79. package/dist/esm/functions/getExpiry.d.ts +9 -2
  80. package/dist/esm/functions/getExpiry.js +52 -7
  81. package/dist/esm/functions/getFuses.d.ts +2 -3
  82. package/dist/esm/functions/getFuses.js +5 -14
  83. package/dist/esm/functions/getSpecificRecord.js +8 -1
  84. package/dist/esm/functions/getSubnames.d.ts +1 -1
  85. package/dist/esm/functions/getSubnames.js +1 -1
  86. package/dist/esm/functions/transferSubname.d.ts +12 -3
  87. package/dist/esm/functions/transferSubname.js +5 -3
  88. package/dist/esm/functions/wrapName.d.ts +3 -1
  89. package/dist/esm/functions/wrapName.js +35 -29
  90. package/dist/esm/generated/BaseRegistrarImplementation.d.ts +222 -201
  91. package/dist/esm/generated/DNSRegistrar.d.ts +68 -64
  92. package/dist/esm/generated/DNSSECImpl.d.ts +111 -111
  93. package/dist/esm/generated/DefaultReverseResolver.d.ts +17 -17
  94. package/dist/esm/generated/ENSRegistry.d.ts +126 -111
  95. package/dist/esm/generated/ETHRegistrarController.d.ts +111 -109
  96. package/dist/esm/generated/Multicall.d.ts +60 -60
  97. package/dist/esm/generated/NameWrapper.d.ts +493 -354
  98. package/dist/esm/generated/P256SHA256Algorithm.d.ts +11 -7
  99. package/dist/esm/generated/PublicResolver.d.ts +259 -235
  100. package/dist/esm/generated/RSASHA1Algorithm.d.ts +11 -7
  101. package/dist/esm/generated/RSASHA256Algorithm.d.ts +11 -7
  102. package/dist/esm/generated/ReverseRegistrar.d.ts +112 -103
  103. package/dist/esm/generated/Root.d.ts +77 -77
  104. package/dist/esm/generated/SHA1Digest.d.ts +7 -7
  105. package/dist/esm/generated/SHA1NSEC3Digest.d.ts +11 -7
  106. package/dist/esm/generated/SHA256Digest.d.ts +7 -7
  107. package/dist/esm/generated/StaticMetadataService.d.ts +7 -7
  108. package/dist/esm/generated/TLDPublicSuffixList.d.ts +7 -7
  109. package/dist/esm/generated/UniversalResolver.d.ts +31 -31
  110. package/dist/esm/generated/common.d.ts +1 -0
  111. package/dist/esm/generated/factories/DNSRegistrar__factory.d.ts +3 -15
  112. package/dist/esm/generated/factories/DNSRegistrar__factory.js +2 -25
  113. package/dist/esm/generated/factories/DNSSECImpl__factory.d.ts +3 -15
  114. package/dist/esm/generated/factories/DNSSECImpl__factory.js +2 -25
  115. package/dist/esm/generated/factories/ETHRegistrarController__factory.js +14 -4
  116. package/dist/esm/generated/factories/NameWrapper__factory.js +210 -79
  117. package/dist/esm/generated/factories/P256SHA256Algorithm__factory.d.ts +3 -15
  118. package/dist/esm/generated/factories/P256SHA256Algorithm__factory.js +2 -25
  119. package/dist/esm/generated/factories/RSASHA1Algorithm__factory.d.ts +3 -15
  120. package/dist/esm/generated/factories/RSASHA1Algorithm__factory.js +2 -25
  121. package/dist/esm/generated/factories/RSASHA256Algorithm__factory.d.ts +3 -15
  122. package/dist/esm/generated/factories/RSASHA256Algorithm__factory.js +2 -25
  123. package/dist/esm/generated/factories/SHA1Digest__factory.d.ts +3 -15
  124. package/dist/esm/generated/factories/SHA1Digest__factory.js +2 -25
  125. package/dist/esm/generated/factories/SHA1NSEC3Digest__factory.d.ts +3 -15
  126. package/dist/esm/generated/factories/SHA1NSEC3Digest__factory.js +2 -25
  127. package/dist/esm/generated/factories/SHA256Digest__factory.d.ts +3 -15
  128. package/dist/esm/generated/factories/SHA256Digest__factory.js +2 -25
  129. package/dist/esm/generated/factories/TLDPublicSuffixList__factory.d.ts +3 -15
  130. package/dist/esm/generated/factories/TLDPublicSuffixList__factory.js +2 -25
  131. package/dist/esm/generated/factories/index.d.ts +14 -0
  132. package/dist/esm/generated/factories/index.js +14 -0
  133. package/dist/esm/generated/index.d.ts +29 -1
  134. package/dist/esm/generated/index.js +15 -1
  135. package/dist/esm/index.d.ts +12 -6
  136. package/dist/esm/index.js +3 -2
  137. package/dist/esm/utils/wrapperExpiry.d.ts +5 -0
  138. package/dist/esm/utils/wrapperExpiry.js +26 -0
  139. package/package.json +12 -10
  140. package/src/ABIs/Multicall.json +452 -0
  141. package/src/contracts/index.ts +1 -1
  142. package/src/functions/batch.test.ts +6 -6
  143. package/src/functions/batchWrappers.test.ts +5 -5
  144. package/src/functions/burnFuses.test.ts +5 -10
  145. package/src/functions/burnFuses.ts +1 -1
  146. package/src/functions/createSubname.test.ts +6 -10
  147. package/src/functions/createSubname.ts +14 -2
  148. package/src/functions/deleteSubname.test.ts +9 -28
  149. package/src/functions/deleteSubname.ts +3 -2
  150. package/src/functions/getDNSOwner.test.ts +1 -5
  151. package/src/functions/getExpiry.test.ts +26 -4
  152. package/src/functions/getExpiry.ts +87 -9
  153. package/src/functions/getFuses.test.ts +10 -33
  154. package/src/functions/getFuses.ts +10 -16
  155. package/src/functions/getHistory.test.ts +23 -11
  156. package/src/functions/getName.test.ts +4 -4
  157. package/src/functions/getNames.test.ts +97 -68
  158. package/src/functions/getOwner.test.ts +10 -25
  159. package/src/functions/getProfile.test.ts +32 -24
  160. package/src/functions/getResolver.test.ts +2 -6
  161. package/src/functions/getSpecificRecord.test.ts +16 -13
  162. package/src/functions/getSpecificRecord.ts +10 -4
  163. package/src/functions/getSubnames.test.ts +21 -17
  164. package/src/functions/getSubnames.ts +9 -2
  165. package/src/functions/makeCommitment.test.ts +2 -2
  166. package/src/functions/setName.test.ts +10 -11
  167. package/src/functions/setRecord.test.ts +12 -9
  168. package/src/functions/setRecords.test.ts +6 -5
  169. package/src/functions/setResolver.test.ts +6 -9
  170. package/src/functions/transferName.test.ts +13 -27
  171. package/src/functions/transferSubname.test.ts +11 -30
  172. package/src/functions/transferSubname.ts +28 -10
  173. package/src/functions/unwrapName.test.ts +13 -28
  174. package/src/functions/wrapName.test.ts +109 -34
  175. package/src/functions/wrapName.ts +45 -29
  176. package/src/generated/BaseRegistrarImplementation.ts +382 -296
  177. package/src/generated/DNSRegistrar.ts +103 -89
  178. package/src/generated/DNSSECImpl.ts +180 -149
  179. package/src/generated/DefaultReverseResolver.ts +37 -21
  180. package/src/generated/ENSRegistry.ts +257 -184
  181. package/src/generated/ETHRegistrarController.ts +252 -191
  182. package/src/generated/Multicall.ts +73 -57
  183. package/src/generated/NameWrapper.ts +979 -649
  184. package/src/generated/P256SHA256Algorithm.ts +21 -16
  185. package/src/generated/PublicResolver.ts +452 -362
  186. package/src/generated/RSASHA1Algorithm.ts +21 -16
  187. package/src/generated/RSASHA256Algorithm.ts +21 -16
  188. package/src/generated/ReverseRegistrar.ts +193 -141
  189. package/src/generated/Root.ts +146 -86
  190. package/src/generated/SHA1Digest.ts +12 -11
  191. package/src/generated/SHA1NSEC3Digest.ts +21 -16
  192. package/src/generated/SHA256Digest.ts +12 -11
  193. package/src/generated/StaticMetadataService.ts +22 -6
  194. package/src/generated/TLDPublicSuffixList.ts +10 -6
  195. package/src/generated/UniversalResolver.ts +44 -40
  196. package/src/generated/common.ts +2 -0
  197. package/src/generated/factories/DNSRegistrar__factory.ts +4 -56
  198. package/src/generated/factories/DNSSECImpl__factory.ts +4 -49
  199. package/src/generated/factories/ETHRegistrarController__factory.ts +14 -4
  200. package/src/generated/factories/NameWrapper__factory.ts +210 -79
  201. package/src/generated/factories/P256SHA256Algorithm__factory.ts +4 -40
  202. package/src/generated/factories/RSASHA1Algorithm__factory.ts +4 -40
  203. package/src/generated/factories/RSASHA256Algorithm__factory.ts +4 -40
  204. package/src/generated/factories/SHA1Digest__factory.ts +4 -40
  205. package/src/generated/factories/SHA1NSEC3Digest__factory.ts +4 -40
  206. package/src/generated/factories/SHA256Digest__factory.ts +4 -40
  207. package/src/generated/factories/TLDPublicSuffixList__factory.ts +4 -40
  208. package/src/generated/factories/index.ts +14 -0
  209. package/src/generated/index.ts +29 -1
  210. package/src/index.ts +3 -2
  211. package/src/tests/setup.ts +18 -13
  212. package/src/tests/withProvider.test.ts +2 -2
  213. package/src/utils/wrapperExpiry.ts +31 -0
  214. package/dist/cjs/contracts/doNotCallOnChainUniversalResolverProxy.d.ts +0 -3
  215. package/dist/cjs/contracts/doNotCallOnChainUniversalResolverProxy.js +0 -4
  216. package/dist/cjs/generated/DoNotCallOnChainUniversalResolverProxy.d.ts +0 -144
  217. package/dist/cjs/generated/DoNotCallOnChainUniversalResolverProxy.js +0 -2
  218. package/dist/cjs/generated/factories/DoNotCallOnChainUniversalResolverProxy__factory.d.ts +0 -56
  219. package/dist/cjs/generated/factories/DoNotCallOnChainUniversalResolverProxy__factory.js +0 -171
  220. package/dist/esm/contracts/doNotCallOnChainUniversalResolverProxy.d.ts +0 -3
  221. package/dist/esm/contracts/doNotCallOnChainUniversalResolverProxy.js +0 -2
  222. package/dist/esm/generated/DoNotCallOnChainUniversalResolverProxy.d.ts +0 -144
  223. package/dist/esm/generated/DoNotCallOnChainUniversalResolverProxy.js +0 -1
  224. package/dist/esm/generated/factories/DoNotCallOnChainUniversalResolverProxy__factory.d.ts +0 -56
  225. package/dist/esm/generated/factories/DoNotCallOnChainUniversalResolverProxy__factory.js +0 -167
  226. package/src/ABIs/ETHRegistrarController.json +0 -494
  227. package/src/ABIs/NameWrapper.json +0 -1183
  228. package/src/ABIs/PublicResolver.json +0 -875
  229. package/src/ABIs/ReverseRegistrar.json +0 -323
  230. package/src/ABIs/StaticMetadataService.json +0 -32
  231. package/src/ABIs/UniversalResolver.json +0 -187
  232. package/src/contracts/doNotCallOnChainUniversalResolverProxy.ts +0 -5
  233. package/src/generated/DoNotCallOnChainUniversalResolverProxy.ts +0 -285
  234. package/src/generated/factories/DoNotCallOnChainUniversalResolverProxy__factory.ts +0 -186
@@ -1,4 +1,4 @@
1
- import { BigNumber, ethers } from 'ethers'
1
+ import { ethers } from 'ethers'
2
2
  import { ENS } from '..'
3
3
  import setup from '../tests/setup'
4
4
  import { hexEncodeName } from '../utils/hexEncodedName'
@@ -19,49 +19,124 @@ afterAll(async () => {
19
19
  await revert()
20
20
  })
21
21
 
22
+ const approve = async () => {
23
+ const nameWrapper = await ENSInstance.contracts!.getNameWrapper()!
24
+ const registry = (await ENSInstance.contracts!.getRegistry()!).connect(
25
+ provider.getSigner(2),
26
+ )
27
+ const setApprovedForAllTx = await registry.setApprovalForAll(
28
+ nameWrapper.address,
29
+ true,
30
+ )
31
+ await setApprovedForAllTx?.wait()
32
+ }
33
+
22
34
  describe('wrapName', () => {
23
35
  beforeEach(async () => {
24
36
  await revert()
25
37
  })
26
- it('should return a wrap name transaction and succeed', async () => {
27
- const tx = await ENSInstance.wrapName('parthtejpal.eth', {
28
- wrappedOwner: accounts[0],
38
+ describe('.eth', () => {
39
+ it('should return a wrap name transaction and succeed', async () => {
40
+ const tx = await ENSInstance.wrapName('test123.eth', {
41
+ wrappedOwner: accounts[2],
42
+ addressOrIndex: 1,
43
+ })
44
+ expect(tx).toBeTruthy()
45
+ await tx.wait()
46
+
47
+ const nameWrapper = await ENSInstance.contracts!.getNameWrapper()!
48
+ const [fuses] = await nameWrapper.getFuses(namehash('test123.eth'))
49
+
50
+ // parent cannot control
51
+ expect(fuses).toBe(64)
29
52
  })
30
- expect(tx).toBeTruthy()
31
- await tx.wait()
53
+ it('should allow initial fuses', async () => {
54
+ const tx = await ENSInstance.wrapName('test123.eth', {
55
+ wrappedOwner: accounts[2],
56
+ fuseOptions: {
57
+ cannotUnwrap: true,
58
+ cannotSetTtl: true,
59
+ },
60
+ addressOrIndex: 1,
61
+ })
62
+ expect(tx).toBeTruthy()
63
+ await tx.wait()
32
64
 
33
- const nameWrapper = await ENSInstance.contracts!.getNameWrapper()!
34
- const [result] = await nameWrapper.getFuses(namehash('parthtejpal.eth'))
35
- expect((result as BigNumber).toHexString()).toBe('0x40')
36
- })
37
- it('should allow initial fuses', async () => {
38
- const tx = await ENSInstance.wrapName('parthtejpal.eth', {
39
- wrappedOwner: accounts[0],
40
- fuseOptions: {
41
- cannotUnwrap: true,
42
- cannotSetTtl: true,
43
- },
65
+ const nameWrapper = await ENSInstance.contracts!.getNameWrapper()!
66
+ const [fuses] = await nameWrapper.getFuses(namehash('test123.eth'))
67
+ expect(fuses).toBe(81)
44
68
  })
45
- expect(tx).toBeTruthy()
46
- await tx.wait()
69
+ it('should allow an initial resolver address', async () => {
70
+ const tx = await ENSInstance.wrapName('test123.eth', {
71
+ wrappedOwner: accounts[2],
72
+ resolverAddress: '0x42D63ae25990889E35F215bC95884039Ba354115',
73
+ addressOrIndex: 1,
74
+ })
75
+ expect(tx).toBeTruthy()
76
+ await tx.wait()
47
77
 
48
- const nameWrapper = await ENSInstance.contracts!.getNameWrapper()!
49
- const [result] = await nameWrapper.getFuses(namehash('parthtejpal.eth'))
50
- expect((result as BigNumber).toHexString()).toBe('0x40')
78
+ const universalResolver =
79
+ await ENSInstance.contracts!.getUniversalResolver()!
80
+ const [result] = await universalResolver.findResolver(
81
+ hexEncodeName('test123.eth'),
82
+ )
83
+ expect(result).toBe('0x42D63ae25990889E35F215bC95884039Ba354115')
84
+ })
51
85
  })
52
- it('should allow an initial resolver address', async () => {
53
- const tx = await ENSInstance.wrapName('parthtejpal.eth', {
54
- wrappedOwner: accounts[0],
55
- resolverAddress: '0x42D63ae25990889E35F215bC95884039Ba354115',
86
+ describe('other', () => {
87
+ it('should return a wrap name transaction and succeed', async () => {
88
+ await approve()
89
+
90
+ const tx = await ENSInstance.wrapName('test.with-subnames.eth', {
91
+ wrappedOwner: accounts[2],
92
+ addressOrIndex: 2,
93
+ })
94
+ expect(tx).toBeTruthy()
95
+ await tx.wait()
96
+
97
+ const nameWrapper = await ENSInstance.contracts!.getNameWrapper()!
98
+ const [fuses] = await nameWrapper.getFuses(
99
+ namehash('test.with-subnames.eth'),
100
+ )
101
+
102
+ expect(fuses).toBe(0)
56
103
  })
57
- expect(tx).toBeTruthy()
58
- await tx.wait()
104
+ it('should allow an initial resolver address', async () => {
105
+ await approve()
106
+ const tx = await ENSInstance.wrapName('test.with-subnames.eth', {
107
+ wrappedOwner: accounts[2],
108
+ resolverAddress: '0x42D63ae25990889E35F215bC95884039Ba354115',
109
+ addressOrIndex: 2,
110
+ })
111
+ expect(tx).toBeTruthy()
112
+ await tx.wait()
59
113
 
60
- const universalResolver =
61
- await ENSInstance.contracts!.getUniversalResolver()!
62
- const [result] = await universalResolver.findResolver(
63
- hexEncodeName('parthtejpal.eth'),
64
- )
65
- expect(result).toBe('0x42D63ae25990889E35F215bC95884039Ba354115')
114
+ const universalResolver =
115
+ await ENSInstance.contracts!.getUniversalResolver()!
116
+ const [result] = await universalResolver.findResolver(
117
+ hexEncodeName('test.with-subnames.eth'),
118
+ )
119
+ expect(result).toBe('0x42D63ae25990889E35F215bC95884039Ba354115')
120
+ })
121
+ it('should throw an error if contract does not have approval', async () => {
122
+ await expect(
123
+ ENSInstance.wrapName('test.with-subnames.eth', {
124
+ wrappedOwner: accounts[2],
125
+ addressOrIndex: 2,
126
+ }),
127
+ ).rejects.toThrow()
128
+ })
129
+ it('should throw an error if initial fuses are provided', async () => {
130
+ await expect(
131
+ ENSInstance.wrapName('test.with-subnames.eth', {
132
+ wrappedOwner: accounts[2],
133
+ fuseOptions: {
134
+ cannotUnwrap: true,
135
+ cannotSetTtl: true,
136
+ },
137
+ addressOrIndex: 1,
138
+ }),
139
+ ).rejects.toThrow()
140
+ })
66
141
  })
67
142
  })
@@ -1,13 +1,15 @@
1
- import { ethers } from 'ethers'
1
+ import { BigNumber, ethers } from 'ethers'
2
2
  import { ENSArgs } from '..'
3
3
  import type { FuseOptions } from '../@types/FuseOptions'
4
4
  import generateFuseInput from '../utils/generateFuseInput'
5
5
  import { hexEncodeName } from '../utils/hexEncodedName'
6
+ import { Expiry, makeExpiry } from '../utils/wrapperExpiry'
6
7
 
7
8
  async function wrapETH(
8
9
  { contracts }: ENSArgs<'contracts'>,
9
10
  labels: string[],
10
11
  wrappedOwner: string,
12
+ expiry: BigNumber,
11
13
  decodedFuses: string,
12
14
  resolverAddress: string,
13
15
  signer: ethers.Signer,
@@ -20,7 +22,7 @@ async function wrapETH(
20
22
 
21
23
  const data = ethers.utils.defaultAbiCoder.encode(
22
24
  ['string', 'address', 'uint32', 'uint64', 'address'],
23
- [labels[0], wrappedOwner, '0x0', decodedFuses, resolverAddress],
25
+ [labels[0], wrappedOwner, decodedFuses, expiry, resolverAddress],
24
26
  )
25
27
 
26
28
  return baseRegistrar.populateTransaction[
@@ -32,7 +34,6 @@ async function wrapOther(
32
34
  { contracts }: ENSArgs<'contracts'>,
33
35
  name: string,
34
36
  wrappedOwner: string,
35
- decodedFuses: string,
36
37
  resolverAddress: string,
37
38
  address: string,
38
39
  signer: ethers.Signer,
@@ -54,21 +55,26 @@ async function wrapOther(
54
55
  return nameWrapper.populateTransaction.wrap(
55
56
  hexEncodeName(name),
56
57
  wrappedOwner,
57
- decodedFuses,
58
58
  resolverAddress,
59
59
  )
60
60
  }
61
61
 
62
62
  export default async function (
63
- { contracts, signer, populate }: ENSArgs<'contracts' | 'signer' | 'populate'>,
63
+ {
64
+ contracts,
65
+ signer,
66
+ getExpiry,
67
+ }: ENSArgs<'contracts' | 'signer' | 'getExpiry'>,
64
68
  name: string,
65
69
  {
66
70
  wrappedOwner,
67
71
  fuseOptions,
72
+ expiry,
68
73
  resolverAddress,
69
74
  }: {
70
75
  wrappedOwner: string
71
76
  fuseOptions?: FuseOptions | string | number
77
+ expiry?: Expiry
72
78
  resolverAddress?: string
73
79
  },
74
80
  ) {
@@ -76,48 +82,58 @@ export default async function (
76
82
 
77
83
  let decodedFuses: string
78
84
 
79
- switch (typeof fuseOptions) {
80
- case 'object': {
81
- decodedFuses = generateFuseInput(fuseOptions)
82
- break
83
- }
84
- case 'number': {
85
- decodedFuses = fuseOptions.toString(16)
86
- break
87
- }
88
- case 'string': {
89
- decodedFuses = fuseOptions
90
- break
91
- }
92
- case 'undefined': {
93
- decodedFuses = '0'
94
- break
95
- }
96
- default: {
97
- throw new Error(`Invalid fuseOptions type: ${typeof fuseOptions}`)
98
- }
99
- }
100
-
101
85
  const publicResolver = await contracts?.getPublicResolver()!
102
86
  if (!resolverAddress) resolverAddress = publicResolver.address
103
87
 
104
88
  const labels = name.split('.')
105
- if (labels.length < 3 && labels[labels.length - 1] === 'eth') {
89
+ if (labels.length === 2 && labels[1] === 'eth') {
90
+ switch (typeof fuseOptions) {
91
+ case 'object': {
92
+ decodedFuses = generateFuseInput(fuseOptions)
93
+ break
94
+ }
95
+ case 'number': {
96
+ decodedFuses = fuseOptions.toString(16)
97
+ break
98
+ }
99
+ case 'string': {
100
+ decodedFuses = fuseOptions
101
+ break
102
+ }
103
+ case 'undefined': {
104
+ decodedFuses = '0'
105
+ break
106
+ }
107
+ default: {
108
+ throw new Error(`Invalid fuseOptions type: ${typeof fuseOptions}`)
109
+ }
110
+ }
111
+
112
+ const expiryToUse = await makeExpiry({ getExpiry }, name, expiry)
113
+
106
114
  return wrapETH(
107
115
  { contracts },
108
116
  labels,
109
117
  wrappedOwner,
118
+ expiryToUse,
110
119
  decodedFuses,
111
120
  resolverAddress,
112
121
  signer,
113
122
  address,
114
123
  )
115
124
  } else {
125
+ if (fuseOptions)
126
+ throw new Error(
127
+ 'Fuses can not be initially set when wrapping a non .eth name',
128
+ )
129
+ if (expiry)
130
+ throw new Error(
131
+ 'Expiry can not be initially set when wrapping a non .eth name',
132
+ )
116
133
  return wrapOther(
117
134
  { contracts },
118
135
  name,
119
136
  wrappedOwner,
120
- decodedFuses,
121
137
  resolverAddress,
122
138
  address,
123
139
  signer,