From 5ef2fe964ce6d988238712a1f97968008fc4075f Mon Sep 17 00:00:00 2001 From: Krak Date: Wed, 20 Aug 2025 14:37:23 -0700 Subject: [PATCH] feat: add solidity docgen --- DOCGEN_SETUP.md | 258 +++++ README_BONADOCS.md | 76 ++ docgen-out/README.md | 113 ++ docgen-out/contract-inventory.json | 416 ++++++++ package.json | 5 +- packages/docgen-devtools/README.md | 96 ++ packages/docgen-devtools/package.json | 50 + packages/docgen-devtools/src/cli.ts | 108 ++ .../docgen-devtools/src/core/abi-extractor.ts | 201 ++++ .../src/core/contract-collector.ts | 168 +++ .../docgen-devtools/src/core/doc-generator.ts | 248 +++++ .../src/core/package-detector.ts | 143 +++ packages/docgen-devtools/src/index.ts | 8 + .../docgen-devtools/templates/contract.hbs | 170 +++ .../docgen-devtools/templates/helpers.hbs | 36 + packages/docgen-devtools/templates/index.hbs | 32 + packages/docgen-devtools/tsconfig.json | 8 + packages/docgen-devtools/tsup.config.ts | 12 + packages/hyperliquid-composer/package.json | 4 +- packages/oapp-alt-evm/package.json | 9 +- packages/oapp-evm-upgradeable/package.json | 9 +- packages/oapp-evm/package.json | 12 +- packages/oft-alt-evm/package.json | 6 +- packages/oft-evm-upgradeable/package.json | 4 + packages/oft-evm/package.json | 4 + packages/onft-evm/package.json | 4 + packages/ovault-evm/package.json | 4 + .../test-devtools-evm-foundry/package.json | 4 + pnpm-lock.yaml | 974 +++++++++++++----- 29 files changed, 2927 insertions(+), 255 deletions(-) create mode 100644 DOCGEN_SETUP.md create mode 100644 README_BONADOCS.md create mode 100644 docgen-out/README.md create mode 100644 docgen-out/contract-inventory.json create mode 100644 packages/docgen-devtools/README.md create mode 100644 packages/docgen-devtools/package.json create mode 100644 packages/docgen-devtools/src/cli.ts create mode 100644 packages/docgen-devtools/src/core/abi-extractor.ts create mode 100644 packages/docgen-devtools/src/core/contract-collector.ts create mode 100644 packages/docgen-devtools/src/core/doc-generator.ts create mode 100644 packages/docgen-devtools/src/core/package-detector.ts create mode 100644 packages/docgen-devtools/src/index.ts create mode 100644 packages/docgen-devtools/templates/contract.hbs create mode 100644 packages/docgen-devtools/templates/helpers.hbs create mode 100644 packages/docgen-devtools/templates/index.hbs create mode 100644 packages/docgen-devtools/tsconfig.json create mode 100644 packages/docgen-devtools/tsup.config.ts diff --git a/DOCGEN_SETUP.md b/DOCGEN_SETUP.md new file mode 100644 index 0000000000..8c95278f09 --- /dev/null +++ b/DOCGEN_SETUP.md @@ -0,0 +1,258 @@ +# LayerZero Contract Documentation Generation + +This document describes the contract documentation generation system for the LayerZero devtools monorepo. + +## Overview + +The documentation generation system is implemented as a proper TypeScript package (`@layerzerolabs/docgen-devtools`) that: +- Automatically detects EVM contract packages in the monorepo +- Uses Bonadocs to generate beautiful, interactive documentation +- Follows the monorepo's TypeScript conventions and best practices +- Provides both CLI and programmatic interfaces + +## Architecture + +``` +packages/docgen-devtools/ +├── src/ +│ ├── core/ +│ │ ├── package-detector.ts # Detects EVM contract packages +│ │ ├── contract-collector.ts # Collects and categorizes contracts +│ │ └── doc-generator.ts # Generates documentation +│ ├── cli.ts # CLI interface +│ └── index.ts # Main exports +├── templates/ # Handlebars templates +│ ├── contract.hbs # Contract documentation template +│ ├── helpers.hbs # Template helpers +│ └── index.hbs # Index page template +└── package.json +``` + +## Installation + +The documentation tools are part of the monorepo. To set them up: + +```bash +# Install all dependencies +pnpm install + +# Build the documentation tools +pnpm --filter @layerzerolabs/docgen-devtools build +``` + +## Usage + +### From the Monorepo Root + +```bash +# Generate documentation for all detected contract packages +pnpm docgen + +# The above command runs: +# 1. Builds the docgen-devtools package +# 2. Executes the lz-docgen CLI +``` + +### Using the CLI Directly + +```bash +# After building the package +lz-docgen # Generate docs for all packages +lz-docgen oft-evm # Generate docs for a specific package +``` + +### Programmatic Usage + +```typescript +import { + detectContractPackages, + collectContracts, + generateAllDocs +} from '@layerzerolabs/docgen-devtools' + +// Detect all EVM contract packages +const packages = detectContractPackages() + +// Collect contract information +const { inventory } = collectContracts() + +// Generate documentation +await generateAllDocs(packages, { + rootDir: process.cwd(), + outputDir: './docgen-out', + templatesDir: path.join(__dirname, 'templates') +}) +``` + +## Package Detection + +The system automatically detects EVM contract packages by checking for: + +1. **Contracts directory**: `contracts/` folder with `.sol` files +2. **Foundry configuration**: Presence of `foundry.toml` +3. **Package naming**: Names containing "evm" +4. **Dependencies**: Solidity-related dependencies like OpenZeppelin +5. **LayerZero contracts**: Dependencies on LayerZero protocol packages + +The following packages are automatically excluded: +- Test helper packages (containing `test-devtools` in the name) +- Toolbox packages +- Packages with "test" or "helper" in their description + +### Currently Detected Packages + +The following types of packages are automatically detected: +- `oapp-evm` - OApp standard contracts +- `oft-evm` - OFT token contracts +- `onft-evm` - ONFT NFT contracts +- `ovault-evm` - Vault composer contracts +- `hyperliquid-composer` - Hyperliquid integration +- And other EVM contract packages following similar patterns + +## Output Structure + +Documentation is generated in the `docgen-out/` directory: + +``` +docgen-out/ +├── README.md # Overview with statistics +├── contract-inventory.json # Complete inventory of all contracts +├── oft-evm/ # Package-specific documentation +│ ├── IOFT.md # Interface documentation +│ ├── OFT.md # Implementation documentation +│ └── ... +├── oapp-evm/ +│ ├── IOApp.md +│ ├── OApp.md +│ └── ... +└── ... +``` + +## Documentation Format + +The generated documentation follows a "protobuf-style" format including: + +- **Function Documentation**: + - Signature with selector + - Input parameters table + - Output parameters table + - State mutability + - NatSpec comments + +- **Events**: Complete event signatures with indexed parameters +- **Errors**: Custom error definitions +- **Inheritance**: Contract inheritance hierarchy +- **ABI Links**: Downloadable ABI files + +## Templates + +Documentation templates use Handlebars and are located in `packages/docgen-devtools/templates/`: + +- `contract.hbs` - Main contract documentation template +- `helpers.hbs` - Reusable template helpers +- `index.hbs` - Index page for navigation + +### Customizing Templates + +To modify the documentation format, edit the templates in the package. The templates support: +- Handlebars expressions and helpers +- Conditional rendering +- Iteration over contract elements +- Custom formatting functions + +## Key Features + +### Automatic Dependency Resolution +- Detects and imports Foundry remappings into Hardhat configuration +- Installs required dependencies like `solidity-bytes-utils` automatically +- Handles complex monorepo dependency chains + +### ESM/CommonJS Compatibility +- Automatically detects if a package uses ESM (`"type": "module"`) +- Generates appropriate config file extension (`.js` or `.cjs`) +- Ensures compatibility across different package configurations + +### Clean Logging +- Uses LayerZero's standard logging infrastructure via `@layerzerolabs/io-devtools` +- Provides clear, consistent output with proper log levels +- No random console.log statements + +## Development + +### Building the Package + +```bash +# One-time build +pnpm --filter @layerzerolabs/docgen-devtools build + +# Watch mode for development +pnpm --filter @layerzerolabs/docgen-devtools dev +``` + +### Adding New Contract Packages + +The system automatically detects new contract packages that follow the conventions. To ensure your package is detected: + +1. Place contracts in a `contracts/` directory +2. Include a `foundry.toml` configuration +3. Follow the naming convention (include "evm" for EVM packages) + +### Debugging + +To see which packages are being detected: + +```bash +# Run the CLI with Node debugging +node packages/docgen-devtools/dist/cli.js +``` + +The output will show: +- Number of detected packages +- Package names and descriptions +- Processing status for each package + +## Integration with Docusaurus + +After generating documentation: + +1. Review the output in `docgen-out/` +2. Copy the contents to your Docusaurus `docs/reference/contracts/` directory +3. Update the Docusaurus sidebar configuration to include the new sections + +## Troubleshooting + +### No Packages Detected + +- Ensure you're running from the monorepo root +- Check that contract packages have a `contracts/` directory +- Verify packages have `.sol` files (excluding mocks/tests) + +### Build Errors + +- Run `pnpm install` to ensure all dependencies are installed +- Check that TypeScript version matches the monorepo requirements +- Ensure `@bonadocs/docgen` is compatible with your Hardhat version + +### Template Errors + +- Check Handlebars syntax in template files +- Ensure all referenced helpers are defined +- Verify template paths are correct + +## Best Practices + +1. **Keep Templates Simple**: Focus on clarity and usability +2. **Exclude Test Files**: The system automatically excludes Mock*, Test*, and Harness* files +3. **Test Package Exclusion**: Test helper packages (like test-devtools-*) are automatically excluded +4. **Regular Updates**: Regenerate docs when contracts change +5. **Version Control**: Consider versioning generated documentation +6. **Clean Dependencies**: Temporary dependencies are installed per package and cleaned up automatically + +## Future Enhancements + +Potential improvements to consider: +- GitHub Action for automatic PR creation +- Incremental documentation updates +- Cross-reference linking between contracts +- Search functionality integration +- Version comparison tools diff --git a/README_BONADOCS.md b/README_BONADOCS.md new file mode 100644 index 0000000000..b2c86fd9be --- /dev/null +++ b/README_BONADOCS.md @@ -0,0 +1,76 @@ +# Contract Documentation Generation for LayerZero Devtools + +## Quick Start + +Generate documentation for all contract packages: + +```bash +# Using the npm script +pnpm docgen + +# Or directly after building +pnpm --filter @layerzerolabs/docgen-devtools build +lz-docgen +``` + +Generate documentation for a specific package: + +```bash +lz-docgen oft-evm +``` + +## What's Included + +### Package Structure: +- `packages/docgen-devtools/` - Documentation generation package + - `src/core/` - Core functionality (detection, collection, generation, ABI extraction) + - `src/cli.ts` - Command-line interface + - `templates/` - Handlebars documentation templates +- `DOCGEN_SETUP.md` - Detailed setup and architecture guide + +### Output: +- `docgen-out/` - Generated documentation directory + - `[package-name]/docs/` - Contract documentation in Markdown + - `[package-name]/abis/` - Contract ABIs in JSON format + - `interfaces/` - Interface ABIs + - `implementations/` - Implementation ABIs + - `libraries/` - Library ABIs + - `index.json` - ABI index with categorized contract list + - `README.md` - ABI usage guide +- `contract-inventory.json` - List of all contracts found + +## Features + +The documentation includes: +- Function signatures with selectors +- Protobuf-style input/output parameter tables +- Event documentation with indexed parameters +- Custom error documentation +- Struct definitions +- ABI download links +- Contract categorization (Interfaces, OApp, Tokens, etc.) +- Extracted ABIs organized by contract type (interfaces, implementations, libraries) +- ABI index files for programmatic access + +## Usage + +1. Run `pnpm docgen` to generate docs +2. Copy `docgen-out/` to your Docusaurus docs repository +3. Configure Docusaurus sidebar to include the contract reference + +For detailed instructions, see `DOCGEN_SETUP.md`. + +## Contract Packages Documented + +- `oapp-evm` - OApp standard contracts +- `oft-evm` - OFT token contracts +- `onft-evm` - ONFT NFT contracts +- `ovault-evm` - Vault composer contracts +- `hyperliquid-composer` - Hyperliquid integration contracts + +## Notes + +- Mock and test contracts are automatically excluded +- Each package is processed independently to avoid dependency conflicts +- Documentation is generated in Markdown format compatible with Docusaurus +- Templates follow the "protobuf-style" format based on user feedback diff --git a/docgen-out/README.md b/docgen-out/README.md new file mode 100644 index 0000000000..9a2083914a --- /dev/null +++ b/docgen-out/README.md @@ -0,0 +1,113 @@ +# LayerZero Protocol Contracts + +This documentation provides a comprehensive reference for all LayerZero protocol contracts. + +## Detected Packages + +The following EVM contract packages were automatically detected and documented: + +- **hyperliquid-composer** - LayerZero Labs reference EVM OmniChain Fungible Token (OFT) implementation for Hyperliquid +- **oapp-alt-evm** - LayerZero Labs reference EVM OmniChain Application (OAppAlt) for EndpointV2Alt implementation +- **oapp-evm** - LayerZero Labs reference EVM OmniChain Application (OApp) implementation +- **oapp-evm-upgradeable** - LayerZero Labs reference EVM OmniChain Application (OApp) implementation +- **oft-alt-evm** - LayerZero Labs reference EVM OmniChain Fungible Token (OFT) implementation +- **oft-evm** - LayerZero Labs reference EVM OmniChain Fungible Token (OFT) implementation +- **oft-evm-upgradeable** - LayerZero Labs reference EVM OmniChain Fungible Token (OFT) implementation +- **onft-evm** - LayerZero Labs reference EVM OmniChain Non Fungible Token (ONFT) implementation +- **ovault-evm** - LayerZero Labs reference EVM OVault + composer implementation + +## Contract Categories + +### Core Interfaces +- **ICoreWriter** (hyperliquid-composer) +- **IHYPEPrecompile** (hyperliquid-composer) +- **IHyperLiquidComposerCore** (hyperliquid-composer) +- **IHyperLiquidComposerErrors** (hyperliquid-composer) +- **IHyperLiquidReadPrecompile** (hyperliquid-composer) +- **IPreCrime** (oapp-evm) +- **IFee** (oft-evm) +- **IMintableBurnable** (oft-evm) +- **IVaultComposerSync** (ovault-evm) + +### OApp Standard +- **IOAppComposer** (oapp-evm) +- **IOAppCore** (oapp-evm) +- **IOAppMapper** (oapp-evm) +- **IOAppMsgInspector** (oapp-evm) +- **IOAppOptionsType3** (oapp-evm) +- **IOAppReceiver** (oapp-evm) +- **IOAppReducer** (oapp-evm) +- **IOAppPreCrimeSimulator** (oapp-evm) + +### Token Standards (OFT/ONFT) +- **IOFT** (oft-evm) +- **IONFT721** (onft-evm) + +### Implementations +- **HyperLiquidComposer** (hyperliquid-composer) +- **HyperLiquidComposerCore** (hyperliquid-composer) +- **OAppAlt** (oapp-alt-evm) +- **OAppSenderAlt** (oapp-alt-evm) +- **OApp** (oapp-evm) +- **OAppCore** (oapp-evm) +- **OAppRead** (oapp-evm) +- **OAppReceiver** (oapp-evm) +- **OAppSender** (oapp-evm) +- **OAppOptionsType3** (oapp-evm) +- **RateLimiter** (oapp-evm) +- **OAppPreCrimeSimulator** (oapp-evm) +- **PreCrime** (oapp-evm) +- **OAppCoreUpgradeable** (oapp-evm-upgradeable) +- **OAppReceiverUpgradeable** (oapp-evm-upgradeable) +- **OAppSenderUpgradeable** (oapp-evm-upgradeable) +- **OAppUpgradeable** (oapp-evm-upgradeable) +- **OAppOptionsType3Upgradeable** (oapp-evm-upgradeable) +- **OAppPreCrimeSimulatorUpgradeable** (oapp-evm-upgradeable) +- **PreCrimeUpgradeable** (oapp-evm-upgradeable) +- **PreCrimeE1Upgradeable** (oapp-evm-upgradeable) +- **OFTAdapterAlt** (oft-alt-evm) +- **OFTAlt** (oft-alt-evm) +- **OFTAltCore** (oft-alt-evm) +- **Fee** (oft-evm) +- **MintBurnOFTAdapter** (oft-evm) +- **NativeOFTAdapter** (oft-evm) +- **OFT** (oft-evm) +- **OFTAdapter** (oft-evm) +- **OFTCore** (oft-evm) +- **FeeUpgradeable** (oft-evm-upgradeable) +- **OFTAdapterFeeUpgradeable** (oft-evm-upgradeable) +- **OFTAdapterUpgradeable** (oft-evm-upgradeable) +- **OFTCoreUpgradeable** (oft-evm-upgradeable) +- **OFTFeeUpgradeable** (oft-evm-upgradeable) +- **OFTUpgradeable** (oft-evm-upgradeable) +- **ONFT721** (onft-evm) +- **ONFT721Adapter** (onft-evm) +- **ONFT721Core** (onft-evm) +- **ONFT721Enumerable** (onft-evm) +- **VaultComposerSync** (ovault-evm) + +### Libraries +- **HyperLiquidComposerCodec** (hyperliquid-composer) +- **OptionsBuilder** (oapp-evm) +- **ReadCodecV1** (oapp-evm) +- **Packet** (oapp-evm) +- **OFTComposeMsgCodec** (oft-evm) +- **OFTMsgCodec** (oft-evm) +- **ONFTComposeMsgCodec** (onft-evm) +- **ONFT721MsgCodec** (onft-evm) + +## Package Statistics + +- **hyperliquid-composer**: 8 total (5 interfaces, 2 contracts, 1 libraries) +- **oapp-alt-evm**: 2 total (0 interfaces, 2 contracts, 0 libraries) +- **oapp-evm**: 21 total (9 interfaces, 9 contracts, 3 libraries) +- **oapp-evm-upgradeable**: 8 total (0 interfaces, 8 contracts, 0 libraries) +- **oft-alt-evm**: 3 total (0 interfaces, 3 contracts, 0 libraries) +- **oft-evm**: 11 total (3 interfaces, 6 contracts, 2 libraries) +- **oft-evm-upgradeable**: 6 total (0 interfaces, 6 contracts, 0 libraries) +- **onft-evm**: 7 total (1 interfaces, 4 contracts, 2 libraries) +- **ovault-evm**: 2 total (1 interfaces, 1 contracts, 0 libraries) + +--- + +*Generated on 2025-08-16T17:43:03.988Z* diff --git a/docgen-out/contract-inventory.json b/docgen-out/contract-inventory.json new file mode 100644 index 0000000000..54a763e97d --- /dev/null +++ b/docgen-out/contract-inventory.json @@ -0,0 +1,416 @@ +{ + "contracts": { + "HyperLiquidComposer": { + "package": "hyperliquid-composer", + "packageName": "@layerzerolabs/hyperliquid-composer", + "path": "HyperLiquidComposer.sol", + "fullPath": "packages/hyperliquid-composer/contracts/HyperLiquidComposer.sol" + }, + "HyperLiquidComposerCore": { + "package": "hyperliquid-composer", + "packageName": "@layerzerolabs/hyperliquid-composer", + "path": "HyperLiquidComposerCore.sol", + "fullPath": "packages/hyperliquid-composer/contracts/HyperLiquidComposerCore.sol" + }, + "OAppAlt": { + "package": "oapp-alt-evm", + "packageName": "@layerzerolabs/oapp-alt-evm", + "path": "oapp/OAppAlt.sol", + "fullPath": "packages/oapp-alt-evm/contracts/oapp/OAppAlt.sol" + }, + "OAppSenderAlt": { + "package": "oapp-alt-evm", + "packageName": "@layerzerolabs/oapp-alt-evm", + "path": "oapp/OAppSenderAlt.sol", + "fullPath": "packages/oapp-alt-evm/contracts/oapp/OAppSenderAlt.sol" + }, + "OApp": { + "package": "oapp-evm", + "packageName": "@layerzerolabs/oapp-evm", + "path": "oapp/OApp.sol", + "fullPath": "packages/oapp-evm/contracts/oapp/OApp.sol" + }, + "OAppCore": { + "package": "oapp-evm", + "packageName": "@layerzerolabs/oapp-evm", + "path": "oapp/OAppCore.sol", + "fullPath": "packages/oapp-evm/contracts/oapp/OAppCore.sol" + }, + "OAppRead": { + "package": "oapp-evm", + "packageName": "@layerzerolabs/oapp-evm", + "path": "oapp/OAppRead.sol", + "fullPath": "packages/oapp-evm/contracts/oapp/OAppRead.sol" + }, + "OAppReceiver": { + "package": "oapp-evm", + "packageName": "@layerzerolabs/oapp-evm", + "path": "oapp/OAppReceiver.sol", + "fullPath": "packages/oapp-evm/contracts/oapp/OAppReceiver.sol" + }, + "OAppSender": { + "package": "oapp-evm", + "packageName": "@layerzerolabs/oapp-evm", + "path": "oapp/OAppSender.sol", + "fullPath": "packages/oapp-evm/contracts/oapp/OAppSender.sol" + }, + "OAppOptionsType3": { + "package": "oapp-evm", + "packageName": "@layerzerolabs/oapp-evm", + "path": "oapp/libs/OAppOptionsType3.sol", + "fullPath": "packages/oapp-evm/contracts/oapp/libs/OAppOptionsType3.sol" + }, + "RateLimiter": { + "package": "oapp-evm", + "packageName": "@layerzerolabs/oapp-evm", + "path": "oapp/utils/RateLimiter.sol", + "fullPath": "packages/oapp-evm/contracts/oapp/utils/RateLimiter.sol" + }, + "OAppPreCrimeSimulator": { + "package": "oapp-evm", + "packageName": "@layerzerolabs/oapp-evm", + "path": "precrime/OAppPreCrimeSimulator.sol", + "fullPath": "packages/oapp-evm/contracts/precrime/OAppPreCrimeSimulator.sol" + }, + "PreCrime": { + "package": "oapp-evm", + "packageName": "@layerzerolabs/oapp-evm", + "path": "precrime/PreCrime.sol", + "fullPath": "packages/oapp-evm/contracts/precrime/PreCrime.sol" + }, + "OAppCoreUpgradeable": { + "package": "oapp-evm-upgradeable", + "packageName": "@layerzerolabs/oapp-evm-upgradeable", + "path": "oapp/OAppCoreUpgradeable.sol", + "fullPath": "packages/oapp-evm-upgradeable/contracts/oapp/OAppCoreUpgradeable.sol" + }, + "OAppReceiverUpgradeable": { + "package": "oapp-evm-upgradeable", + "packageName": "@layerzerolabs/oapp-evm-upgradeable", + "path": "oapp/OAppReceiverUpgradeable.sol", + "fullPath": "packages/oapp-evm-upgradeable/contracts/oapp/OAppReceiverUpgradeable.sol" + }, + "OAppSenderUpgradeable": { + "package": "oapp-evm-upgradeable", + "packageName": "@layerzerolabs/oapp-evm-upgradeable", + "path": "oapp/OAppSenderUpgradeable.sol", + "fullPath": "packages/oapp-evm-upgradeable/contracts/oapp/OAppSenderUpgradeable.sol" + }, + "OAppUpgradeable": { + "package": "oapp-evm-upgradeable", + "packageName": "@layerzerolabs/oapp-evm-upgradeable", + "path": "oapp/OAppUpgradeable.sol", + "fullPath": "packages/oapp-evm-upgradeable/contracts/oapp/OAppUpgradeable.sol" + }, + "OAppOptionsType3Upgradeable": { + "package": "oapp-evm-upgradeable", + "packageName": "@layerzerolabs/oapp-evm-upgradeable", + "path": "oapp/libs/OAppOptionsType3Upgradeable.sol", + "fullPath": "packages/oapp-evm-upgradeable/contracts/oapp/libs/OAppOptionsType3Upgradeable.sol" + }, + "OAppPreCrimeSimulatorUpgradeable": { + "package": "oapp-evm-upgradeable", + "packageName": "@layerzerolabs/oapp-evm-upgradeable", + "path": "precrime/OAppPreCrimeSimulatorUpgradeable.sol", + "fullPath": "packages/oapp-evm-upgradeable/contracts/precrime/OAppPreCrimeSimulatorUpgradeable.sol" + }, + "PreCrimeUpgradeable": { + "package": "oapp-evm-upgradeable", + "packageName": "@layerzerolabs/oapp-evm-upgradeable", + "path": "precrime/PreCrimeUpgradeable.sol", + "fullPath": "packages/oapp-evm-upgradeable/contracts/precrime/PreCrimeUpgradeable.sol" + }, + "PreCrimeE1Upgradeable": { + "package": "oapp-evm-upgradeable", + "packageName": "@layerzerolabs/oapp-evm-upgradeable", + "path": "precrime/extensions/PreCrimeE1Upgradeable.sol", + "fullPath": "packages/oapp-evm-upgradeable/contracts/precrime/extensions/PreCrimeE1Upgradeable.sol" + }, + "OFTAdapterAlt": { + "package": "oft-alt-evm", + "packageName": "@layerzerolabs/oft-alt-evm", + "path": "OFTAdapterAlt.sol", + "fullPath": "packages/oft-alt-evm/contracts/OFTAdapterAlt.sol" + }, + "OFTAlt": { + "package": "oft-alt-evm", + "packageName": "@layerzerolabs/oft-alt-evm", + "path": "OFTAlt.sol", + "fullPath": "packages/oft-alt-evm/contracts/OFTAlt.sol" + }, + "OFTAltCore": { + "package": "oft-alt-evm", + "packageName": "@layerzerolabs/oft-alt-evm", + "path": "OFTAltCore.sol", + "fullPath": "packages/oft-alt-evm/contracts/OFTAltCore.sol" + }, + "Fee": { + "package": "oft-evm", + "packageName": "@layerzerolabs/oft-evm", + "path": "Fee.sol", + "fullPath": "packages/oft-evm/contracts/Fee.sol" + }, + "MintBurnOFTAdapter": { + "package": "oft-evm", + "packageName": "@layerzerolabs/oft-evm", + "path": "MintBurnOFTAdapter.sol", + "fullPath": "packages/oft-evm/contracts/MintBurnOFTAdapter.sol" + }, + "NativeOFTAdapter": { + "package": "oft-evm", + "packageName": "@layerzerolabs/oft-evm", + "path": "NativeOFTAdapter.sol", + "fullPath": "packages/oft-evm/contracts/NativeOFTAdapter.sol" + }, + "OFT": { + "package": "oft-evm", + "packageName": "@layerzerolabs/oft-evm", + "path": "OFT.sol", + "fullPath": "packages/oft-evm/contracts/OFT.sol" + }, + "OFTAdapter": { + "package": "oft-evm", + "packageName": "@layerzerolabs/oft-evm", + "path": "OFTAdapter.sol", + "fullPath": "packages/oft-evm/contracts/OFTAdapter.sol" + }, + "OFTCore": { + "package": "oft-evm", + "packageName": "@layerzerolabs/oft-evm", + "path": "OFTCore.sol", + "fullPath": "packages/oft-evm/contracts/OFTCore.sol" + }, + "FeeUpgradeable": { + "package": "oft-evm-upgradeable", + "packageName": "@layerzerolabs/oft-evm-upgradeable", + "path": "oft/FeeUpgradeable.sol", + "fullPath": "packages/oft-evm-upgradeable/contracts/oft/FeeUpgradeable.sol" + }, + "OFTAdapterFeeUpgradeable": { + "package": "oft-evm-upgradeable", + "packageName": "@layerzerolabs/oft-evm-upgradeable", + "path": "oft/OFTAdapterFeeUpgradeable.sol", + "fullPath": "packages/oft-evm-upgradeable/contracts/oft/OFTAdapterFeeUpgradeable.sol" + }, + "OFTAdapterUpgradeable": { + "package": "oft-evm-upgradeable", + "packageName": "@layerzerolabs/oft-evm-upgradeable", + "path": "oft/OFTAdapterUpgradeable.sol", + "fullPath": "packages/oft-evm-upgradeable/contracts/oft/OFTAdapterUpgradeable.sol" + }, + "OFTCoreUpgradeable": { + "package": "oft-evm-upgradeable", + "packageName": "@layerzerolabs/oft-evm-upgradeable", + "path": "oft/OFTCoreUpgradeable.sol", + "fullPath": "packages/oft-evm-upgradeable/contracts/oft/OFTCoreUpgradeable.sol" + }, + "OFTFeeUpgradeable": { + "package": "oft-evm-upgradeable", + "packageName": "@layerzerolabs/oft-evm-upgradeable", + "path": "oft/OFTFeeUpgradeable.sol", + "fullPath": "packages/oft-evm-upgradeable/contracts/oft/OFTFeeUpgradeable.sol" + }, + "OFTUpgradeable": { + "package": "oft-evm-upgradeable", + "packageName": "@layerzerolabs/oft-evm-upgradeable", + "path": "oft/OFTUpgradeable.sol", + "fullPath": "packages/oft-evm-upgradeable/contracts/oft/OFTUpgradeable.sol" + }, + "ONFT721": { + "package": "onft-evm", + "packageName": "@layerzerolabs/onft-evm", + "path": "onft721/ONFT721.sol", + "fullPath": "packages/onft-evm/contracts/onft721/ONFT721.sol" + }, + "ONFT721Adapter": { + "package": "onft-evm", + "packageName": "@layerzerolabs/onft-evm", + "path": "onft721/ONFT721Adapter.sol", + "fullPath": "packages/onft-evm/contracts/onft721/ONFT721Adapter.sol" + }, + "ONFT721Core": { + "package": "onft-evm", + "packageName": "@layerzerolabs/onft-evm", + "path": "onft721/ONFT721Core.sol", + "fullPath": "packages/onft-evm/contracts/onft721/ONFT721Core.sol" + }, + "ONFT721Enumerable": { + "package": "onft-evm", + "packageName": "@layerzerolabs/onft-evm", + "path": "onft721/ONFT721Enumerable.sol", + "fullPath": "packages/onft-evm/contracts/onft721/ONFT721Enumerable.sol" + }, + "VaultComposerSync": { + "package": "ovault-evm", + "packageName": "@layerzerolabs/ovault-evm", + "path": "VaultComposerSync.sol", + "fullPath": "packages/ovault-evm/contracts/VaultComposerSync.sol" + } + }, + "interfaces": { + "ICoreWriter": { + "package": "hyperliquid-composer", + "packageName": "@layerzerolabs/hyperliquid-composer", + "path": "interfaces/ICoreWriter.sol", + "fullPath": "packages/hyperliquid-composer/contracts/interfaces/ICoreWriter.sol" + }, + "IHYPEPrecompile": { + "package": "hyperliquid-composer", + "packageName": "@layerzerolabs/hyperliquid-composer", + "path": "interfaces/IHYPEPrecompile.sol", + "fullPath": "packages/hyperliquid-composer/contracts/interfaces/IHYPEPrecompile.sol" + }, + "IHyperLiquidComposerCore": { + "package": "hyperliquid-composer", + "packageName": "@layerzerolabs/hyperliquid-composer", + "path": "interfaces/IHyperLiquidComposerCore.sol", + "fullPath": "packages/hyperliquid-composer/contracts/interfaces/IHyperLiquidComposerCore.sol" + }, + "IHyperLiquidComposerErrors": { + "package": "hyperliquid-composer", + "packageName": "@layerzerolabs/hyperliquid-composer", + "path": "interfaces/IHyperLiquidComposerErrors.sol", + "fullPath": "packages/hyperliquid-composer/contracts/interfaces/IHyperLiquidComposerErrors.sol" + }, + "IHyperLiquidReadPrecompile": { + "package": "hyperliquid-composer", + "packageName": "@layerzerolabs/hyperliquid-composer", + "path": "interfaces/IHyperLiquidReadPrecompile.sol", + "fullPath": "packages/hyperliquid-composer/contracts/interfaces/IHyperLiquidReadPrecompile.sol" + }, + "IOAppComposer": { + "package": "oapp-evm", + "packageName": "@layerzerolabs/oapp-evm", + "path": "oapp/interfaces/IOAppComposer.sol", + "fullPath": "packages/oapp-evm/contracts/oapp/interfaces/IOAppComposer.sol" + }, + "IOAppCore": { + "package": "oapp-evm", + "packageName": "@layerzerolabs/oapp-evm", + "path": "oapp/interfaces/IOAppCore.sol", + "fullPath": "packages/oapp-evm/contracts/oapp/interfaces/IOAppCore.sol" + }, + "IOAppMapper": { + "package": "oapp-evm", + "packageName": "@layerzerolabs/oapp-evm", + "path": "oapp/interfaces/IOAppMapper.sol", + "fullPath": "packages/oapp-evm/contracts/oapp/interfaces/IOAppMapper.sol" + }, + "IOAppMsgInspector": { + "package": "oapp-evm", + "packageName": "@layerzerolabs/oapp-evm", + "path": "oapp/interfaces/IOAppMsgInspector.sol", + "fullPath": "packages/oapp-evm/contracts/oapp/interfaces/IOAppMsgInspector.sol" + }, + "IOAppOptionsType3": { + "package": "oapp-evm", + "packageName": "@layerzerolabs/oapp-evm", + "path": "oapp/interfaces/IOAppOptionsType3.sol", + "fullPath": "packages/oapp-evm/contracts/oapp/interfaces/IOAppOptionsType3.sol" + }, + "IOAppReceiver": { + "package": "oapp-evm", + "packageName": "@layerzerolabs/oapp-evm", + "path": "oapp/interfaces/IOAppReceiver.sol", + "fullPath": "packages/oapp-evm/contracts/oapp/interfaces/IOAppReceiver.sol" + }, + "IOAppReducer": { + "package": "oapp-evm", + "packageName": "@layerzerolabs/oapp-evm", + "path": "oapp/interfaces/IOAppReducer.sol", + "fullPath": "packages/oapp-evm/contracts/oapp/interfaces/IOAppReducer.sol" + }, + "IOAppPreCrimeSimulator": { + "package": "oapp-evm", + "packageName": "@layerzerolabs/oapp-evm", + "path": "precrime/interfaces/IOAppPreCrimeSimulator.sol", + "fullPath": "packages/oapp-evm/contracts/precrime/interfaces/IOAppPreCrimeSimulator.sol" + }, + "IPreCrime": { + "package": "oapp-evm", + "packageName": "@layerzerolabs/oapp-evm", + "path": "precrime/interfaces/IPreCrime.sol", + "fullPath": "packages/oapp-evm/contracts/precrime/interfaces/IPreCrime.sol" + }, + "IFee": { + "package": "oft-evm", + "packageName": "@layerzerolabs/oft-evm", + "path": "interfaces/IFee.sol", + "fullPath": "packages/oft-evm/contracts/interfaces/IFee.sol" + }, + "IMintableBurnable": { + "package": "oft-evm", + "packageName": "@layerzerolabs/oft-evm", + "path": "interfaces/IMintableBurnable.sol", + "fullPath": "packages/oft-evm/contracts/interfaces/IMintableBurnable.sol" + }, + "IOFT": { + "package": "oft-evm", + "packageName": "@layerzerolabs/oft-evm", + "path": "interfaces/IOFT.sol", + "fullPath": "packages/oft-evm/contracts/interfaces/IOFT.sol" + }, + "IONFT721": { + "package": "onft-evm", + "packageName": "@layerzerolabs/onft-evm", + "path": "onft721/interfaces/IONFT721.sol", + "fullPath": "packages/onft-evm/contracts/onft721/interfaces/IONFT721.sol" + }, + "IVaultComposerSync": { + "package": "ovault-evm", + "packageName": "@layerzerolabs/ovault-evm", + "path": "interfaces/IVaultComposerSync.sol", + "fullPath": "packages/ovault-evm/contracts/interfaces/IVaultComposerSync.sol" + } + }, + "libraries": { + "HyperLiquidComposerCodec": { + "package": "hyperliquid-composer", + "packageName": "@layerzerolabs/hyperliquid-composer", + "path": "library/HyperLiquidComposerCodec.sol", + "fullPath": "packages/hyperliquid-composer/contracts/library/HyperLiquidComposerCodec.sol" + }, + "OptionsBuilder": { + "package": "oapp-evm", + "packageName": "@layerzerolabs/oapp-evm", + "path": "oapp/libs/OptionsBuilder.sol", + "fullPath": "packages/oapp-evm/contracts/oapp/libs/OptionsBuilder.sol" + }, + "ReadCodecV1": { + "package": "oapp-evm", + "packageName": "@layerzerolabs/oapp-evm", + "path": "oapp/libs/ReadCodecV1.sol", + "fullPath": "packages/oapp-evm/contracts/oapp/libs/ReadCodecV1.sol" + }, + "Packet": { + "package": "oapp-evm", + "packageName": "@layerzerolabs/oapp-evm", + "path": "precrime/libs/Packet.sol", + "fullPath": "packages/oapp-evm/contracts/precrime/libs/Packet.sol" + }, + "OFTComposeMsgCodec": { + "package": "oft-evm", + "packageName": "@layerzerolabs/oft-evm", + "path": "libs/OFTComposeMsgCodec.sol", + "fullPath": "packages/oft-evm/contracts/libs/OFTComposeMsgCodec.sol" + }, + "OFTMsgCodec": { + "package": "oft-evm", + "packageName": "@layerzerolabs/oft-evm", + "path": "libs/OFTMsgCodec.sol", + "fullPath": "packages/oft-evm/contracts/libs/OFTMsgCodec.sol" + }, + "ONFTComposeMsgCodec": { + "package": "onft-evm", + "packageName": "@layerzerolabs/onft-evm", + "path": "libs/ONFTComposeMsgCodec.sol", + "fullPath": "packages/onft-evm/contracts/libs/ONFTComposeMsgCodec.sol" + }, + "ONFT721MsgCodec": { + "package": "onft-evm", + "packageName": "@layerzerolabs/onft-evm", + "path": "onft721/libs/ONFT721MsgCodec.sol", + "fullPath": "packages/onft-evm/contracts/onft721/libs/ONFT721MsgCodec.sol" + } + } +} diff --git a/package.json b/package.json index f30d8a8413..f4de697dd2 100644 --- a/package.json +++ b/package.json @@ -6,6 +6,7 @@ "build": "$npm_execpath turbo run build", "clean": "$npm_execpath turbo run clean", "dev": "$npm_execpath turbo run dev", + "docgen": "$npm_execpath --filter @layerzerolabs/docgen-devtools build && ./packages/docgen-devtools/dist/cli.js", "lint": "$npm_execpath turbo run lint", "lint:fix": "$npm_execpath turbo run lint:fix", "logs": "docker compose logs -f", @@ -61,7 +62,9 @@ "lint-staged": "^15.2.2", "prettier": "^3.2.5", "prettier-plugin-solidity": "^1.3.1", - "turbo": "1.11.0" + "ts-node": "^10.9.2", + "turbo": "1.11.0", + "typescript": "^5.5.4" }, "packageManager": "pnpm@8.15.6", "engines": { diff --git a/packages/docgen-devtools/README.md b/packages/docgen-devtools/README.md new file mode 100644 index 0000000000..28032b4bf3 --- /dev/null +++ b/packages/docgen-devtools/README.md @@ -0,0 +1,96 @@ +# @layerzerolabs/docgen-devtools + +Contract documentation generation tools for LayerZero protocol. + +## Features + +- Automatic detection of EVM contract packages in the monorepo +- Smart categorization of contracts, interfaces, and libraries +- Integration with Bonadocs for beautiful documentation +- Support for both individual package and bulk documentation generation + +## Installation + +This package is part of the LayerZero devtools monorepo. It's automatically available when working within the repository. + +To ensure the CLI is available globally within the monorepo: +```bash +pnpm --filter @layerzerolabs/docgen-devtools build +``` + +## Usage + +### From the monorepo root: + +```bash +# Generate documentation for all contract packages +pnpm docgen + +# Or use the CLI directly after building +pnpm --filter @layerzerolabs/docgen-devtools build +./packages/docgen-devtools/dist/cli.js + +# Generate documentation for a specific package +./packages/docgen-devtools/dist/cli.js oft-evm +``` + +### Programmatic usage: + +```typescript +import { detectContractPackages, generateAllDocs } from '@layerzerolabs/docgen-devtools' + +// Detect all EVM contract packages +const packages = detectContractPackages() + +// Generate documentation +await generateAllDocs(packages, { + rootDir: process.cwd(), + outputDir: './docgen-out', + templatesDir: './templates' +}) +``` + +## Package Detection + +The tool automatically detects EVM contract packages by looking for: +- A `contracts/` directory with `.sol` files +- `foundry.toml` configuration +- EVM-related dependencies +- Package names containing "evm" + +## Output Structure + +Documentation is generated in the `docgen-out/` directory: +``` +docgen-out/ +├── README.md # Overview of all documented contracts +├── contract-inventory.json # JSON inventory of all contracts +├── oft-evm/ # Package-specific documentation +│ ├── IOFT.md +│ ├── OFT.md +│ └── ... +├── oapp-evm/ +│ └── ... +└── ... +``` + +## Templates + +Documentation templates are located in `templates/` and use Handlebars syntax. The templates follow a "protobuf-style" format with: +- Function signatures with selectors +- Input/output parameter tables +- Events and errors documentation +- Contract categorization + +## Development + +```bash +# Build the package +pnpm build + +# Watch for changes +pnpm dev + +# Run linting +pnpm lint +``` diff --git a/packages/docgen-devtools/package.json b/packages/docgen-devtools/package.json new file mode 100644 index 0000000000..2978cc5241 --- /dev/null +++ b/packages/docgen-devtools/package.json @@ -0,0 +1,50 @@ +{ + "name": "@layerzerolabs/docgen-devtools", + "version": "0.0.1", + "private": true, + "description": "Contract documentation generation tools for LayerZero protocol", + "repository": { + "type": "git", + "url": "git+https://github.com/LayerZero-Labs/devtools.git", + "directory": "packages/docgen-devtools" + }, + "license": "MIT", + "exports": { + ".": { + "types": "./dist/index.d.ts", + "require": "./dist/index.js", + "import": "./dist/index.mjs" + } + }, + "main": "dist/index.js", + "module": "dist/index.mjs", + "types": "dist/index.d.ts", + "bin": { + "lz-docgen": "./dist/cli.js" + }, + "files": [ + "dist", + "templates" + ], + "scripts": { + "prebuild": "tsc -noEmit", + "build": "$npm_execpath tsup", + "clean": "rm -rf dist", + "dev": "$npm_execpath tsup --watch", + "lint": "$npm_execpath eslint '**/*.{js,ts,json}'", + "lint:fix": "eslint --fix '**/*.{js,ts,json}'" + }, + "dependencies": { + "@bonadocs/docgen": "^1.0.0", + "@layerzerolabs/io-devtools": "~0.3.0", + "glob": "^10.3.10", + "hardhat": "^2.22.2" + }, + "devDependencies": { + "@types/glob": "^8.1.0", + "@types/node": "~18.18.14", + "tslib": "~2.6.2", + "tsup": "~8.0.1", + "typescript": "^5.4.4" + } +} diff --git a/packages/docgen-devtools/src/cli.ts b/packages/docgen-devtools/src/cli.ts new file mode 100644 index 0000000000..1c31dab0a6 --- /dev/null +++ b/packages/docgen-devtools/src/cli.ts @@ -0,0 +1,108 @@ +#!/usr/bin/env node + +/** + * CLI for LayerZero contract documentation generation + */ + +import * as fs from 'fs' +import * as path from 'path' +import { createModuleLogger } from '@layerzerolabs/io-devtools' +import { detectContractPackages, collectContracts, generateAllDocs, generateDocumentationReadme } from './index' + +async function main() { + const args = process.argv.slice(2) + const specificPackage = args[0] + const logger = createModuleLogger('docgen') + + logger.info('🚀 LayerZero Contract Documentation Generator') + logger.info('============================================') + logger.info('') + + const rootDir = process.cwd() + + // Ensure we're in the root directory + if (!fs.existsSync(path.join(rootDir, 'package.json')) || !fs.existsSync(path.join(rootDir, 'packages'))) { + logger.error('❌ Error: This script must be run from the devtools root directory') + process.exit(1) + } + + try { + // Detect packages + logger.info('🔍 Detecting EVM contract packages...') + let packages = detectContractPackages(rootDir) + + if (packages.length === 0) { + logger.error('❌ No contract packages detected') + process.exit(1) + } + + // Filter to specific package if requested + if (specificPackage) { + const found = packages.find((p) => p.name === specificPackage) + if (!found) { + logger.error(`❌ Package '${specificPackage}' not found in detected contract packages`) + logger.error('Available packages:') + packages.forEach((p) => logger.error(` - ${p.name}`)) + process.exit(1) + } + packages = [found] + logger.info(`📦 Processing only: ${specificPackage}`) + } else { + logger.info(`📦 Processing all ${packages.length} detected packages`) + } + + // Set up paths + const outputDir = path.join(rootDir, 'docgen-out') + const templatesDir = path.resolve(__dirname, '..', 'templates') + + // Check if templates exist + if (!fs.existsSync(templatesDir)) { + logger.error(`❌ Templates directory not found at ${templatesDir}`) + logger.error('Please ensure documentation templates are set up first.') + process.exit(1) + } + + // Generate documentation + await generateAllDocs(packages, { + rootDir, + outputDir, + templatesDir, + }) + + // Generate inventory and summary + logger.info('') + logger.info('📊 Generating contract inventory...') + const { inventory, packages: allPackages } = collectContracts(rootDir) + + // Write inventory + fs.writeFileSync(path.join(outputDir, 'contract-inventory.json'), JSON.stringify(inventory, null, 2)) + + // Write README + const readmeContent = generateDocumentationReadme(inventory, allPackages) + fs.writeFileSync(path.join(outputDir, 'README.md'), readmeContent) + + logger.info('') + logger.info('✅ Documentation generation complete!') + logger.info('') + logger.info(`📁 Output location: ${outputDir}`) + logger.info('') + logger.info('📦 Packages documented:') + packages.forEach((p) => logger.info(` - ${p.name}`)) + logger.info('') + logger.info('Next steps:') + logger.info(`1. Review the generated documentation in ${outputDir}`) + logger.info('2. Copy docgen-out/ to your Docusaurus docs repository') + logger.info('3. Add the contract reference section to your Docusaurus sidebar') + logger.info('') + } catch (error) { + logger.error('❌ Error:', error) + process.exit(1) + } +} + +// Run the CLI +main().catch((error) => { + const logger = createModuleLogger('docgen') + logger.error('Fatal error:', error) + process.exit(1) +}) diff --git a/packages/docgen-devtools/src/core/abi-extractor.ts b/packages/docgen-devtools/src/core/abi-extractor.ts new file mode 100644 index 0000000000..ffe37d9993 --- /dev/null +++ b/packages/docgen-devtools/src/core/abi-extractor.ts @@ -0,0 +1,201 @@ +/** + * ABI extractor for LayerZero contracts + */ + +import * as fs from 'fs' +import * as path from 'path' +import { createModuleLogger } from '@layerzerolabs/io-devtools' +import { ContractPackage } from './package-detector' + +const logger = createModuleLogger('docgen/abi') + +export interface AbiInfo { + contractName: string + abi: any + bytecode?: string + sourcePath: string +} + +/** + * Extract ABI from a Foundry artifact + */ +function extractAbiFromArtifact(artifactPath: string): AbiInfo | null { + try { + const artifact = JSON.parse(fs.readFileSync(artifactPath, 'utf8')) + + // Skip if no ABI + if (!artifact.abi || artifact.abi.length === 0) { + return null + } + + // Get contract name from directory name + const contractName = path.basename(path.dirname(artifactPath)) + + return { + contractName, + abi: artifact.abi, + bytecode: artifact.bytecode?.object, + sourcePath: artifactPath, + } + } catch (error) { + logger.warn(`Failed to extract ABI from ${artifactPath}:`, error) + return null + } +} + +/** + * Extract ABIs for a package + */ +export async function extractPackageAbis(pkg: ContractPackage, outputDir: string): Promise { + logger.info(` 📋 Extracting ABIs...`) + + const artifactsDir = path.join(pkg.path, 'artifacts') + const abisOutputDir = path.join(outputDir, pkg.name, 'abis') + + if (!fs.existsSync(artifactsDir)) { + logger.warn(` ⚠️ No artifacts directory found for ${pkg.name}`) + return + } + + // Create ABIs output directory + fs.mkdirSync(abisOutputDir, { recursive: true }) + + // Categories for organization + const interfaces: AbiInfo[] = [] + const implementations: AbiInfo[] = [] + const libraries: AbiInfo[] = [] + + // Find all artifact JSON files recursively + const findArtifacts = (dir: string): string[] => { + const files: string[] = [] + const entries = fs.readdirSync(dir, { withFileTypes: true }) + + for (const entry of entries) { + const fullPath = path.join(dir, entry.name) + + if (entry.isDirectory()) { + // Skip build-info directories + if (entry.name === 'build-info') { + continue + } + + // Recursively search subdirectories + files.push(...findArtifacts(fullPath)) + } else if (entry.isFile() && entry.name.endsWith('.json') && !entry.name.endsWith('.dbg.json')) { + // Add JSON files (but skip debug files) + files.push(fullPath) + } + } + + return files + } + + const artifactFiles = findArtifacts(artifactsDir) + logger.info(` 📦 Found ${artifactFiles.length} artifact files`) + + // Process each artifact + for (const artifactPath of artifactFiles) { + const abiInfo = extractAbiFromArtifact(artifactPath) + if (!abiInfo) { + continue + } + + // Categorize by contract name + if (abiInfo.contractName.startsWith('I')) { + interfaces.push(abiInfo) + } else if ( + abiInfo.contractName.includes('Library') || + abiInfo.contractName.includes('Codec') || + abiInfo.contractName.includes('Builder') + ) { + libraries.push(abiInfo) + } else { + implementations.push(abiInfo) + } + + // Save individual ABI file + const abiFilePath = path.join(abisOutputDir, `${abiInfo.contractName}.json`) + fs.writeFileSync(abiFilePath, JSON.stringify(abiInfo.abi, null, 2)) + } + + // Create organized subdirectories + if (interfaces.length > 0) { + const interfacesDir = path.join(abisOutputDir, 'interfaces') + fs.mkdirSync(interfacesDir, { recursive: true }) + interfaces.forEach((info) => { + fs.writeFileSync(path.join(interfacesDir, `${info.contractName}.json`), JSON.stringify(info.abi, null, 2)) + }) + } + + if (implementations.length > 0) { + const implDir = path.join(abisOutputDir, 'implementations') + fs.mkdirSync(implDir, { recursive: true }) + implementations.forEach((info) => { + fs.writeFileSync(path.join(implDir, `${info.contractName}.json`), JSON.stringify(info.abi, null, 2)) + }) + } + + if (libraries.length > 0) { + const libDir = path.join(abisOutputDir, 'libraries') + fs.mkdirSync(libDir, { recursive: true }) + libraries.forEach((info) => { + fs.writeFileSync(path.join(libDir, `${info.contractName}.json`), JSON.stringify(info.abi, null, 2)) + }) + } + + // Create ABI index + const abiIndex = { + package: pkg.name, + totalContracts: interfaces.length + implementations.length + libraries.length, + interfaces: interfaces.map((i) => i.contractName), + implementations: implementations.map((i) => i.contractName), + libraries: libraries.map((i) => i.contractName), + generated: new Date().toISOString(), + } + + fs.writeFileSync(path.join(abisOutputDir, 'index.json'), JSON.stringify(abiIndex, null, 2)) + + // Create README for ABIs + const abiReadme = `# ${pkg.name} ABIs + +This directory contains the Application Binary Interfaces (ABIs) for all contracts in the ${pkg.name} package. + +## Structure + +\`\`\` +abis/ +├── interfaces/ # Contract interfaces +├── implementations/ # Contract implementations +├── libraries/ # Utility libraries +└── index.json # ABI index file +\`\`\` + +## Contract List + +### Interfaces (${interfaces.length}) +${interfaces.map((i) => `- ${i.contractName}`).join('\n') || '- None'} + +### Implementations (${implementations.length}) +${implementations.map((i) => `- ${i.contractName}`).join('\n') || '- None'} + +### Libraries (${libraries.length}) +${libraries.map((i) => `- ${i.contractName}`).join('\n') || '- None'} + +## Usage + +### JavaScript/TypeScript +\`\`\`javascript +import OftAbi from './OFT.json'; +const contract = new ethers.Contract(address, OftAbi, signer); +\`\`\` + +### Direct Import +\`\`\`javascript +const { abi } = require('./OFT.json'); +\`\`\` +` + + fs.writeFileSync(path.join(abisOutputDir, 'README.md'), abiReadme) + + logger.info(` ✅ Extracted ${interfaces.length + implementations.length + libraries.length} ABIs`) +} diff --git a/packages/docgen-devtools/src/core/contract-collector.ts b/packages/docgen-devtools/src/core/contract-collector.ts new file mode 100644 index 0000000000..7751252fd4 --- /dev/null +++ b/packages/docgen-devtools/src/core/contract-collector.ts @@ -0,0 +1,168 @@ +/** + * Contract collector for documentation generation + */ + +import * as fs from 'fs' +import * as path from 'path' +import { detectContractPackages, ContractPackage } from './package-detector' + +export interface ContractInfo { + package: string + packageName: string + path: string + fullPath: string +} + +export interface ContractInventory { + contracts: Record + interfaces: Record + libraries: Record +} + +/** + * Scan a directory for Solidity contracts and categorize them + */ +function scanContractsDirectory( + contractsPath: string, + pkg: ContractPackage, + inventory: ContractInventory, + rootDir: string +): void { + const scanDir = (dir: string, baseDir: string = ''): void => { + const files = fs.readdirSync(dir) + + files.forEach((file) => { + const fullPath = path.join(dir, file) + const stat = fs.statSync(fullPath) + + if (stat.isDirectory() && !file.includes('test') && !file.includes('mock')) { + scanDir(fullPath, path.join(baseDir, file)) + } else if (file.endsWith('.sol') && !file.includes('Mock') && !file.includes('Test')) { + const relativePath = path.join(baseDir, file) + const content = fs.readFileSync(fullPath, 'utf8') + + // Categorize the contract + let category: keyof ContractInventory = 'contracts' + if (file.startsWith('I') && content.includes('interface')) { + category = 'interfaces' + } else if (content.includes('library ')) { + category = 'libraries' + } + + const contractName = file.replace('.sol', '') + inventory[category][contractName] = { + package: pkg.name, + packageName: pkg.packageName, + path: relativePath, + fullPath: path.relative(rootDir, fullPath), + } + } + }) + } + + scanDir(contractsPath) +} + +/** + * Collect all contracts from detected packages + */ +export function collectContracts(rootDir: string = process.cwd()): { + inventory: ContractInventory + packages: ContractPackage[] +} { + const contractPackages = detectContractPackages(rootDir) + + if (contractPackages.length === 0) { + throw new Error('No EVM contract packages detected') + } + + const inventory: ContractInventory = { + contracts: {}, + interfaces: {}, + libraries: {}, + } + + // Collect all contract files from detected packages + contractPackages.forEach((pkg) => { + if (fs.existsSync(pkg.contractsPath)) { + scanContractsDirectory(pkg.contractsPath, pkg, inventory, rootDir) + } + }) + + return { inventory, packages: contractPackages } +} + +/** + * Generate documentation README content + */ +export function generateDocumentationReadme(inventory: ContractInventory, packages: ContractPackage[]): string { + const docReadme = `# LayerZero Protocol Contracts + +This documentation provides a comprehensive reference for all LayerZero protocol contracts. + +## Detected Packages + +The following EVM contract packages were automatically detected and documented: + +${packages.map((pkg) => `- **${pkg.name}** - ${pkg.description}`).join('\n')} + +## Contract Categories + +### Core Interfaces +${ + Object.entries(inventory.interfaces) + .filter(([name]) => !name.includes('OApp') && !name.includes('OFT') && !name.includes('ONFT')) + .map(([name, info]) => `- **${name}** (${info.package})`) + .join('\n') || '_None found_' +} + +### OApp Standard +${ + Object.entries(inventory.interfaces) + .filter(([name]) => name.includes('OApp')) + .map(([name, info]) => `- **${name}** (${info.package})`) + .join('\n') || '_None found_' +} + +### Token Standards (OFT/ONFT) +${ + Object.entries(inventory.interfaces) + .filter(([name]) => name.includes('OFT') || name.includes('ONFT')) + .map(([name, info]) => `- **${name}** (${info.package})`) + .join('\n') || '_None found_' +} + +### Implementations +${ + Object.entries(inventory.contracts) + .map(([name, info]) => `- **${name}** (${info.package})`) + .join('\n') || '_None found_' +} + +### Libraries +${ + Object.entries(inventory.libraries) + .map(([name, info]) => `- **${name}** (${info.package})`) + .join('\n') || '_None found_' +} + +## Package Statistics + +${packages + .map((pkg) => { + const contracts = Object.values(inventory.contracts).filter((c) => c.package === pkg.name).length + const interfaces = Object.values(inventory.interfaces).filter((c) => c.package === pkg.name).length + const libraries = Object.values(inventory.libraries).filter((c) => c.package === pkg.name).length + const total = contracts + interfaces + libraries + + return `- **${pkg.name}**: ${total} total (${interfaces} interfaces, ${contracts} contracts, ${libraries} libraries)` + }) + .join('\n')} + +--- + +*Generated on ${new Date().toISOString()}* +` + + return docReadme +} diff --git a/packages/docgen-devtools/src/core/doc-generator.ts b/packages/docgen-devtools/src/core/doc-generator.ts new file mode 100644 index 0000000000..6d4d23af09 --- /dev/null +++ b/packages/docgen-devtools/src/core/doc-generator.ts @@ -0,0 +1,248 @@ +/** + * Documentation generator for LayerZero contracts + */ + +import * as fs from 'fs' +import * as path from 'path' +import { spawn } from 'child_process' +import { createModuleLogger } from '@layerzerolabs/io-devtools' +import { ContractPackage } from './package-detector' +import { extractPackageAbis } from './abi-extractor' + +export interface DocGeneratorOptions { + rootDir: string + outputDir: string + templatesDir: string + package?: string +} + +/** + * Generate Hardhat configuration for a specific package + */ +function generateHardhatConfig(pkg: ContractPackage, options: DocGeneratorOptions): string { + // Read foundry.toml if it exists to get remappings + let remappings = '' + const foundryTomlPath = path.join(pkg.path, 'foundry.toml') + if (fs.existsSync(foundryTomlPath)) { + try { + const foundryConfig = fs.readFileSync(foundryTomlPath, 'utf8') + const remappingMatch = foundryConfig.match(/remappings\s*=\s*\[([\s\S]*?)\]/m) + if (remappingMatch && remappingMatch[1]) { + // Extract remappings and convert to Hardhat format + const foundryRemappings = remappingMatch[1] + .split(',') + .map((r) => r.trim()) + .filter((r) => r && r.includes('=')) + .map((r) => r.replace(/['"]/g, '')) + + // Convert foundry remappings to object format for Hardhat + const remappingObj: Record = {} + foundryRemappings.forEach((remap) => { + const parts = remap.split('=') + if (parts.length === 2 && parts[0] && parts[1]) { + const from = parts[0] + const to = parts[1] + // Handle toolbox-foundry special case and solidity-bytes-utils + if (to.includes('toolbox-foundry')) { + // Special handling for solidity-bytes-utils + if (from.includes('solidity-bytes-utils')) { + // Hardhat needs the exact path without trailing slash for imports + remappingObj['solidity-bytes-utils/contracts'] = + './node_modules/@layerzerolabs/toolbox-foundry/lib/solidity-bytes-utils' + } else { + remappingObj[from] = to.replace( + 'node_modules/@layerzerolabs/toolbox-foundry/', + './node_modules/@layerzerolabs/toolbox-foundry/' + ) + } + } else if (to.startsWith('node_modules/')) { + remappingObj[from] = `./${to}` + } else { + remappingObj[from] = to + } + } + }) + + remappings = ` + // Auto-imported from foundry.toml + remappings: ${JSON.stringify(remappingObj, null, 8).split('\n').join('\n ')},` + } + } catch (e) { + const logger = createModuleLogger('docgen') + logger.warn(' ⚠️ Could not parse foundry.toml remappings:', e instanceof Error ? e.message : String(e)) + } + } + + return ` +require('@bonadocs/docgen'); + +module.exports = { + paths: { + sources: './contracts', + cache: 'cache/hardhat-docs', + artifacts: 'artifacts', + },${remappings} + solidity: { + compilers: [ + { + version: '0.8.22', + settings: { + optimizer: { + enabled: true, + runs: 200, + }, + }, + }, + { + version: '0.8.20', + settings: { + optimizer: { + enabled: true, + runs: 200, + }, + }, + }, + ], + }, + networks: { + hardhat: { + allowUnlimitedContractSize: true, + }, + }, + docgen: { + projectName: '${pkg.name} Documentation', + projectDescription: 'Contract reference for ${pkg.name}', + outputDir: '${path.relative(pkg.path, path.join(options.outputDir, pkg.name))}', + pages: 'files', + templates: '${path.relative(pkg.path, options.templatesDir)}', + exclude: ['Mock', 'Test', 'Harness', 'mocks'], + theme: 'markdown', + collapseOverloads: true, + }, +}; +`.trim() +} + +/** + * Run command in directory and return promise + */ +function runCommand(command: string, args: string[], cwd: string): Promise<{ stdout: string; stderr: string }> { + return new Promise((resolve, reject) => { + const proc = spawn(command, args, { cwd, shell: true }) + let stdout = '' + let stderr = '' + + proc.stdout.on('data', (data) => { + stdout += data.toString() + }) + + proc.stderr.on('data', (data) => { + stderr += data.toString() + }) + + proc.on('close', (code) => { + if (code === 0) { + resolve({ stdout, stderr }) + } else { + reject(new Error(`Command failed with code ${code}:\nSTDOUT:\n${stdout}\nSTDERR:\n${stderr}`)) + } + }) + }) +} + +/** + * Generate documentation for a single package + */ +export async function generatePackageDocs(pkg: ContractPackage, options: DocGeneratorOptions): Promise { + const logger = createModuleLogger('docgen') + logger.info(`📦 Processing ${pkg.name}...`) + + if (!fs.existsSync(pkg.path)) { + throw new Error(`Package ${pkg.name} not found at ${pkg.path}`) + } + + if (!fs.existsSync(pkg.contractsPath)) { + logger.warn(` ⚠️ No contracts directory in ${pkg.name}, skipping...`) + return + } + + // Create package output directory + const packageOutputDir = path.join(options.outputDir, pkg.name) + fs.mkdirSync(packageOutputDir, { recursive: true }) + + // Check if package uses ESM + const packageJsonPath = path.join(pkg.path, 'package.json') + const packageJson = JSON.parse(fs.readFileSync(packageJsonPath, 'utf8')) + const isESM = packageJson.type === 'module' + + // Create temporary hardhat config with appropriate extension + const configFileName = `hardhat-docs.config.${isESM ? 'cjs' : 'js'}` + const configPath = path.join(pkg.path, configFileName) + const configContent = generateHardhatConfig(pkg, options) + fs.writeFileSync(configPath, configContent) + + try { + // Check if required dependencies are installed + const localHardhatPath = path.join(pkg.path, 'node_modules', '.bin', 'hardhat') + const localBonadocsPath = path.join(pkg.path, 'node_modules', '@bonadocs', 'docgen') + + if (!fs.existsSync(localHardhatPath) || !fs.existsSync(localBonadocsPath)) { + logger.info(' 📦 Installing required dependencies...') + // Install core dependencies including solidity-bytes-utils package + await runCommand( + 'pnpm', + [ + 'add', + '-D', + 'hardhat@^2.22.2', + '@nomiclabs/hardhat-ethers@^2.2.3', + '@bonadocs/docgen@^1.0.0', + 'ethers@^5.7.2', + '@layerzerolabs/toolbox-foundry@^0.1.12', + 'solidity-bytes-utils@^0.8.0', + ], + pkg.path + ) + + // Also ensure the package has all its dependencies installed + logger.info(' 📦 Installing package dependencies...') + await runCommand('pnpm', ['install'], pkg.path) + } + + // Generate documentation + logger.info(' 📝 Generating documentation...') + await runCommand('npx', ['hardhat', 'docgen', '--config', configFileName], pkg.path) + + // Extract ABIs after successful documentation generation + await extractPackageAbis(pkg, options.outputDir) + + logger.info(` ✅ Documentation and ABIs generated for ${pkg.name}`) + } catch (error) { + logger.error(` ❌ Failed to generate docs for ${pkg.name}:`, error) + throw error + } finally { + // Clean up + if (fs.existsSync(configPath)) { + fs.unlinkSync(configPath) + } + } +} + +/** + * Generate documentation for all packages + */ +export async function generateAllDocs(packages: ContractPackage[], options: DocGeneratorOptions): Promise { + // Create output directory + fs.mkdirSync(options.outputDir, { recursive: true }) + + // Process each package + for (const pkg of packages) { + try { + await generatePackageDocs(pkg, options) + } catch (error) { + const logger = createModuleLogger('docgen') + logger.error(`Failed to process ${pkg.name}:`, error) + // Continue with other packages + } + } +} diff --git a/packages/docgen-devtools/src/core/package-detector.ts b/packages/docgen-devtools/src/core/package-detector.ts new file mode 100644 index 0000000000..47d37b0afd --- /dev/null +++ b/packages/docgen-devtools/src/core/package-detector.ts @@ -0,0 +1,143 @@ +/** + * Automatically detect EVM contract packages in the monorepo + */ + +import * as fs from 'fs' +import * as path from 'path' + +export interface ContractPackage { + name: string + path: string + packageName: string + description: string + hasFoundry: boolean + contractsPath: string +} + +/** + * Check if a directory contains Solidity contracts + */ +function hasContracts(packagePath: string): boolean { + const contractsDir = path.join(packagePath, 'contracts') + if (!fs.existsSync(contractsDir)) { + return false + } + + // Check if there are any .sol files (recursively) + function hasSolFiles(dir: string): boolean { + const entries = fs.readdirSync(dir, { withFileTypes: true }) + + for (const entry of entries) { + if (entry.isFile() && entry.name.endsWith('.sol')) { + // Skip if it's only mocks or tests + if (!entry.name.includes('Mock') && !entry.name.includes('Test')) { + return true + } + } else if (entry.isDirectory() && !entry.name.includes('test') && !entry.name.includes('mock')) { + const subPath = path.join(dir, entry.name) + if (hasSolFiles(subPath)) { + return true + } + } + } + return false + } + + return hasSolFiles(contractsDir) +} + +/** + * Check if package is an EVM contract package + */ +function isEVMContractPackage(packagePath: string): boolean { + // Check if package.json exists + const packageJsonPath = path.join(packagePath, 'package.json') + if (!fs.existsSync(packageJsonPath)) { + return false + } + + // Read package.json + const packageJson = JSON.parse(fs.readFileSync(packageJsonPath, 'utf8')) + + // Exclude test and devtools packages + if ( + packageJson.name?.includes('test-devtools') || + packageJson.name?.includes('toolbox') || + packageJson.description?.toLowerCase().includes('test') || + packageJson.description?.toLowerCase().includes('helper') + ) { + return false + } + + // Check indicators of EVM contract package + const indicators = { + hasContracts: hasContracts(packagePath), + hasFoundryConfig: fs.existsSync(path.join(packagePath, 'foundry.toml')), + hasEVMInName: packageJson.name?.includes('evm') || false, + hasSolidityDeps: !!( + packageJson.devDependencies?.['@openzeppelin/contracts'] || + packageJson.dependencies?.['@openzeppelin/contracts'] || + packageJson.peerDependencies?.['@openzeppelin/contracts'] + ), + hasLayerZeroContracts: !!( + packageJson.devDependencies?.['@layerzerolabs/lz-evm-protocol-v2'] || + packageJson.dependencies?.['@layerzerolabs/lz-evm-protocol-v2'] || + packageJson.peerDependencies?.['@layerzerolabs/lz-evm-protocol-v2'] || + packageJson.devDependencies?.['@layerzerolabs/oapp-evm'] || + packageJson.dependencies?.['@layerzerolabs/oapp-evm'] || + packageJson.peerDependencies?.['@layerzerolabs/oapp-evm'] + ), + hasContractArtifacts: fs.existsSync(path.join(packagePath, 'artifacts')), + } + + // Package must have contracts directory with .sol files + if (!indicators.hasContracts) { + return false + } + + // Additional checks - at least one of these should be true + const additionalChecks = + indicators.hasFoundryConfig || + indicators.hasEVMInName || + indicators.hasSolidityDeps || + indicators.hasLayerZeroContracts || + indicators.hasContractArtifacts + + return additionalChecks +} + +/** + * Detect all EVM contract packages + */ +export function detectContractPackages(rootDir: string = process.cwd()): ContractPackage[] { + const packagesDir = path.join(rootDir, 'packages') + + if (!fs.existsSync(packagesDir)) { + throw new Error(`packages/ directory not found at ${packagesDir}`) + } + + const packages: ContractPackage[] = [] + const entries = fs.readdirSync(packagesDir, { withFileTypes: true }) + + for (const entry of entries) { + if (entry.isDirectory()) { + const packagePath = path.join(packagesDir, entry.name) + + if (isEVMContractPackage(packagePath)) { + const packageJsonPath = path.join(packagePath, 'package.json') + const packageJson = JSON.parse(fs.readFileSync(packageJsonPath, 'utf8')) + + packages.push({ + name: entry.name, + path: packagePath, + packageName: packageJson.name, + description: packageJson.description || '', + hasFoundry: fs.existsSync(path.join(packagePath, 'foundry.toml')), + contractsPath: path.join(packagePath, 'contracts'), + }) + } + } + } + + return packages +} diff --git a/packages/docgen-devtools/src/index.ts b/packages/docgen-devtools/src/index.ts new file mode 100644 index 0000000000..104494a95e --- /dev/null +++ b/packages/docgen-devtools/src/index.ts @@ -0,0 +1,8 @@ +/** + * LayerZero Contract Documentation Generator + */ + +export * from './core/package-detector' +export * from './core/contract-collector' +export * from './core/doc-generator' +export * from './core/abi-extractor' diff --git a/packages/docgen-devtools/templates/contract.hbs b/packages/docgen-devtools/templates/contract.hbs new file mode 100644 index 0000000000..97acbd1223 --- /dev/null +++ b/packages/docgen-devtools/templates/contract.hbs @@ -0,0 +1,170 @@ +# {{name}} + +{{#if natspec.title}} +> {{natspec.title}} +{{/if}} + +{{#if natspec.notice}} +{{natspec.notice}} +{{/if}} + +{{#if natspec.dev}} +## Developer Notes +{{natspec.dev}} +{{/if}} + +{{#if abi}} +## Contract ABI + +
+Download ABI JSON + +```json +{{{stringify abi}}} +``` + +
+{{/if}} + +{{#if functions}} +## Functions + +{{#each functions}} +### {{name}} +{{#if selector}}`selector: {{selector}}`{{/if}} + +{{#if natspec.notice}} +> {{natspec.notice}} +{{/if}} + +#### Signature +```solidity +{{signature}} +``` + +#### Inputs +{{#if inputs.length}} +| Name | Type | Description | +|------|------|-------------| +{{#each inputs}} +| `{{name}}` | `{{type}}` | {{#if natspec.params.[name]}}{{natspec.params.[name]}}{{else}}-{{/if}} | +{{/each}} +{{else}} +_No parameters_ +{{/if}} + +#### Outputs +{{#if outputs.length}} +| Name | Type | Description | +|------|------|-------------| +{{#each outputs}} +| `{{#if name}}{{name}}{{else}}output{{@index}}{{/if}}` | `{{type}}` | {{#if natspec.returns.[name]}}{{natspec.returns.[name]}}{{else}}-{{/if}} | +{{/each}} +{{else}} +_No return values_ +{{/if}} + +--- + +{{/each}} +{{/if}} + +{{#if events}} +## Events + +{{#each events}} +### {{name}} +```solidity +{{signature}} +``` + +{{#if natspec.notice}} +> {{natspec.notice}} +{{/if}} + +{{#if inputs.length}} +| Name | Type | Indexed | Description | +|------|------|---------|-------------| +{{#each inputs}} +| `{{name}}` | `{{type}}` | {{#if indexed}}✓{{else}}✗{{/if}} | {{#if natspec.params.[name]}}{{natspec.params.[name]}}{{else}}-{{/if}} | +{{/each}} +{{/if}} + +--- + +{{/each}} +{{/if}} + +{{#if errors}} +## Custom Errors + +{{#each errors}} +### {{name}} +{{#if selector}}`selector: {{selector}}`{{/if}} + +```solidity +{{signature}} +``` + +{{#if natspec.notice}} +> {{natspec.notice}} +{{/if}} + +{{#if inputs.length}} +| Name | Type | Description | +|------|------|-------------| +{{#each inputs}} +| `{{name}}` | `{{type}}` | {{#if natspec.params.[name]}}{{natspec.params.[name]}}{{else}}-{{/if}} | +{{/each}} +{{/if}} + +--- + +{{/each}} +{{/if}} + +{{#if structs}} +## Structs + +{{#each structs}} +### {{name}} + +```solidity +struct {{name}} { +{{#each members}} + {{type}} {{name}};{{#if natspec}} // {{natspec}}{{/if}} +{{/each}} +} +``` + +{{#if natspec.notice}} +> {{natspec.notice}} +{{/if}} + +--- + +{{/each}} +{{/if}} + +{{#if enums}} +## Enums + +{{#each enums}} +### {{name}} + +```solidity +enum {{name}} { +{{#each members}} + {{this}}{{#unless @last}},{{/unless}} +{{/each}} +} +``` + +{{#if natspec.notice}} +> {{natspec.notice}} +{{/if}} + +--- + +{{/each}} +{{/if}} diff --git a/packages/docgen-devtools/templates/helpers.hbs b/packages/docgen-devtools/templates/helpers.hbs new file mode 100644 index 0000000000..5a7e3cf348 --- /dev/null +++ b/packages/docgen-devtools/templates/helpers.hbs @@ -0,0 +1,36 @@ +{{!-- Helper for rendering parameter tables --}} +{{#*inline "paramTable"}} +{{#if params.length}} +| Name | Type | Description | +|------|------|-------------| +{{#each params}} +| `{{name}}` | `{{type}}` | {{#if description}}{{description}}{{else}}-{{/if}} | +{{/each}} +{{else}} +{{emptyText}} +{{/if}} +{{/inline}} + +{{!-- Helper for rendering struct members --}} +{{#*inline "structMembers"}} +{{#each members}} + {{type}} {{name}};{{#if description}} // {{description}}{{/if}} +{{/each}} +{{/inline}} + +{{!-- Helper for rendering modifiers --}} +{{#*inline "modifiers"}} +{{#if modifiers.length}} +**Modifiers:** {{#each modifiers}}`{{this}}`{{#unless @last}}, {{/unless}}{{/each}} +{{/if}} +{{/inline}} + +{{!-- Helper for rendering visibility --}} +{{#*inline "visibility"}} +{{#if visibility}}**Visibility:** `{{visibility}}`{{/if}} +{{/inline}} + +{{!-- Helper for rendering state mutability --}} +{{#*inline "stateMutability"}} +{{#if stateMutability}}**State Mutability:** `{{stateMutability}}`{{/if}} +{{/inline}} diff --git a/packages/docgen-devtools/templates/index.hbs b/packages/docgen-devtools/templates/index.hbs new file mode 100644 index 0000000000..2aa726be24 --- /dev/null +++ b/packages/docgen-devtools/templates/index.hbs @@ -0,0 +1,32 @@ +# {{projectName}} + +{{#if projectDescription}} +{{projectDescription}} +{{/if}} + +## Contract Categories + +{{#each groups}} +### {{@key}} + +{{#each this}} +- [`{{name}}`](./{{@../key}}/{{name}}.md) - {{#if natspec.title}}{{natspec.title}}{{else}}{{name}} contract{{/if}} +{{/each}} + +{{/each}} + +## Quick Links + +- [Core Interfaces](./core-interfaces/) - Essential LayerZero protocol interfaces +- [OApp Standard](./oapp-standard/) - Omnichain Application contracts and interfaces +- [Token Standards](./token-standards/) - OFT (Fungible) and ONFT (Non-Fungible) token implementations +- [Advanced Features](./advanced-features/) - Vault composers and specialized features + +## Integration Guide + +For detailed integration instructions, visit the [LayerZero Documentation](https://docs.layerzero.network/). + +## Contract Verification + +All contracts are open source and verified on block explorers. Source code is available at: +- [LayerZero Devtools](https://github.com/LayerZero-Labs/devtools) diff --git a/packages/docgen-devtools/tsconfig.json b/packages/docgen-devtools/tsconfig.json new file mode 100644 index 0000000000..6f9e4011c1 --- /dev/null +++ b/packages/docgen-devtools/tsconfig.json @@ -0,0 +1,8 @@ +{ + "extends": "../../tsconfig.json", + "include": ["src", "./tsup.config.ts"], + "compilerOptions": { + "module": "commonjs", + "types": ["node"] + } +} diff --git a/packages/docgen-devtools/tsup.config.ts b/packages/docgen-devtools/tsup.config.ts new file mode 100644 index 0000000000..b5aaaac997 --- /dev/null +++ b/packages/docgen-devtools/tsup.config.ts @@ -0,0 +1,12 @@ +import { defineConfig } from 'tsup' + +export default defineConfig({ + entry: ['src/index.ts', 'src/cli.ts'], + outDir: './dist', + clean: true, + dts: true, + sourcemap: true, + splitting: false, + treeshake: true, + format: ['cjs', 'esm'], +}) diff --git a/packages/hyperliquid-composer/package.json b/packages/hyperliquid-composer/package.json index ef21f31d05..02ce67cc89 100644 --- a/packages/hyperliquid-composer/package.json +++ b/packages/hyperliquid-composer/package.json @@ -60,10 +60,10 @@ }, "dependencies": { "commander": "^11.1.0", - "hardhat": "^2.22.10", "ts-node": "^10.9.2" }, "devDependencies": { + "@bonadocs/docgen": "^1.0.0", "@layerzerolabs/io-devtools": "^0.3.0", "@layerzerolabs/lz-definitions": "^3.0.81", "@layerzerolabs/lz-evm-protocol-v2": "^3.0.12", @@ -76,6 +76,7 @@ "@layerzerolabs/toolbox-foundry": "^0.1.12", "@layerzerolabs/toolbox-hardhat": "^0.6.12", "@msgpack/msgpack": "^3.0.0-beta2", + "@nomiclabs/hardhat-ethers": "^2.2.3", "@openzeppelin/contracts": "^5.0.2", "@openzeppelin/contracts-upgradeable": "^5.0.2", "@types/node": "^22.15.3", @@ -83,6 +84,7 @@ "dotenv": "^16.4.7", "ethers": "^5.7.2", "ethers-v6": "npm:ethers@^6.13.5", + "hardhat": "^2.22.12", "inquirer": "^12.3.3", "jest": "^29.7.0", "tsup": "^8.4.0" diff --git a/packages/oapp-alt-evm/package.json b/packages/oapp-alt-evm/package.json index 5a58b9f835..307a8d3288 100644 --- a/packages/oapp-alt-evm/package.json +++ b/packages/oapp-alt-evm/package.json @@ -35,18 +35,19 @@ "compile": "forge build", "test": "forge test" }, - "dependencies": { - "ethers": "^5.7.2" - }, "devDependencies": { + "@bonadocs/docgen": "^1.0.0", "@layerzerolabs/lz-evm-messagelib-v2": "^3.0.75", "@layerzerolabs/lz-evm-protocol-v2": "^3.0.75", "@layerzerolabs/lz-evm-v1-0.7": "^3.0.75", "@layerzerolabs/oapp-evm": "^0.3.2", "@layerzerolabs/test-devtools-evm-foundry": "~7.0.0", "@layerzerolabs/toolbox-foundry": "^0.1.12", + "@nomiclabs/hardhat-ethers": "^2.2.3", "@openzeppelin/contracts": "^5.0.2", - "@openzeppelin/contracts-upgradeable": "^5.0.2" + "@openzeppelin/contracts-upgradeable": "^5.0.2", + "ethers": "^5.7.2", + "hardhat": "^2.22.2" }, "peerDependencies": { "@layerzerolabs/lz-evm-messagelib-v2": "^3.0.75", diff --git a/packages/oapp-evm-upgradeable/package.json b/packages/oapp-evm-upgradeable/package.json index 86037d18c1..e3fcf7ba36 100644 --- a/packages/oapp-evm-upgradeable/package.json +++ b/packages/oapp-evm-upgradeable/package.json @@ -33,18 +33,19 @@ "compile": "forge build", "test": "forge test" }, - "dependencies": { - "ethers": "^5.7.2" - }, "devDependencies": { + "@bonadocs/docgen": "^1.0.0", "@layerzerolabs/lz-evm-messagelib-v2": "^3.0.75", "@layerzerolabs/lz-evm-protocol-v2": "^3.0.75", "@layerzerolabs/lz-evm-v1-0.7": "^3.0.75", "@layerzerolabs/oapp-evm": "^0.3.2", "@layerzerolabs/test-devtools-evm-foundry": "~7.0.0", "@layerzerolabs/toolbox-foundry": "^0.1.12", + "@nomiclabs/hardhat-ethers": "^2.2.3", "@openzeppelin/contracts": "^5.0.2", - "@openzeppelin/contracts-upgradeable": "^5.0.2" + "@openzeppelin/contracts-upgradeable": "^5.0.2", + "ethers": "^5.7.2", + "hardhat": "^2.22.2" }, "peerDependencies": { "@layerzerolabs/lz-evm-messagelib-v2": "^3.0.75", diff --git a/packages/oapp-evm/package.json b/packages/oapp-evm/package.json index aa41e80bcf..1a89d3d76b 100644 --- a/packages/oapp-evm/package.json +++ b/packages/oapp-evm/package.json @@ -32,17 +32,19 @@ "compile": "forge build", "test": "forge test" }, - "dependencies": { - "ethers": "^5.7.2" - }, "devDependencies": { + "@bonadocs/docgen": "^1.0.0", "@layerzerolabs/lz-evm-messagelib-v2": "^3.0.75", "@layerzerolabs/lz-evm-protocol-v2": "^3.0.75", "@layerzerolabs/lz-evm-v1-0.7": "^3.0.75", "@layerzerolabs/test-devtools-evm-foundry": "~7.0.0", - "@layerzerolabs/toolbox-foundry": "^0.1.12", + "@layerzerolabs/toolbox-foundry": "workspace:^", + "@nomiclabs/hardhat-ethers": "^2.2.3", "@openzeppelin/contracts": "^5.0.2", - "@openzeppelin/contracts-upgradeable": "^5.0.2" + "@openzeppelin/contracts-upgradeable": "^5.0.2", + "ethers": "^5.7.2", + "hardhat": "^2.22.2", + "solidity-bytes-utils": "^0.8.0" }, "peerDependencies": { "@layerzerolabs/lz-evm-messagelib-v2": "^3.0.75", diff --git a/packages/oft-alt-evm/package.json b/packages/oft-alt-evm/package.json index 5a17c23efd..72927ebe90 100644 --- a/packages/oft-alt-evm/package.json +++ b/packages/oft-alt-evm/package.json @@ -36,6 +36,7 @@ "test": "forge test" }, "devDependencies": { + "@bonadocs/docgen": "^1.0.0", "@layerzerolabs/lz-evm-messagelib-v2": "^3.0.75", "@layerzerolabs/lz-evm-protocol-v2": "^3.0.75", "@layerzerolabs/lz-evm-v1-0.7": "^3.0.75", @@ -44,8 +45,11 @@ "@layerzerolabs/oft-evm": "^3.2.0", "@layerzerolabs/test-devtools-evm-foundry": "~7.0.0", "@layerzerolabs/toolbox-foundry": "^0.1.12", + "@nomiclabs/hardhat-ethers": "^2.2.3", "@openzeppelin/contracts": "^5.0.2", - "@openzeppelin/contracts-upgradeable": "^5.0.2" + "@openzeppelin/contracts-upgradeable": "^5.0.2", + "ethers": "^5.7.2", + "hardhat": "^2.22.2" }, "peerDependencies": { "@layerzerolabs/lz-evm-messagelib-v2": "^3.0.75", diff --git a/packages/oft-evm-upgradeable/package.json b/packages/oft-evm-upgradeable/package.json index fee1e7cbf0..216ac6d870 100644 --- a/packages/oft-evm-upgradeable/package.json +++ b/packages/oft-evm-upgradeable/package.json @@ -44,6 +44,7 @@ "test:forge": "forge test" }, "devDependencies": { + "@bonadocs/docgen": "^1.0.0", "@layerzerolabs/lz-evm-messagelib-v2": "^3.0.75", "@layerzerolabs/lz-evm-protocol-v2": "^3.0.75", "@layerzerolabs/lz-evm-v1-0.7": "^3.0.75", @@ -52,8 +53,11 @@ "@layerzerolabs/oft-evm": "^3.2.0", "@layerzerolabs/test-devtools-evm-foundry": "~7.0.0", "@layerzerolabs/toolbox-foundry": "^0.1.12", + "@nomiclabs/hardhat-ethers": "^2.2.3", "@openzeppelin/contracts": "^5.0.2", "@openzeppelin/contracts-upgradeable": "^5.0.2", + "ethers": "^5.7.2", + "hardhat": "^2.22.2", "rimraf": "^5.0.5" }, "peerDependencies": { diff --git a/packages/oft-evm/package.json b/packages/oft-evm/package.json index 010515d18b..06575b45e7 100644 --- a/packages/oft-evm/package.json +++ b/packages/oft-evm/package.json @@ -44,14 +44,18 @@ "test:forge": "forge test" }, "devDependencies": { + "@bonadocs/docgen": "^1.0.0", "@layerzerolabs/lz-evm-messagelib-v2": "^3.0.75", "@layerzerolabs/lz-evm-protocol-v2": "^3.0.75", "@layerzerolabs/lz-evm-v1-0.7": "^3.0.75", "@layerzerolabs/oapp-evm": "^0.3.2", "@layerzerolabs/test-devtools-evm-foundry": "~7.0.0", "@layerzerolabs/toolbox-foundry": "^0.1.12", + "@nomiclabs/hardhat-ethers": "^2.2.3", "@openzeppelin/contracts": "^5.0.2", "@openzeppelin/contracts-upgradeable": "^5.0.2", + "ethers": "^5.7.2", + "hardhat": "^2.22.2", "rimraf": "^5.0.5" }, "peerDependencies": { diff --git a/packages/onft-evm/package.json b/packages/onft-evm/package.json index 92b558a743..367be15dd2 100644 --- a/packages/onft-evm/package.json +++ b/packages/onft-evm/package.json @@ -41,6 +41,7 @@ "test:forge": "forge test" }, "devDependencies": { + "@bonadocs/docgen": "^1.0.0", "@layerzerolabs/lz-evm-messagelib-v2": "^3.0.75", "@layerzerolabs/lz-evm-protocol-v2": "^3.0.75", "@layerzerolabs/lz-evm-v1-0.7": "^3.0.75", @@ -48,8 +49,11 @@ "@layerzerolabs/oapp-evm": "^0.3.2", "@layerzerolabs/test-devtools-evm-foundry": "~7.0.0", "@layerzerolabs/toolbox-foundry": "~0.1.12", + "@nomiclabs/hardhat-ethers": "^2.2.3", "@openzeppelin/contracts": "^5.0.2", "@openzeppelin/contracts-upgradeable": "^5.0.2", + "ethers": "^5.7.2", + "hardhat": "^2.22.2", "rimraf": "^6.0.1" }, "peerDependencies": { diff --git a/packages/ovault-evm/package.json b/packages/ovault-evm/package.json index 286ce275c5..cb0726ff97 100644 --- a/packages/ovault-evm/package.json +++ b/packages/ovault-evm/package.json @@ -56,6 +56,7 @@ "viem": "^2.33.1" }, "devDependencies": { + "@bonadocs/docgen": "^1.0.0", "@layerzerolabs/lz-evm-messagelib-v2": "^3.0.75", "@layerzerolabs/lz-evm-protocol-v2": "^3.0.75", "@layerzerolabs/lz-evm-v1-0.7": "^3.0.75", @@ -63,10 +64,13 @@ "@layerzerolabs/oft-evm": "^3.1.4", "@layerzerolabs/test-devtools-evm-foundry": "~6.0.3", "@layerzerolabs/toolbox-foundry": "^0.1.12", + "@nomiclabs/hardhat-ethers": "^2.2.3", "@openzeppelin/contracts": "^5.0.2", "@openzeppelin/contracts-upgradeable": "^5.0.2", "@types/mocha": "^10.0.10", "@types/node": "^24.1.0", + "ethers": "^5.7.2", + "hardhat": "^2.22.2", "mocha": "^11.7.1", "rimraf": "^5.0.5", "ts-mocha": "^11.1.0", diff --git a/packages/test-devtools-evm-foundry/package.json b/packages/test-devtools-evm-foundry/package.json index 282e200340..311144e8c8 100644 --- a/packages/test-devtools-evm-foundry/package.json +++ b/packages/test-devtools-evm-foundry/package.json @@ -18,13 +18,17 @@ "lint:fix": "eslint --fix '**/*.{js,ts,json}'" }, "devDependencies": { + "@bonadocs/docgen": "^1.0.0", "@layerzerolabs/lz-evm-messagelib-v2": "^3.0.75", "@layerzerolabs/lz-evm-protocol-v2": "^3.0.75", "@layerzerolabs/lz-evm-v1-0.7": "^3.0.75", "@layerzerolabs/toolbox-foundry": "^0.1.12", + "@nomiclabs/hardhat-ethers": "^2.2.3", "@openzeppelin/contracts": "^5.0.2", "@openzeppelin/contracts-upgradeable": "^5.0.2", "@types/node": "~18.18.14", + "ethers": "^5.7.2", + "hardhat": "^2.22.2", "solidity-bytes-utils": "^0.8.2", "ts-node": "^10.9.2", "typescript": "^5.4.4" diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index ee5dffb848..0191dc10ff 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -27,10 +27,10 @@ importers: version: 18.18.14 '@typescript-eslint/eslint-plugin': specifier: ^7.7.1 - version: 7.7.1(@typescript-eslint/parser@7.7.1)(eslint@8.57.1)(typescript@5.5.3) + version: 7.7.1(@typescript-eslint/parser@7.7.1)(eslint@8.57.1)(typescript@5.9.2) '@typescript-eslint/parser': specifier: ^7.7.1 - version: 7.7.1(eslint@8.57.1)(typescript@5.5.3) + version: 7.7.1(eslint@8.57.1)(typescript@5.9.2) eslint: specifier: ^8.57.1 version: 8.57.1 @@ -42,10 +42,10 @@ importers: version: 17.1.0(eslint-plugin-import@2.29.1)(eslint-plugin-n@16.6.2)(eslint-plugin-promise@6.1.1)(eslint@8.57.1) eslint-plugin-import: specifier: ^2.29.1 - version: 2.29.1(@typescript-eslint/parser@7.7.1)(eslint-import-resolver-typescript@3.6.1)(eslint@8.57.1) + version: 2.29.1(@typescript-eslint/parser@7.7.1)(eslint@8.57.1) eslint-plugin-jest: specifier: ^27.6.3 - version: 27.6.3(@typescript-eslint/eslint-plugin@7.7.1)(eslint@8.57.1)(typescript@5.5.3) + version: 27.6.3(@typescript-eslint/eslint-plugin@7.7.1)(eslint@8.57.1)(typescript@5.9.2) eslint-plugin-n: specifier: ^16.6.2 version: 16.6.2(eslint@8.57.1) @@ -73,9 +73,15 @@ importers: prettier-plugin-solidity: specifier: ^1.3.1 version: 1.3.1(prettier@3.2.5) + ts-node: + specifier: ^10.9.2 + version: 10.9.2(@types/node@18.18.14)(typescript@5.9.2) turbo: specifier: 1.11.0 version: 1.11.0 + typescript: + specifier: ^5.5.4 + version: 5.9.2 docs: {} @@ -3915,7 +3921,7 @@ importers: version: 2.0.1 tsup: specifier: ^8.0.1 - version: 8.0.1(@swc/core@1.4.0)(typescript@5.5.3) + version: 8.0.1(@swc/core@1.4.0)(ts-node@10.9.2)(typescript@5.5.3) typescript: specifier: ^5.4.4 version: 5.5.3 @@ -4154,6 +4160,37 @@ importers: specifier: ^5.3.3 version: 5.5.3 + packages/docgen-devtools: + dependencies: + '@bonadocs/docgen': + specifier: ^1.0.0 + version: 1.0.0(hardhat@2.22.12) + '@layerzerolabs/io-devtools': + specifier: ~0.3.0 + version: link:../io-devtools + glob: + specifier: ^10.3.10 + version: 10.4.5 + hardhat: + specifier: ^2.22.2 + version: 2.22.12(ts-node@10.9.2)(typescript@5.9.2) + devDependencies: + '@types/glob': + specifier: ^8.1.0 + version: 8.1.0 + '@types/node': + specifier: ~18.18.14 + version: 18.18.14 + tslib: + specifier: ~2.6.2 + version: 2.6.3 + tsup: + specifier: ~8.0.1 + version: 8.0.1(ts-node@10.9.2)(typescript@5.9.2) + typescript: + specifier: ^5.4.4 + version: 5.9.2 + packages/export-deployments: dependencies: typescript: @@ -4186,10 +4223,10 @@ importers: version: 2.16.2 jest: specifier: ^29.6.2 - version: 29.7.0(@types/node@18.18.14) + version: 29.7.0(@types/node@18.18.14)(ts-node@10.9.2) tsup: specifier: ~8.0.1 - version: 8.0.1(@swc/core@1.4.0)(typescript@5.5.3) + version: 8.0.1(@swc/core@1.4.0)(ts-node@10.9.2)(typescript@5.5.3) zod: specifier: ^3.22.4 version: 3.22.4 @@ -4202,13 +4239,13 @@ importers: commander: specifier: ^11.1.0 version: 11.1.0 - hardhat: - specifier: ^2.22.10 - version: 2.22.12(ts-node@10.9.2)(typescript@5.5.3) ts-node: specifier: ^10.9.2 - version: 10.9.2(@types/node@22.15.3)(typescript@5.5.3) + version: 10.9.2(@types/node@22.15.3)(typescript@5.9.2) devDependencies: + '@bonadocs/docgen': + specifier: ^1.0.0 + version: 1.0.0(hardhat@2.22.12) '@layerzerolabs/io-devtools': specifier: ^0.3.0 version: link:../io-devtools @@ -4223,7 +4260,7 @@ importers: version: 3.0.86(@openzeppelin/contracts-upgradeable@5.1.0)(@openzeppelin/contracts@5.1.0)(hardhat-deploy@0.12.4) '@layerzerolabs/lz-utilities': specifier: ^3.0.74 - version: 3.0.86(@types/node@22.15.3)(typescript@5.5.3) + version: 3.0.86(@types/node@22.15.3)(typescript@5.9.2) '@layerzerolabs/oapp-evm': specifier: ^0.3.1 version: link:../oapp-evm @@ -4235,7 +4272,7 @@ importers: version: 2.3.44 '@layerzerolabs/solhint-config': specifier: ^3.0.12 - version: 3.0.12(typescript@5.5.3) + version: 3.0.12(typescript@5.9.2) '@layerzerolabs/toolbox-foundry': specifier: ^0.1.12 version: link:../toolbox-foundry @@ -4245,6 +4282,9 @@ importers: '@msgpack/msgpack': specifier: ^3.0.0-beta2 version: 3.1.1 + '@nomiclabs/hardhat-ethers': + specifier: ^2.2.3 + version: 2.2.3(ethers@5.7.2)(hardhat@2.22.12) '@openzeppelin/contracts': specifier: ^5.0.2 version: 5.1.0 @@ -4266,6 +4306,9 @@ importers: ethers-v6: specifier: npm:ethers@^6.13.5 version: /ethers@6.13.5 + hardhat: + specifier: ^2.22.12 + version: 2.22.12(ts-node@10.9.2)(typescript@5.9.2) inquirer: specifier: ^12.3.3 version: 12.4.1(@types/node@22.15.3) @@ -4274,7 +4317,7 @@ importers: version: 29.7.0(@types/node@22.15.3)(ts-node@10.9.2) tsup: specifier: ^8.4.0 - version: 8.4.0(typescript@5.5.3) + version: 8.4.0(typescript@5.9.2) packages/io-devtools: dependencies: @@ -4371,23 +4414,22 @@ importers: version: 29.5.12 jest: specifier: ^29.7.0 - version: 29.7.0(@types/node@18.18.14) + version: 29.7.0(@types/node@18.18.14)(ts-node@10.9.2) tslib: specifier: ~2.6.2 version: 2.6.3 tsup: specifier: ~8.0.1 - version: 8.0.1(@swc/core@1.4.0)(typescript@5.5.3) + version: 8.0.1(@swc/core@1.4.0)(ts-node@10.9.2)(typescript@5.5.3) typescript: specifier: ^5.4.4 version: 5.5.3 packages/oapp-alt-evm: - dependencies: - ethers: - specifier: ^5.7.2 - version: 5.7.2 devDependencies: + '@bonadocs/docgen': + specifier: ^1.0.0 + version: 1.0.0(hardhat@2.22.12) '@layerzerolabs/lz-evm-messagelib-v2': specifier: ^3.0.75 version: 3.0.75(@axelar-network/axelar-gmp-sdk-solidity@5.10.0)(@chainlink/contracts-ccip@0.7.6)(@eth-optimism/contracts@0.6.0)(@layerzerolabs/lz-evm-protocol-v2@3.0.75)(@layerzerolabs/lz-evm-v1-0.7@3.0.75)(@openzeppelin/contracts-upgradeable@5.1.0)(@openzeppelin/contracts@5.1.0)(hardhat-deploy@0.12.4)(solidity-bytes-utils@0.8.2) @@ -4406,19 +4448,27 @@ importers: '@layerzerolabs/toolbox-foundry': specifier: ^0.1.12 version: link:../toolbox-foundry + '@nomiclabs/hardhat-ethers': + specifier: ^2.2.3 + version: 2.2.3(ethers@5.7.2)(hardhat@2.22.12) '@openzeppelin/contracts': specifier: ^5.0.2 version: 5.1.0 '@openzeppelin/contracts-upgradeable': specifier: ^5.0.2 version: 5.1.0(@openzeppelin/contracts@5.1.0) - - packages/oapp-evm: - dependencies: ethers: specifier: ^5.7.2 version: 5.7.2 + hardhat: + specifier: ^2.22.2 + version: 2.22.12(ts-node@10.9.2)(typescript@5.9.2) + + packages/oapp-evm: devDependencies: + '@bonadocs/docgen': + specifier: ^1.0.0 + version: 1.0.0(hardhat@2.22.12) '@layerzerolabs/lz-evm-messagelib-v2': specifier: ^3.0.75 version: 3.0.75(@axelar-network/axelar-gmp-sdk-solidity@5.10.0)(@chainlink/contracts-ccip@0.7.6)(@eth-optimism/contracts@0.6.0)(@layerzerolabs/lz-evm-protocol-v2@3.0.75)(@layerzerolabs/lz-evm-v1-0.7@3.0.75)(@openzeppelin/contracts-upgradeable@5.0.2)(@openzeppelin/contracts@5.0.2)(hardhat-deploy@0.12.4)(solidity-bytes-utils@0.8.2) @@ -4432,21 +4482,32 @@ importers: specifier: ~7.0.0 version: link:../test-devtools-evm-foundry '@layerzerolabs/toolbox-foundry': - specifier: ^0.1.12 + specifier: workspace:^ version: link:../toolbox-foundry + '@nomiclabs/hardhat-ethers': + specifier: ^2.2.3 + version: 2.2.3(ethers@5.7.2)(hardhat@2.22.12) '@openzeppelin/contracts': specifier: ^5.0.2 version: 5.0.2 '@openzeppelin/contracts-upgradeable': specifier: ^5.0.2 version: 5.0.2(@openzeppelin/contracts@5.0.2) - - packages/oapp-evm-upgradeable: - dependencies: ethers: specifier: ^5.7.2 version: 5.7.2 + hardhat: + specifier: ^2.22.2 + version: 2.22.12(ts-node@10.9.2)(typescript@5.9.2) + solidity-bytes-utils: + specifier: ^0.8.0 + version: 0.8.2 + + packages/oapp-evm-upgradeable: devDependencies: + '@bonadocs/docgen': + specifier: ^1.0.0 + version: 1.0.0(hardhat@2.22.12) '@layerzerolabs/lz-evm-messagelib-v2': specifier: ^3.0.75 version: 3.0.75(@axelar-network/axelar-gmp-sdk-solidity@5.10.0)(@chainlink/contracts-ccip@0.7.6)(@eth-optimism/contracts@0.6.0)(@layerzerolabs/lz-evm-protocol-v2@3.0.75)(@layerzerolabs/lz-evm-v1-0.7@3.0.75)(@openzeppelin/contracts-upgradeable@5.0.2)(@openzeppelin/contracts@5.0.2)(hardhat-deploy@0.12.4)(solidity-bytes-utils@0.8.2) @@ -4465,15 +4526,27 @@ importers: '@layerzerolabs/toolbox-foundry': specifier: ^0.1.12 version: link:../toolbox-foundry + '@nomiclabs/hardhat-ethers': + specifier: ^2.2.3 + version: 2.2.3(ethers@5.7.2)(hardhat@2.22.12) '@openzeppelin/contracts': specifier: ^5.0.2 version: 5.0.2 '@openzeppelin/contracts-upgradeable': specifier: ^5.0.2 version: 5.0.2(@openzeppelin/contracts@5.0.2) + ethers: + specifier: ^5.7.2 + version: 5.7.2 + hardhat: + specifier: ^2.22.2 + version: 2.22.12(ts-node@10.9.2)(typescript@5.9.2) packages/oft-alt-evm: devDependencies: + '@bonadocs/docgen': + specifier: ^1.0.0 + version: 1.0.0(hardhat@2.22.12) '@layerzerolabs/lz-evm-messagelib-v2': specifier: ^3.0.75 version: 3.0.75(@axelar-network/axelar-gmp-sdk-solidity@5.10.0)(@chainlink/contracts-ccip@0.7.6)(@eth-optimism/contracts@0.6.0)(@layerzerolabs/lz-evm-protocol-v2@3.0.75)(@layerzerolabs/lz-evm-v1-0.7@3.0.75)(@openzeppelin/contracts-upgradeable@5.1.0)(@openzeppelin/contracts@5.1.0)(hardhat-deploy@0.12.4)(solidity-bytes-utils@0.8.2) @@ -4498,15 +4571,27 @@ importers: '@layerzerolabs/toolbox-foundry': specifier: ^0.1.12 version: link:../toolbox-foundry + '@nomiclabs/hardhat-ethers': + specifier: ^2.2.3 + version: 2.2.3(ethers@5.7.2)(hardhat@2.22.12) '@openzeppelin/contracts': specifier: ^5.0.2 version: 5.1.0 '@openzeppelin/contracts-upgradeable': specifier: ^5.0.2 version: 5.1.0(@openzeppelin/contracts@5.1.0) + ethers: + specifier: ^5.7.2 + version: 5.7.2 + hardhat: + specifier: ^2.22.2 + version: 2.22.12(ts-node@10.9.2)(typescript@5.9.2) packages/oft-evm: devDependencies: + '@bonadocs/docgen': + specifier: ^1.0.0 + version: 1.0.0(hardhat@2.22.12) '@layerzerolabs/lz-evm-messagelib-v2': specifier: ^3.0.75 version: 3.0.75(@axelar-network/axelar-gmp-sdk-solidity@5.10.0)(@chainlink/contracts-ccip@0.7.6)(@eth-optimism/contracts@0.6.0)(@layerzerolabs/lz-evm-protocol-v2@3.0.75)(@layerzerolabs/lz-evm-v1-0.7@3.0.75)(@openzeppelin/contracts-upgradeable@5.0.2)(@openzeppelin/contracts@5.0.2)(hardhat-deploy@0.12.4)(solidity-bytes-utils@0.8.2) @@ -4525,18 +4610,30 @@ importers: '@layerzerolabs/toolbox-foundry': specifier: ^0.1.12 version: link:../toolbox-foundry + '@nomiclabs/hardhat-ethers': + specifier: ^2.2.3 + version: 2.2.3(ethers@5.7.2)(hardhat@2.22.12) '@openzeppelin/contracts': specifier: ^5.0.2 version: 5.0.2 '@openzeppelin/contracts-upgradeable': specifier: ^5.0.2 version: 5.0.2(@openzeppelin/contracts@5.0.2) + ethers: + specifier: ^5.7.2 + version: 5.7.2 + hardhat: + specifier: ^2.22.2 + version: 2.22.12(ts-node@10.9.2)(typescript@5.9.2) rimraf: specifier: ^5.0.5 version: 5.0.9 packages/oft-evm-upgradeable: devDependencies: + '@bonadocs/docgen': + specifier: ^1.0.0 + version: 1.0.0(hardhat@2.22.12) '@layerzerolabs/lz-evm-messagelib-v2': specifier: ^3.0.75 version: 3.0.75(@axelar-network/axelar-gmp-sdk-solidity@5.10.0)(@chainlink/contracts-ccip@0.7.6)(@eth-optimism/contracts@0.6.0)(@layerzerolabs/lz-evm-protocol-v2@3.0.75)(@layerzerolabs/lz-evm-v1-0.7@3.0.75)(@openzeppelin/contracts-upgradeable@5.0.2)(@openzeppelin/contracts@5.0.2)(hardhat-deploy@0.12.4)(solidity-bytes-utils@0.8.2) @@ -4561,12 +4658,21 @@ importers: '@layerzerolabs/toolbox-foundry': specifier: ^0.1.12 version: link:../toolbox-foundry + '@nomiclabs/hardhat-ethers': + specifier: ^2.2.3 + version: 2.2.3(ethers@5.7.2)(hardhat@2.22.12) '@openzeppelin/contracts': specifier: ^5.0.2 version: 5.0.2 '@openzeppelin/contracts-upgradeable': specifier: ^5.0.2 version: 5.0.2(@openzeppelin/contracts@5.0.2) + ethers: + specifier: ^5.7.2 + version: 5.7.2 + hardhat: + specifier: ^2.22.2 + version: 2.22.12(ts-node@10.9.2)(typescript@5.9.2) rimraf: specifier: ^5.0.5 version: 5.0.9 @@ -4718,6 +4824,9 @@ importers: packages/onft-evm: devDependencies: + '@bonadocs/docgen': + specifier: ^1.0.0 + version: 1.0.0(hardhat@2.22.12) '@layerzerolabs/lz-evm-messagelib-v2': specifier: ^3.0.75 version: 3.0.75(@axelar-network/axelar-gmp-sdk-solidity@5.10.0)(@chainlink/contracts-ccip@0.7.6)(@eth-optimism/contracts@0.6.0)(@layerzerolabs/lz-evm-protocol-v2@3.0.75)(@layerzerolabs/lz-evm-v1-0.7@3.0.75)(@openzeppelin/contracts-upgradeable@5.0.2)(@openzeppelin/contracts@5.0.2)(hardhat-deploy@0.12.4)(solidity-bytes-utils@0.8.2) @@ -4739,12 +4848,21 @@ importers: '@layerzerolabs/toolbox-foundry': specifier: ~0.1.12 version: link:../toolbox-foundry + '@nomiclabs/hardhat-ethers': + specifier: ^2.2.3 + version: 2.2.3(ethers@5.7.2)(hardhat@2.22.12) '@openzeppelin/contracts': specifier: ^5.0.2 version: 5.0.2 '@openzeppelin/contracts-upgradeable': specifier: ^5.0.2 version: 5.0.2(@openzeppelin/contracts@5.0.2) + ethers: + specifier: ^5.7.2 + version: 5.7.2 + hardhat: + specifier: ^2.22.2 + version: 2.22.12(ts-node@10.9.2)(typescript@5.9.2) rimraf: specifier: ^6.0.1 version: 6.0.1 @@ -4767,6 +4885,9 @@ importers: specifier: ^2.33.1 version: 2.33.3(typescript@5.5.3) devDependencies: + '@bonadocs/docgen': + specifier: ^1.0.0 + version: 1.0.0(hardhat@2.22.12) '@layerzerolabs/lz-evm-messagelib-v2': specifier: ^3.0.75 version: 3.0.86(@axelar-network/axelar-gmp-sdk-solidity@5.10.0)(@chainlink/contracts-ccip@0.7.6)(@eth-optimism/contracts@0.6.0)(@layerzerolabs/lz-evm-protocol-v2@3.0.86)(@layerzerolabs/lz-evm-v1-0.7@3.0.86)(@openzeppelin/contracts-upgradeable@5.1.0)(@openzeppelin/contracts@5.1.0)(hardhat-deploy@0.12.4)(solidity-bytes-utils@0.8.2) @@ -4788,6 +4909,9 @@ importers: '@layerzerolabs/toolbox-foundry': specifier: ^0.1.12 version: link:../toolbox-foundry + '@nomiclabs/hardhat-ethers': + specifier: ^2.2.3 + version: 2.2.3(ethers@5.7.2)(hardhat@2.22.12) '@openzeppelin/contracts': specifier: ^5.0.2 version: 5.1.0 @@ -4800,6 +4924,12 @@ importers: '@types/node': specifier: ^24.1.0 version: 24.2.0 + ethers: + specifier: ^5.7.2 + version: 5.7.2 + hardhat: + specifier: ^2.22.2 + version: 2.22.12(ts-node@10.9.2)(typescript@5.5.3) mocha: specifier: ^11.7.1 version: 11.7.1 @@ -5111,6 +5241,9 @@ importers: specifier: ^3.2.0 version: link:../oft-evm devDependencies: + '@bonadocs/docgen': + specifier: ^1.0.0 + version: 1.0.0(hardhat@2.22.12) '@layerzerolabs/lz-evm-messagelib-v2': specifier: ^3.0.75 version: 3.0.75(@axelar-network/axelar-gmp-sdk-solidity@5.10.0)(@chainlink/contracts-ccip@0.7.6)(@eth-optimism/contracts@0.6.0)(@layerzerolabs/lz-evm-protocol-v2@3.0.75)(@layerzerolabs/lz-evm-v1-0.7@3.0.75)(@openzeppelin/contracts-upgradeable@5.0.2)(@openzeppelin/contracts@5.0.2)(hardhat-deploy@0.12.4)(solidity-bytes-utils@0.8.2) @@ -5123,6 +5256,9 @@ importers: '@layerzerolabs/toolbox-foundry': specifier: ^0.1.12 version: link:../toolbox-foundry + '@nomiclabs/hardhat-ethers': + specifier: ^2.2.3 + version: 2.2.3(ethers@5.7.2)(hardhat@2.22.12) '@openzeppelin/contracts': specifier: ^5.0.2 version: 5.0.2 @@ -5132,6 +5268,12 @@ importers: '@types/node': specifier: ~18.18.14 version: 18.18.14 + ethers: + specifier: ^5.7.2 + version: 5.7.2 + hardhat: + specifier: ^2.22.2 + version: 2.22.12(ts-node@10.9.2)(typescript@5.5.3) solidity-bytes-utils: specifier: ^0.8.2 version: 0.8.2 @@ -5747,10 +5889,10 @@ importers: version: 12.6.1 jest: specifier: ^29.7.0 - version: 29.7.0(@types/node@18.18.14) + version: 29.7.0(@types/node@18.18.14)(ts-node@10.9.2) tsup: specifier: ^8.0.1 - version: 8.0.1(@swc/core@1.4.0)(typescript@5.5.3) + version: 8.0.1(@swc/core@1.4.0)(ts-node@10.9.2)(typescript@5.5.3) typescript: specifier: ^5.4.4 version: 5.5.3 @@ -6925,6 +7067,32 @@ packages: dependencies: '@noble/curves': 1.8.1 + /@bonadocs/core@1.0.2: + resolution: {integrity: sha512-n3JxmVAR2QuGeZjEDsHVc7DfPbkUqeej1CJyrVM7/pU4nJ/5un57M51C9782xArGiUe/xcg1MK/wmBOf5anT1A==} + engines: {node: '>=10'} + dependencies: + axios: 1.8.4 + ethers: 5.7.2 + transitivePeerDependencies: + - bufferutil + - debug + - utf-8-validate + + /@bonadocs/docgen@1.0.0(hardhat@2.22.12): + resolution: {integrity: sha512-Mfhxel1fAF9/IS4cfpkGNjt2lhLv9+Zxpi3QWMBFAiIR5kYbS1ncZjI5LbAQnco1tL/oKVOu7mlmKDOglyI4Yw==} + peerDependencies: + hardhat: ^2.8.0 + dependencies: + '@bonadocs/core': 1.0.2 + hardhat: 2.22.12(ts-node@10.9.2)(typescript@5.9.2) + shelljs: 0.8.5 + solidity-ast: 0.4.59 + solidity-docgen: 0.6.0-beta.36(hardhat@2.22.12) + transitivePeerDependencies: + - bufferutil + - debug + - utf-8-validate + /@chainlink/contracts-ccip@0.7.6(ethers@5.7.2): resolution: {integrity: sha512-yNbCBFpLs3R+ALymto9dQYKz3vatnjqYGu1pnMD0i2fHEMthiXe0+otaNCGNht6n8k7ruNaA0DNpz3F+2jHQXw==} dependencies: @@ -8263,10 +8431,6 @@ packages: '@ethersproject/properties': 5.7.0 '@ethersproject/strings': 5.7.0 - /@fastify/busboy@2.1.0: - resolution: {integrity: sha512-+KpH+QxZU7O4675t3mnkQKcZZg56u+K/Ct2K+N2AZYNVK8kyeo/bI18tI8aPm3tvNNRyTWfj6s5tnGNlcbQRsA==} - engines: {node: '>=14'} - /@fastify/busboy@2.1.1: resolution: {integrity: sha512-vBZP4NlzfOlerQTnba4aqZoMhE/a9HY7HRqoOPaETQcSQuWEIyZMHGfVu6w9wGtGK5fED5qRs2DteVCjOH60sA==} engines: {node: '>=14'} @@ -8399,7 +8563,7 @@ packages: ripemd160: 2.0.2 secp256k1: 5.0.1 semver: 7.6.3 - ws: 8.18.0(bufferutil@4.0.8)(utf-8-validate@5.0.10) + ws: 8.18.2(bufferutil@4.0.8)(utf-8-validate@5.0.10) transitivePeerDependencies: - bufferutil - debug @@ -8427,12 +8591,41 @@ packages: ripemd160: 2.0.2 secp256k1: 5.0.1 semver: 7.6.3 - ws: 8.18.0(bufferutil@4.0.8)(utf-8-validate@5.0.10) + ws: 8.18.2(bufferutil@4.0.8)(utf-8-validate@5.0.10) + transitivePeerDependencies: + - bufferutil + - debug + - typescript + - utf-8-validate + + /@initia/initia.js@1.0.5(typescript@5.9.2): + resolution: {integrity: sha512-RpNs/cJ2A83VPT7qmYIcPzeVwSMl2bayWujZY/ERsndL+TBTficwKCFjvH8x+W/1capZ4h2kJ/HMXVylOJmAyA==} + engines: {node: '>=20'} + dependencies: + '@bitcoinerlab/secp256k1': 1.2.0 + '@initia/initia.proto': 0.2.6 + '@initia/opinit.proto': 0.0.11 + '@ledgerhq/hw-transport': 6.31.4 + '@ledgerhq/hw-transport-webhid': 6.30.0 + '@ledgerhq/hw-transport-webusb': 6.29.4 + '@mysten/bcs': 1.2.0 + axios: 1.8.4 + bech32: 2.0.0 + bignumber.js: 9.1.2 + bip32: 5.0.0-rc.0(typescript@5.9.2) + bip39: 3.1.0 + jscrypto: 1.0.3 + keccak256: 1.0.6 + ripemd160: 2.0.2 + secp256k1: 5.0.1 + semver: 7.6.3 + ws: 8.18.2(bufferutil@4.0.8)(utf-8-validate@5.0.10) transitivePeerDependencies: - bufferutil - debug - typescript - utf-8-validate + dev: true /@initia/initia.proto@0.2.6: resolution: {integrity: sha512-khiCPUxZTkyAl+SQbQCOlcJId/a0ToUhG+ChrVXN9a+1ypPz5355j2UP2IvnUf+lAix/+zzdekcqO/Lig7htAQ==} @@ -9455,7 +9648,7 @@ packages: eslint-import-resolver-typescript: 3.6.1(@typescript-eslint/parser@7.7.1)(eslint-plugin-import@2.29.1)(eslint@8.57.1) eslint-plugin-autofix: 2.2.0(eslint@8.57.1) eslint-plugin-compat: 4.2.0(eslint@8.57.1) - eslint-plugin-import: 2.29.1(@typescript-eslint/parser@7.7.1)(eslint-import-resolver-typescript@3.6.1)(eslint@8.57.1) + eslint-plugin-import: 2.29.1(@typescript-eslint/parser@7.7.1)(eslint@8.57.1) eslint-plugin-prettier: 5.1.3(eslint-config-prettier@9.1.0)(eslint@8.57.1)(prettier@3.2.5) eslint-plugin-unused-imports: 3.2.0(@typescript-eslint/eslint-plugin@7.7.1)(eslint@8.57.1) prettier: 3.2.5 @@ -9488,7 +9681,7 @@ packages: resolution: {integrity: sha512-tI+mKMx51qCrj+G42mrVR+5jAiRaiLCpnXiogjW7E3krbNbJenI1eYYX7U62ssXWXwTZfYSJ1Bw/zLAbs59sqw==} hasBin: true dependencies: - typescript: 5.5.3 + typescript: 5.9.2 dev: true /@layerzerolabs/io-devtools@0.1.17(zod@3.22.4): @@ -9531,7 +9724,7 @@ packages: bn.js: 5.2.1 commander: 12.1.0 extended-buffer: 6.1.0 - glob: 10.3.10 + glob: 10.4.5 tiny-invariant: 1.3.3 transitivePeerDependencies: - debug @@ -11061,16 +11254,16 @@ packages: - typescript - utf-8-validate - /@layerzerolabs/lz-utilities@3.0.86(@types/node@22.15.3)(typescript@5.5.3): + /@layerzerolabs/lz-utilities@3.0.86(@types/node@22.15.3)(typescript@5.9.2): resolution: {integrity: sha512-wyKya1LwJGnOZaaPliKeKQS70Z3M0sUJbNDPi/niDxELB8/mhj0nwcfdvk6jEE5A4ROj/3wzrIUX3J1/jtItSg==} dependencies: '@ethersproject/bytes': 5.7.0 - '@initia/initia.js': 1.0.5(typescript@5.5.3) + '@initia/initia.js': 1.0.5(typescript@5.9.2) '@layerzerolabs/lz-definitions': 3.0.86 '@solana/web3.js': 1.98.0 '@ton/core': 0.59.0(@ton/crypto@3.3.0) '@ton/crypto': 3.3.0 - '@ton/ton': /@layerzerolabs/ton@15.2.0-rc.3(@layerzerolabs/ton@15.2.0-rc.3)(@ton/core@0.59.0)(@ton/crypto@3.3.0)(@types/node@22.15.3)(typescript@5.5.3) + '@ton/ton': /@layerzerolabs/ton@15.2.0-rc.3(@layerzerolabs/ton@15.2.0-rc.3)(@ton/core@0.59.0)(@ton/crypto@3.3.0)(@types/node@22.15.3)(typescript@5.9.2) aptos: 1.21.0 bip39: 3.1.0 dayjs: 1.11.13 @@ -11332,6 +11525,14 @@ packages: - typescript dev: true + /@layerzerolabs/solhint-config@3.0.12(typescript@5.9.2): + resolution: {integrity: sha512-69li0+oU+sjeYVbB8qGCfmUm8aAng2esRISpofK67DOpqGTMI0+FTX6B0p3zowVoirHlPPRgsfAMxC92r/jNKA==} + dependencies: + solhint: 4.1.1(typescript@5.9.2) + transitivePeerDependencies: + - typescript + dev: true + /@layerzerolabs/solidity-examples@1.1.0(@nomiclabs/hardhat-ethers@2.2.3)(@nomiclabs/hardhat-etherscan@3.1.8)(ethers@5.7.2)(ts-node@10.9.2)(typescript@5.5.3): resolution: {integrity: sha512-hh9FbWbnt/JEdzfM5s6+lv8DeOwQ+lU6b0cuTyCM0wulerUSqVVkBWfs1CKodwDvvbZdLV5BhTJl9AVflIDOHQ==} dependencies: @@ -11394,7 +11595,7 @@ packages: '@ton/crypto': 3.3.0 '@ton/sandbox': 0.22.0(@ton/core@0.59.0)(@ton/crypto@3.3.0) '@ton/test-utils': 0.4.2(@jest/globals@29.7.0)(@ton/core@0.59.0)(chai@4.5.0) - axios: 1.7.9 + axios: 1.8.4 dataloader: 2.2.2 symbol.inspect: 1.0.1 teslabot: 1.5.0 @@ -11422,7 +11623,7 @@ packages: '@ton/crypto': 3.3.0 '@ton/sandbox': 0.22.0(@ton/core@0.59.0)(@ton/crypto@3.3.0) '@ton/test-utils': 0.4.2(@ton/core@0.59.0)(chai@4.4.1) - axios: 1.7.9 + axios: 1.8.4 dataloader: 2.2.2 symbol.inspect: 1.0.1 teslabot: 1.5.0 @@ -11468,18 +11669,18 @@ packages: - supports-color - typescript - /@layerzerolabs/ton@15.2.0-rc.3(@layerzerolabs/ton@15.2.0-rc.3)(@ton/core@0.59.0)(@ton/crypto@3.3.0)(@types/node@22.15.3)(typescript@5.5.3): + /@layerzerolabs/ton@15.2.0-rc.3(@layerzerolabs/ton@15.2.0-rc.3)(@ton/core@0.59.0)(@ton/crypto@3.3.0)(@types/node@22.15.3)(typescript@5.9.2): resolution: {integrity: sha512-Aq7htcWn31DxSYs8l0sJcQ76uAJRPy50lg6M2G+qNLSXpO01sPcUSb8oK/TmCKo+S+rDIFWUNKFjT0B/rll1YQ==} peerDependencies: '@ton/core': '>=0.59.0' '@ton/crypto': '>=3.2.0' dependencies: - '@ton/blueprint': 0.25.0(@layerzerolabs/ton@15.2.0-rc.3)(@ton/core@0.59.0)(@ton/crypto@3.3.0)(@types/node@22.15.3)(typescript@5.5.3) + '@ton/blueprint': 0.25.0(@layerzerolabs/ton@15.2.0-rc.3)(@ton/core@0.59.0)(@ton/crypto@3.3.0)(@types/node@22.15.3)(typescript@5.9.2) '@ton/core': 0.59.0(@ton/crypto@3.3.0) '@ton/crypto': 3.3.0 '@ton/sandbox': 0.22.0(@ton/core@0.59.0)(@ton/crypto@3.3.0) '@ton/test-utils': 0.4.2(@jest/globals@29.7.0)(@ton/core@0.59.0)(chai@4.5.0) - axios: 1.7.9 + axios: 1.8.4 dataloader: 2.2.2 symbol.inspect: 1.0.1 teslabot: 1.5.0 @@ -12398,7 +12599,7 @@ packages: hardhat: ^2.0.0 dependencies: ethers: 5.7.2 - hardhat: 2.22.12(ts-node@10.9.2)(typescript@5.5.3) + hardhat: 2.22.12(ts-node@10.9.2)(typescript@5.9.2) /@nomiclabs/hardhat-etherscan@3.1.8(hardhat@2.22.12): resolution: {integrity: sha512-v5F6IzQhrsjHh6kQz4uNrym49brK9K5bYCq2zQZ729RYRaifI9hHbtmK+KkIVevfhut7huQFEQ77JLRMAzWYjQ==} @@ -12974,6 +13175,9 @@ packages: /@scure/base@1.1.5: resolution: {integrity: sha512-Brj9FiG2W1MRQSTB212YVPRrcbjkv48FoZi/u4l/zds/ieRrqsh7aUf6CLwkAq61oKXr/ZlTzlY66gLIj3TFTQ==} + /@scure/base@1.1.9: + resolution: {integrity: sha512-8YKhl8GHiNI/pU2VMaofa2Tor7PJRAjwQLBBuilkJ9L5+13yVbC7JO/wS7piioAvPSwR3JKM1IJ/u4xQzbcXKg==} + /@scure/base@1.2.1: resolution: {integrity: sha512-DGmGtC8Tt63J5GfHgfl5CuAXh96VF/LD8K9Hr/Gv0J2lAoRGlPOMpqMpMbCTOoOJMZCk2Xt+DskdDyn6dEFdzQ==} @@ -12989,7 +13193,7 @@ packages: dependencies: '@noble/hashes': 1.2.0 '@noble/secp256k1': 1.7.1 - '@scure/base': 1.1.5 + '@scure/base': 1.1.9 /@scure/bip32@1.3.3: resolution: {integrity: sha512-LJaN3HwRbfQK0X1xFSi0Q9amqOgzQnnDngIt+ZlsBC3Bm7/nE7K0kwshZHyaru79yIVRv/e1mQAjZyuZG6jOFQ==} @@ -13018,7 +13222,7 @@ packages: resolution: {integrity: sha512-t+wDck2rVkh65Hmv280fYdVdY25J9YeEUIgn2LG1WM6gxFkGzcksoDiUkWVpVp3Oex9xGC68JU2dSbUfwZ2jPg==} dependencies: '@noble/hashes': 1.2.0 - '@scure/base': 1.1.5 + '@scure/base': 1.1.9 /@scure/bip39@1.2.1: resolution: {integrity: sha512-Z3/Fsz1yr904dduJD0NpiyRHhRYHdcnyh73FZWiV+/qhWi83wNJ3NWolYqCEN+ZWsUz2TWwajJggcRE9r1zUYg==} @@ -13937,7 +14141,7 @@ packages: - supports-color - typescript - /@ton/blueprint@0.25.0(@layerzerolabs/ton@15.2.0-rc.3)(@ton/core@0.59.0)(@ton/crypto@3.3.0)(@types/node@22.15.3)(typescript@5.5.3): + /@ton/blueprint@0.25.0(@layerzerolabs/ton@15.2.0-rc.3)(@ton/core@0.59.0)(@ton/crypto@3.3.0)(@types/node@22.15.3)(typescript@5.9.2): resolution: {integrity: sha512-ji5VnGNt/j68Zkp9CB5P1JV1AHN99fHdP7+sKtOo+qIlO6c09vSLhTvGcWu70KOYPj27SRGBSQbpWdBreX/OhA==} hasBin: true peerDependencies: @@ -13950,7 +14154,7 @@ packages: '@ton/core': 0.59.0(@ton/crypto@3.3.0) '@ton/crypto': 3.3.0 '@ton/tolk-js': 0.6.0 - '@ton/ton': /@layerzerolabs/ton@15.2.0-rc.3(@layerzerolabs/ton@15.2.0-rc.3)(@ton/core@0.59.0)(@ton/crypto@3.3.0)(@types/node@22.15.3)(typescript@5.5.3) + '@ton/ton': /@layerzerolabs/ton@15.2.0-rc.3(@layerzerolabs/ton@15.2.0-rc.3)(@ton/core@0.59.0)(@ton/crypto@3.3.0)(@types/node@22.15.3)(typescript@5.9.2) '@tonconnect/sdk': 2.2.0 arg: 5.0.2 axios: 1.8.4 @@ -13958,7 +14162,7 @@ packages: dotenv: 16.4.7 inquirer: 8.2.6 qrcode-terminal: 0.12.0 - ts-node: 10.9.2(@types/node@22.15.3)(typescript@5.5.3) + ts-node: 10.9.2(@types/node@22.15.3)(typescript@5.9.2) transitivePeerDependencies: - '@swc/core' - '@swc/wasm' @@ -14161,7 +14365,7 @@ packages: /@types/bn.js@4.11.6: resolution: {integrity: sha512-pqr857jrp2kPuO9uRjZ3PwnJTjoQy+fcdxvBTvHm6dkmEL9q+hDD/2j/0ELOBPtPnS8LjCX0gI9nbl8lVkadpg==} dependencies: - '@types/node': 18.18.14 + '@types/node': 24.2.0 /@types/bn.js@5.1.5: resolution: {integrity: sha512-V46N0zwKRF5Q00AZ6hWtN0T8gGmDUaUzLWQvHFo5yThtVwK/VCenFY3wXVbOvNfajEpsTfQM4IN9k/d6gUVX3A==} @@ -14171,8 +14375,7 @@ packages: /@types/bn.js@5.1.6: resolution: {integrity: sha512-Xh8vSwUeMKeYYrj3cX4lGQgFSF/N03r+tv4AiLl1SucqV+uTQpxRcnM8AkXKHwYP9ZPXOYXRr2KPXpVlIvqh9w==} dependencies: - '@types/node': 18.18.14 - dev: true + '@types/node': 24.2.0 /@types/cacheable-request@6.0.3: resolution: {integrity: sha512-IQ3EbTzGxIigb1I3qPZc1rWJnH0BmSKv5QYTalEwweFvyBDLSAe24zP0le/hyi7ecGfZVlIVAg4BZqb8WBwKqw==} @@ -14219,7 +14422,6 @@ packages: dependencies: '@types/minimatch': 5.1.2 '@types/node': 18.18.14 - dev: false /@types/graceful-fs@4.1.9: resolution: {integrity: sha512-olP3sd1qOEe5dXTSaFvQG+02VdRXcdytWLAZsAq1PecU8uqQAhkrnbli7DagjtXKW/Bl7YJbUsa8MPcuc8LHEQ==} @@ -14292,7 +14494,6 @@ packages: /@types/minimatch@5.1.2: resolution: {integrity: sha512-K0VQKziLUWkVKiRVrx4a40iPaxTUefQmjtkQofBkYRcoaaL/8rhwDWww9qWbrgicNOgnpIsMxyNIUM4+n6dUIA==} - dev: false /@types/mkdirp@0.5.2: resolution: {integrity: sha512-U5icWpv7YnZYGsN4/cmh3WD2onMY0aJIiTE6+51TwJCttdHvtCYmkBNOobHlXwrJRL0nkH9jH4kD+1FAdMN4Tg==} @@ -14346,7 +14547,6 @@ packages: resolution: {integrity: sha512-3xyG3pMCq3oYCNg7/ZP+E1ooTaGB4cG8JWRsqqOYQdbWNY4zbaV0Ennrd7stjiJEFZCaybcIgpTjJWHRfBSIDw==} dependencies: undici-types: 7.10.0 - dev: true /@types/node@8.10.66: resolution: {integrity: sha512-tktOkFUA4kXx2hhhrB8bIFb5TbwzS4uOhKEmwiD+NoiL0qtP2OQ9mFldbgD4dV1djrlBYP6eBuQZiWjuHUpqFw==} @@ -14359,7 +14559,7 @@ packages: /@types/pbkdf2@3.1.2: resolution: {integrity: sha512-uRwJqmiXmh9++aSu1VNEn3iIxWOhd8AHXNSdlaLfdAAdSTY9jYVeGWnzejM3dvrkbqE3/hyQkQQ29IFATEGlew==} dependencies: - '@types/node': 18.18.14 + '@types/node': 24.2.0 /@types/prettier@2.7.3: resolution: {integrity: sha512-+68kP9yzs4LMp7VNh8gdzMSPZFL44MLGqiHWvttYJe+6qnuVr4Ek9wSBQoveqY/r+LwjCcU29kNVkidwim+kYA==} @@ -14404,7 +14604,7 @@ packages: /@types/secp256k1@4.0.6: resolution: {integrity: sha512-hHxJU6PAEUn0TP4S/ZOzuTUvJWuZ6eIKeNKb5RBpODvSl6hp1Wrw4s7ATY50rklRCScUDpHzVA/DQdSjJ3UoYQ==} dependencies: - '@types/node': 18.18.14 + '@types/node': 24.2.0 /@types/semver@7.5.8: resolution: {integrity: sha512-I8EUhyrgfLrcTkzV3TSsGyl1tSuPrEDzr0yd5m90UgNxQkyDXULk3b6MlQqTCpZpNtWe1K0hzclnZkTcLBe2UQ==} @@ -14493,6 +14693,35 @@ packages: - supports-color dev: true + /@typescript-eslint/eslint-plugin@7.7.1(@typescript-eslint/parser@7.7.1)(eslint@8.57.1)(typescript@5.9.2): + resolution: {integrity: sha512-KwfdWXJBOviaBVhxO3p5TJiLpNuh2iyXyjmWN0f1nU87pwyvfS0EmjC6ukQVYVFJd/K1+0NWGPDXiyEyQorn0Q==} + engines: {node: ^18.18.0 || >=20.0.0} + peerDependencies: + '@typescript-eslint/parser': ^7.0.0 + eslint: ^8.56.0 + typescript: '*' + peerDependenciesMeta: + typescript: + optional: true + dependencies: + '@eslint-community/regexpp': 4.12.1 + '@typescript-eslint/parser': 7.7.1(eslint@8.57.1)(typescript@5.9.2) + '@typescript-eslint/scope-manager': 7.7.1 + '@typescript-eslint/type-utils': 7.7.1(eslint@8.57.1)(typescript@5.9.2) + '@typescript-eslint/utils': 7.7.1(eslint@8.57.1)(typescript@5.9.2) + '@typescript-eslint/visitor-keys': 7.7.1 + debug: 4.3.7 + eslint: 8.57.1 + graphemer: 1.4.0 + ignore: 5.3.2 + natural-compare: 1.4.0 + semver: 7.6.2 + ts-api-utils: 1.3.0(typescript@5.9.2) + typescript: 5.9.2 + transitivePeerDependencies: + - supports-color + dev: true + /@typescript-eslint/parser@7.7.1(eslint@8.57.1)(typescript@5.5.3): resolution: {integrity: sha512-vmPzBOOtz48F6JAGVS/kZYk4EkXao6iGrD838sp1w3NQQC0W8ry/q641KU4PrG7AKNAf56NOcR8GOpH8l9FPCw==} engines: {node: ^18.18.0 || >=20.0.0} @@ -14514,6 +14743,27 @@ packages: - supports-color dev: true + /@typescript-eslint/parser@7.7.1(eslint@8.57.1)(typescript@5.9.2): + resolution: {integrity: sha512-vmPzBOOtz48F6JAGVS/kZYk4EkXao6iGrD838sp1w3NQQC0W8ry/q641KU4PrG7AKNAf56NOcR8GOpH8l9FPCw==} + engines: {node: ^18.18.0 || >=20.0.0} + peerDependencies: + eslint: ^8.56.0 + typescript: '*' + peerDependenciesMeta: + typescript: + optional: true + dependencies: + '@typescript-eslint/scope-manager': 7.7.1 + '@typescript-eslint/types': 7.7.1 + '@typescript-eslint/typescript-estree': 7.7.1(typescript@5.9.2) + '@typescript-eslint/visitor-keys': 7.7.1 + debug: 4.3.7 + eslint: 8.57.1 + typescript: 5.9.2 + transitivePeerDependencies: + - supports-color + dev: true + /@typescript-eslint/scope-manager@5.62.0: resolution: {integrity: sha512-VXuvVvZeQCQb5Zgf4HAxc04q5j+WrNAtNh9OwCsCgpKqESMTu3tF/jhZ3xG6T4NZwWl65Bg8KuS2uEvhSfLl0w==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} @@ -14550,18 +14800,38 @@ packages: - supports-color dev: true - /@typescript-eslint/types@5.62.0: - resolution: {integrity: sha512-87NVngcbVXUahrRTqIK27gD2t5Cu1yuCXxbLcFtCzZGlfyVWWh8mLHkoxzjsB6DDNnvdL+fW8MiwPEJyGJQDgQ==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - dev: true - - /@typescript-eslint/types@7.7.1: - resolution: {integrity: sha512-AmPmnGW1ZLTpWa+/2omPrPfR7BcbUU4oha5VIbSbS1a1Tv966bklvLNXxp3mrbc+P2j4MNOTfDffNsk4o0c6/w==} + /@typescript-eslint/type-utils@7.7.1(eslint@8.57.1)(typescript@5.9.2): + resolution: {integrity: sha512-ZksJLW3WF7o75zaBPScdW1Gbkwhd/lyeXGf1kQCxJaOeITscoSl0MjynVvCzuV5boUz/3fOI06Lz8La55mu29Q==} engines: {node: ^18.18.0 || >=20.0.0} - dev: true - - /@typescript-eslint/typescript-estree@5.62.0(typescript@5.5.3): - resolution: {integrity: sha512-CmcQ6uY7b9y694lKdRB8FEel7JbU/40iSAPomu++SjLMntB+2Leay2LO6i8VnJk58MtE9/nQSFIH6jpyRWyYzA==} + peerDependencies: + eslint: ^8.56.0 + typescript: '*' + peerDependenciesMeta: + typescript: + optional: true + dependencies: + '@typescript-eslint/typescript-estree': 7.7.1(typescript@5.9.2) + '@typescript-eslint/utils': 7.7.1(eslint@8.57.1)(typescript@5.9.2) + debug: 4.3.7 + eslint: 8.57.1 + ts-api-utils: 1.3.0(typescript@5.9.2) + typescript: 5.9.2 + transitivePeerDependencies: + - supports-color + dev: true + + /@typescript-eslint/types@5.62.0: + resolution: {integrity: sha512-87NVngcbVXUahrRTqIK27gD2t5Cu1yuCXxbLcFtCzZGlfyVWWh8mLHkoxzjsB6DDNnvdL+fW8MiwPEJyGJQDgQ==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + dev: true + + /@typescript-eslint/types@7.7.1: + resolution: {integrity: sha512-AmPmnGW1ZLTpWa+/2omPrPfR7BcbUU4oha5VIbSbS1a1Tv966bklvLNXxp3mrbc+P2j4MNOTfDffNsk4o0c6/w==} + engines: {node: ^18.18.0 || >=20.0.0} + dev: true + + /@typescript-eslint/typescript-estree@5.62.0(typescript@5.5.3): + resolution: {integrity: sha512-CmcQ6uY7b9y694lKdRB8FEel7JbU/40iSAPomu++SjLMntB+2Leay2LO6i8VnJk58MtE9/nQSFIH6jpyRWyYzA==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} peerDependencies: typescript: '*' @@ -14581,6 +14851,27 @@ packages: - supports-color dev: true + /@typescript-eslint/typescript-estree@5.62.0(typescript@5.9.2): + resolution: {integrity: sha512-CmcQ6uY7b9y694lKdRB8FEel7JbU/40iSAPomu++SjLMntB+2Leay2LO6i8VnJk58MtE9/nQSFIH6jpyRWyYzA==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + peerDependencies: + typescript: '*' + peerDependenciesMeta: + typescript: + optional: true + dependencies: + '@typescript-eslint/types': 5.62.0 + '@typescript-eslint/visitor-keys': 5.62.0 + debug: 4.3.7 + globby: 11.1.0 + is-glob: 4.0.3 + semver: 7.6.3 + tsutils: 3.21.0(typescript@5.9.2) + typescript: 5.9.2 + transitivePeerDependencies: + - supports-color + dev: true + /@typescript-eslint/typescript-estree@7.7.1(typescript@5.5.3): resolution: {integrity: sha512-CXe0JHCXru8Fa36dteXqmH2YxngKJjkQLjxzoj6LYwzZ7qZvgsLSc+eqItCrqIop8Vl2UKoAi0StVWu97FQZIQ==} engines: {node: ^18.18.0 || >=20.0.0} @@ -14603,6 +14894,28 @@ packages: - supports-color dev: true + /@typescript-eslint/typescript-estree@7.7.1(typescript@5.9.2): + resolution: {integrity: sha512-CXe0JHCXru8Fa36dteXqmH2YxngKJjkQLjxzoj6LYwzZ7qZvgsLSc+eqItCrqIop8Vl2UKoAi0StVWu97FQZIQ==} + engines: {node: ^18.18.0 || >=20.0.0} + peerDependencies: + typescript: '*' + peerDependenciesMeta: + typescript: + optional: true + dependencies: + '@typescript-eslint/types': 7.7.1 + '@typescript-eslint/visitor-keys': 7.7.1 + debug: 4.3.7 + globby: 11.1.0 + is-glob: 4.0.3 + minimatch: 9.0.5 + semver: 7.6.3 + ts-api-utils: 1.3.0(typescript@5.9.2) + typescript: 5.9.2 + transitivePeerDependencies: + - supports-color + dev: true + /@typescript-eslint/utils@5.62.0(eslint@8.57.0)(typescript@5.5.3): resolution: {integrity: sha512-n8oxjeb5aIbPFEtmQxQYOLI0i9n5ySBEY/ZEHHZqKQSFnxio1rv6dthascc9dLuwrL0RC5mPCxB7vnAVGAYWAQ==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} @@ -14643,6 +14956,26 @@ packages: - typescript dev: true + /@typescript-eslint/utils@5.62.0(eslint@8.57.1)(typescript@5.9.2): + resolution: {integrity: sha512-n8oxjeb5aIbPFEtmQxQYOLI0i9n5ySBEY/ZEHHZqKQSFnxio1rv6dthascc9dLuwrL0RC5mPCxB7vnAVGAYWAQ==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + peerDependencies: + eslint: ^6.0.0 || ^7.0.0 || ^8.0.0 + dependencies: + '@eslint-community/eslint-utils': 4.4.1(eslint@8.57.1) + '@types/json-schema': 7.0.15 + '@types/semver': 7.5.8 + '@typescript-eslint/scope-manager': 5.62.0 + '@typescript-eslint/types': 5.62.0 + '@typescript-eslint/typescript-estree': 5.62.0(typescript@5.9.2) + eslint: 8.57.1 + eslint-scope: 5.1.1 + semver: 7.6.3 + transitivePeerDependencies: + - supports-color + - typescript + dev: true + /@typescript-eslint/utils@7.7.1(eslint@8.57.1)(typescript@5.5.3): resolution: {integrity: sha512-QUvBxPEaBXf41ZBbaidKICgVL8Hin0p6prQDu6bbetWo39BKbWJxRsErOzMNT1rXvTll+J7ChrbmMCXM9rsvOQ==} engines: {node: ^18.18.0 || >=20.0.0} @@ -14662,6 +14995,25 @@ packages: - typescript dev: true + /@typescript-eslint/utils@7.7.1(eslint@8.57.1)(typescript@5.9.2): + resolution: {integrity: sha512-QUvBxPEaBXf41ZBbaidKICgVL8Hin0p6prQDu6bbetWo39BKbWJxRsErOzMNT1rXvTll+J7ChrbmMCXM9rsvOQ==} + engines: {node: ^18.18.0 || >=20.0.0} + peerDependencies: + eslint: ^8.56.0 + dependencies: + '@eslint-community/eslint-utils': 4.4.1(eslint@8.57.1) + '@types/json-schema': 7.0.15 + '@types/semver': 7.5.8 + '@typescript-eslint/scope-manager': 7.7.1 + '@typescript-eslint/types': 7.7.1 + '@typescript-eslint/typescript-estree': 7.7.1(typescript@5.9.2) + eslint: 8.57.1 + semver: 7.6.3 + transitivePeerDependencies: + - supports-color + - typescript + dev: true + /@typescript-eslint/visitor-keys@5.62.0: resolution: {integrity: sha512-07ny+LHRzQXepkGg6w0mFY41fVUNBrL2Roj/++7V1txKugfjm/Ci/qSND03r2RhlJhJYMcTn9AhhSSqQp0Ysyw==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} @@ -15234,6 +15586,13 @@ packages: transitivePeerDependencies: - debug + /axios@0.21.4(debug@4.4.0): + resolution: {integrity: sha512-ut5vewkiu8jjGBdqpM44XxjuCjq9LAKeHVmoVfHVzy8eHgxxq8SbAVQNovDA8mVi05kP0Ea/n/UzcSHcTJQfNg==} + dependencies: + follow-redirects: 1.15.9(debug@4.4.0) + transitivePeerDependencies: + - debug + /axios@0.25.0: resolution: {integrity: sha512-cD8FOb0tRH3uuEe6+evtAbgJtfxr7ly3fQjYcMcuPlgkwVS9xboaVIpcDV+cYQe+yGykgwZCs1pzjntcGa6l5g==} dependencies: @@ -15415,6 +15774,19 @@ packages: transitivePeerDependencies: - typescript + /bip32@5.0.0-rc.0(typescript@5.9.2): + resolution: {integrity: sha512-5hVFGrdCnF8GB1Lj2eEo4PRE7+jp+3xBLnfNjydivOkMvKmUKeJ9GG8uOy8prmWl3Oh154uzgfudR1FRkNBudA==} + engines: {node: '>=18.0.0'} + dependencies: + '@noble/hashes': 1.7.1 + '@scure/base': 1.2.4 + uint8array-tools: 0.0.8 + valibot: 0.37.0(typescript@5.9.2) + wif: 5.0.0 + transitivePeerDependencies: + - typescript + dev: true + /bip39@3.0.4: resolution: {integrity: sha512-YZKQlb752TrUWqHWj7XAwCSjYEgGAk+/Aas3V7NyjQeZYsztO8JnQUaCWhcnL4T+jL8nvB8typ2jRPzTlgugNw==} dependencies: @@ -15790,7 +16162,6 @@ packages: dependencies: es-errors: 1.3.0 function-bind: 1.1.2 - dev: false /call-bind@1.0.5: resolution: {integrity: sha512-C3nQxfFZxFRVoJoGKKI8y3MOEo129NQ+FgQ08iye+Mk4zNZZGdjfs06bVTr+DBSlA66Q2VEcMki/cUCP4SercQ==} @@ -15814,10 +16185,9 @@ packages: engines: {node: '>= 0.4'} dependencies: call-bind-apply-helpers: 1.0.2 - es-define-property: 1.0.0 - get-intrinsic: 1.2.4 + es-define-property: 1.0.1 + get-intrinsic: 1.3.0 set-function-length: 1.2.2 - dev: false /call-bound@1.0.4: resolution: {integrity: sha512-+ys997U96po4Kx/ABpBCqhA9EuxJaQWDQg7295H4hBphv3IZg0boBKuwYpt4YXp6MZ5AmZQnU/tyMTlRpaSejg==} @@ -15960,7 +16330,7 @@ packages: engines: {node: '>= 8.10.0'} dependencies: anymatch: 3.1.3 - braces: 3.0.2 + braces: 3.0.3 glob-parent: 5.1.2 is-binary-path: 2.1.0 is-glob: 4.0.3 @@ -15974,7 +16344,7 @@ packages: engines: {node: '>= 8.10.0'} dependencies: anymatch: 3.1.3 - braces: 3.0.2 + braces: 3.0.3 glob-parent: 5.1.2 is-binary-path: 2.1.0 is-glob: 4.0.3 @@ -15983,18 +16353,11 @@ packages: optionalDependencies: fsevents: 2.3.3 - /chokidar@4.0.1: - resolution: {integrity: sha512-n8enUVCED/KVRQlab1hr3MVpcVMvxtZjmEa956u+4YijlmQED223XMSYj2tLuKvr4jcCTzNNMpQDUer72MMmzA==} - engines: {node: '>= 14.16.0'} - dependencies: - readdirp: 4.0.1 - /chokidar@4.0.3: resolution: {integrity: sha512-Qgzu8kfBvo+cA4962jnP1KkS6Dop5NS6g7R5LFYJr4b8Ub94PPQXUksCw9PvXoeXPRRddRNC5C1JQUR2SMGtnA==} engines: {node: '>= 14.16.0'} dependencies: readdirp: 4.0.1 - dev: true /chownr@1.1.4: resolution: {integrity: sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==} @@ -16385,6 +16748,22 @@ packages: typescript: 5.5.3 dev: true + /cosmiconfig@8.3.6(typescript@5.9.2): + resolution: {integrity: sha512-kcZ6+W5QzcJ3P1Mt+83OUv/oHFqZHIx8DuxG6eZ5RGMERoLqp4BuGjhHLYGK+Kf5XVkQvqBSmAy/nGWN3qDgEA==} + engines: {node: '>=14'} + peerDependencies: + typescript: '>=4.9.5' + peerDependenciesMeta: + typescript: + optional: true + dependencies: + import-fresh: 3.3.0 + js-yaml: 4.1.0 + parse-json: 5.2.0 + path-type: 4.0.0 + typescript: 5.9.2 + dev: true + /cpu-features@0.0.10: resolution: {integrity: sha512-9IkYqtX3YHPCzoVg1Py+o9057a3i0fp7S530UWokCSaFVTc7CwXPRiOjRjBQQ18ZCNafx78YfnG+HALxtVmOGA==} engines: {node: '>=10.0.0'} @@ -16675,9 +17054,9 @@ packages: resolution: {integrity: sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==} engines: {node: '>= 0.4'} dependencies: - es-define-property: 1.0.0 + es-define-property: 1.0.1 es-errors: 1.3.0 - gopd: 1.0.1 + gopd: 1.2.0 /define-properties@1.2.1: resolution: {integrity: sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==} @@ -16896,7 +17275,6 @@ packages: call-bind-apply-helpers: 1.0.2 es-errors: 1.3.0 gopd: 1.2.0 - dev: false /eastasianwidth@0.2.0: resolution: {integrity: sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==} @@ -17097,7 +17475,6 @@ packages: /es-define-property@1.0.1: resolution: {integrity: sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==} engines: {node: '>= 0.4'} - dev: false /es-errors@1.3.0: resolution: {integrity: sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==} @@ -17127,7 +17504,6 @@ packages: engines: {node: '>= 0.4'} dependencies: es-errors: 1.3.0 - dev: false /es-set-tostringtag@2.0.2: resolution: {integrity: sha512-BuDyupZt65P9D2D2vA/zqcI3G5xRsklm5N3xCwuiy+/vKy8i0ifdsQP1sLgO4tZDSCaQUSnmC48khknGMV3D2Q==} @@ -17305,7 +17681,7 @@ packages: eslint-plugin-promise: ^6.0.0 dependencies: eslint: 8.57.1 - eslint-plugin-import: 2.29.1(@typescript-eslint/parser@7.7.1)(eslint-import-resolver-typescript@3.6.1)(eslint@8.57.1) + eslint-plugin-import: 2.29.1(@typescript-eslint/parser@7.7.1)(eslint@8.57.1) eslint-plugin-n: 16.6.2(eslint@8.57.1) eslint-plugin-promise: 6.1.1(eslint@8.57.1) dev: true @@ -17331,7 +17707,7 @@ packages: enhanced-resolve: 5.16.0 eslint: 8.57.1 eslint-module-utils: 2.8.1(@typescript-eslint/parser@7.7.1)(eslint-import-resolver-typescript@3.6.1)(eslint@8.57.1) - eslint-plugin-import: 2.29.1(@typescript-eslint/parser@7.7.1)(eslint-import-resolver-typescript@3.6.1)(eslint@8.57.1) + eslint-plugin-import: 2.29.1(@typescript-eslint/parser@7.7.1)(eslint@8.57.1) fast-glob: 3.3.2 get-tsconfig: 4.7.3 is-core-module: 2.13.1 @@ -17343,7 +17719,7 @@ packages: - supports-color dev: true - /eslint-module-utils@2.8.0(@typescript-eslint/parser@7.7.1)(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.1)(eslint@8.57.1): + /eslint-module-utils@2.8.0(@typescript-eslint/parser@7.7.1)(eslint-import-resolver-node@0.3.9)(eslint@8.57.1): resolution: {integrity: sha512-aWajIYfsqCKRDgUfjEXNN/JlrzauMuSEy5sbd7WXbtW3EH6A6MpwEh42c7qD+MqQo9QMJ6fWLAeIJynx0g6OAw==} engines: {node: '>=4'} peerDependencies: @@ -17364,11 +17740,10 @@ packages: eslint-import-resolver-webpack: optional: true dependencies: - '@typescript-eslint/parser': 7.7.1(eslint@8.57.1)(typescript@5.5.3) + '@typescript-eslint/parser': 7.7.1(eslint@8.57.1)(typescript@5.9.2) debug: 3.2.7 eslint: 8.57.1 eslint-import-resolver-node: 0.3.9 - eslint-import-resolver-typescript: 3.6.1(@typescript-eslint/parser@7.7.1)(eslint-plugin-import@2.29.1)(eslint@8.57.1) transitivePeerDependencies: - supports-color dev: true @@ -17454,7 +17829,7 @@ packages: regexpp: 3.2.0 dev: true - /eslint-plugin-import@2.29.1(@typescript-eslint/parser@7.7.1)(eslint-import-resolver-typescript@3.6.1)(eslint@8.57.1): + /eslint-plugin-import@2.29.1(@typescript-eslint/parser@7.7.1)(eslint@8.57.1): resolution: {integrity: sha512-BbPC0cuExzhiMo4Ff1BTVwHpjjv28C5R+btTOGaCRC7UEz801up0JadwkeSk5Ued6TG34uaczuVuH6qyy5YUxw==} engines: {node: '>=4'} peerDependencies: @@ -17464,7 +17839,7 @@ packages: '@typescript-eslint/parser': optional: true dependencies: - '@typescript-eslint/parser': 7.7.1(eslint@8.57.1)(typescript@5.5.3) + '@typescript-eslint/parser': 7.7.1(eslint@8.57.1)(typescript@5.9.2) array-includes: 3.1.7 array.prototype.findlastindex: 1.2.3 array.prototype.flat: 1.3.2 @@ -17473,7 +17848,7 @@ packages: doctrine: 2.1.0 eslint: 8.57.1 eslint-import-resolver-node: 0.3.9 - eslint-module-utils: 2.8.0(@typescript-eslint/parser@7.7.1)(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.1)(eslint@8.57.1) + eslint-module-utils: 2.8.0(@typescript-eslint/parser@7.7.1)(eslint-import-resolver-node@0.3.9)(eslint@8.57.1) hasown: 2.0.0 is-core-module: 2.13.1 is-glob: 4.0.3 @@ -17515,7 +17890,7 @@ packages: - typescript dev: true - /eslint-plugin-jest@27.6.3(@typescript-eslint/eslint-plugin@7.7.1)(eslint@8.57.1)(typescript@5.5.3): + /eslint-plugin-jest@27.6.3(@typescript-eslint/eslint-plugin@7.7.1)(eslint@8.57.1)(typescript@5.9.2): resolution: {integrity: sha512-+YsJFVH6R+tOiO3gCJon5oqn4KWc+mDq2leudk8mrp8RFubLOo9CVyi3cib4L7XMpxExmkmBZQTPDYVBzgpgOA==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} peerDependencies: @@ -17528,8 +17903,8 @@ packages: jest: optional: true dependencies: - '@typescript-eslint/eslint-plugin': 7.7.1(@typescript-eslint/parser@7.7.1)(eslint@8.57.1)(typescript@5.5.3) - '@typescript-eslint/utils': 5.62.0(eslint@8.57.1)(typescript@5.5.3) + '@typescript-eslint/eslint-plugin': 7.7.1(@typescript-eslint/parser@7.7.1)(eslint@8.57.1)(typescript@5.9.2) + '@typescript-eslint/utils': 5.62.0(eslint@8.57.1)(typescript@5.9.2) eslint: 8.57.1 transitivePeerDependencies: - supports-color @@ -17973,6 +18348,7 @@ packages: /ethereumjs-abi@0.6.8: resolution: {integrity: sha512-Tx0r/iXI6r+lRsdvkFDlut0N08jWMnKRZ6Gkq+Nmw75lZe4e6o3EkSnkaBP5NF6+m5PTGAr9JP43N3LyeoglsA==} + deprecated: This library has been deprecated and usage is discouraged. dependencies: bn.js: 4.12.0 ethereumjs-util: 6.2.1 @@ -17983,7 +18359,7 @@ packages: '@types/bn.js': 4.11.6 bn.js: 4.12.0 create-hash: 1.2.0 - elliptic: 6.5.4 + elliptic: 6.6.1 ethereum-cryptography: 0.1.3 ethjs-util: 0.1.6 rlp: 2.2.7 @@ -18440,8 +18816,8 @@ packages: /fn.name@1.1.0: resolution: {integrity: sha512-GRnmB5gPyJpAhTQdSZTSp9uaPSvl09KoYcMQtsB9rQoOmzs9dH6ffeccH+Z+cv6P68Hu5bC6JjRh4Ah/mHSNRw==} - /follow-redirects@1.15.6(debug@4.3.5): - resolution: {integrity: sha512-wWN62YITEaOpSK584EZXJafH1AGpO8RVgElfkuXbTOrPX4fIfOyEpW/CsiNd8JdYrAoOvafRTOEnvsO++qCqFA==} + /follow-redirects@1.15.9(debug@4.3.4): + resolution: {integrity: sha512-gew4GsXizNgdoRyqmyfMHyAmXsZDk6mHkSxZFCzW9gwlbtOW44CDtYavM+y+72qD/Vq2l550kMF52DT8fOLJqQ==} engines: {node: '>=4.0'} peerDependencies: debug: '*' @@ -18449,9 +18825,10 @@ packages: debug: optional: true dependencies: - debug: 4.3.5 + debug: 4.3.4(supports-color@8.1.1) + dev: true - /follow-redirects@1.15.9(debug@4.3.4): + /follow-redirects@1.15.9(debug@4.3.5): resolution: {integrity: sha512-gew4GsXizNgdoRyqmyfMHyAmXsZDk6mHkSxZFCzW9gwlbtOW44CDtYavM+y+72qD/Vq2l550kMF52DT8fOLJqQ==} engines: {node: '>=4.0'} peerDependencies: @@ -18460,10 +18837,9 @@ packages: debug: optional: true dependencies: - debug: 4.3.4(supports-color@8.1.1) - dev: true + debug: 4.3.5 - /follow-redirects@1.15.9(debug@4.3.5): + /follow-redirects@1.15.9(debug@4.3.7): resolution: {integrity: sha512-gew4GsXizNgdoRyqmyfMHyAmXsZDk6mHkSxZFCzW9gwlbtOW44CDtYavM+y+72qD/Vq2l550kMF52DT8fOLJqQ==} engines: {node: '>=4.0'} peerDependencies: @@ -18472,9 +18848,9 @@ packages: debug: optional: true dependencies: - debug: 4.3.5 + debug: 4.3.7 - /follow-redirects@1.15.9(debug@4.3.7): + /follow-redirects@1.15.9(debug@4.4.0): resolution: {integrity: sha512-gew4GsXizNgdoRyqmyfMHyAmXsZDk6mHkSxZFCzW9gwlbtOW44CDtYavM+y+72qD/Vq2l550kMF52DT8fOLJqQ==} engines: {node: '>=4.0'} peerDependencies: @@ -18483,7 +18859,7 @@ packages: debug: optional: true dependencies: - debug: 4.3.7 + debug: 4.4.0(supports-color@8.1.1) /for-each@0.3.3: resolution: {integrity: sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==} @@ -18724,7 +19100,6 @@ packages: has-symbols: 1.1.0 hasown: 2.0.2 math-intrinsics: 1.1.0 - dev: false /get-package-type@0.1.0: resolution: {integrity: sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q==} @@ -18741,7 +19116,6 @@ packages: dependencies: dunder-proto: 1.0.1 es-object-atoms: 1.1.1 - dev: false /get-stdin@9.0.0: resolution: {integrity: sha512-dVKBjfWisLAicarI2Sf+JuBE/DghV4UzNAVe9yhEJuzeREd3JhOTE9cUaJTeSa77fsbQUK3pcOpJfM59+VKZaA==} @@ -18833,7 +19207,6 @@ packages: minipass: 7.1.2 package-json-from-dist: 1.0.0 path-scurry: 1.11.1 - dev: true /glob@11.0.1: resolution: {integrity: sha512-zrQDm8XPnYEKawJScsnM0QzobJxlT/kHOOlRTio8IH/GrmxRE5fjllkzdaHclIuNjUQTJYH2xHNIGfdpJkDJUw==} @@ -18978,7 +19351,6 @@ packages: /gopd@1.2.0: resolution: {integrity: sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==} engines: {node: '>= 0.4'} - dev: false /got@11.8.6: resolution: {integrity: sha512-6tfZ91bOr7bOXnK7PRDCGBLa1H4U080YHNaAQ2KsMGlLEzRbk44nsZF2E1IeRc3vtJHPVbKCYgdFbaGO2ljd8g==} @@ -19056,6 +19428,18 @@ packages: sparse-array: 1.3.2 uint8arrays: 3.1.1 + /handlebars@4.7.8: + resolution: {integrity: sha512-vafaFqs8MZkRrSX7sFVUdo3ap/eNiLnb4IakshzvP56X5Nr1iGKAIqdX6tMlm6HcNRIkr6AxO5jFEoJzzpT8aQ==} + engines: {node: '>=0.4.7'} + hasBin: true + dependencies: + minimist: 1.2.8 + neo-async: 2.6.2 + source-map: 0.6.1 + wordwrap: 1.0.0 + optionalDependencies: + uglify-js: 3.19.3 + /har-schema@2.0.0: resolution: {integrity: sha512-Oqluz6zhGX8cyRaTQlFMPw80bSJVG2x/cFb8ZPhUILGgHka9SsokCCOQgpveePerqidZOrT14ipqfJb7ILcW5Q==} engines: {node: '>=4'} @@ -19180,17 +19564,17 @@ packages: '@ethersproject/transactions': 5.7.0 '@ethersproject/wallet': 5.7.0 '@types/qs': 6.9.15 - axios: 0.21.4(debug@4.3.5) + axios: 0.21.4(debug@4.4.0) chalk: 4.1.2 chokidar: 3.6.0 - debug: 4.3.5 + debug: 4.4.0(supports-color@8.1.1) enquirer: 2.4.1 ethers: 5.7.2 - form-data: 4.0.0 + form-data: 4.0.1 fs-extra: 10.1.0 match-all: 1.2.6 murmur-128: 0.2.1 - qs: 6.12.2 + qs: 6.13.0 zksync-ethers: 5.9.0(ethers@5.7.2) transitivePeerDependencies: - bufferutil @@ -19233,16 +19617,16 @@ packages: '@nomicfoundation/ethereumjs-util': 9.0.4 '@nomicfoundation/solidity-analyzer': 0.1.1 '@sentry/node': 5.30.0 - '@types/bn.js': 5.1.5 + '@types/bn.js': 5.1.6 '@types/lru-cache': 5.1.1 adm-zip: 0.4.16 aggregate-error: 3.1.0 ansi-escapes: 4.3.2 boxen: 5.1.2 chalk: 2.4.2 - chokidar: 4.0.1 + chokidar: 4.0.3 ci-info: 2.0.0 - debug: 4.3.5 + debug: 4.4.0(supports-color@8.1.1) enquirer: 2.4.1 env-paths: 2.2.1 ethereum-cryptography: 1.2.0 @@ -19253,7 +19637,7 @@ packages: glob: 7.2.0 immutable: 4.3.4 io-ts: 1.10.4 - json-stream-stringify: 3.1.4 + json-stream-stringify: 3.1.6 keccak: 3.0.4 lodash: 4.17.21 mnemonist: 0.38.5 @@ -19262,13 +19646,77 @@ packages: raw-body: 2.5.2 resolve: 1.17.0 semver: 6.3.1 - solc: 0.8.26(debug@4.3.5) + solc: 0.8.26(debug@4.4.0) source-map-support: 0.5.21 stacktrace-parser: 0.1.10 ts-node: 10.9.2(@swc/core@1.4.0)(@types/node@18.18.14)(typescript@5.5.3) tsort: 0.0.1 typescript: 5.5.3 - undici: 5.28.2 + undici: 5.28.4 + uuid: 8.3.2 + ws: 7.5.10 + transitivePeerDependencies: + - bufferutil + - c-kzg + - supports-color + - utf-8-validate + + /hardhat@2.22.12(ts-node@10.9.2)(typescript@5.9.2): + resolution: {integrity: sha512-yok65M+LsOeTBHQsjg//QreGCyrsaNmeLVzhTFqlOvZ4ZE5y69N0wRxH1b2BC9dGK8S8OPUJMNiL9X0RAvbm8w==} + hasBin: true + peerDependencies: + ts-node: '*' + typescript: '*' + peerDependenciesMeta: + ts-node: + optional: true + typescript: + optional: true + dependencies: + '@ethersproject/abi': 5.7.0 + '@metamask/eth-sig-util': 4.0.1 + '@nomicfoundation/edr': 0.6.2 + '@nomicfoundation/ethereumjs-common': 4.0.4 + '@nomicfoundation/ethereumjs-tx': 5.0.4 + '@nomicfoundation/ethereumjs-util': 9.0.4 + '@nomicfoundation/solidity-analyzer': 0.1.1 + '@sentry/node': 5.30.0 + '@types/bn.js': 5.1.6 + '@types/lru-cache': 5.1.1 + adm-zip: 0.4.16 + aggregate-error: 3.1.0 + ansi-escapes: 4.3.2 + boxen: 5.1.2 + chalk: 2.4.2 + chokidar: 4.0.3 + ci-info: 2.0.0 + debug: 4.4.0(supports-color@8.1.1) + enquirer: 2.4.1 + env-paths: 2.2.1 + ethereum-cryptography: 1.2.0 + ethereumjs-abi: 0.6.8 + find-up: 2.1.0 + fp-ts: 1.19.3 + fs-extra: 7.0.1 + glob: 7.2.0 + immutable: 4.3.4 + io-ts: 1.10.4 + json-stream-stringify: 3.1.6 + keccak: 3.0.4 + lodash: 4.17.21 + mnemonist: 0.38.5 + mocha: 10.2.0 + p-map: 4.0.0 + raw-body: 2.5.2 + resolve: 1.17.0 + semver: 6.3.1 + solc: 0.8.26(debug@4.4.0) + source-map-support: 0.5.21 + stacktrace-parser: 0.1.10 + ts-node: 10.9.2(@types/node@18.18.14)(typescript@5.9.2) + tsort: 0.0.1 + typescript: 5.9.2 + undici: 5.28.4 uuid: 8.3.2 ws: 7.5.10 transitivePeerDependencies: @@ -19297,7 +19745,7 @@ packages: /has-property-descriptors@1.0.2: resolution: {integrity: sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==} dependencies: - es-define-property: 1.0.0 + es-define-property: 1.0.1 /has-proto@1.0.1: resolution: {integrity: sha512-7qE+iP+O+bgF9clE5+UoBFzE65mlBiVj3tKCrlNQ0Ogwm0BjpT/gK4SlLYDMybDh5I3TCTKnPPa0oMG7JDYrhg==} @@ -19314,7 +19762,6 @@ packages: /has-symbols@1.1.0: resolution: {integrity: sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==} engines: {node: '>= 0.4'} - dev: false /has-tostringtag@1.0.0: resolution: {integrity: sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ==} @@ -19353,7 +19800,6 @@ packages: engines: {node: '>= 0.4'} dependencies: function-bind: 1.1.2 - dev: false /he@1.2.0: resolution: {integrity: sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==} @@ -19455,7 +19901,7 @@ packages: engines: {node: '>= 6'} dependencies: agent-base: 6.0.2 - debug: 4.3.7 + debug: 4.4.0(supports-color@8.1.1) transitivePeerDependencies: - supports-color @@ -19554,6 +20000,7 @@ packages: /inflight@1.0.6: resolution: {integrity: sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==} + deprecated: This module is not supported, and leaks memory. Do not use it. Check out lru-cache if you want a good and tested way to coalesce async requests by a key value, which is much more comprehensive and powerful. dependencies: once: 1.4.0 wrappy: 1.0.2 @@ -19749,6 +20196,10 @@ packages: side-channel: 1.0.4 dev: true + /interpret@1.4.0: + resolution: {integrity: sha512-agE4QfB2Lkp9uICn7BAqoscw4SZP9kTE2hxiFI3jBPmXJfdqiahTbUuKGsMoN2GtqL9AxhYioAcVvgsb1HvRbA==} + engines: {node: '>= 0.10'} + /invariant@2.2.4: resolution: {integrity: sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA==} dependencies: @@ -20114,7 +20565,7 @@ packages: peerDependencies: ws: '*' dependencies: - ws: 8.18.2 + ws: 8.18.2(bufferutil@4.0.8)(utf-8-validate@5.0.10) dev: false /isstream@0.1.2: @@ -20221,7 +20672,6 @@ packages: '@isaacs/cliui': 8.0.2 optionalDependencies: '@pkgjs/parseargs': 0.11.0 - dev: true /jackspeak@4.0.1: resolution: {integrity: sha512-cub8rahkh0Q/bw1+GxP7aeSe29hHHn2V4m29nnDlvCdlgU+3UGxkZp7Z53jLUdpX3jdTO0nJZUDl3xvbWc2Xog==} @@ -20298,34 +20748,6 @@ packages: - babel-plugin-macros - supports-color - /jest-cli@29.7.0(@types/node@18.18.14): - resolution: {integrity: sha512-OVVobw2IubN/GSYsxETi+gOe7Ka59EFMR/twOU3Jb2GnKKeMGJB5SGUUrEz3SFVmJASUdZUzy83sLNNQ2gZslg==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - hasBin: true - peerDependencies: - node-notifier: ^8.0.1 || ^9.0.0 || ^10.0.0 - peerDependenciesMeta: - node-notifier: - optional: true - dependencies: - '@jest/core': 29.7.0(ts-node@10.9.2) - '@jest/test-result': 29.7.0 - '@jest/types': 29.6.3 - chalk: 4.1.2 - create-jest: 29.7.0(@types/node@18.18.14)(ts-node@10.9.2) - exit: 0.1.2 - import-local: 3.1.0 - jest-config: 29.7.0(@types/node@18.18.14)(ts-node@10.9.2) - jest-util: 29.7.0 - jest-validate: 29.7.0 - yargs: 17.7.2 - transitivePeerDependencies: - - '@types/node' - - babel-plugin-macros - - supports-color - - ts-node - dev: true - /jest-cli@29.7.0(@types/node@18.18.14)(ts-node@10.9.2): resolution: {integrity: sha512-OVVobw2IubN/GSYsxETi+gOe7Ka59EFMR/twOU3Jb2GnKKeMGJB5SGUUrEz3SFVmJASUdZUzy83sLNNQ2gZslg==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} @@ -20456,7 +20878,7 @@ packages: pretty-format: 29.7.0 slash: 3.0.0 strip-json-comments: 3.1.1 - ts-node: 10.9.2(@types/node@22.15.3)(typescript@5.5.3) + ts-node: 10.9.2(@types/node@22.15.3)(typescript@5.9.2) transitivePeerDependencies: - babel-plugin-macros - supports-color @@ -20738,27 +21160,6 @@ packages: merge-stream: 2.0.0 supports-color: 8.1.1 - /jest@29.7.0(@types/node@18.18.14): - resolution: {integrity: sha512-NIy3oAFp9shda19hy4HK0HRTWKtPJmGdnvywu01nOqNC2vZg+Z+fvJDxpMQA88eb2I9EcafcdjYgsDthnYTvGw==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - hasBin: true - peerDependencies: - node-notifier: ^8.0.1 || ^9.0.0 || ^10.0.0 - peerDependenciesMeta: - node-notifier: - optional: true - dependencies: - '@jest/core': 29.7.0(ts-node@10.9.2) - '@jest/types': 29.6.3 - import-local: 3.1.0 - jest-cli: 29.7.0(@types/node@18.18.14) - transitivePeerDependencies: - - '@types/node' - - babel-plugin-macros - - supports-color - - ts-node - dev: true - /jest@29.7.0(@types/node@18.18.14)(ts-node@10.9.2): resolution: {integrity: sha512-NIy3oAFp9shda19hy4HK0HRTWKtPJmGdnvywu01nOqNC2vZg+Z+fvJDxpMQA88eb2I9EcafcdjYgsDthnYTvGw==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} @@ -20885,8 +21286,8 @@ packages: object-keys: 1.1.1 dev: false - /json-stream-stringify@3.1.4: - resolution: {integrity: sha512-oGoz05ft577LolnXFQHD2CjnXDxXVA5b8lHwfEZgRXQUZeCMo6sObQQRq+NXuHQ3oTeMZHHmmPY2rjVwyqR62A==} + /json-stream-stringify@3.1.6: + resolution: {integrity: sha512-x7fpwxOkbhFCaJDJ8vb1fBY3DdSa4AlITaz+HHILQJzdPMnHEFjxPwVUi1ALIbcIxDE0PNe/0i7frnY8QnBQog==} engines: {node: '>=7.10.1'} /json-stringify-safe@5.0.1: @@ -20987,7 +21388,7 @@ packages: requiresBuild: true dependencies: node-addon-api: 2.0.2 - node-gyp-build: 4.8.0 + node-gyp-build: 4.8.2 readable-stream: 3.6.2 /keyv@4.5.4: @@ -21305,7 +21706,6 @@ packages: /lru-cache@10.4.3: resolution: {integrity: sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==} - dev: true /lru-cache@11.0.0: resolution: {integrity: sha512-Qv32eSV1RSCfhY3fpPE2GNZ8jgM9X7rdAfemLWqTUxwiyIC4jJ6Sy0fZ8H+oLWevO6i4/bizg7c8d8i6bxrzbA==} @@ -21370,7 +21770,6 @@ packages: /math-intrinsics@1.1.0: resolution: {integrity: sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==} engines: {node: '>= 0.4'} - dev: false /mcl-wasm@0.7.9: resolution: {integrity: sha512-iJIUcQWA88IJB/5L15GnJVnSQJmf/YaxxV6zRavv83HILHaJQb6y0iFyDMdDO0gN8X37tdxmAOrH/P8B6RB8sQ==} @@ -21831,6 +22230,9 @@ packages: resolution: {integrity: sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==} engines: {node: '>= 0.6'} + /neo-async@2.6.2: + resolution: {integrity: sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==} + /next-tick@1.1.0: resolution: {integrity: sha512-CXdUiJembsNjuToQvxayPZF9Vqht7hewsvy2sOWafLvi2awflj9mOC6bHIg50orX8IJvWKY9wYQ/zB2kogPslQ==} @@ -21884,10 +22286,6 @@ packages: dev: true optional: true - /node-gyp-build@4.8.0: - resolution: {integrity: sha512-u6fs2AEUljNho3EYTJNBfImO5QTo/J/1Etd+NVdCj7qWKUSN/bSLkZwhDv7I+w/MSC6qJ4cknepkAYykDdK8og==} - hasBin: true - /node-gyp-build@4.8.2: resolution: {integrity: sha512-IRUxE4BVsHWXkV/SFOut4qTlagw2aM8T5/vnTsmrHJvVoKueJHRc/JaFND7QDDc61kLYUJ6qlZM3sqTSyx2dTw==} hasBin: true @@ -22379,7 +22777,6 @@ packages: dependencies: lru-cache: 10.4.3 minipass: 7.1.2 - dev: true /path-scurry@2.0.0: resolution: {integrity: sha512-ypGJsmGtdXUOeM5u93TyeIEfEhM6s+ljAhrk5vAvSx8uyY/02OvrZnA0YNGUrPXfpJMgI1ODd3nwz8Npx4O4cg==} @@ -22788,12 +23185,6 @@ packages: side-channel: 1.0.6 dev: true - /qs@6.12.2: - resolution: {integrity: sha512-x+NLUpx9SYrcwXtX7ob1gnkSems4i/mGZX5SlYxwIau6RrUSODO89TR/XDGGpn5RPWSYIB+aSfuSlV5+CmbTBg==} - engines: {node: '>=0.6'} - dependencies: - side-channel: 1.0.6 - /qs@6.13.0: resolution: {integrity: sha512-+38qI9SOr8tfZ4QmJNplMUxqjbe7LKvvZgWdExBOmd+egZTtjLB67Gu0HRX3u/XOq7UU2Nx6nsjvS16Z9uwfpg==} engines: {node: '>=0.6'} @@ -22990,6 +23381,12 @@ packages: resolution: {integrity: sha512-57frrGM/OCTLqLOAh0mhVA9VBMHd+9U7Zb2THMGdBUoZVOtGbJzjxsYGDJ3A9AYYCP4hn6y1TVbaOfzWtm5GFg==} engines: {node: '>= 12.13.0'} + /rechoir@0.6.2: + resolution: {integrity: sha512-HFM8rkZ+i3zrV+4LQjwQ0W+ez98pApMGM3HUrN04j3CqzPOzl9nmP15Y8YXNm8QHGv/eacOVEjqhmWpkRV0NAw==} + engines: {node: '>= 0.10'} + dependencies: + resolve: 1.22.8 + /redaxios@0.5.1: resolution: {integrity: sha512-FSD2AmfdbkYwl7KDExYQlVvIrFz6Yd83pGfaGjBzM9F6rpq8g652Q4Yq5QD4c+nf4g2AgeElv1y+8ajUPiOYMg==} dev: false @@ -23228,7 +23625,7 @@ packages: engines: {node: 14 >=14.20 || 16 >=16.20 || >=18} hasBin: true dependencies: - glob: 10.3.10 + glob: 10.4.5 dev: true /rimraf@6.0.1: @@ -23321,7 +23718,7 @@ packages: buffer: 6.0.3 eventemitter3: 5.0.1 uuid: 8.3.2 - ws: 8.18.0(bufferutil@4.0.8)(utf-8-validate@5.0.10) + ws: 8.18.2(bufferutil@4.0.8)(utf-8-validate@5.0.10) optionalDependencies: bufferutil: 4.0.8 utf-8-validate: 5.0.10 @@ -23395,9 +23792,9 @@ packages: engines: {node: '>=10.0.0'} requiresBuild: true dependencies: - elliptic: 6.5.4 + elliptic: 6.6.1 node-addon-api: 2.0.2 - node-gyp-build: 4.8.0 + node-gyp-build: 4.8.2 /secp256k1@5.0.1: resolution: {integrity: sha512-lDFs9AAIaWP9UCdtWrotXWWF9t8PWgQDcxqgAnpM9rMqxb3Oaq2J0thzPVSxBwdJgyQtkU/sYtFtbM1RSt/iYA==} @@ -23547,10 +23944,9 @@ packages: define-data-property: 1.1.4 es-errors: 1.3.0 function-bind: 1.1.2 - get-intrinsic: 1.2.4 - gopd: 1.0.1 + get-intrinsic: 1.3.0 + gopd: 1.2.0 has-property-descriptors: 1.0.2 - dev: false /set-function-name@2.0.1: resolution: {integrity: sha512-tMNCiqYVkXIZgc2Hnoy2IvC/f8ezc5koaRFkCjrpWzGpCd3qbZXPzVy9MAZzK1ch/X0jvSkojys3oqJN0qCmdA==} @@ -23594,6 +23990,15 @@ packages: /shell-quote@1.8.1: resolution: {integrity: sha512-6j1W9l1iAs/4xYBI1SYOVZyFcCis9b4KCLQ8fgAGG07QvzaRLVVRQvAy85yNmmZSjYjg4MWh4gNvlPujU/5LpA==} + /shelljs@0.8.5: + resolution: {integrity: sha512-TiwcRcrkhHvbrZbnRcFYMLl30Dfov3HKqzp5tO5b4pt6G/SezKcYhmDg15zXVBswHmctSAQKznqNW2LO5tTDow==} + engines: {node: '>=4'} + hasBin: true + dependencies: + glob: 7.2.3 + interpret: 1.4.0 + rechoir: 0.6.2 + /side-channel@1.0.4: resolution: {integrity: sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==} dependencies: @@ -23616,9 +24021,9 @@ packages: resolution: {integrity: sha512-fDW/EZ6Q9RiO8eFG8Hj+7u/oW+XrPTIChwCOM2+th2A6OblDtYYIpve9m+KvI9Z4C9qSEXlaGR6bTEYHReuglA==} engines: {node: '>= 0.4'} dependencies: - call-bind: 1.0.7 + call-bind: 1.0.8 es-errors: 1.3.0 - get-intrinsic: 1.2.4 + get-intrinsic: 1.3.0 object-inspect: 1.13.1 /signal-exit@3.0.7: @@ -23762,14 +24167,14 @@ packages: - debug dev: true - /solc@0.8.26(debug@4.3.5): + /solc@0.8.26(debug@4.4.0): resolution: {integrity: sha512-yiPQNVf5rBFHwN6SIf3TUUvVAFKcQqmSUFeq+fb6pNRCo0ZCgpYOZDi3BVoezCPIAcKrVYd/qXlBLUP9wVrZ9g==} engines: {node: '>=10.0.0'} hasBin: true dependencies: command-exists: 1.2.9 commander: 8.3.0 - follow-redirects: 1.15.6(debug@4.3.5) + follow-redirects: 1.15.9(debug@4.4.0) js-sha3: 0.8.0 memorystream: 0.3.1 semver: 5.7.2 @@ -23805,6 +24210,34 @@ packages: - typescript dev: true + /solhint@4.1.1(typescript@5.9.2): + resolution: {integrity: sha512-7G4iF8H5hKHc0tR+/uyZesSKtfppFIMvPSW+Ku6MSL25oVRuyFeqNhOsXHfkex64wYJyXs4fe+pvhB069I19Tw==} + hasBin: true + dependencies: + '@solidity-parser/parser': 0.16.2 + ajv: 6.12.6 + antlr4: 4.13.1 + ast-parents: 0.0.1 + chalk: 4.1.2 + commander: 10.0.1 + cosmiconfig: 8.3.6(typescript@5.9.2) + fast-diff: 1.3.0 + glob: 8.1.0 + ignore: 5.3.2 + js-yaml: 4.1.0 + latest-version: 7.0.0 + lodash: 4.17.21 + pluralize: 8.0.0 + semver: 7.6.3 + strip-ansi: 6.0.1 + table: 6.8.2 + text-table: 0.2.0 + optionalDependencies: + prettier: 2.8.8 + transitivePeerDependencies: + - typescript + dev: true + /solidity-ast@0.4.59: resolution: {integrity: sha512-I+CX0wrYUN9jDfYtcgWSe+OAowaXy8/1YQy7NS4ni5IBDmIYBq7ZzaP/7QqouLjzZapmQtvGLqCaYgoUWqBo5g==} @@ -23818,6 +24251,15 @@ packages: resolution: {integrity: sha512-htM7Vn6LhHreR+EglVMd2s+sZhcXAirB1Zlyrv5zBuTxieCvjfnRpd7iZk75m/u6NOlEyQ94C6TWbBn2cY7w8g==} dev: true + /solidity-docgen@0.6.0-beta.36(hardhat@2.22.12): + resolution: {integrity: sha512-f/I5G2iJgU1h0XrrjRD0hHMr7C10u276vYvm//rw1TzFcYQ4xTOyAoi9oNAHRU0JU4mY9eTuxdVc2zahdMuhaQ==} + peerDependencies: + hardhat: ^2.8.0 + dependencies: + handlebars: 4.7.8 + hardhat: 2.22.12(ts-node@10.9.2)(typescript@5.9.2) + solidity-ast: 0.4.59 + /sonic-boom@3.8.1: resolution: {integrity: sha512-y4Z8LCDBuum+PBP3lSV7RHrXscqksve/bi0as7mhwVnBW+/wUqKT/2Kb7um8yqcFy0duYbbPxzt89Zy2nOCaxg==} dependencies: @@ -24160,7 +24602,7 @@ packages: dependencies: '@jridgewell/gen-mapping': 0.3.3 commander: 4.1.1 - glob: 10.3.10 + glob: 10.4.5 lines-and-columns: 1.2.4 mz: 2.7.0 pirates: 4.0.6 @@ -24594,6 +25036,15 @@ packages: typescript: 5.5.3 dev: true + /ts-api-utils@1.3.0(typescript@5.9.2): + resolution: {integrity: sha512-UQMIo7pb8WRomKR1/+MFVLTroIvDVtMX3K6OUir8ynLyzB8Jeriont2bTAtmNPa1ekAgN7YPDyf6V+ygrdU+eQ==} + engines: {node: '>=16'} + peerDependencies: + typescript: '>=4.2.0' + dependencies: + typescript: 5.9.2 + dev: true + /ts-command-line-args@2.5.1: resolution: {integrity: sha512-H69ZwTw3rFHb5WYpQya40YAX2/w7Ut75uUECbgBIsLmM+BNuYnxsltfyyLMxy6sEeKxgijLTnQtLd0nKd6+IYw==} hasBin: true @@ -24708,7 +25159,37 @@ packages: v8-compile-cache-lib: 3.0.1 yn: 3.1.1 - /ts-node@10.9.2(@types/node@22.15.3)(typescript@5.5.3): + /ts-node@10.9.2(@types/node@18.18.14)(typescript@5.9.2): + resolution: {integrity: sha512-f0FFpIdcHgn8zcPSbf1dRevwt047YMnaiJM3u2w2RewrB+fob/zePZcrOyQoLMMO7aBIddLcQIEK5dYjkLnGrQ==} + hasBin: true + peerDependencies: + '@swc/core': '>=1.2.50' + '@swc/wasm': '>=1.2.50' + '@types/node': '*' + typescript: '>=2.7' + peerDependenciesMeta: + '@swc/core': + optional: true + '@swc/wasm': + optional: true + dependencies: + '@cspotcode/source-map-support': 0.8.1 + '@tsconfig/node10': 1.0.9 + '@tsconfig/node12': 1.0.11 + '@tsconfig/node14': 1.0.3 + '@tsconfig/node16': 1.0.4 + '@types/node': 18.18.14 + acorn: 8.11.3 + acorn-walk: 8.3.2 + arg: 4.1.3 + create-require: 1.1.1 + diff: 4.0.2 + make-error: 1.3.6 + typescript: 5.9.2 + v8-compile-cache-lib: 3.0.1 + yn: 3.1.1 + + /ts-node@10.9.2(@types/node@22.15.3)(typescript@5.9.2): resolution: {integrity: sha512-f0FFpIdcHgn8zcPSbf1dRevwt047YMnaiJM3u2w2RewrB+fob/zePZcrOyQoLMMO7aBIddLcQIEK5dYjkLnGrQ==} hasBin: true peerDependencies: @@ -24734,7 +25215,7 @@ packages: create-require: 1.1.1 diff: 4.0.2 make-error: 1.3.6 - typescript: 5.5.3 + typescript: 5.9.2 v8-compile-cache-lib: 3.0.1 yn: 3.1.1 @@ -24834,7 +25315,7 @@ packages: - ts-node dev: true - /tsup@8.0.1(@swc/core@1.4.0)(typescript@5.5.3): + /tsup@8.0.1(ts-node@10.9.2)(typescript@5.9.2): resolution: {integrity: sha512-hvW7gUSG96j53ZTSlT4j/KL0q1Q2l6TqGBFc6/mu/L46IoNWqLLUzLRLP1R8Q7xrJTmkDxxDoojV5uCVs1sVOg==} engines: {node: '>=18'} hasBin: true @@ -24853,7 +25334,6 @@ packages: typescript: optional: true dependencies: - '@swc/core': 1.4.0 bundle-require: 4.0.2(esbuild@0.19.11) cac: 6.7.14 chokidar: 3.6.0 @@ -24868,13 +25348,13 @@ packages: source-map: 0.8.0-beta.0 sucrase: 3.35.0 tree-kill: 1.2.2 - typescript: 5.5.3 + typescript: 5.9.2 transitivePeerDependencies: - supports-color - ts-node dev: true - /tsup@8.4.0(typescript@5.5.3): + /tsup@8.4.0(typescript@5.9.2): resolution: {integrity: sha512-b+eZbPCjz10fRryaAA7C8xlIHnf8VnsaRqydheLIqwG/Mcpfk8Z5zp3HayX7GaTygkigHl5cBUs+IhcySiIexQ==} engines: {node: '>=18'} hasBin: true @@ -24909,7 +25389,7 @@ packages: tinyexec: 0.3.2 tinyglobby: 0.2.13 tree-kill: 1.2.2 - typescript: 5.5.3 + typescript: 5.9.2 transitivePeerDependencies: - jiti - supports-color @@ -24927,6 +25407,16 @@ packages: typescript: 5.5.3 dev: true + /tsutils@3.21.0(typescript@5.9.2): + resolution: {integrity: sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA==} + engines: {node: '>= 6'} + peerDependencies: + typescript: '>=2.8.0 || >= 3.2.0-dev || >= 3.3.0-dev || >= 3.4.0-dev || >= 3.5.0-dev || >= 3.6.0-dev || >= 3.6.0-beta || >= 3.7.0-dev || >= 3.7.0-beta' + dependencies: + tslib: 1.14.1 + typescript: 5.9.2 + dev: true + /tsx@4.20.3: resolution: {integrity: sha512-qjbnuR9Tr+FJOMBqJCW5ehvIo/buZq7vH7qD7JziU98h6l3qGy0a/yPFjwO+y0/T7GFpNgNAvEcPPVfyT8rrPQ==} engines: {node: '>=18.0.0'} @@ -25135,6 +25625,11 @@ packages: engines: {node: '>=14.17'} hasBin: true + /typescript@5.9.2: + resolution: {integrity: sha512-CWBzXQrc/qOkhidw1OzBTQuYRbfyxDXJMVJ1XNwUHGROVmuaeiEm3OslpZ1RV96d7SKKjZKrSJu3+t/xlw3R9A==} + engines: {node: '>=14.17'} + hasBin: true + /typical@4.0.0: resolution: {integrity: sha512-VAH4IvQ7BDFYglMd7BPRDfLgxZZX4O4TFcRDA6EN5X7erNJJq+McIEp8np9aVtxrCJ6qx4GTYVfOWNjcqwZgRw==} engines: {node: '>=8'} @@ -25145,6 +25640,13 @@ packages: engines: {node: '>=8'} dev: true + /uglify-js@3.19.3: + resolution: {integrity: sha512-v3Xu+yuwBXisp6QYTcH4UbH+xYJXqnq2m/LtQVWKWzYc1iehYnLixoQDN9FH6/j9/oybfd6W9Ghwkl8+UMKTKQ==} + engines: {node: '>=0.8.0'} + hasBin: true + requiresBuild: true + optional: true + /uint8array-tools@0.0.8: resolution: {integrity: sha512-xS6+s8e0Xbx++5/0L+yyexukU7pz//Yg6IHg3BKhXotg1JcYtgxVcUctQ0HxLByiJzpAkNFawz1Nz5Xadzo82g==} engines: {node: '>=14.0.0'} @@ -25178,13 +25680,6 @@ packages: /undici-types@7.10.0: resolution: {integrity: sha512-t5Fy/nfn+14LuOc2KNYg75vZqClpAiqscVvMygNnlsHBFpSXdJaYtXMcdNLpl/Qvc3P2cB3s6lOV51nqsFq4ag==} - dev: true - - /undici@5.28.2: - resolution: {integrity: sha512-wh1pHJHnUeQV5Xa8/kyQhO7WFa8M34l026L5P/+2TYiakvGy5Rdc8jWZVyG7ieht/0WgJLEd3kcU5gKx+6GC8w==} - engines: {node: '>=14.0'} - dependencies: - '@fastify/busboy': 2.1.0 /undici@5.28.4: resolution: {integrity: sha512-72RFADWFqKmUb2hmmvNODKL3p9hcB6Gt2DOQMis1SEBaV6a4MH8soBvzg+95CYhCKPFedut2JY9bMfrDl9D23g==} @@ -25317,6 +25812,17 @@ packages: dependencies: typescript: 5.5.3 + /valibot@0.37.0(typescript@5.9.2): + resolution: {integrity: sha512-FQz52I8RXgFgOHym3XHYSREbNtkgSjF9prvMFH1nBsRyfL6SfCzoT1GuSDTlbsuPubM7/6Kbw0ZMQb8A+V+VsQ==} + peerDependencies: + typescript: '>=5' + peerDependenciesMeta: + typescript: + optional: true + dependencies: + typescript: 5.9.2 + dev: true + /validate-npm-package-license@3.0.4: resolution: {integrity: sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==} dependencies: @@ -25359,7 +25865,7 @@ packages: isows: 1.0.7(ws@8.18.2) ox: 0.8.6(typescript@5.5.3) typescript: 5.5.3 - ws: 8.18.2 + ws: 8.18.2(bufferutil@4.0.8)(utf-8-validate@5.0.10) transitivePeerDependencies: - bufferutil - utf-8-validate @@ -25781,6 +26287,9 @@ packages: engines: {node: '>=0.10.0'} dev: true + /wordwrap@1.0.0: + resolution: {integrity: sha512-gvVzJFlPycKc5dZN4yPkP8w7Dc37BtP1yczEneOb4uq34pXZcvrtRTmWV8W+Ume+XCxKgbjM+nevkyFPMybd4Q==} + /wordwrapjs@4.0.1: resolution: {integrity: sha512-kKlNACbvHrkpIw6oPeYDSmdCTu2hdMHoyXLTcUKala++lx5Y+wjJ/e474Jqv5abnVmwxw08DiTuHmw69lJGksA==} engines: {node: '>=8.0.0'} @@ -25911,8 +26420,8 @@ packages: optional: true dev: true - /ws@8.18.0(bufferutil@4.0.8)(utf-8-validate@5.0.10): - resolution: {integrity: sha512-8VbfWfHLbbwu3+N6OKsOMpBdT4kXPDDB9cJk2bJ6mh9ucxdlnNvH1e+roYkKmN9Nxw2yjz7VzeO9oOz2zJ04Pw==} + /ws@8.18.2(bufferutil@4.0.8)(utf-8-validate@5.0.10): + resolution: {integrity: sha512-DMricUmwGZUVr++AEAe2uiVM7UoO9MAVZMDu05UQOaUII0lp+zOzLLU4Xqh/JvTqklB1T4uELaaPBKyjE1r4fQ==} engines: {node: '>=10.0.0'} peerDependencies: bufferutil: ^4.0.1 @@ -25926,19 +26435,6 @@ packages: bufferutil: 4.0.8 utf-8-validate: 5.0.10 - /ws@8.18.2: - resolution: {integrity: sha512-DMricUmwGZUVr++AEAe2uiVM7UoO9MAVZMDu05UQOaUII0lp+zOzLLU4Xqh/JvTqklB1T4uELaaPBKyjE1r4fQ==} - engines: {node: '>=10.0.0'} - peerDependencies: - bufferutil: ^4.0.1 - utf-8-validate: '>=5.0.2' - peerDependenciesMeta: - bufferutil: - optional: true - utf-8-validate: - optional: true - dev: false - /xhr-request-promise@0.1.3: resolution: {integrity: sha512-YUBytBsuwgitWtdRzXDDkWAXzhdGB8bYm0sSzMPZT7Z2MBjMSTHFsyCT1yCRATY+XC69DUrQraRAEgcoCRaIPg==} dependencies: