@metamask/ens-controller 19.0.2 → 19.1.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.
- package/CHANGELOG.md +24 -1
- package/dist/EnsController-method-action-types.cjs +7 -0
- package/dist/EnsController-method-action-types.cjs.map +1 -0
- package/dist/EnsController-method-action-types.d.cts +70 -0
- package/dist/EnsController-method-action-types.d.cts.map +1 -0
- package/dist/EnsController-method-action-types.d.mts +70 -0
- package/dist/EnsController-method-action-types.d.mts.map +1 -0
- package/dist/EnsController-method-action-types.mjs +6 -0
- package/dist/EnsController-method-action-types.mjs.map +1 -0
- package/dist/EnsController.cjs +9 -0
- package/dist/EnsController.cjs.map +1 -1
- package/dist/EnsController.d.cts +3 -1
- package/dist/EnsController.d.cts.map +1 -1
- package/dist/EnsController.d.mts +3 -1
- package/dist/EnsController.d.mts.map +1 -1
- package/dist/EnsController.mjs +9 -0
- package/dist/EnsController.mjs.map +1 -1
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +1 -0
- package/dist/index.d.cts.map +1 -1
- package/dist/index.d.mts +1 -0
- package/dist/index.d.mts.map +1 -1
- package/dist/index.mjs.map +1 -1
- package/package.json +9 -8
package/CHANGELOG.md
CHANGED
|
@@ -7,6 +7,27 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
|
|
|
7
7
|
|
|
8
8
|
## [Unreleased]
|
|
9
9
|
|
|
10
|
+
## [19.1.0]
|
|
11
|
+
|
|
12
|
+
### Added
|
|
13
|
+
|
|
14
|
+
- Expose missing public `EnsController` methods through its messenger ([#8183](https://github.com/MetaMask/core/pull/8183))
|
|
15
|
+
- The following actions are now available:
|
|
16
|
+
- `EnsController:resetState`
|
|
17
|
+
- `EnsController:clear`
|
|
18
|
+
- `EnsController:delete`
|
|
19
|
+
- `EnsController:get`
|
|
20
|
+
- `EnsController:set`
|
|
21
|
+
- `EnsController:reverseResolveAddress`
|
|
22
|
+
- Corresponding action types (e.g. `EnsControllerResetStateAction`) are available as well.
|
|
23
|
+
|
|
24
|
+
## [19.0.3]
|
|
25
|
+
|
|
26
|
+
### Changed
|
|
27
|
+
|
|
28
|
+
- Bump `@metamask/network-controller` from `^29.0.0` to `^30.0.0` ([#7996](https://github.com/MetaMask/core/pull/7996))
|
|
29
|
+
- Bump `@metamask/controller-utils` from `^11.18.0` to `^11.19.0` ([#7995](https://github.com/MetaMask/core/pull/7995))
|
|
30
|
+
|
|
10
31
|
## [19.0.2]
|
|
11
32
|
|
|
12
33
|
### Changed
|
|
@@ -358,7 +379,9 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
|
|
|
358
379
|
|
|
359
380
|
All changes listed after this point were applied to this package following the monorepo conversion.
|
|
360
381
|
|
|
361
|
-
[Unreleased]: https://github.com/MetaMask/core/compare/@metamask/ens-controller@19.0
|
|
382
|
+
[Unreleased]: https://github.com/MetaMask/core/compare/@metamask/ens-controller@19.1.0...HEAD
|
|
383
|
+
[19.1.0]: https://github.com/MetaMask/core/compare/@metamask/ens-controller@19.0.3...@metamask/ens-controller@19.1.0
|
|
384
|
+
[19.0.3]: https://github.com/MetaMask/core/compare/@metamask/ens-controller@19.0.2...@metamask/ens-controller@19.0.3
|
|
362
385
|
[19.0.2]: https://github.com/MetaMask/core/compare/@metamask/ens-controller@19.0.1...@metamask/ens-controller@19.0.2
|
|
363
386
|
[19.0.1]: https://github.com/MetaMask/core/compare/@metamask/ens-controller@19.0.0...@metamask/ens-controller@19.0.1
|
|
364
387
|
[19.0.0]: https://github.com/MetaMask/core/compare/@metamask/ens-controller@18.0.0...@metamask/ens-controller@19.0.0
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"EnsController-method-action-types.cjs","sourceRoot":"","sources":["../src/EnsController-method-action-types.ts"],"names":[],"mappings":";AAAA;;;GAGG","sourcesContent":["/**\n * This file is auto generated by `scripts/generate-method-action-types.ts`.\n * Do not edit manually.\n */\n\nimport type { EnsController } from './EnsController';\n\n/**\n * Clears ensResolutionsByAddress state property.\n */\nexport type EnsControllerResetStateAction = {\n type: `EnsController:resetState`;\n handler: EnsController['resetState'];\n};\n\n/**\n * Remove all chain Ids and ENS entries from state.\n */\nexport type EnsControllerClearAction = {\n type: `EnsController:clear`;\n handler: EnsController['clear'];\n};\n\n/**\n * Delete an ENS entry.\n *\n * @param chainId - Parent chain of the ENS entry to delete.\n * @param ensName - Name of the ENS entry to delete.\n * @returns Boolean indicating if the entry was deleted.\n */\nexport type EnsControllerDeleteAction = {\n type: `EnsController:delete`;\n handler: EnsController['delete'];\n};\n\n/**\n * Retrieve a DNS entry.\n *\n * @param chainId - Parent chain of the ENS entry to retrieve.\n * @param ensName - Name of the ENS entry to retrieve.\n * @returns The EnsEntry or null if it does not exist.\n */\nexport type EnsControllerGetAction = {\n type: `EnsController:get`;\n handler: EnsController['get'];\n};\n\n/**\n * Add or update an ENS entry by chainId and ensName.\n *\n * A null address indicates that the ENS name does not resolve.\n *\n * @param chainId - Id of the associated chain.\n * @param ensName - The ENS name.\n * @param address - Associated address (or null) to add or update.\n * @returns Boolean indicating if the entry was set.\n */\nexport type EnsControllerSetAction = {\n type: `EnsController:set`;\n handler: EnsController['set'];\n};\n\n/**\n * Resolve ens by address.\n *\n * @param nonChecksummedAddress - address\n * @returns ens resolution\n */\nexport type EnsControllerReverseResolveAddressAction = {\n type: `EnsController:reverseResolveAddress`;\n handler: EnsController['reverseResolveAddress'];\n};\n\n/**\n * Union of all EnsController action types.\n */\nexport type EnsControllerMethodActions =\n | EnsControllerResetStateAction\n | EnsControllerClearAction\n | EnsControllerDeleteAction\n | EnsControllerGetAction\n | EnsControllerSetAction\n | EnsControllerReverseResolveAddressAction;\n"]}
|
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* This file is auto generated by `scripts/generate-method-action-types.ts`.
|
|
3
|
+
* Do not edit manually.
|
|
4
|
+
*/
|
|
5
|
+
import type { EnsController } from "./EnsController.cjs";
|
|
6
|
+
/**
|
|
7
|
+
* Clears ensResolutionsByAddress state property.
|
|
8
|
+
*/
|
|
9
|
+
export type EnsControllerResetStateAction = {
|
|
10
|
+
type: `EnsController:resetState`;
|
|
11
|
+
handler: EnsController['resetState'];
|
|
12
|
+
};
|
|
13
|
+
/**
|
|
14
|
+
* Remove all chain Ids and ENS entries from state.
|
|
15
|
+
*/
|
|
16
|
+
export type EnsControllerClearAction = {
|
|
17
|
+
type: `EnsController:clear`;
|
|
18
|
+
handler: EnsController['clear'];
|
|
19
|
+
};
|
|
20
|
+
/**
|
|
21
|
+
* Delete an ENS entry.
|
|
22
|
+
*
|
|
23
|
+
* @param chainId - Parent chain of the ENS entry to delete.
|
|
24
|
+
* @param ensName - Name of the ENS entry to delete.
|
|
25
|
+
* @returns Boolean indicating if the entry was deleted.
|
|
26
|
+
*/
|
|
27
|
+
export type EnsControllerDeleteAction = {
|
|
28
|
+
type: `EnsController:delete`;
|
|
29
|
+
handler: EnsController['delete'];
|
|
30
|
+
};
|
|
31
|
+
/**
|
|
32
|
+
* Retrieve a DNS entry.
|
|
33
|
+
*
|
|
34
|
+
* @param chainId - Parent chain of the ENS entry to retrieve.
|
|
35
|
+
* @param ensName - Name of the ENS entry to retrieve.
|
|
36
|
+
* @returns The EnsEntry or null if it does not exist.
|
|
37
|
+
*/
|
|
38
|
+
export type EnsControllerGetAction = {
|
|
39
|
+
type: `EnsController:get`;
|
|
40
|
+
handler: EnsController['get'];
|
|
41
|
+
};
|
|
42
|
+
/**
|
|
43
|
+
* Add or update an ENS entry by chainId and ensName.
|
|
44
|
+
*
|
|
45
|
+
* A null address indicates that the ENS name does not resolve.
|
|
46
|
+
*
|
|
47
|
+
* @param chainId - Id of the associated chain.
|
|
48
|
+
* @param ensName - The ENS name.
|
|
49
|
+
* @param address - Associated address (or null) to add or update.
|
|
50
|
+
* @returns Boolean indicating if the entry was set.
|
|
51
|
+
*/
|
|
52
|
+
export type EnsControllerSetAction = {
|
|
53
|
+
type: `EnsController:set`;
|
|
54
|
+
handler: EnsController['set'];
|
|
55
|
+
};
|
|
56
|
+
/**
|
|
57
|
+
* Resolve ens by address.
|
|
58
|
+
*
|
|
59
|
+
* @param nonChecksummedAddress - address
|
|
60
|
+
* @returns ens resolution
|
|
61
|
+
*/
|
|
62
|
+
export type EnsControllerReverseResolveAddressAction = {
|
|
63
|
+
type: `EnsController:reverseResolveAddress`;
|
|
64
|
+
handler: EnsController['reverseResolveAddress'];
|
|
65
|
+
};
|
|
66
|
+
/**
|
|
67
|
+
* Union of all EnsController action types.
|
|
68
|
+
*/
|
|
69
|
+
export type EnsControllerMethodActions = EnsControllerResetStateAction | EnsControllerClearAction | EnsControllerDeleteAction | EnsControllerGetAction | EnsControllerSetAction | EnsControllerReverseResolveAddressAction;
|
|
70
|
+
//# sourceMappingURL=EnsController-method-action-types.d.cts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"EnsController-method-action-types.d.cts","sourceRoot":"","sources":["../src/EnsController-method-action-types.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,aAAa,EAAE,4BAAwB;AAErD;;GAEG;AACH,MAAM,MAAM,6BAA6B,GAAG;IAC1C,IAAI,EAAE,0BAA0B,CAAC;IACjC,OAAO,EAAE,aAAa,CAAC,YAAY,CAAC,CAAC;CACtC,CAAC;AAEF;;GAEG;AACH,MAAM,MAAM,wBAAwB,GAAG;IACrC,IAAI,EAAE,qBAAqB,CAAC;IAC5B,OAAO,EAAE,aAAa,CAAC,OAAO,CAAC,CAAC;CACjC,CAAC;AAEF;;;;;;GAMG;AACH,MAAM,MAAM,yBAAyB,GAAG;IACtC,IAAI,EAAE,sBAAsB,CAAC;IAC7B,OAAO,EAAE,aAAa,CAAC,QAAQ,CAAC,CAAC;CAClC,CAAC;AAEF;;;;;;GAMG;AACH,MAAM,MAAM,sBAAsB,GAAG;IACnC,IAAI,EAAE,mBAAmB,CAAC;IAC1B,OAAO,EAAE,aAAa,CAAC,KAAK,CAAC,CAAC;CAC/B,CAAC;AAEF;;;;;;;;;GASG;AACH,MAAM,MAAM,sBAAsB,GAAG;IACnC,IAAI,EAAE,mBAAmB,CAAC;IAC1B,OAAO,EAAE,aAAa,CAAC,KAAK,CAAC,CAAC;CAC/B,CAAC;AAEF;;;;;GAKG;AACH,MAAM,MAAM,wCAAwC,GAAG;IACrD,IAAI,EAAE,qCAAqC,CAAC;IAC5C,OAAO,EAAE,aAAa,CAAC,uBAAuB,CAAC,CAAC;CACjD,CAAC;AAEF;;GAEG;AACH,MAAM,MAAM,0BAA0B,GAClC,6BAA6B,GAC7B,wBAAwB,GACxB,yBAAyB,GACzB,sBAAsB,GACtB,sBAAsB,GACtB,wCAAwC,CAAC"}
|
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* This file is auto generated by `scripts/generate-method-action-types.ts`.
|
|
3
|
+
* Do not edit manually.
|
|
4
|
+
*/
|
|
5
|
+
import type { EnsController } from "./EnsController.mjs";
|
|
6
|
+
/**
|
|
7
|
+
* Clears ensResolutionsByAddress state property.
|
|
8
|
+
*/
|
|
9
|
+
export type EnsControllerResetStateAction = {
|
|
10
|
+
type: `EnsController:resetState`;
|
|
11
|
+
handler: EnsController['resetState'];
|
|
12
|
+
};
|
|
13
|
+
/**
|
|
14
|
+
* Remove all chain Ids and ENS entries from state.
|
|
15
|
+
*/
|
|
16
|
+
export type EnsControllerClearAction = {
|
|
17
|
+
type: `EnsController:clear`;
|
|
18
|
+
handler: EnsController['clear'];
|
|
19
|
+
};
|
|
20
|
+
/**
|
|
21
|
+
* Delete an ENS entry.
|
|
22
|
+
*
|
|
23
|
+
* @param chainId - Parent chain of the ENS entry to delete.
|
|
24
|
+
* @param ensName - Name of the ENS entry to delete.
|
|
25
|
+
* @returns Boolean indicating if the entry was deleted.
|
|
26
|
+
*/
|
|
27
|
+
export type EnsControllerDeleteAction = {
|
|
28
|
+
type: `EnsController:delete`;
|
|
29
|
+
handler: EnsController['delete'];
|
|
30
|
+
};
|
|
31
|
+
/**
|
|
32
|
+
* Retrieve a DNS entry.
|
|
33
|
+
*
|
|
34
|
+
* @param chainId - Parent chain of the ENS entry to retrieve.
|
|
35
|
+
* @param ensName - Name of the ENS entry to retrieve.
|
|
36
|
+
* @returns The EnsEntry or null if it does not exist.
|
|
37
|
+
*/
|
|
38
|
+
export type EnsControllerGetAction = {
|
|
39
|
+
type: `EnsController:get`;
|
|
40
|
+
handler: EnsController['get'];
|
|
41
|
+
};
|
|
42
|
+
/**
|
|
43
|
+
* Add or update an ENS entry by chainId and ensName.
|
|
44
|
+
*
|
|
45
|
+
* A null address indicates that the ENS name does not resolve.
|
|
46
|
+
*
|
|
47
|
+
* @param chainId - Id of the associated chain.
|
|
48
|
+
* @param ensName - The ENS name.
|
|
49
|
+
* @param address - Associated address (or null) to add or update.
|
|
50
|
+
* @returns Boolean indicating if the entry was set.
|
|
51
|
+
*/
|
|
52
|
+
export type EnsControllerSetAction = {
|
|
53
|
+
type: `EnsController:set`;
|
|
54
|
+
handler: EnsController['set'];
|
|
55
|
+
};
|
|
56
|
+
/**
|
|
57
|
+
* Resolve ens by address.
|
|
58
|
+
*
|
|
59
|
+
* @param nonChecksummedAddress - address
|
|
60
|
+
* @returns ens resolution
|
|
61
|
+
*/
|
|
62
|
+
export type EnsControllerReverseResolveAddressAction = {
|
|
63
|
+
type: `EnsController:reverseResolveAddress`;
|
|
64
|
+
handler: EnsController['reverseResolveAddress'];
|
|
65
|
+
};
|
|
66
|
+
/**
|
|
67
|
+
* Union of all EnsController action types.
|
|
68
|
+
*/
|
|
69
|
+
export type EnsControllerMethodActions = EnsControllerResetStateAction | EnsControllerClearAction | EnsControllerDeleteAction | EnsControllerGetAction | EnsControllerSetAction | EnsControllerReverseResolveAddressAction;
|
|
70
|
+
//# sourceMappingURL=EnsController-method-action-types.d.mts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"EnsController-method-action-types.d.mts","sourceRoot":"","sources":["../src/EnsController-method-action-types.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,aAAa,EAAE,4BAAwB;AAErD;;GAEG;AACH,MAAM,MAAM,6BAA6B,GAAG;IAC1C,IAAI,EAAE,0BAA0B,CAAC;IACjC,OAAO,EAAE,aAAa,CAAC,YAAY,CAAC,CAAC;CACtC,CAAC;AAEF;;GAEG;AACH,MAAM,MAAM,wBAAwB,GAAG;IACrC,IAAI,EAAE,qBAAqB,CAAC;IAC5B,OAAO,EAAE,aAAa,CAAC,OAAO,CAAC,CAAC;CACjC,CAAC;AAEF;;;;;;GAMG;AACH,MAAM,MAAM,yBAAyB,GAAG;IACtC,IAAI,EAAE,sBAAsB,CAAC;IAC7B,OAAO,EAAE,aAAa,CAAC,QAAQ,CAAC,CAAC;CAClC,CAAC;AAEF;;;;;;GAMG;AACH,MAAM,MAAM,sBAAsB,GAAG;IACnC,IAAI,EAAE,mBAAmB,CAAC;IAC1B,OAAO,EAAE,aAAa,CAAC,KAAK,CAAC,CAAC;CAC/B,CAAC;AAEF;;;;;;;;;GASG;AACH,MAAM,MAAM,sBAAsB,GAAG;IACnC,IAAI,EAAE,mBAAmB,CAAC;IAC1B,OAAO,EAAE,aAAa,CAAC,KAAK,CAAC,CAAC;CAC/B,CAAC;AAEF;;;;;GAKG;AACH,MAAM,MAAM,wCAAwC,GAAG;IACrD,IAAI,EAAE,qCAAqC,CAAC;IAC5C,OAAO,EAAE,aAAa,CAAC,uBAAuB,CAAC,CAAC;CACjD,CAAC;AAEF;;GAEG;AACH,MAAM,MAAM,0BAA0B,GAClC,6BAA6B,GAC7B,wBAAwB,GACxB,yBAAyB,GACzB,sBAAsB,GACtB,sBAAsB,GACtB,wCAAwC,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"EnsController-method-action-types.mjs","sourceRoot":"","sources":["../src/EnsController-method-action-types.ts"],"names":[],"mappings":"AAAA;;;GAGG","sourcesContent":["/**\n * This file is auto generated by `scripts/generate-method-action-types.ts`.\n * Do not edit manually.\n */\n\nimport type { EnsController } from './EnsController';\n\n/**\n * Clears ensResolutionsByAddress state property.\n */\nexport type EnsControllerResetStateAction = {\n type: `EnsController:resetState`;\n handler: EnsController['resetState'];\n};\n\n/**\n * Remove all chain Ids and ENS entries from state.\n */\nexport type EnsControllerClearAction = {\n type: `EnsController:clear`;\n handler: EnsController['clear'];\n};\n\n/**\n * Delete an ENS entry.\n *\n * @param chainId - Parent chain of the ENS entry to delete.\n * @param ensName - Name of the ENS entry to delete.\n * @returns Boolean indicating if the entry was deleted.\n */\nexport type EnsControllerDeleteAction = {\n type: `EnsController:delete`;\n handler: EnsController['delete'];\n};\n\n/**\n * Retrieve a DNS entry.\n *\n * @param chainId - Parent chain of the ENS entry to retrieve.\n * @param ensName - Name of the ENS entry to retrieve.\n * @returns The EnsEntry or null if it does not exist.\n */\nexport type EnsControllerGetAction = {\n type: `EnsController:get`;\n handler: EnsController['get'];\n};\n\n/**\n * Add or update an ENS entry by chainId and ensName.\n *\n * A null address indicates that the ENS name does not resolve.\n *\n * @param chainId - Id of the associated chain.\n * @param ensName - The ENS name.\n * @param address - Associated address (or null) to add or update.\n * @returns Boolean indicating if the entry was set.\n */\nexport type EnsControllerSetAction = {\n type: `EnsController:set`;\n handler: EnsController['set'];\n};\n\n/**\n * Resolve ens by address.\n *\n * @param nonChecksummedAddress - address\n * @returns ens resolution\n */\nexport type EnsControllerReverseResolveAddressAction = {\n type: `EnsController:reverseResolveAddress`;\n handler: EnsController['reverseResolveAddress'];\n};\n\n/**\n * Union of all EnsController action types.\n */\nexport type EnsControllerMethodActions =\n | EnsControllerResetStateAction\n | EnsControllerClearAction\n | EnsControllerDeleteAction\n | EnsControllerGetAction\n | EnsControllerSetAction\n | EnsControllerReverseResolveAddressAction;\n"]}
|
package/dist/EnsController.cjs
CHANGED
|
@@ -20,6 +20,14 @@ const utils_1 = require("@metamask/utils");
|
|
|
20
20
|
const punycode_js_1 = require("punycode/punycode.js");
|
|
21
21
|
const log = (0, utils_1.createProjectLogger)('ens-controller');
|
|
22
22
|
const name = 'EnsController';
|
|
23
|
+
const MESSENGER_EXPOSED_METHODS = [
|
|
24
|
+
'clear',
|
|
25
|
+
'delete',
|
|
26
|
+
'get',
|
|
27
|
+
'resetState',
|
|
28
|
+
'reverseResolveAddress',
|
|
29
|
+
'set',
|
|
30
|
+
];
|
|
23
31
|
// Map of chainIDs and ENS registry contract addresses
|
|
24
32
|
exports.DEFAULT_ENS_NETWORK_MAP = {
|
|
25
33
|
// Mainnet
|
|
@@ -91,6 +99,7 @@ class EnsController extends base_controller_1.BaseController {
|
|
|
91
99
|
});
|
|
92
100
|
_EnsController_instances.add(this);
|
|
93
101
|
_EnsController_ethProvider.set(this, null);
|
|
102
|
+
this.messenger.registerMethodActionHandlers(this, MESSENGER_EXPOSED_METHODS);
|
|
94
103
|
__classPrivateFieldGet(this, _EnsController_instances, "m", _EnsController_setDefaultEthProvider).call(this, registriesByChainId);
|
|
95
104
|
if (onNetworkDidChange) {
|
|
96
105
|
onNetworkDidChange(({ selectedNetworkClientId }) => {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"EnsController.cjs","sourceRoot":"","sources":["../src/EnsController.ts"],"names":[],"mappings":"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","sourcesContent":["import { Web3Provider } from '@ethersproject/providers';\nimport { BaseController } from '@metamask/base-controller';\nimport type {\n StateMetadata,\n ControllerGetStateAction,\n ControllerStateChangeEvent,\n} from '@metamask/base-controller';\nimport type { ChainId } from '@metamask/controller-utils';\nimport {\n normalizeEnsName,\n isValidHexAddress,\n isSafeDynamicKey,\n toChecksumHexAddress,\n CHAIN_ID_TO_ETHERS_NETWORK_NAME_MAP,\n convertHexToDecimal,\n toHex,\n} from '@metamask/controller-utils';\nimport type { Messenger } from '@metamask/messenger';\nimport type {\n NetworkControllerGetNetworkClientByIdAction,\n NetworkControllerGetStateAction,\n NetworkState,\n} from '@metamask/network-controller';\nimport type { Hex } from '@metamask/utils';\nimport { createProjectLogger } from '@metamask/utils';\nimport { toASCII } from 'punycode/punycode.js';\n\nconst log = createProjectLogger('ens-controller');\n\nconst name = 'EnsController';\n\n// Map of chainIDs and ENS registry contract addresses\nexport const DEFAULT_ENS_NETWORK_MAP: Record<number, Hex> = {\n // Mainnet\n 1: '0x00000000000C2E074eC69A0dFb2997BA6C7d2e1e',\n // Ropsten\n 3: '0x00000000000C2E074eC69A0dFb2997BA6C7d2e1e',\n // Rinkeby\n 4: '0x00000000000C2E074eC69A0dFb2997BA6C7d2e1e',\n // Goerli\n 5: '0x00000000000C2E074eC69A0dFb2997BA6C7d2e1e',\n // Holesky\n 17000: '0x00000000000C2E074eC69A0dFb2997BA6C7d2e1e',\n // Sepolia\n 11155111: '0x00000000000C2E074eC69A0dFb2997BA6C7d2e1e',\n};\n\n/**\n * @type EnsEntry\n *\n * ENS entry representation\n *\n * @property chainId - Id of the associated chain\n * @property ensName - The ENS name\n * @property address - Hex address with the ENS name, or null\n */\nexport type EnsEntry = {\n chainId: Hex;\n ensName: string;\n address: string | null;\n};\n\n/**\n * @type EnsControllerState\n *\n * ENS controller state\n *\n * @property ensEntries - Object of ENS entry objects\n */\nexport type EnsControllerState = {\n ensEntries: {\n [chainId: Hex]: {\n [ensName: string]: EnsEntry;\n };\n };\n ensResolutionsByAddress: { [key: string]: string };\n};\n\nexport type EnsControllerActions = ControllerGetStateAction<\n typeof name,\n EnsControllerState\n>;\n\nexport type EnsControllerEvents = ControllerStateChangeEvent<\n typeof name,\n EnsControllerState\n>;\n\nexport type AllowedActions =\n | NetworkControllerGetNetworkClientByIdAction\n | NetworkControllerGetStateAction;\n\nexport type EnsControllerMessenger = Messenger<\n typeof name,\n EnsControllerActions | AllowedActions,\n EnsControllerEvents\n>;\n\nconst metadata: StateMetadata<EnsControllerState> = {\n ensEntries: {\n includeInStateLogs: true,\n persist: true,\n includeInDebugSnapshot: false,\n usedInUi: true,\n },\n ensResolutionsByAddress: {\n includeInStateLogs: true,\n persist: true,\n includeInDebugSnapshot: false,\n usedInUi: true,\n },\n};\n\nconst defaultState = {\n ensEntries: {},\n ensResolutionsByAddress: {},\n};\n\nconst ZERO_ADDRESS = '0x0000000000000000000000000000000000000000';\nconst ZERO_X_ERROR_ADDRESS = '0x';\n\n/**\n * Controller that manages a list ENS names and their resolved addresses\n * by chainId. A null address indicates an unresolved ENS name.\n */\nexport class EnsController extends BaseController<\n typeof name,\n EnsControllerState,\n EnsControllerMessenger\n> {\n #ethProvider: Web3Provider | null = null;\n\n /**\n * Creates an EnsController instance.\n *\n * @param options - Constructor options.\n * @param options.registriesByChainId - Map between chain IDs and ENS contract addresses.\n * @param options.messenger - A reference to the messaging system.\n * @param options.state - Initial state to set on this controller.\n * @param options.onNetworkDidChange - Allows subscribing to network controller networkDidChange events.\n */\n constructor({\n registriesByChainId = DEFAULT_ENS_NETWORK_MAP,\n messenger,\n state = {},\n onNetworkDidChange,\n }: {\n registriesByChainId?: Record<number, Hex>;\n messenger: EnsControllerMessenger;\n state?: Partial<EnsControllerState>;\n onNetworkDidChange?: (\n listener: (networkState: NetworkState) => void,\n ) => void;\n }) {\n super({\n name,\n metadata,\n messenger,\n state: {\n ...defaultState,\n ensEntries: Object.fromEntries(\n Object.entries(registriesByChainId).map(([chainId, address]) => [\n toHex(chainId),\n {\n '.': {\n address,\n chainId: toHex(chainId),\n ensName: '.',\n },\n },\n ]),\n ),\n ...state,\n },\n });\n\n this.#setDefaultEthProvider(registriesByChainId);\n\n if (onNetworkDidChange) {\n onNetworkDidChange(({ selectedNetworkClientId }) => {\n this.resetState();\n this.#setEthProvider(selectedNetworkClientId, registriesByChainId);\n });\n }\n }\n\n /**\n * Clears ensResolutionsByAddress state property.\n */\n resetState() {\n this.update((currentState) => {\n currentState.ensResolutionsByAddress = {};\n });\n }\n\n /**\n * Remove all chain Ids and ENS entries from state.\n */\n clear() {\n this.update((state) => {\n state.ensEntries = {};\n });\n }\n\n /**\n * Delete an ENS entry.\n *\n * @param chainId - Parent chain of the ENS entry to delete.\n * @param ensName - Name of the ENS entry to delete.\n * @returns Boolean indicating if the entry was deleted.\n */\n delete(chainId: Hex, ensName: string): boolean {\n const normalizedEnsName = normalizeEnsName(ensName);\n if (\n !isSafeDynamicKey(chainId) ||\n !normalizedEnsName ||\n !this.state.ensEntries[chainId]?.[normalizedEnsName]\n ) {\n return false;\n }\n\n this.update((state) => {\n delete state.ensEntries[chainId][normalizedEnsName];\n\n if (Object.keys(state.ensEntries[chainId]).length === 0) {\n delete state.ensEntries[chainId];\n }\n });\n return true;\n }\n\n /**\n * Retrieve a DNS entry.\n *\n * @param chainId - Parent chain of the ENS entry to retrieve.\n * @param ensName - Name of the ENS entry to retrieve.\n * @returns The EnsEntry or null if it does not exist.\n */\n get(chainId: Hex, ensName: string): EnsEntry | null {\n const normalizedEnsName = normalizeEnsName(ensName);\n\n // TODO Explicitly handle the case where `normalizedEnsName` is `null`\n // eslint-disable-next-line no-implicit-coercion\n return !!normalizedEnsName && this.state.ensEntries[chainId]\n ? this.state.ensEntries[chainId][normalizedEnsName] || null\n : null;\n }\n\n /**\n * Add or update an ENS entry by chainId and ensName.\n *\n * A null address indicates that the ENS name does not resolve.\n *\n * @param chainId - Id of the associated chain.\n * @param ensName - The ENS name.\n * @param address - Associated address (or null) to add or update.\n * @returns Boolean indicating if the entry was set.\n */\n set(chainId: Hex, ensName: string, address: string | null): boolean {\n if (\n !Number.isInteger(Number.parseInt(chainId, 10)) ||\n !ensName ||\n typeof ensName !== 'string' ||\n (address && !isValidHexAddress(address))\n ) {\n throw new Error(\n `Invalid ENS entry: { chainId:${chainId}, ensName:${ensName}, address:${address}}`,\n );\n }\n\n const normalizedEnsName = normalizeEnsName(ensName);\n if (!normalizedEnsName) {\n throw new Error(`Invalid ENS name: ${ensName}`);\n }\n\n const normalizedAddress = address ? toChecksumHexAddress(address) : null;\n const subState = this.state.ensEntries[chainId];\n\n if (subState?.[normalizedEnsName]?.address === normalizedAddress) {\n return false;\n }\n\n this.update((state) => {\n state.ensEntries = {\n ...this.state.ensEntries,\n [chainId]: {\n ...this.state.ensEntries[chainId],\n [normalizedEnsName]: {\n address: normalizedAddress,\n chainId,\n ensName: normalizedEnsName,\n },\n },\n };\n });\n return true;\n }\n\n #setDefaultEthProvider(registriesByChainId?: Record<number, Hex>) {\n const { selectedNetworkClientId } = this.messenger.call(\n 'NetworkController:getState',\n );\n this.#setEthProvider(selectedNetworkClientId, registriesByChainId);\n }\n\n #setEthProvider(\n selectedNetworkClientId: string,\n registriesByChainId?: Record<number, Hex>,\n ) {\n const {\n configuration: { chainId: currentChainId },\n provider,\n } = this.messenger.call(\n 'NetworkController:getNetworkClientById',\n selectedNetworkClientId,\n );\n\n if (\n registriesByChainId?.[parseInt(currentChainId, 16)] &&\n this.#getChainEnsSupport(currentChainId)\n ) {\n this.#ethProvider = new Web3Provider(provider, {\n chainId: convertHexToDecimal(currentChainId),\n name: CHAIN_ID_TO_ETHERS_NETWORK_NAME_MAP[currentChainId as ChainId],\n ensAddress: registriesByChainId[parseInt(currentChainId, 16)],\n });\n } else {\n this.#ethProvider = null;\n }\n }\n\n /**\n * Check if the chain supports ENS.\n *\n * @param chainId - chain id.\n * @returns Boolean indicating if the chain supports ENS.\n */\n #getChainEnsSupport(chainId: Hex) {\n return Boolean(this.state.ensEntries[chainId]);\n }\n\n /**\n * Resolve ens by address.\n *\n * @param nonChecksummedAddress - address\n * @returns ens resolution\n */\n async reverseResolveAddress(nonChecksummedAddress: string) {\n if (!this.#ethProvider) {\n return undefined;\n }\n\n const address = toChecksumHexAddress(nonChecksummedAddress);\n if (this.state.ensResolutionsByAddress[address]) {\n return this.state.ensResolutionsByAddress[address];\n }\n\n let domain: string | null;\n try {\n domain = await this.#ethProvider.lookupAddress(address);\n } catch (error) {\n log(error);\n return undefined;\n }\n\n if (!domain) {\n return undefined;\n }\n\n let registeredAddress: string | null;\n try {\n registeredAddress = await this.#ethProvider.resolveName(domain);\n } catch (error) {\n log(error);\n return undefined;\n }\n\n if (!registeredAddress) {\n return undefined;\n }\n\n if (\n registeredAddress === ZERO_ADDRESS ||\n registeredAddress === ZERO_X_ERROR_ADDRESS\n ) {\n return undefined;\n }\n if (toChecksumHexAddress(registeredAddress) !== address) {\n return undefined;\n }\n\n this.update((state) => {\n state.ensResolutionsByAddress[address] = toASCII(domain as string);\n });\n\n return domain;\n }\n}\n\nexport default EnsController;\n"]}
|
|
1
|
+
{"version":3,"file":"EnsController.cjs","sourceRoot":"","sources":["../src/EnsController.ts"],"names":[],"mappings":"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","sourcesContent":["import { Web3Provider } from '@ethersproject/providers';\nimport { BaseController } from '@metamask/base-controller';\nimport type {\n StateMetadata,\n ControllerGetStateAction,\n ControllerStateChangeEvent,\n} from '@metamask/base-controller';\nimport type { ChainId } from '@metamask/controller-utils';\nimport {\n normalizeEnsName,\n isValidHexAddress,\n isSafeDynamicKey,\n toChecksumHexAddress,\n CHAIN_ID_TO_ETHERS_NETWORK_NAME_MAP,\n convertHexToDecimal,\n toHex,\n} from '@metamask/controller-utils';\nimport type { Messenger } from '@metamask/messenger';\nimport type {\n NetworkControllerGetNetworkClientByIdAction,\n NetworkControllerGetStateAction,\n NetworkState,\n} from '@metamask/network-controller';\nimport type { Hex } from '@metamask/utils';\nimport { createProjectLogger } from '@metamask/utils';\nimport { toASCII } from 'punycode/punycode.js';\n\nimport type { EnsControllerMethodActions } from './EnsController-method-action-types';\n\nconst log = createProjectLogger('ens-controller');\n\nconst name = 'EnsController';\n\nconst MESSENGER_EXPOSED_METHODS = [\n 'clear',\n 'delete',\n 'get',\n 'resetState',\n 'reverseResolveAddress',\n 'set',\n] as const;\n\n// Map of chainIDs and ENS registry contract addresses\nexport const DEFAULT_ENS_NETWORK_MAP: Record<number, Hex> = {\n // Mainnet\n 1: '0x00000000000C2E074eC69A0dFb2997BA6C7d2e1e',\n // Ropsten\n 3: '0x00000000000C2E074eC69A0dFb2997BA6C7d2e1e',\n // Rinkeby\n 4: '0x00000000000C2E074eC69A0dFb2997BA6C7d2e1e',\n // Goerli\n 5: '0x00000000000C2E074eC69A0dFb2997BA6C7d2e1e',\n // Holesky\n 17000: '0x00000000000C2E074eC69A0dFb2997BA6C7d2e1e',\n // Sepolia\n 11155111: '0x00000000000C2E074eC69A0dFb2997BA6C7d2e1e',\n};\n\n/**\n * @type EnsEntry\n *\n * ENS entry representation\n *\n * @property chainId - Id of the associated chain\n * @property ensName - The ENS name\n * @property address - Hex address with the ENS name, or null\n */\nexport type EnsEntry = {\n chainId: Hex;\n ensName: string;\n address: string | null;\n};\n\n/**\n * @type EnsControllerState\n *\n * ENS controller state\n *\n * @property ensEntries - Object of ENS entry objects\n */\nexport type EnsControllerState = {\n ensEntries: {\n [chainId: Hex]: {\n [ensName: string]: EnsEntry;\n };\n };\n ensResolutionsByAddress: { [key: string]: string };\n};\n\nexport type EnsControllerGetStateAction = ControllerGetStateAction<\n typeof name,\n EnsControllerState\n>;\n\nexport type EnsControllerActions =\n | EnsControllerGetStateAction\n | EnsControllerMethodActions;\n\nexport type EnsControllerEvents = ControllerStateChangeEvent<\n typeof name,\n EnsControllerState\n>;\n\nexport type AllowedActions =\n | NetworkControllerGetNetworkClientByIdAction\n | NetworkControllerGetStateAction;\n\nexport type EnsControllerMessenger = Messenger<\n typeof name,\n EnsControllerActions | AllowedActions,\n EnsControllerEvents\n>;\n\nconst metadata: StateMetadata<EnsControllerState> = {\n ensEntries: {\n includeInStateLogs: true,\n persist: true,\n includeInDebugSnapshot: false,\n usedInUi: true,\n },\n ensResolutionsByAddress: {\n includeInStateLogs: true,\n persist: true,\n includeInDebugSnapshot: false,\n usedInUi: true,\n },\n};\n\nconst defaultState = {\n ensEntries: {},\n ensResolutionsByAddress: {},\n};\n\nconst ZERO_ADDRESS = '0x0000000000000000000000000000000000000000';\nconst ZERO_X_ERROR_ADDRESS = '0x';\n\n/**\n * Controller that manages a list ENS names and their resolved addresses\n * by chainId. A null address indicates an unresolved ENS name.\n */\nexport class EnsController extends BaseController<\n typeof name,\n EnsControllerState,\n EnsControllerMessenger\n> {\n #ethProvider: Web3Provider | null = null;\n\n /**\n * Creates an EnsController instance.\n *\n * @param options - Constructor options.\n * @param options.registriesByChainId - Map between chain IDs and ENS contract addresses.\n * @param options.messenger - A reference to the messaging system.\n * @param options.state - Initial state to set on this controller.\n * @param options.onNetworkDidChange - Allows subscribing to network controller networkDidChange events.\n */\n constructor({\n registriesByChainId = DEFAULT_ENS_NETWORK_MAP,\n messenger,\n state = {},\n onNetworkDidChange,\n }: {\n registriesByChainId?: Record<number, Hex>;\n messenger: EnsControllerMessenger;\n state?: Partial<EnsControllerState>;\n onNetworkDidChange?: (\n listener: (networkState: NetworkState) => void,\n ) => void;\n }) {\n super({\n name,\n metadata,\n messenger,\n state: {\n ...defaultState,\n ensEntries: Object.fromEntries(\n Object.entries(registriesByChainId).map(([chainId, address]) => [\n toHex(chainId),\n {\n '.': {\n address,\n chainId: toHex(chainId),\n ensName: '.',\n },\n },\n ]),\n ),\n ...state,\n },\n });\n\n this.messenger.registerMethodActionHandlers(\n this,\n MESSENGER_EXPOSED_METHODS,\n );\n\n this.#setDefaultEthProvider(registriesByChainId);\n\n if (onNetworkDidChange) {\n onNetworkDidChange(({ selectedNetworkClientId }) => {\n this.resetState();\n this.#setEthProvider(selectedNetworkClientId, registriesByChainId);\n });\n }\n }\n\n /**\n * Clears ensResolutionsByAddress state property.\n */\n resetState() {\n this.update((currentState) => {\n currentState.ensResolutionsByAddress = {};\n });\n }\n\n /**\n * Remove all chain Ids and ENS entries from state.\n */\n clear() {\n this.update((state) => {\n state.ensEntries = {};\n });\n }\n\n /**\n * Delete an ENS entry.\n *\n * @param chainId - Parent chain of the ENS entry to delete.\n * @param ensName - Name of the ENS entry to delete.\n * @returns Boolean indicating if the entry was deleted.\n */\n delete(chainId: Hex, ensName: string): boolean {\n const normalizedEnsName = normalizeEnsName(ensName);\n if (\n !isSafeDynamicKey(chainId) ||\n !normalizedEnsName ||\n !this.state.ensEntries[chainId]?.[normalizedEnsName]\n ) {\n return false;\n }\n\n this.update((state) => {\n delete state.ensEntries[chainId][normalizedEnsName];\n\n if (Object.keys(state.ensEntries[chainId]).length === 0) {\n delete state.ensEntries[chainId];\n }\n });\n return true;\n }\n\n /**\n * Retrieve a DNS entry.\n *\n * @param chainId - Parent chain of the ENS entry to retrieve.\n * @param ensName - Name of the ENS entry to retrieve.\n * @returns The EnsEntry or null if it does not exist.\n */\n get(chainId: Hex, ensName: string): EnsEntry | null {\n const normalizedEnsName = normalizeEnsName(ensName);\n\n // TODO Explicitly handle the case where `normalizedEnsName` is `null`\n // eslint-disable-next-line no-implicit-coercion\n return !!normalizedEnsName && this.state.ensEntries[chainId]\n ? this.state.ensEntries[chainId][normalizedEnsName] || null\n : null;\n }\n\n /**\n * Add or update an ENS entry by chainId and ensName.\n *\n * A null address indicates that the ENS name does not resolve.\n *\n * @param chainId - Id of the associated chain.\n * @param ensName - The ENS name.\n * @param address - Associated address (or null) to add or update.\n * @returns Boolean indicating if the entry was set.\n */\n set(chainId: Hex, ensName: string, address: string | null): boolean {\n if (\n !Number.isInteger(Number.parseInt(chainId, 10)) ||\n !ensName ||\n typeof ensName !== 'string' ||\n (address && !isValidHexAddress(address))\n ) {\n throw new Error(\n `Invalid ENS entry: { chainId:${chainId}, ensName:${ensName}, address:${address}}`,\n );\n }\n\n const normalizedEnsName = normalizeEnsName(ensName);\n if (!normalizedEnsName) {\n throw new Error(`Invalid ENS name: ${ensName}`);\n }\n\n const normalizedAddress = address ? toChecksumHexAddress(address) : null;\n const subState = this.state.ensEntries[chainId];\n\n if (subState?.[normalizedEnsName]?.address === normalizedAddress) {\n return false;\n }\n\n this.update((state) => {\n state.ensEntries = {\n ...this.state.ensEntries,\n [chainId]: {\n ...this.state.ensEntries[chainId],\n [normalizedEnsName]: {\n address: normalizedAddress,\n chainId,\n ensName: normalizedEnsName,\n },\n },\n };\n });\n return true;\n }\n\n #setDefaultEthProvider(registriesByChainId?: Record<number, Hex>) {\n const { selectedNetworkClientId } = this.messenger.call(\n 'NetworkController:getState',\n );\n this.#setEthProvider(selectedNetworkClientId, registriesByChainId);\n }\n\n #setEthProvider(\n selectedNetworkClientId: string,\n registriesByChainId?: Record<number, Hex>,\n ) {\n const {\n configuration: { chainId: currentChainId },\n provider,\n } = this.messenger.call(\n 'NetworkController:getNetworkClientById',\n selectedNetworkClientId,\n );\n\n if (\n registriesByChainId?.[parseInt(currentChainId, 16)] &&\n this.#getChainEnsSupport(currentChainId)\n ) {\n this.#ethProvider = new Web3Provider(provider, {\n chainId: convertHexToDecimal(currentChainId),\n name: CHAIN_ID_TO_ETHERS_NETWORK_NAME_MAP[currentChainId as ChainId],\n ensAddress: registriesByChainId[parseInt(currentChainId, 16)],\n });\n } else {\n this.#ethProvider = null;\n }\n }\n\n /**\n * Check if the chain supports ENS.\n *\n * @param chainId - chain id.\n * @returns Boolean indicating if the chain supports ENS.\n */\n #getChainEnsSupport(chainId: Hex) {\n return Boolean(this.state.ensEntries[chainId]);\n }\n\n /**\n * Resolve ens by address.\n *\n * @param nonChecksummedAddress - address\n * @returns ens resolution\n */\n async reverseResolveAddress(nonChecksummedAddress: string) {\n if (!this.#ethProvider) {\n return undefined;\n }\n\n const address = toChecksumHexAddress(nonChecksummedAddress);\n if (this.state.ensResolutionsByAddress[address]) {\n return this.state.ensResolutionsByAddress[address];\n }\n\n let domain: string | null;\n try {\n domain = await this.#ethProvider.lookupAddress(address);\n } catch (error) {\n log(error);\n return undefined;\n }\n\n if (!domain) {\n return undefined;\n }\n\n let registeredAddress: string | null;\n try {\n registeredAddress = await this.#ethProvider.resolveName(domain);\n } catch (error) {\n log(error);\n return undefined;\n }\n\n if (!registeredAddress) {\n return undefined;\n }\n\n if (\n registeredAddress === ZERO_ADDRESS ||\n registeredAddress === ZERO_X_ERROR_ADDRESS\n ) {\n return undefined;\n }\n if (toChecksumHexAddress(registeredAddress) !== address) {\n return undefined;\n }\n\n this.update((state) => {\n state.ensResolutionsByAddress[address] = toASCII(domain as string);\n });\n\n return domain;\n }\n}\n\nexport default EnsController;\n"]}
|
package/dist/EnsController.d.cts
CHANGED
|
@@ -3,6 +3,7 @@ import type { ControllerGetStateAction, ControllerStateChangeEvent } from "@meta
|
|
|
3
3
|
import type { Messenger } from "@metamask/messenger";
|
|
4
4
|
import type { NetworkControllerGetNetworkClientByIdAction, NetworkControllerGetStateAction, NetworkState } from "@metamask/network-controller";
|
|
5
5
|
import type { Hex } from "@metamask/utils";
|
|
6
|
+
import type { EnsControllerMethodActions } from "./EnsController-method-action-types.cjs";
|
|
6
7
|
declare const name = "EnsController";
|
|
7
8
|
export declare const DEFAULT_ENS_NETWORK_MAP: Record<number, Hex>;
|
|
8
9
|
/**
|
|
@@ -36,7 +37,8 @@ export type EnsControllerState = {
|
|
|
36
37
|
[key: string]: string;
|
|
37
38
|
};
|
|
38
39
|
};
|
|
39
|
-
export type
|
|
40
|
+
export type EnsControllerGetStateAction = ControllerGetStateAction<typeof name, EnsControllerState>;
|
|
41
|
+
export type EnsControllerActions = EnsControllerGetStateAction | EnsControllerMethodActions;
|
|
40
42
|
export type EnsControllerEvents = ControllerStateChangeEvent<typeof name, EnsControllerState>;
|
|
41
43
|
export type AllowedActions = NetworkControllerGetNetworkClientByIdAction | NetworkControllerGetStateAction;
|
|
42
44
|
export type EnsControllerMessenger = Messenger<typeof name, EnsControllerActions | AllowedActions, EnsControllerEvents>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"EnsController.d.cts","sourceRoot":"","sources":["../src/EnsController.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,cAAc,EAAE,kCAAkC;AAC3D,OAAO,KAAK,EAEV,wBAAwB,EACxB,0BAA0B,EAC3B,kCAAkC;AAWnC,OAAO,KAAK,EAAE,SAAS,EAAE,4BAA4B;AACrD,OAAO,KAAK,EACV,2CAA2C,EAC3C,+BAA+B,EAC/B,YAAY,EACb,qCAAqC;AACtC,OAAO,KAAK,EAAE,GAAG,EAAE,wBAAwB;
|
|
1
|
+
{"version":3,"file":"EnsController.d.cts","sourceRoot":"","sources":["../src/EnsController.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,cAAc,EAAE,kCAAkC;AAC3D,OAAO,KAAK,EAEV,wBAAwB,EACxB,0BAA0B,EAC3B,kCAAkC;AAWnC,OAAO,KAAK,EAAE,SAAS,EAAE,4BAA4B;AACrD,OAAO,KAAK,EACV,2CAA2C,EAC3C,+BAA+B,EAC/B,YAAY,EACb,qCAAqC;AACtC,OAAO,KAAK,EAAE,GAAG,EAAE,wBAAwB;AAI3C,OAAO,KAAK,EAAE,0BAA0B,EAAE,gDAA4C;AAItF,QAAA,MAAM,IAAI,kBAAkB,CAAC;AAY7B,eAAO,MAAM,uBAAuB,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAavD,CAAC;AAEF;;;;;;;;GAQG;AACH,MAAM,MAAM,QAAQ,GAAG;IACrB,OAAO,EAAE,GAAG,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;CACxB,CAAC;AAEF;;;;;;GAMG;AACH,MAAM,MAAM,kBAAkB,GAAG;IAC/B,UAAU,EAAE;QACV,CAAC,OAAO,EAAE,GAAG,GAAG;YACd,CAAC,OAAO,EAAE,MAAM,GAAG,QAAQ,CAAC;SAC7B,CAAC;KACH,CAAC;IACF,uBAAuB,EAAE;QAAE,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAAA;KAAE,CAAC;CACpD,CAAC;AAEF,MAAM,MAAM,2BAA2B,GAAG,wBAAwB,CAChE,OAAO,IAAI,EACX,kBAAkB,CACnB,CAAC;AAEF,MAAM,MAAM,oBAAoB,GAC5B,2BAA2B,GAC3B,0BAA0B,CAAC;AAE/B,MAAM,MAAM,mBAAmB,GAAG,0BAA0B,CAC1D,OAAO,IAAI,EACX,kBAAkB,CACnB,CAAC;AAEF,MAAM,MAAM,cAAc,GACtB,2CAA2C,GAC3C,+BAA+B,CAAC;AAEpC,MAAM,MAAM,sBAAsB,GAAG,SAAS,CAC5C,OAAO,IAAI,EACX,oBAAoB,GAAG,cAAc,EACrC,mBAAmB,CACpB,CAAC;AAyBF;;;GAGG;AACH,qBAAa,aAAc,SAAQ,cAAc,CAC/C,OAAO,IAAI,EACX,kBAAkB,EAClB,sBAAsB,CACvB;;IAGC;;;;;;;;OAQG;gBACS,EACV,mBAA6C,EAC7C,SAAS,EACT,KAAU,EACV,kBAAkB,GACnB,EAAE;QACD,mBAAmB,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;QAC1C,SAAS,EAAE,sBAAsB,CAAC;QAClC,KAAK,CAAC,EAAE,OAAO,CAAC,kBAAkB,CAAC,CAAC;QACpC,kBAAkB,CAAC,EAAE,CACnB,QAAQ,EAAE,CAAC,YAAY,EAAE,YAAY,KAAK,IAAI,KAC3C,IAAI,CAAC;KACX;IAsCD;;OAEG;IACH,UAAU;IAMV;;OAEG;IACH,KAAK;IAML;;;;;;OAMG;IACH,MAAM,CAAC,OAAO,EAAE,GAAG,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO;IAoB9C;;;;;;OAMG;IACH,GAAG,CAAC,OAAO,EAAE,GAAG,EAAE,OAAO,EAAE,MAAM,GAAG,QAAQ,GAAG,IAAI;IAUnD;;;;;;;;;OASG;IACH,GAAG,CAAC,OAAO,EAAE,GAAG,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,IAAI,GAAG,OAAO;IAmFnE;;;;;OAKG;IACG,qBAAqB,CAAC,qBAAqB,EAAE,MAAM;CAkD1D;AAED,eAAe,aAAa,CAAC"}
|
package/dist/EnsController.d.mts
CHANGED
|
@@ -3,6 +3,7 @@ import type { ControllerGetStateAction, ControllerStateChangeEvent } from "@meta
|
|
|
3
3
|
import type { Messenger } from "@metamask/messenger";
|
|
4
4
|
import type { NetworkControllerGetNetworkClientByIdAction, NetworkControllerGetStateAction, NetworkState } from "@metamask/network-controller";
|
|
5
5
|
import type { Hex } from "@metamask/utils";
|
|
6
|
+
import type { EnsControllerMethodActions } from "./EnsController-method-action-types.mjs";
|
|
6
7
|
declare const name = "EnsController";
|
|
7
8
|
export declare const DEFAULT_ENS_NETWORK_MAP: Record<number, Hex>;
|
|
8
9
|
/**
|
|
@@ -36,7 +37,8 @@ export type EnsControllerState = {
|
|
|
36
37
|
[key: string]: string;
|
|
37
38
|
};
|
|
38
39
|
};
|
|
39
|
-
export type
|
|
40
|
+
export type EnsControllerGetStateAction = ControllerGetStateAction<typeof name, EnsControllerState>;
|
|
41
|
+
export type EnsControllerActions = EnsControllerGetStateAction | EnsControllerMethodActions;
|
|
40
42
|
export type EnsControllerEvents = ControllerStateChangeEvent<typeof name, EnsControllerState>;
|
|
41
43
|
export type AllowedActions = NetworkControllerGetNetworkClientByIdAction | NetworkControllerGetStateAction;
|
|
42
44
|
export type EnsControllerMessenger = Messenger<typeof name, EnsControllerActions | AllowedActions, EnsControllerEvents>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"EnsController.d.mts","sourceRoot":"","sources":["../src/EnsController.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,cAAc,EAAE,kCAAkC;AAC3D,OAAO,KAAK,EAEV,wBAAwB,EACxB,0BAA0B,EAC3B,kCAAkC;AAWnC,OAAO,KAAK,EAAE,SAAS,EAAE,4BAA4B;AACrD,OAAO,KAAK,EACV,2CAA2C,EAC3C,+BAA+B,EAC/B,YAAY,EACb,qCAAqC;AACtC,OAAO,KAAK,EAAE,GAAG,EAAE,wBAAwB;
|
|
1
|
+
{"version":3,"file":"EnsController.d.mts","sourceRoot":"","sources":["../src/EnsController.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,cAAc,EAAE,kCAAkC;AAC3D,OAAO,KAAK,EAEV,wBAAwB,EACxB,0BAA0B,EAC3B,kCAAkC;AAWnC,OAAO,KAAK,EAAE,SAAS,EAAE,4BAA4B;AACrD,OAAO,KAAK,EACV,2CAA2C,EAC3C,+BAA+B,EAC/B,YAAY,EACb,qCAAqC;AACtC,OAAO,KAAK,EAAE,GAAG,EAAE,wBAAwB;AAI3C,OAAO,KAAK,EAAE,0BAA0B,EAAE,gDAA4C;AAItF,QAAA,MAAM,IAAI,kBAAkB,CAAC;AAY7B,eAAO,MAAM,uBAAuB,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAavD,CAAC;AAEF;;;;;;;;GAQG;AACH,MAAM,MAAM,QAAQ,GAAG;IACrB,OAAO,EAAE,GAAG,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;CACxB,CAAC;AAEF;;;;;;GAMG;AACH,MAAM,MAAM,kBAAkB,GAAG;IAC/B,UAAU,EAAE;QACV,CAAC,OAAO,EAAE,GAAG,GAAG;YACd,CAAC,OAAO,EAAE,MAAM,GAAG,QAAQ,CAAC;SAC7B,CAAC;KACH,CAAC;IACF,uBAAuB,EAAE;QAAE,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAAA;KAAE,CAAC;CACpD,CAAC;AAEF,MAAM,MAAM,2BAA2B,GAAG,wBAAwB,CAChE,OAAO,IAAI,EACX,kBAAkB,CACnB,CAAC;AAEF,MAAM,MAAM,oBAAoB,GAC5B,2BAA2B,GAC3B,0BAA0B,CAAC;AAE/B,MAAM,MAAM,mBAAmB,GAAG,0BAA0B,CAC1D,OAAO,IAAI,EACX,kBAAkB,CACnB,CAAC;AAEF,MAAM,MAAM,cAAc,GACtB,2CAA2C,GAC3C,+BAA+B,CAAC;AAEpC,MAAM,MAAM,sBAAsB,GAAG,SAAS,CAC5C,OAAO,IAAI,EACX,oBAAoB,GAAG,cAAc,EACrC,mBAAmB,CACpB,CAAC;AAyBF;;;GAGG;AACH,qBAAa,aAAc,SAAQ,cAAc,CAC/C,OAAO,IAAI,EACX,kBAAkB,EAClB,sBAAsB,CACvB;;IAGC;;;;;;;;OAQG;gBACS,EACV,mBAA6C,EAC7C,SAAS,EACT,KAAU,EACV,kBAAkB,GACnB,EAAE;QACD,mBAAmB,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;QAC1C,SAAS,EAAE,sBAAsB,CAAC;QAClC,KAAK,CAAC,EAAE,OAAO,CAAC,kBAAkB,CAAC,CAAC;QACpC,kBAAkB,CAAC,EAAE,CACnB,QAAQ,EAAE,CAAC,YAAY,EAAE,YAAY,KAAK,IAAI,KAC3C,IAAI,CAAC;KACX;IAsCD;;OAEG;IACH,UAAU;IAMV;;OAEG;IACH,KAAK;IAML;;;;;;OAMG;IACH,MAAM,CAAC,OAAO,EAAE,GAAG,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO;IAoB9C;;;;;;OAMG;IACH,GAAG,CAAC,OAAO,EAAE,GAAG,EAAE,OAAO,EAAE,MAAM,GAAG,QAAQ,GAAG,IAAI;IAUnD;;;;;;;;;OASG;IACH,GAAG,CAAC,OAAO,EAAE,GAAG,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,IAAI,GAAG,OAAO;IAmFnE;;;;;OAKG;IACG,qBAAqB,CAAC,qBAAqB,EAAE,MAAM;CAkD1D;AAED,eAAe,aAAa,CAAC"}
|
package/dist/EnsController.mjs
CHANGED
|
@@ -18,6 +18,14 @@ import $punycodepunycodejs from "punycode/punycode.js";
|
|
|
18
18
|
const { toASCII } = $punycodepunycodejs;
|
|
19
19
|
const log = createProjectLogger('ens-controller');
|
|
20
20
|
const name = 'EnsController';
|
|
21
|
+
const MESSENGER_EXPOSED_METHODS = [
|
|
22
|
+
'clear',
|
|
23
|
+
'delete',
|
|
24
|
+
'get',
|
|
25
|
+
'resetState',
|
|
26
|
+
'reverseResolveAddress',
|
|
27
|
+
'set',
|
|
28
|
+
];
|
|
21
29
|
// Map of chainIDs and ENS registry contract addresses
|
|
22
30
|
export const DEFAULT_ENS_NETWORK_MAP = {
|
|
23
31
|
// Mainnet
|
|
@@ -89,6 +97,7 @@ export class EnsController extends BaseController {
|
|
|
89
97
|
});
|
|
90
98
|
_EnsController_instances.add(this);
|
|
91
99
|
_EnsController_ethProvider.set(this, null);
|
|
100
|
+
this.messenger.registerMethodActionHandlers(this, MESSENGER_EXPOSED_METHODS);
|
|
92
101
|
__classPrivateFieldGet(this, _EnsController_instances, "m", _EnsController_setDefaultEthProvider).call(this, registriesByChainId);
|
|
93
102
|
if (onNetworkDidChange) {
|
|
94
103
|
onNetworkDidChange(({ selectedNetworkClientId }) => {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"EnsController.mjs","sourceRoot":"","sources":["../src/EnsController.ts"],"names":[],"mappings":"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","sourcesContent":["import { Web3Provider } from '@ethersproject/providers';\nimport { BaseController } from '@metamask/base-controller';\nimport type {\n StateMetadata,\n ControllerGetStateAction,\n ControllerStateChangeEvent,\n} from '@metamask/base-controller';\nimport type { ChainId } from '@metamask/controller-utils';\nimport {\n normalizeEnsName,\n isValidHexAddress,\n isSafeDynamicKey,\n toChecksumHexAddress,\n CHAIN_ID_TO_ETHERS_NETWORK_NAME_MAP,\n convertHexToDecimal,\n toHex,\n} from '@metamask/controller-utils';\nimport type { Messenger } from '@metamask/messenger';\nimport type {\n NetworkControllerGetNetworkClientByIdAction,\n NetworkControllerGetStateAction,\n NetworkState,\n} from '@metamask/network-controller';\nimport type { Hex } from '@metamask/utils';\nimport { createProjectLogger } from '@metamask/utils';\nimport { toASCII } from 'punycode/punycode.js';\n\nconst log = createProjectLogger('ens-controller');\n\nconst name = 'EnsController';\n\n// Map of chainIDs and ENS registry contract addresses\nexport const DEFAULT_ENS_NETWORK_MAP: Record<number, Hex> = {\n // Mainnet\n 1: '0x00000000000C2E074eC69A0dFb2997BA6C7d2e1e',\n // Ropsten\n 3: '0x00000000000C2E074eC69A0dFb2997BA6C7d2e1e',\n // Rinkeby\n 4: '0x00000000000C2E074eC69A0dFb2997BA6C7d2e1e',\n // Goerli\n 5: '0x00000000000C2E074eC69A0dFb2997BA6C7d2e1e',\n // Holesky\n 17000: '0x00000000000C2E074eC69A0dFb2997BA6C7d2e1e',\n // Sepolia\n 11155111: '0x00000000000C2E074eC69A0dFb2997BA6C7d2e1e',\n};\n\n/**\n * @type EnsEntry\n *\n * ENS entry representation\n *\n * @property chainId - Id of the associated chain\n * @property ensName - The ENS name\n * @property address - Hex address with the ENS name, or null\n */\nexport type EnsEntry = {\n chainId: Hex;\n ensName: string;\n address: string | null;\n};\n\n/**\n * @type EnsControllerState\n *\n * ENS controller state\n *\n * @property ensEntries - Object of ENS entry objects\n */\nexport type EnsControllerState = {\n ensEntries: {\n [chainId: Hex]: {\n [ensName: string]: EnsEntry;\n };\n };\n ensResolutionsByAddress: { [key: string]: string };\n};\n\nexport type EnsControllerActions = ControllerGetStateAction<\n typeof name,\n EnsControllerState\n>;\n\nexport type EnsControllerEvents = ControllerStateChangeEvent<\n typeof name,\n EnsControllerState\n>;\n\nexport type AllowedActions =\n | NetworkControllerGetNetworkClientByIdAction\n | NetworkControllerGetStateAction;\n\nexport type EnsControllerMessenger = Messenger<\n typeof name,\n EnsControllerActions | AllowedActions,\n EnsControllerEvents\n>;\n\nconst metadata: StateMetadata<EnsControllerState> = {\n ensEntries: {\n includeInStateLogs: true,\n persist: true,\n includeInDebugSnapshot: false,\n usedInUi: true,\n },\n ensResolutionsByAddress: {\n includeInStateLogs: true,\n persist: true,\n includeInDebugSnapshot: false,\n usedInUi: true,\n },\n};\n\nconst defaultState = {\n ensEntries: {},\n ensResolutionsByAddress: {},\n};\n\nconst ZERO_ADDRESS = '0x0000000000000000000000000000000000000000';\nconst ZERO_X_ERROR_ADDRESS = '0x';\n\n/**\n * Controller that manages a list ENS names and their resolved addresses\n * by chainId. A null address indicates an unresolved ENS name.\n */\nexport class EnsController extends BaseController<\n typeof name,\n EnsControllerState,\n EnsControllerMessenger\n> {\n #ethProvider: Web3Provider | null = null;\n\n /**\n * Creates an EnsController instance.\n *\n * @param options - Constructor options.\n * @param options.registriesByChainId - Map between chain IDs and ENS contract addresses.\n * @param options.messenger - A reference to the messaging system.\n * @param options.state - Initial state to set on this controller.\n * @param options.onNetworkDidChange - Allows subscribing to network controller networkDidChange events.\n */\n constructor({\n registriesByChainId = DEFAULT_ENS_NETWORK_MAP,\n messenger,\n state = {},\n onNetworkDidChange,\n }: {\n registriesByChainId?: Record<number, Hex>;\n messenger: EnsControllerMessenger;\n state?: Partial<EnsControllerState>;\n onNetworkDidChange?: (\n listener: (networkState: NetworkState) => void,\n ) => void;\n }) {\n super({\n name,\n metadata,\n messenger,\n state: {\n ...defaultState,\n ensEntries: Object.fromEntries(\n Object.entries(registriesByChainId).map(([chainId, address]) => [\n toHex(chainId),\n {\n '.': {\n address,\n chainId: toHex(chainId),\n ensName: '.',\n },\n },\n ]),\n ),\n ...state,\n },\n });\n\n this.#setDefaultEthProvider(registriesByChainId);\n\n if (onNetworkDidChange) {\n onNetworkDidChange(({ selectedNetworkClientId }) => {\n this.resetState();\n this.#setEthProvider(selectedNetworkClientId, registriesByChainId);\n });\n }\n }\n\n /**\n * Clears ensResolutionsByAddress state property.\n */\n resetState() {\n this.update((currentState) => {\n currentState.ensResolutionsByAddress = {};\n });\n }\n\n /**\n * Remove all chain Ids and ENS entries from state.\n */\n clear() {\n this.update((state) => {\n state.ensEntries = {};\n });\n }\n\n /**\n * Delete an ENS entry.\n *\n * @param chainId - Parent chain of the ENS entry to delete.\n * @param ensName - Name of the ENS entry to delete.\n * @returns Boolean indicating if the entry was deleted.\n */\n delete(chainId: Hex, ensName: string): boolean {\n const normalizedEnsName = normalizeEnsName(ensName);\n if (\n !isSafeDynamicKey(chainId) ||\n !normalizedEnsName ||\n !this.state.ensEntries[chainId]?.[normalizedEnsName]\n ) {\n return false;\n }\n\n this.update((state) => {\n delete state.ensEntries[chainId][normalizedEnsName];\n\n if (Object.keys(state.ensEntries[chainId]).length === 0) {\n delete state.ensEntries[chainId];\n }\n });\n return true;\n }\n\n /**\n * Retrieve a DNS entry.\n *\n * @param chainId - Parent chain of the ENS entry to retrieve.\n * @param ensName - Name of the ENS entry to retrieve.\n * @returns The EnsEntry or null if it does not exist.\n */\n get(chainId: Hex, ensName: string): EnsEntry | null {\n const normalizedEnsName = normalizeEnsName(ensName);\n\n // TODO Explicitly handle the case where `normalizedEnsName` is `null`\n // eslint-disable-next-line no-implicit-coercion\n return !!normalizedEnsName && this.state.ensEntries[chainId]\n ? this.state.ensEntries[chainId][normalizedEnsName] || null\n : null;\n }\n\n /**\n * Add or update an ENS entry by chainId and ensName.\n *\n * A null address indicates that the ENS name does not resolve.\n *\n * @param chainId - Id of the associated chain.\n * @param ensName - The ENS name.\n * @param address - Associated address (or null) to add or update.\n * @returns Boolean indicating if the entry was set.\n */\n set(chainId: Hex, ensName: string, address: string | null): boolean {\n if (\n !Number.isInteger(Number.parseInt(chainId, 10)) ||\n !ensName ||\n typeof ensName !== 'string' ||\n (address && !isValidHexAddress(address))\n ) {\n throw new Error(\n `Invalid ENS entry: { chainId:${chainId}, ensName:${ensName}, address:${address}}`,\n );\n }\n\n const normalizedEnsName = normalizeEnsName(ensName);\n if (!normalizedEnsName) {\n throw new Error(`Invalid ENS name: ${ensName}`);\n }\n\n const normalizedAddress = address ? toChecksumHexAddress(address) : null;\n const subState = this.state.ensEntries[chainId];\n\n if (subState?.[normalizedEnsName]?.address === normalizedAddress) {\n return false;\n }\n\n this.update((state) => {\n state.ensEntries = {\n ...this.state.ensEntries,\n [chainId]: {\n ...this.state.ensEntries[chainId],\n [normalizedEnsName]: {\n address: normalizedAddress,\n chainId,\n ensName: normalizedEnsName,\n },\n },\n };\n });\n return true;\n }\n\n #setDefaultEthProvider(registriesByChainId?: Record<number, Hex>) {\n const { selectedNetworkClientId } = this.messenger.call(\n 'NetworkController:getState',\n );\n this.#setEthProvider(selectedNetworkClientId, registriesByChainId);\n }\n\n #setEthProvider(\n selectedNetworkClientId: string,\n registriesByChainId?: Record<number, Hex>,\n ) {\n const {\n configuration: { chainId: currentChainId },\n provider,\n } = this.messenger.call(\n 'NetworkController:getNetworkClientById',\n selectedNetworkClientId,\n );\n\n if (\n registriesByChainId?.[parseInt(currentChainId, 16)] &&\n this.#getChainEnsSupport(currentChainId)\n ) {\n this.#ethProvider = new Web3Provider(provider, {\n chainId: convertHexToDecimal(currentChainId),\n name: CHAIN_ID_TO_ETHERS_NETWORK_NAME_MAP[currentChainId as ChainId],\n ensAddress: registriesByChainId[parseInt(currentChainId, 16)],\n });\n } else {\n this.#ethProvider = null;\n }\n }\n\n /**\n * Check if the chain supports ENS.\n *\n * @param chainId - chain id.\n * @returns Boolean indicating if the chain supports ENS.\n */\n #getChainEnsSupport(chainId: Hex) {\n return Boolean(this.state.ensEntries[chainId]);\n }\n\n /**\n * Resolve ens by address.\n *\n * @param nonChecksummedAddress - address\n * @returns ens resolution\n */\n async reverseResolveAddress(nonChecksummedAddress: string) {\n if (!this.#ethProvider) {\n return undefined;\n }\n\n const address = toChecksumHexAddress(nonChecksummedAddress);\n if (this.state.ensResolutionsByAddress[address]) {\n return this.state.ensResolutionsByAddress[address];\n }\n\n let domain: string | null;\n try {\n domain = await this.#ethProvider.lookupAddress(address);\n } catch (error) {\n log(error);\n return undefined;\n }\n\n if (!domain) {\n return undefined;\n }\n\n let registeredAddress: string | null;\n try {\n registeredAddress = await this.#ethProvider.resolveName(domain);\n } catch (error) {\n log(error);\n return undefined;\n }\n\n if (!registeredAddress) {\n return undefined;\n }\n\n if (\n registeredAddress === ZERO_ADDRESS ||\n registeredAddress === ZERO_X_ERROR_ADDRESS\n ) {\n return undefined;\n }\n if (toChecksumHexAddress(registeredAddress) !== address) {\n return undefined;\n }\n\n this.update((state) => {\n state.ensResolutionsByAddress[address] = toASCII(domain as string);\n });\n\n return domain;\n }\n}\n\nexport default EnsController;\n"]}
|
|
1
|
+
{"version":3,"file":"EnsController.mjs","sourceRoot":"","sources":["../src/EnsController.ts"],"names":[],"mappings":"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","sourcesContent":["import { Web3Provider } from '@ethersproject/providers';\nimport { BaseController } from '@metamask/base-controller';\nimport type {\n StateMetadata,\n ControllerGetStateAction,\n ControllerStateChangeEvent,\n} from '@metamask/base-controller';\nimport type { ChainId } from '@metamask/controller-utils';\nimport {\n normalizeEnsName,\n isValidHexAddress,\n isSafeDynamicKey,\n toChecksumHexAddress,\n CHAIN_ID_TO_ETHERS_NETWORK_NAME_MAP,\n convertHexToDecimal,\n toHex,\n} from '@metamask/controller-utils';\nimport type { Messenger } from '@metamask/messenger';\nimport type {\n NetworkControllerGetNetworkClientByIdAction,\n NetworkControllerGetStateAction,\n NetworkState,\n} from '@metamask/network-controller';\nimport type { Hex } from '@metamask/utils';\nimport { createProjectLogger } from '@metamask/utils';\nimport { toASCII } from 'punycode/punycode.js';\n\nimport type { EnsControllerMethodActions } from './EnsController-method-action-types';\n\nconst log = createProjectLogger('ens-controller');\n\nconst name = 'EnsController';\n\nconst MESSENGER_EXPOSED_METHODS = [\n 'clear',\n 'delete',\n 'get',\n 'resetState',\n 'reverseResolveAddress',\n 'set',\n] as const;\n\n// Map of chainIDs and ENS registry contract addresses\nexport const DEFAULT_ENS_NETWORK_MAP: Record<number, Hex> = {\n // Mainnet\n 1: '0x00000000000C2E074eC69A0dFb2997BA6C7d2e1e',\n // Ropsten\n 3: '0x00000000000C2E074eC69A0dFb2997BA6C7d2e1e',\n // Rinkeby\n 4: '0x00000000000C2E074eC69A0dFb2997BA6C7d2e1e',\n // Goerli\n 5: '0x00000000000C2E074eC69A0dFb2997BA6C7d2e1e',\n // Holesky\n 17000: '0x00000000000C2E074eC69A0dFb2997BA6C7d2e1e',\n // Sepolia\n 11155111: '0x00000000000C2E074eC69A0dFb2997BA6C7d2e1e',\n};\n\n/**\n * @type EnsEntry\n *\n * ENS entry representation\n *\n * @property chainId - Id of the associated chain\n * @property ensName - The ENS name\n * @property address - Hex address with the ENS name, or null\n */\nexport type EnsEntry = {\n chainId: Hex;\n ensName: string;\n address: string | null;\n};\n\n/**\n * @type EnsControllerState\n *\n * ENS controller state\n *\n * @property ensEntries - Object of ENS entry objects\n */\nexport type EnsControllerState = {\n ensEntries: {\n [chainId: Hex]: {\n [ensName: string]: EnsEntry;\n };\n };\n ensResolutionsByAddress: { [key: string]: string };\n};\n\nexport type EnsControllerGetStateAction = ControllerGetStateAction<\n typeof name,\n EnsControllerState\n>;\n\nexport type EnsControllerActions =\n | EnsControllerGetStateAction\n | EnsControllerMethodActions;\n\nexport type EnsControllerEvents = ControllerStateChangeEvent<\n typeof name,\n EnsControllerState\n>;\n\nexport type AllowedActions =\n | NetworkControllerGetNetworkClientByIdAction\n | NetworkControllerGetStateAction;\n\nexport type EnsControllerMessenger = Messenger<\n typeof name,\n EnsControllerActions | AllowedActions,\n EnsControllerEvents\n>;\n\nconst metadata: StateMetadata<EnsControllerState> = {\n ensEntries: {\n includeInStateLogs: true,\n persist: true,\n includeInDebugSnapshot: false,\n usedInUi: true,\n },\n ensResolutionsByAddress: {\n includeInStateLogs: true,\n persist: true,\n includeInDebugSnapshot: false,\n usedInUi: true,\n },\n};\n\nconst defaultState = {\n ensEntries: {},\n ensResolutionsByAddress: {},\n};\n\nconst ZERO_ADDRESS = '0x0000000000000000000000000000000000000000';\nconst ZERO_X_ERROR_ADDRESS = '0x';\n\n/**\n * Controller that manages a list ENS names and their resolved addresses\n * by chainId. A null address indicates an unresolved ENS name.\n */\nexport class EnsController extends BaseController<\n typeof name,\n EnsControllerState,\n EnsControllerMessenger\n> {\n #ethProvider: Web3Provider | null = null;\n\n /**\n * Creates an EnsController instance.\n *\n * @param options - Constructor options.\n * @param options.registriesByChainId - Map between chain IDs and ENS contract addresses.\n * @param options.messenger - A reference to the messaging system.\n * @param options.state - Initial state to set on this controller.\n * @param options.onNetworkDidChange - Allows subscribing to network controller networkDidChange events.\n */\n constructor({\n registriesByChainId = DEFAULT_ENS_NETWORK_MAP,\n messenger,\n state = {},\n onNetworkDidChange,\n }: {\n registriesByChainId?: Record<number, Hex>;\n messenger: EnsControllerMessenger;\n state?: Partial<EnsControllerState>;\n onNetworkDidChange?: (\n listener: (networkState: NetworkState) => void,\n ) => void;\n }) {\n super({\n name,\n metadata,\n messenger,\n state: {\n ...defaultState,\n ensEntries: Object.fromEntries(\n Object.entries(registriesByChainId).map(([chainId, address]) => [\n toHex(chainId),\n {\n '.': {\n address,\n chainId: toHex(chainId),\n ensName: '.',\n },\n },\n ]),\n ),\n ...state,\n },\n });\n\n this.messenger.registerMethodActionHandlers(\n this,\n MESSENGER_EXPOSED_METHODS,\n );\n\n this.#setDefaultEthProvider(registriesByChainId);\n\n if (onNetworkDidChange) {\n onNetworkDidChange(({ selectedNetworkClientId }) => {\n this.resetState();\n this.#setEthProvider(selectedNetworkClientId, registriesByChainId);\n });\n }\n }\n\n /**\n * Clears ensResolutionsByAddress state property.\n */\n resetState() {\n this.update((currentState) => {\n currentState.ensResolutionsByAddress = {};\n });\n }\n\n /**\n * Remove all chain Ids and ENS entries from state.\n */\n clear() {\n this.update((state) => {\n state.ensEntries = {};\n });\n }\n\n /**\n * Delete an ENS entry.\n *\n * @param chainId - Parent chain of the ENS entry to delete.\n * @param ensName - Name of the ENS entry to delete.\n * @returns Boolean indicating if the entry was deleted.\n */\n delete(chainId: Hex, ensName: string): boolean {\n const normalizedEnsName = normalizeEnsName(ensName);\n if (\n !isSafeDynamicKey(chainId) ||\n !normalizedEnsName ||\n !this.state.ensEntries[chainId]?.[normalizedEnsName]\n ) {\n return false;\n }\n\n this.update((state) => {\n delete state.ensEntries[chainId][normalizedEnsName];\n\n if (Object.keys(state.ensEntries[chainId]).length === 0) {\n delete state.ensEntries[chainId];\n }\n });\n return true;\n }\n\n /**\n * Retrieve a DNS entry.\n *\n * @param chainId - Parent chain of the ENS entry to retrieve.\n * @param ensName - Name of the ENS entry to retrieve.\n * @returns The EnsEntry or null if it does not exist.\n */\n get(chainId: Hex, ensName: string): EnsEntry | null {\n const normalizedEnsName = normalizeEnsName(ensName);\n\n // TODO Explicitly handle the case where `normalizedEnsName` is `null`\n // eslint-disable-next-line no-implicit-coercion\n return !!normalizedEnsName && this.state.ensEntries[chainId]\n ? this.state.ensEntries[chainId][normalizedEnsName] || null\n : null;\n }\n\n /**\n * Add or update an ENS entry by chainId and ensName.\n *\n * A null address indicates that the ENS name does not resolve.\n *\n * @param chainId - Id of the associated chain.\n * @param ensName - The ENS name.\n * @param address - Associated address (or null) to add or update.\n * @returns Boolean indicating if the entry was set.\n */\n set(chainId: Hex, ensName: string, address: string | null): boolean {\n if (\n !Number.isInteger(Number.parseInt(chainId, 10)) ||\n !ensName ||\n typeof ensName !== 'string' ||\n (address && !isValidHexAddress(address))\n ) {\n throw new Error(\n `Invalid ENS entry: { chainId:${chainId}, ensName:${ensName}, address:${address}}`,\n );\n }\n\n const normalizedEnsName = normalizeEnsName(ensName);\n if (!normalizedEnsName) {\n throw new Error(`Invalid ENS name: ${ensName}`);\n }\n\n const normalizedAddress = address ? toChecksumHexAddress(address) : null;\n const subState = this.state.ensEntries[chainId];\n\n if (subState?.[normalizedEnsName]?.address === normalizedAddress) {\n return false;\n }\n\n this.update((state) => {\n state.ensEntries = {\n ...this.state.ensEntries,\n [chainId]: {\n ...this.state.ensEntries[chainId],\n [normalizedEnsName]: {\n address: normalizedAddress,\n chainId,\n ensName: normalizedEnsName,\n },\n },\n };\n });\n return true;\n }\n\n #setDefaultEthProvider(registriesByChainId?: Record<number, Hex>) {\n const { selectedNetworkClientId } = this.messenger.call(\n 'NetworkController:getState',\n );\n this.#setEthProvider(selectedNetworkClientId, registriesByChainId);\n }\n\n #setEthProvider(\n selectedNetworkClientId: string,\n registriesByChainId?: Record<number, Hex>,\n ) {\n const {\n configuration: { chainId: currentChainId },\n provider,\n } = this.messenger.call(\n 'NetworkController:getNetworkClientById',\n selectedNetworkClientId,\n );\n\n if (\n registriesByChainId?.[parseInt(currentChainId, 16)] &&\n this.#getChainEnsSupport(currentChainId)\n ) {\n this.#ethProvider = new Web3Provider(provider, {\n chainId: convertHexToDecimal(currentChainId),\n name: CHAIN_ID_TO_ETHERS_NETWORK_NAME_MAP[currentChainId as ChainId],\n ensAddress: registriesByChainId[parseInt(currentChainId, 16)],\n });\n } else {\n this.#ethProvider = null;\n }\n }\n\n /**\n * Check if the chain supports ENS.\n *\n * @param chainId - chain id.\n * @returns Boolean indicating if the chain supports ENS.\n */\n #getChainEnsSupport(chainId: Hex) {\n return Boolean(this.state.ensEntries[chainId]);\n }\n\n /**\n * Resolve ens by address.\n *\n * @param nonChecksummedAddress - address\n * @returns ens resolution\n */\n async reverseResolveAddress(nonChecksummedAddress: string) {\n if (!this.#ethProvider) {\n return undefined;\n }\n\n const address = toChecksumHexAddress(nonChecksummedAddress);\n if (this.state.ensResolutionsByAddress[address]) {\n return this.state.ensResolutionsByAddress[address];\n }\n\n let domain: string | null;\n try {\n domain = await this.#ethProvider.lookupAddress(address);\n } catch (error) {\n log(error);\n return undefined;\n }\n\n if (!domain) {\n return undefined;\n }\n\n let registeredAddress: string | null;\n try {\n registeredAddress = await this.#ethProvider.resolveName(domain);\n } catch (error) {\n log(error);\n return undefined;\n }\n\n if (!registeredAddress) {\n return undefined;\n }\n\n if (\n registeredAddress === ZERO_ADDRESS ||\n registeredAddress === ZERO_X_ERROR_ADDRESS\n ) {\n return undefined;\n }\n if (toChecksumHexAddress(registeredAddress) !== address) {\n return undefined;\n }\n\n this.update((state) => {\n state.ensResolutionsByAddress[address] = toASCII(domain as string);\n });\n\n return domain;\n }\n}\n\nexport default EnsController;\n"]}
|
package/dist/index.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.cjs","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,sDAAgC","sourcesContent":["export * from './EnsController';\n"]}
|
|
1
|
+
{"version":3,"file":"index.cjs","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,sDAAgC","sourcesContent":["export * from './EnsController';\nexport type {\n EnsControllerResetStateAction,\n EnsControllerClearAction,\n EnsControllerDeleteAction,\n EnsControllerGetAction,\n EnsControllerSetAction,\n EnsControllerReverseResolveAddressAction,\n} from './EnsController-method-action-types';\n"]}
|
package/dist/index.d.cts
CHANGED
|
@@ -1,2 +1,3 @@
|
|
|
1
1
|
export * from "./EnsController.cjs";
|
|
2
|
+
export type { EnsControllerResetStateAction, EnsControllerClearAction, EnsControllerDeleteAction, EnsControllerGetAction, EnsControllerSetAction, EnsControllerReverseResolveAddressAction, } from "./EnsController-method-action-types.cjs";
|
|
2
3
|
//# sourceMappingURL=index.d.cts.map
|
package/dist/index.d.cts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.cts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,oCAAgC"}
|
|
1
|
+
{"version":3,"file":"index.d.cts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,oCAAgC;AAChC,YAAY,EACV,6BAA6B,EAC7B,wBAAwB,EACxB,yBAAyB,EACzB,sBAAsB,EACtB,sBAAsB,EACtB,wCAAwC,GACzC,gDAA4C"}
|
package/dist/index.d.mts
CHANGED
|
@@ -1,2 +1,3 @@
|
|
|
1
1
|
export * from "./EnsController.mjs";
|
|
2
|
+
export type { EnsControllerResetStateAction, EnsControllerClearAction, EnsControllerDeleteAction, EnsControllerGetAction, EnsControllerSetAction, EnsControllerReverseResolveAddressAction, } from "./EnsController-method-action-types.mjs";
|
|
2
3
|
//# sourceMappingURL=index.d.mts.map
|
package/dist/index.d.mts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.mts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,oCAAgC"}
|
|
1
|
+
{"version":3,"file":"index.d.mts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,oCAAgC;AAChC,YAAY,EACV,6BAA6B,EAC7B,wBAAwB,EACxB,yBAAyB,EACzB,sBAAsB,EACtB,sBAAsB,EACtB,wCAAwC,GACzC,gDAA4C"}
|
package/dist/index.mjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.mjs","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,oCAAgC","sourcesContent":["export * from './EnsController';\n"]}
|
|
1
|
+
{"version":3,"file":"index.mjs","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,oCAAgC","sourcesContent":["export * from './EnsController';\nexport type {\n EnsControllerResetStateAction,\n EnsControllerClearAction,\n EnsControllerDeleteAction,\n EnsControllerGetAction,\n EnsControllerSetAction,\n EnsControllerReverseResolveAddressAction,\n} from './EnsController-method-action-types';\n"]}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@metamask/ens-controller",
|
|
3
|
-
"version": "19.0
|
|
3
|
+
"version": "19.1.0",
|
|
4
4
|
"description": "Maps ENS names to their resolved addresses by chain id",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"MetaMask",
|
|
@@ -40,7 +40,7 @@
|
|
|
40
40
|
"build:docs": "typedoc",
|
|
41
41
|
"changelog:update": "../../scripts/update-changelog.sh @metamask/ens-controller",
|
|
42
42
|
"changelog:validate": "../../scripts/validate-changelog.sh @metamask/ens-controller",
|
|
43
|
-
"
|
|
43
|
+
"generate-method-action-types": "tsx ../../scripts/generate-method-action-types.ts",
|
|
44
44
|
"since-latest-release": "../../scripts/since-latest-release.sh",
|
|
45
45
|
"test": "NODE_OPTIONS=--experimental-vm-modules jest --reporters=jest-silent-reporter",
|
|
46
46
|
"test:clean": "NODE_OPTIONS=--experimental-vm-modules jest --clearCache",
|
|
@@ -50,20 +50,21 @@
|
|
|
50
50
|
"dependencies": {
|
|
51
51
|
"@ethersproject/providers": "^5.7.0",
|
|
52
52
|
"@metamask/base-controller": "^9.0.0",
|
|
53
|
-
"@metamask/controller-utils": "^11.
|
|
53
|
+
"@metamask/controller-utils": "^11.19.0",
|
|
54
54
|
"@metamask/messenger": "^0.3.0",
|
|
55
|
-
"@metamask/network-controller": "^
|
|
55
|
+
"@metamask/network-controller": "^30.0.0",
|
|
56
56
|
"@metamask/utils": "^11.9.0",
|
|
57
57
|
"punycode": "^2.1.1"
|
|
58
58
|
},
|
|
59
59
|
"devDependencies": {
|
|
60
60
|
"@metamask/auto-changelog": "^3.4.4",
|
|
61
61
|
"@ts-bridge/cli": "^0.6.4",
|
|
62
|
-
"@types/jest": "^
|
|
62
|
+
"@types/jest": "^29.5.14",
|
|
63
63
|
"deepmerge": "^4.2.2",
|
|
64
|
-
"jest": "^
|
|
65
|
-
"ts-jest": "^
|
|
66
|
-
"
|
|
64
|
+
"jest": "^29.7.0",
|
|
65
|
+
"ts-jest": "^29.2.5",
|
|
66
|
+
"tsx": "^4.20.5",
|
|
67
|
+
"typedoc": "^0.25.13",
|
|
67
68
|
"typedoc-plugin-missing-exports": "^2.0.0",
|
|
68
69
|
"typescript": "~5.3.3"
|
|
69
70
|
},
|