moonwall 1.0.0-dev.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +681 -0
- package/README.md +54 -0
- package/config_schema.json +811 -0
- package/dist/api/constants/accounts.d.ts +36 -0
- package/dist/api/constants/accounts.d.ts.map +1 -0
- package/dist/api/constants/accounts.js +67 -0
- package/dist/api/constants/chain.d.ts +134 -0
- package/dist/api/constants/chain.d.ts.map +1 -0
- package/dist/api/constants/chain.js +149 -0
- package/dist/api/constants/index.d.ts +4 -0
- package/dist/api/constants/index.d.ts.map +1 -0
- package/dist/api/constants/index.js +3 -0
- package/dist/api/constants/smartContract.d.ts +29 -0
- package/dist/api/constants/smartContract.d.ts.map +1 -0
- package/dist/api/constants/smartContract.js +118 -0
- package/dist/api/testing/blocks.d.ts +59 -0
- package/dist/api/testing/blocks.d.ts.map +1 -0
- package/dist/api/testing/blocks.js +147 -0
- package/dist/api/testing/contracts.d.ts +5 -0
- package/dist/api/testing/contracts.d.ts.map +1 -0
- package/dist/api/testing/contracts.js +32 -0
- package/dist/api/testing/ethers.d.ts +3 -0
- package/dist/api/testing/ethers.d.ts.map +1 -0
- package/dist/api/testing/ethers.js +38 -0
- package/dist/api/testing/events.d.ts +12 -0
- package/dist/api/testing/events.d.ts.map +1 -0
- package/dist/api/testing/events.js +23 -0
- package/dist/api/testing/extrinsics.d.ts +5 -0
- package/dist/api/testing/extrinsics.d.ts.map +1 -0
- package/dist/api/testing/extrinsics.js +10 -0
- package/dist/api/testing/index.d.ts +9 -0
- package/dist/api/testing/index.d.ts.map +1 -0
- package/dist/api/testing/index.js +8 -0
- package/dist/api/testing/jumping.d.ts +8 -0
- package/dist/api/testing/jumping.d.ts.map +1 -0
- package/dist/api/testing/jumping.js +78 -0
- package/dist/api/testing/providers.d.ts +18 -0
- package/dist/api/testing/providers.d.ts.map +1 -0
- package/dist/api/testing/providers.js +34 -0
- package/dist/api/testing/viem.d.ts +139 -0
- package/dist/api/testing/viem.d.ts.map +1 -0
- package/dist/api/testing/viem.js +247 -0
- package/dist/api/types/config.d.ts +609 -0
- package/dist/api/types/config.d.ts.map +1 -0
- package/dist/api/types/config.js +1 -0
- package/dist/api/types/context.d.ts +125 -0
- package/dist/api/types/context.d.ts.map +1 -0
- package/dist/api/types/context.js +1 -0
- package/dist/api/types/contracts.d.ts +66 -0
- package/dist/api/types/contracts.d.ts.map +1 -0
- package/dist/api/types/contracts.js +1 -0
- package/dist/api/types/eth.d.ts +3 -0
- package/dist/api/types/eth.d.ts.map +1 -0
- package/dist/api/types/eth.js +1 -0
- package/dist/api/types/foundations.d.ts +11 -0
- package/dist/api/types/foundations.d.ts.map +1 -0
- package/dist/api/types/foundations.js +1 -0
- package/dist/api/types/helpers.d.ts +7 -0
- package/dist/api/types/helpers.d.ts.map +1 -0
- package/dist/api/types/helpers.js +1 -0
- package/dist/api/types/index.d.ts +8 -0
- package/dist/api/types/index.d.ts.map +1 -0
- package/dist/api/types/index.js +7 -0
- package/dist/api/types/runner.d.ts +490 -0
- package/dist/api/types/runner.d.ts.map +1 -0
- package/dist/api/types/runner.js +1 -0
- package/dist/cli/cmds/components/LogViewer.d.ts +17 -0
- package/dist/cli/cmds/components/LogViewer.d.ts.map +1 -0
- package/dist/cli/cmds/components/LogViewer.js +171 -0
- package/dist/cli/cmds/entrypoint.d.ts +6 -0
- package/dist/cli/cmds/entrypoint.d.ts.map +1 -0
- package/dist/cli/cmds/entrypoint.js +192 -0
- package/dist/cli/cmds/interactiveCmds/chopsticksIntCmds.d.ts +2 -0
- package/dist/cli/cmds/interactiveCmds/chopsticksIntCmds.d.ts.map +1 -0
- package/dist/cli/cmds/interactiveCmds/chopsticksIntCmds.js +117 -0
- package/dist/cli/cmds/interactiveCmds/devIntCmds.d.ts +2 -0
- package/dist/cli/cmds/interactiveCmds/devIntCmds.d.ts.map +1 -0
- package/dist/cli/cmds/interactiveCmds/devIntCmds.js +103 -0
- package/dist/cli/cmds/interactiveCmds/index.d.ts +4 -0
- package/dist/cli/cmds/interactiveCmds/index.d.ts.map +1 -0
- package/dist/cli/cmds/interactiveCmds/index.js +3 -0
- package/dist/cli/cmds/interactiveCmds/zombieIntCmds.d.ts +2 -0
- package/dist/cli/cmds/interactiveCmds/zombieIntCmds.d.ts.map +1 -0
- package/dist/cli/cmds/interactiveCmds/zombieIntCmds.js +32 -0
- package/dist/cli/cmds/main.d.ts +2 -0
- package/dist/cli/cmds/main.d.ts.map +1 -0
- package/dist/cli/cmds/main.js +336 -0
- package/dist/cli/cmds/runNetwork.d.ts +3 -0
- package/dist/cli/cmds/runNetwork.d.ts.map +1 -0
- package/dist/cli/cmds/runNetwork.js +292 -0
- package/dist/cli/cmds/runTests.d.ts +12 -0
- package/dist/cli/cmds/runTests.d.ts.map +1 -0
- package/dist/cli/cmds/runTests.js +257 -0
- package/dist/cli/internal/cmdFunctions/downloader.d.ts +4 -0
- package/dist/cli/internal/cmdFunctions/downloader.d.ts.map +1 -0
- package/dist/cli/internal/cmdFunctions/downloader.js +49 -0
- package/dist/cli/internal/cmdFunctions/fetchArtifact.d.ts +10 -0
- package/dist/cli/internal/cmdFunctions/fetchArtifact.d.ts.map +1 -0
- package/dist/cli/internal/cmdFunctions/fetchArtifact.js +145 -0
- package/dist/cli/internal/cmdFunctions/index.d.ts +5 -0
- package/dist/cli/internal/cmdFunctions/index.d.ts.map +1 -0
- package/dist/cli/internal/cmdFunctions/index.js +4 -0
- package/dist/cli/internal/cmdFunctions/initialisation.d.ts +20 -0
- package/dist/cli/internal/cmdFunctions/initialisation.d.ts.map +1 -0
- package/dist/cli/internal/cmdFunctions/initialisation.js +150 -0
- package/dist/cli/internal/cmdFunctions/tempLogs.d.ts +3 -0
- package/dist/cli/internal/cmdFunctions/tempLogs.d.ts.map +1 -0
- package/dist/cli/internal/cmdFunctions/tempLogs.js +37 -0
- package/dist/cli/internal/commandParsers.d.ts +59 -0
- package/dist/cli/internal/commandParsers.d.ts.map +1 -0
- package/dist/cli/internal/commandParsers.js +305 -0
- package/dist/cli/internal/deriveTestIds.d.ts +8 -0
- package/dist/cli/internal/deriveTestIds.d.ts.map +1 -0
- package/dist/cli/internal/deriveTestIds.js +123 -0
- package/dist/cli/internal/effect/index.d.ts +6 -0
- package/dist/cli/internal/effect/index.d.ts.map +1 -0
- package/dist/cli/internal/effect/index.js +5 -0
- package/dist/cli/internal/fileCheckers.d.ts +11 -0
- package/dist/cli/internal/fileCheckers.d.ts.map +1 -0
- package/dist/cli/internal/fileCheckers.js +165 -0
- package/dist/cli/internal/foundations/index.d.ts +4 -0
- package/dist/cli/internal/foundations/index.d.ts.map +1 -0
- package/dist/cli/internal/foundations/index.js +4 -0
- package/dist/cli/internal/index.d.ts +12 -0
- package/dist/cli/internal/index.d.ts.map +1 -0
- package/dist/cli/internal/index.js +11 -0
- package/dist/cli/internal/launcherCommon.d.ts +4 -0
- package/dist/cli/internal/launcherCommon.d.ts.map +1 -0
- package/dist/cli/internal/launcherCommon.js +130 -0
- package/dist/cli/internal/localNode.d.ts +16 -0
- package/dist/cli/internal/localNode.d.ts.map +1 -0
- package/dist/cli/internal/localNode.js +362 -0
- package/dist/cli/internal/logging.d.ts +2 -0
- package/dist/cli/internal/logging.d.ts.map +1 -0
- package/dist/cli/internal/logging.js +26 -0
- package/dist/cli/internal/node.d.ts +33 -0
- package/dist/cli/internal/node.d.ts.map +1 -0
- package/dist/cli/internal/node.js +228 -0
- package/dist/cli/internal/processHelpers.d.ts +17 -0
- package/dist/cli/internal/processHelpers.d.ts.map +1 -0
- package/dist/cli/internal/processHelpers.js +56 -0
- package/dist/cli/internal/providerFactories.d.ts +48 -0
- package/dist/cli/internal/providerFactories.d.ts.map +1 -0
- package/dist/cli/internal/providerFactories.js +442 -0
- package/dist/cli/internal/testIdParser.d.ts +34 -0
- package/dist/cli/internal/testIdParser.d.ts.map +1 -0
- package/dist/cli/internal/testIdParser.js +167 -0
- package/dist/cli/lib/binariesHelpers.d.ts +15 -0
- package/dist/cli/lib/binariesHelpers.d.ts.map +1 -0
- package/dist/cli/lib/binariesHelpers.js +99 -0
- package/dist/cli/lib/configReader.d.ts +8 -0
- package/dist/cli/lib/configReader.d.ts.map +1 -0
- package/dist/cli/lib/configReader.js +115 -0
- package/dist/cli/lib/contractFunctions.d.ts +2 -0
- package/dist/cli/lib/contractFunctions.d.ts.map +1 -0
- package/dist/cli/lib/contractFunctions.js +2 -0
- package/dist/cli/lib/globalContext.d.ts +46 -0
- package/dist/cli/lib/globalContext.d.ts.map +1 -0
- package/dist/cli/lib/globalContext.js +710 -0
- package/dist/cli/lib/governanceProcedures.d.ts +27 -0
- package/dist/cli/lib/governanceProcedures.d.ts.map +1 -0
- package/dist/cli/lib/governanceProcedures.js +458 -0
- package/dist/cli/lib/handlers/index.d.ts +5 -0
- package/dist/cli/lib/handlers/index.d.ts.map +1 -0
- package/dist/cli/lib/handlers/index.js +5 -0
- package/dist/cli/lib/repoDefinitions/index.d.ts +6 -0
- package/dist/cli/lib/repoDefinitions/index.d.ts.map +1 -0
- package/dist/cli/lib/repoDefinitions/index.js +21 -0
- package/dist/cli/lib/repoDefinitions/moonbeam.d.ts +4 -0
- package/dist/cli/lib/repoDefinitions/moonbeam.d.ts.map +1 -0
- package/dist/cli/lib/repoDefinitions/moonbeam.js +30 -0
- package/dist/cli/lib/repoDefinitions/polkadot.d.ts +4 -0
- package/dist/cli/lib/repoDefinitions/polkadot.d.ts.map +1 -0
- package/dist/cli/lib/repoDefinitions/polkadot.js +11 -0
- package/dist/cli/lib/repoDefinitions/tanssi.d.ts +4 -0
- package/dist/cli/lib/repoDefinitions/tanssi.d.ts.map +1 -0
- package/dist/cli/lib/repoDefinitions/tanssi.js +14 -0
- package/dist/cli/lib/rpcFunctions.d.ts +2 -0
- package/dist/cli/lib/rpcFunctions.d.ts.map +1 -0
- package/dist/cli/lib/rpcFunctions.js +26 -0
- package/dist/cli/lib/runnerContext.d.ts +32 -0
- package/dist/cli/lib/runnerContext.d.ts.map +1 -0
- package/dist/cli/lib/runnerContext.js +156 -0
- package/dist/cli/lib/shardManager.d.ts +40 -0
- package/dist/cli/lib/shardManager.d.ts.map +1 -0
- package/dist/cli/lib/shardManager.js +80 -0
- package/dist/cli/lib/upgradeProcedures.d.ts +5 -0
- package/dist/cli/lib/upgradeProcedures.d.ts.map +1 -0
- package/dist/cli/lib/upgradeProcedures.js +221 -0
- package/dist/cli.d.ts +4 -0
- package/dist/cli.d.ts.map +1 -0
- package/dist/cli.js +3 -0
- package/dist/contracts/contractInteraction.d.ts +17 -0
- package/dist/contracts/contractInteraction.d.ts.map +1 -0
- package/dist/contracts/contractInteraction.js +170 -0
- package/dist/contracts/index.d.ts +2 -0
- package/dist/contracts/index.d.ts.map +1 -0
- package/dist/contracts/index.js +1 -0
- package/dist/foundations/chopsticks/handler.d.ts +3 -0
- package/dist/foundations/chopsticks/handler.d.ts.map +1 -0
- package/dist/foundations/chopsticks/handler.js +93 -0
- package/dist/foundations/chopsticks/helpers.d.ts +27 -0
- package/dist/foundations/chopsticks/helpers.d.ts.map +1 -0
- package/dist/foundations/chopsticks/helpers.js +133 -0
- package/dist/foundations/dev/handler.d.ts +3 -0
- package/dist/foundations/dev/handler.d.ts.map +1 -0
- package/dist/foundations/dev/handler.js +136 -0
- package/dist/foundations/dev/helpers.d.ts +27 -0
- package/dist/foundations/dev/helpers.d.ts.map +1 -0
- package/dist/foundations/dev/helpers.js +161 -0
- package/dist/foundations/read-only/handler.d.ts +3 -0
- package/dist/foundations/read-only/handler.d.ts.map +1 -0
- package/dist/foundations/read-only/handler.js +32 -0
- package/dist/foundations/zombie/handler.d.ts +3 -0
- package/dist/foundations/zombie/handler.d.ts.map +1 -0
- package/dist/foundations/zombie/handler.js +92 -0
- package/dist/foundations/zombie/helpers.d.ts +16 -0
- package/dist/foundations/zombie/helpers.d.ts.map +1 -0
- package/dist/foundations/zombie/helpers.js +97 -0
- package/dist/index.d.ts +17 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +47 -0
- package/dist/internal/common.d.ts +3 -0
- package/dist/internal/common.d.ts.map +1 -0
- package/dist/internal/common.js +41 -0
- package/dist/internal/index.d.ts +4 -0
- package/dist/internal/index.d.ts.map +1 -0
- package/dist/internal/index.js +3 -0
- package/dist/internal/logger.d.ts +24 -0
- package/dist/internal/logger.d.ts.map +1 -0
- package/dist/internal/logger.js +66 -0
- package/dist/internal/logging.d.ts +7 -0
- package/dist/internal/logging.d.ts.map +1 -0
- package/dist/internal/logging.js +36 -0
- package/dist/moondebug.d.ts +3 -0
- package/dist/moondebug.d.ts.map +1 -0
- package/dist/moondebug.js +2 -0
- package/dist/services/cache/FileLock.d.ts +11 -0
- package/dist/services/cache/FileLock.d.ts.map +1 -0
- package/dist/services/cache/FileLock.js +68 -0
- package/dist/services/cache/StartupCacheService.d.ts +23 -0
- package/dist/services/cache/StartupCacheService.d.ts.map +1 -0
- package/dist/services/cache/StartupCacheService.js +159 -0
- package/dist/services/cache/index.d.ts +3 -0
- package/dist/services/cache/index.d.ts.map +1 -0
- package/dist/services/cache/index.js +2 -0
- package/dist/services/chopsticks/ChopsticksMultiChain.d.ts +158 -0
- package/dist/services/chopsticks/ChopsticksMultiChain.d.ts.map +1 -0
- package/dist/services/chopsticks/ChopsticksMultiChain.js +282 -0
- package/dist/services/chopsticks/ChopsticksService.d.ts +313 -0
- package/dist/services/chopsticks/ChopsticksService.d.ts.map +1 -0
- package/dist/services/chopsticks/ChopsticksService.js +77 -0
- package/dist/services/chopsticks/chopsticksConfigParser.d.ts +40 -0
- package/dist/services/chopsticks/chopsticksConfigParser.d.ts.map +1 -0
- package/dist/services/chopsticks/chopsticksConfigParser.js +201 -0
- package/dist/services/chopsticks/index.d.ts +5 -0
- package/dist/services/chopsticks/index.d.ts.map +1 -0
- package/dist/services/chopsticks/index.js +4 -0
- package/dist/services/chopsticks/launchChopsticksEffect.d.ts +225 -0
- package/dist/services/chopsticks/launchChopsticksEffect.d.ts.map +1 -0
- package/dist/services/chopsticks/launchChopsticksEffect.js +623 -0
- package/dist/services/config/configAccessors.d.ts +41 -0
- package/dist/services/config/configAccessors.d.ts.map +1 -0
- package/dist/services/config/configAccessors.js +149 -0
- package/dist/services/config/index.d.ts +2 -0
- package/dist/services/config/index.d.ts.map +1 -0
- package/dist/services/config/index.js +1 -0
- package/dist/services/errors.d.ts +72 -0
- package/dist/services/errors.d.ts.map +1 -0
- package/dist/services/errors.js +31 -0
- package/dist/services/index.d.ts +7 -0
- package/dist/services/index.d.ts.map +1 -0
- package/dist/services/index.js +6 -0
- package/dist/services/network/NodeReadinessService.d.ts +35 -0
- package/dist/services/network/NodeReadinessService.d.ts.map +1 -0
- package/dist/services/network/NodeReadinessService.js +120 -0
- package/dist/services/network/PortDiscoveryService.d.ts +22 -0
- package/dist/services/network/PortDiscoveryService.d.ts.map +1 -0
- package/dist/services/network/PortDiscoveryService.js +77 -0
- package/dist/services/network/RpcPortDiscoveryService.d.ts +25 -0
- package/dist/services/network/RpcPortDiscoveryService.d.ts.map +1 -0
- package/dist/services/network/RpcPortDiscoveryService.js +136 -0
- package/dist/services/network/index.d.ts +4 -0
- package/dist/services/network/index.d.ts.map +1 -0
- package/dist/services/network/index.js +3 -0
- package/dist/services/process/ProcessManagerService.d.ts +49 -0
- package/dist/services/process/ProcessManagerService.d.ts.map +1 -0
- package/dist/services/process/ProcessManagerService.js +162 -0
- package/dist/services/process/index.d.ts +3 -0
- package/dist/services/process/index.d.ts.map +1 -0
- package/dist/services/process/index.js +2 -0
- package/dist/services/process/launchNodeEffect.d.ts +40 -0
- package/dist/services/process/launchNodeEffect.d.ts.map +1 -0
- package/dist/services/process/launchNodeEffect.js +86 -0
- package/dist/util/functions/index.d.ts +3 -0
- package/dist/util/functions/index.d.ts.map +1 -0
- package/dist/util/functions/index.js +4 -0
- package/dist/util/index.d.ts +4 -0
- package/dist/util/index.d.ts.map +1 -0
- package/dist/util/index.js +2 -0
- package/package.json +157 -0
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
import child_process from "node:child_process";
|
|
2
|
+
import { promisify } from "node:util";
|
|
3
|
+
import { createLogger } from "../../util/index.js";
|
|
4
|
+
const logger = createLogger({ name: "actions:runner" });
|
|
5
|
+
const debug = logger.debug.bind(logger);
|
|
6
|
+
const execAsync = promisify(child_process.exec);
|
|
7
|
+
/**
|
|
8
|
+
* Wraps a promise with a timeout. If the original promise does not resolve within the specified time, it rejects.
|
|
9
|
+
* @param promise The original promise to wrap.
|
|
10
|
+
* @param ms The timeout duration in milliseconds.
|
|
11
|
+
* @returns A promise that either resolves/rejects with the original promise or rejects with a timeout error.
|
|
12
|
+
*/
|
|
13
|
+
export const withTimeout = (promise, ms) => {
|
|
14
|
+
return Promise.race([
|
|
15
|
+
promise,
|
|
16
|
+
new Promise((_, reject) => setTimeout(() => reject(new Error("Operation timed out")), ms)),
|
|
17
|
+
]);
|
|
18
|
+
};
|
|
19
|
+
// Execute process and return the output
|
|
20
|
+
export async function runTask(cmd, { cwd, env } = {
|
|
21
|
+
cwd: process.cwd(),
|
|
22
|
+
}, title) {
|
|
23
|
+
debug(`${title ? `Title: ${title}\n` : ""}Running task on directory ${cwd}: ${cmd}\n`);
|
|
24
|
+
try {
|
|
25
|
+
const result = await execAsync(cmd, { cwd, env });
|
|
26
|
+
return result.stdout;
|
|
27
|
+
}
|
|
28
|
+
catch (error) {
|
|
29
|
+
const status = error.status ? `[${error.status}]` : "[Unknown Status]";
|
|
30
|
+
const message = error.message ? `${error.message}` : "No Error Message";
|
|
31
|
+
debug(`Caught exception in command execution. Error[${status}] ${message}`);
|
|
32
|
+
throw error;
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
// Execute process return the emitter instantly, without wait
|
|
36
|
+
export async function spawnTask(cmd, { cwd, env } = {
|
|
37
|
+
cwd: process.cwd(),
|
|
38
|
+
}, title) {
|
|
39
|
+
debug(`${title ? `Title: ${title}\n` : ""}Running task on directory ${process.cwd()}: ${cmd}\n`);
|
|
40
|
+
try {
|
|
41
|
+
const process = child_process.spawn(cmd.split(" ")[0], cmd
|
|
42
|
+
.split(" ")
|
|
43
|
+
.slice(1)
|
|
44
|
+
.filter((a) => a.length > 0), {
|
|
45
|
+
cwd,
|
|
46
|
+
env,
|
|
47
|
+
});
|
|
48
|
+
return process;
|
|
49
|
+
}
|
|
50
|
+
catch (error) {
|
|
51
|
+
const status = error.status ? `[${error.status}]` : "[Unknown Status]";
|
|
52
|
+
const message = error.message ? `${error.message}` : "No Error Message";
|
|
53
|
+
debug(`Caught exception in command execution. Error[${status}] ${message}\n`);
|
|
54
|
+
throw error;
|
|
55
|
+
}
|
|
56
|
+
}
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
import type { MoonwallProvider, ProviderConfig, ProviderMap, ProviderType, ViemClient } from "../../api/types/index.js";
|
|
2
|
+
import { ApiPromise } from "@polkadot/api";
|
|
3
|
+
import { Wallet } from "ethers";
|
|
4
|
+
import { type PolkadotClient } from "polkadot-api";
|
|
5
|
+
import { Web3 } from "web3";
|
|
6
|
+
export declare class ProviderFactory {
|
|
7
|
+
private providerConfig;
|
|
8
|
+
private url;
|
|
9
|
+
private privateKey;
|
|
10
|
+
constructor(providerConfig: ProviderConfig);
|
|
11
|
+
create(): MoonwallProvider;
|
|
12
|
+
private createPolkadotJs;
|
|
13
|
+
private createWeb3;
|
|
14
|
+
private createEthers;
|
|
15
|
+
private createViem;
|
|
16
|
+
private createPapi;
|
|
17
|
+
private createDefault;
|
|
18
|
+
static prepare(providerConfigs: ProviderConfig[]): MoonwallProvider[];
|
|
19
|
+
static prepareDefaultDev(): MoonwallProvider[];
|
|
20
|
+
static prepareDefaultZombie(): MoonwallProvider[];
|
|
21
|
+
static prepareNoEthDefaultZombie(): MoonwallProvider[];
|
|
22
|
+
}
|
|
23
|
+
interface GenericProvider<T extends ProviderType> {
|
|
24
|
+
name: string;
|
|
25
|
+
api: ProviderMap[T];
|
|
26
|
+
type: T;
|
|
27
|
+
greet: () => Promise<void> | Promise<{
|
|
28
|
+
rtVersion: number;
|
|
29
|
+
rtName: string;
|
|
30
|
+
}>;
|
|
31
|
+
disconnect: () => void | Promise<void>;
|
|
32
|
+
}
|
|
33
|
+
export declare class ProviderInterfaceFactory {
|
|
34
|
+
name: string;
|
|
35
|
+
type: ProviderType;
|
|
36
|
+
connect: () => Promise<ApiPromise> | Wallet | Web3 | Promise<ViemClient> | PolkadotClient | null;
|
|
37
|
+
constructor(name: string, type: ProviderType, connect: () => Promise<ApiPromise> | Wallet | Web3 | Promise<ViemClient> | PolkadotClient | null);
|
|
38
|
+
create(): Promise<GenericProvider<this["type"]>>;
|
|
39
|
+
private createPolkadotJs;
|
|
40
|
+
private createWeb3;
|
|
41
|
+
private createEthers;
|
|
42
|
+
private createViem;
|
|
43
|
+
private createPapi;
|
|
44
|
+
static populate(name: string, type: ProviderType, connect: () => Promise<ApiPromise> | Wallet | Web3 | Promise<ViemClient> | PolkadotClient | null): Promise<GenericProvider<ProviderType>>;
|
|
45
|
+
}
|
|
46
|
+
export declare const vitestAutoUrl: () => string;
|
|
47
|
+
export {};
|
|
48
|
+
//# sourceMappingURL=providerFactories.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"providerFactories.d.ts","sourceRoot":"","sources":["../../../src/cli/internal/providerFactories.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,gBAAgB,EAChB,cAAc,EACd,WAAW,EACX,YAAY,EACZ,UAAU,EACX,iCAAiC;AAOlC,OAAO,EAAE,UAAU,EAAc,MAAM,eAAe,CAAC;AAEvD,OAAO,EAAE,MAAM,EAAU,MAAM,QAAQ,CAAC;AACxC,OAAO,EAAgB,KAAK,cAAc,EAAE,MAAM,cAAc,CAAC;AAIjE,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAuE5B,qBAAa,eAAe;IAId,OAAO,CAAC,cAAc;IAHlC,OAAO,CAAC,GAAG,CAAS;IACpB,OAAO,CAAC,UAAU,CAAS;gBAEP,cAAc,EAAE,cAAc;IAe3C,MAAM,IAAI,gBAAgB;IAiBjC,OAAO,CAAC,gBAAgB;IA8CxB,OAAO,CAAC,UAAU;IAiBlB,OAAO,CAAC,YAAY;IAcpB,OAAO,CAAC,UAAU;IAgClB,OAAO,CAAC,UAAU;IAgBlB,OAAO,CAAC,aAAa;WAYP,OAAO,CAAC,eAAe,EAAE,cAAc,EAAE,GAAG,gBAAgB,EAAE;WAI9D,iBAAiB,IAAI,gBAAgB,EAAE;WAyBvC,oBAAoB,IAAI,gBAAgB,EAAE;WAsC1C,yBAAyB,IAAI,gBAAgB,EAAE;CAqB9D;AAED,UAAU,eAAe,CAAC,CAAC,SAAS,YAAY;IAC9C,IAAI,EAAE,MAAM,CAAC;IACb,GAAG,EAAE,WAAW,CAAC,CAAC,CAAC,CAAC;IACpB,IAAI,EAAE,CAAC,CAAC;IACR,KAAK,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,GAAG,OAAO,CAAC;QAAE,SAAS,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IAC5E,UAAU,EAAE,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CACxC;AAED,qBAAa,wBAAwB;IAE1B,IAAI,EAAE,MAAM;IACZ,IAAI,EAAE,YAAY;IAClB,OAAO,EAAE,MACZ,OAAO,CAAC,UAAU,CAAC,GACnB,MAAM,GACN,IAAI,GACJ,OAAO,CAAC,UAAU,CAAC,GACnB,cAAc,GACd,IAAI;gBARD,IAAI,EAAE,MAAM,EACZ,IAAI,EAAE,YAAY,EAClB,OAAO,EAAE,MACZ,OAAO,CAAC,UAAU,CAAC,GACnB,MAAM,GACN,IAAI,GACJ,OAAO,CAAC,UAAU,CAAC,GACnB,cAAc,GACd,IAAI;IAGG,MAAM,IAAI,OAAO,CAAC,eAAe,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC;YAiB/C,gBAAgB;YAwBhB,UAAU;YAiBV,YAAY;YAyBZ,UAAU;YAcV,UAAU;WAiBJ,QAAQ,CAC1B,IAAI,EAAE,MAAM,EACZ,IAAI,EAAE,YAAY,EAClB,OAAO,EAAE,MAAM,OAAO,CAAC,UAAU,CAAC,GAAG,MAAM,GAAG,IAAI,GAAG,OAAO,CAAC,UAAU,CAAC,GAAG,cAAc,GAAG,IAAI;CAgBnG;AAED,eAAO,MAAM,aAAa,cAMzB,CAAC"}
|
|
@@ -0,0 +1,442 @@
|
|
|
1
|
+
import { ALITH_PRIVATE_KEY, createLogger, deriveViemChain, normalizeUrlToHttps, } from "../../util/index.js";
|
|
2
|
+
import { ApiPromise, WsProvider } from "@polkadot/api";
|
|
3
|
+
import { Wallet, ethers } from "ethers";
|
|
4
|
+
import { createClient } from "polkadot-api";
|
|
5
|
+
import { getWsProvider } from "polkadot-api/ws-provider";
|
|
6
|
+
import { createWalletClient, http, publicActions } from "viem";
|
|
7
|
+
import { privateKeyToAccount } from "viem/accounts";
|
|
8
|
+
import { Web3 } from "web3";
|
|
9
|
+
import { WebSocketProvider } from "web3-providers-ws";
|
|
10
|
+
import { withPolkadotSdkCompat } from "polkadot-api/polkadot-sdk-compat";
|
|
11
|
+
import * as fs from "node:fs";
|
|
12
|
+
import * as path from "node:path";
|
|
13
|
+
const logger = createLogger({ name: "providers" });
|
|
14
|
+
const debug = logger.debug.bind(logger);
|
|
15
|
+
/**
|
|
16
|
+
* Get the metadata cache directory.
|
|
17
|
+
* Uses MOONWALL_CACHE_DIR if set (from startup caching), otherwise defaults to tmp/metadata-cache.
|
|
18
|
+
*/
|
|
19
|
+
const getMetadataCacheDir = () => {
|
|
20
|
+
return process.env.MOONWALL_CACHE_DIR || path.join(process.cwd(), "tmp", "metadata-cache");
|
|
21
|
+
};
|
|
22
|
+
/**
|
|
23
|
+
* Load cached metadata if available, returns { genesisHash: metadataHex } or undefined
|
|
24
|
+
*/
|
|
25
|
+
const loadCachedMetadata = () => {
|
|
26
|
+
const cacheDir = getMetadataCacheDir();
|
|
27
|
+
const metadataPath = path.join(cacheDir, "metadata-cache.json");
|
|
28
|
+
try {
|
|
29
|
+
const data = fs.readFileSync(metadataPath, "utf-8");
|
|
30
|
+
const cached = JSON.parse(data);
|
|
31
|
+
debug(`Loaded cached metadata for genesis: ${Object.keys(cached).join(", ")}`);
|
|
32
|
+
return cached;
|
|
33
|
+
}
|
|
34
|
+
catch {
|
|
35
|
+
return undefined;
|
|
36
|
+
}
|
|
37
|
+
};
|
|
38
|
+
/**
|
|
39
|
+
* Save metadata to cache for future connections
|
|
40
|
+
*/
|
|
41
|
+
const saveCachedMetadata = (genesisHash, metadataHex) => {
|
|
42
|
+
const cacheDir = getMetadataCacheDir();
|
|
43
|
+
// Ensure cache directory exists
|
|
44
|
+
try {
|
|
45
|
+
fs.mkdirSync(cacheDir, { recursive: true });
|
|
46
|
+
}
|
|
47
|
+
catch {
|
|
48
|
+
// Directory might already exist or creation failed, try to continue
|
|
49
|
+
}
|
|
50
|
+
const metadataPath = path.join(cacheDir, "metadata-cache.json");
|
|
51
|
+
const lockPath = `${metadataPath}.lock`;
|
|
52
|
+
try {
|
|
53
|
+
// Simple lock to prevent concurrent writes
|
|
54
|
+
try {
|
|
55
|
+
fs.openSync(lockPath, fs.constants.O_CREAT | fs.constants.O_EXCL);
|
|
56
|
+
}
|
|
57
|
+
catch {
|
|
58
|
+
// Another process is writing, skip
|
|
59
|
+
return;
|
|
60
|
+
}
|
|
61
|
+
const data = JSON.stringify({ [genesisHash]: metadataHex });
|
|
62
|
+
fs.writeFileSync(metadataPath, data, "utf-8");
|
|
63
|
+
debug(`Saved metadata cache for genesis: ${genesisHash}`);
|
|
64
|
+
}
|
|
65
|
+
catch (e) {
|
|
66
|
+
debug(`Failed to save metadata cache: ${e}`);
|
|
67
|
+
}
|
|
68
|
+
finally {
|
|
69
|
+
try {
|
|
70
|
+
fs.unlinkSync(lockPath);
|
|
71
|
+
}
|
|
72
|
+
catch {
|
|
73
|
+
/* ignore */
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
};
|
|
77
|
+
export class ProviderFactory {
|
|
78
|
+
providerConfig;
|
|
79
|
+
url;
|
|
80
|
+
privateKey;
|
|
81
|
+
constructor(providerConfig) {
|
|
82
|
+
this.providerConfig = providerConfig;
|
|
83
|
+
const endpoint = providerConfig.endpoints[0];
|
|
84
|
+
// Support "AUTO" endpoint that uses dynamic MOONWALL_RPC_PORT
|
|
85
|
+
if (endpoint === "AUTO" || endpoint.includes("ENV_VAR")) {
|
|
86
|
+
this.url =
|
|
87
|
+
endpoint === "AUTO"
|
|
88
|
+
? vitestAutoUrl()
|
|
89
|
+
: process.env.WSS_URL || "error_missing_WSS_URL_env_var";
|
|
90
|
+
}
|
|
91
|
+
else {
|
|
92
|
+
this.url = endpoint;
|
|
93
|
+
}
|
|
94
|
+
debug(`Constructor - providerConfig.endpoints[0]: ${endpoint}, this.url: ${this.url}`);
|
|
95
|
+
this.privateKey = process.env.MOON_PRIV_KEY || ALITH_PRIVATE_KEY;
|
|
96
|
+
}
|
|
97
|
+
create() {
|
|
98
|
+
switch (this.providerConfig.type) {
|
|
99
|
+
case "polkadotJs":
|
|
100
|
+
return this.createPolkadotJs();
|
|
101
|
+
case "web3":
|
|
102
|
+
return this.createWeb3();
|
|
103
|
+
case "ethers":
|
|
104
|
+
return this.createEthers();
|
|
105
|
+
case "viem":
|
|
106
|
+
return this.createViem();
|
|
107
|
+
case "papi":
|
|
108
|
+
return this.createPapi();
|
|
109
|
+
default:
|
|
110
|
+
return this.createDefault();
|
|
111
|
+
}
|
|
112
|
+
}
|
|
113
|
+
createPolkadotJs() {
|
|
114
|
+
debug(`🟢 PolkadotJs provider ${this.providerConfig.name} details prepared to connect to ${this.url}`);
|
|
115
|
+
// Check if metadata caching is enabled (default: true)
|
|
116
|
+
const cacheEnabled = this.providerConfig.cacheMetadata !== false;
|
|
117
|
+
return {
|
|
118
|
+
name: this.providerConfig.name,
|
|
119
|
+
type: this.providerConfig.type,
|
|
120
|
+
connect: async () => {
|
|
121
|
+
const cachedMetadata = cacheEnabled ? loadCachedMetadata() : undefined;
|
|
122
|
+
const startTime = Date.now();
|
|
123
|
+
const options = {
|
|
124
|
+
provider: new WsProvider(this.url),
|
|
125
|
+
initWasm: false,
|
|
126
|
+
noInitWarn: true,
|
|
127
|
+
isPedantic: false,
|
|
128
|
+
rpc: this.providerConfig.rpc ? this.providerConfig.rpc : undefined,
|
|
129
|
+
typesBundle: this.providerConfig.additionalTypes
|
|
130
|
+
? this.providerConfig.additionalTypes
|
|
131
|
+
: undefined,
|
|
132
|
+
metadata: cachedMetadata,
|
|
133
|
+
};
|
|
134
|
+
const api = await ApiPromise.create(options);
|
|
135
|
+
await api.isReady;
|
|
136
|
+
// Cache metadata for future connections if caching is enabled and not already cached
|
|
137
|
+
if (cacheEnabled && !cachedMetadata) {
|
|
138
|
+
const genesisHash = api.genesisHash.toHex();
|
|
139
|
+
const metadataHex = api.runtimeMetadata.toHex();
|
|
140
|
+
saveCachedMetadata(genesisHash, metadataHex);
|
|
141
|
+
debug(`PolkadotJs connected in ${Date.now() - startTime}ms (metadata fetched & cached)`);
|
|
142
|
+
}
|
|
143
|
+
else if (cachedMetadata) {
|
|
144
|
+
debug(`PolkadotJs connected in ${Date.now() - startTime}ms (using cached metadata)`);
|
|
145
|
+
}
|
|
146
|
+
else {
|
|
147
|
+
debug(`PolkadotJs connected in ${Date.now() - startTime}ms (caching disabled)`);
|
|
148
|
+
}
|
|
149
|
+
return api;
|
|
150
|
+
},
|
|
151
|
+
ws: (timeout) => new WsProvider(this.url, 1000, {}, timeout),
|
|
152
|
+
};
|
|
153
|
+
}
|
|
154
|
+
createWeb3() {
|
|
155
|
+
debug(`🟢 Web3 provider ${this.providerConfig.name} details prepared`);
|
|
156
|
+
return {
|
|
157
|
+
name: this.providerConfig.name,
|
|
158
|
+
type: this.providerConfig.type,
|
|
159
|
+
connect: () => {
|
|
160
|
+
const provider = new WebSocketProvider(this.url, {}, { delay: 50, autoReconnect: false, maxAttempts: 10 });
|
|
161
|
+
return new Web3(provider);
|
|
162
|
+
},
|
|
163
|
+
};
|
|
164
|
+
}
|
|
165
|
+
createEthers() {
|
|
166
|
+
debug(`🟢 Ethers provider ${this.providerConfig.name} details prepared`);
|
|
167
|
+
return {
|
|
168
|
+
name: this.providerConfig.name,
|
|
169
|
+
type: this.providerConfig.type,
|
|
170
|
+
connect: () => {
|
|
171
|
+
const provider = this.url.startsWith("ws")
|
|
172
|
+
? new ethers.WebSocketProvider(this.url)
|
|
173
|
+
: new ethers.JsonRpcProvider(this.url);
|
|
174
|
+
return new Wallet(this.privateKey, provider);
|
|
175
|
+
},
|
|
176
|
+
};
|
|
177
|
+
}
|
|
178
|
+
createViem() {
|
|
179
|
+
debug(`🟢 Viem omni provider ${this.providerConfig.name} details prepared`);
|
|
180
|
+
return {
|
|
181
|
+
name: this.providerConfig.name,
|
|
182
|
+
type: this.providerConfig.type,
|
|
183
|
+
connect: async () => {
|
|
184
|
+
try {
|
|
185
|
+
debug(`Original URL (this.url): ${this.url}`);
|
|
186
|
+
const httpUrl = normalizeUrlToHttps(this.url);
|
|
187
|
+
debug(`Converted HTTP URL: ${httpUrl} for provider ${this.providerConfig.name}`);
|
|
188
|
+
debug(`🔌 Attempting to derive chain for viem provider ${this.providerConfig.name} from ${httpUrl}`);
|
|
189
|
+
const chain = await deriveViemChain(httpUrl);
|
|
190
|
+
const client = createWalletClient({
|
|
191
|
+
chain,
|
|
192
|
+
account: privateKeyToAccount(this.privateKey),
|
|
193
|
+
transport: http(httpUrl),
|
|
194
|
+
}).extend(publicActions);
|
|
195
|
+
return client;
|
|
196
|
+
}
|
|
197
|
+
catch (error) {
|
|
198
|
+
console.error(`❌ Failed to create viem provider ${this.providerConfig.name} at ${this.url}: ${error.message}`);
|
|
199
|
+
throw new Error(`Viem provider initialization failed for ${this.providerConfig.name} at ${this.url}: ${error.message}`);
|
|
200
|
+
}
|
|
201
|
+
},
|
|
202
|
+
};
|
|
203
|
+
}
|
|
204
|
+
createPapi() {
|
|
205
|
+
debug(`🟢 Papi provider ${this.providerConfig.name} details prepared`);
|
|
206
|
+
return {
|
|
207
|
+
name: this.providerConfig.name,
|
|
208
|
+
type: this.providerConfig.type,
|
|
209
|
+
connect: () => {
|
|
210
|
+
// Dev nodes in moonwall often sit idle between manual block builds, which means
|
|
211
|
+
// the default 40s websocket heartbeat in polkadot-api can trigger false
|
|
212
|
+
// disconnects. Relax the heartbeat so the connection remains up while the
|
|
213
|
+
// test orchestrator drives block production.
|
|
214
|
+
const provider = withPolkadotSdkCompat(getWsProvider(this.url, {}));
|
|
215
|
+
return createClient(provider);
|
|
216
|
+
},
|
|
217
|
+
};
|
|
218
|
+
}
|
|
219
|
+
createDefault() {
|
|
220
|
+
debug(`🟢 Default provider ${this.providerConfig.name} details prepared`);
|
|
221
|
+
return {
|
|
222
|
+
name: this.providerConfig.name,
|
|
223
|
+
type: this.providerConfig.type,
|
|
224
|
+
connect: () => {
|
|
225
|
+
console.log(`🚧 provider ${this.providerConfig.name} not yet implemented`);
|
|
226
|
+
return null;
|
|
227
|
+
},
|
|
228
|
+
};
|
|
229
|
+
}
|
|
230
|
+
static prepare(providerConfigs) {
|
|
231
|
+
return providerConfigs.map((providerConfig) => new ProviderFactory(providerConfig).create());
|
|
232
|
+
}
|
|
233
|
+
static prepareDefaultDev() {
|
|
234
|
+
return ProviderFactory.prepare([
|
|
235
|
+
{
|
|
236
|
+
name: "dev",
|
|
237
|
+
type: "polkadotJs",
|
|
238
|
+
endpoints: [vitestAutoUrl()],
|
|
239
|
+
},
|
|
240
|
+
{
|
|
241
|
+
name: "w3",
|
|
242
|
+
type: "web3",
|
|
243
|
+
endpoints: [vitestAutoUrl()],
|
|
244
|
+
},
|
|
245
|
+
{
|
|
246
|
+
name: "eth",
|
|
247
|
+
type: "ethers",
|
|
248
|
+
endpoints: [vitestAutoUrl()],
|
|
249
|
+
},
|
|
250
|
+
{
|
|
251
|
+
name: "public",
|
|
252
|
+
type: "viem",
|
|
253
|
+
endpoints: [vitestAutoUrl()],
|
|
254
|
+
},
|
|
255
|
+
]);
|
|
256
|
+
}
|
|
257
|
+
static prepareDefaultZombie() {
|
|
258
|
+
const MOON_PARA_WSS = process.env.MOON_PARA_WSS || "error";
|
|
259
|
+
const MOON_RELAY_WSS = process.env.MOON_RELAY_WSS || "error";
|
|
260
|
+
const providers = [
|
|
261
|
+
{
|
|
262
|
+
name: "w3",
|
|
263
|
+
type: "web3",
|
|
264
|
+
endpoints: [MOON_PARA_WSS],
|
|
265
|
+
},
|
|
266
|
+
{
|
|
267
|
+
name: "eth",
|
|
268
|
+
type: "ethers",
|
|
269
|
+
endpoints: [MOON_PARA_WSS],
|
|
270
|
+
},
|
|
271
|
+
{
|
|
272
|
+
name: "viem",
|
|
273
|
+
type: "viem",
|
|
274
|
+
endpoints: [MOON_PARA_WSS],
|
|
275
|
+
},
|
|
276
|
+
{
|
|
277
|
+
name: "relaychain",
|
|
278
|
+
type: "polkadotJs",
|
|
279
|
+
endpoints: [MOON_RELAY_WSS],
|
|
280
|
+
},
|
|
281
|
+
];
|
|
282
|
+
if (MOON_PARA_WSS !== "error") {
|
|
283
|
+
providers.push({
|
|
284
|
+
name: "parachain",
|
|
285
|
+
type: "polkadotJs",
|
|
286
|
+
endpoints: [MOON_PARA_WSS],
|
|
287
|
+
});
|
|
288
|
+
}
|
|
289
|
+
return ProviderFactory.prepare(providers);
|
|
290
|
+
}
|
|
291
|
+
static prepareNoEthDefaultZombie() {
|
|
292
|
+
const MOON_PARA_WSS = process.env.MOON_PARA_WSS || "error";
|
|
293
|
+
const MOON_RELAY_WSS = process.env.MOON_RELAY_WSS || "error";
|
|
294
|
+
const providers = [
|
|
295
|
+
{
|
|
296
|
+
name: "relaychain",
|
|
297
|
+
type: "polkadotJs",
|
|
298
|
+
endpoints: [MOON_RELAY_WSS],
|
|
299
|
+
},
|
|
300
|
+
];
|
|
301
|
+
if (MOON_PARA_WSS !== "error") {
|
|
302
|
+
providers.push({
|
|
303
|
+
name: "parachain",
|
|
304
|
+
type: "polkadotJs",
|
|
305
|
+
endpoints: [MOON_PARA_WSS],
|
|
306
|
+
});
|
|
307
|
+
}
|
|
308
|
+
return ProviderFactory.prepare(providers);
|
|
309
|
+
}
|
|
310
|
+
}
|
|
311
|
+
export class ProviderInterfaceFactory {
|
|
312
|
+
name;
|
|
313
|
+
type;
|
|
314
|
+
connect;
|
|
315
|
+
constructor(name, type, connect) {
|
|
316
|
+
this.name = name;
|
|
317
|
+
this.type = type;
|
|
318
|
+
this.connect = connect;
|
|
319
|
+
}
|
|
320
|
+
async create() {
|
|
321
|
+
switch (this.type) {
|
|
322
|
+
case "polkadotJs":
|
|
323
|
+
return this.createPolkadotJs();
|
|
324
|
+
case "web3":
|
|
325
|
+
return this.createWeb3();
|
|
326
|
+
case "ethers":
|
|
327
|
+
return this.createEthers();
|
|
328
|
+
case "viem":
|
|
329
|
+
return this.createViem();
|
|
330
|
+
case "papi":
|
|
331
|
+
return this.createPapi();
|
|
332
|
+
default:
|
|
333
|
+
throw new Error("UNKNOWN TYPE");
|
|
334
|
+
}
|
|
335
|
+
}
|
|
336
|
+
async createPolkadotJs() {
|
|
337
|
+
debug(`🔌 Connecting PolkadotJs provider: ${this.name}`);
|
|
338
|
+
const api = (await this.connect());
|
|
339
|
+
debug(`✅ PolkadotJs provider ${this.name} connected`);
|
|
340
|
+
1;
|
|
341
|
+
return {
|
|
342
|
+
name: this.name,
|
|
343
|
+
api,
|
|
344
|
+
type: "polkadotJs",
|
|
345
|
+
greet: async () => {
|
|
346
|
+
debug(`👋 Provider ${this.name} is connected to chain` +
|
|
347
|
+
` ${api.consts.system.version.specName.toString()} ` +
|
|
348
|
+
`RT${api.consts.system.version.specVersion.toNumber()}`);
|
|
349
|
+
return {
|
|
350
|
+
rtVersion: api.consts.system.version.specVersion.toNumber(),
|
|
351
|
+
rtName: api.consts.system.version.specName.toString(),
|
|
352
|
+
};
|
|
353
|
+
},
|
|
354
|
+
disconnect: async () => api.disconnect(),
|
|
355
|
+
};
|
|
356
|
+
}
|
|
357
|
+
async createWeb3() {
|
|
358
|
+
const api = (await this.connect());
|
|
359
|
+
return {
|
|
360
|
+
name: this.name,
|
|
361
|
+
api,
|
|
362
|
+
type: "web3",
|
|
363
|
+
greet: async () => console.log(`👋 Provider ${this.name} is connected to chain ${await api.eth.getChainId()}`),
|
|
364
|
+
disconnect: async () => {
|
|
365
|
+
if (!api.eth.net.currentProvider) {
|
|
366
|
+
throw new Error("No connected web3 provider to disconnect from");
|
|
367
|
+
}
|
|
368
|
+
api.eth.net.currentProvider.disconnect();
|
|
369
|
+
},
|
|
370
|
+
};
|
|
371
|
+
}
|
|
372
|
+
async createEthers() {
|
|
373
|
+
const api = (await this.connect());
|
|
374
|
+
return {
|
|
375
|
+
name: this.name,
|
|
376
|
+
api,
|
|
377
|
+
type: "ethers",
|
|
378
|
+
greet: async () => {
|
|
379
|
+
if (!api.provider) {
|
|
380
|
+
throw new Error("No connected ethers provider to greet with");
|
|
381
|
+
}
|
|
382
|
+
debug(`👋 Provider ${this.name} is connected to chain ${(await api.provider.getNetwork()).chainId}`);
|
|
383
|
+
},
|
|
384
|
+
disconnect: () => {
|
|
385
|
+
if (!api.provider) {
|
|
386
|
+
throw new Error("No connected ethers provider to disconnect from");
|
|
387
|
+
}
|
|
388
|
+
api.provider.destroy();
|
|
389
|
+
},
|
|
390
|
+
};
|
|
391
|
+
}
|
|
392
|
+
async createViem() {
|
|
393
|
+
const api = (await this.connect());
|
|
394
|
+
return {
|
|
395
|
+
name: this.name,
|
|
396
|
+
api,
|
|
397
|
+
type: "viem",
|
|
398
|
+
greet: async () => console.log(`👋 Provider ${this.name} is connected to chain ${await api.getChainId()}`),
|
|
399
|
+
disconnect: async () => {
|
|
400
|
+
// Not needed until we switch to websockets
|
|
401
|
+
},
|
|
402
|
+
};
|
|
403
|
+
}
|
|
404
|
+
async createPapi() {
|
|
405
|
+
const api = (await this.connect());
|
|
406
|
+
return {
|
|
407
|
+
name: this.name,
|
|
408
|
+
api,
|
|
409
|
+
type: "papi",
|
|
410
|
+
greet: async () => {
|
|
411
|
+
const unsafeApi = await api.getUnsafeApi();
|
|
412
|
+
const { spec_version, spec_name } = await unsafeApi.constants.System.Version();
|
|
413
|
+
return { rtVersion: spec_version, rtName: spec_name };
|
|
414
|
+
},
|
|
415
|
+
async disconnect() {
|
|
416
|
+
api.destroy();
|
|
417
|
+
},
|
|
418
|
+
};
|
|
419
|
+
}
|
|
420
|
+
static async populate(name, type, connect) {
|
|
421
|
+
debug(`🔄 Populating provider: ${name} of type: ${type}`);
|
|
422
|
+
try {
|
|
423
|
+
const providerInterface = await new ProviderInterfaceFactory(name, type, connect).create();
|
|
424
|
+
debug(`✅ Successfully populated provider: ${name}`);
|
|
425
|
+
return providerInterface;
|
|
426
|
+
}
|
|
427
|
+
catch (error) {
|
|
428
|
+
if (error instanceof Error) {
|
|
429
|
+
console.error(`❌ Failed to populate provider: ${name} - ${error.message}`);
|
|
430
|
+
}
|
|
431
|
+
else {
|
|
432
|
+
console.error(`❌ Failed to populate provider: ${name} - Unknown error`);
|
|
433
|
+
}
|
|
434
|
+
throw error;
|
|
435
|
+
}
|
|
436
|
+
}
|
|
437
|
+
}
|
|
438
|
+
export const vitestAutoUrl = () => {
|
|
439
|
+
const url = `ws://127.0.0.1:${process.env.MOONWALL_RPC_PORT}`;
|
|
440
|
+
debug(`vitestAutoUrl - MOONWALL_RPC_PORT=${process.env.MOONWALL_RPC_PORT}, Generated URL: ${url}`);
|
|
441
|
+
return url;
|
|
442
|
+
};
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
export interface TestIds {
|
|
2
|
+
suiteId: string | undefined;
|
|
3
|
+
testIds: string[];
|
|
4
|
+
}
|
|
5
|
+
/**
|
|
6
|
+
* Extracts suite and test IDs from a Moonwall test file using AST parsing.
|
|
7
|
+
* This is more robust than regex as it handles comments, multiline formatting, etc.
|
|
8
|
+
*/
|
|
9
|
+
export declare function extractTestIds(fileContent: string): TestIds;
|
|
10
|
+
/**
|
|
11
|
+
* Replaces the suite ID in a Moonwall test file.
|
|
12
|
+
* Returns the modified file content, or undefined if no describeSuite was found.
|
|
13
|
+
*/
|
|
14
|
+
export declare function replaceSuiteId(fileContent: string, newId: string): string | undefined;
|
|
15
|
+
/**
|
|
16
|
+
* Checks if a file contains a describeSuite call (is a Moonwall test file).
|
|
17
|
+
*/
|
|
18
|
+
export declare function hasSuiteDefinition(fileContent: string): boolean;
|
|
19
|
+
export interface MatchedTestFile {
|
|
20
|
+
filePath: string;
|
|
21
|
+
suiteId: string;
|
|
22
|
+
testIds: string[];
|
|
23
|
+
}
|
|
24
|
+
/**
|
|
25
|
+
* Finds all test files matching the pattern using ast-grep's parallel file search.
|
|
26
|
+
* Uses Rust threads for efficient parsing and searching.
|
|
27
|
+
*
|
|
28
|
+
* @param testDirs - Directories to search for test files
|
|
29
|
+
* @param includeGlobs - Glob patterns for files to include (e.g., ["*test*.ts", "*spec*.ts"])
|
|
30
|
+
* @param idPattern - Regex pattern to match against suite/test IDs
|
|
31
|
+
* @returns Promise resolving to array of matching file paths
|
|
32
|
+
*/
|
|
33
|
+
export declare function findTestFilesMatchingPattern(testDirs: string[], includeGlobs: string[], idPattern: RegExp): Promise<string[]>;
|
|
34
|
+
//# sourceMappingURL=testIdParser.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"testIdParser.d.ts","sourceRoot":"","sources":["../../../src/cli/internal/testIdParser.ts"],"names":[],"mappings":"AAEA,MAAM,WAAW,OAAO;IACtB,OAAO,EAAE,MAAM,GAAG,SAAS,CAAC;IAC5B,OAAO,EAAE,MAAM,EAAE,CAAC;CACnB;AAoCD;;;GAGG;AACH,wBAAgB,cAAc,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CA8B3D;AAED;;;GAGG;AACH,wBAAgB,cAAc,CAAC,WAAW,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CA6BrF;AAED;;GAEG;AACH,wBAAgB,kBAAkB,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAI/D;AAED,MAAM,WAAW,eAAe;IAC9B,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,EAAE,CAAC;CACnB;AAED;;;;;;;;GAQG;AACH,wBAAsB,4BAA4B,CAChD,QAAQ,EAAE,MAAM,EAAE,EAClB,YAAY,EAAE,MAAM,EAAE,EACtB,SAAS,EAAE,MAAM,GAChB,OAAO,CAAC,MAAM,EAAE,CAAC,CAmEnB"}
|