@ensdomains/ensjs 3.0.1 → 3.2.0

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 (139) hide show
  1. package/dist/cjs/clients/decorators/public.js.map +1 -1
  2. package/dist/cjs/contracts/consts.js +3 -3
  3. package/dist/cjs/contracts/universalResolver.js +92 -59
  4. package/dist/cjs/contracts/universalResolver.js.map +1 -1
  5. package/dist/cjs/errors/version.js +1 -1
  6. package/dist/cjs/functions/public/_getAbi.js +52 -45
  7. package/dist/cjs/functions/public/_getAbi.js.map +1 -1
  8. package/dist/cjs/functions/public/_getAddr.js +30 -23
  9. package/dist/cjs/functions/public/_getAddr.js.map +1 -1
  10. package/dist/cjs/functions/public/_getContentHash.js +14 -7
  11. package/dist/cjs/functions/public/_getContentHash.js.map +1 -1
  12. package/dist/cjs/functions/public/_getText.js +15 -8
  13. package/dist/cjs/functions/public/_getText.js.map +1 -1
  14. package/dist/cjs/functions/public/getAbiRecord.js +13 -5
  15. package/dist/cjs/functions/public/getAbiRecord.js.map +1 -1
  16. package/dist/cjs/functions/public/getAddressRecord.js +13 -5
  17. package/dist/cjs/functions/public/getAddressRecord.js.map +1 -1
  18. package/dist/cjs/functions/public/getContentHashRecord.js +13 -5
  19. package/dist/cjs/functions/public/getContentHashRecord.js.map +1 -1
  20. package/dist/cjs/functions/public/getName.js +53 -35
  21. package/dist/cjs/functions/public/getName.js.map +1 -1
  22. package/dist/cjs/functions/public/getRecords.js +164 -161
  23. package/dist/cjs/functions/public/getRecords.js.map +1 -1
  24. package/dist/cjs/functions/public/getTextRecord.js +13 -5
  25. package/dist/cjs/functions/public/getTextRecord.js.map +1 -1
  26. package/dist/cjs/functions/public/universalWrapper.js +45 -37
  27. package/dist/cjs/functions/public/universalWrapper.js.map +1 -1
  28. package/dist/cjs/functions/wallet/setAbiRecord.js +1 -2
  29. package/dist/cjs/functions/wallet/setAbiRecord.js.map +1 -1
  30. package/dist/cjs/utils/checkSafeUniversalResolverData.js +35 -0
  31. package/dist/cjs/utils/checkSafeUniversalResolverData.js.map +1 -0
  32. package/dist/cjs/utils/encoders/encodeAbi.js +13 -7
  33. package/dist/cjs/utils/encoders/encodeAbi.js.map +1 -1
  34. package/dist/cjs/utils/encoders/encodeSetAbi.js +1 -1
  35. package/dist/cjs/utils/encoders/encodeSetAbi.js.map +1 -1
  36. package/dist/cjs/utils/generateRecordCallArray.js +1 -2
  37. package/dist/cjs/utils/generateRecordCallArray.js.map +1 -1
  38. package/dist/esm/clients/decorators/public.js.map +1 -1
  39. package/dist/esm/contracts/consts.js +3 -3
  40. package/dist/esm/contracts/universalResolver.js +92 -59
  41. package/dist/esm/contracts/universalResolver.js.map +1 -1
  42. package/dist/esm/errors/version.js +1 -1
  43. package/dist/esm/functions/public/_getAbi.js +56 -49
  44. package/dist/esm/functions/public/_getAbi.js.map +1 -1
  45. package/dist/esm/functions/public/_getAddr.js +30 -23
  46. package/dist/esm/functions/public/_getAddr.js.map +1 -1
  47. package/dist/esm/functions/public/_getContentHash.js +14 -7
  48. package/dist/esm/functions/public/_getContentHash.js.map +1 -1
  49. package/dist/esm/functions/public/_getText.js +15 -8
  50. package/dist/esm/functions/public/_getText.js.map +1 -1
  51. package/dist/esm/functions/public/getAbiRecord.js +13 -5
  52. package/dist/esm/functions/public/getAbiRecord.js.map +1 -1
  53. package/dist/esm/functions/public/getAddressRecord.js +13 -5
  54. package/dist/esm/functions/public/getAddressRecord.js.map +1 -1
  55. package/dist/esm/functions/public/getContentHashRecord.js +13 -5
  56. package/dist/esm/functions/public/getContentHashRecord.js.map +1 -1
  57. package/dist/esm/functions/public/getName.js +54 -36
  58. package/dist/esm/functions/public/getName.js.map +1 -1
  59. package/dist/esm/functions/public/getRecords.js +168 -165
  60. package/dist/esm/functions/public/getRecords.js.map +1 -1
  61. package/dist/esm/functions/public/getTextRecord.js +13 -5
  62. package/dist/esm/functions/public/getTextRecord.js.map +1 -1
  63. package/dist/esm/functions/public/universalWrapper.js +46 -38
  64. package/dist/esm/functions/public/universalWrapper.js.map +1 -1
  65. package/dist/esm/functions/wallet/setAbiRecord.js +1 -2
  66. package/dist/esm/functions/wallet/setAbiRecord.js.map +1 -1
  67. package/dist/esm/utils/checkSafeUniversalResolverData.js +39 -0
  68. package/dist/esm/utils/checkSafeUniversalResolverData.js.map +1 -0
  69. package/dist/esm/utils/encoders/encodeAbi.js +13 -7
  70. package/dist/esm/utils/encoders/encodeAbi.js.map +1 -1
  71. package/dist/esm/utils/encoders/encodeSetAbi.js +1 -1
  72. package/dist/esm/utils/encoders/encodeSetAbi.js.map +1 -1
  73. package/dist/esm/utils/generateRecordCallArray.js +1 -2
  74. package/dist/esm/utils/generateRecordCallArray.js.map +1 -1
  75. package/dist/types/clients/decorators/public.d.ts +6 -6
  76. package/dist/types/clients/decorators/public.d.ts.map +1 -1
  77. package/dist/types/clients/public.d.ts +34 -8
  78. package/dist/types/clients/public.d.ts.map +1 -1
  79. package/dist/types/clients/wallet.d.ts +4 -4
  80. package/dist/types/contracts/consts.d.ts +3 -3
  81. package/dist/types/contracts/universalResolver.d.ts +73 -0
  82. package/dist/types/contracts/universalResolver.d.ts.map +1 -1
  83. package/dist/types/errors/version.d.ts +1 -1
  84. package/dist/types/functions/public/_getAbi.d.ts +3 -1
  85. package/dist/types/functions/public/_getAbi.d.ts.map +1 -1
  86. package/dist/types/functions/public/_getAddr.d.ts +3 -1
  87. package/dist/types/functions/public/_getAddr.d.ts.map +1 -1
  88. package/dist/types/functions/public/_getContentHash.d.ts +3 -1
  89. package/dist/types/functions/public/_getContentHash.d.ts.map +1 -1
  90. package/dist/types/functions/public/_getText.d.ts +3 -1
  91. package/dist/types/functions/public/_getText.d.ts.map +1 -1
  92. package/dist/types/functions/public/getAbiRecord.d.ts +8 -5
  93. package/dist/types/functions/public/getAbiRecord.d.ts.map +1 -1
  94. package/dist/types/functions/public/getAddressRecord.d.ts +8 -5
  95. package/dist/types/functions/public/getAddressRecord.d.ts.map +1 -1
  96. package/dist/types/functions/public/getContentHashRecord.d.ts +7 -4
  97. package/dist/types/functions/public/getContentHashRecord.d.ts.map +1 -1
  98. package/dist/types/functions/public/getName.d.ts +9 -3
  99. package/dist/types/functions/public/getName.d.ts.map +1 -1
  100. package/dist/types/functions/public/getRecords.d.ts +53 -26
  101. package/dist/types/functions/public/getRecords.d.ts.map +1 -1
  102. package/dist/types/functions/public/getTextRecord.d.ts +7 -4
  103. package/dist/types/functions/public/getTextRecord.d.ts.map +1 -1
  104. package/dist/types/functions/public/universalWrapper.d.ts +4 -2
  105. package/dist/types/functions/public/universalWrapper.d.ts.map +1 -1
  106. package/dist/types/functions/wallet/setAbiRecord.d.ts +1 -1
  107. package/dist/types/functions/wallet/setAbiRecord.d.ts.map +1 -1
  108. package/dist/types/types.d.ts +2 -2
  109. package/dist/types/types.d.ts.map +1 -1
  110. package/dist/types/utils/checkSafeUniversalResolverData.d.ts +14 -0
  111. package/dist/types/utils/checkSafeUniversalResolverData.d.ts.map +1 -0
  112. package/dist/types/utils/encoders/encodeAbi.d.ts +2 -2
  113. package/dist/types/utils/encoders/encodeAbi.d.ts.map +1 -1
  114. package/dist/types/utils/encoders/encodeSetAbi.d.ts +1 -4
  115. package/dist/types/utils/encoders/encodeSetAbi.d.ts.map +1 -1
  116. package/dist/types/utils/generateRecordCallArray.d.ts +2 -2
  117. package/dist/types/utils/generateRecordCallArray.d.ts.map +1 -1
  118. package/package.json +1 -1
  119. package/src/clients/decorators/public.ts +31 -4
  120. package/src/contracts/consts.ts +3 -3
  121. package/src/contracts/universalResolver.ts +95 -59
  122. package/src/errors/version.ts +1 -1
  123. package/src/functions/public/_getAbi.ts +61 -53
  124. package/src/functions/public/_getAddr.ts +31 -24
  125. package/src/functions/public/_getContentHash.ts +15 -7
  126. package/src/functions/public/_getText.ts +16 -8
  127. package/src/functions/public/getAbiRecord.ts +21 -8
  128. package/src/functions/public/getAddressRecord.ts +25 -9
  129. package/src/functions/public/getContentHashRecord.ts +19 -7
  130. package/src/functions/public/getName.ts +58 -40
  131. package/src/functions/public/getRecords.ts +336 -235
  132. package/src/functions/public/getTextRecord.ts +19 -6
  133. package/src/functions/public/universalWrapper.ts +49 -43
  134. package/src/functions/wallet/setAbiRecord.ts +2 -3
  135. package/src/types.ts +4 -3
  136. package/src/utils/checkSafeUniversalResolverData.ts +62 -0
  137. package/src/utils/encoders/encodeAbi.ts +13 -9
  138. package/src/utils/encoders/encodeSetAbi.ts +2 -2
  139. package/src/utils/generateRecordCallArray.ts +2 -3
