@ensdomains/ensjs 3.0.0-alpha.1 → 3.0.0-alpha.12
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.
- package/README.md +2 -0
- package/dist/cjs/GqlManager.d.ts +3 -0
- package/dist/cjs/GqlManager.js +62 -2
- package/dist/cjs/contracts/baseRegistrar.d.ts +1 -1
- package/dist/cjs/contracts/index.d.ts +3 -3
- package/dist/cjs/contracts/multicall.d.ts +1 -1
- package/dist/cjs/contracts/registry.d.ts +1 -1
- package/dist/cjs/functions/burnFuses.d.ts +3 -2
- package/dist/cjs/functions/burnFuses.js +4 -8
- package/dist/cjs/functions/createSubname.d.ts +3 -5
- package/dist/cjs/functions/createSubname.js +7 -8
- package/dist/cjs/functions/deleteSubname.d.ts +3 -3
- package/dist/cjs/functions/deleteSubname.js +6 -2
- package/dist/cjs/functions/getDNSOwner.d.ts +7 -0
- package/dist/cjs/functions/getDNSOwner.js +81 -0
- package/dist/cjs/functions/getExpiry.d.ts +9 -2
- package/dist/cjs/functions/getExpiry.js +52 -7
- package/dist/cjs/functions/getFuses.d.ts +2 -3
- package/dist/cjs/functions/getFuses.js +6 -14
- package/dist/cjs/functions/getHistory.d.ts +0 -30
- package/dist/cjs/functions/getHistory.js +3 -99
- package/dist/cjs/functions/getName.d.ts +2 -2
- package/dist/cjs/functions/getName.js +1 -1
- package/dist/cjs/functions/getOwner.js +7 -6
- package/dist/cjs/functions/getProfile.d.ts +4 -1
- package/dist/cjs/functions/getProfile.js +102 -24
- package/dist/cjs/functions/getRecords.d.ts +1 -0
- package/dist/cjs/functions/getSpecificRecord.js +30 -6
- package/dist/cjs/functions/getSubnames.d.ts +1 -1
- package/dist/cjs/functions/getSubnames.js +7 -7
- package/dist/cjs/functions/setName.d.ts +4 -3
- package/dist/cjs/functions/setName.js +5 -10
- package/dist/cjs/functions/setRecord.d.ts +18 -0
- package/dist/cjs/functions/setRecord.js +27 -0
- package/dist/cjs/functions/setRecords.d.ts +4 -2
- package/dist/cjs/functions/setRecords.js +14 -12
- package/dist/cjs/functions/setResolver.d.ts +4 -4
- package/dist/cjs/functions/setResolver.js +6 -12
- package/dist/cjs/functions/transferName.d.ts +4 -3
- package/dist/cjs/functions/transferName.js +9 -13
- package/dist/cjs/functions/transferSubname.d.ts +13 -3
- package/dist/cjs/functions/transferSubname.js +7 -8
- package/dist/cjs/functions/unwrapName.d.ts +4 -3
- package/dist/cjs/functions/unwrapName.js +5 -9
- package/dist/cjs/functions/wrapName.d.ts +7 -3
- package/dist/cjs/functions/wrapName.js +38 -36
- package/dist/cjs/generated/BaseRegistrarImplementation.d.ts +222 -201
- package/dist/cjs/generated/DNSRegistrar.d.ts +68 -64
- package/dist/cjs/generated/DNSSECImpl.d.ts +111 -111
- package/dist/cjs/generated/DefaultReverseResolver.d.ts +17 -17
- package/dist/cjs/generated/ENSRegistry.d.ts +126 -111
- package/dist/cjs/generated/ETHRegistrarController.d.ts +111 -109
- package/dist/cjs/generated/Multicall.d.ts +60 -60
- package/dist/cjs/generated/NameWrapper.d.ts +493 -354
- package/dist/cjs/generated/P256SHA256Algorithm.d.ts +11 -7
- package/dist/cjs/generated/PublicResolver.d.ts +259 -235
- package/dist/cjs/generated/RSASHA1Algorithm.d.ts +11 -7
- package/dist/cjs/generated/RSASHA256Algorithm.d.ts +11 -7
- package/dist/cjs/generated/ReverseRegistrar.d.ts +112 -103
- package/dist/cjs/generated/Root.d.ts +77 -77
- package/dist/cjs/generated/SHA1Digest.d.ts +7 -7
- package/dist/cjs/generated/SHA1NSEC3Digest.d.ts +11 -7
- package/dist/cjs/generated/SHA256Digest.d.ts +7 -7
- package/dist/cjs/generated/StaticMetadataService.d.ts +7 -7
- package/dist/cjs/generated/TLDPublicSuffixList.d.ts +7 -7
- package/dist/cjs/generated/UniversalResolver.d.ts +31 -31
- package/dist/cjs/generated/common.d.ts +1 -0
- package/dist/cjs/generated/factories/DNSRegistrar__factory.d.ts +3 -15
- package/dist/cjs/generated/factories/DNSRegistrar__factory.js +3 -26
- package/dist/cjs/generated/factories/DNSSECImpl__factory.d.ts +3 -15
- package/dist/cjs/generated/factories/DNSSECImpl__factory.js +3 -26
- package/dist/cjs/generated/factories/ETHRegistrarController__factory.js +14 -4
- package/dist/cjs/generated/factories/NameWrapper__factory.js +210 -79
- package/dist/cjs/generated/factories/P256SHA256Algorithm__factory.d.ts +3 -15
- package/dist/cjs/generated/factories/P256SHA256Algorithm__factory.js +3 -26
- package/dist/cjs/generated/factories/RSASHA1Algorithm__factory.d.ts +3 -15
- package/dist/cjs/generated/factories/RSASHA1Algorithm__factory.js +3 -26
- package/dist/cjs/generated/factories/RSASHA256Algorithm__factory.d.ts +3 -15
- package/dist/cjs/generated/factories/RSASHA256Algorithm__factory.js +3 -26
- package/dist/cjs/generated/factories/SHA1Digest__factory.d.ts +3 -15
- package/dist/cjs/generated/factories/SHA1Digest__factory.js +3 -26
- package/dist/cjs/generated/factories/SHA1NSEC3Digest__factory.d.ts +3 -15
- package/dist/cjs/generated/factories/SHA1NSEC3Digest__factory.js +3 -26
- package/dist/cjs/generated/factories/SHA256Digest__factory.d.ts +3 -15
- package/dist/cjs/generated/factories/SHA256Digest__factory.js +3 -26
- package/dist/cjs/generated/factories/TLDPublicSuffixList__factory.d.ts +3 -15
- package/dist/cjs/generated/factories/TLDPublicSuffixList__factory.js +3 -26
- package/dist/cjs/generated/factories/index.d.ts +14 -0
- package/dist/cjs/generated/factories/index.js +29 -1
- package/dist/cjs/generated/index.d.ts +29 -1
- package/dist/cjs/generated/index.js +31 -3
- package/dist/cjs/index.d.ts +62 -84
- package/dist/cjs/index.js +44 -21
- package/dist/cjs/utils/labels.js +5 -4
- package/dist/cjs/utils/makeHashIndexes.js +2 -2
- package/dist/cjs/utils/normalise.d.ts +1 -0
- package/dist/cjs/utils/normalise.js +27 -1
- package/dist/cjs/utils/recordHelpers.d.ts +3 -0
- package/dist/cjs/utils/recordHelpers.js +42 -15
- package/dist/cjs/utils/registerHelpers.js +3 -4
- package/dist/cjs/utils/wrapperExpiry.d.ts +5 -0
- package/dist/cjs/utils/wrapperExpiry.js +30 -0
- package/dist/cjs/utils/writeTx.d.ts +4 -0
- package/dist/cjs/utils/writeTx.js +3 -0
- package/dist/esm/GqlManager.d.ts +3 -0
- package/dist/esm/GqlManager.js +58 -2
- package/dist/esm/contracts/baseRegistrar.d.ts +1 -1
- package/dist/esm/contracts/index.d.ts +3 -3
- package/dist/esm/contracts/multicall.d.ts +1 -1
- package/dist/esm/contracts/registry.d.ts +1 -1
- package/dist/esm/functions/burnFuses.d.ts +3 -2
- package/dist/esm/functions/burnFuses.js +4 -8
- package/dist/esm/functions/createSubname.d.ts +3 -5
- package/dist/esm/functions/createSubname.js +7 -8
- package/dist/esm/functions/deleteSubname.d.ts +3 -3
- package/dist/esm/functions/deleteSubname.js +6 -2
- package/dist/esm/functions/getDNSOwner.d.ts +7 -0
- package/dist/esm/functions/getDNSOwner.js +51 -0
- package/dist/esm/functions/getExpiry.d.ts +9 -2
- package/dist/esm/functions/getExpiry.js +52 -7
- package/dist/esm/functions/getFuses.d.ts +2 -3
- package/dist/esm/functions/getFuses.js +7 -15
- package/dist/esm/functions/getHistory.d.ts +0 -30
- package/dist/esm/functions/getHistory.js +2 -96
- package/dist/esm/functions/getName.d.ts +2 -2
- package/dist/esm/functions/getName.js +1 -1
- package/dist/esm/functions/getOwner.js +7 -6
- package/dist/esm/functions/getProfile.d.ts +4 -1
- package/dist/esm/functions/getProfile.js +102 -24
- package/dist/esm/functions/getRecords.d.ts +1 -0
- package/dist/esm/functions/getSpecificRecord.js +30 -6
- package/dist/esm/functions/getSubnames.d.ts +1 -1
- package/dist/esm/functions/getSubnames.js +4 -4
- package/dist/esm/functions/setName.d.ts +4 -3
- package/dist/esm/functions/setName.js +5 -10
- package/dist/esm/functions/setRecord.d.ts +18 -0
- package/dist/esm/functions/setRecord.js +24 -0
- package/dist/esm/functions/setRecords.d.ts +4 -2
- package/dist/esm/functions/setRecords.js +14 -12
- package/dist/esm/functions/setResolver.d.ts +4 -4
- package/dist/esm/functions/setResolver.js +6 -12
- package/dist/esm/functions/transferName.d.ts +4 -3
- package/dist/esm/functions/transferName.js +9 -13
- package/dist/esm/functions/transferSubname.d.ts +13 -3
- package/dist/esm/functions/transferSubname.js +7 -8
- package/dist/esm/functions/unwrapName.d.ts +4 -3
- package/dist/esm/functions/unwrapName.js +5 -9
- package/dist/esm/functions/wrapName.d.ts +7 -3
- package/dist/esm/functions/wrapName.js +38 -36
- package/dist/esm/generated/BaseRegistrarImplementation.d.ts +222 -201
- package/dist/esm/generated/DNSRegistrar.d.ts +68 -64
- package/dist/esm/generated/DNSSECImpl.d.ts +111 -111
- package/dist/esm/generated/DefaultReverseResolver.d.ts +17 -17
- package/dist/esm/generated/ENSRegistry.d.ts +126 -111
- package/dist/esm/generated/ETHRegistrarController.d.ts +111 -109
- package/dist/esm/generated/Multicall.d.ts +60 -60
- package/dist/esm/generated/NameWrapper.d.ts +493 -354
- package/dist/esm/generated/P256SHA256Algorithm.d.ts +11 -7
- package/dist/esm/generated/PublicResolver.d.ts +259 -235
- package/dist/esm/generated/RSASHA1Algorithm.d.ts +11 -7
- package/dist/esm/generated/RSASHA256Algorithm.d.ts +11 -7
- package/dist/esm/generated/ReverseRegistrar.d.ts +112 -103
- package/dist/esm/generated/Root.d.ts +77 -77
- package/dist/esm/generated/SHA1Digest.d.ts +7 -7
- package/dist/esm/generated/SHA1NSEC3Digest.d.ts +11 -7
- package/dist/esm/generated/SHA256Digest.d.ts +7 -7
- package/dist/esm/generated/StaticMetadataService.d.ts +7 -7
- package/dist/esm/generated/TLDPublicSuffixList.d.ts +7 -7
- package/dist/esm/generated/UniversalResolver.d.ts +31 -31
- package/dist/esm/generated/common.d.ts +1 -0
- package/dist/esm/generated/factories/DNSRegistrar__factory.d.ts +3 -15
- package/dist/esm/generated/factories/DNSRegistrar__factory.js +2 -25
- package/dist/esm/generated/factories/DNSSECImpl__factory.d.ts +3 -15
- package/dist/esm/generated/factories/DNSSECImpl__factory.js +2 -25
- package/dist/esm/generated/factories/ETHRegistrarController__factory.js +14 -4
- package/dist/esm/generated/factories/NameWrapper__factory.js +210 -79
- package/dist/esm/generated/factories/P256SHA256Algorithm__factory.d.ts +3 -15
- package/dist/esm/generated/factories/P256SHA256Algorithm__factory.js +2 -25
- package/dist/esm/generated/factories/RSASHA1Algorithm__factory.d.ts +3 -15
- package/dist/esm/generated/factories/RSASHA1Algorithm__factory.js +2 -25
- package/dist/esm/generated/factories/RSASHA256Algorithm__factory.d.ts +3 -15
- package/dist/esm/generated/factories/RSASHA256Algorithm__factory.js +2 -25
- package/dist/esm/generated/factories/SHA1Digest__factory.d.ts +3 -15
- package/dist/esm/generated/factories/SHA1Digest__factory.js +2 -25
- package/dist/esm/generated/factories/SHA1NSEC3Digest__factory.d.ts +3 -15
- package/dist/esm/generated/factories/SHA1NSEC3Digest__factory.js +2 -25
- package/dist/esm/generated/factories/SHA256Digest__factory.d.ts +3 -15
- package/dist/esm/generated/factories/SHA256Digest__factory.js +2 -25
- package/dist/esm/generated/factories/TLDPublicSuffixList__factory.d.ts +3 -15
- package/dist/esm/generated/factories/TLDPublicSuffixList__factory.js +2 -25
- package/dist/esm/generated/factories/index.d.ts +14 -0
- package/dist/esm/generated/factories/index.js +14 -0
- package/dist/esm/generated/index.d.ts +29 -1
- package/dist/esm/generated/index.js +15 -1
- package/dist/esm/index.d.ts +62 -84
- package/dist/esm/index.js +44 -21
- package/dist/esm/utils/labels.js +5 -4
- package/dist/esm/utils/makeHashIndexes.js +2 -2
- package/dist/esm/utils/normalise.d.ts +1 -0
- package/dist/esm/utils/normalise.js +25 -0
- package/dist/esm/utils/recordHelpers.d.ts +3 -0
- package/dist/esm/utils/recordHelpers.js +40 -14
- package/dist/esm/utils/registerHelpers.js +3 -4
- package/dist/esm/utils/wrapperExpiry.d.ts +5 -0
- package/dist/esm/utils/wrapperExpiry.js +26 -0
- package/dist/esm/utils/writeTx.d.ts +4 -0
- package/dist/esm/utils/writeTx.js +1 -0
- package/package.json +24 -14
- package/src/@types/dns-packet/index.d.ts +114 -0
- package/src/ABIs/Multicall.json +452 -0
- package/src/GqlManager.test.ts +170 -0
- package/src/GqlManager.ts +67 -2
- package/src/contracts/index.ts +1 -1
- package/src/{tests → functions}/batch.test.ts +7 -7
- package/src/{tests → functions}/batchWrappers.test.ts +6 -6
- package/src/{tests → functions}/burnFuses.test.ts +12 -15
- package/src/functions/burnFuses.ts +9 -11
- package/src/{tests → functions}/createSubname.test.ts +9 -17
- package/src/functions/createSubname.ts +20 -14
- package/src/{tests → functions}/deleteSubname.test.ts +12 -31
- package/src/functions/deleteSubname.ts +10 -12
- package/src/functions/getDNSOwner.test.ts +118 -0
- package/src/functions/getDNSOwner.ts +61 -0
- package/src/functions/getExpiry.test.ts +59 -0
- package/src/functions/getExpiry.ts +87 -9
- package/src/{tests → functions}/getFuses.test.ts +16 -37
- package/src/functions/getFuses.ts +12 -17
- package/src/functions/getHistory.test.ts +29 -0
- package/src/functions/getHistory.ts +2 -127
- package/src/{tests → functions}/getName.test.ts +6 -6
- package/src/functions/getName.ts +1 -1
- package/src/{tests → functions}/getNames.test.ts +98 -69
- package/src/{tests → functions}/getOwner.test.ts +21 -24
- package/src/functions/getOwner.ts +7 -7
- package/src/functions/getProfile.test.ts +143 -0
- package/src/functions/getProfile.ts +151 -24
- package/src/functions/getRecords.ts +1 -0
- package/src/functions/getResolver.test.ts +15 -0
- package/src/{tests → functions}/getSpecificRecord.test.ts +17 -14
- package/src/functions/getSpecificRecord.ts +38 -12
- package/src/functions/getSubnames.test.ts +35 -0
- package/src/functions/getSubnames.ts +76 -67
- package/src/{tests → functions}/makeCommitment.test.ts +2 -2
- package/src/functions/normalise.test.ts +22 -0
- package/src/{tests → functions}/setName.test.ts +11 -11
- package/src/functions/setName.ts +15 -17
- package/src/functions/setRecord.test.ts +103 -0
- package/src/functions/setRecord.ts +63 -0
- package/src/{tests → functions}/setRecords.test.ts +16 -13
- package/src/functions/setRecords.ts +22 -16
- package/src/{tests → functions}/setResolver.test.ts +13 -19
- package/src/functions/setResolver.ts +15 -20
- package/src/{tests → functions}/transferName.test.ts +20 -35
- package/src/functions/transferName.ts +19 -22
- package/src/{tests → functions}/transferSubname.test.ts +14 -33
- package/src/functions/transferSubname.ts +39 -13
- package/src/{tests → functions}/unwrapName.test.ts +16 -30
- package/src/functions/unwrapName.ts +20 -15
- package/src/functions/wrapName.test.ts +142 -0
- package/src/functions/wrapName.ts +63 -49
- package/src/generated/BaseRegistrarImplementation.ts +382 -296
- package/src/generated/DNSRegistrar.ts +103 -89
- package/src/generated/DNSSECImpl.ts +180 -149
- package/src/generated/DefaultReverseResolver.ts +37 -21
- package/src/generated/ENSRegistry.ts +257 -184
- package/src/generated/ETHRegistrarController.ts +252 -191
- package/src/generated/Multicall.ts +73 -57
- package/src/generated/NameWrapper.ts +979 -649
- package/src/generated/P256SHA256Algorithm.ts +21 -16
- package/src/generated/PublicResolver.ts +452 -362
- package/src/generated/RSASHA1Algorithm.ts +21 -16
- package/src/generated/RSASHA256Algorithm.ts +21 -16
- package/src/generated/ReverseRegistrar.ts +193 -141
- package/src/generated/Root.ts +146 -86
- package/src/generated/SHA1Digest.ts +12 -11
- package/src/generated/SHA1NSEC3Digest.ts +21 -16
- package/src/generated/SHA256Digest.ts +12 -11
- package/src/generated/StaticMetadataService.ts +22 -6
- package/src/generated/TLDPublicSuffixList.ts +10 -6
- package/src/generated/UniversalResolver.ts +44 -40
- package/src/generated/common.ts +2 -0
- package/src/generated/factories/DNSRegistrar__factory.ts +4 -56
- package/src/generated/factories/DNSSECImpl__factory.ts +4 -49
- package/src/generated/factories/ETHRegistrarController__factory.ts +14 -4
- package/src/generated/factories/NameWrapper__factory.ts +210 -79
- package/src/generated/factories/P256SHA256Algorithm__factory.ts +4 -40
- package/src/generated/factories/RSASHA1Algorithm__factory.ts +4 -40
- package/src/generated/factories/RSASHA256Algorithm__factory.ts +4 -40
- package/src/generated/factories/SHA1Digest__factory.ts +4 -40
- package/src/generated/factories/SHA1NSEC3Digest__factory.ts +4 -40
- package/src/generated/factories/SHA256Digest__factory.ts +4 -40
- package/src/generated/factories/TLDPublicSuffixList__factory.ts +4 -40
- package/src/generated/factories/index.ts +14 -0
- package/src/generated/index.ts +29 -1
- package/src/index.ts +117 -47
- package/src/tests/populateTransaction.test.ts +40 -0
- package/src/tests/setup.ts +17 -13
- package/src/tests/signerInjection.test.ts +46 -0
- package/src/tests/withProvider.test.ts +3 -3
- package/src/utils/labels.ts +6 -4
- package/src/utils/makeHashIndexes.ts +4 -4
- package/src/utils/normalise.ts +29 -0
- package/src/utils/recordHelpers.ts +52 -18
- package/src/utils/registerHelpers.ts +3 -4
- package/src/utils/wrapperExpiry.ts +31 -0
- package/src/utils/writeTx.ts +6 -0
- package/dist/cjs/contracts/doNotCallOnChainUniversalResolverProxy.d.ts +0 -3
- package/dist/cjs/contracts/doNotCallOnChainUniversalResolverProxy.js +0 -4
- package/dist/cjs/generated/DoNotCallOnChainUniversalResolverProxy.d.ts +0 -144
- package/dist/cjs/generated/DoNotCallOnChainUniversalResolverProxy.js +0 -2
- package/dist/cjs/generated/factories/DoNotCallOnChainUniversalResolverProxy__factory.d.ts +0 -56
- package/dist/cjs/generated/factories/DoNotCallOnChainUniversalResolverProxy__factory.js +0 -171
- package/dist/esm/contracts/doNotCallOnChainUniversalResolverProxy.d.ts +0 -3
- package/dist/esm/contracts/doNotCallOnChainUniversalResolverProxy.js +0 -2
- package/dist/esm/generated/DoNotCallOnChainUniversalResolverProxy.d.ts +0 -144
- package/dist/esm/generated/DoNotCallOnChainUniversalResolverProxy.js +0 -1
- package/dist/esm/generated/factories/DoNotCallOnChainUniversalResolverProxy__factory.d.ts +0 -56
- package/dist/esm/generated/factories/DoNotCallOnChainUniversalResolverProxy__factory.js +0 -167
- package/src/ABIs/ETHRegistrarController.json +0 -494
- package/src/ABIs/NameWrapper.json +0 -1183
- package/src/ABIs/PublicResolver.json +0 -875
- package/src/ABIs/ReverseRegistrar.json +0 -323
- package/src/ABIs/StaticMetadataService.json +0 -32
- package/src/ABIs/UniversalResolver.json +0 -187
- package/src/contracts/doNotCallOnChainUniversalResolverProxy.ts +0 -5
- package/src/generated/DoNotCallOnChainUniversalResolverProxy.ts +0 -285
- package/src/generated/factories/DoNotCallOnChainUniversalResolverProxy__factory.ts +0 -186
- package/src/tests/getExpiry.test.ts +0 -37
- package/src/tests/getHistory.test.ts +0 -101
- package/src/tests/getProfile.test.ts +0 -102
- package/src/tests/getResolver.test.ts +0 -19
- package/src/tests/getSubnames.test.ts +0 -31
- package/src/tests/wrapName.test.ts +0 -67
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.makeExpiry = exports.MAX_EXPIRY = void 0;
|
|
4
|
+
const ethers_1 = require("ethers");
|
|
5
|
+
exports.MAX_EXPIRY = ethers_1.BigNumber.from(2).pow(64).sub(1);
|
|
6
|
+
const makeExpiry = async ({ getExpiry }, name, expiry) => {
|
|
7
|
+
if (expiry) {
|
|
8
|
+
if (expiry instanceof Date) {
|
|
9
|
+
return ethers_1.BigNumber.from(expiry.getTime() / 1000);
|
|
10
|
+
}
|
|
11
|
+
else if (expiry instanceof ethers_1.BigNumber) {
|
|
12
|
+
return expiry;
|
|
13
|
+
}
|
|
14
|
+
else {
|
|
15
|
+
return ethers_1.BigNumber.from(expiry);
|
|
16
|
+
}
|
|
17
|
+
}
|
|
18
|
+
else {
|
|
19
|
+
if (name.endsWith('.eth')) {
|
|
20
|
+
const expResponse = await getExpiry(name);
|
|
21
|
+
if (!expResponse?.expiry)
|
|
22
|
+
throw new Error("Couldn't get expiry for name, please provide one.");
|
|
23
|
+
return ethers_1.BigNumber.from(expResponse.expiry.getTime() / 1000);
|
|
24
|
+
}
|
|
25
|
+
else {
|
|
26
|
+
return exports.MAX_EXPIRY;
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
};
|
|
30
|
+
exports.makeExpiry = makeExpiry;
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import { JsonRpcSigner } from '@ethersproject/providers';
|
|
2
|
+
import type { PopulatedTransaction } from 'ethers';
|
|
3
|
+
declare const _default: (signer: JsonRpcSigner, populate: boolean) => (tx: PopulatedTransaction) => PopulatedTransaction | Promise<import("@ethersproject/abstract-provider").TransactionResponse>;
|
|
4
|
+
export default _default;
|
package/dist/esm/GqlManager.d.ts
CHANGED
|
@@ -1,3 +1,6 @@
|
|
|
1
|
+
export declare const enter: (node: any) => any;
|
|
2
|
+
export declare const requestMiddleware: (visit: any, parse: any) => (request: any) => any;
|
|
3
|
+
export declare const responseMiddleware: (traverse: any) => (response: any) => any;
|
|
1
4
|
export default class GqlManager {
|
|
2
5
|
gql: any;
|
|
3
6
|
client?: any | null;
|
package/dist/esm/GqlManager.js
CHANGED
|
@@ -1,11 +1,67 @@
|
|
|
1
|
+
// @ts-nocheck
|
|
2
|
+
import { namehash } from './utils/normalise';
|
|
3
|
+
const generateSelection = (selection) => ({
|
|
4
|
+
kind: 'Field',
|
|
5
|
+
name: {
|
|
6
|
+
kind: 'Name',
|
|
7
|
+
value: selection,
|
|
8
|
+
},
|
|
9
|
+
arguments: [],
|
|
10
|
+
directives: [],
|
|
11
|
+
alias: undefined,
|
|
12
|
+
selectionSet: undefined,
|
|
13
|
+
});
|
|
14
|
+
export const enter = (node) => {
|
|
15
|
+
if (node.kind === 'SelectionSet') {
|
|
16
|
+
const id = node.selections.find((x) => x.name && x.name.value === 'id');
|
|
17
|
+
const name = node.selections.find((x) => x.name && x.name.value === 'name');
|
|
18
|
+
if (!id && name) {
|
|
19
|
+
node.selections = [...node.selections, generateSelection('id')];
|
|
20
|
+
return node;
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
};
|
|
24
|
+
export const requestMiddleware = (visit, parse) => (request) => {
|
|
25
|
+
const requestBody = JSON.parse(request.body);
|
|
26
|
+
const rawQuery = requestBody.query;
|
|
27
|
+
const parsedQuery = parse(rawQuery);
|
|
28
|
+
const updatedQuery = visit(parsedQuery, { enter });
|
|
29
|
+
const updatedBody = { ...requestBody, query: updatedQuery.loc.source.body };
|
|
30
|
+
return {
|
|
31
|
+
...request,
|
|
32
|
+
body: JSON.stringify(updatedBody),
|
|
33
|
+
};
|
|
34
|
+
};
|
|
35
|
+
export const responseMiddleware = (traverse) => (response) => {
|
|
36
|
+
traverse(response).forEach(function (responseItem) {
|
|
37
|
+
if (responseItem instanceof Object && responseItem.name) {
|
|
38
|
+
//Name already in hashed form
|
|
39
|
+
if (responseItem.name && responseItem.name.includes('[')) {
|
|
40
|
+
return;
|
|
41
|
+
}
|
|
42
|
+
const hashedName = namehash(responseItem.name);
|
|
43
|
+
if (responseItem.id !== hashedName) {
|
|
44
|
+
this.update({ ...responseItem, name: hashedName, invalidName: true });
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
});
|
|
48
|
+
return response;
|
|
49
|
+
};
|
|
1
50
|
export default class GqlManager {
|
|
2
51
|
constructor() {
|
|
3
52
|
this.gql = () => null;
|
|
4
53
|
this.client = null;
|
|
5
54
|
this.setUrl = async (url) => {
|
|
6
55
|
if (url) {
|
|
7
|
-
const imported = await
|
|
8
|
-
|
|
56
|
+
const [imported, traverse, { visit, parse }] = await Promise.all([
|
|
57
|
+
import('graphql-request'),
|
|
58
|
+
import('traverse'),
|
|
59
|
+
import('graphql/language'),
|
|
60
|
+
]);
|
|
61
|
+
this.client = new imported.GraphQLClient(url, {
|
|
62
|
+
requestMiddleware: requestMiddleware(visit, parse),
|
|
63
|
+
responseMiddleware: responseMiddleware(traverse.default),
|
|
64
|
+
});
|
|
9
65
|
this.gql = imported.gql;
|
|
10
66
|
}
|
|
11
67
|
else {
|
|
@@ -1,3 +1,3 @@
|
|
|
1
1
|
import { ethers } from 'ethers';
|
|
2
|
-
declare const _default: (provider: ethers.providers.JsonRpcProvider, address: string) => import("../generated
|
|
2
|
+
declare const _default: (provider: ethers.providers.JsonRpcProvider, address: string) => import("../generated").BaseRegistrarImplementation;
|
|
3
3
|
export default _default;
|
|
@@ -7,10 +7,10 @@ export default class ContractManager {
|
|
|
7
7
|
private generateContractGetter;
|
|
8
8
|
getPublicResolver: (passedProvider?: any, address?: string | undefined) => Promise<import("../generated").PublicResolver>;
|
|
9
9
|
getUniversalResolver: (passedProvider?: any, address?: string | undefined) => Promise<import("../generated").UniversalResolver>;
|
|
10
|
-
getRegistry: (passedProvider?: any, address?: string | undefined) => Promise<import("../generated
|
|
10
|
+
getRegistry: (passedProvider?: any, address?: string | undefined) => Promise<import("../generated").ENSRegistry>;
|
|
11
11
|
getReverseRegistrar: (passedProvider?: any, address?: string | undefined) => Promise<import("../generated").ReverseRegistrar>;
|
|
12
12
|
getNameWrapper: (passedProvider?: any, address?: string | undefined) => Promise<import("../generated").NameWrapper>;
|
|
13
|
-
getBaseRegistrar: (passedProvider?: any, address?: string | undefined) => Promise<import("../generated
|
|
13
|
+
getBaseRegistrar: (passedProvider?: any, address?: string | undefined) => Promise<import("../generated").BaseRegistrarImplementation>;
|
|
14
14
|
getEthRegistrarController: (passedProvider?: any, address?: string | undefined) => Promise<import("../generated").ETHRegistrarController>;
|
|
15
|
-
getMulticall: (passedProvider?: any, address?: string | undefined) => Promise<import("../generated
|
|
15
|
+
getMulticall: (passedProvider?: any, address?: string | undefined) => Promise<import("../generated").Multicall>;
|
|
16
16
|
}
|
|
@@ -1,3 +1,3 @@
|
|
|
1
1
|
import { ethers } from 'ethers';
|
|
2
|
-
declare const _default: (provider: ethers.providers.JsonRpcProvider, address: string) => import("../generated
|
|
2
|
+
declare const _default: (provider: ethers.providers.JsonRpcProvider, address: string) => import("../generated").Multicall;
|
|
3
3
|
export default _default;
|
|
@@ -1,3 +1,3 @@
|
|
|
1
1
|
import { ethers } from 'ethers';
|
|
2
|
-
declare const _default: (provider: ethers.providers.JsonRpcProvider, address: string) => import("../generated
|
|
2
|
+
declare const _default: (provider: ethers.providers.JsonRpcProvider, address: string) => import("../generated").ENSRegistry;
|
|
3
3
|
export default _default;
|
|
@@ -1,4 +1,5 @@
|
|
|
1
|
-
import { ethers } from 'ethers';
|
|
2
1
|
import { ENSArgs } from '..';
|
|
3
2
|
import { FuseOptions } from '../@types/FuseOptions';
|
|
4
|
-
export default function ({ contracts,
|
|
3
|
+
export default function ({ contracts, signer }: ENSArgs<'contracts' | 'signer'>, name: string, { fusesToBurn, }: {
|
|
4
|
+
fusesToBurn: FuseOptions;
|
|
5
|
+
}): Promise<import("ethers").PopulatedTransaction>;
|
|
@@ -1,12 +1,8 @@
|
|
|
1
|
-
import { ethers } from 'ethers';
|
|
2
1
|
import generateFuseInput from '../utils/generateFuseInput';
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
if (!signer) {
|
|
6
|
-
throw new Error('No signer found');
|
|
7
|
-
}
|
|
2
|
+
import { namehash } from '../utils/normalise';
|
|
3
|
+
export default async function ({ contracts, signer }, name, { fusesToBurn, }) {
|
|
8
4
|
const nameWrapper = (await contracts?.getNameWrapper()).connect(signer);
|
|
9
|
-
const
|
|
5
|
+
const hash = namehash(name);
|
|
10
6
|
const encodedFuses = generateFuseInput(fusesToBurn);
|
|
11
|
-
return nameWrapper.
|
|
7
|
+
return nameWrapper.populateTransaction.setFuses(hash, encodedFuses);
|
|
12
8
|
}
|
|
@@ -1,19 +1,17 @@
|
|
|
1
1
|
import { ethers } from 'ethers';
|
|
2
2
|
import { ENSArgs } from '..';
|
|
3
3
|
import { FuseOptions } from '../@types/FuseOptions';
|
|
4
|
+
import { Expiry } from '../utils/wrapperExpiry';
|
|
4
5
|
declare type BaseArgs = {
|
|
5
|
-
name: string;
|
|
6
6
|
owner: string;
|
|
7
7
|
resolverAddress?: string;
|
|
8
8
|
contract: 'registry' | 'nameWrapper';
|
|
9
|
-
options?: {
|
|
10
|
-
addressOrIndex?: string | number;
|
|
11
|
-
};
|
|
12
9
|
};
|
|
13
10
|
declare type NameWrapperArgs = {
|
|
14
11
|
contract: 'nameWrapper';
|
|
15
12
|
fuses?: FuseOptions;
|
|
13
|
+
expiry?: Expiry;
|
|
16
14
|
} & BaseArgs;
|
|
17
15
|
declare type Args = BaseArgs | NameWrapperArgs;
|
|
18
|
-
export default function ({ contracts,
|
|
16
|
+
export default function ({ contracts, signer, getExpiry, }: ENSArgs<'contracts' | 'signer' | 'getExpiry'>, name: string, { owner, resolverAddress, contract, ...wrapperArgs }: Args): Promise<ethers.PopulatedTransaction>;
|
|
19
17
|
export {};
|
|
@@ -1,10 +1,8 @@
|
|
|
1
1
|
import { ethers } from 'ethers';
|
|
2
2
|
import generateFuseInput from '../utils/generateFuseInput';
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
throw new Error('No signer found');
|
|
7
|
-
}
|
|
3
|
+
import { namehash } from '../utils/normalise';
|
|
4
|
+
import { makeExpiry } from '../utils/wrapperExpiry';
|
|
5
|
+
export default async function ({ contracts, signer, getExpiry, }, name, { owner, resolverAddress, contract, ...wrapperArgs }) {
|
|
8
6
|
const labels = name.split('.');
|
|
9
7
|
if (labels.length === 1) {
|
|
10
8
|
throw new Error('Subnames in ENS.js can only be created for 2LDs, not TLDs');
|
|
@@ -17,18 +15,19 @@ export default async function ({ contracts, provider }, { name, owner, resolverA
|
|
|
17
15
|
}
|
|
18
16
|
const label = labels.shift();
|
|
19
17
|
const labelhash = ethers.utils.solidityKeccak256(['string'], [label]);
|
|
20
|
-
const parentNodehash =
|
|
18
|
+
const parentNodehash = namehash(labels.join('.'));
|
|
21
19
|
switch (contract) {
|
|
22
20
|
case 'registry': {
|
|
23
21
|
const registry = (await contracts?.getRegistry()).connect(signer);
|
|
24
|
-
return registry.setSubnodeRecord(parentNodehash, labelhash, owner, resolverAddress, 0);
|
|
22
|
+
return registry.populateTransaction.setSubnodeRecord(parentNodehash, labelhash, owner, resolverAddress, 0);
|
|
25
23
|
}
|
|
26
24
|
case 'nameWrapper': {
|
|
27
25
|
const nameWrapper = (await contracts?.getNameWrapper()).connect(signer);
|
|
26
|
+
const expiry = await makeExpiry({ getExpiry }, name, 'expiry' in wrapperArgs ? wrapperArgs.expiry : undefined);
|
|
28
27
|
const generatedFuses = 'fuses' in wrapperArgs && wrapperArgs.fuses
|
|
29
28
|
? generateFuseInput(wrapperArgs.fuses)
|
|
30
29
|
: '0';
|
|
31
|
-
return nameWrapper.setSubnodeRecord(parentNodehash, label, owner, resolverAddress, 0, generatedFuses);
|
|
30
|
+
return nameWrapper.populateTransaction.setSubnodeRecord(parentNodehash, label, owner, resolverAddress, 0, generatedFuses, expiry);
|
|
32
31
|
}
|
|
33
32
|
default: {
|
|
34
33
|
throw new Error(`Unknown contract: ${contract}`);
|
|
@@ -1,4 +1,4 @@
|
|
|
1
1
|
import { ENSArgs } from '..';
|
|
2
|
-
export default function ({
|
|
3
|
-
|
|
4
|
-
}): Promise<import("ethers").
|
|
2
|
+
export default function ({ transferSubname, signer }: ENSArgs<'transferSubname' | 'signer'>, name: string, { contract, }: {
|
|
3
|
+
contract: 'registry' | 'nameWrapper';
|
|
4
|
+
}): Promise<import("ethers").PopulatedTransaction>;
|
|
@@ -1,3 +1,7 @@
|
|
|
1
|
-
export default async function ({
|
|
2
|
-
return transferSubname(name,
|
|
1
|
+
export default async function ({ transferSubname, signer }, name, { contract, }) {
|
|
2
|
+
return transferSubname.populateTransaction(name, {
|
|
3
|
+
contract,
|
|
4
|
+
owner: '0x0000000000000000000000000000000000000000',
|
|
5
|
+
signer,
|
|
6
|
+
});
|
|
3
7
|
}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import * as packet from 'dns-packet';
|
|
2
|
+
export declare function encodeURLParams(p: {
|
|
3
|
+
[key: string]: string;
|
|
4
|
+
}): string;
|
|
5
|
+
export declare const getDNS: (q: packet.Packet) => Promise<packet.Packet>;
|
|
6
|
+
export declare const dnsQuery: (qtype: string, qname: string) => Promise<packet.Packet>;
|
|
7
|
+
export default function (_: any, dnsName: string): Promise<any>;
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
import * as packet from 'dns-packet';
|
|
2
|
+
export function encodeURLParams(p) {
|
|
3
|
+
return Object.entries(p)
|
|
4
|
+
.map((kv) => kv.map(encodeURIComponent).join('='))
|
|
5
|
+
.join('&');
|
|
6
|
+
}
|
|
7
|
+
export const getDNS = async (q) => {
|
|
8
|
+
const response = await global.fetch(`https://cloudflare-dns.com/dns-query?${encodeURLParams({
|
|
9
|
+
ct: 'application/dns-udpwireformat',
|
|
10
|
+
dns: packet.encode(q)?.toString('base64'),
|
|
11
|
+
ts: Date.now().toString(),
|
|
12
|
+
})}`);
|
|
13
|
+
const arrayBuffer = await response.arrayBuffer();
|
|
14
|
+
// @ts-ignore:next-line
|
|
15
|
+
const fromArrayBuffer = Buffer.from(arrayBuffer);
|
|
16
|
+
return packet.decode(fromArrayBuffer);
|
|
17
|
+
};
|
|
18
|
+
export const dnsQuery = async (qtype, qname) => {
|
|
19
|
+
const query = {
|
|
20
|
+
type: 'query',
|
|
21
|
+
id: 1,
|
|
22
|
+
flags: packet.RECURSION_DESIRED,
|
|
23
|
+
questions: [
|
|
24
|
+
{
|
|
25
|
+
type: qtype,
|
|
26
|
+
class: 'IN',
|
|
27
|
+
name: qname,
|
|
28
|
+
},
|
|
29
|
+
],
|
|
30
|
+
additionals: [
|
|
31
|
+
{
|
|
32
|
+
type: 'OPT',
|
|
33
|
+
class: 'IN',
|
|
34
|
+
name: '.',
|
|
35
|
+
udpPayloadSize: 4096,
|
|
36
|
+
flags: packet.DNSSEC_OK,
|
|
37
|
+
},
|
|
38
|
+
],
|
|
39
|
+
answers: [],
|
|
40
|
+
};
|
|
41
|
+
const response = await getDNS(query);
|
|
42
|
+
if (response.rcode !== 'NOERROR') {
|
|
43
|
+
throw new Error(`DNS query failed: ${response.rcode}`);
|
|
44
|
+
}
|
|
45
|
+
return response;
|
|
46
|
+
};
|
|
47
|
+
export default async function (_, dnsName) {
|
|
48
|
+
const result = await dnsQuery('TXT', `_ens.${dnsName}`);
|
|
49
|
+
const address = result?.answers?.[0]?.data?.[0]?.toString()?.split('=')?.[1];
|
|
50
|
+
return address;
|
|
51
|
+
}
|
|
@@ -1,10 +1,17 @@
|
|
|
1
1
|
import { ENSArgs } from '..';
|
|
2
|
+
declare type ContractOption = 'registrar' | 'nameWrapper';
|
|
3
|
+
declare type Args = {
|
|
4
|
+
contract?: ContractOption;
|
|
5
|
+
};
|
|
2
6
|
declare const _default: {
|
|
3
|
-
raw: (
|
|
7
|
+
raw: (ensArgs: ENSArgs<"contracts" | "multicallWrapper">, name: string, { contract }?: Args) => Promise<{
|
|
4
8
|
to: string;
|
|
5
9
|
data: string;
|
|
6
10
|
}>;
|
|
7
|
-
decode: (
|
|
11
|
+
decode: (ensArgs: ENSArgs<"contracts" | "multicallWrapper">, data: string, name: string, { contract }?: Args) => Promise<{
|
|
12
|
+
expiry: Date;
|
|
13
|
+
gracePeriod: null;
|
|
14
|
+
} | {
|
|
8
15
|
expiry: Date | null;
|
|
9
16
|
gracePeriod: number;
|
|
10
17
|
} | undefined>;
|
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
import { solidityKeccak256 } from 'ethers/lib/utils';
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
const labels = name.split('.');
|
|
2
|
+
import { namehash } from '../utils/normalise';
|
|
3
|
+
const getRegistrarExpiry = async ({ contracts, multicallWrapper }, labels) => {
|
|
5
4
|
if (labels.length > 2 || labels[1] !== 'eth') {
|
|
6
|
-
throw new Error('Only .eth names have expiry dates');
|
|
5
|
+
throw new Error('Only .eth names have expiry dates on the registrar');
|
|
7
6
|
}
|
|
7
|
+
const baseRegistrar = await contracts?.getBaseRegistrar();
|
|
8
8
|
const expiryCall = baseRegistrar.interface.encodeFunctionData('nameExpires', [
|
|
9
9
|
solidityKeccak256(['string'], [labels[0]]),
|
|
10
10
|
]);
|
|
@@ -20,9 +20,32 @@ const raw = async ({ contracts, multicallWrapper }, name) => {
|
|
|
20
20
|
},
|
|
21
21
|
]);
|
|
22
22
|
};
|
|
23
|
-
const
|
|
24
|
-
|
|
25
|
-
|
|
23
|
+
const getWrapperExpiry = async ({ contracts }, labels) => {
|
|
24
|
+
const nameWrapper = await contracts?.getNameWrapper();
|
|
25
|
+
const expiryCall = nameWrapper.interface.encodeFunctionData('getData', [
|
|
26
|
+
namehash(labels.join('.')),
|
|
27
|
+
]);
|
|
28
|
+
return {
|
|
29
|
+
to: nameWrapper.address,
|
|
30
|
+
data: expiryCall,
|
|
31
|
+
};
|
|
32
|
+
};
|
|
33
|
+
const getContractToUse = (contract, labels) => {
|
|
34
|
+
if (contract)
|
|
35
|
+
return contract;
|
|
36
|
+
if (labels.length === 2 && labels[1] === 'eth') {
|
|
37
|
+
return 'registrar';
|
|
38
|
+
}
|
|
39
|
+
return 'nameWrapper';
|
|
40
|
+
};
|
|
41
|
+
const raw = async (ensArgs, name, { contract } = {}) => {
|
|
42
|
+
const labels = name.split('.');
|
|
43
|
+
const contractToUse = getContractToUse(contract, labels);
|
|
44
|
+
return contractToUse === 'nameWrapper'
|
|
45
|
+
? getWrapperExpiry(ensArgs, labels)
|
|
46
|
+
: getRegistrarExpiry(ensArgs, labels);
|
|
47
|
+
};
|
|
48
|
+
const decodeRegistrarExpiry = async ({ contracts, multicallWrapper }, data) => {
|
|
26
49
|
const result = await multicallWrapper.decode(data);
|
|
27
50
|
const baseRegistrar = await contracts?.getBaseRegistrar();
|
|
28
51
|
try {
|
|
@@ -37,6 +60,28 @@ const decode = async ({ contracts, multicallWrapper }, data) => {
|
|
|
37
60
|
return;
|
|
38
61
|
}
|
|
39
62
|
};
|
|
63
|
+
const decodeWrapperExpiry = async ({ contracts }, data) => {
|
|
64
|
+
const nameWrapper = await contracts?.getNameWrapper();
|
|
65
|
+
try {
|
|
66
|
+
const [_owner, _fuses, expiry] = nameWrapper.interface.decodeFunctionResult('getData', data);
|
|
67
|
+
return {
|
|
68
|
+
expiry: new Date(expiry * 1000),
|
|
69
|
+
gracePeriod: null,
|
|
70
|
+
};
|
|
71
|
+
}
|
|
72
|
+
catch {
|
|
73
|
+
return;
|
|
74
|
+
}
|
|
75
|
+
};
|
|
76
|
+
const decode = async (ensArgs, data, name, { contract } = {}) => {
|
|
77
|
+
if (data === null)
|
|
78
|
+
return;
|
|
79
|
+
const labels = name.split('.');
|
|
80
|
+
const contractToUse = getContractToUse(contract, labels);
|
|
81
|
+
return contractToUse === 'nameWrapper'
|
|
82
|
+
? decodeWrapperExpiry(ensArgs, data)
|
|
83
|
+
: decodeRegistrarExpiry(ensArgs, data);
|
|
84
|
+
};
|
|
40
85
|
export default {
|
|
41
86
|
raw,
|
|
42
87
|
decode,
|
|
@@ -7,10 +7,9 @@ declare const _default: {
|
|
|
7
7
|
}>;
|
|
8
8
|
decode: ({ contracts }: ENSArgs<"contracts">, data: string, name: string) => Promise<{
|
|
9
9
|
fuseObj: {
|
|
10
|
-
[k: string]:
|
|
10
|
+
[k: string]: boolean;
|
|
11
11
|
};
|
|
12
|
-
|
|
13
|
-
vulnerableNode: null;
|
|
12
|
+
expiryDate: Date;
|
|
14
13
|
rawFuses: BigNumber;
|
|
15
14
|
} | undefined>;
|
|
16
15
|
};
|
|
@@ -1,5 +1,6 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { BigNumber } from 'ethers';
|
|
2
2
|
import { testable as fuseEnums } from '../utils/fuses';
|
|
3
|
+
import { namehash } from '../utils/normalise';
|
|
3
4
|
const NameSafety = [
|
|
4
5
|
'Safe',
|
|
5
6
|
'RegistrantNotWrapped',
|
|
@@ -12,14 +13,15 @@ const raw = async ({ contracts }, name) => {
|
|
|
12
13
|
return {
|
|
13
14
|
to: nameWrapper.address,
|
|
14
15
|
data: nameWrapper.interface.encodeFunctionData('getFuses', [
|
|
15
|
-
|
|
16
|
+
namehash(name),
|
|
16
17
|
]),
|
|
17
18
|
};
|
|
18
19
|
};
|
|
19
20
|
const decode = async ({ contracts }, data, name) => {
|
|
20
21
|
const nameWrapper = await contracts?.getNameWrapper();
|
|
21
22
|
try {
|
|
22
|
-
const [
|
|
23
|
+
const [_fuses, expiry] = nameWrapper.interface.decodeFunctionResult('getFuses', data);
|
|
24
|
+
const fuses = BigNumber.from(_fuses);
|
|
23
25
|
const fuseObj = Object.fromEntries(Object.keys(fuseEnums).map((fuseEnum) => [
|
|
24
26
|
fuseEnum
|
|
25
27
|
.toLowerCase()
|
|
@@ -32,20 +34,10 @@ const decode = async ({ contracts }, data, name) => {
|
|
|
32
34
|
else {
|
|
33
35
|
fuseObj.canDoEverything = false;
|
|
34
36
|
}
|
|
35
|
-
|
|
36
|
-
if (utils.hexStripZeros(vulnerableNode) !== '0x') {
|
|
37
|
-
name.split('.').forEach((label, index, arr) => {
|
|
38
|
-
const node = arr.slice(index).join('.');
|
|
39
|
-
const nodehash = utils.namehash(node);
|
|
40
|
-
if (nodehash === vulnerableNode) {
|
|
41
|
-
returnVulnerableNode = node;
|
|
42
|
-
}
|
|
43
|
-
});
|
|
44
|
-
}
|
|
37
|
+
const expiryDate = new Date(expiry * 1000);
|
|
45
38
|
return {
|
|
46
39
|
fuseObj,
|
|
47
|
-
|
|
48
|
-
vulnerableNode: returnVulnerableNode,
|
|
40
|
+
expiryDate,
|
|
49
41
|
rawFuses: fuses,
|
|
50
42
|
};
|
|
51
43
|
}
|
|
@@ -22,33 +22,3 @@ export declare function getHistory({ gqlInstance }: ENSArgs<'gqlInstance'>, name
|
|
|
22
22
|
data: Record<string, any>;
|
|
23
23
|
}[];
|
|
24
24
|
} | undefined>;
|
|
25
|
-
export declare function getHistoryWithDetail({ contracts, gqlInstance, provider, }: ENSArgs<'contracts' | 'gqlInstance' | 'provider'>, name: string): Promise<{
|
|
26
|
-
domain: {
|
|
27
|
-
type: any;
|
|
28
|
-
blockNumber: any;
|
|
29
|
-
transactionHash: any;
|
|
30
|
-
id: any;
|
|
31
|
-
data: Record<string, any>;
|
|
32
|
-
}[];
|
|
33
|
-
registration: {
|
|
34
|
-
type: any;
|
|
35
|
-
blockNumber: any;
|
|
36
|
-
transactionHash: any;
|
|
37
|
-
id: any;
|
|
38
|
-
data: Record<string, any>;
|
|
39
|
-
}[];
|
|
40
|
-
resolver: {
|
|
41
|
-
type: any;
|
|
42
|
-
blockNumber: any;
|
|
43
|
-
transactionHash: any;
|
|
44
|
-
id: any;
|
|
45
|
-
data: Record<string, any>;
|
|
46
|
-
}[];
|
|
47
|
-
} | undefined>;
|
|
48
|
-
export declare function getHistoryDetailForTransactionHash({ contracts, provider }: ENSArgs<'contracts' | 'provider'>, hash: string, indexInTransaction?: number): Promise<({
|
|
49
|
-
key: any;
|
|
50
|
-
value: any;
|
|
51
|
-
} | undefined)[] | {
|
|
52
|
-
key: any;
|
|
53
|
-
value: any;
|
|
54
|
-
} | undefined>;
|
|
@@ -1,7 +1,6 @@
|
|
|
1
1
|
import { formatsByCoinType } from '@ensdomains/address-encoder';
|
|
2
2
|
import { ethers } from 'ethers';
|
|
3
3
|
import { decodeContenthash } from '../utils/contentHash';
|
|
4
|
-
import { makeOtherIndexes } from '../utils/makeHashIndexes';
|
|
5
4
|
const eventFormat = {
|
|
6
5
|
Domain: {
|
|
7
6
|
NewOwner: (args) => ({ owner: args.owner.id }),
|
|
@@ -43,7 +42,7 @@ const eventFormat = {
|
|
|
43
42
|
NameChanged: (args) => ({ name: args.name }),
|
|
44
43
|
AbiChanged: (args) => ({ contentType: args.contentType }),
|
|
45
44
|
PubkeyChanged: (args) => ({ x: args.x, y: args.y }),
|
|
46
|
-
TextChanged: (args) => ({ key: args.key }),
|
|
45
|
+
TextChanged: (args) => ({ key: args.key, value: args.value }),
|
|
47
46
|
ContenthashChanged: (args) => ({ hash: decodeContenthash(args.hash) }),
|
|
48
47
|
InterfaceChanged: (args) => ({
|
|
49
48
|
interfaceId: args.interfaceId,
|
|
@@ -63,31 +62,6 @@ const mapEvents = (eventArray, type) => eventArray.map((event) => ({
|
|
|
63
62
|
id: event.id,
|
|
64
63
|
data: eventFormat[type][event.__typename](event),
|
|
65
64
|
}));
|
|
66
|
-
const mapResultDetailDecode = (publicResolver) => (result) => {
|
|
67
|
-
const hashIndexes = makeOtherIndexes(result.input, '10f13a8c');
|
|
68
|
-
const abiLengths = hashIndexes.map((x) => ({
|
|
69
|
-
index: x,
|
|
70
|
-
length: x === 0
|
|
71
|
-
? ethers.utils.hexDataLength(result.input)
|
|
72
|
-
: parseInt(ethers.utils.hexDataSlice(result.input, x - 32, x), 16),
|
|
73
|
-
}));
|
|
74
|
-
const ABIs = abiLengths.map(({ index, length }) => ethers.utils.hexDataSlice(result.input, index, index + length));
|
|
75
|
-
return ABIs.map((abi) => {
|
|
76
|
-
try {
|
|
77
|
-
return publicResolver.interface.decodeFunctionData('setText(bytes32,string,string)', abi);
|
|
78
|
-
}
|
|
79
|
-
catch {
|
|
80
|
-
return;
|
|
81
|
-
}
|
|
82
|
-
});
|
|
83
|
-
};
|
|
84
|
-
const expandDecode = (prev, curr) => {
|
|
85
|
-
if (!curr)
|
|
86
|
-
return [...prev, { value: null }];
|
|
87
|
-
if (!curr.length)
|
|
88
|
-
return [...prev, curr];
|
|
89
|
-
return [...prev, ...curr];
|
|
90
|
-
};
|
|
91
65
|
export async function getHistory({ gqlInstance }, name) {
|
|
92
66
|
const client = gqlInstance.client;
|
|
93
67
|
const query = gqlInstance.gql `
|
|
@@ -168,6 +142,7 @@ export async function getHistory({ gqlInstance }, name) {
|
|
|
168
142
|
}
|
|
169
143
|
...on TextChanged {
|
|
170
144
|
key
|
|
145
|
+
value
|
|
171
146
|
}
|
|
172
147
|
...on ContenthashChanged {
|
|
173
148
|
hash
|
|
@@ -202,72 +177,3 @@ export async function getHistory({ gqlInstance }, name) {
|
|
|
202
177
|
resolver: resolverHistory,
|
|
203
178
|
};
|
|
204
179
|
}
|
|
205
|
-
export async function getHistoryWithDetail({ contracts, gqlInstance, provider, }, name) {
|
|
206
|
-
const historyRes = await getHistory({ gqlInstance }, name);
|
|
207
|
-
if (!historyRes)
|
|
208
|
-
return;
|
|
209
|
-
const { domain, registration, resolver: resolverHistory } = historyRes;
|
|
210
|
-
const textEvents = resolverHistory.filter((event) => event.type === 'TextChanged');
|
|
211
|
-
const transactions = textEvents.reduce((prev, curr) => {
|
|
212
|
-
if (prev.includes(curr.transactionHash)) {
|
|
213
|
-
return prev;
|
|
214
|
-
}
|
|
215
|
-
return [...prev, curr.transactionHash];
|
|
216
|
-
}, []);
|
|
217
|
-
const publicResolver = await contracts?.getPublicResolver();
|
|
218
|
-
const fetchResult = (await ethers.utils.fetchJson(provider.connection, JSON.stringify(transactions.map((tx, i) => ({
|
|
219
|
-
jsonrpc: '2.0',
|
|
220
|
-
id: i,
|
|
221
|
-
method: 'eth_getTransactionByHash',
|
|
222
|
-
params: [tx],
|
|
223
|
-
})))))
|
|
224
|
-
.map((result) => result.result)
|
|
225
|
-
.map(mapResultDetailDecode(publicResolver))
|
|
226
|
-
.reduce(expandDecode, []);
|
|
227
|
-
const detailedResolverHistory = resolverHistory.map((event) => {
|
|
228
|
-
if (event.type !== 'TextChanged')
|
|
229
|
-
return event;
|
|
230
|
-
const { id } = event;
|
|
231
|
-
const matchedTextInx = textEvents.findIndex((x) => x.id === id);
|
|
232
|
-
return {
|
|
233
|
-
...event,
|
|
234
|
-
data: {
|
|
235
|
-
...event.data,
|
|
236
|
-
value: fetchResult[matchedTextInx] && fetchResult[matchedTextInx].value,
|
|
237
|
-
},
|
|
238
|
-
};
|
|
239
|
-
});
|
|
240
|
-
return {
|
|
241
|
-
domain,
|
|
242
|
-
registration,
|
|
243
|
-
resolver: detailedResolverHistory,
|
|
244
|
-
};
|
|
245
|
-
}
|
|
246
|
-
export async function getHistoryDetailForTransactionHash({ contracts, provider }, hash, indexInTransaction) {
|
|
247
|
-
const publicResolver = await contracts?.getPublicResolver();
|
|
248
|
-
const transaction = await provider.getTransaction(hash);
|
|
249
|
-
if (!transaction)
|
|
250
|
-
return;
|
|
251
|
-
const result = mapResultDetailDecode(publicResolver)({
|
|
252
|
-
input: transaction.data,
|
|
253
|
-
});
|
|
254
|
-
if (!result || !result.length)
|
|
255
|
-
return;
|
|
256
|
-
if (typeof indexInTransaction === 'number') {
|
|
257
|
-
if (indexInTransaction + 1 > result.length)
|
|
258
|
-
return;
|
|
259
|
-
const resultItem = result[indexInTransaction];
|
|
260
|
-
if (!resultItem ||
|
|
261
|
-
!resultItem.key ||
|
|
262
|
-
(!resultItem.value && resultItem.value !== ''))
|
|
263
|
-
return;
|
|
264
|
-
return { key: resultItem.key, value: resultItem.value };
|
|
265
|
-
}
|
|
266
|
-
return result.map((item) => {
|
|
267
|
-
if (!item.key)
|
|
268
|
-
return;
|
|
269
|
-
if (!item.value && item.value !== '')
|
|
270
|
-
return { key: item.key, value: null };
|
|
271
|
-
return { key: item.key, value: item.value };
|
|
272
|
-
});
|
|
273
|
-
}
|