@hyperlane-xyz/sdk 1.4.2-beta69 → 1.4.2-beta70

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (83) hide show
  1. package/dist/app/HyperlaneApp.d.ts +14 -0
  2. package/dist/app/HyperlaneApp.d.ts.map +1 -0
  3. package/dist/app/HyperlaneApp.js +27 -0
  4. package/dist/app/HyperlaneApp.js.map +1 -0
  5. package/dist/app/MultiProtocolApp.d.ts +51 -0
  6. package/dist/app/MultiProtocolApp.d.ts.map +1 -0
  7. package/dist/app/MultiProtocolApp.js +80 -0
  8. package/dist/app/MultiProtocolApp.js.map +1 -0
  9. package/dist/app/MultiProtocolApp.test.d.ts +2 -0
  10. package/dist/app/MultiProtocolApp.test.d.ts.map +1 -0
  11. package/dist/app/MultiProtocolApp.test.js +19 -0
  12. package/dist/app/MultiProtocolApp.test.js.map +1 -0
  13. package/dist/consts/defaultMultisigIsm.d.ts +4 -0
  14. package/dist/consts/defaultMultisigIsm.d.ts.map +1 -0
  15. package/dist/consts/defaultMultisigIsm.js +194 -0
  16. package/dist/consts/defaultMultisigIsm.js.map +1 -0
  17. package/dist/consts/rcMultisigIsm.d.ts +4 -0
  18. package/dist/consts/rcMultisigIsm.d.ts.map +1 -0
  19. package/dist/consts/rcMultisigIsm.js +117 -0
  20. package/dist/consts/rcMultisigIsm.js.map +1 -0
  21. package/dist/contracts/contracts.d.ts +19 -0
  22. package/dist/contracts/contracts.d.ts.map +1 -0
  23. package/dist/contracts/contracts.js +80 -0
  24. package/dist/contracts/contracts.js.map +1 -0
  25. package/dist/contracts/types.d.ts +18 -0
  26. package/dist/contracts/types.d.ts.map +1 -0
  27. package/dist/contracts/types.js +3 -0
  28. package/dist/contracts/types.js.map +1 -0
  29. package/dist/metadata/ChainMetadataManager.d.ts +130 -0
  30. package/dist/metadata/ChainMetadataManager.d.ts.map +1 -0
  31. package/dist/metadata/ChainMetadataManager.js +240 -0
  32. package/dist/metadata/ChainMetadataManager.js.map +1 -0
  33. package/dist/metadata/agentConfig.d.ts +3 -3
  34. package/dist/metadata/agentConfig.test.d.ts +2 -0
  35. package/dist/metadata/agentConfig.test.d.ts.map +1 -0
  36. package/dist/metadata/agentConfig.test.js +33 -0
  37. package/dist/metadata/agentConfig.test.js.map +1 -0
  38. package/dist/metadata/deploymentArtifacts.d.ts +4 -4
  39. package/dist/providers/MultiProtocolProvider.d.ts +39 -0
  40. package/dist/providers/MultiProtocolProvider.d.ts.map +1 -0
  41. package/dist/providers/MultiProtocolProvider.js +105 -0
  42. package/dist/providers/MultiProtocolProvider.js.map +1 -0
  43. package/dist/providers/MultiProtocolProvider.test.d.ts +2 -0
  44. package/dist/providers/MultiProtocolProvider.test.d.ts.map +1 -0
  45. package/dist/providers/MultiProtocolProvider.test.js +24 -0
  46. package/dist/providers/MultiProtocolProvider.test.js.map +1 -0
  47. package/dist/providers/ProviderType.d.ts +71 -0
  48. package/dist/providers/ProviderType.d.ts.map +1 -0
  49. package/dist/providers/ProviderType.js +11 -0
  50. package/dist/providers/ProviderType.js.map +1 -0
  51. package/dist/providers/providerBuilders.d.ts +17 -0
  52. package/dist/providers/providerBuilders.d.ts.map +1 -0
  53. package/dist/providers/providerBuilders.js +97 -0
  54. package/dist/providers/providerBuilders.js.map +1 -0
  55. package/dist/router/MultiProtocolRouterApps.d.ts +29 -0
  56. package/dist/router/MultiProtocolRouterApps.d.ts.map +1 -0
  57. package/dist/router/MultiProtocolRouterApps.js +43 -0
  58. package/dist/router/MultiProtocolRouterApps.js.map +1 -0
  59. package/dist/router/MultiProtocolRouterApps.test.d.ts +2 -0
  60. package/dist/router/MultiProtocolRouterApps.test.d.ts.map +1 -0
  61. package/dist/router/MultiProtocolRouterApps.test.js +20 -0
  62. package/dist/router/MultiProtocolRouterApps.test.js.map +1 -0
  63. package/dist/router/adapters/EvmRouterAdapter.d.ts +25 -0
  64. package/dist/router/adapters/EvmRouterAdapter.d.ts.map +1 -0
  65. package/dist/router/adapters/EvmRouterAdapter.js +50 -0
  66. package/dist/router/adapters/EvmRouterAdapter.js.map +1 -0
  67. package/dist/router/adapters/SealevelRouterAdapter.d.ts +50 -0
  68. package/dist/router/adapters/SealevelRouterAdapter.d.ts.map +1 -0
  69. package/dist/router/adapters/SealevelRouterAdapter.js +132 -0
  70. package/dist/router/adapters/SealevelRouterAdapter.js.map +1 -0
  71. package/dist/router/adapters/SealevelRouterAdapter.test.d.ts +2 -0
  72. package/dist/router/adapters/SealevelRouterAdapter.test.d.ts.map +1 -0
  73. package/dist/router/adapters/SealevelRouterAdapter.test.js +21 -0
  74. package/dist/router/adapters/SealevelRouterAdapter.test.js.map +1 -0
  75. package/dist/router/adapters/types.d.ts +18 -0
  76. package/dist/router/adapters/types.d.ts.map +1 -0
  77. package/dist/router/adapters/types.js +3 -0
  78. package/dist/router/adapters/types.js.map +1 -0
  79. package/dist/utils/filter.d.ts +3 -0
  80. package/dist/utils/filter.d.ts.map +1 -0
  81. package/dist/utils/filter.js +13 -0
  82. package/dist/utils/filter.js.map +1 -0
  83. package/package.json +3 -3