@@ -15,27 +15,39 @@ import _getContentHash, {
15
15
  } from './_getContentHash.js'
16
16
  import universalWrapper from './universalWrapper.js'
17
17
 
18
- export type GetContentHashRecordParameters =
19
- Prettify<InternalGetContentHashParameters>
18
+ export type GetContentHashRecordParameters = Prettify<
19
+ InternalGetContentHashParameters & {
20
+ /** Batch gateway URLs to use for resolving CCIP-read requests. */
21
+ gatewayUrls?: string[]
22
+ }
23
+ >
20
24
 
21
25
  export type GetContentHashRecordReturnType =
22
26
  Prettify<InternalGetContentHashReturnType>
23
27
 
24
28
  const encode = (
25
29
  client: ClientWithEns,
26
- { name }: GetContentHashRecordParameters,
30
+ { name, gatewayUrls }: Omit<GetContentHashRecordParameters, 'strict'>,
27
31
  ): TransactionRequestWithPassthrough => {
28
32
  const prData = _getContentHash.encode(client, { name })
29
- return universalWrapper.encode(client, { name, data: prData.data })
33
+ return universalWrapper.encode(client, {
34
+ name,
35
+ data: prData.data,
36
+ gatewayUrls,
37
+ })
30
38
  }
31
39
 
