@ensdomains/ensjs 3.0.0-beta.1 → 3.0.0-beta.3

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 (248) hide show
  1. package/dist/cjs/clients/decorators/subgraph.js.map +1 -1
  2. package/dist/cjs/contracts/consts.js +52 -1
  3. package/dist/cjs/contracts/consts.js.map +1 -1
  4. package/dist/cjs/dns.js +3 -3
  5. package/dist/cjs/dns.js.map +1 -1
  6. package/dist/cjs/errors/subgraph.js.map +1 -1
  7. package/dist/cjs/errors/utils.js +15 -18
  8. package/dist/cjs/errors/utils.js.map +1 -1
  9. package/dist/cjs/errors/version.js +1 -1
  10. package/dist/cjs/functions/dns/{prepareDnsImport.js → getDnsImportData.js} +3 -3
  11. package/dist/cjs/functions/dns/{prepareDnsImport.js.map → getDnsImportData.js.map} +1 -1
  12. package/dist/cjs/functions/dns/importDnsName.js +7 -7
  13. package/dist/cjs/functions/dns/importDnsName.js.map +1 -1
  14. package/dist/cjs/functions/public/_getContentHash.js +1 -1
  15. package/dist/cjs/functions/public/getSupportedInterfaces.js +1 -1
  16. package/dist/cjs/functions/public/getSupportedInterfaces.js.map +1 -1
  17. package/dist/cjs/functions/public/getWrapperData.js.map +1 -1
  18. package/dist/cjs/functions/subgraph/filters.js +3 -0
  19. package/dist/cjs/functions/subgraph/filters.js.map +1 -0
  20. package/dist/cjs/functions/subgraph/getNameHistory.js +1 -1
  21. package/dist/cjs/functions/subgraph/getNamesForAddress.js +140 -182
  22. package/dist/cjs/functions/subgraph/getNamesForAddress.js.map +1 -1
  23. package/dist/cjs/functions/subgraph/getSubnames.js +95 -108
  24. package/dist/cjs/functions/subgraph/getSubnames.js.map +1 -1
  25. package/dist/cjs/functions/subgraph/types.js +3 -0
  26. package/dist/cjs/functions/subgraph/types.js.map +1 -0
  27. package/dist/cjs/functions/subgraph/utils.js.map +1 -1
  28. package/dist/cjs/functions/wallet/createSubname.js +1 -1
  29. package/dist/cjs/functions/wallet/createSubname.js.map +1 -1
  30. package/dist/cjs/functions/wallet/setChildFuses.js +1 -1
  31. package/dist/cjs/functions/wallet/setChildFuses.js.map +1 -1
  32. package/dist/cjs/functions/wallet/setFuses.js +1 -1
  33. package/dist/cjs/functions/wallet/setFuses.js.map +1 -1
  34. package/dist/cjs/functions/wallet/wrapName.js +3 -1
  35. package/dist/cjs/functions/wallet/wrapName.js.map +1 -1
  36. package/dist/cjs/index.js +1 -2
  37. package/dist/cjs/index.js.map +1 -1
  38. package/dist/cjs/utils/contentHash.js +54 -131
  39. package/dist/cjs/utils/contentHash.js.map +1 -1
  40. package/dist/cjs/utils/encoders/encodeSetContentHash.js +1 -4
  41. package/dist/cjs/utils/encoders/encodeSetContentHash.js.map +1 -1
  42. package/dist/cjs/utils/format.js +1 -5
  43. package/dist/cjs/utils/format.js.map +1 -1
  44. package/dist/cjs/utils/fuses.js +181 -200
  45. package/dist/cjs/utils/fuses.js.map +1 -1
  46. package/dist/cjs/utils/index.js +4 -7
  47. package/dist/cjs/utils/index.js.map +1 -1
  48. package/dist/cjs/utils/registerHelpers.js +3 -1
  49. package/dist/cjs/utils/registerHelpers.js.map +1 -1
  50. package/dist/esm/clients/decorators/subgraph.js.map +1 -1
  51. package/dist/esm/contracts/consts.js +52 -1
  52. package/dist/esm/contracts/consts.js.map +1 -1
  53. package/dist/esm/dns.js +1 -1
  54. package/dist/esm/dns.js.map +1 -1
  55. package/dist/esm/errors/subgraph.js.map +1 -1
  56. package/dist/esm/errors/utils.js +13 -16
  57. package/dist/esm/errors/utils.js.map +1 -1
  58. package/dist/esm/errors/version.js +1 -1
  59. package/dist/esm/functions/dns/{prepareDnsImport.js → getDnsImportData.js} +9 -10
  60. package/dist/esm/functions/dns/getDnsImportData.js.map +1 -0
  61. package/dist/esm/functions/dns/importDnsName.js +12 -12
  62. package/dist/esm/functions/dns/importDnsName.js.map +1 -1
  63. package/dist/esm/functions/public/_getContentHash.js +2 -2
  64. package/dist/esm/functions/public/getSupportedInterfaces.js +2 -2
  65. package/dist/esm/functions/public/getSupportedInterfaces.js.map +1 -1
  66. package/dist/esm/functions/public/getWrapperData.js.map +1 -1
  67. package/dist/esm/functions/subgraph/filters.js +2 -0
  68. package/dist/esm/functions/subgraph/filters.js.map +1 -0
  69. package/dist/esm/functions/subgraph/getNameHistory.js +2 -2
  70. package/dist/esm/functions/subgraph/getNamesForAddress.js +144 -183
  71. package/dist/esm/functions/subgraph/getNamesForAddress.js.map +1 -1
  72. package/dist/esm/functions/subgraph/getSubnames.js +101 -111
  73. package/dist/esm/functions/subgraph/getSubnames.js.map +1 -1
  74. package/dist/esm/functions/subgraph/types.js +2 -0
  75. package/dist/esm/functions/subgraph/types.js.map +1 -0
  76. package/dist/esm/functions/subgraph/utils.js.map +1 -1
  77. package/dist/esm/functions/wallet/createSubname.js +1 -1
  78. package/dist/esm/functions/wallet/createSubname.js.map +1 -1
  79. package/dist/esm/functions/wallet/setChildFuses.js +1 -1
  80. package/dist/esm/functions/wallet/setChildFuses.js.map +1 -1
  81. package/dist/esm/functions/wallet/setFuses.js +2 -2
  82. package/dist/esm/functions/wallet/setFuses.js.map +1 -1
  83. package/dist/esm/functions/wallet/wrapName.js +4 -2
  84. package/dist/esm/functions/wallet/wrapName.js.map +1 -1
  85. package/dist/esm/index.js +1 -1
  86. package/dist/esm/index.js.map +1 -1
  87. package/dist/esm/utils/contentHash.js +51 -128
  88. package/dist/esm/utils/contentHash.js.map +1 -1
  89. package/dist/esm/utils/encoders/encodeSetContentHash.js +2 -5
  90. package/dist/esm/utils/encoders/encodeSetContentHash.js.map +1 -1
  91. package/dist/esm/utils/format.js +0 -2
  92. package/dist/esm/utils/format.js.map +1 -1
  93. package/dist/esm/utils/fuses.js +180 -201
  94. package/dist/esm/utils/fuses.js.map +1 -1
  95. package/dist/esm/utils/index.js +2 -2
  96. package/dist/esm/utils/index.js.map +1 -1
  97. package/dist/esm/utils/registerHelpers.js +4 -2
  98. package/dist/esm/utils/registerHelpers.js.map +1 -1
  99. package/dist/types/clients/decorators/subgraph.d.ts +1 -1
  100. package/dist/types/clients/decorators/subgraph.d.ts.map +1 -1
  101. package/dist/types/clients/decorators/wallet.d.ts +12 -12
  102. package/dist/types/clients/public.d.ts +1 -1
  103. package/dist/types/clients/subgraph.d.ts +1 -1
  104. package/dist/types/clients/wallet.d.ts +43 -79
  105. package/dist/types/clients/wallet.d.ts.map +1 -1
  106. package/dist/types/contracts/consts.d.ts +51 -2
  107. package/dist/types/contracts/consts.d.ts.map +1 -1
  108. package/dist/types/dns.d.ts +1 -1
  109. package/dist/types/dns.d.ts.map +1 -1
  110. package/dist/types/errors/subgraph.d.ts +4 -4
  111. package/dist/types/errors/subgraph.d.ts.map +1 -1
  112. package/dist/types/errors/utils.d.ts +10 -13
  113. package/dist/types/errors/utils.d.ts.map +1 -1
  114. package/dist/types/errors/version.d.ts +1 -1
  115. package/dist/types/functions/dns/{prepareDnsImport.d.ts → getDnsImportData.d.ts} +11 -12
  116. package/dist/types/functions/dns/{prepareDnsImport.d.ts.map → getDnsImportData.d.ts.map} +1 -1
  117. package/dist/types/functions/dns/importDnsName.d.ts +36 -36
  118. package/dist/types/functions/dns/importDnsName.d.ts.map +1 -1
  119. package/dist/types/functions/public/getSupportedInterfaces.d.ts +19 -4
  120. package/dist/types/functions/public/getSupportedInterfaces.d.ts.map +1 -1
  121. package/dist/types/functions/public/getWrapperData.d.ts +2 -2
  122. package/dist/types/functions/public/getWrapperData.d.ts.map +1 -1
  123. package/dist/types/functions/subgraph/filters.d.ts +693 -0
  124. package/dist/types/functions/subgraph/filters.d.ts.map +1 -0
  125. package/dist/types/functions/subgraph/getNamesForAddress.d.ts +2 -0
  126. package/dist/types/functions/subgraph/getNamesForAddress.d.ts.map +1 -1
  127. package/dist/types/functions/subgraph/getSubnames.d.ts +3 -1
  128. package/dist/types/functions/subgraph/getSubnames.d.ts.map +1 -1
  129. package/dist/types/functions/subgraph/types.d.ts +13 -0
  130. package/dist/types/functions/subgraph/types.d.ts.map +1 -0
  131. package/dist/types/functions/subgraph/utils.d.ts +2 -2
  132. package/dist/types/functions/subgraph/utils.d.ts.map +1 -1
  133. package/dist/types/functions/wallet/commitName.d.ts +25 -25
  134. package/dist/types/functions/wallet/createSubname.d.ts +28 -28
  135. package/dist/types/functions/wallet/createSubname.d.ts.map +1 -1
  136. package/dist/types/functions/wallet/deleteSubname.d.ts +25 -25
  137. package/dist/types/functions/wallet/registerName.d.ts +24 -24
  138. package/dist/types/functions/wallet/renewNames.d.ts +24 -24
  139. package/dist/types/functions/wallet/setAbiRecord.d.ts +25 -25
  140. package/dist/types/functions/wallet/setAddressRecord.d.ts +25 -25
  141. package/dist/types/functions/wallet/setChildFuses.d.ts +27 -27
  142. package/dist/types/functions/wallet/setChildFuses.d.ts.map +1 -1
  143. package/dist/types/functions/wallet/setContentHashRecord.d.ts +25 -25
  144. package/dist/types/functions/wallet/setFuses.d.ts +27 -27
  145. package/dist/types/functions/wallet/setFuses.d.ts.map +1 -1
  146. package/dist/types/functions/wallet/setPrimaryName.d.ts +25 -25
  147. package/dist/types/functions/wallet/setRecords.d.ts +25 -25
  148. package/dist/types/functions/wallet/setResolver.d.ts +25 -25
  149. package/dist/types/functions/wallet/setTextRecord.d.ts +25 -25
  150. package/dist/types/functions/wallet/transferName.d.ts +25 -25
  151. package/dist/types/functions/wallet/unwrapName.d.ts +25 -25
  152. package/dist/types/functions/wallet/wrapName.d.ts +27 -27
  153. package/dist/types/functions/wallet/wrapName.d.ts.map +1 -1
  154. package/dist/types/index.d.ts +1 -1
  155. package/dist/types/index.d.ts.map +1 -1
  156. package/dist/types/utils/contentHash.d.ts +7 -11
  157. package/dist/types/utils/contentHash.d.ts.map +1 -1
  158. package/dist/types/utils/encoders/encodeSetContentHash.d.ts.map +1 -1
  159. package/dist/types/utils/format.d.ts +0 -2
  160. package/dist/types/utils/format.d.ts.map +1 -1
  161. package/dist/types/utils/fuses.d.ts +164 -125
  162. package/dist/types/utils/fuses.d.ts.map +1 -1
  163. package/dist/types/utils/index.d.ts +2 -2
  164. package/dist/types/utils/index.d.ts.map +1 -1
  165. package/dist/types/utils/registerHelpers.d.ts +2 -2
  166. package/dist/types/utils/registerHelpers.d.ts.map +1 -1
  167. package/package.json +4 -3
  168. package/src/clients/decorators/subgraph.ts +1 -0
  169. package/src/contracts/consts.ts +57 -12
  170. package/src/dns.ts +5 -5
  171. package/src/errors/subgraph.ts +4 -4
  172. package/src/errors/utils.ts +21 -18
  173. package/src/errors/version.ts +1 -1
  174. package/src/functions/dns/{prepareDnsImport.ts → getDnsImportData.ts} +12 -13
  175. package/src/functions/dns/importDnsName.ts +20 -15
  176. package/src/functions/public/_getContentHash.ts +2 -2
  177. package/src/functions/public/getSupportedInterfaces.ts +48 -10
  178. package/src/functions/public/getWrapperData.ts +2 -2
  179. package/src/functions/subgraph/filters.ts +702 -0
  180. package/src/functions/subgraph/getNameHistory.ts +2 -2
  181. package/src/functions/subgraph/getNamesForAddress.ts +170 -186
  182. package/src/functions/subgraph/getSubnames.ts +121 -113
  183. package/src/functions/subgraph/types.ts +13 -0
  184. package/src/functions/subgraph/utils.ts +2 -2
  185. package/src/functions/wallet/createSubname.ts +4 -4
  186. package/src/functions/wallet/setChildFuses.ts +3 -3
  187. package/src/functions/wallet/setFuses.ts +6 -3
  188. package/src/functions/wallet/wrapName.ts +8 -3
  189. package/src/index.ts +0 -1
  190. package/src/utils/contentHash.ts +59 -113
  191. package/src/utils/encoders/encodeSetContentHash.ts +2 -4
  192. package/src/utils/format.ts +0 -6
  193. package/src/utils/fuses.ts +308 -308
  194. package/src/utils/index.ts +4 -5
  195. package/src/utils/registerHelpers.ts +5 -3
  196. package/dist/esm/functions/dns/prepareDnsImport.js.map +0 -1
  197. package/src/@types/@ensdomains/content-hash.d.ts +0 -1
  198. package/src/functions/dns/getDnsOwner.test.ts +0 -195
  199. package/src/functions/dns/importDnsName.test.ts +0 -117
  200. package/src/functions/dns/prepareDnsImport.test.ts +0 -115
  201. package/src/functions/public/batch.test.ts +0 -67
  202. package/src/functions/public/ccip.test.ts +0 -78
  203. package/src/functions/public/getAbiRecord.test.ts +0 -174
  204. package/src/functions/public/getAddressRecord.test.ts +0 -83
  205. package/src/functions/public/getAvailable.test.ts +0 -17
  206. package/src/functions/public/getContentHashRecord.test.ts +0 -28
  207. package/src/functions/public/getExpiry.test.ts +0 -48
  208. package/src/functions/public/getName.test.ts +0 -66
  209. package/src/functions/public/getOwner.test.ts +0 -87
  210. package/src/functions/public/getPrice.test.ts +0 -45
  211. package/src/functions/public/getRecords.test.ts +0 -49
  212. package/src/functions/public/getResolver.test.ts +0 -12
  213. package/src/functions/public/getTextRecord.test.ts +0 -20
  214. package/src/functions/public/getWrapperData.test.ts +0 -79
  215. package/src/functions/public/getWrapperName.test.ts +0 -19
  216. package/src/functions/subgraph/client.test.ts +0 -170
  217. package/src/functions/subgraph/getDecodedName.test.ts +0 -31
  218. package/src/functions/subgraph/getNameHistory.test.ts +0 -39
  219. package/src/functions/subgraph/getNamesForAddress.test.ts +0 -244
  220. package/src/functions/subgraph/getSubgraphRecords.test.ts +0 -74
  221. package/src/functions/subgraph/getSubgraphRegistrant.test.ts +0 -34
  222. package/src/functions/subgraph/getSubnames.test.ts +0 -202
  223. package/src/functions/wallet/commitName.test.ts +0 -58
  224. package/src/functions/wallet/createSubname.test.ts +0 -73
  225. package/src/functions/wallet/deleteSubname.test.ts +0 -150
  226. package/src/functions/wallet/registerName.test.ts +0 -81
  227. package/src/functions/wallet/renewNames.test.ts +0 -92
  228. package/src/functions/wallet/setAbiRecord.test.ts +0 -156
  229. package/src/functions/wallet/setAddressRecord.test.ts +0 -121
  230. package/src/functions/wallet/setChildFuses.test.ts +0 -97
  231. package/src/functions/wallet/setContentHashRecord.test.ts +0 -69
  232. package/src/functions/wallet/setFuses.test.ts +0 -287
  233. package/src/functions/wallet/setPrimaryName.test.ts +0 -71
  234. package/src/functions/wallet/setRecords.test.ts +0 -127
  235. package/src/functions/wallet/setResolver.test.ts +0 -114
  236. package/src/functions/wallet/setTextRecord.test.ts +0 -67
  237. package/src/functions/wallet/transferName.test.ts +0 -201
  238. package/src/functions/wallet/unwrapName.test.ts +0 -93
  239. package/src/functions/wallet/wrapName.test.ts +0 -195
  240. package/src/utils/generateRecordCallArray.test.ts +0 -84
  241. package/src/utils/labels.test.ts +0 -163
  242. package/src/utils/makeLabelNodeAndParent.test.ts +0 -11
  243. package/src/utils/makeSafeSecondsDate.test.ts +0 -14
  244. package/src/utils/normalise.test.ts +0 -35
  245. package/src/utils/ownerFromContract.test.ts +0 -52
  246. package/src/utils/registerHelpers.test.ts +0 -159
  247. package/src/utils/validation.test.ts +0 -170
  248. package/src/utils/wrapper.test.ts +0 -46
