@talismn/on-chain-id 0.2.4 → 0.2.6

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.
@@ -0,0 +1,83 @@
1
+ import { IChainConnectorDot, IChainConnectorEth, IChainConnectorSol } from '@talismn/chain-connectors';
2
+
3
+ type ChainConnectors = {
4
+ substrate?: IChainConnectorDot;
5
+ evm?: IChainConnectorEth;
6
+ solana?: IChainConnectorSol;
7
+ };
8
+ /** A map of addresses to their on-chain ids. */
9
+ type OnChainIds = Map<string, string | null>;
10
+ /** A map of lookup names to their resolved addresses. */
11
+ type ResolvedNames = Map<string, [string, NsLookupType] | null>;
12
+ /** These are the supported name lookup types. */
13
+ type NsLookupType = "ens" | "azns";
14
+ /**
15
+ * Used as the first parameter to all `namesToAddresses`/`addressesToNames` functions.
16
+ */
17
+ type Config = {
18
+ chainConnectors: ChainConnectors;
19
+ /** Used for ens lookups */
20
+ networkIdEthereum: string;
21
+ /** @deprecated */
22
+ registryAlephZero?: unknown;
23
+ /** @deprecated */
24
+ chainIdAlephZero?: string;
25
+ /** @deprecated */
26
+ aznsSupportedChainIdAlephZero?: string;
27
+ };
28
+ type OptionalConfigParams = "chainIdAlephZero" | "aznsSupportedChainIdAlephZero" | "networkIdEthereum";
29
+ type OptionalConfig = Omit<Config, OptionalConfigParams> & Partial<Pick<Config, OptionalConfigParams>>;
30
+ /**
31
+ * Removes the first argument from a tuple type.
32
+ *
33
+ * type AllParams = ["one", "two", "three"]
34
+ * type DropFirstParams = DropFirst<AllParams> // evaluates to ["two", "three"]
35
+ */
36
+ type DropFirst<T extends unknown[]> = T extends [unknown, ...infer U] ? U : never;
37
+
38
+ /**
39
+ * Looks up the on-chain identifiers for some addresses.
40
+ * Supports ENS.
41
+ */
42
+ declare const lookupAddresses: (config: Config, addresses: string[]) => Promise<OnChainIds>;
43
+ /**
44
+ * Looks up the on-chain AZNS domains for some addresses.
45
+ * @deprecated
46
+ */
47
+ declare const lookupAznsAddresses: (_config: Config, addresses: string[]) => Promise<OnChainIds>;
48
+ /**
49
+ * Looks up the on-chain ENS domains for some addresses.
50
+ */
51
+ declare const lookupEnsAddresses: (config: Config, addresses: string[]) => Promise<OnChainIds>;
52
+
53
+ declare const resolveNames: (config: Config, names: string[]) => Promise<ResolvedNames>;
54
+ /**
55
+ * Looks up the addresses for some azns (azero.id) domains.
56
+ * @deprecated
57
+ */
58
+ declare const resolveAznsNames: (_config: Config, names: string[]) => Promise<ResolvedNames>;
59
+ /**
60
+ * Looks up the addresses for some ens (ens.domains) domains.
61
+ */
62
+ declare const resolveEnsNames: (config: Config, names: string[]) => Promise<ResolvedNames>;
63
+
64
+ /** @deprecated */
65
+ declare const isPotentialAzns: (_name?: string) => boolean;
66
+
67
+ /** dot separated string e.g. `ens.eth` or `hello.lol` */
68
+ declare const isPotentialEns: (name?: string) => boolean;
69
+
70
+ declare class OnChainId {
71
+ #private;
72
+ constructor(config: OptionalConfig);
73
+ resolveNames: (...args: DropFirst<Parameters<typeof resolveNames>>) => Promise<ResolvedNames>;
74
+ resolveEnsNames: (...args: DropFirst<Parameters<typeof resolveEnsNames>>) => Promise<ResolvedNames>;
75
+ /** @deprecated */
76
+ resolveAznsNames: (...args: DropFirst<Parameters<typeof resolveAznsNames>>) => Promise<ResolvedNames>;
77
+ lookupAddresses: (...args: DropFirst<Parameters<typeof lookupAddresses>>) => Promise<OnChainIds>;
78
+ /** @deprecated */
79
+ lookupEnsAddresses: (...args: DropFirst<Parameters<typeof lookupEnsAddresses>>) => Promise<OnChainIds>;
80
+ lookupAznsAddresses: (...args: DropFirst<Parameters<typeof lookupAznsAddresses>>) => Promise<OnChainIds>;
81
+ }
82
+
83
+ export { type NsLookupType, OnChainId, type Config as OnChainIdConfig, type OnChainIds, type ResolvedNames, isPotentialAzns, isPotentialEns };
@@ -0,0 +1,83 @@
1
+ import { IChainConnectorDot, IChainConnectorEth, IChainConnectorSol } from '@talismn/chain-connectors';
2
+
3
+ type ChainConnectors = {
4
+ substrate?: IChainConnectorDot;
5
+ evm?: IChainConnectorEth;
6
+ solana?: IChainConnectorSol;
7
+ };
8
+ /** A map of addresses to their on-chain ids. */
9
+ type OnChainIds = Map<string, string | null>;
10
+ /** A map of lookup names to their resolved addresses. */
11
+ type ResolvedNames = Map<string, [string, NsLookupType] | null>;
12
+ /** These are the supported name lookup types. */
13
+ type NsLookupType = "ens" | "azns";
14
+ /**
15
+ * Used as the first parameter to all `namesToAddresses`/`addressesToNames` functions.
16
+ */
17
+ type Config = {
18
+ chainConnectors: ChainConnectors;
19
+ /** Used for ens lookups */
20
+ networkIdEthereum: string;
21
+ /** @deprecated */
22
+ registryAlephZero?: unknown;
23
+ /** @deprecated */
24
+ chainIdAlephZero?: string;
25
+ /** @deprecated */
26
+ aznsSupportedChainIdAlephZero?: string;
27
+ };
28
+ type OptionalConfigParams = "chainIdAlephZero" | "aznsSupportedChainIdAlephZero" | "networkIdEthereum";
29
+ type OptionalConfig = Omit<Config, OptionalConfigParams> & Partial<Pick<Config, OptionalConfigParams>>;
30
+ /**
31
+ * Removes the first argument from a tuple type.
32
+ *
33
+ * type AllParams = ["one", "two", "three"]
34
+ * type DropFirstParams = DropFirst<AllParams> // evaluates to ["two", "three"]
35
+ */
36
+ type DropFirst<T extends unknown[]> = T extends [unknown, ...infer U] ? U : never;
37
+
38
+ /**
39
+ * Looks up the on-chain identifiers for some addresses.
40
+ * Supports ENS.
41
+ */
42
+ declare const lookupAddresses: (config: Config, addresses: string[]) => Promise<OnChainIds>;
43
+ /**
44
+ * Looks up the on-chain AZNS domains for some addresses.
45
+ * @deprecated
46
+ */
47
+ declare const lookupAznsAddresses: (_config: Config, addresses: string[]) => Promise<OnChainIds>;
48
+ /**
49
+ * Looks up the on-chain ENS domains for some addresses.
50
+ */
51
+ declare const lookupEnsAddresses: (config: Config, addresses: string[]) => Promise<OnChainIds>;
52
+
53
+ declare const resolveNames: (config: Config, names: string[]) => Promise<ResolvedNames>;
54
+ /**
55
+ * Looks up the addresses for some azns (azero.id) domains.
56
+ * @deprecated
57
+ */
58
+ declare const resolveAznsNames: (_config: Config, names: string[]) => Promise<ResolvedNames>;
59
+ /**
60
+ * Looks up the addresses for some ens (ens.domains) domains.
61
+ */
62
+ declare const resolveEnsNames: (config: Config, names: string[]) => Promise<ResolvedNames>;
63
+
64
+ /** @deprecated */
65
+ declare const isPotentialAzns: (_name?: string) => boolean;
66
+
67
+ /** dot separated string e.g. `ens.eth` or `hello.lol` */
68
+ declare const isPotentialEns: (name?: string) => boolean;
69
+
70
+ declare class OnChainId {
71
+ #private;
72
+ constructor(config: OptionalConfig);
73
+ resolveNames: (...args: DropFirst<Parameters<typeof resolveNames>>) => Promise<ResolvedNames>;
74
+ resolveEnsNames: (...args: DropFirst<Parameters<typeof resolveEnsNames>>) => Promise<ResolvedNames>;
75
+ /** @deprecated */
76
+ resolveAznsNames: (...args: DropFirst<Parameters<typeof resolveAznsNames>>) => Promise<ResolvedNames>;
77
+ lookupAddresses: (...args: DropFirst<Parameters<typeof lookupAddresses>>) => Promise<OnChainIds>;
78
+ /** @deprecated */
79
+ lookupEnsAddresses: (...args: DropFirst<Parameters<typeof lookupEnsAddresses>>) => Promise<OnChainIds>;
80
+ lookupAznsAddresses: (...args: DropFirst<Parameters<typeof lookupAznsAddresses>>) => Promise<OnChainIds>;
81
+ }
82
+
83
+ export { type NsLookupType, OnChainId, type Config as OnChainIdConfig, type OnChainIds, type ResolvedNames, isPotentialAzns, isPotentialEns };
package/dist/index.js ADDED
@@ -0,0 +1,228 @@
1
+ "use strict";
2
+ var __create = Object.create;
3
+ var __defProp = Object.defineProperty;
4
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
5
+ var __getOwnPropNames = Object.getOwnPropertyNames;
6
+ var __getProtoOf = Object.getPrototypeOf;
7
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
8
+ var __export = (target, all) => {
9
+ for (var name in all)
10
+ __defProp(target, name, { get: all[name], enumerable: true });
11
+ };
12
+ var __copyProps = (to, from, except, desc) => {
13
+ if (from && typeof from === "object" || typeof from === "function") {
14
+ for (let key of __getOwnPropNames(from))
15
+ if (!__hasOwnProp.call(to, key) && key !== except)
16
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
17
+ }
18
+ return to;
19
+ };
20
+ var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
21
+ // If the importer is in node compatibility mode or this is not an ESM
22
+ // file that has been converted to a CommonJS file using a Babel-
23
+ // compatible transform (i.e. "__esModule" has not been set), then set
24
+ // "default" to the CommonJS "module.exports" for node compatibility.
25
+ isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
26
+ mod
27
+ ));
28
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
29
+
30
+ // src/index.ts
31
+ var index_exports = {};
32
+ __export(index_exports, {
33
+ OnChainId: () => OnChainId,
34
+ isPotentialAzns: () => isPotentialAzns,
35
+ isPotentialEns: () => isPotentialEns
36
+ });
37
+ module.exports = __toCommonJS(index_exports);
38
+
39
+ // src/util/addressesToNames.ts
40
+ var import_crypto = require("@talismn/crypto");
41
+
42
+ // src/log.ts
43
+ var import_anylogger = __toESM(require("anylogger"));
44
+
45
+ // package.json
46
+ var package_default = {
47
+ name: "@talismn/on-chain-id",
48
+ version: "0.2.6",
49
+ author: "Talisman",
50
+ homepage: "https://talisman.xyz",
51
+ license: "GPL-3.0-or-later",
52
+ publishConfig: {
53
+ access: "public"
54
+ },
55
+ repository: {
56
+ directory: "packages/on-chain-id",
57
+ type: "git",
58
+ url: "https://github.com/TalismanSociety/talisman.git"
59
+ },
60
+ main: "./dist/index.js",
61
+ module: "./dist/index.mjs",
62
+ files: [
63
+ "dist"
64
+ ],
65
+ engines: {
66
+ node: ">=20"
67
+ },
68
+ scripts: {
69
+ test: "vitest run",
70
+ clean: "rm -rf dist .turbo node_modules",
71
+ build: "tsup --silent",
72
+ typecheck: "tsc --noEmit"
73
+ },
74
+ dependencies: {
75
+ "@talismn/chain-connectors": "workspace:*",
76
+ "@talismn/crypto": "workspace:*",
77
+ "@talismn/util": "workspace:*",
78
+ anylogger: "^1.0.11"
79
+ },
80
+ devDependencies: {
81
+ "@talismn/tsconfig": "workspace:*",
82
+ typescript: "^5.6.3"
83
+ },
84
+ types: "./dist/index.d.ts",
85
+ exports: {
86
+ ".": {
87
+ "@talismn/source": "./src/index.ts",
88
+ import: {
89
+ types: "./dist/index.d.mts",
90
+ default: "./dist/index.mjs"
91
+ },
92
+ require: {
93
+ types: "./dist/index.d.ts",
94
+ default: "./dist/index.js"
95
+ }
96
+ }
97
+ }
98
+ };
99
+
100
+ // src/log.ts
101
+ var log_default = (0, import_anylogger.default)(package_default.name);
102
+
103
+ // src/util/addressesToNames.ts
104
+ var lookupAddresses = async (config, addresses) => {
105
+ const onChainIds = new Map(addresses.map((address) => [address, null]));
106
+ const [ensDomains] = await Promise.all([
107
+ lookupEnsAddresses(config, addresses)
108
+ // add more providers here
109
+ ]);
110
+ ensDomains.forEach((domain, address) => {
111
+ if (!domain) return;
112
+ onChainIds.set(address, domain);
113
+ });
114
+ return onChainIds;
115
+ };
116
+ var lookupAznsAddresses = async (_config, addresses) => {
117
+ return new Promise(
118
+ (resolve) => resolve(new Map(addresses.map((address) => [address, null])))
119
+ );
120
+ };
121
+ var lookupEnsAddresses = async (config, addresses) => {
122
+ const onChainIds = new Map(addresses.map((address) => [address, null]));
123
+ const client = await config.chainConnectors.evm?.getPublicClientForEvmNetwork(
124
+ config.networkIdEthereum
125
+ );
126
+ if (!client) {
127
+ log_default.warn(`Could not find Ethereum client in OnChainId::lookupEnsAddresses`);
128
+ return onChainIds;
129
+ }
130
+ const results = await Promise.allSettled(
131
+ addresses.map(async (address) => {
132
+ if (!(0, import_crypto.isEthereumAddress)(address)) return;
133
+ try {
134
+ const domain = await client.getEnsName({ address });
135
+ domain !== null && onChainIds.set(address, domain);
136
+ } catch (cause) {
137
+ const errorMessage = cause?.shortMessage ?? String(cause);
138
+ throw new Error(`Failed to resolve ENS domain for address '${address}': ${errorMessage}`);
139
+ }
140
+ })
141
+ );
142
+ results.forEach((result) => result.status === "rejected" && log_default.warn(result.reason.message));
143
+ return onChainIds;
144
+ };
145
+
146
+ // src/util/namesToAddresses.ts
147
+ var import_util = require("@talismn/util");
148
+
149
+ // src/util/isPotentialEns.ts
150
+ var isPotentialEns = (name) => typeof name === "string" && /^.+\..+$/.test(name);
151
+
152
+ // src/util/namesToAddresses.ts
153
+ var resolveNames = async (config, names) => {
154
+ const resolvedNames = new Map(names.map((name) => [name, null]));
155
+ const [ensNames] = await Promise.all([
156
+ resolveEnsNames(config, names)
157
+ // add more providers here
158
+ ]);
159
+ ensNames.forEach((lookup, name) => {
160
+ if (!lookup) return;
161
+ const [address, lookupType] = lookup;
162
+ if (!address) return;
163
+ resolvedNames.set(name, [address, lookupType]);
164
+ });
165
+ return resolvedNames;
166
+ };
167
+ var resolveAznsNames = (_config, names) => {
168
+ return new Promise(
169
+ (resolve) => resolve(new Map(names.map((name) => [name, null])))
170
+ );
171
+ };
172
+ var resolveEnsNames = async (config, names) => {
173
+ const resolvedNames = new Map(names.map((name) => [name, null]));
174
+ if (names.every((name) => !isPotentialEns(name))) return resolvedNames;
175
+ const client = await config.chainConnectors.evm?.getPublicClientForEvmNetwork(
176
+ config.networkIdEthereum
177
+ );
178
+ if (!client) {
179
+ log_default.warn(`Could not find Ethereum client in OnChainId::resolveNames`);
180
+ return resolvedNames;
181
+ }
182
+ const results = await Promise.allSettled(
183
+ names.map(async (name) => {
184
+ if (!isPotentialEns(name)) return;
185
+ try {
186
+ const address = await Promise.race([
187
+ // this hangs forever in some cases (ex: try agyle.e first, then agyle.et => hangs) - couldn't explain it
188
+ client.getEnsAddress({ name }),
189
+ (0, import_util.throwAfter)(1e4, "Timeout")
190
+ ]);
191
+ address !== null && resolvedNames.set(name, [address, "ens"]);
192
+ } catch (cause) {
193
+ throw new Error(`Failed to resolve address for ens domain '${name}'`, { cause });
194
+ }
195
+ })
196
+ );
197
+ results.forEach((result) => result.status === "rejected" && log_default.warn(result.reason));
198
+ return resolvedNames;
199
+ };
200
+
201
+ // src/util/isPotentialAzns.ts
202
+ var isPotentialAzns = (_name) => false;
203
+
204
+ // src/index.ts
205
+ var OnChainId = class {
206
+ #config;
207
+ constructor(config) {
208
+ this.#config = {
209
+ ...config,
210
+ networkIdEthereum: config.networkIdEthereum ?? "1"
211
+ };
212
+ }
213
+ resolveNames = (...args) => resolveNames(this.#config, ...args);
214
+ resolveEnsNames = (...args) => resolveEnsNames(this.#config, ...args);
215
+ /** @deprecated */
216
+ resolveAznsNames = (...args) => resolveAznsNames(this.#config, ...args);
217
+ lookupAddresses = (...args) => lookupAddresses(this.#config, ...args);
218
+ /** @deprecated */
219
+ lookupEnsAddresses = (...args) => lookupEnsAddresses(this.#config, ...args);
220
+ lookupAznsAddresses = (...args) => lookupAznsAddresses(this.#config, ...args);
221
+ };
222
+ // Annotate the CommonJS export names for ESM import in node:
223
+ 0 && (module.exports = {
224
+ OnChainId,
225
+ isPotentialAzns,
226
+ isPotentialEns
227
+ });
228
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/index.ts","../src/util/addressesToNames.ts","../src/log.ts","../package.json","../src/util/namesToAddresses.ts","../src/util/isPotentialEns.ts","../src/util/isPotentialAzns.ts"],"sourcesContent":["import { lookupAddresses, lookupAznsAddresses, lookupEnsAddresses } from \"./util/addressesToNames\"\nimport { resolveAznsNames, resolveEnsNames, resolveNames } from \"./util/namesToAddresses\"\nimport type { Config, DropFirst, OptionalConfig } from \"./util/types\"\n\nexport * from \"./util/isPotentialAzns\"\nexport * from \"./util/isPotentialEns\"\nexport type {\n Config as OnChainIdConfig,\n NsLookupType,\n OnChainIds,\n ResolvedNames,\n} from \"./util/types\"\n\nexport class OnChainId {\n #config: Config\n\n constructor(config: OptionalConfig) {\n this.#config = {\n ...config,\n networkIdEthereum: config.networkIdEthereum ?? \"1\",\n }\n }\n\n resolveNames = (...args: DropFirst<Parameters<typeof resolveNames>>) =>\n resolveNames(this.#config, ...args)\n resolveEnsNames = (...args: DropFirst<Parameters<typeof resolveEnsNames>>) =>\n resolveEnsNames(this.#config, ...args)\n /** @deprecated */\n resolveAznsNames = (...args: DropFirst<Parameters<typeof resolveAznsNames>>) =>\n resolveAznsNames(this.#config, ...args)\n\n lookupAddresses = (...args: DropFirst<Parameters<typeof lookupAddresses>>) =>\n lookupAddresses(this.#config, ...args)\n /** @deprecated */\n lookupEnsAddresses = (...args: DropFirst<Parameters<typeof lookupEnsAddresses>>) =>\n lookupEnsAddresses(this.#config, ...args)\n lookupAznsAddresses = (...args: DropFirst<Parameters<typeof lookupAznsAddresses>>) =>\n lookupAznsAddresses(this.#config, ...args)\n}\n","import { isEthereumAddress } from \"@talismn/crypto\"\n\nimport log from \"../log\"\nimport type { Config, OnChainIds } from \"./types\"\n\n/**\n * Looks up the on-chain identifiers for some addresses.\n * Supports ENS.\n */\nexport const lookupAddresses = async (config: Config, addresses: string[]): Promise<OnChainIds> => {\n const onChainIds: OnChainIds = new Map(addresses.map((address) => [address, null]))\n\n const [ensDomains] = await Promise.all([\n lookupEnsAddresses(config, addresses),\n // add more providers here\n ])\n\n ensDomains.forEach((domain, address) => {\n if (!domain) return\n onChainIds.set(address, domain)\n })\n\n return onChainIds\n}\n\n/**\n * Looks up the on-chain AZNS domains for some addresses.\n * @deprecated\n */\nexport const lookupAznsAddresses = async (\n _config: Config,\n addresses: string[]\n): Promise<OnChainIds> => {\n return new Promise<OnChainIds>((resolve) =>\n resolve(new Map(addresses.map((address) => [address, null])))\n )\n}\n\n/**\n * Looks up the on-chain ENS domains for some addresses.\n */\nexport const lookupEnsAddresses = async (\n config: Config,\n addresses: string[]\n): Promise<OnChainIds> => {\n const onChainIds: OnChainIds = new Map(addresses.map((address) => [address, null]))\n\n const client = await config.chainConnectors.evm?.getPublicClientForEvmNetwork(\n config.networkIdEthereum\n )\n if (!client) {\n log.warn(`Could not find Ethereum client in OnChainId::lookupEnsAddresses`)\n return onChainIds\n }\n\n const results = await Promise.allSettled(\n addresses.map(async (address) => {\n // no need to do ENS lookup for polkadot addresses\n if (!isEthereumAddress(address)) return\n\n try {\n const domain = await client.getEnsName({ address })\n domain !== null && onChainIds.set(address, domain)\n } catch (cause) {\n const errorMessage = (cause as { shortMessage?: string })?.shortMessage ?? String(cause)\n throw new Error(`Failed to resolve ENS domain for address '${address}': ${errorMessage}`)\n }\n })\n )\n // biome-ignore lint/suspicious/useIterableCallbackReturn: legacy\n results.forEach((result) => result.status === \"rejected\" && log.warn(result.reason.message))\n\n return onChainIds\n}\n","import anylogger from \"anylogger\"\n\nimport packageJson from \"../package.json\"\n\nexport default anylogger(packageJson.name)\n","{\n \"name\": \"@talismn/on-chain-id\",\n \"version\": \"0.2.6\",\n \"author\": \"Talisman\",\n \"homepage\": \"https://talisman.xyz\",\n \"license\": \"GPL-3.0-or-later\",\n \"publishConfig\": {\n \"access\": \"public\"\n },\n \"repository\": {\n \"directory\": \"packages/on-chain-id\",\n \"type\": \"git\",\n \"url\": \"https://github.com/TalismanSociety/talisman.git\"\n },\n \"main\": \"./dist/index.js\",\n \"module\": \"./dist/index.mjs\",\n \"files\": [\n \"dist\"\n ],\n \"engines\": {\n \"node\": \">=20\"\n },\n \"scripts\": {\n \"test\": \"vitest run\",\n \"clean\": \"rm -rf dist .turbo node_modules\",\n \"build\": \"tsup --silent\",\n \"typecheck\": \"tsc --noEmit\"\n },\n \"dependencies\": {\n \"@talismn/chain-connectors\": \"workspace:*\",\n \"@talismn/crypto\": \"workspace:*\",\n \"@talismn/util\": \"workspace:*\",\n \"anylogger\": \"^1.0.11\"\n },\n \"devDependencies\": {\n \"@talismn/tsconfig\": \"workspace:*\",\n \"typescript\": \"^5.6.3\"\n },\n \"types\": \"./dist/index.d.ts\",\n \"exports\": {\n \".\": {\n \"@talismn/source\": \"./src/index.ts\",\n \"import\": {\n \"types\": \"./dist/index.d.mts\",\n \"default\": \"./dist/index.mjs\"\n },\n \"require\": {\n \"types\": \"./dist/index.d.ts\",\n \"default\": \"./dist/index.js\"\n }\n }\n }\n}\n","import { throwAfter } from \"@talismn/util\"\n\nimport log from \"../log\"\nimport { isPotentialEns } from \"./isPotentialEns\"\nimport type { Config, ResolvedNames } from \"./types\"\n\nexport const resolveNames = async (config: Config, names: string[]): Promise<ResolvedNames> => {\n const resolvedNames: ResolvedNames = new Map(names.map((name) => [name, null]))\n\n const [ensNames] = await Promise.all([\n resolveEnsNames(config, names),\n // add more providers here\n ])\n\n ensNames.forEach((lookup, name) => {\n if (!lookup) return\n\n const [address, lookupType] = lookup\n if (!address) return\n\n resolvedNames.set(name, [address, lookupType])\n })\n\n return resolvedNames\n}\n\n/**\n * Looks up the addresses for some azns (azero.id) domains.\n * @deprecated\n */\nexport const resolveAznsNames = (_config: Config, names: string[]): Promise<ResolvedNames> => {\n return new Promise<ResolvedNames>((resolve) =>\n resolve(new Map(names.map((name) => [name, null])))\n )\n}\n\n/**\n * Looks up the addresses for some ens (ens.domains) domains.\n */\nexport const resolveEnsNames = async (config: Config, names: string[]): Promise<ResolvedNames> => {\n const resolvedNames: ResolvedNames = new Map(names.map((name) => [name, null]))\n\n if (names.every((name) => !isPotentialEns(name))) return resolvedNames\n\n const client = await config.chainConnectors.evm?.getPublicClientForEvmNetwork(\n config.networkIdEthereum\n )\n if (!client) {\n log.warn(`Could not find Ethereum client in OnChainId::resolveNames`)\n return resolvedNames\n }\n\n const results = await Promise.allSettled(\n names.map(async (name) => {\n if (!isPotentialEns(name)) return\n\n try {\n const address = await Promise.race([\n // this hangs forever in some cases (ex: try agyle.e first, then agyle.et => hangs) - couldn't explain it\n client.getEnsAddress({ name }),\n throwAfter(10_000, \"Timeout\"),\n ])\n address !== null && resolvedNames.set(name, [address, \"ens\"])\n } catch (cause) {\n throw new Error(`Failed to resolve address for ens domain '${name}'`, { cause })\n }\n })\n )\n\n // biome-ignore lint/suspicious/useIterableCallbackReturn: legacy\n results.forEach((result) => result.status === \"rejected\" && log.warn(result.reason))\n\n return resolvedNames\n}\n","/** dot separated string e.g. `ens.eth` or `hello.lol` */\nexport const isPotentialEns = (name?: string) => typeof name === \"string\" && /^.+\\..+$/.test(name)\n","/** @deprecated */\nexport const isPotentialAzns = (_name?: string) => false\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;;ACAA,oBAAkC;;;ACAlC,uBAAsB;;;ACAtB;AAAA,EACE,MAAQ;AAAA,EACR,SAAW;AAAA,EACX,QAAU;AAAA,EACV,UAAY;AAAA,EACZ,SAAW;AAAA,EACX,eAAiB;AAAA,IACf,QAAU;AAAA,EACZ;AAAA,EACA,YAAc;AAAA,IACZ,WAAa;AAAA,IACb,MAAQ;AAAA,IACR,KAAO;AAAA,EACT;AAAA,EACA,MAAQ;AAAA,EACR,QAAU;AAAA,EACV,OAAS;AAAA,IACP;AAAA,EACF;AAAA,EACA,SAAW;AAAA,IACT,MAAQ;AAAA,EACV;AAAA,EACA,SAAW;AAAA,IACT,MAAQ;AAAA,IACR,OAAS;AAAA,IACT,OAAS;AAAA,IACT,WAAa;AAAA,EACf;AAAA,EACA,cAAgB;AAAA,IACd,6BAA6B;AAAA,IAC7B,mBAAmB;AAAA,IACnB,iBAAiB;AAAA,IACjB,WAAa;AAAA,EACf;AAAA,EACA,iBAAmB;AAAA,IACjB,qBAAqB;AAAA,IACrB,YAAc;AAAA,EAChB;AAAA,EACA,OAAS;AAAA,EACT,SAAW;AAAA,IACT,KAAK;AAAA,MACH,mBAAmB;AAAA,MACnB,QAAU;AAAA,QACR,OAAS;AAAA,QACT,SAAW;AAAA,MACb;AAAA,MACA,SAAW;AAAA,QACT,OAAS;AAAA,QACT,SAAW;AAAA,MACb;AAAA,IACF;AAAA,EACF;AACF;;;ADhDA,IAAO,kBAAQ,iBAAAA,SAAU,gBAAY,IAAI;;;ADKlC,IAAM,kBAAkB,OAAO,QAAgB,cAA6C;AACjG,QAAM,aAAyB,IAAI,IAAI,UAAU,IAAI,CAAC,YAAY,CAAC,SAAS,IAAI,CAAC,CAAC;AAElF,QAAM,CAAC,UAAU,IAAI,MAAM,QAAQ,IAAI;AAAA,IACrC,mBAAmB,QAAQ,SAAS;AAAA;AAAA,EAEtC,CAAC;AAED,aAAW,QAAQ,CAAC,QAAQ,YAAY;AACtC,QAAI,CAAC,OAAQ;AACb,eAAW,IAAI,SAAS,MAAM;AAAA,EAChC,CAAC;AAED,SAAO;AACT;AAMO,IAAM,sBAAsB,OACjC,SACA,cACwB;AACxB,SAAO,IAAI;AAAA,IAAoB,CAAC,YAC9B,QAAQ,IAAI,IAAI,UAAU,IAAI,CAAC,YAAY,CAAC,SAAS,IAAI,CAAC,CAAC,CAAC;AAAA,EAC9D;AACF;AAKO,IAAM,qBAAqB,OAChC,QACA,cACwB;AACxB,QAAM,aAAyB,IAAI,IAAI,UAAU,IAAI,CAAC,YAAY,CAAC,SAAS,IAAI,CAAC,CAAC;AAElF,QAAM,SAAS,MAAM,OAAO,gBAAgB,KAAK;AAAA,IAC/C,OAAO;AAAA,EACT;AACA,MAAI,CAAC,QAAQ;AACX,gBAAI,KAAK,iEAAiE;AAC1E,WAAO;AAAA,EACT;AAEA,QAAM,UAAU,MAAM,QAAQ;AAAA,IAC5B,UAAU,IAAI,OAAO,YAAY;AAE/B,UAAI,KAAC,iCAAkB,OAAO,EAAG;AAEjC,UAAI;AACF,cAAM,SAAS,MAAM,OAAO,WAAW,EAAE,QAAQ,CAAC;AAClD,mBAAW,QAAQ,WAAW,IAAI,SAAS,MAAM;AAAA,MACnD,SAAS,OAAO;AACd,cAAM,eAAgB,OAAqC,gBAAgB,OAAO,KAAK;AACvF,cAAM,IAAI,MAAM,6CAA6C,OAAO,MAAM,YAAY,EAAE;AAAA,MAC1F;AAAA,IACF,CAAC;AAAA,EACH;AAEA,UAAQ,QAAQ,CAAC,WAAW,OAAO,WAAW,cAAc,YAAI,KAAK,OAAO,OAAO,OAAO,CAAC;AAE3F,SAAO;AACT;;;AGzEA,kBAA2B;;;ACCpB,IAAM,iBAAiB,CAAC,SAAkB,OAAO,SAAS,YAAY,WAAW,KAAK,IAAI;;;ADK1F,IAAM,eAAe,OAAO,QAAgB,UAA4C;AAC7F,QAAM,gBAA+B,IAAI,IAAI,MAAM,IAAI,CAAC,SAAS,CAAC,MAAM,IAAI,CAAC,CAAC;AAE9E,QAAM,CAAC,QAAQ,IAAI,MAAM,QAAQ,IAAI;AAAA,IACnC,gBAAgB,QAAQ,KAAK;AAAA;AAAA,EAE/B,CAAC;AAED,WAAS,QAAQ,CAAC,QAAQ,SAAS;AACjC,QAAI,CAAC,OAAQ;AAEb,UAAM,CAAC,SAAS,UAAU,IAAI;AAC9B,QAAI,CAAC,QAAS;AAEd,kBAAc,IAAI,MAAM,CAAC,SAAS,UAAU,CAAC;AAAA,EAC/C,CAAC;AAED,SAAO;AACT;AAMO,IAAM,mBAAmB,CAAC,SAAiB,UAA4C;AAC5F,SAAO,IAAI;AAAA,IAAuB,CAAC,YACjC,QAAQ,IAAI,IAAI,MAAM,IAAI,CAAC,SAAS,CAAC,MAAM,IAAI,CAAC,CAAC,CAAC;AAAA,EACpD;AACF;AAKO,IAAM,kBAAkB,OAAO,QAAgB,UAA4C;AAChG,QAAM,gBAA+B,IAAI,IAAI,MAAM,IAAI,CAAC,SAAS,CAAC,MAAM,IAAI,CAAC,CAAC;AAE9E,MAAI,MAAM,MAAM,CAAC,SAAS,CAAC,eAAe,IAAI,CAAC,EAAG,QAAO;AAEzD,QAAM,SAAS,MAAM,OAAO,gBAAgB,KAAK;AAAA,IAC/C,OAAO;AAAA,EACT;AACA,MAAI,CAAC,QAAQ;AACX,gBAAI,KAAK,2DAA2D;AACpE,WAAO;AAAA,EACT;AAEA,QAAM,UAAU,MAAM,QAAQ;AAAA,IAC5B,MAAM,IAAI,OAAO,SAAS;AACxB,UAAI,CAAC,eAAe,IAAI,EAAG;AAE3B,UAAI;AACF,cAAM,UAAU,MAAM,QAAQ,KAAK;AAAA;AAAA,UAEjC,OAAO,cAAc,EAAE,KAAK,CAAC;AAAA,cAC7B,wBAAW,KAAQ,SAAS;AAAA,QAC9B,CAAC;AACD,oBAAY,QAAQ,cAAc,IAAI,MAAM,CAAC,SAAS,KAAK,CAAC;AAAA,MAC9D,SAAS,OAAO;AACd,cAAM,IAAI,MAAM,6CAA6C,IAAI,KAAK,EAAE,MAAM,CAAC;AAAA,MACjF;AAAA,IACF,CAAC;AAAA,EACH;AAGA,UAAQ,QAAQ,CAAC,WAAW,OAAO,WAAW,cAAc,YAAI,KAAK,OAAO,MAAM,CAAC;AAEnF,SAAO;AACT;;;AExEO,IAAM,kBAAkB,CAAC,UAAmB;;;ANY5C,IAAM,YAAN,MAAgB;AAAA,EACrB;AAAA,EAEA,YAAY,QAAwB;AAClC,SAAK,UAAU;AAAA,MACb,GAAG;AAAA,MACH,mBAAmB,OAAO,qBAAqB;AAAA,IACjD;AAAA,EACF;AAAA,EAEA,eAAe,IAAI,SACjB,aAAa,KAAK,SAAS,GAAG,IAAI;AAAA,EACpC,kBAAkB,IAAI,SACpB,gBAAgB,KAAK,SAAS,GAAG,IAAI;AAAA;AAAA,EAEvC,mBAAmB,IAAI,SACrB,iBAAiB,KAAK,SAAS,GAAG,IAAI;AAAA,EAExC,kBAAkB,IAAI,SACpB,gBAAgB,KAAK,SAAS,GAAG,IAAI;AAAA;AAAA,EAEvC,qBAAqB,IAAI,SACvB,mBAAmB,KAAK,SAAS,GAAG,IAAI;AAAA,EAC1C,sBAAsB,IAAI,SACxB,oBAAoB,KAAK,SAAS,GAAG,IAAI;AAC7C;","names":["anylogger"]}
package/dist/index.mjs ADDED
@@ -0,0 +1,189 @@
1
+ // src/util/addressesToNames.ts
2
+ import { isEthereumAddress } from "@talismn/crypto";
3
+
4
+ // src/log.ts
5
+ import anylogger from "anylogger";
6
+
7
+ // package.json
8
+ var package_default = {
9
+ name: "@talismn/on-chain-id",
10
+ version: "0.2.6",
11
+ author: "Talisman",
12
+ homepage: "https://talisman.xyz",
13
+ license: "GPL-3.0-or-later",
14
+ publishConfig: {
15
+ access: "public"
16
+ },
17
+ repository: {
18
+ directory: "packages/on-chain-id",
19
+ type: "git",
20
+ url: "https://github.com/TalismanSociety/talisman.git"
21
+ },
22
+ main: "./dist/index.js",
23
+ module: "./dist/index.mjs",
24
+ files: [
25
+ "dist"
26
+ ],
27
+ engines: {
28
+ node: ">=20"
29
+ },
30
+ scripts: {
31
+ test: "vitest run",
32
+ clean: "rm -rf dist .turbo node_modules",
33
+ build: "tsup --silent",
34
+ typecheck: "tsc --noEmit"
35
+ },
36
+ dependencies: {
37
+ "@talismn/chain-connectors": "workspace:*",
38
+ "@talismn/crypto": "workspace:*",
39
+ "@talismn/util": "workspace:*",
40
+ anylogger: "^1.0.11"
41
+ },
42
+ devDependencies: {
43
+ "@talismn/tsconfig": "workspace:*",
44
+ typescript: "^5.6.3"
45
+ },
46
+ types: "./dist/index.d.ts",
47
+ exports: {
48
+ ".": {
49
+ "@talismn/source": "./src/index.ts",
50
+ import: {
51
+ types: "./dist/index.d.mts",
52
+ default: "./dist/index.mjs"
53
+ },
54
+ require: {
55
+ types: "./dist/index.d.ts",
56
+ default: "./dist/index.js"
57
+ }
58
+ }
59
+ }
60
+ };
61
+
62
+ // src/log.ts
63
+ var log_default = anylogger(package_default.name);
64
+
65
+ // src/util/addressesToNames.ts
66
+ var lookupAddresses = async (config, addresses) => {
67
+ const onChainIds = new Map(addresses.map((address) => [address, null]));
68
+ const [ensDomains] = await Promise.all([
69
+ lookupEnsAddresses(config, addresses)
70
+ // add more providers here
71
+ ]);
72
+ ensDomains.forEach((domain, address) => {
73
+ if (!domain) return;
74
+ onChainIds.set(address, domain);
75
+ });
76
+ return onChainIds;
77
+ };
78
+ var lookupAznsAddresses = async (_config, addresses) => {
79
+ return new Promise(
80
+ (resolve) => resolve(new Map(addresses.map((address) => [address, null])))
81
+ );
82
+ };
83
+ var lookupEnsAddresses = async (config, addresses) => {
84
+ const onChainIds = new Map(addresses.map((address) => [address, null]));
85
+ const client = await config.chainConnectors.evm?.getPublicClientForEvmNetwork(
86
+ config.networkIdEthereum
87
+ );
88
+ if (!client) {
89
+ log_default.warn(`Could not find Ethereum client in OnChainId::lookupEnsAddresses`);
90
+ return onChainIds;
91
+ }
92
+ const results = await Promise.allSettled(
93
+ addresses.map(async (address) => {
94
+ if (!isEthereumAddress(address)) return;
95
+ try {
96
+ const domain = await client.getEnsName({ address });
97
+ domain !== null && onChainIds.set(address, domain);
98
+ } catch (cause) {
99
+ const errorMessage = cause?.shortMessage ?? String(cause);
100
+ throw new Error(`Failed to resolve ENS domain for address '${address}': ${errorMessage}`);
101
+ }
102
+ })
103
+ );
104
+ results.forEach((result) => result.status === "rejected" && log_default.warn(result.reason.message));
105
+ return onChainIds;
106
+ };
107
+
108
+ // src/util/namesToAddresses.ts
109
+ import { throwAfter } from "@talismn/util";
110
+
111
+ // src/util/isPotentialEns.ts
112
+ var isPotentialEns = (name) => typeof name === "string" && /^.+\..+$/.test(name);
113
+
114
+ // src/util/namesToAddresses.ts
115
+ var resolveNames = async (config, names) => {
116
+ const resolvedNames = new Map(names.map((name) => [name, null]));
117
+ const [ensNames] = await Promise.all([
118
+ resolveEnsNames(config, names)
119
+ // add more providers here
120
+ ]);
121
+ ensNames.forEach((lookup, name) => {
122
+ if (!lookup) return;
123
+ const [address, lookupType] = lookup;
124
+ if (!address) return;
125
+ resolvedNames.set(name, [address, lookupType]);
126
+ });
127
+ return resolvedNames;
128
+ };
129
+ var resolveAznsNames = (_config, names) => {
130
+ return new Promise(
131
+ (resolve) => resolve(new Map(names.map((name) => [name, null])))
132
+ );
133
+ };
134
+ var resolveEnsNames = async (config, names) => {
135
+ const resolvedNames = new Map(names.map((name) => [name, null]));
136
+ if (names.every((name) => !isPotentialEns(name))) return resolvedNames;
137
+ const client = await config.chainConnectors.evm?.getPublicClientForEvmNetwork(
138
+ config.networkIdEthereum
139
+ );
140
+ if (!client) {
141
+ log_default.warn(`Could not find Ethereum client in OnChainId::resolveNames`);
142
+ return resolvedNames;
143
+ }
144
+ const results = await Promise.allSettled(
145
+ names.map(async (name) => {
146
+ if (!isPotentialEns(name)) return;
147
+ try {
148
+ const address = await Promise.race([
149
+ // this hangs forever in some cases (ex: try agyle.e first, then agyle.et => hangs) - couldn't explain it
150
+ client.getEnsAddress({ name }),
151
+ throwAfter(1e4, "Timeout")
152
+ ]);
153
+ address !== null && resolvedNames.set(name, [address, "ens"]);
154
+ } catch (cause) {
155
+ throw new Error(`Failed to resolve address for ens domain '${name}'`, { cause });
156
+ }
157
+ })
158
+ );
159
+ results.forEach((result) => result.status === "rejected" && log_default.warn(result.reason));
160
+ return resolvedNames;
161
+ };
162
+
163
+ // src/util/isPotentialAzns.ts
164
+ var isPotentialAzns = (_name) => false;
165
+
166
+ // src/index.ts
167
+ var OnChainId = class {
168
+ #config;
169
+ constructor(config) {
170
+ this.#config = {
171
+ ...config,
172
+ networkIdEthereum: config.networkIdEthereum ?? "1"
173
+ };
174
+ }
175
+ resolveNames = (...args) => resolveNames(this.#config, ...args);
176
+ resolveEnsNames = (...args) => resolveEnsNames(this.#config, ...args);
177
+ /** @deprecated */
178
+ resolveAznsNames = (...args) => resolveAznsNames(this.#config, ...args);
179
+ lookupAddresses = (...args) => lookupAddresses(this.#config, ...args);
180
+ /** @deprecated */
181
+ lookupEnsAddresses = (...args) => lookupEnsAddresses(this.#config, ...args);
182
+ lookupAznsAddresses = (...args) => lookupAznsAddresses(this.#config, ...args);
183
+ };
184
+ export {
185
+ OnChainId,
186
+ isPotentialAzns,
187
+ isPotentialEns
188
+ };
189
+ //# sourceMappingURL=index.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/util/addressesToNames.ts","../src/log.ts","../package.json","../src/util/namesToAddresses.ts","../src/util/isPotentialEns.ts","../src/util/isPotentialAzns.ts","../src/index.ts"],"sourcesContent":["import { isEthereumAddress } from \"@talismn/crypto\"\n\nimport log from \"../log\"\nimport type { Config, OnChainIds } from \"./types\"\n\n/**\n * Looks up the on-chain identifiers for some addresses.\n * Supports ENS.\n */\nexport const lookupAddresses = async (config: Config, addresses: string[]): Promise<OnChainIds> => {\n const onChainIds: OnChainIds = new Map(addresses.map((address) => [address, null]))\n\n const [ensDomains] = await Promise.all([\n lookupEnsAddresses(config, addresses),\n // add more providers here\n ])\n\n ensDomains.forEach((domain, address) => {\n if (!domain) return\n onChainIds.set(address, domain)\n })\n\n return onChainIds\n}\n\n/**\n * Looks up the on-chain AZNS domains for some addresses.\n * @deprecated\n */\nexport const lookupAznsAddresses = async (\n _config: Config,\n addresses: string[]\n): Promise<OnChainIds> => {\n return new Promise<OnChainIds>((resolve) =>\n resolve(new Map(addresses.map((address) => [address, null])))\n )\n}\n\n/**\n * Looks up the on-chain ENS domains for some addresses.\n */\nexport const lookupEnsAddresses = async (\n config: Config,\n addresses: string[]\n): Promise<OnChainIds> => {\n const onChainIds: OnChainIds = new Map(addresses.map((address) => [address, null]))\n\n const client = await config.chainConnectors.evm?.getPublicClientForEvmNetwork(\n config.networkIdEthereum\n )\n if (!client) {\n log.warn(`Could not find Ethereum client in OnChainId::lookupEnsAddresses`)\n return onChainIds\n }\n\n const results = await Promise.allSettled(\n addresses.map(async (address) => {\n // no need to do ENS lookup for polkadot addresses\n if (!isEthereumAddress(address)) return\n\n try {\n const domain = await client.getEnsName({ address })\n domain !== null && onChainIds.set(address, domain)\n } catch (cause) {\n const errorMessage = (cause as { shortMessage?: string })?.shortMessage ?? String(cause)\n throw new Error(`Failed to resolve ENS domain for address '${address}': ${errorMessage}`)\n }\n })\n )\n // biome-ignore lint/suspicious/useIterableCallbackReturn: legacy\n results.forEach((result) => result.status === \"rejected\" && log.warn(result.reason.message))\n\n return onChainIds\n}\n","import anylogger from \"anylogger\"\n\nimport packageJson from \"../package.json\"\n\nexport default anylogger(packageJson.name)\n","{\n \"name\": \"@talismn/on-chain-id\",\n \"version\": \"0.2.6\",\n \"author\": \"Talisman\",\n \"homepage\": \"https://talisman.xyz\",\n \"license\": \"GPL-3.0-or-later\",\n \"publishConfig\": {\n \"access\": \"public\"\n },\n \"repository\": {\n \"directory\": \"packages/on-chain-id\",\n \"type\": \"git\",\n \"url\": \"https://github.com/TalismanSociety/talisman.git\"\n },\n \"main\": \"./dist/index.js\",\n \"module\": \"./dist/index.mjs\",\n \"files\": [\n \"dist\"\n ],\n \"engines\": {\n \"node\": \">=20\"\n },\n \"scripts\": {\n \"test\": \"vitest run\",\n \"clean\": \"rm -rf dist .turbo node_modules\",\n \"build\": \"tsup --silent\",\n \"typecheck\": \"tsc --noEmit\"\n },\n \"dependencies\": {\n \"@talismn/chain-connectors\": \"workspace:*\",\n \"@talismn/crypto\": \"workspace:*\",\n \"@talismn/util\": \"workspace:*\",\n \"anylogger\": \"^1.0.11\"\n },\n \"devDependencies\": {\n \"@talismn/tsconfig\": \"workspace:*\",\n \"typescript\": \"^5.6.3\"\n },\n \"types\": \"./dist/index.d.ts\",\n \"exports\": {\n \".\": {\n \"@talismn/source\": \"./src/index.ts\",\n \"import\": {\n \"types\": \"./dist/index.d.mts\",\n \"default\": \"./dist/index.mjs\"\n },\n \"require\": {\n \"types\": \"./dist/index.d.ts\",\n \"default\": \"./dist/index.js\"\n }\n }\n }\n}\n","import { throwAfter } from \"@talismn/util\"\n\nimport log from \"../log\"\nimport { isPotentialEns } from \"./isPotentialEns\"\nimport type { Config, ResolvedNames } from \"./types\"\n\nexport const resolveNames = async (config: Config, names: string[]): Promise<ResolvedNames> => {\n const resolvedNames: ResolvedNames = new Map(names.map((name) => [name, null]))\n\n const [ensNames] = await Promise.all([\n resolveEnsNames(config, names),\n // add more providers here\n ])\n\n ensNames.forEach((lookup, name) => {\n if (!lookup) return\n\n const [address, lookupType] = lookup\n if (!address) return\n\n resolvedNames.set(name, [address, lookupType])\n })\n\n return resolvedNames\n}\n\n/**\n * Looks up the addresses for some azns (azero.id) domains.\n * @deprecated\n */\nexport const resolveAznsNames = (_config: Config, names: string[]): Promise<ResolvedNames> => {\n return new Promise<ResolvedNames>((resolve) =>\n resolve(new Map(names.map((name) => [name, null])))\n )\n}\n\n/**\n * Looks up the addresses for some ens (ens.domains) domains.\n */\nexport const resolveEnsNames = async (config: Config, names: string[]): Promise<ResolvedNames> => {\n const resolvedNames: ResolvedNames = new Map(names.map((name) => [name, null]))\n\n if (names.every((name) => !isPotentialEns(name))) return resolvedNames\n\n const client = await config.chainConnectors.evm?.getPublicClientForEvmNetwork(\n config.networkIdEthereum\n )\n if (!client) {\n log.warn(`Could not find Ethereum client in OnChainId::resolveNames`)\n return resolvedNames\n }\n\n const results = await Promise.allSettled(\n names.map(async (name) => {\n if (!isPotentialEns(name)) return\n\n try {\n const address = await Promise.race([\n // this hangs forever in some cases (ex: try agyle.e first, then agyle.et => hangs) - couldn't explain it\n client.getEnsAddress({ name }),\n throwAfter(10_000, \"Timeout\"),\n ])\n address !== null && resolvedNames.set(name, [address, \"ens\"])\n } catch (cause) {\n throw new Error(`Failed to resolve address for ens domain '${name}'`, { cause })\n }\n })\n )\n\n // biome-ignore lint/suspicious/useIterableCallbackReturn: legacy\n results.forEach((result) => result.status === \"rejected\" && log.warn(result.reason))\n\n return resolvedNames\n}\n","/** dot separated string e.g. `ens.eth` or `hello.lol` */\nexport const isPotentialEns = (name?: string) => typeof name === \"string\" && /^.+\\..+$/.test(name)\n","/** @deprecated */\nexport const isPotentialAzns = (_name?: string) => false\n","import { lookupAddresses, lookupAznsAddresses, lookupEnsAddresses } from \"./util/addressesToNames\"\nimport { resolveAznsNames, resolveEnsNames, resolveNames } from \"./util/namesToAddresses\"\nimport type { Config, DropFirst, OptionalConfig } from \"./util/types\"\n\nexport * from \"./util/isPotentialAzns\"\nexport * from \"./util/isPotentialEns\"\nexport type {\n Config as OnChainIdConfig,\n NsLookupType,\n OnChainIds,\n ResolvedNames,\n} from \"./util/types\"\n\nexport class OnChainId {\n #config: Config\n\n constructor(config: OptionalConfig) {\n this.#config = {\n ...config,\n networkIdEthereum: config.networkIdEthereum ?? \"1\",\n }\n }\n\n resolveNames = (...args: DropFirst<Parameters<typeof resolveNames>>) =>\n resolveNames(this.#config, ...args)\n resolveEnsNames = (...args: DropFirst<Parameters<typeof resolveEnsNames>>) =>\n resolveEnsNames(this.#config, ...args)\n /** @deprecated */\n resolveAznsNames = (...args: DropFirst<Parameters<typeof resolveAznsNames>>) =>\n resolveAznsNames(this.#config, ...args)\n\n lookupAddresses = (...args: DropFirst<Parameters<typeof lookupAddresses>>) =>\n lookupAddresses(this.#config, ...args)\n /** @deprecated */\n lookupEnsAddresses = (...args: DropFirst<Parameters<typeof lookupEnsAddresses>>) =>\n lookupEnsAddresses(this.#config, ...args)\n lookupAznsAddresses = (...args: DropFirst<Parameters<typeof lookupAznsAddresses>>) =>\n lookupAznsAddresses(this.#config, ...args)\n}\n"],"mappings":"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","names":[]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@talismn/on-chain-id",
3
- "version": "0.2.4",
3
+ "version": "0.2.6",
4
4
  "author": "Talisman",
5
5
  "homepage": "https://talisman.xyz",
6
6
  "license": "GPL-3.0-or-later",
@@ -10,40 +10,44 @@
10
10
  "repository": {
11
11
  "directory": "packages/on-chain-id",
12
12
  "type": "git",
13
- "url": "https://github.com/talismansociety/talisman.git"
13
+ "url": "https://github.com/TalismanSociety/talisman.git"
14
14
  },
15
- "main": "dist/talismn-on-chain-id.cjs.js",
16
- "module": "dist/talismn-on-chain-id.esm.js",
15
+ "main": "./dist/index.js",
16
+ "module": "./dist/index.mjs",
17
17
  "files": [
18
- "/dist"
18
+ "dist"
19
19
  ],
20
20
  "engines": {
21
21
  "node": ">=20"
22
22
  },
23
23
  "dependencies": {
24
24
  "anylogger": "^1.0.11",
25
- "@talismn/chain-connectors": "0.0.13",
26
- "@talismn/crypto": "0.3.0",
27
- "@talismn/util": "0.5.6"
25
+ "@talismn/crypto": "0.3.2",
26
+ "@talismn/chain-connectors": "0.0.15",
27
+ "@talismn/util": "0.5.8"
28
28
  },
29
29
  "devDependencies": {
30
- "@types/jest": "^29.5.14",
31
- "eslint": "^8.57.1",
32
- "jest": "^29.7.0",
33
- "ts-jest": "^29.2.5",
34
30
  "typescript": "^5.6.3",
35
- "@talismn/eslint-config": "0.0.3",
36
- "@talismn/tsconfig": "0.0.3"
31
+ "@talismn/tsconfig": "0.0.4"
37
32
  },
38
- "eslintConfig": {
39
- "root": true,
40
- "extends": [
41
- "@talismn/eslint-config/base"
42
- ]
33
+ "types": "./dist/index.d.ts",
34
+ "exports": {
35
+ ".": {
36
+ "@talismn/source": "./src/index.ts",
37
+ "import": {
38
+ "types": "./dist/index.d.mts",
39
+ "default": "./dist/index.mjs"
40
+ },
41
+ "require": {
42
+ "types": "./dist/index.d.ts",
43
+ "default": "./dist/index.js"
44
+ }
45
+ }
43
46
  },
44
47
  "scripts": {
45
- "test": "jest",
46
- "lint": "eslint src --max-warnings 0",
47
- "clean": "rm -rf dist .turbo node_modules"
48
+ "test": "vitest run",
49
+ "clean": "rm -rf dist .turbo node_modules",
50
+ "build": "tsup --silent",
51
+ "typecheck": "tsc --noEmit"
48
52
  }
49
53
  }
@@ -1,18 +0,0 @@
1
- import { lookupAddresses, lookupAznsAddresses, lookupEnsAddresses } from "./util/addressesToNames";
2
- import { resolveAznsNames, resolveEnsNames, resolveNames } from "./util/namesToAddresses";
3
- import { DropFirst, OptionalConfig } from "./util/types";
4
- export type { Config as OnChainIdConfig, NsLookupType, OnChainIds, ResolvedNames, } from "./util/types";
5
- export * from "./util/isPotentialAzns";
6
- export * from "./util/isPotentialEns";
7
- export declare class OnChainId {
8
- #private;
9
- constructor(config: OptionalConfig);
10
- resolveNames: (...args: DropFirst<Parameters<typeof resolveNames>>) => Promise<import("./util/types").ResolvedNames>;
11
- resolveEnsNames: (...args: DropFirst<Parameters<typeof resolveEnsNames>>) => Promise<import("./util/types").ResolvedNames>;
12
- /** @deprecated */
13
- resolveAznsNames: (...args: DropFirst<Parameters<typeof resolveAznsNames>>) => Promise<import("./util/types").ResolvedNames>;
14
- lookupAddresses: (...args: DropFirst<Parameters<typeof lookupAddresses>>) => Promise<import("./util/types").OnChainIds>;
15
- /** @deprecated */
16
- lookupEnsAddresses: (...args: DropFirst<Parameters<typeof lookupEnsAddresses>>) => Promise<import("./util/types").OnChainIds>;
17
- lookupAznsAddresses: (...args: DropFirst<Parameters<typeof lookupAznsAddresses>>) => Promise<import("./util/types").OnChainIds>;
18
- }
@@ -1,2 +0,0 @@
1
- declare const _default: import("anylogger").Logger<import("anylogger").BaseLevels>;
2
- export default _default;
@@ -1,15 +0,0 @@
1
- import { Config, OnChainIds } from "./types";
2
- /**
3
- * Looks up the on-chain identifiers for some addresses.
4
- * Supports ENS.
5
- */
6
- export declare const lookupAddresses: (config: Config, addresses: string[]) => Promise<OnChainIds>;
7
- /**
8
- * Looks up the on-chain AZNS domains for some addresses.
9
- * @deprecated
10
- */
11
- export declare const lookupAznsAddresses: (config: Config, addresses: string[]) => Promise<OnChainIds>;
12
- /**
13
- * Looks up the on-chain ENS domains for some addresses.
14
- */
15
- export declare const lookupEnsAddresses: (config: Config, addresses: string[]) => Promise<OnChainIds>;
@@ -1,2 +0,0 @@
1
- /** @deprecated */
2
- export declare const isPotentialAzns: (name?: string) => boolean;
@@ -1,2 +0,0 @@
1
- /** dot separated string e.g. `ens.eth` or `hello.lol` */
2
- export declare const isPotentialEns: (name?: string) => boolean;
@@ -1,11 +0,0 @@
1
- import { Config, ResolvedNames } from "./types";
2
- export declare const resolveNames: (config: Config, names: string[]) => Promise<ResolvedNames>;
3
- /**
4
- * Looks up the addresses for some azns (azero.id) domains.
5
- * @deprecated
6
- */
7
- export declare const resolveAznsNames: (config: Config, names: string[]) => Promise<ResolvedNames>;
8
- /**
9
- * Looks up the addresses for some ens (ens.domains) domains.
10
- */
11
- export declare const resolveEnsNames: (config: Config, names: string[]) => Promise<ResolvedNames>;
@@ -1,35 +0,0 @@
1
- import { IChainConnectorDot, IChainConnectorEth, IChainConnectorSol } from "@talismn/chain-connectors";
2
- export type ChainConnectors = {
3
- substrate?: IChainConnectorDot;
4
- evm?: IChainConnectorEth;
5
- solana?: IChainConnectorSol;
6
- };
7
- /** A map of addresses to their on-chain ids. */
8
- export type OnChainIds = Map<string, string | null>;
9
- /** A map of lookup names to their resolved addresses. */
10
- export type ResolvedNames = Map<string, [string, NsLookupType] | null>;
11
- /** These are the supported name lookup types. */
12
- export type NsLookupType = "ens" | "azns";
13
- /**
14
- * Used as the first parameter to all `namesToAddresses`/`addressesToNames` functions.
15
- */
16
- export type Config = {
17
- chainConnectors: ChainConnectors;
18
- /** Used for ens lookups */
19
- networkIdEthereum: string;
20
- /** @deprecated */
21
- registryAlephZero?: unknown;
22
- /** @deprecated */
23
- chainIdAlephZero?: string;
24
- /** @deprecated */
25
- aznsSupportedChainIdAlephZero?: string;
26
- };
27
- export type OptionalConfigParams = "chainIdAlephZero" | "aznsSupportedChainIdAlephZero" | "networkIdEthereum";
28
- export type OptionalConfig = Omit<Config, OptionalConfigParams> & Partial<Pick<Config, OptionalConfigParams>>;
29
- /**
30
- * Removes the first argument from a tuple type.
31
- *
32
- * type AllParams = ["one", "two", "three"]
33
- * type DropFirstParams = DropFirst<AllParams> // evaluates to ["two", "three"]
34
- */
35
- export type DropFirst<T extends unknown[]> = T extends [unknown, ...infer U] ? U : never;
@@ -1 +0,0 @@
1
- export * from "./declarations/src/index";
@@ -1,146 +0,0 @@
1
- 'use strict';
2
-
3
- var crypto = require('@talismn/crypto');
4
- var anylogger = require('anylogger');
5
- var util = require('@talismn/util');
6
-
7
- function _interopDefault (e) { return e && e.__esModule ? e : { default: e }; }
8
-
9
- var anylogger__default = /*#__PURE__*/_interopDefault(anylogger);
10
-
11
- var packageJson = {
12
- name: "@talismn/on-chain-id"};
13
-
14
- var log = anylogger__default.default(packageJson.name);
15
-
16
- /**
17
- * Looks up the on-chain identifiers for some addresses.
18
- * Supports ENS.
19
- */
20
- const lookupAddresses = async (config, addresses) => {
21
- const onChainIds = new Map(addresses.map(address => [address, null]));
22
- const [ensDomains] = await Promise.all([lookupEnsAddresses(config, addresses)
23
- // add more providers here
24
- ]);
25
- ensDomains.forEach((domain, address) => {
26
- if (!domain) return;
27
- onChainIds.set(address, domain);
28
- });
29
- return onChainIds;
30
- };
31
-
32
- /**
33
- * Looks up the on-chain AZNS domains for some addresses.
34
- * @deprecated
35
- */
36
- const lookupAznsAddresses = async (config, addresses) => {
37
- return new Promise(resolve => resolve(new Map(addresses.map(address => [address, null]))));
38
- };
39
-
40
- /**
41
- * Looks up the on-chain ENS domains for some addresses.
42
- */
43
- const lookupEnsAddresses = async (config, addresses) => {
44
- const onChainIds = new Map(addresses.map(address => [address, null]));
45
- const client = await config.chainConnectors.evm?.getPublicClientForEvmNetwork(config.networkIdEthereum);
46
- if (!client) {
47
- log.warn(`Could not find Ethereum client in OnChainId::lookupEnsAddresses`);
48
- return onChainIds;
49
- }
50
- const results = await Promise.allSettled(addresses.map(async address => {
51
- // no need to do ENS lookup for polkadot addresses
52
- if (!crypto.isEthereumAddress(address)) return;
53
- try {
54
- const domain = await client.getEnsName({
55
- address
56
- });
57
- domain !== null && onChainIds.set(address, domain);
58
- } catch (cause) {
59
- const errorMessage = cause?.shortMessage ?? String(cause);
60
- throw new Error(`Failed to resolve ENS domain for address '${address}': ${errorMessage}`);
61
- }
62
- }));
63
- results.forEach(result => result.status === "rejected" && log.warn(result.reason.message));
64
- return onChainIds;
65
- };
66
-
67
- /** dot separated string e.g. `ens.eth` or `hello.lol` */
68
- const isPotentialEns = name => typeof name === "string" && /^.+\..+$/.test(name);
69
-
70
- const resolveNames = async (config, names) => {
71
- const resolvedNames = new Map(names.map(name => [name, null]));
72
- const [ensNames] = await Promise.all([resolveEnsNames(config, names)
73
- // add more providers here
74
- ]);
75
- ensNames.forEach((lookup, name) => {
76
- if (!lookup) return;
77
- const [address, lookupType] = lookup;
78
- if (!address) return;
79
- resolvedNames.set(name, [address, lookupType]);
80
- });
81
- return resolvedNames;
82
- };
83
-
84
- /**
85
- * Looks up the addresses for some azns (azero.id) domains.
86
- * @deprecated
87
- */
88
- const resolveAznsNames = (config, names) => {
89
- return new Promise(resolve => resolve(new Map(names.map(name => [name, null]))));
90
- };
91
-
92
- /**
93
- * Looks up the addresses for some ens (ens.domains) domains.
94
- */
95
- const resolveEnsNames = async (config, names) => {
96
- const resolvedNames = new Map(names.map(name => [name, null]));
97
- if (names.every(name => !isPotentialEns(name))) return resolvedNames;
98
- const client = await config.chainConnectors.evm?.getPublicClientForEvmNetwork(config.networkIdEthereum);
99
- if (!client) {
100
- log.warn(`Could not find Ethereum client in OnChainId::resolveNames`);
101
- return resolvedNames;
102
- }
103
- const results = await Promise.allSettled(names.map(async name => {
104
- if (!isPotentialEns(name)) return;
105
- try {
106
- const address = await Promise.race([
107
- // this hangs forever in some cases (ex: try agyle.e first, then agyle.et => hangs) - couldn't explain it
108
- client.getEnsAddress({
109
- name
110
- }), util.throwAfter(10_000, "Timeout")]);
111
- address !== null && resolvedNames.set(name, [address, "ens"]);
112
- } catch (cause) {
113
- throw new Error(`Failed to resolve address for ens domain '${name}'`, {
114
- cause
115
- });
116
- }
117
- }));
118
- results.forEach(result => result.status === "rejected" && log.warn(result.reason));
119
- return resolvedNames;
120
- };
121
-
122
- /** @deprecated */
123
- // eslint-disable-next-line @typescript-eslint/no-unused-vars
124
- const isPotentialAzns = name => false;
125
-
126
- class OnChainId {
127
- #config;
128
- constructor(config) {
129
- this.#config = {
130
- ...config,
131
- networkIdEthereum: config.networkIdEthereum ?? "1"
132
- };
133
- }
134
- resolveNames = (...args) => resolveNames(this.#config, ...args);
135
- resolveEnsNames = (...args) => resolveEnsNames(this.#config, ...args);
136
- /** @deprecated */
137
- resolveAznsNames = (...args) => resolveAznsNames(this.#config, ...args);
138
- lookupAddresses = (...args) => lookupAddresses(this.#config, ...args);
139
- /** @deprecated */
140
- lookupEnsAddresses = (...args) => lookupEnsAddresses(this.#config, ...args);
141
- lookupAznsAddresses = (...args) => lookupAznsAddresses(this.#config, ...args);
142
- }
143
-
144
- exports.OnChainId = OnChainId;
145
- exports.isPotentialAzns = isPotentialAzns;
146
- exports.isPotentialEns = isPotentialEns;
@@ -1,7 +0,0 @@
1
- 'use strict';
2
-
3
- if (process.env.NODE_ENV === "production") {
4
- module.exports = require("./talismn-on-chain-id.cjs.prod.js");
5
- } else {
6
- module.exports = require("./talismn-on-chain-id.cjs.dev.js");
7
- }
@@ -1,146 +0,0 @@
1
- 'use strict';
2
-
3
- var crypto = require('@talismn/crypto');
4
- var anylogger = require('anylogger');
5
- var util = require('@talismn/util');
6
-
7
- function _interopDefault (e) { return e && e.__esModule ? e : { default: e }; }
8
-
9
- var anylogger__default = /*#__PURE__*/_interopDefault(anylogger);
10
-
11
- var packageJson = {
12
- name: "@talismn/on-chain-id"};
13
-
14
- var log = anylogger__default.default(packageJson.name);
15
-
16
- /**
17
- * Looks up the on-chain identifiers for some addresses.
18
- * Supports ENS.
19
- */
20
- const lookupAddresses = async (config, addresses) => {
21
- const onChainIds = new Map(addresses.map(address => [address, null]));
22
- const [ensDomains] = await Promise.all([lookupEnsAddresses(config, addresses)
23
- // add more providers here
24
- ]);
25
- ensDomains.forEach((domain, address) => {
26
- if (!domain) return;
27
- onChainIds.set(address, domain);
28
- });
29
- return onChainIds;
30
- };
31
-
32
- /**
33
- * Looks up the on-chain AZNS domains for some addresses.
34
- * @deprecated
35
- */
36
- const lookupAznsAddresses = async (config, addresses) => {
37
- return new Promise(resolve => resolve(new Map(addresses.map(address => [address, null]))));
38
- };
39
-
40
- /**
41
- * Looks up the on-chain ENS domains for some addresses.
42
- */
43
- const lookupEnsAddresses = async (config, addresses) => {
44
- const onChainIds = new Map(addresses.map(address => [address, null]));
45
- const client = await config.chainConnectors.evm?.getPublicClientForEvmNetwork(config.networkIdEthereum);
46
- if (!client) {
47
- log.warn(`Could not find Ethereum client in OnChainId::lookupEnsAddresses`);
48
- return onChainIds;
49
- }
50
- const results = await Promise.allSettled(addresses.map(async address => {
51
- // no need to do ENS lookup for polkadot addresses
52
- if (!crypto.isEthereumAddress(address)) return;
53
- try {
54
- const domain = await client.getEnsName({
55
- address
56
- });
57
- domain !== null && onChainIds.set(address, domain);
58
- } catch (cause) {
59
- const errorMessage = cause?.shortMessage ?? String(cause);
60
- throw new Error(`Failed to resolve ENS domain for address '${address}': ${errorMessage}`);
61
- }
62
- }));
63
- results.forEach(result => result.status === "rejected" && log.warn(result.reason.message));
64
- return onChainIds;
65
- };
66
-
67
- /** dot separated string e.g. `ens.eth` or `hello.lol` */
68
- const isPotentialEns = name => typeof name === "string" && /^.+\..+$/.test(name);
69
-
70
- const resolveNames = async (config, names) => {
71
- const resolvedNames = new Map(names.map(name => [name, null]));
72
- const [ensNames] = await Promise.all([resolveEnsNames(config, names)
73
- // add more providers here
74
- ]);
75
- ensNames.forEach((lookup, name) => {
76
- if (!lookup) return;
77
- const [address, lookupType] = lookup;
78
- if (!address) return;
79
- resolvedNames.set(name, [address, lookupType]);
80
- });
81
- return resolvedNames;
82
- };
83
-
84
- /**
85
- * Looks up the addresses for some azns (azero.id) domains.
86
- * @deprecated
87
- */
88
- const resolveAznsNames = (config, names) => {
89
- return new Promise(resolve => resolve(new Map(names.map(name => [name, null]))));
90
- };
91
-
92
- /**
93
- * Looks up the addresses for some ens (ens.domains) domains.
94
- */
95
- const resolveEnsNames = async (config, names) => {
96
- const resolvedNames = new Map(names.map(name => [name, null]));
97
- if (names.every(name => !isPotentialEns(name))) return resolvedNames;
98
- const client = await config.chainConnectors.evm?.getPublicClientForEvmNetwork(config.networkIdEthereum);
99
- if (!client) {
100
- log.warn(`Could not find Ethereum client in OnChainId::resolveNames`);
101
- return resolvedNames;
102
- }
103
- const results = await Promise.allSettled(names.map(async name => {
104
- if (!isPotentialEns(name)) return;
105
- try {
106
- const address = await Promise.race([
107
- // this hangs forever in some cases (ex: try agyle.e first, then agyle.et => hangs) - couldn't explain it
108
- client.getEnsAddress({
109
- name
110
- }), util.throwAfter(10_000, "Timeout")]);
111
- address !== null && resolvedNames.set(name, [address, "ens"]);
112
- } catch (cause) {
113
- throw new Error(`Failed to resolve address for ens domain '${name}'`, {
114
- cause
115
- });
116
- }
117
- }));
118
- results.forEach(result => result.status === "rejected" && log.warn(result.reason));
119
- return resolvedNames;
120
- };
121
-
122
- /** @deprecated */
123
- // eslint-disable-next-line @typescript-eslint/no-unused-vars
124
- const isPotentialAzns = name => false;
125
-
126
- class OnChainId {
127
- #config;
128
- constructor(config) {
129
- this.#config = {
130
- ...config,
131
- networkIdEthereum: config.networkIdEthereum ?? "1"
132
- };
133
- }
134
- resolveNames = (...args) => resolveNames(this.#config, ...args);
135
- resolveEnsNames = (...args) => resolveEnsNames(this.#config, ...args);
136
- /** @deprecated */
137
- resolveAznsNames = (...args) => resolveAznsNames(this.#config, ...args);
138
- lookupAddresses = (...args) => lookupAddresses(this.#config, ...args);
139
- /** @deprecated */
140
- lookupEnsAddresses = (...args) => lookupEnsAddresses(this.#config, ...args);
141
- lookupAznsAddresses = (...args) => lookupAznsAddresses(this.#config, ...args);
142
- }
143
-
144
- exports.OnChainId = OnChainId;
145
- exports.isPotentialAzns = isPotentialAzns;
146
- exports.isPotentialEns = isPotentialEns;
@@ -1,138 +0,0 @@
1
- import { isEthereumAddress } from '@talismn/crypto';
2
- import anylogger from 'anylogger';
3
- import { throwAfter } from '@talismn/util';
4
-
5
- var packageJson = {
6
- name: "@talismn/on-chain-id"};
7
-
8
- var log = anylogger(packageJson.name);
9
-
10
- /**
11
- * Looks up the on-chain identifiers for some addresses.
12
- * Supports ENS.
13
- */
14
- const lookupAddresses = async (config, addresses) => {
15
- const onChainIds = new Map(addresses.map(address => [address, null]));
16
- const [ensDomains] = await Promise.all([lookupEnsAddresses(config, addresses)
17
- // add more providers here
18
- ]);
19
- ensDomains.forEach((domain, address) => {
20
- if (!domain) return;
21
- onChainIds.set(address, domain);
22
- });
23
- return onChainIds;
24
- };
25
-
26
- /**
27
- * Looks up the on-chain AZNS domains for some addresses.
28
- * @deprecated
29
- */
30
- const lookupAznsAddresses = async (config, addresses) => {
31
- return new Promise(resolve => resolve(new Map(addresses.map(address => [address, null]))));
32
- };
33
-
34
- /**
35
- * Looks up the on-chain ENS domains for some addresses.
36
- */
37
- const lookupEnsAddresses = async (config, addresses) => {
38
- const onChainIds = new Map(addresses.map(address => [address, null]));
39
- const client = await config.chainConnectors.evm?.getPublicClientForEvmNetwork(config.networkIdEthereum);
40
- if (!client) {
41
- log.warn(`Could not find Ethereum client in OnChainId::lookupEnsAddresses`);
42
- return onChainIds;
43
- }
44
- const results = await Promise.allSettled(addresses.map(async address => {
45
- // no need to do ENS lookup for polkadot addresses
46
- if (!isEthereumAddress(address)) return;
47
- try {
48
- const domain = await client.getEnsName({
49
- address
50
- });
51
- domain !== null && onChainIds.set(address, domain);
52
- } catch (cause) {
53
- const errorMessage = cause?.shortMessage ?? String(cause);
54
- throw new Error(`Failed to resolve ENS domain for address '${address}': ${errorMessage}`);
55
- }
56
- }));
57
- results.forEach(result => result.status === "rejected" && log.warn(result.reason.message));
58
- return onChainIds;
59
- };
60
-
61
- /** dot separated string e.g. `ens.eth` or `hello.lol` */
62
- const isPotentialEns = name => typeof name === "string" && /^.+\..+$/.test(name);
63
-
64
- const resolveNames = async (config, names) => {
65
- const resolvedNames = new Map(names.map(name => [name, null]));
66
- const [ensNames] = await Promise.all([resolveEnsNames(config, names)
67
- // add more providers here
68
- ]);
69
- ensNames.forEach((lookup, name) => {
70
- if (!lookup) return;
71
- const [address, lookupType] = lookup;
72
- if (!address) return;
73
- resolvedNames.set(name, [address, lookupType]);
74
- });
75
- return resolvedNames;
76
- };
77
-
78
- /**
79
- * Looks up the addresses for some azns (azero.id) domains.
80
- * @deprecated
81
- */
82
- const resolveAznsNames = (config, names) => {
83
- return new Promise(resolve => resolve(new Map(names.map(name => [name, null]))));
84
- };
85
-
86
- /**
87
- * Looks up the addresses for some ens (ens.domains) domains.
88
- */
89
- const resolveEnsNames = async (config, names) => {
90
- const resolvedNames = new Map(names.map(name => [name, null]));
91
- if (names.every(name => !isPotentialEns(name))) return resolvedNames;
92
- const client = await config.chainConnectors.evm?.getPublicClientForEvmNetwork(config.networkIdEthereum);
93
- if (!client) {
94
- log.warn(`Could not find Ethereum client in OnChainId::resolveNames`);
95
- return resolvedNames;
96
- }
97
- const results = await Promise.allSettled(names.map(async name => {
98
- if (!isPotentialEns(name)) return;
99
- try {
100
- const address = await Promise.race([
101
- // this hangs forever in some cases (ex: try agyle.e first, then agyle.et => hangs) - couldn't explain it
102
- client.getEnsAddress({
103
- name
104
- }), throwAfter(10_000, "Timeout")]);
105
- address !== null && resolvedNames.set(name, [address, "ens"]);
106
- } catch (cause) {
107
- throw new Error(`Failed to resolve address for ens domain '${name}'`, {
108
- cause
109
- });
110
- }
111
- }));
112
- results.forEach(result => result.status === "rejected" && log.warn(result.reason));
113
- return resolvedNames;
114
- };
115
-
116
- /** @deprecated */
117
- // eslint-disable-next-line @typescript-eslint/no-unused-vars
118
- const isPotentialAzns = name => false;
119
-
120
- class OnChainId {
121
- #config;
122
- constructor(config) {
123
- this.#config = {
124
- ...config,
125
- networkIdEthereum: config.networkIdEthereum ?? "1"
126
- };
127
- }
128
- resolveNames = (...args) => resolveNames(this.#config, ...args);
129
- resolveEnsNames = (...args) => resolveEnsNames(this.#config, ...args);
130
- /** @deprecated */
131
- resolveAznsNames = (...args) => resolveAznsNames(this.#config, ...args);
132
- lookupAddresses = (...args) => lookupAddresses(this.#config, ...args);
133
- /** @deprecated */
134
- lookupEnsAddresses = (...args) => lookupEnsAddresses(this.#config, ...args);
135
- lookupAznsAddresses = (...args) => lookupAznsAddresses(this.#config, ...args);
136
- }
137
-
138
- export { OnChainId, isPotentialAzns, isPotentialEns };