32
40
  const decode = async (
33
41
  client: ClientWithEns,
34
42
  data: Hex | BaseError,
35
43
  passthrough: GenericPassthrough,
44
+ { strict }: Pick<GetContentHashRecordParameters, 'strict'>,
36
45
  ): Promise<GetContentHashRecordReturnType> => {
37
- const urData = await universalWrapper.decode(client, data, passthrough)
38
- return _getContentHash.decode(client, urData.data)
46
+ const urData = await universalWrapper.decode(client, data, passthrough, {
47
+ strict,
48
+ })
49
+ if (!urData) return null
50
+ return _getContentHash.decode(client, urData.data, { strict })
39
51
  }
40
52
 
41
53
  type BatchableFunctionObject = GeneratedFunction<typeof encode, typeof decode>
@@ -61,7 +73,7 @@ type BatchableFunctionObject = GeneratedFunction<typeof encode, typeof decode>
61
73
  */
62
74
  const getContentHashRecord = generateFunction({ encode, decode }) as ((
63
75
  client: ClientWithEns,
64
- { name }: GetContentHashRecordParameters,
76
+ { name, strict }: GetContentHashRecordParameters,
65
77
  ) => Promise<GetContentHashRecordReturnType>) &
66
78
  BatchableFunctionObject
67
79
 