@@ -1,9 +1,68 @@
1
+ /* eslint-disable @typescript-eslint/naming-convention */
1
2
  import { gql } from 'graphql-request';
2
3
  import { FilterKeyRequiredError, InvalidFilterKeyError, InvalidOrderByError, } from '../../errors/subgraph.js';
3
- import { GRACE_PERIOD_SECONDS } from '../../utils/consts.js';
4
+ import { EMPTY_ADDRESS, GRACE_PERIOD_SECONDS } from '../../utils/consts.js';
4
5
  import { createSubgraphClient } from './client.js';
5
6
  import { domainDetailsFragment, registrationDetailsFragment, wrappedDomainDetailsFragment, } from './fragments.js';
6
7
  import { makeNameObject } from './utils.js';
8
+ const supportedOwnerFilters = [
9
+ 'owner',
10
+ 'registrant',
11
+ 'wrappedOwner',
12
+ 'resolvedAddress',
13
+ ];
14
+ const getOrderByFilter = ({ orderBy, orderDirection, previousPage, }) => {
15
+ const lastDomain = previousPage[previousPage.length - 1];
16
+ const operator = orderDirection === 'asc' ? 'gt' : 'lt';
17
+ switch (orderBy) {
18
+ case 'expiryDate': {
19
+ let lastExpiryDate = lastDomain.expiryDate?.value
20
+ ? lastDomain.expiryDate.value / 1000
21
+ : 0;
22
+ if (lastDomain.parentName === 'eth') {
23
+ lastExpiryDate += GRACE_PERIOD_SECONDS;
24
+ }
25
+ if (orderDirection === 'asc' && lastExpiryDate === 0) {
26
+ return {
27
+ and: [{ expiryDate: null }, { [`id_${operator}`]: lastDomain.id }],
28
+ };
29
+ }
30
+ if (orderDirection === 'desc' && lastExpiryDate !== 0) {
31
+ return {
32
+ [`expiryDate_${operator}`]: `${lastExpiryDate}`,
33
+ };
34
+ }
35
+ return {
36
+ or: [
37
+ {
38
+ [`expiryDate_${operator}`]: `${lastExpiryDate}`,
39
+ },
40
+ { expiryDate: null },
41
+ ],
42
+ };
43
+ }
44
+ case 'name': {
45
+ return {
46
+ [`name_${operator}`]: lastDomain.name ?? '',
47
+ };
48
+ }
49
+ case 'labelName': {
50
+ return {
51
+ [`labelName_${operator}`]: lastDomain.labelName ?? '',
52
+ };
53
+ }
54
+ case 'createdAt': {
55
+ return {
56
+ [`createdAt_${operator}`]: `${lastDomain.createdAt.value / 1000}`,
57
+ };
58
+ }
59
+ default:
60
+ throw new InvalidOrderByError({
61
+ orderBy: orderBy || '<no orderBy provided>',
62
+ supportedOrderBys: ['expiryDate', 'name', 'labelName', 'createdAt'],
63
+ });
64
+ }
65
+ };
7
66
  /**
8
67
  * Gets the names for an address from the subgraph.
9
68
  * @param client - {@link ClientWithEns}
@@ -27,215 +86,117 @@ const getNamesForAddress = async (client, { address, filter = {
27
86
  resolvedAddress: true,
28
87
  wrappedOwner: true,
29
88
  allowExpired: false,
89
+ allowDeleted: false,
30
90
  allowReverseRecord: false,
31
91
  }, orderBy = 'name', orderDirection = 'asc', pageSize = 100, previousPage, }) => {
32
92
  const subgraphClient = createSubgraphClient({ client });
33
- let ownerWhereFilter = `
34
- or: [
35
- `;
36
- let hasFilterApplied = false;
37
- const { allowExpired, allowReverseRecord, ...filters } = filter;
38
- for (const [key, value] of Object.entries(filters)) {
93
+ const { allowExpired, allowDeleted, allowReverseRecord, ...filters } = filter;
94
+ const ownerWhereFilters = Object.entries(filters).reduce((prev, [key, value]) => {
39
95
  if (value) {
40
- hasFilterApplied = true;
41
- switch (key) {
42
- case 'owner': {
43
- ownerWhereFilter += `
44
- { owner: $address }
45
- `;
46
- break;
47
- }
48
- case 'registrant': {
49
- ownerWhereFilter += `
50
- { registrant: $address }
51
- `;
52
- break;
53
- }
54
- case 'wrappedOwner': {
55
- ownerWhereFilter += `
56
- { wrappedOwner: $address }
57
- `;
58
- break;
59
- }
60
- case 'resolvedAddress': {
61
- ownerWhereFilter += `
62
- { resolvedAddress: $address }
63
- `;
64
- break;
65
- }
66
- default:
67
- throw new InvalidFilterKeyError({
68
- filterKey: key,
69
- supportedFilterKeys: [
70
- 'owner',
71
- 'registrant',
72
- 'wrappedOwner',
73
- 'resolvedAddress',
74
- ],
75
- });
76
- }
96
+ if (!supportedOwnerFilters.includes(key))
97
+ throw new InvalidFilterKeyError({
98
+ filterKey: key,
99
+ supportedFilterKeys: supportedOwnerFilters,
100
+ });
101
+ return [
102
+ ...prev,
103
+ {
104
+ [key]: address.toLowerCase(),
105
+ },
106
+ ];
77
107
  }
78
- }
108
+ return prev;
109
+ }, []);
110
+ const hasFilterApplied = ownerWhereFilters.length > 0;
79
111
  if (!hasFilterApplied)
80
112
  throw new FilterKeyRequiredError({
81
- supportedFilterKeys: [
82
- 'owner',
83
- 'registrant',
84
- 'wrappedOwner',
85
- 'resolvedAddress',
86
- ],
113
+ supportedFilterKeys: supportedOwnerFilters,
87
114
  details: 'At least one ownership filter must be enabled',
88
115
  });
89
- ownerWhereFilter += `
90
- ]
91
- `;
116
+ const ownerWhereFilter = ownerWhereFilters.length > 1
117
+ ? { or: ownerWhereFilters }
118
+ : ownerWhereFilters[0];
92
119
  const whereFilters = [ownerWhereFilter];
93
- let orderByFilter = '';
94
- let orderByStringVar = '';
95
- if (previousPage && previousPage.length > 0) {
96
- const lastDomain = previousPage[previousPage.length - 1];
97
- const operator = orderDirection === 'asc' ? 'gt' : 'lt';
98
- switch (orderBy) {
99
- case 'expiryDate': {
100
- let lastExpiryDate = lastDomain.expiryDate?.value
101
- ? lastDomain.expiryDate.value / 1000
102
- : 0;
103
- if (lastDomain.parentName === 'eth') {
104
- lastExpiryDate += GRACE_PERIOD_SECONDS;
105
- }
106
- if (orderDirection === 'asc' && lastExpiryDate === 0) {
107
- orderByFilter = `
108
- {
109
- and: [
110
- { expiryDate: null }
111
- { id_${operator}: "${lastDomain.id}" }
112
- ]
113
- }
114
- `;
115
- }
116
- else if (orderDirection === 'desc' && lastExpiryDate !== 0) {
117
- orderByFilter = `
118
- {
119
- expiryDate_${operator}: ${lastExpiryDate}
120
- }
121
- `;
122
- }
123
- else {
124
- orderByFilter = `
125
- {
126
- or: [
127
- {
128
- expiryDate_${operator}: ${lastExpiryDate}
129
- }
130
- { expiryDate: null }
131
- ]
132
- }
133
- `;
134
- }
135
- break;
136
- }
137
- case 'name': {
138
- orderByFilter = `
139
- {
140
- name_${operator}: $orderByStringVar
141
- }
142
- `;
143
- orderByStringVar = lastDomain.name ?? '';
144
- break;
145
- }
146
- case 'labelName': {
147
- orderByFilter = `
148
- {
149
- labelName_${operator}: $orderByStringVar
150
- }
151
- `;
152
- orderByStringVar = lastDomain.labelName ?? '';
153
- break;
154
- }
155
- case 'createdAt': {
156
- orderByFilter = `
157
- {
158
- createdAt_${operator}: ${lastDomain.createdAt.value / 1000}
159
- }
160
- `;
161
- break;
162
- }
163
- default:
164
- throw new InvalidOrderByError({
165
- orderBy,
166
- supportedOrderBys: ['expiryDate', 'name', 'labelName', 'createdAt'],
167
- });
168
- }
169
- whereFilters.push(orderByFilter);
120
+ if (previousPage?.length) {
121
+ whereFilters.push(getOrderByFilter({
122
+ orderBy,
123
+ orderDirection,
124
+ previousPage,
125
+ }));
170
126
  }
171
127
  if (!allowReverseRecord) {
172
128
  // Exclude domains with parent addr.reverse
173
129
  // namehash of addr.reverse = 0x91d1777781884d03a6757a803996e38de2a42967fb37eeaca72729271025a9e2
174
- whereFilters.push(`
175
- {
176
- parent_not: "0x91d1777781884d03a6757a803996e38de2a42967fb37eeaca72729271025a9e2"
177
- }
178
- `);
130
+ whereFilters.push({
131
+ parent_not: '0x91d1777781884d03a6757a803996e38de2a42967fb37eeaca72729271025a9e2',
132
+ });
179
133
  }
180
134
  if (!allowExpired) {
181
135
  // Exclude domains that are expired
182
136
  // if expiryDate is null, there is no expiry on the domain (registration or wrapped)
183
- whereFilters.push(`
184
- {
185
- or: [
186
- { expiryDate_gt: $expiryDate }
187
- { expiryDate: null }
188
- ]
189
- }
190
- `);
137
+ whereFilters.push({
138
+ or: [
139
+ { expiryDate_gt: `${Math.floor(Date.now() / 1000)}` },
140
+ { expiryDate: null },
141
+ ],
142
+ });
191
143
  }
192
- const whereFilter = whereFilters.length > 1
193
- ? `
194
- and: [
195
- {
196
- ${whereFilters.shift()}
197
- }
198
- ${whereFilters.join('\n')}
199
- ]
200
- `
201
- : whereFilters[0];
144
+ if (!allowDeleted) {
145
+ // exclude "deleted" domains
146
+ // when owner/resolver/registrant = null
147
+ whereFilters.push({
148
+ or: [
149
+ {
150
+ owner_not: EMPTY_ADDRESS,
151
+ },
152
+ {
153
+ resolver_not: null,
154
+ },
155
+ {
156
+ and: [
157
+ {
158
+ registrant_not: EMPTY_ADDRESS,
159
+ },
160
+ {
161
+ registrant_not: null,
162
+ },
163
+ ],
164
+ },
165
+ ],
166
+ });
167
+ }
168
+ const whereFilter = whereFilters.length > 1 ? { and: whereFilters } : whereFilters[0];
202
169
  const query = gql `
203
- query getNamesForAddress(
204
- $address: String!
205
- $orderBy: Domain_orderBy
206
- $orderDirection: OrderDirection
207
- $first: Int
208
- $expiryDate: Int
209
- $orderByStringVar: String
170
+ query getNamesForAddress(
171
+ $orderBy: Domain_orderBy
172
+ $orderDirection: OrderDirection
173
+ $first: Int
174
+ $whereFilter: Domain_filter
175
+ ) {
176
+ domains(
177
+ orderBy: $orderBy
178
+ orderDirection: $orderDirection
179
+ first: $first
180
+ where: $whereFilter
210
181
  ) {
211
- domains(
212
- orderBy: $orderBy
213
- orderDirection: $orderDirection
214
- first: $first
215
- where: {
216
- ${whereFilter}
217
- }
218
- ) {
219
- ...DomainDetails
220
- registration {
221
- ...RegistrationDetails
222
- }
223
- wrappedDomain {
224
- ...WrappedDomainDetails
225
- }
182
+ ...DomainDetails
183
+ registration {
184
+ ...RegistrationDetails
185
+ }
186
+ wrappedDomain {
187
+ ...WrappedDomainDetails
226
188
  }
227
189
  }
228
- ${domainDetailsFragment}
229
- ${registrationDetailsFragment}
230
- ${wrappedDomainDetailsFragment}
231
- `;
190
+ }
191
+ ${domainDetailsFragment}
192
+ ${registrationDetailsFragment}
193
+ ${wrappedDomainDetailsFragment}
194
+ `;
232
195
  const result = await subgraphClient.request(query, {
233
- address: address.toLowerCase(),
234
196
  orderBy,
235
197
  orderDirection,
236
198
  first: pageSize,
237
- expiryDate: Math.floor(Date.now() / 1000),
238
- orderByStringVar,
199
+ whereFilter,
239
200
  });
240
201
  if (!result)
241
202
  return [];
@@ -1 +1 @@
1
- {"version":3,"file":"getNamesForAddress.js","sourceRoot":"","sources":["../../../../src/functions/subgraph/getNamesForAddress.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"getNamesForAddress.js","sourceRoot":"","sources":["../../../../src/functions/subgraph/getNamesForAddress.ts"],"names":[],"mappings":"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"}
@@ -1,10 +1,63 @@
1
+ /* eslint-disable @typescript-eslint/naming-convention */
1
2
  import { gql } from 'graphql-request';