@@ -0,0 +1,80 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.appFromAddressesMapHelper = exports.filterOwnableContracts = exports.connectContractsMap = exports.connectContracts = exports.attachContractsMap = exports.attachContracts = exports.filterAddressesMap = exports.serializeContracts = exports.serializeContractsMap = void 0;
4
+ const utils_1 = require("@hyperlane-xyz/utils");
5
+ function serializeContractsMap(contractsMap) {
6
+ return (0, utils_1.objMap)(contractsMap, (_, contracts) => {
7
+ return serializeContracts(contracts);
8
+ });
9
+ }
10
+ exports.serializeContractsMap = serializeContractsMap;
11
+ function serializeContracts(contracts) {
12
+ return (0, utils_1.objMap)(contracts, (_, contract) => contract.address);
13
+ }
14
+ exports.serializeContracts = serializeContracts;
15
+ function getFactory(key, factories) {
16
+ if (!(key in factories)) {
17
+ throw new Error(`Factories entry missing for ${key.toString()}`);
18
+ }
19
+ return factories[key];
20
+ }
21
+ function filterAddressesMap(addressesMap, factories) {
22
+ const factoryKeys = Object.keys(factories);
23
+ // Filter out addresses that we do not have factories for
24
+ const pickedAddressesMap = (0, utils_1.objMap)(addressesMap, (_, addresses) => (0, utils_1.pick)(addresses, factoryKeys));
25
+ // Filter out chains for which we do not have a complete set of addresses
26
+ return (0, utils_1.objFilter)(pickedAddressesMap, (_, addresses) => {
27
+ return Object.keys(addresses).every((a) => factoryKeys.includes(a));
28
+ });
29
+ }
30
+ exports.filterAddressesMap = filterAddressesMap;
31
+ function attachContracts(addresses, factories) {
32
+ return (0, utils_1.objMap)(addresses, (key, address) => {
33
+ const factory = getFactory(key, factories);
34
+ return factory.attach(address);
35
+ });
36
+ }
37
+ exports.attachContracts = attachContracts;
38
+ function attachContractsMap(addressesMap, factories) {
39
+ const filteredAddressesMap = filterAddressesMap(addressesMap, factories);
40
+ return (0, utils_1.objMap)(filteredAddressesMap, (_, addresses) => attachContracts(addresses, factories));
41
+ }
42
+ exports.attachContractsMap = attachContractsMap;
43
+ function connectContracts(contracts, connection) {
44
+ return (0, utils_1.objMap)(contracts, (_, contract) => contract.connect(connection));
45
+ }
46
+ exports.connectContracts = connectContracts;
47
+ function connectContractsMap(contractsMap, multiProvider) {
48
+ return (0, utils_1.objMap)(contractsMap, (chain, contracts) => connectContracts(contracts, multiProvider.getSignerOrProvider(chain)));
49
+ }
50
+ exports.connectContractsMap = connectContractsMap;
51
+ async function filterOwnableContracts(contracts) {
52
+ const isOwnable = async (_, contract) => {
53
+ try {
54
+ await contract.owner();
55
+ return true;
56
+ }
57
+ catch (_) {
58
+ return false;
59
+ }
60
+ };
61
+ const isOwnableContracts = await (0, utils_1.promiseObjAll)((0, utils_1.objMap)(contracts, isOwnable));
62
+ return (0, utils_1.objFilter)(contracts, (name, contract) => isOwnableContracts[name]);
63
+ }
64
+ exports.filterOwnableContracts = filterOwnableContracts;
65
+ function appFromAddressesMapHelper(addressesMap, factories, multiProvider) {
66
+ // Attaches contracts for each chain for which we have a complete set of
67
+ // addresses
68
+ const contractsMap = attachContractsMap(addressesMap, factories);
69
+ // Filters out providers for chains for which we don't have a complete set
70
+ // of addresses
71
+ const intersection = multiProvider.intersect(Object.keys(contractsMap));
72
+ // Filters out contracts for chains for which we don't have a provider
73
+ const filteredContractsMap = (0, utils_1.pick)(contractsMap, intersection.intersection);
74
+ return {
75
+ contractsMap: filteredContractsMap,
76
+ multiProvider: intersection.multiProvider,
77
+ };
78
+ }
79
+ exports.appFromAddressesMapHelper = appFromAddressesMapHelper;
80
+ //# sourceMappingURL=contracts.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"contracts.js","sourceRoot":"","sources":["../../src/contracts/contracts.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,18 @@
1
+ import type { ethers } from 'ethers';
2
+ import type { Address } from '@hyperlane-xyz/utils';
3
+ import type { ChainMap } from '../types';
4
+ export type AddressesMap = {
5
+ [key: string]: Address;
6
+ };
7
+ export type HyperlaneFactories = {
8
+ [key: string]: ethers.ContractFactory;
9
+ };
10
+ export type HyperlaneContracts<F extends HyperlaneFactories> = {
11
+ [P in keyof F]: Awaited<ReturnType<F[P]['deploy']>>;
12
+ };
13
+ export type HyperlaneContractsMap<F extends HyperlaneFactories> = ChainMap<HyperlaneContracts<F>>;
14
+ export type HyperlaneAddresses<F extends HyperlaneFactories> = {
15
+ [P in keyof F]: Address;
16
+ };
17
+ export type HyperlaneAddressesMap<F extends HyperlaneFactories> = ChainMap<HyperlaneAddresses<F>>;
18
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/contracts/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAErC,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,sBAAsB,CAAC;AAEpD,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,UAAU,CAAC;AAEzC,MAAM,MAAM,YAAY,GAAG;IACzB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;CACxB,CAAC;AAEF,MAAM,MAAM,kBAAkB,GAAG;IAC/B,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAAC,eAAe,CAAC;CACvC,CAAC;AAEF,MAAM,MAAM,kBAAkB,CAAC,CAAC,SAAS,kBAAkB,IAAI;KAC5D,CAAC,IAAI,MAAM,CAAC,GAAG,OAAO,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC;CACpD,CAAC;AAEF,MAAM,MAAM,qBAAqB,CAAC,CAAC,SAAS,kBAAkB,IAAI,QAAQ,CACxE,kBAAkB,CAAC,CAAC,CAAC,CACtB,CAAC;AAEF,MAAM,MAAM,kBAAkB,CAAC,CAAC,SAAS,kBAAkB,IAAI;KAC5D,CAAC,IAAI,MAAM,CAAC,GAAG,OAAO;CACxB,CAAC;AAEF,MAAM,MAAM,qBAAqB,CAAC,CAAC,SAAS,kBAAkB,IAAI,QAAQ,CACxE,kBAAkB,CAAC,CAAC,CAAC,CACtB,CAAC"}
@@ -0,0 +1,3 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/contracts/types.ts"],"names":[],"mappings":""}
@@ -0,0 +1,130 @@
1
+ import { Debugger } from 'debug';
2
+ import { ChainMap, ChainName } from '../types';
3
+ import { ChainMetadata } from './chainMetadataTypes';
4
+ export interface ChainMetadataManagerOptions {
5
+ loggerName?: string;
6
+ }
7
+ /**
8
+ * A set of utilities to manage chain metadata
9
+ * Validates metadata on construction and provides useful methods
10
+ * for interacting with the data
11
+ */
12
+ export declare class ChainMetadataManager<MetaExt = {}> {
13
+ readonly metadata: ChainMap<ChainMetadata<MetaExt>>;
14
+ protected readonly logger: Debugger;
15
+ /**
16
+ * Create a new ChainMetadataManager with the given chainMetadata,
17
+ * or the SDK's default metadata if not provided
18
+ */
19
+ constructor(chainMetadata?: ChainMap<ChainMetadata<MetaExt>>, options?: ChainMetadataManagerOptions);
20
+ /**
21
+ * Add a chain to the MultiProvider
22
+ * @throws if chain's name or domain/chain ID collide
23
+ */
24
+ addChain(metadata: ChainMetadata<MetaExt>): void;
25
+ /**
26
+ * Get the metadata for a given chain name, chain id, or domain id
27
+ * @throws if chain's metadata has not been set
28
+ */
29
+ tryGetChainMetadata(chainNameOrId: ChainName | number): ChainMetadata<MetaExt> | null;
30
+ /**
31
+ * Get the metadata for a given chain name, chain id, or domain id
32
+ * @throws if chain's metadata has not been set
33
+ */
34
+ getChainMetadata(chainNameOrId: ChainName | number): ChainMetadata<MetaExt>;
35
+ /**
36
+ * Get the name for a given chain name, chain id, or domain id
37
+ */
38
+ tryGetChainName(chainNameOrId: ChainName | number): string | null;
39
+ /**
40
+ * Get the name for a given chain name, chain id, or domain id
41
+ * @throws if chain's metadata has not been set
42
+ */
43
+ getChainName(chainNameOrId: ChainName | number): string;
44
+ /**
45
+ * Get the names for all chains known to this MultiProvider
46
+ */
47
+ getKnownChainNames(): string[];
48
+ /**
49
+ * Get the id for a given chain name, chain id, or domain id
50
+ */
51
+ tryGetChainId(chainNameOrId: ChainName | number): number | null;
52
+ /**
53
+ * Get the id for a given chain name, chain id, or domain id
54
+ * @throws if chain's metadata has not been set
55
+ */
56
+ getChainId(chainNameOrId: ChainName | number): number;
57
+ /**
58
+ * Get the ids for all chains known to this MultiProvider
59
+ */
60
+ getKnownChainIds(): number[];
61
+ /**
62
+ * Get the domain id for a given chain name, chain id, or domain id
63
+ */
64
+ tryGetDomainId(chainNameOrId: ChainName | number): number | null;
65
+ /**
66
+ * Get the domain id for a given chain name, chain id, or domain id
67
+ * @throws if chain's metadata has not been set
68
+ */
69
+ getDomainId(chainNameOrId: ChainName | number): number;
70
+ /**
71
+ * Get the domain ids for a list of chain names, chain ids, or domain ids
72
+ * @throws if any chain's metadata has not been set
73
+ */
74
+ getDomainIds(chainNamesOrIds: Array<ChainName | number>): number[];
75
+ /**
76
+ * Get the ids for all chains known to this MultiProvider
77
+ */
78
+ getKnownDomainIds(): number[];
79
+ /**
80
+ * Get chain names excluding given chain name
81
+ */
82
+ getRemoteChains(name: ChainName): ChainName[];
83
+ /**
84
+ * Run given function on all known chains
85
+ */
86
+ mapKnownChains<Output>(fn: (n: ChainName) => Output): ChainMap<Output>;
87
+ /**
88
+ * Get an RPC URL for a given chain name, chain id, or domain id
89
+ * @throws if chain's metadata has not been set
90
+ */
91
+ getRpcUrl(chainNameOrId: ChainName | number): string;
92
+ /**
93
+ * Get a block explorer URL for a given chain name, chain id, or domain id
94
+ */
95
+ tryGetExplorerUrl(chainNameOrId: ChainName | number): string | null;
96
+ /**
97
+ * Get a block explorer URL for a given chain name, chain id, or domain id
98
+ * @throws if chain's metadata or block explorer data has no been set
99
+ */
100
+ getExplorerUrl(chainNameOrId: ChainName | number): string;
101
+ /**
102
+ * Get a block explorer's API URL for a given chain name, chain id, or domain id
103
+ */
104
+ tryGetExplorerApiUrl(chainNameOrId: ChainName | number): string | null;
105
+ /**
106
+ * Get a block explorer API URL for a given chain name, chain id, or domain id
107
+ * @throws if chain's metadata or block explorer data has no been set
108
+ */
109
+ getExplorerApiUrl(chainNameOrId: ChainName | number): string;
110
+ /**
111
+ * Get a block explorer URL for given chain's tx
112
+ */
113
+ tryGetExplorerTxUrl(chainNameOrId: ChainName | number, response: {
114
+ hash: string;
115
+ }): string | null;
116
+ /**
117
+ * Get a block explorer URL for given chain's tx
118
+ * @throws if chain's metadata or block explorer data has no been set
119
+ */
120
+ getExplorerTxUrl(chainNameOrId: ChainName | number, response: {
121
+ hash: string;
122
+ }): string;
123
+ /**
124
+ * Creates a new ChainMetadataManager with the extended metadata
125
+ * @param additionalMetadata extra fields to add to the metadata for each chain
126
+ * @returns a new ChainMetadataManager
127
+ */
128
+ extendChainMetadata<NewExt = {}>(additionalMetadata: ChainMap<NewExt>): ChainMetadataManager<MetaExt & NewExt>;
129
+ }
130
+ //# sourceMappingURL=ChainMetadataManager.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ChainMetadataManager.d.ts","sourceRoot":"","sources":["../../src/metadata/ChainMetadataManager.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,240 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.ChainMetadataManager = void 0;
4
+ const debug_1 = require("debug");
5
+ const utils_1 = require("@hyperlane-xyz/utils");
6
+ const chainMetadata_1 = require("../consts/chainMetadata");
7
+ const chainMetadataTypes_1 = require("./chainMetadataTypes");
8
+ /**
9
+ * A set of utilities to manage chain metadata
10
+ * Validates metadata on construction and provides useful methods
11
+ * for interacting with the data
12
+ */
13
+ class ChainMetadataManager {
14
+ /**
15
+ * Create a new ChainMetadataManager with the given chainMetadata,
16
+ * or the SDK's default metadata if not provided
17
+ */
18
+ constructor(chainMetadata = chainMetadata_1.chainMetadata, options = {}) {
19
+ this.metadata = {};
20
+ Object.entries(chainMetadata).forEach(([key, cm]) => {
21
+ if (key !== cm.name)
22
+ throw new Error(`Chain name mismatch: Key was ${key}, but name is ${cm.name}`);
23
+ this.addChain(cm);
24
+ });
25
+ this.logger = (0, debug_1.debug)(options?.loggerName || 'hyperlane:MetadataManager');
26
+ }
27
+ /**
28
+ * Add a chain to the MultiProvider
29
+ * @throws if chain's name or domain/chain ID collide
30
+ */
31
+ addChain(metadata) {
32
+ if (!(0, chainMetadataTypes_1.isValidChainMetadata)(metadata))
33
+ throw new Error(`Invalid chain metadata for ${metadata.name}`);
34
+ // Ensure no two chains have overlapping names/domainIds/chainIds
35
+ for (const chainMetadata of Object.values(this.metadata)) {
36
+ const { name, chainId, domainId } = chainMetadata;
37
+ if (name == metadata.name)
38
+ throw new Error(`Duplicate chain name: ${name}`);
39
+ // Chain and Domain Ids should be globally unique
40
+ const idCollision = chainId == metadata.chainId ||
41
+ domainId == metadata.chainId ||
42
+ (metadata.domainId &&
43
+ (chainId == metadata.domainId || domainId === metadata.domainId));
44
+ if (idCollision)
45
+ throw new Error(`Chain/Domain id collision: ${name} and ${metadata.name}`);
46
+ }
47
+ this.metadata[metadata.name] = metadata;
48
+ }
49
+ /**
50
+ * Get the metadata for a given chain name, chain id, or domain id
51
+ * @throws if chain's metadata has not been set
52
+ */
53
+ tryGetChainMetadata(chainNameOrId) {
54
+ let chainMetadata;
55
+ if ((0, utils_1.isNumeric)(chainNameOrId)) {
56
+ // Should be chain id or domain id
57
+ chainMetadata = Object.values(this.metadata).find((m) => m.chainId == chainNameOrId || m.domainId == chainNameOrId);
58
+ }
59
+ else if (typeof chainNameOrId === 'string') {
60
+ // Should be chain name
61
+ chainMetadata = this.metadata[chainNameOrId];
62
+ }
63
+ return chainMetadata || null;
64
+ }
65
+ /**
66
+ * Get the metadata for a given chain name, chain id, or domain id
67
+ * @throws if chain's metadata has not been set
68
+ */
69
+ getChainMetadata(chainNameOrId) {
70
+ const chainMetadata = this.tryGetChainMetadata(chainNameOrId);
71
+ if (!chainMetadata)
72
+ throw new Error(`No chain metadata set for ${chainNameOrId}`);
73
+ return chainMetadata;
74
+ }
75
+ /**
76
+ * Get the name for a given chain name, chain id, or domain id
77
+ */
78
+ tryGetChainName(chainNameOrId) {
79
+ return this.tryGetChainMetadata(chainNameOrId)?.name ?? null;
80
+ }
81
+ /**
82
+ * Get the name for a given chain name, chain id, or domain id
83
+ * @throws if chain's metadata has not been set
84
+ */
85
+ getChainName(chainNameOrId) {
86
+ return this.getChainMetadata(chainNameOrId).name;
87
+ }
88
+ /**
89
+ * Get the names for all chains known to this MultiProvider
90
+ */
91
+ getKnownChainNames() {
92
+ return Object.keys(this.metadata);
93
+ }
94
+ /**
95
+ * Get the id for a given chain name, chain id, or domain id
96
+ */
97
+ tryGetChainId(chainNameOrId) {
98
+ return this.tryGetChainMetadata(chainNameOrId)?.chainId ?? null;
99
+ }
100
+ /**
101
+ * Get the id for a given chain name, chain id, or domain id
102
+ * @throws if chain's metadata has not been set
103
+ */
104
+ getChainId(chainNameOrId) {
105
+ return this.getChainMetadata(chainNameOrId).chainId;
106
+ }
107
+ /**
108
+ * Get the ids for all chains known to this MultiProvider
109
+ */
110
+ getKnownChainIds() {
111
+ return Object.values(this.metadata).map((c) => c.chainId);
112
+ }
113
+ /**
114
+ * Get the domain id for a given chain name, chain id, or domain id
115
+ */
116
+ tryGetDomainId(chainNameOrId) {
117
+ const metadata = this.tryGetChainMetadata(chainNameOrId);
118
+ return metadata?.domainId ?? metadata?.chainId ?? null;
119
+ }
120
+ /**
121
+ * Get the domain id for a given chain name, chain id, or domain id
122
+ * @throws if chain's metadata has not been set
123
+ */
124
+ getDomainId(chainNameOrId) {
125
+ const metadata = this.getChainMetadata(chainNameOrId);
126
+ return (0, chainMetadataTypes_1.getDomainId)(metadata);
127
+ }
128
+ /**
129
+ * Get the domain ids for a list of chain names, chain ids, or domain ids
130
+ * @throws if any chain's metadata has not been set
131
+ */
132
+ getDomainIds(chainNamesOrIds) {
133
+ return chainNamesOrIds.map((c) => this.getDomainId(c));
134
+ }
135
+ /**
136
+ * Get the ids for all chains known to this MultiProvider
137
+ */
138
+ getKnownDomainIds() {
139
+ return this.getKnownChainNames().map(this.getDomainId);
140
+ }
141
+ /**
142
+ * Get chain names excluding given chain name
143
+ */
144
+ getRemoteChains(name) {
145
+ return (0, utils_1.exclude)(name, this.getKnownChainNames());
146
+ }
147
+ /**
148
+ * Run given function on all known chains
149
+ */
150
+ mapKnownChains(fn) {
151
+ const result = {};
152
+ for (const chain of this.getKnownChainNames()) {
153
+ result[chain] = fn(chain);
154
+ }
155
+ return result;
156
+ }
157
+ /**
158
+ * Get an RPC URL for a given chain name, chain id, or domain id
159
+ * @throws if chain's metadata has not been set
160
+ */
161
+ getRpcUrl(chainNameOrId) {
162
+ const { rpcUrls } = this.getChainMetadata(chainNameOrId);
163
+ if (!rpcUrls?.length || !rpcUrls[0].http)
164
+ throw new Error(`No RPC URl configured for ${chainNameOrId}`);
165
+ return rpcUrls[0].http;
166
+ }
167
+ /**
168
+ * Get a block explorer URL for a given chain name, chain id, or domain id
169
+ */
170
+ tryGetExplorerUrl(chainNameOrId) {
171
+ const explorers = this.tryGetChainMetadata(chainNameOrId)?.blockExplorers;
172
+ if (!explorers?.length)
173
+ return null;
174
+ return explorers[0].url;
175
+ }
176
+ /**
177
+ * Get a block explorer URL for a given chain name, chain id, or domain id
178
+ * @throws if chain's metadata or block explorer data has no been set
179
+ */
180
+ getExplorerUrl(chainNameOrId) {
181
+ const url = this.tryGetExplorerUrl(chainNameOrId);
182
+ if (!url)
183
+ throw new Error(`No explorer url set for ${chainNameOrId}`);
184
+ return url;
185
+ }
186
+ /**
187
+ * Get a block explorer's API URL for a given chain name, chain id, or domain id
188
+ */
189
+ tryGetExplorerApiUrl(chainNameOrId) {
190
+ const explorers = this.tryGetChainMetadata(chainNameOrId)?.blockExplorers;
191
+ if (!explorers?.length || !explorers[0].apiUrl)
192
+ return null;
193
+ const { apiUrl, apiKey } = explorers[0];
194
+ if (!apiKey)
195
+ return apiUrl;
196
+ const url = new URL(apiUrl);
197
+ url.searchParams.set('apikey', apiKey);
198
+ return url.toString();
199
+ }
200
+ /**
201
+ * Get a block explorer API URL for a given chain name, chain id, or domain id
202
+ * @throws if chain's metadata or block explorer data has no been set
203
+ */
204
+ getExplorerApiUrl(chainNameOrId) {
205
+ const url = this.tryGetExplorerApiUrl(chainNameOrId);
206
+ if (!url)
207
+ throw new Error(`No explorer api url set for ${chainNameOrId}`);
208
+ return url;
209
+ }
210
+ /**
211
+ * Get a block explorer URL for given chain's tx
212
+ */
213
+ tryGetExplorerTxUrl(chainNameOrId, response) {
214
+ const baseUrl = this.tryGetExplorerUrl(chainNameOrId);
215
+ return baseUrl ? `${baseUrl}/tx/${response.hash}` : null;
216
+ }
217
+ /**
218
+ * Get a block explorer URL for given chain's tx
219
+ * @throws if chain's metadata or block explorer data has no been set
220
+ */
221
+ getExplorerTxUrl(chainNameOrId, response) {
222
+ return `${this.getExplorerUrl(chainNameOrId)}/tx/${response.hash}`;
223
+ }
224
+ /**
225
+ * Creates a new ChainMetadataManager with the extended metadata
226
+ * @param additionalMetadata extra fields to add to the metadata for each chain
227
+ * @returns a new ChainMetadataManager
228
+ */
229
+ extendChainMetadata(additionalMetadata) {
230
+ const newMetadata = {};
231
+ for (const [name, meta] of Object.entries(this.metadata)) {
232
+ if (!additionalMetadata[name])
233
+ throw new Error(`No additional data provided for chain ${name}`);
234
+ newMetadata[name] = { ...meta, ...additionalMetadata[name] };
235
+ }
236
+ return new ChainMetadataManager(newMetadata);
237
+ }
238
+ }
239
+ exports.ChainMetadataManager = ChainMetadataManager;
240
+ //# sourceMappingURL=ChainMetadataManager.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ChainMetadataManager.js","sourceRoot":"","sources":["../../src/metadata/ChainMetadataManager.ts"],"names":[],"mappings":"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"}
@@ -45,9 +45,9 @@ export declare const ChainMetadataForAgentSchema: z.ZodObject<{
45
45
  name: z.ZodString;
46
46
  chainId: z.ZodNumber;
47
47
  protocol: z.ZodNativeEnum<typeof ProtocolType>;
48
+ mailbox: z.ZodString;
48
49
  interchainSecurityModule: z.ZodOptional<z.ZodString>;
49
50
  interchainGasPaymaster: z.ZodString;
50
- mailbox: z.ZodString;
51
51
  domainId: z.ZodOptional<z.ZodNumber>;
52
52
  displayName: z.ZodOptional<z.ZodString>;
53
53
  displayNameShort: z.ZodOptional<z.ZodString>;
@@ -173,8 +173,8 @@ export declare const ChainMetadataForAgentSchema: z.ZodObject<{
173
173
  name: string;
174
174
  chainId: number;
175
175
  protocol: ProtocolType;
176
- interchainGasPaymaster: string;
177
176
  mailbox: string;
177
+ interchainGasPaymaster: string;
178
178
  rpcUrls: [{
179
179
  http: string;
180
180
  webSocket?: string | undefined;
@@ -237,8 +237,8 @@ export declare const ChainMetadataForAgentSchema: z.ZodObject<{
237
237
  name: string;
238
238
  chainId: number;
239
239
  protocol: ProtocolType;
240
- interchainGasPaymaster: string;
241
240
  mailbox: string;
241
+ interchainGasPaymaster: string;
242
242
  rpcUrls: [{
243
243
  http: string;
244
244
  webSocket?: string | undefined;
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=agentConfig.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"agentConfig.test.d.ts","sourceRoot":"","sources":["../../src/metadata/agentConfig.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,33 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const chai_1 = require("chai");
4
+ const chains_1 = require("../consts/chains");
5
+ const MultiProvider_1 = require("../providers/MultiProvider");
6
+ const agentConfig_1 = require("./agentConfig");
7
+ describe('Agent config', () => {
8
+ const args = [
9
+ [chains_1.Chains.ethereum],
10
+ new MultiProvider_1.MultiProvider(),
11
+ {
12
+ ethereum: {
13
+ mailbox: '0xmailbox',
14
+ interchainGasPaymaster: '0xgas',
15
+ validatorAnnounce: '0xannounce',
16
+ },
17
+ },
18
+ { ethereum: 0 },
19
+ ];
20
+ it('Should generate a deprecated agent config', () => {
21
+ const result = (0, agentConfig_1.buildAgentConfigDeprecated)(...args);
22
+ (0, chai_1.expect)(Object.keys(result)).to.deep.equal(['chains']);
23
+ });
24
+ it('Should generate a new agent config', () => {
25
+ const result = (0, agentConfig_1.buildAgentConfigNew)(...args);
26
+ (0, chai_1.expect)(Object.keys(result)).to.deep.equal([chains_1.Chains.ethereum]);
27
+ });
28
+ it('Should generate a combined agent config', () => {
29
+ const result = (0, agentConfig_1.buildAgentConfig)(...args);
30
+ (0, chai_1.expect)(Object.keys(result)).to.deep.equal([chains_1.Chains.ethereum, 'chains']);
31
+ });
32
+ });
33
+ //# sourceMappingURL=agentConfig.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"agentConfig.test.js","sourceRoot":"","sources":["../../src/metadata/agentConfig.test.ts"],"names":[],"mappings":";;AAAA,+BAA8B;AAE9B,6CAA0C;AAC1C,8DAA2D;AAE3D,+CAIuB;AAEvB,QAAQ,CAAC,cAAc,EAAE,GAAG,EAAE;IAC5B,MAAM,IAAI,GAAwC;QAChD,CAAC,eAAM,CAAC,QAAQ,CAAC;QACjB,IAAI,6BAAa,EAAE;QACnB;YACE,QAAQ,EAAE;gBACR,OAAO,EAAE,WAAW;gBACpB,sBAAsB,EAAE,OAAO;gBAC/B,iBAAiB,EAAE,YAAY;aAChC;SACF;QACD,EAAE,QAAQ,EAAE,CAAC,EAAE;KAChB,CAAC;IAEF,EAAE,CAAC,2CAA2C,EAAE,GAAG,EAAE;QACnD,MAAM,MAAM,GAAG,IAAA,wCAA0B,EAAC,GAAG,IAAI,CAAC,CAAC;QACnD,IAAA,aAAM,EAAC,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC;IACxD,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,oCAAoC,EAAE,GAAG,EAAE;QAC5C,MAAM,MAAM,GAAG,IAAA,iCAAmB,EAAC,GAAG,IAAI,CAAC,CAAC;QAC5C,IAAA,aAAM,EAAC,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,eAAM,CAAC,QAAQ,CAAC,CAAC,CAAC;IAC/D,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,yCAAyC,EAAE,GAAG,EAAE;QACjD,MAAM,MAAM,GAAG,IAAA,8BAAgB,EAAC,GAAG,IAAI,CAAC,CAAC;QACzC,IAAA,aAAM,EAAC,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,eAAM,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC,CAAC;IACzE,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
@@ -5,13 +5,13 @@ export declare const HyperlaneDeploymentArtifactsSchema: z.ZodObject<{
5
5
  validatorAnnounce: z.ZodString;
6
6
  interchainSecurityModule: z.ZodOptional<z.ZodString>;
7
7
  }, "strip", z.ZodTypeAny, {
8
- interchainGasPaymaster: string;
9
8
  mailbox: string;
9
+ interchainGasPaymaster: string;
10
10
  validatorAnnounce: string;
11
11
  interchainSecurityModule?: string | undefined;
12
12
  }, {
13
- interchainGasPaymaster: string;
14
13
  mailbox: string;
14
+ interchainGasPaymaster: string;
15
15
  validatorAnnounce: string;
16
16
  interchainSecurityModule?: string | undefined;
17
17
  }>;
@@ -132,8 +132,8 @@ export declare const ChainMetadataWithArtifactsSchema: z.ZodObject<{
132
132
  name: string;
133
133
  chainId: number;
134
134
  protocol: import("./chainMetadataTypes").ProtocolType;
135
- interchainGasPaymaster: string;
136
135
  mailbox: string;
136
+ interchainGasPaymaster: string;
137
137
  rpcUrls: [{
138
138
  http: string;
139
139
  webSocket?: string | undefined;
@@ -190,8 +190,8 @@ export declare const ChainMetadataWithArtifactsSchema: z.ZodObject<{
190
190
  name: string;
191
191
  chainId: number;
192
192
  protocol: import("./chainMetadataTypes").ProtocolType;
193
- interchainGasPaymaster: string;
194
193
  mailbox: string;
194
+ interchainGasPaymaster: string;
195
195
  rpcUrls: [{
196
196
  http: string;
197
197
  webSocket?: string | undefined;
@@ -0,0 +1,39 @@
1
+ import { Debugger } from 'debug';
2
+ import { ChainMetadataManager } from '../metadata/ChainMetadataManager';
3
+ import type { ChainMetadata } from '../metadata/chainMetadataTypes';
4
+ import type { ChainMap, ChainName } from '../types';
5
+ import type { MultiProvider } from './MultiProvider';
6
+ import { EthersV5Provider, ProviderMap, ProviderType, SolanaWeb3Provider, TypedProvider, ViemProvider } from './ProviderType';
7
+ import { ProviderBuilderMap } from './providerBuilders';
8
+ export interface MultiProtocolProviderOptions {
9
+ loggerName?: string;
10
+ providerBuilders?: Partial<ProviderBuilderMap>;
11
+ }
12
+ /**
13
+ * A version of MultiProvider that can support different
14
+ * provider types across different protocol types.
15
+ *
16
+ * This uses a different interface for provider/signer related methods
17
+ * so it isn't strictly backwards compatible with MultiProvider.
18
+ *
19
+ * Unlike MultiProvider, this class does not support signer/signing methods (yet).
20
+ * @typeParam MetaExt - Extra metadata fields for chains (such as contract addresses)
21
+ */
22
+ export declare class MultiProtocolProvider<MetaExt = {}> extends ChainMetadataManager<MetaExt> {
23
+ protected readonly options: MultiProtocolProviderOptions;
24
+ protected readonly providers: ChainMap<ProviderMap<TypedProvider>>;
25
+ protected signers: ChainMap<ProviderMap<never>>;
26
+ protected readonly logger: Debugger;
27
+ protected readonly providerBuilders: Partial<ProviderBuilderMap>;
28
+ constructor(chainMetadata?: ChainMap<ChainMetadata<MetaExt>>, options?: MultiProtocolProviderOptions);
29
+ static fromMultiProvider<MetaExt = {}>(mp: MultiProvider<MetaExt>, options?: MultiProtocolProviderOptions): MultiProtocolProvider<MetaExt>;
30
+ extendChainMetadata<NewExt = {}>(additionalMetadata: ChainMap<NewExt>): MultiProtocolProvider<MetaExt & NewExt>;
31
+ tryGetProvider(chainNameOrId: ChainName | number, type: ProviderType): TypedProvider | null;
32
+ getProvider(chainNameOrId: ChainName | number, type: ProviderType): TypedProvider;
33
+ getEthersV5Provider(chainNameOrId: ChainName | number): EthersV5Provider['provider'];
34
+ getViemProvider(chainNameOrId: ChainName | number): ViemProvider['provider'];
35
+ getSolanaWeb3Provider(chainNameOrId: ChainName | number): SolanaWeb3Provider['provider'];
36
+ setProvider(chainNameOrId: ChainName | number, provider: TypedProvider): TypedProvider;
37
+ setProviders(providers: ChainMap<TypedProvider>): void;
38
+ }
39
+ //# sourceMappingURL=MultiProtocolProvider.d.ts.map