@@ -1,9 +1,7 @@
1
1
  import {
2
2
  BaseError,
3
- decodeErrorResult,
4
3
  decodeFunctionResult,
5
4
  encodeFunctionData,
6
- getContractError,
7
5
  toHex,
8
6
  type Address,
9
7
  type Hex,
@@ -15,16 +13,22 @@ import type {
15
13
  GenericPassthrough,
16
14
  TransactionRequestWithPassthrough,
17
15
  } from '../../types.js'
16
+ import { checkSafeUniversalResolverData } from '../../utils/checkSafeUniversalResolverData.js'
18
17
  import {
19
18
  generateFunction,
20
19
  type GeneratedFunction,
21
20
  } from '../../utils/generateFunction.js'
22
- import { getRevertErrorData } from '../../utils/getRevertErrorData.js'
23
21
  import { packetToBytes } from '../../utils/hexEncodedName.js'
24
22
 
25
23
  export type GetNameParameters = {
26
24
  /** Address to get name for */
27
25
  address: Address
26
+ /** Whether or not to allow mismatched forward resolution */
27
+ allowMismatch?: boolean
28
+ /** Whether or not to throw decoding errors */
29
+ strict?: boolean
30
+ /** Batch gateway URLs to use for resolving CCIP-read requests. */
31
+ gatewayUrls?: string[]
28
32
  }
29
33
 
30
34
  export type GetNameReturnType = {
@@ -40,7 +44,7 @@ export type GetNameReturnType = {
40
44
 
41
45
  const encode = (
42
46
  client: ClientWithEns,
43
- { address }: GetNameParameters,
47
+ { address, gatewayUrls }: Omit<GetNameParameters, 'allowMismatch' | 'strict'>,
44
48
  ): TransactionRequestWithPassthrough => {
45
49
  const reverseNode = `${address.toLowerCase().substring(2)}.addr.reverse`
46
50
  const to = getChainContractAddress({
@@ -48,14 +52,32 @@ const encode = (
48
52
  contract: 'ensUniversalResolver',
49
53
  })
50
54
  const args = [toHex(packetToBytes(reverseNode))] as const
55
+
51
56
  return {
52
57
  to,
53
- data: encodeFunctionData({
54
- abi: universalResolverReverseSnippet,
55
- functionName: 'reverse',
56
- args,
57
- }),
58
- passthrough: { address, args },
58
+ ...(gatewayUrls?.length
59
+ ? {
60
+ data: encodeFunctionData({
61
+ abi: universalResolverReverseSnippet,
62
+ functionName: 'reverse',
63
+ args: [...args, gatewayUrls] as const,
64
+ }),
65
+ passthrough: {
66
+ args: [...args, gatewayUrls],
67
+ address: to,
68
+ },
69
+ }
70
+ : {
71
+ data: encodeFunctionData({
72
+ abi: universalResolverReverseSnippet,
73
+ functionName: 'reverse',
74
+ args,
75
+ }),
76
+ passthrough: {
77
+ args,
78
+ address: to,
79
+ },
80
+ }),
59
81
  }
60
82
  }
61
83
 
@@ -63,39 +85,35 @@ const decode = async (
63
85
  _client: ClientWithEns,
64
86
  data: Hex | BaseError,
65
87
  passthrough: GenericPassthrough,
66
- { address }: GetNameParameters,
88
+ { address, allowMismatch, strict }: GetNameParameters,
67
89
  ): Promise<GetNameReturnType | null> => {
68
- if (typeof data === 'object') {
69
- const errorData = getRevertErrorData(data)
70
- if (errorData) {
71
- const decodedError = decodeErrorResult({
72
- abi: universalResolverReverseSnippet,
73
- data: errorData,
74
- })
75
- if (
76
- decodedError.errorName === 'ResolverNotFound' ||
77
- decodedError.errorName === 'ResolverWildcardNotSupported'
78
- )
79
- return null
80
- }
81
- throw getContractError(data, {
82
- abi: universalResolverReverseSnippet,
83
- functionName: 'reverse',
84
- args: passthrough.args,
85
- address: passthrough.address,
86
- }) as BaseError
87
- }
88
- const result = decodeFunctionResult({
90
+ const isSafe = checkSafeUniversalResolverData(data, {
91
+ strict,
89
92
  abi: universalResolverReverseSnippet,
93
+ args: passthrough.args,
90
94
  functionName: 'reverse',
91
- data,
95
+ address: passthrough.address,
92
96
  })
93
- if (!result[0]) return null
94
- return {
95
- name: result[0],
96
- match: result[1].toLowerCase() === address.toLowerCase(),
97
- reverseResolverAddress: result[2],
98
- resolverAddress: result[3],
97
+ if (!isSafe) return null
98
+
99
+ try {
100
+ const result = decodeFunctionResult({
101
+ abi: universalResolverReverseSnippet,
102
+ functionName: 'reverse',
103
+ data,
104
+ })
105
+ if (!result[0]) return null
106
+ const match = result[1].toLowerCase() === address.toLowerCase()
107
+ if (!match && !allowMismatch) return null
108
+ return {
109
+ name: result[0],
110
+ match: result[1].toLowerCase() === address.toLowerCase(),
111
+ reverseResolverAddress: result[2],
112
+ resolverAddress: result[3],
113
+ }
114
+ } catch (error) {
115
+ if (strict) throw error
116
+ return null
99
117
  }
100
118
  }
101
119
 
@@ -122,7 +140,7 @@ type BatchableFunctionObject = GeneratedFunction<typeof encode, typeof decode>
122
140
  */
123
141
  const getName = generateFunction({ encode, decode }) as ((
124
142
  client: ClientWithEns,
125
- { address }: GetNameParameters,
143
+ { address, allowMismatch, strict }: GetNameParameters,
126
144
  ) => Promise<GetNameReturnType>) &
127
145
  BatchableFunctionObject
128
146