2
3
  import { InvalidOrderByError } from '../../errors/subgraph.js';
3
- import { GRACE_PERIOD_SECONDS } from '../../utils/consts.js';
4
+ import { EMPTY_ADDRESS, GRACE_PERIOD_SECONDS } from '../../utils/consts.js';
4
5
  import { namehash } from '../../utils/normalise.js';
5
6
  import { createSubgraphClient } from './client.js';
6
7
  import { domainDetailsWithoutParentFragment, registrationDetailsFragment, wrappedDomainDetailsFragment, } from './fragments.js';
7
8
  import { makeNameObject } from './utils.js';
9
+ const getOrderByFilter = ({ name, orderBy, orderDirection, previousPage, }) => {
10
+ const lastDomain = previousPage[previousPage.length - 1];
11
+ const operator = orderDirection === 'asc' ? 'gt' : 'lt';
12
+ switch (orderBy) {
13
+ case 'expiryDate': {
14
+ let lastExpiryDate = lastDomain.expiryDate?.value
15
+ ? lastDomain.expiryDate.value / 1000
16
+ : 0;
17
+ if (name === 'eth' && lastExpiryDate) {
18
+ lastExpiryDate += GRACE_PERIOD_SECONDS;
19
+ }
20
+ if (orderDirection === 'asc' && lastExpiryDate === 0) {
21
+ return {
22
+ and: [{ expiryDate: null }, { [`id_${operator}`]: lastDomain.id }],
23
+ };
24
+ }
25
+ if (orderDirection === 'desc' && lastExpiryDate !== 0) {
26
+ return {
27
+ [`expiryDate_${operator}`]: `${lastExpiryDate}`,
28
+ };
29
+ }
30
+ return {
31
+ or: [
32
+ {
33
+ [`expiryDate_${operator}`]: `${lastExpiryDate}`,
34
+ },
35
+ { expiryDate: null },
36
+ ],
37
+ };
38
+ }
39
+ case 'name': {
40
+ return {
41
+ [`name_${operator}`]: lastDomain.name ?? '',
42
+ };
43
+ }
44
+ case 'labelName': {
45
+ return {
46
+ [`labelName_${operator}`]: lastDomain.labelName ?? '',
47
+ };
48
+ }
49
+ case 'createdAt': {
50
+ return {
51
+ [`createdAt_${operator}`]: `${lastDomain.createdAt.value / 1000}`,
52
+ };
53
+ }
54
+ default:
55
+ throw new InvalidOrderByError({
56
+ orderBy: orderBy || '<no orderBy provided>',
57
+ supportedOrderBys: ['expiryDate', 'name', 'labelName', 'createdAt'],
58
+ });
59
+ }
60
+ };
8
61
  /**
9
62
  * Gets the subnames for a name from the subgraph.
10
63
  * @param client - {@link ClientWithEns}
@@ -22,140 +75,79 @@ import { makeNameObject } from './utils.js';
22
75
  * })
23
76
  * const result = await getSubnames(client, { name: 'ens.eth' })
24
77
  */
25
- const getSubnames = async (client, { name, searchString, allowExpired = false, orderBy = 'name', orderDirection = 'asc', pageSize = 100, previousPage, }) => {
78
+ const getSubnames = async (client, { name, searchString, allowExpired = false, allowDeleted = false, orderBy = 'name', orderDirection = 'asc', pageSize = 100, previousPage, }) => {
26
79
  const subgraphClient = createSubgraphClient({ client });
27
80
  const whereFilters = [];
28
- let orderByFilter = '';
29
- let orderByStringVar = '';
30
- if (previousPage && previousPage.length > 0) {
31
- const lastDomain = previousPage[previousPage.length - 1];
32
- const operator = orderDirection === 'asc' ? 'gt' : 'lt';
33
- switch (orderBy) {
34
- case 'expiryDate': {
35
- let lastExpiryDate = lastDomain.expiryDate?.value
36
- ? lastDomain.expiryDate.value / 1000
37
- : 0;
38
- if (name === 'eth' && lastExpiryDate) {
39
- lastExpiryDate += GRACE_PERIOD_SECONDS;
40
- }
41
- if (orderDirection === 'asc' && lastExpiryDate === 0) {
42
- orderByFilter = `
43
- {
44
- and: [
45
- { expiryDate: null }
46
- { id_${operator}: "${lastDomain.id}" }
47
- ]
48
- }
49
- `;
50
- }
51
- else if (orderDirection === 'desc' && lastExpiryDate !== 0) {
52
- orderByFilter = `
53
- {
54
- expiryDate_${operator}: ${lastExpiryDate}
55
- }
56
- `;
57
- }
58
- else {
59
- orderByFilter = `
60
- {
61
- or: [
62
- {
63
- expiryDate_${operator}: ${lastExpiryDate}
64
- }
65
- { expiryDate: null }
66
- ]
67
- }
68
- `;
69
- }
70
- break;
71
- }
72
- case 'name': {
73
- orderByFilter = `
74
- {
75
- name_${operator}: $orderByStringVar
76
- }
77
- `;
78
- orderByStringVar = lastDomain.name ?? '';
79
- break;
80
- }
81
- case 'labelName': {
82
- orderByFilter = `
83
- {
84
- labelName_${operator}: $orderByStringVar
85
- }
86
- `;
87
- orderByStringVar = lastDomain.labelName ?? '';
88
- break;
89
- }
90
- case 'createdAt': {
91
- orderByFilter = `
92
- {
93
- createdAt_${operator}: ${lastDomain.createdAt.value / 1000}
94
- }
95
- `;
96
- break;
97
- }
98
- default:
99
- throw new InvalidOrderByError({
100
- orderBy,
101
- supportedOrderBys: ['expiryDate', 'name', 'labelName', 'createdAt'],
102
- });
103
- }
104
- whereFilters.push(orderByFilter);
81
+ if (previousPage?.length) {
82
+ whereFilters.push(getOrderByFilter({
83
+ name,
84
+ orderBy,
85
+ orderDirection,
86
+ previousPage,
87
+ }));
105
88
  }
106
89
  if (!allowExpired) {
107
90
  // Exclude domains that are expired
108
91
  // if expiryDate is null, there is no expiry on the domain (registration or wrapped)
109
- whereFilters.push(`
110
- {
111
- or: [
112
- { expiryDate_gt: $expiryDate }
113
- { expiryDate: null }
114
- ]
115
- }
116
- `);
92
+ whereFilters.push({
93
+ or: [
94
+ { expiryDate_gt: `${Math.floor(Date.now() / 1000)}` },
95
+ { expiryDate: null },
96
+ ],
97
+ });
98
+ }
99
+ if (!allowDeleted) {
100
+ // exclude "deleted" domains
101
+ // when owner/resolver/registrant = null
102
+ whereFilters.push({
103
+ or: [
104
+ {
105
+ owner_not: EMPTY_ADDRESS,
106
+ },
107
+ {
108
+ resolver_not: null,
109
+ },
110
+ ...(name.toLowerCase() === 'eth'
111
+ ? [
112
+ {
113
+ registrant_not: EMPTY_ADDRESS,
114
+ },
115
+ ]
116
+ : []),
117
+ ],
118
+ });
117
119
  }
118
120
  if (searchString) {
119
121
  // using labelName_contains instead of name_contains because name_contains
120
122
  // includes the parent name
121
- whereFilters.push(`
122
- {
123
- labelName_contains: $searchString
124
- }
125
- `);
123
+ whereFilters.push({
124
+ labelName_contains: searchString,
125
+ });
126
126
  }
127
- let whereFilter = '';
127
+ let whereFilter = {};
128
128
  if (whereFilters.length > 1) {
129
- whereFilter = `
130
- and: [
131
- ${whereFilters.join('\n')}
132
- ]
133
- `;
129
+ whereFilter = {
130
+ and: whereFilters,
131
+ };
134
132
  }
135
133
  else if (whereFilters.length === 1) {
136
- whereFilter = whereFilters[0].replace(/{(.*)}/gs, '$1');
134
+ ;
135
+ [whereFilter] = whereFilters;
137
136
  }
138
137
  const query = gql `
139
138
  query getSubnames(
140
139
  $id: String!
141
140
  $orderBy: Domain_orderBy
142
141
  $orderDirection: OrderDirection
142
+ $whereFilter: Domain_filter
143
143
  $first: Int
144
- $expiryDate: Int
145
- $searchString: String
146
- $orderByStringVar: String
147
144
  ) {
148
145
  domain(id: $id) {
149
146
  subdomains(
150
147
  orderBy: $orderBy
151
148
  orderDirection: $orderDirection
152
149
  first: $first
153
- ${whereFilter &&
154
- `
155
- where: {
156
- ${whereFilter}
157
- }
158
- `}
150
+ where: $whereFilter
159
151
  ) {
160
152
  ...DomainDetailsWithoutParent
161
153
  registration {
@@ -176,9 +168,7 @@ const getSubnames = async (client, { name, searchString, allowExpired = false, o
176
168
  orderBy,
177
169
  orderDirection,
178
170
  first: pageSize,
179
- expiryDate: Math.floor(Date.now() / 1000),
180
- searchString,
181
- orderByStringVar,
171
+ whereFilter,
182
172
  };
183
173
  const result = await subgraphClient.request(query, queryVars);
184
174
  if (!result.domain)