diff --git a/.changeset/config.json b/.changeset/config.json index b426b84d7..3eab8dad2 100644 --- a/.changeset/config.json +++ b/.changeset/config.json @@ -8,7 +8,12 @@ "@hashgraph/asset-tokenization-sdk", "@hashgraph/asset-tokenization-dapp" ], - ["@mass-payout/contracts", "@mass-payout/sdk"] + [ + "@hashgraph/mass-payout-contracts", + "@hashgraph/mass-payout-sdk", + "@hashgraph/mass-payout-backend", + "@hashgraph/mass-payout-frontend" + ] ], "linked": [], "access": "restricted", diff --git a/.changeset/curvy-shoes-boil.md b/.changeset/curvy-shoes-boil.md new file mode 100644 index 000000000..e305b9978 --- /dev/null +++ b/.changeset/curvy-shoes-boil.md @@ -0,0 +1,5 @@ +--- +"@hashgraph/asset-tokenization-contracts": patch +--- + +Fix all lint issues in contracts package. diff --git a/.changeset/scripts-refactoring-cli-standardization.md b/.changeset/scripts-refactoring-cli-standardization.md new file mode 100644 index 000000000..8bd3de8f2 --- /dev/null +++ b/.changeset/scripts-refactoring-cli-standardization.md @@ -0,0 +1,29 @@ +--- +"@hashgraph/asset-tokenization-contracts": patch +--- + +refactor(scripts): standardize CLI entry points and improve infrastructure + +**CLI Standardization:** + +- Unified CLI entry points to match workflow names (deploySystemWithNewBlr, deploySystemWithExistingBlr, upgradeConfigurations, upgradeTupProxies) +- Created shared validation utilities in `cli/shared/` module eliminating ~100+ lines of duplicated code +- Standardized environment variable parsing and address validation across all CLI files + +**Infrastructure Improvements:** + +- Resolved circular import issues in logging module +- Exposed tools layer API through main scripts entry point +- Consolidated validation utilities for better code reuse + +**Performance Fix:** + +- Fixed parallel test performance regression (8+ min β†’ 2 min) +- Restored dynamic imports in blrConfigurations.ts to prevent eager typechain loading +- Added troubleshooting documentation for future reference + +**Documentation:** + +- Enhanced JSDoc documentation across infrastructure operations +- Added troubleshooting section for parallel test performance issues +- Updated README with CLI shared utilities documentation diff --git a/.claude/commands/docs/update-docs.md b/.claude/commands/docs/update-docs.md new file mode 100644 index 000000000..b479a10de --- /dev/null +++ b/.claude/commands/docs/update-docs.md @@ -0,0 +1,562 @@ +--- +description: Update documentation based on EPs, ADRs, and commits +argument-hint: [options] +--- + +# Update Documentation + +Automatically update project documentation based on implemented Enhancement Proposals (EPs), accepted Architecture Decision Records (ADRs), and recent commits. + +## Arguments + +Parse the arguments provided in `$ARGUMENTS`: +- `ep=N` - Update docs for specific EP number N +- `adr=N` - Update docs for specific ADR number N +- `commits=N` - Analyze last N commits +- `scope=X` - Update specific scope only (ats or mass-payout) +- `dry-run` - Preview changes without modifying files + +If no arguments provided, scan for all implemented EPs and accepted ADRs. + +Examples: +- `/update-docs` - Update all +- `/update-docs ep=3` - Update docs for EP-0003 +- `/update-docs adr=2 scope=mass-payout` - Update docs for ADR-0002 in mass-payout +- `/update-docs commits=20 dry-run` - Preview updates based on last 20 commits + +## Context + +Arguments provided by user: $ARGUMENTS + +--- + +## What This Skill Does + +This skill automates documentation updates by: + +1. **Scanning Enhancement Proposals (EPs)** + - Finds EPs with status: `Implemented` or `πŸš€ Implemented` + - Extracts feature details from the EP + - Identifies which documentation sections need updates + +2. **Scanning Architecture Decision Records (ADRs)** + - Finds ADRs with status: `Accepted` or `βœ… Accepted` + - Extracts architectural decisions and their implications + - Identifies which developer guides and architecture docs need updates + - Determines if setup/prerequisites changed + +3. **Reviewing Recent Commits** + - Analyzes commit messages for feature additions + - Identifies changed files to understand scope + - Extracts relevant implementation details + - Collects commit hashes for reference + +4. **Reviewing CHANGELOGs (Read-Only for Context)** + - **IMPORTANT**: Reads existing CHANGELOGs to understand current version and recent changes + - Identifies which packages are affected by the feature + - Notes what type of change this would be (Major/Minor/Patch) + - **Does NOT modify CHANGELOGs** - this is a manual task for the user + +5. **Updating Documentation** + - Updates user guides with new features (from EPs) + - Updates developer guides with architectural patterns (from ADRs) + - Updates architecture overviews (from ADRs) + - Updates API documentation + - Updates getting started guides if setup changed (from ADRs) + - Creates or updates "What's New" sections + - Updates README files if needed + +6. **Generating Summary** + - Creates a summary of all documentation changes + - Lists all documentation files modified + - Provides CHANGELOG update suggestions for manual entry + - Provides a checklist for manual review + +--- + +## Instructions for Claude + +When this skill is invoked, follow these steps: + +### Step 1: Discovery Phase + +1. **Check for Enhancement Proposals (EPs)** + - Look in `docs/references/proposals/` for EP files + - Filter EPs with status: `Implemented` or `πŸš€ Implemented` + - Read each implemented EP to understand: + - Feature name and scope (ATS, Mass Payout, SDK, Global) + - What was implemented + - UI/UX changes + - API changes + - Documentation requirements mentioned in the EP + +2. **Check for Architecture Decision Records (ADRs)** + - Look in `docs/references/adr/` for ADR files + - Filter ADRs with status: `Accepted` or `βœ… Accepted` + - Read each accepted ADR to understand: + - Architectural decision made and scope (ATS, Mass Payout, SDK, Global) + - Context and problem statement + - Decision outcome and rationale + - Consequences (positive and negative impacts) + - Technologies/patterns chosen + - Documentation requirements implied by the decision + - ADRs often require updates to: + - Architecture overview documents + - Developer guides (explaining new patterns/technologies) + - API documentation (if APIs changed) + - Getting started guides (if setup/prerequisites changed) + +3. **Review Recent Commits (if commits=N argument provided)** + - Use `git log` to get recent commits + - Look for commits with keywords: `feat:`, `feature:`, `add:`, `implement:` + - Identify scope from file paths (ats, mass-payout, sdk, contracts) + - Extract feature descriptions from commit messages + - Note commit hashes for reference + +4. **Review Existing CHANGELOGs (Read-Only for Context)** + - Locate CHANGELOGs based on scope: + - ATS Contracts: `packages/ats/contracts/CHANGELOG.md` + - ATS SDK: `packages/ats/sdk/CHANGELOG.md` + - Mass Payout Contracts: `packages/mass-payout/contracts/CHANGELOG.md` + - Mass Payout SDK: `packages/mass-payout/sdk/CHANGELOG.md` + - Mass Payout Backend: `apps/mass-payout/backend/CHANGELOG.md` (if exists) + - Mass Payout Frontend: `apps/mass-payout/frontend/CHANGELOG.md` (if exists) + - Read existing CHANGELOG to: + - Understand current version number + - Check if feature is already documented + - Determine what category this change would be (Major/Minor/Patch) + - **Important:** Do NOT modify CHANGELOGs - only read for context + +5. **Identify Scope** + - Determine if changes affect: + - ATS (Asset Tokenization Studio) + - Mass Payout + - SDK (either ATS SDK or Mass Payout SDK) + - Contracts (smart contracts) + - Global (affects entire monorepo) + - Map scope to specific CHANGELOGs to update + +### Step 2: Analysis Phase + +1. **Map Features to Documentation** + + For each implemented feature, determine which documentation files need updates: + + **User-Facing Features:** + - `docs/{scope}/user-guides/` - Add new guides or update existing ones + - `docs/{scope}/intro.md` - Update features list if major feature + - `docs/{scope}/getting-started/` - Update if affects setup or quick start + + **Developer-Facing Features:** + - `docs/{scope}/developer-guides/` - Add technical implementation details + - `docs/{scope}/api/` - Update API reference + - `README.md` (root or package) - Update if affects installation or setup + - `CHANGELOG.md` - Add entry with version and changes + + **Contract Changes:** + - `docs/{scope}/developer-guides/contracts/` - Update contract documentation + - `docs/{scope}/api/contracts/` - Update contract API reference + + **SDK Changes:** + - `docs/{scope}/developer-guides/sdk-*.md` - Update SDK guides + - `docs/{scope}/api/sdk-reference.md` - Update SDK API reference + +2. **Read Existing Documentation** + - Read the identified documentation files + - Understand the current structure and style + - Identify where new content should be inserted + +### Step 3: Update Phase + +For each documentation file that needs updating: + +1. **User Guides** + - Add new step-by-step guides for new features + - Update existing guides if feature modifies existing flows + - Include screenshots placeholders: `![Feature Name](../../images/feature-name.png)` + - Follow existing format and style + - Add to index pages with card boxes if applicable + +2. **Developer Guides** + - Add technical implementation details + - Include code examples + - Document new architecture patterns + - Update architecture diagrams (mermaid) if needed + - Add deployment instructions if needed + +3. **API Documentation** + - Document new endpoints (REST API) + - Document new contract functions + - Document new SDK methods + - Include request/response examples + - Add code snippets + +4. **Getting Started Guides** + - Update prerequisites if needed + - Add new environment variables + - Update configuration steps + - Add troubleshooting entries for common issues + +5. **Intro/Index Pages** + - Update feature lists in card boxes + - Update use cases if applicable + - Update architecture diagrams if needed + - Update system requirements if changed + +### Step 4: Validation Phase + +1. **Check Internal Links** + - Verify all internal links use `.md` extensions + - Ensure links point to existing files + - Fix any broken links found + +2. **Check Consistency** + - Ensure terminology is consistent with existing docs + - Verify code examples follow project conventions + - Check that formatting matches existing docs + +3. **Create Summary** + - List all documentation files modified + - Summarize key changes made + - Provide checklist of items that need manual review: + - [ ] Screenshots need to be added + - [ ] Code examples need testing + - [ ] Links need verification + - [ ] **CHANGELOGs need manual updates** (see suggestions below) + +### Step 5: Output Phase + +1. **Present Changes** + - Show summary of documentation updates + - List modified files + - Highlight any manual steps needed + +2. **Provide CHANGELOG Update Suggestions** + - **Important:** Do NOT modify CHANGELOG files + - Instead, provide suggestions for manual CHANGELOG updates: + - Which CHANGELOG files need updates + - Suggested change type (Major/Minor/Patch) + - Suggested entry format with commit hash and EP/ADR reference + - Example entry the user can copy/paste + - Format suggestion as: + ``` + CHANGELOG Suggestions (Manual Update Required): + + πŸ“ packages/ats/contracts/CHANGELOG.md + Type: Minor + Suggested entry: + ### Minor Changes + - abc123d: Add freeze reason parameter (EP-0005) + + πŸ“ packages/mass-payout/sdk/CHANGELOG.md + Type: Major + Suggested entry: + ### Major Changes + - def456e: Migrate to GraphQL API (ADR-0002) + BREAKING CHANGE: REST endpoints deprecated + Migration: See docs/mass-payout/api/migration-guide.md + ``` + +3. **Suggest Next Steps** + - Update CHANGELOGs manually using suggestions above + - Run docs locally to verify formatting + - Add missing screenshots + - Test code examples + - Review and commit changes + +--- + +## Examples + +### Example 1: Update docs for implemented EP + +``` +User: /update-docs --ep 0003 + +Claude: +I'll update the documentation for EP-0003: Scheduled Distributions. + +Discovery Phase: +βœ“ Found EP: docs/references/proposals/0003-mp-scheduled-distributions.md +βœ“ Status: πŸš€ Implemented +βœ“ Scope: Mass Payout +βœ“ Feature: Automatic recurring distributions with cron-like scheduling +βœ“ Affected packages: Backend (NestJS), SDK + +Review CHANGELOGs: +βœ“ Read packages/mass-payout/sdk/CHANGELOG.md (current version: 1.1.0) +βœ“ Read apps/mass-payout/backend/CHANGELOG.md (current version: 1.1.5) +βœ“ Change type: Minor (new feature, backward compatible) + +Analysis Phase: +Documentation files to update: +- docs/mass-payout/user-guides/creating-distributions.md (add scheduling section) +- docs/mass-payout/user-guides/index.md (add scheduled distributions card) +- docs/mass-payout/intro.md (update features and use cases) +- docs/mass-payout/developer-guides/backend/architecture.md (add scheduling service) + +[Proceeds to update each file...] + +Update Phase: +βœ“ Updated user guides with scheduling steps +βœ“ Updated architecture docs with CronService component +βœ“ Updated intro.md use cases + +Summary of Changes: +βœ“ Updated 4 documentation files +βœ“ Added "Scheduled Distributions" section to user guide +βœ“ Updated architecture diagram with CronService + +CHANGELOG Suggestions (Manual Update Required): + +πŸ“ packages/mass-payout/sdk/CHANGELOG.md +Type: Minor +Current version: 1.1.0 β†’ Suggested: 1.2.0 +Suggested entry: +### Minor Changes +- a1b2c3d: Add scheduled and recurring distribution support (EP-0003) + +πŸ“ apps/mass-payout/backend/CHANGELOG.md +Type: Minor +Current version: 1.1.5 β†’ Suggested: 1.2.0 +Suggested entry: +### Minor Changes +- a1b2c3d: Implement CronService for automatic payout execution (EP-0003) + +Manual Steps Needed: +- [ ] Update CHANGELOGs using suggestions above +- [ ] Add screenshots for scheduled distribution UI +- [ ] Test cron expression examples +- [ ] Verify all links work in deployed docs + +Would you like me to commit these changes? +``` + +### Example 2: Update docs based on recent commits + +``` +User: /update-docs --commits 20 --scope ats + +Claude: +Analyzing last 20 commits in ATS scope... + +Found relevant commits: +1. e0a3f03: feat(ats): add multi-signature approval for transfers +2. a1b2c3d: feat(contracts): add freeze reason parameter +3. c4d5e6f: feat(sdk): add batch transfer method + +Review CHANGELOGs: +βœ“ Read packages/ats/contracts/CHANGELOG.md (current version: 2.0.0) +βœ“ Read packages/ats/sdk/CHANGELOG.md (current version: 2.1.0) +βœ“ Changes found: + - Multi-sig approval: Major (breaking change in approval flow) + - Freeze reason: Minor (new parameter, backward compatible) + - Batch transfer: Minor (new method) + +Analysis Phase: +Documentation to update: +- docs/ats/user-guides/transfer-restrictions.md (multi-sig section) +- docs/ats/user-guides/freeze-tokens.md (freeze reason parameter) +- docs/ats/developer-guides/sdk-integration.md (batch transfer examples) + +[Proceeds with documentation updates...] + +Update Phase: +βœ“ Updated user guides with multi-sig approval section +βœ“ Updated freeze documentation with reason parameter +βœ“ Added batch transfer code examples to SDK guide + +Summary: +βœ“ Updated 3 documentation files +βœ“ Documented breaking change with migration notes +βœ“ Added code examples for new features + +CHANGELOG Suggestions (Manual Update Required): + +πŸ“ packages/ats/contracts/CHANGELOG.md +Type: Major (breaking change) +Current version: 2.0.0 β†’ Suggested: 3.0.0 +Suggested entry: +### Major Changes +- e0a3f03: Multi-signature approval required for restricted transfers + + BREAKING CHANGE: Transfer approval flow changed + Migration: Update your transfer flows to include approval step + +### Minor Changes +- a1b2c3d: Add optional reason parameter to freeze methods + +πŸ“ packages/ats/sdk/CHANGELOG.md +Type: Minor +Current version: 2.1.0 β†’ Suggested: 2.2.0 +Suggested entry: +### Minor Changes +- c4d5e6f: Add batchTransfer method for efficient multi-recipient transfers +``` + +### Example 3: Update docs based on accepted ADR + +``` +User: /update-docs --adr 0002 + +Claude: +I'll update the documentation for ADR-0002: Adopt GraphQL for Mass Payout API. + +Discovery Phase: +βœ“ Found ADR: docs/references/adr/0002-adopt-graphql-api.md +βœ“ Status: βœ… Accepted +βœ“ Scope: Mass Payout (Backend) +βœ“ Decision: Replace REST API with GraphQL using Apollo Server +βœ“ Consequences: + - More flexible queries for frontend + - Breaking change for existing API consumers + - New dependencies (Apollo Server, GraphQL) + +Review CHANGELOGs: +βœ“ Read apps/mass-payout/backend/CHANGELOG.md (current version: 1.5.0) +βœ“ Change type: Major (breaking API change) + +Analysis Phase: +Documentation to update: +- docs/mass-payout/developer-guides/backend/architecture.md (add GraphQL layer) +- docs/mass-payout/developer-guides/backend/index.md (update API section) +- docs/mass-payout/getting-started/full-setup.md (new GraphQL playground URL) +- docs/mass-payout/api/rest-api/index.md (deprecation notice + migration guide) +- docs/mass-payout/api/graphql/ (NEW: create GraphQL API documentation) + +[Proceeds with documentation updates...] + +Update Phase: +βœ“ Updated architecture docs with GraphQL layer diagram +βœ“ Added GraphQL schema documentation +βœ“ Created migration guide from REST to GraphQL +βœ“ Updated getting started with GraphQL playground URL +βœ“ Added deprecation notices to REST API docs + +Summary: +βœ“ Updated 5 documentation files +βœ“ Created new GraphQL API documentation section +βœ“ Added migration guide for breaking change +βœ“ Updated architecture diagram with GraphQL layer + +CHANGELOG Suggestions (Manual Update Required): + +πŸ“ apps/mass-payout/backend/CHANGELOG.md +Type: Major (breaking change) +Current version: 1.5.0 β†’ Suggested: 2.0.0 +Suggested entry: +### Major Changes +- b3c4d5e: Migrate from REST to GraphQL API (ADR-0002) + + BREAKING CHANGE: REST API endpoints deprecated, will be removed in v3.0.0 + + Migration Guide: + - Use GraphQL endpoint at /graphql instead of /api + - See docs/mass-payout/api/graphql/ for new schema + - REST endpoints remain available but are deprecated + +Manual Steps Needed: +- [ ] Update CHANGELOG using suggestion above +- [ ] Test GraphQL examples in documentation +- [ ] Verify GraphQL playground URL is correct +- [ ] Add GraphQL schema visualization diagram +- [ ] Update frontend integration examples +- [ ] Confirm deprecation timeline with team +``` + +--- + +## Special Cases + +### No Implemented EPs or Accepted ADRs Found +If no implemented EPs or accepted ADRs are found, check recent commits with feature additions and architectural changes. Suggest: +- Creating an EP retroactively for implemented features +- Creating an ADR retroactively for architectural decisions made +- Updating docs based on commit analysis only + +### Multiple Scopes Affected +If a feature affects multiple scopes (e.g., both ATS and Mass Payout), update documentation in all affected areas and all relevant CHANGELOGs. + +### Breaking Changes +If the EP or commits indicate breaking changes: +- Add prominent warning boxes in affected documentation +- Create migration guides in documentation +- In CHANGELOG suggestions, recommend "Major Changes" category +- Suggest incrementing major version (e.g., 2.0.0 β†’ 3.0.0) +- Include migration path in suggested CHANGELOG entry + +### CHANGELOG Already Has Entry +If the CHANGELOG already has an entry for the feature: +- Note that it's already documented +- Skip CHANGELOG suggestions for this feature +- Inform user that CHANGELOG is up to date + +### Missing CHANGELOG Files +If a package doesn't have a CHANGELOG: +- Note in the summary that CHANGELOG is missing +- Suggest creating one using Changesets format +- Recommend starting with version from package.json + +### New Architecture Patterns (from ADRs) +When ADRs introduce new architectural patterns: +- **Priority**: ADRs often have higher documentation priority for developer guides +- Update architecture overview documents first +- Add mermaid diagrams showing new patterns/layers +- Update developer guides with pattern explanation and examples +- Update getting started if prerequisites/setup changed +- Document in CHANGELOG as Minor or Major depending on impact +- If breaking change, provide migration guide from old to new pattern + +### ADRs with Infrastructure Changes +If an ADR changes infrastructure (databases, deployment, CI/CD): +- Update getting started guides +- Update system requirements +- Update deployment documentation +- Add migration/upgrade guides +- Update environment configuration examples + +--- + +## Configuration + +This skill looks for the following: + +**Enhancement Proposals:** +- Location: `docs/references/proposals/*.md` +- Status patterns: `Implemented`, `πŸš€ Implemented` + +**Architecture Decision Records:** +- Location: `docs/references/adr/*.md` +- Status patterns: `Accepted`, `βœ… Accepted` + +**Documentation Structure:** +``` +docs/ +β”œβ”€β”€ ats/ +β”‚ β”œβ”€β”€ intro.md +β”‚ β”œβ”€β”€ getting-started/ +β”‚ β”œβ”€β”€ user-guides/ +β”‚ β”œβ”€β”€ developer-guides/ +β”‚ └── api/ +β”œβ”€β”€ mass-payout/ +β”‚ β”œβ”€β”€ intro.md +β”‚ β”œβ”€β”€ getting-started/ +β”‚ β”œβ”€β”€ user-guides/ +β”‚ β”œβ”€β”€ developer-guides/ +β”‚ └── api/ +└── references/ + └── proposals/ +``` + +--- + +## Notes + +- This skill creates or updates documentation files but does NOT commit them automatically +- Always review generated documentation before committing +- Screenshots and diagrams referenced in docs need to be added manually +- Code examples should be tested before finalizing +- Internal links should be verified after updates +- The skill follows existing documentation style and conventions + +--- diff --git a/.github/workflows/ats.publish.yml b/.github/workflows/ats.publish.yml index 27b349897..89318d0a7 100644 --- a/.github/workflows/ats.publish.yml +++ b/.github/workflows/ats.publish.yml @@ -207,9 +207,9 @@ jobs: fi echo "::endgroup::" - echo "::group::Publish ATS SDK Package ${{ needs.prepare-sdk.outputs.artifact-name }} with args: ${PUBLISH_ARGS}" - if ! npm publish ./${{ needs.prepare-sdk.outputs.artifact-name }} ${PUBLISH_ARGS}; then - echo "❌ Failed to publish ATS SDK package: ${{ needs.prepare-sdk.outputs.artifact-name }}" + echo "::group::Publish ATS Contracts Package ${{ needs.prepare-contracts.outputs.artifact-name }} with args: ${PUBLISH_ARGS}" + if ! npm publish ./${{ needs.prepare-contracts.outputs.artifact-name }} ${PUBLISH_ARGS}; then + echo "❌ Failed to publish ATS Contracts package: ${{ needs.prepare-contracts.outputs.artifact-name }}" exit 1 fi echo "::endgroup::" diff --git a/.github/workflows/ats.release.yml b/.github/workflows/ats.release.yml index 7414be048..1e2a99810 100644 --- a/.github/workflows/ats.release.yml +++ b/.github/workflows/ats.release.yml @@ -87,7 +87,7 @@ jobs: echo "πŸ“‹ GitHub Release: Would be created with auto-generated notes" echo "" echo "⚠️ IMPORTANT: Version bump must be done manually before running release:" - echo " 1. Run: npm run changeset:version (or npx changeset version --ignore @mass-payout/*)" + echo " 1. Run: npm run changeset:version (or npx changeset version --ignore @hashgraph/mass-payout-*)" echo " 2. Review and commit changes (with GPG signature)" echo " 3. Push to remote" echo " 4. Run this workflow with 'release' option" @@ -126,7 +126,7 @@ jobs: echo "Preview mode was selected. No actual release was created." >> "${GITHUB_STEP_SUMMARY}" echo "" >> "${GITHUB_STEP_SUMMARY}" echo "**To create the release:**" >> "${GITHUB_STEP_SUMMARY}" - echo "1. Run \`npm run changeset:version\` or \`npx changeset version --ignore @mass-payout/*\`" >> "${GITHUB_STEP_SUMMARY}" + echo "1. Run \`npm run changeset:version\` or \`npx changeset version --ignore @hashgraph/mass-payout-*\`" >> "${GITHUB_STEP_SUMMARY}" echo "2. Review and commit changes with GPG signature: \`git commit -S -m 'chore: release ATS packages'\`" >> "${GITHUB_STEP_SUMMARY}" echo "3. Push to remote: \`git push\`" >> "${GITHUB_STEP_SUMMARY}" echo "4. Run this workflow again with 'release' option" >> "${GITHUB_STEP_SUMMARY}" diff --git a/.github/workflows/ats.test.yml b/.github/workflows/ats.test.yml index ae6b02051..ffe66cf9f 100644 --- a/.github/workflows/ats.test.yml +++ b/.github/workflows/ats.test.yml @@ -68,7 +68,7 @@ jobs: run: npm run ats:build - name: Run ATS tests - run: npm run ats:test + run: npm run ats:test:ci - name: Upload coverage report if: ${{ !cancelled() && always() }} diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md new file mode 100644 index 000000000..2d173277f --- /dev/null +++ b/CONTRIBUTING.md @@ -0,0 +1,245 @@ +# Contributing to Asset Tokenization Studio + +Thank you for your interest in contributing! This guide will help you get started. + +## Code of Conduct + +This project follows the [Contributor Covenant Code of Conduct](https://github.com/hashgraph/.github/blob/main/CODE_OF_CONDUCT.md). Please report unacceptable behavior to [oss@hedera.com](mailto:oss@hedera.com). + +## Getting Started + +1. **Fork and clone the repository** +2. **Check existing issues** or create a new one to discuss your changes +3. **Read the documentation** in [docs/index.md](docs/index.md) + +## Development Setup + +### Prerequisites + +- Node.js v20.19.4+ (ATS) or v24.0.0+ (Mass Payout backend) +- npm v10.9.0+ +- PostgreSQL (for Mass Payout backend) + +### Quick Setup + +```bash +# Fork and clone +git clone https://github.com/YOUR_USERNAME/asset-tokenization-studio.git +cd asset-tokenization-studio + +# Install dependencies +npm ci + +# Build everything +npm run setup + +# Run tests to verify +npm test +``` + +### Configure Environment + +Copy and configure environment files: + +```bash +# ATS Web App +cp apps/ats/web/.env.example apps/ats/web/.env + +# Mass Payout Backend +cp apps/mass-payout/backend/.env.example apps/mass-payout/backend/.env + +# Mass Payout Frontend +cp apps/mass-payout/frontend/.env.example apps/mass-payout/frontend/.env +``` + +## Development Workflow + +### Working on Code + +```bash +# ATS +npm run ats:build +npm run ats:test +npm run ats:start + +# Mass Payout +npm run mass-payout:build +npm run mass-payout:test +npm run mass-payout:backend:dev +npm run mass-payout:frontend:dev +``` + +### Linting and Formatting + +```bash +npm run lint:fix +npm run format +``` + +## Branch Naming + +Create descriptive branches: + +- `feature/your-feature-name` - New features +- `fix/issue-description` - Bug fixes +- `docs/documentation-topic` - Documentation updates + +```bash +git checkout -b feature/your-feature-name +``` + +## Commit Messages + +Follow [Conventional Commits](https://www.conventionalcommits.org/): + +``` +(): +``` + +**Types:** `feat`, `fix`, `docs`, `style`, `refactor`, `test`, `chore` + +**Requirements:** + +- **DCO Sign-off**: All commits must include a sign-off (`--signoff` or `-s`) +- **GPG Signature**: All commits must be GPG-signed (`-S`) + +**Examples:** + +```bash +git commit --signoff -S -m "feat(ats:sdk): add batch transfer support" +git commit --signoff -S -m "fix(mp:backend): resolve payout calculation error" +git commit --signoff -S -m "docs: update quick start guide" +``` + +**Configure GPG signing:** + +```bash +git config --global user.signingkey YOUR_GPG_KEY_ID +git config --global commit.gpgsign true +``` + +## Creating a Changeset (Required) + +**All changes to packages must include a changeset.** This is required for version management and changelog generation. + +```bash +npm run changeset +``` + +Follow the prompts to: + +1. Select which packages changed +2. Choose version bump type: + - **patch** (1.0.x): Bug fixes, minor improvements + - **minor** (1.x.0): New features, non-breaking changes + - **major** (x.0.0): Breaking changes +3. Describe your changes (this will appear in the changelog) + +Commit the generated changeset file: + +```bash +git add .changeset/*.md +git commit --signoff -S -m "chore: add changeset" +``` + +> **Note**: Changesets accumulate in the `.changeset` folder. During the release process, these changesets are consumed to automatically calculate the new version and update the changelog. + +**Bypass Labels**: For non-feature changes (docs, chores, hotfixes), you can skip the changeset requirement by adding one of these labels to your PR: `no-changeset`, `docs-only`, `chore`, or `hotfix`. + +## Pull Requests + +### Before Submitting + +1. Ensure code builds and tests pass +2. Run `npm run lint:fix` +3. Update relevant documentation +4. **Create a changeset** (required for all package changes) +5. Create meaningful commit messages + +### Submitting + +1. Push your branch: `git push origin your-branch-name` +2. Create a Pull Request targeting the **`develop`** branch +3. Fill in the PR description with: + - Summary of changes + - Motivation and context + - Testing performed + - Related issues +4. Request reviews from maintainers + +### Automated Checks + +PRs are validated automatically for: + +- βœ… Tests pass (only for changed modules) +- βœ… Changeset exists (or bypass label applied) +- βœ… DCO compliance (sign-off present) + +### PR Title Format + +``` +feat: add batch transfer functionality +fix: resolve race condition in scheduler +docs: add deployment guide +``` + +## Testing + +Write tests for new features and bug fixes: + +```bash +# Run all tests +npm test + +# Run specific tests +npm run ats:test +npm run mass-payout:test + +# Run tests for specific workspace +npm run test --workspace=packages/ats/sdk +``` + +## Documentation + +Update documentation when making changes: + +- **Code changes**: Update inline comments and JSDoc/TSDoc +- **New features**: Add user guides in `docs/ats/` or `docs/mass-payout/` +- **Architecture changes**: Consider creating an ADR in `docs/references/adr/` + +Run documentation site locally: + +```bash +npm run docs:dev +``` + +## Release Process (Maintainers Only) + +Releases follow this workflow: + +1. **Accumulation Phase**: Contributors add changesets with their PRs to `develop` branch +2. **Release Preparation**: When ready to release, run: + ```bash + npm run changeset:version + ``` + This consumes all changesets, updates package versions, and generates changelogs +3. **Release PR**: Create a PR from `develop` to `main` with the version changes +4. **Merge and Tag**: After approval, merge the PR and the release workflow will create tags and publish to npm + +## Getting Help + +- **GitHub Issues**: [Report bugs or request features](https://github.com/hashgraph/asset-tokenization-studio/issues) +- **Documentation**: [Complete documentation](docs/index.md) +- **Hedera Discord**: [Join the community](https://hedera.com/discord) + +## Additional Resources + +- [Project README](README.md) +- [ATS Documentation](docs/ats/) +- [Mass Payout Documentation](docs/mass-payout/) +- [Architecture Decision Records](docs/references/adr/) +- [Hedera Documentation](https://docs.hedera.com) + +--- + +Thank you for contributing to Asset Tokenization Studio! diff --git a/README.md b/README.md index f805e4fe2..c9a120014 100644 --- a/README.md +++ b/README.md @@ -34,7 +34,7 @@ This monorepo is structured with **npm workspaces** and is designed for scalabil - Gas-optimized operations and proxy-based upgradeable contracts. - **Enterprise Development Practices** - - **Domain-Driven Design (DDD)**, **Hexagonal Architecture**, and **CQS pattern**. + - **Domain-Driven Design (DDD)**, **Hexagonal Architecture**, and **CQRS pattern**. - Separation of concerns across smart contracts, SDKs, frontends, and backends. - Strong CI/CD workflows with conditional builds and tests for each module. - Custodian integration at the SDK level (Dfns, Fireblocks, AWS KMS). @@ -43,19 +43,39 @@ This monorepo is structured with **npm workspaces** and is designed for scalabil ``` β”œβ”€β”€ packages/ -β”‚ β”œβ”€β”€ ats/ -β”‚ β”‚ β”œβ”€β”€ contracts # Solidity smart contracts for ATS -β”‚ β”‚ └── sdk # TypeScript SDK for ATS contracts -β”‚ └── mass-payout/ -β”‚ β”œβ”€β”€ contracts # Solidity smart contracts for payout flows -β”‚ └── sdk # TypeScript SDK for payout flows +β”‚ β”œβ”€β”€ ats/ +β”‚ β”‚ β”œβ”€β”€ contracts # Solidity smart contracts for ATS +β”‚ β”‚ └── sdk # TypeScript SDK for ATS contracts +β”‚ └── mass-payout/ +β”‚ β”œβ”€β”€ contracts # Solidity smart contracts for payout flows +β”‚ └── sdk # TypeScript SDK for payout flows β”œβ”€β”€ apps/ -β”‚ β”œβ”€β”€ ats/ -β”‚ β”‚ └── web # Frontend dApp for Asset Tokenization Studio -β”‚ └── mass-payout/ -β”‚ β”œβ”€β”€ backend # API backend for payout orchestration -β”‚ └── frontend # Admin panel for managing payouts -└── package.json # Workspace configuration and root scripts +β”‚ β”œβ”€β”€ ats/ +β”‚ β”‚ └── web # Frontend dApp for Asset Tokenization Studio +β”‚ β”œβ”€β”€ mass-payout/ +β”‚ β”‚ β”œβ”€β”€ backend # API backend for payout orchestration +β”‚ β”‚ └── frontend # Admin panel for managing payouts +β”‚ └── docs # Documentation site (Docusaurus) +β”œβ”€β”€ docs/ # Technical documentation +β”‚ β”œβ”€β”€ ats/ # ATS documentation +β”‚ β”œβ”€β”€ mass-payout/ # Mass Payout documentation +β”‚ └── references/ # Cross-product documentation +β”‚ β”œβ”€β”€ adr/ # Architecture Decision Records +β”‚ β”œβ”€β”€ proposals/ # Enhancement Proposals +β”‚ └── guides/ # General Guides +└── package.json # Workspace configuration and root scripts +``` + +## Documentation + +**Complete documentation:** [docs/index.md](docs/index.md) + +This project follows a **"Docs-as-Code"** philosophy, treating documentation with the same rigor as software. We maintain comprehensive documentation organized by product. + +You can also run the documentation site locally: + +```bash +npm run docs:dev ``` ## Architecture @@ -117,17 +137,39 @@ flowchart TD From the monorepo root: ```bash +npm run setup +``` + +This command will install dependencies, compile contracts, build SDKs, and set up web and backend environments. + +### Selective Setup (ATS or Mass Payout only) + +You can set up only the product you need without installing all dependencies: + +```bash +# Setup only ATS (contracts, SDK, and web app) +npm run ats:setup -# Install all dependencies -npm ci +# Setup only Mass Payout (contracts, SDK, backend, and frontend) +npm run mass-payout:setup ``` +### Clean Installation + +If you had a previous installation and want to start fresh: + ```bash -# Build all packages and applications -npm run setup +# Clean install for ATS +npm run ats:setup:clean + +# Clean install for Mass Payout +npm run mass-payout:setup:clean + +# Clean install for everything +npm run setup:clean ``` -This command will compile contracts, build SDKs, and set up web and backend environments. +This will remove previous build artifacts and reinstall dependencies before building. ### Environment Configuration @@ -162,14 +204,17 @@ npm run ats:test # Run tests for all ATS modules ```bash npm run mass-payout:build # Build contracts, SDK, backend, and frontend -npm run mass-payout:backend:dev # Start backend in dev mode npm run mass-payout:frontend:dev # Start frontend in dev mode npm run mass-payout:test # Run all payout-related tests + +# Backend must be started from its directory: +cd apps/mass-payout/backend +npm run start:dev # Start backend in dev mode ``` - Contracts (packages/mass-payout/contracts) β†’ Solidity payout contracts - SDK (packages/mass-payout/sdk) β†’ TypeScript SDK for payout execution -- Backend (apps/mass-payout/backend) β†’ API with PostgreSQL +- Backend (apps/mass-payout/backend) β†’ API with PostgreSQL (must run from its directory) - Frontend (apps/mass-payout/frontend) β†’ Admin panel in React + Chakra UI ## Testing diff --git a/addLicence.js b/addLicence.js index fae78654c..e19c8076c 100755 --- a/addLicence.js +++ b/addLicence.js @@ -1,6 +1,6 @@ #!/usr/bin/env node -const { promises: fs } = require('fs'); -const path = require('path'); +const { promises: fs } = require("fs"); +const path = require("path"); async function findFiles(dir, extension) { let files = []; @@ -9,7 +9,7 @@ async function findFiles(dir, extension) { for (const entry of entries) { const fullPath = path.join(dir, entry.name); if (entry.isDirectory()) { - if (entry.name === 'node_modules') continue; + if (entry.name === "node_modules") continue; files = files.concat(await findFiles(fullPath, extension)); } else if (entry.isFile() && path.extname(fullPath) === `.${extension}`) { files.push(fullPath); @@ -24,21 +24,17 @@ async function findFiles(dir, extension) { function normalizeLicenseContent(content) { return content .trim() - .replace(/\r\n/g, '\n') // Normalize line endings - .split('\n') - .map((line) => line.trim().replace(/^\*/, '').trim()) - .join('\n') - .replace(/\s+/g, ' ') - .replace(/\n+/g, '\n'); + .replace(/\r\n/g, "\n") // Normalize line endings + .split("\n") + .map((line) => line.trim().replace(/^\*/, "").trim()) + .join("\n") + .replace(/\s+/g, " ") + .replace(/\n+/g, "\n"); } -async function prependContentToFiles( - rootDirectory, - contentFile, - fileExtension, -) { +async function prependContentToFiles(rootDirectory, contentFile, fileExtension) { try { - const content = await fs.readFile(contentFile, 'utf8'); + const content = await fs.readFile(contentFile, "utf8"); const comment = `/*\n${content}\n*/\n\n`; // Create normalized version for comparison @@ -46,13 +42,13 @@ async function prependContentToFiles( const files = await findFiles(rootDirectory, fileExtension); if (files.length === 0) { - console.log('No matching files found.'); + console.log("No matching files found."); return; } for (const file of files) { try { - const existingContent = await fs.readFile(file, 'utf8'); + const existingContent = await fs.readFile(file, "utf8"); // Check for existing license using more sophisticated detection const existingHeaderMatch = existingContent.match(/^\/\*[\s\S]*?\*\//); @@ -61,7 +57,7 @@ async function prependContentToFiles( if (existingHeaderMatch) { const existingHeader = existingHeaderMatch[0]; const existingNormalized = normalizeLicenseContent( - existingHeader.replace(/^\/\*+/, '').replace(/\*+\/$/, ''), + existingHeader.replace(/^\/\*+/, "").replace(/\*+\/$/, ""), ); // Compare normalized content @@ -72,17 +68,15 @@ async function prependContentToFiles( await fs.writeFile(file, comment + existingContent); console.log(`Prepended content to ${file}`); } else { - console.log( - `Valid license header already exists in ${file}, skipping.`, - ); + console.log(`Valid license header already exists in ${file}, skipping.`); } } catch (error) { console.error(`Error processing file ${file}:`, error); } } } catch (error) { - console.error('Error:', error); + console.error("Error:", error); } } -prependContentToFiles('./', './LICENSE', 'ts'); +prependContentToFiles("./", "./LICENSE", "ts"); diff --git a/apps/ats/web/.env.sample b/apps/ats/web/.env.sample index 303b1aaa4..08d0988f7 100644 --- a/apps/ats/web/.env.sample +++ b/apps/ats/web/.env.sample @@ -8,8 +8,10 @@ REACT_APP_SHOW_DISCLAIMER="true" # * Network Configuration REACT_APP_MIRROR_NODE='https://testnet.mirrornode.hedera.com/api/v1/' REACT_APP_RPC_NODE='https://testnet.hashio.io/api' -REACT_APP_RPC_RESOLVER='0.0.6797832' -REACT_APP_RPC_FACTORY='0.0.6797955' + +# * Smart Contract Addresses (Version 2.0.1) +REACT_APP_RPC_RESOLVER='0.0.7511642' +REACT_APP_RPC_FACTORY='0.0.7512002' # * Hedera Wallet Connnect REACT_APP_PROJECT_ID='1a2b3c4d [...] 9a0b1c2d3e4f' diff --git a/apps/ats/web/CHANGELOG.md b/apps/ats/web/CHANGELOG.md index 9f1cc94ca..2e0679f3b 100644 --- a/apps/ats/web/CHANGELOG.md +++ b/apps/ats/web/CHANGELOG.md @@ -1,5 +1,26 @@ # @hashgraph/asset-tokenization-dapp +## 4.0.0 + +### Major Changes + +- 6950d41: Code refactor plus Coupon fixing, start and end date added. Four type of bonds exist : standard, fixed rate, kpi linked rate and sustainability performance target rate + +### Minor Changes + +- 902fea1: Added Docusaurus and project documentation, renamed the MP package organization, and added a Claude documentation command. + +### Patch Changes + +- Updated dependencies [3ba32c9] +- Updated dependencies [902fea1] +- Updated dependencies [650874b] +- Updated dependencies [6950d41] +- Updated dependencies [8f7487a] +- Updated dependencies [c10a8ee] +- Updated dependencies [cbcc1db] + - @hashgraph/asset-tokenization-sdk@4.0.0 + ## 3.1.0 ### Patch Changes diff --git a/apps/ats/web/README.md b/apps/ats/web/README.md index 1c1797f14..be865df7b 100644 --- a/apps/ats/web/README.md +++ b/apps/ats/web/README.md @@ -130,3 +130,13 @@ npm run test:watch # Update test snapshots npm run test:update ``` + +--- + +## πŸ“š Documentation + +For more information about the project, see: + +- [Guides](https://github.com/hashgraph/asset-tokenization-studio/tree/main/docs/guides) +- [API Documentation](https://github.com/hashgraph/asset-tokenization-studio/tree/main/docs/api) +- [References](https://github.com/hashgraph/asset-tokenization-studio/tree/main/docs/references) diff --git a/apps/ats/web/package.json b/apps/ats/web/package.json index 83cf79868..728666e9c 100644 --- a/apps/ats/web/package.json +++ b/apps/ats/web/package.json @@ -1,6 +1,6 @@ { "name": "@hashgraph/asset-tokenization-dapp", - "version": "3.1.0", + "version": "4.0.0", "license": "Apache-2.0", "scripts": { "build": "tsc && vite build", diff --git a/apps/ats/web/src/i18n/en/security/coupons.ts b/apps/ats/web/src/i18n/en/security/coupons.ts index 653d42bc7..db3d21992 100644 --- a/apps/ats/web/src/i18n/en/security/coupons.ts +++ b/apps/ats/web/src/i18n/en/security/coupons.ts @@ -13,7 +13,9 @@ export default { recordDate: "Record Date", executionDate: "Execution Date", rate: "Coupon Rate", - period: "Period", + startDate: "Start Date", + endDate: "End Date", + fixingDate: "Fixing Date", snapshotId: "Snapshot", }, emptyTable: "No coupons found", @@ -36,17 +38,20 @@ export default { placeholder: "0,123%", tooltip: "Interest rate for the coupon.", }, - period: { - label: "Coupon period", - placeholder: "Select coupon period", - tooltip: "The period between coupon payments. This field is required for all coupon operations.", - options: { - day: "1 Day", - week: "1 Week", - month: "1 Month", - quarter: "3 Months", - year: "1 Year", - }, + startDate: { + label: "Start date", + placeholder: "Select start date", + tooltip: "Coupon’s start date, must occur before the end date.", + }, + endDate: { + label: "End date", + placeholder: "Select end date", + tooltip: "Coupon’s end date, Accrual period correspond to the period between start and end date.", + }, + fixingDate: { + label: "Fixing date", + placeholder: "Select fixing date", + tooltip: "Coupon’s fixing date, floating rate coupons only.", }, }, }, @@ -68,7 +73,10 @@ export default { }, details: { title: "Detail", - paymentDay: "Payment day", + paymentDay: "Payment date", + startDay: "Start date", + endDay: "End date", + fixingDay: "Fixing date", balance: "Balance", amount: "Amount", recordDateReached: "Record Date Reached", diff --git a/apps/ats/web/src/utils/constants.ts b/apps/ats/web/src/utils/constants.ts index 39f6d60c0..2386005d4 100644 --- a/apps/ats/web/src/utils/constants.ts +++ b/apps/ats/web/src/utils/constants.ts @@ -203,26 +203,26 @@ */ -export const METAMASK_URL = 'https://metamask.io/download/'; +export const METAMASK_URL = "https://metamask.io/download/"; export enum WalletStatus { - connected = 'CONNECTED', - connecting = 'CONNECTING', - disconnected = 'DISCONNECTED', - uninstalled = 'UNINSTALLED', + connected = "CONNECTED", + connecting = "CONNECTING", + disconnected = "DISCONNECTED", + uninstalled = "UNINSTALLED", } export enum User { - admin = 'admin', - holder = 'holder', - general = 'general', + admin = "admin", + holder = "holder", + general = "general", } -export const LOCALE = 'en-US'; +export const LOCALE = "en-US"; export const COUPONS_FACTOR = 1000; export const NOMINAL_VALUE_DECIMALS = 2; -export const DATE_TIME_FORMAT = 'dd/MM/yyyy HH:mm:ss'; +export const DATE_TIME_FORMAT = "dd/MM/yyyy HH:mm:ss"; // * Time periods (in seconds and milliseconds) export const TIME_PERIODS_S = { @@ -247,5 +247,6 @@ export const TIME_PERIODS_MS = { YEAR: TIME_PERIODS_S.YEAR * 1000, }; -export const DEFAULT_PARTITION = - '0x0000000000000000000000000000000000000000000000000000000000000001'; +export const DEFAULT_PARTITION = "0x0000000000000000000000000000000000000000000000000000000000000001"; + +export const RATE_MAX_DECIMALS = 3; diff --git a/apps/ats/web/src/views/DigitalSecurityDetails/Components/Coupons/CouponsList.tsx b/apps/ats/web/src/views/DigitalSecurityDetails/Components/Coupons/CouponsList.tsx index 4c1c5ad34..9ccc6c390 100644 --- a/apps/ats/web/src/views/DigitalSecurityDetails/Components/Coupons/CouponsList.tsx +++ b/apps/ats/web/src/views/DigitalSecurityDetails/Components/Coupons/CouponsList.tsx @@ -1,24 +1,17 @@ -import { - CouponViewModel, - GetAllCouponsRequest, -} from '@hashgraph/asset-tokenization-sdk'; -import { useGetAllCoupons } from '../../../../hooks/queries/useCoupons'; -import { useParams } from 'react-router-dom'; -import { createColumnHelper } from '@tanstack/table-core'; -import { Table, Text } from 'io-bricks-ui'; -import { useTranslation } from 'react-i18next'; -import { DATE_TIME_FORMAT } from '../../../../utils/constants'; -import { - formatDate, - formatCouponPeriod, - formatNumberLocale, -} from '../../../../utils/format'; +import { CouponViewModel, GetAllCouponsRequest } from "@hashgraph/asset-tokenization-sdk"; +import { useGetAllCoupons } from "../../../../hooks/queries/useCoupons"; +import { useParams } from "react-router-dom"; +import { createColumnHelper } from "@tanstack/table-core"; +import { Table, Text } from "io-bricks-ui"; +import { useTranslation } from "react-i18next"; +import { DATE_TIME_FORMAT } from "../../../../utils/constants"; +import { formatDate, formatNumberLocale } from "../../../../utils/format"; export const CouponsList = () => { const { id } = useParams(); - const { t } = useTranslation('security', { - keyPrefix: 'details.coupons.list', + const { t } = useTranslation("security", { + keyPrefix: "details.coupons.list", }); const { @@ -34,34 +27,44 @@ export const CouponsList = () => { const columnHelper = createColumnHelper(); const columns = [ - columnHelper.accessor('couponId', { - header: t('columns.id'), + columnHelper.accessor("couponId", { + header: t("columns.id"), enableSorting: true, }), - columnHelper.accessor('recordDate', { - header: t('columns.recordDate'), + columnHelper.accessor("recordDate", { + header: t("columns.recordDate"), cell: (row) => formatDate(row.getValue(), DATE_TIME_FORMAT), enableSorting: false, }), - columnHelper.accessor('executionDate', { - header: t('columns.executionDate'), + columnHelper.accessor("executionDate", { + header: t("columns.executionDate"), cell: (row) => formatDate(row.getValue(), DATE_TIME_FORMAT), enableSorting: false, }), - columnHelper.accessor('rate', { - header: t('columns.rate'), + columnHelper.accessor("rate", { + header: t("columns.rate"), cell: (row) => - `${formatNumberLocale(row.getValue(), row.row.original.rateDecimals ?? 0)}%`, + `${formatNumberLocale(row.getValue(), row.row.original.rateDecimals ? row.row.original.rateDecimals - 2 : 0)}%`, enableSorting: false, }), - columnHelper.accessor('period', { - header: t('columns.period'), - cell: (row) => formatCouponPeriod(row.getValue()), + columnHelper.accessor("startDate", { + header: t("columns.startDate"), + cell: (row) => formatDate(row.getValue(), DATE_TIME_FORMAT), + enableSorting: false, + }), + columnHelper.accessor("endDate", { + header: t("columns.endDate"), + cell: (row) => formatDate(row.getValue(), DATE_TIME_FORMAT), + enableSorting: false, + }), + columnHelper.accessor("fixingDate", { + header: t("columns.fixingDate"), + cell: (row) => formatDate(row.getValue(), DATE_TIME_FORMAT), enableSorting: false, }), - columnHelper.accessor('snapshotId', { - header: t('columns.snapshotId'), - cell: (row) => row.getValue() ?? '-', + columnHelper.accessor("snapshotId", { + header: t("columns.snapshotId"), + cell: (row) => row.getValue() ?? "-", enableSorting: false, }), ]; @@ -71,7 +74,7 @@ export const CouponsList = () => { columns={columns} data={coupons ?? []} name="coupons-list" - emptyComponent={{t('emptyTable')}} + emptyComponent={{t("emptyTable")}} isLoading={isLoadingCoupons || isFetchingCoupons} /> ); diff --git a/apps/ats/web/src/views/DigitalSecurityDetails/Components/Coupons/ProgramCoupon.tsx b/apps/ats/web/src/views/DigitalSecurityDetails/Components/Coupons/ProgramCoupon.tsx index 6c8bb46a5..c57cc0523 100644 --- a/apps/ats/web/src/views/DigitalSecurityDetails/Components/Coupons/ProgramCoupon.tsx +++ b/apps/ats/web/src/views/DigitalSecurityDetails/Components/Coupons/ProgramCoupon.tsx @@ -203,52 +203,42 @@ */ -import { Button, Center, HStack, Stack, VStack } from '@chakra-ui/react'; -import { - CalendarInputController, - InputNumberController, - PhosphorIcon, - SelectController, - Text, - Tooltip, -} from 'io-bricks-ui'; -import { Info } from '@phosphor-icons/react'; -import { isAfterDate, min, required } from '../../../../utils/rules'; -import { SubmitHandler, useForm } from 'react-hook-form'; -import { useTranslation } from 'react-i18next'; -import { - GetBondDetailsRequest, - SetCouponRequest, -} from '@hashgraph/asset-tokenization-sdk'; -import { useParams } from 'react-router-dom'; -import { useCoupons } from '../../../../hooks/queries/useCoupons'; -import { useGetBondDetails } from '../../../../hooks/queries/useGetSecurityDetails'; -import { - dateToUnixTimestamp, - validateCouponPeriod, -} from '../../../../utils/format'; -import { DATE_TIME_FORMAT, TIME_PERIODS_S } from '../../../../utils/constants'; -import { isBeforeDate } from '../../../../utils/helpers'; +import { Button, Center, HStack, Stack, VStack } from "@chakra-ui/react"; +import { CalendarInputController, InputNumberController, PhosphorIcon, Text, Tooltip } from "io-bricks-ui"; +import { Info } from "@phosphor-icons/react"; +import { isAfterDate, min, required } from "../../../../utils/rules"; +import { SubmitHandler, useForm } from "react-hook-form"; +import { useTranslation } from "react-i18next"; +import { GetBondDetailsRequest, SetCouponRequest } from "@hashgraph/asset-tokenization-sdk"; +import { useParams } from "react-router-dom"; +import { useCoupons } from "../../../../hooks/queries/useCoupons"; +import { useGetBondDetails } from "../../../../hooks/queries/useGetSecurityDetails"; +import { dateToUnixTimestamp } from "../../../../utils/format"; +import { DATE_TIME_FORMAT, RATE_MAX_DECIMALS } from "../../../../utils/constants"; +import { isBeforeDate } from "../../../../utils/helpers"; interface ProgramCouponFormValues { rate: number; recordTimestamp: string; executionTimestamp: string; - period: string; + startTimestamp: string; + endTimestamp: string; + fixingTimestamp: string; } export const ProgramCoupon = () => { const { mutate: createCoupon, isLoading } = useCoupons(); - const { control, formState, handleSubmit, watch, reset } = - useForm({ - mode: 'all', - }); - const { t: tForm } = useTranslation('security', { - keyPrefix: 'details.coupons.program.input', + const { control, formState, handleSubmit, watch, reset } = useForm({ + mode: "all", + }); + const { t: tForm } = useTranslation("security", { + keyPrefix: "details.coupons.program.input", }); - const { t: tGlobal } = useTranslation('globals'); - const { id = '' } = useParams(); - const recordTimestamp = watch('recordTimestamp'); + const { t: tGlobal } = useTranslation("globals"); + const { id = "" } = useParams(); + const recordTimestamp = watch("recordTimestamp"); + const startTimestamp = watch("startTimestamp"); + const fixingTimestamp = watch("fixingTimestamp"); const { data: bondDetails } = useGetBondDetails( new GetBondDetailsRequest({ @@ -258,11 +248,14 @@ export const ProgramCoupon = () => { const submit: SubmitHandler = (params) => { const request = new SetCouponRequest({ - securityId: id ?? '', - rate: params.rate.toString(), + securityId: id ?? "", + rate: (params.rate / 100).toFixed(RATE_MAX_DECIMALS + 2), recordTimestamp: dateToUnixTimestamp(params.recordTimestamp), executionTimestamp: dateToUnixTimestamp(params.executionTimestamp), - period: params.period, + startTimestamp: dateToUnixTimestamp(params.startTimestamp), + endTimestamp: dateToUnixTimestamp(params.endTimestamp), + fixingTimestamp: dateToUnixTimestamp(params.fixingTimestamp), + rateStatus: 1, }); createCoupon(request, { @@ -276,20 +269,11 @@ export const ProgramCoupon = () => { return (
{canProgramCoupon ? ( - + - - {tForm('recordDate.label')}* - - + {tForm("recordDate.label")}* + @@ -300,7 +284,7 @@ export const ProgramCoupon = () => { rules={{ required }} fromDate={new Date()} toDate={new Date(bondDetails.maturityDate)} - placeholder={tForm('recordDate.placeholder')} + placeholder={tForm("recordDate.placeholder")} withTimeInput format={DATE_TIME_FORMAT} /> @@ -308,10 +292,8 @@ export const ProgramCoupon = () => { - - {tForm('paymentDate.label')}* - - + {tForm("paymentDate.label")}* + @@ -321,11 +303,57 @@ export const ProgramCoupon = () => { id="executionTimestamp" rules={{ required, - validate: isAfterDate(new Date(recordTimestamp)), + validate: { + afterRecordTimestamp: isAfterDate(new Date(recordTimestamp), DATE_TIME_FORMAT), + afterFixingTimestamp: isAfterDate(new Date(fixingTimestamp), DATE_TIME_FORMAT), + }, + }} + fromDate={new Date()} + toDate={new Date(bondDetails.maturityDate)} + placeholder={tForm("paymentDate.placeholder")} + withTimeInput + format={DATE_TIME_FORMAT} + /> + )} + + + + {tForm("startDate.label")}* + + + + + {bondDetails && ( + + )} + + + + {tForm("endDate.label")}* + + + + + {bondDetails && ( + @@ -333,8 +361,30 @@ export const ProgramCoupon = () => { - {tForm('rate.label')}* - + {tForm("fixingDate.label")}* + + + + + {bondDetails && ( + + )} + + + + {tForm("rate.label")}* + @@ -343,58 +393,14 @@ export const ProgramCoupon = () => { control={control} id="rate" rules={{ required, min: min(0) }} - placeholder={tForm('rate.placeholder')} - decimalScale={3} + placeholder={tForm("rate.placeholder")} + decimalScale={RATE_MAX_DECIMALS} fixedDecimalScale={true} suffix="%" thousandSeparator="," decimalSeparator="." /> - - - - {tForm('period.label')}* - - - - - - { - const validation = validateCouponPeriod(parseInt(value)); - return validation === true || validation; - }, - }} - placeholder={tForm('period.placeholder')} - options={[ - { - label: tForm('period.options.day'), - value: TIME_PERIODS_S.DAY.toString(), - }, - { - label: tForm('period.options.week'), - value: TIME_PERIODS_S.WEEK.toString(), - }, - { - label: tForm('period.options.month'), - value: TIME_PERIODS_S.MONTH.toString(), - }, - { - label: tForm('period.options.quarter'), - value: TIME_PERIODS_S.QUARTER.toString(), - }, - { - label: tForm('period.options.year'), - value: TIME_PERIODS_S.YEAR.toString(), - }, - ]} - /> - ) : ( - {tForm('expired')} + {tForm("expired")} )}
diff --git a/apps/ats/web/src/views/DigitalSecurityDetails/Components/Coupons/SeeCoupon.tsx b/apps/ats/web/src/views/DigitalSecurityDetails/Components/Coupons/SeeCoupon.tsx index eb55bc2c5..46a330be5 100644 --- a/apps/ats/web/src/views/DigitalSecurityDetails/Components/Coupons/SeeCoupon.tsx +++ b/apps/ats/web/src/views/DigitalSecurityDetails/Components/Coupons/SeeCoupon.tsx @@ -226,6 +226,24 @@ export const SeeCoupon = () => { canCopy: true, valueToCopy: coupons.executionDate.toDateString(), }, + { + title: tDetail("startDay"), + description: formatDate(coupons.startDate, DATE_TIME_FORMAT), + canCopy: true, + valueToCopy: coupons.startDate.toDateString(), + }, + { + title: tDetail("endDay"), + description: formatDate(coupons.endDate, DATE_TIME_FORMAT), + canCopy: true, + valueToCopy: coupons.endDate.toDateString(), + }, + { + title: tDetail("fixingDay"), + description: formatDate(coupons.fixingDate, DATE_TIME_FORMAT), + canCopy: true, + valueToCopy: coupons.fixingDate.toDateString(), + }, { title: tDetail("balance"), description: formatNumberLocale(couponsFor.tokenBalance, parseFloat(couponsFor.decimals)), diff --git a/apps/ats/web/src/views/DigitalSecurityDetails/Components/Coupons/__tests__/SeeCoupon.test.tsx b/apps/ats/web/src/views/DigitalSecurityDetails/Components/Coupons/__tests__/SeeCoupon.test.tsx index 1fd522159..8111900e8 100644 --- a/apps/ats/web/src/views/DigitalSecurityDetails/Components/Coupons/__tests__/SeeCoupon.test.tsx +++ b/apps/ats/web/src/views/DigitalSecurityDetails/Components/Coupons/__tests__/SeeCoupon.test.tsx @@ -32,7 +32,15 @@ const mockCouponsForData = { }; const mockCouponsData = { + couponId: 1, executionDate: new Date("2024-06-15T10:00:00Z"), + startDate: new Date("2024-01-01T00:00:00Z"), + endDate: new Date("2024-06-15T10:00:00Z"), + fixingDate: new Date("2024-06-15T10:00:00Z"), + recordDate: new Date("2024-01-01T00:00:00Z"), + rate: "5.01", + rateDecimals: 2, + rateStatus: 1, }; const mockCouponsAmountForData = { diff --git a/apps/ats/web/src/views/DigitalSecurityDetails/Components/Coupons/__tests__/__snapshots__/Coupons.test.tsx.snap b/apps/ats/web/src/views/DigitalSecurityDetails/Components/Coupons/__tests__/__snapshots__/Coupons.test.tsx.snap index 864003792..7c85449cd 100644 --- a/apps/ats/web/src/views/DigitalSecurityDetails/Components/Coupons/__tests__/__snapshots__/Coupons.test.tsx.snap +++ b/apps/ats/web/src/views/DigitalSecurityDetails/Components/Coupons/__tests__/__snapshots__/Coupons.test.tsx.snap @@ -170,7 +170,33 @@ exports[`Coupons should render correctly 1`] = `
- Period + Start Date +
+ + + +
+
+ End Date +
+
+ + +
+
+ Fixing Date
@@ -258,6 +284,28 @@ exports[`Coupons should render correctly 1`] = ` /> + +
+
+
+ + +
+
+
+ @@ -498,7 +546,7 @@ exports[`Coupons should render correctly 1`] = `

- Coupon rate* + Start date*

+
- Coupon period* + End date*

+
+ + +
+ +
+
+

+ Fixing date* +

+
+ + + +
+
+
+ + +
+
+
+
+

+ Coupon rate* +

+
+ + + +
+
+
+
- Coupon period* + End date*

+
+ + +
+ +
+
+

+ Fixing date* +

+
+ + + +
+
+
+ + +
+
+
+
+

+ Coupon rate* +

+
+ + + +
+
+
+
npm run deploy +``` diff --git a/apps/docs/docusaurus.config.ts b/apps/docs/docusaurus.config.ts new file mode 100644 index 000000000..fb122d83b --- /dev/null +++ b/apps/docs/docusaurus.config.ts @@ -0,0 +1,204 @@ +import { themes as prismThemes } from "prism-react-renderer"; +import type { Config } from "@docusaurus/types"; +import type * as Preset from "@docusaurus/preset-classic"; + +// This runs in Node.js - Don't use client-side code here (browser APIs, JSX...) + +const config: Config = { + title: "Asset Tokenization Studio", + tagline: "Tools for tokenizing financial assets on Hedera network and managing large-scale payout distributions", + favicon: "img/favicon.svg", + + // Future flags, see https://docusaurus.io/docs/api/docusaurus-config#future + future: { + v4: true, // Improve compatibility with the upcoming Docusaurus v4 + }, + + // Set the production url of your site here + url: "https://hashgraph.github.io", + // Set the // pathname under which your site is served + // For GitHub pages deployment, it is often '//' + baseUrl: "/asset-tokenization-studio/", + + // GitHub pages deployment config. + // If you aren't using GitHub pages, you don't need these. + organizationName: "hashgraph", // Usually your GitHub org/user name. + projectName: "asset-tokenization-studio", // Usually your repo name. + + onBrokenLinks: "throw", + + // Even if you don't use internationalization, you can use this field to set + // useful metadata like html lang. For example, if your site is Chinese, you + // may want to replace "en" with "zh-Hans". + i18n: { + defaultLocale: "en", + locales: ["en"], + }, + + presets: [ + [ + "classic", + { + docs: false, // Disable default docs plugin + blog: false, // Blog disabled + theme: { + customCss: "./src/css/custom.css", + }, + } satisfies Preset.Options, + ], + ], + + plugins: [ + [ + "@docusaurus/plugin-content-docs", + { + id: "ats", + path: "../../docs/ats", + routeBasePath: "ats", + sidebarPath: "./sidebars-ats.ts", + editUrl: "https://github.com/hashgraph/asset-tokenization-studio/tree/main/", + }, + ], + [ + "@docusaurus/plugin-content-docs", + { + id: "mass-payout", + path: "../../docs/mass-payout", + routeBasePath: "mass-payout", + sidebarPath: "./sidebars-mass-payout.ts", + editUrl: "https://github.com/hashgraph/asset-tokenization-studio/tree/main/", + }, + ], + [ + "@docusaurus/plugin-content-docs", + { + id: "references", + path: "../../docs/references", + routeBasePath: "references", + sidebarPath: "./sidebars-references.ts", + editUrl: "https://github.com/hashgraph/asset-tokenization-studio/tree/main/", + }, + ], + ], + + markdown: { + mermaid: true, + }, + + themes: ["@docusaurus/theme-mermaid"], + + themeConfig: { + // Social card for link previews (optional) + // image: 'img/social-card.jpg', + colorMode: { + respectPrefersColorScheme: true, + }, + navbar: { + title: "Asset Tokenization Studio", + logo: { + alt: "Asset Tokenization Studio Logo", + src: "img/logo.svg", + }, + items: [ + { + type: "doc", + docId: "intro", + docsPluginId: "ats", + position: "left", + label: "ATS", + }, + { + type: "doc", + docId: "intro", + docsPluginId: "mass-payout", + position: "left", + label: "Mass Payout", + }, + { + type: "doc", + docId: "index", + docsPluginId: "references", + position: "left", + label: "References", + }, + { + href: "https://github.com/hashgraph/asset-tokenization-studio", + label: "GitHub", + position: "right", + }, + ], + }, + footer: { + style: "dark", + links: [ + { + title: "Documentation", + items: [ + { + label: "ATS Getting Started", + to: "/asset-tokenization-studio/ats/getting-started/quick-start", + }, + { + label: "MP Getting Started", + to: "/asset-tokenization-studio/mass-payout/getting-started/quick-start", + }, + ], + }, + { + title: "Products", + items: [ + { + label: "Asset Tokenization Studio", + href: "https://github.com/hashgraph/asset-tokenization-studio/tree/main/packages/ats", + }, + { + label: "Mass Payout", + href: "https://github.com/hashgraph/asset-tokenization-studio/tree/main/packages/mass-payout", + }, + ], + }, + { + title: "Community", + items: [ + { + label: "GitHub", + href: "https://github.com/hashgraph/asset-tokenization-studio", + }, + { + label: "Issues", + href: "https://github.com/hashgraph/asset-tokenization-studio/issues", + }, + { + label: "Contributing", + href: "https://github.com/hashgraph/asset-tokenization-studio/blob/main/CONTRIBUTING.md", + }, + ], + }, + { + title: "Hedera", + items: [ + { + label: "Hedera Network", + href: "https://hedera.com", + }, + { + label: "Hedera Docs", + href: "https://docs.hedera.com", + }, + { + label: "Hedera Portal", + href: "https://portal.hedera.com", + }, + ], + }, + ], + copyright: `Copyright Β© ${new Date().getFullYear()} Hedera Hashgraph, LLC. Licensed under Apache License 2.0.`, + }, + prism: { + theme: prismThemes.github, + darkTheme: prismThemes.dracula, + }, + } satisfies Preset.ThemeConfig, +}; + +export default config; diff --git a/apps/docs/package-lock.json b/apps/docs/package-lock.json new file mode 100644 index 000000000..46adddabd --- /dev/null +++ b/apps/docs/package-lock.json @@ -0,0 +1,18029 @@ +{ + "name": "docs", + "version": "0.0.0", + "lockfileVersion": 3, + "requires": true, + "packages": { + "": { + "name": "docs", + "version": "0.0.0", + "dependencies": { + "@docusaurus/core": "3.9.2", + "@docusaurus/preset-classic": "3.9.2", + "@mdx-js/react": "^3.0.0", + "clsx": "^2.0.0", + "prism-react-renderer": "^2.3.0", + "react": "^19.0.0", + "react-dom": "^19.0.0" + }, + "devDependencies": { + "@docusaurus/module-type-aliases": "3.9.2", + "@docusaurus/tsconfig": "3.9.2", + "@docusaurus/types": "3.9.2", + "typescript": "~5.6.2" + }, + "engines": { + "node": ">=20.0" + } + }, + "node_modules/@ai-sdk/gateway": { + "version": "2.0.21", + "resolved": "https://registry.npmjs.org/@ai-sdk/gateway/-/gateway-2.0.21.tgz", + "integrity": "sha512-BwV7DU/lAm3Xn6iyyvZdWgVxgLu3SNXzl5y57gMvkW4nGhAOV5269IrJzQwGt03bb107sa6H6uJwWxc77zXoGA==", + "license": "Apache-2.0", + "dependencies": { + "@ai-sdk/provider": "2.0.0", + "@ai-sdk/provider-utils": "3.0.19", + "@vercel/oidc": "3.0.5" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "zod": "^3.25.76 || ^4.1.8" + } + }, + "node_modules/@ai-sdk/provider": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@ai-sdk/provider/-/provider-2.0.0.tgz", + "integrity": "sha512-6o7Y2SeO9vFKB8lArHXehNuusnpddKPk7xqL7T2/b+OvXMRIXUO1rR4wcv1hAFUAT9avGZshty3Wlua/XA7TvA==", + "license": "Apache-2.0", + "dependencies": { + "json-schema": "^0.4.0" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/@ai-sdk/provider-utils": { + "version": "3.0.19", + "resolved": "https://registry.npmjs.org/@ai-sdk/provider-utils/-/provider-utils-3.0.19.tgz", + "integrity": "sha512-W41Wc9/jbUVXVwCN/7bWa4IKe8MtxO3EyA0Hfhx6grnmiYlCvpI8neSYWFE0zScXJkgA/YK3BRybzgyiXuu6JA==", + "license": "Apache-2.0", + "dependencies": { + "@ai-sdk/provider": "2.0.0", + "@standard-schema/spec": "^1.0.0", + "eventsource-parser": "^3.0.6" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "zod": "^3.25.76 || ^4.1.8" + } + }, + "node_modules/@ai-sdk/react": { + "version": "2.0.115", + "resolved": "https://registry.npmjs.org/@ai-sdk/react/-/react-2.0.115.tgz", + "integrity": "sha512-Etu7gWSEi2dmXss1PoR5CAZGwGShXsF9+Pon1eRO6EmatjYaBMhq1CfHPyYhGzWrint8jJIK2VaAhiMef29qZw==", + "license": "Apache-2.0", + "dependencies": { + "@ai-sdk/provider-utils": "3.0.19", + "ai": "5.0.113", + "swr": "^2.2.5", + "throttleit": "2.1.0" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "react": "^18 || ~19.0.1 || ~19.1.2 || ^19.2.1", + "zod": "^3.25.76 || ^4.1.8" + }, + "peerDependenciesMeta": { + "zod": { + "optional": true + } + } + }, + "node_modules/@algolia/abtesting": { + "version": "1.12.0", + "resolved": "https://registry.npmjs.org/@algolia/abtesting/-/abtesting-1.12.0.tgz", + "integrity": "sha512-EfW0bfxjPs+C7ANkJDw2TATntfBKsFiy7APh+KO0pQ8A6HYa5I0NjFuCGCXWfzzzLXNZta3QUl3n5Kmm6aJo9Q==", + "license": "MIT", + "dependencies": { + "@algolia/client-common": "5.46.0", + "@algolia/requester-browser-xhr": "5.46.0", + "@algolia/requester-fetch": "5.46.0", + "@algolia/requester-node-http": "5.46.0" + }, + "engines": { + "node": ">= 14.0.0" + } + }, + "node_modules/@algolia/autocomplete-core": { + "version": "1.19.2", + "resolved": "https://registry.npmjs.org/@algolia/autocomplete-core/-/autocomplete-core-1.19.2.tgz", + "integrity": "sha512-mKv7RyuAzXvwmq+0XRK8HqZXt9iZ5Kkm2huLjgn5JoCPtDy+oh9yxUMfDDaVCw0oyzZ1isdJBc7l9nuCyyR7Nw==", + "license": "MIT", + "dependencies": { + "@algolia/autocomplete-plugin-algolia-insights": "1.19.2", + "@algolia/autocomplete-shared": "1.19.2" + } + }, + "node_modules/@algolia/autocomplete-plugin-algolia-insights": { + "version": "1.19.2", + "resolved": "https://registry.npmjs.org/@algolia/autocomplete-plugin-algolia-insights/-/autocomplete-plugin-algolia-insights-1.19.2.tgz", + "integrity": "sha512-TjxbcC/r4vwmnZaPwrHtkXNeqvlpdyR+oR9Wi2XyfORkiGkLTVhX2j+O9SaCCINbKoDfc+c2PB8NjfOnz7+oKg==", + "license": "MIT", + "dependencies": { + "@algolia/autocomplete-shared": "1.19.2" + }, + "peerDependencies": { + "search-insights": ">= 1 < 3" + } + }, + "node_modules/@algolia/autocomplete-shared": { + "version": "1.19.2", + "resolved": "https://registry.npmjs.org/@algolia/autocomplete-shared/-/autocomplete-shared-1.19.2.tgz", + "integrity": "sha512-jEazxZTVD2nLrC+wYlVHQgpBoBB5KPStrJxLzsIFl6Kqd1AlG9sIAGl39V5tECLpIQzB3Qa2T6ZPJ1ChkwMK/w==", + "license": "MIT", + "peerDependencies": { + "@algolia/client-search": ">= 4.9.1 < 6", + "algoliasearch": ">= 4.9.1 < 6" + } + }, + "node_modules/@algolia/client-abtesting": { + "version": "5.46.0", + "resolved": "https://registry.npmjs.org/@algolia/client-abtesting/-/client-abtesting-5.46.0.tgz", + "integrity": "sha512-eG5xV8rujK4ZIHXrRshvv9O13NmU/k42Rnd3w43iKH5RaQ2zWuZO6Q7XjaoJjAFVCsJWqRbXzbYyPGrbF3wGNg==", + "license": "MIT", + "dependencies": { + "@algolia/client-common": "5.46.0", + "@algolia/requester-browser-xhr": "5.46.0", + "@algolia/requester-fetch": "5.46.0", + "@algolia/requester-node-http": "5.46.0" + }, + "engines": { + "node": ">= 14.0.0" + } + }, + "node_modules/@algolia/client-analytics": { + "version": "5.46.0", + "resolved": "https://registry.npmjs.org/@algolia/client-analytics/-/client-analytics-5.46.0.tgz", + "integrity": "sha512-AYh2uL8IUW9eZrbbT+wZElyb7QkkeV3US2NEKY7doqMlyPWE8lErNfkVN1NvZdVcY4/SVic5GDbeDz2ft8YIiQ==", + "license": "MIT", + "dependencies": { + "@algolia/client-common": "5.46.0", + "@algolia/requester-browser-xhr": "5.46.0", + "@algolia/requester-fetch": "5.46.0", + "@algolia/requester-node-http": "5.46.0" + }, + "engines": { + "node": ">= 14.0.0" + } + }, + "node_modules/@algolia/client-common": { + "version": "5.46.0", + "resolved": "https://registry.npmjs.org/@algolia/client-common/-/client-common-5.46.0.tgz", + "integrity": "sha512-0emZTaYOeI9WzJi0TcNd2k3SxiN6DZfdWc2x2gHt855Jl9jPUOzfVTL6gTvCCrOlT4McvpDGg5nGO+9doEjjig==", + "license": "MIT", + "engines": { + "node": ">= 14.0.0" + } + }, + "node_modules/@algolia/client-insights": { + "version": "5.46.0", + "resolved": "https://registry.npmjs.org/@algolia/client-insights/-/client-insights-5.46.0.tgz", + "integrity": "sha512-wrBJ8fE+M0TDG1As4DDmwPn2TXajrvmvAN72Qwpuv8e2JOKNohF7+JxBoF70ZLlvP1A1EiH8DBu+JpfhBbNphQ==", + "license": "MIT", + "dependencies": { + "@algolia/client-common": "5.46.0", + "@algolia/requester-browser-xhr": "5.46.0", + "@algolia/requester-fetch": "5.46.0", + "@algolia/requester-node-http": "5.46.0" + }, + "engines": { + "node": ">= 14.0.0" + } + }, + "node_modules/@algolia/client-personalization": { + "version": "5.46.0", + "resolved": "https://registry.npmjs.org/@algolia/client-personalization/-/client-personalization-5.46.0.tgz", + "integrity": "sha512-LnkeX4p0ENt0DoftDJJDzQQJig/sFQmD1eQifl/iSjhUOGUIKC/7VTeXRcKtQB78naS8njUAwpzFvxy1CDDXDQ==", + "license": "MIT", + "dependencies": { + "@algolia/client-common": "5.46.0", + "@algolia/requester-browser-xhr": "5.46.0", + "@algolia/requester-fetch": "5.46.0", + "@algolia/requester-node-http": "5.46.0" + }, + "engines": { + "node": ">= 14.0.0" + } + }, + "node_modules/@algolia/client-query-suggestions": { + "version": "5.46.0", + "resolved": "https://registry.npmjs.org/@algolia/client-query-suggestions/-/client-query-suggestions-5.46.0.tgz", + "integrity": "sha512-aF9tc4ex/smypXw+W3lBPB1jjKoaGHpZezTqofvDOI/oK1dR2sdTpFpK2Ru+7IRzYgwtRqHF3znmTlyoNs9dpA==", + "license": "MIT", + "dependencies": { + "@algolia/client-common": "5.46.0", + "@algolia/requester-browser-xhr": "5.46.0", + "@algolia/requester-fetch": "5.46.0", + "@algolia/requester-node-http": "5.46.0" + }, + "engines": { + "node": ">= 14.0.0" + } + }, + "node_modules/@algolia/client-search": { + "version": "5.46.0", + "resolved": "https://registry.npmjs.org/@algolia/client-search/-/client-search-5.46.0.tgz", + "integrity": "sha512-22SHEEVNjZfFWkFks3P6HilkR3rS7a6GjnCIqR22Zz4HNxdfT0FG+RE7efTcFVfLUkTTMQQybvaUcwMrHXYa7Q==", + "license": "MIT", + "dependencies": { + "@algolia/client-common": "5.46.0", + "@algolia/requester-browser-xhr": "5.46.0", + "@algolia/requester-fetch": "5.46.0", + "@algolia/requester-node-http": "5.46.0" + }, + "engines": { + "node": ">= 14.0.0" + } + }, + "node_modules/@algolia/events": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/@algolia/events/-/events-4.0.1.tgz", + "integrity": "sha512-FQzvOCgoFXAbf5Y6mYozw2aj5KCJoA3m4heImceldzPSMbdyS4atVjJzXKMsfX3wnZTFYwkkt8/z8UesLHlSBQ==", + "license": "MIT" + }, + "node_modules/@algolia/ingestion": { + "version": "1.46.0", + "resolved": "https://registry.npmjs.org/@algolia/ingestion/-/ingestion-1.46.0.tgz", + "integrity": "sha512-2LT0/Z+/sFwEpZLH6V17WSZ81JX2uPjgvv5eNlxgU7rPyup4NXXfuMbtCJ+6uc4RO/LQpEJd3Li59ke3wtyAsA==", + "license": "MIT", + "dependencies": { + "@algolia/client-common": "5.46.0", + "@algolia/requester-browser-xhr": "5.46.0", + "@algolia/requester-fetch": "5.46.0", + "@algolia/requester-node-http": "5.46.0" + }, + "engines": { + "node": ">= 14.0.0" + } + }, + "node_modules/@algolia/monitoring": { + "version": "1.46.0", + "resolved": "https://registry.npmjs.org/@algolia/monitoring/-/monitoring-1.46.0.tgz", + "integrity": "sha512-uivZ9wSWZ8mz2ZU0dgDvQwvVZV8XBv6lYBXf8UtkQF3u7WeTqBPeU8ZoeTyLpf0jAXCYOvc1mAVmK0xPLuEwOQ==", + "license": "MIT", + "dependencies": { + "@algolia/client-common": "5.46.0", + "@algolia/requester-browser-xhr": "5.46.0", + "@algolia/requester-fetch": "5.46.0", + "@algolia/requester-node-http": "5.46.0" + }, + "engines": { + "node": ">= 14.0.0" + } + }, + "node_modules/@algolia/recommend": { + "version": "5.46.0", + "resolved": "https://registry.npmjs.org/@algolia/recommend/-/recommend-5.46.0.tgz", + "integrity": "sha512-O2BB8DuySuddgOAbhyH4jsGbL+KyDGpzJRtkDZkv091OMomqIA78emhhMhX9d/nIRrzS1wNLWB/ix7Hb2eV5rg==", + "license": "MIT", + "dependencies": { + "@algolia/client-common": "5.46.0", + "@algolia/requester-browser-xhr": "5.46.0", + "@algolia/requester-fetch": "5.46.0", + "@algolia/requester-node-http": "5.46.0" + }, + "engines": { + "node": ">= 14.0.0" + } + }, + "node_modules/@algolia/requester-browser-xhr": { + "version": "5.46.0", + "resolved": "https://registry.npmjs.org/@algolia/requester-browser-xhr/-/requester-browser-xhr-5.46.0.tgz", + "integrity": "sha512-eW6xyHCyYrJD0Kjk9Mz33gQ40LfWiEA51JJTVfJy3yeoRSw/NXhAL81Pljpa0qslTs6+LO/5DYPZddct6HvISQ==", + "license": "MIT", + "dependencies": { + "@algolia/client-common": "5.46.0" + }, + "engines": { + "node": ">= 14.0.0" + } + }, + "node_modules/@algolia/requester-fetch": { + "version": "5.46.0", + "resolved": "https://registry.npmjs.org/@algolia/requester-fetch/-/requester-fetch-5.46.0.tgz", + "integrity": "sha512-Vn2+TukMGHy4PIxmdvP667tN/MhS7MPT8EEvEhS6JyFLPx3weLcxSa1F9gVvrfHWCUJhLWoMVJVB2PT8YfRGcw==", + "license": "MIT", + "dependencies": { + "@algolia/client-common": "5.46.0" + }, + "engines": { + "node": ">= 14.0.0" + } + }, + "node_modules/@algolia/requester-node-http": { + "version": "5.46.0", + "resolved": "https://registry.npmjs.org/@algolia/requester-node-http/-/requester-node-http-5.46.0.tgz", + "integrity": "sha512-xaqXyna5yBZ+r1SJ9my/DM6vfTqJg9FJgVydRJ0lnO+D5NhqGW/qaRG/iBGKr/d4fho34el6WakV7BqJvrl/HQ==", + "license": "MIT", + "dependencies": { + "@algolia/client-common": "5.46.0" + }, + "engines": { + "node": ">= 14.0.0" + } + }, + "node_modules/@babel/code-frame": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.27.1.tgz", + "integrity": "sha512-cjQ7ZlQ0Mv3b47hABuTevyTuYN4i+loJKGeV9flcCgIK37cCXRh+L1bd3iBHlynerhQ7BhCkn2BPbQUL+rGqFg==", + "license": "MIT", + "dependencies": { + "@babel/helper-validator-identifier": "^7.27.1", + "js-tokens": "^4.0.0", + "picocolors": "^1.1.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/compat-data": { + "version": "7.28.5", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.28.5.tgz", + "integrity": "sha512-6uFXyCayocRbqhZOB+6XcuZbkMNimwfVGFji8CTZnCzOHVGvDqzvitu1re2AU5LROliz7eQPhB8CpAMvnx9EjA==", + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/core": { + "version": "7.28.5", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.28.5.tgz", + "integrity": "sha512-e7jT4DxYvIDLk1ZHmU/m/mB19rex9sv0c2ftBtjSBv+kVM/902eh0fINUzD7UwLLNR+jU585GxUJ8/EBfAM5fw==", + "license": "MIT", + "dependencies": { + "@babel/code-frame": "^7.27.1", + "@babel/generator": "^7.28.5", + "@babel/helper-compilation-targets": "^7.27.2", + "@babel/helper-module-transforms": "^7.28.3", + "@babel/helpers": "^7.28.4", + "@babel/parser": "^7.28.5", + "@babel/template": "^7.27.2", + "@babel/traverse": "^7.28.5", + "@babel/types": "^7.28.5", + "@jridgewell/remapping": "^2.3.5", + "convert-source-map": "^2.0.0", + "debug": "^4.1.0", + "gensync": "^1.0.0-beta.2", + "json5": "^2.2.3", + "semver": "^6.3.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/babel" + } + }, + "node_modules/@babel/core/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/@babel/generator": { + "version": "7.28.5", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.28.5.tgz", + "integrity": "sha512-3EwLFhZ38J4VyIP6WNtt2kUdW9dokXA9Cr4IVIFHuCpZ3H8/YFOl5JjZHisrn1fATPBmKKqXzDFvh9fUwHz6CQ==", + "license": "MIT", + "dependencies": { + "@babel/parser": "^7.28.5", + "@babel/types": "^7.28.5", + "@jridgewell/gen-mapping": "^0.3.12", + "@jridgewell/trace-mapping": "^0.3.28", + "jsesc": "^3.0.2" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-annotate-as-pure": { + "version": "7.27.3", + "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.27.3.tgz", + "integrity": "sha512-fXSwMQqitTGeHLBC08Eq5yXz2m37E4pJX1qAU1+2cNedz/ifv/bVXft90VeSav5nFO61EcNgwr0aJxbyPaWBPg==", + "license": "MIT", + "dependencies": { + "@babel/types": "^7.27.3" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-compilation-targets": { + "version": "7.27.2", + "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.27.2.tgz", + "integrity": "sha512-2+1thGUUWWjLTYTHZWK1n8Yga0ijBz1XAhUXcKy81rd5g6yh7hGqMp45v7cadSbEHc9G3OTv45SyneRN3ps4DQ==", + "license": "MIT", + "dependencies": { + "@babel/compat-data": "^7.27.2", + "@babel/helper-validator-option": "^7.27.1", + "browserslist": "^4.24.0", + "lru-cache": "^5.1.1", + "semver": "^6.3.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-compilation-targets/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/@babel/helper-create-class-features-plugin": { + "version": "7.28.5", + "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.28.5.tgz", + "integrity": "sha512-q3WC4JfdODypvxArsJQROfupPBq9+lMwjKq7C33GhbFYJsufD0yd/ziwD+hJucLeWsnFPWZjsU2DNFqBPE7jwQ==", + "license": "MIT", + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.27.3", + "@babel/helper-member-expression-to-functions": "^7.28.5", + "@babel/helper-optimise-call-expression": "^7.27.1", + "@babel/helper-replace-supers": "^7.27.1", + "@babel/helper-skip-transparent-expression-wrappers": "^7.27.1", + "@babel/traverse": "^7.28.5", + "semver": "^6.3.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/helper-create-class-features-plugin/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/@babel/helper-create-regexp-features-plugin": { + "version": "7.28.5", + "resolved": "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.28.5.tgz", + "integrity": "sha512-N1EhvLtHzOvj7QQOUCCS3NrPJP8c5W6ZXCHDn7Yialuy1iu4r5EmIYkXlKNqT99Ciw+W0mDqWoR6HWMZlFP3hw==", + "license": "MIT", + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.27.3", + "regexpu-core": "^6.3.1", + "semver": "^6.3.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/helper-create-regexp-features-plugin/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/@babel/helper-define-polyfill-provider": { + "version": "0.6.5", + "resolved": "https://registry.npmjs.org/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.6.5.tgz", + "integrity": "sha512-uJnGFcPsWQK8fvjgGP5LZUZZsYGIoPeRjSF5PGwrelYgq7Q15/Ft9NGFp1zglwgIv//W0uG4BevRuSJRyylZPg==", + "license": "MIT", + "dependencies": { + "@babel/helper-compilation-targets": "^7.27.2", + "@babel/helper-plugin-utils": "^7.27.1", + "debug": "^4.4.1", + "lodash.debounce": "^4.0.8", + "resolve": "^1.22.10" + }, + "peerDependencies": { + "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" + } + }, + "node_modules/@babel/helper-globals": { + "version": "7.28.0", + "resolved": "https://registry.npmjs.org/@babel/helper-globals/-/helper-globals-7.28.0.tgz", + "integrity": "sha512-+W6cISkXFa1jXsDEdYA8HeevQT/FULhxzR99pxphltZcVaugps53THCeiWA8SguxxpSp3gKPiuYfSWopkLQ4hw==", + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-member-expression-to-functions": { + "version": "7.28.5", + "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.28.5.tgz", + "integrity": "sha512-cwM7SBRZcPCLgl8a7cY0soT1SptSzAlMH39vwiRpOQkJlh53r5hdHwLSCZpQdVLT39sZt+CRpNwYG4Y2v77atg==", + "license": "MIT", + "dependencies": { + "@babel/traverse": "^7.28.5", + "@babel/types": "^7.28.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-module-imports": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.27.1.tgz", + "integrity": "sha512-0gSFWUPNXNopqtIPQvlD5WgXYI5GY2kP2cCvoT8kczjbfcfuIljTbcWrulD1CIPIX2gt1wghbDy08yE1p+/r3w==", + "license": "MIT", + "dependencies": { + "@babel/traverse": "^7.27.1", + "@babel/types": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-module-transforms": { + "version": "7.28.3", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.28.3.tgz", + "integrity": "sha512-gytXUbs8k2sXS9PnQptz5o0QnpLL51SwASIORY6XaBKF88nsOT0Zw9szLqlSGQDP/4TljBAD5y98p2U1fqkdsw==", + "license": "MIT", + "dependencies": { + "@babel/helper-module-imports": "^7.27.1", + "@babel/helper-validator-identifier": "^7.27.1", + "@babel/traverse": "^7.28.3" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/helper-optimise-call-expression": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.27.1.tgz", + "integrity": "sha512-URMGH08NzYFhubNSGJrpUEphGKQwMQYBySzat5cAByY1/YgIRkULnIy3tAMeszlL/so2HbeilYloUmSpd7GdVw==", + "license": "MIT", + "dependencies": { + "@babel/types": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-plugin-utils": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.27.1.tgz", + "integrity": "sha512-1gn1Up5YXka3YYAHGKpbideQ5Yjf1tDa9qYcgysz+cNCXukyLl6DjPXhD3VRwSb8c0J9tA4b2+rHEZtc6R0tlw==", + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-remap-async-to-generator": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.27.1.tgz", + "integrity": "sha512-7fiA521aVw8lSPeI4ZOD3vRFkoqkJcS+z4hFo82bFSH/2tNd6eJ5qCVMS5OzDmZh/kaHQeBaeyxK6wljcPtveA==", + "license": "MIT", + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.27.1", + "@babel/helper-wrap-function": "^7.27.1", + "@babel/traverse": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/helper-replace-supers": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.27.1.tgz", + "integrity": "sha512-7EHz6qDZc8RYS5ElPoShMheWvEgERonFCs7IAonWLLUTXW59DP14bCZt89/GKyreYn8g3S83m21FelHKbeDCKA==", + "license": "MIT", + "dependencies": { + "@babel/helper-member-expression-to-functions": "^7.27.1", + "@babel/helper-optimise-call-expression": "^7.27.1", + "@babel/traverse": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/helper-skip-transparent-expression-wrappers": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.27.1.tgz", + "integrity": "sha512-Tub4ZKEXqbPjXgWLl2+3JpQAYBJ8+ikpQ2Ocj/q/r0LwE3UhENh7EUabyHjz2kCEsrRY83ew2DQdHluuiDQFzg==", + "license": "MIT", + "dependencies": { + "@babel/traverse": "^7.27.1", + "@babel/types": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-string-parser": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.27.1.tgz", + "integrity": "sha512-qMlSxKbpRlAridDExk92nSobyDdpPijUq2DW6oDnUqd0iOGxmQjyqhMIihI9+zv4LPyZdRje2cavWPbCbWm3eA==", + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-validator-identifier": { + "version": "7.28.5", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.28.5.tgz", + "integrity": "sha512-qSs4ifwzKJSV39ucNjsvc6WVHs6b7S03sOh2OcHF9UHfVPqWWALUsNUVzhSBiItjRZoLHx7nIarVjqKVusUZ1Q==", + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-validator-option": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.27.1.tgz", + "integrity": "sha512-YvjJow9FxbhFFKDSuFnVCe2WxXk1zWc22fFePVNEaWJEu8IrZVlda6N0uHwzZrUM1il7NC9Mlp4MaJYbYd9JSg==", + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-wrap-function": { + "version": "7.28.3", + "resolved": "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.28.3.tgz", + "integrity": "sha512-zdf983tNfLZFletc0RRXYrHrucBEg95NIFMkn6K9dbeMYnsgHaSBGcQqdsCSStG2PYwRre0Qc2NNSCXbG+xc6g==", + "license": "MIT", + "dependencies": { + "@babel/template": "^7.27.2", + "@babel/traverse": "^7.28.3", + "@babel/types": "^7.28.2" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helpers": { + "version": "7.28.4", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.28.4.tgz", + "integrity": "sha512-HFN59MmQXGHVyYadKLVumYsA9dBFun/ldYxipEjzA4196jpLZd8UjEEBLkbEkvfYreDqJhZxYAWFPtrfhNpj4w==", + "license": "MIT", + "dependencies": { + "@babel/template": "^7.27.2", + "@babel/types": "^7.28.4" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/parser": { + "version": "7.28.5", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.28.5.tgz", + "integrity": "sha512-KKBU1VGYR7ORr3At5HAtUQ+TV3SzRCXmA/8OdDZiLDBIZxVyzXuztPjfLd3BV1PRAQGCMWWSHYhL0F8d5uHBDQ==", + "license": "MIT", + "dependencies": { + "@babel/types": "^7.28.5" + }, + "bin": { + "parser": "bin/babel-parser.js" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@babel/plugin-bugfix-firefox-class-in-computed-class-key": { + "version": "7.28.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-firefox-class-in-computed-class-key/-/plugin-bugfix-firefox-class-in-computed-class-key-7.28.5.tgz", + "integrity": "sha512-87GDMS3tsmMSi/3bWOte1UblL+YUTFMV8SZPZ2eSEL17s74Cw/l63rR6NmGVKMYW2GYi85nE+/d6Hw5N0bEk2Q==", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.27.1", + "@babel/traverse": "^7.28.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/plugin-bugfix-safari-class-field-initializer-scope": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-safari-class-field-initializer-scope/-/plugin-bugfix-safari-class-field-initializer-scope-7.27.1.tgz", + "integrity": "sha512-qNeq3bCKnGgLkEXUuFry6dPlGfCdQNZbn7yUAPCInwAJHMU7THJfrBSozkcWq5sNM6RcF3S8XyQL2A52KNR9IA==", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/-/plugin-bugfix-safari-id-destructuring-collision-in-function-expression-7.27.1.tgz", + "integrity": "sha512-g4L7OYun04N1WyqMNjldFwlfPCLVkgB54A/YCXICZYBsvJJE3kByKv9c9+R/nAfmIfjl2rKYLNyMHboYbZaWaA==", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.27.1.tgz", + "integrity": "sha512-oO02gcONcD5O1iTLi/6frMJBIwWEHceWGSGqrpCmEL8nogiS6J9PBlE48CaK20/Jx1LuRml9aDftLgdjXT8+Cw==", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.27.1", + "@babel/helper-skip-transparent-expression-wrappers": "^7.27.1", + "@babel/plugin-transform-optional-chaining": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.13.0" + } + }, + "node_modules/@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly": { + "version": "7.28.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly/-/plugin-bugfix-v8-static-class-fields-redefine-readonly-7.28.3.tgz", + "integrity": "sha512-b6YTX108evsvE4YgWyQ921ZAFFQm3Bn+CA3+ZXlNVnPhx+UfsVURoPjfGAPCjBgrqo30yX/C2nZGX96DxvR9Iw==", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.27.1", + "@babel/traverse": "^7.28.3" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/plugin-proposal-private-property-in-object": { + "version": "7.21.0-placeholder-for-preset-env.2", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-property-in-object/-/plugin-proposal-private-property-in-object-7.21.0-placeholder-for-preset-env.2.tgz", + "integrity": "sha512-SOSkfJDddaM7mak6cPEpswyTRnuRltl429hMraQEglW+OkovnCzsiszTmsrlY//qLFjCpQDFRvjdm2wA5pPm9w==", + "license": "MIT", + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-dynamic-import": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-dynamic-import/-/plugin-syntax-dynamic-import-7.8.3.tgz", + "integrity": "sha512-5gdGbFon+PszYzqs83S3E5mpi7/y/8M9eC90MRTZfduQOYW76ig6SOSPNe41IG5LoP3FGBn2N0RjVDSQiS94kQ==", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-import-assertions": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-assertions/-/plugin-syntax-import-assertions-7.27.1.tgz", + "integrity": "sha512-UT/Jrhw57xg4ILHLFnzFpPDlMbcdEicaAtjPQpbj9wa8T4r5KVWCimHcL/460g8Ht0DMxDyjsLgiWSkVjnwPFg==", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-import-attributes": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-attributes/-/plugin-syntax-import-attributes-7.27.1.tgz", + "integrity": "sha512-oFT0FrKHgF53f4vOsZGi2Hh3I35PfSmVs4IBFLFj4dnafP+hIWDLg3VyKmUHfLoLHlyxY4C7DGtmHuJgn+IGww==", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-jsx": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.27.1.tgz", + "integrity": "sha512-y8YTNIeKoyhGd9O0Jiyzyyqk8gdjnumGTQPsz0xOZOQ2RmkVJeZ1vmmfIvFEKqucBG6axJGBZDE/7iI5suUI/w==", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-typescript": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.27.1.tgz", + "integrity": "sha512-xfYCBMxveHrRMnAWl1ZlPXOZjzkN82THFvLhQhFXFt81Z5HnN+EtUkZhv/zcKpmT3fzmWZB0ywiBrbC3vogbwQ==", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-unicode-sets-regex": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-unicode-sets-regex/-/plugin-syntax-unicode-sets-regex-7.18.6.tgz", + "integrity": "sha512-727YkEAPwSIQTv5im8QHz3upqp92JTWhidIC81Tdx4VJYIte/VndKf1qKrfnnhPLiPghStWfvC/iFaMCQu7Nqg==", + "license": "MIT", + "dependencies": { + "@babel/helper-create-regexp-features-plugin": "^7.18.6", + "@babel/helper-plugin-utils": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/plugin-transform-arrow-functions": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.27.1.tgz", + "integrity": "sha512-8Z4TGic6xW70FKThA5HYEKKyBpOOsucTOD1DjU3fZxDg+K3zBJcXMFnt/4yQiZnf5+MiOMSXQ9PaEK/Ilh1DeA==", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-async-generator-functions": { + "version": "7.28.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-generator-functions/-/plugin-transform-async-generator-functions-7.28.0.tgz", + "integrity": "sha512-BEOdvX4+M765icNPZeidyADIvQ1m1gmunXufXxvRESy/jNNyfovIqUyE7MVgGBjWktCoJlzvFA1To2O4ymIO3Q==", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.27.1", + "@babel/helper-remap-async-to-generator": "^7.27.1", + "@babel/traverse": "^7.28.0" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-async-to-generator": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.27.1.tgz", + "integrity": "sha512-NREkZsZVJS4xmTr8qzE5y8AfIPqsdQfRuUiLRTEzb7Qii8iFWCyDKaUV2c0rCuh4ljDZ98ALHP/PetiBV2nddA==", + "license": "MIT", + "dependencies": { + "@babel/helper-module-imports": "^7.27.1", + "@babel/helper-plugin-utils": "^7.27.1", + "@babel/helper-remap-async-to-generator": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-block-scoped-functions": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.27.1.tgz", + "integrity": "sha512-cnqkuOtZLapWYZUYM5rVIdv1nXYuFVIltZ6ZJ7nIj585QsjKM5dhL2Fu/lICXZ1OyIAFc7Qy+bvDAtTXqGrlhg==", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-block-scoping": { + "version": "7.28.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.28.5.tgz", + "integrity": "sha512-45DmULpySVvmq9Pj3X9B+62Xe+DJGov27QravQJU1LLcapR6/10i+gYVAucGGJpHBp5mYxIMK4nDAT/QDLr47g==", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-class-properties": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-class-properties/-/plugin-transform-class-properties-7.27.1.tgz", + "integrity": "sha512-D0VcalChDMtuRvJIu3U/fwWjf8ZMykz5iZsg77Nuj821vCKI3zCyRLwRdWbsuJ/uRwZhZ002QtCqIkwC/ZkvbA==", + "license": "MIT", + "dependencies": { + "@babel/helper-create-class-features-plugin": "^7.27.1", + "@babel/helper-plugin-utils": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-class-static-block": { + "version": "7.28.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-class-static-block/-/plugin-transform-class-static-block-7.28.3.tgz", + "integrity": "sha512-LtPXlBbRoc4Njl/oh1CeD/3jC+atytbnf/UqLoqTDcEYGUPj022+rvfkbDYieUrSj3CaV4yHDByPE+T2HwfsJg==", + "license": "MIT", + "dependencies": { + "@babel/helper-create-class-features-plugin": "^7.28.3", + "@babel/helper-plugin-utils": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.12.0" + } + }, + "node_modules/@babel/plugin-transform-classes": { + "version": "7.28.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.28.4.tgz", + "integrity": "sha512-cFOlhIYPBv/iBoc+KS3M6et2XPtbT2HiCRfBXWtfpc9OAyostldxIf9YAYB6ypURBBbx+Qv6nyrLzASfJe+hBA==", + "license": "MIT", + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.27.3", + "@babel/helper-compilation-targets": "^7.27.2", + "@babel/helper-globals": "^7.28.0", + "@babel/helper-plugin-utils": "^7.27.1", + "@babel/helper-replace-supers": "^7.27.1", + "@babel/traverse": "^7.28.4" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-computed-properties": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.27.1.tgz", + "integrity": "sha512-lj9PGWvMTVksbWiDT2tW68zGS/cyo4AkZ/QTp0sQT0mjPopCmrSkzxeXkznjqBxzDI6TclZhOJbBmbBLjuOZUw==", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.27.1", + "@babel/template": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-destructuring": { + "version": "7.28.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.28.5.tgz", + "integrity": "sha512-Kl9Bc6D0zTUcFUvkNuQh4eGXPKKNDOJQXVyyM4ZAQPMveniJdxi8XMJwLo+xSoW3MIq81bD33lcUe9kZpl0MCw==", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.27.1", + "@babel/traverse": "^7.28.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-dotall-regex": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.27.1.tgz", + "integrity": "sha512-gEbkDVGRvjj7+T1ivxrfgygpT7GUd4vmODtYpbs0gZATdkX8/iSnOtZSxiZnsgm1YjTgjI6VKBGSJJevkrclzw==", + "license": "MIT", + "dependencies": { + "@babel/helper-create-regexp-features-plugin": "^7.27.1", + "@babel/helper-plugin-utils": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-duplicate-keys": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.27.1.tgz", + "integrity": "sha512-MTyJk98sHvSs+cvZ4nOauwTTG1JeonDjSGvGGUNHreGQns+Mpt6WX/dVzWBHgg+dYZhkC4X+zTDfkTU+Vy9y7Q==", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-duplicate-named-capturing-groups-regex": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-named-capturing-groups-regex/-/plugin-transform-duplicate-named-capturing-groups-regex-7.27.1.tgz", + "integrity": "sha512-hkGcueTEzuhB30B3eJCbCYeCaaEQOmQR0AdvzpD4LoN0GXMWzzGSuRrxR2xTnCrvNbVwK9N6/jQ92GSLfiZWoQ==", + "license": "MIT", + "dependencies": { + "@babel/helper-create-regexp-features-plugin": "^7.27.1", + "@babel/helper-plugin-utils": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/plugin-transform-dynamic-import": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dynamic-import/-/plugin-transform-dynamic-import-7.27.1.tgz", + "integrity": "sha512-MHzkWQcEmjzzVW9j2q8LGjwGWpG2mjwaaB0BNQwst3FIjqsg8Ct/mIZlvSPJvfi9y2AC8mi/ktxbFVL9pZ1I4A==", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-explicit-resource-management": { + "version": "7.28.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-explicit-resource-management/-/plugin-transform-explicit-resource-management-7.28.0.tgz", + "integrity": "sha512-K8nhUcn3f6iB+P3gwCv/no7OdzOZQcKchW6N389V6PD8NUWKZHzndOd9sPDVbMoBsbmjMqlB4L9fm+fEFNVlwQ==", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.27.1", + "@babel/plugin-transform-destructuring": "^7.28.0" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-exponentiation-operator": { + "version": "7.28.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.28.5.tgz", + "integrity": "sha512-D4WIMaFtwa2NizOp+dnoFjRez/ClKiC2BqqImwKd1X28nqBtZEyCYJ2ozQrrzlxAFrcrjxo39S6khe9RNDlGzw==", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-export-namespace-from": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-export-namespace-from/-/plugin-transform-export-namespace-from-7.27.1.tgz", + "integrity": "sha512-tQvHWSZ3/jH2xuq/vZDy0jNn+ZdXJeM8gHvX4lnJmsc3+50yPlWdZXIc5ay+umX+2/tJIqHqiEqcJvxlmIvRvQ==", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-for-of": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.27.1.tgz", + "integrity": "sha512-BfbWFFEJFQzLCQ5N8VocnCtA8J1CLkNTe2Ms2wocj75dd6VpiqS5Z5quTYcUoo4Yq+DN0rtikODccuv7RU81sw==", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.27.1", + "@babel/helper-skip-transparent-expression-wrappers": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-function-name": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.27.1.tgz", + "integrity": "sha512-1bQeydJF9Nr1eBCMMbC+hdwmRlsv5XYOMu03YSWFwNs0HsAmtSxxF1fyuYPqemVldVyFmlCU7w8UE14LupUSZQ==", + "license": "MIT", + "dependencies": { + "@babel/helper-compilation-targets": "^7.27.1", + "@babel/helper-plugin-utils": "^7.27.1", + "@babel/traverse": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-json-strings": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-json-strings/-/plugin-transform-json-strings-7.27.1.tgz", + "integrity": "sha512-6WVLVJiTjqcQauBhn1LkICsR2H+zm62I3h9faTDKt1qP4jn2o72tSvqMwtGFKGTpojce0gJs+76eZ2uCHRZh0Q==", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-literals": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-literals/-/plugin-transform-literals-7.27.1.tgz", + "integrity": "sha512-0HCFSepIpLTkLcsi86GG3mTUzxV5jpmbv97hTETW3yzrAij8aqlD36toB1D0daVFJM8NK6GvKO0gslVQmm+zZA==", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-logical-assignment-operators": { + "version": "7.28.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-logical-assignment-operators/-/plugin-transform-logical-assignment-operators-7.28.5.tgz", + "integrity": "sha512-axUuqnUTBuXyHGcJEVVh9pORaN6wC5bYfE7FGzPiaWa3syib9m7g+/IT/4VgCOe2Upef43PHzeAvcrVek6QuuA==", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-member-expression-literals": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.27.1.tgz", + "integrity": "sha512-hqoBX4dcZ1I33jCSWcXrP+1Ku7kdqXf1oeah7ooKOIiAdKQ+uqftgCFNOSzA5AMS2XIHEYeGFg4cKRCdpxzVOQ==", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-modules-amd": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.27.1.tgz", + "integrity": "sha512-iCsytMg/N9/oFq6n+gFTvUYDZQOMK5kEdeYxmxt91fcJGycfxVP9CnrxoliM0oumFERba2i8ZtwRUCMhvP1LnA==", + "license": "MIT", + "dependencies": { + "@babel/helper-module-transforms": "^7.27.1", + "@babel/helper-plugin-utils": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-modules-commonjs": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.27.1.tgz", + "integrity": "sha512-OJguuwlTYlN0gBZFRPqwOGNWssZjfIUdS7HMYtN8c1KmwpwHFBwTeFZrg9XZa+DFTitWOW5iTAG7tyCUPsCCyw==", + "license": "MIT", + "dependencies": { + "@babel/helper-module-transforms": "^7.27.1", + "@babel/helper-plugin-utils": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-modules-systemjs": { + "version": "7.28.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.28.5.tgz", + "integrity": "sha512-vn5Jma98LCOeBy/KpeQhXcV2WZgaRUtjwQmjoBuLNlOmkg0fB5pdvYVeWRYI69wWKwK2cD1QbMiUQnoujWvrew==", + "license": "MIT", + "dependencies": { + "@babel/helper-module-transforms": "^7.28.3", + "@babel/helper-plugin-utils": "^7.27.1", + "@babel/helper-validator-identifier": "^7.28.5", + "@babel/traverse": "^7.28.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-modules-umd": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.27.1.tgz", + "integrity": "sha512-iQBE/xC5BV1OxJbp6WG7jq9IWiD+xxlZhLrdwpPkTX3ydmXdvoCpyfJN7acaIBZaOqTfr76pgzqBJflNbeRK+w==", + "license": "MIT", + "dependencies": { + "@babel/helper-module-transforms": "^7.27.1", + "@babel/helper-plugin-utils": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-named-capturing-groups-regex": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.27.1.tgz", + "integrity": "sha512-SstR5JYy8ddZvD6MhV0tM/j16Qds4mIpJTOd1Yu9J9pJjH93bxHECF7pgtc28XvkzTD6Pxcm/0Z73Hvk7kb3Ng==", + "license": "MIT", + "dependencies": { + "@babel/helper-create-regexp-features-plugin": "^7.27.1", + "@babel/helper-plugin-utils": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/plugin-transform-new-target": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.27.1.tgz", + "integrity": "sha512-f6PiYeqXQ05lYq3TIfIDu/MtliKUbNwkGApPUvyo6+tc7uaR4cPjPe7DFPr15Uyycg2lZU6btZ575CuQoYh7MQ==", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-nullish-coalescing-operator": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-nullish-coalescing-operator/-/plugin-transform-nullish-coalescing-operator-7.27.1.tgz", + "integrity": "sha512-aGZh6xMo6q9vq1JGcw58lZ1Z0+i0xB2x0XaauNIUXd6O1xXc3RwoWEBlsTQrY4KQ9Jf0s5rgD6SiNkaUdJegTA==", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-numeric-separator": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-numeric-separator/-/plugin-transform-numeric-separator-7.27.1.tgz", + "integrity": "sha512-fdPKAcujuvEChxDBJ5c+0BTaS6revLV7CJL08e4m3de8qJfNIuCc2nc7XJYOjBoTMJeqSmwXJ0ypE14RCjLwaw==", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-object-rest-spread": { + "version": "7.28.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-rest-spread/-/plugin-transform-object-rest-spread-7.28.4.tgz", + "integrity": "sha512-373KA2HQzKhQCYiRVIRr+3MjpCObqzDlyrM6u4I201wL8Mp2wHf7uB8GhDwis03k2ti8Zr65Zyyqs1xOxUF/Ew==", + "license": "MIT", + "dependencies": { + "@babel/helper-compilation-targets": "^7.27.2", + "@babel/helper-plugin-utils": "^7.27.1", + "@babel/plugin-transform-destructuring": "^7.28.0", + "@babel/plugin-transform-parameters": "^7.27.7", + "@babel/traverse": "^7.28.4" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-object-super": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.27.1.tgz", + "integrity": "sha512-SFy8S9plRPbIcxlJ8A6mT/CxFdJx/c04JEctz4jf8YZaVS2px34j7NXRrlGlHkN/M2gnpL37ZpGRGVFLd3l8Ng==", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.27.1", + "@babel/helper-replace-supers": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-optional-catch-binding": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-optional-catch-binding/-/plugin-transform-optional-catch-binding-7.27.1.tgz", + "integrity": "sha512-txEAEKzYrHEX4xSZN4kJ+OfKXFVSWKB2ZxM9dpcE3wT7smwkNmXo5ORRlVzMVdJbD+Q8ILTgSD7959uj+3Dm3Q==", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-optional-chaining": { + "version": "7.28.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-optional-chaining/-/plugin-transform-optional-chaining-7.28.5.tgz", + "integrity": "sha512-N6fut9IZlPnjPwgiQkXNhb+cT8wQKFlJNqcZkWlcTqkcqx6/kU4ynGmLFoa4LViBSirn05YAwk+sQBbPfxtYzQ==", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.27.1", + "@babel/helper-skip-transparent-expression-wrappers": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-parameters": { + "version": "7.27.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.27.7.tgz", + "integrity": "sha512-qBkYTYCb76RRxUM6CcZA5KRu8K4SM8ajzVeUgVdMVO9NN9uI/GaVmBg/WKJJGnNokV9SY8FxNOVWGXzqzUidBg==", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-private-methods": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-private-methods/-/plugin-transform-private-methods-7.27.1.tgz", + "integrity": "sha512-10FVt+X55AjRAYI9BrdISN9/AQWHqldOeZDUoLyif1Kn05a56xVBXb8ZouL8pZ9jem8QpXaOt8TS7RHUIS+GPA==", + "license": "MIT", + "dependencies": { + "@babel/helper-create-class-features-plugin": "^7.27.1", + "@babel/helper-plugin-utils": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-private-property-in-object": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-private-property-in-object/-/plugin-transform-private-property-in-object-7.27.1.tgz", + "integrity": "sha512-5J+IhqTi1XPa0DXF83jYOaARrX+41gOewWbkPyjMNRDqgOCqdffGh8L3f/Ek5utaEBZExjSAzcyjmV9SSAWObQ==", + "license": "MIT", + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.27.1", + "@babel/helper-create-class-features-plugin": "^7.27.1", + "@babel/helper-plugin-utils": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-property-literals": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.27.1.tgz", + "integrity": "sha512-oThy3BCuCha8kDZ8ZkgOg2exvPYUlprMukKQXI1r1pJ47NCvxfkEy8vK+r/hT9nF0Aa4H1WUPZZjHTFtAhGfmQ==", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-react-constant-elements": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-constant-elements/-/plugin-transform-react-constant-elements-7.27.1.tgz", + "integrity": "sha512-edoidOjl/ZxvYo4lSBOQGDSyToYVkTAwyVoa2tkuYTSmjrB1+uAedoL5iROVLXkxH+vRgA7uP4tMg2pUJpZ3Ug==", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-react-display-name": { + "version": "7.28.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-display-name/-/plugin-transform-react-display-name-7.28.0.tgz", + "integrity": "sha512-D6Eujc2zMxKjfa4Zxl4GHMsmhKKZ9VpcqIchJLvwTxad9zWIYulwYItBovpDOoNLISpcZSXoDJ5gaGbQUDqViA==", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-react-jsx": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.27.1.tgz", + "integrity": "sha512-2KH4LWGSrJIkVf5tSiBFYuXDAoWRq2MMwgivCf+93dd0GQi8RXLjKA/0EvRnVV5G0hrHczsquXuD01L8s6dmBw==", + "license": "MIT", + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.27.1", + "@babel/helper-module-imports": "^7.27.1", + "@babel/helper-plugin-utils": "^7.27.1", + "@babel/plugin-syntax-jsx": "^7.27.1", + "@babel/types": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-react-jsx-development": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-development/-/plugin-transform-react-jsx-development-7.27.1.tgz", + "integrity": "sha512-ykDdF5yI4f1WrAolLqeF3hmYU12j9ntLQl/AOG1HAS21jxyg1Q0/J/tpREuYLfatGdGmXp/3yS0ZA76kOlVq9Q==", + "license": "MIT", + "dependencies": { + "@babel/plugin-transform-react-jsx": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-react-pure-annotations": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-pure-annotations/-/plugin-transform-react-pure-annotations-7.27.1.tgz", + "integrity": "sha512-JfuinvDOsD9FVMTHpzA/pBLisxpv1aSf+OIV8lgH3MuWrks19R27e6a6DipIg4aX1Zm9Wpb04p8wljfKrVSnPA==", + "license": "MIT", + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.27.1", + "@babel/helper-plugin-utils": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-regenerator": { + "version": "7.28.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.28.4.tgz", + "integrity": "sha512-+ZEdQlBoRg9m2NnzvEeLgtvBMO4tkFBw5SQIUgLICgTrumLoU7lr+Oghi6km2PFj+dbUt2u1oby2w3BDO9YQnA==", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-regexp-modifiers": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regexp-modifiers/-/plugin-transform-regexp-modifiers-7.27.1.tgz", + "integrity": "sha512-TtEciroaiODtXvLZv4rmfMhkCv8jx3wgKpL68PuiPh2M4fvz5jhsA7697N1gMvkvr/JTF13DrFYyEbY9U7cVPA==", + "license": "MIT", + "dependencies": { + "@babel/helper-create-regexp-features-plugin": "^7.27.1", + "@babel/helper-plugin-utils": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/plugin-transform-reserved-words": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.27.1.tgz", + "integrity": "sha512-V2ABPHIJX4kC7HegLkYoDpfg9PVmuWy/i6vUM5eGK22bx4YVFD3M5F0QQnWQoDs6AGsUWTVOopBiMFQgHaSkVw==", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-runtime": { + "version": "7.28.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.28.5.tgz", + "integrity": "sha512-20NUVgOrinudkIBzQ2bNxP08YpKprUkRTiRSd2/Z5GOdPImJGkoN4Z7IQe1T5AdyKI1i5L6RBmluqdSzvaq9/w==", + "license": "MIT", + "dependencies": { + "@babel/helper-module-imports": "^7.27.1", + "@babel/helper-plugin-utils": "^7.27.1", + "babel-plugin-polyfill-corejs2": "^0.4.14", + "babel-plugin-polyfill-corejs3": "^0.13.0", + "babel-plugin-polyfill-regenerator": "^0.6.5", + "semver": "^6.3.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-runtime/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/@babel/plugin-transform-shorthand-properties": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.27.1.tgz", + "integrity": "sha512-N/wH1vcn4oYawbJ13Y/FxcQrWk63jhfNa7jef0ih7PHSIHX2LB7GWE1rkPrOnka9kwMxb6hMl19p7lidA+EHmQ==", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-spread": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.27.1.tgz", + "integrity": "sha512-kpb3HUqaILBJcRFVhFUs6Trdd4mkrzcGXss+6/mxUd273PfbWqSDHRzMT2234gIg2QYfAjvXLSquP1xECSg09Q==", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.27.1", + "@babel/helper-skip-transparent-expression-wrappers": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-sticky-regex": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.27.1.tgz", + "integrity": "sha512-lhInBO5bi/Kowe2/aLdBAawijx+q1pQzicSgnkB6dUPc1+RC8QmJHKf2OjvU+NZWitguJHEaEmbV6VWEouT58g==", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-template-literals": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.27.1.tgz", + "integrity": "sha512-fBJKiV7F2DxZUkg5EtHKXQdbsbURW3DZKQUWphDum0uRP6eHGGa/He9mc0mypL680pb+e/lDIthRohlv8NCHkg==", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-typeof-symbol": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.27.1.tgz", + "integrity": "sha512-RiSILC+nRJM7FY5srIyc4/fGIwUhyDuuBSdWn4y6yT6gm652DpCHZjIipgn6B7MQ1ITOUnAKWixEUjQRIBIcLw==", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-typescript": { + "version": "7.28.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.28.5.tgz", + "integrity": "sha512-x2Qa+v/CuEoX7Dr31iAfr0IhInrVOWZU/2vJMJ00FOR/2nM0BcBEclpaf9sWCDc+v5e9dMrhSH8/atq/kX7+bA==", + "license": "MIT", + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.27.3", + "@babel/helper-create-class-features-plugin": "^7.28.5", + "@babel/helper-plugin-utils": "^7.27.1", + "@babel/helper-skip-transparent-expression-wrappers": "^7.27.1", + "@babel/plugin-syntax-typescript": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-unicode-escapes": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.27.1.tgz", + "integrity": "sha512-Ysg4v6AmF26k9vpfFuTZg8HRfVWzsh1kVfowA23y9j/Gu6dOuahdUVhkLqpObp3JIv27MLSii6noRnuKN8H0Mg==", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-unicode-property-regex": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-property-regex/-/plugin-transform-unicode-property-regex-7.27.1.tgz", + "integrity": "sha512-uW20S39PnaTImxp39O5qFlHLS9LJEmANjMG7SxIhap8rCHqu0Ik+tLEPX5DKmHn6CsWQ7j3lix2tFOa5YtL12Q==", + "license": "MIT", + "dependencies": { + "@babel/helper-create-regexp-features-plugin": "^7.27.1", + "@babel/helper-plugin-utils": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-unicode-regex": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.27.1.tgz", + "integrity": "sha512-xvINq24TRojDuyt6JGtHmkVkrfVV3FPT16uytxImLeBZqW3/H52yN+kM1MGuyPkIQxrzKwPHs5U/MP3qKyzkGw==", + "license": "MIT", + "dependencies": { + "@babel/helper-create-regexp-features-plugin": "^7.27.1", + "@babel/helper-plugin-utils": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-unicode-sets-regex": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-sets-regex/-/plugin-transform-unicode-sets-regex-7.27.1.tgz", + "integrity": "sha512-EtkOujbc4cgvb0mlpQefi4NTPBzhSIevblFevACNLUspmrALgmEBdL/XfnyyITfd8fKBZrZys92zOWcik7j9Tw==", + "license": "MIT", + "dependencies": { + "@babel/helper-create-regexp-features-plugin": "^7.27.1", + "@babel/helper-plugin-utils": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/preset-env": { + "version": "7.28.5", + "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.28.5.tgz", + "integrity": "sha512-S36mOoi1Sb6Fz98fBfE+UZSpYw5mJm0NUHtIKrOuNcqeFauy1J6dIvXm2KRVKobOSaGq4t/hBXdN4HGU3wL9Wg==", + "license": "MIT", + "dependencies": { + "@babel/compat-data": "^7.28.5", + "@babel/helper-compilation-targets": "^7.27.2", + "@babel/helper-plugin-utils": "^7.27.1", + "@babel/helper-validator-option": "^7.27.1", + "@babel/plugin-bugfix-firefox-class-in-computed-class-key": "^7.28.5", + "@babel/plugin-bugfix-safari-class-field-initializer-scope": "^7.27.1", + "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": "^7.27.1", + "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": "^7.27.1", + "@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly": "^7.28.3", + "@babel/plugin-proposal-private-property-in-object": "7.21.0-placeholder-for-preset-env.2", + "@babel/plugin-syntax-import-assertions": "^7.27.1", + "@babel/plugin-syntax-import-attributes": "^7.27.1", + "@babel/plugin-syntax-unicode-sets-regex": "^7.18.6", + "@babel/plugin-transform-arrow-functions": "^7.27.1", + "@babel/plugin-transform-async-generator-functions": "^7.28.0", + "@babel/plugin-transform-async-to-generator": "^7.27.1", + "@babel/plugin-transform-block-scoped-functions": "^7.27.1", + "@babel/plugin-transform-block-scoping": "^7.28.5", + "@babel/plugin-transform-class-properties": "^7.27.1", + "@babel/plugin-transform-class-static-block": "^7.28.3", + "@babel/plugin-transform-classes": "^7.28.4", + "@babel/plugin-transform-computed-properties": "^7.27.1", + "@babel/plugin-transform-destructuring": "^7.28.5", + "@babel/plugin-transform-dotall-regex": "^7.27.1", + "@babel/plugin-transform-duplicate-keys": "^7.27.1", + "@babel/plugin-transform-duplicate-named-capturing-groups-regex": "^7.27.1", + "@babel/plugin-transform-dynamic-import": "^7.27.1", + "@babel/plugin-transform-explicit-resource-management": "^7.28.0", + "@babel/plugin-transform-exponentiation-operator": "^7.28.5", + "@babel/plugin-transform-export-namespace-from": "^7.27.1", + "@babel/plugin-transform-for-of": "^7.27.1", + "@babel/plugin-transform-function-name": "^7.27.1", + "@babel/plugin-transform-json-strings": "^7.27.1", + "@babel/plugin-transform-literals": "^7.27.1", + "@babel/plugin-transform-logical-assignment-operators": "^7.28.5", + "@babel/plugin-transform-member-expression-literals": "^7.27.1", + "@babel/plugin-transform-modules-amd": "^7.27.1", + "@babel/plugin-transform-modules-commonjs": "^7.27.1", + "@babel/plugin-transform-modules-systemjs": "^7.28.5", + "@babel/plugin-transform-modules-umd": "^7.27.1", + "@babel/plugin-transform-named-capturing-groups-regex": "^7.27.1", + "@babel/plugin-transform-new-target": "^7.27.1", + "@babel/plugin-transform-nullish-coalescing-operator": "^7.27.1", + "@babel/plugin-transform-numeric-separator": "^7.27.1", + "@babel/plugin-transform-object-rest-spread": "^7.28.4", + "@babel/plugin-transform-object-super": "^7.27.1", + "@babel/plugin-transform-optional-catch-binding": "^7.27.1", + "@babel/plugin-transform-optional-chaining": "^7.28.5", + "@babel/plugin-transform-parameters": "^7.27.7", + "@babel/plugin-transform-private-methods": "^7.27.1", + "@babel/plugin-transform-private-property-in-object": "^7.27.1", + "@babel/plugin-transform-property-literals": "^7.27.1", + "@babel/plugin-transform-regenerator": "^7.28.4", + "@babel/plugin-transform-regexp-modifiers": "^7.27.1", + "@babel/plugin-transform-reserved-words": "^7.27.1", + "@babel/plugin-transform-shorthand-properties": "^7.27.1", + "@babel/plugin-transform-spread": "^7.27.1", + "@babel/plugin-transform-sticky-regex": "^7.27.1", + "@babel/plugin-transform-template-literals": "^7.27.1", + "@babel/plugin-transform-typeof-symbol": "^7.27.1", + "@babel/plugin-transform-unicode-escapes": "^7.27.1", + "@babel/plugin-transform-unicode-property-regex": "^7.27.1", + "@babel/plugin-transform-unicode-regex": "^7.27.1", + "@babel/plugin-transform-unicode-sets-regex": "^7.27.1", + "@babel/preset-modules": "0.1.6-no-external-plugins", + "babel-plugin-polyfill-corejs2": "^0.4.14", + "babel-plugin-polyfill-corejs3": "^0.13.0", + "babel-plugin-polyfill-regenerator": "^0.6.5", + "core-js-compat": "^3.43.0", + "semver": "^6.3.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/preset-env/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/@babel/preset-modules": { + "version": "0.1.6-no-external-plugins", + "resolved": "https://registry.npmjs.org/@babel/preset-modules/-/preset-modules-0.1.6-no-external-plugins.tgz", + "integrity": "sha512-HrcgcIESLm9aIR842yhJ5RWan/gebQUJ6E/E5+rf0y9o6oj7w0Br+sWuL6kEQ/o/AdfvR1Je9jG18/gnpwjEyA==", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.0.0", + "@babel/types": "^7.4.4", + "esutils": "^2.0.2" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0 || ^8.0.0-0 <8.0.0" + } + }, + "node_modules/@babel/preset-react": { + "version": "7.28.5", + "resolved": "https://registry.npmjs.org/@babel/preset-react/-/preset-react-7.28.5.tgz", + "integrity": "sha512-Z3J8vhRq7CeLjdC58jLv4lnZ5RKFUJWqH5emvxmv9Hv3BD1T9R/Im713R4MTKwvFaV74ejZ3sM01LyEKk4ugNQ==", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.27.1", + "@babel/helper-validator-option": "^7.27.1", + "@babel/plugin-transform-react-display-name": "^7.28.0", + "@babel/plugin-transform-react-jsx": "^7.27.1", + "@babel/plugin-transform-react-jsx-development": "^7.27.1", + "@babel/plugin-transform-react-pure-annotations": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/preset-typescript": { + "version": "7.28.5", + "resolved": "https://registry.npmjs.org/@babel/preset-typescript/-/preset-typescript-7.28.5.tgz", + "integrity": "sha512-+bQy5WOI2V6LJZpPVxY+yp66XdZ2yifu0Mc1aP5CQKgjn4QM5IN2i5fAZ4xKop47pr8rpVhiAeu+nDQa12C8+g==", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.27.1", + "@babel/helper-validator-option": "^7.27.1", + "@babel/plugin-syntax-jsx": "^7.27.1", + "@babel/plugin-transform-modules-commonjs": "^7.27.1", + "@babel/plugin-transform-typescript": "^7.28.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/runtime": { + "version": "7.28.4", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.28.4.tgz", + "integrity": "sha512-Q/N6JNWvIvPnLDvjlE1OUBLPQHH6l3CltCEsHIujp45zQUSSh8K+gHnaEX45yAT1nyngnINhvWtzN+Nb9D8RAQ==", + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/runtime-corejs3": { + "version": "7.28.4", + "resolved": "https://registry.npmjs.org/@babel/runtime-corejs3/-/runtime-corejs3-7.28.4.tgz", + "integrity": "sha512-h7iEYiW4HebClDEhtvFObtPmIvrd1SSfpI9EhOeKk4CtIK/ngBWFpuhCzhdmRKtg71ylcue+9I6dv54XYO1epQ==", + "license": "MIT", + "dependencies": { + "core-js-pure": "^3.43.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/template": { + "version": "7.27.2", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.27.2.tgz", + "integrity": "sha512-LPDZ85aEJyYSd18/DkjNh4/y1ntkE5KwUHWTiqgRxruuZL2F1yuHligVHLvcHY2vMHXttKFpJn6LwfI7cw7ODw==", + "license": "MIT", + "dependencies": { + "@babel/code-frame": "^7.27.1", + "@babel/parser": "^7.27.2", + "@babel/types": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/traverse": { + "version": "7.28.5", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.28.5.tgz", + "integrity": "sha512-TCCj4t55U90khlYkVV/0TfkJkAkUg3jZFA3Neb7unZT8CPok7iiRfaX0F+WnqWqt7OxhOn0uBKXCw4lbL8W0aQ==", + "license": "MIT", + "dependencies": { + "@babel/code-frame": "^7.27.1", + "@babel/generator": "^7.28.5", + "@babel/helper-globals": "^7.28.0", + "@babel/parser": "^7.28.5", + "@babel/template": "^7.27.2", + "@babel/types": "^7.28.5", + "debug": "^4.3.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/types": { + "version": "7.28.5", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.28.5.tgz", + "integrity": "sha512-qQ5m48eI/MFLQ5PxQj4PFaprjyCTLI37ElWMmNs0K8Lk3dVeOdNpB3ks8jc7yM5CDmVC73eMVk/trk3fgmrUpA==", + "license": "MIT", + "dependencies": { + "@babel/helper-string-parser": "^7.27.1", + "@babel/helper-validator-identifier": "^7.28.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@colors/colors": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/@colors/colors/-/colors-1.5.0.tgz", + "integrity": "sha512-ooWCrlZP11i8GImSjTHYHLkvFDP48nS4+204nGb1RiX/WXYHmJA2III9/e2DWVabCESdW7hBAEzHRqUn9OUVvQ==", + "license": "MIT", + "optional": true, + "engines": { + "node": ">=0.1.90" + } + }, + "node_modules/@csstools/cascade-layer-name-parser": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@csstools/cascade-layer-name-parser/-/cascade-layer-name-parser-2.0.5.tgz", + "integrity": "sha512-p1ko5eHgV+MgXFVa4STPKpvPxr6ReS8oS2jzTukjR74i5zJNyWO1ZM1m8YKBXnzDKWfBN1ztLYlHxbVemDD88A==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "license": "MIT", + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "@csstools/css-parser-algorithms": "^3.0.5", + "@csstools/css-tokenizer": "^3.0.4" + } + }, + "node_modules/@csstools/color-helpers": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/@csstools/color-helpers/-/color-helpers-5.1.0.tgz", + "integrity": "sha512-S11EXWJyy0Mz5SYvRmY8nJYTFFd1LCNV+7cXyAgQtOOuzb4EsgfqDufL+9esx72/eLhsRdGZwaldu/h+E4t4BA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "license": "MIT-0", + "engines": { + "node": ">=18" + } + }, + "node_modules/@csstools/css-calc": { + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/@csstools/css-calc/-/css-calc-2.1.4.tgz", + "integrity": "sha512-3N8oaj+0juUw/1H3YwmDDJXCgTB1gKU6Hc/bB502u9zR0q2vd786XJH9QfrKIEgFlZmhZiq6epXl4rHqhzsIgQ==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "license": "MIT", + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "@csstools/css-parser-algorithms": "^3.0.5", + "@csstools/css-tokenizer": "^3.0.4" + } + }, + "node_modules/@csstools/css-color-parser": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/@csstools/css-color-parser/-/css-color-parser-3.1.0.tgz", + "integrity": "sha512-nbtKwh3a6xNVIp/VRuXV64yTKnb1IjTAEEh3irzS+HkKjAOYLTGNb9pmVNntZ8iVBHcWDA2Dof0QtPgFI1BaTA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "license": "MIT", + "dependencies": { + "@csstools/color-helpers": "^5.1.0", + "@csstools/css-calc": "^2.1.4" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "@csstools/css-parser-algorithms": "^3.0.5", + "@csstools/css-tokenizer": "^3.0.4" + } + }, + "node_modules/@csstools/css-parser-algorithms": { + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/@csstools/css-parser-algorithms/-/css-parser-algorithms-3.0.5.tgz", + "integrity": "sha512-DaDeUkXZKjdGhgYaHNJTV9pV7Y9B3b644jCLs9Upc3VeNGg6LWARAT6O+Q+/COo+2gg/bM5rhpMAtf70WqfBdQ==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "license": "MIT", + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "@csstools/css-tokenizer": "^3.0.4" + } + }, + "node_modules/@csstools/css-tokenizer": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/@csstools/css-tokenizer/-/css-tokenizer-3.0.4.tgz", + "integrity": "sha512-Vd/9EVDiu6PPJt9yAh6roZP6El1xHrdvIVGjyBsHR0RYwNHgL7FJPyIIW4fANJNG6FtyZfvlRPpFI4ZM/lubvw==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "license": "MIT", + "engines": { + "node": ">=18" + } + }, + "node_modules/@csstools/media-query-list-parser": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/@csstools/media-query-list-parser/-/media-query-list-parser-4.0.3.tgz", + "integrity": "sha512-HAYH7d3TLRHDOUQK4mZKf9k9Ph/m8Akstg66ywKR4SFAigjs3yBiUeZtFxywiTm5moZMAp/5W/ZuFnNXXYLuuQ==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "license": "MIT", + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "@csstools/css-parser-algorithms": "^3.0.5", + "@csstools/css-tokenizer": "^3.0.4" + } + }, + "node_modules/@csstools/postcss-alpha-function": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@csstools/postcss-alpha-function/-/postcss-alpha-function-1.0.1.tgz", + "integrity": "sha512-isfLLwksH3yHkFXfCI2Gcaqg7wGGHZZwunoJzEZk0yKYIokgre6hYVFibKL3SYAoR1kBXova8LB+JoO5vZzi9w==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "license": "MIT-0", + "dependencies": { + "@csstools/css-color-parser": "^3.1.0", + "@csstools/css-parser-algorithms": "^3.0.5", + "@csstools/css-tokenizer": "^3.0.4", + "@csstools/postcss-progressive-custom-properties": "^4.2.1", + "@csstools/utilities": "^2.0.0" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "postcss": "^8.4" + } + }, + "node_modules/@csstools/postcss-cascade-layers": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/@csstools/postcss-cascade-layers/-/postcss-cascade-layers-5.0.2.tgz", + "integrity": "sha512-nWBE08nhO8uWl6kSAeCx4im7QfVko3zLrtgWZY4/bP87zrSPpSyN/3W3TDqz1jJuH+kbKOHXg5rJnK+ZVYcFFg==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "license": "MIT-0", + "dependencies": { + "@csstools/selector-specificity": "^5.0.0", + "postcss-selector-parser": "^7.0.0" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "postcss": "^8.4" + } + }, + "node_modules/@csstools/postcss-cascade-layers/node_modules/@csstools/selector-specificity": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/@csstools/selector-specificity/-/selector-specificity-5.0.0.tgz", + "integrity": "sha512-PCqQV3c4CoVm3kdPhyeZ07VmBRdH2EpMFA/pd9OASpOEC3aXNGoqPDAZ80D0cLpMBxnmk0+yNhGsEx31hq7Gtw==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "license": "MIT-0", + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "postcss-selector-parser": "^7.0.0" + } + }, + "node_modules/@csstools/postcss-cascade-layers/node_modules/postcss-selector-parser": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-7.1.1.tgz", + "integrity": "sha512-orRsuYpJVw8LdAwqqLykBj9ecS5/cRHlI5+nvTo8LcCKmzDmqVORXtOIYEEQuL9D4BxtA1lm5isAqzQZCoQ6Eg==", + "license": "MIT", + "dependencies": { + "cssesc": "^3.0.0", + "util-deprecate": "^1.0.2" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/@csstools/postcss-color-function": { + "version": "4.0.12", + "resolved": "https://registry.npmjs.org/@csstools/postcss-color-function/-/postcss-color-function-4.0.12.tgz", + "integrity": "sha512-yx3cljQKRaSBc2hfh8rMZFZzChaFgwmO2JfFgFr1vMcF3C/uyy5I4RFIBOIWGq1D+XbKCG789CGkG6zzkLpagA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "license": "MIT-0", + "dependencies": { + "@csstools/css-color-parser": "^3.1.0", + "@csstools/css-parser-algorithms": "^3.0.5", + "@csstools/css-tokenizer": "^3.0.4", + "@csstools/postcss-progressive-custom-properties": "^4.2.1", + "@csstools/utilities": "^2.0.0" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "postcss": "^8.4" + } + }, + "node_modules/@csstools/postcss-color-function-display-p3-linear": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@csstools/postcss-color-function-display-p3-linear/-/postcss-color-function-display-p3-linear-1.0.1.tgz", + "integrity": "sha512-E5qusdzhlmO1TztYzDIi8XPdPoYOjoTY6HBYBCYSj+Gn4gQRBlvjgPQXzfzuPQqt8EhkC/SzPKObg4Mbn8/xMg==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "license": "MIT-0", + "dependencies": { + "@csstools/css-color-parser": "^3.1.0", + "@csstools/css-parser-algorithms": "^3.0.5", + "@csstools/css-tokenizer": "^3.0.4", + "@csstools/postcss-progressive-custom-properties": "^4.2.1", + "@csstools/utilities": "^2.0.0" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "postcss": "^8.4" + } + }, + "node_modules/@csstools/postcss-color-mix-function": { + "version": "3.0.12", + "resolved": "https://registry.npmjs.org/@csstools/postcss-color-mix-function/-/postcss-color-mix-function-3.0.12.tgz", + "integrity": "sha512-4STERZfCP5Jcs13P1U5pTvI9SkgLgfMUMhdXW8IlJWkzOOOqhZIjcNhWtNJZes2nkBDsIKJ0CJtFtuaZ00moag==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "license": "MIT-0", + "dependencies": { + "@csstools/css-color-parser": "^3.1.0", + "@csstools/css-parser-algorithms": "^3.0.5", + "@csstools/css-tokenizer": "^3.0.4", + "@csstools/postcss-progressive-custom-properties": "^4.2.1", + "@csstools/utilities": "^2.0.0" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "postcss": "^8.4" + } + }, + "node_modules/@csstools/postcss-color-mix-variadic-function-arguments": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@csstools/postcss-color-mix-variadic-function-arguments/-/postcss-color-mix-variadic-function-arguments-1.0.2.tgz", + "integrity": "sha512-rM67Gp9lRAkTo+X31DUqMEq+iK+EFqsidfecmhrteErxJZb6tUoJBVQca1Vn1GpDql1s1rD1pKcuYzMsg7Z1KQ==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "license": "MIT-0", + "dependencies": { + "@csstools/css-color-parser": "^3.1.0", + "@csstools/css-parser-algorithms": "^3.0.5", + "@csstools/css-tokenizer": "^3.0.4", + "@csstools/postcss-progressive-custom-properties": "^4.2.1", + "@csstools/utilities": "^2.0.0" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "postcss": "^8.4" + } + }, + "node_modules/@csstools/postcss-content-alt-text": { + "version": "2.0.8", + "resolved": "https://registry.npmjs.org/@csstools/postcss-content-alt-text/-/postcss-content-alt-text-2.0.8.tgz", + "integrity": "sha512-9SfEW9QCxEpTlNMnpSqFaHyzsiRpZ5J5+KqCu1u5/eEJAWsMhzT40qf0FIbeeglEvrGRMdDzAxMIz3wqoGSb+Q==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "license": "MIT-0", + "dependencies": { + "@csstools/css-parser-algorithms": "^3.0.5", + "@csstools/css-tokenizer": "^3.0.4", + "@csstools/postcss-progressive-custom-properties": "^4.2.1", + "@csstools/utilities": "^2.0.0" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "postcss": "^8.4" + } + }, + "node_modules/@csstools/postcss-contrast-color-function": { + "version": "2.0.12", + "resolved": "https://registry.npmjs.org/@csstools/postcss-contrast-color-function/-/postcss-contrast-color-function-2.0.12.tgz", + "integrity": "sha512-YbwWckjK3qwKjeYz/CijgcS7WDUCtKTd8ShLztm3/i5dhh4NaqzsbYnhm4bjrpFpnLZ31jVcbK8YL77z3GBPzA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "license": "MIT-0", + "dependencies": { + "@csstools/css-color-parser": "^3.1.0", + "@csstools/css-parser-algorithms": "^3.0.5", + "@csstools/css-tokenizer": "^3.0.4", + "@csstools/postcss-progressive-custom-properties": "^4.2.1", + "@csstools/utilities": "^2.0.0" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "postcss": "^8.4" + } + }, + "node_modules/@csstools/postcss-exponential-functions": { + "version": "2.0.9", + "resolved": "https://registry.npmjs.org/@csstools/postcss-exponential-functions/-/postcss-exponential-functions-2.0.9.tgz", + "integrity": "sha512-abg2W/PI3HXwS/CZshSa79kNWNZHdJPMBXeZNyPQFbbj8sKO3jXxOt/wF7juJVjyDTc6JrvaUZYFcSBZBhaxjw==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "license": "MIT-0", + "dependencies": { + "@csstools/css-calc": "^2.1.4", + "@csstools/css-parser-algorithms": "^3.0.5", + "@csstools/css-tokenizer": "^3.0.4" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "postcss": "^8.4" + } + }, + "node_modules/@csstools/postcss-font-format-keywords": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@csstools/postcss-font-format-keywords/-/postcss-font-format-keywords-4.0.0.tgz", + "integrity": "sha512-usBzw9aCRDvchpok6C+4TXC57btc4bJtmKQWOHQxOVKen1ZfVqBUuCZ/wuqdX5GHsD0NRSr9XTP+5ID1ZZQBXw==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "license": "MIT-0", + "dependencies": { + "@csstools/utilities": "^2.0.0", + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "postcss": "^8.4" + } + }, + "node_modules/@csstools/postcss-gamut-mapping": { + "version": "2.0.11", + "resolved": "https://registry.npmjs.org/@csstools/postcss-gamut-mapping/-/postcss-gamut-mapping-2.0.11.tgz", + "integrity": "sha512-fCpCUgZNE2piVJKC76zFsgVW1apF6dpYsqGyH8SIeCcM4pTEsRTWTLCaJIMKFEundsCKwY1rwfhtrio04RJ4Dw==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "license": "MIT-0", + "dependencies": { + "@csstools/css-color-parser": "^3.1.0", + "@csstools/css-parser-algorithms": "^3.0.5", + "@csstools/css-tokenizer": "^3.0.4" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "postcss": "^8.4" + } + }, + "node_modules/@csstools/postcss-gradients-interpolation-method": { + "version": "5.0.12", + "resolved": "https://registry.npmjs.org/@csstools/postcss-gradients-interpolation-method/-/postcss-gradients-interpolation-method-5.0.12.tgz", + "integrity": "sha512-jugzjwkUY0wtNrZlFeyXzimUL3hN4xMvoPnIXxoZqxDvjZRiSh+itgHcVUWzJ2VwD/VAMEgCLvtaJHX+4Vj3Ow==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "license": "MIT-0", + "dependencies": { + "@csstools/css-color-parser": "^3.1.0", + "@csstools/css-parser-algorithms": "^3.0.5", + "@csstools/css-tokenizer": "^3.0.4", + "@csstools/postcss-progressive-custom-properties": "^4.2.1", + "@csstools/utilities": "^2.0.0" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "postcss": "^8.4" + } + }, + "node_modules/@csstools/postcss-hwb-function": { + "version": "4.0.12", + "resolved": "https://registry.npmjs.org/@csstools/postcss-hwb-function/-/postcss-hwb-function-4.0.12.tgz", + "integrity": "sha512-mL/+88Z53KrE4JdePYFJAQWFrcADEqsLprExCM04GDNgHIztwFzj0Mbhd/yxMBngq0NIlz58VVxjt5abNs1VhA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "license": "MIT-0", + "dependencies": { + "@csstools/css-color-parser": "^3.1.0", + "@csstools/css-parser-algorithms": "^3.0.5", + "@csstools/css-tokenizer": "^3.0.4", + "@csstools/postcss-progressive-custom-properties": "^4.2.1", + "@csstools/utilities": "^2.0.0" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "postcss": "^8.4" + } + }, + "node_modules/@csstools/postcss-ic-unit": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/@csstools/postcss-ic-unit/-/postcss-ic-unit-4.0.4.tgz", + "integrity": "sha512-yQ4VmossuOAql65sCPppVO1yfb7hDscf4GseF0VCA/DTDaBc0Wtf8MTqVPfjGYlT5+2buokG0Gp7y0atYZpwjg==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "license": "MIT-0", + "dependencies": { + "@csstools/postcss-progressive-custom-properties": "^4.2.1", + "@csstools/utilities": "^2.0.0", + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "postcss": "^8.4" + } + }, + "node_modules/@csstools/postcss-initial": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/@csstools/postcss-initial/-/postcss-initial-2.0.1.tgz", + "integrity": "sha512-L1wLVMSAZ4wovznquK0xmC7QSctzO4D0Is590bxpGqhqjboLXYA16dWZpfwImkdOgACdQ9PqXsuRroW6qPlEsg==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "license": "MIT-0", + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "postcss": "^8.4" + } + }, + "node_modules/@csstools/postcss-is-pseudo-class": { + "version": "5.0.3", + "resolved": "https://registry.npmjs.org/@csstools/postcss-is-pseudo-class/-/postcss-is-pseudo-class-5.0.3.tgz", + "integrity": "sha512-jS/TY4SpG4gszAtIg7Qnf3AS2pjcUM5SzxpApOrlndMeGhIbaTzWBzzP/IApXoNWEW7OhcjkRT48jnAUIFXhAQ==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "license": "MIT-0", + "dependencies": { + "@csstools/selector-specificity": "^5.0.0", + "postcss-selector-parser": "^7.0.0" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "postcss": "^8.4" + } + }, + "node_modules/@csstools/postcss-is-pseudo-class/node_modules/@csstools/selector-specificity": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/@csstools/selector-specificity/-/selector-specificity-5.0.0.tgz", + "integrity": "sha512-PCqQV3c4CoVm3kdPhyeZ07VmBRdH2EpMFA/pd9OASpOEC3aXNGoqPDAZ80D0cLpMBxnmk0+yNhGsEx31hq7Gtw==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "license": "MIT-0", + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "postcss-selector-parser": "^7.0.0" + } + }, + "node_modules/@csstools/postcss-is-pseudo-class/node_modules/postcss-selector-parser": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-7.1.1.tgz", + "integrity": "sha512-orRsuYpJVw8LdAwqqLykBj9ecS5/cRHlI5+nvTo8LcCKmzDmqVORXtOIYEEQuL9D4BxtA1lm5isAqzQZCoQ6Eg==", + "license": "MIT", + "dependencies": { + "cssesc": "^3.0.0", + "util-deprecate": "^1.0.2" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/@csstools/postcss-light-dark-function": { + "version": "2.0.11", + "resolved": "https://registry.npmjs.org/@csstools/postcss-light-dark-function/-/postcss-light-dark-function-2.0.11.tgz", + "integrity": "sha512-fNJcKXJdPM3Lyrbmgw2OBbaioU7yuKZtiXClf4sGdQttitijYlZMD5K7HrC/eF83VRWRrYq6OZ0Lx92leV2LFA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "license": "MIT-0", + "dependencies": { + "@csstools/css-parser-algorithms": "^3.0.5", + "@csstools/css-tokenizer": "^3.0.4", + "@csstools/postcss-progressive-custom-properties": "^4.2.1", + "@csstools/utilities": "^2.0.0" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "postcss": "^8.4" + } + }, + "node_modules/@csstools/postcss-logical-float-and-clear": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@csstools/postcss-logical-float-and-clear/-/postcss-logical-float-and-clear-3.0.0.tgz", + "integrity": "sha512-SEmaHMszwakI2rqKRJgE+8rpotFfne1ZS6bZqBoQIicFyV+xT1UF42eORPxJkVJVrH9C0ctUgwMSn3BLOIZldQ==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "license": "MIT-0", + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "postcss": "^8.4" + } + }, + "node_modules/@csstools/postcss-logical-overflow": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@csstools/postcss-logical-overflow/-/postcss-logical-overflow-2.0.0.tgz", + "integrity": "sha512-spzR1MInxPuXKEX2csMamshR4LRaSZ3UXVaRGjeQxl70ySxOhMpP2252RAFsg8QyyBXBzuVOOdx1+bVO5bPIzA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "license": "MIT-0", + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "postcss": "^8.4" + } + }, + "node_modules/@csstools/postcss-logical-overscroll-behavior": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@csstools/postcss-logical-overscroll-behavior/-/postcss-logical-overscroll-behavior-2.0.0.tgz", + "integrity": "sha512-e/webMjoGOSYfqLunyzByZj5KKe5oyVg/YSbie99VEaSDE2kimFm0q1f6t/6Jo+VVCQ/jbe2Xy+uX+C4xzWs4w==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "license": "MIT-0", + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "postcss": "^8.4" + } + }, + "node_modules/@csstools/postcss-logical-resize": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@csstools/postcss-logical-resize/-/postcss-logical-resize-3.0.0.tgz", + "integrity": "sha512-DFbHQOFW/+I+MY4Ycd/QN6Dg4Hcbb50elIJCfnwkRTCX05G11SwViI5BbBlg9iHRl4ytB7pmY5ieAFk3ws7yyg==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "license": "MIT-0", + "dependencies": { + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "postcss": "^8.4" + } + }, + "node_modules/@csstools/postcss-logical-viewport-units": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/@csstools/postcss-logical-viewport-units/-/postcss-logical-viewport-units-3.0.4.tgz", + "integrity": "sha512-q+eHV1haXA4w9xBwZLKjVKAWn3W2CMqmpNpZUk5kRprvSiBEGMgrNH3/sJZ8UA3JgyHaOt3jwT9uFa4wLX4EqQ==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "license": "MIT-0", + "dependencies": { + "@csstools/css-tokenizer": "^3.0.4", + "@csstools/utilities": "^2.0.0" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "postcss": "^8.4" + } + }, + "node_modules/@csstools/postcss-media-minmax": { + "version": "2.0.9", + "resolved": "https://registry.npmjs.org/@csstools/postcss-media-minmax/-/postcss-media-minmax-2.0.9.tgz", + "integrity": "sha512-af9Qw3uS3JhYLnCbqtZ9crTvvkR+0Se+bBqSr7ykAnl9yKhk6895z9rf+2F4dClIDJWxgn0iZZ1PSdkhrbs2ig==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "license": "MIT", + "dependencies": { + "@csstools/css-calc": "^2.1.4", + "@csstools/css-parser-algorithms": "^3.0.5", + "@csstools/css-tokenizer": "^3.0.4", + "@csstools/media-query-list-parser": "^4.0.3" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "postcss": "^8.4" + } + }, + "node_modules/@csstools/postcss-media-queries-aspect-ratio-number-values": { + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/@csstools/postcss-media-queries-aspect-ratio-number-values/-/postcss-media-queries-aspect-ratio-number-values-3.0.5.tgz", + "integrity": "sha512-zhAe31xaaXOY2Px8IYfoVTB3wglbJUVigGphFLj6exb7cjZRH9A6adyE22XfFK3P2PzwRk0VDeTJmaxpluyrDg==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "license": "MIT-0", + "dependencies": { + "@csstools/css-parser-algorithms": "^3.0.5", + "@csstools/css-tokenizer": "^3.0.4", + "@csstools/media-query-list-parser": "^4.0.3" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "postcss": "^8.4" + } + }, + "node_modules/@csstools/postcss-nested-calc": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@csstools/postcss-nested-calc/-/postcss-nested-calc-4.0.0.tgz", + "integrity": "sha512-jMYDdqrQQxE7k9+KjstC3NbsmC063n1FTPLCgCRS2/qHUbHM0mNy9pIn4QIiQGs9I/Bg98vMqw7mJXBxa0N88A==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "license": "MIT-0", + "dependencies": { + "@csstools/utilities": "^2.0.0", + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "postcss": "^8.4" + } + }, + "node_modules/@csstools/postcss-normalize-display-values": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@csstools/postcss-normalize-display-values/-/postcss-normalize-display-values-4.0.0.tgz", + "integrity": "sha512-HlEoG0IDRoHXzXnkV4in47dzsxdsjdz6+j7MLjaACABX2NfvjFS6XVAnpaDyGesz9gK2SC7MbNwdCHusObKJ9Q==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "license": "MIT-0", + "dependencies": { + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "postcss": "^8.4" + } + }, + "node_modules/@csstools/postcss-oklab-function": { + "version": "4.0.12", + "resolved": "https://registry.npmjs.org/@csstools/postcss-oklab-function/-/postcss-oklab-function-4.0.12.tgz", + "integrity": "sha512-HhlSmnE1NKBhXsTnNGjxvhryKtO7tJd1w42DKOGFD6jSHtYOrsJTQDKPMwvOfrzUAk8t7GcpIfRyM7ssqHpFjg==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "license": "MIT-0", + "dependencies": { + "@csstools/css-color-parser": "^3.1.0", + "@csstools/css-parser-algorithms": "^3.0.5", + "@csstools/css-tokenizer": "^3.0.4", + "@csstools/postcss-progressive-custom-properties": "^4.2.1", + "@csstools/utilities": "^2.0.0" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "postcss": "^8.4" + } + }, + "node_modules/@csstools/postcss-position-area-property": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@csstools/postcss-position-area-property/-/postcss-position-area-property-1.0.0.tgz", + "integrity": "sha512-fUP6KR8qV2NuUZV3Cw8itx0Ep90aRjAZxAEzC3vrl6yjFv+pFsQbR18UuQctEKmA72K9O27CoYiKEgXxkqjg8Q==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "license": "MIT-0", + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "postcss": "^8.4" + } + }, + "node_modules/@csstools/postcss-progressive-custom-properties": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/@csstools/postcss-progressive-custom-properties/-/postcss-progressive-custom-properties-4.2.1.tgz", + "integrity": "sha512-uPiiXf7IEKtUQXsxu6uWtOlRMXd2QWWy5fhxHDnPdXKCQckPP3E34ZgDoZ62r2iT+UOgWsSbM4NvHE5m3mAEdw==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "license": "MIT-0", + "dependencies": { + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "postcss": "^8.4" + } + }, + "node_modules/@csstools/postcss-random-function": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/@csstools/postcss-random-function/-/postcss-random-function-2.0.1.tgz", + "integrity": "sha512-q+FQaNiRBhnoSNo+GzqGOIBKoHQ43lYz0ICrV+UudfWnEF6ksS6DsBIJSISKQT2Bvu3g4k6r7t0zYrk5pDlo8w==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "license": "MIT-0", + "dependencies": { + "@csstools/css-calc": "^2.1.4", + "@csstools/css-parser-algorithms": "^3.0.5", + "@csstools/css-tokenizer": "^3.0.4" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "postcss": "^8.4" + } + }, + "node_modules/@csstools/postcss-relative-color-syntax": { + "version": "3.0.12", + "resolved": "https://registry.npmjs.org/@csstools/postcss-relative-color-syntax/-/postcss-relative-color-syntax-3.0.12.tgz", + "integrity": "sha512-0RLIeONxu/mtxRtf3o41Lq2ghLimw0w9ByLWnnEVuy89exmEEq8bynveBxNW3nyHqLAFEeNtVEmC1QK9MZ8Huw==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "license": "MIT-0", + "dependencies": { + "@csstools/css-color-parser": "^3.1.0", + "@csstools/css-parser-algorithms": "^3.0.5", + "@csstools/css-tokenizer": "^3.0.4", + "@csstools/postcss-progressive-custom-properties": "^4.2.1", + "@csstools/utilities": "^2.0.0" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "postcss": "^8.4" + } + }, + "node_modules/@csstools/postcss-scope-pseudo-class": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/@csstools/postcss-scope-pseudo-class/-/postcss-scope-pseudo-class-4.0.1.tgz", + "integrity": "sha512-IMi9FwtH6LMNuLea1bjVMQAsUhFxJnyLSgOp/cpv5hrzWmrUYU5fm0EguNDIIOHUqzXode8F/1qkC/tEo/qN8Q==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "license": "MIT-0", + "dependencies": { + "postcss-selector-parser": "^7.0.0" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "postcss": "^8.4" + } + }, + "node_modules/@csstools/postcss-scope-pseudo-class/node_modules/postcss-selector-parser": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-7.1.1.tgz", + "integrity": "sha512-orRsuYpJVw8LdAwqqLykBj9ecS5/cRHlI5+nvTo8LcCKmzDmqVORXtOIYEEQuL9D4BxtA1lm5isAqzQZCoQ6Eg==", + "license": "MIT", + "dependencies": { + "cssesc": "^3.0.0", + "util-deprecate": "^1.0.2" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/@csstools/postcss-sign-functions": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/@csstools/postcss-sign-functions/-/postcss-sign-functions-1.1.4.tgz", + "integrity": "sha512-P97h1XqRPcfcJndFdG95Gv/6ZzxUBBISem0IDqPZ7WMvc/wlO+yU0c5D/OCpZ5TJoTt63Ok3knGk64N+o6L2Pg==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "license": "MIT-0", + "dependencies": { + "@csstools/css-calc": "^2.1.4", + "@csstools/css-parser-algorithms": "^3.0.5", + "@csstools/css-tokenizer": "^3.0.4" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "postcss": "^8.4" + } + }, + "node_modules/@csstools/postcss-stepped-value-functions": { + "version": "4.0.9", + "resolved": "https://registry.npmjs.org/@csstools/postcss-stepped-value-functions/-/postcss-stepped-value-functions-4.0.9.tgz", + "integrity": "sha512-h9btycWrsex4dNLeQfyU3y3w40LMQooJWFMm/SK9lrKguHDcFl4VMkncKKoXi2z5rM9YGWbUQABI8BT2UydIcA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "license": "MIT-0", + "dependencies": { + "@csstools/css-calc": "^2.1.4", + "@csstools/css-parser-algorithms": "^3.0.5", + "@csstools/css-tokenizer": "^3.0.4" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "postcss": "^8.4" + } + }, + "node_modules/@csstools/postcss-system-ui-font-family": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@csstools/postcss-system-ui-font-family/-/postcss-system-ui-font-family-1.0.0.tgz", + "integrity": "sha512-s3xdBvfWYfoPSBsikDXbuorcMG1nN1M6GdU0qBsGfcmNR0A/qhloQZpTxjA3Xsyrk1VJvwb2pOfiOT3at/DuIQ==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "license": "MIT-0", + "dependencies": { + "@csstools/css-parser-algorithms": "^3.0.5", + "@csstools/css-tokenizer": "^3.0.4" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "postcss": "^8.4" + } + }, + "node_modules/@csstools/postcss-text-decoration-shorthand": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/@csstools/postcss-text-decoration-shorthand/-/postcss-text-decoration-shorthand-4.0.3.tgz", + "integrity": "sha512-KSkGgZfx0kQjRIYnpsD7X2Om9BUXX/Kii77VBifQW9Ih929hK0KNjVngHDH0bFB9GmfWcR9vJYJJRvw/NQjkrA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "license": "MIT-0", + "dependencies": { + "@csstools/color-helpers": "^5.1.0", + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "postcss": "^8.4" + } + }, + "node_modules/@csstools/postcss-trigonometric-functions": { + "version": "4.0.9", + "resolved": "https://registry.npmjs.org/@csstools/postcss-trigonometric-functions/-/postcss-trigonometric-functions-4.0.9.tgz", + "integrity": "sha512-Hnh5zJUdpNrJqK9v1/E3BbrQhaDTj5YiX7P61TOvUhoDHnUmsNNxcDAgkQ32RrcWx9GVUvfUNPcUkn8R3vIX6A==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "license": "MIT-0", + "dependencies": { + "@csstools/css-calc": "^2.1.4", + "@csstools/css-parser-algorithms": "^3.0.5", + "@csstools/css-tokenizer": "^3.0.4" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "postcss": "^8.4" + } + }, + "node_modules/@csstools/postcss-unset-value": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@csstools/postcss-unset-value/-/postcss-unset-value-4.0.0.tgz", + "integrity": "sha512-cBz3tOCI5Fw6NIFEwU3RiwK6mn3nKegjpJuzCndoGq3BZPkUjnsq7uQmIeMNeMbMk7YD2MfKcgCpZwX5jyXqCA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "license": "MIT-0", + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "postcss": "^8.4" + } + }, + "node_modules/@csstools/utilities": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@csstools/utilities/-/utilities-2.0.0.tgz", + "integrity": "sha512-5VdOr0Z71u+Yp3ozOx8T11N703wIFGVRgOWbOZMKgglPJsWA54MRIoMNVMa7shUToIhx5J8vX4sOZgD2XiihiQ==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "license": "MIT-0", + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "postcss": "^8.4" + } + }, + "node_modules/@discoveryjs/json-ext": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/@discoveryjs/json-ext/-/json-ext-0.5.7.tgz", + "integrity": "sha512-dBVuXR082gk3jsFp7Rd/JI4kytwGHecnCoTtXFb7DB6CNHp4rg5k1bhg0nWdLGLnOV71lmDzGQaLMy8iPLY0pw==", + "license": "MIT", + "engines": { + "node": ">=10.0.0" + } + }, + "node_modules/@docsearch/core": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/@docsearch/core/-/core-4.3.1.tgz", + "integrity": "sha512-ktVbkePE+2h9RwqCUMbWXOoebFyDOxHqImAqfs+lC8yOU+XwEW4jgvHGJK079deTeHtdhUNj0PXHSnhJINvHzQ==", + "license": "MIT", + "peerDependencies": { + "@types/react": ">= 16.8.0 < 20.0.0", + "react": ">= 16.8.0 < 20.0.0", + "react-dom": ">= 16.8.0 < 20.0.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "react": { + "optional": true + }, + "react-dom": { + "optional": true + } + } + }, + "node_modules/@docsearch/css": { + "version": "4.3.2", + "resolved": "https://registry.npmjs.org/@docsearch/css/-/css-4.3.2.tgz", + "integrity": "sha512-K3Yhay9MgkBjJJ0WEL5MxnACModX9xuNt3UlQQkDEDZJZ0+aeWKtOkxHNndMRkMBnHdYvQjxkm6mdlneOtU1IQ==", + "license": "MIT" + }, + "node_modules/@docsearch/react": { + "version": "4.3.2", + "resolved": "https://registry.npmjs.org/@docsearch/react/-/react-4.3.2.tgz", + "integrity": "sha512-74SFD6WluwvgsOPqifYOviEEVwDxslxfhakTlra+JviaNcs7KK/rjsPj89kVEoQc9FUxRkAofaJnHIR7pb4TSQ==", + "license": "MIT", + "dependencies": { + "@ai-sdk/react": "^2.0.30", + "@algolia/autocomplete-core": "1.19.2", + "@docsearch/core": "4.3.1", + "@docsearch/css": "4.3.2", + "ai": "^5.0.30", + "algoliasearch": "^5.28.0", + "marked": "^16.3.0", + "zod": "^4.1.8" + }, + "peerDependencies": { + "@types/react": ">= 16.8.0 < 20.0.0", + "react": ">= 16.8.0 < 20.0.0", + "react-dom": ">= 16.8.0 < 20.0.0", + "search-insights": ">= 1 < 3" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "react": { + "optional": true + }, + "react-dom": { + "optional": true + }, + "search-insights": { + "optional": true + } + } + }, + "node_modules/@docusaurus/babel": { + "version": "3.9.2", + "resolved": "https://registry.npmjs.org/@docusaurus/babel/-/babel-3.9.2.tgz", + "integrity": "sha512-GEANdi/SgER+L7Japs25YiGil/AUDnFFHaCGPBbundxoWtCkA2lmy7/tFmgED4y1htAy6Oi4wkJEQdGssnw9MA==", + "license": "MIT", + "dependencies": { + "@babel/core": "^7.25.9", + "@babel/generator": "^7.25.9", + "@babel/plugin-syntax-dynamic-import": "^7.8.3", + "@babel/plugin-transform-runtime": "^7.25.9", + "@babel/preset-env": "^7.25.9", + "@babel/preset-react": "^7.25.9", + "@babel/preset-typescript": "^7.25.9", + "@babel/runtime": "^7.25.9", + "@babel/runtime-corejs3": "^7.25.9", + "@babel/traverse": "^7.25.9", + "@docusaurus/logger": "3.9.2", + "@docusaurus/utils": "3.9.2", + "babel-plugin-dynamic-import-node": "^2.3.3", + "fs-extra": "^11.1.1", + "tslib": "^2.6.0" + }, + "engines": { + "node": ">=20.0" + } + }, + "node_modules/@docusaurus/bundler": { + "version": "3.9.2", + "resolved": "https://registry.npmjs.org/@docusaurus/bundler/-/bundler-3.9.2.tgz", + "integrity": "sha512-ZOVi6GYgTcsZcUzjblpzk3wH1Fya2VNpd5jtHoCCFcJlMQ1EYXZetfAnRHLcyiFeBABaI1ltTYbOBtH/gahGVA==", + "license": "MIT", + "dependencies": { + "@babel/core": "^7.25.9", + "@docusaurus/babel": "3.9.2", + "@docusaurus/cssnano-preset": "3.9.2", + "@docusaurus/logger": "3.9.2", + "@docusaurus/types": "3.9.2", + "@docusaurus/utils": "3.9.2", + "babel-loader": "^9.2.1", + "clean-css": "^5.3.3", + "copy-webpack-plugin": "^11.0.0", + "css-loader": "^6.11.0", + "css-minimizer-webpack-plugin": "^5.0.1", + "cssnano": "^6.1.2", + "file-loader": "^6.2.0", + "html-minifier-terser": "^7.2.0", + "mini-css-extract-plugin": "^2.9.2", + "null-loader": "^4.0.1", + "postcss": "^8.5.4", + "postcss-loader": "^7.3.4", + "postcss-preset-env": "^10.2.1", + "terser-webpack-plugin": "^5.3.9", + "tslib": "^2.6.0", + "url-loader": "^4.1.1", + "webpack": "^5.95.0", + "webpackbar": "^6.0.1" + }, + "engines": { + "node": ">=20.0" + }, + "peerDependencies": { + "@docusaurus/faster": "*" + }, + "peerDependenciesMeta": { + "@docusaurus/faster": { + "optional": true + } + } + }, + "node_modules/@docusaurus/core": { + "version": "3.9.2", + "resolved": "https://registry.npmjs.org/@docusaurus/core/-/core-3.9.2.tgz", + "integrity": "sha512-HbjwKeC+pHUFBfLMNzuSjqFE/58+rLVKmOU3lxQrpsxLBOGosYco/Q0GduBb0/jEMRiyEqjNT/01rRdOMWq5pw==", + "license": "MIT", + "dependencies": { + "@docusaurus/babel": "3.9.2", + "@docusaurus/bundler": "3.9.2", + "@docusaurus/logger": "3.9.2", + "@docusaurus/mdx-loader": "3.9.2", + "@docusaurus/utils": "3.9.2", + "@docusaurus/utils-common": "3.9.2", + "@docusaurus/utils-validation": "3.9.2", + "boxen": "^6.2.1", + "chalk": "^4.1.2", + "chokidar": "^3.5.3", + "cli-table3": "^0.6.3", + "combine-promises": "^1.1.0", + "commander": "^5.1.0", + "core-js": "^3.31.1", + "detect-port": "^1.5.1", + "escape-html": "^1.0.3", + "eta": "^2.2.0", + "eval": "^0.1.8", + "execa": "5.1.1", + "fs-extra": "^11.1.1", + "html-tags": "^3.3.1", + "html-webpack-plugin": "^5.6.0", + "leven": "^3.1.0", + "lodash": "^4.17.21", + "open": "^8.4.0", + "p-map": "^4.0.0", + "prompts": "^2.4.2", + "react-helmet-async": "npm:@slorber/react-helmet-async@1.3.0", + "react-loadable": "npm:@docusaurus/react-loadable@6.0.0", + "react-loadable-ssr-addon-v5-slorber": "^1.0.1", + "react-router": "^5.3.4", + "react-router-config": "^5.1.1", + "react-router-dom": "^5.3.4", + "semver": "^7.5.4", + "serve-handler": "^6.1.6", + "tinypool": "^1.0.2", + "tslib": "^2.6.0", + "update-notifier": "^6.0.2", + "webpack": "^5.95.0", + "webpack-bundle-analyzer": "^4.10.2", + "webpack-dev-server": "^5.2.2", + "webpack-merge": "^6.0.1" + }, + "bin": { + "docusaurus": "bin/docusaurus.mjs" + }, + "engines": { + "node": ">=20.0" + }, + "peerDependencies": { + "@mdx-js/react": "^3.0.0", + "react": "^18.0.0 || ^19.0.0", + "react-dom": "^18.0.0 || ^19.0.0" + } + }, + "node_modules/@docusaurus/cssnano-preset": { + "version": "3.9.2", + "resolved": "https://registry.npmjs.org/@docusaurus/cssnano-preset/-/cssnano-preset-3.9.2.tgz", + "integrity": "sha512-8gBKup94aGttRduABsj7bpPFTX7kbwu+xh3K9NMCF5K4bWBqTFYW+REKHF6iBVDHRJ4grZdIPbvkiHd/XNKRMQ==", + "license": "MIT", + "dependencies": { + "cssnano-preset-advanced": "^6.1.2", + "postcss": "^8.5.4", + "postcss-sort-media-queries": "^5.2.0", + "tslib": "^2.6.0" + }, + "engines": { + "node": ">=20.0" + } + }, + "node_modules/@docusaurus/logger": { + "version": "3.9.2", + "resolved": "https://registry.npmjs.org/@docusaurus/logger/-/logger-3.9.2.tgz", + "integrity": "sha512-/SVCc57ByARzGSU60c50rMyQlBuMIJCjcsJlkphxY6B0GV4UH3tcA1994N8fFfbJ9kX3jIBe/xg3XP5qBtGDbA==", + "license": "MIT", + "dependencies": { + "chalk": "^4.1.2", + "tslib": "^2.6.0" + }, + "engines": { + "node": ">=20.0" + } + }, + "node_modules/@docusaurus/mdx-loader": { + "version": "3.9.2", + "resolved": "https://registry.npmjs.org/@docusaurus/mdx-loader/-/mdx-loader-3.9.2.tgz", + "integrity": "sha512-wiYoGwF9gdd6rev62xDU8AAM8JuLI/hlwOtCzMmYcspEkzecKrP8J8X+KpYnTlACBUUtXNJpSoCwFWJhLRevzQ==", + "license": "MIT", + "dependencies": { + "@docusaurus/logger": "3.9.2", + "@docusaurus/utils": "3.9.2", + "@docusaurus/utils-validation": "3.9.2", + "@mdx-js/mdx": "^3.0.0", + "@slorber/remark-comment": "^1.0.0", + "escape-html": "^1.0.3", + "estree-util-value-to-estree": "^3.0.1", + "file-loader": "^6.2.0", + "fs-extra": "^11.1.1", + "image-size": "^2.0.2", + "mdast-util-mdx": "^3.0.0", + "mdast-util-to-string": "^4.0.0", + "rehype-raw": "^7.0.0", + "remark-directive": "^3.0.0", + "remark-emoji": "^4.0.0", + "remark-frontmatter": "^5.0.0", + "remark-gfm": "^4.0.0", + "stringify-object": "^3.3.0", + "tslib": "^2.6.0", + "unified": "^11.0.3", + "unist-util-visit": "^5.0.0", + "url-loader": "^4.1.1", + "vfile": "^6.0.1", + "webpack": "^5.88.1" + }, + "engines": { + "node": ">=20.0" + }, + "peerDependencies": { + "react": "^18.0.0 || ^19.0.0", + "react-dom": "^18.0.0 || ^19.0.0" + } + }, + "node_modules/@docusaurus/module-type-aliases": { + "version": "3.9.2", + "resolved": "https://registry.npmjs.org/@docusaurus/module-type-aliases/-/module-type-aliases-3.9.2.tgz", + "integrity": "sha512-8qVe2QA9hVLzvnxP46ysuofJUIc/yYQ82tvA/rBTrnpXtCjNSFLxEZfd5U8cYZuJIVlkPxamsIgwd5tGZXfvew==", + "license": "MIT", + "dependencies": { + "@docusaurus/types": "3.9.2", + "@types/history": "^4.7.11", + "@types/react": "*", + "@types/react-router-config": "*", + "@types/react-router-dom": "*", + "react-helmet-async": "npm:@slorber/react-helmet-async@1.3.0", + "react-loadable": "npm:@docusaurus/react-loadable@6.0.0" + }, + "peerDependencies": { + "react": "*", + "react-dom": "*" + } + }, + "node_modules/@docusaurus/plugin-content-blog": { + "version": "3.9.2", + "resolved": "https://registry.npmjs.org/@docusaurus/plugin-content-blog/-/plugin-content-blog-3.9.2.tgz", + "integrity": "sha512-3I2HXy3L1QcjLJLGAoTvoBnpOwa6DPUa3Q0dMK19UTY9mhPkKQg/DYhAGTiBUKcTR0f08iw7kLPqOhIgdV3eVQ==", + "license": "MIT", + "dependencies": { + "@docusaurus/core": "3.9.2", + "@docusaurus/logger": "3.9.2", + "@docusaurus/mdx-loader": "3.9.2", + "@docusaurus/theme-common": "3.9.2", + "@docusaurus/types": "3.9.2", + "@docusaurus/utils": "3.9.2", + "@docusaurus/utils-common": "3.9.2", + "@docusaurus/utils-validation": "3.9.2", + "cheerio": "1.0.0-rc.12", + "feed": "^4.2.2", + "fs-extra": "^11.1.1", + "lodash": "^4.17.21", + "schema-dts": "^1.1.2", + "srcset": "^4.0.0", + "tslib": "^2.6.0", + "unist-util-visit": "^5.0.0", + "utility-types": "^3.10.0", + "webpack": "^5.88.1" + }, + "engines": { + "node": ">=20.0" + }, + "peerDependencies": { + "@docusaurus/plugin-content-docs": "*", + "react": "^18.0.0 || ^19.0.0", + "react-dom": "^18.0.0 || ^19.0.0" + } + }, + "node_modules/@docusaurus/plugin-content-docs": { + "version": "3.9.2", + "resolved": "https://registry.npmjs.org/@docusaurus/plugin-content-docs/-/plugin-content-docs-3.9.2.tgz", + "integrity": "sha512-C5wZsGuKTY8jEYsqdxhhFOe1ZDjH0uIYJ9T/jebHwkyxqnr4wW0jTkB72OMqNjsoQRcb0JN3PcSeTwFlVgzCZg==", + "license": "MIT", + "dependencies": { + "@docusaurus/core": "3.9.2", + "@docusaurus/logger": "3.9.2", + "@docusaurus/mdx-loader": "3.9.2", + "@docusaurus/module-type-aliases": "3.9.2", + "@docusaurus/theme-common": "3.9.2", + "@docusaurus/types": "3.9.2", + "@docusaurus/utils": "3.9.2", + "@docusaurus/utils-common": "3.9.2", + "@docusaurus/utils-validation": "3.9.2", + "@types/react-router-config": "^5.0.7", + "combine-promises": "^1.1.0", + "fs-extra": "^11.1.1", + "js-yaml": "^4.1.0", + "lodash": "^4.17.21", + "schema-dts": "^1.1.2", + "tslib": "^2.6.0", + "utility-types": "^3.10.0", + "webpack": "^5.88.1" + }, + "engines": { + "node": ">=20.0" + }, + "peerDependencies": { + "react": "^18.0.0 || ^19.0.0", + "react-dom": "^18.0.0 || ^19.0.0" + } + }, + "node_modules/@docusaurus/plugin-content-pages": { + "version": "3.9.2", + "resolved": "https://registry.npmjs.org/@docusaurus/plugin-content-pages/-/plugin-content-pages-3.9.2.tgz", + "integrity": "sha512-s4849w/p4noXUrGpPUF0BPqIAfdAe76BLaRGAGKZ1gTDNiGxGcpsLcwJ9OTi1/V8A+AzvsmI9pkjie2zjIQZKA==", + "license": "MIT", + "dependencies": { + "@docusaurus/core": "3.9.2", + "@docusaurus/mdx-loader": "3.9.2", + "@docusaurus/types": "3.9.2", + "@docusaurus/utils": "3.9.2", + "@docusaurus/utils-validation": "3.9.2", + "fs-extra": "^11.1.1", + "tslib": "^2.6.0", + "webpack": "^5.88.1" + }, + "engines": { + "node": ">=20.0" + }, + "peerDependencies": { + "react": "^18.0.0 || ^19.0.0", + "react-dom": "^18.0.0 || ^19.0.0" + } + }, + "node_modules/@docusaurus/plugin-css-cascade-layers": { + "version": "3.9.2", + "resolved": "https://registry.npmjs.org/@docusaurus/plugin-css-cascade-layers/-/plugin-css-cascade-layers-3.9.2.tgz", + "integrity": "sha512-w1s3+Ss+eOQbscGM4cfIFBlVg/QKxyYgj26k5AnakuHkKxH6004ZtuLe5awMBotIYF2bbGDoDhpgQ4r/kcj4rQ==", + "license": "MIT", + "dependencies": { + "@docusaurus/core": "3.9.2", + "@docusaurus/types": "3.9.2", + "@docusaurus/utils": "3.9.2", + "@docusaurus/utils-validation": "3.9.2", + "tslib": "^2.6.0" + }, + "engines": { + "node": ">=20.0" + } + }, + "node_modules/@docusaurus/plugin-debug": { + "version": "3.9.2", + "resolved": "https://registry.npmjs.org/@docusaurus/plugin-debug/-/plugin-debug-3.9.2.tgz", + "integrity": "sha512-j7a5hWuAFxyQAkilZwhsQ/b3T7FfHZ+0dub6j/GxKNFJp2h9qk/P1Bp7vrGASnvA9KNQBBL1ZXTe7jlh4VdPdA==", + "license": "MIT", + "dependencies": { + "@docusaurus/core": "3.9.2", + "@docusaurus/types": "3.9.2", + "@docusaurus/utils": "3.9.2", + "fs-extra": "^11.1.1", + "react-json-view-lite": "^2.3.0", + "tslib": "^2.6.0" + }, + "engines": { + "node": ">=20.0" + }, + "peerDependencies": { + "react": "^18.0.0 || ^19.0.0", + "react-dom": "^18.0.0 || ^19.0.0" + } + }, + "node_modules/@docusaurus/plugin-google-analytics": { + "version": "3.9.2", + "resolved": "https://registry.npmjs.org/@docusaurus/plugin-google-analytics/-/plugin-google-analytics-3.9.2.tgz", + "integrity": "sha512-mAwwQJ1Us9jL/lVjXtErXto4p4/iaLlweC54yDUK1a97WfkC6Z2k5/769JsFgwOwOP+n5mUQGACXOEQ0XDuVUw==", + "license": "MIT", + "dependencies": { + "@docusaurus/core": "3.9.2", + "@docusaurus/types": "3.9.2", + "@docusaurus/utils-validation": "3.9.2", + "tslib": "^2.6.0" + }, + "engines": { + "node": ">=20.0" + }, + "peerDependencies": { + "react": "^18.0.0 || ^19.0.0", + "react-dom": "^18.0.0 || ^19.0.0" + } + }, + "node_modules/@docusaurus/plugin-google-gtag": { + "version": "3.9.2", + "resolved": "https://registry.npmjs.org/@docusaurus/plugin-google-gtag/-/plugin-google-gtag-3.9.2.tgz", + "integrity": "sha512-YJ4lDCphabBtw19ooSlc1MnxtYGpjFV9rEdzjLsUnBCeis2djUyCozZaFhCg6NGEwOn7HDDyMh0yzcdRpnuIvA==", + "license": "MIT", + "dependencies": { + "@docusaurus/core": "3.9.2", + "@docusaurus/types": "3.9.2", + "@docusaurus/utils-validation": "3.9.2", + "@types/gtag.js": "^0.0.12", + "tslib": "^2.6.0" + }, + "engines": { + "node": ">=20.0" + }, + "peerDependencies": { + "react": "^18.0.0 || ^19.0.0", + "react-dom": "^18.0.0 || ^19.0.0" + } + }, + "node_modules/@docusaurus/plugin-google-tag-manager": { + "version": "3.9.2", + "resolved": "https://registry.npmjs.org/@docusaurus/plugin-google-tag-manager/-/plugin-google-tag-manager-3.9.2.tgz", + "integrity": "sha512-LJtIrkZN/tuHD8NqDAW1Tnw0ekOwRTfobWPsdO15YxcicBo2ykKF0/D6n0vVBfd3srwr9Z6rzrIWYrMzBGrvNw==", + "license": "MIT", + "dependencies": { + "@docusaurus/core": "3.9.2", + "@docusaurus/types": "3.9.2", + "@docusaurus/utils-validation": "3.9.2", + "tslib": "^2.6.0" + }, + "engines": { + "node": ">=20.0" + }, + "peerDependencies": { + "react": "^18.0.0 || ^19.0.0", + "react-dom": "^18.0.0 || ^19.0.0" + } + }, + "node_modules/@docusaurus/plugin-sitemap": { + "version": "3.9.2", + "resolved": "https://registry.npmjs.org/@docusaurus/plugin-sitemap/-/plugin-sitemap-3.9.2.tgz", + "integrity": "sha512-WLh7ymgDXjG8oPoM/T4/zUP7KcSuFYRZAUTl8vR6VzYkfc18GBM4xLhcT+AKOwun6kBivYKUJf+vlqYJkm+RHw==", + "license": "MIT", + "dependencies": { + "@docusaurus/core": "3.9.2", + "@docusaurus/logger": "3.9.2", + "@docusaurus/types": "3.9.2", + "@docusaurus/utils": "3.9.2", + "@docusaurus/utils-common": "3.9.2", + "@docusaurus/utils-validation": "3.9.2", + "fs-extra": "^11.1.1", + "sitemap": "^7.1.1", + "tslib": "^2.6.0" + }, + "engines": { + "node": ">=20.0" + }, + "peerDependencies": { + "react": "^18.0.0 || ^19.0.0", + "react-dom": "^18.0.0 || ^19.0.0" + } + }, + "node_modules/@docusaurus/plugin-svgr": { + "version": "3.9.2", + "resolved": "https://registry.npmjs.org/@docusaurus/plugin-svgr/-/plugin-svgr-3.9.2.tgz", + "integrity": "sha512-n+1DE+5b3Lnf27TgVU5jM1d4x5tUh2oW5LTsBxJX4PsAPV0JGcmI6p3yLYtEY0LRVEIJh+8RsdQmRE66wSV8mw==", + "license": "MIT", + "dependencies": { + "@docusaurus/core": "3.9.2", + "@docusaurus/types": "3.9.2", + "@docusaurus/utils": "3.9.2", + "@docusaurus/utils-validation": "3.9.2", + "@svgr/core": "8.1.0", + "@svgr/webpack": "^8.1.0", + "tslib": "^2.6.0", + "webpack": "^5.88.1" + }, + "engines": { + "node": ">=20.0" + }, + "peerDependencies": { + "react": "^18.0.0 || ^19.0.0", + "react-dom": "^18.0.0 || ^19.0.0" + } + }, + "node_modules/@docusaurus/preset-classic": { + "version": "3.9.2", + "resolved": "https://registry.npmjs.org/@docusaurus/preset-classic/-/preset-classic-3.9.2.tgz", + "integrity": "sha512-IgyYO2Gvaigi21LuDIe+nvmN/dfGXAiMcV/murFqcpjnZc7jxFAxW+9LEjdPt61uZLxG4ByW/oUmX/DDK9t/8w==", + "license": "MIT", + "dependencies": { + "@docusaurus/core": "3.9.2", + "@docusaurus/plugin-content-blog": "3.9.2", + "@docusaurus/plugin-content-docs": "3.9.2", + "@docusaurus/plugin-content-pages": "3.9.2", + "@docusaurus/plugin-css-cascade-layers": "3.9.2", + "@docusaurus/plugin-debug": "3.9.2", + "@docusaurus/plugin-google-analytics": "3.9.2", + "@docusaurus/plugin-google-gtag": "3.9.2", + "@docusaurus/plugin-google-tag-manager": "3.9.2", + "@docusaurus/plugin-sitemap": "3.9.2", + "@docusaurus/plugin-svgr": "3.9.2", + "@docusaurus/theme-classic": "3.9.2", + "@docusaurus/theme-common": "3.9.2", + "@docusaurus/theme-search-algolia": "3.9.2", + "@docusaurus/types": "3.9.2" + }, + "engines": { + "node": ">=20.0" + }, + "peerDependencies": { + "react": "^18.0.0 || ^19.0.0", + "react-dom": "^18.0.0 || ^19.0.0" + } + }, + "node_modules/@docusaurus/theme-classic": { + "version": "3.9.2", + "resolved": "https://registry.npmjs.org/@docusaurus/theme-classic/-/theme-classic-3.9.2.tgz", + "integrity": "sha512-IGUsArG5hhekXd7RDb11v94ycpJpFdJPkLnt10fFQWOVxAtq5/D7hT6lzc2fhyQKaaCE62qVajOMKL7OiAFAIA==", + "license": "MIT", + "dependencies": { + "@docusaurus/core": "3.9.2", + "@docusaurus/logger": "3.9.2", + "@docusaurus/mdx-loader": "3.9.2", + "@docusaurus/module-type-aliases": "3.9.2", + "@docusaurus/plugin-content-blog": "3.9.2", + "@docusaurus/plugin-content-docs": "3.9.2", + "@docusaurus/plugin-content-pages": "3.9.2", + "@docusaurus/theme-common": "3.9.2", + "@docusaurus/theme-translations": "3.9.2", + "@docusaurus/types": "3.9.2", + "@docusaurus/utils": "3.9.2", + "@docusaurus/utils-common": "3.9.2", + "@docusaurus/utils-validation": "3.9.2", + "@mdx-js/react": "^3.0.0", + "clsx": "^2.0.0", + "infima": "0.2.0-alpha.45", + "lodash": "^4.17.21", + "nprogress": "^0.2.0", + "postcss": "^8.5.4", + "prism-react-renderer": "^2.3.0", + "prismjs": "^1.29.0", + "react-router-dom": "^5.3.4", + "rtlcss": "^4.1.0", + "tslib": "^2.6.0", + "utility-types": "^3.10.0" + }, + "engines": { + "node": ">=20.0" + }, + "peerDependencies": { + "react": "^18.0.0 || ^19.0.0", + "react-dom": "^18.0.0 || ^19.0.0" + } + }, + "node_modules/@docusaurus/theme-common": { + "version": "3.9.2", + "resolved": "https://registry.npmjs.org/@docusaurus/theme-common/-/theme-common-3.9.2.tgz", + "integrity": "sha512-6c4DAbR6n6nPbnZhY2V3tzpnKnGL+6aOsLvFL26VRqhlczli9eWG0VDUNoCQEPnGwDMhPS42UhSAnz5pThm5Ag==", + "license": "MIT", + "dependencies": { + "@docusaurus/mdx-loader": "3.9.2", + "@docusaurus/module-type-aliases": "3.9.2", + "@docusaurus/utils": "3.9.2", + "@docusaurus/utils-common": "3.9.2", + "@types/history": "^4.7.11", + "@types/react": "*", + "@types/react-router-config": "*", + "clsx": "^2.0.0", + "parse-numeric-range": "^1.3.0", + "prism-react-renderer": "^2.3.0", + "tslib": "^2.6.0", + "utility-types": "^3.10.0" + }, + "engines": { + "node": ">=20.0" + }, + "peerDependencies": { + "@docusaurus/plugin-content-docs": "*", + "react": "^18.0.0 || ^19.0.0", + "react-dom": "^18.0.0 || ^19.0.0" + } + }, + "node_modules/@docusaurus/theme-search-algolia": { + "version": "3.9.2", + "resolved": "https://registry.npmjs.org/@docusaurus/theme-search-algolia/-/theme-search-algolia-3.9.2.tgz", + "integrity": "sha512-GBDSFNwjnh5/LdkxCKQHkgO2pIMX1447BxYUBG2wBiajS21uj64a+gH/qlbQjDLxmGrbrllBrtJkUHxIsiwRnw==", + "license": "MIT", + "dependencies": { + "@docsearch/react": "^3.9.0 || ^4.1.0", + "@docusaurus/core": "3.9.2", + "@docusaurus/logger": "3.9.2", + "@docusaurus/plugin-content-docs": "3.9.2", + "@docusaurus/theme-common": "3.9.2", + "@docusaurus/theme-translations": "3.9.2", + "@docusaurus/utils": "3.9.2", + "@docusaurus/utils-validation": "3.9.2", + "algoliasearch": "^5.37.0", + "algoliasearch-helper": "^3.26.0", + "clsx": "^2.0.0", + "eta": "^2.2.0", + "fs-extra": "^11.1.1", + "lodash": "^4.17.21", + "tslib": "^2.6.0", + "utility-types": "^3.10.0" + }, + "engines": { + "node": ">=20.0" + }, + "peerDependencies": { + "react": "^18.0.0 || ^19.0.0", + "react-dom": "^18.0.0 || ^19.0.0" + } + }, + "node_modules/@docusaurus/theme-translations": { + "version": "3.9.2", + "resolved": "https://registry.npmjs.org/@docusaurus/theme-translations/-/theme-translations-3.9.2.tgz", + "integrity": "sha512-vIryvpP18ON9T9rjgMRFLr2xJVDpw1rtagEGf8Ccce4CkTrvM/fRB8N2nyWYOW5u3DdjkwKw5fBa+3tbn9P4PA==", + "license": "MIT", + "dependencies": { + "fs-extra": "^11.1.1", + "tslib": "^2.6.0" + }, + "engines": { + "node": ">=20.0" + } + }, + "node_modules/@docusaurus/tsconfig": { + "version": "3.9.2", + "resolved": "https://registry.npmjs.org/@docusaurus/tsconfig/-/tsconfig-3.9.2.tgz", + "integrity": "sha512-j6/Fp4Rlpxsc632cnRnl5HpOWeb6ZKssDj6/XzzAzVGXXfm9Eptx3rxCC+fDzySn9fHTS+CWJjPineCR1bB5WQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/@docusaurus/types": { + "version": "3.9.2", + "resolved": "https://registry.npmjs.org/@docusaurus/types/-/types-3.9.2.tgz", + "integrity": "sha512-Ux1JUNswg+EfUEmajJjyhIohKceitY/yzjRUpu04WXgvVz+fbhVC0p+R0JhvEu4ytw8zIAys2hrdpQPBHRIa8Q==", + "license": "MIT", + "dependencies": { + "@mdx-js/mdx": "^3.0.0", + "@types/history": "^4.7.11", + "@types/mdast": "^4.0.2", + "@types/react": "*", + "commander": "^5.1.0", + "joi": "^17.9.2", + "react-helmet-async": "npm:@slorber/react-helmet-async@1.3.0", + "utility-types": "^3.10.0", + "webpack": "^5.95.0", + "webpack-merge": "^5.9.0" + }, + "peerDependencies": { + "react": "^18.0.0 || ^19.0.0", + "react-dom": "^18.0.0 || ^19.0.0" + } + }, + "node_modules/@docusaurus/types/node_modules/webpack-merge": { + "version": "5.10.0", + "resolved": "https://registry.npmjs.org/webpack-merge/-/webpack-merge-5.10.0.tgz", + "integrity": "sha512-+4zXKdx7UnO+1jaN4l2lHVD+mFvnlZQP/6ljaJVb4SZiwIKeUnrT5l0gkT8z+n4hKpC+jpOv6O9R+gLtag7pSA==", + "license": "MIT", + "dependencies": { + "clone-deep": "^4.0.1", + "flat": "^5.0.2", + "wildcard": "^2.0.0" + }, + "engines": { + "node": ">=10.0.0" + } + }, + "node_modules/@docusaurus/utils": { + "version": "3.9.2", + "resolved": "https://registry.npmjs.org/@docusaurus/utils/-/utils-3.9.2.tgz", + "integrity": "sha512-lBSBiRruFurFKXr5Hbsl2thmGweAPmddhF3jb99U4EMDA5L+e5Y1rAkOS07Nvrup7HUMBDrCV45meaxZnt28nQ==", + "license": "MIT", + "dependencies": { + "@docusaurus/logger": "3.9.2", + "@docusaurus/types": "3.9.2", + "@docusaurus/utils-common": "3.9.2", + "escape-string-regexp": "^4.0.0", + "execa": "5.1.1", + "file-loader": "^6.2.0", + "fs-extra": "^11.1.1", + "github-slugger": "^1.5.0", + "globby": "^11.1.0", + "gray-matter": "^4.0.3", + "jiti": "^1.20.0", + "js-yaml": "^4.1.0", + "lodash": "^4.17.21", + "micromatch": "^4.0.5", + "p-queue": "^6.6.2", + "prompts": "^2.4.2", + "resolve-pathname": "^3.0.0", + "tslib": "^2.6.0", + "url-loader": "^4.1.1", + "utility-types": "^3.10.0", + "webpack": "^5.88.1" + }, + "engines": { + "node": ">=20.0" + } + }, + "node_modules/@docusaurus/utils-common": { + "version": "3.9.2", + "resolved": "https://registry.npmjs.org/@docusaurus/utils-common/-/utils-common-3.9.2.tgz", + "integrity": "sha512-I53UC1QctruA6SWLvbjbhCpAw7+X7PePoe5pYcwTOEXD/PxeP8LnECAhTHHwWCblyUX5bMi4QLRkxvyZ+IT8Aw==", + "license": "MIT", + "dependencies": { + "@docusaurus/types": "3.9.2", + "tslib": "^2.6.0" + }, + "engines": { + "node": ">=20.0" + } + }, + "node_modules/@docusaurus/utils-validation": { + "version": "3.9.2", + "resolved": "https://registry.npmjs.org/@docusaurus/utils-validation/-/utils-validation-3.9.2.tgz", + "integrity": "sha512-l7yk3X5VnNmATbwijJkexdhulNsQaNDwoagiwujXoxFbWLcxHQqNQ+c/IAlzrfMMOfa/8xSBZ7KEKDesE/2J7A==", + "license": "MIT", + "dependencies": { + "@docusaurus/logger": "3.9.2", + "@docusaurus/utils": "3.9.2", + "@docusaurus/utils-common": "3.9.2", + "fs-extra": "^11.2.0", + "joi": "^17.9.2", + "js-yaml": "^4.1.0", + "lodash": "^4.17.21", + "tslib": "^2.6.0" + }, + "engines": { + "node": ">=20.0" + } + }, + "node_modules/@hapi/hoek": { + "version": "9.3.0", + "resolved": "https://registry.npmjs.org/@hapi/hoek/-/hoek-9.3.0.tgz", + "integrity": "sha512-/c6rf4UJlmHlC9b5BaNvzAcFv7HZ2QHaV0D4/HNlBdvFnvQq8RI4kYdhyPCl7Xj+oWvTWQ8ujhqS53LIgAe6KQ==", + "license": "BSD-3-Clause" + }, + "node_modules/@hapi/topo": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/@hapi/topo/-/topo-5.1.0.tgz", + "integrity": "sha512-foQZKJig7Ob0BMAYBfcJk8d77QtOe7Wo4ox7ff1lQYoNNAb6jwcY1ncdoy2e9wQZzvNy7ODZCYJkK8kzmcAnAg==", + "license": "BSD-3-Clause", + "dependencies": { + "@hapi/hoek": "^9.0.0" + } + }, + "node_modules/@jest/schemas": { + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/@jest/schemas/-/schemas-29.6.3.tgz", + "integrity": "sha512-mo5j5X+jIZmJQveBKeS/clAueipV7KgiX1vMgCxam1RNYiqE1w62n0/tJJnHtjW8ZHcQco5gY85jA3mi0L+nSA==", + "license": "MIT", + "dependencies": { + "@sinclair/typebox": "^0.27.8" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/@jest/types": { + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-29.6.3.tgz", + "integrity": "sha512-u3UPsIilWKOM3F9CXtrG8LEJmNxwoCQC/XVj4IKYXvvpx7QIi/Kg1LI5uDmDpKlac62NUtX7eLjRh+jVZcLOzw==", + "license": "MIT", + "dependencies": { + "@jest/schemas": "^29.6.3", + "@types/istanbul-lib-coverage": "^2.0.0", + "@types/istanbul-reports": "^3.0.0", + "@types/node": "*", + "@types/yargs": "^17.0.8", + "chalk": "^4.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/@jridgewell/gen-mapping": { + "version": "0.3.13", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.13.tgz", + "integrity": "sha512-2kkt/7niJ6MgEPxF0bYdQ6etZaA+fQvDcLKckhy1yIQOzaoKjBBjSj63/aLVjYE3qhRt5dvM+uUyfCg6UKCBbA==", + "license": "MIT", + "dependencies": { + "@jridgewell/sourcemap-codec": "^1.5.0", + "@jridgewell/trace-mapping": "^0.3.24" + } + }, + "node_modules/@jridgewell/remapping": { + "version": "2.3.5", + "resolved": "https://registry.npmjs.org/@jridgewell/remapping/-/remapping-2.3.5.tgz", + "integrity": "sha512-LI9u/+laYG4Ds1TDKSJW2YPrIlcVYOwi2fUC6xB43lueCjgxV4lffOCZCtYFiH6TNOX+tQKXx97T4IKHbhyHEQ==", + "license": "MIT", + "dependencies": { + "@jridgewell/gen-mapping": "^0.3.5", + "@jridgewell/trace-mapping": "^0.3.24" + } + }, + "node_modules/@jridgewell/resolve-uri": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz", + "integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==", + "license": "MIT", + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/source-map": { + "version": "0.3.11", + "resolved": "https://registry.npmjs.org/@jridgewell/source-map/-/source-map-0.3.11.tgz", + "integrity": "sha512-ZMp1V8ZFcPG5dIWnQLr3NSI1MiCU7UETdS/A0G8V/XWHvJv3ZsFqutJn1Y5RPmAPX6F3BiE397OqveU/9NCuIA==", + "license": "MIT", + "dependencies": { + "@jridgewell/gen-mapping": "^0.3.5", + "@jridgewell/trace-mapping": "^0.3.25" + } + }, + "node_modules/@jridgewell/sourcemap-codec": { + "version": "1.5.5", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.5.tgz", + "integrity": "sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og==", + "license": "MIT" + }, + "node_modules/@jridgewell/trace-mapping": { + "version": "0.3.31", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.31.tgz", + "integrity": "sha512-zzNR+SdQSDJzc8joaeP8QQoCQr8NuYx2dIIytl1QeBEZHJ9uW6hebsrYgbz8hJwUQao3TWCMtmfV8Nu1twOLAw==", + "license": "MIT", + "dependencies": { + "@jridgewell/resolve-uri": "^3.1.0", + "@jridgewell/sourcemap-codec": "^1.4.14" + } + }, + "node_modules/@jsonjoy.com/base64": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@jsonjoy.com/base64/-/base64-1.1.2.tgz", + "integrity": "sha512-q6XAnWQDIMA3+FTiOYajoYqySkO+JSat0ytXGSuRdq9uXE7o92gzuQwQM14xaCRlBLGq3v5miDGC4vkVTn54xA==", + "license": "Apache-2.0", + "engines": { + "node": ">=10.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/streamich" + }, + "peerDependencies": { + "tslib": "2" + } + }, + "node_modules/@jsonjoy.com/buffers": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@jsonjoy.com/buffers/-/buffers-1.2.1.tgz", + "integrity": "sha512-12cdlDwX4RUM3QxmUbVJWqZ/mrK6dFQH4Zxq6+r1YXKXYBNgZXndx2qbCJwh3+WWkCSn67IjnlG3XYTvmvYtgA==", + "license": "Apache-2.0", + "engines": { + "node": ">=10.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/streamich" + }, + "peerDependencies": { + "tslib": "2" + } + }, + "node_modules/@jsonjoy.com/codegen": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@jsonjoy.com/codegen/-/codegen-1.0.0.tgz", + "integrity": "sha512-E8Oy+08cmCf0EK/NMxpaJZmOxPqM+6iSe2S4nlSBrPZOORoDJILxtbSUEDKQyTamm/BVAhIGllOBNU79/dwf0g==", + "license": "Apache-2.0", + "engines": { + "node": ">=10.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/streamich" + }, + "peerDependencies": { + "tslib": "2" + } + }, + "node_modules/@jsonjoy.com/json-pack": { + "version": "1.21.0", + "resolved": "https://registry.npmjs.org/@jsonjoy.com/json-pack/-/json-pack-1.21.0.tgz", + "integrity": "sha512-+AKG+R2cfZMShzrF2uQw34v3zbeDYUqnQ+jg7ORic3BGtfw9p/+N6RJbq/kkV8JmYZaINknaEQ2m0/f693ZPpg==", + "license": "Apache-2.0", + "dependencies": { + "@jsonjoy.com/base64": "^1.1.2", + "@jsonjoy.com/buffers": "^1.2.0", + "@jsonjoy.com/codegen": "^1.0.0", + "@jsonjoy.com/json-pointer": "^1.0.2", + "@jsonjoy.com/util": "^1.9.0", + "hyperdyperid": "^1.2.0", + "thingies": "^2.5.0", + "tree-dump": "^1.1.0" + }, + "engines": { + "node": ">=10.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/streamich" + }, + "peerDependencies": { + "tslib": "2" + } + }, + "node_modules/@jsonjoy.com/json-pointer": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@jsonjoy.com/json-pointer/-/json-pointer-1.0.2.tgz", + "integrity": "sha512-Fsn6wM2zlDzY1U+v4Nc8bo3bVqgfNTGcn6dMgs6FjrEnt4ZCe60o6ByKRjOGlI2gow0aE/Q41QOigdTqkyK5fg==", + "license": "Apache-2.0", + "dependencies": { + "@jsonjoy.com/codegen": "^1.0.0", + "@jsonjoy.com/util": "^1.9.0" + }, + "engines": { + "node": ">=10.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/streamich" + }, + "peerDependencies": { + "tslib": "2" + } + }, + "node_modules/@jsonjoy.com/util": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@jsonjoy.com/util/-/util-1.9.0.tgz", + "integrity": "sha512-pLuQo+VPRnN8hfPqUTLTHk126wuYdXVxE6aDmjSeV4NCAgyxWbiOIeNJVtID3h1Vzpoi9m4jXezf73I6LgabgQ==", + "license": "Apache-2.0", + "dependencies": { + "@jsonjoy.com/buffers": "^1.0.0", + "@jsonjoy.com/codegen": "^1.0.0" + }, + "engines": { + "node": ">=10.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/streamich" + }, + "peerDependencies": { + "tslib": "2" + } + }, + "node_modules/@leichtgewicht/ip-codec": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@leichtgewicht/ip-codec/-/ip-codec-2.0.5.tgz", + "integrity": "sha512-Vo+PSpZG2/fmgmiNzYK9qWRh8h/CHrwD0mo1h1DzL4yzHNSfWYujGTYsWGreD000gcgmZ7K4Ys6Tx9TxtsKdDw==", + "license": "MIT" + }, + "node_modules/@mdx-js/mdx": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/@mdx-js/mdx/-/mdx-3.1.1.tgz", + "integrity": "sha512-f6ZO2ifpwAQIpzGWaBQT2TXxPv6z3RBzQKpVftEWN78Vl/YweF1uwussDx8ECAXVtr3Rs89fKyG9YlzUs9DyGQ==", + "license": "MIT", + "dependencies": { + "@types/estree": "^1.0.0", + "@types/estree-jsx": "^1.0.0", + "@types/hast": "^3.0.0", + "@types/mdx": "^2.0.0", + "acorn": "^8.0.0", + "collapse-white-space": "^2.0.0", + "devlop": "^1.0.0", + "estree-util-is-identifier-name": "^3.0.0", + "estree-util-scope": "^1.0.0", + "estree-walker": "^3.0.0", + "hast-util-to-jsx-runtime": "^2.0.0", + "markdown-extensions": "^2.0.0", + "recma-build-jsx": "^1.0.0", + "recma-jsx": "^1.0.0", + "recma-stringify": "^1.0.0", + "rehype-recma": "^1.0.0", + "remark-mdx": "^3.0.0", + "remark-parse": "^11.0.0", + "remark-rehype": "^11.0.0", + "source-map": "^0.7.0", + "unified": "^11.0.0", + "unist-util-position-from-estree": "^2.0.0", + "unist-util-stringify-position": "^4.0.0", + "unist-util-visit": "^5.0.0", + "vfile": "^6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/@mdx-js/react": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/@mdx-js/react/-/react-3.1.1.tgz", + "integrity": "sha512-f++rKLQgUVYDAtECQ6fn/is15GkEH9+nZPM3MS0RcxVqoTfawHvDlSCH7JbMhAM6uJ32v3eXLvLmLvjGu7PTQw==", + "license": "MIT", + "dependencies": { + "@types/mdx": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + }, + "peerDependencies": { + "@types/react": ">=16", + "react": ">=16" + } + }, + "node_modules/@nodelib/fs.scandir": { + "version": "2.1.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", + "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", + "license": "MIT", + "dependencies": { + "@nodelib/fs.stat": "2.0.5", + "run-parallel": "^1.1.9" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@nodelib/fs.stat": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", + "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", + "license": "MIT", + "engines": { + "node": ">= 8" + } + }, + "node_modules/@nodelib/fs.walk": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", + "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", + "license": "MIT", + "dependencies": { + "@nodelib/fs.scandir": "2.1.5", + "fastq": "^1.6.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@opentelemetry/api": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/api/-/api-1.9.0.tgz", + "integrity": "sha512-3giAOQvZiH5F9bMlMiv8+GSPMeqg0dbaeo58/0SlA9sxSqZhnUtxzX9/2FzyhS9sWQf5S0GJE0AKBrFqjpeYcg==", + "license": "Apache-2.0", + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/@pnpm/config.env-replace": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@pnpm/config.env-replace/-/config.env-replace-1.1.0.tgz", + "integrity": "sha512-htyl8TWnKL7K/ESFa1oW2UB5lVDxuF5DpM7tBi6Hu2LNL3mWkIzNLG6N4zoCUP1lCKNxWy/3iu8mS8MvToGd6w==", + "license": "MIT", + "engines": { + "node": ">=12.22.0" + } + }, + "node_modules/@pnpm/network.ca-file": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@pnpm/network.ca-file/-/network.ca-file-1.0.2.tgz", + "integrity": "sha512-YcPQ8a0jwYU9bTdJDpXjMi7Brhkr1mXsXrUJvjqM2mQDgkRiz8jFaQGOdaLxgjtUfQgZhKy/O3cG/YwmgKaxLA==", + "license": "MIT", + "dependencies": { + "graceful-fs": "4.2.10" + }, + "engines": { + "node": ">=12.22.0" + } + }, + "node_modules/@pnpm/network.ca-file/node_modules/graceful-fs": { + "version": "4.2.10", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.10.tgz", + "integrity": "sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA==", + "license": "ISC" + }, + "node_modules/@pnpm/npm-conf": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/@pnpm/npm-conf/-/npm-conf-2.3.1.tgz", + "integrity": "sha512-c83qWb22rNRuB0UaVCI0uRPNRr8Z0FWnEIvT47jiHAmOIUHbBOg5XvV7pM5x+rKn9HRpjxquDbXYSXr3fAKFcw==", + "license": "MIT", + "dependencies": { + "@pnpm/config.env-replace": "^1.1.0", + "@pnpm/network.ca-file": "^1.0.1", + "config-chain": "^1.1.11" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/@polka/url": { + "version": "1.0.0-next.29", + "resolved": "https://registry.npmjs.org/@polka/url/-/url-1.0.0-next.29.tgz", + "integrity": "sha512-wwQAWhWSuHaag8c4q/KN/vCoeOJYshAIvMQwD4GpSb3OiZklFfvAgmj0VCBBImRpuF/aFgIRzllXlVX93Jevww==", + "license": "MIT" + }, + "node_modules/@sideway/address": { + "version": "4.1.5", + "resolved": "https://registry.npmjs.org/@sideway/address/-/address-4.1.5.tgz", + "integrity": "sha512-IqO/DUQHUkPeixNQ8n0JA6102hT9CmaljNTPmQ1u8MEhBo/R4Q8eKLN/vGZxuebwOroDB4cbpjheD4+/sKFK4Q==", + "license": "BSD-3-Clause", + "dependencies": { + "@hapi/hoek": "^9.0.0" + } + }, + "node_modules/@sideway/formula": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/@sideway/formula/-/formula-3.0.1.tgz", + "integrity": "sha512-/poHZJJVjx3L+zVD6g9KgHfYnb443oi7wLu/XKojDviHy6HOEOA6z1Trk5aR1dGcmPenJEgb2sK2I80LeS3MIg==", + "license": "BSD-3-Clause" + }, + "node_modules/@sideway/pinpoint": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@sideway/pinpoint/-/pinpoint-2.0.0.tgz", + "integrity": "sha512-RNiOoTPkptFtSVzQevY/yWtZwf/RxyVnPy/OcA9HBM3MlGDnBEYL5B41H0MTn0Uec8Hi+2qUtTfG2WWZBmMejQ==", + "license": "BSD-3-Clause" + }, + "node_modules/@sinclair/typebox": { + "version": "0.27.8", + "resolved": "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.27.8.tgz", + "integrity": "sha512-+Fj43pSMwJs4KRrH/938Uf+uAELIgVBmQzg/q1YG10djyfA3TnrU8N8XzqCh/okZdszqBQTZf96idMfE5lnwTA==", + "license": "MIT" + }, + "node_modules/@sindresorhus/is": { + "version": "4.6.0", + "resolved": "https://registry.npmjs.org/@sindresorhus/is/-/is-4.6.0.tgz", + "integrity": "sha512-t09vSN3MdfsyCHoFcTRCH/iUtG7OJ0CsjzB8cjAmKc/va/kIgeDI/TxsigdncE/4be734m0cvIYwNaV4i2XqAw==", + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sindresorhus/is?sponsor=1" + } + }, + "node_modules/@slorber/remark-comment": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@slorber/remark-comment/-/remark-comment-1.0.0.tgz", + "integrity": "sha512-RCE24n7jsOj1M0UPvIQCHTe7fI0sFL4S2nwKVWwHyVr/wI/H8GosgsJGyhnsZoGFnD/P2hLf1mSbrrgSLN93NA==", + "license": "MIT", + "dependencies": { + "micromark-factory-space": "^1.0.0", + "micromark-util-character": "^1.1.0", + "micromark-util-symbol": "^1.0.1" + } + }, + "node_modules/@standard-schema/spec": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@standard-schema/spec/-/spec-1.1.0.tgz", + "integrity": "sha512-l2aFy5jALhniG5HgqrD6jXLi/rUWrKvqN/qJx6yoJsgKhblVd+iqqU4RCXavm/jPityDo5TCvKMnpjKnOriy0w==", + "license": "MIT" + }, + "node_modules/@svgr/babel-plugin-add-jsx-attribute": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-add-jsx-attribute/-/babel-plugin-add-jsx-attribute-8.0.0.tgz", + "integrity": "sha512-b9MIk7yhdS1pMCZM8VeNfUlSKVRhsHZNMl5O9SfaX0l0t5wjdgu4IDzGB8bpnGBBOjGST3rRFVsaaEtI4W6f7g==", + "license": "MIT", + "engines": { + "node": ">=14" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/gregberge" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@svgr/babel-plugin-remove-jsx-attribute": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-remove-jsx-attribute/-/babel-plugin-remove-jsx-attribute-8.0.0.tgz", + "integrity": "sha512-BcCkm/STipKvbCl6b7QFrMh/vx00vIP63k2eM66MfHJzPr6O2U0jYEViXkHJWqXqQYjdeA9cuCl5KWmlwjDvbA==", + "license": "MIT", + "engines": { + "node": ">=14" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/gregberge" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@svgr/babel-plugin-remove-jsx-empty-expression": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-remove-jsx-empty-expression/-/babel-plugin-remove-jsx-empty-expression-8.0.0.tgz", + "integrity": "sha512-5BcGCBfBxB5+XSDSWnhTThfI9jcO5f0Ai2V24gZpG+wXF14BzwxxdDb4g6trdOux0rhibGs385BeFMSmxtS3uA==", + "license": "MIT", + "engines": { + "node": ">=14" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/gregberge" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@svgr/babel-plugin-replace-jsx-attribute-value": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-replace-jsx-attribute-value/-/babel-plugin-replace-jsx-attribute-value-8.0.0.tgz", + "integrity": "sha512-KVQ+PtIjb1BuYT3ht8M5KbzWBhdAjjUPdlMtpuw/VjT8coTrItWX6Qafl9+ji831JaJcu6PJNKCV0bp01lBNzQ==", + "license": "MIT", + "engines": { + "node": ">=14" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/gregberge" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@svgr/babel-plugin-svg-dynamic-title": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-svg-dynamic-title/-/babel-plugin-svg-dynamic-title-8.0.0.tgz", + "integrity": "sha512-omNiKqwjNmOQJ2v6ge4SErBbkooV2aAWwaPFs2vUY7p7GhVkzRkJ00kILXQvRhA6miHnNpXv7MRnnSjdRjK8og==", + "license": "MIT", + "engines": { + "node": ">=14" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/gregberge" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@svgr/babel-plugin-svg-em-dimensions": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-svg-em-dimensions/-/babel-plugin-svg-em-dimensions-8.0.0.tgz", + "integrity": "sha512-mURHYnu6Iw3UBTbhGwE/vsngtCIbHE43xCRK7kCw4t01xyGqb2Pd+WXekRRoFOBIY29ZoOhUCTEweDMdrjfi9g==", + "license": "MIT", + "engines": { + "node": ">=14" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/gregberge" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@svgr/babel-plugin-transform-react-native-svg": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-transform-react-native-svg/-/babel-plugin-transform-react-native-svg-8.1.0.tgz", + "integrity": "sha512-Tx8T58CHo+7nwJ+EhUwx3LfdNSG9R2OKfaIXXs5soiy5HtgoAEkDay9LIimLOcG8dJQH1wPZp/cnAv6S9CrR1Q==", + "license": "MIT", + "engines": { + "node": ">=14" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/gregberge" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@svgr/babel-plugin-transform-svg-component": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-transform-svg-component/-/babel-plugin-transform-svg-component-8.0.0.tgz", + "integrity": "sha512-DFx8xa3cZXTdb/k3kfPeaixecQLgKh5NVBMwD0AQxOzcZawK4oo1Jh9LbrcACUivsCA7TLG8eeWgrDXjTMhRmw==", + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/gregberge" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@svgr/babel-preset": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/@svgr/babel-preset/-/babel-preset-8.1.0.tgz", + "integrity": "sha512-7EYDbHE7MxHpv4sxvnVPngw5fuR6pw79SkcrILHJ/iMpuKySNCl5W1qcwPEpU+LgyRXOaAFgH0KhwD18wwg6ug==", + "license": "MIT", + "dependencies": { + "@svgr/babel-plugin-add-jsx-attribute": "8.0.0", + "@svgr/babel-plugin-remove-jsx-attribute": "8.0.0", + "@svgr/babel-plugin-remove-jsx-empty-expression": "8.0.0", + "@svgr/babel-plugin-replace-jsx-attribute-value": "8.0.0", + "@svgr/babel-plugin-svg-dynamic-title": "8.0.0", + "@svgr/babel-plugin-svg-em-dimensions": "8.0.0", + "@svgr/babel-plugin-transform-react-native-svg": "8.1.0", + "@svgr/babel-plugin-transform-svg-component": "8.0.0" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/gregberge" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@svgr/core": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/@svgr/core/-/core-8.1.0.tgz", + "integrity": "sha512-8QqtOQT5ACVlmsvKOJNEaWmRPmcojMOzCz4Hs2BGG/toAp/K38LcsMRyLp349glq5AzJbCEeimEoxaX6v/fLrA==", + "license": "MIT", + "dependencies": { + "@babel/core": "^7.21.3", + "@svgr/babel-preset": "8.1.0", + "camelcase": "^6.2.0", + "cosmiconfig": "^8.1.3", + "snake-case": "^3.0.4" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/gregberge" + } + }, + "node_modules/@svgr/hast-util-to-babel-ast": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/@svgr/hast-util-to-babel-ast/-/hast-util-to-babel-ast-8.0.0.tgz", + "integrity": "sha512-EbDKwO9GpfWP4jN9sGdYwPBU0kdomaPIL2Eu4YwmgP+sJeXT+L7bMwJUBnhzfH8Q2qMBqZ4fJwpCyYsAN3mt2Q==", + "license": "MIT", + "dependencies": { + "@babel/types": "^7.21.3", + "entities": "^4.4.0" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/gregberge" + } + }, + "node_modules/@svgr/plugin-jsx": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/@svgr/plugin-jsx/-/plugin-jsx-8.1.0.tgz", + "integrity": "sha512-0xiIyBsLlr8quN+WyuxooNW9RJ0Dpr8uOnH/xrCVO8GLUcwHISwj1AG0k+LFzteTkAA0GbX0kj9q6Dk70PTiPA==", + "license": "MIT", + "dependencies": { + "@babel/core": "^7.21.3", + "@svgr/babel-preset": "8.1.0", + "@svgr/hast-util-to-babel-ast": "8.0.0", + "svg-parser": "^2.0.4" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/gregberge" + }, + "peerDependencies": { + "@svgr/core": "*" + } + }, + "node_modules/@svgr/plugin-svgo": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/@svgr/plugin-svgo/-/plugin-svgo-8.1.0.tgz", + "integrity": "sha512-Ywtl837OGO9pTLIN/onoWLmDQ4zFUycI1g76vuKGEz6evR/ZTJlJuz3G/fIkb6OVBJ2g0o6CGJzaEjfmEo3AHA==", + "license": "MIT", + "dependencies": { + "cosmiconfig": "^8.1.3", + "deepmerge": "^4.3.1", + "svgo": "^3.0.2" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/gregberge" + }, + "peerDependencies": { + "@svgr/core": "*" + } + }, + "node_modules/@svgr/webpack": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/@svgr/webpack/-/webpack-8.1.0.tgz", + "integrity": "sha512-LnhVjMWyMQV9ZmeEy26maJk+8HTIbd59cH4F2MJ439k9DqejRisfFNGAPvRYlKETuh9LrImlS8aKsBgKjMA8WA==", + "license": "MIT", + "dependencies": { + "@babel/core": "^7.21.3", + "@babel/plugin-transform-react-constant-elements": "^7.21.3", + "@babel/preset-env": "^7.20.2", + "@babel/preset-react": "^7.18.6", + "@babel/preset-typescript": "^7.21.0", + "@svgr/core": "8.1.0", + "@svgr/plugin-jsx": "8.1.0", + "@svgr/plugin-svgo": "8.1.0" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/gregberge" + } + }, + "node_modules/@szmarczak/http-timer": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/@szmarczak/http-timer/-/http-timer-5.0.1.tgz", + "integrity": "sha512-+PmQX0PiAYPMeVYe237LJAYvOMYW1j2rH5YROyS3b4CTVJum34HfRvKvAzozHAQG0TnHNdUfY9nCeUyRAs//cw==", + "license": "MIT", + "dependencies": { + "defer-to-connect": "^2.0.1" + }, + "engines": { + "node": ">=14.16" + } + }, + "node_modules/@trysound/sax": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/@trysound/sax/-/sax-0.2.0.tgz", + "integrity": "sha512-L7z9BgrNEcYyUYtF+HaEfiS5ebkh9jXqbszz7pC0hRBPaatV0XjSD3+eHrpqFemQfgwiFF0QPIarnIihIDn7OA==", + "license": "ISC", + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/@types/body-parser": { + "version": "1.19.6", + "resolved": "https://registry.npmjs.org/@types/body-parser/-/body-parser-1.19.6.tgz", + "integrity": "sha512-HLFeCYgz89uk22N5Qg3dvGvsv46B8GLvKKo1zKG4NybA8U2DiEO3w9lqGg29t/tfLRJpJ6iQxnVw4OnB7MoM9g==", + "license": "MIT", + "dependencies": { + "@types/connect": "*", + "@types/node": "*" + } + }, + "node_modules/@types/bonjour": { + "version": "3.5.13", + "resolved": "https://registry.npmjs.org/@types/bonjour/-/bonjour-3.5.13.tgz", + "integrity": "sha512-z9fJ5Im06zvUL548KvYNecEVlA7cVDkGUi6kZusb04mpyEFKCIZJvloCcmpmLaIahDpOQGHaHmG6imtPMmPXGQ==", + "license": "MIT", + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/connect": { + "version": "3.4.38", + "resolved": "https://registry.npmjs.org/@types/connect/-/connect-3.4.38.tgz", + "integrity": "sha512-K6uROf1LD88uDQqJCktA4yzL1YYAK6NgfsI0v/mTgyPKWsX1CnJ0XPSDhViejru1GcRkLWb8RlzFYJRqGUbaug==", + "license": "MIT", + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/connect-history-api-fallback": { + "version": "1.5.4", + "resolved": "https://registry.npmjs.org/@types/connect-history-api-fallback/-/connect-history-api-fallback-1.5.4.tgz", + "integrity": "sha512-n6Cr2xS1h4uAulPRdlw6Jl6s1oG8KrVilPN2yUITEs+K48EzMJJ3W1xy8K5eWuFvjp3R74AOIGSmp2UfBJ8HFw==", + "license": "MIT", + "dependencies": { + "@types/express-serve-static-core": "*", + "@types/node": "*" + } + }, + "node_modules/@types/debug": { + "version": "4.1.12", + "resolved": "https://registry.npmjs.org/@types/debug/-/debug-4.1.12.tgz", + "integrity": "sha512-vIChWdVG3LG1SMxEvI/AK+FWJthlrqlTu7fbrlywTkkaONwk/UAGaULXRlf8vkzFBLVm0zkMdCquhL5aOjhXPQ==", + "license": "MIT", + "dependencies": { + "@types/ms": "*" + } + }, + "node_modules/@types/eslint": { + "version": "9.6.1", + "resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-9.6.1.tgz", + "integrity": "sha512-FXx2pKgId/WyYo2jXw63kk7/+TY7u7AziEJxJAnSFzHlqTAS3Ync6SvgYAN/k4/PQpnnVuzoMuVnByKK2qp0ag==", + "license": "MIT", + "dependencies": { + "@types/estree": "*", + "@types/json-schema": "*" + } + }, + "node_modules/@types/eslint-scope": { + "version": "3.7.7", + "resolved": "https://registry.npmjs.org/@types/eslint-scope/-/eslint-scope-3.7.7.tgz", + "integrity": "sha512-MzMFlSLBqNF2gcHWO0G1vP/YQyfvrxZ0bF+u7mzUdZ1/xK4A4sru+nraZz5i3iEIk1l1uyicaDVTB4QbbEkAYg==", + "license": "MIT", + "dependencies": { + "@types/eslint": "*", + "@types/estree": "*" + } + }, + "node_modules/@types/estree": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.8.tgz", + "integrity": "sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w==", + "license": "MIT" + }, + "node_modules/@types/estree-jsx": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/@types/estree-jsx/-/estree-jsx-1.0.5.tgz", + "integrity": "sha512-52CcUVNFyfb1A2ALocQw/Dd1BQFNmSdkuC3BkZ6iqhdMfQz7JWOFRuJFloOzjk+6WijU56m9oKXFAXc7o3Towg==", + "license": "MIT", + "dependencies": { + "@types/estree": "*" + } + }, + "node_modules/@types/express": { + "version": "4.17.25", + "resolved": "https://registry.npmjs.org/@types/express/-/express-4.17.25.tgz", + "integrity": "sha512-dVd04UKsfpINUnK0yBoYHDF3xu7xVH4BuDotC/xGuycx4CgbP48X/KF/586bcObxT0HENHXEU8Nqtu6NR+eKhw==", + "license": "MIT", + "dependencies": { + "@types/body-parser": "*", + "@types/express-serve-static-core": "^4.17.33", + "@types/qs": "*", + "@types/serve-static": "^1" + } + }, + "node_modules/@types/express-serve-static-core": { + "version": "4.19.7", + "resolved": "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-4.19.7.tgz", + "integrity": "sha512-FvPtiIf1LfhzsaIXhv/PHan/2FeQBbtBDtfX2QfvPxdUelMDEckK08SM6nqo1MIZY3RUlfA+HV8+hFUSio78qg==", + "license": "MIT", + "dependencies": { + "@types/node": "*", + "@types/qs": "*", + "@types/range-parser": "*", + "@types/send": "*" + } + }, + "node_modules/@types/gtag.js": { + "version": "0.0.12", + "resolved": "https://registry.npmjs.org/@types/gtag.js/-/gtag.js-0.0.12.tgz", + "integrity": "sha512-YQV9bUsemkzG81Ea295/nF/5GijnD2Af7QhEofh7xu+kvCN6RdodgNwwGWXB5GMI3NoyvQo0odNctoH/qLMIpg==", + "license": "MIT" + }, + "node_modules/@types/hast": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/@types/hast/-/hast-3.0.4.tgz", + "integrity": "sha512-WPs+bbQw5aCj+x6laNGWLH3wviHtoCv/P3+otBhbOhJgG8qtpdAMlTCxLtsTWA7LH1Oh/bFCHsBn0TPS5m30EQ==", + "license": "MIT", + "dependencies": { + "@types/unist": "*" + } + }, + "node_modules/@types/history": { + "version": "4.7.11", + "resolved": "https://registry.npmjs.org/@types/history/-/history-4.7.11.tgz", + "integrity": "sha512-qjDJRrmvBMiTx+jyLxvLfJU7UznFuokDv4f3WRuriHKERccVpFU+8XMQUAbDzoiJCsmexxRExQeMwwCdamSKDA==", + "license": "MIT" + }, + "node_modules/@types/html-minifier-terser": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/@types/html-minifier-terser/-/html-minifier-terser-6.1.0.tgz", + "integrity": "sha512-oh/6byDPnL1zeNXFrDXFLyZjkr1MsBG667IM792caf1L2UPOOMf65NFzjUH/ltyfwjAGfs1rsX1eftK0jC/KIg==", + "license": "MIT" + }, + "node_modules/@types/http-cache-semantics": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/@types/http-cache-semantics/-/http-cache-semantics-4.0.4.tgz", + "integrity": "sha512-1m0bIFVc7eJWyve9S0RnuRgcQqF/Xd5QsUZAZeQFr1Q3/p9JWoQQEqmVy+DPTNpGXwhgIetAoYF8JSc33q29QA==", + "license": "MIT" + }, + "node_modules/@types/http-errors": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@types/http-errors/-/http-errors-2.0.5.tgz", + "integrity": "sha512-r8Tayk8HJnX0FztbZN7oVqGccWgw98T/0neJphO91KkmOzug1KkofZURD4UaD5uH8AqcFLfdPErnBod0u71/qg==", + "license": "MIT" + }, + "node_modules/@types/http-proxy": { + "version": "1.17.17", + "resolved": "https://registry.npmjs.org/@types/http-proxy/-/http-proxy-1.17.17.tgz", + "integrity": "sha512-ED6LB+Z1AVylNTu7hdzuBqOgMnvG/ld6wGCG8wFnAzKX5uyW2K3WD52v0gnLCTK/VLpXtKckgWuyScYK6cSPaw==", + "license": "MIT", + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/istanbul-lib-coverage": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.6.tgz", + "integrity": "sha512-2QF/t/auWm0lsy8XtKVPG19v3sSOQlJe/YHZgfjb/KBBHOGSV+J2q/S671rcq9uTBrLAXmZpqJiaQbMT+zNU1w==", + "license": "MIT" + }, + "node_modules/@types/istanbul-lib-report": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/@types/istanbul-lib-report/-/istanbul-lib-report-3.0.3.tgz", + "integrity": "sha512-NQn7AHQnk/RSLOxrBbGyJM/aVQ+pjj5HCgasFxc0K/KhoATfQ/47AyUl15I2yBUpihjmas+a+VJBOqecrFH+uA==", + "license": "MIT", + "dependencies": { + "@types/istanbul-lib-coverage": "*" + } + }, + "node_modules/@types/istanbul-reports": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-3.0.4.tgz", + "integrity": "sha512-pk2B1NWalF9toCRu6gjBzR69syFjP4Od8WRAX+0mmf9lAjCRicLOWc+ZrxZHx/0XRjotgkF9t6iaMJ+aXcOdZQ==", + "license": "MIT", + "dependencies": { + "@types/istanbul-lib-report": "*" + } + }, + "node_modules/@types/json-schema": { + "version": "7.0.15", + "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.15.tgz", + "integrity": "sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==", + "license": "MIT" + }, + "node_modules/@types/mdast": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/@types/mdast/-/mdast-4.0.4.tgz", + "integrity": "sha512-kGaNbPh1k7AFzgpud/gMdvIm5xuECykRR+JnWKQno9TAXVa6WIVCGTPvYGekIDL4uwCZQSYbUxNBSb1aUo79oA==", + "license": "MIT", + "dependencies": { + "@types/unist": "*" + } + }, + "node_modules/@types/mdx": { + "version": "2.0.13", + "resolved": "https://registry.npmjs.org/@types/mdx/-/mdx-2.0.13.tgz", + "integrity": "sha512-+OWZQfAYyio6YkJb3HLxDrvnx6SWWDbC0zVPfBRzUk0/nqoDyf6dNxQi3eArPe8rJ473nobTMQ/8Zk+LxJ+Yuw==", + "license": "MIT" + }, + "node_modules/@types/mime": { + "version": "1.3.5", + "resolved": "https://registry.npmjs.org/@types/mime/-/mime-1.3.5.tgz", + "integrity": "sha512-/pyBZWSLD2n0dcHE3hq8s8ZvcETHtEuF+3E7XVt0Ig2nvsVQXdghHVcEkIWjy9A0wKfTn97a/PSDYohKIlnP/w==", + "license": "MIT" + }, + "node_modules/@types/ms": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/@types/ms/-/ms-2.1.0.tgz", + "integrity": "sha512-GsCCIZDE/p3i96vtEqx+7dBUGXrc7zeSK3wwPHIaRThS+9OhWIXRqzs4d6k1SVU8g91DrNRWxWUGhp5KXQb2VA==", + "license": "MIT" + }, + "node_modules/@types/node": { + "version": "25.0.2", + "resolved": "https://registry.npmjs.org/@types/node/-/node-25.0.2.tgz", + "integrity": "sha512-gWEkeiyYE4vqjON/+Obqcoeffmk0NF15WSBwSs7zwVA2bAbTaE0SJ7P0WNGoJn8uE7fiaV5a7dKYIJriEqOrmA==", + "license": "MIT", + "dependencies": { + "undici-types": "~7.16.0" + } + }, + "node_modules/@types/node-forge": { + "version": "1.3.14", + "resolved": "https://registry.npmjs.org/@types/node-forge/-/node-forge-1.3.14.tgz", + "integrity": "sha512-mhVF2BnD4BO+jtOp7z1CdzaK4mbuK0LLQYAvdOLqHTavxFNq4zA1EmYkpnFjP8HOUzedfQkRnp0E2ulSAYSzAw==", + "license": "MIT", + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/prismjs": { + "version": "1.26.5", + "resolved": "https://registry.npmjs.org/@types/prismjs/-/prismjs-1.26.5.tgz", + "integrity": "sha512-AUZTa7hQ2KY5L7AmtSiqxlhWxb4ina0yd8hNbl4TWuqnv/pFP0nDMb3YrfSBf4hJVGLh2YEIBfKaBW/9UEl6IQ==", + "license": "MIT" + }, + "node_modules/@types/qs": { + "version": "6.14.0", + "resolved": "https://registry.npmjs.org/@types/qs/-/qs-6.14.0.tgz", + "integrity": "sha512-eOunJqu0K1923aExK6y8p6fsihYEn/BYuQ4g0CxAAgFc4b/ZLN4CrsRZ55srTdqoiLzU2B2evC+apEIxprEzkQ==", + "license": "MIT" + }, + "node_modules/@types/range-parser": { + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/@types/range-parser/-/range-parser-1.2.7.tgz", + "integrity": "sha512-hKormJbkJqzQGhziax5PItDUTMAM9uE2XXQmM37dyd4hVM+5aVl7oVxMVUiVQn2oCQFN/LKCZdvSM0pFRqbSmQ==", + "license": "MIT" + }, + "node_modules/@types/react": { + "version": "19.2.7", + "resolved": "https://registry.npmjs.org/@types/react/-/react-19.2.7.tgz", + "integrity": "sha512-MWtvHrGZLFttgeEj28VXHxpmwYbor/ATPYbBfSFZEIRK0ecCFLl2Qo55z52Hss+UV9CRN7trSeq1zbgx7YDWWg==", + "license": "MIT", + "dependencies": { + "csstype": "^3.2.2" + } + }, + "node_modules/@types/react-router": { + "version": "5.1.20", + "resolved": "https://registry.npmjs.org/@types/react-router/-/react-router-5.1.20.tgz", + "integrity": "sha512-jGjmu/ZqS7FjSH6owMcD5qpq19+1RS9DeVRqfl1FeBMxTDQAGwlMWOcs52NDoXaNKyG3d1cYQFMs9rCrb88o9Q==", + "license": "MIT", + "dependencies": { + "@types/history": "^4.7.11", + "@types/react": "*" + } + }, + "node_modules/@types/react-router-config": { + "version": "5.0.11", + "resolved": "https://registry.npmjs.org/@types/react-router-config/-/react-router-config-5.0.11.tgz", + "integrity": "sha512-WmSAg7WgqW7m4x8Mt4N6ZyKz0BubSj/2tVUMsAHp+Yd2AMwcSbeFq9WympT19p5heCFmF97R9eD5uUR/t4HEqw==", + "license": "MIT", + "dependencies": { + "@types/history": "^4.7.11", + "@types/react": "*", + "@types/react-router": "^5.1.0" + } + }, + "node_modules/@types/react-router-dom": { + "version": "5.3.3", + "resolved": "https://registry.npmjs.org/@types/react-router-dom/-/react-router-dom-5.3.3.tgz", + "integrity": "sha512-kpqnYK4wcdm5UaWI3fLcELopqLrHgLqNsdpHauzlQktfkHL3npOSwtj1Uz9oKBAzs7lFtVkV8j83voAz2D8fhw==", + "license": "MIT", + "dependencies": { + "@types/history": "^4.7.11", + "@types/react": "*", + "@types/react-router": "*" + } + }, + "node_modules/@types/retry": { + "version": "0.12.2", + "resolved": "https://registry.npmjs.org/@types/retry/-/retry-0.12.2.tgz", + "integrity": "sha512-XISRgDJ2Tc5q4TRqvgJtzsRkFYNJzZrhTdtMoGVBttwzzQJkPnS3WWTFc7kuDRoPtPakl+T+OfdEUjYJj7Jbow==", + "license": "MIT" + }, + "node_modules/@types/sax": { + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/@types/sax/-/sax-1.2.7.tgz", + "integrity": "sha512-rO73L89PJxeYM3s3pPPjiPgVVcymqU490g0YO5n5By0k2Erzj6tay/4lr1CHAAU4JyOWd1rpQ8bCf6cZfHU96A==", + "license": "MIT", + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/send": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@types/send/-/send-1.2.1.tgz", + "integrity": "sha512-arsCikDvlU99zl1g69TcAB3mzZPpxgw0UQnaHeC1Nwb015xp8bknZv5rIfri9xTOcMuaVgvabfIRA7PSZVuZIQ==", + "license": "MIT", + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/serve-index": { + "version": "1.9.4", + "resolved": "https://registry.npmjs.org/@types/serve-index/-/serve-index-1.9.4.tgz", + "integrity": "sha512-qLpGZ/c2fhSs5gnYsQxtDEq3Oy8SXPClIXkW5ghvAvsNuVSA8k+gCONcUCS/UjLEYvYps+e8uBtfgXgvhwfNug==", + "license": "MIT", + "dependencies": { + "@types/express": "*" + } + }, + "node_modules/@types/serve-static": { + "version": "1.15.10", + "resolved": "https://registry.npmjs.org/@types/serve-static/-/serve-static-1.15.10.tgz", + "integrity": "sha512-tRs1dB+g8Itk72rlSI2ZrW6vZg0YrLI81iQSTkMmOqnqCaNr/8Ek4VwWcN5vZgCYWbg/JJSGBlUaYGAOP73qBw==", + "license": "MIT", + "dependencies": { + "@types/http-errors": "*", + "@types/node": "*", + "@types/send": "<1" + } + }, + "node_modules/@types/serve-static/node_modules/@types/send": { + "version": "0.17.6", + "resolved": "https://registry.npmjs.org/@types/send/-/send-0.17.6.tgz", + "integrity": "sha512-Uqt8rPBE8SY0RK8JB1EzVOIZ32uqy8HwdxCnoCOsYrvnswqmFZ/k+9Ikidlk/ImhsdvBsloHbAlewb2IEBV/Og==", + "license": "MIT", + "dependencies": { + "@types/mime": "^1", + "@types/node": "*" + } + }, + "node_modules/@types/sockjs": { + "version": "0.3.36", + "resolved": "https://registry.npmjs.org/@types/sockjs/-/sockjs-0.3.36.tgz", + "integrity": "sha512-MK9V6NzAS1+Ud7JV9lJLFqW85VbC9dq3LmwZCuBe4wBDgKC0Kj/jd8Xl+nSviU+Qc3+m7umHHyHg//2KSa0a0Q==", + "license": "MIT", + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/unist": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/@types/unist/-/unist-3.0.3.tgz", + "integrity": "sha512-ko/gIFJRv177XgZsZcBwnqJN5x/Gien8qNOn0D5bQU/zAzVf9Zt3BlcUiLqhV9y4ARk0GbT3tnUiPNgnTXzc/Q==", + "license": "MIT" + }, + "node_modules/@types/ws": { + "version": "8.18.1", + "resolved": "https://registry.npmjs.org/@types/ws/-/ws-8.18.1.tgz", + "integrity": "sha512-ThVF6DCVhA8kUGy+aazFQ4kXQ7E1Ty7A3ypFOe0IcJV8O/M511G99AW24irKrW56Wt44yG9+ij8FaqoBGkuBXg==", + "license": "MIT", + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/yargs": { + "version": "17.0.35", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.35.tgz", + "integrity": "sha512-qUHkeCyQFxMXg79wQfTtfndEC+N9ZZg76HJftDJp+qH2tV7Gj4OJi7l+PiWwJ+pWtW8GwSmqsDj/oymhrTWXjg==", + "license": "MIT", + "dependencies": { + "@types/yargs-parser": "*" + } + }, + "node_modules/@types/yargs-parser": { + "version": "21.0.3", + "resolved": "https://registry.npmjs.org/@types/yargs-parser/-/yargs-parser-21.0.3.tgz", + "integrity": "sha512-I4q9QU9MQv4oEOz4tAHJtNz1cwuLxn2F3xcc2iV5WdqLPpUnj30aUuxt1mAxYTG+oe8CZMV/+6rU4S4gRDzqtQ==", + "license": "MIT" + }, + "node_modules/@ungap/structured-clone": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/@ungap/structured-clone/-/structured-clone-1.3.0.tgz", + "integrity": "sha512-WmoN8qaIAo7WTYWbAZuG8PYEhn5fkz7dZrqTBZ7dtt//lL2Gwms1IcnQ5yHqjDfX8Ft5j4YzDM23f87zBfDe9g==", + "license": "ISC" + }, + "node_modules/@vercel/oidc": { + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/@vercel/oidc/-/oidc-3.0.5.tgz", + "integrity": "sha512-fnYhv671l+eTTp48gB4zEsTW/YtRgRPnkI2nT7x6qw5rkI1Lq2hTmQIpHPgyThI0znLK+vX2n9XxKdXZ7BUbbw==", + "license": "Apache-2.0", + "engines": { + "node": ">= 20" + } + }, + "node_modules/@webassemblyjs/ast": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.14.1.tgz", + "integrity": "sha512-nuBEDgQfm1ccRp/8bCQrx1frohyufl4JlbMMZ4P1wpeOfDhF6FQkxZJ1b/e+PLwr6X1Nhw6OLme5usuBWYBvuQ==", + "license": "MIT", + "dependencies": { + "@webassemblyjs/helper-numbers": "1.13.2", + "@webassemblyjs/helper-wasm-bytecode": "1.13.2" + } + }, + "node_modules/@webassemblyjs/floating-point-hex-parser": { + "version": "1.13.2", + "resolved": "https://registry.npmjs.org/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.13.2.tgz", + "integrity": "sha512-6oXyTOzbKxGH4steLbLNOu71Oj+C8Lg34n6CqRvqfS2O71BxY6ByfMDRhBytzknj9yGUPVJ1qIKhRlAwO1AovA==", + "license": "MIT" + }, + "node_modules/@webassemblyjs/helper-api-error": { + "version": "1.13.2", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.13.2.tgz", + "integrity": "sha512-U56GMYxy4ZQCbDZd6JuvvNV/WFildOjsaWD3Tzzvmw/mas3cXzRJPMjP83JqEsgSbyrmaGjBfDtV7KDXV9UzFQ==", + "license": "MIT" + }, + "node_modules/@webassemblyjs/helper-buffer": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.14.1.tgz", + "integrity": "sha512-jyH7wtcHiKssDtFPRB+iQdxlDf96m0E39yb0k5uJVhFGleZFoNw1c4aeIcVUPPbXUVJ94wwnMOAqUHyzoEPVMA==", + "license": "MIT" + }, + "node_modules/@webassemblyjs/helper-numbers": { + "version": "1.13.2", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-numbers/-/helper-numbers-1.13.2.tgz", + "integrity": "sha512-FE8aCmS5Q6eQYcV3gI35O4J789wlQA+7JrqTTpJqn5emA4U2hvwJmvFRC0HODS+3Ye6WioDklgd6scJ3+PLnEA==", + "license": "MIT", + "dependencies": { + "@webassemblyjs/floating-point-hex-parser": "1.13.2", + "@webassemblyjs/helper-api-error": "1.13.2", + "@xtuc/long": "4.2.2" + } + }, + "node_modules/@webassemblyjs/helper-wasm-bytecode": { + "version": "1.13.2", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.13.2.tgz", + "integrity": "sha512-3QbLKy93F0EAIXLh0ogEVR6rOubA9AoZ+WRYhNbFyuB70j3dRdwH9g+qXhLAO0kiYGlg3TxDV+I4rQTr/YNXkA==", + "license": "MIT" + }, + "node_modules/@webassemblyjs/helper-wasm-section": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.14.1.tgz", + "integrity": "sha512-ds5mXEqTJ6oxRoqjhWDU83OgzAYjwsCV8Lo/N+oRsNDmx/ZDpqalmrtgOMkHwxsG0iI//3BwWAErYRHtgn0dZw==", + "license": "MIT", + "dependencies": { + "@webassemblyjs/ast": "1.14.1", + "@webassemblyjs/helper-buffer": "1.14.1", + "@webassemblyjs/helper-wasm-bytecode": "1.13.2", + "@webassemblyjs/wasm-gen": "1.14.1" + } + }, + "node_modules/@webassemblyjs/ieee754": { + "version": "1.13.2", + "resolved": "https://registry.npmjs.org/@webassemblyjs/ieee754/-/ieee754-1.13.2.tgz", + "integrity": "sha512-4LtOzh58S/5lX4ITKxnAK2USuNEvpdVV9AlgGQb8rJDHaLeHciwG4zlGr0j/SNWlr7x3vO1lDEsuePvtcDNCkw==", + "license": "MIT", + "dependencies": { + "@xtuc/ieee754": "^1.2.0" + } + }, + "node_modules/@webassemblyjs/leb128": { + "version": "1.13.2", + "resolved": "https://registry.npmjs.org/@webassemblyjs/leb128/-/leb128-1.13.2.tgz", + "integrity": "sha512-Lde1oNoIdzVzdkNEAWZ1dZ5orIbff80YPdHx20mrHwHrVNNTjNr8E3xz9BdpcGqRQbAEa+fkrCb+fRFTl/6sQw==", + "license": "Apache-2.0", + "dependencies": { + "@xtuc/long": "4.2.2" + } + }, + "node_modules/@webassemblyjs/utf8": { + "version": "1.13.2", + "resolved": "https://registry.npmjs.org/@webassemblyjs/utf8/-/utf8-1.13.2.tgz", + "integrity": "sha512-3NQWGjKTASY1xV5m7Hr0iPeXD9+RDobLll3T9d2AO+g3my8xy5peVyjSag4I50mR1bBSN/Ct12lo+R9tJk0NZQ==", + "license": "MIT" + }, + "node_modules/@webassemblyjs/wasm-edit": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.14.1.tgz", + "integrity": "sha512-RNJUIQH/J8iA/1NzlE4N7KtyZNHi3w7at7hDjvRNm5rcUXa00z1vRz3glZoULfJ5mpvYhLybmVcwcjGrC1pRrQ==", + "license": "MIT", + "dependencies": { + "@webassemblyjs/ast": "1.14.1", + "@webassemblyjs/helper-buffer": "1.14.1", + "@webassemblyjs/helper-wasm-bytecode": "1.13.2", + "@webassemblyjs/helper-wasm-section": "1.14.1", + "@webassemblyjs/wasm-gen": "1.14.1", + "@webassemblyjs/wasm-opt": "1.14.1", + "@webassemblyjs/wasm-parser": "1.14.1", + "@webassemblyjs/wast-printer": "1.14.1" + } + }, + "node_modules/@webassemblyjs/wasm-gen": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.14.1.tgz", + "integrity": "sha512-AmomSIjP8ZbfGQhumkNvgC33AY7qtMCXnN6bL2u2Js4gVCg8fp735aEiMSBbDR7UQIj90n4wKAFUSEd0QN2Ukg==", + "license": "MIT", + "dependencies": { + "@webassemblyjs/ast": "1.14.1", + "@webassemblyjs/helper-wasm-bytecode": "1.13.2", + "@webassemblyjs/ieee754": "1.13.2", + "@webassemblyjs/leb128": "1.13.2", + "@webassemblyjs/utf8": "1.13.2" + } + }, + "node_modules/@webassemblyjs/wasm-opt": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.14.1.tgz", + "integrity": "sha512-PTcKLUNvBqnY2U6E5bdOQcSM+oVP/PmrDY9NzowJjislEjwP/C4an2303MCVS2Mg9d3AJpIGdUFIQQWbPds0Sw==", + "license": "MIT", + "dependencies": { + "@webassemblyjs/ast": "1.14.1", + "@webassemblyjs/helper-buffer": "1.14.1", + "@webassemblyjs/wasm-gen": "1.14.1", + "@webassemblyjs/wasm-parser": "1.14.1" + } + }, + "node_modules/@webassemblyjs/wasm-parser": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.14.1.tgz", + "integrity": "sha512-JLBl+KZ0R5qB7mCnud/yyX08jWFw5MsoalJ1pQ4EdFlgj9VdXKGuENGsiCIjegI1W7p91rUlcB/LB5yRJKNTcQ==", + "license": "MIT", + "dependencies": { + "@webassemblyjs/ast": "1.14.1", + "@webassemblyjs/helper-api-error": "1.13.2", + "@webassemblyjs/helper-wasm-bytecode": "1.13.2", + "@webassemblyjs/ieee754": "1.13.2", + "@webassemblyjs/leb128": "1.13.2", + "@webassemblyjs/utf8": "1.13.2" + } + }, + "node_modules/@webassemblyjs/wast-printer": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.14.1.tgz", + "integrity": "sha512-kPSSXE6De1XOR820C90RIo2ogvZG+c3KiHzqUoO/F34Y2shGzesfqv7o57xrxovZJH/MetF5UjroJ/R/3isoiw==", + "license": "MIT", + "dependencies": { + "@webassemblyjs/ast": "1.14.1", + "@xtuc/long": "4.2.2" + } + }, + "node_modules/@xtuc/ieee754": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@xtuc/ieee754/-/ieee754-1.2.0.tgz", + "integrity": "sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA==", + "license": "BSD-3-Clause" + }, + "node_modules/@xtuc/long": { + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/@xtuc/long/-/long-4.2.2.tgz", + "integrity": "sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ==", + "license": "Apache-2.0" + }, + "node_modules/accepts": { + "version": "1.3.8", + "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.8.tgz", + "integrity": "sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==", + "license": "MIT", + "dependencies": { + "mime-types": "~2.1.34", + "negotiator": "0.6.3" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/accepts/node_modules/mime-db": { + "version": "1.52.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", + "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/accepts/node_modules/mime-types": { + "version": "2.1.35", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", + "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", + "license": "MIT", + "dependencies": { + "mime-db": "1.52.0" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/accepts/node_modules/negotiator": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz", + "integrity": "sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/acorn": { + "version": "8.15.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.15.0.tgz", + "integrity": "sha512-NZyJarBfL7nWwIq+FDL6Zp/yHEhePMNnnJ0y3qfieCrmNvYct8uvtiV41UvlSe6apAfk0fY1FbWx+NwfmpvtTg==", + "license": "MIT", + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/acorn-import-phases": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/acorn-import-phases/-/acorn-import-phases-1.0.4.tgz", + "integrity": "sha512-wKmbr/DDiIXzEOiWrTTUcDm24kQ2vGfZQvM2fwg2vXqR5uW6aapr7ObPtj1th32b9u90/Pf4AItvdTh42fBmVQ==", + "license": "MIT", + "engines": { + "node": ">=10.13.0" + }, + "peerDependencies": { + "acorn": "^8.14.0" + } + }, + "node_modules/acorn-jsx": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", + "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", + "license": "MIT", + "peerDependencies": { + "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" + } + }, + "node_modules/acorn-walk": { + "version": "8.3.4", + "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.3.4.tgz", + "integrity": "sha512-ueEepnujpqee2o5aIYnvHU6C0A42MNdsIDeqy5BydrkuC5R1ZuUFnm27EeFJGoEHJQgn3uleRvmTXaJgfXbt4g==", + "license": "MIT", + "dependencies": { + "acorn": "^8.11.0" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/address": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/address/-/address-1.2.2.tgz", + "integrity": "sha512-4B/qKCfeE/ODUaAUpSwfzazo5x29WD4r3vXiWsB7I2mSDAihwEqKO+g8GELZUQSSAo5e1XTYh3ZVfLyxBc12nA==", + "license": "MIT", + "engines": { + "node": ">= 10.0.0" + } + }, + "node_modules/aggregate-error": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/aggregate-error/-/aggregate-error-3.1.0.tgz", + "integrity": "sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==", + "license": "MIT", + "dependencies": { + "clean-stack": "^2.0.0", + "indent-string": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/ai": { + "version": "5.0.113", + "resolved": "https://registry.npmjs.org/ai/-/ai-5.0.113.tgz", + "integrity": "sha512-26vivpSO/mzZj0k1Si2IpsFspp26ttQICHRySQiMrtWcRd5mnJMX2a8sG28vmZ38C+JUn1cWmfZrsLMxkSMw9g==", + "license": "Apache-2.0", + "dependencies": { + "@ai-sdk/gateway": "2.0.21", + "@ai-sdk/provider": "2.0.0", + "@ai-sdk/provider-utils": "3.0.19", + "@opentelemetry/api": "1.9.0" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "zod": "^3.25.76 || ^4.1.8" + } + }, + "node_modules/ajv": { + "version": "8.17.1", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.17.1.tgz", + "integrity": "sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g==", + "license": "MIT", + "dependencies": { + "fast-deep-equal": "^3.1.3", + "fast-uri": "^3.0.1", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/ajv-formats": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ajv-formats/-/ajv-formats-2.1.1.tgz", + "integrity": "sha512-Wx0Kx52hxE7C18hkMEggYlEifqWZtYaRgouJor+WMdPnQyEK13vgEWyVNup7SoeeoLMsr4kf5h6dOW11I15MUA==", + "license": "MIT", + "dependencies": { + "ajv": "^8.0.0" + }, + "peerDependencies": { + "ajv": "^8.0.0" + }, + "peerDependenciesMeta": { + "ajv": { + "optional": true + } + } + }, + "node_modules/ajv-keywords": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-5.1.0.tgz", + "integrity": "sha512-YCS/JNFAUyr5vAuhk1DWm1CBxRHW9LbJ2ozWeemrIqpbsqKjHVxYPyi5GC0rjZIT5JxJ3virVTS8wk4i/Z+krw==", + "license": "MIT", + "dependencies": { + "fast-deep-equal": "^3.1.3" + }, + "peerDependencies": { + "ajv": "^8.8.2" + } + }, + "node_modules/algoliasearch": { + "version": "5.46.0", + "resolved": "https://registry.npmjs.org/algoliasearch/-/algoliasearch-5.46.0.tgz", + "integrity": "sha512-7ML6fa2K93FIfifG3GMWhDEwT5qQzPTmoHKCTvhzGEwdbQ4n0yYUWZlLYT75WllTGJCJtNUI0C1ybN4BCegqvg==", + "license": "MIT", + "dependencies": { + "@algolia/abtesting": "1.12.0", + "@algolia/client-abtesting": "5.46.0", + "@algolia/client-analytics": "5.46.0", + "@algolia/client-common": "5.46.0", + "@algolia/client-insights": "5.46.0", + "@algolia/client-personalization": "5.46.0", + "@algolia/client-query-suggestions": "5.46.0", + "@algolia/client-search": "5.46.0", + "@algolia/ingestion": "1.46.0", + "@algolia/monitoring": "1.46.0", + "@algolia/recommend": "5.46.0", + "@algolia/requester-browser-xhr": "5.46.0", + "@algolia/requester-fetch": "5.46.0", + "@algolia/requester-node-http": "5.46.0" + }, + "engines": { + "node": ">= 14.0.0" + } + }, + "node_modules/algoliasearch-helper": { + "version": "3.26.1", + "resolved": "https://registry.npmjs.org/algoliasearch-helper/-/algoliasearch-helper-3.26.1.tgz", + "integrity": "sha512-CAlCxm4fYBXtvc5MamDzP6Svu8rW4z9me4DCBY1rQ2UDJ0u0flWmusQ8M3nOExZsLLRcUwUPoRAPMrhzOG3erw==", + "license": "MIT", + "dependencies": { + "@algolia/events": "^4.0.1" + }, + "peerDependencies": { + "algoliasearch": ">= 3.1 < 6" + } + }, + "node_modules/ansi-align": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/ansi-align/-/ansi-align-3.0.1.tgz", + "integrity": "sha512-IOfwwBF5iczOjp/WeY4YxyjqAFMQoZufdQWDd19SEExbVLNXqvpzSJ/M7Za4/sCPmQ0+GRquoA7bGcINcxew6w==", + "license": "ISC", + "dependencies": { + "string-width": "^4.1.0" + } + }, + "node_modules/ansi-align/node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "license": "MIT" + }, + "node_modules/ansi-align/node_modules/string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "license": "MIT", + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/ansi-escapes": { + "version": "4.3.2", + "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.2.tgz", + "integrity": "sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==", + "license": "MIT", + "dependencies": { + "type-fest": "^0.21.3" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/ansi-escapes/node_modules/type-fest": { + "version": "0.21.3", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.21.3.tgz", + "integrity": "sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==", + "license": "(MIT OR CC0-1.0)", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/ansi-html-community": { + "version": "0.0.8", + "resolved": "https://registry.npmjs.org/ansi-html-community/-/ansi-html-community-0.0.8.tgz", + "integrity": "sha512-1APHAyr3+PCamwNw3bXCPp4HFLONZt/yIH0sZp0/469KWNTEy+qN5jQ3GVX6DMZ1UXAi34yVwtTeaG/HpBuuzw==", + "engines": [ + "node >= 0.8.0" + ], + "license": "Apache-2.0", + "bin": { + "ansi-html": "bin/ansi-html" + } + }, + "node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "license": "MIT", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/anymatch": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz", + "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==", + "license": "ISC", + "dependencies": { + "normalize-path": "^3.0.0", + "picomatch": "^2.0.4" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/arg": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/arg/-/arg-5.0.2.tgz", + "integrity": "sha512-PYjyFOLKQ9y57JvQ6QLo8dAgNqswh8M1RMJYdQduT6xbWSgK36P/Z/v+p888pM69jMMfS8Xd8F6I1kQ/I9HUGg==", + "license": "MIT" + }, + "node_modules/argparse": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", + "license": "Python-2.0" + }, + "node_modules/array-flatten": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", + "integrity": "sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg==", + "license": "MIT" + }, + "node_modules/array-union": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", + "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/astring": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/astring/-/astring-1.9.0.tgz", + "integrity": "sha512-LElXdjswlqjWrPpJFg1Fx4wpkOCxj1TDHlSV4PlaRxHGWko024xICaa97ZkMfs6DRKlCguiAI+rbXv5GWwXIkg==", + "license": "MIT", + "bin": { + "astring": "bin/astring" + } + }, + "node_modules/autoprefixer": { + "version": "10.4.23", + "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.4.23.tgz", + "integrity": "sha512-YYTXSFulfwytnjAPlw8QHncHJmlvFKtczb8InXaAx9Q0LbfDnfEYDE55omerIJKihhmU61Ft+cAOSzQVaBUmeA==", + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/autoprefixer" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "dependencies": { + "browserslist": "^4.28.1", + "caniuse-lite": "^1.0.30001760", + "fraction.js": "^5.3.4", + "picocolors": "^1.1.1", + "postcss-value-parser": "^4.2.0" + }, + "bin": { + "autoprefixer": "bin/autoprefixer" + }, + "engines": { + "node": "^10 || ^12 || >=14" + }, + "peerDependencies": { + "postcss": "^8.1.0" + } + }, + "node_modules/babel-loader": { + "version": "9.2.1", + "resolved": "https://registry.npmjs.org/babel-loader/-/babel-loader-9.2.1.tgz", + "integrity": "sha512-fqe8naHt46e0yIdkjUZYqddSXfej3AHajX+CSO5X7oy0EmPc6o5Xh+RClNoHjnieWz9AW4kZxW9yyFMhVB1QLA==", + "license": "MIT", + "dependencies": { + "find-cache-dir": "^4.0.0", + "schema-utils": "^4.0.0" + }, + "engines": { + "node": ">= 14.15.0" + }, + "peerDependencies": { + "@babel/core": "^7.12.0", + "webpack": ">=5" + } + }, + "node_modules/babel-plugin-dynamic-import-node": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/babel-plugin-dynamic-import-node/-/babel-plugin-dynamic-import-node-2.3.3.tgz", + "integrity": "sha512-jZVI+s9Zg3IqA/kdi0i6UDCybUI3aSBLnglhYbSSjKlV7yF1F/5LWv8MakQmvYpnbJDS6fcBL2KzHSxNCMtWSQ==", + "license": "MIT", + "dependencies": { + "object.assign": "^4.1.0" + } + }, + "node_modules/babel-plugin-polyfill-corejs2": { + "version": "0.4.14", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.4.14.tgz", + "integrity": "sha512-Co2Y9wX854ts6U8gAAPXfn0GmAyctHuK8n0Yhfjd6t30g7yvKjspvvOo9yG+z52PZRgFErt7Ka2pYnXCjLKEpg==", + "license": "MIT", + "dependencies": { + "@babel/compat-data": "^7.27.7", + "@babel/helper-define-polyfill-provider": "^0.6.5", + "semver": "^6.3.1" + }, + "peerDependencies": { + "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" + } + }, + "node_modules/babel-plugin-polyfill-corejs2/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/babel-plugin-polyfill-corejs3": { + "version": "0.13.0", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.13.0.tgz", + "integrity": "sha512-U+GNwMdSFgzVmfhNm8GJUX88AadB3uo9KpJqS3FaqNIPKgySuvMb+bHPsOmmuWyIcuqZj/pzt1RUIUZns4y2+A==", + "license": "MIT", + "dependencies": { + "@babel/helper-define-polyfill-provider": "^0.6.5", + "core-js-compat": "^3.43.0" + }, + "peerDependencies": { + "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" + } + }, + "node_modules/babel-plugin-polyfill-regenerator": { + "version": "0.6.5", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.6.5.tgz", + "integrity": "sha512-ISqQ2frbiNU9vIJkzg7dlPpznPZ4jOiUQ1uSmB0fEHeowtN3COYRsXr/xexn64NpU13P06jc/L5TgiJXOgrbEg==", + "license": "MIT", + "dependencies": { + "@babel/helper-define-polyfill-provider": "^0.6.5" + }, + "peerDependencies": { + "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" + } + }, + "node_modules/bail": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/bail/-/bail-2.0.2.tgz", + "integrity": "sha512-0xO6mYd7JB2YesxDKplafRpsiOzPt9V02ddPCLbY1xYGPOX24NTyN50qnUxgCPcSoYMhKpAuBTjQoRZCAkUDRw==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/balanced-match": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", + "license": "MIT" + }, + "node_modules/baseline-browser-mapping": { + "version": "2.9.7", + "resolved": "https://registry.npmjs.org/baseline-browser-mapping/-/baseline-browser-mapping-2.9.7.tgz", + "integrity": "sha512-k9xFKplee6KIio3IDbwj+uaCLpqzOwakOgmqzPezM0sFJlFKcg30vk2wOiAJtkTSfx0SSQDSe8q+mWA/fSH5Zg==", + "license": "Apache-2.0", + "bin": { + "baseline-browser-mapping": "dist/cli.js" + } + }, + "node_modules/batch": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/batch/-/batch-0.6.1.tgz", + "integrity": "sha512-x+VAiMRL6UPkx+kudNvxTl6hB2XNNCG2r+7wixVfIYwu/2HKRXimwQyaumLjMveWvT2Hkd/cAJw+QBMfJ/EKVw==", + "license": "MIT" + }, + "node_modules/big.js": { + "version": "5.2.2", + "resolved": "https://registry.npmjs.org/big.js/-/big.js-5.2.2.tgz", + "integrity": "sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ==", + "license": "MIT", + "engines": { + "node": "*" + } + }, + "node_modules/binary-extensions": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.3.0.tgz", + "integrity": "sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==", + "license": "MIT", + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/body-parser": { + "version": "1.20.4", + "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.4.tgz", + "integrity": "sha512-ZTgYYLMOXY9qKU/57FAo8F+HA2dGX7bqGc71txDRC1rS4frdFI5R7NhluHxH6M0YItAP0sHB4uqAOcYKxO6uGA==", + "license": "MIT", + "dependencies": { + "bytes": "~3.1.2", + "content-type": "~1.0.5", + "debug": "2.6.9", + "depd": "2.0.0", + "destroy": "~1.2.0", + "http-errors": "~2.0.1", + "iconv-lite": "~0.4.24", + "on-finished": "~2.4.1", + "qs": "~6.14.0", + "raw-body": "~2.5.3", + "type-is": "~1.6.18", + "unpipe": "~1.0.0" + }, + "engines": { + "node": ">= 0.8", + "npm": "1.2.8000 || >= 1.4.16" + } + }, + "node_modules/body-parser/node_modules/bytes": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", + "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==", + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/body-parser/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "license": "MIT", + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/body-parser/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "license": "MIT" + }, + "node_modules/bonjour-service": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/bonjour-service/-/bonjour-service-1.3.0.tgz", + "integrity": "sha512-3YuAUiSkWykd+2Azjgyxei8OWf8thdn8AITIog2M4UICzoqfjlqr64WIjEXZllf/W6vK1goqleSR6brGomxQqA==", + "license": "MIT", + "dependencies": { + "fast-deep-equal": "^3.1.3", + "multicast-dns": "^7.2.5" + } + }, + "node_modules/boolbase": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz", + "integrity": "sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==", + "license": "ISC" + }, + "node_modules/boxen": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/boxen/-/boxen-6.2.1.tgz", + "integrity": "sha512-H4PEsJXfFI/Pt8sjDWbHlQPx4zL/bvSQjcilJmaulGt5mLDorHOHpmdXAJcBcmru7PhYSp/cDMWRko4ZUMFkSw==", + "license": "MIT", + "dependencies": { + "ansi-align": "^3.0.1", + "camelcase": "^6.2.0", + "chalk": "^4.1.2", + "cli-boxes": "^3.0.0", + "string-width": "^5.0.1", + "type-fest": "^2.5.0", + "widest-line": "^4.0.1", + "wrap-ansi": "^8.0.1" + }, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/brace-expansion": { + "version": "1.1.12", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.12.tgz", + "integrity": "sha512-9T9UjW3r0UW5c1Q7GTwllptXwhvYmEzFhzMfZ9H7FQWt+uZePjZPjBP/W1ZEyZ1twGWom5/56TF4lPcqjnDHcg==", + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/braces": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz", + "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==", + "license": "MIT", + "dependencies": { + "fill-range": "^7.1.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/browserslist": { + "version": "4.28.1", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.28.1.tgz", + "integrity": "sha512-ZC5Bd0LgJXgwGqUknZY/vkUQ04r8NXnJZ3yYi4vDmSiZmC/pdSN0NbNRPxZpbtO4uAfDUAFffO8IZoM3Gj8IkA==", + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/browserslist" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "dependencies": { + "baseline-browser-mapping": "^2.9.0", + "caniuse-lite": "^1.0.30001759", + "electron-to-chromium": "^1.5.263", + "node-releases": "^2.0.27", + "update-browserslist-db": "^1.2.0" + }, + "bin": { + "browserslist": "cli.js" + }, + "engines": { + "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" + } + }, + "node_modules/buffer-from": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", + "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==", + "license": "MIT" + }, + "node_modules/bundle-name": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/bundle-name/-/bundle-name-4.1.0.tgz", + "integrity": "sha512-tjwM5exMg6BGRI+kNmTntNsvdZS1X8BFYS6tnJ2hdH0kVxM6/eVZ2xy+FqStSWvYmtfFMDLIxurorHwDKfDz5Q==", + "license": "MIT", + "dependencies": { + "run-applescript": "^7.0.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/bytes": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.0.0.tgz", + "integrity": "sha512-pMhOfFDPiv9t5jjIXkHosWmkSyQbvsgEVNkz0ERHbuLh2T/7j4Mqqpz523Fe8MVY89KC6Sh/QfS2sM+SjgFDcw==", + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/cacheable-lookup": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/cacheable-lookup/-/cacheable-lookup-7.0.0.tgz", + "integrity": "sha512-+qJyx4xiKra8mZrcwhjMRMUhD5NR1R8esPkzIYxX96JiecFoxAXFuz/GpR3+ev4PE1WamHip78wV0vcmPQtp8w==", + "license": "MIT", + "engines": { + "node": ">=14.16" + } + }, + "node_modules/cacheable-request": { + "version": "10.2.14", + "resolved": "https://registry.npmjs.org/cacheable-request/-/cacheable-request-10.2.14.tgz", + "integrity": "sha512-zkDT5WAF4hSSoUgyfg5tFIxz8XQK+25W/TLVojJTMKBaxevLBBtLxgqguAuVQB8PVW79FVjHcU+GJ9tVbDZ9mQ==", + "license": "MIT", + "dependencies": { + "@types/http-cache-semantics": "^4.0.2", + "get-stream": "^6.0.1", + "http-cache-semantics": "^4.1.1", + "keyv": "^4.5.3", + "mimic-response": "^4.0.0", + "normalize-url": "^8.0.0", + "responselike": "^3.0.0" + }, + "engines": { + "node": ">=14.16" + } + }, + "node_modules/call-bind": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.8.tgz", + "integrity": "sha512-oKlSFMcMwpUg2ednkhQ454wfWiU/ul3CkJe/PEHcTKuiX6RpbehUiFMXu13HalGZxfUwCQzZG747YXBn1im9ww==", + "license": "MIT", + "dependencies": { + "call-bind-apply-helpers": "^1.0.0", + "es-define-property": "^1.0.0", + "get-intrinsic": "^1.2.4", + "set-function-length": "^1.2.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/call-bind-apply-helpers": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/call-bind-apply-helpers/-/call-bind-apply-helpers-1.0.2.tgz", + "integrity": "sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ==", + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "function-bind": "^1.1.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/call-bound": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/call-bound/-/call-bound-1.0.4.tgz", + "integrity": "sha512-+ys997U96po4Kx/ABpBCqhA9EuxJaQWDQg7295H4hBphv3IZg0boBKuwYpt4YXp6MZ5AmZQnU/tyMTlRpaSejg==", + "license": "MIT", + "dependencies": { + "call-bind-apply-helpers": "^1.0.2", + "get-intrinsic": "^1.3.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/callsites": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", + "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/camel-case": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/camel-case/-/camel-case-4.1.2.tgz", + "integrity": "sha512-gxGWBrTT1JuMx6R+o5PTXMmUnhnVzLQ9SNutD4YqKtI6ap897t3tKECYla6gCWEkplXnlNybEkZg9GEGxKFCgw==", + "license": "MIT", + "dependencies": { + "pascal-case": "^3.1.2", + "tslib": "^2.0.3" + } + }, + "node_modules/camelcase": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz", + "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==", + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/caniuse-api": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/caniuse-api/-/caniuse-api-3.0.0.tgz", + "integrity": "sha512-bsTwuIg/BZZK/vreVTYYbSWoe2F+71P7K5QGEX+pT250DZbfU1MQ5prOKpPR+LL6uWKK3KMwMCAS74QB3Um1uw==", + "license": "MIT", + "dependencies": { + "browserslist": "^4.0.0", + "caniuse-lite": "^1.0.0", + "lodash.memoize": "^4.1.2", + "lodash.uniq": "^4.5.0" + } + }, + "node_modules/caniuse-lite": { + "version": "1.0.30001760", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001760.tgz", + "integrity": "sha512-7AAMPcueWELt1p3mi13HR/LHH0TJLT11cnwDJEs3xA4+CK/PLKeO9Kl1oru24htkyUKtkGCvAx4ohB0Ttry8Dw==", + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/caniuse-lite" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "CC-BY-4.0" + }, + "node_modules/ccount": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/ccount/-/ccount-2.0.1.tgz", + "integrity": "sha512-eyrF0jiFpY+3drT6383f1qhkbGsLSifNAjA61IUjZjmLCWjItY6LB9ft9YhoDgwfmclB2zhu51Lc7+95b8NRAg==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/char-regex": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/char-regex/-/char-regex-1.0.2.tgz", + "integrity": "sha512-kWWXztvZ5SBQV+eRgKFeh8q5sLuZY2+8WUIzlxWVTg+oGwY14qylx1KbKzHd8P6ZYkAg0xyIDU9JMHhyJMZ1jw==", + "license": "MIT", + "engines": { + "node": ">=10" + } + }, + "node_modules/character-entities": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/character-entities/-/character-entities-2.0.2.tgz", + "integrity": "sha512-shx7oQ0Awen/BRIdkjkvz54PnEEI/EjwXDSIZp86/KKdbafHh1Df/RYGBhn4hbe2+uKC9FnT5UCEdyPz3ai9hQ==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/character-entities-html4": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/character-entities-html4/-/character-entities-html4-2.1.0.tgz", + "integrity": "sha512-1v7fgQRj6hnSwFpq1Eu0ynr/CDEw0rXo2B61qXrLNdHZmPKgb7fqS1a2JwF0rISo9q77jDI8VMEHoApn8qDoZA==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/character-entities-legacy": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/character-entities-legacy/-/character-entities-legacy-3.0.0.tgz", + "integrity": "sha512-RpPp0asT/6ufRm//AJVwpViZbGM/MkjQFxJccQRHmISF/22NBtsHqAWmL+/pmkPWoIUJdWyeVleTl1wydHATVQ==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/character-reference-invalid": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/character-reference-invalid/-/character-reference-invalid-2.0.1.tgz", + "integrity": "sha512-iBZ4F4wRbyORVsu0jPV7gXkOsGYjGHPmAyv+HiHG8gi5PtC9KI2j1+v8/tlibRvjoWX027ypmG/n0HtO5t7unw==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/cheerio": { + "version": "1.0.0-rc.12", + "resolved": "https://registry.npmjs.org/cheerio/-/cheerio-1.0.0-rc.12.tgz", + "integrity": "sha512-VqR8m68vM46BNnuZ5NtnGBKIE/DfN0cRIzg9n40EIq9NOv90ayxLBXA8fXC5gquFRGJSTRqBq25Jt2ECLR431Q==", + "license": "MIT", + "dependencies": { + "cheerio-select": "^2.1.0", + "dom-serializer": "^2.0.0", + "domhandler": "^5.0.3", + "domutils": "^3.0.1", + "htmlparser2": "^8.0.1", + "parse5": "^7.0.0", + "parse5-htmlparser2-tree-adapter": "^7.0.0" + }, + "engines": { + "node": ">= 6" + }, + "funding": { + "url": "https://github.com/cheeriojs/cheerio?sponsor=1" + } + }, + "node_modules/cheerio-select": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/cheerio-select/-/cheerio-select-2.1.0.tgz", + "integrity": "sha512-9v9kG0LvzrlcungtnJtpGNxY+fzECQKhK4EGJX2vByejiMX84MFNQw4UxPJl3bFbTMw+Dfs37XaIkCwTZfLh4g==", + "license": "BSD-2-Clause", + "dependencies": { + "boolbase": "^1.0.0", + "css-select": "^5.1.0", + "css-what": "^6.1.0", + "domelementtype": "^2.3.0", + "domhandler": "^5.0.3", + "domutils": "^3.0.1" + }, + "funding": { + "url": "https://github.com/sponsors/fb55" + } + }, + "node_modules/chokidar": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.6.0.tgz", + "integrity": "sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==", + "license": "MIT", + "dependencies": { + "anymatch": "~3.1.2", + "braces": "~3.0.2", + "glob-parent": "~5.1.2", + "is-binary-path": "~2.1.0", + "is-glob": "~4.0.1", + "normalize-path": "~3.0.0", + "readdirp": "~3.6.0" + }, + "engines": { + "node": ">= 8.10.0" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + }, + "optionalDependencies": { + "fsevents": "~2.3.2" + } + }, + "node_modules/chrome-trace-event": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/chrome-trace-event/-/chrome-trace-event-1.0.4.tgz", + "integrity": "sha512-rNjApaLzuwaOTjCiT8lSDdGN1APCiqkChLMJxJPWLunPAt5fy8xgU9/jNOchV84wfIxrA0lRQB7oCT8jrn/wrQ==", + "license": "MIT", + "engines": { + "node": ">=6.0" + } + }, + "node_modules/ci-info": { + "version": "3.9.0", + "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.9.0.tgz", + "integrity": "sha512-NIxF55hv4nSqQswkAeiOi1r83xy8JldOFDTWiug55KBu9Jnblncd2U6ViHmYgHf01TPZS77NJBhBMKdWj9HQMQ==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/sibiraj-s" + } + ], + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/clean-css": { + "version": "5.3.3", + "resolved": "https://registry.npmjs.org/clean-css/-/clean-css-5.3.3.tgz", + "integrity": "sha512-D5J+kHaVb/wKSFcyyV75uCn8fiY4sV38XJoe4CUyGQ+mOU/fMVYUdH1hJC+CJQ5uY3EnW27SbJYS4X8BiLrAFg==", + "license": "MIT", + "dependencies": { + "source-map": "~0.6.0" + }, + "engines": { + "node": ">= 10.0" + } + }, + "node_modules/clean-css/node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/clean-stack": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-2.2.0.tgz", + "integrity": "sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/cli-boxes": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/cli-boxes/-/cli-boxes-3.0.0.tgz", + "integrity": "sha512-/lzGpEWL/8PfI0BmBOPRwp0c/wFNX1RdUML3jK/RcSBA9T8mZDdQpqYBKtCFTOfQbwPqWEOpjqW+Fnayc0969g==", + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/cli-table3": { + "version": "0.6.5", + "resolved": "https://registry.npmjs.org/cli-table3/-/cli-table3-0.6.5.tgz", + "integrity": "sha512-+W/5efTR7y5HRD7gACw9yQjqMVvEMLBHmboM/kPWam+H+Hmyrgjh6YncVKK122YZkXrLudzTuAukUw9FnMf7IQ==", + "license": "MIT", + "dependencies": { + "string-width": "^4.2.0" + }, + "engines": { + "node": "10.* || >= 12.*" + }, + "optionalDependencies": { + "@colors/colors": "1.5.0" + } + }, + "node_modules/cli-table3/node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "license": "MIT" + }, + "node_modules/cli-table3/node_modules/string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "license": "MIT", + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/clone-deep": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/clone-deep/-/clone-deep-4.0.1.tgz", + "integrity": "sha512-neHB9xuzh/wk0dIHweyAXv2aPGZIVk3pLMe+/RNzINf17fe0OG96QroktYAUm7SM1PBnzTabaLboqqxDyMU+SQ==", + "license": "MIT", + "dependencies": { + "is-plain-object": "^2.0.4", + "kind-of": "^6.0.2", + "shallow-clone": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/clsx": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/clsx/-/clsx-2.1.1.tgz", + "integrity": "sha512-eYm0QWBtUrBWZWG0d386OGAw16Z995PiOVo2B7bjWSbHedGl5e0ZWaq65kOGgUSNesEIDkB9ISbTg/JK9dhCZA==", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/collapse-white-space": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/collapse-white-space/-/collapse-white-space-2.1.0.tgz", + "integrity": "sha512-loKTxY1zCOuG4j9f6EPnuyyYkf58RnhhWTvRoZEokgB+WbdXehfjFviyOVYkqzEWz1Q5kRiZdBYS5SwxbQYwzw==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "license": "MIT", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "license": "MIT" + }, + "node_modules/colord": { + "version": "2.9.3", + "resolved": "https://registry.npmjs.org/colord/-/colord-2.9.3.tgz", + "integrity": "sha512-jeC1axXpnb0/2nn/Y1LPuLdgXBLH7aDcHu4KEKfqw3CUhX7ZpfBSlPKyqXE6btIgEzfWtrX3/tyBCaCvXvMkOw==", + "license": "MIT" + }, + "node_modules/colorette": { + "version": "2.0.20", + "resolved": "https://registry.npmjs.org/colorette/-/colorette-2.0.20.tgz", + "integrity": "sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w==", + "license": "MIT" + }, + "node_modules/combine-promises": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/combine-promises/-/combine-promises-1.2.0.tgz", + "integrity": "sha512-VcQB1ziGD0NXrhKxiwyNbCDmRzs/OShMs2GqW2DlU2A/Sd0nQxE1oWDAE5O0ygSx5mgQOn9eIFh7yKPgFRVkPQ==", + "license": "MIT", + "engines": { + "node": ">=10" + } + }, + "node_modules/comma-separated-tokens": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/comma-separated-tokens/-/comma-separated-tokens-2.0.3.tgz", + "integrity": "sha512-Fu4hJdvzeylCfQPp9SGWidpzrMs7tTrlu6Vb8XGaRGck8QSNZJJp538Wrb60Lax4fPwR64ViY468OIUTbRlGZg==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/commander": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-5.1.0.tgz", + "integrity": "sha512-P0CysNDQ7rtVw4QIQtm+MRxV66vKFSvlsQvGYXZWR3qFU0jlMKHZZZgw8e+8DSah4UDKMqnknRDQz+xuQXQ/Zg==", + "license": "MIT", + "engines": { + "node": ">= 6" + } + }, + "node_modules/common-path-prefix": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/common-path-prefix/-/common-path-prefix-3.0.0.tgz", + "integrity": "sha512-QE33hToZseCH3jS0qN96O/bSh3kaw/h+Tq7ngyY9eWDUnTlTNUyqfqvCXioLe5Na5jFsL78ra/wuBU4iuEgd4w==", + "license": "ISC" + }, + "node_modules/compressible": { + "version": "2.0.18", + "resolved": "https://registry.npmjs.org/compressible/-/compressible-2.0.18.tgz", + "integrity": "sha512-AF3r7P5dWxL8MxyITRMlORQNaOA2IkAFaTr4k7BUumjPtRpGDTZpl0Pb1XCO6JeDCBdp126Cgs9sMxqSjgYyRg==", + "license": "MIT", + "dependencies": { + "mime-db": ">= 1.43.0 < 2" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/compressible/node_modules/mime-db": { + "version": "1.54.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.54.0.tgz", + "integrity": "sha512-aU5EJuIN2WDemCcAp2vFBfp/m4EAhWJnUNSSw0ixs7/kXbd6Pg64EmwJkNdFhB8aWt1sH2CTXrLxo/iAGV3oPQ==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/compression": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/compression/-/compression-1.8.1.tgz", + "integrity": "sha512-9mAqGPHLakhCLeNyxPkK4xVo746zQ/czLH1Ky+vkitMnWfWZps8r0qXuwhwizagCRttsL4lfG4pIOvaWLpAP0w==", + "license": "MIT", + "dependencies": { + "bytes": "3.1.2", + "compressible": "~2.0.18", + "debug": "2.6.9", + "negotiator": "~0.6.4", + "on-headers": "~1.1.0", + "safe-buffer": "5.2.1", + "vary": "~1.1.2" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/compression/node_modules/bytes": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", + "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==", + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/compression/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "license": "MIT", + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/compression/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "license": "MIT" + }, + "node_modules/concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", + "license": "MIT" + }, + "node_modules/config-chain": { + "version": "1.1.13", + "resolved": "https://registry.npmjs.org/config-chain/-/config-chain-1.1.13.tgz", + "integrity": "sha512-qj+f8APARXHrM0hraqXYb2/bOVSV4PvJQlNZ/DVj0QrmNM2q2euizkeuVckQ57J+W0mRH6Hvi+k50M4Jul2VRQ==", + "license": "MIT", + "dependencies": { + "ini": "^1.3.4", + "proto-list": "~1.2.1" + } + }, + "node_modules/config-chain/node_modules/ini": { + "version": "1.3.8", + "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz", + "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==", + "license": "ISC" + }, + "node_modules/configstore": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/configstore/-/configstore-6.0.0.tgz", + "integrity": "sha512-cD31W1v3GqUlQvbBCGcXmd2Nj9SvLDOP1oQ0YFuLETufzSPaKp11rYBsSOm7rCsW3OnIRAFM3OxRhceaXNYHkA==", + "license": "BSD-2-Clause", + "dependencies": { + "dot-prop": "^6.0.1", + "graceful-fs": "^4.2.6", + "unique-string": "^3.0.0", + "write-file-atomic": "^3.0.3", + "xdg-basedir": "^5.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/yeoman/configstore?sponsor=1" + } + }, + "node_modules/connect-history-api-fallback": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/connect-history-api-fallback/-/connect-history-api-fallback-2.0.0.tgz", + "integrity": "sha512-U73+6lQFmfiNPrYbXqr6kZ1i1wiRqXnp2nhMsINseWXO8lDau0LGEffJ8kQi4EjLZympVgRdvqjAgiZ1tgzDDA==", + "license": "MIT", + "engines": { + "node": ">=0.8" + } + }, + "node_modules/consola": { + "version": "3.4.2", + "resolved": "https://registry.npmjs.org/consola/-/consola-3.4.2.tgz", + "integrity": "sha512-5IKcdX0nnYavi6G7TtOhwkYzyjfJlatbjMjuLSfE2kYT5pMDOilZ4OvMhi637CcDICTmz3wARPoyhqyX1Y+XvA==", + "license": "MIT", + "engines": { + "node": "^14.18.0 || >=16.10.0" + } + }, + "node_modules/content-disposition": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.2.tgz", + "integrity": "sha512-kRGRZw3bLlFISDBgwTSA1TMBFN6J6GWDeubmDE3AF+3+yXL8hTWv8r5rkLbqYXY4RjPk/EzHnClI3zQf1cFmHA==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/content-type": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.5.tgz", + "integrity": "sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/convert-source-map": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz", + "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==", + "license": "MIT" + }, + "node_modules/cookie": { + "version": "0.7.2", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.7.2.tgz", + "integrity": "sha512-yki5XnKuf750l50uGTllt6kKILY4nQ1eNIQatoXEByZ5dWgnKqbnqmTrBE5B4N7lrMJKQ2ytWMiTO2o0v6Ew/w==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/cookie-signature": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.7.tgz", + "integrity": "sha512-NXdYc3dLr47pBkpUCHtKSwIOQXLVn8dZEuywboCOJY/osA0wFSLlSawr3KN8qXJEyX66FcONTH8EIlVuK0yyFA==", + "license": "MIT" + }, + "node_modules/copy-webpack-plugin": { + "version": "11.0.0", + "resolved": "https://registry.npmjs.org/copy-webpack-plugin/-/copy-webpack-plugin-11.0.0.tgz", + "integrity": "sha512-fX2MWpamkW0hZxMEg0+mYnA40LTosOSa5TqZ9GYIBzyJa9C3QUaMPSE2xAi/buNr8u89SfD9wHSQVBzrRa/SOQ==", + "license": "MIT", + "dependencies": { + "fast-glob": "^3.2.11", + "glob-parent": "^6.0.1", + "globby": "^13.1.1", + "normalize-path": "^3.0.0", + "schema-utils": "^4.0.0", + "serialize-javascript": "^6.0.0" + }, + "engines": { + "node": ">= 14.15.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "webpack": "^5.1.0" + } + }, + "node_modules/copy-webpack-plugin/node_modules/glob-parent": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", + "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", + "license": "ISC", + "dependencies": { + "is-glob": "^4.0.3" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/copy-webpack-plugin/node_modules/globby": { + "version": "13.2.2", + "resolved": "https://registry.npmjs.org/globby/-/globby-13.2.2.tgz", + "integrity": "sha512-Y1zNGV+pzQdh7H39l9zgB4PJqjRNqydvdYCDG4HFXM4XuvSaQQlEc91IU1yALL8gUTDomgBAfz3XJdmUS+oo0w==", + "license": "MIT", + "dependencies": { + "dir-glob": "^3.0.1", + "fast-glob": "^3.3.0", + "ignore": "^5.2.4", + "merge2": "^1.4.1", + "slash": "^4.0.0" + }, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/copy-webpack-plugin/node_modules/slash": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-4.0.0.tgz", + "integrity": "sha512-3dOsAHXXUkQTpOYcoAxLIorMTp4gIQr5IW3iVb7A7lFIp0VHhnynm9izx6TssdrIcVIESAlVjtnO2K8bg+Coew==", + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/core-js": { + "version": "3.47.0", + "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.47.0.tgz", + "integrity": "sha512-c3Q2VVkGAUyupsjRnaNX6u8Dq2vAdzm9iuPj5FW0fRxzlxgq9Q39MDq10IvmQSpLgHQNyQzQmOo6bgGHmH3NNg==", + "hasInstallScript": true, + "license": "MIT", + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/core-js" + } + }, + "node_modules/core-js-compat": { + "version": "3.47.0", + "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.47.0.tgz", + "integrity": "sha512-IGfuznZ/n7Kp9+nypamBhvwdwLsW6KC8IOaURw2doAK5e98AG3acVLdh0woOnEqCfUtS+Vu882JE4k/DAm3ItQ==", + "license": "MIT", + "dependencies": { + "browserslist": "^4.28.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/core-js" + } + }, + "node_modules/core-js-pure": { + "version": "3.47.0", + "resolved": "https://registry.npmjs.org/core-js-pure/-/core-js-pure-3.47.0.tgz", + "integrity": "sha512-BcxeDbzUrRnXGYIVAGFtcGQVNpFcUhVjr6W7F8XktvQW2iJP9e66GP6xdKotCRFlrxBvNIBrhwKteRXqMV86Nw==", + "hasInstallScript": true, + "license": "MIT", + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/core-js" + } + }, + "node_modules/core-util-is": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz", + "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==", + "license": "MIT" + }, + "node_modules/cosmiconfig": { + "version": "8.3.6", + "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-8.3.6.tgz", + "integrity": "sha512-kcZ6+W5QzcJ3P1Mt+83OUv/oHFqZHIx8DuxG6eZ5RGMERoLqp4BuGjhHLYGK+Kf5XVkQvqBSmAy/nGWN3qDgEA==", + "license": "MIT", + "dependencies": { + "import-fresh": "^3.3.0", + "js-yaml": "^4.1.0", + "parse-json": "^5.2.0", + "path-type": "^4.0.0" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/d-fischer" + }, + "peerDependencies": { + "typescript": ">=4.9.5" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/cross-spawn": { + "version": "7.0.6", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz", + "integrity": "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==", + "license": "MIT", + "dependencies": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/crypto-random-string": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/crypto-random-string/-/crypto-random-string-4.0.0.tgz", + "integrity": "sha512-x8dy3RnvYdlUcPOjkEHqozhiwzKNSq7GcPuXFbnyMOCHxX8V3OgIg/pYuabl2sbUPfIJaeAQB7PMOK8DFIdoRA==", + "license": "MIT", + "dependencies": { + "type-fest": "^1.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/crypto-random-string/node_modules/type-fest": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-1.4.0.tgz", + "integrity": "sha512-yGSza74xk0UG8k+pLh5oeoYirvIiWo5t0/o3zHHAO2tRDiZcxWP7fywNlXhqb6/r6sWvwi+RsyQMWhVLe4BVuA==", + "license": "(MIT OR CC0-1.0)", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/css-blank-pseudo": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/css-blank-pseudo/-/css-blank-pseudo-7.0.1.tgz", + "integrity": "sha512-jf+twWGDf6LDoXDUode+nc7ZlrqfaNphrBIBrcmeP3D8yw1uPaix1gCC8LUQUGQ6CycuK2opkbFFWFuq/a94ag==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "license": "MIT-0", + "dependencies": { + "postcss-selector-parser": "^7.0.0" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "postcss": "^8.4" + } + }, + "node_modules/css-blank-pseudo/node_modules/postcss-selector-parser": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-7.1.1.tgz", + "integrity": "sha512-orRsuYpJVw8LdAwqqLykBj9ecS5/cRHlI5+nvTo8LcCKmzDmqVORXtOIYEEQuL9D4BxtA1lm5isAqzQZCoQ6Eg==", + "license": "MIT", + "dependencies": { + "cssesc": "^3.0.0", + "util-deprecate": "^1.0.2" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/css-declaration-sorter": { + "version": "7.3.0", + "resolved": "https://registry.npmjs.org/css-declaration-sorter/-/css-declaration-sorter-7.3.0.tgz", + "integrity": "sha512-LQF6N/3vkAMYF4xoHLJfG718HRJh34Z8BnNhd6bosOMIVjMlhuZK5++oZa3uYAgrI5+7x2o27gUqTR2U/KjUOQ==", + "license": "ISC", + "engines": { + "node": "^14 || ^16 || >=18" + }, + "peerDependencies": { + "postcss": "^8.0.9" + } + }, + "node_modules/css-has-pseudo": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/css-has-pseudo/-/css-has-pseudo-7.0.3.tgz", + "integrity": "sha512-oG+vKuGyqe/xvEMoxAQrhi7uY16deJR3i7wwhBerVrGQKSqUC5GiOVxTpM9F9B9hw0J+eKeOWLH7E9gZ1Dr5rA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "license": "MIT-0", + "dependencies": { + "@csstools/selector-specificity": "^5.0.0", + "postcss-selector-parser": "^7.0.0", + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "postcss": "^8.4" + } + }, + "node_modules/css-has-pseudo/node_modules/@csstools/selector-specificity": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/@csstools/selector-specificity/-/selector-specificity-5.0.0.tgz", + "integrity": "sha512-PCqQV3c4CoVm3kdPhyeZ07VmBRdH2EpMFA/pd9OASpOEC3aXNGoqPDAZ80D0cLpMBxnmk0+yNhGsEx31hq7Gtw==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "license": "MIT-0", + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "postcss-selector-parser": "^7.0.0" + } + }, + "node_modules/css-has-pseudo/node_modules/postcss-selector-parser": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-7.1.1.tgz", + "integrity": "sha512-orRsuYpJVw8LdAwqqLykBj9ecS5/cRHlI5+nvTo8LcCKmzDmqVORXtOIYEEQuL9D4BxtA1lm5isAqzQZCoQ6Eg==", + "license": "MIT", + "dependencies": { + "cssesc": "^3.0.0", + "util-deprecate": "^1.0.2" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/css-loader": { + "version": "6.11.0", + "resolved": "https://registry.npmjs.org/css-loader/-/css-loader-6.11.0.tgz", + "integrity": "sha512-CTJ+AEQJjq5NzLga5pE39qdiSV56F8ywCIsqNIRF0r7BDgWsN25aazToqAFg7ZrtA/U016xudB3ffgweORxX7g==", + "license": "MIT", + "dependencies": { + "icss-utils": "^5.1.0", + "postcss": "^8.4.33", + "postcss-modules-extract-imports": "^3.1.0", + "postcss-modules-local-by-default": "^4.0.5", + "postcss-modules-scope": "^3.2.0", + "postcss-modules-values": "^4.0.0", + "postcss-value-parser": "^4.2.0", + "semver": "^7.5.4" + }, + "engines": { + "node": ">= 12.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "@rspack/core": "0.x || 1.x", + "webpack": "^5.0.0" + }, + "peerDependenciesMeta": { + "@rspack/core": { + "optional": true + }, + "webpack": { + "optional": true + } + } + }, + "node_modules/css-minimizer-webpack-plugin": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/css-minimizer-webpack-plugin/-/css-minimizer-webpack-plugin-5.0.1.tgz", + "integrity": "sha512-3caImjKFQkS+ws1TGcFn0V1HyDJFq1Euy589JlD6/3rV2kj+w7r5G9WDMgSHvpvXHNZ2calVypZWuEDQd9wfLg==", + "license": "MIT", + "dependencies": { + "@jridgewell/trace-mapping": "^0.3.18", + "cssnano": "^6.0.1", + "jest-worker": "^29.4.3", + "postcss": "^8.4.24", + "schema-utils": "^4.0.1", + "serialize-javascript": "^6.0.1" + }, + "engines": { + "node": ">= 14.15.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "webpack": "^5.0.0" + }, + "peerDependenciesMeta": { + "@parcel/css": { + "optional": true + }, + "@swc/css": { + "optional": true + }, + "clean-css": { + "optional": true + }, + "csso": { + "optional": true + }, + "esbuild": { + "optional": true + }, + "lightningcss": { + "optional": true + } + } + }, + "node_modules/css-prefers-color-scheme": { + "version": "10.0.0", + "resolved": "https://registry.npmjs.org/css-prefers-color-scheme/-/css-prefers-color-scheme-10.0.0.tgz", + "integrity": "sha512-VCtXZAWivRglTZditUfB4StnsWr6YVZ2PRtuxQLKTNRdtAf8tpzaVPE9zXIF3VaSc7O70iK/j1+NXxyQCqdPjQ==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "license": "MIT-0", + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "postcss": "^8.4" + } + }, + "node_modules/css-select": { + "version": "5.2.2", + "resolved": "https://registry.npmjs.org/css-select/-/css-select-5.2.2.tgz", + "integrity": "sha512-TizTzUddG/xYLA3NXodFM0fSbNizXjOKhqiQQwvhlspadZokn1KDy0NZFS0wuEubIYAV5/c1/lAr0TaaFXEXzw==", + "license": "BSD-2-Clause", + "dependencies": { + "boolbase": "^1.0.0", + "css-what": "^6.1.0", + "domhandler": "^5.0.2", + "domutils": "^3.0.1", + "nth-check": "^2.0.1" + }, + "funding": { + "url": "https://github.com/sponsors/fb55" + } + }, + "node_modules/css-tree": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-2.3.1.tgz", + "integrity": "sha512-6Fv1DV/TYw//QF5IzQdqsNDjx/wc8TrMBZsqjL9eW01tWb7R7k/mq+/VXfJCl7SoD5emsJop9cOByJZfs8hYIw==", + "license": "MIT", + "dependencies": { + "mdn-data": "2.0.30", + "source-map-js": "^1.0.1" + }, + "engines": { + "node": "^10 || ^12.20.0 || ^14.13.0 || >=15.0.0" + } + }, + "node_modules/css-what": { + "version": "6.2.2", + "resolved": "https://registry.npmjs.org/css-what/-/css-what-6.2.2.tgz", + "integrity": "sha512-u/O3vwbptzhMs3L1fQE82ZSLHQQfto5gyZzwteVIEyeaY5Fc7R4dapF/BvRoSYFeqfBk4m0V1Vafq5Pjv25wvA==", + "license": "BSD-2-Clause", + "engines": { + "node": ">= 6" + }, + "funding": { + "url": "https://github.com/sponsors/fb55" + } + }, + "node_modules/cssdb": { + "version": "8.5.2", + "resolved": "https://registry.npmjs.org/cssdb/-/cssdb-8.5.2.tgz", + "integrity": "sha512-Pmoj9RmD8RIoIzA2EQWO4D4RMeDts0tgAH0VXdlNdxjuBGI3a9wMOIcUwaPNmD4r2qtIa06gqkIf7sECl+cBCg==", + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + }, + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + } + ], + "license": "MIT-0" + }, + "node_modules/cssesc": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz", + "integrity": "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==", + "license": "MIT", + "bin": { + "cssesc": "bin/cssesc" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/cssnano": { + "version": "6.1.2", + "resolved": "https://registry.npmjs.org/cssnano/-/cssnano-6.1.2.tgz", + "integrity": "sha512-rYk5UeX7VAM/u0lNqewCdasdtPK81CgX8wJFLEIXHbV2oldWRgJAsZrdhRXkV1NJzA2g850KiFm9mMU2HxNxMA==", + "license": "MIT", + "dependencies": { + "cssnano-preset-default": "^6.1.2", + "lilconfig": "^3.1.1" + }, + "engines": { + "node": "^14 || ^16 || >=18.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/cssnano" + }, + "peerDependencies": { + "postcss": "^8.4.31" + } + }, + "node_modules/cssnano-preset-advanced": { + "version": "6.1.2", + "resolved": "https://registry.npmjs.org/cssnano-preset-advanced/-/cssnano-preset-advanced-6.1.2.tgz", + "integrity": "sha512-Nhao7eD8ph2DoHolEzQs5CfRpiEP0xa1HBdnFZ82kvqdmbwVBUr2r1QuQ4t1pi+D1ZpqpcO4T+wy/7RxzJ/WPQ==", + "license": "MIT", + "dependencies": { + "autoprefixer": "^10.4.19", + "browserslist": "^4.23.0", + "cssnano-preset-default": "^6.1.2", + "postcss-discard-unused": "^6.0.5", + "postcss-merge-idents": "^6.0.3", + "postcss-reduce-idents": "^6.0.3", + "postcss-zindex": "^6.0.2" + }, + "engines": { + "node": "^14 || ^16 || >=18.0" + }, + "peerDependencies": { + "postcss": "^8.4.31" + } + }, + "node_modules/cssnano-preset-default": { + "version": "6.1.2", + "resolved": "https://registry.npmjs.org/cssnano-preset-default/-/cssnano-preset-default-6.1.2.tgz", + "integrity": "sha512-1C0C+eNaeN8OcHQa193aRgYexyJtU8XwbdieEjClw+J9d94E41LwT6ivKH0WT+fYwYWB0Zp3I3IZ7tI/BbUbrg==", + "license": "MIT", + "dependencies": { + "browserslist": "^4.23.0", + "css-declaration-sorter": "^7.2.0", + "cssnano-utils": "^4.0.2", + "postcss-calc": "^9.0.1", + "postcss-colormin": "^6.1.0", + "postcss-convert-values": "^6.1.0", + "postcss-discard-comments": "^6.0.2", + "postcss-discard-duplicates": "^6.0.3", + "postcss-discard-empty": "^6.0.3", + "postcss-discard-overridden": "^6.0.2", + "postcss-merge-longhand": "^6.0.5", + "postcss-merge-rules": "^6.1.1", + "postcss-minify-font-values": "^6.1.0", + "postcss-minify-gradients": "^6.0.3", + "postcss-minify-params": "^6.1.0", + "postcss-minify-selectors": "^6.0.4", + "postcss-normalize-charset": "^6.0.2", + "postcss-normalize-display-values": "^6.0.2", + "postcss-normalize-positions": "^6.0.2", + "postcss-normalize-repeat-style": "^6.0.2", + "postcss-normalize-string": "^6.0.2", + "postcss-normalize-timing-functions": "^6.0.2", + "postcss-normalize-unicode": "^6.1.0", + "postcss-normalize-url": "^6.0.2", + "postcss-normalize-whitespace": "^6.0.2", + "postcss-ordered-values": "^6.0.2", + "postcss-reduce-initial": "^6.1.0", + "postcss-reduce-transforms": "^6.0.2", + "postcss-svgo": "^6.0.3", + "postcss-unique-selectors": "^6.0.4" + }, + "engines": { + "node": "^14 || ^16 || >=18.0" + }, + "peerDependencies": { + "postcss": "^8.4.31" + } + }, + "node_modules/cssnano-utils": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/cssnano-utils/-/cssnano-utils-4.0.2.tgz", + "integrity": "sha512-ZR1jHg+wZ8o4c3zqf1SIUSTIvm/9mU343FMR6Obe/unskbvpGhZOo1J6d/r8D1pzkRQYuwbcH3hToOuoA2G7oQ==", + "license": "MIT", + "engines": { + "node": "^14 || ^16 || >=18.0" + }, + "peerDependencies": { + "postcss": "^8.4.31" + } + }, + "node_modules/csso": { + "version": "5.0.5", + "resolved": "https://registry.npmjs.org/csso/-/csso-5.0.5.tgz", + "integrity": "sha512-0LrrStPOdJj+SPCCrGhzryycLjwcgUSHBtxNA8aIDxf0GLsRh1cKYhB00Gd1lDOS4yGH69+SNn13+TWbVHETFQ==", + "license": "MIT", + "dependencies": { + "css-tree": "~2.2.0" + }, + "engines": { + "node": "^10 || ^12.20.0 || ^14.13.0 || >=15.0.0", + "npm": ">=7.0.0" + } + }, + "node_modules/csso/node_modules/css-tree": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-2.2.1.tgz", + "integrity": "sha512-OA0mILzGc1kCOCSJerOeqDxDQ4HOh+G8NbOJFOTgOCzpw7fCBubk0fEyxp8AgOL/jvLgYA/uV0cMbe43ElF1JA==", + "license": "MIT", + "dependencies": { + "mdn-data": "2.0.28", + "source-map-js": "^1.0.1" + }, + "engines": { + "node": "^10 || ^12.20.0 || ^14.13.0 || >=15.0.0", + "npm": ">=7.0.0" + } + }, + "node_modules/csso/node_modules/mdn-data": { + "version": "2.0.28", + "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.28.tgz", + "integrity": "sha512-aylIc7Z9y4yzHYAJNuESG3hfhC+0Ibp/MAMiaOZgNv4pmEdFyfZhhhny4MNiAfWdBQ1RQ2mfDWmM1x8SvGyp8g==", + "license": "CC0-1.0" + }, + "node_modules/csstype": { + "version": "3.2.3", + "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.2.3.tgz", + "integrity": "sha512-z1HGKcYy2xA8AGQfwrn0PAy+PB7X/GSj3UVJW9qKyn43xWa+gl5nXmU4qqLMRzWVLFC8KusUX8T/0kCiOYpAIQ==", + "license": "MIT" + }, + "node_modules/debounce": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/debounce/-/debounce-1.2.1.tgz", + "integrity": "sha512-XRRe6Glud4rd/ZGQfiV1ruXSfbvfJedlV9Y6zOlP+2K04vBYiJEte6stfFkCP03aMnY5tsipamumUjL14fofug==", + "license": "MIT" + }, + "node_modules/debug": { + "version": "4.4.3", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.3.tgz", + "integrity": "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==", + "license": "MIT", + "dependencies": { + "ms": "^2.1.3" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/decode-named-character-reference": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/decode-named-character-reference/-/decode-named-character-reference-1.2.0.tgz", + "integrity": "sha512-c6fcElNV6ShtZXmsgNgFFV5tVX2PaV4g+MOAkb8eXHvn6sryJBrZa9r0zV6+dtTyoCKxtDy5tyQ5ZwQuidtd+Q==", + "license": "MIT", + "dependencies": { + "character-entities": "^2.0.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/decompress-response": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-6.0.0.tgz", + "integrity": "sha512-aW35yZM6Bb/4oJlZncMH2LCoZtJXTRxES17vE3hoRiowU2kWHaJKFkSBDnDR+cm9J+9QhXmREyIfv0pji9ejCQ==", + "license": "MIT", + "dependencies": { + "mimic-response": "^3.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/decompress-response/node_modules/mimic-response": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-3.1.0.tgz", + "integrity": "sha512-z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb064c6Wr4N/wv0DzQTjNzHNGQ==", + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/deep-extend": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz", + "integrity": "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==", + "license": "MIT", + "engines": { + "node": ">=4.0.0" + } + }, + "node_modules/deepmerge": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.3.1.tgz", + "integrity": "sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/default-browser": { + "version": "5.4.0", + "resolved": "https://registry.npmjs.org/default-browser/-/default-browser-5.4.0.tgz", + "integrity": "sha512-XDuvSq38Hr1MdN47EDvYtx3U0MTqpCEn+F6ft8z2vYDzMrvQhVp0ui9oQdqW3MvK3vqUETglt1tVGgjLuJ5izg==", + "license": "MIT", + "dependencies": { + "bundle-name": "^4.1.0", + "default-browser-id": "^5.0.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/default-browser-id": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/default-browser-id/-/default-browser-id-5.0.1.tgz", + "integrity": "sha512-x1VCxdX4t+8wVfd1so/9w+vQ4vx7lKd2Qp5tDRutErwmR85OgmfX7RlLRMWafRMY7hbEiXIbudNrjOAPa/hL8Q==", + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/defer-to-connect": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/defer-to-connect/-/defer-to-connect-2.0.1.tgz", + "integrity": "sha512-4tvttepXG1VaYGrRibk5EwJd1t4udunSOVMdLSAL6mId1ix438oPwPZMALY41FCijukO1L0twNcGsdzS7dHgDg==", + "license": "MIT", + "engines": { + "node": ">=10" + } + }, + "node_modules/define-data-property": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.4.tgz", + "integrity": "sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==", + "license": "MIT", + "dependencies": { + "es-define-property": "^1.0.0", + "es-errors": "^1.3.0", + "gopd": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/define-lazy-prop": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/define-lazy-prop/-/define-lazy-prop-2.0.0.tgz", + "integrity": "sha512-Ds09qNh8yw3khSjiJjiUInaGX9xlqZDY7JVryGxdxV7NPeuqQfplOpQ66yJFZut3jLa5zOwkXw1g9EI2uKh4Og==", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/define-properties": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.2.1.tgz", + "integrity": "sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==", + "license": "MIT", + "dependencies": { + "define-data-property": "^1.0.1", + "has-property-descriptors": "^1.0.0", + "object-keys": "^1.1.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/depd": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", + "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==", + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/dequal": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/dequal/-/dequal-2.0.3.tgz", + "integrity": "sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA==", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/destroy": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.2.0.tgz", + "integrity": "sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==", + "license": "MIT", + "engines": { + "node": ">= 0.8", + "npm": "1.2.8000 || >= 1.4.16" + } + }, + "node_modules/detect-node": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/detect-node/-/detect-node-2.1.0.tgz", + "integrity": "sha512-T0NIuQpnTvFDATNuHN5roPwSBG83rFsuO+MXXH9/3N1eFbn4wcPjttvjMLEPWJ0RGUYgQE7cGgS3tNxbqCGM7g==", + "license": "MIT" + }, + "node_modules/detect-port": { + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/detect-port/-/detect-port-1.6.1.tgz", + "integrity": "sha512-CmnVc+Hek2egPx1PeTFVta2W78xy2K/9Rkf6cC4T59S50tVnzKj+tnx5mmx5lwvCkujZ4uRrpRSuV+IVs3f90Q==", + "license": "MIT", + "dependencies": { + "address": "^1.0.1", + "debug": "4" + }, + "bin": { + "detect": "bin/detect-port.js", + "detect-port": "bin/detect-port.js" + }, + "engines": { + "node": ">= 4.0.0" + } + }, + "node_modules/devlop": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/devlop/-/devlop-1.1.0.tgz", + "integrity": "sha512-RWmIqhcFf1lRYBvNmr7qTNuyCt/7/ns2jbpp1+PalgE/rDQcBT0fioSMUpJ93irlUhC5hrg4cYqe6U+0ImW0rA==", + "license": "MIT", + "dependencies": { + "dequal": "^2.0.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/dir-glob": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", + "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==", + "license": "MIT", + "dependencies": { + "path-type": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/dns-packet": { + "version": "5.6.1", + "resolved": "https://registry.npmjs.org/dns-packet/-/dns-packet-5.6.1.tgz", + "integrity": "sha512-l4gcSouhcgIKRvyy99RNVOgxXiicE+2jZoNmaNmZ6JXiGajBOJAesk1OBlJuM5k2c+eudGdLxDqXuPCKIj6kpw==", + "license": "MIT", + "dependencies": { + "@leichtgewicht/ip-codec": "^2.0.1" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/dom-converter": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/dom-converter/-/dom-converter-0.2.0.tgz", + "integrity": "sha512-gd3ypIPfOMr9h5jIKq8E3sHOTCjeirnl0WK5ZdS1AW0Odt0b1PaWaHdJ4Qk4klv+YB9aJBS7mESXjFoDQPu6DA==", + "license": "MIT", + "dependencies": { + "utila": "~0.4" + } + }, + "node_modules/dom-serializer": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-2.0.0.tgz", + "integrity": "sha512-wIkAryiqt/nV5EQKqQpo3SToSOV9J0DnbJqwK7Wv/Trc92zIAYZ4FlMu+JPFW1DfGFt81ZTCGgDEabffXeLyJg==", + "license": "MIT", + "dependencies": { + "domelementtype": "^2.3.0", + "domhandler": "^5.0.2", + "entities": "^4.2.0" + }, + "funding": { + "url": "https://github.com/cheeriojs/dom-serializer?sponsor=1" + } + }, + "node_modules/domelementtype": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.3.0.tgz", + "integrity": "sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/fb55" + } + ], + "license": "BSD-2-Clause" + }, + "node_modules/domhandler": { + "version": "5.0.3", + "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-5.0.3.tgz", + "integrity": "sha512-cgwlv/1iFQiFnU96XXgROh8xTeetsnJiDsTc7TYCLFd9+/WNkIqPTxiM/8pSd8VIrhXGTf1Ny1q1hquVqDJB5w==", + "license": "BSD-2-Clause", + "dependencies": { + "domelementtype": "^2.3.0" + }, + "engines": { + "node": ">= 4" + }, + "funding": { + "url": "https://github.com/fb55/domhandler?sponsor=1" + } + }, + "node_modules/domutils": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/domutils/-/domutils-3.2.2.tgz", + "integrity": "sha512-6kZKyUajlDuqlHKVX1w7gyslj9MPIXzIFiz/rGu35uC1wMi+kMhQwGhl4lt9unC9Vb9INnY9Z3/ZA3+FhASLaw==", + "license": "BSD-2-Clause", + "dependencies": { + "dom-serializer": "^2.0.0", + "domelementtype": "^2.3.0", + "domhandler": "^5.0.3" + }, + "funding": { + "url": "https://github.com/fb55/domutils?sponsor=1" + } + }, + "node_modules/dot-case": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/dot-case/-/dot-case-3.0.4.tgz", + "integrity": "sha512-Kv5nKlh6yRrdrGvxeJ2e5y2eRUpkUosIW4A2AS38zwSz27zu7ufDwQPi5Jhs3XAlGNetl3bmnGhQsMtkKJnj3w==", + "license": "MIT", + "dependencies": { + "no-case": "^3.0.4", + "tslib": "^2.0.3" + } + }, + "node_modules/dot-prop": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/dot-prop/-/dot-prop-6.0.1.tgz", + "integrity": "sha512-tE7ztYzXHIeyvc7N+hR3oi7FIbf/NIjVP9hmAt3yMXzrQ072/fpjGLx2GxNxGxUl5V73MEqYzioOMoVhGMJ5cA==", + "license": "MIT", + "dependencies": { + "is-obj": "^2.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/dot-prop/node_modules/is-obj": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-obj/-/is-obj-2.0.0.tgz", + "integrity": "sha512-drqDG3cbczxxEJRoOXcOjtdp1J/lyp1mNn0xaznRs8+muBhgQcrnbspox5X5fOw0HnMnbfDzvnEMEtqDEJEo8w==", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/dunder-proto": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/dunder-proto/-/dunder-proto-1.0.1.tgz", + "integrity": "sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==", + "license": "MIT", + "dependencies": { + "call-bind-apply-helpers": "^1.0.1", + "es-errors": "^1.3.0", + "gopd": "^1.2.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/duplexer": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/duplexer/-/duplexer-0.1.2.tgz", + "integrity": "sha512-jtD6YG370ZCIi/9GTaJKQxWTZD045+4R4hTk/x1UyoqadyJ9x9CgSi1RlVDQF8U2sxLLSnFkCaMihqljHIWgMg==", + "license": "MIT" + }, + "node_modules/eastasianwidth": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz", + "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==", + "license": "MIT" + }, + "node_modules/ee-first": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", + "integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==", + "license": "MIT" + }, + "node_modules/electron-to-chromium": { + "version": "1.5.267", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.267.tgz", + "integrity": "sha512-0Drusm6MVRXSOJpGbaSVgcQsuB4hEkMpHXaVstcPmhu5LIedxs1xNK/nIxmQIU/RPC0+1/o0AVZfBTkTNJOdUw==", + "license": "ISC" + }, + "node_modules/emoji-regex": { + "version": "9.2.2", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", + "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==", + "license": "MIT" + }, + "node_modules/emojilib": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/emojilib/-/emojilib-2.4.0.tgz", + "integrity": "sha512-5U0rVMU5Y2n2+ykNLQqMoqklN9ICBT/KsvC1Gz6vqHbz2AXXGkG+Pm5rMWk/8Vjrr/mY9985Hi8DYzn1F09Nyw==", + "license": "MIT" + }, + "node_modules/emojis-list": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/emojis-list/-/emojis-list-3.0.0.tgz", + "integrity": "sha512-/kyM18EfinwXZbno9FyUGeFh87KC8HRQBQGildHZbEuRyWFOmv1U10o9BBp8XVZDVNNuQKyIGIu5ZYAAXJ0V2Q==", + "license": "MIT", + "engines": { + "node": ">= 4" + } + }, + "node_modules/emoticon": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/emoticon/-/emoticon-4.1.0.tgz", + "integrity": "sha512-VWZfnxqwNcc51hIy/sbOdEem6D+cVtpPzEEtVAFdaas30+1dgkyaOQ4sQ6Bp0tOMqWO1v+HQfYaoodOkdhK6SQ==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/encodeurl": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-2.0.0.tgz", + "integrity": "sha512-Q0n9HRi4m6JuGIV1eFlmvJB7ZEVxu93IrMyiMsGC0lrMJMWzRgx6WGquyfQgZVb31vhGgXnfmPNNXmxnOkRBrg==", + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/enhanced-resolve": { + "version": "5.18.4", + "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.18.4.tgz", + "integrity": "sha512-LgQMM4WXU3QI+SYgEc2liRgznaD5ojbmY3sb8LxyguVkIg5FxdpTkvk72te2R38/TGKxH634oLxXRGY6d7AP+Q==", + "license": "MIT", + "dependencies": { + "graceful-fs": "^4.2.4", + "tapable": "^2.2.0" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/entities": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/entities/-/entities-4.5.0.tgz", + "integrity": "sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==", + "license": "BSD-2-Clause", + "engines": { + "node": ">=0.12" + }, + "funding": { + "url": "https://github.com/fb55/entities?sponsor=1" + } + }, + "node_modules/error-ex": { + "version": "1.3.4", + "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.4.tgz", + "integrity": "sha512-sqQamAnR14VgCr1A618A3sGrygcpK+HEbenA/HiEAkkUwcZIIB/tgWqHFxWgOyDh4nB4JCRimh79dR5Ywc9MDQ==", + "license": "MIT", + "dependencies": { + "is-arrayish": "^0.2.1" + } + }, + "node_modules/es-define-property": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.1.tgz", + "integrity": "sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-errors": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz", + "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-module-lexer": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-1.7.0.tgz", + "integrity": "sha512-jEQoCwk8hyb2AZziIOLhDqpm5+2ww5uIE6lkO/6jcOCusfk6LhMHpXXfBLXTZ7Ydyt0j4VoUQv6uGNYbdW+kBA==", + "license": "MIT" + }, + "node_modules/es-object-atoms": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/es-object-atoms/-/es-object-atoms-1.1.1.tgz", + "integrity": "sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA==", + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/esast-util-from-estree": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/esast-util-from-estree/-/esast-util-from-estree-2.0.0.tgz", + "integrity": "sha512-4CyanoAudUSBAn5K13H4JhsMH6L9ZP7XbLVe/dKybkxMO7eDyLsT8UHl9TRNrU2Gr9nz+FovfSIjuXWJ81uVwQ==", + "license": "MIT", + "dependencies": { + "@types/estree-jsx": "^1.0.0", + "devlop": "^1.0.0", + "estree-util-visit": "^2.0.0", + "unist-util-position-from-estree": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/esast-util-from-js": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/esast-util-from-js/-/esast-util-from-js-2.0.1.tgz", + "integrity": "sha512-8Ja+rNJ0Lt56Pcf3TAmpBZjmx8ZcK5Ts4cAzIOjsjevg9oSXJnl6SUQ2EevU8tv3h6ZLWmoKL5H4fgWvdvfETw==", + "license": "MIT", + "dependencies": { + "@types/estree-jsx": "^1.0.0", + "acorn": "^8.0.0", + "esast-util-from-estree": "^2.0.0", + "vfile-message": "^4.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/escalade": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.2.0.tgz", + "integrity": "sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/escape-goat": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/escape-goat/-/escape-goat-4.0.0.tgz", + "integrity": "sha512-2Sd4ShcWxbx6OY1IHyla/CVNwvg7XwZVoXZHcSu9w9SReNP1EzzD5T8NWKIR38fIqEns9kDWKUQTXXAmlDrdPg==", + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/escape-html": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", + "integrity": "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==", + "license": "MIT" + }, + "node_modules/escape-string-regexp": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", + "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/eslint-scope": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", + "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==", + "license": "BSD-2-Clause", + "dependencies": { + "esrecurse": "^4.3.0", + "estraverse": "^4.1.1" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/esprima": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", + "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", + "license": "BSD-2-Clause", + "bin": { + "esparse": "bin/esparse.js", + "esvalidate": "bin/esvalidate.js" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/esrecurse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", + "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", + "license": "BSD-2-Clause", + "dependencies": { + "estraverse": "^5.2.0" + }, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/esrecurse/node_modules/estraverse": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", + "license": "BSD-2-Clause", + "engines": { + "node": ">=4.0" + } + }, + "node_modules/estraverse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", + "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", + "license": "BSD-2-Clause", + "engines": { + "node": ">=4.0" + } + }, + "node_modules/estree-util-attach-comments": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/estree-util-attach-comments/-/estree-util-attach-comments-3.0.0.tgz", + "integrity": "sha512-cKUwm/HUcTDsYh/9FgnuFqpfquUbwIqwKM26BVCGDPVgvaCl/nDCCjUfiLlx6lsEZ3Z4RFxNbOQ60pkaEwFxGw==", + "license": "MIT", + "dependencies": { + "@types/estree": "^1.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/estree-util-build-jsx": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/estree-util-build-jsx/-/estree-util-build-jsx-3.0.1.tgz", + "integrity": "sha512-8U5eiL6BTrPxp/CHbs2yMgP8ftMhR5ww1eIKoWRMlqvltHF8fZn5LRDvTKuxD3DUn+shRbLGqXemcP51oFCsGQ==", + "license": "MIT", + "dependencies": { + "@types/estree-jsx": "^1.0.0", + "devlop": "^1.0.0", + "estree-util-is-identifier-name": "^3.0.0", + "estree-walker": "^3.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/estree-util-is-identifier-name": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/estree-util-is-identifier-name/-/estree-util-is-identifier-name-3.0.0.tgz", + "integrity": "sha512-hFtqIDZTIUZ9BXLb8y4pYGyk6+wekIivNVTcmvk8NoOh+VeRn5y6cEHzbURrWbfp1fIqdVipilzj+lfaadNZmg==", + "license": "MIT", + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/estree-util-scope": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/estree-util-scope/-/estree-util-scope-1.0.0.tgz", + "integrity": "sha512-2CAASclonf+JFWBNJPndcOpA8EMJwa0Q8LUFJEKqXLW6+qBvbFZuF5gItbQOs/umBUkjviCSDCbBwU2cXbmrhQ==", + "license": "MIT", + "dependencies": { + "@types/estree": "^1.0.0", + "devlop": "^1.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/estree-util-to-js": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/estree-util-to-js/-/estree-util-to-js-2.0.0.tgz", + "integrity": "sha512-WDF+xj5rRWmD5tj6bIqRi6CkLIXbbNQUcxQHzGysQzvHmdYG2G7p/Tf0J0gpxGgkeMZNTIjT/AoSvC9Xehcgdg==", + "license": "MIT", + "dependencies": { + "@types/estree-jsx": "^1.0.0", + "astring": "^1.8.0", + "source-map": "^0.7.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/estree-util-value-to-estree": { + "version": "3.5.0", + "resolved": "https://registry.npmjs.org/estree-util-value-to-estree/-/estree-util-value-to-estree-3.5.0.tgz", + "integrity": "sha512-aMV56R27Gv3QmfmF1MY12GWkGzzeAezAX+UplqHVASfjc9wNzI/X6hC0S9oxq61WT4aQesLGslWP9tKk6ghRZQ==", + "license": "MIT", + "dependencies": { + "@types/estree": "^1.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/remcohaszing" + } + }, + "node_modules/estree-util-visit": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/estree-util-visit/-/estree-util-visit-2.0.0.tgz", + "integrity": "sha512-m5KgiH85xAhhW8Wta0vShLcUvOsh3LLPI2YVwcbio1l7E09NTLL1EyMZFM1OyWowoH0skScNbhOPl4kcBgzTww==", + "license": "MIT", + "dependencies": { + "@types/estree-jsx": "^1.0.0", + "@types/unist": "^3.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/estree-walker": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-3.0.3.tgz", + "integrity": "sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g==", + "license": "MIT", + "dependencies": { + "@types/estree": "^1.0.0" + } + }, + "node_modules/esutils": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", + "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", + "license": "BSD-2-Clause", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/eta": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/eta/-/eta-2.2.0.tgz", + "integrity": "sha512-UVQ72Rqjy/ZKQalzV5dCCJP80GrmPrMxh6NlNf+erV6ObL0ZFkhCstWRawS85z3smdr3d2wXPsZEY7rDPfGd2g==", + "license": "MIT", + "engines": { + "node": ">=6.0.0" + }, + "funding": { + "url": "https://github.com/eta-dev/eta?sponsor=1" + } + }, + "node_modules/etag": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", + "integrity": "sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/eval": { + "version": "0.1.8", + "resolved": "https://registry.npmjs.org/eval/-/eval-0.1.8.tgz", + "integrity": "sha512-EzV94NYKoO09GLXGjXj9JIlXijVck4ONSr5wiCWDvhsvj5jxSrzTmRU/9C1DyB6uToszLs8aifA6NQ7lEQdvFw==", + "dependencies": { + "@types/node": "*", + "require-like": ">= 0.1.1" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/eventemitter3": { + "version": "4.0.7", + "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.7.tgz", + "integrity": "sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==", + "license": "MIT" + }, + "node_modules/events": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/events/-/events-3.3.0.tgz", + "integrity": "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==", + "license": "MIT", + "engines": { + "node": ">=0.8.x" + } + }, + "node_modules/eventsource-parser": { + "version": "3.0.6", + "resolved": "https://registry.npmjs.org/eventsource-parser/-/eventsource-parser-3.0.6.tgz", + "integrity": "sha512-Vo1ab+QXPzZ4tCa8SwIHJFaSzy4R6SHf7BY79rFBDf0idraZWAkYrDjDj8uWaSm3S2TK+hJ7/t1CEmZ7jXw+pg==", + "license": "MIT", + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/execa": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz", + "integrity": "sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==", + "license": "MIT", + "dependencies": { + "cross-spawn": "^7.0.3", + "get-stream": "^6.0.0", + "human-signals": "^2.1.0", + "is-stream": "^2.0.0", + "merge-stream": "^2.0.0", + "npm-run-path": "^4.0.1", + "onetime": "^5.1.2", + "signal-exit": "^3.0.3", + "strip-final-newline": "^2.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sindresorhus/execa?sponsor=1" + } + }, + "node_modules/express": { + "version": "4.22.1", + "resolved": "https://registry.npmjs.org/express/-/express-4.22.1.tgz", + "integrity": "sha512-F2X8g9P1X7uCPZMA3MVf9wcTqlyNp7IhH5qPCI0izhaOIYXaW9L535tGA3qmjRzpH+bZczqq7hVKxTR4NWnu+g==", + "license": "MIT", + "dependencies": { + "accepts": "~1.3.8", + "array-flatten": "1.1.1", + "body-parser": "~1.20.3", + "content-disposition": "~0.5.4", + "content-type": "~1.0.4", + "cookie": "~0.7.1", + "cookie-signature": "~1.0.6", + "debug": "2.6.9", + "depd": "2.0.0", + "encodeurl": "~2.0.0", + "escape-html": "~1.0.3", + "etag": "~1.8.1", + "finalhandler": "~1.3.1", + "fresh": "~0.5.2", + "http-errors": "~2.0.0", + "merge-descriptors": "1.0.3", + "methods": "~1.1.2", + "on-finished": "~2.4.1", + "parseurl": "~1.3.3", + "path-to-regexp": "~0.1.12", + "proxy-addr": "~2.0.7", + "qs": "~6.14.0", + "range-parser": "~1.2.1", + "safe-buffer": "5.2.1", + "send": "~0.19.0", + "serve-static": "~1.16.2", + "setprototypeof": "1.2.0", + "statuses": "~2.0.1", + "type-is": "~1.6.18", + "utils-merge": "1.0.1", + "vary": "~1.1.2" + }, + "engines": { + "node": ">= 0.10.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" + } + }, + "node_modules/express/node_modules/content-disposition": { + "version": "0.5.4", + "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.4.tgz", + "integrity": "sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==", + "license": "MIT", + "dependencies": { + "safe-buffer": "5.2.1" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/express/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "license": "MIT", + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/express/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "license": "MIT" + }, + "node_modules/express/node_modules/path-to-regexp": { + "version": "0.1.12", + "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.12.tgz", + "integrity": "sha512-RA1GjUVMnvYFxuqovrEqZoxxW5NUZqbwKtYz/Tt7nXerk0LbLblQmrsgdeOxV5SFHf0UDggjS/bSeOZwt1pmEQ==", + "license": "MIT" + }, + "node_modules/express/node_modules/range-parser": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", + "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/extend": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", + "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==", + "license": "MIT" + }, + "node_modules/extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==", + "license": "MIT", + "dependencies": { + "is-extendable": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/fast-deep-equal": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", + "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", + "license": "MIT" + }, + "node_modules/fast-glob": { + "version": "3.3.3", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.3.tgz", + "integrity": "sha512-7MptL8U0cqcFdzIzwOTHoilX9x5BrNqye7Z/LuC7kCMRio1EMSyqRK3BEAUD7sXRq4iT4AzTVuZdhgQ2TCvYLg==", + "license": "MIT", + "dependencies": { + "@nodelib/fs.stat": "^2.0.2", + "@nodelib/fs.walk": "^1.2.3", + "glob-parent": "^5.1.2", + "merge2": "^1.3.0", + "micromatch": "^4.0.8" + }, + "engines": { + "node": ">=8.6.0" + } + }, + "node_modules/fast-json-stable-stringify": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", + "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", + "license": "MIT" + }, + "node_modules/fast-uri": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/fast-uri/-/fast-uri-3.1.0.tgz", + "integrity": "sha512-iPeeDKJSWf4IEOasVVrknXpaBV0IApz/gp7S2bb7Z4Lljbl2MGJRqInZiUrQwV16cpzw/D3S5j5Julj/gT52AA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/fastify" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/fastify" + } + ], + "license": "BSD-3-Clause" + }, + "node_modules/fastq": { + "version": "1.19.1", + "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.19.1.tgz", + "integrity": "sha512-GwLTyxkCXjXbxqIhTsMI2Nui8huMPtnxg7krajPJAjnEG/iiOS7i+zCtWGZR9G0NBKbXKh6X9m9UIsYX/N6vvQ==", + "license": "ISC", + "dependencies": { + "reusify": "^1.0.4" + } + }, + "node_modules/fault": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/fault/-/fault-2.0.1.tgz", + "integrity": "sha512-WtySTkS4OKev5JtpHXnib4Gxiurzh5NCGvWrFaZ34m6JehfTUhKZvn9njTfw48t6JumVQOmrKqpmGcdwxnhqBQ==", + "license": "MIT", + "dependencies": { + "format": "^0.2.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/faye-websocket": { + "version": "0.11.4", + "resolved": "https://registry.npmjs.org/faye-websocket/-/faye-websocket-0.11.4.tgz", + "integrity": "sha512-CzbClwlXAuiRQAlUyfqPgvPoNKTckTPGfwZV4ZdAhVcP2lh9KUxJg2b5GkE7XbjKQ3YJnQ9z6D9ntLAlB+tP8g==", + "license": "Apache-2.0", + "dependencies": { + "websocket-driver": ">=0.5.1" + }, + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/feed": { + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/feed/-/feed-4.2.2.tgz", + "integrity": "sha512-u5/sxGfiMfZNtJ3OvQpXcvotFpYkL0n9u9mM2vkui2nGo8b4wvDkJ8gAkYqbA8QpGyFCv3RK0Z+Iv+9veCS9bQ==", + "license": "MIT", + "dependencies": { + "xml-js": "^1.6.11" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/figures": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/figures/-/figures-3.2.0.tgz", + "integrity": "sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg==", + "license": "MIT", + "dependencies": { + "escape-string-regexp": "^1.0.5" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/figures/node_modules/escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", + "license": "MIT", + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/file-loader": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/file-loader/-/file-loader-6.2.0.tgz", + "integrity": "sha512-qo3glqyTa61Ytg4u73GultjHGjdRyig3tG6lPtyX/jOEJvHif9uB0/OCI2Kif6ctF3caQTW2G5gym21oAsI4pw==", + "license": "MIT", + "dependencies": { + "loader-utils": "^2.0.0", + "schema-utils": "^3.0.0" + }, + "engines": { + "node": ">= 10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "webpack": "^4.0.0 || ^5.0.0" + } + }, + "node_modules/file-loader/node_modules/ajv": { + "version": "6.12.6", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", + "license": "MIT", + "dependencies": { + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/file-loader/node_modules/ajv-keywords": { + "version": "3.5.2", + "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.2.tgz", + "integrity": "sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==", + "license": "MIT", + "peerDependencies": { + "ajv": "^6.9.1" + } + }, + "node_modules/file-loader/node_modules/json-schema-traverse": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", + "license": "MIT" + }, + "node_modules/file-loader/node_modules/schema-utils": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.3.0.tgz", + "integrity": "sha512-pN/yOAvcC+5rQ5nERGuwrjLlYvLTbCibnZ1I7B1LaiAz9BRBlE9GMgE/eqV30P7aJQUf7Ddimy/RsbYO/GrVGg==", + "license": "MIT", + "dependencies": { + "@types/json-schema": "^7.0.8", + "ajv": "^6.12.5", + "ajv-keywords": "^3.5.2" + }, + "engines": { + "node": ">= 10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + } + }, + "node_modules/fill-range": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz", + "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==", + "license": "MIT", + "dependencies": { + "to-regex-range": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/finalhandler": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.3.2.tgz", + "integrity": "sha512-aA4RyPcd3badbdABGDuTXCMTtOneUCAYH/gxoYRTZlIJdF0YPWuGqiAsIrhNnnqdXGswYk6dGujem4w80UJFhg==", + "license": "MIT", + "dependencies": { + "debug": "2.6.9", + "encodeurl": "~2.0.0", + "escape-html": "~1.0.3", + "on-finished": "~2.4.1", + "parseurl": "~1.3.3", + "statuses": "~2.0.2", + "unpipe": "~1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/finalhandler/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "license": "MIT", + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/finalhandler/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "license": "MIT" + }, + "node_modules/find-cache-dir": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-4.0.0.tgz", + "integrity": "sha512-9ZonPT4ZAK4a+1pUPVPZJapbi7O5qbbJPdYw/NOQWZZbVLdDTYM3A4R9z/DpAM08IDaFGsvPgiGZ82WEwUDWjg==", + "license": "MIT", + "dependencies": { + "common-path-prefix": "^3.0.0", + "pkg-dir": "^7.0.0" + }, + "engines": { + "node": ">=14.16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/find-up": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-6.3.0.tgz", + "integrity": "sha512-v2ZsoEuVHYy8ZIlYqwPe/39Cy+cFDzp4dXPaxNvkEuouymu+2Jbz0PxpKarJHYJTmv2HWT3O382qY8l4jMWthw==", + "license": "MIT", + "dependencies": { + "locate-path": "^7.1.0", + "path-exists": "^5.0.0" + }, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/flat": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/flat/-/flat-5.0.2.tgz", + "integrity": "sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ==", + "license": "BSD-3-Clause", + "bin": { + "flat": "cli.js" + } + }, + "node_modules/follow-redirects": { + "version": "1.15.11", + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.11.tgz", + "integrity": "sha512-deG2P0JfjrTxl50XGCDyfI97ZGVCxIpfKYmfyrQ54n5FO/0gfIES8C/Psl6kWVDolizcaaxZJnTS0QSMxvnsBQ==", + "funding": [ + { + "type": "individual", + "url": "https://github.com/sponsors/RubenVerborgh" + } + ], + "license": "MIT", + "engines": { + "node": ">=4.0" + }, + "peerDependenciesMeta": { + "debug": { + "optional": true + } + } + }, + "node_modules/form-data-encoder": { + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/form-data-encoder/-/form-data-encoder-2.1.4.tgz", + "integrity": "sha512-yDYSgNMraqvnxiEXO4hi88+YZxaHC6QKzb5N84iRCTDeRO7ZALpir/lVmf/uXUhnwUr2O4HU8s/n6x+yNjQkHw==", + "license": "MIT", + "engines": { + "node": ">= 14.17" + } + }, + "node_modules/format": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/format/-/format-0.2.2.tgz", + "integrity": "sha512-wzsgA6WOq+09wrU1tsJ09udeR/YZRaeArL9e1wPbFg3GG2yDnC2ldKpxs4xunpFF9DgqCqOIra3bc1HWrJ37Ww==", + "engines": { + "node": ">=0.4.x" + } + }, + "node_modules/forwarded": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz", + "integrity": "sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/fraction.js": { + "version": "5.3.4", + "resolved": "https://registry.npmjs.org/fraction.js/-/fraction.js-5.3.4.tgz", + "integrity": "sha512-1X1NTtiJphryn/uLQz3whtY6jK3fTqoE3ohKs0tT+Ujr1W59oopxmoEh7Lu5p6vBaPbgoM0bzveAW4Qi5RyWDQ==", + "license": "MIT", + "engines": { + "node": "*" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/rawify" + } + }, + "node_modules/fresh": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", + "integrity": "sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/fs-extra": { + "version": "11.3.2", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-11.3.2.tgz", + "integrity": "sha512-Xr9F6z6up6Ws+NjzMCZc6WXg2YFRlrLP9NQDO3VQrWrfiojdhS56TzueT88ze0uBdCTwEIhQ3ptnmKeWGFAe0A==", + "license": "MIT", + "dependencies": { + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + }, + "engines": { + "node": ">=14.14" + } + }, + "node_modules/fsevents": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", + "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", + "hasInstallScript": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^8.16.0 || ^10.6.0 || >=11.0.0" + } + }, + "node_modules/function-bind": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", + "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/gensync": { + "version": "1.0.0-beta.2", + "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", + "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==", + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/get-intrinsic": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.3.0.tgz", + "integrity": "sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ==", + "license": "MIT", + "dependencies": { + "call-bind-apply-helpers": "^1.0.2", + "es-define-property": "^1.0.1", + "es-errors": "^1.3.0", + "es-object-atoms": "^1.1.1", + "function-bind": "^1.1.2", + "get-proto": "^1.0.1", + "gopd": "^1.2.0", + "has-symbols": "^1.1.0", + "hasown": "^2.0.2", + "math-intrinsics": "^1.1.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/get-own-enumerable-property-symbols": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/get-own-enumerable-property-symbols/-/get-own-enumerable-property-symbols-3.0.2.tgz", + "integrity": "sha512-I0UBV/XOz1XkIJHEUDMZAbzCThU/H8DxmSfmdGcKPnVhu2VfFqr34jr9777IyaTYvxjedWhqVIilEDsCdP5G6g==", + "license": "ISC" + }, + "node_modules/get-proto": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/get-proto/-/get-proto-1.0.1.tgz", + "integrity": "sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==", + "license": "MIT", + "dependencies": { + "dunder-proto": "^1.0.1", + "es-object-atoms": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/get-stream": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz", + "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==", + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/github-slugger": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/github-slugger/-/github-slugger-1.5.0.tgz", + "integrity": "sha512-wIh+gKBI9Nshz2o46B0B3f5k/W+WI9ZAv6y5Dn5WJ5SK1t0TnDimB4WE5rmTD05ZAIn8HALCZVmCsvj0w0v0lw==", + "license": "ISC" + }, + "node_modules/glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "license": "ISC", + "dependencies": { + "is-glob": "^4.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/glob-to-regex.js": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/glob-to-regex.js/-/glob-to-regex.js-1.2.0.tgz", + "integrity": "sha512-QMwlOQKU/IzqMUOAZWubUOT8Qft+Y0KQWnX9nK3ch0CJg0tTp4TvGZsTfudYKv2NzoQSyPcnA6TYeIQ3jGichQ==", + "license": "Apache-2.0", + "engines": { + "node": ">=10.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/streamich" + }, + "peerDependencies": { + "tslib": "2" + } + }, + "node_modules/glob-to-regexp": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/glob-to-regexp/-/glob-to-regexp-0.4.1.tgz", + "integrity": "sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==", + "license": "BSD-2-Clause" + }, + "node_modules/global-dirs": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/global-dirs/-/global-dirs-3.0.1.tgz", + "integrity": "sha512-NBcGGFbBA9s1VzD41QXDG+3++t9Mn5t1FpLdhESY6oKY4gYTFpX4wO3sqGUa0Srjtbfj3szX0RnemmrVRUdULA==", + "license": "MIT", + "dependencies": { + "ini": "2.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/globby": { + "version": "11.1.0", + "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz", + "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==", + "license": "MIT", + "dependencies": { + "array-union": "^2.1.0", + "dir-glob": "^3.0.1", + "fast-glob": "^3.2.9", + "ignore": "^5.2.0", + "merge2": "^1.4.1", + "slash": "^3.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/gopd": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.2.0.tgz", + "integrity": "sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/got": { + "version": "12.6.1", + "resolved": "https://registry.npmjs.org/got/-/got-12.6.1.tgz", + "integrity": "sha512-mThBblvlAF1d4O5oqyvN+ZxLAYwIJK7bpMxgYqPD9okW0C3qm5FFn7k811QrcuEBwaogR3ngOFoCfs6mRv7teQ==", + "license": "MIT", + "dependencies": { + "@sindresorhus/is": "^5.2.0", + "@szmarczak/http-timer": "^5.0.1", + "cacheable-lookup": "^7.0.0", + "cacheable-request": "^10.2.8", + "decompress-response": "^6.0.0", + "form-data-encoder": "^2.1.2", + "get-stream": "^6.0.1", + "http2-wrapper": "^2.1.10", + "lowercase-keys": "^3.0.0", + "p-cancelable": "^3.0.0", + "responselike": "^3.0.0" + }, + "engines": { + "node": ">=14.16" + }, + "funding": { + "url": "https://github.com/sindresorhus/got?sponsor=1" + } + }, + "node_modules/got/node_modules/@sindresorhus/is": { + "version": "5.6.0", + "resolved": "https://registry.npmjs.org/@sindresorhus/is/-/is-5.6.0.tgz", + "integrity": "sha512-TV7t8GKYaJWsn00tFDqBw8+Uqmr8A0fRU1tvTQhyZzGv0sJCGRQL3JGMI3ucuKo3XIZdUP+Lx7/gh2t3lewy7g==", + "license": "MIT", + "engines": { + "node": ">=14.16" + }, + "funding": { + "url": "https://github.com/sindresorhus/is?sponsor=1" + } + }, + "node_modules/graceful-fs": { + "version": "4.2.11", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", + "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==", + "license": "ISC" + }, + "node_modules/gray-matter": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/gray-matter/-/gray-matter-4.0.3.tgz", + "integrity": "sha512-5v6yZd4JK3eMI3FqqCouswVqwugaA9r4dNZB1wwcmrD02QkV5H0y7XBQW8QwQqEaZY1pM9aqORSORhJRdNK44Q==", + "license": "MIT", + "dependencies": { + "js-yaml": "^3.13.1", + "kind-of": "^6.0.2", + "section-matter": "^1.0.0", + "strip-bom-string": "^1.0.0" + }, + "engines": { + "node": ">=6.0" + } + }, + "node_modules/gray-matter/node_modules/argparse": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", + "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", + "license": "MIT", + "dependencies": { + "sprintf-js": "~1.0.2" + } + }, + "node_modules/gray-matter/node_modules/js-yaml": { + "version": "3.14.2", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.2.tgz", + "integrity": "sha512-PMSmkqxr106Xa156c2M265Z+FTrPl+oxd/rgOQy2tijQeK5TxQ43psO1ZCwhVOSdnn+RzkzlRz/eY4BgJBYVpg==", + "license": "MIT", + "dependencies": { + "argparse": "^1.0.7", + "esprima": "^4.0.0" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, + "node_modules/gzip-size": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/gzip-size/-/gzip-size-6.0.0.tgz", + "integrity": "sha512-ax7ZYomf6jqPTQ4+XCpUGyXKHk5WweS+e05MBO4/y3WJ5RkmPXNKvX+bx1behVILVwr6JSQvZAku021CHPXG3Q==", + "license": "MIT", + "dependencies": { + "duplexer": "^0.1.2" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/handle-thing": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/handle-thing/-/handle-thing-2.0.1.tgz", + "integrity": "sha512-9Qn4yBxelxoh2Ow62nP+Ka/kMnOXRi8BXnRaUwezLNhqelnN49xKz4F/dPP8OYLxLxq6JDtZb2i9XznUQbNPTg==", + "license": "MIT" + }, + "node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/has-property-descriptors": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.2.tgz", + "integrity": "sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==", + "license": "MIT", + "dependencies": { + "es-define-property": "^1.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-symbols": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.1.0.tgz", + "integrity": "sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-yarn": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-yarn/-/has-yarn-3.0.0.tgz", + "integrity": "sha512-IrsVwUHhEULx3R8f/aA8AHuEzAorplsab/v8HBzEiIukwq5i/EC+xmOW+HfP1OaDP+2JkgT1yILHN2O3UFIbcA==", + "license": "MIT", + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/hasown": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz", + "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==", + "license": "MIT", + "dependencies": { + "function-bind": "^1.1.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/hast-util-from-parse5": { + "version": "8.0.3", + "resolved": "https://registry.npmjs.org/hast-util-from-parse5/-/hast-util-from-parse5-8.0.3.tgz", + "integrity": "sha512-3kxEVkEKt0zvcZ3hCRYI8rqrgwtlIOFMWkbclACvjlDw8Li9S2hk/d51OI0nr/gIpdMHNepwgOKqZ/sy0Clpyg==", + "license": "MIT", + "dependencies": { + "@types/hast": "^3.0.0", + "@types/unist": "^3.0.0", + "devlop": "^1.0.0", + "hastscript": "^9.0.0", + "property-information": "^7.0.0", + "vfile": "^6.0.0", + "vfile-location": "^5.0.0", + "web-namespaces": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/hast-util-parse-selector": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/hast-util-parse-selector/-/hast-util-parse-selector-4.0.0.tgz", + "integrity": "sha512-wkQCkSYoOGCRKERFWcxMVMOcYE2K1AaNLU8DXS9arxnLOUEWbOXKXiJUNzEpqZ3JOKpnha3jkFrumEjVliDe7A==", + "license": "MIT", + "dependencies": { + "@types/hast": "^3.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/hast-util-raw": { + "version": "9.1.0", + "resolved": "https://registry.npmjs.org/hast-util-raw/-/hast-util-raw-9.1.0.tgz", + "integrity": "sha512-Y8/SBAHkZGoNkpzqqfCldijcuUKh7/su31kEBp67cFY09Wy0mTRgtsLYsiIxMJxlu0f6AA5SUTbDR8K0rxnbUw==", + "license": "MIT", + "dependencies": { + "@types/hast": "^3.0.0", + "@types/unist": "^3.0.0", + "@ungap/structured-clone": "^1.0.0", + "hast-util-from-parse5": "^8.0.0", + "hast-util-to-parse5": "^8.0.0", + "html-void-elements": "^3.0.0", + "mdast-util-to-hast": "^13.0.0", + "parse5": "^7.0.0", + "unist-util-position": "^5.0.0", + "unist-util-visit": "^5.0.0", + "vfile": "^6.0.0", + "web-namespaces": "^2.0.0", + "zwitch": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/hast-util-to-estree": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/hast-util-to-estree/-/hast-util-to-estree-3.1.3.tgz", + "integrity": "sha512-48+B/rJWAp0jamNbAAf9M7Uf//UVqAoMmgXhBdxTDJLGKY+LRnZ99qcG+Qjl5HfMpYNzS5v4EAwVEF34LeAj7w==", + "license": "MIT", + "dependencies": { + "@types/estree": "^1.0.0", + "@types/estree-jsx": "^1.0.0", + "@types/hast": "^3.0.0", + "comma-separated-tokens": "^2.0.0", + "devlop": "^1.0.0", + "estree-util-attach-comments": "^3.0.0", + "estree-util-is-identifier-name": "^3.0.0", + "hast-util-whitespace": "^3.0.0", + "mdast-util-mdx-expression": "^2.0.0", + "mdast-util-mdx-jsx": "^3.0.0", + "mdast-util-mdxjs-esm": "^2.0.0", + "property-information": "^7.0.0", + "space-separated-tokens": "^2.0.0", + "style-to-js": "^1.0.0", + "unist-util-position": "^5.0.0", + "zwitch": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/hast-util-to-jsx-runtime": { + "version": "2.3.6", + "resolved": "https://registry.npmjs.org/hast-util-to-jsx-runtime/-/hast-util-to-jsx-runtime-2.3.6.tgz", + "integrity": "sha512-zl6s8LwNyo1P9uw+XJGvZtdFF1GdAkOg8ujOw+4Pyb76874fLps4ueHXDhXWdk6YHQ6OgUtinliG7RsYvCbbBg==", + "license": "MIT", + "dependencies": { + "@types/estree": "^1.0.0", + "@types/hast": "^3.0.0", + "@types/unist": "^3.0.0", + "comma-separated-tokens": "^2.0.0", + "devlop": "^1.0.0", + "estree-util-is-identifier-name": "^3.0.0", + "hast-util-whitespace": "^3.0.0", + "mdast-util-mdx-expression": "^2.0.0", + "mdast-util-mdx-jsx": "^3.0.0", + "mdast-util-mdxjs-esm": "^2.0.0", + "property-information": "^7.0.0", + "space-separated-tokens": "^2.0.0", + "style-to-js": "^1.0.0", + "unist-util-position": "^5.0.0", + "vfile-message": "^4.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/hast-util-to-parse5": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/hast-util-to-parse5/-/hast-util-to-parse5-8.0.1.tgz", + "integrity": "sha512-MlWT6Pjt4CG9lFCjiz4BH7l9wmrMkfkJYCxFwKQic8+RTZgWPuWxwAfjJElsXkex7DJjfSJsQIt931ilUgmwdA==", + "license": "MIT", + "dependencies": { + "@types/hast": "^3.0.0", + "comma-separated-tokens": "^2.0.0", + "devlop": "^1.0.0", + "property-information": "^7.0.0", + "space-separated-tokens": "^2.0.0", + "web-namespaces": "^2.0.0", + "zwitch": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/hast-util-whitespace": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/hast-util-whitespace/-/hast-util-whitespace-3.0.0.tgz", + "integrity": "sha512-88JUN06ipLwsnv+dVn+OIYOvAuvBMy/Qoi6O7mQHxdPXpjy+Cd6xRkWwux7DKO+4sYILtLBRIKgsdpS2gQc7qw==", + "license": "MIT", + "dependencies": { + "@types/hast": "^3.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/hastscript": { + "version": "9.0.1", + "resolved": "https://registry.npmjs.org/hastscript/-/hastscript-9.0.1.tgz", + "integrity": "sha512-g7df9rMFX/SPi34tyGCyUBREQoKkapwdY/T04Qn9TDWfHhAYt4/I0gMVirzK5wEzeUqIjEB+LXC/ypb7Aqno5w==", + "license": "MIT", + "dependencies": { + "@types/hast": "^3.0.0", + "comma-separated-tokens": "^2.0.0", + "hast-util-parse-selector": "^4.0.0", + "property-information": "^7.0.0", + "space-separated-tokens": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/he": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/he/-/he-1.2.0.tgz", + "integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==", + "license": "MIT", + "bin": { + "he": "bin/he" + } + }, + "node_modules/history": { + "version": "4.10.1", + "resolved": "https://registry.npmjs.org/history/-/history-4.10.1.tgz", + "integrity": "sha512-36nwAD620w12kuzPAsyINPWJqlNbij+hpK1k9XRloDtym8mxzGYl2c17LnV6IAGB2Dmg4tEa7G7DlawS0+qjew==", + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.1.2", + "loose-envify": "^1.2.0", + "resolve-pathname": "^3.0.0", + "tiny-invariant": "^1.0.2", + "tiny-warning": "^1.0.0", + "value-equal": "^1.0.1" + } + }, + "node_modules/hoist-non-react-statics": { + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/hoist-non-react-statics/-/hoist-non-react-statics-3.3.2.tgz", + "integrity": "sha512-/gGivxi8JPKWNm/W0jSmzcMPpfpPLc3dY/6GxhX2hQ9iGj3aDfklV4ET7NjKpSinLpJ5vafa9iiGIEZg10SfBw==", + "license": "BSD-3-Clause", + "dependencies": { + "react-is": "^16.7.0" + } + }, + "node_modules/hpack.js": { + "version": "2.1.6", + "resolved": "https://registry.npmjs.org/hpack.js/-/hpack.js-2.1.6.tgz", + "integrity": "sha512-zJxVehUdMGIKsRaNt7apO2Gqp0BdqW5yaiGHXXmbpvxgBYVZnAql+BJb4RO5ad2MgpbZKn5G6nMnegrH1FcNYQ==", + "license": "MIT", + "dependencies": { + "inherits": "^2.0.1", + "obuf": "^1.0.0", + "readable-stream": "^2.0.1", + "wbuf": "^1.1.0" + } + }, + "node_modules/hpack.js/node_modules/isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", + "license": "MIT" + }, + "node_modules/hpack.js/node_modules/readable-stream": { + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", + "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", + "license": "MIT", + "dependencies": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "node_modules/hpack.js/node_modules/safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "license": "MIT" + }, + "node_modules/hpack.js/node_modules/string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "license": "MIT", + "dependencies": { + "safe-buffer": "~5.1.0" + } + }, + "node_modules/html-escaper": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/html-escaper/-/html-escaper-2.0.2.tgz", + "integrity": "sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==", + "license": "MIT" + }, + "node_modules/html-minifier-terser": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/html-minifier-terser/-/html-minifier-terser-7.2.0.tgz", + "integrity": "sha512-tXgn3QfqPIpGl9o+K5tpcj3/MN4SfLtsx2GWwBC3SSd0tXQGyF3gsSqad8loJgKZGM3ZxbYDd5yhiBIdWpmvLA==", + "license": "MIT", + "dependencies": { + "camel-case": "^4.1.2", + "clean-css": "~5.3.2", + "commander": "^10.0.0", + "entities": "^4.4.0", + "param-case": "^3.0.4", + "relateurl": "^0.2.7", + "terser": "^5.15.1" + }, + "bin": { + "html-minifier-terser": "cli.js" + }, + "engines": { + "node": "^14.13.1 || >=16.0.0" + } + }, + "node_modules/html-minifier-terser/node_modules/commander": { + "version": "10.0.1", + "resolved": "https://registry.npmjs.org/commander/-/commander-10.0.1.tgz", + "integrity": "sha512-y4Mg2tXshplEbSGzx7amzPwKKOCGuoSRP/CjEdwwk0FOGlUbq6lKuoyDZTNZkmxHdJtp54hdfY/JUrdL7Xfdug==", + "license": "MIT", + "engines": { + "node": ">=14" + } + }, + "node_modules/html-tags": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/html-tags/-/html-tags-3.3.1.tgz", + "integrity": "sha512-ztqyC3kLto0e9WbNp0aeP+M3kTt+nbaIveGmUxAtZa+8iFgKLUOD4YKM5j+f3QD89bra7UeumolZHKuOXnTmeQ==", + "license": "MIT", + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/html-void-elements": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/html-void-elements/-/html-void-elements-3.0.0.tgz", + "integrity": "sha512-bEqo66MRXsUGxWHV5IP0PUiAWwoEjba4VCzg0LjFJBpchPaTfyfCKTG6bc5F8ucKec3q5y6qOdGyYTSBEvhCrg==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/html-webpack-plugin": { + "version": "5.6.5", + "resolved": "https://registry.npmjs.org/html-webpack-plugin/-/html-webpack-plugin-5.6.5.tgz", + "integrity": "sha512-4xynFbKNNk+WlzXeQQ+6YYsH2g7mpfPszQZUi3ovKlj+pDmngQ7vRXjrrmGROabmKwyQkcgcX5hqfOwHbFmK5g==", + "license": "MIT", + "dependencies": { + "@types/html-minifier-terser": "^6.0.0", + "html-minifier-terser": "^6.0.2", + "lodash": "^4.17.21", + "pretty-error": "^4.0.0", + "tapable": "^2.0.0" + }, + "engines": { + "node": ">=10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/html-webpack-plugin" + }, + "peerDependencies": { + "@rspack/core": "0.x || 1.x", + "webpack": "^5.20.0" + }, + "peerDependenciesMeta": { + "@rspack/core": { + "optional": true + }, + "webpack": { + "optional": true + } + } + }, + "node_modules/html-webpack-plugin/node_modules/commander": { + "version": "8.3.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-8.3.0.tgz", + "integrity": "sha512-OkTL9umf+He2DZkUq8f8J9of7yL6RJKI24dVITBmNfZBmri9zYZQrKkuXiKhyfPSu8tUhnVBB1iKXevvnlR4Ww==", + "license": "MIT", + "engines": { + "node": ">= 12" + } + }, + "node_modules/html-webpack-plugin/node_modules/html-minifier-terser": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/html-minifier-terser/-/html-minifier-terser-6.1.0.tgz", + "integrity": "sha512-YXxSlJBZTP7RS3tWnQw74ooKa6L9b9i9QYXY21eUEvhZ3u9XLfv6OnFsQq6RxkhHygsaUMvYsZRV5rU/OVNZxw==", + "license": "MIT", + "dependencies": { + "camel-case": "^4.1.2", + "clean-css": "^5.2.2", + "commander": "^8.3.0", + "he": "^1.2.0", + "param-case": "^3.0.4", + "relateurl": "^0.2.7", + "terser": "^5.10.0" + }, + "bin": { + "html-minifier-terser": "cli.js" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/htmlparser2": { + "version": "8.0.2", + "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-8.0.2.tgz", + "integrity": "sha512-GYdjWKDkbRLkZ5geuHs5NY1puJ+PXwP7+fHPRz06Eirsb9ugf6d8kkXav6ADhcODhFFPMIXyxkxSuMf3D6NCFA==", + "funding": [ + "https://github.com/fb55/htmlparser2?sponsor=1", + { + "type": "github", + "url": "https://github.com/sponsors/fb55" + } + ], + "license": "MIT", + "dependencies": { + "domelementtype": "^2.3.0", + "domhandler": "^5.0.3", + "domutils": "^3.0.1", + "entities": "^4.4.0" + } + }, + "node_modules/http-cache-semantics": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.2.0.tgz", + "integrity": "sha512-dTxcvPXqPvXBQpq5dUr6mEMJX4oIEFv6bwom3FDwKRDsuIjjJGANqhBuoAn9c1RQJIdAKav33ED65E2ys+87QQ==", + "license": "BSD-2-Clause" + }, + "node_modules/http-deceiver": { + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/http-deceiver/-/http-deceiver-1.2.7.tgz", + "integrity": "sha512-LmpOGxTfbpgtGVxJrj5k7asXHCgNZp5nLfp+hWc8QQRqtb7fUy6kRY3BO1h9ddF6yIPYUARgxGOwB42DnxIaNw==", + "license": "MIT" + }, + "node_modules/http-errors": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.1.tgz", + "integrity": "sha512-4FbRdAX+bSdmo4AUFuS0WNiPz8NgFt+r8ThgNWmlrjQjt1Q7ZR9+zTlce2859x4KSXrwIsaeTqDoKQmtP8pLmQ==", + "license": "MIT", + "dependencies": { + "depd": "~2.0.0", + "inherits": "~2.0.4", + "setprototypeof": "~1.2.0", + "statuses": "~2.0.2", + "toidentifier": "~1.0.1" + }, + "engines": { + "node": ">= 0.8" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" + } + }, + "node_modules/http-parser-js": { + "version": "0.5.10", + "resolved": "https://registry.npmjs.org/http-parser-js/-/http-parser-js-0.5.10.tgz", + "integrity": "sha512-Pysuw9XpUq5dVc/2SMHpuTY01RFl8fttgcyunjL7eEMhGM3cI4eOmiCycJDVCo/7O7ClfQD3SaI6ftDzqOXYMA==", + "license": "MIT" + }, + "node_modules/http-proxy": { + "version": "1.18.1", + "resolved": "https://registry.npmjs.org/http-proxy/-/http-proxy-1.18.1.tgz", + "integrity": "sha512-7mz/721AbnJwIVbnaSv1Cz3Am0ZLT/UBwkC92VlxhXv/k/BBQfM2fXElQNC27BVGr0uwUpplYPQM9LnaBMR5NQ==", + "license": "MIT", + "dependencies": { + "eventemitter3": "^4.0.0", + "follow-redirects": "^1.0.0", + "requires-port": "^1.0.0" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/http-proxy-middleware": { + "version": "2.0.9", + "resolved": "https://registry.npmjs.org/http-proxy-middleware/-/http-proxy-middleware-2.0.9.tgz", + "integrity": "sha512-c1IyJYLYppU574+YI7R4QyX2ystMtVXZwIdzazUIPIJsHuWNd+mho2j+bKoHftndicGj9yh+xjd+l0yj7VeT1Q==", + "license": "MIT", + "dependencies": { + "@types/http-proxy": "^1.17.8", + "http-proxy": "^1.18.1", + "is-glob": "^4.0.1", + "is-plain-obj": "^3.0.0", + "micromatch": "^4.0.2" + }, + "engines": { + "node": ">=12.0.0" + }, + "peerDependencies": { + "@types/express": "^4.17.13" + }, + "peerDependenciesMeta": { + "@types/express": { + "optional": true + } + } + }, + "node_modules/http-proxy-middleware/node_modules/is-plain-obj": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-3.0.0.tgz", + "integrity": "sha512-gwsOE28k+23GP1B6vFl1oVh/WOzmawBrKwo5Ev6wMKzPkaXaCDIQKzLnvsA42DRlbVTWorkgTKIviAKCWkfUwA==", + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/http2-wrapper": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/http2-wrapper/-/http2-wrapper-2.2.1.tgz", + "integrity": "sha512-V5nVw1PAOgfI3Lmeaj2Exmeg7fenjhRUgz1lPSezy1CuhPYbgQtbQj4jZfEAEMlaL+vupsvhjqCyjzob0yxsmQ==", + "license": "MIT", + "dependencies": { + "quick-lru": "^5.1.1", + "resolve-alpn": "^1.2.0" + }, + "engines": { + "node": ">=10.19.0" + } + }, + "node_modules/human-signals": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz", + "integrity": "sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==", + "license": "Apache-2.0", + "engines": { + "node": ">=10.17.0" + } + }, + "node_modules/hyperdyperid": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/hyperdyperid/-/hyperdyperid-1.2.0.tgz", + "integrity": "sha512-Y93lCzHYgGWdrJ66yIktxiaGULYc6oGiABxhcO5AufBeOyoIdZF7bIfLaOrbM0iGIOXQQgxxRrFEnb+Y6w1n4A==", + "license": "MIT", + "engines": { + "node": ">=10.18" + } + }, + "node_modules/iconv-lite": { + "version": "0.4.24", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", + "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", + "license": "MIT", + "dependencies": { + "safer-buffer": ">= 2.1.2 < 3" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/icss-utils": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/icss-utils/-/icss-utils-5.1.0.tgz", + "integrity": "sha512-soFhflCVWLfRNOPU3iv5Z9VUdT44xFRbzjLsEzSr5AQmgqPMTHdU3PMT1Cf1ssx8fLNJDA1juftYl+PUcv3MqA==", + "license": "ISC", + "engines": { + "node": "^10 || ^12 || >= 14" + }, + "peerDependencies": { + "postcss": "^8.1.0" + } + }, + "node_modules/ignore": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.2.tgz", + "integrity": "sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==", + "license": "MIT", + "engines": { + "node": ">= 4" + } + }, + "node_modules/image-size": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/image-size/-/image-size-2.0.2.tgz", + "integrity": "sha512-IRqXKlaXwgSMAMtpNzZa1ZAe8m+Sa1770Dhk8VkSsP9LS+iHD62Zd8FQKs8fbPiagBE7BzoFX23cxFnwshpV6w==", + "license": "MIT", + "bin": { + "image-size": "bin/image-size.js" + }, + "engines": { + "node": ">=16.x" + } + }, + "node_modules/import-fresh": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.1.tgz", + "integrity": "sha512-TR3KfrTZTYLPB6jUjfx6MF9WcWrHL9su5TObK4ZkYgBdWKPOFoSoQIdEuTuR82pmtxH2spWG9h6etwfr1pLBqQ==", + "license": "MIT", + "dependencies": { + "parent-module": "^1.0.0", + "resolve-from": "^4.0.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/import-lazy": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/import-lazy/-/import-lazy-4.0.0.tgz", + "integrity": "sha512-rKtvo6a868b5Hu3heneU+L4yEQ4jYKLtjpnPeUdK7h0yzXGmyBTypknlkCvHFBqfX9YlorEiMM6Dnq/5atfHkw==", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/imurmurhash": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", + "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", + "license": "MIT", + "engines": { + "node": ">=0.8.19" + } + }, + "node_modules/indent-string": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz", + "integrity": "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/infima": { + "version": "0.2.0-alpha.45", + "resolved": "https://registry.npmjs.org/infima/-/infima-0.2.0-alpha.45.tgz", + "integrity": "sha512-uyH0zfr1erU1OohLk0fT4Rrb94AOhguWNOcD9uGrSpRvNB+6gZXUoJX5J0NtvzBO10YZ9PgvA4NFgt+fYg8ojw==", + "license": "MIT", + "engines": { + "node": ">=12" + } + }, + "node_modules/inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", + "license": "ISC" + }, + "node_modules/ini": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ini/-/ini-2.0.0.tgz", + "integrity": "sha512-7PnF4oN3CvZF23ADhA5wRaYEQpJ8qygSkbtTXWBeXWXmEVRXK+1ITciHWwHhsjv1TmW0MgacIv6hEi5pX5NQdA==", + "license": "ISC", + "engines": { + "node": ">=10" + } + }, + "node_modules/inline-style-parser": { + "version": "0.2.7", + "resolved": "https://registry.npmjs.org/inline-style-parser/-/inline-style-parser-0.2.7.tgz", + "integrity": "sha512-Nb2ctOyNR8DqQoR0OwRG95uNWIC0C1lCgf5Naz5H6Ji72KZ8OcFZLz2P5sNgwlyoJ8Yif11oMuYs5pBQa86csA==", + "license": "MIT" + }, + "node_modules/invariant": { + "version": "2.2.4", + "resolved": "https://registry.npmjs.org/invariant/-/invariant-2.2.4.tgz", + "integrity": "sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA==", + "license": "MIT", + "dependencies": { + "loose-envify": "^1.0.0" + } + }, + "node_modules/ipaddr.js": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-2.3.0.tgz", + "integrity": "sha512-Zv/pA+ciVFbCSBBjGfaKUya/CcGmUHzTydLMaTwrUUEM2DIEO3iZvueGxmacvmN50fGpGVKeTXpb2LcYQxeVdg==", + "license": "MIT", + "engines": { + "node": ">= 10" + } + }, + "node_modules/is-alphabetical": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-alphabetical/-/is-alphabetical-2.0.1.tgz", + "integrity": "sha512-FWyyY60MeTNyeSRpkM2Iry0G9hpr7/9kD40mD/cGQEuilcZYS4okz8SN2Q6rLCJ8gbCt6fN+rC+6tMGS99LaxQ==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/is-alphanumerical": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-alphanumerical/-/is-alphanumerical-2.0.1.tgz", + "integrity": "sha512-hmbYhX/9MUMF5uh7tOXyK/n0ZvWpad5caBA17GsC6vyuCqaWliRG5K1qS9inmUhEMaOBIW7/whAnSwveW/LtZw==", + "license": "MIT", + "dependencies": { + "is-alphabetical": "^2.0.0", + "is-decimal": "^2.0.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/is-arrayish": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", + "integrity": "sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==", + "license": "MIT" + }, + "node_modules/is-binary-path": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", + "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", + "license": "MIT", + "dependencies": { + "binary-extensions": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/is-ci": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/is-ci/-/is-ci-3.0.1.tgz", + "integrity": "sha512-ZYvCgrefwqoQ6yTyYUbQu64HsITZ3NfKX1lzaEYdkTDcfKzzCI/wthRRYKkdjHKFVgNiXKAKm65Zo1pk2as/QQ==", + "license": "MIT", + "dependencies": { + "ci-info": "^3.2.0" + }, + "bin": { + "is-ci": "bin.js" + } + }, + "node_modules/is-core-module": { + "version": "2.16.1", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.16.1.tgz", + "integrity": "sha512-UfoeMA6fIJ8wTYFEUjelnaGI67v6+N7qXJEvQuIGa99l4xsCruSYOVSQ0uPANn4dAzm8lkYPaKLrrijLq7x23w==", + "license": "MIT", + "dependencies": { + "hasown": "^2.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-decimal": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-decimal/-/is-decimal-2.0.1.tgz", + "integrity": "sha512-AAB9hiomQs5DXWcRB1rqsxGUstbRroFOPPVAomNk/3XHR5JyEZChOyTWe2oayKnsSsr/kcGqF+z6yuH6HHpN0A==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/is-docker": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-2.2.1.tgz", + "integrity": "sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==", + "license": "MIT", + "bin": { + "is-docker": "cli.js" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-extendable": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", + "integrity": "sha512-5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/is-glob": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", + "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", + "license": "MIT", + "dependencies": { + "is-extglob": "^2.1.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-hexadecimal": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-hexadecimal/-/is-hexadecimal-2.0.1.tgz", + "integrity": "sha512-DgZQp241c8oO6cA1SbTEWiXeoxV42vlcJxgH+B3hi1AiqqKruZR3ZGF8In3fj4+/y/7rHvlOZLZtgJ/4ttYGZg==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/is-inside-container": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-inside-container/-/is-inside-container-1.0.0.tgz", + "integrity": "sha512-KIYLCCJghfHZxqjYBE7rEy0OBuTd5xCHS7tHVgvCLkx7StIoaxwNW3hCALgEUjFfeRk+MG/Qxmp/vtETEF3tRA==", + "license": "MIT", + "dependencies": { + "is-docker": "^3.0.0" + }, + "bin": { + "is-inside-container": "cli.js" + }, + "engines": { + "node": ">=14.16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-inside-container/node_modules/is-docker": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-3.0.0.tgz", + "integrity": "sha512-eljcgEDlEns/7AXFosB5K/2nCM4P7FQPkGc/DWLy5rmFEWvZayGrik1d9/QIY5nJ4f9YsVvBkA6kJpHn9rISdQ==", + "license": "MIT", + "bin": { + "is-docker": "cli.js" + }, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-installed-globally": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/is-installed-globally/-/is-installed-globally-0.4.0.tgz", + "integrity": "sha512-iwGqO3J21aaSkC7jWnHP/difazwS7SFeIqxv6wEtLU8Y5KlzFTjyqcSIT0d8s4+dDhKytsk9PJZ2BkS5eZwQRQ==", + "license": "MIT", + "dependencies": { + "global-dirs": "^3.0.0", + "is-path-inside": "^3.0.2" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-network-error": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/is-network-error/-/is-network-error-1.3.0.tgz", + "integrity": "sha512-6oIwpsgRfnDiyEDLMay/GqCl3HoAtH5+RUKW29gYkL0QA+ipzpDLA16yQs7/RHCSu+BwgbJaOUqa4A99qNVQVw==", + "license": "MIT", + "engines": { + "node": ">=16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-npm": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/is-npm/-/is-npm-6.1.0.tgz", + "integrity": "sha512-O2z4/kNgyjhQwVR1Wpkbfc19JIhggF97NZNCpWTnjH7kVcZMUrnut9XSN7txI7VdyIYk5ZatOq3zvSuWpU8hoA==", + "license": "MIT", + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "license": "MIT", + "engines": { + "node": ">=0.12.0" + } + }, + "node_modules/is-obj": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-obj/-/is-obj-1.0.1.tgz", + "integrity": "sha512-l4RyHgRqGN4Y3+9JHVrNqO+tN0rV5My76uW5/nuO4K1b6vw5G8d/cmFjP9tRfEsdhZNt0IFdZuK/c2Vr4Nb+Qg==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-path-inside": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz", + "integrity": "sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/is-plain-obj": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-4.1.0.tgz", + "integrity": "sha512-+Pgi+vMuUNkJyExiMBt5IlFoMyKnr5zhJ4Uspz58WOhBF5QoIZkFyNHIbBAtHwzVAgk5RtndVNsDRN61/mmDqg==", + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-plain-object": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", + "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==", + "license": "MIT", + "dependencies": { + "isobject": "^3.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-regexp": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-regexp/-/is-regexp-1.0.0.tgz", + "integrity": "sha512-7zjFAPO4/gwyQAAgRRmqeEeyIICSdmCqa3tsVHMdBzaXXRiqopZL4Cyghg/XulGWrtABTpbnYYzzIRffLkP4oA==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-stream": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", + "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==", + "license": "MIT", + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-typedarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", + "integrity": "sha512-cyA56iCMHAh5CdzjJIa4aohJyeO1YbwLi3Jc35MmRU6poroFjIGZzUzupGiRPOjgHg9TLu43xbpwXk523fMxKA==", + "license": "MIT" + }, + "node_modules/is-wsl": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-2.2.0.tgz", + "integrity": "sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==", + "license": "MIT", + "dependencies": { + "is-docker": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/is-yarn-global": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/is-yarn-global/-/is-yarn-global-0.4.1.tgz", + "integrity": "sha512-/kppl+R+LO5VmhYSEWARUFjodS25D68gvj8W7z0I7OWhUla5xWu8KL6CtB2V0R6yqhnRgbcaREMr4EEM6htLPQ==", + "license": "MIT", + "engines": { + "node": ">=12" + } + }, + "node_modules/isarray": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", + "integrity": "sha512-D2S+3GLxWH+uhrNEcoh/fnmYeP8E8/zHl644d/jdA0g2uyXvy3sb0qxotE+ne0LtccHknQzWwZEzhak7oJ0COQ==", + "license": "MIT" + }, + "node_modules/isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", + "license": "ISC" + }, + "node_modules/isobject": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", + "integrity": "sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/jest-util": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-29.7.0.tgz", + "integrity": "sha512-z6EbKajIpqGKU56y5KBUgy1dt1ihhQJgWzUlZHArA/+X2ad7Cb5iF+AK1EWVL/Bo7Rz9uurpqw6SiBCefUbCGA==", + "license": "MIT", + "dependencies": { + "@jest/types": "^29.6.3", + "@types/node": "*", + "chalk": "^4.0.0", + "ci-info": "^3.2.0", + "graceful-fs": "^4.2.9", + "picomatch": "^2.2.3" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-worker": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-29.7.0.tgz", + "integrity": "sha512-eIz2msL/EzL9UFTFFx7jBTkeZfku0yUAyZZZmJ93H2TYEiroIx2PQjEXcwYtYl8zXCxb+PAmA2hLIt/6ZEkPHw==", + "license": "MIT", + "dependencies": { + "@types/node": "*", + "jest-util": "^29.7.0", + "merge-stream": "^2.0.0", + "supports-color": "^8.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-worker/node_modules/supports-color": { + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", + "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", + "license": "MIT", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/supports-color?sponsor=1" + } + }, + "node_modules/jiti": { + "version": "1.21.7", + "resolved": "https://registry.npmjs.org/jiti/-/jiti-1.21.7.tgz", + "integrity": "sha512-/imKNG4EbWNrVjoNC/1H5/9GFy+tqjGBHCaSsN+P2RnPqjsLmv6UD3Ej+Kj8nBWaRAwyk7kK5ZUc+OEatnTR3A==", + "license": "MIT", + "bin": { + "jiti": "bin/jiti.js" + } + }, + "node_modules/joi": { + "version": "17.13.3", + "resolved": "https://registry.npmjs.org/joi/-/joi-17.13.3.tgz", + "integrity": "sha512-otDA4ldcIx+ZXsKHWmp0YizCweVRZG96J10b0FevjfuncLO1oX59THoAmHkNubYJ+9gWsYsp5k8v4ib6oDv1fA==", + "license": "BSD-3-Clause", + "dependencies": { + "@hapi/hoek": "^9.3.0", + "@hapi/topo": "^5.1.0", + "@sideway/address": "^4.1.5", + "@sideway/formula": "^3.0.1", + "@sideway/pinpoint": "^2.0.0" + } + }, + "node_modules/js-tokens": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", + "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", + "license": "MIT" + }, + "node_modules/js-yaml": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.1.tgz", + "integrity": "sha512-qQKT4zQxXl8lLwBtHMWwaTcGfFOZviOJet3Oy/xmGk2gZH677CJM9EvtfdSkgWcATZhj/55JZ0rmy3myCT5lsA==", + "license": "MIT", + "dependencies": { + "argparse": "^2.0.1" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, + "node_modules/jsesc": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-3.1.0.tgz", + "integrity": "sha512-/sM3dO2FOzXjKQhJuo0Q173wf2KOo8t4I8vHy6lF9poUp7bKT0/NHE8fPX23PwfhnykfqnC2xRxOnVw5XuGIaA==", + "license": "MIT", + "bin": { + "jsesc": "bin/jsesc" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/json-buffer": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz", + "integrity": "sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==", + "license": "MIT" + }, + "node_modules/json-parse-even-better-errors": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz", + "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==", + "license": "MIT" + }, + "node_modules/json-schema": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.4.0.tgz", + "integrity": "sha512-es94M3nTIfsEPisRafak+HDLfHXnKBhV3vU5eqPcS3flIWqcxJWgXHXiey3YrpaNsanY5ei1VoYEbOzijuq9BA==", + "license": "(AFL-2.1 OR BSD-3-Clause)" + }, + "node_modules/json-schema-traverse": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", + "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", + "license": "MIT" + }, + "node_modules/json5": { + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz", + "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==", + "license": "MIT", + "bin": { + "json5": "lib/cli.js" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/jsonfile": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.2.0.tgz", + "integrity": "sha512-FGuPw30AdOIUTRMC2OMRtQV+jkVj2cfPqSeWXv1NEAJ1qZ5zb1X6z1mFhbfOB/iy3ssJCD+3KuZ8r8C3uVFlAg==", + "license": "MIT", + "dependencies": { + "universalify": "^2.0.0" + }, + "optionalDependencies": { + "graceful-fs": "^4.1.6" + } + }, + "node_modules/keyv": { + "version": "4.5.4", + "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.5.4.tgz", + "integrity": "sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==", + "license": "MIT", + "dependencies": { + "json-buffer": "3.0.1" + } + }, + "node_modules/kind-of": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", + "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/kleur": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/kleur/-/kleur-3.0.3.tgz", + "integrity": "sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/latest-version": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/latest-version/-/latest-version-7.0.0.tgz", + "integrity": "sha512-KvNT4XqAMzdcL6ka6Tl3i2lYeFDgXNCuIX+xNx6ZMVR1dFq+idXd9FLKNMOIx0t9mJ9/HudyX4oZWXZQ0UJHeg==", + "license": "MIT", + "dependencies": { + "package-json": "^8.1.0" + }, + "engines": { + "node": ">=14.16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/launch-editor": { + "version": "2.12.0", + "resolved": "https://registry.npmjs.org/launch-editor/-/launch-editor-2.12.0.tgz", + "integrity": "sha512-giOHXoOtifjdHqUamwKq6c49GzBdLjvxrd2D+Q4V6uOHopJv7p9VJxikDsQ/CBXZbEITgUqSVHXLTG3VhPP1Dg==", + "license": "MIT", + "dependencies": { + "picocolors": "^1.1.1", + "shell-quote": "^1.8.3" + } + }, + "node_modules/leven": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/leven/-/leven-3.1.0.tgz", + "integrity": "sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A==", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/lilconfig": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-3.1.3.tgz", + "integrity": "sha512-/vlFKAoH5Cgt3Ie+JLhRbwOsCQePABiU3tJ1egGvyQ+33R/vcwM2Zl2QR/LzjsBeItPt3oSVXapn+m4nQDvpzw==", + "license": "MIT", + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/antonk52" + } + }, + "node_modules/lines-and-columns": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz", + "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==", + "license": "MIT" + }, + "node_modules/loader-runner": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/loader-runner/-/loader-runner-4.3.1.tgz", + "integrity": "sha512-IWqP2SCPhyVFTBtRcgMHdzlf9ul25NwaFx4wCEH/KjAXuuHY4yNjvPXsBokp8jCB936PyWRaPKUNh8NvylLp2Q==", + "license": "MIT", + "engines": { + "node": ">=6.11.5" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + } + }, + "node_modules/loader-utils": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-2.0.4.tgz", + "integrity": "sha512-xXqpXoINfFhgua9xiqD8fPFHgkoq1mmmpE92WlDbm9rNRd/EbRb+Gqf908T2DMfuHjjJlksiK2RbHVOdD/MqSw==", + "license": "MIT", + "dependencies": { + "big.js": "^5.2.2", + "emojis-list": "^3.0.0", + "json5": "^2.1.2" + }, + "engines": { + "node": ">=8.9.0" + } + }, + "node_modules/locate-path": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-7.2.0.tgz", + "integrity": "sha512-gvVijfZvn7R+2qyPX8mAuKcFGDf6Nc61GdvGafQsHL0sBIxfKzA+usWn4GFC/bk+QdwPUD4kWFJLhElipq+0VA==", + "license": "MIT", + "dependencies": { + "p-locate": "^6.0.0" + }, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/lodash": { + "version": "4.17.21", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", + "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", + "license": "MIT" + }, + "node_modules/lodash.debounce": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/lodash.debounce/-/lodash.debounce-4.0.8.tgz", + "integrity": "sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow==", + "license": "MIT" + }, + "node_modules/lodash.memoize": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/lodash.memoize/-/lodash.memoize-4.1.2.tgz", + "integrity": "sha512-t7j+NzmgnQzTAYXcsHYLgimltOV1MXHtlOWf6GjL9Kj8GK5FInw5JotxvbOs+IvV1/Dzo04/fCGfLVs7aXb4Ag==", + "license": "MIT" + }, + "node_modules/lodash.uniq": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/lodash.uniq/-/lodash.uniq-4.5.0.tgz", + "integrity": "sha512-xfBaXQd9ryd9dlSDvnvI0lvxfLJlYAZzXomUYzLKtUeOQvOP5piqAWuGtrhWeqaXK9hhoM/iyJc5AV+XfsX3HQ==", + "license": "MIT" + }, + "node_modules/longest-streak": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/longest-streak/-/longest-streak-3.1.0.tgz", + "integrity": "sha512-9Ri+o0JYgehTaVBBDoMqIl8GXtbWg711O3srftcHhZ0dqnETqLaoIK0x17fUw9rFSlK/0NlsKe0Ahhyl5pXE2g==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/loose-envify": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz", + "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==", + "license": "MIT", + "dependencies": { + "js-tokens": "^3.0.0 || ^4.0.0" + }, + "bin": { + "loose-envify": "cli.js" + } + }, + "node_modules/lower-case": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/lower-case/-/lower-case-2.0.2.tgz", + "integrity": "sha512-7fm3l3NAF9WfN6W3JOmf5drwpVqX78JtoGJ3A6W0a6ZnldM41w2fV5D490psKFTpMds8TJse/eHLFFsNHHjHgg==", + "license": "MIT", + "dependencies": { + "tslib": "^2.0.3" + } + }, + "node_modules/lowercase-keys": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-3.0.0.tgz", + "integrity": "sha512-ozCC6gdQ+glXOQsveKD0YsDy8DSQFjDTz4zyzEHNV5+JP5D62LmfDZ6o1cycFx9ouG940M5dE8C8CTewdj2YWQ==", + "license": "MIT", + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/lru-cache": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", + "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", + "license": "ISC", + "dependencies": { + "yallist": "^3.0.2" + } + }, + "node_modules/markdown-extensions": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/markdown-extensions/-/markdown-extensions-2.0.0.tgz", + "integrity": "sha512-o5vL7aDWatOTX8LzaS1WMoaoxIiLRQJuIKKe2wAw6IeULDHaqbiqiggmx+pKvZDb1Sj+pE46Sn1T7lCqfFtg1Q==", + "license": "MIT", + "engines": { + "node": ">=16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/markdown-table": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/markdown-table/-/markdown-table-3.0.4.tgz", + "integrity": "sha512-wiYz4+JrLyb/DqW2hkFJxP7Vd7JuTDm77fvbM8VfEQdmSMqcImWeeRbHwZjBjIFki/VaMK2BhFi7oUUZeM5bqw==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/marked": { + "version": "16.4.2", + "resolved": "https://registry.npmjs.org/marked/-/marked-16.4.2.tgz", + "integrity": "sha512-TI3V8YYWvkVf3KJe1dRkpnjs68JUPyEa5vjKrp1XEEJUAOaQc+Qj+L1qWbPd0SJuAdQkFU0h73sXXqwDYxsiDA==", + "license": "MIT", + "bin": { + "marked": "bin/marked.js" + }, + "engines": { + "node": ">= 20" + } + }, + "node_modules/math-intrinsics": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/math-intrinsics/-/math-intrinsics-1.1.0.tgz", + "integrity": "sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/mdast-util-directive": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/mdast-util-directive/-/mdast-util-directive-3.1.0.tgz", + "integrity": "sha512-I3fNFt+DHmpWCYAT7quoM6lHf9wuqtI+oCOfvILnoicNIqjh5E3dEJWiXuYME2gNe8vl1iMQwyUHa7bgFmak6Q==", + "license": "MIT", + "dependencies": { + "@types/mdast": "^4.0.0", + "@types/unist": "^3.0.0", + "ccount": "^2.0.0", + "devlop": "^1.0.0", + "mdast-util-from-markdown": "^2.0.0", + "mdast-util-to-markdown": "^2.0.0", + "parse-entities": "^4.0.0", + "stringify-entities": "^4.0.0", + "unist-util-visit-parents": "^6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-find-and-replace": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/mdast-util-find-and-replace/-/mdast-util-find-and-replace-3.0.2.tgz", + "integrity": "sha512-Tmd1Vg/m3Xz43afeNxDIhWRtFZgM2VLyaf4vSTYwudTyeuTneoL3qtWMA5jeLyz/O1vDJmmV4QuScFCA2tBPwg==", + "license": "MIT", + "dependencies": { + "@types/mdast": "^4.0.0", + "escape-string-regexp": "^5.0.0", + "unist-util-is": "^6.0.0", + "unist-util-visit-parents": "^6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-find-and-replace/node_modules/escape-string-regexp": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-5.0.0.tgz", + "integrity": "sha512-/veY75JbMK4j1yjvuUxuVsiS/hr/4iHs9FTT6cgTexxdE0Ly/glccBAkloH/DofkjRbZU3bnoj38mOmhkZ0lHw==", + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/mdast-util-from-markdown": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/mdast-util-from-markdown/-/mdast-util-from-markdown-2.0.2.tgz", + "integrity": "sha512-uZhTV/8NBuw0WHkPTrCqDOl0zVe1BIng5ZtHoDk49ME1qqcjYmmLmOf0gELgcRMxN4w2iuIeVso5/6QymSrgmA==", + "license": "MIT", + "dependencies": { + "@types/mdast": "^4.0.0", + "@types/unist": "^3.0.0", + "decode-named-character-reference": "^1.0.0", + "devlop": "^1.0.0", + "mdast-util-to-string": "^4.0.0", + "micromark": "^4.0.0", + "micromark-util-decode-numeric-character-reference": "^2.0.0", + "micromark-util-decode-string": "^2.0.0", + "micromark-util-normalize-identifier": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0", + "unist-util-stringify-position": "^4.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-from-markdown/node_modules/micromark-util-symbol": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-util-symbol/-/micromark-util-symbol-2.0.1.tgz", + "integrity": "sha512-vs5t8Apaud9N28kgCrRUdEed4UJ+wWNvicHLPxCa9ENlYuAY31M0ETy5y1vA33YoNPDFTghEbnh6efaE8h4x0Q==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT" + }, + "node_modules/mdast-util-frontmatter": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/mdast-util-frontmatter/-/mdast-util-frontmatter-2.0.1.tgz", + "integrity": "sha512-LRqI9+wdgC25P0URIJY9vwocIzCcksduHQ9OF2joxQoyTNVduwLAFUzjoopuRJbJAReaKrNQKAZKL3uCMugWJA==", + "license": "MIT", + "dependencies": { + "@types/mdast": "^4.0.0", + "devlop": "^1.0.0", + "escape-string-regexp": "^5.0.0", + "mdast-util-from-markdown": "^2.0.0", + "mdast-util-to-markdown": "^2.0.0", + "micromark-extension-frontmatter": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-frontmatter/node_modules/escape-string-regexp": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-5.0.0.tgz", + "integrity": "sha512-/veY75JbMK4j1yjvuUxuVsiS/hr/4iHs9FTT6cgTexxdE0Ly/glccBAkloH/DofkjRbZU3bnoj38mOmhkZ0lHw==", + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/mdast-util-gfm": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/mdast-util-gfm/-/mdast-util-gfm-3.1.0.tgz", + "integrity": "sha512-0ulfdQOM3ysHhCJ1p06l0b0VKlhU0wuQs3thxZQagjcjPrlFRqY215uZGHHJan9GEAXd9MbfPjFJz+qMkVR6zQ==", + "license": "MIT", + "dependencies": { + "mdast-util-from-markdown": "^2.0.0", + "mdast-util-gfm-autolink-literal": "^2.0.0", + "mdast-util-gfm-footnote": "^2.0.0", + "mdast-util-gfm-strikethrough": "^2.0.0", + "mdast-util-gfm-table": "^2.0.0", + "mdast-util-gfm-task-list-item": "^2.0.0", + "mdast-util-to-markdown": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-gfm-autolink-literal": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/mdast-util-gfm-autolink-literal/-/mdast-util-gfm-autolink-literal-2.0.1.tgz", + "integrity": "sha512-5HVP2MKaP6L+G6YaxPNjuL0BPrq9orG3TsrZ9YXbA3vDw/ACI4MEsnoDpn6ZNm7GnZgtAcONJyPhOP8tNJQavQ==", + "license": "MIT", + "dependencies": { + "@types/mdast": "^4.0.0", + "ccount": "^2.0.0", + "devlop": "^1.0.0", + "mdast-util-find-and-replace": "^3.0.0", + "micromark-util-character": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-gfm-autolink-literal/node_modules/micromark-util-character": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/micromark-util-character/-/micromark-util-character-2.1.1.tgz", + "integrity": "sha512-wv8tdUTJ3thSFFFJKtpYKOYiGP2+v96Hvk4Tu8KpCAsTMs6yi+nVmGh1syvSCsaxz45J6Jbw+9DD6g97+NV67Q==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/mdast-util-gfm-autolink-literal/node_modules/micromark-util-symbol": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-util-symbol/-/micromark-util-symbol-2.0.1.tgz", + "integrity": "sha512-vs5t8Apaud9N28kgCrRUdEed4UJ+wWNvicHLPxCa9ENlYuAY31M0ETy5y1vA33YoNPDFTghEbnh6efaE8h4x0Q==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT" + }, + "node_modules/mdast-util-gfm-footnote": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/mdast-util-gfm-footnote/-/mdast-util-gfm-footnote-2.1.0.tgz", + "integrity": "sha512-sqpDWlsHn7Ac9GNZQMeUzPQSMzR6Wv0WKRNvQRg0KqHh02fpTz69Qc1QSseNX29bhz1ROIyNyxExfawVKTm1GQ==", + "license": "MIT", + "dependencies": { + "@types/mdast": "^4.0.0", + "devlop": "^1.1.0", + "mdast-util-from-markdown": "^2.0.0", + "mdast-util-to-markdown": "^2.0.0", + "micromark-util-normalize-identifier": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-gfm-strikethrough": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/mdast-util-gfm-strikethrough/-/mdast-util-gfm-strikethrough-2.0.0.tgz", + "integrity": "sha512-mKKb915TF+OC5ptj5bJ7WFRPdYtuHv0yTRxK2tJvi+BDqbkiG7h7u/9SI89nRAYcmap2xHQL9D+QG/6wSrTtXg==", + "license": "MIT", + "dependencies": { + "@types/mdast": "^4.0.0", + "mdast-util-from-markdown": "^2.0.0", + "mdast-util-to-markdown": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-gfm-table": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/mdast-util-gfm-table/-/mdast-util-gfm-table-2.0.0.tgz", + "integrity": "sha512-78UEvebzz/rJIxLvE7ZtDd/vIQ0RHv+3Mh5DR96p7cS7HsBhYIICDBCu8csTNWNO6tBWfqXPWekRuj2FNOGOZg==", + "license": "MIT", + "dependencies": { + "@types/mdast": "^4.0.0", + "devlop": "^1.0.0", + "markdown-table": "^3.0.0", + "mdast-util-from-markdown": "^2.0.0", + "mdast-util-to-markdown": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-gfm-task-list-item": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/mdast-util-gfm-task-list-item/-/mdast-util-gfm-task-list-item-2.0.0.tgz", + "integrity": "sha512-IrtvNvjxC1o06taBAVJznEnkiHxLFTzgonUdy8hzFVeDun0uTjxxrRGVaNFqkU1wJR3RBPEfsxmU6jDWPofrTQ==", + "license": "MIT", + "dependencies": { + "@types/mdast": "^4.0.0", + "devlop": "^1.0.0", + "mdast-util-from-markdown": "^2.0.0", + "mdast-util-to-markdown": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-mdx": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/mdast-util-mdx/-/mdast-util-mdx-3.0.0.tgz", + "integrity": "sha512-JfbYLAW7XnYTTbUsmpu0kdBUVe+yKVJZBItEjwyYJiDJuZ9w4eeaqks4HQO+R7objWgS2ymV60GYpI14Ug554w==", + "license": "MIT", + "dependencies": { + "mdast-util-from-markdown": "^2.0.0", + "mdast-util-mdx-expression": "^2.0.0", + "mdast-util-mdx-jsx": "^3.0.0", + "mdast-util-mdxjs-esm": "^2.0.0", + "mdast-util-to-markdown": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-mdx-expression": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/mdast-util-mdx-expression/-/mdast-util-mdx-expression-2.0.1.tgz", + "integrity": "sha512-J6f+9hUp+ldTZqKRSg7Vw5V6MqjATc+3E4gf3CFNcuZNWD8XdyI6zQ8GqH7f8169MM6P7hMBRDVGnn7oHB9kXQ==", + "license": "MIT", + "dependencies": { + "@types/estree-jsx": "^1.0.0", + "@types/hast": "^3.0.0", + "@types/mdast": "^4.0.0", + "devlop": "^1.0.0", + "mdast-util-from-markdown": "^2.0.0", + "mdast-util-to-markdown": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-mdx-jsx": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/mdast-util-mdx-jsx/-/mdast-util-mdx-jsx-3.2.0.tgz", + "integrity": "sha512-lj/z8v0r6ZtsN/cGNNtemmmfoLAFZnjMbNyLzBafjzikOM+glrjNHPlf6lQDOTccj9n5b0PPihEBbhneMyGs1Q==", + "license": "MIT", + "dependencies": { + "@types/estree-jsx": "^1.0.0", + "@types/hast": "^3.0.0", + "@types/mdast": "^4.0.0", + "@types/unist": "^3.0.0", + "ccount": "^2.0.0", + "devlop": "^1.1.0", + "mdast-util-from-markdown": "^2.0.0", + "mdast-util-to-markdown": "^2.0.0", + "parse-entities": "^4.0.0", + "stringify-entities": "^4.0.0", + "unist-util-stringify-position": "^4.0.0", + "vfile-message": "^4.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-mdxjs-esm": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/mdast-util-mdxjs-esm/-/mdast-util-mdxjs-esm-2.0.1.tgz", + "integrity": "sha512-EcmOpxsZ96CvlP03NghtH1EsLtr0n9Tm4lPUJUBccV9RwUOneqSycg19n5HGzCf+10LozMRSObtVr3ee1WoHtg==", + "license": "MIT", + "dependencies": { + "@types/estree-jsx": "^1.0.0", + "@types/hast": "^3.0.0", + "@types/mdast": "^4.0.0", + "devlop": "^1.0.0", + "mdast-util-from-markdown": "^2.0.0", + "mdast-util-to-markdown": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-phrasing": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/mdast-util-phrasing/-/mdast-util-phrasing-4.1.0.tgz", + "integrity": "sha512-TqICwyvJJpBwvGAMZjj4J2n0X8QWp21b9l0o7eXyVJ25YNWYbJDVIyD1bZXE6WtV6RmKJVYmQAKWa0zWOABz2w==", + "license": "MIT", + "dependencies": { + "@types/mdast": "^4.0.0", + "unist-util-is": "^6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-to-hast": { + "version": "13.2.1", + "resolved": "https://registry.npmjs.org/mdast-util-to-hast/-/mdast-util-to-hast-13.2.1.tgz", + "integrity": "sha512-cctsq2wp5vTsLIcaymblUriiTcZd0CwWtCbLvrOzYCDZoWyMNV8sZ7krj09FSnsiJi3WVsHLM4k6Dq/yaPyCXA==", + "license": "MIT", + "dependencies": { + "@types/hast": "^3.0.0", + "@types/mdast": "^4.0.0", + "@ungap/structured-clone": "^1.0.0", + "devlop": "^1.0.0", + "micromark-util-sanitize-uri": "^2.0.0", + "trim-lines": "^3.0.0", + "unist-util-position": "^5.0.0", + "unist-util-visit": "^5.0.0", + "vfile": "^6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-to-markdown": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/mdast-util-to-markdown/-/mdast-util-to-markdown-2.1.2.tgz", + "integrity": "sha512-xj68wMTvGXVOKonmog6LwyJKrYXZPvlwabaryTjLh9LuvovB/KAH+kvi8Gjj+7rJjsFi23nkUxRQv1KqSroMqA==", + "license": "MIT", + "dependencies": { + "@types/mdast": "^4.0.0", + "@types/unist": "^3.0.0", + "longest-streak": "^3.0.0", + "mdast-util-phrasing": "^4.0.0", + "mdast-util-to-string": "^4.0.0", + "micromark-util-classify-character": "^2.0.0", + "micromark-util-decode-string": "^2.0.0", + "unist-util-visit": "^5.0.0", + "zwitch": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-to-string": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/mdast-util-to-string/-/mdast-util-to-string-4.0.0.tgz", + "integrity": "sha512-0H44vDimn51F0YwvxSJSm0eCDOJTRlmN0R1yBh4HLj9wiV1Dn0QoXGbvFAWj2hSItVTlCmBF1hqKlIyUBVFLPg==", + "license": "MIT", + "dependencies": { + "@types/mdast": "^4.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdn-data": { + "version": "2.0.30", + "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.30.tgz", + "integrity": "sha512-GaqWWShW4kv/G9IEucWScBx9G1/vsFZZJUO+tD26M8J8z3Kw5RDQjaoZe03YAClgeS/SWPOcb4nkFBTEi5DUEA==", + "license": "CC0-1.0" + }, + "node_modules/media-typer": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", + "integrity": "sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/memfs": { + "version": "4.51.1", + "resolved": "https://registry.npmjs.org/memfs/-/memfs-4.51.1.tgz", + "integrity": "sha512-Eyt3XrufitN2ZL9c/uIRMyDwXanLI88h/L3MoWqNY747ha3dMR9dWqp8cRT5ntjZ0U1TNuq4U91ZXK0sMBjYOQ==", + "license": "Apache-2.0", + "dependencies": { + "@jsonjoy.com/json-pack": "^1.11.0", + "@jsonjoy.com/util": "^1.9.0", + "glob-to-regex.js": "^1.0.1", + "thingies": "^2.5.0", + "tree-dump": "^1.0.3", + "tslib": "^2.0.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/streamich" + } + }, + "node_modules/merge-descriptors": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.3.tgz", + "integrity": "sha512-gaNvAS7TZ897/rVaZ0nMtAyxNyi/pdbjbAwUpFQpN70GqnVfOiXpeUUMKRBmzXaSQ8DdTX4/0ms62r2K+hE6mQ==", + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/merge-stream": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", + "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==", + "license": "MIT" + }, + "node_modules/merge2": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", + "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", + "license": "MIT", + "engines": { + "node": ">= 8" + } + }, + "node_modules/methods": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", + "integrity": "sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/micromark": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/micromark/-/micromark-4.0.2.tgz", + "integrity": "sha512-zpe98Q6kvavpCr1NPVSCMebCKfD7CA2NqZ+rykeNhONIJBpc1tFKt9hucLGwha3jNTNI8lHpctWJWoimVF4PfA==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "@types/debug": "^4.0.0", + "debug": "^4.0.0", + "decode-named-character-reference": "^1.0.0", + "devlop": "^1.0.0", + "micromark-core-commonmark": "^2.0.0", + "micromark-factory-space": "^2.0.0", + "micromark-util-character": "^2.0.0", + "micromark-util-chunked": "^2.0.0", + "micromark-util-combine-extensions": "^2.0.0", + "micromark-util-decode-numeric-character-reference": "^2.0.0", + "micromark-util-encode": "^2.0.0", + "micromark-util-normalize-identifier": "^2.0.0", + "micromark-util-resolve-all": "^2.0.0", + "micromark-util-sanitize-uri": "^2.0.0", + "micromark-util-subtokenize": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/micromark-core-commonmark": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/micromark-core-commonmark/-/micromark-core-commonmark-2.0.3.tgz", + "integrity": "sha512-RDBrHEMSxVFLg6xvnXmb1Ayr2WzLAWjeSATAoxwKYJV94TeNavgoIdA0a9ytzDSVzBy2YKFK+emCPOEibLeCrg==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "decode-named-character-reference": "^1.0.0", + "devlop": "^1.0.0", + "micromark-factory-destination": "^2.0.0", + "micromark-factory-label": "^2.0.0", + "micromark-factory-space": "^2.0.0", + "micromark-factory-title": "^2.0.0", + "micromark-factory-whitespace": "^2.0.0", + "micromark-util-character": "^2.0.0", + "micromark-util-chunked": "^2.0.0", + "micromark-util-classify-character": "^2.0.0", + "micromark-util-html-tag-name": "^2.0.0", + "micromark-util-normalize-identifier": "^2.0.0", + "micromark-util-resolve-all": "^2.0.0", + "micromark-util-subtokenize": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/micromark-core-commonmark/node_modules/micromark-factory-space": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-factory-space/-/micromark-factory-space-2.0.1.tgz", + "integrity": "sha512-zRkxjtBxxLd2Sc0d+fbnEunsTj46SWXgXciZmHq0kDYGnck/ZSGj9/wULTV95uoeYiK5hRXP2mJ98Uo4cq/LQg==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "micromark-util-character": "^2.0.0", + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/micromark-core-commonmark/node_modules/micromark-util-character": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/micromark-util-character/-/micromark-util-character-2.1.1.tgz", + "integrity": "sha512-wv8tdUTJ3thSFFFJKtpYKOYiGP2+v96Hvk4Tu8KpCAsTMs6yi+nVmGh1syvSCsaxz45J6Jbw+9DD6g97+NV67Q==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/micromark-core-commonmark/node_modules/micromark-util-symbol": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-util-symbol/-/micromark-util-symbol-2.0.1.tgz", + "integrity": "sha512-vs5t8Apaud9N28kgCrRUdEed4UJ+wWNvicHLPxCa9ENlYuAY31M0ETy5y1vA33YoNPDFTghEbnh6efaE8h4x0Q==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT" + }, + "node_modules/micromark-extension-directive": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/micromark-extension-directive/-/micromark-extension-directive-3.0.2.tgz", + "integrity": "sha512-wjcXHgk+PPdmvR58Le9d7zQYWy+vKEU9Se44p2CrCDPiLr2FMyiT4Fyb5UFKFC66wGB3kPlgD7q3TnoqPS7SZA==", + "license": "MIT", + "dependencies": { + "devlop": "^1.0.0", + "micromark-factory-space": "^2.0.0", + "micromark-factory-whitespace": "^2.0.0", + "micromark-util-character": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0", + "parse-entities": "^4.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/micromark-extension-directive/node_modules/micromark-factory-space": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-factory-space/-/micromark-factory-space-2.0.1.tgz", + "integrity": "sha512-zRkxjtBxxLd2Sc0d+fbnEunsTj46SWXgXciZmHq0kDYGnck/ZSGj9/wULTV95uoeYiK5hRXP2mJ98Uo4cq/LQg==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "micromark-util-character": "^2.0.0", + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/micromark-extension-directive/node_modules/micromark-util-character": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/micromark-util-character/-/micromark-util-character-2.1.1.tgz", + "integrity": "sha512-wv8tdUTJ3thSFFFJKtpYKOYiGP2+v96Hvk4Tu8KpCAsTMs6yi+nVmGh1syvSCsaxz45J6Jbw+9DD6g97+NV67Q==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/micromark-extension-directive/node_modules/micromark-util-symbol": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-util-symbol/-/micromark-util-symbol-2.0.1.tgz", + "integrity": "sha512-vs5t8Apaud9N28kgCrRUdEed4UJ+wWNvicHLPxCa9ENlYuAY31M0ETy5y1vA33YoNPDFTghEbnh6efaE8h4x0Q==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT" + }, + "node_modules/micromark-extension-frontmatter": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/micromark-extension-frontmatter/-/micromark-extension-frontmatter-2.0.0.tgz", + "integrity": "sha512-C4AkuM3dA58cgZha7zVnuVxBhDsbttIMiytjgsM2XbHAB2faRVaHRle40558FBN+DJcrLNCoqG5mlrpdU4cRtg==", + "license": "MIT", + "dependencies": { + "fault": "^2.0.0", + "micromark-util-character": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/micromark-extension-frontmatter/node_modules/micromark-util-character": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/micromark-util-character/-/micromark-util-character-2.1.1.tgz", + "integrity": "sha512-wv8tdUTJ3thSFFFJKtpYKOYiGP2+v96Hvk4Tu8KpCAsTMs6yi+nVmGh1syvSCsaxz45J6Jbw+9DD6g97+NV67Q==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/micromark-extension-frontmatter/node_modules/micromark-util-symbol": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-util-symbol/-/micromark-util-symbol-2.0.1.tgz", + "integrity": "sha512-vs5t8Apaud9N28kgCrRUdEed4UJ+wWNvicHLPxCa9ENlYuAY31M0ETy5y1vA33YoNPDFTghEbnh6efaE8h4x0Q==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT" + }, + "node_modules/micromark-extension-gfm": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/micromark-extension-gfm/-/micromark-extension-gfm-3.0.0.tgz", + "integrity": "sha512-vsKArQsicm7t0z2GugkCKtZehqUm31oeGBV/KVSorWSy8ZlNAv7ytjFhvaryUiCUJYqs+NoE6AFhpQvBTM6Q4w==", + "license": "MIT", + "dependencies": { + "micromark-extension-gfm-autolink-literal": "^2.0.0", + "micromark-extension-gfm-footnote": "^2.0.0", + "micromark-extension-gfm-strikethrough": "^2.0.0", + "micromark-extension-gfm-table": "^2.0.0", + "micromark-extension-gfm-tagfilter": "^2.0.0", + "micromark-extension-gfm-task-list-item": "^2.0.0", + "micromark-util-combine-extensions": "^2.0.0", + "micromark-util-types": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/micromark-extension-gfm-autolink-literal": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/micromark-extension-gfm-autolink-literal/-/micromark-extension-gfm-autolink-literal-2.1.0.tgz", + "integrity": "sha512-oOg7knzhicgQ3t4QCjCWgTmfNhvQbDDnJeVu9v81r7NltNCVmhPy1fJRX27pISafdjL+SVc4d3l48Gb6pbRypw==", + "license": "MIT", + "dependencies": { + "micromark-util-character": "^2.0.0", + "micromark-util-sanitize-uri": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/micromark-extension-gfm-autolink-literal/node_modules/micromark-util-character": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/micromark-util-character/-/micromark-util-character-2.1.1.tgz", + "integrity": "sha512-wv8tdUTJ3thSFFFJKtpYKOYiGP2+v96Hvk4Tu8KpCAsTMs6yi+nVmGh1syvSCsaxz45J6Jbw+9DD6g97+NV67Q==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/micromark-extension-gfm-autolink-literal/node_modules/micromark-util-symbol": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-util-symbol/-/micromark-util-symbol-2.0.1.tgz", + "integrity": "sha512-vs5t8Apaud9N28kgCrRUdEed4UJ+wWNvicHLPxCa9ENlYuAY31M0ETy5y1vA33YoNPDFTghEbnh6efaE8h4x0Q==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT" + }, + "node_modules/micromark-extension-gfm-footnote": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/micromark-extension-gfm-footnote/-/micromark-extension-gfm-footnote-2.1.0.tgz", + "integrity": "sha512-/yPhxI1ntnDNsiHtzLKYnE3vf9JZ6cAisqVDauhp4CEHxlb4uoOTxOCJ+9s51bIB8U1N1FJ1RXOKTIlD5B/gqw==", + "license": "MIT", + "dependencies": { + "devlop": "^1.0.0", + "micromark-core-commonmark": "^2.0.0", + "micromark-factory-space": "^2.0.0", + "micromark-util-character": "^2.0.0", + "micromark-util-normalize-identifier": "^2.0.0", + "micromark-util-sanitize-uri": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/micromark-extension-gfm-footnote/node_modules/micromark-factory-space": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-factory-space/-/micromark-factory-space-2.0.1.tgz", + "integrity": "sha512-zRkxjtBxxLd2Sc0d+fbnEunsTj46SWXgXciZmHq0kDYGnck/ZSGj9/wULTV95uoeYiK5hRXP2mJ98Uo4cq/LQg==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "micromark-util-character": "^2.0.0", + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/micromark-extension-gfm-footnote/node_modules/micromark-util-character": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/micromark-util-character/-/micromark-util-character-2.1.1.tgz", + "integrity": "sha512-wv8tdUTJ3thSFFFJKtpYKOYiGP2+v96Hvk4Tu8KpCAsTMs6yi+nVmGh1syvSCsaxz45J6Jbw+9DD6g97+NV67Q==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/micromark-extension-gfm-footnote/node_modules/micromark-util-symbol": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-util-symbol/-/micromark-util-symbol-2.0.1.tgz", + "integrity": "sha512-vs5t8Apaud9N28kgCrRUdEed4UJ+wWNvicHLPxCa9ENlYuAY31M0ETy5y1vA33YoNPDFTghEbnh6efaE8h4x0Q==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT" + }, + "node_modules/micromark-extension-gfm-strikethrough": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/micromark-extension-gfm-strikethrough/-/micromark-extension-gfm-strikethrough-2.1.0.tgz", + "integrity": "sha512-ADVjpOOkjz1hhkZLlBiYA9cR2Anf8F4HqZUO6e5eDcPQd0Txw5fxLzzxnEkSkfnD0wziSGiv7sYhk/ktvbf1uw==", + "license": "MIT", + "dependencies": { + "devlop": "^1.0.0", + "micromark-util-chunked": "^2.0.0", + "micromark-util-classify-character": "^2.0.0", + "micromark-util-resolve-all": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/micromark-extension-gfm-strikethrough/node_modules/micromark-util-symbol": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-util-symbol/-/micromark-util-symbol-2.0.1.tgz", + "integrity": "sha512-vs5t8Apaud9N28kgCrRUdEed4UJ+wWNvicHLPxCa9ENlYuAY31M0ETy5y1vA33YoNPDFTghEbnh6efaE8h4x0Q==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT" + }, + "node_modules/micromark-extension-gfm-table": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/micromark-extension-gfm-table/-/micromark-extension-gfm-table-2.1.1.tgz", + "integrity": "sha512-t2OU/dXXioARrC6yWfJ4hqB7rct14e8f7m0cbI5hUmDyyIlwv5vEtooptH8INkbLzOatzKuVbQmAYcbWoyz6Dg==", + "license": "MIT", + "dependencies": { + "devlop": "^1.0.0", + "micromark-factory-space": "^2.0.0", + "micromark-util-character": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/micromark-extension-gfm-table/node_modules/micromark-factory-space": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-factory-space/-/micromark-factory-space-2.0.1.tgz", + "integrity": "sha512-zRkxjtBxxLd2Sc0d+fbnEunsTj46SWXgXciZmHq0kDYGnck/ZSGj9/wULTV95uoeYiK5hRXP2mJ98Uo4cq/LQg==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "micromark-util-character": "^2.0.0", + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/micromark-extension-gfm-table/node_modules/micromark-util-character": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/micromark-util-character/-/micromark-util-character-2.1.1.tgz", + "integrity": "sha512-wv8tdUTJ3thSFFFJKtpYKOYiGP2+v96Hvk4Tu8KpCAsTMs6yi+nVmGh1syvSCsaxz45J6Jbw+9DD6g97+NV67Q==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/micromark-extension-gfm-table/node_modules/micromark-util-symbol": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-util-symbol/-/micromark-util-symbol-2.0.1.tgz", + "integrity": "sha512-vs5t8Apaud9N28kgCrRUdEed4UJ+wWNvicHLPxCa9ENlYuAY31M0ETy5y1vA33YoNPDFTghEbnh6efaE8h4x0Q==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT" + }, + "node_modules/micromark-extension-gfm-tagfilter": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/micromark-extension-gfm-tagfilter/-/micromark-extension-gfm-tagfilter-2.0.0.tgz", + "integrity": "sha512-xHlTOmuCSotIA8TW1mDIM6X2O1SiX5P9IuDtqGonFhEK0qgRI4yeC6vMxEV2dgyr2TiD+2PQ10o+cOhdVAcwfg==", + "license": "MIT", + "dependencies": { + "micromark-util-types": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/micromark-extension-gfm-task-list-item": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/micromark-extension-gfm-task-list-item/-/micromark-extension-gfm-task-list-item-2.1.0.tgz", + "integrity": "sha512-qIBZhqxqI6fjLDYFTBIa4eivDMnP+OZqsNwmQ3xNLE4Cxwc+zfQEfbs6tzAo2Hjq+bh6q5F+Z8/cksrLFYWQQw==", + "license": "MIT", + "dependencies": { + "devlop": "^1.0.0", + "micromark-factory-space": "^2.0.0", + "micromark-util-character": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/micromark-extension-gfm-task-list-item/node_modules/micromark-factory-space": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-factory-space/-/micromark-factory-space-2.0.1.tgz", + "integrity": "sha512-zRkxjtBxxLd2Sc0d+fbnEunsTj46SWXgXciZmHq0kDYGnck/ZSGj9/wULTV95uoeYiK5hRXP2mJ98Uo4cq/LQg==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "micromark-util-character": "^2.0.0", + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/micromark-extension-gfm-task-list-item/node_modules/micromark-util-character": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/micromark-util-character/-/micromark-util-character-2.1.1.tgz", + "integrity": "sha512-wv8tdUTJ3thSFFFJKtpYKOYiGP2+v96Hvk4Tu8KpCAsTMs6yi+nVmGh1syvSCsaxz45J6Jbw+9DD6g97+NV67Q==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/micromark-extension-gfm-task-list-item/node_modules/micromark-util-symbol": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-util-symbol/-/micromark-util-symbol-2.0.1.tgz", + "integrity": "sha512-vs5t8Apaud9N28kgCrRUdEed4UJ+wWNvicHLPxCa9ENlYuAY31M0ETy5y1vA33YoNPDFTghEbnh6efaE8h4x0Q==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT" + }, + "node_modules/micromark-extension-mdx-expression": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/micromark-extension-mdx-expression/-/micromark-extension-mdx-expression-3.0.1.tgz", + "integrity": "sha512-dD/ADLJ1AeMvSAKBwO22zG22N4ybhe7kFIZ3LsDI0GlsNr2A3KYxb0LdC1u5rj4Nw+CHKY0RVdnHX8vj8ejm4Q==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "@types/estree": "^1.0.0", + "devlop": "^1.0.0", + "micromark-factory-mdx-expression": "^2.0.0", + "micromark-factory-space": "^2.0.0", + "micromark-util-character": "^2.0.0", + "micromark-util-events-to-acorn": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/micromark-extension-mdx-expression/node_modules/micromark-factory-space": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-factory-space/-/micromark-factory-space-2.0.1.tgz", + "integrity": "sha512-zRkxjtBxxLd2Sc0d+fbnEunsTj46SWXgXciZmHq0kDYGnck/ZSGj9/wULTV95uoeYiK5hRXP2mJ98Uo4cq/LQg==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "micromark-util-character": "^2.0.0", + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/micromark-extension-mdx-expression/node_modules/micromark-util-character": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/micromark-util-character/-/micromark-util-character-2.1.1.tgz", + "integrity": "sha512-wv8tdUTJ3thSFFFJKtpYKOYiGP2+v96Hvk4Tu8KpCAsTMs6yi+nVmGh1syvSCsaxz45J6Jbw+9DD6g97+NV67Q==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/micromark-extension-mdx-expression/node_modules/micromark-util-symbol": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-util-symbol/-/micromark-util-symbol-2.0.1.tgz", + "integrity": "sha512-vs5t8Apaud9N28kgCrRUdEed4UJ+wWNvicHLPxCa9ENlYuAY31M0ETy5y1vA33YoNPDFTghEbnh6efaE8h4x0Q==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT" + }, + "node_modules/micromark-extension-mdx-jsx": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/micromark-extension-mdx-jsx/-/micromark-extension-mdx-jsx-3.0.2.tgz", + "integrity": "sha512-e5+q1DjMh62LZAJOnDraSSbDMvGJ8x3cbjygy2qFEi7HCeUT4BDKCvMozPozcD6WmOt6sVvYDNBKhFSz3kjOVQ==", + "license": "MIT", + "dependencies": { + "@types/estree": "^1.0.0", + "devlop": "^1.0.0", + "estree-util-is-identifier-name": "^3.0.0", + "micromark-factory-mdx-expression": "^2.0.0", + "micromark-factory-space": "^2.0.0", + "micromark-util-character": "^2.0.0", + "micromark-util-events-to-acorn": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0", + "vfile-message": "^4.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/micromark-extension-mdx-jsx/node_modules/micromark-factory-space": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-factory-space/-/micromark-factory-space-2.0.1.tgz", + "integrity": "sha512-zRkxjtBxxLd2Sc0d+fbnEunsTj46SWXgXciZmHq0kDYGnck/ZSGj9/wULTV95uoeYiK5hRXP2mJ98Uo4cq/LQg==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "micromark-util-character": "^2.0.0", + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/micromark-extension-mdx-jsx/node_modules/micromark-util-character": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/micromark-util-character/-/micromark-util-character-2.1.1.tgz", + "integrity": "sha512-wv8tdUTJ3thSFFFJKtpYKOYiGP2+v96Hvk4Tu8KpCAsTMs6yi+nVmGh1syvSCsaxz45J6Jbw+9DD6g97+NV67Q==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/micromark-extension-mdx-jsx/node_modules/micromark-util-symbol": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-util-symbol/-/micromark-util-symbol-2.0.1.tgz", + "integrity": "sha512-vs5t8Apaud9N28kgCrRUdEed4UJ+wWNvicHLPxCa9ENlYuAY31M0ETy5y1vA33YoNPDFTghEbnh6efaE8h4x0Q==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT" + }, + "node_modules/micromark-extension-mdx-md": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/micromark-extension-mdx-md/-/micromark-extension-mdx-md-2.0.0.tgz", + "integrity": "sha512-EpAiszsB3blw4Rpba7xTOUptcFeBFi+6PY8VnJ2hhimH+vCQDirWgsMpz7w1XcZE7LVrSAUGb9VJpG9ghlYvYQ==", + "license": "MIT", + "dependencies": { + "micromark-util-types": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/micromark-extension-mdxjs": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/micromark-extension-mdxjs/-/micromark-extension-mdxjs-3.0.0.tgz", + "integrity": "sha512-A873fJfhnJ2siZyUrJ31l34Uqwy4xIFmvPY1oj+Ean5PHcPBYzEsvqvWGaWcfEIr11O5Dlw3p2y0tZWpKHDejQ==", + "license": "MIT", + "dependencies": { + "acorn": "^8.0.0", + "acorn-jsx": "^5.0.0", + "micromark-extension-mdx-expression": "^3.0.0", + "micromark-extension-mdx-jsx": "^3.0.0", + "micromark-extension-mdx-md": "^2.0.0", + "micromark-extension-mdxjs-esm": "^3.0.0", + "micromark-util-combine-extensions": "^2.0.0", + "micromark-util-types": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/micromark-extension-mdxjs-esm": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/micromark-extension-mdxjs-esm/-/micromark-extension-mdxjs-esm-3.0.0.tgz", + "integrity": "sha512-DJFl4ZqkErRpq/dAPyeWp15tGrcrrJho1hKK5uBS70BCtfrIFg81sqcTVu3Ta+KD1Tk5vAtBNElWxtAa+m8K9A==", + "license": "MIT", + "dependencies": { + "@types/estree": "^1.0.0", + "devlop": "^1.0.0", + "micromark-core-commonmark": "^2.0.0", + "micromark-util-character": "^2.0.0", + "micromark-util-events-to-acorn": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0", + "unist-util-position-from-estree": "^2.0.0", + "vfile-message": "^4.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/micromark-extension-mdxjs-esm/node_modules/micromark-util-character": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/micromark-util-character/-/micromark-util-character-2.1.1.tgz", + "integrity": "sha512-wv8tdUTJ3thSFFFJKtpYKOYiGP2+v96Hvk4Tu8KpCAsTMs6yi+nVmGh1syvSCsaxz45J6Jbw+9DD6g97+NV67Q==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/micromark-extension-mdxjs-esm/node_modules/micromark-util-symbol": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-util-symbol/-/micromark-util-symbol-2.0.1.tgz", + "integrity": "sha512-vs5t8Apaud9N28kgCrRUdEed4UJ+wWNvicHLPxCa9ENlYuAY31M0ETy5y1vA33YoNPDFTghEbnh6efaE8h4x0Q==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT" + }, + "node_modules/micromark-factory-destination": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-factory-destination/-/micromark-factory-destination-2.0.1.tgz", + "integrity": "sha512-Xe6rDdJlkmbFRExpTOmRj9N3MaWmbAgdpSrBQvCFqhezUn4AHqJHbaEnfbVYYiexVSs//tqOdY/DxhjdCiJnIA==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "micromark-util-character": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/micromark-factory-destination/node_modules/micromark-util-character": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/micromark-util-character/-/micromark-util-character-2.1.1.tgz", + "integrity": "sha512-wv8tdUTJ3thSFFFJKtpYKOYiGP2+v96Hvk4Tu8KpCAsTMs6yi+nVmGh1syvSCsaxz45J6Jbw+9DD6g97+NV67Q==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/micromark-factory-destination/node_modules/micromark-util-symbol": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-util-symbol/-/micromark-util-symbol-2.0.1.tgz", + "integrity": "sha512-vs5t8Apaud9N28kgCrRUdEed4UJ+wWNvicHLPxCa9ENlYuAY31M0ETy5y1vA33YoNPDFTghEbnh6efaE8h4x0Q==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT" + }, + "node_modules/micromark-factory-label": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-factory-label/-/micromark-factory-label-2.0.1.tgz", + "integrity": "sha512-VFMekyQExqIW7xIChcXn4ok29YE3rnuyveW3wZQWWqF4Nv9Wk5rgJ99KzPvHjkmPXF93FXIbBp6YdW3t71/7Vg==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "devlop": "^1.0.0", + "micromark-util-character": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/micromark-factory-label/node_modules/micromark-util-character": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/micromark-util-character/-/micromark-util-character-2.1.1.tgz", + "integrity": "sha512-wv8tdUTJ3thSFFFJKtpYKOYiGP2+v96Hvk4Tu8KpCAsTMs6yi+nVmGh1syvSCsaxz45J6Jbw+9DD6g97+NV67Q==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/micromark-factory-label/node_modules/micromark-util-symbol": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-util-symbol/-/micromark-util-symbol-2.0.1.tgz", + "integrity": "sha512-vs5t8Apaud9N28kgCrRUdEed4UJ+wWNvicHLPxCa9ENlYuAY31M0ETy5y1vA33YoNPDFTghEbnh6efaE8h4x0Q==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT" + }, + "node_modules/micromark-factory-mdx-expression": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/micromark-factory-mdx-expression/-/micromark-factory-mdx-expression-2.0.3.tgz", + "integrity": "sha512-kQnEtA3vzucU2BkrIa8/VaSAsP+EJ3CKOvhMuJgOEGg9KDC6OAY6nSnNDVRiVNRqj7Y4SlSzcStaH/5jge8JdQ==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "@types/estree": "^1.0.0", + "devlop": "^1.0.0", + "micromark-factory-space": "^2.0.0", + "micromark-util-character": "^2.0.0", + "micromark-util-events-to-acorn": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0", + "unist-util-position-from-estree": "^2.0.0", + "vfile-message": "^4.0.0" + } + }, + "node_modules/micromark-factory-mdx-expression/node_modules/micromark-factory-space": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-factory-space/-/micromark-factory-space-2.0.1.tgz", + "integrity": "sha512-zRkxjtBxxLd2Sc0d+fbnEunsTj46SWXgXciZmHq0kDYGnck/ZSGj9/wULTV95uoeYiK5hRXP2mJ98Uo4cq/LQg==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "micromark-util-character": "^2.0.0", + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/micromark-factory-mdx-expression/node_modules/micromark-util-character": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/micromark-util-character/-/micromark-util-character-2.1.1.tgz", + "integrity": "sha512-wv8tdUTJ3thSFFFJKtpYKOYiGP2+v96Hvk4Tu8KpCAsTMs6yi+nVmGh1syvSCsaxz45J6Jbw+9DD6g97+NV67Q==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/micromark-factory-mdx-expression/node_modules/micromark-util-symbol": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-util-symbol/-/micromark-util-symbol-2.0.1.tgz", + "integrity": "sha512-vs5t8Apaud9N28kgCrRUdEed4UJ+wWNvicHLPxCa9ENlYuAY31M0ETy5y1vA33YoNPDFTghEbnh6efaE8h4x0Q==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT" + }, + "node_modules/micromark-factory-space": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/micromark-factory-space/-/micromark-factory-space-1.1.0.tgz", + "integrity": "sha512-cRzEj7c0OL4Mw2v6nwzttyOZe8XY/Z8G0rzmWQZTBi/jjwyw/U4uqKtUORXQrR5bAZZnbTI/feRV/R7hc4jQYQ==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "micromark-util-character": "^1.0.0", + "micromark-util-types": "^1.0.0" + } + }, + "node_modules/micromark-factory-space/node_modules/micromark-util-types": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/micromark-util-types/-/micromark-util-types-1.1.0.tgz", + "integrity": "sha512-ukRBgie8TIAcacscVHSiddHjO4k/q3pnedmzMQ4iwDcK0FtFCohKOlFbaOL/mPgfnPsL3C1ZyxJa4sbWrBl3jg==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT" + }, + "node_modules/micromark-factory-title": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-factory-title/-/micromark-factory-title-2.0.1.tgz", + "integrity": "sha512-5bZ+3CjhAd9eChYTHsjy6TGxpOFSKgKKJPJxr293jTbfry2KDoWkhBb6TcPVB4NmzaPhMs1Frm9AZH7OD4Cjzw==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "micromark-factory-space": "^2.0.0", + "micromark-util-character": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/micromark-factory-title/node_modules/micromark-factory-space": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-factory-space/-/micromark-factory-space-2.0.1.tgz", + "integrity": "sha512-zRkxjtBxxLd2Sc0d+fbnEunsTj46SWXgXciZmHq0kDYGnck/ZSGj9/wULTV95uoeYiK5hRXP2mJ98Uo4cq/LQg==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "micromark-util-character": "^2.0.0", + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/micromark-factory-title/node_modules/micromark-util-character": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/micromark-util-character/-/micromark-util-character-2.1.1.tgz", + "integrity": "sha512-wv8tdUTJ3thSFFFJKtpYKOYiGP2+v96Hvk4Tu8KpCAsTMs6yi+nVmGh1syvSCsaxz45J6Jbw+9DD6g97+NV67Q==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/micromark-factory-title/node_modules/micromark-util-symbol": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-util-symbol/-/micromark-util-symbol-2.0.1.tgz", + "integrity": "sha512-vs5t8Apaud9N28kgCrRUdEed4UJ+wWNvicHLPxCa9ENlYuAY31M0ETy5y1vA33YoNPDFTghEbnh6efaE8h4x0Q==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT" + }, + "node_modules/micromark-factory-whitespace": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-factory-whitespace/-/micromark-factory-whitespace-2.0.1.tgz", + "integrity": "sha512-Ob0nuZ3PKt/n0hORHyvoD9uZhr+Za8sFoP+OnMcnWK5lngSzALgQYKMr9RJVOWLqQYuyn6ulqGWSXdwf6F80lQ==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "micromark-factory-space": "^2.0.0", + "micromark-util-character": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/micromark-factory-whitespace/node_modules/micromark-factory-space": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-factory-space/-/micromark-factory-space-2.0.1.tgz", + "integrity": "sha512-zRkxjtBxxLd2Sc0d+fbnEunsTj46SWXgXciZmHq0kDYGnck/ZSGj9/wULTV95uoeYiK5hRXP2mJ98Uo4cq/LQg==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "micromark-util-character": "^2.0.0", + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/micromark-factory-whitespace/node_modules/micromark-util-character": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/micromark-util-character/-/micromark-util-character-2.1.1.tgz", + "integrity": "sha512-wv8tdUTJ3thSFFFJKtpYKOYiGP2+v96Hvk4Tu8KpCAsTMs6yi+nVmGh1syvSCsaxz45J6Jbw+9DD6g97+NV67Q==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/micromark-factory-whitespace/node_modules/micromark-util-symbol": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-util-symbol/-/micromark-util-symbol-2.0.1.tgz", + "integrity": "sha512-vs5t8Apaud9N28kgCrRUdEed4UJ+wWNvicHLPxCa9ENlYuAY31M0ETy5y1vA33YoNPDFTghEbnh6efaE8h4x0Q==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT" + }, + "node_modules/micromark-util-character": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/micromark-util-character/-/micromark-util-character-1.2.0.tgz", + "integrity": "sha512-lXraTwcX3yH/vMDaFWCQJP1uIszLVebzUa3ZHdrgxr7KEU/9mL4mVgCpGbyhvNLNlauROiNUq7WN5u7ndbY6xg==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "micromark-util-symbol": "^1.0.0", + "micromark-util-types": "^1.0.0" + } + }, + "node_modules/micromark-util-character/node_modules/micromark-util-types": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/micromark-util-types/-/micromark-util-types-1.1.0.tgz", + "integrity": "sha512-ukRBgie8TIAcacscVHSiddHjO4k/q3pnedmzMQ4iwDcK0FtFCohKOlFbaOL/mPgfnPsL3C1ZyxJa4sbWrBl3jg==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT" + }, + "node_modules/micromark-util-chunked": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-util-chunked/-/micromark-util-chunked-2.0.1.tgz", + "integrity": "sha512-QUNFEOPELfmvv+4xiNg2sRYeS/P84pTW0TCgP5zc9FpXetHY0ab7SxKyAQCNCc1eK0459uoLI1y5oO5Vc1dbhA==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "micromark-util-symbol": "^2.0.0" + } + }, + "node_modules/micromark-util-chunked/node_modules/micromark-util-symbol": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-util-symbol/-/micromark-util-symbol-2.0.1.tgz", + "integrity": "sha512-vs5t8Apaud9N28kgCrRUdEed4UJ+wWNvicHLPxCa9ENlYuAY31M0ETy5y1vA33YoNPDFTghEbnh6efaE8h4x0Q==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT" + }, + "node_modules/micromark-util-classify-character": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-util-classify-character/-/micromark-util-classify-character-2.0.1.tgz", + "integrity": "sha512-K0kHzM6afW/MbeWYWLjoHQv1sgg2Q9EccHEDzSkxiP/EaagNzCm7T/WMKZ3rjMbvIpvBiZgwR3dKMygtA4mG1Q==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "micromark-util-character": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/micromark-util-classify-character/node_modules/micromark-util-character": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/micromark-util-character/-/micromark-util-character-2.1.1.tgz", + "integrity": "sha512-wv8tdUTJ3thSFFFJKtpYKOYiGP2+v96Hvk4Tu8KpCAsTMs6yi+nVmGh1syvSCsaxz45J6Jbw+9DD6g97+NV67Q==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/micromark-util-classify-character/node_modules/micromark-util-symbol": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-util-symbol/-/micromark-util-symbol-2.0.1.tgz", + "integrity": "sha512-vs5t8Apaud9N28kgCrRUdEed4UJ+wWNvicHLPxCa9ENlYuAY31M0ETy5y1vA33YoNPDFTghEbnh6efaE8h4x0Q==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT" + }, + "node_modules/micromark-util-combine-extensions": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-util-combine-extensions/-/micromark-util-combine-extensions-2.0.1.tgz", + "integrity": "sha512-OnAnH8Ujmy59JcyZw8JSbK9cGpdVY44NKgSM7E9Eh7DiLS2E9RNQf0dONaGDzEG9yjEl5hcqeIsj4hfRkLH/Bg==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "micromark-util-chunked": "^2.0.0", + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/micromark-util-decode-numeric-character-reference": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/micromark-util-decode-numeric-character-reference/-/micromark-util-decode-numeric-character-reference-2.0.2.tgz", + "integrity": "sha512-ccUbYk6CwVdkmCQMyr64dXz42EfHGkPQlBj5p7YVGzq8I7CtjXZJrubAYezf7Rp+bjPseiROqe7G6foFd+lEuw==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "micromark-util-symbol": "^2.0.0" + } + }, + "node_modules/micromark-util-decode-numeric-character-reference/node_modules/micromark-util-symbol": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-util-symbol/-/micromark-util-symbol-2.0.1.tgz", + "integrity": "sha512-vs5t8Apaud9N28kgCrRUdEed4UJ+wWNvicHLPxCa9ENlYuAY31M0ETy5y1vA33YoNPDFTghEbnh6efaE8h4x0Q==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT" + }, + "node_modules/micromark-util-decode-string": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-util-decode-string/-/micromark-util-decode-string-2.0.1.tgz", + "integrity": "sha512-nDV/77Fj6eH1ynwscYTOsbK7rR//Uj0bZXBwJZRfaLEJ1iGBR6kIfNmlNqaqJf649EP0F3NWNdeJi03elllNUQ==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "decode-named-character-reference": "^1.0.0", + "micromark-util-character": "^2.0.0", + "micromark-util-decode-numeric-character-reference": "^2.0.0", + "micromark-util-symbol": "^2.0.0" + } + }, + "node_modules/micromark-util-decode-string/node_modules/micromark-util-character": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/micromark-util-character/-/micromark-util-character-2.1.1.tgz", + "integrity": "sha512-wv8tdUTJ3thSFFFJKtpYKOYiGP2+v96Hvk4Tu8KpCAsTMs6yi+nVmGh1syvSCsaxz45J6Jbw+9DD6g97+NV67Q==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/micromark-util-decode-string/node_modules/micromark-util-symbol": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-util-symbol/-/micromark-util-symbol-2.0.1.tgz", + "integrity": "sha512-vs5t8Apaud9N28kgCrRUdEed4UJ+wWNvicHLPxCa9ENlYuAY31M0ETy5y1vA33YoNPDFTghEbnh6efaE8h4x0Q==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT" + }, + "node_modules/micromark-util-encode": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-util-encode/-/micromark-util-encode-2.0.1.tgz", + "integrity": "sha512-c3cVx2y4KqUnwopcO9b/SCdo2O67LwJJ/UyqGfbigahfegL9myoEFoDYZgkT7f36T0bLrM9hZTAaAyH+PCAXjw==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT" + }, + "node_modules/micromark-util-events-to-acorn": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/micromark-util-events-to-acorn/-/micromark-util-events-to-acorn-2.0.3.tgz", + "integrity": "sha512-jmsiEIiZ1n7X1Rr5k8wVExBQCg5jy4UXVADItHmNk1zkwEVhBuIUKRu3fqv+hs4nxLISi2DQGlqIOGiFxgbfHg==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "@types/estree": "^1.0.0", + "@types/unist": "^3.0.0", + "devlop": "^1.0.0", + "estree-util-visit": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0", + "vfile-message": "^4.0.0" + } + }, + "node_modules/micromark-util-events-to-acorn/node_modules/micromark-util-symbol": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-util-symbol/-/micromark-util-symbol-2.0.1.tgz", + "integrity": "sha512-vs5t8Apaud9N28kgCrRUdEed4UJ+wWNvicHLPxCa9ENlYuAY31M0ETy5y1vA33YoNPDFTghEbnh6efaE8h4x0Q==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT" + }, + "node_modules/micromark-util-html-tag-name": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-util-html-tag-name/-/micromark-util-html-tag-name-2.0.1.tgz", + "integrity": "sha512-2cNEiYDhCWKI+Gs9T0Tiysk136SnR13hhO8yW6BGNyhOC4qYFnwF1nKfD3HFAIXA5c45RrIG1ub11GiXeYd1xA==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT" + }, + "node_modules/micromark-util-normalize-identifier": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-util-normalize-identifier/-/micromark-util-normalize-identifier-2.0.1.tgz", + "integrity": "sha512-sxPqmo70LyARJs0w2UclACPUUEqltCkJ6PhKdMIDuJ3gSf/Q+/GIe3WKl0Ijb/GyH9lOpUkRAO2wp0GVkLvS9Q==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "micromark-util-symbol": "^2.0.0" + } + }, + "node_modules/micromark-util-normalize-identifier/node_modules/micromark-util-symbol": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-util-symbol/-/micromark-util-symbol-2.0.1.tgz", + "integrity": "sha512-vs5t8Apaud9N28kgCrRUdEed4UJ+wWNvicHLPxCa9ENlYuAY31M0ETy5y1vA33YoNPDFTghEbnh6efaE8h4x0Q==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT" + }, + "node_modules/micromark-util-resolve-all": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-util-resolve-all/-/micromark-util-resolve-all-2.0.1.tgz", + "integrity": "sha512-VdQyxFWFT2/FGJgwQnJYbe1jjQoNTS4RjglmSjTUlpUMa95Htx9NHeYW4rGDJzbjvCsl9eLjMQwGeElsqmzcHg==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/micromark-util-sanitize-uri": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-util-sanitize-uri/-/micromark-util-sanitize-uri-2.0.1.tgz", + "integrity": "sha512-9N9IomZ/YuGGZZmQec1MbgxtlgougxTodVwDzzEouPKo3qFWvymFHWcnDi2vzV1ff6kas9ucW+o3yzJK9YB1AQ==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "micromark-util-character": "^2.0.0", + "micromark-util-encode": "^2.0.0", + "micromark-util-symbol": "^2.0.0" + } + }, + "node_modules/micromark-util-sanitize-uri/node_modules/micromark-util-character": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/micromark-util-character/-/micromark-util-character-2.1.1.tgz", + "integrity": "sha512-wv8tdUTJ3thSFFFJKtpYKOYiGP2+v96Hvk4Tu8KpCAsTMs6yi+nVmGh1syvSCsaxz45J6Jbw+9DD6g97+NV67Q==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/micromark-util-sanitize-uri/node_modules/micromark-util-symbol": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-util-symbol/-/micromark-util-symbol-2.0.1.tgz", + "integrity": "sha512-vs5t8Apaud9N28kgCrRUdEed4UJ+wWNvicHLPxCa9ENlYuAY31M0ETy5y1vA33YoNPDFTghEbnh6efaE8h4x0Q==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT" + }, + "node_modules/micromark-util-subtokenize": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/micromark-util-subtokenize/-/micromark-util-subtokenize-2.1.0.tgz", + "integrity": "sha512-XQLu552iSctvnEcgXw6+Sx75GflAPNED1qx7eBJ+wydBb2KCbRZe+NwvIEEMM83uml1+2WSXpBAcp9IUCgCYWA==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "devlop": "^1.0.0", + "micromark-util-chunked": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/micromark-util-subtokenize/node_modules/micromark-util-symbol": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-util-symbol/-/micromark-util-symbol-2.0.1.tgz", + "integrity": "sha512-vs5t8Apaud9N28kgCrRUdEed4UJ+wWNvicHLPxCa9ENlYuAY31M0ETy5y1vA33YoNPDFTghEbnh6efaE8h4x0Q==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT" + }, + "node_modules/micromark-util-symbol": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/micromark-util-symbol/-/micromark-util-symbol-1.1.0.tgz", + "integrity": "sha512-uEjpEYY6KMs1g7QfJ2eX1SQEV+ZT4rUD3UcF6l57acZvLNK7PBZL+ty82Z1qhK1/yXIY4bdx04FKMgR0g4IAag==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT" + }, + "node_modules/micromark-util-types": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/micromark-util-types/-/micromark-util-types-2.0.2.tgz", + "integrity": "sha512-Yw0ECSpJoViF1qTU4DC6NwtC4aWGt1EkzaQB8KPPyCRR8z9TWeV0HbEFGTO+ZY1wB22zmxnJqhPyTpOVCpeHTA==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT" + }, + "node_modules/micromark/node_modules/micromark-factory-space": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-factory-space/-/micromark-factory-space-2.0.1.tgz", + "integrity": "sha512-zRkxjtBxxLd2Sc0d+fbnEunsTj46SWXgXciZmHq0kDYGnck/ZSGj9/wULTV95uoeYiK5hRXP2mJ98Uo4cq/LQg==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "micromark-util-character": "^2.0.0", + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/micromark/node_modules/micromark-util-character": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/micromark-util-character/-/micromark-util-character-2.1.1.tgz", + "integrity": "sha512-wv8tdUTJ3thSFFFJKtpYKOYiGP2+v96Hvk4Tu8KpCAsTMs6yi+nVmGh1syvSCsaxz45J6Jbw+9DD6g97+NV67Q==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/micromark/node_modules/micromark-util-symbol": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-util-symbol/-/micromark-util-symbol-2.0.1.tgz", + "integrity": "sha512-vs5t8Apaud9N28kgCrRUdEed4UJ+wWNvicHLPxCa9ENlYuAY31M0ETy5y1vA33YoNPDFTghEbnh6efaE8h4x0Q==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT" + }, + "node_modules/micromatch": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.8.tgz", + "integrity": "sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==", + "license": "MIT", + "dependencies": { + "braces": "^3.0.3", + "picomatch": "^2.3.1" + }, + "engines": { + "node": ">=8.6" + } + }, + "node_modules/mime": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", + "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==", + "license": "MIT", + "bin": { + "mime": "cli.js" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/mime-db": { + "version": "1.33.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.33.0.tgz", + "integrity": "sha512-BHJ/EKruNIqJf/QahvxwQZXKygOQ256myeN/Ew+THcAa5q+PjyTTMMeNQC4DZw5AwfvelsUrA6B67NKMqXDbzQ==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/mime-types": { + "version": "2.1.18", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.18.tgz", + "integrity": "sha512-lc/aahn+t4/SWV/qcmumYjymLsWfN3ELhpmVuUFjgsORruuZPVSwAQryq+HHGvO/SI2KVX26bx+En+zhM8g8hQ==", + "license": "MIT", + "dependencies": { + "mime-db": "~1.33.0" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/mimic-fn": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", + "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/mimic-response": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-4.0.0.tgz", + "integrity": "sha512-e5ISH9xMYU0DzrT+jl8q2ze9D6eWBto+I8CNpe+VI+K2J/F/k3PdkdTdz4wvGVH4NTpo+NRYTVIuMQEMMcsLqg==", + "license": "MIT", + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/mini-css-extract-plugin": { + "version": "2.9.4", + "resolved": "https://registry.npmjs.org/mini-css-extract-plugin/-/mini-css-extract-plugin-2.9.4.tgz", + "integrity": "sha512-ZWYT7ln73Hptxqxk2DxPU9MmapXRhxkJD6tkSR04dnQxm8BGu2hzgKLugK5yySD97u/8yy7Ma7E76k9ZdvtjkQ==", + "license": "MIT", + "dependencies": { + "schema-utils": "^4.0.0", + "tapable": "^2.2.1" + }, + "engines": { + "node": ">= 12.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "webpack": "^5.0.0" + } + }, + "node_modules/minimalistic-assert": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz", + "integrity": "sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==", + "license": "ISC" + }, + "node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "license": "ISC", + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/minimist": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz", + "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==", + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/mrmime": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/mrmime/-/mrmime-2.0.1.tgz", + "integrity": "sha512-Y3wQdFg2Va6etvQ5I82yUhGdsKrcYox6p7FfL1LbK2J4V01F9TGlepTIhnK24t7koZibmg82KGglhA1XK5IsLQ==", + "license": "MIT", + "engines": { + "node": ">=10" + } + }, + "node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "license": "MIT" + }, + "node_modules/multicast-dns": { + "version": "7.2.5", + "resolved": "https://registry.npmjs.org/multicast-dns/-/multicast-dns-7.2.5.tgz", + "integrity": "sha512-2eznPJP8z2BFLX50tf0LuODrpINqP1RVIm/CObbTcBRITQgmC/TjcREF1NeTBzIcR5XO/ukWo+YHOjBbFwIupg==", + "license": "MIT", + "dependencies": { + "dns-packet": "^5.2.2", + "thunky": "^1.0.2" + }, + "bin": { + "multicast-dns": "cli.js" + } + }, + "node_modules/nanoid": { + "version": "3.3.11", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.11.tgz", + "integrity": "sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "bin": { + "nanoid": "bin/nanoid.cjs" + }, + "engines": { + "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" + } + }, + "node_modules/negotiator": { + "version": "0.6.4", + "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.4.tgz", + "integrity": "sha512-myRT3DiWPHqho5PrJaIRyaMv2kgYf0mUVgBNOYMuCH5Ki1yEiQaf/ZJuQ62nvpc44wL5WDbTX7yGJi1Neevw8w==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/neo-async": { + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz", + "integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==", + "license": "MIT" + }, + "node_modules/no-case": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/no-case/-/no-case-3.0.4.tgz", + "integrity": "sha512-fgAN3jGAh+RoxUGZHTSOLJIqUc2wmoBwGR4tbpNAKmmovFoWq0OdRkb0VkldReO2a2iBT/OEulG9XSUc10r3zg==", + "license": "MIT", + "dependencies": { + "lower-case": "^2.0.2", + "tslib": "^2.0.3" + } + }, + "node_modules/node-emoji": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/node-emoji/-/node-emoji-2.2.0.tgz", + "integrity": "sha512-Z3lTE9pLaJF47NyMhd4ww1yFTAP8YhYI8SleJiHzM46Fgpm5cnNzSl9XfzFNqbaz+VlJrIj3fXQ4DeN1Rjm6cw==", + "license": "MIT", + "dependencies": { + "@sindresorhus/is": "^4.6.0", + "char-regex": "^1.0.2", + "emojilib": "^2.4.0", + "skin-tone": "^2.0.0" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/node-forge": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/node-forge/-/node-forge-1.3.3.tgz", + "integrity": "sha512-rLvcdSyRCyouf6jcOIPe/BgwG/d7hKjzMKOas33/pHEr6gbq18IK9zV7DiPvzsz0oBJPme6qr6H6kGZuI9/DZg==", + "license": "(BSD-3-Clause OR GPL-2.0)", + "engines": { + "node": ">= 6.13.0" + } + }, + "node_modules/node-releases": { + "version": "2.0.27", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.27.tgz", + "integrity": "sha512-nmh3lCkYZ3grZvqcCH+fjmQ7X+H0OeZgP40OierEaAptX4XofMh5kwNbWh7lBduUzCcV/8kZ+NDLCwm2iorIlA==", + "license": "MIT" + }, + "node_modules/normalize-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", + "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/normalize-url": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-8.1.0.tgz", + "integrity": "sha512-X06Mfd/5aKsRHc0O0J5CUedwnPmnDtLF2+nq+KN9KSDlJHkPuh0JUviWjEWMe0SW/9TDdSLVPuk7L5gGTIA1/w==", + "license": "MIT", + "engines": { + "node": ">=14.16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/npm-run-path": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz", + "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==", + "license": "MIT", + "dependencies": { + "path-key": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/nprogress": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/nprogress/-/nprogress-0.2.0.tgz", + "integrity": "sha512-I19aIingLgR1fmhftnbWWO3dXc0hSxqHQHQb3H8m+K3TnEn/iSeTZZOyvKXWqQESMwuUVnatlCnZdLBZZt2VSA==", + "license": "MIT" + }, + "node_modules/nth-check": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-2.1.1.tgz", + "integrity": "sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w==", + "license": "BSD-2-Clause", + "dependencies": { + "boolbase": "^1.0.0" + }, + "funding": { + "url": "https://github.com/fb55/nth-check?sponsor=1" + } + }, + "node_modules/null-loader": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/null-loader/-/null-loader-4.0.1.tgz", + "integrity": "sha512-pxqVbi4U6N26lq+LmgIbB5XATP0VdZKOG25DhHi8btMmJJefGArFyDg1yc4U3hWCJbMqSrw0qyrz1UQX+qYXqg==", + "license": "MIT", + "dependencies": { + "loader-utils": "^2.0.0", + "schema-utils": "^3.0.0" + }, + "engines": { + "node": ">= 10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "webpack": "^4.0.0 || ^5.0.0" + } + }, + "node_modules/null-loader/node_modules/ajv": { + "version": "6.12.6", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", + "license": "MIT", + "dependencies": { + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/null-loader/node_modules/ajv-keywords": { + "version": "3.5.2", + "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.2.tgz", + "integrity": "sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==", + "license": "MIT", + "peerDependencies": { + "ajv": "^6.9.1" + } + }, + "node_modules/null-loader/node_modules/json-schema-traverse": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", + "license": "MIT" + }, + "node_modules/null-loader/node_modules/schema-utils": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.3.0.tgz", + "integrity": "sha512-pN/yOAvcC+5rQ5nERGuwrjLlYvLTbCibnZ1I7B1LaiAz9BRBlE9GMgE/eqV30P7aJQUf7Ddimy/RsbYO/GrVGg==", + "license": "MIT", + "dependencies": { + "@types/json-schema": "^7.0.8", + "ajv": "^6.12.5", + "ajv-keywords": "^3.5.2" + }, + "engines": { + "node": ">= 10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + } + }, + "node_modules/object-assign": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", + "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/object-inspect": { + "version": "1.13.4", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.4.tgz", + "integrity": "sha512-W67iLl4J2EXEGTbfeHCffrjDfitvLANg0UlX3wFUUSTx92KXRFegMHUVgSqE+wvhAbi4WqjGg9czysTV2Epbew==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/object-keys": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", + "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/object.assign": { + "version": "4.1.7", + "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.7.tgz", + "integrity": "sha512-nK28WOo+QIjBkDduTINE4JkF/UJJKyf2EJxvJKfblDpyg0Q+pkOHNTL0Qwy6NP6FhE/EnzV73BxxqcJaXY9anw==", + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.8", + "call-bound": "^1.0.3", + "define-properties": "^1.2.1", + "es-object-atoms": "^1.0.0", + "has-symbols": "^1.1.0", + "object-keys": "^1.1.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/obuf": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/obuf/-/obuf-1.1.2.tgz", + "integrity": "sha512-PX1wu0AmAdPqOL1mWhqmlOd8kOIZQwGZw6rh7uby9fTc5lhaOWFLX3I6R1hrF9k3zUY40e6igsLGkDXK92LJNg==", + "license": "MIT" + }, + "node_modules/on-finished": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz", + "integrity": "sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==", + "license": "MIT", + "dependencies": { + "ee-first": "1.1.1" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/on-headers": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/on-headers/-/on-headers-1.1.0.tgz", + "integrity": "sha512-737ZY3yNnXy37FHkQxPzt4UZ2UWPWiCZWLvFZ4fu5cueciegX0zGPnrlY6bwRg4FdQOe9YU8MkmJwGhoMybl8A==", + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/onetime": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", + "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", + "license": "MIT", + "dependencies": { + "mimic-fn": "^2.1.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/open": { + "version": "8.4.2", + "resolved": "https://registry.npmjs.org/open/-/open-8.4.2.tgz", + "integrity": "sha512-7x81NCL719oNbsq/3mh+hVrAWmFuEYUqrq/Iw3kUzH8ReypT9QQ0BLoJS7/G9k6N81XjW4qHWtjWwe/9eLy1EQ==", + "license": "MIT", + "dependencies": { + "define-lazy-prop": "^2.0.0", + "is-docker": "^2.1.1", + "is-wsl": "^2.2.0" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/opener": { + "version": "1.5.2", + "resolved": "https://registry.npmjs.org/opener/-/opener-1.5.2.tgz", + "integrity": "sha512-ur5UIdyw5Y7yEj9wLzhqXiy6GZ3Mwx0yGI+5sMn2r0N0v3cKJvUmFH5yPP+WXh9e0xfyzyJX95D8l088DNFj7A==", + "license": "(WTFPL OR MIT)", + "bin": { + "opener": "bin/opener-bin.js" + } + }, + "node_modules/p-cancelable": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/p-cancelable/-/p-cancelable-3.0.0.tgz", + "integrity": "sha512-mlVgR3PGuzlo0MmTdk4cXqXWlwQDLnONTAg6sm62XkMJEiRxN3GL3SffkYvqwonbkJBcrI7Uvv5Zh9yjvn2iUw==", + "license": "MIT", + "engines": { + "node": ">=12.20" + } + }, + "node_modules/p-finally": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/p-finally/-/p-finally-1.0.0.tgz", + "integrity": "sha512-LICb2p9CB7FS+0eR1oqWnHhp0FljGLZCWBE9aix0Uye9W8LTQPwMTYVGWQWIw9RdQiDg4+epXQODwIYJtSJaow==", + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/p-limit": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-4.0.0.tgz", + "integrity": "sha512-5b0R4txpzjPWVw/cXXUResoD4hb6U/x9BH08L7nw+GN1sezDzPdxeRvpc9c433fZhBan/wusjbCsqwqm4EIBIQ==", + "license": "MIT", + "dependencies": { + "yocto-queue": "^1.0.0" + }, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/p-locate": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-6.0.0.tgz", + "integrity": "sha512-wPrq66Llhl7/4AGC6I+cqxT07LhXvWL08LNXz1fENOw0Ap4sRZZ/gZpTTJ5jpurzzzfS2W/Ge9BY3LgLjCShcw==", + "license": "MIT", + "dependencies": { + "p-limit": "^4.0.0" + }, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/p-map": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/p-map/-/p-map-4.0.0.tgz", + "integrity": "sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ==", + "license": "MIT", + "dependencies": { + "aggregate-error": "^3.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/p-queue": { + "version": "6.6.2", + "resolved": "https://registry.npmjs.org/p-queue/-/p-queue-6.6.2.tgz", + "integrity": "sha512-RwFpb72c/BhQLEXIZ5K2e+AhgNVmIejGlTgiB9MzZ0e93GRvqZ7uSi0dvRF7/XIXDeNkra2fNHBxTyPDGySpjQ==", + "license": "MIT", + "dependencies": { + "eventemitter3": "^4.0.4", + "p-timeout": "^3.2.0" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/p-retry": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/p-retry/-/p-retry-6.2.1.tgz", + "integrity": "sha512-hEt02O4hUct5wtwg4H4KcWgDdm+l1bOaEy/hWzd8xtXB9BqxTWBBhb+2ImAtH4Cv4rPjV76xN3Zumqk3k3AhhQ==", + "license": "MIT", + "dependencies": { + "@types/retry": "0.12.2", + "is-network-error": "^1.0.0", + "retry": "^0.13.1" + }, + "engines": { + "node": ">=16.17" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/p-timeout": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/p-timeout/-/p-timeout-3.2.0.tgz", + "integrity": "sha512-rhIwUycgwwKcP9yTOOFK/AKsAopjjCakVqLHePO3CC6Mir1Z99xT+R63jZxAT5lFZLa2inS5h+ZS2GvR99/FBg==", + "license": "MIT", + "dependencies": { + "p-finally": "^1.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/package-json": { + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/package-json/-/package-json-8.1.1.tgz", + "integrity": "sha512-cbH9IAIJHNj9uXi196JVsRlt7cHKak6u/e6AkL/bkRelZ7rlL3X1YKxsZwa36xipOEKAsdtmaG6aAJoM1fx2zA==", + "license": "MIT", + "dependencies": { + "got": "^12.1.0", + "registry-auth-token": "^5.0.1", + "registry-url": "^6.0.0", + "semver": "^7.3.7" + }, + "engines": { + "node": ">=14.16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/param-case": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/param-case/-/param-case-3.0.4.tgz", + "integrity": "sha512-RXlj7zCYokReqWpOPH9oYivUzLYZ5vAPIfEmCTNViosC78F8F0H9y7T7gG2M39ymgutxF5gcFEsyZQSph9Bp3A==", + "license": "MIT", + "dependencies": { + "dot-case": "^3.0.4", + "tslib": "^2.0.3" + } + }, + "node_modules/parent-module": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", + "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", + "license": "MIT", + "dependencies": { + "callsites": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/parse-entities": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/parse-entities/-/parse-entities-4.0.2.tgz", + "integrity": "sha512-GG2AQYWoLgL877gQIKeRPGO1xF9+eG1ujIb5soS5gPvLQ1y2o8FL90w2QWNdf9I361Mpp7726c+lj3U0qK1uGw==", + "license": "MIT", + "dependencies": { + "@types/unist": "^2.0.0", + "character-entities-legacy": "^3.0.0", + "character-reference-invalid": "^2.0.0", + "decode-named-character-reference": "^1.0.0", + "is-alphanumerical": "^2.0.0", + "is-decimal": "^2.0.0", + "is-hexadecimal": "^2.0.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/parse-entities/node_modules/@types/unist": { + "version": "2.0.11", + "resolved": "https://registry.npmjs.org/@types/unist/-/unist-2.0.11.tgz", + "integrity": "sha512-CmBKiL6NNo/OqgmMn95Fk9Whlp2mtvIv+KNpQKN2F4SjvrEesubTRWGYSg+BnWZOnlCaSTU1sMpsBOzgbYhnsA==", + "license": "MIT" + }, + "node_modules/parse-json": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz", + "integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==", + "license": "MIT", + "dependencies": { + "@babel/code-frame": "^7.0.0", + "error-ex": "^1.3.1", + "json-parse-even-better-errors": "^2.3.0", + "lines-and-columns": "^1.1.6" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/parse-numeric-range": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/parse-numeric-range/-/parse-numeric-range-1.3.0.tgz", + "integrity": "sha512-twN+njEipszzlMJd4ONUYgSfZPDxgHhT9Ahed5uTigpQn90FggW4SA/AIPq/6a149fTbE9qBEcSwE3FAEp6wQQ==", + "license": "ISC" + }, + "node_modules/parse5": { + "version": "7.3.0", + "resolved": "https://registry.npmjs.org/parse5/-/parse5-7.3.0.tgz", + "integrity": "sha512-IInvU7fabl34qmi9gY8XOVxhYyMyuH2xUNpb2q8/Y+7552KlejkRvqvD19nMoUW/uQGGbqNpA6Tufu5FL5BZgw==", + "license": "MIT", + "dependencies": { + "entities": "^6.0.0" + }, + "funding": { + "url": "https://github.com/inikulin/parse5?sponsor=1" + } + }, + "node_modules/parse5-htmlparser2-tree-adapter": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/parse5-htmlparser2-tree-adapter/-/parse5-htmlparser2-tree-adapter-7.1.0.tgz", + "integrity": "sha512-ruw5xyKs6lrpo9x9rCZqZZnIUntICjQAd0Wsmp396Ul9lN/h+ifgVV1x1gZHi8euej6wTfpqX8j+BFQxF0NS/g==", + "license": "MIT", + "dependencies": { + "domhandler": "^5.0.3", + "parse5": "^7.0.0" + }, + "funding": { + "url": "https://github.com/inikulin/parse5?sponsor=1" + } + }, + "node_modules/parse5/node_modules/entities": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/entities/-/entities-6.0.1.tgz", + "integrity": "sha512-aN97NXWF6AWBTahfVOIrB/NShkzi5H7F9r1s9mD3cDj4Ko5f2qhhVoYMibXF7GlLveb/D2ioWay8lxI97Ven3g==", + "license": "BSD-2-Clause", + "engines": { + "node": ">=0.12" + }, + "funding": { + "url": "https://github.com/fb55/entities?sponsor=1" + } + }, + "node_modules/parseurl": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", + "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==", + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/pascal-case": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/pascal-case/-/pascal-case-3.1.2.tgz", + "integrity": "sha512-uWlGT3YSnK9x3BQJaOdcZwrnV6hPpd8jFH1/ucpiLRPh/2zCVJKS19E4GvYHvaCcACn3foXZ0cLB9Wrx1KGe5g==", + "license": "MIT", + "dependencies": { + "no-case": "^3.0.4", + "tslib": "^2.0.3" + } + }, + "node_modules/path-exists": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-5.0.0.tgz", + "integrity": "sha512-RjhtfwJOxzcFmNOi6ltcbcu4Iu+FL3zEj83dk4kAS+fVpTxXLO1b38RvJgT/0QwvV/L3aY9TAnyv0EOqW4GoMQ==", + "license": "MIT", + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + } + }, + "node_modules/path-is-inside": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/path-is-inside/-/path-is-inside-1.0.2.tgz", + "integrity": "sha512-DUWJr3+ULp4zXmol/SZkFf3JGsS9/SIv+Y3Rt93/UjPpDpklB5f1er4O3POIbUuUJ3FXgqte2Q7SrU6zAqwk8w==", + "license": "(WTFPL OR MIT)" + }, + "node_modules/path-key": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/path-parse": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", + "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", + "license": "MIT" + }, + "node_modules/path-to-regexp": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-1.9.0.tgz", + "integrity": "sha512-xIp7/apCFJuUHdDLWe8O1HIkb0kQrOMb/0u6FXQjemHn/ii5LrIzU6bdECnsiTF/GjZkMEKg1xdiZwNqDYlZ6g==", + "license": "MIT", + "dependencies": { + "isarray": "0.0.1" + } + }, + "node_modules/path-type": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", + "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/picocolors": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz", + "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==", + "license": "ISC" + }, + "node_modules/picomatch": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "license": "MIT", + "engines": { + "node": ">=8.6" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/pkg-dir": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-7.0.0.tgz", + "integrity": "sha512-Ie9z/WINcxxLp27BKOCHGde4ITq9UklYKDzVo1nhk5sqGEXU3FpkwP5GM2voTGJkGd9B3Otl+Q4uwSOeSUtOBA==", + "license": "MIT", + "dependencies": { + "find-up": "^6.3.0" + }, + "engines": { + "node": ">=14.16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/postcss": { + "version": "8.5.6", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.6.tgz", + "integrity": "sha512-3Ybi1tAuwAP9s0r1UQ2J4n5Y0G05bJkpUIO0/bI9MhwmD70S5aTWbXGBwxHrelT+XM1k6dM0pk+SwNkpTRN7Pg==", + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/postcss" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "dependencies": { + "nanoid": "^3.3.11", + "picocolors": "^1.1.1", + "source-map-js": "^1.2.1" + }, + "engines": { + "node": "^10 || ^12 || >=14" + } + }, + "node_modules/postcss-attribute-case-insensitive": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/postcss-attribute-case-insensitive/-/postcss-attribute-case-insensitive-7.0.1.tgz", + "integrity": "sha512-Uai+SupNSqzlschRyNx3kbCTWgY/2hcwtHEI/ej2LJWc9JJ77qKgGptd8DHwY1mXtZ7Aoh4z4yxfwMBue9eNgw==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "license": "MIT", + "dependencies": { + "postcss-selector-parser": "^7.0.0" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "postcss": "^8.4" + } + }, + "node_modules/postcss-attribute-case-insensitive/node_modules/postcss-selector-parser": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-7.1.1.tgz", + "integrity": "sha512-orRsuYpJVw8LdAwqqLykBj9ecS5/cRHlI5+nvTo8LcCKmzDmqVORXtOIYEEQuL9D4BxtA1lm5isAqzQZCoQ6Eg==", + "license": "MIT", + "dependencies": { + "cssesc": "^3.0.0", + "util-deprecate": "^1.0.2" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/postcss-calc": { + "version": "9.0.1", + "resolved": "https://registry.npmjs.org/postcss-calc/-/postcss-calc-9.0.1.tgz", + "integrity": "sha512-TipgjGyzP5QzEhsOZUaIkeO5mKeMFpebWzRogWG/ysonUlnHcq5aJe0jOjpfzUU8PeSaBQnrE8ehR0QA5vs8PQ==", + "license": "MIT", + "dependencies": { + "postcss-selector-parser": "^6.0.11", + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^14 || ^16 || >=18.0" + }, + "peerDependencies": { + "postcss": "^8.2.2" + } + }, + "node_modules/postcss-clamp": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/postcss-clamp/-/postcss-clamp-4.1.0.tgz", + "integrity": "sha512-ry4b1Llo/9zz+PKC+030KUnPITTJAHeOwjfAyyB60eT0AorGLdzp52s31OsPRHRf8NchkgFoG2y6fCfn1IV1Ow==", + "license": "MIT", + "dependencies": { + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": ">=7.6.0" + }, + "peerDependencies": { + "postcss": "^8.4.6" + } + }, + "node_modules/postcss-color-functional-notation": { + "version": "7.0.12", + "resolved": "https://registry.npmjs.org/postcss-color-functional-notation/-/postcss-color-functional-notation-7.0.12.tgz", + "integrity": "sha512-TLCW9fN5kvO/u38/uesdpbx3e8AkTYhMvDZYa9JpmImWuTE99bDQ7GU7hdOADIZsiI9/zuxfAJxny/khknp1Zw==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "license": "MIT-0", + "dependencies": { + "@csstools/css-color-parser": "^3.1.0", + "@csstools/css-parser-algorithms": "^3.0.5", + "@csstools/css-tokenizer": "^3.0.4", + "@csstools/postcss-progressive-custom-properties": "^4.2.1", + "@csstools/utilities": "^2.0.0" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "postcss": "^8.4" + } + }, + "node_modules/postcss-color-hex-alpha": { + "version": "10.0.0", + "resolved": "https://registry.npmjs.org/postcss-color-hex-alpha/-/postcss-color-hex-alpha-10.0.0.tgz", + "integrity": "sha512-1kervM2cnlgPs2a8Vt/Qbe5cQ++N7rkYo/2rz2BkqJZIHQwaVuJgQH38REHrAi4uM0b1fqxMkWYmese94iMp3w==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "license": "MIT", + "dependencies": { + "@csstools/utilities": "^2.0.0", + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "postcss": "^8.4" + } + }, + "node_modules/postcss-color-rebeccapurple": { + "version": "10.0.0", + "resolved": "https://registry.npmjs.org/postcss-color-rebeccapurple/-/postcss-color-rebeccapurple-10.0.0.tgz", + "integrity": "sha512-JFta737jSP+hdAIEhk1Vs0q0YF5P8fFcj+09pweS8ktuGuZ8pPlykHsk6mPxZ8awDl4TrcxUqJo9l1IhVr/OjQ==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "license": "MIT-0", + "dependencies": { + "@csstools/utilities": "^2.0.0", + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "postcss": "^8.4" + } + }, + "node_modules/postcss-colormin": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/postcss-colormin/-/postcss-colormin-6.1.0.tgz", + "integrity": "sha512-x9yX7DOxeMAR+BgGVnNSAxmAj98NX/YxEMNFP+SDCEeNLb2r3i6Hh1ksMsnW8Ub5SLCpbescQqn9YEbE9554Sw==", + "license": "MIT", + "dependencies": { + "browserslist": "^4.23.0", + "caniuse-api": "^3.0.0", + "colord": "^2.9.3", + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^14 || ^16 || >=18.0" + }, + "peerDependencies": { + "postcss": "^8.4.31" + } + }, + "node_modules/postcss-convert-values": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/postcss-convert-values/-/postcss-convert-values-6.1.0.tgz", + "integrity": "sha512-zx8IwP/ts9WvUM6NkVSkiU902QZL1bwPhaVaLynPtCsOTqp+ZKbNi+s6XJg3rfqpKGA/oc7Oxk5t8pOQJcwl/w==", + "license": "MIT", + "dependencies": { + "browserslist": "^4.23.0", + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^14 || ^16 || >=18.0" + }, + "peerDependencies": { + "postcss": "^8.4.31" + } + }, + "node_modules/postcss-custom-media": { + "version": "11.0.6", + "resolved": "https://registry.npmjs.org/postcss-custom-media/-/postcss-custom-media-11.0.6.tgz", + "integrity": "sha512-C4lD4b7mUIw+RZhtY7qUbf4eADmb7Ey8BFA2px9jUbwg7pjTZDl4KY4bvlUV+/vXQvzQRfiGEVJyAbtOsCMInw==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "license": "MIT", + "dependencies": { + "@csstools/cascade-layer-name-parser": "^2.0.5", + "@csstools/css-parser-algorithms": "^3.0.5", + "@csstools/css-tokenizer": "^3.0.4", + "@csstools/media-query-list-parser": "^4.0.3" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "postcss": "^8.4" + } + }, + "node_modules/postcss-custom-properties": { + "version": "14.0.6", + "resolved": "https://registry.npmjs.org/postcss-custom-properties/-/postcss-custom-properties-14.0.6.tgz", + "integrity": "sha512-fTYSp3xuk4BUeVhxCSJdIPhDLpJfNakZKoiTDx7yRGCdlZrSJR7mWKVOBS4sBF+5poPQFMj2YdXx1VHItBGihQ==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "license": "MIT", + "dependencies": { + "@csstools/cascade-layer-name-parser": "^2.0.5", + "@csstools/css-parser-algorithms": "^3.0.5", + "@csstools/css-tokenizer": "^3.0.4", + "@csstools/utilities": "^2.0.0", + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "postcss": "^8.4" + } + }, + "node_modules/postcss-custom-selectors": { + "version": "8.0.5", + "resolved": "https://registry.npmjs.org/postcss-custom-selectors/-/postcss-custom-selectors-8.0.5.tgz", + "integrity": "sha512-9PGmckHQswiB2usSO6XMSswO2yFWVoCAuih1yl9FVcwkscLjRKjwsjM3t+NIWpSU2Jx3eOiK2+t4vVTQaoCHHg==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "license": "MIT", + "dependencies": { + "@csstools/cascade-layer-name-parser": "^2.0.5", + "@csstools/css-parser-algorithms": "^3.0.5", + "@csstools/css-tokenizer": "^3.0.4", + "postcss-selector-parser": "^7.0.0" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "postcss": "^8.4" + } + }, + "node_modules/postcss-custom-selectors/node_modules/postcss-selector-parser": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-7.1.1.tgz", + "integrity": "sha512-orRsuYpJVw8LdAwqqLykBj9ecS5/cRHlI5+nvTo8LcCKmzDmqVORXtOIYEEQuL9D4BxtA1lm5isAqzQZCoQ6Eg==", + "license": "MIT", + "dependencies": { + "cssesc": "^3.0.0", + "util-deprecate": "^1.0.2" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/postcss-dir-pseudo-class": { + "version": "9.0.1", + "resolved": "https://registry.npmjs.org/postcss-dir-pseudo-class/-/postcss-dir-pseudo-class-9.0.1.tgz", + "integrity": "sha512-tRBEK0MHYvcMUrAuYMEOa0zg9APqirBcgzi6P21OhxtJyJADo/SWBwY1CAwEohQ/6HDaa9jCjLRG7K3PVQYHEA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "license": "MIT-0", + "dependencies": { + "postcss-selector-parser": "^7.0.0" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "postcss": "^8.4" + } + }, + "node_modules/postcss-dir-pseudo-class/node_modules/postcss-selector-parser": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-7.1.1.tgz", + "integrity": "sha512-orRsuYpJVw8LdAwqqLykBj9ecS5/cRHlI5+nvTo8LcCKmzDmqVORXtOIYEEQuL9D4BxtA1lm5isAqzQZCoQ6Eg==", + "license": "MIT", + "dependencies": { + "cssesc": "^3.0.0", + "util-deprecate": "^1.0.2" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/postcss-discard-comments": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/postcss-discard-comments/-/postcss-discard-comments-6.0.2.tgz", + "integrity": "sha512-65w/uIqhSBBfQmYnG92FO1mWZjJ4GL5b8atm5Yw2UgrwD7HiNiSSNwJor1eCFGzUgYnN/iIknhNRVqjrrpuglw==", + "license": "MIT", + "engines": { + "node": "^14 || ^16 || >=18.0" + }, + "peerDependencies": { + "postcss": "^8.4.31" + } + }, + "node_modules/postcss-discard-duplicates": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/postcss-discard-duplicates/-/postcss-discard-duplicates-6.0.3.tgz", + "integrity": "sha512-+JA0DCvc5XvFAxwx6f/e68gQu/7Z9ud584VLmcgto28eB8FqSFZwtrLwB5Kcp70eIoWP/HXqz4wpo8rD8gpsTw==", + "license": "MIT", + "engines": { + "node": "^14 || ^16 || >=18.0" + }, + "peerDependencies": { + "postcss": "^8.4.31" + } + }, + "node_modules/postcss-discard-empty": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/postcss-discard-empty/-/postcss-discard-empty-6.0.3.tgz", + "integrity": "sha512-znyno9cHKQsK6PtxL5D19Fj9uwSzC2mB74cpT66fhgOadEUPyXFkbgwm5tvc3bt3NAy8ltE5MrghxovZRVnOjQ==", + "license": "MIT", + "engines": { + "node": "^14 || ^16 || >=18.0" + }, + "peerDependencies": { + "postcss": "^8.4.31" + } + }, + "node_modules/postcss-discard-overridden": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/postcss-discard-overridden/-/postcss-discard-overridden-6.0.2.tgz", + "integrity": "sha512-j87xzI4LUggC5zND7KdjsI25APtyMuynXZSujByMaav2roV6OZX+8AaCUcZSWqckZpjAjRyFDdpqybgjFO0HJQ==", + "license": "MIT", + "engines": { + "node": "^14 || ^16 || >=18.0" + }, + "peerDependencies": { + "postcss": "^8.4.31" + } + }, + "node_modules/postcss-discard-unused": { + "version": "6.0.5", + "resolved": "https://registry.npmjs.org/postcss-discard-unused/-/postcss-discard-unused-6.0.5.tgz", + "integrity": "sha512-wHalBlRHkaNnNwfC8z+ppX57VhvS+HWgjW508esjdaEYr3Mx7Gnn2xA4R/CKf5+Z9S5qsqC+Uzh4ueENWwCVUA==", + "license": "MIT", + "dependencies": { + "postcss-selector-parser": "^6.0.16" + }, + "engines": { + "node": "^14 || ^16 || >=18.0" + }, + "peerDependencies": { + "postcss": "^8.4.31" + } + }, + "node_modules/postcss-double-position-gradients": { + "version": "6.0.4", + "resolved": "https://registry.npmjs.org/postcss-double-position-gradients/-/postcss-double-position-gradients-6.0.4.tgz", + "integrity": "sha512-m6IKmxo7FxSP5nF2l63QbCC3r+bWpFUWmZXZf096WxG0m7Vl1Q1+ruFOhpdDRmKrRS+S3Jtk+TVk/7z0+BVK6g==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "license": "MIT-0", + "dependencies": { + "@csstools/postcss-progressive-custom-properties": "^4.2.1", + "@csstools/utilities": "^2.0.0", + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "postcss": "^8.4" + } + }, + "node_modules/postcss-focus-visible": { + "version": "10.0.1", + "resolved": "https://registry.npmjs.org/postcss-focus-visible/-/postcss-focus-visible-10.0.1.tgz", + "integrity": "sha512-U58wyjS/I1GZgjRok33aE8juW9qQgQUNwTSdxQGuShHzwuYdcklnvK/+qOWX1Q9kr7ysbraQ6ht6r+udansalA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "license": "MIT-0", + "dependencies": { + "postcss-selector-parser": "^7.0.0" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "postcss": "^8.4" + } + }, + "node_modules/postcss-focus-visible/node_modules/postcss-selector-parser": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-7.1.1.tgz", + "integrity": "sha512-orRsuYpJVw8LdAwqqLykBj9ecS5/cRHlI5+nvTo8LcCKmzDmqVORXtOIYEEQuL9D4BxtA1lm5isAqzQZCoQ6Eg==", + "license": "MIT", + "dependencies": { + "cssesc": "^3.0.0", + "util-deprecate": "^1.0.2" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/postcss-focus-within": { + "version": "9.0.1", + "resolved": "https://registry.npmjs.org/postcss-focus-within/-/postcss-focus-within-9.0.1.tgz", + "integrity": "sha512-fzNUyS1yOYa7mOjpci/bR+u+ESvdar6hk8XNK/TRR0fiGTp2QT5N+ducP0n3rfH/m9I7H/EQU6lsa2BrgxkEjw==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "license": "MIT-0", + "dependencies": { + "postcss-selector-parser": "^7.0.0" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "postcss": "^8.4" + } + }, + "node_modules/postcss-focus-within/node_modules/postcss-selector-parser": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-7.1.1.tgz", + "integrity": "sha512-orRsuYpJVw8LdAwqqLykBj9ecS5/cRHlI5+nvTo8LcCKmzDmqVORXtOIYEEQuL9D4BxtA1lm5isAqzQZCoQ6Eg==", + "license": "MIT", + "dependencies": { + "cssesc": "^3.0.0", + "util-deprecate": "^1.0.2" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/postcss-font-variant": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/postcss-font-variant/-/postcss-font-variant-5.0.0.tgz", + "integrity": "sha512-1fmkBaCALD72CK2a9i468mA/+tr9/1cBxRRMXOUaZqO43oWPR5imcyPjXwuv7PXbCid4ndlP5zWhidQVVa3hmA==", + "license": "MIT", + "peerDependencies": { + "postcss": "^8.1.0" + } + }, + "node_modules/postcss-gap-properties": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/postcss-gap-properties/-/postcss-gap-properties-6.0.0.tgz", + "integrity": "sha512-Om0WPjEwiM9Ru+VhfEDPZJAKWUd0mV1HmNXqp2C29z80aQ2uP9UVhLc7e3aYMIor/S5cVhoPgYQ7RtfeZpYTRw==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "license": "MIT-0", + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "postcss": "^8.4" + } + }, + "node_modules/postcss-image-set-function": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/postcss-image-set-function/-/postcss-image-set-function-7.0.0.tgz", + "integrity": "sha512-QL7W7QNlZuzOwBTeXEmbVckNt1FSmhQtbMRvGGqqU4Nf4xk6KUEQhAoWuMzwbSv5jxiRiSZ5Tv7eiDB9U87znA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "license": "MIT-0", + "dependencies": { + "@csstools/utilities": "^2.0.0", + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "postcss": "^8.4" + } + }, + "node_modules/postcss-lab-function": { + "version": "7.0.12", + "resolved": "https://registry.npmjs.org/postcss-lab-function/-/postcss-lab-function-7.0.12.tgz", + "integrity": "sha512-tUcyRk1ZTPec3OuKFsqtRzW2Go5lehW29XA21lZ65XmzQkz43VY2tyWEC202F7W3mILOjw0voOiuxRGTsN+J9w==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "license": "MIT-0", + "dependencies": { + "@csstools/css-color-parser": "^3.1.0", + "@csstools/css-parser-algorithms": "^3.0.5", + "@csstools/css-tokenizer": "^3.0.4", + "@csstools/postcss-progressive-custom-properties": "^4.2.1", + "@csstools/utilities": "^2.0.0" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "postcss": "^8.4" + } + }, + "node_modules/postcss-loader": { + "version": "7.3.4", + "resolved": "https://registry.npmjs.org/postcss-loader/-/postcss-loader-7.3.4.tgz", + "integrity": "sha512-iW5WTTBSC5BfsBJ9daFMPVrLT36MrNiC6fqOZTTaHjBNX6Pfd5p+hSBqe/fEeNd7pc13QiAyGt7VdGMw4eRC4A==", + "license": "MIT", + "dependencies": { + "cosmiconfig": "^8.3.5", + "jiti": "^1.20.0", + "semver": "^7.5.4" + }, + "engines": { + "node": ">= 14.15.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "postcss": "^7.0.0 || ^8.0.1", + "webpack": "^5.0.0" + } + }, + "node_modules/postcss-logical": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/postcss-logical/-/postcss-logical-8.1.0.tgz", + "integrity": "sha512-pL1hXFQ2fEXNKiNiAgtfA005T9FBxky5zkX6s4GZM2D8RkVgRqz3f4g1JUoq925zXv495qk8UNldDwh8uGEDoA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "license": "MIT-0", + "dependencies": { + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "postcss": "^8.4" + } + }, + "node_modules/postcss-merge-idents": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/postcss-merge-idents/-/postcss-merge-idents-6.0.3.tgz", + "integrity": "sha512-1oIoAsODUs6IHQZkLQGO15uGEbK3EAl5wi9SS8hs45VgsxQfMnxvt+L+zIr7ifZFIH14cfAeVe2uCTa+SPRa3g==", + "license": "MIT", + "dependencies": { + "cssnano-utils": "^4.0.2", + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^14 || ^16 || >=18.0" + }, + "peerDependencies": { + "postcss": "^8.4.31" + } + }, + "node_modules/postcss-merge-longhand": { + "version": "6.0.5", + "resolved": "https://registry.npmjs.org/postcss-merge-longhand/-/postcss-merge-longhand-6.0.5.tgz", + "integrity": "sha512-5LOiordeTfi64QhICp07nzzuTDjNSO8g5Ksdibt44d+uvIIAE1oZdRn8y/W5ZtYgRH/lnLDlvi9F8btZcVzu3w==", + "license": "MIT", + "dependencies": { + "postcss-value-parser": "^4.2.0", + "stylehacks": "^6.1.1" + }, + "engines": { + "node": "^14 || ^16 || >=18.0" + }, + "peerDependencies": { + "postcss": "^8.4.31" + } + }, + "node_modules/postcss-merge-rules": { + "version": "6.1.1", + "resolved": "https://registry.npmjs.org/postcss-merge-rules/-/postcss-merge-rules-6.1.1.tgz", + "integrity": "sha512-KOdWF0gju31AQPZiD+2Ar9Qjowz1LTChSjFFbS+e2sFgc4uHOp3ZvVX4sNeTlk0w2O31ecFGgrFzhO0RSWbWwQ==", + "license": "MIT", + "dependencies": { + "browserslist": "^4.23.0", + "caniuse-api": "^3.0.0", + "cssnano-utils": "^4.0.2", + "postcss-selector-parser": "^6.0.16" + }, + "engines": { + "node": "^14 || ^16 || >=18.0" + }, + "peerDependencies": { + "postcss": "^8.4.31" + } + }, + "node_modules/postcss-minify-font-values": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/postcss-minify-font-values/-/postcss-minify-font-values-6.1.0.tgz", + "integrity": "sha512-gklfI/n+9rTh8nYaSJXlCo3nOKqMNkxuGpTn/Qm0gstL3ywTr9/WRKznE+oy6fvfolH6dF+QM4nCo8yPLdvGJg==", + "license": "MIT", + "dependencies": { + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^14 || ^16 || >=18.0" + }, + "peerDependencies": { + "postcss": "^8.4.31" + } + }, + "node_modules/postcss-minify-gradients": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/postcss-minify-gradients/-/postcss-minify-gradients-6.0.3.tgz", + "integrity": "sha512-4KXAHrYlzF0Rr7uc4VrfwDJ2ajrtNEpNEuLxFgwkhFZ56/7gaE4Nr49nLsQDZyUe+ds+kEhf+YAUolJiYXF8+Q==", + "license": "MIT", + "dependencies": { + "colord": "^2.9.3", + "cssnano-utils": "^4.0.2", + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^14 || ^16 || >=18.0" + }, + "peerDependencies": { + "postcss": "^8.4.31" + } + }, + "node_modules/postcss-minify-params": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/postcss-minify-params/-/postcss-minify-params-6.1.0.tgz", + "integrity": "sha512-bmSKnDtyyE8ujHQK0RQJDIKhQ20Jq1LYiez54WiaOoBtcSuflfK3Nm596LvbtlFcpipMjgClQGyGr7GAs+H1uA==", + "license": "MIT", + "dependencies": { + "browserslist": "^4.23.0", + "cssnano-utils": "^4.0.2", + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^14 || ^16 || >=18.0" + }, + "peerDependencies": { + "postcss": "^8.4.31" + } + }, + "node_modules/postcss-minify-selectors": { + "version": "6.0.4", + "resolved": "https://registry.npmjs.org/postcss-minify-selectors/-/postcss-minify-selectors-6.0.4.tgz", + "integrity": "sha512-L8dZSwNLgK7pjTto9PzWRoMbnLq5vsZSTu8+j1P/2GB8qdtGQfn+K1uSvFgYvgh83cbyxT5m43ZZhUMTJDSClQ==", + "license": "MIT", + "dependencies": { + "postcss-selector-parser": "^6.0.16" + }, + "engines": { + "node": "^14 || ^16 || >=18.0" + }, + "peerDependencies": { + "postcss": "^8.4.31" + } + }, + "node_modules/postcss-modules-extract-imports": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/postcss-modules-extract-imports/-/postcss-modules-extract-imports-3.1.0.tgz", + "integrity": "sha512-k3kNe0aNFQDAZGbin48pL2VNidTF0w4/eASDsxlyspobzU3wZQLOGj7L9gfRe0Jo9/4uud09DsjFNH7winGv8Q==", + "license": "ISC", + "engines": { + "node": "^10 || ^12 || >= 14" + }, + "peerDependencies": { + "postcss": "^8.1.0" + } + }, + "node_modules/postcss-modules-local-by-default": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/postcss-modules-local-by-default/-/postcss-modules-local-by-default-4.2.0.tgz", + "integrity": "sha512-5kcJm/zk+GJDSfw+V/42fJ5fhjL5YbFDl8nVdXkJPLLW+Vf9mTD5Xe0wqIaDnLuL2U6cDNpTr+UQ+v2HWIBhzw==", + "license": "MIT", + "dependencies": { + "icss-utils": "^5.0.0", + "postcss-selector-parser": "^7.0.0", + "postcss-value-parser": "^4.1.0" + }, + "engines": { + "node": "^10 || ^12 || >= 14" + }, + "peerDependencies": { + "postcss": "^8.1.0" + } + }, + "node_modules/postcss-modules-local-by-default/node_modules/postcss-selector-parser": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-7.1.1.tgz", + "integrity": "sha512-orRsuYpJVw8LdAwqqLykBj9ecS5/cRHlI5+nvTo8LcCKmzDmqVORXtOIYEEQuL9D4BxtA1lm5isAqzQZCoQ6Eg==", + "license": "MIT", + "dependencies": { + "cssesc": "^3.0.0", + "util-deprecate": "^1.0.2" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/postcss-modules-scope": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/postcss-modules-scope/-/postcss-modules-scope-3.2.1.tgz", + "integrity": "sha512-m9jZstCVaqGjTAuny8MdgE88scJnCiQSlSrOWcTQgM2t32UBe+MUmFSO5t7VMSfAf/FJKImAxBav8ooCHJXCJA==", + "license": "ISC", + "dependencies": { + "postcss-selector-parser": "^7.0.0" + }, + "engines": { + "node": "^10 || ^12 || >= 14" + }, + "peerDependencies": { + "postcss": "^8.1.0" + } + }, + "node_modules/postcss-modules-scope/node_modules/postcss-selector-parser": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-7.1.1.tgz", + "integrity": "sha512-orRsuYpJVw8LdAwqqLykBj9ecS5/cRHlI5+nvTo8LcCKmzDmqVORXtOIYEEQuL9D4BxtA1lm5isAqzQZCoQ6Eg==", + "license": "MIT", + "dependencies": { + "cssesc": "^3.0.0", + "util-deprecate": "^1.0.2" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/postcss-modules-values": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/postcss-modules-values/-/postcss-modules-values-4.0.0.tgz", + "integrity": "sha512-RDxHkAiEGI78gS2ofyvCsu7iycRv7oqw5xMWn9iMoR0N/7mf9D50ecQqUo5BZ9Zh2vH4bCUR/ktCqbB9m8vJjQ==", + "license": "ISC", + "dependencies": { + "icss-utils": "^5.0.0" + }, + "engines": { + "node": "^10 || ^12 || >= 14" + }, + "peerDependencies": { + "postcss": "^8.1.0" + } + }, + "node_modules/postcss-nesting": { + "version": "13.0.2", + "resolved": "https://registry.npmjs.org/postcss-nesting/-/postcss-nesting-13.0.2.tgz", + "integrity": "sha512-1YCI290TX+VP0U/K/aFxzHzQWHWURL+CtHMSbex1lCdpXD1SoR2sYuxDu5aNI9lPoXpKTCggFZiDJbwylU0LEQ==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "license": "MIT-0", + "dependencies": { + "@csstools/selector-resolve-nested": "^3.1.0", + "@csstools/selector-specificity": "^5.0.0", + "postcss-selector-parser": "^7.0.0" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "postcss": "^8.4" + } + }, + "node_modules/postcss-nesting/node_modules/@csstools/selector-resolve-nested": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/@csstools/selector-resolve-nested/-/selector-resolve-nested-3.1.0.tgz", + "integrity": "sha512-mf1LEW0tJLKfWyvn5KdDrhpxHyuxpbNwTIwOYLIvsTffeyOf85j5oIzfG0yosxDgx/sswlqBnESYUcQH0vgZ0g==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "license": "MIT-0", + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "postcss-selector-parser": "^7.0.0" + } + }, + "node_modules/postcss-nesting/node_modules/@csstools/selector-specificity": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/@csstools/selector-specificity/-/selector-specificity-5.0.0.tgz", + "integrity": "sha512-PCqQV3c4CoVm3kdPhyeZ07VmBRdH2EpMFA/pd9OASpOEC3aXNGoqPDAZ80D0cLpMBxnmk0+yNhGsEx31hq7Gtw==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "license": "MIT-0", + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "postcss-selector-parser": "^7.0.0" + } + }, + "node_modules/postcss-nesting/node_modules/postcss-selector-parser": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-7.1.1.tgz", + "integrity": "sha512-orRsuYpJVw8LdAwqqLykBj9ecS5/cRHlI5+nvTo8LcCKmzDmqVORXtOIYEEQuL9D4BxtA1lm5isAqzQZCoQ6Eg==", + "license": "MIT", + "dependencies": { + "cssesc": "^3.0.0", + "util-deprecate": "^1.0.2" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/postcss-normalize-charset": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/postcss-normalize-charset/-/postcss-normalize-charset-6.0.2.tgz", + "integrity": "sha512-a8N9czmdnrjPHa3DeFlwqst5eaL5W8jYu3EBbTTkI5FHkfMhFZh1EGbku6jhHhIzTA6tquI2P42NtZ59M/H/kQ==", + "license": "MIT", + "engines": { + "node": "^14 || ^16 || >=18.0" + }, + "peerDependencies": { + "postcss": "^8.4.31" + } + }, + "node_modules/postcss-normalize-display-values": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/postcss-normalize-display-values/-/postcss-normalize-display-values-6.0.2.tgz", + "integrity": "sha512-8H04Mxsb82ON/aAkPeq8kcBbAtI5Q2a64X/mnRRfPXBq7XeogoQvReqxEfc0B4WPq1KimjezNC8flUtC3Qz6jg==", + "license": "MIT", + "dependencies": { + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^14 || ^16 || >=18.0" + }, + "peerDependencies": { + "postcss": "^8.4.31" + } + }, + "node_modules/postcss-normalize-positions": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/postcss-normalize-positions/-/postcss-normalize-positions-6.0.2.tgz", + "integrity": "sha512-/JFzI441OAB9O7VnLA+RtSNZvQ0NCFZDOtp6QPFo1iIyawyXg0YI3CYM9HBy1WvwCRHnPep/BvI1+dGPKoXx/Q==", + "license": "MIT", + "dependencies": { + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^14 || ^16 || >=18.0" + }, + "peerDependencies": { + "postcss": "^8.4.31" + } + }, + "node_modules/postcss-normalize-repeat-style": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/postcss-normalize-repeat-style/-/postcss-normalize-repeat-style-6.0.2.tgz", + "integrity": "sha512-YdCgsfHkJ2jEXwR4RR3Tm/iOxSfdRt7jplS6XRh9Js9PyCR/aka/FCb6TuHT2U8gQubbm/mPmF6L7FY9d79VwQ==", + "license": "MIT", + "dependencies": { + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^14 || ^16 || >=18.0" + }, + "peerDependencies": { + "postcss": "^8.4.31" + } + }, + "node_modules/postcss-normalize-string": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/postcss-normalize-string/-/postcss-normalize-string-6.0.2.tgz", + "integrity": "sha512-vQZIivlxlfqqMp4L9PZsFE4YUkWniziKjQWUtsxUiVsSSPelQydwS8Wwcuw0+83ZjPWNTl02oxlIvXsmmG+CiQ==", + "license": "MIT", + "dependencies": { + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^14 || ^16 || >=18.0" + }, + "peerDependencies": { + "postcss": "^8.4.31" + } + }, + "node_modules/postcss-normalize-timing-functions": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/postcss-normalize-timing-functions/-/postcss-normalize-timing-functions-6.0.2.tgz", + "integrity": "sha512-a+YrtMox4TBtId/AEwbA03VcJgtyW4dGBizPl7e88cTFULYsprgHWTbfyjSLyHeBcK/Q9JhXkt2ZXiwaVHoMzA==", + "license": "MIT", + "dependencies": { + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^14 || ^16 || >=18.0" + }, + "peerDependencies": { + "postcss": "^8.4.31" + } + }, + "node_modules/postcss-normalize-unicode": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/postcss-normalize-unicode/-/postcss-normalize-unicode-6.1.0.tgz", + "integrity": "sha512-QVC5TQHsVj33otj8/JD869Ndr5Xcc/+fwRh4HAsFsAeygQQXm+0PySrKbr/8tkDKzW+EVT3QkqZMfFrGiossDg==", + "license": "MIT", + "dependencies": { + "browserslist": "^4.23.0", + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^14 || ^16 || >=18.0" + }, + "peerDependencies": { + "postcss": "^8.4.31" + } + }, + "node_modules/postcss-normalize-url": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/postcss-normalize-url/-/postcss-normalize-url-6.0.2.tgz", + "integrity": "sha512-kVNcWhCeKAzZ8B4pv/DnrU1wNh458zBNp8dh4y5hhxih5RZQ12QWMuQrDgPRw3LRl8mN9vOVfHl7uhvHYMoXsQ==", + "license": "MIT", + "dependencies": { + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^14 || ^16 || >=18.0" + }, + "peerDependencies": { + "postcss": "^8.4.31" + } + }, + "node_modules/postcss-normalize-whitespace": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/postcss-normalize-whitespace/-/postcss-normalize-whitespace-6.0.2.tgz", + "integrity": "sha512-sXZ2Nj1icbJOKmdjXVT9pnyHQKiSAyuNQHSgRCUgThn2388Y9cGVDR+E9J9iAYbSbLHI+UUwLVl1Wzco/zgv0Q==", + "license": "MIT", + "dependencies": { + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^14 || ^16 || >=18.0" + }, + "peerDependencies": { + "postcss": "^8.4.31" + } + }, + "node_modules/postcss-opacity-percentage": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/postcss-opacity-percentage/-/postcss-opacity-percentage-3.0.0.tgz", + "integrity": "sha512-K6HGVzyxUxd/VgZdX04DCtdwWJ4NGLG212US4/LA1TLAbHgmAsTWVR86o+gGIbFtnTkfOpb9sCRBx8K7HO66qQ==", + "funding": [ + { + "type": "kofi", + "url": "https://ko-fi.com/mrcgrtz" + }, + { + "type": "liberapay", + "url": "https://liberapay.com/mrcgrtz" + } + ], + "license": "MIT", + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "postcss": "^8.4" + } + }, + "node_modules/postcss-ordered-values": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/postcss-ordered-values/-/postcss-ordered-values-6.0.2.tgz", + "integrity": "sha512-VRZSOB+JU32RsEAQrO94QPkClGPKJEL/Z9PCBImXMhIeK5KAYo6slP/hBYlLgrCjFxyqvn5VC81tycFEDBLG1Q==", + "license": "MIT", + "dependencies": { + "cssnano-utils": "^4.0.2", + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^14 || ^16 || >=18.0" + }, + "peerDependencies": { + "postcss": "^8.4.31" + } + }, + "node_modules/postcss-overflow-shorthand": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/postcss-overflow-shorthand/-/postcss-overflow-shorthand-6.0.0.tgz", + "integrity": "sha512-BdDl/AbVkDjoTofzDQnwDdm/Ym6oS9KgmO7Gr+LHYjNWJ6ExORe4+3pcLQsLA9gIROMkiGVjjwZNoL/mpXHd5Q==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "license": "MIT-0", + "dependencies": { + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "postcss": "^8.4" + } + }, + "node_modules/postcss-page-break": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/postcss-page-break/-/postcss-page-break-3.0.4.tgz", + "integrity": "sha512-1JGu8oCjVXLa9q9rFTo4MbeeA5FMe00/9C7lN4va606Rdb+HkxXtXsmEDrIraQ11fGz/WvKWa8gMuCKkrXpTsQ==", + "license": "MIT", + "peerDependencies": { + "postcss": "^8" + } + }, + "node_modules/postcss-place": { + "version": "10.0.0", + "resolved": "https://registry.npmjs.org/postcss-place/-/postcss-place-10.0.0.tgz", + "integrity": "sha512-5EBrMzat2pPAxQNWYavwAfoKfYcTADJ8AXGVPcUZ2UkNloUTWzJQExgrzrDkh3EKzmAx1evfTAzF9I8NGcc+qw==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "license": "MIT-0", + "dependencies": { + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "postcss": "^8.4" + } + }, + "node_modules/postcss-preset-env": { + "version": "10.5.0", + "resolved": "https://registry.npmjs.org/postcss-preset-env/-/postcss-preset-env-10.5.0.tgz", + "integrity": "sha512-xgxFQPAPxeWmsgy8cR7GM1PGAL/smA5E9qU7K//D4vucS01es3M0fDujhDJn3kY8Ip7/vVYcecbe1yY+vBo3qQ==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "license": "MIT-0", + "dependencies": { + "@csstools/postcss-alpha-function": "^1.0.1", + "@csstools/postcss-cascade-layers": "^5.0.2", + "@csstools/postcss-color-function": "^4.0.12", + "@csstools/postcss-color-function-display-p3-linear": "^1.0.1", + "@csstools/postcss-color-mix-function": "^3.0.12", + "@csstools/postcss-color-mix-variadic-function-arguments": "^1.0.2", + "@csstools/postcss-content-alt-text": "^2.0.8", + "@csstools/postcss-contrast-color-function": "^2.0.12", + "@csstools/postcss-exponential-functions": "^2.0.9", + "@csstools/postcss-font-format-keywords": "^4.0.0", + "@csstools/postcss-gamut-mapping": "^2.0.11", + "@csstools/postcss-gradients-interpolation-method": "^5.0.12", + "@csstools/postcss-hwb-function": "^4.0.12", + "@csstools/postcss-ic-unit": "^4.0.4", + "@csstools/postcss-initial": "^2.0.1", + "@csstools/postcss-is-pseudo-class": "^5.0.3", + "@csstools/postcss-light-dark-function": "^2.0.11", + "@csstools/postcss-logical-float-and-clear": "^3.0.0", + "@csstools/postcss-logical-overflow": "^2.0.0", + "@csstools/postcss-logical-overscroll-behavior": "^2.0.0", + "@csstools/postcss-logical-resize": "^3.0.0", + "@csstools/postcss-logical-viewport-units": "^3.0.4", + "@csstools/postcss-media-minmax": "^2.0.9", + "@csstools/postcss-media-queries-aspect-ratio-number-values": "^3.0.5", + "@csstools/postcss-nested-calc": "^4.0.0", + "@csstools/postcss-normalize-display-values": "^4.0.0", + "@csstools/postcss-oklab-function": "^4.0.12", + "@csstools/postcss-position-area-property": "^1.0.0", + "@csstools/postcss-progressive-custom-properties": "^4.2.1", + "@csstools/postcss-random-function": "^2.0.1", + "@csstools/postcss-relative-color-syntax": "^3.0.12", + "@csstools/postcss-scope-pseudo-class": "^4.0.1", + "@csstools/postcss-sign-functions": "^1.1.4", + "@csstools/postcss-stepped-value-functions": "^4.0.9", + "@csstools/postcss-system-ui-font-family": "^1.0.0", + "@csstools/postcss-text-decoration-shorthand": "^4.0.3", + "@csstools/postcss-trigonometric-functions": "^4.0.9", + "@csstools/postcss-unset-value": "^4.0.0", + "autoprefixer": "^10.4.22", + "browserslist": "^4.28.0", + "css-blank-pseudo": "^7.0.1", + "css-has-pseudo": "^7.0.3", + "css-prefers-color-scheme": "^10.0.0", + "cssdb": "^8.5.2", + "postcss-attribute-case-insensitive": "^7.0.1", + "postcss-clamp": "^4.1.0", + "postcss-color-functional-notation": "^7.0.12", + "postcss-color-hex-alpha": "^10.0.0", + "postcss-color-rebeccapurple": "^10.0.0", + "postcss-custom-media": "^11.0.6", + "postcss-custom-properties": "^14.0.6", + "postcss-custom-selectors": "^8.0.5", + "postcss-dir-pseudo-class": "^9.0.1", + "postcss-double-position-gradients": "^6.0.4", + "postcss-focus-visible": "^10.0.1", + "postcss-focus-within": "^9.0.1", + "postcss-font-variant": "^5.0.0", + "postcss-gap-properties": "^6.0.0", + "postcss-image-set-function": "^7.0.0", + "postcss-lab-function": "^7.0.12", + "postcss-logical": "^8.1.0", + "postcss-nesting": "^13.0.2", + "postcss-opacity-percentage": "^3.0.0", + "postcss-overflow-shorthand": "^6.0.0", + "postcss-page-break": "^3.0.4", + "postcss-place": "^10.0.0", + "postcss-pseudo-class-any-link": "^10.0.1", + "postcss-replace-overflow-wrap": "^4.0.0", + "postcss-selector-not": "^8.0.1" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "postcss": "^8.4" + } + }, + "node_modules/postcss-pseudo-class-any-link": { + "version": "10.0.1", + "resolved": "https://registry.npmjs.org/postcss-pseudo-class-any-link/-/postcss-pseudo-class-any-link-10.0.1.tgz", + "integrity": "sha512-3el9rXlBOqTFaMFkWDOkHUTQekFIYnaQY55Rsp8As8QQkpiSgIYEcF/6Ond93oHiDsGb4kad8zjt+NPlOC1H0Q==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "license": "MIT-0", + "dependencies": { + "postcss-selector-parser": "^7.0.0" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "postcss": "^8.4" + } + }, + "node_modules/postcss-pseudo-class-any-link/node_modules/postcss-selector-parser": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-7.1.1.tgz", + "integrity": "sha512-orRsuYpJVw8LdAwqqLykBj9ecS5/cRHlI5+nvTo8LcCKmzDmqVORXtOIYEEQuL9D4BxtA1lm5isAqzQZCoQ6Eg==", + "license": "MIT", + "dependencies": { + "cssesc": "^3.0.0", + "util-deprecate": "^1.0.2" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/postcss-reduce-idents": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/postcss-reduce-idents/-/postcss-reduce-idents-6.0.3.tgz", + "integrity": "sha512-G3yCqZDpsNPoQgbDUy3T0E6hqOQ5xigUtBQyrmq3tn2GxlyiL0yyl7H+T8ulQR6kOcHJ9t7/9H4/R2tv8tJbMA==", + "license": "MIT", + "dependencies": { + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^14 || ^16 || >=18.0" + }, + "peerDependencies": { + "postcss": "^8.4.31" + } + }, + "node_modules/postcss-reduce-initial": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/postcss-reduce-initial/-/postcss-reduce-initial-6.1.0.tgz", + "integrity": "sha512-RarLgBK/CrL1qZags04oKbVbrrVK2wcxhvta3GCxrZO4zveibqbRPmm2VI8sSgCXwoUHEliRSbOfpR0b/VIoiw==", + "license": "MIT", + "dependencies": { + "browserslist": "^4.23.0", + "caniuse-api": "^3.0.0" + }, + "engines": { + "node": "^14 || ^16 || >=18.0" + }, + "peerDependencies": { + "postcss": "^8.4.31" + } + }, + "node_modules/postcss-reduce-transforms": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/postcss-reduce-transforms/-/postcss-reduce-transforms-6.0.2.tgz", + "integrity": "sha512-sB+Ya++3Xj1WaT9+5LOOdirAxP7dJZms3GRcYheSPi1PiTMigsxHAdkrbItHxwYHr4kt1zL7mmcHstgMYT+aiA==", + "license": "MIT", + "dependencies": { + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^14 || ^16 || >=18.0" + }, + "peerDependencies": { + "postcss": "^8.4.31" + } + }, + "node_modules/postcss-replace-overflow-wrap": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/postcss-replace-overflow-wrap/-/postcss-replace-overflow-wrap-4.0.0.tgz", + "integrity": "sha512-KmF7SBPphT4gPPcKZc7aDkweHiKEEO8cla/GjcBK+ckKxiZslIu3C4GCRW3DNfL0o7yW7kMQu9xlZ1kXRXLXtw==", + "license": "MIT", + "peerDependencies": { + "postcss": "^8.0.3" + } + }, + "node_modules/postcss-selector-not": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/postcss-selector-not/-/postcss-selector-not-8.0.1.tgz", + "integrity": "sha512-kmVy/5PYVb2UOhy0+LqUYAhKj7DUGDpSWa5LZqlkWJaaAV+dxxsOG3+St0yNLu6vsKD7Dmqx+nWQt0iil89+WA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "license": "MIT", + "dependencies": { + "postcss-selector-parser": "^7.0.0" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "postcss": "^8.4" + } + }, + "node_modules/postcss-selector-not/node_modules/postcss-selector-parser": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-7.1.1.tgz", + "integrity": "sha512-orRsuYpJVw8LdAwqqLykBj9ecS5/cRHlI5+nvTo8LcCKmzDmqVORXtOIYEEQuL9D4BxtA1lm5isAqzQZCoQ6Eg==", + "license": "MIT", + "dependencies": { + "cssesc": "^3.0.0", + "util-deprecate": "^1.0.2" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/postcss-selector-parser": { + "version": "6.1.2", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.1.2.tgz", + "integrity": "sha512-Q8qQfPiZ+THO/3ZrOrO0cJJKfpYCagtMUkXbnEfmgUjwXg6z/WBeOyS9APBBPCTSiDV+s4SwQGu8yFsiMRIudg==", + "license": "MIT", + "dependencies": { + "cssesc": "^3.0.0", + "util-deprecate": "^1.0.2" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/postcss-sort-media-queries": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/postcss-sort-media-queries/-/postcss-sort-media-queries-5.2.0.tgz", + "integrity": "sha512-AZ5fDMLD8SldlAYlvi8NIqo0+Z8xnXU2ia0jxmuhxAU+Lqt9K+AlmLNJ/zWEnE9x+Zx3qL3+1K20ATgNOr3fAA==", + "license": "MIT", + "dependencies": { + "sort-css-media-queries": "2.2.0" + }, + "engines": { + "node": ">=14.0.0" + }, + "peerDependencies": { + "postcss": "^8.4.23" + } + }, + "node_modules/postcss-svgo": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/postcss-svgo/-/postcss-svgo-6.0.3.tgz", + "integrity": "sha512-dlrahRmxP22bX6iKEjOM+c8/1p+81asjKT+V5lrgOH944ryx/OHpclnIbGsKVd3uWOXFLYJwCVf0eEkJGvO96g==", + "license": "MIT", + "dependencies": { + "postcss-value-parser": "^4.2.0", + "svgo": "^3.2.0" + }, + "engines": { + "node": "^14 || ^16 || >= 18" + }, + "peerDependencies": { + "postcss": "^8.4.31" + } + }, + "node_modules/postcss-unique-selectors": { + "version": "6.0.4", + "resolved": "https://registry.npmjs.org/postcss-unique-selectors/-/postcss-unique-selectors-6.0.4.tgz", + "integrity": "sha512-K38OCaIrO8+PzpArzkLKB42dSARtC2tmG6PvD4b1o1Q2E9Os8jzfWFfSy/rixsHwohtsDdFtAWGjFVFUdwYaMg==", + "license": "MIT", + "dependencies": { + "postcss-selector-parser": "^6.0.16" + }, + "engines": { + "node": "^14 || ^16 || >=18.0" + }, + "peerDependencies": { + "postcss": "^8.4.31" + } + }, + "node_modules/postcss-value-parser": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz", + "integrity": "sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==", + "license": "MIT" + }, + "node_modules/postcss-zindex": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/postcss-zindex/-/postcss-zindex-6.0.2.tgz", + "integrity": "sha512-5BxW9l1evPB/4ZIc+2GobEBoKC+h8gPGCMi+jxsYvd2x0mjq7wazk6DrP71pStqxE9Foxh5TVnonbWpFZzXaYg==", + "license": "MIT", + "engines": { + "node": "^14 || ^16 || >=18.0" + }, + "peerDependencies": { + "postcss": "^8.4.31" + } + }, + "node_modules/pretty-error": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/pretty-error/-/pretty-error-4.0.0.tgz", + "integrity": "sha512-AoJ5YMAcXKYxKhuJGdcvse+Voc6v1RgnsR3nWcYU7q4t6z0Q6T86sv5Zq8VIRbOWWFpvdGE83LtdSMNd+6Y0xw==", + "license": "MIT", + "dependencies": { + "lodash": "^4.17.20", + "renderkid": "^3.0.0" + } + }, + "node_modules/pretty-time": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/pretty-time/-/pretty-time-1.1.0.tgz", + "integrity": "sha512-28iF6xPQrP8Oa6uxE6a1biz+lWeTOAPKggvjB8HAs6nVMKZwf5bG++632Dx614hIWgUPkgivRfG+a8uAXGTIbA==", + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/prism-react-renderer": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/prism-react-renderer/-/prism-react-renderer-2.4.1.tgz", + "integrity": "sha512-ey8Ls/+Di31eqzUxC46h8MksNuGx/n0AAC8uKpwFau4RPDYLuE3EXTp8N8G2vX2N7UC/+IXeNUnlWBGGcAG+Ig==", + "license": "MIT", + "dependencies": { + "@types/prismjs": "^1.26.0", + "clsx": "^2.0.0" + }, + "peerDependencies": { + "react": ">=16.0.0" + } + }, + "node_modules/prismjs": { + "version": "1.30.0", + "resolved": "https://registry.npmjs.org/prismjs/-/prismjs-1.30.0.tgz", + "integrity": "sha512-DEvV2ZF2r2/63V+tK8hQvrR2ZGn10srHbXviTlcv7Kpzw8jWiNTqbVgjO3IY8RxrrOUF8VPMQQFysYYYv0YZxw==", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/process-nextick-args": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", + "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==", + "license": "MIT" + }, + "node_modules/prompts": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/prompts/-/prompts-2.4.2.tgz", + "integrity": "sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q==", + "license": "MIT", + "dependencies": { + "kleur": "^3.0.3", + "sisteransi": "^1.0.5" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/prop-types": { + "version": "15.8.1", + "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.8.1.tgz", + "integrity": "sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==", + "license": "MIT", + "dependencies": { + "loose-envify": "^1.4.0", + "object-assign": "^4.1.1", + "react-is": "^16.13.1" + } + }, + "node_modules/property-information": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/property-information/-/property-information-7.1.0.tgz", + "integrity": "sha512-TwEZ+X+yCJmYfL7TPUOcvBZ4QfoT5YenQiJuX//0th53DE6w0xxLEtfK3iyryQFddXuvkIk51EEgrJQ0WJkOmQ==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/proto-list": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/proto-list/-/proto-list-1.2.4.tgz", + "integrity": "sha512-vtK/94akxsTMhe0/cbfpR+syPuszcuwhqVjJq26CuNDgFGj682oRBXOP5MJpv2r7JtE8MsiepGIqvvOTBwn2vA==", + "license": "ISC" + }, + "node_modules/proxy-addr": { + "version": "2.0.7", + "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz", + "integrity": "sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==", + "license": "MIT", + "dependencies": { + "forwarded": "0.2.0", + "ipaddr.js": "1.9.1" + }, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/proxy-addr/node_modules/ipaddr.js": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz", + "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==", + "license": "MIT", + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/punycode": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz", + "integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/pupa": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/pupa/-/pupa-3.3.0.tgz", + "integrity": "sha512-LjgDO2zPtoXP2wJpDjZrGdojii1uqO0cnwKoIoUzkfS98HDmbeiGmYiXo3lXeFlq2xvne1QFQhwYXSUCLKtEuA==", + "license": "MIT", + "dependencies": { + "escape-goat": "^4.0.0" + }, + "engines": { + "node": ">=12.20" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/qs": { + "version": "6.14.0", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.14.0.tgz", + "integrity": "sha512-YWWTjgABSKcvs/nWBi9PycY/JiPJqOD4JA6o9Sej2AtvSGarXxKC3OQSk4pAarbdQlKAh5D4FCQkJNkW+GAn3w==", + "license": "BSD-3-Clause", + "dependencies": { + "side-channel": "^1.1.0" + }, + "engines": { + "node": ">=0.6" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/queue-microtask": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", + "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT" + }, + "node_modules/quick-lru": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/quick-lru/-/quick-lru-5.1.1.tgz", + "integrity": "sha512-WuyALRjWPDGtt/wzJiadO5AXY+8hZ80hVpe6MyivgraREW751X3SbhRvG3eLKOYN+8VEvqLcf3wdnt44Z4S4SA==", + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/randombytes": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", + "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", + "license": "MIT", + "dependencies": { + "safe-buffer": "^5.1.0" + } + }, + "node_modules/range-parser": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.0.tgz", + "integrity": "sha512-kA5WQoNVo4t9lNx2kQNFCxKeBl5IbbSNBl1M/tLkw9WCn+hxNBAW5Qh8gdhs63CJnhjJ2zQWFoqPJP2sK1AV5A==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/raw-body": { + "version": "2.5.3", + "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.3.tgz", + "integrity": "sha512-s4VSOf6yN0rvbRZGxs8Om5CWj6seneMwK3oDb4lWDH0UPhWcxwOWw5+qk24bxq87szX1ydrwylIOp2uG1ojUpA==", + "license": "MIT", + "dependencies": { + "bytes": "~3.1.2", + "http-errors": "~2.0.1", + "iconv-lite": "~0.4.24", + "unpipe": "~1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/raw-body/node_modules/bytes": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", + "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==", + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/rc": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/rc/-/rc-1.2.8.tgz", + "integrity": "sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==", + "license": "(BSD-2-Clause OR MIT OR Apache-2.0)", + "dependencies": { + "deep-extend": "^0.6.0", + "ini": "~1.3.0", + "minimist": "^1.2.0", + "strip-json-comments": "~2.0.1" + }, + "bin": { + "rc": "cli.js" + } + }, + "node_modules/rc/node_modules/ini": { + "version": "1.3.8", + "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz", + "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==", + "license": "ISC" + }, + "node_modules/rc/node_modules/strip-json-comments": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", + "integrity": "sha512-4gB8na07fecVVkOI6Rs4e7T6NOTki5EmL7TUduTs6bu3EdnSycntVJ4re8kgZA+wx9IueI2Y11bfbgwtzuE0KQ==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/react": { + "version": "19.2.3", + "resolved": "https://registry.npmjs.org/react/-/react-19.2.3.tgz", + "integrity": "sha512-Ku/hhYbVjOQnXDZFv2+RibmLFGwFdeeKHFcOTlrt7xplBnya5OGn/hIRDsqDiSUcfORsDC7MPxwork8jBwsIWA==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/react-dom": { + "version": "19.2.3", + "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-19.2.3.tgz", + "integrity": "sha512-yELu4WmLPw5Mr/lmeEpox5rw3RETacE++JgHqQzd2dg+YbJuat3jH4ingc+WPZhxaoFzdv9y33G+F7Nl5O0GBg==", + "license": "MIT", + "dependencies": { + "scheduler": "^0.27.0" + }, + "peerDependencies": { + "react": "^19.2.3" + } + }, + "node_modules/react-fast-compare": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/react-fast-compare/-/react-fast-compare-3.2.2.tgz", + "integrity": "sha512-nsO+KSNgo1SbJqJEYRE9ERzo7YtYbou/OqjSQKxV7jcKox7+usiUVZOAC+XnDOABXggQTno0Y1CpVnuWEc1boQ==", + "license": "MIT" + }, + "node_modules/react-helmet-async": { + "name": "@slorber/react-helmet-async", + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/@slorber/react-helmet-async/-/react-helmet-async-1.3.0.tgz", + "integrity": "sha512-e9/OK8VhwUSc67diWI8Rb3I0YgI9/SBQtnhe9aEuK6MhZm7ntZZimXgwXnd8W96YTmSOb9M4d8LwhRZyhWr/1A==", + "license": "Apache-2.0", + "dependencies": { + "@babel/runtime": "^7.12.5", + "invariant": "^2.2.4", + "prop-types": "^15.7.2", + "react-fast-compare": "^3.2.0", + "shallowequal": "^1.1.0" + }, + "peerDependencies": { + "react": "^16.6.0 || ^17.0.0 || ^18.0.0 || ^19.0.0", + "react-dom": "^16.6.0 || ^17.0.0 || ^18.0.0 || ^19.0.0" + } + }, + "node_modules/react-is": { + "version": "16.13.1", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz", + "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==", + "license": "MIT" + }, + "node_modules/react-json-view-lite": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/react-json-view-lite/-/react-json-view-lite-2.5.0.tgz", + "integrity": "sha512-tk7o7QG9oYyELWHL8xiMQ8x4WzjCzbWNyig3uexmkLb54r8jO0yH3WCWx8UZS0c49eSA4QUmG5caiRJ8fAn58g==", + "license": "MIT", + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "react": "^18.0.0 || ^19.0.0" + } + }, + "node_modules/react-loadable": { + "name": "@docusaurus/react-loadable", + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/@docusaurus/react-loadable/-/react-loadable-6.0.0.tgz", + "integrity": "sha512-YMMxTUQV/QFSnbgrP3tjDzLHRg7vsbMn8e9HAa8o/1iXoiomo48b7sk/kkmWEuWNDPJVlKSJRB6Y2fHqdJk+SQ==", + "license": "MIT", + "dependencies": { + "@types/react": "*" + }, + "peerDependencies": { + "react": "*" + } + }, + "node_modules/react-loadable-ssr-addon-v5-slorber": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/react-loadable-ssr-addon-v5-slorber/-/react-loadable-ssr-addon-v5-slorber-1.0.1.tgz", + "integrity": "sha512-lq3Lyw1lGku8zUEJPDxsNm1AfYHBrO9Y1+olAYwpUJ2IGFBskM0DMKok97A6LWUpHm+o7IvQBOWu9MLenp9Z+A==", + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.10.3" + }, + "engines": { + "node": ">=10.13.0" + }, + "peerDependencies": { + "react-loadable": "*", + "webpack": ">=4.41.1 || 5.x" + } + }, + "node_modules/react-router": { + "version": "5.3.4", + "resolved": "https://registry.npmjs.org/react-router/-/react-router-5.3.4.tgz", + "integrity": "sha512-Ys9K+ppnJah3QuaRiLxk+jDWOR1MekYQrlytiXxC1RyfbdsZkS5pvKAzCCr031xHixZwpnsYNT5xysdFHQaYsA==", + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.12.13", + "history": "^4.9.0", + "hoist-non-react-statics": "^3.1.0", + "loose-envify": "^1.3.1", + "path-to-regexp": "^1.7.0", + "prop-types": "^15.6.2", + "react-is": "^16.6.0", + "tiny-invariant": "^1.0.2", + "tiny-warning": "^1.0.0" + }, + "peerDependencies": { + "react": ">=15" + } + }, + "node_modules/react-router-config": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/react-router-config/-/react-router-config-5.1.1.tgz", + "integrity": "sha512-DuanZjaD8mQp1ppHjgnnUnyOlqYXZVjnov/JzFhjLEwd3Z4dYjMSnqrEzzGThH47vpCOqPPwJM2FtthLeJ8Pbg==", + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.1.2" + }, + "peerDependencies": { + "react": ">=15", + "react-router": ">=5" + } + }, + "node_modules/react-router-dom": { + "version": "5.3.4", + "resolved": "https://registry.npmjs.org/react-router-dom/-/react-router-dom-5.3.4.tgz", + "integrity": "sha512-m4EqFMHv/Ih4kpcBCONHbkT68KoAeHN4p3lAGoNryfHi0dMy0kCzEZakiKRsvg5wHZ/JLrLW8o8KomWiz/qbYQ==", + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.12.13", + "history": "^4.9.0", + "loose-envify": "^1.3.1", + "prop-types": "^15.6.2", + "react-router": "5.3.4", + "tiny-invariant": "^1.0.2", + "tiny-warning": "^1.0.0" + }, + "peerDependencies": { + "react": ">=15" + } + }, + "node_modules/readable-stream": { + "version": "3.6.2", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", + "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", + "license": "MIT", + "dependencies": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/readdirp": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", + "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", + "license": "MIT", + "dependencies": { + "picomatch": "^2.2.1" + }, + "engines": { + "node": ">=8.10.0" + } + }, + "node_modules/recma-build-jsx": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/recma-build-jsx/-/recma-build-jsx-1.0.0.tgz", + "integrity": "sha512-8GtdyqaBcDfva+GUKDr3nev3VpKAhup1+RvkMvUxURHpW7QyIvk9F5wz7Vzo06CEMSilw6uArgRqhpiUcWp8ew==", + "license": "MIT", + "dependencies": { + "@types/estree": "^1.0.0", + "estree-util-build-jsx": "^3.0.0", + "vfile": "^6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/recma-jsx": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/recma-jsx/-/recma-jsx-1.0.1.tgz", + "integrity": "sha512-huSIy7VU2Z5OLv6oFLosQGGDqPqdO1iq6bWNAdhzMxSJP7RAso4fCZ1cKu8j9YHCZf3TPrq4dw3okhrylgcd7w==", + "license": "MIT", + "dependencies": { + "acorn-jsx": "^5.0.0", + "estree-util-to-js": "^2.0.0", + "recma-parse": "^1.0.0", + "recma-stringify": "^1.0.0", + "unified": "^11.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + }, + "peerDependencies": { + "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" + } + }, + "node_modules/recma-parse": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/recma-parse/-/recma-parse-1.0.0.tgz", + "integrity": "sha512-OYLsIGBB5Y5wjnSnQW6t3Xg7q3fQ7FWbw/vcXtORTnyaSFscOtABg+7Pnz6YZ6c27fG1/aN8CjfwoUEUIdwqWQ==", + "license": "MIT", + "dependencies": { + "@types/estree": "^1.0.0", + "esast-util-from-js": "^2.0.0", + "unified": "^11.0.0", + "vfile": "^6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/recma-stringify": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/recma-stringify/-/recma-stringify-1.0.0.tgz", + "integrity": "sha512-cjwII1MdIIVloKvC9ErQ+OgAtwHBmcZ0Bg4ciz78FtbT8In39aAYbaA7zvxQ61xVMSPE8WxhLwLbhif4Js2C+g==", + "license": "MIT", + "dependencies": { + "@types/estree": "^1.0.0", + "estree-util-to-js": "^2.0.0", + "unified": "^11.0.0", + "vfile": "^6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/regenerate": { + "version": "1.4.2", + "resolved": "https://registry.npmjs.org/regenerate/-/regenerate-1.4.2.tgz", + "integrity": "sha512-zrceR/XhGYU/d/opr2EKO7aRHUeiBI8qjtfHqADTwZd6Szfy16la6kqD0MIUs5z5hx6AaKa+PixpPrR289+I0A==", + "license": "MIT" + }, + "node_modules/regenerate-unicode-properties": { + "version": "10.2.2", + "resolved": "https://registry.npmjs.org/regenerate-unicode-properties/-/regenerate-unicode-properties-10.2.2.tgz", + "integrity": "sha512-m03P+zhBeQd1RGnYxrGyDAPpWX/epKirLrp8e3qevZdVkKtnCrjjWczIbYc8+xd6vcTStVlqfycTx1KR4LOr0g==", + "license": "MIT", + "dependencies": { + "regenerate": "^1.4.2" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/regexpu-core": { + "version": "6.4.0", + "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-6.4.0.tgz", + "integrity": "sha512-0ghuzq67LI9bLXpOX/ISfve/Mq33a4aFRzoQYhnnok1JOFpmE/A2TBGkNVenOGEeSBCjIiWcc6MVOG5HEQv0sA==", + "license": "MIT", + "dependencies": { + "regenerate": "^1.4.2", + "regenerate-unicode-properties": "^10.2.2", + "regjsgen": "^0.8.0", + "regjsparser": "^0.13.0", + "unicode-match-property-ecmascript": "^2.0.0", + "unicode-match-property-value-ecmascript": "^2.2.1" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/registry-auth-token": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/registry-auth-token/-/registry-auth-token-5.1.0.tgz", + "integrity": "sha512-GdekYuwLXLxMuFTwAPg5UKGLW/UXzQrZvH/Zj791BQif5T05T0RsaLfHc9q3ZOKi7n+BoprPD9mJ0O0k4xzUlw==", + "license": "MIT", + "dependencies": { + "@pnpm/npm-conf": "^2.1.0" + }, + "engines": { + "node": ">=14" + } + }, + "node_modules/registry-url": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/registry-url/-/registry-url-6.0.1.tgz", + "integrity": "sha512-+crtS5QjFRqFCoQmvGduwYWEBng99ZvmFvF+cUJkGYF1L1BfU8C6Zp9T7f5vPAwyLkUExpvK+ANVZmGU49qi4Q==", + "license": "MIT", + "dependencies": { + "rc": "1.2.8" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/regjsgen": { + "version": "0.8.0", + "resolved": "https://registry.npmjs.org/regjsgen/-/regjsgen-0.8.0.tgz", + "integrity": "sha512-RvwtGe3d7LvWiDQXeQw8p5asZUmfU1G/l6WbUXeHta7Y2PEIvBTwH6E2EfmYUK8pxcxEdEmaomqyp0vZZ7C+3Q==", + "license": "MIT" + }, + "node_modules/regjsparser": { + "version": "0.13.0", + "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.13.0.tgz", + "integrity": "sha512-NZQZdC5wOE/H3UT28fVGL+ikOZcEzfMGk/c3iN9UGxzWHMa1op7274oyiUVrAG4B2EuFhus8SvkaYnhvW92p9Q==", + "license": "BSD-2-Clause", + "dependencies": { + "jsesc": "~3.1.0" + }, + "bin": { + "regjsparser": "bin/parser" + } + }, + "node_modules/rehype-raw": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/rehype-raw/-/rehype-raw-7.0.0.tgz", + "integrity": "sha512-/aE8hCfKlQeA8LmyeyQvQF3eBiLRGNlfBJEvWH7ivp9sBqs7TNqBL5X3v157rM4IFETqDnIOO+z5M/biZbo9Ww==", + "license": "MIT", + "dependencies": { + "@types/hast": "^3.0.0", + "hast-util-raw": "^9.0.0", + "vfile": "^6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/rehype-recma": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/rehype-recma/-/rehype-recma-1.0.0.tgz", + "integrity": "sha512-lqA4rGUf1JmacCNWWZx0Wv1dHqMwxzsDWYMTowuplHF3xH0N/MmrZ/G3BDZnzAkRmxDadujCjaKM2hqYdCBOGw==", + "license": "MIT", + "dependencies": { + "@types/estree": "^1.0.0", + "@types/hast": "^3.0.0", + "hast-util-to-estree": "^3.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/relateurl": { + "version": "0.2.7", + "resolved": "https://registry.npmjs.org/relateurl/-/relateurl-0.2.7.tgz", + "integrity": "sha512-G08Dxvm4iDN3MLM0EsP62EDV9IuhXPR6blNz6Utcp7zyV3tr4HVNINt6MpaRWbxoOHT3Q7YN2P+jaHX8vUbgog==", + "license": "MIT", + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/remark-directive": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/remark-directive/-/remark-directive-3.0.1.tgz", + "integrity": "sha512-gwglrEQEZcZYgVyG1tQuA+h58EZfq5CSULw7J90AFuCTyib1thgHPoqQ+h9iFvU6R+vnZ5oNFQR5QKgGpk741A==", + "license": "MIT", + "dependencies": { + "@types/mdast": "^4.0.0", + "mdast-util-directive": "^3.0.0", + "micromark-extension-directive": "^3.0.0", + "unified": "^11.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/remark-emoji": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/remark-emoji/-/remark-emoji-4.0.1.tgz", + "integrity": "sha512-fHdvsTR1dHkWKev9eNyhTo4EFwbUvJ8ka9SgeWkMPYFX4WoI7ViVBms3PjlQYgw5TLvNQso3GUB/b/8t3yo+dg==", + "license": "MIT", + "dependencies": { + "@types/mdast": "^4.0.2", + "emoticon": "^4.0.1", + "mdast-util-find-and-replace": "^3.0.1", + "node-emoji": "^2.1.0", + "unified": "^11.0.4" + }, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + } + }, + "node_modules/remark-frontmatter": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/remark-frontmatter/-/remark-frontmatter-5.0.0.tgz", + "integrity": "sha512-XTFYvNASMe5iPN0719nPrdItC9aU0ssC4v14mH1BCi1u0n1gAocqcujWUrByftZTbLhRtiKRyjYTSIOcr69UVQ==", + "license": "MIT", + "dependencies": { + "@types/mdast": "^4.0.0", + "mdast-util-frontmatter": "^2.0.0", + "micromark-extension-frontmatter": "^2.0.0", + "unified": "^11.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/remark-gfm": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/remark-gfm/-/remark-gfm-4.0.1.tgz", + "integrity": "sha512-1quofZ2RQ9EWdeN34S79+KExV1764+wCUGop5CPL1WGdD0ocPpu91lzPGbwWMECpEpd42kJGQwzRfyov9j4yNg==", + "license": "MIT", + "dependencies": { + "@types/mdast": "^4.0.0", + "mdast-util-gfm": "^3.0.0", + "micromark-extension-gfm": "^3.0.0", + "remark-parse": "^11.0.0", + "remark-stringify": "^11.0.0", + "unified": "^11.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/remark-mdx": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/remark-mdx/-/remark-mdx-3.1.1.tgz", + "integrity": "sha512-Pjj2IYlUY3+D8x00UJsIOg5BEvfMyeI+2uLPn9VO9Wg4MEtN/VTIq2NEJQfde9PnX15KgtHyl9S0BcTnWrIuWg==", + "license": "MIT", + "dependencies": { + "mdast-util-mdx": "^3.0.0", + "micromark-extension-mdxjs": "^3.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/remark-parse": { + "version": "11.0.0", + "resolved": "https://registry.npmjs.org/remark-parse/-/remark-parse-11.0.0.tgz", + "integrity": "sha512-FCxlKLNGknS5ba/1lmpYijMUzX2esxW5xQqjWxw2eHFfS2MSdaHVINFmhjo+qN1WhZhNimq0dZATN9pH0IDrpA==", + "license": "MIT", + "dependencies": { + "@types/mdast": "^4.0.0", + "mdast-util-from-markdown": "^2.0.0", + "micromark-util-types": "^2.0.0", + "unified": "^11.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/remark-rehype": { + "version": "11.1.2", + "resolved": "https://registry.npmjs.org/remark-rehype/-/remark-rehype-11.1.2.tgz", + "integrity": "sha512-Dh7l57ianaEoIpzbp0PC9UKAdCSVklD8E5Rpw7ETfbTl3FqcOOgq5q2LVDhgGCkaBv7p24JXikPdvhhmHvKMsw==", + "license": "MIT", + "dependencies": { + "@types/hast": "^3.0.0", + "@types/mdast": "^4.0.0", + "mdast-util-to-hast": "^13.0.0", + "unified": "^11.0.0", + "vfile": "^6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/remark-stringify": { + "version": "11.0.0", + "resolved": "https://registry.npmjs.org/remark-stringify/-/remark-stringify-11.0.0.tgz", + "integrity": "sha512-1OSmLd3awB/t8qdoEOMazZkNsfVTeY4fTsgzcQFdXNq8ToTN4ZGwrMnlda4K6smTFKD+GRV6O48i6Z4iKgPPpw==", + "license": "MIT", + "dependencies": { + "@types/mdast": "^4.0.0", + "mdast-util-to-markdown": "^2.0.0", + "unified": "^11.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/renderkid": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/renderkid/-/renderkid-3.0.0.tgz", + "integrity": "sha512-q/7VIQA8lmM1hF+jn+sFSPWGlMkSAeNYcPLmDQx2zzuiDfaLrOmumR8iaUKlenFgh0XRPIUeSPlH3A+AW3Z5pg==", + "license": "MIT", + "dependencies": { + "css-select": "^4.1.3", + "dom-converter": "^0.2.0", + "htmlparser2": "^6.1.0", + "lodash": "^4.17.21", + "strip-ansi": "^6.0.1" + } + }, + "node_modules/renderkid/node_modules/css-select": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/css-select/-/css-select-4.3.0.tgz", + "integrity": "sha512-wPpOYtnsVontu2mODhA19JrqWxNsfdatRKd64kmpRbQgh1KtItko5sTnEpPdpSaJszTOhEMlF/RPz28qj4HqhQ==", + "license": "BSD-2-Clause", + "dependencies": { + "boolbase": "^1.0.0", + "css-what": "^6.0.1", + "domhandler": "^4.3.1", + "domutils": "^2.8.0", + "nth-check": "^2.0.1" + }, + "funding": { + "url": "https://github.com/sponsors/fb55" + } + }, + "node_modules/renderkid/node_modules/dom-serializer": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-1.4.1.tgz", + "integrity": "sha512-VHwB3KfrcOOkelEG2ZOfxqLZdfkil8PtJi4P8N2MMXucZq2yLp75ClViUlOVwyoHEDjYU433Aq+5zWP61+RGag==", + "license": "MIT", + "dependencies": { + "domelementtype": "^2.0.1", + "domhandler": "^4.2.0", + "entities": "^2.0.0" + }, + "funding": { + "url": "https://github.com/cheeriojs/dom-serializer?sponsor=1" + } + }, + "node_modules/renderkid/node_modules/domhandler": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-4.3.1.tgz", + "integrity": "sha512-GrwoxYN+uWlzO8uhUXRl0P+kHE4GtVPfYzVLcUxPL7KNdHKj66vvlhiweIHqYYXWlw+T8iLMp42Lm67ghw4WMQ==", + "license": "BSD-2-Clause", + "dependencies": { + "domelementtype": "^2.2.0" + }, + "engines": { + "node": ">= 4" + }, + "funding": { + "url": "https://github.com/fb55/domhandler?sponsor=1" + } + }, + "node_modules/renderkid/node_modules/domutils": { + "version": "2.8.0", + "resolved": "https://registry.npmjs.org/domutils/-/domutils-2.8.0.tgz", + "integrity": "sha512-w96Cjofp72M5IIhpjgobBimYEfoPjx1Vx0BSX9P30WBdZW2WIKU0T1Bd0kz2eNZ9ikjKgHbEyKx8BB6H1L3h3A==", + "license": "BSD-2-Clause", + "dependencies": { + "dom-serializer": "^1.0.1", + "domelementtype": "^2.2.0", + "domhandler": "^4.2.0" + }, + "funding": { + "url": "https://github.com/fb55/domutils?sponsor=1" + } + }, + "node_modules/renderkid/node_modules/entities": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/entities/-/entities-2.2.0.tgz", + "integrity": "sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A==", + "license": "BSD-2-Clause", + "funding": { + "url": "https://github.com/fb55/entities?sponsor=1" + } + }, + "node_modules/renderkid/node_modules/htmlparser2": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-6.1.0.tgz", + "integrity": "sha512-gyyPk6rgonLFEDGoeRgQNaEUvdJ4ktTmmUh/h2t7s+M8oPpIPxgNACWa+6ESR57kXstwqPiCut0V8NRpcwgU7A==", + "funding": [ + "https://github.com/fb55/htmlparser2?sponsor=1", + { + "type": "github", + "url": "https://github.com/sponsors/fb55" + } + ], + "license": "MIT", + "dependencies": { + "domelementtype": "^2.0.1", + "domhandler": "^4.0.0", + "domutils": "^2.5.2", + "entities": "^2.0.0" + } + }, + "node_modules/repeat-string": { + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz", + "integrity": "sha512-PV0dzCYDNfRi1jCDbJzpW7jNNDRuCOG/jI5ctQcGKt/clZD+YcPS3yIlWuTJMmESC8aevCFmWJy5wjAFgNqN6w==", + "license": "MIT", + "engines": { + "node": ">=0.10" + } + }, + "node_modules/require-from-string": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz", + "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/require-like": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/require-like/-/require-like-0.1.2.tgz", + "integrity": "sha512-oyrU88skkMtDdauHDuKVrgR+zuItqr6/c//FXzvmxRGMexSDc6hNvJInGW3LL46n+8b50RykrvwSUIIQH2LQ5A==", + "engines": { + "node": "*" + } + }, + "node_modules/requires-port": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz", + "integrity": "sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ==", + "license": "MIT" + }, + "node_modules/resolve": { + "version": "1.22.11", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.11.tgz", + "integrity": "sha512-RfqAvLnMl313r7c9oclB1HhUEAezcpLjz95wFH4LVuhk9JF/r22qmVP9AMmOU4vMX7Q8pN8jwNg/CSpdFnMjTQ==", + "license": "MIT", + "dependencies": { + "is-core-module": "^2.16.1", + "path-parse": "^1.0.7", + "supports-preserve-symlinks-flag": "^1.0.0" + }, + "bin": { + "resolve": "bin/resolve" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/resolve-alpn": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/resolve-alpn/-/resolve-alpn-1.2.1.tgz", + "integrity": "sha512-0a1F4l73/ZFZOakJnQ3FvkJ2+gSTQWz/r2KE5OdDY0TxPm5h4GkqkWWfM47T7HsbnOtcJVEF4epCVy6u7Q3K+g==", + "license": "MIT" + }, + "node_modules/resolve-from": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", + "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/resolve-pathname": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/resolve-pathname/-/resolve-pathname-3.0.0.tgz", + "integrity": "sha512-C7rARubxI8bXFNB/hqcp/4iUeIXJhJZvFPFPiSPRnhU5UPxzMFIl+2E6yY6c4k9giDJAhtV+enfA+G89N6Csng==", + "license": "MIT" + }, + "node_modules/responselike": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/responselike/-/responselike-3.0.0.tgz", + "integrity": "sha512-40yHxbNcl2+rzXvZuVkrYohathsSJlMTXKryG5y8uciHv1+xDLHQpgjG64JUO9nrEq2jGLH6IZ8BcZyw3wrweg==", + "license": "MIT", + "dependencies": { + "lowercase-keys": "^3.0.0" + }, + "engines": { + "node": ">=14.16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/retry": { + "version": "0.13.1", + "resolved": "https://registry.npmjs.org/retry/-/retry-0.13.1.tgz", + "integrity": "sha512-XQBQ3I8W1Cge0Seh+6gjj03LbmRFWuoszgK9ooCpwYIrhhoO80pfq4cUkU5DkknwfOfFteRwlZ56PYOGYyFWdg==", + "license": "MIT", + "engines": { + "node": ">= 4" + } + }, + "node_modules/reusify": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.1.0.tgz", + "integrity": "sha512-g6QUff04oZpHs0eG5p83rFLhHeV00ug/Yf9nZM6fLeUrPguBTkTQOdpAWWspMh55TZfVQDPaN3NQJfbVRAxdIw==", + "license": "MIT", + "engines": { + "iojs": ">=1.0.0", + "node": ">=0.10.0" + } + }, + "node_modules/rtlcss": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/rtlcss/-/rtlcss-4.3.0.tgz", + "integrity": "sha512-FI+pHEn7Wc4NqKXMXFM+VAYKEj/mRIcW4h24YVwVtyjI+EqGrLc2Hx/Ny0lrZ21cBWU2goLy36eqMcNj3AQJig==", + "license": "MIT", + "dependencies": { + "escalade": "^3.1.1", + "picocolors": "^1.0.0", + "postcss": "^8.4.21", + "strip-json-comments": "^3.1.1" + }, + "bin": { + "rtlcss": "bin/rtlcss.js" + }, + "engines": { + "node": ">=12.0.0" + } + }, + "node_modules/run-applescript": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/run-applescript/-/run-applescript-7.1.0.tgz", + "integrity": "sha512-DPe5pVFaAsinSaV6QjQ6gdiedWDcRCbUuiQfQa2wmWV7+xC9bGulGI8+TdRmoFkAPaBXk8CrAbnlY2ISniJ47Q==", + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/run-parallel": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", + "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT", + "dependencies": { + "queue-microtask": "^1.2.2" + } + }, + "node_modules/safe-buffer": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT" + }, + "node_modules/safer-buffer": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", + "license": "MIT" + }, + "node_modules/sax": { + "version": "1.4.3", + "resolved": "https://registry.npmjs.org/sax/-/sax-1.4.3.tgz", + "integrity": "sha512-yqYn1JhPczigF94DMS+shiDMjDowYO6y9+wB/4WgO0Y19jWYk0lQ4tuG5KI7kj4FTp1wxPj5IFfcrz/s1c3jjQ==", + "license": "BlueOak-1.0.0" + }, + "node_modules/scheduler": { + "version": "0.27.0", + "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.27.0.tgz", + "integrity": "sha512-eNv+WrVbKu1f3vbYJT/xtiF5syA5HPIMtf9IgY/nKg0sWqzAUEvqY/xm7OcZc/qafLx/iO9FgOmeSAp4v5ti/Q==", + "license": "MIT" + }, + "node_modules/schema-dts": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/schema-dts/-/schema-dts-1.1.5.tgz", + "integrity": "sha512-RJr9EaCmsLzBX2NDiO5Z3ux2BVosNZN5jo0gWgsyKvxKIUL5R3swNvoorulAeL9kLB0iTSX7V6aokhla2m7xbg==", + "license": "Apache-2.0" + }, + "node_modules/schema-utils": { + "version": "4.3.3", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-4.3.3.tgz", + "integrity": "sha512-eflK8wEtyOE6+hsaRVPxvUKYCpRgzLqDTb8krvAsRIwOGlHoSgYLgBXoubGgLd2fT41/OUYdb48v4k4WWHQurA==", + "license": "MIT", + "dependencies": { + "@types/json-schema": "^7.0.9", + "ajv": "^8.9.0", + "ajv-formats": "^2.1.1", + "ajv-keywords": "^5.1.0" + }, + "engines": { + "node": ">= 10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + } + }, + "node_modules/search-insights": { + "version": "2.17.3", + "resolved": "https://registry.npmjs.org/search-insights/-/search-insights-2.17.3.tgz", + "integrity": "sha512-RQPdCYTa8A68uM2jwxoY842xDhvx3E5LFL1LxvxCNMev4o5mLuokczhzjAgGwUZBAmOKZknArSxLKmXtIi2AxQ==", + "license": "MIT", + "peer": true + }, + "node_modules/section-matter": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/section-matter/-/section-matter-1.0.0.tgz", + "integrity": "sha512-vfD3pmTzGpufjScBh50YHKzEu2lxBWhVEHsNGoEXmCmn2hKGfeNLYMzCJpe8cD7gqX7TJluOVpBkAequ6dgMmA==", + "license": "MIT", + "dependencies": { + "extend-shallow": "^2.0.1", + "kind-of": "^6.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/select-hose": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/select-hose/-/select-hose-2.0.0.tgz", + "integrity": "sha512-mEugaLK+YfkijB4fx0e6kImuJdCIt2LxCRcbEYPqRGCs4F2ogyfZU5IAZRdjCP8JPq2AtdNoC/Dux63d9Kiryg==", + "license": "MIT" + }, + "node_modules/selfsigned": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/selfsigned/-/selfsigned-2.4.1.tgz", + "integrity": "sha512-th5B4L2U+eGLq1TVh7zNRGBapioSORUeymIydxgFpwww9d2qyKvtuPU2jJuHvYAwwqi2Y596QBL3eEqcPEYL8Q==", + "license": "MIT", + "dependencies": { + "@types/node-forge": "^1.3.0", + "node-forge": "^1" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/semver": { + "version": "7.7.3", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.3.tgz", + "integrity": "sha512-SdsKMrI9TdgjdweUSR9MweHA4EJ8YxHn8DFaDisvhVlUOe4BF1tLD7GAj0lIqWVl+dPb/rExr0Btby5loQm20Q==", + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/semver-diff": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/semver-diff/-/semver-diff-4.0.0.tgz", + "integrity": "sha512-0Ju4+6A8iOnpL/Thra7dZsSlOHYAHIeMxfhWQRI1/VLcT3WDBZKKtQt/QkBOsiIN9ZpuvHE6cGZ0x4glCMmfiA==", + "license": "MIT", + "dependencies": { + "semver": "^7.3.5" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/send": { + "version": "0.19.2", + "resolved": "https://registry.npmjs.org/send/-/send-0.19.2.tgz", + "integrity": "sha512-VMbMxbDeehAxpOtWJXlcUS5E8iXh6QmN+BkRX1GARS3wRaXEEgzCcB10gTQazO42tpNIya8xIyNx8fll1OFPrg==", + "license": "MIT", + "dependencies": { + "debug": "2.6.9", + "depd": "2.0.0", + "destroy": "1.2.0", + "encodeurl": "~2.0.0", + "escape-html": "~1.0.3", + "etag": "~1.8.1", + "fresh": "~0.5.2", + "http-errors": "~2.0.1", + "mime": "1.6.0", + "ms": "2.1.3", + "on-finished": "~2.4.1", + "range-parser": "~1.2.1", + "statuses": "~2.0.2" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/send/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "license": "MIT", + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/send/node_modules/debug/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "license": "MIT" + }, + "node_modules/send/node_modules/range-parser": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", + "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/serialize-javascript": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.2.tgz", + "integrity": "sha512-Saa1xPByTTq2gdeFZYLLo+RFE35NHZkAbqZeWNd3BpzppeVisAqpDjcp8dyf6uIvEqJRd46jemmyA4iFIeVk8g==", + "license": "BSD-3-Clause", + "dependencies": { + "randombytes": "^2.1.0" + } + }, + "node_modules/serve-handler": { + "version": "6.1.6", + "resolved": "https://registry.npmjs.org/serve-handler/-/serve-handler-6.1.6.tgz", + "integrity": "sha512-x5RL9Y2p5+Sh3D38Fh9i/iQ5ZK+e4xuXRd/pGbM4D13tgo/MGwbttUk8emytcr1YYzBYs+apnUngBDFYfpjPuQ==", + "license": "MIT", + "dependencies": { + "bytes": "3.0.0", + "content-disposition": "0.5.2", + "mime-types": "2.1.18", + "minimatch": "3.1.2", + "path-is-inside": "1.0.2", + "path-to-regexp": "3.3.0", + "range-parser": "1.2.0" + } + }, + "node_modules/serve-handler/node_modules/path-to-regexp": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-3.3.0.tgz", + "integrity": "sha512-qyCH421YQPS2WFDxDjftfc1ZR5WKQzVzqsp4n9M2kQhVOo/ByahFoUNJfl58kOcEGfQ//7weFTDhm+ss8Ecxgw==", + "license": "MIT" + }, + "node_modules/serve-index": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/serve-index/-/serve-index-1.9.1.tgz", + "integrity": "sha512-pXHfKNP4qujrtteMrSBb0rc8HJ9Ms/GrXwcUtUtD5s4ewDJI8bT3Cz2zTVRMKtri49pLx2e0Ya8ziP5Ya2pZZw==", + "license": "MIT", + "dependencies": { + "accepts": "~1.3.4", + "batch": "0.6.1", + "debug": "2.6.9", + "escape-html": "~1.0.3", + "http-errors": "~1.6.2", + "mime-types": "~2.1.17", + "parseurl": "~1.3.2" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/serve-index/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "license": "MIT", + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/serve-index/node_modules/depd": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", + "integrity": "sha512-7emPTl6Dpo6JRXOXjLRxck+FlLRX5847cLKEn00PLAgc3g2hTZZgr+e4c2v6QpSmLeFP3n5yUo7ft6avBK/5jQ==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/serve-index/node_modules/http-errors": { + "version": "1.6.3", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.6.3.tgz", + "integrity": "sha512-lks+lVC8dgGyh97jxvxeYTWQFvh4uw4yC12gVl63Cg30sjPX4wuGcdkICVXDAESr6OJGjqGA8Iz5mkeN6zlD7A==", + "license": "MIT", + "dependencies": { + "depd": "~1.1.2", + "inherits": "2.0.3", + "setprototypeof": "1.1.0", + "statuses": ">= 1.4.0 < 2" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/serve-index/node_modules/inherits": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", + "integrity": "sha512-x00IRNXNy63jwGkJmzPigoySHbaqpNuzKbBOmzK+g2OdZpQ9w+sxCN+VSB3ja7IAge2OP2qpfxTjeNcyjmW1uw==", + "license": "ISC" + }, + "node_modules/serve-index/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "license": "MIT" + }, + "node_modules/serve-index/node_modules/setprototypeof": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.0.tgz", + "integrity": "sha512-BvE/TwpZX4FXExxOxZyRGQQv651MSwmWKZGqvmPcRIjDqWub67kTKuIMx43cZZrS/cBBzwBcNDWoFxt2XEFIpQ==", + "license": "ISC" + }, + "node_modules/serve-index/node_modules/statuses": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz", + "integrity": "sha512-OpZ3zP+jT1PI7I8nemJX4AKmAX070ZkYPVWV/AaKTJl+tXCTGyVdC1a4SL8RUQYEwk/f34ZX8UTykN68FwrqAA==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/serve-static": { + "version": "1.16.3", + "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.16.3.tgz", + "integrity": "sha512-x0RTqQel6g5SY7Lg6ZreMmsOzncHFU7nhnRWkKgWuMTu5NN0DR5oruckMqRvacAN9d5w6ARnRBXl9xhDCgfMeA==", + "license": "MIT", + "dependencies": { + "encodeurl": "~2.0.0", + "escape-html": "~1.0.3", + "parseurl": "~1.3.3", + "send": "~0.19.1" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/set-function-length": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/set-function-length/-/set-function-length-1.2.2.tgz", + "integrity": "sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==", + "license": "MIT", + "dependencies": { + "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", + "has-property-descriptors": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/setprototypeof": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", + "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==", + "license": "ISC" + }, + "node_modules/shallow-clone": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/shallow-clone/-/shallow-clone-3.0.1.tgz", + "integrity": "sha512-/6KqX+GVUdqPuPPd2LxDDxzX6CAbjJehAAOKlNpqqUpAqPM6HeL8f+o3a+JsyGjn2lv0WY8UsTgUJjU9Ok55NA==", + "license": "MIT", + "dependencies": { + "kind-of": "^6.0.2" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/shallowequal": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/shallowequal/-/shallowequal-1.1.0.tgz", + "integrity": "sha512-y0m1JoUZSlPAjXVtPPW70aZWfIL/dSP7AFkRnniLCrK/8MDKog3TySTBmckD+RObVxH0v4Tox67+F14PdED2oQ==", + "license": "MIT" + }, + "node_modules/shebang-command": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", + "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", + "license": "MIT", + "dependencies": { + "shebang-regex": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/shebang-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", + "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/shell-quote": { + "version": "1.8.3", + "resolved": "https://registry.npmjs.org/shell-quote/-/shell-quote-1.8.3.tgz", + "integrity": "sha512-ObmnIF4hXNg1BqhnHmgbDETF8dLPCggZWBjkQfhZpbszZnYur5DUljTcCHii5LC3J5E0yeO/1LIMyH+UvHQgyw==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/side-channel": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.1.0.tgz", + "integrity": "sha512-ZX99e6tRweoUXqR+VBrslhda51Nh5MTQwou5tnUDgbtyM0dBgmhEDtWGP/xbKn6hqfPRHujUNwz5fy/wbbhnpw==", + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "object-inspect": "^1.13.3", + "side-channel-list": "^1.0.0", + "side-channel-map": "^1.0.1", + "side-channel-weakmap": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/side-channel-list": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/side-channel-list/-/side-channel-list-1.0.0.tgz", + "integrity": "sha512-FCLHtRD/gnpCiCHEiJLOwdmFP+wzCmDEkc9y7NsYxeF4u7Btsn1ZuwgwJGxImImHicJArLP4R0yX4c2KCrMrTA==", + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "object-inspect": "^1.13.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/side-channel-map": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/side-channel-map/-/side-channel-map-1.0.1.tgz", + "integrity": "sha512-VCjCNfgMsby3tTdo02nbjtM/ewra6jPHmpThenkTYh8pG9ucZ/1P8So4u4FGBek/BjpOVsDCMoLA/iuBKIFXRA==", + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.2", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.5", + "object-inspect": "^1.13.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/side-channel-weakmap": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/side-channel-weakmap/-/side-channel-weakmap-1.0.2.tgz", + "integrity": "sha512-WPS/HvHQTYnHisLo9McqBHOJk2FkHO/tlpvldyrnem4aeQp4hai3gythswg6p01oSoTl58rcpiFAjF2br2Ak2A==", + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.2", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.5", + "object-inspect": "^1.13.3", + "side-channel-map": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/signal-exit": { + "version": "3.0.7", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", + "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", + "license": "ISC" + }, + "node_modules/sirv": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/sirv/-/sirv-2.0.4.tgz", + "integrity": "sha512-94Bdh3cC2PKrbgSOUqTiGPWVZeSiXfKOVZNJniWoqrWrRkB1CJzBU3NEbiTsPcYy1lDsANA/THzS+9WBiy5nfQ==", + "license": "MIT", + "dependencies": { + "@polka/url": "^1.0.0-next.24", + "mrmime": "^2.0.0", + "totalist": "^3.0.0" + }, + "engines": { + "node": ">= 10" + } + }, + "node_modules/sisteransi": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/sisteransi/-/sisteransi-1.0.5.tgz", + "integrity": "sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==", + "license": "MIT" + }, + "node_modules/sitemap": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/sitemap/-/sitemap-7.1.2.tgz", + "integrity": "sha512-ARCqzHJ0p4gWt+j7NlU5eDlIO9+Rkr/JhPFZKKQ1l5GCus7rJH4UdrlVAh0xC/gDS/Qir2UMxqYNHtsKr2rpCw==", + "license": "MIT", + "dependencies": { + "@types/node": "^17.0.5", + "@types/sax": "^1.2.1", + "arg": "^5.0.0", + "sax": "^1.2.4" + }, + "bin": { + "sitemap": "dist/cli.js" + }, + "engines": { + "node": ">=12.0.0", + "npm": ">=5.6.0" + } + }, + "node_modules/sitemap/node_modules/@types/node": { + "version": "17.0.45", + "resolved": "https://registry.npmjs.org/@types/node/-/node-17.0.45.tgz", + "integrity": "sha512-w+tIMs3rq2afQdsPJlODhoUEKzFP1ayaoyl1CcnwtIlsVe7K7bA1NGm4s3PraqTLlXnbIN84zuBlxBWo1u9BLw==", + "license": "MIT" + }, + "node_modules/skin-tone": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/skin-tone/-/skin-tone-2.0.0.tgz", + "integrity": "sha512-kUMbT1oBJCpgrnKoSr0o6wPtvRWT9W9UKvGLwfJYO2WuahZRHOpEyL1ckyMGgMWh0UdpmaoFqKKD29WTomNEGA==", + "license": "MIT", + "dependencies": { + "unicode-emoji-modifier-base": "^1.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/slash": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", + "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/snake-case": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/snake-case/-/snake-case-3.0.4.tgz", + "integrity": "sha512-LAOh4z89bGQvl9pFfNF8V146i7o7/CqFPbqzYgP+yYzDIDeS9HaNFtXABamRW+AQzEVODcvE79ljJ+8a9YSdMg==", + "license": "MIT", + "dependencies": { + "dot-case": "^3.0.4", + "tslib": "^2.0.3" + } + }, + "node_modules/sockjs": { + "version": "0.3.24", + "resolved": "https://registry.npmjs.org/sockjs/-/sockjs-0.3.24.tgz", + "integrity": "sha512-GJgLTZ7vYb/JtPSSZ10hsOYIvEYsjbNU+zPdIHcUaWVNUEPivzxku31865sSSud0Da0W4lEeOPlmw93zLQchuQ==", + "license": "MIT", + "dependencies": { + "faye-websocket": "^0.11.3", + "uuid": "^8.3.2", + "websocket-driver": "^0.7.4" + } + }, + "node_modules/sort-css-media-queries": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/sort-css-media-queries/-/sort-css-media-queries-2.2.0.tgz", + "integrity": "sha512-0xtkGhWCC9MGt/EzgnvbbbKhqWjl1+/rncmhTh5qCpbYguXh6S/qwePfv/JQ8jePXXmqingylxoC49pCkSPIbA==", + "license": "MIT", + "engines": { + "node": ">= 6.3.0" + } + }, + "node_modules/source-map": { + "version": "0.7.6", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.6.tgz", + "integrity": "sha512-i5uvt8C3ikiWeNZSVZNWcfZPItFQOsYTUAOkcUPGd8DqDy1uOUikjt5dG+uRlwyvR108Fb9DOd4GvXfT0N2/uQ==", + "license": "BSD-3-Clause", + "engines": { + "node": ">= 12" + } + }, + "node_modules/source-map-js": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.1.tgz", + "integrity": "sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==", + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/source-map-support": { + "version": "0.5.21", + "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz", + "integrity": "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==", + "license": "MIT", + "dependencies": { + "buffer-from": "^1.0.0", + "source-map": "^0.6.0" + } + }, + "node_modules/source-map-support/node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/space-separated-tokens": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/space-separated-tokens/-/space-separated-tokens-2.0.2.tgz", + "integrity": "sha512-PEGlAwrG8yXGXRjW32fGbg66JAlOAwbObuqVoJpv/mRgoWDQfgH1wDPvtzWyUSNAXBGSk8h755YDbbcEy3SH2Q==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/spdy": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/spdy/-/spdy-4.0.2.tgz", + "integrity": "sha512-r46gZQZQV+Kl9oItvl1JZZqJKGr+oEkB08A6BzkiR7593/7IbtuncXHd2YoYeTsG4157ZssMu9KYvUHLcjcDoA==", + "license": "MIT", + "dependencies": { + "debug": "^4.1.0", + "handle-thing": "^2.0.0", + "http-deceiver": "^1.2.7", + "select-hose": "^2.0.0", + "spdy-transport": "^3.0.0" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/spdy-transport": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/spdy-transport/-/spdy-transport-3.0.0.tgz", + "integrity": "sha512-hsLVFE5SjA6TCisWeJXFKniGGOpBgMLmerfO2aCyCU5s7nJ/rpAepqmFifv/GCbSbueEeAJJnmSQ2rKC/g8Fcw==", + "license": "MIT", + "dependencies": { + "debug": "^4.1.0", + "detect-node": "^2.0.4", + "hpack.js": "^2.1.6", + "obuf": "^1.1.2", + "readable-stream": "^3.0.6", + "wbuf": "^1.7.3" + } + }, + "node_modules/sprintf-js": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", + "integrity": "sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==", + "license": "BSD-3-Clause" + }, + "node_modules/srcset": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/srcset/-/srcset-4.0.0.tgz", + "integrity": "sha512-wvLeHgcVHKO8Sc/H/5lkGreJQVeYMm9rlmt8PuR1xE31rIuXhuzznUUqAt8MqLhB3MqJdFzlNAfpcWnxiFUcPw==", + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/statuses": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.2.tgz", + "integrity": "sha512-DvEy55V3DB7uknRo+4iOGT5fP1slR8wQohVdknigZPMpMstaKJQWhwiYBACJE3Ul2pTnATihhBYnRhZQHGBiRw==", + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/std-env": { + "version": "3.10.0", + "resolved": "https://registry.npmjs.org/std-env/-/std-env-3.10.0.tgz", + "integrity": "sha512-5GS12FdOZNliM5mAOxFRg7Ir0pWz8MdpYm6AY6VPkGpbA7ZzmbzNcBJQ0GPvvyWgcY7QAhCgf9Uy89I03faLkg==", + "license": "MIT" + }, + "node_modules/string_decoder": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", + "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", + "license": "MIT", + "dependencies": { + "safe-buffer": "~5.2.0" + } + }, + "node_modules/string-width": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz", + "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==", + "license": "MIT", + "dependencies": { + "eastasianwidth": "^0.2.0", + "emoji-regex": "^9.2.2", + "strip-ansi": "^7.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/string-width/node_modules/ansi-regex": { + "version": "6.2.2", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.2.2.tgz", + "integrity": "sha512-Bq3SmSpyFHaWjPk8If9yc6svM8c56dB5BAtW4Qbw5jHTwwXXcTLoRMkpDJp6VL0XzlWaCHTXrkFURMYmD0sLqg==", + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-regex?sponsor=1" + } + }, + "node_modules/string-width/node_modules/strip-ansi": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.2.tgz", + "integrity": "sha512-gmBGslpoQJtgnMAvOVqGZpEz9dyoKTCzy2nfz/n8aIFhN/jCE/rCmcxabB6jOOHV+0WNnylOxaxBQPSvcWklhA==", + "license": "MIT", + "dependencies": { + "ansi-regex": "^6.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/strip-ansi?sponsor=1" + } + }, + "node_modules/stringify-entities": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/stringify-entities/-/stringify-entities-4.0.4.tgz", + "integrity": "sha512-IwfBptatlO+QCJUo19AqvrPNqlVMpW9YEL2LIVY+Rpv2qsjCGxaDLNRgeGsQWJhfItebuJhsGSLjaBbNSQ+ieg==", + "license": "MIT", + "dependencies": { + "character-entities-html4": "^2.0.0", + "character-entities-legacy": "^3.0.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/stringify-object": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/stringify-object/-/stringify-object-3.3.0.tgz", + "integrity": "sha512-rHqiFh1elqCQ9WPLIC8I0Q/g/wj5J1eMkyoiD6eoQApWHP0FtlK7rqnhmabL5VUY9JQCcqwwvlOaSuutekgyrw==", + "license": "BSD-2-Clause", + "dependencies": { + "get-own-enumerable-property-symbols": "^3.0.0", + "is-obj": "^1.0.1", + "is-regexp": "^1.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "license": "MIT", + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-bom-string": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/strip-bom-string/-/strip-bom-string-1.0.0.tgz", + "integrity": "sha512-uCC2VHvQRYu+lMh4My/sFNmF2klFymLX1wHJeXnbEJERpV/ZsVuonzerjfrGpIGF7LBVa1O7i9kjiWvJiFck8g==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/strip-final-newline": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz", + "integrity": "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/strip-json-comments": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", + "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", + "license": "MIT", + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/style-to-js": { + "version": "1.1.21", + "resolved": "https://registry.npmjs.org/style-to-js/-/style-to-js-1.1.21.tgz", + "integrity": "sha512-RjQetxJrrUJLQPHbLku6U/ocGtzyjbJMP9lCNK7Ag0CNh690nSH8woqWH9u16nMjYBAok+i7JO1NP2pOy8IsPQ==", + "license": "MIT", + "dependencies": { + "style-to-object": "1.0.14" + } + }, + "node_modules/style-to-object": { + "version": "1.0.14", + "resolved": "https://registry.npmjs.org/style-to-object/-/style-to-object-1.0.14.tgz", + "integrity": "sha512-LIN7rULI0jBscWQYaSswptyderlarFkjQ+t79nzty8tcIAceVomEVlLzH5VP4Cmsv6MtKhs7qaAiwlcp+Mgaxw==", + "license": "MIT", + "dependencies": { + "inline-style-parser": "0.2.7" + } + }, + "node_modules/stylehacks": { + "version": "6.1.1", + "resolved": "https://registry.npmjs.org/stylehacks/-/stylehacks-6.1.1.tgz", + "integrity": "sha512-gSTTEQ670cJNoaeIp9KX6lZmm8LJ3jPB5yJmX8Zq/wQxOsAFXV3qjWzHas3YYk1qesuVIyYWWUpZ0vSE/dTSGg==", + "license": "MIT", + "dependencies": { + "browserslist": "^4.23.0", + "postcss-selector-parser": "^6.0.16" + }, + "engines": { + "node": "^14 || ^16 || >=18.0" + }, + "peerDependencies": { + "postcss": "^8.4.31" + } + }, + "node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "license": "MIT", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/supports-preserve-symlinks-flag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", + "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/svg-parser": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/svg-parser/-/svg-parser-2.0.4.tgz", + "integrity": "sha512-e4hG1hRwoOdRb37cIMSgzNsxyzKfayW6VOflrwvR+/bzrkyxY/31WkbgnQpgtrNp1SdpJvpUAGTa/ZoiPNDuRQ==", + "license": "MIT" + }, + "node_modules/svgo": { + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/svgo/-/svgo-3.3.2.tgz", + "integrity": "sha512-OoohrmuUlBs8B8o6MB2Aevn+pRIH9zDALSR+6hhqVfa6fRwG/Qw9VUMSMW9VNg2CFc/MTIfabtdOVl9ODIJjpw==", + "license": "MIT", + "dependencies": { + "@trysound/sax": "0.2.0", + "commander": "^7.2.0", + "css-select": "^5.1.0", + "css-tree": "^2.3.1", + "css-what": "^6.1.0", + "csso": "^5.0.5", + "picocolors": "^1.0.0" + }, + "bin": { + "svgo": "bin/svgo" + }, + "engines": { + "node": ">=14.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/svgo" + } + }, + "node_modules/svgo/node_modules/commander": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-7.2.0.tgz", + "integrity": "sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==", + "license": "MIT", + "engines": { + "node": ">= 10" + } + }, + "node_modules/swr": { + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/swr/-/swr-2.3.8.tgz", + "integrity": "sha512-gaCPRVoMq8WGDcWj9p4YWzCMPHzE0WNl6W8ADIx9c3JBEIdMkJGMzW+uzXvxHMltwcYACr9jP+32H8/hgwMR7w==", + "license": "MIT", + "dependencies": { + "dequal": "^2.0.3", + "use-sync-external-store": "^1.6.0" + }, + "peerDependencies": { + "react": "^16.11.0 || ^17.0.0 || ^18.0.0 || ^19.0.0" + } + }, + "node_modules/tapable": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.3.0.tgz", + "integrity": "sha512-g9ljZiwki/LfxmQADO3dEY1CbpmXT5Hm2fJ+QaGKwSXUylMybePR7/67YW7jOrrvjEgL1Fmz5kzyAjWVWLlucg==", + "license": "MIT", + "engines": { + "node": ">=6" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + } + }, + "node_modules/terser": { + "version": "5.44.1", + "resolved": "https://registry.npmjs.org/terser/-/terser-5.44.1.tgz", + "integrity": "sha512-t/R3R/n0MSwnnazuPpPNVO60LX0SKL45pyl9YlvxIdkH0Of7D5qM2EVe+yASRIlY5pZ73nclYJfNANGWPwFDZw==", + "license": "BSD-2-Clause", + "dependencies": { + "@jridgewell/source-map": "^0.3.3", + "acorn": "^8.15.0", + "commander": "^2.20.0", + "source-map-support": "~0.5.20" + }, + "bin": { + "terser": "bin/terser" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/terser-webpack-plugin": { + "version": "5.3.16", + "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-5.3.16.tgz", + "integrity": "sha512-h9oBFCWrq78NyWWVcSwZarJkZ01c2AyGrzs1crmHZO3QUg9D61Wu4NPjBy69n7JqylFF5y+CsUZYmYEIZ3mR+Q==", + "license": "MIT", + "dependencies": { + "@jridgewell/trace-mapping": "^0.3.25", + "jest-worker": "^27.4.5", + "schema-utils": "^4.3.0", + "serialize-javascript": "^6.0.2", + "terser": "^5.31.1" + }, + "engines": { + "node": ">= 10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "webpack": "^5.1.0" + }, + "peerDependenciesMeta": { + "@swc/core": { + "optional": true + }, + "esbuild": { + "optional": true + }, + "uglify-js": { + "optional": true + } + } + }, + "node_modules/terser-webpack-plugin/node_modules/jest-worker": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-27.5.1.tgz", + "integrity": "sha512-7vuh85V5cdDofPyxn58nrPjBktZo0u9x1g8WtjQol+jZDaE+fhN+cIvTj11GndBnMnyfrUOG1sZQxCdjKh+DKg==", + "license": "MIT", + "dependencies": { + "@types/node": "*", + "merge-stream": "^2.0.0", + "supports-color": "^8.0.0" + }, + "engines": { + "node": ">= 10.13.0" + } + }, + "node_modules/terser-webpack-plugin/node_modules/supports-color": { + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", + "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", + "license": "MIT", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/supports-color?sponsor=1" + } + }, + "node_modules/terser/node_modules/commander": { + "version": "2.20.3", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", + "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", + "license": "MIT" + }, + "node_modules/thingies": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/thingies/-/thingies-2.5.0.tgz", + "integrity": "sha512-s+2Bwztg6PhWUD7XMfeYm5qliDdSiZm7M7n8KjTkIsm3l/2lgVRc2/Gx/v+ZX8lT4FMA+i8aQvhcWylldc+ZNw==", + "license": "MIT", + "engines": { + "node": ">=10.18" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/streamich" + }, + "peerDependencies": { + "tslib": "^2" + } + }, + "node_modules/throttleit": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/throttleit/-/throttleit-2.1.0.tgz", + "integrity": "sha512-nt6AMGKW1p/70DF/hGBdJB57B8Tspmbp5gfJ8ilhLnt7kkr2ye7hzD6NVG8GGErk2HWF34igrL2CXmNIkzKqKw==", + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/thunky": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/thunky/-/thunky-1.1.0.tgz", + "integrity": "sha512-eHY7nBftgThBqOyHGVN+l8gF0BucP09fMo0oO/Lb0w1OF80dJv+lDVpXG60WMQvkcxAkNybKsrEIE3ZtKGmPrA==", + "license": "MIT" + }, + "node_modules/tiny-invariant": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/tiny-invariant/-/tiny-invariant-1.3.3.tgz", + "integrity": "sha512-+FbBPE1o9QAYvviau/qC5SE3caw21q3xkvWKBtja5vgqOWIHHJ3ioaq1VPfn/Szqctz2bU/oYeKd9/z5BL+PVg==", + "license": "MIT" + }, + "node_modules/tiny-warning": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/tiny-warning/-/tiny-warning-1.0.3.tgz", + "integrity": "sha512-lBN9zLN/oAf68o3zNXYrdCt1kP8WsiGW8Oo2ka41b2IM5JL/S1CTyX1rW0mb/zSuJun0ZUrDxx4sqvYS2FWzPA==", + "license": "MIT" + }, + "node_modules/tinypool": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/tinypool/-/tinypool-1.1.1.tgz", + "integrity": "sha512-Zba82s87IFq9A9XmjiX5uZA/ARWDrB03OHlq+Vw1fSdt0I+4/Kutwy8BP4Y/y/aORMo61FQ0vIb5j44vSo5Pkg==", + "license": "MIT", + "engines": { + "node": "^18.0.0 || >=20.0.0" + } + }, + "node_modules/to-regex-range": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "license": "MIT", + "dependencies": { + "is-number": "^7.0.0" + }, + "engines": { + "node": ">=8.0" + } + }, + "node_modules/toidentifier": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz", + "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==", + "license": "MIT", + "engines": { + "node": ">=0.6" + } + }, + "node_modules/totalist": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/totalist/-/totalist-3.0.1.tgz", + "integrity": "sha512-sf4i37nQ2LBx4m3wB74y+ubopq6W/dIzXg0FDGjsYnZHVa1Da8FH853wlL2gtUhg+xJXjfk3kUZS3BRoQeoQBQ==", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/tree-dump": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/tree-dump/-/tree-dump-1.1.0.tgz", + "integrity": "sha512-rMuvhU4MCDbcbnleZTFezWsaZXRFemSqAM+7jPnzUl1fo9w3YEKOxAeui0fz3OI4EU4hf23iyA7uQRVko+UaBA==", + "license": "Apache-2.0", + "engines": { + "node": ">=10.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/streamich" + }, + "peerDependencies": { + "tslib": "2" + } + }, + "node_modules/trim-lines": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/trim-lines/-/trim-lines-3.0.1.tgz", + "integrity": "sha512-kRj8B+YHZCc9kQYdWfJB2/oUl9rA99qbowYYBtr4ui4mZyAQ2JpvVBd/6U2YloATfqBhBTSMhTpgBHtU0Mf3Rg==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/trough": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/trough/-/trough-2.2.0.tgz", + "integrity": "sha512-tmMpK00BjZiUyVyvrBK7knerNgmgvcV/KLVyuma/SC+TQN167GrMRciANTz09+k3zW8L8t60jWO1GpfkZdjTaw==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/tslib": { + "version": "2.8.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", + "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==", + "license": "0BSD" + }, + "node_modules/type-fest": { + "version": "2.19.0", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-2.19.0.tgz", + "integrity": "sha512-RAH822pAdBgcNMAfWnCBU3CFZcfZ/i1eZjwFU/dsLKumyuuP3niueg2UAukXYF0E2AAoc82ZSSf9J0WQBinzHA==", + "license": "(MIT OR CC0-1.0)", + "engines": { + "node": ">=12.20" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/type-is": { + "version": "1.6.18", + "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz", + "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==", + "license": "MIT", + "dependencies": { + "media-typer": "0.3.0", + "mime-types": "~2.1.24" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/type-is/node_modules/mime-db": { + "version": "1.52.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", + "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/type-is/node_modules/mime-types": { + "version": "2.1.35", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", + "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", + "license": "MIT", + "dependencies": { + "mime-db": "1.52.0" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/typedarray-to-buffer": { + "version": "3.1.5", + "resolved": "https://registry.npmjs.org/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz", + "integrity": "sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q==", + "license": "MIT", + "dependencies": { + "is-typedarray": "^1.0.0" + } + }, + "node_modules/typescript": { + "version": "5.6.3", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.6.3.tgz", + "integrity": "sha512-hjcS1mhfuyi4WW8IWtjP7brDrG2cuDZukyrYrSauoXGNgx0S7zceP07adYkJycEr56BOUTNPzbInooiN3fn1qw==", + "devOptional": true, + "license": "Apache-2.0", + "bin": { + "tsc": "bin/tsc", + "tsserver": "bin/tsserver" + }, + "engines": { + "node": ">=14.17" + } + }, + "node_modules/undici-types": { + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-7.16.0.tgz", + "integrity": "sha512-Zz+aZWSj8LE6zoxD+xrjh4VfkIG8Ya6LvYkZqtUQGJPZjYl53ypCaUwWqo7eI0x66KBGeRo+mlBEkMSeSZ38Nw==", + "license": "MIT" + }, + "node_modules/unicode-canonical-property-names-ecmascript": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-2.0.1.tgz", + "integrity": "sha512-dA8WbNeb2a6oQzAQ55YlT5vQAWGV9WXOsi3SskE3bcCdM0P4SDd+24zS/OCacdRq5BkdsRj9q3Pg6YyQoxIGqg==", + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/unicode-emoji-modifier-base": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/unicode-emoji-modifier-base/-/unicode-emoji-modifier-base-1.0.0.tgz", + "integrity": "sha512-yLSH4py7oFH3oG/9K+XWrz1pSi3dfUrWEnInbxMfArOfc1+33BlGPQtLsOYwvdMy11AwUBetYuaRxSPqgkq+8g==", + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/unicode-match-property-ecmascript": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/unicode-match-property-ecmascript/-/unicode-match-property-ecmascript-2.0.0.tgz", + "integrity": "sha512-5kaZCrbp5mmbz5ulBkDkbY0SsPOjKqVS35VpL9ulMPfSl0J0Xsm+9Evphv9CoIZFwre7aJoa94AY6seMKGVN5Q==", + "license": "MIT", + "dependencies": { + "unicode-canonical-property-names-ecmascript": "^2.0.0", + "unicode-property-aliases-ecmascript": "^2.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/unicode-match-property-value-ecmascript": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-2.2.1.tgz", + "integrity": "sha512-JQ84qTuMg4nVkx8ga4A16a1epI9H6uTXAknqxkGF/aFfRLw1xC/Bp24HNLaZhHSkWd3+84t8iXnp1J0kYcZHhg==", + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/unicode-property-aliases-ecmascript": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-2.2.0.tgz", + "integrity": "sha512-hpbDzxUY9BFwX+UeBnxv3Sh1q7HFxj48DTmXchNgRa46lO8uj3/1iEn3MiNUYTg1g9ctIqXCCERn8gYZhHC5lQ==", + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/unified": { + "version": "11.0.5", + "resolved": "https://registry.npmjs.org/unified/-/unified-11.0.5.tgz", + "integrity": "sha512-xKvGhPWw3k84Qjh8bI3ZeJjqnyadK+GEFtazSfZv/rKeTkTjOJho6mFqh2SM96iIcZokxiOpg78GazTSg8+KHA==", + "license": "MIT", + "dependencies": { + "@types/unist": "^3.0.0", + "bail": "^2.0.0", + "devlop": "^1.0.0", + "extend": "^3.0.0", + "is-plain-obj": "^4.0.0", + "trough": "^2.0.0", + "vfile": "^6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/unique-string": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/unique-string/-/unique-string-3.0.0.tgz", + "integrity": "sha512-VGXBUVwxKMBUznyffQweQABPRRW1vHZAbadFZud4pLFAqRGvv/96vafgjWFqzourzr8YonlQiPgH0YCJfawoGQ==", + "license": "MIT", + "dependencies": { + "crypto-random-string": "^4.0.0" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/unist-util-is": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-6.0.1.tgz", + "integrity": "sha512-LsiILbtBETkDz8I9p1dQ0uyRUWuaQzd/cuEeS1hoRSyW5E5XGmTzlwY1OrNzzakGowI9Dr/I8HVaw4hTtnxy8g==", + "license": "MIT", + "dependencies": { + "@types/unist": "^3.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/unist-util-position": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/unist-util-position/-/unist-util-position-5.0.0.tgz", + "integrity": "sha512-fucsC7HjXvkB5R3kTCO7kUjRdrS0BJt3M/FPxmHMBOm8JQi2BsHAHFsy27E0EolP8rp0NzXsJ+jNPyDWvOJZPA==", + "license": "MIT", + "dependencies": { + "@types/unist": "^3.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/unist-util-position-from-estree": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/unist-util-position-from-estree/-/unist-util-position-from-estree-2.0.0.tgz", + "integrity": "sha512-KaFVRjoqLyF6YXCbVLNad/eS4+OfPQQn2yOd7zF/h5T/CSL2v8NpN6a5TPvtbXthAGw5nG+PuTtq+DdIZr+cRQ==", + "license": "MIT", + "dependencies": { + "@types/unist": "^3.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/unist-util-stringify-position": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-4.0.0.tgz", + "integrity": "sha512-0ASV06AAoKCDkS2+xw5RXJywruurpbC4JZSm7nr7MOt1ojAzvyyaO+UxZf18j8FCF6kmzCZKcAgN/yu2gm2XgQ==", + "license": "MIT", + "dependencies": { + "@types/unist": "^3.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/unist-util-visit": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-5.0.0.tgz", + "integrity": "sha512-MR04uvD+07cwl/yhVuVWAtw+3GOR/knlL55Nd/wAdblk27GCVt3lqpTivy/tkJcZoNPzTwS1Y+KMojlLDhoTzg==", + "license": "MIT", + "dependencies": { + "@types/unist": "^3.0.0", + "unist-util-is": "^6.0.0", + "unist-util-visit-parents": "^6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/unist-util-visit-parents": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-6.0.2.tgz", + "integrity": "sha512-goh1s1TBrqSqukSc8wrjwWhL0hiJxgA8m4kFxGlQ+8FYQ3C/m11FcTs4YYem7V664AhHVvgoQLk890Ssdsr2IQ==", + "license": "MIT", + "dependencies": { + "@types/unist": "^3.0.0", + "unist-util-is": "^6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/universalify": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.1.tgz", + "integrity": "sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==", + "license": "MIT", + "engines": { + "node": ">= 10.0.0" + } + }, + "node_modules/unpipe": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", + "integrity": "sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==", + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/update-browserslist-db": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.2.2.tgz", + "integrity": "sha512-E85pfNzMQ9jpKkA7+TJAi4TJN+tBCuWh5rUcS/sv6cFi+1q9LYDwDI5dpUL0u/73EElyQ8d3TEaeW4sPedBqYA==", + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/browserslist" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "dependencies": { + "escalade": "^3.2.0", + "picocolors": "^1.1.1" + }, + "bin": { + "update-browserslist-db": "cli.js" + }, + "peerDependencies": { + "browserslist": ">= 4.21.0" + } + }, + "node_modules/update-notifier": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/update-notifier/-/update-notifier-6.0.2.tgz", + "integrity": "sha512-EDxhTEVPZZRLWYcJ4ZXjGFN0oP7qYvbXWzEgRm/Yql4dHX5wDbvh89YHP6PK1lzZJYrMtXUuZZz8XGK+U6U1og==", + "license": "BSD-2-Clause", + "dependencies": { + "boxen": "^7.0.0", + "chalk": "^5.0.1", + "configstore": "^6.0.0", + "has-yarn": "^3.0.0", + "import-lazy": "^4.0.0", + "is-ci": "^3.0.1", + "is-installed-globally": "^0.4.0", + "is-npm": "^6.0.0", + "is-yarn-global": "^0.4.0", + "latest-version": "^7.0.0", + "pupa": "^3.1.0", + "semver": "^7.3.7", + "semver-diff": "^4.0.0", + "xdg-basedir": "^5.1.0" + }, + "engines": { + "node": ">=14.16" + }, + "funding": { + "url": "https://github.com/yeoman/update-notifier?sponsor=1" + } + }, + "node_modules/update-notifier/node_modules/boxen": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/boxen/-/boxen-7.1.1.tgz", + "integrity": "sha512-2hCgjEmP8YLWQ130n2FerGv7rYpfBmnmp9Uy2Le1vge6X3gZIfSmEzP5QTDElFxcvVcXlEn8Aq6MU/PZygIOog==", + "license": "MIT", + "dependencies": { + "ansi-align": "^3.0.1", + "camelcase": "^7.0.1", + "chalk": "^5.2.0", + "cli-boxes": "^3.0.0", + "string-width": "^5.1.2", + "type-fest": "^2.13.0", + "widest-line": "^4.0.1", + "wrap-ansi": "^8.1.0" + }, + "engines": { + "node": ">=14.16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/update-notifier/node_modules/camelcase": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-7.0.1.tgz", + "integrity": "sha512-xlx1yCK2Oc1APsPXDL2LdlNP6+uu8OCDdhOBSVT279M/S+y75O30C2VuD8T2ogdePBBl7PfPF4504tnLgX3zfw==", + "license": "MIT", + "engines": { + "node": ">=14.16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/update-notifier/node_modules/chalk": { + "version": "5.6.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-5.6.2.tgz", + "integrity": "sha512-7NzBL0rN6fMUW+f7A6Io4h40qQlG+xGmtMxfbnH/K7TAtt8JQWVQK+6g0UXKMeVJoyV5EkkNsErQ8pVD3bLHbA==", + "license": "MIT", + "engines": { + "node": "^12.17.0 || ^14.13 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/uri-js": { + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", + "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", + "license": "BSD-2-Clause", + "dependencies": { + "punycode": "^2.1.0" + } + }, + "node_modules/url-loader": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/url-loader/-/url-loader-4.1.1.tgz", + "integrity": "sha512-3BTV812+AVHHOJQO8O5MkWgZ5aosP7GnROJwvzLS9hWDj00lZ6Z0wNak423Lp9PBZN05N+Jk/N5Si8jRAlGyWA==", + "license": "MIT", + "dependencies": { + "loader-utils": "^2.0.0", + "mime-types": "^2.1.27", + "schema-utils": "^3.0.0" + }, + "engines": { + "node": ">= 10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "file-loader": "*", + "webpack": "^4.0.0 || ^5.0.0" + }, + "peerDependenciesMeta": { + "file-loader": { + "optional": true + } + } + }, + "node_modules/url-loader/node_modules/ajv": { + "version": "6.12.6", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", + "license": "MIT", + "dependencies": { + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/url-loader/node_modules/ajv-keywords": { + "version": "3.5.2", + "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.2.tgz", + "integrity": "sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==", + "license": "MIT", + "peerDependencies": { + "ajv": "^6.9.1" + } + }, + "node_modules/url-loader/node_modules/json-schema-traverse": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", + "license": "MIT" + }, + "node_modules/url-loader/node_modules/mime-db": { + "version": "1.52.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", + "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/url-loader/node_modules/mime-types": { + "version": "2.1.35", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", + "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", + "license": "MIT", + "dependencies": { + "mime-db": "1.52.0" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/url-loader/node_modules/schema-utils": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.3.0.tgz", + "integrity": "sha512-pN/yOAvcC+5rQ5nERGuwrjLlYvLTbCibnZ1I7B1LaiAz9BRBlE9GMgE/eqV30P7aJQUf7Ddimy/RsbYO/GrVGg==", + "license": "MIT", + "dependencies": { + "@types/json-schema": "^7.0.8", + "ajv": "^6.12.5", + "ajv-keywords": "^3.5.2" + }, + "engines": { + "node": ">= 10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + } + }, + "node_modules/use-sync-external-store": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/use-sync-external-store/-/use-sync-external-store-1.6.0.tgz", + "integrity": "sha512-Pp6GSwGP/NrPIrxVFAIkOQeyw8lFenOHijQWkUTrDvrF4ALqylP2C/KCkeS9dpUM3KvYRQhna5vt7IL95+ZQ9w==", + "license": "MIT", + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0" + } + }, + "node_modules/util-deprecate": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==", + "license": "MIT" + }, + "node_modules/utila": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/utila/-/utila-0.4.0.tgz", + "integrity": "sha512-Z0DbgELS9/L/75wZbro8xAnT50pBVFQZ+hUEueGDU5FN51YSCYM+jdxsfCiHjwNP/4LCDD0i/graKpeBnOXKRA==", + "license": "MIT" + }, + "node_modules/utility-types": { + "version": "3.11.0", + "resolved": "https://registry.npmjs.org/utility-types/-/utility-types-3.11.0.tgz", + "integrity": "sha512-6Z7Ma2aVEWisaL6TvBCy7P8rm2LQoPv6dJ7ecIaIixHcwfbJ0x7mWdbcwlIM5IGQxPZSFYeqRCqlOOeKoJYMkw==", + "license": "MIT", + "engines": { + "node": ">= 4" + } + }, + "node_modules/utils-merge": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", + "integrity": "sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA==", + "license": "MIT", + "engines": { + "node": ">= 0.4.0" + } + }, + "node_modules/uuid": { + "version": "8.3.2", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", + "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==", + "license": "MIT", + "bin": { + "uuid": "dist/bin/uuid" + } + }, + "node_modules/value-equal": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/value-equal/-/value-equal-1.0.1.tgz", + "integrity": "sha512-NOJ6JZCAWr0zlxZt+xqCHNTEKOsrks2HQd4MqhP1qy4z1SkbEP467eNx6TgDKXMvUOb+OENfJCZwM+16n7fRfw==", + "license": "MIT" + }, + "node_modules/vary": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", + "integrity": "sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==", + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/vfile": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/vfile/-/vfile-6.0.3.tgz", + "integrity": "sha512-KzIbH/9tXat2u30jf+smMwFCsno4wHVdNmzFyL+T/L3UGqqk6JKfVqOFOZEpZSHADH1k40ab6NUIXZq422ov3Q==", + "license": "MIT", + "dependencies": { + "@types/unist": "^3.0.0", + "vfile-message": "^4.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/vfile-location": { + "version": "5.0.3", + "resolved": "https://registry.npmjs.org/vfile-location/-/vfile-location-5.0.3.tgz", + "integrity": "sha512-5yXvWDEgqeiYiBe1lbxYF7UMAIm/IcopxMHrMQDq3nvKcjPKIhZklUKL+AE7J7uApI4kwe2snsK+eI6UTj9EHg==", + "license": "MIT", + "dependencies": { + "@types/unist": "^3.0.0", + "vfile": "^6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/vfile-message": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/vfile-message/-/vfile-message-4.0.3.tgz", + "integrity": "sha512-QTHzsGd1EhbZs4AsQ20JX1rC3cOlt/IWJruk893DfLRr57lcnOeMaWG4K0JrRta4mIJZKth2Au3mM3u03/JWKw==", + "license": "MIT", + "dependencies": { + "@types/unist": "^3.0.0", + "unist-util-stringify-position": "^4.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/watchpack": { + "version": "2.4.4", + "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-2.4.4.tgz", + "integrity": "sha512-c5EGNOiyxxV5qmTtAB7rbiXxi1ooX1pQKMLX/MIabJjRA0SJBQOjKF+KSVfHkr9U1cADPon0mRiVe/riyaiDUA==", + "license": "MIT", + "dependencies": { + "glob-to-regexp": "^0.4.1", + "graceful-fs": "^4.1.2" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/wbuf": { + "version": "1.7.3", + "resolved": "https://registry.npmjs.org/wbuf/-/wbuf-1.7.3.tgz", + "integrity": "sha512-O84QOnr0icsbFGLS0O3bI5FswxzRr8/gHwWkDlQFskhSPryQXvrTMxjxGP4+iWYoauLoBvfDpkrOauZ+0iZpDA==", + "license": "MIT", + "dependencies": { + "minimalistic-assert": "^1.0.0" + } + }, + "node_modules/web-namespaces": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/web-namespaces/-/web-namespaces-2.0.1.tgz", + "integrity": "sha512-bKr1DkiNa2krS7qxNtdrtHAmzuYGFQLiQ13TsorsdT6ULTkPLKuu5+GsFpDlg6JFjUTwX2DyhMPG2be8uPrqsQ==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/webpack": { + "version": "5.103.0", + "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.103.0.tgz", + "integrity": "sha512-HU1JOuV1OavsZ+mfigY0j8d1TgQgbZ6M+J75zDkpEAwYeXjWSqrGJtgnPblJjd/mAyTNQ7ygw0MiKOn6etz8yw==", + "license": "MIT", + "dependencies": { + "@types/eslint-scope": "^3.7.7", + "@types/estree": "^1.0.8", + "@types/json-schema": "^7.0.15", + "@webassemblyjs/ast": "^1.14.1", + "@webassemblyjs/wasm-edit": "^1.14.1", + "@webassemblyjs/wasm-parser": "^1.14.1", + "acorn": "^8.15.0", + "acorn-import-phases": "^1.0.3", + "browserslist": "^4.26.3", + "chrome-trace-event": "^1.0.2", + "enhanced-resolve": "^5.17.3", + "es-module-lexer": "^1.2.1", + "eslint-scope": "5.1.1", + "events": "^3.2.0", + "glob-to-regexp": "^0.4.1", + "graceful-fs": "^4.2.11", + "json-parse-even-better-errors": "^2.3.1", + "loader-runner": "^4.3.1", + "mime-types": "^2.1.27", + "neo-async": "^2.6.2", + "schema-utils": "^4.3.3", + "tapable": "^2.3.0", + "terser-webpack-plugin": "^5.3.11", + "watchpack": "^2.4.4", + "webpack-sources": "^3.3.3" + }, + "bin": { + "webpack": "bin/webpack.js" + }, + "engines": { + "node": ">=10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependenciesMeta": { + "webpack-cli": { + "optional": true + } + } + }, + "node_modules/webpack-bundle-analyzer": { + "version": "4.10.2", + "resolved": "https://registry.npmjs.org/webpack-bundle-analyzer/-/webpack-bundle-analyzer-4.10.2.tgz", + "integrity": "sha512-vJptkMm9pk5si4Bv922ZbKLV8UTT4zib4FPgXMhgzUny0bfDDkLXAVQs3ly3fS4/TN9ROFtb0NFrm04UXFE/Vw==", + "license": "MIT", + "dependencies": { + "@discoveryjs/json-ext": "0.5.7", + "acorn": "^8.0.4", + "acorn-walk": "^8.0.0", + "commander": "^7.2.0", + "debounce": "^1.2.1", + "escape-string-regexp": "^4.0.0", + "gzip-size": "^6.0.0", + "html-escaper": "^2.0.2", + "opener": "^1.5.2", + "picocolors": "^1.0.0", + "sirv": "^2.0.3", + "ws": "^7.3.1" + }, + "bin": { + "webpack-bundle-analyzer": "lib/bin/analyzer.js" + }, + "engines": { + "node": ">= 10.13.0" + } + }, + "node_modules/webpack-bundle-analyzer/node_modules/commander": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-7.2.0.tgz", + "integrity": "sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==", + "license": "MIT", + "engines": { + "node": ">= 10" + } + }, + "node_modules/webpack-dev-middleware": { + "version": "7.4.5", + "resolved": "https://registry.npmjs.org/webpack-dev-middleware/-/webpack-dev-middleware-7.4.5.tgz", + "integrity": "sha512-uxQ6YqGdE4hgDKNf7hUiPXOdtkXvBJXrfEGYSx7P7LC8hnUYGK70X6xQXUvXeNyBDDcsiQXpG2m3G9vxowaEuA==", + "license": "MIT", + "dependencies": { + "colorette": "^2.0.10", + "memfs": "^4.43.1", + "mime-types": "^3.0.1", + "on-finished": "^2.4.1", + "range-parser": "^1.2.1", + "schema-utils": "^4.0.0" + }, + "engines": { + "node": ">= 18.12.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "webpack": "^5.0.0" + }, + "peerDependenciesMeta": { + "webpack": { + "optional": true + } + } + }, + "node_modules/webpack-dev-middleware/node_modules/mime-db": { + "version": "1.54.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.54.0.tgz", + "integrity": "sha512-aU5EJuIN2WDemCcAp2vFBfp/m4EAhWJnUNSSw0ixs7/kXbd6Pg64EmwJkNdFhB8aWt1sH2CTXrLxo/iAGV3oPQ==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/webpack-dev-middleware/node_modules/mime-types": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-3.0.2.tgz", + "integrity": "sha512-Lbgzdk0h4juoQ9fCKXW4by0UJqj+nOOrI9MJ1sSj4nI8aI2eo1qmvQEie4VD1glsS250n15LsWsYtCugiStS5A==", + "license": "MIT", + "dependencies": { + "mime-db": "^1.54.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" + } + }, + "node_modules/webpack-dev-middleware/node_modules/range-parser": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", + "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/webpack-dev-server": { + "version": "5.2.2", + "resolved": "https://registry.npmjs.org/webpack-dev-server/-/webpack-dev-server-5.2.2.tgz", + "integrity": "sha512-QcQ72gh8a+7JO63TAx/6XZf/CWhgMzu5m0QirvPfGvptOusAxG12w2+aua1Jkjr7hzaWDnJ2n6JFeexMHI+Zjg==", + "license": "MIT", + "dependencies": { + "@types/bonjour": "^3.5.13", + "@types/connect-history-api-fallback": "^1.5.4", + "@types/express": "^4.17.21", + "@types/express-serve-static-core": "^4.17.21", + "@types/serve-index": "^1.9.4", + "@types/serve-static": "^1.15.5", + "@types/sockjs": "^0.3.36", + "@types/ws": "^8.5.10", + "ansi-html-community": "^0.0.8", + "bonjour-service": "^1.2.1", + "chokidar": "^3.6.0", + "colorette": "^2.0.10", + "compression": "^1.7.4", + "connect-history-api-fallback": "^2.0.0", + "express": "^4.21.2", + "graceful-fs": "^4.2.6", + "http-proxy-middleware": "^2.0.9", + "ipaddr.js": "^2.1.0", + "launch-editor": "^2.6.1", + "open": "^10.0.3", + "p-retry": "^6.2.0", + "schema-utils": "^4.2.0", + "selfsigned": "^2.4.1", + "serve-index": "^1.9.1", + "sockjs": "^0.3.24", + "spdy": "^4.0.2", + "webpack-dev-middleware": "^7.4.2", + "ws": "^8.18.0" + }, + "bin": { + "webpack-dev-server": "bin/webpack-dev-server.js" + }, + "engines": { + "node": ">= 18.12.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "webpack": "^5.0.0" + }, + "peerDependenciesMeta": { + "webpack": { + "optional": true + }, + "webpack-cli": { + "optional": true + } + } + }, + "node_modules/webpack-dev-server/node_modules/define-lazy-prop": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/define-lazy-prop/-/define-lazy-prop-3.0.0.tgz", + "integrity": "sha512-N+MeXYoqr3pOgn8xfyRPREN7gHakLYjhsHhWGT3fWAiL4IkAt0iDw14QiiEm2bE30c5XX5q0FtAA3CK5f9/BUg==", + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/webpack-dev-server/node_modules/open": { + "version": "10.2.0", + "resolved": "https://registry.npmjs.org/open/-/open-10.2.0.tgz", + "integrity": "sha512-YgBpdJHPyQ2UE5x+hlSXcnejzAvD0b22U2OuAP+8OnlJT+PjWPxtgmGqKKc+RgTM63U9gN0YzrYc71R2WT/hTA==", + "license": "MIT", + "dependencies": { + "default-browser": "^5.2.1", + "define-lazy-prop": "^3.0.0", + "is-inside-container": "^1.0.0", + "wsl-utils": "^0.1.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/webpack-dev-server/node_modules/ws": { + "version": "8.18.3", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.18.3.tgz", + "integrity": "sha512-PEIGCY5tSlUt50cqyMXfCzX+oOPqN0vuGqWzbcJ2xvnkzkq46oOpz7dQaTDBdfICb4N14+GARUDw2XV2N4tvzg==", + "license": "MIT", + "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 + } + } + }, + "node_modules/webpack-merge": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/webpack-merge/-/webpack-merge-6.0.1.tgz", + "integrity": "sha512-hXXvrjtx2PLYx4qruKl+kyRSLc52V+cCvMxRjmKwoA+CBbbF5GfIBtR6kCvl0fYGqTUPKB+1ktVmTHqMOzgCBg==", + "license": "MIT", + "dependencies": { + "clone-deep": "^4.0.1", + "flat": "^5.0.2", + "wildcard": "^2.0.1" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/webpack-sources": { + "version": "3.3.3", + "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-3.3.3.tgz", + "integrity": "sha512-yd1RBzSGanHkitROoPFd6qsrxt+oFhg/129YzheDGqeustzX0vTZJZsSsQjVQC4yzBQ56K55XU8gaNCtIzOnTg==", + "license": "MIT", + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/webpack/node_modules/mime-db": { + "version": "1.52.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", + "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/webpack/node_modules/mime-types": { + "version": "2.1.35", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", + "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", + "license": "MIT", + "dependencies": { + "mime-db": "1.52.0" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/webpackbar": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/webpackbar/-/webpackbar-6.0.1.tgz", + "integrity": "sha512-TnErZpmuKdwWBdMoexjio3KKX6ZtoKHRVvLIU0A47R0VVBDtx3ZyOJDktgYixhoJokZTYTt1Z37OkO9pnGJa9Q==", + "license": "MIT", + "dependencies": { + "ansi-escapes": "^4.3.2", + "chalk": "^4.1.2", + "consola": "^3.2.3", + "figures": "^3.2.0", + "markdown-table": "^2.0.0", + "pretty-time": "^1.1.0", + "std-env": "^3.7.0", + "wrap-ansi": "^7.0.0" + }, + "engines": { + "node": ">=14.21.3" + }, + "peerDependencies": { + "webpack": "3 || 4 || 5" + } + }, + "node_modules/webpackbar/node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "license": "MIT" + }, + "node_modules/webpackbar/node_modules/markdown-table": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/markdown-table/-/markdown-table-2.0.0.tgz", + "integrity": "sha512-Ezda85ToJUBhM6WGaG6veasyym+Tbs3cMAw/ZhOPqXiYsr0jgocBV3j3nx+4lk47plLlIqjwuTm/ywVI+zjJ/A==", + "license": "MIT", + "dependencies": { + "repeat-string": "^1.0.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/webpackbar/node_modules/string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "license": "MIT", + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/webpackbar/node_modules/wrap-ansi": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "node_modules/websocket-driver": { + "version": "0.7.4", + "resolved": "https://registry.npmjs.org/websocket-driver/-/websocket-driver-0.7.4.tgz", + "integrity": "sha512-b17KeDIQVjvb0ssuSDF2cYXSg2iztliJ4B9WdsuB6J952qCPKmnVq4DyW5motImXHDC1cBT/1UezrJVsKw5zjg==", + "license": "Apache-2.0", + "dependencies": { + "http-parser-js": ">=0.5.1", + "safe-buffer": ">=5.1.0", + "websocket-extensions": ">=0.1.1" + }, + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/websocket-extensions": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/websocket-extensions/-/websocket-extensions-0.1.4.tgz", + "integrity": "sha512-OqedPIGOfsDlo31UNwYbCFMSaO9m9G/0faIHj5/dZFDMFqPTcx6UwqyOy3COEaEOg/9VsGIpdqn62W5KhoKSpg==", + "license": "Apache-2.0", + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/which": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "license": "ISC", + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "node-which": "bin/node-which" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/widest-line": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/widest-line/-/widest-line-4.0.1.tgz", + "integrity": "sha512-o0cyEG0e8GPzT4iGHphIOh0cJOV8fivsXxddQasHPHfoZf1ZexrfeA21w2NaEN1RHE+fXlfISmOE8R9N3u3Qig==", + "license": "MIT", + "dependencies": { + "string-width": "^5.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/wildcard": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/wildcard/-/wildcard-2.0.1.tgz", + "integrity": "sha512-CC1bOL87PIWSBhDcTrdeLo6eGT7mCFtrg0uIJtqJUFyK+eJnzl8A1niH56uu7KMa5XFrtiV+AQuHO3n7DsHnLQ==", + "license": "MIT" + }, + "node_modules/wrap-ansi": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-8.1.0.tgz", + "integrity": "sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==", + "license": "MIT", + "dependencies": { + "ansi-styles": "^6.1.0", + "string-width": "^5.0.1", + "strip-ansi": "^7.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "node_modules/wrap-ansi/node_modules/ansi-regex": { + "version": "6.2.2", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.2.2.tgz", + "integrity": "sha512-Bq3SmSpyFHaWjPk8If9yc6svM8c56dB5BAtW4Qbw5jHTwwXXcTLoRMkpDJp6VL0XzlWaCHTXrkFURMYmD0sLqg==", + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-regex?sponsor=1" + } + }, + "node_modules/wrap-ansi/node_modules/ansi-styles": { + "version": "6.2.3", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.3.tgz", + "integrity": "sha512-4Dj6M28JB+oAH8kFkTLUo+a2jwOFkuqb3yucU0CANcRRUbxS0cP0nZYCGjcc3BNXwRIsUVmDGgzawme7zvJHvg==", + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/wrap-ansi/node_modules/strip-ansi": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.2.tgz", + "integrity": "sha512-gmBGslpoQJtgnMAvOVqGZpEz9dyoKTCzy2nfz/n8aIFhN/jCE/rCmcxabB6jOOHV+0WNnylOxaxBQPSvcWklhA==", + "license": "MIT", + "dependencies": { + "ansi-regex": "^6.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/strip-ansi?sponsor=1" + } + }, + "node_modules/write-file-atomic": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-3.0.3.tgz", + "integrity": "sha512-AvHcyZ5JnSfq3ioSyjrBkH9yW4m7Ayk8/9My/DD9onKeu/94fwrMocemO2QAJFAlnnDN+ZDS+ZjAR5ua1/PV/Q==", + "license": "ISC", + "dependencies": { + "imurmurhash": "^0.1.4", + "is-typedarray": "^1.0.0", + "signal-exit": "^3.0.2", + "typedarray-to-buffer": "^3.1.5" + } + }, + "node_modules/ws": { + "version": "7.5.10", + "resolved": "https://registry.npmjs.org/ws/-/ws-7.5.10.tgz", + "integrity": "sha512-+dbF1tHwZpXcbOJdVOkzLDxZP1ailvSxM6ZweXTegylPny803bFhA+vqBYw4s31NSAk4S2Qz+AKXK9a4wkdjcQ==", + "license": "MIT", + "engines": { + "node": ">=8.3.0" + }, + "peerDependencies": { + "bufferutil": "^4.0.1", + "utf-8-validate": "^5.0.2" + }, + "peerDependenciesMeta": { + "bufferutil": { + "optional": true + }, + "utf-8-validate": { + "optional": true + } + } + }, + "node_modules/wsl-utils": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/wsl-utils/-/wsl-utils-0.1.0.tgz", + "integrity": "sha512-h3Fbisa2nKGPxCpm89Hk33lBLsnaGBvctQopaBSOW/uIs6FTe1ATyAnKFJrzVs9vpGdsTe73WF3V4lIsk4Gacw==", + "license": "MIT", + "dependencies": { + "is-wsl": "^3.1.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/wsl-utils/node_modules/is-wsl": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-3.1.0.tgz", + "integrity": "sha512-UcVfVfaK4Sc4m7X3dUSoHoozQGBEFeDC+zVo06t98xe8CzHSZZBekNXH+tu0NalHolcJ/QAGqS46Hef7QXBIMw==", + "license": "MIT", + "dependencies": { + "is-inside-container": "^1.0.0" + }, + "engines": { + "node": ">=16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/xdg-basedir": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/xdg-basedir/-/xdg-basedir-5.1.0.tgz", + "integrity": "sha512-GCPAHLvrIH13+c0SuacwvRYj2SxJXQ4kaVTT5xgL3kPrz56XxkF21IGhjSE1+W0aw7gpBWRGXLCPnPby6lSpmQ==", + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/xml-js": { + "version": "1.6.11", + "resolved": "https://registry.npmjs.org/xml-js/-/xml-js-1.6.11.tgz", + "integrity": "sha512-7rVi2KMfwfWFl+GpPg6m80IVMWXLRjO+PxTq7V2CDhoGak0wzYzFgUY2m4XJ47OGdXd8eLE8EmwfAmdjw7lC1g==", + "license": "MIT", + "dependencies": { + "sax": "^1.2.4" + }, + "bin": { + "xml-js": "bin/cli.js" + } + }, + "node_modules/yallist": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", + "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", + "license": "ISC" + }, + "node_modules/yocto-queue": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-1.2.2.tgz", + "integrity": "sha512-4LCcse/U2MHZ63HAJVE+v71o7yOdIe4cZ70Wpf8D/IyjDKYQLV5GD46B+hSTjJsvV5PztjvHoU580EftxjDZFQ==", + "license": "MIT", + "engines": { + "node": ">=12.20" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/zod": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/zod/-/zod-4.2.1.tgz", + "integrity": "sha512-0wZ1IRqGGhMP76gLqz8EyfBXKk0J2qo2+H3fi4mcUP/KtTocoX08nmIAHl1Z2kJIZbZee8KOpBCSNPRgauucjw==", + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/colinhacks" + } + }, + "node_modules/zwitch": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/zwitch/-/zwitch-2.0.4.tgz", + "integrity": "sha512-bXE4cR/kVZhKZX/RjPEflHaKVhUVl85noU3v6b8apfQEc1x4A+zBxjZ4lN8LqGd6WZ3dl98pY4o717VFmoPp+A==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + } + } +} diff --git a/apps/docs/package.json b/apps/docs/package.json new file mode 100644 index 000000000..6cb9aca59 --- /dev/null +++ b/apps/docs/package.json @@ -0,0 +1,43 @@ +{ + "name": "@hashgraph/asset-tokenization-studio-docs", + "version": "1.1.0", + "private": true, + "description": "Documentation hub for Asset Tokenization Studio", + "scripts": { + "docusaurus": "docusaurus", + "start": "docusaurus start --port 3010", + "build": "docusaurus build", + "swizzle": "docusaurus swizzle", + "deploy": "docusaurus deploy", + "clear": "docusaurus clear", + "serve": "docusaurus serve --port 3010", + "write-translations": "docusaurus write-translations", + "write-heading-ids": "docusaurus write-heading-ids", + "typecheck": "tsc" + }, + "dependencies": { + "@docusaurus/core": "3.9.2", + "@docusaurus/preset-classic": "3.9.2", + "@docusaurus/theme-mermaid": "^3.9.2", + "@mdx-js/react": "^3.0.0", + "clsx": "^2.0.0", + "mdast-util-to-string": "^4.0.0", + "prism-react-renderer": "^2.3.0", + "react": "^19.0.0", + "react-dom": "^19.0.0", + "reading-time": "^1.5.0" + }, + "devDependencies": { + "@docusaurus/module-type-aliases": "3.9.2", + "@docusaurus/tsconfig": "3.9.2", + "@docusaurus/types": "3.9.2", + "typescript": "~5.6.2" + }, + "browserslist": { + "production": [">0.5%", "not dead", "not op_mini all"], + "development": ["last 3 chrome version", "last 3 firefox version", "last 5 safari version"] + }, + "engines": { + "node": ">=20.0" + } +} diff --git a/apps/docs/sidebars-ats.ts b/apps/docs/sidebars-ats.ts new file mode 100644 index 000000000..58e14b968 --- /dev/null +++ b/apps/docs/sidebars-ats.ts @@ -0,0 +1,99 @@ +import type { SidebarsConfig } from "@docusaurus/plugin-content-docs"; + +const sidebars: SidebarsConfig = { + atsSidebar: [ + "intro", + { + type: "category", + label: "Getting Started", + collapsed: true, + link: { + type: "doc", + id: "getting-started/index", + }, + items: ["getting-started/quick-start", "getting-started/full-setup"], + }, + { + type: "category", + label: "User Guides", + collapsed: true, + link: { + type: "doc", + id: "user-guides/index", + }, + items: [ + "user-guides/creating-equity", + "user-guides/creating-bond", + "user-guides/token-operations", + "user-guides/updating-configuration", + "user-guides/corporate-actions", + "user-guides/managing-compliance", + "user-guides/managing-external-kyc-lists", + "user-guides/managing-external-control-lists", + "user-guides/managing-external-pause-lists", + "user-guides/hold-operations", + "user-guides/clearing-operations", + "user-guides/ssi-integration", + "user-guides/roles-and-permissions", + ], + }, + { + type: "category", + label: "Developer Guides", + collapsed: true, + link: { + type: "doc", + id: "developer-guides/index", + }, + items: [ + { + type: "category", + label: "SDK", + collapsed: true, + items: ["developer-guides/sdk-integration", "developer-guides/sdk-overview"], + }, + { + type: "category", + label: "Smart Contracts", + collapsed: true, + link: { + type: "doc", + id: "developer-guides/contracts/index", + }, + items: [ + "developer-guides/contracts/overview", + "developer-guides/contracts/deployed-addresses", + "developer-guides/contracts/deployment", + "developer-guides/contracts/adding-facets", + "developer-guides/contracts/upgrading", + "developer-guides/contracts/documenting-contracts", + ], + }, + ], + }, + { + type: "category", + label: "API Documentation", + collapsed: true, + link: { + type: "doc", + id: "api/index", + }, + items: [ + "api/sdk-reference", + { + type: "category", + label: "Smart Contracts", + collapsed: true, + link: { + type: "doc", + id: "api/contracts/index", + }, + items: [], + }, + ], + }, + ], +}; + +export default sidebars; diff --git a/apps/docs/sidebars-mass-payout.ts b/apps/docs/sidebars-mass-payout.ts new file mode 100644 index 000000000..ebc66e8d7 --- /dev/null +++ b/apps/docs/sidebars-mass-payout.ts @@ -0,0 +1,81 @@ +import type { SidebarsConfig } from "@docusaurus/plugin-content-docs"; + +const sidebars: SidebarsConfig = { + massPayoutSidebar: [ + "intro", + { + type: "category", + label: "Getting Started", + collapsed: true, + link: { + type: "doc", + id: "getting-started/index", + }, + items: ["getting-started/quick-start", "getting-started/full-setup"], + }, + { + type: "category", + label: "User Guides", + collapsed: true, + link: { + type: "doc", + id: "user-guides/index", + }, + items: ["user-guides/importing-assets", "user-guides/creating-distributions"], + }, + { + type: "category", + label: "Developer Guides", + collapsed: true, + link: { + type: "doc", + id: "developer-guides/index", + }, + items: [ + { + type: "category", + label: "SDK", + collapsed: true, + items: ["developer-guides/sdk-integration", "developer-guides/sdk-overview"], + }, + { + type: "category", + label: "Smart Contracts", + collapsed: true, + link: { + type: "doc", + id: "developer-guides/contracts/index", + }, + items: ["developer-guides/contracts/deployment", "developer-guides/contracts/overview"], + }, + { + type: "category", + label: "Backend", + collapsed: true, + link: { + type: "doc", + id: "developer-guides/backend/index", + }, + items: [ + "developer-guides/backend/architecture", + "developer-guides/backend/database", + "developer-guides/backend/blockchain-integration", + "developer-guides/backend/running-and-testing", + ], + }, + ], + }, + { + type: "category", + label: "API Documentation", + collapsed: true, + link: { + type: "doc", + id: "api/index", + }, + items: ["api/rest-api/index"], + }, + ], +}; + +export default sidebars; diff --git a/apps/docs/sidebars-references.ts b/apps/docs/sidebars-references.ts new file mode 100644 index 000000000..1c28f68ac --- /dev/null +++ b/apps/docs/sidebars-references.ts @@ -0,0 +1,14 @@ +import type { SidebarsConfig } from "@docusaurus/plugin-content-docs"; + +const sidebars: SidebarsConfig = { + referencesSidebar: [ + "index", + { + type: "category", + label: "General Guides", + items: ["guides/monorepo-migration", "guides/ci-cd-workflows"], + }, + ], +}; + +export default sidebars; diff --git a/apps/docs/sidebars.ts b/apps/docs/sidebars.ts new file mode 100644 index 000000000..1331c0d53 --- /dev/null +++ b/apps/docs/sidebars.ts @@ -0,0 +1,152 @@ +import type { SidebarsConfig } from "@docusaurus/plugin-content-docs"; + +// This runs in Node.js - Don't use client-side code here (browser APIs, JSX...) + +/** + * Creating a sidebar enables you to: + - create an ordered group of docs + - render a sidebar for each doc of that group + - provide next/previous navigation + + The sidebars can be generated from the filesystem, or explicitly defined here. + + Create as many sidebars as you want. + */ +const sidebars: SidebarsConfig = { + // Main documentation sidebar with structured sections + docsSidebar: [ + "intro", + { + type: "category", + label: "Getting Started", + collapsed: false, + link: { + type: "doc", + id: "getting-started/index", + }, + items: [ + "getting-started/ats-quick-start", + "getting-started/ats", + "getting-started/mass-payout-quick-start", + "getting-started/mass-payout", + ], + }, + { + type: "category", + label: "Guides", + collapsed: false, + items: [ + { + type: "category", + label: "Developer", + link: { + type: "generated-index", + title: "Developer Guides", + description: + "Technical guides for developers building on or extending the Asset Tokenization Studio platform.", + slug: "/guides/developer", + }, + items: [ + "guides/developer/monorepo-migration", + "guides/developer/ci-cd-workflows", + { + type: "category", + label: "Contracts", + link: { + type: "generated-index", + title: "Smart Contracts Guides", + description: "Guides for developing, deploying, and maintaining smart contracts.", + slug: "/guides/developer/contracts", + }, + items: [ + { + type: "category", + label: "ATS Contracts", + link: { + type: "doc", + id: "guides/developer/ats-contracts/index", + }, + items: [ + "guides/developer/ats-contracts/deployment", + "guides/developer/ats-contracts/adding-facets", + "guides/developer/ats-contracts/upgrading", + "guides/developer/ats-contracts/documenting-contracts", + ], + }, + ], + }, + { + type: "category", + label: "SDK", + link: { + type: "generated-index", + title: "SDK Guides", + description: "Guides for integrating and using the ATS and Mass Payout SDKs.", + slug: "/guides/developer/sdk", + }, + items: [], + }, + { + type: "category", + label: "Web Applications", + link: { + type: "generated-index", + title: "Web Applications Guides", + description: "Guides for developing and deploying the web applications.", + slug: "/guides/developer/web", + }, + items: [], + }, + ], + }, + { + type: "category", + label: "User", + link: { + type: "generated-index", + title: "User Guides", + description: "Step-by-step guides for using the Asset Tokenization Studio applications.", + slug: "/guides/user", + }, + items: [], + }, + ], + }, + { + type: "category", + label: "API Documentation", + link: { + type: "generated-index", + title: "API Documentation", + description: "Auto-generated API documentation for contracts and SDKs.", + slug: "/api", + }, + items: [ + { + type: "category", + label: "ATS", + link: { + type: "generated-index", + title: "Asset Tokenization Studio API", + description: "API documentation for ATS contracts and SDK.", + slug: "/api/ats", + }, + items: ["api/ats-contracts/index"], + }, + { + type: "category", + label: "Mass Payout", + link: { + type: "generated-index", + title: "Mass Payout API", + description: "API documentation for Mass Payout contracts and SDK.", + slug: "/api/mass-payout", + }, + items: [], + }, + ], + }, + ], +}; + +export default sidebars; diff --git a/apps/docs/src/components/HomepageFeatures/index.tsx b/apps/docs/src/components/HomepageFeatures/index.tsx new file mode 100644 index 000000000..ecd03f5f4 --- /dev/null +++ b/apps/docs/src/components/HomepageFeatures/index.tsx @@ -0,0 +1,73 @@ +import type { ReactNode } from "react"; +import clsx from "clsx"; +import Heading from "@theme/Heading"; +import styles from "./styles.module.css"; + +type FeatureItem = { + title: string; + icon: string; + description: ReactNode; +}; + +const FeatureList: FeatureItem[] = [ + { + title: "Asset Tokenization Studio", + icon: "πŸͺ™", + description: ( + <> + Create and manage security tokens (equities and bonds) compliant with ERC-1400 and ERC-3643 standards on Hedera + network. Diamond pattern architecture for upgradeable, modular smart contracts. + + ), + }, + { + title: "Mass Payout Distribution", + icon: "πŸ’Έ", + description: ( + <> + Execute large-scale batch payments for dividends, coupons, and recurring obligations. Automated distribution + with snapshot management and comprehensive tracking. + + ), + }, + { + title: "Open Source & Docs-as-Code", + icon: "πŸ“š", + description: ( + <> + Transparent documentation living with the code. Comprehensive guides and API references enable community + contribution and seamless integration. + + ), + }, +]; + +function Feature({ title, icon, description }: FeatureItem) { + return ( +
+
+ + {icon} + +
+
+ {title} +

{description}

+
+
+ ); +} + +export default function HomepageFeatures(): ReactNode { + return ( +
+
+
+ {FeatureList.map((props, idx) => ( + + ))} +
+
+
+ ); +} diff --git a/apps/docs/src/components/HomepageFeatures/styles.module.css b/apps/docs/src/components/HomepageFeatures/styles.module.css new file mode 100644 index 000000000..b248eb2e5 --- /dev/null +++ b/apps/docs/src/components/HomepageFeatures/styles.module.css @@ -0,0 +1,11 @@ +.features { + display: flex; + align-items: center; + padding: 2rem 0; + width: 100%; +} + +.featureSvg { + height: 200px; + width: 200px; +} diff --git a/apps/docs/src/css/custom.css b/apps/docs/src/css/custom.css new file mode 100644 index 000000000..c192492d0 --- /dev/null +++ b/apps/docs/src/css/custom.css @@ -0,0 +1,447 @@ +/** + * Asset Tokenization Studio - Custom Theme + * + * This file defines the color palette and styling for the documentation site, + * matching the ATS web application design system. + */ + +/* ======================================================================== + Light Mode Theme (Default) + ======================================================================== */ +:root { + /* Primary Color - Purple (ATS Brand Color) */ + --ifm-color-primary: #764EE5; + --ifm-color-primary-dark: #5437A3; + --ifm-color-primary-darker: #412B7E; + --ifm-color-primary-darkest: #2E1F59; + --ifm-color-primary-light: #9171EA; + --ifm-color-primary-lighter: #C0AEF3; + --ifm-color-primary-lightest: #EDEFFC; + + /* Secondary Color - Blue */ + --ifm-color-secondary: #2D84EB; + --ifm-color-secondary-dark: #2263B0; + --ifm-color-secondary-darker: #143B6A; + --ifm-color-secondary-light: #BED9F9; + --ifm-color-secondary-lighter: #E0EDFC; + --ifm-color-secondary-lightest: #EAF3FD; + + /* Tertiary Color - Green (Success/Accent) */ + --ifm-color-tertiary: #07E78E; + --ifm-color-tertiary-dark: #048B55; + --ifm-color-tertiary-darker: #06B972; + --ifm-color-tertiary-light: #B2F8DC; + --ifm-color-tertiary-lighter: #DAFBEE; + --ifm-color-tertiary-lightest: #E6FDF4; + + /* Neutral Colors */ + --ifm-color-white: #FDFDFD; + --ifm-color-gray-50: #F8F7FC; + --ifm-color-gray-100: #F3F1F7; + --ifm-color-gray-200: #E4E2E9; + --ifm-color-gray-300: #D6D3DE; + --ifm-color-gray-400: #C3BECF; + --ifm-color-gray-500: #A7A0B9; + --ifm-color-gray-600: #958DAB; + --ifm-color-gray-700: #706789; + --ifm-color-gray-800: #57506B; + --ifm-color-gray-900: #332F3F; + + /* Semantic Colors */ + --ifm-color-success: #07E78E; + --ifm-color-info: #2D84EB; + --ifm-color-warning: #FFB800; + --ifm-color-danger: #E74C3C; + + /* Background Colors */ + --ifm-background-color: #FDFDFD; + --ifm-background-surface-color: #F8F7FC; + + /* Text Colors */ + --ifm-font-color-base: #332F3F; + --ifm-font-color-secondary: #57506B; + + /* Code Block Styling */ + --ifm-code-font-size: 95%; + --docusaurus-highlighted-code-line-bg: rgba(118, 78, 229, 0.1); + + /* Link Colors */ + --ifm-link-color: #764EE5; + --ifm-link-hover-color: #5437A3; + + /* Navbar */ + --ifm-navbar-background-color: #FDFDFD; + --ifm-navbar-shadow: 0 1px 2px 0 rgba(51, 47, 63, 0.05); + + /* Footer */ + --ifm-footer-background-color: #332F3F; + --ifm-footer-color: #F8F7FC; + --ifm-footer-link-color: #C0AEF3; + --ifm-footer-link-hover-color: #EDEFFC; + + /* Table of Contents */ + --ifm-toc-border-color: #E4E2E9; + + /* Sidebar */ + --ifm-menu-color-background-active: rgba(118, 78, 229, 0.1); + --ifm-menu-color-background-hover: rgba(118, 78, 229, 0.05); +} + +/* ======================================================================== + Dark Mode Theme + ======================================================================== */ +[data-theme='dark'] { + /* Primary Color - Lighter shades for dark mode */ + --ifm-color-primary: #9171EA; + --ifm-color-primary-dark: #764EE5; + --ifm-color-primary-darker: #5437A3; + --ifm-color-primary-darkest: #412B7E; + --ifm-color-primary-light: #C0AEF3; + --ifm-color-primary-lighter: #D5C8F7; + --ifm-color-primary-lightest: #EDEFFC; + + /* Secondary Color */ + --ifm-color-secondary: #BED9F9; + --ifm-color-secondary-dark: #2D84EB; + --ifm-color-secondary-darker: #2263B0; + --ifm-color-secondary-light: #E0EDFC; + --ifm-color-secondary-lighter: #EAF3FD; + + /* Tertiary Color */ + --ifm-color-tertiary: #B2F8DC; + --ifm-color-tertiary-dark: #07E78E; + --ifm-color-tertiary-darker: #06B972; + --ifm-color-tertiary-light: #DAFBEE; + --ifm-color-tertiary-lighter: #E6FDF4; + + /* Background Colors */ + --ifm-background-color: #1a1820; + --ifm-background-surface-color: #232129; + + /* Text Colors */ + --ifm-font-color-base: #F8F7FC; + --ifm-font-color-secondary: #D6D3DE; + + /* Code Block Styling */ + --docusaurus-highlighted-code-line-bg: rgba(145, 113, 234, 0.2); + + /* Link Colors */ + --ifm-link-color: #C0AEF3; + --ifm-link-hover-color: #EDEFFC; + + /* Navbar */ + --ifm-navbar-background-color: #232129; + --ifm-navbar-shadow: 0 1px 2px 0 rgba(0, 0, 0, 0.3); + + /* Footer */ + --ifm-footer-background-color: #1a1820; + --ifm-footer-color: #F8F7FC; + --ifm-footer-link-color: #D5C8F7; + --ifm-footer-link-hover-color: #EDEFFC; + + /* Table of Contents */ + --ifm-toc-border-color: #332F3F; + + /* Sidebar */ + --ifm-menu-color-background-active: rgba(145, 113, 234, 0.15); + --ifm-menu-color-background-hover: rgba(145, 113, 234, 0.08); +} + +/* ======================================================================== + Custom Components Styling + ======================================================================== */ + +/* Hero Section */ +.hero--primary { + background: linear-gradient(135deg, #764EE5 0%, #5437A3 100%); + color: var(--ifm-color-white); +} + +.hero__title { + font-weight: 700; +} + +.hero__subtitle { + font-weight: 400; + opacity: 0.9; +} + +/* Buttons */ +.button--secondary { + background-color: var(--ifm-color-white); + color: var(--ifm-color-primary); + border: 2px solid var(--ifm-color-white); +} + +.button--secondary:hover { + background-color: transparent; + color: var(--ifm-color-white); + border-color: var(--ifm-color-white); +} + +[data-theme='dark'] .button--secondary { + background-color: var(--ifm-color-gray-900); + color: var(--ifm-color-primary-light); + border-color: var(--ifm-color-primary-light); +} + +[data-theme='dark'] .button--secondary:hover { + background-color: var(--ifm-color-primary-light); + color: var(--ifm-color-gray-900); +} + +/* Tables */ +table { + border-collapse: collapse; + border: 1px solid var(--ifm-table-border-color); +} + +table thead { + background-color: var(--ifm-color-gray-50); +} + +[data-theme='dark'] table thead { + background-color: var(--ifm-color-gray-900); +} + +/* Code Blocks */ +.prism-code { + border-radius: 8px; +} + +/* Admonitions */ +.admonition { + border-radius: 8px; +} + +.admonition-note { + border-left-color: var(--ifm-color-secondary); +} + +.admonition-tip { + border-left-color: var(--ifm-color-tertiary); +} + +.admonition-info { + border-left-color: var(--ifm-color-info); +} + +.admonition-caution { + border-left-color: var(--ifm-color-warning); +} + +.admonition-danger { + border-left-color: var(--ifm-color-danger); +} + +/* Scrollbar Styling */ +::-webkit-scrollbar { + width: 8px; + height: 8px; +} + +::-webkit-scrollbar-track { + background: var(--ifm-color-gray-100); +} + +::-webkit-scrollbar-thumb { + background: var(--ifm-color-primary); + border-radius: 4px; +} + +::-webkit-scrollbar-thumb:hover { + background: var(--ifm-color-primary-dark); +} + +[data-theme='dark'] ::-webkit-scrollbar-track { + background: var(--ifm-color-gray-900); +} + +[data-theme='dark'] ::-webkit-scrollbar-thumb { + background: var(--ifm-color-primary-light); +} + +[data-theme='dark'] ::-webkit-scrollbar-thumb:hover { + background: var(--ifm-color-primary); +} + +/* Markdown Content Enhancements */ +.markdown h1 { + border-bottom: 2px solid var(--ifm-color-primary); + padding-bottom: 0.5rem; +} + +.markdown a { + font-weight: 500; + text-decoration: none; + border-bottom: 1px solid transparent; + transition: border-bottom-color 0.2s ease; +} + +.markdown a:hover { + border-bottom-color: var(--ifm-link-color); +} + +/* Badges */ +.badge { + border-radius: 4px; + font-weight: 600; + font-size: 0.85rem; +} + +.badge--primary { + background-color: var(--ifm-color-primary-lightest); + color: var(--ifm-color-primary-dark); +} + +.badge--secondary { + background-color: var(--ifm-color-secondary-lightest); + color: var(--ifm-color-secondary-dark); +} + +.badge--success { + background-color: var(--ifm-color-tertiary-lightest); + color: var(--ifm-color-tertiary-dark); +} + +/* ======================================================================== + Card Components + ======================================================================== */ + +/* Card Grid Container */ +.card-grid { + display: grid; + grid-template-columns: repeat(auto-fit, minmax(280px, 1fr)); + gap: 1.5rem; + margin: 2rem 0; +} + +/* Individual Card */ +.card-box { + background: var(--ifm-background-surface-color); + border: 2px solid var(--ifm-color-gray-200); + border-radius: 12px; + padding: 1.5rem; + transition: all 0.3s ease; + box-shadow: 0 2px 8px rgba(0, 0, 0, 0.05); +} + +.card-box:hover { + transform: translateY(-4px); + box-shadow: 0 8px 24px rgba(118, 78, 229, 0.15); + border-color: var(--ifm-color-primary); +} + +[data-theme='dark'] .card-box { + background: var(--ifm-background-surface-color); + border-color: var(--ifm-color-gray-700); +} + +[data-theme='dark'] .card-box:hover { + border-color: var(--ifm-color-primary-light); + box-shadow: 0 8px 24px rgba(145, 113, 234, 0.25); +} + +/* Card Header */ +.card-box h3 { + margin-top: 0; + margin-bottom: 0.75rem; + color: var(--ifm-color-primary); + font-size: 1.25rem; + font-weight: 700; + display: flex; + align-items: center; + gap: 0.5rem; +} + +.card-box h3 .icon { + font-size: 1.5rem; +} + +/* Card Description */ +.card-box p { + margin-bottom: 1rem; + color: var(--ifm-font-color-secondary); + line-height: 1.6; +} + +/* Card List */ +.card-box ul { + margin: 1rem 0; + padding-left: 1.25rem; + list-style: none; +} + +.card-box ul li { + position: relative; + margin-bottom: 0.5rem; + padding-left: 1.5rem; + color: var(--ifm-font-color-base); +} + +.card-box ul li::before { + content: "β†’"; + position: absolute; + left: 0; + color: var(--ifm-color-primary); + font-weight: bold; +} + +/* Card Link */ +.card-box a.card-link { + display: inline-flex; + align-items: center; + gap: 0.5rem; + color: var(--ifm-color-primary); + font-weight: 600; + text-decoration: none; + margin-top: 0.5rem; + transition: gap 0.2s ease; +} + +.card-box a.card-link:hover { + gap: 0.75rem; +} + +.card-box a.card-link::after { + content: "β†’"; + font-weight: bold; +} + +/* Card Variants */ +.card-box.card-tip { + border-color: var(--ifm-color-tertiary); + background: linear-gradient(135deg, rgba(7, 231, 142, 0.03) 0%, transparent 100%); +} + +.card-box.card-tip h3 { + color: var(--ifm-color-tertiary-dark); +} + +.card-box.card-info { + border-color: var(--ifm-color-info); + background: linear-gradient(135deg, rgba(45, 132, 235, 0.03) 0%, transparent 100%); +} + +.card-box.card-info h3 { + color: var(--ifm-color-info); +} + +.card-box.card-warning { + border-color: var(--ifm-color-warning); + background: linear-gradient(135deg, rgba(255, 184, 0, 0.03) 0%, transparent 100%); +} + +.card-box.card-warning h3 { + color: var(--ifm-color-warning); +} + +/* Two Column Cards */ +.card-grid-2 { + grid-template-columns: repeat(auto-fit, minmax(350px, 1fr)); +} + +/* Three Column Cards */ +.card-grid-3 { + grid-template-columns: repeat(auto-fit, minmax(250px, 1fr)); +} diff --git a/apps/docs/src/pages/index.module.css b/apps/docs/src/pages/index.module.css new file mode 100644 index 000000000..9f71a5da7 --- /dev/null +++ b/apps/docs/src/pages/index.module.css @@ -0,0 +1,23 @@ +/** + * CSS files with the .module.css suffix will be treated as CSS modules + * and scoped locally. + */ + +.heroBanner { + padding: 4rem 0; + text-align: center; + position: relative; + overflow: hidden; +} + +@media screen and (max-width: 996px) { + .heroBanner { + padding: 2rem; + } +} + +.buttons { + display: flex; + align-items: center; + justify-content: center; +} diff --git a/apps/docs/src/pages/index.tsx b/apps/docs/src/pages/index.tsx new file mode 100644 index 000000000..3e0350f8e --- /dev/null +++ b/apps/docs/src/pages/index.tsx @@ -0,0 +1,43 @@ +import type { ReactNode } from "react"; +import clsx from "clsx"; +import Link from "@docusaurus/Link"; +import useDocusaurusContext from "@docusaurus/useDocusaurusContext"; +import Layout from "@theme/Layout"; +import HomepageFeatures from "@site/src/components/HomepageFeatures"; +import Heading from "@theme/Heading"; + +import styles from "./index.module.css"; + +function HomepageHeader() { + const { siteConfig } = useDocusaurusContext(); + return ( +
+
+ + {siteConfig.title} + +

{siteConfig.tagline}

+
+ + Get Started + +
+
+
+ ); +} + +export default function Home(): ReactNode { + const { siteConfig } = useDocusaurusContext(); + return ( + + +
+ +
+
+ ); +} diff --git a/apps/docs/src/theme/DocItem/Content/index.tsx b/apps/docs/src/theme/DocItem/Content/index.tsx new file mode 100644 index 000000000..176175f7b --- /dev/null +++ b/apps/docs/src/theme/DocItem/Content/index.tsx @@ -0,0 +1,39 @@ +import React, { useEffect, useState } from "react"; +import Content from "@theme-original/DocItem/Content"; +import type ContentType from "@theme/DocItem/Content"; +import type { WrapperProps } from "@docusaurus/types"; +import styles from "./styles.module.css"; + +type Props = WrapperProps; + +function calculateReadingTime(text: string): string { + const wordsPerMinute = 200; + const words = text.trim().split(/\s+/).length; + const minutes = Math.ceil(words / wordsPerMinute); + return `${minutes} min read`; +} + +export default function ContentWrapper(props: Props): React.JSX.Element { + const [readingTime, setReadingTime] = useState(null); + + useEffect(() => { + // Get the article content after render + const article = document.querySelector("article"); + if (article) { + const text = article.textContent || ""; + setReadingTime(calculateReadingTime(text)); + } + }, []); + + return ( + <> + {readingTime && ( +
+ 🕑 + {readingTime} +
+ )} + + + ); +} diff --git a/apps/docs/src/theme/DocItem/Content/styles.module.css b/apps/docs/src/theme/DocItem/Content/styles.module.css new file mode 100644 index 000000000..12ee832f2 --- /dev/null +++ b/apps/docs/src/theme/DocItem/Content/styles.module.css @@ -0,0 +1,12 @@ +.readingTime { + display: flex; + align-items: center; + gap: 0.4rem; + color: var(--ifm-color-emphasis-600); + font-size: 0.875rem; + margin-bottom: 1rem; +} + +.readingTimeIcon { + font-size: 1rem; +} diff --git a/apps/docs/static/.nojekyll b/apps/docs/static/.nojekyll new file mode 100644 index 000000000..e69de29bb diff --git a/apps/docs/static/img/favicon.svg b/apps/docs/static/img/favicon.svg new file mode 100644 index 000000000..5c63afb43 --- /dev/null +++ b/apps/docs/static/img/favicon.svg @@ -0,0 +1,4 @@ + + + + diff --git a/apps/docs/static/img/logo.svg b/apps/docs/static/img/logo.svg new file mode 100644 index 000000000..734724201 --- /dev/null +++ b/apps/docs/static/img/logo.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/apps/docs/static/img/screenshots/ats/ats-web-dashboard.png b/apps/docs/static/img/screenshots/ats/ats-web-dashboard.png new file mode 100644 index 000000000..a13a41638 Binary files /dev/null and b/apps/docs/static/img/screenshots/ats/ats-web-dashboard.png differ diff --git a/apps/docs/static/img/screenshots/ats/ats-web.png b/apps/docs/static/img/screenshots/ats/ats-web.png new file mode 100644 index 000000000..b5075f650 Binary files /dev/null and b/apps/docs/static/img/screenshots/ats/ats-web.png differ diff --git a/apps/docs/tsconfig.json b/apps/docs/tsconfig.json new file mode 100644 index 000000000..920d7a652 --- /dev/null +++ b/apps/docs/tsconfig.json @@ -0,0 +1,8 @@ +{ + // This file is not used in compilation. It is here just for a nice editor experience. + "extends": "@docusaurus/tsconfig", + "compilerOptions": { + "baseUrl": "." + }, + "exclude": [".docusaurus", "build"] +} diff --git a/apps/mass-payout/backend/.env.example b/apps/mass-payout/backend/.env.example index b0c9ffc2a..c7f775741 100644 --- a/apps/mass-payout/backend/.env.example +++ b/apps/mass-payout/backend/.env.example @@ -1,5 +1,8 @@ APP_ENV=local PORT=3000 + +# CORS Configuration (comma-separated origins) +CORS_ORIGINS=http://localhost:5173,http://localhost:3000 POSTGRESQL_HOST=localhost POSTGRESQL_PORT=5432 POSTGRESQL_USER=postgres @@ -29,4 +32,32 @@ BLOCKCHAIN_MIRROR_NODE_URL=https://testnet.mirrornode.hedera.com BLOCKCHAIN_CONTRACT_ID=0.0.429274 BLOCKCHAIN_TOKEN_DECIMALS=6 BLOCKCHAIN_LISTENER_POLL_TIMEOUT=10000 -BLOCKCHAIN_LISTENER_START_TIMESTAMP=2025-09-24T15:25:00.000Z \ No newline at end of file +BLOCKCHAIN_LISTENER_START_TIMESTAMP=2025-09-24T15:25:00.000Z + +# Asset Tokenization Studio (ATS) Integration +ATS_NETWORK=testnet +ATS_MIRROR_URL=https://testnet.mirrornode.hedera.com/api/v1/ +ATS_RPC_URL=https://testnet.hashio.io/api +ATS_FACTORY_ADDRESS=0.0.123456 +ATS_RESOLVER_ADDRESS=0.0.123457 + +# Payment Token Configuration +HEDERA_USDC_ADDRESS=0.0.429274 + +# DFNS Custodial Wallet Configuration +# Service Account Authentication +DFNS_SERVICE_ACCOUNT_AUTHORIZATION_TOKEN=your_dfns_service_account_token_here +DFNS_SERVICE_ACCOUNT_CREDENTIAL_ID=cr-xxxxx-xxxxx-xxxxxxxxxxxxxxxxx +DFNS_SERVICE_ACCOUNT_PRIVATE_KEY_PATH="-----BEGIN EC PRIVATE KEY----- +your_private_key_here +-----END EC PRIVATE KEY-----" + +# DFNS Application Settings +DFNS_APP_ID=ap-xxxxx-xxxxx-xxxxxxxxxxxxxxxxx +DFNS_APP_ORIGIN=http://localhost:3000 +DFNS_BASE_URL=https://api.dfns.ninja + +# DFNS Wallet Configuration +DFNS_WALLET_ID=wa-xxxxx-xxxxx-xxxxxxxxxxxxxxxxx +DFNS_WALLET_PUBLIC_KEY=your_wallet_public_key_here +DFNS_HEDERA_ACCOUNT_ID=0.0.123456 \ No newline at end of file diff --git a/apps/mass-payout/backend/README.md b/apps/mass-payout/backend/README.md index 1cb2182a9..6a6ffc994 100644 --- a/apps/mass-payout/backend/README.md +++ b/apps/mass-payout/backend/README.md @@ -160,3 +160,13 @@ npm run test:cov 2. Enable "Automatic Prettier configuration" and "Run on save" 3. Go to **Tools** β†’ **Actions on Save** 4. Enable "Optimize imports" + +--- + +## πŸ“š Documentation + +For more information about the project, see: + +- [Guides](https://github.com/hashgraph/asset-tokenization-studio/tree/main/docs/guides) +- [API Documentation](https://github.com/hashgraph/asset-tokenization-studio/tree/main/docs/api) +- [References](https://github.com/hashgraph/asset-tokenization-studio/tree/main/docs/references) diff --git a/apps/mass-payout/backend/package.json b/apps/mass-payout/backend/package.json index a2637ac7a..00303125b 100644 --- a/apps/mass-payout/backend/package.json +++ b/apps/mass-payout/backend/package.json @@ -1,5 +1,5 @@ { - "name": "@mass-payout/backend", + "name": "@hashgraph/mass-payout-backend", "version": "1.0.0", "description": "Scheduler Payment Distribution Service", "author": "", @@ -29,7 +29,7 @@ "dependencies": { "@faker-js/faker": "9.8.0", "@hashgraph/asset-tokenization-sdk": "*", - "@hashgraph/sdk": "2.66.0", + "@hiero-ledger/sdk": "2.79.0", "@nestjs/cli": "10.3.2", "@nestjs/common": "10.3.3", "@nestjs/config": "3.2.0", @@ -38,7 +38,7 @@ "@nestjs/schedule": "^6.0.0", "@nestjs/swagger": "^7.4.2", "@nestjs/typeorm": "11.0.0", - "@mass-payout/sdk": "*", + "@hashgraph/mass-payout-sdk": "*", "bn.js": "5.2.1", "class-transformer": "0.5.1", "class-validator": "0.14.2", diff --git a/apps/mass-payout/backend/src/app.module.ts b/apps/mass-payout/backend/src/app.module.ts index f2328a98c..cf44b96b6 100644 --- a/apps/mass-payout/backend/src/app.module.ts +++ b/apps/mass-payout/backend/src/app.module.ts @@ -207,7 +207,7 @@ import { ConfigurationModule } from "@config/configuration.module" import { PostgresModule } from "@config/postgres.module" import { AssetTokenizationStudioSdkModule } from "@config/asset-tokenization-studio-sdk.module" import { LifeCycleCashFlowSdkModule } from "@config/life-cycle-cash-flow-sdk.module" -import { MassPayoutSDK } from "@mass-payout/sdk" +import { MassPayoutSDK } from "@hashgraph/mass-payout-sdk" import { CONTROLLERS, PROVIDERS } from "./app.module-components" import { ScheduleModule } from "@nestjs/schedule" diff --git a/apps/mass-payout/backend/src/config/life-cycle-cash-flow-sdk.module.ts b/apps/mass-payout/backend/src/config/life-cycle-cash-flow-sdk.module.ts index bc67f4407..d5b3ee1e2 100644 --- a/apps/mass-payout/backend/src/config/life-cycle-cash-flow-sdk.module.ts +++ b/apps/mass-payout/backend/src/config/life-cycle-cash-flow-sdk.module.ts @@ -203,7 +203,13 @@ */ import { Logger, Module, OnModuleInit, Provider } from "@nestjs/common" -import { ConnectRequest, InitializationRequest, MassPayoutSDK, Network, SupportedWallets } from "@mass-payout/sdk" +import { + ConnectRequest, + InitializationRequest, + MassPayoutSDK, + Network, + SupportedWallets, +} from "@hashgraph/mass-payout-sdk" import { LifeCycleCashFlowSdkService } from "@infrastructure/adapters/life-cycle-cash-flow-sdk.service" import { ConfigModule, ConfigService } from "@nestjs/config" import { ConfigKeys } from "./config-keys" diff --git a/apps/mass-payout/backend/src/infrastructure/adapters/hedera.service.ts b/apps/mass-payout/backend/src/infrastructure/adapters/hedera.service.ts index 6ea30f172..775e2a780 100644 --- a/apps/mass-payout/backend/src/infrastructure/adapters/hedera.service.ts +++ b/apps/mass-payout/backend/src/infrastructure/adapters/hedera.service.ts @@ -207,7 +207,7 @@ import { ConfigService } from "@nestjs/config" import * as crypto from "crypto" import axios from "axios" import { HederaService, HederaTransactionHashResponse } from "@domain/ports/hedera.port" -import { AccountId, EvmAddress } from "@hashgraph/sdk" +import { AccountId, EvmAddress } from "@hiero-ledger/sdk" /** * Implementation of Hedera Mirror Node service diff --git a/apps/mass-payout/backend/src/infrastructure/adapters/life-cycle-cash-flow-sdk.service.ts b/apps/mass-payout/backend/src/infrastructure/adapters/life-cycle-cash-flow-sdk.service.ts index 2ff9c856a..61c831083 100644 --- a/apps/mass-payout/backend/src/infrastructure/adapters/life-cycle-cash-flow-sdk.service.ts +++ b/apps/mass-payout/backend/src/infrastructure/adapters/life-cycle-cash-flow-sdk.service.ts @@ -207,6 +207,7 @@ import { LifeCycleCashFlowPort } from "@domain/ports/life-cycle-cash-flow.port" import { LifeCycleCashFlowAddress } from "@domain/model/life-cycle-cash-flow-address.value-object" import { DeployRequest, + RbacRequest, ExecuteAmountSnapshotByAddressesRequest, ExecuteAmountSnapshotRequest, ExecuteBondCashOutByAddressesRequest, @@ -221,27 +222,46 @@ import { LifeCycleCashFlow, PauseRequest, UnpauseRequest, -} from "@mass-payout/sdk" +} from "@hashgraph/mass-payout-sdk" import { ExecuteDistributionResponse } from "@domain/ports/execute-distribution-response.interface" import { HederaService } from "@domain/ports/hedera.port" +import { ConfigModule, ConfigService } from "@nestjs/config" +import { ConfigKeys } from "@config/config-keys" @Injectable() export class LifeCycleCashFlowSdkService implements LifeCycleCashFlowPort { + lifeCycleCashFlowRoles = [ + "0x0000000000000000000000000000000000000000000000000000000000000000", // DEFAULT_ADMIN_ROLE + "0x8943226357c41253cf6ffc651e04f2a3a7cf1255138972ce150e207c0393cbce", // PAUSER_ROLE + "0x88ad01da1e5558735d5b478c04a0f1667377fb68a98cb0278159d0b790f08c10", // PAYOUT_ROLE + "0xe0d6eef1076057afbcdc5a0534cf7ab9071fa4fdd3750e202da3d49c8913a144", // CASHOUT_ROLE + "0x4a16419d45be80f6de7609caac23eb8c7bfe6336a71da3cefd43ea62183ad211", // TRANSFERER_ROLE + "0x15e92345f55818ea6e01143954b5841c1ba74302c2b157a2b4d0f21f9ad40286", // PAYMENT_TOKEN_MANAGER_ROLE + ] + constructor( private readonly lifeCycleCashFlow: LifeCycleCashFlow, @Inject("HederaService") private readonly hederaService: HederaService, + private readonly config: ConfigService, ) {} async deployContract(hederaAssetTokenAddress: string, hederaTokenAddress: string): Promise { + const defaultRbac: RbacRequest[] = this.getDefaultRbac(this.config.get(ConfigKeys.DFNS_HEDERA_ACCOUNT_ID)) + console.log( "[LifeCycleCashFlowService] deployContract called with:", `\nToken: ${hederaAssetTokenAddress}`, - `\nUSDC: ${hederaTokenAddress}`, + `\nUSDC : ${hederaTokenAddress}`, + `\nrbac : ${defaultRbac}`, ) const response = await this.lifeCycleCashFlow.deploy( - new DeployRequest({ asset: hederaAssetTokenAddress, paymentToken: hederaTokenAddress }), + new DeployRequest({ + asset: hederaAssetTokenAddress, + paymentToken: hederaTokenAddress, + rbac: defaultRbac, + }), ) const evmLifeCycleCashFlowAddress = response.payload @@ -250,6 +270,10 @@ export class LifeCycleCashFlowSdkService implements LifeCycleCashFlowPort { return LifeCycleCashFlowAddress.create(hederaLifeCycleCashFlowAddress, evmLifeCycleCashFlowAddress) } + private getDefaultRbac(accountId: string): RbacRequest[] { + return this.lifeCycleCashFlowRoles.map((role) => ({ role, members: [accountId] })) + } + async pause(lifeCycleCashFlowId: string): Promise { console.log("[LifeCycleCashFlowService] pause called for LifeCycleCashFlowId:", lifeCycleCashFlowId) return await this.lifeCycleCashFlow.pause(new PauseRequest({ lifeCycleCashFlow: lifeCycleCashFlowId })) diff --git a/apps/mass-payout/backend/src/main.ts b/apps/mass-payout/backend/src/main.ts index da1f5afd0..0bb7971e5 100644 --- a/apps/mass-payout/backend/src/main.ts +++ b/apps/mass-payout/backend/src/main.ts @@ -234,8 +234,13 @@ async function bootstrap() { logger: getLogLevels((process.env.LOG_LEVEL as LogLevel) || "log"), }) + // CORS Configuration + const corsOrigins = process.env.CORS_ORIGINS + ? process.env.CORS_ORIGINS.split(",").map((origin) => origin.trim()) + : ["http://localhost:5173"] + app.enableCors({ - origin: ["http://localhost:5173"], + origin: corsOrigins, methods: ["GET", "POST", "PUT", "PATCH", "DELETE", "OPTIONS"], allowedHeaders: ["Content-Type", "Authorization"], credentials: true, @@ -245,7 +250,8 @@ async function bootstrap() { setupSwagger(app) } - await app.listen(3000) + const port = process.env.PORT || 3000 + await app.listen(port) } bootstrap() diff --git a/apps/mass-payout/backend/test/e2e/shared/e2e-test.app.ts b/apps/mass-payout/backend/test/e2e/shared/e2e-test.app.ts index 467e7b32f..eb9674dbc 100644 --- a/apps/mass-payout/backend/test/e2e/shared/e2e-test.app.ts +++ b/apps/mass-payout/backend/test/e2e/shared/e2e-test.app.ts @@ -214,7 +214,7 @@ import { INestApplication } from "@nestjs/common" import { Test, TestingModule } from "@nestjs/testing" import { getRepositoryToken } from "@nestjs/typeorm" import { EntityClassOrSchema } from "@nestjs/typeorm/dist/interfaces/entity-class-or-schema.type" -import { LifeCycleCashFlow } from "@mass-payout/sdk" +import { LifeCycleCashFlow } from "@hashgraph/mass-payout-sdk" import { PostgreSqlContainer } from "@test/shared/containers/postgresql-container" import { Repository } from "typeorm" import { CONTROLLERS, PROVIDERS } from "../../../src/app.module-components" diff --git a/apps/mass-payout/backend/test/shared/utils.ts b/apps/mass-payout/backend/test/shared/utils.ts index f3ef57c4e..12b002319 100644 --- a/apps/mass-payout/backend/test/shared/utils.ts +++ b/apps/mass-payout/backend/test/shared/utils.ts @@ -204,7 +204,7 @@ import { faker } from "@faker-js/faker" import { LifeCycleCashFlowAddress } from "@domain/model/life-cycle-cash-flow-address.value-object" -import { AccountId, TransactionId } from "@hashgraph/sdk" +import { AccountId, TransactionId } from "@hiero-ledger/sdk" export const fakeHederaTxId = (): string => { const account = AccountId.fromString(`0.0.${faker.number.int({ min: 1, max: 10_000_000 })}`) diff --git a/apps/mass-payout/backend/test/unit/infrastructure/adapters/life-cycle-cash-flow-sdk.service.spec.ts b/apps/mass-payout/backend/test/unit/infrastructure/adapters/life-cycle-cash-flow-sdk.service.spec.ts new file mode 100644 index 000000000..5922d3dd5 --- /dev/null +++ b/apps/mass-payout/backend/test/unit/infrastructure/adapters/life-cycle-cash-flow-sdk.service.spec.ts @@ -0,0 +1,289 @@ +/* + * Apache License + * Version 2.0, January 2004 + * http://www.apache.org/licenses/ + * + * TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + * + * 1. Definitions. + * + * "License" shall mean the terms and conditions for use, reproduction, + * and distribution as defined by Sections 1 through 9 of this document. + * + * "Licensor" shall mean the copyright owner or entity authorized by + * the copyright owner that is granting the License. + * + * "Legal Entity" shall mean the union of the acting entity and all + * other entities that control, are controlled by, or are under common + * control with that entity. For the purposes of this definition, + * "control" means (i) the power, direct or indirect, to cause the + * direction or management of such entity, whether by contract or + * otherwise, or (ii) ownership of fifty percent (50%) or more of the + * outstanding shares, or (iii) beneficial ownership of such entity. + * + * "You" (or "Your") shall mean an individual or Legal Entity + * exercising permissions granted by this License. + * + * "Source" form shall mean the preferred form for making modifications, + * including but not limited to software source code, documentation + * source, and configuration files. + * + * "Object" form shall mean any form resulting from mechanical + * transformation or translation of a Source form, including but + * not limited to compiled object code, generated documentation, + * and conversions to other media types. + * + * "Work" shall mean the work of authorship, whether in Source or + * Object form, made available under the License, as indicated by a + * copyright notice that is included in or attached to the work + * (an example is provided in the Appendix below). + * + * "Derivative Works" shall mean any work, whether in Source or Object + * form, that is based on (or derived from) the Work and for which the + * editorial revisions, annotations, elaborations, or other modifications + * represent, as a whole, an original work of authorship. For the purposes + * of this License, Derivative Works shall not include works that remain + * separable from, or merely link (or bind by name) to the interfaces of, + * the Work and Derivative Works thereof. + * + * "Contribution" shall mean any work of authorship, including + * the original version of the Work and any modifications or additions + * to that Work or Derivative Works thereof, that is intentionally + * submitted to Licensor for inclusion in the Work by the copyright owner + * or by an individual or Legal Entity authorized to submit on behalf of + * the copyright owner. For the purposes of this definition, "submitted" + * means any form of electronic, verbal, or written communication sent + * to the Licensor or its representatives, including but not limited to + * communication on electronic mailing lists, source code control + * systems, and issue tracking systems that are managed by, or on behalf + * of, the Licensor for the purpose of discussing and improving the Work, + * but excluding communication that is conspicuously marked or otherwise + * designated in writing by the copyright owner as "Not a Contribution." + * + * "Contributor" shall mean Licensor and any individual or Legal Entity + * on behalf of whom a Contribution has been received by Licensor and + * subsequently incorporated within the Work. + * + * 2. Grant of Copyright License. Subject to the terms and conditions of + * this License, each Contributor hereby grants to You a perpetual, + * worldwide, non-exclusive, no-charge, royalty-free, irrevocable + * copyright license to use, reproduce, modify, distribute, and perform + * the Work and to prepare Derivative Works based upon the Work, and to + * permit persons to whom the Work is furnished to do so, subject to the + * following conditions: + * + * The above copyright notice and this permission notice shall be + * included in all copies or substantial portions of the Work. + * + * 3. Grant of Patent License. Subject to the terms and conditions of + * this License, each Contributor hereby grants to You a perpetual, + * worldwide, non-exclusive, no-charge, royalty-free, irrevocable + * (except as stated in this section) patent license to make, have made, + * use, offer to sell, sell, import, and otherwise transfer the Work, + * where such license applies only to those patent claims licensable + * by such Contributor that are necessarily infringed by their + * Contribution(s) alone or by combination of their Contribution(s) + * with the Work to which such Contribution(s) was submitted. If You + * institute patent litigation against any entity (including a + * cross-claim or counterclaim in a lawsuit) alleging that the Work + * or a Contribution incorporated within the Work constitutes direct + * or contributory patent infringement, then any patent licenses + * granted to You under this License for that Work shall terminate + * as of the date such litigation is filed. + * + * 4. Redistribution. You may reproduce and distribute copies of the + * Work or Derivative Works thereof in any medium, with or without + * modifications, and in Source or Object form, provided that You + * meet the following conditions: + * + * (a) You must give any other recipients of the Work or + * Derivative Works a copy of this License; and + * + * (b) You must cause any modified files to carry prominent notices + * stating that You changed the files; and + * + * (c) You must retain, in the Source form of any Derivative Works + * that You distribute, all copyright, trademark, patent, + * attribution and other notices from the Source form of the Work, + * excluding those notices that do not pertain to any part of + * the Derivative Works; and + * + * (d) If the Work includes a "NOTICE" text file as part of its + * distribution, then any Derivative Works that You distribute must + * include a readable copy of the attribution notices contained + * within such NOTICE file, excluding those notices that do not + * pertain to any part of the Derivative Works, in at least one + * of the following places: within a NOTICE text file distributed + * as part of the Derivative Works; within the Source form or + * documentation, if provided along with the Derivative Works; or, + * within a display generated by the Derivative Works, if and + * wherever such third-party notices normally appear. The contents + * of the NOTICE file are for informational purposes only and + * do not modify the License. You may add Your own attribution + * notices within Derivative Works that You distribute, alongside + * or as an addendum to the NOTICE text from the Work, provided + * that such additional attribution notices cannot be construed + * as modifying the License. + * + * You may add Your own copyright notice to Your modifications and + * may provide additional or different license terms and conditions + * for use, reproduction, or distribution of Your modifications, or + * for any such Derivative Works as a whole, provided Your use, + * reproduction, and distribution of the Work otherwise complies with + * the conditions stated in this License. + * + * 5. Submission of Contributions. Unless You explicitly state otherwise, + * any Contribution intentionally submitted for inclusion in the Work + * by You to the Licensor shall be under the terms and conditions of + * this License, without any additional terms or conditions. + * Notwithstanding the above, nothing herein shall supersede or modify + * the terms of any separate license agreement you may have executed + * with Licensor regarding such Contributions. + * + * 6. Trademarks. This License does not grant permission to use the trade + * names, trademarks, service marks, or product names of the Licensor, + * except as required for reasonable and customary use in describing the + * origin of the Work and reproducing the content of the NOTICE file. + * + * 7. Disclaimer of Warranty. Unless required by applicable law or + * agreed to in writing, Licensor provides the Work (and each + * Contributor provides its Contributions) on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + * implied, including, without limitation, any warranties or conditions + * of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + * PARTICULAR PURPOSE. You are solely responsible for determining the + * appropriateness of using or redistributing the Work and assume any + * risks associated with Your exercise of permissions under this License. + * + * 8. Limitation of Liability. In no event and under no legal theory, + * whether in tort (including negligence), contract, or otherwise, + * unless required by applicable law (such as deliberate and grossly + * negligent acts) or agreed to in writing, shall any Contributor be + * liable to You for damages, including any direct, indirect, special, + * incidental, or consequential damages of any character arising as a + * result of this License or out of the use or inability to use the + * Work (including but not limited to damages for loss of goodwill, + * work stoppage, computer failure or malfunction, or any and all + * other commercial damages or losses), even if such Contributor + * has been advised of the possibility of such damages. + * + * 9. Accepting Warranty or Additional Liability. When redistributing + * the Work or Derivative Works thereof, You may choose to offer, + * and charge a fee for, acceptance of support, warranty, indemnity, + * or other liability obligations and/or rights consistent with this + * License. However, in accepting such obligations, You may act only + * on Your own behalf and on Your sole responsibility, not on behalf + * of any other Contributor, and only if You agree to indemnify, + * defend, and hold each Contributor harmless for any liability + * incurred by, or claims asserted against, such Contributor by reason + * of your accepting any such warranty or additional liability. + * + * END OF TERMS AND CONDITIONS + * + * APPENDIX: How to apply the Apache License to your work. + * + * To apply the Apache License to your work, attach the following + * boilerplate notice, with the fields enclosed by brackets "[]" + * replaced with your own identifying information. (Don't include + * the brackets!) The text should be enclosed in the appropriate + * comment syntax for the file format. We also recommend that a + * file or class name and description of purpose be included on the + * same "printed page" as the copyright notice for easier + * identification within third-party archives. + * + * Copyright [yyyy] [name of copyright owner] + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +import { Test, TestingModule } from "@nestjs/testing" +import { LifeCycleCashFlowSdkService } from "@infrastructure/adapters/life-cycle-cash-flow-sdk.service" +import { LifeCycleCashFlow } from "@hashgraph/mass-payout-sdk" +import { HederaService } from "@domain/ports/hedera.port" +import { ConfigService } from "@nestjs/config" +import { LifeCycleCashFlowAddress } from "@domain/model/life-cycle-cash-flow-address.value-object" +import { RbacRequest } from "@hashgraph/mass-payout-sdk" + +describe("LifeCycleCashFlowSdkService", () => { + let service: LifeCycleCashFlowSdkService + let lifeCycleCashFlow: jest.Mocked + let hederaService: jest.Mocked + let configService: jest.Mocked + + beforeEach(async () => { + // Create mocks + const lifeCycleCashFlowMock = { + deploy: jest.fn(), + } as unknown as jest.Mocked + + const hederaServiceMock = { + getHederaAddressFromEvm: jest.fn(), + } as unknown as jest.Mocked + + const configServiceMock = { + get: jest.fn(), + } as unknown as jest.Mocked + + const module: TestingModule = await Test.createTestingModule({ + providers: [ + LifeCycleCashFlowSdkService, + { provide: LifeCycleCashFlow, useValue: lifeCycleCashFlowMock }, + { provide: "HederaService", useValue: hederaServiceMock }, + { provide: ConfigService, useValue: configServiceMock }, + ], + }).compile() + + service = module.get(LifeCycleCashFlowSdkService) + lifeCycleCashFlow = module.get(LifeCycleCashFlow) + hederaService = module.get("HederaService") + configService = module.get(ConfigService) + }) + + it("should deploy contract and return LifeCycleCashFlowAddress", async () => { + const hederaAsset = "0.0.12345" + const hederaToken = "0.0.54321" + const evmAddress = "0xaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" + const hederaAddress = "0.0.98765" + + // Config mock returns a default account ID + configService.get.mockReturnValue("0.0.99999") + + // LifeCycleCashFlow.deploy mock returns a payload + lifeCycleCashFlow.deploy.mockResolvedValue({ payload: evmAddress }) + + // HederaService mock converts evm -> hedera + hederaService.getHederaAddressFromEvm.mockResolvedValue(hederaAddress) + + const result = await service.deployContract(hederaAsset, hederaToken) + + // Check result is correct + expect(result.evmAddress).toBe(evmAddress) + expect(result.hederaAddress).toBe(hederaAddress) + + // Check that deploy was called with correct DeployRequest + expect(lifeCycleCashFlow.deploy).toHaveBeenCalledTimes(1) + const deployArg = lifeCycleCashFlow.deploy.mock.calls[0][0] + + expect(deployArg.asset).toBe(hederaAsset) + expect(deployArg.paymentToken).toBe(hederaToken) + expect(deployArg.rbac).toMatchObject( + service.lifeCycleCashFlowRoles.map((role) => ({ + role, + members: ["0.0.99999"], + })), + ) + + // Check HederaService called + expect(hederaService.getHederaAddressFromEvm).toHaveBeenCalledWith(evmAddress) + }) +}) diff --git a/apps/mass-payout/frontend/README.md b/apps/mass-payout/frontend/README.md index 2b2d2ed62..fc705949e 100644 --- a/apps/mass-payout/frontend/README.md +++ b/apps/mass-payout/frontend/README.md @@ -63,3 +63,13 @@ npm run test # Run tests with coverage npm run test:cov ``` + +--- + +## πŸ“š Documentation + +For more information about the project, see: + +- [Guides](https://github.com/hashgraph/asset-tokenization-studio/tree/main/docs/guides) +- [API Documentation](https://github.com/hashgraph/asset-tokenization-studio/tree/main/docs/api) +- [References](https://github.com/hashgraph/asset-tokenization-studio/tree/main/docs/references) diff --git a/apps/mass-payout/frontend/package.json b/apps/mass-payout/frontend/package.json index 579fc228d..82206fee4 100644 --- a/apps/mass-payout/frontend/package.json +++ b/apps/mass-payout/frontend/package.json @@ -1,5 +1,5 @@ { - "name": "@mass-payout/frontend", + "name": "@hashgraph/mass-payout-frontend", "version": "1.0.0", "description": "UI for scheduler payment distribution", "private": true, diff --git a/codecov.yml b/codecov.yml index 3b4aae490..a00a60c60 100644 --- a/codecov.yml +++ b/codecov.yml @@ -1,6 +1,6 @@ # Always comment on PRs comment: - layout: 'diff, flags, files' + layout: "diff, flags, files" behavior: new # deletes old comment and posts a new one require_changes: false @@ -16,4 +16,4 @@ coverage: threshold: 1% ignore: - - 'packages/*/dist' + - "packages/*/dist" diff --git a/commitlint.config.ts b/commitlint.config.ts index 2ab278aa0..c8f8f596f 100644 --- a/commitlint.config.ts +++ b/commitlint.config.ts @@ -203,4 +203,4 @@ */ -export default { extends: ['@commitlint/config-conventional'] }; +export default { extends: ["@commitlint/config-conventional"] }; diff --git a/docs/ats/api/contracts/index.md b/docs/ats/api/contracts/index.md new file mode 100644 index 000000000..39a95c876 --- /dev/null +++ b/docs/ats/api/contracts/index.md @@ -0,0 +1,87 @@ +--- +id: index +title: Smart Contracts +sidebar_label: Smart Contracts +--- + +# Smart Contracts API + +Auto-generated API documentation from Solidity smart contract NatSpec comments. + +## Generating Documentation + +To generate or update the API documentation: + +```bash +cd packages/ats/contracts +npm run doc +``` + +This will: + +1. Extract NatSpec comments from all Solidity contracts +2. Generate markdown files in this directory +3. Organize documentation by contract hierarchy + +## Documentation Standards + +All public contracts, functions, and events should include: + +```solidity +/** + * @title Contract name + * @notice User-facing description + * @dev Developer implementation notes + */ +contract MyContract { + /** + * @notice What this function does (user-facing) + * @dev How this function works (developer notes) + * @param _param Description of parameter + * @return Description of return value + */ + function myFunction(uint256 _param) external returns (bool) { + // ... + } +} +``` + +## Finding Documentation + +Navigate the API documentation by: + +- **By Feature**: Look for domain-specific facets (Bond, Equity, etc.) +- **By Layer**: Explore contracts by their architectural layer (0-3) +- **By Interface**: Find interface definitions in the interfaces section +- **Search**: Use the search functionality to find specific contracts or functions + +## Documentation Structure + +The generated API documentation is organized by contract hierarchy: + +- **Layer 0**: Storage Wrappers (ERC1400StorageWrapper, KycStorageWrapper, etc.) +- **Layer 1**: Core Implementation (ERC1400Implementation, AccessControl, etc.) +- **Layer 2**: Domain Features (BondFacet, EquityFacet, etc.) +- **Layer 3**: Jurisdiction-Specific (USA implementations) +- **Infrastructure**: ProxyAdmin, BusinessLogicResolver, Factory + +## Contributing Documentation + +When adding new contracts or modifying existing ones: + +1. Write comprehensive NatSpec comments +2. Generate documentation: `npm run doc` +3. Review the generated output +4. Commit both code and documentation changes + +For detailed guidelines on writing contract documentation, see the [Documenting Contracts Guide](../../developer-guides/contracts/documenting-contracts.md). + +## Related Guides + +- [Contract Overview](../../developer-guides/contracts/overview.md) - Understand contract architecture +- [Documenting Contracts](../../developer-guides/contracts/documenting-contracts.md) - Write better documentation +- [Adding Facets](../../developer-guides/contracts/adding-facets.md) - Create new facets + +--- + +**Note**: This documentation is auto-generated from the latest source code. If you find errors or missing documentation, please check the source contracts and update the NatSpec comments accordingly. diff --git a/docs/ats/api/index.md b/docs/ats/api/index.md new file mode 100644 index 000000000..0479f28aa --- /dev/null +++ b/docs/ats/api/index.md @@ -0,0 +1,27 @@ +--- +id: index +title: API Documentation +sidebar_position: 5 +--- + +# API Documentation + +Technical reference for ATS smart contracts and SDK. + +## Smart Contracts + +[Smart Contracts API β†’](./contracts/index.md) + +Auto-generated documentation for all ATS smart contract interfaces, functions, and events. + +## SDK + +[SDK Reference β†’](./sdk-reference.md) + +Complete reference for all SDK request classes to interact with ATS smart contracts. + +## Additional Resources + +- [Developer Guides](../developer-guides/index.md) - Implementation guides +- [User Guides](../user-guides/index.md) - Application usage +- [GitHub Repository](https://github.com/hashgraph/asset-tokenization-studio) diff --git a/docs/ats/api/sdk-reference.md b/docs/ats/api/sdk-reference.md new file mode 100644 index 000000000..e5d6e3010 --- /dev/null +++ b/docs/ats/api/sdk-reference.md @@ -0,0 +1,586 @@ +--- +id: sdk-reference +title: SDK +sidebar_label: SDK +sidebar_position: 1 +--- + +# SDK Reference + +Complete reference for the Asset Tokenization Studio SDK request classes and operations. + +## Overview + +The ATS SDK provides TypeScript request classes to interact with smart contracts. All request classes are located in: + +``` +packages/ats/sdk/src/port/in/request/ +``` + +All requests extend `ValidatedRequest` and include built-in validation for parameters. + +## Network Operations + +### InitializationRequest + +Initialize the SDK with network configuration. + +**Location**: `request/network/InitializationRequest.ts` + +**Parameters**: + +- `network: string` - Network environment ("testnet", "mainnet") +- `mirrorNode: object` - Mirror node configuration +- `rpcNode: object` - RPC node configuration +- `configuration: object` - Resolver and factory addresses +- `mirrorNodes: object` - Array of mirror nodes +- `jsonRpcRelays: object` - Array of JSON-RPC relays +- `factories: object` - Array of factory addresses +- `resolvers: object` - Array of resolver addresses +- `events?: Partial` - Optional event handlers + +**Usage**: + +```typescript +import { Network, InitializationRequest } from "@hashgraph/asset-tokenization-sdk"; + +const request = new InitializationRequest({ + network: "testnet", + mirrorNode: { baseUrl: "...", apiKey: "", headerName: "" }, + rpcNode: { baseUrl: "...", apiKey: "", headerName: "" }, + configuration: { resolverAddress: "0.0.xxxx", factoryAddress: "0.0.yyyy" }, + // ... +}); + +await Network.init(request); +``` + +### ConnectRequest + +Connect a wallet to the SDK. + +**Location**: `request/network/ConnectRequest.ts` + +**Parameters**: + +- `network: string` - Network environment +- `mirrorNode: object` - Mirror node configuration +- `rpcNode: object` - RPC node configuration +- `wallet: SupportedWallets` - Wallet type (HASHPACK, BLADE, METAMASK, HWALLETCONNECT) +- `hwcSettings?: object` - WalletConnect settings (optional) + +**Usage**: + +```typescript +import { Network, ConnectRequest, SupportedWallets } from "@hashgraph/asset-tokenization-sdk"; + +const request = new ConnectRequest({ + network: "testnet", + mirrorNode: { baseUrl: "...", apiKey: "", headerName: "" }, + rpcNode: { baseUrl: "...", apiKey: "", headerName: "" }, + wallet: SupportedWallets.HASHPACK, +}); + +await Network.connect(request); +``` + +## Security Operations + +### TransferRequest + +Transfer tokens between accounts. + +**Location**: `request/security/operations/transfer/TransferRequest.ts` + +**Parameters**: + +- `securityId: string` - Token ID +- `targetId: string` - Recipient account ID +- `amount: string` - Amount to transfer + +**Usage**: + +```typescript +import { Security, TransferRequest } from "@hashgraph/asset-tokenization-sdk"; + +const request = new TransferRequest({ + securityId: "0.0.1234567", + targetId: "0.0.7654321", + amount: "100", +}); + +const success = await Security.transfer(request); +``` + +### IssueRequest + +Mint new tokens (requires ISSUER_ROLE). + +**Location**: `request/security/operations/issue/IssueRequest.ts` + +**Parameters**: + +- `securityId: string` - Token ID +- `targetId: string` - Recipient account ID +- `amount: string` - Amount to mint + +### RedeemRequest + +Burn tokens. + +**Location**: `request/security/operations/redeem/RedeemRequest.ts` + +**Parameters**: + +- `securityId: string` - Token ID +- `amount: string` - Amount to burn + +### GetAccountBalanceRequest + +Get token balance for an account. + +**Location**: `request/account/GetAccountBalanceRequest.ts` + +**Parameters**: + +- `tokenId: string` - Token ID +- `targetId: string` - Account ID + +**Usage**: + +```typescript +import { Security, GetAccountBalanceRequest } from "@hashgraph/asset-tokenization-sdk"; + +const request = new GetAccountBalanceRequest({ + tokenId: "0.0.1234567", + targetId: "0.0.7654321", +}); + +const balance = await Security.getBalanceOf(request); +console.log(balance.amount); +``` + +## Equity Operations + +### SetDividendsRequest + +Schedule a dividend distribution. + +**Location**: `request/equity/SetDividendsRequest.ts` + +**Parameters**: + +- `securityId: string` - Token ID +- `amount: string` - Dividend amount per share +- `recordTimestamp: string` - Snapshot date timestamp +- `executionTimestamp: string` - Execution date timestamp + +**Usage**: + +```typescript +import { Equity, SetDividendsRequest } from "@hashgraph/asset-tokenization-sdk"; + +const request = new SetDividendsRequest({ + securityId: "0.0.1234567", + amount: "5.00", + recordTimestamp: "1734825600", + executionTimestamp: "1735430400", +}); + +const dividendId = await Equity.setDividends(request); +``` + +### SetVotingRightsRequest + +Schedule a voting event. + +**Location**: `request/equity/SetVotingRightsRequest.ts` + +**Parameters**: + +- `securityId: string` - Token ID +- `name: string` - Voting event name +- `executionTimestamp: string` - Voting date timestamp + +### SetScheduledBalanceAdjustmentRequest + +Schedule a stock split or reverse split. + +**Location**: `request/equity/SetScheduledBalanceAdjustmentRequest.ts` + +**Parameters**: + +- `securityId: string` - Token ID +- `executionTimestamp: string` - Execution date timestamp +- `factor: string` - Adjustment factor (e.g., "2" for 2:1 split) + +### GetDividendAmountForRequest + +Get the dividend payment amount calculation for a specific holder. + +**Location**: `request/equity/GetDividendsForRequest.ts` + +**Parameters**: + +- `securityId: string` - Token ID +- `dividendId: number` - Dividend ID +- `targetId: string` - Account ID to query + +**Response** (`DividendAmountForViewModel`): + +- `numerator: string` - Numerator of the dividend amount calculation +- `denominator: string` - Denominator of the dividend amount calculation +- `recordDateReached: boolean` - Whether the record date has been reached + +**Usage**: + +```typescript +import { Equity, GetDividendsForRequest } from "@hashgraph/asset-tokenization-sdk"; + +const request = new GetDividendsForRequest({ + securityId: "0.0.1234567", + dividendId: 1, + targetId: "0.0.7654321", +}); + +const dividendAmountFor = await Equity.getDividendAmountFor(request); +console.log("Numerator:", dividendAmountFor.numerator); +console.log("Denominator:", dividendAmountFor.denominator); +console.log("Record Date Reached:", dividendAmountFor.recordDateReached); +``` + +## Bond Operations + +### SetCouponRequest + +Schedule a coupon payment. + +**Location**: `request/bond/SetCouponRequest.ts` + +**Parameters**: + +- `securityId: string` - Token ID +- `rate: string` - Coupon rate +- `recordTimestamp: string` - Record date timestamp +- `executionTimestamp: string` - Execution date timestamp +- `startTimestamp: string` - Coupon period start timestamp +- `endTimestamp: string` - Coupon period end timestamp +- `fixingTimestamp: string` - Rate fixing timestamp (for floating rate bonds) +- `rateStatus: number` - Rate status (0 = Fixed, 1 = Floating) + +**Usage**: + +```typescript +import { Bond, SetCouponRequest } from "@hashgraph/asset-tokenization-sdk"; + +const request = new SetCouponRequest({ + securityId: "0.0.1234567", + rate: "5.0", + recordTimestamp: "1734825600", + executionTimestamp: "1735430400", + startTimestamp: "1727049600", + endTimestamp: "1734825600", + fixingTimestamp: "1727049600", + rateStatus: 0, // Fixed rate +}); + +const couponId = await Bond.setCoupon(request); +``` + +### GetCouponAmountForRequest + +Get the coupon payment amount calculation for a specific holder. + +**Location**: `request/bond/GetCouponForRequest.ts` + +**Parameters**: + +- `securityId: string` - Token ID +- `couponId: number` - Coupon ID +- `targetId: string` - Account ID to query + +**Response** (`CouponAmountForViewModel`): + +- `numerator: string` - Numerator of the payment amount calculation +- `denominator: string` - Denominator of the payment amount calculation +- `recordDateReached: boolean` - Whether the record date has been reached + +**Usage**: + +```typescript +import { Bond, GetCouponForRequest } from "@hashgraph/asset-tokenization-sdk"; + +const request = new GetCouponForRequest({ + securityId: "0.0.1234567", + couponId: 1, + targetId: "0.0.7654321", +}); + +const couponAmountFor = await Bond.getCouponAmountFor(request); +console.log("Numerator:", couponAmountFor.numerator); +console.log("Denominator:", couponAmountFor.denominator); +console.log("Record Date Reached:", couponAmountFor.recordDateReached); +``` + +### GetPrincipalForRequest + +Get the principal payment calculation for a bondholder at maturity. + +**Location**: `request/bond/GetPrincipalForRequest.ts` + +**Parameters**: + +- `securityId: string` - Token ID +- `targetId: string` - Account ID to query + +**Response** (`PrincipalForViewModel`): + +- `numerator: string` - Numerator of the principal calculation +- `denominator: string` - Denominator of the principal calculation + +**Usage**: + +```typescript +import { Bond, GetPrincipalForRequest } from "@hashgraph/asset-tokenization-sdk"; + +const request = new GetPrincipalForRequest({ + securityId: "0.0.1234567", + targetId: "0.0.7654321", +}); + +const principalFor = await Bond.getPrincipalFor(request); +console.log("Principal:", principalFor.numerator, "/", principalFor.denominator); +``` + +### FullRedeemAtMaturityRequest + +Redeem all tokens for a specific holder when the bond reaches maturity. + +**Location**: `request/bond/FullRedeemAtMaturityRequest.ts` + +**Parameters**: + +- `securityId: string` - Token ID +- `sourceId: string` - Account ID to redeem tokens from + +**Usage**: + +```typescript +import { Bond, FullRedeemAtMaturityRequest } from "@hashgraph/asset-tokenization-sdk"; + +const request = new FullRedeemAtMaturityRequest({ + securityId: "0.0.1234567", + sourceId: "0.0.7654321", +}); + +const result = await Bond.fullRedeemAtMaturity(request); +console.log("Success:", result.payload); +console.log("Transaction:", result.transactionId); +``` + +### RedeemAtMaturityByPartitionRequest + +Redeem a specific amount of tokens from a partition at maturity. + +**Location**: `request/bond/RedeemAtMaturityByPartitionRequest.ts` + +**Parameters**: + +- `securityId: string` - Token ID +- `partitionId: string` - Partition identifier +- `sourceId: string` - Account ID to redeem tokens from +- `amount: string` - Amount to redeem + +**Usage**: + +```typescript +import { Bond, RedeemAtMaturityByPartitionRequest } from "@hashgraph/asset-tokenization-sdk"; + +const request = new RedeemAtMaturityByPartitionRequest({ + securityId: "0.0.1234567", + partitionId: "default", + sourceId: "0.0.7654321", + amount: "1000", +}); + +const result = await Bond.redeemAtMaturityByPartition(request); +``` + +## KYC Operations + +### GrantKycRequest + +Grant KYC to an account using Verifiable Credentials. + +**Location**: `request/security/kyc/GrantKycRequest.ts` + +**Parameters**: + +- `tokenId: string` - Token ID +- `targetId: string` - Account to grant KYC +- `vcData: string` - Verifiable Credential data + +**Usage**: + +```typescript +import { Kyc, GrantKycRequest } from "@hashgraph/asset-tokenization-sdk"; + +const request = new GrantKycRequest({ + tokenId: "0.0.1234567", + targetId: "0.0.7654321", + vcData: "verifiable_credential_data", +}); + +const success = await Kyc.grantKyc(request); +``` + +### RevokeKycRequest + +Revoke KYC from an account. + +**Location**: `request/security/kyc/RevokeKycRequest.ts` + +**Parameters**: + +- `tokenId: string` - Token ID +- `targetId: string` - Account to revoke KYC + +## SSI Management Operations + +### AddIssuerRequest + +Add an account as a credential issuer. + +**Location**: `request/security/ssi/AddIssuerRequest.ts` + +**Parameters**: + +- `securityId: string` - Token ID +- `targetId: string` - Account to add as issuer + +**Usage**: + +```typescript +import { SsiManagement, AddIssuerRequest } from "@hashgraph/asset-tokenization-sdk"; + +const request = new AddIssuerRequest({ + securityId: "0.0.1234567", + targetId: "0.0.7654321", +}); + +const success = await SsiManagement.addIssuer(request); +``` + +## Role Management Operations + +### RoleRequest + +Grant or revoke roles. + +**Location**: `request/security/role/RoleRequest.ts` + +**Parameters**: + +- `securityId: string` - Token ID +- `role: string` - Role identifier (e.g., "ISSUER_ROLE") +- `targetId: string` - Account to grant/revoke role + +**Usage**: + +```typescript +import { Role, RoleRequest } from "@hashgraph/asset-tokenization-sdk"; + +const request = new RoleRequest({ + securityId: "0.0.1234567", + role: "ISSUER_ROLE", + targetId: "0.0.7654321", +}); + +await Role.grantRole(request); +``` + +## Hold Operations + +### CreateHoldByPartitionRequest + +Create a hold on tokens. + +**Location**: `request/security/operations/hold/CreateHoldByPartitionRequest.ts` + +**Parameters**: + +- `securityId: string` - Token ID +- `recipient: string` - Recipient account ID +- `notary: string` - Notary account ID +- `amount: string` - Amount to hold +- `partition: string` - Partition identifier +- `lockTime: string` - Lock time in seconds + +## Clearing Operations + +### ClearingTransferByPartitionRequest + +Create a clearing transfer request. + +**Location**: `request/security/operations/clearing/ClearingTransferByPartitionRequest.ts` + +**Parameters**: + +- `securityId: string` - Token ID +- `targetId: string` - Recipient account ID +- `amount: string` - Amount to transfer +- `partition: string` - Partition identifier + +### ApproveClearingOperationByPartitionRequest + +Approve a clearing operation (requires CLEARING_VALIDATOR_ROLE). + +**Location**: `request/security/operations/clearing/ApproveClearingOperationByPartitionRequest.ts` + +**Parameters**: + +- `securityId: string` - Token ID +- `clearingId: string` - Clearing operation ID +- `partition: string` - Partition identifier + +## Management Operations + +### UpdateConfigRequest + +Update token configuration. + +**Location**: `request/management/UpdateConfigRequest.ts` + +**Parameters**: + +- `securityId: string` - Token ID +- `configId: string` - Configuration ID (32-byte hex) +- `configVersion: string` - Configuration version + +**Usage**: + +```typescript +import { Management, UpdateConfigRequest } from "@hashgraph/asset-tokenization-sdk"; + +const request = new UpdateConfigRequest({ + securityId: "0.0.1234567", + configId: "0x0000000000000000000000000000000000000000000000000000000000000001", + configVersion: "0", +}); + +const success = await Management.updateConfig(request); +``` + +## Source Code Reference + +All request classes are available in the SDK source code: + +**GitHub**: `packages/ats/sdk/src/port/in/request/` + +You can view the complete implementation and parameter validation logic in the source files. + +## Related Resources + +- [SDK Integration Guide](../developer-guides/sdk-integration.md) - Getting started with the SDK +- [User Guides](../user-guides/index.md) - Detailed operation guides +- [Smart Contracts API](./contracts/index.md) - Contract interface reference diff --git a/docs/ats/developer-guides/contracts/adding-facets.md b/docs/ats/developer-guides/contracts/adding-facets.md new file mode 100644 index 000000000..8f8ca76ee --- /dev/null +++ b/docs/ats/developer-guides/contracts/adding-facets.md @@ -0,0 +1,731 @@ +--- +id: adding-facets +title: Tutorial - Adding a New Facet to ATS Contracts +sidebar_label: Adding Facets +--- + +# Tutorial: Adding a New Facet to ATS Contracts + +This comprehensive guide walks you through creating and integrating a new facet into the Asset Tokenization Studio (ATS) smart contract system. + +## Table of Contents + +- [Overview](#overview) +- [Prerequisites](#prerequisites) +- [Facet Anatomy](#facet-anatomy) +- [Step-by-Step Implementation](#step-by-step-implementation) +- [Testing Your Facet](#testing-your-facet) +- [Integration Guide](#integration-guide) +- [Best Practices](#best-practices) +- [Examples](#examples) + +## Overview + +Facets in ATS are modular contract components that implement specific features using the Diamond Pattern (EIP-2535). Each facet: + +- Encapsulates a specific domain feature (e.g., rewards, voting, dividends) +- Can be independently upgraded via the Business Logic Resolver +- Shares storage with other facets through inheritance +- Is registered via a unique resolver key + +### When to Create a New Facet + +Create a new facet when you need to: + +- Add a new domain feature (e.g., staking, governance, rewards) +- Extend token capabilities without modifying existing facets +- Implement jurisdiction-specific rules (Layer 3) +- Separate read/write operations for gas optimization + +## Prerequisites + +### Required Knowledge + +- Solidity 0.8.x +- Diamond Pattern (EIP-2535) +- Proxy patterns +- Storage slot management +- Access control patterns + +### Development Environment + +```bash +# From monorepo root +npm ci +npm run ats:contracts:build + +# Navigate to contracts package +cd packages/ats/contracts +``` + +## Facet Anatomy + +### Two-Part Structure + +Every facet consists of two contracts: + +1. **Business Logic Contract** (Abstract) + - Contains the actual implementation + - Inherits from `Common` (Layer 1) + - Implements domain-specific interface + - Can be tested independently + +2. **Facet Wrapper** (Concrete) + - Thin wrapper implementing `IStaticFunctionSelectors` + - Provides metadata for diamond pattern registration + - Returns resolver key, function selectors, and interface IDs + +### File Organization + +``` +contracts/layer_2/myFeature/ +β”œβ”€β”€ MyFeature.sol # Business logic (abstract) +β”œβ”€β”€ MyFeatureFacet.sol # Facet wrapper (concrete) +└── interfaces/ + └── myFeature/ + β”œβ”€β”€ IMyFeature.sol # Public interface + └── IMyFeatureStorageWrapper.sol # Storage events/errors +``` + +## Step-by-Step Implementation + +### Step 1: Define the Interface + +Create the public interface defining your facet's functionality. + +**File**: `contracts/layer_2/interfaces/rewards/IRewards.sol` + +```solidity +// SPDX-License-Identifier: MIT +pragma solidity ^0.8.23; + +/** + * @title IRewards + * @notice Interface for token holder rewards functionality + */ +interface IRewards { + /** + * @notice Emitted when rewards are distributed + */ + event RewardDistributed(address indexed tokenHolder, uint256 amount, uint256 timestamp); + + /** + * @notice Distribute rewards to token holder + * @param _tokenHolder Address receiving rewards + * @param _amount Reward amount + */ + function distributeReward(address _tokenHolder, uint256 _amount) external returns (bool success_); + + /** + * @notice Get total rewards earned by holder + * @param _tokenHolder Address to query + * @return totalRewards_ Total rewards earned + */ + function getRewards(address _tokenHolder) external view returns (uint256 totalRewards_); +} +``` + +### Step 2: Create Storage Wrapper (if needed) + +If your facet requires custom storage, create a storage wrapper in Layer 0. + +**File**: `contracts/layer_0/rewards/RewardsStorageWrapper.sol` + +```solidity +// SPDX-License-Identifier: MIT +pragma solidity ^0.8.23; + +import { IRewardsStorageWrapper } from "../layer_2/interfaces/rewards/IRewardsStorageWrapper.sol"; + +/** + * @title RewardsStorageWrapper + * @notice Storage management for rewards functionality + */ +abstract contract RewardsStorageWrapper is IRewardsStorageWrapper { + // Storage position constant (unique bytes32) + bytes32 private constant _REWARDS_STORAGE_POSITION = keccak256("security.token.standard.rewards.storage"); + + /** + * @notice Storage structure for rewards data + */ + struct RewardsDataStorage { + bool initialized; + mapping(address => uint256) totalRewards; + mapping(address => uint256) lastDistribution; + uint256 totalDistributed; + } + + /** + * @notice Access rewards storage via assembly (EIP-1967 pattern) + * @return rewardsData_ Storage pointer + */ + function _rewardsStorage() internal pure returns (RewardsDataStorage storage rewardsData_) { + bytes32 position = _REWARDS_STORAGE_POSITION; + assembly { + rewardsData_.slot := position + } + } + + /** + * @notice Get total rewards for holder + */ + function _getTotalRewards(address _tokenHolder) internal view returns (uint256) { + return _rewardsStorage().totalRewards[_tokenHolder]; + } + + /** + * @notice Add rewards to holder's balance + */ + function _addRewards(address _tokenHolder, uint256 _amount) internal { + RewardsDataStorage storage rs = _rewardsStorage(); + rs.totalRewards[_tokenHolder] += _amount; + rs.totalDistributed += _amount; + rs.lastDistribution[_tokenHolder] = block.timestamp; + } +} +``` + +### Step 3: Define Storage Events/Errors Interface + +**File**: `contracts/layer_2/interfaces/rewards/IRewardsStorageWrapper.sol` + +```solidity +// SPDX-License-Identifier: MIT +pragma solidity ^0.8.23; + +/** + * @title IRewardsStorageWrapper + * @notice Events and errors for rewards storage + */ +interface IRewardsStorageWrapper { + /** + * @notice Emitted when rewards feature is initialized + */ + event RewardsInitialized(address indexed operator); + + /** + * @notice Error when reward amount is zero + */ + error RewardAmountIsZero(); + + /** + * @notice Error when rewards already initialized + */ + error RewardsAlreadyInitialized(); +} +``` + +### Step 4: Define Resolver Key + +Add a unique resolver key constant for your facet. + +**File**: `contracts/layer_2/constants/resolverKeys.sol` + +```solidity +// Add to existing file +bytes32 constant _REWARDS_RESOLVER_KEY = keccak256("security.token.standard.rewards.resolverKey"); +``` + +### Step 5: Define Storage Position + +Add storage position constant if using custom storage. + +**File**: `contracts/layer_2/constants/storagePositions.sol` + +```solidity +// Add to existing file +bytes32 constant _REWARDS_STORAGE_POSITION = keccak256("security.token.standard.rewards.storage"); +``` + +### Step 6: Define Roles (if needed) + +Add role constants if your facet requires specific access control. + +**File**: `contracts/layer_2/constants/roles.sol` + +```solidity +// Add to existing file +bytes32 constant _REWARDS_DISTRIBUTOR_ROLE = keccak256("REWARDS_DISTRIBUTOR_ROLE"); +``` + +### Step 7: Create Business Logic Contract + +Implement the core facet logic. + +**File**: `contracts/layer_2/rewards/Rewards.sol` + +```solidity +// SPDX-License-Identifier: MIT +pragma solidity ^0.8.23; + +import { IRewards } from "../interfaces/rewards/IRewards.sol"; +import { Common } from "../../layer_1/common/Common.sol"; + +/** + * @title Rewards + * @notice Business logic for token holder rewards + */ +abstract contract Rewards is IRewards, Common { + /** + * @notice Initialize rewards functionality + * @dev Can only be called once + */ + function initialize_Rewards() external override onlyUninitialized(_rewardsStorage().initialized) { + _rewardsStorage().initialized = true; + emit RewardsInitialized(_msgSender()); + } + + /** + * @notice Distribute rewards to token holder + * @param _tokenHolder Address receiving rewards + * @param _amount Reward amount + * @return success_ True if distribution succeeded + */ + function distributeReward( + address _tokenHolder, + uint256 _amount + ) + external + override + onlyUnpaused + onlyRole(_REWARDS_DISTRIBUTOR_ROLE) + validateAddress(_tokenHolder) + returns (bool success_) + { + if (_amount == 0) revert RewardAmountIsZero(); + + // Verify holder is KYC approved + if (_getKycStatus(_tokenHolder) != IKyc.KycStatus.GRANTED) { + revert InvalidKycStatus(); + } + + // Add rewards to holder's balance + _addRewards(_tokenHolder, _amount); + + emit RewardDistributed(_tokenHolder, _amount, block.timestamp); + + success_ = true; + } + + /** + * @notice Get total rewards earned by holder + * @param _tokenHolder Address to query + * @return totalRewards_ Total rewards earned + */ + function getRewards( + address _tokenHolder + ) external view override validateAddress(_tokenHolder) returns (uint256 totalRewards_) { + totalRewards_ = _getTotalRewards(_tokenHolder); + } +} +``` + +### Step 8: Create Facet Wrapper + +Implement the concrete facet with metadata. + +**File**: `contracts/layer_2/rewards/RewardsFacet.sol` + +```solidity +// SPDX-License-Identifier: MIT +pragma solidity ^0.8.23; + +import { Rewards } from "./Rewards.sol"; +import { IStaticFunctionSelectors } from "../../interfaces/resolver/resolverProxy/IStaticFunctionSelectors.sol"; +import { IRewards } from "../interfaces/rewards/IRewards.sol"; + +/** + * @title RewardsFacet + * @notice Facet wrapper for Rewards business logic + */ +contract RewardsFacet is Rewards, IStaticFunctionSelectors { + /** + * @notice Get the resolver key for this facet + * @return Unique bytes32 resolver key + */ + function getStaticResolverKey() external pure override returns (bytes32) { + return _REWARDS_RESOLVER_KEY; + } + + /** + * @notice Get all function selectors this facet provides + * @return Function selector array + */ + function getStaticFunctionSelectors() external pure override returns (bytes4[] memory) { + bytes4[] memory selectors = new bytes4[](3); + selectors[0] = this.initialize_Rewards.selector; + selectors[1] = this.distributeReward.selector; + selectors[2] = this.getRewards.selector; + return selectors; + } + + /** + * @notice Get all interface IDs this facet implements + * @return Interface ID array + */ + function getStaticInterfaceIds() external pure override returns (bytes4[] memory) { + bytes4[] memory ids = new bytes4[](1); + ids[0] = type(IRewards).interfaceId; + return ids; + } +} +``` + +### Step 9: Update Common Contract (if needed) + +If your facet requires storage access across all facets, update the `Common` contract inheritance chain. + +**File**: `contracts/layer_1/common/Common.sol` + +```solidity +// Add RewardsStorageWrapper to inheritance +abstract contract Common is + // ... existing wrappers + RewardsStorageWrapper, + // ... other wrappers +{ + // ... existing code +} +``` + +### Step 10: Update Registry + +Add your facet to the deployment registry. + +**File**: `scripts/domain/atsRegistry.ts` + +```typescript +import { RewardsFacet__factory } from "../../typechain-types"; +import { _REWARDS_RESOLVER_KEY } from "./constants"; + +// Add to FACET_FACTORIES +export const FACET_FACTORIES = { + // ... existing facets + RewardsFacet: RewardsFacet__factory, + // ... more facets +}; + +// Add to FACET_REGISTRY (auto-generated after compilation) +// Run: npm run generate:registry +``` + +### Step 11: Add to Configurations + +Include your facet in equity/bond configurations as appropriate. + +**File**: `scripts/domain/equity/createConfiguration.ts` + +```typescript +export async function createEquityConfiguration( + blr: BusinessLogicResolver, + facetAddresses: Map, + options?: CreateConfigurationOptions, +): Promise { + const facetConfigurations: FacetConfiguration[] = [ + // ... existing facets + { + facetName: "RewardsFacet", + resolverKey: atsRegistry.getFacetDefinition("RewardsFacet").resolverKey.value, + address: facetAddresses.get("RewardsFacet")!, + }, + // ... more facets + ]; + + // ... rest of configuration creation +} +``` + +### Step 12: Compile and Generate Types + +```bash +# Compile contracts +npm run compile + +# Generate TypeChain types +npm run typechain + +# Update registry +npm run generate:registry +``` + +## Testing Your Facet + +### Step 1: Create Unit Tests + +**File**: `test/layer_2/rewards/Rewards.test.ts` + +```typescript +import { expect } from "chai"; +import { ethers } from "hardhat"; +import { SignerWithAddress } from "@nomicfoundation/hardhat-ethers/signers"; +import { RewardsFacet } from "../../../typechain-types"; + +describe("RewardsFacet", function () { + let rewardsFacet: RewardsFacet; + let owner: SignerWithAddress; + let distributor: SignerWithAddress; + let tokenHolder: SignerWithAddress; + + beforeEach(async function () { + [owner, distributor, tokenHolder] = await ethers.getSigners(); + + // Deploy facet + const RewardsFacetFactory = await ethers.getContractFactory("RewardsFacet"); + rewardsFacet = await RewardsFacetFactory.deploy(); + await rewardsFacet.waitForDeployment(); + + // Setup roles (would normally be done via AccessControl facet) + // ... role setup + }); + + describe("Initialization", function () { + it("should initialize rewards functionality", async function () { + await expect(rewardsFacet.initialize_Rewards()) + .to.emit(rewardsFacet, "RewardsInitialized") + .withArgs(owner.address); + }); + + it("should reject double initialization", async function () { + await rewardsFacet.initialize_Rewards(); + await expect(rewardsFacet.initialize_Rewards()).to.be.revertedWithCustomError(rewardsFacet, "AlreadyInitialized"); + }); + }); + + describe("Reward Distribution", function () { + beforeEach(async function () { + await rewardsFacet.initialize_Rewards(); + }); + + it("should distribute rewards to token holder", async function () { + const amount = ethers.parseEther("100"); + + await expect(rewardsFacet.connect(distributor).distributeReward(tokenHolder.address, amount)) + .to.emit(rewardsFacet, "RewardDistributed") + .withArgs(tokenHolder.address, amount, await time.latest()); + + const rewards = await rewardsFacet.getRewards(tokenHolder.address); + expect(rewards).to.equal(amount); + }); + + it("should reject zero amount", async function () { + await expect( + rewardsFacet.connect(distributor).distributeReward(tokenHolder.address, 0), + ).to.be.revertedWithCustomError(rewardsFacet, "RewardAmountIsZero"); + }); + + it("should reject invalid address", async function () { + await expect( + rewardsFacet.connect(distributor).distributeReward(ethers.ZeroAddress, 100), + ).to.be.revertedWithCustomError(rewardsFacet, "InvalidAddress"); + }); + }); + + describe("Metadata", function () { + it("should return correct resolver key", async function () { + const key = await rewardsFacet.getStaticResolverKey(); + expect(key).to.equal(_REWARDS_RESOLVER_KEY); + }); + + it("should return function selectors", async function () { + const selectors = await rewardsFacet.getStaticFunctionSelectors(); + expect(selectors).to.have.lengthOf(3); + }); + + it("should return interface IDs", async function () { + const ids = await rewardsFacet.getStaticInterfaceIds(); + expect(ids).to.have.lengthOf(1); + }); + }); +}); +``` + +### Step 2: Run Tests + +```bash +npm run test -- test/layer_2/rewards/Rewards.test.ts +``` + +## Integration Guide + +### Deploy Your Facet + +Add to deployment workflow: + +```typescript +import { deployFacets } from "./infrastructure/operations/facetDeployment"; +import { RewardsFacet__factory } from "../../typechain-types"; + +const facetFactories = { + // ... existing facets + RewardsFacet: RewardsFacet__factory, +}; + +const result = await deployFacets(facetFactories, { + confirmations: 2, + enableRetry: true, +}); +``` + +### Register in BLR + +```typescript +import { registerFacets } from "./infrastructure/operations/registerFacets"; + +const facetsToRegister = [ + { + name: "RewardsFacet", + address: deployedAddresses.get("RewardsFacet"), + resolverKey: atsRegistry.getFacetDefinition("RewardsFacet").resolverKey.value, + }, +]; + +await registerFacets(blr, facetsToRegister); +``` + +### Create Token with New Facet + +Deploy a token using the updated configuration: + +```typescript +// Configuration already includes RewardsFacet +const tx = await factory.createEquityToken( + configId, + version, // Use latest version with new facet + initData, +); +``` + +## Best Practices + +### Naming Conventions + +| Element | Convention | Example | +| ----------------------- | ------------------------------- | --------------------------- | +| Business logic contract | PascalCase | `Rewards`, `Staking` | +| Facet wrapper | PascalCase + "Facet" | `RewardsFacet` | +| Interface | I + ContractName | `IRewards` | +| Storage wrapper | ContractName + "StorageWrapper" | `RewardsStorageWrapper` | +| Storage interface | I + StorageWrapper | `IRewardsStorageWrapper` | +| Resolver key | \_FEATURE_RESOLVER_KEY | `_REWARDS_RESOLVER_KEY` | +| Storage position | \_FEATURE_STORAGE_POSITION | `_REWARDS_STORAGE_POSITION` | +| Role | \_ROLE_NAME_ROLE | `_REWARDS_DISTRIBUTOR_ROLE` | +| Initialization | initialize_FeatureName | `initialize_Rewards` | + +### Storage Management + +1. **Always use unique storage positions**: Use `keccak256` of unique strings +2. **Access storage via assembly**: Follow EIP-1967 pattern +3. **Inherit storage wrappers**: Add to `Common` for cross-facet access +4. **Document storage layout**: Add comments explaining structure + +### Access Control + +1. **Use role-based modifiers**: `onlyRole(_REWARDS_DISTRIBUTOR_ROLE)` +2. **Add pause support**: `onlyUnpaused` modifier +3. **Validate addresses**: `validateAddress(_tokenHolder)` +4. **Check KYC status**: Verify compliance for sensitive operations + +### Gas Optimization + +1. **Separate read/write operations**: Consider split facets (like Bond/BondRead) +2. **Use unchecked blocks**: For safe arithmetic +3. **Minimize storage writes**: Batch updates when possible +4. **Pack storage**: Use smaller data types when appropriate + +### Error Handling + +1. **Use custom errors**: More gas-efficient than require strings +2. **Descriptive error names**: `RewardAmountIsZero` vs `InvalidAmount` +3. **Document error conditions**: Add NatSpec comments + +### Event Emission + +1. **Emit events for state changes**: Required for off-chain tracking +2. **Include indexed parameters**: For efficient filtering +3. **Use descriptive event names**: `RewardDistributed` vs `Distributed` + +## Examples + +### Example 1: Minimal Read-Only Facet + +Simple facet with no state changes: + +```solidity +// TokenMetadataFacet.sol - Read-only token metadata +abstract contract TokenMetadata is ITokenMetadata, Common { + function getTokenMetadata() external view override returns (MetadataData memory) { + return MetadataData({ name: _name(), symbol: _symbol(), decimals: _decimals(), totalSupply: _totalSupply() }); + } +} +``` + +### Example 2: Separate Read/Write Facets + +For complex features with many read operations: + +```solidity +// StakingWrite.sol - Write operations +abstract contract StakingWrite is IStakingWrite, Common { + function stake(uint256 amount) external override { + /* ... */ + } + function unstake(uint256 amount) external override { + /* ... */ + } +} + +// StakingRead.sol - Read operations +abstract contract StakingRead is IStakingRead, Common { + function getStakedBalance(address holder) external view override { + /* ... */ + } + function getStakingRewards(address holder) external view override { + /* ... */ + } +} +``` + +### Example 3: Layer 3 Jurisdiction-Specific Facet + +Extending Layer 2 functionality: + +```solidity +// RewardsUSA.sol - USA-specific rewards rules +abstract contract RewardsUSA is IRewardsUSA, Rewards { + function distributeRewardWithTaxWithholding( + address _tokenHolder, + uint256 _grossAmount, + uint256 _taxRate + ) external override returns (uint256 netAmount_) { + // Calculate net after tax + netAmount_ = _grossAmount - ((_grossAmount * _taxRate) / 10000); + + // Distribute net rewards + _addRewards(_tokenHolder, netAmount_); + + emit RewardDistributedWithTax(_tokenHolder, _grossAmount, _taxRate, netAmount_); + } +} +``` + +## Next Steps + +After implementing your facet: + +1. **Write comprehensive tests**: Unit tests + integration tests +2. **Update documentation**: Add usage examples +3. **Security audit**: Review access control and storage safety +4. **Deploy to testnet**: Verify functionality +5. **Integrate with SDK**: Create SDK handlers for facet operations + +## Related Documentation + +- [Deployment Tutorial](./deployment.md) +- [Upgrade Configuration](./upgrading.md) + +## Support + +For questions and issues: + +- GitHub Issues: [asset-tokenization-studio/issues](https://github.com/hashgraph/asset-tokenization-studio/issues) +- Documentation: [https://hashgraph.github.io/asset-tokenization-studio](https://hashgraph.github.io/asset-tokenization-studio) diff --git a/docs/ats/developer-guides/contracts/deployed-addresses.md b/docs/ats/developer-guides/contracts/deployed-addresses.md new file mode 100644 index 000000000..576055345 --- /dev/null +++ b/docs/ats/developer-guides/contracts/deployed-addresses.md @@ -0,0 +1,135 @@ +--- +id: deployed-addresses +title: Deployed Contract Addresses +sidebar_label: Deployed Addresses +sidebar_position: 1 +--- + +# Deployed Contract Addresses + +Latest deployed smart contract addresses for Asset Tokenization Studio. + +## Hedera Testnet + +**Smart Contract Version:** 4.0.0 + +### Infrastructure Contracts + +| Contract | Contract ID | EVM Address | HashScan | +| ---------------------- | ----------- | ------------------------------------------ | -------------------------------------------------------------------- | +| ProxyAdmin | 0.0.7707872 | 0x76220dAa89df1d0be4C6997Dc401FCB98A586F6a | [View on HashScan](https://hashscan.io/testnet/contract/0.0.7707872) | +| BLR Proxy | 0.0.7707874 | 0xEFEF4CAe9642631Cfc6d997D6207Ee48fa78fe42 | [View on HashScan](https://hashscan.io/testnet/contract/0.0.7707874) | +| BLR Implementation | 0.0.7707873 | 0xd53A586C1b11a5E7c34912a466e97c02Ad2d5786 | [View on HashScan](https://hashscan.io/testnet/contract/0.0.7707873) | +| Factory Proxy | 0.0.7708432 | 0x5fA65CA30d1984701F10476664327f97c864A9D3 | [View on HashScan](https://hashscan.io/testnet/contract/0.0.7708432) | +| Factory Implementation | 0.0.7708430 | 0x3803219f13E23998FdDCa67AdA60EeB8E62eEEA8 | [View on HashScan](https://hashscan.io/testnet/contract/0.0.7708430) | + +### Token Configurations + +| Configuration | Config ID | Version | Facet Count | +| ------------------------------------------- | --------- | ------- | ----------- | +| Equity | 0x01 | 1 | 44 | +| Bond (Standard) | 0x02 | 1 | 47 | +| Bond Fixed Rate | 0x03 | 1 | 48 | +| Bond KPI Linked Rate | 0x04 | 1 | 48 | +| Bond Sustainability Performance Target Rate | 0x05 | 1 | 49 | + +> **Note**: v4.0.0 introduces four bond types with different interest rate mechanisms. See [Creating Bonds](../../user-guides/creating-bond.md) for details on each bond type. + +## Usage in Web App + +Configure these addresses in your `.env.local` file: + +```bash +# Smart Contract Version: 4.0.0 +REACT_APP_RPC_RESOLVER='0.0.7707874' +REACT_APP_RPC_FACTORY='0.0.7708432' +``` + +See the complete `.env.sample` in `apps/ats/web/.env.sample` for all required environment variables. + +## Usage in SDK + +When initializing the SDK, provide these addresses in the configuration: + +```typescript +import { Network, InitializationRequest } from "@hashgraph/asset-tokenization-sdk"; + +const initRequest = new InitializationRequest({ + network: "testnet", + configuration: { + resolverAddress: "0.0.7707874", + factoryAddress: "0.0.7708432", + }, + // ... other configuration +}); + +await Network.init(initRequest); +``` + +See the [SDK Integration Guide](../sdk-integration.md) for complete initialization examples. + +## Contract Information + +### Business Logic Resolver (BLR) Proxy + +The BLR acts as a central registry that maps Business Logic Keys (BLK) to versioned facet implementations. Tokens query the resolver to determine which logic version to execute. + +### Factory Proxy + +The Factory contract deploys new security tokens using the Diamond Pattern. It creates the token proxy and links it to the appropriate configuration in the Business Logic Resolver. + +### ProxyAdmin + +Manages upgrade permissions for both the BLR Proxy and Factory Proxy contracts. + +## Deployment Statistics + +| Metric | Value | +| --------------------- | ---------- | +| Total Facets Deployed | 192 | +| Configurations | 5 | +| Deployment Date | 2026-01-22 | + +## Version History + +| Version | BLR Proxy | Factory Proxy | Release Date | +| ------- | ----------- | ------------- | ------------ | +| 4.0.0 | 0.0.7707874 | 0.0.7708432 | 2026-01-22 | +| 2.0.1 | 0.0.7511642 | 0.0.7512002 | 2024-12-23 | + +## Deployment Files + +Complete deployment outputs including all facet addresses are stored in the repository: + +``` +packages/ats/contracts/deployments/ +β”œβ”€β”€ hedera-testnet/ +β”‚ β”œβ”€β”€ newBlr-2026-01-22T11-09-49.json # Latest v4.0.0 deployment +β”‚ └── ... # Previous deployments +└── hedera-mainnet/ + └── ... +``` + +Each deployment file contains: + +- Infrastructure contract addresses (ProxyAdmin, BLR, Factory) +- All facet addresses with their resolver keys +- Configuration details for each token type +- Hedera Contract IDs and EVM addresses + +**Example**: To get all facet addresses from a deployment: + +```bash +# View the deployment file +cat packages/ats/contracts/deployments/hedera-testnet/newBlr-2026-01-22T11-09-49.json + +# Extract specific facet address using jq +jq '.facets[] | select(.name == "BondUSAFacet")' \ + packages/ats/contracts/deployments/hedera-testnet/newBlr-2026-01-22T11-09-49.json +``` + +## Related Resources + +- [Contract Architecture](./index.md) - Understanding the diamond pattern +- [Upgrading Contracts](./upgrading.md) - How upgrades work +- [SDK Integration](../sdk-integration.md) - Using these addresses in your code diff --git a/docs/ats/developer-guides/contracts/deployment.md b/docs/ats/developer-guides/contracts/deployment.md new file mode 100644 index 000000000..8bf8561d2 --- /dev/null +++ b/docs/ats/developer-guides/contracts/deployment.md @@ -0,0 +1,542 @@ +--- +id: deployment +title: ATS Contracts Deployment Tutorial +sidebar_label: Deployment +--- + +# ATS Contracts Deployment Tutorial + +This comprehensive guide covers deploying the complete Asset Tokenization Studio (ATS) smart contract infrastructure to Hedera networks. + +## Table of Contents + +- [Overview](#overview) +- [Prerequisites](#prerequisites) +- [Architecture Overview](#architecture-overview) +- [Deployment Process](#deployment-process) +- [Step-by-Step Guide](#step-by-step-guide) +- [Configuration Files](#configuration-files) +- [Deployment Verification](#deployment-verification) +- [Troubleshooting](#troubleshooting) +- [Advanced Topics](#advanced-topics) + +## Overview + +The ATS deployment system uses a **Diamond Pattern (EIP-2535)** architecture with 4 hierarchical layers: + +- **Layer 0**: Storage wrappers (data structures) +- **Layer 1**: Core business logic (ERC-1400/ERC-3643 implementations) +- **Layer 2**: Domain-specific facets (Bond, Equity, Scheduled Tasks, etc.) +- **Layer 3**: Jurisdiction-specific implementations (USA-specific features) + +A complete deployment includes: + +- **Business Logic Resolver (BLR)**: Facet registry and version manager +- **46+ Facets**: Modular contract implementations +- **Configuration System**: Equity and Bond configurations +- **Factory Contracts**: Token deployment factory with proxy + +## Prerequisites + +### Required Software + +- **Node.js**: v20.19.4 or newer +- **npm**: v10.9.0 or newer +- **Hedera Account**: Testnet or mainnet account with sufficient HBAR + +### Required Environment Variables + +Create a `.env` file in `packages/ats/contracts/`: + +```bash +# Network Configuration +HEDERA_TESTNET_JSON_RPC_ENDPOINT='https://testnet.hashio.io/api' +HEDERA_TESTNET_MIRROR_NODE_ENDPOINT='https://testnet.mirrornode.hedera.com' + +# Deployer Account +HEDERA_TESTNET_PRIVATE_KEY_0='0x...' # Your private key + +# Optional Configuration +USE_TIME_TRAVEL=false # Enable TimeTravel facet variants (for testing) +BATCH_SIZE=15 # Facets per batch in configurations +``` + +For mainnet deployment: + +```bash +HEDERA_MAINNET_JSON_RPC_ENDPOINT='https://mainnet.hashio.io/api' +HEDERA_MAINNET_MIRROR_NODE_ENDPOINT='https://mainnet.mirrornode.hedera.com' +HEDERA_MAINNET_PRIVATE_KEY_0='0x...' +``` + +### Installation + +From the monorepo root: + +```bash +# Install all dependencies +npm ci + +# Build ATS contracts +npm run ats:contracts:build +``` + +## Architecture Overview + +### Deployment Components + +``` +β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” +β”‚ ProxyAdmin β”‚ +β”‚ (Manages proxy upgrades) β”‚ +β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ + β”‚ + β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”€β”€β” + β”‚ β”‚ +β”Œβ”€β”€β”€β”€β”€β”€β”€β–Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”Œβ”€β”€β”€β”€β–Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” +β”‚ BLR Proxy β”‚ β”‚ Factory Proxy β”‚ +β”‚ (Facet Registry) β”‚ β”‚ (Token Creator) β”‚ +β””β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ + β”‚ + β”œβ”€ BLR Implementation + β”‚ + β”œβ”€ 46+ Facets: + β”‚ β”œβ”€ AccessControlFacet + β”‚ β”œβ”€ ERC20Facet + β”‚ β”œβ”€ BondFacet + β”‚ β”œβ”€ EquityFacet + β”‚ β”œβ”€ KycFacet + β”‚ β”œβ”€ FreezeFacet + β”‚ └─ ... (40+ more) + β”‚ + └─ 2 Configurations: + β”œβ”€ Equity Config (43 facets) + └─ Bond Config (43 facets) +``` + +### Key Concepts + +**Business Logic Resolver (BLR)** + +- Central registry mapping resolver keys to facet addresses +- Manages facet versions (global version counter) +- Provides configuration management for token types + +**Resolver Keys** + +- Unique `bytes32` identifiers for each facet +- Generated via `keccak256(descriptive.string)` +- Examples: + - Bond: `0x09c1d80a160a7250b5fabc46d06a7fa4067e6d7292047c5024584b43f17d55ef` + - Equity: `0xfe85fe0513f5a5676011f59495ae16b2b93c981c190e99e61903e5603542c810` + +**Configurations** + +- Predefined facet sets for token types +- Equity Configuration ID: `0x0000...0001` +- Bond Configuration ID: `0x0000...0002` + +## Deployment Process + +### Phase Overview + +1. **Infrastructure Setup** (ProxyAdmin + BLR) +2. **Facet Deployment** (46+ contracts) +3. **Facet Registration** (Register in BLR) +4. **Configuration Creation** (Equity + Bond) +5. **Factory Deployment** (Token creation factory) + +### Deployment Methods + +#### Method 1: Standalone Mode (Recommended) + +```bash +# Deploy to testnet +npm run deploy + +# Or specify network explicitly +npm run deploy:hedera:testnet + +# Deploy to mainnet +npm run deploy:hedera:mainnet + +# Deploy to previewnet +npm run deploy:hedera:previewnet + +# Deploy to local network +npm run deploy:local +``` + +#### Method 2: Hardhat Mode + +```bash +npx hardhat run scripts/cli/hardhat.ts --network hedera-testnet + +# Or use the task +npx hardhat deploy-system --network hedera-testnet + +# With custom options +npx hardhat deploy-system --network hedera-testnet --timetravel +``` + +## Step-by-Step Guide + +### Step 1: Prepare Environment + +1. **Fund your Hedera account** with sufficient HBAR: + - Testnet: Use [Hedera Portal](https://portal.hedera.com/) + - Mainnet: Ensure adequate HBAR balance (estimate: ~500 HBAR for full deployment) + +2. **Configure environment**: + + ```bash + cd packages/ats/contracts + cp .env.sample .env + # Edit .env with your credentials + ``` + +3. **Verify configuration**: + ```bash + npm run build + ``` + +### Step 2: Deploy Infrastructure + +The deployment script automatically handles all phases. Start the deployment: + +```bash +npm run deploy:hedera:testnet +``` + +**Expected output:** + +``` +πŸš€ Starting ATS System Deployment +Network: hedera-testnet +Deployer: 0x742d35Cc6634C0532925a3b844Bc454e4438f44e (0.0.12345678) + +Phase 1: Infrastructure Setup +βœ“ ProxyAdmin deployed: 0xABC... +βœ“ BLR Implementation deployed: 0xDEF... +βœ“ BLR Proxy deployed: 0x123... + +Phase 2: Facet Deployment (46 facets) +[1/46] Deploying AccessControlFacet... +βœ“ AccessControlFacet: 0x456... +[2/46] Deploying CapFacet... +βœ“ CapFacet: 0x789... +... +βœ“ All facets deployed successfully + +Phase 3: Facet Registration +βœ“ Registered 46 facets in BLR (version 1) + +Phase 4: Configuration Creation +βœ“ Equity Configuration created (43 facets, version 1) +βœ“ Bond Configuration created (43 facets, version 1) + +Phase 5: Factory Deployment +βœ“ Factory Implementation deployed: 0xFED... +βœ“ Factory Proxy deployed: 0xCBA... + +πŸŽ‰ Deployment Complete! +Total time: 15m 32s +Total contracts: 50 +Output saved to: deployments/deployment-hedera-testnet-1234567890.json +``` + +### Step 3: Verify Deployment + +The deployment script automatically saves a comprehensive output file: + +```bash +cat deployments/deployment-hedera-testnet-*.json +``` + +**Output structure:** + +```json +{ + "network": "hedera-testnet", + "timestamp": "2025-12-17T10:30:00.000Z", + "deployer": "0x742d35Cc6634C0532925a3b844Bc454e4438f44e", + "infrastructure": { + "proxyAdmin": { + "address": "0x...", + "contractId": "0.0.12345678" + }, + "blr": { + "implementation": "0x...", + "proxy": "0x...", + "contractId": "0.0.12345679" + }, + "factory": { + "implementation": "0x...", + "proxy": "0x...", + "contractId": "0.0.12345680" + } + }, + "facets": [ + { + "name": "AccessControlFacet", + "address": "0x...", + "contractId": "0.0.12345681", + "key": "0x1234..." + } + // ... 45 more facets + ], + "configurations": { + "equity": { + "configId": "0x0000000000000000000000000000000000000000000000000000000000000001", + "version": 1, + "facetCount": 43, + "facets": [...] + }, + "bond": { + "configId": "0x0000000000000000000000000000000000000000000000000000000000000002", + "version": 1, + "facetCount": 43, + "facets": [...] + } + }, + "summary": { + "totalContracts": 50, + "totalFacets": 46, + "totalConfigurations": 2, + "deploymentTime": 932000, + "success": true + } +} +``` + +### Step 4: Verify On-Chain + +Verify key contracts on Hedera: + +```bash +# Check BLR latest version +npx hardhat console --network hedera-testnet +> const blr = await ethers.getContractAt('BusinessLogicResolver', '') +> await blr.getLatestVersion() +# Should return: 1n + +# Check configuration +> await blr.getConfigurationVersion('0x0000000000000000000000000000000000000000000000000000000000000001') +# Should return: 1n (Equity config version) + +# Check factory +> const factory = await ethers.getContractAt('TREXFactory', '') +> await factory.getBusinessLogicResolver() +# Should return: +``` + +## Configuration Files + +### Network Configuration + +Networks are defined in `scripts/infrastructure/config.ts`: + +```typescript +export const NETWORKS = { + "hedera-testnet": { + chainId: 296, + rpcUrl: process.env.HEDERA_TESTNET_JSON_RPC_ENDPOINT, + mirrorNode: process.env.HEDERA_TESTNET_MIRROR_NODE_ENDPOINT, + }, + "hedera-mainnet": { + chainId: 295, + rpcUrl: process.env.HEDERA_MAINNET_JSON_RPC_ENDPOINT, + mirrorNode: process.env.HEDERA_MAINNET_MIRROR_NODE_ENDPOINT, + }, +}; +``` + +### Hardhat Configuration + +Modify `hardhat.config.ts` for advanced settings: + +```typescript +const config: HardhatUserConfig = { + networks: { + "hedera-testnet": { + url: process.env.HEDERA_TESTNET_JSON_RPC_ENDPOINT, + accounts: [process.env.HEDERA_TESTNET_PRIVATE_KEY_0], + chainId: 296, + // Custom gas settings + gasPrice: "auto", + gasMultiplier: 1.2, + }, + }, + solidity: { + version: "0.8.23", + settings: { + optimizer: { + enabled: true, + runs: 200, + }, + }, + }, +}; +``` + +## Deployment Verification + +### Automated Checks + +The deployment script includes built-in verification: + +1. **Post-deployment bytecode check**: Verifies contract deployment via `eth_getCode` +2. **Automatic retry**: 3 attempts with exponential backoff (2s β†’ 4s β†’ 8s) +3. **Transaction confirmation**: 2 confirmations per deployment (Hedera-optimized) + +### Manual Verification Checklist + +- [ ] All 46+ facets deployed successfully +- [ ] BLR latest version = 1 +- [ ] Equity configuration version = 1 +- [ ] Bond configuration version = 1 +- [ ] Factory references correct BLR address +- [ ] ProxyAdmin owns all proxies +- [ ] Deployment output file saved + +### Test Token Creation + +Deploy a test equity token to verify the system: + +```bash +npx hardhat run scripts/domain/factory/deployEquityToken.ts --network hedera-testnet +``` + +## Troubleshooting + +### Common Issues + +#### Issue: "Transaction reverted: insufficient funds" + +**Solution**: Ensure deployer account has sufficient HBAR balance + +#### Issue: "Nonce too low" + +**Solution**: Clear transaction queue or use fresh account + +#### Issue: "Timeout waiting for transaction" + +**Solution**: Increase timeout in deployment options: + +```typescript +const options = { + confirmations: 3, // Increase confirmations + timeout: 300000, // 5 minutes +}; +``` + +#### Issue: "Facet deployment failed: X facets failed" + +**Solution**: Check deployment output for specific errors. Failed facets are logged separately. Re-run deployment - successful facets will be skipped. + +#### Issue: "Configuration creation failed: gas limit exceeded" + +**Solution**: Reduce batch size in `.env`: + +```bash +BATCH_SIZE=10 # Reduce from default 15 +``` + +### Deployment Recovery + +The deployment system supports resumable deployments via checkpoints: + +```typescript +// Resume from checkpoint +const result = await deploySystemWithNewBlr(signer, { + resume: true, + checkpointPath: "./deployments/.checkpoint-1234567890.json", +}); +``` + +## Advanced Topics + +### Custom Facet Selection + +Deploy only specific facets: + +```typescript +import { deployFacets } from "./scripts/infrastructure/operations/facetDeployment"; + +const facetFactories = { + AccessControlFacet: AccessControlFacet__factory, + ERC20Facet: ERC20Facet__factory, + BondFacet: BondFacet__factory, +}; + +const result = await deployFacets(facetFactories, { confirmations: 2 }); +``` + +### Multi-Tenant Deployment + +Deploy multiple factories sharing the same BLR: + +```typescript +import { deploySystemWithExistingBlr } from "./scripts/workflows/deploySystemWithExistingBlr"; + +const result = await deploySystemWithExistingBlr(signer, { + blrAddress: "0x123...", // Existing BLR + deployFacets: false, // Skip facet deployment + deployFactory: true, // Deploy new factory + createConfigurations: false, // Use existing configurations +}); +``` + +### TimeTravel Facets (Testing) + +For development/testing networks, enable TimeTravel facets: + +```bash +USE_TIME_TRAVEL=true npm run deploy:local +``` + +TimeTravel facets allow time manipulation for testing scheduled tasks and corporate actions. + +### Gas Optimization + +For mainnet deployments, optimize gas usage: + +1. **Deploy during low network congestion** +2. **Use batch deployments**: + ```typescript + const options = { batchSize: 5 }; // Deploy 5 facets per transaction + ``` +3. **Pin Solidity optimizer runs**: Adjust `hardhat.config.ts` + ```typescript + optimizer: { enabled: true, runs: 1 } // Optimize for deployment cost + ``` + +### Monitoring Deployment Progress + +For large deployments, monitor via Hedera Mirror Node: + +```bash +# Monitor recent transactions +curl "https://testnet.mirrornode.hedera.com/api/v1/accounts/0.0.YOUR_ACCOUNT_ID/transactions?limit=50" +``` + +## Next Steps + +After successful deployment: + +1. **Configure Access Control**: Set up admin roles for token management +2. **Deploy Test Tokens**: Create equity and bond tokens via factory +3. **Integrate SDK**: Use ATS SDK for programmatic interaction +4. **Deploy Web App**: Configure and deploy ATS web application + +## Related Documentation + +- [Adding a New Facet](./adding-facets.md) +- [Upgrade Configuration](./upgrading.md) + +## Support + +For issues and questions: + +- GitHub Issues: [asset-tokenization-studio/issues](https://github.com/hashgraph/asset-tokenization-studio/issues) +- Documentation: [https://hashgraph.github.io/asset-tokenization-studio](https://hashgraph.github.io/asset-tokenization-studio) diff --git a/docs/ats/developer-guides/contracts/documenting-contracts.md b/docs/ats/developer-guides/contracts/documenting-contracts.md new file mode 100644 index 000000000..b400f1b2e --- /dev/null +++ b/docs/ats/developer-guides/contracts/documenting-contracts.md @@ -0,0 +1,439 @@ +--- +id: documenting-contracts +title: Documenting Smart Contracts with NatSpec +sidebar_label: Documenting Contracts +--- + +# Documenting Smart Contracts with NatSpec + +This guide explains how to properly document Solidity smart contracts using NatSpec (Natural Specification) format and generate API documentation automatically. + +## Overview + +The ATS contracts use **NatSpec** (Ethereum Natural Language Specification Format) for inline documentation. This documentation is automatically extracted and published to the [API Documentation](/docs/references/api) section. + +## NatSpec Basics + +NatSpec uses special comment formats that are processed by documentation generators: + +- `///` - Single-line NatSpec comment +- `/** ... */` - Multi-line NatSpec comment + +### NatSpec Tags + +| Tag | Purpose | Where to Use | +| ------------- | ------------------------ | ------------------------------ | +| `@title` | Contract name | Contract definition | +| `@author` | Contract author | Contract definition | +| `@notice` | User-facing description | Contract, functions, events | +| `@dev` | Developer notes | Contract, functions, modifiers | +| `@param` | Parameter description | Functions with parameters | +| `@return` | Return value description | Functions that return values | +| `@inheritdoc` | Inherit documentation | Override functions | +| `@custom:*` | Custom tags | Any context-specific info | + +## Documentation Structure + +### Contract Documentation + +Every contract should have a title and notice explaining its purpose: + +```solidity +/** + * @title BondFacet + * @author Hedera Hashgraph + * @notice Manages bond-specific operations including coupon payments and maturity redemption + * @dev Implements bond lifecycle management using Diamond storage pattern + * @custom:security-contact security@hedera.com + */ +contract BondFacet is IBond, AccessControlStorageWrapper { + // Contract implementation +} +``` + +### Function Documentation + +Document all public and external functions with clear descriptions: + +```solidity +/** + * @notice Pay a coupon to all bond holders based on a snapshot + * @dev Executes the coupon payment distribution and updates payment history + * @param security The security token address for which to pay coupons + * @param couponDate The date identifier for this coupon payment + * @param paymentTokenAddress The ERC20 token used for payment + * @param totalAmount The total amount to be distributed + * @return success True if the payment was successfully initiated + */ +function payCoupon( + address security, + uint256 couponDate, + address paymentTokenAddress, + uint256 totalAmount +) external override returns (bool success) { + // Implementation +} +``` + +### Internal Functions + +Internal functions should use `@dev` for implementation details: + +```solidity +/** + * @dev Calculates the pro-rata coupon amount for a specific holder + * @param holderBalance The holder's token balance at snapshot time + * @param totalSupply The total supply at snapshot time + * @param totalCoupon The total coupon amount to distribute + * @return amount The calculated coupon amount for the holder + */ +function _calculateCouponAmount( + uint256 holderBalance, + uint256 totalSupply, + uint256 totalCoupon +) internal pure returns (uint256 amount) { + // Implementation +} +``` + +### Events Documentation + +Document all events with clear descriptions of when they're emitted: + +```solidity +/** + * @notice Emitted when a coupon payment is successfully completed + * @param security The security token address + * @param couponDate The coupon payment date identifier + * @param totalAmount The total amount paid + * @param recipientCount The number of recipients who received payment + */ +event CouponPaid(address indexed security, uint256 indexed couponDate, uint256 totalAmount, uint256 recipientCount); +``` + +### Modifiers Documentation + +Document modifiers explaining their validation logic: + +```solidity +/** + * @notice Ensures the caller has the BOND_MANAGER role + * @dev Reverts with AccessDenied if caller lacks the required role + */ +modifier onlyBondManager() { + require(hasRole(BOND_MANAGER_ROLE, msg.sender), "AccessDenied"); + _; +} +``` + +### Storage Documentation + +Document storage structures and state variables: + +```solidity +/** + * @notice Bond configuration and state data + * @dev Stored in Diamond storage pattern to support upgradeability + * @custom:storage-location erc1967:bondFacet.storage + */ +struct BondStorage { + /// @notice Mapping of security addresses to their bond configurations + mapping(address => BondConfig) bondConfigs; + /// @notice Mapping of security and coupon date to payment records + mapping(address => mapping(uint256 => CouponPayment)) couponPayments; + /// @notice The default payment token for coupon distributions + address defaultPaymentToken; +} +``` + +### Errors Documentation + +Document custom errors with clear descriptions: + +```solidity +/** + * @notice Thrown when attempting to pay a coupon for an invalid date + * @param security The security token address + * @param couponDate The invalid coupon date provided + */ +error InvalidCouponDate(address security, uint256 couponDate); + +/** + * @notice Thrown when insufficient funds are available for payment + * @param required The amount required for the payment + * @param available The amount currently available + */ +error InsufficientFunds(uint256 required, uint256 available); +``` + +## Best Practices + +### 1. Be Clear and Concise + +Write documentation for developers who are unfamiliar with the code: + +```solidity +// ❌ Bad - too vague +/// @notice Does stuff with bonds +function processBond() external; + +// βœ… Good - specific and clear +/// @notice Matures a bond and releases principal to token holders +/// @dev Transfers the bond's face value to all holders proportionally +function processBond() external; +``` + +### 2. Document the "Why", Not Just the "What" + +```solidity +// ❌ Bad - only describes what +/// @dev Sets the maturity date +function setMaturityDate(uint256 date) external; + +// βœ… Good - explains why and constraints +/// @notice Sets the bond maturity date when principal becomes due +/// @dev Can only be called before the bond is issued. Once set, cannot be changed +/// to ensure investor certainty. Maturity date must be in the future. +function setMaturityDate(uint256 date) external; +``` + +### 3. Document Edge Cases and Constraints + +```solidity +/** + * @notice Transfers tokens between accounts with compliance checks + * @dev Validates the transfer against KYC, freeze, and partition restrictions + * @param from The sender address (must have sufficient balance) + * @param to The recipient address (must pass KYC and not be frozen) + * @param amount The amount to transfer (must be > 0 and <= sender balance) + * @return success True if transfer was successful + * + * Requirements: + * - `from` must have at least `amount` tokens + * - `to` must be KYC verified + * - Neither `from` nor `to` can be frozen + * - Transfer must comply with all active compliance modules + */ +function transfer(address from, address to, uint256 amount) external returns (bool success); +``` + +### 4. Link Related Functions + +```solidity +/** + * @notice Creates a snapshot of current token holder balances + * @dev The snapshot ID can be used in {payCoupon} to execute payments + * @param security The security token to snapshot + * @return snapshotId The unique identifier for this snapshot + * @see payCoupon + */ +function createSnapshot(address security) external returns (uint256 snapshotId); +``` + +### 5. Document Security Considerations + +```solidity +/** + * @notice Updates the bond's interest rate + * @dev ⚠️ SECURITY: This is a privileged operation that affects all bond holders + * Only BOND_ADMIN role can call this function. Rate changes do not apply + * retroactively to already-accrued interest. + * @param security The bond token address + * @param newRate The new annual interest rate in basis points (e.g., 500 = 5%) + * @custom:security Critical - requires BOND_ADMIN role + * @custom:emits InterestRateUpdated + */ +function updateInterestRate(address security, uint256 newRate) external; +``` + +## Generating Documentation + +### Prerequisites + +Ensure you're in the contracts directory: + +```bash +cd packages/ats/contracts +``` + +### Generate API Documentation + +Run the documentation generator: + +```bash +npm run doc +``` + +This command: + +1. Extracts NatSpec comments from all contracts +2. Generates markdown files in `/docs/references/api/ats-contracts/` +3. Organizes documentation by contract hierarchy + +### Configuration + +The documentation generator is configured in `hardhat.config.ts`: + +```typescript +dodoc: { + runOnCompile: false, // Don't auto-generate on every compile + outputDir: "../../../docs/references/api/ats-contracts", + freshOutput: true, // Clear old docs before generating + include: ["contracts"], // Include all contracts + exclude: [ + "contracts/test", // Exclude test contracts + "contracts/mocks", // Exclude mock contracts + "node_modules" // Exclude dependencies + ], +}, +``` + +### Viewing Generated Documentation + +After generation, the documentation is available at: + +- **Local**: `http://localhost:3000/docs/references/api` +- **Production**: `https://hashgraph.github.io/asset-tokenization-studio/docs/references/api` + +## Documentation Workflow + +### During Development + +1. **Write the contract** with inline NatSpec comments +2. **Document as you code** - don't leave it for later +3. **Review your documentation** before submitting PR + +### Before Committing + +1. **Generate docs** to verify NatSpec is valid: + + ```bash + npm run doc + ``` + +2. **Check for warnings** - fix any NatSpec syntax errors + +3. **Review generated output** in `/docs/references/api/` + +### In Pull Requests + +- Documentation changes are automatically reviewed +- Generated API docs should be committed with code changes +- CI/CD pipeline will verify documentation builds successfully + +## Common Patterns in ATS + +### Facet Pattern Documentation + +Document facets with their layer and purpose: + +```solidity +/** + * @title BondFacet + * @author Hedera Hashgraph + * @notice Layer 2 facet implementing bond-specific corporate actions + * @dev Part of the Diamond pattern - uses BondStorageWrapper for data access + * @custom:layer Layer 2 - Domain Features + * @custom:security-contact security@hedera.com + */ +contract BondFacet is IBond, BondStorageWrapper { + // Implementation +} +``` + +### Storage Wrapper Documentation + +Document storage access patterns: + +```solidity +/** + * @title BondStorageWrapper + * @notice Provides type-safe access to bond storage in Diamond pattern + * @dev Implements the storage access layer for bond data + * @custom:layer Layer 0 - Storage + */ +abstract contract BondStorageWrapper { + /** + * @dev Returns the bond storage pointer + * @return s Storage pointer to BondStorage struct + * @custom:storage-location erc1967:bondFacet.storage + */ + function _bondStorage() internal pure returns (BondStorage storage s); +} +``` + +### Interface Documentation + +Document interfaces with implementation requirements: + +```solidity +/** + * @title IBond + * @notice Interface for bond token operations + * @dev Implementers must support coupon payments and maturity redemption + */ +interface IBond { + /** + * @notice Pay a coupon to bond holders + * @dev Must validate caller permissions and check payment token allowance + * @param security The bond token address + * @param amount The total coupon amount + * @return success True if payment initiated successfully + */ + function payCoupon(address security, uint256 amount) external returns (bool success); +} +``` + +## Troubleshooting + +### Common Issues + +**Issue**: Documentation generator fails + +```bash +Error: Unable to find contract sources +``` + +**Solution**: Ensure contracts are compiled first: + +```bash +npm run compile +npm run doc +``` + +--- + +**Issue**: Missing documentation in generated output + +**Solution**: Check that your NatSpec uses proper syntax: + +- Use `///` or `/** */` format +- Place comments directly above the documented element +- Include required tags (`@notice` for public functions) + +--- + +**Issue**: Documentation not showing in Docusaurus + +**Solution**: Rebuild the documentation site: + +```bash +cd ../../../apps/docs +npm run build +``` + +## Additional Resources + +- [NatSpec Format Specification](https://docs.soliditylang.org/en/latest/natspec-format.html) +- [Solidity Documentation Best Practices](https://docs.soliditylang.org/en/latest/style-guide.html#natspec) +- [Hardhat Dodoc Plugin Documentation](https://github.com/primitivefinance/primitive-dodoc) + +## Summary + +- βœ… Use NatSpec format for all public interfaces +- βœ… Document functions with `@notice`, `@dev`, `@param`, `@return` +- βœ… Include security considerations and constraints +- βœ… Generate docs with `npm run doc` before committing +- βœ… Review generated documentation for clarity + +Well-documented contracts make the codebase more maintainable and help developers understand the system architecture and business logic. diff --git a/docs/ats/developer-guides/contracts/index.md b/docs/ats/developer-guides/contracts/index.md new file mode 100644 index 000000000..1d3923f0f --- /dev/null +++ b/docs/ats/developer-guides/contracts/index.md @@ -0,0 +1,57 @@ +--- +id: index +title: Smart Contracts +sidebar_label: Smart Contracts +--- + +# Smart Contracts + +Learn about the ATS smart contract system and Diamond Pattern implementation. + +## What is ATS? + +The Asset Tokenization Studio contracts provide a modular, upgradeable smart contract system for security tokens (ERC-1400/ERC-3643) on Hedera using the Diamond Pattern (EIP-2535). + +## Available Guides + +### Contract Overview + +[Contract Overview β†’](./overview.md) + +Detailed overview of contract architecture, Diamond Pattern, and 4-layer design. + +### Deployed Addresses + +[Deployed Addresses β†’](./deployed-addresses.md) + +Current contract addresses for testnet and mainnet deployments. + +### Deployment + +[Deployment Tutorial β†’](./deployment.md) + +Complete guide to deploying the ATS contract system including infrastructure, facets, and configuration. + +### Adding Facets + +[Adding a New Facet β†’](./adding-facets.md) + +Step-by-step guide for creating and integrating new facets into the system. + +### Upgrading Facets + +[Upgrading Facets β†’](./upgrading.md) + +Guide for safely upgrading facets and configurations in production. + +### Documenting Contracts + +[Documenting Contracts β†’](./documenting-contracts.md) + +Guide for writing and generating smart contract documentation with NatSpec. + +## Quick Links + +- [Architecture Documentation](https://github.com/hashgraph/asset-tokenization-studio/blob/main/packages/ats/contracts/ARCHITECTURE.md) +- [Scripts Developer Guide](https://github.com/hashgraph/asset-tokenization-studio/blob/main/packages/ats/contracts/scripts/DEVELOPER_GUIDE.md) +- [Source Code](https://github.com/hashgraph/asset-tokenization-studio/tree/main/packages/ats/contracts) diff --git a/docs/ats/developer-guides/contracts/overview.md b/docs/ats/developer-guides/contracts/overview.md new file mode 100644 index 000000000..b6f615b17 --- /dev/null +++ b/docs/ats/developer-guides/contracts/overview.md @@ -0,0 +1,360 @@ +--- +id: overview +title: Contract Overview +sidebar_position: 1 +--- + +# Contract Overview + +Detailed overview of the ATS smart contract architecture and Diamond Pattern implementation. + +## What ATS Contracts Do + +The Asset Tokenization Studio contracts provide a modular, upgradeable smart contract system for security tokens on Hedera. They implement: + +1. **ERC-1400** - Security token standard with partitions and document management +2. **ERC-3643** (Partial T-REX) - Compliance and identity management for security tokens +3. **Diamond Pattern (EIP-2535)** - Modular, upgradeable architecture +4. **Equity Features** - Dividends, voting rights, stock splits +5. **Bond Features** - Coupons, maturity redemption +6. **Compliance** - KYC, whitelisting, transfer restrictions + +## Architecture + +### Diamond Pattern (EIP-2535) + +The ATS contracts use the Diamond Pattern for maximum modularity and upgradeability: + +```mermaid +graph TB + subgraph "Management Layer" + Admin[ProxyAdmin
Manages Upgrades] + end + + subgraph "Proxy Layer" + BLR_Proxy[Business Logic Resolver Proxy
Facet Registry & Versioning] + Factory_Proxy[Factory Proxy
Token Creation] + end + + subgraph "Diamond Proxy" + Diamond[Diamond Proxy
Delegatecall Router] + FallbackFunction[Fallback Function
Routes to Facets] + end + + subgraph "Business Logic Resolver" + BLR[Business Logic Resolver
BLK β†’ Facet Mapping] + Versions[Version Management
Facet Versioning] + end + + subgraph "Facets - Layer 2 (Features)" + Bond[Bond Facet
Coupon & Maturity] + Equity[Equity Facet
Dividends & Voting] + Corporate[Corporate Actions
Distributions] + Freeze[Freeze Facet
Account Freezing] + Hold[Hold Facet
Token Holds] + end + + Admin --> BLR_Proxy + Admin --> Factory_Proxy + BLR_Proxy --> BLR + Factory_Proxy --> Diamond + Diamond --> FallbackFunction + FallbackFunction --> BLR + BLR --> Versions + + BLR --> Bond + BLR --> Equity + BLR --> Corporate + BLR --> Freeze + BLR --> Hold + + style Admin fill:#764EE5,color:#fff + style BLR_Proxy fill:#9171EA,color:#fff + style Diamond fill:#2D84EB,color:#fff + style BLR fill:#07E78E + style Bond fill:#ffe1f5 + style Equity fill:#ffe1f5 +``` + +### 4-Layer Hierarchical Design + +``` +β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” +β”‚ ProxyAdmin β”‚ +β”‚ (Manages proxy upgrades) β”‚ +β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ + β”‚ + β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”€β”€β” + β”‚ β”‚ +β”Œβ”€β”€β”€β”€β”€β”€β”€β–Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”Œβ”€β”€β”€β”€β–Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” +β”‚ BLR Proxy β”‚ β”‚ Factory Proxy β”‚ +β”‚ (Facet Registry) β”‚ β”‚ (Token Creator) β”‚ +β””β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ + β”‚ + β”œβ”€ Layer 0: Storage Wrappers + β”œβ”€ Layer 1: Core Logic (ERC-1400, ERC-3643) + β”œβ”€ Layer 2: Domain Features (Bond, Equity, Corporate Actions) + └─ Layer 3: Jurisdiction-Specific (USA) +``` + +## Contract Layers + +### Layer 0: Storage Wrappers + +Provide type-safe access to Diamond storage: + +- **ERC1400StorageWrapper** - Token state and partition data +- **KycStorageWrapper** - KYC and identity management +- **CapStorageWrapper** - Supply cap and issuance limits +- **AccessControlStorageWrapper** - Role-based permissions +- **NonceStorageWrapper** - EIP712 nonce storage for signature verification + +**Purpose**: Storage isolation per feature for safe upgradeability + +### Layer 1: Core Implementation + +Base implementations of standards: + +- **ERC1400Implementation** - Security token core logic +- **AccessControl** - Role-based access control +- **Freeze** - Account and partial freezing +- **Hold** - Token holds and escrow +- **ControlList** - Whitelisting and blacklisting +- **Common** - Shared logic across facets +- **Nonces** - Centralized EIP712 nonce management for signature verification + +**Purpose**: Reusable base logic for all token types + +> **Note**: The Nonces facet centralizes nonce management for all EIP712 signed operations, using a single token name (ERC20 token name) and version (BLR version number) across all facets. + +### Layer 2: Domain Features (Facets) + +Feature-specific implementations: + +**Bond Facets:** + +- **BondFacet** - Create bonds, set coupons, manage maturity +- **BondReadFacet** - Read bond information (coupons, maturity) + +**Equity Facets:** + +- **EquityFacet** - Create equity, set dividends, voting, stock splits + +**Scheduled Tasks:** + +- **ScheduledTasksFacet** - Snapshots, balance adjustments, cross-ordered tasks + +**Corporate Actions:** + +- **ProceedRecipientsFacet** - Payment distribution logic + +**Purpose**: Each facet is independently upgradeable + +### Layer 3: Jurisdiction-Specific + +Jurisdiction-specific compliance: + +- **bondUSA/** - USA-specific bond features +- **equityUSA/** - USA-specific equity features + +**Purpose**: Regulatory compliance per jurisdiction + +## Key Components + +### Diamond Proxy + +Routes function calls to appropriate facets: + +- **Delegatecall to facets** - Execute facet code in proxy context +- **Function selector mapping** - Map function signatures to facet addresses +- **Storage layout preservation** - Maintain consistent storage across upgrades +- **Gas-efficient routing** - Minimal overhead for function calls + +### Business Logic Resolver (BLR) + +Maps Business Logic Keys (BLK) to versioned facet addresses: + +- **Versioned facet registry** - Track multiple versions of each facet +- **Dynamic facet lookup** - Resolve facets at runtime +- **Configuration management** - Equity and Bond configurations +- **Upgrade coordination** - Orchestrate multi-facet upgrades + +### Factory + +Deploys new token instances: + +- **Clone diamond proxies** - Create new token contracts +- **Initialize configurations** - Set up equity or bond config +- **Set up permissions** - Grant roles to token admins +- **Deploy identity contracts** - Create compliance infrastructure + +### Facets + +Modular business logic components: + +- **Independent upgrades** - Update one facet without affecting others +- **Feature isolation** - Clear separation of concerns +- **Shared storage access** - All facets access same storage layout +- **Version compatibility** - Multiple versions can coexist + +## Benefits of Diamond Pattern + +- **Modularity**: Each facet can be upgraded independently +- **Gas Efficiency**: Share storage and logic across contracts +- **No Size Limits**: Bypass the 24KB contract size limit +- **Flexibility**: Add or remove functionality without redeployment +- **Upgradeability**: Safe upgrade path for production contracts + +## How It Works + +### Token Creation Flow + +``` +User calls Factory.createEquity() + β”‚ + β–Ό +Factory clones Diamond Proxy + β”‚ + β–Ό +Factory initializes configuration + β”‚ + β–Ό +Diamond Proxy queries BLR for facets + β”‚ + β–Ό +Token ready to use +``` + +### Function Call Flow + +``` +User calls token.transfer() + β”‚ + β–Ό +Diamond Proxy receives call + β”‚ + β–Ό +Proxy queries BLR for ERC1400 facet + β”‚ + β–Ό +BLR returns facet address & version + β”‚ + β–Ό +Proxy delegatecalls to facet + β”‚ + β–Ό +Facet executes transfer logic + β”‚ + β–Ό +Transaction completes +``` + +### Upgrade Flow + +``` +Admin deploys new BondFacet v2 + β”‚ + β–Ό +Admin updates BLR mapping + β”‚ + β–Ό +BLR now points to BondFacet v2 + β”‚ + β–Ό +All new calls use v2 + β”‚ + β–Ό +Existing storage preserved +``` + +## Available Facets + +### Token Operations + +- Transfer, issue, redeem tokens +- Partition management +- Document attachment + +### Equity Features + +- Dividend distribution scheduling +- Voting rights management +- Stock splits and reverse splits +- Balance adjustments + +### Bond Features + +- Coupon payment scheduling +- Maturity date management +- Redemption at maturity +- Interest calculations + +### Compliance + +- KYC grant/revoke +- Whitelist/blacklist management +- Transfer restrictions +- SSI integration (Verifiable Credentials) + +### Account Management + +- Freeze/unfreeze accounts +- Partial freezes +- Hold creation/execution +- Clearing transfers + +### Administrative + +- Role management (PAUSER, SUPPLY_CONTROLLER, COMPLIANCE_ROLE) +- Configuration updates +- Pause/unpause +- Cap management + +## Security Features + +1. **Role-Based Access Control** - Fine-grained permissions +2. **Pausability** - Emergency stop for all operations +3. **Upgradeability** - Fix bugs without redeploying +4. **Storage Isolation** - Each facet's storage is separate +5. **Event Logging** - Full audit trail +6. **EIP712 Signatures** - Centralized nonce management for permit and meta-transaction support + +## Best Practices + +1. **Test on Testnet First** - Always test upgrades on testnet +2. **Version Carefully** - Use semantic versioning for facets +3. **Document Changes** - Use NatSpec comments extensively +4. **Monitor Events** - Subscribe to contract events +5. **Gradual Rollout** - Upgrade facets one at a time in production + +## Integration Points + +### With Mass Payout + +- ATS tokens can be imported into Mass Payout +- Mass Payout queries holder lists from ATS +- Distribution data flows from ATS to Mass Payout + +### With Wallets + +- HashPack, Blade, MetaMask integration +- WalletConnect support +- Transaction signing via user wallets + +### With Compliance Systems + +- SSI credential verification +- External KYC provider integration +- Revocation registry support + +## Additional Resources + +- [Scripts Developer Guide](https://github.com/hashgraph/asset-tokenization-studio/blob/main/packages/ats/contracts/scripts/DEVELOPER_GUIDE.md) +- [Contracts README](https://github.com/hashgraph/asset-tokenization-studio/blob/main/packages/ats/contracts/README.md) + +## Related Guides + +- [Deployment](./deployment.md) - Deploy ATS contracts +- [Adding Facets](./adding-facets.md) - Create new facets +- [Upgrading](./upgrading.md) - Upgrade existing facets +- [Documenting Contracts](./documenting-contracts.md) - Write contract documentation diff --git a/docs/ats/developer-guides/contracts/upgrading.md b/docs/ats/developer-guides/contracts/upgrading.md new file mode 100644 index 000000000..a424960c5 --- /dev/null +++ b/docs/ats/developer-guides/contracts/upgrading.md @@ -0,0 +1,796 @@ +--- +id: upgrading +title: Tutorial - Upgrading ATS Contracts +sidebar_label: Upgrading Contracts +--- + +# Tutorial: Upgrading ATS Contracts + +This comprehensive guide covers upgrading facets and configurations in the Asset Tokenization Studio (ATS) smart contract system without disrupting existing tokens. + +## Table of Contents + +- [Overview](#overview) +- [Understanding Versioning](#understanding-versioning) +- [Upgrade Scenarios](#upgrade-scenarios) +- [Safe Upgrade Process](#safe-upgrade-process) +- [Step-by-Step Guides](#step-by-step-guides) +- [Testing Upgrades](#testing-upgrades) +- [Production Deployment](#production-deployment) +- [Rollback Procedures](#rollback-procedures) +- [Best Practices](#best-practices) + +## Overview + +The ATS upgrade system uses the **Diamond Pattern (EIP-2535)** with a **Business Logic Resolver (BLR)** to enable safe, versioned upgrades of facet implementations without requiring token redeployment. + +### Key Concepts + +**Business Logic Resolver (BLR)** + +- Central registry mapping resolver keys β†’ facet addresses +- Maintains global version counter across all facets +- Manages configurations defining facet sets for token types + +**Global Versioning** + +- Single `latestVersion` counter incremented on any facet registration +- All previously registered facets must be re-registered together +- Ensures atomic updates across the system + +**Configurations** + +- Define which facets compose a token type (Equity, Bond) +- Each configuration has independent version history +- Tokens can pin to specific config versions or auto-update + +**Resolver Proxy Pattern** + +- Each token is a proxy contract +- Routes function calls to facets via BLR resolution +- Can use pinned version or always-latest version + +## Understanding Versioning + +### Three-Level Version System + +``` +β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” +β”‚ BLR Global Version (latestVersion) β”‚ ← Increments on any facet registration +β”‚ Current: 5 β”‚ +β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ + β”‚ + β”œβ”€ Facet Version Histories + β”‚ β”œβ”€ AccessControlFacet: v1, v2, v3, v4, v5 + β”‚ β”œβ”€ BondFacet: v1, v2, v3, v4, v5 + β”‚ └─ RewardsFacet: (none), (none), (none), v4, v5 + β”‚ + └─ Configuration Versions + β”œβ”€ Equity Config: v1, v2, v3 + β”‚ └─ v3 uses facet global version 5 + └─ Bond Config: v1, v2 + └─ v2 uses facet global version 4 +``` + +### Version Resolution Modes + +**Mode 1: Pinned Version (Recommended for Production)** + +```solidity +// Token configuration +configurationVersion = 2; // Fixed to version 2 + +// Resolution: Always uses exact configuration version 2 +// Upgrades require explicit update transaction +``` + +**Mode 2: Auto-Update (Development/Testing)** + +```solidity +// Token configuration +configurationVersion = 0; // or LATEST_VERSION + +// Resolution: Always resolves to latest configuration version +// Upgrades happen automatically on next function call +``` + +## Upgrade Scenarios + +### Scenario 1: Bug Fix in Single Facet + +**Situation**: Critical bug found in `BondFacet` + +**Impact**: Only affects bonds using latest version + +**Approach**: + +1. Deploy fixed `BondFacet` v2 +2. Register all facets (v2 for Bond, existing versions for others) +3. Create new Bond configuration v2 +4. Coordinate bond token upgrades (or auto-update if using version 0) + +### Scenario 2: New Feature Facet + +**Situation**: Adding new `RewardsFacet` + +**Impact**: Available only to new configurations + +**Approach**: + +1. Deploy new `RewardsFacet` +2. Register all facets including new `RewardsFacet` +3. Create Equity configuration v2 including rewards +4. New tokens use v2, existing tokens remain on v1 + +### Scenario 3: Multiple Facet Updates + +**Situation**: Major upgrade affecting 5+ facets + +**Impact**: Requires comprehensive testing + +**Approach**: + +1. Deploy all updated facets +2. Register all facets together (atomic update) +3. Create new configurations +4. Staged rollout to production tokens + +### Scenario 4: Infrastructure Upgrade (BLR or Factory) + +**Situation**: Upgrading BLR implementation contract + +**Impact**: Affects entire system + +**Approach**: + +1. Deploy new BLR implementation +2. Use `ProxyAdmin.upgradeAndCall()` on BLR proxy +3. Test thoroughly before facet updates +4. No token-level changes required (proxy pattern) + +## Safe Upgrade Process + +### Pre-Upgrade Checklist + +- [ ] Code review completed +- [ ] Unit tests passing (100% coverage for changes) +- [ ] Integration tests passing +- [ ] Gas analysis performed +- [ ] Security audit completed (for major changes) +- [ ] Testnet deployment successful +- [ ] Rollback plan documented +- [ ] Stakeholder notification prepared + +### Upgrade Phases + +**Phase 1: Development** + +- Implement facet changes +- Write comprehensive tests +- Document breaking changes + +**Phase 2: Testing** + +- Deploy to local network +- Deploy to testnet (previewnet/testnet) +- Perform integration testing +- Load testing (if applicable) + +**Phase 3: Staging** + +- Deploy to staging environment +- Mirror production configuration +- Perform final validation + +**Phase 4: Production** + +- Deploy during maintenance window +- Monitor for issues +- Gradual rollout if possible + +**Phase 5: Post-Upgrade** + +- Verify all functionality +- Monitor events and transactions +- Stakeholder communication + +## Step-by-Step Guides + +### Guide 1: Upgrading a Single Facet + +**Scenario**: Fix bug in `BondFacet` + +#### Step 1: Prepare New Implementation + +```bash +cd packages/ats/contracts + +# Make your changes to contracts/layer_2/bond/Bond.sol +# Update version in comments/NatSpec +``` + +#### Step 2: Compile and Test + +```bash +# Compile contracts +npm run compile + +# Run specific tests +npm run test -- test/layer_2/bond/Bond.test.ts + +# Run all tests +npm run test +``` + +#### Step 3: Deploy New Facet to Testnet + +Create deployment script: `scripts/maintenance/upgradeBondFacet.ts` + +```typescript +import { ethers } from "hardhat"; +import { BusinessLogicResolver } from "../../typechain-types"; +import { registerFacets } from "../infrastructure/operations/registerFacets"; +import { atsRegistry } from "../domain/atsRegistry"; + +async function main() { + const [deployer] = await ethers.getSigners(); + console.log("Deploying BondFacet upgrade from:", deployer.address); + + // Deploy new BondFacet implementation + const BondFacetFactory = await ethers.getContractFactory("BondFacet"); + const newBondFacet = await BondFacetFactory.deploy(); + await newBondFacet.waitForDeployment(); + const newBondAddress = await newBondFacet.getAddress(); + + console.log("New BondFacet deployed to:", newBondAddress); + + // Get BLR instance + const blrAddress = process.env.BLR_PROXY_ADDRESS; + const blr = await ethers.getContractAt("BusinessLogicResolver", blrAddress); + + // Get current facet addresses + const currentVersion = await blr.getLatestVersion(); + console.log("Current BLR version:", currentVersion); + + // Prepare registration data - MUST include ALL facets + const facetsToRegister = [ + { + name: "AccessControlFacet", + address: process.env.ACCESS_CONTROL_FACET_ADDRESS, // Existing + resolverKey: atsRegistry.getFacetDefinition("AccessControlFacet").resolverKey.value, + }, + { + name: "BondFacet", + address: newBondAddress, // NEW VERSION + resolverKey: atsRegistry.getFacetDefinition("BondFacet").resolverKey.value, + }, + // ... ALL other facets with existing addresses + ]; + + // Register all facets (increments version) + console.log("Registering facets..."); + const result = await registerFacets(blr, facetsToRegister, { + confirmations: 2, + }); + + console.log("Registration complete!"); + console.log("New BLR version:", await blr.getLatestVersion()); + console.log("Transaction hash:", result.transactionHash); +} + +main().catch((error) => { + console.error(error); + process.exitCode = 1; +}); +``` + +#### Step 4: Execute Deployment + +```bash +# Set environment variables +export BLR_PROXY_ADDRESS=0x123... +export ACCESS_CONTROL_FACET_ADDRESS=0x456... +# ... all other facet addresses + +# Deploy to testnet +npx hardhat run scripts/maintenance/upgradeBondFacet.ts --network hedera-testnet +``` + +#### Step 5: Create New Configuration + +```typescript +// scripts/maintenance/createBondConfigV2.ts +import { ethers } from "hardhat"; +import { createBondConfiguration } from "../domain/bond/createConfiguration"; + +async function main() { + const blr = await ethers.getContractAt("BusinessLogicResolver", process.env.BLR_PROXY_ADDRESS); + + // Get all facet addresses (now includes new BondFacet) + const facetAddresses = new Map([ + ["BondFacet", process.env.NEW_BOND_FACET_ADDRESS], + // ... all other facets + ]); + + // Create Bond configuration v2 + console.log("Creating Bond configuration v2..."); + const result = await createBondConfiguration(blr, facetAddresses, { + batchSize: 15, + confirmations: 2, + }); + + console.log("Bond configuration v2 created!"); + console.log("Config ID:", result.configurationId); + console.log("Version:", result.version); + console.log("Facet count:", result.facetCount); +} + +main().catch((error) => { + console.error(error); + process.exitCode = 1; +}); +``` + +```bash +npx hardhat run scripts/maintenance/createBondConfigV2.ts --network hedera-testnet +``` + +#### Step 6: Verify Upgrade + +```bash +npx hardhat console --network hedera-testnet +``` + +```javascript +> const blr = await ethers.getContractAt('BusinessLogicResolver', '0x123...') + +> // Check latest version +> await blr.getLatestVersion() +2n // Incremented from 1 + +> // Check Bond configuration version +> await blr.getConfigurationVersion('0x0000000000000000000000000000000000000000000000000000000000000002') +2n // New configuration version + +> // Verify BondFacet address +> await blr.resolveLatestBusinessLogic(BOND_RESOLVER_KEY) +'0xNEW_BOND_FACET_ADDRESS' +``` + +### Guide 2: Adding a New Facet to Existing Configuration + +**Scenario**: Add `RewardsFacet` to Equity tokens + +#### Step 1: Deploy New Facet + +```typescript +// Assuming RewardsFacet already developed (see adding-facets.md) +const RewardsFacetFactory = await ethers.getContractFactory("RewardsFacet"); +const rewardsFacet = await RewardsFacetFactory.deploy(); +await rewardsFacet.waitForDeployment(); +``` + +#### Step 2: Register All Facets (Including New One) + +```typescript +const facetsToRegister = [ + // ... all existing facets + { + name: "RewardsFacet", + address: await rewardsFacet.getAddress(), + resolverKey: _REWARDS_RESOLVER_KEY, + }, +]; + +await registerFacets(blr, facetsToRegister); +``` + +#### Step 3: Create Equity Configuration v2 with Rewards + +Update `scripts/domain/equity/createConfiguration.ts`: + +```typescript +export async function createEquityConfiguration( + blr: BusinessLogicResolver, + facetAddresses: Map, + options?: CreateConfigurationOptions, +): Promise { + const facetConfigurations: FacetConfiguration[] = [ + // ... existing 43 facets + { + facetName: "RewardsFacet", // NEW FACET + resolverKey: atsRegistry.getFacetDefinition("RewardsFacet").resolverKey.value, + address: facetAddresses.get("RewardsFacet")!, + }, + ]; + + // Create configuration with 44 facets + const result = await createBatchConfiguration(blr, EQUITY_CONFIG_ID, facetConfigurations, options); + + return result; +} +``` + +#### Step 4: Deploy New Equity Tokens + +```typescript +// New equity tokens automatically get RewardsFacet +const factory = await ethers.getContractAt("TREXFactory", factoryAddress); + +await factory.createEquityToken( + EQUITY_CONFIG_ID, + 0, // Use latest version (now includes rewards) + equityInitData, +); +``` + +#### Step 5: Existing Tokens (Optional Upgrade) + +Existing equity tokens on v1 (without rewards) can stay on v1 or upgrade: + +**Option A: Stay on v1** (No rewards) + +- No action required +- Tokens continue using v1 configuration + +**Option B: Upgrade to v2** (Get rewards) + +- Requires governance approval (if ownership allows) +- Call `upgradeConfiguration()` on proxy (if implemented) + +### Guide 3: Upgrading Infrastructure Contracts (BLR) + +**Scenario**: Fix critical bug in BLR implementation + +#### Step 1: Deploy New BLR Implementation + +```typescript +const NewBLRFactory = await ethers.getContractFactory("BusinessLogicResolverV2"); +const newBLRImpl = await NewBLRFactory.deploy(); +await newBLRImpl.waitForDeployment(); + +console.log("New BLR implementation:", await newBLRImpl.getAddress()); +``` + +#### Step 2: Prepare Upgrade via ProxyAdmin + +```typescript +import { upgradeProxy } from "../infrastructure/operations/upgradeProxy"; + +const proxyAdmin = await ethers.getContractAt("ProxyAdmin", process.env.PROXY_ADMIN_ADDRESS); + +const blrProxy = process.env.BLR_PROXY_ADDRESS; +const newBLRImpl = process.env.NEW_BLR_IMPL_ADDRESS; + +// Option 1: Simple upgrade (no reinitialization) +await upgradeProxy(proxyAdmin, { + proxyAddress: blrProxy, + newImplementationAddress: newBLRImpl, +}); + +// Option 2: Upgrade with reinitialization +const initData = newBLRImpl.interface.encodeFunctionData("reinitialize", [ + /* reinit params */ +]); + +await upgradeProxy(proxyAdmin, { + proxyAddress: blrProxy, + newImplementationAddress: newBLRImpl, + initData: initData, +}); +``` + +#### Step 3: Verify Upgrade + +```javascript +> const blr = await ethers.getContractAt('BusinessLogicResolverV2', blrProxyAddress) + +> // Verify implementation address +> const implSlot = '0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc' +> const impl = await ethers.provider.getStorage(blrProxyAddress, implSlot) +> console.log('Implementation:', ethers.getAddress('0x' + impl.slice(26))) + +> // Test new functionality +> await blr.newFunctionFromV2() +``` + +### Guide 4: Configuration Selector Blacklisting + +**Scenario**: Deprecate specific function across all tokens + +#### Step 1: Identify Function Selector + +```typescript +const deprecatedSelector = ethers.id("deprecatedFunction(uint256)").slice(0, 10); +console.log("Selector to blacklist:", deprecatedSelector); +// Output: 0x12345678 +``` + +#### Step 2: Blacklist Selector in Configuration + +```typescript +const blr = await ethers.getContractAt("BusinessLogicResolver", blrAddress); + +// Blacklist for Equity configuration +await blr.addSelectorsToBlacklist(EQUITY_CONFIG_ID, [deprecatedSelector]); + +console.log("Selector blacklisted for Equity tokens"); +``` + +#### Step 3: Verify Blacklisting + +```javascript +> const equityToken = await ethers.getContractAt('IEquity', tokenAddress) + +> // Attempt to call deprecated function +> await equityToken.deprecatedFunction(123) +// Error: Function selector is blacklisted +``` + +## Testing Upgrades + +### Local Testing + +```bash +# Start local Hardhat network +npx hardhat node + +# In separate terminal, run upgrade script +npx hardhat run scripts/maintenance/upgradeBondFacet.ts --network localhost +``` + +### Testnet Testing + +```bash +# Deploy complete system to testnet +npm run deploy:hedera:testnet + +# Create test tokens +npx hardhat run scripts/domain/factory/deployBondToken.ts --network hedera-testnet + +# Perform upgrade +npx hardhat run scripts/maintenance/upgradeBondFacet.ts --network hedera-testnet + +# Test upgraded functionality +npx hardhat run scripts/test/testBondUpgrade.ts --network hedera-testnet +``` + +### Upgrade Test Script Example + +```typescript +// scripts/test/testBondUpgrade.ts +import { ethers } from "hardhat"; + +async function main() { + const bondTokenAddress = process.env.BOND_TOKEN_ADDRESS; + const bond = await ethers.getContractAt("IBond", bondTokenAddress); + + console.log("Testing upgraded Bond functionality..."); + + // Test 1: Old functionality still works + const bondDetails = await bond.getBondDetails(); + console.log("βœ“ getBondDetails() works"); + + // Test 2: New functionality (if added) + if (bond.interface.hasFunction("newBondFunction")) { + await bond.newBondFunction(/* params */); + console.log("βœ“ newBondFunction() works"); + } + + // Test 3: Bug fix verification + // ... test specific bug fix + + console.log("All upgrade tests passed!"); +} + +main().catch(console.error); +``` + +## Production Deployment + +### Pre-Deployment + +1. **Announce maintenance window** + + ``` + Maintenance Window: 2025-01-15 02:00-04:00 UTC + Expected downtime: None (upgrade is seamless) + Affected tokens: All Bond tokens (auto-update enabled) + ``` + +2. **Verify all prerequisites** + + ```bash + # Check deployer balance + npx hardhat console --network hedera-mainnet + > (await ethers.provider.getBalance(deployerAddress)).toString() + + # Verify current state + > const blr = await ethers.getContractAt('BusinessLogicResolver', blrAddress) + > await blr.getLatestVersion() + ``` + +### Deployment + +```bash +# Set production environment +export NETWORK=hedera-mainnet +export BLR_PROXY_ADDRESS=0xPRODUCTION_BLR +# ... other production addresses + +# Execute upgrade +npx hardhat run scripts/maintenance/upgradeBondFacet.ts --network hedera-mainnet + +# Monitor transaction +# Use Hedera Mirror Node Explorer +``` + +### Post-Deployment + +1. **Verify upgrade** + + ```javascript + > const blr = await ethers.getContractAt('BusinessLogicResolver', blrAddress) + > await blr.getLatestVersion() // Should be incremented + ``` + +2. **Test live tokens** + + ```javascript + > const bondToken = await ethers.getContractAt('IBond', productionBondAddress) + > await bondToken.getBondDetails() // Should use new implementation + ``` + +3. **Monitor events** + + ```bash + # Check for errors in recent transactions + curl "https://mainnet.mirrornode.hedera.com/api/v1/contracts/0.0.12345678/results?limit=10" + ``` + +4. **Stakeholder notification** + ``` + Upgrade Complete: Bond facet v2 deployed + - New version: 2 + - All bond tokens updated automatically + - No user action required + ``` + +## Rollback Procedures + +### Scenario: Critical Bug in New Facet + +#### Option 1: Deploy Previous Version Again + +```typescript +// Register old facet address again (creates new version) +const facetsToRegister = [ + { + name: "BondFacet", + address: previousBondFacetAddress, // Old working version + resolverKey: BOND_RESOLVER_KEY, + }, + // ... all other facets +]; + +await registerFacets(blr, facetsToRegister); + +// Create new configuration using old facet +await createBondConfiguration(blr, facetAddresses); +``` + +#### Option 2: Pin Tokens to Previous Configuration + +```typescript +// If using versioned configurations, pin to previous version +// (Requires governance or admin action on token) +await bondToken.updateConfigurationVersion(previousVersion); +``` + +#### Option 3: Emergency Pause + +```typescript +// Pause affected facet functionality +const pauseFacet = await ethers.getContractAt("IPause", tokenAddress); +await pauseFacet.pause(); + +console.log("Token paused while investigating issue"); +``` + +## Best Practices + +### Version Management + +1. **Document every version**: Maintain changelog with version details +2. **Semantic versioning**: Follow semver for major/minor/patch +3. **Git tags**: Tag repository with version numbers +4. **Configuration matrix**: Track which tokens use which versions + +### Testing Standards + +1. **100% test coverage**: For modified facets +2. **Integration tests**: Test facet interactions +3. **Gas benchmarks**: Compare before/after upgrade +4. **Load testing**: For performance-critical upgrades + +### Communication + +1. **Advance notice**: 7+ days for major upgrades +2. **Detailed changelogs**: Publish comprehensive notes +3. **Migration guides**: If breaking changes +4. **Support availability**: During and after upgrade + +### Monitoring + +1. **Event tracking**: Monitor upgrade-related events +2. **Error alerts**: Set up alerts for failures +3. **Performance metrics**: Track gas usage changes +4. **User impact**: Monitor transaction success rates + +### Security + +1. **Multi-sig for production**: Require multiple approvals +2. **Time locks**: Enforce delay between proposal and execution +3. **Emergency procedures**: Document emergency contacts +4. **Insurance**: Consider smart contract insurance + +### Documentation + +Every upgrade should document: + +- Version number and date +- Changes made (bug fixes, features, optimizations) +- Breaking changes +- Migration steps (if applicable) +- Test results +- Deployment transactions + +## Example Upgrade Checklist + +```markdown +# Upgrade Checklist: BondFacet v1.2.3 + +## Pre-Upgrade + +- [x] Code review completed (2025-01-10) +- [x] Unit tests: 100% coverage +- [x] Integration tests: Passed +- [x] Security audit: Completed (no critical issues) +- [x] Testnet deployment: Successful (0.0.12345678) +- [x] Gas analysis: -5% reduction in redemption +- [x] Stakeholder notification: Sent (2025-01-08) + +## Deployment + +- [x] Deployed new BondFacet: 0.0.12345679 +- [x] Registered facets: Version 3 +- [x] Created Bond config v3: Success +- [x] Transaction hash: 0xabcd... + +## Post-Deployment + +- [x] Verified BLR version: 3 +- [x] Tested live bond token: Passed +- [x] Monitored for 24h: No issues +- [x] Documentation updated +- [x] Final notification sent: 2025-01-15 + +## Rollback Plan + +- Previous BondFacet: 0.0.12345670 +- Previous config version: 2 +- Emergency contact: admin@example.com +``` + +## Related Documentation + +- [Deployment Tutorial](./deployment.md) +- [Adding a New Facet](./adding-facets.md) +- [Diamond Pattern (EIP-2535)](https://eips.ethereum.org/EIPS/eip-2535) + +## Support + +For upgrade assistance: + +- GitHub Issues: [asset-tokenization-studio/issues](https://github.com/hashgraph/asset-tokenization-studio/issues) +- Emergency Contact: (Include production support contact) diff --git a/docs/ats/developer-guides/index.md b/docs/ats/developer-guides/index.md new file mode 100644 index 000000000..c26012f34 --- /dev/null +++ b/docs/ats/developer-guides/index.md @@ -0,0 +1,63 @@ +--- +id: index +title: Developer Guides +sidebar_position: 4 +--- + +# Developer Guides + +Technical guides for developers building with or extending Asset Tokenization Studio. + +## Available Guides + +### Smart Contracts + +[ATS Contracts β†’](./contracts/index.md) + +Learn about the ATS smart contract system and Diamond Pattern implementation. + +[Contract Overview β†’](./contracts/overview.md) + +Detailed overview of contract architecture, Diamond Pattern, and 4-layer design. + +[Deployed Addresses β†’](./contracts/deployed-addresses.md) + +Current contract addresses for testnet and mainnet. + +[Deployment β†’](./contracts/deployment.md) + +Deploy the ATS contract system. + +[Adding Facets β†’](./contracts/adding-facets.md) + +Create and integrate new facets. + +[Upgrading Facets β†’](./contracts/upgrading.md) + +Safely upgrade facets in production. + +[Documenting Contracts β†’](./contracts/documenting-contracts.md) + +Write contract documentation with NatSpec. + +### SDK Integration + +[SDK Integration β†’](./sdk-integration.md) + +Quick guide to integrate the ATS SDK in your project. + +[SDK Overview β†’](./sdk-overview.md) + +Detailed overview of SDK architecture and available operations. + +### Web Application + +_Coming soon_ + +Learn how to customize and extend the ATS web application. + +## Quick Links + +- [API Documentation](../api/index.md) - Technical reference +- [User Guides](../user-guides/index.md) - Application usage +- [GitHub Repository](https://github.com/hashgraph/asset-tokenization-studio) diff --git a/docs/ats/developer-guides/sdk-integration.md b/docs/ats/developer-guides/sdk-integration.md new file mode 100644 index 000000000..6da16560d --- /dev/null +++ b/docs/ats/developer-guides/sdk-integration.md @@ -0,0 +1,142 @@ +--- +id: sdk-integration +title: SDK Integration +sidebar_position: 1 +--- + +# SDK Integration + +Quick guide to integrate the Asset Tokenization Studio SDK in your project. + +## Installation + +```bash +npm install @hashgraph/asset-tokenization-sdk +``` + +## Setup + +### 1. Initialize the Network + +```typescript +import { Network, InitializationRequest } from "@hashgraph/asset-tokenization-sdk"; + +const initRequest = new InitializationRequest({ + network: "testnet", + mirrorNode: { + baseUrl: "https://testnet.mirrornode.hedera.com/api/v1/", + apiKey: "", + headerName: "", + }, + rpcNode: { + baseUrl: "https://testnet.hashio.io/api", + apiKey: "", + headerName: "", + }, + configuration: { + resolverAddress: "0.0.7707874", // See deployed-addresses.md + factoryAddress: "0.0.7708432", + }, +}); + +await Network.init(initRequest); +``` + +### 2. Connect a Wallet + +```typescript +import { ConnectRequest, SupportedWallets } from "@hashgraph/asset-tokenization-sdk"; + +const connectRequest = new ConnectRequest({ + network: "testnet", + mirrorNode: { + baseUrl: "https://testnet.mirrornode.hedera.com/api/v1/", + apiKey: "", + headerName: "", + }, + rpcNode: { + baseUrl: "https://testnet.hashio.io/api", + apiKey: "", + headerName: "", + }, + wallet: SupportedWallets.HASHPACK, // or BLADE, METAMASK, HWALLETCONNECT +}); + +const walletData = await Network.connect(connectRequest); +``` + +## Basic Usage + +### Create an Equity Token + +```typescript +import { Equity, CreateEquityRequest } from "@hashgraph/asset-tokenization-sdk"; + +const request = new CreateEquityRequest({ + tokenName: "Acme Corporation Common Stock", + tokenSymbol: "ACME", + tokenDecimals: 0, + tokenTotalSupply: 1000000, + isin: "US9311421039", +}); + +const response = await Equity.create(request); +console.log("Token created:", response.security.tokenId); +``` + +### Transfer Tokens + +```typescript +import { Security, TransferRequest } from "@hashgraph/asset-tokenization-sdk"; + +const transferRequest = new TransferRequest({ + tokenId: "0.0.1234567", + targetId: "0.0.7654321", + amount: 100, +}); + +const success = await Security.transfer(transferRequest); +``` + +### Grant KYC + +```typescript +import { Kyc, GrantKycRequest } from "@hashgraph/asset-tokenization-sdk"; + +const grantKycRequest = new GrantKycRequest({ + tokenId: "0.0.1234567", + targetId: "0.0.7654321", + vcData: "verifiable_credential_data", +}); + +await Kyc.grantKyc(grantKycRequest); +``` + +## Environment Variables + +For web applications: + +```env +# Network endpoints +REACT_APP_MIRROR_NODE=https://testnet.mirrornode.hedera.com/api/v1/ +REACT_APP_RPC_NODE=https://testnet.hashio.io/api + +# Contract addresses (see deployed-addresses.md) +REACT_APP_RPC_RESOLVER=0.0.7707874 +REACT_APP_RPC_FACTORY=0.0.7708432 + +# Token configuration +REACT_APP_EQUITY_CONFIG_ID=0x0000000000000000000000000000000000000000000000000000000000000001 +REACT_APP_EQUITY_CONFIG_VERSION=1 +REACT_APP_BOND_CONFIG_ID=0x0000000000000000000000000000000000000000000000000000000000000002 +REACT_APP_BOND_CONFIG_VERSION=1 +REACT_APP_BOND_FIXED_RATE_CONFIG_ID=0x0000000000000000000000000000000000000000000000000000000000000003 +REACT_APP_BOND_KPI_LINKED_RATE_CONFIG_ID=0x0000000000000000000000000000000000000000000000000000000000000004 +REACT_APP_BOND_SUSTAINABILITY_CONFIG_ID=0x0000000000000000000000000000000000000000000000000000000000000005 +``` + +## Next Steps + +- [SDK Overview](./sdk-overview.md) - Learn about SDK architecture and available operations +- [Deployed Addresses](./contracts/deployed-addresses.md) - Current contract addresses +- [Smart Contracts](./contracts/index.md) - Understanding the contract structure diff --git a/docs/ats/developer-guides/sdk-overview.md b/docs/ats/developer-guides/sdk-overview.md new file mode 100644 index 000000000..6690f37cd --- /dev/null +++ b/docs/ats/developer-guides/sdk-overview.md @@ -0,0 +1,343 @@ +--- +id: sdk-overview +title: SDK Overview +sidebar_position: 2 +--- + +# SDK Overview + +Detailed overview of the Asset Tokenization Studio SDK architecture and available operations. + +## What the SDK Does + +The ATS SDK is a TypeScript library for interacting with Asset Tokenization Studio smart contracts on Hedera. It provides: + +1. **Contract Interaction**: High-level API for all token operations (equity, bonds, transfers, compliance) +2. **Wallet Integration**: Connect to user wallets (HashPack, Blade, MetaMask, WalletConnect) +3. **Transaction Management**: Handle transaction signing, submission, and receipt + +## Supported Wallets + +The SDK integrates with popular Hedera wallets: + +- **HashPack** - Browser extension and mobile wallet +- **Blade** - Browser extension wallet +- **MetaMask** - EVM-compatible wallet via Hedera JSON-RPC Relay +- **WalletConnect** - Mobile wallet integration protocol + +Users sign transactions with their own wallets, maintaining full control of their private keys. + +## Architecture + +The SDK uses a modular architecture organized by functional domains: + +- **Network**: Wallet connection and network configuration +- **Security**: Core token operations (transfer, issue, redeem, freeze) +- **Equity**: Equity-specific operations (dividends, voting, stock splits) +- **Bond**: Bond-specific operations (coupons, maturity) +- **Kyc**: KYC management and verification +- **Role**: Role-based access control +- **Management**: Token configuration updates + +Each module exposes static methods that handle request validation, transaction creation, wallet signing, and response parsing. + +## Available Operations + +### Security Operations (Core Token) + +Operations available for all token types: + +- **`Security.issue()`** - Mint new tokens to an account +- **`Security.transfer()`** - Transfer tokens between accounts +- **`Security.redeem()`** - Burn tokens from an account +- **`Security.getBalanceOf()`** - Query token balance +- **`Security.getInfo()`** - Get token details +- **`Security.pause()`** / **`Security.unpause()`** - Pause/resume token transfers +- **`Security.freezePartialTokens()`** / **`Security.unfreezePartialTokens()`** - Freeze/unfreeze account balances +- **`Security.createHoldByPartition()`** - Create hold on tokens +- **`Security.executeHoldByPartition()`** - Execute held tokens +- **`Security.clearingTransferByPartition()`** - Create clearing transfer + +### Equity Operations + +Operations specific to equity tokens: + +- **`Equity.create()`** - Create equity token +- **`Equity.setDividends()`** - Schedule dividend distribution +- **`Equity.getAllDividends()`** - Query all scheduled dividends +- **`Equity.setVotingRights()`** - Schedule voting event +- **`Equity.setScheduledBalanceAdjustment()`** - Schedule stock split or reverse split + +### Bond Operations + +Operations specific to bond tokens: + +- **`Bond.create()`** - Create bond token (standard bond) +- **`Bond.createFixedRate()`** - Create fixed rate bond +- **`Bond.createKpiLinkedRate()`** - Create KPI linked rate bond +- **`Bond.createSustainabilityPerformanceTargetRate()`** - Create sustainability performance target rate bond +- **`Bond.setCoupon()`** - Schedule coupon payment (with start/end dates) +- **`Bond.getAllCoupons()`** - Query all scheduled coupons +- **`Bond.updateMaturityDate()`** - Update bond maturity date +- **`Bond.fullRedeemAtMaturity()`** - Execute maturity redemption + +**Bond Types:** + +- **Standard**: Basic bond with configurable coupon rates +- **Fixed Rate**: Predetermined fixed interest rate throughout the bond's life +- **KPI Linked Rate**: Interest rate linked to KPI performance metrics +- **Sustainability Performance Target Rate**: Rate tied to ESG/sustainability targets + +### KYC & Compliance + +Operations for managing compliance: + +- **`Kyc.grantKyc()`** - Grant KYC to account +- **`Kyc.revokeKyc()`** - Revoke KYC from account +- **`Kyc.getKycFor()`** - Query KYC status for account +- **`SsiManagement.addIssuer()`** - Add SSI credential issuer +- **`SsiManagement.setRevocationRegistryAddress()`** - Set credential revocation registry + +### Role Management + +Operations for role-based access control: + +- **`Role.grantRole()`** - Grant role to account +- **`Role.revokeRole()`** - Revoke role from account +- **`Role.getRolesFor()`** - Query roles for account + +### Configuration Management + +Operations for updating token configuration: + +- **`Management.updateConfig()`** - Update token configuration parameters + +## Usage Examples + +### Complete Token Creation Flow + +```typescript +import { + Network, + InitializationRequest, + Equity, + CreateEquityRequest, + Security, + IssueRequest, + Kyc, + GrantKycRequest, +} from "@hashgraph/asset-tokenization-sdk"; + +// 1. Initialize SDK +const initRequest = new InitializationRequest({ + network: "testnet", + mirrorNode: { + baseUrl: "https://testnet.mirrornode.hedera.com/api/v1/", + apiKey: "", + headerName: "", + }, + rpcNode: { + baseUrl: "https://testnet.hashio.io/api", + apiKey: "", + headerName: "", + }, + configuration: { + resolverAddress: "0.0.7707874", + factoryAddress: "0.0.7708432", + }, +}); + +await Network.init(initRequest); + +// 2. Create equity token +const createRequest = new CreateEquityRequest({ + tokenName: "Example Corp Stock", + tokenSymbol: "EXPL", + tokenDecimals: 0, + tokenTotalSupply: 1000000, + isin: "US1234567890", +}); + +const { security } = await Equity.create(createRequest); +console.log("Token created:", security.tokenId); + +// 3. Grant KYC to investor +const grantKycRequest = new GrantKycRequest({ + tokenId: security.tokenId, + targetId: "0.0.1234567", + vcData: "credential_data", +}); + +await Kyc.grantKyc(grantKycRequest); + +// 4. Issue tokens to investor +const issueRequest = new IssueRequest({ + tokenId: security.tokenId, + targetId: "0.0.1234567", + amount: 1000, +}); + +await Security.issue(issueRequest); +``` + +### Checking Balance + +```typescript +import { Security, GetAccountBalanceRequest } from "@hashgraph/asset-tokenization-sdk"; + +const balanceRequest = new GetAccountBalanceRequest({ + tokenId: "0.0.1234567", + targetId: "0.0.7654321", +}); + +const balance = await Security.getBalanceOf(balanceRequest); +console.log("Balance:", balance.amount); +``` + +### Getting Token Details + +```typescript +import { Security, GetSecurityDetailsRequest } from "@hashgraph/asset-tokenization-sdk"; + +const request = new GetSecurityDetailsRequest({ + tokenId: "0.0.1234567", +}); + +const tokenDetails = await Security.getInfo(request); +console.log("Token info:", tokenDetails); +``` + +### Scheduling Dividends + +```typescript +import { Equity, SetDividendsRequest } from "@hashgraph/asset-tokenization-sdk"; + +const dividendRequest = new SetDividendsRequest({ + tokenId: "0.0.1234567", + amount: 100000, // Total dividend amount + recordDate: Math.floor(Date.now() / 1000) + 86400, // 1 day from now + paymentDate: Math.floor(Date.now() / 1000) + 172800, // 2 days from now +}); + +await Equity.setDividends(dividendRequest); +``` + +### Setting Coupon Payments + +```typescript +import { Bond, SetCouponRequest } from "@hashgraph/asset-tokenization-sdk"; + +const now = Math.floor(Date.now() / 1000); +const couponRequest = new SetCouponRequest({ + tokenId: "0.0.1234567", + rate: 500, // 5.00% (rate with decimals) + rateDecimals: 2, + startDate: now - 7776000, // 90 days ago (start of accrual period) + endDate: now, // Today (end of accrual period) + recordDate: now + 86400, // Tomorrow (snapshot date) + executionDate: now + 172800, // Day after tomorrow (payment date) +}); + +await Bond.setCoupon(couponRequest); +``` + +> **Note**: The coupon interest is calculated based on the period between `startDate` and `endDate`. The `recordDate` determines which bondholders are eligible, and `executionDate` is when payment is distributed. + +### Creating Holds + +```typescript +import { Security, CreateHoldRequest } from "@hashgraph/asset-tokenization-sdk"; + +const holdRequest = new CreateHoldRequest({ + tokenId: "0.0.1234567", + holdId: "HOLD123", + from: "0.0.1111111", + to: "0.0.2222222", + notary: "0.0.3333333", + amount: 100, + expiration: Math.floor(Date.now() / 1000) + 86400, // 1 day expiration +}); + +await Security.createHoldByPartition(holdRequest); +``` + +## Error Handling + +```typescript +try { + const response = await Security.transfer(transferRequest); + console.log("Success:", response.payload); +} catch (error) { + console.error("Transfer failed:", error); + // Handle specific error cases + if (error.message.includes("KYC")) { + console.error("Recipient needs KYC"); + } +} +``` + +## How It Works + +### Transaction Flow + +``` +User initiates operation + β”‚ + β–Ό +SDK creates request object + β”‚ + β–Ό +SDK validates parameters + β”‚ + β–Ό +SDK creates unsigned transaction + β”‚ + β–Ό +Transaction sent to connected wallet + β”‚ + β–Ό +User approves in wallet + β”‚ + β–Ό +Wallet signs transaction + β”‚ + β–Ό +Signed transaction submitted to Hedera + β”‚ + β–Ό +Transaction receipt returned to SDK + β”‚ + β–Ό +SDK parses response and returns result +``` + +### Contract Resolution + +The SDK uses the **Business Logic Resolver** to dynamically locate contract facets: + +1. SDK determines which facet is needed (e.g., `Equity`, `Bond`, `Kyc`) +2. Queries Resolver contract for current facet address +3. Routes transaction to correct facet version +4. This allows upgrading contracts without SDK changes + +## Best Practices + +1. **Initialize once** - Call `Network.init()` once at application startup +2. **Handle wallet disconnection** - Listen for wallet disconnect events +3. **Validate inputs** - Check token IDs, account IDs, and amounts before calling SDK +4. **Use testnet first** - Test all operations on testnet before mainnet +5. **Check balances** - Verify sufficient HBAR balance for transaction fees +6. **Monitor receipts** - Check transaction receipts for success/failure + +## Additional Resources + +- [Hedera Documentation](https://docs.hedera.com/) - Hedera network documentation +- [HashPack Wallet](https://www.hashpack.app/) - Popular Hedera wallet +- [Blade Wallet](https://bladewallet.io/) - Browser extension wallet + +## Related Guides + +- [SDK Integration](./sdk-integration.md) - Quick integration guide +- [Smart Contracts](./contracts/index.md) - Understanding ATS contracts +- [Deployed Addresses](./contracts/deployed-addresses.md) - Current contract addresses +- [API Reference](../api/sdk-reference.md) - Complete SDK API reference diff --git a/docs/ats/getting-started/full-setup.md b/docs/ats/getting-started/full-setup.md new file mode 100644 index 000000000..de06d365b --- /dev/null +++ b/docs/ats/getting-started/full-setup.md @@ -0,0 +1,233 @@ +--- +id: full-setup +title: Full Development Setup +sidebar_label: Full Setup +sidebar_position: 2 +--- + +# Full Development Setup for ATS + +Complete guide for setting up the Asset Tokenization Studio development environment. + +## Overview + +This guide covers the complete setup process for developers who want to: + +- Build and deploy smart contracts +- Integrate the ATS SDK into their projects +- Contribute to the ATS codebase +- Customize contract functionality + +## Prerequisites + +- **Node.js**: v20.19.4 or newer +- **npm**: v10.9.0 or newer +- **Git**: For cloning the repository +- **Hedera Account**: Testnet or mainnet account with HBAR +- **Code Editor**: VS Code recommended with Solidity extensions + +## Step 1: Clone and Install + +```bash +# Clone the repository +git clone https://github.com/hashgraph/asset-tokenization-studio.git +cd asset-tokenization-studio + +# Install all dependencies +npm ci +``` + +## Step 2: Build All ATS Components + +Build contracts, SDK, and web application in order: + +```bash +# Build everything with one command +npm run ats:build + +# Or build individually +npm run ats:contracts:build +npm run ats:sdk:build +npm run ats:web:build +``` + +## Step 3: Smart Contracts Setup + +### Configure Hardhat + +Navigate to the contracts directory: + +```bash +cd packages/ats/contracts +``` + +Create `.env` file: + +```bash +cp .env.example .env +``` + +Configure environment variables: + +```bash +# Hedera Network +HEDERA_NETWORK=testnet + +# Operator Account (for deploying contracts) +OPERATOR_ID=0.0.12345678 +OPERATOR_KEY=302e020100300506032b657004220420... + +# JSON-RPC Relay +JSON_RPC_RELAY_URL=https://testnet.hashio.io/api +``` + +### Deploy Contracts + +See the [Contract Deployment Guide](../developer-guides/contracts/deployment.md) for detailed instructions on deploying the Business Logic Resolver, Diamond Proxy, and Factory contracts. + +## Step 4: SDK Setup + +The SDK is built as part of step 2. To use it in your own project: + +```bash +npm install @hashgraph/asset-tokenization-contracts @hashgraph/asset-tokenization-sdk +``` + +See the [SDK Integration Guide](../developer-guides/sdk-integration.md) for usage examples. + +## Step 5: Web Application Setup + +Configure the web application: + +```bash +cd apps/ats/web +cp .env.local.example .env.local +``` + +Edit `.env.local` with your configuration: + +```bash +VITE_NETWORK=testnet +VITE_JSON_RPC_RELAY_URL=https://testnet.hashio.io/api +VITE_MIRROR_NODE_URL=https://testnet.mirrornode.hedera.com +VITE_WALLET_CONNECT_PROJECT_ID=your_project_id + +# Your deployed contract IDs +VITE_BUSINESS_LOGIC_RESOLVER_ID=0.0.12345678 +VITE_TREX_FACTORY_ID=0.0.87654321 +``` + +Run the development server: + +```bash +npm run dev +# Or from root: npm run ats:web:dev +``` + +## Step 6: Running Tests + +### Contract Tests + +```bash +cd packages/ats/contracts +npm run test + +# With coverage +npm run test:coverage +``` + +### SDK Tests + +```bash +cd packages/ats/sdk +npm run test +``` + +### Web Application Tests + +```bash +cd apps/ats/web +npm run test +``` + +## Development Workflow + +### Making Changes + +1. **Contracts**: Edit in `packages/ats/contracts/contracts/` +2. **SDK**: Edit in `packages/ats/sdk/src/` +3. **Web App**: Edit in `apps/ats/web/src/` + +### Rebuilding After Changes + +```bash +# If you change contracts +npm run ats:contracts:build + +# If you change SDK +npm run ats:sdk:build + +# Web app rebuilds automatically in dev mode +``` + +### Linting and Formatting + +```bash +# Lint all code +npm run lint + +# Fix linting issues +npm run lint:fix + +# Format code +npm run format +``` + +## Next Steps + +- [Developer Guides](../developer-guides/index.md) - Learn about architecture and patterns +- [Contract Development](../developer-guides/contracts/index.md) - Deploy and customize contracts +- [SDK Integration](../developer-guides/sdk-integration.md) - Integrate ATS into your project +- [API Documentation](../api/index.md) - Technical reference + +## Troubleshooting + +### Build Fails + +```bash +# Clean build artifacts +npm run ats:clean + +# Remove node_modules and reinstall +npm run clean:deps +npm ci + +# Rebuild +npm run ats:build +``` + +### TypeChain Errors + +TypeChain generates TypeScript bindings from Solidity contracts. If you get errors: + +```bash +cd packages/ats/contracts +npm run clean +npm run compile +``` + +### Version Mismatches + +Ensure all packages use compatible versions: + +```bash +# Check package versions +npm list @hashgraph/asset-tokenization-contracts +npm list @hashgraph/asset-tokenization-sdk +``` + +## Need Help? + +- [GitHub Issues](https://github.com/hashgraph/asset-tokenization-studio/issues) +- [Developer Guides](../developer-guides/index.md) +- [Hedera Discord](https://hedera.com/discord) diff --git a/docs/ats/getting-started/index.md b/docs/ats/getting-started/index.md new file mode 100644 index 000000000..c562e5781 --- /dev/null +++ b/docs/ats/getting-started/index.md @@ -0,0 +1,42 @@ +--- +id: index +title: Getting Started with ATS +sidebar_position: 1 +--- + +# Getting Started with Asset Tokenization Studio + +Choose how you want to get started with ATS: + +## Quick Start + +Try the ATS web application to create and manage security tokens. + +**Best for:** End users who want to quickly test the application + +[Try the Web App β†’](./quick-start.md) + +--- + +## Full Development Setup + +Complete setup for developers who want to build, customize, or integrate ATS components. + +**Best for:** Developers who want to: + +- Customize the smart contracts +- Integrate the SDK into their projects +- Contribute to the codebase +- Deploy their own contracts + +[Full Setup Guide β†’](./full-setup.md) + +--- + +## What's Next? + +After setup, explore: + +- [User Guides](../user-guides/index.md) - Learn how to create tokens, manage compliance, and execute corporate actions +- [Developer Guides](../developer-guides/index.md) - Deep dive into contracts, SDK integration, and architecture +- [API Documentation](../api/index.md) - Technical reference for contracts and SDK diff --git a/docs/ats/getting-started/quick-start.md b/docs/ats/getting-started/quick-start.md new file mode 100644 index 000000000..c8bcd821f --- /dev/null +++ b/docs/ats/getting-started/quick-start.md @@ -0,0 +1,267 @@ +--- +id: quick-start +title: Quick Start - Try the Web App +sidebar_label: Quick Start +sidebar_position: 1 +--- + +# Quick Start - Try the Asset Tokenization Studio + +Quick start guide to run the Asset Tokenization Studio web application. + +## Prerequisites + +- **Node.js**: v20.19.4 or newer +- **npm**: v10.9.0 or newer +- **Hedera Account**: Testnet or mainnet account with HBAR +- **Hedera Wallet**: + - MetaMask (connects directly), or + - HashPack, Blade, or other wallets (connect via WalletConnect) + +## Installation + +### 1. Clone the Repository + +```bash +git clone https://github.com/hashgraph/asset-tokenization-studio.git +cd asset-tokenization-studio +``` + +### 2. Setup ATS + +You have two options: + +#### Option A: Quick Setup (Recommended) + +Run this single command from the monorepo root to install dependencies and build everything: + +```bash +npm run ats:setup +``` + +This will automatically install dependencies, build contracts, and build the SDK. + +#### Option B: Manual Setup + +If you prefer to run each step manually: + +```bash +# Install dependencies +npm ci + +# Build contracts and SDK +npm run ats:contracts:build +npm run ats:sdk:build +``` + +## Configuration + +### Create Environment File + +```bash +cd apps/ats/web +cp .env.example .env +``` + +### Configure Environment Variables + +Edit `apps/ats/web/.env`: + +#### Network Configuration + +```bash +# Hedera Network (testnet or mainnet) +VITE_NETWORK=testnet + +# Hedera JSON-RPC Relay +VITE_JSON_RPC_RELAY_URL=https://testnet.hashio.io/api + +# Hedera Mirror Node +VITE_MIRROR_NODE_URL=https://testnet.mirrornode.hedera.com +``` + +#### WalletConnect Configuration (Optional) + +Required only if using HashPack, Blade, or other non-MetaMask wallets: + +```bash +# Get your project ID from https://cloud.walletconnect.com +VITE_WALLET_CONNECT_PROJECT_ID=your_project_id_here +``` + +> **Note**: MetaMask connects directly and does not require WalletConnect configuration. + +#### Contract Addresses + +```bash +# Business Logic Resolver Contract ID +VITE_BUSINESS_LOGIC_RESOLVER_ID=0.0.12345678 + +# T-REX Factory Contract ID +VITE_TREX_FACTORY_ID=0.0.87654321 +``` + +> **Note**: Replace the contract IDs with your deployed contract addresses. See the [Deployed Addresses](../developer-guides/contracts/deployed-addresses.md) for testnet/mainnet addresses, or the [Deployment Guide](../developer-guides/contracts/deployment.md) for instructions on deploying your own contracts. + +#### Optional Configuration + +```bash +# Application Port (default: 5173) +VITE_PORT=5173 + +# Enable Debug Mode +VITE_DEBUG=false +``` + +## Running the Application + +### From Monorepo Root + +```bash +npm run ats:web:dev +``` + +### From Web Directory + +```bash +cd apps/ats/web +npm run dev +``` + +The application will be available at **http://localhost:5173** + +### Application Interface + +Once running, you'll see the ATS web application: + +![ATS Web Application Home](../../images/ats-web.png) + +## First Steps + +### 1. Connect Your Wallet + +- Click "Connect Wallet" in the top right +- Select your preferred wallet: + - **MetaMask**: Click "Connect with MetaMask" (direct connection) + - **Other wallets**: Select HashPack, Blade, or other WalletConnect-compatible wallets +- Approve the connection request + +### 2. Select Your View: Admin or Holder + +ATS provides two operating modes: + +- **Admin View (green)**: For token issuers and administrators to manage tokens, perform corporate actions, and configure settings +- **Holder View (blue)**: For token holders to view their balances and transfer tokens + +You can switch between views from the dashboard by clicking the view selector. + +### 3. Create a Security Token + +- Navigate to "Create Token" +- Choose token type: **Equity** or **Bond** + +![Create Security Token](../../images/ats-web-create-security.png) + +- Fill in token details (name, symbol, supply) +- Configure compliance settings (KYC, transfer restrictions) +- Deploy the token + +### 4. Manage Your Tokens + +Once you've created tokens, you can manage them from the dashboard: + +![ATS Dashboard](../../images/ats-web-dashboard.png) + +#### Selecting a Security Token + +To perform operations on a security token, you must first select it: + +- **From "See All" button**: Click "See All" to view all your tokens, then select the one you want to work with +- **From Favorites panel**: If you've marked a token as favorite, you can quickly select it from the favorites panel on the dashboard + +#### Available Operations + +Once security is selected, you can: + +- View all tokens +- Perform operations +- Manage token holders and permissions + +Available operations appear in tabs. The tabs you see depend on your assigned role: + +![Available Operations Tabs](../../images/ats-web-tabs.png) + +## Troubleshooting + +### Port Already in Use + +```bash +# Kill process on port 5173 +lsof -ti:5173 | xargs kill -9 + +# Or change port in .env +VITE_PORT=5174 +``` + +### Build Errors + +```bash +# Clean and rebuild +npm run ats:clean +npm run ats:build +``` + +### Wallet Connection Issues + +- Ensure your wallet extension is installed and unlocked +- Check that you're connected to the correct network (testnet/mainnet) +- **MetaMask**: Connects directly without WalletConnect +- **HashPack/Blade/Other wallets**: Verify your WalletConnect project ID is configured in `.env` + +### MetaMask: "Selected Account is not a Hedera account" + +If you see this error when connecting MetaMask, you need to add the Hedera network to MetaMask: + +**For Hedera Testnet:** + +1. Open MetaMask +2. Click on the network dropdown (top left) +3. Click "Add Network" β†’ "Add a network manually" +4. Fill in the following details: + - **Network Name**: Hedera Testnet + - **RPC URL**: `https://testnet.hashio.io/api` + - **Chain ID**: `296` + - **Currency Symbol**: HBAR + - **Block Explorer URL**: `https://hashscan.io/testnet` +5. Click "Save" +6. Switch to the Hedera Testnet network +7. Try connecting again + +**For Hedera Mainnet:** + +1. Use the same steps as above with these details: + - **Network Name**: Hedera Mainnet + - **RPC URL**: `https://mainnet.hashio.io/api` + - **Chain ID**: `295` + - **Currency Symbol**: HBAR + - **Block Explorer URL**: `https://hashscan.io/mainnet` + +**Note**: This error can also occur if the mirror node is not correctly configured in your `.env` file. Verify the `REACT_APP_MIRROR_NODE` environment variable is set correctly. + +### Contract Not Found + +- Verify contract IDs in `.env` are correct +- Ensure contracts are deployed to the network you're using +- Check that the Business Logic Resolver and Factory are properly configured + +## Next Steps + +- [User Guides](../user-guides/index.md) - Learn how to create tokens and manage corporate actions +- [Developer Guides](../developer-guides/index.md) - Learn about the architecture and advanced features +- [API Documentation](../api/index.md) - Explore contract APIs + +## Need Help? + +- [GitHub Issues](https://github.com/hashgraph/asset-tokenization-studio/issues) +- [Hedera Discord](https://hedera.com/discord) +- [Documentation](../intro.md) diff --git a/docs/ats/intro.md b/docs/ats/intro.md new file mode 100644 index 000000000..b48ed9a53 --- /dev/null +++ b/docs/ats/intro.md @@ -0,0 +1,285 @@ +--- +id: intro +title: Asset Tokenization Studio +sidebar_position: 0 +slug: / +--- + +# Asset Tokenization Studio (ATS) + +Create and manage tokenized securities (equities and bonds) on the Hedera network with full compliance and regulatory features. + +## Overview + +Asset Tokenization Studio (ATS) is a comprehensive platform for issuing, managing, and trading security tokens. Built on the Hedera network, ATS provides enterprise-grade infrastructure for tokenizing real-world assets while maintaining regulatory compliance. + +### Key Features + +- **Security Token Issuance**: Create equity and bond tokens compliant with ERC-1400 and ERC-3643 (T-REX) standards +- **Compliance Management**: Built-in KYC/AML verification and transfer restrictions +- **Corporate Actions**: Execute dividends, coupon payments, and token lifecycle events +- **Token Lifecycle Management**: Full control over token supply, transfers, freezing, and redemption +- **Diamond Pattern Architecture**: Modular, upgradeable smart contracts using EIP-2535 +- **Multi-Custody Support**: Integration with DFNS, Fireblocks, AWS KMS, and WalletConnect + +## Architecture + +ATS consists of three main components: + +```mermaid +graph TB + subgraph "Web Application" + UI[React dApp] + end + + subgraph "SDK Layer" + Services[SDK Services] + Bus[Command/Query Bus] + Handlers[Domain Handlers] + Adapters[Transaction Adapters] + end + + subgraph "Smart Contracts" + Proxy[Diamond Proxy] + Resolver[Business Logic Resolver] + + subgraph "Facets (Layers)" + L0[Layer 0: Storage] + L1[Layer 1: Core Logic] + L2[Layer 2: Features] + L3[Layer 3: Jurisdiction] + end + end + + subgraph "Hedera Network" + HTS[Hedera Token Service] + Mirror[Mirror Node] + end + + UI --> Services + Services --> Bus + Bus --> Handlers + Handlers --> Adapters + Adapters --> Proxy + Proxy --> Resolver + Resolver --> L0 + L0 --> L1 + L1 --> L2 + L2 --> L3 + L3 --> HTS + Adapters -.Query.-> Mirror + + style UI fill:#e1f5ff + style Services fill:#fff4e1 + style Proxy fill:#ffe1f5 + style HTS fill:#e1ffe1 +``` + +### Smart Contracts + +Solidity smart contracts deployed on Hedera using a **4-layer hierarchical design** with the Diamond Pattern (EIP-2535): + +```mermaid +graph LR + subgraph "Layer 0: Storage" + S1[ERC1400Storage] + S2[KYCStorage] + S3[CapStorage] + S4[NonceStorage] + end + + subgraph "Layer 1: Core Logic" + C1[Common.sol] + C2[ERC1400Base] + C3[ERC3643Base] + C4[Nonces] + end + + subgraph "Layer 2: Features" + F1[Bond Facet] + F2[Equity Facet] + F3[Corporate Actions] + end + + subgraph "Layer 3: Jurisdiction" + J1[BondUSA] + J2[EquityUSA] + end + + S1 --> C1 + S2 --> C2 + S3 --> C3 + S4 --> C4 + C1 --> F1 + C2 --> F2 + C3 --> F3 + F1 --> J1 + F2 --> J2 + + style S1 fill:#e3f2fd + style C1 fill:#fff9c4 + style F1 fill:#f3e5f5 + style J1 fill:#e8f5e9 +``` + +:::info Key Benefits + +- **Modularity**: Each layer has a specific responsibility +- **Upgradeability**: Facets can be upgraded independently +- **Data Isolation**: Layer 0 separates storage from logic +- **Flexibility**: Easy to add new features or jurisdictions + ::: + +[Learn more about contracts β†’](./developer-guides/contracts/index.md) + +### SDK + +TypeScript SDK with hexagonal architecture and CQRS pattern: + +- **Adapters**: Support for multiple transaction signers (RPC, WalletConnect, DFNS, Fireblocks, AWS KMS) +- **Command/Query Bus**: Separation of write and read operations +- **Feature Handlers**: 25+ domain handlers for all token operations +- **Dependency Injection**: Modular, testable architecture using tsyringe + +[Learn more about SDK integration β†’](./developer-guides/sdk-integration.md) + +### Web Application + +React-based dApp for end users: + +- **Token Creation**: Intuitive UI for creating equity and bond tokens +- **Compliance Dashboard**: Manage KYC and transfer restrictions +- **Corporate Actions**: Execute dividends and coupon payments +- **Token Management**: Transfer, freeze, pause, and redeem tokens +- **Wallet Integration**: HashPack, Blade, and WalletConnect support + +![ATS Web Application](../images/ats-web.png) + +[Try the web app β†’](./getting-started/quick-start.md) + +## Use Cases + +
+
+

πŸ“ˆ Equity Tokenization

+

Create and manage company shares on blockchain

+
    +
  • Create shares representing ownership
  • +
  • Configure dividend distributions
  • +
  • Manage voting rights and governance
  • +
  • Enforce transfer restrictions
  • +
+ Learn more +
+ +
+

πŸ’° Bond Tokenization

+

Issue debt securities with automated payments

+
    +
  • Issue bonds with custom terms
  • +
  • Automate coupon payments
  • +
  • Handle maturity redemption
  • +
  • Track bondholder registry
  • +
+ Learn more +
+ +
+

πŸ”’ Regulated Securities

+

Full compliance with global standards

+
    +
  • ERC-3643 (T-REX) compliance
  • +
  • Identity verification and KYC
  • +
  • Transfer rules by jurisdiction
  • +
  • Accredited investor checks
  • +
+ Learn more +
+
+ +## Getting Started + +
+
+

πŸ‘€ For End Users

+

Want to try the ATS web application and create tokens?

+
    +
  • Quick start in minutes
  • +
  • No coding required
  • +
  • Create and manage tokens
  • +
  • Execute corporate actions
  • +
+ Quick Start Guide +
+ +
+

πŸ‘¨β€πŸ’» For Developers

+

Integrate ATS or contribute to the codebase

+
    +
  • Full development environment
  • +
  • SDK integration
  • +
  • Contract deployment
  • +
  • Custom facet development
  • +
+ Full Development Setup +
+
+ +## Documentation + +
+
+

πŸ“š User Guides

+

Step-by-step guides for using the ATS web application

+
    +
  • Creating equity and bond tokens
  • +
  • Managing compliance and KYC
  • +
  • Executing corporate actions
  • +
  • Token lifecycle management
  • +
+ View Guides +
+ +
+

πŸ› οΈ Developer Guides

+

Technical guides for developers

+
    +
  • Smart contract deployment
  • +
  • SDK integration and usage
  • +
  • Architecture patterns
  • +
  • Adding custom facets
  • +
+ View Guides +
+ +
+

πŸ“– API Documentation

+

Technical reference for contracts and SDK

+
    +
  • Smart contract interfaces
  • +
  • SDK classes and methods
  • +
  • Code examples
  • +
  • Usage patterns
  • +
+ View API Docs +
+
+ +## Standards and Compliance + +ATS implements the following token standards: + +- **ERC-1400**: Security Token Standard for regulated securities +- **ERC-3643 (T-REX)**: Token for Regulated EXchanges with on-chain compliance +- **EIP-2535**: Diamond Standard for upgradeable smart contracts + +## Support and Resources + +- [GitHub Repository](https://github.com/hashgraph/asset-tokenization-studio) +- [Report Issues](https://github.com/hashgraph/asset-tokenization-studio/issues) +- [Hedera Documentation](https://docs.hedera.com) +- [Hedera Discord](https://hedera.com/discord) + +## License + +Licensed under Apache License 2.0. See [LICENSE](https://github.com/hashgraph/asset-tokenization-studio/blob/main/LICENSE) for details. diff --git a/docs/ats/user-guides/clearing-operations.md b/docs/ats/user-guides/clearing-operations.md new file mode 100644 index 000000000..334041db2 --- /dev/null +++ b/docs/ats/user-guides/clearing-operations.md @@ -0,0 +1,624 @@ +--- +id: clearing-operations +title: Clearing Operations +sidebar_label: Clearing Operations +sidebar_position: 8 +--- + +# Clearing Operations + +Learn how to manage clearing and settlement operations for securities trading with T+2 or T+3 settlement cycles. + +## Overview + +Clearing operations require validator approval before tokens can be transferred or redeemed. This enforces regulatory compliance and jurisdiction-specific rules. + +### Why Clearing Mode? + +Different jurisdictions have unique regulatory requirements that may not be built into the ATS. Instead of trying to code every possible rule, clearing mode provides a flexible solution: + +**Without Clearing Mode (Standard):** + +- Users freely transfer and redeem tokens +- Only basic restrictions apply (KYC, control lists, pause) + +**With Clearing Mode (Regulated):** + +- Users **submit** transfer/redeem requests on-chain +- **Validators** review and approve/reject each operation +- Only approved operations are executed +- Provides flexibility to enforce any jurisdiction's rules + +### Key Concepts + +**Clearing**: Validator approval required before transfers/redeems execute + +**Validator**: Account with CLEARING_VALIDATOR_ROLE that approves/rejects operations + +- You **cannot** choose which validator reviews your operation +- **Any** account with CLEARING_VALIDATOR_ROLE can approve/reject +- Validators approve or reject the **entire** operation (not partial) + +**How it works:** + +1. You submit operation (transfer, redeem, or hold creation) +2. Tokens are locked from your available balance +3. Validator reviews the operation +4. **If approved**: Operation executes, tokens transfer/redeem +5. **If rejected or expired**: Tokens return to your available balance + +### Clearing vs Hold Operations + +Both lock tokens pending approval, but clearing has key differences: + +| Feature | Clearing Operations | Hold Operations | +| ----------------------- | ----------------------------------------------------------- | ---------------------------------- | +| **Validator selection** | You don't choose - any CLEARING_VALIDATOR_ROLE can validate | You choose the notary/escrow | +| **Destination account** | You specify (required for transfers) | Optional | +| **Validator control** | Can only approve/reject entire operation | Can execute partial amounts | +| **Token modes** | Cleared mode: ONLY clearing operations allowed | Works alongside normal transfers | +| **Use case** | Regulatory compliance, jurisdiction rules | Escrow, marketplace, general holds | + +**Important**: When clearing mode is activated, you **cannot** use normal transfers, redeems, or hold creation. You **must** use the clearing versions. + +### Roles in Clearing + +**CLEARING_ROLE**: + +- Can activate/deactivate clearing mode on a token +- Typically held by token administrators + +**CLEARING_VALIDATOR_ROLE**: + +- Can approve or reject clearing operations +- Typically held by compliance officers, regulators, or automated compliance systems + +## Prerequisites + +### Clearing Mode Must Be Enabled + +Clearing operations **require** that clearing mode is activated on your security token. + +#### Option 1: Enable During Token Creation + +When creating a new equity or bond token: + +1. In **Step 1: General Information** (or Bond Details) +2. Locate **"Digital Security Configuration"** (or Bond Configuration) +3. Enable **"Clearing Mode"** checkbox +4. Complete token creation as normal + +See guides: + +- [Creating Equity Tokens - Step 1](./creating-equity.md#step-1-general-information) +- [Creating Bond Tokens - Step 1](./creating-bond.md#step-1-bond-details) + +#### Option 2: Enable After Token Deployment + +For existing tokens without clearing mode: + +1. Navigate to your **security token** from the dashboard +2. Go to the **"Management"** tab +3. Scroll to **"Danger Zone"** section +4. Locate **"Clearing Mode"** setting +5. Click **"Enable Clearing Mode"** +6. Confirm the action (this is irreversible) +7. Approve the transaction in your wallet + +> **Warning**: Enabling clearing mode is a one-way operation. Once enabled, it cannot be disabled. This ensures settlement process integrity. + +### Additional Prerequisites + +- CLEARING_ROLE to create clearing operations +- CLEARING_VALIDATOR_ROLE to approve/reject operations +- Understanding of your settlement cycle requirements +- Integration with clearing house (if applicable) + +## Accessing Clearing Operations + +1. Navigate to your **security token** from the dashboard +2. Go to the **"Operations"** tab +3. Select **"ERC1400"** (securities are compatible with both ERC-20 and ERC-1400 standards) +4. Select **"Clearing"** from the submenu + +> **Note**: If you don't see "Clearing" option, verify that clearing mode is enabled on your token. + +From this interface, you can: + +- **View clearing operations**: See all pending, approved, and settled operations +- **Create clearing operation**: Initiate a new settlement process +- **Manage operations**: Approve, reject, or execute clearing operations + +## Creating Clearing Operations + +There are three types of clearing operations you can create: + +### Clearing Transfer + +Transfer tokens to another account (requires validator approval). + +**When to use:** Selling, gifting, or transferring tokens to another investor + +**Steps:** + +1. From Clearing Operations, click **"Create Clearing Transfer"** +2. Configure: + - **Destination Account**: **(Required)** Who receives the tokens + - **Amount**: Number of tokens to transfer + - **Expiration Date**: When the operation expires if not approved + - **Partition** (if applicable): Token partition/tranche + - **Data** (optional): Additional information/reference +3. Click **"Submit"** +4. Approve transaction in your wallet + +**What happens:** + +- Tokens are locked from your available balance +- Operation status: "Pending" +- Awaits approval from any CLEARING_VALIDATOR_ROLE account +- If approved: Tokens transfer to destination account +- If rejected or expired: Tokens return to your available balance + +### Clearing Redeem + +Redeem (burn) tokens, typically for cash redemption or bond maturity. + +**When to use:** Redeeming bonds at maturity, buying back shares, exiting positions + +**Steps:** + +1. From Clearing Operations, click **"Create Clearing Redeem"** +2. Configure: + - **Amount**: Number of tokens to redeem + - **Expiration Date**: When the operation expires if not approved + - **Partition** (if applicable): Token partition/tranche + - **Data** (optional): Redemption reason/reference +3. Click **"Submit"** +4. Approve transaction in your wallet + +**What happens:** + +- Tokens are locked from your available balance +- Operation status: "Pending" +- Awaits approval from validator +- If approved: Tokens are burned (removed from circulation) +- If rejected or expired: Tokens return to your available balance + +> **Note**: Destination account is always address 0 (burn address) for redeems. + +### Clearing Hold Creation + +Create a hold that requires validator approval before the hold is established. + +**When to use:** Creating escrow holds in clearing mode, marketplace orders in regulated tokens + +**Steps:** + +1. From Clearing Operations, click **"Create Clearing Hold"** +2. Configure clearing operation: + - **Amount**: Tokens to lock for the hold + - **Expiration Date**: When clearing operation expires + - **Partition** (if applicable): Token partition/tranche + - **Data** (optional): Operation reference +3. Configure the hold that will be created: + - **Hold Escrow Address**: **(Required)** Who manages the hold + - **Hold Destination** (optional): Final recipient if hold is executed + - **Hold Expiration Date**: When the hold expires + - **Hold Data** (optional): Hold reference/instructions +4. Click **"Submit"** +5. Approve transaction in your wallet + +**What happens:** + +- Tokens are locked from your available balance +- Operation status: "Pending" +- Awaits approval from validator +- If approved: Hold is created with specified escrow +- If rejected or expired: Tokens return to your available balance + +> **Note**: This is different from a direct hold. In clearing mode, even hold creation requires validator approval. + +### Common Fields Explained + +**Amount** + +- Must not exceed your available balance +- Respects token decimals +- Once submitted, cannot be changed (only approve/reject) + +**Expiration Date** + +- Must be a future date +- If validator doesn't approve/reject by this date, operation auto-expires +- Tokens automatically return to you after expiration +- Typical values: 24-72 hours for review + +**Partition** (Advanced) + +- For tokens with multiple partitions/tranches +- Leave default if token doesn't use partitions +- Example: "tranche-A", "series-2024" + +**Data** + +- Optional unformatted text +- Use for reference numbers, notes, or instructions +- Example: "Trade ID: 12345", "Redemption for maturity" + +## Viewing Clearing Operations + +### Clearing Operations List + +The Clearing Operations interface displays all operations in a table: + +**Table Columns:** + +- **Operation ID**: Unique identifier +- **From**: Seller account +- **To**: Buyer account +- **Amount**: Tokens to settle +- **Value**: Trade value (if recorded) +- **Status**: Pending, Approved, Rejected, Executed +- **Settlement Date**: Target settlement date +- **Actions**: Approve, Reject, or Execute buttons + +**Filters:** + +- **By Status**: Pending, Approved, Rejected, Executed +- **By Date**: Settlement date range +- **By Account**: Filter by seller or buyer +- **By Operation ID**: Search specific operation + +### Clearing Operation Details + +Click on an operation to view complete details: + +- Operation ID +- Creator account +- From account (seller) +- To account (buyer) +- Amount +- Value +- Current status +- Settlement date +- Instructions +- Creation timestamp +- Approval/rejection timestamp (if applicable) +- Execution timestamp (if applicable) +- Validator who approved/rejected +- Transaction history + +## Managing Clearing Operations + +### Approve Clearing Operation + +Approve the operation, which immediately executes it. + +**Who can approve:** + +- Any account with CLEARING_VALIDATOR_ROLE + +**Prerequisites:** + +- Operation status must be "Pending" +- Operation must not be expired +- All on-chain restrictions must pass (KYC, control lists, pause) + +**Steps:** + +1. Navigate to the clearing operation in the list +2. Review all operation details carefully: + - Operation type (Transfer, Redeem, Hold Creation) + - From account, destination account (if applicable) + - Amount + - Expiration date +3. Verify compliance requirements are met +4. Click **"Approve"** button +5. Confirm approval +6. Approve transaction in your wallet + +**What happens immediately after approval:** + +- **If Transfer**: Tokens transfer from sender to destination account +- **If Redeem**: Tokens are burned (removed from circulation) +- **If Hold Creation**: Hold is created with specified escrow +- Operation status changes to "Executed" +- Cannot be reversed + +> **Important**: Approval executes the operation **immediately**. There is no separate "execute" step. + +### Cancel (Reject) Clearing Operation + +Reject the operation and return tokens to the sender. + +**Who can cancel:** + +- Any account with CLEARING_VALIDATOR_ROLE + +**Prerequisites:** + +- Operation status must be "Pending" + +**Steps:** + +1. Navigate to the clearing operation +2. Review operation details +3. Click **"Cancel"** or **"Reject"** button +4. Provide rejection reason (optional but recommended) +5. Confirm cancellation +6. Approve transaction in your wallet + +**What happens after cancellation:** + +- Tokens are unlocked and returned to sender's available balance +- Operation status changes to "Cancelled" or "Rejected" +- Operation cannot be approved later +- Sender can create a new operation if needed + +**Common cancellation reasons:** + +- Compliance check failure (destination account not KYC'd) +- Jurisdiction restriction violation +- Suspicious activity detected +- Incomplete documentation +- Regulatory hold or investigation + +### Reclaim Expired Operation + +Anyone can reclaim tokens from an expired clearing operation. + +**Who can reclaim:** + +- **Anyone** (no special role required) + +**Prerequisites:** + +- Operation status must be "Pending" +- Current date/time must be **after** expiration date + +**Steps:** + +1. Navigate to an expired operation in the list +2. Click **"Reclaim"** button +3. Confirm reclaim +4. Approve transaction in your wallet + +**What happens after reclaim:** + +- Tokens are unlocked and returned to sender's available balance +- Operation status changes to "Expired" +- Operation cannot be approved or executed + +> **Note**: Reclaim ensures tokens aren't stuck indefinitely if validators don't respond before expiration. + +## Clearing Workflow + +### Standard Clearing Flow + +**Step 1: User Submits Operation** + +- User creates clearing transfer/redeem/hold +- Tokens are locked from available balance +- Operation status: "Pending" +- Visible to all validators + +**Step 2: Validator Review** + +- Any CLEARING_VALIDATOR_ROLE account can review +- Validator checks: + - Compliance requirements met + - Destination account is valid (if transfer) + - No jurisdiction violations + - KYC and control list checks pass + +**Step 3: Validator Decision** + +**If Approved:** + +- Operation executes **immediately** +- Transfer: Tokens move to destination +- Redeem: Tokens are burned +- Hold Creation: Hold is established +- Status: "Executed" + +**If Rejected:** + +- Tokens return to user's available balance +- Status: "Cancelled" or "Rejected" +- User can submit new operation if issues resolved + +**If Expires:** + +- No validator action before expiration date +- Anyone can reclaim tokens +- Tokens return to user +- Status: "Expired" + +## Common Use Cases + +### Jurisdiction-Specific Compliance + +**Scenario**: Token has specific jurisdiction rules that aren't coded in the smart contract + +**Example:** + +- Country X requires manual approval for all token transfers +- Clearing mode is enabled on the token +- Users submit clearing transfer operations +- Compliance officer (with CLEARING_VALIDATOR_ROLE) reviews each transfer +- Approves if compliant, rejects if not +- Flexible enforcement without changing smart contract + +### Regulatory Review Required + +**Scenario**: All transfers require regulatory oversight before execution + +**Example:** + +- Regulated security token with strict compliance +- Enable clearing mode +- Investors submit clearing transfers +- Regulator or compliance team reviews each operation +- Ensures all transfers meet legal requirements before execution + +### Smart Contract Wallets / Custodians + +**Scenario**: Token holder is a smart contract without private keys + +**Benefit:** + +- Smart contracts can't use protected partitions (requires signatures) +- Clearing operations work on-chain without signatures +- Smart contract can create clearing operations +- Validator reviews and approves +- Enables regulated trading for smart contract holders + +### Bond Redemption with Approval + +**Scenario**: Bond maturity requires manual verification before redemption + +**Example:** + +- Bondholder submits clearing redeem operation +- Issuer's treasury team verifies payment is ready +- Approves redemption +- Tokens burned, cash payment processed +- Controlled redemption flow + +## Best Practices + +### For Users Submitting Operations + +**Set Appropriate Expiration:** + +- Give validators enough time to review (24-72 hours typical) +- Too short: Operation may expire before review +- Too long: Tokens locked unnecessarily + +**Include Helpful Data:** + +- Use the "Data" field for reference numbers +- Makes it easier for validators to track and approve +- Example: "Trade ID: 12345", "Redemption: Bond Maturity" + +**Verify Before Submitting:** + +- Double-check destination account address +- Ensure amount is correct +- Confirm compliance requirements are met +- Reduces rejections and delays + +### For Validators (CLEARING_VALIDATOR_ROLE) + +**Review Checklist:** + +- Verify both parties pass KYC +- Check destination account is valid +- Confirm compliance with jurisdiction rules +- Verify no control list violations +- Check operation hasn't expired + +**Document Decisions:** + +- Provide rejection reasons when cancelling +- Helps users understand and fix issues +- Creates audit trail for compliance + +**Timely Response:** + +- Review operations promptly +- Avoid letting operations expire unnecessarily +- Communicate with users about delays + +## Common Issues + +### Cannot Create Clearing Operation + +**Problem**: Clearing option not available or creation fails + +**Solutions:** + +- Verify clearing mode is enabled on the token +- Check you have CLEARING_ROLE +- Ensure seller has sufficient token balance +- Verify both accounts pass KYC and compliance checks + +### Cannot Approve Operation + +**Problem**: Approve button disabled or transaction fails + +**Solutions:** + +- Verify you have CLEARING_VALIDATOR_ROLE +- Check operation status is "Pending" (not already approved/rejected) +- Ensure settlement date has not passed +- Verify wallet is connected + +### Cannot Execute Operation + +**Problem**: Execute button disabled or transaction fails + +**Solutions:** + +- Verify operation status is "Approved" (not Pending or Rejected) +- Check current date is on or after settlement date +- Ensure buyer still passes KYC and compliance checks +- Verify you have CLEARING_ROLE or CLEARING_VALIDATOR_ROLE +- Check wallet has sufficient HBAR for gas + +### Operation Stuck in Pending + +**Problem**: Operation not approved or rejected + +**Solutions:** + +- Contact clearing validator to review +- Check if additional information needed +- Verify validator has CLEARING_VALIDATOR_ROLE +- Check if multi-party approval is required + +### Settlement Date Passed + +**Problem**: Cannot execute operation after settlement date + +**Solutions:** + +- Operations can usually be executed after settlement date +- Check operation was approved before expiration +- Verify buyer still passes compliance +- Contact administrator if operation is locked + +### Tokens Still Locked After Rejection + +**Problem**: Tokens not released after operation cancelled/rejected + +**Solutions:** + +- Verify rejection transaction was confirmed +- Refresh the page and check operation status +- Check if there are multiple operations locking the same tokens +- Contact technical support if tokens remain locked + +### Cannot Reclaim Expired Operation + +**Problem**: Reclaim button disabled on expired operation + +**Solutions:** + +- Verify operation status is "Pending" and past expiration date +- Check you have sufficient HBAR for gas fees +- Ensure wallet is connected +- Try refreshing the page + +## Next Steps + +- [Hold Operations](./hold-operations.md) - Understanding holds used in clearing +- [Creating Equity Tokens](./creating-equity.md) - Enable clearing mode during creation +- [Creating Bond Tokens](./creating-bond.md) - Enable clearing mode during creation +- [Roles and Permissions](./roles-and-permissions.md) - Understanding clearing roles +- [Token Lifecycle](./token-lifecycle.md) - Complete token management + +## Related Resources + +- [ERC-1400 Standard Documentation](https://github.com/ethereum/EIPs/issues/1400) +- [Developer Guide: Clearing Operations](../developer-guides/contracts/index.md) diff --git a/docs/ats/user-guides/corporate-actions.md b/docs/ats/user-guides/corporate-actions.md new file mode 100644 index 000000000..df7ec28f3 --- /dev/null +++ b/docs/ats/user-guides/corporate-actions.md @@ -0,0 +1,214 @@ +--- +id: corporate-actions +title: Corporate Actions +sidebar_label: Corporate Actions +sidebar_position: 4 +--- + +# Corporate Actions + +Learn how to execute dividends, coupon payments, balance adjustments, and voting rights for security tokens. + +## Corporate Actions for Equity Tokens + +### Dividend Distributions + +Distribute earnings to equity token holders. + +#### Accessing Dividends + +1. Navigate to your equity token from the dashboard +2. Select **Admin View (green)** +3. Click on **Corporate Actions** tab +4. Select **Dividends** + +#### Viewing All Dividends + +The dividends table displays: + +| ID | Record Date | Execution Date | Dividend Amount | Snapshot | +| --- | ----------- | -------------- | --------------- | -------- | +| 1 | 2024-12-20 | 2024-12-27 | $5.00 | View | +| 2 | 2025-01-20 | 2025-01-27 | $5.50 | View | + +- **ID**: Unique dividend identifier +- **Record Date**: Snapshot date to determine eligible holders +- **Execution Date**: When dividend payment is distributed +- **Dividend Amount**: Amount per token +- **Snapshot**: View holders eligible for this dividend + +#### Programming a New Dividend + +1. Click **"New Dividend"** or **"Add Dividend"** +2. Fill in the dividend details: + - **Dividend Amount**: Amount per token (e.g., `5.00`) + - **Record Date**: Select date using date picker + - **Execution Date**: Select date using date picker (must be after record date) +3. Click **"Create"** or **"Schedule Dividend"** +4. Approve the transaction in your wallet + +**Important**: The execution date must be after the record date. + +#### Viewing Dividend Details + +Click on a specific dividend to view: + +- Dividend parameters (amount, dates) +- Total dividend amount to distribute +- List of eligible holders and their dividend amounts +- Payment status +- **Dividend Amount Calculation** (numerator, denominator, record date reached status) + +#### Viewing Dividend Holders + +Click **"Snapshot"** or **"View Holders"** to see: + +- Account addresses of eligible holders +- Balance at record date +- Dividend amount each holder will receive +- Payment status +- **Token balance** at the time of the snapshot + +### Balance Adjustments (Stock Splits) + +Adjust token balances for all holders (e.g., 2-for-1 stock split or 1-for-2 reverse split). + +#### Accessing Balance Adjustments + +1. Navigate to your equity token +2. Select **Admin View (green)** +3. Go to **Corporate Actions** β†’ **Balance Adjustments** + +#### Programming a Balance Adjustment + +1. Click **"New Balance Adjustment"** +2. Fill in the details: + - **Execution Date**: Select date using date picker + - **Factor**: Adjustment multiplier + - For 2:1 split, enter `2` + - For 1:2 reverse split, enter `0.5` +3. Click **"Schedule"** +4. Approve the transaction + +**Example**: If a holder has 100 tokens and you apply a factor of `2`, they will have 200 tokens after execution. + +### Voting Rights + +Program voting events for equity holders. + +#### Accessing Voting Rights + +1. Navigate to your equity token +2. Select **Admin View (green)** +3. Go to **Corporate Actions** β†’ **Voting Rights** + +#### Creating a Voting Event + +1. Click **"New Voting Event"** +2. Fill in the details: + - **Name**: Voting event name (e.g., "Annual Shareholder Meeting 2025") + - **Execution Date**: Select voting date using date picker +3. Click **"Create"** +4. Approve the transaction + +#### Viewing Voting Events + +The voting rights table displays scheduled voting events with their execution dates. + +--- + +## Executing Coupon Payments + +For bond tokens, execute periodic interest payments to bondholders. + +### Accessing Coupons + +1. Navigate to your bond token from the dashboard +2. Select **Admin View (green)** +3. Click on **Corporate Actions** tab +4. Select **Coupons** + +### Viewing All Coupons + +The coupons table displays: + +| ID | Record Date | Execution Date | Start Date | End Date | Coupon Rate | Snapshot | +| --- | ----------- | -------------- | ---------- | ---------- | ----------- | -------- | +| 1 | 2024-12-15 | 2024-12-22 | 2024-09-15 | 2024-12-15 | 5.0% | View | +| 2 | 2025-03-15 | 2025-03-22 | 2024-12-15 | 2025-03-15 | 5.0% | View | + +- **ID**: Unique coupon identifier +- **Record Date**: Snapshot date for eligible bondholders +- **Execution Date**: Payment distribution date +- **Start Date**: Beginning of the coupon accrual period +- **End Date**: End of the coupon accrual period +- **Coupon Rate**: Interest rate for the period +- **Snapshot**: View eligible bondholders + +> **Note**: The coupon period is calculated as the difference between start and end dates. This allows precise interest calculations based on actual accrual periods. + +### Programming a New Coupon + +1. Click **"New Coupon"** or **"Add Coupon"** +2. Fill in the coupon details: + - **Coupon Rate**: Interest rate (e.g., `5.0` for 5%) + - **Start Date**: Beginning of the coupon accrual period + - **End Date**: End of the coupon accrual period + - **Record Date**: Snapshot date to determine eligible bondholders (typically same as end date) + - **Execution Date**: When coupon payment is distributed (must be after record date) +3. Click **"Create"** or **"Schedule Coupon"** +4. Approve the transaction in your wallet + +**Important**: + +- The start date must be before the end date +- The execution date must be after the record date +- Coupon interest is calculated based on the period between start and end dates + +### Viewing Coupon Details + +Click on a specific coupon to view: + +- Coupon parameters (rate, start date, end date, record date, execution date) +- Coupon accrual period (calculated from start and end dates) +- Total coupon amount to distribute +- List of eligible bondholders and their coupon amounts +- Payment status +- **Coupon Amount Calculation** (numerator, denominator, record date reached status) + +### Viewing Coupon Holders + +Click **"Snapshot"** or **"View Holders"** to see: + +- Account addresses of eligible bondholders +- Bond balance at record date +- Coupon amount each holder will receive +- Payment status +- **Token balance and decimals** at the time of the snapshot + +--- + +## Payment Distribution + +Corporate action payments can be distributed using: + +- **Direct Transfer**: For small holder counts (< 100) +- **Mass Payout Integration**: For large holder counts (recommended for > 100 holders) +- **Batch Processing**: Automatic chunking for large distributions + +For large-scale distributions, consider using the [Mass Payout system](/mass-payout/). + +## Permissions Required + +To execute corporate actions, you need: + +- **CORPORATE_ACTION_ROLE** or **ISSUER_ROLE** for scheduling dividends, coupons, splits, and voting +- **PAYMENT_PROCESSOR_ROLE** for executing payments (if applicable) + +See [Roles and Permissions](./roles-and-permissions.md) for more details. + +## Next Steps + +- [Mass Payout Documentation](/mass-payout/) - Large-scale payment distribution +- [Token Operations](./token-operations.md) - Other token operations +- [Roles and Permissions](./roles-and-permissions.md) - Managing access control diff --git a/docs/ats/user-guides/creating-bond.md b/docs/ats/user-guides/creating-bond.md new file mode 100644 index 000000000..fb9a071a1 --- /dev/null +++ b/docs/ats/user-guides/creating-bond.md @@ -0,0 +1,570 @@ +--- +id: creating-bond +title: Creating Bond Tokens +sidebar_label: Creating Bonds +sidebar_position: 2 +--- + +# Creating Bond Tokens + +Learn how to create bond tokens representing debt securities with maturity dates and coupon payments using the ATS web application. + +## Overview + +Bond tokens represent debt securities issued by companies or organizations. They include features like: + +- Fixed maturity date for principal redemption +- Periodic coupon (interest) payments to bondholders +- Transfer restrictions and compliance rules +- Configurable payment schedules and terms + +### Bond Types + +ATS supports four types of bonds at the smart contract level, each designed for different use cases: + +| Bond Type | Description | Use Case | +| ------------------------------------------ | --------------------------------------------------- | --------------------------------------------- | +| **Standard** | Basic bond with configurable coupon rates | Traditional corporate bonds, government bonds | +| **Fixed Rate** | Bond with a predetermined fixed interest rate | Predictable income securities, savings bonds | +| **KPI Linked Rate** | Interest rate linked to Key Performance Indicators | Performance-based bonds, ESG-linked debt | +| **Sustainability Performance Target Rate** | Rate tied to sustainability/ESG performance targets | Green bonds, sustainability-linked bonds | + +> **Note**: The web application creates standard bonds by default. For specialized bond types (Fixed Rate, KPI Linked, Sustainability Performance Target), use the SDK or contract deployment scripts directly. See the [Developer Guide](../developer-guides/contracts/index.md) for details. + +## Prerequisites + +- ATS web application running and accessible +- Hedera wallet connected (HashPack, Blade, or MetaMask) +- Sufficient HBAR for transaction fees +- Business Logic Resolver and Factory contracts deployed + +## Getting Started + +1. Open the ATS web application +2. Click "Create Token" in the navigation menu +3. Select "Bond" as the token type + +![Create Security Token](../../images/ats-web-create-security.png) + +## Step 1: Bond Details + +### General Information + +**Name**: The full name of your bond security + +- Example: "Acme Corporation 5-Year Bond" +- Include issuer name and key terms + +**Symbol**: A short ticker symbol (2-8 characters) + +- Example: "ACME-BOND" or "ACME5Y" +- Recommended format: `[ISSUER]-[TYPE][TERM]` + +**Decimals**: Number of decimal places for bond units + +- Typical value: 6 (allows fractional bonds) +- Use 0 for whole bonds only +- Use higher values (6-8) for institutional-grade bonds + +**ISIN**: International Securities Identification Number + +- Format: 2-letter country code + 9 alphanumeric characters + 1 check digit +- Example: `US9311421039` +- Must follow the ISO 6166 standard format +- Required for regulatory compliance and international trading + +### Bond Permissions + +Configure administrative permissions for the bond token: + +**Controllable** + +- **Purpose**: Enable forced transfers and balance adjustments +- **When enabled**: Grants CONTROLLER_ROLE the ability to: + - Force transfer bonds between accounts (e.g., court orders) + - Adjust balances for regulatory compliance + - Execute restructuring operations +- **Use cases**: Debt restructuring, regulatory requirements, lost key recovery +- **Recommendation**: Enable only if required by regulation or corporate policies + +**Blocklist (Blacklist)** + +- **Purpose**: Block specific addresses from holding bonds +- **How it works**: Addresses on the list cannot receive or hold bond tokens +- **Use cases**: Sanctioned entities, defaulted bondholders, regulatory blacklists +- **When to use**: When you want to block specific addresses but allow everyone else + +**Approval list (Whitelist)** + +- **Purpose**: Only approved addresses can hold bonds +- **How it works**: Only addresses on the list can receive bond tokens +- **Use cases**: Qualified institutional buyers (QIBs), accredited investors only +- **When to use**: When you want to restrict bond ownership to pre-approved addresses only + +> **Important**: You must choose **either** blocklist **or** approval list (whitelist), not both. They are mutually exclusive options. + +### Bond Configuration + +**Clearing Mode Enabled** + +- **Purpose**: Require validator approval for all transfers and redeems +- **What it does**: + - Users must submit transfer/redeem requests + - Validators (CLEARING_VALIDATOR_ROLE) must approve before execution + - Enables regulatory oversight of all token movements +- **When to enable**: + - Regulatory compliance requires approval workflow + - Jurisdiction-specific rules need validation + - Manual review required for transfers +- **Roles activated**: CLEARING_ROLE, CLEARING_VALIDATOR_ROLE + +> **Learn more**: See [Clearing Operations](./clearing-operations.md) for complete guide on using clearing mode. + +**Internal KYC Activated** + +- **Purpose**: Enable/disable internal KYC verification +- **Flag**: Controls whether token uses its own KYC registry +- **When enabled**: Token checks internal KYC registry before allowing transfers +- **When disabled**: Only external KYC lists and SSI are checked +- **Use cases**: + - Enable: Use token's own bondholder verification database + - Disable: Rely entirely on external KYC providers or SSI + +> **Tip**: You can use Internal KYC + External KYC Lists + SSI simultaneously. Any method granting KYC allows the transfer. + +## Step 2: Bond Configuration + +### Bond Terms + +**Currency** + +- **Value**: USD (US Dollar) +- **Purpose**: Currency for bond denomination and payments +- **Note**: Currently fixed to USD, cannot be changed. All coupon payments and redemptions use USD + +**Number of Bond Units** + +- **Definition**: Total number of bond units to issue +- **Example**: 10,000 bonds +- **Considerations**: + - Smaller issuances: 100-1,000 bonds + - Medium issuances: 1,000-100,000 bonds + - Large issuances: 100,000+ bonds +- **Note**: With decimals enabled, each unit can be fractional + +**Nominal Value (Face Value)** + +- **Definition**: Par value of each bond unit +- **Example**: $1,000 per bond (standard corporate bond) +- **Common values**: + - Corporate bonds: $1,000 or $5,000 + - Government bonds: $1,000, $5,000, $10,000 + - Institutional bonds: $100,000 or $1,000,000 +- **Use**: Determines principal amount paid at maturity + +**Total Value** + +- **Calculation**: Automatically computed +- **Formula**: Number of Bond Units Γ— Nominal Value +- **Example**: 10,000 bonds Γ— $1,000 = $10,000,000 total value +- **Note**: This is the total principal amount to be raised + +### Bond Dates + +**Starting Date (Mint Date)** + +- **Definition**: Date when bonds are issued and start accruing interest +- **Also called**: Issue date, settlement date +- **Considerations**: + - Must be present or future date + - First coupon period starts from this date +- **Use**: Determines when bondholders can start trading + +**Maturity Date** + +- **Definition**: Date when bond principal is redeemed +- **Requirements**: Must be after starting date +- **Considerations**: + - Short-term: 1-3 years + - Medium-term: 3-10 years + - Long-term: 10+ years +- **Use**: Determines when ISSUER must repay principal to bondholders + +> **Important**: Coupon payment schedule is configured separately through the Corporate Actions interface after deployment. + +## Step 3: Proceed Recipients + +Proceed recipients are addresses that receive funds when bonds are issued or sold. This is optional but commonly used for treasury management. + +### What are Proceed Recipients? + +- **Purpose**: Automatically distribute bond proceeds to designated addresses +- **Use cases**: + - Treasury wallet receives proceeds + - Multi-signature wallets for corporate governance + - Split proceeds between operating and reserve accounts + - Escrow arrangements + +### Adding Recipients + +**Address** + +- **Format**: Hedera Account ID (`0.0.xxxxxxx`) or EVM address (`0x...`) +- **Example**: `0.0.1234567` or `0x742d35Cc6634C0532925a3b844Bc454e4438f44e` +- **Validation**: Must be valid Hedera account or EVM address + +**Data** + +- **Purpose**: Optional field for notes or reference information +- **Format**: Free text field +- **Example**: `Treasury wallet`, `Operating account`, `Reserve fund` +- **Note**: This is for informational purposes only + +### Proceed Recipients Table + +After adding recipients, they appear in a table: + +| Address | Data | Actions | +| ----------- | ----------------- | ------- | +| 0.0.1234567 | Treasury wallet | Remove | +| 0.0.7654321 | Operating account | Remove | + +**Actions Available:** + +- **Remove**: Delete a recipient from the list + +> **Tip**: You can add multiple recipients to receive bond proceeds. + +## Step 4: ERC-3643 Integration (Optional) + +For advanced compliance features, integrate ERC-3643 (T-REX) contracts. This step is **optional** but provides enhanced regulatory compliance capabilities for bond offerings. + +> **Note**: Bond tokens created by ATS are **already compatible** with ERC-3643 operations by default. ATS implements **partial ERC-3643 (T-REX) compliance** as part of its core architecture. This integration step is only required if you need **full ERC-3643 standard compatibility** with advanced T-REX features like custom Compliance Modules and Identity Registries. See [Developer Guide: ATS Contracts](../developer-guides/contracts/index.md) for architecture details. + +### Compliance Module + +**Purpose**: Enforces transfer rules and regulatory requirements + +- **What it does**: Validates all bond transfers against compliance rules +- **Use cases**: + - Complex regulatory requirements for cross-border bonds + - Multi-jurisdiction debt offerings + - Institutional-grade compliance +- **Configuration**: Requires deploying a Compliance Module contract + +### Identity Registry + +**Purpose**: Manages verified bondholder identities + +- **What it does**: Maintains on-chain registry of verified bondholder identities +- **Use cases**: + - Enhanced KYC management for bondholders + - Investor identity verification + - Regulatory reporting requirements +- **Configuration**: Requires deploying an Identity Registry contract + +> **Important**: Both Compliance Module and Identity Registry must be deployed before token creation. See [Deployment Guide](../developer-guides/contracts/deployment.md) for instructions. + +### When to Use ERC-3643 + +Use this step only if you need **full compatibility with the [ERC-3643 standard](https://www.erc3643.org/)**: + +- **Standard compliance**: Need to ensure full compatibility with ERC-3643 (T-REX) specification +- **Interoperability**: Bond token must work with other ERC-3643 compliant systems +- **Third-party integrations**: Integration with platforms that require ERC-3643 compliance +- **Ecosystem compatibility**: Participating in ERC-3643 token ecosystems + +### When to Skip + +- **Most use cases**: ATS already provides partial ERC-3643 compliance for typical bond token operations +- **Custom compliance**: If you just need complex compliance, use ATS's built-in features (Internal KYC, External KYC Lists, Control Lists, Clearing Mode, etc.) +- **Testing/Development**: Prototyping bond structures without standard requirements + +## Step 5: External Lists Configuration + +In this step, you can link previously created external lists to your bond token. These are optional but recommended for multi-token issuers. + +### External Pause Lists + +External pause contracts allow coordinated pausing across multiple bonds: + +- **What are they**: On-chain smart contracts that can pause all linked bonds +- **Where to configure**: Sidebar menu β†’ External Pause +- **Use cases**: Platform-wide emergency stops, coordinated system upgrades, crisis management +- **How it works**: If any linked pause contract returns `isPaused() = true`, bond is paused +- **Link**: [Managing External Pause Lists](./managing-external-pause-lists.md) + +**How to link:** + +1. **Select from dropdown**: All your created pause contracts appear +2. **Add to token**: Click to link pause mechanism +3. **View linked**: See all currently linked pause contracts +4. **Remove**: Unlink if no longer needed + +### External Control Lists + +External control lists are reusable whitelists/blacklists shared across multiple bonds: + +- **What are they**: On-chain smart contracts managing approved/blocked addresses +- **Where to configure**: Sidebar menu β†’ Control Lists +- **Use cases**: Shared regulatory blacklists, multi-bond whitelists for institutional investors +- **Link**: [Managing External Control Lists](./managing-external-control-lists.md) + +**How to link:** + +1. **Select from dropdown**: All your created control lists appear +2. **Add to token**: Click to link whitelist or blacklist +3. **View linked**: See all currently linked control lists +4. **Remove**: Unlink if no longer needed + +### External KYC Lists + +External KYC lists verify bondholder identity across multiple bonds: + +- **What are they**: On-chain smart contracts managing KYC-verified investors +- **Where to configure**: Sidebar menu β†’ External KYC +- **Use cases**: Shared bondholder verification, third-party KYC providers, institutional investor registries +- **Link**: [Managing External KYC Lists](./managing-external-kyc-lists.md) + +**How to link:** + +1. **Select from dropdown**: All your created KYC lists appear +2. **Add to token**: Click to link KYC verification list +3. **View linked**: See all currently linked KYC lists +4. **Remove**: Unlink if no longer needed + +> **Tip**: You can create external lists from the sidebar before or after bond creation. + +## Step 6: Regulation + +> **Important**: Consult your legal and financial advisor for regulations applicable to your bond offering. + +### Jurisdiction + +The primary jurisdiction for your bond offering: + +- **United States** + +### Select Regulation + +Choose the regulatory framework for your bond offering: + +#### Regulation S + +**Purpose**: Debt offerings outside the United States to non-U.S. persons + +**Restrictions and Rules**: + +| Rule | Details | +| -------------------------------- | ------------------------------------------------------- | +| **Deal size** | Can raise unlimited capital | +| **Accredited investors** | Accreditation required | +| **Max non-accredited investors** | Unlimited | +| **Manual investor verification** | Verification of investors' financial documents required | +| **International investors** | Allowed | +| **Resale hold period** | Not applicable | + +**Use cases**: + +- International bond offerings +- Eurobonds and global bonds +- Non-U.S. bondholder base +- Cross-border debt financing + +#### Regulation D 506(b) + +**Purpose**: Private debt placement in the United States + +**Restrictions and Rules**: + +| Rule | Details | +| -------------------------------- | ------------------------------------------------------- | +| **Deal size** | Can raise unlimited capital | +| **Accredited investors** | Accreditation required | +| **Max non-accredited investors** | 35 maximum | +| **Manual investor verification** | Verification of investors' financial documents required | +| **International investors** | Not allowed | +| **Resale hold period** | Applicable from 6 months to 1 year | + +**Use cases**: + +- U.S.-based private bond placements +- Qualified institutional buyers (QIBs) +- Accredited investor bond offerings +- Limited retail bondholder participation + +> **Warning**: Read the restrictions carefully. These details cannot be altered once the bond is deployed. + +### Geographic Block List + +**Purpose**: Specify countries whose residents cannot purchase bonds + +**How it works**: + +- Based on selected regulation +- Can add additional blocked countries beyond regulatory requirements +- Enforced via compliance checks during bond transfers + +**Common restrictions**: + +- OFAC sanctioned countries +- High-risk jurisdictions for money laundering +- Countries with conflicting securities regulations + +**Example**: Block sanctioned countries or jurisdictions with capital controls + +## Step 7: Review and Deploy + +### Review Configuration + +Before deploying, verify all bond configuration details: + +1. **Bond details**: Name, symbol, decimals, ISIN +2. **Permissions**: Controllable, blocklist, approval list settings +3. **Configuration**: Clearing mode, internal KYC status +4. **Bond terms**: Currency, bond units, nominal value, total value +5. **Bond dates**: Starting date (mint date), maturity date +6. **Proceed recipients**: All recipients added with correct percentages (totaling 100%) +7. **External lists**: Correct lists linked (if any) +8. **ERC-3643**: Compliance Module and Identity Registry addresses (if used) +9. **Regulation**: Proper regulation selected, geographic block list configured + +### Deployment Cost + +- View estimated HBAR cost for deployment +- Includes: Factory contract call, proxy deployment, initial configuration +- Typical cost: 50-200 HBAR (varies by network congestion) +- **Note**: Bond deployment may cost slightly more than equity due to additional bond-specific features + +### Deploy Bond + +1. Click **"Deploy Bond"** button +2. Approve transaction in your wallet +3. Wait for confirmation (typically 3-5 seconds on Hedera) +4. Contract address will be displayed on success + +### Verify Deployment + +After successful deployment: + +**Bond Information** + +- **Contract Address**: EVM address of deployed bond (0x...) +- **Contract ID**: Hedera contract ID (0.0.xxxxx) +- **Factory**: Factory contract that deployed the bond +- **Deployment Time**: Timestamp of deployment + +**View in Dashboard** + +1. Bond appears in your **"My Tokens"** list +2. Click to view bond details +3. Available tabs (based on your role): + - **Overview**: Bond info, supply, bondholders, maturity countdown + - **Holders**: List of bondholders and balances + - **Transfers**: Transfer history + - **Corporate Actions**: Coupon payment management, maturity redemption + - **Compliance**: KYC, control lists + - **Settings**: Bond configuration + +![ATS Dashboard](../../images/ats-web-tabs.png) + +> **Note**: Available tabs depend on your assigned roles. See [Roles and Permissions](./roles-and-permissions.md). + +## Managing Your Bond Token + +After creation, you can manage your bond from the dashboard. Select **Admin View (green)** to access administrative operations or **Holder View (blue)** to view balances and transfer tokens. + +Common bond lifecycle management operations: + +### Distribute Bonds + +- **How**: Transfer tab or issue function +- **Requirements**: ISSUER_ROLE +- **Recipients**: Must pass KYC and control list checks +- **Use cases**: Initial bond distribution to underwriters, direct sales to investors + +### Execute Coupon Payments + +- **How**: Corporate Actions tab β†’ Create Coupon Payment +- **Requirements**: CORPORATE_ACTION_ROLE +- **Process**: + 1. Create snapshot of bondholders at record date + 2. Specify coupon amount (interest payment) + 3. Execute distribution to all bondholders +- **Frequency**: Based on bond terms (monthly, quarterly, semi-annually, annually) + +### Handle Maturity Redemption + +- **How**: Corporate Actions tab β†’ Maturity Redemption +- **Requirements**: CORPORATE_ACTION_ROLE +- **Process**: + 1. At maturity date, create final snapshot + 2. Calculate principal + final coupon + 3. Execute redemption to all bondholders + 4. Bond tokens are burned upon redemption + +### Manage Compliance + +- **KYC**: Grant/revoke KYC status for bondholders +- **Control Lists**: Add/remove addresses from whitelist/blacklist +- **Freeze**: Freeze specific bondholder accounts if needed (regulatory requirements) + +### Pause Transfers + +- **How**: Settings β†’ Emergency pause +- **Requirements**: PAUSER_ROLE +- **Effect**: All bond transfers blocked until unpause +- **Use cases**: Security incidents, regulatory investigations, system maintenance + +## Common Issues + +### Transaction Failed + +- **Insufficient HBAR**: Ensure wallet has enough HBAR for gas fees (check estimated cost) +- **Invalid Configuration**: Verify all required fields are filled correctly +- **Contract Not Found**: Check Factory contract address in your .env configuration +- **Invalid Dates**: Ensure maturity date is after starting date + +### Proceed Recipients Errors + +- **Percentages don't add to 100%**: Verify all recipient allocations sum to 100% +- **Invalid Address**: Check that addresses are valid Hedera IDs or EVM addresses +- **Duplicate Recipients**: Remove duplicate addresses before deployment + +### KYC Errors + +- **KYC check fails**: Verify bondholder is KYC-verified (internal, external, or SSI) +- **External list not found**: Ensure external KYC list address is correct +- **SSI not configured**: If using SSI, verify revocation registry and issuers are set + +### Transfer Restrictions + +- **Blocklist blocking**: Check if recipient is on blocklist (internal or external) +- **Approval list missing**: If approval list enabled, ensure recipient is approved +- **Regulation block**: Verify recipient's jurisdiction is not blocked + +### Control List Issues + +- **Internal vs External**: Remember both internal and external lists are checked +- **Wrong list type**: Verify you're using control lists (not KYC lists) for transfer control + +### Bond Lifecycle Issues + +- **Coupon payment failed**: Ensure sufficient funds in payment token contract +- **Maturity date misconfigured**: Verify maturity date is set correctly during creation +- **Missing CORPORATE_ACTION_ROLE**: Grant role to accounts responsible for coupon payments + +## Next Steps + +- [Token Operations](./token-operations.md) - Learn about all available operations for your bond +- [Corporate Actions](./corporate-actions.md) - Execute coupon payments and maturity redemption +- [Managing KYC & Compliance](./managing-compliance.md) - Set up bondholder verification +- [Roles and Permissions](./roles-and-permissions.md) - Grant roles to team members +- [SSI Integration](./ssi-integration.md) - Decentralized identity verification with Terminal 3 +- [Managing External KYC Lists](./managing-external-kyc-lists.md) - Configure external verification +- [Managing External Control Lists](./managing-external-control-lists.md) - Configure transfer restrictions + +## Related Resources + +- [Developer Guide: ATS Contracts](../developer-guides/contracts/index.md) +- [API Documentation](../api/index.md) diff --git a/docs/ats/user-guides/creating-equity.md b/docs/ats/user-guides/creating-equity.md new file mode 100644 index 000000000..b41abb4b4 --- /dev/null +++ b/docs/ats/user-guides/creating-equity.md @@ -0,0 +1,521 @@ +--- +id: creating-equity +title: Creating Equity Tokens +sidebar_label: Creating Equity +sidebar_position: 1 +--- + +# Creating Equity Tokens + +Learn how to create equity tokens representing company shares using the ATS web application. + +## Overview + +Equity tokens represent ownership shares in a company. They can include features like: + +- Dividend distributions to shareholders +- Voting rights for governance +- Transfer restrictions and compliance rules +- Lock-up periods for insider shares + +## Prerequisites + +- ATS web application running and accessible +- Hedera wallet connected (HashPack, Blade, or MetaMask) +- Sufficient HBAR for transaction fees +- Business Logic Resolver and Factory contracts deployed + +## Getting Started + +1. Open the ATS web application +2. Click "Create Token" in the navigation menu +3. Select "Equity" as the token type + +![Create Security Token](../../images/ats-web-create-security.png) + +## Step 1: General Information + +### Token Details + +**Token Name**: The full name of your security + +- Example: "Acme Corporation Common Stock" + +**Token Symbol**: A short ticker symbol (2-5 characters) + +- Example: "ACME" + +**Total Supply**: The number of shares to issue + +- Example: 1,000,000 shares + +**Decimals**: Number of decimal places (usually 0 for equity) + +- Recommended: 0 (whole shares only) + +**ISIN**: International Securities Identification Number + +- Format: 2-letter country code + 9 alphanumeric characters + 1 check digit +- Example: `US9311421039` +- Must follow the ISO 6166 standard format + +### Digital Security Permissions + +Configure administrative permissions for the token: + +**Controllable** + +- **Purpose**: Enable forced transfers and balance adjustments +- **When enabled**: Grants CONTROLLER_ROLE the ability to: + - Force transfer tokens between accounts + - Adjust balances for regulatory compliance + - Execute court-ordered transfers +- **Use cases**: Regulatory requirements, lost key recovery, inheritance +- **Recommendation**: Enable only if required by regulation + +**Blocked Accounts List (Blacklist)** + +- **Purpose**: Block specific addresses from holding tokens +- **How it works**: Addresses on the list cannot receive or hold tokens +- **Use cases**: Sanctioned addresses, regulatory blacklists +- **When to use**: When you want to block specific addresses but allow everyone else + +**Allowed Accounts List (Whitelist)** + +- **Purpose**: Only approved addresses can hold tokens +- **How it works**: Only addresses on the list can receive tokens +- **Use cases**: Accredited investor-only offerings, private placements +- **When to use**: When you want to restrict token ownership to pre-approved addresses only + +> **Important**: You must choose **either** blacklist **or** whitelist, not both. They are mutually exclusive options. + +### Digital Security Configuration + +**Clearing Mode** + +- **Purpose**: Require validator approval for all transfers and redeems +- **What it does**: + - Users must submit transfer/redeem requests + - Validators (CLEARING_VALIDATOR_ROLE) must approve before execution + - Enables regulatory oversight of all token movements +- **When to enable**: + - Regulatory compliance requires approval workflow + - Jurisdiction-specific rules need validation + - Manual review required for transfers +- **Roles activated**: CLEARING_ROLE, CLEARING_VALIDATOR_ROLE + +> **Learn more**: See [Clearing Operations](./clearing-operations.md) for complete guide on using clearing mode. + +**Internal KYC** + +- **Purpose**: Enable/disable internal KYC verification +- **Flag**: `internalKYCActivated` +- **When enabled**: Token checks internal KYC registry for transfers +- **When disabled**: Only external KYC lists and SSI are checked +- **Use cases**: + - Enable: Use token's own KYC database + - Disable: Rely entirely on external KYC providers + +> **Tip**: You can use Internal KYC + External KYC Lists + SSI simultaneously. Any method granting KYC allows the transfer. + +## Step 2: Equity-Specific Details + +### Financial Information + +**Nominal Value (Par Value)** + +- **Definition**: Face value of each share +- **Example**: $1.00 per share +- **Use**: Accounting and legal compliance +- **Note**: Can differ from market price + +**Currency** + +- **Value**: USD (US Dollar) +- **Purpose**: Currency for nominal value and dividends +- **Note**: Currently fixed to USD, cannot be changed + +**Number of Shares** + +- **Definition**: Same as Total Supply (from Step 1) +- **Example**: 1,000,000 shares +- **Calculation**: Number of Shares Γ— Nominal Value = Total Value + +**Total Value** + +- **Calculation**: Automatically computed +- **Formula**: Number of Shares Γ— Nominal Value +- **Example**: 1,000,000 shares Γ— $1.00 = $1,000,000 total value + +### Rights and Privileges + +Configure shareholder rights (metadata stored on-chain): + +**Voting Right** + +- **Purpose**: Right to vote on corporate decisions +- **When true**: Shareholders can participate in governance votes +- **Use cases**: Board elections, major transactions + +**Information Right** + +- **Purpose**: Right to receive financial information +- **When true**: Shareholders entitled to financial reports +- **Use cases**: Annual reports, quarterly statements + +**Liquidation Rights** + +- **Purpose**: Priority in case of company liquidation +- **When true**: Shareholders have claims on remaining assets +- **Priority**: Typically after creditors, before common shareholders + +**Conversion Rights** + +- **Purpose**: Right to convert to another security type +- **When true**: Shares can be converted (e.g., preferred to common) +- **Use cases**: Convertible preferred stock + +**Submission Rights** + +- **Purpose**: Right to submit proposals for shareholder vote +- **When true**: Shareholders can propose resolutions +- **Use cases**: Shareholder activism, governance proposals + +**Redemption Rights** + +- **Purpose**: Right for company to buy back shares +- **When true**: Company can redeem shares at specified price/time +- **Use cases**: Preferred stock redemption, buyback programs + +**Put Right** + +- **Purpose**: Right for shareholder to sell back to company +- **When true**: Shareholder can force company to buy shares +- **Use cases**: Liquidity events, exit provisions + +> **Note**: These are metadata flags. Actual enforcement may require additional legal/contractual agreements. + +### Dividend Type + +Select the dividend structure for your equity token: + +**None** + +- **Meaning**: Shareholders will **not** receive dividends +- **Characteristics**: + - No dividend distributions + - All profits retained by company +- **Use cases**: + - Growth stocks focused on capital appreciation + - Early-stage companies reinvesting all profits + - Non-dividend paying equity classes + +**Common** + +- **Meaning**: Common stock dividends +- **Characteristics**: + - Variable dividend amount + - Paid after preferred shareholders + - Voting rights typically included +- **Use cases**: + - Standard equity ownership + - Traditional common stock + +**Preferred** + +- **Meaning**: Preferred stock dividends +- **Characteristics**: + - Fixed dividend rate or amount + - Priority over common stock holders + - May have limited/no voting rights +- **Use cases**: + - Investors seeking stable income + - Preferred equity classes + +## Step 3: External Lists Configuration + +In this step, you can link previously created external lists to your token. These are optional but recommended for multi-token issuers. + +### External Pause Lists + +External pause contracts allow coordinated pausing across multiple tokens: + +- **What are they**: On-chain smart contracts that can pause all linked tokens +- **Where to configure**: Sidebar menu β†’ External Pause +- **Use cases**: Platform-wide emergency stops, coordinated upgrades +- **How it works**: If any linked pause contract returns `isPaused() = true`, token is paused +- **Link**: [Managing External Pause Lists](./managing-external-pause-lists.md) + +**How to link:** + +1. **Select from dropdown**: All your created pause contracts appear +2. **Add to token**: Click to link pause mechanism +3. **View linked**: See all currently linked pause contracts +4. **Remove**: Unlink if no longer needed + +### External Control Lists + +External control lists are reusable whitelists/blacklists shared across multiple tokens: + +- **What are they**: On-chain smart contracts managing approved/blocked addresses +- **Where to configure**: Sidebar menu β†’ Control Lists +- **Use cases**: Shared regulatory blacklists, multi-token whitelists +- **Link**: [Managing External Control Lists](./managing-external-control-lists.md) + +**How to link:** + +1. **Select from dropdown**: All your created control lists appear +2. **Add to token**: Click to link whitelist or blacklist +3. **View linked**: See all currently linked control lists +4. **Remove**: Unlink if no longer needed + +### External KYC Lists + +External KYC lists verify investor identity across multiple tokens: + +- **What are they**: On-chain smart contracts managing KYC-verified investors +- **Where to configure**: Sidebar menu β†’ External KYC +- **Use cases**: Shared investor verification, third-party KYC providers +- **Link**: [Managing External KYC Lists](./managing-external-kyc-lists.md) + +**How to link:** + +1. **Select from dropdown**: All your created KYC lists appear +2. **Add to token**: Click to link KYC verification list +3. **View linked**: See all currently linked KYC lists +4. **Remove**: Unlink if no longer needed + +> **Tip**: You can create external lists from the sidebar before or after token creation. + +## Step 4: ERC-3643 Integration (Optional) + +For advanced compliance features, integrate ERC-3643 (T-REX) contracts. This step is **optional** but provides enhanced regulatory compliance capabilities. + +> **Note**: Securities created by ATS are **already compatible** with ERC-3643 operations by default. ATS implements **partial ERC-3643 (T-REX) compliance** as part of its core architecture. This integration step is only required if you need **full ERC-3643 standard compatibility** with advanced T-REX features like custom Compliance Modules and Identity Registries. See [Developer Guide: ATS Contracts](../developer-guides/contracts/index.md) for architecture details. + +### Compliance Module + +**Purpose**: Enforces transfer rules and regulatory requirements + +- **What it does**: Validates all token transfers against compliance rules +- **Use cases**: Complex regulatory requirements, multi-jurisdiction offerings +- **Configuration**: Requires deploying a Compliance Module contract + +### Identity Registry + +**Purpose**: Manages verified investor identities + +- **What it does**: Maintains on-chain registry of verified investor identities +- **Use cases**: Enhanced KYC management, investor identity verification +- **Configuration**: Requires deploying an Identity Registry contract + +> **Important**: Both Compliance Module and Identity Registry must be deployed before token creation. See [Deployment Guide](../developer-guides/contracts/deployment.md) for instructions. + +### When to Use ERC-3643 + +Use this step only if you need **full compatibility with the [ERC-3643 standard](https://www.erc3643.org/)**: + +- **Standard compliance**: Need to ensure full compatibility with ERC-3643 (T-REX) specification +- **Interoperability**: Token must work with other ERC-3643 compliant systems +- **Third-party integrations**: Integration with platforms that require ERC-3643 compliance +- **Ecosystem compatibility**: Participating in ERC-3643 token ecosystems + +### When to Skip + +- **Most use cases**: ATS already provides partial ERC-3643 compliance for typical security token operations +- **Custom compliance**: If you just need complex compliance, use ATS's built-in features (Internal KYC, External KYC Lists, Control Lists, Clearing Mode, etc.) +- **Testing/Development**: Prototyping token economics without standard requirements + +## Step 5: Regulation + +> **Important**: Consult your legal and financial advisor for regulations applicable to your asset token. + +### Jurisdiction + +The primary jurisdiction for your offering: + +- **United States** + +### Select Regulation + +Choose the regulatory framework for your token offering: + +#### Regulation S + +**Purpose**: Offerings outside the United States to non-U.S. persons + +**Restrictions and Rules**: + +| Rule | Details | +| -------------------------------- | ------------------------------------------------------- | +| **Deal size** | Can raise unlimited capital | +| **Accredited investors** | Accreditation required | +| **Max non-accredited investors** | Unlimited | +| **Manual investor verification** | Verification of investors' financial documents required | +| **International investors** | Allowed | +| **Resale hold period** | Not applicable | + +**Use cases**: + +- International offerings +- Non-U.S. investor base +- Global token distribution + +#### Regulation D 506(b) + +**Purpose**: Private placement in the United States + +**Restrictions and Rules**: + +| Rule | Details | +| -------------------------------- | ------------------------------------------------------- | +| **Deal size** | Can raise unlimited capital | +| **Accredited investors** | Accreditation required | +| **Max non-accredited investors** | 35 maximum | +| **Manual investor verification** | Verification of investors' financial documents required | +| **International investors** | Not allowed | +| **Resale hold period** | Applicable from 6 months to 1 year | + +**Use cases**: + +- U.S.-based private placements +- Accredited investor offerings +- Limited non-accredited participation + +> **Warning**: Read the restrictions carefully. These details cannot be altered once the token is deployed. + +### Geographic Block List + +**Purpose**: Specify countries whose residents cannot invest + +**How it works**: + +- Based on selected regulation +- Can add additional blocked countries +- Enforced via compliance checks during transfers + +**Example**: Block sanctioned countries or those with conflicting regulations + +## Step 6: Review and Deploy + +### Review Configuration + +Before deploying, verify all configuration details: + +1. **Token details**: Name, symbol, supply, ISIN +2. **Permissions**: Controllable, blacklist, whitelist settings +3. **Configuration**: Clearing mode, internal KYC status +4. **Equity details**: Nominal value, currency, rights, dividend type +5. **External lists**: Correct lists linked (if any) +6. **ERC-3643**: Compliance Module and Identity Registry addresses (if used) +7. **Regulation**: Proper regulation selected, block list configured + +### Deployment Cost + +- View estimated HBAR cost for deployment +- Includes: Factory contract call, proxy deployment, initial configuration +- Typical cost: 50-200 HBAR (varies by network congestion) + +### Deploy Token + +1. Click **"Deploy Token"** button +2. Approve transaction in your wallet +3. Wait for confirmation (typically 3-5 seconds on Hedera) +4. Contract address will be displayed on success + +### Verify Deployment + +After successful deployment: + +**Token Information** + +- **Contract Address**: EVM address of deployed token (0x...) +- **Contract ID**: Hedera contract ID (0.0.xxxxx) +- **Factory**: Factory contract that deployed the token +- **Deployment Time**: Timestamp of deployment + +**View in Dashboard** + +1. Token appears in your **"My Tokens"** list +2. Click to view token details +3. Available tabs (based on your role): + - **Overview**: Token info, supply, holders + - **Holders**: List of token holders and balances + - **Transfers**: Transfer history + - **Corporate Actions**: Dividend management + - **Compliance**: KYC, control lists + - **Settings**: Token configuration + +![ATS Dashboard](../../images/ats-web-tabs.png) + +> **Note**: Available tabs depend on your assigned roles. See [Roles and Permissions](./roles-and-permissions.md). + +## Managing Your Equity Token + +After creation, you can manage your token from the dashboard. Select **Admin View (green)** to access administrative operations or **Holder View (blue)** to view balances and transfer tokens. + +Common administrative operations: + +### Distribute Shares + +- **How**: Transfer tab or issue function +- **Requirements**: ISSUER_ROLE +- **Recipients**: Must pass KYC and control list checks + +### Execute Dividends + +- **How**: Corporate Actions tab +- **Requirements**: CORPORATE_ACTION_ROLE +- **Process**: Create snapshot β†’ Specify amount β†’ Execute distribution + +### Manage Compliance + +- **KYC**: Grant/revoke KYC status +- **Control Lists**: Add/remove addresses from whitelist/blacklist +- **Freeze**: Freeze specific accounts if needed + +### Pause Transfers + +- **How**: Settings β†’ Emergency pause +- **Requirements**: PAUSER_ROLE +- **Effect**: All transfers blocked until unpause + +## Common Issues + +### Transaction Failed + +- **Insufficient HBAR**: Ensure wallet has enough HBAR for gas fees (check estimated cost) +- **Invalid Configuration**: Verify all required fields are filled correctly +- **Contract Not Found**: Check Factory contract address in your .env configuration + +### KYC Errors + +- **KYC check fails**: Verify investor is KYC-verified (internal, external, or SSI) +- **External list not found**: Ensure external KYC list address is correct +- **SSI not configured**: If using SSI, verify revocation registry and issuers are set + +### Transfer Restrictions + +- **Blacklist blocking**: Check if recipient is on blacklist (internal or external) +- **Whitelist missing**: If whitelist enabled, ensure recipient is whitelisted +- **Regulation block**: Verify recipient's jurisdiction is not blocked + +### Control List Issues + +- **Internal vs External**: Remember both internal and external lists are checked +- **Wrong list type**: Verify you're using control lists (not KYC lists) for transfer control + +## Next Steps + +- [Token Operations](./token-operations.md) - Learn about all available operations for your token +- [Corporate Actions](./corporate-actions.md) - Distribute dividends and manage splits/voting +- [Managing KYC & Compliance](./managing-compliance.md) - Set up investor verification +- [Roles and Permissions](./roles-and-permissions.md) - Grant roles to team members +- [SSI Integration](./ssi-integration.md) - Decentralized identity verification with Terminal 3 +- [Managing External KYC Lists](./managing-external-kyc-lists.md) - Configure external verification +- [Managing External Control Lists](./managing-external-control-lists.md) - Configure transfer restrictions + +## Related Resources + +- [Developer Guide: ATS Contracts](../developer-guides/contracts/index.md) +- [API Documentation](../api/index.md) diff --git a/docs/ats/user-guides/hold-operations.md b/docs/ats/user-guides/hold-operations.md new file mode 100644 index 000000000..aa625b0d5 --- /dev/null +++ b/docs/ats/user-guides/hold-operations.md @@ -0,0 +1,683 @@ +--- +id: hold-operations +title: Hold Operations +sidebar_label: Hold Operations +sidebar_position: 7 +--- + +# Hold Operations + +Learn how to create and manage holds on security tokens for escrow, pending transfers, and settlement operations. + +## Overview + +Hold operations allow you to temporarily "freeze" tokens under the control of a third-party escrow without transferring ownership. This is essential for various scenarios: + +### Common Hold Scenarios + +**Secondary Market Trading** + +- When placing a sell order, the marketplace needs ability to transfer your tokens to a buyer +- Tokens are held in escrow until the order is matched +- If order is cancelled or expires, tokens return to you + +**Regulatory Requirements** + +- Authorities may require temporary freezing of assets during investigations +- Assets held pending decisions about their disposition +- Compliance with legal or regulatory orders + +**Escrow Arrangements** + +- Lock tokens pending fulfillment of contractual conditions +- Third-party escrow manages release or execution +- Automatic return to owner if conditions aren't met by deadline + +**Settlement Operations** + +- Hold tokens during T+2 or T+3 settlement periods +- Guarantee tokens are available for final settlement +- Coordinate with clearing houses + +### Key Concepts + +**Hold**: A temporary lock on a specific amount of tokens in an account + +**What happens when tokens are held:** + +- Tokens remain in your account (not transferred) +- Tokens are subtracted from your **available balance** +- Tokens are added to your **held balance** +- Your **total balance** remains unchanged +- You continue to receive dividends/coupons on held tokens +- Only the escrow can execute or release the hold +- Holds can expire automatically, returning tokens to you + +**Balance Calculation:** + +``` +Total Balance = Available Balance + Locked Balance + Held Balance +``` + +**Example:** + +- You own 1,000 tokens (total balance) +- You create a hold for 300 tokens +- **Available balance**: 700 tokens (can transfer or create new holds) +- **Held balance**: 300 tokens (locked in hold, controlled by escrow) +- **Total balance**: 1,000 tokens (unchanged) +- **Dividends/coupons**: Paid on all 1,000 tokens (total balance includes held balance) + +**Hold States:** + +- **Ordered**: Hold created, tokens are held (locked from available balance) +- **Executed**: Hold completed, tokens transferred to destination +- **Released**: Hold cancelled, tokens returned to available balance +- **Expired**: Hold timed out, tokens automatically returned to available balance + +## Hold Lifecycle Schema + +The following diagram illustrates the complete lifecycle of a hold operation: + +``` +β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” +β”‚ INITIAL STATE β”‚ +β”‚ Token Holder: 1,000 tokens (Available Balance) β”‚ +β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ + β”‚ + β”‚ 1. CREATE HOLD + β”‚ Amount: 300 tokens + β”‚ Escrow: Account A + β”‚ Destination: Account B (optional) + β”‚ Expiration: 48 hours + β–Ό +β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” +β”‚ HOLD ORDERED β”‚ +β”‚ Token Holder: β”‚ +β”‚ - Total Balance: 1,000 tokens (unchanged) β”‚ +β”‚ - Available Balance: 700 tokens (reduced) β”‚ +β”‚ - Held Balance: 300 tokens (locked) β”‚ +β”‚ β”‚ +β”‚ Escrow Control: Account A can Execute or Release β”‚ +β”‚ Dividends: Paid on all 1,000 tokens β”‚ +β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ + β”‚ β”‚ + β”‚ 2a. EXECUTE β”‚ 2b. RELEASE + β”‚ (by Escrow only) β”‚ (by Escrow only) + β”‚ β”‚ + β–Ό β–Ό +β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” +β”‚ HOLD EXECUTED β”‚ β”‚ HOLD RELEASED β”‚ +β”‚ β”‚ β”‚ β”‚ +β”‚ 300 tokens transferred β”‚ β”‚ 300 tokens returned to β”‚ +β”‚ to Destination Account β”‚ β”‚ Original Account β”‚ +β”‚ β”‚ β”‚ β”‚ +β”‚ Token Holder: β”‚ β”‚ Token Holder: β”‚ +β”‚ - Total: 700 tokens β”‚ β”‚ - Total: 1,000 tokens β”‚ +β”‚ - Available: 700 tokens β”‚ β”‚ - Available: 1,000 β”‚ +β”‚ - Held: 0 tokens β”‚ β”‚ - Held: 0 tokens β”‚ +β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ + + β”‚ + β”‚ 2c. EXPIRATION (if time elapsed) + β”‚ Anyone can call Reclaim + β–Ό +β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” +β”‚ HOLD EXPIRED β”‚ +β”‚ β”‚ +β”‚ Automatic or manual reclaim returns tokens: β”‚ +β”‚ - Total Balance: 1,000 tokens β”‚ +β”‚ - Available Balance: 1,000 tokens β”‚ +β”‚ - Held Balance: 0 tokens β”‚ +β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ +``` + +**Key Points:** + +1. **Total balance never changes** during hold lifecycle (you always own the tokens) +2. **Held tokens are locked** but still eligible for dividends/coupons +3. **Only escrow account** can execute or release (exclusive control) +4. **Anyone can reclaim** expired holds to return tokens to original holder +5. **Destination account** (if specified) restricts where tokens can be transferred + +### Important Hold Properties + +**Holds Don't Affect:** + +- **Total token supply**: Remains constant (no tokens are created or destroyed) +- **Your total balance**: You still own the tokens (total balance unchanged) +- **Dividend/coupon payments**: Calculated on total balance, which includes held tokens +- **Corporate action eligibility**: Based on total balance (including held tokens) +- **Snapshots**: Held balance is included in snapshot totals + +**Holds Do Affect:** + +- **Available balance**: Reduced by held amount +- **Your ability to transfer**: Held tokens cannot be transferred by you +- **Creating new holds**: Can only create holds with available balance +- **Control by escrow**: Escrow account has exclusive control to execute or release + +## Prerequisites + +- Security token deployed with ERC-1400 support +- Sufficient token balance to create holds +- Appropriate roles for hold operations +- Understanding of your settlement requirements + +## Accessing Hold Operations + +1. Navigate to your **security token** from the dashboard +2. Go to the **"Operations"** tab +3. Select **"ERC1400"** (securities are compatible with both ERC-20 and ERC-1400 standards) +4. Select **"Hold"** from the submenu + +From this interface, you can: + +- **View holds**: See all active, executed, and released holds +- **Create hold**: Create a new hold operation +- **Force hold**: Create a hold on behalf of another account (requires CONTROLLER_ROLE) +- **Manage holds**: Execute or release existing holds + +## Creating a Hold + +### Step 1: Navigate to Create Hold + +From the Hold Operations interface: + +1. Click **"Create Hold"** button +2. Fill in the hold details form + +### Step 2: Fill Hold Details + +**Original Account\*** + +- **Auto-filled**: Your connected wallet address +- **Purpose**: The account from which tokens will be held +- **Note**: This field is automatically populated and cannot be changed + +**Destination Account** + +- **Format**: Hedera account ID (0.0.xxxxx) or EVM address (0x...) +- **Purpose**: The account that will receive tokens if hold is executed +- **Optional but recommended**: Specify the recipient if known +- **If specified**: Escrow can **only** transfer tokens to this specific account +- **If left empty**: Escrow can transfer tokens to **any** account during execution + +**Escrow Account\*** + +- **Format**: Hedera account ID (0.0.xxxxx) or EVM address (0x...) +- **Purpose**: Third-party that can execute or release the hold +- **Required**: Must specify an escrow agent +- **Use cases**: Marketplace escrow, clearinghouse, settlement system, compliance officer + +**Expiration Date\*** + +- **Format**: Date and time (future) +- **Purpose**: Automatic release if hold is not executed by this time +- **Required**: Must set an expiration date +- **Recommendation**: Set reasonable timeframe (e.g., 24-72 hours for trades) + +**Amount\*** + +- **Format**: Number of tokens to hold +- **Validation**: Must not exceed available balance (total balance - existing holds) +- **Required**: Must specify amount to hold + +### Step 3: Review and Create + +1. Verify all hold details are correct +2. Check that you have sufficient available balance +3. Ensure you pass all transfer restrictions: + - KYC verification (if enabled) + - Control list checks (whitelist/blacklist) + - Token not paused + - Other compliance requirements +4. Click **"Create Hold"** or **"Submit"** +5. Approve the transaction in your wallet +6. Hold is created and tokens are locked from your available balance + +> **Important**: Holds can only be created if all transfer restrictions are met, just like regular transfers. The escrow and destination accounts must also pass all compliance checks. + +## Force Hold (Controller Only) + +Force hold allows accounts with **CONTROLLER_ROLE** to create holds on behalf of other accounts. + +### When to Use Force Hold + +- **Regulatory holds**: Freeze assets during investigations +- **Legal orders**: Court-mandated asset freezes +- **Compliance actions**: Emergency freezes for regulatory compliance + +### Key Difference from Regular Hold + +The only difference is: + +- **Original Account** field is **editable** (not auto-filled) +- You can specify any account to create a hold on their tokens +- **Control list restrictions do NOT apply** for controller-created holds +- All other fields and requirements are identical to Create Hold + +### How to Create a Force Hold + +1. Click **"Force Hold"** button +2. Fill in the same form as Create Hold, but now you can edit: + - **Original Account\***: Enter the account address to create hold on their tokens +3. All other fields are the same: + - Destination Account (optional) + - Escrow Account\* (required) + - Expiration Date\* (required) + - Amount\* (required) +4. Click **"Submit"** +5. Approve the transaction + +> **Important**: Requires **CONTROLLER_ROLE**. Force holds bypass control list restrictions but the target account must still have sufficient available balance. + +## Viewing Holds + +### Hold List View + +The Hold Operations interface displays all holds in a table: + +**Table Columns:** + +- **Hold ID**: Unique identifier for the hold +- **From**: Account with locked tokens +- **To**: Recipient account if executed +- **Amount**: Number of tokens held +- **Status**: Ordered, Executed, Released, or Expired +- **Expiration**: Expiration date/time (if set) +- **Actions**: Execute or Release buttons + +**Filters:** + +- **By Status**: Show only Ordered, Executed, Released, or Expired holds +- **By Account**: Filter holds for specific accounts +- **By Date**: Show holds created in a date range + +## Managing Holds + +### Execute a Hold + +Transfer the held tokens to a recipient account. + +**Prerequisites:** + +- Hold must be in "Ordered" status +- **Must be the escrow account** specified in the hold +- Hold must not be expired +- Recipient must pass KYC and compliance checks + +> **Important**: Only the escrow account can execute a hold. No other account has this permission. + +**Execute Hold Form Fields:** + +**Hold ID\*** + +- **Format**: Unique identifier for the hold +- **Purpose**: Identifies which hold to execute +- **Required**: Must specify the hold ID + +**Original Account** + +- **Display only**: Shows the account that created the hold +- **Cannot edit**: Read-only field for reference + +**Destination Account** + +- **Display only**: Shows the destination account (if specified during creation) +- **Cannot edit**: Read-only field for reference +- **Note**: Tokens will be transferred to this account + +**Amount\*** + +- **Format**: Number of tokens to transfer +- **Required**: Must specify amount +- **Validation**: Cannot exceed the amount held + +**Steps:** + +1. Navigate to the hold in the list +2. Click **"Execute"** button +3. The form shows: + - Hold ID (auto-filled) + - Original Account (read-only) + - Destination Account (read-only, if specified during creation) + - Amount (enter amount to execute) +4. Enter the amount to execute +5. Confirm the transaction +6. Approve in your wallet +7. Tokens are transferred to the destination account +8. Hold status changes to "Executed" + +> **Note**: If a Destination Account was specified when creating the hold, tokens can only be transferred to that account. + +### Release a Hold + +Cancel the hold and return the tokens to the original account (no transfer to destination). + +**Prerequisites:** + +- Hold must be in "Ordered" status +- **Must be the escrow account** specified in the hold + +> **Important**: Only the escrow account can release a hold. No other account has this permission. + +**Release Hold Form Fields:** + +**Hold ID\*** + +- **Format**: Unique identifier for the hold +- **Purpose**: Identifies which hold to release +- **Required**: Must specify the hold ID + +**Destination Account** + +- **Format**: Account address +- **Purpose**: Shows destination account (if specified) +- **Note**: For reference only + +**Amount\*** + +- **Format**: Number of tokens to release +- **Required**: Must specify amount +- **Validation**: Cannot exceed the amount held + +**Steps:** + +1. Navigate to the hold in the list +2. Click **"Release"** button +3. The form shows: + - Hold ID (auto-filled) + - Destination Account (if specified, for reference) + - Amount (enter amount to release) +4. Enter the amount to release +5. Confirm the release action +6. Approve in your wallet +7. Tokens are unlocked and returned to available balance +8. Hold status changes to "Released" + +### Automatic Expiration + +Holds with an expiration time are automatically released when expired: + +- No manual action needed +- Tokens are automatically unlocked +- Hold status changes to "Expired" +- Check expired holds to confirm tokens are available + +> **Note**: Expired holds cannot be executed. You must create a new hold if needed. + +### Reclaim Hold + +Manually reclaim tokens from an expired hold back to the original account. + +**When to use:** + +- Hold has expired but tokens haven't been automatically released +- Want to explicitly return held tokens to original owner +- Cleanup of old expired holds + +**Who can reclaim:** + +- **Anyone** can execute reclaim on expired holds +- Does not require special permissions +- Helps maintain system hygiene + +**Prerequisites:** + +- Hold must be in "Ordered" status +- Current date/time must be **after** the expiration time +- Hold has not been executed or released already + +**Steps:** + +1. Navigate to an expired hold in the list +2. Click **"Reclaim"** button +3. Confirm the reclaim action +4. Approve in your wallet +5. All remaining held tokens are returned to the original "from" account +6. Hold status changes to "Expired" + +> **Tip**: Use reclaim if automatic expiration didn't process or you want to explicitly clear expired holds. + +## Common Use Cases + +### Escrow for Asset Purchase + +**Scenario**: Buyer wants to purchase shares, seller wants guarantee of payment + +**Solution:** + +1. Buyer creates hold with: + - From: Buyer's account + - To: Seller's account + - Notary: Escrow agent + - Amount: Agreed shares + - Expiration: 72 hours +2. Seller verifies hold exists and delivers consideration +3. Escrow agent verifies conditions are met +4. Escrow agent executes hold β†’ tokens transfer to seller + +### Pending Transfer Approval + +**Scenario**: Transfer requires compliance approval before execution + +**Solution:** + +1. Sender creates hold with: + - From: Sender's account + - To: Recipient's account + - Notary: Compliance officer + - Amount: Transfer amount + - Expiration: 24 hours +2. Compliance officer reviews the transfer +3. If approved: Compliance officer executes hold +4. If rejected: Hold expires or is released manually + +### Payment vs Delivery (DvP) + +**Scenario**: Atomic swap of tokens for payment + +**Solution:** + +1. Token seller creates hold with lock hash +2. Payment is made by buyer +3. Seller reveals hash secret +4. Hold is executed using the secret +5. Tokens transfer atomically + +### Dividend Payment Holds + +**Scenario**: Lock shares to ensure dividend eligibility + +**Solution:** + +1. Company creates holds on all shareholder accounts before record date +2. Shareholders cannot sell shares during hold period +3. Dividend is calculated based on held amounts +4. After record date, holds are released +5. Shareholders receive dividends and can trade again + +## Required Roles and Permissions + +Hold operations require specific roles depending on the action: + +### Creating Holds + +**Standard Hold Creation (by token holder):** + +- Any token holder can create holds on their own tokens +- Must pass all transfer restrictions (KYC, control lists, pause status) +- Most common type of hold creation + +**Hold Creation on Behalf of Others:** + +**Authorized Accounts (ERC-20 standard):** + +- If you've authorized an account to manage your tokens +- Authorized account can create holds on your behalf +- Example: Wallet apps, automated trading systems + +**Operators (ERC-1410 standard):** + +- Accounts with operator permissions for specific partitions +- Can create holds on behalf of token holders +- Example: Custodians, fund managers + +**Controllers (CONTROLLER_ROLE):** + +- Accounts with CONTROLLER_ROLE can create holds on any account +- **Special privilege**: Bypasses control list restrictions +- Use cases: Regulatory holds, legal freezes, compliance actions +- Most powerful hold creation permission + +> **Important**: Controller-created holds do **not** require the "from" account to pass control list checks. This allows authorities to freeze assets even if they would normally be restricted. + +### Executing Holds + +Who can execute a hold (transfer tokens to destination): + +- **Only the escrow account** specified in the hold + +No other accounts can execute a hold, including the hold creator or original account owner. + +### Releasing Holds + +Who can release a hold (return tokens to original account): + +- **Only the escrow account** specified in the hold + +No other accounts can release a hold, including the hold creator or original account owner. + +### Reclaiming Expired Holds + +Who can reclaim an expired hold: + +- **Anyone** (no special role required) +- Only works after expiration time has passed + +See [Roles and Permissions](./roles-and-permissions.md) for complete role details. + +## Best Practices + +### Setting Expiration Times + +**Always set expiration for:** + +- Escrow arrangements (typical: 24-72 hours) +- Pending approvals (typical: 24 hours) +- Settlement holds (typical: T+2 or T+3) + +**Avoid expiration for:** + +- Long-term locks with manual release +- Corporate actions with no deadline + +### Using Notaries + +**Use notary for:** + +- Third-party escrow agents +- Compliance approvals +- Settlement systems +- Automated execution by external systems + +**Skip notary when:** + +- Simple self-holds +- Direct peer-to-peer holds +- Creator will manage execution/release + +### Lock Hash Usage + +**Use lock hash for:** + +- Atomic swaps +- Conditional transfers +- Hash time-locked contracts (HTLCs) +- Cross-chain operations + +**Skip lock hash for:** + +- Standard escrow +- Simple holds +- Compliance-based holds + +### Monitoring Holds + +**Regular checks:** + +- Review expiring holds daily +- Monitor stuck holds (ordered but not executed) +- Track executed vs released ratios +- Audit hold creation patterns + +## Common Issues + +### Cannot Create Hold + +**Problem**: Transaction fails when creating hold + +**Solutions:** + +- Verify "from" account has sufficient available balance +- Check that available balance = total balance - existing holds +- Ensure token is not paused +- Verify KYC and compliance checks pass for both accounts + +### Cannot Execute Hold + +**Problem**: Execute button disabled or transaction fails + +**Solutions:** + +- Check hold status is "Ordered" (not Executed, Released, or Expired) +- Verify you have authorization (creator, notary, or executor role) +- If lock hash was set, ensure you provide the correct secret +- Check that recipient ("to" account) passes KYC and compliance checks +- Verify hold has not expired + +### Cannot Release Hold + +**Problem**: Release button disabled or transaction fails + +**Solutions:** + +- Check hold status is "Ordered" +- Verify you have authorization (creator, notary, from account, or releaser role) +- Ensure wallet is connected and has sufficient HBAR for gas + +### Hold Expired Unexpectedly + +**Problem**: Hold expired before execution + +**Solutions:** + +- Check expiration time was set correctly (timezone, date format) +- Set longer expiration periods for complex processes +- Monitor holds approaching expiration +- Create new hold if original expired + +### Tokens Still Locked + +**Problem**: Tokens not available after release/expiration + +**Solutions:** + +- Verify hold status changed to "Released" or "Expired" +- Refresh the page and check hold list +- Check transaction was confirmed on-chain +- Verify no other holds are locking the same tokens + +## Next Steps + +- [Clearing Operations](./clearing-operations.md) - Settlement and clearing with holds +- [Creating Equity Tokens](./creating-equity.md) - Enable clearing mode for holds +- [Creating Bond Tokens](./creating-bond.md) - Enable clearing mode for holds +- [Roles and Permissions](./roles-and-permissions.md) - Understanding hold-related roles +- [Token Lifecycle](./token-lifecycle.md) - Complete token management + +## Related Resources + +- [ERC-1400 Standard Documentation](https://github.com/ethereum/EIPs/issues/1400) +- [Developer Guide: Hold Operations](../developer-guides/contracts/index.md) diff --git a/docs/ats/user-guides/index.md b/docs/ats/user-guides/index.md new file mode 100644 index 000000000..5b155c6aa --- /dev/null +++ b/docs/ats/user-guides/index.md @@ -0,0 +1,149 @@ +--- +id: index +title: User Guides +sidebar_position: 3 +--- + +# User Guides + +Step-by-step guides for using the Asset Tokenization Studio web application. + +![ATS Web Application](../../images/ats-web-dashboard.png) + +## Getting Started + +Before following these guides, make sure you have: + +1. [Set up the ATS web application](../getting-started/quick-start.md) +2. Connected your Hedera wallet (HashPack, Blade, or WalletConnect) +3. Sufficient HBAR for transaction fees + +## Available Guides + +
+
+

πŸ“ˆ Creating Equity Tokens

+

Issue shares representing company ownership

+
    +
  • Configure token details and supply
  • +
  • Set up compliance rules
  • +
  • Enable dividend distributions
  • +
  • Manage voting rights
  • +
+ Read Guide +
+ +
+

πŸ’° Creating Bond Tokens

+

Issue bonds with maturity and coupon payments

+
    +
  • Set bond terms and maturity
  • +
  • Configure coupon rate and frequency
  • +
  • Schedule interest payments
  • +
  • Handle maturity redemption
  • +
+ Read Guide +
+ +
+

πŸ”’ Managing Compliance

+

Set up transfer restrictions and identity verification

+
    +
  • Configure KYC requirements
  • +
  • Set jurisdiction restrictions
  • +
  • Manage whitelists
  • +
  • Generate compliance reports
  • +
+ Read Guide +
+ +
+

πŸ“‹ Managing External KYC Lists

+

Configure on-chain KYC lists for investor verification

+
    +
  • Create external KYC lists
  • +
  • Add verified investors
  • +
  • Share KYC across tokens
  • +
  • Query verification status
  • +
+ Read Guide +
+ +
+

🚫 Managing External Control Lists

+

Configure whitelists and blacklists for transfer control

+
    +
  • Create whitelists and blacklists
  • +
  • Manage approved addresses
  • +
  • Geographic restrictions
  • +
  • Regulatory compliance
  • +
+ Read Guide +
+ +
+

πŸ” SSI Integration

+

Self-Sovereign Identity with Terminal 3 (Optional)

+
    +
  • Configure SSI verification
  • +
  • Manage credential issuers
  • +
  • Set revocation registry
  • +
  • Decentralized identity verification
  • +
+ Read Guide +
+ +
+

πŸ‘₯ Roles and Permissions

+

Understand and manage access control

+
    +
  • Learn about each role
  • +
  • Grant and revoke permissions
  • +
  • Role combinations
  • +
  • Security best practices
  • +
+ Read Guide +
+ +
+

πŸ’Ό Corporate Actions

+

Distribute dividends and coupon payments

+
    +
  • Execute dividend distributions
  • +
  • Process coupon payments
  • +
  • Handle stock splits
  • +
  • Manage payment snapshots
  • +
+ Read Guide +
+ +
+

βš™οΈ Token Operations

+

Manage token operations and controls

+
    +
  • Mint, transfer, and redeem tokens
  • +
  • Freeze accounts and pause tokens
  • +
  • Hold, clearing, and partition operations
  • +
  • Cap management
  • +
+ Read Guide +
+ +
+

πŸ”§ Updating Configuration

+

Update token configuration and resolver settings

+
    +
  • Set Business Logic Resolver
  • +
  • Configure version settings
  • +
  • Upgrade token functionality
  • +
  • Manage configuration profiles
  • +
+ Read Guide +
+
+ +## Need Help? + +- Check the [Developer Guides](../developer-guides/index.md) for technical details +- See the [API Documentation](../api/index.md) for contract references +- [Report issues](https://github.com/hashgraph/asset-tokenization-studio/issues) on GitHub diff --git a/docs/ats/user-guides/managing-compliance.md b/docs/ats/user-guides/managing-compliance.md new file mode 100644 index 000000000..2c781b2d6 --- /dev/null +++ b/docs/ats/user-guides/managing-compliance.md @@ -0,0 +1,208 @@ +--- +id: managing-compliance +title: Managing KYC and Compliance +sidebar_label: KYC & Compliance +sidebar_position: 3 +--- + +# Managing KYC and Compliance + +Learn how to manage Know Your Customer (KYC) verification and compliance for security tokens. + +## KYC Management Overview + +ATS supports three KYC methods: + +- **Internal KYC**: Manage KYC using Verifiable Credentials (VCs) uploaded directly +- **External KYC**: Delegate KYC verification to external smart contracts +- **Both**: Use both internal and external KYC verification + +--- + +## Internal KYC Management + +Internal KYC uses Verifiable Credentials to validate investor identities on-chain. + +### Step 1: Enable Internal KYC + +You can enable internal KYC either during token creation or later from the Management section. + +**During Token Creation** + +When creating an equity or bond token: + +1. In the **Compliance Settings** section +2. Find the **KYC Method** option +3. Select: + - **Internal**: Use internal KYC with VCs + - **External**: Use external KYC lists + - **Both**: Use both methods + +**After Token Creation** + +1. Navigate to your token from the dashboard +2. Select **Admin View (green)** +3. Go to **Management** β†’ **Danger Zone** +4. Find **"Activate Internal KYC"** +5. Click **"Activate"** +6. Approve the transaction + +**Note**: Once activated, internal KYC cannot be deactivated without redeploying the token. + +### Step 2: Configure Issuers + +Before you can validate KYC, you need to designate accounts as issuers. Issuers have permission to upload Verifiable Credentials. + +**Adding an Issuer** + +1. Navigate to your token +2. Select **Admin View (green)** +3. Go to **Control** β†’ **SSI Manager** +4. Click **"Add Issuer"** +5. Enter the **account address** (Hedera ID or EVM address) to designate as issuer +6. Click **"Add"** +7. Approve the transaction + +**Important**: You are adding an **account address** as an issuer, not Terminal 3 itself. This account will then have permission to upload VCs through Terminal 3 or programmatically. + +**Viewing Issuers** + +The issuers list shows all accounts authorized to upload VCs for KYC validation. + +### Step 3: Grant KYC to an Account + +Once you have issuers configured, you can validate KYC for specific accounts by uploading their Verifiable Credentials. + +**Uploading a Verifiable Credential** + +1. Navigate to your token +2. Select **Admin View (green)** +3. Go to **Control** β†’ **KYC** +4. Click **"Upload VC"** or **"Grant KYC"** +5. Enter the holder's account address +6. Upload or paste the Verifiable Credential data +7. Click **"Submit"** +8. Approve the transaction + +**Note**: Only accounts designated as issuers (from Step 2) can upload VCs. + +**Getting Test Verifiable Credentials** + +For testing purposes, you can generate test VCs using the hardhat command: + +```bash +npx hardhat createVC \ + --holder \ + --privatekey +``` + +**For Production**: Use [Terminal 3](https://terminal3.io/) to issue proper Verifiable Credentials that comply with W3C standards. + +### Checking KYC Status + +To check if an account has internal KYC: + +1. Navigate to your token +2. Select **Admin View (green)** +3. Go to **Control** β†’ **KYC** +4. View the list of accounts with their KYC status: + - **Valid**: KYC verified + +You can also enter a specific account address to check its KYC status. + +### Revoking KYC + +To revoke internal KYC from an account: + +1. Navigate to your token +2. Select **Admin View (green)** +3. Go to **Control** β†’ **KYC** +4. Find the account in the list +5. Click the **trash/delete icon** (πŸ—‘οΈ) next to the account +6. Approve the transaction + +**Effect**: Revoked accounts will no longer be able to receive or transfer tokens. + +--- + +## External KYC Management + +External KYC allows you to delegate investor verification to external smart contract lists. + +### Viewing External KYC Lists (Token Level) + +To see which external KYC lists are associated with your token: + +1. Navigate to your token +2. Select **Admin View (green)** +3. Go to **Control** β†’ **External KYC** +4. View the list of external KYC contracts associated with this token + +**Note**: This view only shows the lists. To manage (create/edit) external KYC lists, use the External KYC section in the sidebar. + +### Managing External KYC Lists (Global) + +To create and manage external KYC lists that can be shared across multiple tokens: + +1. In the main sidebar, navigate to **External KYC** (outside of any specific token) +2. Here you can: + - Create new external KYC lists + - Add/remove addresses to existing lists + - View all your external KYC lists + - Share lists across multiple tokens + +### Adding an External KYC List to Your Token + +Once you've created an external KYC list (from the sidebar), you can associate it with your token: + +1. Navigate to your token +2. Go to **Control** β†’ **External KYC** +3. Click **"Add External List"** +4. Enter the smart contract address of the external KYC list +5. Approve the transaction + +See [Managing External KYC Lists](./managing-external-kyc-lists.md) for detailed instructions on creating and managing external KYC lists. + +--- + +## KYC Enforcement + +Once KYC is enabled, the token will enforce KYC requirements: + +- **Transfers**: Both sender and receiver must have valid KYC +- **Token Reception**: Receivers must have valid KYC to receive tokens +- **Corporate Actions**: KYC holders are eligible for dividends and other corporate actions + +## Common Issues + +### "Account does not have Kyc status: Not Granted" + +This error means the target account **already has KYC status** (either granted internally or through an external list). You cannot grant KYC to an account that already has a KYC status. + +**Solution**: Check if the account is already in an external KYC list or has been previously granted KYC. + +### Cannot Upload VC + +**Issue**: "Caller does not have SSI_MANAGER_ROLE" + +**Solution**: Make sure the account you're using is designated as an issuer in Step 2 (Control β†’ SSI Manager β†’ Add Issuer). + +### KYC Not Enforced + +**Issue**: Transfers work without KYC + +**Solution**: Verify that internal KYC is activated (Step 1). Check Management β†’ Danger Zone β†’ Internal KYC status. + +## Permissions Required + +- **SSI_MANAGER_ROLE**: Required to add/remove issuers +- **KYC_ROLE**: Required to grant/revoke KYC (automatically granted to issuers) +- **ISSUER_ROLE** or token creator: Required to activate internal KYC + +See [Roles and Permissions](./roles-and-permissions.md) for more details. + +## Next Steps + +- [SSI Integration](./ssi-integration.md) - Integrate with Terminal 3 for production +- [Managing External KYC Lists](./managing-external-kyc-lists.md) - Using external KYC smart contracts +- [Roles and Permissions](./roles-and-permissions.md) - Managing access control diff --git a/docs/ats/user-guides/managing-external-control-lists.md b/docs/ats/user-guides/managing-external-control-lists.md new file mode 100644 index 000000000..c84b45ecd --- /dev/null +++ b/docs/ats/user-guides/managing-external-control-lists.md @@ -0,0 +1,379 @@ +--- +id: managing-external-control-lists +title: Managing External Control Lists +sidebar_label: External Control Lists +sidebar_position: 5 +--- + +# Managing External Control Lists + +Learn how to configure and manage external control lists (whitelists and blacklists) for token transfer restrictions. + +## Overview + +External control lists are on-chain smart contracts that manage transfer permissions for your security tokens. They allow you to: + +- Create reusable whitelists and blacklists across multiple tokens +- Implement geographic restrictions and regulatory compliance +- Centralize transfer control management +- Maintain compliance lists independently from token contracts + +## What are External Control Lists? + +External control lists manage who can hold and transfer tokens: + +- **Purpose**: Centralized transfer permission control for multiple tokens +- **Benefits**: Reusable across different securities, easier to maintain +- **Interface**: Implements `IExternalControlList.isAuthorized(address)` +- **Use case**: Geographic restrictions, regulatory blacklists, approved investor lists + +### Types of Control Lists + +#### Whitelists + +- **Definition**: Only approved addresses can hold/receive tokens +- **Use case**: Accredited investor-only tokens, jurisdiction-specific offerings +- **Behavior**: Address must be on the list to pass validation + +#### Blacklists + +- **Definition**: Restricted addresses cannot hold/receive tokens +- **Use case**: Regulatory sanctions lists, blocked jurisdictions +- **Behavior**: Address must NOT be on the list to pass validation + +## Accessing External Control Lists + +1. Navigate to the ATS web application +2. Click on **"Control Lists"** in the sidebar menu + +![External Lists Configuration](../../images/ats-web-external-list.png) + +## Creating or Importing External Control Lists + +You have two options to add an external control list: + +### Option 1: Create New Control List + +Creates a new external control list by deploying a smart contract automatically. + +**Steps:** + +1. Click **"Create"** button +2. Select list type: + - **Whitelist**: Approved addresses only + - **Blacklist**: Blocked addresses +3. Provide list details: + - **List Name**: Descriptive name (e.g., "OFAC Sanctions List") +4. Click **"Deploy"** or **"Create"** +5. Approve the transaction in your wallet +6. The contract is deployed and appears in your External Control Lists + +**What happens:** + +- A new external control list contract is deployed on-chain +- You become the manager of this control list +- The contract address is displayed (0x... or 0.0.xxxxx) +- You can now add addresses and link this list to your tokens + +### Option 2: Import Existing Control List + +Use an existing external control list by importing its contract ID. + +**Steps:** + +1. Click **"Import"** button +2. Enter the **Contract ID**: Hedera contract ID (0.0.xxxxx) or EVM address (0x...) +3. Click **"Import"** +4. Approve the transaction in your wallet +5. The external control list appears in your list + +**Use cases:** + +- Use a control list deployed by another team member +- Connect to a third-party compliance provider's list +- Share blacklists/whitelists across multiple organizations + +> **Note**: When importing, you may have view-only access unless you have admin permissions on the imported contract. + +## Linking External Control Lists to Tokens + +After creating or importing an external control list, you need to link it to your security tokens. + +**Steps:** + +1. Navigate to your **security token** from the dashboard +2. Go to the **"Control"** tab +3. Select the **"External Control List"** section +4. Click **"Add External Control List"** button +5. Select the external control list from the dropdown +6. Click **"Add"** to confirm +7. Approve the transaction in your wallet + +> **Required Role**: You must have **CONTROL_LIST_MANAGER_ROLE** on the token to link external control lists. + +## Managing Control List Members + +Once you have created or imported a control list, you can manage addresses in it. + +### Viewing Addresses + +To view all addresses in the control list: + +1. Navigate to the external control list from the sidebar +2. Select the list you want to view +3. Click the **magnifying glass icon** (πŸ”) +4. View the list of all addresses in this control list + +### Adding Addresses + +To add an address to the control list: + +1. Navigate to the external control list +2. Click the **user with plus icon** (πŸ‘€βž•) +3. Enter the account address (Hedera ID or EVM address) +4. Click **"Add"** +5. Approve the transaction + +**Note**: For whitelists, this approves the address. For blacklists, this blocks the address. + +### Removing Addresses + +To remove an address from the control list: + +1. Navigate to the external control list +2. Click the **user with minus icon** (πŸ‘€βž–) +3. Enter the account address to remove +4. Click **"Remove"** +5. Approve the transaction + +### Deleting the Control List + +To delete an entire external control list: + +1. Navigate to the external control list +2. Click the **trash icon** (πŸ—‘οΈ) +3. Confirm the deletion +4. Approve the transaction + +**Important**: When you delete an external control list, it will be automatically removed from all security tokens that are using it. This affects all linked tokens immediately. + +## How Control Lists Work + +### Validation Flow + +When a transfer is attempted: + +1. **Internal control list checked** (if configured) +2. **External control lists checked** (all must pass) +3. **Result**: Transfer allowed only if all checks pass + +### Whitelist Behavior + +``` +Transfer allowed if: +- Internal whitelist: address is whitelisted OR list is empty +- External whitelists: address is whitelisted in ALL linked lists +``` + +### Blacklist Behavior + +``` +Transfer blocked if: +- Internal blacklist: address is blacklisted +- External blacklists: address is blacklisted in ANY linked list +``` + +### Priority Rules + +1. **Blacklist always wins**: If any list blacklists an address, transfer is blocked +2. **All whitelists must pass**: Address must be whitelisted in all linked whitelists +3. **Empty whitelist = no restriction**: If whitelist is empty, no whitelist check is applied + +## Managing Multiple Control Lists + +### Using Multiple External Control Lists + +A token can use multiple external control lists simultaneously: + +- **Multiple whitelists**: Address must be in ALL whitelists +- **Multiple blacklists**: Address must NOT be in ANY blacklist +- **Mixed**: Can use both whitelists and blacklists together + +### Example Scenarios + +**Scenario 1: Geographic Restrictions** + +- Whitelist 1: US investors +- Whitelist 2: EU investors +- Result: Only US AND EU approved investors can hold tokens + +**Scenario 2: Regulatory Compliance** + +- Blacklist 1: OFAC sanctions list +- Blacklist 2: Local regulatory blacklist +- Result: Any address on either list is blocked + +## Required Roles + +To manage external control lists: + +- **CONTROL_LIST_MANAGER_ROLE**: Add/remove external control lists from token +- **DEFAULT_ADMIN_ROLE**: Full administrative access + +For the external control list contract itself: + +- Contract deployer controls who can add/remove addresses + +See the [Roles and Permissions Guide](./roles-and-permissions.md) for details. + +## Smart Contract Interface + +External control list contracts must implement: + +```solidity +interface IExternalControlList { + function isAuthorized(address account) external view returns (bool); +} +``` + +Returns: + +- `true`: Address is whitelisted (or not blacklisted) +- `false`: Address is not whitelisted (or blacklisted) + +## Best Practices + +### Security + +- **Regular audits**: Review list members periodically +- **Role separation**: Different admins for different control lists +- **Transaction verification**: Always verify addresses before adding +- **Backup lists**: Maintain off-chain backups of list members + +### Compliance + +- **Documentation**: Maintain records of why addresses are added/removed +- **Update frequency**: Establish procedures for regular list updates +- **Regulatory alignment**: Ensure lists match regulatory requirements +- **Audit trail**: All changes are on-chain and immutable + +### Performance + +- **Batch operations**: Use bulk import for large lists +- **Pagination**: Query large lists in pages to avoid timeouts +- **Shared lists**: Reuse control lists across multiple tokens to reduce costs + +## Troubleshooting + +### List Not Recognized + +If your token doesn't recognize an external control list: + +- Verify the list contract address is correct +- Ensure the list is properly linked to the token +- Check that you have CONTROL_LIST_MANAGER_ROLE +- Verify the list contract implements `IExternalControlList` interface + +### Transfer Blocked Unexpectedly + +If a valid transfer is being blocked: + +- Check if address is on any blacklist +- Verify address is on all required whitelists +- Ensure external control lists are correctly configured +- Check both sender and receiver addresses + +### Transaction Failed + +- **Insufficient HBAR**: Ensure wallet has enough for gas fees +- **Permission denied**: Verify you have the required role (CONTROL_LIST_MANAGER_ROLE) +- **Invalid address**: Check address format and checksum +- **Already added**: Address may already be on the list + +## Use Cases + +### 1. Geographic Restrictions + +**Scenario**: Token only for US investors + +**Solution**: + +- Create whitelist for US investors +- Link to token +- Only US-approved addresses can hold + +**Benefits**: Automatic geographic compliance + +### 2. Regulatory Sanctions + +**Scenario**: Comply with OFAC sanctions + +**Solution**: + +- Create blacklist with OFAC addresses +- Link to all tokens +- Update list as OFAC updates + +**Benefits**: Centralized compliance, automatic enforcement + +### 3. Accredited Investor Only + +**Scenario**: Security for accredited investors only + +**Solution**: + +- Create whitelist for verified accredited investors +- Link to token +- Non-accredited investors cannot receive tokens + +**Benefits**: Regulatory compliance, automatic enforcement + +### 4. Multi-Jurisdiction Offering + +**Scenario**: Token for US and EU investors only + +**Solution**: + +- Create whitelist 1: US approved investors +- Create whitelist 2: EU approved investors +- Link both to token +- Investor must be on both lists + +**Benefits**: Multi-jurisdiction compliance + +## Interaction with Other Compliance Features + +### Control Lists + KYC + +Control lists work alongside KYC: + +1. **KYC check**: Is investor verified? +2. **Control list check**: Is investor authorized? +3. **Both must pass**: Transfer proceeds only if both pass + +### Control Lists + SSI + +Control lists complement SSI: + +- **SSI**: Verifies identity +- **Control lists**: Controls transfer permissions +- **Independent**: Each operates separately + +### Control Lists + ERC-3643 + +For ERC-3643 tokens: + +- **External control lists**: ATS-specific feature +- **ERC-3643 compliance**: T-REX compliance module +- **Can combine**: Use both for comprehensive compliance + +## Next Steps + +- [Managing External KYC Lists](./managing-external-kyc-lists.md) - Investor verification +- [Roles and Permissions](./roles-and-permissions.md) - Understand access control +- [Managing Compliance](./managing-compliance.md) - Overall compliance strategy + +## Related Resources + +- [Developer Guide: Smart Contracts](../developer-guides/contracts/index.md) +- [API Documentation](../api/index.md) diff --git a/docs/ats/user-guides/managing-external-kyc-lists.md b/docs/ats/user-guides/managing-external-kyc-lists.md new file mode 100644 index 000000000..efffd2b39 --- /dev/null +++ b/docs/ats/user-guides/managing-external-kyc-lists.md @@ -0,0 +1,288 @@ +--- +id: managing-external-kyc-lists +title: Managing External KYC Lists +sidebar_label: External KYC Lists +sidebar_position: 4 +--- + +# Managing External KYC Lists + +Learn how to configure and manage external KYC lists for investor identity verification across multiple tokens. + +## Overview + +External KYC lists are on-chain smart contracts that provide centralized KYC (Know Your Customer) verification for your security tokens. They allow you to: + +- Manage KYC-verified investors across multiple tokens +- Share KYC verification between different securities +- Integrate with external compliance providers +- Maintain compliance state independently from token contracts + +## What are External KYC Lists? + +External KYC lists verify investor identity and accreditation status: + +- **Purpose**: Centralized KYC verification for multiple tokens +- **Benefits**: Reusable across different securities, easier to maintain +- **Interface**: Implements `IExternalKycList.isGranted(address)` +- **Use case**: When managing multiple tokens with the same investor base + +### Key Difference from Internal KYC + +- **Internal KYC**: Each token maintains its own KYC registry +- **External KYC**: Shared KYC registry used by multiple tokens +- **Flexibility**: Tokens can use internal, external, or both + +## Accessing External KYC Lists + +1. Navigate to the ATS web application +2. Click on **"External KYC"** in the sidebar menu + +![External Lists Configuration](../../images/ats-web-external-list.png) + +## Creating or Importing External KYC Lists + +You have two options to add an external KYC list: + +### Option 1: Create New KYC List + +Creates a new external KYC list by deploying a smart contract automatically. + +**Steps:** + +1. Click **"Create"** button +2. Provide list details: + - **List Name**: Descriptive name (e.g., "US Accredited Investors") + - **Description** (optional): Purpose and coverage of this list +3. Click **"Deploy"** or **"Create"** +4. Approve the transaction in your wallet +5. The contract is deployed and appears in your External KYC list + +**What happens:** + +- A new external KYC contract is deployed on-chain +- You become the manager of this KYC list +- The contract address is displayed (0x... or 0.0.xxxxx) +- You can now add investors and link this list to your tokens + +### Option 2: Import Existing KYC List + +Use an existing external KYC list by importing its contract ID. + +**Steps:** + +1. Click **"Import"** button +2. Enter the **Contract ID**: Hedera contract ID (0.0.xxxxx) or EVM address (0x...) +3. Click **"Import"** +4. Approve the transaction in your wallet +5. The external KYC list appears in your list + +**Use cases:** + +- Use a KYC list deployed by another team member +- Connect to a third-party KYC provider's list +- Share KYC lists across multiple organizations + +> **Note**: When importing, you may have view-only access unless you have admin permissions on the imported contract. + +## Linking External KYC Lists to Tokens + +After creating or importing an external KYC list, you need to link it to your security tokens. + +**Steps:** + +1. Navigate to your **security token** from the dashboard +2. Go to the **"Control"** tab +3. Select the **"External KYC"** section +4. Click **"Add External KYC"** button +5. Select the external KYC list from the dropdown +6. Click **"Add"** to confirm +7. Approve the transaction in your wallet + +> **Required Role**: You must have **KYC_MANAGER_ROLE** on the token to link external KYC lists. + +## Managing KYC List Members + +Once you have created or imported a KYC list, you can manage investors in it. + +### Viewing Accounts + +To view all accounts in the KYC list: + +1. Navigate to the external KYC list from the sidebar +2. Select the list you want to view +3. Click the **magnifying glass icon** (πŸ”) +4. View the list of all accounts in this KYC list + +### Adding Members + +To add an account to the KYC list: + +1. Navigate to the external KYC list +2. Click the **user with plus icon** (πŸ‘€βž•) +3. Enter the account address (Hedera ID or EVM address) +4. Click **"Add"** +5. Approve the transaction + +### Removing Members + +To remove an account from the KYC list: + +1. Navigate to the external KYC list +2. Click the **user with minus icon** (πŸ‘€βž–) +3. Enter the account address to remove +4. Click **"Remove"** +5. Approve the transaction + +### Deleting the KYC List + +To delete an entire external KYC list: + +1. Navigate to the external KYC list +2. Click the **trash icon** (πŸ—‘οΈ) +3. Confirm the deletion +4. Approve the transaction + +**Important**: When you delete an external KYC list, it will be automatically removed from all security tokens that are using it. This affects all linked tokens immediately. + +## Managing Multiple KYC Lists + +### Using Multiple External KYC Lists + +A token can use multiple external KYC lists simultaneously: + +- An investor is considered verified if they appear in **any** linked KYC list +- Example: Combine "US Investors" list with "EU Investors" list +- All lists are checked via `isExternallyGranted()` function + +### How Verification Works + +When checking if an investor is KYC verified: + +1. **Internal KYC checked first** (if `internalKYCActivated` is true) +2. **External KYC lists checked** (any grant wins) +3. **SSI credentials checked** (if configured) +4. **Result**: Investor passes if **any** method grants KYC + +## Required Roles + +To manage external KYC lists: + +- **KYC_MANAGER_ROLE**: Add/remove external KYC lists from token +- **DEFAULT_ADMIN_ROLE**: Full administrative access + +For the external KYC list contract itself: + +- Contract deployer controls who can add/remove investors + +See the [Roles and Permissions Guide](./roles-and-permissions.md) for details. + +## Smart Contract Interface + +External KYC list contracts must implement: + +```solidity +interface IExternalKycList { + function isGranted(address account) external view returns (bool); +} +``` + +Returns: + +- `true`: Account is KYC granted +- `false`: Account is not KYC granted + +## Best Practices + +### Security + +- **Regular audits**: Review list members periodically +- **Role separation**: Different admins for KYC management +- **Transaction verification**: Always verify addresses before adding + +### Compliance + +- **Documentation**: Maintain off-chain records of KYC verification +- **Revocation process**: Have clear procedures for revoking KYC +- **Data privacy**: External lists only store addresses and status, not PII + +### Performance + +- **Batch operations**: Use bulk import for large lists +- **Pagination**: Query large lists in pages to avoid timeouts +- **Shared lists**: Reuse KYC lists across multiple tokens to reduce costs + +## Troubleshooting + +### List Not Recognized + +If your token doesn't recognize an external KYC list: + +- Verify the list contract address is correct +- Ensure the list is properly linked to the token +- Check that you have KYC_MANAGER_ROLE +- Verify the list contract implements `IExternalKycList` interface + +### KYC Status Not Updating + +- Confirm the transaction was successfully mined +- Check that you have the required role +- Verify the investor address format is correct +- Ensure the external list is active (not removed) + +### Transaction Failed + +- **Insufficient HBAR**: Ensure wallet has enough for gas fees +- **Permission denied**: Verify you have the required role (KYC_MANAGER_ROLE) +- **Invalid address**: Check address format and checksum +- **Already added**: KYC list may already be linked to token + +## Use Cases + +### 1. Multi-Token KYC Management + +**Scenario**: Issuer has 10 different equity tokens + +**Solution**: + +- Create one external KYC list +- Link to all 10 tokens +- Manage KYC in one place + +**Benefits**: Single source of truth, reduced management overhead + +### 2. Regulatory Compliance + +**Scenario**: Financial regulator maintains approved investor list + +**Solution**: + +- Regulator deploys external KYC list +- Issuers link their tokens to regulator's list +- Regulator updates list as needed + +**Benefits**: Automatic compliance with regulatory changes + +### 3. Third-Party KYC Provider + +**Scenario**: Use external KYC verification service + +**Solution**: + +- KYC provider deploys external KYC list +- Provider updates list based on their verification +- Tokens link to provider's list + +**Benefits**: Professional KYC verification, reduced liability + +## Next Steps + +- [Managing External Control Lists](./managing-external-control-lists.md) - Whitelists and blacklists +- [SSI Integration Guide](./ssi-integration.md) - Use Terminal 3 for decentralized identity +- [Roles and Permissions](./roles-and-permissions.md) - Understand access control +- [Managing Compliance](./managing-compliance.md) - Overall compliance strategy + +## Related Resources + +- [Developer Guide: Smart Contracts](../developer-guides/contracts/index.md) +- [API Documentation](../api/index.md) diff --git a/docs/ats/user-guides/managing-external-pause-lists.md b/docs/ats/user-guides/managing-external-pause-lists.md new file mode 100644 index 000000000..020f94e00 --- /dev/null +++ b/docs/ats/user-guides/managing-external-pause-lists.md @@ -0,0 +1,499 @@ +--- +id: managing-external-pause-lists +title: Managing External Pause Lists +sidebar_label: External Pause Lists +sidebar_position: 6 +--- + +# Managing External Pause Lists + +Learn how to create and manage external pause contracts that can control multiple asset tokens simultaneously. + +## Overview + +External Pause Lists are on-chain smart contracts that enable coordinated pausing across multiple assets. Instead of pausing each token individually, institutions can pause or unpause hundreds or thousands of assets at once through a single external pause contract. + +### Key Features + +- **Centralized Pause Control**: Pause multiple assets simultaneously from a single contract +- **Institutional Use Cases**: Ideal for platforms managing multiple tokens +- **Emergency Response**: Quick response to security incidents or regulatory requirements +- **System Maintenance**: Coordinate upgrades across all linked assets +- **Legal Compliance**: Meet regulatory requirements for coordinated halts + +### Use Cases + +**Multi-Asset Platforms** + +- Tokenization platforms managing hundreds of securities +- Institutional issuers with multiple bond series +- Corporate entities with various equity classes + +**Emergency Situations** + +- Security vulnerabilities requiring immediate pause +- Regulatory investigations affecting all assets +- System-wide upgrades or maintenance + +**Coordinated Operations** + +- Platform-wide bug fixes across all assets +- Synchronized system updates +- Legal requirements for simultaneous halts + +## How External Pause Works + +### Architecture + +Each asset token can be linked to multiple external pause contracts. Before executing any operation, the asset checks: + +1. **Internal Pause**: Is the asset individually paused? +2. **External Pause Contracts**: Is any linked external pause contract active? + +If **either** the internal pause is enabled **or any** external pause returns `isPaused() = true`, the asset is paused. + +``` +β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” +β”‚ Asset Operation β”‚ +β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ + β”‚ + β–Ό + β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” + β”‚ Check Internal Pause β”‚ + β””β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ + β”‚ + β–Ό + β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” + β”‚ Check External Pause 1 β”‚ + β””β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ + β”‚ + β–Ό + β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” + β”‚ Check External Pause 2 β”‚ + β””β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ + β”‚ + β–Ό + β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” + β”‚ Any Pause Active? β”‚ + β”‚ YES β†’ Block β”‚ + β”‚ NO β†’ Allow β”‚ + β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ +``` + +### How External Pause Status Works + +When you create an external pause list, it has a simple activated/deactivated status: + +**Status: Activated** + +- All assets linked to this external pause list are **paused** +- No transfers or operations are allowed on linked assets +- Toggle to "Deactivated" to resume operations + +**Status: Deactivated** + +- All assets linked to this external pause list operate **normally** +- Transfers and operations are allowed (subject to other restrictions) +- Toggle to "Activated" to pause all linked assets + +## Prerequisites + +- ATS web application running and accessible +- Hedera wallet connected with sufficient HBAR +- **PAUSE_MANAGER_ROLE** on assets you want to link +- Understanding of your pause management requirements + +## Accessing External Pause Lists + +1. Navigate to the ATS web application +2. Click on **"External Pause"** in the sidebar menu + +![External Lists in Sidebar](../../images/ats-web-external-list.png) + +## Creating or Importing External Pause Lists + +You have two options to add an external pause list: + +### Option 1: Create New External Pause + +Creates a new external pause list by deploying a smart contract automatically. + +**Steps:** + +1. Click **"Create"** button +2. Provide list details: + - **List Name**: Descriptive name (e.g., "Platform Maintenance Pause", "Emergency Stop") + - **Description** (optional): Purpose of this pause mechanism +3. **Configure initial status** - you will be asked to choose: + - **Activated**: Anything linked to this pause list will be paused immediately + - **Deactivated**: Assets linked to this pause list will operate normally - **Recommended for initial setup** +4. Click **"Deploy"** or **"Create"** +5. Approve the transaction in your wallet +6. The contract is deployed and appears in your External Pause list + +**What happens:** + +- A new external pause contract is deployed on-chain +- You become the manager of this pause contract +- The contract address is displayed (0x... or 0.0.xxxxx) +- You can now link assets to this pause list + +**Understanding Activated vs Deactivated:** + +- **If created ACTIVATED**: Any asset you link to this pause list will be paused immediately. All operations on those assets will be blocked until you deactivate the pause list. +- **If created DEACTIVATED**: Assets linked to this pause list will continue to operate normally. You can activate the pause later when needed. + +> **Tip**: Start with "Deactivated" status, link your assets first, then activate when needed. + +### Option 2: Import Existing External Pause + +Use an existing external pause list by importing its contract ID. + +**Steps:** + +1. Click **"Import"** button +2. Enter the **Contract ID**: Hedera contract ID (0.0.xxxxx) or EVM address (0x...) +3. Click **"Import"** +4. Approve the transaction in your wallet +5. The external pause list appears in your list + +**Use cases:** + +- Use a pause contract deployed by another team member +- Connect to a platform-wide pause mechanism +- Share pause controls across multiple organizations + +> **Note**: When importing, you may have view-only access unless you have admin permissions on the imported contract. + +## Linking External Pause Lists to Tokens + +After creating or importing an external pause list, you need to link it to your security tokens. + +**Steps:** + +1. Navigate to your **security token** from the dashboard +2. Go to the **"Control"** tab +3. Select the **"External Pause"** section +4. Click **"Add External Pause"** button +5. Select the external pause list from the dropdown +6. Click **"Add"** to confirm +7. Approve the transaction in your wallet + +> **Required Role**: You must have **PAUSE_MANAGER_ROLE** on the token to link external pause lists. + +## Managing External Pause Contracts + +### View All External Pause Contracts + +The **External Pause** dashboard displays all your pause contracts: + +**Table Columns:** + +- **Address ID**: Contract address (0x... or 0.0.xxxxx) +- **Status**: Active (paused) or Inactive (not paused) +- **Toggle Icon**: Click to activate/deactivate pause +- **Delete Icon**: Remove the pause contract + +### Activate/Deactivate Pause + +**To Activate Pause** (pause all linked assets): + +1. Locate the pause contract in the table +2. Click the **toggle icon** to activate +3. Confirm the transaction in your wallet +4. All linked assets are immediately paused + +**To Deactivate Pause** (resume operations): + +1. Locate the pause contract in the table +2. Click the **toggle icon** to deactivate +3. Confirm the transaction in your wallet +4. All linked assets resume normal operations (if not paused internally) + +> **Warning**: Activating a pause affects **all** assets linked to this contract. Ensure you understand the impact before toggling. + +### Delete External Pause Contract + +**To Remove a Pause Contract:** + +1. Ensure all assets are unlinked from this contract +2. Click the **delete icon** next to the contract +3. Confirm deletion +4. Contract is removed from your list + +> **Important**: You cannot delete a pause contract while assets are still linked to it. Unlink all assets first. + +## Linking External Pause to Assets + +### During Asset Creation + +When creating a new equity or bond token, you can link external pause contracts: + +**In Step 3: External Lists Configuration** + +1. Navigate to the **Pause List** section +2. Select external pause contracts from the dropdown +3. Click **Add** to link to the new asset +4. Review linked pauses before deployment + +See the asset creation guides for details: + +- [Creating Equity Tokens](./creating-equity.md) +- [Creating Bond Tokens](./creating-bond.md) + +### After Asset Deployment + +You can link external pause contracts to existing assets: + +**Prerequisites:** + +- You must have **PAUSE_MANAGER_ROLE** on the asset + +**Steps:** + +1. Navigate to the asset details page +2. Click the **"External Pause"** tab (in Control Tabs section) +3. View currently linked external pause contracts + +**To Add External Pause Contracts:** + +1. Click **"Add external pause"** button +2. A modal appears with a dropdown +3. Select external pause contracts to link (can select multiple) +4. Click **"Add"** to confirm +5. Approve transaction in your wallet +6. Contracts are now linked to the asset + +**To Remove External Pause Contracts:** + +1. In the External Pause tab, select contracts from the list (left column checkboxes) +2. Click **"Remove items selected"** button +3. Confirm removal +4. Approve transaction in your wallet +5. Contracts are unlinked from the asset + +## Roles and Permissions + +### PAUSE_MANAGER_ROLE + +This role is required to manage external pause links on an asset: + +**Permissions:** + +- Add external pause contracts to the asset +- Remove external pause contracts from the asset +- View linked external pause contracts + +**Does NOT Grant:** + +- Ability to activate/deactivate the external pause contract (requires pause contract ownership) +- Ability to pause the asset internally (requires PAUSER_ROLE) + +### PAUSER_ROLE + +This is a **different role** that controls the asset's **internal pause**: + +**Permissions:** + +- Pause/unpause the asset individually +- Does not affect external pause contracts + +See [Roles and Permissions](./roles-and-permissions.md) for complete role details. + +## Best Practices + +### For Institutions Managing Multiple Assets + +**Use External Pause for:** + +- Platform-wide emergency stops +- Coordinated system maintenance +- Regulatory compliance across all assets +- Bug fixes affecting multiple tokens + +**Strategy:** + +1. Create one external pause contract per platform/category +2. Link all relevant assets to the contract +3. Use multi-signature wallet to control the pause +4. Document pause procedures and responsibilities +5. Test pause activation in non-production environment first + +### Security Recommendations + +**Access Control:** + +- Use multi-signature wallets for production pause contracts +- Limit pause contract control to authorized personnel only +- Implement time-locks for pause deactivation (if needed) + +**Testing:** + +- Test pause activation on testnet first +- Verify all linked assets respond correctly +- Document rollback procedures + +**Documentation:** + +- Maintain list of all assets linked to each pause contract +- Document who has authority to activate pause +- Create runbooks for emergency pause scenarios + +### Operational Guidelines + +**Before Activating Pause:** + +1. Notify stakeholders and users +2. Verify reason for pause is valid +3. Document the incident or maintenance reason +4. Ensure technical team is ready for resolution + +**During Pause:** + +1. Communicate status to users +2. Work on resolution/maintenance +3. Test fixes in isolated environment +4. Prepare for reactivation + +**After Deactivating Pause:** + +1. Verify all assets are operating correctly +2. Monitor for issues post-reactivation +3. Document resolution and lessons learned +4. Update procedures if needed + +## Common Scenarios + +### Scenario 1: Platform-Wide Upgrade + +**Situation:** You need to upgrade smart contracts for 500 tokens + +**Solution:** + +1. Link all 500 tokens to a single external pause contract +2. Activate pause before upgrade +3. Perform upgrades on all contracts +4. Test thoroughly +5. Deactivate pause to resume operations + +**Benefit:** Single action pauses all assets instead of 500 individual pauses + +### Scenario 2: Security Incident + +**Situation:** Security vulnerability discovered affecting all assets + +**Solution:** + +1. Immediately activate external pause (linked to all assets) +2. All assets halt operations instantly +3. Investigate and develop fix +4. Deploy fix to all affected contracts +5. Deactivate pause after verification + +**Benefit:** Instant response across entire platform + +### Scenario 3: Regulatory Investigation + +**Situation:** Regulator requires halt of all trading pending investigation + +**Solution:** + +1. Activate external pause linked to all regulated assets +2. Provide regulator with proof of halt +3. Maintain pause during investigation period +4. Deactivate when cleared by regulator + +**Benefit:** Compliance with regulatory requirements + +### Scenario 4: Multiple Pause Categories + +**Situation:** You have equities and bonds that need separate pause controls + +**Solution:** + +1. Create **External Pause A** for all equity tokens +2. Create **External Pause B** for all bond tokens +3. Link each asset type to its respective pause contract +4. Pause by category as needed + +**Benefit:** Granular control over different asset types + +## Common Issues + +### External Pause Not Working + +**Problem:** Activating external pause doesn't pause the asset + +**Solutions:** + +- Verify asset is correctly linked to the pause contract +- Check pause contract implements `IExternalPause` interface correctly +- Ensure `isPaused()` method returns `true` when activated +- Verify transaction was confirmed on-chain + +### Cannot Remove External Pause + +**Problem:** Unable to unlink external pause from asset + +**Solutions:** + +- Verify you have PAUSE_MANAGER_ROLE on the asset +- Check wallet has sufficient HBAR for transaction +- Ensure you're selecting the correct pause contract +- Try removing one contract at a time instead of bulk removal + +### Asset Still Paused After Deactivation + +**Problem:** Asset remains paused after deactivating external pause + +**Solutions:** + +- Check if asset is paused internally (separate from external pause) +- Verify no other linked external pause contracts are active +- Confirm deactivation transaction was successful +- Check pause contract status in block explorer + +### Wrong Assets Linked + +**Problem:** Accidentally linked wrong assets to pause contract + +**Solutions:** + +1. Navigate to each affected asset +2. Go to External Pause tab +3. Remove the incorrect pause contract link +4. Link to correct pause contract if needed + +## Monitoring and Auditing + +### Track Pause History + +**What to Monitor:** + +- When pause was activated/deactivated +- Who triggered the pause +- Which assets were affected +- Duration of pause periods + +**Tools:** + +- Blockchain explorer for transaction history +- Asset dashboard for current status +- External monitoring systems for alerts + +### Alert Configuration + +**Recommended Alerts:** + +- External pause activated +- External pause deactivated +- Asset linked to new external pause +- Asset unlinked from external pause + +## Next Steps + +- [Creating Equity Tokens](./creating-equity.md) - Link external pause during equity creation +- [Creating Bond Tokens](./creating-bond.md) - Link external pause during bond creation +- [Managing External KYC Lists](./managing-external-kyc-lists.md) - Investor verification lists +- [Managing External Control Lists](./managing-external-control-lists.md) - Transfer control lists +- [Roles and Permissions](./roles-and-permissions.md) - Understanding PAUSE_MANAGER_ROLE diff --git a/docs/ats/user-guides/roles-and-permissions.md b/docs/ats/user-guides/roles-and-permissions.md new file mode 100644 index 000000000..636356ac4 --- /dev/null +++ b/docs/ats/user-guides/roles-and-permissions.md @@ -0,0 +1,299 @@ +--- +id: roles-and-permissions +title: Roles and Permissions +sidebar_label: Roles and Permissions +sidebar_position: 7 +--- + +# Roles and Permissions + +ATS uses role-based access control (RBAC) to manage permissions for security token operations. + +## Core Administrative Roles + +### DEFAULT_ADMIN_ROLE + +- **Purpose**: Super administrator with full control +- **Can do**: Grant/revoke all roles, configure token settings, emergency controls +- **Who needs it**: Token issuer, primary administrator +- ⚠️ **Warning**: Unrestricted access - use multi-signature wallets in production + +### TREX_OWNER_ROLE + +- **Purpose**: Owner of ERC-3643 (T-REX) compliant tokens +- **Can do**: Configure compliance modules, manage identity registry, update token info +- **Who needs it**: Compliance officer for ERC-3643 tokens + +## Token Operations + +### ISSUER_ROLE + +- **Purpose**: Manage token supply and distribution +- **Can do**: Mint/burn tokens, issue to investors, manage supply within cap +- **Use cases**: Initial distribution, funding rounds, token buybacks + +### CORPORATE_ACTION_ROLE + +- **Purpose**: Execute corporate actions +- **Can do**: Distribute dividends (equity), process coupon payments (bonds), create snapshots +- **Use cases**: Quarterly dividends, bond coupons, special distributions + +### BOND_MANAGER_ROLE + +- **Purpose**: Manage bond-specific operations +- **Can do**: Execute coupon payments, process maturity redemption, manage bond lifecycle +- **Use cases**: Bond interest payments, principal repayment at maturity + +### MATURITY_REDEEMER_ROLE + +- **Purpose**: Handle bond maturity redemptions +- **Can do**: Execute maturity redemption, process principal repayment, burn redeemed bonds +- **Use cases**: Bond maturity processing, principal repayment + +## Compliance & KYC + +### KYC_ROLE + +- **Purpose**: Manage investor verification +- **Can do**: Grant/revoke KYC, update investor attributes, mark as accredited +- **Use cases**: Investor onboarding, annual renewal, revocation + +### KYC_MANAGER_ROLE + +- **Purpose**: Manage external KYC lists +- **Can do**: Add/remove external KYC lists, link to token, query status +- **Use cases**: Third-party KYC providers, shared investor lists + +### INTERNAL_KYC_MANAGER_ROLE + +- **Purpose**: Control internal KYC system +- **Can do**: Enable/disable internal KYC validation flag +- **Use cases**: Switch between internal and external KYC + +### SSI_MANAGER_ROLE + +- **Purpose**: Manage Self-Sovereign Identity integration +- **Can do**: Set revocation registry, add/remove credential issuers +- **Use cases**: Terminal 3 integration, SSI configuration + +### CONTROL_LIST_ROLE + +- **Purpose**: Manage internal transfer restrictions +- **Can do**: Add/remove addresses to whitelist/blacklist +- **Use cases**: Geographic restrictions, investor eligibility + +### CONTROL_LIST_MANAGER_ROLE + +- **Purpose**: Manage external control lists +- **Can do**: Add/remove external control lists, configure settings +- **Use cases**: Shared regulatory blacklists, multi-token whitelists + +## Security & Freeze + +### PAUSER_ROLE + +- **Purpose**: Emergency pause functionality +- **Can do**: Pause/unpause all token transfers +- **Use cases**: Security incidents, regulatory holds, contract upgrades + +### PAUSE_MANAGER_ROLE + +- **Purpose**: Manage external pause mechanisms +- **Can do**: Add/remove external pause sources, coordinate cross-token pauses +- **Use cases**: Platform-wide pauses, coordinated security responses + +### FREEZE_MANAGER_ROLE + +- **Purpose**: Freeze specific accounts or amounts +- **Can do**: Freeze/unfreeze accounts, freeze token amounts, query freeze status +- **Use cases**: Court orders, suspicious activity, lock-up enforcement + +### LOCKER_ROLE + +- **Purpose**: Create time-locked holdings +- **Can do**: Lock tokens for periods, create vesting schedules, release locked tokens +- **Use cases**: Employee vesting, insider lock-ups, regulatory holding periods + +## Administrative Operations + +### CONTROLLER_ROLE + +- **Purpose**: Forced transfers and balance adjustments +- **Can do**: Force transfer tokens, adjust balances, execute regulatory transfers +- **Use cases**: Court orders, inheritance, lost key recovery +- ⚠️ **Warning**: Powerful role - requires authorization + +### ADJUSTMENT_BALANCE_ROLE + +- **Purpose**: Adjust token balances +- **Can do**: Modify account balances directly +- **Use cases**: Corrections, regulatory adjustments, special situations + +### DOCUMENTER_ROLE + +- **Purpose**: Manage token documentation +- **Can do**: Update documents (prospectus), add document hashes, manage disclosures +- **Use cases**: Legal documentation updates, investor relations + +### CAP_ROLE + +- **Purpose**: Manage token supply cap +- **Can do**: Set maximum supply, update cap limits +- **Use cases**: Initial supply cap, authorized capital increases + +### SNAPSHOT_ROLE + +- **Purpose**: Create balance snapshots +- **Can do**: Create snapshots, record holder positions at specific times +- **Use cases**: Dividend record dates, voting snapshots, reporting + +## Clearing & Settlement + +### CLEARING_ROLE + +- **Purpose**: Manage clearing operations +- **Can do**: Create holds, execute clearing, coordinate with clearing houses +- **Use cases**: T+2 settlement, clearing house integration + +### CLEARING_VALIDATOR_ROLE + +- **Purpose**: Validate clearing operations +- **Can do**: Approve clearing, validate settlement instructions +- **Use cases**: Clearing supervision, settlement auditing + +## Payment Distribution + +### PROCEED_RECIPIENT_MANAGER_ROLE + +- **Purpose**: Manage payment recipients +- **Can do**: Configure who receives proceeds from corporate actions +- **Use cases**: Dividend recipients, bond interest recipients + +## Specialized Roles + +### AGENT_ROLE + +- **Purpose**: General operational agent +- **Can do**: Execute transfers on behalf of others, routine administrative tasks +- **Use cases**: Transfer agents, operational team members + +### PROTECTED_PARTITIONS_ROLE + +- **Purpose**: Manage protected token partitions +- **Can do**: Create protected partitions, manage partition rules +- **Use cases**: Advanced partition management + +### PROTECTED_PARTITIONS_PARTICIPANT_ROLE + +- **Purpose**: Participate in protected partitions +- **Can do**: Access protected partitions, transfer within partitions +- **Use cases**: Partition access control + +### WILD_CARD_ROLE + +- **Purpose**: Custom permissions +- **Can do**: Variable based on token configuration +- **Use cases**: Custom implementations only + +## Managing Roles + +### Granting a Role + +1. Navigate to token **Settings** β†’ **Roles** +2. Click **Grant Role** +3. Select role type from dropdown +4. Enter account address +5. Confirm transaction + +**Requirements**: Must have DEFAULT_ADMIN_ROLE + +### Revoking a Role + +1. Go to **Settings** β†’ **Roles** +2. Find account in role members list +3. Click **Revoke** +4. Confirm transaction + +### Viewing Role Members + +1. Navigate to **Settings** β†’ **Roles** +2. Select role from dropdown +3. View list of accounts with that role + +## Common Role Combinations + +**Token Issuer Admin**: + +``` +DEFAULT_ADMIN_ROLE + ISSUER_ROLE + CAP_ROLE +``` + +**Compliance Officer**: + +``` +KYC_ROLE + CONTROL_LIST_ROLE + FREEZE_MANAGER_ROLE + PAUSER_ROLE +``` + +**Corporate Actions Team**: + +``` +CORPORATE_ACTION_ROLE + SNAPSHOT_ROLE +``` + +**Bond Administrator**: + +``` +BOND_MANAGER_ROLE + MATURITY_REDEEMER_ROLE + CORPORATE_ACTION_ROLE +``` + +**External List Manager**: + +``` +KYC_MANAGER_ROLE + CONTROL_LIST_MANAGER_ROLE + PAUSE_MANAGER_ROLE +``` + +## Best Practices + +### Security + +- **Least privilege**: Grant minimum necessary roles +- **Multi-signature**: Use multi-sig for admin roles +- **Regular audits**: Review role assignments quarterly +- **Role separation**: Different people for different roles + +### Operational + +- **Document assignments**: Maintain off-chain records +- **Backup admins**: Multiple DEFAULT_ADMIN_ROLE holders +- **Emergency procedures**: Clear process for role grants/revokes +- **Role rotation**: Periodic review and rotation + +### Compliance + +- **Audit trail**: All role changes are on-chain +- **Regulatory alignment**: Match regulatory requirements +- **Clear accountability**: Defined responsibilities per role +- **Segregation of duties**: Prevent conflicts of interest + +## Troubleshooting + +### Permission Denied + +- Check you have the required role +- Verify role was granted (check transaction) +- Confirm using correct account +- Check role wasn't revoked + +### Cannot Grant Role + +- Only DEFAULT_ADMIN_ROLE can grant roles +- Check recipient address format +- Verify role not already assigned +- Ensure sufficient HBAR for gas + +## Next Steps + +- [Creating Equity](./creating-equity.md) - Create your first token +- [Managing External KYC Lists](./managing-external-kyc-lists.md) - Use KYC_MANAGER_ROLE +- [Managing External Control Lists](./managing-external-control-lists.md) - Use CONTROL_LIST_MANAGER_ROLE +- [SSI Integration](./ssi-integration.md) - Use SSI_MANAGER_ROLE diff --git a/docs/ats/user-guides/ssi-integration.md b/docs/ats/user-guides/ssi-integration.md new file mode 100644 index 000000000..0df2c372f --- /dev/null +++ b/docs/ats/user-guides/ssi-integration.md @@ -0,0 +1,171 @@ +--- +id: ssi-integration +title: SSI Integration with Terminal 3 +sidebar_label: SSI Integration +sidebar_position: 6 +--- + +# SSI Integration + +Learn how to configure Self-Sovereign Identity (SSI) for your security token. + +## Overview + +Self-Sovereign Identity (SSI) is an **optional** advanced feature that enables decentralized identity verification using verifiable credentials (VCs). SSI allows investors to control their own identity data while maintaining regulatory compliance. + +> **Note**: SSI integration is **optional**. You can use Internal KYC or External KYC Lists instead. See [Managing Compliance](./managing-compliance.md) for alternatives. + +## What is SSI Configuration? + +From **Control β†’ SSI Manager**, you can configure two things: + +1. **Revocation Registry Address**: Contract address that tracks revoked credentials +2. **Issuers**: Accounts authorized to issue Verifiable Credentials for KYC approval + +## Prerequisites + +- Security token deployed +- **SSI_MANAGER_ROLE** assigned to your account +- Revocation registry address (from your SSI provider) + +## Accessing SSI Manager + +1. Navigate to your security token in the dashboard +2. Select **Admin View (green)** +3. Go to **Control** β†’ **SSI Manager** + +## Step 1: Set Revocation Registry Address + +The revocation registry (also known as **Identity Registry** in ERC-3643) is a smart contract that verifies investor eligibility and tracks which credentials have been invalidated. + +### What is the Identity Registry? + +The Identity Registry is part of the **ERC-3643 standard** (T-REX protocol). It provides: + +- **Identity verification**: Checks if an investor's identity is valid +- **Credential revocation**: Tracks invalidated credentials +- **Eligibility checks**: Verifies investor meets compliance requirements + +During token transfers and mints, the smart contract calls `isVerified(address)` on this registry to check investor eligibility. + +### When to Configure + +You have two options: + +**Option 1: During token creation** (recommended) + +- Configure the Identity Registry address when creating your equity or bond token +- See [Creating Equity](./creating-equity.md) or [Creating Bond](./creating-bond.md) guides + +**Option 2: After token creation** + +- If you didn't configure it during creation, you can set it here from **Control β†’ SSI Manager** + +### How to Configure + +1. In **Control** β†’ **SSI Manager**, look for **"Revocation Registry"** or **"Identity Registry"** section +2. Click **"Set Revocation Registry"** or **"Configure"** +3. Enter the Identity Registry contract address +4. Confirm the transaction + +**Where to get the address:** + +- Provided by your SSI provider (e.g., Terminal 3) +- Different addresses for testnet and mainnet +- For Hedera Testnet: `0x77Fb69B24e4C659CE03fB129c19Ad591374C349e` (example) + +> **Important**: The Identity Registry address is provided by your SSI provider. Contact them to obtain the correct address for your network. + +> **Note**: Only accounts with **T_REX_OWNER** or **SSI_MANAGER_ROLE** can configure the Identity Registry. + +## Step 2: Manage Issuers + +Issuers are accounts authorized to issue Verifiable Credentials that grant internal KYC approval. + +### Add an Issuer + +1. From **Control** β†’ **SSI Manager**, locate the **"Issuers"** section +2. Click **"Add Issuer"** +3. Enter the **account address** (Hedera ID or EVM address) +4. Confirm the transaction + +**Important**: You are adding an **account address** as an issuer. This account will have permission to upload Verifiable Credentials to grant KYC. + +### View Issuers + +In the **Control β†’ SSI Manager** section, you can view: + +- List of all configured issuers +- Account addresses +- When they were added + +### Remove an Issuer + +1. In **Control** β†’ SSI Manager\*\*, find the issuer in the list +2. Click **"Remove"** or the delete icon +3. Confirm the transaction + +## How SSI KYC Works + +Once you've configured the revocation registry and issuers: + +1. **Issuers can grant KYC** by uploading Verifiable Credentials from **Control β†’ KYC** (same as internal KYC) +2. **Token checks credentials**: During transfers, the token verifies the credential against: + - Issuer is on the approved issuer list (configured in SSI Manager) + - Credential is not revoked (checked against revocation registry) +3. **If valid**: Transfer proceeds +4. **If revoked or invalid**: Transfer is blocked + +## Relationship with Internal KYC + +SSI configuration works with the internal KYC system: + +- **Issuers configured here** can upload Verifiable Credentials to grant internal KYC +- **Revocation registry** is checked to validate those credentials haven't been revoked +- **KYC granting** still happens from **Control β†’ KYC** (see [Managing Compliance](./managing-compliance.md)) + +## Required Roles + +- **SSI_MANAGER_ROLE**: Required to configure revocation registry and manage issuers + +See [Roles and Permissions](./roles-and-permissions.md) for more details. + +## Troubleshooting + +### Cannot Set Revocation Registry + +**Problem**: Transaction fails when setting revocation registry + +**Solutions**: + +- Verify you have **SSI_MANAGER_ROLE** +- Check the contract address is valid +- Ensure sufficient HBAR for transaction + +### Cannot Add Issuer + +**Problem**: Transaction fails when adding issuer + +**Solutions**: + +- Verify you have **SSI_MANAGER_ROLE** +- Check the account address format is correct +- Ensure the address is not already an issuer + +## Test Addresses (Hedera Testnet) + +For testing SSI configuration on Hedera Testnet: + +- **Revocation Registry**: `0x77Fb69B24e4C659CE03fB129c19Ad591374C349e` +- **DID Registry**: `0x312C15922c22B60f5557bAa1A85F2CdA4891C39a` + +> **Note**: For production, obtain the correct revocation registry address from your SSI provider (e.g., Terminal 3). + +## Next Steps + +- [Managing Compliance](./managing-compliance.md) - Learn about internal KYC management +- [Roles and Permissions](./roles-and-permissions.md) - Understand SSI_MANAGER_ROLE + +--- + +> **Remember**: SSI is **optional**. For simpler KYC management, see [Managing Compliance](./managing-compliance.md) for internal and external KYC options. diff --git a/docs/ats/user-guides/token-lifecycle.md b/docs/ats/user-guides/token-lifecycle.md new file mode 100644 index 000000000..d3c00448a --- /dev/null +++ b/docs/ats/user-guides/token-lifecycle.md @@ -0,0 +1,165 @@ +--- +id: token-lifecycle +title: Token Lifecycle Management +sidebar_label: Token Lifecycle +sidebar_position: 5 +--- + +# Token Lifecycle Management + +Learn how to manage token operations including transfers, pausing, freezing, and redemption. + +## Overview + +Token lifecycle operations: + +- **Transfer**: Move tokens between addresses +- **Pause**: Temporarily halt all transfers +- **Freeze**: Freeze specific addresses +- **Burn/Redeem**: Remove tokens from circulation +- **Mint**: Issue additional tokens (if configured) + +![ATS Dashboard](../../images/ats-web-dashboard.png) + +## Token Transfers + +### Manual Transfer + +Execute transfers from issuer account: + +1. Navigate to token dashboard +2. Select "Transfer Tokens" +3. Enter recipient address and amount +4. Approve transaction + +### Transfer Restrictions + +Transfers are subject to: + +- Compliance rules (KYC, country restrictions) +- Token pause status +- Account freeze status +- Custom transfer rules + +## Pausing Tokens + +Temporarily halt all token transfers: + +1. Navigate to token settings +2. Select "Pause Token" +3. Confirm action +4. All transfers blocked until unpaused + +Use cases: + +- Emergency situations +- System maintenance +- Regulatory compliance +- Security incidents + +## Freezing Accounts + +Freeze specific addresses: + +1. Go to "Holder Management" +2. Select address to freeze +3. Click "Freeze Account" +4. Frozen account cannot send or receive tokens + +Use cases: + +- Suspicious activity +- Regulatory requirements +- Dispute resolution +- Lost key recovery + +## Burning / Redemption + +Remove tokens from circulation: + +### Full Redemption + +1. Select "Redeem Tokens" +2. Enter amount to burn +3. Tokens permanently removed + +### Full Redeem at Maturity (Bonds) + +For bond tokens that have reached maturity, you can redeem all tokens for a specific holder at once: + +1. Navigate to your bond token +2. Select **Admin View (green)** +3. Go to **Force Redeem** section +4. Enable **"Full Redeem at Maturity"** checkbox (only available when maturity date has passed) +5. Select the holder account +6. Click **"Redeem All"** +7. Approve the transaction + +This operation redeems all tokens held by the specified account across all partitions. + +### Partial Redemption + +For bonds or special circumstances: + +1. Specify redemption amount per holder +2. Execute pro-rata redemption +3. Remaining tokens stay in circulation + +### Redeem at Maturity by Partition + +For multi-partition bonds, redeem tokens from a specific partition: + +1. Navigate to your bond token +2. Select the partition to redeem from +3. Specify the amount and holder +4. Execute the redemption + +## Minting Additional Tokens + +If mintable supply configured: + +1. Navigate to "Mint Tokens" +2. Enter amount to mint +3. Specify recipient or add to issuer balance +4. Approve transaction + +⚠️ **Note**: Many regulatory frameworks restrict additional issuance. + +## Token Information Updates + +Update token metadata: + +- Company information +- Contact details +- Documentation URLs +- Logo and branding + +Cannot change: + +- Token name and symbol +- Total supply (unless mintable) +- Contract address + +## Monitoring and Reports + +View token activity: + +- Transfer history +- Holder distribution +- Corporate action history +- Compliance events + +Export reports for: + +- Cap table management +- Regulatory filings +- Investor communications +- Audit purposes + +## Next Steps + +- [Corporate Actions](./corporate-actions.md) - Execute dividends and coupons +- [Managing Compliance](./managing-compliance.md) - KYC and restrictions +- [Developer Guide](../developer-guides/index.md) - Technical details + +_This guide is under development. More detailed content coming soon._ diff --git a/docs/ats/user-guides/token-operations.md b/docs/ats/user-guides/token-operations.md new file mode 100644 index 000000000..dad68d1db --- /dev/null +++ b/docs/ats/user-guides/token-operations.md @@ -0,0 +1,293 @@ +--- +id: token-operations +title: Token Operations +sidebar_label: Token Operations +sidebar_position: 2 +--- + +# Token Operations + +Comprehensive guide to all available operations for equity and bond security tokens. + +## Overview + +ATS provides comprehensive operations for managing security tokens based on ERC-1400 and ERC-3643 standards: + +- **Common Operations**: Mint, Force Transfer, Force Redeem, Pause +- **ERC-3643 Operations**: Freeze +- **ERC-1400 Operations**: Hold, Clearing, Protected Partitions, Cap + +![ATS Operations](../../images/ats-web-operations.png) + +## Common Operations + +### Mint (Issue) Tokens + +Create new tokens and assign them to an account. + +**When to use**: Initial distribution, employee grants, additional issuance + +**Requirements**: + +- **ISSUER_ROLE** permission +- Recipient must have valid KYC +- Recipient must pass control list checks +- Must not exceed max supply (if set) + +**How to**: + +1. Navigate to your token +2. Select **Admin View (green)** +3. Go to **Operations** β†’ **Mint** +4. Enter recipient address and amount +5. Approve transaction + +### Force Transfer + +Transfer tokens from one account to another on behalf of the source account. + +**When to use**: Court orders, regulatory compliance, error corrections, institutional custody operations + +**Requirements**: + +- **CONTROLLER_ROLE** or **PARTICIPANT_ROLE** or **PARTITION_RESTRICTION_WILD_CARD_ROLE** +- Both sender and receiver must have valid KYC +- Must pass control list checks + +**Form Fields**: + +- **Source Account\*** - Hedera account ID (0.0.xxxxx) or EVM address (0x...) from which tokens will be transferred +- **Account to Transfer\*** - Destination account that will receive tokens +- **Amount\*** - Number of tokens to transfer + +**How to**: + +1. Navigate to your token +2. Select **Admin View (green)** +3. Go to **Operations** β†’ **Force Transfer** +4. Fill in the form: + - Enter the **Source Account** to transfer from + - Enter the **Account to Transfer** (destination) + - Enter the **Amount** of tokens +5. Click **"Submit"** or **"Transfer"** +6. Approve the transaction in your wallet + +> **Important**: Source and destination accounts must pass all compliance checks (KYC, control lists, etc.). + +### Force Redeem + +Redeem (burn) tokens from a specific account. + +**When to use**: Regulatory compliance, mandatory buybacks, token recalls, bond maturity redemptions + +**Requirements**: + +- **CONTROLLER_ROLE** or **PARTICIPANT_ROLE** or **PARTITION_RESTRICTION_WILD_CARD_ROLE** +- Target account must exist + +**Form Fields**: + +- **Source Account\*** - Hedera account ID (0.0.xxxxx) or EVM address (0x...) from which tokens will be redeemed +- **Amount\*** - Number of tokens to redeem +- **Redeem all amount after maturity date** (Checkbox) - For bond tokens, redeem all tokens after the bond's maturity date + +**How to**: + +1. Navigate to your token +2. Select **Admin View (green)** +3. Go to **Operations** β†’ **Force Redeem** +4. Fill in the form: + - Enter the **Source Account** to redeem from + - Enter the **Amount** of tokens to redeem + - (Optional) Check **"Redeem all amount after maturity date"** for bonds +5. Click **"Submit"** or **"Redeem"** +6. Approve the transaction in your wallet + +> **Note**: For bond tokens, the "Redeem all amount after maturity date" option allows full redemption once the bond matures. + +### Pause Token + +Temporarily halt all token transfers globally. + +**When to use**: Emergency situations, security incidents, system maintenance + +**Requirements**: + +- **PAUSER_ROLE** permission + +**How to pause**: + +1. Navigate to your token +2. Select **Admin View (green)** +3. Go to **Management** β†’ **Danger Zone** +4. Click **"Pause Security Token"** +5. Approve transaction + +**How to unpause**: + +1. Go to **Management** β†’ **Danger Zone** +2. Click **"Unpause Security Token"** +3. Approve transaction + +**Effect**: All transfers are blocked until token is unpaused. Minting and burning may still be possible depending on configuration. + +## ERC-3643 Operations + +### Freeze Account + +Prevent an account from transferring or receiving tokens. + +**When to use**: Suspicious activity, regulatory holds, dispute resolution + +**Requirements**: + +- **FREEZE_ROLE** permission + +**How to freeze** (Option 1 - via Operations): + +1. Navigate to your token +2. Select **Admin View (green)** +3. Go to **Operations** β†’ **ERC-3643** β†’ **Freeze** +4. Enter account address +5. Enter amount to freeze (or full balance) +6. Approve transaction + +**How to freeze** (Option 2 - via Control): + +1. Navigate to your token +2. Select **Admin View (green)** +3. Go to **Control** β†’ **Freeze** +4. Enter account address +5. Enter amount to freeze (or full balance) +6. Approve transaction + +**How to unfreeze**: + +1. Go to **Control** β†’ **Freeze** (or **Operations** β†’ **ERC-3643** β†’ **Freeze**) +2. Find the frozen account +3. Click **"Unfreeze"** +4. Enter amount to unfreeze +5. Approve transaction + +## ERC-1400 Operations + +### Hold Operations + +Create temporary locks on tokens that can be executed or released. + +**When to use**: Escrow, conditional transfers, payment holds + +**Requirements**: + +- Holder must initiate +- Sufficient unfrozen balance +- Hold must specify notary (can execute hold) + +**How to create a hold**: + +1. Navigate to your token +2. Select **Holder View (blue)** +3. Go to **Operations** β†’ **Hold** +4. Enter: + - Recipient address + - Notary address (who can execute) + - Amount + - Lock time (seconds) + - Partition (default or custom) +5. Approve transaction + +**Hold lifecycle**: + +1. **Created**: Tokens locked, cannot be transferred +2. **Executed**: Notary transfers tokens to recipient +3. **Released**: Notary returns tokens to holder +4. **Expired**: Hold expires, tokens automatically released + +See [Hold Operations Guide](./hold-operations.md) for details. + +### Clearing Operations + +Two-step transfer process requiring approval from a designated clearing agent. + +**When to use**: Regulatory oversight, trade settlement, compliance validation + +**Requirements**: + +- **Clearing mode** must be activated +- **CLEARING_VALIDATOR_ROLE** assigned to clearing agents +- Sender initiates, validator approves + +**How to use clearing**: + +1. **Activate clearing mode** (one-time setup): + - Go to **Management** β†’ **Danger Zone** + - Click **"Activate Clearing"** + - Approve transaction + +2. **Create clearing transfer**: + - Go to **Operations** β†’ **Clearing** + - Enter recipient and amount + - Submit for clearing + +3. **Approve clearing** (clearing agent): + - Clearing agent reviews request + - Approves or cancels the transfer + +See [Clearing Operations Guide](./clearing-operations.md) for details. + +### Cap Management + +Set maximum token supply to prevent over-issuance. + +**When to use**: Fixed supply tokens, regulatory requirements + +**Requirements**: + +- **ISSUER_ROLE** or **DEFAULT_ADMIN_ROLE** + +**How to set cap**: + +1. Navigate to your token +2. Go to **Management** β†’ **Cap** +3. Enter maximum supply +4. Approve transaction + +**Effect**: Minting operations will fail if they would exceed the cap. + +**How to view cap**: + +- Go to token details +- Check **"Maximum Supply"** field + +## Permission Requirements + +| Operation | Required Role | +| ------------------------ | -------------------------------------------------------------------------- | +| Mint | ISSUER_ROLE | +| Force Transfer | CONTROLLER_ROLE, PARTICIPANT_ROLE, or PARTITION_RESTRICTION_WILD_CARD_ROLE | +| Force Redeem | CONTROLLER_ROLE, PARTICIPANT_ROLE, or PARTITION_RESTRICTION_WILD_CARD_ROLE | +| Freeze Account | FREEZE_ROLE | +| Pause Token | PAUSER_ROLE | +| Create Hold | Token holder (self) | +| Execute Hold | Notary address | +| Create Clearing Transfer | Token holder (self) | +| Approve Clearing | CLEARING_VALIDATOR_ROLE | +| Set Cap | ISSUER_ROLE or DEFAULT_ADMIN_ROLE | +| Activate Clearing | ISSUER_ROLE or DEFAULT_ADMIN_ROLE | + +See [Roles and Permissions Guide](./roles-and-permissions.md) for more details on role management. + +## Operation Guides + +For detailed step-by-step instructions: + +- [Hold Operations](./hold-operations.md) - Detailed hold lifecycle management +- [Clearing Operations](./clearing-operations.md) - Two-step transfer process +- [Corporate Actions](./corporate-actions.md) - Dividends, coupons, splits, voting +- [Managing KYC & Compliance](./managing-compliance.md) - KYC verification + +## Next Steps + +- [Roles and Permissions](./roles-and-permissions.md) - Grant access to team members +- [Corporate Actions](./corporate-actions.md) - Execute dividends and coupons +- [Updating Configuration](./updating-configuration.md) - Upgrade token functionality diff --git a/docs/ats/user-guides/updating-configuration.md b/docs/ats/user-guides/updating-configuration.md new file mode 100644 index 000000000..0db03cf80 --- /dev/null +++ b/docs/ats/user-guides/updating-configuration.md @@ -0,0 +1,187 @@ +--- +id: updating-configuration +title: Updating Token Configuration +sidebar_label: Updating Configuration +sidebar_position: 13 +--- + +# Updating Token Configuration + +Learn how to update your token's configuration to point to a specific Business Logic Resolver and configuration version. + +## Overview + +The configuration settings determine which Business Logic Resolver (BLR) your token uses and which version of the business logic to execute. This allows you to upgrade your token's functionality without redeploying the token contract itself. + +## Accessing Configuration Settings + +1. Navigate to your token from the dashboard +2. Select **Admin View (green)** +3. Go to **Management** tab +4. Click on **Configuration** + +## Configuration Fields + +### Resolver ID + +**What it is**: The Hedera Contract ID of the Business Logic Resolver (BLR) + +**Format**: Hedera ID format (e.g., `0.0.7707874`) + +**Purpose**: Points your token to the registry of available business logic implementations + +**Example**: `0.0.7707874` + +### Configuration ID + +**What it is**: The unique identifier for the specific configuration set to use + +**Format**: 32-byte hexadecimal format (e.g., `0x0000000000000000000000000000000000000000000000000000000000000001`) + +**Purpose**: Specifies which configuration profile to load from the resolver + +**Example**: `0x0000000000000000000000000000000000000000000000000000000000000001` + +### Configuration Version + +**What it is**: The version number of the business logic to use + +**Format**: Integer (0 or higher) + +**Special behavior**: + +- **Version 0**: Always uses the latest version available in the resolver +- **Version 1+**: Uses the specific version number + +**Recommendation**: Use `0` to automatically benefit from updates + +**Example**: `0` + +## Example Configuration + +``` +Configuration Details + +Resolver ID +0.0.7707874 + +Configuration ID +0x0000000000000000000000000000000000000000000000000000000000000001 + +Configuration Version +0 +``` + +## How to Update Configuration + +1. Navigate to **Management** β†’ **Configuration** +2. Click **"Edit Configuration"** or **"Update"** +3. Enter the configuration values: + - **Resolver ID**: Enter the Hedera ID of the BLR (e.g., `0.0.7707874`) + - **Configuration ID**: Enter the configuration ID in hex format (e.g., `0x0000000000000000000000000000000000000000000000000000000000000001`) + - **Configuration Version**: Enter version number (use `0` for latest) +4. Click **"Save"** or **"Update Configuration"** +5. Approve the transaction in your wallet +6. Wait for confirmation + +## When to Update Configuration + +### Update Resolver ID + +- When a new Business Logic Resolver is deployed +- When migrating to a different resolver instance +- When instructed by ATS platform updates + +### Update Configuration ID + +- When switching to a different configuration profile +- When changing jurisdiction-specific settings +- When adopting new compliance features + +### Update Configuration Version + +- To upgrade to newer business logic features +- To roll back to a previous version if needed +- To lock to a specific version for stability + +## Version Strategy + +### Using Version 0 (Latest) + +**Advantages**: + +- Automatically receive feature updates +- Bug fixes applied automatically +- Always have latest improvements + +**Use when**: + +- You want automatic updates +- Development/testing environments +- Trust the resolver maintainer + +### Using Specific Version (1+) + +**Advantages**: + +- Predictable behavior +- No unexpected changes +- Full control over upgrades + +**Use when**: + +- Production environments requiring stability +- Regulatory audit requirements +- Need to test upgrades before applying + +## Requirements + +- **CONFIGURATOR_ROLE** permission +- Resolver ID must point to a valid deployed resolver contract +- Configuration ID must exist in the resolver + +## Verification + +After updating configuration, verify the changes: + +1. Check the **Configuration Details** section +2. Confirm all values are correct +3. Test a basic operation (e.g., view token details) +4. Monitor for any errors in token operations + +## Common Issues + +### Invalid Resolver ID + +**Error**: "Resolver contract not found" or similar + +**Solution**: + +- Verify the Resolver ID is correct +- Check that the resolver is deployed on the current network (testnet/mainnet) +- See [Deployed Addresses](../developer-guides/contracts/deployed-addresses.md) for current resolver addresses + +### Invalid Configuration ID + +**Error**: "Configuration not found" + +**Solution**: + +- Verify the configuration ID format is correct (32-byte hex) +- Ensure the configuration exists in the resolver +- Contact ATS support for valid configuration IDs + +### Insufficient Permissions + +**Error**: "Caller does not have CONFIGURATOR_ROLE" + +**Solution**: + +- Verify you have CONFIGURATOR_ROLE assigned +- See [Roles and Permissions](./roles-and-permissions.md) for how to grant roles + +## Related Resources + +- [Deployed Addresses](../developer-guides/contracts/deployed-addresses.md) - Current resolver addresses +- [Roles and Permissions](./roles-and-permissions.md) - Understanding role requirements +- [Developer Guide: Upgrading](../developer-guides/contracts/upgrading.md) - Technical details on upgrades diff --git a/docs/images/ats-web-create-security.png b/docs/images/ats-web-create-security.png new file mode 100644 index 000000000..d085503d7 Binary files /dev/null and b/docs/images/ats-web-create-security.png differ diff --git a/docs/images/ats-web-dashboard.png b/docs/images/ats-web-dashboard.png new file mode 100644 index 000000000..a13a41638 Binary files /dev/null and b/docs/images/ats-web-dashboard.png differ diff --git a/docs/images/ats-web-external-list.png b/docs/images/ats-web-external-list.png new file mode 100644 index 000000000..9ccb71059 Binary files /dev/null and b/docs/images/ats-web-external-list.png differ diff --git a/docs/images/ats-web-operations.png b/docs/images/ats-web-operations.png new file mode 100644 index 000000000..78de1e0d8 Binary files /dev/null and b/docs/images/ats-web-operations.png differ diff --git a/docs/images/ats-web-tabs.png b/docs/images/ats-web-tabs.png new file mode 100644 index 000000000..3aad2e960 Binary files /dev/null and b/docs/images/ats-web-tabs.png differ diff --git a/docs/images/ats-web.png b/docs/images/ats-web.png new file mode 100644 index 000000000..b5075f650 Binary files /dev/null and b/docs/images/ats-web.png differ diff --git a/docs/images/mp-web.png b/docs/images/mp-web.png new file mode 100644 index 000000000..7396e81fa Binary files /dev/null and b/docs/images/mp-web.png differ diff --git a/docs/index.md b/docs/index.md new file mode 100644 index 000000000..2a0e6e60c --- /dev/null +++ b/docs/index.md @@ -0,0 +1,74 @@ +# Asset Tokenization Studio Documentation + +Welcome to the Asset Tokenization Studio documentation. This covers both **Asset Tokenization Studio (ATS)** and **Mass Payout** systems. + +## Asset Tokenization Studio (ATS) + +Documentation for creating and managing security tokens (equities and bonds) on Hedera. + +- **[Introduction & Overview](ats/intro.md)** - Complete overview of ATS features and architecture + +### Getting Started + +- [Quick Start Guide](ats/getting-started/quick-start.md) +- [Full Setup Guide](ats/getting-started/full-setup.md) + +### User Guides + +- [Creating Bonds](ats/user-guides/creating-bond.md) +- [Creating Equities](ats/user-guides/creating-equity.md) +- [Token Operations](ats/user-guides/token-operations.md) +- [Corporate Actions](ats/user-guides/corporate-actions.md) +- [Managing Compliance](ats/user-guides/managing-compliance.md) +- [Roles and Permissions](ats/user-guides/roles-and-permissions.md) + +### Developer Guides + +- [SDK Overview](ats/developer-guides/sdk-overview.md) +- [SDK Integration](ats/developer-guides/sdk-integration.md) +- [Smart Contracts Overview](ats/developer-guides/contracts/overview.md) +- [Contract Deployment](ats/developer-guides/contracts/deployment.md) + +### API Reference + +- [SDK Reference](ats/api/sdk-reference.md) +- [Contract Interfaces](ats/api/contracts/) + +## Mass Payout + +Documentation for managing large-scale batch payment distributions on Hedera. + +- **[Introduction & Overview](mass-payout/intro.md)** - Complete overview of Mass Payout features and architecture + +### Getting Started + +- [Quick Start Guide](mass-payout/getting-started/quick-start.md) +- [Full Setup Guide](mass-payout/getting-started/full-setup.md) + +### User Guides + +- [Importing Assets](mass-payout/user-guides/importing-assets.md) +- [Creating Distributions](mass-payout/user-guides/creating-distributions.md) + +### Developer Guides + +- [SDK Overview](mass-payout/developer-guides/sdk-overview.md) +- [SDK Integration](mass-payout/developer-guides/sdk-integration.md) +- [Smart Contracts Overview](mass-payout/developer-guides/contracts/overview.md) +- [Backend Architecture](mass-payout/developer-guides/backend/architecture.md) +- [Blockchain Integration](mass-payout/developer-guides/backend/blockchain-integration.md) + +### API Reference + +- [REST API Reference](mass-payout/api/rest-api/) + +## References + +Cross-product documentation and guides. + +- [General Guides](references/guides/) + +## Support + +- **GitHub Issues**: [Report bugs or request features](https://github.com/hashgraph/asset-tokenization-studio/issues) +- **Hedera Documentation**: [https://docs.hedera.com](https://docs.hedera.com) diff --git a/docs/mass-payout/api/index.md b/docs/mass-payout/api/index.md new file mode 100644 index 000000000..2221e2db7 --- /dev/null +++ b/docs/mass-payout/api/index.md @@ -0,0 +1,35 @@ +--- +id: index +title: API Documentation +sidebar_position: 5 +--- + +# API Documentation + +Technical reference for Mass Payout contracts, SDK, and REST API. + +## Smart Contracts + +_Coming soon_ + +Auto-generated documentation for Mass Payout smart contract interfaces and functions. + +## SDK + +_Coming soon_ + +TypeScript SDK classes, methods, and usage examples for blockchain interactions. + +## REST API + +[REST API β†’](./rest-api/index.md) + +Backend API endpoints, request/response formats, and authentication. + +When the backend is running, Swagger documentation is available at: `http://localhost:3000/api/docs` + +## Additional Resources + +- [Developer Guides](../developer-guides/index.md) - Implementation guides +- [User Guides](../user-guides/index.md) - Application usage +- [GitHub Repository](https://github.com/hashgraph/asset-tokenization-studio) diff --git a/docs/mass-payout/api/rest-api/index.md b/docs/mass-payout/api/rest-api/index.md new file mode 100644 index 000000000..1123779d7 --- /dev/null +++ b/docs/mass-payout/api/rest-api/index.md @@ -0,0 +1,33 @@ +--- +id: index +title: REST API +sidebar_label: REST API +--- + +# REST API + +Complete reference for the Mass Payout backend REST API. + +## Overview + +The backend exposes a RESTful API for managing assets, distributions, and payouts. + +## Swagger Documentation + +When the backend is running, interactive API documentation is available at: + +**http://localhost:3001/api/docs** + +## Endpoints + +_Coming soon_ + +## Authentication + +_Coming soon_ + +## Rate Limiting + +_Coming soon_ + +_This documentation is under development. Use the Swagger UI for current API reference._ diff --git a/docs/mass-payout/developer-guides/backend/architecture.md b/docs/mass-payout/developer-guides/backend/architecture.md new file mode 100644 index 000000000..19e7f5334 --- /dev/null +++ b/docs/mass-payout/developer-guides/backend/architecture.md @@ -0,0 +1,408 @@ +--- +id: architecture +title: Architecture Overview +sidebar_position: 1 +--- + +# Backend Architecture Overview + +The Mass Payout backend follows **Domain-Driven Design (DDD)** with clear separation of concerns. + +## Architecture Layers + +``` +β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” +β”‚ REST API (NestJS) β”‚ +β”‚ (Controllers + DTOs) β”‚ +β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ + β”‚ + β–Ό +β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” +β”‚ Application Layer β”‚ +β”‚ (Use Cases - 22 total) β”‚ +β”‚ ImportAsset, ExecutePayout, ProcessBlockchainEvents, etc. β”‚ +β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ + β”‚ + β–Ό +β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” +β”‚ Domain Layer β”‚ +β”‚ (Domain Services + Models) β”‚ +β”‚ ImportAssetDomainService, ExecutePayoutDomainService β”‚ +β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ + β”‚ + β–Ό +β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” +β”‚ Infrastructure Layer β”‚ +β”‚ (Repositories + External Adapters) β”‚ +β”‚ TypeORM Repositories, SDK Adapters, Hedera Services β”‚ +β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ +``` + +## Layer 1: REST API + +**Location**: `src/infrastructure/api/` + +Controllers handle HTTP requests and responses: + +- **AssetController**: Import assets, list assets, get asset details +- **DistributionController**: Create distributions, execute payouts +- **HolderController**: Manage asset holders +- **BatchPayoutController**: Query payout batches + +**Example:** + +```typescript +@Controller("api/assets") +export class AssetController { + constructor(private readonly importAssetUseCase: ImportAssetUseCase) {} + + @Post("import") + async importAsset(@Body() dto: ImportAssetDto) { + return await this.importAssetUseCase.execute(dto); + } +} +``` + +## Layer 2: Application Layer + +**Location**: `src/application/use-cases/` + +Use cases orchestrate business operations: + +### Asset Management Use Cases + +- `ImportAssetUseCase`: Import asset from blockchain +- `GetAssetDetailsUseCase`: Retrieve asset information +- `ListAssetsUseCase`: List all assets with pagination +- `SyncAssetFromOnChainUseCase`: Sync asset state from blockchain + +### Distribution Management Use Cases + +- `CreateDistributionUseCase`: Create new distribution +- `ExecuteDistributionPayoutUseCase`: Execute payout for distribution +- `GetDistributionDetailsUseCase`: Get distribution information +- `ListDistributionsUseCase`: List distributions with filters +- `ProcessScheduledPayoutsUseCase`: Process scheduled distributions + +### Blockchain Sync Use Cases + +- `ProcessBlockchainEventsUseCase`: Process blockchain events +- `SyncFromOnChainUseCase`: Sync complete state from chain + +### Holder Management Use Cases + +- `ImportHoldersFromBlockchainUseCase`: Import holders from on-chain data +- `UpdateHolderBalanceUseCase`: Update holder balances + +**Example:** + +```typescript +@Injectable() +export class ExecuteDistributionPayoutUseCase { + constructor( + private readonly distributionRepo: DistributionRepository, + private readonly holderRepo: HolderRepository, + private readonly sdkService: LifeCycleCashFlowSdkService, + private readonly payoutDomainService: ExecutePayoutDistributionDomainService, + ) {} + + async execute(distributionId: string): Promise { + const distribution = await this.distributionRepo.findById(distributionId); + const holders = await this.holderRepo.findByDistribution(distributionId); + + await this.payoutDomainService.execute(distribution, holders); + } +} +``` + +## Layer 3: Domain Layer + +**Location**: `src/domain/` + +Contains business logic and domain models: + +### Domain Models + +- **Asset**: Token information, lifecycle contract, sync status +- **Distribution**: Corporate action distributions +- **Holder**: Asset holder with payment amounts +- **BatchPayout**: Payout batch tracking + +### Domain Services + +Complex business logic: + +- **ImportAssetDomainService**: Asset import logic +- **ExecutePayoutDistributionDomainService**: Payout execution logic +- **SyncFromOnChainDomainService**: Blockchain sync logic + +**Example:** + +```typescript +@Injectable() +export class ExecutePayoutDistributionDomainService { + async execute(distribution: Distribution, holders: Holder[]): Promise { + // Validate distribution + if (distribution.status !== "PENDING") { + throw new Error("Distribution already processed"); + } + + // Batch holders (100 per batch) + const batches = this.createBatches(holders, 100); + + // Execute batches sequentially + for (const batch of batches) { + await this.executeBatch(distribution, batch); + } + } +} +``` + +## Layer 4: Infrastructure Layer + +**Location**: `src/infrastructure/` + +External integrations and persistence: + +### Repositories (TypeORM) + +- **AssetRepository**: Asset persistence +- **DistributionRepository**: Distribution persistence +- **HolderRepository**: Holder persistence +- **BatchPayoutRepository**: Batch payout persistence + +### External Adapters + +- **LifeCycleCashFlowSdkService**: Mass Payout SDK integration +- **AssetTokenizationStudioSdkService**: ATS SDK integration +- **HederaServiceImpl**: Hedera network operations + +**Example Repository:** + +```typescript +@Injectable() +export class AssetRepository { + constructor( + @InjectRepository(AssetEntity) + private readonly repo: Repository, + ) {} + + async findById(id: string): Promise { + const entity = await this.repo.findOne({ where: { id } }); + return entity ? this.toDomain(entity) : null; + } + + async save(asset: Asset): Promise { + const entity = this.toEntity(asset); + await this.repo.save(entity); + } +} +``` + +## Key Design Patterns + +### Dependency Injection + +NestJS provides built-in DI: + +```typescript +@Injectable() +export class CreateDistributionUseCase { + constructor( + private readonly distributionRepo: DistributionRepository, + private readonly assetRepo: AssetRepository, + ) {} +} +``` + +### Repository Pattern + +Abstracts data access: + +```typescript +// Domain layer defines interface +export interface IAssetRepository { + findById(id: string): Promise; + save(asset: Asset): Promise; +} + +// Infrastructure implements +@Injectable() +export class AssetRepository implements IAssetRepository { + // Implementation +} +``` + +### Use Case Pattern + +Single responsibility for each operation: + +```typescript +// Each use case handles one business operation +export class ImportAssetUseCase { + /* ... */ +} +export class ExecuteDistributionPayoutUseCase { + /* ... */ +} +export class ProcessScheduledPayoutsUseCase { + /* ... */ +} +``` + +### Adapter Pattern + +Wraps external dependencies: + +```typescript +@Injectable() +export class LifeCycleCashFlowSdkService { + private sdk: MassPayoutSdk; + + async executeDistribution(contractId: string, holders: Holder[]): Promise { + // Adapter wraps SDK complexity + return await this.sdk.commands.executeDistribution({ contractId, holders }); + } +} +``` + +## Configuration + +**Location**: `src/config/` + +Configuration modules for each concern: + +- **DatabaseConfig**: PostgreSQL connection +- **HederaConfig**: Hedera network settings +- **DfnsConfig**: DFNS custodial wallet +- **AtsConfig**: ATS SDK integration + +**Example:** + +```typescript +@Injectable() +export class HederaConfig { + @IsString() + HEDERA_NETWORK: string; + + @IsUrl() + HEDERA_MIRROR_URL: string; + + @IsUrl() + HEDERA_RPC_URL: string; +} +``` + +## Request Flow Example + +**User creates a distribution:** + +``` +1. POST /api/distributions + β”‚ + β”œβ”€β†’ DistributionController.create() + β”‚ └─→ CreateDistributionUseCase.execute() + β”‚ β”œβ”€β†’ AssetRepository.findById() - Load asset + β”‚ β”œβ”€β†’ Distribution.create() - Domain validation + β”‚ └─→ DistributionRepository.save() - Persist + β”‚ +2. POST /api/distributions/:id/execute + β”‚ + β”œβ”€β†’ DistributionController.execute() + β”‚ └─→ ExecuteDistributionPayoutUseCase.execute() + β”‚ β”œβ”€β†’ DistributionRepository.findById() + β”‚ β”œβ”€β†’ HolderRepository.findByDistribution() + β”‚ β”œβ”€β†’ ExecutePayoutDomainService.execute() + β”‚ β”‚ β”œβ”€β†’ Create batches + β”‚ β”‚ └─→ For each batch: + β”‚ β”‚ β”œβ”€β†’ LifeCycleCashFlowSdkService.executeDistribution() + β”‚ β”‚ └─→ BatchPayoutRepository.save() + β”‚ └─→ DistributionRepository.updateStatus('COMPLETED') +``` + +## Error Handling + +### Domain Errors + +Domain layer throws domain-specific errors: + +```typescript +export class DistributionAlreadyExecutedError extends Error { + constructor(distributionId: string) { + super(`Distribution ${distributionId} already executed`); + } +} +``` + +### Application Layer + +Use cases catch and transform errors: + +```typescript +export class ExecuteDistributionPayoutUseCase { + async execute(distributionId: string): Promise { + try { + await this.payoutDomainService.execute(distribution, holders); + } catch (error) { + if (error instanceof DistributionAlreadyExecutedError) { + throw new BadRequestException(error.message); + } + throw new InternalServerErrorException("Payout execution failed"); + } + } +} +``` + +### Infrastructure Layer + +Adapters handle external errors: + +```typescript +export class LifeCycleCashFlowSdkService { + async executeDistribution(contractId: string, holders: Holder[]): Promise { + try { + return await this.sdk.commands.executeDistribution({ contractId, holders }); + } catch (error) { + throw new BlockchainTransactionError("Failed to execute on-chain", error); + } + } +} +``` + +## Best Practices + +### Separation of Concerns + +- **Controllers**: Handle HTTP, validate input, return responses +- **Use Cases**: Orchestrate business operations +- **Domain Services**: Implement business logic +- **Repositories**: Handle data persistence +- **Adapters**: Integrate external systems + +### Dependency Direction + +Dependencies point inward: + +``` +Infrastructure β†’ Application β†’ Domain + ↓ ↓ + (depends on) (depends on) +``` + +Domain layer has no dependencies on outer layers. + +### Testability + +Each layer is independently testable: + +```typescript +// Test use case with mocked repositories +const mockRepo = createMock(); +const useCase = new ExecuteDistributionPayoutUseCase(mockRepo, ...); +``` + +## Next Steps + +- [Database Schema](./database.md) - PostgreSQL schema and entities +- [Blockchain Integration](./blockchain-integration.md) - Event sync and scheduled processing +- [Running & Testing](./running-and-testing.md) - Development and testing diff --git a/docs/mass-payout/developer-guides/backend/blockchain-integration.md b/docs/mass-payout/developer-guides/backend/blockchain-integration.md new file mode 100644 index 000000000..2b10ec278 --- /dev/null +++ b/docs/mass-payout/developer-guides/backend/blockchain-integration.md @@ -0,0 +1,621 @@ +--- +id: blockchain-integration +title: Blockchain Integration +sidebar_position: 3 +--- + +# Blockchain Integration + +The backend integrates with Hedera blockchain for event synchronization and transaction execution. + +## SDK Integration + +The backend uses two SDKs to interact with smart contracts: + +### Mass Payout SDK + +**LifeCycleCashFlowSdkService** wraps the Mass Payout SDK: + +```typescript +@Injectable() +export class LifeCycleCashFlowSdkService { + private sdk: MassPayoutSdk; + + constructor(private readonly dfnsService: DfnsWalletService) { + this.sdk = new MassPayoutSdk({ + network: process.env.HEDERA_NETWORK, + mirrorUrl: process.env.HEDERA_MIRROR_URL, + rpcUrl: process.env.HEDERA_RPC_URL, + transactionAdapter: new DFNSTransactionAdapter(dfnsService), + }); + } + + async executeDistribution(contractId: string, holders: Holder[]): Promise { + return await this.sdk.commands.executeDistribution({ contractId, holders }); + } + + async executeBondCashOut(contractId: string, holders: Holder[]): Promise { + return await this.sdk.commands.executeBondCashOut({ contractId, holders }); + } + + async queryDistribution(contractId: string, distributionId: string) { + return await this.sdk.queries.getDistribution({ contractId, distributionId }); + } +} +``` + +**Uses:** + +- Execute distributions on-chain +- Execute bond cash-outs +- Query contract state + +### ATS SDK + +**AssetTokenizationStudioSdkService** wraps the ATS SDK: + +```typescript +@Injectable() +export class AssetTokenizationStudioSdkService { + private sdk: ATSSdk; + + async getAssetDetails(tokenId: string): Promise { + return await this.sdk.queries.getTokenDetails({ tokenId }); + } + + async getHolders(tokenId: string): Promise { + return await this.sdk.queries.getHolders({ tokenId }); + } + + async queryBalance(tokenId: string, accountId: string): Promise { + return await this.sdk.queries.balanceOf({ tokenId, accountId }); + } +} +``` + +**Uses:** + +- Import asset information +- Sync holder balances +- Query token state + +## DFNS Custodial Wallet + +The backend uses **DFNS** for transaction signing. + +### Configuration + +**Environment Variables** (`.env`): + +```bash +# Service account credentials +DFNS_SERVICE_ACCOUNT_AUTHORIZATION_TOKEN=your_token_here +DFNS_SERVICE_ACCOUNT_CREDENTIAL_ID=cr-xxxxx-xxxxx-xxxxxxxxxxxxxxxxx +DFNS_SERVICE_ACCOUNT_PRIVATE_KEY_PATH="-----BEGIN EC PRIVATE KEY-----\n...\n-----END EC PRIVATE KEY-----" + +# Application settings +DFNS_APP_ID=ap-xxxxx-xxxxx-xxxxxxxxxxxxxxxxx +DFNS_APP_ORIGIN=http://localhost:3000 +DFNS_BASE_URL=https://api.dfns.ninja + +# Wallet configuration +DFNS_WALLET_ID=wa-xxxxx-xxxxx-xxxxxxxxxxxxxxxxx +DFNS_WALLET_PUBLIC_KEY=your_wallet_public_key_here +DFNS_HEDERA_ACCOUNT_ID=0.0.123456 +``` + +### DFNS Service + +```typescript +@Injectable() +export class DfnsWalletService { + private dfnsClient: DfnsApiClient; + + constructor(configService: ConfigService) { + const { DfnsWallet } = require("@hashgraph/hedera-custodians-integration"); + + this.dfnsClient = new DfnsApiClient({ + appId: configService.get("DFNS_APP_ID"), + authToken: configService.get("DFNS_SERVICE_ACCOUNT_AUTHORIZATION_TOKEN"), + baseUrl: configService.get("DFNS_BASE_URL"), + // ... more config + }); + } + + async signTransaction(transaction: Transaction): Promise { + return await this.dfnsClient.wallets.broadcastTransaction({ + walletId: process.env.DFNS_WALLET_ID, + body: { transaction }, + }); + } +} +``` + +## Event-Driven Blockchain Sync + +The backend automatically syncs blockchain state using event polling. + +### Architecture + +``` +β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” +β”‚ Blockchain Polling Service (Cron) β”‚ +β”‚ Runs every N seconds β”‚ +β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ + β”‚ + β–Ό +β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” +β”‚ Hedera Blockchain Listener Service β”‚ +β”‚ Fetches events from Mirror Node API β”‚ +β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ + β”‚ + β–Ό +β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” +β”‚ Event Processors β”‚ +β”‚ DistributionExecuted, PayoutCompleted, etc. β”‚ +β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ + β”‚ + β–Ό +β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” +β”‚ Database Repositories β”‚ +β”‚ Update asset, distribution, holder β”‚ +β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ +``` + +### Blockchain Polling Service + +**Location**: `src/infrastructure/blockchain/blockchain-polling.service.ts` + +```typescript +@Injectable() +export class BlockchainPollingService { + constructor( + private readonly listenerService: HederaBlockchainListenerService, + private readonly configRepo: BlockchainEventListenerConfigRepository, + ) {} + + @Cron(CronExpression.EVERY_MINUTE) // Configurable via BLOCKCHAIN_POLLING_INTERVAL + async pollEvents() { + const configs = await this.configRepo.findEnabled(); + + for (const config of configs) { + await this.listenerService.processEvents(config); + } + } +} +``` + +**Configuration**: + +```bash +# .env +BLOCKCHAIN_POLLING_INTERVAL=60000 # Milliseconds (default: 1 minute) +``` + +### Hedera Blockchain Listener Service + +**Location**: `src/infrastructure/blockchain/hedera-blockchain-listener.service.ts` + +```typescript +@Injectable() +export class HederaBlockchainListenerService { + constructor( + private readonly mirrorNodeClient: MirrorNodeClient, + private readonly eventProcessors: EventProcessorRegistry, + private readonly configRepo: BlockchainEventListenerConfigRepository, + ) {} + + async processEvents(config: BlockchainEventListenerConfig): Promise { + // 1. Fetch events since last processed timestamp + const events = await this.mirrorNodeClient.getContractEvents({ + contractId: config.contractId, + fromTimestamp: config.lastProcessedTimestamp, + }); + + // 2. Process each event + for (const event of events) { + await this.processEvent(event); + } + + // 3. Update last processed timestamp + await this.configRepo.updateLastProcessedTimestamp(config.id, events[events.length - 1]?.timestamp); + } + + private async processEvent(event: BlockchainEvent): Promise { + const processor = this.eventProcessors.get(event.name); + if (processor) { + await processor.process(event); + } + } +} +``` + +### Supported Events + +**DistributionExecuted**: + +Emitted when a distribution is executed on-chain. + +```solidity +event DistributionExecuted(bytes32 indexed distributionId, uint256 totalAmount, uint256 holdersCount); +``` + +**Event Processor**: + +```typescript +@Injectable() +export class DistributionExecutedProcessor implements EventProcessor { + async process(event: BlockchainEvent): Promise { + const { distributionId, totalAmount, holdersCount } = event.data; + + await this.distributionRepo.updateStatus(distributionId, "COMPLETED"); + await this.distributionRepo.updateExecutedAt(distributionId, event.timestamp); + } +} +``` + +**PayoutCompleted**: + +Emitted when a payout batch completes. + +```solidity +event PayoutCompleted(bytes32 indexed batchId, uint256 successfulPayments, uint256 failedPayments); +``` + +**HolderBalanceUpdated**: + +Emitted when holder balances change. + +```solidity +event HolderBalanceUpdated(address indexed holder, uint256 newBalance); +``` + +## Scheduled Payout Processing + +The backend automatically executes scheduled and recurring distributions. + +### Scheduled Payouts Processor + +**Location**: `src/application/use-cases/process-scheduled-payouts.use-case.ts` + +```typescript +@Injectable() +export class ProcessScheduledPayoutsUseCase { + constructor( + private readonly distributionRepo: DistributionRepository, + private readonly executePayoutUseCase: ExecuteDistributionPayoutUseCase, + ) {} + + @Cron("0 */5 * * * *") // Every 5 minutes (configurable) + async execute(): Promise { + const now = new Date(); + + // Find distributions scheduled for execution + const distributions = await this.distributionRepo.findPendingScheduled(now); + + for (const distribution of distributions) { + try { + await this.executePayoutUseCase.execute(distribution.id); + } catch (error) { + await this.distributionRepo.updateStatus(distribution.id, "FAILED"); + this.logger.error(`Failed to execute distribution ${distribution.id}`, error); + } + } + } +} +``` + +**Configuration**: + +```bash +# .env +SCHEDULED_PAYOUTS_CRON=0 */5 * * * * # Every 5 minutes +``` + +### Recurring Distributions + +For distributions with `execution_type = RECURRING`: + +```typescript +@Injectable() +export class RecurringDistributionService { + async handleRecurringDistribution(distribution: Distribution): Promise { + // 1. Execute current distribution + await this.executePayoutUseCase.execute(distribution.id); + + // 2. Calculate next execution time + const nextTime = this.calculateNextExecution(distribution.frequency, distribution.startTime); + + // 3. Create new distribution for next execution + await this.createDistributionUseCase.execute({ + assetId: distribution.assetId, + type: distribution.type, + executionType: "RECURRING", + frequency: distribution.frequency, + scheduledTime: nextTime, + // ... copy other fields + }); + } + + private calculateNextExecution(frequency: string, lastTime: Date): Date { + switch (frequency) { + case "HOURLY": + return addHours(lastTime, 1); + case "DAILY": + return addDays(lastTime, 1); + case "WEEKLY": + return addWeeks(lastTime, 1); + case "MONTHLY": + return addMonths(lastTime, 1); + } + } +} +``` + +## Pagination for Large Distributions + +The backend handles large distributions by batching holders. + +### Batch Creation + +```typescript +@Injectable() +export class ExecutePayoutDistributionDomainService { + private readonly BATCH_SIZE = 100; + + async execute(distribution: Distribution, holders: Holder[]): Promise { + // Create batches + const batches = this.createBatches(holders, this.BATCH_SIZE); + + // Execute batches sequentially + for (let i = 0; i < batches.length; i++) { + await this.executeBatch(distribution, batches[i], i + 1); + } + } + + private createBatches(holders: Holder[], batchSize: number): Holder[][] { + const batches: Holder[][] = []; + for (let i = 0; i < holders.length; i += batchSize) { + batches.push(holders.slice(i, i + batchSize)); + } + return batches; + } + + private async executeBatch(distribution: Distribution, holders: Holder[], batchNumber: number): Promise { + // Create batch record + const batch = new BatchPayout({ + distributionId: distribution.id, + batchNumber, + totalHolders: holders.length, + status: "PROCESSING", + }); + await this.batchRepo.save(batch); + + try { + // Execute on-chain + const txId = await this.sdkService.executeDistribution(distribution.lifecycleContractId, holders); + + // Update batch + batch.status = "COMPLETED"; + batch.transactionId = txId; + batch.successfulPayments = holders.length; + await this.batchRepo.save(batch); + } catch (error) { + // Handle failure + batch.status = "FAILED"; + batch.errorMessage = error.message; + await this.batchRepo.save(batch); + throw error; + } + } +} +``` + +### Retry Logic + +Failed batches are automatically retried: + +```typescript +@Injectable() +export class RetryFailedBatchesUseCase { + @Cron("0 0 * * * *") // Every hour + async execute(): Promise { + const failedBatches = await this.batchRepo.findFailed(); + + for (const batch of failedBatches) { + // Retry up to 3 times + if (batch.retryCount < 3) { + await this.executeBatch(batch); + } + } + } +} +``` + +## Idempotency + +All blockchain operations are idempotent to prevent duplicate executions. + +### Distribution Execution + +```typescript +async executeDistribution(distributionId: string): Promise { + // Check status + const distribution = await this.distributionRepo.findById(distributionId); + + if (distribution.status !== 'PENDING') { + throw new DistributionAlreadyExecutedError(distributionId); + } + + // Update status immediately to prevent concurrent execution + await this.distributionRepo.updateStatus(distributionId, 'PROCESSING'); + + try { + // Execute payout + await this.payoutService.execute(distribution); + + // Mark completed + await this.distributionRepo.updateStatus(distributionId, 'COMPLETED'); + } catch (error) { + // Mark failed + await this.distributionRepo.updateStatus(distributionId, 'FAILED'); + throw error; + } +} +``` + +### Event Processing + +Events are processed exactly once: + +```typescript +async processEvents(config: BlockchainEventListenerConfig): Promise { + const events = await this.mirrorNode.getEvents({ + contractId: config.contractId, + fromTimestamp: config.lastProcessedTimestamp, // Only new events + }); + + // Process events in transaction + await this.dataSource.transaction(async manager => { + for (const event of events) { + await this.processEvent(event, manager); + } + + // Update last processed timestamp + await manager.update(BlockchainEventListenerConfigEntity, config.id, { + lastProcessedTimestamp: events[events.length - 1]?.timestamp, + }); + }); +} +``` + +## Error Handling + +### Transaction Failures + +```typescript +try { + const txId = await this.sdkService.executeDistribution(contractId, holders); +} catch (error) { + if (error instanceof InsufficientBalanceError) { + throw new BadRequestException("Contract has insufficient payment token balance"); + } else if (error instanceof TransactionTimeoutError) { + // Retry + return this.retryTransaction(contractId, holders); + } else { + throw new InternalServerErrorException("Blockchain transaction failed"); + } +} +``` + +### Sync Failures + +```typescript +async syncAsset(assetId: string): Promise { + try { + await this.assetRepo.updateSyncStatus(assetId, 'SYNCING'); + + const details = await this.atsService.getAssetDetails(asset.tokenId); + await this.assetRepo.update(assetId, details); + + await this.assetRepo.updateSyncStatus(assetId, 'SYNCED'); + } catch (error) { + await this.assetRepo.updateSyncStatus(assetId, 'FAILED'); + this.logger.error(`Asset sync failed for ${assetId}`, error); + } +} +``` + +## Monitoring + +### Logging + +All blockchain operations are logged: + +```typescript +this.logger.log("Distribution executed", { + distributionId, + transactionId: txId, + holders: holders.length, +}); + +this.logger.error("Blockchain sync failed", { + contractId, + error: error.message, + stack: error.stack, +}); +``` + +### Metrics + +Key metrics to monitor: + +- **Sync lag**: Time since last event processed +- **Batch success rate**: Percentage of successful batches +- **Distribution execution time**: Time to complete payouts +- **Failed batches**: Number of batches requiring retry + +## Best Practices + +### Transaction Management + +1. **Update status immediately**: Prevent concurrent execution +2. **Use transactions**: Ensure database consistency +3. **Implement retries**: Handle temporary failures +4. **Log all operations**: Aid debugging + +### Event Processing + +1. **Track last timestamp**: Prevent reprocessing +2. **Process in order**: Maintain event sequence +3. **Handle missing events**: Query on-chain state if gaps detected +4. **Idempotent processors**: Safe to reprocess events + +### Scheduled Jobs + +1. **Use cron expressions**: Flexible scheduling +2. **Avoid overlapping**: Ensure previous run completes +3. **Monitor execution**: Alert on failures +4. **Implement timeouts**: Prevent hanging jobs + +## Troubleshooting + +### Events Not Processing + +**Problem**: Blockchain events not being synced + +**Solutions**: + +- Check `blockchain_event_listener_config` table exists +- Verify cron job is running (check logs) +- Ensure Mirror Node URL is correct +- Check `last_processed_timestamp` is not too far in past + +### Scheduled Payouts Not Executing + +**Problem**: Distributions not executing at scheduled time + +**Solutions**: + +- Verify `SCHEDULED_PAYOUTS_CRON` configuration +- Check distributions have `status = 'PENDING'` +- Ensure `scheduled_time` is in the past +- Review logs for errors + +### DFNS Transaction Signing Failed + +**Problem**: Transactions fail to sign + +**Solutions**: + +- Verify all DFNS environment variables are set +- Check DFNS wallet has sufficient HBAR +- Validate private key format +- Test DFNS credentials with standalone example + +## Next Steps + +- [Architecture Overview](./architecture.md) - Backend architecture and layers +- [Database Schema](./database.md) - PostgreSQL schema and entities +- [Running & Testing](./running-and-testing.md) - Development and testing +- [SDK Integration](../sdk-integration.md) - Mass Payout SDK usage diff --git a/docs/mass-payout/developer-guides/backend/database.md b/docs/mass-payout/developer-guides/backend/database.md new file mode 100644 index 000000000..d11828235 --- /dev/null +++ b/docs/mass-payout/developer-guides/backend/database.md @@ -0,0 +1,563 @@ +--- +id: database +title: Database Schema +sidebar_position: 2 +--- + +# Database Schema + +The Mass Payout backend uses **PostgreSQL** for persistent storage. + +## Database Entities + +### Asset + +Stores imported asset tokens and their lifecycle contracts. + +**Table: `asset`** + +```sql +CREATE TABLE asset ( + id UUID PRIMARY KEY, + token_id VARCHAR NOT NULL UNIQUE, -- Asset token ID (0.0.xxxxx) + name VARCHAR NOT NULL, -- Asset name + symbol VARCHAR NOT NULL, -- Asset symbol + total_supply BIGINT NOT NULL, -- Total token supply + decimals INT NOT NULL, -- Token decimals + lifecycle_contract_id VARCHAR, -- LifeCycle contract ID + payment_token_id VARCHAR, -- Payment token ID (USDC, etc.) + last_synced_at TIMESTAMP, -- Last blockchain sync + sync_status VARCHAR, -- SYNCED, SYNCING, FAILED + created_at TIMESTAMP DEFAULT NOW(), + updated_at TIMESTAMP DEFAULT NOW() +); +``` + +**Fields:** + +- `token_id`: Hedera token ID (e.g., `0.0.789012`) +- `lifecycle_contract_id`: Associated LifeCycle Cash Flow contract +- `payment_token_id`: Token used for payments (e.g., USDC `0.0.429274`) +- `sync_status`: Blockchain sync state + +**Indexes:** + +```sql +CREATE UNIQUE INDEX idx_asset_token_id ON asset(token_id); +CREATE INDEX idx_asset_sync_status ON asset(sync_status); +``` + +### Distribution + +Stores dividend/coupon distributions. + +**Table: `distribution`** + +```sql +CREATE TABLE distribution ( + id UUID PRIMARY KEY, + asset_id UUID NOT NULL REFERENCES asset(id), + type VARCHAR NOT NULL, -- DIVIDEND, COUPON, SNAPSHOT + execution_type VARCHAR NOT NULL, -- MANUAL, SCHEDULED, RECURRING, AUTOMATIC + payout_type VARCHAR, -- FIXED, PERCENTAGE (for equities) + amount DECIMAL, -- Total distribution amount + concept VARCHAR, -- Description/label + scheduled_time TIMESTAMP, -- For scheduled distributions + frequency VARCHAR, -- HOURLY, DAILY, WEEKLY, MONTHLY + start_time TIMESTAMP, -- For recurring distributions + trigger_condition VARCHAR, -- For automatic distributions + status VARCHAR NOT NULL, -- PENDING, PROCESSING, COMPLETED, FAILED + executed_at TIMESTAMP, + created_at TIMESTAMP DEFAULT NOW(), + updated_at TIMESTAMP DEFAULT NOW() +); +``` + +**Fields:** + +- `type`: Distribution type (DIVIDEND for equities, COUPON for bonds) +- `execution_type`: How distribution is triggered + - MANUAL: Execute immediately + - SCHEDULED: Execute at specific time + - RECURRING: Execute on recurring schedule + - AUTOMATIC: Execute based on trigger +- `payout_type`: FIXED (same amount per holder) or PERCENTAGE (proportional to holdings) +- `status`: Current processing state + +**Indexes:** + +```sql +CREATE INDEX idx_distribution_asset ON distribution(asset_id); +CREATE INDEX idx_distribution_status ON distribution(status); +CREATE INDEX idx_distribution_scheduled ON distribution(scheduled_time) WHERE status = 'PENDING'; +``` + +### Holder + +Stores asset holders and their payment amounts. + +**Table: `holder`** + +```sql +CREATE TABLE holder ( + id UUID PRIMARY KEY, + asset_id UUID NOT NULL REFERENCES asset(id), + distribution_id UUID REFERENCES distribution(id), + account_id VARCHAR NOT NULL, -- Holder account ID + balance BIGINT NOT NULL, -- Token balance + payment_amount DECIMAL, -- Payment amount for distribution + paid BOOLEAN DEFAULT FALSE, -- Payment status + created_at TIMESTAMP DEFAULT NOW(), + updated_at TIMESTAMP DEFAULT NOW(), + UNIQUE(asset_id, distribution_id, account_id) +); +``` + +**Fields:** + +- `account_id`: Hedera account ID (e.g., `0.0.123456`) +- `balance`: Token holdings (in smallest unit) +- `payment_amount`: Calculated payment for this distribution +- `paid`: Whether payment has been executed + +**Indexes:** + +```sql +CREATE INDEX idx_holder_asset ON holder(asset_id); +CREATE INDEX idx_holder_distribution ON holder(distribution_id); +CREATE INDEX idx_holder_account ON holder(account_id); +CREATE UNIQUE INDEX idx_holder_unique ON holder(asset_id, distribution_id, account_id); +``` + +### BatchPayout + +Tracks payout batch execution. + +**Table: `batch_payout`** + +```sql +CREATE TABLE batch_payout ( + id UUID PRIMARY KEY, + distribution_id UUID NOT NULL REFERENCES distribution(id), + batch_number INT NOT NULL, -- Batch sequence number + total_holders INT NOT NULL, -- Holders in this batch + successful_payments INT DEFAULT 0, -- Successful payments + failed_payments INT DEFAULT 0, -- Failed payments + transaction_id VARCHAR, -- Blockchain transaction ID + status VARCHAR NOT NULL, -- PENDING, PROCESSING, COMPLETED, FAILED + error_message TEXT, -- Error details if failed + executed_at TIMESTAMP, + created_at TIMESTAMP DEFAULT NOW(), + updated_at TIMESTAMP DEFAULT NOW() +); +``` + +**Fields:** + +- `batch_number`: Sequence number for this batch in the distribution +- `transaction_id`: Hedera transaction ID (e.g., `0.0.123456@1234567890.123456789`) +- `status`: Batch processing state +- `error_message`: Failure reason if status is FAILED + +**Indexes:** + +```sql +CREATE INDEX idx_batch_distribution ON batch_payout(distribution_id); +CREATE INDEX idx_batch_status ON batch_payout(status); +``` + +### BlockchainEventListenerConfig + +Configuration for blockchain event listeners. + +**Table: `blockchain_event_listener_config`** + +```sql +CREATE TABLE blockchain_event_listener_config ( + id UUID PRIMARY KEY, + contract_id VARCHAR NOT NULL, -- Contract to listen to + last_processed_timestamp BIGINT, -- Last processed event timestamp + enabled BOOLEAN DEFAULT TRUE, + created_at TIMESTAMP DEFAULT NOW(), + updated_at TIMESTAMP DEFAULT NOW() +); +``` + +**Fields:** + +- `contract_id`: LifeCycle Cash Flow contract being monitored +- `last_processed_timestamp`: Timestamp of last processed event (prevents reprocessing) +- `enabled`: Whether listener is active + +**Indexes:** + +```sql +CREATE UNIQUE INDEX idx_listener_contract ON blockchain_event_listener_config(contract_id); +``` + +## Entity Relationships + +``` +β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” +β”‚ Asset β”‚ +β””β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”˜ + β”‚ + β”‚ 1:N + β”‚ + β–Ό +β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” +β”‚ Distribution β”‚ +β””β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ + β”‚ + β”‚ 1:N + β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” + β”‚ β”‚ + β–Ό β–Ό +β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” +β”‚ Holder β”‚ β”‚ BatchPayout β”‚ +β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ +``` + +## TypeORM Entities + +### Asset Entity + +```typescript +@Entity("asset") +export class AssetEntity { + @PrimaryGeneratedColumn("uuid") + id: string; + + @Column({ unique: true }) + tokenId: string; + + @Column() + name: string; + + @Column() + symbol: string; + + @Column({ type: "bigint" }) + totalSupply: string; + + @Column() + decimals: number; + + @Column({ nullable: true }) + lifecycleContractId?: string; + + @Column({ nullable: true }) + paymentTokenId?: string; + + @Column({ nullable: true }) + lastSyncedAt?: Date; + + @Column({ nullable: true }) + syncStatus?: string; + + @CreateDateColumn() + createdAt: Date; + + @UpdateDateColumn() + updatedAt: Date; + + @OneToMany(() => DistributionEntity, (distribution) => distribution.asset) + distributions: DistributionEntity[]; +} +``` + +### Distribution Entity + +```typescript +@Entity("distribution") +export class DistributionEntity { + @PrimaryGeneratedColumn("uuid") + id: string; + + @Column() + assetId: string; + + @ManyToOne(() => AssetEntity, (asset) => asset.distributions) + @JoinColumn({ name: "assetId" }) + asset: AssetEntity; + + @Column() + type: string; + + @Column() + executionType: string; + + @Column({ nullable: true }) + payoutType?: string; + + @Column({ type: "decimal", nullable: true }) + amount?: string; + + @Column({ nullable: true }) + concept?: string; + + @Column({ nullable: true }) + scheduledTime?: Date; + + @Column({ nullable: true }) + frequency?: string; + + @Column({ nullable: true }) + startTime?: Date; + + @Column({ nullable: true }) + triggerCondition?: string; + + @Column() + status: string; + + @Column({ nullable: true }) + executedAt?: Date; + + @CreateDateColumn() + createdAt: Date; + + @UpdateDateColumn() + updatedAt: Date; + + @OneToMany(() => HolderEntity, (holder) => holder.distribution) + holders: HolderEntity[]; + + @OneToMany(() => BatchPayoutEntity, (batch) => batch.distribution) + batches: BatchPayoutEntity[]; +} +``` + +## Migrations + +The backend uses TypeORM migrations for schema management. + +### Creating Migrations + +```bash +# Generate migration from entity changes +npm run typeorm:migration:generate -- -n MigrationName + +# Create empty migration +npm run typeorm:migration:create -- -n MigrationName +``` + +### Running Migrations + +```bash +# Run pending migrations +npm run typeorm:migration:run + +# Revert last migration +npm run typeorm:migration:revert +``` + +### Example Migration + +```typescript +export class CreateAssetTable1234567890 implements MigrationInterface { + public async up(queryRunner: QueryRunner): Promise { + await queryRunner.createTable( + new Table({ + name: "asset", + columns: [ + { + name: "id", + type: "uuid", + isPrimary: true, + generationStrategy: "uuid", + default: "uuid_generate_v4()", + }, + { + name: "token_id", + type: "varchar", + isUnique: true, + }, + // ... more columns + ], + }), + ); + } + + public async down(queryRunner: QueryRunner): Promise { + await queryRunner.dropTable("asset"); + } +} +``` + +## Repository Pattern + +Repositories abstract database access: + +### Example Repository + +```typescript +@Injectable() +export class DistributionRepository { + constructor( + @InjectRepository(DistributionEntity) + private readonly repo: Repository, + ) {} + + async findById(id: string): Promise { + const entity = await this.repo.findOne({ + where: { id }, + relations: ["asset", "holders", "batches"], + }); + return entity ? this.toDomain(entity) : null; + } + + async findPendingScheduled(now: Date): Promise { + const entities = await this.repo.find({ + where: { + status: "PENDING", + scheduledTime: LessThanOrEqual(now), + }, + }); + return entities.map((e) => this.toDomain(e)); + } + + async save(distribution: Distribution): Promise { + const entity = this.toEntity(distribution); + await this.repo.save(entity); + } + + private toDomain(entity: DistributionEntity): Distribution { + // Map entity to domain model + } + + private toEntity(domain: Distribution): DistributionEntity { + // Map domain model to entity + } +} +``` + +## Database Configuration + +**Location**: `apps/mass-payout/backend/.env` + +```bash +# PostgreSQL connection +DATABASE_HOST=localhost +DATABASE_PORT=5432 +DATABASE_USER=postgres +DATABASE_PASSWORD=postgres +DATABASE_NAME=mass_payout +``` + +**TypeORM Configuration**: `apps/mass-payout/backend/ormconfig.ts` + +```typescript +export default { + type: "postgres", + host: process.env.DATABASE_HOST, + port: parseInt(process.env.DATABASE_PORT, 10), + username: process.env.DATABASE_USER, + password: process.env.DATABASE_PASSWORD, + database: process.env.DATABASE_NAME, + entities: ["src/**/*.entity.ts"], + migrations: ["src/infrastructure/persistence/migrations/*.ts"], + synchronize: false, // Use migrations in production + logging: process.env.NODE_ENV === "development", +}; +``` + +## Best Practices + +### Use Migrations + +Always use migrations for schema changes: + +```bash +# 1. Modify entity +# 2. Generate migration +npm run typeorm:migration:generate -- -n AddPaymentTokenToAsset +# 3. Review generated migration +# 4. Run migration +npm run typeorm:migration:run +``` + +### Transaction Management + +Use transactions for multi-step operations: + +```typescript +async createDistributionWithHolders( + distribution: Distribution, + holders: Holder[], +): Promise { + await this.dataSource.transaction(async manager => { + await manager.save(DistributionEntity, this.toEntity(distribution)); + await manager.save(HolderEntity, holders.map(h => this.toHolderEntity(h))); + }); +} +``` + +### Query Optimization + +Use indexes and efficient queries: + +```typescript +// Good: Use indexed columns +await this.repo.find({ + where: { status: "PENDING" }, // Indexed +}); + +// Bad: Full table scan +await this.repo.find().then((all) => all.filter((d) => d.status === "PENDING")); +``` + +### Pagination + +Paginate large result sets: + +```typescript +async findAll(page: number, limit: number): Promise<[Distribution[], number]> { + const [entities, total] = await this.repo.findAndCount({ + skip: (page - 1) * limit, + take: limit, + order: { createdAt: 'DESC' }, + }); + return [entities.map(e => this.toDomain(e)), total]; +} +``` + +## Troubleshooting + +### Database Connection Failed + +**Problem**: Cannot connect to PostgreSQL + +**Solutions**: + +- Verify PostgreSQL is running: `docker-compose ps` +- Check credentials in `.env` +- Ensure database exists: `CREATE DATABASE mass_payout;` + +### Migration Failed + +**Problem**: Migration execution fails + +**Solutions**: + +- Check migration SQL for errors +- Verify database state matches expected +- Revert last migration: `npm run typeorm:migration:revert` +- Fix and regenerate migration + +### Slow Queries + +**Problem**: Database queries are slow + +**Solutions**: + +- Add indexes to frequently queried columns +- Use pagination for large result sets +- Enable query logging to identify slow queries +- Use `EXPLAIN ANALYZE` in PostgreSQL to optimize + +## Next Steps + +- [Architecture Overview](./architecture.md) - Backend architecture and layers +- [Blockchain Integration](./blockchain-integration.md) - Event sync and scheduled processing +- [Running & Testing](./running-and-testing.md) - Development and testing diff --git a/docs/mass-payout/developer-guides/backend/index.md b/docs/mass-payout/developer-guides/backend/index.md new file mode 100644 index 000000000..6d22616bc --- /dev/null +++ b/docs/mass-payout/developer-guides/backend/index.md @@ -0,0 +1,66 @@ +--- +id: index +title: Backend +sidebar_position: 3 +--- + +# Backend + +The Mass Payout backend is a NestJS application that provides REST API, database management, and blockchain synchronization. + +## What the Backend Does + +1. **REST API**: HTTP endpoints for frontend operations +2. **Database Management**: PostgreSQL storage for assets, distributions, and payouts +3. **Blockchain Sync**: Polls Hedera for events and syncs on-chain state +4. **Scheduled Execution**: Automatic execution of scheduled distributions +5. **Batch Processing**: Manages large-scale payouts with retry logic + +## Available Guides + +### Architecture Overview + +[Architecture Overview β†’](./architecture.md) + +Learn about the Domain-Driven Design architecture and application layers. + +### Database Schema + +[Database Schema β†’](./database.md) + +Understand the PostgreSQL schema, entities, and relationships. + +### Blockchain Integration + +[Blockchain Integration β†’](./blockchain-integration.md) + +How the backend syncs with Hedera and processes scheduled payouts. + +### Running & Testing + +[Running & Testing β†’](./running-and-testing.md) + +Development setup, deployment, and testing strategies. + +## Quick Start + +```bash +# Start PostgreSQL +cd apps/mass-payout/backend +docker-compose up -d + +# Configure environment +cp .env.example .env +# Edit .env with your configuration + +# Run backend in development mode +npm run mass-payout:backend:dev +``` + +Backend runs on `http://localhost:3000` with Swagger docs at `http://localhost:3000/api`. + +## Next Steps + +- [SDK Integration](../sdk-integration.md) - Integrate Mass Payout SDK +- [Smart Contracts](../contracts/index.md) - LifeCycle Cash Flow contract +- [API Documentation](../../api/rest-api/index.md) - REST API reference diff --git a/docs/mass-payout/developer-guides/backend/running-and-testing.md b/docs/mass-payout/developer-guides/backend/running-and-testing.md new file mode 100644 index 000000000..eeaa9a4d9 --- /dev/null +++ b/docs/mass-payout/developer-guides/backend/running-and-testing.md @@ -0,0 +1,665 @@ +--- +id: running-and-testing +title: Running & Testing +sidebar_position: 4 +--- + +# Running & Testing + +Guide to running the Mass Payout backend in development and production, plus testing strategies. + +## Prerequisites + +- **Node.js**: v24.0.0 or newer (required for Mass Payout backend) +- **npm**: v10.9.0 or newer +- **PostgreSQL**: 14 or newer +- **Docker** (optional, for running PostgreSQL) + +## Development Setup + +### 1. Install Dependencies + +From monorepo root: + +```bash +npm ci +``` + +### 2. Start PostgreSQL + +**Option A: Using Docker** (recommended): + +```bash +cd apps/mass-payout/backend +docker-compose up -d +``` + +This starts PostgreSQL on `localhost:5432` with credentials from `docker-compose.yml`. + +**Option B: Local PostgreSQL**: + +```bash +# Create database +createdb mass_payout + +# Or via psql +psql -U postgres -c "CREATE DATABASE mass_payout;" +``` + +### 3. Configure Environment + +```bash +cd apps/mass-payout/backend +cp .env.example .env +``` + +**Edit `.env` with your configuration:** + +```bash +# Database +DATABASE_HOST=localhost +DATABASE_PORT=5432 +DATABASE_USER=postgres +DATABASE_PASSWORD=postgres +DATABASE_NAME=mass_payout + +# Hedera +HEDERA_NETWORK=testnet +HEDERA_MIRROR_URL=https://testnet.mirrornode.hedera.com/api/v1/ +HEDERA_RPC_URL=https://testnet.hashio.io/api + +# DFNS (get from DFNS dashboard) +DFNS_SERVICE_ACCOUNT_AUTHORIZATION_TOKEN=your_token +DFNS_SERVICE_ACCOUNT_CREDENTIAL_ID=cr-xxxxx +DFNS_SERVICE_ACCOUNT_PRIVATE_KEY_PATH="-----BEGIN EC PRIVATE KEY-----\n...\n-----END EC PRIVATE KEY-----" +DFNS_APP_ID=ap-xxxxx +DFNS_WALLET_ID=wa-xxxxx +DFNS_HEDERA_ACCOUNT_ID=0.0.123456 + +# ATS Integration +ATS_FACTORY_ADDRESS=0.0.123456 +ATS_RESOLVER_ADDRESS=0.0.123457 +HEDERA_USDC_ADDRESS=0.0.429274 + +# Application +PORT=3000 +NODE_ENV=development +CORS_ORIGINS=http://localhost:5173 +``` + +### 4. Run Migrations + +```bash +npm run typeorm:migration:run --workspace=apps/mass-payout/backend +``` + +### 5. Start Backend + +**From monorepo root:** + +```bash +npm run mass-payout:backend:dev +``` + +**Or from backend directory:** + +```bash +cd apps/mass-payout/backend +npm run dev +``` + +Backend starts on `http://localhost:3000` with hot-reload. + +### 6. Verify Installation + +**Check health endpoint:** + +```bash +curl http://localhost:3000/health +``` + +**Expected response:** + +```json +{ + "status": "ok", + "database": "connected", + "blockchain": "synced" +} +``` + +**Open Swagger UI:** + +Navigate to `http://localhost:3000/api` to see API documentation. + +## Running in Production + +### 1. Build Backend + +```bash +# From monorepo root +npm run build --workspace=apps/mass-payout/backend + +# Or from backend directory +cd apps/mass-payout/backend +npm run build +``` + +Builds to `apps/mass-payout/backend/dist/`. + +### 2. Configure Production Environment + +Create production `.env`: + +```bash +# Database (use production credentials) +DATABASE_HOST=your-db-host +DATABASE_PORT=5432 +DATABASE_USER=mass_payout_prod +DATABASE_PASSWORD=your-secure-password +DATABASE_NAME=mass_payout_prod + +# Application +PORT=3000 +NODE_ENV=production +CORS_ORIGINS=https://your-production-domain.com + +# ... other production configs +``` + +### 3. Run Migrations + +```bash +NODE_ENV=production npm run typeorm:migration:run +``` + +### 4. Start Backend + +```bash +npm run start:prod --workspace=apps/mass-payout/backend +``` + +**Or with PM2** (recommended): + +```bash +npm install -g pm2 + +pm2 start dist/main.js --name mass-payout-backend +pm2 save +pm2 startup # Enable auto-restart on server reboot +``` + +### 5. Production Checklist + +- [ ] Environment variables secured (use secrets manager) +- [ ] CORS configured for production domain +- [ ] Database credentials secured +- [ ] DFNS private keys stored securely +- [ ] PostgreSQL backups configured +- [ ] Monitoring and logging enabled +- [ ] SSL/TLS certificates configured (if hosting API) +- [ ] Rate limiting enabled +- [ ] Health checks configured for load balancer + +## Testing + +### Unit Tests + +Test individual components in isolation. + +**Run all tests:** + +```bash +npm run test --workspace=apps/mass-payout/backend +``` + +**Run specific test file:** + +```bash +npm run test --workspace=apps/mass-payout/backend -- path/to/test.spec.ts +``` + +**Run in watch mode:** + +```bash +npm run test:watch --workspace=apps/mass-payout/backend +``` + +**Run with coverage:** + +```bash +npm run test:coverage --workspace=apps/mass-payout/backend +``` + +### Test Structure + +Tests are colocated with source code: + +``` +src/ +β”œβ”€β”€ application/ +β”‚ └── use-cases/ +β”‚ β”œβ”€β”€ import-asset.use-case.ts +β”‚ └── __tests__/ +β”‚ └── import-asset.use-case.spec.ts +β”œβ”€β”€ domain/ +β”‚ └── services/ +β”‚ β”œβ”€β”€ execute-payout.domain-service.ts +β”‚ └── __tests__/ +β”‚ └── execute-payout.domain-service.spec.ts +└── infrastructure/ + └── persistence/ + └── repositories/ + β”œβ”€β”€ asset.repository.ts + └── __tests__/ + └── asset.repository.spec.ts +``` + +### Example Unit Test + +**Use Case Test:** + +```typescript +describe("ExecuteDistributionPayoutUseCase", () => { + let useCase: ExecuteDistributionPayoutUseCase; + let mockDistributionRepo: jest.Mocked; + let mockHolderRepo: jest.Mocked; + let mockSdkService: jest.Mocked; + + beforeEach(() => { + mockDistributionRepo = createMock(); + mockHolderRepo = createMock(); + mockSdkService = createMock(); + + useCase = new ExecuteDistributionPayoutUseCase(mockDistributionRepo, mockHolderRepo, mockSdkService); + }); + + it("should execute distribution payout successfully", async () => { + // Arrange + const distributionId = "dist-123"; + const distribution = createTestDistribution({ id: distributionId, status: "PENDING" }); + const holders = [createTestHolder(), createTestHolder()]; + + mockDistributionRepo.findById.mockResolvedValue(distribution); + mockHolderRepo.findByDistribution.mockResolvedValue(holders); + mockSdkService.executeDistribution.mockResolvedValue("tx-hash-123"); + + // Act + await useCase.execute(distributionId); + + // Assert + expect(mockSdkService.executeDistribution).toHaveBeenCalledWith(distribution.lifecycleContractId, holders); + expect(mockDistributionRepo.updateStatus).toHaveBeenCalledWith(distributionId, "COMPLETED"); + }); + + it("should throw error if distribution already executed", async () => { + // Arrange + const distribution = createTestDistribution({ status: "COMPLETED" }); + mockDistributionRepo.findById.mockResolvedValue(distribution); + + // Act & Assert + await expect(useCase.execute("dist-123")).rejects.toThrow(DistributionAlreadyExecutedError); + }); +}); +``` + +### Integration Tests + +Test complete flows with real database. + +**Run integration tests:** + +```bash +npm run test:e2e --workspace=apps/mass-payout/backend +``` + +### Test Database Setup + +**Test configuration** (`ormconfig.test.ts`): + +```typescript +export default { + type: "postgres", + host: "localhost", + port: 5432, + username: "postgres", + password: "postgres", + database: "mass_payout_test", + entities: ["src/**/*.entity.ts"], + synchronize: true, // Auto-sync schema in tests + dropSchema: true, // Clean database before each test run + logging: false, +}; +``` + +**Example Integration Test:** + +```typescript +describe("Asset Import Flow (e2e)", () => { + let app: INestApplication; + let assetRepo: AssetRepository; + let holderRepo: HolderRepository; + + beforeAll(async () => { + const moduleFixture = await Test.createTestingModule({ + imports: [AppModule], + }) + .overrideProvider(LifeCycleCashFlowSdkService) + .useValue(createMockSdkService()) + .compile(); + + app = moduleFixture.createNestApplication(); + await app.init(); + + assetRepo = moduleFixture.get(AssetRepository); + holderRepo = moduleFixture.get(HolderRepository); + }); + + afterAll(async () => { + await app.close(); + }); + + it("should import asset and holders from blockchain", async () => { + // Act + const response = await request(app.getHttpServer()) + .post("/api/assets/import") + .send({ tokenId: "0.0.123456" }) + .expect(201); + + // Assert + const asset = await assetRepo.findById(response.body.id); + expect(asset).toBeDefined(); + expect(asset.tokenId).toBe("0.0.123456"); + + const holders = await holderRepo.findByAsset(asset.id); + expect(holders.length).toBeGreaterThan(0); + }); +}); +``` + +### Mocking SDK Calls + +Mock SDK to avoid blockchain calls in tests: + +```typescript +const mockSdkService = { + executeDistribution: jest.fn().mockResolvedValue("tx-hash-123"), + queryDistribution: jest.fn().mockResolvedValue({ + id: "dist-123", + status: "COMPLETED", + }), +}; +``` + +### Testing Best Practices + +1. **Isolate tests**: Each test should be independent +2. **Mock external dependencies**: SDK, blockchain, external APIs +3. **Use test database**: Never test against production +4. **Clean up after tests**: Reset database state +5. **Test edge cases**: Error conditions, boundary values +6. **Keep tests fast**: Unit tests < 100ms, integration tests < 1s + +## Database Migrations + +### Creating Migrations + +**Generate migration from entity changes:** + +```bash +npm run typeorm:migration:generate -- -n MigrationName +``` + +**Create empty migration:** + +```bash +npm run typeorm:migration:create -- -n MigrationName +``` + +### Running Migrations + +**Apply pending migrations:** + +```bash +npm run typeorm:migration:run +``` + +**Revert last migration:** + +```bash +npm run typeorm:migration:revert +``` + +**Show migration status:** + +```bash +npm run typeorm:migration:show +``` + +### Migration Best Practices + +1. **Review generated migrations**: Ensure SQL is correct +2. **Test migrations**: Run against test database first +3. **Backup before migration**: In production +4. **Make migrations reversible**: Implement both `up()` and `down()` +5. **Never modify existing migrations**: Create new ones instead + +## Environment Variables Reference + +### Required Variables + +```bash +# Database +DATABASE_HOST=localhost +DATABASE_PORT=5432 +DATABASE_USER=postgres +DATABASE_PASSWORD=your_password +DATABASE_NAME=mass_payout + +# Hedera +HEDERA_NETWORK=testnet|mainnet +HEDERA_MIRROR_URL=https://testnet.mirrornode.hedera.com/api/v1/ +HEDERA_RPC_URL=https://testnet.hashio.io/api + +# DFNS +DFNS_SERVICE_ACCOUNT_AUTHORIZATION_TOKEN=your_token +DFNS_SERVICE_ACCOUNT_CREDENTIAL_ID=cr-xxxxx +DFNS_SERVICE_ACCOUNT_PRIVATE_KEY_PATH="-----BEGIN EC PRIVATE KEY-----\n...\n-----END EC PRIVATE KEY-----" +DFNS_APP_ID=ap-xxxxx +DFNS_WALLET_ID=wa-xxxxx +DFNS_HEDERA_ACCOUNT_ID=0.0.123456 +``` + +### Optional Variables + +```bash +# Application +PORT=3000 +NODE_ENV=development|production +CORS_ORIGINS=http://localhost:5173,http://localhost:3000 + +# Blockchain Polling +BLOCKCHAIN_POLLING_INTERVAL=60000 # Milliseconds + +# Scheduled Payouts +SCHEDULED_PAYOUTS_CRON=0 */5 * * * * # Every 5 minutes + +# ATS Integration +ATS_NETWORK=testnet|mainnet +ATS_MIRROR_URL=https://testnet.mirrornode.hedera.com/api/v1/ +ATS_RPC_URL=https://testnet.hashio.io/api +ATS_FACTORY_ADDRESS=0.0.123456 +ATS_RESOLVER_ADDRESS=0.0.123457 +HEDERA_USDC_ADDRESS=0.0.429274 +``` + +## Debugging + +### Enable Debug Logging + +```bash +# In .env +NODE_ENV=development +LOG_LEVEL=debug +``` + +### View Logs + +**Development:** + +Logs appear in console with hot-reload. + +**Production (with PM2):** + +```bash +pm2 logs mass-payout-backend +pm2 logs mass-payout-backend --lines 1000 +``` + +### Database Query Logging + +**Enable in development** (`ormconfig.ts`): + +```typescript +{ + logging: true, // Log all queries + logger: 'advanced-console', +} +``` + +### Debugging in VS Code + +**`.vscode/launch.json`:** + +```json +{ + "version": "0.2.0", + "configurations": [ + { + "type": "node", + "request": "launch", + "name": "Debug Backend", + "runtimeExecutable": "npm", + "runtimeArgs": ["run", "dev"], + "cwd": "${workspaceFolder}/apps/mass-payout/backend", + "console": "integratedTerminal", + "skipFiles": ["/**"], + "env": { + "NODE_ENV": "development" + } + } + ] +} +``` + +## Performance Optimization + +### Database Indexing + +Ensure frequently queried columns are indexed: + +```sql +CREATE INDEX idx_distribution_status ON distribution(status); +CREATE INDEX idx_distribution_scheduled ON distribution(scheduled_time) WHERE status = 'PENDING'; +``` + +### Connection Pooling + +Configure PostgreSQL connection pool: + +```typescript +{ + type: 'postgres', + // ... connection params + extra: { + max: 20, // Maximum connections + min: 5, // Minimum connections + idleTimeoutMillis: 30000, + } +} +``` + +### Caching + +Implement caching for frequently accessed data: + +```typescript +@Injectable() +export class AssetService { + private cache = new Map(); + + async getAsset(id: string): Promise { + if (this.cache.has(id)) { + return this.cache.get(id); + } + + const asset = await this.assetRepo.findById(id); + this.cache.set(id, asset); + return asset; + } +} +``` + +## Troubleshooting + +### Backend Won't Start + +**Problem**: Backend fails to start + +**Solutions**: + +- Check PostgreSQL is running: `docker-compose ps` +- Verify environment variables in `.env` +- Check Node.js version: `node --version` (must be v24+) +- Review logs for specific error + +### Database Connection Failed + +**Problem**: Cannot connect to database + +**Solutions**: + +- Verify PostgreSQL credentials +- Check `DATABASE_HOST` and `DATABASE_PORT` +- Ensure database exists: `psql -l | grep mass_payout` +- Test connection: `psql -h localhost -U postgres -d mass_payout` + +### Migrations Failed + +**Problem**: Migration execution fails + +**Solutions**: + +- Check migration SQL for syntax errors +- Verify database state matches expected +- Revert last migration: `npm run typeorm:migration:revert` +- Review migration logs + +### Tests Failing + +**Problem**: Tests fail unexpectedly + +**Solutions**: + +- Ensure test database is clean +- Check mocks are properly configured +- Verify test data is valid +- Run tests in isolation: `npm test -- specific.spec.ts` + +### DFNS Signing Failed + +**Problem**: Transactions fail to sign with DFNS + +**Solutions**: + +- Verify all DFNS environment variables are set +- Check DFNS wallet has sufficient HBAR +- Validate private key format (newlines must be `\n`) +- Test DFNS credentials with standalone SDK example + +## Next Steps + +- [Architecture Overview](./architecture.md) - Backend architecture and DDD layers +- [Database Schema](./database.md) - PostgreSQL schema and entities +- [Blockchain Integration](./blockchain-integration.md) - Event sync and scheduled processing +- [SDK Integration](../sdk-integration.md) - Mass Payout SDK usage diff --git a/docs/mass-payout/developer-guides/contracts/deployment.md b/docs/mass-payout/developer-guides/contracts/deployment.md new file mode 100644 index 000000000..d638ebc4e --- /dev/null +++ b/docs/mass-payout/developer-guides/contracts/deployment.md @@ -0,0 +1,90 @@ +--- +id: deployment +title: Contract Deployment +sidebar_position: 1 +--- + +# Contract Deployment + +Quick guide to deploy the LifeCycle Cash Flow contract. + +## Prerequisites + +- Node.js v20.0.0 or newer +- Hedera testnet/mainnet account with HBAR +- Account private key + +## Setup + +```bash +cd packages/mass-payout/contracts +npm install +``` + +## Configure Environment + +Create `.env` file: + +```bash +# Hedera Network +HEDERA_NETWORK=testnet + +# Deployer Account +ACCOUNT_ID=0.0.123456 +PRIVATE_KEY=302e020100300506032b657004220420... + +# Token Addresses +ASSET_TOKEN_ADDRESS=0.0.789012 # ATS token address +PAYMENT_TOKEN_ADDRESS=0.0.429274 # USDC or other HTS token +``` + +## Deploy Contract + +```bash +npm run deploy +``` + +The deployment script will: + +1. Deploy LifeCycle Cash Flow contract +2. Initialize with asset and payment tokens +3. Output the contract address + +## Verify Deployment + +```bash +# Check contract on HashScan +# Testnet: https://hashscan.io/testnet/contract/0.0.YOUR_CONTRACT_ID +# Mainnet: https://hashscan.io/mainnet/contract/0.0.YOUR_CONTRACT_ID +``` + +## Post-Deployment Setup + +### Grant Roles + +The contract uses role-based access control: + +```solidity +// Grant PAYOUT role (execute distributions) +grantRole(PAYOUT_ROLE, 0x...operatorAddress); + +// Grant CASHOUT role (execute bond cash-outs) +grantRole(CASHOUT_ROLE, 0x...operatorAddress); + +// Grant PAYMENT_TOKEN_MANAGER role (manage payment token) +grantRole(PAYMENT_TOKEN_MANAGER_ROLE, 0x...adminAddress); +``` + +### Fund Contract + +Transfer payment tokens to the contract: + +```bash +# Transfer USDC or payment token to contract address +# The contract needs funds to execute distributions +``` + +## Next Steps + +- [Contract Overview](./overview.md) - Learn about contract architecture and functions +- [SDK Integration](../sdk-integration.md) - Use SDK to interact with deployed contract diff --git a/docs/mass-payout/developer-guides/contracts/index.md b/docs/mass-payout/developer-guides/contracts/index.md new file mode 100644 index 000000000..8be18e498 --- /dev/null +++ b/docs/mass-payout/developer-guides/contracts/index.md @@ -0,0 +1,38 @@ +--- +id: index +title: Smart Contracts +sidebar_label: Smart Contracts +sidebar_position: 1 +--- + +# Smart Contracts + +Learn about the LifeCycle Cash Flow smart contract for payment distributions. + +## What is LifeCycle Cash Flow? + +The LifeCycle Cash Flow contract is an upgradeable smart contract that manages payment distributions for tokenized securities on Hedera. It handles: + +- Dividend and coupon payments +- Bond maturity redemptions +- Snapshot-based distributions +- Payment token management + +## Available Guides + +### Contract Deployment + +[Contract Deployment β†’](./deployment.md) + +Quick guide to deploy the LifeCycle Cash Flow contract to Hedera. + +### Contract Overview + +[Contract Overview β†’](./overview.md) + +Detailed overview of contract architecture, functions, and integration patterns. + +## Quick Links + +- [SDK Integration](../sdk-integration.md) - Use the SDK to interact with the contract +- [Backend Integration](../backend/index.md) - Backend integration patterns diff --git a/docs/mass-payout/developer-guides/contracts/overview.md b/docs/mass-payout/developer-guides/contracts/overview.md new file mode 100644 index 000000000..9953d4868 --- /dev/null +++ b/docs/mass-payout/developer-guides/contracts/overview.md @@ -0,0 +1,320 @@ +--- +id: overview +title: Contract Overview +sidebar_position: 2 +--- + +# Contract Overview + +Detailed overview of the LifeCycle Cash Flow smart contract architecture and functions. + +## What the Contract Does + +The LifeCycle Cash Flow contract manages payment distributions for tokenized securities on Hedera. It supports: + +1. **Distribution Execution**: Execute dividend or coupon payments to token holders +2. **Bond Cash-Outs**: Execute bond maturity redemptions +3. **Snapshot Payments**: Execute one-time payments based on token holder snapshots +4. **Payment Management**: Manage payment tokens (USDC, HBAR, or other HTS tokens) + +## Architecture + +### Upgradeability + +The contract uses **OpenZeppelin's Upgradeable Contracts** pattern: + +- **Proxy Pattern**: Allows upgrading contract logic without changing address +- **Storage Layout**: Preserves state across upgrades +- **Access Control**: Role-based permissions for upgrade operations + +### Role-Based Access Control + +The contract implements fine-grained access control: + +- **DEFAULT_ADMIN_ROLE**: Full contract administration +- **PAUSER_ROLE**: Pause/unpause contract in emergencies +- **PAYOUT_ROLE**: Execute distributions and snapshots +- **CASHOUT_ROLE**: Execute bond cash-outs +- **TRANSFERER_ROLE**: Transfer payment tokens from contract +- **PAYMENT_TOKEN_MANAGER_ROLE**: Update payment token configuration + +## Contract Functions + +### Distribution Operations + +#### Execute Distribution (Paginated) + +Execute dividend/coupon payments to a page of holders: + +```solidity +function executeDistribution( + address _asset, + uint256 _distributionID, + uint256 _pageIndex, + uint256 _pageLength +) external returns ( + address[] memory failed, + address[] memory succeeded, + uint256[] memory paidAmount, + bool hasMore +) +``` + +**Parameters:** + +- `_asset`: ATS token address +- `_distributionID`: Distribution ID from ATS contract +- `_pageIndex`: Starting index for pagination +- `_pageLength`: Number of holders to process + +**Returns:** + +- `failed`: Addresses where payment failed +- `succeeded`: Addresses where payment succeeded +- `paidAmount`: Amounts paid to each succeeded address +- `hasMore`: True if more holders remain + +#### Execute Distribution By Addresses + +Retry payments to specific addresses: + +```solidity +function executeDistributionByAddresses( + address _asset, + uint256 _distributionID, + address[] calldata _holders +) external returns ( + address[] memory failed, + address[] memory succeeded, + uint256[] memory paidAmount +) +``` + +**Use case:** Retry failed payments from paginated execution + +### Bond Cash-Out Operations + +#### Execute Bond Cash-Out (Paginated) + +Execute bond maturity redemption: + +```solidity +function executeBondCashOut( + address _bond, + uint256 _pageIndex, + uint256 _pageLength +) external returns ( + address[] memory failed, + address[] memory succeeded, + uint256[] memory paidAmount, + bool hasMore +) +``` + +#### Execute Bond Cash-Out By Addresses + +Cash out bonds for specific holders: + +```solidity +function executeBondCashOutByAddresses( + address _bond, + address[] calldata _holders +) external returns ( + address[] memory failed, + address[] memory succeeded, + uint256[] memory paidAmount +) +``` + +### Snapshot Operations + +#### Execute Amount Snapshot + +Pay fixed amount distributed proportionally: + +```solidity +function executeAmountSnapshot( + address _asset, + uint256 _snapshotID, + uint256 _pageIndex, + uint256 _pageLength, + uint256 _amount +) external returns ( + address[] memory failed, + address[] memory succeeded, + uint256[] memory paidAmount, + bool hasMore +) +``` + +**Parameters:** + +- `_amount`: Total amount to distribute proportionally based on holdings + +**Example:** Distribute $10,000 proportionally to all holders based on their token balance percentage + +#### Execute Percentage Snapshot + +Pay percentage of contract balance: + +```solidity +function executePercentageSnapshot( + address _asset, + uint256 _snapshotID, + uint256 _pageIndex, + uint256 _pageLength, + uint256 _percentage +) external returns ( + address[] memory failed, + address[] memory succeeded, + uint256[] memory paidAmount, + bool hasMore +) +``` + +**Parameters:** + +- `_percentage`: Percentage of contract balance to distribute (in basis points, e.g., 1000 = 10%) + +**Example:** Distribute 5% of contract's payment token balance to holders + +#### By Addresses Variants + +Both snapshot types also have `ByAddresses` variants for retrying specific holders. + +### Payment Token Management + +#### Get Payment Token + +```solidity +function getPaymentToken() external view returns (IERC20) +``` + +Returns the current payment token address (e.g., USDC). + +#### Get Payment Token Decimals + +```solidity +function getPaymentTokenDecimals() external view returns (uint8) +``` + +Returns decimals of the payment token (e.g., 6 for USDC). + +#### Update Payment Token + +```solidity +function updatePaymentToken(address paymentToken) external +``` + +**Requires:** PAYMENT_TOKEN_MANAGER_ROLE + +Change the payment token used for distributions. + +#### Transfer Payment Token + +```solidity +function transferPaymentToken(address to, uint256 amount) external +``` + +**Requires:** TRANSFERER_ROLE + +Transfer payment tokens from contract to another address. + +## Events + +### DistributionExecuted + +```solidity +event DistributionExecuted( + uint256 distributionID, + uint256 pageIndex, + uint256 pageLength, + address[] failed, + address[] succeeded, + uint256[] paidAmount +) +``` + +Emitted when a distribution page is executed. + +### CashOutExecuted + +```solidity +event CashOutExecuted( + uint256 pageIndex, + uint256 pageLength, + address[] failed, + address[] succeeded, + uint256[] paidAmount +) +``` + +Emitted when a bond cash-out page is executed. + +### PaymentTokenChanged + +```solidity +event PaymentTokenChanged(address paymentToken) +``` + +Emitted when payment token is updated. + +## Pagination Strategy + +For large holder lists, use pagination: + +```solidity +uint256 pageIndex = 0; +uint256 pageLength = 100; +bool hasMore = true; + +while (hasMore) { + ( + address[] memory failed, + address[] memory succeeded, + uint256[] memory paid, + bool more + ) = contract.executeDistribution(asset, distributionID, pageIndex, pageLength); + + hasMore = more; + pageIndex += pageLength; + + // Process results... +} +``` + +## Integration with ATS + +The contract integrates with ATS tokens: + +1. **Distribution Data**: Fetches distribution details from ATS contract +2. **Holder Lists**: Retrieves token holders from ATS +3. **Balance Queries**: Checks holder balances for proportional distribution + +## Security Features + +1. **Role-Based Access**: Only authorized accounts can execute operations +2. **Pausability**: Emergency pause for all operations +3. **Upgradeability**: Fix bugs without redeploying +4. **Event Logging**: Full audit trail of all operations +5. **Failure Tracking**: Failed payments don't block successful ones + +## Gas Considerations + +- **Page Size**: Recommended 50-100 holders per page +- **Large Distributions**: Use multiple transactions for >100 holders +- **Failed Payments**: Track and retry individually + +## Best Practices + +1. **Test on Testnet**: Always test full distribution flow before mainnet +2. **Monitor Events**: Subscribe to contract events for real-time tracking +3. **Handle Failures**: Implement retry logic for failed payments +4. **Check Balances**: Ensure contract has sufficient payment tokens +5. **Use Pagination**: Don't execute >100 holders in single transaction + +## Related Guides + +- [Contract Deployment](./deployment.md) - Deploy the contract +- [SDK Integration](../sdk-integration.md) - Use SDK to interact with contract +- [Backend Integration](../backend/index.md) - Backend integration patterns diff --git a/docs/mass-payout/developer-guides/index.md b/docs/mass-payout/developer-guides/index.md new file mode 100644 index 000000000..12a40fa3c --- /dev/null +++ b/docs/mass-payout/developer-guides/index.md @@ -0,0 +1,63 @@ +--- +id: index +title: Developer Guides +sidebar_position: 4 +--- + +# Developer Guides + +Technical guides for developers building with or extending Mass Payout. + +## Available Guides + +### Smart Contracts + +[Smart Contracts β†’](./contracts/index.md) + +Learn about the LifeCycle Cash Flow contract and deployment. + +[Contract Deployment β†’](./contracts/deployment.md) + +Quick guide to deploy the contract to Hedera. + +[Contract Overview β†’](./contracts/overview.md) + +Detailed overview of contract architecture and functions. + +### SDK Integration + +[SDK Integration β†’](./sdk-integration.md) + +Quick guide to integrate the Mass Payout SDK in your project. + +[SDK Overview β†’](./sdk-overview.md) + +Detailed overview of SDK architecture and available operations. + +### Backend Application + +[Backend β†’](./backend/index.md) + +Learn about the NestJS backend architecture, database, and blockchain integration. + +[Architecture Overview β†’](./backend/architecture.md) + +Domain-Driven Design architecture and application layers. + +[Database Schema β†’](./backend/database.md) + +PostgreSQL schema, entities, and repositories. + +[Blockchain Integration β†’](./backend/blockchain-integration.md) + +Event sync, scheduled payouts, and SDK integration. + +[Running & Testing β†’](./backend/running-and-testing.md) + +Development setup, production deployment, and testing strategies. + +## Quick Links + +- [API Documentation](../api/index.md) - Technical reference +- [User Guides](../user-guides/index.md) - Application usage +- [GitHub Repository](https://github.com/hashgraph/asset-tokenization-studio) diff --git a/docs/mass-payout/developer-guides/sdk-integration.md b/docs/mass-payout/developer-guides/sdk-integration.md new file mode 100644 index 000000000..29db8da25 --- /dev/null +++ b/docs/mass-payout/developer-guides/sdk-integration.md @@ -0,0 +1,124 @@ +--- +id: sdk-integration +title: SDK Integration +sidebar_position: 2 +--- + +# SDK Integration + +Quick guide to integrate the Mass Payout SDK in your project. + +## Installation + +```bash +npm install @hashgraph/mass-payout-sdk @hashgraph/mass-payout-contracts +``` + +Peer dependencies: + +```bash +npm install @nestjs/config joi +``` + +## Setup + +```typescript +import { Module } from "@nestjs/common"; +import { ConfigModule } from "@nestjs/config"; +import { MassPayoutSdkModule } from "@hashgraph/mass-payout-sdk"; + +@Module({ + imports: [ + ConfigModule.forRoot(), + MassPayoutSdkModule.forRoot({ + network: process.env.HEDERA_NETWORK, + mirrorNodeUrl: process.env.HEDERA_MIRROR_NODE_URL, + rpcUrl: process.env.HEDERA_JSON_RPC_RELAY_URL, + }), + ], +}) +export class AppModule {} +``` + +## Configure DFNS Wallet + +The SDK requires [DFNS](https://www.dfns.co/) for transaction signing. + +```typescript +import { Network } from "@hashgraph/mass-payout-sdk"; + +const network = new Network(); +await network.connect({ + wallet: "DFNS", + custodialWalletSettings: { + serviceAccountAuthToken: process.env.DFNS_SERVICE_ACCOUNT_AUTHORIZATION_TOKEN, + serviceAccountCredentialId: process.env.DFNS_SERVICE_ACCOUNT_CREDENTIAL_ID, + serviceAccountPrivateKey: process.env.DFNS_SERVICE_ACCOUNT_PRIVATE_KEY_PATH, + appId: process.env.DFNS_APP_ID, + appOrigin: process.env.DFNS_APP_ORIGIN, + baseUrl: process.env.DFNS_BASE_URL, + walletId: process.env.DFNS_WALLET_ID, + walletPublicKey: process.env.DFNS_WALLET_PUBLIC_KEY, + hederaAccountId: process.env.DFNS_HEDERA_ACCOUNT_ID, + }, +}); +``` + +Environment variables: + +```bash +DFNS_SERVICE_ACCOUNT_AUTHORIZATION_TOKEN=eyJ0eXAiOiJKV1QiLCJhbGc... +DFNS_SERVICE_ACCOUNT_CREDENTIAL_ID=cr-xxxxx-xxxxx-xxxxx +DFNS_SERVICE_ACCOUNT_PRIVATE_KEY_PATH="-----BEGIN EC PRIVATE KEY-----\n...\n-----END EC PRIVATE KEY-----" +DFNS_APP_ID=ap-xxxxx-xxxxx-xxxxx +DFNS_APP_ORIGIN=http://localhost:3000 +DFNS_BASE_URL=https://api.dfns.ninja +DFNS_WALLET_ID=wa-xxxxx-xxxxx-xxxxx +DFNS_WALLET_PUBLIC_KEY=your_public_key_here +DFNS_HEDERA_ACCOUNT_ID=0.0.123456 +``` + +## Basic Usage + +### Deploy Contract + +```typescript +import { DeployCommand } from "@hashgraph/mass-payout-sdk"; + +const command = new DeployCommand({ + tokenAddress: "0.0.789012", + paymentTokenAddress: "0.0.429274", +}); + +const result = await commandBus.execute(command); +``` + +### Execute Distribution + +```typescript +import { ExecuteDistributionCommand } from "@hashgraph/mass-payout-sdk"; + +const command = new ExecuteDistributionCommand({ + contractId: "0.0.123456", + holderAddresses: ["0xabc...", "0xdef..."], + amounts: ["100", "200"], + startIndex: 0, + endIndex: 100, +}); + +await commandBus.execute(command); +``` + +### Query Contract + +```typescript +import { GetPaymentTokenQuery } from "@hashgraph/mass-payout-sdk"; + +const paymentToken = await queryBus.execute(new GetPaymentTokenQuery({ contractId: "0.0.123456" })); +``` + +## Next Steps + +- [SDK Overview](./sdk-overview.md) - Learn about SDK architecture and available operations +- [Backend Integration](./backend/index.md) - See how the backend uses the SDK +- [Smart Contracts](./contracts/index.md) - Understand the LifeCycle Cash Flow contract diff --git a/docs/mass-payout/developer-guides/sdk-overview.md b/docs/mass-payout/developer-guides/sdk-overview.md new file mode 100644 index 000000000..ee05d6a43 --- /dev/null +++ b/docs/mass-payout/developer-guides/sdk-overview.md @@ -0,0 +1,255 @@ +--- +id: sdk-overview +title: SDK Overview +sidebar_position: 3 +--- + +# SDK Overview + +Detailed overview of the Mass Payout SDK architecture and available operations. + +## What the SDK Does + +The Mass Payout SDK is a TypeScript library for interacting with the LifeCycle Cash Flow smart contract on Hedera. It provides two core functionalities: + +1. **Contract Interaction**: Create and execute transactions with the LifeCycle Cash Flow contract +2. **Transaction Signing**: Sign transactions using custodial wallet providers (DFNS) + +## Transaction Signing with Custodial Wallets + +The SDK uses the [Hedera Custodians Library](https://github.com/hashgraph/hedera-custodians-library) for secure transaction signing. Instead of managing private keys directly, transactions are signed remotely by [DFNS](https://www.dfns.co/). + +### How Transaction Signing Works + +``` +Your Application + β”‚ + β–Ό +SDK creates unsigned transaction + β”‚ + β–Ό +Transaction sent to DFNS API + β”‚ + β–Ό +DFNS signs with secure private key + β”‚ + β–Ό +Signed transaction submitted to Hedera + β”‚ + β–Ό +Transaction receipt returned +``` + +**Benefits:** + +- Private keys never leave the custodial provider's infrastructure +- Enterprise-grade audit trails and access controls +- Compliance with regulatory requirements + +## Available Operations + +### Commands (Write Operations) + +Commands modify blockchain state and require transaction signing: + +- **`DeployCommand`** - Deploy new LifeCycle Cash Flow contract +- **`ExecuteDistributionCommand`** - Execute payment distribution (paginated) +- **`ExecuteDistributionByAddressesCommand`** - Execute distribution for specific addresses +- **`ExecuteAmountSnapshotCommand`** - Create fixed-amount snapshot (paginated) +- **`ExecuteAmountSnapshotByAddressesCommand`** - Create fixed-amount snapshot for specific addresses +- **`ExecutePercentageSnapshotCommand`** - Create percentage-based snapshot (paginated) +- **`ExecutePercentageSnapshotByAddressesCommand`** - Create percentage snapshot for specific addresses +- **`ExecuteBondCashOutCommand`** - Execute bond maturity cash-out (paginated) +- **`ExecuteBondCashOutByAddressesCommand`** - Execute bond cash-out for specific addresses +- **`PauseCommand`** - Pause contract (emergency stop) +- **`UnpauseCommand`** - Resume contract operations + +### Queries (Read Operations) + +Queries read contract state without transactions: + +- **`GetPaymentTokenQuery`** - Get payment token address +- **`GetPaymentTokenDecimalsQuery`** - Get payment token decimals +- **`IsPausedQuery`** - Check if contract is paused + +## Usage Examples + +### Deploy a Contract + +```typescript +import { DeployCommand } from "@hashgraph/mass-payout-sdk"; + +const command = new DeployCommand({ + tokenAddress: "0.0.789012", // Asset token address + paymentTokenAddress: "0.0.429274", // Payment token (e.g., USDC) +}); + +const result = await commandBus.execute(command); +console.log("Contract deployed at:", result.contractId); +``` + +### Execute a Distribution + +```typescript +import { ExecuteDistributionCommand } from "@hashgraph/mass-payout-sdk"; + +const command = new ExecuteDistributionCommand({ + contractId: "0.0.123456", + holderAddresses: ["0xabc...", "0xdef...", "0xghi..."], + amounts: ["100", "200", "150"], // In smallest unit (e.g., cents for USDC) + startIndex: 0, + endIndex: 100, // For pagination with large holder lists +}); + +const receipt = await commandBus.execute(command); +console.log("Distribution executed:", receipt.transactionId); +``` + +### Create a Snapshot (Fixed Amount) + +```typescript +import { ExecuteAmountSnapshotCommand } from "@hashgraph/mass-payout-sdk"; + +const command = new ExecuteAmountSnapshotCommand({ + contractId: "0.0.123456", + holderAddresses: ["0xabc...", "0xdef..."], + amounts: ["100", "100"], // Same amount for all holders + startIndex: 0, + endIndex: 50, +}); + +await commandBus.execute(command); +``` + +### Create a Snapshot (Percentage-based) + +```typescript +import { ExecutePercentageSnapshotCommand } from "@hashgraph/mass-payout-sdk"; + +const command = new ExecutePercentageSnapshotCommand({ + contractId: "0.0.123456", + holderAddresses: ["0xabc...", "0xdef..."], + balances: ["1000", "2000"], // Token balances for each holder + totalAmount: "300", // Total amount to distribute proportionally + startIndex: 0, + endIndex: 50, +}); + +await commandBus.execute(command); +``` + +### Execute Bond Cash-Out + +```typescript +import { ExecuteBondCashOutCommand } from "@hashgraph/mass-payout-sdk"; + +const command = new ExecuteBondCashOutCommand({ + contractId: "0.0.123456", + holderAddresses: ["0xabc...", "0xdef..."], + amounts: ["1000", "2000"], // Maturity amounts + startIndex: 0, + endIndex: 100, +}); + +await commandBus.execute(command); +``` + +### Query Contract State + +```typescript +import { GetPaymentTokenQuery, IsPausedQuery } from "@hashgraph/mass-payout-sdk"; + +// Get payment token +const paymentToken = await queryBus.execute(new GetPaymentTokenQuery({ contractId: "0.0.123456" })); + +// Check if paused +const isPaused = await queryBus.execute(new IsPausedQuery({ contractId: "0.0.123456" })); +``` + +### Pause/Unpause Contract + +```typescript +import { PauseCommand, UnpauseCommand } from "@hashgraph/mass-payout-sdk"; + +// Emergency pause +await commandBus.execute(new PauseCommand({ contractId: "0.0.123456" })); + +// Resume operations +await commandBus.execute(new UnpauseCommand({ contractId: "0.0.123456" })); +``` + +## Pagination for Large Distributions + +When distributing to many holders, use `startIndex` and `endIndex` to paginate: + +```typescript +// Distribute to first 100 holders +await commandBus.execute( + new ExecuteDistributionCommand({ + contractId: "0.0.123456", + holderAddresses: allHolders, + amounts: allAmounts, + startIndex: 0, + endIndex: 100, + }), +); + +// Distribute to next 100 holders +await commandBus.execute( + new ExecuteDistributionCommand({ + contractId: "0.0.123456", + holderAddresses: allHolders, + amounts: allAmounts, + startIndex: 100, + endIndex: 200, + }), +); +``` + +For small lists, use the `ByAddresses` variants which don't require pagination. + +## Error Handling + +```typescript +import { CommandError } from "@hashgraph/mass-payout-sdk"; + +try { + await commandBus.execute(command); +} catch (error) { + if (error instanceof CommandError) { + console.error("Command failed:", error.message); + console.error("Details:", error.details); + } + throw error; +} +``` + +## Architecture + +The SDK uses a clean architecture pattern: + +- **Commands/Queries**: High-level operations for contract interaction +- **Adapters**: Pluggable implementations for transaction signing (DFNS, future providers) +- **Services**: Network management, contract handling, events + +This design allows swapping custodial providers without changing your application code. + +## Best Practices + +1. **Never hardcode private keys** - Always use custodial wallets in production +2. **Use pagination** - For distributions with >100 holders, use startIndex/endIndex +3. **Test on testnet first** - Validate all operations before mainnet deployment +4. **Handle errors properly** - Implement retry logic for transient failures +5. **Monitor gas costs** - Each transaction costs HBAR (~$0.0001 per transaction) + +## Additional Resources + +- [Hedera Custodians Library](https://github.com/hashgraph/hedera-custodians-library) - Official library for custodial wallet integrations +- [DFNS Documentation](https://docs.dfns.co/) - DFNS provider documentation +- [Hedera Documentation](https://docs.hedera.com/) - Hedera network documentation + +## Related Guides + +- [SDK Integration](./sdk-integration.md) - Quick integration guide +- [Backend Integration](./backend/index.md) - How the backend uses the SDK +- [Smart Contracts](./contracts/index.md) - LifeCycle Cash Flow contract details diff --git a/docs/mass-payout/getting-started/full-setup.md b/docs/mass-payout/getting-started/full-setup.md new file mode 100644 index 000000000..7a643aa20 --- /dev/null +++ b/docs/mass-payout/getting-started/full-setup.md @@ -0,0 +1,396 @@ +--- +id: full-setup +title: Full Development Setup +sidebar_label: Full Setup +sidebar_position: 2 +--- + +# Full Development Setup for Mass Payout + +Complete guide for setting up the Mass Payout development environment. + +## Overview + +This guide covers the complete setup process for developers who want to: + +- Build and deploy smart contracts +- Integrate the Mass Payout SDK +- Extend or customize the backend API +- Contribute to the Mass Payout codebase +- Deploy the full stack infrastructure + +## Prerequisites + +- **Node.js**: v24.0.0 or newer (backend requirement) +- **npm**: v10.9.0 or newer +- **PostgreSQL**: 12 or newer +- **Git**: For cloning the repository +- **Hedera Account**: Testnet or mainnet account with HBAR +- **Code Editor**: VS Code recommended + +## Step 1: Clone and Install + +```bash +# Clone the repository +git clone https://github.com/hashgraph/asset-tokenization-studio.git +cd asset-tokenization-studio + +# Install all dependencies +npm ci +``` + +## Step 2: Setup PostgreSQL + +### Install PostgreSQL + +**Ubuntu/Debian:** + +```bash +sudo apt update +sudo apt install postgresql postgresql-contrib +sudo systemctl start postgresql +``` + +**macOS:** + +```bash +brew install postgresql +brew services start postgresql +``` + +### Create Database + +```bash +# Connect to PostgreSQL +sudo -u postgres psql + +# Create database and user +CREATE DATABASE mass_payout; +CREATE USER mass_payout_user WITH PASSWORD 'your_password'; +GRANT ALL PRIVILEGES ON DATABASE mass_payout TO mass_payout_user; +\q +``` + +## Step 3: Build All Mass Payout Components + +Build contracts, SDK, backend, and frontend: + +```bash +# Build everything with one command +npm run mass-payout:build + +# Or build individually +npm run mass-payout:contracts:build +npm run mass-payout:sdk:build +npm run mass-payout:backend:build +npm run mass-payout:frontend:build +``` + +## Step 4: Smart Contracts Setup + +### Configure Hardhat + +```bash +cd packages/mass-payout/contracts +cp .env.example .env +``` + +Configure environment variables: + +```bash +# Hedera Network +HEDERA_NETWORK=testnet + +# Operator Account (for deploying contracts) +OPERATOR_ID=0.0.12345678 +OPERATOR_KEY=302e020100300506032b657004220420... + +# JSON-RPC Relay +JSON_RPC_RELAY_URL=https://testnet.hashio.io/api +``` + +### Deploy Contracts + +Deploy the LifeCycle Cash Flow contract: + +```bash +npx hardhat run scripts/deploy.ts --network testnet +``` + +Note the deployed contract ID for backend configuration. + +## Step 5: Backend Setup + +### Configure Backend + +```bash +cd apps/mass-payout/backend +cp .env.example .env +``` + +Edit `.env` with your configuration: + +```bash +# Database +DATABASE_HOST=localhost +DATABASE_PORT=5432 +DATABASE_USERNAME=mass_payout_user +DATABASE_PASSWORD=your_password +DATABASE_NAME=mass_payout +DATABASE_SCHEMA=public +DATABASE_SYNCHRONIZE=true + +# Hedera Network +HEDERA_NETWORK=testnet +HEDERA_MIRROR_NODE_URL=https://testnet.mirrornode.hedera.com/api/v1 +HEDERA_JSON_RPC_RELAY_URL=https://testnet.hashio.io/api + +# Operator Account +HEDERA_OPERATOR_ACCOUNT_ID=0.0.12345678 +HEDERA_OPERATOR_PRIVATE_KEY=302e020100300506032b657004220420... + +# Contracts +LIFECYCLE_CASH_FLOW_CONTRACT_ID=0.0.87654321 +ATS_FACTORY_CONTRACT_ID=0.0.11111111 + +# Server +PORT=3001 +API_PREFIX=api +CORS_ORIGINS=http://localhost:5174,http://localhost:3000 +``` + +### Run Database Migrations + +Migrations run automatically when you start the backend: + +```bash +npm run start:dev +``` + +## Step 6: Frontend Setup + +### Configure Frontend + +```bash +cd apps/mass-payout/frontend +cp .env.example .env +``` + +Edit `.env`: + +```bash +# Backend API URL +VITE_API_URL=http://localhost:3001 + +# Frontend Port +VITE_PORT=5174 +``` + +### Start Frontend + +```bash +npm run dev +# Or from root: npm run mass-payout:frontend:dev +``` + +## Step 7: Running the Full Stack + +Open three terminal windows: + +**Terminal 1 - Backend:** + +```bash +npm run mass-payout:backend:dev +``` + +**Terminal 2 - Frontend:** + +```bash +npm run mass-payout:frontend:dev +``` + +**Terminal 3 - Event Listener (optional):** +The backend includes automatic blockchain event polling, but you can monitor logs: + +```bash +npm run mass-payout:backend:dev -- --watch +``` + +Access the application: + +- Frontend: http://localhost:5174 +- Backend API: http://localhost:3001/api +- API Docs (Swagger): http://localhost:3001/api/docs + +## Step 8: Running Tests + +### Contract Tests + +```bash +cd packages/mass-payout/contracts +npm run test + +# With coverage +npm run test:coverage +``` + +### SDK Tests + +```bash +cd packages/mass-payout/sdk +npm run test +``` + +### Backend Tests + +```bash +cd apps/mass-payout/backend +npm run test + +# E2E tests +npm run test:e2e +``` + +### Frontend Tests + +```bash +cd apps/mass-payout/frontend +npm run test +``` + +## Development Workflow + +### Making Changes + +1. **Contracts**: Edit in `packages/mass-payout/contracts/contracts/` +2. **SDK**: Edit in `packages/mass-payout/sdk/src/` +3. **Backend**: Edit in `apps/mass-payout/backend/src/` +4. **Frontend**: Edit in `apps/mass-payout/frontend/src/` + +### Rebuilding After Changes + +```bash +# If you change contracts +npm run mass-payout:contracts:build + +# If you change SDK +npm run mass-payout:sdk:build + +# Backend and frontend rebuild automatically in dev mode +``` + +### Database Migrations + +To create a new migration: + +```bash +cd apps/mass-payout/backend +npm run migration:generate -- src/infrastructure/persistence/migrations/MigrationName +``` + +### Linting and Formatting + +```bash +# Lint all code +npm run lint + +# Fix linting issues +npm run lint:fix + +# Format code +npm run format +``` + +## Next Steps + +- [Developer Guides](../developer-guides/index.md) - Learn about architecture and patterns +- [SDK Integration](../developer-guides/sdk-integration.md) - Integrate Mass Payout SDK +- [Backend API](../api/rest-api/index.md) - REST API documentation +- [User Guides](../user-guides/index.md) - Learn how to use the application + +## Troubleshooting + +### Database Connection Issues + +```bash +# Check PostgreSQL status +sudo systemctl status postgresql + +# Test connection +psql -U mass_payout_user -d mass_payout -h localhost + +# Reset database +DROP DATABASE mass_payout; +CREATE DATABASE mass_payout; +``` + +### Build Fails + +```bash +# Clean build artifacts +npm run mass-payout:clean + +# Remove node_modules and reinstall +npm run clean:deps +npm ci + +# Rebuild +npm run mass-payout:build +``` + +### Port Conflicts + +```bash +# Kill process on backend port +lsof -ti:3001 | xargs kill -9 + +# Kill process on frontend port +lsof -ti:5174 | xargs kill -9 +``` + +### TypeScript Errors + +```bash +# Ensure contracts and SDK are built first +npm run mass-payout:contracts:build +npm run mass-payout:sdk:build + +# Check TypeScript +npm run typecheck +``` + +## Production Deployment + +### Environment Variables + +**Critical settings for production:** + +```bash +# Backend .env +NODE_ENV=production +DATABASE_SYNCHRONIZE=false # NEVER use sync in production +DATABASE_POOL_SIZE=10 + +# Use secrets manager for sensitive data +HEDERA_OPERATOR_PRIVATE_KEY= +``` + +### Security + +- Store private keys in secrets manager (AWS Secrets Manager, HashiCorp Vault) +- Enable HTTPS for both frontend and backend +- Restrict CORS origins to your domain +- Use strong database passwords +- Implement rate limiting +- Regular security audits + +### Docker Deployment + +Docker configurations are available in each module. See deployment guides for details. + +## Need Help? + +- [GitHub Issues](https://github.com/hashgraph/asset-tokenization-studio/issues) +- [Developer Guides](../developer-guides/index.md) +- [API Documentation](../api/index.md) +- [Hedera Discord](https://hedera.com/discord) diff --git a/docs/mass-payout/getting-started/index.md b/docs/mass-payout/getting-started/index.md new file mode 100644 index 000000000..e953ca420 --- /dev/null +++ b/docs/mass-payout/getting-started/index.md @@ -0,0 +1,43 @@ +--- +id: index +title: Getting Started with Mass Payout +sidebar_position: 1 +--- + +# Getting Started with Mass Payout + +Choose how you want to get started with Mass Payout: + +## Quick Start + +Try the Mass Payout web application to manage payment distributions. + +**Best for:** End users who want to quickly test the application + +[Try the Web App β†’](./quick-start.md) + +--- + +## Full Development Setup + +Complete setup for developers who want to build, customize, or integrate Mass Payout components. + +**Best for:** Developers who want to: + +- Customize the smart contracts +- Integrate the SDK into their projects +- Extend the backend API +- Contribute to the codebase +- Deploy their own infrastructure + +[Full Setup Guide β†’](./full-setup.md) + +--- + +## What's Next? + +After setup, explore: + +- [User Guides](../user-guides/index.md) - Learn how to import assets, create distributions, and manage payouts +- [Developer Guides](../developer-guides/index.md) - Deep dive into contracts, SDK, backend, and frontend +- [API Documentation](../api/index.md) - Technical reference for contracts, SDK, and REST API diff --git a/docs/mass-payout/getting-started/quick-start.md b/docs/mass-payout/getting-started/quick-start.md new file mode 100644 index 000000000..f90beb7e6 --- /dev/null +++ b/docs/mass-payout/getting-started/quick-start.md @@ -0,0 +1,369 @@ +--- +id: quick-start +title: Quick Start - Try the Web App +sidebar_label: Quick Start +sidebar_position: 1 +--- + +# Quick Start - Try the Mass Payout App + +Quick start guide to run the Mass Payout application for managing large-scale payment distributions. + +## Prerequisites + +- **Node.js**: v24.0.0 or newer (for backend) +- **npm**: v10.9.0 or newer +- **Docker**: For PostgreSQL database (or install PostgreSQL 12+ manually) +- **Hedera Account**: Testnet or mainnet account with HBAR + +## Installation + +### 1. Clone the Repository + +```bash +git clone https://github.com/hashgraph/asset-tokenization-studio.git +cd asset-tokenization-studio +``` + +### 2. Setup Mass Payout + +You have two options: + +#### Option A: Quick Setup (Recommended) + +Run this single command from the monorepo root to install dependencies and build everything: + +```bash +npm run mass-payout:setup +``` + +This will automatically install dependencies, build contracts, SDK, backend, and frontend. + +#### Option B: Manual Setup + +If you prefer to run each step manually: + +```bash +# Install dependencies +npm ci + +# Build contracts and SDKs +npm run mass-payout:contracts:build +npm run mass-payout:sdk:build +npm run mass-payout:backend:build +npm run mass-payout:frontend:build +``` + +### 3. Setup PostgreSQL Database + +#### Option 1: Using Docker (Recommended) + +Start PostgreSQL using the included docker-compose: + +```bash +cd apps/mass-payout/backend +docker-compose up -d +cd ../../.. +``` + +This will start PostgreSQL on port 5432 with default credentials (`postgres`/`postgres`). + +#### Option 2: Manual PostgreSQL Installation + +If you have PostgreSQL installed: + +```bash +# Connect to PostgreSQL +psql -U postgres + +# Create database +CREATE DATABASE mass_payout; +``` + +## Configuration + +### Backend Configuration + +#### Create Environment File + +```bash +cd apps/mass-payout/backend +cp .env.example .env +``` + +#### Configure Environment Variables + +Edit `apps/mass-payout/backend/.env`: + +##### Database Configuration + +If you're using Docker (from Step 2), use these default values: + +```bash +# PostgreSQL Connection (Docker defaults) +DATABASE_HOST=localhost +DATABASE_PORT=5432 +DATABASE_USERNAME=postgres +DATABASE_PASSWORD=postgres +DATABASE_NAME=postgres +DATABASE_SCHEMA=public +DATABASE_SYNCHRONIZE=true # Set to false in production +``` + +If you created a custom database, adjust `DATABASE_NAME` accordingly. + +##### Blockchain Configuration + +```bash +# Mirror Node and Contract ID +BLOCKCHAIN_MIRROR_NODE_URL=https://testnet.mirrornode.hedera.com +BLOCKCHAIN_CONTRACT_ID=0.0.429274 +BLOCKCHAIN_TOKEN_DECIMALS=6 +BLOCKCHAIN_LISTENER_POLL_TIMEOUT=10000 +BLOCKCHAIN_LISTENER_START_TIMESTAMP=2025-08-26T00:00:00.000Z +``` + +##### Asset Tokenization Studio (ATS) Integration + +```bash +# ATS Network Configuration +ATS_NETWORK=testnet +ATS_MIRROR_URL=https://testnet.mirrornode.hedera.com/api/v1/ +ATS_RPC_URL=https://testnet.hashio.io/api + +# ATS Contract Addresses +ATS_FACTORY_ADDRESS=0.0.123456 +ATS_RESOLVER_ADDRESS=0.0.123457 + +# Payment Token (USDC) +HEDERA_USDC_ADDRESS=0.0.429274 +``` + +##### DFNS Custodial Wallet (Required) + +The backend uses DFNS for secure transaction signing. Configure your DFNS wallet: + +```bash +# Service Account Authentication +DFNS_SERVICE_ACCOUNT_AUTHORIZATION_TOKEN=your_dfns_service_account_token_here +DFNS_SERVICE_ACCOUNT_CREDENTIAL_ID=cr-xxxxx-xxxxx-xxxxxxxxxxxxxxxxx +DFNS_SERVICE_ACCOUNT_PRIVATE_KEY_PATH="-----BEGIN EC PRIVATE KEY----- +your_private_key_here +-----END EC PRIVATE KEY-----" + +# DFNS Application Settings +DFNS_APP_ID=ap-xxxxx-xxxxx-xxxxxxxxxxxxxxxxx +DFNS_APP_ORIGIN=http://localhost:3000 +DFNS_BASE_URL=https://api.dfns.ninja + +# DFNS Wallet Configuration +DFNS_WALLET_ID=wa-xxxxx-xxxxx-xxxxxxxxxxxxxxxxx +DFNS_WALLET_PUBLIC_KEY=your_wallet_public_key_here +DFNS_HEDERA_ACCOUNT_ID=0.0.123456 +``` + +:::info +To obtain DFNS credentials: + +1. Create an account at [DFNS](https://www.dfns.co/) +2. Set up a service account for API access +3. Create a Hedera wallet in your DFNS dashboard +4. Copy the credentials to your `.env` file + ::: + +##### Application Settings + +```bash +# Server Port +PORT=3000 + +# API Prefix +API_PREFIX=api + +# CORS Origins (comma-separated list of allowed origins) +CORS_ORIGINS=http://localhost:5173,http://localhost:3000 +``` + +### Frontend Configuration + +#### Create Environment File + +```bash +cd apps/mass-payout/frontend +cp .env.example .env +``` + +#### Configure Environment Variables + +Edit `apps/mass-payout/frontend/.env`: + +```bash +# Backend API URL +VITE_API_URL=http://localhost:3000 + +# Frontend Port (optional) +VITE_PORT=5173 +``` + +## Running the Application + +> **Important**: Ensure PostgreSQL is running via Docker Compose (see step 3) or your local PostgreSQL installation before starting the backend. + +### 1. Start the Backend + +The backend must be started from its own directory to properly load environment variables: + +```bash +cd apps/mass-payout/backend +npm run start:dev +``` + +The backend API will be available at **http://localhost:3000** + +> **Note**: The backend loads the `.env` file from its current working directory, so it must be run from `apps/mass-payout/backend/`. + +### 2. Start the Frontend + +In a new terminal, from the monorepo root: + +```bash +npm run mass-payout:frontend:dev +``` + +The frontend will be available at **http://localhost:5173** + +> **Tip**: Keep both terminals open to see logs from each service. + +## First Steps + +### 1. Import an Asset + +- Click "Import Asset" in the dashboard +- Enter the token contract ID from ATS +- The system will sync token holders and balances + +### 2. Create a Distribution + +- Select an imported asset +- Click "New Distribution" +- Choose distribution type (dividend, coupon payment) +- Set amount and payment token +- Configure distribution parameters + +### 3. Execute Payout + +- Review distribution details +- Click "Execute Payout" +- The system will process batch payments to all holders +- Monitor transaction status in real-time + +### 4. View History + +- Check distribution history +- View payout details and transaction records +- Track failed payments and retry if needed + +## Troubleshooting + +### Database Connection Failed + +```bash +# Verify PostgreSQL is running +sudo systemctl status postgresql + +# Test connection +psql -U postgres -d mass_payout + +# Check credentials in .env +DATABASE_USERNAME=postgres +DATABASE_PASSWORD=your_correct_password +``` + +### Port Already in Use + +```bash +# Kill process on backend port +lsof -ti:3000 | xargs kill -9 + +# Kill process on frontend port +lsof -ti:5173 | xargs kill -9 +``` + +### Docker Database Issues + +```bash +# Check if PostgreSQL container is running +docker ps + +# View PostgreSQL logs +cd apps/mass-payout/backend +docker-compose logs -f + +# Restart PostgreSQL container +docker-compose restart + +# Stop and remove container +docker-compose down +``` + +### Build Errors + +```bash +# Clean and rebuild +npm run mass-payout:clean +npm run mass-payout:build +``` + +### Contract Interaction Errors + +- Verify operator account has sufficient HBAR balance +- Check that contract IDs are correct for your network +- Ensure operator private key is valid +- Verify the LifeCycle Cash Flow contract is deployed + +### Migration Errors + +Database migrations run automatically. If you encounter issues: + +```bash +# Rebuild database (WARNING: This deletes all data) +# In PostgreSQL: +DROP DATABASE mass_payout; +CREATE DATABASE mass_payout; + +# Restart backend to run migrations +npm run mass-payout:backend:dev +``` + +## Production Deployment + +### Important Settings for Production + +```bash +# Backend .env +DATABASE_SYNCHRONIZE=false # Never use sync in production +NODE_ENV=production + +# Use connection pooling +DATABASE_POOL_SIZE=10 +``` + +### Security Considerations + +- Store private keys securely (use secrets manager) +- Enable HTTPS for both frontend and backend +- Restrict CORS origins to your domain only +- Use strong database passwords +- Implement rate limiting on API endpoints + +## Next Steps + +- [User Guides](../user-guides/index.md) - Learn how to import assets and manage distributions +- [Developer Guides](../developer-guides/index.md) - Learn about the architecture +- [API Documentation](../api/index.md) - Explore the backend API + +## Need Help? + +- [GitHub Issues](https://github.com/hashgraph/asset-tokenization-studio/issues) +- [Hedera Discord](https://hedera.com/discord) +- [Documentation](../intro.md) diff --git a/docs/mass-payout/intro.md b/docs/mass-payout/intro.md new file mode 100644 index 000000000..deb87006f --- /dev/null +++ b/docs/mass-payout/intro.md @@ -0,0 +1,334 @@ +--- +id: intro +title: Mass Payout +sidebar_position: 0 +slug: / +--- + +# Mass Payout + +Manage large-scale payment distributions for tokenized securities with automated batch processing and scheduling capabilities. + +## Overview + +Mass Payout is a comprehensive payment distribution system designed for tokenized securities. It enables issuers to efficiently distribute dividends, coupon payments, and other recurring obligations to large numbers of token holders on the Hedera network. + +### Key Features + +- **Batch Payment Processing**: Efficiently distribute payments to thousands of token holders +- **Asset Import**: Automatically sync token holders and balances from ATS tokens +- **Multiple Distribution Types**: Support for dividends, coupon payments, and custom distributions +- **Scheduled Payouts**: Set up recurring distributions with cron-like scheduling +- **Real-time Tracking**: Monitor payout status and transaction history +- **Failure Recovery**: Automatic retry mechanism for failed payments +- **REST API**: Complete backend API for integration + +## Architecture + +Mass Payout consists of four main components working together: + +```mermaid +graph TB + subgraph "Frontend (React)" + UI[Admin Panel] + UI_Assets[Asset Management] + UI_Dist[Distribution UI] + end + + subgraph "Backend (NestJS)" + API[REST API] + UC[Use Cases] + DS[Domain Services] + Repos[Repositories] + Cron[Scheduled Jobs] + Listener[Event Listener] + end + + subgraph "SDK Layer" + SDK[Mass Payout SDK] + Adapters[Transaction Adapters] + Queries[Query Adapters] + end + + subgraph "Smart Contracts" + LCC[LifeCycle CashFlow] + ATS_Contract[ATS Token Contract] + end + + subgraph "Infrastructure" + DB[(PostgreSQL)] + Mirror[Mirror Node] + HTS[Hedera Network] + end + + UI --> API + API --> UC + UC --> DS + DS --> Repos + DS --> SDK + Repos --> DB + SDK --> Adapters + SDK --> Queries + Adapters --> LCC + Queries --> Mirror + LCC --> HTS + Listener --> Mirror + Listener --> DB + Cron --> DS + LCC -.Import.-> ATS_Contract + + style UI fill:#e1f5ff + style API fill:#fff4e1 + style SDK fill:#ffe1f5 + style LCC fill:#e1ffe1 + style DB fill:#f3e5f5 +``` + +Mass Payout consists of four main components: + +### Smart Contracts + +The **LifeCycle Cash Flow** contract manages all on-chain operations: + +- **Distribution Execution**: Batch transfer payments to multiple recipients +- **Bond Cash-Out**: Handle bond maturity redemptions +- **Snapshot Management**: Capture holder balances at specific points in time +- **Role-Based Access**: Granular permissions for different operations +- **Upgradeable**: Proxy pattern for contract upgrades + +[Learn more about contracts β†’](./developer-guides/contracts/index.md) + +### SDK + +TypeScript SDK for blockchain interactions: + +- **Command/Query Pattern**: Separation of write and read operations +- **Transaction Adapters**: Support for DFNS, RPC, and other signers +- **Value Objects**: Type-safe representation of blockchain entities +- **Mirror Node Integration**: Query historical data and events + +[Learn more about SDK integration β†’](./developer-guides/sdk-integration.md) + +### Backend (NestJS) + +Domain-driven backend API with PostgreSQL: + +- **Domain Services**: Business logic for asset import, payout execution, and synchronization +- **Event-Driven Sync**: Automatic blockchain event polling and processing +- **Use Cases**: 22 use cases covering all operations +- **Repositories**: TypeORM for data persistence +- **Scheduled Jobs**: Cron-based automatic payout execution + +[Learn more about backend β†’](./developer-guides/backend/index.md) + +### Frontend (React) + +Admin panel for managing distributions: + +- **Asset Management**: Import assets and view holder information +- **Distribution Creation**: Configure and execute payouts +- **Real-time Monitoring**: Track payout status and history +- **Chakra UI**: Modern, accessible component library +- **React Query**: Efficient data fetching and caching + +![Mass Payout Web Interface](../images/mp-web.png) + +[Try the web app β†’](./getting-started/quick-start.md) + +## Use Cases + +
+
+

πŸ’΅ Dividend Distributions

+

Distribute earnings to equity token holders

+
    +
  • Import equity tokens from ATS
  • +
  • Calculate amounts per share
  • +
  • Execute batch payments
  • +
  • Track history and reporting
  • +
+ Learn more +
+ +
+

πŸ“… Coupon Payments

+

Automate periodic bond interest payments

+
    +
  • Import bond tokens from ATS
  • +
  • Schedule periodic payments
  • +
  • Auto-execute on schedule
  • +
  • Handle proration
  • +
+ Learn more +
+ +
+

πŸ”„ Recurring Distributions

+

Set up automated recurring payouts

+
    +
  • Cron-based schedules
  • +
  • Auto snapshot capturing
  • +
  • Automatic retry on failure
  • +
  • Real-time progress tracking
  • +
+ Learn more +
+
+ +## Integration with ATS + +Mass Payout is designed to work seamlessly with Asset Tokenization Studio: + +```mermaid +graph LR + A[Create Token
in ATS] --> B[Import Asset
to Mass Payout] + B --> C[Sync Holders
& Balances] + C --> D[Create
Distribution] + D --> E[Execute
Payout] + E --> F[Monitor
Status] + F -.Recurring.-> D + + style A fill:#e1f5ff + style B fill:#fff4e1 + style C fill:#ffe1f5 + style D fill:#e1ffe1 + style E fill:#f3e5f5 + style F fill:#e8f5e9 +``` + +1. **Create tokens in ATS**: Issue equity or bond tokens +2. **Import to Mass Payout**: Sync token holder information +3. **Configure distributions**: Set up payment parameters +4. **Execute payouts**: Distribute payments to holders + +You can use Mass Payout independently if you have existing tokens on Hedera. + +### ATS Integration Requirements + +When using Mass Payout with ATS tokens, ensure the following: + +**Required Permissions**: + +- The Mass Payout operator account (DFNS account configured in backend) must have the **SNAPSHOT_ROLE** granted in the ATS token contract +- This role is required for manual payments that capture balance snapshots +- Grant roles in ATS: Token Settings β†’ Roles β†’ Grant SNAPSHOT_ROLE +- See [ATS Roles and Permissions](/ats/user-guides/roles-and-permissions#snapshot_role) for details + +**Token Holders**: + +- In ATS, creating accounts or "holder records" doesn't make them on-chain holders +- Tokens must be **minted** to addresses before they become actual holders +- Mass Payout only distributes payments to addresses with non-zero token balances +- Always verify holder balances in ATS before creating distributions + +For troubleshooting common integration issues, see [Creating Distributions - Troubleshooting](./user-guides/creating-distributions.md#troubleshooting). + +## Getting Started + +
+
+

πŸ‘€ For End Users

+

Want to try the Mass Payout web application and distribute payments?

+
    +
  • Quick start in minutes
  • +
  • No coding required
  • +
  • Import assets from ATS
  • +
  • Create and manage distributions
  • +
  • Monitor payout status
  • +
+ Quick Start Guide +
+ +
+

πŸ‘¨β€πŸ’» For Developers

+

Integrate Mass Payout or contribute to the codebase

+
    +
  • Full development environment
  • +
  • Backend + Frontend setup
  • +
  • SDK integration
  • +
  • Contract deployment
  • +
  • Custom integrations
  • +
+ Full Development Setup +
+
+ +## Documentation + +
+
+

πŸ“š User Guides

+

Step-by-step guides for using the Mass Payout web application

+
    +
  • Importing assets from ATS
  • +
  • Creating distributions
  • +
  • Managing payouts and holders
  • +
  • Scheduled and recurring distributions
  • +
+ View Guides +
+ +
+

πŸ› οΈ Developer Guides

+

Technical guides for developers

+
    +
  • Smart contract deployment
  • +
  • SDK integration and usage
  • +
  • Backend architecture patterns
  • +
  • Frontend customization
  • +
+ View Guides +
+ +
+

πŸ“– API Documentation

+

Technical reference for contracts, SDK, and REST API

+
    +
  • Smart contract functions
  • +
  • SDK classes and methods
  • +
  • REST API endpoints
  • +
  • Code examples
  • +
+ View API Docs +
+
+ +## Technical Stack + +### Backend + +- **NestJS**: TypeScript Node.js framework +- **PostgreSQL**: Relational database for persistence +- **TypeORM**: Object-relational mapping +- **Domain-Driven Design**: Clean architecture patterns + +### Frontend + +- **React 18**: Modern UI framework +- **Chakra UI**: Component library +- **React Query**: Data fetching and caching +- **Zustand**: State management + +### Blockchain + +- **Hedera Network**: DLT platform +- **Solidity**: Smart contract language +- **Hardhat**: Development environment + +## System Requirements + +- **Node.js**: v24.0.0 or newer +- **PostgreSQL**: 12 or newer +- **npm**: v10.9.0 or newer +- **Hedera Account**: With HBAR for transactions + +## Support and Resources + +- [GitHub Repository](https://github.com/hashgraph/asset-tokenization-studio) +- [Report Issues](https://github.com/hashgraph/asset-tokenization-studio/issues) +- [Hedera Documentation](https://docs.hedera.com) +- [Hedera Discord](https://hedera.com/discord) + +## License + +Licensed under Apache License 2.0. See [LICENSE](https://github.com/hashgraph/asset-tokenization-studio/blob/main/LICENSE) for details. diff --git a/docs/mass-payout/user-guides/creating-distributions.md b/docs/mass-payout/user-guides/creating-distributions.md new file mode 100644 index 000000000..ab74fdab9 --- /dev/null +++ b/docs/mass-payout/user-guides/creating-distributions.md @@ -0,0 +1,287 @@ +--- +id: creating-distributions +title: Creating Distributions +sidebar_label: Creating Distributions +sidebar_position: 2 +--- + +# Creating Distributions + +Learn how to create and configure payment distributions for token holders. + +## Overview + +Mass Payout supports multiple execution types for distributions: + +- **Manual**: On-demand, immediate execution with full control +- **Scheduled**: Execute at a specific future date and time +- **Recurring**: Automated recurring distributions (hourly, daily, weekly, monthly) +- **Automatic**: Event-driven distributions triggered by conditions (e.g., token deposits) + +This guide covers creating distributions for both equity tokens (dividends) and bond tokens (coupons). + +## Prerequisites + +- Asset imported into Mass Payout +- Sufficient payment tokens in operator account +- Holder balances synced + +## Creating a Distribution + +### Step 1: Select Asset + +1. Navigate to "Assets" dashboard +2. Click on the asset for distribution +3. Go to the "Distributions" tab +4. **Toggle "Import Corporate Actions"** (optional): + - **Enabled**: Imports existing corporate actions (dividends, coupon payments) from the token contract into the system + - **Disabled**: Start fresh without importing historical corporate actions + - This setting only affects whether historical data is imported, not the creation of new distributions +5. Click "New Distribution" to create a new distribution + +### Step 2: Configure Distribution + +#### Execution Type + +First, select how the distribution will be executed: + +**Manual** + +- Execute the distribution immediately after creation +- Full control over execution timing +- Use for one-time, on-demand distributions + +**Scheduled** + +- Execute at a specific date and time +- Requires: **Scheduled execution time\*** (required field) +- System automatically executes at the scheduled time +- Use for planned future distributions + +**Recurring** + +- Execute automatically on a recurring schedule +- Requires: + - **Frequency**: Select from hourly, daily, weekly, or monthly + - **Start time**: When the recurring schedule begins +- System automatically creates and executes distributions +- Use for regular payments (dividends, coupons, or other recurring distributions) + +**Automatic** + +- Execute based on trigger conditions +- Requires: **Trigger condition** + - Currently available: "On Deposit" (triggers when tokens are deposited) +- Use for event-driven distributions + +#### Distribution Information + +**Payout Type** + +Select the payout calculation method: + +- **Fixed**: Fixed amount per token holder + - All holders receive the same amount regardless of holdings + - Example: $100 per holder + +- **Percentage**: Proportional to token holdings + - Amount distributed based on percentage of total supply held + - Example: 5% of total pool divided proportionally + +**Concept** (Optional) + +- Descriptive label for the distribution +- Example: "Q4 2024 Dividend", "Monthly Interest Payment" +- Helps identify the purpose in distribution history + +#### Payment Configuration + +**Total Amount**: Total to distribute + +- Enter the total amount to be distributed +- System calculates per-holder amounts based on Payout Type +- Ensure sufficient balance in operator account + +**Payment Token**: Token used for payment + +- USDC (common for dividends) +- HBAR +- Any supported HTS token + +### Step 3: Review Distribution + +Preview distribution details: + +- Total holders receiving payment +- Payment amount per holder (based on Payout Type) +- Total cost (including fees) +- Estimated transaction count +- Execution schedule (for Scheduled/Recurring distributions) + +### Step 4: Create Distribution + +Based on your selected Execution Type: + +**Manual Distribution** + +- Click "Create Distribution" +- The distribution is ready to execute +- Navigate to distribution details to manually trigger execution + +**Scheduled Distribution** + +- Click "Create Distribution" +- System schedules execution for the specified time +- Monitor in "Distributions" list until execution time +- Email notification sent upon execution (if configured) + +**Recurring Distribution** + +- Click "Create Distribution" +- System creates the recurring schedule +- First execution occurs at the specified start time +- Subsequent executions happen automatically based on frequency +- View all executions in distribution history + +**Automatic Distribution** + +- Click "Create Distribution" +- System monitors for trigger conditions +- Automatically executes when trigger condition is met (e.g., on deposit) +- View execution history in distribution details + +## Distribution Status + +Track distribution lifecycle: + +- **Pending**: Awaiting execution +- **Processing**: Payments being sent +- **Completed**: All payments successful +- **Partial**: Some payments failed +- **Failed**: Distribution failed + +## Failed Payments + +Handle payment failures: + +- View failed transactions +- Retry individual payments +- Retry all failed payments +- Cancel remaining payments + +## Viewing Distribution History + +Access past distributions: + +1. Navigate to asset details +2. Select "Distributions" tab +3. View complete history +4. Filter by type, status, date + +## Best Practices + +### Choosing Execution Type + +**Use Manual** when: + +- You need immediate, one-time distributions +- You want full control over execution timing +- Testing or debugging distributions + +**Use Scheduled** when: + +- You have a specific distribution date (e.g., quarterly dividends) +- You want to prepare distributions in advance +- You need to coordinate with external events + +**Use Recurring** when: + +- You have regular, predictable distributions (e.g., monthly dividends) +- You want to automate routine payments +- You need consistent timing for compliance + +**Use Automatic** when: + +- Distributions should trigger based on events (e.g., new deposits) +- You want real-time, event-driven distributions +- You're implementing dynamic payout strategies + +### Payout Type Selection + +**Use Fixed** when: + +- All holders should receive the same amount +- Distribution is not based on holdings percentage +- Example: Airdrop of $100 to each holder + +**Use Percentage** when: + +- Distribution should be proportional to holdings +- Standard dividend or profit-sharing +- Example: 5% dividend on token value + +### Amount Calculation + +- Verify total amount available in operator account +- Include gas fees in calculations (approximately 0.01 HBAR per transaction) +- Account for minimum balance requirements +- For Percentage payouts, ensure calculation matches expectations + +### Holder Management + +- Sync holder balances before creating distribution +- Verify holder list is up-to-date +- Review excluded addresses (if any) +- For Recurring distributions, ensure holder list is refreshed regularly + +## Troubleshooting + +### Manual Payment Fails with Role Error + +**Error**: "The account trying to perform the operation doesn't have the needed role (0x3fbb44760c0954eea3f6cb9f1f210568f5ae959dcbbef66e72f749dbaa7cc2da)" + +**Cause**: When executing manual payments that require balance snapshots, the Mass Payout operator account (DFNS account configured in backend) needs the `SNAPSHOT_ROLE` in the ATS token contract. + +**Solution**: + +1. Navigate to the ATS web application +2. Go to token **Settings** β†’ **Roles** +3. Grant `SNAPSHOT_ROLE` to the DFNS account address configured in Mass Payout backend +4. The role hash is: `0x3fbb44760c0954eea3f6cb9f1f210568f5ae959dcbbef66e72f749dbaa7cc2da` +5. Confirm the transaction + +For more details on roles, see [ATS Roles and Permissions](/ats/user-guides/roles-and-permissions#snapshot_role). + +### No Holders Found or Payment Fails + +**Error**: Distribution fails because the security token has no holders + +**Cause**: In ATS, creating a "holder" record in the system doesn't make them an actual on-chain token holder. Holders only become real holders after tokens are minted to their addresses. + +**Solution**: + +1. Verify tokens have been minted to holder addresses in ATS +2. In ATS web application, go to token details and check holder balances +3. Ensure at least one address has a non-zero token balance +4. Re-sync holder information in Mass Payout: Asset Details β†’ "Sync Holders" +5. Verify holder count is updated before creating distribution + +### Distribution Preview Shows Zero Holders + +- Sync holder balances from blockchain +- Check that tokens have been minted in ATS +- Verify token contract address is correct +- Review backend logs for sync errors + +### Payment Transactions Failing + +- Verify operator account has sufficient payment token balance +- Check gas (HBAR) balance for transaction fees +- Ensure payment token contract is valid +- Review holder addresses are valid Hedera accounts + +## Next Steps + +- [Managing Payouts](./index.md#managing-payouts) - Monitor and track distributions +- [Importing Assets](./importing-assets.md) - Import and manage token holders +- [Developer Guides](../developer-guides/index.md) - Technical documentation and integration guides diff --git a/docs/mass-payout/user-guides/importing-assets.md b/docs/mass-payout/user-guides/importing-assets.md new file mode 100644 index 000000000..82c3bf57e --- /dev/null +++ b/docs/mass-payout/user-guides/importing-assets.md @@ -0,0 +1,151 @@ +--- +id: importing-assets +title: Importing Assets +sidebar_label: Importing Assets +sidebar_position: 1 +--- + +# Importing Assets + +Learn how to import token contracts into Mass Payout for distribution management. + +## Overview + +Import assets from: + +- Asset Tokenization Studio (ATS) tokens +- Existing Hedera tokens +- Custom token contracts + +The import process automatically: + +- Syncs token holder information +- Captures holder balances +- Creates asset record in database +- Sets up for distributions + +## Prerequisites + +- Mass Payout application running +- Backend API accessible +- Operator account configured +- Token contract deployed on Hedera + +## Importing from ATS + +### Step 1: Get Token Contract ID + +From the ATS web application: + +1. Navigate to your token dashboard +2. Copy the token contract ID (format: `0.0.XXXXXXXX`) + +### Step 2: Import in Mass Payout + +1. Open Mass Payout frontend +2. Click "Import Asset" +3. Enter token contract ID +4. Click "Import" + +### Step 3: Sync Holder Information + +The system automatically: + +- Queries token contract for holder list +- Retrieves current balances +- Stores holder information in database +- Displays asset summary + +## Importing Custom Tokens + +For non-ATS tokens: + +1. Ensure token is deployed on Hedera +2. Token must be compatible with Hedera Token Service (HTS) +3. Enter contract ID in import form +4. System attempts to sync holder data + +**Note**: Some token formats may not be fully compatible. + +## Viewing Imported Assets + +After import: + +- Asset appears in dashboard +- View holder count and total supply +- See distribution history +- Access asset details + +## Managing Assets + +### Update Holder Information + +Refresh holder data: + +1. Navigate to asset details +2. Click "Sync Holders" +3. Latest balances updated from blockchain + +### Asset Details + +View comprehensive information: + +- Token name, symbol, supply +- Contract addresses +- Holder count and distribution +- Sync status and last update + +## Troubleshooting + +### Import Failed + +**Contract Not Found**: + +- Verify contract ID is correct +- Ensure contract is deployed on configured network (testnet/mainnet) + +**Sync Error**: + +- Check operator account has query permissions +- Verify Mirror Node URL is accessible +- Ensure token contract is HTS-compatible + +### Holder Data Not Syncing + +- Check blockchain event listener is running +- Verify Mirror Node connection +- Review backend logs for errors + +### Asset Imported But Shows Zero Holders + +**Cause**: In ATS, creating accounts or "holder records" in the system doesn't make them actual on-chain token holders. An address only becomes a holder after tokens are minted to it. + +**Important**: When you create a security token in ATS, even if you set up holder accounts, they won't appear as holders in Mass Payout until you mint tokens to their addresses. + +**Solution**: + +1. **Mint Tokens in ATS**: + - Go to ATS web application + - Navigate to your token + - Use the mint function to issue tokens to holder addresses + - Confirm at least one address has a non-zero balance + +2. **Verify in ATS**: + - Check token details page in ATS + - View holder list and balances + - Ensure holders appear with balances > 0 + +3. **Re-sync in Mass Payout**: + - Navigate to asset details in Mass Payout + - Click "Sync Holders" + - Holder count should update to reflect on-chain balances + +4. **Create Distribution**: + - Now you can create distributions + - Payments will only go to addresses with actual token balances + +**Note**: This is a common issue when first setting up ATS tokens. Always mint tokens before attempting to create distributions in Mass Payout. + +## Next Steps + +- [Create Distributions](./creating-distributions.md) - Set up payouts for imported assets diff --git a/docs/mass-payout/user-guides/index.md b/docs/mass-payout/user-guides/index.md new file mode 100644 index 000000000..8a7de739e --- /dev/null +++ b/docs/mass-payout/user-guides/index.md @@ -0,0 +1,74 @@ +--- +id: index +title: User Guides +sidebar_position: 3 +--- + +# User Guides + +Step-by-step guides for using the Mass Payout web application. + +## Getting Started + +Before following these guides, make sure you have: + +1. [Set up the Mass Payout application](../getting-started/quick-start.md) +2. Backend and frontend services running +3. PostgreSQL database configured +4. Hedera operator account with HBAR + +## Available Guides + +
+
+

πŸ“₯ Importing Assets

+

Import token contracts from ATS or other sources

+
    +
  • Import from ATS
  • +
  • Sync token holder information
  • +
  • View holder balances
  • +
  • Update holder data
  • +
+ Read Guide +
+ +
+

πŸ’΅ Creating Distributions

+

Set up dividend or coupon payment distributions

+
    +
  • Configure distribution details
  • +
  • Set record dates
  • +
  • Calculate payment amounts
  • +
  • Schedule execution
  • +
+ Read Guide +
+ +
+ +## Managing Payouts + +After creating distributions, you can manage them through the web interface. Payouts are organized into three categories: + +- **Upcoming**: Distributions that are scheduled but not yet executed + - You can cancel distributions from this view if needed + - View scheduled execution dates + - Review distribution details before execution + +- **Ongoing**: Distributions currently being processed + - Monitor real-time execution progress + - View transaction status + - Track payment confirmations + +- **Completed**: Successfully executed distributions + - View payment history + - Check transaction records + - Generate reports + +> **Note**: Only distributions in the "Upcoming" status can be cancelled. Once a distribution moves to "Ongoing" or "Completed", it cannot be cancelled. + +## Need Help? + +- Check the [Developer Guides](../developer-guides/index.md) for technical details +- See the [API Documentation](../api/index.md) for REST API references +- [Report issues](https://github.com/hashgraph/asset-tokenization-studio/issues) on GitHub diff --git a/.github/WORKFLOWS.md b/docs/references/guides/ci-cd-workflows.md similarity index 51% rename from .github/WORKFLOWS.md rename to docs/references/guides/ci-cd-workflows.md index c19e1579c..44137abff 100644 --- a/.github/WORKFLOWS.md +++ b/docs/references/guides/ci-cd-workflows.md @@ -1,47 +1,60 @@ -# GitHub Workflows Guide +--- +id: ci-cd-workflows +title: CI/CD Workflows +sidebar_label: CI/CD Workflows +--- -Quick reference for development workflow and releases in the Asset Tokenization Studio monorepo. +# CI/CD Workflows Documentation -## Daily Development +This guide explains the Continuous Integration and Continuous Deployment (CI/CD) workflows used in the Asset Tokenization Studio monorepo. -### 1. Create Feature Branch +## Purpose -```bash -git checkout develop -git pull origin develop -git checkout -b feature/your-feature-name -``` +These documents explain how our automated workflows function, making it easier for developers to: -### 2. Make Changes & Create Changeset +- Understand what happens when they push code +- Debug CI/CD failures +- Modify or extend existing workflows +- Set up new automation pipelines -```bash -# After making your changes -npm run changeset -``` +## What Belongs Here -- Select affected packages -- Choose change type: **patch** (bug fix) / **minor** (feature) / **major** (breaking change) -- Write clear description +- **Workflow Explanations**: Detailed descriptions of GitHub Actions workflows +- **Pipeline Diagrams**: Visual representations of CI/CD flows +- **Troubleshooting Guides**: Common CI/CD issues and solutions +- **Secrets Management**: Documentation of required secrets and environment variables +- **Release Process**: Step-by-step release procedures -### 3. Commit & Push +## Current Workflows -```bash -git add . -git commit --signoff -S -m "feat: your commit message" -git push origin feature/your-feature-name -``` +### Testing Workflows -### 4. Open PR to `develop` +- **`.github/workflows/test-ats.yml`**: Runs ATS tests (contracts, SDK, web app) + - Triggered on: Changes to `packages/ats/**` or `apps/ats/**` -Automated checks will validate: +- **`.github/workflows/test-mp.yml`**: Runs Mass Payout tests + - Triggered on: Changes to `packages/mass-payout/**` or `apps/mass-payout/**` -- βœ… Tests pass -- βœ… Changeset exists (or bypass label) -- βœ… DCO compliance +### Release Workflows -**Bypass changeset** for non-feature changes by adding label: `no-changeset`, `docs-only`, `chore`, or `hotfix` +- **`.github/workflows/publish.yml`**: Publishes packages to npm + - Triggered by: Release tags (`v*-ats`, `v*-mp`) ---- +- **ATS Release** / **Mass Payout Release**: Semi-automated release processes with manual version bumping (see [Release Process](#release-process) below) + +## Understanding Conditional Workflows + +The monorepo uses **path-based filtering** to run tests only for changed modules: + +```yaml +on: + push: + paths: + - "packages/ats/**" + - "apps/ats/**" +``` + +This improves CI efficiency by avoiding unnecessary test runs. ## Release Process @@ -102,7 +115,11 @@ git push 2. Click **Run workflow** 3. Select **preview** or **release** ---- +### Why Manual Version Bumping? + +- GPG-signed commits required for security +- Allows human review of version changes +- Prevents accidental releases ## Workflows Reference @@ -116,23 +133,21 @@ git push | **ATS Publish** | Tag push `v*-ats` | Publish to npm | | **Mass Payout Publish** | Tag push `v*-mp` | Publish to npm | ---- - ## Troubleshooting -### ❌ "Uncommitted changes detected" +### "Uncommitted changes detected" **Solution**: Run `changeset:version` locally, commit with GPG signature, and push before triggering release workflow. -### ❌ "Tag already exists" +### "Tag already exists" **Solution**: Version bump may not have occurred. Check current version and existing tags with `git tag -l`. -### ❌ Changeset check failed +### Changeset check failed **Solution**: Run `npm run changeset` or add bypass label (`no-changeset`, `docs-only`, `chore`, `hotfix`). -### ❌ GPG signing error +### GPG signing error **Solution**: Configure GPG key: @@ -141,7 +156,7 @@ git config --global user.signingkey YOUR_GPG_KEY_ID git config --global commit.gpgsign true ``` -### ❌ Tests failing +### Tests failing **Solution**: Run tests locally before pushing: @@ -150,8 +165,6 @@ npm run ats:test npm run mass-payout:test ``` ---- - ## Quick Commands ```bash @@ -165,11 +178,25 @@ npm run mass-payout:test # Run Mass Payout tests npm run changeset:version # Bump versions & generate CHANGELOGs ``` ---- +## Required GitHub Secrets + +- `NPM_TOKEN`: For publishing packages to npm registry +- `GITHUB_TOKEN`: Automatically provided by GitHub Actions + +## Modifying Workflows + +When modifying CI/CD workflows: + +1. **Test locally first**: Use [act](https://github.com/nektos/act) to test workflows locally +2. **Update documentation**: Keep these docs in sync with workflow changes +3. **Consider impact**: Changes affect all developers, communicate widely +4. **Use conditional runs**: Avoid running unnecessary jobs +5. **Fail fast**: Order jobs to catch errors early + +## Questions? -## Important Notes +For workflow-related questions: -- **All commits require GPG signatures** (`git commit -S`) -- **Never run `changeset version` in CI** - always do it locally -- **Version bumps must be committed and pushed** before triggering release workflows -- Only authorized teams can trigger release workflows (see CODEOWNERS) +1. Check this documentation +2. Review the actual workflow files in `.github/workflows/` +3. Create an issue with the `ci/cd` label diff --git a/docs/dev-monorepo-migration.md b/docs/references/guides/monorepo-migration.md similarity index 98% rename from docs/dev-monorepo-migration.md rename to docs/references/guides/monorepo-migration.md index 167fc096e..ba00b553d 100644 --- a/docs/dev-monorepo-migration.md +++ b/docs/references/guides/monorepo-migration.md @@ -1,3 +1,9 @@ +--- +id: monorepo-migration +title: Migration Guide - Workspace Structure Update +sidebar_label: Monorepo Migration +--- + # Migration Guide: Workspace Structure Update This document outlines the changes made during the BBND-1075 workspace migration and how to adapt to the new structure. diff --git a/docs/references/index.md b/docs/references/index.md new file mode 100644 index 000000000..41e85bb8b --- /dev/null +++ b/docs/references/index.md @@ -0,0 +1,15 @@ +--- +id: index +title: References +sidebar_label: References +--- + +# References + +Technical references and guides for the Asset Tokenization Studio project. + +## Contents + +### [Guides](./guides/) + +Additional technical guides and references. diff --git a/eslint.config.mjs b/eslint.config.mjs index 23da2aca8..aef4cab00 100644 --- a/eslint.config.mjs +++ b/eslint.config.mjs @@ -1,66 +1,66 @@ -import js from '@eslint/js'; -import typescript from '@typescript-eslint/eslint-plugin'; -import typescriptParser from '@typescript-eslint/parser'; -import prettier from 'eslint-plugin-prettier'; -import unusedImports from 'eslint-plugin-unused-imports'; -import jest from 'eslint-plugin-jest'; -import reactHooks from 'eslint-plugin-react-hooks'; -import reactRefresh from 'eslint-plugin-react-refresh'; -import globals from 'globals'; +import js from "@eslint/js"; +import typescript from "@typescript-eslint/eslint-plugin"; +import typescriptParser from "@typescript-eslint/parser"; +import prettier from "eslint-plugin-prettier"; +import unusedImports from "eslint-plugin-unused-imports"; +import jest from "eslint-plugin-jest"; +import reactHooks from "eslint-plugin-react-hooks"; +import reactRefresh from "eslint-plugin-react-refresh"; +import globals from "globals"; export default [ // Base configuration - ignores { ignores: [ - '**/node_modules/**', - '**/build/**', - '**/dist/**', - '**/out/**', - '**/coverage/**', - '**/.turbo/**', - '**/typechain-types/**', - '**/artifacts/**', - '**/cache/**', - '**/Smart Contracts Audit Report.pdf', - '**/*.sol-coverage', - '**/gas-report.txt', - '**/.env*', - '**/*.pdf', - '**/docs/**', - '**/.vscode/**', - '**/.idea/**', - '**/fixtures/**', - '**/__mocks__/**', - '**/*.config.js', - '**/*.config.cjs', - '**/*.config.mjs', - '**/commitlint.config.ts', - '**/jest.config.js', - '**/hardhat.config.ts', - '**/*.js', - '**/*d.ts', - '**/tmp/**', - '**/example/**', - '**/src_old/**', - '**/package.json', + "**/node_modules/**", + "**/build/**", + "**/dist/**", + "**/out/**", + "**/coverage/**", + "**/.turbo/**", + "**/typechain-types/**", + "**/artifacts/**", + "**/cache/**", + "**/Smart Contracts Audit Report.pdf", + "**/*.sol-coverage", + "**/gas-report.txt", + "**/.env*", + "**/*.pdf", + "**/docs/**", + "**/.vscode/**", + "**/.idea/**", + "**/fixtures/**", + "**/__mocks__/**", + "**/*.config.js", + "**/*.config.cjs", + "**/*.config.mjs", + "**/commitlint.config.ts", + "**/jest.config.js", + "**/hardhat.config.ts", + "**/*.js", + "**/*d.ts", + "**/tmp/**", + "**/example/**", + "**/src_old/**", + "**/package.json", // TODO: REMOVE mass-payout ignore lines // Temporally ignore mass-payout related files - '**/mass-payout/**', - 'apps/mass-payout/**', - 'packages/mass-payout/**', + "**/mass-payout/**", + "apps/mass-payout/**", + "packages/mass-payout/**", ], }, // Default configuration for all JS/TS files { - files: ['**/*.{js,mjs,cjs,ts,tsx,mts}'], + files: ["**/*.{js,mjs,cjs,ts,tsx,mts}"], languageOptions: { ecmaVersion: 2020, - sourceType: 'module', + sourceType: "module", parser: typescriptParser, parserOptions: { ecmaVersion: 2020, - sourceType: 'module', + sourceType: "module", }, globals: { ...globals.node, @@ -68,28 +68,28 @@ export default [ }, }, plugins: { - '@typescript-eslint': typescript, + "@typescript-eslint": typescript, prettier, - 'unused-imports': unusedImports, + "unused-imports": unusedImports, }, rules: { ...js.configs.recommended.rules, ...typescript.configs.recommended.rules, - '@typescript-eslint/no-explicit-any': 'off', - '@typescript-eslint/no-unused-vars': [ - 'error', + "@typescript-eslint/no-explicit-any": "off", + "@typescript-eslint/no-unused-vars": [ + "error", { - argsIgnorePattern: '^_', - varsIgnorePattern: '^_', - caughtErrorsIgnorePattern: '^_', + argsIgnorePattern: "^_", + varsIgnorePattern: "^_", + caughtErrorsIgnorePattern: "^_", }, ], - 'unused-imports/no-unused-imports': 'error', - '@typescript-eslint/no-var-requires': 'off', - 'prettier/prettier': [ - 'error', + "unused-imports/no-unused-imports": "error", + "@typescript-eslint/no-var-requires": "off", + "prettier/prettier": [ + "error", { - endOfLine: 'auto', + endOfLine: "auto", }, ], }, @@ -97,26 +97,22 @@ export default [ // Contract-specific TypeScript files (non-test) { - files: ['packages/ats/contracts/**/*.ts'], - ignores: [ - '**/*.test.ts', - '**/*.spec.ts', - 'packages/ats/contracts/test/**/*', - ], + files: ["packages/ats/contracts/**/*.ts"], + ignores: ["**/*.test.ts", "**/*.spec.ts", "packages/ats/contracts/test/**/*"], rules: { - '@typescript-eslint/no-unused-expressions': 'error', + "@typescript-eslint/no-unused-expressions": "error", }, }, // Contract test files { files: [ - 'packages/ats/contracts/**/*.test.ts', - 'packages/ats/contracts/**/*.spec.ts', - 'packages/ats/contracts/test/**/*.ts', - 'packages/ats/contracts/**/*.test.js', - 'packages/ats/contracts/**/*.spec.js', - 'packages/ats/contracts/test/**/*.js', + "packages/ats/contracts/**/*.test.ts", + "packages/ats/contracts/**/*.spec.ts", + "packages/ats/contracts/test/**/*.ts", + "packages/ats/contracts/**/*.test.js", + "packages/ats/contracts/**/*.spec.js", + "packages/ats/contracts/test/**/*.js", ], languageOptions: { // Include mocha globals used by Hardhat tests (describe, it, before, after, etc.) @@ -127,31 +123,31 @@ export default [ }, }, rules: { - '@typescript-eslint/no-unused-expressions': 'off', + "@typescript-eslint/no-unused-expressions": "off", }, }, // SDK files { - files: ['packages/ats/sdk/**/*.ts', 'packages/ats/sdk/**/*.mts'], + files: ["packages/ats/sdk/**/*.ts", "packages/ats/sdk/**/*.mts"], plugins: { jest, }, rules: { ...jest.configs.recommended.rules, - '@typescript-eslint/explicit-function-return-type': 'warn', - '@typescript-eslint/no-var-requires': 'off', + "@typescript-eslint/explicit-function-return-type": "warn", + "@typescript-eslint/no-var-requires": "off", }, }, // SDK test files - additional test-specific overrides { files: [ - 'packages/ats/sdk/**/*.test.ts', - 'packages/ats/sdk/**/*.spec.ts', - 'packages/ats/sdk/__tests__/**/*.ts', - 'packages/ats/sdk/**/__tests__/**/*.ts', - 'packages/ats/sdk/**/jest-setup-file.ts', + "packages/ats/sdk/**/*.test.ts", + "packages/ats/sdk/**/*.spec.ts", + "packages/ats/sdk/__tests__/**/*.ts", + "packages/ats/sdk/**/__tests__/**/*.ts", + "packages/ats/sdk/**/jest-setup-file.ts", ], languageOptions: { // Extend existing globals with Jest testing globals so describe/it/expect are defined @@ -162,13 +158,13 @@ export default [ }, }, rules: { - '@typescript-eslint/explicit-function-return-type': 'off', + "@typescript-eslint/explicit-function-return-type": "off", }, }, // SDK jest mock files (__mocks__ folders) { - files: ['packages/ats/sdk/**/__mocks__/**/*.{js,ts,tsx}'], + files: ["packages/ats/sdk/**/__mocks__/**/*.{js,ts,tsx}"], languageOptions: { globals: { ...globals.node, @@ -180,7 +176,7 @@ export default [ // React/Web app files { - files: ['apps/ats/web/**/*.{ts,tsx,js,jsx}'], + files: ["apps/ats/web/**/*.{ts,tsx,js,jsx}"], languageOptions: { globals: { ...globals.browser, @@ -188,56 +184,56 @@ export default [ ...globals.jest, }, parserOptions: { - ecmaVersion: 'latest', - sourceType: 'module', + ecmaVersion: "latest", + sourceType: "module", ecmaFeatures: { jsx: true, }, }, }, plugins: { - 'react-hooks': reactHooks, - 'react-refresh': reactRefresh, + "react-hooks": reactHooks, + "react-refresh": reactRefresh, }, settings: { react: { - version: 'detect', + version: "detect", }, }, rules: { ...reactHooks.configs.recommended.rules, - 'react-refresh/only-export-components': 'off', - '@typescript-eslint/ban-ts-comment': 'off', - '@typescript-eslint/no-non-null-assertion': 'off', - '@typescript-eslint/no-non-null-asserted-optional-chain': 'off', - '@typescript-eslint/no-empty-function': 'off', + "react-refresh/only-export-components": "off", + "@typescript-eslint/ban-ts-comment": "off", + "@typescript-eslint/no-non-null-assertion": "off", + "@typescript-eslint/no-non-null-asserted-optional-chain": "off", + "@typescript-eslint/no-empty-function": "off", }, }, // Mass payout packages { files: [ - 'apps/mass-payout/backend/**/*.test.ts', - 'apps/mass-payout/backend/**/*.spec.ts', - 'apps/mass-payout/backend/test/**/*.ts', - 'apps/mass-payout/backend/**/*.e2e.spec.ts', - 'apps/mass-payout/backend/**/e2e/**/*.ts', - 'packages/mass-payout/**/*.test.ts', - 'packages/mass-payout/**/*.spec.ts', + "apps/mass-payout/backend/**/*.test.ts", + "apps/mass-payout/backend/**/*.spec.ts", + "apps/mass-payout/backend/test/**/*.ts", + "apps/mass-payout/backend/**/*.e2e.spec.ts", + "apps/mass-payout/backend/**/e2e/**/*.ts", + "packages/mass-payout/**/*.test.ts", + "packages/mass-payout/**/*.spec.ts", ], languageOptions: { globals: { ...globals.node, ...globals.es2020, ...globals.jest, - describe: 'readonly', - it: 'readonly', - test: 'readonly', - expect: 'readonly', - beforeAll: 'readonly', - beforeEach: 'readonly', - afterAll: 'readonly', - afterEach: 'readonly', + describe: "readonly", + it: "readonly", + test: "readonly", + expect: "readonly", + beforeAll: "readonly", + beforeEach: "readonly", + afterAll: "readonly", + afterEach: "readonly", }, }, plugins: { @@ -245,84 +241,78 @@ export default [ }, rules: { ...jest.configs.recommended.rules, - '@typescript-eslint/no-explicit-any': 'off', - '@typescript-eslint/no-unused-expressions': 'off', - 'no-unused-expressions': 'off', + "@typescript-eslint/no-explicit-any": "off", + "@typescript-eslint/no-unused-expressions": "off", + "no-unused-expressions": "off", }, }, // Mass payout frontend React files (non-test) { - files: ['apps/mass-payout/frontend/**/*.{ts,tsx,js,jsx}'], - ignores: [ - '**/*.test.ts', - '**/*.test.tsx', - '**/*.spec.ts', - '**/*.spec.tsx', - '**/__tests__/**/*', - ], + files: ["apps/mass-payout/frontend/**/*.{ts,tsx,js,jsx}"], + ignores: ["**/*.test.ts", "**/*.test.tsx", "**/*.spec.ts", "**/*.spec.tsx", "**/__tests__/**/*"], languageOptions: { globals: { ...globals.browser, ...globals.node, }, parserOptions: { - ecmaVersion: 'latest', - sourceType: 'module', + ecmaVersion: "latest", + sourceType: "module", ecmaFeatures: { jsx: true, }, }, }, plugins: { - 'react-hooks': reactHooks, - 'react-refresh': reactRefresh, + "react-hooks": reactHooks, + "react-refresh": reactRefresh, }, settings: { react: { - version: 'detect', + version: "detect", }, }, rules: { ...reactHooks.configs.recommended.rules, - 'react-refresh/only-export-components': 'off', - '@typescript-eslint/ban-ts-comment': 'warn', - '@typescript-eslint/no-non-null-assertion': 'off', - '@typescript-eslint/no-non-null-asserted-optional-chain': 'off', - '@typescript-eslint/no-empty-function': 'off', + "react-refresh/only-export-components": "off", + "@typescript-eslint/ban-ts-comment": "warn", + "@typescript-eslint/no-non-null-assertion": "off", + "@typescript-eslint/no-non-null-asserted-optional-chain": "off", + "@typescript-eslint/no-empty-function": "off", }, }, // Mass payout frontend test files { files: [ - 'apps/mass-payout/frontend/**/*.test.ts', - 'apps/mass-payout/frontend/**/*.test.tsx', - 'apps/mass-payout/frontend/**/*.spec.ts', - 'apps/mass-payout/frontend/**/*.spec.tsx', - 'apps/mass-payout/frontend/**/__tests__/**/*.{ts,tsx,js,jsx}', - 'apps/mass-payout/frontend/src/**/__tests__/**/*.{ts,tsx}', + "apps/mass-payout/frontend/**/*.test.ts", + "apps/mass-payout/frontend/**/*.test.tsx", + "apps/mass-payout/frontend/**/*.spec.ts", + "apps/mass-payout/frontend/**/*.spec.tsx", + "apps/mass-payout/frontend/**/__tests__/**/*.{ts,tsx,js,jsx}", + "apps/mass-payout/frontend/src/**/__tests__/**/*.{ts,tsx}", ], languageOptions: { globals: { ...globals.browser, ...globals.node, ...globals.jest, - describe: 'readonly', - it: 'readonly', - test: 'readonly', - expect: 'readonly', - beforeAll: 'readonly', - beforeEach: 'readonly', - afterAll: 'readonly', - afterEach: 'readonly', - jest: 'readonly', - document: 'readonly', - window: 'readonly', + describe: "readonly", + it: "readonly", + test: "readonly", + expect: "readonly", + beforeAll: "readonly", + beforeEach: "readonly", + afterAll: "readonly", + afterEach: "readonly", + jest: "readonly", + document: "readonly", + window: "readonly", }, parserOptions: { - ecmaVersion: 'latest', - sourceType: 'module', + ecmaVersion: "latest", + sourceType: "module", ecmaFeatures: { jsx: true, }, @@ -330,20 +320,20 @@ export default [ }, plugins: { jest, - 'react-hooks': reactHooks, + "react-hooks": reactHooks, }, settings: { react: { - version: 'detect', + version: "detect", }, }, rules: { ...jest.configs.recommended.rules, - '@typescript-eslint/no-explicit-any': 'off', - '@typescript-eslint/no-unused-expressions': 'off', - '@typescript-eslint/ban-ts-comment': 'off', - 'no-unused-expressions': 'off', - 'react-hooks/rules-of-hooks': 'off', + "@typescript-eslint/no-explicit-any": "off", + "@typescript-eslint/no-unused-expressions": "off", + "@typescript-eslint/ban-ts-comment": "off", + "no-unused-expressions": "off", + "react-hooks/rules-of-hooks": "off", }, }, ]; diff --git a/package-lock.json b/package-lock.json index d923ecdf1..f354f631f 100644 --- a/package-lock.json +++ b/package-lock.json @@ -10,7 +10,8 @@ "packages/ats/*", "packages/mass-payout/*", "apps/ats/*", - "apps/mass-payout/*" + "apps/mass-payout/*", + "apps/docs" ], "devDependencies": { "@changesets/cli": "^2.29.6", @@ -41,7 +42,7 @@ }, "apps/ats/web": { "name": "@hashgraph/asset-tokenization-dapp", - "version": "3.1.0", + "version": "4.0.0", "license": "Apache-2.0", "dependencies": { "@chakra-ui/react": "2.6.1", @@ -116,15 +117,103 @@ "node": ">=14.17" } }, + "apps/docs": { + "name": "@hashgraph/asset-tokenization-studio-docs", + "version": "1.1.0", + "dependencies": { + "@docusaurus/core": "3.9.2", + "@docusaurus/preset-classic": "3.9.2", + "@docusaurus/theme-mermaid": "^3.9.2", + "@mdx-js/react": "^3.0.0", + "clsx": "^2.0.0", + "mdast-util-to-string": "^4.0.0", + "prism-react-renderer": "^2.3.0", + "react": "^19.0.0", + "react-dom": "^19.0.0", + "reading-time": "^1.5.0" + }, + "devDependencies": { + "@docusaurus/module-type-aliases": "3.9.2", + "@docusaurus/tsconfig": "3.9.2", + "@docusaurus/types": "3.9.2", + "typescript": "~5.6.2" + }, + "engines": { + "node": ">=20.0" + } + }, + "apps/docs/node_modules/@types/mdast": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/@types/mdast/-/mdast-4.0.4.tgz", + "integrity": "sha512-kGaNbPh1k7AFzgpud/gMdvIm5xuECykRR+JnWKQno9TAXVa6WIVCGTPvYGekIDL4uwCZQSYbUxNBSb1aUo79oA==", + "license": "MIT", + "dependencies": { + "@types/unist": "*" + } + }, + "apps/docs/node_modules/mdast-util-to-string": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/mdast-util-to-string/-/mdast-util-to-string-4.0.0.tgz", + "integrity": "sha512-0H44vDimn51F0YwvxSJSm0eCDOJTRlmN0R1yBh4HLj9wiV1Dn0QoXGbvFAWj2hSItVTlCmBF1hqKlIyUBVFLPg==", + "license": "MIT", + "dependencies": { + "@types/mdast": "^4.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "apps/docs/node_modules/react": { + "version": "19.2.3", + "resolved": "https://registry.npmjs.org/react/-/react-19.2.3.tgz", + "integrity": "sha512-Ku/hhYbVjOQnXDZFv2+RibmLFGwFdeeKHFcOTlrt7xplBnya5OGn/hIRDsqDiSUcfORsDC7MPxwork8jBwsIWA==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "apps/docs/node_modules/react-dom": { + "version": "19.2.3", + "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-19.2.3.tgz", + "integrity": "sha512-yELu4WmLPw5Mr/lmeEpox5rw3RETacE++JgHqQzd2dg+YbJuat3jH4ingc+WPZhxaoFzdv9y33G+F7Nl5O0GBg==", + "license": "MIT", + "dependencies": { + "scheduler": "^0.27.0" + }, + "peerDependencies": { + "react": "^19.2.3" + } + }, + "apps/docs/node_modules/scheduler": { + "version": "0.27.0", + "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.27.0.tgz", + "integrity": "sha512-eNv+WrVbKu1f3vbYJT/xtiF5syA5HPIMtf9IgY/nKg0sWqzAUEvqY/xm7OcZc/qafLx/iO9FgOmeSAp4v5ti/Q==", + "license": "MIT" + }, + "apps/docs/node_modules/typescript": { + "version": "5.6.3", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.6.3.tgz", + "integrity": "sha512-hjcS1mhfuyi4WW8IWtjP7brDrG2cuDZukyrYrSauoXGNgx0S7zceP07adYkJycEr56BOUTNPzbInooiN3fn1qw==", + "dev": true, + "license": "Apache-2.0", + "bin": { + "tsc": "bin/tsc", + "tsserver": "bin/tsserver" + }, + "engines": { + "node": ">=14.17" + } + }, "apps/mass-payout/backend": { - "name": "@mass-payout/backend", + "name": "@hashgraph/mass-payout-backend", "version": "1.0.0", "license": "Apache-2.0", "dependencies": { "@faker-js/faker": "9.8.0", "@hashgraph/asset-tokenization-sdk": "*", - "@hashgraph/sdk": "2.66.0", - "@mass-payout/sdk": "*", + "@hashgraph/mass-payout-sdk": "*", + "@hiero-ledger/sdk": "2.79.0", "@nestjs/cli": "10.3.2", "@nestjs/common": "10.3.3", "@nestjs/config": "3.2.0", @@ -205,7 +294,7 @@ "@hashgraph/asset-tokenization-contracts": "1.15.2", "@hashgraph/hedera-custodians-integration": "^1.4.1", "@hashgraph/hedera-wallet-connect": "1.3.1", - "@hashgraph/sdk": "2.64.5", + "@hiero-ledger/sdk": "2.79.0", "@metamask/detect-provider": "^2.0.0", "@metamask/providers": "^12.0.0", "@terminal3/verify_vc": "^0.0.20", @@ -229,118 +318,6 @@ "node": ">= 16.17" } }, - "apps/mass-payout/backend/node_modules/@hashgraph/asset-tokenization-sdk/node_modules/@hashgraph/sdk": { - "version": "2.64.5", - "resolved": "https://registry.npmjs.org/@hashgraph/sdk/-/sdk-2.64.5.tgz", - "integrity": "sha512-AIa8jlkhDx2GZHSURWb3YuobTDwozmVyiyvt7MZRDDYKQbibrpyvrTI6E2IRx1xn7fI0Vd5aHELtmHYmkEVjag==", - "license": "Apache-2.0", - "dependencies": { - "@ethersproject/abi": "^5.8.0", - "@ethersproject/bignumber": "^5.8.0", - "@ethersproject/bytes": "^5.8.0", - "@ethersproject/rlp": "^5.8.0", - "@grpc/grpc-js": "^1.12.6", - "@hashgraph/cryptography": "1.7.2", - "@hashgraph/proto": "2.18.5", - "bignumber.js": "^9.1.1", - "bn.js": "^5.1.1", - "crypto-js": "^4.2.0", - "js-base64": "^3.7.4", - "long": "^5.3.1", - "pino": "^9.6.0", - "pino-pretty": "^13.0.0", - "protobufjs": "7.2.5", - "rfc4648": "^1.5.3", - "utf8": "^3.0.0" - }, - "engines": { - "node": ">=18.0.0" - }, - "peerDependencies": { - "bn.js": "^5.2.1" - } - }, - "apps/mass-payout/backend/node_modules/@hashgraph/asset-tokenization-sdk/node_modules/@hashgraph/sdk/node_modules/long": { - "version": "5.3.2", - "resolved": "https://registry.npmjs.org/long/-/long-5.3.2.tgz", - "integrity": "sha512-mNAgZ1GmyNhD7AuqnTG3/VQ26o760+ZYBPKjPvugO8+nLbYfX6TVpJPseBvopbdY+qpZ/lKUnmEc1LeZYS3QAA==", - "license": "Apache-2.0" - }, - "apps/mass-payout/backend/node_modules/@hashgraph/cryptography": { - "version": "1.7.2", - "resolved": "https://registry.npmjs.org/@hashgraph/cryptography/-/cryptography-1.7.2.tgz", - "integrity": "sha512-XeLpuoUNrW/F9gCiivmg5RnHjoNc8i5S4kK5BII6Dk3KfgeYt6hwJw1jGqwXenmrprbxPq7QIh10HuCTrGCzcw==", - "license": "Apache-2.0", - "dependencies": { - "@noble/curves": "^1.8.1", - "asn1js": "^3.0.6", - "bignumber.js": "^9.1.1", - "bn.js": "^5.2.1", - "buffer": "^6.0.3", - "crypto-js": "^4.2.0", - "forge-light": "1.1.4", - "js-base64": "^3.7.7", - "react-native-get-random-values": "^1.11.0", - "spark-md5": "^3.0.2", - "tweetnacl": "^1.0.3", - "utf8": "^3.0.0" - }, - "engines": { - "node": ">=12.0.0" - }, - "peerDependenciesMeta": { - "expo-crypto": { - "optional": true - } - } - }, - "apps/mass-payout/backend/node_modules/@hashgraph/proto": { - "version": "2.18.5", - "resolved": "https://registry.npmjs.org/@hashgraph/proto/-/proto-2.18.5.tgz", - "integrity": "sha512-LifEGGhvkqF49PYVP0xkcnCh8fP43q/+JkGPdZkwKglw1wFAJkPHZtQmGZSjmDpl2gbJiRyzvzJ1Q9MJ1VBA4Q==", - "license": "Apache-2.0", - "dependencies": { - "long": "^5.2.3", - "protobufjs": "7.2.5" - }, - "engines": { - "node": ">=10.0.0" - } - }, - "apps/mass-payout/backend/node_modules/@hashgraph/proto/node_modules/long": { - "version": "5.3.2", - "resolved": "https://registry.npmjs.org/long/-/long-5.3.2.tgz", - "integrity": "sha512-mNAgZ1GmyNhD7AuqnTG3/VQ26o760+ZYBPKjPvugO8+nLbYfX6TVpJPseBvopbdY+qpZ/lKUnmEc1LeZYS3QAA==", - "license": "Apache-2.0" - }, - "apps/mass-payout/backend/node_modules/@mass-payout/sdk": { - "resolved": "apps/packages/mass-payout/sdk", - "link": true - }, - "apps/mass-payout/backend/node_modules/@react-native/virtualized-lists": { - "version": "0.81.4", - "resolved": "https://registry.npmjs.org/@react-native/virtualized-lists/-/virtualized-lists-0.81.4.tgz", - "integrity": "sha512-hBM+rMyL6Wm1Q4f/WpqGsaCojKSNUBqAXLABNGoWm1vabZ7cSnARMxBvA/2vo3hLcoR4v7zDK8tkKm9+O0LjVA==", - "license": "MIT", - "peer": true, - "dependencies": { - "invariant": "^2.2.4", - "nullthrows": "^1.1.1" - }, - "engines": { - "node": ">= 20.19.4" - }, - "peerDependencies": { - "@types/react": "^19.1.0", - "react": "*", - "react-native": "*" - }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - } - } - }, "apps/mass-payout/backend/node_modules/@types/jest": { "version": "29.5.12", "resolved": "https://registry.npmjs.org/@types/jest/-/jest-29.5.12.tgz", @@ -392,6 +369,7 @@ "integrity": "sha512-5IgYJ9EO/12pOUwiBKFkpU7rS3IU21mtXzB81TNwq2xEybcmAZrE9qwDtsb5uQd9aVO9o0fdabFyAmKveXyujg==", "dev": true, "license": "BSD-2-Clause", + "peer": true, "dependencies": { "@typescript-eslint/scope-manager": "8.0.1", "@typescript-eslint/types": "8.0.1", @@ -415,16 +393,6 @@ } } }, - "apps/mass-payout/backend/node_modules/commander": { - "version": "12.1.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-12.1.0.tgz", - "integrity": "sha512-Vw8qHK3bZM9y/P10u3Vib8o/DdkvA2OtPtZvD871QKjy74Wj1WSKFILMPRPSdUSx5RFK1arlJzEtA4PkFgnbuA==", - "license": "MIT", - "peer": true, - "engines": { - "node": ">=18" - } - }, "apps/mass-payout/backend/node_modules/eslint": { "version": "8.57.0", "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.57.0.tgz", @@ -432,6 +400,7 @@ "deprecated": "This version is no longer supported. Please see https://eslint.org/version-support for other options.", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "@eslint-community/eslint-utils": "^4.2.0", "@eslint-community/regexpp": "^4.6.1", @@ -488,6 +457,7 @@ "integrity": "sha512-NSWl5BFQWEPi1j4TjVNItzYV7dZXZ+wP6I6ZhrBGpChQhZRUaElihE9uRRkcbRnNb76UMKDF3r+WTmNcGPKsqw==", "dev": true, "license": "MIT", + "peer": true, "bin": { "eslint-config-prettier": "bin/cli.js" }, @@ -657,28 +627,6 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "apps/mass-payout/backend/node_modules/glob": { - "version": "7.2.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", - "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", - "deprecated": "Glob versions prior to v9 are no longer supported", - "license": "ISC", - "peer": true, - "dependencies": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.1.1", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - }, - "engines": { - "node": "*" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, "apps/mass-payout/backend/node_modules/globals": { "version": "15.6.0", "resolved": "https://registry.npmjs.org/globals/-/globals-15.6.0.tgz", @@ -692,19 +640,13 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "apps/mass-payout/backend/node_modules/memoize-one": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/memoize-one/-/memoize-one-5.2.1.tgz", - "integrity": "sha512-zYiwtZUcYyXKo/np96AGZAckk+FWWsUdJ3cHGGmld7+AhvcWmQyGCYUh1hc4Q/pkOhb65dQR/pqCyK0cOaHz4Q==", - "license": "MIT", - "peer": true - }, "apps/mass-payout/backend/node_modules/prettier": { "version": "3.2.5", "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.2.5.tgz", "integrity": "sha512-3/GWa9aOC0YeD7LUfvOG2NiDyhOWRvt1k+rcKhOuYnMY24iiCphgneUfJDyFXd6rZCAnuLBv6UeAULtrhT/F4A==", "dev": true, "license": "MIT", + "peer": true, "bin": { "prettier": "bin/prettier.cjs" }, @@ -715,116 +657,6 @@ "url": "https://github.com/prettier/prettier?sponsor=1" } }, - "apps/mass-payout/backend/node_modules/react": { - "version": "19.2.0", - "resolved": "https://registry.npmjs.org/react/-/react-19.2.0.tgz", - "integrity": "sha512-tmbWg6W31tQLeB5cdIBOicJDJRR2KzXsV7uSK9iNfLWQ5bIZfxuPEHp7M8wiHyHnn0DD1i7w3Zmin0FtkrwoCQ==", - "license": "MIT", - "peer": true, - "engines": { - "node": ">=0.10.0" - } - }, - "apps/mass-payout/backend/node_modules/react-native": { - "version": "0.81.4", - "resolved": "https://registry.npmjs.org/react-native/-/react-native-0.81.4.tgz", - "integrity": "sha512-bt5bz3A/+Cv46KcjV0VQa+fo7MKxs17RCcpzjftINlen4ZDUl0I6Ut+brQ2FToa5oD0IB0xvQHfmsg2EDqsZdQ==", - "license": "MIT", - "peer": true, - "dependencies": { - "@jest/create-cache-key-function": "^29.7.0", - "@react-native/assets-registry": "0.81.4", - "@react-native/codegen": "0.81.4", - "@react-native/community-cli-plugin": "0.81.4", - "@react-native/gradle-plugin": "0.81.4", - "@react-native/js-polyfills": "0.81.4", - "@react-native/normalize-colors": "0.81.4", - "@react-native/virtualized-lists": "0.81.4", - "abort-controller": "^3.0.0", - "anser": "^1.4.9", - "ansi-regex": "^5.0.0", - "babel-jest": "^29.7.0", - "babel-plugin-syntax-hermes-parser": "0.29.1", - "base64-js": "^1.5.1", - "commander": "^12.0.0", - "flow-enums-runtime": "^0.0.6", - "glob": "^7.1.1", - "invariant": "^2.2.4", - "jest-environment-node": "^29.7.0", - "memoize-one": "^5.0.0", - "metro-runtime": "^0.83.1", - "metro-source-map": "^0.83.1", - "nullthrows": "^1.1.1", - "pretty-format": "^29.7.0", - "promise": "^8.3.0", - "react-devtools-core": "^6.1.5", - "react-refresh": "^0.14.0", - "regenerator-runtime": "^0.13.2", - "scheduler": "0.26.0", - "semver": "^7.1.3", - "stacktrace-parser": "^0.1.10", - "whatwg-fetch": "^3.0.0", - "ws": "^6.2.3", - "yargs": "^17.6.2" - }, - "bin": { - "react-native": "cli.js" - }, - "engines": { - "node": ">= 20.19.4" - }, - "peerDependencies": { - "@types/react": "^19.1.0", - "react": "^19.1.0" - }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - } - } - }, - "apps/mass-payout/backend/node_modules/react-native-get-random-values": { - "version": "1.11.0", - "resolved": "https://registry.npmjs.org/react-native-get-random-values/-/react-native-get-random-values-1.11.0.tgz", - "integrity": "sha512-4BTbDbRmS7iPdhYLRcz3PGFIpFJBwNZg9g42iwa2P6FOv9vZj/xJc678RZXnLNZzd0qd7Q3CCF6Yd+CU2eoXKQ==", - "license": "MIT", - "dependencies": { - "fast-base64-decode": "^1.0.0" - }, - "peerDependencies": { - "react-native": ">=0.56" - } - }, - "apps/mass-payout/backend/node_modules/react-native/node_modules/semver": { - "version": "7.7.2", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.2.tgz", - "integrity": "sha512-RF0Fw+rO5AMf9MAyaRXI4AV0Ulj5lMHqVxxdSgiVbixSCXoEmmX/jk0CuJw4+3SqroYO9VoUh+HcuJivvtJemA==", - "license": "ISC", - "peer": true, - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, - "apps/mass-payout/backend/node_modules/react-refresh": { - "version": "0.14.2", - "resolved": "https://registry.npmjs.org/react-refresh/-/react-refresh-0.14.2.tgz", - "integrity": "sha512-jCvmsr+1IUSMUyzOkRcvnVbX3ZYC6g9TDrDbFuFmRDq7PD4yaGbLKNQL6k2jnArV8hjYxh7hVhAZB6s9HDGpZA==", - "license": "MIT", - "peer": true, - "engines": { - "node": ">=0.10.0" - } - }, - "apps/mass-payout/backend/node_modules/scheduler": { - "version": "0.26.0", - "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.26.0.tgz", - "integrity": "sha512-NlHwttCI/l5gCPR3D1nNXtWABUmBwvZpEQiD4IXSbIDq8BzLIK/7Ir5gTFSGZDUu37K5cMNp0hFtzO38sC7gWA==", - "license": "MIT", - "peer": true - }, "apps/mass-payout/backend/node_modules/strip-bom": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", @@ -898,6 +730,7 @@ "integrity": "sha512-pXWcraxM0uxAS+tN0AG/BF2TyqmHO014Z070UsJ+pFvYuRSq8KH8DmWpnbXe0pEPDHXZV3FcAbJkijJ5oNEnWw==", "dev": true, "license": "Apache-2.0", + "peer": true, "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" @@ -906,18 +739,8 @@ "node": ">=14.17" } }, - "apps/mass-payout/backend/node_modules/ws": { - "version": "6.2.3", - "resolved": "https://registry.npmjs.org/ws/-/ws-6.2.3.tgz", - "integrity": "sha512-jmTjYU0j60B+vHey6TfR3Z7RD61z/hmxBS3VMSGIrroOWXQEneK1zNuotOUrGyBHQj0yrpsLHPWtigEFd13ndA==", - "license": "MIT", - "peer": true, - "dependencies": { - "async-limiter": "~1.0.0" - } - }, "apps/mass-payout/frontend": { - "name": "@mass-payout/frontend", + "name": "@hashgraph/mass-payout-frontend", "version": "1.0.0", "dependencies": { "@chakra-ui/react": "2.6.1", @@ -1183,6 +1006,7 @@ "integrity": "sha512-tEuVcHrpaixS36w7hpsfLBLpjtMRJUE09/MHXn923LOVojDwyC14cWcfc0rDs0VEfUyYmt/+iX1kxxp+gZMcaQ==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "expect": "^29.0.0", "pretty-format": "^29.0.0" @@ -1226,6 +1050,7 @@ "integrity": "sha512-XcGdod0Jjv84HOC7N5ziY3x+qL0AfmubvKOZ9hJjJ2yd5EE+KYjWhdOjt387e9HPheHkdggF9atTifMRtyAaRA==", "devOptional": true, "license": "MIT", + "peer": true, "dependencies": { "@types/prop-types": "*", "csstype": "^3.0.2" @@ -1247,6 +1072,7 @@ "integrity": "sha512-yHMQ/oFaM7HZdVrVm/M2WHaNPgyuJH4WelkSVEWSSsir34kxW2kDJCxlXRhhGWEsMN0WAW/vLpKfKVcm8k+MPw==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "@eslint-community/regexpp": "^4.5.1", "@typescript-eslint/scope-manager": "7.4.0", @@ -1283,6 +1109,7 @@ "integrity": "sha512-ZvKHxHLusweEUVwrGRXXUVzFgnWhigo4JurEj0dGF1tbcGh6buL+ejDdjxOQxv6ytcY1uhun1p2sm8iWStlgLQ==", "dev": true, "license": "BSD-2-Clause", + "peer": true, "dependencies": { "@typescript-eslint/scope-manager": "7.4.0", "@typescript-eslint/types": "7.4.0", @@ -1598,6 +1425,7 @@ "deprecated": "This version is no longer supported. Please see https://eslint.org/version-support for other options.", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "@eslint-community/eslint-utils": "^4.2.0", "@eslint-community/regexpp": "^4.6.1", @@ -1654,6 +1482,7 @@ "integrity": "sha512-NSWl5BFQWEPi1j4TjVNItzYV7dZXZ+wP6I6ZhrBGpChQhZRUaElihE9uRRkcbRnNb76UMKDF3r+WTmNcGPKsqw==", "dev": true, "license": "MIT", + "peer": true, "bin": { "eslint-config-prettier": "bin/cli.js" }, @@ -1790,6 +1619,7 @@ "integrity": "sha512-juMg3he2uru1QoXX078zTa7pO85QyB9xajZc6bU+d9yEGwrKX6+vGmJQ3UdVZsvTEUARIdObzH68QItim6OSSQ==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "@jest/core": "^29.5.0", "@jest/types": "^29.5.0", @@ -1891,6 +1721,7 @@ "integrity": "sha512-3/GWa9aOC0YeD7LUfvOG2NiDyhOWRvt1k+rcKhOuYnMY24iiCphgneUfJDyFXd6rZCAnuLBv6UeAULtrhT/F4A==", "dev": true, "license": "MIT", + "peer": true, "bin": { "prettier": "bin/prettier.cjs" }, @@ -2003,6 +1834,7 @@ "integrity": "sha512-pXWcraxM0uxAS+tN0AG/BF2TyqmHO014Z070UsJ+pFvYuRSq8KH8DmWpnbXe0pEPDHXZV3FcAbJkijJ5oNEnWw==", "dev": true, "license": "Apache-2.0", + "peer": true, "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" @@ -2155,7 +1987,9 @@ } } }, - "apps/packages/mass-payout/sdk": {}, + "apps/packages/mass-payout/sdk": { + "extraneous": true + }, "node_modules/@adobe/css-tools": { "version": "4.4.4", "resolved": "https://registry.npmjs.org/@adobe/css-tools/-/css-tools-4.4.4.tgz", @@ -2169,6 +2003,309 @@ "integrity": "sha512-nhCBV3quEgesuf7c7KYfperqSS14T8bYuvJ8PcLJp6znkZpFc0AuW4qBtr8eKVyPPe/8RSr7sglCWPU5eaxwKQ==", "license": "MIT" }, + "node_modules/@ai-sdk/gateway": { + "version": "2.0.22", + "resolved": "https://registry.npmjs.org/@ai-sdk/gateway/-/gateway-2.0.22.tgz", + "integrity": "sha512-6fHjDfCbjfj4vyMExuLei7ir2///E5sNwNZaobdJsJIxJjDSsjzSLGO/aUI7p9eOnB8XctDrDSF5ilwDGpi6eg==", + "license": "Apache-2.0", + "dependencies": { + "@ai-sdk/provider": "2.0.0", + "@ai-sdk/provider-utils": "3.0.19", + "@vercel/oidc": "3.0.5" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "zod": "^3.25.76 || ^4.1.8" + } + }, + "node_modules/@ai-sdk/provider": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@ai-sdk/provider/-/provider-2.0.0.tgz", + "integrity": "sha512-6o7Y2SeO9vFKB8lArHXehNuusnpddKPk7xqL7T2/b+OvXMRIXUO1rR4wcv1hAFUAT9avGZshty3Wlua/XA7TvA==", + "license": "Apache-2.0", + "dependencies": { + "json-schema": "^0.4.0" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/@ai-sdk/provider-utils": { + "version": "3.0.19", + "resolved": "https://registry.npmjs.org/@ai-sdk/provider-utils/-/provider-utils-3.0.19.tgz", + "integrity": "sha512-W41Wc9/jbUVXVwCN/7bWa4IKe8MtxO3EyA0Hfhx6grnmiYlCvpI8neSYWFE0zScXJkgA/YK3BRybzgyiXuu6JA==", + "license": "Apache-2.0", + "dependencies": { + "@ai-sdk/provider": "2.0.0", + "@standard-schema/spec": "^1.0.0", + "eventsource-parser": "^3.0.6" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "zod": "^3.25.76 || ^4.1.8" + } + }, + "node_modules/@ai-sdk/react": { + "version": "2.0.117", + "resolved": "https://registry.npmjs.org/@ai-sdk/react/-/react-2.0.117.tgz", + "integrity": "sha512-qfwz4p1ev+i/M9rsOUEe53UgzxMUz7e4wrImWdkuFrpD78MBIj53eE/LtyCeAYSCFVSz3JfIDvtdk5MjTrNcbA==", + "license": "Apache-2.0", + "dependencies": { + "@ai-sdk/provider-utils": "3.0.19", + "ai": "5.0.115", + "swr": "^2.2.5", + "throttleit": "2.1.0" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "react": "^18 || ~19.0.1 || ~19.1.2 || ^19.2.1", + "zod": "^3.25.76 || ^4.1.8" + }, + "peerDependenciesMeta": { + "zod": { + "optional": true + } + } + }, + "node_modules/@algolia/abtesting": { + "version": "1.12.1", + "resolved": "https://registry.npmjs.org/@algolia/abtesting/-/abtesting-1.12.1.tgz", + "integrity": "sha512-Y+7e2uPe376OH5O73OB1+vR40ZhbV2kzGh/AR/dPCWguoBOp1IK0o+uZQLX+7i32RMMBEKl3pj6KVEav100Kvg==", + "license": "MIT", + "dependencies": { + "@algolia/client-common": "5.46.1", + "@algolia/requester-browser-xhr": "5.46.1", + "@algolia/requester-fetch": "5.46.1", + "@algolia/requester-node-http": "5.46.1" + }, + "engines": { + "node": ">= 14.0.0" + } + }, + "node_modules/@algolia/autocomplete-core": { + "version": "1.19.2", + "resolved": "https://registry.npmjs.org/@algolia/autocomplete-core/-/autocomplete-core-1.19.2.tgz", + "integrity": "sha512-mKv7RyuAzXvwmq+0XRK8HqZXt9iZ5Kkm2huLjgn5JoCPtDy+oh9yxUMfDDaVCw0oyzZ1isdJBc7l9nuCyyR7Nw==", + "license": "MIT", + "dependencies": { + "@algolia/autocomplete-plugin-algolia-insights": "1.19.2", + "@algolia/autocomplete-shared": "1.19.2" + } + }, + "node_modules/@algolia/autocomplete-plugin-algolia-insights": { + "version": "1.19.2", + "resolved": "https://registry.npmjs.org/@algolia/autocomplete-plugin-algolia-insights/-/autocomplete-plugin-algolia-insights-1.19.2.tgz", + "integrity": "sha512-TjxbcC/r4vwmnZaPwrHtkXNeqvlpdyR+oR9Wi2XyfORkiGkLTVhX2j+O9SaCCINbKoDfc+c2PB8NjfOnz7+oKg==", + "license": "MIT", + "dependencies": { + "@algolia/autocomplete-shared": "1.19.2" + }, + "peerDependencies": { + "search-insights": ">= 1 < 3" + } + }, + "node_modules/@algolia/autocomplete-shared": { + "version": "1.19.2", + "resolved": "https://registry.npmjs.org/@algolia/autocomplete-shared/-/autocomplete-shared-1.19.2.tgz", + "integrity": "sha512-jEazxZTVD2nLrC+wYlVHQgpBoBB5KPStrJxLzsIFl6Kqd1AlG9sIAGl39V5tECLpIQzB3Qa2T6ZPJ1ChkwMK/w==", + "license": "MIT", + "peerDependencies": { + "@algolia/client-search": ">= 4.9.1 < 6", + "algoliasearch": ">= 4.9.1 < 6" + } + }, + "node_modules/@algolia/client-abtesting": { + "version": "5.46.1", + "resolved": "https://registry.npmjs.org/@algolia/client-abtesting/-/client-abtesting-5.46.1.tgz", + "integrity": "sha512-5SWfl0UGuKxMBYlU2Y9BnlIKKEyhFU5jHE9F9jAd8nbhxZNLk0y7fXE+AZeFtyK1lkVw6O4B/e6c3XIVVCkmqw==", + "license": "MIT", + "dependencies": { + "@algolia/client-common": "5.46.1", + "@algolia/requester-browser-xhr": "5.46.1", + "@algolia/requester-fetch": "5.46.1", + "@algolia/requester-node-http": "5.46.1" + }, + "engines": { + "node": ">= 14.0.0" + } + }, + "node_modules/@algolia/client-analytics": { + "version": "5.46.1", + "resolved": "https://registry.npmjs.org/@algolia/client-analytics/-/client-analytics-5.46.1.tgz", + "integrity": "sha512-496K6B1l/0Jvyp3MbW/YIgmm1a6nkTrKXBM7DoEy9YAOJ8GywGpa2UYjNCW1UrOTt+em1ECzDjRx7PIzTR9YvA==", + "license": "MIT", + "dependencies": { + "@algolia/client-common": "5.46.1", + "@algolia/requester-browser-xhr": "5.46.1", + "@algolia/requester-fetch": "5.46.1", + "@algolia/requester-node-http": "5.46.1" + }, + "engines": { + "node": ">= 14.0.0" + } + }, + "node_modules/@algolia/client-common": { + "version": "5.46.1", + "resolved": "https://registry.npmjs.org/@algolia/client-common/-/client-common-5.46.1.tgz", + "integrity": "sha512-3u6AuZ1Kiss6V5JPuZfVIUYfPi8im06QBCgKqLg82GUBJ3SwhiTdSZFIEgz2mzFuitFdW1PQi3c/65zE/3FgIw==", + "license": "MIT", + "engines": { + "node": ">= 14.0.0" + } + }, + "node_modules/@algolia/client-insights": { + "version": "5.46.1", + "resolved": "https://registry.npmjs.org/@algolia/client-insights/-/client-insights-5.46.1.tgz", + "integrity": "sha512-LwuWjdO35HHl1rxtdn48t920Xl26Dl0SMxjxjFeAK/OwK/pIVfYjOZl/f3Pnm7Kixze+6HjpByVxEaqhTuAFaw==", + "license": "MIT", + "dependencies": { + "@algolia/client-common": "5.46.1", + "@algolia/requester-browser-xhr": "5.46.1", + "@algolia/requester-fetch": "5.46.1", + "@algolia/requester-node-http": "5.46.1" + }, + "engines": { + "node": ">= 14.0.0" + } + }, + "node_modules/@algolia/client-personalization": { + "version": "5.46.1", + "resolved": "https://registry.npmjs.org/@algolia/client-personalization/-/client-personalization-5.46.1.tgz", + "integrity": "sha512-6LvJAlfEsn9SVq63MYAFX2iUxztUK2Q7BVZtI1vN87lDiJ/tSVFKgKS/jBVO03A39ePxJQiFv6EKv7lmoGlWtQ==", + "license": "MIT", + "dependencies": { + "@algolia/client-common": "5.46.1", + "@algolia/requester-browser-xhr": "5.46.1", + "@algolia/requester-fetch": "5.46.1", + "@algolia/requester-node-http": "5.46.1" + }, + "engines": { + "node": ">= 14.0.0" + } + }, + "node_modules/@algolia/client-query-suggestions": { + "version": "5.46.1", + "resolved": "https://registry.npmjs.org/@algolia/client-query-suggestions/-/client-query-suggestions-5.46.1.tgz", + "integrity": "sha512-9GLUCyGGo7YOXHcNqbzca82XYHJTbuiI6iT0FTGc0BrnV2N4OcrznUuVKic/duiLSun5gcy/G2Bciw5Sav9f9w==", + "license": "MIT", + "dependencies": { + "@algolia/client-common": "5.46.1", + "@algolia/requester-browser-xhr": "5.46.1", + "@algolia/requester-fetch": "5.46.1", + "@algolia/requester-node-http": "5.46.1" + }, + "engines": { + "node": ">= 14.0.0" + } + }, + "node_modules/@algolia/client-search": { + "version": "5.46.1", + "resolved": "https://registry.npmjs.org/@algolia/client-search/-/client-search-5.46.1.tgz", + "integrity": "sha512-NL76o/BoEgU4ObY5oBEC3o6KSPpuXsnSta00tAxTm1iKUWOGR34DQEKhUt8xMHhMKleUNPM/rLPFiIVtfsGU8w==", + "license": "MIT", + "dependencies": { + "@algolia/client-common": "5.46.1", + "@algolia/requester-browser-xhr": "5.46.1", + "@algolia/requester-fetch": "5.46.1", + "@algolia/requester-node-http": "5.46.1" + }, + "engines": { + "node": ">= 14.0.0" + } + }, + "node_modules/@algolia/events": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/@algolia/events/-/events-4.0.1.tgz", + "integrity": "sha512-FQzvOCgoFXAbf5Y6mYozw2aj5KCJoA3m4heImceldzPSMbdyS4atVjJzXKMsfX3wnZTFYwkkt8/z8UesLHlSBQ==", + "license": "MIT" + }, + "node_modules/@algolia/ingestion": { + "version": "1.46.1", + "resolved": "https://registry.npmjs.org/@algolia/ingestion/-/ingestion-1.46.1.tgz", + "integrity": "sha512-52Nc8WKC1FFXsdlXlTMl1Re/pTAbd2DiJiNdYmgHiikZcfF96G+Opx4qKiLUG1q7zp9e+ahNwXF6ED0XChMywg==", + "license": "MIT", + "dependencies": { + "@algolia/client-common": "5.46.1", + "@algolia/requester-browser-xhr": "5.46.1", + "@algolia/requester-fetch": "5.46.1", + "@algolia/requester-node-http": "5.46.1" + }, + "engines": { + "node": ">= 14.0.0" + } + }, + "node_modules/@algolia/monitoring": { + "version": "1.46.1", + "resolved": "https://registry.npmjs.org/@algolia/monitoring/-/monitoring-1.46.1.tgz", + "integrity": "sha512-1x2/2Y/eqz6l3QcEZ8u/zMhSCpjlhePyizJd3sXrmg031HjayYT5+IxikjpqkdF7TU/deCTd/TFUcxLJ2ZHXiQ==", + "license": "MIT", + "dependencies": { + "@algolia/client-common": "5.46.1", + "@algolia/requester-browser-xhr": "5.46.1", + "@algolia/requester-fetch": "5.46.1", + "@algolia/requester-node-http": "5.46.1" + }, + "engines": { + "node": ">= 14.0.0" + } + }, + "node_modules/@algolia/recommend": { + "version": "5.46.1", + "resolved": "https://registry.npmjs.org/@algolia/recommend/-/recommend-5.46.1.tgz", + "integrity": "sha512-SSd3KlQuplxV3aRs5+Z09XilFesgpPjtCG7BGRxLTVje5hn9BLmhjO4W3gKw01INUt44Z1r0Fwx5uqnhAouunA==", + "license": "MIT", + "dependencies": { + "@algolia/client-common": "5.46.1", + "@algolia/requester-browser-xhr": "5.46.1", + "@algolia/requester-fetch": "5.46.1", + "@algolia/requester-node-http": "5.46.1" + }, + "engines": { + "node": ">= 14.0.0" + } + }, + "node_modules/@algolia/requester-browser-xhr": { + "version": "5.46.1", + "resolved": "https://registry.npmjs.org/@algolia/requester-browser-xhr/-/requester-browser-xhr-5.46.1.tgz", + "integrity": "sha512-3GfCwudeW6/3caKSdmOP6RXZEL4F3GiemCaXEStkTt2Re8f7NcGYAAZnGlHsCzvhlNEuDzPYdYxh4UweY8l/2w==", + "license": "MIT", + "dependencies": { + "@algolia/client-common": "5.46.1" + }, + "engines": { + "node": ">= 14.0.0" + } + }, + "node_modules/@algolia/requester-fetch": { + "version": "5.46.1", + "resolved": "https://registry.npmjs.org/@algolia/requester-fetch/-/requester-fetch-5.46.1.tgz", + "integrity": "sha512-JUAxYfmnLYTVtAOFxVvXJ4GDHIhMuaP7JGyZXa/nCk3P8RrN5FCNTdRyftSnxyzwSIAd8qH3CjdBS9WwxxqcHQ==", + "license": "MIT", + "dependencies": { + "@algolia/client-common": "5.46.1" + }, + "engines": { + "node": ">= 14.0.0" + } + }, + "node_modules/@algolia/requester-node-http": { + "version": "5.46.1", + "resolved": "https://registry.npmjs.org/@algolia/requester-node-http/-/requester-node-http-5.46.1.tgz", + "integrity": "sha512-VwbhV1xvTGiek3d2pOS6vNBC4dtbNadyRT+i1niZpGhOJWz1XnfhxNboVbXPGAyMJYz7kDrolbDvEzIDT93uUA==", + "license": "MIT", + "dependencies": { + "@algolia/client-common": "5.46.1" + }, + "engines": { + "node": ">= 14.0.0" + } + }, "node_modules/@ampproject/remapping": { "version": "2.3.0", "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.3.0.tgz", @@ -2629,6 +2766,25 @@ "tslib": "^2.1.0" } }, + "node_modules/@antfu/install-pkg": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@antfu/install-pkg/-/install-pkg-1.1.0.tgz", + "integrity": "sha512-MGQsmw10ZyI+EJo45CdSER4zEb+p31LpDAFp2Z3gkSd1yqVZGi0Ebx++YTEMonJy4oChEMLsxZ64j8FH6sSqtQ==", + "license": "MIT", + "dependencies": { + "package-manager-detector": "^1.3.0", + "tinyexec": "^1.0.1" + }, + "funding": { + "url": "https://github.com/sponsors/antfu" + } + }, + "node_modules/@antfu/install-pkg/node_modules/package-manager-detector": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/package-manager-detector/-/package-manager-detector-1.6.0.tgz", + "integrity": "sha512-61A5ThoTiDG/C8s8UMZwSorAGwMJ0ERVGj2OjoW5pAalsNOg15+iQiPzrLJ4jhZ1HJzmC2PIHT2oEiH3R5fzNA==", + "license": "MIT" + }, "node_modules/@asamuzakjp/css-color": { "version": "3.2.0", "resolved": "https://registry.npmjs.org/@asamuzakjp/css-color/-/css-color-3.2.0.tgz", @@ -3366,7 +3522,6 @@ "version": "7.27.3", "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.27.3.tgz", "integrity": "sha512-fXSwMQqitTGeHLBC08Eq5yXz2m37E4pJX1qAU1+2cNedz/ifv/bVXft90VeSav5nFO61EcNgwr0aJxbyPaWBPg==", - "dev": true, "license": "MIT", "dependencies": { "@babel/types": "^7.27.3" @@ -3395,7 +3550,6 @@ "version": "7.28.3", "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.28.3.tgz", "integrity": "sha512-V9f6ZFIYSLNEbuGA/92uOvYsGCJNsuA8ESZ4ldc09bWk/j8H8TKiPw8Mk1eG6olpnO0ALHJmYfZvF4MEE4gajg==", - "dev": true, "license": "MIT", "dependencies": { "@babel/helper-annotate-as-pure": "^7.27.3", @@ -3417,7 +3571,6 @@ "version": "7.27.1", "resolved": "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.27.1.tgz", "integrity": "sha512-uVDC72XVf8UbrH5qQTc18Agb8emwjTiZrQE11Nv3CuBEZmVvTwwE9CBUEvHku06gQCAyYf8Nv6ja1IN+6LMbxQ==", - "dev": true, "license": "MIT", "dependencies": { "@babel/helper-annotate-as-pure": "^7.27.1", @@ -3435,7 +3588,6 @@ "version": "0.6.5", "resolved": "https://registry.npmjs.org/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.6.5.tgz", "integrity": "sha512-uJnGFcPsWQK8fvjgGP5LZUZZsYGIoPeRjSF5PGwrelYgq7Q15/Ft9NGFp1zglwgIv//W0uG4BevRuSJRyylZPg==", - "dev": true, "license": "MIT", "dependencies": { "@babel/helper-compilation-targets": "^7.27.2", @@ -3461,7 +3613,6 @@ "version": "7.27.1", "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.27.1.tgz", "integrity": "sha512-E5chM8eWjTp/aNoVpcbfM7mLxu9XGLWYise2eBKGQomAk/Mb4XoxyqXTZbuTohbsl8EKqdlMhnDI2CCLfcs9wA==", - "dev": true, "license": "MIT", "dependencies": { "@babel/traverse": "^7.27.1", @@ -3505,7 +3656,6 @@ "version": "7.27.1", "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.27.1.tgz", "integrity": "sha512-URMGH08NzYFhubNSGJrpUEphGKQwMQYBySzat5cAByY1/YgIRkULnIy3tAMeszlL/so2HbeilYloUmSpd7GdVw==", - "dev": true, "license": "MIT", "dependencies": { "@babel/types": "^7.27.1" @@ -3527,7 +3677,6 @@ "version": "7.27.1", "resolved": "https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.27.1.tgz", "integrity": "sha512-7fiA521aVw8lSPeI4ZOD3vRFkoqkJcS+z4hFo82bFSH/2tNd6eJ5qCVMS5OzDmZh/kaHQeBaeyxK6wljcPtveA==", - "dev": true, "license": "MIT", "dependencies": { "@babel/helper-annotate-as-pure": "^7.27.1", @@ -3545,7 +3694,6 @@ "version": "7.27.1", "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.27.1.tgz", "integrity": "sha512-7EHz6qDZc8RYS5ElPoShMheWvEgERonFCs7IAonWLLUTXW59DP14bCZt89/GKyreYn8g3S83m21FelHKbeDCKA==", - "dev": true, "license": "MIT", "dependencies": { "@babel/helper-member-expression-to-functions": "^7.27.1", @@ -3563,7 +3711,6 @@ "version": "7.27.1", "resolved": "https://registry.npmjs.org/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.27.1.tgz", "integrity": "sha512-Tub4ZKEXqbPjXgWLl2+3JpQAYBJ8+ikpQ2Ocj/q/r0LwE3UhENh7EUabyHjz2kCEsrRY83ew2DQdHluuiDQFzg==", - "dev": true, "license": "MIT", "dependencies": { "@babel/traverse": "^7.27.1", @@ -3604,7 +3751,6 @@ "version": "7.28.3", "resolved": "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.28.3.tgz", "integrity": "sha512-zdf983tNfLZFletc0RRXYrHrucBEg95NIFMkn6K9dbeMYnsgHaSBGcQqdsCSStG2PYwRre0Qc2NNSCXbG+xc6g==", - "dev": true, "license": "MIT", "dependencies": { "@babel/template": "^7.27.2", @@ -3647,7 +3793,6 @@ "version": "7.27.1", "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-firefox-class-in-computed-class-key/-/plugin-bugfix-firefox-class-in-computed-class-key-7.27.1.tgz", "integrity": "sha512-QPG3C9cCVRQLxAVwmefEmwdTanECuUBMQZ/ym5kiw3XKCGA7qkuQLcjWWHcrD/GKbn/WmJwaezfuuAOcyKlRPA==", - "dev": true, "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.27.1", @@ -3664,7 +3809,6 @@ "version": "7.27.1", "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-safari-class-field-initializer-scope/-/plugin-bugfix-safari-class-field-initializer-scope-7.27.1.tgz", "integrity": "sha512-qNeq3bCKnGgLkEXUuFry6dPlGfCdQNZbn7yUAPCInwAJHMU7THJfrBSozkcWq5sNM6RcF3S8XyQL2A52KNR9IA==", - "dev": true, "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.27.1" @@ -3680,7 +3824,6 @@ "version": "7.27.1", "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/-/plugin-bugfix-safari-id-destructuring-collision-in-function-expression-7.27.1.tgz", "integrity": "sha512-g4L7OYun04N1WyqMNjldFwlfPCLVkgB54A/YCXICZYBsvJJE3kByKv9c9+R/nAfmIfjl2rKYLNyMHboYbZaWaA==", - "dev": true, "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.27.1" @@ -3696,7 +3839,6 @@ "version": "7.27.1", "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.27.1.tgz", "integrity": "sha512-oO02gcONcD5O1iTLi/6frMJBIwWEHceWGSGqrpCmEL8nogiS6J9PBlE48CaK20/Jx1LuRml9aDftLgdjXT8+Cw==", - "dev": true, "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.27.1", @@ -3714,7 +3856,6 @@ "version": "7.28.3", "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly/-/plugin-bugfix-v8-static-class-fields-redefine-readonly-7.28.3.tgz", "integrity": "sha512-b6YTX108evsvE4YgWyQ921ZAFFQm3Bn+CA3+ZXlNVnPhx+UfsVURoPjfGAPCjBgrqo30yX/C2nZGX96DxvR9Iw==", - "dev": true, "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.27.1", @@ -3731,7 +3872,6 @@ "version": "7.21.0-placeholder-for-preset-env.2", "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-property-in-object/-/plugin-proposal-private-property-in-object-7.21.0-placeholder-for-preset-env.2.tgz", "integrity": "sha512-SOSkfJDddaM7mak6cPEpswyTRnuRltl429hMraQEglW+OkovnCzsiszTmsrlY//qLFjCpQDFRvjdm2wA5pPm9w==", - "dev": true, "license": "MIT", "engines": { "node": ">=6.9.0" @@ -3791,11 +3931,22 @@ "@babel/core": "^7.0.0-0" } }, + "node_modules/@babel/plugin-syntax-dynamic-import": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-dynamic-import/-/plugin-syntax-dynamic-import-7.8.3.tgz", + "integrity": "sha512-5gdGbFon+PszYzqs83S3E5mpi7/y/8M9eC90MRTZfduQOYW76ig6SOSPNe41IG5LoP3FGBn2N0RjVDSQiS94kQ==", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, "node_modules/@babel/plugin-syntax-import-assertions": { "version": "7.27.1", "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-assertions/-/plugin-syntax-import-assertions-7.27.1.tgz", "integrity": "sha512-UT/Jrhw57xg4ILHLFnzFpPDlMbcdEicaAtjPQpbj9wa8T4r5KVWCimHcL/460g8Ht0DMxDyjsLgiWSkVjnwPFg==", - "dev": true, "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.27.1" @@ -3850,7 +4001,6 @@ "version": "7.27.1", "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.27.1.tgz", "integrity": "sha512-y8YTNIeKoyhGd9O0Jiyzyyqk8gdjnumGTQPsz0xOZOQ2RmkVJeZ1vmmfIvFEKqucBG6axJGBZDE/7iI5suUI/w==", - "dev": true, "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.27.1" @@ -3968,7 +4118,6 @@ "version": "7.27.1", "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.27.1.tgz", "integrity": "sha512-xfYCBMxveHrRMnAWl1ZlPXOZjzkN82THFvLhQhFXFt81Z5HnN+EtUkZhv/zcKpmT3fzmWZB0ywiBrbC3vogbwQ==", - "dev": true, "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.27.1" @@ -3984,7 +4133,6 @@ "version": "7.18.6", "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-unicode-sets-regex/-/plugin-syntax-unicode-sets-regex-7.18.6.tgz", "integrity": "sha512-727YkEAPwSIQTv5im8QHz3upqp92JTWhidIC81Tdx4VJYIte/VndKf1qKrfnnhPLiPghStWfvC/iFaMCQu7Nqg==", - "dev": true, "license": "MIT", "dependencies": { "@babel/helper-create-regexp-features-plugin": "^7.18.6", @@ -4001,7 +4149,6 @@ "version": "7.27.1", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.27.1.tgz", "integrity": "sha512-8Z4TGic6xW70FKThA5HYEKKyBpOOsucTOD1DjU3fZxDg+K3zBJcXMFnt/4yQiZnf5+MiOMSXQ9PaEK/Ilh1DeA==", - "dev": true, "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.27.1" @@ -4017,7 +4164,6 @@ "version": "7.28.0", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-generator-functions/-/plugin-transform-async-generator-functions-7.28.0.tgz", "integrity": "sha512-BEOdvX4+M765icNPZeidyADIvQ1m1gmunXufXxvRESy/jNNyfovIqUyE7MVgGBjWktCoJlzvFA1To2O4ymIO3Q==", - "dev": true, "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.27.1", @@ -4035,7 +4181,6 @@ "version": "7.27.1", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.27.1.tgz", "integrity": "sha512-NREkZsZVJS4xmTr8qzE5y8AfIPqsdQfRuUiLRTEzb7Qii8iFWCyDKaUV2c0rCuh4ljDZ98ALHP/PetiBV2nddA==", - "dev": true, "license": "MIT", "dependencies": { "@babel/helper-module-imports": "^7.27.1", @@ -4053,7 +4198,6 @@ "version": "7.27.1", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.27.1.tgz", "integrity": "sha512-cnqkuOtZLapWYZUYM5rVIdv1nXYuFVIltZ6ZJ7nIj585QsjKM5dhL2Fu/lICXZ1OyIAFc7Qy+bvDAtTXqGrlhg==", - "dev": true, "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.27.1" @@ -4069,7 +4213,6 @@ "version": "7.28.4", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.28.4.tgz", "integrity": "sha512-1yxmvN0MJHOhPVmAsmoW5liWwoILobu/d/ShymZmj867bAdxGbehIrew1DuLpw2Ukv+qDSSPQdYW1dLNE7t11A==", - "dev": true, "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.27.1" @@ -4085,7 +4228,6 @@ "version": "7.27.1", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-class-properties/-/plugin-transform-class-properties-7.27.1.tgz", "integrity": "sha512-D0VcalChDMtuRvJIu3U/fwWjf8ZMykz5iZsg77Nuj821vCKI3zCyRLwRdWbsuJ/uRwZhZ002QtCqIkwC/ZkvbA==", - "dev": true, "license": "MIT", "dependencies": { "@babel/helper-create-class-features-plugin": "^7.27.1", @@ -4102,7 +4244,6 @@ "version": "7.28.3", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-class-static-block/-/plugin-transform-class-static-block-7.28.3.tgz", "integrity": "sha512-LtPXlBbRoc4Njl/oh1CeD/3jC+atytbnf/UqLoqTDcEYGUPj022+rvfkbDYieUrSj3CaV4yHDByPE+T2HwfsJg==", - "dev": true, "license": "MIT", "dependencies": { "@babel/helper-create-class-features-plugin": "^7.28.3", @@ -4119,7 +4260,6 @@ "version": "7.28.4", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.28.4.tgz", "integrity": "sha512-cFOlhIYPBv/iBoc+KS3M6et2XPtbT2HiCRfBXWtfpc9OAyostldxIf9YAYB6ypURBBbx+Qv6nyrLzASfJe+hBA==", - "dev": true, "license": "MIT", "dependencies": { "@babel/helper-annotate-as-pure": "^7.27.3", @@ -4140,7 +4280,6 @@ "version": "7.27.1", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.27.1.tgz", "integrity": "sha512-lj9PGWvMTVksbWiDT2tW68zGS/cyo4AkZ/QTp0sQT0mjPopCmrSkzxeXkznjqBxzDI6TclZhOJbBmbBLjuOZUw==", - "dev": true, "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.27.1", @@ -4157,7 +4296,6 @@ "version": "7.28.0", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.28.0.tgz", "integrity": "sha512-v1nrSMBiKcodhsyJ4Gf+Z0U/yawmJDBOTpEB3mcQY52r9RIyPneGyAS/yM6seP/8I+mWI3elOMtT5dB8GJVs+A==", - "dev": true, "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.27.1", @@ -4174,7 +4312,6 @@ "version": "7.27.1", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.27.1.tgz", "integrity": "sha512-gEbkDVGRvjj7+T1ivxrfgygpT7GUd4vmODtYpbs0gZATdkX8/iSnOtZSxiZnsgm1YjTgjI6VKBGSJJevkrclzw==", - "dev": true, "license": "MIT", "dependencies": { "@babel/helper-create-regexp-features-plugin": "^7.27.1", @@ -4191,7 +4328,6 @@ "version": "7.27.1", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.27.1.tgz", "integrity": "sha512-MTyJk98sHvSs+cvZ4nOauwTTG1JeonDjSGvGGUNHreGQns+Mpt6WX/dVzWBHgg+dYZhkC4X+zTDfkTU+Vy9y7Q==", - "dev": true, "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.27.1" @@ -4207,7 +4343,6 @@ "version": "7.27.1", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-named-capturing-groups-regex/-/plugin-transform-duplicate-named-capturing-groups-regex-7.27.1.tgz", "integrity": "sha512-hkGcueTEzuhB30B3eJCbCYeCaaEQOmQR0AdvzpD4LoN0GXMWzzGSuRrxR2xTnCrvNbVwK9N6/jQ92GSLfiZWoQ==", - "dev": true, "license": "MIT", "dependencies": { "@babel/helper-create-regexp-features-plugin": "^7.27.1", @@ -4224,7 +4359,6 @@ "version": "7.27.1", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dynamic-import/-/plugin-transform-dynamic-import-7.27.1.tgz", "integrity": "sha512-MHzkWQcEmjzzVW9j2q8LGjwGWpG2mjwaaB0BNQwst3FIjqsg8Ct/mIZlvSPJvfi9y2AC8mi/ktxbFVL9pZ1I4A==", - "dev": true, "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.27.1" @@ -4240,7 +4374,6 @@ "version": "7.28.0", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-explicit-resource-management/-/plugin-transform-explicit-resource-management-7.28.0.tgz", "integrity": "sha512-K8nhUcn3f6iB+P3gwCv/no7OdzOZQcKchW6N389V6PD8NUWKZHzndOd9sPDVbMoBsbmjMqlB4L9fm+fEFNVlwQ==", - "dev": true, "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.27.1", @@ -4257,7 +4390,6 @@ "version": "7.27.1", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.27.1.tgz", "integrity": "sha512-uspvXnhHvGKf2r4VVtBpeFnuDWsJLQ6MF6lGJLC89jBR1uoVeqM416AZtTuhTezOfgHicpJQmoD5YUakO/YmXQ==", - "dev": true, "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.27.1" @@ -4273,7 +4405,6 @@ "version": "7.27.1", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-export-namespace-from/-/plugin-transform-export-namespace-from-7.27.1.tgz", "integrity": "sha512-tQvHWSZ3/jH2xuq/vZDy0jNn+ZdXJeM8gHvX4lnJmsc3+50yPlWdZXIc5ay+umX+2/tJIqHqiEqcJvxlmIvRvQ==", - "dev": true, "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.27.1" @@ -4289,7 +4420,6 @@ "version": "7.27.1", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.27.1.tgz", "integrity": "sha512-BfbWFFEJFQzLCQ5N8VocnCtA8J1CLkNTe2Ms2wocj75dd6VpiqS5Z5quTYcUoo4Yq+DN0rtikODccuv7RU81sw==", - "dev": true, "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.27.1", @@ -4306,7 +4436,6 @@ "version": "7.27.1", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.27.1.tgz", "integrity": "sha512-1bQeydJF9Nr1eBCMMbC+hdwmRlsv5XYOMu03YSWFwNs0HsAmtSxxF1fyuYPqemVldVyFmlCU7w8UE14LupUSZQ==", - "dev": true, "license": "MIT", "dependencies": { "@babel/helper-compilation-targets": "^7.27.1", @@ -4324,7 +4453,6 @@ "version": "7.27.1", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-json-strings/-/plugin-transform-json-strings-7.27.1.tgz", "integrity": "sha512-6WVLVJiTjqcQauBhn1LkICsR2H+zm62I3h9faTDKt1qP4jn2o72tSvqMwtGFKGTpojce0gJs+76eZ2uCHRZh0Q==", - "dev": true, "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.27.1" @@ -4340,7 +4468,6 @@ "version": "7.27.1", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-literals/-/plugin-transform-literals-7.27.1.tgz", "integrity": "sha512-0HCFSepIpLTkLcsi86GG3mTUzxV5jpmbv97hTETW3yzrAij8aqlD36toB1D0daVFJM8NK6GvKO0gslVQmm+zZA==", - "dev": true, "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.27.1" @@ -4356,7 +4483,6 @@ "version": "7.27.1", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-logical-assignment-operators/-/plugin-transform-logical-assignment-operators-7.27.1.tgz", "integrity": "sha512-SJvDs5dXxiae4FbSL1aBJlG4wvl594N6YEVVn9e3JGulwioy6z3oPjx/sQBO3Y4NwUu5HNix6KJ3wBZoewcdbw==", - "dev": true, "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.27.1" @@ -4372,7 +4498,6 @@ "version": "7.27.1", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.27.1.tgz", "integrity": "sha512-hqoBX4dcZ1I33jCSWcXrP+1Ku7kdqXf1oeah7ooKOIiAdKQ+uqftgCFNOSzA5AMS2XIHEYeGFg4cKRCdpxzVOQ==", - "dev": true, "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.27.1" @@ -4388,7 +4513,6 @@ "version": "7.27.1", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.27.1.tgz", "integrity": "sha512-iCsytMg/N9/oFq6n+gFTvUYDZQOMK5kEdeYxmxt91fcJGycfxVP9CnrxoliM0oumFERba2i8ZtwRUCMhvP1LnA==", - "dev": true, "license": "MIT", "dependencies": { "@babel/helper-module-transforms": "^7.27.1", @@ -4405,7 +4529,6 @@ "version": "7.27.1", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.27.1.tgz", "integrity": "sha512-OJguuwlTYlN0gBZFRPqwOGNWssZjfIUdS7HMYtN8c1KmwpwHFBwTeFZrg9XZa+DFTitWOW5iTAG7tyCUPsCCyw==", - "dev": true, "license": "MIT", "dependencies": { "@babel/helper-module-transforms": "^7.27.1", @@ -4422,7 +4545,6 @@ "version": "7.27.1", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.27.1.tgz", "integrity": "sha512-w5N1XzsRbc0PQStASMksmUeqECuzKuTJer7kFagK8AXgpCMkeDMO5S+aaFb7A51ZYDF7XI34qsTX+fkHiIm5yA==", - "dev": true, "license": "MIT", "dependencies": { "@babel/helper-module-transforms": "^7.27.1", @@ -4441,7 +4563,6 @@ "version": "7.27.1", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.27.1.tgz", "integrity": "sha512-iQBE/xC5BV1OxJbp6WG7jq9IWiD+xxlZhLrdwpPkTX3ydmXdvoCpyfJN7acaIBZaOqTfr76pgzqBJflNbeRK+w==", - "dev": true, "license": "MIT", "dependencies": { "@babel/helper-module-transforms": "^7.27.1", @@ -4458,7 +4579,6 @@ "version": "7.27.1", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.27.1.tgz", "integrity": "sha512-SstR5JYy8ddZvD6MhV0tM/j16Qds4mIpJTOd1Yu9J9pJjH93bxHECF7pgtc28XvkzTD6Pxcm/0Z73Hvk7kb3Ng==", - "dev": true, "license": "MIT", "dependencies": { "@babel/helper-create-regexp-features-plugin": "^7.27.1", @@ -4475,7 +4595,6 @@ "version": "7.27.1", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.27.1.tgz", "integrity": "sha512-f6PiYeqXQ05lYq3TIfIDu/MtliKUbNwkGApPUvyo6+tc7uaR4cPjPe7DFPr15Uyycg2lZU6btZ575CuQoYh7MQ==", - "dev": true, "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.27.1" @@ -4491,7 +4610,6 @@ "version": "7.27.1", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-nullish-coalescing-operator/-/plugin-transform-nullish-coalescing-operator-7.27.1.tgz", "integrity": "sha512-aGZh6xMo6q9vq1JGcw58lZ1Z0+i0xB2x0XaauNIUXd6O1xXc3RwoWEBlsTQrY4KQ9Jf0s5rgD6SiNkaUdJegTA==", - "dev": true, "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.27.1" @@ -4507,7 +4625,6 @@ "version": "7.27.1", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-numeric-separator/-/plugin-transform-numeric-separator-7.27.1.tgz", "integrity": "sha512-fdPKAcujuvEChxDBJ5c+0BTaS6revLV7CJL08e4m3de8qJfNIuCc2nc7XJYOjBoTMJeqSmwXJ0ypE14RCjLwaw==", - "dev": true, "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.27.1" @@ -4523,7 +4640,6 @@ "version": "7.28.4", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-rest-spread/-/plugin-transform-object-rest-spread-7.28.4.tgz", "integrity": "sha512-373KA2HQzKhQCYiRVIRr+3MjpCObqzDlyrM6u4I201wL8Mp2wHf7uB8GhDwis03k2ti8Zr65Zyyqs1xOxUF/Ew==", - "dev": true, "license": "MIT", "dependencies": { "@babel/helper-compilation-targets": "^7.27.2", @@ -4543,7 +4659,6 @@ "version": "7.27.1", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.27.1.tgz", "integrity": "sha512-SFy8S9plRPbIcxlJ8A6mT/CxFdJx/c04JEctz4jf8YZaVS2px34j7NXRrlGlHkN/M2gnpL37ZpGRGVFLd3l8Ng==", - "dev": true, "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.27.1", @@ -4560,7 +4675,6 @@ "version": "7.27.1", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-optional-catch-binding/-/plugin-transform-optional-catch-binding-7.27.1.tgz", "integrity": "sha512-txEAEKzYrHEX4xSZN4kJ+OfKXFVSWKB2ZxM9dpcE3wT7smwkNmXo5ORRlVzMVdJbD+Q8ILTgSD7959uj+3Dm3Q==", - "dev": true, "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.27.1" @@ -4576,7 +4690,6 @@ "version": "7.27.1", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-optional-chaining/-/plugin-transform-optional-chaining-7.27.1.tgz", "integrity": "sha512-BQmKPPIuc8EkZgNKsv0X4bPmOoayeu4F1YCwx2/CfmDSXDbp7GnzlUH+/ul5VGfRg1AoFPsrIThlEBj2xb4CAg==", - "dev": true, "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.27.1", @@ -4593,7 +4706,6 @@ "version": "7.27.7", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.27.7.tgz", "integrity": "sha512-qBkYTYCb76RRxUM6CcZA5KRu8K4SM8ajzVeUgVdMVO9NN9uI/GaVmBg/WKJJGnNokV9SY8FxNOVWGXzqzUidBg==", - "dev": true, "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.27.1" @@ -4609,7 +4721,6 @@ "version": "7.27.1", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-private-methods/-/plugin-transform-private-methods-7.27.1.tgz", "integrity": "sha512-10FVt+X55AjRAYI9BrdISN9/AQWHqldOeZDUoLyif1Kn05a56xVBXb8ZouL8pZ9jem8QpXaOt8TS7RHUIS+GPA==", - "dev": true, "license": "MIT", "dependencies": { "@babel/helper-create-class-features-plugin": "^7.27.1", @@ -4626,7 +4737,6 @@ "version": "7.27.1", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-private-property-in-object/-/plugin-transform-private-property-in-object-7.27.1.tgz", "integrity": "sha512-5J+IhqTi1XPa0DXF83jYOaARrX+41gOewWbkPyjMNRDqgOCqdffGh8L3f/Ek5utaEBZExjSAzcyjmV9SSAWObQ==", - "dev": true, "license": "MIT", "dependencies": { "@babel/helper-annotate-as-pure": "^7.27.1", @@ -4644,7 +4754,21 @@ "version": "7.27.1", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.27.1.tgz", "integrity": "sha512-oThy3BCuCha8kDZ8ZkgOg2exvPYUlprMukKQXI1r1pJ47NCvxfkEy8vK+r/hT9nF0Aa4H1WUPZZjHTFtAhGfmQ==", - "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-react-constant-elements": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-constant-elements/-/plugin-transform-react-constant-elements-7.27.1.tgz", + "integrity": "sha512-edoidOjl/ZxvYo4lSBOQGDSyToYVkTAwyVoa2tkuYTSmjrB1+uAedoL5iROVLXkxH+vRgA7uP4tMg2pUJpZ3Ug==", "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.27.1" @@ -4660,7 +4784,6 @@ "version": "7.28.0", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-display-name/-/plugin-transform-react-display-name-7.28.0.tgz", "integrity": "sha512-D6Eujc2zMxKjfa4Zxl4GHMsmhKKZ9VpcqIchJLvwTxad9zWIYulwYItBovpDOoNLISpcZSXoDJ5gaGbQUDqViA==", - "dev": true, "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.27.1" @@ -4676,7 +4799,6 @@ "version": "7.27.1", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.27.1.tgz", "integrity": "sha512-2KH4LWGSrJIkVf5tSiBFYuXDAoWRq2MMwgivCf+93dd0GQi8RXLjKA/0EvRnVV5G0hrHczsquXuD01L8s6dmBw==", - "dev": true, "license": "MIT", "dependencies": { "@babel/helper-annotate-as-pure": "^7.27.1", @@ -4696,7 +4818,6 @@ "version": "7.27.1", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-development/-/plugin-transform-react-jsx-development-7.27.1.tgz", "integrity": "sha512-ykDdF5yI4f1WrAolLqeF3hmYU12j9ntLQl/AOG1HAS21jxyg1Q0/J/tpREuYLfatGdGmXp/3yS0ZA76kOlVq9Q==", - "dev": true, "license": "MIT", "dependencies": { "@babel/plugin-transform-react-jsx": "^7.27.1" @@ -4744,7 +4865,6 @@ "version": "7.27.1", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-pure-annotations/-/plugin-transform-react-pure-annotations-7.27.1.tgz", "integrity": "sha512-JfuinvDOsD9FVMTHpzA/pBLisxpv1aSf+OIV8lgH3MuWrks19R27e6a6DipIg4aX1Zm9Wpb04p8wljfKrVSnPA==", - "dev": true, "license": "MIT", "dependencies": { "@babel/helper-annotate-as-pure": "^7.27.1", @@ -4761,7 +4881,6 @@ "version": "7.28.4", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.28.4.tgz", "integrity": "sha512-+ZEdQlBoRg9m2NnzvEeLgtvBMO4tkFBw5SQIUgLICgTrumLoU7lr+Oghi6km2PFj+dbUt2u1oby2w3BDO9YQnA==", - "dev": true, "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.27.1" @@ -4777,7 +4896,6 @@ "version": "7.27.1", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regexp-modifiers/-/plugin-transform-regexp-modifiers-7.27.1.tgz", "integrity": "sha512-TtEciroaiODtXvLZv4rmfMhkCv8jx3wgKpL68PuiPh2M4fvz5jhsA7697N1gMvkvr/JTF13DrFYyEbY9U7cVPA==", - "dev": true, "license": "MIT", "dependencies": { "@babel/helper-create-regexp-features-plugin": "^7.27.1", @@ -4794,7 +4912,6 @@ "version": "7.27.1", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.27.1.tgz", "integrity": "sha512-V2ABPHIJX4kC7HegLkYoDpfg9PVmuWy/i6vUM5eGK22bx4YVFD3M5F0QQnWQoDs6AGsUWTVOopBiMFQgHaSkVw==", - "dev": true, "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.27.1" @@ -4806,11 +4923,30 @@ "@babel/core": "^7.0.0-0" } }, + "node_modules/@babel/plugin-transform-runtime": { + "version": "7.28.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.28.5.tgz", + "integrity": "sha512-20NUVgOrinudkIBzQ2bNxP08YpKprUkRTiRSd2/Z5GOdPImJGkoN4Z7IQe1T5AdyKI1i5L6RBmluqdSzvaq9/w==", + "license": "MIT", + "dependencies": { + "@babel/helper-module-imports": "^7.27.1", + "@babel/helper-plugin-utils": "^7.27.1", + "babel-plugin-polyfill-corejs2": "^0.4.14", + "babel-plugin-polyfill-corejs3": "^0.13.0", + "babel-plugin-polyfill-regenerator": "^0.6.5", + "semver": "^6.3.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, "node_modules/@babel/plugin-transform-shorthand-properties": { "version": "7.27.1", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.27.1.tgz", "integrity": "sha512-N/wH1vcn4oYawbJ13Y/FxcQrWk63jhfNa7jef0ih7PHSIHX2LB7GWE1rkPrOnka9kwMxb6hMl19p7lidA+EHmQ==", - "dev": true, "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.27.1" @@ -4826,7 +4962,6 @@ "version": "7.27.1", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.27.1.tgz", "integrity": "sha512-kpb3HUqaILBJcRFVhFUs6Trdd4mkrzcGXss+6/mxUd273PfbWqSDHRzMT2234gIg2QYfAjvXLSquP1xECSg09Q==", - "dev": true, "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.27.1", @@ -4843,7 +4978,6 @@ "version": "7.27.1", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.27.1.tgz", "integrity": "sha512-lhInBO5bi/Kowe2/aLdBAawijx+q1pQzicSgnkB6dUPc1+RC8QmJHKf2OjvU+NZWitguJHEaEmbV6VWEouT58g==", - "dev": true, "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.27.1" @@ -4859,7 +4993,6 @@ "version": "7.27.1", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.27.1.tgz", "integrity": "sha512-fBJKiV7F2DxZUkg5EtHKXQdbsbURW3DZKQUWphDum0uRP6eHGGa/He9mc0mypL680pb+e/lDIthRohlv8NCHkg==", - "dev": true, "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.27.1" @@ -4875,7 +5008,6 @@ "version": "7.27.1", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.27.1.tgz", "integrity": "sha512-RiSILC+nRJM7FY5srIyc4/fGIwUhyDuuBSdWn4y6yT6gm652DpCHZjIipgn6B7MQ1ITOUnAKWixEUjQRIBIcLw==", - "dev": true, "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.27.1" @@ -4891,7 +5023,6 @@ "version": "7.28.0", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.28.0.tgz", "integrity": "sha512-4AEiDEBPIZvLQaWlc9liCavE0xRM0dNca41WtBeM3jgFptfUOSG9z0uteLhq6+3rq+WB6jIvUwKDTpXEHPJ2Vg==", - "dev": true, "license": "MIT", "dependencies": { "@babel/helper-annotate-as-pure": "^7.27.3", @@ -4911,7 +5042,6 @@ "version": "7.27.1", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.27.1.tgz", "integrity": "sha512-Ysg4v6AmF26k9vpfFuTZg8HRfVWzsh1kVfowA23y9j/Gu6dOuahdUVhkLqpObp3JIv27MLSii6noRnuKN8H0Mg==", - "dev": true, "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.27.1" @@ -4927,7 +5057,6 @@ "version": "7.27.1", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-property-regex/-/plugin-transform-unicode-property-regex-7.27.1.tgz", "integrity": "sha512-uW20S39PnaTImxp39O5qFlHLS9LJEmANjMG7SxIhap8rCHqu0Ik+tLEPX5DKmHn6CsWQ7j3lix2tFOa5YtL12Q==", - "dev": true, "license": "MIT", "dependencies": { "@babel/helper-create-regexp-features-plugin": "^7.27.1", @@ -4944,7 +5073,6 @@ "version": "7.27.1", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.27.1.tgz", "integrity": "sha512-xvINq24TRojDuyt6JGtHmkVkrfVV3FPT16uytxImLeBZqW3/H52yN+kM1MGuyPkIQxrzKwPHs5U/MP3qKyzkGw==", - "dev": true, "license": "MIT", "dependencies": { "@babel/helper-create-regexp-features-plugin": "^7.27.1", @@ -4961,7 +5089,6 @@ "version": "7.27.1", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-sets-regex/-/plugin-transform-unicode-sets-regex-7.27.1.tgz", "integrity": "sha512-EtkOujbc4cgvb0mlpQefi4NTPBzhSIevblFevACNLUspmrALgmEBdL/XfnyyITfd8fKBZrZys92zOWcik7j9Tw==", - "dev": true, "license": "MIT", "dependencies": { "@babel/helper-create-regexp-features-plugin": "^7.27.1", @@ -4978,7 +5105,6 @@ "version": "7.28.3", "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.28.3.tgz", "integrity": "sha512-ROiDcM+GbYVPYBOeCR6uBXKkQpBExLl8k9HO1ygXEyds39j+vCCsjmj7S8GOniZQlEs81QlkdJZe76IpLSiqpg==", - "dev": true, "license": "MIT", "dependencies": { "@babel/compat-data": "^7.28.0", @@ -5063,7 +5189,6 @@ "version": "0.1.6-no-external-plugins", "resolved": "https://registry.npmjs.org/@babel/preset-modules/-/preset-modules-0.1.6-no-external-plugins.tgz", "integrity": "sha512-HrcgcIESLm9aIR842yhJ5RWan/gebQUJ6E/E5+rf0y9o6oj7w0Br+sWuL6kEQ/o/AdfvR1Je9jG18/gnpwjEyA==", - "dev": true, "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.0.0", @@ -5078,7 +5203,6 @@ "version": "7.27.1", "resolved": "https://registry.npmjs.org/@babel/preset-react/-/preset-react-7.27.1.tgz", "integrity": "sha512-oJHWh2gLhU9dW9HHr42q0cI0/iHHXTLGe39qvpAZZzagHy0MzYLCnCVV0symeRvzmjHyVU7mw2K06E6u/JwbhA==", - "dev": true, "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.27.1", @@ -5099,7 +5223,6 @@ "version": "7.27.1", "resolved": "https://registry.npmjs.org/@babel/preset-typescript/-/preset-typescript-7.27.1.tgz", "integrity": "sha512-l7WfQfX0WK4M0v2RudjuQK4u99BS6yLHYEmdtVPP7lKV013zr9DygFuWNlnbvQ9LR+LS0Egz/XAvGx5U9MX0fQ==", - "dev": true, "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.27.1", @@ -5124,6 +5247,18 @@ "node": ">=6.9.0" } }, + "node_modules/@babel/runtime-corejs3": { + "version": "7.28.4", + "resolved": "https://registry.npmjs.org/@babel/runtime-corejs3/-/runtime-corejs3-7.28.4.tgz", + "integrity": "sha512-h7iEYiW4HebClDEhtvFObtPmIvrd1SSfpI9EhOeKk4CtIK/ngBWFpuhCzhdmRKtg71ylcue+9I6dv54XYO1epQ==", + "license": "MIT", + "dependencies": { + "core-js-pure": "^3.43.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, "node_modules/@babel/template": { "version": "7.27.2", "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.27.2.tgz", @@ -5162,7 +5297,6 @@ "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.28.4.tgz", "integrity": "sha512-YEzuboP2qvQavAcjgQNVgsvHIDv6ZpwXvcvjmyySP2DIMuByS/6ioU5G9pYrWHM6T2YDfc7xga9iNzYOs12CFQ==", "license": "MIT", - "peer": true, "dependencies": { "@babel/code-frame": "^7.27.1", "@babel/generator": "^7.28.3", @@ -5203,6 +5337,12 @@ "dev": true, "license": "MIT" }, + "node_modules/@braintree/sanitize-url": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/@braintree/sanitize-url/-/sanitize-url-7.1.1.tgz", + "integrity": "sha512-i1L7noDNxtFyL5DmZafWy1wRVhGehQmzZaz1HiN5e7iylJMSZR7ekOV7NsIqa5qBldlLrsKv4HbgFUVlQrz8Mw==", + "license": "MIT" + }, "node_modules/@bytecodealliance/preview2-shim": { "version": "0.17.0", "resolved": "https://registry.npmjs.org/@bytecodealliance/preview2-shim/-/preview2-shim-0.17.0.tgz", @@ -5499,6 +5639,7 @@ "resolved": "https://registry.npmjs.org/@chakra-ui/form-control/-/form-control-2.0.18.tgz", "integrity": "sha512-I0a0jG01IAtRPccOXSNugyRdUAe8Dy40ctqedZvznMweOXzbMCF1m+sHPLdWeWC/VI13VoAispdPY0/zHOdjsQ==", "license": "MIT", + "peer": true, "dependencies": { "@chakra-ui/icon": "3.0.16", "@chakra-ui/react-context": "2.0.8", @@ -5531,6 +5672,7 @@ "resolved": "https://registry.npmjs.org/@chakra-ui/icon/-/icon-3.0.16.tgz", "integrity": "sha512-RpA1X5Ptz8Mt39HSyEIW1wxAz2AXyf9H0JJ5HVx/dBdMZaGMDJ0HyyPBVci0m4RCoJuyG1HHG/DXJaVfUTVAeg==", "license": "MIT", + "peer": true, "dependencies": { "@chakra-ui/shared-utils": "2.0.5" }, @@ -5575,6 +5717,7 @@ "resolved": "https://registry.npmjs.org/@chakra-ui/layout/-/layout-2.1.19.tgz", "integrity": "sha512-g7xMVKbQFCODwKCkEF4/OmdPsr/fAavWUV+DGc1ZWVPdroUlg1FGTpK9bOTwkC/gnko7cMClILA+BIPR3Ylu9Q==", "license": "MIT", + "peer": true, "dependencies": { "@chakra-ui/breakpoint-utils": "2.0.8", "@chakra-ui/icon": "3.0.16", @@ -5608,6 +5751,7 @@ "resolved": "https://registry.npmjs.org/@chakra-ui/media-query/-/media-query-3.2.12.tgz", "integrity": "sha512-8pSLDf3oxxhFrhd40rs7vSeIBfvOmIKHA7DJlGUC/y+9irD24ZwgmCtFnn+y3gI47hTJsopbSX+wb8nr7XPswA==", "license": "MIT", + "peer": true, "dependencies": { "@chakra-ui/breakpoint-utils": "2.0.8", "@chakra-ui/react-env": "3.0.0", @@ -5623,6 +5767,7 @@ "resolved": "https://registry.npmjs.org/@chakra-ui/menu/-/menu-2.1.14.tgz", "integrity": "sha512-z4YzlY/ub1hr4Ee2zCnZDs4t43048yLTf5GhEVYDO+SI92WlOfHlP9gYEzR+uj/CiRZglVFwUDKb3UmFtmKPyg==", "license": "MIT", + "peer": true, "dependencies": { "@chakra-ui/clickable": "2.0.14", "@chakra-ui/descendant": "3.0.14", @@ -5831,6 +5976,7 @@ "resolved": "https://registry.npmjs.org/@chakra-ui/react/-/react-2.6.1.tgz", "integrity": "sha512-Lt8c8pLPTz59xxdSuL2FlE7le9MXx4zgjr60UnEc3yjAMjXNTqUAoWHyT4Zn1elCGUPWOedS3rMvp4KTshT+5w==", "license": "MIT", + "peer": true, "dependencies": { "@chakra-ui/accordion": "2.1.11", "@chakra-ui/alert": "2.1.0", @@ -6198,6 +6344,7 @@ "resolved": "https://registry.npmjs.org/@chakra-ui/spinner/-/spinner-2.0.13.tgz", "integrity": "sha512-T1/aSkVpUIuiYyrjfn1+LsQEG7Onbi1UE9ccS/evgf61Dzy4GgTXQUnDuWFSgpV58owqirqOu6jn/9eCwDlzlg==", "license": "MIT", + "peer": true, "dependencies": { "@chakra-ui/shared-utils": "2.0.5" }, @@ -6241,6 +6388,7 @@ "resolved": "https://registry.npmjs.org/@chakra-ui/styled-system/-/styled-system-2.9.0.tgz", "integrity": "sha512-rToN30eOezrTZ5qBHmWqEwsYPenHtc3WU6ODAfMUwNnmCJQiu2erRGv8JwIjmRJnKSOEnNKccI2UXe2EwI6+JA==", "license": "MIT", + "peer": true, "dependencies": { "@chakra-ui/shared-utils": "2.0.5", "csstype": "^3.0.11", @@ -6267,6 +6415,7 @@ "resolved": "https://registry.npmjs.org/@chakra-ui/system/-/system-2.5.7.tgz", "integrity": "sha512-yB6en7YdJPxKvKY2jJROVwkBE2CLFmHS4ZDx27VdYs0Fa4kGiyDFhJAfnMtLBNDVsTy1NhUHL9aqR63u56QqFg==", "license": "MIT", + "peer": true, "dependencies": { "@chakra-ui/color-mode": "2.1.12", "@chakra-ui/object-utils": "2.1.0", @@ -6815,6 +6964,57 @@ "url": "https://github.com/prettier/prettier?sponsor=1" } }, + "node_modules/@chevrotain/cst-dts-gen": { + "version": "11.0.3", + "resolved": "https://registry.npmjs.org/@chevrotain/cst-dts-gen/-/cst-dts-gen-11.0.3.tgz", + "integrity": "sha512-BvIKpRLeS/8UbfxXxgC33xOumsacaeCKAjAeLyOn7Pcp95HiRbrpl14S+9vaZLolnbssPIUuiUd8IvgkRyt6NQ==", + "license": "Apache-2.0", + "dependencies": { + "@chevrotain/gast": "11.0.3", + "@chevrotain/types": "11.0.3", + "lodash-es": "4.17.21" + } + }, + "node_modules/@chevrotain/cst-dts-gen/node_modules/lodash-es": { + "version": "4.17.21", + "resolved": "https://registry.npmjs.org/lodash-es/-/lodash-es-4.17.21.tgz", + "integrity": "sha512-mKnC+QJ9pWVzv+C4/U3rRsHapFfHvQFoFB92e52xeyGMcX6/OlIl78je1u8vePzYZSkkogMPJ2yjxxsb89cxyw==", + "license": "MIT" + }, + "node_modules/@chevrotain/gast": { + "version": "11.0.3", + "resolved": "https://registry.npmjs.org/@chevrotain/gast/-/gast-11.0.3.tgz", + "integrity": "sha512-+qNfcoNk70PyS/uxmj3li5NiECO+2YKZZQMbmjTqRI3Qchu8Hig/Q9vgkHpI3alNjr7M+a2St5pw5w5F6NL5/Q==", + "license": "Apache-2.0", + "dependencies": { + "@chevrotain/types": "11.0.3", + "lodash-es": "4.17.21" + } + }, + "node_modules/@chevrotain/gast/node_modules/lodash-es": { + "version": "4.17.21", + "resolved": "https://registry.npmjs.org/lodash-es/-/lodash-es-4.17.21.tgz", + "integrity": "sha512-mKnC+QJ9pWVzv+C4/U3rRsHapFfHvQFoFB92e52xeyGMcX6/OlIl78je1u8vePzYZSkkogMPJ2yjxxsb89cxyw==", + "license": "MIT" + }, + "node_modules/@chevrotain/regexp-to-ast": { + "version": "11.0.3", + "resolved": "https://registry.npmjs.org/@chevrotain/regexp-to-ast/-/regexp-to-ast-11.0.3.tgz", + "integrity": "sha512-1fMHaBZxLFvWI067AVbGJav1eRY7N8DDvYCTwGBiE/ytKBgP8azTdgyrKyWZ9Mfh09eHWb5PgTSO8wi7U824RA==", + "license": "Apache-2.0" + }, + "node_modules/@chevrotain/types": { + "version": "11.0.3", + "resolved": "https://registry.npmjs.org/@chevrotain/types/-/types-11.0.3.tgz", + "integrity": "sha512-gsiM3G8b58kZC2HaWR50gu6Y1440cHiJ+i3JUvcp/35JchYejb2+5MVeJK0iKThYpAa/P2PYFV4hoi44HD+aHQ==", + "license": "Apache-2.0" + }, + "node_modules/@chevrotain/utils": { + "version": "11.0.3", + "resolved": "https://registry.npmjs.org/@chevrotain/utils/-/utils-11.0.3.tgz", + "integrity": "sha512-YslZMgtJUyuMbZ+aKvfF3x1f5liK4mWNxghFRv7jqRR9C3R3fAOGTTKvxXDa2Y1s9zSbcpuO0cAxDYsc9SrXoQ==", + "license": "Apache-2.0" + }, "node_modules/@colors/colors": { "version": "1.5.0", "resolved": "https://registry.npmjs.org/@colors/colors/-/colors-1.5.0.tgz", @@ -7258,11 +7458,33 @@ "@jridgewell/sourcemap-codec": "^1.4.10" } }, + "node_modules/@csstools/cascade-layer-name-parser": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@csstools/cascade-layer-name-parser/-/cascade-layer-name-parser-2.0.5.tgz", + "integrity": "sha512-p1ko5eHgV+MgXFVa4STPKpvPxr6ReS8oS2jzTukjR74i5zJNyWO1ZM1m8YKBXnzDKWfBN1ztLYlHxbVemDD88A==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "license": "MIT", + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "@csstools/css-parser-algorithms": "^3.0.5", + "@csstools/css-tokenizer": "^3.0.4" + } + }, "node_modules/@csstools/color-helpers": { "version": "5.1.0", "resolved": "https://registry.npmjs.org/@csstools/color-helpers/-/color-helpers-5.1.0.tgz", "integrity": "sha512-S11EXWJyy0Mz5SYvRmY8nJYTFFd1LCNV+7cXyAgQtOOuzb4EsgfqDufL+9esx72/eLhsRdGZwaldu/h+E4t4BA==", - "dev": true, "funding": [ { "type": "github", @@ -7282,7 +7504,6 @@ "version": "2.1.4", "resolved": "https://registry.npmjs.org/@csstools/css-calc/-/css-calc-2.1.4.tgz", "integrity": "sha512-3N8oaj+0juUw/1H3YwmDDJXCgTB1gKU6Hc/bB502u9zR0q2vd786XJH9QfrKIEgFlZmhZiq6epXl4rHqhzsIgQ==", - "dev": true, "funding": [ { "type": "github", @@ -7306,7 +7527,6 @@ "version": "3.1.0", "resolved": "https://registry.npmjs.org/@csstools/css-color-parser/-/css-color-parser-3.1.0.tgz", "integrity": "sha512-nbtKwh3a6xNVIp/VRuXV64yTKnb1IjTAEEh3irzS+HkKjAOYLTGNb9pmVNntZ8iVBHcWDA2Dof0QtPgFI1BaTA==", - "dev": true, "funding": [ { "type": "github", @@ -7334,7 +7554,6 @@ "version": "3.0.5", "resolved": "https://registry.npmjs.org/@csstools/css-parser-algorithms/-/css-parser-algorithms-3.0.5.tgz", "integrity": "sha512-DaDeUkXZKjdGhgYaHNJTV9pV7Y9B3b644jCLs9Upc3VeNGg6LWARAT6O+Q+/COo+2gg/bM5rhpMAtf70WqfBdQ==", - "dev": true, "funding": [ { "type": "github", @@ -7346,6 +7565,7 @@ } ], "license": "MIT", + "peer": true, "engines": { "node": ">=18" }, @@ -7357,7 +7577,6 @@ "version": "3.0.4", "resolved": "https://registry.npmjs.org/@csstools/css-tokenizer/-/css-tokenizer-3.0.4.tgz", "integrity": "sha512-Vd/9EVDiu6PPJt9yAh6roZP6El1xHrdvIVGjyBsHR0RYwNHgL7FJPyIIW4fANJNG6FtyZfvlRPpFI4ZM/lubvw==", - "dev": true, "funding": [ { "type": "github", @@ -7373,11035 +7592,27041 @@ "node": ">=18" } }, - "node_modules/@dabh/diagnostics": { - "version": "2.0.8", - "resolved": "https://registry.npmjs.org/@dabh/diagnostics/-/diagnostics-2.0.8.tgz", - "integrity": "sha512-R4MSXTVnuMzGD7bzHdW2ZhhdPC/igELENcq5IjEverBvq5hn1SXCWcsi6eSsdWP0/Ur+SItRRjAktmdoX/8R/Q==", + "node_modules/@csstools/media-query-list-parser": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/@csstools/media-query-list-parser/-/media-query-list-parser-4.0.3.tgz", + "integrity": "sha512-HAYH7d3TLRHDOUQK4mZKf9k9Ph/m8Akstg66ywKR4SFAigjs3yBiUeZtFxywiTm5moZMAp/5W/ZuFnNXXYLuuQ==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], "license": "MIT", - "dependencies": { - "@so-ric/colorspace": "^1.1.6", - "enabled": "2.0.x", - "kuler": "^2.0.0" + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "@csstools/css-parser-algorithms": "^3.0.5", + "@csstools/css-tokenizer": "^3.0.4" } }, - "node_modules/@dfns/sdk": { - "version": "0.1.0-beta.5", - "resolved": "https://registry.npmjs.org/@dfns/sdk/-/sdk-0.1.0-beta.5.tgz", - "integrity": "sha512-NiV6BhoOckLLBJW4W3QyipvgMlVt5YNIc6F9RcRaB2cA3T9orL/wCP2itu5JPBhj6Q9p2pudpUtNEqJrScJNUA==", + "node_modules/@csstools/postcss-alpha-function": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@csstools/postcss-alpha-function/-/postcss-alpha-function-1.0.1.tgz", + "integrity": "sha512-isfLLwksH3yHkFXfCI2Gcaqg7wGGHZZwunoJzEZk0yKYIokgre6hYVFibKL3SYAoR1kBXova8LB+JoO5vZzi9w==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "license": "MIT-0", "dependencies": { - "buffer": "6.0.3", - "cross-fetch": "3.1.6", - "uuid": "9.0.0" + "@csstools/css-color-parser": "^3.1.0", + "@csstools/css-parser-algorithms": "^3.0.5", + "@csstools/css-tokenizer": "^3.0.4", + "@csstools/postcss-progressive-custom-properties": "^4.2.1", + "@csstools/utilities": "^2.0.0" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "postcss": "^8.4" } }, - "node_modules/@dfns/sdk-keysigner": { - "version": "0.1.0-beta.5", - "resolved": "https://registry.npmjs.org/@dfns/sdk-keysigner/-/sdk-keysigner-0.1.0-beta.5.tgz", - "integrity": "sha512-S0HLn+twNT+PMsps1/Nm653tSDgC9nrNAJTJfgwX2IY1VgaumQiC90pbBLd5413fkmnpeTzfi2p7CpG+7WQcmw==", + "node_modules/@csstools/postcss-cascade-layers": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/@csstools/postcss-cascade-layers/-/postcss-cascade-layers-5.0.2.tgz", + "integrity": "sha512-nWBE08nhO8uWl6kSAeCx4im7QfVko3zLrtgWZY4/bP87zrSPpSyN/3W3TDqz1jJuH+kbKOHXg5rJnK+ZVYcFFg==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "license": "MIT-0", "dependencies": { - "buffer": "6.0.3", - "cross-fetch": "3.1.6", - "uuid": "9.0.0" + "@csstools/selector-specificity": "^5.0.0", + "postcss-selector-parser": "^7.0.0" + }, + "engines": { + "node": ">=18" }, "peerDependencies": { - "@dfns/sdk": "0.1.0-beta.5" + "postcss": "^8.4" } }, - "node_modules/@dfns/sdk-keysigner/node_modules/uuid": { - "version": "9.0.0", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-9.0.0.tgz", - "integrity": "sha512-MXcSTerfPa4uqyzStbRoTgt5XIe3x5+42+q1sDuy3R5MDk66URdLMOZe5aPX/SQd+kuYAh0FdP/pO28IkQyTeg==", - "license": "MIT", - "bin": { - "uuid": "dist/bin/uuid" + "node_modules/@csstools/postcss-cascade-layers/node_modules/@csstools/selector-specificity": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/@csstools/selector-specificity/-/selector-specificity-5.0.0.tgz", + "integrity": "sha512-PCqQV3c4CoVm3kdPhyeZ07VmBRdH2EpMFA/pd9OASpOEC3aXNGoqPDAZ80D0cLpMBxnmk0+yNhGsEx31hq7Gtw==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "license": "MIT-0", + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "postcss-selector-parser": "^7.0.0" } }, - "node_modules/@dfns/sdk/node_modules/uuid": { - "version": "9.0.0", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-9.0.0.tgz", - "integrity": "sha512-MXcSTerfPa4uqyzStbRoTgt5XIe3x5+42+q1sDuy3R5MDk66URdLMOZe5aPX/SQd+kuYAh0FdP/pO28IkQyTeg==", + "node_modules/@csstools/postcss-cascade-layers/node_modules/postcss-selector-parser": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-7.1.1.tgz", + "integrity": "sha512-orRsuYpJVw8LdAwqqLykBj9ecS5/cRHlI5+nvTo8LcCKmzDmqVORXtOIYEEQuL9D4BxtA1lm5isAqzQZCoQ6Eg==", "license": "MIT", - "bin": { - "uuid": "dist/bin/uuid" - } - }, - "node_modules/@digitalbazaar/http-client": { - "version": "3.4.1", - "resolved": "https://registry.npmjs.org/@digitalbazaar/http-client/-/http-client-3.4.1.tgz", - "integrity": "sha512-Ahk1N+s7urkgj7WvvUND5f8GiWEPfUw0D41hdElaqLgu8wZScI8gdI0q+qWw5N1d35x7GCRH2uk9mi+Uzo9M3g==", - "license": "BSD-3-Clause", "dependencies": { - "ky": "^0.33.3", - "ky-universal": "^0.11.0", - "undici": "^5.21.2" + "cssesc": "^3.0.0", + "util-deprecate": "^1.0.2" }, "engines": { - "node": ">=14.0" + "node": ">=4" } }, - "node_modules/@emotion/babel-plugin": { - "version": "11.13.5", - "resolved": "https://registry.npmjs.org/@emotion/babel-plugin/-/babel-plugin-11.13.5.tgz", - "integrity": "sha512-pxHCpT2ex+0q+HH91/zsdHkw/lXd468DIN2zvfvLtPKLLMo6gQj7oLObq8PhkrxOZb/gGCq03S3Z7PDhS8pduQ==", - "license": "MIT", + "node_modules/@csstools/postcss-color-function": { + "version": "4.0.12", + "resolved": "https://registry.npmjs.org/@csstools/postcss-color-function/-/postcss-color-function-4.0.12.tgz", + "integrity": "sha512-yx3cljQKRaSBc2hfh8rMZFZzChaFgwmO2JfFgFr1vMcF3C/uyy5I4RFIBOIWGq1D+XbKCG789CGkG6zzkLpagA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "license": "MIT-0", "dependencies": { - "@babel/helper-module-imports": "^7.16.7", - "@babel/runtime": "^7.18.3", - "@emotion/hash": "^0.9.2", - "@emotion/memoize": "^0.9.0", - "@emotion/serialize": "^1.3.3", - "babel-plugin-macros": "^3.1.0", - "convert-source-map": "^1.5.0", - "escape-string-regexp": "^4.0.0", - "find-root": "^1.1.0", - "source-map": "^0.5.7", - "stylis": "4.2.0" + "@csstools/css-color-parser": "^3.1.0", + "@csstools/css-parser-algorithms": "^3.0.5", + "@csstools/css-tokenizer": "^3.0.4", + "@csstools/postcss-progressive-custom-properties": "^4.2.1", + "@csstools/utilities": "^2.0.0" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "postcss": "^8.4" } }, - "node_modules/@emotion/babel-plugin/node_modules/convert-source-map": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.9.0.tgz", - "integrity": "sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==", - "license": "MIT" - }, - "node_modules/@emotion/cache": { - "version": "11.14.0", - "resolved": "https://registry.npmjs.org/@emotion/cache/-/cache-11.14.0.tgz", - "integrity": "sha512-L/B1lc/TViYk4DcpGxtAVbx0ZyiKM5ktoIyafGkH6zg/tj+mA+NE//aPYKG0k8kCHSHVJrpLpcAlOBEXQ3SavA==", - "license": "MIT", + "node_modules/@csstools/postcss-color-function-display-p3-linear": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@csstools/postcss-color-function-display-p3-linear/-/postcss-color-function-display-p3-linear-1.0.1.tgz", + "integrity": "sha512-E5qusdzhlmO1TztYzDIi8XPdPoYOjoTY6HBYBCYSj+Gn4gQRBlvjgPQXzfzuPQqt8EhkC/SzPKObg4Mbn8/xMg==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "license": "MIT-0", "dependencies": { - "@emotion/memoize": "^0.9.0", - "@emotion/sheet": "^1.4.0", - "@emotion/utils": "^1.4.2", - "@emotion/weak-memoize": "^0.4.0", - "stylis": "4.2.0" + "@csstools/css-color-parser": "^3.1.0", + "@csstools/css-parser-algorithms": "^3.0.5", + "@csstools/css-tokenizer": "^3.0.4", + "@csstools/postcss-progressive-custom-properties": "^4.2.1", + "@csstools/utilities": "^2.0.0" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "postcss": "^8.4" } }, - "node_modules/@emotion/hash": { - "version": "0.9.2", - "resolved": "https://registry.npmjs.org/@emotion/hash/-/hash-0.9.2.tgz", - "integrity": "sha512-MyqliTZGuOm3+5ZRSaaBGP3USLw6+EGykkwZns2EPC5g8jJ4z9OrdZY9apkl3+UP9+sdz76YYkwCKP5gh8iY3g==", - "license": "MIT" - }, - "node_modules/@emotion/is-prop-valid": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/@emotion/is-prop-valid/-/is-prop-valid-1.4.0.tgz", - "integrity": "sha512-QgD4fyscGcbbKwJmqNvUMSE02OsHUa+lAWKdEUIJKgqe5IwRSKd7+KhibEWdaKwgjLj0DRSHA9biAIqGBk05lw==", - "license": "MIT", + "node_modules/@csstools/postcss-color-mix-function": { + "version": "3.0.12", + "resolved": "https://registry.npmjs.org/@csstools/postcss-color-mix-function/-/postcss-color-mix-function-3.0.12.tgz", + "integrity": "sha512-4STERZfCP5Jcs13P1U5pTvI9SkgLgfMUMhdXW8IlJWkzOOOqhZIjcNhWtNJZes2nkBDsIKJ0CJtFtuaZ00moag==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "license": "MIT-0", "dependencies": { - "@emotion/memoize": "^0.9.0" + "@csstools/css-color-parser": "^3.1.0", + "@csstools/css-parser-algorithms": "^3.0.5", + "@csstools/css-tokenizer": "^3.0.4", + "@csstools/postcss-progressive-custom-properties": "^4.2.1", + "@csstools/utilities": "^2.0.0" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "postcss": "^8.4" } }, - "node_modules/@emotion/memoize": { - "version": "0.9.0", - "resolved": "https://registry.npmjs.org/@emotion/memoize/-/memoize-0.9.0.tgz", - "integrity": "sha512-30FAj7/EoJ5mwVPOWhAyCX+FPfMDrVecJAM+Iw9NRoSl4BBAQeqj4cApHHUXOVvIPgLVDsCFoz/hGD+5QQD1GQ==", - "license": "MIT" - }, - "node_modules/@emotion/react": { - "version": "11.14.0", - "resolved": "https://registry.npmjs.org/@emotion/react/-/react-11.14.0.tgz", - "integrity": "sha512-O000MLDBDdk/EohJPFUqvnp4qnHeYkVP5B0xEG0D/L7cOKP9kefu2DXn8dj74cQfsEzUqh+sr1RzFqiL1o+PpA==", - "license": "MIT", + "node_modules/@csstools/postcss-color-mix-variadic-function-arguments": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@csstools/postcss-color-mix-variadic-function-arguments/-/postcss-color-mix-variadic-function-arguments-1.0.2.tgz", + "integrity": "sha512-rM67Gp9lRAkTo+X31DUqMEq+iK+EFqsidfecmhrteErxJZb6tUoJBVQca1Vn1GpDql1s1rD1pKcuYzMsg7Z1KQ==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "license": "MIT-0", "dependencies": { - "@babel/runtime": "^7.18.3", - "@emotion/babel-plugin": "^11.13.5", - "@emotion/cache": "^11.14.0", - "@emotion/serialize": "^1.3.3", - "@emotion/use-insertion-effect-with-fallbacks": "^1.2.0", - "@emotion/utils": "^1.4.2", - "@emotion/weak-memoize": "^0.4.0", - "hoist-non-react-statics": "^3.3.1" + "@csstools/css-color-parser": "^3.1.0", + "@csstools/css-parser-algorithms": "^3.0.5", + "@csstools/css-tokenizer": "^3.0.4", + "@csstools/postcss-progressive-custom-properties": "^4.2.1", + "@csstools/utilities": "^2.0.0" }, - "peerDependencies": { - "react": ">=16.8.0" + "engines": { + "node": ">=18" }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - } + "peerDependencies": { + "postcss": "^8.4" } }, - "node_modules/@emotion/serialize": { - "version": "1.3.3", - "resolved": "https://registry.npmjs.org/@emotion/serialize/-/serialize-1.3.3.tgz", - "integrity": "sha512-EISGqt7sSNWHGI76hC7x1CksiXPahbxEOrC5RjmFRJTqLyEK9/9hZvBbiYn70dw4wuwMKiEMCUlR6ZXTSWQqxA==", - "license": "MIT", + "node_modules/@csstools/postcss-content-alt-text": { + "version": "2.0.8", + "resolved": "https://registry.npmjs.org/@csstools/postcss-content-alt-text/-/postcss-content-alt-text-2.0.8.tgz", + "integrity": "sha512-9SfEW9QCxEpTlNMnpSqFaHyzsiRpZ5J5+KqCu1u5/eEJAWsMhzT40qf0FIbeeglEvrGRMdDzAxMIz3wqoGSb+Q==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "license": "MIT-0", "dependencies": { - "@emotion/hash": "^0.9.2", - "@emotion/memoize": "^0.9.0", - "@emotion/unitless": "^0.10.0", - "@emotion/utils": "^1.4.2", - "csstype": "^3.0.2" + "@csstools/css-parser-algorithms": "^3.0.5", + "@csstools/css-tokenizer": "^3.0.4", + "@csstools/postcss-progressive-custom-properties": "^4.2.1", + "@csstools/utilities": "^2.0.0" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "postcss": "^8.4" } }, - "node_modules/@emotion/sheet": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/@emotion/sheet/-/sheet-1.4.0.tgz", - "integrity": "sha512-fTBW9/8r2w3dXWYM4HCB1Rdp8NLibOw2+XELH5m5+AkWiL/KqYX6dc0kKYlaYyKjrQ6ds33MCdMPEwgs2z1rqg==", - "license": "MIT" - }, - "node_modules/@emotion/styled": { - "version": "11.14.1", - "resolved": "https://registry.npmjs.org/@emotion/styled/-/styled-11.14.1.tgz", - "integrity": "sha512-qEEJt42DuToa3gurlH4Qqc1kVpNq8wO8cJtDzU46TjlzWjDlsVyevtYCRijVq3SrHsROS+gVQ8Fnea108GnKzw==", - "license": "MIT", + "node_modules/@csstools/postcss-contrast-color-function": { + "version": "2.0.12", + "resolved": "https://registry.npmjs.org/@csstools/postcss-contrast-color-function/-/postcss-contrast-color-function-2.0.12.tgz", + "integrity": "sha512-YbwWckjK3qwKjeYz/CijgcS7WDUCtKTd8ShLztm3/i5dhh4NaqzsbYnhm4bjrpFpnLZ31jVcbK8YL77z3GBPzA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "license": "MIT-0", "dependencies": { - "@babel/runtime": "^7.18.3", - "@emotion/babel-plugin": "^11.13.5", - "@emotion/is-prop-valid": "^1.3.0", - "@emotion/serialize": "^1.3.3", - "@emotion/use-insertion-effect-with-fallbacks": "^1.2.0", - "@emotion/utils": "^1.4.2" + "@csstools/css-color-parser": "^3.1.0", + "@csstools/css-parser-algorithms": "^3.0.5", + "@csstools/css-tokenizer": "^3.0.4", + "@csstools/postcss-progressive-custom-properties": "^4.2.1", + "@csstools/utilities": "^2.0.0" }, - "peerDependencies": { - "@emotion/react": "^11.0.0-rc.0", - "react": ">=16.8.0" + "engines": { + "node": ">=18" }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - } - } - }, - "node_modules/@emotion/unitless": { - "version": "0.10.0", - "resolved": "https://registry.npmjs.org/@emotion/unitless/-/unitless-0.10.0.tgz", - "integrity": "sha512-dFoMUuQA20zvtVTuxZww6OHoJYgrzfKM1t52mVySDJnMSEa08ruEvdYQbhvyu6soU+NeLVd3yKfTfT0NeV6qGg==", - "license": "MIT" - }, - "node_modules/@emotion/use-insertion-effect-with-fallbacks": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@emotion/use-insertion-effect-with-fallbacks/-/use-insertion-effect-with-fallbacks-1.2.0.tgz", - "integrity": "sha512-yJMtVdH59sxi/aVJBpk9FQq+OR8ll5GT8oWd57UpeaKEVGab41JWaCFA7FRLoMLloOZF/c/wsPoe+bfGmRKgDg==", - "license": "MIT", "peerDependencies": { - "react": ">=16.8.0" + "postcss": "^8.4" } }, - "node_modules/@emotion/utils": { - "version": "1.4.2", - "resolved": "https://registry.npmjs.org/@emotion/utils/-/utils-1.4.2.tgz", - "integrity": "sha512-3vLclRofFziIa3J2wDh9jjbkUz9qk5Vi3IZ/FSTKViB0k+ef0fPV7dYrUIugbgupYDx7v9ud/SjrtEP8Y4xLoA==", - "license": "MIT" - }, - "node_modules/@emotion/weak-memoize": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/@emotion/weak-memoize/-/weak-memoize-0.4.0.tgz", - "integrity": "sha512-snKqtPW01tN0ui7yu9rGv69aJXr/a/Ywvl11sUjNtEcRc+ng/mQriFL0wLXMef74iHa/EkftbDzU9F8iFbH+zg==", - "license": "MIT" - }, - "node_modules/@esbuild-plugins/node-globals-polyfill": { - "version": "0.2.3", - "resolved": "https://registry.npmjs.org/@esbuild-plugins/node-globals-polyfill/-/node-globals-polyfill-0.2.3.tgz", - "integrity": "sha512-r3MIryXDeXDOZh7ih1l/yE9ZLORCd5e8vWg02azWRGj5SPTuoh69A2AIyn0Z31V/kHBfZ4HgWJ+OK3GTTwLmnw==", - "dev": true, - "license": "ISC", + "node_modules/@csstools/postcss-exponential-functions": { + "version": "2.0.9", + "resolved": "https://registry.npmjs.org/@csstools/postcss-exponential-functions/-/postcss-exponential-functions-2.0.9.tgz", + "integrity": "sha512-abg2W/PI3HXwS/CZshSa79kNWNZHdJPMBXeZNyPQFbbj8sKO3jXxOt/wF7juJVjyDTc6JrvaUZYFcSBZBhaxjw==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "license": "MIT-0", + "dependencies": { + "@csstools/css-calc": "^2.1.4", + "@csstools/css-parser-algorithms": "^3.0.5", + "@csstools/css-tokenizer": "^3.0.4" + }, + "engines": { + "node": ">=18" + }, "peerDependencies": { - "esbuild": "*" + "postcss": "^8.4" } }, - "node_modules/@esbuild-plugins/node-modules-polyfill": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/@esbuild-plugins/node-modules-polyfill/-/node-modules-polyfill-0.2.2.tgz", - "integrity": "sha512-LXV7QsWJxRuMYvKbiznh+U1ilIop3g2TeKRzUxOG5X3YITc8JyyTa90BmLwqqv0YnX4v32CSlG+vsziZp9dMvA==", - "dev": true, - "license": "ISC", + "node_modules/@csstools/postcss-font-format-keywords": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@csstools/postcss-font-format-keywords/-/postcss-font-format-keywords-4.0.0.tgz", + "integrity": "sha512-usBzw9aCRDvchpok6C+4TXC57btc4bJtmKQWOHQxOVKen1ZfVqBUuCZ/wuqdX5GHsD0NRSr9XTP+5ID1ZZQBXw==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "license": "MIT-0", "dependencies": { - "escape-string-regexp": "^4.0.0", - "rollup-plugin-node-polyfills": "^0.2.1" + "@csstools/utilities": "^2.0.0", + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": ">=18" }, "peerDependencies": { - "esbuild": "*" + "postcss": "^8.4" } }, - "node_modules/@esbuild/aix-ppc64": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.20.2.tgz", - "integrity": "sha512-D+EBOJHXdNZcLJRBkhENNG8Wji2kgc9AZ9KiPr1JuZjsNtyHzrsfLRrY0tk2H2aoFu6RANO1y1iPPUCDYWkb5g==", - "cpu": [ - "ppc64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "aix" + "node_modules/@csstools/postcss-gamut-mapping": { + "version": "2.0.11", + "resolved": "https://registry.npmjs.org/@csstools/postcss-gamut-mapping/-/postcss-gamut-mapping-2.0.11.tgz", + "integrity": "sha512-fCpCUgZNE2piVJKC76zFsgVW1apF6dpYsqGyH8SIeCcM4pTEsRTWTLCaJIMKFEundsCKwY1rwfhtrio04RJ4Dw==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } ], + "license": "MIT-0", + "dependencies": { + "@csstools/css-color-parser": "^3.1.0", + "@csstools/css-parser-algorithms": "^3.0.5", + "@csstools/css-tokenizer": "^3.0.4" + }, "engines": { - "node": ">=12" + "node": ">=18" + }, + "peerDependencies": { + "postcss": "^8.4" } }, - "node_modules/@esbuild/android-arm": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.20.2.tgz", - "integrity": "sha512-t98Ra6pw2VaDhqNWO2Oph2LXbz/EJcnLmKLGBJwEwXX/JAN83Fym1rU8l0JUWK6HkIbWONCSSatf4sf2NBRx/w==", - "cpu": [ - "arm" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "android" + "node_modules/@csstools/postcss-gradients-interpolation-method": { + "version": "5.0.12", + "resolved": "https://registry.npmjs.org/@csstools/postcss-gradients-interpolation-method/-/postcss-gradients-interpolation-method-5.0.12.tgz", + "integrity": "sha512-jugzjwkUY0wtNrZlFeyXzimUL3hN4xMvoPnIXxoZqxDvjZRiSh+itgHcVUWzJ2VwD/VAMEgCLvtaJHX+4Vj3Ow==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } ], + "license": "MIT-0", + "dependencies": { + "@csstools/css-color-parser": "^3.1.0", + "@csstools/css-parser-algorithms": "^3.0.5", + "@csstools/css-tokenizer": "^3.0.4", + "@csstools/postcss-progressive-custom-properties": "^4.2.1", + "@csstools/utilities": "^2.0.0" + }, "engines": { - "node": ">=12" + "node": ">=18" + }, + "peerDependencies": { + "postcss": "^8.4" } }, - "node_modules/@esbuild/android-arm64": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.20.2.tgz", - "integrity": "sha512-mRzjLacRtl/tWU0SvD8lUEwb61yP9cqQo6noDZP/O8VkwafSYwZ4yWy24kan8jE/IMERpYncRt2dw438LP3Xmg==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "android" + "node_modules/@csstools/postcss-hwb-function": { + "version": "4.0.12", + "resolved": "https://registry.npmjs.org/@csstools/postcss-hwb-function/-/postcss-hwb-function-4.0.12.tgz", + "integrity": "sha512-mL/+88Z53KrE4JdePYFJAQWFrcADEqsLprExCM04GDNgHIztwFzj0Mbhd/yxMBngq0NIlz58VVxjt5abNs1VhA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } ], + "license": "MIT-0", + "dependencies": { + "@csstools/css-color-parser": "^3.1.0", + "@csstools/css-parser-algorithms": "^3.0.5", + "@csstools/css-tokenizer": "^3.0.4", + "@csstools/postcss-progressive-custom-properties": "^4.2.1", + "@csstools/utilities": "^2.0.0" + }, "engines": { - "node": ">=12" + "node": ">=18" + }, + "peerDependencies": { + "postcss": "^8.4" } }, - "node_modules/@esbuild/android-x64": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.20.2.tgz", - "integrity": "sha512-btzExgV+/lMGDDa194CcUQm53ncxzeBrWJcncOBxuC6ndBkKxnHdFJn86mCIgTELsooUmwUm9FkhSp5HYu00Rg==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "android" + "node_modules/@csstools/postcss-ic-unit": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/@csstools/postcss-ic-unit/-/postcss-ic-unit-4.0.4.tgz", + "integrity": "sha512-yQ4VmossuOAql65sCPppVO1yfb7hDscf4GseF0VCA/DTDaBc0Wtf8MTqVPfjGYlT5+2buokG0Gp7y0atYZpwjg==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } ], + "license": "MIT-0", + "dependencies": { + "@csstools/postcss-progressive-custom-properties": "^4.2.1", + "@csstools/utilities": "^2.0.0", + "postcss-value-parser": "^4.2.0" + }, "engines": { - "node": ">=12" + "node": ">=18" + }, + "peerDependencies": { + "postcss": "^8.4" } }, - "node_modules/@esbuild/darwin-arm64": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.20.2.tgz", - "integrity": "sha512-4J6IRT+10J3aJH3l1yzEg9y3wkTDgDk7TSDFX+wKFiWjqWp/iCfLIYzGyasx9l0SAFPT1HwSCR+0w/h1ES/MjA==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "darwin" + "node_modules/@csstools/postcss-initial": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/@csstools/postcss-initial/-/postcss-initial-2.0.1.tgz", + "integrity": "sha512-L1wLVMSAZ4wovznquK0xmC7QSctzO4D0Is590bxpGqhqjboLXYA16dWZpfwImkdOgACdQ9PqXsuRroW6qPlEsg==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } ], + "license": "MIT-0", "engines": { - "node": ">=12" + "node": ">=18" + }, + "peerDependencies": { + "postcss": "^8.4" } }, - "node_modules/@esbuild/darwin-x64": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.20.2.tgz", - "integrity": "sha512-tBcXp9KNphnNH0dfhv8KYkZhjc+H3XBkF5DKtswJblV7KlT9EI2+jeA8DgBjp908WEuYll6pF+UStUCfEpdysA==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "darwin" + "node_modules/@csstools/postcss-is-pseudo-class": { + "version": "5.0.3", + "resolved": "https://registry.npmjs.org/@csstools/postcss-is-pseudo-class/-/postcss-is-pseudo-class-5.0.3.tgz", + "integrity": "sha512-jS/TY4SpG4gszAtIg7Qnf3AS2pjcUM5SzxpApOrlndMeGhIbaTzWBzzP/IApXoNWEW7OhcjkRT48jnAUIFXhAQ==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } ], + "license": "MIT-0", + "dependencies": { + "@csstools/selector-specificity": "^5.0.0", + "postcss-selector-parser": "^7.0.0" + }, "engines": { - "node": ">=12" + "node": ">=18" + }, + "peerDependencies": { + "postcss": "^8.4" } }, - "node_modules/@esbuild/freebsd-arm64": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.20.2.tgz", - "integrity": "sha512-d3qI41G4SuLiCGCFGUrKsSeTXyWG6yem1KcGZVS+3FYlYhtNoNgYrWcvkOoaqMhwXSMrZRl69ArHsGJ9mYdbbw==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "freebsd" + "node_modules/@csstools/postcss-is-pseudo-class/node_modules/@csstools/selector-specificity": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/@csstools/selector-specificity/-/selector-specificity-5.0.0.tgz", + "integrity": "sha512-PCqQV3c4CoVm3kdPhyeZ07VmBRdH2EpMFA/pd9OASpOEC3aXNGoqPDAZ80D0cLpMBxnmk0+yNhGsEx31hq7Gtw==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } ], + "license": "MIT-0", "engines": { - "node": ">=12" + "node": ">=18" + }, + "peerDependencies": { + "postcss-selector-parser": "^7.0.0" } }, - "node_modules/@esbuild/freebsd-x64": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.20.2.tgz", - "integrity": "sha512-d+DipyvHRuqEeM5zDivKV1KuXn9WeRX6vqSqIDgwIfPQtwMP4jaDsQsDncjTDDsExT4lR/91OLjRo8bmC1e+Cw==", - "cpu": [ - "x64" - ], - "dev": true, + "node_modules/@csstools/postcss-is-pseudo-class/node_modules/postcss-selector-parser": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-7.1.1.tgz", + "integrity": "sha512-orRsuYpJVw8LdAwqqLykBj9ecS5/cRHlI5+nvTo8LcCKmzDmqVORXtOIYEEQuL9D4BxtA1lm5isAqzQZCoQ6Eg==", "license": "MIT", - "optional": true, - "os": [ - "freebsd" - ], + "dependencies": { + "cssesc": "^3.0.0", + "util-deprecate": "^1.0.2" + }, "engines": { - "node": ">=12" + "node": ">=4" } }, - "node_modules/@esbuild/linux-arm": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.20.2.tgz", - "integrity": "sha512-VhLPeR8HTMPccbuWWcEUD1Az68TqaTYyj6nfE4QByZIQEQVWBB8vup8PpR7y1QHL3CpcF6xd5WVBU/+SBEvGTg==", - "cpu": [ - "arm" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" + "node_modules/@csstools/postcss-light-dark-function": { + "version": "2.0.11", + "resolved": "https://registry.npmjs.org/@csstools/postcss-light-dark-function/-/postcss-light-dark-function-2.0.11.tgz", + "integrity": "sha512-fNJcKXJdPM3Lyrbmgw2OBbaioU7yuKZtiXClf4sGdQttitijYlZMD5K7HrC/eF83VRWRrYq6OZ0Lx92leV2LFA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } ], + "license": "MIT-0", + "dependencies": { + "@csstools/css-parser-algorithms": "^3.0.5", + "@csstools/css-tokenizer": "^3.0.4", + "@csstools/postcss-progressive-custom-properties": "^4.2.1", + "@csstools/utilities": "^2.0.0" + }, "engines": { - "node": ">=12" + "node": ">=18" + }, + "peerDependencies": { + "postcss": "^8.4" } }, - "node_modules/@esbuild/linux-arm64": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.20.2.tgz", - "integrity": "sha512-9pb6rBjGvTFNira2FLIWqDk/uaf42sSyLE8j1rnUpuzsODBq7FvpwHYZxQ/It/8b+QOS1RYfqgGFNLRI+qlq2A==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" + "node_modules/@csstools/postcss-logical-float-and-clear": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@csstools/postcss-logical-float-and-clear/-/postcss-logical-float-and-clear-3.0.0.tgz", + "integrity": "sha512-SEmaHMszwakI2rqKRJgE+8rpotFfne1ZS6bZqBoQIicFyV+xT1UF42eORPxJkVJVrH9C0ctUgwMSn3BLOIZldQ==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } ], + "license": "MIT-0", "engines": { - "node": ">=12" + "node": ">=18" + }, + "peerDependencies": { + "postcss": "^8.4" } }, - "node_modules/@esbuild/linux-ia32": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.20.2.tgz", - "integrity": "sha512-o10utieEkNPFDZFQm9CoP7Tvb33UutoJqg3qKf1PWVeeJhJw0Q347PxMvBgVVFgouYLGIhFYG0UGdBumROyiig==", - "cpu": [ - "ia32" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" + "node_modules/@csstools/postcss-logical-overflow": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@csstools/postcss-logical-overflow/-/postcss-logical-overflow-2.0.0.tgz", + "integrity": "sha512-spzR1MInxPuXKEX2csMamshR4LRaSZ3UXVaRGjeQxl70ySxOhMpP2252RAFsg8QyyBXBzuVOOdx1+bVO5bPIzA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } ], + "license": "MIT-0", "engines": { - "node": ">=12" + "node": ">=18" + }, + "peerDependencies": { + "postcss": "^8.4" } }, - "node_modules/@esbuild/linux-loong64": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.20.2.tgz", - "integrity": "sha512-PR7sp6R/UC4CFVomVINKJ80pMFlfDfMQMYynX7t1tNTeivQ6XdX5r2XovMmha/VjR1YN/HgHWsVcTRIMkymrgQ==", - "cpu": [ - "loong64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" + "node_modules/@csstools/postcss-logical-overscroll-behavior": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@csstools/postcss-logical-overscroll-behavior/-/postcss-logical-overscroll-behavior-2.0.0.tgz", + "integrity": "sha512-e/webMjoGOSYfqLunyzByZj5KKe5oyVg/YSbie99VEaSDE2kimFm0q1f6t/6Jo+VVCQ/jbe2Xy+uX+C4xzWs4w==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } ], + "license": "MIT-0", "engines": { - "node": ">=12" + "node": ">=18" + }, + "peerDependencies": { + "postcss": "^8.4" } }, - "node_modules/@esbuild/linux-mips64el": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.20.2.tgz", - "integrity": "sha512-4BlTqeutE/KnOiTG5Y6Sb/Hw6hsBOZapOVF6njAESHInhlQAghVVZL1ZpIctBOoTFbQyGW+LsVYZ8lSSB3wkjA==", - "cpu": [ - "mips64el" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" + "node_modules/@csstools/postcss-logical-resize": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@csstools/postcss-logical-resize/-/postcss-logical-resize-3.0.0.tgz", + "integrity": "sha512-DFbHQOFW/+I+MY4Ycd/QN6Dg4Hcbb50elIJCfnwkRTCX05G11SwViI5BbBlg9iHRl4ytB7pmY5ieAFk3ws7yyg==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } ], + "license": "MIT-0", + "dependencies": { + "postcss-value-parser": "^4.2.0" + }, "engines": { - "node": ">=12" + "node": ">=18" + }, + "peerDependencies": { + "postcss": "^8.4" } }, - "node_modules/@esbuild/linux-ppc64": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.20.2.tgz", - "integrity": "sha512-rD3KsaDprDcfajSKdn25ooz5J5/fWBylaaXkuotBDGnMnDP1Uv5DLAN/45qfnf3JDYyJv/ytGHQaziHUdyzaAg==", - "cpu": [ - "ppc64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" + "node_modules/@csstools/postcss-logical-viewport-units": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/@csstools/postcss-logical-viewport-units/-/postcss-logical-viewport-units-3.0.4.tgz", + "integrity": "sha512-q+eHV1haXA4w9xBwZLKjVKAWn3W2CMqmpNpZUk5kRprvSiBEGMgrNH3/sJZ8UA3JgyHaOt3jwT9uFa4wLX4EqQ==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } ], + "license": "MIT-0", + "dependencies": { + "@csstools/css-tokenizer": "^3.0.4", + "@csstools/utilities": "^2.0.0" + }, "engines": { - "node": ">=12" + "node": ">=18" + }, + "peerDependencies": { + "postcss": "^8.4" } }, - "node_modules/@esbuild/linux-riscv64": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.20.2.tgz", - "integrity": "sha512-snwmBKacKmwTMmhLlz/3aH1Q9T8v45bKYGE3j26TsaOVtjIag4wLfWSiZykXzXuE1kbCE+zJRmwp+ZbIHinnVg==", - "cpu": [ - "riscv64" + "node_modules/@csstools/postcss-media-minmax": { + "version": "2.0.9", + "resolved": "https://registry.npmjs.org/@csstools/postcss-media-minmax/-/postcss-media-minmax-2.0.9.tgz", + "integrity": "sha512-af9Qw3uS3JhYLnCbqtZ9crTvvkR+0Se+bBqSr7ykAnl9yKhk6895z9rf+2F4dClIDJWxgn0iZZ1PSdkhrbs2ig==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } ], - "dev": true, "license": "MIT", - "optional": true, - "os": [ - "linux" - ], + "dependencies": { + "@csstools/css-calc": "^2.1.4", + "@csstools/css-parser-algorithms": "^3.0.5", + "@csstools/css-tokenizer": "^3.0.4", + "@csstools/media-query-list-parser": "^4.0.3" + }, "engines": { - "node": ">=12" + "node": ">=18" + }, + "peerDependencies": { + "postcss": "^8.4" } }, - "node_modules/@esbuild/linux-s390x": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.20.2.tgz", - "integrity": "sha512-wcWISOobRWNm3cezm5HOZcYz1sKoHLd8VL1dl309DiixxVFoFe/o8HnwuIwn6sXre88Nwj+VwZUvJf4AFxkyrQ==", - "cpu": [ - "s390x" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" + "node_modules/@csstools/postcss-media-queries-aspect-ratio-number-values": { + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/@csstools/postcss-media-queries-aspect-ratio-number-values/-/postcss-media-queries-aspect-ratio-number-values-3.0.5.tgz", + "integrity": "sha512-zhAe31xaaXOY2Px8IYfoVTB3wglbJUVigGphFLj6exb7cjZRH9A6adyE22XfFK3P2PzwRk0VDeTJmaxpluyrDg==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } ], + "license": "MIT-0", + "dependencies": { + "@csstools/css-parser-algorithms": "^3.0.5", + "@csstools/css-tokenizer": "^3.0.4", + "@csstools/media-query-list-parser": "^4.0.3" + }, "engines": { - "node": ">=12" + "node": ">=18" + }, + "peerDependencies": { + "postcss": "^8.4" } }, - "node_modules/@esbuild/linux-x64": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.20.2.tgz", - "integrity": "sha512-1MdwI6OOTsfQfek8sLwgyjOXAu+wKhLEoaOLTjbijk6E2WONYpH9ZU2mNtR+lZ2B4uwr+usqGuVfFT9tMtGvGw==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" + "node_modules/@csstools/postcss-nested-calc": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@csstools/postcss-nested-calc/-/postcss-nested-calc-4.0.0.tgz", + "integrity": "sha512-jMYDdqrQQxE7k9+KjstC3NbsmC063n1FTPLCgCRS2/qHUbHM0mNy9pIn4QIiQGs9I/Bg98vMqw7mJXBxa0N88A==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } ], + "license": "MIT-0", + "dependencies": { + "@csstools/utilities": "^2.0.0", + "postcss-value-parser": "^4.2.0" + }, "engines": { - "node": ">=12" + "node": ">=18" + }, + "peerDependencies": { + "postcss": "^8.4" } }, - "node_modules/@esbuild/netbsd-arm64": { - "version": "0.25.10", - "resolved": "https://registry.npmjs.org/@esbuild/netbsd-arm64/-/netbsd-arm64-0.25.10.tgz", - "integrity": "sha512-AKQM3gfYfSW8XRk8DdMCzaLUFB15dTrZfnX8WXQoOUpUBQ+NaAFCP1kPS/ykbbGYz7rxn0WS48/81l9hFl3u4A==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "netbsd" + "node_modules/@csstools/postcss-normalize-display-values": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@csstools/postcss-normalize-display-values/-/postcss-normalize-display-values-4.0.0.tgz", + "integrity": "sha512-HlEoG0IDRoHXzXnkV4in47dzsxdsjdz6+j7MLjaACABX2NfvjFS6XVAnpaDyGesz9gK2SC7MbNwdCHusObKJ9Q==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } ], + "license": "MIT-0", + "dependencies": { + "postcss-value-parser": "^4.2.0" + }, "engines": { "node": ">=18" + }, + "peerDependencies": { + "postcss": "^8.4" } }, - "node_modules/@esbuild/netbsd-x64": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.20.2.tgz", - "integrity": "sha512-K8/DhBxcVQkzYc43yJXDSyjlFeHQJBiowJ0uVL6Tor3jGQfSGHNNJcWxNbOI8v5k82prYqzPuwkzHt3J1T1iZQ==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "netbsd" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/openbsd-arm64": { - "version": "0.25.10", - "resolved": "https://registry.npmjs.org/@esbuild/openbsd-arm64/-/openbsd-arm64-0.25.10.tgz", - "integrity": "sha512-5Se0VM9Wtq797YFn+dLimf2Zx6McttsH2olUBsDml+lm0GOCRVebRWUvDtkY4BWYv/3NgzS8b/UM3jQNh5hYyw==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "openbsd" + "node_modules/@csstools/postcss-oklab-function": { + "version": "4.0.12", + "resolved": "https://registry.npmjs.org/@csstools/postcss-oklab-function/-/postcss-oklab-function-4.0.12.tgz", + "integrity": "sha512-HhlSmnE1NKBhXsTnNGjxvhryKtO7tJd1w42DKOGFD6jSHtYOrsJTQDKPMwvOfrzUAk8t7GcpIfRyM7ssqHpFjg==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } ], + "license": "MIT-0", + "dependencies": { + "@csstools/css-color-parser": "^3.1.0", + "@csstools/css-parser-algorithms": "^3.0.5", + "@csstools/css-tokenizer": "^3.0.4", + "@csstools/postcss-progressive-custom-properties": "^4.2.1", + "@csstools/utilities": "^2.0.0" + }, "engines": { "node": ">=18" + }, + "peerDependencies": { + "postcss": "^8.4" } }, - "node_modules/@esbuild/openbsd-x64": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.20.2.tgz", - "integrity": "sha512-eMpKlV0SThJmmJgiVyN9jTPJ2VBPquf6Kt/nAoo6DgHAoN57K15ZghiHaMvqjCye/uU4X5u3YSMgVBI1h3vKrQ==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "openbsd" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/openharmony-arm64": { - "version": "0.25.10", - "resolved": "https://registry.npmjs.org/@esbuild/openharmony-arm64/-/openharmony-arm64-0.25.10.tgz", - "integrity": "sha512-AVTSBhTX8Y/Fz6OmIVBip9tJzZEUcY8WLh7I59+upa5/GPhh2/aM6bvOMQySspnCCHvFi79kMtdJS1w0DXAeag==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "openharmony" + "node_modules/@csstools/postcss-position-area-property": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@csstools/postcss-position-area-property/-/postcss-position-area-property-1.0.0.tgz", + "integrity": "sha512-fUP6KR8qV2NuUZV3Cw8itx0Ep90aRjAZxAEzC3vrl6yjFv+pFsQbR18UuQctEKmA72K9O27CoYiKEgXxkqjg8Q==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } ], + "license": "MIT-0", "engines": { "node": ">=18" + }, + "peerDependencies": { + "postcss": "^8.4" } }, - "node_modules/@esbuild/sunos-x64": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.20.2.tgz", - "integrity": "sha512-2UyFtRC6cXLyejf/YEld4Hajo7UHILetzE1vsRcGL3earZEW77JxrFjH4Ez2qaTiEfMgAXxfAZCm1fvM/G/o8w==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "sunos" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/win32-arm64": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.20.2.tgz", - "integrity": "sha512-GRibxoawM9ZCnDxnP3usoUDO9vUkpAxIIZ6GQI+IlVmr5kP3zUq+l17xELTHMWTWzjxa2guPNyrpq1GWmPvcGQ==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/win32-ia32": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.20.2.tgz", - "integrity": "sha512-HfLOfn9YWmkSKRQqovpnITazdtquEW8/SoHW7pWpuEeguaZI4QnCRW6b+oZTztdBnZOS2hqJ6im/D5cPzBTTlQ==", - "cpu": [ - "ia32" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/win32-x64": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.20.2.tgz", - "integrity": "sha512-N49X4lJX27+l9jbLKSqZ6bKNjzQvHaT8IIFUy+YIqmXQdjYCToGWwOItDrfby14c78aDd5NHQl29xingXfCdLQ==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "win32" + "node_modules/@csstools/postcss-progressive-custom-properties": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/@csstools/postcss-progressive-custom-properties/-/postcss-progressive-custom-properties-4.2.1.tgz", + "integrity": "sha512-uPiiXf7IEKtUQXsxu6uWtOlRMXd2QWWy5fhxHDnPdXKCQckPP3E34ZgDoZ62r2iT+UOgWsSbM4NvHE5m3mAEdw==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@eslint-community/eslint-utils": { - "version": "4.9.0", - "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.9.0.tgz", - "integrity": "sha512-ayVFHdtZ+hsq1t2Dy24wCmGXGe4q9Gu3smhLYALJrr473ZH27MsnSL+LKUlimp4BWJqMDMLmPpx/Q9R3OAlL4g==", - "dev": true, - "license": "MIT", + "license": "MIT-0", "dependencies": { - "eslint-visitor-keys": "^3.4.3" + "postcss-value-parser": "^4.2.0" }, "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "url": "https://opencollective.com/eslint" + "node": ">=18" }, "peerDependencies": { - "eslint": "^6.0.0 || ^7.0.0 || >=8.0.0" - } - }, - "node_modules/@eslint-community/regexpp": { - "version": "4.12.1", - "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.12.1.tgz", - "integrity": "sha512-CCZCDJuduB9OUkFkY2IgppNZMi2lBQgD2qzwXkEia16cge2pijY/aXi96CJMquDMn3nJdlPV1A5KrJEXwfLNzQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": "^12.0.0 || ^14.0.0 || >=16.0.0" - } - }, - "node_modules/@eslint/compat": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@eslint/compat/-/compat-1.1.0.tgz", - "integrity": "sha512-s9Wi/p25+KbzxKlDm3VshQdImhWk+cbdblhwGNnyCU5lpSwtWa4v7VQCxSki0FAUrGA3s8nCWgYzAH41mwQVKQ==", - "dev": true, - "license": "Apache-2.0", - "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + "postcss": "^8.4" } }, - "node_modules/@eslint/eslintrc": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-3.1.0.tgz", - "integrity": "sha512-4Bfj15dVJdoy3RfZmmo86RK1Fwzn6SstsvK9JS+BaVKqC6QQQQyXekNaC+g+LKNgkQ+2VhGAzm6hO40AhMR3zQ==", - "dev": true, - "license": "MIT", + "node_modules/@csstools/postcss-random-function": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/@csstools/postcss-random-function/-/postcss-random-function-2.0.1.tgz", + "integrity": "sha512-q+FQaNiRBhnoSNo+GzqGOIBKoHQ43lYz0ICrV+UudfWnEF6ksS6DsBIJSISKQT2Bvu3g4k6r7t0zYrk5pDlo8w==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "license": "MIT-0", "dependencies": { - "ajv": "^6.12.4", - "debug": "^4.3.2", - "espree": "^10.0.1", - "globals": "^14.0.0", - "ignore": "^5.2.0", - "import-fresh": "^3.2.1", - "js-yaml": "^4.1.0", - "minimatch": "^3.1.2", - "strip-json-comments": "^3.1.1" - }, - "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + "@csstools/css-calc": "^2.1.4", + "@csstools/css-parser-algorithms": "^3.0.5", + "@csstools/css-tokenizer": "^3.0.4" }, - "funding": { - "url": "https://opencollective.com/eslint" - } - }, - "node_modules/@eslint/eslintrc/node_modules/eslint-visitor-keys": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-4.2.1.tgz", - "integrity": "sha512-Uhdk5sfqcee/9H/rCOJikYz67o0a2Tw2hGRPOG2Y1R2dg7brRe1uG0yaNQDHu+TO/uQPF/5eCapvYSmHUjt7JQ==", - "dev": true, - "license": "Apache-2.0", "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + "node": ">=18" }, - "funding": { - "url": "https://opencollective.com/eslint" + "peerDependencies": { + "postcss": "^8.4" } }, - "node_modules/@eslint/eslintrc/node_modules/espree": { - "version": "10.4.0", - "resolved": "https://registry.npmjs.org/espree/-/espree-10.4.0.tgz", - "integrity": "sha512-j6PAQ2uUr79PZhBjP5C5fhl8e39FmRnOjsD5lGnWrFU8i2G776tBK7+nP8KuQUTTyAZUwfQqXAgrVH5MbH9CYQ==", - "dev": true, - "license": "BSD-2-Clause", + "node_modules/@csstools/postcss-relative-color-syntax": { + "version": "3.0.12", + "resolved": "https://registry.npmjs.org/@csstools/postcss-relative-color-syntax/-/postcss-relative-color-syntax-3.0.12.tgz", + "integrity": "sha512-0RLIeONxu/mtxRtf3o41Lq2ghLimw0w9ByLWnnEVuy89exmEEq8bynveBxNW3nyHqLAFEeNtVEmC1QK9MZ8Huw==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "license": "MIT-0", "dependencies": { - "acorn": "^8.15.0", - "acorn-jsx": "^5.3.2", - "eslint-visitor-keys": "^4.2.1" - }, - "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + "@csstools/css-color-parser": "^3.1.0", + "@csstools/css-parser-algorithms": "^3.0.5", + "@csstools/css-tokenizer": "^3.0.4", + "@csstools/postcss-progressive-custom-properties": "^4.2.1", + "@csstools/utilities": "^2.0.0" }, - "funding": { - "url": "https://opencollective.com/eslint" - } - }, - "node_modules/@eslint/eslintrc/node_modules/globals": { - "version": "14.0.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-14.0.0.tgz", - "integrity": "sha512-oahGvuMGQlPw/ivIYBjVSrWAfWLBeku5tpPE2fOPLi+WHffIWbuh2tCjhyQhTBPMf5E9jDEH4FOmTYgYwbKwtQ==", - "dev": true, - "license": "MIT", "engines": { "node": ">=18" }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/@eslint/js": { - "version": "9.36.0", - "resolved": "https://registry.npmjs.org/@eslint/js/-/js-9.36.0.tgz", - "integrity": "sha512-uhCbYtYynH30iZErszX78U+nR3pJU3RHGQ57NXy5QupD4SBVwDeU8TNBy+MjMngc1UyIW9noKqsRqfjQTBU2dw==", - "dev": true, - "license": "MIT", - "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" - }, - "funding": { - "url": "https://eslint.org/donate" - } - }, - "node_modules/@ethereumjs/common": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/@ethereumjs/common/-/common-3.2.0.tgz", - "integrity": "sha512-pksvzI0VyLgmuEF2FA/JR/4/y6hcPq8OUail3/AvycBaW1d5VSauOZzqGvJ3RTmR4MU35lWE8KseKOsEhrFRBA==", - "license": "MIT", - "dependencies": { - "@ethereumjs/util": "^8.1.0", - "crc-32": "^1.2.0" + "peerDependencies": { + "postcss": "^8.4" } }, - "node_modules/@ethereumjs/rlp": { + "node_modules/@csstools/postcss-scope-pseudo-class": { "version": "4.0.1", - "resolved": "https://registry.npmjs.org/@ethereumjs/rlp/-/rlp-4.0.1.tgz", - "integrity": "sha512-tqsQiBQDQdmPWE1xkkBq4rlSW5QZpLOUJ5RJh2/9fug+q9tnUhuZoVLk7s0scUIKTOzEtR72DFBXI4WiZcMpvw==", - "license": "MPL-2.0", - "bin": { - "rlp": "bin/rlp" - }, - "engines": { - "node": ">=14" - } - }, - "node_modules/@ethereumjs/tx": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/@ethereumjs/tx/-/tx-4.2.0.tgz", - "integrity": "sha512-1nc6VO4jtFd172BbSnTnDQVr9IYBFl1y4xPzZdtkrkKIncBCkdbgfdRV+MiTkJYAtTxvV12GRZLqBFT1PNK6Yw==", - "license": "MPL-2.0", + "resolved": "https://registry.npmjs.org/@csstools/postcss-scope-pseudo-class/-/postcss-scope-pseudo-class-4.0.1.tgz", + "integrity": "sha512-IMi9FwtH6LMNuLea1bjVMQAsUhFxJnyLSgOp/cpv5hrzWmrUYU5fm0EguNDIIOHUqzXode8F/1qkC/tEo/qN8Q==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "license": "MIT-0", "dependencies": { - "@ethereumjs/common": "^3.2.0", - "@ethereumjs/rlp": "^4.0.1", - "@ethereumjs/util": "^8.1.0", - "ethereum-cryptography": "^2.0.0" + "postcss-selector-parser": "^7.0.0" }, "engines": { - "node": ">=14" + "node": ">=18" + }, + "peerDependencies": { + "postcss": "^8.4" } }, - "node_modules/@ethereumjs/util": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/@ethereumjs/util/-/util-8.1.0.tgz", - "integrity": "sha512-zQ0IqbdX8FZ9aw11vP+dZkKDkS+kgIvQPHnSAXzP9pLu+Rfu3D3XEeLbicvoXJTYnhZiPmsZUxgdzXwNKxRPbA==", - "license": "MPL-2.0", + "node_modules/@csstools/postcss-scope-pseudo-class/node_modules/postcss-selector-parser": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-7.1.1.tgz", + "integrity": "sha512-orRsuYpJVw8LdAwqqLykBj9ecS5/cRHlI5+nvTo8LcCKmzDmqVORXtOIYEEQuL9D4BxtA1lm5isAqzQZCoQ6Eg==", + "license": "MIT", "dependencies": { - "@ethereumjs/rlp": "^4.0.1", - "ethereum-cryptography": "^2.0.0", - "micro-ftch": "^0.3.1" + "cssesc": "^3.0.0", + "util-deprecate": "^1.0.2" }, "engines": { - "node": ">=14" + "node": ">=4" } }, - "node_modules/@ethersproject/abi": { - "version": "5.8.0", - "resolved": "https://registry.npmjs.org/@ethersproject/abi/-/abi-5.8.0.tgz", - "integrity": "sha512-b9YS/43ObplgyV6SlyQsG53/vkSal0MNA1fskSC4mbnCMi8R+NkcH8K9FPYNESf6jUefBUniE4SOKms0E/KK1Q==", + "node_modules/@csstools/postcss-sign-functions": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/@csstools/postcss-sign-functions/-/postcss-sign-functions-1.1.4.tgz", + "integrity": "sha512-P97h1XqRPcfcJndFdG95Gv/6ZzxUBBISem0IDqPZ7WMvc/wlO+yU0c5D/OCpZ5TJoTt63Ok3knGk64N+o6L2Pg==", "funding": [ { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + "type": "github", + "url": "https://github.com/sponsors/csstools" }, { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" + "type": "opencollective", + "url": "https://opencollective.com/csstools" } ], - "license": "MIT", + "license": "MIT-0", "dependencies": { - "@ethersproject/address": "^5.8.0", - "@ethersproject/bignumber": "^5.8.0", - "@ethersproject/bytes": "^5.8.0", - "@ethersproject/constants": "^5.8.0", - "@ethersproject/hash": "^5.8.0", - "@ethersproject/keccak256": "^5.8.0", - "@ethersproject/logger": "^5.8.0", - "@ethersproject/properties": "^5.8.0", - "@ethersproject/strings": "^5.8.0" + "@csstools/css-calc": "^2.1.4", + "@csstools/css-parser-algorithms": "^3.0.5", + "@csstools/css-tokenizer": "^3.0.4" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "postcss": "^8.4" } }, - "node_modules/@ethersproject/abstract-provider": { - "version": "5.8.0", - "resolved": "https://registry.npmjs.org/@ethersproject/abstract-provider/-/abstract-provider-5.8.0.tgz", - "integrity": "sha512-wC9SFcmh4UK0oKuLJQItoQdzS/qZ51EJegK6EmAWlh+OptpQ/npECOR3QqECd8iGHC0RJb4WKbVdSfif4ammrg==", + "node_modules/@csstools/postcss-stepped-value-functions": { + "version": "4.0.9", + "resolved": "https://registry.npmjs.org/@csstools/postcss-stepped-value-functions/-/postcss-stepped-value-functions-4.0.9.tgz", + "integrity": "sha512-h9btycWrsex4dNLeQfyU3y3w40LMQooJWFMm/SK9lrKguHDcFl4VMkncKKoXi2z5rM9YGWbUQABI8BT2UydIcA==", "funding": [ { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + "type": "github", + "url": "https://github.com/sponsors/csstools" }, { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" + "type": "opencollective", + "url": "https://opencollective.com/csstools" } ], - "license": "MIT", + "license": "MIT-0", "dependencies": { - "@ethersproject/bignumber": "^5.8.0", - "@ethersproject/bytes": "^5.8.0", - "@ethersproject/logger": "^5.8.0", - "@ethersproject/networks": "^5.8.0", - "@ethersproject/properties": "^5.8.0", - "@ethersproject/transactions": "^5.8.0", - "@ethersproject/web": "^5.8.0" + "@csstools/css-calc": "^2.1.4", + "@csstools/css-parser-algorithms": "^3.0.5", + "@csstools/css-tokenizer": "^3.0.4" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "postcss": "^8.4" } }, - "node_modules/@ethersproject/abstract-signer": { - "version": "5.8.0", - "resolved": "https://registry.npmjs.org/@ethersproject/abstract-signer/-/abstract-signer-5.8.0.tgz", - "integrity": "sha512-N0XhZTswXcmIZQdYtUnd79VJzvEwXQw6PK0dTl9VoYrEBxxCPXqS0Eod7q5TNKRxe1/5WUMuR0u0nqTF/avdCA==", + "node_modules/@csstools/postcss-system-ui-font-family": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@csstools/postcss-system-ui-font-family/-/postcss-system-ui-font-family-1.0.0.tgz", + "integrity": "sha512-s3xdBvfWYfoPSBsikDXbuorcMG1nN1M6GdU0qBsGfcmNR0A/qhloQZpTxjA3Xsyrk1VJvwb2pOfiOT3at/DuIQ==", "funding": [ { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + "type": "github", + "url": "https://github.com/sponsors/csstools" }, { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" + "type": "opencollective", + "url": "https://opencollective.com/csstools" } ], - "license": "MIT", + "license": "MIT-0", "dependencies": { - "@ethersproject/abstract-provider": "^5.8.0", - "@ethersproject/bignumber": "^5.8.0", - "@ethersproject/bytes": "^5.8.0", - "@ethersproject/logger": "^5.8.0", - "@ethersproject/properties": "^5.8.0" + "@csstools/css-parser-algorithms": "^3.0.5", + "@csstools/css-tokenizer": "^3.0.4" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "postcss": "^8.4" } }, - "node_modules/@ethersproject/address": { - "version": "5.8.0", - "resolved": "https://registry.npmjs.org/@ethersproject/address/-/address-5.8.0.tgz", - "integrity": "sha512-GhH/abcC46LJwshoN+uBNoKVFPxUuZm6dA257z0vZkKmU1+t8xTn8oK7B9qrj8W2rFRMch4gbJl6PmVxjxBEBA==", + "node_modules/@csstools/postcss-text-decoration-shorthand": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/@csstools/postcss-text-decoration-shorthand/-/postcss-text-decoration-shorthand-4.0.3.tgz", + "integrity": "sha512-KSkGgZfx0kQjRIYnpsD7X2Om9BUXX/Kii77VBifQW9Ih929hK0KNjVngHDH0bFB9GmfWcR9vJYJJRvw/NQjkrA==", "funding": [ { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + "type": "github", + "url": "https://github.com/sponsors/csstools" }, { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" + "type": "opencollective", + "url": "https://opencollective.com/csstools" } ], - "license": "MIT", + "license": "MIT-0", "dependencies": { - "@ethersproject/bignumber": "^5.8.0", - "@ethersproject/bytes": "^5.8.0", - "@ethersproject/keccak256": "^5.8.0", - "@ethersproject/logger": "^5.8.0", - "@ethersproject/rlp": "^5.8.0" + "@csstools/color-helpers": "^5.1.0", + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "postcss": "^8.4" } }, - "node_modules/@ethersproject/base64": { - "version": "5.8.0", - "resolved": "https://registry.npmjs.org/@ethersproject/base64/-/base64-5.8.0.tgz", - "integrity": "sha512-lN0oIwfkYj9LbPx4xEkie6rAMJtySbpOAFXSDVQaBnAzYfB4X2Qr+FXJGxMoc3Bxp2Sm8OwvzMrywxyw0gLjIQ==", + "node_modules/@csstools/postcss-trigonometric-functions": { + "version": "4.0.9", + "resolved": "https://registry.npmjs.org/@csstools/postcss-trigonometric-functions/-/postcss-trigonometric-functions-4.0.9.tgz", + "integrity": "sha512-Hnh5zJUdpNrJqK9v1/E3BbrQhaDTj5YiX7P61TOvUhoDHnUmsNNxcDAgkQ32RrcWx9GVUvfUNPcUkn8R3vIX6A==", "funding": [ { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + "type": "github", + "url": "https://github.com/sponsors/csstools" }, { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" + "type": "opencollective", + "url": "https://opencollective.com/csstools" } ], - "license": "MIT", + "license": "MIT-0", "dependencies": { - "@ethersproject/bytes": "^5.8.0" + "@csstools/css-calc": "^2.1.4", + "@csstools/css-parser-algorithms": "^3.0.5", + "@csstools/css-tokenizer": "^3.0.4" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "postcss": "^8.4" } }, - "node_modules/@ethersproject/basex": { - "version": "5.8.0", - "resolved": "https://registry.npmjs.org/@ethersproject/basex/-/basex-5.8.0.tgz", - "integrity": "sha512-PIgTszMlDRmNwW9nhS6iqtVfdTAKosA7llYXNmGPw4YAI1PUyMv28988wAb41/gHF/WqGdoLv0erHaRcHRKW2Q==", + "node_modules/@csstools/postcss-unset-value": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@csstools/postcss-unset-value/-/postcss-unset-value-4.0.0.tgz", + "integrity": "sha512-cBz3tOCI5Fw6NIFEwU3RiwK6mn3nKegjpJuzCndoGq3BZPkUjnsq7uQmIeMNeMbMk7YD2MfKcgCpZwX5jyXqCA==", "funding": [ { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + "type": "github", + "url": "https://github.com/sponsors/csstools" }, { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" + "type": "opencollective", + "url": "https://opencollective.com/csstools" } ], - "license": "MIT", - "dependencies": { - "@ethersproject/bytes": "^5.8.0", - "@ethersproject/properties": "^5.8.0" + "license": "MIT-0", + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "postcss": "^8.4" } }, - "node_modules/@ethersproject/bignumber": { - "version": "5.8.0", - "resolved": "https://registry.npmjs.org/@ethersproject/bignumber/-/bignumber-5.8.0.tgz", - "integrity": "sha512-ZyaT24bHaSeJon2tGPKIiHszWjD/54Sz8t57Toch475lCLljC6MgPmxk7Gtzz+ddNN5LuHea9qhAe0x3D+uYPA==", + "node_modules/@csstools/utilities": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@csstools/utilities/-/utilities-2.0.0.tgz", + "integrity": "sha512-5VdOr0Z71u+Yp3ozOx8T11N703wIFGVRgOWbOZMKgglPJsWA54MRIoMNVMa7shUToIhx5J8vX4sOZgD2XiihiQ==", "funding": [ { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + "type": "github", + "url": "https://github.com/sponsors/csstools" }, { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" + "type": "opencollective", + "url": "https://opencollective.com/csstools" } ], - "license": "MIT", - "dependencies": { - "@ethersproject/bytes": "^5.8.0", - "@ethersproject/logger": "^5.8.0", - "bn.js": "^5.2.1" + "license": "MIT-0", + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "postcss": "^8.4" } }, - "node_modules/@ethersproject/bytes": { - "version": "5.8.0", - "resolved": "https://registry.npmjs.org/@ethersproject/bytes/-/bytes-5.8.0.tgz", - "integrity": "sha512-vTkeohgJVCPVHu5c25XWaWQOZ4v+DkGoC42/TS2ond+PARCxTJvgTFUNDZovyQ/uAQ4EcpqqowKydcdmRKjg7A==", - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], + "node_modules/@dabh/diagnostics": { + "version": "2.0.8", + "resolved": "https://registry.npmjs.org/@dabh/diagnostics/-/diagnostics-2.0.8.tgz", + "integrity": "sha512-R4MSXTVnuMzGD7bzHdW2ZhhdPC/igELENcq5IjEverBvq5hn1SXCWcsi6eSsdWP0/Ur+SItRRjAktmdoX/8R/Q==", "license": "MIT", "dependencies": { - "@ethersproject/logger": "^5.8.0" + "@so-ric/colorspace": "^1.1.6", + "enabled": "2.0.x", + "kuler": "^2.0.0" } }, - "node_modules/@ethersproject/constants": { - "version": "5.8.0", - "resolved": "https://registry.npmjs.org/@ethersproject/constants/-/constants-5.8.0.tgz", - "integrity": "sha512-wigX4lrf5Vu+axVTIvNsuL6YrV4O5AXl5ubcURKMEME5TnWBouUh0CDTWxZ2GpnRn1kcCgE7l8O5+VbV9QTTcg==", - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], - "license": "MIT", + "node_modules/@dfns/sdk": { + "version": "0.1.0-beta.5", + "resolved": "https://registry.npmjs.org/@dfns/sdk/-/sdk-0.1.0-beta.5.tgz", + "integrity": "sha512-NiV6BhoOckLLBJW4W3QyipvgMlVt5YNIc6F9RcRaB2cA3T9orL/wCP2itu5JPBhj6Q9p2pudpUtNEqJrScJNUA==", "dependencies": { - "@ethersproject/bignumber": "^5.8.0" + "buffer": "6.0.3", + "cross-fetch": "3.1.6", + "uuid": "9.0.0" } }, - "node_modules/@ethersproject/contracts": { - "version": "5.8.0", - "resolved": "https://registry.npmjs.org/@ethersproject/contracts/-/contracts-5.8.0.tgz", - "integrity": "sha512-0eFjGz9GtuAi6MZwhb4uvUM216F38xiuR0yYCjKJpNfSEy4HUM8hvqqBj9Jmm0IUz8l0xKEhWwLIhPgxNY0yvQ==", - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], - "license": "MIT", + "node_modules/@dfns/sdk-keysigner": { + "version": "0.1.0-beta.5", + "resolved": "https://registry.npmjs.org/@dfns/sdk-keysigner/-/sdk-keysigner-0.1.0-beta.5.tgz", + "integrity": "sha512-S0HLn+twNT+PMsps1/Nm653tSDgC9nrNAJTJfgwX2IY1VgaumQiC90pbBLd5413fkmnpeTzfi2p7CpG+7WQcmw==", "dependencies": { - "@ethersproject/abi": "^5.8.0", - "@ethersproject/abstract-provider": "^5.8.0", - "@ethersproject/abstract-signer": "^5.8.0", - "@ethersproject/address": "^5.8.0", - "@ethersproject/bignumber": "^5.8.0", - "@ethersproject/bytes": "^5.8.0", - "@ethersproject/constants": "^5.8.0", - "@ethersproject/logger": "^5.8.0", - "@ethersproject/properties": "^5.8.0", - "@ethersproject/transactions": "^5.8.0" + "buffer": "6.0.3", + "cross-fetch": "3.1.6", + "uuid": "9.0.0" + }, + "peerDependencies": { + "@dfns/sdk": "0.1.0-beta.5" } }, - "node_modules/@ethersproject/hash": { - "version": "5.8.0", - "resolved": "https://registry.npmjs.org/@ethersproject/hash/-/hash-5.8.0.tgz", - "integrity": "sha512-ac/lBcTbEWW/VGJij0CNSw/wPcw9bSRgCB0AIBz8CvED/jfvDoV9hsIIiWfvWmFEi8RcXtlNwp2jv6ozWOsooA==", - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], + "node_modules/@dfns/sdk-keysigner/node_modules/uuid": { + "version": "9.0.0", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-9.0.0.tgz", + "integrity": "sha512-MXcSTerfPa4uqyzStbRoTgt5XIe3x5+42+q1sDuy3R5MDk66URdLMOZe5aPX/SQd+kuYAh0FdP/pO28IkQyTeg==", "license": "MIT", - "dependencies": { - "@ethersproject/abstract-signer": "^5.8.0", - "@ethersproject/address": "^5.8.0", - "@ethersproject/base64": "^5.8.0", - "@ethersproject/bignumber": "^5.8.0", - "@ethersproject/bytes": "^5.8.0", - "@ethersproject/keccak256": "^5.8.0", - "@ethersproject/logger": "^5.8.0", - "@ethersproject/properties": "^5.8.0", - "@ethersproject/strings": "^5.8.0" + "bin": { + "uuid": "dist/bin/uuid" } }, - "node_modules/@ethersproject/hdnode": { - "version": "5.8.0", - "resolved": "https://registry.npmjs.org/@ethersproject/hdnode/-/hdnode-5.8.0.tgz", - "integrity": "sha512-4bK1VF6E83/3/Im0ERnnUeWOY3P1BZml4ZD3wcH8Ys0/d1h1xaFt6Zc+Dh9zXf9TapGro0T4wvO71UTCp3/uoA==", - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], + "node_modules/@dfns/sdk/node_modules/uuid": { + "version": "9.0.0", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-9.0.0.tgz", + "integrity": "sha512-MXcSTerfPa4uqyzStbRoTgt5XIe3x5+42+q1sDuy3R5MDk66URdLMOZe5aPX/SQd+kuYAh0FdP/pO28IkQyTeg==", "license": "MIT", - "dependencies": { - "@ethersproject/abstract-signer": "^5.8.0", - "@ethersproject/basex": "^5.8.0", - "@ethersproject/bignumber": "^5.8.0", - "@ethersproject/bytes": "^5.8.0", - "@ethersproject/logger": "^5.8.0", - "@ethersproject/pbkdf2": "^5.8.0", - "@ethersproject/properties": "^5.8.0", - "@ethersproject/sha2": "^5.8.0", - "@ethersproject/signing-key": "^5.8.0", - "@ethersproject/strings": "^5.8.0", - "@ethersproject/transactions": "^5.8.0", - "@ethersproject/wordlists": "^5.8.0" + "bin": { + "uuid": "dist/bin/uuid" } }, - "node_modules/@ethersproject/json-wallets": { - "version": "5.8.0", - "resolved": "https://registry.npmjs.org/@ethersproject/json-wallets/-/json-wallets-5.8.0.tgz", - "integrity": "sha512-HxblNck8FVUtNxS3VTEYJAcwiKYsBIF77W15HufqlBF9gGfhmYOJtYZp8fSDZtn9y5EaXTE87zDwzxRoTFk11w==", - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], - "license": "MIT", + "node_modules/@digitalbazaar/http-client": { + "version": "3.4.1", + "resolved": "https://registry.npmjs.org/@digitalbazaar/http-client/-/http-client-3.4.1.tgz", + "integrity": "sha512-Ahk1N+s7urkgj7WvvUND5f8GiWEPfUw0D41hdElaqLgu8wZScI8gdI0q+qWw5N1d35x7GCRH2uk9mi+Uzo9M3g==", + "license": "BSD-3-Clause", "dependencies": { - "@ethersproject/abstract-signer": "^5.8.0", - "@ethersproject/address": "^5.8.0", - "@ethersproject/bytes": "^5.8.0", - "@ethersproject/hdnode": "^5.8.0", - "@ethersproject/keccak256": "^5.8.0", - "@ethersproject/logger": "^5.8.0", - "@ethersproject/pbkdf2": "^5.8.0", - "@ethersproject/properties": "^5.8.0", - "@ethersproject/random": "^5.8.0", - "@ethersproject/strings": "^5.8.0", - "@ethersproject/transactions": "^5.8.0", - "aes-js": "3.0.0", - "scrypt-js": "3.0.1" + "ky": "^0.33.3", + "ky-universal": "^0.11.0", + "undici": "^5.21.2" + }, + "engines": { + "node": ">=14.0" } }, - "node_modules/@ethersproject/keccak256": { - "version": "5.8.0", - "resolved": "https://registry.npmjs.org/@ethersproject/keccak256/-/keccak256-5.8.0.tgz", - "integrity": "sha512-A1pkKLZSz8pDaQ1ftutZoaN46I6+jvuqugx5KYNeQOPqq+JZ0Txm7dlWesCHB5cndJSu5vP2VKptKf7cksERng==", - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], + "node_modules/@discoveryjs/json-ext": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/@discoveryjs/json-ext/-/json-ext-0.5.7.tgz", + "integrity": "sha512-dBVuXR082gk3jsFp7Rd/JI4kytwGHecnCoTtXFb7DB6CNHp4rg5k1bhg0nWdLGLnOV71lmDzGQaLMy8iPLY0pw==", "license": "MIT", - "dependencies": { - "@ethersproject/bytes": "^5.8.0", - "js-sha3": "0.8.0" + "engines": { + "node": ">=10.0.0" } }, - "node_modules/@ethersproject/logger": { - "version": "5.8.0", - "resolved": "https://registry.npmjs.org/@ethersproject/logger/-/logger-5.8.0.tgz", - "integrity": "sha512-Qe6knGmY+zPPWTC+wQrpitodgBfH7XoceCGL5bJVejmH+yCS3R8jJm8iiWuvWbG76RUmyEG53oqv6GMVWqunjA==", - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + "node_modules/@docsearch/core": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/@docsearch/core/-/core-4.3.1.tgz", + "integrity": "sha512-ktVbkePE+2h9RwqCUMbWXOoebFyDOxHqImAqfs+lC8yOU+XwEW4jgvHGJK079deTeHtdhUNj0PXHSnhJINvHzQ==", + "license": "MIT", + "peerDependencies": { + "@types/react": ">= 16.8.0 < 20.0.0", + "react": ">= 16.8.0 < 20.0.0", + "react-dom": ">= 16.8.0 < 20.0.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" + "react": { + "optional": true + }, + "react-dom": { + "optional": true } - ], + } + }, + "node_modules/@docsearch/css": { + "version": "4.3.2", + "resolved": "https://registry.npmjs.org/@docsearch/css/-/css-4.3.2.tgz", + "integrity": "sha512-K3Yhay9MgkBjJJ0WEL5MxnACModX9xuNt3UlQQkDEDZJZ0+aeWKtOkxHNndMRkMBnHdYvQjxkm6mdlneOtU1IQ==", "license": "MIT" }, - "node_modules/@ethersproject/networks": { - "version": "5.8.0", - "resolved": "https://registry.npmjs.org/@ethersproject/networks/-/networks-5.8.0.tgz", - "integrity": "sha512-egPJh3aPVAzbHwq8DD7Po53J4OUSsA1MjQp8Vf/OZPav5rlmWUaFLiq8cvQiGK0Z5K6LYzm29+VA/p4RL1FzNg==", - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + "node_modules/@docsearch/react": { + "version": "4.3.2", + "resolved": "https://registry.npmjs.org/@docsearch/react/-/react-4.3.2.tgz", + "integrity": "sha512-74SFD6WluwvgsOPqifYOviEEVwDxslxfhakTlra+JviaNcs7KK/rjsPj89kVEoQc9FUxRkAofaJnHIR7pb4TSQ==", + "license": "MIT", + "dependencies": { + "@ai-sdk/react": "^2.0.30", + "@algolia/autocomplete-core": "1.19.2", + "@docsearch/core": "4.3.1", + "@docsearch/css": "4.3.2", + "ai": "^5.0.30", + "algoliasearch": "^5.28.0", + "marked": "^16.3.0", + "zod": "^4.1.8" + }, + "peerDependencies": { + "@types/react": ">= 16.8.0 < 20.0.0", + "react": ">= 16.8.0 < 20.0.0", + "react-dom": ">= 16.8.0 < 20.0.0", + "search-insights": ">= 1 < 3" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" + "react": { + "optional": true + }, + "react-dom": { + "optional": true + }, + "search-insights": { + "optional": true } - ], + } + }, + "node_modules/@docsearch/react/node_modules/zod": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/zod/-/zod-4.2.1.tgz", + "integrity": "sha512-0wZ1IRqGGhMP76gLqz8EyfBXKk0J2qo2+H3fi4mcUP/KtTocoX08nmIAHl1Z2kJIZbZee8KOpBCSNPRgauucjw==", "license": "MIT", - "dependencies": { - "@ethersproject/logger": "^5.8.0" + "funding": { + "url": "https://github.com/sponsors/colinhacks" } }, - "node_modules/@ethersproject/pbkdf2": { - "version": "5.8.0", - "resolved": "https://registry.npmjs.org/@ethersproject/pbkdf2/-/pbkdf2-5.8.0.tgz", - "integrity": "sha512-wuHiv97BrzCmfEaPbUFpMjlVg/IDkZThp9Ri88BpjRleg4iePJaj2SW8AIyE8cXn5V1tuAaMj6lzvsGJkGWskg==", - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], + "node_modules/@docusaurus/babel": { + "version": "3.9.2", + "resolved": "https://registry.npmjs.org/@docusaurus/babel/-/babel-3.9.2.tgz", + "integrity": "sha512-GEANdi/SgER+L7Japs25YiGil/AUDnFFHaCGPBbundxoWtCkA2lmy7/tFmgED4y1htAy6Oi4wkJEQdGssnw9MA==", + "license": "MIT", + "dependencies": { + "@babel/core": "^7.25.9", + "@babel/generator": "^7.25.9", + "@babel/plugin-syntax-dynamic-import": "^7.8.3", + "@babel/plugin-transform-runtime": "^7.25.9", + "@babel/preset-env": "^7.25.9", + "@babel/preset-react": "^7.25.9", + "@babel/preset-typescript": "^7.25.9", + "@babel/runtime": "^7.25.9", + "@babel/runtime-corejs3": "^7.25.9", + "@babel/traverse": "^7.25.9", + "@docusaurus/logger": "3.9.2", + "@docusaurus/utils": "3.9.2", + "babel-plugin-dynamic-import-node": "^2.3.3", + "fs-extra": "^11.1.1", + "tslib": "^2.6.0" + }, + "engines": { + "node": ">=20.0" + } + }, + "node_modules/@docusaurus/babel/node_modules/fs-extra": { + "version": "11.3.2", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-11.3.2.tgz", + "integrity": "sha512-Xr9F6z6up6Ws+NjzMCZc6WXg2YFRlrLP9NQDO3VQrWrfiojdhS56TzueT88ze0uBdCTwEIhQ3ptnmKeWGFAe0A==", "license": "MIT", "dependencies": { - "@ethersproject/bytes": "^5.8.0", - "@ethersproject/sha2": "^5.8.0" + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + }, + "engines": { + "node": ">=14.14" } }, - "node_modules/@ethersproject/properties": { - "version": "5.8.0", - "resolved": "https://registry.npmjs.org/@ethersproject/properties/-/properties-5.8.0.tgz", - "integrity": "sha512-PYuiEoQ+FMaZZNGrStmN7+lWjlsoufGIHdww7454FIaGdbe/p5rnaCXTr5MtBYl3NkeoVhHZuyzChPeGeKIpQw==", - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], + "node_modules/@docusaurus/babel/node_modules/jsonfile": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.2.0.tgz", + "integrity": "sha512-FGuPw30AdOIUTRMC2OMRtQV+jkVj2cfPqSeWXv1NEAJ1qZ5zb1X6z1mFhbfOB/iy3ssJCD+3KuZ8r8C3uVFlAg==", "license": "MIT", "dependencies": { - "@ethersproject/logger": "^5.8.0" + "universalify": "^2.0.0" + }, + "optionalDependencies": { + "graceful-fs": "^4.1.6" } }, - "node_modules/@ethersproject/providers": { - "version": "5.8.0", - "resolved": "https://registry.npmjs.org/@ethersproject/providers/-/providers-5.8.0.tgz", - "integrity": "sha512-3Il3oTzEx3o6kzcg9ZzbE+oCZYyY+3Zh83sKkn4s1DZfTUjIegHnN2Cm0kbn9YFy45FDVcuCLLONhU7ny0SsCw==", - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], + "node_modules/@docusaurus/babel/node_modules/universalify": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.1.tgz", + "integrity": "sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==", "license": "MIT", - "dependencies": { - "@ethersproject/abstract-provider": "^5.8.0", - "@ethersproject/abstract-signer": "^5.8.0", - "@ethersproject/address": "^5.8.0", - "@ethersproject/base64": "^5.8.0", - "@ethersproject/basex": "^5.8.0", - "@ethersproject/bignumber": "^5.8.0", - "@ethersproject/bytes": "^5.8.0", - "@ethersproject/constants": "^5.8.0", - "@ethersproject/hash": "^5.8.0", - "@ethersproject/logger": "^5.8.0", - "@ethersproject/networks": "^5.8.0", - "@ethersproject/properties": "^5.8.0", - "@ethersproject/random": "^5.8.0", - "@ethersproject/rlp": "^5.8.0", - "@ethersproject/sha2": "^5.8.0", - "@ethersproject/strings": "^5.8.0", - "@ethersproject/transactions": "^5.8.0", - "@ethersproject/web": "^5.8.0", - "bech32": "1.1.4", - "ws": "8.18.0" + "engines": { + "node": ">= 10.0.0" } }, - "node_modules/@ethersproject/random": { - "version": "5.8.0", - "resolved": "https://registry.npmjs.org/@ethersproject/random/-/random-5.8.0.tgz", - "integrity": "sha512-E4I5TDl7SVqyg4/kkA/qTfuLWAQGXmSOgYyO01So8hLfwgKvYK5snIlzxJMk72IFdG/7oh8yuSqY2KX7MMwg+A==", - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" + "node_modules/@docusaurus/bundler": { + "version": "3.9.2", + "resolved": "https://registry.npmjs.org/@docusaurus/bundler/-/bundler-3.9.2.tgz", + "integrity": "sha512-ZOVi6GYgTcsZcUzjblpzk3wH1Fya2VNpd5jtHoCCFcJlMQ1EYXZetfAnRHLcyiFeBABaI1ltTYbOBtH/gahGVA==", + "license": "MIT", + "dependencies": { + "@babel/core": "^7.25.9", + "@docusaurus/babel": "3.9.2", + "@docusaurus/cssnano-preset": "3.9.2", + "@docusaurus/logger": "3.9.2", + "@docusaurus/types": "3.9.2", + "@docusaurus/utils": "3.9.2", + "babel-loader": "^9.2.1", + "clean-css": "^5.3.3", + "copy-webpack-plugin": "^11.0.0", + "css-loader": "^6.11.0", + "css-minimizer-webpack-plugin": "^5.0.1", + "cssnano": "^6.1.2", + "file-loader": "^6.2.0", + "html-minifier-terser": "^7.2.0", + "mini-css-extract-plugin": "^2.9.2", + "null-loader": "^4.0.1", + "postcss": "^8.5.4", + "postcss-loader": "^7.3.4", + "postcss-preset-env": "^10.2.1", + "terser-webpack-plugin": "^5.3.9", + "tslib": "^2.6.0", + "url-loader": "^4.1.1", + "webpack": "^5.95.0", + "webpackbar": "^6.0.1" + }, + "engines": { + "node": ">=20.0" + }, + "peerDependencies": { + "@docusaurus/faster": "*" + }, + "peerDependenciesMeta": { + "@docusaurus/faster": { + "optional": true } - ], + } + }, + "node_modules/@docusaurus/bundler/node_modules/ajv": { + "version": "8.17.1", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.17.1.tgz", + "integrity": "sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g==", "license": "MIT", "dependencies": { - "@ethersproject/bytes": "^5.8.0", - "@ethersproject/logger": "^5.8.0" + "fast-deep-equal": "^3.1.3", + "fast-uri": "^3.0.1", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" } }, - "node_modules/@ethersproject/rlp": { - "version": "5.8.0", - "resolved": "https://registry.npmjs.org/@ethersproject/rlp/-/rlp-5.8.0.tgz", - "integrity": "sha512-LqZgAznqDbiEunaUvykH2JAoXTT9NV0Atqk8rQN9nx9SEgThA/WMx5DnW8a9FOufo//6FZOCHZ+XiClzgbqV9Q==", - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], + "node_modules/@docusaurus/bundler/node_modules/ajv-keywords": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-5.1.0.tgz", + "integrity": "sha512-YCS/JNFAUyr5vAuhk1DWm1CBxRHW9LbJ2ozWeemrIqpbsqKjHVxYPyi5GC0rjZIT5JxJ3virVTS8wk4i/Z+krw==", "license": "MIT", "dependencies": { - "@ethersproject/bytes": "^5.8.0", - "@ethersproject/logger": "^5.8.0" + "fast-deep-equal": "^3.1.3" + }, + "peerDependencies": { + "ajv": "^8.8.2" } }, - "node_modules/@ethersproject/sha2": { - "version": "5.8.0", - "resolved": "https://registry.npmjs.org/@ethersproject/sha2/-/sha2-5.8.0.tgz", - "integrity": "sha512-dDOUrXr9wF/YFltgTBYS0tKslPEKr6AekjqDW2dbn1L1xmjGR+9GiKu4ajxovnrDbwxAKdHjW8jNcwfz8PAz4A==", - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], - "license": "MIT", + "node_modules/@docusaurus/bundler/node_modules/es-module-lexer": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-2.0.0.tgz", + "integrity": "sha512-5POEcUuZybH7IdmGsD8wlf0AI55wMecM9rVBTI/qEAy2c1kTOm3DjFYjrBdI2K3BaJjJYfYFeRtM0t9ssnRuxw==", + "license": "MIT" + }, + "node_modules/@docusaurus/bundler/node_modules/eslint-scope": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", + "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==", + "license": "BSD-2-Clause", "dependencies": { - "@ethersproject/bytes": "^5.8.0", - "@ethersproject/logger": "^5.8.0", - "hash.js": "1.1.7" + "esrecurse": "^4.3.0", + "estraverse": "^4.1.1" + }, + "engines": { + "node": ">=8.0.0" } }, - "node_modules/@ethersproject/signing-key": { - "version": "5.8.0", - "resolved": "https://registry.npmjs.org/@ethersproject/signing-key/-/signing-key-5.8.0.tgz", - "integrity": "sha512-LrPW2ZxoigFi6U6aVkFN/fa9Yx/+4AtIUe4/HACTvKJdhm0eeb107EVCIQcrLZkxaSIgc/eCrX8Q1GtbH+9n3w==", - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], + "node_modules/@docusaurus/bundler/node_modules/estraverse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", + "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", + "license": "BSD-2-Clause", + "engines": { + "node": ">=4.0" + } + }, + "node_modules/@docusaurus/bundler/node_modules/json-schema-traverse": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", + "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", + "license": "MIT" + }, + "node_modules/@docusaurus/bundler/node_modules/mime-db": { + "version": "1.52.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", + "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", "license": "MIT", - "dependencies": { - "@ethersproject/bytes": "^5.8.0", - "@ethersproject/logger": "^5.8.0", - "@ethersproject/properties": "^5.8.0", - "bn.js": "^5.2.1", - "elliptic": "6.6.1", - "hash.js": "1.1.7" + "engines": { + "node": ">= 0.6" } }, - "node_modules/@ethersproject/solidity": { - "version": "5.8.0", - "resolved": "https://registry.npmjs.org/@ethersproject/solidity/-/solidity-5.8.0.tgz", - "integrity": "sha512-4CxFeCgmIWamOHwYN9d+QWGxye9qQLilpgTU0XhYs1OahkclF+ewO+3V1U0mvpiuQxm5EHHmv8f7ClVII8EHsA==", - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], + "node_modules/@docusaurus/bundler/node_modules/mime-types": { + "version": "2.1.35", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", + "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", "license": "MIT", "dependencies": { - "@ethersproject/bignumber": "^5.8.0", - "@ethersproject/bytes": "^5.8.0", - "@ethersproject/keccak256": "^5.8.0", - "@ethersproject/logger": "^5.8.0", - "@ethersproject/sha2": "^5.8.0", - "@ethersproject/strings": "^5.8.0" + "mime-db": "1.52.0" + }, + "engines": { + "node": ">= 0.6" } }, - "node_modules/@ethersproject/strings": { - "version": "5.8.0", - "resolved": "https://registry.npmjs.org/@ethersproject/strings/-/strings-5.8.0.tgz", - "integrity": "sha512-qWEAk0MAvl0LszjdfnZ2uC8xbR2wdv4cDabyHiBh3Cldq/T8dPH3V4BbBsAYJUeonwD+8afVXld274Ls+Y1xXg==", - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], + "node_modules/@docusaurus/bundler/node_modules/schema-utils": { + "version": "4.3.3", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-4.3.3.tgz", + "integrity": "sha512-eflK8wEtyOE6+hsaRVPxvUKYCpRgzLqDTb8krvAsRIwOGlHoSgYLgBXoubGgLd2fT41/OUYdb48v4k4WWHQurA==", "license": "MIT", "dependencies": { - "@ethersproject/bytes": "^5.8.0", - "@ethersproject/constants": "^5.8.0", - "@ethersproject/logger": "^5.8.0" + "@types/json-schema": "^7.0.9", + "ajv": "^8.9.0", + "ajv-formats": "^2.1.1", + "ajv-keywords": "^5.1.0" + }, + "engines": { + "node": ">= 10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" } }, - "node_modules/@ethersproject/transactions": { - "version": "5.8.0", - "resolved": "https://registry.npmjs.org/@ethersproject/transactions/-/transactions-5.8.0.tgz", - "integrity": "sha512-UglxSDjByHG0TuU17bDfCemZ3AnKO2vYrL5/2n2oXvKzvb7Cz+W9gOWXKARjp2URVwcWlQlPOEQyAviKwT4AHg==", - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], + "node_modules/@docusaurus/bundler/node_modules/webpack": { + "version": "5.104.1", + "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.104.1.tgz", + "integrity": "sha512-Qphch25abbMNtekmEGJmeRUhLDbe+QfiWTiqpKYkpCOWY64v9eyl+KRRLmqOFA2AvKPpc9DC6+u2n76tQLBoaA==", "license": "MIT", "dependencies": { - "@ethersproject/address": "^5.8.0", - "@ethersproject/bignumber": "^5.8.0", - "@ethersproject/bytes": "^5.8.0", - "@ethersproject/constants": "^5.8.0", - "@ethersproject/keccak256": "^5.8.0", - "@ethersproject/logger": "^5.8.0", - "@ethersproject/properties": "^5.8.0", - "@ethersproject/rlp": "^5.8.0", - "@ethersproject/signing-key": "^5.8.0" + "@types/eslint-scope": "^3.7.7", + "@types/estree": "^1.0.8", + "@types/json-schema": "^7.0.15", + "@webassemblyjs/ast": "^1.14.1", + "@webassemblyjs/wasm-edit": "^1.14.1", + "@webassemblyjs/wasm-parser": "^1.14.1", + "acorn": "^8.15.0", + "acorn-import-phases": "^1.0.3", + "browserslist": "^4.28.1", + "chrome-trace-event": "^1.0.2", + "enhanced-resolve": "^5.17.4", + "es-module-lexer": "^2.0.0", + "eslint-scope": "5.1.1", + "events": "^3.2.0", + "glob-to-regexp": "^0.4.1", + "graceful-fs": "^4.2.11", + "json-parse-even-better-errors": "^2.3.1", + "loader-runner": "^4.3.1", + "mime-types": "^2.1.27", + "neo-async": "^2.6.2", + "schema-utils": "^4.3.3", + "tapable": "^2.3.0", + "terser-webpack-plugin": "^5.3.16", + "watchpack": "^2.4.4", + "webpack-sources": "^3.3.3" + }, + "bin": { + "webpack": "bin/webpack.js" + }, + "engines": { + "node": ">=10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependenciesMeta": { + "webpack-cli": { + "optional": true + } } }, - "node_modules/@ethersproject/units": { - "version": "5.8.0", - "resolved": "https://registry.npmjs.org/@ethersproject/units/-/units-5.8.0.tgz", - "integrity": "sha512-lxq0CAnc5kMGIiWW4Mr041VT8IhNM+Pn5T3haO74XZWFulk7wH1Gv64HqE96hT4a7iiNMdOCFEBgaxWuk8ETKQ==", - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], + "node_modules/@docusaurus/core": { + "version": "3.9.2", + "resolved": "https://registry.npmjs.org/@docusaurus/core/-/core-3.9.2.tgz", + "integrity": "sha512-HbjwKeC+pHUFBfLMNzuSjqFE/58+rLVKmOU3lxQrpsxLBOGosYco/Q0GduBb0/jEMRiyEqjNT/01rRdOMWq5pw==", "license": "MIT", "dependencies": { - "@ethersproject/bignumber": "^5.8.0", - "@ethersproject/constants": "^5.8.0", - "@ethersproject/logger": "^5.8.0" + "@docusaurus/babel": "3.9.2", + "@docusaurus/bundler": "3.9.2", + "@docusaurus/logger": "3.9.2", + "@docusaurus/mdx-loader": "3.9.2", + "@docusaurus/utils": "3.9.2", + "@docusaurus/utils-common": "3.9.2", + "@docusaurus/utils-validation": "3.9.2", + "boxen": "^6.2.1", + "chalk": "^4.1.2", + "chokidar": "^3.5.3", + "cli-table3": "^0.6.3", + "combine-promises": "^1.1.0", + "commander": "^5.1.0", + "core-js": "^3.31.1", + "detect-port": "^1.5.1", + "escape-html": "^1.0.3", + "eta": "^2.2.0", + "eval": "^0.1.8", + "execa": "5.1.1", + "fs-extra": "^11.1.1", + "html-tags": "^3.3.1", + "html-webpack-plugin": "^5.6.0", + "leven": "^3.1.0", + "lodash": "^4.17.21", + "open": "^8.4.0", + "p-map": "^4.0.0", + "prompts": "^2.4.2", + "react-helmet-async": "npm:@slorber/react-helmet-async@1.3.0", + "react-loadable": "npm:@docusaurus/react-loadable@6.0.0", + "react-loadable-ssr-addon-v5-slorber": "^1.0.1", + "react-router": "^5.3.4", + "react-router-config": "^5.1.1", + "react-router-dom": "^5.3.4", + "semver": "^7.5.4", + "serve-handler": "^6.1.6", + "tinypool": "^1.0.2", + "tslib": "^2.6.0", + "update-notifier": "^6.0.2", + "webpack": "^5.95.0", + "webpack-bundle-analyzer": "^4.10.2", + "webpack-dev-server": "^5.2.2", + "webpack-merge": "^6.0.1" + }, + "bin": { + "docusaurus": "bin/docusaurus.mjs" + }, + "engines": { + "node": ">=20.0" + }, + "peerDependencies": { + "@mdx-js/react": "^3.0.0", + "react": "^18.0.0 || ^19.0.0", + "react-dom": "^18.0.0 || ^19.0.0" } }, - "node_modules/@ethersproject/wallet": { - "version": "5.8.0", - "resolved": "https://registry.npmjs.org/@ethersproject/wallet/-/wallet-5.8.0.tgz", - "integrity": "sha512-G+jnzmgg6UxurVKRKvw27h0kvG75YKXZKdlLYmAHeF32TGUzHkOFd7Zn6QHOTYRFWnfjtSSFjBowKo7vfrXzPA==", - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], + "node_modules/@docusaurus/core/node_modules/ajv": { + "version": "8.17.1", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.17.1.tgz", + "integrity": "sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g==", "license": "MIT", "dependencies": { - "@ethersproject/abstract-provider": "^5.8.0", - "@ethersproject/abstract-signer": "^5.8.0", - "@ethersproject/address": "^5.8.0", - "@ethersproject/bignumber": "^5.8.0", - "@ethersproject/bytes": "^5.8.0", - "@ethersproject/hash": "^5.8.0", - "@ethersproject/hdnode": "^5.8.0", - "@ethersproject/json-wallets": "^5.8.0", - "@ethersproject/keccak256": "^5.8.0", - "@ethersproject/logger": "^5.8.0", - "@ethersproject/properties": "^5.8.0", - "@ethersproject/random": "^5.8.0", - "@ethersproject/signing-key": "^5.8.0", - "@ethersproject/transactions": "^5.8.0", - "@ethersproject/wordlists": "^5.8.0" + "fast-deep-equal": "^3.1.3", + "fast-uri": "^3.0.1", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" } }, - "node_modules/@ethersproject/web": { - "version": "5.8.0", - "resolved": "https://registry.npmjs.org/@ethersproject/web/-/web-5.8.0.tgz", - "integrity": "sha512-j7+Ksi/9KfGviws6Qtf9Q7KCqRhpwrYKQPs+JBA/rKVFF/yaWLHJEH3zfVP2plVu+eys0d2DlFmhoQJayFewcw==", - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], + "node_modules/@docusaurus/core/node_modules/ajv-keywords": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-5.1.0.tgz", + "integrity": "sha512-YCS/JNFAUyr5vAuhk1DWm1CBxRHW9LbJ2ozWeemrIqpbsqKjHVxYPyi5GC0rjZIT5JxJ3virVTS8wk4i/Z+krw==", "license": "MIT", "dependencies": { - "@ethersproject/base64": "^5.8.0", - "@ethersproject/bytes": "^5.8.0", - "@ethersproject/logger": "^5.8.0", - "@ethersproject/properties": "^5.8.0", - "@ethersproject/strings": "^5.8.0" + "fast-deep-equal": "^3.1.3" + }, + "peerDependencies": { + "ajv": "^8.8.2" } }, - "node_modules/@ethersproject/wordlists": { - "version": "5.8.0", - "resolved": "https://registry.npmjs.org/@ethersproject/wordlists/-/wordlists-5.8.0.tgz", - "integrity": "sha512-2df9bbXicZws2Sb5S6ET493uJ0Z84Fjr3pC4tu/qlnZERibZCeUVuqdtt+7Tv9xxhUxHoIekIA7avrKUWHrezg==", - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], + "node_modules/@docusaurus/core/node_modules/ansi-regex": { + "version": "6.2.2", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.2.2.tgz", + "integrity": "sha512-Bq3SmSpyFHaWjPk8If9yc6svM8c56dB5BAtW4Qbw5jHTwwXXcTLoRMkpDJp6VL0XzlWaCHTXrkFURMYmD0sLqg==", "license": "MIT", - "dependencies": { - "@ethersproject/bytes": "^5.8.0", - "@ethersproject/hash": "^5.8.0", - "@ethersproject/logger": "^5.8.0", - "@ethersproject/properties": "^5.8.0", - "@ethersproject/strings": "^5.8.0" + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-regex?sponsor=1" } }, - "node_modules/@faker-js/faker": { - "version": "9.8.0", - "resolved": "https://registry.npmjs.org/@faker-js/faker/-/faker-9.8.0.tgz", - "integrity": "sha512-U9wpuSrJC93jZBxx/Qq2wPjCuYISBueyVUGK7qqdmj7r/nxaxwW8AQDCLeRO7wZnjj94sh3p246cAYjUKuqgfg==", - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/fakerjs" - } - ], + "node_modules/@docusaurus/core/node_modules/ansi-styles": { + "version": "6.2.3", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.3.tgz", + "integrity": "sha512-4Dj6M28JB+oAH8kFkTLUo+a2jwOFkuqb3yucU0CANcRRUbxS0cP0nZYCGjcc3BNXwRIsUVmDGgzawme7zvJHvg==", "license": "MIT", "engines": { - "node": ">=18.0.0", - "npm": ">=9.0.0" + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/@fastify/busboy": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/@fastify/busboy/-/busboy-2.1.1.tgz", - "integrity": "sha512-vBZP4NlzfOlerQTnba4aqZoMhE/a9HY7HRqoOPaETQcSQuWEIyZMHGfVu6w9wGtGK5fED5qRs2DteVCjOH60sA==", + "node_modules/@docusaurus/core/node_modules/boxen": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/boxen/-/boxen-6.2.1.tgz", + "integrity": "sha512-H4PEsJXfFI/Pt8sjDWbHlQPx4zL/bvSQjcilJmaulGt5mLDorHOHpmdXAJcBcmru7PhYSp/cDMWRko4ZUMFkSw==", "license": "MIT", + "dependencies": { + "ansi-align": "^3.0.1", + "camelcase": "^6.2.0", + "chalk": "^4.1.2", + "cli-boxes": "^3.0.0", + "string-width": "^5.0.1", + "type-fest": "^2.5.0", + "widest-line": "^4.0.1", + "wrap-ansi": "^8.0.1" + }, "engines": { - "node": ">=14" + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/@fireblocks/fireblocks-web3-provider": { - "version": "1.2.5", - "resolved": "https://registry.npmjs.org/@fireblocks/fireblocks-web3-provider/-/fireblocks-web3-provider-1.2.5.tgz", - "integrity": "sha512-d/Uk+IxFXRGhR8V9FinBTuY99P5F2t9kvB5EsSJ7UVJf4W0uRrtX4sAbf4KuTKGhFFvpJNx8xhUEOhBO8adJfQ==", + "node_modules/@docusaurus/core/node_modules/camelcase": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz", + "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==", "license": "MIT", - "dependencies": { - "@ethersproject/units": "^5.7.0", - "debug": "^4.3.4", - "ethers": "^5.7.2", - "fireblocks-sdk": "^3.1.4", - "web3-providers-http": "1.8.0" + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/@fireblocks/fireblocks-web3-provider/node_modules/axios": { - "version": "0.27.2", - "resolved": "https://registry.npmjs.org/axios/-/axios-0.27.2.tgz", - "integrity": "sha512-t+yRIyySRTp/wua5xEr+z1q60QmLq8ABsS5O9Me1AsE5dfKqgnCFzwiCZZ/cGNd1lq4/7akDWMxdhVlucjmnOQ==", + "node_modules/@docusaurus/core/node_modules/cli-boxes": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/cli-boxes/-/cli-boxes-3.0.0.tgz", + "integrity": "sha512-/lzGpEWL/8PfI0BmBOPRwp0c/wFNX1RdUML3jK/RcSBA9T8mZDdQpqYBKtCFTOfQbwPqWEOpjqW+Fnayc0969g==", "license": "MIT", - "dependencies": { - "follow-redirects": "^1.14.9", - "form-data": "^4.0.0" + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/@fireblocks/fireblocks-web3-provider/node_modules/fireblocks-sdk": { - "version": "3.1.4", - "resolved": "https://registry.npmjs.org/fireblocks-sdk/-/fireblocks-sdk-3.1.4.tgz", - "integrity": "sha512-R0Mg4ZkGAhNSRq7evjteeEYjdpH6KuJo4t/TCKebP/EH2YLwXr24BlGKoRslJpWVepKNI0XWE3cX41VKgPiZ5A==", + "node_modules/@docusaurus/core/node_modules/commander": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-5.1.0.tgz", + "integrity": "sha512-P0CysNDQ7rtVw4QIQtm+MRxV66vKFSvlsQvGYXZWR3qFU0jlMKHZZZgw8e+8DSah4UDKMqnknRDQz+xuQXQ/Zg==", "license": "MIT", + "engines": { + "node": ">= 6" + } + }, + "node_modules/@docusaurus/core/node_modules/emoji-regex": { + "version": "9.2.2", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", + "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==", + "license": "MIT" + }, + "node_modules/@docusaurus/core/node_modules/es-module-lexer": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-2.0.0.tgz", + "integrity": "sha512-5POEcUuZybH7IdmGsD8wlf0AI55wMecM9rVBTI/qEAy2c1kTOm3DjFYjrBdI2K3BaJjJYfYFeRtM0t9ssnRuxw==", + "license": "MIT" + }, + "node_modules/@docusaurus/core/node_modules/eslint-scope": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", + "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==", + "license": "BSD-2-Clause", "dependencies": { - "axios": "^0.27.2", - "jsonwebtoken": "9.0.0", - "platform": "^1.3.6", - "qs": "^6.11.0", - "query-string": "^7.1.3", - "uuid": "^8.3.2" + "esrecurse": "^4.3.0", + "estraverse": "^4.1.1" + }, + "engines": { + "node": ">=8.0.0" } }, - "node_modules/@fireblocks/fireblocks-web3-provider/node_modules/uuid": { - "version": "8.3.2", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", - "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==", - "license": "MIT", - "bin": { - "uuid": "dist/bin/uuid" + "node_modules/@docusaurus/core/node_modules/estraverse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", + "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", + "license": "BSD-2-Clause", + "engines": { + "node": ">=4.0" } }, - "node_modules/@floating-ui/core": { - "version": "1.7.3", - "resolved": "https://registry.npmjs.org/@floating-ui/core/-/core-1.7.3.tgz", - "integrity": "sha512-sGnvb5dmrJaKEZ+LDIpguvdX3bDlEllmv4/ClQ9awcmCZrlx5jQyyMWFM5kBI+EyNOCDDiKk8il0zeuX3Zlg/w==", + "node_modules/@docusaurus/core/node_modules/fs-extra": { + "version": "11.3.2", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-11.3.2.tgz", + "integrity": "sha512-Xr9F6z6up6Ws+NjzMCZc6WXg2YFRlrLP9NQDO3VQrWrfiojdhS56TzueT88ze0uBdCTwEIhQ3ptnmKeWGFAe0A==", "license": "MIT", "dependencies": { - "@floating-ui/utils": "^0.2.10" + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + }, + "engines": { + "node": ">=14.14" } }, - "node_modules/@floating-ui/dom": { - "version": "1.7.4", - "resolved": "https://registry.npmjs.org/@floating-ui/dom/-/dom-1.7.4.tgz", - "integrity": "sha512-OOchDgh4F2CchOX94cRVqhvy7b3AFb+/rQXyswmzmGakRfkMgoWVjfnLWkRirfLEfuD4ysVW16eXzwt3jHIzKA==", + "node_modules/@docusaurus/core/node_modules/history": { + "version": "4.10.1", + "resolved": "https://registry.npmjs.org/history/-/history-4.10.1.tgz", + "integrity": "sha512-36nwAD620w12kuzPAsyINPWJqlNbij+hpK1k9XRloDtym8mxzGYl2c17LnV6IAGB2Dmg4tEa7G7DlawS0+qjew==", "license": "MIT", "dependencies": { - "@floating-ui/core": "^1.7.3", - "@floating-ui/utils": "^0.2.10" + "@babel/runtime": "^7.1.2", + "loose-envify": "^1.2.0", + "resolve-pathname": "^3.0.0", + "tiny-invariant": "^1.0.2", + "tiny-warning": "^1.0.0", + "value-equal": "^1.0.1" } }, - "node_modules/@floating-ui/utils": { - "version": "0.2.10", - "resolved": "https://registry.npmjs.org/@floating-ui/utils/-/utils-0.2.10.tgz", - "integrity": "sha512-aGTxbpbg8/b5JfU1HXSrbH3wXZuLPJcNEcZQFMxLs3oSzgtVu6nFPkbbGGUvBcUjKV2YyB9Wxxabo+HEH9tcRQ==", + "node_modules/@docusaurus/core/node_modules/isarray": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", + "integrity": "sha512-D2S+3GLxWH+uhrNEcoh/fnmYeP8E8/zHl644d/jdA0g2uyXvy3sb0qxotE+ne0LtccHknQzWwZEzhak7oJ0COQ==", "license": "MIT" }, - "node_modules/@golevelup/ts-jest": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/@golevelup/ts-jest/-/ts-jest-0.4.0.tgz", - "integrity": "sha512-ehgllV/xU8PC+yVyEUtTzhiSQKsr7k5Jz74B6dtCaVJz7/Vo7JiaACsCLvD7/iATlJUAEqvBson0OHewD3JDzQ==", - "dev": true, + "node_modules/@docusaurus/core/node_modules/json-schema-traverse": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", + "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", "license": "MIT" }, - "node_modules/@grpc/grpc-js": { - "version": "1.14.0", - "resolved": "https://registry.npmjs.org/@grpc/grpc-js/-/grpc-js-1.14.0.tgz", - "integrity": "sha512-N8Jx6PaYzcTRNzirReJCtADVoq4z7+1KQ4E70jTg/koQiMoUSN1kbNjPOqpPbhMFhfU1/l7ixspPl8dNY+FoUg==", - "license": "Apache-2.0", + "node_modules/@docusaurus/core/node_modules/jsonfile": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.2.0.tgz", + "integrity": "sha512-FGuPw30AdOIUTRMC2OMRtQV+jkVj2cfPqSeWXv1NEAJ1qZ5zb1X6z1mFhbfOB/iy3ssJCD+3KuZ8r8C3uVFlAg==", + "license": "MIT", "dependencies": { - "@grpc/proto-loader": "^0.8.0", - "@js-sdsl/ordered-map": "^4.4.2" + "universalify": "^2.0.0" }, + "optionalDependencies": { + "graceful-fs": "^4.1.6" + } + }, + "node_modules/@docusaurus/core/node_modules/mime-db": { + "version": "1.52.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", + "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", + "license": "MIT", "engines": { - "node": ">=12.10.0" + "node": ">= 0.6" } }, - "node_modules/@grpc/proto-loader": { - "version": "0.8.0", - "resolved": "https://registry.npmjs.org/@grpc/proto-loader/-/proto-loader-0.8.0.tgz", - "integrity": "sha512-rc1hOQtjIWGxcxpb9aHAfLpIctjEnsDehj0DAiVfBlmT84uvR0uUtN2hEi/ecvWVjXUGf5qPF4qEgiLOx1YIMQ==", - "license": "Apache-2.0", + "node_modules/@docusaurus/core/node_modules/mime-types": { + "version": "2.1.35", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", + "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", + "license": "MIT", "dependencies": { - "lodash.camelcase": "^4.3.0", - "long": "^5.0.0", - "protobufjs": "^7.5.3", - "yargs": "^17.7.2" - }, - "bin": { - "proto-loader-gen-types": "build/bin/proto-loader-gen-types.js" + "mime-db": "1.52.0" }, "engines": { - "node": ">=6" + "node": ">= 0.6" } }, - "node_modules/@grpc/proto-loader/node_modules/long": { - "version": "5.3.2", - "resolved": "https://registry.npmjs.org/long/-/long-5.3.2.tgz", - "integrity": "sha512-mNAgZ1GmyNhD7AuqnTG3/VQ26o760+ZYBPKjPvugO8+nLbYfX6TVpJPseBvopbdY+qpZ/lKUnmEc1LeZYS3QAA==", - "license": "Apache-2.0" - }, - "node_modules/@grpc/proto-loader/node_modules/protobufjs": { - "version": "7.5.4", - "resolved": "https://registry.npmjs.org/protobufjs/-/protobufjs-7.5.4.tgz", - "integrity": "sha512-CvexbZtbov6jW2eXAvLukXjXUW1TzFaivC46BpWc/3BpcCysb5Vffu+B3XHMm8lVEuy2Mm4XGex8hBSg1yapPg==", - "hasInstallScript": true, - "license": "BSD-3-Clause", + "node_modules/@docusaurus/core/node_modules/open": { + "version": "8.4.2", + "resolved": "https://registry.npmjs.org/open/-/open-8.4.2.tgz", + "integrity": "sha512-7x81NCL719oNbsq/3mh+hVrAWmFuEYUqrq/Iw3kUzH8ReypT9QQ0BLoJS7/G9k6N81XjW4qHWtjWwe/9eLy1EQ==", + "license": "MIT", "dependencies": { - "@protobufjs/aspromise": "^1.1.2", - "@protobufjs/base64": "^1.1.2", - "@protobufjs/codegen": "^2.0.4", - "@protobufjs/eventemitter": "^1.1.0", - "@protobufjs/fetch": "^1.1.0", - "@protobufjs/float": "^1.0.2", - "@protobufjs/inquire": "^1.1.0", - "@protobufjs/path": "^1.1.2", - "@protobufjs/pool": "^1.1.0", - "@protobufjs/utf8": "^1.1.0", - "@types/node": ">=13.7.0", - "long": "^5.0.0" + "define-lazy-prop": "^2.0.0", + "is-docker": "^2.1.1", + "is-wsl": "^2.2.0" }, "engines": { - "node": ">=12.0.0" + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/@hapi/hoek": { - "version": "9.3.0", - "resolved": "https://registry.npmjs.org/@hapi/hoek/-/hoek-9.3.0.tgz", - "integrity": "sha512-/c6rf4UJlmHlC9b5BaNvzAcFv7HZ2QHaV0D4/HNlBdvFnvQq8RI4kYdhyPCl7Xj+oWvTWQ8ujhqS53LIgAe6KQ==", - "license": "BSD-3-Clause" - }, - "node_modules/@hapi/topo": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/@hapi/topo/-/topo-5.1.0.tgz", - "integrity": "sha512-foQZKJig7Ob0BMAYBfcJk8d77QtOe7Wo4ox7ff1lQYoNNAb6jwcY1ncdoy2e9wQZzvNy7ODZCYJkK8kzmcAnAg==", - "license": "BSD-3-Clause", + "node_modules/@docusaurus/core/node_modules/path-to-regexp": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-1.9.0.tgz", + "integrity": "sha512-xIp7/apCFJuUHdDLWe8O1HIkb0kQrOMb/0u6FXQjemHn/ii5LrIzU6bdECnsiTF/GjZkMEKg1xdiZwNqDYlZ6g==", + "license": "MIT", "dependencies": { - "@hapi/hoek": "^9.0.0" + "isarray": "0.0.1" } }, - "node_modules/@hashgraph/asset-tokenization-contracts": { - "resolved": "packages/ats/contracts", - "link": true - }, - "node_modules/@hashgraph/asset-tokenization-dapp": { - "resolved": "apps/ats/web", - "link": true - }, - "node_modules/@hashgraph/asset-tokenization-sdk": { - "resolved": "packages/ats/sdk", - "link": true + "node_modules/@docusaurus/core/node_modules/react-is": { + "version": "16.13.1", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz", + "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==", + "license": "MIT" }, - "node_modules/@hashgraph/cryptography": { - "version": "1.8.0", - "resolved": "https://registry.npmjs.org/@hashgraph/cryptography/-/cryptography-1.8.0.tgz", - "integrity": "sha512-tkBbGd8zU2dNCwlxCX47cS+VhRosh8mEbFfjvjzjcuW2KxdVsdV6GshyVtXeFxHMijo5kAcxd2CoubhCreNdaQ==", - "license": "Apache-2.0", + "node_modules/@docusaurus/core/node_modules/react-router": { + "version": "5.3.4", + "resolved": "https://registry.npmjs.org/react-router/-/react-router-5.3.4.tgz", + "integrity": "sha512-Ys9K+ppnJah3QuaRiLxk+jDWOR1MekYQrlytiXxC1RyfbdsZkS5pvKAzCCr031xHixZwpnsYNT5xysdFHQaYsA==", + "license": "MIT", "dependencies": { - "@noble/curves": "^1.8.1", - "asn1js": "^3.0.6", - "bignumber.js": "^9.1.1", - "bn.js": "^5.2.1", - "buffer": "^6.0.3", - "crypto-js": "^4.2.0", - "forge-light": "1.1.4", - "js-base64": "^3.7.7", - "react-native-get-random-values": "^1.11.0", - "spark-md5": "^3.0.2", - "tweetnacl": "^1.0.3", - "utf8": "^3.0.0" - }, - "engines": { - "node": ">=12.0.0" + "@babel/runtime": "^7.12.13", + "history": "^4.9.0", + "hoist-non-react-statics": "^3.1.0", + "loose-envify": "^1.3.1", + "path-to-regexp": "^1.7.0", + "prop-types": "^15.6.2", + "react-is": "^16.6.0", + "tiny-invariant": "^1.0.2", + "tiny-warning": "^1.0.0" }, - "peerDependenciesMeta": { - "expo-crypto": { - "optional": true - } + "peerDependencies": { + "react": ">=15" } }, - "node_modules/@hashgraph/cryptography/node_modules/@react-native/virtualized-lists": { - "version": "0.81.4", - "resolved": "https://registry.npmjs.org/@react-native/virtualized-lists/-/virtualized-lists-0.81.4.tgz", - "integrity": "sha512-hBM+rMyL6Wm1Q4f/WpqGsaCojKSNUBqAXLABNGoWm1vabZ7cSnARMxBvA/2vo3hLcoR4v7zDK8tkKm9+O0LjVA==", + "node_modules/@docusaurus/core/node_modules/react-router-dom": { + "version": "5.3.4", + "resolved": "https://registry.npmjs.org/react-router-dom/-/react-router-dom-5.3.4.tgz", + "integrity": "sha512-m4EqFMHv/Ih4kpcBCONHbkT68KoAeHN4p3lAGoNryfHi0dMy0kCzEZakiKRsvg5wHZ/JLrLW8o8KomWiz/qbYQ==", "license": "MIT", - "peer": true, "dependencies": { - "invariant": "^2.2.4", - "nullthrows": "^1.1.1" - }, - "engines": { - "node": ">= 20.19.4" + "@babel/runtime": "^7.12.13", + "history": "^4.9.0", + "loose-envify": "^1.3.1", + "prop-types": "^15.6.2", + "react-router": "5.3.4", + "tiny-invariant": "^1.0.2", + "tiny-warning": "^1.0.0" }, "peerDependencies": { - "@types/react": "^19.1.0", - "react": "*", - "react-native": "*" - }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - } + "react": ">=15" } }, - "node_modules/@hashgraph/cryptography/node_modules/commander": { - "version": "12.1.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-12.1.0.tgz", - "integrity": "sha512-Vw8qHK3bZM9y/P10u3Vib8o/DdkvA2OtPtZvD871QKjy74Wj1WSKFILMPRPSdUSx5RFK1arlJzEtA4PkFgnbuA==", + "node_modules/@docusaurus/core/node_modules/schema-utils": { + "version": "4.3.3", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-4.3.3.tgz", + "integrity": "sha512-eflK8wEtyOE6+hsaRVPxvUKYCpRgzLqDTb8krvAsRIwOGlHoSgYLgBXoubGgLd2fT41/OUYdb48v4k4WWHQurA==", "license": "MIT", - "peer": true, + "dependencies": { + "@types/json-schema": "^7.0.9", + "ajv": "^8.9.0", + "ajv-formats": "^2.1.1", + "ajv-keywords": "^5.1.0" + }, "engines": { - "node": ">=18" + "node": ">= 10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" } }, - "node_modules/@hashgraph/cryptography/node_modules/glob": { - "version": "7.2.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", - "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", - "deprecated": "Glob versions prior to v9 are no longer supported", + "node_modules/@docusaurus/core/node_modules/semver": { + "version": "7.7.3", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.3.tgz", + "integrity": "sha512-SdsKMrI9TdgjdweUSR9MweHA4EJ8YxHn8DFaDisvhVlUOe4BF1tLD7GAj0lIqWVl+dPb/rExr0Btby5loQm20Q==", "license": "ISC", - "peer": true, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@docusaurus/core/node_modules/string-width": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz", + "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==", + "license": "MIT", "dependencies": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.1.1", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" + "eastasianwidth": "^0.2.0", + "emoji-regex": "^9.2.2", + "strip-ansi": "^7.0.1" }, "engines": { - "node": "*" + "node": ">=12" }, "funding": { - "url": "https://github.com/sponsors/isaacs" + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/@hashgraph/cryptography/node_modules/memoize-one": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/memoize-one/-/memoize-one-5.2.1.tgz", - "integrity": "sha512-zYiwtZUcYyXKo/np96AGZAckk+FWWsUdJ3cHGGmld7+AhvcWmQyGCYUh1hc4Q/pkOhb65dQR/pqCyK0cOaHz4Q==", + "node_modules/@docusaurus/core/node_modules/strip-ansi": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.2.tgz", + "integrity": "sha512-gmBGslpoQJtgnMAvOVqGZpEz9dyoKTCzy2nfz/n8aIFhN/jCE/rCmcxabB6jOOHV+0WNnylOxaxBQPSvcWklhA==", "license": "MIT", - "peer": true + "dependencies": { + "ansi-regex": "^6.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/strip-ansi?sponsor=1" + } }, - "node_modules/@hashgraph/cryptography/node_modules/react": { - "version": "19.2.0", - "resolved": "https://registry.npmjs.org/react/-/react-19.2.0.tgz", - "integrity": "sha512-tmbWg6W31tQLeB5cdIBOicJDJRR2KzXsV7uSK9iNfLWQ5bIZfxuPEHp7M8wiHyHnn0DD1i7w3Zmin0FtkrwoCQ==", + "node_modules/@docusaurus/core/node_modules/tinypool": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/tinypool/-/tinypool-1.1.1.tgz", + "integrity": "sha512-Zba82s87IFq9A9XmjiX5uZA/ARWDrB03OHlq+Vw1fSdt0I+4/Kutwy8BP4Y/y/aORMo61FQ0vIb5j44vSo5Pkg==", "license": "MIT", - "peer": true, "engines": { - "node": ">=0.10.0" + "node": "^18.0.0 || >=20.0.0" } }, - "node_modules/@hashgraph/cryptography/node_modules/react-native": { - "version": "0.81.4", - "resolved": "https://registry.npmjs.org/react-native/-/react-native-0.81.4.tgz", - "integrity": "sha512-bt5bz3A/+Cv46KcjV0VQa+fo7MKxs17RCcpzjftINlen4ZDUl0I6Ut+brQ2FToa5oD0IB0xvQHfmsg2EDqsZdQ==", + "node_modules/@docusaurus/core/node_modules/type-fest": { + "version": "2.19.0", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-2.19.0.tgz", + "integrity": "sha512-RAH822pAdBgcNMAfWnCBU3CFZcfZ/i1eZjwFU/dsLKumyuuP3niueg2UAukXYF0E2AAoc82ZSSf9J0WQBinzHA==", + "license": "(MIT OR CC0-1.0)", + "engines": { + "node": ">=12.20" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@docusaurus/core/node_modules/universalify": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.1.tgz", + "integrity": "sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==", + "license": "MIT", + "engines": { + "node": ">= 10.0.0" + } + }, + "node_modules/@docusaurus/core/node_modules/webpack": { + "version": "5.104.1", + "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.104.1.tgz", + "integrity": "sha512-Qphch25abbMNtekmEGJmeRUhLDbe+QfiWTiqpKYkpCOWY64v9eyl+KRRLmqOFA2AvKPpc9DC6+u2n76tQLBoaA==", "license": "MIT", - "peer": true, "dependencies": { - "@jest/create-cache-key-function": "^29.7.0", - "@react-native/assets-registry": "0.81.4", - "@react-native/codegen": "0.81.4", - "@react-native/community-cli-plugin": "0.81.4", - "@react-native/gradle-plugin": "0.81.4", - "@react-native/js-polyfills": "0.81.4", - "@react-native/normalize-colors": "0.81.4", - "@react-native/virtualized-lists": "0.81.4", - "abort-controller": "^3.0.0", - "anser": "^1.4.9", - "ansi-regex": "^5.0.0", - "babel-jest": "^29.7.0", - "babel-plugin-syntax-hermes-parser": "0.29.1", - "base64-js": "^1.5.1", - "commander": "^12.0.0", - "flow-enums-runtime": "^0.0.6", - "glob": "^7.1.1", - "invariant": "^2.2.4", - "jest-environment-node": "^29.7.0", - "memoize-one": "^5.0.0", - "metro-runtime": "^0.83.1", - "metro-source-map": "^0.83.1", - "nullthrows": "^1.1.1", - "pretty-format": "^29.7.0", - "promise": "^8.3.0", - "react-devtools-core": "^6.1.5", - "react-refresh": "^0.14.0", - "regenerator-runtime": "^0.13.2", - "scheduler": "0.26.0", - "semver": "^7.1.3", - "stacktrace-parser": "^0.1.10", - "whatwg-fetch": "^3.0.0", - "ws": "^6.2.3", - "yargs": "^17.6.2" + "@types/eslint-scope": "^3.7.7", + "@types/estree": "^1.0.8", + "@types/json-schema": "^7.0.15", + "@webassemblyjs/ast": "^1.14.1", + "@webassemblyjs/wasm-edit": "^1.14.1", + "@webassemblyjs/wasm-parser": "^1.14.1", + "acorn": "^8.15.0", + "acorn-import-phases": "^1.0.3", + "browserslist": "^4.28.1", + "chrome-trace-event": "^1.0.2", + "enhanced-resolve": "^5.17.4", + "es-module-lexer": "^2.0.0", + "eslint-scope": "5.1.1", + "events": "^3.2.0", + "glob-to-regexp": "^0.4.1", + "graceful-fs": "^4.2.11", + "json-parse-even-better-errors": "^2.3.1", + "loader-runner": "^4.3.1", + "mime-types": "^2.1.27", + "neo-async": "^2.6.2", + "schema-utils": "^4.3.3", + "tapable": "^2.3.0", + "terser-webpack-plugin": "^5.3.16", + "watchpack": "^2.4.4", + "webpack-sources": "^3.3.3" }, "bin": { - "react-native": "cli.js" + "webpack": "bin/webpack.js" }, "engines": { - "node": ">= 20.19.4" + "node": ">=10.13.0" }, - "peerDependencies": { - "@types/react": "^19.1.0", - "react": "^19.1.0" + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" }, "peerDependenciesMeta": { - "@types/react": { + "webpack-cli": { "optional": true } } }, - "node_modules/@hashgraph/cryptography/node_modules/react-native-get-random-values": { - "version": "1.11.0", - "resolved": "https://registry.npmjs.org/react-native-get-random-values/-/react-native-get-random-values-1.11.0.tgz", - "integrity": "sha512-4BTbDbRmS7iPdhYLRcz3PGFIpFJBwNZg9g42iwa2P6FOv9vZj/xJc678RZXnLNZzd0qd7Q3CCF6Yd+CU2eoXKQ==", + "node_modules/@docusaurus/core/node_modules/widest-line": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/widest-line/-/widest-line-4.0.1.tgz", + "integrity": "sha512-o0cyEG0e8GPzT4iGHphIOh0cJOV8fivsXxddQasHPHfoZf1ZexrfeA21w2NaEN1RHE+fXlfISmOE8R9N3u3Qig==", "license": "MIT", "dependencies": { - "fast-base64-decode": "^1.0.0" + "string-width": "^5.0.1" }, - "peerDependencies": { - "react-native": ">=0.56" + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/@hashgraph/cryptography/node_modules/react-refresh": { - "version": "0.14.2", - "resolved": "https://registry.npmjs.org/react-refresh/-/react-refresh-0.14.2.tgz", - "integrity": "sha512-jCvmsr+1IUSMUyzOkRcvnVbX3ZYC6g9TDrDbFuFmRDq7PD4yaGbLKNQL6k2jnArV8hjYxh7hVhAZB6s9HDGpZA==", + "node_modules/@docusaurus/core/node_modules/wrap-ansi": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-8.1.0.tgz", + "integrity": "sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==", "license": "MIT", - "peer": true, + "dependencies": { + "ansi-styles": "^6.1.0", + "string-width": "^5.0.1", + "strip-ansi": "^7.0.1" + }, "engines": { - "node": ">=0.10.0" + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" } }, - "node_modules/@hashgraph/cryptography/node_modules/scheduler": { - "version": "0.26.0", - "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.26.0.tgz", - "integrity": "sha512-NlHwttCI/l5gCPR3D1nNXtWABUmBwvZpEQiD4IXSbIDq8BzLIK/7Ir5gTFSGZDUu37K5cMNp0hFtzO38sC7gWA==", + "node_modules/@docusaurus/cssnano-preset": { + "version": "3.9.2", + "resolved": "https://registry.npmjs.org/@docusaurus/cssnano-preset/-/cssnano-preset-3.9.2.tgz", + "integrity": "sha512-8gBKup94aGttRduABsj7bpPFTX7kbwu+xh3K9NMCF5K4bWBqTFYW+REKHF6iBVDHRJ4grZdIPbvkiHd/XNKRMQ==", "license": "MIT", - "peer": true - }, - "node_modules/@hashgraph/cryptography/node_modules/semver": { - "version": "7.7.2", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.2.tgz", - "integrity": "sha512-RF0Fw+rO5AMf9MAyaRXI4AV0Ulj5lMHqVxxdSgiVbixSCXoEmmX/jk0CuJw4+3SqroYO9VoUh+HcuJivvtJemA==", - "license": "ISC", - "peer": true, - "bin": { - "semver": "bin/semver.js" + "dependencies": { + "cssnano-preset-advanced": "^6.1.2", + "postcss": "^8.5.4", + "postcss-sort-media-queries": "^5.2.0", + "tslib": "^2.6.0" }, "engines": { - "node": ">=10" + "node": ">=20.0" } }, - "node_modules/@hashgraph/cryptography/node_modules/ws": { - "version": "6.2.3", - "resolved": "https://registry.npmjs.org/ws/-/ws-6.2.3.tgz", - "integrity": "sha512-jmTjYU0j60B+vHey6TfR3Z7RD61z/hmxBS3VMSGIrroOWXQEneK1zNuotOUrGyBHQj0yrpsLHPWtigEFd13ndA==", + "node_modules/@docusaurus/logger": { + "version": "3.9.2", + "resolved": "https://registry.npmjs.org/@docusaurus/logger/-/logger-3.9.2.tgz", + "integrity": "sha512-/SVCc57ByARzGSU60c50rMyQlBuMIJCjcsJlkphxY6B0GV4UH3tcA1994N8fFfbJ9kX3jIBe/xg3XP5qBtGDbA==", "license": "MIT", - "peer": true, "dependencies": { - "async-limiter": "~1.0.0" + "chalk": "^4.1.2", + "tslib": "^2.6.0" + }, + "engines": { + "node": ">=20.0" } }, - "node_modules/@hashgraph/hedera-custodians-integration": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/@hashgraph/hedera-custodians-integration/-/hedera-custodians-integration-1.4.1.tgz", - "integrity": "sha512-YNNn22EZi9qzgePO9NGkF8mBh7FmFS/oMWhJHKQ88fvxBBTtiU/Kahb5DU+ABd3pr35/MDTzHD6hqhM/55VQpg==", - "cpu": [ - "x86_64", - "x64", - "arm", - "arm64" - ], - "license": "ISC", - "os": [ - "darwin", - "linux", - "win32" - ], + "node_modules/@docusaurus/mdx-loader": { + "version": "3.9.2", + "resolved": "https://registry.npmjs.org/@docusaurus/mdx-loader/-/mdx-loader-3.9.2.tgz", + "integrity": "sha512-wiYoGwF9gdd6rev62xDU8AAM8JuLI/hlwOtCzMmYcspEkzecKrP8J8X+KpYnTlACBUUtXNJpSoCwFWJhLRevzQ==", + "license": "MIT", "dependencies": { - "@aws-sdk/client-kms": "^3.624.0", - "@dfns/sdk": "0.1.0-beta.5", - "@dfns/sdk-keysigner": "0.1.0-beta.5", - "@fireblocks/fireblocks-web3-provider": "1.2.5", - "asn1-ts": "^8.0.2", - "dotenv": "16.0.3", - "ethereum-cryptography": "^2.2.0", - "fireblocks-sdk": "5.11.0", - "reflect-metadata": "0.1.13", - "tsyringe": "4.7.0" + "@docusaurus/logger": "3.9.2", + "@docusaurus/utils": "3.9.2", + "@docusaurus/utils-validation": "3.9.2", + "@mdx-js/mdx": "^3.0.0", + "@slorber/remark-comment": "^1.0.0", + "escape-html": "^1.0.3", + "estree-util-value-to-estree": "^3.0.1", + "file-loader": "^6.2.0", + "fs-extra": "^11.1.1", + "image-size": "^2.0.2", + "mdast-util-mdx": "^3.0.0", + "mdast-util-to-string": "^4.0.0", + "rehype-raw": "^7.0.0", + "remark-directive": "^3.0.0", + "remark-emoji": "^4.0.0", + "remark-frontmatter": "^5.0.0", + "remark-gfm": "^4.0.0", + "stringify-object": "^3.3.0", + "tslib": "^2.6.0", + "unified": "^11.0.3", + "unist-util-visit": "^5.0.0", + "url-loader": "^4.1.1", + "vfile": "^6.0.1", + "webpack": "^5.88.1" + }, + "engines": { + "node": ">=20.0" }, - "engines": { - "node": ">=16", - "npm": ">=8" + "peerDependencies": { + "react": "^18.0.0 || ^19.0.0", + "react-dom": "^18.0.0 || ^19.0.0" } }, - "node_modules/@hashgraph/hedera-custodians-integration/node_modules/dotenv": { - "version": "16.0.3", - "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-16.0.3.tgz", - "integrity": "sha512-7GO6HghkA5fYG9TYnNxi14/7K9f5occMlp3zXAuSxn7CKCxt9xbNWG7yF8hTCSUchlfWSe3uLmlPfigevRItzQ==", - "license": "BSD-2-Clause", - "engines": { - "node": ">=12" + "node_modules/@docusaurus/mdx-loader/node_modules/@types/mdast": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/@types/mdast/-/mdast-4.0.4.tgz", + "integrity": "sha512-kGaNbPh1k7AFzgpud/gMdvIm5xuECykRR+JnWKQno9TAXVa6WIVCGTPvYGekIDL4uwCZQSYbUxNBSb1aUo79oA==", + "license": "MIT", + "dependencies": { + "@types/unist": "*" } }, - "node_modules/@hashgraph/hedera-custodians-integration/node_modules/reflect-metadata": { - "version": "0.1.13", - "resolved": "https://registry.npmjs.org/reflect-metadata/-/reflect-metadata-0.1.13.tgz", - "integrity": "sha512-Ts1Y/anZELhSsjMcU605fU9RE4Oi3p5ORujwbIKXfWa+0Zxs510Qrmrce5/Jowq3cHSZSJqBjypxmHarc+vEWg==", - "license": "Apache-2.0" - }, - "node_modules/@hashgraph/hedera-custodians-integration/node_modules/tslib": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", - "license": "0BSD" + "node_modules/@docusaurus/mdx-loader/node_modules/bail": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/bail/-/bail-2.0.2.tgz", + "integrity": "sha512-0xO6mYd7JB2YesxDKplafRpsiOzPt9V02ddPCLbY1xYGPOX24NTyN50qnUxgCPcSoYMhKpAuBTjQoRZCAkUDRw==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } }, - "node_modules/@hashgraph/hedera-custodians-integration/node_modules/tsyringe": { - "version": "4.7.0", - "resolved": "https://registry.npmjs.org/tsyringe/-/tsyringe-4.7.0.tgz", - "integrity": "sha512-ncFDM1jTLsok4ejMvSW5jN1VGPQD48y2tfAR0pdptWRKYX4bkbqPt92k7KJ5RFJ1KV36JEs/+TMh7I6OUgj74g==", + "node_modules/@docusaurus/mdx-loader/node_modules/fs-extra": { + "version": "11.3.2", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-11.3.2.tgz", + "integrity": "sha512-Xr9F6z6up6Ws+NjzMCZc6WXg2YFRlrLP9NQDO3VQrWrfiojdhS56TzueT88ze0uBdCTwEIhQ3ptnmKeWGFAe0A==", "license": "MIT", "dependencies": { - "tslib": "^1.9.3" + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" }, "engines": { - "node": ">= 6.0.0" - } - }, - "node_modules/@hashgraph/hedera-wallet-connect": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/@hashgraph/hedera-wallet-connect/-/hedera-wallet-connect-1.3.1.tgz", - "integrity": "sha512-0NrMJ1Wn9JQuOUiTRrZqv9qEcTzbYKF26Xaq/1IexJM2bRqfMPy1Z6tAZXQEfHy9tw6k5wnzXXo/j65BXkapJg==", - "license": "Apache-2.0", - "dependencies": { - "@hashgraph/sdk": "^2.40.0", - "@walletconnect/qrcode-modal": "^1.8.0", - "@walletconnect/types": "^2.11.0", - "@walletconnect/utils": "^2.11.0", - "@walletconnect/web3wallet": "^1.9.3" + "node": ">=14.14" } }, - "node_modules/@hashgraph/proto": { - "version": "2.19.0", - "resolved": "https://registry.npmjs.org/@hashgraph/proto/-/proto-2.19.0.tgz", - "integrity": "sha512-ghlkyPb8JJx9ACGVna84vOtMqQkisBZ+EGeQe+FT+ci7qlhdf/ecRGvMw/uanSE5yviOFBqJeH0c2SzVIqpydQ==", - "license": "Apache-2.0", - "dependencies": { - "long": "^5.2.3", - "protobufjs": "7.2.5" + "node_modules/@docusaurus/mdx-loader/node_modules/image-size": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/image-size/-/image-size-2.0.2.tgz", + "integrity": "sha512-IRqXKlaXwgSMAMtpNzZa1ZAe8m+Sa1770Dhk8VkSsP9LS+iHD62Zd8FQKs8fbPiagBE7BzoFX23cxFnwshpV6w==", + "license": "MIT", + "bin": { + "image-size": "bin/image-size.js" }, "engines": { - "node": ">=10.0.0" + "node": ">=16.x" } }, - "node_modules/@hashgraph/proto/node_modules/long": { - "version": "5.3.2", - "resolved": "https://registry.npmjs.org/long/-/long-5.3.2.tgz", - "integrity": "sha512-mNAgZ1GmyNhD7AuqnTG3/VQ26o760+ZYBPKjPvugO8+nLbYfX6TVpJPseBvopbdY+qpZ/lKUnmEc1LeZYS3QAA==", - "license": "Apache-2.0" - }, - "node_modules/@hashgraph/sdk": { - "version": "2.66.0", - "resolved": "https://registry.npmjs.org/@hashgraph/sdk/-/sdk-2.66.0.tgz", - "integrity": "sha512-A5dCSxb7pzYhgd7zhkOJ7lJRwg29MEcfkq0B/Nqb5j2Swdee6v+DCse7xkB978dmHnfrG6UM64LZX0qMWw8Uiw==", - "license": "Apache-2.0", - "dependencies": { - "@ethersproject/abi": "^5.8.0", - "@ethersproject/bignumber": "^5.8.0", - "@ethersproject/bytes": "^5.8.0", - "@ethersproject/rlp": "^5.8.0", - "@grpc/grpc-js": "^1.12.6", - "@hashgraph/cryptography": "1.8.0", - "@hashgraph/proto": "2.19.0", - "bignumber.js": "^9.1.1", - "bn.js": "^5.1.1", - "crypto-js": "^4.2.0", - "js-base64": "^3.7.4", - "long": "^5.3.1", - "pino": "^9.6.0", - "pino-pretty": "^13.0.0", - "protobufjs": "7.2.5", - "rfc4648": "^1.5.3", - "utf8": "^3.0.0" - }, + "node_modules/@docusaurus/mdx-loader/node_modules/is-plain-obj": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-4.1.0.tgz", + "integrity": "sha512-+Pgi+vMuUNkJyExiMBt5IlFoMyKnr5zhJ4Uspz58WOhBF5QoIZkFyNHIbBAtHwzVAgk5RtndVNsDRN61/mmDqg==", + "license": "MIT", "engines": { - "node": ">=18.0.0" + "node": ">=12" }, - "peerDependencies": { - "bn.js": "^5.2.1" + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/@hashgraph/sdk/node_modules/long": { - "version": "5.3.2", - "resolved": "https://registry.npmjs.org/long/-/long-5.3.2.tgz", - "integrity": "sha512-mNAgZ1GmyNhD7AuqnTG3/VQ26o760+ZYBPKjPvugO8+nLbYfX6TVpJPseBvopbdY+qpZ/lKUnmEc1LeZYS3QAA==", - "license": "Apache-2.0" - }, - "node_modules/@hashgraph/smart-contracts": { - "version": "0.10.1", - "resolved": "git+ssh://git@github.com/hashgraph/hedera-smart-contracts.git#4e8ba723cbe2d4b8338fc98d1e289a3c5b79477c", - "dev": true, - "license": "Apache-2.0", + "node_modules/@docusaurus/mdx-loader/node_modules/jsonfile": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.2.0.tgz", + "integrity": "sha512-FGuPw30AdOIUTRMC2OMRtQV+jkVj2cfPqSeWXv1NEAJ1qZ5zb1X6z1mFhbfOB/iy3ssJCD+3KuZ8r8C3uVFlAg==", + "license": "MIT", "dependencies": { - "@nomicfoundation/solidity-analyzer": "^0.1.2", - "bn.js": "^5.2.1", - "dotenv": "^16.4.5", - "elliptic": "^6.5.7", - "mcl-wasm": "^1.4.0" + "universalify": "^2.0.0" + }, + "optionalDependencies": { + "graceful-fs": "^4.1.6" } }, - "node_modules/@humanwhocodes/config-array": { - "version": "0.11.14", - "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.11.14.tgz", - "integrity": "sha512-3T8LkOmg45BV5FICb15QQMsyUSWrQ8AygVfC7ZG32zOalnqrilm018ZVCw0eapXux8FtA33q8PSRSstjee3jSg==", - "deprecated": "Use @eslint/config-array instead", - "dev": true, - "license": "Apache-2.0", + "node_modules/@docusaurus/mdx-loader/node_modules/mdast-util-to-string": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/mdast-util-to-string/-/mdast-util-to-string-4.0.0.tgz", + "integrity": "sha512-0H44vDimn51F0YwvxSJSm0eCDOJTRlmN0R1yBh4HLj9wiV1Dn0QoXGbvFAWj2hSItVTlCmBF1hqKlIyUBVFLPg==", + "license": "MIT", "dependencies": { - "@humanwhocodes/object-schema": "^2.0.2", - "debug": "^4.3.1", - "minimatch": "^3.0.5" + "@types/mdast": "^4.0.0" }, - "engines": { - "node": ">=10.10.0" + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/@humanwhocodes/module-importer": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz", - "integrity": "sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==", - "dev": true, - "license": "Apache-2.0", - "engines": { - "node": ">=12.22" - }, + "node_modules/@docusaurus/mdx-loader/node_modules/trough": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/trough/-/trough-2.2.0.tgz", + "integrity": "sha512-tmMpK00BjZiUyVyvrBK7knerNgmgvcV/KLVyuma/SC+TQN167GrMRciANTz09+k3zW8L8t60jWO1GpfkZdjTaw==", + "license": "MIT", "funding": { "type": "github", - "url": "https://github.com/sponsors/nzakas" + "url": "https://github.com/sponsors/wooorm" } }, - "node_modules/@humanwhocodes/object-schema": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-2.0.3.tgz", - "integrity": "sha512-93zYdMES/c1D69yZiKDBj0V24vqNzB/koF26KPaagAfd3P/4gUlh3Dys5ogAK+Exi9QyzlD8x/08Zt7wIKcDcA==", - "deprecated": "Use @eslint/object-schema instead", - "dev": true, - "license": "BSD-3-Clause" - }, - "node_modules/@inquirer/external-editor": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/@inquirer/external-editor/-/external-editor-1.0.2.tgz", - "integrity": "sha512-yy9cOoBnx58TlsPrIxauKIFQTiyH+0MK4e97y4sV9ERbI+zDxw7i2hxHLCIEGIE/8PPvDxGhgzIOTSOWcs6/MQ==", - "dev": true, + "node_modules/@docusaurus/mdx-loader/node_modules/unified": { + "version": "11.0.5", + "resolved": "https://registry.npmjs.org/unified/-/unified-11.0.5.tgz", + "integrity": "sha512-xKvGhPWw3k84Qjh8bI3ZeJjqnyadK+GEFtazSfZv/rKeTkTjOJho6mFqh2SM96iIcZokxiOpg78GazTSg8+KHA==", "license": "MIT", "dependencies": { - "chardet": "^2.1.0", - "iconv-lite": "^0.7.0" - }, - "engines": { - "node": ">=18" - }, - "peerDependencies": { - "@types/node": ">=18" + "@types/unist": "^3.0.0", + "bail": "^2.0.0", + "devlop": "^1.0.0", + "extend": "^3.0.0", + "is-plain-obj": "^4.0.0", + "trough": "^2.0.0", + "vfile": "^6.0.0" }, - "peerDependenciesMeta": { - "@types/node": { - "optional": true - } + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/@isaacs/balanced-match": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/@isaacs/balanced-match/-/balanced-match-4.0.1.tgz", - "integrity": "sha512-yzMTt9lEb8Gv7zRioUilSglI0c0smZ9k5D65677DLWLtWJaXIS3CqcGyUFByYKlnUj6TkjLVs54fBl6+TiGQDQ==", - "dev": true, + "node_modules/@docusaurus/mdx-loader/node_modules/unist-util-is": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-6.0.1.tgz", + "integrity": "sha512-LsiILbtBETkDz8I9p1dQ0uyRUWuaQzd/cuEeS1hoRSyW5E5XGmTzlwY1OrNzzakGowI9Dr/I8HVaw4hTtnxy8g==", "license": "MIT", - "engines": { - "node": "20 || >=22" + "dependencies": { + "@types/unist": "^3.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/@isaacs/brace-expansion": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/@isaacs/brace-expansion/-/brace-expansion-5.0.0.tgz", - "integrity": "sha512-ZT55BDLV0yv0RBm2czMiZ+SqCGO7AvmOM3G/w2xhVPH+te0aKgFjmBvGlL1dH+ql2tgGO3MVrbb3jCKyvpgnxA==", - "dev": true, + "node_modules/@docusaurus/mdx-loader/node_modules/unist-util-stringify-position": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-4.0.0.tgz", + "integrity": "sha512-0ASV06AAoKCDkS2+xw5RXJywruurpbC4JZSm7nr7MOt1ojAzvyyaO+UxZf18j8FCF6kmzCZKcAgN/yu2gm2XgQ==", "license": "MIT", "dependencies": { - "@isaacs/balanced-match": "^4.0.1" + "@types/unist": "^3.0.0" }, - "engines": { - "node": "20 || >=22" + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/@isaacs/cliui": { - "version": "8.0.2", - "resolved": "https://registry.npmjs.org/@isaacs/cliui/-/cliui-8.0.2.tgz", - "integrity": "sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==", - "license": "ISC", + "node_modules/@docusaurus/mdx-loader/node_modules/unist-util-visit": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-5.0.0.tgz", + "integrity": "sha512-MR04uvD+07cwl/yhVuVWAtw+3GOR/knlL55Nd/wAdblk27GCVt3lqpTivy/tkJcZoNPzTwS1Y+KMojlLDhoTzg==", + "license": "MIT", "dependencies": { - "string-width": "^5.1.2", - "string-width-cjs": "npm:string-width@^4.2.0", - "strip-ansi": "^7.0.1", - "strip-ansi-cjs": "npm:strip-ansi@^6.0.1", - "wrap-ansi": "^8.1.0", - "wrap-ansi-cjs": "npm:wrap-ansi@^7.0.0" + "@types/unist": "^3.0.0", + "unist-util-is": "^6.0.0", + "unist-util-visit-parents": "^6.0.0" }, - "engines": { - "node": ">=12" + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/@isaacs/cliui/node_modules/ansi-regex": { - "version": "6.2.2", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.2.2.tgz", - "integrity": "sha512-Bq3SmSpyFHaWjPk8If9yc6svM8c56dB5BAtW4Qbw5jHTwwXXcTLoRMkpDJp6VL0XzlWaCHTXrkFURMYmD0sLqg==", + "node_modules/@docusaurus/mdx-loader/node_modules/unist-util-visit-parents": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-6.0.2.tgz", + "integrity": "sha512-goh1s1TBrqSqukSc8wrjwWhL0hiJxgA8m4kFxGlQ+8FYQ3C/m11FcTs4YYem7V664AhHVvgoQLk890Ssdsr2IQ==", "license": "MIT", - "engines": { - "node": ">=12" + "dependencies": { + "@types/unist": "^3.0.0", + "unist-util-is": "^6.0.0" }, "funding": { - "url": "https://github.com/chalk/ansi-regex?sponsor=1" + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/@isaacs/cliui/node_modules/ansi-styles": { - "version": "6.2.3", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.3.tgz", - "integrity": "sha512-4Dj6M28JB+oAH8kFkTLUo+a2jwOFkuqb3yucU0CANcRRUbxS0cP0nZYCGjcc3BNXwRIsUVmDGgzawme7zvJHvg==", + "node_modules/@docusaurus/mdx-loader/node_modules/universalify": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.1.tgz", + "integrity": "sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==", "license": "MIT", "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" + "node": ">= 10.0.0" } }, - "node_modules/@isaacs/cliui/node_modules/emoji-regex": { - "version": "9.2.2", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", - "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==", - "license": "MIT" - }, - "node_modules/@isaacs/cliui/node_modules/string-width": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz", - "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==", + "node_modules/@docusaurus/mdx-loader/node_modules/vfile": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/vfile/-/vfile-6.0.3.tgz", + "integrity": "sha512-KzIbH/9tXat2u30jf+smMwFCsno4wHVdNmzFyL+T/L3UGqqk6JKfVqOFOZEpZSHADH1k40ab6NUIXZq422ov3Q==", "license": "MIT", "dependencies": { - "eastasianwidth": "^0.2.0", - "emoji-regex": "^9.2.2", - "strip-ansi": "^7.0.1" - }, - "engines": { - "node": ">=12" + "@types/unist": "^3.0.0", + "vfile-message": "^4.0.0" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/@isaacs/cliui/node_modules/strip-ansi": { - "version": "7.1.2", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.2.tgz", - "integrity": "sha512-gmBGslpoQJtgnMAvOVqGZpEz9dyoKTCzy2nfz/n8aIFhN/jCE/rCmcxabB6jOOHV+0WNnylOxaxBQPSvcWklhA==", + "node_modules/@docusaurus/mdx-loader/node_modules/vfile-message": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/vfile-message/-/vfile-message-4.0.3.tgz", + "integrity": "sha512-QTHzsGd1EhbZs4AsQ20JX1rC3cOlt/IWJruk893DfLRr57lcnOeMaWG4K0JrRta4mIJZKth2Au3mM3u03/JWKw==", "license": "MIT", "dependencies": { - "ansi-regex": "^6.0.1" - }, - "engines": { - "node": ">=12" + "@types/unist": "^3.0.0", + "unist-util-stringify-position": "^4.0.0" }, "funding": { - "url": "https://github.com/chalk/strip-ansi?sponsor=1" + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/@isaacs/cliui/node_modules/wrap-ansi": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-8.1.0.tgz", - "integrity": "sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==", + "node_modules/@docusaurus/module-type-aliases": { + "version": "3.9.2", + "resolved": "https://registry.npmjs.org/@docusaurus/module-type-aliases/-/module-type-aliases-3.9.2.tgz", + "integrity": "sha512-8qVe2QA9hVLzvnxP46ysuofJUIc/yYQ82tvA/rBTrnpXtCjNSFLxEZfd5U8cYZuJIVlkPxamsIgwd5tGZXfvew==", "license": "MIT", "dependencies": { - "ansi-styles": "^6.1.0", - "string-width": "^5.0.1", - "strip-ansi": "^7.0.1" - }, - "engines": { - "node": ">=12" + "@docusaurus/types": "3.9.2", + "@types/history": "^4.7.11", + "@types/react": "*", + "@types/react-router-config": "*", + "@types/react-router-dom": "*", + "react-helmet-async": "npm:@slorber/react-helmet-async@1.3.0", + "react-loadable": "npm:@docusaurus/react-loadable@6.0.0" }, - "funding": { - "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + "peerDependencies": { + "react": "*", + "react-dom": "*" } }, - "node_modules/@isaacs/ttlcache": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/@isaacs/ttlcache/-/ttlcache-1.4.1.tgz", - "integrity": "sha512-RQgQ4uQ+pLbqXfOmieB91ejmLwvSgv9nLx6sT6sD83s7umBypgg+OIBOBbEUiJXrfpnp9j0mRhYYdzp9uqq3lA==", - "license": "ISC", - "peer": true, + "node_modules/@docusaurus/plugin-content-blog": { + "version": "3.9.2", + "resolved": "https://registry.npmjs.org/@docusaurus/plugin-content-blog/-/plugin-content-blog-3.9.2.tgz", + "integrity": "sha512-3I2HXy3L1QcjLJLGAoTvoBnpOwa6DPUa3Q0dMK19UTY9mhPkKQg/DYhAGTiBUKcTR0f08iw7kLPqOhIgdV3eVQ==", + "license": "MIT", + "dependencies": { + "@docusaurus/core": "3.9.2", + "@docusaurus/logger": "3.9.2", + "@docusaurus/mdx-loader": "3.9.2", + "@docusaurus/theme-common": "3.9.2", + "@docusaurus/types": "3.9.2", + "@docusaurus/utils": "3.9.2", + "@docusaurus/utils-common": "3.9.2", + "@docusaurus/utils-validation": "3.9.2", + "cheerio": "1.0.0-rc.12", + "feed": "^4.2.2", + "fs-extra": "^11.1.1", + "lodash": "^4.17.21", + "schema-dts": "^1.1.2", + "srcset": "^4.0.0", + "tslib": "^2.6.0", + "unist-util-visit": "^5.0.0", + "utility-types": "^3.10.0", + "webpack": "^5.88.1" + }, "engines": { - "node": ">=12" + "node": ">=20.0" + }, + "peerDependencies": { + "@docusaurus/plugin-content-docs": "*", + "react": "^18.0.0 || ^19.0.0", + "react-dom": "^18.0.0 || ^19.0.0" } }, - "node_modules/@istanbuljs/load-nyc-config": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@istanbuljs/load-nyc-config/-/load-nyc-config-1.1.0.tgz", - "integrity": "sha512-VjeHSlIzpv/NyD3N0YuHfXOPDIixcA1q2ZV98wsMqcYlPmv2n3Yb2lYP9XMElnaFVXg5A7YLTeLu6V84uQDjmQ==", - "license": "ISC", + "node_modules/@docusaurus/plugin-content-blog/node_modules/fs-extra": { + "version": "11.3.2", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-11.3.2.tgz", + "integrity": "sha512-Xr9F6z6up6Ws+NjzMCZc6WXg2YFRlrLP9NQDO3VQrWrfiojdhS56TzueT88ze0uBdCTwEIhQ3ptnmKeWGFAe0A==", + "license": "MIT", "dependencies": { - "camelcase": "^5.3.1", - "find-up": "^4.1.0", - "get-package-type": "^0.1.0", - "js-yaml": "^3.13.1", - "resolve-from": "^5.0.0" + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" }, "engines": { - "node": ">=8" + "node": ">=14.14" } }, - "node_modules/@istanbuljs/load-nyc-config/node_modules/argparse": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", - "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", + "node_modules/@docusaurus/plugin-content-blog/node_modules/jsonfile": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.2.0.tgz", + "integrity": "sha512-FGuPw30AdOIUTRMC2OMRtQV+jkVj2cfPqSeWXv1NEAJ1qZ5zb1X6z1mFhbfOB/iy3ssJCD+3KuZ8r8C3uVFlAg==", "license": "MIT", "dependencies": { - "sprintf-js": "~1.0.2" + "universalify": "^2.0.0" + }, + "optionalDependencies": { + "graceful-fs": "^4.1.6" } }, - "node_modules/@istanbuljs/load-nyc-config/node_modules/find-up": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", - "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", + "node_modules/@docusaurus/plugin-content-blog/node_modules/unist-util-is": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-6.0.1.tgz", + "integrity": "sha512-LsiILbtBETkDz8I9p1dQ0uyRUWuaQzd/cuEeS1hoRSyW5E5XGmTzlwY1OrNzzakGowI9Dr/I8HVaw4hTtnxy8g==", "license": "MIT", "dependencies": { - "locate-path": "^5.0.0", - "path-exists": "^4.0.0" + "@types/unist": "^3.0.0" }, - "engines": { - "node": ">=8" + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/@istanbuljs/load-nyc-config/node_modules/js-yaml": { - "version": "3.14.1", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", - "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", + "node_modules/@docusaurus/plugin-content-blog/node_modules/unist-util-visit": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-5.0.0.tgz", + "integrity": "sha512-MR04uvD+07cwl/yhVuVWAtw+3GOR/knlL55Nd/wAdblk27GCVt3lqpTivy/tkJcZoNPzTwS1Y+KMojlLDhoTzg==", "license": "MIT", "dependencies": { - "argparse": "^1.0.7", - "esprima": "^4.0.0" + "@types/unist": "^3.0.0", + "unist-util-is": "^6.0.0", + "unist-util-visit-parents": "^6.0.0" }, - "bin": { - "js-yaml": "bin/js-yaml.js" + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/@istanbuljs/load-nyc-config/node_modules/locate-path": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", - "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", + "node_modules/@docusaurus/plugin-content-blog/node_modules/unist-util-visit-parents": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-6.0.2.tgz", + "integrity": "sha512-goh1s1TBrqSqukSc8wrjwWhL0hiJxgA8m4kFxGlQ+8FYQ3C/m11FcTs4YYem7V664AhHVvgoQLk890Ssdsr2IQ==", "license": "MIT", "dependencies": { - "p-locate": "^4.1.0" + "@types/unist": "^3.0.0", + "unist-util-is": "^6.0.0" }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/@docusaurus/plugin-content-blog/node_modules/universalify": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.1.tgz", + "integrity": "sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==", + "license": "MIT", "engines": { - "node": ">=8" + "node": ">= 10.0.0" } }, - "node_modules/@istanbuljs/load-nyc-config/node_modules/p-locate": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", - "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", + "node_modules/@docusaurus/plugin-content-docs": { + "version": "3.9.2", + "resolved": "https://registry.npmjs.org/@docusaurus/plugin-content-docs/-/plugin-content-docs-3.9.2.tgz", + "integrity": "sha512-C5wZsGuKTY8jEYsqdxhhFOe1ZDjH0uIYJ9T/jebHwkyxqnr4wW0jTkB72OMqNjsoQRcb0JN3PcSeTwFlVgzCZg==", "license": "MIT", "dependencies": { - "p-limit": "^2.2.0" + "@docusaurus/core": "3.9.2", + "@docusaurus/logger": "3.9.2", + "@docusaurus/mdx-loader": "3.9.2", + "@docusaurus/module-type-aliases": "3.9.2", + "@docusaurus/theme-common": "3.9.2", + "@docusaurus/types": "3.9.2", + "@docusaurus/utils": "3.9.2", + "@docusaurus/utils-common": "3.9.2", + "@docusaurus/utils-validation": "3.9.2", + "@types/react-router-config": "^5.0.7", + "combine-promises": "^1.1.0", + "fs-extra": "^11.1.1", + "js-yaml": "^4.1.0", + "lodash": "^4.17.21", + "schema-dts": "^1.1.2", + "tslib": "^2.6.0", + "utility-types": "^3.10.0", + "webpack": "^5.88.1" }, "engines": { - "node": ">=8" + "node": ">=20.0" + }, + "peerDependencies": { + "react": "^18.0.0 || ^19.0.0", + "react-dom": "^18.0.0 || ^19.0.0" } }, - "node_modules/@istanbuljs/schema": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/@istanbuljs/schema/-/schema-0.1.3.tgz", - "integrity": "sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA==", + "node_modules/@docusaurus/plugin-content-docs/node_modules/fs-extra": { + "version": "11.3.2", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-11.3.2.tgz", + "integrity": "sha512-Xr9F6z6up6Ws+NjzMCZc6WXg2YFRlrLP9NQDO3VQrWrfiojdhS56TzueT88ze0uBdCTwEIhQ3ptnmKeWGFAe0A==", "license": "MIT", + "dependencies": { + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + }, "engines": { - "node": ">=8" + "node": ">=14.14" } }, - "node_modules/@jest/console": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/@jest/console/-/console-29.7.0.tgz", - "integrity": "sha512-5Ni4CU7XHQi32IJ398EEP4RrB8eV09sXP2ROqD4bksHrnTree52PsxvX8tpL8LvTZ3pFzXyPbNQReSN41CAhOg==", - "dev": true, + "node_modules/@docusaurus/plugin-content-docs/node_modules/jsonfile": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.2.0.tgz", + "integrity": "sha512-FGuPw30AdOIUTRMC2OMRtQV+jkVj2cfPqSeWXv1NEAJ1qZ5zb1X6z1mFhbfOB/iy3ssJCD+3KuZ8r8C3uVFlAg==", "license": "MIT", "dependencies": { - "@jest/types": "^29.6.3", - "@types/node": "*", - "chalk": "^4.0.0", - "jest-message-util": "^29.7.0", - "jest-util": "^29.7.0", - "slash": "^3.0.0" + "universalify": "^2.0.0" }, + "optionalDependencies": { + "graceful-fs": "^4.1.6" + } + }, + "node_modules/@docusaurus/plugin-content-docs/node_modules/universalify": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.1.tgz", + "integrity": "sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==", + "license": "MIT", "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "node": ">= 10.0.0" } }, - "node_modules/@jest/core": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/@jest/core/-/core-29.7.0.tgz", - "integrity": "sha512-n7aeXWKMnGtDA48y8TLWJPJmLmmZ642Ceo78cYWEpiD7FzDgmNDV/GCVRorPABdXLJZ/9wzzgZAlHjXjxDHGsg==", - "dev": true, + "node_modules/@docusaurus/plugin-content-pages": { + "version": "3.9.2", + "resolved": "https://registry.npmjs.org/@docusaurus/plugin-content-pages/-/plugin-content-pages-3.9.2.tgz", + "integrity": "sha512-s4849w/p4noXUrGpPUF0BPqIAfdAe76BLaRGAGKZ1gTDNiGxGcpsLcwJ9OTi1/V8A+AzvsmI9pkjie2zjIQZKA==", "license": "MIT", "dependencies": { - "@jest/console": "^29.7.0", - "@jest/reporters": "^29.7.0", - "@jest/test-result": "^29.7.0", - "@jest/transform": "^29.7.0", - "@jest/types": "^29.6.3", - "@types/node": "*", - "ansi-escapes": "^4.2.1", - "chalk": "^4.0.0", - "ci-info": "^3.2.0", - "exit": "^0.1.2", - "graceful-fs": "^4.2.9", - "jest-changed-files": "^29.7.0", - "jest-config": "^29.7.0", - "jest-haste-map": "^29.7.0", - "jest-message-util": "^29.7.0", - "jest-regex-util": "^29.6.3", - "jest-resolve": "^29.7.0", - "jest-resolve-dependencies": "^29.7.0", - "jest-runner": "^29.7.0", - "jest-runtime": "^29.7.0", - "jest-snapshot": "^29.7.0", - "jest-util": "^29.7.0", - "jest-validate": "^29.7.0", - "jest-watcher": "^29.7.0", - "micromatch": "^4.0.4", - "pretty-format": "^29.7.0", - "slash": "^3.0.0", - "strip-ansi": "^6.0.0" + "@docusaurus/core": "3.9.2", + "@docusaurus/mdx-loader": "3.9.2", + "@docusaurus/types": "3.9.2", + "@docusaurus/utils": "3.9.2", + "@docusaurus/utils-validation": "3.9.2", + "fs-extra": "^11.1.1", + "tslib": "^2.6.0", + "webpack": "^5.88.1" }, "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "node": ">=20.0" }, "peerDependencies": { - "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0" - }, - "peerDependenciesMeta": { - "node-notifier": { - "optional": true - } + "react": "^18.0.0 || ^19.0.0", + "react-dom": "^18.0.0 || ^19.0.0" } }, - "node_modules/@jest/create-cache-key-function": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/@jest/create-cache-key-function/-/create-cache-key-function-29.7.0.tgz", - "integrity": "sha512-4QqS3LY5PBmTRHj9sAg1HLoPzqAI0uOX6wI/TRqHIcOxlFidy6YEmCQJk6FSZjNLGCeubDMfmkWL+qaLKhSGQA==", + "node_modules/@docusaurus/plugin-content-pages/node_modules/fs-extra": { + "version": "11.3.2", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-11.3.2.tgz", + "integrity": "sha512-Xr9F6z6up6Ws+NjzMCZc6WXg2YFRlrLP9NQDO3VQrWrfiojdhS56TzueT88ze0uBdCTwEIhQ3ptnmKeWGFAe0A==", "license": "MIT", - "peer": true, "dependencies": { - "@jest/types": "^29.6.3" + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" }, "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "node": ">=14.14" } }, - "node_modules/@jest/environment": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/@jest/environment/-/environment-29.7.0.tgz", - "integrity": "sha512-aQIfHDq33ExsN4jP1NWGXhxgQ/wixs60gDiKO+XVMd8Mn0NWPWgc34ZQDTb2jKaUWQ7MuwoitXAsN2XVXNMpAw==", + "node_modules/@docusaurus/plugin-content-pages/node_modules/jsonfile": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.2.0.tgz", + "integrity": "sha512-FGuPw30AdOIUTRMC2OMRtQV+jkVj2cfPqSeWXv1NEAJ1qZ5zb1X6z1mFhbfOB/iy3ssJCD+3KuZ8r8C3uVFlAg==", "license": "MIT", "dependencies": { - "@jest/fake-timers": "^29.7.0", - "@jest/types": "^29.6.3", - "@types/node": "*", - "jest-mock": "^29.7.0" + "universalify": "^2.0.0" }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "optionalDependencies": { + "graceful-fs": "^4.1.6" } }, - "node_modules/@jest/expect": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/@jest/expect/-/expect-29.7.0.tgz", - "integrity": "sha512-8uMeAMycttpva3P1lBHB8VciS9V0XAr3GymPpipdyQXbBcuhkLQOSe8E/p92RyAdToS6ZD1tFkX+CkhoECE0dQ==", - "dev": true, + "node_modules/@docusaurus/plugin-content-pages/node_modules/universalify": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.1.tgz", + "integrity": "sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==", "license": "MIT", - "dependencies": { - "expect": "^29.7.0", - "jest-snapshot": "^29.7.0" - }, "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "node": ">= 10.0.0" } }, - "node_modules/@jest/expect-utils": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/@jest/expect-utils/-/expect-utils-29.7.0.tgz", - "integrity": "sha512-GlsNBWiFQFCVi9QVSx7f5AgMeLxe9YCCs5PuP2O2LdjDAA8Jh9eX7lA1Jq/xdXw3Wb3hyvlFNfZIfcRetSzYcA==", - "dev": true, + "node_modules/@docusaurus/plugin-css-cascade-layers": { + "version": "3.9.2", + "resolved": "https://registry.npmjs.org/@docusaurus/plugin-css-cascade-layers/-/plugin-css-cascade-layers-3.9.2.tgz", + "integrity": "sha512-w1s3+Ss+eOQbscGM4cfIFBlVg/QKxyYgj26k5AnakuHkKxH6004ZtuLe5awMBotIYF2bbGDoDhpgQ4r/kcj4rQ==", "license": "MIT", "dependencies": { - "jest-get-type": "^29.6.3" + "@docusaurus/core": "3.9.2", + "@docusaurus/types": "3.9.2", + "@docusaurus/utils": "3.9.2", + "@docusaurus/utils-validation": "3.9.2", + "tslib": "^2.6.0" }, "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "node": ">=20.0" } }, - "node_modules/@jest/fake-timers": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/@jest/fake-timers/-/fake-timers-29.7.0.tgz", - "integrity": "sha512-q4DH1Ha4TTFPdxLsqDXK1d3+ioSL7yL5oCMJZgDYm6i+6CygW5E5xVr/D1HdsGxjt1ZWSfUAs9OxSB/BNelWrQ==", + "node_modules/@docusaurus/plugin-debug": { + "version": "3.9.2", + "resolved": "https://registry.npmjs.org/@docusaurus/plugin-debug/-/plugin-debug-3.9.2.tgz", + "integrity": "sha512-j7a5hWuAFxyQAkilZwhsQ/b3T7FfHZ+0dub6j/GxKNFJp2h9qk/P1Bp7vrGASnvA9KNQBBL1ZXTe7jlh4VdPdA==", "license": "MIT", "dependencies": { - "@jest/types": "^29.6.3", - "@sinonjs/fake-timers": "^10.0.2", - "@types/node": "*", - "jest-message-util": "^29.7.0", - "jest-mock": "^29.7.0", - "jest-util": "^29.7.0" + "@docusaurus/core": "3.9.2", + "@docusaurus/types": "3.9.2", + "@docusaurus/utils": "3.9.2", + "fs-extra": "^11.1.1", + "react-json-view-lite": "^2.3.0", + "tslib": "^2.6.0" }, "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "node": ">=20.0" + }, + "peerDependencies": { + "react": "^18.0.0 || ^19.0.0", + "react-dom": "^18.0.0 || ^19.0.0" } }, - "node_modules/@jest/globals": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/@jest/globals/-/globals-29.7.0.tgz", - "integrity": "sha512-mpiz3dutLbkW2MNFubUGUEVLkTGiqW6yLVTA+JbP6fI6J5iL9Y0Nlg8k95pcF8ctKwCS7WVxteBs29hhfAotzQ==", - "dev": true, + "node_modules/@docusaurus/plugin-debug/node_modules/fs-extra": { + "version": "11.3.2", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-11.3.2.tgz", + "integrity": "sha512-Xr9F6z6up6Ws+NjzMCZc6WXg2YFRlrLP9NQDO3VQrWrfiojdhS56TzueT88ze0uBdCTwEIhQ3ptnmKeWGFAe0A==", "license": "MIT", "dependencies": { - "@jest/environment": "^29.7.0", - "@jest/expect": "^29.7.0", - "@jest/types": "^29.6.3", - "jest-mock": "^29.7.0" + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" }, "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "node": ">=14.14" } }, - "node_modules/@jest/pattern": { - "version": "30.0.1", - "resolved": "https://registry.npmjs.org/@jest/pattern/-/pattern-30.0.1.tgz", - "integrity": "sha512-gWp7NfQW27LaBQz3TITS8L7ZCQ0TLvtmI//4OwlQRx4rnWxcPNIYjxZpDcN4+UlGxgm3jS5QPz8IPTCkb59wZA==", - "dev": true, + "node_modules/@docusaurus/plugin-debug/node_modules/jsonfile": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.2.0.tgz", + "integrity": "sha512-FGuPw30AdOIUTRMC2OMRtQV+jkVj2cfPqSeWXv1NEAJ1qZ5zb1X6z1mFhbfOB/iy3ssJCD+3KuZ8r8C3uVFlAg==", "license": "MIT", "dependencies": { - "@types/node": "*", - "jest-regex-util": "30.0.1" + "universalify": "^2.0.0" }, - "engines": { - "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" + "optionalDependencies": { + "graceful-fs": "^4.1.6" } }, - "node_modules/@jest/pattern/node_modules/jest-regex-util": { - "version": "30.0.1", - "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-30.0.1.tgz", - "integrity": "sha512-jHEQgBXAgc+Gh4g0p3bCevgRCVRkB4VB70zhoAE48gxeSr1hfUOsM/C2WoJgVL7Eyg//hudYENbm3Ne+/dRVVA==", - "dev": true, + "node_modules/@docusaurus/plugin-debug/node_modules/universalify": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.1.tgz", + "integrity": "sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==", "license": "MIT", "engines": { - "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" + "node": ">= 10.0.0" } }, - "node_modules/@jest/reporters": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/@jest/reporters/-/reporters-29.7.0.tgz", - "integrity": "sha512-DApq0KJbJOEzAFYjHADNNxAE3KbhxQB1y5Kplb5Waqw6zVbuWatSnMjE5gs8FUgEPmNsnZA3NCWl9NG0ia04Pg==", - "dev": true, + "node_modules/@docusaurus/plugin-google-analytics": { + "version": "3.9.2", + "resolved": "https://registry.npmjs.org/@docusaurus/plugin-google-analytics/-/plugin-google-analytics-3.9.2.tgz", + "integrity": "sha512-mAwwQJ1Us9jL/lVjXtErXto4p4/iaLlweC54yDUK1a97WfkC6Z2k5/769JsFgwOwOP+n5mUQGACXOEQ0XDuVUw==", "license": "MIT", "dependencies": { - "@bcoe/v8-coverage": "^0.2.3", - "@jest/console": "^29.7.0", - "@jest/test-result": "^29.7.0", - "@jest/transform": "^29.7.0", - "@jest/types": "^29.6.3", - "@jridgewell/trace-mapping": "^0.3.18", - "@types/node": "*", - "chalk": "^4.0.0", - "collect-v8-coverage": "^1.0.0", - "exit": "^0.1.2", - "glob": "^7.1.3", - "graceful-fs": "^4.2.9", - "istanbul-lib-coverage": "^3.0.0", - "istanbul-lib-instrument": "^6.0.0", - "istanbul-lib-report": "^3.0.0", - "istanbul-lib-source-maps": "^4.0.0", - "istanbul-reports": "^3.1.3", - "jest-message-util": "^29.7.0", - "jest-util": "^29.7.0", - "jest-worker": "^29.7.0", - "slash": "^3.0.0", - "string-length": "^4.0.1", - "strip-ansi": "^6.0.0", - "v8-to-istanbul": "^9.0.1" + "@docusaurus/core": "3.9.2", + "@docusaurus/types": "3.9.2", + "@docusaurus/utils-validation": "3.9.2", + "tslib": "^2.6.0" }, "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "node": ">=20.0" }, "peerDependencies": { - "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0" - }, - "peerDependenciesMeta": { - "node-notifier": { - "optional": true - } + "react": "^18.0.0 || ^19.0.0", + "react-dom": "^18.0.0 || ^19.0.0" } }, - "node_modules/@jest/reporters/node_modules/glob": { - "version": "7.2.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", - "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", - "deprecated": "Glob versions prior to v9 are no longer supported", - "dev": true, - "license": "ISC", + "node_modules/@docusaurus/plugin-google-gtag": { + "version": "3.9.2", + "resolved": "https://registry.npmjs.org/@docusaurus/plugin-google-gtag/-/plugin-google-gtag-3.9.2.tgz", + "integrity": "sha512-YJ4lDCphabBtw19ooSlc1MnxtYGpjFV9rEdzjLsUnBCeis2djUyCozZaFhCg6NGEwOn7HDDyMh0yzcdRpnuIvA==", + "license": "MIT", "dependencies": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.1.1", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" + "@docusaurus/core": "3.9.2", + "@docusaurus/types": "3.9.2", + "@docusaurus/utils-validation": "3.9.2", + "@types/gtag.js": "^0.0.12", + "tslib": "^2.6.0" }, "engines": { - "node": "*" + "node": ">=20.0" }, - "funding": { - "url": "https://github.com/sponsors/isaacs" + "peerDependencies": { + "react": "^18.0.0 || ^19.0.0", + "react-dom": "^18.0.0 || ^19.0.0" } }, - "node_modules/@jest/schemas": { - "version": "29.6.3", - "resolved": "https://registry.npmjs.org/@jest/schemas/-/schemas-29.6.3.tgz", - "integrity": "sha512-mo5j5X+jIZmJQveBKeS/clAueipV7KgiX1vMgCxam1RNYiqE1w62n0/tJJnHtjW8ZHcQco5gY85jA3mi0L+nSA==", + "node_modules/@docusaurus/plugin-google-tag-manager": { + "version": "3.9.2", + "resolved": "https://registry.npmjs.org/@docusaurus/plugin-google-tag-manager/-/plugin-google-tag-manager-3.9.2.tgz", + "integrity": "sha512-LJtIrkZN/tuHD8NqDAW1Tnw0ekOwRTfobWPsdO15YxcicBo2ykKF0/D6n0vVBfd3srwr9Z6rzrIWYrMzBGrvNw==", "license": "MIT", "dependencies": { - "@sinclair/typebox": "^0.27.8" + "@docusaurus/core": "3.9.2", + "@docusaurus/types": "3.9.2", + "@docusaurus/utils-validation": "3.9.2", + "tslib": "^2.6.0" }, "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "node": ">=20.0" + }, + "peerDependencies": { + "react": "^18.0.0 || ^19.0.0", + "react-dom": "^18.0.0 || ^19.0.0" } }, - "node_modules/@jest/source-map": { - "version": "29.6.3", - "resolved": "https://registry.npmjs.org/@jest/source-map/-/source-map-29.6.3.tgz", - "integrity": "sha512-MHjT95QuipcPrpLM+8JMSzFx6eHp5Bm+4XeFDJlwsvVBjmKNiIAvasGK2fxz2WbGRlnvqehFbh07MMa7n3YJnw==", - "dev": true, + "node_modules/@docusaurus/plugin-sitemap": { + "version": "3.9.2", + "resolved": "https://registry.npmjs.org/@docusaurus/plugin-sitemap/-/plugin-sitemap-3.9.2.tgz", + "integrity": "sha512-WLh7ymgDXjG8oPoM/T4/zUP7KcSuFYRZAUTl8vR6VzYkfc18GBM4xLhcT+AKOwun6kBivYKUJf+vlqYJkm+RHw==", "license": "MIT", "dependencies": { - "@jridgewell/trace-mapping": "^0.3.18", - "callsites": "^3.0.0", - "graceful-fs": "^4.2.9" + "@docusaurus/core": "3.9.2", + "@docusaurus/logger": "3.9.2", + "@docusaurus/types": "3.9.2", + "@docusaurus/utils": "3.9.2", + "@docusaurus/utils-common": "3.9.2", + "@docusaurus/utils-validation": "3.9.2", + "fs-extra": "^11.1.1", + "sitemap": "^7.1.1", + "tslib": "^2.6.0" }, "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "node": ">=20.0" + }, + "peerDependencies": { + "react": "^18.0.0 || ^19.0.0", + "react-dom": "^18.0.0 || ^19.0.0" } }, - "node_modules/@jest/test-result": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/@jest/test-result/-/test-result-29.7.0.tgz", - "integrity": "sha512-Fdx+tv6x1zlkJPcWXmMDAG2HBnaR9XPSd5aDWQVsfrZmLVT3lU1cwyxLgRmXR9yrq4NBoEm9BMsfgFzTQAbJYA==", - "dev": true, + "node_modules/@docusaurus/plugin-sitemap/node_modules/fs-extra": { + "version": "11.3.2", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-11.3.2.tgz", + "integrity": "sha512-Xr9F6z6up6Ws+NjzMCZc6WXg2YFRlrLP9NQDO3VQrWrfiojdhS56TzueT88ze0uBdCTwEIhQ3ptnmKeWGFAe0A==", "license": "MIT", "dependencies": { - "@jest/console": "^29.7.0", - "@jest/types": "^29.6.3", - "@types/istanbul-lib-coverage": "^2.0.0", - "collect-v8-coverage": "^1.0.0" + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" }, "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "node": ">=14.14" } }, - "node_modules/@jest/test-sequencer": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/@jest/test-sequencer/-/test-sequencer-29.7.0.tgz", - "integrity": "sha512-GQwJ5WZVrKnOJuiYiAF52UNUJXgTZx1NHjFSEB0qEMmSZKAkdMoIzw/Cj6x6NF4AvV23AUqDpFzQkN/eYCYTxw==", - "dev": true, + "node_modules/@docusaurus/plugin-sitemap/node_modules/jsonfile": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.2.0.tgz", + "integrity": "sha512-FGuPw30AdOIUTRMC2OMRtQV+jkVj2cfPqSeWXv1NEAJ1qZ5zb1X6z1mFhbfOB/iy3ssJCD+3KuZ8r8C3uVFlAg==", "license": "MIT", "dependencies": { - "@jest/test-result": "^29.7.0", - "graceful-fs": "^4.2.9", - "jest-haste-map": "^29.7.0", - "slash": "^3.0.0" + "universalify": "^2.0.0" }, + "optionalDependencies": { + "graceful-fs": "^4.1.6" + } + }, + "node_modules/@docusaurus/plugin-sitemap/node_modules/universalify": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.1.tgz", + "integrity": "sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==", + "license": "MIT", "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "node": ">= 10.0.0" } }, - "node_modules/@jest/transform": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/@jest/transform/-/transform-29.7.0.tgz", - "integrity": "sha512-ok/BTPFzFKVMwO5eOHRrvnBVHdRy9IrsrW1GpMaQ9MCnilNLXQKmAX8s1YXDFaai9xJpac2ySzV0YeRRECr2Vw==", + "node_modules/@docusaurus/plugin-svgr": { + "version": "3.9.2", + "resolved": "https://registry.npmjs.org/@docusaurus/plugin-svgr/-/plugin-svgr-3.9.2.tgz", + "integrity": "sha512-n+1DE+5b3Lnf27TgVU5jM1d4x5tUh2oW5LTsBxJX4PsAPV0JGcmI6p3yLYtEY0LRVEIJh+8RsdQmRE66wSV8mw==", "license": "MIT", "dependencies": { - "@babel/core": "^7.11.6", - "@jest/types": "^29.6.3", - "@jridgewell/trace-mapping": "^0.3.18", - "babel-plugin-istanbul": "^6.1.1", - "chalk": "^4.0.0", - "convert-source-map": "^2.0.0", - "fast-json-stable-stringify": "^2.1.0", - "graceful-fs": "^4.2.9", - "jest-haste-map": "^29.7.0", - "jest-regex-util": "^29.6.3", - "jest-util": "^29.7.0", - "micromatch": "^4.0.4", - "pirates": "^4.0.4", - "slash": "^3.0.0", - "write-file-atomic": "^4.0.2" + "@docusaurus/core": "3.9.2", + "@docusaurus/types": "3.9.2", + "@docusaurus/utils": "3.9.2", + "@docusaurus/utils-validation": "3.9.2", + "@svgr/core": "8.1.0", + "@svgr/webpack": "^8.1.0", + "tslib": "^2.6.0", + "webpack": "^5.88.1" }, "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "node": ">=20.0" + }, + "peerDependencies": { + "react": "^18.0.0 || ^19.0.0", + "react-dom": "^18.0.0 || ^19.0.0" } }, - "node_modules/@jest/types": { - "version": "29.6.3", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-29.6.3.tgz", - "integrity": "sha512-u3UPsIilWKOM3F9CXtrG8LEJmNxwoCQC/XVj4IKYXvvpx7QIi/Kg1LI5uDmDpKlac62NUtX7eLjRh+jVZcLOzw==", + "node_modules/@docusaurus/preset-classic": { + "version": "3.9.2", + "resolved": "https://registry.npmjs.org/@docusaurus/preset-classic/-/preset-classic-3.9.2.tgz", + "integrity": "sha512-IgyYO2Gvaigi21LuDIe+nvmN/dfGXAiMcV/murFqcpjnZc7jxFAxW+9LEjdPt61uZLxG4ByW/oUmX/DDK9t/8w==", "license": "MIT", "dependencies": { - "@jest/schemas": "^29.6.3", - "@types/istanbul-lib-coverage": "^2.0.0", - "@types/istanbul-reports": "^3.0.0", - "@types/node": "*", - "@types/yargs": "^17.0.8", - "chalk": "^4.0.0" + "@docusaurus/core": "3.9.2", + "@docusaurus/plugin-content-blog": "3.9.2", + "@docusaurus/plugin-content-docs": "3.9.2", + "@docusaurus/plugin-content-pages": "3.9.2", + "@docusaurus/plugin-css-cascade-layers": "3.9.2", + "@docusaurus/plugin-debug": "3.9.2", + "@docusaurus/plugin-google-analytics": "3.9.2", + "@docusaurus/plugin-google-gtag": "3.9.2", + "@docusaurus/plugin-google-tag-manager": "3.9.2", + "@docusaurus/plugin-sitemap": "3.9.2", + "@docusaurus/plugin-svgr": "3.9.2", + "@docusaurus/theme-classic": "3.9.2", + "@docusaurus/theme-common": "3.9.2", + "@docusaurus/theme-search-algolia": "3.9.2", + "@docusaurus/types": "3.9.2" }, "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "node": ">=20.0" + }, + "peerDependencies": { + "react": "^18.0.0 || ^19.0.0", + "react-dom": "^18.0.0 || ^19.0.0" + } + }, + "node_modules/@docusaurus/theme-classic": { + "version": "3.9.2", + "resolved": "https://registry.npmjs.org/@docusaurus/theme-classic/-/theme-classic-3.9.2.tgz", + "integrity": "sha512-IGUsArG5hhekXd7RDb11v94ycpJpFdJPkLnt10fFQWOVxAtq5/D7hT6lzc2fhyQKaaCE62qVajOMKL7OiAFAIA==", + "license": "MIT", + "dependencies": { + "@docusaurus/core": "3.9.2", + "@docusaurus/logger": "3.9.2", + "@docusaurus/mdx-loader": "3.9.2", + "@docusaurus/module-type-aliases": "3.9.2", + "@docusaurus/plugin-content-blog": "3.9.2", + "@docusaurus/plugin-content-docs": "3.9.2", + "@docusaurus/plugin-content-pages": "3.9.2", + "@docusaurus/theme-common": "3.9.2", + "@docusaurus/theme-translations": "3.9.2", + "@docusaurus/types": "3.9.2", + "@docusaurus/utils": "3.9.2", + "@docusaurus/utils-common": "3.9.2", + "@docusaurus/utils-validation": "3.9.2", + "@mdx-js/react": "^3.0.0", + "clsx": "^2.0.0", + "infima": "0.2.0-alpha.45", + "lodash": "^4.17.21", + "nprogress": "^0.2.0", + "postcss": "^8.5.4", + "prism-react-renderer": "^2.3.0", + "prismjs": "^1.29.0", + "react-router-dom": "^5.3.4", + "rtlcss": "^4.1.0", + "tslib": "^2.6.0", + "utility-types": "^3.10.0" + }, + "engines": { + "node": ">=20.0" + }, + "peerDependencies": { + "react": "^18.0.0 || ^19.0.0", + "react-dom": "^18.0.0 || ^19.0.0" } }, - "node_modules/@jridgewell/gen-mapping": { - "version": "0.3.13", - "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.13.tgz", - "integrity": "sha512-2kkt/7niJ6MgEPxF0bYdQ6etZaA+fQvDcLKckhy1yIQOzaoKjBBjSj63/aLVjYE3qhRt5dvM+uUyfCg6UKCBbA==", + "node_modules/@docusaurus/theme-classic/node_modules/history": { + "version": "4.10.1", + "resolved": "https://registry.npmjs.org/history/-/history-4.10.1.tgz", + "integrity": "sha512-36nwAD620w12kuzPAsyINPWJqlNbij+hpK1k9XRloDtym8mxzGYl2c17LnV6IAGB2Dmg4tEa7G7DlawS0+qjew==", "license": "MIT", "dependencies": { - "@jridgewell/sourcemap-codec": "^1.5.0", - "@jridgewell/trace-mapping": "^0.3.24" + "@babel/runtime": "^7.1.2", + "loose-envify": "^1.2.0", + "resolve-pathname": "^3.0.0", + "tiny-invariant": "^1.0.2", + "tiny-warning": "^1.0.0", + "value-equal": "^1.0.1" } }, - "node_modules/@jridgewell/remapping": { - "version": "2.3.5", - "resolved": "https://registry.npmjs.org/@jridgewell/remapping/-/remapping-2.3.5.tgz", - "integrity": "sha512-LI9u/+laYG4Ds1TDKSJW2YPrIlcVYOwi2fUC6xB43lueCjgxV4lffOCZCtYFiH6TNOX+tQKXx97T4IKHbhyHEQ==", + "node_modules/@docusaurus/theme-classic/node_modules/isarray": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", + "integrity": "sha512-D2S+3GLxWH+uhrNEcoh/fnmYeP8E8/zHl644d/jdA0g2uyXvy3sb0qxotE+ne0LtccHknQzWwZEzhak7oJ0COQ==", + "license": "MIT" + }, + "node_modules/@docusaurus/theme-classic/node_modules/path-to-regexp": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-1.9.0.tgz", + "integrity": "sha512-xIp7/apCFJuUHdDLWe8O1HIkb0kQrOMb/0u6FXQjemHn/ii5LrIzU6bdECnsiTF/GjZkMEKg1xdiZwNqDYlZ6g==", "license": "MIT", "dependencies": { - "@jridgewell/gen-mapping": "^0.3.5", - "@jridgewell/trace-mapping": "^0.3.24" + "isarray": "0.0.1" } }, - "node_modules/@jridgewell/resolve-uri": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz", - "integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==", - "license": "MIT", - "engines": { - "node": ">=6.0.0" - } + "node_modules/@docusaurus/theme-classic/node_modules/react-is": { + "version": "16.13.1", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz", + "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==", + "license": "MIT" }, - "node_modules/@jridgewell/source-map": { - "version": "0.3.11", - "resolved": "https://registry.npmjs.org/@jridgewell/source-map/-/source-map-0.3.11.tgz", - "integrity": "sha512-ZMp1V8ZFcPG5dIWnQLr3NSI1MiCU7UETdS/A0G8V/XWHvJv3ZsFqutJn1Y5RPmAPX6F3BiE397OqveU/9NCuIA==", + "node_modules/@docusaurus/theme-classic/node_modules/react-router": { + "version": "5.3.4", + "resolved": "https://registry.npmjs.org/react-router/-/react-router-5.3.4.tgz", + "integrity": "sha512-Ys9K+ppnJah3QuaRiLxk+jDWOR1MekYQrlytiXxC1RyfbdsZkS5pvKAzCCr031xHixZwpnsYNT5xysdFHQaYsA==", "license": "MIT", "dependencies": { - "@jridgewell/gen-mapping": "^0.3.5", - "@jridgewell/trace-mapping": "^0.3.25" + "@babel/runtime": "^7.12.13", + "history": "^4.9.0", + "hoist-non-react-statics": "^3.1.0", + "loose-envify": "^1.3.1", + "path-to-regexp": "^1.7.0", + "prop-types": "^15.6.2", + "react-is": "^16.6.0", + "tiny-invariant": "^1.0.2", + "tiny-warning": "^1.0.0" + }, + "peerDependencies": { + "react": ">=15" } }, - "node_modules/@jridgewell/sourcemap-codec": { - "version": "1.5.5", - "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.5.tgz", - "integrity": "sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og==", - "license": "MIT" - }, - "node_modules/@jridgewell/trace-mapping": { - "version": "0.3.31", - "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.31.tgz", - "integrity": "sha512-zzNR+SdQSDJzc8joaeP8QQoCQr8NuYx2dIIytl1QeBEZHJ9uW6hebsrYgbz8hJwUQao3TWCMtmfV8Nu1twOLAw==", + "node_modules/@docusaurus/theme-classic/node_modules/react-router-dom": { + "version": "5.3.4", + "resolved": "https://registry.npmjs.org/react-router-dom/-/react-router-dom-5.3.4.tgz", + "integrity": "sha512-m4EqFMHv/Ih4kpcBCONHbkT68KoAeHN4p3lAGoNryfHi0dMy0kCzEZakiKRsvg5wHZ/JLrLW8o8KomWiz/qbYQ==", "license": "MIT", "dependencies": { - "@jridgewell/resolve-uri": "^3.1.0", - "@jridgewell/sourcemap-codec": "^1.4.14" + "@babel/runtime": "^7.12.13", + "history": "^4.9.0", + "loose-envify": "^1.3.1", + "prop-types": "^15.6.2", + "react-router": "5.3.4", + "tiny-invariant": "^1.0.2", + "tiny-warning": "^1.0.0" + }, + "peerDependencies": { + "react": ">=15" } }, - "node_modules/@js-sdsl/ordered-map": { - "version": "4.4.2", - "resolved": "https://registry.npmjs.org/@js-sdsl/ordered-map/-/ordered-map-4.4.2.tgz", - "integrity": "sha512-iUKgm52T8HOE/makSxjqoWhe95ZJA1/G1sYsGev2JDKUSS14KAgg1LHb+Ba+IPow0xflbnSkOsZcO08C7w1gYw==", + "node_modules/@docusaurus/theme-common": { + "version": "3.9.2", + "resolved": "https://registry.npmjs.org/@docusaurus/theme-common/-/theme-common-3.9.2.tgz", + "integrity": "sha512-6c4DAbR6n6nPbnZhY2V3tzpnKnGL+6aOsLvFL26VRqhlczli9eWG0VDUNoCQEPnGwDMhPS42UhSAnz5pThm5Ag==", "license": "MIT", - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/js-sdsl" - } - }, - "node_modules/@lit-labs/ssr-dom-shim": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/@lit-labs/ssr-dom-shim/-/ssr-dom-shim-1.4.0.tgz", - "integrity": "sha512-ficsEARKnmmW5njugNYKipTm4SFnbik7CXtoencDZzmzo/dQ+2Q0bgkzJuoJP20Aj0F+izzJjOqsnkd6F/o1bw==", - "license": "BSD-3-Clause" - }, - "node_modules/@lit/reactive-element": { - "version": "1.6.3", - "resolved": "https://registry.npmjs.org/@lit/reactive-element/-/reactive-element-1.6.3.tgz", - "integrity": "sha512-QuTgnG52Poic7uM1AN5yJ09QMe0O28e10XzSvWDz02TJiiKee4stsiownEIadWm8nYzyDAyT+gKzUoZmiWQtsQ==", - "license": "BSD-3-Clause", "dependencies": { - "@lit-labs/ssr-dom-shim": "^1.0.0" + "@docusaurus/mdx-loader": "3.9.2", + "@docusaurus/module-type-aliases": "3.9.2", + "@docusaurus/utils": "3.9.2", + "@docusaurus/utils-common": "3.9.2", + "@types/history": "^4.7.11", + "@types/react": "*", + "@types/react-router-config": "*", + "clsx": "^2.0.0", + "parse-numeric-range": "^1.3.0", + "prism-react-renderer": "^2.3.0", + "tslib": "^2.6.0", + "utility-types": "^3.10.0" + }, + "engines": { + "node": ">=20.0" + }, + "peerDependencies": { + "@docusaurus/plugin-content-docs": "*", + "react": "^18.0.0 || ^19.0.0", + "react-dom": "^18.0.0 || ^19.0.0" } }, - "node_modules/@ljharb/through": { - "version": "2.3.14", - "resolved": "https://registry.npmjs.org/@ljharb/through/-/through-2.3.14.tgz", - "integrity": "sha512-ajBvlKpWucBB17FuQYUShqpqy8GRgYEpJW0vWJbUu1CV9lWyrDCapy0lScU8T8Z6qn49sSwJB3+M+evYIdGg+A==", + "node_modules/@docusaurus/theme-mermaid": { + "version": "3.9.2", + "resolved": "https://registry.npmjs.org/@docusaurus/theme-mermaid/-/theme-mermaid-3.9.2.tgz", + "integrity": "sha512-5vhShRDq/ntLzdInsQkTdoKWSzw8d1jB17sNPYhA/KvYYFXfuVEGHLM6nrf8MFbV8TruAHDG21Fn3W4lO8GaDw==", "license": "MIT", "dependencies": { - "call-bind": "^1.0.8" + "@docusaurus/core": "3.9.2", + "@docusaurus/module-type-aliases": "3.9.2", + "@docusaurus/theme-common": "3.9.2", + "@docusaurus/types": "3.9.2", + "@docusaurus/utils-validation": "3.9.2", + "mermaid": ">=11.6.0", + "tslib": "^2.6.0" }, "engines": { - "node": ">= 0.4" + "node": ">=20.0" + }, + "peerDependencies": { + "@mermaid-js/layout-elk": "^0.1.9", + "react": "^18.0.0 || ^19.0.0", + "react-dom": "^18.0.0 || ^19.0.0" + }, + "peerDependenciesMeta": { + "@mermaid-js/layout-elk": { + "optional": true + } } }, - "node_modules/@lukeed/csprng": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@lukeed/csprng/-/csprng-1.1.0.tgz", - "integrity": "sha512-Z7C/xXCiGWsg0KuKsHTKJxbWhpI3Vs5GwLfOean7MGyVFGqdRgBbAjOCh6u4bbjPc/8MJ2pZmK/0DLdCbivLDA==", - "license": "MIT", + "node_modules/@docusaurus/theme-search-algolia": { + "version": "3.9.2", + "resolved": "https://registry.npmjs.org/@docusaurus/theme-search-algolia/-/theme-search-algolia-3.9.2.tgz", + "integrity": "sha512-GBDSFNwjnh5/LdkxCKQHkgO2pIMX1447BxYUBG2wBiajS21uj64a+gH/qlbQjDLxmGrbrllBrtJkUHxIsiwRnw==", + "license": "MIT", + "dependencies": { + "@docsearch/react": "^3.9.0 || ^4.1.0", + "@docusaurus/core": "3.9.2", + "@docusaurus/logger": "3.9.2", + "@docusaurus/plugin-content-docs": "3.9.2", + "@docusaurus/theme-common": "3.9.2", + "@docusaurus/theme-translations": "3.9.2", + "@docusaurus/utils": "3.9.2", + "@docusaurus/utils-validation": "3.9.2", + "algoliasearch": "^5.37.0", + "algoliasearch-helper": "^3.26.0", + "clsx": "^2.0.0", + "eta": "^2.2.0", + "fs-extra": "^11.1.1", + "lodash": "^4.17.21", + "tslib": "^2.6.0", + "utility-types": "^3.10.0" + }, "engines": { - "node": ">=8" + "node": ">=20.0" + }, + "peerDependencies": { + "react": "^18.0.0 || ^19.0.0", + "react-dom": "^18.0.0 || ^19.0.0" } }, - "node_modules/@manypkg/find-root": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@manypkg/find-root/-/find-root-1.1.0.tgz", - "integrity": "sha512-mki5uBvhHzO8kYYix/WRy2WX8S3B5wdVSc9D6KcU5lQNglP2yt58/VfLuAK49glRXChosY8ap2oJ1qgma3GUVA==", - "dev": true, + "node_modules/@docusaurus/theme-search-algolia/node_modules/fs-extra": { + "version": "11.3.2", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-11.3.2.tgz", + "integrity": "sha512-Xr9F6z6up6Ws+NjzMCZc6WXg2YFRlrLP9NQDO3VQrWrfiojdhS56TzueT88ze0uBdCTwEIhQ3ptnmKeWGFAe0A==", "license": "MIT", "dependencies": { - "@babel/runtime": "^7.5.5", - "@types/node": "^12.7.1", - "find-up": "^4.1.0", - "fs-extra": "^8.1.0" + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + }, + "engines": { + "node": ">=14.14" } }, - "node_modules/@manypkg/find-root/node_modules/@types/node": { - "version": "12.20.55", - "resolved": "https://registry.npmjs.org/@types/node/-/node-12.20.55.tgz", - "integrity": "sha512-J8xLz7q2OFulZ2cyGTLE1TbbZcjpno7FaN6zdJNrgAdrJ+DZzh/uFR6YrTb4C+nXakvud8Q4+rbhoIWlYQbUFQ==", - "dev": true, - "license": "MIT" - }, - "node_modules/@manypkg/find-root/node_modules/find-up": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", - "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", - "dev": true, + "node_modules/@docusaurus/theme-search-algolia/node_modules/jsonfile": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.2.0.tgz", + "integrity": "sha512-FGuPw30AdOIUTRMC2OMRtQV+jkVj2cfPqSeWXv1NEAJ1qZ5zb1X6z1mFhbfOB/iy3ssJCD+3KuZ8r8C3uVFlAg==", "license": "MIT", "dependencies": { - "locate-path": "^5.0.0", - "path-exists": "^4.0.0" + "universalify": "^2.0.0" }, + "optionalDependencies": { + "graceful-fs": "^4.1.6" + } + }, + "node_modules/@docusaurus/theme-search-algolia/node_modules/universalify": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.1.tgz", + "integrity": "sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==", + "license": "MIT", "engines": { - "node": ">=8" + "node": ">= 10.0.0" } }, - "node_modules/@manypkg/find-root/node_modules/fs-extra": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-8.1.0.tgz", - "integrity": "sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g==", - "dev": true, + "node_modules/@docusaurus/theme-translations": { + "version": "3.9.2", + "resolved": "https://registry.npmjs.org/@docusaurus/theme-translations/-/theme-translations-3.9.2.tgz", + "integrity": "sha512-vIryvpP18ON9T9rjgMRFLr2xJVDpw1rtagEGf8Ccce4CkTrvM/fRB8N2nyWYOW5u3DdjkwKw5fBa+3tbn9P4PA==", "license": "MIT", "dependencies": { - "graceful-fs": "^4.2.0", - "jsonfile": "^4.0.0", - "universalify": "^0.1.0" + "fs-extra": "^11.1.1", + "tslib": "^2.6.0" }, "engines": { - "node": ">=6 <7 || >=8" + "node": ">=20.0" } }, - "node_modules/@manypkg/find-root/node_modules/locate-path": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", - "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", - "dev": true, + "node_modules/@docusaurus/theme-translations/node_modules/fs-extra": { + "version": "11.3.2", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-11.3.2.tgz", + "integrity": "sha512-Xr9F6z6up6Ws+NjzMCZc6WXg2YFRlrLP9NQDO3VQrWrfiojdhS56TzueT88ze0uBdCTwEIhQ3ptnmKeWGFAe0A==", "license": "MIT", "dependencies": { - "p-locate": "^4.1.0" + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" }, "engines": { - "node": ">=8" + "node": ">=14.14" } }, - "node_modules/@manypkg/find-root/node_modules/p-locate": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", - "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", - "dev": true, + "node_modules/@docusaurus/theme-translations/node_modules/jsonfile": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.2.0.tgz", + "integrity": "sha512-FGuPw30AdOIUTRMC2OMRtQV+jkVj2cfPqSeWXv1NEAJ1qZ5zb1X6z1mFhbfOB/iy3ssJCD+3KuZ8r8C3uVFlAg==", "license": "MIT", "dependencies": { - "p-limit": "^2.2.0" + "universalify": "^2.0.0" }, - "engines": { - "node": ">=8" + "optionalDependencies": { + "graceful-fs": "^4.1.6" } }, - "node_modules/@manypkg/get-packages": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/@manypkg/get-packages/-/get-packages-1.1.3.tgz", - "integrity": "sha512-fo+QhuU3qE/2TQMQmbVMqaQ6EWbMhi4ABWP+O4AM1NqPBuy0OrApV5LO6BrrgnhtAHS2NH6RrVk9OL181tTi8A==", - "dev": true, + "node_modules/@docusaurus/theme-translations/node_modules/universalify": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.1.tgz", + "integrity": "sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==", "license": "MIT", - "dependencies": { - "@babel/runtime": "^7.5.5", - "@changesets/types": "^4.0.1", - "@manypkg/find-root": "^1.1.0", - "fs-extra": "^8.1.0", - "globby": "^11.0.0", - "read-yaml-file": "^1.1.0" + "engines": { + "node": ">= 10.0.0" } }, - "node_modules/@manypkg/get-packages/node_modules/@changesets/types": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/@changesets/types/-/types-4.1.0.tgz", - "integrity": "sha512-LDQvVDv5Kb50ny2s25Fhm3d9QSZimsoUGBsUioj6MC3qbMUCuC8GPIvk/M6IvXx3lYhAs0lwWUQLb+VIEUCECw==", + "node_modules/@docusaurus/tsconfig": { + "version": "3.9.2", + "resolved": "https://registry.npmjs.org/@docusaurus/tsconfig/-/tsconfig-3.9.2.tgz", + "integrity": "sha512-j6/Fp4Rlpxsc632cnRnl5HpOWeb6ZKssDj6/XzzAzVGXXfm9Eptx3rxCC+fDzySn9fHTS+CWJjPineCR1bB5WQ==", "dev": true, "license": "MIT" }, - "node_modules/@manypkg/get-packages/node_modules/fs-extra": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-8.1.0.tgz", - "integrity": "sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g==", - "dev": true, + "node_modules/@docusaurus/types": { + "version": "3.9.2", + "resolved": "https://registry.npmjs.org/@docusaurus/types/-/types-3.9.2.tgz", + "integrity": "sha512-Ux1JUNswg+EfUEmajJjyhIohKceitY/yzjRUpu04WXgvVz+fbhVC0p+R0JhvEu4ytw8zIAys2hrdpQPBHRIa8Q==", "license": "MIT", "dependencies": { - "graceful-fs": "^4.2.0", - "jsonfile": "^4.0.0", - "universalify": "^0.1.0" + "@mdx-js/mdx": "^3.0.0", + "@types/history": "^4.7.11", + "@types/mdast": "^4.0.2", + "@types/react": "*", + "commander": "^5.1.0", + "joi": "^17.9.2", + "react-helmet-async": "npm:@slorber/react-helmet-async@1.3.0", + "utility-types": "^3.10.0", + "webpack": "^5.95.0", + "webpack-merge": "^5.9.0" }, - "engines": { - "node": ">=6 <7 || >=8" + "peerDependencies": { + "react": "^18.0.0 || ^19.0.0", + "react-dom": "^18.0.0 || ^19.0.0" } }, - "node_modules/@mapbox/node-pre-gyp": { - "version": "1.0.11", - "resolved": "https://registry.npmjs.org/@mapbox/node-pre-gyp/-/node-pre-gyp-1.0.11.tgz", - "integrity": "sha512-Yhlar6v9WQgUp/He7BdgzOz8lqMQ8sU+jkCq7Wx8Myc5YFJLbEe7lgui/V7G1qB1DJykHSGwreceSaD60Y0PUQ==", - "license": "BSD-3-Clause", - "optional": true, + "node_modules/@docusaurus/types/node_modules/@types/mdast": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/@types/mdast/-/mdast-4.0.4.tgz", + "integrity": "sha512-kGaNbPh1k7AFzgpud/gMdvIm5xuECykRR+JnWKQno9TAXVa6WIVCGTPvYGekIDL4uwCZQSYbUxNBSb1aUo79oA==", + "license": "MIT", "dependencies": { - "detect-libc": "^2.0.0", - "https-proxy-agent": "^5.0.0", - "make-dir": "^3.1.0", - "node-fetch": "^2.6.7", - "nopt": "^5.0.0", - "npmlog": "^5.0.1", - "rimraf": "^3.0.2", - "semver": "^7.3.5", - "tar": "^6.1.11" - }, - "bin": { - "node-pre-gyp": "bin/node-pre-gyp" + "@types/unist": "*" } }, - "node_modules/@mapbox/node-pre-gyp/node_modules/glob": { - "version": "7.2.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", - "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", - "deprecated": "Glob versions prior to v9 are no longer supported", - "license": "ISC", - "optional": true, + "node_modules/@docusaurus/types/node_modules/ajv": { + "version": "8.17.1", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.17.1.tgz", + "integrity": "sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g==", + "license": "MIT", "dependencies": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.1.1", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - }, - "engines": { - "node": "*" + "fast-deep-equal": "^3.1.3", + "fast-uri": "^3.0.1", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2" }, "funding": { - "url": "https://github.com/sponsors/isaacs" + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" } }, - "node_modules/@mapbox/node-pre-gyp/node_modules/rimraf": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", - "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", - "deprecated": "Rimraf versions prior to v4 are no longer supported", - "license": "ISC", - "optional": true, + "node_modules/@docusaurus/types/node_modules/ajv-keywords": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-5.1.0.tgz", + "integrity": "sha512-YCS/JNFAUyr5vAuhk1DWm1CBxRHW9LbJ2ozWeemrIqpbsqKjHVxYPyi5GC0rjZIT5JxJ3virVTS8wk4i/Z+krw==", + "license": "MIT", "dependencies": { - "glob": "^7.1.3" - }, - "bin": { - "rimraf": "bin.js" + "fast-deep-equal": "^3.1.3" }, - "funding": { - "url": "https://github.com/sponsors/isaacs" + "peerDependencies": { + "ajv": "^8.8.2" } }, - "node_modules/@mapbox/node-pre-gyp/node_modules/semver": { - "version": "7.7.2", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.2.tgz", - "integrity": "sha512-RF0Fw+rO5AMf9MAyaRXI4AV0Ulj5lMHqVxxdSgiVbixSCXoEmmX/jk0CuJw4+3SqroYO9VoUh+HcuJivvtJemA==", - "license": "ISC", - "optional": true, - "bin": { - "semver": "bin/semver.js" - }, + "node_modules/@docusaurus/types/node_modules/commander": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-5.1.0.tgz", + "integrity": "sha512-P0CysNDQ7rtVw4QIQtm+MRxV66vKFSvlsQvGYXZWR3qFU0jlMKHZZZgw8e+8DSah4UDKMqnknRDQz+xuQXQ/Zg==", + "license": "MIT", "engines": { - "node": ">=10" + "node": ">= 6" } }, - "node_modules/@mass-payout/backend": { - "resolved": "apps/mass-payout/backend", - "link": true - }, - "node_modules/@mass-payout/contracts": { - "resolved": "packages/mass-payout/contracts", - "link": true - }, - "node_modules/@mass-payout/frontend": { - "resolved": "apps/mass-payout/frontend", - "link": true - }, - "node_modules/@mass-payout/sdk": { - "resolved": "packages/mass-payout/sdk", - "link": true + "node_modules/@docusaurus/types/node_modules/es-module-lexer": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-2.0.0.tgz", + "integrity": "sha512-5POEcUuZybH7IdmGsD8wlf0AI55wMecM9rVBTI/qEAy2c1kTOm3DjFYjrBdI2K3BaJjJYfYFeRtM0t9ssnRuxw==", + "license": "MIT" }, - "node_modules/@mattrglobal/bbs-signatures": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/@mattrglobal/bbs-signatures/-/bbs-signatures-1.4.0.tgz", - "integrity": "sha512-uBK1IWw48fqloO9W/yoDncTs9rfwfbG/53cOrrCQL7XkyZe4DtB40HcLbi3i+yxTYs5wytf1Qr4Z5RpzpW10jw==", - "license": "Apache-2.0", + "node_modules/@docusaurus/types/node_modules/eslint-scope": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", + "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==", + "license": "BSD-2-Clause", "dependencies": { - "@stablelib/random": "1.0.0" + "esrecurse": "^4.3.0", + "estraverse": "^4.1.1" }, "engines": { - "node": ">=16" - }, - "optionalDependencies": { - "@mattrglobal/node-bbs-signatures": "0.18.1" + "node": ">=8.0.0" } }, - "node_modules/@mattrglobal/node-bbs-signatures": { - "version": "0.18.1", - "resolved": "https://registry.npmjs.org/@mattrglobal/node-bbs-signatures/-/node-bbs-signatures-0.18.1.tgz", - "integrity": "sha512-s9ccL/1TTvCP1N//4QR84j/d5D/stx/AI1kPcRgiE4O3KrxyF7ZdL9ca8fmFuN6yh9LAbn/OiGRnOXgvn38Dgg==", - "hasInstallScript": true, - "license": "Apache-2.0", - "optional": true, - "dependencies": { - "@mapbox/node-pre-gyp": "1.0.11", - "neon-cli": "0.10.1" - }, + "node_modules/@docusaurus/types/node_modules/estraverse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", + "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", + "license": "BSD-2-Clause", "engines": { - "node": ">=14", - "yarn": "1.x" + "node": ">=4.0" } }, - "node_modules/@metamask/detect-provider": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/@metamask/detect-provider/-/detect-provider-2.0.0.tgz", - "integrity": "sha512-sFpN+TX13E9fdBDh9lvQeZdJn4qYoRb/6QF2oZZK/Pn559IhCFacPMU1rMuqyXoFQF3JSJfii2l98B87QDPeCQ==", - "license": "ISC", + "node_modules/@docusaurus/types/node_modules/json-schema-traverse": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", + "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", + "license": "MIT" + }, + "node_modules/@docusaurus/types/node_modules/mime-db": { + "version": "1.52.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", + "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", + "license": "MIT", "engines": { - "node": ">=14.0.0" + "node": ">= 0.6" } }, - "node_modules/@metamask/json-rpc-engine": { - "version": "7.3.3", - "resolved": "https://registry.npmjs.org/@metamask/json-rpc-engine/-/json-rpc-engine-7.3.3.tgz", - "integrity": "sha512-dwZPq8wx9yV3IX2caLi9q9xZBw2XeIoYqdyihDDDpuHVCEiqadJLwqM3zy+uwf6F1QYQ65A8aOMQg1Uw7LMLNg==", - "license": "ISC", + "node_modules/@docusaurus/types/node_modules/mime-types": { + "version": "2.1.35", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", + "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", + "license": "MIT", "dependencies": { - "@metamask/rpc-errors": "^6.2.1", - "@metamask/safe-event-emitter": "^3.0.0", - "@metamask/utils": "^8.3.0" + "mime-db": "1.52.0" }, "engines": { - "node": ">=16.0.0" + "node": ">= 0.6" } }, - "node_modules/@metamask/object-multiplex": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/@metamask/object-multiplex/-/object-multiplex-1.3.0.tgz", - "integrity": "sha512-czcQeVYdSNtabd+NcYQnrM69MciiJyd1qvKH8WM2Id3C0ZiUUX5Xa/MK+/VUk633DBhVOwdNzAKIQ33lGyA+eQ==", - "license": "ISC", + "node_modules/@docusaurus/types/node_modules/schema-utils": { + "version": "4.3.3", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-4.3.3.tgz", + "integrity": "sha512-eflK8wEtyOE6+hsaRVPxvUKYCpRgzLqDTb8krvAsRIwOGlHoSgYLgBXoubGgLd2fT41/OUYdb48v4k4WWHQurA==", + "license": "MIT", "dependencies": { - "end-of-stream": "^1.4.4", - "once": "^1.4.0", - "readable-stream": "^2.3.3" + "@types/json-schema": "^7.0.9", + "ajv": "^8.9.0", + "ajv-formats": "^2.1.1", + "ajv-keywords": "^5.1.0" }, "engines": { - "node": ">=12.0.0" + "node": ">= 10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" } }, - "node_modules/@metamask/providers": { - "version": "12.0.0", - "resolved": "https://registry.npmjs.org/@metamask/providers/-/providers-12.0.0.tgz", - "integrity": "sha512-NkrSvOF8v8kDz9f2TY1AYK19hJdpYbYhbXWhjmmmXrSMYotn+o7ZV1b1Yd0fqD/HKVL0Vd2BWBUT9U0ggIDTEA==", + "node_modules/@docusaurus/types/node_modules/webpack": { + "version": "5.104.1", + "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.104.1.tgz", + "integrity": "sha512-Qphch25abbMNtekmEGJmeRUhLDbe+QfiWTiqpKYkpCOWY64v9eyl+KRRLmqOFA2AvKPpc9DC6+u2n76tQLBoaA==", "license": "MIT", "dependencies": { - "@metamask/json-rpc-engine": "^7.1.1", - "@metamask/object-multiplex": "^1.1.0", - "@metamask/rpc-errors": "^6.0.0", - "@metamask/safe-event-emitter": "^3.0.0", - "@metamask/utils": "^8.1.0", - "detect-browser": "^5.2.0", - "extension-port-stream": "^2.1.1", - "fast-deep-equal": "^3.1.3", - "is-stream": "^2.0.0", - "json-rpc-middleware-stream": "^4.2.1", - "pump": "^3.0.0", - "webextension-polyfill": "^0.10.0" + "@types/eslint-scope": "^3.7.7", + "@types/estree": "^1.0.8", + "@types/json-schema": "^7.0.15", + "@webassemblyjs/ast": "^1.14.1", + "@webassemblyjs/wasm-edit": "^1.14.1", + "@webassemblyjs/wasm-parser": "^1.14.1", + "acorn": "^8.15.0", + "acorn-import-phases": "^1.0.3", + "browserslist": "^4.28.1", + "chrome-trace-event": "^1.0.2", + "enhanced-resolve": "^5.17.4", + "es-module-lexer": "^2.0.0", + "eslint-scope": "5.1.1", + "events": "^3.2.0", + "glob-to-regexp": "^0.4.1", + "graceful-fs": "^4.2.11", + "json-parse-even-better-errors": "^2.3.1", + "loader-runner": "^4.3.1", + "mime-types": "^2.1.27", + "neo-async": "^2.6.2", + "schema-utils": "^4.3.3", + "tapable": "^2.3.0", + "terser-webpack-plugin": "^5.3.16", + "watchpack": "^2.4.4", + "webpack-sources": "^3.3.3" + }, + "bin": { + "webpack": "bin/webpack.js" }, "engines": { - "node": ">=16.0.0" + "node": ">=10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependenciesMeta": { + "webpack-cli": { + "optional": true + } } }, - "node_modules/@metamask/rpc-errors": { - "version": "6.4.0", - "resolved": "https://registry.npmjs.org/@metamask/rpc-errors/-/rpc-errors-6.4.0.tgz", - "integrity": "sha512-1ugFO1UoirU2esS3juZanS/Fo8C8XYocCuBpfZI5N7ECtoG+zu0wF+uWZASik6CkO6w9n/Iebt4iI4pT0vptpg==", + "node_modules/@docusaurus/types/node_modules/webpack-merge": { + "version": "5.10.0", + "resolved": "https://registry.npmjs.org/webpack-merge/-/webpack-merge-5.10.0.tgz", + "integrity": "sha512-+4zXKdx7UnO+1jaN4l2lHVD+mFvnlZQP/6ljaJVb4SZiwIKeUnrT5l0gkT8z+n4hKpC+jpOv6O9R+gLtag7pSA==", "license": "MIT", "dependencies": { - "@metamask/utils": "^9.0.0", - "fast-safe-stringify": "^2.0.6" + "clone-deep": "^4.0.1", + "flat": "^5.0.2", + "wildcard": "^2.0.0" }, "engines": { - "node": ">=16.0.0" + "node": ">=10.0.0" } }, - "node_modules/@metamask/rpc-errors/node_modules/@metamask/utils": { - "version": "9.3.0", - "resolved": "https://registry.npmjs.org/@metamask/utils/-/utils-9.3.0.tgz", - "integrity": "sha512-w8CVbdkDrVXFJbfBSlDfafDR6BAkpDmv1bC1UJVCoVny5tW2RKAdn9i68Xf7asYT4TnUhl/hN4zfUiKQq9II4g==", - "license": "ISC", + "node_modules/@docusaurus/utils": { + "version": "3.9.2", + "resolved": "https://registry.npmjs.org/@docusaurus/utils/-/utils-3.9.2.tgz", + "integrity": "sha512-lBSBiRruFurFKXr5Hbsl2thmGweAPmddhF3jb99U4EMDA5L+e5Y1rAkOS07Nvrup7HUMBDrCV45meaxZnt28nQ==", + "license": "MIT", "dependencies": { - "@ethereumjs/tx": "^4.2.0", - "@metamask/superstruct": "^3.1.0", - "@noble/hashes": "^1.3.1", - "@scure/base": "^1.1.3", - "@types/debug": "^4.1.7", - "debug": "^4.3.4", - "pony-cause": "^2.1.10", - "semver": "^7.5.4", - "uuid": "^9.0.1" + "@docusaurus/logger": "3.9.2", + "@docusaurus/types": "3.9.2", + "@docusaurus/utils-common": "3.9.2", + "escape-string-regexp": "^4.0.0", + "execa": "5.1.1", + "file-loader": "^6.2.0", + "fs-extra": "^11.1.1", + "github-slugger": "^1.5.0", + "globby": "^11.1.0", + "gray-matter": "^4.0.3", + "jiti": "^1.20.0", + "js-yaml": "^4.1.0", + "lodash": "^4.17.21", + "micromatch": "^4.0.5", + "p-queue": "^6.6.2", + "prompts": "^2.4.2", + "resolve-pathname": "^3.0.0", + "tslib": "^2.6.0", + "url-loader": "^4.1.1", + "utility-types": "^3.10.0", + "webpack": "^5.88.1" }, "engines": { - "node": ">=16.0.0" + "node": ">=20.0" } }, - "node_modules/@metamask/rpc-errors/node_modules/semver": { - "version": "7.7.2", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.2.tgz", - "integrity": "sha512-RF0Fw+rO5AMf9MAyaRXI4AV0Ulj5lMHqVxxdSgiVbixSCXoEmmX/jk0CuJw4+3SqroYO9VoUh+HcuJivvtJemA==", - "license": "ISC", - "bin": { - "semver": "bin/semver.js" + "node_modules/@docusaurus/utils-common": { + "version": "3.9.2", + "resolved": "https://registry.npmjs.org/@docusaurus/utils-common/-/utils-common-3.9.2.tgz", + "integrity": "sha512-I53UC1QctruA6SWLvbjbhCpAw7+X7PePoe5pYcwTOEXD/PxeP8LnECAhTHHwWCblyUX5bMi4QLRkxvyZ+IT8Aw==", + "license": "MIT", + "dependencies": { + "@docusaurus/types": "3.9.2", + "tslib": "^2.6.0" }, "engines": { - "node": ">=10" + "node": ">=20.0" } }, - "node_modules/@metamask/safe-event-emitter": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/@metamask/safe-event-emitter/-/safe-event-emitter-3.1.2.tgz", - "integrity": "sha512-5yb2gMI1BDm0JybZezeoX/3XhPDOtTbcFvpTXM9kxsoZjPZFh4XciqRbpD6N86HYZqWDhEaKUDuOyR0sQHEjMA==", - "license": "ISC", + "node_modules/@docusaurus/utils-validation": { + "version": "3.9.2", + "resolved": "https://registry.npmjs.org/@docusaurus/utils-validation/-/utils-validation-3.9.2.tgz", + "integrity": "sha512-l7yk3X5VnNmATbwijJkexdhulNsQaNDwoagiwujXoxFbWLcxHQqNQ+c/IAlzrfMMOfa/8xSBZ7KEKDesE/2J7A==", + "license": "MIT", + "dependencies": { + "@docusaurus/logger": "3.9.2", + "@docusaurus/utils": "3.9.2", + "@docusaurus/utils-common": "3.9.2", + "fs-extra": "^11.2.0", + "joi": "^17.9.2", + "js-yaml": "^4.1.0", + "lodash": "^4.17.21", + "tslib": "^2.6.0" + }, "engines": { - "node": ">=12.0.0" + "node": ">=20.0" } }, - "node_modules/@metamask/superstruct": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/@metamask/superstruct/-/superstruct-3.2.1.tgz", - "integrity": "sha512-fLgJnDOXFmuVlB38rUN5SmU7hAFQcCjrg3Vrxz67KTY7YHFnSNEKvX4avmEBdOI0yTCxZjwMCFEqsC8k2+Wd3g==", + "node_modules/@docusaurus/utils-validation/node_modules/fs-extra": { + "version": "11.3.2", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-11.3.2.tgz", + "integrity": "sha512-Xr9F6z6up6Ws+NjzMCZc6WXg2YFRlrLP9NQDO3VQrWrfiojdhS56TzueT88ze0uBdCTwEIhQ3ptnmKeWGFAe0A==", "license": "MIT", + "dependencies": { + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + }, "engines": { - "node": ">=16.0.0" + "node": ">=14.14" } }, - "node_modules/@metamask/utils": { - "version": "8.5.0", - "resolved": "https://registry.npmjs.org/@metamask/utils/-/utils-8.5.0.tgz", - "integrity": "sha512-I6bkduevXb72TIM9q2LRO63JSsF9EXduh3sBr9oybNX2hNNpr/j1tEjXrsG0Uabm4MJ1xkGAQEMwifvKZIkyxQ==", - "license": "ISC", + "node_modules/@docusaurus/utils-validation/node_modules/jsonfile": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.2.0.tgz", + "integrity": "sha512-FGuPw30AdOIUTRMC2OMRtQV+jkVj2cfPqSeWXv1NEAJ1qZ5zb1X6z1mFhbfOB/iy3ssJCD+3KuZ8r8C3uVFlAg==", + "license": "MIT", "dependencies": { - "@ethereumjs/tx": "^4.2.0", - "@metamask/superstruct": "^3.0.0", - "@noble/hashes": "^1.3.1", - "@scure/base": "^1.1.3", - "@types/debug": "^4.1.7", - "debug": "^4.3.4", - "pony-cause": "^2.1.10", - "semver": "^7.5.4", - "uuid": "^9.0.1" + "universalify": "^2.0.0" }, - "engines": { - "node": ">=16.0.0" + "optionalDependencies": { + "graceful-fs": "^4.1.6" } }, - "node_modules/@metamask/utils/node_modules/semver": { - "version": "7.7.2", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.2.tgz", - "integrity": "sha512-RF0Fw+rO5AMf9MAyaRXI4AV0Ulj5lMHqVxxdSgiVbixSCXoEmmX/jk0CuJw4+3SqroYO9VoUh+HcuJivvtJemA==", - "license": "ISC", - "bin": { - "semver": "bin/semver.js" - }, + "node_modules/@docusaurus/utils-validation/node_modules/universalify": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.1.tgz", + "integrity": "sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==", + "license": "MIT", "engines": { - "node": ">=10" + "node": ">= 10.0.0" } }, - "node_modules/@microsoft/tsdoc": { - "version": "0.15.1", - "resolved": "https://registry.npmjs.org/@microsoft/tsdoc/-/tsdoc-0.15.1.tgz", - "integrity": "sha512-4aErSrCR/On/e5G2hDP0wjooqDdauzEbIq8hIkIe5pXV0rtWJZvdCEKL0ykZxex+IxIwBp0eGeV48hQN07dXtw==", - "license": "MIT" - }, - "node_modules/@motionone/animation": { - "version": "10.18.0", - "resolved": "https://registry.npmjs.org/@motionone/animation/-/animation-10.18.0.tgz", - "integrity": "sha512-9z2p5GFGCm0gBsZbi8rVMOAJCtw1WqBTIPw3ozk06gDvZInBPIsQcHgYogEJ4yuHJ+akuW8g1SEIOpTOvYs8hw==", + "node_modules/@docusaurus/utils/node_modules/fs-extra": { + "version": "11.3.2", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-11.3.2.tgz", + "integrity": "sha512-Xr9F6z6up6Ws+NjzMCZc6WXg2YFRlrLP9NQDO3VQrWrfiojdhS56TzueT88ze0uBdCTwEIhQ3ptnmKeWGFAe0A==", "license": "MIT", "dependencies": { - "@motionone/easing": "^10.18.0", - "@motionone/types": "^10.17.1", - "@motionone/utils": "^10.18.0", - "tslib": "^2.3.1" + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + }, + "engines": { + "node": ">=14.14" } }, - "node_modules/@motionone/dom": { - "version": "10.18.0", - "resolved": "https://registry.npmjs.org/@motionone/dom/-/dom-10.18.0.tgz", - "integrity": "sha512-bKLP7E0eyO4B2UaHBBN55tnppwRnaE3KFfh3Ps9HhnAkar3Cb69kUCJY9as8LrccVYKgHA+JY5dOQqJLOPhF5A==", + "node_modules/@docusaurus/utils/node_modules/jiti": { + "version": "1.21.7", + "resolved": "https://registry.npmjs.org/jiti/-/jiti-1.21.7.tgz", + "integrity": "sha512-/imKNG4EbWNrVjoNC/1H5/9GFy+tqjGBHCaSsN+P2RnPqjsLmv6UD3Ej+Kj8nBWaRAwyk7kK5ZUc+OEatnTR3A==", "license": "MIT", - "dependencies": { - "@motionone/animation": "^10.18.0", - "@motionone/generators": "^10.18.0", - "@motionone/types": "^10.17.1", - "@motionone/utils": "^10.18.0", - "hey-listen": "^1.0.8", - "tslib": "^2.3.1" + "bin": { + "jiti": "bin/jiti.js" } }, - "node_modules/@motionone/easing": { - "version": "10.18.0", - "resolved": "https://registry.npmjs.org/@motionone/easing/-/easing-10.18.0.tgz", - "integrity": "sha512-VcjByo7XpdLS4o9T8t99JtgxkdMcNWD3yHU/n6CLEz3bkmKDRZyYQ/wmSf6daum8ZXqfUAgFeCZSpJZIMxaCzg==", + "node_modules/@docusaurus/utils/node_modules/jsonfile": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.2.0.tgz", + "integrity": "sha512-FGuPw30AdOIUTRMC2OMRtQV+jkVj2cfPqSeWXv1NEAJ1qZ5zb1X6z1mFhbfOB/iy3ssJCD+3KuZ8r8C3uVFlAg==", "license": "MIT", "dependencies": { - "@motionone/utils": "^10.18.0", - "tslib": "^2.3.1" + "universalify": "^2.0.0" + }, + "optionalDependencies": { + "graceful-fs": "^4.1.6" } }, - "node_modules/@motionone/generators": { - "version": "10.18.0", - "resolved": "https://registry.npmjs.org/@motionone/generators/-/generators-10.18.0.tgz", - "integrity": "sha512-+qfkC2DtkDj4tHPu+AFKVfR/C30O1vYdvsGYaR13W/1cczPrrcjdvYCj0VLFuRMN+lP1xvpNZHCRNM4fBzn1jg==", + "node_modules/@docusaurus/utils/node_modules/universalify": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.1.tgz", + "integrity": "sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==", "license": "MIT", - "dependencies": { - "@motionone/types": "^10.17.1", - "@motionone/utils": "^10.18.0", - "tslib": "^2.3.1" + "engines": { + "node": ">= 10.0.0" } }, - "node_modules/@motionone/svelte": { - "version": "10.16.4", - "resolved": "https://registry.npmjs.org/@motionone/svelte/-/svelte-10.16.4.tgz", - "integrity": "sha512-zRVqk20lD1xqe+yEDZhMYgftsuHc25+9JSo+r0a0OWUJFocjSV9D/+UGhX4xgJsuwB9acPzXLr20w40VnY2PQA==", + "node_modules/@emotion/babel-plugin": { + "version": "11.13.5", + "resolved": "https://registry.npmjs.org/@emotion/babel-plugin/-/babel-plugin-11.13.5.tgz", + "integrity": "sha512-pxHCpT2ex+0q+HH91/zsdHkw/lXd468DIN2zvfvLtPKLLMo6gQj7oLObq8PhkrxOZb/gGCq03S3Z7PDhS8pduQ==", "license": "MIT", "dependencies": { - "@motionone/dom": "^10.16.4", - "tslib": "^2.3.1" + "@babel/helper-module-imports": "^7.16.7", + "@babel/runtime": "^7.18.3", + "@emotion/hash": "^0.9.2", + "@emotion/memoize": "^0.9.0", + "@emotion/serialize": "^1.3.3", + "babel-plugin-macros": "^3.1.0", + "convert-source-map": "^1.5.0", + "escape-string-regexp": "^4.0.0", + "find-root": "^1.1.0", + "source-map": "^0.5.7", + "stylis": "4.2.0" } }, - "node_modules/@motionone/types": { - "version": "10.17.1", - "resolved": "https://registry.npmjs.org/@motionone/types/-/types-10.17.1.tgz", - "integrity": "sha512-KaC4kgiODDz8hswCrS0btrVrzyU2CSQKO7Ps90ibBVSQmjkrt2teqta6/sOG59v7+dPnKMAg13jyqtMKV2yJ7A==", + "node_modules/@emotion/babel-plugin/node_modules/convert-source-map": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.9.0.tgz", + "integrity": "sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==", "license": "MIT" }, - "node_modules/@motionone/utils": { - "version": "10.18.0", - "resolved": "https://registry.npmjs.org/@motionone/utils/-/utils-10.18.0.tgz", - "integrity": "sha512-3XVF7sgyTSI2KWvTf6uLlBJ5iAgRgmvp3bpuOiQJvInd4nZ19ET8lX5unn30SlmRH7hXbBbH+Gxd0m0klJ3Xtw==", + "node_modules/@emotion/cache": { + "version": "11.14.0", + "resolved": "https://registry.npmjs.org/@emotion/cache/-/cache-11.14.0.tgz", + "integrity": "sha512-L/B1lc/TViYk4DcpGxtAVbx0ZyiKM5ktoIyafGkH6zg/tj+mA+NE//aPYKG0k8kCHSHVJrpLpcAlOBEXQ3SavA==", "license": "MIT", "dependencies": { - "@motionone/types": "^10.17.1", - "hey-listen": "^1.0.8", - "tslib": "^2.3.1" + "@emotion/memoize": "^0.9.0", + "@emotion/sheet": "^1.4.0", + "@emotion/utils": "^1.4.2", + "@emotion/weak-memoize": "^0.4.0", + "stylis": "4.2.0" } }, - "node_modules/@motionone/vue": { - "version": "10.16.4", - "resolved": "https://registry.npmjs.org/@motionone/vue/-/vue-10.16.4.tgz", - "integrity": "sha512-z10PF9JV6SbjFq+/rYabM+8CVlMokgl8RFGvieSGNTmrkQanfHn+15XBrhG3BgUfvmTeSeyShfOHpG0i9zEdcg==", - "deprecated": "Motion One for Vue is deprecated. Use Oku Motion instead https://oku-ui.com/motion", + "node_modules/@emotion/hash": { + "version": "0.9.2", + "resolved": "https://registry.npmjs.org/@emotion/hash/-/hash-0.9.2.tgz", + "integrity": "sha512-MyqliTZGuOm3+5ZRSaaBGP3USLw6+EGykkwZns2EPC5g8jJ4z9OrdZY9apkl3+UP9+sdz76YYkwCKP5gh8iY3g==", + "license": "MIT" + }, + "node_modules/@emotion/is-prop-valid": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/@emotion/is-prop-valid/-/is-prop-valid-1.4.0.tgz", + "integrity": "sha512-QgD4fyscGcbbKwJmqNvUMSE02OsHUa+lAWKdEUIJKgqe5IwRSKd7+KhibEWdaKwgjLj0DRSHA9biAIqGBk05lw==", "license": "MIT", "dependencies": { - "@motionone/dom": "^10.16.4", - "tslib": "^2.3.1" - } - }, - "node_modules/@msgpack/msgpack": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/@msgpack/msgpack/-/msgpack-3.1.2.tgz", - "integrity": "sha512-JEW4DEtBzfe8HvUYecLU9e6+XJnKDlUAIve8FvPzF3Kzs6Xo/KuZkZJsDH0wJXl/qEZbeeE7edxDNY3kMs39hQ==", - "license": "ISC", - "engines": { - "node": ">= 18" + "@emotion/memoize": "^0.9.0" } }, - "node_modules/@multiformats/base-x": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/@multiformats/base-x/-/base-x-4.0.1.tgz", - "integrity": "sha512-eMk0b9ReBbV23xXU693TAIrLyeO5iTgBZGSJfpqriG8UkYvr/hC9u9pyMlAakDNHWmbhMZCDs6KQO0jzKD8OTw==", + "node_modules/@emotion/memoize": { + "version": "0.9.0", + "resolved": "https://registry.npmjs.org/@emotion/memoize/-/memoize-0.9.0.tgz", + "integrity": "sha512-30FAj7/EoJ5mwVPOWhAyCX+FPfMDrVecJAM+Iw9NRoSl4BBAQeqj4cApHHUXOVvIPgLVDsCFoz/hGD+5QQD1GQ==", "license": "MIT" }, - "node_modules/@nestjs/cli": { - "version": "10.3.2", - "resolved": "https://registry.npmjs.org/@nestjs/cli/-/cli-10.3.2.tgz", - "integrity": "sha512-aWmD1GLluWrbuC4a1Iz/XBk5p74Uj6nIVZj6Ov03JbTfgtWqGFLtXuMetvzMiHxfrHehx/myt2iKAPRhKdZvTg==", + "node_modules/@emotion/react": { + "version": "11.14.0", + "resolved": "https://registry.npmjs.org/@emotion/react/-/react-11.14.0.tgz", + "integrity": "sha512-O000MLDBDdk/EohJPFUqvnp4qnHeYkVP5B0xEG0D/L7cOKP9kefu2DXn8dj74cQfsEzUqh+sr1RzFqiL1o+PpA==", "license": "MIT", + "peer": true, "dependencies": { - "@angular-devkit/core": "17.1.2", - "@angular-devkit/schematics": "17.1.2", - "@angular-devkit/schematics-cli": "17.1.2", - "@nestjs/schematics": "^10.0.1", - "chalk": "4.1.2", - "chokidar": "3.6.0", - "cli-table3": "0.6.3", - "commander": "4.1.1", - "fork-ts-checker-webpack-plugin": "9.0.2", - "glob": "10.3.10", - "inquirer": "8.2.6", - "node-emoji": "1.11.0", - "ora": "5.4.1", - "rimraf": "4.4.1", - "shelljs": "0.8.5", - "source-map-support": "0.5.21", - "tree-kill": "1.2.2", - "tsconfig-paths": "4.2.0", - "tsconfig-paths-webpack-plugin": "4.1.0", - "typescript": "5.3.3", - "webpack": "5.90.1", - "webpack-node-externals": "3.0.0" - }, - "bin": { - "nest": "bin/nest.js" - }, - "engines": { - "node": ">= 16.14" + "@babel/runtime": "^7.18.3", + "@emotion/babel-plugin": "^11.13.5", + "@emotion/cache": "^11.14.0", + "@emotion/serialize": "^1.3.3", + "@emotion/use-insertion-effect-with-fallbacks": "^1.2.0", + "@emotion/utils": "^1.4.2", + "@emotion/weak-memoize": "^0.4.0", + "hoist-non-react-statics": "^3.3.1" }, "peerDependencies": { - "@swc/cli": "^0.1.62 || ^0.3.0", - "@swc/core": "^1.3.62" + "react": ">=16.8.0" }, "peerDependenciesMeta": { - "@swc/cli": { - "optional": true - }, - "@swc/core": { + "@types/react": { "optional": true } } }, - "node_modules/@nestjs/cli/node_modules/bl": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/bl/-/bl-4.1.0.tgz", - "integrity": "sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==", + "node_modules/@emotion/serialize": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/@emotion/serialize/-/serialize-1.3.3.tgz", + "integrity": "sha512-EISGqt7sSNWHGI76hC7x1CksiXPahbxEOrC5RjmFRJTqLyEK9/9hZvBbiYn70dw4wuwMKiEMCUlR6ZXTSWQqxA==", "license": "MIT", "dependencies": { - "buffer": "^5.5.0", - "inherits": "^2.0.4", - "readable-stream": "^3.4.0" + "@emotion/hash": "^0.9.2", + "@emotion/memoize": "^0.9.0", + "@emotion/unitless": "^0.10.0", + "@emotion/utils": "^1.4.2", + "csstype": "^3.0.2" } }, - "node_modules/@nestjs/cli/node_modules/brace-expansion": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.2.tgz", - "integrity": "sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==", + "node_modules/@emotion/sheet": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/@emotion/sheet/-/sheet-1.4.0.tgz", + "integrity": "sha512-fTBW9/8r2w3dXWYM4HCB1Rdp8NLibOw2+XELH5m5+AkWiL/KqYX6dc0kKYlaYyKjrQ6ds33MCdMPEwgs2z1rqg==", + "license": "MIT" + }, + "node_modules/@emotion/styled": { + "version": "11.14.1", + "resolved": "https://registry.npmjs.org/@emotion/styled/-/styled-11.14.1.tgz", + "integrity": "sha512-qEEJt42DuToa3gurlH4Qqc1kVpNq8wO8cJtDzU46TjlzWjDlsVyevtYCRijVq3SrHsROS+gVQ8Fnea108GnKzw==", "license": "MIT", + "peer": true, "dependencies": { - "balanced-match": "^1.0.0" + "@babel/runtime": "^7.18.3", + "@emotion/babel-plugin": "^11.13.5", + "@emotion/is-prop-valid": "^1.3.0", + "@emotion/serialize": "^1.3.3", + "@emotion/use-insertion-effect-with-fallbacks": "^1.2.0", + "@emotion/utils": "^1.4.2" + }, + "peerDependencies": { + "@emotion/react": "^11.0.0-rc.0", + "react": ">=16.8.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } } }, - "node_modules/@nestjs/cli/node_modules/buffer": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", - "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], + "node_modules/@emotion/unitless": { + "version": "0.10.0", + "resolved": "https://registry.npmjs.org/@emotion/unitless/-/unitless-0.10.0.tgz", + "integrity": "sha512-dFoMUuQA20zvtVTuxZww6OHoJYgrzfKM1t52mVySDJnMSEa08ruEvdYQbhvyu6soU+NeLVd3yKfTfT0NeV6qGg==", + "license": "MIT" + }, + "node_modules/@emotion/use-insertion-effect-with-fallbacks": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@emotion/use-insertion-effect-with-fallbacks/-/use-insertion-effect-with-fallbacks-1.2.0.tgz", + "integrity": "sha512-yJMtVdH59sxi/aVJBpk9FQq+OR8ll5GT8oWd57UpeaKEVGab41JWaCFA7FRLoMLloOZF/c/wsPoe+bfGmRKgDg==", "license": "MIT", - "dependencies": { - "base64-js": "^1.3.1", - "ieee754": "^1.1.13" + "peerDependencies": { + "react": ">=16.8.0" } }, - "node_modules/@nestjs/cli/node_modules/commander": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/commander/-/commander-4.1.1.tgz", - "integrity": "sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==", - "license": "MIT", - "engines": { - "node": ">= 6" + "node_modules/@emotion/utils": { + "version": "1.4.2", + "resolved": "https://registry.npmjs.org/@emotion/utils/-/utils-1.4.2.tgz", + "integrity": "sha512-3vLclRofFziIa3J2wDh9jjbkUz9qk5Vi3IZ/FSTKViB0k+ef0fPV7dYrUIugbgupYDx7v9ud/SjrtEP8Y4xLoA==", + "license": "MIT" + }, + "node_modules/@emotion/weak-memoize": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/@emotion/weak-memoize/-/weak-memoize-0.4.0.tgz", + "integrity": "sha512-snKqtPW01tN0ui7yu9rGv69aJXr/a/Ywvl11sUjNtEcRc+ng/mQriFL0wLXMef74iHa/EkftbDzU9F8iFbH+zg==", + "license": "MIT" + }, + "node_modules/@esbuild-plugins/node-globals-polyfill": { + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/@esbuild-plugins/node-globals-polyfill/-/node-globals-polyfill-0.2.3.tgz", + "integrity": "sha512-r3MIryXDeXDOZh7ih1l/yE9ZLORCd5e8vWg02azWRGj5SPTuoh69A2AIyn0Z31V/kHBfZ4HgWJ+OK3GTTwLmnw==", + "dev": true, + "license": "ISC", + "peerDependencies": { + "esbuild": "*" } }, - "node_modules/@nestjs/cli/node_modules/glob": { - "version": "10.3.10", - "resolved": "https://registry.npmjs.org/glob/-/glob-10.3.10.tgz", - "integrity": "sha512-fa46+tv1Ak0UPK1TOy/pZrIybNNt4HCv7SDzwyfiOZkvZLEbjsZkJBPtDHVshZjbecAoAGSC20MjLDG/qr679g==", + "node_modules/@esbuild-plugins/node-modules-polyfill": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/@esbuild-plugins/node-modules-polyfill/-/node-modules-polyfill-0.2.2.tgz", + "integrity": "sha512-LXV7QsWJxRuMYvKbiznh+U1ilIop3g2TeKRzUxOG5X3YITc8JyyTa90BmLwqqv0YnX4v32CSlG+vsziZp9dMvA==", + "dev": true, "license": "ISC", "dependencies": { - "foreground-child": "^3.1.0", - "jackspeak": "^2.3.5", - "minimatch": "^9.0.1", - "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0", - "path-scurry": "^1.10.1" - }, - "bin": { - "glob": "dist/esm/bin.mjs" - }, - "engines": { - "node": ">=16 || 14 >=14.17" + "escape-string-regexp": "^4.0.0", + "rollup-plugin-node-polyfills": "^0.2.1" }, - "funding": { - "url": "https://github.com/sponsors/isaacs" + "peerDependencies": { + "esbuild": "*" } }, - "node_modules/@nestjs/cli/node_modules/is-interactive": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-interactive/-/is-interactive-1.0.0.tgz", - "integrity": "sha512-2HvIEKRoqS62guEC+qBjpvRubdX910WCMuJTZ+I9yvqKU2/12eSL549HMwtabb4oupdj2sMP50k+XJfB/8JE6w==", + "node_modules/@esbuild/aix-ppc64": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.20.2.tgz", + "integrity": "sha512-D+EBOJHXdNZcLJRBkhENNG8Wji2kgc9AZ9KiPr1JuZjsNtyHzrsfLRrY0tk2H2aoFu6RANO1y1iPPUCDYWkb5g==", + "cpu": [ + "ppc64" + ], + "dev": true, "license": "MIT", + "optional": true, + "os": [ + "aix" + ], "engines": { - "node": ">=8" + "node": ">=12" } }, - "node_modules/@nestjs/cli/node_modules/jackspeak": { - "version": "2.3.6", - "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-2.3.6.tgz", - "integrity": "sha512-N3yCS/NegsOBokc8GAdM8UcmfsKiSS8cipheD/nivzr700H+nsMOxJjQnvwOcRYVuFkdH0wGUvW2WbXGmrZGbQ==", - "license": "BlueOak-1.0.0", - "dependencies": { - "@isaacs/cliui": "^8.0.2" - }, + "node_modules/@esbuild/android-arm": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.20.2.tgz", + "integrity": "sha512-t98Ra6pw2VaDhqNWO2Oph2LXbz/EJcnLmKLGBJwEwXX/JAN83Fym1rU8l0JUWK6HkIbWONCSSatf4sf2NBRx/w==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], "engines": { - "node": ">=14" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - }, - "optionalDependencies": { - "@pkgjs/parseargs": "^0.11.0" + "node": ">=12" } }, - "node_modules/@nestjs/cli/node_modules/lru-cache": { - "version": "10.4.3", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz", - "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==", - "license": "ISC" - }, - "node_modules/@nestjs/cli/node_modules/minimatch": { - "version": "9.0.5", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", - "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", - "license": "ISC", - "dependencies": { - "brace-expansion": "^2.0.1" - }, + "node_modules/@esbuild/android-arm64": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.20.2.tgz", + "integrity": "sha512-mRzjLacRtl/tWU0SvD8lUEwb61yP9cqQo6noDZP/O8VkwafSYwZ4yWy24kan8jE/IMERpYncRt2dw438LP3Xmg==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], "engines": { - "node": ">=16 || 14 >=14.17" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" + "node": ">=12" } }, - "node_modules/@nestjs/cli/node_modules/ora": { - "version": "5.4.1", - "resolved": "https://registry.npmjs.org/ora/-/ora-5.4.1.tgz", - "integrity": "sha512-5b6Y85tPxZZ7QytO+BQzysW31HJku27cRIlkbAXaNx+BdcVi+LlRFmVXzeF6a7JCwJpyw5c4b+YSVImQIrBpuQ==", + "node_modules/@esbuild/android-x64": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.20.2.tgz", + "integrity": "sha512-btzExgV+/lMGDDa194CcUQm53ncxzeBrWJcncOBxuC6ndBkKxnHdFJn86mCIgTELsooUmwUm9FkhSp5HYu00Rg==", + "cpu": [ + "x64" + ], + "dev": true, "license": "MIT", - "dependencies": { - "bl": "^4.1.0", - "chalk": "^4.1.0", - "cli-cursor": "^3.1.0", - "cli-spinners": "^2.5.0", - "is-interactive": "^1.0.0", - "is-unicode-supported": "^0.1.0", - "log-symbols": "^4.1.0", - "strip-ansi": "^6.0.0", - "wcwidth": "^1.0.1" - }, + "optional": true, + "os": [ + "android" + ], "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">=12" } }, - "node_modules/@nestjs/cli/node_modules/path-scurry": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-1.11.1.tgz", - "integrity": "sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==", - "license": "BlueOak-1.0.0", - "dependencies": { - "lru-cache": "^10.2.0", - "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0" - }, + "node_modules/@esbuild/darwin-arm64": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.20.2.tgz", + "integrity": "sha512-4J6IRT+10J3aJH3l1yzEg9y3wkTDgDk7TSDFX+wKFiWjqWp/iCfLIYzGyasx9l0SAFPT1HwSCR+0w/h1ES/MjA==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], "engines": { - "node": ">=16 || 14 >=14.18" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" + "node": ">=12" } }, - "node_modules/@nestjs/cli/node_modules/readable-stream": { - "version": "3.6.2", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", - "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", + "node_modules/@esbuild/darwin-x64": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.20.2.tgz", + "integrity": "sha512-tBcXp9KNphnNH0dfhv8KYkZhjc+H3XBkF5DKtswJblV7KlT9EI2+jeA8DgBjp908WEuYll6pF+UStUCfEpdysA==", + "cpu": [ + "x64" + ], + "dev": true, "license": "MIT", - "dependencies": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - }, + "optional": true, + "os": [ + "darwin" + ], "engines": { - "node": ">= 6" + "node": ">=12" } }, - "node_modules/@nestjs/cli/node_modules/rimraf": { - "version": "4.4.1", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-4.4.1.tgz", - "integrity": "sha512-Gk8NlF062+T9CqNGn6h4tls3k6T1+/nXdOcSZVikNVtlRdYpA7wRJJMoXmuvOnLW844rPjdQ7JgXCYM6PPC/og==", - "license": "ISC", - "dependencies": { - "glob": "^9.2.0" - }, - "bin": { - "rimraf": "dist/cjs/src/bin.js" - }, + "node_modules/@esbuild/freebsd-arm64": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.20.2.tgz", + "integrity": "sha512-d3qI41G4SuLiCGCFGUrKsSeTXyWG6yem1KcGZVS+3FYlYhtNoNgYrWcvkOoaqMhwXSMrZRl69ArHsGJ9mYdbbw==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], "engines": { - "node": ">=14" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" + "node": ">=12" } }, - "node_modules/@nestjs/cli/node_modules/rimraf/node_modules/glob": { - "version": "9.3.5", - "resolved": "https://registry.npmjs.org/glob/-/glob-9.3.5.tgz", - "integrity": "sha512-e1LleDykUz2Iu+MTYdkSsuWX8lvAjAcs0Xef0lNIu0S2wOAzuTxCJtcd9S3cijlwYF18EsU3rzb8jPVobxDh9Q==", - "license": "ISC", - "dependencies": { - "fs.realpath": "^1.0.0", - "minimatch": "^8.0.2", - "minipass": "^4.2.4", - "path-scurry": "^1.6.1" - }, + "node_modules/@esbuild/freebsd-x64": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.20.2.tgz", + "integrity": "sha512-d+DipyvHRuqEeM5zDivKV1KuXn9WeRX6vqSqIDgwIfPQtwMP4jaDsQsDncjTDDsExT4lR/91OLjRo8bmC1e+Cw==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], "engines": { - "node": ">=16 || 14 >=14.17" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" + "node": ">=12" } }, - "node_modules/@nestjs/cli/node_modules/rimraf/node_modules/minimatch": { - "version": "8.0.4", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-8.0.4.tgz", - "integrity": "sha512-W0Wvr9HyFXZRGIDgCicunpQ299OKXs9RgZfaukz4qAW/pJhcpUfupc9c+OObPOFueNy8VSrZgEmDtk6Kh4WzDA==", - "license": "ISC", - "dependencies": { - "brace-expansion": "^2.0.1" - }, + "node_modules/@esbuild/linux-arm": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.20.2.tgz", + "integrity": "sha512-VhLPeR8HTMPccbuWWcEUD1Az68TqaTYyj6nfE4QByZIQEQVWBB8vup8PpR7y1QHL3CpcF6xd5WVBU/+SBEvGTg==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], "engines": { - "node": ">=16 || 14 >=14.17" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" + "node": ">=12" } }, - "node_modules/@nestjs/cli/node_modules/rimraf/node_modules/minipass": { - "version": "4.2.8", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-4.2.8.tgz", - "integrity": "sha512-fNzuVyifolSLFL4NzpF+wEF4qrgqaaKX0haXPQEdQ7NKAN+WecoKMHV09YcuL/DHxrUsYQOK3MiuDf7Ip2OXfQ==", - "license": "ISC", + "node_modules/@esbuild/linux-arm64": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.20.2.tgz", + "integrity": "sha512-9pb6rBjGvTFNira2FLIWqDk/uaf42sSyLE8j1rnUpuzsODBq7FvpwHYZxQ/It/8b+QOS1RYfqgGFNLRI+qlq2A==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], "engines": { - "node": ">=8" + "node": ">=12" } }, - "node_modules/@nestjs/cli/node_modules/typescript": { - "version": "5.3.3", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.3.3.tgz", - "integrity": "sha512-pXWcraxM0uxAS+tN0AG/BF2TyqmHO014Z070UsJ+pFvYuRSq8KH8DmWpnbXe0pEPDHXZV3FcAbJkijJ5oNEnWw==", - "license": "Apache-2.0", - "bin": { - "tsc": "bin/tsc", - "tsserver": "bin/tsserver" - }, + "node_modules/@esbuild/linux-ia32": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.20.2.tgz", + "integrity": "sha512-o10utieEkNPFDZFQm9CoP7Tvb33UutoJqg3qKf1PWVeeJhJw0Q347PxMvBgVVFgouYLGIhFYG0UGdBumROyiig==", + "cpu": [ + "ia32" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], "engines": { - "node": ">=14.17" + "node": ">=12" } }, - "node_modules/@nestjs/common": { - "version": "10.3.3", - "resolved": "https://registry.npmjs.org/@nestjs/common/-/common-10.3.3.tgz", - "integrity": "sha512-LAkTe8/CF0uNWM0ecuDwUNTHCi1lVSITmmR4FQ6Ftz1E7ujQCnJ5pMRzd8JRN14vdBkxZZ8VbVF0BDUKoKNxMQ==", + "node_modules/@esbuild/linux-loong64": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.20.2.tgz", + "integrity": "sha512-PR7sp6R/UC4CFVomVINKJ80pMFlfDfMQMYynX7t1tNTeivQ6XdX5r2XovMmha/VjR1YN/HgHWsVcTRIMkymrgQ==", + "cpu": [ + "loong64" + ], + "dev": true, "license": "MIT", - "dependencies": { - "iterare": "1.2.1", - "tslib": "2.6.2", - "uid": "2.0.2" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/nest" - }, - "peerDependencies": { - "class-transformer": "*", - "class-validator": "*", - "reflect-metadata": "^0.1.12 || ^0.2.0", - "rxjs": "^7.1.0" - }, - "peerDependenciesMeta": { - "class-transformer": { - "optional": true - }, - "class-validator": { - "optional": true - } + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" } }, - "node_modules/@nestjs/common/node_modules/tslib": { - "version": "2.6.2", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz", - "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==", - "license": "0BSD" - }, - "node_modules/@nestjs/config": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/@nestjs/config/-/config-3.2.0.tgz", - "integrity": "sha512-BpYRn57shg7CH35KGT6h+hT7ZucB6Qn2B3NBNdvhD4ApU8huS5pX/Wc2e/aO5trIha606Bz2a9t9/vbiuTBTww==", + "node_modules/@esbuild/linux-mips64el": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.20.2.tgz", + "integrity": "sha512-4BlTqeutE/KnOiTG5Y6Sb/Hw6hsBOZapOVF6njAESHInhlQAghVVZL1ZpIctBOoTFbQyGW+LsVYZ8lSSB3wkjA==", + "cpu": [ + "mips64el" + ], + "dev": true, "license": "MIT", - "dependencies": { - "dotenv": "16.4.1", - "dotenv-expand": "10.0.0", - "lodash": "4.17.21", - "uuid": "9.0.1" - }, - "peerDependencies": { - "@nestjs/common": "^8.0.0 || ^9.0.0 || ^10.0.0", - "rxjs": "^7.1.0" - } - }, - "node_modules/@nestjs/config/node_modules/dotenv": { - "version": "16.4.1", - "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-16.4.1.tgz", - "integrity": "sha512-CjA3y+Dr3FyFDOAMnxZEGtnW9KBR2M0JvvUtXNW+dYJL5ROWxP9DUHCwgFqpMk0OXCc0ljhaNTr2w/kutYIcHQ==", - "license": "BSD-2-Clause", + "optional": true, + "os": [ + "linux" + ], "engines": { "node": ">=12" - }, - "funding": { - "url": "https://github.com/motdotla/dotenv?sponsor=1" } }, - "node_modules/@nestjs/core": { - "version": "10.3.3", - "resolved": "https://registry.npmjs.org/@nestjs/core/-/core-10.3.3.tgz", - "integrity": "sha512-kxJWggQAPX3RuZx9JVec69eSLaYLNIox2emkZJpfBJ5Qq7cAq7edQIt1r4LGjTKq6kFubNTPsqhWf5y7yFRBPw==", - "hasInstallScript": true, + "node_modules/@esbuild/linux-ppc64": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.20.2.tgz", + "integrity": "sha512-rD3KsaDprDcfajSKdn25ooz5J5/fWBylaaXkuotBDGnMnDP1Uv5DLAN/45qfnf3JDYyJv/ytGHQaziHUdyzaAg==", + "cpu": [ + "ppc64" + ], + "dev": true, "license": "MIT", - "dependencies": { - "@nuxtjs/opencollective": "0.3.2", - "fast-safe-stringify": "2.1.1", - "iterare": "1.2.1", - "path-to-regexp": "3.2.0", - "tslib": "2.6.2", - "uid": "2.0.2" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/nest" - }, - "peerDependencies": { - "@nestjs/common": "^10.0.0", - "@nestjs/microservices": "^10.0.0", - "@nestjs/platform-express": "^10.0.0", - "@nestjs/websockets": "^10.0.0", - "reflect-metadata": "^0.1.12 || ^0.2.0", - "rxjs": "^7.1.0" - }, - "peerDependenciesMeta": { - "@nestjs/microservices": { - "optional": true - }, - "@nestjs/platform-express": { - "optional": true - }, - "@nestjs/websockets": { - "optional": true - } + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" } }, - "node_modules/@nestjs/core/node_modules/tslib": { - "version": "2.6.2", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz", - "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==", - "license": "0BSD" - }, - "node_modules/@nestjs/mapped-types": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/@nestjs/mapped-types/-/mapped-types-2.0.5.tgz", - "integrity": "sha512-bSJv4pd6EY99NX9CjBIyn4TVDoSit82DUZlL4I3bqNfy5Gt+gXTa86i3I/i0iIV9P4hntcGM5GyO+FhZAhxtyg==", + "node_modules/@esbuild/linux-riscv64": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.20.2.tgz", + "integrity": "sha512-snwmBKacKmwTMmhLlz/3aH1Q9T8v45bKYGE3j26TsaOVtjIag4wLfWSiZykXzXuE1kbCE+zJRmwp+ZbIHinnVg==", + "cpu": [ + "riscv64" + ], + "dev": true, "license": "MIT", - "peerDependencies": { - "@nestjs/common": "^8.0.0 || ^9.0.0 || ^10.0.0", - "class-transformer": "^0.4.0 || ^0.5.0", - "class-validator": "^0.13.0 || ^0.14.0", - "reflect-metadata": "^0.1.12 || ^0.2.0" - }, - "peerDependenciesMeta": { - "class-transformer": { - "optional": true - }, - "class-validator": { - "optional": true - } + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" } }, - "node_modules/@nestjs/platform-express": { - "version": "10.3.3", - "resolved": "https://registry.npmjs.org/@nestjs/platform-express/-/platform-express-10.3.3.tgz", - "integrity": "sha512-GGKSEU48Os7nYFIsUM0nutuFUGn5AbeP8gzFBiBCAtiuJWrXZXpZ58pMBYxAbMf7IrcOZFInHEukjHGAQU0OZw==", + "node_modules/@esbuild/linux-s390x": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.20.2.tgz", + "integrity": "sha512-wcWISOobRWNm3cezm5HOZcYz1sKoHLd8VL1dl309DiixxVFoFe/o8HnwuIwn6sXre88Nwj+VwZUvJf4AFxkyrQ==", + "cpu": [ + "s390x" + ], + "dev": true, "license": "MIT", - "dependencies": { - "body-parser": "1.20.2", - "cors": "2.8.5", - "express": "4.18.2", - "multer": "1.4.4-lts.1", - "tslib": "2.6.2" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/nest" - }, - "peerDependencies": { - "@nestjs/common": "^10.0.0", - "@nestjs/core": "^10.0.0" + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" } }, - "node_modules/@nestjs/platform-express/node_modules/accepts": { - "version": "1.3.8", - "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.8.tgz", - "integrity": "sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==", + "node_modules/@esbuild/linux-x64": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.20.2.tgz", + "integrity": "sha512-1MdwI6OOTsfQfek8sLwgyjOXAu+wKhLEoaOLTjbijk6E2WONYpH9ZU2mNtR+lZ2B4uwr+usqGuVfFT9tMtGvGw==", + "cpu": [ + "x64" + ], + "dev": true, "license": "MIT", - "dependencies": { - "mime-types": "~2.1.34", - "negotiator": "0.6.3" - }, + "optional": true, + "os": [ + "linux" + ], "engines": { - "node": ">= 0.6" + "node": ">=12" } }, - "node_modules/@nestjs/platform-express/node_modules/content-disposition": { - "version": "0.5.4", - "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.4.tgz", - "integrity": "sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==", + "node_modules/@esbuild/netbsd-arm64": { + "version": "0.25.10", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-arm64/-/netbsd-arm64-0.25.10.tgz", + "integrity": "sha512-AKQM3gfYfSW8XRk8DdMCzaLUFB15dTrZfnX8WXQoOUpUBQ+NaAFCP1kPS/ykbbGYz7rxn0WS48/81l9hFl3u4A==", + "cpu": [ + "arm64" + ], + "dev": true, "license": "MIT", - "dependencies": { - "safe-buffer": "5.2.1" - }, + "optional": true, + "os": [ + "netbsd" + ], "engines": { - "node": ">= 0.6" + "node": ">=18" } }, - "node_modules/@nestjs/platform-express/node_modules/cookie": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.5.0.tgz", - "integrity": "sha512-YZ3GUyn/o8gfKJlnlX7g7xq4gyO6OSuhGPKaaGssGB2qgDUS0gPgtTvoyZLTt9Ab6dC4hfc9dV5arkvc/OCmrw==", + "node_modules/@esbuild/netbsd-x64": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.20.2.tgz", + "integrity": "sha512-K8/DhBxcVQkzYc43yJXDSyjlFeHQJBiowJ0uVL6Tor3jGQfSGHNNJcWxNbOI8v5k82prYqzPuwkzHt3J1T1iZQ==", + "cpu": [ + "x64" + ], + "dev": true, "license": "MIT", + "optional": true, + "os": [ + "netbsd" + ], "engines": { - "node": ">= 0.6" + "node": ">=12" } }, - "node_modules/@nestjs/platform-express/node_modules/cookie-signature": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz", - "integrity": "sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ==", - "license": "MIT" - }, - "node_modules/@nestjs/platform-express/node_modules/debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "node_modules/@esbuild/openbsd-arm64": { + "version": "0.25.10", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-arm64/-/openbsd-arm64-0.25.10.tgz", + "integrity": "sha512-5Se0VM9Wtq797YFn+dLimf2Zx6McttsH2olUBsDml+lm0GOCRVebRWUvDtkY4BWYv/3NgzS8b/UM3jQNh5hYyw==", + "cpu": [ + "arm64" + ], + "dev": true, "license": "MIT", - "dependencies": { - "ms": "2.0.0" + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=18" } }, - "node_modules/@nestjs/platform-express/node_modules/debug/node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", - "license": "MIT" - }, - "node_modules/@nestjs/platform-express/node_modules/encodeurl": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", - "integrity": "sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==", + "node_modules/@esbuild/openbsd-x64": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.20.2.tgz", + "integrity": "sha512-eMpKlV0SThJmmJgiVyN9jTPJ2VBPquf6Kt/nAoo6DgHAoN57K15ZghiHaMvqjCye/uU4X5u3YSMgVBI1h3vKrQ==", + "cpu": [ + "x64" + ], + "dev": true, "license": "MIT", + "optional": true, + "os": [ + "openbsd" + ], "engines": { - "node": ">= 0.8" + "node": ">=12" } }, - "node_modules/@nestjs/platform-express/node_modules/express": { - "version": "4.18.2", - "resolved": "https://registry.npmjs.org/express/-/express-4.18.2.tgz", - "integrity": "sha512-5/PsL6iGPdfQ/lKM1UuielYgv3BUoJfz1aUwU9vHZ+J7gyvwdQXFEBIEIaxeGf0GIcreATNyBExtalisDbuMqQ==", + "node_modules/@esbuild/openharmony-arm64": { + "version": "0.25.10", + "resolved": "https://registry.npmjs.org/@esbuild/openharmony-arm64/-/openharmony-arm64-0.25.10.tgz", + "integrity": "sha512-AVTSBhTX8Y/Fz6OmIVBip9tJzZEUcY8WLh7I59+upa5/GPhh2/aM6bvOMQySspnCCHvFi79kMtdJS1w0DXAeag==", + "cpu": [ + "arm64" + ], + "dev": true, "license": "MIT", - "dependencies": { - "accepts": "~1.3.8", - "array-flatten": "1.1.1", - "body-parser": "1.20.1", - "content-disposition": "0.5.4", - "content-type": "~1.0.4", - "cookie": "0.5.0", - "cookie-signature": "1.0.6", - "debug": "2.6.9", - "depd": "2.0.0", - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "etag": "~1.8.1", - "finalhandler": "1.2.0", - "fresh": "0.5.2", - "http-errors": "2.0.0", - "merge-descriptors": "1.0.1", - "methods": "~1.1.2", - "on-finished": "2.4.1", - "parseurl": "~1.3.3", - "path-to-regexp": "0.1.7", - "proxy-addr": "~2.0.7", - "qs": "6.11.0", - "range-parser": "~1.2.1", - "safe-buffer": "5.2.1", - "send": "0.18.0", - "serve-static": "1.15.0", - "setprototypeof": "1.2.0", - "statuses": "2.0.1", - "type-is": "~1.6.18", - "utils-merge": "1.0.1", - "vary": "~1.1.2" - }, + "optional": true, + "os": [ + "openharmony" + ], "engines": { - "node": ">= 0.10.0" + "node": ">=18" } }, - "node_modules/@nestjs/platform-express/node_modules/express/node_modules/body-parser": { - "version": "1.20.1", - "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.1.tgz", - "integrity": "sha512-jWi7abTbYwajOytWCQc37VulmWiRae5RyTpaCyDcS5/lMdtwSz5lOpDE67srw/HYe35f1z3fDQw+3txg7gNtWw==", + "node_modules/@esbuild/sunos-x64": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.20.2.tgz", + "integrity": "sha512-2UyFtRC6cXLyejf/YEld4Hajo7UHILetzE1vsRcGL3earZEW77JxrFjH4Ez2qaTiEfMgAXxfAZCm1fvM/G/o8w==", + "cpu": [ + "x64" + ], + "dev": true, "license": "MIT", - "dependencies": { - "bytes": "3.1.2", - "content-type": "~1.0.4", - "debug": "2.6.9", - "depd": "2.0.0", - "destroy": "1.2.0", - "http-errors": "2.0.0", - "iconv-lite": "0.4.24", - "on-finished": "2.4.1", - "qs": "6.11.0", - "raw-body": "2.5.1", - "type-is": "~1.6.18", - "unpipe": "1.0.0" - }, + "optional": true, + "os": [ + "sunos" + ], "engines": { - "node": ">= 0.8", - "npm": "1.2.8000 || >= 1.4.16" + "node": ">=12" } }, - "node_modules/@nestjs/platform-express/node_modules/finalhandler": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.2.0.tgz", - "integrity": "sha512-5uXcUVftlQMFnWC9qu/svkWv3GTd2PfUhK/3PLkYNAe7FbqJMt3515HaxE6eRL74GdsriiwujiawdaB1BpEISg==", + "node_modules/@esbuild/win32-arm64": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.20.2.tgz", + "integrity": "sha512-GRibxoawM9ZCnDxnP3usoUDO9vUkpAxIIZ6GQI+IlVmr5kP3zUq+l17xELTHMWTWzjxa2guPNyrpq1GWmPvcGQ==", + "cpu": [ + "arm64" + ], + "dev": true, "license": "MIT", - "dependencies": { - "debug": "2.6.9", - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "on-finished": "2.4.1", - "parseurl": "~1.3.3", - "statuses": "2.0.1", - "unpipe": "~1.0.0" - }, + "optional": true, + "os": [ + "win32" + ], "engines": { - "node": ">= 0.8" + "node": ">=12" } }, - "node_modules/@nestjs/platform-express/node_modules/fresh": { - "version": "0.5.2", - "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", - "integrity": "sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==", + "node_modules/@esbuild/win32-ia32": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.20.2.tgz", + "integrity": "sha512-HfLOfn9YWmkSKRQqovpnITazdtquEW8/SoHW7pWpuEeguaZI4QnCRW6b+oZTztdBnZOS2hqJ6im/D5cPzBTTlQ==", + "cpu": [ + "ia32" + ], + "dev": true, "license": "MIT", + "optional": true, + "os": [ + "win32" + ], "engines": { - "node": ">= 0.6" + "node": ">=12" } }, - "node_modules/@nestjs/platform-express/node_modules/iconv-lite": { - "version": "0.4.24", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", - "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", + "node_modules/@esbuild/win32-x64": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.20.2.tgz", + "integrity": "sha512-N49X4lJX27+l9jbLKSqZ6bKNjzQvHaT8IIFUy+YIqmXQdjYCToGWwOItDrfby14c78aDd5NHQl29xingXfCdLQ==", + "cpu": [ + "x64" + ], + "dev": true, "license": "MIT", - "dependencies": { - "safer-buffer": ">= 2.1.2 < 3" - }, + "optional": true, + "os": [ + "win32" + ], "engines": { - "node": ">=0.10.0" + "node": ">=12" } }, - "node_modules/@nestjs/platform-express/node_modules/merge-descriptors": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz", - "integrity": "sha512-cCi6g3/Zr1iqQi6ySbseM1Xvooa98N0w31jzUYrXPX2xqObmFGHJ0tQ5u74H3mVh7wLouTseZyYIq39g8cNp1w==", - "license": "MIT" - }, - "node_modules/@nestjs/platform-express/node_modules/mime": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", - "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==", + "node_modules/@eslint-community/eslint-utils": { + "version": "4.9.0", + "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.9.0.tgz", + "integrity": "sha512-ayVFHdtZ+hsq1t2Dy24wCmGXGe4q9Gu3smhLYALJrr473ZH27MsnSL+LKUlimp4BWJqMDMLmPpx/Q9R3OAlL4g==", + "dev": true, "license": "MIT", - "bin": { - "mime": "cli.js" + "dependencies": { + "eslint-visitor-keys": "^3.4.3" }, "engines": { - "node": ">=4" - } - }, - "node_modules/@nestjs/platform-express/node_modules/mime-db": { - "version": "1.52.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", - "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", - "license": "MIT", - "engines": { - "node": ">= 0.6" + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + }, + "peerDependencies": { + "eslint": "^6.0.0 || ^7.0.0 || >=8.0.0" } }, - "node_modules/@nestjs/platform-express/node_modules/mime-types": { - "version": "2.1.35", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", - "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", + "node_modules/@eslint-community/regexpp": { + "version": "4.12.1", + "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.12.1.tgz", + "integrity": "sha512-CCZCDJuduB9OUkFkY2IgppNZMi2lBQgD2qzwXkEia16cge2pijY/aXi96CJMquDMn3nJdlPV1A5KrJEXwfLNzQ==", + "dev": true, "license": "MIT", - "dependencies": { - "mime-db": "1.52.0" - }, "engines": { - "node": ">= 0.6" + "node": "^12.0.0 || ^14.0.0 || >=16.0.0" } }, - "node_modules/@nestjs/platform-express/node_modules/negotiator": { - "version": "0.6.3", - "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz", - "integrity": "sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==", - "license": "MIT", + "node_modules/@eslint/compat": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@eslint/compat/-/compat-1.1.0.tgz", + "integrity": "sha512-s9Wi/p25+KbzxKlDm3VshQdImhWk+cbdblhwGNnyCU5lpSwtWa4v7VQCxSki0FAUrGA3s8nCWgYzAH41mwQVKQ==", + "dev": true, + "license": "Apache-2.0", "engines": { - "node": ">= 0.6" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" } }, - "node_modules/@nestjs/platform-express/node_modules/path-to-regexp": { - "version": "0.1.7", - "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz", - "integrity": "sha512-5DFkuoqlv1uYQKxy8omFBeJPQcdoE07Kv2sferDCrAq1ohOU+MSDswDIbnx3YAM60qIOnYa53wBhXW0EbMonrQ==", - "license": "MIT" - }, - "node_modules/@nestjs/platform-express/node_modules/raw-body": { - "version": "2.5.1", - "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.1.tgz", - "integrity": "sha512-qqJBtEyVgS0ZmPGdCFPWJ3FreoqvG4MVQln/kCgF7Olq95IbOp0/BWyMwbdtn4VTvkM8Y7khCQ2Xgk/tcrCXig==", + "node_modules/@eslint/eslintrc": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-3.1.0.tgz", + "integrity": "sha512-4Bfj15dVJdoy3RfZmmo86RK1Fwzn6SstsvK9JS+BaVKqC6QQQQyXekNaC+g+LKNgkQ+2VhGAzm6hO40AhMR3zQ==", + "dev": true, "license": "MIT", "dependencies": { - "bytes": "3.1.2", - "http-errors": "2.0.0", - "iconv-lite": "0.4.24", - "unpipe": "1.0.0" + "ajv": "^6.12.4", + "debug": "^4.3.2", + "espree": "^10.0.1", + "globals": "^14.0.0", + "ignore": "^5.2.0", + "import-fresh": "^3.2.1", + "js-yaml": "^4.1.0", + "minimatch": "^3.1.2", + "strip-json-comments": "^3.1.1" }, "engines": { - "node": ">= 0.8" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" } }, - "node_modules/@nestjs/platform-express/node_modules/send": { - "version": "0.18.0", - "resolved": "https://registry.npmjs.org/send/-/send-0.18.0.tgz", - "integrity": "sha512-qqWzuOjSFOuqPjFe4NOsMLafToQQwBSOEpS+FwEt3A2V3vKubTquT3vmLTQpFgMXp8AlFWFuP1qKaJZOtPpVXg==", - "license": "MIT", - "dependencies": { - "debug": "2.6.9", - "depd": "2.0.0", - "destroy": "1.2.0", - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "etag": "~1.8.1", - "fresh": "0.5.2", - "http-errors": "2.0.0", - "mime": "1.6.0", - "ms": "2.1.3", - "on-finished": "2.4.1", - "range-parser": "~1.2.1", - "statuses": "2.0.1" - }, + "node_modules/@eslint/eslintrc/node_modules/eslint-visitor-keys": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-4.2.1.tgz", + "integrity": "sha512-Uhdk5sfqcee/9H/rCOJikYz67o0a2Tw2hGRPOG2Y1R2dg7brRe1uG0yaNQDHu+TO/uQPF/5eCapvYSmHUjt7JQ==", + "dev": true, + "license": "Apache-2.0", "engines": { - "node": ">= 0.8.0" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" } }, - "node_modules/@nestjs/platform-express/node_modules/serve-static": { - "version": "1.15.0", - "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.15.0.tgz", - "integrity": "sha512-XGuRDNjXUijsUL0vl6nSD7cwURuzEgglbOaFuZM9g3kwDXOWVTck0jLzjPzGD+TazWbboZYu52/9/XPdUgne9g==", - "license": "MIT", + "node_modules/@eslint/eslintrc/node_modules/espree": { + "version": "10.4.0", + "resolved": "https://registry.npmjs.org/espree/-/espree-10.4.0.tgz", + "integrity": "sha512-j6PAQ2uUr79PZhBjP5C5fhl8e39FmRnOjsD5lGnWrFU8i2G776tBK7+nP8KuQUTTyAZUwfQqXAgrVH5MbH9CYQ==", + "dev": true, + "license": "BSD-2-Clause", "dependencies": { - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "parseurl": "~1.3.3", - "send": "0.18.0" + "acorn": "^8.15.0", + "acorn-jsx": "^5.3.2", + "eslint-visitor-keys": "^4.2.1" }, "engines": { - "node": ">= 0.8.0" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" } }, - "node_modules/@nestjs/platform-express/node_modules/statuses": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", - "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==", + "node_modules/@eslint/eslintrc/node_modules/globals": { + "version": "14.0.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-14.0.0.tgz", + "integrity": "sha512-oahGvuMGQlPw/ivIYBjVSrWAfWLBeku5tpPE2fOPLi+WHffIWbuh2tCjhyQhTBPMf5E9jDEH4FOmTYgYwbKwtQ==", + "dev": true, "license": "MIT", "engines": { - "node": ">= 0.8" + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/@nestjs/platform-express/node_modules/tslib": { - "version": "2.6.2", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz", - "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==", - "license": "0BSD" - }, - "node_modules/@nestjs/schedule": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/@nestjs/schedule/-/schedule-6.0.1.tgz", - "integrity": "sha512-v3yO6cSPAoBSSyH67HWnXHzuhPhSNZhRmLY38JvCt2sqY8sPMOODpcU1D79iUMFf7k16DaMEbL4Mgx61ZhiC8Q==", + "node_modules/@eslint/js": { + "version": "9.36.0", + "resolved": "https://registry.npmjs.org/@eslint/js/-/js-9.36.0.tgz", + "integrity": "sha512-uhCbYtYynH30iZErszX78U+nR3pJU3RHGQ57NXy5QupD4SBVwDeU8TNBy+MjMngc1UyIW9noKqsRqfjQTBU2dw==", + "dev": true, "license": "MIT", - "dependencies": { - "cron": "4.3.3" + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" }, - "peerDependencies": { - "@nestjs/common": "^10.0.0 || ^11.0.0", - "@nestjs/core": "^10.0.0 || ^11.0.0" + "funding": { + "url": "https://eslint.org/donate" } }, - "node_modules/@nestjs/schematics": { - "version": "10.1.1", - "resolved": "https://registry.npmjs.org/@nestjs/schematics/-/schematics-10.1.1.tgz", - "integrity": "sha512-o4lfCnEeIkfJhGBbLZxTuVWcGuqDCFwg5OrvpgRUBM7vI/vONvKKiB5riVNpO+JqXoH0I42NNeDb0m4V5RREig==", + "node_modules/@ethereumjs/common": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/@ethereumjs/common/-/common-3.2.0.tgz", + "integrity": "sha512-pksvzI0VyLgmuEF2FA/JR/4/y6hcPq8OUail3/AvycBaW1d5VSauOZzqGvJ3RTmR4MU35lWE8KseKOsEhrFRBA==", "license": "MIT", "dependencies": { - "@angular-devkit/core": "17.1.2", - "@angular-devkit/schematics": "17.1.2", - "comment-json": "4.2.3", - "jsonc-parser": "3.2.1", - "pluralize": "8.0.0" - }, - "peerDependencies": { - "typescript": ">=4.8.2" + "@ethereumjs/util": "^8.1.0", + "crc-32": "^1.2.0" } }, - "node_modules/@nestjs/schematics/node_modules/jsonc-parser": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/jsonc-parser/-/jsonc-parser-3.2.1.tgz", - "integrity": "sha512-AilxAyFOAcK5wA1+LeaySVBrHsGQvUFCDWXKpZjzaL0PqW+xfBOttn8GNtWKFWqneyMZj41MWF9Kl6iPWLwgOA==", - "license": "MIT" - }, - "node_modules/@nestjs/swagger": { - "version": "7.4.2", - "resolved": "https://registry.npmjs.org/@nestjs/swagger/-/swagger-7.4.2.tgz", - "integrity": "sha512-Mu6TEn1M/owIvAx2B4DUQObQXqo2028R2s9rSZ/hJEgBK95+doTwS0DjmVA2wTeZTyVtXOoN7CsoM5pONBzvKQ==", - "license": "MIT", - "dependencies": { - "@microsoft/tsdoc": "^0.15.0", - "@nestjs/mapped-types": "2.0.5", - "js-yaml": "4.1.0", - "lodash": "4.17.21", - "path-to-regexp": "3.3.0", - "swagger-ui-dist": "5.17.14" - }, - "peerDependencies": { - "@fastify/static": "^6.0.0 || ^7.0.0", - "@nestjs/common": "^9.0.0 || ^10.0.0", - "@nestjs/core": "^9.0.0 || ^10.0.0", - "class-transformer": "*", - "class-validator": "*", - "reflect-metadata": "^0.1.12 || ^0.2.0" + "node_modules/@ethereumjs/rlp": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/@ethereumjs/rlp/-/rlp-4.0.1.tgz", + "integrity": "sha512-tqsQiBQDQdmPWE1xkkBq4rlSW5QZpLOUJ5RJh2/9fug+q9tnUhuZoVLk7s0scUIKTOzEtR72DFBXI4WiZcMpvw==", + "license": "MPL-2.0", + "bin": { + "rlp": "bin/rlp" }, - "peerDependenciesMeta": { - "@fastify/static": { - "optional": true - }, - "class-transformer": { - "optional": true - }, - "class-validator": { - "optional": true - } + "engines": { + "node": ">=14" } }, - "node_modules/@nestjs/swagger/node_modules/path-to-regexp": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-3.3.0.tgz", - "integrity": "sha512-qyCH421YQPS2WFDxDjftfc1ZR5WKQzVzqsp4n9M2kQhVOo/ByahFoUNJfl58kOcEGfQ//7weFTDhm+ss8Ecxgw==", - "license": "MIT" - }, - "node_modules/@nestjs/testing": { - "version": "10.3.3", - "resolved": "https://registry.npmjs.org/@nestjs/testing/-/testing-10.3.3.tgz", - "integrity": "sha512-kX20GfjAImL5grd/i69uD/x7sc00BaqGcP2dRG3ilqshQUuy5DOmspLCr3a2C8xmVU7kzK4spT0oTxhe6WcCAA==", - "dev": true, - "license": "MIT", + "node_modules/@ethereumjs/tx": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@ethereumjs/tx/-/tx-4.2.0.tgz", + "integrity": "sha512-1nc6VO4jtFd172BbSnTnDQVr9IYBFl1y4xPzZdtkrkKIncBCkdbgfdRV+MiTkJYAtTxvV12GRZLqBFT1PNK6Yw==", + "license": "MPL-2.0", "dependencies": { - "tslib": "2.6.2" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/nest" - }, - "peerDependencies": { - "@nestjs/common": "^10.0.0", - "@nestjs/core": "^10.0.0", - "@nestjs/microservices": "^10.0.0", - "@nestjs/platform-express": "^10.0.0" + "@ethereumjs/common": "^3.2.0", + "@ethereumjs/rlp": "^4.0.1", + "@ethereumjs/util": "^8.1.0", + "ethereum-cryptography": "^2.0.0" }, - "peerDependenciesMeta": { - "@nestjs/microservices": { - "optional": true - }, - "@nestjs/platform-express": { - "optional": true - } - } - }, - "node_modules/@nestjs/testing/node_modules/tslib": { - "version": "2.6.2", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz", - "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==", - "dev": true, - "license": "0BSD" - }, - "node_modules/@nestjs/typeorm": { - "version": "11.0.0", - "resolved": "https://registry.npmjs.org/@nestjs/typeorm/-/typeorm-11.0.0.tgz", - "integrity": "sha512-SOeUQl70Lb2OfhGkvnh4KXWlsd+zA08RuuQgT7kKbzivngxzSo1Oc7Usu5VxCxACQC9wc2l9esOHILSJeK7rJA==", - "license": "MIT", - "peerDependencies": { - "@nestjs/common": "^10.0.0 || ^11.0.0", - "@nestjs/core": "^10.0.0 || ^11.0.0", - "reflect-metadata": "^0.1.13 || ^0.2.0", - "rxjs": "^7.2.0", - "typeorm": "^0.3.0" - } - }, - "node_modules/@noble/ciphers": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/@noble/ciphers/-/ciphers-1.3.0.tgz", - "integrity": "sha512-2I0gnIVPtfnMw9ee9h1dJG7tp81+8Ob3OJb3Mv37rx5L40/b0i7djjCVvGOVqc9AEIQyvyu1i6ypKdFw8R8gQw==", - "license": "MIT", "engines": { - "node": "^14.21.3 || >=16" - }, - "funding": { - "url": "https://paulmillr.com/funding/" + "node": ">=14" } }, - "node_modules/@noble/curves": { - "version": "1.9.7", - "resolved": "https://registry.npmjs.org/@noble/curves/-/curves-1.9.7.tgz", - "integrity": "sha512-gbKGcRUYIjA3/zCCNaWDciTMFI0dCkvou3TL8Zmy5Nc7sJ47a0jtOeZoTaMxkuqRo9cRhjOdZJXegxYE5FN/xw==", - "license": "MIT", + "node_modules/@ethereumjs/util": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/@ethereumjs/util/-/util-8.1.0.tgz", + "integrity": "sha512-zQ0IqbdX8FZ9aw11vP+dZkKDkS+kgIvQPHnSAXzP9pLu+Rfu3D3XEeLbicvoXJTYnhZiPmsZUxgdzXwNKxRPbA==", + "license": "MPL-2.0", "dependencies": { - "@noble/hashes": "1.8.0" + "@ethereumjs/rlp": "^4.0.1", + "ethereum-cryptography": "^2.0.0", + "micro-ftch": "^0.3.1" }, "engines": { - "node": "^14.21.3 || >=16" - }, - "funding": { - "url": "https://paulmillr.com/funding/" + "node": ">=14" } }, - "node_modules/@noble/hashes": { - "version": "1.8.0", - "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.8.0.tgz", - "integrity": "sha512-jCs9ldd7NwzpgXDIf6P3+NrHh9/sD6CQdxHyjQI+h/6rDNo88ypBxxz45UDuZHz9r3tNz7N/VInSVoVdtXEI4A==", + "node_modules/@ethersproject/abi": { + "version": "5.8.0", + "resolved": "https://registry.npmjs.org/@ethersproject/abi/-/abi-5.8.0.tgz", + "integrity": "sha512-b9YS/43ObplgyV6SlyQsG53/vkSal0MNA1fskSC4mbnCMi8R+NkcH8K9FPYNESf6jUefBUniE4SOKms0E/KK1Q==", + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], "license": "MIT", - "engines": { - "node": "^14.21.3 || >=16" - }, - "funding": { - "url": "https://paulmillr.com/funding/" + "peer": true, + "dependencies": { + "@ethersproject/address": "^5.8.0", + "@ethersproject/bignumber": "^5.8.0", + "@ethersproject/bytes": "^5.8.0", + "@ethersproject/constants": "^5.8.0", + "@ethersproject/hash": "^5.8.0", + "@ethersproject/keccak256": "^5.8.0", + "@ethersproject/logger": "^5.8.0", + "@ethersproject/properties": "^5.8.0", + "@ethersproject/strings": "^5.8.0" } }, - "node_modules/@noble/secp256k1": { - "version": "1.7.1", - "resolved": "https://registry.npmjs.org/@noble/secp256k1/-/secp256k1-1.7.1.tgz", - "integrity": "sha512-hOUk6AyBFmqVrv7k5WAw/LpszxVbj9gGN4JRkIX52fdFAj1UA61KXmZDvqVEm+pOyec3+fIeZB02LYa/pWOArw==", - "dev": true, + "node_modules/@ethersproject/abstract-provider": { + "version": "5.8.0", + "resolved": "https://registry.npmjs.org/@ethersproject/abstract-provider/-/abstract-provider-5.8.0.tgz", + "integrity": "sha512-wC9SFcmh4UK0oKuLJQItoQdzS/qZ51EJegK6EmAWlh+OptpQ/npECOR3QqECd8iGHC0RJb4WKbVdSfif4ammrg==", "funding": [ { "type": "individual", - "url": "https://paulmillr.com/funding/" + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" } ], - "license": "MIT" - }, - "node_modules/@nodelib/fs.scandir": { - "version": "2.1.5", - "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", - "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", - "dev": true, "license": "MIT", "dependencies": { - "@nodelib/fs.stat": "2.0.5", - "run-parallel": "^1.1.9" - }, - "engines": { - "node": ">= 8" + "@ethersproject/bignumber": "^5.8.0", + "@ethersproject/bytes": "^5.8.0", + "@ethersproject/logger": "^5.8.0", + "@ethersproject/networks": "^5.8.0", + "@ethersproject/properties": "^5.8.0", + "@ethersproject/transactions": "^5.8.0", + "@ethersproject/web": "^5.8.0" } }, - "node_modules/@nodelib/fs.stat": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", - "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", - "dev": true, + "node_modules/@ethersproject/abstract-signer": { + "version": "5.8.0", + "resolved": "https://registry.npmjs.org/@ethersproject/abstract-signer/-/abstract-signer-5.8.0.tgz", + "integrity": "sha512-N0XhZTswXcmIZQdYtUnd79VJzvEwXQw6PK0dTl9VoYrEBxxCPXqS0Eod7q5TNKRxe1/5WUMuR0u0nqTF/avdCA==", + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], "license": "MIT", - "engines": { - "node": ">= 8" + "dependencies": { + "@ethersproject/abstract-provider": "^5.8.0", + "@ethersproject/bignumber": "^5.8.0", + "@ethersproject/bytes": "^5.8.0", + "@ethersproject/logger": "^5.8.0", + "@ethersproject/properties": "^5.8.0" } }, - "node_modules/@nodelib/fs.walk": { - "version": "1.2.8", - "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", - "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", - "dev": true, + "node_modules/@ethersproject/address": { + "version": "5.8.0", + "resolved": "https://registry.npmjs.org/@ethersproject/address/-/address-5.8.0.tgz", + "integrity": "sha512-GhH/abcC46LJwshoN+uBNoKVFPxUuZm6dA257z0vZkKmU1+t8xTn8oK7B9qrj8W2rFRMch4gbJl6PmVxjxBEBA==", + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], "license": "MIT", "dependencies": { - "@nodelib/fs.scandir": "2.1.5", - "fastq": "^1.6.0" - }, - "engines": { - "node": ">= 8" + "@ethersproject/bignumber": "^5.8.0", + "@ethersproject/bytes": "^5.8.0", + "@ethersproject/keccak256": "^5.8.0", + "@ethersproject/logger": "^5.8.0", + "@ethersproject/rlp": "^5.8.0" } }, - "node_modules/@nomicfoundation/edr": { - "version": "0.11.3", - "resolved": "https://registry.npmjs.org/@nomicfoundation/edr/-/edr-0.11.3.tgz", - "integrity": "sha512-kqILRkAd455Sd6v8mfP3C1/0tCOynJWY+Ir+k/9Boocu2kObCrsFgG+ZWB7fSBVdd9cPVSNrnhWS+V+PEo637g==", - "dev": true, + "node_modules/@ethersproject/base64": { + "version": "5.8.0", + "resolved": "https://registry.npmjs.org/@ethersproject/base64/-/base64-5.8.0.tgz", + "integrity": "sha512-lN0oIwfkYj9LbPx4xEkie6rAMJtySbpOAFXSDVQaBnAzYfB4X2Qr+FXJGxMoc3Bxp2Sm8OwvzMrywxyw0gLjIQ==", + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], "license": "MIT", "dependencies": { - "@nomicfoundation/edr-darwin-arm64": "0.11.3", - "@nomicfoundation/edr-darwin-x64": "0.11.3", - "@nomicfoundation/edr-linux-arm64-gnu": "0.11.3", - "@nomicfoundation/edr-linux-arm64-musl": "0.11.3", - "@nomicfoundation/edr-linux-x64-gnu": "0.11.3", - "@nomicfoundation/edr-linux-x64-musl": "0.11.3", - "@nomicfoundation/edr-win32-x64-msvc": "0.11.3" - }, - "engines": { - "node": ">= 18" + "@ethersproject/bytes": "^5.8.0" } }, - "node_modules/@nomicfoundation/edr-darwin-arm64": { - "version": "0.11.3", - "resolved": "https://registry.npmjs.org/@nomicfoundation/edr-darwin-arm64/-/edr-darwin-arm64-0.11.3.tgz", - "integrity": "sha512-w0tksbdtSxz9nuzHKsfx4c2mwaD0+l5qKL2R290QdnN9gi9AV62p9DHkOgfBdyg6/a6ZlnQqnISi7C9avk/6VA==", - "dev": true, - "license": "MIT", - "engines": { + "node_modules/@ethersproject/basex": { + "version": "5.8.0", + "resolved": "https://registry.npmjs.org/@ethersproject/basex/-/basex-5.8.0.tgz", + "integrity": "sha512-PIgTszMlDRmNwW9nhS6iqtVfdTAKosA7llYXNmGPw4YAI1PUyMv28988wAb41/gHF/WqGdoLv0erHaRcHRKW2Q==", + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "license": "MIT", + "dependencies": { + "@ethersproject/bytes": "^5.8.0", + "@ethersproject/properties": "^5.8.0" + } + }, + "node_modules/@ethersproject/bignumber": { + "version": "5.8.0", + "resolved": "https://registry.npmjs.org/@ethersproject/bignumber/-/bignumber-5.8.0.tgz", + "integrity": "sha512-ZyaT24bHaSeJon2tGPKIiHszWjD/54Sz8t57Toch475lCLljC6MgPmxk7Gtzz+ddNN5LuHea9qhAe0x3D+uYPA==", + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "license": "MIT", + "dependencies": { + "@ethersproject/bytes": "^5.8.0", + "@ethersproject/logger": "^5.8.0", + "bn.js": "^5.2.1" + } + }, + "node_modules/@ethersproject/bytes": { + "version": "5.8.0", + "resolved": "https://registry.npmjs.org/@ethersproject/bytes/-/bytes-5.8.0.tgz", + "integrity": "sha512-vTkeohgJVCPVHu5c25XWaWQOZ4v+DkGoC42/TS2ond+PARCxTJvgTFUNDZovyQ/uAQ4EcpqqowKydcdmRKjg7A==", + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "license": "MIT", + "dependencies": { + "@ethersproject/logger": "^5.8.0" + } + }, + "node_modules/@ethersproject/constants": { + "version": "5.8.0", + "resolved": "https://registry.npmjs.org/@ethersproject/constants/-/constants-5.8.0.tgz", + "integrity": "sha512-wigX4lrf5Vu+axVTIvNsuL6YrV4O5AXl5ubcURKMEME5TnWBouUh0CDTWxZ2GpnRn1kcCgE7l8O5+VbV9QTTcg==", + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "license": "MIT", + "dependencies": { + "@ethersproject/bignumber": "^5.8.0" + } + }, + "node_modules/@ethersproject/contracts": { + "version": "5.8.0", + "resolved": "https://registry.npmjs.org/@ethersproject/contracts/-/contracts-5.8.0.tgz", + "integrity": "sha512-0eFjGz9GtuAi6MZwhb4uvUM216F38xiuR0yYCjKJpNfSEy4HUM8hvqqBj9Jmm0IUz8l0xKEhWwLIhPgxNY0yvQ==", + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "license": "MIT", + "dependencies": { + "@ethersproject/abi": "^5.8.0", + "@ethersproject/abstract-provider": "^5.8.0", + "@ethersproject/abstract-signer": "^5.8.0", + "@ethersproject/address": "^5.8.0", + "@ethersproject/bignumber": "^5.8.0", + "@ethersproject/bytes": "^5.8.0", + "@ethersproject/constants": "^5.8.0", + "@ethersproject/logger": "^5.8.0", + "@ethersproject/properties": "^5.8.0", + "@ethersproject/transactions": "^5.8.0" + } + }, + "node_modules/@ethersproject/hash": { + "version": "5.8.0", + "resolved": "https://registry.npmjs.org/@ethersproject/hash/-/hash-5.8.0.tgz", + "integrity": "sha512-ac/lBcTbEWW/VGJij0CNSw/wPcw9bSRgCB0AIBz8CvED/jfvDoV9hsIIiWfvWmFEi8RcXtlNwp2jv6ozWOsooA==", + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "license": "MIT", + "dependencies": { + "@ethersproject/abstract-signer": "^5.8.0", + "@ethersproject/address": "^5.8.0", + "@ethersproject/base64": "^5.8.0", + "@ethersproject/bignumber": "^5.8.0", + "@ethersproject/bytes": "^5.8.0", + "@ethersproject/keccak256": "^5.8.0", + "@ethersproject/logger": "^5.8.0", + "@ethersproject/properties": "^5.8.0", + "@ethersproject/strings": "^5.8.0" + } + }, + "node_modules/@ethersproject/hdnode": { + "version": "5.8.0", + "resolved": "https://registry.npmjs.org/@ethersproject/hdnode/-/hdnode-5.8.0.tgz", + "integrity": "sha512-4bK1VF6E83/3/Im0ERnnUeWOY3P1BZml4ZD3wcH8Ys0/d1h1xaFt6Zc+Dh9zXf9TapGro0T4wvO71UTCp3/uoA==", + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "license": "MIT", + "dependencies": { + "@ethersproject/abstract-signer": "^5.8.0", + "@ethersproject/basex": "^5.8.0", + "@ethersproject/bignumber": "^5.8.0", + "@ethersproject/bytes": "^5.8.0", + "@ethersproject/logger": "^5.8.0", + "@ethersproject/pbkdf2": "^5.8.0", + "@ethersproject/properties": "^5.8.0", + "@ethersproject/sha2": "^5.8.0", + "@ethersproject/signing-key": "^5.8.0", + "@ethersproject/strings": "^5.8.0", + "@ethersproject/transactions": "^5.8.0", + "@ethersproject/wordlists": "^5.8.0" + } + }, + "node_modules/@ethersproject/json-wallets": { + "version": "5.8.0", + "resolved": "https://registry.npmjs.org/@ethersproject/json-wallets/-/json-wallets-5.8.0.tgz", + "integrity": "sha512-HxblNck8FVUtNxS3VTEYJAcwiKYsBIF77W15HufqlBF9gGfhmYOJtYZp8fSDZtn9y5EaXTE87zDwzxRoTFk11w==", + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "license": "MIT", + "dependencies": { + "@ethersproject/abstract-signer": "^5.8.0", + "@ethersproject/address": "^5.8.0", + "@ethersproject/bytes": "^5.8.0", + "@ethersproject/hdnode": "^5.8.0", + "@ethersproject/keccak256": "^5.8.0", + "@ethersproject/logger": "^5.8.0", + "@ethersproject/pbkdf2": "^5.8.0", + "@ethersproject/properties": "^5.8.0", + "@ethersproject/random": "^5.8.0", + "@ethersproject/strings": "^5.8.0", + "@ethersproject/transactions": "^5.8.0", + "aes-js": "3.0.0", + "scrypt-js": "3.0.1" + } + }, + "node_modules/@ethersproject/keccak256": { + "version": "5.8.0", + "resolved": "https://registry.npmjs.org/@ethersproject/keccak256/-/keccak256-5.8.0.tgz", + "integrity": "sha512-A1pkKLZSz8pDaQ1ftutZoaN46I6+jvuqugx5KYNeQOPqq+JZ0Txm7dlWesCHB5cndJSu5vP2VKptKf7cksERng==", + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "license": "MIT", + "dependencies": { + "@ethersproject/bytes": "^5.8.0", + "js-sha3": "0.8.0" + } + }, + "node_modules/@ethersproject/logger": { + "version": "5.8.0", + "resolved": "https://registry.npmjs.org/@ethersproject/logger/-/logger-5.8.0.tgz", + "integrity": "sha512-Qe6knGmY+zPPWTC+wQrpitodgBfH7XoceCGL5bJVejmH+yCS3R8jJm8iiWuvWbG76RUmyEG53oqv6GMVWqunjA==", + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "license": "MIT" + }, + "node_modules/@ethersproject/networks": { + "version": "5.8.0", + "resolved": "https://registry.npmjs.org/@ethersproject/networks/-/networks-5.8.0.tgz", + "integrity": "sha512-egPJh3aPVAzbHwq8DD7Po53J4OUSsA1MjQp8Vf/OZPav5rlmWUaFLiq8cvQiGK0Z5K6LYzm29+VA/p4RL1FzNg==", + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "license": "MIT", + "dependencies": { + "@ethersproject/logger": "^5.8.0" + } + }, + "node_modules/@ethersproject/pbkdf2": { + "version": "5.8.0", + "resolved": "https://registry.npmjs.org/@ethersproject/pbkdf2/-/pbkdf2-5.8.0.tgz", + "integrity": "sha512-wuHiv97BrzCmfEaPbUFpMjlVg/IDkZThp9Ri88BpjRleg4iePJaj2SW8AIyE8cXn5V1tuAaMj6lzvsGJkGWskg==", + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "license": "MIT", + "dependencies": { + "@ethersproject/bytes": "^5.8.0", + "@ethersproject/sha2": "^5.8.0" + } + }, + "node_modules/@ethersproject/properties": { + "version": "5.8.0", + "resolved": "https://registry.npmjs.org/@ethersproject/properties/-/properties-5.8.0.tgz", + "integrity": "sha512-PYuiEoQ+FMaZZNGrStmN7+lWjlsoufGIHdww7454FIaGdbe/p5rnaCXTr5MtBYl3NkeoVhHZuyzChPeGeKIpQw==", + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "license": "MIT", + "dependencies": { + "@ethersproject/logger": "^5.8.0" + } + }, + "node_modules/@ethersproject/providers": { + "version": "5.8.0", + "resolved": "https://registry.npmjs.org/@ethersproject/providers/-/providers-5.8.0.tgz", + "integrity": "sha512-3Il3oTzEx3o6kzcg9ZzbE+oCZYyY+3Zh83sKkn4s1DZfTUjIegHnN2Cm0kbn9YFy45FDVcuCLLONhU7ny0SsCw==", + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "license": "MIT", + "peer": true, + "dependencies": { + "@ethersproject/abstract-provider": "^5.8.0", + "@ethersproject/abstract-signer": "^5.8.0", + "@ethersproject/address": "^5.8.0", + "@ethersproject/base64": "^5.8.0", + "@ethersproject/basex": "^5.8.0", + "@ethersproject/bignumber": "^5.8.0", + "@ethersproject/bytes": "^5.8.0", + "@ethersproject/constants": "^5.8.0", + "@ethersproject/hash": "^5.8.0", + "@ethersproject/logger": "^5.8.0", + "@ethersproject/networks": "^5.8.0", + "@ethersproject/properties": "^5.8.0", + "@ethersproject/random": "^5.8.0", + "@ethersproject/rlp": "^5.8.0", + "@ethersproject/sha2": "^5.8.0", + "@ethersproject/strings": "^5.8.0", + "@ethersproject/transactions": "^5.8.0", + "@ethersproject/web": "^5.8.0", + "bech32": "1.1.4", + "ws": "8.18.0" + } + }, + "node_modules/@ethersproject/random": { + "version": "5.8.0", + "resolved": "https://registry.npmjs.org/@ethersproject/random/-/random-5.8.0.tgz", + "integrity": "sha512-E4I5TDl7SVqyg4/kkA/qTfuLWAQGXmSOgYyO01So8hLfwgKvYK5snIlzxJMk72IFdG/7oh8yuSqY2KX7MMwg+A==", + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "license": "MIT", + "dependencies": { + "@ethersproject/bytes": "^5.8.0", + "@ethersproject/logger": "^5.8.0" + } + }, + "node_modules/@ethersproject/rlp": { + "version": "5.8.0", + "resolved": "https://registry.npmjs.org/@ethersproject/rlp/-/rlp-5.8.0.tgz", + "integrity": "sha512-LqZgAznqDbiEunaUvykH2JAoXTT9NV0Atqk8rQN9nx9SEgThA/WMx5DnW8a9FOufo//6FZOCHZ+XiClzgbqV9Q==", + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "license": "MIT", + "dependencies": { + "@ethersproject/bytes": "^5.8.0", + "@ethersproject/logger": "^5.8.0" + } + }, + "node_modules/@ethersproject/sha2": { + "version": "5.8.0", + "resolved": "https://registry.npmjs.org/@ethersproject/sha2/-/sha2-5.8.0.tgz", + "integrity": "sha512-dDOUrXr9wF/YFltgTBYS0tKslPEKr6AekjqDW2dbn1L1xmjGR+9GiKu4ajxovnrDbwxAKdHjW8jNcwfz8PAz4A==", + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "license": "MIT", + "dependencies": { + "@ethersproject/bytes": "^5.8.0", + "@ethersproject/logger": "^5.8.0", + "hash.js": "1.1.7" + } + }, + "node_modules/@ethersproject/signing-key": { + "version": "5.8.0", + "resolved": "https://registry.npmjs.org/@ethersproject/signing-key/-/signing-key-5.8.0.tgz", + "integrity": "sha512-LrPW2ZxoigFi6U6aVkFN/fa9Yx/+4AtIUe4/HACTvKJdhm0eeb107EVCIQcrLZkxaSIgc/eCrX8Q1GtbH+9n3w==", + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "license": "MIT", + "dependencies": { + "@ethersproject/bytes": "^5.8.0", + "@ethersproject/logger": "^5.8.0", + "@ethersproject/properties": "^5.8.0", + "bn.js": "^5.2.1", + "elliptic": "6.6.1", + "hash.js": "1.1.7" + } + }, + "node_modules/@ethersproject/solidity": { + "version": "5.8.0", + "resolved": "https://registry.npmjs.org/@ethersproject/solidity/-/solidity-5.8.0.tgz", + "integrity": "sha512-4CxFeCgmIWamOHwYN9d+QWGxye9qQLilpgTU0XhYs1OahkclF+ewO+3V1U0mvpiuQxm5EHHmv8f7ClVII8EHsA==", + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "license": "MIT", + "dependencies": { + "@ethersproject/bignumber": "^5.8.0", + "@ethersproject/bytes": "^5.8.0", + "@ethersproject/keccak256": "^5.8.0", + "@ethersproject/logger": "^5.8.0", + "@ethersproject/sha2": "^5.8.0", + "@ethersproject/strings": "^5.8.0" + } + }, + "node_modules/@ethersproject/strings": { + "version": "5.8.0", + "resolved": "https://registry.npmjs.org/@ethersproject/strings/-/strings-5.8.0.tgz", + "integrity": "sha512-qWEAk0MAvl0LszjdfnZ2uC8xbR2wdv4cDabyHiBh3Cldq/T8dPH3V4BbBsAYJUeonwD+8afVXld274Ls+Y1xXg==", + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "license": "MIT", + "dependencies": { + "@ethersproject/bytes": "^5.8.0", + "@ethersproject/constants": "^5.8.0", + "@ethersproject/logger": "^5.8.0" + } + }, + "node_modules/@ethersproject/transactions": { + "version": "5.8.0", + "resolved": "https://registry.npmjs.org/@ethersproject/transactions/-/transactions-5.8.0.tgz", + "integrity": "sha512-UglxSDjByHG0TuU17bDfCemZ3AnKO2vYrL5/2n2oXvKzvb7Cz+W9gOWXKARjp2URVwcWlQlPOEQyAviKwT4AHg==", + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "license": "MIT", + "dependencies": { + "@ethersproject/address": "^5.8.0", + "@ethersproject/bignumber": "^5.8.0", + "@ethersproject/bytes": "^5.8.0", + "@ethersproject/constants": "^5.8.0", + "@ethersproject/keccak256": "^5.8.0", + "@ethersproject/logger": "^5.8.0", + "@ethersproject/properties": "^5.8.0", + "@ethersproject/rlp": "^5.8.0", + "@ethersproject/signing-key": "^5.8.0" + } + }, + "node_modules/@ethersproject/units": { + "version": "5.8.0", + "resolved": "https://registry.npmjs.org/@ethersproject/units/-/units-5.8.0.tgz", + "integrity": "sha512-lxq0CAnc5kMGIiWW4Mr041VT8IhNM+Pn5T3haO74XZWFulk7wH1Gv64HqE96hT4a7iiNMdOCFEBgaxWuk8ETKQ==", + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "license": "MIT", + "dependencies": { + "@ethersproject/bignumber": "^5.8.0", + "@ethersproject/constants": "^5.8.0", + "@ethersproject/logger": "^5.8.0" + } + }, + "node_modules/@ethersproject/wallet": { + "version": "5.8.0", + "resolved": "https://registry.npmjs.org/@ethersproject/wallet/-/wallet-5.8.0.tgz", + "integrity": "sha512-G+jnzmgg6UxurVKRKvw27h0kvG75YKXZKdlLYmAHeF32TGUzHkOFd7Zn6QHOTYRFWnfjtSSFjBowKo7vfrXzPA==", + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "license": "MIT", + "dependencies": { + "@ethersproject/abstract-provider": "^5.8.0", + "@ethersproject/abstract-signer": "^5.8.0", + "@ethersproject/address": "^5.8.0", + "@ethersproject/bignumber": "^5.8.0", + "@ethersproject/bytes": "^5.8.0", + "@ethersproject/hash": "^5.8.0", + "@ethersproject/hdnode": "^5.8.0", + "@ethersproject/json-wallets": "^5.8.0", + "@ethersproject/keccak256": "^5.8.0", + "@ethersproject/logger": "^5.8.0", + "@ethersproject/properties": "^5.8.0", + "@ethersproject/random": "^5.8.0", + "@ethersproject/signing-key": "^5.8.0", + "@ethersproject/transactions": "^5.8.0", + "@ethersproject/wordlists": "^5.8.0" + } + }, + "node_modules/@ethersproject/web": { + "version": "5.8.0", + "resolved": "https://registry.npmjs.org/@ethersproject/web/-/web-5.8.0.tgz", + "integrity": "sha512-j7+Ksi/9KfGviws6Qtf9Q7KCqRhpwrYKQPs+JBA/rKVFF/yaWLHJEH3zfVP2plVu+eys0d2DlFmhoQJayFewcw==", + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "license": "MIT", + "dependencies": { + "@ethersproject/base64": "^5.8.0", + "@ethersproject/bytes": "^5.8.0", + "@ethersproject/logger": "^5.8.0", + "@ethersproject/properties": "^5.8.0", + "@ethersproject/strings": "^5.8.0" + } + }, + "node_modules/@ethersproject/wordlists": { + "version": "5.8.0", + "resolved": "https://registry.npmjs.org/@ethersproject/wordlists/-/wordlists-5.8.0.tgz", + "integrity": "sha512-2df9bbXicZws2Sb5S6ET493uJ0Z84Fjr3pC4tu/qlnZERibZCeUVuqdtt+7Tv9xxhUxHoIekIA7avrKUWHrezg==", + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "license": "MIT", + "dependencies": { + "@ethersproject/bytes": "^5.8.0", + "@ethersproject/hash": "^5.8.0", + "@ethersproject/logger": "^5.8.0", + "@ethersproject/properties": "^5.8.0", + "@ethersproject/strings": "^5.8.0" + } + }, + "node_modules/@faker-js/faker": { + "version": "9.8.0", + "resolved": "https://registry.npmjs.org/@faker-js/faker/-/faker-9.8.0.tgz", + "integrity": "sha512-U9wpuSrJC93jZBxx/Qq2wPjCuYISBueyVUGK7qqdmj7r/nxaxwW8AQDCLeRO7wZnjj94sh3p246cAYjUKuqgfg==", + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/fakerjs" + } + ], + "license": "MIT", + "engines": { + "node": ">=18.0.0", + "npm": ">=9.0.0" + } + }, + "node_modules/@fastify/busboy": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/@fastify/busboy/-/busboy-2.1.1.tgz", + "integrity": "sha512-vBZP4NlzfOlerQTnba4aqZoMhE/a9HY7HRqoOPaETQcSQuWEIyZMHGfVu6w9wGtGK5fED5qRs2DteVCjOH60sA==", + "license": "MIT", + "engines": { + "node": ">=14" + } + }, + "node_modules/@fireblocks/fireblocks-web3-provider": { + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/@fireblocks/fireblocks-web3-provider/-/fireblocks-web3-provider-1.2.5.tgz", + "integrity": "sha512-d/Uk+IxFXRGhR8V9FinBTuY99P5F2t9kvB5EsSJ7UVJf4W0uRrtX4sAbf4KuTKGhFFvpJNx8xhUEOhBO8adJfQ==", + "license": "MIT", + "dependencies": { + "@ethersproject/units": "^5.7.0", + "debug": "^4.3.4", + "ethers": "^5.7.2", + "fireblocks-sdk": "^3.1.4", + "web3-providers-http": "1.8.0" + } + }, + "node_modules/@fireblocks/fireblocks-web3-provider/node_modules/axios": { + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/axios/-/axios-0.27.2.tgz", + "integrity": "sha512-t+yRIyySRTp/wua5xEr+z1q60QmLq8ABsS5O9Me1AsE5dfKqgnCFzwiCZZ/cGNd1lq4/7akDWMxdhVlucjmnOQ==", + "license": "MIT", + "dependencies": { + "follow-redirects": "^1.14.9", + "form-data": "^4.0.0" + } + }, + "node_modules/@fireblocks/fireblocks-web3-provider/node_modules/fireblocks-sdk": { + "version": "3.1.4", + "resolved": "https://registry.npmjs.org/fireblocks-sdk/-/fireblocks-sdk-3.1.4.tgz", + "integrity": "sha512-R0Mg4ZkGAhNSRq7evjteeEYjdpH6KuJo4t/TCKebP/EH2YLwXr24BlGKoRslJpWVepKNI0XWE3cX41VKgPiZ5A==", + "license": "MIT", + "dependencies": { + "axios": "^0.27.2", + "jsonwebtoken": "9.0.0", + "platform": "^1.3.6", + "qs": "^6.11.0", + "query-string": "^7.1.3", + "uuid": "^8.3.2" + } + }, + "node_modules/@fireblocks/fireblocks-web3-provider/node_modules/uuid": { + "version": "8.3.2", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", + "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==", + "license": "MIT", + "bin": { + "uuid": "dist/bin/uuid" + } + }, + "node_modules/@floating-ui/core": { + "version": "1.7.3", + "resolved": "https://registry.npmjs.org/@floating-ui/core/-/core-1.7.3.tgz", + "integrity": "sha512-sGnvb5dmrJaKEZ+LDIpguvdX3bDlEllmv4/ClQ9awcmCZrlx5jQyyMWFM5kBI+EyNOCDDiKk8il0zeuX3Zlg/w==", + "license": "MIT", + "dependencies": { + "@floating-ui/utils": "^0.2.10" + } + }, + "node_modules/@floating-ui/dom": { + "version": "1.7.4", + "resolved": "https://registry.npmjs.org/@floating-ui/dom/-/dom-1.7.4.tgz", + "integrity": "sha512-OOchDgh4F2CchOX94cRVqhvy7b3AFb+/rQXyswmzmGakRfkMgoWVjfnLWkRirfLEfuD4ysVW16eXzwt3jHIzKA==", + "license": "MIT", + "dependencies": { + "@floating-ui/core": "^1.7.3", + "@floating-ui/utils": "^0.2.10" + } + }, + "node_modules/@floating-ui/utils": { + "version": "0.2.10", + "resolved": "https://registry.npmjs.org/@floating-ui/utils/-/utils-0.2.10.tgz", + "integrity": "sha512-aGTxbpbg8/b5JfU1HXSrbH3wXZuLPJcNEcZQFMxLs3oSzgtVu6nFPkbbGGUvBcUjKV2YyB9Wxxabo+HEH9tcRQ==", + "license": "MIT" + }, + "node_modules/@golevelup/ts-jest": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/@golevelup/ts-jest/-/ts-jest-0.4.0.tgz", + "integrity": "sha512-ehgllV/xU8PC+yVyEUtTzhiSQKsr7k5Jz74B6dtCaVJz7/Vo7JiaACsCLvD7/iATlJUAEqvBson0OHewD3JDzQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/@grpc/grpc-js": { + "version": "1.14.0", + "resolved": "https://registry.npmjs.org/@grpc/grpc-js/-/grpc-js-1.14.0.tgz", + "integrity": "sha512-N8Jx6PaYzcTRNzirReJCtADVoq4z7+1KQ4E70jTg/koQiMoUSN1kbNjPOqpPbhMFhfU1/l7ixspPl8dNY+FoUg==", + "license": "Apache-2.0", + "dependencies": { + "@grpc/proto-loader": "^0.8.0", + "@js-sdsl/ordered-map": "^4.4.2" + }, + "engines": { + "node": ">=12.10.0" + } + }, + "node_modules/@grpc/proto-loader": { + "version": "0.8.0", + "resolved": "https://registry.npmjs.org/@grpc/proto-loader/-/proto-loader-0.8.0.tgz", + "integrity": "sha512-rc1hOQtjIWGxcxpb9aHAfLpIctjEnsDehj0DAiVfBlmT84uvR0uUtN2hEi/ecvWVjXUGf5qPF4qEgiLOx1YIMQ==", + "license": "Apache-2.0", + "dependencies": { + "lodash.camelcase": "^4.3.0", + "long": "^5.0.0", + "protobufjs": "^7.5.3", + "yargs": "^17.7.2" + }, + "bin": { + "proto-loader-gen-types": "build/bin/proto-loader-gen-types.js" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/@grpc/proto-loader/node_modules/long": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/long/-/long-5.3.2.tgz", + "integrity": "sha512-mNAgZ1GmyNhD7AuqnTG3/VQ26o760+ZYBPKjPvugO8+nLbYfX6TVpJPseBvopbdY+qpZ/lKUnmEc1LeZYS3QAA==", + "license": "Apache-2.0" + }, + "node_modules/@grpc/proto-loader/node_modules/protobufjs": { + "version": "7.5.4", + "resolved": "https://registry.npmjs.org/protobufjs/-/protobufjs-7.5.4.tgz", + "integrity": "sha512-CvexbZtbov6jW2eXAvLukXjXUW1TzFaivC46BpWc/3BpcCysb5Vffu+B3XHMm8lVEuy2Mm4XGex8hBSg1yapPg==", + "hasInstallScript": true, + "license": "BSD-3-Clause", + "dependencies": { + "@protobufjs/aspromise": "^1.1.2", + "@protobufjs/base64": "^1.1.2", + "@protobufjs/codegen": "^2.0.4", + "@protobufjs/eventemitter": "^1.1.0", + "@protobufjs/fetch": "^1.1.0", + "@protobufjs/float": "^1.0.2", + "@protobufjs/inquire": "^1.1.0", + "@protobufjs/path": "^1.1.2", + "@protobufjs/pool": "^1.1.0", + "@protobufjs/utf8": "^1.1.0", + "@types/node": ">=13.7.0", + "long": "^5.0.0" + }, + "engines": { + "node": ">=12.0.0" + } + }, + "node_modules/@hapi/hoek": { + "version": "9.3.0", + "resolved": "https://registry.npmjs.org/@hapi/hoek/-/hoek-9.3.0.tgz", + "integrity": "sha512-/c6rf4UJlmHlC9b5BaNvzAcFv7HZ2QHaV0D4/HNlBdvFnvQq8RI4kYdhyPCl7Xj+oWvTWQ8ujhqS53LIgAe6KQ==", + "license": "BSD-3-Clause" + }, + "node_modules/@hapi/topo": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/@hapi/topo/-/topo-5.1.0.tgz", + "integrity": "sha512-foQZKJig7Ob0BMAYBfcJk8d77QtOe7Wo4ox7ff1lQYoNNAb6jwcY1ncdoy2e9wQZzvNy7ODZCYJkK8kzmcAnAg==", + "license": "BSD-3-Clause", + "dependencies": { + "@hapi/hoek": "^9.0.0" + } + }, + "node_modules/@hashgraph/asset-tokenization-contracts": { + "resolved": "packages/ats/contracts", + "link": true + }, + "node_modules/@hashgraph/asset-tokenization-dapp": { + "resolved": "apps/ats/web", + "link": true + }, + "node_modules/@hashgraph/asset-tokenization-sdk": { + "resolved": "packages/ats/sdk", + "link": true + }, + "node_modules/@hashgraph/asset-tokenization-studio-docs": { + "resolved": "apps/docs", + "link": true + }, + "node_modules/@hashgraph/cryptography": { + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/@hashgraph/cryptography/-/cryptography-1.8.0.tgz", + "integrity": "sha512-tkBbGd8zU2dNCwlxCX47cS+VhRosh8mEbFfjvjzjcuW2KxdVsdV6GshyVtXeFxHMijo5kAcxd2CoubhCreNdaQ==", + "license": "Apache-2.0", + "dependencies": { + "@noble/curves": "^1.8.1", + "asn1js": "^3.0.6", + "bignumber.js": "^9.1.1", + "bn.js": "^5.2.1", + "buffer": "^6.0.3", + "crypto-js": "^4.2.0", + "forge-light": "1.1.4", + "js-base64": "^3.7.7", + "react-native-get-random-values": "^1.11.0", + "spark-md5": "^3.0.2", + "tweetnacl": "^1.0.3", + "utf8": "^3.0.0" + }, + "engines": { + "node": ">=12.0.0" + }, + "peerDependenciesMeta": { + "expo-crypto": { + "optional": true + } + } + }, + "node_modules/@hashgraph/cryptography/node_modules/@react-native/virtualized-lists": { + "version": "0.81.4", + "resolved": "https://registry.npmjs.org/@react-native/virtualized-lists/-/virtualized-lists-0.81.4.tgz", + "integrity": "sha512-hBM+rMyL6Wm1Q4f/WpqGsaCojKSNUBqAXLABNGoWm1vabZ7cSnARMxBvA/2vo3hLcoR4v7zDK8tkKm9+O0LjVA==", + "license": "MIT", + "dependencies": { + "invariant": "^2.2.4", + "nullthrows": "^1.1.1" + }, + "engines": { + "node": ">= 20.19.4" + }, + "peerDependencies": { + "@types/react": "^19.1.0", + "react": "*", + "react-native": "*" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@hashgraph/cryptography/node_modules/commander": { + "version": "12.1.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-12.1.0.tgz", + "integrity": "sha512-Vw8qHK3bZM9y/P10u3Vib8o/DdkvA2OtPtZvD871QKjy74Wj1WSKFILMPRPSdUSx5RFK1arlJzEtA4PkFgnbuA==", + "license": "MIT", + "engines": { + "node": ">=18" + } + }, + "node_modules/@hashgraph/cryptography/node_modules/glob": { + "version": "7.2.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", + "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", + "deprecated": "Glob versions prior to v9 are no longer supported", + "license": "ISC", + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.1.1", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/@hashgraph/cryptography/node_modules/memoize-one": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/memoize-one/-/memoize-one-5.2.1.tgz", + "integrity": "sha512-zYiwtZUcYyXKo/np96AGZAckk+FWWsUdJ3cHGGmld7+AhvcWmQyGCYUh1hc4Q/pkOhb65dQR/pqCyK0cOaHz4Q==", + "license": "MIT" + }, + "node_modules/@hashgraph/cryptography/node_modules/react": { + "version": "19.2.0", + "resolved": "https://registry.npmjs.org/react/-/react-19.2.0.tgz", + "integrity": "sha512-tmbWg6W31tQLeB5cdIBOicJDJRR2KzXsV7uSK9iNfLWQ5bIZfxuPEHp7M8wiHyHnn0DD1i7w3Zmin0FtkrwoCQ==", + "license": "MIT", + "peer": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/@hashgraph/cryptography/node_modules/react-native": { + "version": "0.81.4", + "resolved": "https://registry.npmjs.org/react-native/-/react-native-0.81.4.tgz", + "integrity": "sha512-bt5bz3A/+Cv46KcjV0VQa+fo7MKxs17RCcpzjftINlen4ZDUl0I6Ut+brQ2FToa5oD0IB0xvQHfmsg2EDqsZdQ==", + "license": "MIT", + "peer": true, + "dependencies": { + "@jest/create-cache-key-function": "^29.7.0", + "@react-native/assets-registry": "0.81.4", + "@react-native/codegen": "0.81.4", + "@react-native/community-cli-plugin": "0.81.4", + "@react-native/gradle-plugin": "0.81.4", + "@react-native/js-polyfills": "0.81.4", + "@react-native/normalize-colors": "0.81.4", + "@react-native/virtualized-lists": "0.81.4", + "abort-controller": "^3.0.0", + "anser": "^1.4.9", + "ansi-regex": "^5.0.0", + "babel-jest": "^29.7.0", + "babel-plugin-syntax-hermes-parser": "0.29.1", + "base64-js": "^1.5.1", + "commander": "^12.0.0", + "flow-enums-runtime": "^0.0.6", + "glob": "^7.1.1", + "invariant": "^2.2.4", + "jest-environment-node": "^29.7.0", + "memoize-one": "^5.0.0", + "metro-runtime": "^0.83.1", + "metro-source-map": "^0.83.1", + "nullthrows": "^1.1.1", + "pretty-format": "^29.7.0", + "promise": "^8.3.0", + "react-devtools-core": "^6.1.5", + "react-refresh": "^0.14.0", + "regenerator-runtime": "^0.13.2", + "scheduler": "0.26.0", + "semver": "^7.1.3", + "stacktrace-parser": "^0.1.10", + "whatwg-fetch": "^3.0.0", + "ws": "^6.2.3", + "yargs": "^17.6.2" + }, + "bin": { + "react-native": "cli.js" + }, + "engines": { + "node": ">= 20.19.4" + }, + "peerDependencies": { + "@types/react": "^19.1.0", + "react": "^19.1.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@hashgraph/cryptography/node_modules/react-native-get-random-values": { + "version": "1.11.0", + "resolved": "https://registry.npmjs.org/react-native-get-random-values/-/react-native-get-random-values-1.11.0.tgz", + "integrity": "sha512-4BTbDbRmS7iPdhYLRcz3PGFIpFJBwNZg9g42iwa2P6FOv9vZj/xJc678RZXnLNZzd0qd7Q3CCF6Yd+CU2eoXKQ==", + "license": "MIT", + "dependencies": { + "fast-base64-decode": "^1.0.0" + }, + "peerDependencies": { + "react-native": ">=0.56" + } + }, + "node_modules/@hashgraph/cryptography/node_modules/react-refresh": { + "version": "0.14.2", + "resolved": "https://registry.npmjs.org/react-refresh/-/react-refresh-0.14.2.tgz", + "integrity": "sha512-jCvmsr+1IUSMUyzOkRcvnVbX3ZYC6g9TDrDbFuFmRDq7PD4yaGbLKNQL6k2jnArV8hjYxh7hVhAZB6s9HDGpZA==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/@hashgraph/cryptography/node_modules/scheduler": { + "version": "0.26.0", + "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.26.0.tgz", + "integrity": "sha512-NlHwttCI/l5gCPR3D1nNXtWABUmBwvZpEQiD4IXSbIDq8BzLIK/7Ir5gTFSGZDUu37K5cMNp0hFtzO38sC7gWA==", + "license": "MIT" + }, + "node_modules/@hashgraph/cryptography/node_modules/semver": { + "version": "7.7.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.2.tgz", + "integrity": "sha512-RF0Fw+rO5AMf9MAyaRXI4AV0Ulj5lMHqVxxdSgiVbixSCXoEmmX/jk0CuJw4+3SqroYO9VoUh+HcuJivvtJemA==", + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@hashgraph/cryptography/node_modules/ws": { + "version": "6.2.3", + "resolved": "https://registry.npmjs.org/ws/-/ws-6.2.3.tgz", + "integrity": "sha512-jmTjYU0j60B+vHey6TfR3Z7RD61z/hmxBS3VMSGIrroOWXQEneK1zNuotOUrGyBHQj0yrpsLHPWtigEFd13ndA==", + "license": "MIT", + "dependencies": { + "async-limiter": "~1.0.0" + } + }, + "node_modules/@hashgraph/hedera-custodians-integration": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/@hashgraph/hedera-custodians-integration/-/hedera-custodians-integration-1.4.1.tgz", + "integrity": "sha512-YNNn22EZi9qzgePO9NGkF8mBh7FmFS/oMWhJHKQ88fvxBBTtiU/Kahb5DU+ABd3pr35/MDTzHD6hqhM/55VQpg==", + "cpu": [ + "x86_64", + "x64", + "arm", + "arm64" + ], + "license": "ISC", + "os": [ + "darwin", + "linux", + "win32" + ], + "dependencies": { + "@aws-sdk/client-kms": "^3.624.0", + "@dfns/sdk": "0.1.0-beta.5", + "@dfns/sdk-keysigner": "0.1.0-beta.5", + "@fireblocks/fireblocks-web3-provider": "1.2.5", + "asn1-ts": "^8.0.2", + "dotenv": "16.0.3", + "ethereum-cryptography": "^2.2.0", + "fireblocks-sdk": "5.11.0", + "reflect-metadata": "0.1.13", + "tsyringe": "4.7.0" + }, + "engines": { + "node": ">=16", + "npm": ">=8" + } + }, + "node_modules/@hashgraph/hedera-custodians-integration/node_modules/dotenv": { + "version": "16.0.3", + "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-16.0.3.tgz", + "integrity": "sha512-7GO6HghkA5fYG9TYnNxi14/7K9f5occMlp3zXAuSxn7CKCxt9xbNWG7yF8hTCSUchlfWSe3uLmlPfigevRItzQ==", + "license": "BSD-2-Clause", + "engines": { + "node": ">=12" + } + }, + "node_modules/@hashgraph/hedera-custodians-integration/node_modules/reflect-metadata": { + "version": "0.1.13", + "resolved": "https://registry.npmjs.org/reflect-metadata/-/reflect-metadata-0.1.13.tgz", + "integrity": "sha512-Ts1Y/anZELhSsjMcU605fU9RE4Oi3p5ORujwbIKXfWa+0Zxs510Qrmrce5/Jowq3cHSZSJqBjypxmHarc+vEWg==", + "license": "Apache-2.0" + }, + "node_modules/@hashgraph/hedera-custodians-integration/node_modules/tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", + "license": "0BSD" + }, + "node_modules/@hashgraph/hedera-custodians-integration/node_modules/tsyringe": { + "version": "4.7.0", + "resolved": "https://registry.npmjs.org/tsyringe/-/tsyringe-4.7.0.tgz", + "integrity": "sha512-ncFDM1jTLsok4ejMvSW5jN1VGPQD48y2tfAR0pdptWRKYX4bkbqPt92k7KJ5RFJ1KV36JEs/+TMh7I6OUgj74g==", + "license": "MIT", + "dependencies": { + "tslib": "^1.9.3" + }, + "engines": { + "node": ">= 6.0.0" + } + }, + "node_modules/@hashgraph/hedera-wallet-connect": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/@hashgraph/hedera-wallet-connect/-/hedera-wallet-connect-1.3.1.tgz", + "integrity": "sha512-0NrMJ1Wn9JQuOUiTRrZqv9qEcTzbYKF26Xaq/1IexJM2bRqfMPy1Z6tAZXQEfHy9tw6k5wnzXXo/j65BXkapJg==", + "license": "Apache-2.0", + "dependencies": { + "@hashgraph/sdk": "^2.40.0", + "@walletconnect/qrcode-modal": "^1.8.0", + "@walletconnect/types": "^2.11.0", + "@walletconnect/utils": "^2.11.0", + "@walletconnect/web3wallet": "^1.9.3" + } + }, + "node_modules/@hashgraph/mass-payout-backend": { + "resolved": "apps/mass-payout/backend", + "link": true + }, + "node_modules/@hashgraph/mass-payout-contracts": { + "resolved": "packages/mass-payout/contracts", + "link": true + }, + "node_modules/@hashgraph/mass-payout-frontend": { + "resolved": "apps/mass-payout/frontend", + "link": true + }, + "node_modules/@hashgraph/mass-payout-sdk": { + "resolved": "packages/mass-payout/sdk", + "link": true + }, + "node_modules/@hashgraph/proto": { + "version": "2.19.0", + "resolved": "https://registry.npmjs.org/@hashgraph/proto/-/proto-2.19.0.tgz", + "integrity": "sha512-ghlkyPb8JJx9ACGVna84vOtMqQkisBZ+EGeQe+FT+ci7qlhdf/ecRGvMw/uanSE5yviOFBqJeH0c2SzVIqpydQ==", + "license": "Apache-2.0", + "dependencies": { + "long": "^5.2.3", + "protobufjs": "7.2.5" + }, + "engines": { + "node": ">=10.0.0" + } + }, + "node_modules/@hashgraph/proto/node_modules/long": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/long/-/long-5.3.2.tgz", + "integrity": "sha512-mNAgZ1GmyNhD7AuqnTG3/VQ26o760+ZYBPKjPvugO8+nLbYfX6TVpJPseBvopbdY+qpZ/lKUnmEc1LeZYS3QAA==", + "license": "Apache-2.0" + }, + "node_modules/@hashgraph/sdk": { + "version": "2.66.0", + "resolved": "https://registry.npmjs.org/@hashgraph/sdk/-/sdk-2.66.0.tgz", + "integrity": "sha512-A5dCSxb7pzYhgd7zhkOJ7lJRwg29MEcfkq0B/Nqb5j2Swdee6v+DCse7xkB978dmHnfrG6UM64LZX0qMWw8Uiw==", + "license": "Apache-2.0", + "dependencies": { + "@ethersproject/abi": "^5.8.0", + "@ethersproject/bignumber": "^5.8.0", + "@ethersproject/bytes": "^5.8.0", + "@ethersproject/rlp": "^5.8.0", + "@grpc/grpc-js": "^1.12.6", + "@hashgraph/cryptography": "1.8.0", + "@hashgraph/proto": "2.19.0", + "bignumber.js": "^9.1.1", + "bn.js": "^5.1.1", + "crypto-js": "^4.2.0", + "js-base64": "^3.7.4", + "long": "^5.3.1", + "pino": "^9.6.0", + "pino-pretty": "^13.0.0", + "protobufjs": "7.2.5", + "rfc4648": "^1.5.3", + "utf8": "^3.0.0" + }, + "engines": { + "node": ">=18.0.0" + }, + "peerDependencies": { + "bn.js": "^5.2.1" + } + }, + "node_modules/@hashgraph/sdk/node_modules/long": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/long/-/long-5.3.2.tgz", + "integrity": "sha512-mNAgZ1GmyNhD7AuqnTG3/VQ26o760+ZYBPKjPvugO8+nLbYfX6TVpJPseBvopbdY+qpZ/lKUnmEc1LeZYS3QAA==", + "license": "Apache-2.0" + }, + "node_modules/@hashgraph/smart-contracts": { + "version": "0.10.1", + "resolved": "git+ssh://git@github.com/hashgraph/hedera-smart-contracts.git#4e8ba723cbe2d4b8338fc98d1e289a3c5b79477c", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@nomicfoundation/solidity-analyzer": "^0.1.2", + "bn.js": "^5.2.1", + "dotenv": "^16.4.5", + "elliptic": "^6.5.7", + "mcl-wasm": "^1.4.0" + } + }, + "node_modules/@hiero-ledger/cryptography": { + "version": "1.15.0", + "resolved": "https://registry.npmjs.org/@hiero-ledger/cryptography/-/cryptography-1.15.0.tgz", + "integrity": "sha512-KLbueVfPuTotZfGT+HxcA3zz455eIZW/dBGxkpj9MEp+J2pruR9TyWzenozkuFAzvQ+ouJexE8OmtJMwV5XBBg==", + "license": "Apache-2.0", + "dependencies": { + "@noble/curves": "1.8.1", + "ansi-regex": "6.2.2", + "ansi-styles": "6.2.3", + "asn1js": "3.0.6", + "bignumber.js": "9.1.1", + "bn.js": "5.2.1", + "buffer": "6.0.3", + "crypto-js": "4.2.0", + "debug": "4.4.1", + "forge-light": "1.1.4", + "js-base64": "3.7.7", + "react-native-get-random-values": "1.11.0", + "spark-md5": "3.0.2", + "strip-ansi": "7.1.2", + "tweetnacl": "1.0.3", + "utf8": "3.0.0" + }, + "engines": { + "node": ">=12.0.0" + }, + "peerDependenciesMeta": { + "expo-crypto": { + "optional": true + } + } + }, + "node_modules/@hiero-ledger/cryptography/node_modules/@noble/curves": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/@noble/curves/-/curves-1.8.1.tgz", + "integrity": "sha512-warwspo+UYUPep0Q+vtdVB4Ugn8GGQj8iyB3gnRWsztmUHTI3S1nhdiWNsPUGL0vud7JlRRk1XEu7Lq1KGTnMQ==", + "license": "MIT", + "dependencies": { + "@noble/hashes": "1.7.1" + }, + "engines": { + "node": "^14.21.3 || >=16" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + } + }, + "node_modules/@hiero-ledger/cryptography/node_modules/@noble/hashes": { + "version": "1.7.1", + "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.7.1.tgz", + "integrity": "sha512-B8XBPsn4vT/KJAGqDzbwztd+6Yte3P4V7iafm24bxgDe/mlRuK6xmWPuCNrKt2vDafZ8MfJLlchDG/vYafQEjQ==", + "license": "MIT", + "engines": { + "node": "^14.21.3 || >=16" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + } + }, + "node_modules/@hiero-ledger/cryptography/node_modules/@react-native/assets-registry": { + "version": "0.83.1", + "resolved": "https://registry.npmjs.org/@react-native/assets-registry/-/assets-registry-0.83.1.tgz", + "integrity": "sha512-AT7/T6UwQqO39bt/4UL5EXvidmrddXrt0yJa7ENXndAv+8yBzMsZn6fyiax6+ERMt9GLzAECikv3lj22cn2wJA==", + "license": "MIT", + "peer": true, + "engines": { + "node": ">= 20.19.4" + } + }, + "node_modules/@hiero-ledger/cryptography/node_modules/@react-native/codegen": { + "version": "0.83.1", + "resolved": "https://registry.npmjs.org/@react-native/codegen/-/codegen-0.83.1.tgz", + "integrity": "sha512-FpRxenonwH+c2a5X5DZMKUD7sCudHxB3eSQPgV9R+uxd28QWslyAWrpnJM/Az96AEksHnymDzEmzq2HLX5nb+g==", + "license": "MIT", + "peer": true, + "dependencies": { + "@babel/core": "^7.25.2", + "@babel/parser": "^7.25.3", + "glob": "^7.1.1", + "hermes-parser": "0.32.0", + "invariant": "^2.2.4", + "nullthrows": "^1.1.1", + "yargs": "^17.6.2" + }, + "engines": { + "node": ">= 20.19.4" + }, + "peerDependencies": { + "@babel/core": "*" + } + }, + "node_modules/@hiero-ledger/cryptography/node_modules/@react-native/community-cli-plugin": { + "version": "0.83.1", + "resolved": "https://registry.npmjs.org/@react-native/community-cli-plugin/-/community-cli-plugin-0.83.1.tgz", + "integrity": "sha512-FqR1ftydr08PYlRbrDF06eRiiiGOK/hNmz5husv19sK6iN5nHj1SMaCIVjkH/a5vryxEddyFhU6PzO/uf4kOHg==", + "license": "MIT", + "peer": true, + "dependencies": { + "@react-native/dev-middleware": "0.83.1", + "debug": "^4.4.0", + "invariant": "^2.2.4", + "metro": "^0.83.3", + "metro-config": "^0.83.3", + "metro-core": "^0.83.3", + "semver": "^7.1.3" + }, + "engines": { + "node": ">= 20.19.4" + }, + "peerDependencies": { + "@react-native-community/cli": "*", + "@react-native/metro-config": "*" + }, + "peerDependenciesMeta": { + "@react-native-community/cli": { + "optional": true + }, + "@react-native/metro-config": { + "optional": true + } + } + }, + "node_modules/@hiero-ledger/cryptography/node_modules/@react-native/debugger-frontend": { + "version": "0.83.1", + "resolved": "https://registry.npmjs.org/@react-native/debugger-frontend/-/debugger-frontend-0.83.1.tgz", + "integrity": "sha512-01Rn3goubFvPjHXONooLmsW0FLxJDKIUJNOlOS0cPtmmTIx9YIjxhe/DxwHXGk7OnULd7yl3aYy7WlBsEd5Xmg==", + "license": "BSD-3-Clause", + "peer": true, + "engines": { + "node": ">= 20.19.4" + } + }, + "node_modules/@hiero-ledger/cryptography/node_modules/@react-native/dev-middleware": { + "version": "0.83.1", + "resolved": "https://registry.npmjs.org/@react-native/dev-middleware/-/dev-middleware-0.83.1.tgz", + "integrity": "sha512-QJaSfNRzj3Lp7MmlCRgSBlt1XZ38xaBNXypXAp/3H3OdFifnTZOeYOpFmcpjcXYnDqkxetuwZg8VL65SQhB8dg==", + "license": "MIT", + "peer": true, + "dependencies": { + "@isaacs/ttlcache": "^1.4.1", + "@react-native/debugger-frontend": "0.83.1", + "@react-native/debugger-shell": "0.83.1", + "chrome-launcher": "^0.15.2", + "chromium-edge-launcher": "^0.2.0", + "connect": "^3.6.5", + "debug": "^4.4.0", + "invariant": "^2.2.4", + "nullthrows": "^1.1.1", + "open": "^7.0.3", + "serve-static": "^1.16.2", + "ws": "^7.5.10" + }, + "engines": { + "node": ">= 20.19.4" + } + }, + "node_modules/@hiero-ledger/cryptography/node_modules/@react-native/gradle-plugin": { + "version": "0.83.1", + "resolved": "https://registry.npmjs.org/@react-native/gradle-plugin/-/gradle-plugin-0.83.1.tgz", + "integrity": "sha512-6ESDnwevp1CdvvxHNgXluil5OkqbjkJAkVy7SlpFsMGmVhrSxNAgD09SSRxMNdKsnLtzIvMsFCzyHLsU/S4PtQ==", + "license": "MIT", + "peer": true, + "engines": { + "node": ">= 20.19.4" + } + }, + "node_modules/@hiero-ledger/cryptography/node_modules/@react-native/js-polyfills": { + "version": "0.83.1", + "resolved": "https://registry.npmjs.org/@react-native/js-polyfills/-/js-polyfills-0.83.1.tgz", + "integrity": "sha512-qgPpdWn/c5laA+3WoJ6Fak8uOm7CG50nBsLlPsF8kbT7rUHIVB9WaP6+GPsoKV/H15koW7jKuLRoNVT7c3Ht3w==", + "license": "MIT", + "peer": true, + "engines": { + "node": ">= 20.19.4" + } + }, + "node_modules/@hiero-ledger/cryptography/node_modules/@react-native/normalize-colors": { + "version": "0.83.1", + "resolved": "https://registry.npmjs.org/@react-native/normalize-colors/-/normalize-colors-0.83.1.tgz", + "integrity": "sha512-84feABbmeWo1kg81726UOlMKAhcQyFXYz2SjRKYkS78QmfhVDhJ2o/ps1VjhFfBz0i/scDwT1XNv9GwmRIghkg==", + "license": "MIT", + "peer": true + }, + "node_modules/@hiero-ledger/cryptography/node_modules/@react-native/virtualized-lists": { + "version": "0.83.1", + "resolved": "https://registry.npmjs.org/@react-native/virtualized-lists/-/virtualized-lists-0.83.1.tgz", + "integrity": "sha512-MdmoAbQUTOdicCocm5XAFDJWsswxk7hxa6ALnm6Y88p01HFML0W593hAn6qOt9q6IM1KbAcebtH6oOd4gcQy8w==", + "license": "MIT", + "peer": true, + "dependencies": { + "invariant": "^2.2.4", + "nullthrows": "^1.1.1" + }, + "engines": { + "node": ">= 20.19.4" + }, + "peerDependencies": { + "@types/react": "^19.2.0", + "react": "*", + "react-native": "*" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@hiero-ledger/cryptography/node_modules/ansi-regex": { + "version": "6.2.2", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.2.2.tgz", + "integrity": "sha512-Bq3SmSpyFHaWjPk8If9yc6svM8c56dB5BAtW4Qbw5jHTwwXXcTLoRMkpDJp6VL0XzlWaCHTXrkFURMYmD0sLqg==", + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-regex?sponsor=1" + } + }, + "node_modules/@hiero-ledger/cryptography/node_modules/ansi-styles": { + "version": "6.2.3", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.3.tgz", + "integrity": "sha512-4Dj6M28JB+oAH8kFkTLUo+a2jwOFkuqb3yucU0CANcRRUbxS0cP0nZYCGjcc3BNXwRIsUVmDGgzawme7zvJHvg==", + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/@hiero-ledger/cryptography/node_modules/babel-plugin-syntax-hermes-parser": { + "version": "0.32.0", + "resolved": "https://registry.npmjs.org/babel-plugin-syntax-hermes-parser/-/babel-plugin-syntax-hermes-parser-0.32.0.tgz", + "integrity": "sha512-m5HthL++AbyeEA2FcdwOLfVFvWYECOBObLHNqdR8ceY4TsEdn4LdX2oTvbB2QJSSElE2AWA/b2MXZ/PF/CqLZg==", + "license": "MIT", + "peer": true, + "dependencies": { + "hermes-parser": "0.32.0" + } + }, + "node_modules/@hiero-ledger/cryptography/node_modules/bignumber.js": { + "version": "9.1.1", + "resolved": "https://registry.npmjs.org/bignumber.js/-/bignumber.js-9.1.1.tgz", + "integrity": "sha512-pHm4LsMJ6lzgNGVfZHjMoO8sdoRhOzOH4MLmY65Jg70bpxCKu5iOHNJyfF6OyvYw7t8Fpf35RuzUyqnQsj8Vig==", + "license": "MIT", + "engines": { + "node": "*" + } + }, + "node_modules/@hiero-ledger/cryptography/node_modules/commander": { + "version": "12.1.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-12.1.0.tgz", + "integrity": "sha512-Vw8qHK3bZM9y/P10u3Vib8o/DdkvA2OtPtZvD871QKjy74Wj1WSKFILMPRPSdUSx5RFK1arlJzEtA4PkFgnbuA==", + "license": "MIT", + "peer": true, + "engines": { + "node": ">=18" + } + }, + "node_modules/@hiero-ledger/cryptography/node_modules/fresh": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", + "integrity": "sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==", + "license": "MIT", + "peer": true, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/@hiero-ledger/cryptography/node_modules/glob": { + "version": "7.2.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", + "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", + "deprecated": "Glob versions prior to v9 are no longer supported", + "license": "ISC", + "peer": true, + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.1.1", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/@hiero-ledger/cryptography/node_modules/hermes-estree": { + "version": "0.32.0", + "resolved": "https://registry.npmjs.org/hermes-estree/-/hermes-estree-0.32.0.tgz", + "integrity": "sha512-KWn3BqnlDOl97Xe1Yviur6NbgIZ+IP+UVSpshlZWkq+EtoHg6/cwiDj/osP9PCEgFE15KBm1O55JRwbMEm5ejQ==", + "license": "MIT", + "peer": true + }, + "node_modules/@hiero-ledger/cryptography/node_modules/hermes-parser": { + "version": "0.32.0", + "resolved": "https://registry.npmjs.org/hermes-parser/-/hermes-parser-0.32.0.tgz", + "integrity": "sha512-g4nBOWFpuiTqjR3LZdRxKUkij9iyveWeuks7INEsMX741f3r9xxrOe8TeQfUxtda0eXmiIFiMQzoeSQEno33Hw==", + "license": "MIT", + "peer": true, + "dependencies": { + "hermes-estree": "0.32.0" + } + }, + "node_modules/@hiero-ledger/cryptography/node_modules/http-errors": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.1.tgz", + "integrity": "sha512-4FbRdAX+bSdmo4AUFuS0WNiPz8NgFt+r8ThgNWmlrjQjt1Q7ZR9+zTlce2859x4KSXrwIsaeTqDoKQmtP8pLmQ==", + "license": "MIT", + "peer": true, + "dependencies": { + "depd": "~2.0.0", + "inherits": "~2.0.4", + "setprototypeof": "~1.2.0", + "statuses": "~2.0.2", + "toidentifier": "~1.0.1" + }, + "engines": { + "node": ">= 0.8" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" + } + }, + "node_modules/@hiero-ledger/cryptography/node_modules/js-base64": { + "version": "3.7.7", + "resolved": "https://registry.npmjs.org/js-base64/-/js-base64-3.7.7.tgz", + "integrity": "sha512-7rCnleh0z2CkXhH67J8K1Ytz0b2Y+yxTPL+/KOJoa20hfnVQ/3/T6W/KflYI4bRHRagNeXeU2bkNGI3v1oS/lw==", + "license": "BSD-3-Clause" + }, + "node_modules/@hiero-ledger/cryptography/node_modules/memoize-one": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/memoize-one/-/memoize-one-5.2.1.tgz", + "integrity": "sha512-zYiwtZUcYyXKo/np96AGZAckk+FWWsUdJ3cHGGmld7+AhvcWmQyGCYUh1hc4Q/pkOhb65dQR/pqCyK0cOaHz4Q==", + "license": "MIT", + "peer": true + }, + "node_modules/@hiero-ledger/cryptography/node_modules/mime": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", + "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==", + "license": "MIT", + "peer": true, + "bin": { + "mime": "cli.js" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/@hiero-ledger/cryptography/node_modules/react": { + "version": "19.2.3", + "resolved": "https://registry.npmjs.org/react/-/react-19.2.3.tgz", + "integrity": "sha512-Ku/hhYbVjOQnXDZFv2+RibmLFGwFdeeKHFcOTlrt7xplBnya5OGn/hIRDsqDiSUcfORsDC7MPxwork8jBwsIWA==", + "license": "MIT", + "peer": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/@hiero-ledger/cryptography/node_modules/react-native": { + "version": "0.83.1", + "resolved": "https://registry.npmjs.org/react-native/-/react-native-0.83.1.tgz", + "integrity": "sha512-mL1q5HPq5cWseVhWRLl+Fwvi5z1UO+3vGOpjr+sHFwcUletPRZ5Kv+d0tUfqHmvi73/53NjlQqX1Pyn4GguUfA==", + "license": "MIT", + "peer": true, + "dependencies": { + "@jest/create-cache-key-function": "^29.7.0", + "@react-native/assets-registry": "0.83.1", + "@react-native/codegen": "0.83.1", + "@react-native/community-cli-plugin": "0.83.1", + "@react-native/gradle-plugin": "0.83.1", + "@react-native/js-polyfills": "0.83.1", + "@react-native/normalize-colors": "0.83.1", + "@react-native/virtualized-lists": "0.83.1", + "abort-controller": "^3.0.0", + "anser": "^1.4.9", + "ansi-regex": "^5.0.0", + "babel-jest": "^29.7.0", + "babel-plugin-syntax-hermes-parser": "0.32.0", + "base64-js": "^1.5.1", + "commander": "^12.0.0", + "flow-enums-runtime": "^0.0.6", + "glob": "^7.1.1", + "hermes-compiler": "0.14.0", + "invariant": "^2.2.4", + "jest-environment-node": "^29.7.0", + "memoize-one": "^5.0.0", + "metro-runtime": "^0.83.3", + "metro-source-map": "^0.83.3", + "nullthrows": "^1.1.1", + "pretty-format": "^29.7.0", + "promise": "^8.3.0", + "react-devtools-core": "^6.1.5", + "react-refresh": "^0.14.0", + "regenerator-runtime": "^0.13.2", + "scheduler": "0.27.0", + "semver": "^7.1.3", + "stacktrace-parser": "^0.1.10", + "whatwg-fetch": "^3.0.0", + "ws": "^7.5.10", + "yargs": "^17.6.2" + }, + "bin": { + "react-native": "cli.js" + }, + "engines": { + "node": ">= 20.19.4" + }, + "peerDependencies": { + "@types/react": "^19.1.1", + "react": "^19.2.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@hiero-ledger/cryptography/node_modules/react-native-get-random-values": { + "version": "1.11.0", + "resolved": "https://registry.npmjs.org/react-native-get-random-values/-/react-native-get-random-values-1.11.0.tgz", + "integrity": "sha512-4BTbDbRmS7iPdhYLRcz3PGFIpFJBwNZg9g42iwa2P6FOv9vZj/xJc678RZXnLNZzd0qd7Q3CCF6Yd+CU2eoXKQ==", + "license": "MIT", + "dependencies": { + "fast-base64-decode": "^1.0.0" + }, + "peerDependencies": { + "react-native": ">=0.56" + } + }, + "node_modules/@hiero-ledger/cryptography/node_modules/react-native/node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "license": "MIT", + "peer": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/@hiero-ledger/cryptography/node_modules/react-refresh": { + "version": "0.14.2", + "resolved": "https://registry.npmjs.org/react-refresh/-/react-refresh-0.14.2.tgz", + "integrity": "sha512-jCvmsr+1IUSMUyzOkRcvnVbX3ZYC6g9TDrDbFuFmRDq7PD4yaGbLKNQL6k2jnArV8hjYxh7hVhAZB6s9HDGpZA==", + "license": "MIT", + "peer": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/@hiero-ledger/cryptography/node_modules/scheduler": { + "version": "0.27.0", + "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.27.0.tgz", + "integrity": "sha512-eNv+WrVbKu1f3vbYJT/xtiF5syA5HPIMtf9IgY/nKg0sWqzAUEvqY/xm7OcZc/qafLx/iO9FgOmeSAp4v5ti/Q==", + "license": "MIT", + "peer": true + }, + "node_modules/@hiero-ledger/cryptography/node_modules/semver": { + "version": "7.7.3", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.3.tgz", + "integrity": "sha512-SdsKMrI9TdgjdweUSR9MweHA4EJ8YxHn8DFaDisvhVlUOe4BF1tLD7GAj0lIqWVl+dPb/rExr0Btby5loQm20Q==", + "license": "ISC", + "peer": true, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@hiero-ledger/cryptography/node_modules/send": { + "version": "0.19.2", + "resolved": "https://registry.npmjs.org/send/-/send-0.19.2.tgz", + "integrity": "sha512-VMbMxbDeehAxpOtWJXlcUS5E8iXh6QmN+BkRX1GARS3wRaXEEgzCcB10gTQazO42tpNIya8xIyNx8fll1OFPrg==", + "license": "MIT", + "peer": true, + "dependencies": { + "debug": "2.6.9", + "depd": "2.0.0", + "destroy": "1.2.0", + "encodeurl": "~2.0.0", + "escape-html": "~1.0.3", + "etag": "~1.8.1", + "fresh": "~0.5.2", + "http-errors": "~2.0.1", + "mime": "1.6.0", + "ms": "2.1.3", + "on-finished": "~2.4.1", + "range-parser": "~1.2.1", + "statuses": "~2.0.2" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/@hiero-ledger/cryptography/node_modules/send/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "license": "MIT", + "peer": true, + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/@hiero-ledger/cryptography/node_modules/send/node_modules/debug/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "license": "MIT", + "peer": true + }, + "node_modules/@hiero-ledger/cryptography/node_modules/serve-static": { + "version": "1.16.3", + "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.16.3.tgz", + "integrity": "sha512-x0RTqQel6g5SY7Lg6ZreMmsOzncHFU7nhnRWkKgWuMTu5NN0DR5oruckMqRvacAN9d5w6ARnRBXl9xhDCgfMeA==", + "license": "MIT", + "peer": true, + "dependencies": { + "encodeurl": "~2.0.0", + "escape-html": "~1.0.3", + "parseurl": "~1.3.3", + "send": "~0.19.1" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/@hiero-ledger/cryptography/node_modules/strip-ansi": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.2.tgz", + "integrity": "sha512-gmBGslpoQJtgnMAvOVqGZpEz9dyoKTCzy2nfz/n8aIFhN/jCE/rCmcxabB6jOOHV+0WNnylOxaxBQPSvcWklhA==", + "license": "MIT", + "dependencies": { + "ansi-regex": "^6.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/strip-ansi?sponsor=1" + } + }, + "node_modules/@hiero-ledger/cryptography/node_modules/ws": { + "version": "7.5.10", + "resolved": "https://registry.npmjs.org/ws/-/ws-7.5.10.tgz", + "integrity": "sha512-+dbF1tHwZpXcbOJdVOkzLDxZP1ailvSxM6ZweXTegylPny803bFhA+vqBYw4s31NSAk4S2Qz+AKXK9a4wkdjcQ==", + "license": "MIT", + "peer": true, + "engines": { + "node": ">=8.3.0" + }, + "peerDependencies": { + "bufferutil": "^4.0.1", + "utf-8-validate": "^5.0.2" + }, + "peerDependenciesMeta": { + "bufferutil": { + "optional": true + }, + "utf-8-validate": { + "optional": true + } + } + }, + "node_modules/@hiero-ledger/sdk": { + "version": "2.79.0", + "resolved": "https://registry.npmjs.org/@hiero-ledger/sdk/-/sdk-2.79.0.tgz", + "integrity": "sha512-9x0yp7VSwSMMjAypWuAMj39D3k09ArrKMCBBJT6fBi7R3ZtSdDTJNrjZRBgR/afMi6N0gGEkqg61rx9eg77L+Q==", + "license": "Apache-2.0", + "dependencies": { + "@ethersproject/abi": "5.8.0", + "@ethersproject/bignumber": "5.8.0", + "@ethersproject/bytes": "5.8.0", + "@ethersproject/rlp": "5.8.0", + "@grpc/grpc-js": "1.12.6", + "@hiero-ledger/cryptography": "1.15.0", + "@hiero-ledger/proto": "2.25.0", + "ansi-regex": "6.2.2", + "ansi-styles": "6.2.3", + "bignumber.js": "9.1.1", + "bn.js": "5.1.1", + "crypto-js": "4.2.0", + "debug": "4.4.1", + "js-base64": "3.7.4", + "long": "5.3.1", + "pino": "10.1.0", + "pino-pretty": "13.0.0", + "protobufjs": "7.5.4", + "rfc4648": "1.5.3", + "strip-ansi": "7.1.2", + "utf8": "3.0.0" + }, + "engines": { + "node": ">=18.0.0" + }, + "peerDependencies": { + "bn.js": "5.2.1" + } + }, + "node_modules/@hiero-ledger/sdk/node_modules/@grpc/grpc-js": { + "version": "1.12.6", + "resolved": "https://registry.npmjs.org/@grpc/grpc-js/-/grpc-js-1.12.6.tgz", + "integrity": "sha512-JXUj6PI0oqqzTGvKtzOkxtpsyPRNsrmhh41TtIz/zEB6J+AUiZZ0dxWzcMwO9Ns5rmSPuMdghlTbUuqIM48d3Q==", + "license": "Apache-2.0", + "dependencies": { + "@grpc/proto-loader": "^0.7.13", + "@js-sdsl/ordered-map": "^4.4.2" + }, + "engines": { + "node": ">=12.10.0" + } + }, + "node_modules/@hiero-ledger/sdk/node_modules/@grpc/proto-loader": { + "version": "0.7.15", + "resolved": "https://registry.npmjs.org/@grpc/proto-loader/-/proto-loader-0.7.15.tgz", + "integrity": "sha512-tMXdRCfYVixjuFK+Hk0Q1s38gV9zDiDJfWL3h1rv4Qc39oILCu1TRTDt7+fGUI8K4G1Fj125Hx/ru3azECWTyQ==", + "license": "Apache-2.0", + "dependencies": { + "lodash.camelcase": "^4.3.0", + "long": "^5.0.0", + "protobufjs": "^7.2.5", + "yargs": "^17.7.2" + }, + "bin": { + "proto-loader-gen-types": "build/bin/proto-loader-gen-types.js" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/@hiero-ledger/sdk/node_modules/@hiero-ledger/proto": { + "version": "2.25.0", + "resolved": "https://registry.npmjs.org/@hiero-ledger/proto/-/proto-2.25.0.tgz", + "integrity": "sha512-yZ9gb/2FMUSvH+txR1g1Z/03vbl4T11H8qw1NQyIuKhXe4PE8Ct8iHAL62aS0BN+OcR6CaF2wkfkQa16kgIkSA==", + "license": "Apache-2.0", + "dependencies": { + "long": "5.3.1" + }, + "engines": { + "node": ">=10.0.0" + }, + "peerDependencies": { + "ansi-regex": "6.2.2", + "ansi-styles": "6.2.3", + "debug": "4.4.1", + "protobufjs": "7.5.4", + "strip-ansi": "7.1.2" + } + }, + "node_modules/@hiero-ledger/sdk/node_modules/ansi-regex": { + "version": "6.2.2", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.2.2.tgz", + "integrity": "sha512-Bq3SmSpyFHaWjPk8If9yc6svM8c56dB5BAtW4Qbw5jHTwwXXcTLoRMkpDJp6VL0XzlWaCHTXrkFURMYmD0sLqg==", + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-regex?sponsor=1" + } + }, + "node_modules/@hiero-ledger/sdk/node_modules/ansi-styles": { + "version": "6.2.3", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.3.tgz", + "integrity": "sha512-4Dj6M28JB+oAH8kFkTLUo+a2jwOFkuqb3yucU0CANcRRUbxS0cP0nZYCGjcc3BNXwRIsUVmDGgzawme7zvJHvg==", + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/@hiero-ledger/sdk/node_modules/bignumber.js": { + "version": "9.1.1", + "resolved": "https://registry.npmjs.org/bignumber.js/-/bignumber.js-9.1.1.tgz", + "integrity": "sha512-pHm4LsMJ6lzgNGVfZHjMoO8sdoRhOzOH4MLmY65Jg70bpxCKu5iOHNJyfF6OyvYw7t8Fpf35RuzUyqnQsj8Vig==", + "license": "MIT", + "engines": { + "node": "*" + } + }, + "node_modules/@hiero-ledger/sdk/node_modules/bn.js": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-5.1.1.tgz", + "integrity": "sha512-IUTD/REb78Z2eodka1QZyyEk66pciRcP6Sroka0aI3tG/iwIdYLrBD62RsubR7vqdt3WyX8p4jxeatzmRSphtA==", + "license": "MIT" + }, + "node_modules/@hiero-ledger/sdk/node_modules/js-base64": { + "version": "3.7.4", + "resolved": "https://registry.npmjs.org/js-base64/-/js-base64-3.7.4.tgz", + "integrity": "sha512-wpM/wi20Tl+3ifTyi0RdDckS4YTD4Lf953mBRrpG8547T7hInHNPEj8+ck4gB8VDcGyeAWFK++Wb/fU1BeavKQ==", + "license": "BSD-3-Clause" + }, + "node_modules/@hiero-ledger/sdk/node_modules/long": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/long/-/long-5.3.1.tgz", + "integrity": "sha512-ka87Jz3gcx/I7Hal94xaN2tZEOPoUOEVftkQqZx2EeQRN7LGdfLlI3FvZ+7WDplm+vK2Urx9ULrvSowtdCieng==", + "license": "Apache-2.0" + }, + "node_modules/@hiero-ledger/sdk/node_modules/pino": { + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/pino/-/pino-10.1.0.tgz", + "integrity": "sha512-0zZC2ygfdqvqK8zJIr1e+wT1T/L+LF6qvqvbzEQ6tiMAoTqEVK9a1K3YRu8HEUvGEvNqZyPJTtb2sNIoTkB83w==", + "license": "MIT", + "dependencies": { + "@pinojs/redact": "^0.4.0", + "atomic-sleep": "^1.0.0", + "on-exit-leak-free": "^2.1.0", + "pino-abstract-transport": "^2.0.0", + "pino-std-serializers": "^7.0.0", + "process-warning": "^5.0.0", + "quick-format-unescaped": "^4.0.3", + "real-require": "^0.2.0", + "safe-stable-stringify": "^2.3.1", + "sonic-boom": "^4.0.1", + "thread-stream": "^3.0.0" + }, + "bin": { + "pino": "bin.js" + } + }, + "node_modules/@hiero-ledger/sdk/node_modules/pino-pretty": { + "version": "13.0.0", + "resolved": "https://registry.npmjs.org/pino-pretty/-/pino-pretty-13.0.0.tgz", + "integrity": "sha512-cQBBIVG3YajgoUjo1FdKVRX6t9XPxwB9lcNJVD5GCnNM4Y6T12YYx8c6zEejxQsU0wrg9TwmDulcE9LR7qcJqA==", + "license": "MIT", + "dependencies": { + "colorette": "^2.0.7", + "dateformat": "^4.6.3", + "fast-copy": "^3.0.2", + "fast-safe-stringify": "^2.1.1", + "help-me": "^5.0.0", + "joycon": "^3.1.1", + "minimist": "^1.2.6", + "on-exit-leak-free": "^2.1.0", + "pino-abstract-transport": "^2.0.0", + "pump": "^3.0.0", + "secure-json-parse": "^2.4.0", + "sonic-boom": "^4.0.1", + "strip-json-comments": "^3.1.1" + }, + "bin": { + "pino-pretty": "bin.js" + } + }, + "node_modules/@hiero-ledger/sdk/node_modules/protobufjs": { + "version": "7.5.4", + "resolved": "https://registry.npmjs.org/protobufjs/-/protobufjs-7.5.4.tgz", + "integrity": "sha512-CvexbZtbov6jW2eXAvLukXjXUW1TzFaivC46BpWc/3BpcCysb5Vffu+B3XHMm8lVEuy2Mm4XGex8hBSg1yapPg==", + "hasInstallScript": true, + "license": "BSD-3-Clause", + "dependencies": { + "@protobufjs/aspromise": "^1.1.2", + "@protobufjs/base64": "^1.1.2", + "@protobufjs/codegen": "^2.0.4", + "@protobufjs/eventemitter": "^1.1.0", + "@protobufjs/fetch": "^1.1.0", + "@protobufjs/float": "^1.0.2", + "@protobufjs/inquire": "^1.1.0", + "@protobufjs/path": "^1.1.2", + "@protobufjs/pool": "^1.1.0", + "@protobufjs/utf8": "^1.1.0", + "@types/node": ">=13.7.0", + "long": "^5.0.0" + }, + "engines": { + "node": ">=12.0.0" + } + }, + "node_modules/@hiero-ledger/sdk/node_modules/rfc4648": { + "version": "1.5.3", + "resolved": "https://registry.npmjs.org/rfc4648/-/rfc4648-1.5.3.tgz", + "integrity": "sha512-MjOWxM065+WswwnmNONOT+bD1nXzY9Km6u3kzvnx8F8/HXGZdz3T6e6vZJ8Q/RIMUSp/nxqjH3GwvJDy8ijeQQ==", + "license": "MIT" + }, + "node_modules/@hiero-ledger/sdk/node_modules/secure-json-parse": { + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/secure-json-parse/-/secure-json-parse-2.7.0.tgz", + "integrity": "sha512-6aU+Rwsezw7VR8/nyvKTx8QpWH9FrcYiXXlqC4z5d5XQBDRqtbfsRjnwGyqbi3gddNtWHuEk9OANUotL26qKUw==", + "license": "BSD-3-Clause" + }, + "node_modules/@hiero-ledger/sdk/node_modules/strip-ansi": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.2.tgz", + "integrity": "sha512-gmBGslpoQJtgnMAvOVqGZpEz9dyoKTCzy2nfz/n8aIFhN/jCE/rCmcxabB6jOOHV+0WNnylOxaxBQPSvcWklhA==", + "license": "MIT", + "dependencies": { + "ansi-regex": "^6.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/strip-ansi?sponsor=1" + } + }, + "node_modules/@humanwhocodes/config-array": { + "version": "0.11.14", + "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.11.14.tgz", + "integrity": "sha512-3T8LkOmg45BV5FICb15QQMsyUSWrQ8AygVfC7ZG32zOalnqrilm018ZVCw0eapXux8FtA33q8PSRSstjee3jSg==", + "deprecated": "Use @eslint/config-array instead", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@humanwhocodes/object-schema": "^2.0.2", + "debug": "^4.3.1", + "minimatch": "^3.0.5" + }, + "engines": { + "node": ">=10.10.0" + } + }, + "node_modules/@humanwhocodes/module-importer": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz", + "integrity": "sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=12.22" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/nzakas" + } + }, + "node_modules/@humanwhocodes/object-schema": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-2.0.3.tgz", + "integrity": "sha512-93zYdMES/c1D69yZiKDBj0V24vqNzB/koF26KPaagAfd3P/4gUlh3Dys5ogAK+Exi9QyzlD8x/08Zt7wIKcDcA==", + "deprecated": "Use @eslint/object-schema instead", + "dev": true, + "license": "BSD-3-Clause" + }, + "node_modules/@iconify/types": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@iconify/types/-/types-2.0.0.tgz", + "integrity": "sha512-+wluvCrRhXrhyOmRDJ3q8mux9JkKy5SJ/v8ol2tu4FVjyYvtEzkc/3pK15ET6RKg4b4w4BmTk1+gsCUhf21Ykg==", + "license": "MIT" + }, + "node_modules/@iconify/utils": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/@iconify/utils/-/utils-3.1.0.tgz", + "integrity": "sha512-Zlzem1ZXhI1iHeeERabLNzBHdOa4VhQbqAcOQaMKuTuyZCpwKbC2R4Dd0Zo3g9EAc+Y4fiarO8HIHRAth7+skw==", + "license": "MIT", + "dependencies": { + "@antfu/install-pkg": "^1.1.0", + "@iconify/types": "^2.0.0", + "mlly": "^1.8.0" + } + }, + "node_modules/@inquirer/external-editor": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@inquirer/external-editor/-/external-editor-1.0.2.tgz", + "integrity": "sha512-yy9cOoBnx58TlsPrIxauKIFQTiyH+0MK4e97y4sV9ERbI+zDxw7i2hxHLCIEGIE/8PPvDxGhgzIOTSOWcs6/MQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "chardet": "^2.1.0", + "iconv-lite": "^0.7.0" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "@types/node": ">=18" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + } + } + }, + "node_modules/@isaacs/balanced-match": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/@isaacs/balanced-match/-/balanced-match-4.0.1.tgz", + "integrity": "sha512-yzMTt9lEb8Gv7zRioUilSglI0c0smZ9k5D65677DLWLtWJaXIS3CqcGyUFByYKlnUj6TkjLVs54fBl6+TiGQDQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": "20 || >=22" + } + }, + "node_modules/@isaacs/brace-expansion": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/@isaacs/brace-expansion/-/brace-expansion-5.0.0.tgz", + "integrity": "sha512-ZT55BDLV0yv0RBm2czMiZ+SqCGO7AvmOM3G/w2xhVPH+te0aKgFjmBvGlL1dH+ql2tgGO3MVrbb3jCKyvpgnxA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@isaacs/balanced-match": "^4.0.1" + }, + "engines": { + "node": "20 || >=22" + } + }, + "node_modules/@isaacs/cliui": { + "version": "8.0.2", + "resolved": "https://registry.npmjs.org/@isaacs/cliui/-/cliui-8.0.2.tgz", + "integrity": "sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==", + "license": "ISC", + "dependencies": { + "string-width": "^5.1.2", + "string-width-cjs": "npm:string-width@^4.2.0", + "strip-ansi": "^7.0.1", + "strip-ansi-cjs": "npm:strip-ansi@^6.0.1", + "wrap-ansi": "^8.1.0", + "wrap-ansi-cjs": "npm:wrap-ansi@^7.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/@isaacs/cliui/node_modules/ansi-regex": { + "version": "6.2.2", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.2.2.tgz", + "integrity": "sha512-Bq3SmSpyFHaWjPk8If9yc6svM8c56dB5BAtW4Qbw5jHTwwXXcTLoRMkpDJp6VL0XzlWaCHTXrkFURMYmD0sLqg==", + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-regex?sponsor=1" + } + }, + "node_modules/@isaacs/cliui/node_modules/ansi-styles": { + "version": "6.2.3", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.3.tgz", + "integrity": "sha512-4Dj6M28JB+oAH8kFkTLUo+a2jwOFkuqb3yucU0CANcRRUbxS0cP0nZYCGjcc3BNXwRIsUVmDGgzawme7zvJHvg==", + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/@isaacs/cliui/node_modules/emoji-regex": { + "version": "9.2.2", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", + "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==", + "license": "MIT" + }, + "node_modules/@isaacs/cliui/node_modules/string-width": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz", + "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==", + "license": "MIT", + "dependencies": { + "eastasianwidth": "^0.2.0", + "emoji-regex": "^9.2.2", + "strip-ansi": "^7.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@isaacs/cliui/node_modules/strip-ansi": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.2.tgz", + "integrity": "sha512-gmBGslpoQJtgnMAvOVqGZpEz9dyoKTCzy2nfz/n8aIFhN/jCE/rCmcxabB6jOOHV+0WNnylOxaxBQPSvcWklhA==", + "license": "MIT", + "dependencies": { + "ansi-regex": "^6.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/strip-ansi?sponsor=1" + } + }, + "node_modules/@isaacs/cliui/node_modules/wrap-ansi": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-8.1.0.tgz", + "integrity": "sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==", + "license": "MIT", + "dependencies": { + "ansi-styles": "^6.1.0", + "string-width": "^5.0.1", + "strip-ansi": "^7.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "node_modules/@isaacs/ttlcache": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/@isaacs/ttlcache/-/ttlcache-1.4.1.tgz", + "integrity": "sha512-RQgQ4uQ+pLbqXfOmieB91ejmLwvSgv9nLx6sT6sD83s7umBypgg+OIBOBbEUiJXrfpnp9j0mRhYYdzp9uqq3lA==", + "license": "ISC", + "engines": { + "node": ">=12" + } + }, + "node_modules/@istanbuljs/load-nyc-config": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@istanbuljs/load-nyc-config/-/load-nyc-config-1.1.0.tgz", + "integrity": "sha512-VjeHSlIzpv/NyD3N0YuHfXOPDIixcA1q2ZV98wsMqcYlPmv2n3Yb2lYP9XMElnaFVXg5A7YLTeLu6V84uQDjmQ==", + "license": "ISC", + "dependencies": { + "camelcase": "^5.3.1", + "find-up": "^4.1.0", + "get-package-type": "^0.1.0", + "js-yaml": "^3.13.1", + "resolve-from": "^5.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@istanbuljs/load-nyc-config/node_modules/argparse": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", + "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", + "license": "MIT", + "dependencies": { + "sprintf-js": "~1.0.2" + } + }, + "node_modules/@istanbuljs/load-nyc-config/node_modules/find-up": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", + "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", + "license": "MIT", + "dependencies": { + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@istanbuljs/load-nyc-config/node_modules/js-yaml": { + "version": "3.14.1", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", + "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", + "license": "MIT", + "dependencies": { + "argparse": "^1.0.7", + "esprima": "^4.0.0" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, + "node_modules/@istanbuljs/load-nyc-config/node_modules/locate-path": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", + "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", + "license": "MIT", + "dependencies": { + "p-locate": "^4.1.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@istanbuljs/load-nyc-config/node_modules/p-locate": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", + "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", + "license": "MIT", + "dependencies": { + "p-limit": "^2.2.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@istanbuljs/schema": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/@istanbuljs/schema/-/schema-0.1.3.tgz", + "integrity": "sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA==", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/@jest/console": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/@jest/console/-/console-29.7.0.tgz", + "integrity": "sha512-5Ni4CU7XHQi32IJ398EEP4RrB8eV09sXP2ROqD4bksHrnTree52PsxvX8tpL8LvTZ3pFzXyPbNQReSN41CAhOg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jest/types": "^29.6.3", + "@types/node": "*", + "chalk": "^4.0.0", + "jest-message-util": "^29.7.0", + "jest-util": "^29.7.0", + "slash": "^3.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/@jest/core": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/@jest/core/-/core-29.7.0.tgz", + "integrity": "sha512-n7aeXWKMnGtDA48y8TLWJPJmLmmZ642Ceo78cYWEpiD7FzDgmNDV/GCVRorPABdXLJZ/9wzzgZAlHjXjxDHGsg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jest/console": "^29.7.0", + "@jest/reporters": "^29.7.0", + "@jest/test-result": "^29.7.0", + "@jest/transform": "^29.7.0", + "@jest/types": "^29.6.3", + "@types/node": "*", + "ansi-escapes": "^4.2.1", + "chalk": "^4.0.0", + "ci-info": "^3.2.0", + "exit": "^0.1.2", + "graceful-fs": "^4.2.9", + "jest-changed-files": "^29.7.0", + "jest-config": "^29.7.0", + "jest-haste-map": "^29.7.0", + "jest-message-util": "^29.7.0", + "jest-regex-util": "^29.6.3", + "jest-resolve": "^29.7.0", + "jest-resolve-dependencies": "^29.7.0", + "jest-runner": "^29.7.0", + "jest-runtime": "^29.7.0", + "jest-snapshot": "^29.7.0", + "jest-util": "^29.7.0", + "jest-validate": "^29.7.0", + "jest-watcher": "^29.7.0", + "micromatch": "^4.0.4", + "pretty-format": "^29.7.0", + "slash": "^3.0.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + }, + "peerDependencies": { + "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0" + }, + "peerDependenciesMeta": { + "node-notifier": { + "optional": true + } + } + }, + "node_modules/@jest/create-cache-key-function": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/@jest/create-cache-key-function/-/create-cache-key-function-29.7.0.tgz", + "integrity": "sha512-4QqS3LY5PBmTRHj9sAg1HLoPzqAI0uOX6wI/TRqHIcOxlFidy6YEmCQJk6FSZjNLGCeubDMfmkWL+qaLKhSGQA==", + "license": "MIT", + "dependencies": { + "@jest/types": "^29.6.3" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/@jest/environment": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/@jest/environment/-/environment-29.7.0.tgz", + "integrity": "sha512-aQIfHDq33ExsN4jP1NWGXhxgQ/wixs60gDiKO+XVMd8Mn0NWPWgc34ZQDTb2jKaUWQ7MuwoitXAsN2XVXNMpAw==", + "license": "MIT", + "dependencies": { + "@jest/fake-timers": "^29.7.0", + "@jest/types": "^29.6.3", + "@types/node": "*", + "jest-mock": "^29.7.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/@jest/expect": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/@jest/expect/-/expect-29.7.0.tgz", + "integrity": "sha512-8uMeAMycttpva3P1lBHB8VciS9V0XAr3GymPpipdyQXbBcuhkLQOSe8E/p92RyAdToS6ZD1tFkX+CkhoECE0dQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "expect": "^29.7.0", + "jest-snapshot": "^29.7.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/@jest/expect-utils": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/@jest/expect-utils/-/expect-utils-29.7.0.tgz", + "integrity": "sha512-GlsNBWiFQFCVi9QVSx7f5AgMeLxe9YCCs5PuP2O2LdjDAA8Jh9eX7lA1Jq/xdXw3Wb3hyvlFNfZIfcRetSzYcA==", + "dev": true, + "license": "MIT", + "dependencies": { + "jest-get-type": "^29.6.3" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/@jest/fake-timers": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/@jest/fake-timers/-/fake-timers-29.7.0.tgz", + "integrity": "sha512-q4DH1Ha4TTFPdxLsqDXK1d3+ioSL7yL5oCMJZgDYm6i+6CygW5E5xVr/D1HdsGxjt1ZWSfUAs9OxSB/BNelWrQ==", + "license": "MIT", + "dependencies": { + "@jest/types": "^29.6.3", + "@sinonjs/fake-timers": "^10.0.2", + "@types/node": "*", + "jest-message-util": "^29.7.0", + "jest-mock": "^29.7.0", + "jest-util": "^29.7.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/@jest/globals": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/@jest/globals/-/globals-29.7.0.tgz", + "integrity": "sha512-mpiz3dutLbkW2MNFubUGUEVLkTGiqW6yLVTA+JbP6fI6J5iL9Y0Nlg8k95pcF8ctKwCS7WVxteBs29hhfAotzQ==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "@jest/environment": "^29.7.0", + "@jest/expect": "^29.7.0", + "@jest/types": "^29.6.3", + "jest-mock": "^29.7.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/@jest/pattern": { + "version": "30.0.1", + "resolved": "https://registry.npmjs.org/@jest/pattern/-/pattern-30.0.1.tgz", + "integrity": "sha512-gWp7NfQW27LaBQz3TITS8L7ZCQ0TLvtmI//4OwlQRx4rnWxcPNIYjxZpDcN4+UlGxgm3jS5QPz8IPTCkb59wZA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/node": "*", + "jest-regex-util": "30.0.1" + }, + "engines": { + "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" + } + }, + "node_modules/@jest/pattern/node_modules/jest-regex-util": { + "version": "30.0.1", + "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-30.0.1.tgz", + "integrity": "sha512-jHEQgBXAgc+Gh4g0p3bCevgRCVRkB4VB70zhoAE48gxeSr1hfUOsM/C2WoJgVL7Eyg//hudYENbm3Ne+/dRVVA==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" + } + }, + "node_modules/@jest/reporters": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/@jest/reporters/-/reporters-29.7.0.tgz", + "integrity": "sha512-DApq0KJbJOEzAFYjHADNNxAE3KbhxQB1y5Kplb5Waqw6zVbuWatSnMjE5gs8FUgEPmNsnZA3NCWl9NG0ia04Pg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@bcoe/v8-coverage": "^0.2.3", + "@jest/console": "^29.7.0", + "@jest/test-result": "^29.7.0", + "@jest/transform": "^29.7.0", + "@jest/types": "^29.6.3", + "@jridgewell/trace-mapping": "^0.3.18", + "@types/node": "*", + "chalk": "^4.0.0", + "collect-v8-coverage": "^1.0.0", + "exit": "^0.1.2", + "glob": "^7.1.3", + "graceful-fs": "^4.2.9", + "istanbul-lib-coverage": "^3.0.0", + "istanbul-lib-instrument": "^6.0.0", + "istanbul-lib-report": "^3.0.0", + "istanbul-lib-source-maps": "^4.0.0", + "istanbul-reports": "^3.1.3", + "jest-message-util": "^29.7.0", + "jest-util": "^29.7.0", + "jest-worker": "^29.7.0", + "slash": "^3.0.0", + "string-length": "^4.0.1", + "strip-ansi": "^6.0.0", + "v8-to-istanbul": "^9.0.1" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + }, + "peerDependencies": { + "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0" + }, + "peerDependenciesMeta": { + "node-notifier": { + "optional": true + } + } + }, + "node_modules/@jest/reporters/node_modules/glob": { + "version": "7.2.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", + "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", + "deprecated": "Glob versions prior to v9 are no longer supported", + "dev": true, + "license": "ISC", + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.1.1", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/@jest/schemas": { + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/@jest/schemas/-/schemas-29.6.3.tgz", + "integrity": "sha512-mo5j5X+jIZmJQveBKeS/clAueipV7KgiX1vMgCxam1RNYiqE1w62n0/tJJnHtjW8ZHcQco5gY85jA3mi0L+nSA==", + "license": "MIT", + "dependencies": { + "@sinclair/typebox": "^0.27.8" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/@jest/source-map": { + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/@jest/source-map/-/source-map-29.6.3.tgz", + "integrity": "sha512-MHjT95QuipcPrpLM+8JMSzFx6eHp5Bm+4XeFDJlwsvVBjmKNiIAvasGK2fxz2WbGRlnvqehFbh07MMa7n3YJnw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jridgewell/trace-mapping": "^0.3.18", + "callsites": "^3.0.0", + "graceful-fs": "^4.2.9" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/@jest/test-result": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/@jest/test-result/-/test-result-29.7.0.tgz", + "integrity": "sha512-Fdx+tv6x1zlkJPcWXmMDAG2HBnaR9XPSd5aDWQVsfrZmLVT3lU1cwyxLgRmXR9yrq4NBoEm9BMsfgFzTQAbJYA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jest/console": "^29.7.0", + "@jest/types": "^29.6.3", + "@types/istanbul-lib-coverage": "^2.0.0", + "collect-v8-coverage": "^1.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/@jest/test-sequencer": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/@jest/test-sequencer/-/test-sequencer-29.7.0.tgz", + "integrity": "sha512-GQwJ5WZVrKnOJuiYiAF52UNUJXgTZx1NHjFSEB0qEMmSZKAkdMoIzw/Cj6x6NF4AvV23AUqDpFzQkN/eYCYTxw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jest/test-result": "^29.7.0", + "graceful-fs": "^4.2.9", + "jest-haste-map": "^29.7.0", + "slash": "^3.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/@jest/transform": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/@jest/transform/-/transform-29.7.0.tgz", + "integrity": "sha512-ok/BTPFzFKVMwO5eOHRrvnBVHdRy9IrsrW1GpMaQ9MCnilNLXQKmAX8s1YXDFaai9xJpac2ySzV0YeRRECr2Vw==", + "license": "MIT", + "peer": true, + "dependencies": { + "@babel/core": "^7.11.6", + "@jest/types": "^29.6.3", + "@jridgewell/trace-mapping": "^0.3.18", + "babel-plugin-istanbul": "^6.1.1", + "chalk": "^4.0.0", + "convert-source-map": "^2.0.0", + "fast-json-stable-stringify": "^2.1.0", + "graceful-fs": "^4.2.9", + "jest-haste-map": "^29.7.0", + "jest-regex-util": "^29.6.3", + "jest-util": "^29.7.0", + "micromatch": "^4.0.4", + "pirates": "^4.0.4", + "slash": "^3.0.0", + "write-file-atomic": "^4.0.2" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/@jest/types": { + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-29.6.3.tgz", + "integrity": "sha512-u3UPsIilWKOM3F9CXtrG8LEJmNxwoCQC/XVj4IKYXvvpx7QIi/Kg1LI5uDmDpKlac62NUtX7eLjRh+jVZcLOzw==", + "license": "MIT", + "dependencies": { + "@jest/schemas": "^29.6.3", + "@types/istanbul-lib-coverage": "^2.0.0", + "@types/istanbul-reports": "^3.0.0", + "@types/node": "*", + "@types/yargs": "^17.0.8", + "chalk": "^4.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/@jridgewell/gen-mapping": { + "version": "0.3.13", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.13.tgz", + "integrity": "sha512-2kkt/7niJ6MgEPxF0bYdQ6etZaA+fQvDcLKckhy1yIQOzaoKjBBjSj63/aLVjYE3qhRt5dvM+uUyfCg6UKCBbA==", + "license": "MIT", + "dependencies": { + "@jridgewell/sourcemap-codec": "^1.5.0", + "@jridgewell/trace-mapping": "^0.3.24" + } + }, + "node_modules/@jridgewell/remapping": { + "version": "2.3.5", + "resolved": "https://registry.npmjs.org/@jridgewell/remapping/-/remapping-2.3.5.tgz", + "integrity": "sha512-LI9u/+laYG4Ds1TDKSJW2YPrIlcVYOwi2fUC6xB43lueCjgxV4lffOCZCtYFiH6TNOX+tQKXx97T4IKHbhyHEQ==", + "license": "MIT", + "dependencies": { + "@jridgewell/gen-mapping": "^0.3.5", + "@jridgewell/trace-mapping": "^0.3.24" + } + }, + "node_modules/@jridgewell/resolve-uri": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz", + "integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==", + "license": "MIT", + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/source-map": { + "version": "0.3.11", + "resolved": "https://registry.npmjs.org/@jridgewell/source-map/-/source-map-0.3.11.tgz", + "integrity": "sha512-ZMp1V8ZFcPG5dIWnQLr3NSI1MiCU7UETdS/A0G8V/XWHvJv3ZsFqutJn1Y5RPmAPX6F3BiE397OqveU/9NCuIA==", + "license": "MIT", + "dependencies": { + "@jridgewell/gen-mapping": "^0.3.5", + "@jridgewell/trace-mapping": "^0.3.25" + } + }, + "node_modules/@jridgewell/sourcemap-codec": { + "version": "1.5.5", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.5.tgz", + "integrity": "sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og==", + "license": "MIT" + }, + "node_modules/@jridgewell/trace-mapping": { + "version": "0.3.31", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.31.tgz", + "integrity": "sha512-zzNR+SdQSDJzc8joaeP8QQoCQr8NuYx2dIIytl1QeBEZHJ9uW6hebsrYgbz8hJwUQao3TWCMtmfV8Nu1twOLAw==", + "license": "MIT", + "dependencies": { + "@jridgewell/resolve-uri": "^3.1.0", + "@jridgewell/sourcemap-codec": "^1.4.14" + } + }, + "node_modules/@js-sdsl/ordered-map": { + "version": "4.4.2", + "resolved": "https://registry.npmjs.org/@js-sdsl/ordered-map/-/ordered-map-4.4.2.tgz", + "integrity": "sha512-iUKgm52T8HOE/makSxjqoWhe95ZJA1/G1sYsGev2JDKUSS14KAgg1LHb+Ba+IPow0xflbnSkOsZcO08C7w1gYw==", + "license": "MIT", + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/js-sdsl" + } + }, + "node_modules/@jsonjoy.com/base64": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@jsonjoy.com/base64/-/base64-1.1.2.tgz", + "integrity": "sha512-q6XAnWQDIMA3+FTiOYajoYqySkO+JSat0ytXGSuRdq9uXE7o92gzuQwQM14xaCRlBLGq3v5miDGC4vkVTn54xA==", + "license": "Apache-2.0", + "engines": { + "node": ">=10.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/streamich" + }, + "peerDependencies": { + "tslib": "2" + } + }, + "node_modules/@jsonjoy.com/buffers": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@jsonjoy.com/buffers/-/buffers-1.2.1.tgz", + "integrity": "sha512-12cdlDwX4RUM3QxmUbVJWqZ/mrK6dFQH4Zxq6+r1YXKXYBNgZXndx2qbCJwh3+WWkCSn67IjnlG3XYTvmvYtgA==", + "license": "Apache-2.0", + "engines": { + "node": ">=10.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/streamich" + }, + "peerDependencies": { + "tslib": "2" + } + }, + "node_modules/@jsonjoy.com/codegen": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@jsonjoy.com/codegen/-/codegen-1.0.0.tgz", + "integrity": "sha512-E8Oy+08cmCf0EK/NMxpaJZmOxPqM+6iSe2S4nlSBrPZOORoDJILxtbSUEDKQyTamm/BVAhIGllOBNU79/dwf0g==", + "license": "Apache-2.0", + "engines": { + "node": ">=10.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/streamich" + }, + "peerDependencies": { + "tslib": "2" + } + }, + "node_modules/@jsonjoy.com/json-pack": { + "version": "1.21.0", + "resolved": "https://registry.npmjs.org/@jsonjoy.com/json-pack/-/json-pack-1.21.0.tgz", + "integrity": "sha512-+AKG+R2cfZMShzrF2uQw34v3zbeDYUqnQ+jg7ORic3BGtfw9p/+N6RJbq/kkV8JmYZaINknaEQ2m0/f693ZPpg==", + "license": "Apache-2.0", + "dependencies": { + "@jsonjoy.com/base64": "^1.1.2", + "@jsonjoy.com/buffers": "^1.2.0", + "@jsonjoy.com/codegen": "^1.0.0", + "@jsonjoy.com/json-pointer": "^1.0.2", + "@jsonjoy.com/util": "^1.9.0", + "hyperdyperid": "^1.2.0", + "thingies": "^2.5.0", + "tree-dump": "^1.1.0" + }, + "engines": { + "node": ">=10.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/streamich" + }, + "peerDependencies": { + "tslib": "2" + } + }, + "node_modules/@jsonjoy.com/json-pointer": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@jsonjoy.com/json-pointer/-/json-pointer-1.0.2.tgz", + "integrity": "sha512-Fsn6wM2zlDzY1U+v4Nc8bo3bVqgfNTGcn6dMgs6FjrEnt4ZCe60o6ByKRjOGlI2gow0aE/Q41QOigdTqkyK5fg==", + "license": "Apache-2.0", + "dependencies": { + "@jsonjoy.com/codegen": "^1.0.0", + "@jsonjoy.com/util": "^1.9.0" + }, + "engines": { + "node": ">=10.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/streamich" + }, + "peerDependencies": { + "tslib": "2" + } + }, + "node_modules/@jsonjoy.com/util": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@jsonjoy.com/util/-/util-1.9.0.tgz", + "integrity": "sha512-pLuQo+VPRnN8hfPqUTLTHk126wuYdXVxE6aDmjSeV4NCAgyxWbiOIeNJVtID3h1Vzpoi9m4jXezf73I6LgabgQ==", + "license": "Apache-2.0", + "dependencies": { + "@jsonjoy.com/buffers": "^1.0.0", + "@jsonjoy.com/codegen": "^1.0.0" + }, + "engines": { + "node": ">=10.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/streamich" + }, + "peerDependencies": { + "tslib": "2" + } + }, + "node_modules/@leichtgewicht/ip-codec": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@leichtgewicht/ip-codec/-/ip-codec-2.0.5.tgz", + "integrity": "sha512-Vo+PSpZG2/fmgmiNzYK9qWRh8h/CHrwD0mo1h1DzL4yzHNSfWYujGTYsWGreD000gcgmZ7K4Ys6Tx9TxtsKdDw==", + "license": "MIT" + }, + "node_modules/@lit-labs/ssr-dom-shim": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/@lit-labs/ssr-dom-shim/-/ssr-dom-shim-1.4.0.tgz", + "integrity": "sha512-ficsEARKnmmW5njugNYKipTm4SFnbik7CXtoencDZzmzo/dQ+2Q0bgkzJuoJP20Aj0F+izzJjOqsnkd6F/o1bw==", + "license": "BSD-3-Clause" + }, + "node_modules/@lit/reactive-element": { + "version": "1.6.3", + "resolved": "https://registry.npmjs.org/@lit/reactive-element/-/reactive-element-1.6.3.tgz", + "integrity": "sha512-QuTgnG52Poic7uM1AN5yJ09QMe0O28e10XzSvWDz02TJiiKee4stsiownEIadWm8nYzyDAyT+gKzUoZmiWQtsQ==", + "license": "BSD-3-Clause", + "dependencies": { + "@lit-labs/ssr-dom-shim": "^1.0.0" + } + }, + "node_modules/@ljharb/through": { + "version": "2.3.14", + "resolved": "https://registry.npmjs.org/@ljharb/through/-/through-2.3.14.tgz", + "integrity": "sha512-ajBvlKpWucBB17FuQYUShqpqy8GRgYEpJW0vWJbUu1CV9lWyrDCapy0lScU8T8Z6qn49sSwJB3+M+evYIdGg+A==", + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.8" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/@lukeed/csprng": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@lukeed/csprng/-/csprng-1.1.0.tgz", + "integrity": "sha512-Z7C/xXCiGWsg0KuKsHTKJxbWhpI3Vs5GwLfOean7MGyVFGqdRgBbAjOCh6u4bbjPc/8MJ2pZmK/0DLdCbivLDA==", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/@manypkg/find-root": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@manypkg/find-root/-/find-root-1.1.0.tgz", + "integrity": "sha512-mki5uBvhHzO8kYYix/WRy2WX8S3B5wdVSc9D6KcU5lQNglP2yt58/VfLuAK49glRXChosY8ap2oJ1qgma3GUVA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.5.5", + "@types/node": "^12.7.1", + "find-up": "^4.1.0", + "fs-extra": "^8.1.0" + } + }, + "node_modules/@manypkg/find-root/node_modules/@types/node": { + "version": "12.20.55", + "resolved": "https://registry.npmjs.org/@types/node/-/node-12.20.55.tgz", + "integrity": "sha512-J8xLz7q2OFulZ2cyGTLE1TbbZcjpno7FaN6zdJNrgAdrJ+DZzh/uFR6YrTb4C+nXakvud8Q4+rbhoIWlYQbUFQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/@manypkg/find-root/node_modules/find-up": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", + "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", + "dev": true, + "license": "MIT", + "dependencies": { + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@manypkg/find-root/node_modules/fs-extra": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-8.1.0.tgz", + "integrity": "sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g==", + "dev": true, + "license": "MIT", + "dependencies": { + "graceful-fs": "^4.2.0", + "jsonfile": "^4.0.0", + "universalify": "^0.1.0" + }, + "engines": { + "node": ">=6 <7 || >=8" + } + }, + "node_modules/@manypkg/find-root/node_modules/locate-path": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", + "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", + "dev": true, + "license": "MIT", + "dependencies": { + "p-locate": "^4.1.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@manypkg/find-root/node_modules/p-locate": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", + "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", + "dev": true, + "license": "MIT", + "dependencies": { + "p-limit": "^2.2.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@manypkg/get-packages": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/@manypkg/get-packages/-/get-packages-1.1.3.tgz", + "integrity": "sha512-fo+QhuU3qE/2TQMQmbVMqaQ6EWbMhi4ABWP+O4AM1NqPBuy0OrApV5LO6BrrgnhtAHS2NH6RrVk9OL181tTi8A==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.5.5", + "@changesets/types": "^4.0.1", + "@manypkg/find-root": "^1.1.0", + "fs-extra": "^8.1.0", + "globby": "^11.0.0", + "read-yaml-file": "^1.1.0" + } + }, + "node_modules/@manypkg/get-packages/node_modules/@changesets/types": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/@changesets/types/-/types-4.1.0.tgz", + "integrity": "sha512-LDQvVDv5Kb50ny2s25Fhm3d9QSZimsoUGBsUioj6MC3qbMUCuC8GPIvk/M6IvXx3lYhAs0lwWUQLb+VIEUCECw==", + "dev": true, + "license": "MIT" + }, + "node_modules/@manypkg/get-packages/node_modules/fs-extra": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-8.1.0.tgz", + "integrity": "sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g==", + "dev": true, + "license": "MIT", + "dependencies": { + "graceful-fs": "^4.2.0", + "jsonfile": "^4.0.0", + "universalify": "^0.1.0" + }, + "engines": { + "node": ">=6 <7 || >=8" + } + }, + "node_modules/@mapbox/node-pre-gyp": { + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/@mapbox/node-pre-gyp/-/node-pre-gyp-1.0.11.tgz", + "integrity": "sha512-Yhlar6v9WQgUp/He7BdgzOz8lqMQ8sU+jkCq7Wx8Myc5YFJLbEe7lgui/V7G1qB1DJykHSGwreceSaD60Y0PUQ==", + "license": "BSD-3-Clause", + "optional": true, + "dependencies": { + "detect-libc": "^2.0.0", + "https-proxy-agent": "^5.0.0", + "make-dir": "^3.1.0", + "node-fetch": "^2.6.7", + "nopt": "^5.0.0", + "npmlog": "^5.0.1", + "rimraf": "^3.0.2", + "semver": "^7.3.5", + "tar": "^6.1.11" + }, + "bin": { + "node-pre-gyp": "bin/node-pre-gyp" + } + }, + "node_modules/@mapbox/node-pre-gyp/node_modules/glob": { + "version": "7.2.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", + "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", + "deprecated": "Glob versions prior to v9 are no longer supported", + "license": "ISC", + "optional": true, + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.1.1", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/@mapbox/node-pre-gyp/node_modules/rimraf": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", + "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", + "deprecated": "Rimraf versions prior to v4 are no longer supported", + "license": "ISC", + "optional": true, + "dependencies": { + "glob": "^7.1.3" + }, + "bin": { + "rimraf": "bin.js" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/@mapbox/node-pre-gyp/node_modules/semver": { + "version": "7.7.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.2.tgz", + "integrity": "sha512-RF0Fw+rO5AMf9MAyaRXI4AV0Ulj5lMHqVxxdSgiVbixSCXoEmmX/jk0CuJw4+3SqroYO9VoUh+HcuJivvtJemA==", + "license": "ISC", + "optional": true, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@mattrglobal/bbs-signatures": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/@mattrglobal/bbs-signatures/-/bbs-signatures-1.4.0.tgz", + "integrity": "sha512-uBK1IWw48fqloO9W/yoDncTs9rfwfbG/53cOrrCQL7XkyZe4DtB40HcLbi3i+yxTYs5wytf1Qr4Z5RpzpW10jw==", + "license": "Apache-2.0", + "dependencies": { + "@stablelib/random": "1.0.0" + }, + "engines": { + "node": ">=16" + }, + "optionalDependencies": { + "@mattrglobal/node-bbs-signatures": "0.18.1" + } + }, + "node_modules/@mattrglobal/node-bbs-signatures": { + "version": "0.18.1", + "resolved": "https://registry.npmjs.org/@mattrglobal/node-bbs-signatures/-/node-bbs-signatures-0.18.1.tgz", + "integrity": "sha512-s9ccL/1TTvCP1N//4QR84j/d5D/stx/AI1kPcRgiE4O3KrxyF7ZdL9ca8fmFuN6yh9LAbn/OiGRnOXgvn38Dgg==", + "hasInstallScript": true, + "license": "Apache-2.0", + "optional": true, + "dependencies": { + "@mapbox/node-pre-gyp": "1.0.11", + "neon-cli": "0.10.1" + }, + "engines": { + "node": ">=14", + "yarn": "1.x" + } + }, + "node_modules/@mdx-js/mdx": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/@mdx-js/mdx/-/mdx-3.1.1.tgz", + "integrity": "sha512-f6ZO2ifpwAQIpzGWaBQT2TXxPv6z3RBzQKpVftEWN78Vl/YweF1uwussDx8ECAXVtr3Rs89fKyG9YlzUs9DyGQ==", + "license": "MIT", + "dependencies": { + "@types/estree": "^1.0.0", + "@types/estree-jsx": "^1.0.0", + "@types/hast": "^3.0.0", + "@types/mdx": "^2.0.0", + "acorn": "^8.0.0", + "collapse-white-space": "^2.0.0", + "devlop": "^1.0.0", + "estree-util-is-identifier-name": "^3.0.0", + "estree-util-scope": "^1.0.0", + "estree-walker": "^3.0.0", + "hast-util-to-jsx-runtime": "^2.0.0", + "markdown-extensions": "^2.0.0", + "recma-build-jsx": "^1.0.0", + "recma-jsx": "^1.0.0", + "recma-stringify": "^1.0.0", + "rehype-recma": "^1.0.0", + "remark-mdx": "^3.0.0", + "remark-parse": "^11.0.0", + "remark-rehype": "^11.0.0", + "source-map": "^0.7.0", + "unified": "^11.0.0", + "unist-util-position-from-estree": "^2.0.0", + "unist-util-stringify-position": "^4.0.0", + "unist-util-visit": "^5.0.0", + "vfile": "^6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/@mdx-js/mdx/node_modules/@types/mdast": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/@types/mdast/-/mdast-4.0.4.tgz", + "integrity": "sha512-kGaNbPh1k7AFzgpud/gMdvIm5xuECykRR+JnWKQno9TAXVa6WIVCGTPvYGekIDL4uwCZQSYbUxNBSb1aUo79oA==", + "license": "MIT", + "dependencies": { + "@types/unist": "*" + } + }, + "node_modules/@mdx-js/mdx/node_modules/bail": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/bail/-/bail-2.0.2.tgz", + "integrity": "sha512-0xO6mYd7JB2YesxDKplafRpsiOzPt9V02ddPCLbY1xYGPOX24NTyN50qnUxgCPcSoYMhKpAuBTjQoRZCAkUDRw==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/@mdx-js/mdx/node_modules/estree-walker": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-3.0.3.tgz", + "integrity": "sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g==", + "license": "MIT", + "dependencies": { + "@types/estree": "^1.0.0" + } + }, + "node_modules/@mdx-js/mdx/node_modules/is-plain-obj": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-4.1.0.tgz", + "integrity": "sha512-+Pgi+vMuUNkJyExiMBt5IlFoMyKnr5zhJ4Uspz58WOhBF5QoIZkFyNHIbBAtHwzVAgk5RtndVNsDRN61/mmDqg==", + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@mdx-js/mdx/node_modules/mdast-util-from-markdown": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/mdast-util-from-markdown/-/mdast-util-from-markdown-2.0.2.tgz", + "integrity": "sha512-uZhTV/8NBuw0WHkPTrCqDOl0zVe1BIng5ZtHoDk49ME1qqcjYmmLmOf0gELgcRMxN4w2iuIeVso5/6QymSrgmA==", + "license": "MIT", + "dependencies": { + "@types/mdast": "^4.0.0", + "@types/unist": "^3.0.0", + "decode-named-character-reference": "^1.0.0", + "devlop": "^1.0.0", + "mdast-util-to-string": "^4.0.0", + "micromark": "^4.0.0", + "micromark-util-decode-numeric-character-reference": "^2.0.0", + "micromark-util-decode-string": "^2.0.0", + "micromark-util-normalize-identifier": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0", + "unist-util-stringify-position": "^4.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/@mdx-js/mdx/node_modules/mdast-util-to-hast": { + "version": "13.2.1", + "resolved": "https://registry.npmjs.org/mdast-util-to-hast/-/mdast-util-to-hast-13.2.1.tgz", + "integrity": "sha512-cctsq2wp5vTsLIcaymblUriiTcZd0CwWtCbLvrOzYCDZoWyMNV8sZ7krj09FSnsiJi3WVsHLM4k6Dq/yaPyCXA==", + "license": "MIT", + "dependencies": { + "@types/hast": "^3.0.0", + "@types/mdast": "^4.0.0", + "@ungap/structured-clone": "^1.0.0", + "devlop": "^1.0.0", + "micromark-util-sanitize-uri": "^2.0.0", + "trim-lines": "^3.0.0", + "unist-util-position": "^5.0.0", + "unist-util-visit": "^5.0.0", + "vfile": "^6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/@mdx-js/mdx/node_modules/mdast-util-to-string": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/mdast-util-to-string/-/mdast-util-to-string-4.0.0.tgz", + "integrity": "sha512-0H44vDimn51F0YwvxSJSm0eCDOJTRlmN0R1yBh4HLj9wiV1Dn0QoXGbvFAWj2hSItVTlCmBF1hqKlIyUBVFLPg==", + "license": "MIT", + "dependencies": { + "@types/mdast": "^4.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/@mdx-js/mdx/node_modules/micromark": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/micromark/-/micromark-4.0.2.tgz", + "integrity": "sha512-zpe98Q6kvavpCr1NPVSCMebCKfD7CA2NqZ+rykeNhONIJBpc1tFKt9hucLGwha3jNTNI8lHpctWJWoimVF4PfA==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "@types/debug": "^4.0.0", + "debug": "^4.0.0", + "decode-named-character-reference": "^1.0.0", + "devlop": "^1.0.0", + "micromark-core-commonmark": "^2.0.0", + "micromark-factory-space": "^2.0.0", + "micromark-util-character": "^2.0.0", + "micromark-util-chunked": "^2.0.0", + "micromark-util-combine-extensions": "^2.0.0", + "micromark-util-decode-numeric-character-reference": "^2.0.0", + "micromark-util-encode": "^2.0.0", + "micromark-util-normalize-identifier": "^2.0.0", + "micromark-util-resolve-all": "^2.0.0", + "micromark-util-sanitize-uri": "^2.0.0", + "micromark-util-subtokenize": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/@mdx-js/mdx/node_modules/micromark-factory-space": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-factory-space/-/micromark-factory-space-2.0.1.tgz", + "integrity": "sha512-zRkxjtBxxLd2Sc0d+fbnEunsTj46SWXgXciZmHq0kDYGnck/ZSGj9/wULTV95uoeYiK5hRXP2mJ98Uo4cq/LQg==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "micromark-util-character": "^2.0.0", + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/@mdx-js/mdx/node_modules/micromark-util-character": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/micromark-util-character/-/micromark-util-character-2.1.1.tgz", + "integrity": "sha512-wv8tdUTJ3thSFFFJKtpYKOYiGP2+v96Hvk4Tu8KpCAsTMs6yi+nVmGh1syvSCsaxz45J6Jbw+9DD6g97+NV67Q==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/@mdx-js/mdx/node_modules/micromark-util-symbol": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-util-symbol/-/micromark-util-symbol-2.0.1.tgz", + "integrity": "sha512-vs5t8Apaud9N28kgCrRUdEed4UJ+wWNvicHLPxCa9ENlYuAY31M0ETy5y1vA33YoNPDFTghEbnh6efaE8h4x0Q==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT" + }, + "node_modules/@mdx-js/mdx/node_modules/micromark-util-types": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/micromark-util-types/-/micromark-util-types-2.0.2.tgz", + "integrity": "sha512-Yw0ECSpJoViF1qTU4DC6NwtC4aWGt1EkzaQB8KPPyCRR8z9TWeV0HbEFGTO+ZY1wB22zmxnJqhPyTpOVCpeHTA==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT" + }, + "node_modules/@mdx-js/mdx/node_modules/remark-parse": { + "version": "11.0.0", + "resolved": "https://registry.npmjs.org/remark-parse/-/remark-parse-11.0.0.tgz", + "integrity": "sha512-FCxlKLNGknS5ba/1lmpYijMUzX2esxW5xQqjWxw2eHFfS2MSdaHVINFmhjo+qN1WhZhNimq0dZATN9pH0IDrpA==", + "license": "MIT", + "dependencies": { + "@types/mdast": "^4.0.0", + "mdast-util-from-markdown": "^2.0.0", + "micromark-util-types": "^2.0.0", + "unified": "^11.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/@mdx-js/mdx/node_modules/remark-rehype": { + "version": "11.1.2", + "resolved": "https://registry.npmjs.org/remark-rehype/-/remark-rehype-11.1.2.tgz", + "integrity": "sha512-Dh7l57ianaEoIpzbp0PC9UKAdCSVklD8E5Rpw7ETfbTl3FqcOOgq5q2LVDhgGCkaBv7p24JXikPdvhhmHvKMsw==", + "license": "MIT", + "dependencies": { + "@types/hast": "^3.0.0", + "@types/mdast": "^4.0.0", + "mdast-util-to-hast": "^13.0.0", + "unified": "^11.0.0", + "vfile": "^6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/@mdx-js/mdx/node_modules/source-map": { + "version": "0.7.6", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.6.tgz", + "integrity": "sha512-i5uvt8C3ikiWeNZSVZNWcfZPItFQOsYTUAOkcUPGd8DqDy1uOUikjt5dG+uRlwyvR108Fb9DOd4GvXfT0N2/uQ==", + "license": "BSD-3-Clause", + "engines": { + "node": ">= 12" + } + }, + "node_modules/@mdx-js/mdx/node_modules/trough": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/trough/-/trough-2.2.0.tgz", + "integrity": "sha512-tmMpK00BjZiUyVyvrBK7knerNgmgvcV/KLVyuma/SC+TQN167GrMRciANTz09+k3zW8L8t60jWO1GpfkZdjTaw==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/@mdx-js/mdx/node_modules/unified": { + "version": "11.0.5", + "resolved": "https://registry.npmjs.org/unified/-/unified-11.0.5.tgz", + "integrity": "sha512-xKvGhPWw3k84Qjh8bI3ZeJjqnyadK+GEFtazSfZv/rKeTkTjOJho6mFqh2SM96iIcZokxiOpg78GazTSg8+KHA==", + "license": "MIT", + "dependencies": { + "@types/unist": "^3.0.0", + "bail": "^2.0.0", + "devlop": "^1.0.0", + "extend": "^3.0.0", + "is-plain-obj": "^4.0.0", + "trough": "^2.0.0", + "vfile": "^6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/@mdx-js/mdx/node_modules/unist-util-is": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-6.0.1.tgz", + "integrity": "sha512-LsiILbtBETkDz8I9p1dQ0uyRUWuaQzd/cuEeS1hoRSyW5E5XGmTzlwY1OrNzzakGowI9Dr/I8HVaw4hTtnxy8g==", + "license": "MIT", + "dependencies": { + "@types/unist": "^3.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/@mdx-js/mdx/node_modules/unist-util-position": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/unist-util-position/-/unist-util-position-5.0.0.tgz", + "integrity": "sha512-fucsC7HjXvkB5R3kTCO7kUjRdrS0BJt3M/FPxmHMBOm8JQi2BsHAHFsy27E0EolP8rp0NzXsJ+jNPyDWvOJZPA==", + "license": "MIT", + "dependencies": { + "@types/unist": "^3.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/@mdx-js/mdx/node_modules/unist-util-stringify-position": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-4.0.0.tgz", + "integrity": "sha512-0ASV06AAoKCDkS2+xw5RXJywruurpbC4JZSm7nr7MOt1ojAzvyyaO+UxZf18j8FCF6kmzCZKcAgN/yu2gm2XgQ==", + "license": "MIT", + "dependencies": { + "@types/unist": "^3.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/@mdx-js/mdx/node_modules/unist-util-visit": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-5.0.0.tgz", + "integrity": "sha512-MR04uvD+07cwl/yhVuVWAtw+3GOR/knlL55Nd/wAdblk27GCVt3lqpTivy/tkJcZoNPzTwS1Y+KMojlLDhoTzg==", + "license": "MIT", + "dependencies": { + "@types/unist": "^3.0.0", + "unist-util-is": "^6.0.0", + "unist-util-visit-parents": "^6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/@mdx-js/mdx/node_modules/unist-util-visit-parents": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-6.0.2.tgz", + "integrity": "sha512-goh1s1TBrqSqukSc8wrjwWhL0hiJxgA8m4kFxGlQ+8FYQ3C/m11FcTs4YYem7V664AhHVvgoQLk890Ssdsr2IQ==", + "license": "MIT", + "dependencies": { + "@types/unist": "^3.0.0", + "unist-util-is": "^6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/@mdx-js/mdx/node_modules/vfile": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/vfile/-/vfile-6.0.3.tgz", + "integrity": "sha512-KzIbH/9tXat2u30jf+smMwFCsno4wHVdNmzFyL+T/L3UGqqk6JKfVqOFOZEpZSHADH1k40ab6NUIXZq422ov3Q==", + "license": "MIT", + "dependencies": { + "@types/unist": "^3.0.0", + "vfile-message": "^4.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/@mdx-js/mdx/node_modules/vfile-message": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/vfile-message/-/vfile-message-4.0.3.tgz", + "integrity": "sha512-QTHzsGd1EhbZs4AsQ20JX1rC3cOlt/IWJruk893DfLRr57lcnOeMaWG4K0JrRta4mIJZKth2Au3mM3u03/JWKw==", + "license": "MIT", + "dependencies": { + "@types/unist": "^3.0.0", + "unist-util-stringify-position": "^4.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/@mdx-js/react": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/@mdx-js/react/-/react-3.1.1.tgz", + "integrity": "sha512-f++rKLQgUVYDAtECQ6fn/is15GkEH9+nZPM3MS0RcxVqoTfawHvDlSCH7JbMhAM6uJ32v3eXLvLmLvjGu7PTQw==", + "license": "MIT", + "dependencies": { + "@types/mdx": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + }, + "peerDependencies": { + "@types/react": ">=16", + "react": ">=16" + } + }, + "node_modules/@mermaid-js/parser": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/@mermaid-js/parser/-/parser-0.6.3.tgz", + "integrity": "sha512-lnjOhe7zyHjc+If7yT4zoedx2vo4sHaTmtkl1+or8BRTnCtDmcTpAjpzDSfCZrshM5bCoz0GyidzadJAH1xobA==", + "license": "MIT", + "dependencies": { + "langium": "3.3.1" + } + }, + "node_modules/@metamask/detect-provider": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@metamask/detect-provider/-/detect-provider-2.0.0.tgz", + "integrity": "sha512-sFpN+TX13E9fdBDh9lvQeZdJn4qYoRb/6QF2oZZK/Pn559IhCFacPMU1rMuqyXoFQF3JSJfii2l98B87QDPeCQ==", + "license": "ISC", + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@metamask/json-rpc-engine": { + "version": "7.3.3", + "resolved": "https://registry.npmjs.org/@metamask/json-rpc-engine/-/json-rpc-engine-7.3.3.tgz", + "integrity": "sha512-dwZPq8wx9yV3IX2caLi9q9xZBw2XeIoYqdyihDDDpuHVCEiqadJLwqM3zy+uwf6F1QYQ65A8aOMQg1Uw7LMLNg==", + "license": "ISC", + "dependencies": { + "@metamask/rpc-errors": "^6.2.1", + "@metamask/safe-event-emitter": "^3.0.0", + "@metamask/utils": "^8.3.0" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@metamask/object-multiplex": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/@metamask/object-multiplex/-/object-multiplex-1.3.0.tgz", + "integrity": "sha512-czcQeVYdSNtabd+NcYQnrM69MciiJyd1qvKH8WM2Id3C0ZiUUX5Xa/MK+/VUk633DBhVOwdNzAKIQ33lGyA+eQ==", + "license": "ISC", + "dependencies": { + "end-of-stream": "^1.4.4", + "once": "^1.4.0", + "readable-stream": "^2.3.3" + }, + "engines": { + "node": ">=12.0.0" + } + }, + "node_modules/@metamask/providers": { + "version": "12.0.0", + "resolved": "https://registry.npmjs.org/@metamask/providers/-/providers-12.0.0.tgz", + "integrity": "sha512-NkrSvOF8v8kDz9f2TY1AYK19hJdpYbYhbXWhjmmmXrSMYotn+o7ZV1b1Yd0fqD/HKVL0Vd2BWBUT9U0ggIDTEA==", + "license": "MIT", + "dependencies": { + "@metamask/json-rpc-engine": "^7.1.1", + "@metamask/object-multiplex": "^1.1.0", + "@metamask/rpc-errors": "^6.0.0", + "@metamask/safe-event-emitter": "^3.0.0", + "@metamask/utils": "^8.1.0", + "detect-browser": "^5.2.0", + "extension-port-stream": "^2.1.1", + "fast-deep-equal": "^3.1.3", + "is-stream": "^2.0.0", + "json-rpc-middleware-stream": "^4.2.1", + "pump": "^3.0.0", + "webextension-polyfill": "^0.10.0" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@metamask/rpc-errors": { + "version": "6.4.0", + "resolved": "https://registry.npmjs.org/@metamask/rpc-errors/-/rpc-errors-6.4.0.tgz", + "integrity": "sha512-1ugFO1UoirU2esS3juZanS/Fo8C8XYocCuBpfZI5N7ECtoG+zu0wF+uWZASik6CkO6w9n/Iebt4iI4pT0vptpg==", + "license": "MIT", + "dependencies": { + "@metamask/utils": "^9.0.0", + "fast-safe-stringify": "^2.0.6" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@metamask/rpc-errors/node_modules/@metamask/utils": { + "version": "9.3.0", + "resolved": "https://registry.npmjs.org/@metamask/utils/-/utils-9.3.0.tgz", + "integrity": "sha512-w8CVbdkDrVXFJbfBSlDfafDR6BAkpDmv1bC1UJVCoVny5tW2RKAdn9i68Xf7asYT4TnUhl/hN4zfUiKQq9II4g==", + "license": "ISC", + "dependencies": { + "@ethereumjs/tx": "^4.2.0", + "@metamask/superstruct": "^3.1.0", + "@noble/hashes": "^1.3.1", + "@scure/base": "^1.1.3", + "@types/debug": "^4.1.7", + "debug": "^4.3.4", + "pony-cause": "^2.1.10", + "semver": "^7.5.4", + "uuid": "^9.0.1" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@metamask/rpc-errors/node_modules/semver": { + "version": "7.7.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.2.tgz", + "integrity": "sha512-RF0Fw+rO5AMf9MAyaRXI4AV0Ulj5lMHqVxxdSgiVbixSCXoEmmX/jk0CuJw4+3SqroYO9VoUh+HcuJivvtJemA==", + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@metamask/safe-event-emitter": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/@metamask/safe-event-emitter/-/safe-event-emitter-3.1.2.tgz", + "integrity": "sha512-5yb2gMI1BDm0JybZezeoX/3XhPDOtTbcFvpTXM9kxsoZjPZFh4XciqRbpD6N86HYZqWDhEaKUDuOyR0sQHEjMA==", + "license": "ISC", + "engines": { + "node": ">=12.0.0" + } + }, + "node_modules/@metamask/superstruct": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/@metamask/superstruct/-/superstruct-3.2.1.tgz", + "integrity": "sha512-fLgJnDOXFmuVlB38rUN5SmU7hAFQcCjrg3Vrxz67KTY7YHFnSNEKvX4avmEBdOI0yTCxZjwMCFEqsC8k2+Wd3g==", + "license": "MIT", + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@metamask/utils": { + "version": "8.5.0", + "resolved": "https://registry.npmjs.org/@metamask/utils/-/utils-8.5.0.tgz", + "integrity": "sha512-I6bkduevXb72TIM9q2LRO63JSsF9EXduh3sBr9oybNX2hNNpr/j1tEjXrsG0Uabm4MJ1xkGAQEMwifvKZIkyxQ==", + "license": "ISC", + "dependencies": { + "@ethereumjs/tx": "^4.2.0", + "@metamask/superstruct": "^3.0.0", + "@noble/hashes": "^1.3.1", + "@scure/base": "^1.1.3", + "@types/debug": "^4.1.7", + "debug": "^4.3.4", + "pony-cause": "^2.1.10", + "semver": "^7.5.4", + "uuid": "^9.0.1" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@metamask/utils/node_modules/semver": { + "version": "7.7.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.2.tgz", + "integrity": "sha512-RF0Fw+rO5AMf9MAyaRXI4AV0Ulj5lMHqVxxdSgiVbixSCXoEmmX/jk0CuJw4+3SqroYO9VoUh+HcuJivvtJemA==", + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@microsoft/tsdoc": { + "version": "0.15.1", + "resolved": "https://registry.npmjs.org/@microsoft/tsdoc/-/tsdoc-0.15.1.tgz", + "integrity": "sha512-4aErSrCR/On/e5G2hDP0wjooqDdauzEbIq8hIkIe5pXV0rtWJZvdCEKL0ykZxex+IxIwBp0eGeV48hQN07dXtw==", + "license": "MIT" + }, + "node_modules/@motionone/animation": { + "version": "10.18.0", + "resolved": "https://registry.npmjs.org/@motionone/animation/-/animation-10.18.0.tgz", + "integrity": "sha512-9z2p5GFGCm0gBsZbi8rVMOAJCtw1WqBTIPw3ozk06gDvZInBPIsQcHgYogEJ4yuHJ+akuW8g1SEIOpTOvYs8hw==", + "license": "MIT", + "dependencies": { + "@motionone/easing": "^10.18.0", + "@motionone/types": "^10.17.1", + "@motionone/utils": "^10.18.0", + "tslib": "^2.3.1" + } + }, + "node_modules/@motionone/dom": { + "version": "10.18.0", + "resolved": "https://registry.npmjs.org/@motionone/dom/-/dom-10.18.0.tgz", + "integrity": "sha512-bKLP7E0eyO4B2UaHBBN55tnppwRnaE3KFfh3Ps9HhnAkar3Cb69kUCJY9as8LrccVYKgHA+JY5dOQqJLOPhF5A==", + "license": "MIT", + "dependencies": { + "@motionone/animation": "^10.18.0", + "@motionone/generators": "^10.18.0", + "@motionone/types": "^10.17.1", + "@motionone/utils": "^10.18.0", + "hey-listen": "^1.0.8", + "tslib": "^2.3.1" + } + }, + "node_modules/@motionone/easing": { + "version": "10.18.0", + "resolved": "https://registry.npmjs.org/@motionone/easing/-/easing-10.18.0.tgz", + "integrity": "sha512-VcjByo7XpdLS4o9T8t99JtgxkdMcNWD3yHU/n6CLEz3bkmKDRZyYQ/wmSf6daum8ZXqfUAgFeCZSpJZIMxaCzg==", + "license": "MIT", + "dependencies": { + "@motionone/utils": "^10.18.0", + "tslib": "^2.3.1" + } + }, + "node_modules/@motionone/generators": { + "version": "10.18.0", + "resolved": "https://registry.npmjs.org/@motionone/generators/-/generators-10.18.0.tgz", + "integrity": "sha512-+qfkC2DtkDj4tHPu+AFKVfR/C30O1vYdvsGYaR13W/1cczPrrcjdvYCj0VLFuRMN+lP1xvpNZHCRNM4fBzn1jg==", + "license": "MIT", + "dependencies": { + "@motionone/types": "^10.17.1", + "@motionone/utils": "^10.18.0", + "tslib": "^2.3.1" + } + }, + "node_modules/@motionone/svelte": { + "version": "10.16.4", + "resolved": "https://registry.npmjs.org/@motionone/svelte/-/svelte-10.16.4.tgz", + "integrity": "sha512-zRVqk20lD1xqe+yEDZhMYgftsuHc25+9JSo+r0a0OWUJFocjSV9D/+UGhX4xgJsuwB9acPzXLr20w40VnY2PQA==", + "license": "MIT", + "dependencies": { + "@motionone/dom": "^10.16.4", + "tslib": "^2.3.1" + } + }, + "node_modules/@motionone/types": { + "version": "10.17.1", + "resolved": "https://registry.npmjs.org/@motionone/types/-/types-10.17.1.tgz", + "integrity": "sha512-KaC4kgiODDz8hswCrS0btrVrzyU2CSQKO7Ps90ibBVSQmjkrt2teqta6/sOG59v7+dPnKMAg13jyqtMKV2yJ7A==", + "license": "MIT" + }, + "node_modules/@motionone/utils": { + "version": "10.18.0", + "resolved": "https://registry.npmjs.org/@motionone/utils/-/utils-10.18.0.tgz", + "integrity": "sha512-3XVF7sgyTSI2KWvTf6uLlBJ5iAgRgmvp3bpuOiQJvInd4nZ19ET8lX5unn30SlmRH7hXbBbH+Gxd0m0klJ3Xtw==", + "license": "MIT", + "dependencies": { + "@motionone/types": "^10.17.1", + "hey-listen": "^1.0.8", + "tslib": "^2.3.1" + } + }, + "node_modules/@motionone/vue": { + "version": "10.16.4", + "resolved": "https://registry.npmjs.org/@motionone/vue/-/vue-10.16.4.tgz", + "integrity": "sha512-z10PF9JV6SbjFq+/rYabM+8CVlMokgl8RFGvieSGNTmrkQanfHn+15XBrhG3BgUfvmTeSeyShfOHpG0i9zEdcg==", + "deprecated": "Motion One for Vue is deprecated. Use Oku Motion instead https://oku-ui.com/motion", + "license": "MIT", + "dependencies": { + "@motionone/dom": "^10.16.4", + "tslib": "^2.3.1" + } + }, + "node_modules/@msgpack/msgpack": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/@msgpack/msgpack/-/msgpack-3.1.2.tgz", + "integrity": "sha512-JEW4DEtBzfe8HvUYecLU9e6+XJnKDlUAIve8FvPzF3Kzs6Xo/KuZkZJsDH0wJXl/qEZbeeE7edxDNY3kMs39hQ==", + "license": "ISC", + "engines": { "node": ">= 18" } }, - "node_modules/@nomicfoundation/edr-darwin-x64": { - "version": "0.11.3", - "resolved": "https://registry.npmjs.org/@nomicfoundation/edr-darwin-x64/-/edr-darwin-x64-0.11.3.tgz", - "integrity": "sha512-QR4jAFrPbOcrO7O2z2ESg+eUeIZPe2bPIlQYgiJ04ltbSGW27FblOzdd5+S3RoOD/dsZGKAvvy6dadBEl0NgoA==", + "node_modules/@multiformats/base-x": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/@multiformats/base-x/-/base-x-4.0.1.tgz", + "integrity": "sha512-eMk0b9ReBbV23xXU693TAIrLyeO5iTgBZGSJfpqriG8UkYvr/hC9u9pyMlAakDNHWmbhMZCDs6KQO0jzKD8OTw==", + "license": "MIT" + }, + "node_modules/@nestjs/cli": { + "version": "10.3.2", + "resolved": "https://registry.npmjs.org/@nestjs/cli/-/cli-10.3.2.tgz", + "integrity": "sha512-aWmD1GLluWrbuC4a1Iz/XBk5p74Uj6nIVZj6Ov03JbTfgtWqGFLtXuMetvzMiHxfrHehx/myt2iKAPRhKdZvTg==", + "license": "MIT", + "dependencies": { + "@angular-devkit/core": "17.1.2", + "@angular-devkit/schematics": "17.1.2", + "@angular-devkit/schematics-cli": "17.1.2", + "@nestjs/schematics": "^10.0.1", + "chalk": "4.1.2", + "chokidar": "3.6.0", + "cli-table3": "0.6.3", + "commander": "4.1.1", + "fork-ts-checker-webpack-plugin": "9.0.2", + "glob": "10.3.10", + "inquirer": "8.2.6", + "node-emoji": "1.11.0", + "ora": "5.4.1", + "rimraf": "4.4.1", + "shelljs": "0.8.5", + "source-map-support": "0.5.21", + "tree-kill": "1.2.2", + "tsconfig-paths": "4.2.0", + "tsconfig-paths-webpack-plugin": "4.1.0", + "typescript": "5.3.3", + "webpack": "5.90.1", + "webpack-node-externals": "3.0.0" + }, + "bin": { + "nest": "bin/nest.js" + }, + "engines": { + "node": ">= 16.14" + }, + "peerDependencies": { + "@swc/cli": "^0.1.62 || ^0.3.0", + "@swc/core": "^1.3.62" + }, + "peerDependenciesMeta": { + "@swc/cli": { + "optional": true + }, + "@swc/core": { + "optional": true + } + } + }, + "node_modules/@nestjs/cli/node_modules/bl": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/bl/-/bl-4.1.0.tgz", + "integrity": "sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==", + "license": "MIT", + "dependencies": { + "buffer": "^5.5.0", + "inherits": "^2.0.4", + "readable-stream": "^3.4.0" + } + }, + "node_modules/@nestjs/cli/node_modules/brace-expansion": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.2.tgz", + "integrity": "sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==", + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "node_modules/@nestjs/cli/node_modules/buffer": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", + "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT", + "dependencies": { + "base64-js": "^1.3.1", + "ieee754": "^1.1.13" + } + }, + "node_modules/@nestjs/cli/node_modules/commander": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/commander/-/commander-4.1.1.tgz", + "integrity": "sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==", + "license": "MIT", + "engines": { + "node": ">= 6" + } + }, + "node_modules/@nestjs/cli/node_modules/glob": { + "version": "10.3.10", + "resolved": "https://registry.npmjs.org/glob/-/glob-10.3.10.tgz", + "integrity": "sha512-fa46+tv1Ak0UPK1TOy/pZrIybNNt4HCv7SDzwyfiOZkvZLEbjsZkJBPtDHVshZjbecAoAGSC20MjLDG/qr679g==", + "license": "ISC", + "dependencies": { + "foreground-child": "^3.1.0", + "jackspeak": "^2.3.5", + "minimatch": "^9.0.1", + "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0", + "path-scurry": "^1.10.1" + }, + "bin": { + "glob": "dist/esm/bin.mjs" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/@nestjs/cli/node_modules/is-interactive": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-interactive/-/is-interactive-1.0.0.tgz", + "integrity": "sha512-2HvIEKRoqS62guEC+qBjpvRubdX910WCMuJTZ+I9yvqKU2/12eSL549HMwtabb4oupdj2sMP50k+XJfB/8JE6w==", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/@nestjs/cli/node_modules/jackspeak": { + "version": "2.3.6", + "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-2.3.6.tgz", + "integrity": "sha512-N3yCS/NegsOBokc8GAdM8UcmfsKiSS8cipheD/nivzr700H+nsMOxJjQnvwOcRYVuFkdH0wGUvW2WbXGmrZGbQ==", + "license": "BlueOak-1.0.0", + "dependencies": { + "@isaacs/cliui": "^8.0.2" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + }, + "optionalDependencies": { + "@pkgjs/parseargs": "^0.11.0" + } + }, + "node_modules/@nestjs/cli/node_modules/lru-cache": { + "version": "10.4.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz", + "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==", + "license": "ISC" + }, + "node_modules/@nestjs/cli/node_modules/minimatch": { + "version": "9.0.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", + "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", + "license": "ISC", + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/@nestjs/cli/node_modules/ora": { + "version": "5.4.1", + "resolved": "https://registry.npmjs.org/ora/-/ora-5.4.1.tgz", + "integrity": "sha512-5b6Y85tPxZZ7QytO+BQzysW31HJku27cRIlkbAXaNx+BdcVi+LlRFmVXzeF6a7JCwJpyw5c4b+YSVImQIrBpuQ==", + "license": "MIT", + "dependencies": { + "bl": "^4.1.0", + "chalk": "^4.1.0", + "cli-cursor": "^3.1.0", + "cli-spinners": "^2.5.0", + "is-interactive": "^1.0.0", + "is-unicode-supported": "^0.1.0", + "log-symbols": "^4.1.0", + "strip-ansi": "^6.0.0", + "wcwidth": "^1.0.1" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@nestjs/cli/node_modules/path-scurry": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-1.11.1.tgz", + "integrity": "sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==", + "license": "BlueOak-1.0.0", + "dependencies": { + "lru-cache": "^10.2.0", + "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0" + }, + "engines": { + "node": ">=16 || 14 >=14.18" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/@nestjs/cli/node_modules/readable-stream": { + "version": "3.6.2", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", + "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", + "license": "MIT", + "dependencies": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/@nestjs/cli/node_modules/rimraf": { + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-4.4.1.tgz", + "integrity": "sha512-Gk8NlF062+T9CqNGn6h4tls3k6T1+/nXdOcSZVikNVtlRdYpA7wRJJMoXmuvOnLW844rPjdQ7JgXCYM6PPC/og==", + "license": "ISC", + "dependencies": { + "glob": "^9.2.0" + }, + "bin": { + "rimraf": "dist/cjs/src/bin.js" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/@nestjs/cli/node_modules/rimraf/node_modules/glob": { + "version": "9.3.5", + "resolved": "https://registry.npmjs.org/glob/-/glob-9.3.5.tgz", + "integrity": "sha512-e1LleDykUz2Iu+MTYdkSsuWX8lvAjAcs0Xef0lNIu0S2wOAzuTxCJtcd9S3cijlwYF18EsU3rzb8jPVobxDh9Q==", + "license": "ISC", + "dependencies": { + "fs.realpath": "^1.0.0", + "minimatch": "^8.0.2", + "minipass": "^4.2.4", + "path-scurry": "^1.6.1" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/@nestjs/cli/node_modules/rimraf/node_modules/minimatch": { + "version": "8.0.4", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-8.0.4.tgz", + "integrity": "sha512-W0Wvr9HyFXZRGIDgCicunpQ299OKXs9RgZfaukz4qAW/pJhcpUfupc9c+OObPOFueNy8VSrZgEmDtk6Kh4WzDA==", + "license": "ISC", + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/@nestjs/cli/node_modules/rimraf/node_modules/minipass": { + "version": "4.2.8", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-4.2.8.tgz", + "integrity": "sha512-fNzuVyifolSLFL4NzpF+wEF4qrgqaaKX0haXPQEdQ7NKAN+WecoKMHV09YcuL/DHxrUsYQOK3MiuDf7Ip2OXfQ==", + "license": "ISC", + "engines": { + "node": ">=8" + } + }, + "node_modules/@nestjs/cli/node_modules/typescript": { + "version": "5.3.3", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.3.3.tgz", + "integrity": "sha512-pXWcraxM0uxAS+tN0AG/BF2TyqmHO014Z070UsJ+pFvYuRSq8KH8DmWpnbXe0pEPDHXZV3FcAbJkijJ5oNEnWw==", + "license": "Apache-2.0", + "bin": { + "tsc": "bin/tsc", + "tsserver": "bin/tsserver" + }, + "engines": { + "node": ">=14.17" + } + }, + "node_modules/@nestjs/common": { + "version": "10.3.3", + "resolved": "https://registry.npmjs.org/@nestjs/common/-/common-10.3.3.tgz", + "integrity": "sha512-LAkTe8/CF0uNWM0ecuDwUNTHCi1lVSITmmR4FQ6Ftz1E7ujQCnJ5pMRzd8JRN14vdBkxZZ8VbVF0BDUKoKNxMQ==", + "license": "MIT", + "peer": true, + "dependencies": { + "iterare": "1.2.1", + "tslib": "2.6.2", + "uid": "2.0.2" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/nest" + }, + "peerDependencies": { + "class-transformer": "*", + "class-validator": "*", + "reflect-metadata": "^0.1.12 || ^0.2.0", + "rxjs": "^7.1.0" + }, + "peerDependenciesMeta": { + "class-transformer": { + "optional": true + }, + "class-validator": { + "optional": true + } + } + }, + "node_modules/@nestjs/common/node_modules/tslib": { + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz", + "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==", + "license": "0BSD" + }, + "node_modules/@nestjs/config": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/@nestjs/config/-/config-3.2.0.tgz", + "integrity": "sha512-BpYRn57shg7CH35KGT6h+hT7ZucB6Qn2B3NBNdvhD4ApU8huS5pX/Wc2e/aO5trIha606Bz2a9t9/vbiuTBTww==", + "license": "MIT", + "peer": true, + "dependencies": { + "dotenv": "16.4.1", + "dotenv-expand": "10.0.0", + "lodash": "4.17.21", + "uuid": "9.0.1" + }, + "peerDependencies": { + "@nestjs/common": "^8.0.0 || ^9.0.0 || ^10.0.0", + "rxjs": "^7.1.0" + } + }, + "node_modules/@nestjs/config/node_modules/dotenv": { + "version": "16.4.1", + "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-16.4.1.tgz", + "integrity": "sha512-CjA3y+Dr3FyFDOAMnxZEGtnW9KBR2M0JvvUtXNW+dYJL5ROWxP9DUHCwgFqpMk0OXCc0ljhaNTr2w/kutYIcHQ==", + "license": "BSD-2-Clause", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/motdotla/dotenv?sponsor=1" + } + }, + "node_modules/@nestjs/core": { + "version": "10.3.3", + "resolved": "https://registry.npmjs.org/@nestjs/core/-/core-10.3.3.tgz", + "integrity": "sha512-kxJWggQAPX3RuZx9JVec69eSLaYLNIox2emkZJpfBJ5Qq7cAq7edQIt1r4LGjTKq6kFubNTPsqhWf5y7yFRBPw==", + "hasInstallScript": true, + "license": "MIT", + "peer": true, + "dependencies": { + "@nuxtjs/opencollective": "0.3.2", + "fast-safe-stringify": "2.1.1", + "iterare": "1.2.1", + "path-to-regexp": "3.2.0", + "tslib": "2.6.2", + "uid": "2.0.2" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/nest" + }, + "peerDependencies": { + "@nestjs/common": "^10.0.0", + "@nestjs/microservices": "^10.0.0", + "@nestjs/platform-express": "^10.0.0", + "@nestjs/websockets": "^10.0.0", + "reflect-metadata": "^0.1.12 || ^0.2.0", + "rxjs": "^7.1.0" + }, + "peerDependenciesMeta": { + "@nestjs/microservices": { + "optional": true + }, + "@nestjs/platform-express": { + "optional": true + }, + "@nestjs/websockets": { + "optional": true + } + } + }, + "node_modules/@nestjs/core/node_modules/tslib": { + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz", + "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==", + "license": "0BSD" + }, + "node_modules/@nestjs/mapped-types": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@nestjs/mapped-types/-/mapped-types-2.0.5.tgz", + "integrity": "sha512-bSJv4pd6EY99NX9CjBIyn4TVDoSit82DUZlL4I3bqNfy5Gt+gXTa86i3I/i0iIV9P4hntcGM5GyO+FhZAhxtyg==", + "license": "MIT", + "peerDependencies": { + "@nestjs/common": "^8.0.0 || ^9.0.0 || ^10.0.0", + "class-transformer": "^0.4.0 || ^0.5.0", + "class-validator": "^0.13.0 || ^0.14.0", + "reflect-metadata": "^0.1.12 || ^0.2.0" + }, + "peerDependenciesMeta": { + "class-transformer": { + "optional": true + }, + "class-validator": { + "optional": true + } + } + }, + "node_modules/@nestjs/platform-express": { + "version": "10.3.3", + "resolved": "https://registry.npmjs.org/@nestjs/platform-express/-/platform-express-10.3.3.tgz", + "integrity": "sha512-GGKSEU48Os7nYFIsUM0nutuFUGn5AbeP8gzFBiBCAtiuJWrXZXpZ58pMBYxAbMf7IrcOZFInHEukjHGAQU0OZw==", + "license": "MIT", + "peer": true, + "dependencies": { + "body-parser": "1.20.2", + "cors": "2.8.5", + "express": "4.18.2", + "multer": "1.4.4-lts.1", + "tslib": "2.6.2" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/nest" + }, + "peerDependencies": { + "@nestjs/common": "^10.0.0", + "@nestjs/core": "^10.0.0" + } + }, + "node_modules/@nestjs/platform-express/node_modules/accepts": { + "version": "1.3.8", + "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.8.tgz", + "integrity": "sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==", + "license": "MIT", + "dependencies": { + "mime-types": "~2.1.34", + "negotiator": "0.6.3" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/@nestjs/platform-express/node_modules/content-disposition": { + "version": "0.5.4", + "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.4.tgz", + "integrity": "sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==", + "license": "MIT", + "dependencies": { + "safe-buffer": "5.2.1" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/@nestjs/platform-express/node_modules/cookie": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.5.0.tgz", + "integrity": "sha512-YZ3GUyn/o8gfKJlnlX7g7xq4gyO6OSuhGPKaaGssGB2qgDUS0gPgtTvoyZLTt9Ab6dC4hfc9dV5arkvc/OCmrw==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/@nestjs/platform-express/node_modules/cookie-signature": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz", + "integrity": "sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ==", + "license": "MIT" + }, + "node_modules/@nestjs/platform-express/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "license": "MIT", + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/@nestjs/platform-express/node_modules/debug/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "license": "MIT" + }, + "node_modules/@nestjs/platform-express/node_modules/encodeurl": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", + "integrity": "sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==", + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/@nestjs/platform-express/node_modules/express": { + "version": "4.18.2", + "resolved": "https://registry.npmjs.org/express/-/express-4.18.2.tgz", + "integrity": "sha512-5/PsL6iGPdfQ/lKM1UuielYgv3BUoJfz1aUwU9vHZ+J7gyvwdQXFEBIEIaxeGf0GIcreATNyBExtalisDbuMqQ==", + "license": "MIT", + "dependencies": { + "accepts": "~1.3.8", + "array-flatten": "1.1.1", + "body-parser": "1.20.1", + "content-disposition": "0.5.4", + "content-type": "~1.0.4", + "cookie": "0.5.0", + "cookie-signature": "1.0.6", + "debug": "2.6.9", + "depd": "2.0.0", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "etag": "~1.8.1", + "finalhandler": "1.2.0", + "fresh": "0.5.2", + "http-errors": "2.0.0", + "merge-descriptors": "1.0.1", + "methods": "~1.1.2", + "on-finished": "2.4.1", + "parseurl": "~1.3.3", + "path-to-regexp": "0.1.7", + "proxy-addr": "~2.0.7", + "qs": "6.11.0", + "range-parser": "~1.2.1", + "safe-buffer": "5.2.1", + "send": "0.18.0", + "serve-static": "1.15.0", + "setprototypeof": "1.2.0", + "statuses": "2.0.1", + "type-is": "~1.6.18", + "utils-merge": "1.0.1", + "vary": "~1.1.2" + }, + "engines": { + "node": ">= 0.10.0" + } + }, + "node_modules/@nestjs/platform-express/node_modules/express/node_modules/body-parser": { + "version": "1.20.1", + "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.1.tgz", + "integrity": "sha512-jWi7abTbYwajOytWCQc37VulmWiRae5RyTpaCyDcS5/lMdtwSz5lOpDE67srw/HYe35f1z3fDQw+3txg7gNtWw==", + "license": "MIT", + "dependencies": { + "bytes": "3.1.2", + "content-type": "~1.0.4", + "debug": "2.6.9", + "depd": "2.0.0", + "destroy": "1.2.0", + "http-errors": "2.0.0", + "iconv-lite": "0.4.24", + "on-finished": "2.4.1", + "qs": "6.11.0", + "raw-body": "2.5.1", + "type-is": "~1.6.18", + "unpipe": "1.0.0" + }, + "engines": { + "node": ">= 0.8", + "npm": "1.2.8000 || >= 1.4.16" + } + }, + "node_modules/@nestjs/platform-express/node_modules/finalhandler": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.2.0.tgz", + "integrity": "sha512-5uXcUVftlQMFnWC9qu/svkWv3GTd2PfUhK/3PLkYNAe7FbqJMt3515HaxE6eRL74GdsriiwujiawdaB1BpEISg==", + "license": "MIT", + "dependencies": { + "debug": "2.6.9", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "on-finished": "2.4.1", + "parseurl": "~1.3.3", + "statuses": "2.0.1", + "unpipe": "~1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/@nestjs/platform-express/node_modules/fresh": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", + "integrity": "sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/@nestjs/platform-express/node_modules/iconv-lite": { + "version": "0.4.24", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", + "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", + "license": "MIT", + "dependencies": { + "safer-buffer": ">= 2.1.2 < 3" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/@nestjs/platform-express/node_modules/merge-descriptors": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz", + "integrity": "sha512-cCi6g3/Zr1iqQi6ySbseM1Xvooa98N0w31jzUYrXPX2xqObmFGHJ0tQ5u74H3mVh7wLouTseZyYIq39g8cNp1w==", + "license": "MIT" + }, + "node_modules/@nestjs/platform-express/node_modules/mime": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", + "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==", + "license": "MIT", + "bin": { + "mime": "cli.js" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/@nestjs/platform-express/node_modules/mime-db": { + "version": "1.52.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", + "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/@nestjs/platform-express/node_modules/mime-types": { + "version": "2.1.35", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", + "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", + "license": "MIT", + "dependencies": { + "mime-db": "1.52.0" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/@nestjs/platform-express/node_modules/negotiator": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz", + "integrity": "sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/@nestjs/platform-express/node_modules/path-to-regexp": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz", + "integrity": "sha512-5DFkuoqlv1uYQKxy8omFBeJPQcdoE07Kv2sferDCrAq1ohOU+MSDswDIbnx3YAM60qIOnYa53wBhXW0EbMonrQ==", + "license": "MIT" + }, + "node_modules/@nestjs/platform-express/node_modules/raw-body": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.1.tgz", + "integrity": "sha512-qqJBtEyVgS0ZmPGdCFPWJ3FreoqvG4MVQln/kCgF7Olq95IbOp0/BWyMwbdtn4VTvkM8Y7khCQ2Xgk/tcrCXig==", + "license": "MIT", + "dependencies": { + "bytes": "3.1.2", + "http-errors": "2.0.0", + "iconv-lite": "0.4.24", + "unpipe": "1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/@nestjs/platform-express/node_modules/send": { + "version": "0.18.0", + "resolved": "https://registry.npmjs.org/send/-/send-0.18.0.tgz", + "integrity": "sha512-qqWzuOjSFOuqPjFe4NOsMLafToQQwBSOEpS+FwEt3A2V3vKubTquT3vmLTQpFgMXp8AlFWFuP1qKaJZOtPpVXg==", + "license": "MIT", + "dependencies": { + "debug": "2.6.9", + "depd": "2.0.0", + "destroy": "1.2.0", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "etag": "~1.8.1", + "fresh": "0.5.2", + "http-errors": "2.0.0", + "mime": "1.6.0", + "ms": "2.1.3", + "on-finished": "2.4.1", + "range-parser": "~1.2.1", + "statuses": "2.0.1" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/@nestjs/platform-express/node_modules/serve-static": { + "version": "1.15.0", + "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.15.0.tgz", + "integrity": "sha512-XGuRDNjXUijsUL0vl6nSD7cwURuzEgglbOaFuZM9g3kwDXOWVTck0jLzjPzGD+TazWbboZYu52/9/XPdUgne9g==", + "license": "MIT", + "dependencies": { + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "parseurl": "~1.3.3", + "send": "0.18.0" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/@nestjs/platform-express/node_modules/statuses": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", + "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==", + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/@nestjs/platform-express/node_modules/tslib": { + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz", + "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==", + "license": "0BSD" + }, + "node_modules/@nestjs/schedule": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/@nestjs/schedule/-/schedule-6.0.1.tgz", + "integrity": "sha512-v3yO6cSPAoBSSyH67HWnXHzuhPhSNZhRmLY38JvCt2sqY8sPMOODpcU1D79iUMFf7k16DaMEbL4Mgx61ZhiC8Q==", + "license": "MIT", + "dependencies": { + "cron": "4.3.3" + }, + "peerDependencies": { + "@nestjs/common": "^10.0.0 || ^11.0.0", + "@nestjs/core": "^10.0.0 || ^11.0.0" + } + }, + "node_modules/@nestjs/schematics": { + "version": "10.1.1", + "resolved": "https://registry.npmjs.org/@nestjs/schematics/-/schematics-10.1.1.tgz", + "integrity": "sha512-o4lfCnEeIkfJhGBbLZxTuVWcGuqDCFwg5OrvpgRUBM7vI/vONvKKiB5riVNpO+JqXoH0I42NNeDb0m4V5RREig==", + "license": "MIT", + "dependencies": { + "@angular-devkit/core": "17.1.2", + "@angular-devkit/schematics": "17.1.2", + "comment-json": "4.2.3", + "jsonc-parser": "3.2.1", + "pluralize": "8.0.0" + }, + "peerDependencies": { + "typescript": ">=4.8.2" + } + }, + "node_modules/@nestjs/schematics/node_modules/jsonc-parser": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/jsonc-parser/-/jsonc-parser-3.2.1.tgz", + "integrity": "sha512-AilxAyFOAcK5wA1+LeaySVBrHsGQvUFCDWXKpZjzaL0PqW+xfBOttn8GNtWKFWqneyMZj41MWF9Kl6iPWLwgOA==", + "license": "MIT" + }, + "node_modules/@nestjs/swagger": { + "version": "7.4.2", + "resolved": "https://registry.npmjs.org/@nestjs/swagger/-/swagger-7.4.2.tgz", + "integrity": "sha512-Mu6TEn1M/owIvAx2B4DUQObQXqo2028R2s9rSZ/hJEgBK95+doTwS0DjmVA2wTeZTyVtXOoN7CsoM5pONBzvKQ==", + "license": "MIT", + "dependencies": { + "@microsoft/tsdoc": "^0.15.0", + "@nestjs/mapped-types": "2.0.5", + "js-yaml": "4.1.0", + "lodash": "4.17.21", + "path-to-regexp": "3.3.0", + "swagger-ui-dist": "5.17.14" + }, + "peerDependencies": { + "@fastify/static": "^6.0.0 || ^7.0.0", + "@nestjs/common": "^9.0.0 || ^10.0.0", + "@nestjs/core": "^9.0.0 || ^10.0.0", + "class-transformer": "*", + "class-validator": "*", + "reflect-metadata": "^0.1.12 || ^0.2.0" + }, + "peerDependenciesMeta": { + "@fastify/static": { + "optional": true + }, + "class-transformer": { + "optional": true + }, + "class-validator": { + "optional": true + } + } + }, + "node_modules/@nestjs/swagger/node_modules/path-to-regexp": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-3.3.0.tgz", + "integrity": "sha512-qyCH421YQPS2WFDxDjftfc1ZR5WKQzVzqsp4n9M2kQhVOo/ByahFoUNJfl58kOcEGfQ//7weFTDhm+ss8Ecxgw==", + "license": "MIT" + }, + "node_modules/@nestjs/testing": { + "version": "10.3.3", + "resolved": "https://registry.npmjs.org/@nestjs/testing/-/testing-10.3.3.tgz", + "integrity": "sha512-kX20GfjAImL5grd/i69uD/x7sc00BaqGcP2dRG3ilqshQUuy5DOmspLCr3a2C8xmVU7kzK4spT0oTxhe6WcCAA==", + "dev": true, + "license": "MIT", + "dependencies": { + "tslib": "2.6.2" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/nest" + }, + "peerDependencies": { + "@nestjs/common": "^10.0.0", + "@nestjs/core": "^10.0.0", + "@nestjs/microservices": "^10.0.0", + "@nestjs/platform-express": "^10.0.0" + }, + "peerDependenciesMeta": { + "@nestjs/microservices": { + "optional": true + }, + "@nestjs/platform-express": { + "optional": true + } + } + }, + "node_modules/@nestjs/testing/node_modules/tslib": { + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz", + "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==", + "dev": true, + "license": "0BSD" + }, + "node_modules/@nestjs/typeorm": { + "version": "11.0.0", + "resolved": "https://registry.npmjs.org/@nestjs/typeorm/-/typeorm-11.0.0.tgz", + "integrity": "sha512-SOeUQl70Lb2OfhGkvnh4KXWlsd+zA08RuuQgT7kKbzivngxzSo1Oc7Usu5VxCxACQC9wc2l9esOHILSJeK7rJA==", + "license": "MIT", + "peerDependencies": { + "@nestjs/common": "^10.0.0 || ^11.0.0", + "@nestjs/core": "^10.0.0 || ^11.0.0", + "reflect-metadata": "^0.1.13 || ^0.2.0", + "rxjs": "^7.2.0", + "typeorm": "^0.3.0" + } + }, + "node_modules/@noble/ciphers": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/@noble/ciphers/-/ciphers-1.3.0.tgz", + "integrity": "sha512-2I0gnIVPtfnMw9ee9h1dJG7tp81+8Ob3OJb3Mv37rx5L40/b0i7djjCVvGOVqc9AEIQyvyu1i6ypKdFw8R8gQw==", + "license": "MIT", + "engines": { + "node": "^14.21.3 || >=16" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + } + }, + "node_modules/@noble/curves": { + "version": "1.9.7", + "resolved": "https://registry.npmjs.org/@noble/curves/-/curves-1.9.7.tgz", + "integrity": "sha512-gbKGcRUYIjA3/zCCNaWDciTMFI0dCkvou3TL8Zmy5Nc7sJ47a0jtOeZoTaMxkuqRo9cRhjOdZJXegxYE5FN/xw==", + "license": "MIT", + "dependencies": { + "@noble/hashes": "1.8.0" + }, + "engines": { + "node": "^14.21.3 || >=16" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + } + }, + "node_modules/@noble/hashes": { + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.8.0.tgz", + "integrity": "sha512-jCs9ldd7NwzpgXDIf6P3+NrHh9/sD6CQdxHyjQI+h/6rDNo88ypBxxz45UDuZHz9r3tNz7N/VInSVoVdtXEI4A==", + "license": "MIT", + "engines": { + "node": "^14.21.3 || >=16" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + } + }, + "node_modules/@noble/secp256k1": { + "version": "1.7.1", + "resolved": "https://registry.npmjs.org/@noble/secp256k1/-/secp256k1-1.7.1.tgz", + "integrity": "sha512-hOUk6AyBFmqVrv7k5WAw/LpszxVbj9gGN4JRkIX52fdFAj1UA61KXmZDvqVEm+pOyec3+fIeZB02LYa/pWOArw==", + "dev": true, + "funding": [ + { + "type": "individual", + "url": "https://paulmillr.com/funding/" + } + ], + "license": "MIT" + }, + "node_modules/@nodelib/fs.scandir": { + "version": "2.1.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", + "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", + "license": "MIT", + "dependencies": { + "@nodelib/fs.stat": "2.0.5", + "run-parallel": "^1.1.9" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@nodelib/fs.stat": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", + "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", + "license": "MIT", + "engines": { + "node": ">= 8" + } + }, + "node_modules/@nodelib/fs.walk": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", + "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", + "license": "MIT", + "dependencies": { + "@nodelib/fs.scandir": "2.1.5", + "fastq": "^1.6.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@nomicfoundation/edr": { + "version": "0.12.0-next.21", + "resolved": "https://registry.npmjs.org/@nomicfoundation/edr/-/edr-0.12.0-next.21.tgz", + "integrity": "sha512-j4DXqk/b2T1DK3L/YOZtTjwXqr/as4n+eKulu3KGVxyzOv2plZqTv9WpepQSejc0298tk/DBdMVwqzU3sd8CAA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@nomicfoundation/edr-darwin-arm64": "0.12.0-next.21", + "@nomicfoundation/edr-darwin-x64": "0.12.0-next.21", + "@nomicfoundation/edr-linux-arm64-gnu": "0.12.0-next.21", + "@nomicfoundation/edr-linux-arm64-musl": "0.12.0-next.21", + "@nomicfoundation/edr-linux-x64-gnu": "0.12.0-next.21", + "@nomicfoundation/edr-linux-x64-musl": "0.12.0-next.21", + "@nomicfoundation/edr-win32-x64-msvc": "0.12.0-next.21" + }, + "engines": { + "node": ">= 20" + } + }, + "node_modules/@nomicfoundation/edr-darwin-arm64": { + "version": "0.12.0-next.21", + "resolved": "https://registry.npmjs.org/@nomicfoundation/edr-darwin-arm64/-/edr-darwin-arm64-0.12.0-next.21.tgz", + "integrity": "sha512-WUBBIlhW9UcYhEKlpuG+A/9gQsTciWID+shi2p5iYzArIZAHssyuUGOZF+z5/KQTyAC+GRQd/2YvCQacNnpOIg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 20" + } + }, + "node_modules/@nomicfoundation/edr-darwin-x64": { + "version": "0.12.0-next.21", + "resolved": "https://registry.npmjs.org/@nomicfoundation/edr-darwin-x64/-/edr-darwin-x64-0.12.0-next.21.tgz", + "integrity": "sha512-DOLp9TS3pRxX5OVqH2SMv/hLmo2XZcciO+PLaoXcJGMTmUqDJbc1kOS7+e/kvf+f12e2Y4b/wPQGXKGRgcx61w==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 20" + } + }, + "node_modules/@nomicfoundation/edr-linux-arm64-gnu": { + "version": "0.12.0-next.21", + "resolved": "https://registry.npmjs.org/@nomicfoundation/edr-linux-arm64-gnu/-/edr-linux-arm64-gnu-0.12.0-next.21.tgz", + "integrity": "sha512-yYLkOFA9Y51TdHrZIFM6rLzArw/iEQuIGwNnTRUXVBO1bNyKVxfaO7qg4WuRSNWKuZAtMawilcjoyHNuxzm/oQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 20" + } + }, + "node_modules/@nomicfoundation/edr-linux-arm64-musl": { + "version": "0.12.0-next.21", + "resolved": "https://registry.npmjs.org/@nomicfoundation/edr-linux-arm64-musl/-/edr-linux-arm64-musl-0.12.0-next.21.tgz", + "integrity": "sha512-/L2hJYoUSHG9RTZRfOfYfsEBo1I30EQt3M+kWTDCS09jITnotWbqS9H/qbjd8u+8/xBBtAxNFhBgrIYu0GESSw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 20" + } + }, + "node_modules/@nomicfoundation/edr-linux-x64-gnu": { + "version": "0.12.0-next.21", + "resolved": "https://registry.npmjs.org/@nomicfoundation/edr-linux-x64-gnu/-/edr-linux-x64-gnu-0.12.0-next.21.tgz", + "integrity": "sha512-m5mjLjGbmiRwnv2UX48olr6NxTewt73i3f6pgqpTcQKgHxGWVvEHqDbhdhP2H8Qf31cyya/Qv9p6XQziPfjMYg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 20" + } + }, + "node_modules/@nomicfoundation/edr-linux-x64-musl": { + "version": "0.12.0-next.21", + "resolved": "https://registry.npmjs.org/@nomicfoundation/edr-linux-x64-musl/-/edr-linux-x64-musl-0.12.0-next.21.tgz", + "integrity": "sha512-FRGJwIPBC0UAtoWHd97bQ3OQwngp3vA4EjwZQqiicCapKoiI9BPt4+eyiZq2eq/K0+I0rHs25hw+dzU0QZL1xg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 20" + } + }, + "node_modules/@nomicfoundation/edr-win32-x64-msvc": { + "version": "0.12.0-next.21", + "resolved": "https://registry.npmjs.org/@nomicfoundation/edr-win32-x64-msvc/-/edr-win32-x64-msvc-0.12.0-next.21.tgz", + "integrity": "sha512-rpH/iKqn0Dvbnj+o5tv3CtDNAsA9AnBNHNmEHoJPNnB5rhR7Zw1vVg2MaE1vzCvIONQGKGkArqC+dA7ftsOcpA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 20" + } + }, + "node_modules/@nomicfoundation/hardhat-chai-matchers": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/@nomicfoundation/hardhat-chai-matchers/-/hardhat-chai-matchers-1.0.6.tgz", + "integrity": "sha512-f5ZMNmabZeZegEfuxn/0kW+mm7+yV7VNDxLpMOMGXWFJ2l/Ct3QShujzDRF9cOkK9Ui/hbDeOWGZqyQALDXVCQ==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "@ethersproject/abi": "^5.1.2", + "@types/chai-as-promised": "^7.1.3", + "chai-as-promised": "^7.1.1", + "deep-eql": "^4.0.1", + "ordinal": "^1.0.3" + }, + "peerDependencies": { + "@nomiclabs/hardhat-ethers": "^2.0.0", + "chai": "^4.2.0", + "ethers": "^5.0.0", + "hardhat": "^2.9.4" + } + }, + "node_modules/@nomicfoundation/hardhat-network-helpers": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@nomicfoundation/hardhat-network-helpers/-/hardhat-network-helpers-1.1.0.tgz", + "integrity": "sha512-ZS+NulZuR99NUHt2VwcgZvgeD6Y63qrbORNRuKO+lTowJxNVsrJ0zbRx1j5De6G3dOno5pVGvuYSq2QVG0qCYg==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "ethereumjs-util": "^7.1.4" + }, + "peerDependencies": { + "hardhat": "^2.26.0" + } + }, + "node_modules/@nomicfoundation/hardhat-toolbox": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/@nomicfoundation/hardhat-toolbox/-/hardhat-toolbox-2.0.2.tgz", + "integrity": "sha512-vnN1AzxbvpSx9pfdRHbUzTRIXpMLPXnUlkW855VaDk6N1pwRaQ2gNzEmFAABk4lWf11E00PKwFd/q27HuwYrYg==", + "dev": true, + "license": "MIT", + "peerDependencies": { + "@ethersproject/abi": "^5.4.7", + "@ethersproject/providers": "^5.4.7", + "@nomicfoundation/hardhat-chai-matchers": "^1.0.0", + "@nomicfoundation/hardhat-network-helpers": "^1.0.0", + "@nomiclabs/hardhat-ethers": "^2.0.0", + "@nomiclabs/hardhat-etherscan": "^3.0.0", + "@typechain/ethers-v5": "^10.1.0", + "@typechain/hardhat": "^6.1.2", + "@types/chai": "^4.2.0", + "@types/mocha": ">=9.1.0", + "@types/node": ">=12.0.0", + "chai": "^4.2.0", + "ethers": "^5.4.7", + "hardhat": "^2.11.0", + "hardhat-gas-reporter": "^1.0.8", + "solidity-coverage": "^0.8.1", + "ts-node": ">=8.0.0", + "typechain": "^8.1.0", + "typescript": ">=4.5.0" + } + }, + "node_modules/@nomicfoundation/slang": { + "version": "0.18.3", + "resolved": "https://registry.npmjs.org/@nomicfoundation/slang/-/slang-0.18.3.tgz", + "integrity": "sha512-YqAWgckqbHM0/CZxi9Nlf4hjk9wUNLC9ngWCWBiqMxPIZmzsVKYuChdlrfeBPQyvQQBoOhbx+7C1005kLVQDZQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@bytecodealliance/preview2-shim": "0.17.0" + } + }, + "node_modules/@nomicfoundation/solidity-analyzer": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/@nomicfoundation/solidity-analyzer/-/solidity-analyzer-0.1.2.tgz", + "integrity": "sha512-q4n32/FNKIhQ3zQGGw5CvPF6GTvDCpYwIf7bEY/dZTZbgfDsHyjJwURxUJf3VQuuJj+fDIFl4+KkBVbw4Ef6jA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 12" + }, + "optionalDependencies": { + "@nomicfoundation/solidity-analyzer-darwin-arm64": "0.1.2", + "@nomicfoundation/solidity-analyzer-darwin-x64": "0.1.2", + "@nomicfoundation/solidity-analyzer-linux-arm64-gnu": "0.1.2", + "@nomicfoundation/solidity-analyzer-linux-arm64-musl": "0.1.2", + "@nomicfoundation/solidity-analyzer-linux-x64-gnu": "0.1.2", + "@nomicfoundation/solidity-analyzer-linux-x64-musl": "0.1.2", + "@nomicfoundation/solidity-analyzer-win32-x64-msvc": "0.1.2" + } + }, + "node_modules/@nomicfoundation/solidity-analyzer-darwin-arm64": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/@nomicfoundation/solidity-analyzer-darwin-arm64/-/solidity-analyzer-darwin-arm64-0.1.2.tgz", + "integrity": "sha512-JaqcWPDZENCvm++lFFGjrDd8mxtf+CtLd2MiXvMNTBD33dContTZ9TWETwNFwg7JTJT5Q9HEecH7FA+HTSsIUw==", + "dev": true, + "license": "MIT", + "optional": true, + "engines": { + "node": ">= 12" + } + }, + "node_modules/@nomicfoundation/solidity-analyzer-darwin-x64": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/@nomicfoundation/solidity-analyzer-darwin-x64/-/solidity-analyzer-darwin-x64-0.1.2.tgz", + "integrity": "sha512-fZNmVztrSXC03e9RONBT+CiksSeYcxI1wlzqyr0L7hsQlK1fzV+f04g2JtQ1c/Fe74ZwdV6aQBdd6Uwl1052sw==", + "dev": true, + "license": "MIT", + "optional": true, + "engines": { + "node": ">= 12" + } + }, + "node_modules/@nomicfoundation/solidity-analyzer-linux-arm64-gnu": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/@nomicfoundation/solidity-analyzer-linux-arm64-gnu/-/solidity-analyzer-linux-arm64-gnu-0.1.2.tgz", + "integrity": "sha512-3d54oc+9ZVBuB6nbp8wHylk4xh0N0Gc+bk+/uJae+rUgbOBwQSfuGIbAZt1wBXs5REkSmynEGcqx6DutoK0tPA==", + "dev": true, + "license": "MIT", + "optional": true, + "engines": { + "node": ">= 12" + } + }, + "node_modules/@nomicfoundation/solidity-analyzer-linux-arm64-musl": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/@nomicfoundation/solidity-analyzer-linux-arm64-musl/-/solidity-analyzer-linux-arm64-musl-0.1.2.tgz", + "integrity": "sha512-iDJfR2qf55vgsg7BtJa7iPiFAsYf2d0Tv/0B+vhtnI16+wfQeTbP7teookbGvAo0eJo7aLLm0xfS/GTkvHIucA==", + "dev": true, + "license": "MIT", + "optional": true, + "engines": { + "node": ">= 12" + } + }, + "node_modules/@nomicfoundation/solidity-analyzer-linux-x64-gnu": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/@nomicfoundation/solidity-analyzer-linux-x64-gnu/-/solidity-analyzer-linux-x64-gnu-0.1.2.tgz", + "integrity": "sha512-9dlHMAt5/2cpWyuJ9fQNOUXFB/vgSFORg1jpjX1Mh9hJ/MfZXlDdHQ+DpFCs32Zk5pxRBb07yGvSHk9/fezL+g==", + "dev": true, + "license": "MIT", + "optional": true, + "engines": { + "node": ">= 12" + } + }, + "node_modules/@nomicfoundation/solidity-analyzer-linux-x64-musl": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/@nomicfoundation/solidity-analyzer-linux-x64-musl/-/solidity-analyzer-linux-x64-musl-0.1.2.tgz", + "integrity": "sha512-GzzVeeJob3lfrSlDKQw2bRJ8rBf6mEYaWY+gW0JnTDHINA0s2gPR4km5RLIj1xeZZOYz4zRw+AEeYgLRqB2NXg==", + "dev": true, + "license": "MIT", + "optional": true, + "engines": { + "node": ">= 12" + } + }, + "node_modules/@nomicfoundation/solidity-analyzer-win32-x64-msvc": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/@nomicfoundation/solidity-analyzer-win32-x64-msvc/-/solidity-analyzer-win32-x64-msvc-0.1.2.tgz", + "integrity": "sha512-Fdjli4DCcFHb4Zgsz0uEJXZ2K7VEO+w5KVv7HmT7WO10iODdU9csC2az4jrhEsRtiR9Gfd74FlG0NYlw1BMdyA==", + "dev": true, + "license": "MIT", + "optional": true, + "engines": { + "node": ">= 12" + } + }, + "node_modules/@nomiclabs/hardhat-ethers": { + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/@nomiclabs/hardhat-ethers/-/hardhat-ethers-2.2.3.tgz", + "integrity": "sha512-YhzPdzb612X591FOe68q+qXVXGG2ANZRvDo0RRUtimev85rCrAlv/TLMEZw5c+kq9AbzocLTVX/h2jVIFPL9Xg==", + "dev": true, + "license": "MIT", + "peer": true, + "peerDependencies": { + "ethers": "^5.0.0", + "hardhat": "^2.0.0" + } + }, + "node_modules/@nomiclabs/hardhat-etherscan": { + "version": "3.1.8", + "resolved": "https://registry.npmjs.org/@nomiclabs/hardhat-etherscan/-/hardhat-etherscan-3.1.8.tgz", + "integrity": "sha512-v5F6IzQhrsjHh6kQz4uNrym49brK9K5bYCq2zQZ729RYRaifI9hHbtmK+KkIVevfhut7huQFEQ77JLRMAzWYjQ==", + "deprecated": "The @nomiclabs/hardhat-etherscan package is deprecated, please use @nomicfoundation/hardhat-verify instead", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "@ethersproject/abi": "^5.1.2", + "@ethersproject/address": "^5.0.2", + "cbor": "^8.1.0", + "chalk": "^2.4.2", + "debug": "^4.1.1", + "fs-extra": "^7.0.1", + "lodash": "^4.17.11", + "semver": "^6.3.0", + "table": "^6.8.0", + "undici": "^5.14.0" + }, + "peerDependencies": { + "hardhat": "^2.0.4" + } + }, + "node_modules/@nomiclabs/hardhat-etherscan/node_modules/ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, + "license": "MIT", + "dependencies": { + "color-convert": "^1.9.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/@nomiclabs/hardhat-etherscan/node_modules/chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/@nomiclabs/hardhat-etherscan/node_modules/color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "dev": true, + "license": "MIT", + "dependencies": { + "color-name": "1.1.3" + } + }, + "node_modules/@nomiclabs/hardhat-etherscan/node_modules/color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", + "dev": true, + "license": "MIT" + }, + "node_modules/@nomiclabs/hardhat-etherscan/node_modules/escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/@nomiclabs/hardhat-etherscan/node_modules/has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/@nomiclabs/hardhat-etherscan/node_modules/supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "license": "MIT", + "dependencies": { + "has-flag": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/@notabene/pii-sdk": { + "version": "1.17.1", + "resolved": "https://registry.npmjs.org/@notabene/pii-sdk/-/pii-sdk-1.17.1.tgz", + "integrity": "sha512-lCDPl58SQBAEihDIHtkghVH7fNOtdngDM9DJrDW+odEKAnB0+o6r5V+AeiNYIfRwkn8nXiCW7i3SsNMmLlj5Zw==", + "license": "MIT", + "dependencies": { + "@ethersproject/bytes": "5.7.0", + "@noble/curves": "^1.1.0", + "@stablelib/ed25519": "1.0.3", + "axios": "^1.6.0", + "axios-oauth-client": "^1.5.0", + "axios-token-interceptor": "^0.2.0", + "base64url": "3.0.1", + "bs58": "5.0.0", + "debug": "^4.3.4", + "did-jwt": "^7.0", + "dotenv": "^16.0.3", + "lodash": "^4.17.21", + "multibase": "4.0.6", + "multicodec": "3.2.1", + "node-fetch": "^3.3.1", + "tslib": "^2.5.0", + "uuid": "^9.0.0" + }, + "engines": { + "node": ">=14" + } + }, + "node_modules/@notabene/pii-sdk/node_modules/@ethersproject/bytes": { + "version": "5.7.0", + "resolved": "https://registry.npmjs.org/@ethersproject/bytes/-/bytes-5.7.0.tgz", + "integrity": "sha512-nsbxwgFXWh9NyYWo+U8atvmMsSdKJprTcICAkvbBffT75qDocbuggBU0SJiVK2MuTrp0q+xvLkTnGMPK1+uA9A==", + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "license": "MIT", + "dependencies": { + "@ethersproject/logger": "^5.7.0" + } + }, + "node_modules/@notabene/pii-sdk/node_modules/@noble/ciphers": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/@noble/ciphers/-/ciphers-0.4.1.tgz", + "integrity": "sha512-QCOA9cgf3Rc33owG0AYBB9wszz+Ul2kramWN8tXG44Gyciud/tbkEqvxRF/IpqQaBpRBNi9f4jdNxqB2CQCIXg==", + "license": "MIT", + "funding": { + "url": "https://paulmillr.com/funding/" + } + }, + "node_modules/@notabene/pii-sdk/node_modules/base-x": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/base-x/-/base-x-4.0.1.tgz", + "integrity": "sha512-uAZ8x6r6S3aUM9rbHGVOIsR15U/ZSc82b3ymnCPsT45Gk1DDvhDPdIgB5MrhirZWt+5K0EEPQH985kNqZgNPFw==", + "license": "MIT" + }, + "node_modules/@notabene/pii-sdk/node_modules/bs58": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/bs58/-/bs58-5.0.0.tgz", + "integrity": "sha512-r+ihvQJvahgYT50JD05dyJNKlmmSlMoOGwn1lCcEzanPglg7TxYjioQUYehQ9mAR/+hOSd2jRc/Z2y5UxBymvQ==", + "license": "MIT", + "dependencies": { + "base-x": "^4.0.0" + } + }, + "node_modules/@notabene/pii-sdk/node_modules/did-jwt": { + "version": "7.4.7", + "resolved": "https://registry.npmjs.org/did-jwt/-/did-jwt-7.4.7.tgz", + "integrity": "sha512-Apz7nIfIHSKWIMaEP5L/K8xkwByvjezjTG0xiqwKdnNj1x8M0+Yasury5Dm/KPltxi2PlGfRPf3IejRKZrT8mQ==", + "license": "Apache-2.0", + "dependencies": { + "@noble/ciphers": "^0.4.0", + "@noble/curves": "^1.0.0", + "@noble/hashes": "^1.3.0", + "@scure/base": "^1.1.3", + "canonicalize": "^2.0.0", + "did-resolver": "^4.1.0", + "multibase": "^4.0.6", + "multiformats": "^9.6.2", + "uint8arrays": "3.1.1" + } + }, + "node_modules/@notabene/pii-sdk/node_modules/multiformats": { + "version": "9.9.0", + "resolved": "https://registry.npmjs.org/multiformats/-/multiformats-9.9.0.tgz", + "integrity": "sha512-HoMUjhH9T8DDBNT+6xzkrd9ga/XiBI4xLr58LJACwK6G3HTOPeMz4nB4KJs33L2BelrIJa7P0VuNaVF3hMYfjg==", + "license": "(Apache-2.0 AND MIT)" + }, + "node_modules/@notabene/pii-sdk/node_modules/node-fetch": { + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-3.3.2.tgz", + "integrity": "sha512-dRB78srN/l6gqWulah9SrxeYnxeddIG30+GOqK/9OlLVyLg3HPnr6SqOWTWOXKRwC2eGYCkZ59NNuSgvSrpgOA==", + "license": "MIT", + "dependencies": { + "data-uri-to-buffer": "^4.0.0", + "fetch-blob": "^3.1.4", + "formdata-polyfill": "^4.0.10" + }, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/node-fetch" + } + }, + "node_modules/@nuxtjs/opencollective": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/@nuxtjs/opencollective/-/opencollective-0.3.2.tgz", + "integrity": "sha512-um0xL3fO7Mf4fDxcqx9KryrB7zgRM5JSlvGN5AGkP6JLM5XEKyjeAiPbNxdXVXQ16isuAhYpvP88NgL2BGd6aA==", + "license": "MIT", + "dependencies": { + "chalk": "^4.1.0", + "consola": "^2.15.0", + "node-fetch": "^2.6.1" + }, + "bin": { + "opencollective": "bin/opencollective.js" + }, + "engines": { + "node": ">=8.0.0", + "npm": ">=5.0.0" + } + }, + "node_modules/@onchain-id/solidity": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/@onchain-id/solidity/-/solidity-2.2.1.tgz", + "integrity": "sha512-B54InT8yi89qlh9UVCARcfdQLVDP7Lef87B/Ww2Wn19oyEbPmlWho2EK1sgnrt/8Q0fGX/7y5rDnx3HPy28NTA==", + "dev": true, + "license": "ISC" + }, + "node_modules/@opentelemetry/api": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/api/-/api-1.9.0.tgz", + "integrity": "sha512-3giAOQvZiH5F9bMlMiv8+GSPMeqg0dbaeo58/0SlA9sxSqZhnUtxzX9/2FzyhS9sWQf5S0GJE0AKBrFqjpeYcg==", + "license": "Apache-2.0", + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/@openzeppelin/contracts": { + "version": "4.9.6", + "resolved": "https://registry.npmjs.org/@openzeppelin/contracts/-/contracts-4.9.6.tgz", + "integrity": "sha512-xSmezSupL+y9VkHZJGDoCBpmnB2ogM13ccaYDWqJTfS3dbuHkgjuwDFUmaFauBCboQMGB/S5UqUl2y54X99BmA==", + "dev": true, + "license": "MIT" + }, + "node_modules/@openzeppelin/contracts-upgradeable": { + "version": "4.9.6", + "resolved": "https://registry.npmjs.org/@openzeppelin/contracts-upgradeable/-/contracts-upgradeable-4.9.6.tgz", + "integrity": "sha512-m4iHazOsOCv1DgM7eD7GupTJ+NFVujRZt1wzddDPSVGpWdKq1SKkla5htKG7+IS4d2XOCtzkUNwRZ7Vq5aEUMA==", + "dev": true, + "license": "MIT" + }, + "node_modules/@openzeppelin/defender-base-client": { + "version": "1.54.6", + "resolved": "https://registry.npmjs.org/@openzeppelin/defender-base-client/-/defender-base-client-1.54.6.tgz", + "integrity": "sha512-PTef+rMxkM5VQ7sLwLKSjp2DBakYQd661ZJiSRywx+q/nIpm3B/HYGcz5wPZCA5O/QcEP6TatXXDoeMwimbcnw==", + "deprecated": "This package has been deprecated and will no longer be maintained, please use @openzeppelin/defender-sdk package instead.", + "dev": true, + "license": "MIT", + "dependencies": { + "amazon-cognito-identity-js": "^6.0.1", + "async-retry": "^1.3.3", + "axios": "^1.4.0", + "lodash": "^4.17.19", + "node-fetch": "^2.6.0" + } + }, + "node_modules/@openzeppelin/hardhat-upgrades": { + "version": "1.28.0", + "resolved": "https://registry.npmjs.org/@openzeppelin/hardhat-upgrades/-/hardhat-upgrades-1.28.0.tgz", + "integrity": "sha512-7sb/Jf+X+uIufOBnmHR0FJVWuxEs2lpxjJnLNN6eCJCP8nD0v+Ot5lTOW2Qb/GFnh+fLvJtEkhkowz4ZQ57+zQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@openzeppelin/defender-base-client": "^1.46.0", + "@openzeppelin/platform-deploy-client": "^0.8.0", + "@openzeppelin/upgrades-core": "^1.27.0", + "chalk": "^4.1.0", + "debug": "^4.1.1", + "proper-lockfile": "^4.1.1" + }, + "bin": { + "migrate-oz-cli-project": "dist/scripts/migrate-oz-cli-project.js" + }, + "peerDependencies": { + "@nomiclabs/hardhat-ethers": "^2.0.0", + "@nomiclabs/hardhat-etherscan": "^3.1.0", + "ethers": "^5.0.5", + "hardhat": "^2.0.2" + }, + "peerDependenciesMeta": { + "@nomiclabs/harhdat-etherscan": { + "optional": true + } + } + }, + "node_modules/@openzeppelin/platform-deploy-client": { + "version": "0.8.0", + "resolved": "https://registry.npmjs.org/@openzeppelin/platform-deploy-client/-/platform-deploy-client-0.8.0.tgz", + "integrity": "sha512-POx3AsnKwKSV/ZLOU/gheksj0Lq7Is1q2F3pKmcFjGZiibf+4kjGxr4eSMrT+2qgKYZQH1ZLQZ+SkbguD8fTvA==", + "deprecated": "@openzeppelin/platform-deploy-client is deprecated. Please use @openzeppelin/defender-sdk-deploy-client", + "dev": true, + "license": "MIT", + "dependencies": { + "@ethersproject/abi": "^5.6.3", + "@openzeppelin/defender-base-client": "^1.46.0", + "axios": "^0.21.2", + "lodash": "^4.17.19", + "node-fetch": "^2.6.0" + } + }, + "node_modules/@openzeppelin/platform-deploy-client/node_modules/axios": { + "version": "0.21.4", + "resolved": "https://registry.npmjs.org/axios/-/axios-0.21.4.tgz", + "integrity": "sha512-ut5vewkiu8jjGBdqpM44XxjuCjq9LAKeHVmoVfHVzy8eHgxxq8SbAVQNovDA8mVi05kP0Ea/n/UzcSHcTJQfNg==", + "dev": true, + "license": "MIT", + "dependencies": { + "follow-redirects": "^1.14.0" + } + }, + "node_modules/@openzeppelin/upgrades-core": { + "version": "1.44.1", + "resolved": "https://registry.npmjs.org/@openzeppelin/upgrades-core/-/upgrades-core-1.44.1.tgz", + "integrity": "sha512-yqvDj7eC7m5kCDgqCxVFgk9sVo9SXP/fQFaExPousNfAJJbX+20l4fKZp17aXbNTpo1g+2205s6cR9VhFFOCaQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@nomicfoundation/slang": "^0.18.3", + "bignumber.js": "^9.1.2", + "cbor": "^10.0.0", + "chalk": "^4.1.0", + "compare-versions": "^6.0.0", + "debug": "^4.1.1", + "ethereumjs-util": "^7.0.3", + "minimatch": "^9.0.5", + "minimist": "^1.2.7", + "proper-lockfile": "^4.1.1", + "solidity-ast": "^0.4.60" + }, + "bin": { + "openzeppelin-upgrades-core": "dist/cli/cli.js" + } + }, + "node_modules/@openzeppelin/upgrades-core/node_modules/brace-expansion": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.2.tgz", + "integrity": "sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "node_modules/@openzeppelin/upgrades-core/node_modules/cbor": { + "version": "10.0.11", + "resolved": "https://registry.npmjs.org/cbor/-/cbor-10.0.11.tgz", + "integrity": "sha512-vIwORDd/WyB8Nc23o2zNN5RrtFGlR6Fca61TtjkUXueI3Jf2DOZDl1zsshvBntZ3wZHBM9ztjnkXSmzQDaq3WA==", + "dev": true, + "license": "MIT", + "dependencies": { + "nofilter": "^3.0.2" + }, + "engines": { + "node": ">=20" + } + }, + "node_modules/@openzeppelin/upgrades-core/node_modules/minimatch": { + "version": "9.0.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", + "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", + "dev": true, + "license": "ISC", + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/@paralleldrive/cuid2": { + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/@paralleldrive/cuid2/-/cuid2-2.2.2.tgz", + "integrity": "sha512-ZOBkgDwEdoYVlSeRbYYXs0S9MejQofiVYoTbKzy/6GQa39/q5tQU2IX46+shYnUkpEl3wc+J6wRlar7r2EK2xA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@noble/hashes": "^1.1.5" + } + }, + "node_modules/@phosphor-icons/react": { + "version": "2.0.9", + "resolved": "https://registry.npmjs.org/@phosphor-icons/react/-/react-2.0.9.tgz", + "integrity": "sha512-/dtQ0M9MXAr35wy8zPlwF684EvYRvGWZPAv+Bd0BR4vzIhjzfLBdHSovFxSP1rj3UOHvVR08qgRL04Kv90oqHA==", + "license": "MIT", + "engines": { + "node": ">=10" + }, + "peerDependencies": { + "react": ">= 16.8", + "react-dom": ">= 16.8" + } + }, + "node_modules/@pinojs/redact": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/@pinojs/redact/-/redact-0.4.0.tgz", + "integrity": "sha512-k2ENnmBugE/rzQfEcdWHcCY+/FM3VLzH9cYEsbdsoqrvzAKRhUZeRNhAZvB8OitQJ1TBed3yqWtdjzS6wJKBwg==", + "license": "MIT" + }, + "node_modules/@pkgjs/parseargs": { + "version": "0.11.0", + "resolved": "https://registry.npmjs.org/@pkgjs/parseargs/-/parseargs-0.11.0.tgz", + "integrity": "sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==", + "license": "MIT", + "optional": true, + "engines": { + "node": ">=14" + } + }, + "node_modules/@pkgr/core": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/@pkgr/core/-/core-0.1.2.tgz", + "integrity": "sha512-fdDH1LSGfZdTH2sxdpVMw31BanV28K/Gry0cVFxaNP77neJSkd82mM8ErPNYs9e+0O7SdHBLTDzDgwUuy18RnQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^12.20.0 || ^14.18.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/unts" + } + }, + "node_modules/@pnpm/config.env-replace": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@pnpm/config.env-replace/-/config.env-replace-1.1.0.tgz", + "integrity": "sha512-htyl8TWnKL7K/ESFa1oW2UB5lVDxuF5DpM7tBi6Hu2LNL3mWkIzNLG6N4zoCUP1lCKNxWy/3iu8mS8MvToGd6w==", + "license": "MIT", + "engines": { + "node": ">=12.22.0" + } + }, + "node_modules/@pnpm/network.ca-file": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@pnpm/network.ca-file/-/network.ca-file-1.0.2.tgz", + "integrity": "sha512-YcPQ8a0jwYU9bTdJDpXjMi7Brhkr1mXsXrUJvjqM2mQDgkRiz8jFaQGOdaLxgjtUfQgZhKy/O3cG/YwmgKaxLA==", + "license": "MIT", + "dependencies": { + "graceful-fs": "4.2.10" + }, + "engines": { + "node": ">=12.22.0" + } + }, + "node_modules/@pnpm/network.ca-file/node_modules/graceful-fs": { + "version": "4.2.10", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.10.tgz", + "integrity": "sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA==", + "license": "ISC" + }, + "node_modules/@pnpm/npm-conf": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/@pnpm/npm-conf/-/npm-conf-2.3.1.tgz", + "integrity": "sha512-c83qWb22rNRuB0UaVCI0uRPNRr8Z0FWnEIvT47jiHAmOIUHbBOg5XvV7pM5x+rKn9HRpjxquDbXYSXr3fAKFcw==", + "license": "MIT", + "dependencies": { + "@pnpm/config.env-replace": "^1.1.0", + "@pnpm/network.ca-file": "^1.0.1", + "config-chain": "^1.1.11" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/@polka/url": { + "version": "1.0.0-next.29", + "resolved": "https://registry.npmjs.org/@polka/url/-/url-1.0.0-next.29.tgz", + "integrity": "sha512-wwQAWhWSuHaag8c4q/KN/vCoeOJYshAIvMQwD4GpSb3OiZklFfvAgmj0VCBBImRpuF/aFgIRzllXlVX93Jevww==", + "license": "MIT" + }, + "node_modules/@popperjs/core": { + "version": "2.11.8", + "resolved": "https://registry.npmjs.org/@popperjs/core/-/core-2.11.8.tgz", + "integrity": "sha512-P1st0aksCrn9sGZhp8GMYwBnQsbvAWsZAX44oXNNvLHGqAOcoVxmjZiohstwQ7SqKnbR47akdNi+uleWD8+g6A==", + "license": "MIT", + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/popperjs" + } + }, + "node_modules/@prettier/sync": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/@prettier/sync/-/sync-0.3.0.tgz", + "integrity": "sha512-3dcmCyAxIcxy036h1I7MQU/uEEBq8oLwf1CE3xeze+MPlgkdlb/+w6rGR/1dhp6Hqi17fRS6nvwnOzkESxEkOw==", + "dev": true, + "license": "MIT", + "funding": { + "url": "https://github.com/prettier/prettier-synchronized?sponsor=1" + }, + "peerDependencies": { + "prettier": "^3.0.0" + } + }, + "node_modules/@primitivefi/hardhat-dodoc": { + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/@primitivefi/hardhat-dodoc/-/hardhat-dodoc-0.2.3.tgz", + "integrity": "sha512-ver9uHa79LTDTeebOKZ/eOVRL/FP1k0s0x/5Bo/8ZaDdLWFVClKqZyZYVjjW4CJqTPCt8uU9b9p71P2vzH4O9A==", + "dev": true, + "license": "MIT", + "dependencies": { + "squirrelly": "^8.0.8" + }, + "peerDependencies": { + "hardhat": "^2.6.4", + "squirrelly": "^8.0.8" + } + }, + "node_modules/@protobufjs/aspromise": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@protobufjs/aspromise/-/aspromise-1.1.2.tgz", + "integrity": "sha512-j+gKExEuLmKwvz3OgROXtrJ2UG2x8Ch2YZUxahh+s1F2HZ+wAceUNLkvy6zKCPVRkU++ZWQrdxsUeQXmcg4uoQ==", + "license": "BSD-3-Clause" + }, + "node_modules/@protobufjs/base64": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@protobufjs/base64/-/base64-1.1.2.tgz", + "integrity": "sha512-AZkcAA5vnN/v4PDqKyMR5lx7hZttPDgClv83E//FMNhR2TMcLUhfRUBHCmSl0oi9zMgDDqRUJkSxO3wm85+XLg==", + "license": "BSD-3-Clause" + }, + "node_modules/@protobufjs/codegen": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/@protobufjs/codegen/-/codegen-2.0.4.tgz", + "integrity": "sha512-YyFaikqM5sH0ziFZCN3xDC7zeGaB/d0IUb9CATugHWbd1FRFwWwt4ld4OYMPWu5a3Xe01mGAULCdqhMlPl29Jg==", + "license": "BSD-3-Clause" + }, + "node_modules/@protobufjs/eventemitter": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@protobufjs/eventemitter/-/eventemitter-1.1.0.tgz", + "integrity": "sha512-j9ednRT81vYJ9OfVuXG6ERSTdEL1xVsNgqpkxMsbIabzSo3goCjDIveeGv5d03om39ML71RdmrGNjG5SReBP/Q==", + "license": "BSD-3-Clause" + }, + "node_modules/@protobufjs/fetch": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@protobufjs/fetch/-/fetch-1.1.0.tgz", + "integrity": "sha512-lljVXpqXebpsijW71PZaCYeIcE5on1w5DlQy5WH6GLbFryLUrBD4932W/E2BSpfRJWseIL4v/KPgBFxDOIdKpQ==", + "license": "BSD-3-Clause", + "dependencies": { + "@protobufjs/aspromise": "^1.1.1", + "@protobufjs/inquire": "^1.1.0" + } + }, + "node_modules/@protobufjs/float": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@protobufjs/float/-/float-1.0.2.tgz", + "integrity": "sha512-Ddb+kVXlXst9d+R9PfTIxh1EdNkgoRe5tOX6t01f1lYWOvJnSPDBlG241QLzcyPdoNTsblLUdujGSE4RzrTZGQ==", + "license": "BSD-3-Clause" + }, + "node_modules/@protobufjs/inquire": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@protobufjs/inquire/-/inquire-1.1.0.tgz", + "integrity": "sha512-kdSefcPdruJiFMVSbn801t4vFK7KB/5gd2fYvrxhuJYg8ILrmn9SKSX2tZdV6V+ksulWqS7aXjBcRXl3wHoD9Q==", + "license": "BSD-3-Clause" + }, + "node_modules/@protobufjs/path": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@protobufjs/path/-/path-1.1.2.tgz", + "integrity": "sha512-6JOcJ5Tm08dOHAbdR3GrvP+yUUfkjG5ePsHYczMFLq3ZmMkAD98cDgcT2iA1lJ9NVwFd4tH/iSSoe44YWkltEA==", + "license": "BSD-3-Clause" + }, + "node_modules/@protobufjs/pool": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@protobufjs/pool/-/pool-1.1.0.tgz", + "integrity": "sha512-0kELaGSIDBKvcgS4zkjz1PeddatrjYcmMWOlAuAPwAeccUrPHdUqo/J6LiymHHEiJT5NrF1UVwxY14f+fy4WQw==", + "license": "BSD-3-Clause" + }, + "node_modules/@protobufjs/utf8": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@protobufjs/utf8/-/utf8-1.1.0.tgz", + "integrity": "sha512-Vvn3zZrhQZkkBE8LSuW3em98c0FwgO4nxzv6OdSxPKJIEKY2bGbHn+mhGIPerzI4twdxaP8/0+06HBpwf345Lw==", + "license": "BSD-3-Clause" + }, + "node_modules/@react-native/assets-registry": { + "version": "0.81.4", + "resolved": "https://registry.npmjs.org/@react-native/assets-registry/-/assets-registry-0.81.4.tgz", + "integrity": "sha512-AMcDadefBIjD10BRqkWw+W/VdvXEomR6aEZ0fhQRAv7igrBzb4PTn4vHKYg+sUK0e3wa74kcMy2DLc/HtnGcMA==", + "license": "MIT", + "engines": { + "node": ">= 20.19.4" + } + }, + "node_modules/@react-native/codegen": { + "version": "0.81.4", + "resolved": "https://registry.npmjs.org/@react-native/codegen/-/codegen-0.81.4.tgz", + "integrity": "sha512-LWTGUTzFu+qOQnvkzBP52B90Ym3stZT8IFCzzUrppz8Iwglg83FCtDZAR4yLHI29VY/x/+pkcWAMCl3739XHdw==", + "license": "MIT", + "dependencies": { + "@babel/core": "^7.25.2", + "@babel/parser": "^7.25.3", + "glob": "^7.1.1", + "hermes-parser": "0.29.1", + "invariant": "^2.2.4", + "nullthrows": "^1.1.1", + "yargs": "^17.6.2" + }, + "engines": { + "node": ">= 20.19.4" + }, + "peerDependencies": { + "@babel/core": "*" + } + }, + "node_modules/@react-native/codegen/node_modules/glob": { + "version": "7.2.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", + "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", + "deprecated": "Glob versions prior to v9 are no longer supported", + "license": "ISC", + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.1.1", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/@react-native/community-cli-plugin": { + "version": "0.81.4", + "resolved": "https://registry.npmjs.org/@react-native/community-cli-plugin/-/community-cli-plugin-0.81.4.tgz", + "integrity": "sha512-8mpnvfcLcnVh+t1ok6V9eozWo8Ut+TZhz8ylJ6gF9d6q9EGDQX6s8jenan5Yv/pzN4vQEKI4ib2pTf/FELw+SA==", + "license": "MIT", + "dependencies": { + "@react-native/dev-middleware": "0.81.4", + "debug": "^4.4.0", + "invariant": "^2.2.4", + "metro": "^0.83.1", + "metro-config": "^0.83.1", + "metro-core": "^0.83.1", + "semver": "^7.1.3" + }, + "engines": { + "node": ">= 20.19.4" + }, + "peerDependencies": { + "@react-native-community/cli": "*", + "@react-native/metro-config": "*" + }, + "peerDependenciesMeta": { + "@react-native-community/cli": { + "optional": true + }, + "@react-native/metro-config": { + "optional": true + } + } + }, + "node_modules/@react-native/community-cli-plugin/node_modules/semver": { + "version": "7.7.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.2.tgz", + "integrity": "sha512-RF0Fw+rO5AMf9MAyaRXI4AV0Ulj5lMHqVxxdSgiVbixSCXoEmmX/jk0CuJw4+3SqroYO9VoUh+HcuJivvtJemA==", + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@react-native/debugger-frontend": { + "version": "0.81.4", + "resolved": "https://registry.npmjs.org/@react-native/debugger-frontend/-/debugger-frontend-0.81.4.tgz", + "integrity": "sha512-SU05w1wD0nKdQFcuNC9D6De0ITnINCi8MEnx9RsTD2e4wN83ukoC7FpXaPCYyP6+VjFt5tUKDPgP1O7iaNXCqg==", + "license": "BSD-3-Clause", + "engines": { + "node": ">= 20.19.4" + } + }, + "node_modules/@react-native/debugger-shell": { + "version": "0.83.1", + "resolved": "https://registry.npmjs.org/@react-native/debugger-shell/-/debugger-shell-0.83.1.tgz", + "integrity": "sha512-d+0w446Hxth5OP/cBHSSxOEpbj13p2zToUy6e5e3tTERNJ8ueGlW7iGwGTrSymNDgXXFjErX+dY4P4/3WokPIQ==", + "license": "MIT", + "peer": true, + "dependencies": { + "cross-spawn": "^7.0.6", + "fb-dotslash": "0.5.8" + }, + "engines": { + "node": ">= 20.19.4" + } + }, + "node_modules/@react-native/dev-middleware": { + "version": "0.81.4", + "resolved": "https://registry.npmjs.org/@react-native/dev-middleware/-/dev-middleware-0.81.4.tgz", + "integrity": "sha512-hu1Wu5R28FT7nHXs2wWXvQ++7W7zq5GPY83llajgPlYKznyPLAY/7bArc5rAzNB7b0kwnlaoPQKlvD/VP9LZug==", + "license": "MIT", + "dependencies": { + "@isaacs/ttlcache": "^1.4.1", + "@react-native/debugger-frontend": "0.81.4", + "chrome-launcher": "^0.15.2", + "chromium-edge-launcher": "^0.2.0", + "connect": "^3.6.5", + "debug": "^4.4.0", + "invariant": "^2.2.4", + "nullthrows": "^1.1.1", + "open": "^7.0.3", + "serve-static": "^1.16.2", + "ws": "^6.2.3" + }, + "engines": { + "node": ">= 20.19.4" + } + }, + "node_modules/@react-native/dev-middleware/node_modules/fresh": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", + "integrity": "sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/@react-native/dev-middleware/node_modules/mime": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", + "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==", + "license": "MIT", + "bin": { + "mime": "cli.js" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/@react-native/dev-middleware/node_modules/send": { + "version": "0.19.0", + "resolved": "https://registry.npmjs.org/send/-/send-0.19.0.tgz", + "integrity": "sha512-dW41u5VfLXu8SJh5bwRmyYUbAoSB3c9uQh6L8h/KtsFREPWpbX1lrljJo186Jc4nmci/sGUZ9a0a0J2zgfq2hw==", + "license": "MIT", + "dependencies": { + "debug": "2.6.9", + "depd": "2.0.0", + "destroy": "1.2.0", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "etag": "~1.8.1", + "fresh": "0.5.2", + "http-errors": "2.0.0", + "mime": "1.6.0", + "ms": "2.1.3", + "on-finished": "2.4.1", + "range-parser": "~1.2.1", + "statuses": "2.0.1" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/@react-native/dev-middleware/node_modules/send/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "license": "MIT", + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/@react-native/dev-middleware/node_modules/send/node_modules/debug/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "license": "MIT" + }, + "node_modules/@react-native/dev-middleware/node_modules/send/node_modules/encodeurl": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", + "integrity": "sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==", + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/@react-native/dev-middleware/node_modules/serve-static": { + "version": "1.16.2", + "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.16.2.tgz", + "integrity": "sha512-VqpjJZKadQB/PEbEwvFdO43Ax5dFBZ2UECszz8bQ7pi7wt//PWe1P6MN7eCnjsatYtBT6EuiClbjSWP2WrIoTw==", + "license": "MIT", + "dependencies": { + "encodeurl": "~2.0.0", + "escape-html": "~1.0.3", + "parseurl": "~1.3.3", + "send": "0.19.0" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/@react-native/dev-middleware/node_modules/statuses": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", + "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==", + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/@react-native/dev-middleware/node_modules/ws": { + "version": "6.2.3", + "resolved": "https://registry.npmjs.org/ws/-/ws-6.2.3.tgz", + "integrity": "sha512-jmTjYU0j60B+vHey6TfR3Z7RD61z/hmxBS3VMSGIrroOWXQEneK1zNuotOUrGyBHQj0yrpsLHPWtigEFd13ndA==", + "license": "MIT", + "dependencies": { + "async-limiter": "~1.0.0" + } + }, + "node_modules/@react-native/gradle-plugin": { + "version": "0.81.4", + "resolved": "https://registry.npmjs.org/@react-native/gradle-plugin/-/gradle-plugin-0.81.4.tgz", + "integrity": "sha512-T7fPcQvDDCSusZFVSg6H1oVDKb/NnVYLnsqkcHsAF2C2KGXyo3J7slH/tJAwNfj/7EOA2OgcWxfC1frgn9TQvw==", + "license": "MIT", + "engines": { + "node": ">= 20.19.4" + } + }, + "node_modules/@react-native/js-polyfills": { + "version": "0.81.4", + "resolved": "https://registry.npmjs.org/@react-native/js-polyfills/-/js-polyfills-0.81.4.tgz", + "integrity": "sha512-sr42FaypKXJHMVHhgSbu2f/ZJfrLzgaoQ+HdpRvKEiEh2mhFf6XzZwecyLBvWqf2pMPZa+CpPfNPiejXjKEy8w==", + "license": "MIT", + "engines": { + "node": ">= 20.19.4" + } + }, + "node_modules/@react-native/normalize-colors": { + "version": "0.81.4", + "resolved": "https://registry.npmjs.org/@react-native/normalize-colors/-/normalize-colors-0.81.4.tgz", + "integrity": "sha512-9nRRHO1H+tcFqjb9gAM105Urtgcanbta2tuqCVY0NATHeFPDEAB7gPyiLxCHKMi1NbhP6TH0kxgSWXKZl1cyRg==", + "license": "MIT" + }, + "node_modules/@remix-run/router": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/@remix-run/router/-/router-1.5.0.tgz", + "integrity": "sha512-bkUDCp8o1MvFO+qxkODcbhSqRa6P2GXgrGZVpt0dCXNW2HCSCqYI0ZoAqEOSAjRWmmlKcYgFvN4B4S+zo/f8kg==", + "license": "MIT", + "engines": { + "node": ">=14" + } + }, + "node_modules/@rolldown/pluginutils": { + "version": "1.0.0-beta.27", + "resolved": "https://registry.npmjs.org/@rolldown/pluginutils/-/pluginutils-1.0.0-beta.27.tgz", + "integrity": "sha512-+d0F4MKMCbeVUJwG96uQ4SgAznZNSq93I3V+9NHA4OpvqG8mRCpGdKmK8l/dl02h2CCDHwW2FqilnTyDcAnqjA==", + "dev": true, + "license": "MIT" + }, + "node_modules/@rollup/plugin-commonjs": { + "version": "28.0.6", + "resolved": "https://registry.npmjs.org/@rollup/plugin-commonjs/-/plugin-commonjs-28.0.6.tgz", + "integrity": "sha512-XSQB1K7FUU5QP+3lOQmVCE3I0FcbbNvmNT4VJSj93iUjayaARrTQeoRdiYQoftAJBLrR9t2agwAd3ekaTgHNlw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@rollup/pluginutils": "^5.0.1", + "commondir": "^1.0.1", + "estree-walker": "^2.0.2", + "fdir": "^6.2.0", + "is-reference": "1.2.1", + "magic-string": "^0.30.3", + "picomatch": "^4.0.2" + }, + "engines": { + "node": ">=16.0.0 || 14 >= 14.17" + }, + "peerDependencies": { + "rollup": "^2.68.0||^3.0.0||^4.0.0" + }, + "peerDependenciesMeta": { + "rollup": { + "optional": true + } + } + }, + "node_modules/@rollup/plugin-commonjs/node_modules/picomatch": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.3.tgz", + "integrity": "sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/@rollup/plugin-inject": { + "version": "5.0.5", + "resolved": "https://registry.npmjs.org/@rollup/plugin-inject/-/plugin-inject-5.0.5.tgz", + "integrity": "sha512-2+DEJbNBoPROPkgTDNe8/1YXWcqxbN5DTjASVIOx8HS+pITXushyNiBV56RB08zuptzz8gT3YfkqriTBVycepg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@rollup/pluginutils": "^5.0.1", + "estree-walker": "^2.0.2", + "magic-string": "^0.30.3" + }, + "engines": { + "node": ">=14.0.0" + }, + "peerDependencies": { + "rollup": "^1.20.0||^2.0.0||^3.0.0||^4.0.0" + }, + "peerDependenciesMeta": { + "rollup": { + "optional": true + } + } + }, + "node_modules/@rollup/pluginutils": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/@rollup/pluginutils/-/pluginutils-5.3.0.tgz", + "integrity": "sha512-5EdhGZtnu3V88ces7s53hhfK5KSASnJZv8Lulpc04cWO3REESroJXg73DFsOmgbU2BhwV0E20bu2IDZb3VKW4Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/estree": "^1.0.0", + "estree-walker": "^2.0.2", + "picomatch": "^4.0.2" + }, + "engines": { + "node": ">=14.0.0" + }, + "peerDependencies": { + "rollup": "^1.20.0||^2.0.0||^3.0.0||^4.0.0" + }, + "peerDependenciesMeta": { + "rollup": { + "optional": true + } + } + }, + "node_modules/@rollup/pluginutils/node_modules/picomatch": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.3.tgz", + "integrity": "sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/@rollup/rollup-android-arm-eabi": { + "version": "4.52.3", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.52.3.tgz", + "integrity": "sha512-h6cqHGZ6VdnwliFG1NXvMPTy/9PS3h8oLh7ImwR+kl+oYnQizgjxsONmmPSb2C66RksfkfIxEVtDSEcJiO0tqw==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ] + }, + "node_modules/@rollup/rollup-android-arm64": { + "version": "4.52.3", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.52.3.tgz", + "integrity": "sha512-wd+u7SLT/u6knklV/ifG7gr5Qy4GUbH2hMWcDauPFJzmCZUAJ8L2bTkVXC2niOIxp8lk3iH/QX8kSrUxVZrOVw==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ] + }, + "node_modules/@rollup/rollup-darwin-arm64": { + "version": "4.52.3", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.52.3.tgz", + "integrity": "sha512-lj9ViATR1SsqycwFkJCtYfQTheBdvlWJqzqxwc9f2qrcVrQaF/gCuBRTiTolkRWS6KvNxSk4KHZWG7tDktLgjg==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/@rollup/rollup-darwin-x64": { + "version": "4.52.3", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.52.3.tgz", + "integrity": "sha512-+Dyo7O1KUmIsbzx1l+4V4tvEVnVQqMOIYtrxK7ncLSknl1xnMHLgn7gddJVrYPNZfEB8CIi3hK8gq8bDhb3h5A==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/@rollup/rollup-freebsd-arm64": { + "version": "4.52.3", + "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-arm64/-/rollup-freebsd-arm64-4.52.3.tgz", + "integrity": "sha512-u9Xg2FavYbD30g3DSfNhxgNrxhi6xVG4Y6i9Ur1C7xUuGDW3banRbXj+qgnIrwRN4KeJ396jchwy9bCIzbyBEQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ] + }, + "node_modules/@rollup/rollup-freebsd-x64": { + "version": "4.52.3", + "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-x64/-/rollup-freebsd-x64-4.52.3.tgz", + "integrity": "sha512-5M8kyi/OX96wtD5qJR89a/3x5x8x5inXBZO04JWhkQb2JWavOWfjgkdvUqibGJeNNaz1/Z1PPza5/tAPXICI6A==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ] + }, + "node_modules/@rollup/rollup-linux-arm-gnueabihf": { + "version": "4.52.3", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.52.3.tgz", + "integrity": "sha512-IoerZJ4l1wRMopEHRKOO16e04iXRDyZFZnNZKrWeNquh5d6bucjezgd+OxG03mOMTnS1x7hilzb3uURPkJ0OfA==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-arm-musleabihf": { + "version": "4.52.3", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.52.3.tgz", + "integrity": "sha512-ZYdtqgHTDfvrJHSh3W22TvjWxwOgc3ThK/XjgcNGP2DIwFIPeAPNsQxrJO5XqleSlgDux2VAoWQ5iJrtaC1TbA==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-arm64-gnu": { + "version": "4.52.3", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.52.3.tgz", + "integrity": "sha512-NcViG7A0YtuFDA6xWSgmFb6iPFzHlf5vcqb2p0lGEbT+gjrEEz8nC/EeDHvx6mnGXnGCC1SeVV+8u+smj0CeGQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-arm64-musl": { + "version": "4.52.3", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.52.3.tgz", + "integrity": "sha512-d3pY7LWno6SYNXRm6Ebsq0DJGoiLXTb83AIPCXl9fmtIQs/rXoS8SJxxUNtFbJ5MiOvs+7y34np77+9l4nfFMw==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-loong64-gnu": { + "version": "4.52.3", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loong64-gnu/-/rollup-linux-loong64-gnu-4.52.3.tgz", + "integrity": "sha512-3y5GA0JkBuirLqmjwAKwB0keDlI6JfGYduMlJD/Rl7fvb4Ni8iKdQs1eiunMZJhwDWdCvrcqXRY++VEBbvk6Eg==", + "cpu": [ + "loong64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-ppc64-gnu": { + "version": "4.52.3", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-ppc64-gnu/-/rollup-linux-ppc64-gnu-4.52.3.tgz", + "integrity": "sha512-AUUH65a0p3Q0Yfm5oD2KVgzTKgwPyp9DSXc3UA7DtxhEb/WSPfbG4wqXeSN62OG5gSo18em4xv6dbfcUGXcagw==", + "cpu": [ + "ppc64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-riscv64-gnu": { + "version": "4.52.3", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.52.3.tgz", + "integrity": "sha512-1makPhFFVBqZE+XFg3Dkq+IkQ7JvmUrwwqaYBL2CE+ZpxPaqkGaiWFEWVGyvTwZace6WLJHwjVh/+CXbKDGPmg==", + "cpu": [ + "riscv64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-riscv64-musl": { + "version": "4.52.3", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-musl/-/rollup-linux-riscv64-musl-4.52.3.tgz", + "integrity": "sha512-OOFJa28dxfl8kLOPMUOQBCO6z3X2SAfzIE276fwT52uXDWUS178KWq0pL7d6p1kz7pkzA0yQwtqL0dEPoVcRWg==", + "cpu": [ + "riscv64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-s390x-gnu": { + "version": "4.52.3", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.52.3.tgz", + "integrity": "sha512-jMdsML2VI5l+V7cKfZx3ak+SLlJ8fKvLJ0Eoa4b9/vCUrzXKgoKxvHqvJ/mkWhFiyp88nCkM5S2v6nIwRtPcgg==", + "cpu": [ + "s390x" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-x64-gnu": { + "version": "4.52.3", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.52.3.tgz", + "integrity": "sha512-tPgGd6bY2M2LJTA1uGq8fkSPK8ZLYjDjY+ZLK9WHncCnfIz29LIXIqUgzCR0hIefzy6Hpbe8Th5WOSwTM8E7LA==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-x64-musl": { + "version": "4.52.3", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.52.3.tgz", + "integrity": "sha512-BCFkJjgk+WFzP+tcSMXq77ymAPIxsX9lFJWs+2JzuZTLtksJ2o5hvgTdIcZ5+oKzUDMwI0PfWzRBYAydAHF2Mw==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-openharmony-arm64": { + "version": "4.52.3", + "resolved": "https://registry.npmjs.org/@rollup/rollup-openharmony-arm64/-/rollup-openharmony-arm64-4.52.3.tgz", + "integrity": "sha512-KTD/EqjZF3yvRaWUJdD1cW+IQBk4fbQaHYJUmP8N4XoKFZilVL8cobFSTDnjTtxWJQ3JYaMgF4nObY/+nYkumA==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "openharmony" + ] + }, + "node_modules/@rollup/rollup-win32-arm64-msvc": { + "version": "4.52.3", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.52.3.tgz", + "integrity": "sha512-+zteHZdoUYLkyYKObGHieibUFLbttX2r+58l27XZauq0tcWYYuKUwY2wjeCN9oK1Um2YgH2ibd6cnX/wFD7DuA==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@rollup/rollup-win32-ia32-msvc": { + "version": "4.52.3", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.52.3.tgz", + "integrity": "sha512-of1iHkTQSo3kr6dTIRX6t81uj/c/b15HXVsPcEElN5sS859qHrOepM5p9G41Hah+CTqSh2r8Bm56dL2z9UQQ7g==", + "cpu": [ + "ia32" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@rollup/rollup-win32-x64-gnu": { + "version": "4.52.3", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-gnu/-/rollup-win32-x64-gnu-4.52.3.tgz", + "integrity": "sha512-s0hybmlHb56mWVZQj8ra9048/WZTPLILKxcvcq+8awSZmyiSUZjjem1AhU3Tf4ZKpYhK4mg36HtHDOe8QJS5PQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@rollup/rollup-win32-x64-msvc": { + "version": "4.52.3", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.52.3.tgz", + "integrity": "sha512-zGIbEVVXVtauFgl3MRwGWEN36P5ZGenHRMgNw88X5wEhEBpq0XrMEZwOn07+ICrwM17XO5xfMZqh0OldCH5VTA==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@rtsao/scc": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@rtsao/scc/-/scc-1.1.0.tgz", + "integrity": "sha512-zt6OdqaDoOnJ1ZYsCYGt9YmWzDXl4vQdKTyJev62gFhRGKdx7mcT54V9KIjg+d2wi9EXsPvAPKe7i7WjfVWB8g==", + "dev": true, + "license": "MIT" + }, + "node_modules/@scure/base": { + "version": "1.2.6", + "resolved": "https://registry.npmjs.org/@scure/base/-/base-1.2.6.tgz", + "integrity": "sha512-g/nm5FgUa//MCj1gV09zTJTaM6KBAHqLN907YVQqf7zC49+DcO4B1so4ZX07Ef10Twr6nuqYEH9GEggFXA4Fmg==", + "license": "MIT", + "funding": { + "url": "https://paulmillr.com/funding/" + } + }, + "node_modules/@scure/bip32": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/@scure/bip32/-/bip32-1.4.0.tgz", + "integrity": "sha512-sVUpc0Vq3tXCkDGYVWGIZTRfnvu8LoTDaev7vbwh0omSvVORONr960MQWdKqJDCReIEmTj3PAr73O3aoxz7OPg==", + "license": "MIT", + "dependencies": { + "@noble/curves": "~1.4.0", + "@noble/hashes": "~1.4.0", + "@scure/base": "~1.1.6" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + } + }, + "node_modules/@scure/bip32/node_modules/@noble/curves": { + "version": "1.4.2", + "resolved": "https://registry.npmjs.org/@noble/curves/-/curves-1.4.2.tgz", + "integrity": "sha512-TavHr8qycMChk8UwMld0ZDRvatedkzWfH8IiaeGCfymOP5i0hSCozz9vHOL0nkwk7HRMlFnAiKpS2jrUmSybcw==", + "license": "MIT", + "dependencies": { + "@noble/hashes": "1.4.0" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + } + }, + "node_modules/@scure/bip32/node_modules/@noble/hashes": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.4.0.tgz", + "integrity": "sha512-V1JJ1WTRUqHHrOSh597hURcMqVKVGL/ea3kv0gSnEdsEZ0/+VyPghM1lMNGc00z7CIQorSvbKpuJkxvuHbvdbg==", + "license": "MIT", + "engines": { + "node": ">= 16" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + } + }, + "node_modules/@scure/bip32/node_modules/@scure/base": { + "version": "1.1.9", + "resolved": "https://registry.npmjs.org/@scure/base/-/base-1.1.9.tgz", + "integrity": "sha512-8YKhl8GHiNI/pU2VMaofa2Tor7PJRAjwQLBBuilkJ9L5+13yVbC7JO/wS7piioAvPSwR3JKM1IJ/u4xQzbcXKg==", + "license": "MIT", + "funding": { + "url": "https://paulmillr.com/funding/" + } + }, + "node_modules/@scure/bip39": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/@scure/bip39/-/bip39-1.3.0.tgz", + "integrity": "sha512-disdg7gHuTDZtY+ZdkmLpPCk7fxZSu3gBiEGuoC1XYxv9cGx3Z6cpTggCgW6odSOOIXCiDjuGejW+aJKCY/pIQ==", + "license": "MIT", + "dependencies": { + "@noble/hashes": "~1.4.0", + "@scure/base": "~1.1.6" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + } + }, + "node_modules/@scure/bip39/node_modules/@noble/hashes": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.4.0.tgz", + "integrity": "sha512-V1JJ1WTRUqHHrOSh597hURcMqVKVGL/ea3kv0gSnEdsEZ0/+VyPghM1lMNGc00z7CIQorSvbKpuJkxvuHbvdbg==", + "license": "MIT", + "engines": { + "node": ">= 16" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + } + }, + "node_modules/@scure/bip39/node_modules/@scure/base": { + "version": "1.1.9", + "resolved": "https://registry.npmjs.org/@scure/base/-/base-1.1.9.tgz", + "integrity": "sha512-8YKhl8GHiNI/pU2VMaofa2Tor7PJRAjwQLBBuilkJ9L5+13yVbC7JO/wS7piioAvPSwR3JKM1IJ/u4xQzbcXKg==", + "license": "MIT", + "funding": { + "url": "https://paulmillr.com/funding/" + } + }, + "node_modules/@sentry/core": { + "version": "5.30.0", + "resolved": "https://registry.npmjs.org/@sentry/core/-/core-5.30.0.tgz", + "integrity": "sha512-TmfrII8w1PQZSZgPpUESqjB+jC6MvZJZdLtE/0hZ+SrnKhW3x5WlYLvTXZpcWePYBku7rl2wn1RZu6uT0qCTeg==", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "@sentry/hub": "5.30.0", + "@sentry/minimal": "5.30.0", + "@sentry/types": "5.30.0", + "@sentry/utils": "5.30.0", + "tslib": "^1.9.3" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/@sentry/core/node_modules/tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", + "dev": true, + "license": "0BSD" + }, + "node_modules/@sentry/hub": { + "version": "5.30.0", + "resolved": "https://registry.npmjs.org/@sentry/hub/-/hub-5.30.0.tgz", + "integrity": "sha512-2tYrGnzb1gKz2EkMDQcfLrDTvmGcQPuWxLnJKXJvYTQDGLlEvi2tWz1VIHjunmOvJrB5aIQLhm+dcMRwFZDCqQ==", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "@sentry/types": "5.30.0", + "@sentry/utils": "5.30.0", + "tslib": "^1.9.3" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/@sentry/hub/node_modules/tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", + "dev": true, + "license": "0BSD" + }, + "node_modules/@sentry/minimal": { + "version": "5.30.0", + "resolved": "https://registry.npmjs.org/@sentry/minimal/-/minimal-5.30.0.tgz", + "integrity": "sha512-BwWb/owZKtkDX+Sc4zCSTNcvZUq7YcH3uAVlmh/gtR9rmUvbzAA3ewLuB3myi4wWRAMEtny6+J/FN/x+2wn9Xw==", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "@sentry/hub": "5.30.0", + "@sentry/types": "5.30.0", + "tslib": "^1.9.3" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/@sentry/minimal/node_modules/tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", + "dev": true, + "license": "0BSD" + }, + "node_modules/@sentry/node": { + "version": "5.30.0", + "resolved": "https://registry.npmjs.org/@sentry/node/-/node-5.30.0.tgz", + "integrity": "sha512-Br5oyVBF0fZo6ZS9bxbJZG4ApAjRqAnqFFurMVJJdunNb80brh7a5Qva2kjhm+U6r9NJAB5OmDyPkA1Qnt+QVg==", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "@sentry/core": "5.30.0", + "@sentry/hub": "5.30.0", + "@sentry/tracing": "5.30.0", + "@sentry/types": "5.30.0", + "@sentry/utils": "5.30.0", + "cookie": "^0.4.1", + "https-proxy-agent": "^5.0.0", + "lru_map": "^0.3.3", + "tslib": "^1.9.3" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/@sentry/node/node_modules/cookie": { + "version": "0.4.2", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.4.2.tgz", + "integrity": "sha512-aSWTXFzaKWkvHO1Ny/s+ePFpvKsPnjc551iI41v3ny/ow6tBG5Vd+FuqGNhh1LxOmVzOlGUriIlOaokOvhaStA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/@sentry/node/node_modules/tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", + "dev": true, + "license": "0BSD" + }, + "node_modules/@sentry/tracing": { + "version": "5.30.0", + "resolved": "https://registry.npmjs.org/@sentry/tracing/-/tracing-5.30.0.tgz", + "integrity": "sha512-dUFowCr0AIMwiLD7Fs314Mdzcug+gBVo/+NCMyDw8tFxJkwWAKl7Qa2OZxLQ0ZHjakcj1hNKfCQJ9rhyfOl4Aw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@sentry/hub": "5.30.0", + "@sentry/minimal": "5.30.0", + "@sentry/types": "5.30.0", + "@sentry/utils": "5.30.0", + "tslib": "^1.9.3" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/@sentry/tracing/node_modules/tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", + "dev": true, + "license": "0BSD" + }, + "node_modules/@sentry/types": { + "version": "5.30.0", + "resolved": "https://registry.npmjs.org/@sentry/types/-/types-5.30.0.tgz", + "integrity": "sha512-R8xOqlSTZ+htqrfteCWU5Nk0CDN5ApUTvrlvBuiH1DyP6czDZ4ktbZB0hAgBlVcK0U+qpD3ag3Tqqpa5Q67rPw==", + "dev": true, + "license": "BSD-3-Clause", + "engines": { + "node": ">=6" + } + }, + "node_modules/@sentry/utils": { + "version": "5.30.0", + "resolved": "https://registry.npmjs.org/@sentry/utils/-/utils-5.30.0.tgz", + "integrity": "sha512-zaYmoH0NWWtvnJjC9/CBseXMtKHm/tm40sz3YfJRxeQjyzRqNQPgivpd9R/oDJCYj999mzdW382p/qi2ypjLww==", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "@sentry/types": "5.30.0", + "tslib": "^1.9.3" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/@sentry/utils/node_modules/tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", + "dev": true, + "license": "0BSD" + }, + "node_modules/@sideway/address": { + "version": "4.1.5", + "resolved": "https://registry.npmjs.org/@sideway/address/-/address-4.1.5.tgz", + "integrity": "sha512-IqO/DUQHUkPeixNQ8n0JA6102hT9CmaljNTPmQ1u8MEhBo/R4Q8eKLN/vGZxuebwOroDB4cbpjheD4+/sKFK4Q==", + "license": "BSD-3-Clause", + "dependencies": { + "@hapi/hoek": "^9.0.0" + } + }, + "node_modules/@sideway/formula": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/@sideway/formula/-/formula-3.0.1.tgz", + "integrity": "sha512-/poHZJJVjx3L+zVD6g9KgHfYnb443oi7wLu/XKojDviHy6HOEOA6z1Trk5aR1dGcmPenJEgb2sK2I80LeS3MIg==", + "license": "BSD-3-Clause" + }, + "node_modules/@sideway/pinpoint": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@sideway/pinpoint/-/pinpoint-2.0.0.tgz", + "integrity": "sha512-RNiOoTPkptFtSVzQevY/yWtZwf/RxyVnPy/OcA9HBM3MlGDnBEYL5B41H0MTn0Uec8Hi+2qUtTfG2WWZBmMejQ==", + "license": "BSD-3-Clause" + }, + "node_modules/@sinclair/typebox": { + "version": "0.27.8", + "resolved": "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.27.8.tgz", + "integrity": "sha512-+Fj43pSMwJs4KRrH/938Uf+uAELIgVBmQzg/q1YG10djyfA3TnrU8N8XzqCh/okZdszqBQTZf96idMfE5lnwTA==", + "license": "MIT" + }, + "node_modules/@sindresorhus/is": { + "version": "5.6.0", + "resolved": "https://registry.npmjs.org/@sindresorhus/is/-/is-5.6.0.tgz", + "integrity": "sha512-TV7t8GKYaJWsn00tFDqBw8+Uqmr8A0fRU1tvTQhyZzGv0sJCGRQL3JGMI3ucuKo3XIZdUP+Lx7/gh2t3lewy7g==", + "license": "MIT", + "engines": { + "node": ">=14.16" + }, + "funding": { + "url": "https://github.com/sindresorhus/is?sponsor=1" + } + }, + "node_modules/@sinonjs/commons": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/@sinonjs/commons/-/commons-3.0.1.tgz", + "integrity": "sha512-K3mCHKQ9sVh8o1C9cxkwxaOmXoAMlDxC1mYyHrjqOWEcBjYr76t96zL2zlj5dUGZ3HSw240X1qgH3Mjf1yJWpQ==", + "license": "BSD-3-Clause", + "dependencies": { + "type-detect": "4.0.8" + } + }, + "node_modules/@sinonjs/fake-timers": { + "version": "10.3.0", + "resolved": "https://registry.npmjs.org/@sinonjs/fake-timers/-/fake-timers-10.3.0.tgz", + "integrity": "sha512-V4BG07kuYSUkTCSBHG8G8TNhM+F19jXFWnQtzj+we8DrkpSBCee9Z3Ms8yiGer/dlmhe35/Xdgyo3/0rQKg7YA==", + "license": "BSD-3-Clause", + "dependencies": { + "@sinonjs/commons": "^3.0.0" + } + }, + "node_modules/@slorber/remark-comment": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@slorber/remark-comment/-/remark-comment-1.0.0.tgz", + "integrity": "sha512-RCE24n7jsOj1M0UPvIQCHTe7fI0sFL4S2nwKVWwHyVr/wI/H8GosgsJGyhnsZoGFnD/P2hLf1mSbrrgSLN93NA==", + "license": "MIT", + "dependencies": { + "micromark-factory-space": "^1.0.0", + "micromark-util-character": "^1.1.0", + "micromark-util-symbol": "^1.0.1" + } + }, + "node_modules/@smithy/abort-controller": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@smithy/abort-controller/-/abort-controller-4.2.0.tgz", + "integrity": "sha512-PLUYa+SUKOEZtXFURBu/CNxlsxfaFGxSBPcStL13KpVeVWIfdezWyDqkz7iDLmwnxojXD0s5KzuB5HGHvt4Aeg==", + "license": "Apache-2.0", + "dependencies": { + "@smithy/types": "^4.6.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@smithy/config-resolver": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/@smithy/config-resolver/-/config-resolver-4.3.0.tgz", + "integrity": "sha512-9oH+n8AVNiLPK/iK/agOsoWfrKZ3FGP3502tkksd6SRsKMYiu7AFX0YXo6YBADdsAj7C+G/aLKdsafIJHxuCkQ==", + "license": "Apache-2.0", + "dependencies": { + "@smithy/node-config-provider": "^4.3.0", + "@smithy/types": "^4.6.0", + "@smithy/util-config-provider": "^4.2.0", + "@smithy/util-middleware": "^4.2.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@smithy/core": { + "version": "3.14.0", + "resolved": "https://registry.npmjs.org/@smithy/core/-/core-3.14.0.tgz", + "integrity": "sha512-XJ4z5FxvY/t0Dibms/+gLJrI5niRoY0BCmE02fwmPcRYFPI4KI876xaE79YGWIKnEslMbuQPsIEsoU/DXa0DoA==", + "license": "Apache-2.0", + "dependencies": { + "@smithy/middleware-serde": "^4.2.0", + "@smithy/protocol-http": "^5.3.0", + "@smithy/types": "^4.6.0", + "@smithy/util-base64": "^4.2.0", + "@smithy/util-body-length-browser": "^4.2.0", + "@smithy/util-middleware": "^4.2.0", + "@smithy/util-stream": "^4.4.0", + "@smithy/util-utf8": "^4.2.0", + "@smithy/uuid": "^1.1.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@smithy/credential-provider-imds": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@smithy/credential-provider-imds/-/credential-provider-imds-4.2.0.tgz", + "integrity": "sha512-SOhFVvFH4D5HJZytb0bLKxCrSnwcqPiNlrw+S4ZXjMnsC+o9JcUQzbZOEQcA8yv9wJFNhfsUiIUKiEnYL68Big==", + "license": "Apache-2.0", + "dependencies": { + "@smithy/node-config-provider": "^4.3.0", + "@smithy/property-provider": "^4.2.0", + "@smithy/types": "^4.6.0", + "@smithy/url-parser": "^4.2.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@smithy/fetch-http-handler": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/@smithy/fetch-http-handler/-/fetch-http-handler-5.3.0.tgz", + "integrity": "sha512-BG3KSmsx9A//KyIfw+sqNmWFr1YBUr+TwpxFT7yPqAk0yyDh7oSNgzfNH7pS6OC099EGx2ltOULvumCFe8bcgw==", + "license": "Apache-2.0", + "dependencies": { + "@smithy/protocol-http": "^5.3.0", + "@smithy/querystring-builder": "^4.2.0", + "@smithy/types": "^4.6.0", + "@smithy/util-base64": "^4.2.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@smithy/hash-node": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@smithy/hash-node/-/hash-node-4.2.0.tgz", + "integrity": "sha512-ugv93gOhZGysTctZh9qdgng8B+xO0cj+zN0qAZ+Sgh7qTQGPOJbMdIuyP89KNfUyfAqFSNh5tMvC+h2uCpmTtA==", + "license": "Apache-2.0", + "dependencies": { + "@smithy/types": "^4.6.0", + "@smithy/util-buffer-from": "^4.2.0", + "@smithy/util-utf8": "^4.2.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@smithy/invalid-dependency": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@smithy/invalid-dependency/-/invalid-dependency-4.2.0.tgz", + "integrity": "sha512-ZmK5X5fUPAbtvRcUPtk28aqIClVhbfcmfoS4M7UQBTnDdrNxhsrxYVv0ZEl5NaPSyExsPWqL4GsPlRvtlwg+2A==", + "license": "Apache-2.0", + "dependencies": { + "@smithy/types": "^4.6.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@smithy/is-array-buffer": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@smithy/is-array-buffer/-/is-array-buffer-4.2.0.tgz", + "integrity": "sha512-DZZZBvC7sjcYh4MazJSGiWMI2L7E0oCiRHREDzIxi/M2LY79/21iXt6aPLHge82wi5LsuRF5A06Ds3+0mlh6CQ==", + "license": "Apache-2.0", + "dependencies": { + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@smithy/middleware-content-length": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@smithy/middleware-content-length/-/middleware-content-length-4.2.0.tgz", + "integrity": "sha512-6ZAnwrXFecrA4kIDOcz6aLBhU5ih2is2NdcZtobBDSdSHtE9a+MThB5uqyK4XXesdOCvOcbCm2IGB95birTSOQ==", + "license": "Apache-2.0", + "dependencies": { + "@smithy/protocol-http": "^5.3.0", + "@smithy/types": "^4.6.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@smithy/middleware-endpoint": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/@smithy/middleware-endpoint/-/middleware-endpoint-4.3.0.tgz", + "integrity": "sha512-jFVjuQeV8TkxaRlcCNg0GFVgg98tscsmIrIwRFeC74TIUyLE3jmY9xgc1WXrPQYRjQNK3aRoaIk6fhFRGOIoGw==", + "license": "Apache-2.0", + "dependencies": { + "@smithy/core": "^3.14.0", + "@smithy/middleware-serde": "^4.2.0", + "@smithy/node-config-provider": "^4.3.0", + "@smithy/shared-ini-file-loader": "^4.3.0", + "@smithy/types": "^4.6.0", + "@smithy/url-parser": "^4.2.0", + "@smithy/util-middleware": "^4.2.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@smithy/middleware-retry": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/@smithy/middleware-retry/-/middleware-retry-4.4.0.tgz", + "integrity": "sha512-yaVBR0vQnOnzex45zZ8ZrPzUnX73eUC8kVFaAAbn04+6V7lPtxn56vZEBBAhgS/eqD6Zm86o6sJs6FuQVoX5qg==", + "license": "Apache-2.0", + "dependencies": { + "@smithy/node-config-provider": "^4.3.0", + "@smithy/protocol-http": "^5.3.0", + "@smithy/service-error-classification": "^4.2.0", + "@smithy/smithy-client": "^4.7.0", + "@smithy/types": "^4.6.0", + "@smithy/util-middleware": "^4.2.0", + "@smithy/util-retry": "^4.2.0", + "@smithy/uuid": "^1.1.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@smithy/middleware-serde": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@smithy/middleware-serde/-/middleware-serde-4.2.0.tgz", + "integrity": "sha512-rpTQ7D65/EAbC6VydXlxjvbifTf4IH+sADKg6JmAvhkflJO2NvDeyU9qsWUNBelJiQFcXKejUHWRSdmpJmEmiw==", + "license": "Apache-2.0", + "dependencies": { + "@smithy/protocol-http": "^5.3.0", + "@smithy/types": "^4.6.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@smithy/middleware-stack": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@smithy/middleware-stack/-/middleware-stack-4.2.0.tgz", + "integrity": "sha512-G5CJ//eqRd9OARrQu9MK1H8fNm2sMtqFh6j8/rPozhEL+Dokpvi1Og+aCixTuwDAGZUkJPk6hJT5jchbk/WCyg==", + "license": "Apache-2.0", + "dependencies": { + "@smithy/types": "^4.6.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@smithy/node-config-provider": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/@smithy/node-config-provider/-/node-config-provider-4.3.0.tgz", + "integrity": "sha512-5QgHNuWdT9j9GwMPPJCKxy2KDxZ3E5l4M3/5TatSZrqYVoEiqQrDfAq8I6KWZw7RZOHtVtCzEPdYz7rHZixwcA==", + "license": "Apache-2.0", + "dependencies": { + "@smithy/property-provider": "^4.2.0", + "@smithy/shared-ini-file-loader": "^4.3.0", + "@smithy/types": "^4.6.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@smithy/node-http-handler": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/@smithy/node-http-handler/-/node-http-handler-4.3.0.tgz", + "integrity": "sha512-RHZ/uWCmSNZ8cneoWEVsVwMZBKy/8123hEpm57vgGXA3Irf/Ja4v9TVshHK2ML5/IqzAZn0WhINHOP9xl+Qy6Q==", + "license": "Apache-2.0", + "dependencies": { + "@smithy/abort-controller": "^4.2.0", + "@smithy/protocol-http": "^5.3.0", + "@smithy/querystring-builder": "^4.2.0", + "@smithy/types": "^4.6.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@smithy/property-provider": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@smithy/property-provider/-/property-provider-4.2.0.tgz", + "integrity": "sha512-rV6wFre0BU6n/tx2Ztn5LdvEdNZ2FasQbPQmDOPfV9QQyDmsCkOAB0osQjotRCQg+nSKFmINhyda0D3AnjSBJw==", + "license": "Apache-2.0", + "dependencies": { + "@smithy/types": "^4.6.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@smithy/protocol-http": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/@smithy/protocol-http/-/protocol-http-5.3.0.tgz", + "integrity": "sha512-6POSYlmDnsLKb7r1D3SVm7RaYW6H1vcNcTWGWrF7s9+2noNYvUsm7E4tz5ZQ9HXPmKn6Hb67pBDRIjrT4w/d7Q==", + "license": "Apache-2.0", + "dependencies": { + "@smithy/types": "^4.6.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@smithy/querystring-builder": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@smithy/querystring-builder/-/querystring-builder-4.2.0.tgz", + "integrity": "sha512-Q4oFD0ZmI8yJkiPPeGUITZj++4HHYCW3pYBYfIobUCkYpI6mbkzmG1MAQQ3lJYYWj3iNqfzOenUZu+jqdPQ16A==", + "license": "Apache-2.0", + "dependencies": { + "@smithy/types": "^4.6.0", + "@smithy/util-uri-escape": "^4.2.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@smithy/querystring-parser": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@smithy/querystring-parser/-/querystring-parser-4.2.0.tgz", + "integrity": "sha512-BjATSNNyvVbQxOOlKse0b0pSezTWGMvA87SvoFoFlkRsKXVsN3bEtjCxvsNXJXfnAzlWFPaT9DmhWy1vn0sNEA==", + "license": "Apache-2.0", + "dependencies": { + "@smithy/types": "^4.6.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@smithy/service-error-classification": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@smithy/service-error-classification/-/service-error-classification-4.2.0.tgz", + "integrity": "sha512-Ylv1ttUeKatpR0wEOMnHf1hXMktPUMObDClSWl2TpCVT4DwtJhCeighLzSLbgH3jr5pBNM0LDXT5yYxUvZ9WpA==", + "license": "Apache-2.0", + "dependencies": { + "@smithy/types": "^4.6.0" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@smithy/shared-ini-file-loader": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/@smithy/shared-ini-file-loader/-/shared-ini-file-loader-4.3.0.tgz", + "integrity": "sha512-VCUPPtNs+rKWlqqntX0CbVvWyjhmX30JCtzO+s5dlzzxrvSfRh5SY0yxnkirvc1c80vdKQttahL71a9EsdolSQ==", + "license": "Apache-2.0", + "dependencies": { + "@smithy/types": "^4.6.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@smithy/signature-v4": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/@smithy/signature-v4/-/signature-v4-5.3.0.tgz", + "integrity": "sha512-MKNyhXEs99xAZaFhm88h+3/V+tCRDQ+PrDzRqL0xdDpq4gjxcMmf5rBA3YXgqZqMZ/XwemZEurCBQMfxZOWq/g==", + "license": "Apache-2.0", + "dependencies": { + "@smithy/is-array-buffer": "^4.2.0", + "@smithy/protocol-http": "^5.3.0", + "@smithy/types": "^4.6.0", + "@smithy/util-hex-encoding": "^4.2.0", + "@smithy/util-middleware": "^4.2.0", + "@smithy/util-uri-escape": "^4.2.0", + "@smithy/util-utf8": "^4.2.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@smithy/smithy-client": { + "version": "4.7.0", + "resolved": "https://registry.npmjs.org/@smithy/smithy-client/-/smithy-client-4.7.0.tgz", + "integrity": "sha512-3BDx/aCCPf+kkinYf5QQhdQ9UAGihgOVqI3QO5xQfSaIWvUE4KYLtiGRWsNe1SR7ijXC0QEPqofVp5Sb0zC8xQ==", + "license": "Apache-2.0", + "dependencies": { + "@smithy/core": "^3.14.0", + "@smithy/middleware-endpoint": "^4.3.0", + "@smithy/middleware-stack": "^4.2.0", + "@smithy/protocol-http": "^5.3.0", + "@smithy/types": "^4.6.0", + "@smithy/util-stream": "^4.4.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@smithy/types": { + "version": "4.6.0", + "resolved": "https://registry.npmjs.org/@smithy/types/-/types-4.6.0.tgz", + "integrity": "sha512-4lI9C8NzRPOv66FaY1LL1O/0v0aLVrq/mXP/keUa9mJOApEeae43LsLd2kZRUJw91gxOQfLIrV3OvqPgWz1YsA==", + "license": "Apache-2.0", + "dependencies": { + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@smithy/url-parser": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@smithy/url-parser/-/url-parser-4.2.0.tgz", + "integrity": "sha512-AlBmD6Idav2ugmoAL6UtR6ItS7jU5h5RNqLMZC7QrLCoITA9NzIN3nx9GWi8g4z1pfWh2r9r96SX/jHiNwPJ9A==", + "license": "Apache-2.0", + "dependencies": { + "@smithy/querystring-parser": "^4.2.0", + "@smithy/types": "^4.6.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@smithy/util-base64": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@smithy/util-base64/-/util-base64-4.2.0.tgz", + "integrity": "sha512-+erInz8WDv5KPe7xCsJCp+1WCjSbah9gWcmUXc9NqmhyPx59tf7jqFz+za1tRG1Y5KM1Cy1rWCcGypylFp4mvA==", + "license": "Apache-2.0", + "dependencies": { + "@smithy/util-buffer-from": "^4.2.0", + "@smithy/util-utf8": "^4.2.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@smithy/util-body-length-browser": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@smithy/util-body-length-browser/-/util-body-length-browser-4.2.0.tgz", + "integrity": "sha512-Fkoh/I76szMKJnBXWPdFkQJl2r9SjPt3cMzLdOB6eJ4Pnpas8hVoWPYemX/peO0yrrvldgCUVJqOAjUrOLjbxg==", + "license": "Apache-2.0", + "dependencies": { + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@smithy/util-body-length-node": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@smithy/util-body-length-node/-/util-body-length-node-4.2.0.tgz", + "integrity": "sha512-U8q1WsSZFjXijlD7a4wsDQOvOwV+72iHSfq1q7VD+V75xP/pdtm0WIGuaFJ3gcADDOKj2MIBn4+zisi140HEnQ==", + "license": "Apache-2.0", + "dependencies": { + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@smithy/util-buffer-from": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@smithy/util-buffer-from/-/util-buffer-from-4.2.0.tgz", + "integrity": "sha512-kAY9hTKulTNevM2nlRtxAG2FQ3B2OR6QIrPY3zE5LqJy1oxzmgBGsHLWTcNhWXKchgA0WHW+mZkQrng/pgcCew==", + "license": "Apache-2.0", + "dependencies": { + "@smithy/is-array-buffer": "^4.2.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@smithy/util-config-provider": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@smithy/util-config-provider/-/util-config-provider-4.2.0.tgz", + "integrity": "sha512-YEjpl6XJ36FTKmD+kRJJWYvrHeUvm5ykaUS5xK+6oXffQPHeEM4/nXlZPe+Wu0lsgRUcNZiliYNh/y7q9c2y6Q==", + "license": "Apache-2.0", + "dependencies": { + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@smithy/util-defaults-mode-browser": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@smithy/util-defaults-mode-browser/-/util-defaults-mode-browser-4.2.0.tgz", + "integrity": "sha512-qzHp7ZDk1Ba4LDwQVCNp90xPGqSu7kmL7y5toBpccuhi3AH7dcVBIT/pUxYcInK4jOy6FikrcTGq5wxcka8UaQ==", + "license": "Apache-2.0", + "dependencies": { + "@smithy/property-provider": "^4.2.0", + "@smithy/smithy-client": "^4.7.0", + "@smithy/types": "^4.6.0", + "bowser": "^2.11.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@smithy/util-defaults-mode-node": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@smithy/util-defaults-mode-node/-/util-defaults-mode-node-4.2.0.tgz", + "integrity": "sha512-FxUHS3WXgx3bTWR6yQHNHHkQHZm/XKIi/CchTnKvBulN6obWpcbzJ6lDToXn+Wp0QlVKd7uYAz2/CTw1j7m+Kg==", + "license": "Apache-2.0", + "dependencies": { + "@smithy/config-resolver": "^4.3.0", + "@smithy/credential-provider-imds": "^4.2.0", + "@smithy/node-config-provider": "^4.3.0", + "@smithy/property-provider": "^4.2.0", + "@smithy/smithy-client": "^4.7.0", + "@smithy/types": "^4.6.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@smithy/util-endpoints": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/@smithy/util-endpoints/-/util-endpoints-3.2.0.tgz", + "integrity": "sha512-TXeCn22D56vvWr/5xPqALc9oO+LN+QpFjrSM7peG/ckqEPoI3zaKZFp+bFwfmiHhn5MGWPaLCqDOJPPIixk9Wg==", + "license": "Apache-2.0", + "dependencies": { + "@smithy/node-config-provider": "^4.3.0", + "@smithy/types": "^4.6.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@smithy/util-hex-encoding": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@smithy/util-hex-encoding/-/util-hex-encoding-4.2.0.tgz", + "integrity": "sha512-CCQBwJIvXMLKxVbO88IukazJD9a4kQ9ZN7/UMGBjBcJYvatpWk+9g870El4cB8/EJxfe+k+y0GmR9CAzkF+Nbw==", + "license": "Apache-2.0", + "dependencies": { + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@smithy/util-middleware": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@smithy/util-middleware/-/util-middleware-4.2.0.tgz", + "integrity": "sha512-u9OOfDa43MjagtJZ8AapJcmimP+K2Z7szXn8xbty4aza+7P1wjFmy2ewjSbhEiYQoW1unTlOAIV165weYAaowA==", + "license": "Apache-2.0", + "dependencies": { + "@smithy/types": "^4.6.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@smithy/util-retry": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@smithy/util-retry/-/util-retry-4.2.0.tgz", + "integrity": "sha512-BWSiuGbwRnEE2SFfaAZEX0TqaxtvtSYPM/J73PFVm+A29Fg1HTPiYFb8TmX1DXp4hgcdyJcNQmprfd5foeORsg==", + "license": "Apache-2.0", + "dependencies": { + "@smithy/service-error-classification": "^4.2.0", + "@smithy/types": "^4.6.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@smithy/util-stream": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/@smithy/util-stream/-/util-stream-4.4.0.tgz", + "integrity": "sha512-vtO7ktbixEcrVzMRmpQDnw/Ehr9UWjBvSJ9fyAbadKkC4w5Cm/4lMO8cHz8Ysb8uflvQUNRcuux/oNHKPXkffg==", + "license": "Apache-2.0", + "dependencies": { + "@smithy/fetch-http-handler": "^5.3.0", + "@smithy/node-http-handler": "^4.3.0", + "@smithy/types": "^4.6.0", + "@smithy/util-base64": "^4.2.0", + "@smithy/util-buffer-from": "^4.2.0", + "@smithy/util-hex-encoding": "^4.2.0", + "@smithy/util-utf8": "^4.2.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@smithy/util-uri-escape": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@smithy/util-uri-escape/-/util-uri-escape-4.2.0.tgz", + "integrity": "sha512-igZpCKV9+E/Mzrpq6YacdTQ0qTiLm85gD6N/IrmyDvQFA4UnU3d5g3m8tMT/6zG/vVkWSU+VxeUyGonL62DuxA==", + "license": "Apache-2.0", + "dependencies": { + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@smithy/util-utf8": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@smithy/util-utf8/-/util-utf8-4.2.0.tgz", + "integrity": "sha512-zBPfuzoI8xyBtR2P6WQj63Rz8i3AmfAaJLuNG8dWsfvPe8lO4aCPYLn879mEgHndZH1zQ2oXmG8O1GGzzaoZiw==", + "license": "Apache-2.0", + "dependencies": { + "@smithy/util-buffer-from": "^4.2.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@smithy/uuid": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@smithy/uuid/-/uuid-1.1.0.tgz", + "integrity": "sha512-4aUIteuyxtBUhVdiQqcDhKFitwfd9hqoSDYY2KRXiWtgoWJ9Bmise+KfEPDiVHWeJepvF8xJO9/9+WDIciMFFw==", + "license": "Apache-2.0", + "dependencies": { + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@so-ric/colorspace": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/@so-ric/colorspace/-/colorspace-1.1.6.tgz", + "integrity": "sha512-/KiKkpHNOBgkFJwu9sh48LkHSMYGyuTcSFK/qMBdnOAlrRJzRSXAOFB5qwzaVQuDl8wAvHVMkaASQDReTahxuw==", + "license": "MIT", + "dependencies": { + "color": "^5.0.2", + "text-hex": "1.0.x" + } + }, + "node_modules/@solidity-parser/parser": { + "version": "0.14.5", + "resolved": "https://registry.npmjs.org/@solidity-parser/parser/-/parser-0.14.5.tgz", + "integrity": "sha512-6dKnHZn7fg/iQATVEzqyUOyEidbn05q7YA2mQ9hC0MMXhhV3/JrsxmFSYZAcr7j1yUP700LLhTruvJ3MiQmjJg==", + "dev": true, + "license": "MIT", + "dependencies": { + "antlr4ts": "^0.5.0-alpha.4" + } + }, + "node_modules/@sqltools/formatter": { + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/@sqltools/formatter/-/formatter-1.2.5.tgz", + "integrity": "sha512-Uy0+khmZqUrUGm5dmMqVlnvufZRSK0FbYzVgp0UMstm+F5+W2/jnEEQyc9vo1ZR/E5ZI/B1WjjoTqBqwJL6Krw==", + "license": "MIT" + }, + "node_modules/@stablelib/aead": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@stablelib/aead/-/aead-1.0.1.tgz", + "integrity": "sha512-q39ik6sxGHewqtO0nP4BuSe3db5G1fEJE8ukvngS2gLkBXyy6E7pLubhbYgnkDFv6V8cWaxcE4Xn0t6LWcJkyg==", + "license": "MIT" + }, + "node_modules/@stablelib/binary": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@stablelib/binary/-/binary-1.0.1.tgz", + "integrity": "sha512-ClJWvmL6UBM/wjkvv/7m5VP3GMr9t0osr4yVgLZsLCOz4hGN9gIAFEqnJ0TsSMAN+n840nf2cHZnA5/KFqHC7Q==", + "license": "MIT", + "dependencies": { + "@stablelib/int": "^1.0.1" + } + }, + "node_modules/@stablelib/bytes": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@stablelib/bytes/-/bytes-1.0.1.tgz", + "integrity": "sha512-Kre4Y4kdwuqL8BR2E9hV/R5sOrUj6NanZaZis0V6lX5yzqC3hBuVSDXUIBqQv/sCpmuWRiHLwqiT1pqqjuBXoQ==", + "license": "MIT" + }, + "node_modules/@stablelib/chacha": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@stablelib/chacha/-/chacha-1.0.1.tgz", + "integrity": "sha512-Pmlrswzr0pBzDofdFuVe1q7KdsHKhhU24e8gkEwnTGOmlC7PADzLVxGdn2PoNVBBabdg0l/IfLKg6sHAbTQugg==", + "license": "MIT", + "dependencies": { + "@stablelib/binary": "^1.0.1", + "@stablelib/wipe": "^1.0.1" + } + }, + "node_modules/@stablelib/chacha20poly1305": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@stablelib/chacha20poly1305/-/chacha20poly1305-1.0.1.tgz", + "integrity": "sha512-MmViqnqHd1ymwjOQfghRKw2R/jMIGT3wySN7cthjXCBdO+qErNPUBnRzqNpnvIwg7JBCg3LdeCZZO4de/yEhVA==", + "license": "MIT", + "dependencies": { + "@stablelib/aead": "^1.0.1", + "@stablelib/binary": "^1.0.1", + "@stablelib/chacha": "^1.0.1", + "@stablelib/constant-time": "^1.0.1", + "@stablelib/poly1305": "^1.0.1", + "@stablelib/wipe": "^1.0.1" + } + }, + "node_modules/@stablelib/constant-time": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@stablelib/constant-time/-/constant-time-1.0.1.tgz", + "integrity": "sha512-tNOs3uD0vSJcK6z1fvef4Y+buN7DXhzHDPqRLSXUel1UfqMB1PWNsnnAezrKfEwTLpN0cGH2p9NNjs6IqeD0eg==", + "license": "MIT" + }, + "node_modules/@stablelib/ed25519": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/@stablelib/ed25519/-/ed25519-1.0.3.tgz", + "integrity": "sha512-puIMWaX9QlRsbhxfDc5i+mNPMY+0TmQEskunY1rZEBPi1acBCVQAhnsk/1Hk50DGPtVsZtAWQg4NHGlVaO9Hqg==", + "license": "MIT", + "dependencies": { + "@stablelib/random": "^1.0.2", + "@stablelib/sha512": "^1.0.1", + "@stablelib/wipe": "^1.0.1" + } + }, + "node_modules/@stablelib/ed25519/node_modules/@stablelib/random": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@stablelib/random/-/random-1.0.2.tgz", + "integrity": "sha512-rIsE83Xpb7clHPVRlBj8qNe5L8ISQOzjghYQm/dZ7VaM2KHYwMW5adjQjrzTZCchFnNCNhkwtnOBa9HTMJCI8w==", + "license": "MIT", + "dependencies": { + "@stablelib/binary": "^1.0.1", + "@stablelib/wipe": "^1.0.1" + } + }, + "node_modules/@stablelib/hash": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@stablelib/hash/-/hash-1.0.1.tgz", + "integrity": "sha512-eTPJc/stDkdtOcrNMZ6mcMK1e6yBbqRBaNW55XA1jU8w/7QdnCF0CmMmOD1m7VSkBR44PWrMHU2l6r8YEQHMgg==", + "license": "MIT" + }, + "node_modules/@stablelib/hkdf": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@stablelib/hkdf/-/hkdf-1.0.1.tgz", + "integrity": "sha512-SBEHYE16ZXlHuaW5RcGk533YlBj4grMeg5TooN80W3NpcHRtLZLLXvKyX0qcRFxf+BGDobJLnwkvgEwHIDBR6g==", + "license": "MIT", + "dependencies": { + "@stablelib/hash": "^1.0.1", + "@stablelib/hmac": "^1.0.1", + "@stablelib/wipe": "^1.0.1" + } + }, + "node_modules/@stablelib/hmac": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@stablelib/hmac/-/hmac-1.0.1.tgz", + "integrity": "sha512-V2APD9NSnhVpV/QMYgCVMIYKiYG6LSqw1S65wxVoirhU/51ACio6D4yDVSwMzuTJXWZoVHbDdINioBwKy5kVmA==", + "license": "MIT", + "dependencies": { + "@stablelib/constant-time": "^1.0.1", + "@stablelib/hash": "^1.0.1", + "@stablelib/wipe": "^1.0.1" + } + }, + "node_modules/@stablelib/int": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@stablelib/int/-/int-1.0.1.tgz", + "integrity": "sha512-byr69X/sDtDiIjIV6m4roLVWnNNlRGzsvxw+agj8CIEazqWGOQp2dTYgQhtyVXV9wpO6WyXRQUzLV/JRNumT2w==", + "license": "MIT" + }, + "node_modules/@stablelib/keyagreement": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@stablelib/keyagreement/-/keyagreement-1.0.1.tgz", + "integrity": "sha512-VKL6xBwgJnI6l1jKrBAfn265cspaWBPAPEc62VBQrWHLqVgNRE09gQ/AnOEyKUWrrqfD+xSQ3u42gJjLDdMDQg==", + "license": "MIT", + "dependencies": { + "@stablelib/bytes": "^1.0.1" + } + }, + "node_modules/@stablelib/poly1305": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@stablelib/poly1305/-/poly1305-1.0.1.tgz", + "integrity": "sha512-1HlG3oTSuQDOhSnLwJRKeTRSAdFNVB/1djy2ZbS35rBSJ/PFqx9cf9qatinWghC2UbfOYD8AcrtbUQl8WoxabA==", + "license": "MIT", + "dependencies": { + "@stablelib/constant-time": "^1.0.1", + "@stablelib/wipe": "^1.0.1" + } + }, + "node_modules/@stablelib/random": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@stablelib/random/-/random-1.0.0.tgz", + "integrity": "sha512-G9vwwKrNCGMI/uHL6XeWe2Nk4BuxkYyWZagGaDU9wrsuV+9hUwNI1lok2WVo8uJDa2zx7ahNwN7Ij983hOUFEw==", + "license": "MIT", + "dependencies": { + "@stablelib/binary": "^1.0.0", + "@stablelib/wipe": "^1.0.0" + } + }, + "node_modules/@stablelib/sha256": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@stablelib/sha256/-/sha256-1.0.1.tgz", + "integrity": "sha512-GIIH3e6KH+91FqGV42Kcj71Uefd/QEe7Dy42sBTeqppXV95ggCcxLTk39bEr+lZfJmp+ghsR07J++ORkRELsBQ==", + "license": "MIT", + "dependencies": { + "@stablelib/binary": "^1.0.1", + "@stablelib/hash": "^1.0.1", + "@stablelib/wipe": "^1.0.1" + } + }, + "node_modules/@stablelib/sha512": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@stablelib/sha512/-/sha512-1.0.1.tgz", + "integrity": "sha512-13gl/iawHV9zvDKciLo1fQ8Bgn2Pvf7OV6amaRVKiq3pjQ3UmEpXxWiAfV8tYjUpeZroBxtyrwtdooQT/i3hzw==", + "license": "MIT", + "dependencies": { + "@stablelib/binary": "^1.0.1", + "@stablelib/hash": "^1.0.1", + "@stablelib/wipe": "^1.0.1" + } + }, + "node_modules/@stablelib/wipe": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@stablelib/wipe/-/wipe-1.0.1.tgz", + "integrity": "sha512-WfqfX/eXGiAd3RJe4VU2snh/ZPwtSjLG4ynQ/vYzvghTh7dHFcI1wl+nrkWG6lGhukOxOsUHfv8dUXr58D0ayg==", + "license": "MIT" + }, + "node_modules/@stablelib/x25519": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/@stablelib/x25519/-/x25519-1.0.3.tgz", + "integrity": "sha512-KnTbKmUhPhHavzobclVJQG5kuivH+qDLpe84iRqX3CLrKp881cF160JvXJ+hjn1aMyCwYOKeIZefIH/P5cJoRw==", + "license": "MIT", + "dependencies": { + "@stablelib/keyagreement": "^1.0.1", + "@stablelib/random": "^1.0.2", + "@stablelib/wipe": "^1.0.1" + } + }, + "node_modules/@stablelib/x25519/node_modules/@stablelib/random": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@stablelib/random/-/random-1.0.2.tgz", + "integrity": "sha512-rIsE83Xpb7clHPVRlBj8qNe5L8ISQOzjghYQm/dZ7VaM2KHYwMW5adjQjrzTZCchFnNCNhkwtnOBa9HTMJCI8w==", + "license": "MIT", + "dependencies": { + "@stablelib/binary": "^1.0.1", + "@stablelib/wipe": "^1.0.1" + } + }, + "node_modules/@standard-schema/spec": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@standard-schema/spec/-/spec-1.1.0.tgz", + "integrity": "sha512-l2aFy5jALhniG5HgqrD6jXLi/rUWrKvqN/qJx6yoJsgKhblVd+iqqU4RCXavm/jPityDo5TCvKMnpjKnOriy0w==", + "license": "MIT" + }, + "node_modules/@stylistic/eslint-plugin-js": { + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/@stylistic/eslint-plugin-js/-/eslint-plugin-js-2.6.2.tgz", + "integrity": "sha512-wCr/kVctAPayMU3pcOI1MKR7MoKIh6VKZU89lPklAqtJoxT+Em6RueiiARbpznUYG5eg3LymiU+aMD+aIZXdqA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/eslint": "^9.6.0", + "acorn": "^8.12.1", + "eslint-visitor-keys": "^4.0.0", + "espree": "^10.1.0" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "peerDependencies": { + "eslint": ">=8.40.0" + } + }, + "node_modules/@stylistic/eslint-plugin-js/node_modules/eslint-visitor-keys": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-4.2.1.tgz", + "integrity": "sha512-Uhdk5sfqcee/9H/rCOJikYz67o0a2Tw2hGRPOG2Y1R2dg7brRe1uG0yaNQDHu+TO/uQPF/5eCapvYSmHUjt7JQ==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/@stylistic/eslint-plugin-js/node_modules/espree": { + "version": "10.4.0", + "resolved": "https://registry.npmjs.org/espree/-/espree-10.4.0.tgz", + "integrity": "sha512-j6PAQ2uUr79PZhBjP5C5fhl8e39FmRnOjsD5lGnWrFU8i2G776tBK7+nP8KuQUTTyAZUwfQqXAgrVH5MbH9CYQ==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "acorn": "^8.15.0", + "acorn-jsx": "^5.3.2", + "eslint-visitor-keys": "^4.2.1" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/@stylistic/eslint-plugin-ts": { + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/@stylistic/eslint-plugin-ts/-/eslint-plugin-ts-2.6.2.tgz", + "integrity": "sha512-6OEN3VtUNxjgOvWPavnC10MByr1H4zsgwNND3rQXr5lDFv93MLUnTsH+/SH15OkuqdyJgrQILI6b9lYecb1vIg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@stylistic/eslint-plugin-js": "2.6.2", + "@types/eslint": "^9.6.0", + "@typescript-eslint/utils": "^8.0.0" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "peerDependencies": { + "eslint": ">=8.40.0" + } + }, + "node_modules/@svgr/babel-plugin-add-jsx-attribute": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-add-jsx-attribute/-/babel-plugin-add-jsx-attribute-8.0.0.tgz", + "integrity": "sha512-b9MIk7yhdS1pMCZM8VeNfUlSKVRhsHZNMl5O9SfaX0l0t5wjdgu4IDzGB8bpnGBBOjGST3rRFVsaaEtI4W6f7g==", + "license": "MIT", + "engines": { + "node": ">=14" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/gregberge" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@svgr/babel-plugin-remove-jsx-attribute": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-remove-jsx-attribute/-/babel-plugin-remove-jsx-attribute-8.0.0.tgz", + "integrity": "sha512-BcCkm/STipKvbCl6b7QFrMh/vx00vIP63k2eM66MfHJzPr6O2U0jYEViXkHJWqXqQYjdeA9cuCl5KWmlwjDvbA==", + "license": "MIT", + "engines": { + "node": ">=14" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/gregberge" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@svgr/babel-plugin-remove-jsx-empty-expression": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-remove-jsx-empty-expression/-/babel-plugin-remove-jsx-empty-expression-8.0.0.tgz", + "integrity": "sha512-5BcGCBfBxB5+XSDSWnhTThfI9jcO5f0Ai2V24gZpG+wXF14BzwxxdDb4g6trdOux0rhibGs385BeFMSmxtS3uA==", + "license": "MIT", + "engines": { + "node": ">=14" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/gregberge" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@svgr/babel-plugin-replace-jsx-attribute-value": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-replace-jsx-attribute-value/-/babel-plugin-replace-jsx-attribute-value-8.0.0.tgz", + "integrity": "sha512-KVQ+PtIjb1BuYT3ht8M5KbzWBhdAjjUPdlMtpuw/VjT8coTrItWX6Qafl9+ji831JaJcu6PJNKCV0bp01lBNzQ==", + "license": "MIT", + "engines": { + "node": ">=14" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/gregberge" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@svgr/babel-plugin-svg-dynamic-title": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-svg-dynamic-title/-/babel-plugin-svg-dynamic-title-8.0.0.tgz", + "integrity": "sha512-omNiKqwjNmOQJ2v6ge4SErBbkooV2aAWwaPFs2vUY7p7GhVkzRkJ00kILXQvRhA6miHnNpXv7MRnnSjdRjK8og==", + "license": "MIT", + "engines": { + "node": ">=14" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/gregberge" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@svgr/babel-plugin-svg-em-dimensions": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-svg-em-dimensions/-/babel-plugin-svg-em-dimensions-8.0.0.tgz", + "integrity": "sha512-mURHYnu6Iw3UBTbhGwE/vsngtCIbHE43xCRK7kCw4t01xyGqb2Pd+WXekRRoFOBIY29ZoOhUCTEweDMdrjfi9g==", + "license": "MIT", + "engines": { + "node": ">=14" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/gregberge" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@svgr/babel-plugin-transform-react-native-svg": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-transform-react-native-svg/-/babel-plugin-transform-react-native-svg-8.1.0.tgz", + "integrity": "sha512-Tx8T58CHo+7nwJ+EhUwx3LfdNSG9R2OKfaIXXs5soiy5HtgoAEkDay9LIimLOcG8dJQH1wPZp/cnAv6S9CrR1Q==", + "license": "MIT", + "engines": { + "node": ">=14" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/gregberge" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@svgr/babel-plugin-transform-svg-component": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-transform-svg-component/-/babel-plugin-transform-svg-component-8.0.0.tgz", + "integrity": "sha512-DFx8xa3cZXTdb/k3kfPeaixecQLgKh5NVBMwD0AQxOzcZawK4oo1Jh9LbrcACUivsCA7TLG8eeWgrDXjTMhRmw==", + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/gregberge" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@svgr/babel-preset": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/@svgr/babel-preset/-/babel-preset-8.1.0.tgz", + "integrity": "sha512-7EYDbHE7MxHpv4sxvnVPngw5fuR6pw79SkcrILHJ/iMpuKySNCl5W1qcwPEpU+LgyRXOaAFgH0KhwD18wwg6ug==", + "license": "MIT", + "dependencies": { + "@svgr/babel-plugin-add-jsx-attribute": "8.0.0", + "@svgr/babel-plugin-remove-jsx-attribute": "8.0.0", + "@svgr/babel-plugin-remove-jsx-empty-expression": "8.0.0", + "@svgr/babel-plugin-replace-jsx-attribute-value": "8.0.0", + "@svgr/babel-plugin-svg-dynamic-title": "8.0.0", + "@svgr/babel-plugin-svg-em-dimensions": "8.0.0", + "@svgr/babel-plugin-transform-react-native-svg": "8.1.0", + "@svgr/babel-plugin-transform-svg-component": "8.0.0" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/gregberge" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@svgr/core": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/@svgr/core/-/core-8.1.0.tgz", + "integrity": "sha512-8QqtOQT5ACVlmsvKOJNEaWmRPmcojMOzCz4Hs2BGG/toAp/K38LcsMRyLp349glq5AzJbCEeimEoxaX6v/fLrA==", + "license": "MIT", + "dependencies": { + "@babel/core": "^7.21.3", + "@svgr/babel-preset": "8.1.0", + "camelcase": "^6.2.0", + "cosmiconfig": "^8.1.3", + "snake-case": "^3.0.4" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/gregberge" + } + }, + "node_modules/@svgr/core/node_modules/camelcase": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz", + "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==", + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@svgr/core/node_modules/cosmiconfig": { + "version": "8.3.6", + "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-8.3.6.tgz", + "integrity": "sha512-kcZ6+W5QzcJ3P1Mt+83OUv/oHFqZHIx8DuxG6eZ5RGMERoLqp4BuGjhHLYGK+Kf5XVkQvqBSmAy/nGWN3qDgEA==", + "license": "MIT", + "dependencies": { + "import-fresh": "^3.3.0", + "js-yaml": "^4.1.0", + "parse-json": "^5.2.0", + "path-type": "^4.0.0" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/d-fischer" + }, + "peerDependencies": { + "typescript": ">=4.9.5" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/@svgr/hast-util-to-babel-ast": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/@svgr/hast-util-to-babel-ast/-/hast-util-to-babel-ast-8.0.0.tgz", + "integrity": "sha512-EbDKwO9GpfWP4jN9sGdYwPBU0kdomaPIL2Eu4YwmgP+sJeXT+L7bMwJUBnhzfH8Q2qMBqZ4fJwpCyYsAN3mt2Q==", + "license": "MIT", + "dependencies": { + "@babel/types": "^7.21.3", + "entities": "^4.4.0" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/gregberge" + } + }, + "node_modules/@svgr/hast-util-to-babel-ast/node_modules/entities": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/entities/-/entities-4.5.0.tgz", + "integrity": "sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==", + "license": "BSD-2-Clause", + "engines": { + "node": ">=0.12" + }, + "funding": { + "url": "https://github.com/fb55/entities?sponsor=1" + } + }, + "node_modules/@svgr/plugin-jsx": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/@svgr/plugin-jsx/-/plugin-jsx-8.1.0.tgz", + "integrity": "sha512-0xiIyBsLlr8quN+WyuxooNW9RJ0Dpr8uOnH/xrCVO8GLUcwHISwj1AG0k+LFzteTkAA0GbX0kj9q6Dk70PTiPA==", + "license": "MIT", + "dependencies": { + "@babel/core": "^7.21.3", + "@svgr/babel-preset": "8.1.0", + "@svgr/hast-util-to-babel-ast": "8.0.0", + "svg-parser": "^2.0.4" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/gregberge" + }, + "peerDependencies": { + "@svgr/core": "*" + } + }, + "node_modules/@svgr/plugin-svgo": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/@svgr/plugin-svgo/-/plugin-svgo-8.1.0.tgz", + "integrity": "sha512-Ywtl837OGO9pTLIN/onoWLmDQ4zFUycI1g76vuKGEz6evR/ZTJlJuz3G/fIkb6OVBJ2g0o6CGJzaEjfmEo3AHA==", + "license": "MIT", + "dependencies": { + "cosmiconfig": "^8.1.3", + "deepmerge": "^4.3.1", + "svgo": "^3.0.2" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/gregberge" + }, + "peerDependencies": { + "@svgr/core": "*" + } + }, + "node_modules/@svgr/plugin-svgo/node_modules/cosmiconfig": { + "version": "8.3.6", + "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-8.3.6.tgz", + "integrity": "sha512-kcZ6+W5QzcJ3P1Mt+83OUv/oHFqZHIx8DuxG6eZ5RGMERoLqp4BuGjhHLYGK+Kf5XVkQvqBSmAy/nGWN3qDgEA==", + "license": "MIT", + "dependencies": { + "import-fresh": "^3.3.0", + "js-yaml": "^4.1.0", + "parse-json": "^5.2.0", + "path-type": "^4.0.0" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/d-fischer" + }, + "peerDependencies": { + "typescript": ">=4.9.5" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/@svgr/webpack": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/@svgr/webpack/-/webpack-8.1.0.tgz", + "integrity": "sha512-LnhVjMWyMQV9ZmeEy26maJk+8HTIbd59cH4F2MJ439k9DqejRisfFNGAPvRYlKETuh9LrImlS8aKsBgKjMA8WA==", + "license": "MIT", + "dependencies": { + "@babel/core": "^7.21.3", + "@babel/plugin-transform-react-constant-elements": "^7.21.3", + "@babel/preset-env": "^7.20.2", + "@babel/preset-react": "^7.18.6", + "@babel/preset-typescript": "^7.21.0", + "@svgr/core": "8.1.0", + "@svgr/plugin-jsx": "8.1.0", + "@svgr/plugin-svgo": "8.1.0" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/gregberge" + } + }, + "node_modules/@swc/core": { + "version": "1.13.5", + "resolved": "https://registry.npmjs.org/@swc/core/-/core-1.13.5.tgz", + "integrity": "sha512-WezcBo8a0Dg2rnR82zhwoR6aRNxeTGfK5QCD6TQ+kg3xx/zNT02s/0o+81h/3zhvFSB24NtqEr8FTw88O5W/JQ==", + "devOptional": true, + "hasInstallScript": true, + "license": "Apache-2.0", + "peer": true, + "dependencies": { + "@swc/counter": "^0.1.3", + "@swc/types": "^0.1.24" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/swc" + }, + "optionalDependencies": { + "@swc/core-darwin-arm64": "1.13.5", + "@swc/core-darwin-x64": "1.13.5", + "@swc/core-linux-arm-gnueabihf": "1.13.5", + "@swc/core-linux-arm64-gnu": "1.13.5", + "@swc/core-linux-arm64-musl": "1.13.5", + "@swc/core-linux-x64-gnu": "1.13.5", + "@swc/core-linux-x64-musl": "1.13.5", + "@swc/core-win32-arm64-msvc": "1.13.5", + "@swc/core-win32-ia32-msvc": "1.13.5", + "@swc/core-win32-x64-msvc": "1.13.5" + }, + "peerDependencies": { + "@swc/helpers": ">=0.5.17" + }, + "peerDependenciesMeta": { + "@swc/helpers": { + "optional": true + } + } + }, + "node_modules/@swc/core-darwin-arm64": { + "version": "1.13.5", + "resolved": "https://registry.npmjs.org/@swc/core-darwin-arm64/-/core-darwin-arm64-1.13.5.tgz", + "integrity": "sha512-lKNv7SujeXvKn16gvQqUQI5DdyY8v7xcoO3k06/FJbHJS90zEwZdQiMNRiqpYw/orU543tPaWgz7cIYWhbopiQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "Apache-2.0 AND MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=10" + } + }, + "node_modules/@swc/core-darwin-x64": { + "version": "1.13.5", + "resolved": "https://registry.npmjs.org/@swc/core-darwin-x64/-/core-darwin-x64-1.13.5.tgz", + "integrity": "sha512-ILd38Fg/w23vHb0yVjlWvQBoE37ZJTdlLHa8LRCFDdX4WKfnVBiblsCU9ar4QTMNdeTBEX9iUF4IrbNWhaF1Ng==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "Apache-2.0 AND MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=10" + } + }, + "node_modules/@swc/core-linux-arm-gnueabihf": { + "version": "1.13.5", + "resolved": "https://registry.npmjs.org/@swc/core-linux-arm-gnueabihf/-/core-linux-arm-gnueabihf-1.13.5.tgz", + "integrity": "sha512-Q6eS3Pt8GLkXxqz9TAw+AUk9HpVJt8Uzm54MvPsqp2yuGmY0/sNaPPNVqctCX9fu/Nu8eaWUen0si6iEiCsazQ==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "Apache-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=10" + } + }, + "node_modules/@swc/core-linux-arm64-gnu": { + "version": "1.13.5", + "resolved": "https://registry.npmjs.org/@swc/core-linux-arm64-gnu/-/core-linux-arm64-gnu-1.13.5.tgz", + "integrity": "sha512-aNDfeN+9af+y+M2MYfxCzCy/VDq7Z5YIbMqRI739o8Ganz6ST+27kjQFd8Y/57JN/hcnUEa9xqdS3XY7WaVtSw==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "Apache-2.0 AND MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=10" + } + }, + "node_modules/@swc/core-linux-arm64-musl": { + "version": "1.13.5", + "resolved": "https://registry.npmjs.org/@swc/core-linux-arm64-musl/-/core-linux-arm64-musl-1.13.5.tgz", + "integrity": "sha512-9+ZxFN5GJag4CnYnq6apKTnnezpfJhCumyz0504/JbHLo+Ue+ZtJnf3RhyA9W9TINtLE0bC4hKpWi8ZKoETyOQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "Apache-2.0 AND MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=10" + } + }, + "node_modules/@swc/core-linux-x64-gnu": { + "version": "1.13.5", + "resolved": "https://registry.npmjs.org/@swc/core-linux-x64-gnu/-/core-linux-x64-gnu-1.13.5.tgz", + "integrity": "sha512-WD530qvHrki8Ywt/PloKUjaRKgstQqNGvmZl54g06kA+hqtSE2FTG9gngXr3UJxYu/cNAjJYiBifm7+w4nbHbA==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "Apache-2.0 AND MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=10" + } + }, + "node_modules/@swc/core-linux-x64-musl": { + "version": "1.13.5", + "resolved": "https://registry.npmjs.org/@swc/core-linux-x64-musl/-/core-linux-x64-musl-1.13.5.tgz", + "integrity": "sha512-Luj8y4OFYx4DHNQTWjdIuKTq2f5k6uSXICqx+FSabnXptaOBAbJHNbHT/06JZh6NRUouaf0mYXN0mcsqvkhd7Q==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "Apache-2.0 AND MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=10" + } + }, + "node_modules/@swc/core-win32-arm64-msvc": { + "version": "1.13.5", + "resolved": "https://registry.npmjs.org/@swc/core-win32-arm64-msvc/-/core-win32-arm64-msvc-1.13.5.tgz", + "integrity": "sha512-cZ6UpumhF9SDJvv4DA2fo9WIzlNFuKSkZpZmPG1c+4PFSEMy5DFOjBSllCvnqihCabzXzpn6ykCwBmHpy31vQw==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "Apache-2.0 AND MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=10" + } + }, + "node_modules/@swc/core-win32-ia32-msvc": { + "version": "1.13.5", + "resolved": "https://registry.npmjs.org/@swc/core-win32-ia32-msvc/-/core-win32-ia32-msvc-1.13.5.tgz", + "integrity": "sha512-C5Yi/xIikrFUzZcyGj9L3RpKljFvKiDMtyDzPKzlsDrKIw2EYY+bF88gB6oGY5RGmv4DAX8dbnpRAqgFD0FMEw==", + "cpu": [ + "ia32" + ], + "dev": true, + "license": "Apache-2.0 AND MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=10" + } + }, + "node_modules/@swc/core-win32-x64-msvc": { + "version": "1.13.5", + "resolved": "https://registry.npmjs.org/@swc/core-win32-x64-msvc/-/core-win32-x64-msvc-1.13.5.tgz", + "integrity": "sha512-YrKdMVxbYmlfybCSbRtrilc6UA8GF5aPmGKBdPvjrarvsmf4i7ZHGCEnLtfOMd3Lwbs2WUZq3WdMbozYeLU93Q==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "Apache-2.0 AND MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=10" + } + }, + "node_modules/@swc/counter": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/@swc/counter/-/counter-0.1.3.tgz", + "integrity": "sha512-e2BR4lsJkkRlKZ/qCHPw9ZaSxc0MVUd7gtbtaB7aMvHeJVYe8sOB8DBZkP2DtISHGSku9sCK6T6cnY0CtXrOCQ==", + "devOptional": true, + "license": "Apache-2.0" + }, + "node_modules/@swc/types": { + "version": "0.1.25", + "resolved": "https://registry.npmjs.org/@swc/types/-/types-0.1.25.tgz", + "integrity": "sha512-iAoY/qRhNH8a/hBvm3zKj9qQ4oc2+3w1unPJa2XvTK3XjeLXtzcCingVPw/9e5mn1+0yPqxcBGp9Jf0pkfMb1g==", + "devOptional": true, + "license": "Apache-2.0", + "dependencies": { + "@swc/counter": "^0.1.3" + } + }, + "node_modules/@szmarczak/http-timer": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/@szmarczak/http-timer/-/http-timer-5.0.1.tgz", + "integrity": "sha512-+PmQX0PiAYPMeVYe237LJAYvOMYW1j2rH5YROyS3b4CTVJum34HfRvKvAzozHAQG0TnHNdUfY9nCeUyRAs//cw==", + "license": "MIT", + "dependencies": { + "defer-to-connect": "^2.0.1" + }, + "engines": { + "node": ">=14.16" + } + }, + "node_modules/@tanstack/query-core": { + "version": "5.90.2", + "resolved": "https://registry.npmjs.org/@tanstack/query-core/-/query-core-5.90.2.tgz", + "integrity": "sha512-k/TcR3YalnzibscALLwxeiLUub6jN5EDLwKDiO7q5f4ICEoptJ+n9+7vcEFy5/x/i6Q+Lb/tXrsKCggf5uQJXQ==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/tannerlinsley" + } + }, + "node_modules/@tanstack/react-query": { + "version": "4.41.0", + "resolved": "https://registry.npmjs.org/@tanstack/react-query/-/react-query-4.41.0.tgz", + "integrity": "sha512-4/euCZAv8zeaB5P/nQiySzB0JHM3tiraU9KjSvSlJAX7oIE9uPDZlHCkDg/bHYNXewzvsg0FtOMq0VUq8XMMOQ==", + "license": "MIT", + "dependencies": { + "@tanstack/query-core": "4.41.0", + "use-sync-external-store": "^1.2.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/tannerlinsley" + }, + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0 || ^18.0.0", + "react-dom": "^16.8.0 || ^17.0.0 || ^18.0.0", + "react-native": "*" + }, + "peerDependenciesMeta": { + "react-dom": { + "optional": true + }, + "react-native": { + "optional": true + } + } + }, + "node_modules/@tanstack/react-query/node_modules/@tanstack/query-core": { + "version": "4.41.0", + "resolved": "https://registry.npmjs.org/@tanstack/query-core/-/query-core-4.41.0.tgz", + "integrity": "sha512-193R4Jp9hjvlij6LryxrB5Mpbffd2L9PeWh3KlIy/hJV4SkBOfiQZ+jc5qAZLDCrdbkA5FjGj+UoDYw6TcNnyA==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/tannerlinsley" + } + }, + "node_modules/@tanstack/react-table": { + "version": "8.21.3", + "resolved": "https://registry.npmjs.org/@tanstack/react-table/-/react-table-8.21.3.tgz", + "integrity": "sha512-5nNMTSETP4ykGegmVkhjcS8tTLW6Vl4axfEGQN3v0zdHYbK4UfoqfPChclTrJ4EoK9QynqAu9oUf8VEmrpZ5Ww==", + "license": "MIT", + "dependencies": { + "@tanstack/table-core": "8.21.3" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/tannerlinsley" + }, + "peerDependencies": { + "react": ">=16.8", + "react-dom": ">=16.8" + } + }, + "node_modules/@tanstack/table-core": { + "version": "8.21.3", + "resolved": "https://registry.npmjs.org/@tanstack/table-core/-/table-core-8.21.3.tgz", + "integrity": "sha512-ldZXEhOBb8Is7xLs01fR3YEc3DERiz5silj8tnGkFZytt1abEvl/GhUmCE0PMLaMPTa3Jk4HbKmRlHmu+gCftg==", + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/tannerlinsley" + } + }, + "node_modules/@terminal3/bbs_vc": { + "version": "0.2.18", + "resolved": "https://registry.npmjs.org/@terminal3/bbs_vc/-/bbs_vc-0.2.18.tgz", + "integrity": "sha512-Jnm2EuWZYAcSnfqXuIRo3wEQp+mktT7CJACapJJHiQ9cewY1S5MoYv0R8vLk1x6M+wAs2JDXbCGQ9psCfkVBog==", + "license": "MIT", + "dependencies": { + "@mattrglobal/bbs-signatures": "^1.3.1", + "@noble/curves": "^1.4.2", + "@noble/hashes": "^1.4.0", + "@terminal3/vc_core": "0.0.19", + "@terminal3/verify_vc_core": "0.0.19", + "@types/jsonld": "^1.5.15", + "@types/uuid": "^10.0.0", + "base64url": "^3.0.1", + "cbor": "^9.0.2", + "did-jwt": "^8.0.4", + "ethers": "^6.13.1", + "jsonld": "^8.3.2", + "klona": "^2.0.6", + "multiformats": "^13.1.3", + "uuid": "^10.0.0" + } + }, + "node_modules/@terminal3/bbs_vc/node_modules/@adraffy/ens-normalize": { + "version": "1.10.1", + "resolved": "https://registry.npmjs.org/@adraffy/ens-normalize/-/ens-normalize-1.10.1.tgz", + "integrity": "sha512-96Z2IP3mYmF1Xg2cDm8f1gWGf/HUVedQ3FMifV4kG/PQ4yEP51xDtRAEfhVNt5f/uzpNkZHwWQuUcu6D6K+Ekw==", + "license": "MIT" + }, + "node_modules/@terminal3/bbs_vc/node_modules/@terminal3/revoke_vc": { + "version": "0.1.15", + "resolved": "https://registry.npmjs.org/@terminal3/revoke_vc/-/revoke_vc-0.1.15.tgz", + "integrity": "sha512-/Y4svhJcsRe/mMlZtPRtInpuctMxcSVsaLcpVnbC1KDksD4FiVWby/Cknb8LItFN+NgqjgJ5JFutFmEjrqA2Yg==", + "license": "MIT", + "dependencies": { + "@noble/curves": "^1.4.2", + "@terminal3/vc_core": "0.0.19", + "did-jwt": "^8.0.4", + "ethers": "^6.13.1" + } + }, + "node_modules/@terminal3/bbs_vc/node_modules/@terminal3/vc_core": { + "version": "0.0.19", + "resolved": "https://registry.npmjs.org/@terminal3/vc_core/-/vc_core-0.0.19.tgz", + "integrity": "sha512-65JJePRqftFq5nIsBU9/bsUUlMBKzTQU14Ml037g0QUnsrcHgSWLM/lma3YNv0qx03yWVSirEicLC9ZD4Bj+MQ==", + "license": "MIT", + "dependencies": { + "did-jwt": "^8.0.4", + "ethers": "^6.13.1", + "uuid": "^10.0.0" + } + }, + "node_modules/@terminal3/bbs_vc/node_modules/@terminal3/verify_vc_core": { + "version": "0.0.19", + "resolved": "https://registry.npmjs.org/@terminal3/verify_vc_core/-/verify_vc_core-0.0.19.tgz", + "integrity": "sha512-esUoQKSAzjOwL4Qyea0a7zYt8piuHRLmZd+3CjXlpbSDylpjWJBW6pxFvkR/UVUiXc9cXrdbrJwL0JbCGwMPWw==", + "license": "MIT", + "dependencies": { + "@noble/curves": "^1.4.2", + "@terminal3/revoke_vc": "0.1.15", + "@terminal3/vc_core": "0.0.19", + "did-jwt": "^8.0.4", + "ethers": "^6.13.1" + } + }, + "node_modules/@terminal3/bbs_vc/node_modules/@types/node": { + "version": "22.7.5", + "resolved": "https://registry.npmjs.org/@types/node/-/node-22.7.5.tgz", + "integrity": "sha512-jML7s2NAzMWc//QSJ1a3prpk78cOPchGvXJsC3C6R6PSMoooztvRVQEz89gmBTBY1SPMaqo5teB4uNHPdetShQ==", + "license": "MIT", + "dependencies": { + "undici-types": "~6.19.2" + } + }, + "node_modules/@terminal3/bbs_vc/node_modules/@types/uuid": { + "version": "10.0.0", + "resolved": "https://registry.npmjs.org/@types/uuid/-/uuid-10.0.0.tgz", + "integrity": "sha512-7gqG38EyHgyP1S+7+xomFtL+ZNHcKv6DwNaCZmJmo1vgMugyF3TCnXVg4t1uk89mLNwnLtnY3TpOpCOyp1/xHQ==", + "license": "MIT" + }, + "node_modules/@terminal3/bbs_vc/node_modules/aes-js": { + "version": "4.0.0-beta.5", + "resolved": "https://registry.npmjs.org/aes-js/-/aes-js-4.0.0-beta.5.tgz", + "integrity": "sha512-G965FqalsNyrPqgEGON7nIx1e/OVENSgiEIzyC63haUMuvNnwIgIjMs52hlTCKhkBny7A2ORNlfY9Zu+jmGk1Q==", + "license": "MIT" + }, + "node_modules/@terminal3/bbs_vc/node_modules/cbor": { + "version": "9.0.2", + "resolved": "https://registry.npmjs.org/cbor/-/cbor-9.0.2.tgz", + "integrity": "sha512-JPypkxsB10s9QOWwa6zwPzqE1Md3vqpPc+cai4sAecuCsRyAtAl/pMyhPlMbT/xtPnm2dznJZYRLui57qiRhaQ==", + "license": "MIT", + "dependencies": { + "nofilter": "^3.1.0" + }, + "engines": { + "node": ">=16" + } + }, + "node_modules/@terminal3/bbs_vc/node_modules/ethers": { + "version": "6.15.0", + "resolved": "https://registry.npmjs.org/ethers/-/ethers-6.15.0.tgz", + "integrity": "sha512-Kf/3ZW54L4UT0pZtsY/rf+EkBU7Qi5nnhonjUb8yTXcxH3cdcWrV2cRyk0Xk/4jK6OoHhxxZHriyhje20If2hQ==", + "funding": [ + { + "type": "individual", + "url": "https://github.com/sponsors/ethers-io/" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "license": "MIT", + "dependencies": { + "@adraffy/ens-normalize": "1.10.1", + "@noble/curves": "1.2.0", + "@noble/hashes": "1.3.2", + "@types/node": "22.7.5", + "aes-js": "4.0.0-beta.5", + "tslib": "2.7.0", + "ws": "8.17.1" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@terminal3/bbs_vc/node_modules/ethers/node_modules/@noble/curves": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@noble/curves/-/curves-1.2.0.tgz", + "integrity": "sha512-oYclrNgRaM9SsBUBVbb8M6DTV7ZHRTKugureoYEncY5c65HOmRzvSiTE3y5CYaPYJA/GVkrhXEoF0M3Ya9PMnw==", + "license": "MIT", + "dependencies": { + "@noble/hashes": "1.3.2" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + } + }, + "node_modules/@terminal3/bbs_vc/node_modules/ethers/node_modules/@noble/hashes": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.3.2.tgz", + "integrity": "sha512-MVC8EAQp7MvEcm30KWENFjgR+Mkmf+D189XJTkFIlwohU5hcBbn1ZkKq7KVTi2Hme3PMGF390DaL52beVrIihQ==", + "license": "MIT", + "engines": { + "node": ">= 16" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + } + }, + "node_modules/@terminal3/bbs_vc/node_modules/tslib": { + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.7.0.tgz", + "integrity": "sha512-gLXCKdN1/j47AiHiOkJN69hJmcbGTHI0ImLmbYLHykhgeN0jVGola9yVjFgzCUklsZQMW55o+dW7IXv3RCXDzA==", + "license": "0BSD" + }, + "node_modules/@terminal3/bbs_vc/node_modules/undici-types": { + "version": "6.19.8", + "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.19.8.tgz", + "integrity": "sha512-ve2KP6f/JnbPBFyobGHuerC9g1FYGn/F8n1LWTwNxCEzd6IfqTwUQcNXgEtmmQ6DlRrC1hrSrBnCZPokRrDHjw==", + "license": "MIT" + }, + "node_modules/@terminal3/bbs_vc/node_modules/uuid": { + "version": "10.0.0", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-10.0.0.tgz", + "integrity": "sha512-8XkAphELsDnEGrDxUOHB3RGvXz6TeuYSGEZBOjtTtPm2lwhGBjLgOzLHB63IUWfBpNucQjND6d3AOudO+H3RWQ==", + "funding": [ + "https://github.com/sponsors/broofa", + "https://github.com/sponsors/ctavan" + ], + "license": "MIT", + "bin": { + "uuid": "dist/bin/uuid" + } + }, + "node_modules/@terminal3/bbs_vc/node_modules/ws": { + "version": "8.17.1", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.17.1.tgz", + "integrity": "sha512-6XQFvXTkbfUOZOKKILFG1PDK2NDQs4azKQl26T0YS5CxqWLgXajbPZ+h4gZekJyRqFU8pvnbAbbs/3TgRPy+GQ==", + "license": "MIT", + "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 + } + } + }, + "node_modules/@terminal3/ecdsa_vc": { + "version": "0.1.25", + "resolved": "https://registry.npmjs.org/@terminal3/ecdsa_vc/-/ecdsa_vc-0.1.25.tgz", + "integrity": "sha512-Gik0nh0gwT0IBMGZe7Ad/tajDC8PeTynvd+SomnPr/3fBliDpjdGZeQ0jPhWDUH30vSPlt+9A8ivHhwJLTT0xA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@terminal3/vc_core": "0.0.28", + "@terminal3/verify_vc_core": "0.0.28", + "did-resolver": "^4.1.0", + "ethers": "^6.11.1", + "ethr-did-resolver": "^11.0.3" + } + }, + "node_modules/@terminal3/ecdsa_vc/node_modules/@adraffy/ens-normalize": { + "version": "1.10.1", + "resolved": "https://registry.npmjs.org/@adraffy/ens-normalize/-/ens-normalize-1.10.1.tgz", + "integrity": "sha512-96Z2IP3mYmF1Xg2cDm8f1gWGf/HUVedQ3FMifV4kG/PQ4yEP51xDtRAEfhVNt5f/uzpNkZHwWQuUcu6D6K+Ekw==", + "dev": true, + "license": "MIT" + }, + "node_modules/@terminal3/ecdsa_vc/node_modules/@noble/curves": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@noble/curves/-/curves-1.2.0.tgz", + "integrity": "sha512-oYclrNgRaM9SsBUBVbb8M6DTV7ZHRTKugureoYEncY5c65HOmRzvSiTE3y5CYaPYJA/GVkrhXEoF0M3Ya9PMnw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@noble/hashes": "1.3.2" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + } + }, + "node_modules/@terminal3/ecdsa_vc/node_modules/@noble/hashes": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.3.2.tgz", + "integrity": "sha512-MVC8EAQp7MvEcm30KWENFjgR+Mkmf+D189XJTkFIlwohU5hcBbn1ZkKq7KVTi2Hme3PMGF390DaL52beVrIihQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 16" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + } + }, + "node_modules/@terminal3/ecdsa_vc/node_modules/@types/node": { + "version": "22.7.5", + "resolved": "https://registry.npmjs.org/@types/node/-/node-22.7.5.tgz", + "integrity": "sha512-jML7s2NAzMWc//QSJ1a3prpk78cOPchGvXJsC3C6R6PSMoooztvRVQEz89gmBTBY1SPMaqo5teB4uNHPdetShQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "undici-types": "~6.19.2" + } + }, + "node_modules/@terminal3/ecdsa_vc/node_modules/aes-js": { + "version": "4.0.0-beta.5", + "resolved": "https://registry.npmjs.org/aes-js/-/aes-js-4.0.0-beta.5.tgz", + "integrity": "sha512-G965FqalsNyrPqgEGON7nIx1e/OVENSgiEIzyC63haUMuvNnwIgIjMs52hlTCKhkBny7A2ORNlfY9Zu+jmGk1Q==", + "dev": true, + "license": "MIT" + }, + "node_modules/@terminal3/ecdsa_vc/node_modules/ethers": { + "version": "6.15.0", + "resolved": "https://registry.npmjs.org/ethers/-/ethers-6.15.0.tgz", + "integrity": "sha512-Kf/3ZW54L4UT0pZtsY/rf+EkBU7Qi5nnhonjUb8yTXcxH3cdcWrV2cRyk0Xk/4jK6OoHhxxZHriyhje20If2hQ==", + "dev": true, + "funding": [ + { + "type": "individual", + "url": "https://github.com/sponsors/ethers-io/" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "license": "MIT", + "dependencies": { + "@adraffy/ens-normalize": "1.10.1", + "@noble/curves": "1.2.0", + "@noble/hashes": "1.3.2", + "@types/node": "22.7.5", + "aes-js": "4.0.0-beta.5", + "tslib": "2.7.0", + "ws": "8.17.1" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@terminal3/ecdsa_vc/node_modules/tslib": { + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.7.0.tgz", + "integrity": "sha512-gLXCKdN1/j47AiHiOkJN69hJmcbGTHI0ImLmbYLHykhgeN0jVGola9yVjFgzCUklsZQMW55o+dW7IXv3RCXDzA==", + "dev": true, + "license": "0BSD" + }, + "node_modules/@terminal3/ecdsa_vc/node_modules/undici-types": { + "version": "6.19.8", + "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.19.8.tgz", + "integrity": "sha512-ve2KP6f/JnbPBFyobGHuerC9g1FYGn/F8n1LWTwNxCEzd6IfqTwUQcNXgEtmmQ6DlRrC1hrSrBnCZPokRrDHjw==", + "dev": true, + "license": "MIT" + }, + "node_modules/@terminal3/ecdsa_vc/node_modules/ws": { + "version": "8.17.1", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.17.1.tgz", + "integrity": "sha512-6XQFvXTkbfUOZOKKILFG1PDK2NDQs4azKQl26T0YS5CxqWLgXajbPZ+h4gZekJyRqFU8pvnbAbbs/3TgRPy+GQ==", + "dev": true, + "license": "MIT", + "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 + } + } + }, + "node_modules/@terminal3/revoke_vc": { + "version": "0.1.24", + "resolved": "https://registry.npmjs.org/@terminal3/revoke_vc/-/revoke_vc-0.1.24.tgz", + "integrity": "sha512-ofImOXYql9ZAfPuv3znnxIMJa5VUn+b8a39xrISB5LlxgZoVO4jG3sSIQoGvATY+yxCxYwWNmoMR770zlcwpjQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@noble/curves": "^1.4.2", + "@terminal3/vc_core": "0.0.28", + "did-jwt": "^8.0.4", + "ethers": "^6.13.1" + } + }, + "node_modules/@terminal3/revoke_vc/node_modules/@adraffy/ens-normalize": { + "version": "1.10.1", + "resolved": "https://registry.npmjs.org/@adraffy/ens-normalize/-/ens-normalize-1.10.1.tgz", + "integrity": "sha512-96Z2IP3mYmF1Xg2cDm8f1gWGf/HUVedQ3FMifV4kG/PQ4yEP51xDtRAEfhVNt5f/uzpNkZHwWQuUcu6D6K+Ekw==", + "dev": true, + "license": "MIT" + }, + "node_modules/@terminal3/revoke_vc/node_modules/@noble/hashes": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.3.2.tgz", + "integrity": "sha512-MVC8EAQp7MvEcm30KWENFjgR+Mkmf+D189XJTkFIlwohU5hcBbn1ZkKq7KVTi2Hme3PMGF390DaL52beVrIihQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 16" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + } + }, + "node_modules/@terminal3/revoke_vc/node_modules/@types/node": { + "version": "22.7.5", + "resolved": "https://registry.npmjs.org/@types/node/-/node-22.7.5.tgz", + "integrity": "sha512-jML7s2NAzMWc//QSJ1a3prpk78cOPchGvXJsC3C6R6PSMoooztvRVQEz89gmBTBY1SPMaqo5teB4uNHPdetShQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "undici-types": "~6.19.2" + } + }, + "node_modules/@terminal3/revoke_vc/node_modules/aes-js": { + "version": "4.0.0-beta.5", + "resolved": "https://registry.npmjs.org/aes-js/-/aes-js-4.0.0-beta.5.tgz", + "integrity": "sha512-G965FqalsNyrPqgEGON7nIx1e/OVENSgiEIzyC63haUMuvNnwIgIjMs52hlTCKhkBny7A2ORNlfY9Zu+jmGk1Q==", + "dev": true, + "license": "MIT" + }, + "node_modules/@terminal3/revoke_vc/node_modules/ethers": { + "version": "6.15.0", + "resolved": "https://registry.npmjs.org/ethers/-/ethers-6.15.0.tgz", + "integrity": "sha512-Kf/3ZW54L4UT0pZtsY/rf+EkBU7Qi5nnhonjUb8yTXcxH3cdcWrV2cRyk0Xk/4jK6OoHhxxZHriyhje20If2hQ==", + "dev": true, + "funding": [ + { + "type": "individual", + "url": "https://github.com/sponsors/ethers-io/" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "license": "MIT", + "dependencies": { + "@adraffy/ens-normalize": "1.10.1", + "@noble/curves": "1.2.0", + "@noble/hashes": "1.3.2", + "@types/node": "22.7.5", + "aes-js": "4.0.0-beta.5", + "tslib": "2.7.0", + "ws": "8.17.1" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@terminal3/revoke_vc/node_modules/ethers/node_modules/@noble/curves": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@noble/curves/-/curves-1.2.0.tgz", + "integrity": "sha512-oYclrNgRaM9SsBUBVbb8M6DTV7ZHRTKugureoYEncY5c65HOmRzvSiTE3y5CYaPYJA/GVkrhXEoF0M3Ya9PMnw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@noble/hashes": "1.3.2" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + } + }, + "node_modules/@terminal3/revoke_vc/node_modules/tslib": { + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.7.0.tgz", + "integrity": "sha512-gLXCKdN1/j47AiHiOkJN69hJmcbGTHI0ImLmbYLHykhgeN0jVGola9yVjFgzCUklsZQMW55o+dW7IXv3RCXDzA==", + "dev": true, + "license": "0BSD" + }, + "node_modules/@terminal3/revoke_vc/node_modules/undici-types": { + "version": "6.19.8", + "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.19.8.tgz", + "integrity": "sha512-ve2KP6f/JnbPBFyobGHuerC9g1FYGn/F8n1LWTwNxCEzd6IfqTwUQcNXgEtmmQ6DlRrC1hrSrBnCZPokRrDHjw==", + "dev": true, + "license": "MIT" + }, + "node_modules/@terminal3/revoke_vc/node_modules/ws": { + "version": "8.17.1", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.17.1.tgz", + "integrity": "sha512-6XQFvXTkbfUOZOKKILFG1PDK2NDQs4azKQl26T0YS5CxqWLgXajbPZ+h4gZekJyRqFU8pvnbAbbs/3TgRPy+GQ==", + "dev": true, + "license": "MIT", + "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 + } + } + }, + "node_modules/@terminal3/vc_core": { + "version": "0.0.28", + "resolved": "https://registry.npmjs.org/@terminal3/vc_core/-/vc_core-0.0.28.tgz", + "integrity": "sha512-otpYZomcZIccRS0p1HDrRv9Rl9eLpI/KqGXr3pmkq7KtpuACQhK/ZLqXpVAdq6nuhhpL7ifps/AlB90X0bdplQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "did-jwt": "^8.0.4", + "ethers": "^6.13.1", + "uuid": "^10.0.0" + } + }, + "node_modules/@terminal3/vc_core/node_modules/@adraffy/ens-normalize": { + "version": "1.10.1", + "resolved": "https://registry.npmjs.org/@adraffy/ens-normalize/-/ens-normalize-1.10.1.tgz", + "integrity": "sha512-96Z2IP3mYmF1Xg2cDm8f1gWGf/HUVedQ3FMifV4kG/PQ4yEP51xDtRAEfhVNt5f/uzpNkZHwWQuUcu6D6K+Ekw==", + "dev": true, + "license": "MIT" + }, + "node_modules/@terminal3/vc_core/node_modules/@noble/curves": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@noble/curves/-/curves-1.2.0.tgz", + "integrity": "sha512-oYclrNgRaM9SsBUBVbb8M6DTV7ZHRTKugureoYEncY5c65HOmRzvSiTE3y5CYaPYJA/GVkrhXEoF0M3Ya9PMnw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@noble/hashes": "1.3.2" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + } + }, + "node_modules/@terminal3/vc_core/node_modules/@noble/hashes": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.3.2.tgz", + "integrity": "sha512-MVC8EAQp7MvEcm30KWENFjgR+Mkmf+D189XJTkFIlwohU5hcBbn1ZkKq7KVTi2Hme3PMGF390DaL52beVrIihQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 16" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + } + }, + "node_modules/@terminal3/vc_core/node_modules/@types/node": { + "version": "22.7.5", + "resolved": "https://registry.npmjs.org/@types/node/-/node-22.7.5.tgz", + "integrity": "sha512-jML7s2NAzMWc//QSJ1a3prpk78cOPchGvXJsC3C6R6PSMoooztvRVQEz89gmBTBY1SPMaqo5teB4uNHPdetShQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "undici-types": "~6.19.2" + } + }, + "node_modules/@terminal3/vc_core/node_modules/aes-js": { + "version": "4.0.0-beta.5", + "resolved": "https://registry.npmjs.org/aes-js/-/aes-js-4.0.0-beta.5.tgz", + "integrity": "sha512-G965FqalsNyrPqgEGON7nIx1e/OVENSgiEIzyC63haUMuvNnwIgIjMs52hlTCKhkBny7A2ORNlfY9Zu+jmGk1Q==", + "dev": true, + "license": "MIT" + }, + "node_modules/@terminal3/vc_core/node_modules/ethers": { + "version": "6.15.0", + "resolved": "https://registry.npmjs.org/ethers/-/ethers-6.15.0.tgz", + "integrity": "sha512-Kf/3ZW54L4UT0pZtsY/rf+EkBU7Qi5nnhonjUb8yTXcxH3cdcWrV2cRyk0Xk/4jK6OoHhxxZHriyhje20If2hQ==", + "dev": true, + "funding": [ + { + "type": "individual", + "url": "https://github.com/sponsors/ethers-io/" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "license": "MIT", + "dependencies": { + "@adraffy/ens-normalize": "1.10.1", + "@noble/curves": "1.2.0", + "@noble/hashes": "1.3.2", + "@types/node": "22.7.5", + "aes-js": "4.0.0-beta.5", + "tslib": "2.7.0", + "ws": "8.17.1" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@terminal3/vc_core/node_modules/tslib": { + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.7.0.tgz", + "integrity": "sha512-gLXCKdN1/j47AiHiOkJN69hJmcbGTHI0ImLmbYLHykhgeN0jVGola9yVjFgzCUklsZQMW55o+dW7IXv3RCXDzA==", + "dev": true, + "license": "0BSD" + }, + "node_modules/@terminal3/vc_core/node_modules/undici-types": { + "version": "6.19.8", + "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.19.8.tgz", + "integrity": "sha512-ve2KP6f/JnbPBFyobGHuerC9g1FYGn/F8n1LWTwNxCEzd6IfqTwUQcNXgEtmmQ6DlRrC1hrSrBnCZPokRrDHjw==", + "dev": true, + "license": "MIT" + }, + "node_modules/@terminal3/vc_core/node_modules/uuid": { + "version": "10.0.0", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-10.0.0.tgz", + "integrity": "sha512-8XkAphELsDnEGrDxUOHB3RGvXz6TeuYSGEZBOjtTtPm2lwhGBjLgOzLHB63IUWfBpNucQjND6d3AOudO+H3RWQ==", + "dev": true, + "funding": [ + "https://github.com/sponsors/broofa", + "https://github.com/sponsors/ctavan" + ], + "license": "MIT", + "bin": { + "uuid": "dist/bin/uuid" + } + }, + "node_modules/@terminal3/vc_core/node_modules/ws": { + "version": "8.17.1", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.17.1.tgz", + "integrity": "sha512-6XQFvXTkbfUOZOKKILFG1PDK2NDQs4azKQl26T0YS5CxqWLgXajbPZ+h4gZekJyRqFU8pvnbAbbs/3TgRPy+GQ==", + "dev": true, + "license": "MIT", + "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 + } + } + }, + "node_modules/@terminal3/verify_vc": { + "version": "0.0.20", + "resolved": "https://registry.npmjs.org/@terminal3/verify_vc/-/verify_vc-0.0.20.tgz", + "integrity": "sha512-ATonhxSidEi0NQ0ogGLuu72LqZle4N5bDx0KOEzwU7WLGsU0bWyvlkLS39EWoHZkPjI7idm/renqBlKCS8jMnw==", + "license": "MIT", + "dependencies": { + "@noble/curves": "^1.4.2", + "@terminal3/bbs_vc": "0.2.18", + "@terminal3/ecdsa_vc": "0.1.16", + "@terminal3/vc_core": "0.0.19", + "did-jwt": "^8.0.4", + "ethers": "^6.13.1" + } + }, + "node_modules/@terminal3/verify_vc_core": { + "version": "0.0.28", + "resolved": "https://registry.npmjs.org/@terminal3/verify_vc_core/-/verify_vc_core-0.0.28.tgz", + "integrity": "sha512-B76AziSxFd16LsLjdIeM5R94zckp+9SD67FkQlP1PKV/pQi62lBlBoWDMYrk5l0ZvOMDgwrVKxStuJivgZPkIA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@noble/curves": "^1.4.2", + "@terminal3/revoke_vc": "0.1.24", + "@terminal3/vc_core": "0.0.28", + "did-jwt": "^8.0.4", + "ethers": "^6.13.1" + } + }, + "node_modules/@terminal3/verify_vc_core/node_modules/@adraffy/ens-normalize": { + "version": "1.10.1", + "resolved": "https://registry.npmjs.org/@adraffy/ens-normalize/-/ens-normalize-1.10.1.tgz", + "integrity": "sha512-96Z2IP3mYmF1Xg2cDm8f1gWGf/HUVedQ3FMifV4kG/PQ4yEP51xDtRAEfhVNt5f/uzpNkZHwWQuUcu6D6K+Ekw==", + "dev": true, + "license": "MIT" + }, + "node_modules/@terminal3/verify_vc_core/node_modules/@noble/hashes": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.3.2.tgz", + "integrity": "sha512-MVC8EAQp7MvEcm30KWENFjgR+Mkmf+D189XJTkFIlwohU5hcBbn1ZkKq7KVTi2Hme3PMGF390DaL52beVrIihQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 16" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + } + }, + "node_modules/@terminal3/verify_vc_core/node_modules/@types/node": { + "version": "22.7.5", + "resolved": "https://registry.npmjs.org/@types/node/-/node-22.7.5.tgz", + "integrity": "sha512-jML7s2NAzMWc//QSJ1a3prpk78cOPchGvXJsC3C6R6PSMoooztvRVQEz89gmBTBY1SPMaqo5teB4uNHPdetShQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "undici-types": "~6.19.2" + } + }, + "node_modules/@terminal3/verify_vc_core/node_modules/aes-js": { + "version": "4.0.0-beta.5", + "resolved": "https://registry.npmjs.org/aes-js/-/aes-js-4.0.0-beta.5.tgz", + "integrity": "sha512-G965FqalsNyrPqgEGON7nIx1e/OVENSgiEIzyC63haUMuvNnwIgIjMs52hlTCKhkBny7A2ORNlfY9Zu+jmGk1Q==", + "dev": true, + "license": "MIT" + }, + "node_modules/@terminal3/verify_vc_core/node_modules/ethers": { + "version": "6.15.0", + "resolved": "https://registry.npmjs.org/ethers/-/ethers-6.15.0.tgz", + "integrity": "sha512-Kf/3ZW54L4UT0pZtsY/rf+EkBU7Qi5nnhonjUb8yTXcxH3cdcWrV2cRyk0Xk/4jK6OoHhxxZHriyhje20If2hQ==", + "dev": true, + "funding": [ + { + "type": "individual", + "url": "https://github.com/sponsors/ethers-io/" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "license": "MIT", + "dependencies": { + "@adraffy/ens-normalize": "1.10.1", + "@noble/curves": "1.2.0", + "@noble/hashes": "1.3.2", + "@types/node": "22.7.5", + "aes-js": "4.0.0-beta.5", + "tslib": "2.7.0", + "ws": "8.17.1" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@terminal3/verify_vc_core/node_modules/ethers/node_modules/@noble/curves": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@noble/curves/-/curves-1.2.0.tgz", + "integrity": "sha512-oYclrNgRaM9SsBUBVbb8M6DTV7ZHRTKugureoYEncY5c65HOmRzvSiTE3y5CYaPYJA/GVkrhXEoF0M3Ya9PMnw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@noble/hashes": "1.3.2" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + } + }, + "node_modules/@terminal3/verify_vc_core/node_modules/tslib": { + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.7.0.tgz", + "integrity": "sha512-gLXCKdN1/j47AiHiOkJN69hJmcbGTHI0ImLmbYLHykhgeN0jVGola9yVjFgzCUklsZQMW55o+dW7IXv3RCXDzA==", + "dev": true, + "license": "0BSD" + }, + "node_modules/@terminal3/verify_vc_core/node_modules/undici-types": { + "version": "6.19.8", + "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.19.8.tgz", + "integrity": "sha512-ve2KP6f/JnbPBFyobGHuerC9g1FYGn/F8n1LWTwNxCEzd6IfqTwUQcNXgEtmmQ6DlRrC1hrSrBnCZPokRrDHjw==", + "dev": true, + "license": "MIT" + }, + "node_modules/@terminal3/verify_vc_core/node_modules/ws": { + "version": "8.17.1", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.17.1.tgz", + "integrity": "sha512-6XQFvXTkbfUOZOKKILFG1PDK2NDQs4azKQl26T0YS5CxqWLgXajbPZ+h4gZekJyRqFU8pvnbAbbs/3TgRPy+GQ==", + "dev": true, + "license": "MIT", + "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 + } + } + }, + "node_modules/@terminal3/verify_vc/node_modules/@adraffy/ens-normalize": { + "version": "1.10.1", + "resolved": "https://registry.npmjs.org/@adraffy/ens-normalize/-/ens-normalize-1.10.1.tgz", + "integrity": "sha512-96Z2IP3mYmF1Xg2cDm8f1gWGf/HUVedQ3FMifV4kG/PQ4yEP51xDtRAEfhVNt5f/uzpNkZHwWQuUcu6D6K+Ekw==", + "license": "MIT" + }, + "node_modules/@terminal3/verify_vc/node_modules/@noble/hashes": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.3.2.tgz", + "integrity": "sha512-MVC8EAQp7MvEcm30KWENFjgR+Mkmf+D189XJTkFIlwohU5hcBbn1ZkKq7KVTi2Hme3PMGF390DaL52beVrIihQ==", + "license": "MIT", + "engines": { + "node": ">= 16" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + } + }, + "node_modules/@terminal3/verify_vc/node_modules/@terminal3/ecdsa_vc": { + "version": "0.1.16", + "resolved": "https://registry.npmjs.org/@terminal3/ecdsa_vc/-/ecdsa_vc-0.1.16.tgz", + "integrity": "sha512-CLRYHAMnlGwRixbZ8Rshvu/Ykz+oIrYLASqkKIzKCEoc/PoGw2jPjDCetL+POn7WQ/RYvg+fnQlnhM1p2ZZtEw==", + "license": "MIT", + "dependencies": { + "@terminal3/vc_core": "0.0.19", + "@terminal3/verify_vc_core": "0.0.19", + "ethers": "^6.11.1" + } + }, + "node_modules/@terminal3/verify_vc/node_modules/@terminal3/revoke_vc": { + "version": "0.1.15", + "resolved": "https://registry.npmjs.org/@terminal3/revoke_vc/-/revoke_vc-0.1.15.tgz", + "integrity": "sha512-/Y4svhJcsRe/mMlZtPRtInpuctMxcSVsaLcpVnbC1KDksD4FiVWby/Cknb8LItFN+NgqjgJ5JFutFmEjrqA2Yg==", + "license": "MIT", + "dependencies": { + "@noble/curves": "^1.4.2", + "@terminal3/vc_core": "0.0.19", + "did-jwt": "^8.0.4", + "ethers": "^6.13.1" + } + }, + "node_modules/@terminal3/verify_vc/node_modules/@terminal3/vc_core": { + "version": "0.0.19", + "resolved": "https://registry.npmjs.org/@terminal3/vc_core/-/vc_core-0.0.19.tgz", + "integrity": "sha512-65JJePRqftFq5nIsBU9/bsUUlMBKzTQU14Ml037g0QUnsrcHgSWLM/lma3YNv0qx03yWVSirEicLC9ZD4Bj+MQ==", + "license": "MIT", + "dependencies": { + "did-jwt": "^8.0.4", + "ethers": "^6.13.1", + "uuid": "^10.0.0" + } + }, + "node_modules/@terminal3/verify_vc/node_modules/@terminal3/verify_vc_core": { + "version": "0.0.19", + "resolved": "https://registry.npmjs.org/@terminal3/verify_vc_core/-/verify_vc_core-0.0.19.tgz", + "integrity": "sha512-esUoQKSAzjOwL4Qyea0a7zYt8piuHRLmZd+3CjXlpbSDylpjWJBW6pxFvkR/UVUiXc9cXrdbrJwL0JbCGwMPWw==", + "license": "MIT", + "dependencies": { + "@noble/curves": "^1.4.2", + "@terminal3/revoke_vc": "0.1.15", + "@terminal3/vc_core": "0.0.19", + "did-jwt": "^8.0.4", + "ethers": "^6.13.1" + } + }, + "node_modules/@terminal3/verify_vc/node_modules/@types/node": { + "version": "22.7.5", + "resolved": "https://registry.npmjs.org/@types/node/-/node-22.7.5.tgz", + "integrity": "sha512-jML7s2NAzMWc//QSJ1a3prpk78cOPchGvXJsC3C6R6PSMoooztvRVQEz89gmBTBY1SPMaqo5teB4uNHPdetShQ==", + "license": "MIT", + "dependencies": { + "undici-types": "~6.19.2" + } + }, + "node_modules/@terminal3/verify_vc/node_modules/aes-js": { + "version": "4.0.0-beta.5", + "resolved": "https://registry.npmjs.org/aes-js/-/aes-js-4.0.0-beta.5.tgz", + "integrity": "sha512-G965FqalsNyrPqgEGON7nIx1e/OVENSgiEIzyC63haUMuvNnwIgIjMs52hlTCKhkBny7A2ORNlfY9Zu+jmGk1Q==", + "license": "MIT" + }, + "node_modules/@terminal3/verify_vc/node_modules/ethers": { + "version": "6.15.0", + "resolved": "https://registry.npmjs.org/ethers/-/ethers-6.15.0.tgz", + "integrity": "sha512-Kf/3ZW54L4UT0pZtsY/rf+EkBU7Qi5nnhonjUb8yTXcxH3cdcWrV2cRyk0Xk/4jK6OoHhxxZHriyhje20If2hQ==", + "funding": [ + { + "type": "individual", + "url": "https://github.com/sponsors/ethers-io/" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "license": "MIT", + "dependencies": { + "@adraffy/ens-normalize": "1.10.1", + "@noble/curves": "1.2.0", + "@noble/hashes": "1.3.2", + "@types/node": "22.7.5", + "aes-js": "4.0.0-beta.5", + "tslib": "2.7.0", + "ws": "8.17.1" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@terminal3/verify_vc/node_modules/ethers/node_modules/@noble/curves": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@noble/curves/-/curves-1.2.0.tgz", + "integrity": "sha512-oYclrNgRaM9SsBUBVbb8M6DTV7ZHRTKugureoYEncY5c65HOmRzvSiTE3y5CYaPYJA/GVkrhXEoF0M3Ya9PMnw==", + "license": "MIT", + "dependencies": { + "@noble/hashes": "1.3.2" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + } + }, + "node_modules/@terminal3/verify_vc/node_modules/tslib": { + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.7.0.tgz", + "integrity": "sha512-gLXCKdN1/j47AiHiOkJN69hJmcbGTHI0ImLmbYLHykhgeN0jVGola9yVjFgzCUklsZQMW55o+dW7IXv3RCXDzA==", + "license": "0BSD" + }, + "node_modules/@terminal3/verify_vc/node_modules/undici-types": { + "version": "6.19.8", + "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.19.8.tgz", + "integrity": "sha512-ve2KP6f/JnbPBFyobGHuerC9g1FYGn/F8n1LWTwNxCEzd6IfqTwUQcNXgEtmmQ6DlRrC1hrSrBnCZPokRrDHjw==", + "license": "MIT" + }, + "node_modules/@terminal3/verify_vc/node_modules/uuid": { + "version": "10.0.0", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-10.0.0.tgz", + "integrity": "sha512-8XkAphELsDnEGrDxUOHB3RGvXz6TeuYSGEZBOjtTtPm2lwhGBjLgOzLHB63IUWfBpNucQjND6d3AOudO+H3RWQ==", + "funding": [ + "https://github.com/sponsors/broofa", + "https://github.com/sponsors/ctavan" + ], + "license": "MIT", + "bin": { + "uuid": "dist/bin/uuid" + } + }, + "node_modules/@terminal3/verify_vc/node_modules/ws": { + "version": "8.17.1", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.17.1.tgz", + "integrity": "sha512-6XQFvXTkbfUOZOKKILFG1PDK2NDQs4azKQl26T0YS5CxqWLgXajbPZ+h4gZekJyRqFU8pvnbAbbs/3TgRPy+GQ==", + "license": "MIT", + "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 + } + } + }, + "node_modules/@testing-library/dom": { + "version": "10.4.1", + "resolved": "https://registry.npmjs.org/@testing-library/dom/-/dom-10.4.1.tgz", + "integrity": "sha512-o4PXJQidqJl82ckFaXUeoAW+XysPLauYI43Abki5hABd853iMhitooc6znOnczgbTYmEP6U6/y1ZyKAIsvMKGg==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "@babel/code-frame": "^7.10.4", + "@babel/runtime": "^7.12.5", + "@types/aria-query": "^5.0.1", + "aria-query": "5.3.0", + "dom-accessibility-api": "^0.5.9", + "lz-string": "^1.5.0", + "picocolors": "1.1.1", + "pretty-format": "^27.0.2" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/@testing-library/dom/node_modules/aria-query": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/aria-query/-/aria-query-5.3.0.tgz", + "integrity": "sha512-b0P0sZPKtyu8HkeRAfCq0IfURZK+SuwMjY1UXGBU27wpAiTwQAIlq56IbIO+ytk/JjS1fMR14ee5WBBfKi5J6A==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "dequal": "^2.0.3" + } + }, + "node_modules/@testing-library/dom/node_modules/dom-accessibility-api": { + "version": "0.5.16", + "resolved": "https://registry.npmjs.org/dom-accessibility-api/-/dom-accessibility-api-0.5.16.tgz", + "integrity": "sha512-X7BJ2yElsnOJ30pZF4uIIDfBEVgF4XEBxL9Bxhy6dnrm5hkzqmsWHGTiHqRiITNhMyFLyAiWndIJP7Z1NTteDg==", + "dev": true, + "license": "MIT" + }, + "node_modules/@testing-library/dom/node_modules/pretty-format": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-27.5.1.tgz", + "integrity": "sha512-Qb1gy5OrP5+zDf2Bvnzdl3jsTf1qXVMazbvCoKhtKqVs4/YK4ozX4gKQJJVyNe+cajNPn0KoC0MC3FUmaHWEmQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-regex": "^5.0.1", + "ansi-styles": "^5.0.0", + "react-is": "^17.0.1" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/@testing-library/jest-dom": { + "version": "5.17.0", + "resolved": "https://registry.npmjs.org/@testing-library/jest-dom/-/jest-dom-5.17.0.tgz", + "integrity": "sha512-ynmNeT7asXyH3aSVv4vvX4Rb+0qjOhdNHnO/3vuZNqPmhDpV/+rCSGwQ7bLcmU2cJ4dvoheIO85LQj0IbJHEtg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@adobe/css-tools": "^4.0.1", + "@babel/runtime": "^7.9.2", + "@types/testing-library__jest-dom": "^5.9.1", + "aria-query": "^5.0.0", + "chalk": "^3.0.0", + "css.escape": "^1.5.1", + "dom-accessibility-api": "^0.5.6", + "lodash": "^4.17.15", + "redent": "^3.0.0" + }, + "engines": { + "node": ">=8", + "npm": ">=6", + "yarn": ">=1" + } + }, + "node_modules/@testing-library/jest-dom/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "license": "MIT", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/@testing-library/jest-dom/node_modules/chalk": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-3.0.0.tgz", + "integrity": "sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@testing-library/jest-dom/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/@testing-library/jest-dom/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true, + "license": "MIT" + }, + "node_modules/@testing-library/jest-dom/node_modules/dom-accessibility-api": { + "version": "0.5.16", + "resolved": "https://registry.npmjs.org/dom-accessibility-api/-/dom-accessibility-api-0.5.16.tgz", + "integrity": "sha512-X7BJ2yElsnOJ30pZF4uIIDfBEVgF4XEBxL9Bxhy6dnrm5hkzqmsWHGTiHqRiITNhMyFLyAiWndIJP7Z1NTteDg==", + "dev": true, + "license": "MIT" + }, + "node_modules/@testing-library/react": { + "version": "14.3.1", + "resolved": "https://registry.npmjs.org/@testing-library/react/-/react-14.3.1.tgz", + "integrity": "sha512-H99XjUhWQw0lTgyMN05W3xQG1Nh4lq574D8keFf1dDoNTJgp66VbJozRaczoF+wsiaPJNt/TcnfpLGufGxSrZQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.12.5", + "@testing-library/dom": "^9.0.0", + "@types/react-dom": "^18.0.0" + }, + "engines": { + "node": ">=14" + }, + "peerDependencies": { + "react": "^18.0.0", + "react-dom": "^18.0.0" + } + }, + "node_modules/@testing-library/react/node_modules/@testing-library/dom": { + "version": "9.3.4", + "resolved": "https://registry.npmjs.org/@testing-library/dom/-/dom-9.3.4.tgz", + "integrity": "sha512-FlS4ZWlp97iiNWig0Muq8p+3rVDjRiYE+YKGbAqXOu9nwJFFOdL00kFpz42M+4huzYi86vAK1sOOfyOG45muIQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/code-frame": "^7.10.4", + "@babel/runtime": "^7.12.5", + "@types/aria-query": "^5.0.1", + "aria-query": "5.1.3", + "chalk": "^4.1.0", + "dom-accessibility-api": "^0.5.9", + "lz-string": "^1.5.0", + "pretty-format": "^27.0.2" + }, + "engines": { + "node": ">=14" + } + }, + "node_modules/@testing-library/react/node_modules/aria-query": { + "version": "5.1.3", + "resolved": "https://registry.npmjs.org/aria-query/-/aria-query-5.1.3.tgz", + "integrity": "sha512-R5iJ5lkuHybztUfuOAznmboyjWq8O6sqNqtK7CLOqdydi54VNbORp49mb14KbWgG1QD3JFO9hJdZ+y4KutfdOQ==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "deep-equal": "^2.0.5" + } + }, + "node_modules/@testing-library/react/node_modules/dom-accessibility-api": { + "version": "0.5.16", + "resolved": "https://registry.npmjs.org/dom-accessibility-api/-/dom-accessibility-api-0.5.16.tgz", + "integrity": "sha512-X7BJ2yElsnOJ30pZF4uIIDfBEVgF4XEBxL9Bxhy6dnrm5hkzqmsWHGTiHqRiITNhMyFLyAiWndIJP7Z1NTteDg==", + "dev": true, + "license": "MIT" + }, + "node_modules/@testing-library/react/node_modules/pretty-format": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-27.5.1.tgz", + "integrity": "sha512-Qb1gy5OrP5+zDf2Bvnzdl3jsTf1qXVMazbvCoKhtKqVs4/YK4ozX4gKQJJVyNe+cajNPn0KoC0MC3FUmaHWEmQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-regex": "^5.0.1", + "ansi-styles": "^5.0.0", + "react-is": "^17.0.1" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/@testing-library/user-event": { + "version": "14.6.1", + "resolved": "https://registry.npmjs.org/@testing-library/user-event/-/user-event-14.6.1.tgz", + "integrity": "sha512-vq7fv0rnt+QTXgPxr5Hjc210p6YKq2kmdziLgnsZGgLJ9e6VAShx1pACLuRjd/AS/sr7phAR58OIIpf0LlmQNw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12", + "npm": ">=6" + }, + "peerDependencies": { + "@testing-library/dom": ">=7.21.4" + } + }, + "node_modules/@thomaschaplin/cusip-generator": { + "version": "1.0.22", + "resolved": "https://registry.npmjs.org/@thomaschaplin/cusip-generator/-/cusip-generator-1.0.22.tgz", + "integrity": "sha512-162DBgkPGQI0otk/aW8z7XjyYM1fEOUf+p4yiEgJZhKupSWuwSNcsIcAi4fDZvP/XkI/pBF83aXUlYkWFMqA2Q==", + "dev": true, + "license": "MIT" + }, + "node_modules/@thomaschaplin/isin-generator": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/@thomaschaplin/isin-generator/-/isin-generator-1.0.3.tgz", + "integrity": "sha512-M1vm7MsTdLhOybs21dR1M0/aUAwpM2B7qZvcVMTzxBxnjzwaqCr1EtxMUjecCOoxViIA6A/HO7emlfKUGODBNQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@thomaschaplin/cusip-generator": "^1.0.1" + } + }, + "node_modules/@tokenysolutions/t-rex": { + "version": "4.1.6", + "resolved": "https://registry.npmjs.org/@tokenysolutions/t-rex/-/t-rex-4.1.6.tgz", + "integrity": "sha512-GNmVAC11cqwF6bmVCl0yhaVfPLBptF4K0vmepghTPbSogky1WG+38h7RR/p7909Si2JgswreeeLZZyBLN0KZrg==", + "dev": true, + "license": "SEE LICENSE IN LICENSE.md" + }, + "node_modules/@tootallnate/once": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@tootallnate/once/-/once-2.0.0.tgz", + "integrity": "sha512-XCuKFP5PS55gnMVu3dty8KPatLqUoy/ZYzDzAGCQ8JNFCkLXzmI7vNHCR+XpbZaMWQK/vQubr7PkYq8g470J/A==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 10" + } + }, + "node_modules/@trysound/sax": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/@trysound/sax/-/sax-0.2.0.tgz", + "integrity": "sha512-L7z9BgrNEcYyUYtF+HaEfiS5ebkh9jXqbszz7pC0hRBPaatV0XjSD3+eHrpqFemQfgwiFF0QPIarnIihIDn7OA==", + "license": "ISC", + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/@tsconfig/node10": { + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/@tsconfig/node10/-/node10-1.0.11.tgz", + "integrity": "sha512-DcRjDCujK/kCk/cUe8Xz8ZSpm8mS3mNNpta+jGCA6USEDfktlNvm1+IuZ9eTcDbNk41BHwpHHeW+N1lKCz4zOw==", + "devOptional": true, + "license": "MIT" + }, + "node_modules/@tsconfig/node12": { + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/@tsconfig/node12/-/node12-1.0.11.tgz", + "integrity": "sha512-cqefuRsh12pWyGsIoBKJA9luFu3mRxCA+ORZvA4ktLSzIuCUtWVxGIuXigEwO5/ywWFMZ2QEGKWvkZG1zDMTag==", + "devOptional": true, + "license": "MIT" + }, + "node_modules/@tsconfig/node14": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/@tsconfig/node14/-/node14-1.0.3.tgz", + "integrity": "sha512-ysT8mhdixWK6Hw3i1V2AeRqZ5WfXg1G43mqoYlM2nc6388Fq5jcXyr5mRsqViLx/GJYdoL0bfXD8nmF+Zn/Iow==", + "devOptional": true, + "license": "MIT" + }, + "node_modules/@tsconfig/node16": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/@tsconfig/node16/-/node16-1.0.4.tgz", + "integrity": "sha512-vxhUy4J8lyeyinH7Azl1pdd43GJhZH/tP2weN8TntQblOY+A0XbT8DJk1/oCPuOOyg/Ja757rG0CgHcWC8OfMA==", + "devOptional": true, + "license": "MIT" + }, + "node_modules/@typechain/ethers-v5": { + "version": "10.2.1", + "resolved": "https://registry.npmjs.org/@typechain/ethers-v5/-/ethers-v5-10.2.1.tgz", + "integrity": "sha512-n3tQmCZjRE6IU4h6lqUGiQ1j866n5MTCBJreNEHHVWXa2u9GJTaeYyU1/k+1qLutkyw+sS6VAN+AbeiTqsxd/A==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "lodash": "^4.17.15", + "ts-essentials": "^7.0.1" + }, + "peerDependencies": { + "@ethersproject/abi": "^5.0.0", + "@ethersproject/providers": "^5.0.0", + "ethers": "^5.1.3", + "typechain": "^8.1.1", + "typescript": ">=4.3.0" + } + }, + "node_modules/@typechain/hardhat": { + "version": "6.1.6", + "resolved": "https://registry.npmjs.org/@typechain/hardhat/-/hardhat-6.1.6.tgz", + "integrity": "sha512-BiVnegSs+ZHVymyidtK472syodx1sXYlYJJixZfRstHVGYTi8V1O7QG4nsjyb0PC/LORcq7sfBUcHto1y6UgJA==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "fs-extra": "^9.1.0" + }, + "peerDependencies": { + "@ethersproject/abi": "^5.4.7", + "@ethersproject/providers": "^5.4.7", + "@typechain/ethers-v5": "^10.2.1", + "ethers": "^5.4.7", + "hardhat": "^2.9.9", + "typechain": "^8.1.1" + } + }, + "node_modules/@typechain/hardhat/node_modules/fs-extra": { + "version": "9.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz", + "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "at-least-node": "^1.0.0", + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@typechain/hardhat/node_modules/jsonfile": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.2.0.tgz", + "integrity": "sha512-FGuPw30AdOIUTRMC2OMRtQV+jkVj2cfPqSeWXv1NEAJ1qZ5zb1X6z1mFhbfOB/iy3ssJCD+3KuZ8r8C3uVFlAg==", + "dev": true, + "license": "MIT", + "dependencies": { + "universalify": "^2.0.0" + }, + "optionalDependencies": { + "graceful-fs": "^4.1.6" + } + }, + "node_modules/@typechain/hardhat/node_modules/universalify": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.1.tgz", + "integrity": "sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 10.0.0" + } + }, + "node_modules/@types/add": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/@types/add/-/add-2.0.3.tgz", + "integrity": "sha512-P4sSSgzxhwhXll/HYhHAqLv7nAACxFNFtwsiur/RH58rL1RBn21ZrexPIki8xh1NIziub7ZRXLf2K2IKn4XVYg==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/aria-query": { + "version": "5.0.4", + "resolved": "https://registry.npmjs.org/@types/aria-query/-/aria-query-5.0.4.tgz", + "integrity": "sha512-rfT93uj5s0PRL7EzccGMs3brplhcrghnDoV26NqKhCAS1hVo+WdNsPvE/yb6ilfr5hi2MEk6d5EWJTKdxg8jVw==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/babel__core": { + "version": "7.20.5", + "resolved": "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.20.5.tgz", + "integrity": "sha512-qoQprZvz5wQFJwMDqeseRXWv3rqMvhgpbXFfVyWhbx9X47POIA6i/+dXefEmZKoAgOaTdaIgNSMqMIU61yRyzA==", + "license": "MIT", + "dependencies": { + "@babel/parser": "^7.20.7", + "@babel/types": "^7.20.7", + "@types/babel__generator": "*", + "@types/babel__template": "*", + "@types/babel__traverse": "*" + } + }, + "node_modules/@types/babel__generator": { + "version": "7.27.0", + "resolved": "https://registry.npmjs.org/@types/babel__generator/-/babel__generator-7.27.0.tgz", + "integrity": "sha512-ufFd2Xi92OAVPYsy+P4n7/U7e68fex0+Ee8gSG9KX7eo084CWiQ4sdxktvdl0bOPupXtVJPY19zk6EwWqUQ8lg==", + "license": "MIT", + "dependencies": { + "@babel/types": "^7.0.0" + } + }, + "node_modules/@types/babel__template": { + "version": "7.4.4", + "resolved": "https://registry.npmjs.org/@types/babel__template/-/babel__template-7.4.4.tgz", + "integrity": "sha512-h/NUaSyG5EyxBIp8YRxo4RMe2/qQgvyowRwVMzhYhBCONbW8PUsg4lkFMrhgZhUe5z3L3MiLDuvyJ/CaPa2A8A==", + "license": "MIT", + "dependencies": { + "@babel/parser": "^7.1.0", + "@babel/types": "^7.0.0" + } + }, + "node_modules/@types/babel__traverse": { + "version": "7.28.0", + "resolved": "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.28.0.tgz", + "integrity": "sha512-8PvcXf70gTDZBgt9ptxJ8elBeBjcLOAcOtoO/mPJjtji1+CdGbHgm77om1GrsPxsiE+uXIpNSK64UYaIwQXd4Q==", + "license": "MIT", + "dependencies": { + "@babel/types": "^7.28.2" + } + }, + "node_modules/@types/bn.js": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/@types/bn.js/-/bn.js-5.2.0.tgz", + "integrity": "sha512-DLbJ1BPqxvQhIGbeu8VbUC1DiAiahHtAYvA0ZEAa4P31F7IaArc8z3C3BRQdWX4mtLQuABG4yzp76ZrS02Ui1Q==", + "license": "MIT", + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/body-parser": { + "version": "1.19.6", + "resolved": "https://registry.npmjs.org/@types/body-parser/-/body-parser-1.19.6.tgz", + "integrity": "sha512-HLFeCYgz89uk22N5Qg3dvGvsv46B8GLvKKo1zKG4NybA8U2DiEO3w9lqGg29t/tfLRJpJ6iQxnVw4OnB7MoM9g==", + "license": "MIT", + "dependencies": { + "@types/connect": "*", + "@types/node": "*" + } + }, + "node_modules/@types/bonjour": { + "version": "3.5.13", + "resolved": "https://registry.npmjs.org/@types/bonjour/-/bonjour-3.5.13.tgz", + "integrity": "sha512-z9fJ5Im06zvUL548KvYNecEVlA7cVDkGUi6kZusb04mpyEFKCIZJvloCcmpmLaIahDpOQGHaHmG6imtPMmPXGQ==", + "license": "MIT", + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/chai": { + "version": "4.3.20", + "resolved": "https://registry.npmjs.org/@types/chai/-/chai-4.3.20.tgz", + "integrity": "sha512-/pC9HAB5I/xMlc5FP77qjCnI16ChlJfW0tGa0IUcFn38VJrTV6DeZ60NU5KZBtaOZqjdpwTWohz5HU1RrhiYxQ==", + "dev": true, + "license": "MIT", + "peer": true + }, + "node_modules/@types/chai-as-promised": { + "version": "7.1.8", + "resolved": "https://registry.npmjs.org/@types/chai-as-promised/-/chai-as-promised-7.1.8.tgz", + "integrity": "sha512-ThlRVIJhr69FLlh6IctTXFkmhtP3NpMZ2QGq69StYLyKZFp/HOp1VdKZj7RvfNWYYcJ1xlbLGLLWj1UvP5u/Gw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/chai": "*" + } + }, + "node_modules/@types/concat-stream": { + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/@types/concat-stream/-/concat-stream-1.6.1.tgz", + "integrity": "sha512-eHE4cQPoj6ngxBZMvVf6Hw7Mh4jMW4U9lpGmS5GBPB9RYxlFg+CHaVN7ErNY4W9XfLIEn20b4VDYaIrbq0q4uA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/connect": { + "version": "3.4.38", + "resolved": "https://registry.npmjs.org/@types/connect/-/connect-3.4.38.tgz", + "integrity": "sha512-K6uROf1LD88uDQqJCktA4yzL1YYAK6NgfsI0v/mTgyPKWsX1CnJ0XPSDhViejru1GcRkLWb8RlzFYJRqGUbaug==", + "license": "MIT", + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/connect-history-api-fallback": { + "version": "1.5.4", + "resolved": "https://registry.npmjs.org/@types/connect-history-api-fallback/-/connect-history-api-fallback-1.5.4.tgz", + "integrity": "sha512-n6Cr2xS1h4uAulPRdlw6Jl6s1oG8KrVilPN2yUITEs+K48EzMJJ3W1xy8K5eWuFvjp3R74AOIGSmp2UfBJ8HFw==", + "license": "MIT", + "dependencies": { + "@types/express-serve-static-core": "*", + "@types/node": "*" + } + }, + "node_modules/@types/conventional-commits-parser": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/@types/conventional-commits-parser/-/conventional-commits-parser-5.0.1.tgz", + "integrity": "sha512-7uz5EHdzz2TqoMfV7ee61Egf5y6NkcO4FB/1iCCQnbeiI1F3xzv3vK5dBCXUCLQgGYS+mUeigK1iKQzvED+QnQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/cookiejar": { + "version": "2.1.5", + "resolved": "https://registry.npmjs.org/@types/cookiejar/-/cookiejar-2.1.5.tgz", + "integrity": "sha512-he+DHOWReW0nghN24E1WUqM0efK4kI9oTqDm6XmK8ZPe2djZ90BSNdGnIyCLzCPw7/pogPlGbzI2wHGGmi4O/Q==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/d3": { + "version": "7.4.3", + "resolved": "https://registry.npmjs.org/@types/d3/-/d3-7.4.3.tgz", + "integrity": "sha512-lZXZ9ckh5R8uiFVt8ogUNf+pIrK4EsWrx2Np75WvF/eTpJ0FMHNhjXk8CKEx/+gpHbNQyJWehbFaTvqmHWB3ww==", + "license": "MIT", + "dependencies": { + "@types/d3-array": "*", + "@types/d3-axis": "*", + "@types/d3-brush": "*", + "@types/d3-chord": "*", + "@types/d3-color": "*", + "@types/d3-contour": "*", + "@types/d3-delaunay": "*", + "@types/d3-dispatch": "*", + "@types/d3-drag": "*", + "@types/d3-dsv": "*", + "@types/d3-ease": "*", + "@types/d3-fetch": "*", + "@types/d3-force": "*", + "@types/d3-format": "*", + "@types/d3-geo": "*", + "@types/d3-hierarchy": "*", + "@types/d3-interpolate": "*", + "@types/d3-path": "*", + "@types/d3-polygon": "*", + "@types/d3-quadtree": "*", + "@types/d3-random": "*", + "@types/d3-scale": "*", + "@types/d3-scale-chromatic": "*", + "@types/d3-selection": "*", + "@types/d3-shape": "*", + "@types/d3-time": "*", + "@types/d3-time-format": "*", + "@types/d3-timer": "*", + "@types/d3-transition": "*", + "@types/d3-zoom": "*" + } + }, + "node_modules/@types/d3-array": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/@types/d3-array/-/d3-array-3.2.2.tgz", + "integrity": "sha512-hOLWVbm7uRza0BYXpIIW5pxfrKe0W+D5lrFiAEYR+pb6w3N2SwSMaJbXdUfSEv+dT4MfHBLtn5js0LAWaO6otw==", + "license": "MIT" + }, + "node_modules/@types/d3-axis": { + "version": "3.0.6", + "resolved": "https://registry.npmjs.org/@types/d3-axis/-/d3-axis-3.0.6.tgz", + "integrity": "sha512-pYeijfZuBd87T0hGn0FO1vQ/cgLk6E1ALJjfkC0oJ8cbwkZl3TpgS8bVBLZN+2jjGgg38epgxb2zmoGtSfvgMw==", + "license": "MIT", + "dependencies": { + "@types/d3-selection": "*" + } + }, + "node_modules/@types/d3-brush": { + "version": "3.0.6", + "resolved": "https://registry.npmjs.org/@types/d3-brush/-/d3-brush-3.0.6.tgz", + "integrity": "sha512-nH60IZNNxEcrh6L1ZSMNA28rj27ut/2ZmI3r96Zd+1jrZD++zD3LsMIjWlvg4AYrHn/Pqz4CF3veCxGjtbqt7A==", + "license": "MIT", + "dependencies": { + "@types/d3-selection": "*" + } + }, + "node_modules/@types/d3-chord": { + "version": "3.0.6", + "resolved": "https://registry.npmjs.org/@types/d3-chord/-/d3-chord-3.0.6.tgz", + "integrity": "sha512-LFYWWd8nwfwEmTZG9PfQxd17HbNPksHBiJHaKuY1XeqscXacsS2tyoo6OdRsjf+NQYeB6XrNL3a25E3gH69lcg==", + "license": "MIT" + }, + "node_modules/@types/d3-color": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/@types/d3-color/-/d3-color-3.1.3.tgz", + "integrity": "sha512-iO90scth9WAbmgv7ogoq57O9YpKmFBbmoEoCHDB2xMBY0+/KVrqAaCDyCE16dUspeOvIxFFRI+0sEtqDqy2b4A==", + "license": "MIT" + }, + "node_modules/@types/d3-contour": { + "version": "3.0.6", + "resolved": "https://registry.npmjs.org/@types/d3-contour/-/d3-contour-3.0.6.tgz", + "integrity": "sha512-BjzLgXGnCWjUSYGfH1cpdo41/hgdWETu4YxpezoztawmqsvCeep+8QGfiY6YbDvfgHz/DkjeIkkZVJavB4a3rg==", + "license": "MIT", + "dependencies": { + "@types/d3-array": "*", + "@types/geojson": "*" + } + }, + "node_modules/@types/d3-delaunay": { + "version": "6.0.4", + "resolved": "https://registry.npmjs.org/@types/d3-delaunay/-/d3-delaunay-6.0.4.tgz", + "integrity": "sha512-ZMaSKu4THYCU6sV64Lhg6qjf1orxBthaC161plr5KuPHo3CNm8DTHiLw/5Eq2b6TsNP0W0iJrUOFscY6Q450Hw==", + "license": "MIT" + }, + "node_modules/@types/d3-dispatch": { + "version": "3.0.7", + "resolved": "https://registry.npmjs.org/@types/d3-dispatch/-/d3-dispatch-3.0.7.tgz", + "integrity": "sha512-5o9OIAdKkhN1QItV2oqaE5KMIiXAvDWBDPrD85e58Qlz1c1kI/J0NcqbEG88CoTwJrYe7ntUCVfeUl2UJKbWgA==", + "license": "MIT" + }, + "node_modules/@types/d3-drag": { + "version": "3.0.7", + "resolved": "https://registry.npmjs.org/@types/d3-drag/-/d3-drag-3.0.7.tgz", + "integrity": "sha512-HE3jVKlzU9AaMazNufooRJ5ZpWmLIoc90A37WU2JMmeq28w1FQqCZswHZ3xR+SuxYftzHq6WU6KJHvqxKzTxxQ==", + "license": "MIT", + "dependencies": { + "@types/d3-selection": "*" + } + }, + "node_modules/@types/d3-dsv": { + "version": "3.0.7", + "resolved": "https://registry.npmjs.org/@types/d3-dsv/-/d3-dsv-3.0.7.tgz", + "integrity": "sha512-n6QBF9/+XASqcKK6waudgL0pf/S5XHPPI8APyMLLUHd8NqouBGLsU8MgtO7NINGtPBtk9Kko/W4ea0oAspwh9g==", + "license": "MIT" + }, + "node_modules/@types/d3-ease": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/@types/d3-ease/-/d3-ease-3.0.2.tgz", + "integrity": "sha512-NcV1JjO5oDzoK26oMzbILE6HW7uVXOHLQvHshBUW4UMdZGfiY6v5BeQwh9a9tCzv+CeefZQHJt5SRgK154RtiA==", + "license": "MIT" + }, + "node_modules/@types/d3-fetch": { + "version": "3.0.7", + "resolved": "https://registry.npmjs.org/@types/d3-fetch/-/d3-fetch-3.0.7.tgz", + "integrity": "sha512-fTAfNmxSb9SOWNB9IoG5c8Hg6R+AzUHDRlsXsDZsNp6sxAEOP0tkP3gKkNSO/qmHPoBFTxNrjDprVHDQDvo5aA==", + "license": "MIT", + "dependencies": { + "@types/d3-dsv": "*" + } + }, + "node_modules/@types/d3-force": { + "version": "3.0.10", + "resolved": "https://registry.npmjs.org/@types/d3-force/-/d3-force-3.0.10.tgz", + "integrity": "sha512-ZYeSaCF3p73RdOKcjj+swRlZfnYpK1EbaDiYICEEp5Q6sUiqFaFQ9qgoshp5CzIyyb/yD09kD9o2zEltCexlgw==", + "license": "MIT" + }, + "node_modules/@types/d3-format": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/@types/d3-format/-/d3-format-3.0.4.tgz", + "integrity": "sha512-fALi2aI6shfg7vM5KiR1wNJnZ7r6UuggVqtDA+xiEdPZQwy/trcQaHnwShLuLdta2rTymCNpxYTiMZX/e09F4g==", + "license": "MIT" + }, + "node_modules/@types/d3-geo": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/@types/d3-geo/-/d3-geo-3.1.0.tgz", + "integrity": "sha512-856sckF0oP/diXtS4jNsiQw/UuK5fQG8l/a9VVLeSouf1/PPbBE1i1W852zVwKwYCBkFJJB7nCFTbk6UMEXBOQ==", + "license": "MIT", + "dependencies": { + "@types/geojson": "*" + } + }, + "node_modules/@types/d3-hierarchy": { + "version": "3.1.7", + "resolved": "https://registry.npmjs.org/@types/d3-hierarchy/-/d3-hierarchy-3.1.7.tgz", + "integrity": "sha512-tJFtNoYBtRtkNysX1Xq4sxtjK8YgoWUNpIiUee0/jHGRwqvzYxkq0hGVbbOGSz+JgFxxRu4K8nb3YpG3CMARtg==", + "license": "MIT" + }, + "node_modules/@types/d3-interpolate": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/@types/d3-interpolate/-/d3-interpolate-3.0.4.tgz", + "integrity": "sha512-mgLPETlrpVV1YRJIglr4Ez47g7Yxjl1lj7YKsiMCb27VJH9W8NVM6Bb9d8kkpG/uAQS5AmbA48q2IAolKKo1MA==", + "license": "MIT", + "dependencies": { + "@types/d3-color": "*" + } + }, + "node_modules/@types/d3-path": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/@types/d3-path/-/d3-path-3.1.1.tgz", + "integrity": "sha512-VMZBYyQvbGmWyWVea0EHs/BwLgxc+MKi1zLDCONksozI4YJMcTt8ZEuIR4Sb1MMTE8MMW49v0IwI5+b7RmfWlg==", + "license": "MIT" + }, + "node_modules/@types/d3-polygon": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/@types/d3-polygon/-/d3-polygon-3.0.2.tgz", + "integrity": "sha512-ZuWOtMaHCkN9xoeEMr1ubW2nGWsp4nIql+OPQRstu4ypeZ+zk3YKqQT0CXVe/PYqrKpZAi+J9mTs05TKwjXSRA==", + "license": "MIT" + }, + "node_modules/@types/d3-quadtree": { + "version": "3.0.6", + "resolved": "https://registry.npmjs.org/@types/d3-quadtree/-/d3-quadtree-3.0.6.tgz", + "integrity": "sha512-oUzyO1/Zm6rsxKRHA1vH0NEDG58HrT5icx/azi9MF1TWdtttWl0UIUsjEQBBh+SIkrpd21ZjEv7ptxWys1ncsg==", + "license": "MIT" + }, + "node_modules/@types/d3-random": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/@types/d3-random/-/d3-random-3.0.3.tgz", + "integrity": "sha512-Imagg1vJ3y76Y2ea0871wpabqp613+8/r0mCLEBfdtqC7xMSfj9idOnmBYyMoULfHePJyxMAw3nWhJxzc+LFwQ==", + "license": "MIT" + }, + "node_modules/@types/d3-scale": { + "version": "4.0.9", + "resolved": "https://registry.npmjs.org/@types/d3-scale/-/d3-scale-4.0.9.tgz", + "integrity": "sha512-dLmtwB8zkAeO/juAMfnV+sItKjlsw2lKdZVVy6LRr0cBmegxSABiLEpGVmSJJ8O08i4+sGR6qQtb6WtuwJdvVw==", + "license": "MIT", + "dependencies": { + "@types/d3-time": "*" + } + }, + "node_modules/@types/d3-scale-chromatic": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/@types/d3-scale-chromatic/-/d3-scale-chromatic-3.1.0.tgz", + "integrity": "sha512-iWMJgwkK7yTRmWqRB5plb1kadXyQ5Sj8V/zYlFGMUBbIPKQScw+Dku9cAAMgJG+z5GYDoMjWGLVOvjghDEFnKQ==", + "license": "MIT" + }, + "node_modules/@types/d3-selection": { + "version": "3.0.11", + "resolved": "https://registry.npmjs.org/@types/d3-selection/-/d3-selection-3.0.11.tgz", + "integrity": "sha512-bhAXu23DJWsrI45xafYpkQ4NtcKMwWnAC/vKrd2l+nxMFuvOT3XMYTIj2opv8vq8AO5Yh7Qac/nSeP/3zjTK0w==", + "license": "MIT" + }, + "node_modules/@types/d3-shape": { + "version": "3.1.7", + "resolved": "https://registry.npmjs.org/@types/d3-shape/-/d3-shape-3.1.7.tgz", + "integrity": "sha512-VLvUQ33C+3J+8p+Daf+nYSOsjB4GXp19/S/aGo60m9h1v6XaxjiT82lKVWJCfzhtuZ3yD7i/TPeC/fuKLLOSmg==", + "license": "MIT", + "dependencies": { + "@types/d3-path": "*" + } + }, + "node_modules/@types/d3-time": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/@types/d3-time/-/d3-time-3.0.4.tgz", + "integrity": "sha512-yuzZug1nkAAaBlBBikKZTgzCeA+k1uy4ZFwWANOfKw5z5LRhV0gNA7gNkKm7HoK+HRN0wX3EkxGk0fpbWhmB7g==", + "license": "MIT" + }, + "node_modules/@types/d3-time-format": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/@types/d3-time-format/-/d3-time-format-4.0.3.tgz", + "integrity": "sha512-5xg9rC+wWL8kdDj153qZcsJ0FWiFt0J5RB6LYUNZjwSnesfblqrI/bJ1wBdJ8OQfncgbJG5+2F+qfqnqyzYxyg==", + "license": "MIT" + }, + "node_modules/@types/d3-timer": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/@types/d3-timer/-/d3-timer-3.0.2.tgz", + "integrity": "sha512-Ps3T8E8dZDam6fUyNiMkekK3XUsaUEik+idO9/YjPtfj2qruF8tFBXS7XhtE4iIXBLxhmLjP3SXpLhVf21I9Lw==", + "license": "MIT" + }, + "node_modules/@types/d3-transition": { + "version": "3.0.9", + "resolved": "https://registry.npmjs.org/@types/d3-transition/-/d3-transition-3.0.9.tgz", + "integrity": "sha512-uZS5shfxzO3rGlu0cC3bjmMFKsXv+SmZZcgp0KD22ts4uGXp5EVYGzu/0YdwZeKmddhcAccYtREJKkPfXkZuCg==", + "license": "MIT", + "dependencies": { + "@types/d3-selection": "*" + } + }, + "node_modules/@types/d3-zoom": { + "version": "3.0.8", + "resolved": "https://registry.npmjs.org/@types/d3-zoom/-/d3-zoom-3.0.8.tgz", + "integrity": "sha512-iqMC4/YlFCSlO8+2Ii1GGGliCAY4XdeG748w5vQUbevlbDu0zSjH/+jojorQVBK/se0j6DUFNPBGSqD3YWYnDw==", + "license": "MIT", + "dependencies": { + "@types/d3-interpolate": "*", + "@types/d3-selection": "*" + } + }, + "node_modules/@types/debug": { + "version": "4.1.12", + "resolved": "https://registry.npmjs.org/@types/debug/-/debug-4.1.12.tgz", + "integrity": "sha512-vIChWdVG3LG1SMxEvI/AK+FWJthlrqlTu7fbrlywTkkaONwk/UAGaULXRlf8vkzFBLVm0zkMdCquhL5aOjhXPQ==", + "license": "MIT", + "dependencies": { + "@types/ms": "*" + } + }, + "node_modules/@types/docker-modem": { + "version": "3.0.6", + "resolved": "https://registry.npmjs.org/@types/docker-modem/-/docker-modem-3.0.6.tgz", + "integrity": "sha512-yKpAGEuKRSS8wwx0joknWxsmLha78wNMe9R2S3UNsVOkZded8UqOrV8KoeDXoXsjndxwyF3eIhyClGbO1SEhEg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/node": "*", + "@types/ssh2": "*" + } + }, + "node_modules/@types/dockerode": { + "version": "3.3.44", + "resolved": "https://registry.npmjs.org/@types/dockerode/-/dockerode-3.3.44.tgz", + "integrity": "sha512-fUpIHlsbYpxAJb285xx3vp7q5wf5mjqSn3cYwl/MhiM+DB99OdO5sOCPlO0PjO+TyOtphPs7tMVLU/RtOo/JjA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/docker-modem": "*", + "@types/node": "*", + "@types/ssh2": "*" + } + }, + "node_modules/@types/eslint": { + "version": "9.6.1", + "resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-9.6.1.tgz", + "integrity": "sha512-FXx2pKgId/WyYo2jXw63kk7/+TY7u7AziEJxJAnSFzHlqTAS3Ync6SvgYAN/k4/PQpnnVuzoMuVnByKK2qp0ag==", + "license": "MIT", + "dependencies": { + "@types/estree": "*", + "@types/json-schema": "*" + } + }, + "node_modules/@types/eslint-scope": { + "version": "3.7.7", + "resolved": "https://registry.npmjs.org/@types/eslint-scope/-/eslint-scope-3.7.7.tgz", + "integrity": "sha512-MzMFlSLBqNF2gcHWO0G1vP/YQyfvrxZ0bF+u7mzUdZ1/xK4A4sru+nraZz5i3iEIk1l1uyicaDVTB4QbbEkAYg==", + "license": "MIT", + "dependencies": { + "@types/eslint": "*", + "@types/estree": "*" + } + }, + "node_modules/@types/estree": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.8.tgz", + "integrity": "sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w==", + "license": "MIT" + }, + "node_modules/@types/estree-jsx": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/@types/estree-jsx/-/estree-jsx-1.0.5.tgz", + "integrity": "sha512-52CcUVNFyfb1A2ALocQw/Dd1BQFNmSdkuC3BkZ6iqhdMfQz7JWOFRuJFloOzjk+6WijU56m9oKXFAXc7o3Towg==", + "license": "MIT", + "dependencies": { + "@types/estree": "*" + } + }, + "node_modules/@types/express": { + "version": "4.17.21", + "resolved": "https://registry.npmjs.org/@types/express/-/express-4.17.21.tgz", + "integrity": "sha512-ejlPM315qwLpaQlQDTjPdsUFSc6ZsP4AN6AlWnogPjQ7CVi7PYF3YVz+CY3jE2pwYf7E/7HlDAN0rV2GxTG0HQ==", + "license": "MIT", + "dependencies": { + "@types/body-parser": "*", + "@types/express-serve-static-core": "^4.17.33", + "@types/qs": "*", + "@types/serve-static": "*" + } + }, + "node_modules/@types/express-serve-static-core": { + "version": "4.19.6", + "resolved": "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-4.19.6.tgz", + "integrity": "sha512-N4LZ2xG7DatVqhCZzOGb1Yi5lMbXSZcmdLDe9EzSndPV2HpWYWzRbaerl2n27irrm94EPpprqa8KpskPT085+A==", + "license": "MIT", + "dependencies": { + "@types/node": "*", + "@types/qs": "*", + "@types/range-parser": "*", + "@types/send": "*" + } + }, + "node_modules/@types/form-data": { + "version": "0.0.33", + "resolved": "https://registry.npmjs.org/@types/form-data/-/form-data-0.0.33.tgz", + "integrity": "sha512-8BSvG1kGm83cyJITQMZSulnl6QV8jqAGreJsc5tPu1Jq0vTSOiY/k24Wx82JRpWwZSqrala6sd5rWi6aNXvqcw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/format-util": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/@types/format-util/-/format-util-1.0.4.tgz", + "integrity": "sha512-xrCYOdHh5zA3LUrn6CvspYwlzSWxPso11Lx32WnAG6KvLCRecKZ/Rh21PLXUkzUFsQmrGcx/traJAFjR6dVS5Q==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/geojson": { + "version": "7946.0.16", + "resolved": "https://registry.npmjs.org/@types/geojson/-/geojson-7946.0.16.tgz", + "integrity": "sha512-6C8nqWur3j98U6+lXDfTUWIfgvZU+EumvpHKcYjujKH7woYyLj2sUmff0tRhrqM7BohUw7Pz3ZB1jj2gW9Fvmg==", + "license": "MIT" + }, + "node_modules/@types/glob": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/@types/glob/-/glob-7.2.0.tgz", + "integrity": "sha512-ZUxbzKl0IfJILTS6t7ip5fQQM/J3TJYubDm3nMbgubNNYS62eXeUpoLUC8/7fJNiFYHTrGPQn7hspDUzIHX3UA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/minimatch": "*", + "@types/node": "*" + } + }, + "node_modules/@types/graceful-fs": { + "version": "4.1.9", + "resolved": "https://registry.npmjs.org/@types/graceful-fs/-/graceful-fs-4.1.9.tgz", + "integrity": "sha512-olP3sd1qOEe5dXTSaFvQG+02VdRXcdytWLAZsAq1PecU8uqQAhkrnbli7DagjtXKW/Bl7YJbUsa8MPcuc8LHEQ==", + "license": "MIT", + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/gtag.js": { + "version": "0.0.12", + "resolved": "https://registry.npmjs.org/@types/gtag.js/-/gtag.js-0.0.12.tgz", + "integrity": "sha512-YQV9bUsemkzG81Ea295/nF/5GijnD2Af7QhEofh7xu+kvCN6RdodgNwwGWXB5GMI3NoyvQo0odNctoH/qLMIpg==", + "license": "MIT" + }, + "node_modules/@types/hast": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/@types/hast/-/hast-3.0.4.tgz", + "integrity": "sha512-WPs+bbQw5aCj+x6laNGWLH3wviHtoCv/P3+otBhbOhJgG8qtpdAMlTCxLtsTWA7LH1Oh/bFCHsBn0TPS5m30EQ==", + "license": "MIT", + "dependencies": { + "@types/unist": "*" + } + }, + "node_modules/@types/history": { + "version": "4.7.11", + "resolved": "https://registry.npmjs.org/@types/history/-/history-4.7.11.tgz", + "integrity": "sha512-qjDJRrmvBMiTx+jyLxvLfJU7UznFuokDv4f3WRuriHKERccVpFU+8XMQUAbDzoiJCsmexxRExQeMwwCdamSKDA==", + "license": "MIT" + }, + "node_modules/@types/html-minifier-terser": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/@types/html-minifier-terser/-/html-minifier-terser-6.1.0.tgz", + "integrity": "sha512-oh/6byDPnL1zeNXFrDXFLyZjkr1MsBG667IM792caf1L2UPOOMf65NFzjUH/ltyfwjAGfs1rsX1eftK0jC/KIg==", + "license": "MIT" + }, + "node_modules/@types/http-cache-semantics": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/@types/http-cache-semantics/-/http-cache-semantics-4.0.4.tgz", + "integrity": "sha512-1m0bIFVc7eJWyve9S0RnuRgcQqF/Xd5QsUZAZeQFr1Q3/p9JWoQQEqmVy+DPTNpGXwhgIetAoYF8JSc33q29QA==", + "license": "MIT" + }, + "node_modules/@types/http-errors": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@types/http-errors/-/http-errors-2.0.5.tgz", + "integrity": "sha512-r8Tayk8HJnX0FztbZN7oVqGccWgw98T/0neJphO91KkmOzug1KkofZURD4UaD5uH8AqcFLfdPErnBod0u71/qg==", + "license": "MIT" + }, + "node_modules/@types/http-proxy": { + "version": "1.17.17", + "resolved": "https://registry.npmjs.org/@types/http-proxy/-/http-proxy-1.17.17.tgz", + "integrity": "sha512-ED6LB+Z1AVylNTu7hdzuBqOgMnvG/ld6wGCG8wFnAzKX5uyW2K3WD52v0gnLCTK/VLpXtKckgWuyScYK6cSPaw==", + "license": "MIT", + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/istanbul-lib-coverage": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.6.tgz", + "integrity": "sha512-2QF/t/auWm0lsy8XtKVPG19v3sSOQlJe/YHZgfjb/KBBHOGSV+J2q/S671rcq9uTBrLAXmZpqJiaQbMT+zNU1w==", + "license": "MIT" + }, + "node_modules/@types/istanbul-lib-report": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/@types/istanbul-lib-report/-/istanbul-lib-report-3.0.3.tgz", + "integrity": "sha512-NQn7AHQnk/RSLOxrBbGyJM/aVQ+pjj5HCgasFxc0K/KhoATfQ/47AyUl15I2yBUpihjmas+a+VJBOqecrFH+uA==", + "license": "MIT", + "dependencies": { + "@types/istanbul-lib-coverage": "*" + } + }, + "node_modules/@types/istanbul-reports": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-3.0.4.tgz", + "integrity": "sha512-pk2B1NWalF9toCRu6gjBzR69syFjP4Od8WRAX+0mmf9lAjCRicLOWc+ZrxZHx/0XRjotgkF9t6iaMJ+aXcOdZQ==", + "license": "MIT", + "dependencies": { + "@types/istanbul-lib-report": "*" + } + }, + "node_modules/@types/jest": { + "version": "29.5.14", + "resolved": "https://registry.npmjs.org/@types/jest/-/jest-29.5.14.tgz", + "integrity": "sha512-ZN+4sdnLUbo8EVvVc2ao0GFW6oVrQRPn4K2lglySj7APvSrgzxHiNNK99us4WDMi57xxA2yggblIAMNhXOotLQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "expect": "^29.0.0", + "pretty-format": "^29.0.0" + } + }, + "node_modules/@types/jsdom": { + "version": "20.0.1", + "resolved": "https://registry.npmjs.org/@types/jsdom/-/jsdom-20.0.1.tgz", + "integrity": "sha512-d0r18sZPmMQr1eG35u12FZfhIXNrnsPU/g5wvRKCUf/tOGilKKwYMYGqh33BNR6ba+2gkHw1EUiHoN3mn7E5IQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/node": "*", + "@types/tough-cookie": "*", + "parse5": "^7.0.0" + } + }, + "node_modules/@types/json-schema": { + "version": "7.0.15", + "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.15.tgz", + "integrity": "sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==", + "license": "MIT" + }, + "node_modules/@types/json5": { + "version": "0.0.29", + "resolved": "https://registry.npmjs.org/@types/json5/-/json5-0.0.29.tgz", + "integrity": "sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/jsonld": { + "version": "1.5.15", + "resolved": "https://registry.npmjs.org/@types/jsonld/-/jsonld-1.5.15.tgz", + "integrity": "sha512-PlAFPZjL+AuGYmwlqwKEL0IMP8M8RexH0NIPGfCVWSQ041H2rR/8OlyZSD7KsCVoN8vCfWdtWDBxX8yBVP+xow==", + "license": "MIT" + }, + "node_modules/@types/lodash": { + "version": "4.17.20", + "resolved": "https://registry.npmjs.org/@types/lodash/-/lodash-4.17.20.tgz", + "integrity": "sha512-H3MHACvFUEiujabxhaI/ImO6gUrd8oOurg7LQtS7mbwIXA/cUqWrvBsaeJ23aZEPk1TAYkurjfMbSELfoCXlGA==", + "license": "MIT" + }, + "node_modules/@types/lodash.mergewith": { + "version": "4.6.7", + "resolved": "https://registry.npmjs.org/@types/lodash.mergewith/-/lodash.mergewith-4.6.7.tgz", + "integrity": "sha512-3m+lkO5CLRRYU0fhGRp7zbsGi6+BZj0uTVSwvcKU+nSlhjA9/QRNfuSGnD2mX6hQA7ZbmcCkzk5h4ZYGOtk14A==", + "license": "MIT", + "dependencies": { + "@types/lodash": "*" + } + }, + "node_modules/@types/luxon": { + "version": "3.7.1", + "resolved": "https://registry.npmjs.org/@types/luxon/-/luxon-3.7.1.tgz", + "integrity": "sha512-H3iskjFIAn5SlJU7OuxUmTEpebK6TKB8rxZShDslBMZJ5u9S//KM1sbdAisiSrqwLQncVjnpi2OK2J51h+4lsg==", + "license": "MIT" + }, + "node_modules/@types/mdast": { + "version": "3.0.15", + "resolved": "https://registry.npmjs.org/@types/mdast/-/mdast-3.0.15.tgz", + "integrity": "sha512-LnwD+mUEfxWMa1QpDraczIn6k0Ee3SMicuYSSzS6ZYl2gKS09EClnJYGd8Du6rfc5r/GZEk5o1mRb8TaTj03sQ==", + "license": "MIT", + "dependencies": { + "@types/unist": "^2" + } + }, + "node_modules/@types/mdast/node_modules/@types/unist": { + "version": "2.0.11", + "resolved": "https://registry.npmjs.org/@types/unist/-/unist-2.0.11.tgz", + "integrity": "sha512-CmBKiL6NNo/OqgmMn95Fk9Whlp2mtvIv+KNpQKN2F4SjvrEesubTRWGYSg+BnWZOnlCaSTU1sMpsBOzgbYhnsA==", + "license": "MIT" + }, + "node_modules/@types/mdx": { + "version": "2.0.13", + "resolved": "https://registry.npmjs.org/@types/mdx/-/mdx-2.0.13.tgz", + "integrity": "sha512-+OWZQfAYyio6YkJb3HLxDrvnx6SWWDbC0zVPfBRzUk0/nqoDyf6dNxQi3eArPe8rJ473nobTMQ/8Zk+LxJ+Yuw==", + "license": "MIT" + }, + "node_modules/@types/methods": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/@types/methods/-/methods-1.1.4.tgz", + "integrity": "sha512-ymXWVrDiCxTBE3+RIrrP533E70eA+9qu7zdWoHuOmGujkYtzf4HQF96b8nwHLqhuf4ykX61IGRIB38CC6/sImQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/mime": { + "version": "1.3.5", + "resolved": "https://registry.npmjs.org/@types/mime/-/mime-1.3.5.tgz", + "integrity": "sha512-/pyBZWSLD2n0dcHE3hq8s8ZvcETHtEuF+3E7XVt0Ig2nvsVQXdghHVcEkIWjy9A0wKfTn97a/PSDYohKIlnP/w==", + "license": "MIT" + }, + "node_modules/@types/minimatch": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/@types/minimatch/-/minimatch-5.1.2.tgz", + "integrity": "sha512-K0VQKziLUWkVKiRVrx4a40iPaxTUefQmjtkQofBkYRcoaaL/8rhwDWww9qWbrgicNOgnpIsMxyNIUM4+n6dUIA==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/mocha": { + "version": "10.0.10", + "resolved": "https://registry.npmjs.org/@types/mocha/-/mocha-10.0.10.tgz", + "integrity": "sha512-xPyYSz1cMPnJQhl0CLMH68j3gprKZaTjG3s5Vi+fDgx+uhG9NOXwbVt52eFS8ECyXhyKcjDLCBEqBExKuiZb7Q==", + "dev": true, + "license": "MIT", + "peer": true + }, + "node_modules/@types/ms": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/@types/ms/-/ms-2.1.0.tgz", + "integrity": "sha512-GsCCIZDE/p3i96vtEqx+7dBUGXrc7zeSK3wwPHIaRThS+9OhWIXRqzs4d6k1SVU8g91DrNRWxWUGhp5KXQb2VA==", + "license": "MIT" + }, + "node_modules/@types/node": { + "version": "20.11.24", + "resolved": "https://registry.npmjs.org/@types/node/-/node-20.11.24.tgz", + "integrity": "sha512-Kza43ewS3xoLgCEpQrsT+xRo/EJej1y0kVYGiLFE1NEODXGzTfwiC6tXTLMQskn1X4/Rjlh0MQUvx9W+L9long==", + "license": "MIT", + "peer": true, + "dependencies": { + "undici-types": "~5.26.4" + } + }, + "node_modules/@types/node-fetch": { + "version": "2.6.13", + "resolved": "https://registry.npmjs.org/@types/node-fetch/-/node-fetch-2.6.13.tgz", + "integrity": "sha512-QGpRVpzSaUs30JBSGPjOg4Uveu384erbHBoT1zeONvyCfwQxIkUshLAOqN/k9EjGviPRmWTTe6aH2qySWKTVSw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/node": "*", + "form-data": "^4.0.4" + } + }, + "node_modules/@types/node-forge": { + "version": "1.3.14", + "resolved": "https://registry.npmjs.org/@types/node-forge/-/node-forge-1.3.14.tgz", + "integrity": "sha512-mhVF2BnD4BO+jtOp7z1CdzaK4mbuK0LLQYAvdOLqHTavxFNq4zA1EmYkpnFjP8HOUzedfQkRnp0E2ulSAYSzAw==", + "license": "MIT", + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/parse-json": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/@types/parse-json/-/parse-json-4.0.2.tgz", + "integrity": "sha512-dISoDXWWQwUquiKsyZ4Ng+HX2KsPL7LyHKHQwgGFEA3IaKac4Obd+h2a/a6waisAoepJlBcx9paWqjA8/HVjCw==", + "license": "MIT" + }, + "node_modules/@types/pbkdf2": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/@types/pbkdf2/-/pbkdf2-3.1.2.tgz", + "integrity": "sha512-uRwJqmiXmh9++aSu1VNEn3iIxWOhd8AHXNSdlaLfdAAdSTY9jYVeGWnzejM3dvrkbqE3/hyQkQQ29IFATEGlew==", + "license": "MIT", + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/prettier": { + "version": "2.7.3", + "resolved": "https://registry.npmjs.org/@types/prettier/-/prettier-2.7.3.tgz", + "integrity": "sha512-+68kP9yzs4LMp7VNh8gdzMSPZFL44MLGqiHWvttYJe+6qnuVr4Ek9wSBQoveqY/r+LwjCcU29kNVkidwim+kYA==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/prismjs": { + "version": "1.26.5", + "resolved": "https://registry.npmjs.org/@types/prismjs/-/prismjs-1.26.5.tgz", + "integrity": "sha512-AUZTa7hQ2KY5L7AmtSiqxlhWxb4ina0yd8hNbl4TWuqnv/pFP0nDMb3YrfSBf4hJVGLh2YEIBfKaBW/9UEl6IQ==", + "license": "MIT" + }, + "node_modules/@types/prop-types": { + "version": "15.7.15", + "resolved": "https://registry.npmjs.org/@types/prop-types/-/prop-types-15.7.15.tgz", + "integrity": "sha512-F6bEyamV9jKGAFBEmlQnesRPGOQqS2+Uwi0Em15xenOxHaf2hv6L8YCVn3rPdPJOiJfPiCnLIRyvwVaqMY3MIw==", + "license": "MIT" + }, + "node_modules/@types/qs": { + "version": "6.14.0", + "resolved": "https://registry.npmjs.org/@types/qs/-/qs-6.14.0.tgz", + "integrity": "sha512-eOunJqu0K1923aExK6y8p6fsihYEn/BYuQ4g0CxAAgFc4b/ZLN4CrsRZ55srTdqoiLzU2B2evC+apEIxprEzkQ==", + "license": "MIT" + }, + "node_modules/@types/range-parser": { + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/@types/range-parser/-/range-parser-1.2.7.tgz", + "integrity": "sha512-hKormJbkJqzQGhziax5PItDUTMAM9uE2XXQmM37dyd4hVM+5aVl7oVxMVUiVQn2oCQFN/LKCZdvSM0pFRqbSmQ==", + "license": "MIT" + }, + "node_modules/@types/react": { + "version": "18.3.25", + "resolved": "https://registry.npmjs.org/@types/react/-/react-18.3.25.tgz", + "integrity": "sha512-oSVZmGtDPmRZtVDqvdKUi/qgCsWp5IDY29wp8na8Bj4B3cc99hfNzvNhlMkVVxctkAOGUA3Km7MMpBHAnWfcIA==", + "license": "MIT", + "peer": true, + "dependencies": { + "@types/prop-types": "*", + "csstype": "^3.0.2" + } + }, + "node_modules/@types/react-dom": { + "version": "18.3.7", + "resolved": "https://registry.npmjs.org/@types/react-dom/-/react-dom-18.3.7.tgz", + "integrity": "sha512-MEe3UeoENYVFXzoXEWsvcpg6ZvlrFNlOQ7EOsvhI3CfAXwzPfO8Qwuxd40nepsYKqyyVQnTdEfv68q91yLcKrQ==", + "dev": true, + "license": "MIT", + "peerDependencies": { + "@types/react": "^18.0.0" + } + }, + "node_modules/@types/react-router": { + "version": "5.1.20", + "resolved": "https://registry.npmjs.org/@types/react-router/-/react-router-5.1.20.tgz", + "integrity": "sha512-jGjmu/ZqS7FjSH6owMcD5qpq19+1RS9DeVRqfl1FeBMxTDQAGwlMWOcs52NDoXaNKyG3d1cYQFMs9rCrb88o9Q==", + "license": "MIT", + "dependencies": { + "@types/history": "^4.7.11", + "@types/react": "*" + } + }, + "node_modules/@types/react-router-config": { + "version": "5.0.11", + "resolved": "https://registry.npmjs.org/@types/react-router-config/-/react-router-config-5.0.11.tgz", + "integrity": "sha512-WmSAg7WgqW7m4x8Mt4N6ZyKz0BubSj/2tVUMsAHp+Yd2AMwcSbeFq9WympT19p5heCFmF97R9eD5uUR/t4HEqw==", + "license": "MIT", + "dependencies": { + "@types/history": "^4.7.11", + "@types/react": "*", + "@types/react-router": "^5.1.0" + } + }, + "node_modules/@types/react-router-dom": { + "version": "5.3.3", + "resolved": "https://registry.npmjs.org/@types/react-router-dom/-/react-router-dom-5.3.3.tgz", + "integrity": "sha512-kpqnYK4wcdm5UaWI3fLcELopqLrHgLqNsdpHauzlQktfkHL3npOSwtj1Uz9oKBAzs7lFtVkV8j83voAz2D8fhw==", + "license": "MIT", + "dependencies": { + "@types/history": "^4.7.11", + "@types/react": "*", + "@types/react-router": "*" + } + }, + "node_modules/@types/react-transition-group": { + "version": "4.4.12", + "resolved": "https://registry.npmjs.org/@types/react-transition-group/-/react-transition-group-4.4.12.tgz", + "integrity": "sha512-8TV6R3h2j7a91c+1DXdJi3Syo69zzIZbz7Lg5tORM5LEJG7X/E6a1V3drRyBRZq7/utz7A+c4OgYLiLcYGHG6w==", + "license": "MIT", + "peerDependencies": { + "@types/react": "*" + } + }, + "node_modules/@types/retry": { + "version": "0.12.2", + "resolved": "https://registry.npmjs.org/@types/retry/-/retry-0.12.2.tgz", + "integrity": "sha512-XISRgDJ2Tc5q4TRqvgJtzsRkFYNJzZrhTdtMoGVBttwzzQJkPnS3WWTFc7kuDRoPtPakl+T+OfdEUjYJj7Jbow==", + "license": "MIT" + }, + "node_modules/@types/sax": { + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/@types/sax/-/sax-1.2.7.tgz", + "integrity": "sha512-rO73L89PJxeYM3s3pPPjiPgVVcymqU490g0YO5n5By0k2Erzj6tay/4lr1CHAAU4JyOWd1rpQ8bCf6cZfHU96A==", + "license": "MIT", + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/secp256k1": { + "version": "4.0.7", + "resolved": "https://registry.npmjs.org/@types/secp256k1/-/secp256k1-4.0.7.tgz", + "integrity": "sha512-Rcvjl6vARGAKRO6jHeKMatGrvOMGrR/AR11N1x2LqintPCyDZ7NBhrh238Z2VZc7aM7KIwnFpFQ7fnfK4H/9Qw==", + "license": "MIT", + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/semver": { + "version": "7.7.1", + "resolved": "https://registry.npmjs.org/@types/semver/-/semver-7.7.1.tgz", + "integrity": "sha512-FmgJfu+MOcQ370SD0ev7EI8TlCAfKYU+B4m5T3yXc1CiRN94g/SZPtsCkk506aUDtlMnFZvasDwHHUcZUEaYuA==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/send": { + "version": "0.17.5", + "resolved": "https://registry.npmjs.org/@types/send/-/send-0.17.5.tgz", + "integrity": "sha512-z6F2D3cOStZvuk2SaP6YrwkNO65iTZcwA2ZkSABegdkAh/lf+Aa/YQndZVfmEXT5vgAp6zv06VQ3ejSVjAny4w==", + "license": "MIT", + "dependencies": { + "@types/mime": "^1", + "@types/node": "*" + } + }, + "node_modules/@types/serve-index": { + "version": "1.9.4", + "resolved": "https://registry.npmjs.org/@types/serve-index/-/serve-index-1.9.4.tgz", + "integrity": "sha512-qLpGZ/c2fhSs5gnYsQxtDEq3Oy8SXPClIXkW5ghvAvsNuVSA8k+gCONcUCS/UjLEYvYps+e8uBtfgXgvhwfNug==", + "license": "MIT", + "dependencies": { + "@types/express": "*" + } + }, + "node_modules/@types/serve-static": { + "version": "1.15.8", + "resolved": "https://registry.npmjs.org/@types/serve-static/-/serve-static-1.15.8.tgz", + "integrity": "sha512-roei0UY3LhpOJvjbIP6ZZFngyLKl5dskOtDhxY5THRSpO+ZI+nzJ+m5yUMzGrp89YRa7lvknKkMYjqQFGwA7Sg==", + "license": "MIT", + "dependencies": { + "@types/http-errors": "*", + "@types/node": "*", + "@types/send": "*" + } + }, + "node_modules/@types/sockjs": { + "version": "0.3.36", + "resolved": "https://registry.npmjs.org/@types/sockjs/-/sockjs-0.3.36.tgz", + "integrity": "sha512-MK9V6NzAS1+Ud7JV9lJLFqW85VbC9dq3LmwZCuBe4wBDgKC0Kj/jd8Xl+nSviU+Qc3+m7umHHyHg//2KSa0a0Q==", + "license": "MIT", + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/ssh2": { + "version": "1.15.5", + "resolved": "https://registry.npmjs.org/@types/ssh2/-/ssh2-1.15.5.tgz", + "integrity": "sha512-N1ASjp/nXH3ovBHddRJpli4ozpk6UdDYIX4RJWFa9L1YKnzdhTlVmiGHm4DZnj/jLbqZpes4aeR30EFGQtvhQQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/node": "^18.11.18" + } + }, + "node_modules/@types/ssh2-streams": { + "version": "0.1.12", + "resolved": "https://registry.npmjs.org/@types/ssh2-streams/-/ssh2-streams-0.1.12.tgz", + "integrity": "sha512-Sy8tpEmCce4Tq0oSOYdfqaBpA3hDM8SoxoFh5vzFsu2oL+znzGz8oVWW7xb4K920yYMUY+PIG31qZnFMfPWNCg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/ssh2/node_modules/@types/node": { + "version": "18.19.129", + "resolved": "https://registry.npmjs.org/@types/node/-/node-18.19.129.tgz", + "integrity": "sha512-hrmi5jWt2w60ayox3iIXwpMEnfUvOLJCRtrOPbHtH15nTjvO7uhnelvrdAs0dO0/zl5DZ3ZbahiaXEVb54ca/A==", + "dev": true, + "license": "MIT", + "dependencies": { + "undici-types": "~5.26.4" + } + }, + "node_modules/@types/stack-utils": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/@types/stack-utils/-/stack-utils-2.0.3.tgz", + "integrity": "sha512-9aEbYZ3TbYMznPdcdr3SmIrLXwC/AKZXQeCf9Pgao5CKb8CyHuEX5jzWPTkvregvhRJHcpRO6BFoGW9ycaOkYw==", + "license": "MIT" + }, + "node_modules/@types/superagent": { + "version": "8.1.9", + "resolved": "https://registry.npmjs.org/@types/superagent/-/superagent-8.1.9.tgz", + "integrity": "sha512-pTVjI73witn+9ILmoJdajHGW2jkSaOzhiFYF1Rd3EQ94kymLqB9PjD9ISg7WaALC7+dCHT0FGe9T2LktLq/3GQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/cookiejar": "^2.1.5", + "@types/methods": "^1.1.4", + "@types/node": "*", + "form-data": "^4.0.0" + } + }, + "node_modules/@types/supertest": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/@types/supertest/-/supertest-6.0.2.tgz", + "integrity": "sha512-137ypx2lk/wTQbW6An6safu9hXmajAifU/s7szAHLN/FeIm5w7yR0Wkl9fdJMRSHwOn4HLAI0DaB2TOORuhPDg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/methods": "^1.1.4", + "@types/superagent": "^8.1.0" + } + }, + "node_modules/@types/testing-library__jest-dom": { + "version": "5.14.9", + "resolved": "https://registry.npmjs.org/@types/testing-library__jest-dom/-/testing-library__jest-dom-5.14.9.tgz", + "integrity": "sha512-FSYhIjFlfOpGSRyVoMBMuS3ws5ehFQODymf3vlI7U1K8c7PHwWwFY7VREfmsuzHSOnoKs/9/Y983ayOs7eRzqw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/jest": "*" + } + }, + "node_modules/@types/tough-cookie": { + "version": "4.0.5", + "resolved": "https://registry.npmjs.org/@types/tough-cookie/-/tough-cookie-4.0.5.tgz", + "integrity": "sha512-/Ad8+nIOV7Rl++6f1BdKxFSMgmoqEoYbHRpPcx3JEfv8VRsQe9Z4mCXeJBzxs7mbHY/XOZZuXlRNfhpVPbs6ZA==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/triple-beam": { + "version": "1.3.5", + "resolved": "https://registry.npmjs.org/@types/triple-beam/-/triple-beam-1.3.5.tgz", + "integrity": "sha512-6WaYesThRMCl19iryMYP7/x2OVgCtbIVflDGFpWnb9irXI3UjYE4AzmYuiUKY1AJstGijoY+MgUszMgRxIYTYw==", + "license": "MIT" + }, + "node_modules/@types/trusted-types": { + "version": "2.0.7", + "resolved": "https://registry.npmjs.org/@types/trusted-types/-/trusted-types-2.0.7.tgz", + "integrity": "sha512-ScaPdn1dQczgbl0QFTeTOmVHFULt394XJgOQNoyVhZ6r2vLnMLJfBPd53SB52T/3G36VI1/g2MZaX0cwDuXsfw==", + "license": "MIT" + }, + "node_modules/@types/unist": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/@types/unist/-/unist-3.0.3.tgz", + "integrity": "sha512-ko/gIFJRv177XgZsZcBwnqJN5x/Gien8qNOn0D5bQU/zAzVf9Zt3BlcUiLqhV9y4ARk0GbT3tnUiPNgnTXzc/Q==", + "license": "MIT" + }, + "node_modules/@types/uuid": { + "version": "9.0.8", + "resolved": "https://registry.npmjs.org/@types/uuid/-/uuid-9.0.8.tgz", + "integrity": "sha512-jg+97EGIcY9AGHJJRaaPVgetKDsrTgbRjQ5Msgjh/DQKEFl0DtyRr/VCOyD1T2R1MNeWPK/u7JoGhlDZnKBAfA==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/validator": { + "version": "13.15.3", + "resolved": "https://registry.npmjs.org/@types/validator/-/validator-13.15.3.tgz", + "integrity": "sha512-7bcUmDyS6PN3EuD9SlGGOxM77F8WLVsrwkxyWxKnxzmXoequ6c7741QBrANq6htVRGOITJ7z72mTP6Z4XyuG+Q==", + "license": "MIT" + }, + "node_modules/@types/ws": { + "version": "8.18.1", + "resolved": "https://registry.npmjs.org/@types/ws/-/ws-8.18.1.tgz", + "integrity": "sha512-ThVF6DCVhA8kUGy+aazFQ4kXQ7E1Ty7A3ypFOe0IcJV8O/M511G99AW24irKrW56Wt44yG9+ij8FaqoBGkuBXg==", + "license": "MIT", + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/yargs": { + "version": "17.0.33", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.33.tgz", + "integrity": "sha512-WpxBCKWPLr4xSsHgz511rFJAM+wS28w2zEO1QDNY5zM/S8ok70NNfztH0xwhqKyaK0OHCbN98LDAZuy1ctxDkA==", + "license": "MIT", + "dependencies": { + "@types/yargs-parser": "*" + } + }, + "node_modules/@types/yargs-parser": { + "version": "21.0.3", + "resolved": "https://registry.npmjs.org/@types/yargs-parser/-/yargs-parser-21.0.3.tgz", + "integrity": "sha512-I4q9QU9MQv4oEOz4tAHJtNz1cwuLxn2F3xcc2iV5WdqLPpUnj30aUuxt1mAxYTG+oe8CZMV/+6rU4S4gRDzqtQ==", + "license": "MIT" + }, + "node_modules/@typescript-eslint/eslint-plugin": { + "version": "6.21.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-6.21.0.tgz", + "integrity": "sha512-oy9+hTPCUFpngkEZUSzbf9MxI65wbKFoQYsgPdILTfbUldp5ovUuphZVe4i30emU9M/kP+T64Di0mxl7dSw3MA==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "@eslint-community/regexpp": "^4.5.1", + "@typescript-eslint/scope-manager": "6.21.0", + "@typescript-eslint/type-utils": "6.21.0", + "@typescript-eslint/utils": "6.21.0", + "@typescript-eslint/visitor-keys": "6.21.0", + "debug": "^4.3.4", + "graphemer": "^1.4.0", + "ignore": "^5.2.4", + "natural-compare": "^1.4.0", + "semver": "^7.5.4", + "ts-api-utils": "^1.0.1" + }, + "engines": { + "node": "^16.0.0 || >=18.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "@typescript-eslint/parser": "^6.0.0 || ^6.0.0-alpha", + "eslint": "^7.0.0 || ^8.0.0" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/@typescript-eslint/eslint-plugin/node_modules/@typescript-eslint/scope-manager": { + "version": "6.21.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-6.21.0.tgz", + "integrity": "sha512-OwLUIWZJry80O99zvqXVEioyniJMa+d2GrqpUTqi5/v5D5rOrppJVBPa0yKCblcigC0/aYAzxxqQ1B+DS2RYsg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@typescript-eslint/types": "6.21.0", + "@typescript-eslint/visitor-keys": "6.21.0" + }, + "engines": { + "node": "^16.0.0 || >=18.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@typescript-eslint/eslint-plugin/node_modules/@typescript-eslint/type-utils": { + "version": "6.21.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-6.21.0.tgz", + "integrity": "sha512-rZQI7wHfao8qMX3Rd3xqeYSMCL3SoiSQLBATSiVKARdFGCYSRvmViieZjqc58jKgs8Y8i9YvVVhRbHSTA4VBag==", + "dev": true, + "license": "MIT", + "dependencies": { + "@typescript-eslint/typescript-estree": "6.21.0", + "@typescript-eslint/utils": "6.21.0", + "debug": "^4.3.4", + "ts-api-utils": "^1.0.1" + }, + "engines": { + "node": "^16.0.0 || >=18.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^7.0.0 || ^8.0.0" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/@typescript-eslint/eslint-plugin/node_modules/@typescript-eslint/types": { + "version": "6.21.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-6.21.0.tgz", + "integrity": "sha512-1kFmZ1rOm5epu9NZEZm1kckCDGj5UJEf7P1kliH4LKu/RkwpsfqqGmY2OOcUs18lSlQBKLDYBOGxRVtrMN5lpg==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^16.0.0 || >=18.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@typescript-eslint/eslint-plugin/node_modules/@typescript-eslint/typescript-estree": { + "version": "6.21.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-6.21.0.tgz", + "integrity": "sha512-6npJTkZcO+y2/kr+z0hc4HwNfrrP4kNYh57ek7yCNlrBjWQ1Y0OS7jiZTkgumrvkX5HkEKXFZkkdFNkaW2wmUQ==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "@typescript-eslint/types": "6.21.0", + "@typescript-eslint/visitor-keys": "6.21.0", + "debug": "^4.3.4", + "globby": "^11.1.0", + "is-glob": "^4.0.3", + "minimatch": "9.0.3", + "semver": "^7.5.4", + "ts-api-utils": "^1.0.1" + }, + "engines": { + "node": "^16.0.0 || >=18.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/@typescript-eslint/eslint-plugin/node_modules/@typescript-eslint/utils": { + "version": "6.21.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-6.21.0.tgz", + "integrity": "sha512-NfWVaC8HP9T8cbKQxHcsJBY5YE1O33+jpMwN45qzWWaPDZgLIbo12toGMWnmhvCpd3sIxkpDw3Wv1B3dYrbDQQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@eslint-community/eslint-utils": "^4.4.0", + "@types/json-schema": "^7.0.12", + "@types/semver": "^7.5.0", + "@typescript-eslint/scope-manager": "6.21.0", + "@typescript-eslint/types": "6.21.0", + "@typescript-eslint/typescript-estree": "6.21.0", + "semver": "^7.5.4" + }, + "engines": { + "node": "^16.0.0 || >=18.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^7.0.0 || ^8.0.0" + } + }, + "node_modules/@typescript-eslint/eslint-plugin/node_modules/@typescript-eslint/visitor-keys": { + "version": "6.21.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-6.21.0.tgz", + "integrity": "sha512-JJtkDduxLi9bivAB+cYOVMtbkqdPOhZ+ZI5LC47MIRrDV4Yn2o+ZnW10Nkmr28xRpSpdJ6Sm42Hjf2+REYXm0A==", + "dev": true, + "license": "MIT", + "dependencies": { + "@typescript-eslint/types": "6.21.0", + "eslint-visitor-keys": "^3.4.1" + }, + "engines": { + "node": "^16.0.0 || >=18.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@typescript-eslint/eslint-plugin/node_modules/brace-expansion": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.2.tgz", + "integrity": "sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "node_modules/@typescript-eslint/eslint-plugin/node_modules/minimatch": { + "version": "9.0.3", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.3.tgz", + "integrity": "sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg==", + "dev": true, + "license": "ISC", + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/@typescript-eslint/eslint-plugin/node_modules/semver": { + "version": "7.7.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.2.tgz", + "integrity": "sha512-RF0Fw+rO5AMf9MAyaRXI4AV0Ulj5lMHqVxxdSgiVbixSCXoEmmX/jk0CuJw4+3SqroYO9VoUh+HcuJivvtJemA==", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@typescript-eslint/parser": { + "version": "6.21.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-6.21.0.tgz", + "integrity": "sha512-tbsV1jPne5CkFQCgPBcDOt30ItF7aJoZL997JSF7MhGQqOeT3svWRYxiqlfA5RUdlHN6Fi+EI9bxqbdyAUZjYQ==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "@typescript-eslint/scope-manager": "6.21.0", + "@typescript-eslint/types": "6.21.0", + "@typescript-eslint/typescript-estree": "6.21.0", + "@typescript-eslint/visitor-keys": "6.21.0", + "debug": "^4.3.4" + }, + "engines": { + "node": "^16.0.0 || >=18.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^7.0.0 || ^8.0.0" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/@typescript-eslint/parser/node_modules/@typescript-eslint/scope-manager": { + "version": "6.21.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-6.21.0.tgz", + "integrity": "sha512-OwLUIWZJry80O99zvqXVEioyniJMa+d2GrqpUTqi5/v5D5rOrppJVBPa0yKCblcigC0/aYAzxxqQ1B+DS2RYsg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@typescript-eslint/types": "6.21.0", + "@typescript-eslint/visitor-keys": "6.21.0" + }, + "engines": { + "node": "^16.0.0 || >=18.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@typescript-eslint/parser/node_modules/@typescript-eslint/types": { + "version": "6.21.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-6.21.0.tgz", + "integrity": "sha512-1kFmZ1rOm5epu9NZEZm1kckCDGj5UJEf7P1kliH4LKu/RkwpsfqqGmY2OOcUs18lSlQBKLDYBOGxRVtrMN5lpg==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^16.0.0 || >=18.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@typescript-eslint/parser/node_modules/@typescript-eslint/typescript-estree": { + "version": "6.21.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-6.21.0.tgz", + "integrity": "sha512-6npJTkZcO+y2/kr+z0hc4HwNfrrP4kNYh57ek7yCNlrBjWQ1Y0OS7jiZTkgumrvkX5HkEKXFZkkdFNkaW2wmUQ==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "@typescript-eslint/types": "6.21.0", + "@typescript-eslint/visitor-keys": "6.21.0", + "debug": "^4.3.4", + "globby": "^11.1.0", + "is-glob": "^4.0.3", + "minimatch": "9.0.3", + "semver": "^7.5.4", + "ts-api-utils": "^1.0.1" + }, + "engines": { + "node": "^16.0.0 || >=18.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/@typescript-eslint/parser/node_modules/@typescript-eslint/visitor-keys": { + "version": "6.21.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-6.21.0.tgz", + "integrity": "sha512-JJtkDduxLi9bivAB+cYOVMtbkqdPOhZ+ZI5LC47MIRrDV4Yn2o+ZnW10Nkmr28xRpSpdJ6Sm42Hjf2+REYXm0A==", + "dev": true, + "license": "MIT", + "dependencies": { + "@typescript-eslint/types": "6.21.0", + "eslint-visitor-keys": "^3.4.1" + }, + "engines": { + "node": "^16.0.0 || >=18.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@typescript-eslint/parser/node_modules/brace-expansion": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.2.tgz", + "integrity": "sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "node_modules/@typescript-eslint/parser/node_modules/minimatch": { + "version": "9.0.3", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.3.tgz", + "integrity": "sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg==", + "dev": true, + "license": "ISC", + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/@typescript-eslint/parser/node_modules/semver": { + "version": "7.7.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.2.tgz", + "integrity": "sha512-RF0Fw+rO5AMf9MAyaRXI4AV0Ulj5lMHqVxxdSgiVbixSCXoEmmX/jk0CuJw4+3SqroYO9VoUh+HcuJivvtJemA==", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@typescript-eslint/scope-manager": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-8.0.1.tgz", + "integrity": "sha512-NpixInP5dm7uukMiRyiHjRKkom5RIFA4dfiHvalanD2cF0CLUuQqxfg8PtEUo9yqJI2bBhF+pcSafqnG3UBnRQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@typescript-eslint/types": "8.0.1", + "@typescript-eslint/visitor-keys": "8.0.1" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@typescript-eslint/type-utils": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-8.0.1.tgz", + "integrity": "sha512-+/UT25MWvXeDX9YaHv1IS6KI1fiuTto43WprE7pgSMswHbn1Jm9GEM4Txp+X74ifOWV8emu2AWcbLhpJAvD5Ng==", + "dev": true, + "license": "MIT", + "dependencies": { + "@typescript-eslint/typescript-estree": "8.0.1", + "@typescript-eslint/utils": "8.0.1", + "debug": "^4.3.4", + "ts-api-utils": "^1.3.0" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/@typescript-eslint/types": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.0.1.tgz", + "integrity": "sha512-PpqTVT3yCA/bIgJ12czBuE3iBlM3g4inRSC5J0QOdQFAn07TYrYEQBBKgXH1lQpglup+Zy6c1fxuwTk4MTNKIw==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@typescript-eslint/typescript-estree": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-8.0.1.tgz", + "integrity": "sha512-8V9hriRvZQXPWU3bbiUV4Epo7EvgM6RTs+sUmxp5G//dBGy402S7Fx0W0QkB2fb4obCF8SInoUzvTYtc3bkb5w==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "@typescript-eslint/types": "8.0.1", + "@typescript-eslint/visitor-keys": "8.0.1", + "debug": "^4.3.4", + "globby": "^11.1.0", + "is-glob": "^4.0.3", + "minimatch": "^9.0.4", + "semver": "^7.6.0", + "ts-api-utils": "^1.3.0" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/@typescript-eslint/typescript-estree/node_modules/brace-expansion": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.2.tgz", + "integrity": "sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "node_modules/@typescript-eslint/typescript-estree/node_modules/minimatch": { + "version": "9.0.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", + "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", + "dev": true, + "license": "ISC", + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/@typescript-eslint/typescript-estree/node_modules/semver": { + "version": "7.7.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.2.tgz", + "integrity": "sha512-RF0Fw+rO5AMf9MAyaRXI4AV0Ulj5lMHqVxxdSgiVbixSCXoEmmX/jk0CuJw4+3SqroYO9VoUh+HcuJivvtJemA==", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@typescript-eslint/utils": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-8.0.1.tgz", + "integrity": "sha512-CBFR0G0sCt0+fzfnKaciu9IBsKvEKYwN9UZ+eeogK1fYHg4Qxk1yf/wLQkLXlq8wbU2dFlgAesxt8Gi76E8RTA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@eslint-community/eslint-utils": "^4.4.0", + "@typescript-eslint/scope-manager": "8.0.1", + "@typescript-eslint/types": "8.0.1", + "@typescript-eslint/typescript-estree": "8.0.1" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^8.57.0 || ^9.0.0" + } + }, + "node_modules/@typescript-eslint/visitor-keys": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-8.0.1.tgz", + "integrity": "sha512-W5E+o0UfUcK5EgchLZsyVWqARmsM7v54/qEq6PY3YI5arkgmCzHiuk0zKSJJbm71V0xdRna4BGomkCTXz2/LkQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@typescript-eslint/types": "8.0.1", + "eslint-visitor-keys": "^3.4.3" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@ungap/structured-clone": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/@ungap/structured-clone/-/structured-clone-1.3.0.tgz", + "integrity": "sha512-WmoN8qaIAo7WTYWbAZuG8PYEhn5fkz7dZrqTBZ7dtt//lL2Gwms1IcnQ5yHqjDfX8Ft5j4YzDM23f87zBfDe9g==", + "license": "ISC" + }, + "node_modules/@vercel/oidc": { + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/@vercel/oidc/-/oidc-3.0.5.tgz", + "integrity": "sha512-fnYhv671l+eTTp48gB4zEsTW/YtRgRPnkI2nT7x6qw5rkI1Lq2hTmQIpHPgyThI0znLK+vX2n9XxKdXZ7BUbbw==", + "license": "Apache-2.0", + "engines": { + "node": ">= 20" + } + }, + "node_modules/@vitejs/plugin-react": { + "version": "4.7.0", + "resolved": "https://registry.npmjs.org/@vitejs/plugin-react/-/plugin-react-4.7.0.tgz", + "integrity": "sha512-gUu9hwfWvvEDBBmgtAowQCojwZmJ5mcLn3aufeCsitijs3+f2NsrPtlAWIR6OPiqljl96GVCUbLe0HyqIpVaoA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/core": "^7.28.0", + "@babel/plugin-transform-react-jsx-self": "^7.27.1", + "@babel/plugin-transform-react-jsx-source": "^7.27.1", + "@rolldown/pluginutils": "1.0.0-beta.27", + "@types/babel__core": "^7.20.5", + "react-refresh": "^0.17.0" + }, + "engines": { + "node": "^14.18.0 || >=16.0.0" + }, + "peerDependencies": { + "vite": "^4.2.0 || ^5.0.0 || ^6.0.0 || ^7.0.0" + } + }, + "node_modules/@vitejs/plugin-react-swc": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/@vitejs/plugin-react-swc/-/plugin-react-swc-3.6.0.tgz", + "integrity": "sha512-XFRbsGgpGxGzEV5i5+vRiro1bwcIaZDIdBRP16qwm+jP68ue/S8FJTBEgOeojtVDYrbSua3XFp71kC8VJE6v+g==", + "dev": true, + "license": "MIT", + "dependencies": { + "@swc/core": "^1.3.107" + }, + "peerDependencies": { + "vite": "^4 || ^5" + } + }, + "node_modules/@vitest/coverage-v8": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/@vitest/coverage-v8/-/coverage-v8-1.4.0.tgz", + "integrity": "sha512-4hDGyH1SvKpgZnIByr9LhGgCEuF9DKM34IBLCC/fVfy24Z3+PZ+Ii9hsVBsHvY1umM1aGPEjceRkzxCfcQ10wg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@ampproject/remapping": "^2.2.1", + "@bcoe/v8-coverage": "^0.2.3", + "debug": "^4.3.4", + "istanbul-lib-coverage": "^3.2.2", + "istanbul-lib-report": "^3.0.1", + "istanbul-lib-source-maps": "^5.0.4", + "istanbul-reports": "^3.1.6", + "magic-string": "^0.30.5", + "magicast": "^0.3.3", + "picocolors": "^1.0.0", + "std-env": "^3.5.0", + "strip-literal": "^2.0.0", + "test-exclude": "^6.0.0", + "v8-to-istanbul": "^9.2.0" + }, + "funding": { + "url": "https://opencollective.com/vitest" + }, + "peerDependencies": { + "vitest": "1.4.0" + } + }, + "node_modules/@vitest/coverage-v8/node_modules/istanbul-lib-source-maps": { + "version": "5.0.6", + "resolved": "https://registry.npmjs.org/istanbul-lib-source-maps/-/istanbul-lib-source-maps-5.0.6.tgz", + "integrity": "sha512-yg2d+Em4KizZC5niWhQaIomgf5WlL4vOOjZ5xGCmF8SnPE/mDWWXgvRExdcpCgh9lLRRa1/fSYp2ymmbJ1pI+A==", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "@jridgewell/trace-mapping": "^0.3.23", + "debug": "^4.1.1", + "istanbul-lib-coverage": "^3.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@vitest/expect": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/@vitest/expect/-/expect-1.4.0.tgz", + "integrity": "sha512-Jths0sWCJZ8BxjKe+p+eKsoqev1/T8lYcrjavEaz8auEJ4jAVY0GwW3JKmdVU4mmNPLPHixh4GNXP7GFtAiDHA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@vitest/spy": "1.4.0", + "@vitest/utils": "1.4.0", + "chai": "^4.3.10" + }, + "funding": { + "url": "https://opencollective.com/vitest" + } + }, + "node_modules/@vitest/runner": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/@vitest/runner/-/runner-1.4.0.tgz", + "integrity": "sha512-EDYVSmesqlQ4RD2VvWo3hQgTJ7ZrFQ2VSJdfiJiArkCerDAGeyF1i6dHkmySqk573jLp6d/cfqCN+7wUB5tLgg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@vitest/utils": "1.4.0", + "p-limit": "^5.0.0", + "pathe": "^1.1.1" + }, + "funding": { + "url": "https://opencollective.com/vitest" + } + }, + "node_modules/@vitest/runner/node_modules/p-limit": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-5.0.0.tgz", + "integrity": "sha512-/Eaoq+QyLSiXQ4lyYV23f14mZRQcXnxfHrN0vCai+ak9G0pp9iEQukIIZq5NccEvwRB8PUnZT0KsOoDCINS1qQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "yocto-queue": "^1.0.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@vitest/snapshot": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/@vitest/snapshot/-/snapshot-1.4.0.tgz", + "integrity": "sha512-saAFnt5pPIA5qDGxOHxJ/XxhMFKkUSBJmVt5VgDsAqPTX6JP326r5C/c9UuCMPoXNzuudTPsYDZCoJ5ilpqG2A==", + "dev": true, + "license": "MIT", + "dependencies": { + "magic-string": "^0.30.5", + "pathe": "^1.1.1", + "pretty-format": "^29.7.0" + }, + "funding": { + "url": "https://opencollective.com/vitest" + } + }, + "node_modules/@vitest/spy": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/@vitest/spy/-/spy-1.4.0.tgz", + "integrity": "sha512-Ywau/Qs1DzM/8Uc+yA77CwSegizMlcgTJuYGAi0jujOteJOUf1ujunHThYo243KG9nAyWT3L9ifPYZ5+As/+6Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "tinyspy": "^2.2.0" + }, + "funding": { + "url": "https://opencollective.com/vitest" + } + }, + "node_modules/@vitest/utils": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/@vitest/utils/-/utils-1.4.0.tgz", + "integrity": "sha512-mx3Yd1/6e2Vt/PUC98DcqTirtfxUyAZ32uK82r8rZzbtBeBo+nqgnjx/LvqQdWsrvNtm14VmurNgcf4nqY5gJg==", + "dev": true, + "license": "MIT", + "dependencies": { + "diff-sequences": "^29.6.3", + "estree-walker": "^3.0.3", + "loupe": "^2.3.7", + "pretty-format": "^29.7.0" + }, + "funding": { + "url": "https://opencollective.com/vitest" + } + }, + "node_modules/@vitest/utils/node_modules/estree-walker": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-3.0.3.tgz", + "integrity": "sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/estree": "^1.0.0" + } + }, + "node_modules/@walletconnect/auth-client": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/@walletconnect/auth-client/-/auth-client-2.1.2.tgz", + "integrity": "sha512-ubJLn+vGb8sTdBFX6xAh4kjR5idrtS3RBngQWaJJJpEPBQmxMb8pM2q0FIRs8Is4K6jKy+uEhusMV+7ZBmTzjw==", + "license": "Apache-2.0", + "dependencies": { + "@ethersproject/hash": "^5.7.0", + "@ethersproject/transactions": "^5.7.0", + "@stablelib/random": "^1.0.2", + "@stablelib/sha256": "^1.0.1", + "@walletconnect/core": "^2.10.1", + "@walletconnect/events": "^1.0.1", + "@walletconnect/heartbeat": "^1.2.1", + "@walletconnect/jsonrpc-utils": "^1.0.8", + "@walletconnect/logger": "^2.0.1", + "@walletconnect/time": "^1.0.2", + "@walletconnect/utils": "^2.10.1", + "events": "^3.3.0", + "isomorphic-unfetch": "^3.1.0" + }, + "engines": { + "node": ">=16" + } + }, + "node_modules/@walletconnect/auth-client/node_modules/@stablelib/random": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@stablelib/random/-/random-1.0.2.tgz", + "integrity": "sha512-rIsE83Xpb7clHPVRlBj8qNe5L8ISQOzjghYQm/dZ7VaM2KHYwMW5adjQjrzTZCchFnNCNhkwtnOBa9HTMJCI8w==", + "license": "MIT", + "dependencies": { + "@stablelib/binary": "^1.0.1", + "@stablelib/wipe": "^1.0.1" + } + }, + "node_modules/@walletconnect/browser-utils": { + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/@walletconnect/browser-utils/-/browser-utils-1.8.0.tgz", + "integrity": "sha512-Wcqqx+wjxIo9fv6eBUFHPsW1y/bGWWRboni5dfD8PtOmrihrEpOCmvRJe4rfl7xgJW8Ea9UqKEaq0bIRLHlK4A==", + "license": "Apache-2.0", + "dependencies": { + "@walletconnect/safe-json": "1.0.0", + "@walletconnect/types": "^1.8.0", + "@walletconnect/window-getters": "1.0.0", + "@walletconnect/window-metadata": "1.0.0", + "detect-browser": "5.2.0" + } + }, + "node_modules/@walletconnect/browser-utils/node_modules/@walletconnect/types": { + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/@walletconnect/types/-/types-1.8.0.tgz", + "integrity": "sha512-Cn+3I0V0vT9ghMuzh1KzZvCkiAxTq+1TR2eSqw5E5AVWfmCtECFkVZBP6uUJZ8YjwLqXheI+rnjqPy7sVM4Fyg==", + "deprecated": "WalletConnect's v1 SDKs are now deprecated. Please upgrade to a v2 SDK. For details see: https://docs.walletconnect.com/", + "license": "Apache-2.0" + }, + "node_modules/@walletconnect/browser-utils/node_modules/detect-browser": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/detect-browser/-/detect-browser-5.2.0.tgz", + "integrity": "sha512-tr7XntDAu50BVENgQfajMLzacmSe34D+qZc4zjnniz0ZVuw/TZcLcyxHQjYpJTM36sGEkZZlYLnIM1hH7alTMA==", + "license": "MIT" + }, + "node_modules/@walletconnect/core": { + "version": "2.17.1", + "resolved": "https://registry.npmjs.org/@walletconnect/core/-/core-2.17.1.tgz", + "integrity": "sha512-SMgJR5hEyEE/tENIuvlEb4aB9tmMXPzQ38Y61VgYBmwAFEhOHtpt8EDfnfRWqEhMyXuBXG4K70Yh8c67Yry+Xw==", + "license": "Apache-2.0", + "dependencies": { + "@walletconnect/heartbeat": "1.2.2", + "@walletconnect/jsonrpc-provider": "1.0.14", + "@walletconnect/jsonrpc-types": "1.0.4", + "@walletconnect/jsonrpc-utils": "1.0.8", + "@walletconnect/jsonrpc-ws-connection": "1.0.14", + "@walletconnect/keyvaluestorage": "1.1.1", + "@walletconnect/logger": "2.1.2", + "@walletconnect/relay-api": "1.0.11", + "@walletconnect/relay-auth": "1.0.4", + "@walletconnect/safe-json": "1.0.2", + "@walletconnect/time": "1.0.2", + "@walletconnect/types": "2.17.1", + "@walletconnect/utils": "2.17.1", + "@walletconnect/window-getters": "1.0.1", + "events": "3.3.0", + "lodash.isequal": "4.5.0", + "uint8arrays": "3.1.0" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/@walletconnect/core/node_modules/@ethersproject/hash": { + "version": "5.7.0", + "resolved": "https://registry.npmjs.org/@ethersproject/hash/-/hash-5.7.0.tgz", + "integrity": "sha512-qX5WrQfnah1EFnO5zJv1v46a8HW0+E5xuBBDTwMFZLuVTx0tbU2kkx15NqdjxecrLGatQN9FGQKpb1FKdHCt+g==", + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "license": "MIT", + "dependencies": { + "@ethersproject/abstract-signer": "^5.7.0", + "@ethersproject/address": "^5.7.0", + "@ethersproject/base64": "^5.7.0", + "@ethersproject/bignumber": "^5.7.0", + "@ethersproject/bytes": "^5.7.0", + "@ethersproject/keccak256": "^5.7.0", + "@ethersproject/logger": "^5.7.0", + "@ethersproject/properties": "^5.7.0", + "@ethersproject/strings": "^5.7.0" + } + }, + "node_modules/@walletconnect/core/node_modules/@ethersproject/transactions": { + "version": "5.7.0", + "resolved": "https://registry.npmjs.org/@ethersproject/transactions/-/transactions-5.7.0.tgz", + "integrity": "sha512-kmcNicCp1lp8qanMTC3RIikGgoJ80ztTyvtsFvCYpSCfkjhD0jZ2LOrnbcuxuToLIUYYf+4XwD1rP+B/erDIhQ==", + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "license": "MIT", + "dependencies": { + "@ethersproject/address": "^5.7.0", + "@ethersproject/bignumber": "^5.7.0", + "@ethersproject/bytes": "^5.7.0", + "@ethersproject/constants": "^5.7.0", + "@ethersproject/keccak256": "^5.7.0", + "@ethersproject/logger": "^5.7.0", + "@ethersproject/properties": "^5.7.0", + "@ethersproject/rlp": "^5.7.0", + "@ethersproject/signing-key": "^5.7.0" + } + }, + "node_modules/@walletconnect/core/node_modules/@stablelib/random": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@stablelib/random/-/random-1.0.2.tgz", + "integrity": "sha512-rIsE83Xpb7clHPVRlBj8qNe5L8ISQOzjghYQm/dZ7VaM2KHYwMW5adjQjrzTZCchFnNCNhkwtnOBa9HTMJCI8w==", + "license": "MIT", + "dependencies": { + "@stablelib/binary": "^1.0.1", + "@stablelib/wipe": "^1.0.1" + } + }, + "node_modules/@walletconnect/core/node_modules/@walletconnect/keyvaluestorage": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@walletconnect/keyvaluestorage/-/keyvaluestorage-1.1.1.tgz", + "integrity": "sha512-V7ZQq2+mSxAq7MrRqDxanTzu2RcElfK1PfNYiaVnJgJ7Q7G7hTVwF8voIBx92qsRyGHZihrwNPHuZd1aKkd0rA==", + "license": "MIT", + "dependencies": { + "@walletconnect/safe-json": "^1.0.1", + "idb-keyval": "^6.2.1", + "unstorage": "^1.9.0" + }, + "peerDependencies": { + "@react-native-async-storage/async-storage": "1.x" + }, + "peerDependenciesMeta": { + "@react-native-async-storage/async-storage": { + "optional": true + } + } + }, + "node_modules/@walletconnect/core/node_modules/@walletconnect/relay-auth": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/@walletconnect/relay-auth/-/relay-auth-1.0.4.tgz", + "integrity": "sha512-kKJcS6+WxYq5kshpPaxGHdwf5y98ZwbfuS4EE/NkQzqrDFm5Cj+dP8LofzWvjrrLkZq7Afy7WrQMXdLy8Sx7HQ==", + "license": "MIT", + "dependencies": { + "@stablelib/ed25519": "^1.0.2", + "@stablelib/random": "^1.0.1", + "@walletconnect/safe-json": "^1.0.1", + "@walletconnect/time": "^1.0.2", + "tslib": "1.14.1", + "uint8arrays": "^3.0.0" + } + }, + "node_modules/@walletconnect/core/node_modules/@walletconnect/safe-json": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@walletconnect/safe-json/-/safe-json-1.0.2.tgz", + "integrity": "sha512-Ogb7I27kZ3LPC3ibn8ldyUr5544t3/STow9+lzz7Sfo808YD7SBWk7SAsdBFlYgP2zDRy2hS3sKRcuSRM0OTmA==", + "license": "MIT", + "dependencies": { + "tslib": "1.14.1" + } + }, + "node_modules/@walletconnect/core/node_modules/@walletconnect/types": { + "version": "2.17.1", + "resolved": "https://registry.npmjs.org/@walletconnect/types/-/types-2.17.1.tgz", + "integrity": "sha512-aiUeBE3EZZTsZBv5Cju3D0PWAsZCMks1g3hzQs9oNtrbuLL6pKKU0/zpKwk4vGywszxPvC3U0tBCku9LLsH/0A==", + "license": "Apache-2.0", + "dependencies": { + "@walletconnect/events": "1.0.1", + "@walletconnect/heartbeat": "1.2.2", + "@walletconnect/jsonrpc-types": "1.0.4", + "@walletconnect/keyvaluestorage": "1.1.1", + "@walletconnect/logger": "2.1.2", + "events": "3.3.0" + } + }, + "node_modules/@walletconnect/core/node_modules/@walletconnect/utils": { + "version": "2.17.1", + "resolved": "https://registry.npmjs.org/@walletconnect/utils/-/utils-2.17.1.tgz", + "integrity": "sha512-KL7pPwq7qUC+zcTmvxGqIyYanfHgBQ+PFd0TEblg88jM7EjuDLhjyyjtkhyE/2q7QgR7OanIK7pCpilhWvBsBQ==", + "license": "Apache-2.0", + "dependencies": { + "@ethersproject/hash": "5.7.0", + "@ethersproject/transactions": "5.7.0", + "@stablelib/chacha20poly1305": "1.0.1", + "@stablelib/hkdf": "1.0.1", + "@stablelib/random": "1.0.2", + "@stablelib/sha256": "1.0.1", + "@stablelib/x25519": "1.0.3", + "@walletconnect/jsonrpc-utils": "1.0.8", + "@walletconnect/keyvaluestorage": "1.1.1", + "@walletconnect/relay-api": "1.0.11", + "@walletconnect/relay-auth": "1.0.4", + "@walletconnect/safe-json": "1.0.2", + "@walletconnect/time": "1.0.2", + "@walletconnect/types": "2.17.1", + "@walletconnect/window-getters": "1.0.1", + "@walletconnect/window-metadata": "1.0.1", + "detect-browser": "5.3.0", + "elliptic": "6.5.7", + "query-string": "7.1.3", + "uint8arrays": "3.1.0" + } + }, + "node_modules/@walletconnect/core/node_modules/@walletconnect/window-getters": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@walletconnect/window-getters/-/window-getters-1.0.1.tgz", + "integrity": "sha512-vHp+HqzGxORPAN8gY03qnbTMnhqIwjeRJNOMOAzePRg4xVEEE2WvYsI9G2NMjOknA8hnuYbU3/hwLcKbjhc8+Q==", + "license": "MIT", + "dependencies": { + "tslib": "1.14.1" + } + }, + "node_modules/@walletconnect/core/node_modules/@walletconnect/window-metadata": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@walletconnect/window-metadata/-/window-metadata-1.0.1.tgz", + "integrity": "sha512-9koTqyGrM2cqFRW517BPY/iEtUDx2r1+Pwwu5m7sJ7ka79wi3EyqhqcICk/yDmv6jAS1rjKgTKXlEhanYjijcA==", + "license": "MIT", + "dependencies": { + "@walletconnect/window-getters": "^1.0.1", + "tslib": "1.14.1" + } + }, + "node_modules/@walletconnect/core/node_modules/bn.js": { + "version": "4.12.2", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.2.tgz", + "integrity": "sha512-n4DSx829VRTRByMRGdjQ9iqsN0Bh4OolPsFnaZBLcbi8iXcB+kJ9s7EnRt4wILZNV3kPLHkRVfOc/HvhC3ovDw==", + "license": "MIT" + }, + "node_modules/@walletconnect/core/node_modules/chokidar": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-4.0.3.tgz", + "integrity": "sha512-Qgzu8kfBvo+cA4962jnP1KkS6Dop5NS6g7R5LFYJr4b8Ub94PPQXUksCw9PvXoeXPRRddRNC5C1JQUR2SMGtnA==", + "license": "MIT", + "dependencies": { + "readdirp": "^4.0.1" + }, + "engines": { + "node": ">= 14.16.0" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + } + }, + "node_modules/@walletconnect/core/node_modules/elliptic": { + "version": "6.5.7", + "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.5.7.tgz", + "integrity": "sha512-ESVCtTwiA+XhY3wyh24QqRGBoP3rEdDUl3EDUUo9tft074fi19IrdpH7hLCMMP3CIj7jb3W96rn8lt/BqIlt5Q==", + "license": "MIT", + "dependencies": { + "bn.js": "^4.11.9", + "brorand": "^1.1.0", + "hash.js": "^1.0.0", + "hmac-drbg": "^1.0.1", + "inherits": "^2.0.4", + "minimalistic-assert": "^1.0.1", + "minimalistic-crypto-utils": "^1.0.1" + } + }, + "node_modules/@walletconnect/core/node_modules/lru-cache": { + "version": "10.4.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz", + "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==", + "license": "ISC" + }, + "node_modules/@walletconnect/core/node_modules/multiformats": { + "version": "9.9.0", + "resolved": "https://registry.npmjs.org/multiformats/-/multiformats-9.9.0.tgz", + "integrity": "sha512-HoMUjhH9T8DDBNT+6xzkrd9ga/XiBI4xLr58LJACwK6G3HTOPeMz4nB4KJs33L2BelrIJa7P0VuNaVF3hMYfjg==", + "license": "(Apache-2.0 AND MIT)" + }, + "node_modules/@walletconnect/core/node_modules/readdirp": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-4.1.2.tgz", + "integrity": "sha512-GDhwkLfywWL2s6vEjyhri+eXmfH6j1L7JE27WhqLeYzoh/A3DBaYGEj2H/HFZCn/kMfim73FXxEJTw06WtxQwg==", + "license": "MIT", + "engines": { + "node": ">= 14.18.0" + }, + "funding": { + "type": "individual", + "url": "https://paulmillr.com/funding/" + } + }, + "node_modules/@walletconnect/core/node_modules/tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", + "license": "0BSD" + }, + "node_modules/@walletconnect/core/node_modules/uint8arrays": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/uint8arrays/-/uint8arrays-3.1.0.tgz", + "integrity": "sha512-ei5rfKtoRO8OyOIor2Rz5fhzjThwIHJZ3uyDPnDHTXbP0aMQ1RN/6AI5B5d9dBxJOU+BvOAk7ZQ1xphsX8Lrog==", + "license": "MIT", + "dependencies": { + "multiformats": "^9.4.2" + } + }, + "node_modules/@walletconnect/core/node_modules/unstorage": { + "version": "1.17.1", + "resolved": "https://registry.npmjs.org/unstorage/-/unstorage-1.17.1.tgz", + "integrity": "sha512-KKGwRTT0iVBCErKemkJCLs7JdxNVfqTPc/85ae1XES0+bsHbc/sFBfVi5kJp156cc51BHinIH2l3k0EZ24vOBQ==", + "license": "MIT", + "dependencies": { + "anymatch": "^3.1.3", + "chokidar": "^4.0.3", + "destr": "^2.0.5", + "h3": "^1.15.4", + "lru-cache": "^10.4.3", + "node-fetch-native": "^1.6.7", + "ofetch": "^1.4.1", + "ufo": "^1.6.1" + }, + "peerDependencies": { + "@azure/app-configuration": "^1.8.0", + "@azure/cosmos": "^4.2.0", + "@azure/data-tables": "^13.3.0", + "@azure/identity": "^4.6.0", + "@azure/keyvault-secrets": "^4.9.0", + "@azure/storage-blob": "^12.26.0", + "@capacitor/preferences": "^6.0.3 || ^7.0.0", + "@deno/kv": ">=0.9.0", + "@netlify/blobs": "^6.5.0 || ^7.0.0 || ^8.1.0 || ^9.0.0 || ^10.0.0", + "@planetscale/database": "^1.19.0", + "@upstash/redis": "^1.34.3", + "@vercel/blob": ">=0.27.1", + "@vercel/functions": "^2.2.12 || ^3.0.0", + "@vercel/kv": "^1.0.1", + "aws4fetch": "^1.0.20", + "db0": ">=0.2.1", + "idb-keyval": "^6.2.1", + "ioredis": "^5.4.2", + "uploadthing": "^7.4.4" + }, + "peerDependenciesMeta": { + "@azure/app-configuration": { + "optional": true + }, + "@azure/cosmos": { + "optional": true + }, + "@azure/data-tables": { + "optional": true + }, + "@azure/identity": { + "optional": true + }, + "@azure/keyvault-secrets": { + "optional": true + }, + "@azure/storage-blob": { + "optional": true + }, + "@capacitor/preferences": { + "optional": true + }, + "@deno/kv": { + "optional": true + }, + "@netlify/blobs": { + "optional": true + }, + "@planetscale/database": { + "optional": true + }, + "@upstash/redis": { + "optional": true + }, + "@vercel/blob": { + "optional": true + }, + "@vercel/functions": { + "optional": true + }, + "@vercel/kv": { + "optional": true + }, + "aws4fetch": { + "optional": true + }, + "db0": { + "optional": true + }, + "idb-keyval": { + "optional": true + }, + "ioredis": { + "optional": true + }, + "uploadthing": { + "optional": true + } + } + }, + "node_modules/@walletconnect/environment": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@walletconnect/environment/-/environment-1.0.1.tgz", + "integrity": "sha512-T426LLZtHj8e8rYnKfzsw1aG6+M0BT1ZxayMdv/p8yM0MU+eJDISqNY3/bccxRr4LrF9csq02Rhqt08Ibl0VRg==", + "license": "MIT", + "dependencies": { + "tslib": "1.14.1" + } + }, + "node_modules/@walletconnect/environment/node_modules/tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", + "license": "0BSD" + }, + "node_modules/@walletconnect/events": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@walletconnect/events/-/events-1.0.1.tgz", + "integrity": "sha512-NPTqaoi0oPBVNuLv7qPaJazmGHs5JGyO8eEAk5VGKmJzDR7AHzD4k6ilox5kxk1iwiOnFopBOOMLs86Oa76HpQ==", + "license": "MIT", + "dependencies": { + "keyvaluestorage-interface": "^1.0.0", + "tslib": "1.14.1" + } + }, + "node_modules/@walletconnect/events/node_modules/tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", + "license": "0BSD" + }, + "node_modules/@walletconnect/heartbeat": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/@walletconnect/heartbeat/-/heartbeat-1.2.2.tgz", + "integrity": "sha512-uASiRmC5MwhuRuf05vq4AT48Pq8RMi876zV8rr8cV969uTOzWdB/k+Lj5yI2PBtB1bGQisGen7MM1GcZlQTBXw==", + "license": "MIT", + "dependencies": { + "@walletconnect/events": "^1.0.1", + "@walletconnect/time": "^1.0.2", + "events": "^3.3.0" + } + }, + "node_modules/@walletconnect/jsonrpc-provider": { + "version": "1.0.14", + "resolved": "https://registry.npmjs.org/@walletconnect/jsonrpc-provider/-/jsonrpc-provider-1.0.14.tgz", + "integrity": "sha512-rtsNY1XqHvWj0EtITNeuf8PHMvlCLiS3EjQL+WOkxEOA4KPxsohFnBDeyPYiNm4ZvkQdLnece36opYidmtbmow==", + "license": "MIT", + "dependencies": { + "@walletconnect/jsonrpc-utils": "^1.0.8", + "@walletconnect/safe-json": "^1.0.2", + "events": "^3.3.0" + } + }, + "node_modules/@walletconnect/jsonrpc-provider/node_modules/@walletconnect/safe-json": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@walletconnect/safe-json/-/safe-json-1.0.2.tgz", + "integrity": "sha512-Ogb7I27kZ3LPC3ibn8ldyUr5544t3/STow9+lzz7Sfo808YD7SBWk7SAsdBFlYgP2zDRy2hS3sKRcuSRM0OTmA==", + "license": "MIT", + "dependencies": { + "tslib": "1.14.1" + } + }, + "node_modules/@walletconnect/jsonrpc-provider/node_modules/tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", + "license": "0BSD" + }, + "node_modules/@walletconnect/jsonrpc-types": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/@walletconnect/jsonrpc-types/-/jsonrpc-types-1.0.4.tgz", + "integrity": "sha512-P6679fG/M+wuWg9TY8mh6xFSdYnFyFjwFelxyISxMDrlbXokorEVXYOxiqEbrU3x1BmBoCAJJ+vtEaEoMlpCBQ==", + "license": "MIT", + "dependencies": { + "events": "^3.3.0", + "keyvaluestorage-interface": "^1.0.0" + } + }, + "node_modules/@walletconnect/jsonrpc-utils": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/@walletconnect/jsonrpc-utils/-/jsonrpc-utils-1.0.8.tgz", + "integrity": "sha512-vdeb03bD8VzJUL6ZtzRYsFMq1eZQcM3EAzT0a3st59dyLfJ0wq+tKMpmGH7HlB7waD858UWgfIcudbPFsbzVdw==", + "license": "MIT", + "dependencies": { + "@walletconnect/environment": "^1.0.1", + "@walletconnect/jsonrpc-types": "^1.0.3", + "tslib": "1.14.1" + } + }, + "node_modules/@walletconnect/jsonrpc-utils/node_modules/tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", + "license": "0BSD" + }, + "node_modules/@walletconnect/jsonrpc-ws-connection": { + "version": "1.0.14", + "resolved": "https://registry.npmjs.org/@walletconnect/jsonrpc-ws-connection/-/jsonrpc-ws-connection-1.0.14.tgz", + "integrity": "sha512-Jsl6fC55AYcbkNVkwNM6Jo+ufsuCQRqViOQ8ZBPH9pRREHH9welbBiszuTLqEJiQcO/6XfFDl6bzCJIkrEi8XA==", + "license": "MIT", + "dependencies": { + "@walletconnect/jsonrpc-utils": "^1.0.6", + "@walletconnect/safe-json": "^1.0.2", + "events": "^3.3.0", + "ws": "^7.5.1" + } + }, + "node_modules/@walletconnect/jsonrpc-ws-connection/node_modules/@walletconnect/safe-json": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@walletconnect/safe-json/-/safe-json-1.0.2.tgz", + "integrity": "sha512-Ogb7I27kZ3LPC3ibn8ldyUr5544t3/STow9+lzz7Sfo808YD7SBWk7SAsdBFlYgP2zDRy2hS3sKRcuSRM0OTmA==", + "license": "MIT", + "dependencies": { + "tslib": "1.14.1" + } + }, + "node_modules/@walletconnect/jsonrpc-ws-connection/node_modules/tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", + "license": "0BSD" + }, + "node_modules/@walletconnect/jsonrpc-ws-connection/node_modules/ws": { + "version": "7.5.10", + "resolved": "https://registry.npmjs.org/ws/-/ws-7.5.10.tgz", + "integrity": "sha512-+dbF1tHwZpXcbOJdVOkzLDxZP1ailvSxM6ZweXTegylPny803bFhA+vqBYw4s31NSAk4S2Qz+AKXK9a4wkdjcQ==", + "license": "MIT", + "engines": { + "node": ">=8.3.0" + }, + "peerDependencies": { + "bufferutil": "^4.0.1", + "utf-8-validate": "^5.0.2" + }, + "peerDependenciesMeta": { + "bufferutil": { + "optional": true + }, + "utf-8-validate": { + "optional": true + } + } + }, + "node_modules/@walletconnect/logger": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/@walletconnect/logger/-/logger-2.1.2.tgz", + "integrity": "sha512-aAb28I3S6pYXZHQm5ESB+V6rDqIYfsnHaQyzFbwUUBFY4H0OXx/YtTl8lvhUNhMMfb9UxbwEBS253TlXUYJWSw==", + "license": "MIT", + "dependencies": { + "@walletconnect/safe-json": "^1.0.2", + "pino": "7.11.0" + } + }, + "node_modules/@walletconnect/logger/node_modules/@walletconnect/safe-json": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@walletconnect/safe-json/-/safe-json-1.0.2.tgz", + "integrity": "sha512-Ogb7I27kZ3LPC3ibn8ldyUr5544t3/STow9+lzz7Sfo808YD7SBWk7SAsdBFlYgP2zDRy2hS3sKRcuSRM0OTmA==", + "license": "MIT", + "dependencies": { + "tslib": "1.14.1" + } + }, + "node_modules/@walletconnect/logger/node_modules/on-exit-leak-free": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/on-exit-leak-free/-/on-exit-leak-free-0.2.0.tgz", + "integrity": "sha512-dqaz3u44QbRXQooZLTUKU41ZrzYrcvLISVgbrzbyCMxpmSLJvZ3ZamIJIZ29P6OhZIkNIQKosdeM6t1LYbA9hg==", + "license": "MIT" + }, + "node_modules/@walletconnect/logger/node_modules/pino": { + "version": "7.11.0", + "resolved": "https://registry.npmjs.org/pino/-/pino-7.11.0.tgz", + "integrity": "sha512-dMACeu63HtRLmCG8VKdy4cShCPKaYDR4youZqoSWLxl5Gu99HUw8bw75thbPv9Nip+H+QYX8o3ZJbTdVZZ2TVg==", + "license": "MIT", + "dependencies": { + "atomic-sleep": "^1.0.0", + "fast-redact": "^3.0.0", + "on-exit-leak-free": "^0.2.0", + "pino-abstract-transport": "v0.5.0", + "pino-std-serializers": "^4.0.0", + "process-warning": "^1.0.0", + "quick-format-unescaped": "^4.0.3", + "real-require": "^0.1.0", + "safe-stable-stringify": "^2.1.0", + "sonic-boom": "^2.2.1", + "thread-stream": "^0.15.1" + }, + "bin": { + "pino": "bin.js" + } + }, + "node_modules/@walletconnect/logger/node_modules/pino-abstract-transport": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/pino-abstract-transport/-/pino-abstract-transport-0.5.0.tgz", + "integrity": "sha512-+KAgmVeqXYbTtU2FScx1XS3kNyfZ5TrXY07V96QnUSFqo2gAqlvmaxH67Lj7SWazqsMabf+58ctdTcBgnOLUOQ==", + "license": "MIT", + "dependencies": { + "duplexify": "^4.1.2", + "split2": "^4.0.0" + } + }, + "node_modules/@walletconnect/logger/node_modules/pino-std-serializers": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/pino-std-serializers/-/pino-std-serializers-4.0.0.tgz", + "integrity": "sha512-cK0pekc1Kjy5w9V2/n+8MkZwusa6EyyxfeQCB799CQRhRt/CqYKiWs5adeu8Shve2ZNffvfC/7J64A2PJo1W/Q==", + "license": "MIT" + }, + "node_modules/@walletconnect/logger/node_modules/process-warning": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/process-warning/-/process-warning-1.0.0.tgz", + "integrity": "sha512-du4wfLyj4yCZq1VupnVSZmRsPJsNuxoDQFdCFHLaYiEbFBD7QE0a+I4D7hOxrVnh78QE/YipFAj9lXHiXocV+Q==", + "license": "MIT" + }, + "node_modules/@walletconnect/logger/node_modules/real-require": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/real-require/-/real-require-0.1.0.tgz", + "integrity": "sha512-r/H9MzAWtrv8aSVjPCMFpDMl5q66GqtmmRkRjpHTsp4zBAa+snZyiQNlMONiUmEJcsnaw0wCauJ2GWODr/aFkg==", + "license": "MIT", + "engines": { + "node": ">= 12.13.0" + } + }, + "node_modules/@walletconnect/logger/node_modules/sonic-boom": { + "version": "2.8.0", + "resolved": "https://registry.npmjs.org/sonic-boom/-/sonic-boom-2.8.0.tgz", + "integrity": "sha512-kuonw1YOYYNOve5iHdSahXPOK49GqwA+LZhI6Wz/l0rP57iKyXXIHaRagOBHAPmGwJC6od2Z9zgvZ5loSgMlVg==", + "license": "MIT", + "dependencies": { + "atomic-sleep": "^1.0.0" + } + }, + "node_modules/@walletconnect/logger/node_modules/thread-stream": { + "version": "0.15.2", + "resolved": "https://registry.npmjs.org/thread-stream/-/thread-stream-0.15.2.tgz", + "integrity": "sha512-UkEhKIg2pD+fjkHQKyJO3yoIvAP3N6RlNFt2dUhcS1FGvCD1cQa1M/PGknCLFIyZdtJOWQjejp7bdNqmN7zwdA==", + "license": "MIT", + "dependencies": { + "real-require": "^0.1.0" + } + }, + "node_modules/@walletconnect/logger/node_modules/tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", + "license": "0BSD" + }, + "node_modules/@walletconnect/mobile-registry": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/@walletconnect/mobile-registry/-/mobile-registry-1.4.0.tgz", + "integrity": "sha512-ZtKRio4uCZ1JUF7LIdecmZt7FOLnX72RPSY7aUVu7mj7CSfxDwUn6gBuK6WGtH+NZCldBqDl5DenI5fFSvkKYw==", + "deprecated": "Deprecated in favor of dynamic registry available from: https://github.com/walletconnect/walletconnect-registry", + "license": "MIT" + }, + "node_modules/@walletconnect/modal": { + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/@walletconnect/modal/-/modal-2.7.0.tgz", + "integrity": "sha512-RQVt58oJ+rwqnPcIvRFeMGKuXb9qkgSmwz4noF8JZGUym3gUAzVs+uW2NQ1Owm9XOJAV+sANrtJ+VoVq1ftElw==", + "deprecated": "Please follow the migration guide on https://docs.reown.com/appkit/upgrade/wcm", + "license": "Apache-2.0", + "dependencies": { + "@walletconnect/modal-core": "2.7.0", + "@walletconnect/modal-ui": "2.7.0" + } + }, + "node_modules/@walletconnect/modal-core": { + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/@walletconnect/modal-core/-/modal-core-2.7.0.tgz", + "integrity": "sha512-oyMIfdlNdpyKF2kTJowTixZSo0PGlCJRdssUN/EZdA6H6v03hZnf09JnwpljZNfir2M65Dvjm/15nGrDQnlxSA==", + "license": "Apache-2.0", + "dependencies": { + "valtio": "1.11.2" + } + }, + "node_modules/@walletconnect/modal-ui": { + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/@walletconnect/modal-ui/-/modal-ui-2.7.0.tgz", + "integrity": "sha512-gERYvU7D7K1ANCN/8vUgsE0d2hnRemfAFZ2novm9aZBg7TEd/4EgB+AqbJ+1dc7GhOL6dazckVq78TgccHb7mQ==", + "license": "Apache-2.0", + "dependencies": { + "@walletconnect/modal-core": "2.7.0", + "lit": "2.8.0", + "motion": "10.16.2", + "qrcode": "1.5.3" + } + }, + "node_modules/@walletconnect/qrcode-modal": { + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/@walletconnect/qrcode-modal/-/qrcode-modal-1.8.0.tgz", + "integrity": "sha512-BueaFefaAi8mawE45eUtztg3ZFbsAH4DDXh1UNwdUlsvFMjqcYzLUG0xZvDd6z2eOpbgDg2N3bl6gF0KONj1dg==", + "deprecated": "WalletConnect's v1 SDKs are now deprecated. Please upgrade to a v2 SDK. For details see: https://docs.walletconnect.com/", + "license": "Apache-2.0", + "dependencies": { + "@walletconnect/browser-utils": "^1.8.0", + "@walletconnect/mobile-registry": "^1.4.0", + "@walletconnect/types": "^1.8.0", + "copy-to-clipboard": "^3.3.1", + "preact": "10.4.1", + "qrcode": "1.4.4" + } + }, + "node_modules/@walletconnect/qrcode-modal/node_modules/@walletconnect/types": { + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/@walletconnect/types/-/types-1.8.0.tgz", + "integrity": "sha512-Cn+3I0V0vT9ghMuzh1KzZvCkiAxTq+1TR2eSqw5E5AVWfmCtECFkVZBP6uUJZ8YjwLqXheI+rnjqPy7sVM4Fyg==", + "deprecated": "WalletConnect's v1 SDKs are now deprecated. Please upgrade to a v2 SDK. For details see: https://docs.walletconnect.com/", + "license": "Apache-2.0" + }, + "node_modules/@walletconnect/qrcode-modal/node_modules/ansi-regex": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.1.tgz", + "integrity": "sha512-ILlv4k/3f6vfQ4OoP2AGvirOktlQ98ZEL1k9FaQjxa3L1abBgbuTDAdPOpvbGncC0BTVQrl+OM8xZGK6tWXt7g==", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/@walletconnect/qrcode-modal/node_modules/ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "license": "MIT", + "dependencies": { + "color-convert": "^1.9.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/@walletconnect/qrcode-modal/node_modules/buffer": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", + "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT", + "dependencies": { + "base64-js": "^1.3.1", + "ieee754": "^1.1.13" + } + }, + "node_modules/@walletconnect/qrcode-modal/node_modules/cliui": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-5.0.0.tgz", + "integrity": "sha512-PYeGSEmmHM6zvoef2w8TPzlrnNpXIjTipYK780YswmIP9vjxmd6Y2a3CB2Ks6/AU8NHjZugXvo8w3oWM2qnwXA==", + "license": "ISC", + "dependencies": { + "string-width": "^3.1.0", + "strip-ansi": "^5.2.0", + "wrap-ansi": "^5.1.0" + } + }, + "node_modules/@walletconnect/qrcode-modal/node_modules/color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "license": "MIT", + "dependencies": { + "color-name": "1.1.3" + } + }, + "node_modules/@walletconnect/qrcode-modal/node_modules/color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", + "license": "MIT" + }, + "node_modules/@walletconnect/qrcode-modal/node_modules/decamelize": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", + "integrity": "sha512-z2S+W9X73hAUUki+N+9Za2lBlun89zigOyGrsax+KUQ6wKW4ZoWpEYBkGhQjwAjjDCkWxhY0VKEhk8wzY7F5cA==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/@walletconnect/qrcode-modal/node_modules/emoji-regex": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-7.0.3.tgz", + "integrity": "sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==", + "license": "MIT" + }, + "node_modules/@walletconnect/qrcode-modal/node_modules/find-up": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", + "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", + "license": "MIT", + "dependencies": { + "locate-path": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/@walletconnect/qrcode-modal/node_modules/is-fullwidth-code-point": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", + "integrity": "sha512-VHskAKYM8RfSFXwee5t5cbN5PZeq1Wrh6qd5bkyiXIf6UQcN6w/A0eXM9r6t8d+GYOh+o6ZhiEnb88LN/Y8m2w==", + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/@walletconnect/qrcode-modal/node_modules/locate-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", + "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", + "license": "MIT", + "dependencies": { + "p-locate": "^3.0.0", + "path-exists": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/@walletconnect/qrcode-modal/node_modules/p-locate": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz", + "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", + "license": "MIT", + "dependencies": { + "p-limit": "^2.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/@walletconnect/qrcode-modal/node_modules/path-exists": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", + "integrity": "sha512-bpC7GYwiDYQ4wYLe+FA8lhRjhQCMcQGuSgGGqDkg/QerRWw9CmGRT0iSOVRSZJ29NMLZgIzqaljJ63oaL4NIJQ==", + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/@walletconnect/qrcode-modal/node_modules/pngjs": { + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/pngjs/-/pngjs-3.4.0.tgz", + "integrity": "sha512-NCrCHhWmnQklfH4MtJMRjZ2a8c80qXeMlQMv2uVp9ISJMTt562SbGd6n2oq0PaPgKm7Z6pL9E2UlLIhC+SHL3w==", + "license": "MIT", + "engines": { + "node": ">=4.0.0" + } + }, + "node_modules/@walletconnect/qrcode-modal/node_modules/qrcode": { + "version": "1.4.4", + "resolved": "https://registry.npmjs.org/qrcode/-/qrcode-1.4.4.tgz", + "integrity": "sha512-oLzEC5+NKFou9P0bMj5+v6Z40evexeE29Z9cummZXZ9QXyMr3lphkURzxjXgPJC5azpxcshoDWV1xE46z+/c3Q==", + "license": "MIT", + "dependencies": { + "buffer": "^5.4.3", + "buffer-alloc": "^1.2.0", + "buffer-from": "^1.1.1", + "dijkstrajs": "^1.0.1", + "isarray": "^2.0.1", + "pngjs": "^3.3.0", + "yargs": "^13.2.4" + }, + "bin": { + "qrcode": "bin/qrcode" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/@walletconnect/qrcode-modal/node_modules/string-width": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz", + "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==", + "license": "MIT", + "dependencies": { + "emoji-regex": "^7.0.1", + "is-fullwidth-code-point": "^2.0.0", + "strip-ansi": "^5.1.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/@walletconnect/qrcode-modal/node_modules/strip-ansi": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", + "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", + "license": "MIT", + "dependencies": { + "ansi-regex": "^4.1.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/@walletconnect/qrcode-modal/node_modules/wrap-ansi": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-5.1.0.tgz", + "integrity": "sha512-QC1/iN/2/RPVJ5jYK8BGttj5z83LmSKmvbvrXPNCLZSEb32KKVDJDl/MOt2N01qU2H/FkzEa9PKto1BqDjtd7Q==", + "license": "MIT", + "dependencies": { + "ansi-styles": "^3.2.0", + "string-width": "^3.0.0", + "strip-ansi": "^5.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/@walletconnect/qrcode-modal/node_modules/y18n": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.3.tgz", + "integrity": "sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ==", + "license": "ISC" + }, + "node_modules/@walletconnect/qrcode-modal/node_modules/yargs": { + "version": "13.3.2", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-13.3.2.tgz", + "integrity": "sha512-AX3Zw5iPruN5ie6xGRIDgqkT+ZhnRlZMLMHAs8tg7nRruy2Nb+i5o9bwghAogtM08q1dpr2LVoS8KSTMYpWXUw==", + "license": "MIT", + "dependencies": { + "cliui": "^5.0.0", + "find-up": "^3.0.0", + "get-caller-file": "^2.0.1", + "require-directory": "^2.1.1", + "require-main-filename": "^2.0.0", + "set-blocking": "^2.0.0", + "string-width": "^3.0.0", + "which-module": "^2.0.0", + "y18n": "^4.0.0", + "yargs-parser": "^13.1.2" + } + }, + "node_modules/@walletconnect/qrcode-modal/node_modules/yargs-parser": { + "version": "13.1.2", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-13.1.2.tgz", + "integrity": "sha512-3lbsNRf/j+A4QuSZfDRA7HRSfWrzO0YjqTJd5kjAq37Zep1CEgaYmrH9Q3GwPiB9cHyd1Y1UwggGhJGoxipbzg==", + "license": "ISC", + "dependencies": { + "camelcase": "^5.0.0", + "decamelize": "^1.2.0" + } + }, + "node_modules/@walletconnect/relay-api": { + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/@walletconnect/relay-api/-/relay-api-1.0.11.tgz", + "integrity": "sha512-tLPErkze/HmC9aCmdZOhtVmYZq1wKfWTJtygQHoWtgg722Jd4homo54Cs4ak2RUFUZIGO2RsOpIcWipaua5D5Q==", + "license": "MIT", + "dependencies": { + "@walletconnect/jsonrpc-types": "^1.0.2" + } + }, + "node_modules/@walletconnect/relay-auth": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@walletconnect/relay-auth/-/relay-auth-1.1.0.tgz", + "integrity": "sha512-qFw+a9uRz26jRCDgL7Q5TA9qYIgcNY8jpJzI1zAWNZ8i7mQjaijRnWFKsCHAU9CyGjvt6RKrRXyFtFOpWTVmCQ==", + "license": "MIT", + "dependencies": { + "@noble/curves": "1.8.0", + "@noble/hashes": "1.7.0", + "@walletconnect/safe-json": "^1.0.1", + "@walletconnect/time": "^1.0.2", + "uint8arrays": "^3.0.0" + } + }, + "node_modules/@walletconnect/relay-auth/node_modules/@noble/curves": { + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/@noble/curves/-/curves-1.8.0.tgz", + "integrity": "sha512-j84kjAbzEnQHaSIhRPUmB3/eVXu2k3dKPl2LOrR8fSOIL+89U+7lV117EWHtq/GHM3ReGHM46iRBdZfpc4HRUQ==", + "license": "MIT", + "dependencies": { + "@noble/hashes": "1.7.0" + }, + "engines": { + "node": "^14.21.3 || >=16" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + } + }, + "node_modules/@walletconnect/relay-auth/node_modules/@noble/hashes": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.7.0.tgz", + "integrity": "sha512-HXydb0DgzTpDPwbVeDGCG1gIu7X6+AuU6Zl6av/E/KG8LMsvPntvq+w17CHRpKBmN6Ybdrt1eP3k4cj8DJa78w==", + "license": "MIT", + "engines": { + "node": "^14.21.3 || >=16" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + } + }, + "node_modules/@walletconnect/relay-auth/node_modules/@walletconnect/safe-json": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@walletconnect/safe-json/-/safe-json-1.0.2.tgz", + "integrity": "sha512-Ogb7I27kZ3LPC3ibn8ldyUr5544t3/STow9+lzz7Sfo808YD7SBWk7SAsdBFlYgP2zDRy2hS3sKRcuSRM0OTmA==", + "license": "MIT", + "dependencies": { + "tslib": "1.14.1" + } + }, + "node_modules/@walletconnect/relay-auth/node_modules/tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", + "license": "0BSD" + }, + "node_modules/@walletconnect/safe-json": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@walletconnect/safe-json/-/safe-json-1.0.0.tgz", + "integrity": "sha512-QJzp/S/86sUAgWY6eh5MKYmSfZaRpIlmCJdi5uG4DJlKkZrHEF7ye7gA+VtbVzvTtpM/gRwO2plQuiooIeXjfg==", + "license": "MIT" + }, + "node_modules/@walletconnect/sign-client": { + "version": "2.17.1", + "resolved": "https://registry.npmjs.org/@walletconnect/sign-client/-/sign-client-2.17.1.tgz", + "integrity": "sha512-6rLw6YNy0smslH9wrFTbNiYrGsL3DrOsS5FcuU4gIN6oh8pGYOFZ5FiSyTTroc5tngOk3/Sd7dlGY9S7O4nveg==", + "deprecated": "Reliability and performance improvements. See: https://github.com/WalletConnect/walletconnect-monorepo/releases", + "license": "Apache-2.0", + "dependencies": { + "@walletconnect/core": "2.17.1", + "@walletconnect/events": "1.0.1", + "@walletconnect/heartbeat": "1.2.2", + "@walletconnect/jsonrpc-utils": "1.0.8", + "@walletconnect/logger": "2.1.2", + "@walletconnect/time": "1.0.2", + "@walletconnect/types": "2.17.1", + "@walletconnect/utils": "2.17.1", + "events": "3.3.0" + } + }, + "node_modules/@walletconnect/sign-client/node_modules/@ethersproject/hash": { + "version": "5.7.0", + "resolved": "https://registry.npmjs.org/@ethersproject/hash/-/hash-5.7.0.tgz", + "integrity": "sha512-qX5WrQfnah1EFnO5zJv1v46a8HW0+E5xuBBDTwMFZLuVTx0tbU2kkx15NqdjxecrLGatQN9FGQKpb1FKdHCt+g==", + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "license": "MIT", + "dependencies": { + "@ethersproject/abstract-signer": "^5.7.0", + "@ethersproject/address": "^5.7.0", + "@ethersproject/base64": "^5.7.0", + "@ethersproject/bignumber": "^5.7.0", + "@ethersproject/bytes": "^5.7.0", + "@ethersproject/keccak256": "^5.7.0", + "@ethersproject/logger": "^5.7.0", + "@ethersproject/properties": "^5.7.0", + "@ethersproject/strings": "^5.7.0" + } + }, + "node_modules/@walletconnect/sign-client/node_modules/@ethersproject/transactions": { + "version": "5.7.0", + "resolved": "https://registry.npmjs.org/@ethersproject/transactions/-/transactions-5.7.0.tgz", + "integrity": "sha512-kmcNicCp1lp8qanMTC3RIikGgoJ80ztTyvtsFvCYpSCfkjhD0jZ2LOrnbcuxuToLIUYYf+4XwD1rP+B/erDIhQ==", + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "license": "MIT", + "dependencies": { + "@ethersproject/address": "^5.7.0", + "@ethersproject/bignumber": "^5.7.0", + "@ethersproject/bytes": "^5.7.0", + "@ethersproject/constants": "^5.7.0", + "@ethersproject/keccak256": "^5.7.0", + "@ethersproject/logger": "^5.7.0", + "@ethersproject/properties": "^5.7.0", + "@ethersproject/rlp": "^5.7.0", + "@ethersproject/signing-key": "^5.7.0" + } + }, + "node_modules/@walletconnect/sign-client/node_modules/@stablelib/random": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@stablelib/random/-/random-1.0.2.tgz", + "integrity": "sha512-rIsE83Xpb7clHPVRlBj8qNe5L8ISQOzjghYQm/dZ7VaM2KHYwMW5adjQjrzTZCchFnNCNhkwtnOBa9HTMJCI8w==", + "license": "MIT", + "dependencies": { + "@stablelib/binary": "^1.0.1", + "@stablelib/wipe": "^1.0.1" + } + }, + "node_modules/@walletconnect/sign-client/node_modules/@walletconnect/keyvaluestorage": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@walletconnect/keyvaluestorage/-/keyvaluestorage-1.1.1.tgz", + "integrity": "sha512-V7ZQq2+mSxAq7MrRqDxanTzu2RcElfK1PfNYiaVnJgJ7Q7G7hTVwF8voIBx92qsRyGHZihrwNPHuZd1aKkd0rA==", + "license": "MIT", + "dependencies": { + "@walletconnect/safe-json": "^1.0.1", + "idb-keyval": "^6.2.1", + "unstorage": "^1.9.0" + }, + "peerDependencies": { + "@react-native-async-storage/async-storage": "1.x" + }, + "peerDependenciesMeta": { + "@react-native-async-storage/async-storage": { + "optional": true + } + } + }, + "node_modules/@walletconnect/sign-client/node_modules/@walletconnect/relay-auth": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/@walletconnect/relay-auth/-/relay-auth-1.0.4.tgz", + "integrity": "sha512-kKJcS6+WxYq5kshpPaxGHdwf5y98ZwbfuS4EE/NkQzqrDFm5Cj+dP8LofzWvjrrLkZq7Afy7WrQMXdLy8Sx7HQ==", + "license": "MIT", + "dependencies": { + "@stablelib/ed25519": "^1.0.2", + "@stablelib/random": "^1.0.1", + "@walletconnect/safe-json": "^1.0.1", + "@walletconnect/time": "^1.0.2", + "tslib": "1.14.1", + "uint8arrays": "^3.0.0" + } + }, + "node_modules/@walletconnect/sign-client/node_modules/@walletconnect/safe-json": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@walletconnect/safe-json/-/safe-json-1.0.2.tgz", + "integrity": "sha512-Ogb7I27kZ3LPC3ibn8ldyUr5544t3/STow9+lzz7Sfo808YD7SBWk7SAsdBFlYgP2zDRy2hS3sKRcuSRM0OTmA==", + "license": "MIT", + "dependencies": { + "tslib": "1.14.1" + } + }, + "node_modules/@walletconnect/sign-client/node_modules/@walletconnect/types": { + "version": "2.17.1", + "resolved": "https://registry.npmjs.org/@walletconnect/types/-/types-2.17.1.tgz", + "integrity": "sha512-aiUeBE3EZZTsZBv5Cju3D0PWAsZCMks1g3hzQs9oNtrbuLL6pKKU0/zpKwk4vGywszxPvC3U0tBCku9LLsH/0A==", + "license": "Apache-2.0", + "dependencies": { + "@walletconnect/events": "1.0.1", + "@walletconnect/heartbeat": "1.2.2", + "@walletconnect/jsonrpc-types": "1.0.4", + "@walletconnect/keyvaluestorage": "1.1.1", + "@walletconnect/logger": "2.1.2", + "events": "3.3.0" + } + }, + "node_modules/@walletconnect/sign-client/node_modules/@walletconnect/utils": { + "version": "2.17.1", + "resolved": "https://registry.npmjs.org/@walletconnect/utils/-/utils-2.17.1.tgz", + "integrity": "sha512-KL7pPwq7qUC+zcTmvxGqIyYanfHgBQ+PFd0TEblg88jM7EjuDLhjyyjtkhyE/2q7QgR7OanIK7pCpilhWvBsBQ==", + "license": "Apache-2.0", + "dependencies": { + "@ethersproject/hash": "5.7.0", + "@ethersproject/transactions": "5.7.0", + "@stablelib/chacha20poly1305": "1.0.1", + "@stablelib/hkdf": "1.0.1", + "@stablelib/random": "1.0.2", + "@stablelib/sha256": "1.0.1", + "@stablelib/x25519": "1.0.3", + "@walletconnect/jsonrpc-utils": "1.0.8", + "@walletconnect/keyvaluestorage": "1.1.1", + "@walletconnect/relay-api": "1.0.11", + "@walletconnect/relay-auth": "1.0.4", + "@walletconnect/safe-json": "1.0.2", + "@walletconnect/time": "1.0.2", + "@walletconnect/types": "2.17.1", + "@walletconnect/window-getters": "1.0.1", + "@walletconnect/window-metadata": "1.0.1", + "detect-browser": "5.3.0", + "elliptic": "6.5.7", + "query-string": "7.1.3", + "uint8arrays": "3.1.0" + } + }, + "node_modules/@walletconnect/sign-client/node_modules/@walletconnect/window-getters": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@walletconnect/window-getters/-/window-getters-1.0.1.tgz", + "integrity": "sha512-vHp+HqzGxORPAN8gY03qnbTMnhqIwjeRJNOMOAzePRg4xVEEE2WvYsI9G2NMjOknA8hnuYbU3/hwLcKbjhc8+Q==", + "license": "MIT", + "dependencies": { + "tslib": "1.14.1" + } + }, + "node_modules/@walletconnect/sign-client/node_modules/@walletconnect/window-metadata": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@walletconnect/window-metadata/-/window-metadata-1.0.1.tgz", + "integrity": "sha512-9koTqyGrM2cqFRW517BPY/iEtUDx2r1+Pwwu5m7sJ7ka79wi3EyqhqcICk/yDmv6jAS1rjKgTKXlEhanYjijcA==", + "license": "MIT", + "dependencies": { + "@walletconnect/window-getters": "^1.0.1", + "tslib": "1.14.1" + } + }, + "node_modules/@walletconnect/sign-client/node_modules/bn.js": { + "version": "4.12.2", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.2.tgz", + "integrity": "sha512-n4DSx829VRTRByMRGdjQ9iqsN0Bh4OolPsFnaZBLcbi8iXcB+kJ9s7EnRt4wILZNV3kPLHkRVfOc/HvhC3ovDw==", + "license": "MIT" + }, + "node_modules/@walletconnect/sign-client/node_modules/chokidar": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-4.0.3.tgz", + "integrity": "sha512-Qgzu8kfBvo+cA4962jnP1KkS6Dop5NS6g7R5LFYJr4b8Ub94PPQXUksCw9PvXoeXPRRddRNC5C1JQUR2SMGtnA==", + "license": "MIT", + "dependencies": { + "readdirp": "^4.0.1" + }, + "engines": { + "node": ">= 14.16.0" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + } + }, + "node_modules/@walletconnect/sign-client/node_modules/elliptic": { + "version": "6.5.7", + "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.5.7.tgz", + "integrity": "sha512-ESVCtTwiA+XhY3wyh24QqRGBoP3rEdDUl3EDUUo9tft074fi19IrdpH7hLCMMP3CIj7jb3W96rn8lt/BqIlt5Q==", + "license": "MIT", + "dependencies": { + "bn.js": "^4.11.9", + "brorand": "^1.1.0", + "hash.js": "^1.0.0", + "hmac-drbg": "^1.0.1", + "inherits": "^2.0.4", + "minimalistic-assert": "^1.0.1", + "minimalistic-crypto-utils": "^1.0.1" + } + }, + "node_modules/@walletconnect/sign-client/node_modules/lru-cache": { + "version": "10.4.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz", + "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==", + "license": "ISC" + }, + "node_modules/@walletconnect/sign-client/node_modules/multiformats": { + "version": "9.9.0", + "resolved": "https://registry.npmjs.org/multiformats/-/multiformats-9.9.0.tgz", + "integrity": "sha512-HoMUjhH9T8DDBNT+6xzkrd9ga/XiBI4xLr58LJACwK6G3HTOPeMz4nB4KJs33L2BelrIJa7P0VuNaVF3hMYfjg==", + "license": "(Apache-2.0 AND MIT)" + }, + "node_modules/@walletconnect/sign-client/node_modules/readdirp": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-4.1.2.tgz", + "integrity": "sha512-GDhwkLfywWL2s6vEjyhri+eXmfH6j1L7JE27WhqLeYzoh/A3DBaYGEj2H/HFZCn/kMfim73FXxEJTw06WtxQwg==", + "license": "MIT", + "engines": { + "node": ">= 14.18.0" + }, + "funding": { + "type": "individual", + "url": "https://paulmillr.com/funding/" + } + }, + "node_modules/@walletconnect/sign-client/node_modules/tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", + "license": "0BSD" + }, + "node_modules/@walletconnect/sign-client/node_modules/uint8arrays": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/uint8arrays/-/uint8arrays-3.1.0.tgz", + "integrity": "sha512-ei5rfKtoRO8OyOIor2Rz5fhzjThwIHJZ3uyDPnDHTXbP0aMQ1RN/6AI5B5d9dBxJOU+BvOAk7ZQ1xphsX8Lrog==", + "license": "MIT", + "dependencies": { + "multiformats": "^9.4.2" + } + }, + "node_modules/@walletconnect/sign-client/node_modules/unstorage": { + "version": "1.17.1", + "resolved": "https://registry.npmjs.org/unstorage/-/unstorage-1.17.1.tgz", + "integrity": "sha512-KKGwRTT0iVBCErKemkJCLs7JdxNVfqTPc/85ae1XES0+bsHbc/sFBfVi5kJp156cc51BHinIH2l3k0EZ24vOBQ==", + "license": "MIT", + "dependencies": { + "anymatch": "^3.1.3", + "chokidar": "^4.0.3", + "destr": "^2.0.5", + "h3": "^1.15.4", + "lru-cache": "^10.4.3", + "node-fetch-native": "^1.6.7", + "ofetch": "^1.4.1", + "ufo": "^1.6.1" + }, + "peerDependencies": { + "@azure/app-configuration": "^1.8.0", + "@azure/cosmos": "^4.2.0", + "@azure/data-tables": "^13.3.0", + "@azure/identity": "^4.6.0", + "@azure/keyvault-secrets": "^4.9.0", + "@azure/storage-blob": "^12.26.0", + "@capacitor/preferences": "^6.0.3 || ^7.0.0", + "@deno/kv": ">=0.9.0", + "@netlify/blobs": "^6.5.0 || ^7.0.0 || ^8.1.0 || ^9.0.0 || ^10.0.0", + "@planetscale/database": "^1.19.0", + "@upstash/redis": "^1.34.3", + "@vercel/blob": ">=0.27.1", + "@vercel/functions": "^2.2.12 || ^3.0.0", + "@vercel/kv": "^1.0.1", + "aws4fetch": "^1.0.20", + "db0": ">=0.2.1", + "idb-keyval": "^6.2.1", + "ioredis": "^5.4.2", + "uploadthing": "^7.4.4" + }, + "peerDependenciesMeta": { + "@azure/app-configuration": { + "optional": true + }, + "@azure/cosmos": { + "optional": true + }, + "@azure/data-tables": { + "optional": true + }, + "@azure/identity": { + "optional": true + }, + "@azure/keyvault-secrets": { + "optional": true + }, + "@azure/storage-blob": { + "optional": true + }, + "@capacitor/preferences": { + "optional": true + }, + "@deno/kv": { + "optional": true + }, + "@netlify/blobs": { + "optional": true + }, + "@planetscale/database": { + "optional": true + }, + "@upstash/redis": { + "optional": true + }, + "@vercel/blob": { + "optional": true + }, + "@vercel/functions": { + "optional": true + }, + "@vercel/kv": { + "optional": true + }, + "aws4fetch": { + "optional": true + }, + "db0": { + "optional": true + }, + "idb-keyval": { + "optional": true + }, + "ioredis": { + "optional": true + }, + "uploadthing": { + "optional": true + } + } + }, + "node_modules/@walletconnect/time": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@walletconnect/time/-/time-1.0.2.tgz", + "integrity": "sha512-uzdd9woDcJ1AaBZRhqy5rNC9laqWGErfc4dxA9a87mPdKOgWMD85mcFo9dIYIts/Jwocfwn07EC6EzclKubk/g==", + "license": "MIT", + "dependencies": { + "tslib": "1.14.1" + } + }, + "node_modules/@walletconnect/time/node_modules/tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", + "license": "0BSD" + }, + "node_modules/@walletconnect/types": { + "version": "2.21.10", + "resolved": "https://registry.npmjs.org/@walletconnect/types/-/types-2.21.10.tgz", + "integrity": "sha512-9oSvgxv1hE5aS+j4aHS9YgKeq50BP4iMh49tjubTW5574cBWqmt1bXfQhZddSTbq9OirwLSegl6W36itkzryBQ==", + "license": "SEE LICENSE IN LICENSE.md", + "dependencies": { + "@walletconnect/events": "1.0.1", + "@walletconnect/heartbeat": "1.2.2", + "@walletconnect/jsonrpc-types": "1.0.4", + "@walletconnect/keyvaluestorage": "1.1.1", + "@walletconnect/logger": "2.1.2", + "events": "3.3.0" + } + }, + "node_modules/@walletconnect/types/node_modules/@walletconnect/keyvaluestorage": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@walletconnect/keyvaluestorage/-/keyvaluestorage-1.1.1.tgz", + "integrity": "sha512-V7ZQq2+mSxAq7MrRqDxanTzu2RcElfK1PfNYiaVnJgJ7Q7G7hTVwF8voIBx92qsRyGHZihrwNPHuZd1aKkd0rA==", + "license": "MIT", + "dependencies": { + "@walletconnect/safe-json": "^1.0.1", + "idb-keyval": "^6.2.1", + "unstorage": "^1.9.0" + }, + "peerDependencies": { + "@react-native-async-storage/async-storage": "1.x" + }, + "peerDependenciesMeta": { + "@react-native-async-storage/async-storage": { + "optional": true + } + } + }, + "node_modules/@walletconnect/types/node_modules/@walletconnect/safe-json": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@walletconnect/safe-json/-/safe-json-1.0.2.tgz", + "integrity": "sha512-Ogb7I27kZ3LPC3ibn8ldyUr5544t3/STow9+lzz7Sfo808YD7SBWk7SAsdBFlYgP2zDRy2hS3sKRcuSRM0OTmA==", + "license": "MIT", + "dependencies": { + "tslib": "1.14.1" + } + }, + "node_modules/@walletconnect/types/node_modules/chokidar": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-4.0.3.tgz", + "integrity": "sha512-Qgzu8kfBvo+cA4962jnP1KkS6Dop5NS6g7R5LFYJr4b8Ub94PPQXUksCw9PvXoeXPRRddRNC5C1JQUR2SMGtnA==", + "license": "MIT", + "dependencies": { + "readdirp": "^4.0.1" + }, + "engines": { + "node": ">= 14.16.0" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + } + }, + "node_modules/@walletconnect/types/node_modules/lru-cache": { + "version": "10.4.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz", + "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==", + "license": "ISC" + }, + "node_modules/@walletconnect/types/node_modules/readdirp": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-4.1.2.tgz", + "integrity": "sha512-GDhwkLfywWL2s6vEjyhri+eXmfH6j1L7JE27WhqLeYzoh/A3DBaYGEj2H/HFZCn/kMfim73FXxEJTw06WtxQwg==", + "license": "MIT", + "engines": { + "node": ">= 14.18.0" + }, + "funding": { + "type": "individual", + "url": "https://paulmillr.com/funding/" + } + }, + "node_modules/@walletconnect/types/node_modules/tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", + "license": "0BSD" + }, + "node_modules/@walletconnect/types/node_modules/unstorage": { + "version": "1.17.1", + "resolved": "https://registry.npmjs.org/unstorage/-/unstorage-1.17.1.tgz", + "integrity": "sha512-KKGwRTT0iVBCErKemkJCLs7JdxNVfqTPc/85ae1XES0+bsHbc/sFBfVi5kJp156cc51BHinIH2l3k0EZ24vOBQ==", + "license": "MIT", + "dependencies": { + "anymatch": "^3.1.3", + "chokidar": "^4.0.3", + "destr": "^2.0.5", + "h3": "^1.15.4", + "lru-cache": "^10.4.3", + "node-fetch-native": "^1.6.7", + "ofetch": "^1.4.1", + "ufo": "^1.6.1" + }, + "peerDependencies": { + "@azure/app-configuration": "^1.8.0", + "@azure/cosmos": "^4.2.0", + "@azure/data-tables": "^13.3.0", + "@azure/identity": "^4.6.0", + "@azure/keyvault-secrets": "^4.9.0", + "@azure/storage-blob": "^12.26.0", + "@capacitor/preferences": "^6.0.3 || ^7.0.0", + "@deno/kv": ">=0.9.0", + "@netlify/blobs": "^6.5.0 || ^7.0.0 || ^8.1.0 || ^9.0.0 || ^10.0.0", + "@planetscale/database": "^1.19.0", + "@upstash/redis": "^1.34.3", + "@vercel/blob": ">=0.27.1", + "@vercel/functions": "^2.2.12 || ^3.0.0", + "@vercel/kv": "^1.0.1", + "aws4fetch": "^1.0.20", + "db0": ">=0.2.1", + "idb-keyval": "^6.2.1", + "ioredis": "^5.4.2", + "uploadthing": "^7.4.4" + }, + "peerDependenciesMeta": { + "@azure/app-configuration": { + "optional": true + }, + "@azure/cosmos": { + "optional": true + }, + "@azure/data-tables": { + "optional": true + }, + "@azure/identity": { + "optional": true + }, + "@azure/keyvault-secrets": { + "optional": true + }, + "@azure/storage-blob": { + "optional": true + }, + "@capacitor/preferences": { + "optional": true + }, + "@deno/kv": { + "optional": true + }, + "@netlify/blobs": { + "optional": true + }, + "@planetscale/database": { + "optional": true + }, + "@upstash/redis": { + "optional": true + }, + "@vercel/blob": { + "optional": true + }, + "@vercel/functions": { + "optional": true + }, + "@vercel/kv": { + "optional": true + }, + "aws4fetch": { + "optional": true + }, + "db0": { + "optional": true + }, + "idb-keyval": { + "optional": true + }, + "ioredis": { + "optional": true + }, + "uploadthing": { + "optional": true + } + } + }, + "node_modules/@walletconnect/utils": { + "version": "2.21.10", + "resolved": "https://registry.npmjs.org/@walletconnect/utils/-/utils-2.21.10.tgz", + "integrity": "sha512-LC5hmP3uxVoMyw7Ibea1JQdE98FTb7jZie60qiaybmaIsg/ApEUosU5uCLTFRJwEWUip2p3sJTb0n/3pU+yR/Q==", + "license": "SEE LICENSE IN LICENSE.md", + "dependencies": { + "@msgpack/msgpack": "3.1.2", + "@noble/ciphers": "1.3.0", + "@noble/curves": "1.9.7", + "@noble/hashes": "1.8.0", + "@scure/base": "1.2.6", + "@walletconnect/jsonrpc-utils": "1.0.8", + "@walletconnect/keyvaluestorage": "1.1.1", + "@walletconnect/relay-api": "1.0.11", + "@walletconnect/relay-auth": "1.1.0", + "@walletconnect/safe-json": "1.0.2", + "@walletconnect/time": "1.0.2", + "@walletconnect/types": "2.21.10", + "@walletconnect/window-getters": "1.0.1", + "@walletconnect/window-metadata": "1.0.1", + "blakejs": "1.2.1", + "bs58": "6.0.0", + "detect-browser": "5.3.0", + "ox": "0.9.3", + "uint8arrays": "3.1.1" + } + }, + "node_modules/@walletconnect/utils/node_modules/@walletconnect/keyvaluestorage": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@walletconnect/keyvaluestorage/-/keyvaluestorage-1.1.1.tgz", + "integrity": "sha512-V7ZQq2+mSxAq7MrRqDxanTzu2RcElfK1PfNYiaVnJgJ7Q7G7hTVwF8voIBx92qsRyGHZihrwNPHuZd1aKkd0rA==", + "license": "MIT", + "dependencies": { + "@walletconnect/safe-json": "^1.0.1", + "idb-keyval": "^6.2.1", + "unstorage": "^1.9.0" + }, + "peerDependencies": { + "@react-native-async-storage/async-storage": "1.x" + }, + "peerDependenciesMeta": { + "@react-native-async-storage/async-storage": { + "optional": true + } + } + }, + "node_modules/@walletconnect/utils/node_modules/@walletconnect/safe-json": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@walletconnect/safe-json/-/safe-json-1.0.2.tgz", + "integrity": "sha512-Ogb7I27kZ3LPC3ibn8ldyUr5544t3/STow9+lzz7Sfo808YD7SBWk7SAsdBFlYgP2zDRy2hS3sKRcuSRM0OTmA==", + "license": "MIT", + "dependencies": { + "tslib": "1.14.1" + } + }, + "node_modules/@walletconnect/utils/node_modules/@walletconnect/window-getters": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@walletconnect/window-getters/-/window-getters-1.0.1.tgz", + "integrity": "sha512-vHp+HqzGxORPAN8gY03qnbTMnhqIwjeRJNOMOAzePRg4xVEEE2WvYsI9G2NMjOknA8hnuYbU3/hwLcKbjhc8+Q==", + "license": "MIT", + "dependencies": { + "tslib": "1.14.1" + } + }, + "node_modules/@walletconnect/utils/node_modules/@walletconnect/window-metadata": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@walletconnect/window-metadata/-/window-metadata-1.0.1.tgz", + "integrity": "sha512-9koTqyGrM2cqFRW517BPY/iEtUDx2r1+Pwwu5m7sJ7ka79wi3EyqhqcICk/yDmv6jAS1rjKgTKXlEhanYjijcA==", + "license": "MIT", + "dependencies": { + "@walletconnect/window-getters": "^1.0.1", + "tslib": "1.14.1" + } + }, + "node_modules/@walletconnect/utils/node_modules/chokidar": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-4.0.3.tgz", + "integrity": "sha512-Qgzu8kfBvo+cA4962jnP1KkS6Dop5NS6g7R5LFYJr4b8Ub94PPQXUksCw9PvXoeXPRRddRNC5C1JQUR2SMGtnA==", + "license": "MIT", + "dependencies": { + "readdirp": "^4.0.1" + }, + "engines": { + "node": ">= 14.16.0" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + } + }, + "node_modules/@walletconnect/utils/node_modules/lru-cache": { + "version": "10.4.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz", + "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==", + "license": "ISC" + }, + "node_modules/@walletconnect/utils/node_modules/readdirp": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-4.1.2.tgz", + "integrity": "sha512-GDhwkLfywWL2s6vEjyhri+eXmfH6j1L7JE27WhqLeYzoh/A3DBaYGEj2H/HFZCn/kMfim73FXxEJTw06WtxQwg==", + "license": "MIT", + "engines": { + "node": ">= 14.18.0" + }, + "funding": { + "type": "individual", + "url": "https://paulmillr.com/funding/" + } + }, + "node_modules/@walletconnect/utils/node_modules/tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", + "license": "0BSD" + }, + "node_modules/@walletconnect/utils/node_modules/unstorage": { + "version": "1.17.1", + "resolved": "https://registry.npmjs.org/unstorage/-/unstorage-1.17.1.tgz", + "integrity": "sha512-KKGwRTT0iVBCErKemkJCLs7JdxNVfqTPc/85ae1XES0+bsHbc/sFBfVi5kJp156cc51BHinIH2l3k0EZ24vOBQ==", + "license": "MIT", + "dependencies": { + "anymatch": "^3.1.3", + "chokidar": "^4.0.3", + "destr": "^2.0.5", + "h3": "^1.15.4", + "lru-cache": "^10.4.3", + "node-fetch-native": "^1.6.7", + "ofetch": "^1.4.1", + "ufo": "^1.6.1" + }, + "peerDependencies": { + "@azure/app-configuration": "^1.8.0", + "@azure/cosmos": "^4.2.0", + "@azure/data-tables": "^13.3.0", + "@azure/identity": "^4.6.0", + "@azure/keyvault-secrets": "^4.9.0", + "@azure/storage-blob": "^12.26.0", + "@capacitor/preferences": "^6.0.3 || ^7.0.0", + "@deno/kv": ">=0.9.0", + "@netlify/blobs": "^6.5.0 || ^7.0.0 || ^8.1.0 || ^9.0.0 || ^10.0.0", + "@planetscale/database": "^1.19.0", + "@upstash/redis": "^1.34.3", + "@vercel/blob": ">=0.27.1", + "@vercel/functions": "^2.2.12 || ^3.0.0", + "@vercel/kv": "^1.0.1", + "aws4fetch": "^1.0.20", + "db0": ">=0.2.1", + "idb-keyval": "^6.2.1", + "ioredis": "^5.4.2", + "uploadthing": "^7.4.4" + }, + "peerDependenciesMeta": { + "@azure/app-configuration": { + "optional": true + }, + "@azure/cosmos": { + "optional": true + }, + "@azure/data-tables": { + "optional": true + }, + "@azure/identity": { + "optional": true + }, + "@azure/keyvault-secrets": { + "optional": true + }, + "@azure/storage-blob": { + "optional": true + }, + "@capacitor/preferences": { + "optional": true + }, + "@deno/kv": { + "optional": true + }, + "@netlify/blobs": { + "optional": true + }, + "@planetscale/database": { + "optional": true + }, + "@upstash/redis": { + "optional": true + }, + "@vercel/blob": { + "optional": true + }, + "@vercel/functions": { + "optional": true + }, + "@vercel/kv": { + "optional": true + }, + "aws4fetch": { + "optional": true + }, + "db0": { + "optional": true + }, + "idb-keyval": { + "optional": true + }, + "ioredis": { + "optional": true + }, + "uploadthing": { + "optional": true + } + } + }, + "node_modules/@walletconnect/web3wallet": { + "version": "1.16.1", + "resolved": "https://registry.npmjs.org/@walletconnect/web3wallet/-/web3wallet-1.16.1.tgz", + "integrity": "sha512-l6jVoLEh/UtRfvYUDs52fN+LYXsBgx3F9WfErJuCSCFfpbxDKIzM2Y9sI0WI1/5dWN5sh24H1zNCXnQ4JJltZw==", + "deprecated": "Web3Wallet is now Reown WalletKit. Please follow the upgrade guide at https://docs.reown.com/walletkit/upgrade/from-web3wallet-web", + "license": "Apache-2.0", + "dependencies": { + "@walletconnect/auth-client": "2.1.2", + "@walletconnect/core": "2.17.1", + "@walletconnect/jsonrpc-provider": "1.0.14", + "@walletconnect/jsonrpc-utils": "1.0.8", + "@walletconnect/logger": "2.1.2", + "@walletconnect/sign-client": "2.17.1", + "@walletconnect/types": "2.17.1", + "@walletconnect/utils": "2.17.1" + } + }, + "node_modules/@walletconnect/web3wallet/node_modules/@ethersproject/hash": { + "version": "5.7.0", + "resolved": "https://registry.npmjs.org/@ethersproject/hash/-/hash-5.7.0.tgz", + "integrity": "sha512-qX5WrQfnah1EFnO5zJv1v46a8HW0+E5xuBBDTwMFZLuVTx0tbU2kkx15NqdjxecrLGatQN9FGQKpb1FKdHCt+g==", + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "license": "MIT", + "dependencies": { + "@ethersproject/abstract-signer": "^5.7.0", + "@ethersproject/address": "^5.7.0", + "@ethersproject/base64": "^5.7.0", + "@ethersproject/bignumber": "^5.7.0", + "@ethersproject/bytes": "^5.7.0", + "@ethersproject/keccak256": "^5.7.0", + "@ethersproject/logger": "^5.7.0", + "@ethersproject/properties": "^5.7.0", + "@ethersproject/strings": "^5.7.0" + } + }, + "node_modules/@walletconnect/web3wallet/node_modules/@ethersproject/transactions": { + "version": "5.7.0", + "resolved": "https://registry.npmjs.org/@ethersproject/transactions/-/transactions-5.7.0.tgz", + "integrity": "sha512-kmcNicCp1lp8qanMTC3RIikGgoJ80ztTyvtsFvCYpSCfkjhD0jZ2LOrnbcuxuToLIUYYf+4XwD1rP+B/erDIhQ==", + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "license": "MIT", + "dependencies": { + "@ethersproject/address": "^5.7.0", + "@ethersproject/bignumber": "^5.7.0", + "@ethersproject/bytes": "^5.7.0", + "@ethersproject/constants": "^5.7.0", + "@ethersproject/keccak256": "^5.7.0", + "@ethersproject/logger": "^5.7.0", + "@ethersproject/properties": "^5.7.0", + "@ethersproject/rlp": "^5.7.0", + "@ethersproject/signing-key": "^5.7.0" + } + }, + "node_modules/@walletconnect/web3wallet/node_modules/@stablelib/random": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@stablelib/random/-/random-1.0.2.tgz", + "integrity": "sha512-rIsE83Xpb7clHPVRlBj8qNe5L8ISQOzjghYQm/dZ7VaM2KHYwMW5adjQjrzTZCchFnNCNhkwtnOBa9HTMJCI8w==", + "license": "MIT", + "dependencies": { + "@stablelib/binary": "^1.0.1", + "@stablelib/wipe": "^1.0.1" + } + }, + "node_modules/@walletconnect/web3wallet/node_modules/@walletconnect/keyvaluestorage": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@walletconnect/keyvaluestorage/-/keyvaluestorage-1.1.1.tgz", + "integrity": "sha512-V7ZQq2+mSxAq7MrRqDxanTzu2RcElfK1PfNYiaVnJgJ7Q7G7hTVwF8voIBx92qsRyGHZihrwNPHuZd1aKkd0rA==", + "license": "MIT", + "dependencies": { + "@walletconnect/safe-json": "^1.0.1", + "idb-keyval": "^6.2.1", + "unstorage": "^1.9.0" + }, + "peerDependencies": { + "@react-native-async-storage/async-storage": "1.x" + }, + "peerDependenciesMeta": { + "@react-native-async-storage/async-storage": { + "optional": true + } + } + }, + "node_modules/@walletconnect/web3wallet/node_modules/@walletconnect/relay-auth": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/@walletconnect/relay-auth/-/relay-auth-1.0.4.tgz", + "integrity": "sha512-kKJcS6+WxYq5kshpPaxGHdwf5y98ZwbfuS4EE/NkQzqrDFm5Cj+dP8LofzWvjrrLkZq7Afy7WrQMXdLy8Sx7HQ==", + "license": "MIT", + "dependencies": { + "@stablelib/ed25519": "^1.0.2", + "@stablelib/random": "^1.0.1", + "@walletconnect/safe-json": "^1.0.1", + "@walletconnect/time": "^1.0.2", + "tslib": "1.14.1", + "uint8arrays": "^3.0.0" + } + }, + "node_modules/@walletconnect/web3wallet/node_modules/@walletconnect/safe-json": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@walletconnect/safe-json/-/safe-json-1.0.2.tgz", + "integrity": "sha512-Ogb7I27kZ3LPC3ibn8ldyUr5544t3/STow9+lzz7Sfo808YD7SBWk7SAsdBFlYgP2zDRy2hS3sKRcuSRM0OTmA==", + "license": "MIT", + "dependencies": { + "tslib": "1.14.1" + } + }, + "node_modules/@walletconnect/web3wallet/node_modules/@walletconnect/types": { + "version": "2.17.1", + "resolved": "https://registry.npmjs.org/@walletconnect/types/-/types-2.17.1.tgz", + "integrity": "sha512-aiUeBE3EZZTsZBv5Cju3D0PWAsZCMks1g3hzQs9oNtrbuLL6pKKU0/zpKwk4vGywszxPvC3U0tBCku9LLsH/0A==", + "license": "Apache-2.0", + "dependencies": { + "@walletconnect/events": "1.0.1", + "@walletconnect/heartbeat": "1.2.2", + "@walletconnect/jsonrpc-types": "1.0.4", + "@walletconnect/keyvaluestorage": "1.1.1", + "@walletconnect/logger": "2.1.2", + "events": "3.3.0" + } + }, + "node_modules/@walletconnect/web3wallet/node_modules/@walletconnect/utils": { + "version": "2.17.1", + "resolved": "https://registry.npmjs.org/@walletconnect/utils/-/utils-2.17.1.tgz", + "integrity": "sha512-KL7pPwq7qUC+zcTmvxGqIyYanfHgBQ+PFd0TEblg88jM7EjuDLhjyyjtkhyE/2q7QgR7OanIK7pCpilhWvBsBQ==", + "license": "Apache-2.0", + "dependencies": { + "@ethersproject/hash": "5.7.0", + "@ethersproject/transactions": "5.7.0", + "@stablelib/chacha20poly1305": "1.0.1", + "@stablelib/hkdf": "1.0.1", + "@stablelib/random": "1.0.2", + "@stablelib/sha256": "1.0.1", + "@stablelib/x25519": "1.0.3", + "@walletconnect/jsonrpc-utils": "1.0.8", + "@walletconnect/keyvaluestorage": "1.1.1", + "@walletconnect/relay-api": "1.0.11", + "@walletconnect/relay-auth": "1.0.4", + "@walletconnect/safe-json": "1.0.2", + "@walletconnect/time": "1.0.2", + "@walletconnect/types": "2.17.1", + "@walletconnect/window-getters": "1.0.1", + "@walletconnect/window-metadata": "1.0.1", + "detect-browser": "5.3.0", + "elliptic": "6.5.7", + "query-string": "7.1.3", + "uint8arrays": "3.1.0" + } + }, + "node_modules/@walletconnect/web3wallet/node_modules/@walletconnect/window-getters": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@walletconnect/window-getters/-/window-getters-1.0.1.tgz", + "integrity": "sha512-vHp+HqzGxORPAN8gY03qnbTMnhqIwjeRJNOMOAzePRg4xVEEE2WvYsI9G2NMjOknA8hnuYbU3/hwLcKbjhc8+Q==", + "license": "MIT", + "dependencies": { + "tslib": "1.14.1" + } + }, + "node_modules/@walletconnect/web3wallet/node_modules/@walletconnect/window-metadata": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@walletconnect/window-metadata/-/window-metadata-1.0.1.tgz", + "integrity": "sha512-9koTqyGrM2cqFRW517BPY/iEtUDx2r1+Pwwu5m7sJ7ka79wi3EyqhqcICk/yDmv6jAS1rjKgTKXlEhanYjijcA==", + "license": "MIT", + "dependencies": { + "@walletconnect/window-getters": "^1.0.1", + "tslib": "1.14.1" + } + }, + "node_modules/@walletconnect/web3wallet/node_modules/bn.js": { + "version": "4.12.2", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.2.tgz", + "integrity": "sha512-n4DSx829VRTRByMRGdjQ9iqsN0Bh4OolPsFnaZBLcbi8iXcB+kJ9s7EnRt4wILZNV3kPLHkRVfOc/HvhC3ovDw==", + "license": "MIT" + }, + "node_modules/@walletconnect/web3wallet/node_modules/chokidar": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-4.0.3.tgz", + "integrity": "sha512-Qgzu8kfBvo+cA4962jnP1KkS6Dop5NS6g7R5LFYJr4b8Ub94PPQXUksCw9PvXoeXPRRddRNC5C1JQUR2SMGtnA==", + "license": "MIT", + "dependencies": { + "readdirp": "^4.0.1" + }, + "engines": { + "node": ">= 14.16.0" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + } + }, + "node_modules/@walletconnect/web3wallet/node_modules/elliptic": { + "version": "6.5.7", + "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.5.7.tgz", + "integrity": "sha512-ESVCtTwiA+XhY3wyh24QqRGBoP3rEdDUl3EDUUo9tft074fi19IrdpH7hLCMMP3CIj7jb3W96rn8lt/BqIlt5Q==", + "license": "MIT", + "dependencies": { + "bn.js": "^4.11.9", + "brorand": "^1.1.0", + "hash.js": "^1.0.0", + "hmac-drbg": "^1.0.1", + "inherits": "^2.0.4", + "minimalistic-assert": "^1.0.1", + "minimalistic-crypto-utils": "^1.0.1" + } + }, + "node_modules/@walletconnect/web3wallet/node_modules/lru-cache": { + "version": "10.4.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz", + "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==", + "license": "ISC" + }, + "node_modules/@walletconnect/web3wallet/node_modules/multiformats": { + "version": "9.9.0", + "resolved": "https://registry.npmjs.org/multiformats/-/multiformats-9.9.0.tgz", + "integrity": "sha512-HoMUjhH9T8DDBNT+6xzkrd9ga/XiBI4xLr58LJACwK6G3HTOPeMz4nB4KJs33L2BelrIJa7P0VuNaVF3hMYfjg==", + "license": "(Apache-2.0 AND MIT)" + }, + "node_modules/@walletconnect/web3wallet/node_modules/readdirp": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-4.1.2.tgz", + "integrity": "sha512-GDhwkLfywWL2s6vEjyhri+eXmfH6j1L7JE27WhqLeYzoh/A3DBaYGEj2H/HFZCn/kMfim73FXxEJTw06WtxQwg==", + "license": "MIT", + "engines": { + "node": ">= 14.18.0" + }, + "funding": { + "type": "individual", + "url": "https://paulmillr.com/funding/" + } + }, + "node_modules/@walletconnect/web3wallet/node_modules/tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", + "license": "0BSD" + }, + "node_modules/@walletconnect/web3wallet/node_modules/uint8arrays": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/uint8arrays/-/uint8arrays-3.1.0.tgz", + "integrity": "sha512-ei5rfKtoRO8OyOIor2Rz5fhzjThwIHJZ3uyDPnDHTXbP0aMQ1RN/6AI5B5d9dBxJOU+BvOAk7ZQ1xphsX8Lrog==", + "license": "MIT", + "dependencies": { + "multiformats": "^9.4.2" + } + }, + "node_modules/@walletconnect/web3wallet/node_modules/unstorage": { + "version": "1.17.1", + "resolved": "https://registry.npmjs.org/unstorage/-/unstorage-1.17.1.tgz", + "integrity": "sha512-KKGwRTT0iVBCErKemkJCLs7JdxNVfqTPc/85ae1XES0+bsHbc/sFBfVi5kJp156cc51BHinIH2l3k0EZ24vOBQ==", + "license": "MIT", + "dependencies": { + "anymatch": "^3.1.3", + "chokidar": "^4.0.3", + "destr": "^2.0.5", + "h3": "^1.15.4", + "lru-cache": "^10.4.3", + "node-fetch-native": "^1.6.7", + "ofetch": "^1.4.1", + "ufo": "^1.6.1" + }, + "peerDependencies": { + "@azure/app-configuration": "^1.8.0", + "@azure/cosmos": "^4.2.0", + "@azure/data-tables": "^13.3.0", + "@azure/identity": "^4.6.0", + "@azure/keyvault-secrets": "^4.9.0", + "@azure/storage-blob": "^12.26.0", + "@capacitor/preferences": "^6.0.3 || ^7.0.0", + "@deno/kv": ">=0.9.0", + "@netlify/blobs": "^6.5.0 || ^7.0.0 || ^8.1.0 || ^9.0.0 || ^10.0.0", + "@planetscale/database": "^1.19.0", + "@upstash/redis": "^1.34.3", + "@vercel/blob": ">=0.27.1", + "@vercel/functions": "^2.2.12 || ^3.0.0", + "@vercel/kv": "^1.0.1", + "aws4fetch": "^1.0.20", + "db0": ">=0.2.1", + "idb-keyval": "^6.2.1", + "ioredis": "^5.4.2", + "uploadthing": "^7.4.4" + }, + "peerDependenciesMeta": { + "@azure/app-configuration": { + "optional": true + }, + "@azure/cosmos": { + "optional": true + }, + "@azure/data-tables": { + "optional": true + }, + "@azure/identity": { + "optional": true + }, + "@azure/keyvault-secrets": { + "optional": true + }, + "@azure/storage-blob": { + "optional": true + }, + "@capacitor/preferences": { + "optional": true + }, + "@deno/kv": { + "optional": true + }, + "@netlify/blobs": { + "optional": true + }, + "@planetscale/database": { + "optional": true + }, + "@upstash/redis": { + "optional": true + }, + "@vercel/blob": { + "optional": true + }, + "@vercel/functions": { + "optional": true + }, + "@vercel/kv": { + "optional": true + }, + "aws4fetch": { + "optional": true + }, + "db0": { + "optional": true + }, + "idb-keyval": { + "optional": true + }, + "ioredis": { + "optional": true + }, + "uploadthing": { + "optional": true + } + } + }, + "node_modules/@walletconnect/window-getters": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@walletconnect/window-getters/-/window-getters-1.0.0.tgz", + "integrity": "sha512-xB0SQsLaleIYIkSsl43vm8EwETpBzJ2gnzk7e0wMF3ktqiTGS6TFHxcprMl5R44KKh4tCcHCJwolMCaDSwtAaA==", + "license": "MIT" + }, + "node_modules/@walletconnect/window-metadata": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@walletconnect/window-metadata/-/window-metadata-1.0.0.tgz", + "integrity": "sha512-9eFvmJxIKCC3YWOL97SgRkKhlyGXkrHwamfechmqszbypFspaSk+t2jQXAEU7YClHF6Qjw5eYOmy1//zFi9/GA==", + "license": "MIT", + "dependencies": { + "@walletconnect/window-getters": "^1.0.0" + } + }, + "node_modules/@webassemblyjs/ast": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.14.1.tgz", + "integrity": "sha512-nuBEDgQfm1ccRp/8bCQrx1frohyufl4JlbMMZ4P1wpeOfDhF6FQkxZJ1b/e+PLwr6X1Nhw6OLme5usuBWYBvuQ==", + "license": "MIT", + "dependencies": { + "@webassemblyjs/helper-numbers": "1.13.2", + "@webassemblyjs/helper-wasm-bytecode": "1.13.2" + } + }, + "node_modules/@webassemblyjs/floating-point-hex-parser": { + "version": "1.13.2", + "resolved": "https://registry.npmjs.org/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.13.2.tgz", + "integrity": "sha512-6oXyTOzbKxGH4steLbLNOu71Oj+C8Lg34n6CqRvqfS2O71BxY6ByfMDRhBytzknj9yGUPVJ1qIKhRlAwO1AovA==", + "license": "MIT" + }, + "node_modules/@webassemblyjs/helper-api-error": { + "version": "1.13.2", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.13.2.tgz", + "integrity": "sha512-U56GMYxy4ZQCbDZd6JuvvNV/WFildOjsaWD3Tzzvmw/mas3cXzRJPMjP83JqEsgSbyrmaGjBfDtV7KDXV9UzFQ==", + "license": "MIT" + }, + "node_modules/@webassemblyjs/helper-buffer": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.14.1.tgz", + "integrity": "sha512-jyH7wtcHiKssDtFPRB+iQdxlDf96m0E39yb0k5uJVhFGleZFoNw1c4aeIcVUPPbXUVJ94wwnMOAqUHyzoEPVMA==", + "license": "MIT" + }, + "node_modules/@webassemblyjs/helper-numbers": { + "version": "1.13.2", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-numbers/-/helper-numbers-1.13.2.tgz", + "integrity": "sha512-FE8aCmS5Q6eQYcV3gI35O4J789wlQA+7JrqTTpJqn5emA4U2hvwJmvFRC0HODS+3Ye6WioDklgd6scJ3+PLnEA==", + "license": "MIT", + "dependencies": { + "@webassemblyjs/floating-point-hex-parser": "1.13.2", + "@webassemblyjs/helper-api-error": "1.13.2", + "@xtuc/long": "4.2.2" + } + }, + "node_modules/@webassemblyjs/helper-wasm-bytecode": { + "version": "1.13.2", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.13.2.tgz", + "integrity": "sha512-3QbLKy93F0EAIXLh0ogEVR6rOubA9AoZ+WRYhNbFyuB70j3dRdwH9g+qXhLAO0kiYGlg3TxDV+I4rQTr/YNXkA==", + "license": "MIT" + }, + "node_modules/@webassemblyjs/helper-wasm-section": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.14.1.tgz", + "integrity": "sha512-ds5mXEqTJ6oxRoqjhWDU83OgzAYjwsCV8Lo/N+oRsNDmx/ZDpqalmrtgOMkHwxsG0iI//3BwWAErYRHtgn0dZw==", + "license": "MIT", + "dependencies": { + "@webassemblyjs/ast": "1.14.1", + "@webassemblyjs/helper-buffer": "1.14.1", + "@webassemblyjs/helper-wasm-bytecode": "1.13.2", + "@webassemblyjs/wasm-gen": "1.14.1" + } + }, + "node_modules/@webassemblyjs/ieee754": { + "version": "1.13.2", + "resolved": "https://registry.npmjs.org/@webassemblyjs/ieee754/-/ieee754-1.13.2.tgz", + "integrity": "sha512-4LtOzh58S/5lX4ITKxnAK2USuNEvpdVV9AlgGQb8rJDHaLeHciwG4zlGr0j/SNWlr7x3vO1lDEsuePvtcDNCkw==", + "license": "MIT", + "dependencies": { + "@xtuc/ieee754": "^1.2.0" + } + }, + "node_modules/@webassemblyjs/leb128": { + "version": "1.13.2", + "resolved": "https://registry.npmjs.org/@webassemblyjs/leb128/-/leb128-1.13.2.tgz", + "integrity": "sha512-Lde1oNoIdzVzdkNEAWZ1dZ5orIbff80YPdHx20mrHwHrVNNTjNr8E3xz9BdpcGqRQbAEa+fkrCb+fRFTl/6sQw==", + "license": "Apache-2.0", + "dependencies": { + "@xtuc/long": "4.2.2" + } + }, + "node_modules/@webassemblyjs/utf8": { + "version": "1.13.2", + "resolved": "https://registry.npmjs.org/@webassemblyjs/utf8/-/utf8-1.13.2.tgz", + "integrity": "sha512-3NQWGjKTASY1xV5m7Hr0iPeXD9+RDobLll3T9d2AO+g3my8xy5peVyjSag4I50mR1bBSN/Ct12lo+R9tJk0NZQ==", + "license": "MIT" + }, + "node_modules/@webassemblyjs/wasm-edit": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.14.1.tgz", + "integrity": "sha512-RNJUIQH/J8iA/1NzlE4N7KtyZNHi3w7at7hDjvRNm5rcUXa00z1vRz3glZoULfJ5mpvYhLybmVcwcjGrC1pRrQ==", + "license": "MIT", + "dependencies": { + "@webassemblyjs/ast": "1.14.1", + "@webassemblyjs/helper-buffer": "1.14.1", + "@webassemblyjs/helper-wasm-bytecode": "1.13.2", + "@webassemblyjs/helper-wasm-section": "1.14.1", + "@webassemblyjs/wasm-gen": "1.14.1", + "@webassemblyjs/wasm-opt": "1.14.1", + "@webassemblyjs/wasm-parser": "1.14.1", + "@webassemblyjs/wast-printer": "1.14.1" + } + }, + "node_modules/@webassemblyjs/wasm-gen": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.14.1.tgz", + "integrity": "sha512-AmomSIjP8ZbfGQhumkNvgC33AY7qtMCXnN6bL2u2Js4gVCg8fp735aEiMSBbDR7UQIj90n4wKAFUSEd0QN2Ukg==", + "license": "MIT", + "dependencies": { + "@webassemblyjs/ast": "1.14.1", + "@webassemblyjs/helper-wasm-bytecode": "1.13.2", + "@webassemblyjs/ieee754": "1.13.2", + "@webassemblyjs/leb128": "1.13.2", + "@webassemblyjs/utf8": "1.13.2" + } + }, + "node_modules/@webassemblyjs/wasm-opt": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.14.1.tgz", + "integrity": "sha512-PTcKLUNvBqnY2U6E5bdOQcSM+oVP/PmrDY9NzowJjislEjwP/C4an2303MCVS2Mg9d3AJpIGdUFIQQWbPds0Sw==", + "license": "MIT", + "dependencies": { + "@webassemblyjs/ast": "1.14.1", + "@webassemblyjs/helper-buffer": "1.14.1", + "@webassemblyjs/wasm-gen": "1.14.1", + "@webassemblyjs/wasm-parser": "1.14.1" + } + }, + "node_modules/@webassemblyjs/wasm-parser": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.14.1.tgz", + "integrity": "sha512-JLBl+KZ0R5qB7mCnud/yyX08jWFw5MsoalJ1pQ4EdFlgj9VdXKGuENGsiCIjegI1W7p91rUlcB/LB5yRJKNTcQ==", + "license": "MIT", + "dependencies": { + "@webassemblyjs/ast": "1.14.1", + "@webassemblyjs/helper-api-error": "1.13.2", + "@webassemblyjs/helper-wasm-bytecode": "1.13.2", + "@webassemblyjs/ieee754": "1.13.2", + "@webassemblyjs/leb128": "1.13.2", + "@webassemblyjs/utf8": "1.13.2" + } + }, + "node_modules/@webassemblyjs/wast-printer": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.14.1.tgz", + "integrity": "sha512-kPSSXE6De1XOR820C90RIo2ogvZG+c3KiHzqUoO/F34Y2shGzesfqv7o57xrxovZJH/MetF5UjroJ/R/3isoiw==", + "license": "MIT", + "dependencies": { + "@webassemblyjs/ast": "1.14.1", + "@xtuc/long": "4.2.2" + } + }, + "node_modules/@xtuc/ieee754": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@xtuc/ieee754/-/ieee754-1.2.0.tgz", + "integrity": "sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA==", + "license": "BSD-3-Clause" + }, + "node_modules/@xtuc/long": { + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/@xtuc/long/-/long-4.2.2.tgz", + "integrity": "sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ==", + "license": "Apache-2.0" + }, + "node_modules/@zag-js/element-size": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/@zag-js/element-size/-/element-size-0.3.2.tgz", + "integrity": "sha512-bVvvigUGvAuj7PCkE5AbzvTJDTw5f3bg9nQdv+ErhVN8SfPPppLJEmmWdxqsRzrHXgx8ypJt/+Ty0kjtISVDsQ==", + "license": "MIT" + }, + "node_modules/@zag-js/focus-visible": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/@zag-js/focus-visible/-/focus-visible-0.2.2.tgz", + "integrity": "sha512-0j2gZq8HiZ51z4zNnSkF1iSkqlwRDvdH+son3wHdoz+7IUdMN/5Exd4TxMJ+gq2Of1DiXReYLL9qqh2PdQ4wgA==", + "license": "MIT" + }, + "node_modules/abab": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/abab/-/abab-2.0.6.tgz", + "integrity": "sha512-j2afSsaIENvHZN2B8GOpF566vZ5WVk5opAiMTvWgaQT8DkbOqsTfvNAvHoRGU2zzP8cPoqys+xHTRDWW8L+/BA==", + "deprecated": "Use your platform's native atob() and btoa() methods instead", + "dev": true, + "license": "BSD-3-Clause" + }, + "node_modules/abbrev": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz", + "integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==", + "license": "ISC", + "optional": true + }, + "node_modules/abitype": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/abitype/-/abitype-1.1.1.tgz", + "integrity": "sha512-Loe5/6tAgsBukY95eGaPSDmQHIjRZYQq8PB1MpsNccDIK8WiV+Uw6WzaIXipvaxTEL2yEB0OpEaQv3gs8pkS9Q==", + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/wevm" + }, + "peerDependencies": { + "typescript": ">=5.0.4", + "zod": "^3.22.0 || ^4.0.0" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + }, + "zod": { + "optional": true + } + } + }, + "node_modules/abort-controller": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/abort-controller/-/abort-controller-3.0.0.tgz", + "integrity": "sha512-h8lQ8tacZYnR3vNQTgibj+tODHI5/+l06Au2Pcriv/Gmet0eaj4TwWH41sO9wnHDiQsEj19q0drzdWdeAHtweg==", + "license": "MIT", + "dependencies": { + "event-target-shim": "^5.0.0" + }, + "engines": { + "node": ">=6.5" + } + }, + "node_modules/abortcontroller-polyfill": { + "version": "1.7.8", + "resolved": "https://registry.npmjs.org/abortcontroller-polyfill/-/abortcontroller-polyfill-1.7.8.tgz", + "integrity": "sha512-9f1iZ2uWh92VcrU9Y8x+LdM4DLj75VE0MJB8zuF1iUnroEptStw+DQ8EQPMUdfe5k+PkB1uUfDQfWbhstH8LrQ==", + "license": "MIT" + }, + "node_modules/accepts": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/accepts/-/accepts-2.0.0.tgz", + "integrity": "sha512-5cvg6CtKwfgdmVqY1WIiXKc3Q1bkRqGLi+2W/6ao+6Y7gu/RCwRuAhGEzh5B4KlszSuTLgZYuqFqo5bImjNKng==", + "license": "MIT", + "dependencies": { + "mime-types": "^3.0.0", + "negotiator": "^1.0.0" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/acorn": { + "version": "8.15.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.15.0.tgz", + "integrity": "sha512-NZyJarBfL7nWwIq+FDL6Zp/yHEhePMNnnJ0y3qfieCrmNvYct8uvtiV41UvlSe6apAfk0fY1FbWx+NwfmpvtTg==", + "license": "MIT", + "peer": true, + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/acorn-globals": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/acorn-globals/-/acorn-globals-7.0.1.tgz", + "integrity": "sha512-umOSDSDrfHbTNPuNpC2NSnnA3LUrqpevPb4T9jRx4MagXNS0rs+gwiTcAvqCRmsD6utzsrzNt+ebm00SNWiC3Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "acorn": "^8.1.0", + "acorn-walk": "^8.0.2" + } + }, + "node_modules/acorn-import-assertions": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/acorn-import-assertions/-/acorn-import-assertions-1.9.0.tgz", + "integrity": "sha512-cmMwop9x+8KFhxvKrKfPYmN6/pKTYYHBqLa0DfvVZcKMJWNyWLnaqND7dx/qn66R7ewM1UX5XMaDVP5wlVTaVA==", + "deprecated": "package has been renamed to acorn-import-attributes", + "license": "MIT", + "peerDependencies": { + "acorn": "^8" + } + }, + "node_modules/acorn-import-phases": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/acorn-import-phases/-/acorn-import-phases-1.0.4.tgz", + "integrity": "sha512-wKmbr/DDiIXzEOiWrTTUcDm24kQ2vGfZQvM2fwg2vXqR5uW6aapr7ObPtj1th32b9u90/Pf4AItvdTh42fBmVQ==", + "license": "MIT", + "engines": { + "node": ">=10.13.0" + }, + "peerDependencies": { + "acorn": "^8.14.0" + } + }, + "node_modules/acorn-jsx": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", + "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", + "license": "MIT", + "peerDependencies": { + "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" + } + }, + "node_modules/acorn-walk": { + "version": "8.3.4", + "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.3.4.tgz", + "integrity": "sha512-ueEepnujpqee2o5aIYnvHU6C0A42MNdsIDeqy5BydrkuC5R1ZuUFnm27EeFJGoEHJQgn3uleRvmTXaJgfXbt4g==", + "license": "MIT", + "dependencies": { + "acorn": "^8.11.0" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/add": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/add/-/add-2.0.6.tgz", + "integrity": "sha512-j5QzrmsokwWWp6kUcJQySpbG+xfOBqqKnup3OIk1pz+kB/80SLorZ9V8zHFLO92Lcd+hbvq8bT+zOGoPkmBV0Q==", + "license": "MIT" + }, + "node_modules/address": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/address/-/address-1.2.2.tgz", + "integrity": "sha512-4B/qKCfeE/ODUaAUpSwfzazo5x29WD4r3vXiWsB7I2mSDAihwEqKO+g8GELZUQSSAo5e1XTYh3ZVfLyxBc12nA==", + "license": "MIT", + "engines": { + "node": ">= 10.0.0" + } + }, + "node_modules/adm-zip": { + "version": "0.4.16", + "resolved": "https://registry.npmjs.org/adm-zip/-/adm-zip-0.4.16.tgz", + "integrity": "sha512-TFi4HBKSGfIKsK5YCkKaaFG2m4PEDyViZmEwof3MTIgzimHLto6muaHVpbrljdIvIrFZzEq/p4nafOeLcYegrg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.3.0" + } + }, + "node_modules/aes-js": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/aes-js/-/aes-js-3.0.0.tgz", + "integrity": "sha512-H7wUZRn8WpTq9jocdxQ2c8x2sKo9ZVmzfRE13GiNJXfp7NcKYEdvl3vspKjXox6RIG2VtaRe4JFvxG4rqp2Zuw==", + "license": "MIT" + }, + "node_modules/agent-base": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz", + "integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==", + "devOptional": true, + "license": "MIT", + "dependencies": { + "debug": "4" + }, + "engines": { + "node": ">= 6.0.0" + } + }, + "node_modules/agentkeepalive": { + "version": "4.6.0", + "resolved": "https://registry.npmjs.org/agentkeepalive/-/agentkeepalive-4.6.0.tgz", + "integrity": "sha512-kja8j7PjmncONqaTsB8fQ+wE2mSU2DJ9D4XKoJ5PFWIdRMa6SLSN1ff4mOr4jCbfRSsxR4keIiySJU0N9T5hIQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "humanize-ms": "^1.2.1" + }, + "engines": { + "node": ">= 8.0.0" + } + }, + "node_modules/aggregate-error": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/aggregate-error/-/aggregate-error-3.1.0.tgz", + "integrity": "sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==", + "license": "MIT", + "dependencies": { + "clean-stack": "^2.0.0", + "indent-string": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/ai": { + "version": "5.0.115", + "resolved": "https://registry.npmjs.org/ai/-/ai-5.0.115.tgz", + "integrity": "sha512-aVuHx0orGxXvhyL7oXUyW8TnWQE6Al8f3Bl6VZjz0WHMV+WaACHPkSyvQ3wje2QCUGzdl5DBF5d+OaXyghPQyg==", + "license": "Apache-2.0", + "dependencies": { + "@ai-sdk/gateway": "2.0.22", + "@ai-sdk/provider": "2.0.0", + "@ai-sdk/provider-utils": "3.0.19", + "@opentelemetry/api": "1.9.0" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "zod": "^3.25.76 || ^4.1.8" + } + }, + "node_modules/ajv": { + "version": "6.12.6", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", + "license": "MIT", + "peer": true, + "dependencies": { + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/ajv-formats": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ajv-formats/-/ajv-formats-2.1.1.tgz", + "integrity": "sha512-Wx0Kx52hxE7C18hkMEggYlEifqWZtYaRgouJor+WMdPnQyEK13vgEWyVNup7SoeeoLMsr4kf5h6dOW11I15MUA==", + "license": "MIT", + "dependencies": { + "ajv": "^8.0.0" + }, + "peerDependencies": { + "ajv": "^8.0.0" + }, + "peerDependenciesMeta": { + "ajv": { + "optional": true + } + } + }, + "node_modules/ajv-formats/node_modules/ajv": { + "version": "8.17.1", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.17.1.tgz", + "integrity": "sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g==", + "license": "MIT", + "dependencies": { + "fast-deep-equal": "^3.1.3", + "fast-uri": "^3.0.1", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/ajv-formats/node_modules/json-schema-traverse": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", + "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", + "license": "MIT" + }, + "node_modules/ajv-keywords": { + "version": "3.5.2", + "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.2.tgz", + "integrity": "sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==", + "license": "MIT", + "peerDependencies": { + "ajv": "^6.9.1" + } + }, + "node_modules/algoliasearch": { + "version": "5.46.1", + "resolved": "https://registry.npmjs.org/algoliasearch/-/algoliasearch-5.46.1.tgz", + "integrity": "sha512-39ol8Ulqb3MntofkXHlrcXKyU8BU0PXvQrXPBIX6eXj/EO4VT7651mhGVORI2oF8ydya9nFzT3fYDoqme/KL6w==", + "license": "MIT", + "dependencies": { + "@algolia/abtesting": "1.12.1", + "@algolia/client-abtesting": "5.46.1", + "@algolia/client-analytics": "5.46.1", + "@algolia/client-common": "5.46.1", + "@algolia/client-insights": "5.46.1", + "@algolia/client-personalization": "5.46.1", + "@algolia/client-query-suggestions": "5.46.1", + "@algolia/client-search": "5.46.1", + "@algolia/ingestion": "1.46.1", + "@algolia/monitoring": "1.46.1", + "@algolia/recommend": "5.46.1", + "@algolia/requester-browser-xhr": "5.46.1", + "@algolia/requester-fetch": "5.46.1", + "@algolia/requester-node-http": "5.46.1" + }, + "engines": { + "node": ">= 14.0.0" + } + }, + "node_modules/algoliasearch-helper": { + "version": "3.26.1", + "resolved": "https://registry.npmjs.org/algoliasearch-helper/-/algoliasearch-helper-3.26.1.tgz", + "integrity": "sha512-CAlCxm4fYBXtvc5MamDzP6Svu8rW4z9me4DCBY1rQ2UDJ0u0flWmusQ8M3nOExZsLLRcUwUPoRAPMrhzOG3erw==", + "license": "MIT", + "dependencies": { + "@algolia/events": "^4.0.1" + }, + "peerDependencies": { + "algoliasearch": ">= 3.1 < 6" + } + }, + "node_modules/amazon-cognito-identity-js": { + "version": "6.3.15", + "resolved": "https://registry.npmjs.org/amazon-cognito-identity-js/-/amazon-cognito-identity-js-6.3.15.tgz", + "integrity": "sha512-G2mzTlGYHKYh9oZDO0Gk94xVQ4iY9GYWBaYScbDYvz05ps6dqi0IvdNx1Lxi7oA3tjS5X+mUN7/svFJJdOB9YA==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@aws-crypto/sha256-js": "1.2.2", + "buffer": "4.9.2", + "fast-base64-decode": "^1.0.0", + "isomorphic-unfetch": "^3.0.0", + "js-cookie": "^2.2.1" + } + }, + "node_modules/amazon-cognito-identity-js/node_modules/@aws-crypto/sha256-js": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/@aws-crypto/sha256-js/-/sha256-js-1.2.2.tgz", + "integrity": "sha512-Nr1QJIbW/afYYGzYvrF70LtaHrIRtd4TNAglX8BvlfxJLZ45SAmueIKYl5tWoNBPzp65ymXGFK0Bb1vZUpuc9g==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@aws-crypto/util": "^1.2.2", + "@aws-sdk/types": "^3.1.0", + "tslib": "^1.11.1" + } + }, + "node_modules/amazon-cognito-identity-js/node_modules/@aws-crypto/util": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/@aws-crypto/util/-/util-1.2.2.tgz", + "integrity": "sha512-H8PjG5WJ4wz0UXAFXeJjWCW1vkvIJ3qUUD+rGRwJ2/hj+xT58Qle2MTql/2MGzkU+1JLAFuR6aJpLAjHwhmwwg==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@aws-sdk/types": "^3.1.0", + "@aws-sdk/util-utf8-browser": "^3.0.0", + "tslib": "^1.11.1" + } + }, + "node_modules/amazon-cognito-identity-js/node_modules/buffer": { + "version": "4.9.2", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-4.9.2.tgz", + "integrity": "sha512-xq+q3SRMOxGivLhBNaUdC64hDTQwejJ+H0T/NB1XMtTVEwNTrfFF3gAxiyW0Bu/xWEGhjVKgUcMhCrUy2+uCWg==", + "dev": true, + "license": "MIT", + "dependencies": { + "base64-js": "^1.0.2", + "ieee754": "^1.1.4", + "isarray": "^1.0.0" + } + }, + "node_modules/amazon-cognito-identity-js/node_modules/isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/amazon-cognito-identity-js/node_modules/tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", + "dev": true, + "license": "0BSD" + }, + "node_modules/amdefine": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/amdefine/-/amdefine-1.0.1.tgz", + "integrity": "sha512-S2Hw0TtNkMJhIabBwIojKL9YHO5T0n5eNqWJ7Lrlel/zDbftQpxpapi8tZs3X1HWa+u+QeydGmzzNU0m09+Rcg==", + "dev": true, + "license": "BSD-3-Clause OR MIT", + "optional": true, + "engines": { + "node": ">=0.4.2" + } + }, + "node_modules/anser": { + "version": "1.4.10", + "resolved": "https://registry.npmjs.org/anser/-/anser-1.4.10.tgz", + "integrity": "sha512-hCv9AqTQ8ycjpSd3upOJd7vFwW1JaoYQ7tpham03GJ1ca8/65rqn0RpaWpItOAd6ylW9wAw6luXYPJIyPFVOww==", + "license": "MIT" + }, + "node_modules/ansi-align": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/ansi-align/-/ansi-align-3.0.1.tgz", + "integrity": "sha512-IOfwwBF5iczOjp/WeY4YxyjqAFMQoZufdQWDd19SEExbVLNXqvpzSJ/M7Za4/sCPmQ0+GRquoA7bGcINcxew6w==", + "license": "ISC", + "dependencies": { + "string-width": "^4.1.0" + } + }, + "node_modules/ansi-colors": { + "version": "4.1.3", + "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.3.tgz", + "integrity": "sha512-/6w/C21Pm1A7aZitlI5Ni/2J6FFQN8i1Cvz3kHABAAbw93v/NlvKdVOqz7CCWz/3iv/JplRSEEZ83XION15ovw==", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/ansi-escapes": { + "version": "4.3.2", + "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.2.tgz", + "integrity": "sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==", + "license": "MIT", + "dependencies": { + "type-fest": "^0.21.3" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/ansi-escapes/node_modules/type-fest": { + "version": "0.21.3", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.21.3.tgz", + "integrity": "sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==", + "license": "(MIT OR CC0-1.0)", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/ansi-html-community": { + "version": "0.0.8", + "resolved": "https://registry.npmjs.org/ansi-html-community/-/ansi-html-community-0.0.8.tgz", + "integrity": "sha512-1APHAyr3+PCamwNw3bXCPp4HFLONZt/yIH0sZp0/469KWNTEy+qN5jQ3GVX6DMZ1UXAi34yVwtTeaG/HpBuuzw==", + "engines": [ + "node >= 0.8.0" + ], + "license": "Apache-2.0", + "bin": { + "ansi-html": "bin/ansi-html" + } + }, + "node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/ansi-styles": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", + "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/ansis": { + "version": "3.17.0", + "resolved": "https://registry.npmjs.org/ansis/-/ansis-3.17.0.tgz", + "integrity": "sha512-0qWUglt9JEqLFr3w1I1pbrChn1grhaiAR2ocX1PP/flRmxgtwTzPFFFnfIlD6aMOLQZgSuCRlidD70lvx8yhzg==", + "license": "ISC", + "engines": { + "node": ">=14" + } + }, + "node_modules/antlr4": { + "version": "4.13.2", + "resolved": "https://registry.npmjs.org/antlr4/-/antlr4-4.13.2.tgz", + "integrity": "sha512-QiVbZhyy4xAZ17UPEuG3YTOt8ZaoeOR1CvEAqrEsDBsOqINslaB147i9xqljZqoyf5S+EUlGStaj+t22LT9MOg==", + "dev": true, + "license": "BSD-3-Clause", + "engines": { + "node": ">=16" + } + }, + "node_modules/antlr4ts": { + "version": "0.5.0-alpha.4", + "resolved": "https://registry.npmjs.org/antlr4ts/-/antlr4ts-0.5.0-alpha.4.tgz", + "integrity": "sha512-WPQDt1B74OfPv/IMS2ekXAKkTZIHl88uMetg6q3OTqgFxZ/dxDXI0EWLyZid/1Pe6hTftyg5N7gel5wNAGxXyQ==", + "dev": true, + "license": "BSD-3-Clause" + }, + "node_modules/anymatch": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz", + "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==", + "license": "ISC", + "dependencies": { + "normalize-path": "^3.0.0", + "picomatch": "^2.0.4" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/anymatch/node_modules/picomatch": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "license": "MIT", + "engines": { + "node": ">=8.6" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/app-root-path": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/app-root-path/-/app-root-path-3.1.0.tgz", + "integrity": "sha512-biN3PwB2gUtjaYy/isrU3aNWI5w+fAfvHkSvCKeQGxhmYpwKFUxudR3Yya+KqVRHBmEDYh+/lTozYCFbmzX4nA==", + "license": "MIT", + "engines": { + "node": ">= 6.0.0" + } + }, + "node_modules/append-field": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/append-field/-/append-field-1.0.0.tgz", + "integrity": "sha512-klpgFSWLW1ZEs8svjfb7g4qWY0YS5imI82dTg+QahUvJ8YqAY0P10Uk8tTyh9ZGuYEZEMaeJYCF5BFuX552hsw==", + "license": "MIT" + }, + "node_modules/append-transform": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/append-transform/-/append-transform-2.0.0.tgz", + "integrity": "sha512-7yeyCEurROLQJFv5Xj4lEGTy0borxepjFv1g22oAdqFu//SrAlDl1O1Nxx15SH1RoliUml6p8dwJW9jvZughhg==", + "dev": true, + "license": "MIT", + "dependencies": { + "default-require-extensions": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/aproba": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/aproba/-/aproba-2.1.0.tgz", + "integrity": "sha512-tLIEcj5GuR2RSTnxNKdkK0dJ/GrC7P38sUkiDmDuHfsHmbagTFAxDVIBltoklXEVIQ/f14IL8IMJ5pn9Hez1Ew==", + "license": "ISC", + "optional": true + }, + "node_modules/archiver": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/archiver/-/archiver-5.3.2.tgz", + "integrity": "sha512-+25nxyyznAXF7Nef3y0EbBeqmGZgeN/BxHX29Rs39djAfaFalmQ89SE6CWyDCHzGL0yt/ycBtNOmGTW0FyGWNw==", + "dev": true, + "license": "MIT", + "dependencies": { + "archiver-utils": "^2.1.0", + "async": "^3.2.4", + "buffer-crc32": "^0.2.1", + "readable-stream": "^3.6.0", + "readdir-glob": "^1.1.2", + "tar-stream": "^2.2.0", + "zip-stream": "^4.1.0" + }, + "engines": { + "node": ">= 10" + } + }, + "node_modules/archiver-utils": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/archiver-utils/-/archiver-utils-2.1.0.tgz", + "integrity": "sha512-bEL/yUb/fNNiNTuUz979Z0Yg5L+LzLxGJz8x79lYmR54fmTIb6ob/hNQgkQnIUDWIFjZVQwl9Xs356I6BAMHfw==", + "dev": true, + "license": "MIT", + "dependencies": { + "glob": "^7.1.4", + "graceful-fs": "^4.2.0", + "lazystream": "^1.0.0", + "lodash.defaults": "^4.2.0", + "lodash.difference": "^4.5.0", + "lodash.flatten": "^4.4.0", + "lodash.isplainobject": "^4.0.6", + "lodash.union": "^4.6.0", + "normalize-path": "^3.0.0", + "readable-stream": "^2.0.0" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/archiver-utils/node_modules/glob": { + "version": "7.2.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", + "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", + "deprecated": "Glob versions prior to v9 are no longer supported", + "dev": true, + "license": "ISC", + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.1.1", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/archiver/node_modules/async": { + "version": "3.2.6", + "resolved": "https://registry.npmjs.org/async/-/async-3.2.6.tgz", + "integrity": "sha512-htCUDlxyyCLMgaM3xXg0C0LW2xqfuQ6p05pCEIsXuyQ+a1koYKTuBMzRNwmybfLgvJDMd0r1LTn4+E0Ti6C2AA==", + "dev": true, + "license": "MIT" + }, + "node_modules/archiver/node_modules/readable-stream": { + "version": "3.6.2", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", + "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", + "dev": true, + "license": "MIT", + "dependencies": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/archy": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/archy/-/archy-1.0.0.tgz", + "integrity": "sha512-Xg+9RwCg/0p32teKdGMPTPnVXKD0w3DfHnFTficozsAgsvq2XenPJq/MYpzzQ/v8zrOyJn6Ds39VA4JIDwFfqw==", + "dev": true, + "license": "MIT" + }, + "node_modules/are-we-there-yet": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-2.0.0.tgz", + "integrity": "sha512-Ci/qENmwHnsYo9xKIcUJN5LeDKdJ6R1Z1j9V/J5wyq8nh/mYPEpIKJbBZXtZjG04HiK7zV/p6Vs9952MrMeUIw==", + "deprecated": "This package is no longer supported.", + "license": "ISC", + "optional": true, + "dependencies": { + "delegates": "^1.0.0", + "readable-stream": "^3.6.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/are-we-there-yet/node_modules/readable-stream": { + "version": "3.6.2", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", + "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", + "license": "MIT", + "optional": true, + "dependencies": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/arg": { + "version": "4.1.3", + "resolved": "https://registry.npmjs.org/arg/-/arg-4.1.3.tgz", + "integrity": "sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==", + "devOptional": true, + "license": "MIT" + }, + "node_modules/argparse": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", + "license": "Python-2.0" + }, + "node_modules/aria-hidden": { + "version": "1.2.6", + "resolved": "https://registry.npmjs.org/aria-hidden/-/aria-hidden-1.2.6.tgz", + "integrity": "sha512-ik3ZgC9dY/lYVVM++OISsaYDeg1tb0VtP5uL3ouh1koGOaUMDPpbFIei4JkFimWUFPn90sbMNMXQAIVOlnYKJA==", + "license": "MIT", + "dependencies": { + "tslib": "^2.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/aria-query": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/aria-query/-/aria-query-5.3.2.tgz", + "integrity": "sha512-COROpnaoap1E2F000S62r6A60uHZnmlvomhfyT2DlTcrY1OrBKn2UhH7qn5wTC9zMvD0AY7csdPSNwKP+7WiQw==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/array-back": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/array-back/-/array-back-3.1.0.tgz", + "integrity": "sha512-TkuxA4UCOvxuDK6NZYXCalszEzj+TLszyASooky+i742l9TqsOdYCMJJupxRic61hwquNtppB3hgcuq9SVSH1Q==", + "devOptional": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/array-buffer-byte-length": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/array-buffer-byte-length/-/array-buffer-byte-length-1.0.2.tgz", + "integrity": "sha512-LHE+8BuR7RYGDKvnrmcuSq3tDcKv9OFEXQt/HpbZhY7V6h0zlUXutnAD82GiFx9rdieCMjkvtcsPqBwgUl1Iiw==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.3", + "is-array-buffer": "^3.0.5" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/array-flatten": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", + "integrity": "sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg==", + "license": "MIT" + }, + "node_modules/array-ify": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/array-ify/-/array-ify-1.0.0.tgz", + "integrity": "sha512-c5AMf34bKdvPhQ7tBGhqkgKNUzMr4WUs+WDtC2ZUGOUncbxKMTvqxYctiseW3+L4bA8ec+GcZ6/A/FW4m8ukng==", + "dev": true, + "license": "MIT" + }, + "node_modules/array-includes": { + "version": "3.1.9", + "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.1.9.tgz", + "integrity": "sha512-FmeCCAenzH0KH381SPT5FZmiA/TmpndpcaShhfgEN9eCVjnFBqq3l1xrI42y8+PPLI6hypzou4GXw00WHmPBLQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.8", + "call-bound": "^1.0.4", + "define-properties": "^1.2.1", + "es-abstract": "^1.24.0", + "es-object-atoms": "^1.1.1", + "get-intrinsic": "^1.3.0", + "is-string": "^1.1.1", + "math-intrinsics": "^1.1.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/array-timsort": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/array-timsort/-/array-timsort-1.0.3.tgz", + "integrity": "sha512-/+3GRL7dDAGEfM6TseQk/U+mi18TU2Ms9I3UlLdUMhz2hbvGNTKdj9xniwXfUqgYhHxRx0+8UnKkvlNwVU+cWQ==", + "license": "MIT" + }, + "node_modules/array-union": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", + "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/array-uniq": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/array-uniq/-/array-uniq-1.0.3.tgz", + "integrity": "sha512-MNha4BWQ6JbwhFhj03YK552f7cb3AzoE8SzeljgChvL1dl3IcvggXVz1DilzySZkCja+CXuZbdW7yATchWn8/Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/array.prototype.findlast": { + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/array.prototype.findlast/-/array.prototype.findlast-1.2.5.tgz", + "integrity": "sha512-CVvd6FHg1Z3POpBLxO6E6zr+rSKEQ9L6rZHAaY7lLfhKsWYUBBOuMs0e9o24oopj6H+geRCX0YJ+TJLBK2eHyQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.2", + "es-errors": "^1.3.0", + "es-object-atoms": "^1.0.0", + "es-shim-unscopables": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/array.prototype.findlastindex": { + "version": "1.2.6", + "resolved": "https://registry.npmjs.org/array.prototype.findlastindex/-/array.prototype.findlastindex-1.2.6.tgz", + "integrity": "sha512-F/TKATkzseUExPlfvmwQKGITM3DGTK+vkAsCZoDc5daVygbJBnjEUCbgkAvVFsgfXfX4YIqZ/27G3k3tdXrTxQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.8", + "call-bound": "^1.0.4", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.9", + "es-errors": "^1.3.0", + "es-object-atoms": "^1.1.1", + "es-shim-unscopables": "^1.1.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/array.prototype.flat": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/array.prototype.flat/-/array.prototype.flat-1.3.3.tgz", + "integrity": "sha512-rwG/ja1neyLqCuGZ5YYrznA62D4mZXg0i1cIskIUKSiqF3Cje9/wXAls9B9s1Wa2fomMsIv8czB8jZcPmxCXFg==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.8", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.5", + "es-shim-unscopables": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/array.prototype.flatmap": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/array.prototype.flatmap/-/array.prototype.flatmap-1.3.3.tgz", + "integrity": "sha512-Y7Wt51eKJSyi80hFrJCePGGNo5ktJCslFuboqJsbf57CCPcm5zztluPlc4/aD8sWsKvlwatezpV4U1efk8kpjg==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.8", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.5", + "es-shim-unscopables": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/array.prototype.toreversed": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/array.prototype.toreversed/-/array.prototype.toreversed-1.1.2.tgz", + "integrity": "sha512-wwDCoT4Ck4Cz7sLtgUmzR5UV3YF5mFHUlbChCzZBQZ+0m2cl/DH3tKgvphv1nKgFsJ48oCSg6p91q2Vm0I/ZMA==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1", + "es-shim-unscopables": "^1.0.0" + } + }, + "node_modules/array.prototype.tosorted": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/array.prototype.tosorted/-/array.prototype.tosorted-1.1.4.tgz", + "integrity": "sha512-p6Fx8B7b7ZhL/gmUsAy0D15WhvDccw3mnGNbZpi3pmeJdxtWsj2jEaI4Y6oo3XiHfzuSgPwKc04MYt6KgvC/wA==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.3", + "es-errors": "^1.3.0", + "es-shim-unscopables": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/arraybuffer.prototype.slice": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/arraybuffer.prototype.slice/-/arraybuffer.prototype.slice-1.0.4.tgz", + "integrity": "sha512-BNoCY6SXXPQ7gF2opIP4GBE+Xw7U+pHMYKuzjgCN3GwiaIR09UUeKfheyIry77QtrCBlC0KK0q5/TER/tYh3PQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "array-buffer-byte-length": "^1.0.1", + "call-bind": "^1.0.8", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.5", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.6", + "is-array-buffer": "^3.0.4" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/asap": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/asap/-/asap-2.0.6.tgz", + "integrity": "sha512-BSHWgDSAiKs50o2Re8ppvp3seVHXSRM44cdSsT9FfNEUUZLOGWVCsiWaRPWM1Znn+mqZ1OfVZ3z3DWEzSp7hRA==", + "license": "MIT" + }, + "node_modules/asn1": { + "version": "0.2.6", + "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.6.tgz", + "integrity": "sha512-ix/FxPn0MDjeyJ7i/yoHGFt/EX6LyNbxSEhPPXODPL+KB0VPk86UYfL0lMdy+KCnv+fmvIzySwaK5COwqVbWTQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "safer-buffer": "~2.1.0" + } + }, + "node_modules/asn1-ts": { + "version": "8.0.5", + "resolved": "https://registry.npmjs.org/asn1-ts/-/asn1-ts-8.0.5.tgz", + "integrity": "sha512-d2oJ6RE+i89WsR/1XTFm3K4XsifGGghw04B+4Oh6dEdTT2hDI1zuKo4uqAlx0E9xYKwQUdjni8hqawb3RThBpg==", + "license": "MIT" + }, + "node_modules/asn1.js": { + "version": "4.10.1", + "resolved": "https://registry.npmjs.org/asn1.js/-/asn1.js-4.10.1.tgz", + "integrity": "sha512-p32cOF5q0Zqs9uBiONKYLm6BClCoBCM5O9JfeUSlnQLBTxYdTK+pW+nXflm8UkKd2UYlEbYz5qEi0JuZR9ckSw==", + "dev": true, + "license": "MIT", + "dependencies": { + "bn.js": "^4.0.0", + "inherits": "^2.0.1", + "minimalistic-assert": "^1.0.0" + } + }, + "node_modules/asn1.js/node_modules/bn.js": { + "version": "4.12.2", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.2.tgz", + "integrity": "sha512-n4DSx829VRTRByMRGdjQ9iqsN0Bh4OolPsFnaZBLcbi8iXcB+kJ9s7EnRt4wILZNV3kPLHkRVfOc/HvhC3ovDw==", + "dev": true, + "license": "MIT" + }, + "node_modules/asn1js": { + "version": "3.0.6", + "resolved": "https://registry.npmjs.org/asn1js/-/asn1js-3.0.6.tgz", + "integrity": "sha512-UOCGPYbl0tv8+006qks/dTgV9ajs97X2p0FAbyS2iyCRrmLSRolDaHdp+v/CLgnzHc3fVB+CwYiUmei7ndFcgA==", + "license": "BSD-3-Clause", + "dependencies": { + "pvtsutils": "^1.3.6", + "pvutils": "^1.1.3", + "tslib": "^2.8.1" + }, + "engines": { + "node": ">=12.0.0" + } + }, + "node_modules/assert": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/assert/-/assert-2.1.0.tgz", + "integrity": "sha512-eLHpSK/Y4nhMJ07gDaAzoX/XAKS8PSaojml3M0DM4JpV1LAi5JOJ/p6H/XWrl8L+DzVEvVCW1z3vWAaB9oTsQw==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.2", + "is-nan": "^1.3.2", + "object-is": "^1.1.5", + "object.assign": "^4.1.4", + "util": "^0.12.5" + } + }, + "node_modules/assertion-error": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/assertion-error/-/assertion-error-1.1.0.tgz", + "integrity": "sha512-jgsaNduz+ndvGyFt3uSuWqvy4lCnIJiovtouQN5JZHOKCS2QuhEdbcQHFhVksz2N2U9hXJo8odG7ETyWlEeuDw==", + "license": "MIT", + "engines": { + "node": "*" + } + }, + "node_modules/ast-parents": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/ast-parents/-/ast-parents-0.0.1.tgz", + "integrity": "sha512-XHusKxKz3zoYk1ic8Un640joHbFMhbqneyoZfoKnEGtf2ey9Uh/IdpcQplODdO/kENaMIWsD0nJm4+wX3UNLHA==", + "dev": true, + "license": "MIT" + }, + "node_modules/astral-regex": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-2.0.0.tgz", + "integrity": "sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/astring": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/astring/-/astring-1.9.0.tgz", + "integrity": "sha512-LElXdjswlqjWrPpJFg1Fx4wpkOCxj1TDHlSV4PlaRxHGWko024xICaa97ZkMfs6DRKlCguiAI+rbXv5GWwXIkg==", + "license": "MIT", + "bin": { + "astring": "bin/astring" + } + }, + "node_modules/async": { + "version": "1.5.2", + "resolved": "https://registry.npmjs.org/async/-/async-1.5.2.tgz", + "integrity": "sha512-nSVgobk4rv61R9PUSDtYt7mPVB2olxNR5RWJcAsH676/ef11bUZwvu7+RGYrYauVdDPcO519v68wRhXQtxsV9w==", + "dev": true, + "license": "MIT" + }, + "node_modules/async-function": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/async-function/-/async-function-1.0.0.tgz", + "integrity": "sha512-hsU18Ae8CDTR6Kgu9DYf0EbCr/a5iGL0rytQDobUcdpYOKokk8LEjVphnXkDkgpi0wYVsqrXuP0bZxJaTqdgoA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/async-limiter": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/async-limiter/-/async-limiter-1.0.1.tgz", + "integrity": "sha512-csOlWGAcRFJaI6m+F2WKdnMKr4HhdhFVBk0H/QbJFMCr+uO2kwohwXQPxw/9OCxp05r5ghVBFSyioixx3gfkNQ==", + "license": "MIT" + }, + "node_modules/async-lock": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/async-lock/-/async-lock-1.4.1.tgz", + "integrity": "sha512-Az2ZTpuytrtqENulXwO3GGv1Bztugx6TT37NIo7imr/Qo0gsYiGtSdBa2B6fsXhTpVZDNfu1Qn3pk531e3q+nQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/async-retry": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/async-retry/-/async-retry-1.3.3.tgz", + "integrity": "sha512-wfr/jstw9xNi/0teMHrRW7dsz3Lt5ARhYNZ2ewpadnhaIp5mbALhOAP+EAdsC7t4Z6wqsDVv9+W6gm1Dk9mEyw==", + "dev": true, + "license": "MIT", + "dependencies": { + "retry": "0.13.1" + } + }, + "node_modules/asynckit": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", + "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==", + "license": "MIT" + }, + "node_modules/at-least-node": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/at-least-node/-/at-least-node-1.0.0.tgz", + "integrity": "sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg==", + "dev": true, + "license": "ISC", + "engines": { + "node": ">= 4.0.0" + } + }, + "node_modules/atomic-sleep": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/atomic-sleep/-/atomic-sleep-1.0.0.tgz", + "integrity": "sha512-kNOjDqAh7px0XWNI+4QbzoiR/nTkHAWNud2uvnJquD1/x5a7EQZMJT0AczqK0Qn67oY/TTQ1LbUKajZpp3I9tQ==", + "license": "MIT", + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/autoprefixer": { + "version": "10.4.23", + "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.4.23.tgz", + "integrity": "sha512-YYTXSFulfwytnjAPlw8QHncHJmlvFKtczb8InXaAx9Q0LbfDnfEYDE55omerIJKihhmU61Ft+cAOSzQVaBUmeA==", + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/autoprefixer" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "dependencies": { + "browserslist": "^4.28.1", + "caniuse-lite": "^1.0.30001760", + "fraction.js": "^5.3.4", + "picocolors": "^1.1.1", + "postcss-value-parser": "^4.2.0" + }, + "bin": { + "autoprefixer": "bin/autoprefixer" + }, + "engines": { + "node": "^10 || ^12 || >=14" + }, + "peerDependencies": { + "postcss": "^8.1.0" + } + }, + "node_modules/available-typed-arrays": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.7.tgz", + "integrity": "sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ==", + "license": "MIT", + "dependencies": { + "possible-typed-array-names": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/axios": { + "version": "1.12.2", + "resolved": "https://registry.npmjs.org/axios/-/axios-1.12.2.tgz", + "integrity": "sha512-vMJzPewAlRyOgxV2dU0Cuz2O8zzzx9VYtbJOaBgXFeLc4IV/Eg50n4LowmehOOR61S8ZMpc2K5Sa7g6A4jfkUw==", + "license": "MIT", + "dependencies": { + "follow-redirects": "^1.15.6", + "form-data": "^4.0.4", + "proxy-from-env": "^1.1.0" + } + }, + "node_modules/axios-oauth-client": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/axios-oauth-client/-/axios-oauth-client-1.5.0.tgz", + "integrity": "sha512-CFuTfK9KdRnDDR6LQlUJ0GNKUZ3tHRSFdKPM9WqeCtUdcuKDgWt9aDFH7Xl87VpUcfNt5qRVl4iHdayqtXVv7g==", + "license": "MIT", + "dependencies": { + "qs": "^6.10.1" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/axios-token-interceptor": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/axios-token-interceptor/-/axios-token-interceptor-0.2.0.tgz", + "integrity": "sha512-la74OEsXBH1IS9yI6p2oTIynPtBzs0PVUSOwOBgFg2kBwTeDqQ+YJ6jaOWxsTYyqJO510OzHTfnzAn3GFuf9xA==", + "license": "MIT", + "dependencies": { + "lock": "^1.1.0" + } + }, + "node_modules/babel-jest": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/babel-jest/-/babel-jest-29.7.0.tgz", + "integrity": "sha512-BrvGY3xZSwEcCzKvKsCi2GgHqDqsYkOP4/by5xCgIwGXQxIEh+8ew3gmrE1y7XRR6LHZIj6yLYnUi/mm2KXKBg==", + "license": "MIT", + "dependencies": { + "@jest/transform": "^29.7.0", + "@types/babel__core": "^7.1.14", + "babel-plugin-istanbul": "^6.1.1", + "babel-preset-jest": "^29.6.3", + "chalk": "^4.0.0", + "graceful-fs": "^4.2.9", + "slash": "^3.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + }, + "peerDependencies": { + "@babel/core": "^7.8.0" + } + }, + "node_modules/babel-loader": { + "version": "9.2.1", + "resolved": "https://registry.npmjs.org/babel-loader/-/babel-loader-9.2.1.tgz", + "integrity": "sha512-fqe8naHt46e0yIdkjUZYqddSXfej3AHajX+CSO5X7oy0EmPc6o5Xh+RClNoHjnieWz9AW4kZxW9yyFMhVB1QLA==", + "license": "MIT", + "dependencies": { + "find-cache-dir": "^4.0.0", + "schema-utils": "^4.0.0" + }, + "engines": { + "node": ">= 14.15.0" + }, + "peerDependencies": { + "@babel/core": "^7.12.0", + "webpack": ">=5" + } + }, + "node_modules/babel-loader/node_modules/ajv": { + "version": "8.17.1", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.17.1.tgz", + "integrity": "sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g==", + "license": "MIT", + "dependencies": { + "fast-deep-equal": "^3.1.3", + "fast-uri": "^3.0.1", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/babel-loader/node_modules/ajv-keywords": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-5.1.0.tgz", + "integrity": "sha512-YCS/JNFAUyr5vAuhk1DWm1CBxRHW9LbJ2ozWeemrIqpbsqKjHVxYPyi5GC0rjZIT5JxJ3virVTS8wk4i/Z+krw==", + "license": "MIT", + "dependencies": { + "fast-deep-equal": "^3.1.3" + }, + "peerDependencies": { + "ajv": "^8.8.2" + } + }, + "node_modules/babel-loader/node_modules/json-schema-traverse": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", + "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", + "license": "MIT" + }, + "node_modules/babel-loader/node_modules/schema-utils": { + "version": "4.3.3", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-4.3.3.tgz", + "integrity": "sha512-eflK8wEtyOE6+hsaRVPxvUKYCpRgzLqDTb8krvAsRIwOGlHoSgYLgBXoubGgLd2fT41/OUYdb48v4k4WWHQurA==", + "license": "MIT", + "dependencies": { + "@types/json-schema": "^7.0.9", + "ajv": "^8.9.0", + "ajv-formats": "^2.1.1", + "ajv-keywords": "^5.1.0" + }, + "engines": { + "node": ">= 10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + } + }, + "node_modules/babel-plugin-dynamic-import-node": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/babel-plugin-dynamic-import-node/-/babel-plugin-dynamic-import-node-2.3.3.tgz", + "integrity": "sha512-jZVI+s9Zg3IqA/kdi0i6UDCybUI3aSBLnglhYbSSjKlV7yF1F/5LWv8MakQmvYpnbJDS6fcBL2KzHSxNCMtWSQ==", + "license": "MIT", + "dependencies": { + "object.assign": "^4.1.0" + } + }, + "node_modules/babel-plugin-istanbul": { + "version": "6.1.1", + "resolved": "https://registry.npmjs.org/babel-plugin-istanbul/-/babel-plugin-istanbul-6.1.1.tgz", + "integrity": "sha512-Y1IQok9821cC9onCx5otgFfRm7Lm+I+wwxOx738M/WLPZ9Q42m4IG5W0FNX8WLL2gYMZo3JkuXIH2DOpWM+qwA==", + "license": "BSD-3-Clause", + "dependencies": { + "@babel/helper-plugin-utils": "^7.0.0", + "@istanbuljs/load-nyc-config": "^1.0.0", + "@istanbuljs/schema": "^0.1.2", + "istanbul-lib-instrument": "^5.0.4", + "test-exclude": "^6.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/babel-plugin-istanbul/node_modules/istanbul-lib-instrument": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-5.2.1.tgz", + "integrity": "sha512-pzqtp31nLv/XFOzXGuvhCb8qhjmTVo5vjVk19XE4CRlSWz0KoeJ3bw9XsA7nOp9YBf4qHjwBxkDzKcME/J29Yg==", + "license": "BSD-3-Clause", + "dependencies": { + "@babel/core": "^7.12.3", + "@babel/parser": "^7.14.7", + "@istanbuljs/schema": "^0.1.2", + "istanbul-lib-coverage": "^3.2.0", + "semver": "^6.3.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/babel-plugin-jest-hoist": { + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-29.6.3.tgz", + "integrity": "sha512-ESAc/RJvGTFEzRwOTT4+lNDk/GNHMkKbNzsvT0qKRfDyyYTskxB5rnU2njIDYVxXCBHHEI1c0YwHob3WaYujOg==", + "license": "MIT", + "dependencies": { + "@babel/template": "^7.3.3", + "@babel/types": "^7.3.3", + "@types/babel__core": "^7.1.14", + "@types/babel__traverse": "^7.0.6" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/babel-plugin-macros": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/babel-plugin-macros/-/babel-plugin-macros-3.1.0.tgz", + "integrity": "sha512-Cg7TFGpIr01vOQNODXOOaGz2NpCU5gl8x1qJFbb6hbZxR7XrcE2vtbAsTAbJ7/xwJtUuJEw8K8Zr/AE0LHlesg==", + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.12.5", + "cosmiconfig": "^7.0.0", + "resolve": "^1.19.0" + }, + "engines": { + "node": ">=10", + "npm": ">=6" + } + }, + "node_modules/babel-plugin-macros/node_modules/cosmiconfig": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-7.1.0.tgz", + "integrity": "sha512-AdmX6xUzdNASswsFtmwSt7Vj8po9IuqXm0UXz7QKPuEUmPB4XyjGfaAr2PSuELMwkRMVH1EpIkX5bTZGRB3eCA==", + "license": "MIT", + "dependencies": { + "@types/parse-json": "^4.0.0", + "import-fresh": "^3.2.1", + "parse-json": "^5.0.0", + "path-type": "^4.0.0", + "yaml": "^1.10.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/babel-plugin-macros/node_modules/yaml": { + "version": "1.10.2", + "resolved": "https://registry.npmjs.org/yaml/-/yaml-1.10.2.tgz", + "integrity": "sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==", + "license": "ISC", + "engines": { + "node": ">= 6" + } + }, + "node_modules/babel-plugin-polyfill-corejs2": { + "version": "0.4.14", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.4.14.tgz", + "integrity": "sha512-Co2Y9wX854ts6U8gAAPXfn0GmAyctHuK8n0Yhfjd6t30g7yvKjspvvOo9yG+z52PZRgFErt7Ka2pYnXCjLKEpg==", + "license": "MIT", + "dependencies": { + "@babel/compat-data": "^7.27.7", + "@babel/helper-define-polyfill-provider": "^0.6.5", + "semver": "^6.3.1" + }, + "peerDependencies": { + "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" + } + }, + "node_modules/babel-plugin-polyfill-corejs3": { + "version": "0.13.0", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.13.0.tgz", + "integrity": "sha512-U+GNwMdSFgzVmfhNm8GJUX88AadB3uo9KpJqS3FaqNIPKgySuvMb+bHPsOmmuWyIcuqZj/pzt1RUIUZns4y2+A==", + "license": "MIT", + "dependencies": { + "@babel/helper-define-polyfill-provider": "^0.6.5", + "core-js-compat": "^3.43.0" + }, + "peerDependencies": { + "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" + } + }, + "node_modules/babel-plugin-polyfill-regenerator": { + "version": "0.6.5", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.6.5.tgz", + "integrity": "sha512-ISqQ2frbiNU9vIJkzg7dlPpznPZ4jOiUQ1uSmB0fEHeowtN3COYRsXr/xexn64NpU13P06jc/L5TgiJXOgrbEg==", + "license": "MIT", + "dependencies": { + "@babel/helper-define-polyfill-provider": "^0.6.5" + }, + "peerDependencies": { + "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" + } + }, + "node_modules/babel-plugin-syntax-hermes-parser": { + "version": "0.29.1", + "resolved": "https://registry.npmjs.org/babel-plugin-syntax-hermes-parser/-/babel-plugin-syntax-hermes-parser-0.29.1.tgz", + "integrity": "sha512-2WFYnoWGdmih1I1J5eIqxATOeycOqRwYxAQBu3cUu/rhwInwHUg7k60AFNbuGjSDL8tje5GDrAnxzRLcu2pYcA==", + "license": "MIT", + "dependencies": { + "hermes-parser": "0.29.1" + } + }, + "node_modules/babel-plugin-transform-vite-meta-env": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-vite-meta-env/-/babel-plugin-transform-vite-meta-env-1.0.3.tgz", + "integrity": "sha512-eyfuDEXrMu667TQpmctHeTlJrZA6jXYHyEJFjcM0yEa60LS/LXlOg2PBbMb8DVS+V9CnTj/j9itdlDVMcY2zEg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.13.9", + "@types/babel__core": "^7.1.12" + } + }, + "node_modules/babel-preset-current-node-syntax": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/babel-preset-current-node-syntax/-/babel-preset-current-node-syntax-1.2.0.tgz", + "integrity": "sha512-E/VlAEzRrsLEb2+dv8yp3bo4scof3l9nR4lrld+Iy5NyVqgVYUJnDAmunkhPMisRI32Qc4iRiz425d8vM++2fg==", + "license": "MIT", + "dependencies": { + "@babel/plugin-syntax-async-generators": "^7.8.4", + "@babel/plugin-syntax-bigint": "^7.8.3", + "@babel/plugin-syntax-class-properties": "^7.12.13", + "@babel/plugin-syntax-class-static-block": "^7.14.5", + "@babel/plugin-syntax-import-attributes": "^7.24.7", + "@babel/plugin-syntax-import-meta": "^7.10.4", + "@babel/plugin-syntax-json-strings": "^7.8.3", + "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4", + "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3", + "@babel/plugin-syntax-numeric-separator": "^7.10.4", + "@babel/plugin-syntax-object-rest-spread": "^7.8.3", + "@babel/plugin-syntax-optional-catch-binding": "^7.8.3", + "@babel/plugin-syntax-optional-chaining": "^7.8.3", + "@babel/plugin-syntax-private-property-in-object": "^7.14.5", + "@babel/plugin-syntax-top-level-await": "^7.14.5" + }, + "peerDependencies": { + "@babel/core": "^7.0.0 || ^8.0.0-0" + } + }, + "node_modules/babel-preset-jest": { + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/babel-preset-jest/-/babel-preset-jest-29.6.3.tgz", + "integrity": "sha512-0B3bhxR6snWXJZtR/RliHTDPRgn1sNHOR0yVtq/IiQFyuOVjFS+wuio/R4gSNkyYmKmJB4wGZv2NZanmKmTnNA==", + "license": "MIT", + "dependencies": { + "babel-plugin-jest-hoist": "^29.6.3", + "babel-preset-current-node-syntax": "^1.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/bail": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/bail/-/bail-1.0.5.tgz", + "integrity": "sha512-xFbRxM1tahm08yHBP16MMjVUAvDaBMD38zsM9EMAUN61omwLmKlOpB/Zku5QkjZ8TZ4vn53pj+t518cH0S03RQ==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/balanced-match": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", + "license": "MIT" + }, + "node_modules/bare-events": { + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/bare-events/-/bare-events-2.7.0.tgz", + "integrity": "sha512-b3N5eTW1g7vXkw+0CXh/HazGTcO5KYuu/RCNaJbDMPI6LHDi+7qe8EmxKUVe1sUbY2KZOVZFyj62x0OEz9qyAA==", + "dev": true, + "license": "Apache-2.0" + }, + "node_modules/bare-fs": { + "version": "4.4.5", + "resolved": "https://registry.npmjs.org/bare-fs/-/bare-fs-4.4.5.tgz", + "integrity": "sha512-TCtu93KGLu6/aiGWzMr12TmSRS6nKdfhAnzTQRbXoSWxkbb9eRd53jQ51jG7g1gYjjtto3hbBrrhzg6djcgiKg==", + "dev": true, + "license": "Apache-2.0", + "optional": true, + "dependencies": { + "bare-events": "^2.5.4", + "bare-path": "^3.0.0", + "bare-stream": "^2.6.4", + "bare-url": "^2.2.2", + "fast-fifo": "^1.3.2" + }, + "engines": { + "bare": ">=1.16.0" + }, + "peerDependencies": { + "bare-buffer": "*" + }, + "peerDependenciesMeta": { + "bare-buffer": { + "optional": true + } + } + }, + "node_modules/bare-os": { + "version": "3.6.2", + "resolved": "https://registry.npmjs.org/bare-os/-/bare-os-3.6.2.tgz", + "integrity": "sha512-T+V1+1srU2qYNBmJCXZkUY5vQ0B4FSlL3QDROnKQYOqeiQR8UbjNHlPa+TIbM4cuidiN9GaTaOZgSEgsvPbh5A==", + "dev": true, + "license": "Apache-2.0", + "optional": true, + "engines": { + "bare": ">=1.14.0" + } + }, + "node_modules/bare-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/bare-path/-/bare-path-3.0.0.tgz", + "integrity": "sha512-tyfW2cQcB5NN8Saijrhqn0Zh7AnFNsnczRcuWODH0eYAXBsJ5gVxAUuNr7tsHSC6IZ77cA0SitzT+s47kot8Mw==", + "dev": true, + "license": "Apache-2.0", + "optional": true, + "dependencies": { + "bare-os": "^3.0.1" + } + }, + "node_modules/bare-stream": { + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/bare-stream/-/bare-stream-2.7.0.tgz", + "integrity": "sha512-oyXQNicV1y8nc2aKffH+BUHFRXmx6VrPzlnaEvMhram0nPBrKcEdcyBg5r08D0i8VxngHFAiVyn1QKXpSG0B8A==", + "dev": true, + "license": "Apache-2.0", + "optional": true, + "dependencies": { + "streamx": "^2.21.0" + }, + "peerDependencies": { + "bare-buffer": "*", + "bare-events": "*" + }, + "peerDependenciesMeta": { + "bare-buffer": { + "optional": true + }, + "bare-events": { + "optional": true + } + } + }, + "node_modules/bare-url": { + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/bare-url/-/bare-url-2.2.2.tgz", + "integrity": "sha512-g+ueNGKkrjMazDG3elZO1pNs3HY5+mMmOet1jtKyhOaCnkLzitxf26z7hoAEkDNgdNmnc1KIlt/dw6Po6xZMpA==", + "dev": true, + "license": "Apache-2.0", + "optional": true, + "dependencies": { + "bare-path": "^3.0.0" + } + }, + "node_modules/base-x": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/base-x/-/base-x-5.0.1.tgz", + "integrity": "sha512-M7uio8Zt++eg3jPj+rHMfCC+IuygQHHCOU+IYsVtik6FWjuYpVt/+MRKcgsAMHh8mMFAwnB+Bs+mTrFiXjMzKg==", + "license": "MIT" + }, + "node_modules/base64-js": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", + "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT" + }, + "node_modules/base64url": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/base64url/-/base64url-3.0.1.tgz", + "integrity": "sha512-ir1UPr3dkwexU7FdV8qBBbNDRUhMmIekYMFZfi+C/sLNnRESKPl23nB9b2pltqfOQNnGzsDdId90AEtG5tCx4A==", + "license": "MIT", + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/baseline-browser-mapping": { + "version": "2.9.10", + "resolved": "https://registry.npmjs.org/baseline-browser-mapping/-/baseline-browser-mapping-2.9.10.tgz", + "integrity": "sha512-2VIKvDx8Z1a9rTB2eCkdPE5nSe28XnA+qivGnWHoB40hMMt/h1hSz0960Zqsn6ZyxWXUie0EBdElKv8may20AA==", + "license": "Apache-2.0", + "bin": { + "baseline-browser-mapping": "dist/cli.js" + } + }, + "node_modules/batch": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/batch/-/batch-0.6.1.tgz", + "integrity": "sha512-x+VAiMRL6UPkx+kudNvxTl6hB2XNNCG2r+7wixVfIYwu/2HKRXimwQyaumLjMveWvT2Hkd/cAJw+QBMfJ/EKVw==", + "license": "MIT" + }, + "node_modules/bcrypt-pbkdf": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz", + "integrity": "sha512-qeFIXtP4MSoi6NLqO12WfqARWWuCKi2Rn/9hJLEmtB5yTNr9DqFWkJRCf2qShWzPeAMRnOgCrq0sg/KLv5ES9w==", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "tweetnacl": "^0.14.3" + } + }, + "node_modules/bcrypt-pbkdf/node_modules/tweetnacl": { + "version": "0.14.5", + "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz", + "integrity": "sha512-KXXFFdAbFXY4geFIwoyNK+f5Z1b7swfXABfL7HXCmoIWMKU3dmS26672A4EeQtDzLKy7SXmfBu51JolvEKwtGA==", + "dev": true, + "license": "Unlicense" + }, + "node_modules/bech32": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/bech32/-/bech32-1.1.4.tgz", + "integrity": "sha512-s0IrSOzLlbvX7yp4WBfPITzpAU8sqQcpsmwXDiKwrG4r491vwCO/XpejasRNl0piBMe/DvP4Tz0mIS/X1DPJBQ==", + "license": "MIT" + }, + "node_modules/better-path-resolve": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/better-path-resolve/-/better-path-resolve-1.0.0.tgz", + "integrity": "sha512-pbnl5XzGBdrFU/wT4jqmJVPn2B6UHPBOhzMQkY/SPUPB6QtUXtmBHBIwCbXJol93mOpGMnQyP/+BB19q04xj7g==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-windows": "^1.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/big.js": { + "version": "5.2.2", + "resolved": "https://registry.npmjs.org/big.js/-/big.js-5.2.2.tgz", + "integrity": "sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ==", + "license": "MIT", + "engines": { + "node": "*" + } + }, + "node_modules/bignumber.js": { + "version": "9.3.1", + "resolved": "https://registry.npmjs.org/bignumber.js/-/bignumber.js-9.3.1.tgz", + "integrity": "sha512-Ko0uX15oIUS7wJ3Rb30Fs6SkVbLmPBAKdlm7q9+ak9bbIeFf0MwuBsQV6z7+X768/cHsfg+WlysDWJcmthjsjQ==", + "license": "MIT", + "engines": { + "node": "*" + } + }, + "node_modules/binary-extensions": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.3.0.tgz", + "integrity": "sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==", + "license": "MIT", + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/bl": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/bl/-/bl-5.1.0.tgz", + "integrity": "sha512-tv1ZJHLfTDnXE6tMHv73YgSJaWR2AFuPwMntBe7XL/GBFHnT0CLnsHMogfk5+GzCDC5ZWarSCYaIGATZt9dNsQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "buffer": "^6.0.3", + "inherits": "^2.0.4", + "readable-stream": "^3.4.0" + } + }, + "node_modules/bl/node_modules/readable-stream": { + "version": "3.6.2", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", + "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", + "dev": true, + "license": "MIT", + "dependencies": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/blakejs": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/blakejs/-/blakejs-1.2.1.tgz", + "integrity": "sha512-QXUSXI3QVc/gJME0dBpXrag1kbzOqCjCX8/b54ntNyW6sjtoqxqRk3LTmXzaJoh71zMsDCjM+47jS7XiwN/+fQ==", + "license": "MIT" + }, + "node_modules/bn.js": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-5.2.1.tgz", + "integrity": "sha512-eXRvHzWyYPBuB4NBy0cmYQjGitUrtqwbvlzP3G6VFnNRbsZQIxQ10PbKKHt8gZ/HW/D/747aDl+QkDqg3KQLMQ==", + "license": "MIT" + }, + "node_modules/body-parser": { + "version": "1.20.2", + "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.2.tgz", + "integrity": "sha512-ml9pReCu3M61kGlqoTm2umSXTlRTuGTx0bfYj+uIUKKYycG5NtSbeetV3faSU6R7ajOPw0g/J1PvK4qNy7s5bA==", + "license": "MIT", + "dependencies": { + "bytes": "3.1.2", + "content-type": "~1.0.5", + "debug": "2.6.9", + "depd": "2.0.0", + "destroy": "1.2.0", + "http-errors": "2.0.0", + "iconv-lite": "0.4.24", + "on-finished": "2.4.1", + "qs": "6.11.0", + "raw-body": "2.5.2", + "type-is": "~1.6.18", + "unpipe": "1.0.0" + }, + "engines": { + "node": ">= 0.8", + "npm": "1.2.8000 || >= 1.4.16" + } + }, + "node_modules/body-parser/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "license": "MIT", + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/body-parser/node_modules/iconv-lite": { + "version": "0.4.24", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", + "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", + "license": "MIT", + "dependencies": { + "safer-buffer": ">= 2.1.2 < 3" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/body-parser/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "license": "MIT" + }, + "node_modules/bonjour-service": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/bonjour-service/-/bonjour-service-1.3.0.tgz", + "integrity": "sha512-3YuAUiSkWykd+2Azjgyxei8OWf8thdn8AITIog2M4UICzoqfjlqr64WIjEXZllf/W6vK1goqleSR6brGomxQqA==", + "license": "MIT", + "dependencies": { + "fast-deep-equal": "^3.1.3", + "multicast-dns": "^7.2.5" + } + }, + "node_modules/boolbase": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz", + "integrity": "sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==", + "license": "ISC" + }, + "node_modules/bowser": { + "version": "2.12.1", + "resolved": "https://registry.npmjs.org/bowser/-/bowser-2.12.1.tgz", + "integrity": "sha512-z4rE2Gxh7tvshQ4hluIT7XcFrgLIQaw9X3A+kTTRdovCz5PMukm/0QC/BKSYPj3omF5Qfypn9O/c5kgpmvYUCw==", + "license": "MIT" + }, + "node_modules/boxen": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/boxen/-/boxen-5.1.2.tgz", + "integrity": "sha512-9gYgQKXx+1nP8mP7CzFyaUARhg7D3n1dF/FnErWmu9l6JvGpNUN278h0aSb+QjoiKSWG+iZ3uHrcqk0qrY9RQQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-align": "^3.0.0", + "camelcase": "^6.2.0", + "chalk": "^4.1.0", + "cli-boxes": "^2.2.1", + "string-width": "^4.2.2", + "type-fest": "^0.20.2", + "widest-line": "^3.1.0", + "wrap-ansi": "^7.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/boxen/node_modules/camelcase": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz", + "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/brace-expansion": { + "version": "1.1.12", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.12.tgz", + "integrity": "sha512-9T9UjW3r0UW5c1Q7GTwllptXwhvYmEzFhzMfZ9H7FQWt+uZePjZPjBP/W1ZEyZ1twGWom5/56TF4lPcqjnDHcg==", + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/braces": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz", + "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==", + "license": "MIT", + "dependencies": { + "fill-range": "^7.1.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/brorand": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/brorand/-/brorand-1.1.0.tgz", + "integrity": "sha512-cKV8tMCEpQs4hK/ik71d6LrPOnpkpGBR0wzxqr68g2m/LB2GxVYQroAjMJZRVM1Y4BCjCKc3vAamxSzOY2RP+w==", + "license": "MIT" + }, + "node_modules/browser-resolve": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/browser-resolve/-/browser-resolve-2.0.0.tgz", + "integrity": "sha512-7sWsQlYL2rGLy2IWm8WL8DCTJvYLc/qlOnsakDac87SOoCd16WLsaAMdCiAqsTNHIe+SXfaqyxyo6THoWqs8WQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "resolve": "^1.17.0" + } + }, + "node_modules/browser-stdout": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/browser-stdout/-/browser-stdout-1.3.1.tgz", + "integrity": "sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw==", + "dev": true, + "license": "ISC" + }, + "node_modules/browserify-aes": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/browserify-aes/-/browserify-aes-1.2.0.tgz", + "integrity": "sha512-+7CHXqGuspUn/Sl5aO7Ea0xWGAtETPXNSAjHo48JfLdPWcMng33Xe4znFvQweqc/uzk5zSOI3H52CYnjCfb5hA==", + "license": "MIT", + "dependencies": { + "buffer-xor": "^1.0.3", + "cipher-base": "^1.0.0", + "create-hash": "^1.1.0", + "evp_bytestokey": "^1.0.3", + "inherits": "^2.0.1", + "safe-buffer": "^5.0.1" + } + }, + "node_modules/browserify-cipher": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/browserify-cipher/-/browserify-cipher-1.0.1.tgz", + "integrity": "sha512-sPhkz0ARKbf4rRQt2hTpAHqn47X3llLkUGn+xEJzLjwY8LRs2p0v7ljvI5EyoRO/mexrNunNECisZs+gw2zz1w==", + "dev": true, + "license": "MIT", + "dependencies": { + "browserify-aes": "^1.0.4", + "browserify-des": "^1.0.0", + "evp_bytestokey": "^1.0.0" + } + }, + "node_modules/browserify-des": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/browserify-des/-/browserify-des-1.0.2.tgz", + "integrity": "sha512-BioO1xf3hFwz4kc6iBhI3ieDFompMhrMlnDFC4/0/vd5MokpuAc3R+LYbwTA9A5Yc9pq9UYPqffKpW2ObuwX5A==", + "dev": true, + "license": "MIT", + "dependencies": { + "cipher-base": "^1.0.1", + "des.js": "^1.0.0", + "inherits": "^2.0.1", + "safe-buffer": "^5.1.2" + } + }, + "node_modules/browserify-rsa": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/browserify-rsa/-/browserify-rsa-4.1.1.tgz", + "integrity": "sha512-YBjSAiTqM04ZVei6sXighu679a3SqWORA3qZTEqZImnlkDIFtKc6pNutpjyZ8RJTjQtuYfeetkxM11GwoYXMIQ==", "dev": true, "license": "MIT", + "dependencies": { + "bn.js": "^5.2.1", + "randombytes": "^2.1.0", + "safe-buffer": "^5.2.1" + }, "engines": { - "node": ">= 18" + "node": ">= 0.10" } }, - "node_modules/@nomicfoundation/edr-linux-arm64-gnu": { - "version": "0.11.3", - "resolved": "https://registry.npmjs.org/@nomicfoundation/edr-linux-arm64-gnu/-/edr-linux-arm64-gnu-0.11.3.tgz", - "integrity": "sha512-Ktjv89RZZiUmOFPspuSBVJ61mBZQ2+HuLmV67InNlh9TSUec/iDjGIwAn59dx0bF/LOSrM7qg5od3KKac4LJDQ==", + "node_modules/browserify-sign": { + "version": "4.2.5", + "resolved": "https://registry.npmjs.org/browserify-sign/-/browserify-sign-4.2.5.tgz", + "integrity": "sha512-C2AUdAJg6rlM2W5QMp2Q4KGQMVBwR1lIimTsUnutJ8bMpW5B52pGpR2gEnNBNwijumDo5FojQ0L9JrXA8m4YEw==", + "dev": true, + "license": "ISC", + "dependencies": { + "bn.js": "^5.2.2", + "browserify-rsa": "^4.1.1", + "create-hash": "^1.2.0", + "create-hmac": "^1.1.7", + "elliptic": "^6.6.1", + "inherits": "^2.0.4", + "parse-asn1": "^5.1.9", + "readable-stream": "^2.3.8", + "safe-buffer": "^5.2.1" + }, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/browserify-sign/node_modules/bn.js": { + "version": "5.2.2", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-5.2.2.tgz", + "integrity": "sha512-v2YAxEmKaBLahNwE1mjp4WON6huMNeuDvagFZW+ASCuA/ku0bXR9hSMw0XpiqMoA3+rmnyck/tPRSFQkoC9Cuw==", + "dev": true, + "license": "MIT" + }, + "node_modules/browserify-zlib": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/browserify-zlib/-/browserify-zlib-0.2.0.tgz", + "integrity": "sha512-Z942RysHXmJrhqk88FmKBVq/v5tqmSkDz7p54G/MGyjMnCFFnC79XWNbg+Vta8W6Wb2qtSZTSxIGkJrRpCFEiA==", "dev": true, "license": "MIT", + "dependencies": { + "pako": "~1.0.5" + } + }, + "node_modules/browserslist": { + "version": "4.28.1", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.28.1.tgz", + "integrity": "sha512-ZC5Bd0LgJXgwGqUknZY/vkUQ04r8NXnJZ3yYi4vDmSiZmC/pdSN0NbNRPxZpbtO4uAfDUAFffO8IZoM3Gj8IkA==", + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/browserslist" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "peer": true, + "dependencies": { + "baseline-browser-mapping": "^2.9.0", + "caniuse-lite": "^1.0.30001759", + "electron-to-chromium": "^1.5.263", + "node-releases": "^2.0.27", + "update-browserslist-db": "^1.2.0" + }, + "bin": { + "browserslist": "cli.js" + }, "engines": { - "node": ">= 18" + "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" } }, - "node_modules/@nomicfoundation/edr-linux-arm64-musl": { - "version": "0.11.3", - "resolved": "https://registry.npmjs.org/@nomicfoundation/edr-linux-arm64-musl/-/edr-linux-arm64-musl-0.11.3.tgz", - "integrity": "sha512-B3sLJx1rL2E9pfdD4mApiwOZSrX0a/KQSBWdlq1uAhFKqkl00yZaY4LejgZndsJAa4iKGQJlGnw4HCGeVt0+jA==", + "node_modules/bs-logger": { + "version": "0.2.6", + "resolved": "https://registry.npmjs.org/bs-logger/-/bs-logger-0.2.6.tgz", + "integrity": "sha512-pd8DCoxmbgc7hyPKOvxtqNcjYoOsABPQdcCUjGp3d42VR2CX1ORhk2A87oqqu5R1kk+76nsxZupkmyd+MVtCog==", "dev": true, "license": "MIT", + "dependencies": { + "fast-json-stable-stringify": "2.x" + }, "engines": { - "node": ">= 18" + "node": ">= 6" } }, - "node_modules/@nomicfoundation/edr-linux-x64-gnu": { - "version": "0.11.3", - "resolved": "https://registry.npmjs.org/@nomicfoundation/edr-linux-x64-gnu/-/edr-linux-x64-gnu-0.11.3.tgz", - "integrity": "sha512-D/4cFKDXH6UYyKPu6J3Y8TzW11UzeQI0+wS9QcJzjlrrfKj0ENW7g9VihD1O2FvXkdkTjcCZYb6ai8MMTCsaVw==", + "node_modules/bs58": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/bs58/-/bs58-6.0.0.tgz", + "integrity": "sha512-PD0wEnEYg6ijszw/u8s+iI3H17cTymlrwkKhDhPZq+Sokl3AU4htyBFTjAeNAlCCmg0f53g6ih3jATyCKftTfw==", + "license": "MIT", + "dependencies": { + "base-x": "^5.0.0" + } + }, + "node_modules/bs58check": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/bs58check/-/bs58check-2.1.2.tgz", + "integrity": "sha512-0TS1jicxdU09dwJMNZtVAfzPi6Q6QeN0pM1Fkzrjn+XYHvzMKPU3pHVpva+769iNVSfIYWf7LJ6WR+BuuMf8cA==", + "license": "MIT", + "dependencies": { + "bs58": "^4.0.0", + "create-hash": "^1.1.0", + "safe-buffer": "^5.1.2" + } + }, + "node_modules/bs58check/node_modules/base-x": { + "version": "3.0.11", + "resolved": "https://registry.npmjs.org/base-x/-/base-x-3.0.11.tgz", + "integrity": "sha512-xz7wQ8xDhdyP7tQxwdteLYeFfS68tSMNCZ/Y37WJ4bhGfKPpqEIlmIyueQHqOyoPhE6xNUqjzRr8ra0eF9VRvA==", + "license": "MIT", + "dependencies": { + "safe-buffer": "^5.0.1" + } + }, + "node_modules/bs58check/node_modules/bs58": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/bs58/-/bs58-4.0.1.tgz", + "integrity": "sha512-Ok3Wdf5vOIlBrgCvTq96gBkJw+JUEzdBgyaza5HLtPm7yTHkjRy8+JzNyHF7BHa0bNWOQIp3m5YF0nnFcOIKLw==", + "license": "MIT", + "dependencies": { + "base-x": "^3.0.2" + } + }, + "node_modules/bser": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/bser/-/bser-2.1.1.tgz", + "integrity": "sha512-gQxTNE/GAfIIrmHLUE3oJyp5FO6HRBfhjnw4/wMmA63ZGDJnWBmgY/lyQBpnDUkGmAhbSe39tx2d/iTOAfglwQ==", + "license": "Apache-2.0", + "dependencies": { + "node-int64": "^0.4.0" + } + }, + "node_modules/buffer": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-6.0.3.tgz", + "integrity": "sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT", + "dependencies": { + "base64-js": "^1.3.1", + "ieee754": "^1.2.1" + } + }, + "node_modules/buffer-alloc": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/buffer-alloc/-/buffer-alloc-1.2.0.tgz", + "integrity": "sha512-CFsHQgjtW1UChdXgbyJGtnm+O/uLQeZdtbDo8mfUgYXCHSM1wgrVxXm6bSyrUuErEb+4sYVGCzASBRot7zyrow==", + "license": "MIT", + "dependencies": { + "buffer-alloc-unsafe": "^1.1.0", + "buffer-fill": "^1.0.0" + } + }, + "node_modules/buffer-alloc-unsafe": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/buffer-alloc-unsafe/-/buffer-alloc-unsafe-1.1.0.tgz", + "integrity": "sha512-TEM2iMIEQdJ2yjPJoSIsldnleVaAk1oW3DBVUykyOLsEsFmEc9kn+SFFPz+gl54KQNxlDnAwCXosOS9Okx2xAg==", + "license": "MIT" + }, + "node_modules/buffer-crc32": { + "version": "0.2.13", + "resolved": "https://registry.npmjs.org/buffer-crc32/-/buffer-crc32-0.2.13.tgz", + "integrity": "sha512-VO9Ht/+p3SN7SKWqcrgEzjGbRSJYTx+Q1pTQC0wrWqHx0vpJraQ6GtHx8tvcg1rlK1byhU5gccxgOgj7B0TDkQ==", "dev": true, "license": "MIT", "engines": { - "node": ">= 18" + "node": "*" } }, - "node_modules/@nomicfoundation/edr-linux-x64-musl": { - "version": "0.11.3", - "resolved": "https://registry.npmjs.org/@nomicfoundation/edr-linux-x64-musl/-/edr-linux-x64-musl-0.11.3.tgz", - "integrity": "sha512-ergXuIb4nIvmf+TqyiDX5tsE49311DrBky6+jNLgsGDTBaN1GS3OFwFS8I6Ri/GGn6xOaT8sKu3q7/m+WdlFzg==", + "node_modules/buffer-equal-constant-time": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/buffer-equal-constant-time/-/buffer-equal-constant-time-1.0.1.tgz", + "integrity": "sha512-zRpUiDwd/xk6ADqPMATG8vc9VPrkck7T07OIx0gnjmJAnHnTVXNQG3vfvWNuiZIkwu9KrKdA1iJKfsfTVxE6NA==", + "license": "BSD-3-Clause" + }, + "node_modules/buffer-fill": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/buffer-fill/-/buffer-fill-1.0.0.tgz", + "integrity": "sha512-T7zexNBwiiaCOGDg9xNX9PBmjrubblRkENuptryuI64URkXDFum9il/JGL8Lm8wYfAXpredVXXZz7eMHilimiQ==", + "license": "MIT" + }, + "node_modules/buffer-from": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", + "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==", + "license": "MIT" + }, + "node_modules/buffer-xor": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/buffer-xor/-/buffer-xor-1.0.3.tgz", + "integrity": "sha512-571s0T7nZWK6vB67HI5dyUF7wXiNcfaPPPTl6zYCNApANjIvYJTg7hlud/+cJpdAhS7dVzqMLmfhfHR3rAcOjQ==", + "license": "MIT" + }, + "node_modules/buildcheck": { + "version": "0.0.6", + "resolved": "https://registry.npmjs.org/buildcheck/-/buildcheck-0.0.6.tgz", + "integrity": "sha512-8f9ZJCUXyT1M35Jx7MkBgmBMo3oHTTBIPLiY9xyL0pl3T5RwcPEY8cUHr5LBNfu/fk6c2T4DJZuVM/8ZZT2D2A==", + "dev": true, + "optional": true, + "engines": { + "node": ">=10.0.0" + } + }, + "node_modules/builtin-status-codes": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/builtin-status-codes/-/builtin-status-codes-3.0.0.tgz", + "integrity": "sha512-HpGFw18DgFWlncDfjTa2rcQ4W88O1mC8e8yZ2AvQY5KDaktSTwo+KRf6nHK6FRI5FyRyb/5T6+TSxfP7QyGsmQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/builtins": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/builtins/-/builtins-1.0.3.tgz", + "integrity": "sha512-uYBjakWipfaO/bXI7E8rq6kpwHRZK5cNYrUv2OzZSI/FvmdMyXJ2tG9dKcjEC5YHmHpUAwsargWIZNWdxb/bnQ==", + "license": "MIT", + "optional": true + }, + "node_modules/bundle-n-require": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/bundle-n-require/-/bundle-n-require-1.1.2.tgz", + "integrity": "sha512-bEk2jakVK1ytnZ9R2AAiZEeK/GxPUM8jvcRxHZXifZDMcjkI4EG/GlsJ2YGSVYT9y/p/gA9/0yDY8rCGsSU6Tg==", + "dev": true, + "license": "MIT", + "dependencies": { + "esbuild": "^0.25.1", + "node-eval": "^2.0.0" + } + }, + "node_modules/bundle-name": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/bundle-name/-/bundle-name-4.1.0.tgz", + "integrity": "sha512-tjwM5exMg6BGRI+kNmTntNsvdZS1X8BFYS6tnJ2hdH0kVxM6/eVZ2xy+FqStSWvYmtfFMDLIxurorHwDKfDz5Q==", + "license": "MIT", + "dependencies": { + "run-applescript": "^7.0.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/busboy": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/busboy/-/busboy-1.6.0.tgz", + "integrity": "sha512-8SFQbg/0hQ9xy3UNTB0YEnsNBbWfhf7RtnzpL7TkBiTBRfrQ9Fxcnz7VJsleJpyp6rVLvXiuORqjlHi5q+PYuA==", + "dependencies": { + "streamsearch": "^1.1.0" + }, + "engines": { + "node": ">=10.16.0" + } + }, + "node_modules/byline": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/byline/-/byline-5.0.0.tgz", + "integrity": "sha512-s6webAy+R4SR8XVuJWt2V2rGvhnrhxN+9S15GNuTK3wKPOXFF6RNc+8ug2XhH+2s4f+uudG4kUVYmYOQWL2g0Q==", "dev": true, "license": "MIT", "engines": { - "node": ">= 18" + "node": ">=0.10.0" } }, - "node_modules/@nomicfoundation/edr-win32-x64-msvc": { - "version": "0.11.3", - "resolved": "https://registry.npmjs.org/@nomicfoundation/edr-win32-x64-msvc/-/edr-win32-x64-msvc-0.11.3.tgz", - "integrity": "sha512-snvEf+WB3OV0wj2A7kQ+ZQqBquMcrozSLXcdnMdEl7Tmn+KDCbmFKBt3Tk0X3qOU4RKQpLPnTxdM07TJNVtung==", + "node_modules/bytes": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", + "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==", + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/cac": { + "version": "6.7.14", + "resolved": "https://registry.npmjs.org/cac/-/cac-6.7.14.tgz", + "integrity": "sha512-b6Ilus+c3RrdDk+JhLKUAQfzzgLEPy6wcXqS7f/xe1EETvsDP6GORG7SFuOs6cID5YkqchW/LXZbX5bc8j7ZcQ==", "dev": true, "license": "MIT", "engines": { - "node": ">= 18" + "node": ">=8" } }, - "node_modules/@nomicfoundation/hardhat-chai-matchers": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/@nomicfoundation/hardhat-chai-matchers/-/hardhat-chai-matchers-1.0.6.tgz", - "integrity": "sha512-f5ZMNmabZeZegEfuxn/0kW+mm7+yV7VNDxLpMOMGXWFJ2l/Ct3QShujzDRF9cOkK9Ui/hbDeOWGZqyQALDXVCQ==", + "node_modules/cacheable-lookup": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/cacheable-lookup/-/cacheable-lookup-7.0.0.tgz", + "integrity": "sha512-+qJyx4xiKra8mZrcwhjMRMUhD5NR1R8esPkzIYxX96JiecFoxAXFuz/GpR3+ev4PE1WamHip78wV0vcmPQtp8w==", + "license": "MIT", + "engines": { + "node": ">=14.16" + } + }, + "node_modules/cacheable-request": { + "version": "10.2.14", + "resolved": "https://registry.npmjs.org/cacheable-request/-/cacheable-request-10.2.14.tgz", + "integrity": "sha512-zkDT5WAF4hSSoUgyfg5tFIxz8XQK+25W/TLVojJTMKBaxevLBBtLxgqguAuVQB8PVW79FVjHcU+GJ9tVbDZ9mQ==", + "license": "MIT", + "dependencies": { + "@types/http-cache-semantics": "^4.0.2", + "get-stream": "^6.0.1", + "http-cache-semantics": "^4.1.1", + "keyv": "^4.5.3", + "mimic-response": "^4.0.0", + "normalize-url": "^8.0.0", + "responselike": "^3.0.0" + }, + "engines": { + "node": ">=14.16" + } + }, + "node_modules/caching-transform": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/caching-transform/-/caching-transform-4.0.0.tgz", + "integrity": "sha512-kpqOvwXnjjN44D89K5ccQC+RUrsy7jB/XLlRrx0D7/2HNcTPqzsb6XgYoErwko6QsV184CA2YgS1fxDiiDZMWA==", "dev": true, "license": "MIT", "dependencies": { - "@ethersproject/abi": "^5.1.2", - "@types/chai-as-promised": "^7.1.3", - "chai-as-promised": "^7.1.1", - "deep-eql": "^4.0.1", - "ordinal": "^1.0.3" + "hasha": "^5.0.0", + "make-dir": "^3.0.0", + "package-hash": "^4.0.0", + "write-file-atomic": "^3.0.0" }, - "peerDependencies": { - "@nomiclabs/hardhat-ethers": "^2.0.0", - "chai": "^4.2.0", - "ethers": "^5.0.0", - "hardhat": "^2.9.4" + "engines": { + "node": ">=8" } }, - "node_modules/@nomicfoundation/hardhat-network-helpers": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@nomicfoundation/hardhat-network-helpers/-/hardhat-network-helpers-1.1.0.tgz", - "integrity": "sha512-ZS+NulZuR99NUHt2VwcgZvgeD6Y63qrbORNRuKO+lTowJxNVsrJ0zbRx1j5De6G3dOno5pVGvuYSq2QVG0qCYg==", + "node_modules/caching-transform/node_modules/signal-exit": { + "version": "3.0.7", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", + "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", + "dev": true, + "license": "ISC" + }, + "node_modules/caching-transform/node_modules/write-file-atomic": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-3.0.3.tgz", + "integrity": "sha512-AvHcyZ5JnSfq3ioSyjrBkH9yW4m7Ayk8/9My/DD9onKeu/94fwrMocemO2QAJFAlnnDN+ZDS+ZjAR5ua1/PV/Q==", + "dev": true, + "license": "ISC", + "dependencies": { + "imurmurhash": "^0.1.4", + "is-typedarray": "^1.0.0", + "signal-exit": "^3.0.2", + "typedarray-to-buffer": "^3.1.5" + } + }, + "node_modules/call-bind": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.8.tgz", + "integrity": "sha512-oKlSFMcMwpUg2ednkhQ454wfWiU/ul3CkJe/PEHcTKuiX6RpbehUiFMXu13HalGZxfUwCQzZG747YXBn1im9ww==", + "license": "MIT", + "dependencies": { + "call-bind-apply-helpers": "^1.0.0", + "es-define-property": "^1.0.0", + "get-intrinsic": "^1.2.4", + "set-function-length": "^1.2.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/call-bind-apply-helpers": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/call-bind-apply-helpers/-/call-bind-apply-helpers-1.0.2.tgz", + "integrity": "sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ==", + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "function-bind": "^1.1.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/call-bound": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/call-bound/-/call-bound-1.0.4.tgz", + "integrity": "sha512-+ys997U96po4Kx/ABpBCqhA9EuxJaQWDQg7295H4hBphv3IZg0boBKuwYpt4YXp6MZ5AmZQnU/tyMTlRpaSejg==", + "license": "MIT", + "dependencies": { + "call-bind-apply-helpers": "^1.0.2", + "get-intrinsic": "^1.3.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/callsites": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", + "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/camel-case": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/camel-case/-/camel-case-4.1.2.tgz", + "integrity": "sha512-gxGWBrTT1JuMx6R+o5PTXMmUnhnVzLQ9SNutD4YqKtI6ap897t3tKECYla6gCWEkplXnlNybEkZg9GEGxKFCgw==", + "license": "MIT", + "dependencies": { + "pascal-case": "^3.1.2", + "tslib": "^2.0.3" + } + }, + "node_modules/camelcase": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", + "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/caniuse-api": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/caniuse-api/-/caniuse-api-3.0.0.tgz", + "integrity": "sha512-bsTwuIg/BZZK/vreVTYYbSWoe2F+71P7K5QGEX+pT250DZbfU1MQ5prOKpPR+LL6uWKK3KMwMCAS74QB3Um1uw==", + "license": "MIT", + "dependencies": { + "browserslist": "^4.0.0", + "caniuse-lite": "^1.0.0", + "lodash.memoize": "^4.1.2", + "lodash.uniq": "^4.5.0" + } + }, + "node_modules/caniuse-lite": { + "version": "1.0.30001760", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001760.tgz", + "integrity": "sha512-7AAMPcueWELt1p3mi13HR/LHH0TJLT11cnwDJEs3xA4+CK/PLKeO9Kl1oru24htkyUKtkGCvAx4ohB0Ttry8Dw==", + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/caniuse-lite" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "CC-BY-4.0" + }, + "node_modules/canonicalize": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/canonicalize/-/canonicalize-2.1.0.tgz", + "integrity": "sha512-F705O3xrsUtgt98j7leetNhTWPe+5S72rlL5O4jA1pKqBVQ/dT1O1D6PFxmSXvc0SUOinWS57DKx0I3CHrXJHQ==", + "license": "Apache-2.0", + "bin": { + "canonicalize": "bin/canonicalize.js" + } + }, + "node_modules/caseless": { + "version": "0.12.0", + "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz", + "integrity": "sha512-4tYFyifaFfGacoiObjJegolkwSU4xQNGbVgUiNYVUxbQ2x2lUsFvY4hVgVzGiIe6WLOPqycWXA40l+PWsxthUw==", + "dev": true, + "license": "Apache-2.0" + }, + "node_modules/cbor": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/cbor/-/cbor-8.1.0.tgz", + "integrity": "sha512-DwGjNW9omn6EwP70aXsn7FQJx5kO12tX0bZkaTjzdVFM6/7nhA4t0EENocKGx6D2Bch9PE2KzCUf5SceBdeijg==", "dev": true, "license": "MIT", + "dependencies": { + "nofilter": "^3.1.0" + }, + "engines": { + "node": ">=12.19" + } + }, + "node_modules/ccount": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/ccount/-/ccount-2.0.1.tgz", + "integrity": "sha512-eyrF0jiFpY+3drT6383f1qhkbGsLSifNAjA61IUjZjmLCWjItY6LB9ft9YhoDgwfmclB2zhu51Lc7+95b8NRAg==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/cd": { + "version": "0.3.3", + "resolved": "https://registry.npmjs.org/cd/-/cd-0.3.3.tgz", + "integrity": "sha512-X2y0Ssu48ucdkrNgCdg6k3EZWjWVy/dsEywUUTeZEIW31f3bQfq65Svm+TzU1Hz+qqhdmyCdjGhUvRsSKHl/mw==", + "engines": { + "node": "*" + } + }, + "node_modules/chai": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/chai/-/chai-4.5.0.tgz", + "integrity": "sha512-RITGBfijLkBddZvnn8jdqoTypxvqbOLYQkGGxXzeFjVHvudaPw0HNFD9x928/eUwYWd2dPCugVqspGALTZZQKw==", + "license": "MIT", "peer": true, "dependencies": { - "ethereumjs-util": "^7.1.4" + "assertion-error": "^1.1.0", + "check-error": "^1.0.3", + "deep-eql": "^4.1.3", + "get-func-name": "^2.0.2", + "loupe": "^2.3.6", + "pathval": "^1.1.1", + "type-detect": "^4.1.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/chai-as-promised": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/chai-as-promised/-/chai-as-promised-7.1.2.tgz", + "integrity": "sha512-aBDHZxRzYnUYuIAIPBH2s511DjlKPzXNlXSGFC8CwmroWQLfrW0LtE1nK3MAwwNhJPa9raEjNCmRoFpG0Hurdw==", + "license": "WTFPL", + "dependencies": { + "check-error": "^1.0.2" }, "peerDependencies": { - "hardhat": "^2.26.0" + "chai": ">= 2.1.2 < 6" } }, - "node_modules/@nomicfoundation/hardhat-toolbox": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/@nomicfoundation/hardhat-toolbox/-/hardhat-toolbox-2.0.2.tgz", - "integrity": "sha512-vnN1AzxbvpSx9pfdRHbUzTRIXpMLPXnUlkW855VaDk6N1pwRaQ2gNzEmFAABk4lWf11E00PKwFd/q27HuwYrYg==", - "dev": true, + "node_modules/chai/node_modules/type-detect": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-4.1.0.tgz", + "integrity": "sha512-Acylog8/luQ8L7il+geoSxhEkazvkslg7PSNKOX59mbB9cOveP5aq9h74Y7YU8yDpJwetzQQrfIwtf4Wp4LKcw==", "license": "MIT", - "peerDependencies": { - "@ethersproject/abi": "^5.4.7", - "@ethersproject/providers": "^5.4.7", - "@nomicfoundation/hardhat-chai-matchers": "^1.0.0", - "@nomicfoundation/hardhat-network-helpers": "^1.0.0", - "@nomiclabs/hardhat-ethers": "^2.0.0", - "@nomiclabs/hardhat-etherscan": "^3.0.0", - "@typechain/ethers-v5": "^10.1.0", - "@typechain/hardhat": "^6.1.2", - "@types/chai": "^4.2.0", - "@types/mocha": ">=9.1.0", - "@types/node": ">=12.0.0", - "chai": "^4.2.0", - "ethers": "^5.4.7", - "hardhat": "^2.11.0", - "hardhat-gas-reporter": "^1.0.8", - "solidity-coverage": "^0.8.1", - "ts-node": ">=8.0.0", - "typechain": "^8.1.0", - "typescript": ">=4.5.0" + "engines": { + "node": ">=4" } }, - "node_modules/@nomicfoundation/slang": { - "version": "0.18.3", - "resolved": "https://registry.npmjs.org/@nomicfoundation/slang/-/slang-0.18.3.tgz", - "integrity": "sha512-YqAWgckqbHM0/CZxi9Nlf4hjk9wUNLC9ngWCWBiqMxPIZmzsVKYuChdlrfeBPQyvQQBoOhbx+7C1005kLVQDZQ==", - "dev": true, + "node_modules/chakra-react-select": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/chakra-react-select/-/chakra-react-select-4.5.0.tgz", + "integrity": "sha512-5oxVH9tmn3kVVLt9m/zT28Efv44mk30BZETubE2MhkGMIeM9oJsiL2+dhgKLNUMLRxglmacY00oGQTSI0JrRTA==", "license": "MIT", "dependencies": { - "@bytecodealliance/preview2-shim": "0.17.0" + "react-select": "5.7.0" + }, + "peerDependencies": { + "@chakra-ui/form-control": "^2.0.0", + "@chakra-ui/icon": "^3.0.0", + "@chakra-ui/layout": "^2.0.0", + "@chakra-ui/media-query": "^3.0.0", + "@chakra-ui/menu": "^2.0.0", + "@chakra-ui/spinner": "^2.0.0", + "@chakra-ui/system": "^2.0.0", + "@emotion/react": "^11.8.1", + "react": "^18.0.0", + "react-dom": "^18.0.0" } }, - "node_modules/@nomicfoundation/solidity-analyzer": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/@nomicfoundation/solidity-analyzer/-/solidity-analyzer-0.1.2.tgz", - "integrity": "sha512-q4n32/FNKIhQ3zQGGw5CvPF6GTvDCpYwIf7bEY/dZTZbgfDsHyjJwURxUJf3VQuuJj+fDIFl4+KkBVbw4Ef6jA==", - "dev": true, + "node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", "license": "MIT", + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, "engines": { - "node": ">= 12" + "node": ">=10" }, - "optionalDependencies": { - "@nomicfoundation/solidity-analyzer-darwin-arm64": "0.1.2", - "@nomicfoundation/solidity-analyzer-darwin-x64": "0.1.2", - "@nomicfoundation/solidity-analyzer-linux-arm64-gnu": "0.1.2", - "@nomicfoundation/solidity-analyzer-linux-arm64-musl": "0.1.2", - "@nomicfoundation/solidity-analyzer-linux-x64-gnu": "0.1.2", - "@nomicfoundation/solidity-analyzer-linux-x64-musl": "0.1.2", - "@nomicfoundation/solidity-analyzer-win32-x64-msvc": "0.1.2" + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" } }, - "node_modules/@nomicfoundation/solidity-analyzer-darwin-arm64": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/@nomicfoundation/solidity-analyzer-darwin-arm64/-/solidity-analyzer-darwin-arm64-0.1.2.tgz", - "integrity": "sha512-JaqcWPDZENCvm++lFFGjrDd8mxtf+CtLd2MiXvMNTBD33dContTZ9TWETwNFwg7JTJT5Q9HEecH7FA+HTSsIUw==", - "dev": true, + "node_modules/chalk/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "license": "MIT", - "optional": true, + "dependencies": { + "color-convert": "^2.0.1" + }, "engines": { - "node": ">= 12" + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/@nomicfoundation/solidity-analyzer-darwin-x64": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/@nomicfoundation/solidity-analyzer-darwin-x64/-/solidity-analyzer-darwin-x64-0.1.2.tgz", - "integrity": "sha512-fZNmVztrSXC03e9RONBT+CiksSeYcxI1wlzqyr0L7hsQlK1fzV+f04g2JtQ1c/Fe74ZwdV6aQBdd6Uwl1052sw==", - "dev": true, + "node_modules/chalk/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", "license": "MIT", - "optional": true, + "dependencies": { + "color-name": "~1.1.4" + }, "engines": { - "node": ">= 12" + "node": ">=7.0.0" } }, - "node_modules/@nomicfoundation/solidity-analyzer-linux-arm64-gnu": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/@nomicfoundation/solidity-analyzer-linux-arm64-gnu/-/solidity-analyzer-linux-arm64-gnu-0.1.2.tgz", - "integrity": "sha512-3d54oc+9ZVBuB6nbp8wHylk4xh0N0Gc+bk+/uJae+rUgbOBwQSfuGIbAZt1wBXs5REkSmynEGcqx6DutoK0tPA==", - "dev": true, + "node_modules/chalk/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "license": "MIT" + }, + "node_modules/char-regex": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/char-regex/-/char-regex-1.0.2.tgz", + "integrity": "sha512-kWWXztvZ5SBQV+eRgKFeh8q5sLuZY2+8WUIzlxWVTg+oGwY14qylx1KbKzHd8P6ZYkAg0xyIDU9JMHhyJMZ1jw==", "license": "MIT", - "optional": true, "engines": { - "node": ">= 12" + "node": ">=10" } }, - "node_modules/@nomicfoundation/solidity-analyzer-linux-arm64-musl": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/@nomicfoundation/solidity-analyzer-linux-arm64-musl/-/solidity-analyzer-linux-arm64-musl-0.1.2.tgz", - "integrity": "sha512-iDJfR2qf55vgsg7BtJa7iPiFAsYf2d0Tv/0B+vhtnI16+wfQeTbP7teookbGvAo0eJo7aLLm0xfS/GTkvHIucA==", - "dev": true, + "node_modules/character-entities": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/character-entities/-/character-entities-1.2.4.tgz", + "integrity": "sha512-iBMyeEHxfVnIakwOuDXpVkc54HijNgCyQB2w0VfGQThle6NXn50zU6V/u+LDhxHcDUPojn6Kpga3PTAD8W1bQw==", "license": "MIT", - "optional": true, - "engines": { - "node": ">= 12" + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" } }, - "node_modules/@nomicfoundation/solidity-analyzer-linux-x64-gnu": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/@nomicfoundation/solidity-analyzer-linux-x64-gnu/-/solidity-analyzer-linux-x64-gnu-0.1.2.tgz", - "integrity": "sha512-9dlHMAt5/2cpWyuJ9fQNOUXFB/vgSFORg1jpjX1Mh9hJ/MfZXlDdHQ+DpFCs32Zk5pxRBb07yGvSHk9/fezL+g==", - "dev": true, + "node_modules/character-entities-html4": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/character-entities-html4/-/character-entities-html4-2.1.0.tgz", + "integrity": "sha512-1v7fgQRj6hnSwFpq1Eu0ynr/CDEw0rXo2B61qXrLNdHZmPKgb7fqS1a2JwF0rISo9q77jDI8VMEHoApn8qDoZA==", "license": "MIT", - "optional": true, - "engines": { - "node": ">= 12" + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" } }, - "node_modules/@nomicfoundation/solidity-analyzer-linux-x64-musl": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/@nomicfoundation/solidity-analyzer-linux-x64-musl/-/solidity-analyzer-linux-x64-musl-0.1.2.tgz", - "integrity": "sha512-GzzVeeJob3lfrSlDKQw2bRJ8rBf6mEYaWY+gW0JnTDHINA0s2gPR4km5RLIj1xeZZOYz4zRw+AEeYgLRqB2NXg==", - "dev": true, + "node_modules/character-entities-legacy": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/character-entities-legacy/-/character-entities-legacy-1.1.4.tgz", + "integrity": "sha512-3Xnr+7ZFS1uxeiUDvV02wQ+QDbc55o97tIV5zHScSPJpcLm/r0DFPcoY3tYRp+VZukxuMeKgXYmsXQHO05zQeA==", "license": "MIT", - "optional": true, - "engines": { - "node": ">= 12" + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" } }, - "node_modules/@nomicfoundation/solidity-analyzer-win32-x64-msvc": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/@nomicfoundation/solidity-analyzer-win32-x64-msvc/-/solidity-analyzer-win32-x64-msvc-0.1.2.tgz", - "integrity": "sha512-Fdjli4DCcFHb4Zgsz0uEJXZ2K7VEO+w5KVv7HmT7WO10iODdU9csC2az4jrhEsRtiR9Gfd74FlG0NYlw1BMdyA==", - "dev": true, + "node_modules/character-reference-invalid": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/character-reference-invalid/-/character-reference-invalid-1.1.4.tgz", + "integrity": "sha512-mKKUkUbhPpQlCOfIuZkvSEgktjPFIsZKRRbC6KWVEMvlzblj3i3asQv5ODsrwt0N3pHAEvjP8KTQPHkp0+6jOg==", "license": "MIT", - "optional": true, - "engines": { - "node": ">= 12" + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" } }, - "node_modules/@nomiclabs/hardhat-ethers": { - "version": "2.2.3", - "resolved": "https://registry.npmjs.org/@nomiclabs/hardhat-ethers/-/hardhat-ethers-2.2.3.tgz", - "integrity": "sha512-YhzPdzb612X591FOe68q+qXVXGG2ANZRvDo0RRUtimev85rCrAlv/TLMEZw5c+kq9AbzocLTVX/h2jVIFPL9Xg==", + "node_modules/chardet": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/chardet/-/chardet-2.1.0.tgz", + "integrity": "sha512-bNFETTG/pM5ryzQ9Ad0lJOTa6HWD/YsScAR3EnCPZRPlQh77JocYktSHOUHelyhm8IARL+o4c4F1bP5KVOjiRA==", "dev": true, - "license": "MIT", - "peerDependencies": { - "ethers": "^5.0.0", - "hardhat": "^2.0.0" - } + "license": "MIT" }, - "node_modules/@nomiclabs/hardhat-etherscan": { - "version": "3.1.8", - "resolved": "https://registry.npmjs.org/@nomiclabs/hardhat-etherscan/-/hardhat-etherscan-3.1.8.tgz", - "integrity": "sha512-v5F6IzQhrsjHh6kQz4uNrym49brK9K5bYCq2zQZ729RYRaifI9hHbtmK+KkIVevfhut7huQFEQ77JLRMAzWYjQ==", - "deprecated": "The @nomiclabs/hardhat-etherscan package is deprecated, please use @nomicfoundation/hardhat-verify instead", + "node_modules/charenc": { + "version": "0.0.2", + "resolved": "https://registry.npmjs.org/charenc/-/charenc-0.0.2.tgz", + "integrity": "sha512-yrLQ/yVUFXkzg7EDQsPieE/53+0RlaWTs+wBrvW36cyilJ2SaDWfl4Yj7MtLTXleV9uEKefbAGUPv2/iWSooRA==", "dev": true, - "license": "MIT", - "dependencies": { - "@ethersproject/abi": "^5.1.2", - "@ethersproject/address": "^5.0.2", - "cbor": "^8.1.0", - "chalk": "^2.4.2", - "debug": "^4.1.1", - "fs-extra": "^7.0.1", - "lodash": "^4.17.11", - "semver": "^6.3.0", - "table": "^6.8.0", - "undici": "^5.14.0" - }, - "peerDependencies": { - "hardhat": "^2.0.4" + "license": "BSD-3-Clause", + "engines": { + "node": "*" } }, - "node_modules/@nomiclabs/hardhat-etherscan/node_modules/ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "dev": true, + "node_modules/check-error": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/check-error/-/check-error-1.0.3.tgz", + "integrity": "sha512-iKEoDYaRmd1mxM90a2OEfWhjsjPpYPuQ+lMYsoxB126+t8fw7ySEO48nmDg5COTjxDI65/Y2OWpeEHk3ZOe8zg==", "license": "MIT", "dependencies": { - "color-convert": "^1.9.0" + "get-func-name": "^2.0.2" }, "engines": { - "node": ">=4" + "node": "*" } }, - "node_modules/@nomiclabs/hardhat-etherscan/node_modules/chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "dev": true, + "node_modules/cheerio": { + "version": "1.0.0-rc.12", + "resolved": "https://registry.npmjs.org/cheerio/-/cheerio-1.0.0-rc.12.tgz", + "integrity": "sha512-VqR8m68vM46BNnuZ5NtnGBKIE/DfN0cRIzg9n40EIq9NOv90ayxLBXA8fXC5gquFRGJSTRqBq25Jt2ECLR431Q==", "license": "MIT", "dependencies": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" + "cheerio-select": "^2.1.0", + "dom-serializer": "^2.0.0", + "domhandler": "^5.0.3", + "domutils": "^3.0.1", + "htmlparser2": "^8.0.1", + "parse5": "^7.0.0", + "parse5-htmlparser2-tree-adapter": "^7.0.0" }, "engines": { - "node": ">=4" + "node": ">= 6" + }, + "funding": { + "url": "https://github.com/cheeriojs/cheerio?sponsor=1" } }, - "node_modules/@nomiclabs/hardhat-etherscan/node_modules/color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", - "dev": true, - "license": "MIT", + "node_modules/cheerio-select": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/cheerio-select/-/cheerio-select-2.1.0.tgz", + "integrity": "sha512-9v9kG0LvzrlcungtnJtpGNxY+fzECQKhK4EGJX2vByejiMX84MFNQw4UxPJl3bFbTMw+Dfs37XaIkCwTZfLh4g==", + "license": "BSD-2-Clause", "dependencies": { - "color-name": "1.1.3" + "boolbase": "^1.0.0", + "css-select": "^5.1.0", + "css-what": "^6.1.0", + "domelementtype": "^2.3.0", + "domhandler": "^5.0.3", + "domutils": "^3.0.1" + }, + "funding": { + "url": "https://github.com/sponsors/fb55" } }, - "node_modules/@nomiclabs/hardhat-etherscan/node_modules/color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", - "dev": true, - "license": "MIT" - }, - "node_modules/@nomiclabs/hardhat-etherscan/node_modules/escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.8.0" + "node_modules/chevrotain": { + "version": "11.0.3", + "resolved": "https://registry.npmjs.org/chevrotain/-/chevrotain-11.0.3.tgz", + "integrity": "sha512-ci2iJH6LeIkvP9eJW6gpueU8cnZhv85ELY8w8WiFtNjMHA5ad6pQLaJo9mEly/9qUyCpvqX8/POVUTf18/HFdw==", + "license": "Apache-2.0", + "dependencies": { + "@chevrotain/cst-dts-gen": "11.0.3", + "@chevrotain/gast": "11.0.3", + "@chevrotain/regexp-to-ast": "11.0.3", + "@chevrotain/types": "11.0.3", + "@chevrotain/utils": "11.0.3", + "lodash-es": "4.17.21" } }, - "node_modules/@nomiclabs/hardhat-etherscan/node_modules/has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", - "dev": true, + "node_modules/chevrotain-allstar": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/chevrotain-allstar/-/chevrotain-allstar-0.3.1.tgz", + "integrity": "sha512-b7g+y9A0v4mxCW1qUhf3BSVPg+/NvGErk/dOkrDaHA0nQIQGAtrOjlX//9OQtRlSCy+x9rfB5N8yC71lH1nvMw==", "license": "MIT", - "engines": { - "node": ">=4" + "dependencies": { + "lodash-es": "^4.17.21" + }, + "peerDependencies": { + "chevrotain": "^11.0.0" } }, - "node_modules/@nomiclabs/hardhat-etherscan/node_modules/supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "dev": true, + "node_modules/chevrotain/node_modules/lodash-es": { + "version": "4.17.21", + "resolved": "https://registry.npmjs.org/lodash-es/-/lodash-es-4.17.21.tgz", + "integrity": "sha512-mKnC+QJ9pWVzv+C4/U3rRsHapFfHvQFoFB92e52xeyGMcX6/OlIl78je1u8vePzYZSkkogMPJ2yjxxsb89cxyw==", + "license": "MIT" + }, + "node_modules/chokidar": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.6.0.tgz", + "integrity": "sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==", "license": "MIT", "dependencies": { - "has-flag": "^3.0.0" + "anymatch": "~3.1.2", + "braces": "~3.0.2", + "glob-parent": "~5.1.2", + "is-binary-path": "~2.1.0", + "is-glob": "~4.0.1", + "normalize-path": "~3.0.0", + "readdirp": "~3.6.0" }, "engines": { - "node": ">=4" + "node": ">= 8.10.0" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + }, + "optionalDependencies": { + "fsevents": "~2.3.2" } }, - "node_modules/@notabene/pii-sdk": { - "version": "1.17.1", - "resolved": "https://registry.npmjs.org/@notabene/pii-sdk/-/pii-sdk-1.17.1.tgz", - "integrity": "sha512-lCDPl58SQBAEihDIHtkghVH7fNOtdngDM9DJrDW+odEKAnB0+o6r5V+AeiNYIfRwkn8nXiCW7i3SsNMmLlj5Zw==", - "license": "MIT", + "node_modules/chokidar/node_modules/glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "license": "ISC", "dependencies": { - "@ethersproject/bytes": "5.7.0", - "@noble/curves": "^1.1.0", - "@stablelib/ed25519": "1.0.3", - "axios": "^1.6.0", - "axios-oauth-client": "^1.5.0", - "axios-token-interceptor": "^0.2.0", - "base64url": "3.0.1", - "bs58": "5.0.0", - "debug": "^4.3.4", - "did-jwt": "^7.0", - "dotenv": "^16.0.3", - "lodash": "^4.17.21", - "multibase": "4.0.6", - "multicodec": "3.2.1", - "node-fetch": "^3.3.1", - "tslib": "^2.5.0", - "uuid": "^9.0.0" + "is-glob": "^4.0.1" }, "engines": { - "node": ">=14" + "node": ">= 6" } }, - "node_modules/@notabene/pii-sdk/node_modules/@ethersproject/bytes": { - "version": "5.7.0", - "resolved": "https://registry.npmjs.org/@ethersproject/bytes/-/bytes-5.7.0.tgz", - "integrity": "sha512-nsbxwgFXWh9NyYWo+U8atvmMsSdKJprTcICAkvbBffT75qDocbuggBU0SJiVK2MuTrp0q+xvLkTnGMPK1+uA9A==", - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], - "license": "MIT", - "dependencies": { - "@ethersproject/logger": "^5.7.0" + "node_modules/chownr": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/chownr/-/chownr-2.0.0.tgz", + "integrity": "sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ==", + "license": "ISC", + "optional": true, + "engines": { + "node": ">=10" } }, - "node_modules/@notabene/pii-sdk/node_modules/@noble/ciphers": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/@noble/ciphers/-/ciphers-0.4.1.tgz", - "integrity": "sha512-QCOA9cgf3Rc33owG0AYBB9wszz+Ul2kramWN8tXG44Gyciud/tbkEqvxRF/IpqQaBpRBNi9f4jdNxqB2CQCIXg==", - "license": "MIT", - "funding": { - "url": "https://paulmillr.com/funding/" + "node_modules/chrome-launcher": { + "version": "0.15.2", + "resolved": "https://registry.npmjs.org/chrome-launcher/-/chrome-launcher-0.15.2.tgz", + "integrity": "sha512-zdLEwNo3aUVzIhKhTtXfxhdvZhUghrnmkvcAq2NoDd+LeOHKf03H5jwZ8T/STsAlzyALkBVK552iaG1fGf1xVQ==", + "license": "Apache-2.0", + "dependencies": { + "@types/node": "*", + "escape-string-regexp": "^4.0.0", + "is-wsl": "^2.2.0", + "lighthouse-logger": "^1.0.0" + }, + "bin": { + "print-chrome-path": "bin/print-chrome-path.js" + }, + "engines": { + "node": ">=12.13.0" } }, - "node_modules/@notabene/pii-sdk/node_modules/base-x": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/base-x/-/base-x-4.0.1.tgz", - "integrity": "sha512-uAZ8x6r6S3aUM9rbHGVOIsR15U/ZSc82b3ymnCPsT45Gk1DDvhDPdIgB5MrhirZWt+5K0EEPQH985kNqZgNPFw==", - "license": "MIT" - }, - "node_modules/@notabene/pii-sdk/node_modules/bs58": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/bs58/-/bs58-5.0.0.tgz", - "integrity": "sha512-r+ihvQJvahgYT50JD05dyJNKlmmSlMoOGwn1lCcEzanPglg7TxYjioQUYehQ9mAR/+hOSd2jRc/Z2y5UxBymvQ==", + "node_modules/chrome-trace-event": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/chrome-trace-event/-/chrome-trace-event-1.0.4.tgz", + "integrity": "sha512-rNjApaLzuwaOTjCiT8lSDdGN1APCiqkChLMJxJPWLunPAt5fy8xgU9/jNOchV84wfIxrA0lRQB7oCT8jrn/wrQ==", "license": "MIT", - "dependencies": { - "base-x": "^4.0.0" + "engines": { + "node": ">=6.0" } }, - "node_modules/@notabene/pii-sdk/node_modules/did-jwt": { - "version": "7.4.7", - "resolved": "https://registry.npmjs.org/did-jwt/-/did-jwt-7.4.7.tgz", - "integrity": "sha512-Apz7nIfIHSKWIMaEP5L/K8xkwByvjezjTG0xiqwKdnNj1x8M0+Yasury5Dm/KPltxi2PlGfRPf3IejRKZrT8mQ==", + "node_modules/chromium-edge-launcher": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/chromium-edge-launcher/-/chromium-edge-launcher-0.2.0.tgz", + "integrity": "sha512-JfJjUnq25y9yg4FABRRVPmBGWPZZi+AQXT4mxupb67766/0UlhG8PAZCz6xzEMXTbW3CsSoE8PcCWA49n35mKg==", "license": "Apache-2.0", "dependencies": { - "@noble/ciphers": "^0.4.0", - "@noble/curves": "^1.0.0", - "@noble/hashes": "^1.3.0", - "@scure/base": "^1.1.3", - "canonicalize": "^2.0.0", - "did-resolver": "^4.1.0", - "multibase": "^4.0.6", - "multiformats": "^9.6.2", - "uint8arrays": "3.1.1" + "@types/node": "*", + "escape-string-regexp": "^4.0.0", + "is-wsl": "^2.2.0", + "lighthouse-logger": "^1.0.0", + "mkdirp": "^1.0.4", + "rimraf": "^3.0.2" } }, - "node_modules/@notabene/pii-sdk/node_modules/multiformats": { - "version": "9.9.0", - "resolved": "https://registry.npmjs.org/multiformats/-/multiformats-9.9.0.tgz", - "integrity": "sha512-HoMUjhH9T8DDBNT+6xzkrd9ga/XiBI4xLr58LJACwK6G3HTOPeMz4nB4KJs33L2BelrIJa7P0VuNaVF3hMYfjg==", - "license": "(Apache-2.0 AND MIT)" + "node_modules/chromium-edge-launcher/node_modules/glob": { + "version": "7.2.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", + "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", + "deprecated": "Glob versions prior to v9 are no longer supported", + "license": "ISC", + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.1.1", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } }, - "node_modules/@notabene/pii-sdk/node_modules/node-fetch": { - "version": "3.3.2", - "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-3.3.2.tgz", - "integrity": "sha512-dRB78srN/l6gqWulah9SrxeYnxeddIG30+GOqK/9OlLVyLg3HPnr6SqOWTWOXKRwC2eGYCkZ59NNuSgvSrpgOA==", + "node_modules/chromium-edge-launcher/node_modules/mkdirp": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", + "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", "license": "MIT", + "bin": { + "mkdirp": "bin/cmd.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/chromium-edge-launcher/node_modules/rimraf": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", + "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", + "deprecated": "Rimraf versions prior to v4 are no longer supported", + "license": "ISC", "dependencies": { - "data-uri-to-buffer": "^4.0.0", - "fetch-blob": "^3.1.4", - "formdata-polyfill": "^4.0.10" + "glob": "^7.1.3" }, - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + "bin": { + "rimraf": "bin.js" }, "funding": { - "type": "opencollective", - "url": "https://opencollective.com/node-fetch" + "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/@nuxtjs/opencollective": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/@nuxtjs/opencollective/-/opencollective-0.3.2.tgz", - "integrity": "sha512-um0xL3fO7Mf4fDxcqx9KryrB7zgRM5JSlvGN5AGkP6JLM5XEKyjeAiPbNxdXVXQ16isuAhYpvP88NgL2BGd6aA==", + "node_modules/ci-info": { + "version": "3.9.0", + "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.9.0.tgz", + "integrity": "sha512-NIxF55hv4nSqQswkAeiOi1r83xy8JldOFDTWiug55KBu9Jnblncd2U6ViHmYgHf01TPZS77NJBhBMKdWj9HQMQ==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/sibiraj-s" + } + ], + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/cipher-base": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/cipher-base/-/cipher-base-1.0.7.tgz", + "integrity": "sha512-Mz9QMT5fJe7bKI7MH31UilT5cEK5EHHRCccw/YRFsRY47AuNgaV6HY3rscp0/I4Q+tTW/5zoqpSeRRI54TkDWA==", "license": "MIT", "dependencies": { - "chalk": "^4.1.0", - "consola": "^2.15.0", - "node-fetch": "^2.6.1" - }, - "bin": { - "opencollective": "bin/opencollective.js" + "inherits": "^2.0.4", + "safe-buffer": "^5.2.1", + "to-buffer": "^1.2.2" }, "engines": { - "node": ">=8.0.0", - "npm": ">=5.0.0" + "node": ">= 0.10" } }, - "node_modules/@onchain-id/solidity": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/@onchain-id/solidity/-/solidity-2.2.1.tgz", - "integrity": "sha512-B54InT8yi89qlh9UVCARcfdQLVDP7Lef87B/Ww2Wn19oyEbPmlWho2EK1sgnrt/8Q0fGX/7y5rDnx3HPy28NTA==", - "dev": true, - "license": "ISC" - }, - "node_modules/@openzeppelin/contracts": { - "version": "4.9.6", - "resolved": "https://registry.npmjs.org/@openzeppelin/contracts/-/contracts-4.9.6.tgz", - "integrity": "sha512-xSmezSupL+y9VkHZJGDoCBpmnB2ogM13ccaYDWqJTfS3dbuHkgjuwDFUmaFauBCboQMGB/S5UqUl2y54X99BmA==", + "node_modules/cjs-module-lexer": { + "version": "1.4.3", + "resolved": "https://registry.npmjs.org/cjs-module-lexer/-/cjs-module-lexer-1.4.3.tgz", + "integrity": "sha512-9z8TZaGM1pfswYeXrUpzPrkx8UnWYdhJclsiYMm6x/w5+nN+8Tf/LnAgfLGQCm59qAOxU8WwHEq2vNwF6i4j+Q==", "dev": true, "license": "MIT" }, - "node_modules/@openzeppelin/contracts-upgradeable": { - "version": "4.9.6", - "resolved": "https://registry.npmjs.org/@openzeppelin/contracts-upgradeable/-/contracts-upgradeable-4.9.6.tgz", - "integrity": "sha512-m4iHazOsOCv1DgM7eD7GupTJ+NFVujRZt1wzddDPSVGpWdKq1SKkla5htKG7+IS4d2XOCtzkUNwRZ7Vq5aEUMA==", - "dev": true, + "node_modules/class-transformer": { + "version": "0.5.1", + "resolved": "https://registry.npmjs.org/class-transformer/-/class-transformer-0.5.1.tgz", + "integrity": "sha512-SQa1Ws6hUbfC98vKGxZH3KFY0Y1lm5Zm0SY8XX9zbK7FJCyVEac3ATW0RIpwzW+oOfmHE5PMPufDG9hCfoEOMw==", "license": "MIT" }, - "node_modules/@openzeppelin/defender-base-client": { - "version": "1.54.6", - "resolved": "https://registry.npmjs.org/@openzeppelin/defender-base-client/-/defender-base-client-1.54.6.tgz", - "integrity": "sha512-PTef+rMxkM5VQ7sLwLKSjp2DBakYQd661ZJiSRywx+q/nIpm3B/HYGcz5wPZCA5O/QcEP6TatXXDoeMwimbcnw==", - "deprecated": "This package has been deprecated and will no longer be maintained, please use @openzeppelin/defender-sdk package instead.", - "dev": true, + "node_modules/class-validator": { + "version": "0.14.2", + "resolved": "https://registry.npmjs.org/class-validator/-/class-validator-0.14.2.tgz", + "integrity": "sha512-3kMVRF2io8N8pY1IFIXlho9r8IPUUIfHe2hYVtiebvAzU2XeQFXTv+XI4WX+TnXmtwXMDcjngcpkiPM0O9PvLw==", "license": "MIT", "dependencies": { - "amazon-cognito-identity-js": "^6.0.1", - "async-retry": "^1.3.3", - "axios": "^1.4.0", - "lodash": "^4.17.19", - "node-fetch": "^2.6.0" + "@types/validator": "^13.11.8", + "libphonenumber-js": "^1.11.1", + "validator": "^13.9.0" } }, - "node_modules/@openzeppelin/hardhat-upgrades": { - "version": "1.28.0", - "resolved": "https://registry.npmjs.org/@openzeppelin/hardhat-upgrades/-/hardhat-upgrades-1.28.0.tgz", - "integrity": "sha512-7sb/Jf+X+uIufOBnmHR0FJVWuxEs2lpxjJnLNN6eCJCP8nD0v+Ot5lTOW2Qb/GFnh+fLvJtEkhkowz4ZQ57+zQ==", - "dev": true, + "node_modules/clean-css": { + "version": "5.3.3", + "resolved": "https://registry.npmjs.org/clean-css/-/clean-css-5.3.3.tgz", + "integrity": "sha512-D5J+kHaVb/wKSFcyyV75uCn8fiY4sV38XJoe4CUyGQ+mOU/fMVYUdH1hJC+CJQ5uY3EnW27SbJYS4X8BiLrAFg==", "license": "MIT", "dependencies": { - "@openzeppelin/defender-base-client": "^1.46.0", - "@openzeppelin/platform-deploy-client": "^0.8.0", - "@openzeppelin/upgrades-core": "^1.27.0", - "chalk": "^4.1.0", - "debug": "^4.1.1", - "proper-lockfile": "^4.1.1" + "source-map": "~0.6.0" }, - "bin": { - "migrate-oz-cli-project": "dist/scripts/migrate-oz-cli-project.js" - }, - "peerDependencies": { - "@nomiclabs/hardhat-ethers": "^2.0.0", - "@nomiclabs/hardhat-etherscan": "^3.1.0", - "ethers": "^5.0.5", - "hardhat": "^2.0.2" - }, - "peerDependenciesMeta": { - "@nomiclabs/harhdat-etherscan": { - "optional": true - } + "engines": { + "node": ">= 10.0" } }, - "node_modules/@openzeppelin/platform-deploy-client": { - "version": "0.8.0", - "resolved": "https://registry.npmjs.org/@openzeppelin/platform-deploy-client/-/platform-deploy-client-0.8.0.tgz", - "integrity": "sha512-POx3AsnKwKSV/ZLOU/gheksj0Lq7Is1q2F3pKmcFjGZiibf+4kjGxr4eSMrT+2qgKYZQH1ZLQZ+SkbguD8fTvA==", - "deprecated": "@openzeppelin/platform-deploy-client is deprecated. Please use @openzeppelin/defender-sdk-deploy-client", - "dev": true, - "license": "MIT", - "dependencies": { - "@ethersproject/abi": "^5.6.3", - "@openzeppelin/defender-base-client": "^1.46.0", - "axios": "^0.21.2", - "lodash": "^4.17.19", - "node-fetch": "^2.6.0" + "node_modules/clean-css/node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.10.0" } }, - "node_modules/@openzeppelin/platform-deploy-client/node_modules/axios": { - "version": "0.21.4", - "resolved": "https://registry.npmjs.org/axios/-/axios-0.21.4.tgz", - "integrity": "sha512-ut5vewkiu8jjGBdqpM44XxjuCjq9LAKeHVmoVfHVzy8eHgxxq8SbAVQNovDA8mVi05kP0Ea/n/UzcSHcTJQfNg==", - "dev": true, + "node_modules/clean-stack": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-2.2.0.tgz", + "integrity": "sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==", "license": "MIT", - "dependencies": { - "follow-redirects": "^1.14.0" + "engines": { + "node": ">=6" } }, - "node_modules/@openzeppelin/upgrades-core": { - "version": "1.44.1", - "resolved": "https://registry.npmjs.org/@openzeppelin/upgrades-core/-/upgrades-core-1.44.1.tgz", - "integrity": "sha512-yqvDj7eC7m5kCDgqCxVFgk9sVo9SXP/fQFaExPousNfAJJbX+20l4fKZp17aXbNTpo1g+2205s6cR9VhFFOCaQ==", + "node_modules/clear-any-console": { + "version": "1.16.3", + "resolved": "https://registry.npmjs.org/clear-any-console/-/clear-any-console-1.16.3.tgz", + "integrity": "sha512-x174l55a86DGVU0KvnLITsXhRgqwd/xNDTy16OyKKOiJU+1pXF9DrV9YvlepfMc/JuJ3a7CMNLEF4O7qwk0mEw==", "dev": true, "license": "MIT", "dependencies": { - "@nomicfoundation/slang": "^0.18.3", - "bignumber.js": "^9.1.2", - "cbor": "^10.0.0", - "chalk": "^4.1.0", - "compare-versions": "^6.0.0", - "debug": "^4.1.1", - "ethereumjs-util": "^7.0.3", - "minimatch": "^9.0.5", - "minimist": "^1.2.7", - "proper-lockfile": "^4.1.1", - "solidity-ast": "^0.4.60" - }, - "bin": { - "openzeppelin-upgrades-core": "dist/cli/cli.js" + "langbase": "*" } }, - "node_modules/@openzeppelin/upgrades-core/node_modules/brace-expansion": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.2.tgz", - "integrity": "sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==", + "node_modules/cli-boxes": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/cli-boxes/-/cli-boxes-2.2.1.tgz", + "integrity": "sha512-y4coMcylgSCdVinjiDBuR8PCC2bLjyGTwEmPb9NHR/QaNU6EUOXcTY/s6VjGMD6ENSEaeQYHCY0GNGS5jfMwPw==", "dev": true, "license": "MIT", - "dependencies": { - "balanced-match": "^1.0.0" + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/@openzeppelin/upgrades-core/node_modules/cbor": { - "version": "10.0.11", - "resolved": "https://registry.npmjs.org/cbor/-/cbor-10.0.11.tgz", - "integrity": "sha512-vIwORDd/WyB8Nc23o2zNN5RrtFGlR6Fca61TtjkUXueI3Jf2DOZDl1zsshvBntZ3wZHBM9ztjnkXSmzQDaq3WA==", - "dev": true, + "node_modules/cli-cursor": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-3.1.0.tgz", + "integrity": "sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==", "license": "MIT", "dependencies": { - "nofilter": "^3.0.2" + "restore-cursor": "^3.1.0" }, "engines": { - "node": ">=20" + "node": ">=8" } }, - "node_modules/@openzeppelin/upgrades-core/node_modules/minimatch": { - "version": "9.0.5", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", - "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", - "dev": true, - "license": "ISC", - "dependencies": { - "brace-expansion": "^2.0.1" - }, + "node_modules/cli-spinners": { + "version": "2.9.2", + "resolved": "https://registry.npmjs.org/cli-spinners/-/cli-spinners-2.9.2.tgz", + "integrity": "sha512-ywqV+5MmyL4E7ybXgKys4DugZbX0FC6LnwrhjuykIjnK9k8OQacQ7axGKnjDXWNhns0xot3bZI5h55H8yo9cJg==", + "license": "MIT", "engines": { - "node": ">=16 || 14 >=14.17" + "node": ">=6" }, "funding": { - "url": "https://github.com/sponsors/isaacs" + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/@paralleldrive/cuid2": { - "version": "2.2.2", - "resolved": "https://registry.npmjs.org/@paralleldrive/cuid2/-/cuid2-2.2.2.tgz", - "integrity": "sha512-ZOBkgDwEdoYVlSeRbYYXs0S9MejQofiVYoTbKzy/6GQa39/q5tQU2IX46+shYnUkpEl3wc+J6wRlar7r2EK2xA==", - "dev": true, + "node_modules/cli-table3": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/cli-table3/-/cli-table3-0.6.3.tgz", + "integrity": "sha512-w5Jac5SykAeZJKntOxJCrm63Eg5/4dhMWIcuTbo9rpE+brgaSZo0RuNJZeOyMgsUdhDeojvgyQLmjI+K50ZGyg==", "license": "MIT", "dependencies": { - "@noble/hashes": "^1.1.5" - } - }, - "node_modules/@phosphor-icons/react": { - "version": "2.0.9", - "resolved": "https://registry.npmjs.org/@phosphor-icons/react/-/react-2.0.9.tgz", - "integrity": "sha512-/dtQ0M9MXAr35wy8zPlwF684EvYRvGWZPAv+Bd0BR4vzIhjzfLBdHSovFxSP1rj3UOHvVR08qgRL04Kv90oqHA==", - "license": "MIT", + "string-width": "^4.2.0" + }, "engines": { - "node": ">=10" + "node": "10.* || >= 12.*" }, - "peerDependencies": { - "react": ">= 16.8", - "react-dom": ">= 16.8" + "optionalDependencies": { + "@colors/colors": "1.5.0" } }, - "node_modules/@pkgjs/parseargs": { - "version": "0.11.0", - "resolved": "https://registry.npmjs.org/@pkgjs/parseargs/-/parseargs-0.11.0.tgz", - "integrity": "sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==", + "node_modules/cli-truncate": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/cli-truncate/-/cli-truncate-4.0.0.tgz", + "integrity": "sha512-nPdaFdQ0h/GEigbPClz11D0v/ZJEwxmeVZGeMo3Z5StPtUTkA9o1lD6QwoirYiSDzbcwn2XcjwmCp68W1IS4TA==", + "dev": true, "license": "MIT", - "optional": true, + "dependencies": { + "slice-ansi": "^5.0.0", + "string-width": "^7.0.0" + }, "engines": { - "node": ">=14" + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/@pkgr/core": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/@pkgr/core/-/core-0.1.2.tgz", - "integrity": "sha512-fdDH1LSGfZdTH2sxdpVMw31BanV28K/Gry0cVFxaNP77neJSkd82mM8ErPNYs9e+0O7SdHBLTDzDgwUuy18RnQ==", + "node_modules/cli-truncate/node_modules/ansi-regex": { + "version": "6.2.2", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.2.2.tgz", + "integrity": "sha512-Bq3SmSpyFHaWjPk8If9yc6svM8c56dB5BAtW4Qbw5jHTwwXXcTLoRMkpDJp6VL0XzlWaCHTXrkFURMYmD0sLqg==", "dev": true, "license": "MIT", "engines": { - "node": "^12.20.0 || ^14.18.0 || >=16.0.0" + "node": ">=12" }, "funding": { - "url": "https://opencollective.com/unts" + "url": "https://github.com/chalk/ansi-regex?sponsor=1" } }, - "node_modules/@pnpm/config.env-replace": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@pnpm/config.env-replace/-/config.env-replace-1.1.0.tgz", - "integrity": "sha512-htyl8TWnKL7K/ESFa1oW2UB5lVDxuF5DpM7tBi6Hu2LNL3mWkIzNLG6N4zoCUP1lCKNxWy/3iu8mS8MvToGd6w==", + "node_modules/cli-truncate/node_modules/emoji-regex": { + "version": "10.5.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-10.5.0.tgz", + "integrity": "sha512-lb49vf1Xzfx080OKA0o6l8DQQpV+6Vg95zyCJX9VB/BqKYlhG7N4wgROUUHRA+ZPUefLnteQOad7z1kT2bV7bg==", "dev": true, - "license": "MIT", - "engines": { - "node": ">=12.22.0" - } + "license": "MIT" }, - "node_modules/@pnpm/network.ca-file": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/@pnpm/network.ca-file/-/network.ca-file-1.0.2.tgz", - "integrity": "sha512-YcPQ8a0jwYU9bTdJDpXjMi7Brhkr1mXsXrUJvjqM2mQDgkRiz8jFaQGOdaLxgjtUfQgZhKy/O3cG/YwmgKaxLA==", + "node_modules/cli-truncate/node_modules/string-width": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-7.2.0.tgz", + "integrity": "sha512-tsaTIkKW9b4N+AEj+SVA+WhJzV7/zMhcSu78mLKWSk7cXMOSHsBKFWUs0fWwq8QyK3MgJBQRX6Gbi4kYbdvGkQ==", "dev": true, "license": "MIT", "dependencies": { - "graceful-fs": "4.2.10" + "emoji-regex": "^10.3.0", + "get-east-asian-width": "^1.0.0", + "strip-ansi": "^7.1.0" }, "engines": { - "node": ">=12.22.0" + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/@pnpm/network.ca-file/node_modules/graceful-fs": { - "version": "4.2.10", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.10.tgz", - "integrity": "sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA==", - "dev": true, - "license": "ISC" - }, - "node_modules/@pnpm/npm-conf": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/@pnpm/npm-conf/-/npm-conf-2.3.1.tgz", - "integrity": "sha512-c83qWb22rNRuB0UaVCI0uRPNRr8Z0FWnEIvT47jiHAmOIUHbBOg5XvV7pM5x+rKn9HRpjxquDbXYSXr3fAKFcw==", + "node_modules/cli-truncate/node_modules/strip-ansi": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.2.tgz", + "integrity": "sha512-gmBGslpoQJtgnMAvOVqGZpEz9dyoKTCzy2nfz/n8aIFhN/jCE/rCmcxabB6jOOHV+0WNnylOxaxBQPSvcWklhA==", "dev": true, "license": "MIT", "dependencies": { - "@pnpm/config.env-replace": "^1.1.0", - "@pnpm/network.ca-file": "^1.0.1", - "config-chain": "^1.1.11" + "ansi-regex": "^6.0.1" }, "engines": { "node": ">=12" - } - }, - "node_modules/@popperjs/core": { - "version": "2.11.8", - "resolved": "https://registry.npmjs.org/@popperjs/core/-/core-2.11.8.tgz", - "integrity": "sha512-P1st0aksCrn9sGZhp8GMYwBnQsbvAWsZAX44oXNNvLHGqAOcoVxmjZiohstwQ7SqKnbR47akdNi+uleWD8+g6A==", - "license": "MIT", + }, "funding": { - "type": "opencollective", - "url": "https://opencollective.com/popperjs" + "url": "https://github.com/chalk/strip-ansi?sponsor=1" } }, - "node_modules/@prettier/sync": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/@prettier/sync/-/sync-0.3.0.tgz", - "integrity": "sha512-3dcmCyAxIcxy036h1I7MQU/uEEBq8oLwf1CE3xeze+MPlgkdlb/+w6rGR/1dhp6Hqi17fRS6nvwnOzkESxEkOw==", + "node_modules/cli-welcome": { + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/cli-welcome/-/cli-welcome-2.2.3.tgz", + "integrity": "sha512-hxaOpahLk5PAYJj4tOcv8vaNMaBQHeMzeLQTAHq2EoGGTKVYV/MPCSlg5EEsKZ7y8WDGS2ScQtnITw02ZNukMQ==", "dev": true, "license": "MIT", - "funding": { - "url": "https://github.com/prettier/prettier-synchronized?sponsor=1" - }, - "peerDependencies": { - "prettier": "^3.0.0" + "dependencies": { + "chalk": "^2.4.2", + "clear-any-console": "^1.16.0" } }, - "node_modules/@primitivefi/hardhat-dodoc": { - "version": "0.2.3", - "resolved": "https://registry.npmjs.org/@primitivefi/hardhat-dodoc/-/hardhat-dodoc-0.2.3.tgz", - "integrity": "sha512-ver9uHa79LTDTeebOKZ/eOVRL/FP1k0s0x/5Bo/8ZaDdLWFVClKqZyZYVjjW4CJqTPCt8uU9b9p71P2vzH4O9A==", + "node_modules/cli-welcome/node_modules/ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", "dev": true, "license": "MIT", "dependencies": { - "squirrelly": "^8.0.8" + "color-convert": "^1.9.0" }, - "peerDependencies": { - "hardhat": "^2.6.4", - "squirrelly": "^8.0.8" - } - }, - "node_modules/@protobufjs/aspromise": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@protobufjs/aspromise/-/aspromise-1.1.2.tgz", - "integrity": "sha512-j+gKExEuLmKwvz3OgROXtrJ2UG2x8Ch2YZUxahh+s1F2HZ+wAceUNLkvy6zKCPVRkU++ZWQrdxsUeQXmcg4uoQ==", - "license": "BSD-3-Clause" - }, - "node_modules/@protobufjs/base64": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@protobufjs/base64/-/base64-1.1.2.tgz", - "integrity": "sha512-AZkcAA5vnN/v4PDqKyMR5lx7hZttPDgClv83E//FMNhR2TMcLUhfRUBHCmSl0oi9zMgDDqRUJkSxO3wm85+XLg==", - "license": "BSD-3-Clause" - }, - "node_modules/@protobufjs/codegen": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/@protobufjs/codegen/-/codegen-2.0.4.tgz", - "integrity": "sha512-YyFaikqM5sH0ziFZCN3xDC7zeGaB/d0IUb9CATugHWbd1FRFwWwt4ld4OYMPWu5a3Xe01mGAULCdqhMlPl29Jg==", - "license": "BSD-3-Clause" - }, - "node_modules/@protobufjs/eventemitter": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@protobufjs/eventemitter/-/eventemitter-1.1.0.tgz", - "integrity": "sha512-j9ednRT81vYJ9OfVuXG6ERSTdEL1xVsNgqpkxMsbIabzSo3goCjDIveeGv5d03om39ML71RdmrGNjG5SReBP/Q==", - "license": "BSD-3-Clause" - }, - "node_modules/@protobufjs/fetch": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@protobufjs/fetch/-/fetch-1.1.0.tgz", - "integrity": "sha512-lljVXpqXebpsijW71PZaCYeIcE5on1w5DlQy5WH6GLbFryLUrBD4932W/E2BSpfRJWseIL4v/KPgBFxDOIdKpQ==", - "license": "BSD-3-Clause", - "dependencies": { - "@protobufjs/aspromise": "^1.1.1", - "@protobufjs/inquire": "^1.1.0" - } - }, - "node_modules/@protobufjs/float": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/@protobufjs/float/-/float-1.0.2.tgz", - "integrity": "sha512-Ddb+kVXlXst9d+R9PfTIxh1EdNkgoRe5tOX6t01f1lYWOvJnSPDBlG241QLzcyPdoNTsblLUdujGSE4RzrTZGQ==", - "license": "BSD-3-Clause" - }, - "node_modules/@protobufjs/inquire": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@protobufjs/inquire/-/inquire-1.1.0.tgz", - "integrity": "sha512-kdSefcPdruJiFMVSbn801t4vFK7KB/5gd2fYvrxhuJYg8ILrmn9SKSX2tZdV6V+ksulWqS7aXjBcRXl3wHoD9Q==", - "license": "BSD-3-Clause" - }, - "node_modules/@protobufjs/path": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@protobufjs/path/-/path-1.1.2.tgz", - "integrity": "sha512-6JOcJ5Tm08dOHAbdR3GrvP+yUUfkjG5ePsHYczMFLq3ZmMkAD98cDgcT2iA1lJ9NVwFd4tH/iSSoe44YWkltEA==", - "license": "BSD-3-Clause" - }, - "node_modules/@protobufjs/pool": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@protobufjs/pool/-/pool-1.1.0.tgz", - "integrity": "sha512-0kELaGSIDBKvcgS4zkjz1PeddatrjYcmMWOlAuAPwAeccUrPHdUqo/J6LiymHHEiJT5NrF1UVwxY14f+fy4WQw==", - "license": "BSD-3-Clause" - }, - "node_modules/@protobufjs/utf8": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@protobufjs/utf8/-/utf8-1.1.0.tgz", - "integrity": "sha512-Vvn3zZrhQZkkBE8LSuW3em98c0FwgO4nxzv6OdSxPKJIEKY2bGbHn+mhGIPerzI4twdxaP8/0+06HBpwf345Lw==", - "license": "BSD-3-Clause" - }, - "node_modules/@react-native/assets-registry": { - "version": "0.81.4", - "resolved": "https://registry.npmjs.org/@react-native/assets-registry/-/assets-registry-0.81.4.tgz", - "integrity": "sha512-AMcDadefBIjD10BRqkWw+W/VdvXEomR6aEZ0fhQRAv7igrBzb4PTn4vHKYg+sUK0e3wa74kcMy2DLc/HtnGcMA==", - "license": "MIT", - "peer": true, "engines": { - "node": ">= 20.19.4" + "node": ">=4" } }, - "node_modules/@react-native/codegen": { - "version": "0.81.4", - "resolved": "https://registry.npmjs.org/@react-native/codegen/-/codegen-0.81.4.tgz", - "integrity": "sha512-LWTGUTzFu+qOQnvkzBP52B90Ym3stZT8IFCzzUrppz8Iwglg83FCtDZAR4yLHI29VY/x/+pkcWAMCl3739XHdw==", + "node_modules/cli-welcome/node_modules/chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, "license": "MIT", - "peer": true, - "dependencies": { - "@babel/core": "^7.25.2", - "@babel/parser": "^7.25.3", - "glob": "^7.1.1", - "hermes-parser": "0.29.1", - "invariant": "^2.2.4", - "nullthrows": "^1.1.1", - "yargs": "^17.6.2" - }, - "engines": { - "node": ">= 20.19.4" - }, - "peerDependencies": { - "@babel/core": "*" - } - }, - "node_modules/@react-native/codegen/node_modules/glob": { - "version": "7.2.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", - "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", - "deprecated": "Glob versions prior to v9 are no longer supported", - "license": "ISC", - "peer": true, "dependencies": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.1.1", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" }, "engines": { - "node": "*" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" + "node": ">=4" } }, - "node_modules/@react-native/community-cli-plugin": { - "version": "0.81.4", - "resolved": "https://registry.npmjs.org/@react-native/community-cli-plugin/-/community-cli-plugin-0.81.4.tgz", - "integrity": "sha512-8mpnvfcLcnVh+t1ok6V9eozWo8Ut+TZhz8ylJ6gF9d6q9EGDQX6s8jenan5Yv/pzN4vQEKI4ib2pTf/FELw+SA==", - "license": "MIT", - "peer": true, - "dependencies": { - "@react-native/dev-middleware": "0.81.4", - "debug": "^4.4.0", - "invariant": "^2.2.4", - "metro": "^0.83.1", - "metro-config": "^0.83.1", - "metro-core": "^0.83.1", - "semver": "^7.1.3" - }, - "engines": { - "node": ">= 20.19.4" - }, - "peerDependencies": { - "@react-native-community/cli": "*", - "@react-native/metro-config": "*" - }, - "peerDependenciesMeta": { - "@react-native-community/cli": { - "optional": true - }, - "@react-native/metro-config": { - "optional": true - } + "node_modules/cli-welcome/node_modules/color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "dev": true, + "license": "MIT", + "dependencies": { + "color-name": "1.1.3" } }, - "node_modules/@react-native/community-cli-plugin/node_modules/semver": { - "version": "7.7.2", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.2.tgz", - "integrity": "sha512-RF0Fw+rO5AMf9MAyaRXI4AV0Ulj5lMHqVxxdSgiVbixSCXoEmmX/jk0CuJw4+3SqroYO9VoUh+HcuJivvtJemA==", - "license": "ISC", - "peer": true, - "bin": { - "semver": "bin/semver.js" - }, + "node_modules/cli-welcome/node_modules/color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", + "dev": true, + "license": "MIT" + }, + "node_modules/cli-welcome/node_modules/escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", + "dev": true, + "license": "MIT", "engines": { - "node": ">=10" + "node": ">=0.8.0" } }, - "node_modules/@react-native/debugger-frontend": { - "version": "0.81.4", - "resolved": "https://registry.npmjs.org/@react-native/debugger-frontend/-/debugger-frontend-0.81.4.tgz", - "integrity": "sha512-SU05w1wD0nKdQFcuNC9D6De0ITnINCi8MEnx9RsTD2e4wN83ukoC7FpXaPCYyP6+VjFt5tUKDPgP1O7iaNXCqg==", - "license": "BSD-3-Clause", - "peer": true, + "node_modules/cli-welcome/node_modules/has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", + "dev": true, + "license": "MIT", "engines": { - "node": ">= 20.19.4" + "node": ">=4" } }, - "node_modules/@react-native/debugger-shell": { - "version": "0.83.1", - "resolved": "https://registry.npmjs.org/@react-native/debugger-shell/-/debugger-shell-0.83.1.tgz", - "integrity": "sha512-d+0w446Hxth5OP/cBHSSxOEpbj13p2zToUy6e5e3tTERNJ8ueGlW7iGwGTrSymNDgXXFjErX+dY4P4/3WokPIQ==", + "node_modules/cli-welcome/node_modules/supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", "dev": true, "license": "MIT", - "peer": true, "dependencies": { - "cross-spawn": "^7.0.6", - "fb-dotslash": "0.5.8" + "has-flag": "^3.0.0" }, "engines": { - "node": ">= 20.19.4" + "node": ">=4" } }, - "node_modules/@react-native/dev-middleware": { - "version": "0.81.4", - "resolved": "https://registry.npmjs.org/@react-native/dev-middleware/-/dev-middleware-0.81.4.tgz", - "integrity": "sha512-hu1Wu5R28FT7nHXs2wWXvQ++7W7zq5GPY83llajgPlYKznyPLAY/7bArc5rAzNB7b0kwnlaoPQKlvD/VP9LZug==", - "license": "MIT", - "peer": true, + "node_modules/cli-width": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/cli-width/-/cli-width-3.0.0.tgz", + "integrity": "sha512-FxqpkPPwu1HjuN93Omfm4h8uIanXofW0RxVEW3k5RKx+mJJYSthzNhp32Kzxxy3YAEZ/Dc/EWN1vZRY0+kOhbw==", + "license": "ISC", + "engines": { + "node": ">= 10" + } + }, + "node_modules/cliui": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz", + "integrity": "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==", + "license": "ISC", "dependencies": { - "@isaacs/ttlcache": "^1.4.1", - "@react-native/debugger-frontend": "0.81.4", - "chrome-launcher": "^0.15.2", - "chromium-edge-launcher": "^0.2.0", - "connect": "^3.6.5", - "debug": "^4.4.0", - "invariant": "^2.2.4", - "nullthrows": "^1.1.1", - "open": "^7.0.3", - "serve-static": "^1.16.2", - "ws": "^6.2.3" + "string-width": "^4.2.0", + "strip-ansi": "^6.0.1", + "wrap-ansi": "^7.0.0" }, "engines": { - "node": ">= 20.19.4" + "node": ">=12" } }, - "node_modules/@react-native/dev-middleware/node_modules/fresh": { - "version": "0.5.2", - "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", - "integrity": "sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==", + "node_modules/clone": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/clone/-/clone-1.0.4.tgz", + "integrity": "sha512-JQHZ2QMW6l3aH/j6xCqQThY/9OH4D/9ls34cgkUBiEeocRTU04tHfKPBsUK1PqZCUQM7GiA0IIXJSuXHI64Kbg==", "license": "MIT", - "peer": true, "engines": { - "node": ">= 0.6" + "node": ">=0.8" } }, - "node_modules/@react-native/dev-middleware/node_modules/mime": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", - "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==", + "node_modules/clone-deep": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/clone-deep/-/clone-deep-4.0.1.tgz", + "integrity": "sha512-neHB9xuzh/wk0dIHweyAXv2aPGZIVk3pLMe+/RNzINf17fe0OG96QroktYAUm7SM1PBnzTabaLboqqxDyMU+SQ==", "license": "MIT", - "peer": true, - "bin": { - "mime": "cli.js" + "dependencies": { + "is-plain-object": "^2.0.4", + "kind-of": "^6.0.2", + "shallow-clone": "^3.0.0" }, "engines": { - "node": ">=4" + "node": ">=6" } }, - "node_modules/@react-native/dev-middleware/node_modules/send": { - "version": "0.19.0", - "resolved": "https://registry.npmjs.org/send/-/send-0.19.0.tgz", - "integrity": "sha512-dW41u5VfLXu8SJh5bwRmyYUbAoSB3c9uQh6L8h/KtsFREPWpbX1lrljJo186Jc4nmci/sGUZ9a0a0J2zgfq2hw==", + "node_modules/clsx": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/clsx/-/clsx-2.1.1.tgz", + "integrity": "sha512-eYm0QWBtUrBWZWG0d386OGAw16Z995PiOVo2B7bjWSbHedGl5e0ZWaq65kOGgUSNesEIDkB9ISbTg/JK9dhCZA==", "license": "MIT", - "peer": true, - "dependencies": { - "debug": "2.6.9", - "depd": "2.0.0", - "destroy": "1.2.0", - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "etag": "~1.8.1", - "fresh": "0.5.2", - "http-errors": "2.0.0", - "mime": "1.6.0", - "ms": "2.1.3", - "on-finished": "2.4.1", - "range-parser": "~1.2.1", - "statuses": "2.0.1" - }, "engines": { - "node": ">= 0.8.0" + "node": ">=6" } }, - "node_modules/@react-native/dev-middleware/node_modules/send/node_modules/debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "node_modules/co": { + "version": "4.6.0", + "resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz", + "integrity": "sha512-QVb0dM5HvG+uaxitm8wONl7jltx8dqhfU33DcqtOZcLSVIKSDDLDi7+0LbAKiyI8hD9u42m2YxXSkMGWThaecQ==", + "dev": true, "license": "MIT", - "peer": true, - "dependencies": { - "ms": "2.0.0" + "engines": { + "iojs": ">= 1.0.0", + "node": ">= 0.12.0" } }, - "node_modules/@react-native/dev-middleware/node_modules/send/node_modules/debug/node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "node_modules/collapse-white-space": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/collapse-white-space/-/collapse-white-space-2.1.0.tgz", + "integrity": "sha512-loKTxY1zCOuG4j9f6EPnuyyYkf58RnhhWTvRoZEokgB+WbdXehfjFviyOVYkqzEWz1Q5kRiZdBYS5SwxbQYwzw==", "license": "MIT", - "peer": true + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } }, - "node_modules/@react-native/dev-middleware/node_modules/send/node_modules/encodeurl": { + "node_modules/collect-v8-coverage": { "version": "1.0.2", - "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", - "integrity": "sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==", + "resolved": "https://registry.npmjs.org/collect-v8-coverage/-/collect-v8-coverage-1.0.2.tgz", + "integrity": "sha512-lHl4d5/ONEbLlJvaJNtsF/Lz+WvB07u2ycqTYbdrq7UypDXailES4valYb2eWiJFxZlVmpGekfqoxQhzyFdT4Q==", + "dev": true, + "license": "MIT" + }, + "node_modules/color": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/color/-/color-5.0.2.tgz", + "integrity": "sha512-e2hz5BzbUPcYlIRHo8ieAhYgoajrJr+hWoceg6E345TPsATMUKqDgzt8fSXZJJbxfpiPzkWyphz8yn8At7q3fA==", "license": "MIT", - "peer": true, + "dependencies": { + "color-convert": "^3.0.1", + "color-string": "^2.0.0" + }, "engines": { - "node": ">= 0.8" + "node": ">=18" } }, - "node_modules/@react-native/dev-middleware/node_modules/serve-static": { - "version": "1.16.2", - "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.16.2.tgz", - "integrity": "sha512-VqpjJZKadQB/PEbEwvFdO43Ax5dFBZ2UECszz8bQ7pi7wt//PWe1P6MN7eCnjsatYtBT6EuiClbjSWP2WrIoTw==", + "node_modules/color-convert": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-3.1.2.tgz", + "integrity": "sha512-UNqkvCDXstVck3kdowtOTWROIJQwafjOfXSmddoDrXo4cewMKmusCeF22Q24zvjR8nwWib/3S/dfyzPItPEiJg==", "license": "MIT", - "peer": true, "dependencies": { - "encodeurl": "~2.0.0", - "escape-html": "~1.0.3", - "parseurl": "~1.3.3", - "send": "0.19.0" + "color-name": "^2.0.0" }, "engines": { - "node": ">= 0.8.0" + "node": ">=14.6" } }, - "node_modules/@react-native/dev-middleware/node_modules/statuses": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", - "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==", + "node_modules/color-name": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-2.0.2.tgz", + "integrity": "sha512-9vEt7gE16EW7Eu7pvZnR0abW9z6ufzhXxGXZEVU9IqPdlsUiMwJeJfRtq0zePUmnbHGT9zajca7mX8zgoayo4A==", "license": "MIT", - "peer": true, "engines": { - "node": ">= 0.8" + "node": ">=12.20" } }, - "node_modules/@react-native/dev-middleware/node_modules/ws": { - "version": "6.2.3", - "resolved": "https://registry.npmjs.org/ws/-/ws-6.2.3.tgz", - "integrity": "sha512-jmTjYU0j60B+vHey6TfR3Z7RD61z/hmxBS3VMSGIrroOWXQEneK1zNuotOUrGyBHQj0yrpsLHPWtigEFd13ndA==", + "node_modules/color-string": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/color-string/-/color-string-2.1.2.tgz", + "integrity": "sha512-RxmjYxbWemV9gKu4zPgiZagUxbH3RQpEIO77XoSSX0ivgABDZ+h8Zuash/EMFLTI4N9QgFPOJ6JQpPZKFxa+dA==", "license": "MIT", - "peer": true, "dependencies": { - "async-limiter": "~1.0.0" + "color-name": "^2.0.0" + }, + "engines": { + "node": ">=18" } }, - "node_modules/@react-native/gradle-plugin": { - "version": "0.81.4", - "resolved": "https://registry.npmjs.org/@react-native/gradle-plugin/-/gradle-plugin-0.81.4.tgz", - "integrity": "sha512-T7fPcQvDDCSusZFVSg6H1oVDKb/NnVYLnsqkcHsAF2C2KGXyo3J7slH/tJAwNfj/7EOA2OgcWxfC1frgn9TQvw==", + "node_modules/color-support": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-support/-/color-support-1.1.3.tgz", + "integrity": "sha512-qiBjkpbMLO/HL68y+lh4q0/O1MZFj2RX6X/KmMa3+gJD3z+WwI1ZzDHysvqHGS3mP6mznPckpXmw1nI9cJjyRg==", + "license": "ISC", + "optional": true, + "bin": { + "color-support": "bin.js" + } + }, + "node_modules/color2k": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/color2k/-/color2k-2.0.3.tgz", + "integrity": "sha512-zW190nQTIoXcGCaU08DvVNFTmQhUpnJfVuAKfWqUQkflXKpaDdpaYoM0iluLS9lgJNHyBF58KKA2FBEwkD7wog==", + "license": "MIT" + }, + "node_modules/colord": { + "version": "2.9.3", + "resolved": "https://registry.npmjs.org/colord/-/colord-2.9.3.tgz", + "integrity": "sha512-jeC1axXpnb0/2nn/Y1LPuLdgXBLH7aDcHu4KEKfqw3CUhX7ZpfBSlPKyqXE6btIgEzfWtrX3/tyBCaCvXvMkOw==", + "license": "MIT" + }, + "node_modules/colorette": { + "version": "2.0.20", + "resolved": "https://registry.npmjs.org/colorette/-/colorette-2.0.20.tgz", + "integrity": "sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w==", + "license": "MIT" + }, + "node_modules/colors": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/colors/-/colors-1.4.0.tgz", + "integrity": "sha512-a+UqTh4kgZg/SlGvfbzDHpgRu7AAQOmmqRHJnxhRZICKFUT91brVhNNt58CMWU9PsBbv3PDCZUHbVxuDiH2mtA==", + "dev": true, "license": "MIT", - "peer": true, "engines": { - "node": ">= 20.19.4" + "node": ">=0.1.90" } }, - "node_modules/@react-native/js-polyfills": { - "version": "0.81.4", - "resolved": "https://registry.npmjs.org/@react-native/js-polyfills/-/js-polyfills-0.81.4.tgz", - "integrity": "sha512-sr42FaypKXJHMVHhgSbu2f/ZJfrLzgaoQ+HdpRvKEiEh2mhFf6XzZwecyLBvWqf2pMPZa+CpPfNPiejXjKEy8w==", + "node_modules/combine-promises": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/combine-promises/-/combine-promises-1.2.0.tgz", + "integrity": "sha512-VcQB1ziGD0NXrhKxiwyNbCDmRzs/OShMs2GqW2DlU2A/Sd0nQxE1oWDAE5O0ygSx5mgQOn9eIFh7yKPgFRVkPQ==", "license": "MIT", - "peer": true, "engines": { - "node": ">= 20.19.4" + "node": ">=10" } }, - "node_modules/@react-native/normalize-colors": { - "version": "0.81.4", - "resolved": "https://registry.npmjs.org/@react-native/normalize-colors/-/normalize-colors-0.81.4.tgz", - "integrity": "sha512-9nRRHO1H+tcFqjb9gAM105Urtgcanbta2tuqCVY0NATHeFPDEAB7gPyiLxCHKMi1NbhP6TH0kxgSWXKZl1cyRg==", + "node_modules/combined-stream": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", + "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", "license": "MIT", - "peer": true + "dependencies": { + "delayed-stream": "~1.0.0" + }, + "engines": { + "node": ">= 0.8" + } }, - "node_modules/@remix-run/router": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/@remix-run/router/-/router-1.5.0.tgz", - "integrity": "sha512-bkUDCp8o1MvFO+qxkODcbhSqRa6P2GXgrGZVpt0dCXNW2HCSCqYI0ZoAqEOSAjRWmmlKcYgFvN4B4S+zo/f8kg==", + "node_modules/comma-separated-tokens": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/comma-separated-tokens/-/comma-separated-tokens-1.0.8.tgz", + "integrity": "sha512-GHuDRO12Sypu2cV70d1dkA2EUmXHgntrzbpvOB+Qy+49ypNfGgFQIC2fhhXbnyrJRynDCAARsT7Ou0M6hirpfw==", "license": "MIT", - "engines": { - "node": ">=14" + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" } }, - "node_modules/@rolldown/pluginutils": { - "version": "1.0.0-beta.27", - "resolved": "https://registry.npmjs.org/@rolldown/pluginutils/-/pluginutils-1.0.0-beta.27.tgz", - "integrity": "sha512-+d0F4MKMCbeVUJwG96uQ4SgAznZNSq93I3V+9NHA4OpvqG8mRCpGdKmK8l/dl02h2CCDHwW2FqilnTyDcAnqjA==", + "node_modules/command-exists": { + "version": "1.2.9", + "resolved": "https://registry.npmjs.org/command-exists/-/command-exists-1.2.9.tgz", + "integrity": "sha512-LTQ/SGc+s0Xc0Fu5WaKnR0YiygZkm9eKFvyS+fRsU7/ZWFF8ykFM6Pc9aCVf1+xasOOZpO3BAVgVrKvsqKHV7w==", "dev": true, "license": "MIT" }, - "node_modules/@rollup/plugin-commonjs": { - "version": "28.0.6", - "resolved": "https://registry.npmjs.org/@rollup/plugin-commonjs/-/plugin-commonjs-28.0.6.tgz", - "integrity": "sha512-XSQB1K7FUU5QP+3lOQmVCE3I0FcbbNvmNT4VJSj93iUjayaARrTQeoRdiYQoftAJBLrR9t2agwAd3ekaTgHNlw==", - "dev": true, + "node_modules/command-line-args": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/command-line-args/-/command-line-args-5.2.1.tgz", + "integrity": "sha512-H4UfQhZyakIjC74I9d34fGYDwk3XpSr17QhEd0Q3I9Xq1CETHo4Hcuo87WyWHpAF1aSLjLRf5lD9ZGX2qStUvg==", + "devOptional": true, "license": "MIT", "dependencies": { - "@rollup/pluginutils": "^5.0.1", - "commondir": "^1.0.1", - "estree-walker": "^2.0.2", - "fdir": "^6.2.0", - "is-reference": "1.2.1", - "magic-string": "^0.30.3", - "picomatch": "^4.0.2" + "array-back": "^3.1.0", + "find-replace": "^3.0.0", + "lodash.camelcase": "^4.3.0", + "typical": "^4.0.0" }, "engines": { - "node": ">=16.0.0 || 14 >= 14.17" - }, - "peerDependencies": { - "rollup": "^2.68.0||^3.0.0||^4.0.0" + "node": ">=4.0.0" + } + }, + "node_modules/command-line-commands": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/command-line-commands/-/command-line-commands-3.0.2.tgz", + "integrity": "sha512-ac6PdCtdR6q7S3HN+JiVLIWGHY30PRYIEl2qPo+FuEuzwAUk0UYyimrngrg7FvF/mCr4Jgoqv5ZnHZgads50rw==", + "license": "MIT", + "optional": true, + "dependencies": { + "array-back": "^4.0.1" }, - "peerDependenciesMeta": { - "rollup": { - "optional": true - } + "engines": { + "node": ">=8" } }, - "node_modules/@rollup/plugin-commonjs/node_modules/picomatch": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.3.tgz", - "integrity": "sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==", - "dev": true, + "node_modules/command-line-commands/node_modules/array-back": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/array-back/-/array-back-4.0.2.tgz", + "integrity": "sha512-NbdMezxqf94cnNfWLL7V/im0Ub+Anbb0IoZhvzie8+4HJ4nMQuzHuy49FkGYCJK2yAloZ3meiB6AVMClbrI1vg==", "license": "MIT", + "optional": true, "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/jonschlinkert" + "node": ">=8" } }, - "node_modules/@rollup/plugin-inject": { - "version": "5.0.5", - "resolved": "https://registry.npmjs.org/@rollup/plugin-inject/-/plugin-inject-5.0.5.tgz", - "integrity": "sha512-2+DEJbNBoPROPkgTDNe8/1YXWcqxbN5DTjASVIOx8HS+pITXushyNiBV56RB08zuptzz8gT3YfkqriTBVycepg==", - "dev": true, + "node_modules/command-line-usage": { + "version": "6.1.3", + "resolved": "https://registry.npmjs.org/command-line-usage/-/command-line-usage-6.1.3.tgz", + "integrity": "sha512-sH5ZSPr+7UStsloltmDh7Ce5fb8XPlHyoPzTpyyMuYCtervL65+ubVZ6Q61cFtFl62UyJlc8/JwERRbAFPUqgw==", + "devOptional": true, "license": "MIT", "dependencies": { - "@rollup/pluginutils": "^5.0.1", - "estree-walker": "^2.0.2", - "magic-string": "^0.30.3" + "array-back": "^4.0.2", + "chalk": "^2.4.2", + "table-layout": "^1.0.2", + "typical": "^5.2.0" }, "engines": { - "node": ">=14.0.0" - }, - "peerDependencies": { - "rollup": "^1.20.0||^2.0.0||^3.0.0||^4.0.0" - }, - "peerDependenciesMeta": { - "rollup": { - "optional": true - } + "node": ">=8.0.0" } }, - "node_modules/@rollup/pluginutils": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/@rollup/pluginutils/-/pluginutils-5.3.0.tgz", - "integrity": "sha512-5EdhGZtnu3V88ces7s53hhfK5KSASnJZv8Lulpc04cWO3REESroJXg73DFsOmgbU2BhwV0E20bu2IDZb3VKW4Q==", - "dev": true, + "node_modules/command-line-usage/node_modules/ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "devOptional": true, "license": "MIT", "dependencies": { - "@types/estree": "^1.0.0", - "estree-walker": "^2.0.2", - "picomatch": "^4.0.2" + "color-convert": "^1.9.0" }, "engines": { - "node": ">=14.0.0" - }, - "peerDependencies": { - "rollup": "^1.20.0||^2.0.0||^3.0.0||^4.0.0" - }, - "peerDependenciesMeta": { - "rollup": { - "optional": true - } + "node": ">=4" } }, - "node_modules/@rollup/pluginutils/node_modules/picomatch": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.3.tgz", - "integrity": "sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==", - "dev": true, + "node_modules/command-line-usage/node_modules/array-back": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/array-back/-/array-back-4.0.2.tgz", + "integrity": "sha512-NbdMezxqf94cnNfWLL7V/im0Ub+Anbb0IoZhvzie8+4HJ4nMQuzHuy49FkGYCJK2yAloZ3meiB6AVMClbrI1vg==", + "devOptional": true, "license": "MIT", "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/jonschlinkert" + "node": ">=8" } }, - "node_modules/@rollup/rollup-android-arm-eabi": { - "version": "4.52.3", - "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.52.3.tgz", - "integrity": "sha512-h6cqHGZ6VdnwliFG1NXvMPTy/9PS3h8oLh7ImwR+kl+oYnQizgjxsONmmPSb2C66RksfkfIxEVtDSEcJiO0tqw==", - "cpu": [ - "arm" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "android" - ] - }, - "node_modules/@rollup/rollup-android-arm64": { - "version": "4.52.3", - "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.52.3.tgz", - "integrity": "sha512-wd+u7SLT/u6knklV/ifG7gr5Qy4GUbH2hMWcDauPFJzmCZUAJ8L2bTkVXC2niOIxp8lk3iH/QX8kSrUxVZrOVw==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "android" - ] - }, - "node_modules/@rollup/rollup-darwin-arm64": { - "version": "4.52.3", - "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.52.3.tgz", - "integrity": "sha512-lj9ViATR1SsqycwFkJCtYfQTheBdvlWJqzqxwc9f2qrcVrQaF/gCuBRTiTolkRWS6KvNxSk4KHZWG7tDktLgjg==", - "cpu": [ - "arm64" - ], - "dev": true, + "node_modules/command-line-usage/node_modules/chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "devOptional": true, "license": "MIT", - "optional": true, - "os": [ - "darwin" - ] + "dependencies": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "engines": { + "node": ">=4" + } }, - "node_modules/@rollup/rollup-darwin-x64": { - "version": "4.52.3", - "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.52.3.tgz", - "integrity": "sha512-+Dyo7O1KUmIsbzx1l+4V4tvEVnVQqMOIYtrxK7ncLSknl1xnMHLgn7gddJVrYPNZfEB8CIi3hK8gq8bDhb3h5A==", - "cpu": [ - "x64" - ], - "dev": true, + "node_modules/command-line-usage/node_modules/color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "devOptional": true, "license": "MIT", - "optional": true, - "os": [ - "darwin" - ] + "dependencies": { + "color-name": "1.1.3" + } }, - "node_modules/@rollup/rollup-freebsd-arm64": { - "version": "4.52.3", - "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-arm64/-/rollup-freebsd-arm64-4.52.3.tgz", - "integrity": "sha512-u9Xg2FavYbD30g3DSfNhxgNrxhi6xVG4Y6i9Ur1C7xUuGDW3banRbXj+qgnIrwRN4KeJ396jchwy9bCIzbyBEQ==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "freebsd" - ] + "node_modules/command-line-usage/node_modules/color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", + "devOptional": true, + "license": "MIT" }, - "node_modules/@rollup/rollup-freebsd-x64": { - "version": "4.52.3", - "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-x64/-/rollup-freebsd-x64-4.52.3.tgz", - "integrity": "sha512-5M8kyi/OX96wtD5qJR89a/3x5x8x5inXBZO04JWhkQb2JWavOWfjgkdvUqibGJeNNaz1/Z1PPza5/tAPXICI6A==", - "cpu": [ - "x64" - ], - "dev": true, + "node_modules/command-line-usage/node_modules/escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", + "devOptional": true, "license": "MIT", - "optional": true, - "os": [ - "freebsd" - ] + "engines": { + "node": ">=0.8.0" + } }, - "node_modules/@rollup/rollup-linux-arm-gnueabihf": { - "version": "4.52.3", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.52.3.tgz", - "integrity": "sha512-IoerZJ4l1wRMopEHRKOO16e04iXRDyZFZnNZKrWeNquh5d6bucjezgd+OxG03mOMTnS1x7hilzb3uURPkJ0OfA==", - "cpu": [ - "arm" - ], - "dev": true, + "node_modules/command-line-usage/node_modules/has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", + "devOptional": true, "license": "MIT", - "optional": true, - "os": [ - "linux" - ] + "engines": { + "node": ">=4" + } }, - "node_modules/@rollup/rollup-linux-arm-musleabihf": { - "version": "4.52.3", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.52.3.tgz", - "integrity": "sha512-ZYdtqgHTDfvrJHSh3W22TvjWxwOgc3ThK/XjgcNGP2DIwFIPeAPNsQxrJO5XqleSlgDux2VAoWQ5iJrtaC1TbA==", - "cpu": [ - "arm" - ], - "dev": true, + "node_modules/command-line-usage/node_modules/supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "devOptional": true, "license": "MIT", - "optional": true, - "os": [ - "linux" - ] + "dependencies": { + "has-flag": "^3.0.0" + }, + "engines": { + "node": ">=4" + } }, - "node_modules/@rollup/rollup-linux-arm64-gnu": { - "version": "4.52.3", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.52.3.tgz", - "integrity": "sha512-NcViG7A0YtuFDA6xWSgmFb6iPFzHlf5vcqb2p0lGEbT+gjrEEz8nC/EeDHvx6mnGXnGCC1SeVV+8u+smj0CeGQ==", - "cpu": [ - "arm64" - ], - "dev": true, + "node_modules/command-line-usage/node_modules/typical": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/typical/-/typical-5.2.0.tgz", + "integrity": "sha512-dvdQgNDNJo+8B2uBQoqdb11eUCE1JQXhvjC/CZtgvZseVd5TYMXnq0+vuUemXbd/Se29cTaUuPX3YIc2xgbvIg==", + "devOptional": true, "license": "MIT", - "optional": true, - "os": [ - "linux" - ] + "engines": { + "node": ">=8" + } }, - "node_modules/@rollup/rollup-linux-arm64-musl": { - "version": "4.52.3", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.52.3.tgz", - "integrity": "sha512-d3pY7LWno6SYNXRm6Ebsq0DJGoiLXTb83AIPCXl9fmtIQs/rXoS8SJxxUNtFbJ5MiOvs+7y34np77+9l4nfFMw==", - "cpu": [ - "arm64" - ], + "node_modules/commander": { + "version": "11.1.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-11.1.0.tgz", + "integrity": "sha512-yPVavfyCcRhmorC7rWlkHn15b4wDVgVmBA7kV4QVBsF7kv/9TKJAbAXVTxvTnwP8HHKjRCJDClKbciiYS7p0DQ==", "dev": true, "license": "MIT", - "optional": true, - "os": [ - "linux" - ] + "engines": { + "node": ">=16" + } }, - "node_modules/@rollup/rollup-linux-loong64-gnu": { - "version": "4.52.3", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loong64-gnu/-/rollup-linux-loong64-gnu-4.52.3.tgz", - "integrity": "sha512-3y5GA0JkBuirLqmjwAKwB0keDlI6JfGYduMlJD/Rl7fvb4Ni8iKdQs1eiunMZJhwDWdCvrcqXRY++VEBbvk6Eg==", - "cpu": [ - "loong64" - ], - "dev": true, + "node_modules/comment-json": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/comment-json/-/comment-json-4.2.3.tgz", + "integrity": "sha512-SsxdiOf064DWoZLH799Ata6u7iV658A11PlWtZATDlXPpKGJnbJZ5Z24ybixAi+LUUqJ/GKowAejtC5GFUG7Tw==", "license": "MIT", - "optional": true, - "os": [ - "linux" - ] + "dependencies": { + "array-timsort": "^1.0.3", + "core-util-is": "^1.0.3", + "esprima": "^4.0.1", + "has-own-prop": "^2.0.0", + "repeat-string": "^1.6.1" + }, + "engines": { + "node": ">= 6" + } }, - "node_modules/@rollup/rollup-linux-ppc64-gnu": { - "version": "4.52.3", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-ppc64-gnu/-/rollup-linux-ppc64-gnu-4.52.3.tgz", - "integrity": "sha512-AUUH65a0p3Q0Yfm5oD2KVgzTKgwPyp9DSXc3UA7DtxhEb/WSPfbG4wqXeSN62OG5gSo18em4xv6dbfcUGXcagw==", - "cpu": [ - "ppc64" - ], + "node_modules/common-path-prefix": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/common-path-prefix/-/common-path-prefix-3.0.0.tgz", + "integrity": "sha512-QE33hToZseCH3jS0qN96O/bSh3kaw/h+Tq7ngyY9eWDUnTlTNUyqfqvCXioLe5Na5jFsL78ra/wuBU4iuEgd4w==", + "license": "ISC" + }, + "node_modules/commondir": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/commondir/-/commondir-1.0.1.tgz", + "integrity": "sha512-W9pAhw0ja1Edb5GVdIF1mjZw/ASI0AlShXM83UUGe2DVr5TdAPEA1OA8m/g8zWp9x6On7gqufY+FatDbC3MDQg==", "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ] + "license": "MIT" }, - "node_modules/@rollup/rollup-linux-riscv64-gnu": { - "version": "4.52.3", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.52.3.tgz", - "integrity": "sha512-1makPhFFVBqZE+XFg3Dkq+IkQ7JvmUrwwqaYBL2CE+ZpxPaqkGaiWFEWVGyvTwZace6WLJHwjVh/+CXbKDGPmg==", - "cpu": [ - "riscv64" - ], + "node_modules/compare-func": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/compare-func/-/compare-func-2.0.0.tgz", + "integrity": "sha512-zHig5N+tPWARooBnb0Zx1MFcdfpyJrfTJ3Y5L+IFvUm8rM74hHz66z0gw0x4tijh5CorKkKUCnW82R2vmpeCRA==", "dev": true, "license": "MIT", - "optional": true, - "os": [ - "linux" - ] + "dependencies": { + "array-ify": "^1.0.0", + "dot-prop": "^5.1.0" + } }, - "node_modules/@rollup/rollup-linux-riscv64-musl": { - "version": "4.52.3", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-musl/-/rollup-linux-riscv64-musl-4.52.3.tgz", - "integrity": "sha512-OOFJa28dxfl8kLOPMUOQBCO6z3X2SAfzIE276fwT52uXDWUS178KWq0pL7d6p1kz7pkzA0yQwtqL0dEPoVcRWg==", - "cpu": [ - "riscv64" - ], + "node_modules/compare-versions": { + "version": "6.1.1", + "resolved": "https://registry.npmjs.org/compare-versions/-/compare-versions-6.1.1.tgz", + "integrity": "sha512-4hm4VPpIecmlg59CHXnRDnqGplJFrbLG4aFEl5vl6cK1u76ws3LLvX7ikFnTDl5vo39sjWD6AaDPYodJp/NNHg==", "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ] + "license": "MIT" }, - "node_modules/@rollup/rollup-linux-s390x-gnu": { - "version": "4.52.3", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.52.3.tgz", - "integrity": "sha512-jMdsML2VI5l+V7cKfZx3ak+SLlJ8fKvLJ0Eoa4b9/vCUrzXKgoKxvHqvJ/mkWhFiyp88nCkM5S2v6nIwRtPcgg==", - "cpu": [ - "s390x" - ], + "node_modules/component-emitter": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.3.1.tgz", + "integrity": "sha512-T0+barUSQRTUQASh8bx02dl+DhF54GtIDY13Y3m9oWTklKbb3Wv974meRpeZ3lp1JpLVECWWNHC4vaG2XHXouQ==", "dev": true, "license": "MIT", - "optional": true, - "os": [ - "linux" - ] + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } }, - "node_modules/@rollup/rollup-linux-x64-gnu": { - "version": "4.52.3", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.52.3.tgz", - "integrity": "sha512-tPgGd6bY2M2LJTA1uGq8fkSPK8ZLYjDjY+ZLK9WHncCnfIz29LIXIqUgzCR0hIefzy6Hpbe8Th5WOSwTM8E7LA==", - "cpu": [ - "x64" - ], + "node_modules/compress-commons": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/compress-commons/-/compress-commons-4.1.2.tgz", + "integrity": "sha512-D3uMHtGc/fcO1Gt1/L7i1e33VOvD4A9hfQLP+6ewd+BvG/gQ84Yh4oftEhAdjSMgBgwGL+jsppT7JYNpo6MHHg==", "dev": true, "license": "MIT", - "optional": true, - "os": [ - "linux" - ] + "dependencies": { + "buffer-crc32": "^0.2.13", + "crc32-stream": "^4.0.2", + "normalize-path": "^3.0.0", + "readable-stream": "^3.6.0" + }, + "engines": { + "node": ">= 10" + } }, - "node_modules/@rollup/rollup-linux-x64-musl": { - "version": "4.52.3", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.52.3.tgz", - "integrity": "sha512-BCFkJjgk+WFzP+tcSMXq77ymAPIxsX9lFJWs+2JzuZTLtksJ2o5hvgTdIcZ5+oKzUDMwI0PfWzRBYAydAHF2Mw==", - "cpu": [ - "x64" - ], + "node_modules/compress-commons/node_modules/readable-stream": { + "version": "3.6.2", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", + "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", "dev": true, "license": "MIT", - "optional": true, - "os": [ - "linux" - ] + "dependencies": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + }, + "engines": { + "node": ">= 6" + } }, - "node_modules/@rollup/rollup-openharmony-arm64": { - "version": "4.52.3", - "resolved": "https://registry.npmjs.org/@rollup/rollup-openharmony-arm64/-/rollup-openharmony-arm64-4.52.3.tgz", - "integrity": "sha512-KTD/EqjZF3yvRaWUJdD1cW+IQBk4fbQaHYJUmP8N4XoKFZilVL8cobFSTDnjTtxWJQ3JYaMgF4nObY/+nYkumA==", - "cpu": [ - "arm64" - ], - "dev": true, + "node_modules/compressible": { + "version": "2.0.18", + "resolved": "https://registry.npmjs.org/compressible/-/compressible-2.0.18.tgz", + "integrity": "sha512-AF3r7P5dWxL8MxyITRMlORQNaOA2IkAFaTr4k7BUumjPtRpGDTZpl0Pb1XCO6JeDCBdp126Cgs9sMxqSjgYyRg==", "license": "MIT", - "optional": true, - "os": [ - "openharmony" - ] + "dependencies": { + "mime-db": ">= 1.43.0 < 2" + }, + "engines": { + "node": ">= 0.6" + } }, - "node_modules/@rollup/rollup-win32-arm64-msvc": { - "version": "4.52.3", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.52.3.tgz", - "integrity": "sha512-+zteHZdoUYLkyYKObGHieibUFLbttX2r+58l27XZauq0tcWYYuKUwY2wjeCN9oK1Um2YgH2ibd6cnX/wFD7DuA==", - "cpu": [ - "arm64" - ], - "dev": true, + "node_modules/compression": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/compression/-/compression-1.8.1.tgz", + "integrity": "sha512-9mAqGPHLakhCLeNyxPkK4xVo746zQ/czLH1Ky+vkitMnWfWZps8r0qXuwhwizagCRttsL4lfG4pIOvaWLpAP0w==", "license": "MIT", - "optional": true, - "os": [ - "win32" - ] + "dependencies": { + "bytes": "3.1.2", + "compressible": "~2.0.18", + "debug": "2.6.9", + "negotiator": "~0.6.4", + "on-headers": "~1.1.0", + "safe-buffer": "5.2.1", + "vary": "~1.1.2" + }, + "engines": { + "node": ">= 0.8.0" + } }, - "node_modules/@rollup/rollup-win32-ia32-msvc": { - "version": "4.52.3", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.52.3.tgz", - "integrity": "sha512-of1iHkTQSo3kr6dTIRX6t81uj/c/b15HXVsPcEElN5sS859qHrOepM5p9G41Hah+CTqSh2r8Bm56dL2z9UQQ7g==", - "cpu": [ - "ia32" - ], - "dev": true, + "node_modules/compression/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", "license": "MIT", - "optional": true, - "os": [ - "win32" - ] + "dependencies": { + "ms": "2.0.0" + } }, - "node_modules/@rollup/rollup-win32-x64-gnu": { - "version": "4.52.3", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-gnu/-/rollup-win32-x64-gnu-4.52.3.tgz", - "integrity": "sha512-s0hybmlHb56mWVZQj8ra9048/WZTPLILKxcvcq+8awSZmyiSUZjjem1AhU3Tf4ZKpYhK4mg36HtHDOe8QJS5PQ==", - "cpu": [ - "x64" - ], - "dev": true, + "node_modules/compression/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "license": "MIT" + }, + "node_modules/compression/node_modules/negotiator": { + "version": "0.6.4", + "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.4.tgz", + "integrity": "sha512-myRT3DiWPHqho5PrJaIRyaMv2kgYf0mUVgBNOYMuCH5Ki1yEiQaf/ZJuQ62nvpc44wL5WDbTX7yGJi1Neevw8w==", "license": "MIT", - "optional": true, - "os": [ - "win32" - ] + "engines": { + "node": ">= 0.6" + } }, - "node_modules/@rollup/rollup-win32-x64-msvc": { - "version": "4.52.3", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.52.3.tgz", - "integrity": "sha512-zGIbEVVXVtauFgl3MRwGWEN36P5ZGenHRMgNw88X5wEhEBpq0XrMEZwOn07+ICrwM17XO5xfMZqh0OldCH5VTA==", - "cpu": [ - "x64" + "node_modules/compute-scroll-into-view": { + "version": "1.0.20", + "resolved": "https://registry.npmjs.org/compute-scroll-into-view/-/compute-scroll-into-view-1.0.20.tgz", + "integrity": "sha512-UCB0ioiyj8CRjtrvaceBLqqhZCVP+1B8+NWQhmdsm0VXOJtobBCf1dBQmebCCo34qZmUwZfIH2MZLqNHazrfjg==", + "license": "MIT" + }, + "node_modules/concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", + "license": "MIT" + }, + "node_modules/concat-stream": { + "version": "1.6.2", + "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.2.tgz", + "integrity": "sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==", + "engines": [ + "node >= 0.8" ], - "dev": true, "license": "MIT", - "optional": true, - "os": [ - "win32" - ] + "dependencies": { + "buffer-from": "^1.0.0", + "inherits": "^2.0.3", + "readable-stream": "^2.2.2", + "typedarray": "^0.0.6" + } }, - "node_modules/@rtsao/scc": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@rtsao/scc/-/scc-1.1.0.tgz", - "integrity": "sha512-zt6OdqaDoOnJ1ZYsCYGt9YmWzDXl4vQdKTyJev62gFhRGKdx7mcT54V9KIjg+d2wi9EXsPvAPKe7i7WjfVWB8g==", - "dev": true, + "node_modules/confbox": { + "version": "0.1.8", + "resolved": "https://registry.npmjs.org/confbox/-/confbox-0.1.8.tgz", + "integrity": "sha512-RMtmw0iFkeR4YV+fUOSucriAQNb9g8zFR52MWCtl+cCZOFRNL6zeB395vPzFhEjjn4fMxXudmELnl/KF/WrK6w==", "license": "MIT" }, - "node_modules/@scure/base": { - "version": "1.2.6", - "resolved": "https://registry.npmjs.org/@scure/base/-/base-1.2.6.tgz", - "integrity": "sha512-g/nm5FgUa//MCj1gV09zTJTaM6KBAHqLN907YVQqf7zC49+DcO4B1so4ZX07Ef10Twr6nuqYEH9GEggFXA4Fmg==", + "node_modules/config-chain": { + "version": "1.1.13", + "resolved": "https://registry.npmjs.org/config-chain/-/config-chain-1.1.13.tgz", + "integrity": "sha512-qj+f8APARXHrM0hraqXYb2/bOVSV4PvJQlNZ/DVj0QrmNM2q2euizkeuVckQ57J+W0mRH6Hvi+k50M4Jul2VRQ==", "license": "MIT", + "dependencies": { + "ini": "^1.3.4", + "proto-list": "~1.2.1" + } + }, + "node_modules/config-chain/node_modules/ini": { + "version": "1.3.8", + "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz", + "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==", + "license": "ISC" + }, + "node_modules/configstore": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/configstore/-/configstore-6.0.0.tgz", + "integrity": "sha512-cD31W1v3GqUlQvbBCGcXmd2Nj9SvLDOP1oQ0YFuLETufzSPaKp11rYBsSOm7rCsW3OnIRAFM3OxRhceaXNYHkA==", + "license": "BSD-2-Clause", + "dependencies": { + "dot-prop": "^6.0.1", + "graceful-fs": "^4.2.6", + "unique-string": "^3.0.0", + "write-file-atomic": "^3.0.3", + "xdg-basedir": "^5.0.1" + }, + "engines": { + "node": ">=12" + }, "funding": { - "url": "https://paulmillr.com/funding/" + "url": "https://github.com/yeoman/configstore?sponsor=1" } }, - "node_modules/@scure/bip32": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/@scure/bip32/-/bip32-1.4.0.tgz", - "integrity": "sha512-sVUpc0Vq3tXCkDGYVWGIZTRfnvu8LoTDaev7vbwh0omSvVORONr960MQWdKqJDCReIEmTj3PAr73O3aoxz7OPg==", + "node_modules/configstore/node_modules/dot-prop": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/dot-prop/-/dot-prop-6.0.1.tgz", + "integrity": "sha512-tE7ztYzXHIeyvc7N+hR3oi7FIbf/NIjVP9hmAt3yMXzrQ072/fpjGLx2GxNxGxUl5V73MEqYzioOMoVhGMJ5cA==", "license": "MIT", "dependencies": { - "@noble/curves": "~1.4.0", - "@noble/hashes": "~1.4.0", - "@scure/base": "~1.1.6" + "is-obj": "^2.0.0" + }, + "engines": { + "node": ">=10" }, "funding": { - "url": "https://paulmillr.com/funding/" + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/@scure/bip32/node_modules/@noble/curves": { - "version": "1.4.2", - "resolved": "https://registry.npmjs.org/@noble/curves/-/curves-1.4.2.tgz", - "integrity": "sha512-TavHr8qycMChk8UwMld0ZDRvatedkzWfH8IiaeGCfymOP5i0hSCozz9vHOL0nkwk7HRMlFnAiKpS2jrUmSybcw==", + "node_modules/configstore/node_modules/signal-exit": { + "version": "3.0.7", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", + "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", + "license": "ISC" + }, + "node_modules/configstore/node_modules/write-file-atomic": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-3.0.3.tgz", + "integrity": "sha512-AvHcyZ5JnSfq3ioSyjrBkH9yW4m7Ayk8/9My/DD9onKeu/94fwrMocemO2QAJFAlnnDN+ZDS+ZjAR5ua1/PV/Q==", + "license": "ISC", + "dependencies": { + "imurmurhash": "^0.1.4", + "is-typedarray": "^1.0.0", + "signal-exit": "^3.0.2", + "typedarray-to-buffer": "^3.1.5" + } + }, + "node_modules/connect": { + "version": "3.7.0", + "resolved": "https://registry.npmjs.org/connect/-/connect-3.7.0.tgz", + "integrity": "sha512-ZqRXc+tZukToSNmh5C2iWMSoV3X1YUcPbqEM4DkEG5tNQXrQUZCNVGGv3IuicnkMtPfGf3Xtp8WCXs295iQ1pQ==", "license": "MIT", "dependencies": { - "@noble/hashes": "1.4.0" + "debug": "2.6.9", + "finalhandler": "1.1.2", + "parseurl": "~1.3.3", + "utils-merge": "1.0.1" }, - "funding": { - "url": "https://paulmillr.com/funding/" + "engines": { + "node": ">= 0.10.0" } }, - "node_modules/@scure/bip32/node_modules/@noble/hashes": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.4.0.tgz", - "integrity": "sha512-V1JJ1WTRUqHHrOSh597hURcMqVKVGL/ea3kv0gSnEdsEZ0/+VyPghM1lMNGc00z7CIQorSvbKpuJkxvuHbvdbg==", + "node_modules/connect-history-api-fallback": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/connect-history-api-fallback/-/connect-history-api-fallback-1.6.0.tgz", + "integrity": "sha512-e54B99q/OUoH64zYYRf3HBP5z24G38h5D3qXu23JGRoigpX5Ss4r9ZnDk3g0Z8uQC2x2lPaJ+UlWBc1ZWBWdLg==", + "dev": true, "license": "MIT", "engines": { - "node": ">= 16" - }, - "funding": { - "url": "https://paulmillr.com/funding/" + "node": ">=0.8" } }, - "node_modules/@scure/bip32/node_modules/@scure/base": { - "version": "1.1.9", - "resolved": "https://registry.npmjs.org/@scure/base/-/base-1.1.9.tgz", - "integrity": "sha512-8YKhl8GHiNI/pU2VMaofa2Tor7PJRAjwQLBBuilkJ9L5+13yVbC7JO/wS7piioAvPSwR3JKM1IJ/u4xQzbcXKg==", + "node_modules/connect/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", "license": "MIT", - "funding": { - "url": "https://paulmillr.com/funding/" + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/connect/node_modules/encodeurl": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", + "integrity": "sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==", + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/connect/node_modules/finalhandler": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.1.2.tgz", + "integrity": "sha512-aAWcW57uxVNrQZqFXjITpW3sIUQmHGG3qSb9mUah9MgMC4NeWhNOlNjXEYq3HjRAvL6arUviZGGJsBg6z0zsWA==", + "license": "MIT", + "dependencies": { + "debug": "2.6.9", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "on-finished": "~2.3.0", + "parseurl": "~1.3.3", + "statuses": "~1.5.0", + "unpipe": "~1.0.0" + }, + "engines": { + "node": ">= 0.8" } }, - "node_modules/@scure/bip39": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/@scure/bip39/-/bip39-1.3.0.tgz", - "integrity": "sha512-disdg7gHuTDZtY+ZdkmLpPCk7fxZSu3gBiEGuoC1XYxv9cGx3Z6cpTggCgW6odSOOIXCiDjuGejW+aJKCY/pIQ==", + "node_modules/connect/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "license": "MIT" + }, + "node_modules/connect/node_modules/on-finished": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz", + "integrity": "sha512-ikqdkGAAyf/X/gPhXGvfgAytDZtDbr+bkNUJ0N9h5MI/dmdgCs3l6hoHrcUv41sRKew3jIwrp4qQDXiK99Utww==", "license": "MIT", "dependencies": { - "@noble/hashes": "~1.4.0", - "@scure/base": "~1.1.6" + "ee-first": "1.1.1" }, - "funding": { - "url": "https://paulmillr.com/funding/" + "engines": { + "node": ">= 0.8" } }, - "node_modules/@scure/bip39/node_modules/@noble/hashes": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.4.0.tgz", - "integrity": "sha512-V1JJ1WTRUqHHrOSh597hURcMqVKVGL/ea3kv0gSnEdsEZ0/+VyPghM1lMNGc00z7CIQorSvbKpuJkxvuHbvdbg==", + "node_modules/connect/node_modules/statuses": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz", + "integrity": "sha512-OpZ3zP+jT1PI7I8nemJX4AKmAX070ZkYPVWV/AaKTJl+tXCTGyVdC1a4SL8RUQYEwk/f34ZX8UTykN68FwrqAA==", "license": "MIT", "engines": { - "node": ">= 16" - }, - "funding": { - "url": "https://paulmillr.com/funding/" + "node": ">= 0.6" } }, - "node_modules/@scure/bip39/node_modules/@scure/base": { - "version": "1.1.9", - "resolved": "https://registry.npmjs.org/@scure/base/-/base-1.1.9.tgz", - "integrity": "sha512-8YKhl8GHiNI/pU2VMaofa2Tor7PJRAjwQLBBuilkJ9L5+13yVbC7JO/wS7piioAvPSwR3JKM1IJ/u4xQzbcXKg==", - "license": "MIT", - "funding": { - "url": "https://paulmillr.com/funding/" - } + "node_modules/consola": { + "version": "2.15.3", + "resolved": "https://registry.npmjs.org/consola/-/consola-2.15.3.tgz", + "integrity": "sha512-9vAdYbHj6x2fLKC4+oPH0kFzY/orMZyG2Aj+kNylHxKGJ/Ed4dpNyAQYwJOdqO4zdM7XpVHmyejQDcQHrnuXbw==", + "license": "MIT" }, - "node_modules/@sentry/core": { - "version": "5.30.0", - "resolved": "https://registry.npmjs.org/@sentry/core/-/core-5.30.0.tgz", - "integrity": "sha512-TmfrII8w1PQZSZgPpUESqjB+jC6MvZJZdLtE/0hZ+SrnKhW3x5WlYLvTXZpcWePYBku7rl2wn1RZu6uT0qCTeg==", + "node_modules/console-browserify": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/console-browserify/-/console-browserify-1.2.0.tgz", + "integrity": "sha512-ZMkYO/LkF17QvCPqM0gxw8yUzigAOZOSWSHg91FH6orS7vcEj5dVZTidN2fQ14yBSdg97RqhSNwLUXInd52OTA==", + "dev": true + }, + "node_modules/console-control-strings": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/console-control-strings/-/console-control-strings-1.1.0.tgz", + "integrity": "sha512-ty/fTekppD2fIwRvnZAVdeOiGd1c7YXEixbgJTNzqcxJWKQnjJ/V1bNEEE6hygpM3WjwHFUVK6HTjWSzV4a8sQ==", + "license": "ISC", + "optional": true + }, + "node_modules/constants-browserify": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/constants-browserify/-/constants-browserify-1.0.0.tgz", + "integrity": "sha512-xFxOwqIzR/e1k1gLiWEophSCMqXcwVHIH7akf7b/vxcUeGunlj3hvZaaqxwHsTgn+IndtkQJgSztIDWeumWJDQ==", "dev": true, - "license": "BSD-3-Clause", + "license": "MIT" + }, + "node_modules/content-disposition": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-1.0.0.tgz", + "integrity": "sha512-Au9nRL8VNUut/XSzbQA38+M78dzP4D+eqg3gfJHMIHHYa3bg067xj1KxMUWj+VULbiZMowKngFFbKczUrNJ1mg==", + "license": "MIT", "dependencies": { - "@sentry/hub": "5.30.0", - "@sentry/minimal": "5.30.0", - "@sentry/types": "5.30.0", - "@sentry/utils": "5.30.0", - "tslib": "^1.9.3" + "safe-buffer": "5.2.1" }, "engines": { - "node": ">=6" + "node": ">= 0.6" } }, - "node_modules/@sentry/core/node_modules/tslib": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", - "dev": true, - "license": "0BSD" + "node_modules/content-type": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.5.tgz", + "integrity": "sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } }, - "node_modules/@sentry/hub": { - "version": "5.30.0", - "resolved": "https://registry.npmjs.org/@sentry/hub/-/hub-5.30.0.tgz", - "integrity": "sha512-2tYrGnzb1gKz2EkMDQcfLrDTvmGcQPuWxLnJKXJvYTQDGLlEvi2tWz1VIHjunmOvJrB5aIQLhm+dcMRwFZDCqQ==", + "node_modules/conventional-changelog-angular": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/conventional-changelog-angular/-/conventional-changelog-angular-7.0.0.tgz", + "integrity": "sha512-ROjNchA9LgfNMTTFSIWPzebCwOGFdgkEq45EnvvrmSLvCtAw0HSmrCs7/ty+wAeYUZyNay0YMUNYFTRL72PkBQ==", "dev": true, - "license": "BSD-3-Clause", + "license": "ISC", "dependencies": { - "@sentry/types": "5.30.0", - "@sentry/utils": "5.30.0", - "tslib": "^1.9.3" + "compare-func": "^2.0.0" }, "engines": { - "node": ">=6" + "node": ">=16" } }, - "node_modules/@sentry/hub/node_modules/tslib": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", - "dev": true, - "license": "0BSD" - }, - "node_modules/@sentry/minimal": { - "version": "5.30.0", - "resolved": "https://registry.npmjs.org/@sentry/minimal/-/minimal-5.30.0.tgz", - "integrity": "sha512-BwWb/owZKtkDX+Sc4zCSTNcvZUq7YcH3uAVlmh/gtR9rmUvbzAA3ewLuB3myi4wWRAMEtny6+J/FN/x+2wn9Xw==", + "node_modules/conventional-changelog-conventionalcommits": { + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/conventional-changelog-conventionalcommits/-/conventional-changelog-conventionalcommits-7.0.2.tgz", + "integrity": "sha512-NKXYmMR/Hr1DevQegFB4MwfM5Vv0m4UIxKZTTYuD98lpTknaZlSRrDOG4X7wIXpGkfsYxZTghUN+Qq+T0YQI7w==", "dev": true, - "license": "BSD-3-Clause", + "license": "ISC", "dependencies": { - "@sentry/hub": "5.30.0", - "@sentry/types": "5.30.0", - "tslib": "^1.9.3" + "compare-func": "^2.0.0" }, "engines": { - "node": ">=6" + "node": ">=16" } }, - "node_modules/@sentry/minimal/node_modules/tslib": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", - "dev": true, - "license": "0BSD" - }, - "node_modules/@sentry/node": { - "version": "5.30.0", - "resolved": "https://registry.npmjs.org/@sentry/node/-/node-5.30.0.tgz", - "integrity": "sha512-Br5oyVBF0fZo6ZS9bxbJZG4ApAjRqAnqFFurMVJJdunNb80brh7a5Qva2kjhm+U6r9NJAB5OmDyPkA1Qnt+QVg==", + "node_modules/conventional-commits-parser": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/conventional-commits-parser/-/conventional-commits-parser-5.0.0.tgz", + "integrity": "sha512-ZPMl0ZJbw74iS9LuX9YIAiW8pfM5p3yh2o/NbXHbkFuZzY5jvdi5jFycEOkmBW5H5I7nA+D6f3UcsCLP2vvSEA==", "dev": true, - "license": "BSD-3-Clause", + "license": "MIT", "dependencies": { - "@sentry/core": "5.30.0", - "@sentry/hub": "5.30.0", - "@sentry/tracing": "5.30.0", - "@sentry/types": "5.30.0", - "@sentry/utils": "5.30.0", - "cookie": "^0.4.1", - "https-proxy-agent": "^5.0.0", - "lru_map": "^0.3.3", - "tslib": "^1.9.3" + "is-text-path": "^2.0.0", + "JSONStream": "^1.3.5", + "meow": "^12.0.1", + "split2": "^4.0.0" + }, + "bin": { + "conventional-commits-parser": "cli.mjs" }, "engines": { - "node": ">=6" + "node": ">=16" } }, - "node_modules/@sentry/node/node_modules/cookie": { - "version": "0.4.2", - "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.4.2.tgz", - "integrity": "sha512-aSWTXFzaKWkvHO1Ny/s+ePFpvKsPnjc551iI41v3ny/ow6tBG5Vd+FuqGNhh1LxOmVzOlGUriIlOaokOvhaStA==", - "dev": true, + "node_modules/convert-source-map": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz", + "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==", + "license": "MIT" + }, + "node_modules/cookie": { + "version": "0.7.2", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.7.2.tgz", + "integrity": "sha512-yki5XnKuf750l50uGTllt6kKILY4nQ1eNIQatoXEByZ5dWgnKqbnqmTrBE5B4N7lrMJKQ2ytWMiTO2o0v6Ew/w==", "license": "MIT", "engines": { "node": ">= 0.6" } }, - "node_modules/@sentry/node/node_modules/tslib": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", - "dev": true, - "license": "0BSD" + "node_modules/cookie-es": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/cookie-es/-/cookie-es-1.2.2.tgz", + "integrity": "sha512-+W7VmiVINB+ywl1HGXJXmrqkOhpKrIiVZV6tQuV54ZyQC7MMuBt81Vc336GMLoHBq5hV/F9eXgt5Mnx0Rha5Fg==", + "license": "MIT" }, - "node_modules/@sentry/tracing": { - "version": "5.30.0", - "resolved": "https://registry.npmjs.org/@sentry/tracing/-/tracing-5.30.0.tgz", - "integrity": "sha512-dUFowCr0AIMwiLD7Fs314Mdzcug+gBVo/+NCMyDw8tFxJkwWAKl7Qa2OZxLQ0ZHjakcj1hNKfCQJ9rhyfOl4Aw==", - "dev": true, + "node_modules/cookie-signature": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.2.2.tgz", + "integrity": "sha512-D76uU73ulSXrD1UXF4KE2TMxVVwhsnCgfAyTg9k8P6KGZjlXKrOLe4dJQKI3Bxi5wjesZoFXJWElNWBjPZMbhg==", "license": "MIT", - "dependencies": { - "@sentry/hub": "5.30.0", - "@sentry/minimal": "5.30.0", - "@sentry/types": "5.30.0", - "@sentry/utils": "5.30.0", - "tslib": "^1.9.3" - }, "engines": { - "node": ">=6" + "node": ">=6.6.0" } }, - "node_modules/@sentry/tracing/node_modules/tslib": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", + "node_modules/cookiejar": { + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/cookiejar/-/cookiejar-2.1.4.tgz", + "integrity": "sha512-LDx6oHrK+PhzLKJU9j5S7/Y3jM/mUHvD/DeI1WQmJn652iPC5Y4TBzC9l+5OMOXlyTTA+SmVUPm0HQUwpD5Jqw==", "dev": true, - "license": "0BSD" + "license": "MIT" }, - "node_modules/@sentry/types": { - "version": "5.30.0", - "resolved": "https://registry.npmjs.org/@sentry/types/-/types-5.30.0.tgz", - "integrity": "sha512-R8xOqlSTZ+htqrfteCWU5Nk0CDN5ApUTvrlvBuiH1DyP6czDZ4ktbZB0hAgBlVcK0U+qpD3ag3Tqqpa5Q67rPw==", - "dev": true, - "license": "BSD-3-Clause", - "engines": { - "node": ">=6" + "node_modules/copy-to-clipboard": { + "version": "3.3.3", + "resolved": "https://registry.npmjs.org/copy-to-clipboard/-/copy-to-clipboard-3.3.3.tgz", + "integrity": "sha512-2KV8NhB5JqC3ky0r9PMCAZKbUHSwtEo4CwCs0KXgruG43gX5PMqDEBbVU4OUzw2MuAWUfsuFmWvEKG5QRfSnJA==", + "license": "MIT", + "dependencies": { + "toggle-selection": "^1.0.6" } }, - "node_modules/@sentry/utils": { - "version": "5.30.0", - "resolved": "https://registry.npmjs.org/@sentry/utils/-/utils-5.30.0.tgz", - "integrity": "sha512-zaYmoH0NWWtvnJjC9/CBseXMtKHm/tm40sz3YfJRxeQjyzRqNQPgivpd9R/oDJCYj999mzdW382p/qi2ypjLww==", - "dev": true, - "license": "BSD-3-Clause", + "node_modules/copy-webpack-plugin": { + "version": "11.0.0", + "resolved": "https://registry.npmjs.org/copy-webpack-plugin/-/copy-webpack-plugin-11.0.0.tgz", + "integrity": "sha512-fX2MWpamkW0hZxMEg0+mYnA40LTosOSa5TqZ9GYIBzyJa9C3QUaMPSE2xAi/buNr8u89SfD9wHSQVBzrRa/SOQ==", + "license": "MIT", "dependencies": { - "@sentry/types": "5.30.0", - "tslib": "^1.9.3" + "fast-glob": "^3.2.11", + "glob-parent": "^6.0.1", + "globby": "^13.1.1", + "normalize-path": "^3.0.0", + "schema-utils": "^4.0.0", + "serialize-javascript": "^6.0.0" }, "engines": { - "node": ">=6" + "node": ">= 14.15.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "webpack": "^5.1.0" } }, - "node_modules/@sentry/utils/node_modules/tslib": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", - "dev": true, - "license": "0BSD" - }, - "node_modules/@sideway/address": { - "version": "4.1.5", - "resolved": "https://registry.npmjs.org/@sideway/address/-/address-4.1.5.tgz", - "integrity": "sha512-IqO/DUQHUkPeixNQ8n0JA6102hT9CmaljNTPmQ1u8MEhBo/R4Q8eKLN/vGZxuebwOroDB4cbpjheD4+/sKFK4Q==", - "license": "BSD-3-Clause", + "node_modules/copy-webpack-plugin/node_modules/ajv": { + "version": "8.17.1", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.17.1.tgz", + "integrity": "sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g==", + "license": "MIT", "dependencies": { - "@hapi/hoek": "^9.0.0" + "fast-deep-equal": "^3.1.3", + "fast-uri": "^3.0.1", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" } }, - "node_modules/@sideway/formula": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/@sideway/formula/-/formula-3.0.1.tgz", - "integrity": "sha512-/poHZJJVjx3L+zVD6g9KgHfYnb443oi7wLu/XKojDviHy6HOEOA6z1Trk5aR1dGcmPenJEgb2sK2I80LeS3MIg==", - "license": "BSD-3-Clause" + "node_modules/copy-webpack-plugin/node_modules/ajv-keywords": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-5.1.0.tgz", + "integrity": "sha512-YCS/JNFAUyr5vAuhk1DWm1CBxRHW9LbJ2ozWeemrIqpbsqKjHVxYPyi5GC0rjZIT5JxJ3virVTS8wk4i/Z+krw==", + "license": "MIT", + "dependencies": { + "fast-deep-equal": "^3.1.3" + }, + "peerDependencies": { + "ajv": "^8.8.2" + } }, - "node_modules/@sideway/pinpoint": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/@sideway/pinpoint/-/pinpoint-2.0.0.tgz", - "integrity": "sha512-RNiOoTPkptFtSVzQevY/yWtZwf/RxyVnPy/OcA9HBM3MlGDnBEYL5B41H0MTn0Uec8Hi+2qUtTfG2WWZBmMejQ==", - "license": "BSD-3-Clause" + "node_modules/copy-webpack-plugin/node_modules/globby": { + "version": "13.2.2", + "resolved": "https://registry.npmjs.org/globby/-/globby-13.2.2.tgz", + "integrity": "sha512-Y1zNGV+pzQdh7H39l9zgB4PJqjRNqydvdYCDG4HFXM4XuvSaQQlEc91IU1yALL8gUTDomgBAfz3XJdmUS+oo0w==", + "license": "MIT", + "dependencies": { + "dir-glob": "^3.0.1", + "fast-glob": "^3.3.0", + "ignore": "^5.2.4", + "merge2": "^1.4.1", + "slash": "^4.0.0" + }, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } }, - "node_modules/@sinclair/typebox": { - "version": "0.27.8", - "resolved": "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.27.8.tgz", - "integrity": "sha512-+Fj43pSMwJs4KRrH/938Uf+uAELIgVBmQzg/q1YG10djyfA3TnrU8N8XzqCh/okZdszqBQTZf96idMfE5lnwTA==", + "node_modules/copy-webpack-plugin/node_modules/json-schema-traverse": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", + "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", "license": "MIT" }, - "node_modules/@sindresorhus/is": { - "version": "5.6.0", - "resolved": "https://registry.npmjs.org/@sindresorhus/is/-/is-5.6.0.tgz", - "integrity": "sha512-TV7t8GKYaJWsn00tFDqBw8+Uqmr8A0fRU1tvTQhyZzGv0sJCGRQL3JGMI3ucuKo3XIZdUP+Lx7/gh2t3lewy7g==", - "dev": true, + "node_modules/copy-webpack-plugin/node_modules/schema-utils": { + "version": "4.3.3", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-4.3.3.tgz", + "integrity": "sha512-eflK8wEtyOE6+hsaRVPxvUKYCpRgzLqDTb8krvAsRIwOGlHoSgYLgBXoubGgLd2fT41/OUYdb48v4k4WWHQurA==", "license": "MIT", + "dependencies": { + "@types/json-schema": "^7.0.9", + "ajv": "^8.9.0", + "ajv-formats": "^2.1.1", + "ajv-keywords": "^5.1.0" + }, "engines": { - "node": ">=14.16" + "node": ">= 10.13.0" }, "funding": { - "url": "https://github.com/sindresorhus/is?sponsor=1" + "type": "opencollective", + "url": "https://opencollective.com/webpack" } }, - "node_modules/@sinonjs/commons": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/@sinonjs/commons/-/commons-3.0.1.tgz", - "integrity": "sha512-K3mCHKQ9sVh8o1C9cxkwxaOmXoAMlDxC1mYyHrjqOWEcBjYr76t96zL2zlj5dUGZ3HSw240X1qgH3Mjf1yJWpQ==", - "license": "BSD-3-Clause", - "dependencies": { - "type-detect": "4.0.8" + "node_modules/copy-webpack-plugin/node_modules/slash": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-4.0.0.tgz", + "integrity": "sha512-3dOsAHXXUkQTpOYcoAxLIorMTp4gIQr5IW3iVb7A7lFIp0VHhnynm9izx6TssdrIcVIESAlVjtnO2K8bg+Coew==", + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/@sinonjs/fake-timers": { - "version": "10.3.0", - "resolved": "https://registry.npmjs.org/@sinonjs/fake-timers/-/fake-timers-10.3.0.tgz", - "integrity": "sha512-V4BG07kuYSUkTCSBHG8G8TNhM+F19jXFWnQtzj+we8DrkpSBCee9Z3Ms8yiGer/dlmhe35/Xdgyo3/0rQKg7YA==", - "license": "BSD-3-Clause", - "dependencies": { - "@sinonjs/commons": "^3.0.0" + "node_modules/core-js": { + "version": "3.47.0", + "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.47.0.tgz", + "integrity": "sha512-c3Q2VVkGAUyupsjRnaNX6u8Dq2vAdzm9iuPj5FW0fRxzlxgq9Q39MDq10IvmQSpLgHQNyQzQmOo6bgGHmH3NNg==", + "hasInstallScript": true, + "license": "MIT", + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/core-js" } }, - "node_modules/@smithy/abort-controller": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/@smithy/abort-controller/-/abort-controller-4.2.0.tgz", - "integrity": "sha512-PLUYa+SUKOEZtXFURBu/CNxlsxfaFGxSBPcStL13KpVeVWIfdezWyDqkz7iDLmwnxojXD0s5KzuB5HGHvt4Aeg==", - "license": "Apache-2.0", + "node_modules/core-js-compat": { + "version": "3.45.1", + "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.45.1.tgz", + "integrity": "sha512-tqTt5T4PzsMIZ430XGviK4vzYSoeNJ6CXODi6c/voxOT6IZqBht5/EKaSNnYiEjjRYxjVz7DQIsOsY0XNi8PIA==", + "license": "MIT", "dependencies": { - "@smithy/types": "^4.6.0", - "tslib": "^2.6.2" + "browserslist": "^4.25.3" }, - "engines": { - "node": ">=18.0.0" + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/core-js" } }, - "node_modules/@smithy/config-resolver": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/@smithy/config-resolver/-/config-resolver-4.3.0.tgz", - "integrity": "sha512-9oH+n8AVNiLPK/iK/agOsoWfrKZ3FGP3502tkksd6SRsKMYiu7AFX0YXo6YBADdsAj7C+G/aLKdsafIJHxuCkQ==", - "license": "Apache-2.0", + "node_modules/core-js-pure": { + "version": "3.47.0", + "resolved": "https://registry.npmjs.org/core-js-pure/-/core-js-pure-3.47.0.tgz", + "integrity": "sha512-BcxeDbzUrRnXGYIVAGFtcGQVNpFcUhVjr6W7F8XktvQW2iJP9e66GP6xdKotCRFlrxBvNIBrhwKteRXqMV86Nw==", + "hasInstallScript": true, + "license": "MIT", + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/core-js" + } + }, + "node_modules/core-util-is": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz", + "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==", + "license": "MIT" + }, + "node_modules/cors": { + "version": "2.8.5", + "resolved": "https://registry.npmjs.org/cors/-/cors-2.8.5.tgz", + "integrity": "sha512-KIHbLJqu73RGr/hnbrO9uBeixNGuvSQjul/jdFvS/KFSIH1hWVd1ng7zOHx+YrEfInLG7q4n6GHQ9cDtxv/P6g==", + "license": "MIT", "dependencies": { - "@smithy/node-config-provider": "^4.3.0", - "@smithy/types": "^4.6.0", - "@smithy/util-config-provider": "^4.2.0", - "@smithy/util-middleware": "^4.2.0", - "tslib": "^2.6.2" + "object-assign": "^4", + "vary": "^1" }, "engines": { - "node": ">=18.0.0" + "node": ">= 0.10" } }, - "node_modules/@smithy/core": { - "version": "3.14.0", - "resolved": "https://registry.npmjs.org/@smithy/core/-/core-3.14.0.tgz", - "integrity": "sha512-XJ4z5FxvY/t0Dibms/+gLJrI5niRoY0BCmE02fwmPcRYFPI4KI876xaE79YGWIKnEslMbuQPsIEsoU/DXa0DoA==", - "license": "Apache-2.0", + "node_modules/cose-base": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/cose-base/-/cose-base-1.0.3.tgz", + "integrity": "sha512-s9whTXInMSgAp/NVXVNuVxVKzGH2qck3aQlVHxDCdAEPgtMKwc4Wq6/QKhgdEdgbLSi9rBTAcPoRa6JpiG4ksg==", + "license": "MIT", "dependencies": { - "@smithy/middleware-serde": "^4.2.0", - "@smithy/protocol-http": "^5.3.0", - "@smithy/types": "^4.6.0", - "@smithy/util-base64": "^4.2.0", - "@smithy/util-body-length-browser": "^4.2.0", - "@smithy/util-middleware": "^4.2.0", - "@smithy/util-stream": "^4.4.0", - "@smithy/util-utf8": "^4.2.0", - "@smithy/uuid": "^1.1.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=18.0.0" + "layout-base": "^1.0.0" } }, - "node_modules/@smithy/credential-provider-imds": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/@smithy/credential-provider-imds/-/credential-provider-imds-4.2.0.tgz", - "integrity": "sha512-SOhFVvFH4D5HJZytb0bLKxCrSnwcqPiNlrw+S4ZXjMnsC+o9JcUQzbZOEQcA8yv9wJFNhfsUiIUKiEnYL68Big==", - "license": "Apache-2.0", + "node_modules/cosmiconfig": { + "version": "9.0.0", + "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-9.0.0.tgz", + "integrity": "sha512-itvL5h8RETACmOTFc4UfIyB2RfEHi71Ax6E/PivVxq9NseKbOWpeyHEOIbmAw1rs8Ak0VursQNww7lf7YtUwzg==", + "dev": true, + "license": "MIT", + "peer": true, "dependencies": { - "@smithy/node-config-provider": "^4.3.0", - "@smithy/property-provider": "^4.2.0", - "@smithy/types": "^4.6.0", - "@smithy/url-parser": "^4.2.0", - "tslib": "^2.6.2" + "env-paths": "^2.2.1", + "import-fresh": "^3.3.0", + "js-yaml": "^4.1.0", + "parse-json": "^5.2.0" }, "engines": { - "node": ">=18.0.0" + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/d-fischer" + }, + "peerDependencies": { + "typescript": ">=4.9.5" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } } }, - "node_modules/@smithy/fetch-http-handler": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/@smithy/fetch-http-handler/-/fetch-http-handler-5.3.0.tgz", - "integrity": "sha512-BG3KSmsx9A//KyIfw+sqNmWFr1YBUr+TwpxFT7yPqAk0yyDh7oSNgzfNH7pS6OC099EGx2ltOULvumCFe8bcgw==", - "license": "Apache-2.0", + "node_modules/cosmiconfig-typescript-loader": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/cosmiconfig-typescript-loader/-/cosmiconfig-typescript-loader-6.1.0.tgz", + "integrity": "sha512-tJ1w35ZRUiM5FeTzT7DtYWAFFv37ZLqSRkGi2oeCK1gPhvaWjkAtfXvLmvE1pRfxxp9aQo6ba/Pvg1dKj05D4g==", + "dev": true, + "license": "MIT", "dependencies": { - "@smithy/protocol-http": "^5.3.0", - "@smithy/querystring-builder": "^4.2.0", - "@smithy/types": "^4.6.0", - "@smithy/util-base64": "^4.2.0", - "tslib": "^2.6.2" + "jiti": "^2.4.1" }, "engines": { - "node": ">=18.0.0" + "node": ">=v18" + }, + "peerDependencies": { + "@types/node": "*", + "cosmiconfig": ">=9", + "typescript": ">=5" } }, - "node_modules/@smithy/hash-node": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/@smithy/hash-node/-/hash-node-4.2.0.tgz", - "integrity": "sha512-ugv93gOhZGysTctZh9qdgng8B+xO0cj+zN0qAZ+Sgh7qTQGPOJbMdIuyP89KNfUyfAqFSNh5tMvC+h2uCpmTtA==", - "license": "Apache-2.0", + "node_modules/cpu-features": { + "version": "0.0.10", + "resolved": "https://registry.npmjs.org/cpu-features/-/cpu-features-0.0.10.tgz", + "integrity": "sha512-9IkYqtX3YHPCzoVg1Py+o9057a3i0fp7S530UWokCSaFVTc7CwXPRiOjRjBQQ18ZCNafx78YfnG+HALxtVmOGA==", + "dev": true, + "hasInstallScript": true, + "optional": true, "dependencies": { - "@smithy/types": "^4.6.0", - "@smithy/util-buffer-from": "^4.2.0", - "@smithy/util-utf8": "^4.2.0", - "tslib": "^2.6.2" + "buildcheck": "~0.0.6", + "nan": "^2.19.0" }, "engines": { - "node": ">=18.0.0" + "node": ">=10.0.0" } }, - "node_modules/@smithy/invalid-dependency": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/@smithy/invalid-dependency/-/invalid-dependency-4.2.0.tgz", - "integrity": "sha512-ZmK5X5fUPAbtvRcUPtk28aqIClVhbfcmfoS4M7UQBTnDdrNxhsrxYVv0ZEl5NaPSyExsPWqL4GsPlRvtlwg+2A==", + "node_modules/crc-32": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/crc-32/-/crc-32-1.2.2.tgz", + "integrity": "sha512-ROmzCKrTnOwybPcJApAA6WBWij23HVfGVNKqqrZpuyZOHqK2CwHSvpGuyt/UNNvaIjEd8X5IFGp4Mh+Ie1IHJQ==", "license": "Apache-2.0", - "dependencies": { - "@smithy/types": "^4.6.0", - "tslib": "^2.6.2" + "bin": { + "crc32": "bin/crc32.njs" }, "engines": { - "node": ">=18.0.0" + "node": ">=0.8" } }, - "node_modules/@smithy/is-array-buffer": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/@smithy/is-array-buffer/-/is-array-buffer-4.2.0.tgz", - "integrity": "sha512-DZZZBvC7sjcYh4MazJSGiWMI2L7E0oCiRHREDzIxi/M2LY79/21iXt6aPLHge82wi5LsuRF5A06Ds3+0mlh6CQ==", - "license": "Apache-2.0", + "node_modules/crc32-stream": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/crc32-stream/-/crc32-stream-4.0.3.tgz", + "integrity": "sha512-NT7w2JVU7DFroFdYkeq8cywxrgjPHWkdX1wjpRQXPX5Asews3tA+Ght6lddQO5Mkumffp3X7GEqku3epj2toIw==", + "dev": true, + "license": "MIT", "dependencies": { - "tslib": "^2.6.2" + "crc-32": "^1.2.0", + "readable-stream": "^3.4.0" }, "engines": { - "node": ">=18.0.0" + "node": ">= 10" } }, - "node_modules/@smithy/middleware-content-length": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/@smithy/middleware-content-length/-/middleware-content-length-4.2.0.tgz", - "integrity": "sha512-6ZAnwrXFecrA4kIDOcz6aLBhU5ih2is2NdcZtobBDSdSHtE9a+MThB5uqyK4XXesdOCvOcbCm2IGB95birTSOQ==", - "license": "Apache-2.0", + "node_modules/crc32-stream/node_modules/readable-stream": { + "version": "3.6.2", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", + "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", + "dev": true, + "license": "MIT", "dependencies": { - "@smithy/protocol-http": "^5.3.0", - "@smithy/types": "^4.6.0", - "tslib": "^2.6.2" + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" }, "engines": { - "node": ">=18.0.0" + "node": ">= 6" } }, - "node_modules/@smithy/middleware-endpoint": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/@smithy/middleware-endpoint/-/middleware-endpoint-4.3.0.tgz", - "integrity": "sha512-jFVjuQeV8TkxaRlcCNg0GFVgg98tscsmIrIwRFeC74TIUyLE3jmY9xgc1WXrPQYRjQNK3aRoaIk6fhFRGOIoGw==", - "license": "Apache-2.0", + "node_modules/create-ecdh": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/create-ecdh/-/create-ecdh-4.0.4.tgz", + "integrity": "sha512-mf+TCx8wWc9VpuxfP2ht0iSISLZnt0JgWlrOKZiNqyUZWnjIaCIVNQArMHnCZKfEYRg6IM7A+NeJoN8gf/Ws0A==", + "dev": true, + "license": "MIT", "dependencies": { - "@smithy/core": "^3.14.0", - "@smithy/middleware-serde": "^4.2.0", - "@smithy/node-config-provider": "^4.3.0", - "@smithy/shared-ini-file-loader": "^4.3.0", - "@smithy/types": "^4.6.0", - "@smithy/url-parser": "^4.2.0", - "@smithy/util-middleware": "^4.2.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=18.0.0" + "bn.js": "^4.1.0", + "elliptic": "^6.5.3" } }, - "node_modules/@smithy/middleware-retry": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/@smithy/middleware-retry/-/middleware-retry-4.4.0.tgz", - "integrity": "sha512-yaVBR0vQnOnzex45zZ8ZrPzUnX73eUC8kVFaAAbn04+6V7lPtxn56vZEBBAhgS/eqD6Zm86o6sJs6FuQVoX5qg==", - "license": "Apache-2.0", + "node_modules/create-ecdh/node_modules/bn.js": { + "version": "4.12.2", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.2.tgz", + "integrity": "sha512-n4DSx829VRTRByMRGdjQ9iqsN0Bh4OolPsFnaZBLcbi8iXcB+kJ9s7EnRt4wILZNV3kPLHkRVfOc/HvhC3ovDw==", + "dev": true, + "license": "MIT" + }, + "node_modules/create-hash": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/create-hash/-/create-hash-1.2.0.tgz", + "integrity": "sha512-z00bCGNHDG8mHAkP7CtT1qVu+bFQUPjYq/4Iv3C3kWjTFV10zIjfSoeqXo9Asws8gwSHDGj/hl2u4OGIjapeCg==", + "license": "MIT", "dependencies": { - "@smithy/node-config-provider": "^4.3.0", - "@smithy/protocol-http": "^5.3.0", - "@smithy/service-error-classification": "^4.2.0", - "@smithy/smithy-client": "^4.7.0", - "@smithy/types": "^4.6.0", - "@smithy/util-middleware": "^4.2.0", - "@smithy/util-retry": "^4.2.0", - "@smithy/uuid": "^1.1.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=18.0.0" + "cipher-base": "^1.0.1", + "inherits": "^2.0.1", + "md5.js": "^1.3.4", + "ripemd160": "^2.0.1", + "sha.js": "^2.4.0" } }, - "node_modules/@smithy/middleware-serde": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/@smithy/middleware-serde/-/middleware-serde-4.2.0.tgz", - "integrity": "sha512-rpTQ7D65/EAbC6VydXlxjvbifTf4IH+sADKg6JmAvhkflJO2NvDeyU9qsWUNBelJiQFcXKejUHWRSdmpJmEmiw==", - "license": "Apache-2.0", + "node_modules/create-hmac": { + "version": "1.1.7", + "resolved": "https://registry.npmjs.org/create-hmac/-/create-hmac-1.1.7.tgz", + "integrity": "sha512-MJG9liiZ+ogc4TzUwuvbER1JRdgvUFSB5+VR/g5h82fGaIRWMWddtKBHi7/sVhfjQZ6SehlyhvQYrcYkaUIpLg==", + "license": "MIT", "dependencies": { - "@smithy/protocol-http": "^5.3.0", - "@smithy/types": "^4.6.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=18.0.0" + "cipher-base": "^1.0.3", + "create-hash": "^1.1.0", + "inherits": "^2.0.1", + "ripemd160": "^2.0.0", + "safe-buffer": "^5.0.1", + "sha.js": "^2.4.8" } }, - "node_modules/@smithy/middleware-stack": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/@smithy/middleware-stack/-/middleware-stack-4.2.0.tgz", - "integrity": "sha512-G5CJ//eqRd9OARrQu9MK1H8fNm2sMtqFh6j8/rPozhEL+Dokpvi1Og+aCixTuwDAGZUkJPk6hJT5jchbk/WCyg==", - "license": "Apache-2.0", + "node_modules/create-jest": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/create-jest/-/create-jest-29.7.0.tgz", + "integrity": "sha512-Adz2bdH0Vq3F53KEMJOoftQFutWCukm6J24wbPWRO4k1kMY7gS7ds/uoJkNuV8wDCtWWnuwGcJwpWcih+zEW1Q==", + "dev": true, + "license": "MIT", "dependencies": { - "@smithy/types": "^4.6.0", - "tslib": "^2.6.2" + "@jest/types": "^29.6.3", + "chalk": "^4.0.0", + "exit": "^0.1.2", + "graceful-fs": "^4.2.9", + "jest-config": "^29.7.0", + "jest-util": "^29.7.0", + "prompts": "^2.0.1" + }, + "bin": { + "create-jest": "bin/create-jest.js" }, "engines": { - "node": ">=18.0.0" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/@smithy/node-config-provider": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/@smithy/node-config-provider/-/node-config-provider-4.3.0.tgz", - "integrity": "sha512-5QgHNuWdT9j9GwMPPJCKxy2KDxZ3E5l4M3/5TatSZrqYVoEiqQrDfAq8I6KWZw7RZOHtVtCzEPdYz7rHZixwcA==", - "license": "Apache-2.0", + "node_modules/create-require": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/create-require/-/create-require-1.1.1.tgz", + "integrity": "sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==", + "devOptional": true, + "license": "MIT" + }, + "node_modules/cron": { + "version": "4.3.3", + "resolved": "https://registry.npmjs.org/cron/-/cron-4.3.3.tgz", + "integrity": "sha512-B/CJj5yL3sjtlun6RtYHvoSB26EmQ2NUmhq9ZiJSyKIM4K/fqfh9aelDFlIayD2YMeFZqWLi9hHV+c+pq2Djkw==", + "license": "MIT", "dependencies": { - "@smithy/property-provider": "^4.2.0", - "@smithy/shared-ini-file-loader": "^4.3.0", - "@smithy/types": "^4.6.0", - "tslib": "^2.6.2" + "@types/luxon": "~3.7.0", + "luxon": "~3.7.0" }, "engines": { - "node": ">=18.0.0" + "node": ">=18.x" } }, - "node_modules/@smithy/node-http-handler": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/@smithy/node-http-handler/-/node-http-handler-4.3.0.tgz", - "integrity": "sha512-RHZ/uWCmSNZ8cneoWEVsVwMZBKy/8123hEpm57vgGXA3Irf/Ja4v9TVshHK2ML5/IqzAZn0WhINHOP9xl+Qy6Q==", - "license": "Apache-2.0", + "node_modules/cross-fetch": { + "version": "3.1.6", + "resolved": "https://registry.npmjs.org/cross-fetch/-/cross-fetch-3.1.6.tgz", + "integrity": "sha512-riRvo06crlE8HiqOwIpQhxwdOk4fOeR7FVM/wXoxchFEqMNUjvbs3bfo4OTgMEMHzppd4DxFBDbyySj8Cv781g==", + "license": "MIT", "dependencies": { - "@smithy/abort-controller": "^4.2.0", - "@smithy/protocol-http": "^5.3.0", - "@smithy/querystring-builder": "^4.2.0", - "@smithy/types": "^4.6.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=18.0.0" + "node-fetch": "^2.6.11" } }, - "node_modules/@smithy/property-provider": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/@smithy/property-provider/-/property-provider-4.2.0.tgz", - "integrity": "sha512-rV6wFre0BU6n/tx2Ztn5LdvEdNZ2FasQbPQmDOPfV9QQyDmsCkOAB0osQjotRCQg+nSKFmINhyda0D3AnjSBJw==", - "license": "Apache-2.0", + "node_modules/cross-spawn": { + "version": "7.0.6", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz", + "integrity": "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==", + "license": "MIT", "dependencies": { - "@smithy/types": "^4.6.0", - "tslib": "^2.6.2" + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" }, "engines": { - "node": ">=18.0.0" + "node": ">= 8" } }, - "node_modules/@smithy/protocol-http": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/@smithy/protocol-http/-/protocol-http-5.3.0.tgz", - "integrity": "sha512-6POSYlmDnsLKb7r1D3SVm7RaYW6H1vcNcTWGWrF7s9+2noNYvUsm7E4tz5ZQ9HXPmKn6Hb67pBDRIjrT4w/d7Q==", - "license": "Apache-2.0", + "node_modules/crossws": { + "version": "0.3.5", + "resolved": "https://registry.npmjs.org/crossws/-/crossws-0.3.5.tgz", + "integrity": "sha512-ojKiDvcmByhwa8YYqbQI/hg7MEU0NC03+pSdEq4ZUnZR9xXpwk7E43SMNGkn+JxJGPFtNvQ48+vV2p+P1ml5PA==", + "license": "MIT", "dependencies": { - "@smithy/types": "^4.6.0", - "tslib": "^2.6.2" - }, + "uncrypto": "^0.1.3" + } + }, + "node_modules/crypt": { + "version": "0.0.2", + "resolved": "https://registry.npmjs.org/crypt/-/crypt-0.0.2.tgz", + "integrity": "sha512-mCxBlsHFYh9C+HVpiEacem8FEBnMXgU9gy4zmNC+SXAZNB/1idgp/aulFJ4FgCi7GPEVbfyng092GqL2k2rmow==", + "dev": true, + "license": "BSD-3-Clause", "engines": { - "node": ">=18.0.0" + "node": "*" } }, - "node_modules/@smithy/querystring-builder": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/@smithy/querystring-builder/-/querystring-builder-4.2.0.tgz", - "integrity": "sha512-Q4oFD0ZmI8yJkiPPeGUITZj++4HHYCW3pYBYfIobUCkYpI6mbkzmG1MAQQ3lJYYWj3iNqfzOenUZu+jqdPQ16A==", - "license": "Apache-2.0", + "node_modules/crypto-browserify": { + "version": "3.12.1", + "resolved": "https://registry.npmjs.org/crypto-browserify/-/crypto-browserify-3.12.1.tgz", + "integrity": "sha512-r4ESw/IlusD17lgQi1O20Fa3qNnsckR126TdUuBgAu7GBYSIPvdNyONd3Zrxh0xCwA4+6w/TDArBPsMvhur+KQ==", + "dev": true, + "license": "MIT", "dependencies": { - "@smithy/types": "^4.6.0", - "@smithy/util-uri-escape": "^4.2.0", - "tslib": "^2.6.2" + "browserify-cipher": "^1.0.1", + "browserify-sign": "^4.2.3", + "create-ecdh": "^4.0.4", + "create-hash": "^1.2.0", + "create-hmac": "^1.1.7", + "diffie-hellman": "^5.0.3", + "hash-base": "~3.0.4", + "inherits": "^2.0.4", + "pbkdf2": "^3.1.2", + "public-encrypt": "^4.0.3", + "randombytes": "^2.1.0", + "randomfill": "^1.0.4" }, "engines": { - "node": ">=18.0.0" + "node": ">= 0.10" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/@smithy/querystring-parser": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/@smithy/querystring-parser/-/querystring-parser-4.2.0.tgz", - "integrity": "sha512-BjATSNNyvVbQxOOlKse0b0pSezTWGMvA87SvoFoFlkRsKXVsN3bEtjCxvsNXJXfnAzlWFPaT9DmhWy1vn0sNEA==", - "license": "Apache-2.0", + "node_modules/crypto-browserify/node_modules/hash-base": { + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/hash-base/-/hash-base-3.0.5.tgz", + "integrity": "sha512-vXm0l45VbcHEVlTCzs8M+s0VeYsB2lnlAaThoLKGXr3bE/VWDOelNUnycUPEhKEaXARL2TEFjBOyUiM6+55KBg==", + "dev": true, + "license": "MIT", "dependencies": { - "@smithy/types": "^4.6.0", - "tslib": "^2.6.2" + "inherits": "^2.0.4", + "safe-buffer": "^5.2.1" }, "engines": { - "node": ">=18.0.0" + "node": ">= 0.10" } }, - "node_modules/@smithy/service-error-classification": { + "node_modules/crypto-js": { "version": "4.2.0", - "resolved": "https://registry.npmjs.org/@smithy/service-error-classification/-/service-error-classification-4.2.0.tgz", - "integrity": "sha512-Ylv1ttUeKatpR0wEOMnHf1hXMktPUMObDClSWl2TpCVT4DwtJhCeighLzSLbgH3jr5pBNM0LDXT5yYxUvZ9WpA==", - "license": "Apache-2.0", + "resolved": "https://registry.npmjs.org/crypto-js/-/crypto-js-4.2.0.tgz", + "integrity": "sha512-KALDyEYgpY+Rlob/iriUtjV6d5Eq+Y191A5g4UqLAi8CyGP9N1+FdVbkc1SxKc2r4YAYqG8JzO2KGL+AizD70Q==", + "license": "MIT" + }, + "node_modules/crypto-random-string": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/crypto-random-string/-/crypto-random-string-4.0.0.tgz", + "integrity": "sha512-x8dy3RnvYdlUcPOjkEHqozhiwzKNSq7GcPuXFbnyMOCHxX8V3OgIg/pYuabl2sbUPfIJaeAQB7PMOK8DFIdoRA==", + "license": "MIT", "dependencies": { - "@smithy/types": "^4.6.0" + "type-fest": "^1.0.1" }, "engines": { - "node": ">=18.0.0" + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/@smithy/shared-ini-file-loader": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/@smithy/shared-ini-file-loader/-/shared-ini-file-loader-4.3.0.tgz", - "integrity": "sha512-VCUPPtNs+rKWlqqntX0CbVvWyjhmX30JCtzO+s5dlzzxrvSfRh5SY0yxnkirvc1c80vdKQttahL71a9EsdolSQ==", - "license": "Apache-2.0", + "node_modules/crypto-random-string/node_modules/type-fest": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-1.4.0.tgz", + "integrity": "sha512-yGSza74xk0UG8k+pLh5oeoYirvIiWo5t0/o3zHHAO2tRDiZcxWP7fywNlXhqb6/r6sWvwi+RsyQMWhVLe4BVuA==", + "license": "(MIT OR CC0-1.0)", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/css-blank-pseudo": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/css-blank-pseudo/-/css-blank-pseudo-7.0.1.tgz", + "integrity": "sha512-jf+twWGDf6LDoXDUode+nc7ZlrqfaNphrBIBrcmeP3D8yw1uPaix1gCC8LUQUGQ6CycuK2opkbFFWFuq/a94ag==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "license": "MIT-0", "dependencies": { - "@smithy/types": "^4.6.0", - "tslib": "^2.6.2" + "postcss-selector-parser": "^7.0.0" }, "engines": { - "node": ">=18.0.0" + "node": ">=18" + }, + "peerDependencies": { + "postcss": "^8.4" } }, - "node_modules/@smithy/signature-v4": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/@smithy/signature-v4/-/signature-v4-5.3.0.tgz", - "integrity": "sha512-MKNyhXEs99xAZaFhm88h+3/V+tCRDQ+PrDzRqL0xdDpq4gjxcMmf5rBA3YXgqZqMZ/XwemZEurCBQMfxZOWq/g==", - "license": "Apache-2.0", + "node_modules/css-blank-pseudo/node_modules/postcss-selector-parser": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-7.1.1.tgz", + "integrity": "sha512-orRsuYpJVw8LdAwqqLykBj9ecS5/cRHlI5+nvTo8LcCKmzDmqVORXtOIYEEQuL9D4BxtA1lm5isAqzQZCoQ6Eg==", + "license": "MIT", "dependencies": { - "@smithy/is-array-buffer": "^4.2.0", - "@smithy/protocol-http": "^5.3.0", - "@smithy/types": "^4.6.0", - "@smithy/util-hex-encoding": "^4.2.0", - "@smithy/util-middleware": "^4.2.0", - "@smithy/util-uri-escape": "^4.2.0", - "@smithy/util-utf8": "^4.2.0", - "tslib": "^2.6.2" + "cssesc": "^3.0.0", + "util-deprecate": "^1.0.2" }, "engines": { - "node": ">=18.0.0" + "node": ">=4" } }, - "node_modules/@smithy/smithy-client": { - "version": "4.7.0", - "resolved": "https://registry.npmjs.org/@smithy/smithy-client/-/smithy-client-4.7.0.tgz", - "integrity": "sha512-3BDx/aCCPf+kkinYf5QQhdQ9UAGihgOVqI3QO5xQfSaIWvUE4KYLtiGRWsNe1SR7ijXC0QEPqofVp5Sb0zC8xQ==", - "license": "Apache-2.0", + "node_modules/css-box-model": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/css-box-model/-/css-box-model-1.2.1.tgz", + "integrity": "sha512-a7Vr4Q/kd/aw96bnJG332W9V9LkJO69JRcaCYDUqjp6/z0w6VcZjgAcTbgFxEPfBgdnAwlh3iwu+hLopa+flJw==", + "license": "MIT", "dependencies": { - "@smithy/core": "^3.14.0", - "@smithy/middleware-endpoint": "^4.3.0", - "@smithy/middleware-stack": "^4.2.0", - "@smithy/protocol-http": "^5.3.0", - "@smithy/types": "^4.6.0", - "@smithy/util-stream": "^4.4.0", - "tslib": "^2.6.2" - }, + "tiny-invariant": "^1.0.6" + } + }, + "node_modules/css-declaration-sorter": { + "version": "7.3.0", + "resolved": "https://registry.npmjs.org/css-declaration-sorter/-/css-declaration-sorter-7.3.0.tgz", + "integrity": "sha512-LQF6N/3vkAMYF4xoHLJfG718HRJh34Z8BnNhd6bosOMIVjMlhuZK5++oZa3uYAgrI5+7x2o27gUqTR2U/KjUOQ==", + "license": "ISC", "engines": { - "node": ">=18.0.0" + "node": "^14 || ^16 || >=18" + }, + "peerDependencies": { + "postcss": "^8.0.9" } }, - "node_modules/@smithy/types": { - "version": "4.6.0", - "resolved": "https://registry.npmjs.org/@smithy/types/-/types-4.6.0.tgz", - "integrity": "sha512-4lI9C8NzRPOv66FaY1LL1O/0v0aLVrq/mXP/keUa9mJOApEeae43LsLd2kZRUJw91gxOQfLIrV3OvqPgWz1YsA==", - "license": "Apache-2.0", + "node_modules/css-has-pseudo": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/css-has-pseudo/-/css-has-pseudo-7.0.3.tgz", + "integrity": "sha512-oG+vKuGyqe/xvEMoxAQrhi7uY16deJR3i7wwhBerVrGQKSqUC5GiOVxTpM9F9B9hw0J+eKeOWLH7E9gZ1Dr5rA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "license": "MIT-0", "dependencies": { - "tslib": "^2.6.2" + "@csstools/selector-specificity": "^5.0.0", + "postcss-selector-parser": "^7.0.0", + "postcss-value-parser": "^4.2.0" }, "engines": { - "node": ">=18.0.0" + "node": ">=18" + }, + "peerDependencies": { + "postcss": "^8.4" } }, - "node_modules/@smithy/url-parser": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/@smithy/url-parser/-/url-parser-4.2.0.tgz", - "integrity": "sha512-AlBmD6Idav2ugmoAL6UtR6ItS7jU5h5RNqLMZC7QrLCoITA9NzIN3nx9GWi8g4z1pfWh2r9r96SX/jHiNwPJ9A==", - "license": "Apache-2.0", + "node_modules/css-has-pseudo/node_modules/@csstools/selector-specificity": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/@csstools/selector-specificity/-/selector-specificity-5.0.0.tgz", + "integrity": "sha512-PCqQV3c4CoVm3kdPhyeZ07VmBRdH2EpMFA/pd9OASpOEC3aXNGoqPDAZ80D0cLpMBxnmk0+yNhGsEx31hq7Gtw==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "license": "MIT-0", + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "postcss-selector-parser": "^7.0.0" + } + }, + "node_modules/css-has-pseudo/node_modules/postcss-selector-parser": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-7.1.1.tgz", + "integrity": "sha512-orRsuYpJVw8LdAwqqLykBj9ecS5/cRHlI5+nvTo8LcCKmzDmqVORXtOIYEEQuL9D4BxtA1lm5isAqzQZCoQ6Eg==", + "license": "MIT", "dependencies": { - "@smithy/querystring-parser": "^4.2.0", - "@smithy/types": "^4.6.0", - "tslib": "^2.6.2" + "cssesc": "^3.0.0", + "util-deprecate": "^1.0.2" }, "engines": { - "node": ">=18.0.0" + "node": ">=4" } }, - "node_modules/@smithy/util-base64": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/@smithy/util-base64/-/util-base64-4.2.0.tgz", - "integrity": "sha512-+erInz8WDv5KPe7xCsJCp+1WCjSbah9gWcmUXc9NqmhyPx59tf7jqFz+za1tRG1Y5KM1Cy1rWCcGypylFp4mvA==", - "license": "Apache-2.0", + "node_modules/css-loader": { + "version": "6.11.0", + "resolved": "https://registry.npmjs.org/css-loader/-/css-loader-6.11.0.tgz", + "integrity": "sha512-CTJ+AEQJjq5NzLga5pE39qdiSV56F8ywCIsqNIRF0r7BDgWsN25aazToqAFg7ZrtA/U016xudB3ffgweORxX7g==", + "license": "MIT", "dependencies": { - "@smithy/util-buffer-from": "^4.2.0", - "@smithy/util-utf8": "^4.2.0", - "tslib": "^2.6.2" + "icss-utils": "^5.1.0", + "postcss": "^8.4.33", + "postcss-modules-extract-imports": "^3.1.0", + "postcss-modules-local-by-default": "^4.0.5", + "postcss-modules-scope": "^3.2.0", + "postcss-modules-values": "^4.0.0", + "postcss-value-parser": "^4.2.0", + "semver": "^7.5.4" }, "engines": { - "node": ">=18.0.0" + "node": ">= 12.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "@rspack/core": "0.x || 1.x", + "webpack": "^5.0.0" + }, + "peerDependenciesMeta": { + "@rspack/core": { + "optional": true + }, + "webpack": { + "optional": true + } } }, - "node_modules/@smithy/util-body-length-browser": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/@smithy/util-body-length-browser/-/util-body-length-browser-4.2.0.tgz", - "integrity": "sha512-Fkoh/I76szMKJnBXWPdFkQJl2r9SjPt3cMzLdOB6eJ4Pnpas8hVoWPYemX/peO0yrrvldgCUVJqOAjUrOLjbxg==", - "license": "Apache-2.0", - "dependencies": { - "tslib": "^2.6.2" + "node_modules/css-loader/node_modules/semver": { + "version": "7.7.3", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.3.tgz", + "integrity": "sha512-SdsKMrI9TdgjdweUSR9MweHA4EJ8YxHn8DFaDisvhVlUOe4BF1tLD7GAj0lIqWVl+dPb/rExr0Btby5loQm20Q==", + "license": "ISC", + "bin": { + "semver": "bin/semver.js" }, "engines": { - "node": ">=18.0.0" + "node": ">=10" } }, - "node_modules/@smithy/util-body-length-node": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/@smithy/util-body-length-node/-/util-body-length-node-4.2.0.tgz", - "integrity": "sha512-U8q1WsSZFjXijlD7a4wsDQOvOwV+72iHSfq1q7VD+V75xP/pdtm0WIGuaFJ3gcADDOKj2MIBn4+zisi140HEnQ==", - "license": "Apache-2.0", + "node_modules/css-minimizer-webpack-plugin": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/css-minimizer-webpack-plugin/-/css-minimizer-webpack-plugin-5.0.1.tgz", + "integrity": "sha512-3caImjKFQkS+ws1TGcFn0V1HyDJFq1Euy589JlD6/3rV2kj+w7r5G9WDMgSHvpvXHNZ2calVypZWuEDQd9wfLg==", + "license": "MIT", "dependencies": { - "tslib": "^2.6.2" + "@jridgewell/trace-mapping": "^0.3.18", + "cssnano": "^6.0.1", + "jest-worker": "^29.4.3", + "postcss": "^8.4.24", + "schema-utils": "^4.0.1", + "serialize-javascript": "^6.0.1" }, "engines": { - "node": ">=18.0.0" + "node": ">= 14.15.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "webpack": "^5.0.0" + }, + "peerDependenciesMeta": { + "@parcel/css": { + "optional": true + }, + "@swc/css": { + "optional": true + }, + "clean-css": { + "optional": true + }, + "csso": { + "optional": true + }, + "esbuild": { + "optional": true + }, + "lightningcss": { + "optional": true + } } }, - "node_modules/@smithy/util-buffer-from": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/@smithy/util-buffer-from/-/util-buffer-from-4.2.0.tgz", - "integrity": "sha512-kAY9hTKulTNevM2nlRtxAG2FQ3B2OR6QIrPY3zE5LqJy1oxzmgBGsHLWTcNhWXKchgA0WHW+mZkQrng/pgcCew==", - "license": "Apache-2.0", + "node_modules/css-minimizer-webpack-plugin/node_modules/ajv": { + "version": "8.17.1", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.17.1.tgz", + "integrity": "sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g==", + "license": "MIT", "dependencies": { - "@smithy/is-array-buffer": "^4.2.0", - "tslib": "^2.6.2" + "fast-deep-equal": "^3.1.3", + "fast-uri": "^3.0.1", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2" }, - "engines": { - "node": ">=18.0.0" + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" } }, - "node_modules/@smithy/util-config-provider": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/@smithy/util-config-provider/-/util-config-provider-4.2.0.tgz", - "integrity": "sha512-YEjpl6XJ36FTKmD+kRJJWYvrHeUvm5ykaUS5xK+6oXffQPHeEM4/nXlZPe+Wu0lsgRUcNZiliYNh/y7q9c2y6Q==", - "license": "Apache-2.0", + "node_modules/css-minimizer-webpack-plugin/node_modules/ajv-keywords": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-5.1.0.tgz", + "integrity": "sha512-YCS/JNFAUyr5vAuhk1DWm1CBxRHW9LbJ2ozWeemrIqpbsqKjHVxYPyi5GC0rjZIT5JxJ3virVTS8wk4i/Z+krw==", + "license": "MIT", "dependencies": { - "tslib": "^2.6.2" + "fast-deep-equal": "^3.1.3" }, - "engines": { - "node": ">=18.0.0" + "peerDependencies": { + "ajv": "^8.8.2" } }, - "node_modules/@smithy/util-defaults-mode-browser": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/@smithy/util-defaults-mode-browser/-/util-defaults-mode-browser-4.2.0.tgz", - "integrity": "sha512-qzHp7ZDk1Ba4LDwQVCNp90xPGqSu7kmL7y5toBpccuhi3AH7dcVBIT/pUxYcInK4jOy6FikrcTGq5wxcka8UaQ==", - "license": "Apache-2.0", + "node_modules/css-minimizer-webpack-plugin/node_modules/json-schema-traverse": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", + "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", + "license": "MIT" + }, + "node_modules/css-minimizer-webpack-plugin/node_modules/schema-utils": { + "version": "4.3.3", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-4.3.3.tgz", + "integrity": "sha512-eflK8wEtyOE6+hsaRVPxvUKYCpRgzLqDTb8krvAsRIwOGlHoSgYLgBXoubGgLd2fT41/OUYdb48v4k4WWHQurA==", + "license": "MIT", "dependencies": { - "@smithy/property-provider": "^4.2.0", - "@smithy/smithy-client": "^4.7.0", - "@smithy/types": "^4.6.0", - "bowser": "^2.11.0", - "tslib": "^2.6.2" + "@types/json-schema": "^7.0.9", + "ajv": "^8.9.0", + "ajv-formats": "^2.1.1", + "ajv-keywords": "^5.1.0" }, "engines": { - "node": ">=18.0.0" + "node": ">= 10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" } }, - "node_modules/@smithy/util-defaults-mode-node": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/@smithy/util-defaults-mode-node/-/util-defaults-mode-node-4.2.0.tgz", - "integrity": "sha512-FxUHS3WXgx3bTWR6yQHNHHkQHZm/XKIi/CchTnKvBulN6obWpcbzJ6lDToXn+Wp0QlVKd7uYAz2/CTw1j7m+Kg==", - "license": "Apache-2.0", - "dependencies": { - "@smithy/config-resolver": "^4.3.0", - "@smithy/credential-provider-imds": "^4.2.0", - "@smithy/node-config-provider": "^4.3.0", - "@smithy/property-provider": "^4.2.0", - "@smithy/smithy-client": "^4.7.0", - "@smithy/types": "^4.6.0", - "tslib": "^2.6.2" - }, + "node_modules/css-prefers-color-scheme": { + "version": "10.0.0", + "resolved": "https://registry.npmjs.org/css-prefers-color-scheme/-/css-prefers-color-scheme-10.0.0.tgz", + "integrity": "sha512-VCtXZAWivRglTZditUfB4StnsWr6YVZ2PRtuxQLKTNRdtAf8tpzaVPE9zXIF3VaSc7O70iK/j1+NXxyQCqdPjQ==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "license": "MIT-0", "engines": { - "node": ">=18.0.0" + "node": ">=18" + }, + "peerDependencies": { + "postcss": "^8.4" } }, - "node_modules/@smithy/util-endpoints": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/@smithy/util-endpoints/-/util-endpoints-3.2.0.tgz", - "integrity": "sha512-TXeCn22D56vvWr/5xPqALc9oO+LN+QpFjrSM7peG/ckqEPoI3zaKZFp+bFwfmiHhn5MGWPaLCqDOJPPIixk9Wg==", - "license": "Apache-2.0", + "node_modules/css-select": { + "version": "5.2.2", + "resolved": "https://registry.npmjs.org/css-select/-/css-select-5.2.2.tgz", + "integrity": "sha512-TizTzUddG/xYLA3NXodFM0fSbNizXjOKhqiQQwvhlspadZokn1KDy0NZFS0wuEubIYAV5/c1/lAr0TaaFXEXzw==", + "license": "BSD-2-Clause", "dependencies": { - "@smithy/node-config-provider": "^4.3.0", - "@smithy/types": "^4.6.0", - "tslib": "^2.6.2" + "boolbase": "^1.0.0", + "css-what": "^6.1.0", + "domhandler": "^5.0.2", + "domutils": "^3.0.1", + "nth-check": "^2.0.1" }, - "engines": { - "node": ">=18.0.0" + "funding": { + "url": "https://github.com/sponsors/fb55" } }, - "node_modules/@smithy/util-hex-encoding": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/@smithy/util-hex-encoding/-/util-hex-encoding-4.2.0.tgz", - "integrity": "sha512-CCQBwJIvXMLKxVbO88IukazJD9a4kQ9ZN7/UMGBjBcJYvatpWk+9g870El4cB8/EJxfe+k+y0GmR9CAzkF+Nbw==", - "license": "Apache-2.0", + "node_modules/css-tree": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-2.3.1.tgz", + "integrity": "sha512-6Fv1DV/TYw//QF5IzQdqsNDjx/wc8TrMBZsqjL9eW01tWb7R7k/mq+/VXfJCl7SoD5emsJop9cOByJZfs8hYIw==", + "license": "MIT", "dependencies": { - "tslib": "^2.6.2" + "mdn-data": "2.0.30", + "source-map-js": "^1.0.1" }, "engines": { - "node": ">=18.0.0" + "node": "^10 || ^12.20.0 || ^14.13.0 || >=15.0.0" } }, - "node_modules/@smithy/util-middleware": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/@smithy/util-middleware/-/util-middleware-4.2.0.tgz", - "integrity": "sha512-u9OOfDa43MjagtJZ8AapJcmimP+K2Z7szXn8xbty4aza+7P1wjFmy2ewjSbhEiYQoW1unTlOAIV165weYAaowA==", - "license": "Apache-2.0", - "dependencies": { - "@smithy/types": "^4.6.0", - "tslib": "^2.6.2" - }, + "node_modules/css-what": { + "version": "6.2.2", + "resolved": "https://registry.npmjs.org/css-what/-/css-what-6.2.2.tgz", + "integrity": "sha512-u/O3vwbptzhMs3L1fQE82ZSLHQQfto5gyZzwteVIEyeaY5Fc7R4dapF/BvRoSYFeqfBk4m0V1Vafq5Pjv25wvA==", + "license": "BSD-2-Clause", "engines": { - "node": ">=18.0.0" + "node": ">= 6" + }, + "funding": { + "url": "https://github.com/sponsors/fb55" } }, - "node_modules/@smithy/util-retry": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/@smithy/util-retry/-/util-retry-4.2.0.tgz", - "integrity": "sha512-BWSiuGbwRnEE2SFfaAZEX0TqaxtvtSYPM/J73PFVm+A29Fg1HTPiYFb8TmX1DXp4hgcdyJcNQmprfd5foeORsg==", - "license": "Apache-2.0", - "dependencies": { - "@smithy/service-error-classification": "^4.2.0", - "@smithy/types": "^4.6.0", - "tslib": "^2.6.2" + "node_modules/css.escape": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/css.escape/-/css.escape-1.5.1.tgz", + "integrity": "sha512-YUifsXXuknHlUsmlgyY0PKzgPOr7/FjCePfHNt0jxm83wHZi44VDMQ7/fGNkjY3/jV1MC+1CmZbaHzugyeRtpg==", + "dev": true, + "license": "MIT" + }, + "node_modules/cssdb": { + "version": "8.5.2", + "resolved": "https://registry.npmjs.org/cssdb/-/cssdb-8.5.2.tgz", + "integrity": "sha512-Pmoj9RmD8RIoIzA2EQWO4D4RMeDts0tgAH0VXdlNdxjuBGI3a9wMOIcUwaPNmD4r2qtIa06gqkIf7sECl+cBCg==", + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + }, + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + } + ], + "license": "MIT-0" + }, + "node_modules/cssesc": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz", + "integrity": "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==", + "license": "MIT", + "bin": { + "cssesc": "bin/cssesc" }, "engines": { - "node": ">=18.0.0" + "node": ">=4" } }, - "node_modules/@smithy/util-stream": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/@smithy/util-stream/-/util-stream-4.4.0.tgz", - "integrity": "sha512-vtO7ktbixEcrVzMRmpQDnw/Ehr9UWjBvSJ9fyAbadKkC4w5Cm/4lMO8cHz8Ysb8uflvQUNRcuux/oNHKPXkffg==", - "license": "Apache-2.0", + "node_modules/cssnano": { + "version": "6.1.2", + "resolved": "https://registry.npmjs.org/cssnano/-/cssnano-6.1.2.tgz", + "integrity": "sha512-rYk5UeX7VAM/u0lNqewCdasdtPK81CgX8wJFLEIXHbV2oldWRgJAsZrdhRXkV1NJzA2g850KiFm9mMU2HxNxMA==", + "license": "MIT", "dependencies": { - "@smithy/fetch-http-handler": "^5.3.0", - "@smithy/node-http-handler": "^4.3.0", - "@smithy/types": "^4.6.0", - "@smithy/util-base64": "^4.2.0", - "@smithy/util-buffer-from": "^4.2.0", - "@smithy/util-hex-encoding": "^4.2.0", - "@smithy/util-utf8": "^4.2.0", - "tslib": "^2.6.2" + "cssnano-preset-default": "^6.1.2", + "lilconfig": "^3.1.1" }, "engines": { - "node": ">=18.0.0" + "node": "^14 || ^16 || >=18.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/cssnano" + }, + "peerDependencies": { + "postcss": "^8.4.31" } }, - "node_modules/@smithy/util-uri-escape": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/@smithy/util-uri-escape/-/util-uri-escape-4.2.0.tgz", - "integrity": "sha512-igZpCKV9+E/Mzrpq6YacdTQ0qTiLm85gD6N/IrmyDvQFA4UnU3d5g3m8tMT/6zG/vVkWSU+VxeUyGonL62DuxA==", - "license": "Apache-2.0", + "node_modules/cssnano-preset-advanced": { + "version": "6.1.2", + "resolved": "https://registry.npmjs.org/cssnano-preset-advanced/-/cssnano-preset-advanced-6.1.2.tgz", + "integrity": "sha512-Nhao7eD8ph2DoHolEzQs5CfRpiEP0xa1HBdnFZ82kvqdmbwVBUr2r1QuQ4t1pi+D1ZpqpcO4T+wy/7RxzJ/WPQ==", + "license": "MIT", "dependencies": { - "tslib": "^2.6.2" + "autoprefixer": "^10.4.19", + "browserslist": "^4.23.0", + "cssnano-preset-default": "^6.1.2", + "postcss-discard-unused": "^6.0.5", + "postcss-merge-idents": "^6.0.3", + "postcss-reduce-idents": "^6.0.3", + "postcss-zindex": "^6.0.2" }, "engines": { - "node": ">=18.0.0" + "node": "^14 || ^16 || >=18.0" + }, + "peerDependencies": { + "postcss": "^8.4.31" } }, - "node_modules/@smithy/util-utf8": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/@smithy/util-utf8/-/util-utf8-4.2.0.tgz", - "integrity": "sha512-zBPfuzoI8xyBtR2P6WQj63Rz8i3AmfAaJLuNG8dWsfvPe8lO4aCPYLn879mEgHndZH1zQ2oXmG8O1GGzzaoZiw==", - "license": "Apache-2.0", - "dependencies": { - "@smithy/util-buffer-from": "^4.2.0", - "tslib": "^2.6.2" + "node_modules/cssnano-preset-default": { + "version": "6.1.2", + "resolved": "https://registry.npmjs.org/cssnano-preset-default/-/cssnano-preset-default-6.1.2.tgz", + "integrity": "sha512-1C0C+eNaeN8OcHQa193aRgYexyJtU8XwbdieEjClw+J9d94E41LwT6ivKH0WT+fYwYWB0Zp3I3IZ7tI/BbUbrg==", + "license": "MIT", + "dependencies": { + "browserslist": "^4.23.0", + "css-declaration-sorter": "^7.2.0", + "cssnano-utils": "^4.0.2", + "postcss-calc": "^9.0.1", + "postcss-colormin": "^6.1.0", + "postcss-convert-values": "^6.1.0", + "postcss-discard-comments": "^6.0.2", + "postcss-discard-duplicates": "^6.0.3", + "postcss-discard-empty": "^6.0.3", + "postcss-discard-overridden": "^6.0.2", + "postcss-merge-longhand": "^6.0.5", + "postcss-merge-rules": "^6.1.1", + "postcss-minify-font-values": "^6.1.0", + "postcss-minify-gradients": "^6.0.3", + "postcss-minify-params": "^6.1.0", + "postcss-minify-selectors": "^6.0.4", + "postcss-normalize-charset": "^6.0.2", + "postcss-normalize-display-values": "^6.0.2", + "postcss-normalize-positions": "^6.0.2", + "postcss-normalize-repeat-style": "^6.0.2", + "postcss-normalize-string": "^6.0.2", + "postcss-normalize-timing-functions": "^6.0.2", + "postcss-normalize-unicode": "^6.1.0", + "postcss-normalize-url": "^6.0.2", + "postcss-normalize-whitespace": "^6.0.2", + "postcss-ordered-values": "^6.0.2", + "postcss-reduce-initial": "^6.1.0", + "postcss-reduce-transforms": "^6.0.2", + "postcss-svgo": "^6.0.3", + "postcss-unique-selectors": "^6.0.4" + }, + "engines": { + "node": "^14 || ^16 || >=18.0" }, - "engines": { - "node": ">=18.0.0" + "peerDependencies": { + "postcss": "^8.4.31" } }, - "node_modules/@smithy/uuid": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@smithy/uuid/-/uuid-1.1.0.tgz", - "integrity": "sha512-4aUIteuyxtBUhVdiQqcDhKFitwfd9hqoSDYY2KRXiWtgoWJ9Bmise+KfEPDiVHWeJepvF8xJO9/9+WDIciMFFw==", - "license": "Apache-2.0", - "dependencies": { - "tslib": "^2.6.2" - }, + "node_modules/cssnano-utils": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/cssnano-utils/-/cssnano-utils-4.0.2.tgz", + "integrity": "sha512-ZR1jHg+wZ8o4c3zqf1SIUSTIvm/9mU343FMR6Obe/unskbvpGhZOo1J6d/r8D1pzkRQYuwbcH3hToOuoA2G7oQ==", + "license": "MIT", "engines": { - "node": ">=18.0.0" + "node": "^14 || ^16 || >=18.0" + }, + "peerDependencies": { + "postcss": "^8.4.31" } }, - "node_modules/@so-ric/colorspace": { - "version": "1.1.6", - "resolved": "https://registry.npmjs.org/@so-ric/colorspace/-/colorspace-1.1.6.tgz", - "integrity": "sha512-/KiKkpHNOBgkFJwu9sh48LkHSMYGyuTcSFK/qMBdnOAlrRJzRSXAOFB5qwzaVQuDl8wAvHVMkaASQDReTahxuw==", + "node_modules/csso": { + "version": "5.0.5", + "resolved": "https://registry.npmjs.org/csso/-/csso-5.0.5.tgz", + "integrity": "sha512-0LrrStPOdJj+SPCCrGhzryycLjwcgUSHBtxNA8aIDxf0GLsRh1cKYhB00Gd1lDOS4yGH69+SNn13+TWbVHETFQ==", "license": "MIT", "dependencies": { - "color": "^5.0.2", - "text-hex": "1.0.x" + "css-tree": "~2.2.0" + }, + "engines": { + "node": "^10 || ^12.20.0 || ^14.13.0 || >=15.0.0", + "npm": ">=7.0.0" } }, - "node_modules/@solidity-parser/parser": { - "version": "0.14.5", - "resolved": "https://registry.npmjs.org/@solidity-parser/parser/-/parser-0.14.5.tgz", - "integrity": "sha512-6dKnHZn7fg/iQATVEzqyUOyEidbn05q7YA2mQ9hC0MMXhhV3/JrsxmFSYZAcr7j1yUP700LLhTruvJ3MiQmjJg==", - "dev": true, + "node_modules/csso/node_modules/css-tree": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-2.2.1.tgz", + "integrity": "sha512-OA0mILzGc1kCOCSJerOeqDxDQ4HOh+G8NbOJFOTgOCzpw7fCBubk0fEyxp8AgOL/jvLgYA/uV0cMbe43ElF1JA==", "license": "MIT", "dependencies": { - "antlr4ts": "^0.5.0-alpha.4" + "mdn-data": "2.0.28", + "source-map-js": "^1.0.1" + }, + "engines": { + "node": "^10 || ^12.20.0 || ^14.13.0 || >=15.0.0", + "npm": ">=7.0.0" } }, - "node_modules/@sqltools/formatter": { - "version": "1.2.5", - "resolved": "https://registry.npmjs.org/@sqltools/formatter/-/formatter-1.2.5.tgz", - "integrity": "sha512-Uy0+khmZqUrUGm5dmMqVlnvufZRSK0FbYzVgp0UMstm+F5+W2/jnEEQyc9vo1ZR/E5ZI/B1WjjoTqBqwJL6Krw==", - "license": "MIT" + "node_modules/csso/node_modules/mdn-data": { + "version": "2.0.28", + "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.28.tgz", + "integrity": "sha512-aylIc7Z9y4yzHYAJNuESG3hfhC+0Ibp/MAMiaOZgNv4pmEdFyfZhhhny4MNiAfWdBQ1RQ2mfDWmM1x8SvGyp8g==", + "license": "CC0-1.0" }, - "node_modules/@stablelib/aead": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@stablelib/aead/-/aead-1.0.1.tgz", - "integrity": "sha512-q39ik6sxGHewqtO0nP4BuSe3db5G1fEJE8ukvngS2gLkBXyy6E7pLubhbYgnkDFv6V8cWaxcE4Xn0t6LWcJkyg==", + "node_modules/cssom": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/cssom/-/cssom-0.5.0.tgz", + "integrity": "sha512-iKuQcq+NdHqlAcwUY0o/HL69XQrUaQdMjmStJ8JFmUaiiQErlhrmuigkg/CU4E2J0IyUKUrMAgl36TvN67MqTw==", + "dev": true, "license": "MIT" }, - "node_modules/@stablelib/binary": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@stablelib/binary/-/binary-1.0.1.tgz", - "integrity": "sha512-ClJWvmL6UBM/wjkvv/7m5VP3GMr9t0osr4yVgLZsLCOz4hGN9gIAFEqnJ0TsSMAN+n840nf2cHZnA5/KFqHC7Q==", + "node_modules/cssstyle": { + "version": "4.6.0", + "resolved": "https://registry.npmjs.org/cssstyle/-/cssstyle-4.6.0.tgz", + "integrity": "sha512-2z+rWdzbbSZv6/rhtvzvqeZQHrBaqgogqt85sqFNbabZOuFbCVFb8kPeEtZjiKkbrm395irpNKiYeFeLiQnFPg==", + "dev": true, "license": "MIT", "dependencies": { - "@stablelib/int": "^1.0.1" + "@asamuzakjp/css-color": "^3.2.0", + "rrweb-cssom": "^0.8.0" + }, + "engines": { + "node": ">=18" } }, - "node_modules/@stablelib/bytes": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@stablelib/bytes/-/bytes-1.0.1.tgz", - "integrity": "sha512-Kre4Y4kdwuqL8BR2E9hV/R5sOrUj6NanZaZis0V6lX5yzqC3hBuVSDXUIBqQv/sCpmuWRiHLwqiT1pqqjuBXoQ==", + "node_modules/cssstyle/node_modules/rrweb-cssom": { + "version": "0.8.0", + "resolved": "https://registry.npmjs.org/rrweb-cssom/-/rrweb-cssom-0.8.0.tgz", + "integrity": "sha512-guoltQEx+9aMf2gDZ0s62EcV8lsXR+0w8915TC3ITdn2YueuNjdAYh/levpU9nFaoChh9RUS5ZdQMrKfVEN9tw==", + "dev": true, "license": "MIT" }, - "node_modules/@stablelib/chacha": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@stablelib/chacha/-/chacha-1.0.1.tgz", - "integrity": "sha512-Pmlrswzr0pBzDofdFuVe1q7KdsHKhhU24e8gkEwnTGOmlC7PADzLVxGdn2PoNVBBabdg0l/IfLKg6sHAbTQugg==", + "node_modules/csstype": { + "version": "3.2.3", + "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.2.3.tgz", + "integrity": "sha512-z1HGKcYy2xA8AGQfwrn0PAy+PB7X/GSj3UVJW9qKyn43xWa+gl5nXmU4qqLMRzWVLFC8KusUX8T/0kCiOYpAIQ==", + "license": "MIT" + }, + "node_modules/cytoscape": { + "version": "3.33.1", + "resolved": "https://registry.npmjs.org/cytoscape/-/cytoscape-3.33.1.tgz", + "integrity": "sha512-iJc4TwyANnOGR1OmWhsS9ayRS3s+XQ185FmuHObThD+5AeJCakAAbWv8KimMTt08xCCLNgneQwFp+JRJOr9qGQ==", "license": "MIT", - "dependencies": { - "@stablelib/binary": "^1.0.1", - "@stablelib/wipe": "^1.0.1" + "engines": { + "node": ">=0.10" } }, - "node_modules/@stablelib/chacha20poly1305": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@stablelib/chacha20poly1305/-/chacha20poly1305-1.0.1.tgz", - "integrity": "sha512-MmViqnqHd1ymwjOQfghRKw2R/jMIGT3wySN7cthjXCBdO+qErNPUBnRzqNpnvIwg7JBCg3LdeCZZO4de/yEhVA==", + "node_modules/cytoscape-cose-bilkent": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/cytoscape-cose-bilkent/-/cytoscape-cose-bilkent-4.1.0.tgz", + "integrity": "sha512-wgQlVIUJF13Quxiv5e1gstZ08rnZj2XaLHGoFMYXz7SkNfCDOOteKBE6SYRfA9WxxI/iBc3ajfDoc6hb/MRAHQ==", "license": "MIT", "dependencies": { - "@stablelib/aead": "^1.0.1", - "@stablelib/binary": "^1.0.1", - "@stablelib/chacha": "^1.0.1", - "@stablelib/constant-time": "^1.0.1", - "@stablelib/poly1305": "^1.0.1", - "@stablelib/wipe": "^1.0.1" + "cose-base": "^1.0.0" + }, + "peerDependencies": { + "cytoscape": "^3.2.0" } }, - "node_modules/@stablelib/constant-time": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@stablelib/constant-time/-/constant-time-1.0.1.tgz", - "integrity": "sha512-tNOs3uD0vSJcK6z1fvef4Y+buN7DXhzHDPqRLSXUel1UfqMB1PWNsnnAezrKfEwTLpN0cGH2p9NNjs6IqeD0eg==", - "license": "MIT" - }, - "node_modules/@stablelib/ed25519": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/@stablelib/ed25519/-/ed25519-1.0.3.tgz", - "integrity": "sha512-puIMWaX9QlRsbhxfDc5i+mNPMY+0TmQEskunY1rZEBPi1acBCVQAhnsk/1Hk50DGPtVsZtAWQg4NHGlVaO9Hqg==", + "node_modules/cytoscape-fcose": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/cytoscape-fcose/-/cytoscape-fcose-2.2.0.tgz", + "integrity": "sha512-ki1/VuRIHFCzxWNrsshHYPs6L7TvLu3DL+TyIGEsRcvVERmxokbf5Gdk7mFxZnTdiGtnA4cfSmjZJMviqSuZrQ==", "license": "MIT", "dependencies": { - "@stablelib/random": "^1.0.2", - "@stablelib/sha512": "^1.0.1", - "@stablelib/wipe": "^1.0.1" + "cose-base": "^2.2.0" + }, + "peerDependencies": { + "cytoscape": "^3.2.0" } }, - "node_modules/@stablelib/ed25519/node_modules/@stablelib/random": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/@stablelib/random/-/random-1.0.2.tgz", - "integrity": "sha512-rIsE83Xpb7clHPVRlBj8qNe5L8ISQOzjghYQm/dZ7VaM2KHYwMW5adjQjrzTZCchFnNCNhkwtnOBa9HTMJCI8w==", + "node_modules/cytoscape-fcose/node_modules/cose-base": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/cose-base/-/cose-base-2.2.0.tgz", + "integrity": "sha512-AzlgcsCbUMymkADOJtQm3wO9S3ltPfYOFD5033keQn9NJzIbtnZj+UdBJe7DYml/8TdbtHJW3j58SOnKhWY/5g==", "license": "MIT", "dependencies": { - "@stablelib/binary": "^1.0.1", - "@stablelib/wipe": "^1.0.1" + "layout-base": "^2.0.0" } }, - "node_modules/@stablelib/hash": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@stablelib/hash/-/hash-1.0.1.tgz", - "integrity": "sha512-eTPJc/stDkdtOcrNMZ6mcMK1e6yBbqRBaNW55XA1jU8w/7QdnCF0CmMmOD1m7VSkBR44PWrMHU2l6r8YEQHMgg==", + "node_modules/cytoscape-fcose/node_modules/layout-base": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/layout-base/-/layout-base-2.0.1.tgz", + "integrity": "sha512-dp3s92+uNI1hWIpPGH3jK2kxE2lMjdXdr+DH8ynZHpd6PUlH6x6cbuXnoMmiNumznqaNO31xu9e79F0uuZ0JFg==", "license": "MIT" }, - "node_modules/@stablelib/hkdf": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@stablelib/hkdf/-/hkdf-1.0.1.tgz", - "integrity": "sha512-SBEHYE16ZXlHuaW5RcGk533YlBj4grMeg5TooN80W3NpcHRtLZLLXvKyX0qcRFxf+BGDobJLnwkvgEwHIDBR6g==", - "license": "MIT", + "node_modules/d3": { + "version": "7.9.0", + "resolved": "https://registry.npmjs.org/d3/-/d3-7.9.0.tgz", + "integrity": "sha512-e1U46jVP+w7Iut8Jt8ri1YsPOvFpg46k+K8TpCb0P+zjCkjkPnV7WzfDJzMHy1LnA+wj5pLT1wjO901gLXeEhA==", + "license": "ISC", "dependencies": { - "@stablelib/hash": "^1.0.1", - "@stablelib/hmac": "^1.0.1", - "@stablelib/wipe": "^1.0.1" + "d3-array": "3", + "d3-axis": "3", + "d3-brush": "3", + "d3-chord": "3", + "d3-color": "3", + "d3-contour": "4", + "d3-delaunay": "6", + "d3-dispatch": "3", + "d3-drag": "3", + "d3-dsv": "3", + "d3-ease": "3", + "d3-fetch": "3", + "d3-force": "3", + "d3-format": "3", + "d3-geo": "3", + "d3-hierarchy": "3", + "d3-interpolate": "3", + "d3-path": "3", + "d3-polygon": "3", + "d3-quadtree": "3", + "d3-random": "3", + "d3-scale": "4", + "d3-scale-chromatic": "3", + "d3-selection": "3", + "d3-shape": "3", + "d3-time": "3", + "d3-time-format": "4", + "d3-timer": "3", + "d3-transition": "3", + "d3-zoom": "3" + }, + "engines": { + "node": ">=12" } }, - "node_modules/@stablelib/hmac": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@stablelib/hmac/-/hmac-1.0.1.tgz", - "integrity": "sha512-V2APD9NSnhVpV/QMYgCVMIYKiYG6LSqw1S65wxVoirhU/51ACio6D4yDVSwMzuTJXWZoVHbDdINioBwKy5kVmA==", - "license": "MIT", + "node_modules/d3-array": { + "version": "3.2.4", + "resolved": "https://registry.npmjs.org/d3-array/-/d3-array-3.2.4.tgz", + "integrity": "sha512-tdQAmyA18i4J7wprpYq8ClcxZy3SC31QMeByyCFyRt7BVHdREQZ5lpzoe5mFEYZUWe+oq8HBvk9JjpibyEV4Jg==", + "license": "ISC", "dependencies": { - "@stablelib/constant-time": "^1.0.1", - "@stablelib/hash": "^1.0.1", - "@stablelib/wipe": "^1.0.1" + "internmap": "1 - 2" + }, + "engines": { + "node": ">=12" } }, - "node_modules/@stablelib/int": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@stablelib/int/-/int-1.0.1.tgz", - "integrity": "sha512-byr69X/sDtDiIjIV6m4roLVWnNNlRGzsvxw+agj8CIEazqWGOQp2dTYgQhtyVXV9wpO6WyXRQUzLV/JRNumT2w==", - "license": "MIT" + "node_modules/d3-axis": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/d3-axis/-/d3-axis-3.0.0.tgz", + "integrity": "sha512-IH5tgjV4jE/GhHkRV0HiVYPDtvfjHQlQfJHs0usq7M30XcSBvOotpmH1IgkcXsO/5gEQZD43B//fc7SRT5S+xw==", + "license": "ISC", + "engines": { + "node": ">=12" + } }, - "node_modules/@stablelib/keyagreement": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@stablelib/keyagreement/-/keyagreement-1.0.1.tgz", - "integrity": "sha512-VKL6xBwgJnI6l1jKrBAfn265cspaWBPAPEc62VBQrWHLqVgNRE09gQ/AnOEyKUWrrqfD+xSQ3u42gJjLDdMDQg==", - "license": "MIT", + "node_modules/d3-brush": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/d3-brush/-/d3-brush-3.0.0.tgz", + "integrity": "sha512-ALnjWlVYkXsVIGlOsuWH1+3udkYFI48Ljihfnh8FZPF2QS9o+PzGLBslO0PjzVoHLZ2KCVgAM8NVkXPJB2aNnQ==", + "license": "ISC", "dependencies": { - "@stablelib/bytes": "^1.0.1" + "d3-dispatch": "1 - 3", + "d3-drag": "2 - 3", + "d3-interpolate": "1 - 3", + "d3-selection": "3", + "d3-transition": "3" + }, + "engines": { + "node": ">=12" } }, - "node_modules/@stablelib/poly1305": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@stablelib/poly1305/-/poly1305-1.0.1.tgz", - "integrity": "sha512-1HlG3oTSuQDOhSnLwJRKeTRSAdFNVB/1djy2ZbS35rBSJ/PFqx9cf9qatinWghC2UbfOYD8AcrtbUQl8WoxabA==", - "license": "MIT", + "node_modules/d3-chord": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/d3-chord/-/d3-chord-3.0.1.tgz", + "integrity": "sha512-VE5S6TNa+j8msksl7HwjxMHDM2yNK3XCkusIlpX5kwauBfXuyLAtNg9jCp/iHH61tgI4sb6R/EIMWCqEIdjT/g==", + "license": "ISC", "dependencies": { - "@stablelib/constant-time": "^1.0.1", - "@stablelib/wipe": "^1.0.1" + "d3-path": "1 - 3" + }, + "engines": { + "node": ">=12" } }, - "node_modules/@stablelib/random": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/@stablelib/random/-/random-1.0.0.tgz", - "integrity": "sha512-G9vwwKrNCGMI/uHL6XeWe2Nk4BuxkYyWZagGaDU9wrsuV+9hUwNI1lok2WVo8uJDa2zx7ahNwN7Ij983hOUFEw==", - "license": "MIT", - "dependencies": { - "@stablelib/binary": "^1.0.0", - "@stablelib/wipe": "^1.0.0" + "node_modules/d3-color": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/d3-color/-/d3-color-3.1.0.tgz", + "integrity": "sha512-zg/chbXyeBtMQ1LbD/WSoW2DpC3I0mpmPdW+ynRTj/x2DAWYrIY7qeZIHidozwV24m4iavr15lNwIwLxRmOxhA==", + "license": "ISC", + "engines": { + "node": ">=12" } }, - "node_modules/@stablelib/sha256": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@stablelib/sha256/-/sha256-1.0.1.tgz", - "integrity": "sha512-GIIH3e6KH+91FqGV42Kcj71Uefd/QEe7Dy42sBTeqppXV95ggCcxLTk39bEr+lZfJmp+ghsR07J++ORkRELsBQ==", - "license": "MIT", + "node_modules/d3-contour": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/d3-contour/-/d3-contour-4.0.2.tgz", + "integrity": "sha512-4EzFTRIikzs47RGmdxbeUvLWtGedDUNkTcmzoeyg4sP/dvCexO47AaQL7VKy/gul85TOxw+IBgA8US2xwbToNA==", + "license": "ISC", "dependencies": { - "@stablelib/binary": "^1.0.1", - "@stablelib/hash": "^1.0.1", - "@stablelib/wipe": "^1.0.1" + "d3-array": "^3.2.0" + }, + "engines": { + "node": ">=12" } }, - "node_modules/@stablelib/sha512": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@stablelib/sha512/-/sha512-1.0.1.tgz", - "integrity": "sha512-13gl/iawHV9zvDKciLo1fQ8Bgn2Pvf7OV6amaRVKiq3pjQ3UmEpXxWiAfV8tYjUpeZroBxtyrwtdooQT/i3hzw==", - "license": "MIT", + "node_modules/d3-delaunay": { + "version": "6.0.4", + "resolved": "https://registry.npmjs.org/d3-delaunay/-/d3-delaunay-6.0.4.tgz", + "integrity": "sha512-mdjtIZ1XLAM8bm/hx3WwjfHt6Sggek7qH043O8KEjDXN40xi3vx/6pYSVTwLjEgiXQTbvaouWKynLBiUZ6SK6A==", + "license": "ISC", "dependencies": { - "@stablelib/binary": "^1.0.1", - "@stablelib/hash": "^1.0.1", - "@stablelib/wipe": "^1.0.1" + "delaunator": "5" + }, + "engines": { + "node": ">=12" } }, - "node_modules/@stablelib/wipe": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@stablelib/wipe/-/wipe-1.0.1.tgz", - "integrity": "sha512-WfqfX/eXGiAd3RJe4VU2snh/ZPwtSjLG4ynQ/vYzvghTh7dHFcI1wl+nrkWG6lGhukOxOsUHfv8dUXr58D0ayg==", - "license": "MIT" - }, - "node_modules/@stablelib/x25519": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/@stablelib/x25519/-/x25519-1.0.3.tgz", - "integrity": "sha512-KnTbKmUhPhHavzobclVJQG5kuivH+qDLpe84iRqX3CLrKp881cF160JvXJ+hjn1aMyCwYOKeIZefIH/P5cJoRw==", - "license": "MIT", - "dependencies": { - "@stablelib/keyagreement": "^1.0.1", - "@stablelib/random": "^1.0.2", - "@stablelib/wipe": "^1.0.1" + "node_modules/d3-dispatch": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/d3-dispatch/-/d3-dispatch-3.0.1.tgz", + "integrity": "sha512-rzUyPU/S7rwUflMyLc1ETDeBj0NRuHKKAcvukozwhshr6g6c5d8zh4c2gQjY2bZ0dXeGLWc1PF174P2tVvKhfg==", + "license": "ISC", + "engines": { + "node": ">=12" } }, - "node_modules/@stablelib/x25519/node_modules/@stablelib/random": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/@stablelib/random/-/random-1.0.2.tgz", - "integrity": "sha512-rIsE83Xpb7clHPVRlBj8qNe5L8ISQOzjghYQm/dZ7VaM2KHYwMW5adjQjrzTZCchFnNCNhkwtnOBa9HTMJCI8w==", - "license": "MIT", + "node_modules/d3-drag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/d3-drag/-/d3-drag-3.0.0.tgz", + "integrity": "sha512-pWbUJLdETVA8lQNJecMxoXfH6x+mO2UQo8rSmZ+QqxcbyA3hfeprFgIT//HW2nlHChWeIIMwS2Fq+gEARkhTkg==", + "license": "ISC", "dependencies": { - "@stablelib/binary": "^1.0.1", - "@stablelib/wipe": "^1.0.1" + "d3-dispatch": "1 - 3", + "d3-selection": "3" + }, + "engines": { + "node": ">=12" } }, - "node_modules/@stylistic/eslint-plugin-js": { - "version": "2.6.2", - "resolved": "https://registry.npmjs.org/@stylistic/eslint-plugin-js/-/eslint-plugin-js-2.6.2.tgz", - "integrity": "sha512-wCr/kVctAPayMU3pcOI1MKR7MoKIh6VKZU89lPklAqtJoxT+Em6RueiiARbpznUYG5eg3LymiU+aMD+aIZXdqA==", - "dev": true, - "license": "MIT", + "node_modules/d3-dsv": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/d3-dsv/-/d3-dsv-3.0.1.tgz", + "integrity": "sha512-UG6OvdI5afDIFP9w4G0mNq50dSOsXHJaRE8arAS5o9ApWnIElp8GZw1Dun8vP8OyHOZ/QJUKUJwxiiCCnUwm+Q==", + "license": "ISC", "dependencies": { - "@types/eslint": "^9.6.0", - "acorn": "^8.12.1", - "eslint-visitor-keys": "^4.0.0", - "espree": "^10.1.0" + "commander": "7", + "iconv-lite": "0.6", + "rw": "1" }, - "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + "bin": { + "csv2json": "bin/dsv2json.js", + "csv2tsv": "bin/dsv2dsv.js", + "dsv2dsv": "bin/dsv2dsv.js", + "dsv2json": "bin/dsv2json.js", + "json2csv": "bin/json2dsv.js", + "json2dsv": "bin/json2dsv.js", + "json2tsv": "bin/json2dsv.js", + "tsv2csv": "bin/dsv2dsv.js", + "tsv2json": "bin/dsv2json.js" }, - "peerDependencies": { - "eslint": ">=8.40.0" + "engines": { + "node": ">=12" } }, - "node_modules/@stylistic/eslint-plugin-js/node_modules/eslint-visitor-keys": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-4.2.1.tgz", - "integrity": "sha512-Uhdk5sfqcee/9H/rCOJikYz67o0a2Tw2hGRPOG2Y1R2dg7brRe1uG0yaNQDHu+TO/uQPF/5eCapvYSmHUjt7JQ==", - "dev": true, - "license": "Apache-2.0", + "node_modules/d3-dsv/node_modules/commander": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-7.2.0.tgz", + "integrity": "sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==", + "license": "MIT", "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" - }, - "funding": { - "url": "https://opencollective.com/eslint" + "node": ">= 10" } }, - "node_modules/@stylistic/eslint-plugin-js/node_modules/espree": { - "version": "10.4.0", - "resolved": "https://registry.npmjs.org/espree/-/espree-10.4.0.tgz", - "integrity": "sha512-j6PAQ2uUr79PZhBjP5C5fhl8e39FmRnOjsD5lGnWrFU8i2G776tBK7+nP8KuQUTTyAZUwfQqXAgrVH5MbH9CYQ==", - "dev": true, - "license": "BSD-2-Clause", + "node_modules/d3-dsv/node_modules/iconv-lite": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", + "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", + "license": "MIT", "dependencies": { - "acorn": "^8.15.0", - "acorn-jsx": "^5.3.2", - "eslint-visitor-keys": "^4.2.1" + "safer-buffer": ">= 2.1.2 < 3.0.0" }, "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" - }, - "funding": { - "url": "https://opencollective.com/eslint" + "node": ">=0.10.0" + } + }, + "node_modules/d3-ease": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/d3-ease/-/d3-ease-3.0.1.tgz", + "integrity": "sha512-wR/XK3D3XcLIZwpbvQwQ5fK+8Ykds1ip7A2Txe0yxncXSdq1L9skcG7blcedkOX+ZcgxGAmLX1FrRGbADwzi0w==", + "license": "BSD-3-Clause", + "engines": { + "node": ">=12" } }, - "node_modules/@stylistic/eslint-plugin-ts": { - "version": "2.6.2", - "resolved": "https://registry.npmjs.org/@stylistic/eslint-plugin-ts/-/eslint-plugin-ts-2.6.2.tgz", - "integrity": "sha512-6OEN3VtUNxjgOvWPavnC10MByr1H4zsgwNND3rQXr5lDFv93MLUnTsH+/SH15OkuqdyJgrQILI6b9lYecb1vIg==", - "dev": true, - "license": "MIT", + "node_modules/d3-fetch": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/d3-fetch/-/d3-fetch-3.0.1.tgz", + "integrity": "sha512-kpkQIM20n3oLVBKGg6oHrUchHM3xODkTzjMoj7aWQFq5QEM+R6E4WkzT5+tojDY7yjez8KgCBRoj4aEr99Fdqw==", + "license": "ISC", "dependencies": { - "@stylistic/eslint-plugin-js": "2.6.2", - "@types/eslint": "^9.6.0", - "@typescript-eslint/utils": "^8.0.0" + "d3-dsv": "1 - 3" }, "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" - }, - "peerDependencies": { - "eslint": ">=8.40.0" + "node": ">=12" } }, - "node_modules/@swc/core": { - "version": "1.13.5", - "resolved": "https://registry.npmjs.org/@swc/core/-/core-1.13.5.tgz", - "integrity": "sha512-WezcBo8a0Dg2rnR82zhwoR6aRNxeTGfK5QCD6TQ+kg3xx/zNT02s/0o+81h/3zhvFSB24NtqEr8FTw88O5W/JQ==", - "devOptional": true, - "hasInstallScript": true, - "license": "Apache-2.0", + "node_modules/d3-force": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/d3-force/-/d3-force-3.0.0.tgz", + "integrity": "sha512-zxV/SsA+U4yte8051P4ECydjD/S+qeYtnaIyAs9tgHCqfguma/aAQDjo85A9Z6EKhBirHRJHXIgJUlffT4wdLg==", + "license": "ISC", "dependencies": { - "@swc/counter": "^0.1.3", - "@swc/types": "^0.1.24" + "d3-dispatch": "1 - 3", + "d3-quadtree": "1 - 3", + "d3-timer": "1 - 3" }, "engines": { - "node": ">=10" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/swc" - }, - "optionalDependencies": { - "@swc/core-darwin-arm64": "1.13.5", - "@swc/core-darwin-x64": "1.13.5", - "@swc/core-linux-arm-gnueabihf": "1.13.5", - "@swc/core-linux-arm64-gnu": "1.13.5", - "@swc/core-linux-arm64-musl": "1.13.5", - "@swc/core-linux-x64-gnu": "1.13.5", - "@swc/core-linux-x64-musl": "1.13.5", - "@swc/core-win32-arm64-msvc": "1.13.5", - "@swc/core-win32-ia32-msvc": "1.13.5", - "@swc/core-win32-x64-msvc": "1.13.5" - }, - "peerDependencies": { - "@swc/helpers": ">=0.5.17" - }, - "peerDependenciesMeta": { - "@swc/helpers": { - "optional": true - } + "node": ">=12" } }, - "node_modules/@swc/core-darwin-arm64": { - "version": "1.13.5", - "resolved": "https://registry.npmjs.org/@swc/core-darwin-arm64/-/core-darwin-arm64-1.13.5.tgz", - "integrity": "sha512-lKNv7SujeXvKn16gvQqUQI5DdyY8v7xcoO3k06/FJbHJS90zEwZdQiMNRiqpYw/orU543tPaWgz7cIYWhbopiQ==", - "cpu": [ - "arm64" - ], - "license": "Apache-2.0 AND MIT", - "optional": true, - "os": [ - "darwin" - ], + "node_modules/d3-format": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/d3-format/-/d3-format-3.1.0.tgz", + "integrity": "sha512-YyUI6AEuY/Wpt8KWLgZHsIU86atmikuoOmCfommt0LYHiQSPjvX2AcFc38PX0CBpr2RCyZhjex+NS/LPOv6YqA==", + "license": "ISC", "engines": { - "node": ">=10" + "node": ">=12" } }, - "node_modules/@swc/core-darwin-x64": { - "version": "1.13.5", - "resolved": "https://registry.npmjs.org/@swc/core-darwin-x64/-/core-darwin-x64-1.13.5.tgz", - "integrity": "sha512-ILd38Fg/w23vHb0yVjlWvQBoE37ZJTdlLHa8LRCFDdX4WKfnVBiblsCU9ar4QTMNdeTBEX9iUF4IrbNWhaF1Ng==", - "cpu": [ - "x64" - ], - "license": "Apache-2.0 AND MIT", - "optional": true, - "os": [ - "darwin" - ], + "node_modules/d3-geo": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/d3-geo/-/d3-geo-3.1.1.tgz", + "integrity": "sha512-637ln3gXKXOwhalDzinUgY83KzNWZRKbYubaG+fGVuc/dxO64RRljtCTnf5ecMyE1RIdtqpkVcq0IbtU2S8j2Q==", + "license": "ISC", + "dependencies": { + "d3-array": "2.5.0 - 3" + }, "engines": { - "node": ">=10" + "node": ">=12" } }, - "node_modules/@swc/core-linux-arm-gnueabihf": { - "version": "1.13.5", - "resolved": "https://registry.npmjs.org/@swc/core-linux-arm-gnueabihf/-/core-linux-arm-gnueabihf-1.13.5.tgz", - "integrity": "sha512-Q6eS3Pt8GLkXxqz9TAw+AUk9HpVJt8Uzm54MvPsqp2yuGmY0/sNaPPNVqctCX9fu/Nu8eaWUen0si6iEiCsazQ==", - "cpu": [ - "arm" - ], - "license": "Apache-2.0", - "optional": true, - "os": [ - "linux" - ], + "node_modules/d3-hierarchy": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/d3-hierarchy/-/d3-hierarchy-3.1.2.tgz", + "integrity": "sha512-FX/9frcub54beBdugHjDCdikxThEqjnR93Qt7PvQTOHxyiNCAlvMrHhclk3cD5VeAaq9fxmfRp+CnWw9rEMBuA==", + "license": "ISC", "engines": { - "node": ">=10" + "node": ">=12" } }, - "node_modules/@swc/core-linux-arm64-gnu": { - "version": "1.13.5", - "resolved": "https://registry.npmjs.org/@swc/core-linux-arm64-gnu/-/core-linux-arm64-gnu-1.13.5.tgz", - "integrity": "sha512-aNDfeN+9af+y+M2MYfxCzCy/VDq7Z5YIbMqRI739o8Ganz6ST+27kjQFd8Y/57JN/hcnUEa9xqdS3XY7WaVtSw==", - "cpu": [ - "arm64" - ], - "license": "Apache-2.0 AND MIT", - "optional": true, - "os": [ - "linux" - ], + "node_modules/d3-interpolate": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/d3-interpolate/-/d3-interpolate-3.0.1.tgz", + "integrity": "sha512-3bYs1rOD33uo8aqJfKP3JWPAibgw8Zm2+L9vBKEHJ2Rg+viTR7o5Mmv5mZcieN+FRYaAOWX5SJATX6k1PWz72g==", + "license": "ISC", + "dependencies": { + "d3-color": "1 - 3" + }, "engines": { - "node": ">=10" + "node": ">=12" } }, - "node_modules/@swc/core-linux-arm64-musl": { - "version": "1.13.5", - "resolved": "https://registry.npmjs.org/@swc/core-linux-arm64-musl/-/core-linux-arm64-musl-1.13.5.tgz", - "integrity": "sha512-9+ZxFN5GJag4CnYnq6apKTnnezpfJhCumyz0504/JbHLo+Ue+ZtJnf3RhyA9W9TINtLE0bC4hKpWi8ZKoETyOQ==", - "cpu": [ - "arm64" - ], - "license": "Apache-2.0 AND MIT", - "optional": true, - "os": [ - "linux" - ], + "node_modules/d3-path": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/d3-path/-/d3-path-3.1.0.tgz", + "integrity": "sha512-p3KP5HCf/bvjBSSKuXid6Zqijx7wIfNW+J/maPs+iwR35at5JCbLUT0LzF1cnjbCHWhqzQTIN2Jpe8pRebIEFQ==", + "license": "ISC", "engines": { - "node": ">=10" + "node": ">=12" } }, - "node_modules/@swc/core-linux-x64-gnu": { - "version": "1.13.5", - "resolved": "https://registry.npmjs.org/@swc/core-linux-x64-gnu/-/core-linux-x64-gnu-1.13.5.tgz", - "integrity": "sha512-WD530qvHrki8Ywt/PloKUjaRKgstQqNGvmZl54g06kA+hqtSE2FTG9gngXr3UJxYu/cNAjJYiBifm7+w4nbHbA==", - "cpu": [ - "x64" - ], - "license": "Apache-2.0 AND MIT", - "optional": true, - "os": [ - "linux" - ], + "node_modules/d3-polygon": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/d3-polygon/-/d3-polygon-3.0.1.tgz", + "integrity": "sha512-3vbA7vXYwfe1SYhED++fPUQlWSYTTGmFmQiany/gdbiWgU/iEyQzyymwL9SkJjFFuCS4902BSzewVGsHHmHtXg==", + "license": "ISC", "engines": { - "node": ">=10" + "node": ">=12" } }, - "node_modules/@swc/core-linux-x64-musl": { - "version": "1.13.5", - "resolved": "https://registry.npmjs.org/@swc/core-linux-x64-musl/-/core-linux-x64-musl-1.13.5.tgz", - "integrity": "sha512-Luj8y4OFYx4DHNQTWjdIuKTq2f5k6uSXICqx+FSabnXptaOBAbJHNbHT/06JZh6NRUouaf0mYXN0mcsqvkhd7Q==", - "cpu": [ - "x64" - ], - "license": "Apache-2.0 AND MIT", - "optional": true, - "os": [ - "linux" - ], + "node_modules/d3-quadtree": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/d3-quadtree/-/d3-quadtree-3.0.1.tgz", + "integrity": "sha512-04xDrxQTDTCFwP5H6hRhsRcb9xxv2RzkcsygFzmkSIOJy3PeRJP7sNk3VRIbKXcog561P9oU0/rVH6vDROAgUw==", + "license": "ISC", "engines": { - "node": ">=10" + "node": ">=12" } }, - "node_modules/@swc/core-win32-arm64-msvc": { - "version": "1.13.5", - "resolved": "https://registry.npmjs.org/@swc/core-win32-arm64-msvc/-/core-win32-arm64-msvc-1.13.5.tgz", - "integrity": "sha512-cZ6UpumhF9SDJvv4DA2fo9WIzlNFuKSkZpZmPG1c+4PFSEMy5DFOjBSllCvnqihCabzXzpn6ykCwBmHpy31vQw==", - "cpu": [ - "arm64" - ], - "license": "Apache-2.0 AND MIT", - "optional": true, - "os": [ - "win32" - ], + "node_modules/d3-random": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/d3-random/-/d3-random-3.0.1.tgz", + "integrity": "sha512-FXMe9GfxTxqd5D6jFsQ+DJ8BJS4E/fT5mqqdjovykEB2oFbTMDVdg1MGFxfQW+FBOGoB++k8swBrgwSHT1cUXQ==", + "license": "ISC", "engines": { - "node": ">=10" + "node": ">=12" } }, - "node_modules/@swc/core-win32-ia32-msvc": { - "version": "1.13.5", - "resolved": "https://registry.npmjs.org/@swc/core-win32-ia32-msvc/-/core-win32-ia32-msvc-1.13.5.tgz", - "integrity": "sha512-C5Yi/xIikrFUzZcyGj9L3RpKljFvKiDMtyDzPKzlsDrKIw2EYY+bF88gB6oGY5RGmv4DAX8dbnpRAqgFD0FMEw==", - "cpu": [ - "ia32" - ], - "license": "Apache-2.0 AND MIT", - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">=10" + "node_modules/d3-sankey": { + "version": "0.12.3", + "resolved": "https://registry.npmjs.org/d3-sankey/-/d3-sankey-0.12.3.tgz", + "integrity": "sha512-nQhsBRmM19Ax5xEIPLMY9ZmJ/cDvd1BG3UVvt5h3WRxKg5zGRbvnteTyWAbzeSvlh3tW7ZEmq4VwR5mB3tutmQ==", + "license": "BSD-3-Clause", + "dependencies": { + "d3-array": "1 - 2", + "d3-shape": "^1.2.0" } }, - "node_modules/@swc/core-win32-x64-msvc": { - "version": "1.13.5", - "resolved": "https://registry.npmjs.org/@swc/core-win32-x64-msvc/-/core-win32-x64-msvc-1.13.5.tgz", - "integrity": "sha512-YrKdMVxbYmlfybCSbRtrilc6UA8GF5aPmGKBdPvjrarvsmf4i7ZHGCEnLtfOMd3Lwbs2WUZq3WdMbozYeLU93Q==", - "cpu": [ - "x64" - ], - "license": "Apache-2.0 AND MIT", - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">=10" + "node_modules/d3-sankey/node_modules/d3-array": { + "version": "2.12.1", + "resolved": "https://registry.npmjs.org/d3-array/-/d3-array-2.12.1.tgz", + "integrity": "sha512-B0ErZK/66mHtEsR1TkPEEkwdy+WDesimkM5gpZr5Dsg54BiTA5RXtYW5qTLIAcekaS9xfZrzBLF/OAkB3Qn1YQ==", + "license": "BSD-3-Clause", + "dependencies": { + "internmap": "^1.0.0" } }, - "node_modules/@swc/counter": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/@swc/counter/-/counter-0.1.3.tgz", - "integrity": "sha512-e2BR4lsJkkRlKZ/qCHPw9ZaSxc0MVUd7gtbtaB7aMvHeJVYe8sOB8DBZkP2DtISHGSku9sCK6T6cnY0CtXrOCQ==", - "devOptional": true, - "license": "Apache-2.0" + "node_modules/d3-sankey/node_modules/d3-path": { + "version": "1.0.9", + "resolved": "https://registry.npmjs.org/d3-path/-/d3-path-1.0.9.tgz", + "integrity": "sha512-VLaYcn81dtHVTjEHd8B+pbe9yHWpXKZUC87PzoFmsFrJqgFwDe/qxfp5MlfsfM1V5E/iVt0MmEbWQ7FVIXh/bg==", + "license": "BSD-3-Clause" }, - "node_modules/@swc/types": { - "version": "0.1.25", - "resolved": "https://registry.npmjs.org/@swc/types/-/types-0.1.25.tgz", - "integrity": "sha512-iAoY/qRhNH8a/hBvm3zKj9qQ4oc2+3w1unPJa2XvTK3XjeLXtzcCingVPw/9e5mn1+0yPqxcBGp9Jf0pkfMb1g==", - "devOptional": true, - "license": "Apache-2.0", + "node_modules/d3-sankey/node_modules/d3-shape": { + "version": "1.3.7", + "resolved": "https://registry.npmjs.org/d3-shape/-/d3-shape-1.3.7.tgz", + "integrity": "sha512-EUkvKjqPFUAZyOlhY5gzCxCeI0Aep04LwIRpsZ/mLFelJiUfnK56jo5JMDSE7yyP2kLSb6LtF+S5chMk7uqPqw==", + "license": "BSD-3-Clause", "dependencies": { - "@swc/counter": "^0.1.3" + "d3-path": "1" } }, - "node_modules/@szmarczak/http-timer": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/@szmarczak/http-timer/-/http-timer-5.0.1.tgz", - "integrity": "sha512-+PmQX0PiAYPMeVYe237LJAYvOMYW1j2rH5YROyS3b4CTVJum34HfRvKvAzozHAQG0TnHNdUfY9nCeUyRAs//cw==", - "dev": true, - "license": "MIT", + "node_modules/d3-sankey/node_modules/internmap": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/internmap/-/internmap-1.0.1.tgz", + "integrity": "sha512-lDB5YccMydFBtasVtxnZ3MRBHuaoE8GKsppq+EchKL2U4nK/DmEpPHNH8MZe5HkMtpSiTSOZwfN0tzYjO/lJEw==", + "license": "ISC" + }, + "node_modules/d3-scale": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/d3-scale/-/d3-scale-4.0.2.tgz", + "integrity": "sha512-GZW464g1SH7ag3Y7hXjf8RoUuAFIqklOAq3MRl4OaWabTFJY9PN/E1YklhXLh+OQ3fM9yS2nOkCoS+WLZ6kvxQ==", + "license": "ISC", "dependencies": { - "defer-to-connect": "^2.0.1" + "d3-array": "2.10.0 - 3", + "d3-format": "1 - 3", + "d3-interpolate": "1.2.0 - 3", + "d3-time": "2.1.1 - 3", + "d3-time-format": "2 - 4" }, "engines": { - "node": ">=14.16" + "node": ">=12" } }, - "node_modules/@tanstack/query-core": { - "version": "5.90.2", - "resolved": "https://registry.npmjs.org/@tanstack/query-core/-/query-core-5.90.2.tgz", - "integrity": "sha512-k/TcR3YalnzibscALLwxeiLUub6jN5EDLwKDiO7q5f4ICEoptJ+n9+7vcEFy5/x/i6Q+Lb/tXrsKCggf5uQJXQ==", - "license": "MIT", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/tannerlinsley" + "node_modules/d3-scale-chromatic": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/d3-scale-chromatic/-/d3-scale-chromatic-3.1.0.tgz", + "integrity": "sha512-A3s5PWiZ9YCXFye1o246KoscMWqf8BsD9eRiJ3He7C9OBaxKhAd5TFCdEx/7VbKtxxTsu//1mMJFrEt572cEyQ==", + "license": "ISC", + "dependencies": { + "d3-color": "1 - 3", + "d3-interpolate": "1 - 3" + }, + "engines": { + "node": ">=12" } }, - "node_modules/@tanstack/react-query": { - "version": "4.41.0", - "resolved": "https://registry.npmjs.org/@tanstack/react-query/-/react-query-4.41.0.tgz", - "integrity": "sha512-4/euCZAv8zeaB5P/nQiySzB0JHM3tiraU9KjSvSlJAX7oIE9uPDZlHCkDg/bHYNXewzvsg0FtOMq0VUq8XMMOQ==", - "license": "MIT", + "node_modules/d3-selection": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/d3-selection/-/d3-selection-3.0.0.tgz", + "integrity": "sha512-fmTRWbNMmsmWq6xJV8D19U/gw/bwrHfNXxrIN+HfZgnzqTHp9jOmKMhsTUjXOJnZOdZY9Q28y4yebKzqDKlxlQ==", + "license": "ISC", + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-shape": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/d3-shape/-/d3-shape-3.2.0.tgz", + "integrity": "sha512-SaLBuwGm3MOViRq2ABk3eLoxwZELpH6zhl3FbAoJ7Vm1gofKx6El1Ib5z23NUEhF9AsGl7y+dzLe5Cw2AArGTA==", + "license": "ISC", "dependencies": { - "@tanstack/query-core": "4.41.0", - "use-sync-external-store": "^1.2.0" + "d3-path": "^3.1.0" }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/tannerlinsley" + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-time": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/d3-time/-/d3-time-3.1.0.tgz", + "integrity": "sha512-VqKjzBLejbSMT4IgbmVgDjpkYrNWUYJnbCGo874u7MMKIWsILRX+OpX/gTk8MqjpT1A/c6HY2dCA77ZN0lkQ2Q==", + "license": "ISC", + "dependencies": { + "d3-array": "2 - 3" }, - "peerDependencies": { - "react": "^16.8.0 || ^17.0.0 || ^18.0.0", - "react-dom": "^16.8.0 || ^17.0.0 || ^18.0.0", - "react-native": "*" + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-time-format": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/d3-time-format/-/d3-time-format-4.1.0.tgz", + "integrity": "sha512-dJxPBlzC7NugB2PDLwo9Q8JiTR3M3e4/XANkreKSUxF8vvXKqm1Yfq4Q5dl8budlunRVlUUaDUgFt7eA8D6NLg==", + "license": "ISC", + "dependencies": { + "d3-time": "1 - 3" }, - "peerDependenciesMeta": { - "react-dom": { - "optional": true - }, - "react-native": { - "optional": true - } + "engines": { + "node": ">=12" } }, - "node_modules/@tanstack/react-query/node_modules/@tanstack/query-core": { - "version": "4.41.0", - "resolved": "https://registry.npmjs.org/@tanstack/query-core/-/query-core-4.41.0.tgz", - "integrity": "sha512-193R4Jp9hjvlij6LryxrB5Mpbffd2L9PeWh3KlIy/hJV4SkBOfiQZ+jc5qAZLDCrdbkA5FjGj+UoDYw6TcNnyA==", - "license": "MIT", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/tannerlinsley" + "node_modules/d3-timer": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/d3-timer/-/d3-timer-3.0.1.tgz", + "integrity": "sha512-ndfJ/JxxMd3nw31uyKoY2naivF+r29V+Lc0svZxe1JvvIRmi8hUsrMvdOwgS1o6uBHmiz91geQ0ylPP0aj1VUA==", + "license": "ISC", + "engines": { + "node": ">=12" } }, - "node_modules/@tanstack/react-table": { - "version": "8.21.3", - "resolved": "https://registry.npmjs.org/@tanstack/react-table/-/react-table-8.21.3.tgz", - "integrity": "sha512-5nNMTSETP4ykGegmVkhjcS8tTLW6Vl4axfEGQN3v0zdHYbK4UfoqfPChclTrJ4EoK9QynqAu9oUf8VEmrpZ5Ww==", - "license": "MIT", + "node_modules/d3-transition": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/d3-transition/-/d3-transition-3.0.1.tgz", + "integrity": "sha512-ApKvfjsSR6tg06xrL434C0WydLr7JewBB3V+/39RMHsaXTOG0zmt/OAXeng5M5LBm0ojmxJrpomQVZ1aPvBL4w==", + "license": "ISC", "dependencies": { - "@tanstack/table-core": "8.21.3" + "d3-color": "1 - 3", + "d3-dispatch": "1 - 3", + "d3-ease": "1 - 3", + "d3-interpolate": "1 - 3", + "d3-timer": "1 - 3" }, "engines": { "node": ">=12" }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/tannerlinsley" - }, "peerDependencies": { - "react": ">=16.8", - "react-dom": ">=16.8" + "d3-selection": "2 - 3" } }, - "node_modules/@tanstack/table-core": { - "version": "8.21.3", - "resolved": "https://registry.npmjs.org/@tanstack/table-core/-/table-core-8.21.3.tgz", - "integrity": "sha512-ldZXEhOBb8Is7xLs01fR3YEc3DERiz5silj8tnGkFZytt1abEvl/GhUmCE0PMLaMPTa3Jk4HbKmRlHmu+gCftg==", - "license": "MIT", + "node_modules/d3-zoom": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/d3-zoom/-/d3-zoom-3.0.0.tgz", + "integrity": "sha512-b8AmV3kfQaqWAuacbPuNbL6vahnOJflOhexLzMMNLga62+/nh0JzvJ0aO/5a5MVgUFGS7Hu1P9P03o3fJkDCyw==", + "license": "ISC", + "dependencies": { + "d3-dispatch": "1 - 3", + "d3-drag": "2 - 3", + "d3-interpolate": "1 - 3", + "d3-selection": "2 - 3", + "d3-transition": "2 - 3" + }, "engines": { "node": ">=12" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/tannerlinsley" } }, - "node_modules/@terminal3/bbs_vc": { - "version": "0.2.18", - "resolved": "https://registry.npmjs.org/@terminal3/bbs_vc/-/bbs_vc-0.2.18.tgz", - "integrity": "sha512-Jnm2EuWZYAcSnfqXuIRo3wEQp+mktT7CJACapJJHiQ9cewY1S5MoYv0R8vLk1x6M+wAs2JDXbCGQ9psCfkVBog==", + "node_modules/dagre-d3-es": { + "version": "7.0.13", + "resolved": "https://registry.npmjs.org/dagre-d3-es/-/dagre-d3-es-7.0.13.tgz", + "integrity": "sha512-efEhnxpSuwpYOKRm/L5KbqoZmNNukHa/Flty4Wp62JRvgH2ojwVgPgdYyr4twpieZnyRDdIH7PY2mopX26+j2Q==", "license": "MIT", "dependencies": { - "@mattrglobal/bbs-signatures": "^1.3.1", - "@noble/curves": "^1.4.2", - "@noble/hashes": "^1.4.0", - "@terminal3/vc_core": "0.0.19", - "@terminal3/verify_vc_core": "0.0.19", - "@types/jsonld": "^1.5.15", - "@types/uuid": "^10.0.0", - "base64url": "^3.0.1", - "cbor": "^9.0.2", - "did-jwt": "^8.0.4", - "ethers": "^6.13.1", - "jsonld": "^8.3.2", - "klona": "^2.0.6", - "multiformats": "^13.1.3", - "uuid": "^10.0.0" + "d3": "^7.9.0", + "lodash-es": "^4.17.21" } }, - "node_modules/@terminal3/bbs_vc/node_modules/@adraffy/ens-normalize": { - "version": "1.10.1", - "resolved": "https://registry.npmjs.org/@adraffy/ens-normalize/-/ens-normalize-1.10.1.tgz", - "integrity": "sha512-96Z2IP3mYmF1Xg2cDm8f1gWGf/HUVedQ3FMifV4kG/PQ4yEP51xDtRAEfhVNt5f/uzpNkZHwWQuUcu6D6K+Ekw==", - "license": "MIT" - }, - "node_modules/@terminal3/bbs_vc/node_modules/@terminal3/revoke_vc": { - "version": "0.1.15", - "resolved": "https://registry.npmjs.org/@terminal3/revoke_vc/-/revoke_vc-0.1.15.tgz", - "integrity": "sha512-/Y4svhJcsRe/mMlZtPRtInpuctMxcSVsaLcpVnbC1KDksD4FiVWby/Cknb8LItFN+NgqjgJ5JFutFmEjrqA2Yg==", + "node_modules/dargs": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/dargs/-/dargs-8.1.0.tgz", + "integrity": "sha512-wAV9QHOsNbwnWdNW2FYvE1P56wtgSbM+3SZcdGiWQILwVjACCXDCI3Ai8QlCjMDB8YK5zySiXZYBiwGmNY3lnw==", + "dev": true, "license": "MIT", - "dependencies": { - "@noble/curves": "^1.4.2", - "@terminal3/vc_core": "0.0.19", - "did-jwt": "^8.0.4", - "ethers": "^6.13.1" + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/@terminal3/bbs_vc/node_modules/@terminal3/vc_core": { - "version": "0.0.19", - "resolved": "https://registry.npmjs.org/@terminal3/vc_core/-/vc_core-0.0.19.tgz", - "integrity": "sha512-65JJePRqftFq5nIsBU9/bsUUlMBKzTQU14Ml037g0QUnsrcHgSWLM/lma3YNv0qx03yWVSirEicLC9ZD4Bj+MQ==", + "node_modules/data-uri-to-buffer": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/data-uri-to-buffer/-/data-uri-to-buffer-4.0.1.tgz", + "integrity": "sha512-0R9ikRb668HB7QDxT1vkpuUBtqc53YyAwMwGeUFKRojY/NWKvdZ+9UYtRfGmhqNbRkTSVpMbmyhXipFFv2cb/A==", "license": "MIT", - "dependencies": { - "did-jwt": "^8.0.4", - "ethers": "^6.13.1", - "uuid": "^10.0.0" + "engines": { + "node": ">= 12" } }, - "node_modules/@terminal3/bbs_vc/node_modules/@terminal3/verify_vc_core": { - "version": "0.0.19", - "resolved": "https://registry.npmjs.org/@terminal3/verify_vc_core/-/verify_vc_core-0.0.19.tgz", - "integrity": "sha512-esUoQKSAzjOwL4Qyea0a7zYt8piuHRLmZd+3CjXlpbSDylpjWJBW6pxFvkR/UVUiXc9cXrdbrJwL0JbCGwMPWw==", + "node_modules/data-urls": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/data-urls/-/data-urls-5.0.0.tgz", + "integrity": "sha512-ZYP5VBHshaDAiVZxjbRVcFJpc+4xGgT0bK3vzy1HLN8jTO975HEbuYzZJcHoQEY5K1a0z8YayJkyVETa08eNTg==", + "dev": true, "license": "MIT", "dependencies": { - "@noble/curves": "^1.4.2", - "@terminal3/revoke_vc": "0.1.15", - "@terminal3/vc_core": "0.0.19", - "did-jwt": "^8.0.4", - "ethers": "^6.13.1" + "whatwg-mimetype": "^4.0.0", + "whatwg-url": "^14.0.0" + }, + "engines": { + "node": ">=18" } }, - "node_modules/@terminal3/bbs_vc/node_modules/@types/node": { - "version": "22.7.5", - "resolved": "https://registry.npmjs.org/@types/node/-/node-22.7.5.tgz", - "integrity": "sha512-jML7s2NAzMWc//QSJ1a3prpk78cOPchGvXJsC3C6R6PSMoooztvRVQEz89gmBTBY1SPMaqo5teB4uNHPdetShQ==", + "node_modules/data-view-buffer": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/data-view-buffer/-/data-view-buffer-1.0.2.tgz", + "integrity": "sha512-EmKO5V3OLXh1rtK2wgXRansaK1/mtVdTUEiEI0W8RkvgT05kfxaH29PliLnpLP73yYO6142Q72QNa8Wx/A5CqQ==", + "dev": true, "license": "MIT", "dependencies": { - "undici-types": "~6.19.2" + "call-bound": "^1.0.3", + "es-errors": "^1.3.0", + "is-data-view": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/@terminal3/bbs_vc/node_modules/@types/uuid": { - "version": "10.0.0", - "resolved": "https://registry.npmjs.org/@types/uuid/-/uuid-10.0.0.tgz", - "integrity": "sha512-7gqG38EyHgyP1S+7+xomFtL+ZNHcKv6DwNaCZmJmo1vgMugyF3TCnXVg4t1uk89mLNwnLtnY3TpOpCOyp1/xHQ==", - "license": "MIT" - }, - "node_modules/@terminal3/bbs_vc/node_modules/aes-js": { - "version": "4.0.0-beta.5", - "resolved": "https://registry.npmjs.org/aes-js/-/aes-js-4.0.0-beta.5.tgz", - "integrity": "sha512-G965FqalsNyrPqgEGON7nIx1e/OVENSgiEIzyC63haUMuvNnwIgIjMs52hlTCKhkBny7A2ORNlfY9Zu+jmGk1Q==", - "license": "MIT" - }, - "node_modules/@terminal3/bbs_vc/node_modules/cbor": { - "version": "9.0.2", - "resolved": "https://registry.npmjs.org/cbor/-/cbor-9.0.2.tgz", - "integrity": "sha512-JPypkxsB10s9QOWwa6zwPzqE1Md3vqpPc+cai4sAecuCsRyAtAl/pMyhPlMbT/xtPnm2dznJZYRLui57qiRhaQ==", + "node_modules/data-view-byte-length": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/data-view-byte-length/-/data-view-byte-length-1.0.2.tgz", + "integrity": "sha512-tuhGbE6CfTM9+5ANGf+oQb72Ky/0+s3xKUpHvShfiz2RxMFgFPjsXuRLBVMtvMs15awe45SRb83D6wH4ew6wlQ==", + "dev": true, "license": "MIT", "dependencies": { - "nofilter": "^3.1.0" + "call-bound": "^1.0.3", + "es-errors": "^1.3.0", + "is-data-view": "^1.0.2" }, "engines": { - "node": ">=16" + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/inspect-js" } }, - "node_modules/@terminal3/bbs_vc/node_modules/ethers": { - "version": "6.15.0", - "resolved": "https://registry.npmjs.org/ethers/-/ethers-6.15.0.tgz", - "integrity": "sha512-Kf/3ZW54L4UT0pZtsY/rf+EkBU7Qi5nnhonjUb8yTXcxH3cdcWrV2cRyk0Xk/4jK6OoHhxxZHriyhje20If2hQ==", - "funding": [ - { - "type": "individual", - "url": "https://github.com/sponsors/ethers-io/" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], + "node_modules/data-view-byte-offset": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/data-view-byte-offset/-/data-view-byte-offset-1.0.1.tgz", + "integrity": "sha512-BS8PfmtDGnrgYdOonGZQdLZslWIeCGFP9tpan0hi1Co2Zr2NKADsvGYA8XxuG/4UWgJ6Cjtv+YJnB6MM69QGlQ==", + "dev": true, "license": "MIT", "dependencies": { - "@adraffy/ens-normalize": "1.10.1", - "@noble/curves": "1.2.0", - "@noble/hashes": "1.3.2", - "@types/node": "22.7.5", - "aes-js": "4.0.0-beta.5", - "tslib": "2.7.0", - "ws": "8.17.1" + "call-bound": "^1.0.2", + "es-errors": "^1.3.0", + "is-data-view": "^1.0.1" }, "engines": { - "node": ">=14.0.0" + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/@terminal3/bbs_vc/node_modules/ethers/node_modules/@noble/curves": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@noble/curves/-/curves-1.2.0.tgz", - "integrity": "sha512-oYclrNgRaM9SsBUBVbb8M6DTV7ZHRTKugureoYEncY5c65HOmRzvSiTE3y5CYaPYJA/GVkrhXEoF0M3Ya9PMnw==", + "node_modules/date-fns": { + "version": "2.30.0", + "resolved": "https://registry.npmjs.org/date-fns/-/date-fns-2.30.0.tgz", + "integrity": "sha512-fnULvOpxnC5/Vg3NCiWelDsLiUc9bRwAPs/+LfTLNvetFCtCTN+yQz15C/fs4AwX1R9K5GLtLfn8QW+dWisaAw==", "license": "MIT", + "peer": true, "dependencies": { - "@noble/hashes": "1.3.2" + "@babel/runtime": "^7.21.0" + }, + "engines": { + "node": ">=0.11" }, "funding": { - "url": "https://paulmillr.com/funding/" + "type": "opencollective", + "url": "https://opencollective.com/date-fns" } }, - "node_modules/@terminal3/bbs_vc/node_modules/ethers/node_modules/@noble/hashes": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.3.2.tgz", - "integrity": "sha512-MVC8EAQp7MvEcm30KWENFjgR+Mkmf+D189XJTkFIlwohU5hcBbn1ZkKq7KVTi2Hme3PMGF390DaL52beVrIihQ==", + "node_modules/date-fns-tz": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/date-fns-tz/-/date-fns-tz-2.0.1.tgz", + "integrity": "sha512-fJCG3Pwx8HUoLhkepdsP7Z5RsucUi+ZBOxyM5d0ZZ6c4SdYustq0VMmOu6Wf7bli+yS/Jwp91TOCqn9jMcVrUA==", + "dev": true, "license": "MIT", - "engines": { - "node": ">= 16" - }, - "funding": { - "url": "https://paulmillr.com/funding/" + "peerDependencies": { + "date-fns": "2.x" } }, - "node_modules/@terminal3/bbs_vc/node_modules/tslib": { - "version": "2.7.0", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.7.0.tgz", - "integrity": "sha512-gLXCKdN1/j47AiHiOkJN69hJmcbGTHI0ImLmbYLHykhgeN0jVGola9yVjFgzCUklsZQMW55o+dW7IXv3RCXDzA==", - "license": "0BSD" + "node_modules/dateformat": { + "version": "4.6.3", + "resolved": "https://registry.npmjs.org/dateformat/-/dateformat-4.6.3.tgz", + "integrity": "sha512-2P0p0pFGzHS5EMnhdxQi7aJN+iMheud0UhG4dlE1DLAlvL8JHjJJTX/CSm4JXwV0Ka5nGk3zC5mcb5bUQUxxMA==", + "license": "MIT", + "engines": { + "node": "*" + } }, - "node_modules/@terminal3/bbs_vc/node_modules/undici-types": { - "version": "6.19.8", - "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.19.8.tgz", - "integrity": "sha512-ve2KP6f/JnbPBFyobGHuerC9g1FYGn/F8n1LWTwNxCEzd6IfqTwUQcNXgEtmmQ6DlRrC1hrSrBnCZPokRrDHjw==", + "node_modules/dayjs": { + "version": "1.11.18", + "resolved": "https://registry.npmjs.org/dayjs/-/dayjs-1.11.18.tgz", + "integrity": "sha512-zFBQ7WFRvVRhKcWoUh+ZA1g2HVgUbsZm9sbddh8EC5iv93sui8DVVz1Npvz+r6meo9VKfa8NyLWBsQK1VvIKPA==", "license": "MIT" }, - "node_modules/@terminal3/bbs_vc/node_modules/uuid": { - "version": "10.0.0", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-10.0.0.tgz", - "integrity": "sha512-8XkAphELsDnEGrDxUOHB3RGvXz6TeuYSGEZBOjtTtPm2lwhGBjLgOzLHB63IUWfBpNucQjND6d3AOudO+H3RWQ==", - "funding": [ - "https://github.com/sponsors/broofa", - "https://github.com/sponsors/ctavan" - ], - "license": "MIT", - "bin": { - "uuid": "dist/bin/uuid" - } + "node_modules/death": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/death/-/death-1.1.0.tgz", + "integrity": "sha512-vsV6S4KVHvTGxbEcij7hkWRv0It+sGGWVOM67dQde/o5Xjnr+KmLjxWJii2uEObIrt1CcM9w0Yaovx+iOlIL+w==", + "dev": true }, - "node_modules/@terminal3/bbs_vc/node_modules/ws": { - "version": "8.17.1", - "resolved": "https://registry.npmjs.org/ws/-/ws-8.17.1.tgz", - "integrity": "sha512-6XQFvXTkbfUOZOKKILFG1PDK2NDQs4azKQl26T0YS5CxqWLgXajbPZ+h4gZekJyRqFU8pvnbAbbs/3TgRPy+GQ==", + "node_modules/debounce": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/debounce/-/debounce-1.2.1.tgz", + "integrity": "sha512-XRRe6Glud4rd/ZGQfiV1ruXSfbvfJedlV9Y6zOlP+2K04vBYiJEte6stfFkCP03aMnY5tsipamumUjL14fofug==", + "license": "MIT" + }, + "node_modules/debug": { + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.1.tgz", + "integrity": "sha512-KcKCqiftBJcZr++7ykoDIEwSa3XWowTfNPo92BYxjXiyYEVrUQh2aLyhxBCwww+heortUFxEJYcRzosstTEBYQ==", "license": "MIT", - "engines": { - "node": ">=10.0.0" + "dependencies": { + "ms": "^2.1.3" }, - "peerDependencies": { - "bufferutil": "^4.0.1", - "utf-8-validate": ">=5.0.2" + "engines": { + "node": ">=6.0" }, "peerDependenciesMeta": { - "bufferutil": { - "optional": true - }, - "utf-8-validate": { + "supports-color": { "optional": true } } }, - "node_modules/@terminal3/ecdsa_vc": { - "version": "0.1.25", - "resolved": "https://registry.npmjs.org/@terminal3/ecdsa_vc/-/ecdsa_vc-0.1.25.tgz", - "integrity": "sha512-Gik0nh0gwT0IBMGZe7Ad/tajDC8PeTynvd+SomnPr/3fBliDpjdGZeQ0jPhWDUH30vSPlt+9A8ivHhwJLTT0xA==", + "node_modules/decamelize": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-4.0.0.tgz", + "integrity": "sha512-9iE1PgSik9HeIIw2JO94IidnE3eBoQrFJ3w7sFuzSX4DpmZ3v5sZpUiV5Swcf6mQEF+Y0ru8Neo+p+nyh2J+hQ==", "dev": true, "license": "MIT", - "dependencies": { - "@terminal3/vc_core": "0.0.28", - "@terminal3/verify_vc_core": "0.0.28", - "did-resolver": "^4.1.0", - "ethers": "^6.11.1", - "ethr-did-resolver": "^11.0.3" + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/@terminal3/ecdsa_vc/node_modules/@adraffy/ens-normalize": { - "version": "1.10.1", - "resolved": "https://registry.npmjs.org/@adraffy/ens-normalize/-/ens-normalize-1.10.1.tgz", - "integrity": "sha512-96Z2IP3mYmF1Xg2cDm8f1gWGf/HUVedQ3FMifV4kG/PQ4yEP51xDtRAEfhVNt5f/uzpNkZHwWQuUcu6D6K+Ekw==", + "node_modules/decimal.js": { + "version": "10.6.0", + "resolved": "https://registry.npmjs.org/decimal.js/-/decimal.js-10.6.0.tgz", + "integrity": "sha512-YpgQiITW3JXGntzdUmyUR1V812Hn8T1YVXhCu+wO3OpS4eU9l4YdD3qjyiKdV6mvV29zapkMeD390UVEf2lkUg==", "dev": true, "license": "MIT" }, - "node_modules/@terminal3/ecdsa_vc/node_modules/@noble/curves": { + "node_modules/decode-named-character-reference": { "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@noble/curves/-/curves-1.2.0.tgz", - "integrity": "sha512-oYclrNgRaM9SsBUBVbb8M6DTV7ZHRTKugureoYEncY5c65HOmRzvSiTE3y5CYaPYJA/GVkrhXEoF0M3Ya9PMnw==", - "dev": true, + "resolved": "https://registry.npmjs.org/decode-named-character-reference/-/decode-named-character-reference-1.2.0.tgz", + "integrity": "sha512-c6fcElNV6ShtZXmsgNgFFV5tVX2PaV4g+MOAkb8eXHvn6sryJBrZa9r0zV6+dtTyoCKxtDy5tyQ5ZwQuidtd+Q==", "license": "MIT", "dependencies": { - "@noble/hashes": "1.3.2" + "character-entities": "^2.0.0" }, "funding": { - "url": "https://paulmillr.com/funding/" + "type": "github", + "url": "https://github.com/sponsors/wooorm" } }, - "node_modules/@terminal3/ecdsa_vc/node_modules/@noble/hashes": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.3.2.tgz", - "integrity": "sha512-MVC8EAQp7MvEcm30KWENFjgR+Mkmf+D189XJTkFIlwohU5hcBbn1ZkKq7KVTi2Hme3PMGF390DaL52beVrIihQ==", - "dev": true, + "node_modules/decode-named-character-reference/node_modules/character-entities": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/character-entities/-/character-entities-2.0.2.tgz", + "integrity": "sha512-shx7oQ0Awen/BRIdkjkvz54PnEEI/EjwXDSIZp86/KKdbafHh1Df/RYGBhn4hbe2+uKC9FnT5UCEdyPz3ai9hQ==", "license": "MIT", - "engines": { - "node": ">= 16" - }, "funding": { - "url": "https://paulmillr.com/funding/" + "type": "github", + "url": "https://github.com/sponsors/wooorm" } }, - "node_modules/@terminal3/ecdsa_vc/node_modules/@types/node": { - "version": "22.7.5", - "resolved": "https://registry.npmjs.org/@types/node/-/node-22.7.5.tgz", - "integrity": "sha512-jML7s2NAzMWc//QSJ1a3prpk78cOPchGvXJsC3C6R6PSMoooztvRVQEz89gmBTBY1SPMaqo5teB4uNHPdetShQ==", - "dev": true, + "node_modules/decode-uri-component": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.2.tgz", + "integrity": "sha512-FqUYQ+8o158GyGTrMFJms9qh3CqTKvAqgqsTnkLI8sKu0028orqBhxNMFkFen0zGyg6epACD32pjVk58ngIErQ==", "license": "MIT", - "dependencies": { - "undici-types": "~6.19.2" + "engines": { + "node": ">=0.10" } }, - "node_modules/@terminal3/ecdsa_vc/node_modules/aes-js": { - "version": "4.0.0-beta.5", - "resolved": "https://registry.npmjs.org/aes-js/-/aes-js-4.0.0-beta.5.tgz", - "integrity": "sha512-G965FqalsNyrPqgEGON7nIx1e/OVENSgiEIzyC63haUMuvNnwIgIjMs52hlTCKhkBny7A2ORNlfY9Zu+jmGk1Q==", - "dev": true, - "license": "MIT" - }, - "node_modules/@terminal3/ecdsa_vc/node_modules/ethers": { - "version": "6.15.0", - "resolved": "https://registry.npmjs.org/ethers/-/ethers-6.15.0.tgz", - "integrity": "sha512-Kf/3ZW54L4UT0pZtsY/rf+EkBU7Qi5nnhonjUb8yTXcxH3cdcWrV2cRyk0Xk/4jK6OoHhxxZHriyhje20If2hQ==", - "dev": true, - "funding": [ - { - "type": "individual", - "url": "https://github.com/sponsors/ethers-io/" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], + "node_modules/decompress-response": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-6.0.0.tgz", + "integrity": "sha512-aW35yZM6Bb/4oJlZncMH2LCoZtJXTRxES17vE3hoRiowU2kWHaJKFkSBDnDR+cm9J+9QhXmREyIfv0pji9ejCQ==", "license": "MIT", "dependencies": { - "@adraffy/ens-normalize": "1.10.1", - "@noble/curves": "1.2.0", - "@noble/hashes": "1.3.2", - "@types/node": "22.7.5", - "aes-js": "4.0.0-beta.5", - "tslib": "2.7.0", - "ws": "8.17.1" + "mimic-response": "^3.1.0" }, "engines": { - "node": ">=14.0.0" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/@terminal3/ecdsa_vc/node_modules/tslib": { - "version": "2.7.0", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.7.0.tgz", - "integrity": "sha512-gLXCKdN1/j47AiHiOkJN69hJmcbGTHI0ImLmbYLHykhgeN0jVGola9yVjFgzCUklsZQMW55o+dW7IXv3RCXDzA==", - "dev": true, - "license": "0BSD" - }, - "node_modules/@terminal3/ecdsa_vc/node_modules/undici-types": { - "version": "6.19.8", - "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.19.8.tgz", - "integrity": "sha512-ve2KP6f/JnbPBFyobGHuerC9g1FYGn/F8n1LWTwNxCEzd6IfqTwUQcNXgEtmmQ6DlRrC1hrSrBnCZPokRrDHjw==", - "dev": true, - "license": "MIT" - }, - "node_modules/@terminal3/ecdsa_vc/node_modules/ws": { - "version": "8.17.1", - "resolved": "https://registry.npmjs.org/ws/-/ws-8.17.1.tgz", - "integrity": "sha512-6XQFvXTkbfUOZOKKILFG1PDK2NDQs4azKQl26T0YS5CxqWLgXajbPZ+h4gZekJyRqFU8pvnbAbbs/3TgRPy+GQ==", - "dev": true, + "node_modules/decompress-response/node_modules/mimic-response": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-3.1.0.tgz", + "integrity": "sha512-z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb064c6Wr4N/wv0DzQTjNzHNGQ==", "license": "MIT", "engines": { - "node": ">=10.0.0" + "node": ">=10" }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/dedent": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/dedent/-/dedent-1.7.0.tgz", + "integrity": "sha512-HGFtf8yhuhGhqO07SV79tRp+br4MnbdjeVxotpn1QBl30pcLLCQjX5b2295ll0fv8RKDKsmWYrl05usHM9CewQ==", + "license": "MIT", "peerDependencies": { - "bufferutil": "^4.0.1", - "utf-8-validate": ">=5.0.2" + "babel-plugin-macros": "^3.1.0" }, "peerDependenciesMeta": { - "bufferutil": { - "optional": true - }, - "utf-8-validate": { + "babel-plugin-macros": { "optional": true } } }, - "node_modules/@terminal3/revoke_vc": { - "version": "0.1.24", - "resolved": "https://registry.npmjs.org/@terminal3/revoke_vc/-/revoke_vc-0.1.24.tgz", - "integrity": "sha512-ofImOXYql9ZAfPuv3znnxIMJa5VUn+b8a39xrISB5LlxgZoVO4jG3sSIQoGvATY+yxCxYwWNmoMR770zlcwpjQ==", - "dev": true, + "node_modules/deep-eql": { + "version": "4.1.4", + "resolved": "https://registry.npmjs.org/deep-eql/-/deep-eql-4.1.4.tgz", + "integrity": "sha512-SUwdGfqdKOwxCPeVYjwSyRpJ7Z+fhpwIAtmCUdZIWZ/YP5R9WAsyuSgpLVDi9bjWoN2LXHNss/dk3urXtdQxGg==", "license": "MIT", "dependencies": { - "@noble/curves": "^1.4.2", - "@terminal3/vc_core": "0.0.28", - "did-jwt": "^8.0.4", - "ethers": "^6.13.1" + "type-detect": "^4.0.0" + }, + "engines": { + "node": ">=6" } }, - "node_modules/@terminal3/revoke_vc/node_modules/@adraffy/ens-normalize": { - "version": "1.10.1", - "resolved": "https://registry.npmjs.org/@adraffy/ens-normalize/-/ens-normalize-1.10.1.tgz", - "integrity": "sha512-96Z2IP3mYmF1Xg2cDm8f1gWGf/HUVedQ3FMifV4kG/PQ4yEP51xDtRAEfhVNt5f/uzpNkZHwWQuUcu6D6K+Ekw==", - "dev": true, - "license": "MIT" - }, - "node_modules/@terminal3/revoke_vc/node_modules/@noble/hashes": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.3.2.tgz", - "integrity": "sha512-MVC8EAQp7MvEcm30KWENFjgR+Mkmf+D189XJTkFIlwohU5hcBbn1ZkKq7KVTi2Hme3PMGF390DaL52beVrIihQ==", + "node_modules/deep-equal": { + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/deep-equal/-/deep-equal-2.2.3.tgz", + "integrity": "sha512-ZIwpnevOurS8bpT4192sqAowWM76JDKSHYzMLty3BZGSswgq6pBaH3DhCSW5xVAZICZyKdOBPjwww5wfgT/6PA==", "dev": true, "license": "MIT", + "dependencies": { + "array-buffer-byte-length": "^1.0.0", + "call-bind": "^1.0.5", + "es-get-iterator": "^1.1.3", + "get-intrinsic": "^1.2.2", + "is-arguments": "^1.1.1", + "is-array-buffer": "^3.0.2", + "is-date-object": "^1.0.5", + "is-regex": "^1.1.4", + "is-shared-array-buffer": "^1.0.2", + "isarray": "^2.0.5", + "object-is": "^1.1.5", + "object-keys": "^1.1.1", + "object.assign": "^4.1.4", + "regexp.prototype.flags": "^1.5.1", + "side-channel": "^1.0.4", + "which-boxed-primitive": "^1.0.2", + "which-collection": "^1.0.1", + "which-typed-array": "^1.1.13" + }, "engines": { - "node": ">= 16" + "node": ">= 0.4" }, "funding": { - "url": "https://paulmillr.com/funding/" + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/@terminal3/revoke_vc/node_modules/@types/node": { - "version": "22.7.5", - "resolved": "https://registry.npmjs.org/@types/node/-/node-22.7.5.tgz", - "integrity": "sha512-jML7s2NAzMWc//QSJ1a3prpk78cOPchGvXJsC3C6R6PSMoooztvRVQEz89gmBTBY1SPMaqo5teB4uNHPdetShQ==", - "dev": true, + "node_modules/deep-extend": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz", + "integrity": "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==", "license": "MIT", - "dependencies": { - "undici-types": "~6.19.2" + "engines": { + "node": ">=4.0.0" } }, - "node_modules/@terminal3/revoke_vc/node_modules/aes-js": { - "version": "4.0.0-beta.5", - "resolved": "https://registry.npmjs.org/aes-js/-/aes-js-4.0.0-beta.5.tgz", - "integrity": "sha512-G965FqalsNyrPqgEGON7nIx1e/OVENSgiEIzyC63haUMuvNnwIgIjMs52hlTCKhkBny7A2ORNlfY9Zu+jmGk1Q==", + "node_modules/deep-is": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", + "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==", "dev": true, "license": "MIT" }, - "node_modules/@terminal3/revoke_vc/node_modules/ethers": { - "version": "6.15.0", - "resolved": "https://registry.npmjs.org/ethers/-/ethers-6.15.0.tgz", - "integrity": "sha512-Kf/3ZW54L4UT0pZtsY/rf+EkBU7Qi5nnhonjUb8yTXcxH3cdcWrV2cRyk0Xk/4jK6OoHhxxZHriyhje20If2hQ==", - "dev": true, - "funding": [ - { - "type": "individual", - "url": "https://github.com/sponsors/ethers-io/" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], + "node_modules/deepmerge": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.3.1.tgz", + "integrity": "sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==", "license": "MIT", - "dependencies": { - "@adraffy/ens-normalize": "1.10.1", - "@noble/curves": "1.2.0", - "@noble/hashes": "1.3.2", - "@types/node": "22.7.5", - "aes-js": "4.0.0-beta.5", - "tslib": "2.7.0", - "ws": "8.17.1" - }, "engines": { - "node": ">=14.0.0" + "node": ">=0.10.0" } }, - "node_modules/@terminal3/revoke_vc/node_modules/ethers/node_modules/@noble/curves": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@noble/curves/-/curves-1.2.0.tgz", - "integrity": "sha512-oYclrNgRaM9SsBUBVbb8M6DTV7ZHRTKugureoYEncY5c65HOmRzvSiTE3y5CYaPYJA/GVkrhXEoF0M3Ya9PMnw==", - "dev": true, + "node_modules/default-browser": { + "version": "5.4.0", + "resolved": "https://registry.npmjs.org/default-browser/-/default-browser-5.4.0.tgz", + "integrity": "sha512-XDuvSq38Hr1MdN47EDvYtx3U0MTqpCEn+F6ft8z2vYDzMrvQhVp0ui9oQdqW3MvK3vqUETglt1tVGgjLuJ5izg==", "license": "MIT", "dependencies": { - "@noble/hashes": "1.3.2" + "bundle-name": "^4.1.0", + "default-browser-id": "^5.0.0" + }, + "engines": { + "node": ">=18" }, "funding": { - "url": "https://paulmillr.com/funding/" + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/@terminal3/revoke_vc/node_modules/tslib": { - "version": "2.7.0", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.7.0.tgz", - "integrity": "sha512-gLXCKdN1/j47AiHiOkJN69hJmcbGTHI0ImLmbYLHykhgeN0jVGola9yVjFgzCUklsZQMW55o+dW7IXv3RCXDzA==", - "dev": true, - "license": "0BSD" - }, - "node_modules/@terminal3/revoke_vc/node_modules/undici-types": { - "version": "6.19.8", - "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.19.8.tgz", - "integrity": "sha512-ve2KP6f/JnbPBFyobGHuerC9g1FYGn/F8n1LWTwNxCEzd6IfqTwUQcNXgEtmmQ6DlRrC1hrSrBnCZPokRrDHjw==", - "dev": true, - "license": "MIT" - }, - "node_modules/@terminal3/revoke_vc/node_modules/ws": { - "version": "8.17.1", - "resolved": "https://registry.npmjs.org/ws/-/ws-8.17.1.tgz", - "integrity": "sha512-6XQFvXTkbfUOZOKKILFG1PDK2NDQs4azKQl26T0YS5CxqWLgXajbPZ+h4gZekJyRqFU8pvnbAbbs/3TgRPy+GQ==", - "dev": true, + "node_modules/default-browser-id": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/default-browser-id/-/default-browser-id-5.0.1.tgz", + "integrity": "sha512-x1VCxdX4t+8wVfd1so/9w+vQ4vx7lKd2Qp5tDRutErwmR85OgmfX7RlLRMWafRMY7hbEiXIbudNrjOAPa/hL8Q==", "license": "MIT", "engines": { - "node": ">=10.0.0" - }, - "peerDependencies": { - "bufferutil": "^4.0.1", - "utf-8-validate": ">=5.0.2" + "node": ">=18" }, - "peerDependenciesMeta": { - "bufferutil": { - "optional": true - }, - "utf-8-validate": { - "optional": true - } + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/@terminal3/vc_core": { - "version": "0.0.28", - "resolved": "https://registry.npmjs.org/@terminal3/vc_core/-/vc_core-0.0.28.tgz", - "integrity": "sha512-otpYZomcZIccRS0p1HDrRv9Rl9eLpI/KqGXr3pmkq7KtpuACQhK/ZLqXpVAdq6nuhhpL7ifps/AlB90X0bdplQ==", - "dev": true, + "node_modules/defaults": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/defaults/-/defaults-1.0.4.tgz", + "integrity": "sha512-eFuaLoy/Rxalv2kr+lqMlUnrDWV+3j4pljOIJgLIhI058IQfWJ7vXhyEIHu+HtC738klGALYxOKDO0bQP3tg8A==", "license": "MIT", "dependencies": { - "did-jwt": "^8.0.4", - "ethers": "^6.13.1", - "uuid": "^10.0.0" + "clone": "^1.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/@terminal3/vc_core/node_modules/@adraffy/ens-normalize": { - "version": "1.10.1", - "resolved": "https://registry.npmjs.org/@adraffy/ens-normalize/-/ens-normalize-1.10.1.tgz", - "integrity": "sha512-96Z2IP3mYmF1Xg2cDm8f1gWGf/HUVedQ3FMifV4kG/PQ4yEP51xDtRAEfhVNt5f/uzpNkZHwWQuUcu6D6K+Ekw==", - "dev": true, - "license": "MIT" + "node_modules/defer-to-connect": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/defer-to-connect/-/defer-to-connect-2.0.1.tgz", + "integrity": "sha512-4tvttepXG1VaYGrRibk5EwJd1t4udunSOVMdLSAL6mId1ix438oPwPZMALY41FCijukO1L0twNcGsdzS7dHgDg==", + "license": "MIT", + "engines": { + "node": ">=10" + } }, - "node_modules/@terminal3/vc_core/node_modules/@noble/curves": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@noble/curves/-/curves-1.2.0.tgz", - "integrity": "sha512-oYclrNgRaM9SsBUBVbb8M6DTV7ZHRTKugureoYEncY5c65HOmRzvSiTE3y5CYaPYJA/GVkrhXEoF0M3Ya9PMnw==", - "dev": true, + "node_modules/define-data-property": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.4.tgz", + "integrity": "sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==", "license": "MIT", "dependencies": { - "@noble/hashes": "1.3.2" + "es-define-property": "^1.0.0", + "es-errors": "^1.3.0", + "gopd": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" }, "funding": { - "url": "https://paulmillr.com/funding/" + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/@terminal3/vc_core/node_modules/@noble/hashes": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.3.2.tgz", - "integrity": "sha512-MVC8EAQp7MvEcm30KWENFjgR+Mkmf+D189XJTkFIlwohU5hcBbn1ZkKq7KVTi2Hme3PMGF390DaL52beVrIihQ==", - "dev": true, + "node_modules/define-lazy-prop": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/define-lazy-prop/-/define-lazy-prop-2.0.0.tgz", + "integrity": "sha512-Ds09qNh8yw3khSjiJjiUInaGX9xlqZDY7JVryGxdxV7NPeuqQfplOpQ66yJFZut3jLa5zOwkXw1g9EI2uKh4Og==", "license": "MIT", "engines": { - "node": ">= 16" - }, - "funding": { - "url": "https://paulmillr.com/funding/" + "node": ">=8" } }, - "node_modules/@terminal3/vc_core/node_modules/@types/node": { - "version": "22.7.5", - "resolved": "https://registry.npmjs.org/@types/node/-/node-22.7.5.tgz", - "integrity": "sha512-jML7s2NAzMWc//QSJ1a3prpk78cOPchGvXJsC3C6R6PSMoooztvRVQEz89gmBTBY1SPMaqo5teB4uNHPdetShQ==", - "dev": true, + "node_modules/define-properties": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.2.1.tgz", + "integrity": "sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==", "license": "MIT", "dependencies": { - "undici-types": "~6.19.2" + "define-data-property": "^1.0.1", + "has-property-descriptors": "^1.0.0", + "object-keys": "^1.1.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/@terminal3/vc_core/node_modules/aes-js": { - "version": "4.0.0-beta.5", - "resolved": "https://registry.npmjs.org/aes-js/-/aes-js-4.0.0-beta.5.tgz", - "integrity": "sha512-G965FqalsNyrPqgEGON7nIx1e/OVENSgiEIzyC63haUMuvNnwIgIjMs52hlTCKhkBny7A2ORNlfY9Zu+jmGk1Q==", - "dev": true, + "node_modules/defu": { + "version": "6.1.4", + "resolved": "https://registry.npmjs.org/defu/-/defu-6.1.4.tgz", + "integrity": "sha512-mEQCMmwJu317oSz8CwdIOdwf3xMif1ttiM8LTufzc3g6kR+9Pe236twL8j3IYT1F7GfRgGcW6MWxzZjLIkuHIg==", "license": "MIT" }, - "node_modules/@terminal3/vc_core/node_modules/ethers": { - "version": "6.15.0", - "resolved": "https://registry.npmjs.org/ethers/-/ethers-6.15.0.tgz", - "integrity": "sha512-Kf/3ZW54L4UT0pZtsY/rf+EkBU7Qi5nnhonjUb8yTXcxH3cdcWrV2cRyk0Xk/4jK6OoHhxxZHriyhje20If2hQ==", - "dev": true, - "funding": [ - { - "type": "individual", - "url": "https://github.com/sponsors/ethers-io/" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], + "node_modules/delaunator": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/delaunator/-/delaunator-5.0.1.tgz", + "integrity": "sha512-8nvh+XBe96aCESrGOqMp/84b13H9cdKbG5P2ejQCh4d4sK9RL4371qou9drQjMhvnPmhWl5hnmqbEE0fXr9Xnw==", + "license": "ISC", + "dependencies": { + "robust-predicates": "^3.0.2" + } + }, + "node_modules/delayed-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", + "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==", + "license": "MIT", + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/delegates": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/delegates/-/delegates-1.0.0.tgz", + "integrity": "sha512-bd2L678uiWATM6m5Z1VzNCErI3jiGzt6HGY8OVICs40JQq/HALfbyNJmp0UDakEY4pMMaN0Ly5om/B1VI/+xfQ==", + "license": "MIT", + "optional": true + }, + "node_modules/delete-empty": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/delete-empty/-/delete-empty-3.0.0.tgz", + "integrity": "sha512-ZUyiwo76W+DYnKsL3Kim6M/UOavPdBJgDYWOmuQhYaZvJH0AXAHbUNyEDtRbBra8wqqr686+63/0azfEk1ebUQ==", + "dev": true, "license": "MIT", "dependencies": { - "@adraffy/ens-normalize": "1.10.1", - "@noble/curves": "1.2.0", - "@noble/hashes": "1.3.2", - "@types/node": "22.7.5", - "aes-js": "4.0.0-beta.5", - "tslib": "2.7.0", - "ws": "8.17.1" + "ansi-colors": "^4.1.0", + "minimist": "^1.2.0", + "path-starts-with": "^2.0.0", + "rimraf": "^2.6.2" + }, + "bin": { + "delete-empty": "bin/cli.js" }, "engines": { - "node": ">=14.0.0" + "node": ">=10" } }, - "node_modules/@terminal3/vc_core/node_modules/tslib": { - "version": "2.7.0", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.7.0.tgz", - "integrity": "sha512-gLXCKdN1/j47AiHiOkJN69hJmcbGTHI0ImLmbYLHykhgeN0jVGola9yVjFgzCUklsZQMW55o+dW7IXv3RCXDzA==", - "dev": true, - "license": "0BSD" - }, - "node_modules/@terminal3/vc_core/node_modules/undici-types": { - "version": "6.19.8", - "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.19.8.tgz", - "integrity": "sha512-ve2KP6f/JnbPBFyobGHuerC9g1FYGn/F8n1LWTwNxCEzd6IfqTwUQcNXgEtmmQ6DlRrC1hrSrBnCZPokRrDHjw==", + "node_modules/delete-empty/node_modules/glob": { + "version": "7.2.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", + "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", + "deprecated": "Glob versions prior to v9 are no longer supported", "dev": true, - "license": "MIT" + "license": "ISC", + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.1.1", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } }, - "node_modules/@terminal3/vc_core/node_modules/uuid": { - "version": "10.0.0", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-10.0.0.tgz", - "integrity": "sha512-8XkAphELsDnEGrDxUOHB3RGvXz6TeuYSGEZBOjtTtPm2lwhGBjLgOzLHB63IUWfBpNucQjND6d3AOudO+H3RWQ==", + "node_modules/delete-empty/node_modules/rimraf": { + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", + "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", + "deprecated": "Rimraf versions prior to v4 are no longer supported", "dev": true, - "funding": [ - "https://github.com/sponsors/broofa", - "https://github.com/sponsors/ctavan" - ], - "license": "MIT", + "license": "ISC", + "dependencies": { + "glob": "^7.1.3" + }, "bin": { - "uuid": "dist/bin/uuid" + "rimraf": "bin.js" } }, - "node_modules/@terminal3/vc_core/node_modules/ws": { - "version": "8.17.1", - "resolved": "https://registry.npmjs.org/ws/-/ws-8.17.1.tgz", - "integrity": "sha512-6XQFvXTkbfUOZOKKILFG1PDK2NDQs4azKQl26T0YS5CxqWLgXajbPZ+h4gZekJyRqFU8pvnbAbbs/3TgRPy+GQ==", - "dev": true, + "node_modules/depd": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", + "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==", "license": "MIT", "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 - } + "node": ">= 0.8" } }, - "node_modules/@terminal3/verify_vc": { - "version": "0.0.20", - "resolved": "https://registry.npmjs.org/@terminal3/verify_vc/-/verify_vc-0.0.20.tgz", - "integrity": "sha512-ATonhxSidEi0NQ0ogGLuu72LqZle4N5bDx0KOEzwU7WLGsU0bWyvlkLS39EWoHZkPjI7idm/renqBlKCS8jMnw==", + "node_modules/dequal": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/dequal/-/dequal-2.0.3.tgz", + "integrity": "sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA==", "license": "MIT", - "dependencies": { - "@noble/curves": "^1.4.2", - "@terminal3/bbs_vc": "0.2.18", - "@terminal3/ecdsa_vc": "0.1.16", - "@terminal3/vc_core": "0.0.19", - "did-jwt": "^8.0.4", - "ethers": "^6.13.1" + "engines": { + "node": ">=6" } }, - "node_modules/@terminal3/verify_vc_core": { - "version": "0.0.28", - "resolved": "https://registry.npmjs.org/@terminal3/verify_vc_core/-/verify_vc_core-0.0.28.tgz", - "integrity": "sha512-B76AziSxFd16LsLjdIeM5R94zckp+9SD67FkQlP1PKV/pQi62lBlBoWDMYrk5l0ZvOMDgwrVKxStuJivgZPkIA==", + "node_modules/des.js": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/des.js/-/des.js-1.1.0.tgz", + "integrity": "sha512-r17GxjhUCjSRy8aiJpr8/UadFIzMzJGexI3Nmz4ADi9LYSFx4gTBp80+NaX/YsXWWLhpZ7v/v/ubEc/bCNfKwg==", "dev": true, "license": "MIT", "dependencies": { - "@noble/curves": "^1.4.2", - "@terminal3/revoke_vc": "0.1.24", - "@terminal3/vc_core": "0.0.28", - "did-jwt": "^8.0.4", - "ethers": "^6.13.1" + "inherits": "^2.0.1", + "minimalistic-assert": "^1.0.0" } }, - "node_modules/@terminal3/verify_vc_core/node_modules/@adraffy/ens-normalize": { - "version": "1.10.1", - "resolved": "https://registry.npmjs.org/@adraffy/ens-normalize/-/ens-normalize-1.10.1.tgz", - "integrity": "sha512-96Z2IP3mYmF1Xg2cDm8f1gWGf/HUVedQ3FMifV4kG/PQ4yEP51xDtRAEfhVNt5f/uzpNkZHwWQuUcu6D6K+Ekw==", - "dev": true, + "node_modules/destr": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/destr/-/destr-2.0.5.tgz", + "integrity": "sha512-ugFTXCtDZunbzasqBxrK93Ik/DRYsO6S/fedkWEMKqt04xZ4csmnmwGDBAb07QWNaGMAmnTIemsYZCksjATwsA==", "license": "MIT" }, - "node_modules/@terminal3/verify_vc_core/node_modules/@noble/hashes": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.3.2.tgz", - "integrity": "sha512-MVC8EAQp7MvEcm30KWENFjgR+Mkmf+D189XJTkFIlwohU5hcBbn1ZkKq7KVTi2Hme3PMGF390DaL52beVrIihQ==", - "dev": true, + "node_modules/destroy": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.2.0.tgz", + "integrity": "sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==", "license": "MIT", "engines": { - "node": ">= 16" - }, - "funding": { - "url": "https://paulmillr.com/funding/" - } - }, - "node_modules/@terminal3/verify_vc_core/node_modules/@types/node": { - "version": "22.7.5", - "resolved": "https://registry.npmjs.org/@types/node/-/node-22.7.5.tgz", - "integrity": "sha512-jML7s2NAzMWc//QSJ1a3prpk78cOPchGvXJsC3C6R6PSMoooztvRVQEz89gmBTBY1SPMaqo5teB4uNHPdetShQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "undici-types": "~6.19.2" + "node": ">= 0.8", + "npm": "1.2.8000 || >= 1.4.16" } }, - "node_modules/@terminal3/verify_vc_core/node_modules/aes-js": { - "version": "4.0.0-beta.5", - "resolved": "https://registry.npmjs.org/aes-js/-/aes-js-4.0.0-beta.5.tgz", - "integrity": "sha512-G965FqalsNyrPqgEGON7nIx1e/OVENSgiEIzyC63haUMuvNnwIgIjMs52hlTCKhkBny7A2ORNlfY9Zu+jmGk1Q==", - "dev": true, + "node_modules/detect-browser": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/detect-browser/-/detect-browser-5.3.0.tgz", + "integrity": "sha512-53rsFbGdwMwlF7qvCt0ypLM5V5/Mbl0szB7GPN8y9NCcbknYOeVVXdrXEq+90IwAfrrzt6Hd+u2E2ntakICU8w==", "license": "MIT" }, - "node_modules/@terminal3/verify_vc_core/node_modules/ethers": { - "version": "6.15.0", - "resolved": "https://registry.npmjs.org/ethers/-/ethers-6.15.0.tgz", - "integrity": "sha512-Kf/3ZW54L4UT0pZtsY/rf+EkBU7Qi5nnhonjUb8yTXcxH3cdcWrV2cRyk0Xk/4jK6OoHhxxZHriyhje20If2hQ==", + "node_modules/detect-indent": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/detect-indent/-/detect-indent-6.1.0.tgz", + "integrity": "sha512-reYkTUJAZb9gUuZ2RvVCNhVHdg62RHnJ7WJl8ftMi4diZ6NWlciOzQN88pUhSELEwflJht4oQDv0F0BMlwaYtA==", "dev": true, - "funding": [ - { - "type": "individual", - "url": "https://github.com/sponsors/ethers-io/" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], "license": "MIT", - "dependencies": { - "@adraffy/ens-normalize": "1.10.1", - "@noble/curves": "1.2.0", - "@noble/hashes": "1.3.2", - "@types/node": "22.7.5", - "aes-js": "4.0.0-beta.5", - "tslib": "2.7.0", - "ws": "8.17.1" - }, "engines": { - "node": ">=14.0.0" + "node": ">=8" } }, - "node_modules/@terminal3/verify_vc_core/node_modules/ethers/node_modules/@noble/curves": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@noble/curves/-/curves-1.2.0.tgz", - "integrity": "sha512-oYclrNgRaM9SsBUBVbb8M6DTV7ZHRTKugureoYEncY5c65HOmRzvSiTE3y5CYaPYJA/GVkrhXEoF0M3Ya9PMnw==", + "node_modules/detect-libc": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-2.1.1.tgz", + "integrity": "sha512-ecqj/sy1jcK1uWrwpR67UhYrIFQ+5WlGxth34WquCbamhFA6hkkwiu37o6J5xCHdo1oixJRfVRw+ywV+Hq/0Aw==", + "license": "Apache-2.0", + "optional": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/detect-newline": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/detect-newline/-/detect-newline-3.1.0.tgz", + "integrity": "sha512-TLz+x/vEXm/Y7P7wn1EJFNLxYpUD4TgMosxY6fAVJUnJMbupHBOncxyWUG9OpTaH9EBD7uFI5LfEgmMOc54DsA==", "dev": true, "license": "MIT", - "dependencies": { - "@noble/hashes": "1.3.2" - }, - "funding": { - "url": "https://paulmillr.com/funding/" + "engines": { + "node": ">=8" } }, - "node_modules/@terminal3/verify_vc_core/node_modules/tslib": { - "version": "2.7.0", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.7.0.tgz", - "integrity": "sha512-gLXCKdN1/j47AiHiOkJN69hJmcbGTHI0ImLmbYLHykhgeN0jVGola9yVjFgzCUklsZQMW55o+dW7IXv3RCXDzA==", - "dev": true, - "license": "0BSD" + "node_modules/detect-node": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/detect-node/-/detect-node-2.1.0.tgz", + "integrity": "sha512-T0NIuQpnTvFDATNuHN5roPwSBG83rFsuO+MXXH9/3N1eFbn4wcPjttvjMLEPWJ0RGUYgQE7cGgS3tNxbqCGM7g==", + "license": "MIT" }, - "node_modules/@terminal3/verify_vc_core/node_modules/undici-types": { - "version": "6.19.8", - "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.19.8.tgz", - "integrity": "sha512-ve2KP6f/JnbPBFyobGHuerC9g1FYGn/F8n1LWTwNxCEzd6IfqTwUQcNXgEtmmQ6DlRrC1hrSrBnCZPokRrDHjw==", - "dev": true, + "node_modules/detect-node-es": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/detect-node-es/-/detect-node-es-1.1.0.tgz", + "integrity": "sha512-ypdmJU/TbBby2Dxibuv7ZLW3Bs1QEmM7nHjEANfohJLvE0XVujisn1qPJcZxg+qDucsr+bP6fLD1rPS3AhJ7EQ==", "license": "MIT" }, - "node_modules/@terminal3/verify_vc_core/node_modules/ws": { - "version": "8.17.1", - "resolved": "https://registry.npmjs.org/ws/-/ws-8.17.1.tgz", - "integrity": "sha512-6XQFvXTkbfUOZOKKILFG1PDK2NDQs4azKQl26T0YS5CxqWLgXajbPZ+h4gZekJyRqFU8pvnbAbbs/3TgRPy+GQ==", - "dev": true, + "node_modules/detect-port": { + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/detect-port/-/detect-port-1.6.1.tgz", + "integrity": "sha512-CmnVc+Hek2egPx1PeTFVta2W78xy2K/9Rkf6cC4T59S50tVnzKj+tnx5mmx5lwvCkujZ4uRrpRSuV+IVs3f90Q==", "license": "MIT", - "engines": { - "node": ">=10.0.0" + "dependencies": { + "address": "^1.0.1", + "debug": "4" }, - "peerDependencies": { - "bufferutil": "^4.0.1", - "utf-8-validate": ">=5.0.2" + "bin": { + "detect": "bin/detect-port.js", + "detect-port": "bin/detect-port.js" }, - "peerDependenciesMeta": { - "bufferutil": { - "optional": true - }, - "utf-8-validate": { - "optional": true - } + "engines": { + "node": ">= 4.0.0" } }, - "node_modules/@terminal3/verify_vc/node_modules/@adraffy/ens-normalize": { - "version": "1.10.1", - "resolved": "https://registry.npmjs.org/@adraffy/ens-normalize/-/ens-normalize-1.10.1.tgz", - "integrity": "sha512-96Z2IP3mYmF1Xg2cDm8f1gWGf/HUVedQ3FMifV4kG/PQ4yEP51xDtRAEfhVNt5f/uzpNkZHwWQuUcu6D6K+Ekw==", - "license": "MIT" - }, - "node_modules/@terminal3/verify_vc/node_modules/@noble/hashes": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.3.2.tgz", - "integrity": "sha512-MVC8EAQp7MvEcm30KWENFjgR+Mkmf+D189XJTkFIlwohU5hcBbn1ZkKq7KVTi2Hme3PMGF390DaL52beVrIihQ==", + "node_modules/devlop": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/devlop/-/devlop-1.1.0.tgz", + "integrity": "sha512-RWmIqhcFf1lRYBvNmr7qTNuyCt/7/ns2jbpp1+PalgE/rDQcBT0fioSMUpJ93irlUhC5hrg4cYqe6U+0ImW0rA==", "license": "MIT", - "engines": { - "node": ">= 16" + "dependencies": { + "dequal": "^2.0.0" }, "funding": { - "url": "https://paulmillr.com/funding/" + "type": "github", + "url": "https://github.com/sponsors/wooorm" } }, - "node_modules/@terminal3/verify_vc/node_modules/@terminal3/ecdsa_vc": { - "version": "0.1.16", - "resolved": "https://registry.npmjs.org/@terminal3/ecdsa_vc/-/ecdsa_vc-0.1.16.tgz", - "integrity": "sha512-CLRYHAMnlGwRixbZ8Rshvu/Ykz+oIrYLASqkKIzKCEoc/PoGw2jPjDCetL+POn7WQ/RYvg+fnQlnhM1p2ZZtEw==", - "license": "MIT", + "node_modules/dezalgo": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/dezalgo/-/dezalgo-1.0.4.tgz", + "integrity": "sha512-rXSP0bf+5n0Qonsb+SVVfNfIsimO4HEtmnIpPHY8Q1UCzKlQrDMfdobr8nJOOsRgWCyMRqeSBQzmWUMq7zvVig==", + "dev": true, + "license": "ISC", "dependencies": { - "@terminal3/vc_core": "0.0.19", - "@terminal3/verify_vc_core": "0.0.19", - "ethers": "^6.11.1" + "asap": "^2.0.0", + "wrappy": "1" } }, - "node_modules/@terminal3/verify_vc/node_modules/@terminal3/revoke_vc": { - "version": "0.1.15", - "resolved": "https://registry.npmjs.org/@terminal3/revoke_vc/-/revoke_vc-0.1.15.tgz", - "integrity": "sha512-/Y4svhJcsRe/mMlZtPRtInpuctMxcSVsaLcpVnbC1KDksD4FiVWby/Cknb8LItFN+NgqjgJ5JFutFmEjrqA2Yg==", - "license": "MIT", + "node_modules/did-jwt": { + "version": "8.0.18", + "resolved": "https://registry.npmjs.org/did-jwt/-/did-jwt-8.0.18.tgz", + "integrity": "sha512-yS3Y+aUKjYqRFrgR/RY77NuOOqS7SFfvfFH4THhWD6+hkxeUZcKQSsdNZ12QR1Vd48yP9exwae2wzbuOZn0NqQ==", + "license": "Apache-2.0", "dependencies": { - "@noble/curves": "^1.4.2", - "@terminal3/vc_core": "0.0.19", - "did-jwt": "^8.0.4", - "ethers": "^6.13.1" + "@noble/ciphers": "^1.0.0", + "@noble/curves": "^1.0.0", + "@noble/hashes": "^1.3.0", + "@scure/base": "^2.0.0", + "canonicalize": "^2.0.0", + "did-resolver": "^4.1.0", + "multibase": "^4.0.6", + "multiformats": "^9.6.2", + "uint8arrays": "3.1.1" } }, - "node_modules/@terminal3/verify_vc/node_modules/@terminal3/vc_core": { - "version": "0.0.19", - "resolved": "https://registry.npmjs.org/@terminal3/vc_core/-/vc_core-0.0.19.tgz", - "integrity": "sha512-65JJePRqftFq5nIsBU9/bsUUlMBKzTQU14Ml037g0QUnsrcHgSWLM/lma3YNv0qx03yWVSirEicLC9ZD4Bj+MQ==", + "node_modules/did-jwt/node_modules/@scure/base": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@scure/base/-/base-2.0.0.tgz", + "integrity": "sha512-3E1kpuZginKkek01ovG8krQ0Z44E3DHPjc5S2rjJw9lZn3KSQOs8S7wqikF/AH7iRanHypj85uGyxk0XAyC37w==", "license": "MIT", - "dependencies": { - "did-jwt": "^8.0.4", - "ethers": "^6.13.1", - "uuid": "^10.0.0" + "funding": { + "url": "https://paulmillr.com/funding/" } }, - "node_modules/@terminal3/verify_vc/node_modules/@terminal3/verify_vc_core": { - "version": "0.0.19", - "resolved": "https://registry.npmjs.org/@terminal3/verify_vc_core/-/verify_vc_core-0.0.19.tgz", - "integrity": "sha512-esUoQKSAzjOwL4Qyea0a7zYt8piuHRLmZd+3CjXlpbSDylpjWJBW6pxFvkR/UVUiXc9cXrdbrJwL0JbCGwMPWw==", + "node_modules/did-jwt/node_modules/multiformats": { + "version": "9.9.0", + "resolved": "https://registry.npmjs.org/multiformats/-/multiformats-9.9.0.tgz", + "integrity": "sha512-HoMUjhH9T8DDBNT+6xzkrd9ga/XiBI4xLr58LJACwK6G3HTOPeMz4nB4KJs33L2BelrIJa7P0VuNaVF3hMYfjg==", + "license": "(Apache-2.0 AND MIT)" + }, + "node_modules/did-resolver": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/did-resolver/-/did-resolver-4.1.0.tgz", + "integrity": "sha512-S6fWHvCXkZg2IhS4RcVHxwuyVejPR7c+a4Go0xbQ9ps5kILa8viiYQgrM4gfTyeTjJ0ekgJH9gk/BawTpmkbZA==", + "license": "Apache-2.0" + }, + "node_modules/diff": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/diff/-/diff-5.2.0.tgz", + "integrity": "sha512-uIFDxqpRZGZ6ThOk84hEfqWoHx2devRFvpTZcTHur85vImfaxUbTW9Ryh4CpCuDnToOP1CEtXKIgytHBPVff5A==", + "dev": true, + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.3.1" + } + }, + "node_modules/diff-sequences": { + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-29.6.3.tgz", + "integrity": "sha512-EjePK1srD3P08o2j4f0ExnylqRs5B9tJjcp9t1krH2qRi8CCdsYfwe9JgSLurFBWwq4uOlipzfk5fHNvwFKr8Q==", + "dev": true, "license": "MIT", - "dependencies": { - "@noble/curves": "^1.4.2", - "@terminal3/revoke_vc": "0.1.15", - "@terminal3/vc_core": "0.0.19", - "did-jwt": "^8.0.4", - "ethers": "^6.13.1" + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/@terminal3/verify_vc/node_modules/@types/node": { - "version": "22.7.5", - "resolved": "https://registry.npmjs.org/@types/node/-/node-22.7.5.tgz", - "integrity": "sha512-jML7s2NAzMWc//QSJ1a3prpk78cOPchGvXJsC3C6R6PSMoooztvRVQEz89gmBTBY1SPMaqo5teB4uNHPdetShQ==", + "node_modules/diffie-hellman": { + "version": "5.0.3", + "resolved": "https://registry.npmjs.org/diffie-hellman/-/diffie-hellman-5.0.3.tgz", + "integrity": "sha512-kqag/Nl+f3GwyK25fhUMYj81BUOrZ9IuJsjIcDE5icNM9FJHAVm3VcUDxdLPoQtTuUylWm6ZIknYJwwaPxsUzg==", + "dev": true, "license": "MIT", "dependencies": { - "undici-types": "~6.19.2" + "bn.js": "^4.1.0", + "miller-rabin": "^4.0.0", + "randombytes": "^2.0.0" } }, - "node_modules/@terminal3/verify_vc/node_modules/aes-js": { - "version": "4.0.0-beta.5", - "resolved": "https://registry.npmjs.org/aes-js/-/aes-js-4.0.0-beta.5.tgz", - "integrity": "sha512-G965FqalsNyrPqgEGON7nIx1e/OVENSgiEIzyC63haUMuvNnwIgIjMs52hlTCKhkBny7A2ORNlfY9Zu+jmGk1Q==", + "node_modules/diffie-hellman/node_modules/bn.js": { + "version": "4.12.2", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.2.tgz", + "integrity": "sha512-n4DSx829VRTRByMRGdjQ9iqsN0Bh4OolPsFnaZBLcbi8iXcB+kJ9s7EnRt4wILZNV3kPLHkRVfOc/HvhC3ovDw==", + "dev": true, "license": "MIT" }, - "node_modules/@terminal3/verify_vc/node_modules/ethers": { - "version": "6.15.0", - "resolved": "https://registry.npmjs.org/ethers/-/ethers-6.15.0.tgz", - "integrity": "sha512-Kf/3ZW54L4UT0pZtsY/rf+EkBU7Qi5nnhonjUb8yTXcxH3cdcWrV2cRyk0Xk/4jK6OoHhxxZHriyhje20If2hQ==", - "funding": [ - { - "type": "individual", - "url": "https://github.com/sponsors/ethers-io/" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], - "license": "MIT", + "node_modules/difflib": { + "version": "0.2.4", + "resolved": "https://registry.npmjs.org/difflib/-/difflib-0.2.4.tgz", + "integrity": "sha512-9YVwmMb0wQHQNr5J9m6BSj6fk4pfGITGQOOs+D9Fl+INODWFOfvhIU1hNv6GgR1RBoC/9NJcwu77zShxV0kT7w==", + "dev": true, "dependencies": { - "@adraffy/ens-normalize": "1.10.1", - "@noble/curves": "1.2.0", - "@noble/hashes": "1.3.2", - "@types/node": "22.7.5", - "aes-js": "4.0.0-beta.5", - "tslib": "2.7.0", - "ws": "8.17.1" + "heap": ">= 0.2.0" }, "engines": { - "node": ">=14.0.0" + "node": "*" } }, - "node_modules/@terminal3/verify_vc/node_modules/ethers/node_modules/@noble/curves": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@noble/curves/-/curves-1.2.0.tgz", - "integrity": "sha512-oYclrNgRaM9SsBUBVbb8M6DTV7ZHRTKugureoYEncY5c65HOmRzvSiTE3y5CYaPYJA/GVkrhXEoF0M3Ya9PMnw==", + "node_modules/dijkstrajs": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/dijkstrajs/-/dijkstrajs-1.0.3.tgz", + "integrity": "sha512-qiSlmBq9+BCdCA/L46dw8Uy93mloxsPSbwnm5yrKn2vMPiy8KyAskTF6zuV/j5BMsmOGZDPs7KjU+mjb670kfA==", + "license": "MIT" + }, + "node_modules/dir-glob": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", + "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==", "license": "MIT", "dependencies": { - "@noble/hashes": "1.3.2" + "path-type": "^4.0.0" }, - "funding": { - "url": "https://paulmillr.com/funding/" + "engines": { + "node": ">=8" } }, - "node_modules/@terminal3/verify_vc/node_modules/tslib": { - "version": "2.7.0", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.7.0.tgz", - "integrity": "sha512-gLXCKdN1/j47AiHiOkJN69hJmcbGTHI0ImLmbYLHykhgeN0jVGola9yVjFgzCUklsZQMW55o+dW7IXv3RCXDzA==", - "license": "0BSD" - }, - "node_modules/@terminal3/verify_vc/node_modules/undici-types": { - "version": "6.19.8", - "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.19.8.tgz", - "integrity": "sha512-ve2KP6f/JnbPBFyobGHuerC9g1FYGn/F8n1LWTwNxCEzd6IfqTwUQcNXgEtmmQ6DlRrC1hrSrBnCZPokRrDHjw==", - "license": "MIT" - }, - "node_modules/@terminal3/verify_vc/node_modules/uuid": { - "version": "10.0.0", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-10.0.0.tgz", - "integrity": "sha512-8XkAphELsDnEGrDxUOHB3RGvXz6TeuYSGEZBOjtTtPm2lwhGBjLgOzLHB63IUWfBpNucQjND6d3AOudO+H3RWQ==", - "funding": [ - "https://github.com/sponsors/broofa", - "https://github.com/sponsors/ctavan" - ], + "node_modules/dns-packet": { + "version": "5.6.1", + "resolved": "https://registry.npmjs.org/dns-packet/-/dns-packet-5.6.1.tgz", + "integrity": "sha512-l4gcSouhcgIKRvyy99RNVOgxXiicE+2jZoNmaNmZ6JXiGajBOJAesk1OBlJuM5k2c+eudGdLxDqXuPCKIj6kpw==", "license": "MIT", - "bin": { - "uuid": "dist/bin/uuid" + "dependencies": { + "@leichtgewicht/ip-codec": "^2.0.1" + }, + "engines": { + "node": ">=6" } }, - "node_modules/@terminal3/verify_vc/node_modules/ws": { - "version": "8.17.1", - "resolved": "https://registry.npmjs.org/ws/-/ws-8.17.1.tgz", - "integrity": "sha512-6XQFvXTkbfUOZOKKILFG1PDK2NDQs4azKQl26T0YS5CxqWLgXajbPZ+h4gZekJyRqFU8pvnbAbbs/3TgRPy+GQ==", + "node_modules/docker-compose": { + "version": "0.24.8", + "resolved": "https://registry.npmjs.org/docker-compose/-/docker-compose-0.24.8.tgz", + "integrity": "sha512-plizRs/Vf15H+GCVxq2EUvyPK7ei9b/cVesHvjnX4xaXjM9spHe2Ytq0BitndFgvTJ3E3NljPNUEl7BAN43iZw==", + "dev": true, "license": "MIT", - "engines": { - "node": ">=10.0.0" - }, - "peerDependencies": { - "bufferutil": "^4.0.1", - "utf-8-validate": ">=5.0.2" + "dependencies": { + "yaml": "^2.2.2" }, - "peerDependenciesMeta": { - "bufferutil": { - "optional": true - }, - "utf-8-validate": { - "optional": true - } + "engines": { + "node": ">= 6.0.0" + } + }, + "node_modules/docker-modem": { + "version": "3.0.8", + "resolved": "https://registry.npmjs.org/docker-modem/-/docker-modem-3.0.8.tgz", + "integrity": "sha512-f0ReSURdM3pcKPNS30mxOHSbaFLcknGmQjwSfmbcdOw1XWKXVhukM3NJHhr7NpY9BIyyWQb0EBo3KQvvuU5egQ==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "debug": "^4.1.1", + "readable-stream": "^3.5.0", + "split-ca": "^1.0.1", + "ssh2": "^1.11.0" + }, + "engines": { + "node": ">= 8.0" } }, - "node_modules/@testing-library/dom": { - "version": "10.4.1", - "resolved": "https://registry.npmjs.org/@testing-library/dom/-/dom-10.4.1.tgz", - "integrity": "sha512-o4PXJQidqJl82ckFaXUeoAW+XysPLauYI43Abki5hABd853iMhitooc6znOnczgbTYmEP6U6/y1ZyKAIsvMKGg==", + "node_modules/docker-modem/node_modules/readable-stream": { + "version": "3.6.2", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", + "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", "dev": true, "license": "MIT", "dependencies": { - "@babel/code-frame": "^7.10.4", - "@babel/runtime": "^7.12.5", - "@types/aria-query": "^5.0.1", - "aria-query": "5.3.0", - "dom-accessibility-api": "^0.5.9", - "lz-string": "^1.5.0", - "picocolors": "1.1.1", - "pretty-format": "^27.0.2" + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" }, "engines": { - "node": ">=18" + "node": ">= 6" } }, - "node_modules/@testing-library/dom/node_modules/aria-query": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/aria-query/-/aria-query-5.3.0.tgz", - "integrity": "sha512-b0P0sZPKtyu8HkeRAfCq0IfURZK+SuwMjY1UXGBU27wpAiTwQAIlq56IbIO+ytk/JjS1fMR14ee5WBBfKi5J6A==", + "node_modules/dockerode": { + "version": "3.3.5", + "resolved": "https://registry.npmjs.org/dockerode/-/dockerode-3.3.5.tgz", + "integrity": "sha512-/0YNa3ZDNeLr/tSckmD69+Gq+qVNhvKfAHNeZJBnp7EOP6RGKV8ORrJHkUn20So5wU+xxT7+1n5u8PjHbfjbSA==", "dev": true, "license": "Apache-2.0", "dependencies": { - "dequal": "^2.0.3" + "@balena/dockerignore": "^1.0.2", + "docker-modem": "^3.0.0", + "tar-fs": "~2.0.1" + }, + "engines": { + "node": ">= 8.0" } }, - "node_modules/@testing-library/dom/node_modules/dom-accessibility-api": { - "version": "0.5.16", - "resolved": "https://registry.npmjs.org/dom-accessibility-api/-/dom-accessibility-api-0.5.16.tgz", - "integrity": "sha512-X7BJ2yElsnOJ30pZF4uIIDfBEVgF4XEBxL9Bxhy6dnrm5hkzqmsWHGTiHqRiITNhMyFLyAiWndIJP7Z1NTteDg==", + "node_modules/dockerode/node_modules/chownr": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.1.4.tgz", + "integrity": "sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==", "dev": true, - "license": "MIT" + "license": "ISC" }, - "node_modules/@testing-library/dom/node_modules/pretty-format": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-27.5.1.tgz", - "integrity": "sha512-Qb1gy5OrP5+zDf2Bvnzdl3jsTf1qXVMazbvCoKhtKqVs4/YK4ozX4gKQJJVyNe+cajNPn0KoC0MC3FUmaHWEmQ==", + "node_modules/dockerode/node_modules/tar-fs": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/tar-fs/-/tar-fs-2.0.1.tgz", + "integrity": "sha512-6tzWDMeroL87uF/+lin46k+Q+46rAJ0SyPGz7OW7wTgblI273hsBqk2C1j0/xNadNLKDTUL9BukSjB7cwgmlPA==", "dev": true, "license": "MIT", "dependencies": { - "ansi-regex": "^5.0.1", - "ansi-styles": "^5.0.0", - "react-is": "^17.0.1" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + "chownr": "^1.1.1", + "mkdirp-classic": "^0.5.2", + "pump": "^3.0.0", + "tar-stream": "^2.0.0" } }, - "node_modules/@testing-library/jest-dom": { - "version": "5.17.0", - "resolved": "https://registry.npmjs.org/@testing-library/jest-dom/-/jest-dom-5.17.0.tgz", - "integrity": "sha512-ynmNeT7asXyH3aSVv4vvX4Rb+0qjOhdNHnO/3vuZNqPmhDpV/+rCSGwQ7bLcmU2cJ4dvoheIO85LQj0IbJHEtg==", + "node_modules/doctrine": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", + "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==", "dev": true, - "license": "MIT", + "license": "Apache-2.0", "dependencies": { - "@adobe/css-tools": "^4.0.1", - "@babel/runtime": "^7.9.2", - "@types/testing-library__jest-dom": "^5.9.1", - "aria-query": "^5.0.0", - "chalk": "^3.0.0", - "css.escape": "^1.5.1", - "dom-accessibility-api": "^0.5.6", - "lodash": "^4.17.15", - "redent": "^3.0.0" + "esutils": "^2.0.2" }, "engines": { - "node": ">=8", - "npm": ">=6", - "yarn": ">=1" + "node": ">=6.0.0" } }, - "node_modules/@testing-library/jest-dom/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "node_modules/dom-accessibility-api": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/dom-accessibility-api/-/dom-accessibility-api-0.6.3.tgz", + "integrity": "sha512-7ZgogeTnjuHbo+ct10G9Ffp0mif17idi0IyWNVA/wcwcm7NPOD/WEHVP3n7n3MhXqxoIYm8d6MuZohYWIZ4T3w==", "dev": true, + "license": "MIT" + }, + "node_modules/dom-converter": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/dom-converter/-/dom-converter-0.2.0.tgz", + "integrity": "sha512-gd3ypIPfOMr9h5jIKq8E3sHOTCjeirnl0WK5ZdS1AW0Odt0b1PaWaHdJ4Qk4klv+YB9aJBS7mESXjFoDQPu6DA==", "license": "MIT", "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" + "utila": "~0.4" } }, - "node_modules/@testing-library/jest-dom/node_modules/chalk": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-3.0.0.tgz", - "integrity": "sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==", - "dev": true, + "node_modules/dom-helpers": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/dom-helpers/-/dom-helpers-5.2.1.tgz", + "integrity": "sha512-nRCa7CK3VTrM2NmGkIy4cbK7IZlgBE/PYMn55rrXefr5xXDP0LdtfPnblFDoVdcAfslJ7or6iqAUnx0CCGIWQA==", "license": "MIT", "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=8" + "@babel/runtime": "^7.8.7", + "csstype": "^3.0.2" } }, - "node_modules/@testing-library/jest-dom/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, + "node_modules/dom-serializer": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-2.0.0.tgz", + "integrity": "sha512-wIkAryiqt/nV5EQKqQpo3SToSOV9J0DnbJqwK7Wv/Trc92zIAYZ4FlMu+JPFW1DfGFt81ZTCGgDEabffXeLyJg==", "license": "MIT", "dependencies": { - "color-name": "~1.1.4" + "domelementtype": "^2.3.0", + "domhandler": "^5.0.2", + "entities": "^4.2.0" }, + "funding": { + "url": "https://github.com/cheeriojs/dom-serializer?sponsor=1" + } + }, + "node_modules/dom-serializer/node_modules/entities": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/entities/-/entities-4.5.0.tgz", + "integrity": "sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==", + "license": "BSD-2-Clause", "engines": { - "node": ">=7.0.0" + "node": ">=0.12" + }, + "funding": { + "url": "https://github.com/fb55/entities?sponsor=1" } }, - "node_modules/@testing-library/jest-dom/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "node_modules/domain-browser": { + "version": "4.22.0", + "resolved": "https://registry.npmjs.org/domain-browser/-/domain-browser-4.22.0.tgz", + "integrity": "sha512-IGBwjF7tNk3cwypFNH/7bfzBcgSCbaMOD3GsaY1AU/JRrnHnYgEM0+9kQt52iZxjNsjBtJYtao146V+f8jFZNw==", "dev": true, - "license": "MIT" + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://bevry.me/fund" + } }, - "node_modules/@testing-library/jest-dom/node_modules/dom-accessibility-api": { - "version": "0.5.16", - "resolved": "https://registry.npmjs.org/dom-accessibility-api/-/dom-accessibility-api-0.5.16.tgz", - "integrity": "sha512-X7BJ2yElsnOJ30pZF4uIIDfBEVgF4XEBxL9Bxhy6dnrm5hkzqmsWHGTiHqRiITNhMyFLyAiWndIJP7Z1NTteDg==", - "dev": true, - "license": "MIT" + "node_modules/domelementtype": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.3.0.tgz", + "integrity": "sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/fb55" + } + ], + "license": "BSD-2-Clause" }, - "node_modules/@testing-library/react": { - "version": "14.3.1", - "resolved": "https://registry.npmjs.org/@testing-library/react/-/react-14.3.1.tgz", - "integrity": "sha512-H99XjUhWQw0lTgyMN05W3xQG1Nh4lq574D8keFf1dDoNTJgp66VbJozRaczoF+wsiaPJNt/TcnfpLGufGxSrZQ==", + "node_modules/domexception": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/domexception/-/domexception-4.0.0.tgz", + "integrity": "sha512-A2is4PLG+eeSfoTMA95/s4pvAoSo2mKtiM5jlHkAVewmiO8ISFTFKZjH7UAM1Atli/OT/7JHOrJRJiMKUZKYBw==", + "deprecated": "Use your platform's native DOMException instead", "dev": true, "license": "MIT", "dependencies": { - "@babel/runtime": "^7.12.5", - "@testing-library/dom": "^9.0.0", - "@types/react-dom": "^18.0.0" + "webidl-conversions": "^7.0.0" }, "engines": { - "node": ">=14" - }, - "peerDependencies": { - "react": "^18.0.0", - "react-dom": "^18.0.0" + "node": ">=12" } }, - "node_modules/@testing-library/react/node_modules/@testing-library/dom": { - "version": "9.3.4", - "resolved": "https://registry.npmjs.org/@testing-library/dom/-/dom-9.3.4.tgz", - "integrity": "sha512-FlS4ZWlp97iiNWig0Muq8p+3rVDjRiYE+YKGbAqXOu9nwJFFOdL00kFpz42M+4huzYi86vAK1sOOfyOG45muIQ==", - "dev": true, - "license": "MIT", + "node_modules/domhandler": { + "version": "5.0.3", + "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-5.0.3.tgz", + "integrity": "sha512-cgwlv/1iFQiFnU96XXgROh8xTeetsnJiDsTc7TYCLFd9+/WNkIqPTxiM/8pSd8VIrhXGTf1Ny1q1hquVqDJB5w==", + "license": "BSD-2-Clause", "dependencies": { - "@babel/code-frame": "^7.10.4", - "@babel/runtime": "^7.12.5", - "@types/aria-query": "^5.0.1", - "aria-query": "5.1.3", - "chalk": "^4.1.0", - "dom-accessibility-api": "^0.5.9", - "lz-string": "^1.5.0", - "pretty-format": "^27.0.2" + "domelementtype": "^2.3.0" }, "engines": { - "node": ">=14" + "node": ">= 4" + }, + "funding": { + "url": "https://github.com/fb55/domhandler?sponsor=1" } }, - "node_modules/@testing-library/react/node_modules/aria-query": { - "version": "5.1.3", - "resolved": "https://registry.npmjs.org/aria-query/-/aria-query-5.1.3.tgz", - "integrity": "sha512-R5iJ5lkuHybztUfuOAznmboyjWq8O6sqNqtK7CLOqdydi54VNbORp49mb14KbWgG1QD3JFO9hJdZ+y4KutfdOQ==", - "dev": true, - "license": "Apache-2.0", + "node_modules/dompurify": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/dompurify/-/dompurify-3.3.1.tgz", + "integrity": "sha512-qkdCKzLNtrgPFP1Vo+98FRzJnBRGe4ffyCea9IwHB1fyxPOeNTHpLKYGd4Uk9xvNoH0ZoOjwZxNptyMwqrId1Q==", + "license": "(MPL-2.0 OR Apache-2.0)", + "optionalDependencies": { + "@types/trusted-types": "^2.0.7" + } + }, + "node_modules/domutils": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/domutils/-/domutils-3.2.2.tgz", + "integrity": "sha512-6kZKyUajlDuqlHKVX1w7gyslj9MPIXzIFiz/rGu35uC1wMi+kMhQwGhl4lt9unC9Vb9INnY9Z3/ZA3+FhASLaw==", + "license": "BSD-2-Clause", "dependencies": { - "deep-equal": "^2.0.5" + "dom-serializer": "^2.0.0", + "domelementtype": "^2.3.0", + "domhandler": "^5.0.3" + }, + "funding": { + "url": "https://github.com/fb55/domutils?sponsor=1" } }, - "node_modules/@testing-library/react/node_modules/dom-accessibility-api": { - "version": "0.5.16", - "resolved": "https://registry.npmjs.org/dom-accessibility-api/-/dom-accessibility-api-0.5.16.tgz", - "integrity": "sha512-X7BJ2yElsnOJ30pZF4uIIDfBEVgF4XEBxL9Bxhy6dnrm5hkzqmsWHGTiHqRiITNhMyFLyAiWndIJP7Z1NTteDg==", - "dev": true, - "license": "MIT" + "node_modules/dot-case": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/dot-case/-/dot-case-3.0.4.tgz", + "integrity": "sha512-Kv5nKlh6yRrdrGvxeJ2e5y2eRUpkUosIW4A2AS38zwSz27zu7ufDwQPi5Jhs3XAlGNetl3bmnGhQsMtkKJnj3w==", + "license": "MIT", + "dependencies": { + "no-case": "^3.0.4", + "tslib": "^2.0.3" + } }, - "node_modules/@testing-library/react/node_modules/pretty-format": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-27.5.1.tgz", - "integrity": "sha512-Qb1gy5OrP5+zDf2Bvnzdl3jsTf1qXVMazbvCoKhtKqVs4/YK4ozX4gKQJJVyNe+cajNPn0KoC0MC3FUmaHWEmQ==", + "node_modules/dot-prop": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/dot-prop/-/dot-prop-5.3.0.tgz", + "integrity": "sha512-QM8q3zDe58hqUqjraQOmzZ1LIH9SWQJTlEKCH4kJ2oQvLZk7RbQXvtDM2XEq3fwkV9CCvvH4LA0AV+ogFsBM2Q==", "dev": true, "license": "MIT", "dependencies": { - "ansi-regex": "^5.0.1", - "ansi-styles": "^5.0.0", - "react-is": "^17.0.1" + "is-obj": "^2.0.0" }, "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + "node": ">=8" } }, - "node_modules/@testing-library/user-event": { - "version": "14.6.1", - "resolved": "https://registry.npmjs.org/@testing-library/user-event/-/user-event-14.6.1.tgz", - "integrity": "sha512-vq7fv0rnt+QTXgPxr5Hjc210p6YKq2kmdziLgnsZGgLJ9e6VAShx1pACLuRjd/AS/sr7phAR58OIIpf0LlmQNw==", - "dev": true, - "license": "MIT", + "node_modules/dotenv": { + "version": "16.6.1", + "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-16.6.1.tgz", + "integrity": "sha512-uBq4egWHTcTt33a72vpSG0z3HnPuIl6NqYcTrKEg2azoEyl2hpW0zqlxysq2pK9HlDIHyHyakeYaYnSAwd8bow==", + "license": "BSD-2-Clause", "engines": { - "node": ">=12", - "npm": ">=6" + "node": ">=12" }, - "peerDependencies": { - "@testing-library/dom": ">=7.21.4" + "funding": { + "url": "https://dotenvx.com" } }, - "node_modules/@thomaschaplin/cusip-generator": { - "version": "1.0.22", - "resolved": "https://registry.npmjs.org/@thomaschaplin/cusip-generator/-/cusip-generator-1.0.22.tgz", - "integrity": "sha512-162DBgkPGQI0otk/aW8z7XjyYM1fEOUf+p4yiEgJZhKupSWuwSNcsIcAi4fDZvP/XkI/pBF83aXUlYkWFMqA2Q==", - "dev": true, - "license": "MIT" + "node_modules/dotenv-expand": { + "version": "10.0.0", + "resolved": "https://registry.npmjs.org/dotenv-expand/-/dotenv-expand-10.0.0.tgz", + "integrity": "sha512-GopVGCpVS1UKH75VKHGuQFqS1Gusej0z4FyQkPdwjil2gNIv+LNsqBlboOzpJFZKVT95GkCyWJbBSdFEFUWI2A==", + "license": "BSD-2-Clause", + "engines": { + "node": ">=12" + } }, - "node_modules/@thomaschaplin/isin-generator": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/@thomaschaplin/isin-generator/-/isin-generator-1.0.3.tgz", - "integrity": "sha512-M1vm7MsTdLhOybs21dR1M0/aUAwpM2B7qZvcVMTzxBxnjzwaqCr1EtxMUjecCOoxViIA6A/HO7emlfKUGODBNQ==", - "dev": true, + "node_modules/dpdm": { + "version": "3.14.0", + "resolved": "https://registry.npmjs.org/dpdm/-/dpdm-3.14.0.tgz", + "integrity": "sha512-YJzsFSyEtj88q5eTELg3UWU7TVZkG1dpbF4JDQ3t1b07xuzXmdoGeSz9TKOke1mUuOpWlk4q+pBh+aHzD6GBTg==", "license": "MIT", "dependencies": { - "@thomaschaplin/cusip-generator": "^1.0.1" + "chalk": "^4.1.2", + "fs-extra": "^11.1.1", + "glob": "^10.3.4", + "ora": "^5.4.1", + "tslib": "^2.6.2", + "typescript": "^5.2.2", + "yargs": "^17.7.2" + }, + "bin": { + "dpdm": "lib/bin/dpdm.js" } }, - "node_modules/@tokenysolutions/t-rex": { - "version": "4.1.6", - "resolved": "https://registry.npmjs.org/@tokenysolutions/t-rex/-/t-rex-4.1.6.tgz", - "integrity": "sha512-GNmVAC11cqwF6bmVCl0yhaVfPLBptF4K0vmepghTPbSogky1WG+38h7RR/p7909Si2JgswreeeLZZyBLN0KZrg==", - "dev": true, - "license": "SEE LICENSE IN LICENSE.md" - }, - "node_modules/@tootallnate/once": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/@tootallnate/once/-/once-2.0.0.tgz", - "integrity": "sha512-XCuKFP5PS55gnMVu3dty8KPatLqUoy/ZYzDzAGCQ8JNFCkLXzmI7vNHCR+XpbZaMWQK/vQubr7PkYq8g470J/A==", - "dev": true, + "node_modules/dpdm/node_modules/bl": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/bl/-/bl-4.1.0.tgz", + "integrity": "sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==", "license": "MIT", - "engines": { - "node": ">= 10" + "dependencies": { + "buffer": "^5.5.0", + "inherits": "^2.0.4", + "readable-stream": "^3.4.0" } }, - "node_modules/@tsconfig/node10": { - "version": "1.0.11", - "resolved": "https://registry.npmjs.org/@tsconfig/node10/-/node10-1.0.11.tgz", - "integrity": "sha512-DcRjDCujK/kCk/cUe8Xz8ZSpm8mS3mNNpta+jGCA6USEDfktlNvm1+IuZ9eTcDbNk41BHwpHHeW+N1lKCz4zOw==", - "devOptional": true, - "license": "MIT" + "node_modules/dpdm/node_modules/brace-expansion": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.2.tgz", + "integrity": "sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==", + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0" + } }, - "node_modules/@tsconfig/node12": { - "version": "1.0.11", - "resolved": "https://registry.npmjs.org/@tsconfig/node12/-/node12-1.0.11.tgz", - "integrity": "sha512-cqefuRsh12pWyGsIoBKJA9luFu3mRxCA+ORZvA4ktLSzIuCUtWVxGIuXigEwO5/ywWFMZ2QEGKWvkZG1zDMTag==", - "devOptional": true, - "license": "MIT" + "node_modules/dpdm/node_modules/buffer": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", + "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT", + "dependencies": { + "base64-js": "^1.3.1", + "ieee754": "^1.1.13" + } }, - "node_modules/@tsconfig/node14": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/@tsconfig/node14/-/node14-1.0.3.tgz", - "integrity": "sha512-ysT8mhdixWK6Hw3i1V2AeRqZ5WfXg1G43mqoYlM2nc6388Fq5jcXyr5mRsqViLx/GJYdoL0bfXD8nmF+Zn/Iow==", - "devOptional": true, - "license": "MIT" + "node_modules/dpdm/node_modules/fs-extra": { + "version": "11.3.2", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-11.3.2.tgz", + "integrity": "sha512-Xr9F6z6up6Ws+NjzMCZc6WXg2YFRlrLP9NQDO3VQrWrfiojdhS56TzueT88ze0uBdCTwEIhQ3ptnmKeWGFAe0A==", + "license": "MIT", + "dependencies": { + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + }, + "engines": { + "node": ">=14.14" + } }, - "node_modules/@tsconfig/node16": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/@tsconfig/node16/-/node16-1.0.4.tgz", - "integrity": "sha512-vxhUy4J8lyeyinH7Azl1pdd43GJhZH/tP2weN8TntQblOY+A0XbT8DJk1/oCPuOOyg/Ja757rG0CgHcWC8OfMA==", - "devOptional": true, - "license": "MIT" + "node_modules/dpdm/node_modules/glob": { + "version": "10.4.5", + "resolved": "https://registry.npmjs.org/glob/-/glob-10.4.5.tgz", + "integrity": "sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg==", + "license": "ISC", + "dependencies": { + "foreground-child": "^3.1.0", + "jackspeak": "^3.1.2", + "minimatch": "^9.0.4", + "minipass": "^7.1.2", + "package-json-from-dist": "^1.0.0", + "path-scurry": "^1.11.1" + }, + "bin": { + "glob": "dist/esm/bin.mjs" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } }, - "node_modules/@typechain/ethers-v5": { - "version": "10.2.1", - "resolved": "https://registry.npmjs.org/@typechain/ethers-v5/-/ethers-v5-10.2.1.tgz", - "integrity": "sha512-n3tQmCZjRE6IU4h6lqUGiQ1j866n5MTCBJreNEHHVWXa2u9GJTaeYyU1/k+1qLutkyw+sS6VAN+AbeiTqsxd/A==", - "dev": true, + "node_modules/dpdm/node_modules/is-interactive": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-interactive/-/is-interactive-1.0.0.tgz", + "integrity": "sha512-2HvIEKRoqS62guEC+qBjpvRubdX910WCMuJTZ+I9yvqKU2/12eSL549HMwtabb4oupdj2sMP50k+XJfB/8JE6w==", "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/dpdm/node_modules/jackspeak": { + "version": "3.4.3", + "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-3.4.3.tgz", + "integrity": "sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw==", + "license": "BlueOak-1.0.0", "dependencies": { - "lodash": "^4.17.15", - "ts-essentials": "^7.0.1" + "@isaacs/cliui": "^8.0.2" }, - "peerDependencies": { - "@ethersproject/abi": "^5.0.0", - "@ethersproject/providers": "^5.0.0", - "ethers": "^5.1.3", - "typechain": "^8.1.1", - "typescript": ">=4.3.0" + "funding": { + "url": "https://github.com/sponsors/isaacs" + }, + "optionalDependencies": { + "@pkgjs/parseargs": "^0.11.0" } }, - "node_modules/@typechain/hardhat": { - "version": "6.1.6", - "resolved": "https://registry.npmjs.org/@typechain/hardhat/-/hardhat-6.1.6.tgz", - "integrity": "sha512-BiVnegSs+ZHVymyidtK472syodx1sXYlYJJixZfRstHVGYTi8V1O7QG4nsjyb0PC/LORcq7sfBUcHto1y6UgJA==", - "dev": true, + "node_modules/dpdm/node_modules/jsonfile": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.2.0.tgz", + "integrity": "sha512-FGuPw30AdOIUTRMC2OMRtQV+jkVj2cfPqSeWXv1NEAJ1qZ5zb1X6z1mFhbfOB/iy3ssJCD+3KuZ8r8C3uVFlAg==", "license": "MIT", "dependencies": { - "fs-extra": "^9.1.0" + "universalify": "^2.0.0" }, - "peerDependencies": { - "@ethersproject/abi": "^5.4.7", - "@ethersproject/providers": "^5.4.7", - "@typechain/ethers-v5": "^10.2.1", - "ethers": "^5.4.7", - "hardhat": "^2.9.9", - "typechain": "^8.1.1" + "optionalDependencies": { + "graceful-fs": "^4.1.6" } }, - "node_modules/@typechain/hardhat/node_modules/fs-extra": { - "version": "9.1.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz", - "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==", - "dev": true, + "node_modules/dpdm/node_modules/lru-cache": { + "version": "10.4.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz", + "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==", + "license": "ISC" + }, + "node_modules/dpdm/node_modules/minimatch": { + "version": "9.0.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", + "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", + "license": "ISC", + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/dpdm/node_modules/ora": { + "version": "5.4.1", + "resolved": "https://registry.npmjs.org/ora/-/ora-5.4.1.tgz", + "integrity": "sha512-5b6Y85tPxZZ7QytO+BQzysW31HJku27cRIlkbAXaNx+BdcVi+LlRFmVXzeF6a7JCwJpyw5c4b+YSVImQIrBpuQ==", "license": "MIT", "dependencies": { - "at-least-node": "^1.0.0", - "graceful-fs": "^4.2.0", - "jsonfile": "^6.0.1", - "universalify": "^2.0.0" + "bl": "^4.1.0", + "chalk": "^4.1.0", + "cli-cursor": "^3.1.0", + "cli-spinners": "^2.5.0", + "is-interactive": "^1.0.0", + "is-unicode-supported": "^0.1.0", + "log-symbols": "^4.1.0", + "strip-ansi": "^6.0.0", + "wcwidth": "^1.0.1" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/dpdm/node_modules/path-scurry": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-1.11.1.tgz", + "integrity": "sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==", + "license": "BlueOak-1.0.0", + "dependencies": { + "lru-cache": "^10.2.0", + "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0" }, "engines": { - "node": ">=10" + "node": ">=16 || 14 >=14.18" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/@typechain/hardhat/node_modules/jsonfile": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.2.0.tgz", - "integrity": "sha512-FGuPw30AdOIUTRMC2OMRtQV+jkVj2cfPqSeWXv1NEAJ1qZ5zb1X6z1mFhbfOB/iy3ssJCD+3KuZ8r8C3uVFlAg==", - "dev": true, + "node_modules/dpdm/node_modules/readable-stream": { + "version": "3.6.2", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", + "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", "license": "MIT", "dependencies": { - "universalify": "^2.0.0" + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" }, - "optionalDependencies": { - "graceful-fs": "^4.1.6" + "engines": { + "node": ">= 6" } }, - "node_modules/@typechain/hardhat/node_modules/universalify": { + "node_modules/dpdm/node_modules/universalify": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.1.tgz", "integrity": "sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==", - "dev": true, "license": "MIT", "engines": { "node": ">= 10.0.0" } }, - "node_modules/@types/add": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/@types/add/-/add-2.0.3.tgz", - "integrity": "sha512-P4sSSgzxhwhXll/HYhHAqLv7nAACxFNFtwsiur/RH58rL1RBn21ZrexPIki8xh1NIziub7ZRXLf2K2IKn4XVYg==", - "dev": true, - "license": "MIT" - }, - "node_modules/@types/aria-query": { - "version": "5.0.4", - "resolved": "https://registry.npmjs.org/@types/aria-query/-/aria-query-5.0.4.tgz", - "integrity": "sha512-rfT93uj5s0PRL7EzccGMs3brplhcrghnDoV26NqKhCAS1hVo+WdNsPvE/yb6ilfr5hi2MEk6d5EWJTKdxg8jVw==", - "dev": true, - "license": "MIT" - }, - "node_modules/@types/babel__core": { - "version": "7.20.5", - "resolved": "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.20.5.tgz", - "integrity": "sha512-qoQprZvz5wQFJwMDqeseRXWv3rqMvhgpbXFfVyWhbx9X47POIA6i/+dXefEmZKoAgOaTdaIgNSMqMIU61yRyzA==", + "node_modules/dunder-proto": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/dunder-proto/-/dunder-proto-1.0.1.tgz", + "integrity": "sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==", "license": "MIT", "dependencies": { - "@babel/parser": "^7.20.7", - "@babel/types": "^7.20.7", - "@types/babel__generator": "*", - "@types/babel__template": "*", - "@types/babel__traverse": "*" + "call-bind-apply-helpers": "^1.0.1", + "es-errors": "^1.3.0", + "gopd": "^1.2.0" + }, + "engines": { + "node": ">= 0.4" } }, - "node_modules/@types/babel__generator": { - "version": "7.27.0", - "resolved": "https://registry.npmjs.org/@types/babel__generator/-/babel__generator-7.27.0.tgz", - "integrity": "sha512-ufFd2Xi92OAVPYsy+P4n7/U7e68fex0+Ee8gSG9KX7eo084CWiQ4sdxktvdl0bOPupXtVJPY19zk6EwWqUQ8lg==", + "node_modules/duplexer": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/duplexer/-/duplexer-0.1.2.tgz", + "integrity": "sha512-jtD6YG370ZCIi/9GTaJKQxWTZD045+4R4hTk/x1UyoqadyJ9x9CgSi1RlVDQF8U2sxLLSnFkCaMihqljHIWgMg==", + "license": "MIT" + }, + "node_modules/duplexify": { + "version": "4.1.3", + "resolved": "https://registry.npmjs.org/duplexify/-/duplexify-4.1.3.tgz", + "integrity": "sha512-M3BmBhwJRZsSx38lZyhE53Csddgzl5R7xGJNk7CVddZD6CcmwMCH8J+7AprIrQKH7TonKxaCjcv27Qmf+sQ+oA==", "license": "MIT", "dependencies": { - "@babel/types": "^7.0.0" + "end-of-stream": "^1.4.1", + "inherits": "^2.0.3", + "readable-stream": "^3.1.1", + "stream-shift": "^1.0.2" } }, - "node_modules/@types/babel__template": { - "version": "7.4.4", - "resolved": "https://registry.npmjs.org/@types/babel__template/-/babel__template-7.4.4.tgz", - "integrity": "sha512-h/NUaSyG5EyxBIp8YRxo4RMe2/qQgvyowRwVMzhYhBCONbW8PUsg4lkFMrhgZhUe5z3L3MiLDuvyJ/CaPa2A8A==", + "node_modules/duplexify/node_modules/readable-stream": { + "version": "3.6.2", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", + "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", "license": "MIT", "dependencies": { - "@babel/parser": "^7.1.0", - "@babel/types": "^7.0.0" + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + }, + "engines": { + "node": ">= 6" } }, - "node_modules/@types/babel__traverse": { - "version": "7.28.0", - "resolved": "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.28.0.tgz", - "integrity": "sha512-8PvcXf70gTDZBgt9ptxJ8elBeBjcLOAcOtoO/mPJjtji1+CdGbHgm77om1GrsPxsiE+uXIpNSK64UYaIwQXd4Q==", - "license": "MIT", + "node_modules/eastasianwidth": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz", + "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==", + "license": "MIT" + }, + "node_modules/ecdsa-sig-formatter": { + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/ecdsa-sig-formatter/-/ecdsa-sig-formatter-1.0.11.tgz", + "integrity": "sha512-nagl3RYrbNv6kQkeJIpt6NJZy8twLB/2vtz6yN9Z4vRKHN4/QZJIEbqohALSgwKdnksuY3k5Addp5lg8sVoVcQ==", + "license": "Apache-2.0", "dependencies": { - "@babel/types": "^7.28.2" + "safe-buffer": "^5.0.1" } }, - "node_modules/@types/bn.js": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/@types/bn.js/-/bn.js-5.2.0.tgz", - "integrity": "sha512-DLbJ1BPqxvQhIGbeu8VbUC1DiAiahHtAYvA0ZEAa4P31F7IaArc8z3C3BRQdWX4mtLQuABG4yzp76ZrS02Ui1Q==", - "license": "MIT", + "node_modules/echarts": { + "version": "5.6.0", + "resolved": "https://registry.npmjs.org/echarts/-/echarts-5.6.0.tgz", + "integrity": "sha512-oTbVTsXfKuEhxftHqL5xprgLoc0k7uScAwtryCgWF6hPYFLRwOUHiFmHGCBKP5NPFNkDVopOieyUqYGH8Fa3kA==", + "license": "Apache-2.0", "dependencies": { - "@types/node": "*" + "tslib": "2.3.0", + "zrender": "5.6.1" } }, - "node_modules/@types/body-parser": { - "version": "1.19.6", - "resolved": "https://registry.npmjs.org/@types/body-parser/-/body-parser-1.19.6.tgz", - "integrity": "sha512-HLFeCYgz89uk22N5Qg3dvGvsv46B8GLvKKo1zKG4NybA8U2DiEO3w9lqGg29t/tfLRJpJ6iQxnVw4OnB7MoM9g==", - "dev": true, + "node_modules/echarts-for-react": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/echarts-for-react/-/echarts-for-react-3.0.2.tgz", + "integrity": "sha512-DRwIiTzx8JfwPOVgGttDytBqdp5VzCSyMRIxubgU/g2n9y3VLUmF2FK7Icmg/sNVkv4+rktmrLN9w22U2yy3fA==", "license": "MIT", "dependencies": { - "@types/connect": "*", - "@types/node": "*" + "fast-deep-equal": "^3.1.3", + "size-sensor": "^1.0.1" + }, + "peerDependencies": { + "echarts": "^3.0.0 || ^4.0.0 || ^5.0.0", + "react": "^15.0.0 || >=16.0.0" } }, - "node_modules/@types/chai": { - "version": "4.3.20", - "resolved": "https://registry.npmjs.org/@types/chai/-/chai-4.3.20.tgz", - "integrity": "sha512-/pC9HAB5I/xMlc5FP77qjCnI16ChlJfW0tGa0IUcFn38VJrTV6DeZ60NU5KZBtaOZqjdpwTWohz5HU1RrhiYxQ==", - "dev": true, + "node_modules/echarts/node_modules/tslib": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.3.0.tgz", + "integrity": "sha512-N82ooyxVNm6h1riLCoyS9e3fuJ3AMG2zIZs2Gd1ATcSFjSA23Q0fzjjZeh0jbJvWVDZ0cJT8yaNNaaXHzueNjg==", + "license": "0BSD" + }, + "node_modules/ee-first": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", + "integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==", "license": "MIT" }, - "node_modules/@types/chai-as-promised": { - "version": "7.1.8", - "resolved": "https://registry.npmjs.org/@types/chai-as-promised/-/chai-as-promised-7.1.8.tgz", - "integrity": "sha512-ThlRVIJhr69FLlh6IctTXFkmhtP3NpMZ2QGq69StYLyKZFp/HOp1VdKZj7RvfNWYYcJ1xlbLGLLWj1UvP5u/Gw==", - "dev": true, + "node_modules/efate": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/efate/-/efate-1.5.1.tgz", + "integrity": "sha512-lkq5XDCBNcZElE09T5NX8H+ViF5tZPLu98Wog//xj69Y9k9gguoImEc5APFfSudH/eWfFUZKIjmK2ZNF16r3kg==", "license": "MIT", "dependencies": { - "@types/chai": "*" + "debug": "^4.1.1", + "lodash.merge": "^4.6.2", + "lodash.mergewith": "^4.6.2" } }, - "node_modules/@types/concat-stream": { - "version": "1.6.1", - "resolved": "https://registry.npmjs.org/@types/concat-stream/-/concat-stream-1.6.1.tgz", - "integrity": "sha512-eHE4cQPoj6ngxBZMvVf6Hw7Mh4jMW4U9lpGmS5GBPB9RYxlFg+CHaVN7ErNY4W9XfLIEn20b4VDYaIrbq0q4uA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/node": "*" - } + "node_modules/electron-to-chromium": { + "version": "1.5.267", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.267.tgz", + "integrity": "sha512-0Drusm6MVRXSOJpGbaSVgcQsuB4hEkMpHXaVstcPmhu5LIedxs1xNK/nIxmQIU/RPC0+1/o0AVZfBTkTNJOdUw==", + "license": "ISC" }, - "node_modules/@types/connect": { - "version": "3.4.38", - "resolved": "https://registry.npmjs.org/@types/connect/-/connect-3.4.38.tgz", - "integrity": "sha512-K6uROf1LD88uDQqJCktA4yzL1YYAK6NgfsI0v/mTgyPKWsX1CnJ0XPSDhViejru1GcRkLWb8RlzFYJRqGUbaug==", - "dev": true, + "node_modules/elliptic": { + "version": "6.6.1", + "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.6.1.tgz", + "integrity": "sha512-RaddvvMatK2LJHqFJ+YA4WysVN5Ita9E35botqIYspQ4TkRAlCicdzKOjlyv/1Za5RyTNn7di//eEV0uTAfe3g==", "license": "MIT", "dependencies": { - "@types/node": "*" + "bn.js": "^4.11.9", + "brorand": "^1.1.0", + "hash.js": "^1.0.0", + "hmac-drbg": "^1.0.1", + "inherits": "^2.0.4", + "minimalistic-assert": "^1.0.1", + "minimalistic-crypto-utils": "^1.0.1" } }, - "node_modules/@types/conventional-commits-parser": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/@types/conventional-commits-parser/-/conventional-commits-parser-5.0.1.tgz", - "integrity": "sha512-7uz5EHdzz2TqoMfV7ee61Egf5y6NkcO4FB/1iCCQnbeiI1F3xzv3vK5dBCXUCLQgGYS+mUeigK1iKQzvED+QnQ==", + "node_modules/elliptic/node_modules/bn.js": { + "version": "4.12.2", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.2.tgz", + "integrity": "sha512-n4DSx829VRTRByMRGdjQ9iqsN0Bh4OolPsFnaZBLcbi8iXcB+kJ9s7EnRt4wILZNV3kPLHkRVfOc/HvhC3ovDw==", + "license": "MIT" + }, + "node_modules/emittery": { + "version": "0.13.1", + "resolved": "https://registry.npmjs.org/emittery/-/emittery-0.13.1.tgz", + "integrity": "sha512-DeWwawk6r5yR9jFgnDKYt4sLS0LmHJJi3ZOnb5/JdbYwj3nW+FxQnHIjhBKz8YLC7oRNPVM9NQ47I3CVx34eqQ==", "dev": true, "license": "MIT", - "dependencies": { - "@types/node": "*" + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sindresorhus/emittery?sponsor=1" } }, - "node_modules/@types/cookiejar": { - "version": "2.1.5", - "resolved": "https://registry.npmjs.org/@types/cookiejar/-/cookiejar-2.1.5.tgz", - "integrity": "sha512-he+DHOWReW0nghN24E1WUqM0efK4kI9oTqDm6XmK8ZPe2djZ90BSNdGnIyCLzCPw7/pogPlGbzI2wHGGmi4O/Q==", - "dev": true, + "node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", "license": "MIT" }, - "node_modules/@types/debug": { - "version": "4.1.12", - "resolved": "https://registry.npmjs.org/@types/debug/-/debug-4.1.12.tgz", - "integrity": "sha512-vIChWdVG3LG1SMxEvI/AK+FWJthlrqlTu7fbrlywTkkaONwk/UAGaULXRlf8vkzFBLVm0zkMdCquhL5aOjhXPQ==", + "node_modules/emojilib": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/emojilib/-/emojilib-2.4.0.tgz", + "integrity": "sha512-5U0rVMU5Y2n2+ykNLQqMoqklN9ICBT/KsvC1Gz6vqHbz2AXXGkG+Pm5rMWk/8Vjrr/mY9985Hi8DYzn1F09Nyw==", + "license": "MIT" + }, + "node_modules/emojis-list": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/emojis-list/-/emojis-list-3.0.0.tgz", + "integrity": "sha512-/kyM18EfinwXZbno9FyUGeFh87KC8HRQBQGildHZbEuRyWFOmv1U10o9BBp8XVZDVNNuQKyIGIu5ZYAAXJ0V2Q==", "license": "MIT", - "dependencies": { - "@types/ms": "*" + "engines": { + "node": ">= 4" } }, - "node_modules/@types/docker-modem": { - "version": "3.0.6", - "resolved": "https://registry.npmjs.org/@types/docker-modem/-/docker-modem-3.0.6.tgz", - "integrity": "sha512-yKpAGEuKRSS8wwx0joknWxsmLha78wNMe9R2S3UNsVOkZded8UqOrV8KoeDXoXsjndxwyF3eIhyClGbO1SEhEg==", - "dev": true, + "node_modules/emoticon": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/emoticon/-/emoticon-4.1.0.tgz", + "integrity": "sha512-VWZfnxqwNcc51hIy/sbOdEem6D+cVtpPzEEtVAFdaas30+1dgkyaOQ4sQ6Bp0tOMqWO1v+HQfYaoodOkdhK6SQ==", "license": "MIT", - "dependencies": { - "@types/node": "*", - "@types/ssh2": "*" + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" } }, - "node_modules/@types/dockerode": { - "version": "3.3.44", - "resolved": "https://registry.npmjs.org/@types/dockerode/-/dockerode-3.3.44.tgz", - "integrity": "sha512-fUpIHlsbYpxAJb285xx3vp7q5wf5mjqSn3cYwl/MhiM+DB99OdO5sOCPlO0PjO+TyOtphPs7tMVLU/RtOo/JjA==", - "dev": true, + "node_modules/enabled": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/enabled/-/enabled-2.0.0.tgz", + "integrity": "sha512-AKrN98kuwOzMIdAizXGI86UFBoo26CL21UM763y1h/GMSJ4/OHU9k2YlsmBpyScFo/wbLzWQJBMCW4+IO3/+OQ==", + "license": "MIT" + }, + "node_modules/encode-utf8": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/encode-utf8/-/encode-utf8-1.0.3.tgz", + "integrity": "sha512-ucAnuBEhUK4boH2HjVYG5Q2mQyPorvv0u/ocS+zhdw0S8AlHYY+GOFhP1Gio5z4icpP2ivFSvhtFjQi8+T9ppw==", + "license": "MIT" + }, + "node_modules/encodeurl": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-2.0.0.tgz", + "integrity": "sha512-Q0n9HRi4m6JuGIV1eFlmvJB7ZEVxu93IrMyiMsGC0lrMJMWzRgx6WGquyfQgZVb31vhGgXnfmPNNXmxnOkRBrg==", "license": "MIT", - "dependencies": { - "@types/docker-modem": "*", - "@types/node": "*", - "@types/ssh2": "*" + "engines": { + "node": ">= 0.8" } }, - "node_modules/@types/eslint": { - "version": "9.6.1", - "resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-9.6.1.tgz", - "integrity": "sha512-FXx2pKgId/WyYo2jXw63kk7/+TY7u7AziEJxJAnSFzHlqTAS3Ync6SvgYAN/k4/PQpnnVuzoMuVnByKK2qp0ag==", + "node_modules/end-of-stream": { + "version": "1.4.5", + "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.5.tgz", + "integrity": "sha512-ooEGc6HP26xXq/N+GCGOT0JKCLDGrq2bQUZrQ7gyrJiZANJ/8YDTxTpQBXGMn+WbIQXNVpyWymm7KYVICQnyOg==", "license": "MIT", "dependencies": { - "@types/estree": "*", - "@types/json-schema": "*" + "once": "^1.4.0" } }, - "node_modules/@types/eslint-scope": { - "version": "3.7.7", - "resolved": "https://registry.npmjs.org/@types/eslint-scope/-/eslint-scope-3.7.7.tgz", - "integrity": "sha512-MzMFlSLBqNF2gcHWO0G1vP/YQyfvrxZ0bF+u7mzUdZ1/xK4A4sru+nraZz5i3iEIk1l1uyicaDVTB4QbbEkAYg==", + "node_modules/enhanced-resolve": { + "version": "5.18.3", + "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.18.3.tgz", + "integrity": "sha512-d4lC8xfavMeBjzGr2vECC3fsGXziXZQyJxD868h2M/mBI3PwAuODxAkLkq5HYuvrPYcUtiLzsTo8U3PgX3Ocww==", "license": "MIT", "dependencies": { - "@types/eslint": "*", - "@types/estree": "*" + "graceful-fs": "^4.2.4", + "tapable": "^2.2.0" + }, + "engines": { + "node": ">=10.13.0" } }, - "node_modules/@types/estree": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.8.tgz", - "integrity": "sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w==", - "license": "MIT" - }, - "node_modules/@types/express": { - "version": "4.17.21", - "resolved": "https://registry.npmjs.org/@types/express/-/express-4.17.21.tgz", - "integrity": "sha512-ejlPM315qwLpaQlQDTjPdsUFSc6ZsP4AN6AlWnogPjQ7CVi7PYF3YVz+CY3jE2pwYf7E/7HlDAN0rV2GxTG0HQ==", + "node_modules/enquirer": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/enquirer/-/enquirer-2.4.1.tgz", + "integrity": "sha512-rRqJg/6gd538VHvR3PSrdRBb/1Vy2YfzHqzvbhGIQpDRKIa4FgV/54b5Q1xYSxOOwKvjXweS26E0Q+nAMwp2pQ==", "dev": true, "license": "MIT", "dependencies": { - "@types/body-parser": "*", - "@types/express-serve-static-core": "^4.17.33", - "@types/qs": "*", - "@types/serve-static": "*" + "ansi-colors": "^4.1.1", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8.6" } }, - "node_modules/@types/express-serve-static-core": { - "version": "4.19.6", - "resolved": "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-4.19.6.tgz", - "integrity": "sha512-N4LZ2xG7DatVqhCZzOGb1Yi5lMbXSZcmdLDe9EzSndPV2HpWYWzRbaerl2n27irrm94EPpprqa8KpskPT085+A==", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/node": "*", - "@types/qs": "*", - "@types/range-parser": "*", - "@types/send": "*" + "node_modules/entities": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/entities/-/entities-6.0.1.tgz", + "integrity": "sha512-aN97NXWF6AWBTahfVOIrB/NShkzi5H7F9r1s9mD3cDj4Ko5f2qhhVoYMibXF7GlLveb/D2ioWay8lxI97Ven3g==", + "license": "BSD-2-Clause", + "engines": { + "node": ">=0.12" + }, + "funding": { + "url": "https://github.com/fb55/entities?sponsor=1" } }, - "node_modules/@types/form-data": { - "version": "0.0.33", - "resolved": "https://registry.npmjs.org/@types/form-data/-/form-data-0.0.33.tgz", - "integrity": "sha512-8BSvG1kGm83cyJITQMZSulnl6QV8jqAGreJsc5tPu1Jq0vTSOiY/k24Wx82JRpWwZSqrala6sd5rWi6aNXvqcw==", + "node_modules/env-paths": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/env-paths/-/env-paths-2.2.1.tgz", + "integrity": "sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A==", "dev": true, "license": "MIT", - "dependencies": { - "@types/node": "*" + "engines": { + "node": ">=6" } }, - "node_modules/@types/format-util": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/@types/format-util/-/format-util-1.0.4.tgz", - "integrity": "sha512-xrCYOdHh5zA3LUrn6CvspYwlzSWxPso11Lx32WnAG6KvLCRecKZ/Rh21PLXUkzUFsQmrGcx/traJAFjR6dVS5Q==", - "dev": true, - "license": "MIT" - }, - "node_modules/@types/glob": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/@types/glob/-/glob-7.2.0.tgz", - "integrity": "sha512-ZUxbzKl0IfJILTS6t7ip5fQQM/J3TJYubDm3nMbgubNNYS62eXeUpoLUC8/7fJNiFYHTrGPQn7hspDUzIHX3UA==", + "node_modules/environment": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/environment/-/environment-1.1.0.tgz", + "integrity": "sha512-xUtoPkMggbz0MPyPiIWr1Kp4aeWJjDZ6SMvURhimjdZgsRuDplF5/s9hcgGhyXMhs+6vpnuoiZ2kFiu3FMnS8Q==", "dev": true, "license": "MIT", - "dependencies": { - "@types/minimatch": "*", - "@types/node": "*" + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/@types/graceful-fs": { - "version": "4.1.9", - "resolved": "https://registry.npmjs.org/@types/graceful-fs/-/graceful-fs-4.1.9.tgz", - "integrity": "sha512-olP3sd1qOEe5dXTSaFvQG+02VdRXcdytWLAZsAq1PecU8uqQAhkrnbli7DagjtXKW/Bl7YJbUsa8MPcuc8LHEQ==", + "node_modules/error-ex": { + "version": "1.3.4", + "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.4.tgz", + "integrity": "sha512-sqQamAnR14VgCr1A618A3sGrygcpK+HEbenA/HiEAkkUwcZIIB/tgWqHFxWgOyDh4nB4JCRimh79dR5Ywc9MDQ==", "license": "MIT", "dependencies": { - "@types/node": "*" + "is-arrayish": "^0.2.1" } }, - "node_modules/@types/hast": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/@types/hast/-/hast-3.0.4.tgz", - "integrity": "sha512-WPs+bbQw5aCj+x6laNGWLH3wviHtoCv/P3+otBhbOhJgG8qtpdAMlTCxLtsTWA7LH1Oh/bFCHsBn0TPS5m30EQ==", - "dev": true, + "node_modules/error-stack-parser": { + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/error-stack-parser/-/error-stack-parser-2.1.4.tgz", + "integrity": "sha512-Sk5V6wVazPhq5MhpO+AUxJn5x7XSXGl1R93Vn7i+zS15KDVxQijejNCrz8340/2bgLBjR9GtEG8ZVKONDjcqGQ==", "license": "MIT", "dependencies": { - "@types/unist": "*" + "stackframe": "^1.3.4" } }, - "node_modules/@types/http-cache-semantics": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/@types/http-cache-semantics/-/http-cache-semantics-4.0.4.tgz", - "integrity": "sha512-1m0bIFVc7eJWyve9S0RnuRgcQqF/Xd5QsUZAZeQFr1Q3/p9JWoQQEqmVy+DPTNpGXwhgIetAoYF8JSc33q29QA==", - "dev": true, - "license": "MIT" - }, - "node_modules/@types/http-errors": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/@types/http-errors/-/http-errors-2.0.5.tgz", - "integrity": "sha512-r8Tayk8HJnX0FztbZN7oVqGccWgw98T/0neJphO91KkmOzug1KkofZURD4UaD5uH8AqcFLfdPErnBod0u71/qg==", + "node_modules/es-abstract": { + "version": "1.24.0", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.24.0.tgz", + "integrity": "sha512-WSzPgsdLtTcQwm4CROfS5ju2Wa1QQcVeT37jFjYzdFz1r9ahadC8B8/a4qxJxM+09F18iumCdRmlr96ZYkQvEg==", "dev": true, - "license": "MIT" - }, - "node_modules/@types/istanbul-lib-coverage": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.6.tgz", - "integrity": "sha512-2QF/t/auWm0lsy8XtKVPG19v3sSOQlJe/YHZgfjb/KBBHOGSV+J2q/S671rcq9uTBrLAXmZpqJiaQbMT+zNU1w==", - "license": "MIT" - }, - "node_modules/@types/istanbul-lib-report": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/@types/istanbul-lib-report/-/istanbul-lib-report-3.0.3.tgz", - "integrity": "sha512-NQn7AHQnk/RSLOxrBbGyJM/aVQ+pjj5HCgasFxc0K/KhoATfQ/47AyUl15I2yBUpihjmas+a+VJBOqecrFH+uA==", "license": "MIT", "dependencies": { - "@types/istanbul-lib-coverage": "*" + "array-buffer-byte-length": "^1.0.2", + "arraybuffer.prototype.slice": "^1.0.4", + "available-typed-arrays": "^1.0.7", + "call-bind": "^1.0.8", + "call-bound": "^1.0.4", + "data-view-buffer": "^1.0.2", + "data-view-byte-length": "^1.0.2", + "data-view-byte-offset": "^1.0.1", + "es-define-property": "^1.0.1", + "es-errors": "^1.3.0", + "es-object-atoms": "^1.1.1", + "es-set-tostringtag": "^2.1.0", + "es-to-primitive": "^1.3.0", + "function.prototype.name": "^1.1.8", + "get-intrinsic": "^1.3.0", + "get-proto": "^1.0.1", + "get-symbol-description": "^1.1.0", + "globalthis": "^1.0.4", + "gopd": "^1.2.0", + "has-property-descriptors": "^1.0.2", + "has-proto": "^1.2.0", + "has-symbols": "^1.1.0", + "hasown": "^2.0.2", + "internal-slot": "^1.1.0", + "is-array-buffer": "^3.0.5", + "is-callable": "^1.2.7", + "is-data-view": "^1.0.2", + "is-negative-zero": "^2.0.3", + "is-regex": "^1.2.1", + "is-set": "^2.0.3", + "is-shared-array-buffer": "^1.0.4", + "is-string": "^1.1.1", + "is-typed-array": "^1.1.15", + "is-weakref": "^1.1.1", + "math-intrinsics": "^1.1.0", + "object-inspect": "^1.13.4", + "object-keys": "^1.1.1", + "object.assign": "^4.1.7", + "own-keys": "^1.0.1", + "regexp.prototype.flags": "^1.5.4", + "safe-array-concat": "^1.1.3", + "safe-push-apply": "^1.0.0", + "safe-regex-test": "^1.1.0", + "set-proto": "^1.0.0", + "stop-iteration-iterator": "^1.1.0", + "string.prototype.trim": "^1.2.10", + "string.prototype.trimend": "^1.0.9", + "string.prototype.trimstart": "^1.0.8", + "typed-array-buffer": "^1.0.3", + "typed-array-byte-length": "^1.0.3", + "typed-array-byte-offset": "^1.0.4", + "typed-array-length": "^1.0.7", + "unbox-primitive": "^1.1.0", + "which-typed-array": "^1.1.19" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/@types/istanbul-reports": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-3.0.4.tgz", - "integrity": "sha512-pk2B1NWalF9toCRu6gjBzR69syFjP4Od8WRAX+0mmf9lAjCRicLOWc+ZrxZHx/0XRjotgkF9t6iaMJ+aXcOdZQ==", + "node_modules/es-define-property": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.1.tgz", + "integrity": "sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==", "license": "MIT", - "dependencies": { - "@types/istanbul-lib-report": "*" + "engines": { + "node": ">= 0.4" } }, - "node_modules/@types/jest": { - "version": "29.5.14", - "resolved": "https://registry.npmjs.org/@types/jest/-/jest-29.5.14.tgz", - "integrity": "sha512-ZN+4sdnLUbo8EVvVc2ao0GFW6oVrQRPn4K2lglySj7APvSrgzxHiNNK99us4WDMi57xxA2yggblIAMNhXOotLQ==", - "dev": true, + "node_modules/es-errors": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz", + "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==", "license": "MIT", - "dependencies": { - "expect": "^29.0.0", - "pretty-format": "^29.0.0" + "engines": { + "node": ">= 0.4" } }, - "node_modules/@types/jsdom": { - "version": "20.0.1", - "resolved": "https://registry.npmjs.org/@types/jsdom/-/jsdom-20.0.1.tgz", - "integrity": "sha512-d0r18sZPmMQr1eG35u12FZfhIXNrnsPU/g5wvRKCUf/tOGilKKwYMYGqh33BNR6ba+2gkHw1EUiHoN3mn7E5IQ==", + "node_modules/es-get-iterator": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/es-get-iterator/-/es-get-iterator-1.1.3.tgz", + "integrity": "sha512-sPZmqHBe6JIiTfN5q2pEi//TwxmAFHwj/XEuYjTuse78i8KxaqMTTzxPoFKuzRpDpTJ+0NAbpfenkmH2rePtuw==", "dev": true, "license": "MIT", "dependencies": { - "@types/node": "*", - "@types/tough-cookie": "*", - "parse5": "^7.0.0" + "call-bind": "^1.0.2", + "get-intrinsic": "^1.1.3", + "has-symbols": "^1.0.3", + "is-arguments": "^1.1.1", + "is-map": "^2.0.2", + "is-set": "^2.0.2", + "is-string": "^1.0.7", + "isarray": "^2.0.5", + "stop-iteration-iterator": "^1.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/@types/json-schema": { - "version": "7.0.15", - "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.15.tgz", - "integrity": "sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==", - "license": "MIT" - }, - "node_modules/@types/json5": { - "version": "0.0.29", - "resolved": "https://registry.npmjs.org/@types/json5/-/json5-0.0.29.tgz", - "integrity": "sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==", + "node_modules/es-iterator-helpers": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/es-iterator-helpers/-/es-iterator-helpers-1.2.1.tgz", + "integrity": "sha512-uDn+FE1yrDzyC0pCo961B2IHbdM8y/ACZsKD4dG6WqrjV53BADjwa7D+1aom2rsNVfLyDgU/eigvlJGJ08OQ4w==", "dev": true, - "license": "MIT" - }, - "node_modules/@types/jsonld": { - "version": "1.5.15", - "resolved": "https://registry.npmjs.org/@types/jsonld/-/jsonld-1.5.15.tgz", - "integrity": "sha512-PlAFPZjL+AuGYmwlqwKEL0IMP8M8RexH0NIPGfCVWSQ041H2rR/8OlyZSD7KsCVoN8vCfWdtWDBxX8yBVP+xow==", - "license": "MIT" - }, - "node_modules/@types/lodash": { - "version": "4.17.20", - "resolved": "https://registry.npmjs.org/@types/lodash/-/lodash-4.17.20.tgz", - "integrity": "sha512-H3MHACvFUEiujabxhaI/ImO6gUrd8oOurg7LQtS7mbwIXA/cUqWrvBsaeJ23aZEPk1TAYkurjfMbSELfoCXlGA==", - "license": "MIT" - }, - "node_modules/@types/lodash.mergewith": { - "version": "4.6.7", - "resolved": "https://registry.npmjs.org/@types/lodash.mergewith/-/lodash.mergewith-4.6.7.tgz", - "integrity": "sha512-3m+lkO5CLRRYU0fhGRp7zbsGi6+BZj0uTVSwvcKU+nSlhjA9/QRNfuSGnD2mX6hQA7ZbmcCkzk5h4ZYGOtk14A==", "license": "MIT", "dependencies": { - "@types/lodash": "*" + "call-bind": "^1.0.8", + "call-bound": "^1.0.3", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.6", + "es-errors": "^1.3.0", + "es-set-tostringtag": "^2.0.3", + "function-bind": "^1.1.2", + "get-intrinsic": "^1.2.6", + "globalthis": "^1.0.4", + "gopd": "^1.2.0", + "has-property-descriptors": "^1.0.2", + "has-proto": "^1.2.0", + "has-symbols": "^1.1.0", + "internal-slot": "^1.1.0", + "iterator.prototype": "^1.1.4", + "safe-array-concat": "^1.1.3" + }, + "engines": { + "node": ">= 0.4" } }, - "node_modules/@types/luxon": { - "version": "3.7.1", - "resolved": "https://registry.npmjs.org/@types/luxon/-/luxon-3.7.1.tgz", - "integrity": "sha512-H3iskjFIAn5SlJU7OuxUmTEpebK6TKB8rxZShDslBMZJ5u9S//KM1sbdAisiSrqwLQncVjnpi2OK2J51h+4lsg==", + "node_modules/es-module-lexer": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-1.7.0.tgz", + "integrity": "sha512-jEQoCwk8hyb2AZziIOLhDqpm5+2ww5uIE6lkO/6jcOCusfk6LhMHpXXfBLXTZ7Ydyt0j4VoUQv6uGNYbdW+kBA==", "license": "MIT" }, - "node_modules/@types/mdast": { - "version": "3.0.15", - "resolved": "https://registry.npmjs.org/@types/mdast/-/mdast-3.0.15.tgz", - "integrity": "sha512-LnwD+mUEfxWMa1QpDraczIn6k0Ee3SMicuYSSzS6ZYl2gKS09EClnJYGd8Du6rfc5r/GZEk5o1mRb8TaTj03sQ==", + "node_modules/es-object-atoms": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/es-object-atoms/-/es-object-atoms-1.1.1.tgz", + "integrity": "sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA==", "license": "MIT", "dependencies": { - "@types/unist": "^2" + "es-errors": "^1.3.0" + }, + "engines": { + "node": ">= 0.4" } }, - "node_modules/@types/mdast/node_modules/@types/unist": { - "version": "2.0.11", - "resolved": "https://registry.npmjs.org/@types/unist/-/unist-2.0.11.tgz", - "integrity": "sha512-CmBKiL6NNo/OqgmMn95Fk9Whlp2mtvIv+KNpQKN2F4SjvrEesubTRWGYSg+BnWZOnlCaSTU1sMpsBOzgbYhnsA==", - "license": "MIT" - }, - "node_modules/@types/methods": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/@types/methods/-/methods-1.1.4.tgz", - "integrity": "sha512-ymXWVrDiCxTBE3+RIrrP533E70eA+9qu7zdWoHuOmGujkYtzf4HQF96b8nwHLqhuf4ykX61IGRIB38CC6/sImQ==", - "dev": true, - "license": "MIT" - }, - "node_modules/@types/mime": { - "version": "1.3.5", - "resolved": "https://registry.npmjs.org/@types/mime/-/mime-1.3.5.tgz", - "integrity": "sha512-/pyBZWSLD2n0dcHE3hq8s8ZvcETHtEuF+3E7XVt0Ig2nvsVQXdghHVcEkIWjy9A0wKfTn97a/PSDYohKIlnP/w==", - "dev": true, - "license": "MIT" - }, - "node_modules/@types/minimatch": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/@types/minimatch/-/minimatch-5.1.2.tgz", - "integrity": "sha512-K0VQKziLUWkVKiRVrx4a40iPaxTUefQmjtkQofBkYRcoaaL/8rhwDWww9qWbrgicNOgnpIsMxyNIUM4+n6dUIA==", - "dev": true, - "license": "MIT" - }, - "node_modules/@types/mocha": { - "version": "10.0.10", - "resolved": "https://registry.npmjs.org/@types/mocha/-/mocha-10.0.10.tgz", - "integrity": "sha512-xPyYSz1cMPnJQhl0CLMH68j3gprKZaTjG3s5Vi+fDgx+uhG9NOXwbVt52eFS8ECyXhyKcjDLCBEqBExKuiZb7Q==", - "dev": true, - "license": "MIT" - }, - "node_modules/@types/ms": { + "node_modules/es-set-tostringtag": { "version": "2.1.0", - "resolved": "https://registry.npmjs.org/@types/ms/-/ms-2.1.0.tgz", - "integrity": "sha512-GsCCIZDE/p3i96vtEqx+7dBUGXrc7zeSK3wwPHIaRThS+9OhWIXRqzs4d6k1SVU8g91DrNRWxWUGhp5KXQb2VA==", - "license": "MIT" - }, - "node_modules/@types/node": { - "version": "20.11.24", - "resolved": "https://registry.npmjs.org/@types/node/-/node-20.11.24.tgz", - "integrity": "sha512-Kza43ewS3xoLgCEpQrsT+xRo/EJej1y0kVYGiLFE1NEODXGzTfwiC6tXTLMQskn1X4/Rjlh0MQUvx9W+L9long==", + "resolved": "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.1.0.tgz", + "integrity": "sha512-j6vWzfrGVfyXxge+O0x5sh6cvxAog0a/4Rdd2K36zCMV5eJ+/+tOAngRO8cODMNWbVRdVlmGZQL2YS3yR8bIUA==", "license": "MIT", "dependencies": { - "undici-types": "~5.26.4" + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.6", + "has-tostringtag": "^1.0.2", + "hasown": "^2.0.2" + }, + "engines": { + "node": ">= 0.4" } }, - "node_modules/@types/node-fetch": { - "version": "2.6.13", - "resolved": "https://registry.npmjs.org/@types/node-fetch/-/node-fetch-2.6.13.tgz", - "integrity": "sha512-QGpRVpzSaUs30JBSGPjOg4Uveu384erbHBoT1zeONvyCfwQxIkUshLAOqN/k9EjGviPRmWTTe6aH2qySWKTVSw==", + "node_modules/es-shim-unscopables": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/es-shim-unscopables/-/es-shim-unscopables-1.1.0.tgz", + "integrity": "sha512-d9T8ucsEhh8Bi1woXCf+TIKDIROLG5WCkxg8geBCbvk22kzwC5G2OnXVMO6FUsvQlgUUXQ2itephWDLqDzbeCw==", "dev": true, "license": "MIT", "dependencies": { - "@types/node": "*", - "form-data": "^4.0.4" + "hasown": "^2.0.2" + }, + "engines": { + "node": ">= 0.4" } }, - "node_modules/@types/parse-json": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/@types/parse-json/-/parse-json-4.0.2.tgz", - "integrity": "sha512-dISoDXWWQwUquiKsyZ4Ng+HX2KsPL7LyHKHQwgGFEA3IaKac4Obd+h2a/a6waisAoepJlBcx9paWqjA8/HVjCw==", - "license": "MIT" - }, - "node_modules/@types/pbkdf2": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/@types/pbkdf2/-/pbkdf2-3.1.2.tgz", - "integrity": "sha512-uRwJqmiXmh9++aSu1VNEn3iIxWOhd8AHXNSdlaLfdAAdSTY9jYVeGWnzejM3dvrkbqE3/hyQkQQ29IFATEGlew==", + "node_modules/es-to-primitive": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.3.0.tgz", + "integrity": "sha512-w+5mJ3GuFL+NjVtJlvydShqE1eN3h3PbI7/5LAsYJP/2qtuMXjfL2LpHSRqo4b4eSF5K/DH1JXKUAHSB2UW50g==", + "dev": true, "license": "MIT", "dependencies": { - "@types/node": "*" + "is-callable": "^1.2.7", + "is-date-object": "^1.0.5", + "is-symbol": "^1.0.4" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/@types/prettier": { - "version": "2.7.3", - "resolved": "https://registry.npmjs.org/@types/prettier/-/prettier-2.7.3.tgz", - "integrity": "sha512-+68kP9yzs4LMp7VNh8gdzMSPZFL44MLGqiHWvttYJe+6qnuVr4Ek9wSBQoveqY/r+LwjCcU29kNVkidwim+kYA==", - "dev": true, - "license": "MIT" - }, - "node_modules/@types/prop-types": { - "version": "15.7.15", - "resolved": "https://registry.npmjs.org/@types/prop-types/-/prop-types-15.7.15.tgz", - "integrity": "sha512-F6bEyamV9jKGAFBEmlQnesRPGOQqS2+Uwi0Em15xenOxHaf2hv6L8YCVn3rPdPJOiJfPiCnLIRyvwVaqMY3MIw==", - "license": "MIT" - }, - "node_modules/@types/qs": { - "version": "6.14.0", - "resolved": "https://registry.npmjs.org/@types/qs/-/qs-6.14.0.tgz", - "integrity": "sha512-eOunJqu0K1923aExK6y8p6fsihYEn/BYuQ4g0CxAAgFc4b/ZLN4CrsRZ55srTdqoiLzU2B2evC+apEIxprEzkQ==", + "node_modules/es6-error": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/es6-error/-/es6-error-4.1.1.tgz", + "integrity": "sha512-Um/+FxMr9CISWh0bi5Zv0iOD+4cFh5qLeks1qhAopKVAJw3drgKbKySikp7wGhDL0HPeaja0P5ULZrxLkniUVg==", "dev": true, "license": "MIT" }, - "node_modules/@types/range-parser": { - "version": "1.2.7", - "resolved": "https://registry.npmjs.org/@types/range-parser/-/range-parser-1.2.7.tgz", - "integrity": "sha512-hKormJbkJqzQGhziax5PItDUTMAM9uE2XXQmM37dyd4hVM+5aVl7oVxMVUiVQn2oCQFN/LKCZdvSM0pFRqbSmQ==", - "dev": true, + "node_modules/es6-promise": { + "version": "4.2.8", + "resolved": "https://registry.npmjs.org/es6-promise/-/es6-promise-4.2.8.tgz", + "integrity": "sha512-HJDGx5daxeIvxdBxvG2cb9g4tEvwIk3i8+nhX0yGrYmZUzbkdg8QbDevheDB8gd0//uPj4c1EQua8Q+MViT0/w==", "license": "MIT" }, - "node_modules/@types/react": { - "version": "18.3.25", - "resolved": "https://registry.npmjs.org/@types/react/-/react-18.3.25.tgz", - "integrity": "sha512-oSVZmGtDPmRZtVDqvdKUi/qgCsWp5IDY29wp8na8Bj4B3cc99hfNzvNhlMkVVxctkAOGUA3Km7MMpBHAnWfcIA==", - "license": "MIT", - "dependencies": { - "@types/prop-types": "*", - "csstype": "^3.0.2" - } - }, - "node_modules/@types/react-dom": { - "version": "18.3.7", - "resolved": "https://registry.npmjs.org/@types/react-dom/-/react-dom-18.3.7.tgz", - "integrity": "sha512-MEe3UeoENYVFXzoXEWsvcpg6ZvlrFNlOQ7EOsvhI3CfAXwzPfO8Qwuxd40nepsYKqyyVQnTdEfv68q91yLcKrQ==", - "dev": true, - "license": "MIT", - "peerDependencies": { - "@types/react": "^18.0.0" - } - }, - "node_modules/@types/react-transition-group": { - "version": "4.4.12", - "resolved": "https://registry.npmjs.org/@types/react-transition-group/-/react-transition-group-4.4.12.tgz", - "integrity": "sha512-8TV6R3h2j7a91c+1DXdJi3Syo69zzIZbz7Lg5tORM5LEJG7X/E6a1V3drRyBRZq7/utz7A+c4OgYLiLcYGHG6w==", - "license": "MIT", - "peerDependencies": { - "@types/react": "*" - } - }, - "node_modules/@types/secp256k1": { - "version": "4.0.7", - "resolved": "https://registry.npmjs.org/@types/secp256k1/-/secp256k1-4.0.7.tgz", - "integrity": "sha512-Rcvjl6vARGAKRO6jHeKMatGrvOMGrR/AR11N1x2LqintPCyDZ7NBhrh238Z2VZc7aM7KIwnFpFQ7fnfK4H/9Qw==", + "node_modules/esast-util-from-estree": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/esast-util-from-estree/-/esast-util-from-estree-2.0.0.tgz", + "integrity": "sha512-4CyanoAudUSBAn5K13H4JhsMH6L9ZP7XbLVe/dKybkxMO7eDyLsT8UHl9TRNrU2Gr9nz+FovfSIjuXWJ81uVwQ==", "license": "MIT", "dependencies": { - "@types/node": "*" + "@types/estree-jsx": "^1.0.0", + "devlop": "^1.0.0", + "estree-util-visit": "^2.0.0", + "unist-util-position-from-estree": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/@types/semver": { - "version": "7.7.1", - "resolved": "https://registry.npmjs.org/@types/semver/-/semver-7.7.1.tgz", - "integrity": "sha512-FmgJfu+MOcQ370SD0ev7EI8TlCAfKYU+B4m5T3yXc1CiRN94g/SZPtsCkk506aUDtlMnFZvasDwHHUcZUEaYuA==", - "dev": true, - "license": "MIT" - }, - "node_modules/@types/send": { - "version": "0.17.5", - "resolved": "https://registry.npmjs.org/@types/send/-/send-0.17.5.tgz", - "integrity": "sha512-z6F2D3cOStZvuk2SaP6YrwkNO65iTZcwA2ZkSABegdkAh/lf+Aa/YQndZVfmEXT5vgAp6zv06VQ3ejSVjAny4w==", - "dev": true, + "node_modules/esast-util-from-js": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/esast-util-from-js/-/esast-util-from-js-2.0.1.tgz", + "integrity": "sha512-8Ja+rNJ0Lt56Pcf3TAmpBZjmx8ZcK5Ts4cAzIOjsjevg9oSXJnl6SUQ2EevU8tv3h6ZLWmoKL5H4fgWvdvfETw==", "license": "MIT", "dependencies": { - "@types/mime": "^1", - "@types/node": "*" + "@types/estree-jsx": "^1.0.0", + "acorn": "^8.0.0", + "esast-util-from-estree": "^2.0.0", + "vfile-message": "^4.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/@types/serve-static": { - "version": "1.15.8", - "resolved": "https://registry.npmjs.org/@types/serve-static/-/serve-static-1.15.8.tgz", - "integrity": "sha512-roei0UY3LhpOJvjbIP6ZZFngyLKl5dskOtDhxY5THRSpO+ZI+nzJ+m5yUMzGrp89YRa7lvknKkMYjqQFGwA7Sg==", - "dev": true, + "node_modules/esast-util-from-js/node_modules/unist-util-stringify-position": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-4.0.0.tgz", + "integrity": "sha512-0ASV06AAoKCDkS2+xw5RXJywruurpbC4JZSm7nr7MOt1ojAzvyyaO+UxZf18j8FCF6kmzCZKcAgN/yu2gm2XgQ==", "license": "MIT", "dependencies": { - "@types/http-errors": "*", - "@types/node": "*", - "@types/send": "*" + "@types/unist": "^3.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/@types/ssh2": { - "version": "1.15.5", - "resolved": "https://registry.npmjs.org/@types/ssh2/-/ssh2-1.15.5.tgz", - "integrity": "sha512-N1ASjp/nXH3ovBHddRJpli4ozpk6UdDYIX4RJWFa9L1YKnzdhTlVmiGHm4DZnj/jLbqZpes4aeR30EFGQtvhQQ==", - "dev": true, + "node_modules/esast-util-from-js/node_modules/vfile-message": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/vfile-message/-/vfile-message-4.0.3.tgz", + "integrity": "sha512-QTHzsGd1EhbZs4AsQ20JX1rC3cOlt/IWJruk893DfLRr57lcnOeMaWG4K0JrRta4mIJZKth2Au3mM3u03/JWKw==", "license": "MIT", "dependencies": { - "@types/node": "^18.11.18" + "@types/unist": "^3.0.0", + "unist-util-stringify-position": "^4.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/@types/ssh2-streams": { - "version": "0.1.12", - "resolved": "https://registry.npmjs.org/@types/ssh2-streams/-/ssh2-streams-0.1.12.tgz", - "integrity": "sha512-Sy8tpEmCce4Tq0oSOYdfqaBpA3hDM8SoxoFh5vzFsu2oL+znzGz8oVWW7xb4K920yYMUY+PIG31qZnFMfPWNCg==", + "node_modules/esbuild": { + "version": "0.25.10", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.25.10.tgz", + "integrity": "sha512-9RiGKvCwaqxO2owP61uQ4BgNborAQskMR6QusfWzQqv7AZOg5oGehdY2pRJMTKuwxd1IDBP4rSbI5lHzU7SMsQ==", "dev": true, + "hasInstallScript": true, "license": "MIT", - "dependencies": { - "@types/node": "*" + "peer": true, + "bin": { + "esbuild": "bin/esbuild" + }, + "engines": { + "node": ">=18" + }, + "optionalDependencies": { + "@esbuild/aix-ppc64": "0.25.10", + "@esbuild/android-arm": "0.25.10", + "@esbuild/android-arm64": "0.25.10", + "@esbuild/android-x64": "0.25.10", + "@esbuild/darwin-arm64": "0.25.10", + "@esbuild/darwin-x64": "0.25.10", + "@esbuild/freebsd-arm64": "0.25.10", + "@esbuild/freebsd-x64": "0.25.10", + "@esbuild/linux-arm": "0.25.10", + "@esbuild/linux-arm64": "0.25.10", + "@esbuild/linux-ia32": "0.25.10", + "@esbuild/linux-loong64": "0.25.10", + "@esbuild/linux-mips64el": "0.25.10", + "@esbuild/linux-ppc64": "0.25.10", + "@esbuild/linux-riscv64": "0.25.10", + "@esbuild/linux-s390x": "0.25.10", + "@esbuild/linux-x64": "0.25.10", + "@esbuild/netbsd-arm64": "0.25.10", + "@esbuild/netbsd-x64": "0.25.10", + "@esbuild/openbsd-arm64": "0.25.10", + "@esbuild/openbsd-x64": "0.25.10", + "@esbuild/openharmony-arm64": "0.25.10", + "@esbuild/sunos-x64": "0.25.10", + "@esbuild/win32-arm64": "0.25.10", + "@esbuild/win32-ia32": "0.25.10", + "@esbuild/win32-x64": "0.25.10" } }, - "node_modules/@types/ssh2/node_modules/@types/node": { - "version": "18.19.129", - "resolved": "https://registry.npmjs.org/@types/node/-/node-18.19.129.tgz", - "integrity": "sha512-hrmi5jWt2w60ayox3iIXwpMEnfUvOLJCRtrOPbHtH15nTjvO7uhnelvrdAs0dO0/zl5DZ3ZbahiaXEVb54ca/A==", + "node_modules/esbuild/node_modules/@esbuild/aix-ppc64": { + "version": "0.25.10", + "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.25.10.tgz", + "integrity": "sha512-0NFWnA+7l41irNuaSVlLfgNT12caWJVLzp5eAVhZ0z1qpxbockccEt3s+149rE64VUI3Ml2zt8Nv5JVc4QXTsw==", + "cpu": [ + "ppc64" + ], "dev": true, "license": "MIT", - "dependencies": { - "undici-types": "~5.26.4" + "optional": true, + "os": [ + "aix" + ], + "engines": { + "node": ">=18" } }, - "node_modules/@types/stack-utils": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/@types/stack-utils/-/stack-utils-2.0.3.tgz", - "integrity": "sha512-9aEbYZ3TbYMznPdcdr3SmIrLXwC/AKZXQeCf9Pgao5CKb8CyHuEX5jzWPTkvregvhRJHcpRO6BFoGW9ycaOkYw==", - "license": "MIT" - }, - "node_modules/@types/superagent": { - "version": "8.1.9", - "resolved": "https://registry.npmjs.org/@types/superagent/-/superagent-8.1.9.tgz", - "integrity": "sha512-pTVjI73witn+9ILmoJdajHGW2jkSaOzhiFYF1Rd3EQ94kymLqB9PjD9ISg7WaALC7+dCHT0FGe9T2LktLq/3GQ==", + "node_modules/esbuild/node_modules/@esbuild/android-arm": { + "version": "0.25.10", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.25.10.tgz", + "integrity": "sha512-dQAxF1dW1C3zpeCDc5KqIYuZ1tgAdRXNoZP7vkBIRtKZPYe2xVr/d3SkirklCHudW1B45tGiUlz2pUWDfbDD4w==", + "cpu": [ + "arm" + ], "dev": true, "license": "MIT", - "dependencies": { - "@types/cookiejar": "^2.1.5", - "@types/methods": "^1.1.4", - "@types/node": "*", - "form-data": "^4.0.0" + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=18" } }, - "node_modules/@types/supertest": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/@types/supertest/-/supertest-6.0.2.tgz", - "integrity": "sha512-137ypx2lk/wTQbW6An6safu9hXmajAifU/s7szAHLN/FeIm5w7yR0Wkl9fdJMRSHwOn4HLAI0DaB2TOORuhPDg==", + "node_modules/esbuild/node_modules/@esbuild/android-arm64": { + "version": "0.25.10", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.25.10.tgz", + "integrity": "sha512-LSQa7eDahypv/VO6WKohZGPSJDq5OVOo3UoFR1E4t4Gj1W7zEQMUhI+lo81H+DtB+kP+tDgBp+M4oNCwp6kffg==", + "cpu": [ + "arm64" + ], "dev": true, "license": "MIT", - "dependencies": { - "@types/methods": "^1.1.4", - "@types/superagent": "^8.1.0" + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=18" } }, - "node_modules/@types/testing-library__jest-dom": { - "version": "5.14.9", - "resolved": "https://registry.npmjs.org/@types/testing-library__jest-dom/-/testing-library__jest-dom-5.14.9.tgz", - "integrity": "sha512-FSYhIjFlfOpGSRyVoMBMuS3ws5ehFQODymf3vlI7U1K8c7PHwWwFY7VREfmsuzHSOnoKs/9/Y983ayOs7eRzqw==", + "node_modules/esbuild/node_modules/@esbuild/android-x64": { + "version": "0.25.10", + "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.25.10.tgz", + "integrity": "sha512-MiC9CWdPrfhibcXwr39p9ha1x0lZJ9KaVfvzA0Wxwz9ETX4v5CHfF09bx935nHlhi+MxhA63dKRRQLiVgSUtEg==", + "cpu": [ + "x64" + ], "dev": true, "license": "MIT", - "dependencies": { - "@types/jest": "*" + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=18" } }, - "node_modules/@types/tough-cookie": { - "version": "4.0.5", - "resolved": "https://registry.npmjs.org/@types/tough-cookie/-/tough-cookie-4.0.5.tgz", - "integrity": "sha512-/Ad8+nIOV7Rl++6f1BdKxFSMgmoqEoYbHRpPcx3JEfv8VRsQe9Z4mCXeJBzxs7mbHY/XOZZuXlRNfhpVPbs6ZA==", - "dev": true, - "license": "MIT" - }, - "node_modules/@types/triple-beam": { - "version": "1.3.5", - "resolved": "https://registry.npmjs.org/@types/triple-beam/-/triple-beam-1.3.5.tgz", - "integrity": "sha512-6WaYesThRMCl19iryMYP7/x2OVgCtbIVflDGFpWnb9irXI3UjYE4AzmYuiUKY1AJstGijoY+MgUszMgRxIYTYw==", - "license": "MIT" - }, - "node_modules/@types/trusted-types": { - "version": "2.0.7", - "resolved": "https://registry.npmjs.org/@types/trusted-types/-/trusted-types-2.0.7.tgz", - "integrity": "sha512-ScaPdn1dQczgbl0QFTeTOmVHFULt394XJgOQNoyVhZ6r2vLnMLJfBPd53SB52T/3G36VI1/g2MZaX0cwDuXsfw==", - "license": "MIT" - }, - "node_modules/@types/unist": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/@types/unist/-/unist-3.0.3.tgz", - "integrity": "sha512-ko/gIFJRv177XgZsZcBwnqJN5x/Gien8qNOn0D5bQU/zAzVf9Zt3BlcUiLqhV9y4ARk0GbT3tnUiPNgnTXzc/Q==", - "dev": true, - "license": "MIT" - }, - "node_modules/@types/uuid": { - "version": "9.0.8", - "resolved": "https://registry.npmjs.org/@types/uuid/-/uuid-9.0.8.tgz", - "integrity": "sha512-jg+97EGIcY9AGHJJRaaPVgetKDsrTgbRjQ5Msgjh/DQKEFl0DtyRr/VCOyD1T2R1MNeWPK/u7JoGhlDZnKBAfA==", + "node_modules/esbuild/node_modules/@esbuild/darwin-arm64": { + "version": "0.25.10", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.25.10.tgz", + "integrity": "sha512-JC74bdXcQEpW9KkV326WpZZjLguSZ3DfS8wrrvPMHgQOIEIG/sPXEN/V8IssoJhbefLRcRqw6RQH2NnpdprtMA==", + "cpu": [ + "arm64" + ], "dev": true, - "license": "MIT" - }, - "node_modules/@types/validator": { - "version": "13.15.3", - "resolved": "https://registry.npmjs.org/@types/validator/-/validator-13.15.3.tgz", - "integrity": "sha512-7bcUmDyS6PN3EuD9SlGGOxM77F8WLVsrwkxyWxKnxzmXoequ6c7741QBrANq6htVRGOITJ7z72mTP6Z4XyuG+Q==", - "license": "MIT" - }, - "node_modules/@types/yargs": { - "version": "17.0.33", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.33.tgz", - "integrity": "sha512-WpxBCKWPLr4xSsHgz511rFJAM+wS28w2zEO1QDNY5zM/S8ok70NNfztH0xwhqKyaK0OHCbN98LDAZuy1ctxDkA==", "license": "MIT", - "dependencies": { - "@types/yargs-parser": "*" + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=18" } }, - "node_modules/@types/yargs-parser": { - "version": "21.0.3", - "resolved": "https://registry.npmjs.org/@types/yargs-parser/-/yargs-parser-21.0.3.tgz", - "integrity": "sha512-I4q9QU9MQv4oEOz4tAHJtNz1cwuLxn2F3xcc2iV5WdqLPpUnj30aUuxt1mAxYTG+oe8CZMV/+6rU4S4gRDzqtQ==", - "license": "MIT" - }, - "node_modules/@typescript-eslint/eslint-plugin": { - "version": "6.21.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-6.21.0.tgz", - "integrity": "sha512-oy9+hTPCUFpngkEZUSzbf9MxI65wbKFoQYsgPdILTfbUldp5ovUuphZVe4i30emU9M/kP+T64Di0mxl7dSw3MA==", + "node_modules/esbuild/node_modules/@esbuild/darwin-x64": { + "version": "0.25.10", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.25.10.tgz", + "integrity": "sha512-tguWg1olF6DGqzws97pKZ8G2L7Ig1vjDmGTwcTuYHbuU6TTjJe5FXbgs5C1BBzHbJ2bo1m3WkQDbWO2PvamRcg==", + "cpu": [ + "x64" + ], "dev": true, "license": "MIT", - "dependencies": { - "@eslint-community/regexpp": "^4.5.1", - "@typescript-eslint/scope-manager": "6.21.0", - "@typescript-eslint/type-utils": "6.21.0", - "@typescript-eslint/utils": "6.21.0", - "@typescript-eslint/visitor-keys": "6.21.0", - "debug": "^4.3.4", - "graphemer": "^1.4.0", - "ignore": "^5.2.4", - "natural-compare": "^1.4.0", - "semver": "^7.5.4", - "ts-api-utils": "^1.0.1" - }, + "optional": true, + "os": [ + "darwin" + ], "engines": { - "node": "^16.0.0 || >=18.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependencies": { - "@typescript-eslint/parser": "^6.0.0 || ^6.0.0-alpha", - "eslint": "^7.0.0 || ^8.0.0" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } + "node": ">=18" } }, - "node_modules/@typescript-eslint/eslint-plugin/node_modules/@typescript-eslint/scope-manager": { - "version": "6.21.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-6.21.0.tgz", - "integrity": "sha512-OwLUIWZJry80O99zvqXVEioyniJMa+d2GrqpUTqi5/v5D5rOrppJVBPa0yKCblcigC0/aYAzxxqQ1B+DS2RYsg==", + "node_modules/esbuild/node_modules/@esbuild/freebsd-arm64": { + "version": "0.25.10", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.25.10.tgz", + "integrity": "sha512-3ZioSQSg1HT2N05YxeJWYR+Libe3bREVSdWhEEgExWaDtyFbbXWb49QgPvFH8u03vUPX10JhJPcz7s9t9+boWg==", + "cpu": [ + "arm64" + ], "dev": true, "license": "MIT", - "dependencies": { - "@typescript-eslint/types": "6.21.0", - "@typescript-eslint/visitor-keys": "6.21.0" - }, + "optional": true, + "os": [ + "freebsd" + ], "engines": { - "node": "^16.0.0 || >=18.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" + "node": ">=18" } }, - "node_modules/@typescript-eslint/eslint-plugin/node_modules/@typescript-eslint/type-utils": { - "version": "6.21.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-6.21.0.tgz", - "integrity": "sha512-rZQI7wHfao8qMX3Rd3xqeYSMCL3SoiSQLBATSiVKARdFGCYSRvmViieZjqc58jKgs8Y8i9YvVVhRbHSTA4VBag==", + "node_modules/esbuild/node_modules/@esbuild/freebsd-x64": { + "version": "0.25.10", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.25.10.tgz", + "integrity": "sha512-LLgJfHJk014Aa4anGDbh8bmI5Lk+QidDmGzuC2D+vP7mv/GeSN+H39zOf7pN5N8p059FcOfs2bVlrRr4SK9WxA==", + "cpu": [ + "x64" + ], "dev": true, "license": "MIT", - "dependencies": { - "@typescript-eslint/typescript-estree": "6.21.0", - "@typescript-eslint/utils": "6.21.0", - "debug": "^4.3.4", - "ts-api-utils": "^1.0.1" - }, + "optional": true, + "os": [ + "freebsd" + ], "engines": { - "node": "^16.0.0 || >=18.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependencies": { - "eslint": "^7.0.0 || ^8.0.0" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } + "node": ">=18" } }, - "node_modules/@typescript-eslint/eslint-plugin/node_modules/@typescript-eslint/types": { - "version": "6.21.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-6.21.0.tgz", - "integrity": "sha512-1kFmZ1rOm5epu9NZEZm1kckCDGj5UJEf7P1kliH4LKu/RkwpsfqqGmY2OOcUs18lSlQBKLDYBOGxRVtrMN5lpg==", + "node_modules/esbuild/node_modules/@esbuild/linux-arm": { + "version": "0.25.10", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.25.10.tgz", + "integrity": "sha512-oR31GtBTFYCqEBALI9r6WxoU/ZofZl962pouZRTEYECvNF/dtXKku8YXcJkhgK/beU+zedXfIzHijSRapJY3vg==", + "cpu": [ + "arm" + ], "dev": true, "license": "MIT", + "optional": true, + "os": [ + "linux" + ], "engines": { - "node": "^16.0.0 || >=18.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" + "node": ">=18" } }, - "node_modules/@typescript-eslint/eslint-plugin/node_modules/@typescript-eslint/typescript-estree": { - "version": "6.21.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-6.21.0.tgz", - "integrity": "sha512-6npJTkZcO+y2/kr+z0hc4HwNfrrP4kNYh57ek7yCNlrBjWQ1Y0OS7jiZTkgumrvkX5HkEKXFZkkdFNkaW2wmUQ==", + "node_modules/esbuild/node_modules/@esbuild/linux-arm64": { + "version": "0.25.10", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.25.10.tgz", + "integrity": "sha512-5luJWN6YKBsawd5f9i4+c+geYiVEw20FVW5x0v1kEMWNq8UctFjDiMATBxLvmmHA4bf7F6hTRaJgtghFr9iziQ==", + "cpu": [ + "arm64" + ], "dev": true, - "license": "BSD-2-Clause", - "dependencies": { - "@typescript-eslint/types": "6.21.0", - "@typescript-eslint/visitor-keys": "6.21.0", - "debug": "^4.3.4", - "globby": "^11.1.0", - "is-glob": "^4.0.3", - "minimatch": "9.0.3", - "semver": "^7.5.4", - "ts-api-utils": "^1.0.1" - }, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], "engines": { - "node": "^16.0.0 || >=18.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } + "node": ">=18" } }, - "node_modules/@typescript-eslint/eslint-plugin/node_modules/@typescript-eslint/utils": { - "version": "6.21.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-6.21.0.tgz", - "integrity": "sha512-NfWVaC8HP9T8cbKQxHcsJBY5YE1O33+jpMwN45qzWWaPDZgLIbo12toGMWnmhvCpd3sIxkpDw3Wv1B3dYrbDQQ==", + "node_modules/esbuild/node_modules/@esbuild/linux-ia32": { + "version": "0.25.10", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.25.10.tgz", + "integrity": "sha512-NrSCx2Kim3EnnWgS4Txn0QGt0Xipoumb6z6sUtl5bOEZIVKhzfyp/Lyw4C1DIYvzeW/5mWYPBFJU3a/8Yr75DQ==", + "cpu": [ + "ia32" + ], "dev": true, "license": "MIT", - "dependencies": { - "@eslint-community/eslint-utils": "^4.4.0", - "@types/json-schema": "^7.0.12", - "@types/semver": "^7.5.0", - "@typescript-eslint/scope-manager": "6.21.0", - "@typescript-eslint/types": "6.21.0", - "@typescript-eslint/typescript-estree": "6.21.0", - "semver": "^7.5.4" - }, + "optional": true, + "os": [ + "linux" + ], "engines": { - "node": "^16.0.0 || >=18.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependencies": { - "eslint": "^7.0.0 || ^8.0.0" + "node": ">=18" } }, - "node_modules/@typescript-eslint/eslint-plugin/node_modules/@typescript-eslint/visitor-keys": { - "version": "6.21.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-6.21.0.tgz", - "integrity": "sha512-JJtkDduxLi9bivAB+cYOVMtbkqdPOhZ+ZI5LC47MIRrDV4Yn2o+ZnW10Nkmr28xRpSpdJ6Sm42Hjf2+REYXm0A==", + "node_modules/esbuild/node_modules/@esbuild/linux-loong64": { + "version": "0.25.10", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.25.10.tgz", + "integrity": "sha512-xoSphrd4AZda8+rUDDfD9J6FUMjrkTz8itpTITM4/xgerAZZcFW7Dv+sun7333IfKxGG8gAq+3NbfEMJfiY+Eg==", + "cpu": [ + "loong64" + ], "dev": true, "license": "MIT", - "dependencies": { - "@typescript-eslint/types": "6.21.0", - "eslint-visitor-keys": "^3.4.1" - }, + "optional": true, + "os": [ + "linux" + ], "engines": { - "node": "^16.0.0 || >=18.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" + "node": ">=18" } }, - "node_modules/@typescript-eslint/eslint-plugin/node_modules/brace-expansion": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.2.tgz", - "integrity": "sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==", + "node_modules/esbuild/node_modules/@esbuild/linux-mips64el": { + "version": "0.25.10", + "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.25.10.tgz", + "integrity": "sha512-ab6eiuCwoMmYDyTnyptoKkVS3k8fy/1Uvq7Dj5czXI6DF2GqD2ToInBI0SHOp5/X1BdZ26RKc5+qjQNGRBelRA==", + "cpu": [ + "mips64el" + ], "dev": true, "license": "MIT", - "dependencies": { - "balanced-match": "^1.0.0" + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" } }, - "node_modules/@typescript-eslint/eslint-plugin/node_modules/minimatch": { - "version": "9.0.3", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.3.tgz", - "integrity": "sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg==", + "node_modules/esbuild/node_modules/@esbuild/linux-ppc64": { + "version": "0.25.10", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.25.10.tgz", + "integrity": "sha512-NLinzzOgZQsGpsTkEbdJTCanwA5/wozN9dSgEl12haXJBzMTpssebuXR42bthOF3z7zXFWH1AmvWunUCkBE4EA==", + "cpu": [ + "ppc64" + ], "dev": true, - "license": "ISC", - "dependencies": { - "brace-expansion": "^2.0.1" - }, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], "engines": { - "node": ">=16 || 14 >=14.17" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" + "node": ">=18" } }, - "node_modules/@typescript-eslint/eslint-plugin/node_modules/semver": { - "version": "7.7.2", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.2.tgz", - "integrity": "sha512-RF0Fw+rO5AMf9MAyaRXI4AV0Ulj5lMHqVxxdSgiVbixSCXoEmmX/jk0CuJw4+3SqroYO9VoUh+HcuJivvtJemA==", + "node_modules/esbuild/node_modules/@esbuild/linux-riscv64": { + "version": "0.25.10", + "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.25.10.tgz", + "integrity": "sha512-FE557XdZDrtX8NMIeA8LBJX3dC2M8VGXwfrQWU7LB5SLOajfJIxmSdyL/gU1m64Zs9CBKvm4UAuBp5aJ8OgnrA==", + "cpu": [ + "riscv64" + ], "dev": true, - "license": "ISC", - "bin": { - "semver": "bin/semver.js" - }, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], "engines": { - "node": ">=10" + "node": ">=18" } }, - "node_modules/@typescript-eslint/parser": { - "version": "6.21.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-6.21.0.tgz", - "integrity": "sha512-tbsV1jPne5CkFQCgPBcDOt30ItF7aJoZL997JSF7MhGQqOeT3svWRYxiqlfA5RUdlHN6Fi+EI9bxqbdyAUZjYQ==", + "node_modules/esbuild/node_modules/@esbuild/linux-s390x": { + "version": "0.25.10", + "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.25.10.tgz", + "integrity": "sha512-3BBSbgzuB9ajLoVZk0mGu+EHlBwkusRmeNYdqmznmMc9zGASFjSsxgkNsqmXugpPk00gJ0JNKh/97nxmjctdew==", + "cpu": [ + "s390x" + ], "dev": true, - "license": "BSD-2-Clause", - "dependencies": { - "@typescript-eslint/scope-manager": "6.21.0", - "@typescript-eslint/types": "6.21.0", - "@typescript-eslint/typescript-estree": "6.21.0", - "@typescript-eslint/visitor-keys": "6.21.0", - "debug": "^4.3.4" - }, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], "engines": { - "node": "^16.0.0 || >=18.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependencies": { - "eslint": "^7.0.0 || ^8.0.0" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } + "node": ">=18" } }, - "node_modules/@typescript-eslint/parser/node_modules/@typescript-eslint/scope-manager": { - "version": "6.21.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-6.21.0.tgz", - "integrity": "sha512-OwLUIWZJry80O99zvqXVEioyniJMa+d2GrqpUTqi5/v5D5rOrppJVBPa0yKCblcigC0/aYAzxxqQ1B+DS2RYsg==", + "node_modules/esbuild/node_modules/@esbuild/linux-x64": { + "version": "0.25.10", + "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.25.10.tgz", + "integrity": "sha512-QSX81KhFoZGwenVyPoberggdW1nrQZSvfVDAIUXr3WqLRZGZqWk/P4T8p2SP+de2Sr5HPcvjhcJzEiulKgnxtA==", + "cpu": [ + "x64" + ], "dev": true, "license": "MIT", - "dependencies": { - "@typescript-eslint/types": "6.21.0", - "@typescript-eslint/visitor-keys": "6.21.0" - }, + "optional": true, + "os": [ + "linux" + ], "engines": { - "node": "^16.0.0 || >=18.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" + "node": ">=18" } }, - "node_modules/@typescript-eslint/parser/node_modules/@typescript-eslint/types": { - "version": "6.21.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-6.21.0.tgz", - "integrity": "sha512-1kFmZ1rOm5epu9NZEZm1kckCDGj5UJEf7P1kliH4LKu/RkwpsfqqGmY2OOcUs18lSlQBKLDYBOGxRVtrMN5lpg==", + "node_modules/esbuild/node_modules/@esbuild/netbsd-x64": { + "version": "0.25.10", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.25.10.tgz", + "integrity": "sha512-7RTytDPGU6fek/hWuN9qQpeGPBZFfB4zZgcz2VK2Z5VpdUxEI8JKYsg3JfO0n/Z1E/6l05n0unDCNc4HnhQGig==", + "cpu": [ + "x64" + ], "dev": true, "license": "MIT", + "optional": true, + "os": [ + "netbsd" + ], "engines": { - "node": "^16.0.0 || >=18.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" + "node": ">=18" } }, - "node_modules/@typescript-eslint/parser/node_modules/@typescript-eslint/typescript-estree": { - "version": "6.21.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-6.21.0.tgz", - "integrity": "sha512-6npJTkZcO+y2/kr+z0hc4HwNfrrP4kNYh57ek7yCNlrBjWQ1Y0OS7jiZTkgumrvkX5HkEKXFZkkdFNkaW2wmUQ==", + "node_modules/esbuild/node_modules/@esbuild/openbsd-x64": { + "version": "0.25.10", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.25.10.tgz", + "integrity": "sha512-XkA4frq1TLj4bEMB+2HnI0+4RnjbuGZfet2gs/LNs5Hc7D89ZQBHQ0gL2ND6Lzu1+QVkjp3x1gIcPKzRNP8bXw==", + "cpu": [ + "x64" + ], "dev": true, - "license": "BSD-2-Clause", - "dependencies": { - "@typescript-eslint/types": "6.21.0", - "@typescript-eslint/visitor-keys": "6.21.0", - "debug": "^4.3.4", - "globby": "^11.1.0", - "is-glob": "^4.0.3", - "minimatch": "9.0.3", - "semver": "^7.5.4", - "ts-api-utils": "^1.0.1" - }, + "license": "MIT", + "optional": true, + "os": [ + "openbsd" + ], "engines": { - "node": "^16.0.0 || >=18.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } + "node": ">=18" } }, - "node_modules/@typescript-eslint/parser/node_modules/@typescript-eslint/visitor-keys": { - "version": "6.21.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-6.21.0.tgz", - "integrity": "sha512-JJtkDduxLi9bivAB+cYOVMtbkqdPOhZ+ZI5LC47MIRrDV4Yn2o+ZnW10Nkmr28xRpSpdJ6Sm42Hjf2+REYXm0A==", + "node_modules/esbuild/node_modules/@esbuild/sunos-x64": { + "version": "0.25.10", + "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.25.10.tgz", + "integrity": "sha512-fswk3XT0Uf2pGJmOpDB7yknqhVkJQkAQOcW/ccVOtfx05LkbWOaRAtn5SaqXypeKQra1QaEa841PgrSL9ubSPQ==", + "cpu": [ + "x64" + ], "dev": true, "license": "MIT", - "dependencies": { - "@typescript-eslint/types": "6.21.0", - "eslint-visitor-keys": "^3.4.1" - }, + "optional": true, + "os": [ + "sunos" + ], "engines": { - "node": "^16.0.0 || >=18.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" + "node": ">=18" } }, - "node_modules/@typescript-eslint/parser/node_modules/brace-expansion": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.2.tgz", - "integrity": "sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==", + "node_modules/esbuild/node_modules/@esbuild/win32-arm64": { + "version": "0.25.10", + "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.25.10.tgz", + "integrity": "sha512-ah+9b59KDTSfpaCg6VdJoOQvKjI33nTaQr4UluQwW7aEwZQsbMCfTmfEO4VyewOxx4RaDT/xCy9ra2GPWmO7Kw==", + "cpu": [ + "arm64" + ], "dev": true, "license": "MIT", - "dependencies": { - "balanced-match": "^1.0.0" + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=18" } }, - "node_modules/@typescript-eslint/parser/node_modules/minimatch": { - "version": "9.0.3", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.3.tgz", - "integrity": "sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg==", + "node_modules/esbuild/node_modules/@esbuild/win32-ia32": { + "version": "0.25.10", + "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.25.10.tgz", + "integrity": "sha512-QHPDbKkrGO8/cz9LKVnJU22HOi4pxZnZhhA2HYHez5Pz4JeffhDjf85E57Oyco163GnzNCVkZK0b/n4Y0UHcSw==", + "cpu": [ + "ia32" + ], "dev": true, - "license": "ISC", - "dependencies": { - "brace-expansion": "^2.0.1" - }, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], "engines": { - "node": ">=16 || 14 >=14.17" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" + "node": ">=18" } }, - "node_modules/@typescript-eslint/parser/node_modules/semver": { - "version": "7.7.2", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.2.tgz", - "integrity": "sha512-RF0Fw+rO5AMf9MAyaRXI4AV0Ulj5lMHqVxxdSgiVbixSCXoEmmX/jk0CuJw4+3SqroYO9VoUh+HcuJivvtJemA==", + "node_modules/esbuild/node_modules/@esbuild/win32-x64": { + "version": "0.25.10", + "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.25.10.tgz", + "integrity": "sha512-9KpxSVFCu0iK1owoez6aC/s/EdUQLDN3adTxGCqxMVhrPDj6bt5dbrHDXUuq+Bs2vATFBBrQS5vdQ/Ed2P+nbw==", + "cpu": [ + "x64" + ], "dev": true, - "license": "ISC", - "bin": { - "semver": "bin/semver.js" - }, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], "engines": { - "node": ">=10" + "node": ">=18" } }, - "node_modules/@typescript-eslint/scope-manager": { - "version": "8.0.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-8.0.1.tgz", - "integrity": "sha512-NpixInP5dm7uukMiRyiHjRKkom5RIFA4dfiHvalanD2cF0CLUuQqxfg8PtEUo9yqJI2bBhF+pcSafqnG3UBnRQ==", - "dev": true, + "node_modules/escalade": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.2.0.tgz", + "integrity": "sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==", "license": "MIT", - "dependencies": { - "@typescript-eslint/types": "8.0.1", - "@typescript-eslint/visitor-keys": "8.0.1" - }, "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" + "node": ">=6" } }, - "node_modules/@typescript-eslint/type-utils": { - "version": "8.0.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-8.0.1.tgz", - "integrity": "sha512-+/UT25MWvXeDX9YaHv1IS6KI1fiuTto43WprE7pgSMswHbn1Jm9GEM4Txp+X74ifOWV8emu2AWcbLhpJAvD5Ng==", - "dev": true, + "node_modules/escape-goat": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/escape-goat/-/escape-goat-4.0.0.tgz", + "integrity": "sha512-2Sd4ShcWxbx6OY1IHyla/CVNwvg7XwZVoXZHcSu9w9SReNP1EzzD5T8NWKIR38fIqEns9kDWKUQTXXAmlDrdPg==", "license": "MIT", - "dependencies": { - "@typescript-eslint/typescript-estree": "8.0.1", - "@typescript-eslint/utils": "8.0.1", - "debug": "^4.3.4", - "ts-api-utils": "^1.3.0" - }, "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + "node": ">=12" }, "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/@typescript-eslint/types": { - "version": "8.0.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.0.1.tgz", - "integrity": "sha512-PpqTVT3yCA/bIgJ12czBuE3iBlM3g4inRSC5J0QOdQFAn07TYrYEQBBKgXH1lQpglup+Zy6c1fxuwTk4MTNKIw==", - "dev": true, + "node_modules/escape-html": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", + "integrity": "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==", + "license": "MIT" + }, + "node_modules/escape-string-regexp": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", + "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", "license": "MIT", "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + "node": ">=10" }, "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/@typescript-eslint/typescript-estree": { - "version": "8.0.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-8.0.1.tgz", - "integrity": "sha512-8V9hriRvZQXPWU3bbiUV4Epo7EvgM6RTs+sUmxp5G//dBGy402S7Fx0W0QkB2fb4obCF8SInoUzvTYtc3bkb5w==", + "node_modules/escodegen": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-1.8.1.tgz", + "integrity": "sha512-yhi5S+mNTOuRvyW4gWlg5W1byMaQGWWSYHXsuFZ7GBo7tpyOwi2EdzMP/QWxh9hwkD2m+wDVHJsxhRIj+v/b/A==", "dev": true, "license": "BSD-2-Clause", "dependencies": { - "@typescript-eslint/types": "8.0.1", - "@typescript-eslint/visitor-keys": "8.0.1", - "debug": "^4.3.4", - "globby": "^11.1.0", - "is-glob": "^4.0.3", - "minimatch": "^9.0.4", - "semver": "^7.6.0", - "ts-api-utils": "^1.3.0" + "esprima": "^2.7.1", + "estraverse": "^1.9.1", + "esutils": "^2.0.2", + "optionator": "^0.8.1" }, - "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + "bin": { + "escodegen": "bin/escodegen.js", + "esgenerate": "bin/esgenerate.js" }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" + "engines": { + "node": ">=0.12.0" }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } - } - }, - "node_modules/@typescript-eslint/typescript-estree/node_modules/brace-expansion": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.2.tgz", - "integrity": "sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "balanced-match": "^1.0.0" + "optionalDependencies": { + "source-map": "~0.2.0" } }, - "node_modules/@typescript-eslint/typescript-estree/node_modules/minimatch": { - "version": "9.0.5", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", - "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", + "node_modules/escodegen/node_modules/esprima": { + "version": "2.7.3", + "resolved": "https://registry.npmjs.org/esprima/-/esprima-2.7.3.tgz", + "integrity": "sha512-OarPfz0lFCiW4/AV2Oy1Rp9qu0iusTKqykwTspGCZtPxmF81JR4MmIebvF1F9+UOKth2ZubLQ4XGGaU+hSn99A==", "dev": true, - "license": "ISC", - "dependencies": { - "brace-expansion": "^2.0.1" + "license": "BSD-2-Clause", + "bin": { + "esparse": "bin/esparse.js", + "esvalidate": "bin/esvalidate.js" }, "engines": { - "node": ">=16 || 14 >=14.17" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" + "node": ">=0.10.0" } }, - "node_modules/@typescript-eslint/typescript-estree/node_modules/semver": { - "version": "7.7.2", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.2.tgz", - "integrity": "sha512-RF0Fw+rO5AMf9MAyaRXI4AV0Ulj5lMHqVxxdSgiVbixSCXoEmmX/jk0CuJw4+3SqroYO9VoUh+HcuJivvtJemA==", + "node_modules/escodegen/node_modules/estraverse": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-1.9.3.tgz", + "integrity": "sha512-25w1fMXQrGdoquWnScXZGckOv+Wes+JDnuN/+7ex3SauFRS72r2lFDec0EKPt2YD1wUJ/IrfEex+9yp4hfSOJA==", "dev": true, - "license": "ISC", - "bin": { - "semver": "bin/semver.js" - }, "engines": { - "node": ">=10" + "node": ">=0.10.0" } }, - "node_modules/@typescript-eslint/utils": { - "version": "8.0.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-8.0.1.tgz", - "integrity": "sha512-CBFR0G0sCt0+fzfnKaciu9IBsKvEKYwN9UZ+eeogK1fYHg4Qxk1yf/wLQkLXlq8wbU2dFlgAesxt8Gi76E8RTA==", + "node_modules/escodegen/node_modules/levn": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz", + "integrity": "sha512-0OO4y2iOHix2W6ujICbKIaEQXvFQHue65vUG3pb5EUomzPI90z9hsA1VsO/dbIIpC53J8gxM9Q4Oho0jrCM/yA==", "dev": true, "license": "MIT", "dependencies": { - "@eslint-community/eslint-utils": "^4.4.0", - "@typescript-eslint/scope-manager": "8.0.1", - "@typescript-eslint/types": "8.0.1", - "@typescript-eslint/typescript-estree": "8.0.1" + "prelude-ls": "~1.1.2", + "type-check": "~0.3.2" }, "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependencies": { - "eslint": "^8.57.0 || ^9.0.0" + "node": ">= 0.8.0" } }, - "node_modules/@typescript-eslint/visitor-keys": { - "version": "8.0.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-8.0.1.tgz", - "integrity": "sha512-W5E+o0UfUcK5EgchLZsyVWqARmsM7v54/qEq6PY3YI5arkgmCzHiuk0zKSJJbm71V0xdRna4BGomkCTXz2/LkQ==", + "node_modules/escodegen/node_modules/optionator": { + "version": "0.8.3", + "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.8.3.tgz", + "integrity": "sha512-+IW9pACdk3XWmmTXG8m3upGUJst5XRGzxMRjXzAuJ1XnIFNvfhjjIuYkDvysnPQ7qzqVzLt78BCruntqRhWQbA==", "dev": true, "license": "MIT", "dependencies": { - "@typescript-eslint/types": "8.0.1", - "eslint-visitor-keys": "^3.4.3" + "deep-is": "~0.1.3", + "fast-levenshtein": "~2.0.6", + "levn": "~0.3.0", + "prelude-ls": "~1.1.2", + "type-check": "~0.3.2", + "word-wrap": "~1.2.3" }, "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" + "node": ">= 0.8.0" } }, - "node_modules/@ungap/structured-clone": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/@ungap/structured-clone/-/structured-clone-1.3.0.tgz", - "integrity": "sha512-WmoN8qaIAo7WTYWbAZuG8PYEhn5fkz7dZrqTBZ7dtt//lL2Gwms1IcnQ5yHqjDfX8Ft5j4YzDM23f87zBfDe9g==", + "node_modules/escodegen/node_modules/prelude-ls": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz", + "integrity": "sha512-ESF23V4SKG6lVSGZgYNpbsiaAkdab6ZgOxe52p7+Kid3W3u3bxR4Vfd/o21dmN7jSt0IwgZ4v5MUd26FEtXE9w==", "dev": true, - "license": "ISC" + "engines": { + "node": ">= 0.8.0" + } }, - "node_modules/@vitejs/plugin-react": { - "version": "4.7.0", - "resolved": "https://registry.npmjs.org/@vitejs/plugin-react/-/plugin-react-4.7.0.tgz", - "integrity": "sha512-gUu9hwfWvvEDBBmgtAowQCojwZmJ5mcLn3aufeCsitijs3+f2NsrPtlAWIR6OPiqljl96GVCUbLe0HyqIpVaoA==", + "node_modules/escodegen/node_modules/source-map": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.2.0.tgz", + "integrity": "sha512-CBdZ2oa/BHhS4xj5DlhjWNHcan57/5YuvfdLf17iVmIpd9KRm+DFLmC6nBNj+6Ua7Kt3TmOjDpQT1aTYOQtoUA==", "dev": true, - "license": "MIT", + "optional": true, "dependencies": { - "@babel/core": "^7.28.0", - "@babel/plugin-transform-react-jsx-self": "^7.27.1", - "@babel/plugin-transform-react-jsx-source": "^7.27.1", - "@rolldown/pluginutils": "1.0.0-beta.27", - "@types/babel__core": "^7.20.5", - "react-refresh": "^0.17.0" + "amdefine": ">=0.0.4" }, "engines": { - "node": "^14.18.0 || >=16.0.0" - }, - "peerDependencies": { - "vite": "^4.2.0 || ^5.0.0 || ^6.0.0 || ^7.0.0" + "node": ">=0.8.0" } }, - "node_modules/@vitejs/plugin-react-swc": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/@vitejs/plugin-react-swc/-/plugin-react-swc-3.6.0.tgz", - "integrity": "sha512-XFRbsGgpGxGzEV5i5+vRiro1bwcIaZDIdBRP16qwm+jP68ue/S8FJTBEgOeojtVDYrbSua3XFp71kC8VJE6v+g==", + "node_modules/escodegen/node_modules/type-check": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz", + "integrity": "sha512-ZCmOJdvOWDBYJlzAoFkC+Q0+bUyEOS1ltgp1MGU03fqHG+dbi9tBFU2Rd9QKiDZFAYrhPh2JUf7rZRIuHRKtOg==", "dev": true, "license": "MIT", "dependencies": { - "@swc/core": "^1.3.107" + "prelude-ls": "~1.1.2" }, - "peerDependencies": { - "vite": "^4 || ^5" + "engines": { + "node": ">= 0.8.0" } }, - "node_modules/@vitest/coverage-v8": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/@vitest/coverage-v8/-/coverage-v8-1.4.0.tgz", - "integrity": "sha512-4hDGyH1SvKpgZnIByr9LhGgCEuF9DKM34IBLCC/fVfy24Z3+PZ+Ii9hsVBsHvY1umM1aGPEjceRkzxCfcQ10wg==", + "node_modules/eslint": { + "version": "8.57.1", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.57.1.tgz", + "integrity": "sha512-ypowyDxpVSYpkXr9WPv2PAZCtNip1Mv5KTW0SCurXv/9iOpcrH9PaqUElksqEB6pChqHGDRCFTyrZlGhnLNGiA==", + "deprecated": "This version is no longer supported. Please see https://eslint.org/version-support for other options.", "dev": true, "license": "MIT", + "peer": true, "dependencies": { - "@ampproject/remapping": "^2.2.1", - "@bcoe/v8-coverage": "^0.2.3", - "debug": "^4.3.4", - "istanbul-lib-coverage": "^3.2.2", - "istanbul-lib-report": "^3.0.1", - "istanbul-lib-source-maps": "^5.0.4", - "istanbul-reports": "^3.1.6", - "magic-string": "^0.30.5", - "magicast": "^0.3.3", - "picocolors": "^1.0.0", - "std-env": "^3.5.0", - "strip-literal": "^2.0.0", - "test-exclude": "^6.0.0", - "v8-to-istanbul": "^9.2.0" + "@eslint-community/eslint-utils": "^4.2.0", + "@eslint-community/regexpp": "^4.6.1", + "@eslint/eslintrc": "^2.1.4", + "@eslint/js": "8.57.1", + "@humanwhocodes/config-array": "^0.13.0", + "@humanwhocodes/module-importer": "^1.0.1", + "@nodelib/fs.walk": "^1.2.8", + "@ungap/structured-clone": "^1.2.0", + "ajv": "^6.12.4", + "chalk": "^4.0.0", + "cross-spawn": "^7.0.2", + "debug": "^4.3.2", + "doctrine": "^3.0.0", + "escape-string-regexp": "^4.0.0", + "eslint-scope": "^7.2.2", + "eslint-visitor-keys": "^3.4.3", + "espree": "^9.6.1", + "esquery": "^1.4.2", + "esutils": "^2.0.2", + "fast-deep-equal": "^3.1.3", + "file-entry-cache": "^6.0.1", + "find-up": "^5.0.0", + "glob-parent": "^6.0.2", + "globals": "^13.19.0", + "graphemer": "^1.4.0", + "ignore": "^5.2.0", + "imurmurhash": "^0.1.4", + "is-glob": "^4.0.0", + "is-path-inside": "^3.0.3", + "js-yaml": "^4.1.0", + "json-stable-stringify-without-jsonify": "^1.0.1", + "levn": "^0.4.1", + "lodash.merge": "^4.6.2", + "minimatch": "^3.1.2", + "natural-compare": "^1.4.0", + "optionator": "^0.9.3", + "strip-ansi": "^6.0.1", + "text-table": "^0.2.0" }, - "funding": { - "url": "https://opencollective.com/vitest" + "bin": { + "eslint": "bin/eslint.js" }, - "peerDependencies": { - "vitest": "1.4.0" + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" } }, - "node_modules/@vitest/coverage-v8/node_modules/istanbul-lib-source-maps": { - "version": "5.0.6", - "resolved": "https://registry.npmjs.org/istanbul-lib-source-maps/-/istanbul-lib-source-maps-5.0.6.tgz", - "integrity": "sha512-yg2d+Em4KizZC5niWhQaIomgf5WlL4vOOjZ5xGCmF8SnPE/mDWWXgvRExdcpCgh9lLRRa1/fSYp2ymmbJ1pI+A==", + "node_modules/eslint-config-prettier": { + "version": "9.1.2", + "resolved": "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-9.1.2.tgz", + "integrity": "sha512-iI1f+D2ViGn+uvv5HuHVUamg8ll4tN+JRHGc6IJi4TP9Kl976C57fzPXgseXNs8v0iA8aSJpHsTWjDb9QJamGQ==", "dev": true, - "license": "BSD-3-Clause", - "dependencies": { - "@jridgewell/trace-mapping": "^0.3.23", - "debug": "^4.1.1", - "istanbul-lib-coverage": "^3.0.0" + "license": "MIT", + "peer": true, + "bin": { + "eslint-config-prettier": "bin/cli.js" }, - "engines": { - "node": ">=10" + "peerDependencies": { + "eslint": ">=7.0.0" } }, - "node_modules/@vitest/expect": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/@vitest/expect/-/expect-1.4.0.tgz", - "integrity": "sha512-Jths0sWCJZ8BxjKe+p+eKsoqev1/T8lYcrjavEaz8auEJ4jAVY0GwW3JKmdVU4mmNPLPHixh4GNXP7GFtAiDHA==", + "node_modules/eslint-import-resolver-node": { + "version": "0.3.9", + "resolved": "https://registry.npmjs.org/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.9.tgz", + "integrity": "sha512-WFj2isz22JahUv+B788TlO3N6zL3nNJGU8CcZbPZvVEkBPaJdCV4vy5wyghty5ROFbCRnm132v8BScu5/1BQ8g==", "dev": true, "license": "MIT", "dependencies": { - "@vitest/spy": "1.4.0", - "@vitest/utils": "1.4.0", - "chai": "^4.3.10" - }, - "funding": { - "url": "https://opencollective.com/vitest" + "debug": "^3.2.7", + "is-core-module": "^2.13.0", + "resolve": "^1.22.4" } }, - "node_modules/@vitest/runner": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/@vitest/runner/-/runner-1.4.0.tgz", - "integrity": "sha512-EDYVSmesqlQ4RD2VvWo3hQgTJ7ZrFQ2VSJdfiJiArkCerDAGeyF1i6dHkmySqk573jLp6d/cfqCN+7wUB5tLgg==", + "node_modules/eslint-import-resolver-node/node_modules/debug": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", + "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", "dev": true, "license": "MIT", "dependencies": { - "@vitest/utils": "1.4.0", - "p-limit": "^5.0.0", - "pathe": "^1.1.1" - }, - "funding": { - "url": "https://opencollective.com/vitest" + "ms": "^2.1.1" } }, - "node_modules/@vitest/runner/node_modules/p-limit": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-5.0.0.tgz", - "integrity": "sha512-/Eaoq+QyLSiXQ4lyYV23f14mZRQcXnxfHrN0vCai+ak9G0pp9iEQukIIZq5NccEvwRB8PUnZT0KsOoDCINS1qQ==", + "node_modules/eslint-import-resolver-typescript": { + "version": "3.6.1", + "resolved": "https://registry.npmjs.org/eslint-import-resolver-typescript/-/eslint-import-resolver-typescript-3.6.1.tgz", + "integrity": "sha512-xgdptdoi5W3niYeuQxKmzVDTATvLYqhpwmykwsh7f6HIOStGWEIL9iqZgQDF9u9OEzrRwR8no5q2VT+bjAujTg==", "dev": true, - "license": "MIT", + "license": "ISC", "dependencies": { - "yocto-queue": "^1.0.0" + "debug": "^4.3.4", + "enhanced-resolve": "^5.12.0", + "eslint-module-utils": "^2.7.4", + "fast-glob": "^3.3.1", + "get-tsconfig": "^4.5.0", + "is-core-module": "^2.11.0", + "is-glob": "^4.0.3" }, "engines": { - "node": ">=18" + "node": "^14.18.0 || >=16.0.0" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/@vitest/snapshot": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/@vitest/snapshot/-/snapshot-1.4.0.tgz", - "integrity": "sha512-saAFnt5pPIA5qDGxOHxJ/XxhMFKkUSBJmVt5VgDsAqPTX6JP326r5C/c9UuCMPoXNzuudTPsYDZCoJ5ilpqG2A==", - "dev": true, - "license": "MIT", - "dependencies": { - "magic-string": "^0.30.5", - "pathe": "^1.1.1", - "pretty-format": "^29.7.0" + "url": "https://opencollective.com/unts/projects/eslint-import-resolver-ts" }, - "funding": { - "url": "https://opencollective.com/vitest" + "peerDependencies": { + "eslint": "*", + "eslint-plugin-import": "*" } }, - "node_modules/@vitest/spy": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/@vitest/spy/-/spy-1.4.0.tgz", - "integrity": "sha512-Ywau/Qs1DzM/8Uc+yA77CwSegizMlcgTJuYGAi0jujOteJOUf1ujunHThYo243KG9nAyWT3L9ifPYZ5+As/+6Q==", + "node_modules/eslint-module-utils": { + "version": "2.12.1", + "resolved": "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.12.1.tgz", + "integrity": "sha512-L8jSWTze7K2mTg0vos/RuLRS5soomksDPoJLXIslC7c8Wmut3bx7CPpJijDcBZtxQ5lrbUdM+s0OlNbz0DCDNw==", "dev": true, "license": "MIT", "dependencies": { - "tinyspy": "^2.2.0" + "debug": "^3.2.7" }, - "funding": { - "url": "https://opencollective.com/vitest" + "engines": { + "node": ">=4" + }, + "peerDependenciesMeta": { + "eslint": { + "optional": true + } } }, - "node_modules/@vitest/utils": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/@vitest/utils/-/utils-1.4.0.tgz", - "integrity": "sha512-mx3Yd1/6e2Vt/PUC98DcqTirtfxUyAZ32uK82r8rZzbtBeBo+nqgnjx/LvqQdWsrvNtm14VmurNgcf4nqY5gJg==", + "node_modules/eslint-module-utils/node_modules/debug": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", + "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", "dev": true, "license": "MIT", "dependencies": { - "diff-sequences": "^29.6.3", - "estree-walker": "^3.0.3", - "loupe": "^2.3.7", - "pretty-format": "^29.7.0" - }, - "funding": { - "url": "https://opencollective.com/vitest" + "ms": "^2.1.1" } }, - "node_modules/@vitest/utils/node_modules/estree-walker": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-3.0.3.tgz", - "integrity": "sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g==", + "node_modules/eslint-plugin-import": { + "version": "2.32.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.32.0.tgz", + "integrity": "sha512-whOE1HFo/qJDyX4SnXzP4N6zOWn79WhnCUY/iDR0mPfQZO8wcYE4JClzI2oZrhBnnMUCBCHZhO6VQyoBU95mZA==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { - "@types/estree": "^1.0.0" - } - }, - "node_modules/@walletconnect/auth-client": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/@walletconnect/auth-client/-/auth-client-2.1.2.tgz", - "integrity": "sha512-ubJLn+vGb8sTdBFX6xAh4kjR5idrtS3RBngQWaJJJpEPBQmxMb8pM2q0FIRs8Is4K6jKy+uEhusMV+7ZBmTzjw==", - "license": "Apache-2.0", - "dependencies": { - "@ethersproject/hash": "^5.7.0", - "@ethersproject/transactions": "^5.7.0", - "@stablelib/random": "^1.0.2", - "@stablelib/sha256": "^1.0.1", - "@walletconnect/core": "^2.10.1", - "@walletconnect/events": "^1.0.1", - "@walletconnect/heartbeat": "^1.2.1", - "@walletconnect/jsonrpc-utils": "^1.0.8", - "@walletconnect/logger": "^2.0.1", - "@walletconnect/time": "^1.0.2", - "@walletconnect/utils": "^2.10.1", - "events": "^3.3.0", - "isomorphic-unfetch": "^3.1.0" + "@rtsao/scc": "^1.1.0", + "array-includes": "^3.1.9", + "array.prototype.findlastindex": "^1.2.6", + "array.prototype.flat": "^1.3.3", + "array.prototype.flatmap": "^1.3.3", + "debug": "^3.2.7", + "doctrine": "^2.1.0", + "eslint-import-resolver-node": "^0.3.9", + "eslint-module-utils": "^2.12.1", + "hasown": "^2.0.2", + "is-core-module": "^2.16.1", + "is-glob": "^4.0.3", + "minimatch": "^3.1.2", + "object.fromentries": "^2.0.8", + "object.groupby": "^1.0.3", + "object.values": "^1.2.1", + "semver": "^6.3.1", + "string.prototype.trimend": "^1.0.9", + "tsconfig-paths": "^3.15.0" }, "engines": { - "node": ">=16" + "node": ">=4" + }, + "peerDependencies": { + "eslint": "^2 || ^3 || ^4 || ^5 || ^6 || ^7.2.0 || ^8 || ^9" } }, - "node_modules/@walletconnect/auth-client/node_modules/@stablelib/random": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/@stablelib/random/-/random-1.0.2.tgz", - "integrity": "sha512-rIsE83Xpb7clHPVRlBj8qNe5L8ISQOzjghYQm/dZ7VaM2KHYwMW5adjQjrzTZCchFnNCNhkwtnOBa9HTMJCI8w==", + "node_modules/eslint-plugin-import/node_modules/debug": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", + "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", + "dev": true, "license": "MIT", "dependencies": { - "@stablelib/binary": "^1.0.1", - "@stablelib/wipe": "^1.0.1" - } - }, - "node_modules/@walletconnect/browser-utils": { - "version": "1.8.0", - "resolved": "https://registry.npmjs.org/@walletconnect/browser-utils/-/browser-utils-1.8.0.tgz", - "integrity": "sha512-Wcqqx+wjxIo9fv6eBUFHPsW1y/bGWWRboni5dfD8PtOmrihrEpOCmvRJe4rfl7xgJW8Ea9UqKEaq0bIRLHlK4A==", - "license": "Apache-2.0", - "dependencies": { - "@walletconnect/safe-json": "1.0.0", - "@walletconnect/types": "^1.8.0", - "@walletconnect/window-getters": "1.0.0", - "@walletconnect/window-metadata": "1.0.0", - "detect-browser": "5.2.0" + "ms": "^2.1.1" } }, - "node_modules/@walletconnect/browser-utils/node_modules/@walletconnect/types": { - "version": "1.8.0", - "resolved": "https://registry.npmjs.org/@walletconnect/types/-/types-1.8.0.tgz", - "integrity": "sha512-Cn+3I0V0vT9ghMuzh1KzZvCkiAxTq+1TR2eSqw5E5AVWfmCtECFkVZBP6uUJZ8YjwLqXheI+rnjqPy7sVM4Fyg==", - "deprecated": "WalletConnect's v1 SDKs are now deprecated. Please upgrade to a v2 SDK. For details see: https://docs.walletconnect.com/", - "license": "Apache-2.0" - }, - "node_modules/@walletconnect/browser-utils/node_modules/detect-browser": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/detect-browser/-/detect-browser-5.2.0.tgz", - "integrity": "sha512-tr7XntDAu50BVENgQfajMLzacmSe34D+qZc4zjnniz0ZVuw/TZcLcyxHQjYpJTM36sGEkZZlYLnIM1hH7alTMA==", - "license": "MIT" - }, - "node_modules/@walletconnect/core": { - "version": "2.17.1", - "resolved": "https://registry.npmjs.org/@walletconnect/core/-/core-2.17.1.tgz", - "integrity": "sha512-SMgJR5hEyEE/tENIuvlEb4aB9tmMXPzQ38Y61VgYBmwAFEhOHtpt8EDfnfRWqEhMyXuBXG4K70Yh8c67Yry+Xw==", + "node_modules/eslint-plugin-import/node_modules/doctrine": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz", + "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==", + "dev": true, "license": "Apache-2.0", "dependencies": { - "@walletconnect/heartbeat": "1.2.2", - "@walletconnect/jsonrpc-provider": "1.0.14", - "@walletconnect/jsonrpc-types": "1.0.4", - "@walletconnect/jsonrpc-utils": "1.0.8", - "@walletconnect/jsonrpc-ws-connection": "1.0.14", - "@walletconnect/keyvaluestorage": "1.1.1", - "@walletconnect/logger": "2.1.2", - "@walletconnect/relay-api": "1.0.11", - "@walletconnect/relay-auth": "1.0.4", - "@walletconnect/safe-json": "1.0.2", - "@walletconnect/time": "1.0.2", - "@walletconnect/types": "2.17.1", - "@walletconnect/utils": "2.17.1", - "@walletconnect/window-getters": "1.0.1", - "events": "3.3.0", - "lodash.isequal": "4.5.0", - "uint8arrays": "3.1.0" + "esutils": "^2.0.2" }, "engines": { - "node": ">=18" + "node": ">=0.10.0" } }, - "node_modules/@walletconnect/core/node_modules/@ethersproject/hash": { - "version": "5.7.0", - "resolved": "https://registry.npmjs.org/@ethersproject/hash/-/hash-5.7.0.tgz", - "integrity": "sha512-qX5WrQfnah1EFnO5zJv1v46a8HW0+E5xuBBDTwMFZLuVTx0tbU2kkx15NqdjxecrLGatQN9FGQKpb1FKdHCt+g==", - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], + "node_modules/eslint-plugin-import/node_modules/json5": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.2.tgz", + "integrity": "sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA==", + "dev": true, "license": "MIT", "dependencies": { - "@ethersproject/abstract-signer": "^5.7.0", - "@ethersproject/address": "^5.7.0", - "@ethersproject/base64": "^5.7.0", - "@ethersproject/bignumber": "^5.7.0", - "@ethersproject/bytes": "^5.7.0", - "@ethersproject/keccak256": "^5.7.0", - "@ethersproject/logger": "^5.7.0", - "@ethersproject/properties": "^5.7.0", - "@ethersproject/strings": "^5.7.0" + "minimist": "^1.2.0" + }, + "bin": { + "json5": "lib/cli.js" } }, - "node_modules/@walletconnect/core/node_modules/@ethersproject/transactions": { - "version": "5.7.0", - "resolved": "https://registry.npmjs.org/@ethersproject/transactions/-/transactions-5.7.0.tgz", - "integrity": "sha512-kmcNicCp1lp8qanMTC3RIikGgoJ80ztTyvtsFvCYpSCfkjhD0jZ2LOrnbcuxuToLIUYYf+4XwD1rP+B/erDIhQ==", - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], + "node_modules/eslint-plugin-import/node_modules/strip-bom": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", + "integrity": "sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==", + "dev": true, "license": "MIT", - "dependencies": { - "@ethersproject/address": "^5.7.0", - "@ethersproject/bignumber": "^5.7.0", - "@ethersproject/bytes": "^5.7.0", - "@ethersproject/constants": "^5.7.0", - "@ethersproject/keccak256": "^5.7.0", - "@ethersproject/logger": "^5.7.0", - "@ethersproject/properties": "^5.7.0", - "@ethersproject/rlp": "^5.7.0", - "@ethersproject/signing-key": "^5.7.0" + "engines": { + "node": ">=4" } }, - "node_modules/@walletconnect/core/node_modules/@stablelib/random": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/@stablelib/random/-/random-1.0.2.tgz", - "integrity": "sha512-rIsE83Xpb7clHPVRlBj8qNe5L8ISQOzjghYQm/dZ7VaM2KHYwMW5adjQjrzTZCchFnNCNhkwtnOBa9HTMJCI8w==", + "node_modules/eslint-plugin-import/node_modules/tsconfig-paths": { + "version": "3.15.0", + "resolved": "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-3.15.0.tgz", + "integrity": "sha512-2Ac2RgzDe/cn48GvOe3M+o82pEFewD3UPbyoUHHdKasHwJKjds4fLXWf/Ux5kATBKN20oaFGu+jbElp1pos0mg==", + "dev": true, "license": "MIT", "dependencies": { - "@stablelib/binary": "^1.0.1", - "@stablelib/wipe": "^1.0.1" + "@types/json5": "^0.0.29", + "json5": "^1.0.2", + "minimist": "^1.2.6", + "strip-bom": "^3.0.0" } }, - "node_modules/@walletconnect/core/node_modules/@walletconnect/keyvaluestorage": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/@walletconnect/keyvaluestorage/-/keyvaluestorage-1.1.1.tgz", - "integrity": "sha512-V7ZQq2+mSxAq7MrRqDxanTzu2RcElfK1PfNYiaVnJgJ7Q7G7hTVwF8voIBx92qsRyGHZihrwNPHuZd1aKkd0rA==", + "node_modules/eslint-plugin-jest": { + "version": "27.9.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-jest/-/eslint-plugin-jest-27.9.0.tgz", + "integrity": "sha512-QIT7FH7fNmd9n4se7FFKHbsLKGQiw885Ds6Y/sxKgCZ6natwCsXdgPOADnYVxN2QrRweF0FZWbJ6S7Rsn7llug==", + "dev": true, "license": "MIT", "dependencies": { - "@walletconnect/safe-json": "^1.0.1", - "idb-keyval": "^6.2.1", - "unstorage": "^1.9.0" + "@typescript-eslint/utils": "^5.10.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" }, "peerDependencies": { - "@react-native-async-storage/async-storage": "1.x" + "@typescript-eslint/eslint-plugin": "^5.0.0 || ^6.0.0 || ^7.0.0", + "eslint": "^7.0.0 || ^8.0.0", + "jest": "*" }, "peerDependenciesMeta": { - "@react-native-async-storage/async-storage": { + "@typescript-eslint/eslint-plugin": { + "optional": true + }, + "jest": { "optional": true } } }, - "node_modules/@walletconnect/core/node_modules/@walletconnect/relay-auth": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/@walletconnect/relay-auth/-/relay-auth-1.0.4.tgz", - "integrity": "sha512-kKJcS6+WxYq5kshpPaxGHdwf5y98ZwbfuS4EE/NkQzqrDFm5Cj+dP8LofzWvjrrLkZq7Afy7WrQMXdLy8Sx7HQ==", + "node_modules/eslint-plugin-jest/node_modules/@typescript-eslint/scope-manager": { + "version": "5.62.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.62.0.tgz", + "integrity": "sha512-VXuvVvZeQCQb5Zgf4HAxc04q5j+WrNAtNh9OwCsCgpKqESMTu3tF/jhZ3xG6T4NZwWl65Bg8KuS2uEvhSfLl0w==", + "dev": true, "license": "MIT", "dependencies": { - "@stablelib/ed25519": "^1.0.2", - "@stablelib/random": "^1.0.1", - "@walletconnect/safe-json": "^1.0.1", - "@walletconnect/time": "^1.0.2", - "tslib": "1.14.1", - "uint8arrays": "^3.0.0" + "@typescript-eslint/types": "5.62.0", + "@typescript-eslint/visitor-keys": "5.62.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" } }, - "node_modules/@walletconnect/core/node_modules/@walletconnect/safe-json": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/@walletconnect/safe-json/-/safe-json-1.0.2.tgz", - "integrity": "sha512-Ogb7I27kZ3LPC3ibn8ldyUr5544t3/STow9+lzz7Sfo808YD7SBWk7SAsdBFlYgP2zDRy2hS3sKRcuSRM0OTmA==", + "node_modules/eslint-plugin-jest/node_modules/@typescript-eslint/types": { + "version": "5.62.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.62.0.tgz", + "integrity": "sha512-87NVngcbVXUahrRTqIK27gD2t5Cu1yuCXxbLcFtCzZGlfyVWWh8mLHkoxzjsB6DDNnvdL+fW8MiwPEJyGJQDgQ==", + "dev": true, "license": "MIT", - "dependencies": { - "tslib": "1.14.1" - } - }, - "node_modules/@walletconnect/core/node_modules/@walletconnect/types": { - "version": "2.17.1", - "resolved": "https://registry.npmjs.org/@walletconnect/types/-/types-2.17.1.tgz", - "integrity": "sha512-aiUeBE3EZZTsZBv5Cju3D0PWAsZCMks1g3hzQs9oNtrbuLL6pKKU0/zpKwk4vGywszxPvC3U0tBCku9LLsH/0A==", - "license": "Apache-2.0", - "dependencies": { - "@walletconnect/events": "1.0.1", - "@walletconnect/heartbeat": "1.2.2", - "@walletconnect/jsonrpc-types": "1.0.4", - "@walletconnect/keyvaluestorage": "1.1.1", - "@walletconnect/logger": "2.1.2", - "events": "3.3.0" - } - }, - "node_modules/@walletconnect/core/node_modules/@walletconnect/utils": { - "version": "2.17.1", - "resolved": "https://registry.npmjs.org/@walletconnect/utils/-/utils-2.17.1.tgz", - "integrity": "sha512-KL7pPwq7qUC+zcTmvxGqIyYanfHgBQ+PFd0TEblg88jM7EjuDLhjyyjtkhyE/2q7QgR7OanIK7pCpilhWvBsBQ==", - "license": "Apache-2.0", - "dependencies": { - "@ethersproject/hash": "5.7.0", - "@ethersproject/transactions": "5.7.0", - "@stablelib/chacha20poly1305": "1.0.1", - "@stablelib/hkdf": "1.0.1", - "@stablelib/random": "1.0.2", - "@stablelib/sha256": "1.0.1", - "@stablelib/x25519": "1.0.3", - "@walletconnect/jsonrpc-utils": "1.0.8", - "@walletconnect/keyvaluestorage": "1.1.1", - "@walletconnect/relay-api": "1.0.11", - "@walletconnect/relay-auth": "1.0.4", - "@walletconnect/safe-json": "1.0.2", - "@walletconnect/time": "1.0.2", - "@walletconnect/types": "2.17.1", - "@walletconnect/window-getters": "1.0.1", - "@walletconnect/window-metadata": "1.0.1", - "detect-browser": "5.3.0", - "elliptic": "6.5.7", - "query-string": "7.1.3", - "uint8arrays": "3.1.0" + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" } }, - "node_modules/@walletconnect/core/node_modules/@walletconnect/window-getters": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@walletconnect/window-getters/-/window-getters-1.0.1.tgz", - "integrity": "sha512-vHp+HqzGxORPAN8gY03qnbTMnhqIwjeRJNOMOAzePRg4xVEEE2WvYsI9G2NMjOknA8hnuYbU3/hwLcKbjhc8+Q==", - "license": "MIT", + "node_modules/eslint-plugin-jest/node_modules/@typescript-eslint/typescript-estree": { + "version": "5.62.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.62.0.tgz", + "integrity": "sha512-CmcQ6uY7b9y694lKdRB8FEel7JbU/40iSAPomu++SjLMntB+2Leay2LO6i8VnJk58MtE9/nQSFIH6jpyRWyYzA==", + "dev": true, + "license": "BSD-2-Clause", "dependencies": { - "tslib": "1.14.1" + "@typescript-eslint/types": "5.62.0", + "@typescript-eslint/visitor-keys": "5.62.0", + "debug": "^4.3.4", + "globby": "^11.1.0", + "is-glob": "^4.0.3", + "semver": "^7.3.7", + "tsutils": "^3.21.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } } }, - "node_modules/@walletconnect/core/node_modules/@walletconnect/window-metadata": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@walletconnect/window-metadata/-/window-metadata-1.0.1.tgz", - "integrity": "sha512-9koTqyGrM2cqFRW517BPY/iEtUDx2r1+Pwwu5m7sJ7ka79wi3EyqhqcICk/yDmv6jAS1rjKgTKXlEhanYjijcA==", + "node_modules/eslint-plugin-jest/node_modules/@typescript-eslint/utils": { + "version": "5.62.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-5.62.0.tgz", + "integrity": "sha512-n8oxjeb5aIbPFEtmQxQYOLI0i9n5ySBEY/ZEHHZqKQSFnxio1rv6dthascc9dLuwrL0RC5mPCxB7vnAVGAYWAQ==", + "dev": true, "license": "MIT", "dependencies": { - "@walletconnect/window-getters": "^1.0.1", - "tslib": "1.14.1" + "@eslint-community/eslint-utils": "^4.2.0", + "@types/json-schema": "^7.0.9", + "@types/semver": "^7.3.12", + "@typescript-eslint/scope-manager": "5.62.0", + "@typescript-eslint/types": "5.62.0", + "@typescript-eslint/typescript-estree": "5.62.0", + "eslint-scope": "^5.1.1", + "semver": "^7.3.7" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^6.0.0 || ^7.0.0 || ^8.0.0" } }, - "node_modules/@walletconnect/core/node_modules/bn.js": { - "version": "4.12.2", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.2.tgz", - "integrity": "sha512-n4DSx829VRTRByMRGdjQ9iqsN0Bh4OolPsFnaZBLcbi8iXcB+kJ9s7EnRt4wILZNV3kPLHkRVfOc/HvhC3ovDw==", - "license": "MIT" - }, - "node_modules/@walletconnect/core/node_modules/chokidar": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-4.0.3.tgz", - "integrity": "sha512-Qgzu8kfBvo+cA4962jnP1KkS6Dop5NS6g7R5LFYJr4b8Ub94PPQXUksCw9PvXoeXPRRddRNC5C1JQUR2SMGtnA==", + "node_modules/eslint-plugin-jest/node_modules/@typescript-eslint/visitor-keys": { + "version": "5.62.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.62.0.tgz", + "integrity": "sha512-07ny+LHRzQXepkGg6w0mFY41fVUNBrL2Roj/++7V1txKugfjm/Ci/qSND03r2RhlJhJYMcTn9AhhSSqQp0Ysyw==", + "dev": true, "license": "MIT", "dependencies": { - "readdirp": "^4.0.1" + "@typescript-eslint/types": "5.62.0", + "eslint-visitor-keys": "^3.3.0" }, "engines": { - "node": ">= 14.16.0" + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" }, "funding": { - "url": "https://paulmillr.com/funding/" + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" } }, - "node_modules/@walletconnect/core/node_modules/elliptic": { - "version": "6.5.7", - "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.5.7.tgz", - "integrity": "sha512-ESVCtTwiA+XhY3wyh24QqRGBoP3rEdDUl3EDUUo9tft074fi19IrdpH7hLCMMP3CIj7jb3W96rn8lt/BqIlt5Q==", - "license": "MIT", + "node_modules/eslint-plugin-jest/node_modules/eslint-scope": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", + "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==", + "dev": true, + "license": "BSD-2-Clause", "dependencies": { - "bn.js": "^4.11.9", - "brorand": "^1.1.0", - "hash.js": "^1.0.0", - "hmac-drbg": "^1.0.1", - "inherits": "^2.0.4", - "minimalistic-assert": "^1.0.1", - "minimalistic-crypto-utils": "^1.0.1" + "esrecurse": "^4.3.0", + "estraverse": "^4.1.1" + }, + "engines": { + "node": ">=8.0.0" } }, - "node_modules/@walletconnect/core/node_modules/lru-cache": { - "version": "10.4.3", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz", - "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==", - "license": "ISC" - }, - "node_modules/@walletconnect/core/node_modules/multiformats": { - "version": "9.9.0", - "resolved": "https://registry.npmjs.org/multiformats/-/multiformats-9.9.0.tgz", - "integrity": "sha512-HoMUjhH9T8DDBNT+6xzkrd9ga/XiBI4xLr58LJACwK6G3HTOPeMz4nB4KJs33L2BelrIJa7P0VuNaVF3hMYfjg==", - "license": "(Apache-2.0 AND MIT)" - }, - "node_modules/@walletconnect/core/node_modules/readdirp": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-4.1.2.tgz", - "integrity": "sha512-GDhwkLfywWL2s6vEjyhri+eXmfH6j1L7JE27WhqLeYzoh/A3DBaYGEj2H/HFZCn/kMfim73FXxEJTw06WtxQwg==", - "license": "MIT", + "node_modules/eslint-plugin-jest/node_modules/estraverse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", + "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", + "dev": true, + "license": "BSD-2-Clause", "engines": { - "node": ">= 14.18.0" - }, - "funding": { - "type": "individual", - "url": "https://paulmillr.com/funding/" + "node": ">=4.0" } }, - "node_modules/@walletconnect/core/node_modules/tslib": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", - "license": "0BSD" + "node_modules/eslint-plugin-jest/node_modules/semver": { + "version": "7.7.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.2.tgz", + "integrity": "sha512-RF0Fw+rO5AMf9MAyaRXI4AV0Ulj5lMHqVxxdSgiVbixSCXoEmmX/jk0CuJw4+3SqroYO9VoUh+HcuJivvtJemA==", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } }, - "node_modules/@walletconnect/core/node_modules/uint8arrays": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/uint8arrays/-/uint8arrays-3.1.0.tgz", - "integrity": "sha512-ei5rfKtoRO8OyOIor2Rz5fhzjThwIHJZ3uyDPnDHTXbP0aMQ1RN/6AI5B5d9dBxJOU+BvOAk7ZQ1xphsX8Lrog==", + "node_modules/eslint-plugin-license-header": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/eslint-plugin-license-header/-/eslint-plugin-license-header-0.6.1.tgz", + "integrity": "sha512-9aIz8q3OaMr1/uQmCGCWySjTs5nEXUJexNegz/8lluNcZbEl82Ag1Vyr1Hu3oIveRW1NbXDPs6nu4zu9mbrmWA==", + "dev": true, "license": "MIT", "dependencies": { - "multiformats": "^9.4.2" + "requireindex": "^1.2.0" } }, - "node_modules/@walletconnect/core/node_modules/unstorage": { - "version": "1.17.1", - "resolved": "https://registry.npmjs.org/unstorage/-/unstorage-1.17.1.tgz", - "integrity": "sha512-KKGwRTT0iVBCErKemkJCLs7JdxNVfqTPc/85ae1XES0+bsHbc/sFBfVi5kJp156cc51BHinIH2l3k0EZ24vOBQ==", + "node_modules/eslint-plugin-prettier": { + "version": "5.5.4", + "resolved": "https://registry.npmjs.org/eslint-plugin-prettier/-/eslint-plugin-prettier-5.5.4.tgz", + "integrity": "sha512-swNtI95SToIz05YINMA6Ox5R057IMAmWZ26GqPxusAp1TZzj+IdY9tXNWWD3vkF/wEqydCONcwjTFpxybBqZsg==", + "dev": true, "license": "MIT", "dependencies": { - "anymatch": "^3.1.3", - "chokidar": "^4.0.3", - "destr": "^2.0.5", - "h3": "^1.15.4", - "lru-cache": "^10.4.3", - "node-fetch-native": "^1.6.7", - "ofetch": "^1.4.1", - "ufo": "^1.6.1" + "prettier-linter-helpers": "^1.0.0", + "synckit": "^0.11.7" + }, + "engines": { + "node": "^14.18.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint-plugin-prettier" }, "peerDependencies": { - "@azure/app-configuration": "^1.8.0", - "@azure/cosmos": "^4.2.0", - "@azure/data-tables": "^13.3.0", - "@azure/identity": "^4.6.0", - "@azure/keyvault-secrets": "^4.9.0", - "@azure/storage-blob": "^12.26.0", - "@capacitor/preferences": "^6.0.3 || ^7.0.0", - "@deno/kv": ">=0.9.0", - "@netlify/blobs": "^6.5.0 || ^7.0.0 || ^8.1.0 || ^9.0.0 || ^10.0.0", - "@planetscale/database": "^1.19.0", - "@upstash/redis": "^1.34.3", - "@vercel/blob": ">=0.27.1", - "@vercel/functions": "^2.2.12 || ^3.0.0", - "@vercel/kv": "^1.0.1", - "aws4fetch": "^1.0.20", - "db0": ">=0.2.1", - "idb-keyval": "^6.2.1", - "ioredis": "^5.4.2", - "uploadthing": "^7.4.4" + "@types/eslint": ">=8.0.0", + "eslint": ">=8.0.0", + "eslint-config-prettier": ">= 7.0.0 <10.0.0 || >=10.1.0", + "prettier": ">=3.0.0" }, "peerDependenciesMeta": { - "@azure/app-configuration": { - "optional": true - }, - "@azure/cosmos": { - "optional": true - }, - "@azure/data-tables": { - "optional": true - }, - "@azure/identity": { - "optional": true - }, - "@azure/keyvault-secrets": { - "optional": true - }, - "@azure/storage-blob": { - "optional": true - }, - "@capacitor/preferences": { - "optional": true - }, - "@deno/kv": { - "optional": true - }, - "@netlify/blobs": { - "optional": true - }, - "@planetscale/database": { - "optional": true - }, - "@upstash/redis": { - "optional": true - }, - "@vercel/blob": { - "optional": true - }, - "@vercel/functions": { - "optional": true - }, - "@vercel/kv": { - "optional": true - }, - "aws4fetch": { - "optional": true - }, - "db0": { - "optional": true - }, - "idb-keyval": { - "optional": true - }, - "ioredis": { + "@types/eslint": { "optional": true }, - "uploadthing": { + "eslint-config-prettier": { "optional": true } } }, - "node_modules/@walletconnect/environment": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@walletconnect/environment/-/environment-1.0.1.tgz", - "integrity": "sha512-T426LLZtHj8e8rYnKfzsw1aG6+M0BT1ZxayMdv/p8yM0MU+eJDISqNY3/bccxRr4LrF9csq02Rhqt08Ibl0VRg==", + "node_modules/eslint-plugin-prettier/node_modules/@pkgr/core": { + "version": "0.2.9", + "resolved": "https://registry.npmjs.org/@pkgr/core/-/core-0.2.9.tgz", + "integrity": "sha512-QNqXyfVS2wm9hweSYD2O7F0G06uurj9kZ96TRQE5Y9hU7+tgdZwIkbAKc5Ocy1HxEY2kuDQa6cQ1WRs/O5LFKA==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^12.20.0 || ^14.18.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/pkgr" + } + }, + "node_modules/eslint-plugin-prettier/node_modules/synckit": { + "version": "0.11.11", + "resolved": "https://registry.npmjs.org/synckit/-/synckit-0.11.11.tgz", + "integrity": "sha512-MeQTA1r0litLUf0Rp/iisCaL8761lKAZHaimlbGK4j0HysC4PLfqygQj9srcs0m2RdtDYnF8UuYyKpbjHYp7Jw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@pkgr/core": "^0.2.9" + }, + "engines": { + "node": "^14.18.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/synckit" + } + }, + "node_modules/eslint-plugin-react": { + "version": "7.34.1", + "resolved": "https://registry.npmjs.org/eslint-plugin-react/-/eslint-plugin-react-7.34.1.tgz", + "integrity": "sha512-N97CxlouPT1AHt8Jn0mhhN2RrADlUAsk1/atcT2KyA/l9Q/E6ll7OIGwNumFmWfZ9skV3XXccYS19h80rHtgkw==", + "dev": true, "license": "MIT", "dependencies": { - "tslib": "1.14.1" + "array-includes": "^3.1.7", + "array.prototype.findlast": "^1.2.4", + "array.prototype.flatmap": "^1.3.2", + "array.prototype.toreversed": "^1.1.2", + "array.prototype.tosorted": "^1.1.3", + "doctrine": "^2.1.0", + "es-iterator-helpers": "^1.0.17", + "estraverse": "^5.3.0", + "jsx-ast-utils": "^2.4.1 || ^3.0.0", + "minimatch": "^3.1.2", + "object.entries": "^1.1.7", + "object.fromentries": "^2.0.7", + "object.hasown": "^1.1.3", + "object.values": "^1.1.7", + "prop-types": "^15.8.1", + "resolve": "^2.0.0-next.5", + "semver": "^6.3.1", + "string.prototype.matchall": "^4.0.10" + }, + "engines": { + "node": ">=4" + }, + "peerDependencies": { + "eslint": "^3 || ^4 || ^5 || ^6 || ^7 || ^8" } }, - "node_modules/@walletconnect/environment/node_modules/tslib": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", - "license": "0BSD" + "node_modules/eslint-plugin-react-hooks": { + "version": "4.6.2", + "resolved": "https://registry.npmjs.org/eslint-plugin-react-hooks/-/eslint-plugin-react-hooks-4.6.2.tgz", + "integrity": "sha512-QzliNJq4GinDBcD8gPB5v0wh6g8q3SUi6EFF0x8N/BL9PoVs0atuGc47ozMRyOWAKdwaZ5OnbOEa3WR+dSGKuQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + }, + "peerDependencies": { + "eslint": "^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0-0" + } }, - "node_modules/@walletconnect/events": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@walletconnect/events/-/events-1.0.1.tgz", - "integrity": "sha512-NPTqaoi0oPBVNuLv7qPaJazmGHs5JGyO8eEAk5VGKmJzDR7AHzD4k6ilox5kxk1iwiOnFopBOOMLs86Oa76HpQ==", + "node_modules/eslint-plugin-react-refresh": { + "version": "0.3.5", + "resolved": "https://registry.npmjs.org/eslint-plugin-react-refresh/-/eslint-plugin-react-refresh-0.3.5.tgz", + "integrity": "sha512-61qNIsc7fo9Pp/mju0J83kzvLm0Bsayu7OQSLEoJxLDCBjIIyb87bkzufoOvdDxLkSlMfkF7UxomC4+eztUBSA==", + "dev": true, "license": "MIT", - "dependencies": { - "keyvaluestorage-interface": "^1.0.0", - "tslib": "1.14.1" + "peerDependencies": { + "eslint": ">=7" } }, - "node_modules/@walletconnect/events/node_modules/tslib": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", - "license": "0BSD" + "node_modules/eslint-plugin-react/node_modules/doctrine": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz", + "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "esutils": "^2.0.2" + }, + "engines": { + "node": ">=0.10.0" + } }, - "node_modules/@walletconnect/heartbeat": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/@walletconnect/heartbeat/-/heartbeat-1.2.2.tgz", - "integrity": "sha512-uASiRmC5MwhuRuf05vq4AT48Pq8RMi876zV8rr8cV969uTOzWdB/k+Lj5yI2PBtB1bGQisGen7MM1GcZlQTBXw==", + "node_modules/eslint-plugin-react/node_modules/resolve": { + "version": "2.0.0-next.5", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-2.0.0-next.5.tgz", + "integrity": "sha512-U7WjGVG9sH8tvjW5SmGbQuui75FiyjAX72HX15DwBBwF9dNiQZRQAg9nnPhYy+TUnE0+VcrttuvNI8oSxZcocA==", + "dev": true, "license": "MIT", "dependencies": { - "@walletconnect/events": "^1.0.1", - "@walletconnect/time": "^1.0.2", - "events": "^3.3.0" + "is-core-module": "^2.13.0", + "path-parse": "^1.0.7", + "supports-preserve-symlinks-flag": "^1.0.0" + }, + "bin": { + "resolve": "bin/resolve" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/@walletconnect/jsonrpc-provider": { - "version": "1.0.14", - "resolved": "https://registry.npmjs.org/@walletconnect/jsonrpc-provider/-/jsonrpc-provider-1.0.14.tgz", - "integrity": "sha512-rtsNY1XqHvWj0EtITNeuf8PHMvlCLiS3EjQL+WOkxEOA4KPxsohFnBDeyPYiNm4ZvkQdLnece36opYidmtbmow==", + "node_modules/eslint-plugin-unused-imports": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-unused-imports/-/eslint-plugin-unused-imports-4.2.0.tgz", + "integrity": "sha512-hLbJ2/wnjKq4kGA9AUaExVFIbNzyxYdVo49QZmKCnhk5pc9wcYRbfgLHvWJ8tnsdcseGhoUAddm9gn/lt+d74w==", + "dev": true, "license": "MIT", - "dependencies": { - "@walletconnect/jsonrpc-utils": "^1.0.8", - "@walletconnect/safe-json": "^1.0.2", - "events": "^3.3.0" + "peerDependencies": { + "@typescript-eslint/eslint-plugin": "^8.0.0-0 || ^7.0.0 || ^6.0.0 || ^5.0.0", + "eslint": "^9.0.0 || ^8.0.0" + }, + "peerDependenciesMeta": { + "@typescript-eslint/eslint-plugin": { + "optional": true + } } }, - "node_modules/@walletconnect/jsonrpc-provider/node_modules/@walletconnect/safe-json": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/@walletconnect/safe-json/-/safe-json-1.0.2.tgz", - "integrity": "sha512-Ogb7I27kZ3LPC3ibn8ldyUr5544t3/STow9+lzz7Sfo808YD7SBWk7SAsdBFlYgP2zDRy2hS3sKRcuSRM0OTmA==", + "node_modules/eslint-rule-composer": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/eslint-rule-composer/-/eslint-rule-composer-0.3.0.tgz", + "integrity": "sha512-bt+Sh8CtDmn2OajxvNO+BX7Wn4CIWMpTRm3MaiKPCQcnnlm0CS2mhui6QaoeQugs+3Kj2ESKEEGJUdVafwhiCg==", + "dev": true, "license": "MIT", + "engines": { + "node": ">=4.0.0" + } + }, + "node_modules/eslint-scope": { + "version": "7.2.2", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.2.2.tgz", + "integrity": "sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg==", + "dev": true, + "license": "BSD-2-Clause", "dependencies": { - "tslib": "1.14.1" + "esrecurse": "^4.3.0", + "estraverse": "^5.2.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" } }, - "node_modules/@walletconnect/jsonrpc-provider/node_modules/tslib": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", - "license": "0BSD" + "node_modules/eslint-visitor-keys": { + "version": "3.4.3", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz", + "integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } }, - "node_modules/@walletconnect/jsonrpc-types": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/@walletconnect/jsonrpc-types/-/jsonrpc-types-1.0.4.tgz", - "integrity": "sha512-P6679fG/M+wuWg9TY8mh6xFSdYnFyFjwFelxyISxMDrlbXokorEVXYOxiqEbrU3x1BmBoCAJJ+vtEaEoMlpCBQ==", + "node_modules/eslint/node_modules/@eslint/eslintrc": { + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-2.1.4.tgz", + "integrity": "sha512-269Z39MS6wVJtsoUl10L60WdkhJVdPG24Q4eZTH3nnF6lpvSShEK3wQjDX9JRWAUPvPh7COouPpU9IrqaZFvtQ==", + "dev": true, "license": "MIT", "dependencies": { - "events": "^3.3.0", - "keyvaluestorage-interface": "^1.0.0" + "ajv": "^6.12.4", + "debug": "^4.3.2", + "espree": "^9.6.0", + "globals": "^13.19.0", + "ignore": "^5.2.0", + "import-fresh": "^3.2.1", + "js-yaml": "^4.1.0", + "minimatch": "^3.1.2", + "strip-json-comments": "^3.1.1" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" } }, - "node_modules/@walletconnect/jsonrpc-utils": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/@walletconnect/jsonrpc-utils/-/jsonrpc-utils-1.0.8.tgz", - "integrity": "sha512-vdeb03bD8VzJUL6ZtzRYsFMq1eZQcM3EAzT0a3st59dyLfJ0wq+tKMpmGH7HlB7waD858UWgfIcudbPFsbzVdw==", + "node_modules/eslint/node_modules/@eslint/js": { + "version": "8.57.1", + "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.57.1.tgz", + "integrity": "sha512-d9zaMRSTIKDLhctzH12MtXvJKSSUhaHcjV+2Z+GK+EEY7XKpP5yR4x+N3TAcHTcu963nIr+TMcCb4DBCYX1z6Q==", + "dev": true, "license": "MIT", - "dependencies": { - "@walletconnect/environment": "^1.0.1", - "@walletconnect/jsonrpc-types": "^1.0.3", - "tslib": "1.14.1" + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" } }, - "node_modules/@walletconnect/jsonrpc-utils/node_modules/tslib": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", - "license": "0BSD" - }, - "node_modules/@walletconnect/jsonrpc-ws-connection": { - "version": "1.0.14", - "resolved": "https://registry.npmjs.org/@walletconnect/jsonrpc-ws-connection/-/jsonrpc-ws-connection-1.0.14.tgz", - "integrity": "sha512-Jsl6fC55AYcbkNVkwNM6Jo+ufsuCQRqViOQ8ZBPH9pRREHH9welbBiszuTLqEJiQcO/6XfFDl6bzCJIkrEi8XA==", - "license": "MIT", + "node_modules/eslint/node_modules/@humanwhocodes/config-array": { + "version": "0.13.0", + "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.13.0.tgz", + "integrity": "sha512-DZLEEqFWQFiyK6h5YIeynKx7JlvCYWL0cImfSRXZ9l4Sg2efkFGTuFf6vzXjK1cq6IYkU+Eg/JizXw+TD2vRNw==", + "deprecated": "Use @eslint/config-array instead", + "dev": true, + "license": "Apache-2.0", "dependencies": { - "@walletconnect/jsonrpc-utils": "^1.0.6", - "@walletconnect/safe-json": "^1.0.2", - "events": "^3.3.0", - "ws": "^7.5.1" + "@humanwhocodes/object-schema": "^2.0.3", + "debug": "^4.3.1", + "minimatch": "^3.0.5" + }, + "engines": { + "node": ">=10.10.0" } }, - "node_modules/@walletconnect/jsonrpc-ws-connection/node_modules/@walletconnect/safe-json": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/@walletconnect/safe-json/-/safe-json-1.0.2.tgz", - "integrity": "sha512-Ogb7I27kZ3LPC3ibn8ldyUr5544t3/STow9+lzz7Sfo808YD7SBWk7SAsdBFlYgP2zDRy2hS3sKRcuSRM0OTmA==", + "node_modules/eslint/node_modules/globals": { + "version": "13.24.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-13.24.0.tgz", + "integrity": "sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==", + "dev": true, "license": "MIT", "dependencies": { - "tslib": "1.14.1" + "type-fest": "^0.20.2" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/@walletconnect/jsonrpc-ws-connection/node_modules/tslib": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", - "license": "0BSD" - }, - "node_modules/@walletconnect/jsonrpc-ws-connection/node_modules/ws": { - "version": "7.5.10", - "resolved": "https://registry.npmjs.org/ws/-/ws-7.5.10.tgz", - "integrity": "sha512-+dbF1tHwZpXcbOJdVOkzLDxZP1ailvSxM6ZweXTegylPny803bFhA+vqBYw4s31NSAk4S2Qz+AKXK9a4wkdjcQ==", - "license": "MIT", + "node_modules/espree": { + "version": "9.6.1", + "resolved": "https://registry.npmjs.org/espree/-/espree-9.6.1.tgz", + "integrity": "sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "acorn": "^8.9.0", + "acorn-jsx": "^5.3.2", + "eslint-visitor-keys": "^3.4.1" + }, "engines": { - "node": ">=8.3.0" + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" }, - "peerDependencies": { - "bufferutil": "^4.0.1", - "utf-8-validate": "^5.0.2" + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/esprima": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", + "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", + "license": "BSD-2-Clause", + "bin": { + "esparse": "bin/esparse.js", + "esvalidate": "bin/esvalidate.js" }, - "peerDependenciesMeta": { - "bufferutil": { - "optional": true - }, - "utf-8-validate": { - "optional": true - } + "engines": { + "node": ">=4" } }, - "node_modules/@walletconnect/logger": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/@walletconnect/logger/-/logger-2.1.2.tgz", - "integrity": "sha512-aAb28I3S6pYXZHQm5ESB+V6rDqIYfsnHaQyzFbwUUBFY4H0OXx/YtTl8lvhUNhMMfb9UxbwEBS253TlXUYJWSw==", - "license": "MIT", + "node_modules/esquery": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.6.0.tgz", + "integrity": "sha512-ca9pw9fomFcKPvFLXhBKUK90ZvGibiGOvRJNbjljY7s7uq/5YO4BOzcYtJqExdx99rF6aAcnRxHmcUHcz6sQsg==", + "dev": true, + "license": "BSD-3-Clause", "dependencies": { - "@walletconnect/safe-json": "^1.0.2", - "pino": "7.11.0" + "estraverse": "^5.1.0" + }, + "engines": { + "node": ">=0.10" } }, - "node_modules/@walletconnect/logger/node_modules/@walletconnect/safe-json": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/@walletconnect/safe-json/-/safe-json-1.0.2.tgz", - "integrity": "sha512-Ogb7I27kZ3LPC3ibn8ldyUr5544t3/STow9+lzz7Sfo808YD7SBWk7SAsdBFlYgP2zDRy2hS3sKRcuSRM0OTmA==", - "license": "MIT", + "node_modules/esrecurse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", + "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", + "license": "BSD-2-Clause", "dependencies": { - "tslib": "1.14.1" + "estraverse": "^5.2.0" + }, + "engines": { + "node": ">=4.0" } }, - "node_modules/@walletconnect/logger/node_modules/on-exit-leak-free": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/on-exit-leak-free/-/on-exit-leak-free-0.2.0.tgz", - "integrity": "sha512-dqaz3u44QbRXQooZLTUKU41ZrzYrcvLISVgbrzbyCMxpmSLJvZ3ZamIJIZ29P6OhZIkNIQKosdeM6t1LYbA9hg==", - "license": "MIT" + "node_modules/estraverse": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", + "license": "BSD-2-Clause", + "engines": { + "node": ">=4.0" + } }, - "node_modules/@walletconnect/logger/node_modules/pino": { - "version": "7.11.0", - "resolved": "https://registry.npmjs.org/pino/-/pino-7.11.0.tgz", - "integrity": "sha512-dMACeu63HtRLmCG8VKdy4cShCPKaYDR4youZqoSWLxl5Gu99HUw8bw75thbPv9Nip+H+QYX8o3ZJbTdVZZ2TVg==", + "node_modules/estree-util-attach-comments": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/estree-util-attach-comments/-/estree-util-attach-comments-3.0.0.tgz", + "integrity": "sha512-cKUwm/HUcTDsYh/9FgnuFqpfquUbwIqwKM26BVCGDPVgvaCl/nDCCjUfiLlx6lsEZ3Z4RFxNbOQ60pkaEwFxGw==", "license": "MIT", "dependencies": { - "atomic-sleep": "^1.0.0", - "fast-redact": "^3.0.0", - "on-exit-leak-free": "^0.2.0", - "pino-abstract-transport": "v0.5.0", - "pino-std-serializers": "^4.0.0", - "process-warning": "^1.0.0", - "quick-format-unescaped": "^4.0.3", - "real-require": "^0.1.0", - "safe-stable-stringify": "^2.1.0", - "sonic-boom": "^2.2.1", - "thread-stream": "^0.15.1" + "@types/estree": "^1.0.0" }, - "bin": { - "pino": "bin.js" + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/@walletconnect/logger/node_modules/pino-abstract-transport": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/pino-abstract-transport/-/pino-abstract-transport-0.5.0.tgz", - "integrity": "sha512-+KAgmVeqXYbTtU2FScx1XS3kNyfZ5TrXY07V96QnUSFqo2gAqlvmaxH67Lj7SWazqsMabf+58ctdTcBgnOLUOQ==", + "node_modules/estree-util-build-jsx": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/estree-util-build-jsx/-/estree-util-build-jsx-3.0.1.tgz", + "integrity": "sha512-8U5eiL6BTrPxp/CHbs2yMgP8ftMhR5ww1eIKoWRMlqvltHF8fZn5LRDvTKuxD3DUn+shRbLGqXemcP51oFCsGQ==", "license": "MIT", "dependencies": { - "duplexify": "^4.1.2", - "split2": "^4.0.0" + "@types/estree-jsx": "^1.0.0", + "devlop": "^1.0.0", + "estree-util-is-identifier-name": "^3.0.0", + "estree-walker": "^3.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/@walletconnect/logger/node_modules/pino-std-serializers": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/pino-std-serializers/-/pino-std-serializers-4.0.0.tgz", - "integrity": "sha512-cK0pekc1Kjy5w9V2/n+8MkZwusa6EyyxfeQCB799CQRhRt/CqYKiWs5adeu8Shve2ZNffvfC/7J64A2PJo1W/Q==", - "license": "MIT" - }, - "node_modules/@walletconnect/logger/node_modules/process-warning": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/process-warning/-/process-warning-1.0.0.tgz", - "integrity": "sha512-du4wfLyj4yCZq1VupnVSZmRsPJsNuxoDQFdCFHLaYiEbFBD7QE0a+I4D7hOxrVnh78QE/YipFAj9lXHiXocV+Q==", - "license": "MIT" + "node_modules/estree-util-build-jsx/node_modules/estree-walker": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-3.0.3.tgz", + "integrity": "sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g==", + "license": "MIT", + "dependencies": { + "@types/estree": "^1.0.0" + } }, - "node_modules/@walletconnect/logger/node_modules/real-require": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/real-require/-/real-require-0.1.0.tgz", - "integrity": "sha512-r/H9MzAWtrv8aSVjPCMFpDMl5q66GqtmmRkRjpHTsp4zBAa+snZyiQNlMONiUmEJcsnaw0wCauJ2GWODr/aFkg==", + "node_modules/estree-util-is-identifier-name": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/estree-util-is-identifier-name/-/estree-util-is-identifier-name-3.0.0.tgz", + "integrity": "sha512-hFtqIDZTIUZ9BXLb8y4pYGyk6+wekIivNVTcmvk8NoOh+VeRn5y6cEHzbURrWbfp1fIqdVipilzj+lfaadNZmg==", "license": "MIT", - "engines": { - "node": ">= 12.13.0" + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/@walletconnect/logger/node_modules/sonic-boom": { - "version": "2.8.0", - "resolved": "https://registry.npmjs.org/sonic-boom/-/sonic-boom-2.8.0.tgz", - "integrity": "sha512-kuonw1YOYYNOve5iHdSahXPOK49GqwA+LZhI6Wz/l0rP57iKyXXIHaRagOBHAPmGwJC6od2Z9zgvZ5loSgMlVg==", + "node_modules/estree-util-scope": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/estree-util-scope/-/estree-util-scope-1.0.0.tgz", + "integrity": "sha512-2CAASclonf+JFWBNJPndcOpA8EMJwa0Q8LUFJEKqXLW6+qBvbFZuF5gItbQOs/umBUkjviCSDCbBwU2cXbmrhQ==", "license": "MIT", "dependencies": { - "atomic-sleep": "^1.0.0" + "@types/estree": "^1.0.0", + "devlop": "^1.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/@walletconnect/logger/node_modules/thread-stream": { - "version": "0.15.2", - "resolved": "https://registry.npmjs.org/thread-stream/-/thread-stream-0.15.2.tgz", - "integrity": "sha512-UkEhKIg2pD+fjkHQKyJO3yoIvAP3N6RlNFt2dUhcS1FGvCD1cQa1M/PGknCLFIyZdtJOWQjejp7bdNqmN7zwdA==", + "node_modules/estree-util-to-js": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/estree-util-to-js/-/estree-util-to-js-2.0.0.tgz", + "integrity": "sha512-WDF+xj5rRWmD5tj6bIqRi6CkLIXbbNQUcxQHzGysQzvHmdYG2G7p/Tf0J0gpxGgkeMZNTIjT/AoSvC9Xehcgdg==", "license": "MIT", "dependencies": { - "real-require": "^0.1.0" + "@types/estree-jsx": "^1.0.0", + "astring": "^1.8.0", + "source-map": "^0.7.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/@walletconnect/logger/node_modules/tslib": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", - "license": "0BSD" - }, - "node_modules/@walletconnect/mobile-registry": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/@walletconnect/mobile-registry/-/mobile-registry-1.4.0.tgz", - "integrity": "sha512-ZtKRio4uCZ1JUF7LIdecmZt7FOLnX72RPSY7aUVu7mj7CSfxDwUn6gBuK6WGtH+NZCldBqDl5DenI5fFSvkKYw==", - "deprecated": "Deprecated in favor of dynamic registry available from: https://github.com/walletconnect/walletconnect-registry", - "license": "MIT" + "node_modules/estree-util-to-js/node_modules/source-map": { + "version": "0.7.6", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.6.tgz", + "integrity": "sha512-i5uvt8C3ikiWeNZSVZNWcfZPItFQOsYTUAOkcUPGd8DqDy1uOUikjt5dG+uRlwyvR108Fb9DOd4GvXfT0N2/uQ==", + "license": "BSD-3-Clause", + "engines": { + "node": ">= 12" + } }, - "node_modules/@walletconnect/modal": { - "version": "2.7.0", - "resolved": "https://registry.npmjs.org/@walletconnect/modal/-/modal-2.7.0.tgz", - "integrity": "sha512-RQVt58oJ+rwqnPcIvRFeMGKuXb9qkgSmwz4noF8JZGUym3gUAzVs+uW2NQ1Owm9XOJAV+sANrtJ+VoVq1ftElw==", - "deprecated": "Please follow the migration guide on https://docs.reown.com/appkit/upgrade/wcm", - "license": "Apache-2.0", + "node_modules/estree-util-value-to-estree": { + "version": "3.5.0", + "resolved": "https://registry.npmjs.org/estree-util-value-to-estree/-/estree-util-value-to-estree-3.5.0.tgz", + "integrity": "sha512-aMV56R27Gv3QmfmF1MY12GWkGzzeAezAX+UplqHVASfjc9wNzI/X6hC0S9oxq61WT4aQesLGslWP9tKk6ghRZQ==", + "license": "MIT", "dependencies": { - "@walletconnect/modal-core": "2.7.0", - "@walletconnect/modal-ui": "2.7.0" + "@types/estree": "^1.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/remcohaszing" } }, - "node_modules/@walletconnect/modal-core": { - "version": "2.7.0", - "resolved": "https://registry.npmjs.org/@walletconnect/modal-core/-/modal-core-2.7.0.tgz", - "integrity": "sha512-oyMIfdlNdpyKF2kTJowTixZSo0PGlCJRdssUN/EZdA6H6v03hZnf09JnwpljZNfir2M65Dvjm/15nGrDQnlxSA==", - "license": "Apache-2.0", + "node_modules/estree-util-visit": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/estree-util-visit/-/estree-util-visit-2.0.0.tgz", + "integrity": "sha512-m5KgiH85xAhhW8Wta0vShLcUvOsh3LLPI2YVwcbio1l7E09NTLL1EyMZFM1OyWowoH0skScNbhOPl4kcBgzTww==", + "license": "MIT", "dependencies": { - "valtio": "1.11.2" + "@types/estree-jsx": "^1.0.0", + "@types/unist": "^3.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/@walletconnect/modal-ui": { - "version": "2.7.0", - "resolved": "https://registry.npmjs.org/@walletconnect/modal-ui/-/modal-ui-2.7.0.tgz", - "integrity": "sha512-gERYvU7D7K1ANCN/8vUgsE0d2hnRemfAFZ2novm9aZBg7TEd/4EgB+AqbJ+1dc7GhOL6dazckVq78TgccHb7mQ==", - "license": "Apache-2.0", - "dependencies": { - "@walletconnect/modal-core": "2.7.0", - "lit": "2.8.0", - "motion": "10.16.2", - "qrcode": "1.5.3" + "node_modules/estree-walker": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-2.0.2.tgz", + "integrity": "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==", + "dev": true, + "license": "MIT" + }, + "node_modules/esutils": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", + "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", + "license": "BSD-2-Clause", + "engines": { + "node": ">=0.10.0" } }, - "node_modules/@walletconnect/qrcode-modal": { - "version": "1.8.0", - "resolved": "https://registry.npmjs.org/@walletconnect/qrcode-modal/-/qrcode-modal-1.8.0.tgz", - "integrity": "sha512-BueaFefaAi8mawE45eUtztg3ZFbsAH4DDXh1UNwdUlsvFMjqcYzLUG0xZvDd6z2eOpbgDg2N3bl6gF0KONj1dg==", - "deprecated": "WalletConnect's v1 SDKs are now deprecated. Please upgrade to a v2 SDK. For details see: https://docs.walletconnect.com/", - "license": "Apache-2.0", - "dependencies": { - "@walletconnect/browser-utils": "^1.8.0", - "@walletconnect/mobile-registry": "^1.4.0", - "@walletconnect/types": "^1.8.0", - "copy-to-clipboard": "^3.3.1", - "preact": "10.4.1", - "qrcode": "1.4.4" + "node_modules/eta": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/eta/-/eta-2.2.0.tgz", + "integrity": "sha512-UVQ72Rqjy/ZKQalzV5dCCJP80GrmPrMxh6NlNf+erV6ObL0ZFkhCstWRawS85z3smdr3d2wXPsZEY7rDPfGd2g==", + "license": "MIT", + "engines": { + "node": ">=6.0.0" + }, + "funding": { + "url": "https://github.com/eta-dev/eta?sponsor=1" } }, - "node_modules/@walletconnect/qrcode-modal/node_modules/@walletconnect/types": { - "version": "1.8.0", - "resolved": "https://registry.npmjs.org/@walletconnect/types/-/types-1.8.0.tgz", - "integrity": "sha512-Cn+3I0V0vT9ghMuzh1KzZvCkiAxTq+1TR2eSqw5E5AVWfmCtECFkVZBP6uUJZ8YjwLqXheI+rnjqPy7sVM4Fyg==", - "deprecated": "WalletConnect's v1 SDKs are now deprecated. Please upgrade to a v2 SDK. For details see: https://docs.walletconnect.com/", - "license": "Apache-2.0" - }, - "node_modules/@walletconnect/qrcode-modal/node_modules/ansi-regex": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.1.tgz", - "integrity": "sha512-ILlv4k/3f6vfQ4OoP2AGvirOktlQ98ZEL1k9FaQjxa3L1abBgbuTDAdPOpvbGncC0BTVQrl+OM8xZGK6tWXt7g==", + "node_modules/etag": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", + "integrity": "sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==", "license": "MIT", "engines": { - "node": ">=6" + "node": ">= 0.6" } }, - "node_modules/@walletconnect/qrcode-modal/node_modules/ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "node_modules/eth-gas-reporter": { + "version": "0.2.27", + "resolved": "https://registry.npmjs.org/eth-gas-reporter/-/eth-gas-reporter-0.2.27.tgz", + "integrity": "sha512-femhvoAM7wL0GcI8ozTdxfuBtBFJ9qsyIAsmKVjlWAHUbdnnXHt+lKzz/kmldM5lA9jLuNHGwuIxorNpLbR1Zw==", + "dev": true, "license": "MIT", "dependencies": { - "color-convert": "^1.9.0" + "@solidity-parser/parser": "^0.14.0", + "axios": "^1.5.1", + "cli-table3": "^0.5.0", + "colors": "1.4.0", + "ethereum-cryptography": "^1.0.3", + "ethers": "^5.7.2", + "fs-readdir-recursive": "^1.1.0", + "lodash": "^4.17.14", + "markdown-table": "^1.1.3", + "mocha": "^10.2.0", + "req-cwd": "^2.0.0", + "sha1": "^1.1.1", + "sync-request": "^6.0.0" }, - "engines": { - "node": ">=4" + "peerDependencies": { + "@codechecks/client": "^0.1.0" + }, + "peerDependenciesMeta": { + "@codechecks/client": { + "optional": true + } } }, - "node_modules/@walletconnect/qrcode-modal/node_modules/buffer": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", - "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==", + "node_modules/eth-gas-reporter/node_modules/@noble/hashes": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.2.0.tgz", + "integrity": "sha512-FZfhjEDbT5GRswV3C6uvLPHMiVD6lQBmpoX5+eSiPaMTXte/IKqI5dykDxzZB/WBeK/CDuQRBWarPdi3FNY2zQ==", + "dev": true, "funding": [ { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" + "type": "individual", + "url": "https://paulmillr.com/funding/" } ], + "license": "MIT" + }, + "node_modules/eth-gas-reporter/node_modules/@scure/base": { + "version": "1.1.9", + "resolved": "https://registry.npmjs.org/@scure/base/-/base-1.1.9.tgz", + "integrity": "sha512-8YKhl8GHiNI/pU2VMaofa2Tor7PJRAjwQLBBuilkJ9L5+13yVbC7JO/wS7piioAvPSwR3JKM1IJ/u4xQzbcXKg==", + "dev": true, "license": "MIT", - "dependencies": { - "base64-js": "^1.3.1", - "ieee754": "^1.1.13" + "funding": { + "url": "https://paulmillr.com/funding/" } }, - "node_modules/@walletconnect/qrcode-modal/node_modules/cliui": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-5.0.0.tgz", - "integrity": "sha512-PYeGSEmmHM6zvoef2w8TPzlrnNpXIjTipYK780YswmIP9vjxmd6Y2a3CB2Ks6/AU8NHjZugXvo8w3oWM2qnwXA==", - "license": "ISC", + "node_modules/eth-gas-reporter/node_modules/@scure/bip32": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/@scure/bip32/-/bip32-1.1.5.tgz", + "integrity": "sha512-XyNh1rB0SkEqd3tXcXMi+Xe1fvg+kUIcoRIEujP1Jgv7DqW2r9lg3Ah0NkFaCs9sTkQAQA8kw7xiRXzENi9Rtw==", + "dev": true, + "funding": [ + { + "type": "individual", + "url": "https://paulmillr.com/funding/" + } + ], + "license": "MIT", "dependencies": { - "string-width": "^3.1.0", - "strip-ansi": "^5.2.0", - "wrap-ansi": "^5.1.0" + "@noble/hashes": "~1.2.0", + "@noble/secp256k1": "~1.7.0", + "@scure/base": "~1.1.0" } }, - "node_modules/@walletconnect/qrcode-modal/node_modules/color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "node_modules/eth-gas-reporter/node_modules/@scure/bip39": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@scure/bip39/-/bip39-1.1.1.tgz", + "integrity": "sha512-t+wDck2rVkh65Hmv280fYdVdY25J9YeEUIgn2LG1WM6gxFkGzcksoDiUkWVpVp3Oex9xGC68JU2dSbUfwZ2jPg==", + "dev": true, + "funding": [ + { + "type": "individual", + "url": "https://paulmillr.com/funding/" + } + ], "license": "MIT", "dependencies": { - "color-name": "1.1.3" + "@noble/hashes": "~1.2.0", + "@scure/base": "~1.1.0" } }, - "node_modules/@walletconnect/qrcode-modal/node_modules/color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", - "license": "MIT" - }, - "node_modules/@walletconnect/qrcode-modal/node_modules/decamelize": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", - "integrity": "sha512-z2S+W9X73hAUUki+N+9Za2lBlun89zigOyGrsax+KUQ6wKW4ZoWpEYBkGhQjwAjjDCkWxhY0VKEhk8wzY7F5cA==", + "node_modules/eth-gas-reporter/node_modules/ansi-regex": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.1.tgz", + "integrity": "sha512-+O9Jct8wf++lXxxFc4hc8LsjaSq0HFzzL7cVsw8pRDIPdjKD2mT4ytDZlLuSBZ4cLKZFXIrMGO7DbQCtMJJMKw==", + "dev": true, "license": "MIT", "engines": { - "node": ">=0.10.0" + "node": ">=4" } }, - "node_modules/@walletconnect/qrcode-modal/node_modules/emoji-regex": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-7.0.3.tgz", - "integrity": "sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==", - "license": "MIT" - }, - "node_modules/@walletconnect/qrcode-modal/node_modules/find-up": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", - "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", + "node_modules/eth-gas-reporter/node_modules/cli-table3": { + "version": "0.5.1", + "resolved": "https://registry.npmjs.org/cli-table3/-/cli-table3-0.5.1.tgz", + "integrity": "sha512-7Qg2Jrep1S/+Q3EceiZtQcDPWxhAvBw+ERf1162v4sikJrvojMHFqXt8QIVha8UlH9rgU0BeWPytZ9/TzYqlUw==", + "dev": true, "license": "MIT", "dependencies": { - "locate-path": "^3.0.0" + "object-assign": "^4.1.0", + "string-width": "^2.1.1" }, "engines": { "node": ">=6" + }, + "optionalDependencies": { + "colors": "^1.1.2" } }, - "node_modules/@walletconnect/qrcode-modal/node_modules/is-fullwidth-code-point": { + "node_modules/eth-gas-reporter/node_modules/ethereum-cryptography": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/ethereum-cryptography/-/ethereum-cryptography-1.2.0.tgz", + "integrity": "sha512-6yFQC9b5ug6/17CQpCyE3k9eKBMdhyVjzUy1WkiuY/E4vj/SXDBbCw8QEIaXqf0Mf2SnY6RmpDcwlUmBSS0EJw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@noble/hashes": "1.2.0", + "@noble/secp256k1": "1.7.1", + "@scure/bip32": "1.1.5", + "@scure/bip39": "1.1.1" + } + }, + "node_modules/eth-gas-reporter/node_modules/is-fullwidth-code-point": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", "integrity": "sha512-VHskAKYM8RfSFXwee5t5cbN5PZeq1Wrh6qd5bkyiXIf6UQcN6w/A0eXM9r6t8d+GYOh+o6ZhiEnb88LN/Y8m2w==", + "dev": true, "license": "MIT", "engines": { "node": ">=4" } }, - "node_modules/@walletconnect/qrcode-modal/node_modules/locate-path": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", - "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", + "node_modules/eth-gas-reporter/node_modules/string-width": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz", + "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==", + "dev": true, "license": "MIT", "dependencies": { - "p-locate": "^3.0.0", - "path-exists": "^3.0.0" + "is-fullwidth-code-point": "^2.0.0", + "strip-ansi": "^4.0.0" }, "engines": { - "node": ">=6" + "node": ">=4" } }, - "node_modules/@walletconnect/qrcode-modal/node_modules/p-locate": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz", - "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", + "node_modules/eth-gas-reporter/node_modules/strip-ansi": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", + "integrity": "sha512-4XaJ2zQdCzROZDivEVIDPkcQn8LMFSa8kj8Gxb/Lnwzv9A8VctNZ+lfivC/sV3ivW8ElJTERXZoPBRrZKkNKow==", + "dev": true, "license": "MIT", "dependencies": { - "p-limit": "^2.0.0" + "ansi-regex": "^3.0.0" }, - "engines": { - "node": ">=6" - } - }, - "node_modules/@walletconnect/qrcode-modal/node_modules/path-exists": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", - "integrity": "sha512-bpC7GYwiDYQ4wYLe+FA8lhRjhQCMcQGuSgGGqDkg/QerRWw9CmGRT0iSOVRSZJ29NMLZgIzqaljJ63oaL4NIJQ==", - "license": "MIT", "engines": { "node": ">=4" } }, - "node_modules/@walletconnect/qrcode-modal/node_modules/pngjs": { - "version": "3.4.0", - "resolved": "https://registry.npmjs.org/pngjs/-/pngjs-3.4.0.tgz", - "integrity": "sha512-NCrCHhWmnQklfH4MtJMRjZ2a8c80qXeMlQMv2uVp9ISJMTt562SbGd6n2oq0PaPgKm7Z6pL9E2UlLIhC+SHL3w==", - "license": "MIT", - "engines": { - "node": ">=4.0.0" - } - }, - "node_modules/@walletconnect/qrcode-modal/node_modules/qrcode": { - "version": "1.4.4", - "resolved": "https://registry.npmjs.org/qrcode/-/qrcode-1.4.4.tgz", - "integrity": "sha512-oLzEC5+NKFou9P0bMj5+v6Z40evexeE29Z9cummZXZ9QXyMr3lphkURzxjXgPJC5azpxcshoDWV1xE46z+/c3Q==", + "node_modules/eth-rpc-errors": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/eth-rpc-errors/-/eth-rpc-errors-4.0.3.tgz", + "integrity": "sha512-Z3ymjopaoft7JDoxZcEb3pwdGh7yiYMhOwm2doUt6ASXlMavpNlK6Cre0+IMl2VSGyEU9rkiperQhp5iRxn5Pg==", "license": "MIT", "dependencies": { - "buffer": "^5.4.3", - "buffer-alloc": "^1.2.0", - "buffer-from": "^1.1.1", - "dijkstrajs": "^1.0.1", - "isarray": "^2.0.1", - "pngjs": "^3.3.0", - "yargs": "^13.2.4" - }, - "bin": { - "qrcode": "bin/qrcode" - }, - "engines": { - "node": ">=4" + "fast-safe-stringify": "^2.0.6" } }, - "node_modules/@walletconnect/qrcode-modal/node_modules/string-width": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz", - "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==", + "node_modules/ethereum-bloom-filters": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/ethereum-bloom-filters/-/ethereum-bloom-filters-1.2.0.tgz", + "integrity": "sha512-28hyiE7HVsWubqhpVLVmZXFd4ITeHi+BUu05o9isf0GUpMtzBUi+8/gFrGaGYzvGAJQmJ3JKj77Mk9G98T84rA==", "license": "MIT", "dependencies": { - "emoji-regex": "^7.0.1", - "is-fullwidth-code-point": "^2.0.0", - "strip-ansi": "^5.1.0" - }, - "engines": { - "node": ">=6" + "@noble/hashes": "^1.4.0" } }, - "node_modules/@walletconnect/qrcode-modal/node_modules/strip-ansi": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", - "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", + "node_modules/ethereum-cryptography": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/ethereum-cryptography/-/ethereum-cryptography-2.2.1.tgz", + "integrity": "sha512-r/W8lkHSiTLxUxW8Rf3u4HGB0xQweG2RyETjywylKZSzLWoWAijRz8WCuOtJ6wah+avllXBqZuk29HCCvhEIRg==", "license": "MIT", "dependencies": { - "ansi-regex": "^4.1.0" - }, - "engines": { - "node": ">=6" + "@noble/curves": "1.4.2", + "@noble/hashes": "1.4.0", + "@scure/bip32": "1.4.0", + "@scure/bip39": "1.3.0" } }, - "node_modules/@walletconnect/qrcode-modal/node_modules/wrap-ansi": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-5.1.0.tgz", - "integrity": "sha512-QC1/iN/2/RPVJ5jYK8BGttj5z83LmSKmvbvrXPNCLZSEb32KKVDJDl/MOt2N01qU2H/FkzEa9PKto1BqDjtd7Q==", + "node_modules/ethereum-cryptography/node_modules/@noble/curves": { + "version": "1.4.2", + "resolved": "https://registry.npmjs.org/@noble/curves/-/curves-1.4.2.tgz", + "integrity": "sha512-TavHr8qycMChk8UwMld0ZDRvatedkzWfH8IiaeGCfymOP5i0hSCozz9vHOL0nkwk7HRMlFnAiKpS2jrUmSybcw==", "license": "MIT", "dependencies": { - "ansi-styles": "^3.2.0", - "string-width": "^3.0.0", - "strip-ansi": "^5.0.0" + "@noble/hashes": "1.4.0" }, - "engines": { - "node": ">=6" + "funding": { + "url": "https://paulmillr.com/funding/" } }, - "node_modules/@walletconnect/qrcode-modal/node_modules/y18n": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.3.tgz", - "integrity": "sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ==", - "license": "ISC" - }, - "node_modules/@walletconnect/qrcode-modal/node_modules/yargs": { - "version": "13.3.2", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-13.3.2.tgz", - "integrity": "sha512-AX3Zw5iPruN5ie6xGRIDgqkT+ZhnRlZMLMHAs8tg7nRruy2Nb+i5o9bwghAogtM08q1dpr2LVoS8KSTMYpWXUw==", + "node_modules/ethereum-cryptography/node_modules/@noble/hashes": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.4.0.tgz", + "integrity": "sha512-V1JJ1WTRUqHHrOSh597hURcMqVKVGL/ea3kv0gSnEdsEZ0/+VyPghM1lMNGc00z7CIQorSvbKpuJkxvuHbvdbg==", "license": "MIT", - "dependencies": { - "cliui": "^5.0.0", - "find-up": "^3.0.0", - "get-caller-file": "^2.0.1", - "require-directory": "^2.1.1", - "require-main-filename": "^2.0.0", - "set-blocking": "^2.0.0", - "string-width": "^3.0.0", - "which-module": "^2.0.0", - "y18n": "^4.0.0", - "yargs-parser": "^13.1.2" + "engines": { + "node": ">= 16" + }, + "funding": { + "url": "https://paulmillr.com/funding/" } }, - "node_modules/@walletconnect/qrcode-modal/node_modules/yargs-parser": { - "version": "13.1.2", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-13.1.2.tgz", - "integrity": "sha512-3lbsNRf/j+A4QuSZfDRA7HRSfWrzO0YjqTJd5kjAq37Zep1CEgaYmrH9Q3GwPiB9cHyd1Y1UwggGhJGoxipbzg==", - "license": "ISC", + "node_modules/ethereumjs-util": { + "version": "7.1.5", + "resolved": "https://registry.npmjs.org/ethereumjs-util/-/ethereumjs-util-7.1.5.tgz", + "integrity": "sha512-SDl5kKrQAudFBUe5OJM9Ac6WmMyYmXX/6sTmLZ3ffG2eY6ZIGBes3pEDxNN6V72WyOw4CPD5RomKdsa8DAAwLg==", + "license": "MPL-2.0", "dependencies": { - "camelcase": "^5.0.0", - "decamelize": "^1.2.0" + "@types/bn.js": "^5.1.0", + "bn.js": "^5.1.2", + "create-hash": "^1.1.2", + "ethereum-cryptography": "^0.1.3", + "rlp": "^2.2.4" + }, + "engines": { + "node": ">=10.0.0" } }, - "node_modules/@walletconnect/relay-api": { - "version": "1.0.11", - "resolved": "https://registry.npmjs.org/@walletconnect/relay-api/-/relay-api-1.0.11.tgz", - "integrity": "sha512-tLPErkze/HmC9aCmdZOhtVmYZq1wKfWTJtygQHoWtgg722Jd4homo54Cs4ak2RUFUZIGO2RsOpIcWipaua5D5Q==", + "node_modules/ethereumjs-util/node_modules/ethereum-cryptography": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/ethereum-cryptography/-/ethereum-cryptography-0.1.3.tgz", + "integrity": "sha512-w8/4x1SGGzc+tO97TASLja6SLd3fRIK2tLVcV2Gx4IB21hE19atll5Cq9o3d0ZmAYC/8aw0ipieTSiekAea4SQ==", "license": "MIT", "dependencies": { - "@walletconnect/jsonrpc-types": "^1.0.2" + "@types/pbkdf2": "^3.0.0", + "@types/secp256k1": "^4.0.1", + "blakejs": "^1.1.0", + "browserify-aes": "^1.2.0", + "bs58check": "^2.1.2", + "create-hash": "^1.2.0", + "create-hmac": "^1.1.7", + "hash.js": "^1.1.7", + "keccak": "^3.0.0", + "pbkdf2": "^3.0.17", + "randombytes": "^2.1.0", + "safe-buffer": "^5.1.2", + "scrypt-js": "^3.0.0", + "secp256k1": "^4.0.1", + "setimmediate": "^1.0.5" } }, - "node_modules/@walletconnect/relay-auth": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@walletconnect/relay-auth/-/relay-auth-1.1.0.tgz", - "integrity": "sha512-qFw+a9uRz26jRCDgL7Q5TA9qYIgcNY8jpJzI1zAWNZ8i7mQjaijRnWFKsCHAU9CyGjvt6RKrRXyFtFOpWTVmCQ==", + "node_modules/ethers": { + "version": "5.8.0", + "resolved": "https://registry.npmjs.org/ethers/-/ethers-5.8.0.tgz", + "integrity": "sha512-DUq+7fHrCg1aPDFCHx6UIPb3nmt2XMpM7Y/g2gLhsl3lIBqeAfOJIl1qEvRf2uq3BiKxmh6Fh5pfp2ieyek7Kg==", + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], "license": "MIT", + "peer": true, "dependencies": { - "@noble/curves": "1.8.0", - "@noble/hashes": "1.7.0", - "@walletconnect/safe-json": "^1.0.1", - "@walletconnect/time": "^1.0.2", - "uint8arrays": "^3.0.0" + "@ethersproject/abi": "5.8.0", + "@ethersproject/abstract-provider": "5.8.0", + "@ethersproject/abstract-signer": "5.8.0", + "@ethersproject/address": "5.8.0", + "@ethersproject/base64": "5.8.0", + "@ethersproject/basex": "5.8.0", + "@ethersproject/bignumber": "5.8.0", + "@ethersproject/bytes": "5.8.0", + "@ethersproject/constants": "5.8.0", + "@ethersproject/contracts": "5.8.0", + "@ethersproject/hash": "5.8.0", + "@ethersproject/hdnode": "5.8.0", + "@ethersproject/json-wallets": "5.8.0", + "@ethersproject/keccak256": "5.8.0", + "@ethersproject/logger": "5.8.0", + "@ethersproject/networks": "5.8.0", + "@ethersproject/pbkdf2": "5.8.0", + "@ethersproject/properties": "5.8.0", + "@ethersproject/providers": "5.8.0", + "@ethersproject/random": "5.8.0", + "@ethersproject/rlp": "5.8.0", + "@ethersproject/sha2": "5.8.0", + "@ethersproject/signing-key": "5.8.0", + "@ethersproject/solidity": "5.8.0", + "@ethersproject/strings": "5.8.0", + "@ethersproject/transactions": "5.8.0", + "@ethersproject/units": "5.8.0", + "@ethersproject/wallet": "5.8.0", + "@ethersproject/web": "5.8.0", + "@ethersproject/wordlists": "5.8.0" } }, - "node_modules/@walletconnect/relay-auth/node_modules/@noble/curves": { - "version": "1.8.0", - "resolved": "https://registry.npmjs.org/@noble/curves/-/curves-1.8.0.tgz", - "integrity": "sha512-j84kjAbzEnQHaSIhRPUmB3/eVXu2k3dKPl2LOrR8fSOIL+89U+7lV117EWHtq/GHM3ReGHM46iRBdZfpc4HRUQ==", + "node_modules/ethjs-unit": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/ethjs-unit/-/ethjs-unit-0.1.6.tgz", + "integrity": "sha512-/Sn9Y0oKl0uqQuvgFk/zQgR7aw1g36qX/jzSQ5lSwlO0GigPymk4eGQfeNTD03w1dPOqfz8V77Cy43jH56pagw==", "license": "MIT", "dependencies": { - "@noble/hashes": "1.7.0" + "bn.js": "4.11.6", + "number-to-bn": "1.7.0" }, "engines": { - "node": "^14.21.3 || >=16" - }, - "funding": { - "url": "https://paulmillr.com/funding/" + "node": ">=6.5.0", + "npm": ">=3" } }, - "node_modules/@walletconnect/relay-auth/node_modules/@noble/hashes": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.7.0.tgz", - "integrity": "sha512-HXydb0DgzTpDPwbVeDGCG1gIu7X6+AuU6Zl6av/E/KG8LMsvPntvq+w17CHRpKBmN6Ybdrt1eP3k4cj8DJa78w==", - "license": "MIT", - "engines": { - "node": "^14.21.3 || >=16" - }, - "funding": { - "url": "https://paulmillr.com/funding/" - } + "node_modules/ethjs-unit/node_modules/bn.js": { + "version": "4.11.6", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.6.tgz", + "integrity": "sha512-XWwnNNFCuuSQ0m3r3C4LE3EiORltHd9M05pq6FOlVeiophzRbMo50Sbz1ehl8K3Z+jw9+vmgnXefY1hz8X+2wA==", + "license": "MIT" }, - "node_modules/@walletconnect/relay-auth/node_modules/@walletconnect/safe-json": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/@walletconnect/safe-json/-/safe-json-1.0.2.tgz", - "integrity": "sha512-Ogb7I27kZ3LPC3ibn8ldyUr5544t3/STow9+lzz7Sfo808YD7SBWk7SAsdBFlYgP2zDRy2hS3sKRcuSRM0OTmA==", - "license": "MIT", + "node_modules/ethr-did-resolver": { + "version": "11.0.5", + "resolved": "https://registry.npmjs.org/ethr-did-resolver/-/ethr-did-resolver-11.0.5.tgz", + "integrity": "sha512-fTQ+4g4aRDyU1hzlPH6FYgpoOd7fM8ZV9+3JCl2PqSDnS8Iz9V+y/9KOjLzqhY6LKhMWW5hIbaGypwOPWj15JA==", + "dev": true, + "license": "Apache-2.0", "dependencies": { - "tslib": "1.14.1" + "did-resolver": "^4.1.0", + "ethers": "^6.8.1" } }, - "node_modules/@walletconnect/relay-auth/node_modules/tslib": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", - "license": "0BSD" - }, - "node_modules/@walletconnect/safe-json": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/@walletconnect/safe-json/-/safe-json-1.0.0.tgz", - "integrity": "sha512-QJzp/S/86sUAgWY6eh5MKYmSfZaRpIlmCJdi5uG4DJlKkZrHEF7ye7gA+VtbVzvTtpM/gRwO2plQuiooIeXjfg==", + "node_modules/ethr-did-resolver/node_modules/@adraffy/ens-normalize": { + "version": "1.10.1", + "resolved": "https://registry.npmjs.org/@adraffy/ens-normalize/-/ens-normalize-1.10.1.tgz", + "integrity": "sha512-96Z2IP3mYmF1Xg2cDm8f1gWGf/HUVedQ3FMifV4kG/PQ4yEP51xDtRAEfhVNt5f/uzpNkZHwWQuUcu6D6K+Ekw==", + "dev": true, "license": "MIT" }, - "node_modules/@walletconnect/sign-client": { - "version": "2.17.1", - "resolved": "https://registry.npmjs.org/@walletconnect/sign-client/-/sign-client-2.17.1.tgz", - "integrity": "sha512-6rLw6YNy0smslH9wrFTbNiYrGsL3DrOsS5FcuU4gIN6oh8pGYOFZ5FiSyTTroc5tngOk3/Sd7dlGY9S7O4nveg==", - "deprecated": "Reliability and performance improvements. See: https://github.com/WalletConnect/walletconnect-monorepo/releases", - "license": "Apache-2.0", + "node_modules/ethr-did-resolver/node_modules/@noble/curves": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@noble/curves/-/curves-1.2.0.tgz", + "integrity": "sha512-oYclrNgRaM9SsBUBVbb8M6DTV7ZHRTKugureoYEncY5c65HOmRzvSiTE3y5CYaPYJA/GVkrhXEoF0M3Ya9PMnw==", + "dev": true, + "license": "MIT", "dependencies": { - "@walletconnect/core": "2.17.1", - "@walletconnect/events": "1.0.1", - "@walletconnect/heartbeat": "1.2.2", - "@walletconnect/jsonrpc-utils": "1.0.8", - "@walletconnect/logger": "2.1.2", - "@walletconnect/time": "1.0.2", - "@walletconnect/types": "2.17.1", - "@walletconnect/utils": "2.17.1", - "events": "3.3.0" + "@noble/hashes": "1.3.2" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + } + }, + "node_modules/ethr-did-resolver/node_modules/@noble/hashes": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.3.2.tgz", + "integrity": "sha512-MVC8EAQp7MvEcm30KWENFjgR+Mkmf+D189XJTkFIlwohU5hcBbn1ZkKq7KVTi2Hme3PMGF390DaL52beVrIihQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 16" + }, + "funding": { + "url": "https://paulmillr.com/funding/" } }, - "node_modules/@walletconnect/sign-client/node_modules/@ethersproject/hash": { - "version": "5.7.0", - "resolved": "https://registry.npmjs.org/@ethersproject/hash/-/hash-5.7.0.tgz", - "integrity": "sha512-qX5WrQfnah1EFnO5zJv1v46a8HW0+E5xuBBDTwMFZLuVTx0tbU2kkx15NqdjxecrLGatQN9FGQKpb1FKdHCt+g==", - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], + "node_modules/ethr-did-resolver/node_modules/@types/node": { + "version": "22.7.5", + "resolved": "https://registry.npmjs.org/@types/node/-/node-22.7.5.tgz", + "integrity": "sha512-jML7s2NAzMWc//QSJ1a3prpk78cOPchGvXJsC3C6R6PSMoooztvRVQEz89gmBTBY1SPMaqo5teB4uNHPdetShQ==", + "dev": true, "license": "MIT", "dependencies": { - "@ethersproject/abstract-signer": "^5.7.0", - "@ethersproject/address": "^5.7.0", - "@ethersproject/base64": "^5.7.0", - "@ethersproject/bignumber": "^5.7.0", - "@ethersproject/bytes": "^5.7.0", - "@ethersproject/keccak256": "^5.7.0", - "@ethersproject/logger": "^5.7.0", - "@ethersproject/properties": "^5.7.0", - "@ethersproject/strings": "^5.7.0" + "undici-types": "~6.19.2" } }, - "node_modules/@walletconnect/sign-client/node_modules/@ethersproject/transactions": { - "version": "5.7.0", - "resolved": "https://registry.npmjs.org/@ethersproject/transactions/-/transactions-5.7.0.tgz", - "integrity": "sha512-kmcNicCp1lp8qanMTC3RIikGgoJ80ztTyvtsFvCYpSCfkjhD0jZ2LOrnbcuxuToLIUYYf+4XwD1rP+B/erDIhQ==", + "node_modules/ethr-did-resolver/node_modules/aes-js": { + "version": "4.0.0-beta.5", + "resolved": "https://registry.npmjs.org/aes-js/-/aes-js-4.0.0-beta.5.tgz", + "integrity": "sha512-G965FqalsNyrPqgEGON7nIx1e/OVENSgiEIzyC63haUMuvNnwIgIjMs52hlTCKhkBny7A2ORNlfY9Zu+jmGk1Q==", + "dev": true, + "license": "MIT" + }, + "node_modules/ethr-did-resolver/node_modules/ethers": { + "version": "6.15.0", + "resolved": "https://registry.npmjs.org/ethers/-/ethers-6.15.0.tgz", + "integrity": "sha512-Kf/3ZW54L4UT0pZtsY/rf+EkBU7Qi5nnhonjUb8yTXcxH3cdcWrV2cRyk0Xk/4jK6OoHhxxZHriyhje20If2hQ==", + "dev": true, "funding": [ { "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + "url": "https://github.com/sponsors/ethers-io/" }, { "type": "individual", @@ -18410,1922 +34635,1651 @@ ], "license": "MIT", "dependencies": { - "@ethersproject/address": "^5.7.0", - "@ethersproject/bignumber": "^5.7.0", - "@ethersproject/bytes": "^5.7.0", - "@ethersproject/constants": "^5.7.0", - "@ethersproject/keccak256": "^5.7.0", - "@ethersproject/logger": "^5.7.0", - "@ethersproject/properties": "^5.7.0", - "@ethersproject/rlp": "^5.7.0", - "@ethersproject/signing-key": "^5.7.0" + "@adraffy/ens-normalize": "1.10.1", + "@noble/curves": "1.2.0", + "@noble/hashes": "1.3.2", + "@types/node": "22.7.5", + "aes-js": "4.0.0-beta.5", + "tslib": "2.7.0", + "ws": "8.17.1" + }, + "engines": { + "node": ">=14.0.0" } }, - "node_modules/@walletconnect/sign-client/node_modules/@stablelib/random": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/@stablelib/random/-/random-1.0.2.tgz", - "integrity": "sha512-rIsE83Xpb7clHPVRlBj8qNe5L8ISQOzjghYQm/dZ7VaM2KHYwMW5adjQjrzTZCchFnNCNhkwtnOBa9HTMJCI8w==", - "license": "MIT", - "dependencies": { - "@stablelib/binary": "^1.0.1", - "@stablelib/wipe": "^1.0.1" - } + "node_modules/ethr-did-resolver/node_modules/tslib": { + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.7.0.tgz", + "integrity": "sha512-gLXCKdN1/j47AiHiOkJN69hJmcbGTHI0ImLmbYLHykhgeN0jVGola9yVjFgzCUklsZQMW55o+dW7IXv3RCXDzA==", + "dev": true, + "license": "0BSD" }, - "node_modules/@walletconnect/sign-client/node_modules/@walletconnect/keyvaluestorage": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/@walletconnect/keyvaluestorage/-/keyvaluestorage-1.1.1.tgz", - "integrity": "sha512-V7ZQq2+mSxAq7MrRqDxanTzu2RcElfK1PfNYiaVnJgJ7Q7G7hTVwF8voIBx92qsRyGHZihrwNPHuZd1aKkd0rA==", + "node_modules/ethr-did-resolver/node_modules/undici-types": { + "version": "6.19.8", + "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.19.8.tgz", + "integrity": "sha512-ve2KP6f/JnbPBFyobGHuerC9g1FYGn/F8n1LWTwNxCEzd6IfqTwUQcNXgEtmmQ6DlRrC1hrSrBnCZPokRrDHjw==", + "dev": true, + "license": "MIT" + }, + "node_modules/ethr-did-resolver/node_modules/ws": { + "version": "8.17.1", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.17.1.tgz", + "integrity": "sha512-6XQFvXTkbfUOZOKKILFG1PDK2NDQs4azKQl26T0YS5CxqWLgXajbPZ+h4gZekJyRqFU8pvnbAbbs/3TgRPy+GQ==", + "dev": true, "license": "MIT", - "dependencies": { - "@walletconnect/safe-json": "^1.0.1", - "idb-keyval": "^6.2.1", - "unstorage": "^1.9.0" + "engines": { + "node": ">=10.0.0" }, "peerDependencies": { - "@react-native-async-storage/async-storage": "1.x" + "bufferutil": "^4.0.1", + "utf-8-validate": ">=5.0.2" }, "peerDependenciesMeta": { - "@react-native-async-storage/async-storage": { + "bufferutil": { + "optional": true + }, + "utf-8-validate": { "optional": true } } }, - "node_modules/@walletconnect/sign-client/node_modules/@walletconnect/relay-auth": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/@walletconnect/relay-auth/-/relay-auth-1.0.4.tgz", - "integrity": "sha512-kKJcS6+WxYq5kshpPaxGHdwf5y98ZwbfuS4EE/NkQzqrDFm5Cj+dP8LofzWvjrrLkZq7Afy7WrQMXdLy8Sx7HQ==", - "license": "MIT", + "node_modules/eval": { + "version": "0.1.8", + "resolved": "https://registry.npmjs.org/eval/-/eval-0.1.8.tgz", + "integrity": "sha512-EzV94NYKoO09GLXGjXj9JIlXijVck4ONSr5wiCWDvhsvj5jxSrzTmRU/9C1DyB6uToszLs8aifA6NQ7lEQdvFw==", "dependencies": { - "@stablelib/ed25519": "^1.0.2", - "@stablelib/random": "^1.0.1", - "@walletconnect/safe-json": "^1.0.1", - "@walletconnect/time": "^1.0.2", - "tslib": "1.14.1", - "uint8arrays": "^3.0.0" + "@types/node": "*", + "require-like": ">= 0.1.1" + }, + "engines": { + "node": ">= 0.8" } }, - "node_modules/@walletconnect/sign-client/node_modules/@walletconnect/safe-json": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/@walletconnect/safe-json/-/safe-json-1.0.2.tgz", - "integrity": "sha512-Ogb7I27kZ3LPC3ibn8ldyUr5544t3/STow9+lzz7Sfo808YD7SBWk7SAsdBFlYgP2zDRy2hS3sKRcuSRM0OTmA==", + "node_modules/event-target-shim": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/event-target-shim/-/event-target-shim-5.0.1.tgz", + "integrity": "sha512-i/2XbnSz/uxRCU6+NdVJgKWDTM427+MqYbkQzD321DuCQJUqOuJKIA0IM2+W2xtYHdKOmZ4dR6fExsd4SXL+WQ==", "license": "MIT", - "dependencies": { - "tslib": "1.14.1" + "engines": { + "node": ">=6" } }, - "node_modules/@walletconnect/sign-client/node_modules/@walletconnect/types": { - "version": "2.17.1", - "resolved": "https://registry.npmjs.org/@walletconnect/types/-/types-2.17.1.tgz", - "integrity": "sha512-aiUeBE3EZZTsZBv5Cju3D0PWAsZCMks1g3hzQs9oNtrbuLL6pKKU0/zpKwk4vGywszxPvC3U0tBCku9LLsH/0A==", - "license": "Apache-2.0", - "dependencies": { - "@walletconnect/events": "1.0.1", - "@walletconnect/heartbeat": "1.2.2", - "@walletconnect/jsonrpc-types": "1.0.4", - "@walletconnect/keyvaluestorage": "1.1.1", - "@walletconnect/logger": "2.1.2", - "events": "3.3.0" + "node_modules/eventemitter3": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-5.0.1.tgz", + "integrity": "sha512-GWkBvjiSZK87ELrYOSESUYeVIc9mvLLf/nXalMOS5dYrgZq9o5OVkbZAVM06CVxYsCwH9BDZFPlQTlPA1j4ahA==", + "license": "MIT" + }, + "node_modules/events": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/events/-/events-3.3.0.tgz", + "integrity": "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==", + "license": "MIT", + "engines": { + "node": ">=0.8.x" } }, - "node_modules/@walletconnect/sign-client/node_modules/@walletconnect/utils": { - "version": "2.17.1", - "resolved": "https://registry.npmjs.org/@walletconnect/utils/-/utils-2.17.1.tgz", - "integrity": "sha512-KL7pPwq7qUC+zcTmvxGqIyYanfHgBQ+PFd0TEblg88jM7EjuDLhjyyjtkhyE/2q7QgR7OanIK7pCpilhWvBsBQ==", + "node_modules/events-universal": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/events-universal/-/events-universal-1.0.1.tgz", + "integrity": "sha512-LUd5euvbMLpwOF8m6ivPCbhQeSiYVNb8Vs0fQ8QjXo0JTkEHpz8pxdQf0gStltaPpw0Cca8b39KxvK9cfKRiAw==", + "dev": true, "license": "Apache-2.0", "dependencies": { - "@ethersproject/hash": "5.7.0", - "@ethersproject/transactions": "5.7.0", - "@stablelib/chacha20poly1305": "1.0.1", - "@stablelib/hkdf": "1.0.1", - "@stablelib/random": "1.0.2", - "@stablelib/sha256": "1.0.1", - "@stablelib/x25519": "1.0.3", - "@walletconnect/jsonrpc-utils": "1.0.8", - "@walletconnect/keyvaluestorage": "1.1.1", - "@walletconnect/relay-api": "1.0.11", - "@walletconnect/relay-auth": "1.0.4", - "@walletconnect/safe-json": "1.0.2", - "@walletconnect/time": "1.0.2", - "@walletconnect/types": "2.17.1", - "@walletconnect/window-getters": "1.0.1", - "@walletconnect/window-metadata": "1.0.1", - "detect-browser": "5.3.0", - "elliptic": "6.5.7", - "query-string": "7.1.3", - "uint8arrays": "3.1.0" + "bare-events": "^2.7.0" } }, - "node_modules/@walletconnect/sign-client/node_modules/@walletconnect/window-getters": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@walletconnect/window-getters/-/window-getters-1.0.1.tgz", - "integrity": "sha512-vHp+HqzGxORPAN8gY03qnbTMnhqIwjeRJNOMOAzePRg4xVEEE2WvYsI9G2NMjOknA8hnuYbU3/hwLcKbjhc8+Q==", + "node_modules/eventsource-parser": { + "version": "3.0.6", + "resolved": "https://registry.npmjs.org/eventsource-parser/-/eventsource-parser-3.0.6.tgz", + "integrity": "sha512-Vo1ab+QXPzZ4tCa8SwIHJFaSzy4R6SHf7BY79rFBDf0idraZWAkYrDjDj8uWaSm3S2TK+hJ7/t1CEmZ7jXw+pg==", "license": "MIT", - "dependencies": { - "tslib": "1.14.1" + "engines": { + "node": ">=18.0.0" } }, - "node_modules/@walletconnect/sign-client/node_modules/@walletconnect/window-metadata": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@walletconnect/window-metadata/-/window-metadata-1.0.1.tgz", - "integrity": "sha512-9koTqyGrM2cqFRW517BPY/iEtUDx2r1+Pwwu5m7sJ7ka79wi3EyqhqcICk/yDmv6jAS1rjKgTKXlEhanYjijcA==", + "node_modules/evp_bytestokey": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/evp_bytestokey/-/evp_bytestokey-1.0.3.tgz", + "integrity": "sha512-/f2Go4TognH/KvCISP7OUsHn85hT9nUkxxA9BEWxFn+Oj9o8ZNLm/40hdlgSLyuOimsrTKLUMEorQexp/aPQeA==", "license": "MIT", "dependencies": { - "@walletconnect/window-getters": "^1.0.1", - "tslib": "1.14.1" + "md5.js": "^1.3.4", + "safe-buffer": "^5.1.1" } }, - "node_modules/@walletconnect/sign-client/node_modules/bn.js": { - "version": "4.12.2", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.2.tgz", - "integrity": "sha512-n4DSx829VRTRByMRGdjQ9iqsN0Bh4OolPsFnaZBLcbi8iXcB+kJ9s7EnRt4wILZNV3kPLHkRVfOc/HvhC3ovDw==", - "license": "MIT" - }, - "node_modules/@walletconnect/sign-client/node_modules/chokidar": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-4.0.3.tgz", - "integrity": "sha512-Qgzu8kfBvo+cA4962jnP1KkS6Dop5NS6g7R5LFYJr4b8Ub94PPQXUksCw9PvXoeXPRRddRNC5C1JQUR2SMGtnA==", + "node_modules/execa": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz", + "integrity": "sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==", "license": "MIT", "dependencies": { - "readdirp": "^4.0.1" + "cross-spawn": "^7.0.3", + "get-stream": "^6.0.0", + "human-signals": "^2.1.0", + "is-stream": "^2.0.0", + "merge-stream": "^2.0.0", + "npm-run-path": "^4.0.1", + "onetime": "^5.1.2", + "signal-exit": "^3.0.3", + "strip-final-newline": "^2.0.0" }, "engines": { - "node": ">= 14.16.0" + "node": ">=10" }, "funding": { - "url": "https://paulmillr.com/funding/" - } - }, - "node_modules/@walletconnect/sign-client/node_modules/elliptic": { - "version": "6.5.7", - "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.5.7.tgz", - "integrity": "sha512-ESVCtTwiA+XhY3wyh24QqRGBoP3rEdDUl3EDUUo9tft074fi19IrdpH7hLCMMP3CIj7jb3W96rn8lt/BqIlt5Q==", - "license": "MIT", - "dependencies": { - "bn.js": "^4.11.9", - "brorand": "^1.1.0", - "hash.js": "^1.0.0", - "hmac-drbg": "^1.0.1", - "inherits": "^2.0.4", - "minimalistic-assert": "^1.0.1", - "minimalistic-crypto-utils": "^1.0.1" + "url": "https://github.com/sindresorhus/execa?sponsor=1" } }, - "node_modules/@walletconnect/sign-client/node_modules/lru-cache": { - "version": "10.4.3", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz", - "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==", + "node_modules/execa/node_modules/signal-exit": { + "version": "3.0.7", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", + "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", "license": "ISC" }, - "node_modules/@walletconnect/sign-client/node_modules/multiformats": { - "version": "9.9.0", - "resolved": "https://registry.npmjs.org/multiformats/-/multiformats-9.9.0.tgz", - "integrity": "sha512-HoMUjhH9T8DDBNT+6xzkrd9ga/XiBI4xLr58LJACwK6G3HTOPeMz4nB4KJs33L2BelrIJa7P0VuNaVF3hMYfjg==", - "license": "(Apache-2.0 AND MIT)" - }, - "node_modules/@walletconnect/sign-client/node_modules/readdirp": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-4.1.2.tgz", - "integrity": "sha512-GDhwkLfywWL2s6vEjyhri+eXmfH6j1L7JE27WhqLeYzoh/A3DBaYGEj2H/HFZCn/kMfim73FXxEJTw06WtxQwg==", - "license": "MIT", + "node_modules/exit": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/exit/-/exit-0.1.2.tgz", + "integrity": "sha512-Zk/eNKV2zbjpKzrsQ+n1G6poVbErQxJ0LBOJXaKZ1EViLzH+hrLu9cdXI4zw9dBQJslwBEpbQ2P1oS7nDxs6jQ==", + "dev": true, "engines": { - "node": ">= 14.18.0" - }, - "funding": { - "type": "individual", - "url": "https://paulmillr.com/funding/" - } - }, - "node_modules/@walletconnect/sign-client/node_modules/tslib": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", - "license": "0BSD" - }, - "node_modules/@walletconnect/sign-client/node_modules/uint8arrays": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/uint8arrays/-/uint8arrays-3.1.0.tgz", - "integrity": "sha512-ei5rfKtoRO8OyOIor2Rz5fhzjThwIHJZ3uyDPnDHTXbP0aMQ1RN/6AI5B5d9dBxJOU+BvOAk7ZQ1xphsX8Lrog==", - "license": "MIT", - "dependencies": { - "multiformats": "^9.4.2" + "node": ">= 0.8.0" } }, - "node_modules/@walletconnect/sign-client/node_modules/unstorage": { - "version": "1.17.1", - "resolved": "https://registry.npmjs.org/unstorage/-/unstorage-1.17.1.tgz", - "integrity": "sha512-KKGwRTT0iVBCErKemkJCLs7JdxNVfqTPc/85ae1XES0+bsHbc/sFBfVi5kJp156cc51BHinIH2l3k0EZ24vOBQ==", + "node_modules/expect": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/expect/-/expect-29.7.0.tgz", + "integrity": "sha512-2Zks0hf1VLFYI1kbh0I5jP3KHHyCHpkfyHBzsSXRFgl/Bg9mWYfMW8oD+PdMPlEwy5HNsR9JutYy6pMeOh61nw==", + "dev": true, "license": "MIT", "dependencies": { - "anymatch": "^3.1.3", - "chokidar": "^4.0.3", - "destr": "^2.0.5", - "h3": "^1.15.4", - "lru-cache": "^10.4.3", - "node-fetch-native": "^1.6.7", - "ofetch": "^1.4.1", - "ufo": "^1.6.1" - }, - "peerDependencies": { - "@azure/app-configuration": "^1.8.0", - "@azure/cosmos": "^4.2.0", - "@azure/data-tables": "^13.3.0", - "@azure/identity": "^4.6.0", - "@azure/keyvault-secrets": "^4.9.0", - "@azure/storage-blob": "^12.26.0", - "@capacitor/preferences": "^6.0.3 || ^7.0.0", - "@deno/kv": ">=0.9.0", - "@netlify/blobs": "^6.5.0 || ^7.0.0 || ^8.1.0 || ^9.0.0 || ^10.0.0", - "@planetscale/database": "^1.19.0", - "@upstash/redis": "^1.34.3", - "@vercel/blob": ">=0.27.1", - "@vercel/functions": "^2.2.12 || ^3.0.0", - "@vercel/kv": "^1.0.1", - "aws4fetch": "^1.0.20", - "db0": ">=0.2.1", - "idb-keyval": "^6.2.1", - "ioredis": "^5.4.2", - "uploadthing": "^7.4.4" + "@jest/expect-utils": "^29.7.0", + "jest-get-type": "^29.6.3", + "jest-matcher-utils": "^29.7.0", + "jest-message-util": "^29.7.0", + "jest-util": "^29.7.0" }, - "peerDependenciesMeta": { - "@azure/app-configuration": { - "optional": true - }, - "@azure/cosmos": { - "optional": true - }, - "@azure/data-tables": { - "optional": true - }, - "@azure/identity": { - "optional": true - }, - "@azure/keyvault-secrets": { - "optional": true - }, - "@azure/storage-blob": { - "optional": true - }, - "@capacitor/preferences": { - "optional": true - }, - "@deno/kv": { - "optional": true - }, - "@netlify/blobs": { - "optional": true - }, - "@planetscale/database": { - "optional": true - }, - "@upstash/redis": { - "optional": true - }, - "@vercel/blob": { - "optional": true - }, - "@vercel/functions": { - "optional": true - }, - "@vercel/kv": { - "optional": true - }, - "aws4fetch": { - "optional": true - }, - "db0": { - "optional": true - }, - "idb-keyval": { - "optional": true - }, - "ioredis": { - "optional": true - }, - "uploadthing": { - "optional": true - } - } - }, - "node_modules/@walletconnect/time": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/@walletconnect/time/-/time-1.0.2.tgz", - "integrity": "sha512-uzdd9woDcJ1AaBZRhqy5rNC9laqWGErfc4dxA9a87mPdKOgWMD85mcFo9dIYIts/Jwocfwn07EC6EzclKubk/g==", - "license": "MIT", - "dependencies": { - "tslib": "1.14.1" + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/@walletconnect/time/node_modules/tslib": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", - "license": "0BSD" - }, - "node_modules/@walletconnect/types": { - "version": "2.21.10", - "resolved": "https://registry.npmjs.org/@walletconnect/types/-/types-2.21.10.tgz", - "integrity": "sha512-9oSvgxv1hE5aS+j4aHS9YgKeq50BP4iMh49tjubTW5574cBWqmt1bXfQhZddSTbq9OirwLSegl6W36itkzryBQ==", - "license": "SEE LICENSE IN LICENSE.md", - "dependencies": { - "@walletconnect/events": "1.0.1", - "@walletconnect/heartbeat": "1.2.2", - "@walletconnect/jsonrpc-types": "1.0.4", - "@walletconnect/keyvaluestorage": "1.1.1", - "@walletconnect/logger": "2.1.2", - "events": "3.3.0" - } + "node_modules/exponential-backoff": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/exponential-backoff/-/exponential-backoff-3.1.2.tgz", + "integrity": "sha512-8QxYTVXUkuy7fIIoitQkPwGonB8F3Zj8eEO8Sqg9Zv/bkI7RJAzowee4gr81Hak/dUTpA2Z7VfQgoijjPNlUZA==", + "license": "Apache-2.0" }, - "node_modules/@walletconnect/types/node_modules/@walletconnect/keyvaluestorage": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/@walletconnect/keyvaluestorage/-/keyvaluestorage-1.1.1.tgz", - "integrity": "sha512-V7ZQq2+mSxAq7MrRqDxanTzu2RcElfK1PfNYiaVnJgJ7Q7G7hTVwF8voIBx92qsRyGHZihrwNPHuZd1aKkd0rA==", + "node_modules/express": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/express/-/express-5.1.0.tgz", + "integrity": "sha512-DT9ck5YIRU+8GYzzU5kT3eHGA5iL+1Zd0EutOmTE9Dtk+Tvuzd23VBU+ec7HPNSTxXYO55gPV/hq4pSBJDjFpA==", "license": "MIT", "dependencies": { - "@walletconnect/safe-json": "^1.0.1", - "idb-keyval": "^6.2.1", - "unstorage": "^1.9.0" + "accepts": "^2.0.0", + "body-parser": "^2.2.0", + "content-disposition": "^1.0.0", + "content-type": "^1.0.5", + "cookie": "^0.7.1", + "cookie-signature": "^1.2.1", + "debug": "^4.4.0", + "encodeurl": "^2.0.0", + "escape-html": "^1.0.3", + "etag": "^1.8.1", + "finalhandler": "^2.1.0", + "fresh": "^2.0.0", + "http-errors": "^2.0.0", + "merge-descriptors": "^2.0.0", + "mime-types": "^3.0.0", + "on-finished": "^2.4.1", + "once": "^1.4.0", + "parseurl": "^1.3.3", + "proxy-addr": "^2.0.7", + "qs": "^6.14.0", + "range-parser": "^1.2.1", + "router": "^2.2.0", + "send": "^1.1.0", + "serve-static": "^2.2.0", + "statuses": "^2.0.1", + "type-is": "^2.0.1", + "vary": "^1.1.2" }, - "peerDependencies": { - "@react-native-async-storage/async-storage": "1.x" + "engines": { + "node": ">= 18" }, - "peerDependenciesMeta": { - "@react-native-async-storage/async-storage": { - "optional": true - } + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" } }, - "node_modules/@walletconnect/types/node_modules/@walletconnect/safe-json": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/@walletconnect/safe-json/-/safe-json-1.0.2.tgz", - "integrity": "sha512-Ogb7I27kZ3LPC3ibn8ldyUr5544t3/STow9+lzz7Sfo808YD7SBWk7SAsdBFlYgP2zDRy2hS3sKRcuSRM0OTmA==", + "node_modules/express/node_modules/body-parser": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-2.2.0.tgz", + "integrity": "sha512-02qvAaxv8tp7fBa/mw1ga98OGm+eCbqzJOKoRt70sLmfEEi+jyBYVTDGfCL/k06/4EMk/z01gCe7HoCH/f2LTg==", "license": "MIT", "dependencies": { - "tslib": "1.14.1" + "bytes": "^3.1.2", + "content-type": "^1.0.5", + "debug": "^4.4.0", + "http-errors": "^2.0.0", + "iconv-lite": "^0.6.3", + "on-finished": "^2.4.1", + "qs": "^6.14.0", + "raw-body": "^3.0.0", + "type-is": "^2.0.0" + }, + "engines": { + "node": ">=18" } }, - "node_modules/@walletconnect/types/node_modules/chokidar": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-4.0.3.tgz", - "integrity": "sha512-Qgzu8kfBvo+cA4962jnP1KkS6Dop5NS6g7R5LFYJr4b8Ub94PPQXUksCw9PvXoeXPRRddRNC5C1JQUR2SMGtnA==", + "node_modules/express/node_modules/iconv-lite": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", + "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", "license": "MIT", "dependencies": { - "readdirp": "^4.0.1" + "safer-buffer": ">= 2.1.2 < 3.0.0" }, "engines": { - "node": ">= 14.16.0" - }, - "funding": { - "url": "https://paulmillr.com/funding/" + "node": ">=0.10.0" } }, - "node_modules/@walletconnect/types/node_modules/lru-cache": { - "version": "10.4.3", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz", - "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==", - "license": "ISC" - }, - "node_modules/@walletconnect/types/node_modules/readdirp": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-4.1.2.tgz", - "integrity": "sha512-GDhwkLfywWL2s6vEjyhri+eXmfH6j1L7JE27WhqLeYzoh/A3DBaYGEj2H/HFZCn/kMfim73FXxEJTw06WtxQwg==", + "node_modules/express/node_modules/media-typer": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-1.1.0.tgz", + "integrity": "sha512-aisnrDP4GNe06UcKFnV5bfMNPBUw4jsLGaWwWfnH3v02GnBuXX2MCVn5RbrWo0j3pczUilYblq7fQ7Nw2t5XKw==", "license": "MIT", "engines": { - "node": ">= 14.18.0" - }, - "funding": { - "type": "individual", - "url": "https://paulmillr.com/funding/" + "node": ">= 0.8" } }, - "node_modules/@walletconnect/types/node_modules/tslib": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", - "license": "0BSD" - }, - "node_modules/@walletconnect/types/node_modules/unstorage": { - "version": "1.17.1", - "resolved": "https://registry.npmjs.org/unstorage/-/unstorage-1.17.1.tgz", - "integrity": "sha512-KKGwRTT0iVBCErKemkJCLs7JdxNVfqTPc/85ae1XES0+bsHbc/sFBfVi5kJp156cc51BHinIH2l3k0EZ24vOBQ==", - "license": "MIT", + "node_modules/express/node_modules/qs": { + "version": "6.14.0", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.14.0.tgz", + "integrity": "sha512-YWWTjgABSKcvs/nWBi9PycY/JiPJqOD4JA6o9Sej2AtvSGarXxKC3OQSk4pAarbdQlKAh5D4FCQkJNkW+GAn3w==", + "license": "BSD-3-Clause", "dependencies": { - "anymatch": "^3.1.3", - "chokidar": "^4.0.3", - "destr": "^2.0.5", - "h3": "^1.15.4", - "lru-cache": "^10.4.3", - "node-fetch-native": "^1.6.7", - "ofetch": "^1.4.1", - "ufo": "^1.6.1" + "side-channel": "^1.1.0" }, - "peerDependencies": { - "@azure/app-configuration": "^1.8.0", - "@azure/cosmos": "^4.2.0", - "@azure/data-tables": "^13.3.0", - "@azure/identity": "^4.6.0", - "@azure/keyvault-secrets": "^4.9.0", - "@azure/storage-blob": "^12.26.0", - "@capacitor/preferences": "^6.0.3 || ^7.0.0", - "@deno/kv": ">=0.9.0", - "@netlify/blobs": "^6.5.0 || ^7.0.0 || ^8.1.0 || ^9.0.0 || ^10.0.0", - "@planetscale/database": "^1.19.0", - "@upstash/redis": "^1.34.3", - "@vercel/blob": ">=0.27.1", - "@vercel/functions": "^2.2.12 || ^3.0.0", - "@vercel/kv": "^1.0.1", - "aws4fetch": "^1.0.20", - "db0": ">=0.2.1", - "idb-keyval": "^6.2.1", - "ioredis": "^5.4.2", - "uploadthing": "^7.4.4" + "engines": { + "node": ">=0.6" }, - "peerDependenciesMeta": { - "@azure/app-configuration": { - "optional": true - }, - "@azure/cosmos": { - "optional": true - }, - "@azure/data-tables": { - "optional": true - }, - "@azure/identity": { - "optional": true - }, - "@azure/keyvault-secrets": { - "optional": true - }, - "@azure/storage-blob": { - "optional": true - }, - "@capacitor/preferences": { - "optional": true - }, - "@deno/kv": { - "optional": true - }, - "@netlify/blobs": { - "optional": true - }, - "@planetscale/database": { - "optional": true - }, - "@upstash/redis": { - "optional": true - }, - "@vercel/blob": { - "optional": true - }, - "@vercel/functions": { - "optional": true - }, - "@vercel/kv": { - "optional": true - }, - "aws4fetch": { - "optional": true - }, - "db0": { - "optional": true - }, - "idb-keyval": { - "optional": true - }, - "ioredis": { - "optional": true - }, - "uploadthing": { - "optional": true - } + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/@walletconnect/utils": { - "version": "2.21.10", - "resolved": "https://registry.npmjs.org/@walletconnect/utils/-/utils-2.21.10.tgz", - "integrity": "sha512-LC5hmP3uxVoMyw7Ibea1JQdE98FTb7jZie60qiaybmaIsg/ApEUosU5uCLTFRJwEWUip2p3sJTb0n/3pU+yR/Q==", - "license": "SEE LICENSE IN LICENSE.md", + "node_modules/express/node_modules/raw-body": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-3.0.1.tgz", + "integrity": "sha512-9G8cA+tuMS75+6G/TzW8OtLzmBDMo8p1JRxN5AZ+LAp8uxGA8V8GZm4GQ4/N5QNQEnLmg6SS7wyuSmbKepiKqA==", + "license": "MIT", "dependencies": { - "@msgpack/msgpack": "3.1.2", - "@noble/ciphers": "1.3.0", - "@noble/curves": "1.9.7", - "@noble/hashes": "1.8.0", - "@scure/base": "1.2.6", - "@walletconnect/jsonrpc-utils": "1.0.8", - "@walletconnect/keyvaluestorage": "1.1.1", - "@walletconnect/relay-api": "1.0.11", - "@walletconnect/relay-auth": "1.1.0", - "@walletconnect/safe-json": "1.0.2", - "@walletconnect/time": "1.0.2", - "@walletconnect/types": "2.21.10", - "@walletconnect/window-getters": "1.0.1", - "@walletconnect/window-metadata": "1.0.1", - "blakejs": "1.2.1", - "bs58": "6.0.0", - "detect-browser": "5.3.0", - "ox": "0.9.3", - "uint8arrays": "3.1.1" + "bytes": "3.1.2", + "http-errors": "2.0.0", + "iconv-lite": "0.7.0", + "unpipe": "1.0.0" + }, + "engines": { + "node": ">= 0.10" } }, - "node_modules/@walletconnect/utils/node_modules/@walletconnect/keyvaluestorage": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/@walletconnect/keyvaluestorage/-/keyvaluestorage-1.1.1.tgz", - "integrity": "sha512-V7ZQq2+mSxAq7MrRqDxanTzu2RcElfK1PfNYiaVnJgJ7Q7G7hTVwF8voIBx92qsRyGHZihrwNPHuZd1aKkd0rA==", + "node_modules/express/node_modules/raw-body/node_modules/iconv-lite": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.7.0.tgz", + "integrity": "sha512-cf6L2Ds3h57VVmkZe+Pn+5APsT7FpqJtEhhieDCvrE2MK5Qk9MyffgQyuxQTm6BChfeZNtcOLHp9IcWRVcIcBQ==", "license": "MIT", "dependencies": { - "@walletconnect/safe-json": "^1.0.1", - "idb-keyval": "^6.2.1", - "unstorage": "^1.9.0" + "safer-buffer": ">= 2.1.2 < 3.0.0" }, - "peerDependencies": { - "@react-native-async-storage/async-storage": "1.x" + "engines": { + "node": ">=0.10.0" }, - "peerDependenciesMeta": { - "@react-native-async-storage/async-storage": { - "optional": true - } + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" } }, - "node_modules/@walletconnect/utils/node_modules/@walletconnect/safe-json": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/@walletconnect/safe-json/-/safe-json-1.0.2.tgz", - "integrity": "sha512-Ogb7I27kZ3LPC3ibn8ldyUr5544t3/STow9+lzz7Sfo808YD7SBWk7SAsdBFlYgP2zDRy2hS3sKRcuSRM0OTmA==", + "node_modules/express/node_modules/type-is": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/type-is/-/type-is-2.0.1.tgz", + "integrity": "sha512-OZs6gsjF4vMp32qrCbiVSkrFmXtG/AZhY3t0iAMrMBiAZyV9oALtXO8hsrHbMXF9x6L3grlFuwW2oAz7cav+Gw==", "license": "MIT", "dependencies": { - "tslib": "1.14.1" + "content-type": "^1.0.5", + "media-typer": "^1.1.0", + "mime-types": "^3.0.0" + }, + "engines": { + "node": ">= 0.6" } }, - "node_modules/@walletconnect/utils/node_modules/@walletconnect/window-getters": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@walletconnect/window-getters/-/window-getters-1.0.1.tgz", - "integrity": "sha512-vHp+HqzGxORPAN8gY03qnbTMnhqIwjeRJNOMOAzePRg4xVEEE2WvYsI9G2NMjOknA8hnuYbU3/hwLcKbjhc8+Q==", + "node_modules/extend": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", + "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==", + "license": "MIT" + }, + "node_modules/extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==", "license": "MIT", "dependencies": { - "tslib": "1.14.1" + "is-extendable": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" } }, - "node_modules/@walletconnect/utils/node_modules/@walletconnect/window-metadata": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@walletconnect/window-metadata/-/window-metadata-1.0.1.tgz", - "integrity": "sha512-9koTqyGrM2cqFRW517BPY/iEtUDx2r1+Pwwu5m7sJ7ka79wi3EyqhqcICk/yDmv6jAS1rjKgTKXlEhanYjijcA==", - "license": "MIT", + "node_modules/extendable-error": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/extendable-error/-/extendable-error-0.1.7.tgz", + "integrity": "sha512-UOiS2in6/Q0FK0R0q6UY9vYpQ21mr/Qn1KOnte7vsACuNJf514WvCCUHSRCPcgjPT2bAhNIJdlE6bVap1GKmeg==", + "dev": true, + "license": "MIT" + }, + "node_modules/extension-port-stream": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/extension-port-stream/-/extension-port-stream-2.1.1.tgz", + "integrity": "sha512-qknp5o5rj2J9CRKfVB8KJr+uXQlrojNZzdESUPhKYLXf97TPcGf6qWWKmpsNNtUyOdzFhab1ON0jzouNxHHvow==", + "license": "ISC", "dependencies": { - "@walletconnect/window-getters": "^1.0.1", - "tslib": "1.14.1" + "webextension-polyfill": ">=0.10.0 <1.0" + }, + "engines": { + "node": ">=12.0.0" } }, - "node_modules/@walletconnect/utils/node_modules/chokidar": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-4.0.3.tgz", - "integrity": "sha512-Qgzu8kfBvo+cA4962jnP1KkS6Dop5NS6g7R5LFYJr4b8Ub94PPQXUksCw9PvXoeXPRRddRNC5C1JQUR2SMGtnA==", + "node_modules/external-editor": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/external-editor/-/external-editor-3.1.0.tgz", + "integrity": "sha512-hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew==", "license": "MIT", "dependencies": { - "readdirp": "^4.0.1" + "chardet": "^0.7.0", + "iconv-lite": "^0.4.24", + "tmp": "^0.0.33" }, "engines": { - "node": ">= 14.16.0" - }, - "funding": { - "url": "https://paulmillr.com/funding/" + "node": ">=4" } }, - "node_modules/@walletconnect/utils/node_modules/lru-cache": { - "version": "10.4.3", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz", - "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==", - "license": "ISC" + "node_modules/external-editor/node_modules/chardet": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/chardet/-/chardet-0.7.0.tgz", + "integrity": "sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==", + "license": "MIT" }, - "node_modules/@walletconnect/utils/node_modules/readdirp": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-4.1.2.tgz", - "integrity": "sha512-GDhwkLfywWL2s6vEjyhri+eXmfH6j1L7JE27WhqLeYzoh/A3DBaYGEj2H/HFZCn/kMfim73FXxEJTw06WtxQwg==", + "node_modules/external-editor/node_modules/iconv-lite": { + "version": "0.4.24", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", + "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", "license": "MIT", - "engines": { - "node": ">= 14.18.0" + "dependencies": { + "safer-buffer": ">= 2.1.2 < 3" }, - "funding": { - "type": "individual", - "url": "https://paulmillr.com/funding/" + "engines": { + "node": ">=0.10.0" } }, - "node_modules/@walletconnect/utils/node_modules/tslib": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", - "license": "0BSD" + "node_modules/fast-base64-decode": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fast-base64-decode/-/fast-base64-decode-1.0.0.tgz", + "integrity": "sha512-qwaScUgUGBYeDNRnbc/KyllVU88Jk1pRHPStuF/lO7B0/RTRLj7U0lkdTAutlBblY08rwZDff6tNU9cjv6j//Q==", + "license": "MIT" }, - "node_modules/@walletconnect/utils/node_modules/unstorage": { - "version": "1.17.1", - "resolved": "https://registry.npmjs.org/unstorage/-/unstorage-1.17.1.tgz", - "integrity": "sha512-KKGwRTT0iVBCErKemkJCLs7JdxNVfqTPc/85ae1XES0+bsHbc/sFBfVi5kJp156cc51BHinIH2l3k0EZ24vOBQ==", + "node_modules/fast-copy": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/fast-copy/-/fast-copy-3.0.2.tgz", + "integrity": "sha512-dl0O9Vhju8IrcLndv2eU4ldt1ftXMqqfgN4H1cpmGV7P6jeB9FwpN9a2c8DPGE1Ys88rNUJVYDHq73CGAGOPfQ==", + "license": "MIT" + }, + "node_modules/fast-deep-equal": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", + "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", + "license": "MIT" + }, + "node_modules/fast-diff": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/fast-diff/-/fast-diff-1.3.0.tgz", + "integrity": "sha512-VxPP4NqbUjj6MaAOafWeUn2cXWLcCtljklUtZf0Ind4XQ+QPtmA0b18zZy0jIQx+ExRVCR/ZQpBmik5lXshNsw==", + "dev": true, + "license": "Apache-2.0" + }, + "node_modules/fast-fifo": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/fast-fifo/-/fast-fifo-1.3.2.tgz", + "integrity": "sha512-/d9sfos4yxzpwkDkuN7k2SqFKtYNmCTzgfEpz82x34IM9/zc8KGxQoXg1liNC/izpRM/MBdt44Nmx41ZWqk+FQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/fast-glob": { + "version": "3.3.3", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.3.tgz", + "integrity": "sha512-7MptL8U0cqcFdzIzwOTHoilX9x5BrNqye7Z/LuC7kCMRio1EMSyqRK3BEAUD7sXRq4iT4AzTVuZdhgQ2TCvYLg==", "license": "MIT", "dependencies": { - "anymatch": "^3.1.3", - "chokidar": "^4.0.3", - "destr": "^2.0.5", - "h3": "^1.15.4", - "lru-cache": "^10.4.3", - "node-fetch-native": "^1.6.7", - "ofetch": "^1.4.1", - "ufo": "^1.6.1" - }, - "peerDependencies": { - "@azure/app-configuration": "^1.8.0", - "@azure/cosmos": "^4.2.0", - "@azure/data-tables": "^13.3.0", - "@azure/identity": "^4.6.0", - "@azure/keyvault-secrets": "^4.9.0", - "@azure/storage-blob": "^12.26.0", - "@capacitor/preferences": "^6.0.3 || ^7.0.0", - "@deno/kv": ">=0.9.0", - "@netlify/blobs": "^6.5.0 || ^7.0.0 || ^8.1.0 || ^9.0.0 || ^10.0.0", - "@planetscale/database": "^1.19.0", - "@upstash/redis": "^1.34.3", - "@vercel/blob": ">=0.27.1", - "@vercel/functions": "^2.2.12 || ^3.0.0", - "@vercel/kv": "^1.0.1", - "aws4fetch": "^1.0.20", - "db0": ">=0.2.1", - "idb-keyval": "^6.2.1", - "ioredis": "^5.4.2", - "uploadthing": "^7.4.4" + "@nodelib/fs.stat": "^2.0.2", + "@nodelib/fs.walk": "^1.2.3", + "glob-parent": "^5.1.2", + "merge2": "^1.3.0", + "micromatch": "^4.0.8" }, - "peerDependenciesMeta": { - "@azure/app-configuration": { - "optional": true - }, - "@azure/cosmos": { - "optional": true - }, - "@azure/data-tables": { - "optional": true - }, - "@azure/identity": { - "optional": true - }, - "@azure/keyvault-secrets": { - "optional": true - }, - "@azure/storage-blob": { - "optional": true - }, - "@capacitor/preferences": { - "optional": true - }, - "@deno/kv": { - "optional": true - }, - "@netlify/blobs": { - "optional": true - }, - "@planetscale/database": { - "optional": true - }, - "@upstash/redis": { - "optional": true - }, - "@vercel/blob": { - "optional": true - }, - "@vercel/functions": { - "optional": true - }, - "@vercel/kv": { - "optional": true - }, - "aws4fetch": { - "optional": true - }, - "db0": { - "optional": true - }, - "idb-keyval": { - "optional": true - }, - "ioredis": { - "optional": true - }, - "uploadthing": { - "optional": true - } + "engines": { + "node": ">=8.6.0" } }, - "node_modules/@walletconnect/web3wallet": { - "version": "1.16.1", - "resolved": "https://registry.npmjs.org/@walletconnect/web3wallet/-/web3wallet-1.16.1.tgz", - "integrity": "sha512-l6jVoLEh/UtRfvYUDs52fN+LYXsBgx3F9WfErJuCSCFfpbxDKIzM2Y9sI0WI1/5dWN5sh24H1zNCXnQ4JJltZw==", - "deprecated": "Web3Wallet is now Reown WalletKit. Please follow the upgrade guide at https://docs.reown.com/walletkit/upgrade/from-web3wallet-web", - "license": "Apache-2.0", + "node_modules/fast-glob/node_modules/glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "license": "ISC", "dependencies": { - "@walletconnect/auth-client": "2.1.2", - "@walletconnect/core": "2.17.1", - "@walletconnect/jsonrpc-provider": "1.0.14", - "@walletconnect/jsonrpc-utils": "1.0.8", - "@walletconnect/logger": "2.1.2", - "@walletconnect/sign-client": "2.17.1", - "@walletconnect/types": "2.17.1", - "@walletconnect/utils": "2.17.1" + "is-glob": "^4.0.1" + }, + "engines": { + "node": ">= 6" } }, - "node_modules/@walletconnect/web3wallet/node_modules/@ethersproject/hash": { - "version": "5.7.0", - "resolved": "https://registry.npmjs.org/@ethersproject/hash/-/hash-5.7.0.tgz", - "integrity": "sha512-qX5WrQfnah1EFnO5zJv1v46a8HW0+E5xuBBDTwMFZLuVTx0tbU2kkx15NqdjxecrLGatQN9FGQKpb1FKdHCt+g==", - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], + "node_modules/fast-json-stable-stringify": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", + "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", + "license": "MIT" + }, + "node_modules/fast-levenshtein": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", + "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==", + "dev": true, + "license": "MIT" + }, + "node_modules/fast-redact": { + "version": "3.5.0", + "resolved": "https://registry.npmjs.org/fast-redact/-/fast-redact-3.5.0.tgz", + "integrity": "sha512-dwsoQlS7h9hMeYUq1W++23NDcBLV4KqONnITDV9DjfS3q1SgDGVrBdvvTLUotWtPSD7asWDV9/CmsZPy8Hf70A==", "license": "MIT", - "dependencies": { - "@ethersproject/abstract-signer": "^5.7.0", - "@ethersproject/address": "^5.7.0", - "@ethersproject/base64": "^5.7.0", - "@ethersproject/bignumber": "^5.7.0", - "@ethersproject/bytes": "^5.7.0", - "@ethersproject/keccak256": "^5.7.0", - "@ethersproject/logger": "^5.7.0", - "@ethersproject/properties": "^5.7.0", - "@ethersproject/strings": "^5.7.0" + "engines": { + "node": ">=6" } }, - "node_modules/@walletconnect/web3wallet/node_modules/@ethersproject/transactions": { - "version": "5.7.0", - "resolved": "https://registry.npmjs.org/@ethersproject/transactions/-/transactions-5.7.0.tgz", - "integrity": "sha512-kmcNicCp1lp8qanMTC3RIikGgoJ80ztTyvtsFvCYpSCfkjhD0jZ2LOrnbcuxuToLIUYYf+4XwD1rP+B/erDIhQ==", + "node_modules/fast-safe-stringify": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/fast-safe-stringify/-/fast-safe-stringify-2.1.1.tgz", + "integrity": "sha512-W+KJc2dmILlPplD/H4K9l9LcAHAfPtP6BY84uVLXQ6Evcz9Lcg33Y2z1IVblT6xdY54PXYVHEv+0Wpq8Io6zkA==", + "license": "MIT" + }, + "node_modules/fast-uri": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/fast-uri/-/fast-uri-3.1.0.tgz", + "integrity": "sha512-iPeeDKJSWf4IEOasVVrknXpaBV0IApz/gp7S2bb7Z4Lljbl2MGJRqInZiUrQwV16cpzw/D3S5j5Julj/gT52AA==", "funding": [ { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + "type": "github", + "url": "https://github.com/sponsors/fastify" }, { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" + "type": "opencollective", + "url": "https://opencollective.com/fastify" } ], - "license": "MIT", - "dependencies": { - "@ethersproject/address": "^5.7.0", - "@ethersproject/bignumber": "^5.7.0", - "@ethersproject/bytes": "^5.7.0", - "@ethersproject/constants": "^5.7.0", - "@ethersproject/keccak256": "^5.7.0", - "@ethersproject/logger": "^5.7.0", - "@ethersproject/properties": "^5.7.0", - "@ethersproject/rlp": "^5.7.0", - "@ethersproject/signing-key": "^5.7.0" - } - }, - "node_modules/@walletconnect/web3wallet/node_modules/@stablelib/random": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/@stablelib/random/-/random-1.0.2.tgz", - "integrity": "sha512-rIsE83Xpb7clHPVRlBj8qNe5L8ISQOzjghYQm/dZ7VaM2KHYwMW5adjQjrzTZCchFnNCNhkwtnOBa9HTMJCI8w==", - "license": "MIT", - "dependencies": { - "@stablelib/binary": "^1.0.1", - "@stablelib/wipe": "^1.0.1" - } + "license": "BSD-3-Clause" }, - "node_modules/@walletconnect/web3wallet/node_modules/@walletconnect/keyvaluestorage": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/@walletconnect/keyvaluestorage/-/keyvaluestorage-1.1.1.tgz", - "integrity": "sha512-V7ZQq2+mSxAq7MrRqDxanTzu2RcElfK1PfNYiaVnJgJ7Q7G7hTVwF8voIBx92qsRyGHZihrwNPHuZd1aKkd0rA==", + "node_modules/fast-xml-parser": { + "version": "5.2.5", + "resolved": "https://registry.npmjs.org/fast-xml-parser/-/fast-xml-parser-5.2.5.tgz", + "integrity": "sha512-pfX9uG9Ki0yekDHx2SiuRIyFdyAr1kMIMitPvb0YBo8SUfKvia7w7FIyd/l6av85pFYRhZscS75MwMnbvY+hcQ==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/NaturalIntelligence" + } + ], "license": "MIT", "dependencies": { - "@walletconnect/safe-json": "^1.0.1", - "idb-keyval": "^6.2.1", - "unstorage": "^1.9.0" - }, - "peerDependencies": { - "@react-native-async-storage/async-storage": "1.x" + "strnum": "^2.1.0" }, - "peerDependenciesMeta": { - "@react-native-async-storage/async-storage": { - "optional": true - } + "bin": { + "fxparser": "src/cli/cli.js" } }, - "node_modules/@walletconnect/web3wallet/node_modules/@walletconnect/relay-auth": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/@walletconnect/relay-auth/-/relay-auth-1.0.4.tgz", - "integrity": "sha512-kKJcS6+WxYq5kshpPaxGHdwf5y98ZwbfuS4EE/NkQzqrDFm5Cj+dP8LofzWvjrrLkZq7Afy7WrQMXdLy8Sx7HQ==", - "license": "MIT", + "node_modules/fastq": { + "version": "1.19.1", + "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.19.1.tgz", + "integrity": "sha512-GwLTyxkCXjXbxqIhTsMI2Nui8huMPtnxg7krajPJAjnEG/iiOS7i+zCtWGZR9G0NBKbXKh6X9m9UIsYX/N6vvQ==", + "license": "ISC", "dependencies": { - "@stablelib/ed25519": "^1.0.2", - "@stablelib/random": "^1.0.1", - "@walletconnect/safe-json": "^1.0.1", - "@walletconnect/time": "^1.0.2", - "tslib": "1.14.1", - "uint8arrays": "^3.0.0" + "reusify": "^1.0.4" } }, - "node_modules/@walletconnect/web3wallet/node_modules/@walletconnect/safe-json": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/@walletconnect/safe-json/-/safe-json-1.0.2.tgz", - "integrity": "sha512-Ogb7I27kZ3LPC3ibn8ldyUr5544t3/STow9+lzz7Sfo808YD7SBWk7SAsdBFlYgP2zDRy2hS3sKRcuSRM0OTmA==", + "node_modules/fault": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/fault/-/fault-2.0.1.tgz", + "integrity": "sha512-WtySTkS4OKev5JtpHXnib4Gxiurzh5NCGvWrFaZ34m6JehfTUhKZvn9njTfw48t6JumVQOmrKqpmGcdwxnhqBQ==", "license": "MIT", "dependencies": { - "tslib": "1.14.1" + "format": "^0.2.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" } }, - "node_modules/@walletconnect/web3wallet/node_modules/@walletconnect/types": { - "version": "2.17.1", - "resolved": "https://registry.npmjs.org/@walletconnect/types/-/types-2.17.1.tgz", - "integrity": "sha512-aiUeBE3EZZTsZBv5Cju3D0PWAsZCMks1g3hzQs9oNtrbuLL6pKKU0/zpKwk4vGywszxPvC3U0tBCku9LLsH/0A==", + "node_modules/faye-websocket": { + "version": "0.11.4", + "resolved": "https://registry.npmjs.org/faye-websocket/-/faye-websocket-0.11.4.tgz", + "integrity": "sha512-CzbClwlXAuiRQAlUyfqPgvPoNKTckTPGfwZV4ZdAhVcP2lh9KUxJg2b5GkE7XbjKQ3YJnQ9z6D9ntLAlB+tP8g==", "license": "Apache-2.0", "dependencies": { - "@walletconnect/events": "1.0.1", - "@walletconnect/heartbeat": "1.2.2", - "@walletconnect/jsonrpc-types": "1.0.4", - "@walletconnect/keyvaluestorage": "1.1.1", - "@walletconnect/logger": "2.1.2", - "events": "3.3.0" + "websocket-driver": ">=0.5.1" + }, + "engines": { + "node": ">=0.8.0" } }, - "node_modules/@walletconnect/web3wallet/node_modules/@walletconnect/utils": { - "version": "2.17.1", - "resolved": "https://registry.npmjs.org/@walletconnect/utils/-/utils-2.17.1.tgz", - "integrity": "sha512-KL7pPwq7qUC+zcTmvxGqIyYanfHgBQ+PFd0TEblg88jM7EjuDLhjyyjtkhyE/2q7QgR7OanIK7pCpilhWvBsBQ==", - "license": "Apache-2.0", - "dependencies": { - "@ethersproject/hash": "5.7.0", - "@ethersproject/transactions": "5.7.0", - "@stablelib/chacha20poly1305": "1.0.1", - "@stablelib/hkdf": "1.0.1", - "@stablelib/random": "1.0.2", - "@stablelib/sha256": "1.0.1", - "@stablelib/x25519": "1.0.3", - "@walletconnect/jsonrpc-utils": "1.0.8", - "@walletconnect/keyvaluestorage": "1.1.1", - "@walletconnect/relay-api": "1.0.11", - "@walletconnect/relay-auth": "1.0.4", - "@walletconnect/safe-json": "1.0.2", - "@walletconnect/time": "1.0.2", - "@walletconnect/types": "2.17.1", - "@walletconnect/window-getters": "1.0.1", - "@walletconnect/window-metadata": "1.0.1", - "detect-browser": "5.3.0", - "elliptic": "6.5.7", - "query-string": "7.1.3", - "uint8arrays": "3.1.0" + "node_modules/fb-dotslash": { + "version": "0.5.8", + "resolved": "https://registry.npmjs.org/fb-dotslash/-/fb-dotslash-0.5.8.tgz", + "integrity": "sha512-XHYLKk9J4BupDxi9bSEhkfss0m+Vr9ChTrjhf9l2iw3jB5C7BnY4GVPoMcqbrTutsKJso6yj2nAB6BI/F2oZaA==", + "license": "(MIT OR Apache-2.0)", + "peer": true, + "bin": { + "dotslash": "bin/dotslash" + }, + "engines": { + "node": ">=20" } }, - "node_modules/@walletconnect/web3wallet/node_modules/@walletconnect/window-getters": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@walletconnect/window-getters/-/window-getters-1.0.1.tgz", - "integrity": "sha512-vHp+HqzGxORPAN8gY03qnbTMnhqIwjeRJNOMOAzePRg4xVEEE2WvYsI9G2NMjOknA8hnuYbU3/hwLcKbjhc8+Q==", - "license": "MIT", + "node_modules/fb-watchman": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/fb-watchman/-/fb-watchman-2.0.2.tgz", + "integrity": "sha512-p5161BqbuCaSnB8jIbzQHOlpgsPmK5rJVDfDKO91Axs5NC1uu3HRQm6wt9cd9/+GtQQIO53JdGXXoyDpTAsgYA==", + "license": "Apache-2.0", "dependencies": { - "tslib": "1.14.1" + "bser": "2.1.1" } }, - "node_modules/@walletconnect/web3wallet/node_modules/@walletconnect/window-metadata": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@walletconnect/window-metadata/-/window-metadata-1.0.1.tgz", - "integrity": "sha512-9koTqyGrM2cqFRW517BPY/iEtUDx2r1+Pwwu5m7sJ7ka79wi3EyqhqcICk/yDmv6jAS1rjKgTKXlEhanYjijcA==", + "node_modules/fdir": { + "version": "6.5.0", + "resolved": "https://registry.npmjs.org/fdir/-/fdir-6.5.0.tgz", + "integrity": "sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg==", + "dev": true, "license": "MIT", - "dependencies": { - "@walletconnect/window-getters": "^1.0.1", - "tslib": "1.14.1" + "engines": { + "node": ">=12.0.0" + }, + "peerDependencies": { + "picomatch": "^3 || ^4" + }, + "peerDependenciesMeta": { + "picomatch": { + "optional": true + } } }, - "node_modules/@walletconnect/web3wallet/node_modules/bn.js": { - "version": "4.12.2", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.2.tgz", - "integrity": "sha512-n4DSx829VRTRByMRGdjQ9iqsN0Bh4OolPsFnaZBLcbi8iXcB+kJ9s7EnRt4wILZNV3kPLHkRVfOc/HvhC3ovDw==", + "node_modules/fecha": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/fecha/-/fecha-4.2.3.tgz", + "integrity": "sha512-OP2IUU6HeYKJi3i0z4A19kHMQoLVs4Hc+DPqqxI2h/DPZHTm/vjsfC6P0b4jCMy14XizLBqvndQ+UilD7707Jw==", "license": "MIT" }, - "node_modules/@walletconnect/web3wallet/node_modules/chokidar": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-4.0.3.tgz", - "integrity": "sha512-Qgzu8kfBvo+cA4962jnP1KkS6Dop5NS6g7R5LFYJr4b8Ub94PPQXUksCw9PvXoeXPRRddRNC5C1JQUR2SMGtnA==", + "node_modules/feed": { + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/feed/-/feed-4.2.2.tgz", + "integrity": "sha512-u5/sxGfiMfZNtJ3OvQpXcvotFpYkL0n9u9mM2vkui2nGo8b4wvDkJ8gAkYqbA8QpGyFCv3RK0Z+Iv+9veCS9bQ==", "license": "MIT", "dependencies": { - "readdirp": "^4.0.1" + "xml-js": "^1.6.11" }, "engines": { - "node": ">= 14.16.0" - }, - "funding": { - "url": "https://paulmillr.com/funding/" + "node": ">=0.4.0" } }, - "node_modules/@walletconnect/web3wallet/node_modules/elliptic": { - "version": "6.5.7", - "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.5.7.tgz", - "integrity": "sha512-ESVCtTwiA+XhY3wyh24QqRGBoP3rEdDUl3EDUUo9tft074fi19IrdpH7hLCMMP3CIj7jb3W96rn8lt/BqIlt5Q==", + "node_modules/fetch-blob": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/fetch-blob/-/fetch-blob-3.2.0.tgz", + "integrity": "sha512-7yAQpD2UMJzLi1Dqv7qFYnPbaPx7ZfFK6PiIxQ4PfkGPyNyl2Ugx+a/umUonmKqjhM4DnfbMvdX6otXq83soQQ==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/jimmywarting" + }, + { + "type": "paypal", + "url": "https://paypal.me/jimmywarting" + } + ], "license": "MIT", "dependencies": { - "bn.js": "^4.11.9", - "brorand": "^1.1.0", - "hash.js": "^1.0.0", - "hmac-drbg": "^1.0.1", - "inherits": "^2.0.4", - "minimalistic-assert": "^1.0.1", - "minimalistic-crypto-utils": "^1.0.1" + "node-domexception": "^1.0.0", + "web-streams-polyfill": "^3.0.3" + }, + "engines": { + "node": "^12.20 || >= 14.13" } }, - "node_modules/@walletconnect/web3wallet/node_modules/lru-cache": { - "version": "10.4.3", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz", - "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==", - "license": "ISC" - }, - "node_modules/@walletconnect/web3wallet/node_modules/multiformats": { - "version": "9.9.0", - "resolved": "https://registry.npmjs.org/multiformats/-/multiformats-9.9.0.tgz", - "integrity": "sha512-HoMUjhH9T8DDBNT+6xzkrd9ga/XiBI4xLr58LJACwK6G3HTOPeMz4nB4KJs33L2BelrIJa7P0VuNaVF3hMYfjg==", - "license": "(Apache-2.0 AND MIT)" + "node_modules/fetch-blob/node_modules/web-streams-polyfill": { + "version": "3.3.3", + "resolved": "https://registry.npmjs.org/web-streams-polyfill/-/web-streams-polyfill-3.3.3.tgz", + "integrity": "sha512-d2JWLCivmZYTSIoge9MsgFCZrt571BikcWGYkjC1khllbTeDlGqZ2D8vD8E/lJa8WGWbb7Plm8/XJYV7IJHZZw==", + "license": "MIT", + "engines": { + "node": ">= 8" + } }, - "node_modules/@walletconnect/web3wallet/node_modules/readdirp": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-4.1.2.tgz", - "integrity": "sha512-GDhwkLfywWL2s6vEjyhri+eXmfH6j1L7JE27WhqLeYzoh/A3DBaYGEj2H/HFZCn/kMfim73FXxEJTw06WtxQwg==", + "node_modules/figures": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/figures/-/figures-3.2.0.tgz", + "integrity": "sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg==", "license": "MIT", + "dependencies": { + "escape-string-regexp": "^1.0.5" + }, "engines": { - "node": ">= 14.18.0" + "node": ">=8" }, "funding": { - "type": "individual", - "url": "https://paulmillr.com/funding/" + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/@walletconnect/web3wallet/node_modules/tslib": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", - "license": "0BSD" + "node_modules/figures/node_modules/escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", + "license": "MIT", + "engines": { + "node": ">=0.8.0" + } }, - "node_modules/@walletconnect/web3wallet/node_modules/uint8arrays": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/uint8arrays/-/uint8arrays-3.1.0.tgz", - "integrity": "sha512-ei5rfKtoRO8OyOIor2Rz5fhzjThwIHJZ3uyDPnDHTXbP0aMQ1RN/6AI5B5d9dBxJOU+BvOAk7ZQ1xphsX8Lrog==", + "node_modules/file-entry-cache": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz", + "integrity": "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==", + "dev": true, "license": "MIT", "dependencies": { - "multiformats": "^9.4.2" + "flat-cache": "^3.0.4" + }, + "engines": { + "node": "^10.12.0 || >=12.0.0" } }, - "node_modules/@walletconnect/web3wallet/node_modules/unstorage": { - "version": "1.17.1", - "resolved": "https://registry.npmjs.org/unstorage/-/unstorage-1.17.1.tgz", - "integrity": "sha512-KKGwRTT0iVBCErKemkJCLs7JdxNVfqTPc/85ae1XES0+bsHbc/sFBfVi5kJp156cc51BHinIH2l3k0EZ24vOBQ==", + "node_modules/file-loader": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/file-loader/-/file-loader-6.2.0.tgz", + "integrity": "sha512-qo3glqyTa61Ytg4u73GultjHGjdRyig3tG6lPtyX/jOEJvHif9uB0/OCI2Kif6ctF3caQTW2G5gym21oAsI4pw==", "license": "MIT", "dependencies": { - "anymatch": "^3.1.3", - "chokidar": "^4.0.3", - "destr": "^2.0.5", - "h3": "^1.15.4", - "lru-cache": "^10.4.3", - "node-fetch-native": "^1.6.7", - "ofetch": "^1.4.1", - "ufo": "^1.6.1" + "loader-utils": "^2.0.0", + "schema-utils": "^3.0.0" }, - "peerDependencies": { - "@azure/app-configuration": "^1.8.0", - "@azure/cosmos": "^4.2.0", - "@azure/data-tables": "^13.3.0", - "@azure/identity": "^4.6.0", - "@azure/keyvault-secrets": "^4.9.0", - "@azure/storage-blob": "^12.26.0", - "@capacitor/preferences": "^6.0.3 || ^7.0.0", - "@deno/kv": ">=0.9.0", - "@netlify/blobs": "^6.5.0 || ^7.0.0 || ^8.1.0 || ^9.0.0 || ^10.0.0", - "@planetscale/database": "^1.19.0", - "@upstash/redis": "^1.34.3", - "@vercel/blob": ">=0.27.1", - "@vercel/functions": "^2.2.12 || ^3.0.0", - "@vercel/kv": "^1.0.1", - "aws4fetch": "^1.0.20", - "db0": ">=0.2.1", - "idb-keyval": "^6.2.1", - "ioredis": "^5.4.2", - "uploadthing": "^7.4.4" + "engines": { + "node": ">= 10.13.0" }, - "peerDependenciesMeta": { - "@azure/app-configuration": { - "optional": true - }, - "@azure/cosmos": { - "optional": true - }, - "@azure/data-tables": { - "optional": true - }, - "@azure/identity": { - "optional": true - }, - "@azure/keyvault-secrets": { - "optional": true - }, - "@azure/storage-blob": { - "optional": true - }, - "@capacitor/preferences": { - "optional": true - }, - "@deno/kv": { - "optional": true - }, - "@netlify/blobs": { - "optional": true - }, - "@planetscale/database": { - "optional": true - }, - "@upstash/redis": { - "optional": true - }, - "@vercel/blob": { - "optional": true - }, - "@vercel/functions": { - "optional": true - }, - "@vercel/kv": { - "optional": true - }, - "aws4fetch": { - "optional": true - }, - "db0": { - "optional": true - }, - "idb-keyval": { - "optional": true - }, - "ioredis": { - "optional": true - }, - "uploadthing": { - "optional": true - } + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "webpack": "^4.0.0 || ^5.0.0" } }, - "node_modules/@walletconnect/window-getters": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/@walletconnect/window-getters/-/window-getters-1.0.0.tgz", - "integrity": "sha512-xB0SQsLaleIYIkSsl43vm8EwETpBzJ2gnzk7e0wMF3ktqiTGS6TFHxcprMl5R44KKh4tCcHCJwolMCaDSwtAaA==", - "license": "MIT" - }, - "node_modules/@walletconnect/window-metadata": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/@walletconnect/window-metadata/-/window-metadata-1.0.0.tgz", - "integrity": "sha512-9eFvmJxIKCC3YWOL97SgRkKhlyGXkrHwamfechmqszbypFspaSk+t2jQXAEU7YClHF6Qjw5eYOmy1//zFi9/GA==", + "node_modules/file-stream-rotator": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/file-stream-rotator/-/file-stream-rotator-0.6.1.tgz", + "integrity": "sha512-u+dBid4PvZw17PmDeRcNOtCP9CCK/9lRN2w+r1xIS7yOL9JFrIBKTvrYsxT4P0pGtThYTn++QS5ChHaUov3+zQ==", "license": "MIT", "dependencies": { - "@walletconnect/window-getters": "^1.0.0" + "moment": "^2.29.1" } }, - "node_modules/@webassemblyjs/ast": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.14.1.tgz", - "integrity": "sha512-nuBEDgQfm1ccRp/8bCQrx1frohyufl4JlbMMZ4P1wpeOfDhF6FQkxZJ1b/e+PLwr6X1Nhw6OLme5usuBWYBvuQ==", - "license": "MIT", + "node_modules/fileset": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/fileset/-/fileset-0.2.1.tgz", + "integrity": "sha512-aK3PFyHSwWsBJCarRxMRIXSGamfroi9ehG8f4e5A2n5nSlEVHe8y44jNTIN4+HdZSpK3FNV0EdihH1iDWTdnGg==", + "dev": true, "dependencies": { - "@webassemblyjs/helper-numbers": "1.13.2", - "@webassemblyjs/helper-wasm-bytecode": "1.13.2" + "glob": "5.x", + "minimatch": "2.x" } }, - "node_modules/@webassemblyjs/floating-point-hex-parser": { - "version": "1.13.2", - "resolved": "https://registry.npmjs.org/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.13.2.tgz", - "integrity": "sha512-6oXyTOzbKxGH4steLbLNOu71Oj+C8Lg34n6CqRvqfS2O71BxY6ByfMDRhBytzknj9yGUPVJ1qIKhRlAwO1AovA==", - "license": "MIT" - }, - "node_modules/@webassemblyjs/helper-api-error": { - "version": "1.13.2", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.13.2.tgz", - "integrity": "sha512-U56GMYxy4ZQCbDZd6JuvvNV/WFildOjsaWD3Tzzvmw/mas3cXzRJPMjP83JqEsgSbyrmaGjBfDtV7KDXV9UzFQ==", - "license": "MIT" - }, - "node_modules/@webassemblyjs/helper-buffer": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.14.1.tgz", - "integrity": "sha512-jyH7wtcHiKssDtFPRB+iQdxlDf96m0E39yb0k5uJVhFGleZFoNw1c4aeIcVUPPbXUVJ94wwnMOAqUHyzoEPVMA==", - "license": "MIT" - }, - "node_modules/@webassemblyjs/helper-numbers": { - "version": "1.13.2", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-numbers/-/helper-numbers-1.13.2.tgz", - "integrity": "sha512-FE8aCmS5Q6eQYcV3gI35O4J789wlQA+7JrqTTpJqn5emA4U2hvwJmvFRC0HODS+3Ye6WioDklgd6scJ3+PLnEA==", - "license": "MIT", + "node_modules/fileset/node_modules/glob": { + "version": "5.0.15", + "resolved": "https://registry.npmjs.org/glob/-/glob-5.0.15.tgz", + "integrity": "sha512-c9IPMazfRITpmAAKi22dK1VKxGDX9ehhqfABDriL/lzO92xcUKEJPQHrVA/2YHSNFB4iFlykVmWvwo48nr3OxA==", + "deprecated": "Glob versions prior to v9 are no longer supported", + "dev": true, + "license": "ISC", "dependencies": { - "@webassemblyjs/floating-point-hex-parser": "1.13.2", - "@webassemblyjs/helper-api-error": "1.13.2", - "@xtuc/long": "4.2.2" + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "2 || 3", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" } }, - "node_modules/@webassemblyjs/helper-wasm-bytecode": { - "version": "1.13.2", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.13.2.tgz", - "integrity": "sha512-3QbLKy93F0EAIXLh0ogEVR6rOubA9AoZ+WRYhNbFyuB70j3dRdwH9g+qXhLAO0kiYGlg3TxDV+I4rQTr/YNXkA==", - "license": "MIT" + "node_modules/fileset/node_modules/minimatch": { + "version": "2.0.10", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-2.0.10.tgz", + "integrity": "sha512-jQo6o1qSVLEWaw3l+bwYA2X0uLuK2KjNh2wjgO7Q/9UJnXr1Q3yQKR8BI0/Bt/rPg75e6SMW4hW/6cBHVTZUjA==", + "deprecated": "Please update to minimatch 3.0.2 or higher to avoid a RegExp DoS issue", + "dev": true, + "license": "ISC", + "dependencies": { + "brace-expansion": "^1.0.0" + }, + "engines": { + "node": "*" + } }, - "node_modules/@webassemblyjs/helper-wasm-section": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.14.1.tgz", - "integrity": "sha512-ds5mXEqTJ6oxRoqjhWDU83OgzAYjwsCV8Lo/N+oRsNDmx/ZDpqalmrtgOMkHwxsG0iI//3BwWAErYRHtgn0dZw==", + "node_modules/fill-range": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz", + "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==", "license": "MIT", "dependencies": { - "@webassemblyjs/ast": "1.14.1", - "@webassemblyjs/helper-buffer": "1.14.1", - "@webassemblyjs/helper-wasm-bytecode": "1.13.2", - "@webassemblyjs/wasm-gen": "1.14.1" + "to-regex-range": "^5.0.1" + }, + "engines": { + "node": ">=8" } }, - "node_modules/@webassemblyjs/ieee754": { - "version": "1.13.2", - "resolved": "https://registry.npmjs.org/@webassemblyjs/ieee754/-/ieee754-1.13.2.tgz", - "integrity": "sha512-4LtOzh58S/5lX4ITKxnAK2USuNEvpdVV9AlgGQb8rJDHaLeHciwG4zlGr0j/SNWlr7x3vO1lDEsuePvtcDNCkw==", + "node_modules/filter-obj": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/filter-obj/-/filter-obj-1.1.0.tgz", + "integrity": "sha512-8rXg1ZnX7xzy2NGDVkBVaAy+lSlPNwad13BtgSlLuxfIslyt5Vg64U7tFcCt4WS1R0hvtnQybT/IyCkGZ3DpXQ==", "license": "MIT", - "dependencies": { - "@xtuc/ieee754": "^1.2.0" + "engines": { + "node": ">=0.10.0" } }, - "node_modules/@webassemblyjs/leb128": { - "version": "1.13.2", - "resolved": "https://registry.npmjs.org/@webassemblyjs/leb128/-/leb128-1.13.2.tgz", - "integrity": "sha512-Lde1oNoIdzVzdkNEAWZ1dZ5orIbff80YPdHx20mrHwHrVNNTjNr8E3xz9BdpcGqRQbAEa+fkrCb+fRFTl/6sQw==", - "license": "Apache-2.0", + "node_modules/finalhandler": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-2.1.0.tgz", + "integrity": "sha512-/t88Ty3d5JWQbWYgaOGCCYfXRwV1+be02WqYYlL6h0lEiUAMPM8o8qKGO01YIkOHzka2up08wvgYD0mDiI+q3Q==", + "license": "MIT", "dependencies": { - "@xtuc/long": "4.2.2" + "debug": "^4.4.0", + "encodeurl": "^2.0.0", + "escape-html": "^1.0.3", + "on-finished": "^2.4.1", + "parseurl": "^1.3.3", + "statuses": "^2.0.1" + }, + "engines": { + "node": ">= 0.8" } }, - "node_modules/@webassemblyjs/utf8": { - "version": "1.13.2", - "resolved": "https://registry.npmjs.org/@webassemblyjs/utf8/-/utf8-1.13.2.tgz", - "integrity": "sha512-3NQWGjKTASY1xV5m7Hr0iPeXD9+RDobLll3T9d2AO+g3my8xy5peVyjSag4I50mR1bBSN/Ct12lo+R9tJk0NZQ==", - "license": "MIT" - }, - "node_modules/@webassemblyjs/wasm-edit": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.14.1.tgz", - "integrity": "sha512-RNJUIQH/J8iA/1NzlE4N7KtyZNHi3w7at7hDjvRNm5rcUXa00z1vRz3glZoULfJ5mpvYhLybmVcwcjGrC1pRrQ==", + "node_modules/find-cache-dir": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-4.0.0.tgz", + "integrity": "sha512-9ZonPT4ZAK4a+1pUPVPZJapbi7O5qbbJPdYw/NOQWZZbVLdDTYM3A4R9z/DpAM08IDaFGsvPgiGZ82WEwUDWjg==", "license": "MIT", "dependencies": { - "@webassemblyjs/ast": "1.14.1", - "@webassemblyjs/helper-buffer": "1.14.1", - "@webassemblyjs/helper-wasm-bytecode": "1.13.2", - "@webassemblyjs/helper-wasm-section": "1.14.1", - "@webassemblyjs/wasm-gen": "1.14.1", - "@webassemblyjs/wasm-opt": "1.14.1", - "@webassemblyjs/wasm-parser": "1.14.1", - "@webassemblyjs/wast-printer": "1.14.1" + "common-path-prefix": "^3.0.0", + "pkg-dir": "^7.0.0" + }, + "engines": { + "node": ">=14.16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/@webassemblyjs/wasm-gen": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.14.1.tgz", - "integrity": "sha512-AmomSIjP8ZbfGQhumkNvgC33AY7qtMCXnN6bL2u2Js4gVCg8fp735aEiMSBbDR7UQIj90n4wKAFUSEd0QN2Ukg==", + "node_modules/find-cache-dir/node_modules/find-up": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-6.3.0.tgz", + "integrity": "sha512-v2ZsoEuVHYy8ZIlYqwPe/39Cy+cFDzp4dXPaxNvkEuouymu+2Jbz0PxpKarJHYJTmv2HWT3O382qY8l4jMWthw==", "license": "MIT", "dependencies": { - "@webassemblyjs/ast": "1.14.1", - "@webassemblyjs/helper-wasm-bytecode": "1.13.2", - "@webassemblyjs/ieee754": "1.13.2", - "@webassemblyjs/leb128": "1.13.2", - "@webassemblyjs/utf8": "1.13.2" + "locate-path": "^7.1.0", + "path-exists": "^5.0.0" + }, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/@webassemblyjs/wasm-opt": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.14.1.tgz", - "integrity": "sha512-PTcKLUNvBqnY2U6E5bdOQcSM+oVP/PmrDY9NzowJjislEjwP/C4an2303MCVS2Mg9d3AJpIGdUFIQQWbPds0Sw==", + "node_modules/find-cache-dir/node_modules/locate-path": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-7.2.0.tgz", + "integrity": "sha512-gvVijfZvn7R+2qyPX8mAuKcFGDf6Nc61GdvGafQsHL0sBIxfKzA+usWn4GFC/bk+QdwPUD4kWFJLhElipq+0VA==", "license": "MIT", "dependencies": { - "@webassemblyjs/ast": "1.14.1", - "@webassemblyjs/helper-buffer": "1.14.1", - "@webassemblyjs/wasm-gen": "1.14.1", - "@webassemblyjs/wasm-parser": "1.14.1" + "p-locate": "^6.0.0" + }, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/@webassemblyjs/wasm-parser": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.14.1.tgz", - "integrity": "sha512-JLBl+KZ0R5qB7mCnud/yyX08jWFw5MsoalJ1pQ4EdFlgj9VdXKGuENGsiCIjegI1W7p91rUlcB/LB5yRJKNTcQ==", + "node_modules/find-cache-dir/node_modules/p-limit": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-4.0.0.tgz", + "integrity": "sha512-5b0R4txpzjPWVw/cXXUResoD4hb6U/x9BH08L7nw+GN1sezDzPdxeRvpc9c433fZhBan/wusjbCsqwqm4EIBIQ==", "license": "MIT", "dependencies": { - "@webassemblyjs/ast": "1.14.1", - "@webassemblyjs/helper-api-error": "1.13.2", - "@webassemblyjs/helper-wasm-bytecode": "1.13.2", - "@webassemblyjs/ieee754": "1.13.2", - "@webassemblyjs/leb128": "1.13.2", - "@webassemblyjs/utf8": "1.13.2" + "yocto-queue": "^1.0.0" + }, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/@webassemblyjs/wast-printer": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.14.1.tgz", - "integrity": "sha512-kPSSXE6De1XOR820C90RIo2ogvZG+c3KiHzqUoO/F34Y2shGzesfqv7o57xrxovZJH/MetF5UjroJ/R/3isoiw==", + "node_modules/find-cache-dir/node_modules/p-locate": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-6.0.0.tgz", + "integrity": "sha512-wPrq66Llhl7/4AGC6I+cqxT07LhXvWL08LNXz1fENOw0Ap4sRZZ/gZpTTJ5jpurzzzfS2W/Ge9BY3LgLjCShcw==", "license": "MIT", "dependencies": { - "@webassemblyjs/ast": "1.14.1", - "@xtuc/long": "4.2.2" + "p-limit": "^4.0.0" + }, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/@xtuc/ieee754": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@xtuc/ieee754/-/ieee754-1.2.0.tgz", - "integrity": "sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA==", - "license": "BSD-3-Clause" - }, - "node_modules/@xtuc/long": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/@xtuc/long/-/long-4.2.2.tgz", - "integrity": "sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ==", - "license": "Apache-2.0" - }, - "node_modules/@zag-js/element-size": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/@zag-js/element-size/-/element-size-0.3.2.tgz", - "integrity": "sha512-bVvvigUGvAuj7PCkE5AbzvTJDTw5f3bg9nQdv+ErhVN8SfPPppLJEmmWdxqsRzrHXgx8ypJt/+Ty0kjtISVDsQ==", - "license": "MIT" - }, - "node_modules/@zag-js/focus-visible": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/@zag-js/focus-visible/-/focus-visible-0.2.2.tgz", - "integrity": "sha512-0j2gZq8HiZ51z4zNnSkF1iSkqlwRDvdH+son3wHdoz+7IUdMN/5Exd4TxMJ+gq2Of1DiXReYLL9qqh2PdQ4wgA==", - "license": "MIT" - }, - "node_modules/abab": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/abab/-/abab-2.0.6.tgz", - "integrity": "sha512-j2afSsaIENvHZN2B8GOpF566vZ5WVk5opAiMTvWgaQT8DkbOqsTfvNAvHoRGU2zzP8cPoqys+xHTRDWW8L+/BA==", - "deprecated": "Use your platform's native atob() and btoa() methods instead", - "dev": true, - "license": "BSD-3-Clause" - }, - "node_modules/abbrev": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz", - "integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==", - "license": "ISC", - "optional": true + "node_modules/find-cache-dir/node_modules/path-exists": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-5.0.0.tgz", + "integrity": "sha512-RjhtfwJOxzcFmNOi6ltcbcu4Iu+FL3zEj83dk4kAS+fVpTxXLO1b38RvJgT/0QwvV/L3aY9TAnyv0EOqW4GoMQ==", + "license": "MIT", + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + } }, - "node_modules/abitype": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/abitype/-/abitype-1.1.1.tgz", - "integrity": "sha512-Loe5/6tAgsBukY95eGaPSDmQHIjRZYQq8PB1MpsNccDIK8WiV+Uw6WzaIXipvaxTEL2yEB0OpEaQv3gs8pkS9Q==", + "node_modules/find-cache-dir/node_modules/pkg-dir": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-7.0.0.tgz", + "integrity": "sha512-Ie9z/WINcxxLp27BKOCHGde4ITq9UklYKDzVo1nhk5sqGEXU3FpkwP5GM2voTGJkGd9B3Otl+Q4uwSOeSUtOBA==", "license": "MIT", - "funding": { - "url": "https://github.com/sponsors/wevm" + "dependencies": { + "find-up": "^6.3.0" }, - "peerDependencies": { - "typescript": ">=5.0.4", - "zod": "^3.22.0 || ^4.0.0" + "engines": { + "node": ">=14.16" }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - }, - "zod": { - "optional": true - } + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/abort-controller": { + "node_modules/find-replace": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/abort-controller/-/abort-controller-3.0.0.tgz", - "integrity": "sha512-h8lQ8tacZYnR3vNQTgibj+tODHI5/+l06Au2Pcriv/Gmet0eaj4TwWH41sO9wnHDiQsEj19q0drzdWdeAHtweg==", + "resolved": "https://registry.npmjs.org/find-replace/-/find-replace-3.0.0.tgz", + "integrity": "sha512-6Tb2myMioCAgv5kfvP5/PkZZ/ntTpVK39fHY7WkWBgvbeE+VHd/tZuZ4mrC+bxh4cfOZeYKVPaJIZtZXV7GNCQ==", + "devOptional": true, "license": "MIT", "dependencies": { - "event-target-shim": "^5.0.0" + "array-back": "^3.0.1" }, "engines": { - "node": ">=6.5" + "node": ">=4.0.0" } }, - "node_modules/abortcontroller-polyfill": { - "version": "1.7.8", - "resolved": "https://registry.npmjs.org/abortcontroller-polyfill/-/abortcontroller-polyfill-1.7.8.tgz", - "integrity": "sha512-9f1iZ2uWh92VcrU9Y8x+LdM4DLj75VE0MJB8zuF1iUnroEptStw+DQ8EQPMUdfe5k+PkB1uUfDQfWbhstH8LrQ==", + "node_modules/find-root": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/find-root/-/find-root-1.1.0.tgz", + "integrity": "sha512-NKfW6bec6GfKc0SGx1e07QZY9PE99u0Bft/0rzSD5k3sO/vwkVUpDUKVm5Gpp5Ue3YfShPFTX2070tDs5kB9Ng==", "license": "MIT" }, - "node_modules/accepts": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/accepts/-/accepts-2.0.0.tgz", - "integrity": "sha512-5cvg6CtKwfgdmVqY1WIiXKc3Q1bkRqGLi+2W/6ao+6Y7gu/RCwRuAhGEzh5B4KlszSuTLgZYuqFqo5bImjNKng==", + "node_modules/find-up": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", + "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", + "dev": true, "license": "MIT", - "peer": true, "dependencies": { - "mime-types": "^3.0.0", - "negotiator": "^1.0.0" + "locate-path": "^6.0.0", + "path-exists": "^4.0.0" }, "engines": { - "node": ">= 0.6" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/acorn": { - "version": "8.15.0", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.15.0.tgz", - "integrity": "sha512-NZyJarBfL7nWwIq+FDL6Zp/yHEhePMNnnJ0y3qfieCrmNvYct8uvtiV41UvlSe6apAfk0fY1FbWx+NwfmpvtTg==", + "node_modules/fireblocks-sdk": { + "version": "5.11.0", + "resolved": "https://registry.npmjs.org/fireblocks-sdk/-/fireblocks-sdk-5.11.0.tgz", + "integrity": "sha512-a21ekRNUgVBiu7dtDCPUDRPs/CUGCe22/FrEJxA5y0swU7+wsLvZyTokyGxyaiGwYwRw9nuX8sGTErjPw5FRow==", "license": "MIT", - "bin": { - "acorn": "bin/acorn" - }, - "engines": { - "node": ">=0.4.0" + "dependencies": { + "@notabene/pii-sdk": "^1.16.0", + "axios": "^0.27.2", + "jsonwebtoken": "9.0.0", + "platform": "^1.3.6", + "qs": "^6.11.0", + "query-string": "^7.1.3", + "uuid": "^8.3.2" } }, - "node_modules/acorn-globals": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/acorn-globals/-/acorn-globals-7.0.1.tgz", - "integrity": "sha512-umOSDSDrfHbTNPuNpC2NSnnA3LUrqpevPb4T9jRx4MagXNS0rs+gwiTcAvqCRmsD6utzsrzNt+ebm00SNWiC3Q==", - "dev": true, + "node_modules/fireblocks-sdk/node_modules/axios": { + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/axios/-/axios-0.27.2.tgz", + "integrity": "sha512-t+yRIyySRTp/wua5xEr+z1q60QmLq8ABsS5O9Me1AsE5dfKqgnCFzwiCZZ/cGNd1lq4/7akDWMxdhVlucjmnOQ==", "license": "MIT", "dependencies": { - "acorn": "^8.1.0", - "acorn-walk": "^8.0.2" + "follow-redirects": "^1.14.9", + "form-data": "^4.0.0" } }, - "node_modules/acorn-import-assertions": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/acorn-import-assertions/-/acorn-import-assertions-1.9.0.tgz", - "integrity": "sha512-cmMwop9x+8KFhxvKrKfPYmN6/pKTYYHBqLa0DfvVZcKMJWNyWLnaqND7dx/qn66R7ewM1UX5XMaDVP5wlVTaVA==", - "deprecated": "package has been renamed to acorn-import-attributes", + "node_modules/fireblocks-sdk/node_modules/uuid": { + "version": "8.3.2", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", + "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==", "license": "MIT", - "peerDependencies": { - "acorn": "^8" + "bin": { + "uuid": "dist/bin/uuid" } }, - "node_modules/acorn-jsx": { - "version": "5.3.2", - "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", - "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", - "dev": true, - "license": "MIT", - "peerDependencies": { - "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" + "node_modules/flat": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/flat/-/flat-5.0.2.tgz", + "integrity": "sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ==", + "license": "BSD-3-Clause", + "bin": { + "flat": "cli.js" } }, - "node_modules/acorn-walk": { - "version": "8.3.4", - "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.3.4.tgz", - "integrity": "sha512-ueEepnujpqee2o5aIYnvHU6C0A42MNdsIDeqy5BydrkuC5R1ZuUFnm27EeFJGoEHJQgn3uleRvmTXaJgfXbt4g==", - "devOptional": true, + "node_modules/flat-cache": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.2.0.tgz", + "integrity": "sha512-CYcENa+FtcUKLmhhqyctpclsq7QF38pKjZHsGNiSQF5r4FtoKDWabFDl3hzaEQMvT1LHEysw5twgLvpYYb4vbw==", + "dev": true, "license": "MIT", "dependencies": { - "acorn": "^8.11.0" + "flatted": "^3.2.9", + "keyv": "^4.5.3", + "rimraf": "^3.0.2" }, "engines": { - "node": ">=0.4.0" + "node": "^10.12.0 || >=12.0.0" } }, - "node_modules/add": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/add/-/add-2.0.6.tgz", - "integrity": "sha512-j5QzrmsokwWWp6kUcJQySpbG+xfOBqqKnup3OIk1pz+kB/80SLorZ9V8zHFLO92Lcd+hbvq8bT+zOGoPkmBV0Q==", - "license": "MIT" - }, - "node_modules/adm-zip": { - "version": "0.4.16", - "resolved": "https://registry.npmjs.org/adm-zip/-/adm-zip-0.4.16.tgz", - "integrity": "sha512-TFi4HBKSGfIKsK5YCkKaaFG2m4PEDyViZmEwof3MTIgzimHLto6muaHVpbrljdIvIrFZzEq/p4nafOeLcYegrg==", + "node_modules/flat-cache/node_modules/glob": { + "version": "7.2.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", + "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", + "deprecated": "Glob versions prior to v9 are no longer supported", "dev": true, - "license": "MIT", + "license": "ISC", + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.1.1", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, "engines": { - "node": ">=0.3.0" + "node": "*" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/aes-js": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/aes-js/-/aes-js-3.0.0.tgz", - "integrity": "sha512-H7wUZRn8WpTq9jocdxQ2c8x2sKo9ZVmzfRE13GiNJXfp7NcKYEdvl3vspKjXox6RIG2VtaRe4JFvxG4rqp2Zuw==", + "node_modules/flat-cache/node_modules/rimraf": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", + "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", + "deprecated": "Rimraf versions prior to v4 are no longer supported", + "dev": true, + "license": "ISC", + "dependencies": { + "glob": "^7.1.3" + }, + "bin": { + "rimraf": "bin.js" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/flatted": { + "version": "3.3.3", + "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.3.3.tgz", + "integrity": "sha512-GX+ysw4PBCz0PzosHDepZGANEuFCMLrnRTiEy9McGjmkCQYwRq4A/X786G/fjM/+OjsWSU1ZrY5qyARZmO/uwg==", + "dev": true, + "license": "ISC" + }, + "node_modules/flow-enums-runtime": { + "version": "0.0.6", + "resolved": "https://registry.npmjs.org/flow-enums-runtime/-/flow-enums-runtime-0.0.6.tgz", + "integrity": "sha512-3PYnM29RFXwvAN6Pc/scUfkI7RwhQ/xqyLUyPNlXUp9S40zI8nup9tUSrTLSVnWGBN38FNiGWbwZOB6uR4OGdw==", "license": "MIT" }, - "node_modules/agent-base": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz", - "integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==", - "devOptional": true, + "node_modules/fn.name": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/fn.name/-/fn.name-1.1.0.tgz", + "integrity": "sha512-GRnmB5gPyJpAhTQdSZTSp9uaPSvl09KoYcMQtsB9rQoOmzs9dH6ffeccH+Z+cv6P68Hu5bC6JjRh4Ah/mHSNRw==", + "license": "MIT" + }, + "node_modules/focus-lock": { + "version": "1.3.6", + "resolved": "https://registry.npmjs.org/focus-lock/-/focus-lock-1.3.6.tgz", + "integrity": "sha512-Ik/6OCk9RQQ0T5Xw+hKNLWrjSMtv51dD4GRmJjbD5a58TIEpI5a5iXagKVl3Z5UuyslMCA8Xwnu76jQob62Yhg==", "license": "MIT", "dependencies": { - "debug": "4" + "tslib": "^2.0.3" }, "engines": { - "node": ">= 6.0.0" + "node": ">=10" } }, - "node_modules/agentkeepalive": { - "version": "4.6.0", - "resolved": "https://registry.npmjs.org/agentkeepalive/-/agentkeepalive-4.6.0.tgz", - "integrity": "sha512-kja8j7PjmncONqaTsB8fQ+wE2mSU2DJ9D4XKoJ5PFWIdRMa6SLSN1ff4mOr4jCbfRSsxR4keIiySJU0N9T5hIQ==", - "dev": true, + "node_modules/follow-redirects": { + "version": "1.15.11", + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.11.tgz", + "integrity": "sha512-deG2P0JfjrTxl50XGCDyfI97ZGVCxIpfKYmfyrQ54n5FO/0gfIES8C/Psl6kWVDolizcaaxZJnTS0QSMxvnsBQ==", + "funding": [ + { + "type": "individual", + "url": "https://github.com/sponsors/RubenVerborgh" + } + ], "license": "MIT", - "dependencies": { - "humanize-ms": "^1.2.1" - }, "engines": { - "node": ">= 8.0.0" + "node": ">=4.0" + }, + "peerDependenciesMeta": { + "debug": { + "optional": true + } } }, - "node_modules/aggregate-error": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/aggregate-error/-/aggregate-error-3.1.0.tgz", - "integrity": "sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==", - "dev": true, + "node_modules/for-each": { + "version": "0.3.5", + "resolved": "https://registry.npmjs.org/for-each/-/for-each-0.3.5.tgz", + "integrity": "sha512-dKx12eRCVIzqCxFGplyFKJMPvLEWgmNtUrpTiJIR5u97zEhRG8ySrtboPHZXx7daLxQVrl643cTzbab2tkQjxg==", "license": "MIT", "dependencies": { - "clean-stack": "^2.0.0", - "indent-string": "^4.0.0" + "is-callable": "^1.2.7" }, "engines": { - "node": ">=8" + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/ajv": { - "version": "6.12.6", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", - "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", - "license": "MIT", + "node_modules/foreground-child": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-3.3.1.tgz", + "integrity": "sha512-gIXjKqtFuWEgzFRJA9WCQeSJLZDjgJUOMCMzxtvFq/37KojM1BFGufqsCy0r4qSQmYLsZYMeyRqzIWOMup03sw==", + "license": "ISC", "dependencies": { - "fast-deep-equal": "^3.1.1", - "fast-json-stable-stringify": "^2.0.0", - "json-schema-traverse": "^0.4.1", - "uri-js": "^4.2.2" + "cross-spawn": "^7.0.6", + "signal-exit": "^4.0.1" + }, + "engines": { + "node": ">=14" }, "funding": { - "type": "github", - "url": "https://github.com/sponsors/epoberezkin" + "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/ajv-formats": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ajv-formats/-/ajv-formats-2.1.1.tgz", - "integrity": "sha512-Wx0Kx52hxE7C18hkMEggYlEifqWZtYaRgouJor+WMdPnQyEK13vgEWyVNup7SoeeoLMsr4kf5h6dOW11I15MUA==", + "node_modules/forge-light": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/forge-light/-/forge-light-1.1.4.tgz", + "integrity": "sha512-Nr0xdu93LJawgBZVU/tC+A+4pbKqigdY5PRBz8CXNm4e5saAZIqU2Qe9+nVFtVO5TWCHSgvI0LaZZuatgE5J1g==", + "license": "(BSD-3-Clause OR GPL-2.0)", + "engines": { + "node": ">= 6.13.0" + } + }, + "node_modules/fork-ts-checker-webpack-plugin": { + "version": "9.0.2", + "resolved": "https://registry.npmjs.org/fork-ts-checker-webpack-plugin/-/fork-ts-checker-webpack-plugin-9.0.2.tgz", + "integrity": "sha512-Uochze2R8peoN1XqlSi/rGUkDQpRogtLFocP9+PGu68zk1BDAKXfdeCdyVZpgTk8V8WFVQXdEz426VKjXLO1Gg==", "license": "MIT", "dependencies": { - "ajv": "^8.0.0" + "@babel/code-frame": "^7.16.7", + "chalk": "^4.1.2", + "chokidar": "^3.5.3", + "cosmiconfig": "^8.2.0", + "deepmerge": "^4.2.2", + "fs-extra": "^10.0.0", + "memfs": "^3.4.1", + "minimatch": "^3.0.4", + "node-abort-controller": "^3.0.1", + "schema-utils": "^3.1.1", + "semver": "^7.3.5", + "tapable": "^2.2.1" }, - "peerDependencies": { - "ajv": "^8.0.0" + "engines": { + "node": ">=12.13.0", + "yarn": ">=1.0.0" }, - "peerDependenciesMeta": { - "ajv": { - "optional": true - } + "peerDependencies": { + "typescript": ">3.6.0", + "webpack": "^5.11.0" } }, - "node_modules/ajv-formats/node_modules/ajv": { - "version": "8.17.1", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.17.1.tgz", - "integrity": "sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g==", + "node_modules/fork-ts-checker-webpack-plugin/node_modules/cosmiconfig": { + "version": "8.3.6", + "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-8.3.6.tgz", + "integrity": "sha512-kcZ6+W5QzcJ3P1Mt+83OUv/oHFqZHIx8DuxG6eZ5RGMERoLqp4BuGjhHLYGK+Kf5XVkQvqBSmAy/nGWN3qDgEA==", "license": "MIT", "dependencies": { - "fast-deep-equal": "^3.1.3", - "fast-uri": "^3.0.1", - "json-schema-traverse": "^1.0.0", - "require-from-string": "^2.0.2" + "import-fresh": "^3.3.0", + "js-yaml": "^4.1.0", + "parse-json": "^5.2.0", + "path-type": "^4.0.0" + }, + "engines": { + "node": ">=14" }, "funding": { - "type": "github", - "url": "https://github.com/sponsors/epoberezkin" + "url": "https://github.com/sponsors/d-fischer" + }, + "peerDependencies": { + "typescript": ">=4.9.5" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } } }, - "node_modules/ajv-formats/node_modules/json-schema-traverse": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", - "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", - "license": "MIT" - }, - "node_modules/ajv-keywords": { - "version": "3.5.2", - "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.2.tgz", - "integrity": "sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==", - "license": "MIT", - "peerDependencies": { - "ajv": "^6.9.1" + "node_modules/fork-ts-checker-webpack-plugin/node_modules/fs-extra": { + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-10.1.0.tgz", + "integrity": "sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==", + "license": "MIT", + "dependencies": { + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + }, + "engines": { + "node": ">=12" } }, - "node_modules/amazon-cognito-identity-js": { - "version": "6.3.15", - "resolved": "https://registry.npmjs.org/amazon-cognito-identity-js/-/amazon-cognito-identity-js-6.3.15.tgz", - "integrity": "sha512-G2mzTlGYHKYh9oZDO0Gk94xVQ4iY9GYWBaYScbDYvz05ps6dqi0IvdNx1Lxi7oA3tjS5X+mUN7/svFJJdOB9YA==", - "dev": true, - "license": "Apache-2.0", + "node_modules/fork-ts-checker-webpack-plugin/node_modules/jsonfile": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.2.0.tgz", + "integrity": "sha512-FGuPw30AdOIUTRMC2OMRtQV+jkVj2cfPqSeWXv1NEAJ1qZ5zb1X6z1mFhbfOB/iy3ssJCD+3KuZ8r8C3uVFlAg==", + "license": "MIT", "dependencies": { - "@aws-crypto/sha256-js": "1.2.2", - "buffer": "4.9.2", - "fast-base64-decode": "^1.0.0", - "isomorphic-unfetch": "^3.0.0", - "js-cookie": "^2.2.1" + "universalify": "^2.0.0" + }, + "optionalDependencies": { + "graceful-fs": "^4.1.6" } }, - "node_modules/amazon-cognito-identity-js/node_modules/@aws-crypto/sha256-js": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/@aws-crypto/sha256-js/-/sha256-js-1.2.2.tgz", - "integrity": "sha512-Nr1QJIbW/afYYGzYvrF70LtaHrIRtd4TNAglX8BvlfxJLZ45SAmueIKYl5tWoNBPzp65ymXGFK0Bb1vZUpuc9g==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "@aws-crypto/util": "^1.2.2", - "@aws-sdk/types": "^3.1.0", - "tslib": "^1.11.1" + "node_modules/fork-ts-checker-webpack-plugin/node_modules/semver": { + "version": "7.7.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.2.tgz", + "integrity": "sha512-RF0Fw+rO5AMf9MAyaRXI4AV0Ulj5lMHqVxxdSgiVbixSCXoEmmX/jk0CuJw4+3SqroYO9VoUh+HcuJivvtJemA==", + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" } }, - "node_modules/amazon-cognito-identity-js/node_modules/@aws-crypto/util": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/@aws-crypto/util/-/util-1.2.2.tgz", - "integrity": "sha512-H8PjG5WJ4wz0UXAFXeJjWCW1vkvIJ3qUUD+rGRwJ2/hj+xT58Qle2MTql/2MGzkU+1JLAFuR6aJpLAjHwhmwwg==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "@aws-sdk/types": "^3.1.0", - "@aws-sdk/util-utf8-browser": "^3.0.0", - "tslib": "^1.11.1" + "node_modules/fork-ts-checker-webpack-plugin/node_modules/universalify": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.1.tgz", + "integrity": "sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==", + "license": "MIT", + "engines": { + "node": ">= 10.0.0" } }, - "node_modules/amazon-cognito-identity-js/node_modules/buffer": { - "version": "4.9.2", - "resolved": "https://registry.npmjs.org/buffer/-/buffer-4.9.2.tgz", - "integrity": "sha512-xq+q3SRMOxGivLhBNaUdC64hDTQwejJ+H0T/NB1XMtTVEwNTrfFF3gAxiyW0Bu/xWEGhjVKgUcMhCrUy2+uCWg==", - "dev": true, + "node_modules/form-data": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.4.tgz", + "integrity": "sha512-KrGhL9Q4zjj0kiUt5OO4Mr/A/jlI2jDYs5eHBpYHPcBEVSiipAvn2Ko2HnPe20rmcuuvMHNdZFp+4IlGTMF0Ow==", "license": "MIT", "dependencies": { - "base64-js": "^1.0.2", - "ieee754": "^1.1.4", - "isarray": "^1.0.0" + "asynckit": "^0.4.0", + "combined-stream": "^1.0.8", + "es-set-tostringtag": "^2.1.0", + "hasown": "^2.0.2", + "mime-types": "^2.1.12" + }, + "engines": { + "node": ">= 6" } }, - "node_modules/amazon-cognito-identity-js/node_modules/isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", + "node_modules/form-data-encoder": { + "version": "1.7.2", + "resolved": "https://registry.npmjs.org/form-data-encoder/-/form-data-encoder-1.7.2.tgz", + "integrity": "sha512-qfqtYan3rxrnCk1VYaA4H+Ms9xdpPqvLZa6xmMgFvhO32x7/3J/ExcTd6qpxM0vH2GdMI+poehyBZvqfMTto8A==", "dev": true, "license": "MIT" }, - "node_modules/amazon-cognito-identity-js/node_modules/tslib": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", - "dev": true, - "license": "0BSD" - }, - "node_modules/amdefine": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/amdefine/-/amdefine-1.0.1.tgz", - "integrity": "sha512-S2Hw0TtNkMJhIabBwIojKL9YHO5T0n5eNqWJ7Lrlel/zDbftQpxpapi8tZs3X1HWa+u+QeydGmzzNU0m09+Rcg==", - "dev": true, - "license": "BSD-3-Clause OR MIT", - "optional": true, + "node_modules/form-data/node_modules/mime-db": { + "version": "1.52.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", + "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", + "license": "MIT", "engines": { - "node": ">=0.4.2" + "node": ">= 0.6" } }, - "node_modules/anser": { - "version": "1.4.10", - "resolved": "https://registry.npmjs.org/anser/-/anser-1.4.10.tgz", - "integrity": "sha512-hCv9AqTQ8ycjpSd3upOJd7vFwW1JaoYQ7tpham03GJ1ca8/65rqn0RpaWpItOAd6ylW9wAw6luXYPJIyPFVOww==", + "node_modules/form-data/node_modules/mime-types": { + "version": "2.1.35", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", + "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", "license": "MIT", - "peer": true - }, - "node_modules/ansi-align": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/ansi-align/-/ansi-align-3.0.1.tgz", - "integrity": "sha512-IOfwwBF5iczOjp/WeY4YxyjqAFMQoZufdQWDd19SEExbVLNXqvpzSJ/M7Za4/sCPmQ0+GRquoA7bGcINcxew6w==", - "dev": true, - "license": "ISC", "dependencies": { - "string-width": "^4.1.0" + "mime-db": "1.52.0" + }, + "engines": { + "node": ">= 0.6" } }, - "node_modules/ansi-colors": { - "version": "4.1.3", - "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.3.tgz", - "integrity": "sha512-/6w/C21Pm1A7aZitlI5Ni/2J6FFQN8i1Cvz3kHABAAbw93v/NlvKdVOqz7CCWz/3iv/JplRSEEZ83XION15ovw==", - "license": "MIT", + "node_modules/format": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/format/-/format-0.2.2.tgz", + "integrity": "sha512-wzsgA6WOq+09wrU1tsJ09udeR/YZRaeArL9e1wPbFg3GG2yDnC2ldKpxs4xunpFF9DgqCqOIra3bc1HWrJ37Ww==", "engines": { - "node": ">=6" + "node": ">=0.4.x" } }, - "node_modules/ansi-escapes": { - "version": "4.3.2", - "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.2.tgz", - "integrity": "sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==", + "node_modules/format-util": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/format-util/-/format-util-1.0.5.tgz", + "integrity": "sha512-varLbTj0e0yVyRpqQhuWV+8hlePAgaoFRhNFj50BNjEIrw1/DphHSObtqwskVCPWNgzwPoQrZAbfa/SBiicNeg==", + "dev": true, + "license": "MIT" + }, + "node_modules/formdata-node": { + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/formdata-node/-/formdata-node-4.4.1.tgz", + "integrity": "sha512-0iirZp3uVDjVGt9p49aTaqjk84TrglENEDuqfdlZQ1roC9CWlPk6Avf8EEnZNcAqPonwkG35x4n3ww/1THYAeQ==", + "dev": true, "license": "MIT", "dependencies": { - "type-fest": "^0.21.3" + "node-domexception": "1.0.0", + "web-streams-polyfill": "4.0.0-beta.3" }, "engines": { - "node": ">=8" + "node": ">= 12.20" + } + }, + "node_modules/formdata-polyfill": { + "version": "4.0.10", + "resolved": "https://registry.npmjs.org/formdata-polyfill/-/formdata-polyfill-4.0.10.tgz", + "integrity": "sha512-buewHzMvYL29jdeQTVILecSaZKnt/RJWjoZCF5OW60Z67/GmSLBkOFM7qh1PI3zFNtJbaZL5eQu1vLfazOwj4g==", + "license": "MIT", + "dependencies": { + "fetch-blob": "^3.1.2" }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "engines": { + "node": ">=12.20.0" } }, - "node_modules/ansi-escapes/node_modules/type-fest": { - "version": "0.21.3", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.21.3.tgz", - "integrity": "sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==", - "license": "(MIT OR CC0-1.0)", + "node_modules/formidable": { + "version": "3.5.4", + "resolved": "https://registry.npmjs.org/formidable/-/formidable-3.5.4.tgz", + "integrity": "sha512-YikH+7CUTOtP44ZTnUhR7Ic2UASBPOqmaRkRKxRbywPTe5VxF7RRCck4af9wutiZ/QKM5nME9Bie2fFaPz5Gug==", + "dev": true, + "license": "MIT", + "dependencies": { + "@paralleldrive/cuid2": "^2.2.2", + "dezalgo": "^1.0.4", + "once": "^1.4.0" + }, "engines": { - "node": ">=10" + "node": ">=14.0.0" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "url": "https://ko-fi.com/tunnckoCore/commissions" } }, - "node_modules/ansi-regex": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "node_modules/forwarded": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz", + "integrity": "sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==", "license": "MIT", "engines": { - "node": ">=8" + "node": ">= 0.6" } }, - "node_modules/ansi-styles": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", - "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", + "node_modules/fp-ts": { + "version": "1.19.3", + "resolved": "https://registry.npmjs.org/fp-ts/-/fp-ts-1.19.3.tgz", + "integrity": "sha512-H5KQDspykdHuztLTg+ajGN0Z2qUjcEf3Ybxc6hLt0k7/zPkn29XnKnxlBPyW2XIddWrGaJBzBl4VLYOtk39yZg==", + "dev": true, + "license": "MIT" + }, + "node_modules/fraction.js": { + "version": "5.3.4", + "resolved": "https://registry.npmjs.org/fraction.js/-/fraction.js-5.3.4.tgz", + "integrity": "sha512-1X1NTtiJphryn/uLQz3whtY6jK3fTqoE3ohKs0tT+Ujr1W59oopxmoEh7Lu5p6vBaPbgoM0bzveAW4Qi5RyWDQ==", "license": "MIT", "engines": { - "node": ">=10" + "node": "*" }, "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" + "type": "github", + "url": "https://github.com/sponsors/rawify" } }, - "node_modules/ansis": { - "version": "3.17.0", - "resolved": "https://registry.npmjs.org/ansis/-/ansis-3.17.0.tgz", - "integrity": "sha512-0qWUglt9JEqLFr3w1I1pbrChn1grhaiAR2ocX1PP/flRmxgtwTzPFFFnfIlD6aMOLQZgSuCRlidD70lvx8yhzg==", - "license": "ISC", - "engines": { - "node": ">=14" + "node_modules/framer-motion": { + "version": "10.18.0", + "resolved": "https://registry.npmjs.org/framer-motion/-/framer-motion-10.18.0.tgz", + "integrity": "sha512-oGlDh1Q1XqYPksuTD/usb0I70hq95OUzmL9+6Zd+Hs4XV0oaISBa/UUMSjYiq6m8EUF32132mOJ8xVZS+I0S6w==", + "license": "MIT", + "peer": true, + "dependencies": { + "tslib": "^2.4.0" + }, + "optionalDependencies": { + "@emotion/is-prop-valid": "^0.8.2" + }, + "peerDependencies": { + "react": "^18.0.0", + "react-dom": "^18.0.0" + }, + "peerDependenciesMeta": { + "react": { + "optional": true + }, + "react-dom": { + "optional": true + } } }, - "node_modules/antlr4": { - "version": "4.13.2", - "resolved": "https://registry.npmjs.org/antlr4/-/antlr4-4.13.2.tgz", - "integrity": "sha512-QiVbZhyy4xAZ17UPEuG3YTOt8ZaoeOR1CvEAqrEsDBsOqINslaB147i9xqljZqoyf5S+EUlGStaj+t22LT9MOg==", - "dev": true, - "license": "BSD-3-Clause", - "engines": { - "node": ">=16" + "node_modules/framer-motion/node_modules/@emotion/is-prop-valid": { + "version": "0.8.8", + "resolved": "https://registry.npmjs.org/@emotion/is-prop-valid/-/is-prop-valid-0.8.8.tgz", + "integrity": "sha512-u5WtneEAr5IDG2Wv65yhunPSMLIpuKsbuOktRojfrEiEvRyC85LgPMZI63cr7NUqT8ZIGdSVg8ZKGxIug4lXcA==", + "license": "MIT", + "optional": true, + "dependencies": { + "@emotion/memoize": "0.7.4" } }, - "node_modules/antlr4ts": { - "version": "0.5.0-alpha.4", - "resolved": "https://registry.npmjs.org/antlr4ts/-/antlr4ts-0.5.0-alpha.4.tgz", - "integrity": "sha512-WPQDt1B74OfPv/IMS2ekXAKkTZIHl88uMetg6q3OTqgFxZ/dxDXI0EWLyZid/1Pe6hTftyg5N7gel5wNAGxXyQ==", - "dev": true, - "license": "BSD-3-Clause" + "node_modules/framer-motion/node_modules/@emotion/memoize": { + "version": "0.7.4", + "resolved": "https://registry.npmjs.org/@emotion/memoize/-/memoize-0.7.4.tgz", + "integrity": "sha512-Ja/Vfqe3HpuzRsG1oBtWTHk2PGZ7GR+2Vz5iYGelAw8dx32K0y7PjVuxK6z1nMpZOqAFsRUPCkK1YjJ56qJlgw==", + "license": "MIT", + "optional": true }, - "node_modules/anymatch": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz", - "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==", - "license": "ISC", + "node_modules/framesync": { + "version": "6.1.2", + "resolved": "https://registry.npmjs.org/framesync/-/framesync-6.1.2.tgz", + "integrity": "sha512-jBTqhX6KaQVDyus8muwZbBeGGP0XgujBRbQ7gM7BRdS3CadCZIHiawyzYLnafYcvZIh5j8WE7cxZKFn7dXhu9g==", + "license": "MIT", "dependencies": { - "normalize-path": "^3.0.0", - "picomatch": "^2.0.4" - }, - "engines": { - "node": ">= 8" + "tslib": "2.4.0" } }, - "node_modules/anymatch/node_modules/picomatch": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", - "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", - "license": "MIT", - "engines": { - "node": ">=8.6" - }, - "funding": { - "url": "https://github.com/sponsors/jonschlinkert" - } + "node_modules/framesync/node_modules/tslib": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.4.0.tgz", + "integrity": "sha512-d6xOpEDfsi2CZVlPQzGeux8XMwLT9hssAsaPYExaQMuYskwb+x1x7J371tWlbBdWHroy99KnVB6qIkUbs5X3UQ==", + "license": "0BSD" }, - "node_modules/app-root-path": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/app-root-path/-/app-root-path-3.1.0.tgz", - "integrity": "sha512-biN3PwB2gUtjaYy/isrU3aNWI5w+fAfvHkSvCKeQGxhmYpwKFUxudR3Yya+KqVRHBmEDYh+/lTozYCFbmzX4nA==", + "node_modules/fresh": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/fresh/-/fresh-2.0.0.tgz", + "integrity": "sha512-Rx/WycZ60HOaqLKAi6cHRKKI7zxWbJ31MhntmtwMoaTeF7XFH9hhBp8vITaMidfljRQ6eYWCKkaTK+ykVJHP2A==", "license": "MIT", "engines": { - "node": ">= 6.0.0" + "node": ">= 0.8" } }, - "node_modules/append-field": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/append-field/-/append-field-1.0.0.tgz", - "integrity": "sha512-klpgFSWLW1ZEs8svjfb7g4qWY0YS5imI82dTg+QahUvJ8YqAY0P10Uk8tTyh9ZGuYEZEMaeJYCF5BFuX552hsw==", + "node_modules/fromentries": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/fromentries/-/fromentries-1.3.2.tgz", + "integrity": "sha512-cHEpEQHUg0f8XdtZCc2ZAhrHzKzT0MrFUTcvx+hfxYu7rGMDc5SKoXFh+n4YigxsHXRzc6OrCshdR1bWH6HHyg==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], "license": "MIT" }, - "node_modules/aproba": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/aproba/-/aproba-2.1.0.tgz", - "integrity": "sha512-tLIEcj5GuR2RSTnxNKdkK0dJ/GrC7P38sUkiDmDuHfsHmbagTFAxDVIBltoklXEVIQ/f14IL8IMJ5pn9Hez1Ew==", - "license": "ISC", - "optional": true + "node_modules/fs-constants": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs-constants/-/fs-constants-1.0.0.tgz", + "integrity": "sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow==", + "dev": true, + "license": "MIT" }, - "node_modules/archiver": { - "version": "5.3.2", - "resolved": "https://registry.npmjs.org/archiver/-/archiver-5.3.2.tgz", - "integrity": "sha512-+25nxyyznAXF7Nef3y0EbBeqmGZgeN/BxHX29Rs39djAfaFalmQ89SE6CWyDCHzGL0yt/ycBtNOmGTW0FyGWNw==", + "node_modules/fs-extra": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-7.0.1.tgz", + "integrity": "sha512-YJDaCJZEnBmcbw13fvdAM9AwNOJwOzrE4pqMqBq5nFiEqXUqHwlK4B+3pUw6JNvfSPtX05xFHtYy/1ni01eGCw==", "dev": true, "license": "MIT", "dependencies": { - "archiver-utils": "^2.1.0", - "async": "^3.2.4", - "buffer-crc32": "^0.2.1", - "readable-stream": "^3.6.0", - "readdir-glob": "^1.1.2", - "tar-stream": "^2.2.0", - "zip-stream": "^4.1.0" + "graceful-fs": "^4.1.2", + "jsonfile": "^4.0.0", + "universalify": "^0.1.0" }, "engines": { - "node": ">= 10" + "node": ">=6 <7 || >=8" } }, - "node_modules/archiver-utils": { + "node_modules/fs-minipass": { "version": "2.1.0", - "resolved": "https://registry.npmjs.org/archiver-utils/-/archiver-utils-2.1.0.tgz", - "integrity": "sha512-bEL/yUb/fNNiNTuUz979Z0Yg5L+LzLxGJz8x79lYmR54fmTIb6ob/hNQgkQnIUDWIFjZVQwl9Xs356I6BAMHfw==", - "dev": true, - "license": "MIT", + "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-2.1.0.tgz", + "integrity": "sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg==", + "license": "ISC", + "optional": true, "dependencies": { - "glob": "^7.1.4", - "graceful-fs": "^4.2.0", - "lazystream": "^1.0.0", - "lodash.defaults": "^4.2.0", - "lodash.difference": "^4.5.0", - "lodash.flatten": "^4.4.0", - "lodash.isplainobject": "^4.0.6", - "lodash.union": "^4.6.0", - "normalize-path": "^3.0.0", - "readable-stream": "^2.0.0" + "minipass": "^3.0.0" }, "engines": { - "node": ">= 6" + "node": ">= 8" } }, - "node_modules/archiver-utils/node_modules/glob": { - "version": "7.2.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", - "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", - "deprecated": "Glob versions prior to v9 are no longer supported", - "dev": true, + "node_modules/fs-minipass/node_modules/minipass": { + "version": "3.3.6", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", + "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", "license": "ISC", + "optional": true, "dependencies": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.1.1", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" + "yallist": "^4.0.0" }, "engines": { - "node": "*" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" + "node": ">=8" } }, - "node_modules/archiver/node_modules/async": { - "version": "3.2.6", - "resolved": "https://registry.npmjs.org/async/-/async-3.2.6.tgz", - "integrity": "sha512-htCUDlxyyCLMgaM3xXg0C0LW2xqfuQ6p05pCEIsXuyQ+a1koYKTuBMzRNwmybfLgvJDMd0r1LTn4+E0Ti6C2AA==", + "node_modules/fs-minipass/node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "license": "ISC", + "optional": true + }, + "node_modules/fs-monkey": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/fs-monkey/-/fs-monkey-1.1.0.tgz", + "integrity": "sha512-QMUezzXWII9EV5aTFXW1UBVUO77wYPpjqIF8/AviUCThNeSYZykpoTixUeaNNBwmCev0AMDWMAni+f8Hxb1IFw==", + "license": "Unlicense" + }, + "node_modules/fs-readdir-recursive": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/fs-readdir-recursive/-/fs-readdir-recursive-1.1.0.tgz", + "integrity": "sha512-GNanXlVr2pf02+sPN40XN8HG+ePaNcvM0q5mZBd668Obwb0yD5GiUbZOFgwn8kGMY6I3mdyDJzieUy3PTYyTRA==", "dev": true, "license": "MIT" }, - "node_modules/archiver/node_modules/readable-stream": { - "version": "3.6.2", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", - "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", - "dev": true, + "node_modules/fs.realpath": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==", + "license": "ISC" + }, + "node_modules/fsevents": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", + "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", + "hasInstallScript": true, "license": "MIT", - "dependencies": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - }, + "optional": true, + "os": [ + "darwin" + ], "engines": { - "node": ">= 6" + "node": "^8.16.0 || ^10.6.0 || >=11.0.0" } }, - "node_modules/are-we-there-yet": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-2.0.0.tgz", - "integrity": "sha512-Ci/qENmwHnsYo9xKIcUJN5LeDKdJ6R1Z1j9V/J5wyq8nh/mYPEpIKJbBZXtZjG04HiK7zV/p6Vs9952MrMeUIw==", - "deprecated": "This package is no longer supported.", - "license": "ISC", - "optional": true, + "node_modules/function-bind": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", + "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/function.prototype.name": { + "version": "1.1.8", + "resolved": "https://registry.npmjs.org/function.prototype.name/-/function.prototype.name-1.1.8.tgz", + "integrity": "sha512-e5iwyodOHhbMr/yNrc7fDYG4qlbIvI5gajyzPnb5TCwyhjApznQh1BMFou9b30SevY43gCJKXycoCBjMbsuW0Q==", + "dev": true, + "license": "MIT", "dependencies": { - "delegates": "^1.0.0", - "readable-stream": "^3.6.0" + "call-bind": "^1.0.8", + "call-bound": "^1.0.3", + "define-properties": "^1.2.1", + "functions-have-names": "^1.2.3", + "hasown": "^2.0.2", + "is-callable": "^1.2.7" }, "engines": { - "node": ">=10" + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/are-we-there-yet/node_modules/readable-stream": { - "version": "3.6.2", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", - "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", + "node_modules/functions-have-names": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/functions-have-names/-/functions-have-names-1.2.3.tgz", + "integrity": "sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==", + "dev": true, "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/gauge": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/gauge/-/gauge-3.0.2.tgz", + "integrity": "sha512-+5J6MS/5XksCuXq++uFRsnUd7Ovu1XenbeuIuNRJxYWjgQbPuFhT14lAvsWfqfAmnwluf1OwMjz39HjfLPci0Q==", + "deprecated": "This package is no longer supported.", + "license": "ISC", "optional": true, "dependencies": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" + "aproba": "^1.0.3 || ^2.0.0", + "color-support": "^1.1.2", + "console-control-strings": "^1.0.0", + "has-unicode": "^2.0.1", + "object-assign": "^4.1.1", + "signal-exit": "^3.0.0", + "string-width": "^4.2.3", + "strip-ansi": "^6.0.1", + "wide-align": "^1.1.2" }, "engines": { - "node": ">= 6" + "node": ">=10" } }, - "node_modules/arg": { - "version": "4.1.3", - "resolved": "https://registry.npmjs.org/arg/-/arg-4.1.3.tgz", - "integrity": "sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==", - "devOptional": true, - "license": "MIT" + "node_modules/gauge/node_modules/signal-exit": { + "version": "3.0.7", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", + "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", + "license": "ISC", + "optional": true }, - "node_modules/argparse": { + "node_modules/generator-function": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", - "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", - "license": "Python-2.0" - }, - "node_modules/aria-hidden": { - "version": "1.2.6", - "resolved": "https://registry.npmjs.org/aria-hidden/-/aria-hidden-1.2.6.tgz", - "integrity": "sha512-ik3ZgC9dY/lYVVM++OISsaYDeg1tb0VtP5uL3ouh1koGOaUMDPpbFIei4JkFimWUFPn90sbMNMXQAIVOlnYKJA==", + "resolved": "https://registry.npmjs.org/generator-function/-/generator-function-2.0.1.tgz", + "integrity": "sha512-SFdFmIJi+ybC0vjlHN0ZGVGHc3lgE0DxPAT0djjVg+kjOnSqclqmj0KQ7ykTOLP6YxoqOvuAODGdcHJn+43q3g==", + "dev": true, "license": "MIT", - "dependencies": { - "tslib": "^2.0.0" - }, "engines": { - "node": ">=10" + "node": ">= 0.4" } }, - "node_modules/aria-query": { - "version": "5.3.2", - "resolved": "https://registry.npmjs.org/aria-query/-/aria-query-5.3.2.tgz", - "integrity": "sha512-COROpnaoap1E2F000S62r6A60uHZnmlvomhfyT2DlTcrY1OrBKn2UhH7qn5wTC9zMvD0AY7csdPSNwKP+7WiQw==", - "dev": true, - "license": "Apache-2.0", + "node_modules/gensync": { + "version": "1.0.0-beta.2", + "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", + "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==", + "license": "MIT", "engines": { - "node": ">= 0.4" + "node": ">=6.9.0" } }, - "node_modules/array-back": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/array-back/-/array-back-3.1.0.tgz", - "integrity": "sha512-TkuxA4UCOvxuDK6NZYXCalszEzj+TLszyASooky+i742l9TqsOdYCMJJupxRic61hwquNtppB3hgcuq9SVSH1Q==", - "devOptional": true, - "license": "MIT", + "node_modules/get-caller-file": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", + "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", + "license": "ISC", "engines": { - "node": ">=6" + "node": "6.* || 8.* || >= 10.*" } }, - "node_modules/array-buffer-byte-length": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/array-buffer-byte-length/-/array-buffer-byte-length-1.0.2.tgz", - "integrity": "sha512-LHE+8BuR7RYGDKvnrmcuSq3tDcKv9OFEXQt/HpbZhY7V6h0zlUXutnAD82GiFx9rdieCMjkvtcsPqBwgUl1Iiw==", + "node_modules/get-east-asian-width": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/get-east-asian-width/-/get-east-asian-width-1.4.0.tgz", + "integrity": "sha512-QZjmEOC+IT1uk6Rx0sX22V6uHWVwbdbxf1faPqJ1QhLdGgsRGCZoyaQBm/piRdJy/D2um6hM1UP7ZEeQ4EkP+Q==", "dev": true, "license": "MIT", - "dependencies": { - "call-bound": "^1.0.3", - "is-array-buffer": "^3.0.5" - }, "engines": { - "node": ">= 0.4" + "node": ">=18" }, "funding": { - "url": "https://github.com/sponsors/ljharb" + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/array-flatten": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", - "integrity": "sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg==", - "license": "MIT" - }, - "node_modules/array-ify": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/array-ify/-/array-ify-1.0.0.tgz", - "integrity": "sha512-c5AMf34bKdvPhQ7tBGhqkgKNUzMr4WUs+WDtC2ZUGOUncbxKMTvqxYctiseW3+L4bA8ec+GcZ6/A/FW4m8ukng==", - "dev": true, - "license": "MIT" + "node_modules/get-func-name": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/get-func-name/-/get-func-name-2.0.2.tgz", + "integrity": "sha512-8vXOvuE167CtIc3OyItco7N/dpRtBbYOsPsXCz7X/PMnlGjYjSGuZJgM1Y7mmew7BKf9BqvLX2tnOVy1BBUsxQ==", + "license": "MIT", + "engines": { + "node": "*" + } }, - "node_modules/array-includes": { - "version": "3.1.9", - "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.1.9.tgz", - "integrity": "sha512-FmeCCAenzH0KH381SPT5FZmiA/TmpndpcaShhfgEN9eCVjnFBqq3l1xrI42y8+PPLI6hypzou4GXw00WHmPBLQ==", - "dev": true, + "node_modules/get-intrinsic": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.3.0.tgz", + "integrity": "sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ==", "license": "MIT", "dependencies": { - "call-bind": "^1.0.8", - "call-bound": "^1.0.4", - "define-properties": "^1.2.1", - "es-abstract": "^1.24.0", + "call-bind-apply-helpers": "^1.0.2", + "es-define-property": "^1.0.1", + "es-errors": "^1.3.0", "es-object-atoms": "^1.1.1", - "get-intrinsic": "^1.3.0", - "is-string": "^1.1.1", + "function-bind": "^1.1.2", + "get-proto": "^1.0.1", + "gopd": "^1.2.0", + "has-symbols": "^1.1.0", + "hasown": "^2.0.2", "math-intrinsics": "^1.1.0" }, "engines": { @@ -20335,67 +36289,75 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/array-timsort": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/array-timsort/-/array-timsort-1.0.3.tgz", - "integrity": "sha512-/+3GRL7dDAGEfM6TseQk/U+mi18TU2Ms9I3UlLdUMhz2hbvGNTKdj9xniwXfUqgYhHxRx0+8UnKkvlNwVU+cWQ==", - "license": "MIT" + "node_modules/get-nonce": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/get-nonce/-/get-nonce-1.0.1.tgz", + "integrity": "sha512-FJhYRoDaiatfEkUK8HKlicmu/3SGFD51q3itKDGoSTysQJBnfOcxU5GxnhE1E6soB76MbT0MBtnKJuXyAx+96Q==", + "license": "MIT", + "engines": { + "node": ">=6" + } }, - "node_modules/array-union": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", - "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==", - "dev": true, + "node_modules/get-own-enumerable-property-symbols": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/get-own-enumerable-property-symbols/-/get-own-enumerable-property-symbols-3.0.2.tgz", + "integrity": "sha512-I0UBV/XOz1XkIJHEUDMZAbzCThU/H8DxmSfmdGcKPnVhu2VfFqr34jr9777IyaTYvxjedWhqVIilEDsCdP5G6g==", + "license": "ISC" + }, + "node_modules/get-package-type": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/get-package-type/-/get-package-type-0.1.0.tgz", + "integrity": "sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q==", "license": "MIT", "engines": { - "node": ">=8" + "node": ">=8.0.0" } }, - "node_modules/array-uniq": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/array-uniq/-/array-uniq-1.0.3.tgz", - "integrity": "sha512-MNha4BWQ6JbwhFhj03YK552f7cb3AzoE8SzeljgChvL1dl3IcvggXVz1DilzySZkCja+CXuZbdW7yATchWn8/Q==", + "node_modules/get-port": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/get-port/-/get-port-3.2.0.tgz", + "integrity": "sha512-x5UJKlgeUiNT8nyo/AcnwLnZuZNcSjSw0kogRB+Whd1fjjFq4B1hySFxSFWWSn4mIBzg3sRNUDFYc4g5gjPoLg==", "dev": true, "license": "MIT", "engines": { - "node": ">=0.10.0" + "node": ">=4" } }, - "node_modules/array.prototype.findlast": { - "version": "1.2.5", - "resolved": "https://registry.npmjs.org/array.prototype.findlast/-/array.prototype.findlast-1.2.5.tgz", - "integrity": "sha512-CVvd6FHg1Z3POpBLxO6E6zr+rSKEQ9L6rZHAaY7lLfhKsWYUBBOuMs0e9o24oopj6H+geRCX0YJ+TJLBK2eHyQ==", - "dev": true, + "node_modules/get-proto": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/get-proto/-/get-proto-1.0.1.tgz", + "integrity": "sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==", "license": "MIT", "dependencies": { - "call-bind": "^1.0.7", - "define-properties": "^1.2.1", - "es-abstract": "^1.23.2", - "es-errors": "^1.3.0", - "es-object-atoms": "^1.0.0", - "es-shim-unscopables": "^1.0.2" + "dunder-proto": "^1.0.1", + "es-object-atoms": "^1.0.0" }, "engines": { "node": ">= 0.4" + } + }, + "node_modules/get-stream": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz", + "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==", + "license": "MIT", + "engines": { + "node": ">=10" }, "funding": { - "url": "https://github.com/sponsors/ljharb" + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/array.prototype.findlastindex": { - "version": "1.2.6", - "resolved": "https://registry.npmjs.org/array.prototype.findlastindex/-/array.prototype.findlastindex-1.2.6.tgz", - "integrity": "sha512-F/TKATkzseUExPlfvmwQKGITM3DGTK+vkAsCZoDc5daVygbJBnjEUCbgkAvVFsgfXfX4YIqZ/27G3k3tdXrTxQ==", + "node_modules/get-symbol-description": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/get-symbol-description/-/get-symbol-description-1.1.0.tgz", + "integrity": "sha512-w9UMqWwJxHNOvoNzSJ2oPF5wvYcvP7jUvYzhp67yEhTi17ZDBBC1z9pTdGuzjD+EFIqLSYRweZjqfiPzQ06Ebg==", "dev": true, "license": "MIT", "dependencies": { - "call-bind": "^1.0.8", - "call-bound": "^1.0.4", - "define-properties": "^1.2.1", - "es-abstract": "^1.23.9", + "call-bound": "^1.0.3", "es-errors": "^1.3.0", - "es-object-atoms": "^1.1.1", - "es-shim-unscopables": "^1.1.0" + "get-intrinsic": "^1.2.6" }, "engines": { "node": ">= 0.4" @@ -20404,264 +36366,329 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/array.prototype.flat": { - "version": "1.3.3", - "resolved": "https://registry.npmjs.org/array.prototype.flat/-/array.prototype.flat-1.3.3.tgz", - "integrity": "sha512-rwG/ja1neyLqCuGZ5YYrznA62D4mZXg0i1cIskIUKSiqF3Cje9/wXAls9B9s1Wa2fomMsIv8czB8jZcPmxCXFg==", + "node_modules/get-tsconfig": { + "version": "4.10.1", + "resolved": "https://registry.npmjs.org/get-tsconfig/-/get-tsconfig-4.10.1.tgz", + "integrity": "sha512-auHyJ4AgMz7vgS8Hp3N6HXSmlMdUyhSUrfBF16w153rxtLIEOE+HGqaBppczZvnHLqQJfiHotCYpNhl0lUROFQ==", "dev": true, "license": "MIT", "dependencies": { - "call-bind": "^1.0.8", - "define-properties": "^1.2.1", - "es-abstract": "^1.23.5", - "es-shim-unscopables": "^1.0.2" - }, - "engines": { - "node": ">= 0.4" + "resolve-pkg-maps": "^1.0.0" }, "funding": { - "url": "https://github.com/sponsors/ljharb" + "url": "https://github.com/privatenumber/get-tsconfig?sponsor=1" } }, - "node_modules/array.prototype.flatmap": { - "version": "1.3.3", - "resolved": "https://registry.npmjs.org/array.prototype.flatmap/-/array.prototype.flatmap-1.3.3.tgz", - "integrity": "sha512-Y7Wt51eKJSyi80hFrJCePGGNo5ktJCslFuboqJsbf57CCPcm5zztluPlc4/aD8sWsKvlwatezpV4U1efk8kpjg==", + "node_modules/ghost-testrpc": { + "version": "0.0.2", + "resolved": "https://registry.npmjs.org/ghost-testrpc/-/ghost-testrpc-0.0.2.tgz", + "integrity": "sha512-i08dAEgJ2g8z5buJIrCTduwPIhih3DP+hOCTyyryikfV8T0bNvHnGXO67i0DD1H4GBDETTclPy9njZbfluQYrQ==", "dev": true, - "license": "MIT", + "license": "ISC", "dependencies": { - "call-bind": "^1.0.8", - "define-properties": "^1.2.1", - "es-abstract": "^1.23.5", - "es-shim-unscopables": "^1.0.2" - }, - "engines": { - "node": ">= 0.4" + "chalk": "^2.4.2", + "node-emoji": "^1.10.0" }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "bin": { + "testrpc-sc": "index.js" } }, - "node_modules/array.prototype.toreversed": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/array.prototype.toreversed/-/array.prototype.toreversed-1.1.2.tgz", - "integrity": "sha512-wwDCoT4Ck4Cz7sLtgUmzR5UV3YF5mFHUlbChCzZBQZ+0m2cl/DH3tKgvphv1nKgFsJ48oCSg6p91q2Vm0I/ZMA==", + "node_modules/ghost-testrpc/node_modules/ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", "dev": true, "license": "MIT", "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.2.0", - "es-abstract": "^1.22.1", - "es-shim-unscopables": "^1.0.0" + "color-convert": "^1.9.0" + }, + "engines": { + "node": ">=4" } }, - "node_modules/array.prototype.tosorted": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/array.prototype.tosorted/-/array.prototype.tosorted-1.1.4.tgz", - "integrity": "sha512-p6Fx8B7b7ZhL/gmUsAy0D15WhvDccw3mnGNbZpi3pmeJdxtWsj2jEaI4Y6oo3XiHfzuSgPwKc04MYt6KgvC/wA==", + "node_modules/ghost-testrpc/node_modules/chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", "dev": true, "license": "MIT", "dependencies": { - "call-bind": "^1.0.7", - "define-properties": "^1.2.1", - "es-abstract": "^1.23.3", - "es-errors": "^1.3.0", - "es-shim-unscopables": "^1.0.2" + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" }, "engines": { - "node": ">= 0.4" + "node": ">=4" } }, - "node_modules/arraybuffer.prototype.slice": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/arraybuffer.prototype.slice/-/arraybuffer.prototype.slice-1.0.4.tgz", - "integrity": "sha512-BNoCY6SXXPQ7gF2opIP4GBE+Xw7U+pHMYKuzjgCN3GwiaIR09UUeKfheyIry77QtrCBlC0KK0q5/TER/tYh3PQ==", + "node_modules/ghost-testrpc/node_modules/color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", "dev": true, "license": "MIT", "dependencies": { - "array-buffer-byte-length": "^1.0.1", - "call-bind": "^1.0.8", - "define-properties": "^1.2.1", - "es-abstract": "^1.23.5", - "es-errors": "^1.3.0", - "get-intrinsic": "^1.2.6", - "is-array-buffer": "^3.0.4" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "color-name": "1.1.3" } }, - "node_modules/asap": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/asap/-/asap-2.0.6.tgz", - "integrity": "sha512-BSHWgDSAiKs50o2Re8ppvp3seVHXSRM44cdSsT9FfNEUUZLOGWVCsiWaRPWM1Znn+mqZ1OfVZ3z3DWEzSp7hRA==", + "node_modules/ghost-testrpc/node_modules/color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", + "dev": true, "license": "MIT" }, - "node_modules/asn1": { - "version": "0.2.6", - "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.6.tgz", - "integrity": "sha512-ix/FxPn0MDjeyJ7i/yoHGFt/EX6LyNbxSEhPPXODPL+KB0VPk86UYfL0lMdy+KCnv+fmvIzySwaK5COwqVbWTQ==", + "node_modules/ghost-testrpc/node_modules/escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/ghost-testrpc/node_modules/has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/ghost-testrpc/node_modules/supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", "dev": true, "license": "MIT", "dependencies": { - "safer-buffer": "~2.1.0" + "has-flag": "^3.0.0" + }, + "engines": { + "node": ">=4" } }, - "node_modules/asn1-ts": { - "version": "8.0.5", - "resolved": "https://registry.npmjs.org/asn1-ts/-/asn1-ts-8.0.5.tgz", - "integrity": "sha512-d2oJ6RE+i89WsR/1XTFm3K4XsifGGghw04B+4Oh6dEdTT2hDI1zuKo4uqAlx0E9xYKwQUdjni8hqawb3RThBpg==", - "license": "MIT" + "node_modules/git-config": { + "version": "0.0.7", + "resolved": "https://registry.npmjs.org/git-config/-/git-config-0.0.7.tgz", + "integrity": "sha512-LidZlYZXWzVjS+M3TEwhtYBaYwLeOZrXci1tBgqp/vDdZTBMl02atvwb6G35L64ibscYoPnxfbwwUS+VZAISLA==", + "license": "BSD-3-Clause", + "optional": true, + "dependencies": { + "iniparser": "~1.0.5" + } }, - "node_modules/asn1.js": { - "version": "4.10.1", - "resolved": "https://registry.npmjs.org/asn1.js/-/asn1.js-4.10.1.tgz", - "integrity": "sha512-p32cOF5q0Zqs9uBiONKYLm6BClCoBCM5O9JfeUSlnQLBTxYdTK+pW+nXflm8UkKd2UYlEbYz5qEi0JuZR9ckSw==", + "node_modules/git-raw-commits": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/git-raw-commits/-/git-raw-commits-4.0.0.tgz", + "integrity": "sha512-ICsMM1Wk8xSGMowkOmPrzo2Fgmfo4bMHLNX6ytHjajRJUqvHOw/TFapQ+QG75c3X/tTDDhOSRPGC52dDbNM8FQ==", "dev": true, "license": "MIT", "dependencies": { - "bn.js": "^4.0.0", - "inherits": "^2.0.1", - "minimalistic-assert": "^1.0.0" + "dargs": "^8.0.0", + "meow": "^12.0.1", + "split2": "^4.0.0" + }, + "bin": { + "git-raw-commits": "cli.mjs" + }, + "engines": { + "node": ">=16" } }, - "node_modules/asn1.js/node_modules/bn.js": { - "version": "4.12.2", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.2.tgz", - "integrity": "sha512-n4DSx829VRTRByMRGdjQ9iqsN0Bh4OolPsFnaZBLcbi8iXcB+kJ9s7EnRt4wILZNV3kPLHkRVfOc/HvhC3ovDw==", + "node_modules/github-slugger": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/github-slugger/-/github-slugger-1.5.0.tgz", + "integrity": "sha512-wIh+gKBI9Nshz2o46B0B3f5k/W+WI9ZAv6y5Dn5WJ5SK1t0TnDimB4WE5rmTD05ZAIn8HALCZVmCsvj0w0v0lw==", + "license": "ISC" + }, + "node_modules/glob": { + "version": "11.0.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-11.0.3.tgz", + "integrity": "sha512-2Nim7dha1KVkaiF4q6Dj+ngPPMdfvLJEOpZk/jKiUAkqKebpGAWQXAq9z1xu9HKu5lWfqw/FASuccEjyznjPaA==", "dev": true, - "license": "MIT" + "license": "ISC", + "dependencies": { + "foreground-child": "^3.3.1", + "jackspeak": "^4.1.1", + "minimatch": "^10.0.3", + "minipass": "^7.1.2", + "package-json-from-dist": "^1.0.0", + "path-scurry": "^2.0.0" + }, + "bin": { + "glob": "dist/esm/bin.mjs" + }, + "engines": { + "node": "20 || >=22" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } }, - "node_modules/asn1js": { - "version": "3.0.6", - "resolved": "https://registry.npmjs.org/asn1js/-/asn1js-3.0.6.tgz", - "integrity": "sha512-UOCGPYbl0tv8+006qks/dTgV9ajs97X2p0FAbyS2iyCRrmLSRolDaHdp+v/CLgnzHc3fVB+CwYiUmei7ndFcgA==", - "license": "BSD-3-Clause", + "node_modules/glob-parent": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", + "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", + "license": "ISC", "dependencies": { - "pvtsutils": "^1.3.6", - "pvutils": "^1.1.3", - "tslib": "^2.8.1" + "is-glob": "^4.0.3" }, "engines": { - "node": ">=12.0.0" + "node": ">=10.13.0" } }, - "node_modules/assert": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/assert/-/assert-2.1.0.tgz", - "integrity": "sha512-eLHpSK/Y4nhMJ07gDaAzoX/XAKS8PSaojml3M0DM4JpV1LAi5JOJ/p6H/XWrl8L+DzVEvVCW1z3vWAaB9oTsQw==", + "node_modules/glob-to-regex.js": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/glob-to-regex.js/-/glob-to-regex.js-1.2.0.tgz", + "integrity": "sha512-QMwlOQKU/IzqMUOAZWubUOT8Qft+Y0KQWnX9nK3ch0CJg0tTp4TvGZsTfudYKv2NzoQSyPcnA6TYeIQ3jGichQ==", + "license": "Apache-2.0", + "engines": { + "node": ">=10.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/streamich" + }, + "peerDependencies": { + "tslib": "2" + } + }, + "node_modules/glob-to-regexp": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/glob-to-regexp/-/glob-to-regexp-0.4.1.tgz", + "integrity": "sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==", + "license": "BSD-2-Clause" + }, + "node_modules/glob/node_modules/minimatch": { + "version": "10.0.3", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-10.0.3.tgz", + "integrity": "sha512-IPZ167aShDZZUMdRk66cyQAW3qr0WzbHkPdMYa8bzZhlHhO3jALbKdxcaak7W9FfT2rZNpQuUu4Od7ILEpXSaw==", + "dev": true, + "license": "ISC", + "dependencies": { + "@isaacs/brace-expansion": "^5.0.0" + }, + "engines": { + "node": "20 || >=22" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/global-directory": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/global-directory/-/global-directory-4.0.1.tgz", + "integrity": "sha512-wHTUcDUoZ1H5/0iVqEudYW4/kAlN5cZ3j/bXn0Dpbizl9iaUVeWSHqiOjsgk6OW2bkLclbBjzewBz6weQ1zA2Q==", "dev": true, "license": "MIT", "dependencies": { - "call-bind": "^1.0.2", - "is-nan": "^1.3.2", - "object-is": "^1.1.5", - "object.assign": "^4.1.4", - "util": "^0.12.5" + "ini": "4.1.1" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/assertion-error": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/assertion-error/-/assertion-error-1.1.0.tgz", - "integrity": "sha512-jgsaNduz+ndvGyFt3uSuWqvy4lCnIJiovtouQN5JZHOKCS2QuhEdbcQHFhVksz2N2U9hXJo8odG7ETyWlEeuDw==", + "node_modules/global-dirs": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/global-dirs/-/global-dirs-3.0.1.tgz", + "integrity": "sha512-NBcGGFbBA9s1VzD41QXDG+3++t9Mn5t1FpLdhESY6oKY4gYTFpX4wO3sqGUa0Srjtbfj3szX0RnemmrVRUdULA==", "license": "MIT", + "dependencies": { + "ini": "2.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/global-dirs/node_modules/ini": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ini/-/ini-2.0.0.tgz", + "integrity": "sha512-7PnF4oN3CvZF23ADhA5wRaYEQpJ8qygSkbtTXWBeXWXmEVRXK+1ITciHWwHhsjv1TmW0MgacIv6hEi5pX5NQdA==", + "license": "ISC", "engines": { - "node": "*" + "node": ">=10" } }, - "node_modules/ast-parents": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/ast-parents/-/ast-parents-0.0.1.tgz", - "integrity": "sha512-XHusKxKz3zoYk1ic8Un640joHbFMhbqneyoZfoKnEGtf2ey9Uh/IdpcQplODdO/kENaMIWsD0nJm4+wX3UNLHA==", - "dev": true, - "license": "MIT" - }, - "node_modules/astral-regex": { + "node_modules/global-modules": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-2.0.0.tgz", - "integrity": "sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ==", + "resolved": "https://registry.npmjs.org/global-modules/-/global-modules-2.0.0.tgz", + "integrity": "sha512-NGbfmJBp9x8IxyJSd1P+otYK8vonoJactOogrVfFRIAEY1ukil8RSKDz2Yo7wh1oihl51l/r6W4epkeKJHqL8A==", "dev": true, "license": "MIT", + "dependencies": { + "global-prefix": "^3.0.0" + }, "engines": { - "node": ">=8" + "node": ">=6" } }, - "node_modules/async": { - "version": "1.5.2", - "resolved": "https://registry.npmjs.org/async/-/async-1.5.2.tgz", - "integrity": "sha512-nSVgobk4rv61R9PUSDtYt7mPVB2olxNR5RWJcAsH676/ef11bUZwvu7+RGYrYauVdDPcO519v68wRhXQtxsV9w==", - "dev": true, - "license": "MIT" - }, - "node_modules/async-function": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/async-function/-/async-function-1.0.0.tgz", - "integrity": "sha512-hsU18Ae8CDTR6Kgu9DYf0EbCr/a5iGL0rytQDobUcdpYOKokk8LEjVphnXkDkgpi0wYVsqrXuP0bZxJaTqdgoA==", + "node_modules/global-prefix": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/global-prefix/-/global-prefix-3.0.0.tgz", + "integrity": "sha512-awConJSVCHVGND6x3tmMaKcQvwXLhjdkmomy2W+Goaui8YPgYgXJZewhg3fWC+DlfqqQuWg8AwqjGTD2nAPVWg==", "dev": true, "license": "MIT", + "dependencies": { + "ini": "^1.3.5", + "kind-of": "^6.0.2", + "which": "^1.3.1" + }, "engines": { - "node": ">= 0.4" + "node": ">=6" } }, - "node_modules/async-limiter": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/async-limiter/-/async-limiter-1.0.1.tgz", - "integrity": "sha512-csOlWGAcRFJaI6m+F2WKdnMKr4HhdhFVBk0H/QbJFMCr+uO2kwohwXQPxw/9OCxp05r5ghVBFSyioixx3gfkNQ==", - "license": "MIT", - "peer": true - }, - "node_modules/async-lock": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/async-lock/-/async-lock-1.4.1.tgz", - "integrity": "sha512-Az2ZTpuytrtqENulXwO3GGv1Bztugx6TT37NIo7imr/Qo0gsYiGtSdBa2B6fsXhTpVZDNfu1Qn3pk531e3q+nQ==", + "node_modules/global-prefix/node_modules/ini": { + "version": "1.3.8", + "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz", + "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==", "dev": true, - "license": "MIT" + "license": "ISC" }, - "node_modules/async-retry": { - "version": "1.3.3", - "resolved": "https://registry.npmjs.org/async-retry/-/async-retry-1.3.3.tgz", - "integrity": "sha512-wfr/jstw9xNi/0teMHrRW7dsz3Lt5ARhYNZ2ewpadnhaIp5mbALhOAP+EAdsC7t4Z6wqsDVv9+W6gm1Dk9mEyw==", + "node_modules/global-prefix/node_modules/which": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", + "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", "dev": true, - "license": "MIT", + "license": "ISC", "dependencies": { - "retry": "0.13.1" + "isexe": "^2.0.0" + }, + "bin": { + "which": "bin/which" } }, - "node_modules/asynckit": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", - "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==", - "license": "MIT" - }, - "node_modules/at-least-node": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/at-least-node/-/at-least-node-1.0.0.tgz", - "integrity": "sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg==", + "node_modules/globals": { + "version": "15.15.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-15.15.0.tgz", + "integrity": "sha512-7ACyT3wmyp3I61S4fG682L0VA2RGD9otkqGJIwNUMF1SWUombIIk+af1unuDYgMm082aHYwD+mzJvv9Iu8dsgg==", "dev": true, - "license": "ISC", - "engines": { - "node": ">= 4.0.0" - } - }, - "node_modules/atomic-sleep": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/atomic-sleep/-/atomic-sleep-1.0.0.tgz", - "integrity": "sha512-kNOjDqAh7px0XWNI+4QbzoiR/nTkHAWNud2uvnJquD1/x5a7EQZMJT0AczqK0Qn67oY/TTQ1LbUKajZpp3I9tQ==", "license": "MIT", "engines": { - "node": ">=8.0.0" + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/available-typed-arrays": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.7.tgz", - "integrity": "sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ==", + "node_modules/globalthis": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/globalthis/-/globalthis-1.0.4.tgz", + "integrity": "sha512-DpLKbNU4WylpxJykQujfCcwYWiV/Jhm50Goo0wrVILAv5jOr9d+H+UR3PhSCD2rCCEIg0uc+G+muBTwD54JhDQ==", + "dev": true, "license": "MIT", "dependencies": { - "possible-typed-array-names": "^1.0.0" + "define-properties": "^1.2.1", + "gopd": "^1.0.1" }, "engines": { "node": ">= 0.4" @@ -20670,2904 +36697,3067 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/axios": { - "version": "1.12.2", - "resolved": "https://registry.npmjs.org/axios/-/axios-1.12.2.tgz", - "integrity": "sha512-vMJzPewAlRyOgxV2dU0Cuz2O8zzzx9VYtbJOaBgXFeLc4IV/Eg50n4LowmehOOR61S8ZMpc2K5Sa7g6A4jfkUw==", - "license": "MIT", - "dependencies": { - "follow-redirects": "^1.15.6", - "form-data": "^4.0.4", - "proxy-from-env": "^1.1.0" - } - }, - "node_modules/axios-oauth-client": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/axios-oauth-client/-/axios-oauth-client-1.5.0.tgz", - "integrity": "sha512-CFuTfK9KdRnDDR6LQlUJ0GNKUZ3tHRSFdKPM9WqeCtUdcuKDgWt9aDFH7Xl87VpUcfNt5qRVl4iHdayqtXVv7g==", + "node_modules/globby": { + "version": "11.1.0", + "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz", + "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==", "license": "MIT", "dependencies": { - "qs": "^6.10.1" + "array-union": "^2.1.0", + "dir-glob": "^3.0.1", + "fast-glob": "^3.2.9", + "ignore": "^5.2.0", + "merge2": "^1.4.1", + "slash": "^3.0.0" }, "engines": { "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/axios-token-interceptor": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/axios-token-interceptor/-/axios-token-interceptor-0.2.0.tgz", - "integrity": "sha512-la74OEsXBH1IS9yI6p2oTIynPtBzs0PVUSOwOBgFg2kBwTeDqQ+YJ6jaOWxsTYyqJO510OzHTfnzAn3GFuf9xA==", + "node_modules/globrex": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/globrex/-/globrex-0.1.2.tgz", + "integrity": "sha512-uHJgbwAMwNFf5mLst7IWLNg14x1CkeqglJb/K3doi4dw6q2IvAAmM/Y81kevy83wP+Sst+nutFTYOGg3d1lsxg==", + "dev": true, + "license": "MIT" + }, + "node_modules/gopd": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.2.0.tgz", + "integrity": "sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==", "license": "MIT", - "dependencies": { - "lock": "^1.1.0" + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/babel-jest": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/babel-jest/-/babel-jest-29.7.0.tgz", - "integrity": "sha512-BrvGY3xZSwEcCzKvKsCi2GgHqDqsYkOP4/by5xCgIwGXQxIEh+8ew3gmrE1y7XRR6LHZIj6yLYnUi/mm2KXKBg==", + "node_modules/got": { + "version": "12.6.1", + "resolved": "https://registry.npmjs.org/got/-/got-12.6.1.tgz", + "integrity": "sha512-mThBblvlAF1d4O5oqyvN+ZxLAYwIJK7bpMxgYqPD9okW0C3qm5FFn7k811QrcuEBwaogR3ngOFoCfs6mRv7teQ==", "license": "MIT", "dependencies": { - "@jest/transform": "^29.7.0", - "@types/babel__core": "^7.1.14", - "babel-plugin-istanbul": "^6.1.1", - "babel-preset-jest": "^29.6.3", - "chalk": "^4.0.0", - "graceful-fs": "^4.2.9", - "slash": "^3.0.0" + "@sindresorhus/is": "^5.2.0", + "@szmarczak/http-timer": "^5.0.1", + "cacheable-lookup": "^7.0.0", + "cacheable-request": "^10.2.8", + "decompress-response": "^6.0.0", + "form-data-encoder": "^2.1.2", + "get-stream": "^6.0.1", + "http2-wrapper": "^2.1.10", + "lowercase-keys": "^3.0.0", + "p-cancelable": "^3.0.0", + "responselike": "^3.0.0" }, "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "node": ">=14.16" }, - "peerDependencies": { - "@babel/core": "^7.8.0" + "funding": { + "url": "https://github.com/sindresorhus/got?sponsor=1" } }, - "node_modules/babel-plugin-istanbul": { - "version": "6.1.1", - "resolved": "https://registry.npmjs.org/babel-plugin-istanbul/-/babel-plugin-istanbul-6.1.1.tgz", - "integrity": "sha512-Y1IQok9821cC9onCx5otgFfRm7Lm+I+wwxOx738M/WLPZ9Q42m4IG5W0FNX8WLL2gYMZo3JkuXIH2DOpWM+qwA==", - "license": "BSD-3-Clause", - "dependencies": { - "@babel/helper-plugin-utils": "^7.0.0", - "@istanbuljs/load-nyc-config": "^1.0.0", - "@istanbuljs/schema": "^0.1.2", - "istanbul-lib-instrument": "^5.0.4", - "test-exclude": "^6.0.0" - }, + "node_modules/got/node_modules/form-data-encoder": { + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/form-data-encoder/-/form-data-encoder-2.1.4.tgz", + "integrity": "sha512-yDYSgNMraqvnxiEXO4hi88+YZxaHC6QKzb5N84iRCTDeRO7ZALpir/lVmf/uXUhnwUr2O4HU8s/n6x+yNjQkHw==", + "license": "MIT", "engines": { - "node": ">=8" + "node": ">= 14.17" } }, - "node_modules/babel-plugin-istanbul/node_modules/istanbul-lib-instrument": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-5.2.1.tgz", - "integrity": "sha512-pzqtp31nLv/XFOzXGuvhCb8qhjmTVo5vjVk19XE4CRlSWz0KoeJ3bw9XsA7nOp9YBf4qHjwBxkDzKcME/J29Yg==", - "license": "BSD-3-Clause", + "node_modules/graceful-fs": { + "version": "4.2.11", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", + "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==", + "license": "ISC" + }, + "node_modules/graphemer": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/graphemer/-/graphemer-1.4.0.tgz", + "integrity": "sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==", + "dev": true, + "license": "MIT" + }, + "node_modules/gray-matter": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/gray-matter/-/gray-matter-4.0.3.tgz", + "integrity": "sha512-5v6yZd4JK3eMI3FqqCouswVqwugaA9r4dNZB1wwcmrD02QkV5H0y7XBQW8QwQqEaZY1pM9aqORSORhJRdNK44Q==", + "license": "MIT", "dependencies": { - "@babel/core": "^7.12.3", - "@babel/parser": "^7.14.7", - "@istanbuljs/schema": "^0.1.2", - "istanbul-lib-coverage": "^3.2.0", - "semver": "^6.3.0" + "js-yaml": "^3.13.1", + "kind-of": "^6.0.2", + "section-matter": "^1.0.0", + "strip-bom-string": "^1.0.0" }, "engines": { - "node": ">=8" + "node": ">=6.0" } }, - "node_modules/babel-plugin-jest-hoist": { - "version": "29.6.3", - "resolved": "https://registry.npmjs.org/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-29.6.3.tgz", - "integrity": "sha512-ESAc/RJvGTFEzRwOTT4+lNDk/GNHMkKbNzsvT0qKRfDyyYTskxB5rnU2njIDYVxXCBHHEI1c0YwHob3WaYujOg==", + "node_modules/gray-matter/node_modules/argparse": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", + "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", "license": "MIT", "dependencies": { - "@babel/template": "^7.3.3", - "@babel/types": "^7.3.3", - "@types/babel__core": "^7.1.14", - "@types/babel__traverse": "^7.0.6" + "sprintf-js": "~1.0.2" + } + }, + "node_modules/gray-matter/node_modules/js-yaml": { + "version": "3.14.2", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.2.tgz", + "integrity": "sha512-PMSmkqxr106Xa156c2M265Z+FTrPl+oxd/rgOQy2tijQeK5TxQ43psO1ZCwhVOSdnn+RzkzlRz/eY4BgJBYVpg==", + "license": "MIT", + "dependencies": { + "argparse": "^1.0.7", + "esprima": "^4.0.0" }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "bin": { + "js-yaml": "bin/js-yaml.js" } }, - "node_modules/babel-plugin-macros": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/babel-plugin-macros/-/babel-plugin-macros-3.1.0.tgz", - "integrity": "sha512-Cg7TFGpIr01vOQNODXOOaGz2NpCU5gl8x1qJFbb6hbZxR7XrcE2vtbAsTAbJ7/xwJtUuJEw8K8Zr/AE0LHlesg==", + "node_modules/gzip-size": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/gzip-size/-/gzip-size-6.0.0.tgz", + "integrity": "sha512-ax7ZYomf6jqPTQ4+XCpUGyXKHk5WweS+e05MBO4/y3WJ5RkmPXNKvX+bx1behVILVwr6JSQvZAku021CHPXG3Q==", "license": "MIT", "dependencies": { - "@babel/runtime": "^7.12.5", - "cosmiconfig": "^7.0.0", - "resolve": "^1.19.0" + "duplexer": "^0.1.2" }, "engines": { - "node": ">=10", - "npm": ">=6" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/babel-plugin-macros/node_modules/cosmiconfig": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-7.1.0.tgz", - "integrity": "sha512-AdmX6xUzdNASswsFtmwSt7Vj8po9IuqXm0UXz7QKPuEUmPB4XyjGfaAr2PSuELMwkRMVH1EpIkX5bTZGRB3eCA==", + "node_modules/h3": { + "version": "1.15.4", + "resolved": "https://registry.npmjs.org/h3/-/h3-1.15.4.tgz", + "integrity": "sha512-z5cFQWDffyOe4vQ9xIqNfCZdV4p//vy6fBnr8Q1AWnVZ0teurKMG66rLj++TKwKPUP3u7iMUvrvKaEUiQw2QWQ==", "license": "MIT", "dependencies": { - "@types/parse-json": "^4.0.0", - "import-fresh": "^3.2.1", - "parse-json": "^5.0.0", - "path-type": "^4.0.0", - "yaml": "^1.10.0" + "cookie-es": "^1.2.2", + "crossws": "^0.3.5", + "defu": "^6.1.4", + "destr": "^2.0.5", + "iron-webcrypto": "^1.2.1", + "node-mock-http": "^1.0.2", + "radix3": "^1.1.2", + "ufo": "^1.6.1", + "uncrypto": "^0.1.3" + } + }, + "node_modules/hachure-fill": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/hachure-fill/-/hachure-fill-0.5.2.tgz", + "integrity": "sha512-3GKBOn+m2LX9iq+JC1064cSFprJY4jL1jCXTcpnfER5HYE2l/4EfWSGzkPa/ZDBmYI0ZOEj5VHV/eKnPGkHuOg==", + "license": "MIT" + }, + "node_modules/handle-thing": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/handle-thing/-/handle-thing-2.0.1.tgz", + "integrity": "sha512-9Qn4yBxelxoh2Ow62nP+Ka/kMnOXRi8BXnRaUwezLNhqelnN49xKz4F/dPP8OYLxLxq6JDtZb2i9XznUQbNPTg==", + "license": "MIT" + }, + "node_modules/handlebars": { + "version": "4.7.8", + "resolved": "https://registry.npmjs.org/handlebars/-/handlebars-4.7.8.tgz", + "integrity": "sha512-vafaFqs8MZkRrSX7sFVUdo3ap/eNiLnb4IakshzvP56X5Nr1iGKAIqdX6tMlm6HcNRIkr6AxO5jFEoJzzpT8aQ==", + "devOptional": true, + "license": "MIT", + "dependencies": { + "minimist": "^1.2.5", + "neo-async": "^2.6.2", + "source-map": "^0.6.1", + "wordwrap": "^1.0.0" + }, + "bin": { + "handlebars": "bin/handlebars" }, "engines": { - "node": ">=10" + "node": ">=0.4.7" + }, + "optionalDependencies": { + "uglify-js": "^3.1.4" } }, - "node_modules/babel-plugin-macros/node_modules/yaml": { - "version": "1.10.2", - "resolved": "https://registry.npmjs.org/yaml/-/yaml-1.10.2.tgz", - "integrity": "sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==", - "license": "ISC", + "node_modules/handlebars/node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "devOptional": true, + "license": "BSD-3-Clause", "engines": { - "node": ">= 6" + "node": ">=0.10.0" } }, - "node_modules/babel-plugin-polyfill-corejs2": { - "version": "0.4.14", - "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.4.14.tgz", - "integrity": "sha512-Co2Y9wX854ts6U8gAAPXfn0GmAyctHuK8n0Yhfjd6t30g7yvKjspvvOo9yG+z52PZRgFErt7Ka2pYnXCjLKEpg==", + "node_modules/hardhat": { + "version": "2.28.2", + "resolved": "https://registry.npmjs.org/hardhat/-/hardhat-2.28.2.tgz", + "integrity": "sha512-CPaMFgCU5+sLO0Kos82xWLGC9YldRRBRydj5JT4v00+ShAg4C6Up2jAgP9+dTPVkMOMTfQc05mOo2JreMX5z3A==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { - "@babel/compat-data": "^7.27.7", - "@babel/helper-define-polyfill-provider": "^0.6.5", - "semver": "^6.3.1" + "@ethereumjs/util": "^9.1.0", + "@ethersproject/abi": "^5.1.2", + "@nomicfoundation/edr": "0.12.0-next.21", + "@nomicfoundation/solidity-analyzer": "^0.1.0", + "@sentry/node": "^5.18.1", + "adm-zip": "^0.4.16", + "aggregate-error": "^3.0.0", + "ansi-escapes": "^4.3.0", + "boxen": "^5.1.2", + "chokidar": "^4.0.0", + "ci-info": "^2.0.0", + "debug": "^4.1.1", + "enquirer": "^2.3.0", + "env-paths": "^2.2.0", + "ethereum-cryptography": "^1.0.3", + "find-up": "^5.0.0", + "fp-ts": "1.19.3", + "fs-extra": "^7.0.1", + "immutable": "^4.0.0-rc.12", + "io-ts": "1.10.4", + "json-stream-stringify": "^3.1.4", + "keccak": "^3.0.2", + "lodash": "^4.17.11", + "micro-eth-signer": "^0.14.0", + "mnemonist": "^0.38.0", + "mocha": "^10.0.0", + "p-map": "^4.0.0", + "picocolors": "^1.1.0", + "raw-body": "^2.4.1", + "resolve": "1.17.0", + "semver": "^6.3.0", + "solc": "0.8.26", + "source-map-support": "^0.5.13", + "stacktrace-parser": "^0.1.10", + "tinyglobby": "^0.2.6", + "tsort": "0.0.1", + "undici": "^5.14.0", + "uuid": "^8.3.2", + "ws": "^7.4.6" + }, + "bin": { + "hardhat": "internal/cli/bootstrap.js" }, "peerDependencies": { - "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" + "ts-node": "*", + "typescript": "*" + }, + "peerDependenciesMeta": { + "ts-node": { + "optional": true + }, + "typescript": { + "optional": true + } } }, - "node_modules/babel-plugin-polyfill-corejs3": { - "version": "0.13.0", - "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.13.0.tgz", - "integrity": "sha512-U+GNwMdSFgzVmfhNm8GJUX88AadB3uo9KpJqS3FaqNIPKgySuvMb+bHPsOmmuWyIcuqZj/pzt1RUIUZns4y2+A==", + "node_modules/hardhat-abi-exporter": { + "version": "2.11.0", + "resolved": "https://registry.npmjs.org/hardhat-abi-exporter/-/hardhat-abi-exporter-2.11.0.tgz", + "integrity": "sha512-hBC4Xzncew9pdqVpzWoEEBJUthp99TCH39cHlMehVxBBQ6EIsIFyj3N0yd0hkVDfM8/s/FMRAuO5jntZBpwCZQ==", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-define-polyfill-provider": "^0.6.5", - "core-js-compat": "^3.43.0" + "@ethersproject/abi": "^5.7.0", + "delete-empty": "^3.0.0" + }, + "engines": { + "node": ">=14.14.0" }, "peerDependencies": { - "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" + "hardhat": "^2.0.0" } }, - "node_modules/babel-plugin-polyfill-regenerator": { - "version": "0.6.5", - "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.6.5.tgz", - "integrity": "sha512-ISqQ2frbiNU9vIJkzg7dlPpznPZ4jOiUQ1uSmB0fEHeowtN3COYRsXr/xexn64NpU13P06jc/L5TgiJXOgrbEg==", + "node_modules/hardhat-contract-sizer": { + "version": "2.10.1", + "resolved": "https://registry.npmjs.org/hardhat-contract-sizer/-/hardhat-contract-sizer-2.10.1.tgz", + "integrity": "sha512-/PPQQbUMgW6ERzk8M0/DA8/v2TEM9xRRAnF9qKPNMYF6FX5DFWcnxBsQvtp8uBz+vy7rmLyV9Elti2wmmhgkbg==", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-define-polyfill-provider": "^0.6.5" + "chalk": "^4.0.0", + "cli-table3": "^0.6.0", + "strip-ansi": "^6.0.0" }, "peerDependencies": { - "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" + "hardhat": "^2.0.0" } }, - "node_modules/babel-plugin-syntax-hermes-parser": { - "version": "0.29.1", - "resolved": "https://registry.npmjs.org/babel-plugin-syntax-hermes-parser/-/babel-plugin-syntax-hermes-parser-0.29.1.tgz", - "integrity": "sha512-2WFYnoWGdmih1I1J5eIqxATOeycOqRwYxAQBu3cUu/rhwInwHUg7k60AFNbuGjSDL8tje5GDrAnxzRLcu2pYcA==", + "node_modules/hardhat-dependency-compiler": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/hardhat-dependency-compiler/-/hardhat-dependency-compiler-1.2.1.tgz", + "integrity": "sha512-xG5iwbspTtxOEiP5UsPngEYQ1Hg+fjTjliapIjdTQmwGkCPofrsDhQDV2O/dopcYzcR68nTx2X8xTewYHgA2rQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=14.14.0" + }, + "peerDependencies": { + "hardhat": "^2.0.0" + } + }, + "node_modules/hardhat-gas-reporter": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/hardhat-gas-reporter/-/hardhat-gas-reporter-1.0.10.tgz", + "integrity": "sha512-02N4+So/fZrzJ88ci54GqwVA3Zrf0C9duuTyGt0CFRIh/CdNwbnTgkXkRfojOMLBQ+6t+lBIkgbsOtqMvNwikA==", + "dev": true, "license": "MIT", "peer": true, "dependencies": { - "hermes-parser": "0.29.1" + "array-uniq": "1.0.3", + "eth-gas-reporter": "^0.2.25", + "sha1": "^1.1.1" + }, + "peerDependencies": { + "hardhat": "^2.0.2" } }, - "node_modules/babel-plugin-transform-vite-meta-env": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-vite-meta-env/-/babel-plugin-transform-vite-meta-env-1.0.3.tgz", - "integrity": "sha512-eyfuDEXrMu667TQpmctHeTlJrZA6jXYHyEJFjcM0yEa60LS/LXlOg2PBbMb8DVS+V9CnTj/j9itdlDVMcY2zEg==", + "node_modules/hardhat/node_modules/@ethereumjs/rlp": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/@ethereumjs/rlp/-/rlp-5.0.2.tgz", + "integrity": "sha512-DziebCdg4JpGlEqEdGgXmjqcFoJi+JGulUXwEjsZGAscAQ7MyD/7LE/GVCP29vEQxKc7AAwjT3A2ywHp2xfoCA==", + "dev": true, + "license": "MPL-2.0", + "bin": { + "rlp": "bin/rlp.cjs" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/hardhat/node_modules/@ethereumjs/util": { + "version": "9.1.0", + "resolved": "https://registry.npmjs.org/@ethereumjs/util/-/util-9.1.0.tgz", + "integrity": "sha512-XBEKsYqLGXLah9PNJbgdkigthkG7TAGvlD/sH12beMXEyHDyigfcbdvHhmLyDWgDyOJn4QwiQUaF7yeuhnjdog==", + "dev": true, + "license": "MPL-2.0", + "dependencies": { + "@ethereumjs/rlp": "^5.0.2", + "ethereum-cryptography": "^2.2.1" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/hardhat/node_modules/@ethereumjs/util/node_modules/@noble/hashes": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.4.0.tgz", + "integrity": "sha512-V1JJ1WTRUqHHrOSh597hURcMqVKVGL/ea3kv0gSnEdsEZ0/+VyPghM1lMNGc00z7CIQorSvbKpuJkxvuHbvdbg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 16" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + } + }, + "node_modules/hardhat/node_modules/@ethereumjs/util/node_modules/ethereum-cryptography": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/ethereum-cryptography/-/ethereum-cryptography-2.2.1.tgz", + "integrity": "sha512-r/W8lkHSiTLxUxW8Rf3u4HGB0xQweG2RyETjywylKZSzLWoWAijRz8WCuOtJ6wah+avllXBqZuk29HCCvhEIRg==", "dev": true, "license": "MIT", "dependencies": { - "@babel/runtime": "^7.13.9", - "@types/babel__core": "^7.1.12" + "@noble/curves": "1.4.2", + "@noble/hashes": "1.4.0", + "@scure/bip32": "1.4.0", + "@scure/bip39": "1.3.0" } }, - "node_modules/babel-preset-current-node-syntax": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/babel-preset-current-node-syntax/-/babel-preset-current-node-syntax-1.2.0.tgz", - "integrity": "sha512-E/VlAEzRrsLEb2+dv8yp3bo4scof3l9nR4lrld+Iy5NyVqgVYUJnDAmunkhPMisRI32Qc4iRiz425d8vM++2fg==", + "node_modules/hardhat/node_modules/@noble/curves": { + "version": "1.4.2", + "resolved": "https://registry.npmjs.org/@noble/curves/-/curves-1.4.2.tgz", + "integrity": "sha512-TavHr8qycMChk8UwMld0ZDRvatedkzWfH8IiaeGCfymOP5i0hSCozz9vHOL0nkwk7HRMlFnAiKpS2jrUmSybcw==", + "dev": true, "license": "MIT", "dependencies": { - "@babel/plugin-syntax-async-generators": "^7.8.4", - "@babel/plugin-syntax-bigint": "^7.8.3", - "@babel/plugin-syntax-class-properties": "^7.12.13", - "@babel/plugin-syntax-class-static-block": "^7.14.5", - "@babel/plugin-syntax-import-attributes": "^7.24.7", - "@babel/plugin-syntax-import-meta": "^7.10.4", - "@babel/plugin-syntax-json-strings": "^7.8.3", - "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4", - "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3", - "@babel/plugin-syntax-numeric-separator": "^7.10.4", - "@babel/plugin-syntax-object-rest-spread": "^7.8.3", - "@babel/plugin-syntax-optional-catch-binding": "^7.8.3", - "@babel/plugin-syntax-optional-chaining": "^7.8.3", - "@babel/plugin-syntax-private-property-in-object": "^7.14.5", - "@babel/plugin-syntax-top-level-await": "^7.14.5" + "@noble/hashes": "1.4.0" }, - "peerDependencies": { - "@babel/core": "^7.0.0 || ^8.0.0-0" + "funding": { + "url": "https://paulmillr.com/funding/" } }, - "node_modules/babel-preset-jest": { - "version": "29.6.3", - "resolved": "https://registry.npmjs.org/babel-preset-jest/-/babel-preset-jest-29.6.3.tgz", - "integrity": "sha512-0B3bhxR6snWXJZtR/RliHTDPRgn1sNHOR0yVtq/IiQFyuOVjFS+wuio/R4gSNkyYmKmJB4wGZv2NZanmKmTnNA==", + "node_modules/hardhat/node_modules/@noble/curves/node_modules/@noble/hashes": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.4.0.tgz", + "integrity": "sha512-V1JJ1WTRUqHHrOSh597hURcMqVKVGL/ea3kv0gSnEdsEZ0/+VyPghM1lMNGc00z7CIQorSvbKpuJkxvuHbvdbg==", + "dev": true, "license": "MIT", - "dependencies": { - "babel-plugin-jest-hoist": "^29.6.3", - "babel-preset-current-node-syntax": "^1.0.0" - }, "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "node": ">= 16" }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/bail": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/bail/-/bail-1.0.5.tgz", - "integrity": "sha512-xFbRxM1tahm08yHBP16MMjVUAvDaBMD38zsM9EMAUN61omwLmKlOpB/Zku5QkjZ8TZ4vn53pj+t518cH0S03RQ==", - "license": "MIT", "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" + "url": "https://paulmillr.com/funding/" } }, - "node_modules/balanced-match": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", - "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", + "node_modules/hardhat/node_modules/@noble/hashes": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.2.0.tgz", + "integrity": "sha512-FZfhjEDbT5GRswV3C6uvLPHMiVD6lQBmpoX5+eSiPaMTXte/IKqI5dykDxzZB/WBeK/CDuQRBWarPdi3FNY2zQ==", + "dev": true, + "funding": [ + { + "type": "individual", + "url": "https://paulmillr.com/funding/" + } + ], "license": "MIT" }, - "node_modules/bare-events": { - "version": "2.7.0", - "resolved": "https://registry.npmjs.org/bare-events/-/bare-events-2.7.0.tgz", - "integrity": "sha512-b3N5eTW1g7vXkw+0CXh/HazGTcO5KYuu/RCNaJbDMPI6LHDi+7qe8EmxKUVe1sUbY2KZOVZFyj62x0OEz9qyAA==", + "node_modules/hardhat/node_modules/@scure/base": { + "version": "1.1.9", + "resolved": "https://registry.npmjs.org/@scure/base/-/base-1.1.9.tgz", + "integrity": "sha512-8YKhl8GHiNI/pU2VMaofa2Tor7PJRAjwQLBBuilkJ9L5+13yVbC7JO/wS7piioAvPSwR3JKM1IJ/u4xQzbcXKg==", "dev": true, - "license": "Apache-2.0" + "license": "MIT", + "funding": { + "url": "https://paulmillr.com/funding/" + } }, - "node_modules/bare-fs": { - "version": "4.4.5", - "resolved": "https://registry.npmjs.org/bare-fs/-/bare-fs-4.4.5.tgz", - "integrity": "sha512-TCtu93KGLu6/aiGWzMr12TmSRS6nKdfhAnzTQRbXoSWxkbb9eRd53jQ51jG7g1gYjjtto3hbBrrhzg6djcgiKg==", + "node_modules/hardhat/node_modules/chokidar": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-4.0.3.tgz", + "integrity": "sha512-Qgzu8kfBvo+cA4962jnP1KkS6Dop5NS6g7R5LFYJr4b8Ub94PPQXUksCw9PvXoeXPRRddRNC5C1JQUR2SMGtnA==", "dev": true, - "license": "Apache-2.0", - "optional": true, + "license": "MIT", "dependencies": { - "bare-events": "^2.5.4", - "bare-path": "^3.0.0", - "bare-stream": "^2.6.4", - "bare-url": "^2.2.2", - "fast-fifo": "^1.3.2" + "readdirp": "^4.0.1" }, "engines": { - "bare": ">=1.16.0" - }, - "peerDependencies": { - "bare-buffer": "*" + "node": ">= 14.16.0" }, - "peerDependenciesMeta": { - "bare-buffer": { - "optional": true - } + "funding": { + "url": "https://paulmillr.com/funding/" } }, - "node_modules/bare-os": { - "version": "3.6.2", - "resolved": "https://registry.npmjs.org/bare-os/-/bare-os-3.6.2.tgz", - "integrity": "sha512-T+V1+1srU2qYNBmJCXZkUY5vQ0B4FSlL3QDROnKQYOqeiQR8UbjNHlPa+TIbM4cuidiN9GaTaOZgSEgsvPbh5A==", + "node_modules/hardhat/node_modules/ci-info": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-2.0.0.tgz", + "integrity": "sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ==", "dev": true, - "license": "Apache-2.0", - "optional": true, - "engines": { - "bare": ">=1.14.0" - } + "license": "MIT" }, - "node_modules/bare-path": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/bare-path/-/bare-path-3.0.0.tgz", - "integrity": "sha512-tyfW2cQcB5NN8Saijrhqn0Zh7AnFNsnczRcuWODH0eYAXBsJ5gVxAUuNr7tsHSC6IZ77cA0SitzT+s47kot8Mw==", + "node_modules/hardhat/node_modules/ethereum-cryptography": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/ethereum-cryptography/-/ethereum-cryptography-1.2.0.tgz", + "integrity": "sha512-6yFQC9b5ug6/17CQpCyE3k9eKBMdhyVjzUy1WkiuY/E4vj/SXDBbCw8QEIaXqf0Mf2SnY6RmpDcwlUmBSS0EJw==", "dev": true, - "license": "Apache-2.0", - "optional": true, + "license": "MIT", "dependencies": { - "bare-os": "^3.0.1" + "@noble/hashes": "1.2.0", + "@noble/secp256k1": "1.7.1", + "@scure/bip32": "1.1.5", + "@scure/bip39": "1.1.1" } }, - "node_modules/bare-stream": { - "version": "2.7.0", - "resolved": "https://registry.npmjs.org/bare-stream/-/bare-stream-2.7.0.tgz", - "integrity": "sha512-oyXQNicV1y8nc2aKffH+BUHFRXmx6VrPzlnaEvMhram0nPBrKcEdcyBg5r08D0i8VxngHFAiVyn1QKXpSG0B8A==", + "node_modules/hardhat/node_modules/ethereum-cryptography/node_modules/@scure/bip32": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/@scure/bip32/-/bip32-1.1.5.tgz", + "integrity": "sha512-XyNh1rB0SkEqd3tXcXMi+Xe1fvg+kUIcoRIEujP1Jgv7DqW2r9lg3Ah0NkFaCs9sTkQAQA8kw7xiRXzENi9Rtw==", "dev": true, - "license": "Apache-2.0", - "optional": true, - "dependencies": { - "streamx": "^2.21.0" - }, - "peerDependencies": { - "bare-buffer": "*", - "bare-events": "*" - }, - "peerDependenciesMeta": { - "bare-buffer": { - "optional": true - }, - "bare-events": { - "optional": true + "funding": [ + { + "type": "individual", + "url": "https://paulmillr.com/funding/" } - } - }, - "node_modules/bare-url": { - "version": "2.2.2", - "resolved": "https://registry.npmjs.org/bare-url/-/bare-url-2.2.2.tgz", - "integrity": "sha512-g+ueNGKkrjMazDG3elZO1pNs3HY5+mMmOet1jtKyhOaCnkLzitxf26z7hoAEkDNgdNmnc1KIlt/dw6Po6xZMpA==", - "dev": true, - "license": "Apache-2.0", - "optional": true, + ], + "license": "MIT", "dependencies": { - "bare-path": "^3.0.0" + "@noble/hashes": "~1.2.0", + "@noble/secp256k1": "~1.7.0", + "@scure/base": "~1.1.0" } }, - "node_modules/base-x": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/base-x/-/base-x-5.0.1.tgz", - "integrity": "sha512-M7uio8Zt++eg3jPj+rHMfCC+IuygQHHCOU+IYsVtik6FWjuYpVt/+MRKcgsAMHh8mMFAwnB+Bs+mTrFiXjMzKg==", - "license": "MIT" - }, - "node_modules/base64-js": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", - "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==", + "node_modules/hardhat/node_modules/ethereum-cryptography/node_modules/@scure/bip39": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@scure/bip39/-/bip39-1.1.1.tgz", + "integrity": "sha512-t+wDck2rVkh65Hmv280fYdVdY25J9YeEUIgn2LG1WM6gxFkGzcksoDiUkWVpVp3Oex9xGC68JU2dSbUfwZ2jPg==", + "dev": true, "funding": [ { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" + "type": "individual", + "url": "https://paulmillr.com/funding/" } ], - "license": "MIT" - }, - "node_modules/base64url": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/base64url/-/base64url-3.0.1.tgz", - "integrity": "sha512-ir1UPr3dkwexU7FdV8qBBbNDRUhMmIekYMFZfi+C/sLNnRESKPl23nB9b2pltqfOQNnGzsDdId90AEtG5tCx4A==", "license": "MIT", - "engines": { - "node": ">=6.0.0" + "dependencies": { + "@noble/hashes": "~1.2.0", + "@scure/base": "~1.1.0" } }, - "node_modules/baseline-browser-mapping": { - "version": "2.8.10", - "resolved": "https://registry.npmjs.org/baseline-browser-mapping/-/baseline-browser-mapping-2.8.10.tgz", - "integrity": "sha512-uLfgBi+7IBNay8ECBO2mVMGZAc1VgZWEChxm4lv+TobGdG82LnXMjuNGo/BSSZZL4UmkWhxEHP2f5ziLNwGWMA==", - "license": "Apache-2.0", - "bin": { - "baseline-browser-mapping": "dist/cli.js" + "node_modules/hardhat/node_modules/readdirp": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-4.1.2.tgz", + "integrity": "sha512-GDhwkLfywWL2s6vEjyhri+eXmfH6j1L7JE27WhqLeYzoh/A3DBaYGEj2H/HFZCn/kMfim73FXxEJTw06WtxQwg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 14.18.0" + }, + "funding": { + "type": "individual", + "url": "https://paulmillr.com/funding/" } }, - "node_modules/bcrypt-pbkdf": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz", - "integrity": "sha512-qeFIXtP4MSoi6NLqO12WfqARWWuCKi2Rn/9hJLEmtB5yTNr9DqFWkJRCf2qShWzPeAMRnOgCrq0sg/KLv5ES9w==", + "node_modules/hardhat/node_modules/resolve": { + "version": "1.17.0", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.17.0.tgz", + "integrity": "sha512-ic+7JYiV8Vi2yzQGFWOkiZD5Z9z7O2Zhm9XMaTxdJExKasieFCr+yXZ/WmXsckHiKl12ar0y6XiXDx3m4RHn1w==", "dev": true, - "license": "BSD-3-Clause", + "license": "MIT", "dependencies": { - "tweetnacl": "^0.14.3" + "path-parse": "^1.0.6" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/bcrypt-pbkdf/node_modules/tweetnacl": { - "version": "0.14.5", - "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz", - "integrity": "sha512-KXXFFdAbFXY4geFIwoyNK+f5Z1b7swfXABfL7HXCmoIWMKU3dmS26672A4EeQtDzLKy7SXmfBu51JolvEKwtGA==", + "node_modules/hardhat/node_modules/uuid": { + "version": "8.3.2", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", + "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==", "dev": true, - "license": "Unlicense" - }, - "node_modules/bech32": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/bech32/-/bech32-1.1.4.tgz", - "integrity": "sha512-s0IrSOzLlbvX7yp4WBfPITzpAU8sqQcpsmwXDiKwrG4r491vwCO/XpejasRNl0piBMe/DvP4Tz0mIS/X1DPJBQ==", - "license": "MIT" + "license": "MIT", + "bin": { + "uuid": "dist/bin/uuid" + } }, - "node_modules/better-path-resolve": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/better-path-resolve/-/better-path-resolve-1.0.0.tgz", - "integrity": "sha512-pbnl5XzGBdrFU/wT4jqmJVPn2B6UHPBOhzMQkY/SPUPB6QtUXtmBHBIwCbXJol93mOpGMnQyP/+BB19q04xj7g==", + "node_modules/hardhat/node_modules/ws": { + "version": "7.5.10", + "resolved": "https://registry.npmjs.org/ws/-/ws-7.5.10.tgz", + "integrity": "sha512-+dbF1tHwZpXcbOJdVOkzLDxZP1ailvSxM6ZweXTegylPny803bFhA+vqBYw4s31NSAk4S2Qz+AKXK9a4wkdjcQ==", "dev": true, "license": "MIT", - "dependencies": { - "is-windows": "^1.0.0" + "engines": { + "node": ">=8.3.0" + }, + "peerDependencies": { + "bufferutil": "^4.0.1", + "utf-8-validate": "^5.0.2" }, + "peerDependenciesMeta": { + "bufferutil": { + "optional": true + }, + "utf-8-validate": { + "optional": true + } + } + }, + "node_modules/has-bigints": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.1.0.tgz", + "integrity": "sha512-R3pbpkcIqv2Pm3dUwgjclDRVmWpTJW2DcMzcIhEXEx1oh/CEMObMm3KLmRJOdvhM7o4uQBnwr8pzRK2sJWIqfg==", + "dev": true, + "license": "MIT", "engines": { - "node": ">=4" + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/bignumber.js": { - "version": "9.3.1", - "resolved": "https://registry.npmjs.org/bignumber.js/-/bignumber.js-9.3.1.tgz", - "integrity": "sha512-Ko0uX15oIUS7wJ3Rb30Fs6SkVbLmPBAKdlm7q9+ak9bbIeFf0MwuBsQV6z7+X768/cHsfg+WlysDWJcmthjsjQ==", + "node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", "license": "MIT", "engines": { - "node": "*" + "node": ">=8" } }, - "node_modules/binary-extensions": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.3.0.tgz", - "integrity": "sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==", + "node_modules/has-own-prop": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/has-own-prop/-/has-own-prop-2.0.0.tgz", + "integrity": "sha512-Pq0h+hvsVm6dDEa8x82GnLSYHOzNDt7f0ddFa3FqcQlgzEiptPqL+XrOJNavjOzSYiYWIrgeVYYgGlLmnxwilQ==", "license": "MIT", "engines": { "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/bl": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/bl/-/bl-5.1.0.tgz", - "integrity": "sha512-tv1ZJHLfTDnXE6tMHv73YgSJaWR2AFuPwMntBe7XL/GBFHnT0CLnsHMogfk5+GzCDC5ZWarSCYaIGATZt9dNsQ==", - "dev": true, + "node_modules/has-property-descriptors": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.2.tgz", + "integrity": "sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==", "license": "MIT", "dependencies": { - "buffer": "^6.0.3", - "inherits": "^2.0.4", - "readable-stream": "^3.4.0" + "es-define-property": "^1.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/bl/node_modules/readable-stream": { - "version": "3.6.2", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", - "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", + "node_modules/has-proto": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.2.0.tgz", + "integrity": "sha512-KIL7eQPfHQRC8+XluaIw7BHUwwqL19bQn4hzNgdr+1wXoU0KKj6rufu47lhY7KbJR2C6T6+PfyN0Ea7wkSS+qQ==", "dev": true, "license": "MIT", "dependencies": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" + "dunder-proto": "^1.0.0" }, "engines": { - "node": ">= 6" + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/blakejs": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/blakejs/-/blakejs-1.2.1.tgz", - "integrity": "sha512-QXUSXI3QVc/gJME0dBpXrag1kbzOqCjCX8/b54ntNyW6sjtoqxqRk3LTmXzaJoh71zMsDCjM+47jS7XiwN/+fQ==", - "license": "MIT" - }, - "node_modules/bn.js": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-5.2.1.tgz", - "integrity": "sha512-eXRvHzWyYPBuB4NBy0cmYQjGitUrtqwbvlzP3G6VFnNRbsZQIxQ10PbKKHt8gZ/HW/D/747aDl+QkDqg3KQLMQ==", - "license": "MIT" + "node_modules/has-symbols": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.1.0.tgz", + "integrity": "sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } }, - "node_modules/body-parser": { - "version": "1.20.2", - "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.2.tgz", - "integrity": "sha512-ml9pReCu3M61kGlqoTm2umSXTlRTuGTx0bfYj+uIUKKYycG5NtSbeetV3faSU6R7ajOPw0g/J1PvK4qNy7s5bA==", + "node_modules/has-tostringtag": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.2.tgz", + "integrity": "sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==", "license": "MIT", "dependencies": { - "bytes": "3.1.2", - "content-type": "~1.0.5", - "debug": "2.6.9", - "depd": "2.0.0", - "destroy": "1.2.0", - "http-errors": "2.0.0", - "iconv-lite": "0.4.24", - "on-finished": "2.4.1", - "qs": "6.11.0", - "raw-body": "2.5.2", - "type-is": "~1.6.18", - "unpipe": "1.0.0" + "has-symbols": "^1.0.3" }, "engines": { - "node": ">= 0.8", - "npm": "1.2.8000 || >= 1.4.16" + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/body-parser/node_modules/debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "node_modules/has-unicode": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/has-unicode/-/has-unicode-2.0.1.tgz", + "integrity": "sha512-8Rf9Y83NBReMnx0gFzA8JImQACstCYWUplepDa9xprwwtmgEZUF0h/i5xSA625zB/I37EtrswSST6OXxwaaIJQ==", + "license": "ISC", + "optional": true + }, + "node_modules/has-yarn": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-yarn/-/has-yarn-3.0.0.tgz", + "integrity": "sha512-IrsVwUHhEULx3R8f/aA8AHuEzAorplsab/v8HBzEiIukwq5i/EC+xmOW+HfP1OaDP+2JkgT1yILHN2O3UFIbcA==", "license": "MIT", - "dependencies": { - "ms": "2.0.0" + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/body-parser/node_modules/iconv-lite": { - "version": "0.4.24", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", - "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", + "node_modules/hash-base": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/hash-base/-/hash-base-3.1.2.tgz", + "integrity": "sha512-Bb33KbowVTIj5s7Ked1OsqHUeCpz//tPwR+E2zJgJKo9Z5XolZ9b6bdUgjmYlwnWhoOQKoTd1TYToZGn5mAYOg==", "license": "MIT", "dependencies": { - "safer-buffer": ">= 2.1.2 < 3" + "inherits": "^2.0.4", + "readable-stream": "^2.3.8", + "safe-buffer": "^5.2.1", + "to-buffer": "^1.2.1" }, "engines": { - "node": ">=0.10.0" + "node": ">= 0.8" } }, - "node_modules/body-parser/node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", - "license": "MIT" - }, - "node_modules/bowser": { - "version": "2.12.1", - "resolved": "https://registry.npmjs.org/bowser/-/bowser-2.12.1.tgz", - "integrity": "sha512-z4rE2Gxh7tvshQ4hluIT7XcFrgLIQaw9X3A+kTTRdovCz5PMukm/0QC/BKSYPj3omF5Qfypn9O/c5kgpmvYUCw==", - "license": "MIT" - }, - "node_modules/boxen": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/boxen/-/boxen-5.1.2.tgz", - "integrity": "sha512-9gYgQKXx+1nP8mP7CzFyaUARhg7D3n1dF/FnErWmu9l6JvGpNUN278h0aSb+QjoiKSWG+iZ3uHrcqk0qrY9RQQ==", - "dev": true, + "node_modules/hash.js": { + "version": "1.1.7", + "resolved": "https://registry.npmjs.org/hash.js/-/hash.js-1.1.7.tgz", + "integrity": "sha512-taOaskGt4z4SOANNseOviYDvjEJinIkRgmp7LbKP2YTTmVxWBl87s/uzK9r+44BclBSp2X7K1hqeNfz9JbBeXA==", "license": "MIT", "dependencies": { - "ansi-align": "^3.0.0", - "camelcase": "^6.2.0", - "chalk": "^4.1.0", - "cli-boxes": "^2.2.1", - "string-width": "^4.2.2", - "type-fest": "^0.20.2", - "widest-line": "^3.1.0", - "wrap-ansi": "^7.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "inherits": "^2.0.3", + "minimalistic-assert": "^1.0.1" } }, - "node_modules/boxen/node_modules/camelcase": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz", - "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==", + "node_modules/hasha": { + "version": "5.2.2", + "resolved": "https://registry.npmjs.org/hasha/-/hasha-5.2.2.tgz", + "integrity": "sha512-Hrp5vIK/xr5SkeN2onO32H0MgNZ0f17HRNH39WfL0SYUNOTZ5Lz1TJ8Pajo/87dYGEFlLMm7mIc/k/s6Bvz9HQ==", "dev": true, "license": "MIT", + "dependencies": { + "is-stream": "^2.0.0", + "type-fest": "^0.8.0" + }, "engines": { - "node": ">=10" + "node": ">=8" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } - }, - "node_modules/brace-expansion": { - "version": "1.1.12", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.12.tgz", - "integrity": "sha512-9T9UjW3r0UW5c1Q7GTwllptXwhvYmEzFhzMfZ9H7FQWt+uZePjZPjBP/W1ZEyZ1twGWom5/56TF4lPcqjnDHcg==", - "license": "MIT", - "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" + }, + "node_modules/hasha/node_modules/type-fest": { + "version": "0.8.1", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.8.1.tgz", + "integrity": "sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==", + "dev": true, + "license": "(MIT OR CC0-1.0)", + "engines": { + "node": ">=8" } }, - "node_modules/braces": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz", - "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==", + "node_modules/hasown": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz", + "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==", "license": "MIT", "dependencies": { - "fill-range": "^7.1.1" + "function-bind": "^1.1.2" }, "engines": { - "node": ">=8" + "node": ">= 0.4" } }, - "node_modules/brorand": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/brorand/-/brorand-1.1.0.tgz", - "integrity": "sha512-cKV8tMCEpQs4hK/ik71d6LrPOnpkpGBR0wzxqr68g2m/LB2GxVYQroAjMJZRVM1Y4BCjCKc3vAamxSzOY2RP+w==", - "license": "MIT" - }, - "node_modules/browser-resolve": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/browser-resolve/-/browser-resolve-2.0.0.tgz", - "integrity": "sha512-7sWsQlYL2rGLy2IWm8WL8DCTJvYLc/qlOnsakDac87SOoCd16WLsaAMdCiAqsTNHIe+SXfaqyxyo6THoWqs8WQ==", - "dev": true, + "node_modules/hast-util-from-parse5": { + "version": "8.0.3", + "resolved": "https://registry.npmjs.org/hast-util-from-parse5/-/hast-util-from-parse5-8.0.3.tgz", + "integrity": "sha512-3kxEVkEKt0zvcZ3hCRYI8rqrgwtlIOFMWkbclACvjlDw8Li9S2hk/d51OI0nr/gIpdMHNepwgOKqZ/sy0Clpyg==", "license": "MIT", "dependencies": { - "resolve": "^1.17.0" + "@types/hast": "^3.0.0", + "@types/unist": "^3.0.0", + "devlop": "^1.0.0", + "hastscript": "^9.0.0", + "property-information": "^7.0.0", + "vfile": "^6.0.0", + "vfile-location": "^5.0.0", + "web-namespaces": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/browser-stdout": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/browser-stdout/-/browser-stdout-1.3.1.tgz", - "integrity": "sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw==", - "dev": true, - "license": "ISC" + "node_modules/hast-util-from-parse5/node_modules/property-information": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/property-information/-/property-information-7.1.0.tgz", + "integrity": "sha512-TwEZ+X+yCJmYfL7TPUOcvBZ4QfoT5YenQiJuX//0th53DE6w0xxLEtfK3iyryQFddXuvkIk51EEgrJQ0WJkOmQ==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } }, - "node_modules/browserify-aes": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/browserify-aes/-/browserify-aes-1.2.0.tgz", - "integrity": "sha512-+7CHXqGuspUn/Sl5aO7Ea0xWGAtETPXNSAjHo48JfLdPWcMng33Xe4znFvQweqc/uzk5zSOI3H52CYnjCfb5hA==", + "node_modules/hast-util-from-parse5/node_modules/unist-util-stringify-position": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-4.0.0.tgz", + "integrity": "sha512-0ASV06AAoKCDkS2+xw5RXJywruurpbC4JZSm7nr7MOt1ojAzvyyaO+UxZf18j8FCF6kmzCZKcAgN/yu2gm2XgQ==", "license": "MIT", "dependencies": { - "buffer-xor": "^1.0.3", - "cipher-base": "^1.0.0", - "create-hash": "^1.1.0", - "evp_bytestokey": "^1.0.3", - "inherits": "^2.0.1", - "safe-buffer": "^5.0.1" + "@types/unist": "^3.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/browserify-cipher": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/browserify-cipher/-/browserify-cipher-1.0.1.tgz", - "integrity": "sha512-sPhkz0ARKbf4rRQt2hTpAHqn47X3llLkUGn+xEJzLjwY8LRs2p0v7ljvI5EyoRO/mexrNunNECisZs+gw2zz1w==", - "dev": true, + "node_modules/hast-util-from-parse5/node_modules/vfile": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/vfile/-/vfile-6.0.3.tgz", + "integrity": "sha512-KzIbH/9tXat2u30jf+smMwFCsno4wHVdNmzFyL+T/L3UGqqk6JKfVqOFOZEpZSHADH1k40ab6NUIXZq422ov3Q==", "license": "MIT", "dependencies": { - "browserify-aes": "^1.0.4", - "browserify-des": "^1.0.0", - "evp_bytestokey": "^1.0.0" + "@types/unist": "^3.0.0", + "vfile-message": "^4.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/browserify-des": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/browserify-des/-/browserify-des-1.0.2.tgz", - "integrity": "sha512-BioO1xf3hFwz4kc6iBhI3ieDFompMhrMlnDFC4/0/vd5MokpuAc3R+LYbwTA9A5Yc9pq9UYPqffKpW2ObuwX5A==", - "dev": true, + "node_modules/hast-util-from-parse5/node_modules/vfile-message": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/vfile-message/-/vfile-message-4.0.3.tgz", + "integrity": "sha512-QTHzsGd1EhbZs4AsQ20JX1rC3cOlt/IWJruk893DfLRr57lcnOeMaWG4K0JrRta4mIJZKth2Au3mM3u03/JWKw==", "license": "MIT", "dependencies": { - "cipher-base": "^1.0.1", - "des.js": "^1.0.0", - "inherits": "^2.0.1", - "safe-buffer": "^5.1.2" + "@types/unist": "^3.0.0", + "unist-util-stringify-position": "^4.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/browserify-rsa": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/browserify-rsa/-/browserify-rsa-4.1.1.tgz", - "integrity": "sha512-YBjSAiTqM04ZVei6sXighu679a3SqWORA3qZTEqZImnlkDIFtKc6pNutpjyZ8RJTjQtuYfeetkxM11GwoYXMIQ==", - "dev": true, + "node_modules/hast-util-parse-selector": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/hast-util-parse-selector/-/hast-util-parse-selector-4.0.0.tgz", + "integrity": "sha512-wkQCkSYoOGCRKERFWcxMVMOcYE2K1AaNLU8DXS9arxnLOUEWbOXKXiJUNzEpqZ3JOKpnha3jkFrumEjVliDe7A==", "license": "MIT", "dependencies": { - "bn.js": "^5.2.1", - "randombytes": "^2.1.0", - "safe-buffer": "^5.2.1" + "@types/hast": "^3.0.0" }, - "engines": { - "node": ">= 0.10" + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/browserify-sign": { - "version": "4.2.5", - "resolved": "https://registry.npmjs.org/browserify-sign/-/browserify-sign-4.2.5.tgz", - "integrity": "sha512-C2AUdAJg6rlM2W5QMp2Q4KGQMVBwR1lIimTsUnutJ8bMpW5B52pGpR2gEnNBNwijumDo5FojQ0L9JrXA8m4YEw==", - "dev": true, - "license": "ISC", + "node_modules/hast-util-raw": { + "version": "9.1.0", + "resolved": "https://registry.npmjs.org/hast-util-raw/-/hast-util-raw-9.1.0.tgz", + "integrity": "sha512-Y8/SBAHkZGoNkpzqqfCldijcuUKh7/su31kEBp67cFY09Wy0mTRgtsLYsiIxMJxlu0f6AA5SUTbDR8K0rxnbUw==", + "license": "MIT", "dependencies": { - "bn.js": "^5.2.2", - "browserify-rsa": "^4.1.1", - "create-hash": "^1.2.0", - "create-hmac": "^1.1.7", - "elliptic": "^6.6.1", - "inherits": "^2.0.4", - "parse-asn1": "^5.1.9", - "readable-stream": "^2.3.8", - "safe-buffer": "^5.2.1" + "@types/hast": "^3.0.0", + "@types/unist": "^3.0.0", + "@ungap/structured-clone": "^1.0.0", + "hast-util-from-parse5": "^8.0.0", + "hast-util-to-parse5": "^8.0.0", + "html-void-elements": "^3.0.0", + "mdast-util-to-hast": "^13.0.0", + "parse5": "^7.0.0", + "unist-util-position": "^5.0.0", + "unist-util-visit": "^5.0.0", + "vfile": "^6.0.0", + "web-namespaces": "^2.0.0", + "zwitch": "^2.0.0" }, - "engines": { - "node": ">= 0.10" + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/browserify-sign/node_modules/bn.js": { - "version": "5.2.2", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-5.2.2.tgz", - "integrity": "sha512-v2YAxEmKaBLahNwE1mjp4WON6huMNeuDvagFZW+ASCuA/ku0bXR9hSMw0XpiqMoA3+rmnyck/tPRSFQkoC9Cuw==", - "dev": true, - "license": "MIT" - }, - "node_modules/browserify-zlib": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/browserify-zlib/-/browserify-zlib-0.2.0.tgz", - "integrity": "sha512-Z942RysHXmJrhqk88FmKBVq/v5tqmSkDz7p54G/MGyjMnCFFnC79XWNbg+Vta8W6Wb2qtSZTSxIGkJrRpCFEiA==", - "dev": true, + "node_modules/hast-util-raw/node_modules/@types/mdast": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/@types/mdast/-/mdast-4.0.4.tgz", + "integrity": "sha512-kGaNbPh1k7AFzgpud/gMdvIm5xuECykRR+JnWKQno9TAXVa6WIVCGTPvYGekIDL4uwCZQSYbUxNBSb1aUo79oA==", "license": "MIT", "dependencies": { - "pako": "~1.0.5" + "@types/unist": "*" } }, - "node_modules/browserslist": { - "version": "4.26.3", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.26.3.tgz", - "integrity": "sha512-lAUU+02RFBuCKQPj/P6NgjlbCnLBMp4UtgTx7vNHd3XSIJF87s9a5rA3aH2yw3GS9DqZAUbOtZdCCiZeVRqt0w==", - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/browserslist" - }, - { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/browserslist" - }, - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ], + "node_modules/hast-util-raw/node_modules/mdast-util-to-hast": { + "version": "13.2.1", + "resolved": "https://registry.npmjs.org/mdast-util-to-hast/-/mdast-util-to-hast-13.2.1.tgz", + "integrity": "sha512-cctsq2wp5vTsLIcaymblUriiTcZd0CwWtCbLvrOzYCDZoWyMNV8sZ7krj09FSnsiJi3WVsHLM4k6Dq/yaPyCXA==", "license": "MIT", "dependencies": { - "baseline-browser-mapping": "^2.8.9", - "caniuse-lite": "^1.0.30001746", - "electron-to-chromium": "^1.5.227", - "node-releases": "^2.0.21", - "update-browserslist-db": "^1.1.3" - }, - "bin": { - "browserslist": "cli.js" + "@types/hast": "^3.0.0", + "@types/mdast": "^4.0.0", + "@ungap/structured-clone": "^1.0.0", + "devlop": "^1.0.0", + "micromark-util-sanitize-uri": "^2.0.0", + "trim-lines": "^3.0.0", + "unist-util-position": "^5.0.0", + "unist-util-visit": "^5.0.0", + "vfile": "^6.0.0" }, - "engines": { - "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/bs-logger": { - "version": "0.2.6", - "resolved": "https://registry.npmjs.org/bs-logger/-/bs-logger-0.2.6.tgz", - "integrity": "sha512-pd8DCoxmbgc7hyPKOvxtqNcjYoOsABPQdcCUjGp3d42VR2CX1ORhk2A87oqqu5R1kk+76nsxZupkmyd+MVtCog==", - "dev": true, + "node_modules/hast-util-raw/node_modules/unist-util-is": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-6.0.1.tgz", + "integrity": "sha512-LsiILbtBETkDz8I9p1dQ0uyRUWuaQzd/cuEeS1hoRSyW5E5XGmTzlwY1OrNzzakGowI9Dr/I8HVaw4hTtnxy8g==", "license": "MIT", "dependencies": { - "fast-json-stable-stringify": "2.x" + "@types/unist": "^3.0.0" }, - "engines": { - "node": ">= 6" + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/bs58": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/bs58/-/bs58-6.0.0.tgz", - "integrity": "sha512-PD0wEnEYg6ijszw/u8s+iI3H17cTymlrwkKhDhPZq+Sokl3AU4htyBFTjAeNAlCCmg0f53g6ih3jATyCKftTfw==", + "node_modules/hast-util-raw/node_modules/unist-util-position": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/unist-util-position/-/unist-util-position-5.0.0.tgz", + "integrity": "sha512-fucsC7HjXvkB5R3kTCO7kUjRdrS0BJt3M/FPxmHMBOm8JQi2BsHAHFsy27E0EolP8rp0NzXsJ+jNPyDWvOJZPA==", "license": "MIT", "dependencies": { - "base-x": "^5.0.0" + "@types/unist": "^3.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/bs58check": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/bs58check/-/bs58check-2.1.2.tgz", - "integrity": "sha512-0TS1jicxdU09dwJMNZtVAfzPi6Q6QeN0pM1Fkzrjn+XYHvzMKPU3pHVpva+769iNVSfIYWf7LJ6WR+BuuMf8cA==", + "node_modules/hast-util-raw/node_modules/unist-util-stringify-position": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-4.0.0.tgz", + "integrity": "sha512-0ASV06AAoKCDkS2+xw5RXJywruurpbC4JZSm7nr7MOt1ojAzvyyaO+UxZf18j8FCF6kmzCZKcAgN/yu2gm2XgQ==", "license": "MIT", "dependencies": { - "bs58": "^4.0.0", - "create-hash": "^1.1.0", - "safe-buffer": "^5.1.2" + "@types/unist": "^3.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/bs58check/node_modules/base-x": { - "version": "3.0.11", - "resolved": "https://registry.npmjs.org/base-x/-/base-x-3.0.11.tgz", - "integrity": "sha512-xz7wQ8xDhdyP7tQxwdteLYeFfS68tSMNCZ/Y37WJ4bhGfKPpqEIlmIyueQHqOyoPhE6xNUqjzRr8ra0eF9VRvA==", + "node_modules/hast-util-raw/node_modules/unist-util-visit": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-5.0.0.tgz", + "integrity": "sha512-MR04uvD+07cwl/yhVuVWAtw+3GOR/knlL55Nd/wAdblk27GCVt3lqpTivy/tkJcZoNPzTwS1Y+KMojlLDhoTzg==", "license": "MIT", "dependencies": { - "safe-buffer": "^5.0.1" + "@types/unist": "^3.0.0", + "unist-util-is": "^6.0.0", + "unist-util-visit-parents": "^6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/bs58check/node_modules/bs58": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/bs58/-/bs58-4.0.1.tgz", - "integrity": "sha512-Ok3Wdf5vOIlBrgCvTq96gBkJw+JUEzdBgyaza5HLtPm7yTHkjRy8+JzNyHF7BHa0bNWOQIp3m5YF0nnFcOIKLw==", + "node_modules/hast-util-raw/node_modules/unist-util-visit-parents": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-6.0.2.tgz", + "integrity": "sha512-goh1s1TBrqSqukSc8wrjwWhL0hiJxgA8m4kFxGlQ+8FYQ3C/m11FcTs4YYem7V664AhHVvgoQLk890Ssdsr2IQ==", "license": "MIT", "dependencies": { - "base-x": "^3.0.2" + "@types/unist": "^3.0.0", + "unist-util-is": "^6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/bser": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/bser/-/bser-2.1.1.tgz", - "integrity": "sha512-gQxTNE/GAfIIrmHLUE3oJyp5FO6HRBfhjnw4/wMmA63ZGDJnWBmgY/lyQBpnDUkGmAhbSe39tx2d/iTOAfglwQ==", - "license": "Apache-2.0", + "node_modules/hast-util-raw/node_modules/vfile": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/vfile/-/vfile-6.0.3.tgz", + "integrity": "sha512-KzIbH/9tXat2u30jf+smMwFCsno4wHVdNmzFyL+T/L3UGqqk6JKfVqOFOZEpZSHADH1k40ab6NUIXZq422ov3Q==", + "license": "MIT", "dependencies": { - "node-int64": "^0.4.0" + "@types/unist": "^3.0.0", + "vfile-message": "^4.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/buffer": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/buffer/-/buffer-6.0.3.tgz", - "integrity": "sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], + "node_modules/hast-util-raw/node_modules/vfile-message": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/vfile-message/-/vfile-message-4.0.3.tgz", + "integrity": "sha512-QTHzsGd1EhbZs4AsQ20JX1rC3cOlt/IWJruk893DfLRr57lcnOeMaWG4K0JrRta4mIJZKth2Au3mM3u03/JWKw==", "license": "MIT", "dependencies": { - "base64-js": "^1.3.1", - "ieee754": "^1.2.1" + "@types/unist": "^3.0.0", + "unist-util-stringify-position": "^4.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/buffer-alloc": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/buffer-alloc/-/buffer-alloc-1.2.0.tgz", - "integrity": "sha512-CFsHQgjtW1UChdXgbyJGtnm+O/uLQeZdtbDo8mfUgYXCHSM1wgrVxXm6bSyrUuErEb+4sYVGCzASBRot7zyrow==", + "node_modules/hast-util-to-estree": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/hast-util-to-estree/-/hast-util-to-estree-3.1.3.tgz", + "integrity": "sha512-48+B/rJWAp0jamNbAAf9M7Uf//UVqAoMmgXhBdxTDJLGKY+LRnZ99qcG+Qjl5HfMpYNzS5v4EAwVEF34LeAj7w==", "license": "MIT", "dependencies": { - "buffer-alloc-unsafe": "^1.1.0", - "buffer-fill": "^1.0.0" + "@types/estree": "^1.0.0", + "@types/estree-jsx": "^1.0.0", + "@types/hast": "^3.0.0", + "comma-separated-tokens": "^2.0.0", + "devlop": "^1.0.0", + "estree-util-attach-comments": "^3.0.0", + "estree-util-is-identifier-name": "^3.0.0", + "hast-util-whitespace": "^3.0.0", + "mdast-util-mdx-expression": "^2.0.0", + "mdast-util-mdx-jsx": "^3.0.0", + "mdast-util-mdxjs-esm": "^2.0.0", + "property-information": "^7.0.0", + "space-separated-tokens": "^2.0.0", + "style-to-js": "^1.0.0", + "unist-util-position": "^5.0.0", + "zwitch": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/buffer-alloc-unsafe": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/buffer-alloc-unsafe/-/buffer-alloc-unsafe-1.1.0.tgz", - "integrity": "sha512-TEM2iMIEQdJ2yjPJoSIsldnleVaAk1oW3DBVUykyOLsEsFmEc9kn+SFFPz+gl54KQNxlDnAwCXosOS9Okx2xAg==", - "license": "MIT" - }, - "node_modules/buffer-crc32": { - "version": "0.2.13", - "resolved": "https://registry.npmjs.org/buffer-crc32/-/buffer-crc32-0.2.13.tgz", - "integrity": "sha512-VO9Ht/+p3SN7SKWqcrgEzjGbRSJYTx+Q1pTQC0wrWqHx0vpJraQ6GtHx8tvcg1rlK1byhU5gccxgOgj7B0TDkQ==", - "dev": true, + "node_modules/hast-util-to-estree/node_modules/comma-separated-tokens": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/comma-separated-tokens/-/comma-separated-tokens-2.0.3.tgz", + "integrity": "sha512-Fu4hJdvzeylCfQPp9SGWidpzrMs7tTrlu6Vb8XGaRGck8QSNZJJp538Wrb60Lax4fPwR64ViY468OIUTbRlGZg==", "license": "MIT", - "engines": { - "node": "*" + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" } }, - "node_modules/buffer-equal-constant-time": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/buffer-equal-constant-time/-/buffer-equal-constant-time-1.0.1.tgz", - "integrity": "sha512-zRpUiDwd/xk6ADqPMATG8vc9VPrkck7T07OIx0gnjmJAnHnTVXNQG3vfvWNuiZIkwu9KrKdA1iJKfsfTVxE6NA==", - "license": "BSD-3-Clause" - }, - "node_modules/buffer-fill": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/buffer-fill/-/buffer-fill-1.0.0.tgz", - "integrity": "sha512-T7zexNBwiiaCOGDg9xNX9PBmjrubblRkENuptryuI64URkXDFum9il/JGL8Lm8wYfAXpredVXXZz7eMHilimiQ==", - "license": "MIT" - }, - "node_modules/buffer-from": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", - "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==", - "license": "MIT" - }, - "node_modules/buffer-xor": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/buffer-xor/-/buffer-xor-1.0.3.tgz", - "integrity": "sha512-571s0T7nZWK6vB67HI5dyUF7wXiNcfaPPPTl6zYCNApANjIvYJTg7hlud/+cJpdAhS7dVzqMLmfhfHR3rAcOjQ==", - "license": "MIT" - }, - "node_modules/buildcheck": { - "version": "0.0.6", - "resolved": "https://registry.npmjs.org/buildcheck/-/buildcheck-0.0.6.tgz", - "integrity": "sha512-8f9ZJCUXyT1M35Jx7MkBgmBMo3oHTTBIPLiY9xyL0pl3T5RwcPEY8cUHr5LBNfu/fk6c2T4DJZuVM/8ZZT2D2A==", - "dev": true, - "optional": true, - "engines": { - "node": ">=10.0.0" + "node_modules/hast-util-to-estree/node_modules/property-information": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/property-information/-/property-information-7.1.0.tgz", + "integrity": "sha512-TwEZ+X+yCJmYfL7TPUOcvBZ4QfoT5YenQiJuX//0th53DE6w0xxLEtfK3iyryQFddXuvkIk51EEgrJQ0WJkOmQ==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" } }, - "node_modules/builtin-status-codes": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/builtin-status-codes/-/builtin-status-codes-3.0.0.tgz", - "integrity": "sha512-HpGFw18DgFWlncDfjTa2rcQ4W88O1mC8e8yZ2AvQY5KDaktSTwo+KRf6nHK6FRI5FyRyb/5T6+TSxfP7QyGsmQ==", - "dev": true, - "license": "MIT" - }, - "node_modules/builtins": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/builtins/-/builtins-1.0.3.tgz", - "integrity": "sha512-uYBjakWipfaO/bXI7E8rq6kpwHRZK5cNYrUv2OzZSI/FvmdMyXJ2tG9dKcjEC5YHmHpUAwsargWIZNWdxb/bnQ==", + "node_modules/hast-util-to-estree/node_modules/space-separated-tokens": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/space-separated-tokens/-/space-separated-tokens-2.0.2.tgz", + "integrity": "sha512-PEGlAwrG8yXGXRjW32fGbg66JAlOAwbObuqVoJpv/mRgoWDQfgH1wDPvtzWyUSNAXBGSk8h755YDbbcEy3SH2Q==", "license": "MIT", - "optional": true + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } }, - "node_modules/bundle-n-require": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/bundle-n-require/-/bundle-n-require-1.1.2.tgz", - "integrity": "sha512-bEk2jakVK1ytnZ9R2AAiZEeK/GxPUM8jvcRxHZXifZDMcjkI4EG/GlsJ2YGSVYT9y/p/gA9/0yDY8rCGsSU6Tg==", - "dev": true, + "node_modules/hast-util-to-estree/node_modules/unist-util-position": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/unist-util-position/-/unist-util-position-5.0.0.tgz", + "integrity": "sha512-fucsC7HjXvkB5R3kTCO7kUjRdrS0BJt3M/FPxmHMBOm8JQi2BsHAHFsy27E0EolP8rp0NzXsJ+jNPyDWvOJZPA==", "license": "MIT", "dependencies": { - "esbuild": "^0.25.1", - "node-eval": "^2.0.0" + "@types/unist": "^3.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/busboy": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/busboy/-/busboy-1.6.0.tgz", - "integrity": "sha512-8SFQbg/0hQ9xy3UNTB0YEnsNBbWfhf7RtnzpL7TkBiTBRfrQ9Fxcnz7VJsleJpyp6rVLvXiuORqjlHi5q+PYuA==", + "node_modules/hast-util-to-jsx-runtime": { + "version": "2.3.6", + "resolved": "https://registry.npmjs.org/hast-util-to-jsx-runtime/-/hast-util-to-jsx-runtime-2.3.6.tgz", + "integrity": "sha512-zl6s8LwNyo1P9uw+XJGvZtdFF1GdAkOg8ujOw+4Pyb76874fLps4ueHXDhXWdk6YHQ6OgUtinliG7RsYvCbbBg==", + "license": "MIT", "dependencies": { - "streamsearch": "^1.1.0" + "@types/estree": "^1.0.0", + "@types/hast": "^3.0.0", + "@types/unist": "^3.0.0", + "comma-separated-tokens": "^2.0.0", + "devlop": "^1.0.0", + "estree-util-is-identifier-name": "^3.0.0", + "hast-util-whitespace": "^3.0.0", + "mdast-util-mdx-expression": "^2.0.0", + "mdast-util-mdx-jsx": "^3.0.0", + "mdast-util-mdxjs-esm": "^2.0.0", + "property-information": "^7.0.0", + "space-separated-tokens": "^2.0.0", + "style-to-js": "^1.0.0", + "unist-util-position": "^5.0.0", + "vfile-message": "^4.0.0" }, - "engines": { - "node": ">=10.16.0" + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/byline": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/byline/-/byline-5.0.0.tgz", - "integrity": "sha512-s6webAy+R4SR8XVuJWt2V2rGvhnrhxN+9S15GNuTK3wKPOXFF6RNc+8ug2XhH+2s4f+uudG4kUVYmYOQWL2g0Q==", - "dev": true, + "node_modules/hast-util-to-jsx-runtime/node_modules/comma-separated-tokens": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/comma-separated-tokens/-/comma-separated-tokens-2.0.3.tgz", + "integrity": "sha512-Fu4hJdvzeylCfQPp9SGWidpzrMs7tTrlu6Vb8XGaRGck8QSNZJJp538Wrb60Lax4fPwR64ViY468OIUTbRlGZg==", "license": "MIT", - "engines": { - "node": ">=0.10.0" + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" } }, - "node_modules/bytes": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", - "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==", + "node_modules/hast-util-to-jsx-runtime/node_modules/property-information": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/property-information/-/property-information-7.1.0.tgz", + "integrity": "sha512-TwEZ+X+yCJmYfL7TPUOcvBZ4QfoT5YenQiJuX//0th53DE6w0xxLEtfK3iyryQFddXuvkIk51EEgrJQ0WJkOmQ==", "license": "MIT", - "engines": { - "node": ">= 0.8" + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" } }, - "node_modules/cac": { - "version": "6.7.14", - "resolved": "https://registry.npmjs.org/cac/-/cac-6.7.14.tgz", - "integrity": "sha512-b6Ilus+c3RrdDk+JhLKUAQfzzgLEPy6wcXqS7f/xe1EETvsDP6GORG7SFuOs6cID5YkqchW/LXZbX5bc8j7ZcQ==", - "dev": true, + "node_modules/hast-util-to-jsx-runtime/node_modules/space-separated-tokens": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/space-separated-tokens/-/space-separated-tokens-2.0.2.tgz", + "integrity": "sha512-PEGlAwrG8yXGXRjW32fGbg66JAlOAwbObuqVoJpv/mRgoWDQfgH1wDPvtzWyUSNAXBGSk8h755YDbbcEy3SH2Q==", "license": "MIT", - "engines": { - "node": ">=8" + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" } }, - "node_modules/cacheable-lookup": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/cacheable-lookup/-/cacheable-lookup-7.0.0.tgz", - "integrity": "sha512-+qJyx4xiKra8mZrcwhjMRMUhD5NR1R8esPkzIYxX96JiecFoxAXFuz/GpR3+ev4PE1WamHip78wV0vcmPQtp8w==", - "dev": true, + "node_modules/hast-util-to-jsx-runtime/node_modules/unist-util-position": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/unist-util-position/-/unist-util-position-5.0.0.tgz", + "integrity": "sha512-fucsC7HjXvkB5R3kTCO7kUjRdrS0BJt3M/FPxmHMBOm8JQi2BsHAHFsy27E0EolP8rp0NzXsJ+jNPyDWvOJZPA==", "license": "MIT", - "engines": { - "node": ">=14.16" + "dependencies": { + "@types/unist": "^3.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/cacheable-request": { - "version": "10.2.14", - "resolved": "https://registry.npmjs.org/cacheable-request/-/cacheable-request-10.2.14.tgz", - "integrity": "sha512-zkDT5WAF4hSSoUgyfg5tFIxz8XQK+25W/TLVojJTMKBaxevLBBtLxgqguAuVQB8PVW79FVjHcU+GJ9tVbDZ9mQ==", - "dev": true, + "node_modules/hast-util-to-jsx-runtime/node_modules/unist-util-stringify-position": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-4.0.0.tgz", + "integrity": "sha512-0ASV06AAoKCDkS2+xw5RXJywruurpbC4JZSm7nr7MOt1ojAzvyyaO+UxZf18j8FCF6kmzCZKcAgN/yu2gm2XgQ==", "license": "MIT", "dependencies": { - "@types/http-cache-semantics": "^4.0.2", - "get-stream": "^6.0.1", - "http-cache-semantics": "^4.1.1", - "keyv": "^4.5.3", - "mimic-response": "^4.0.0", - "normalize-url": "^8.0.0", - "responselike": "^3.0.0" + "@types/unist": "^3.0.0" }, - "engines": { - "node": ">=14.16" + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/call-bind": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.8.tgz", - "integrity": "sha512-oKlSFMcMwpUg2ednkhQ454wfWiU/ul3CkJe/PEHcTKuiX6RpbehUiFMXu13HalGZxfUwCQzZG747YXBn1im9ww==", + "node_modules/hast-util-to-jsx-runtime/node_modules/vfile-message": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/vfile-message/-/vfile-message-4.0.3.tgz", + "integrity": "sha512-QTHzsGd1EhbZs4AsQ20JX1rC3cOlt/IWJruk893DfLRr57lcnOeMaWG4K0JrRta4mIJZKth2Au3mM3u03/JWKw==", "license": "MIT", "dependencies": { - "call-bind-apply-helpers": "^1.0.0", - "es-define-property": "^1.0.0", - "get-intrinsic": "^1.2.4", - "set-function-length": "^1.2.2" - }, - "engines": { - "node": ">= 0.4" + "@types/unist": "^3.0.0", + "unist-util-stringify-position": "^4.0.0" }, "funding": { - "url": "https://github.com/sponsors/ljharb" + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/call-bind-apply-helpers": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/call-bind-apply-helpers/-/call-bind-apply-helpers-1.0.2.tgz", - "integrity": "sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ==", + "node_modules/hast-util-to-parse5": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/hast-util-to-parse5/-/hast-util-to-parse5-8.0.1.tgz", + "integrity": "sha512-MlWT6Pjt4CG9lFCjiz4BH7l9wmrMkfkJYCxFwKQic8+RTZgWPuWxwAfjJElsXkex7DJjfSJsQIt931ilUgmwdA==", "license": "MIT", "dependencies": { - "es-errors": "^1.3.0", - "function-bind": "^1.1.2" + "@types/hast": "^3.0.0", + "comma-separated-tokens": "^2.0.0", + "devlop": "^1.0.0", + "property-information": "^7.0.0", + "space-separated-tokens": "^2.0.0", + "web-namespaces": "^2.0.0", + "zwitch": "^2.0.0" }, - "engines": { - "node": ">= 0.4" + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/call-bound": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/call-bound/-/call-bound-1.0.4.tgz", - "integrity": "sha512-+ys997U96po4Kx/ABpBCqhA9EuxJaQWDQg7295H4hBphv3IZg0boBKuwYpt4YXp6MZ5AmZQnU/tyMTlRpaSejg==", + "node_modules/hast-util-to-parse5/node_modules/comma-separated-tokens": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/comma-separated-tokens/-/comma-separated-tokens-2.0.3.tgz", + "integrity": "sha512-Fu4hJdvzeylCfQPp9SGWidpzrMs7tTrlu6Vb8XGaRGck8QSNZJJp538Wrb60Lax4fPwR64ViY468OIUTbRlGZg==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/hast-util-to-parse5/node_modules/property-information": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/property-information/-/property-information-7.1.0.tgz", + "integrity": "sha512-TwEZ+X+yCJmYfL7TPUOcvBZ4QfoT5YenQiJuX//0th53DE6w0xxLEtfK3iyryQFddXuvkIk51EEgrJQ0WJkOmQ==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/hast-util-to-parse5/node_modules/space-separated-tokens": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/space-separated-tokens/-/space-separated-tokens-2.0.2.tgz", + "integrity": "sha512-PEGlAwrG8yXGXRjW32fGbg66JAlOAwbObuqVoJpv/mRgoWDQfgH1wDPvtzWyUSNAXBGSk8h755YDbbcEy3SH2Q==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/hast-util-whitespace": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/hast-util-whitespace/-/hast-util-whitespace-3.0.0.tgz", + "integrity": "sha512-88JUN06ipLwsnv+dVn+OIYOvAuvBMy/Qoi6O7mQHxdPXpjy+Cd6xRkWwux7DKO+4sYILtLBRIKgsdpS2gQc7qw==", "license": "MIT", "dependencies": { - "call-bind-apply-helpers": "^1.0.2", - "get-intrinsic": "^1.3.0" + "@types/hast": "^3.0.0" }, - "engines": { - "node": ">= 0.4" + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/hastscript": { + "version": "9.0.1", + "resolved": "https://registry.npmjs.org/hastscript/-/hastscript-9.0.1.tgz", + "integrity": "sha512-g7df9rMFX/SPi34tyGCyUBREQoKkapwdY/T04Qn9TDWfHhAYt4/I0gMVirzK5wEzeUqIjEB+LXC/ypb7Aqno5w==", + "license": "MIT", + "dependencies": { + "@types/hast": "^3.0.0", + "comma-separated-tokens": "^2.0.0", + "hast-util-parse-selector": "^4.0.0", + "property-information": "^7.0.0", + "space-separated-tokens": "^2.0.0" }, "funding": { - "url": "https://github.com/sponsors/ljharb" + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/callsites": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", - "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", + "node_modules/hastscript/node_modules/comma-separated-tokens": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/comma-separated-tokens/-/comma-separated-tokens-2.0.3.tgz", + "integrity": "sha512-Fu4hJdvzeylCfQPp9SGWidpzrMs7tTrlu6Vb8XGaRGck8QSNZJJp538Wrb60Lax4fPwR64ViY468OIUTbRlGZg==", "license": "MIT", - "engines": { - "node": ">=6" + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" } }, - "node_modules/camelcase": { - "version": "5.3.1", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", - "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", + "node_modules/hastscript/node_modules/property-information": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/property-information/-/property-information-7.1.0.tgz", + "integrity": "sha512-TwEZ+X+yCJmYfL7TPUOcvBZ4QfoT5YenQiJuX//0th53DE6w0xxLEtfK3iyryQFddXuvkIk51EEgrJQ0WJkOmQ==", "license": "MIT", - "engines": { - "node": ">=6" + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" } }, - "node_modules/caniuse-lite": { - "version": "1.0.30001746", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001746.tgz", - "integrity": "sha512-eA7Ys/DGw+pnkWWSE/id29f2IcPHVoE8wxtvE5JdvD2V28VTDPy1yEeo11Guz0sJ4ZeGRcm3uaTcAqK1LXaphA==", - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/browserslist" - }, - { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/caniuse-lite" - }, - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ], - "license": "CC-BY-4.0" + "node_modules/hastscript/node_modules/space-separated-tokens": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/space-separated-tokens/-/space-separated-tokens-2.0.2.tgz", + "integrity": "sha512-PEGlAwrG8yXGXRjW32fGbg66JAlOAwbObuqVoJpv/mRgoWDQfgH1wDPvtzWyUSNAXBGSk8h755YDbbcEy3SH2Q==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } }, - "node_modules/canonicalize": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/canonicalize/-/canonicalize-2.1.0.tgz", - "integrity": "sha512-F705O3xrsUtgt98j7leetNhTWPe+5S72rlL5O4jA1pKqBVQ/dT1O1D6PFxmSXvc0SUOinWS57DKx0I3CHrXJHQ==", - "license": "Apache-2.0", + "node_modules/he": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/he/-/he-1.2.0.tgz", + "integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==", + "license": "MIT", "bin": { - "canonicalize": "bin/canonicalize.js" + "he": "bin/he" } }, - "node_modules/caseless": { - "version": "0.12.0", - "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz", - "integrity": "sha512-4tYFyifaFfGacoiObjJegolkwSU4xQNGbVgUiNYVUxbQ2x2lUsFvY4hVgVzGiIe6WLOPqycWXA40l+PWsxthUw==", + "node_modules/heap": { + "version": "0.2.7", + "resolved": "https://registry.npmjs.org/heap/-/heap-0.2.7.tgz", + "integrity": "sha512-2bsegYkkHO+h/9MGbn6KWcE45cHZgPANo5LXF7EvWdT0yT2EguSVO1nDgU5c8+ZOPwp2vMNa7YFsJhVcDR9Sdg==", "dev": true, - "license": "Apache-2.0" + "license": "MIT" }, - "node_modules/cbor": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/cbor/-/cbor-8.1.0.tgz", - "integrity": "sha512-DwGjNW9omn6EwP70aXsn7FQJx5kO12tX0bZkaTjzdVFM6/7nhA4t0EENocKGx6D2Bch9PE2KzCUf5SceBdeijg==", - "dev": true, + "node_modules/help-me": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/help-me/-/help-me-5.0.0.tgz", + "integrity": "sha512-7xgomUX6ADmcYzFik0HzAxh/73YlKR9bmFzf51CZwR+b6YtzU2m0u49hQCqV6SvlqIqsaxovfwdvbnsw3b/zpg==", + "license": "MIT" + }, + "node_modules/hermes-compiler": { + "version": "0.14.0", + "resolved": "https://registry.npmjs.org/hermes-compiler/-/hermes-compiler-0.14.0.tgz", + "integrity": "sha512-clxa193o+GYYwykWVFfpHduCATz8fR5jvU7ngXpfKHj+E9hr9vjLNtdLSEe8MUbObvVexV3wcyxQ00xTPIrB1Q==", + "license": "MIT", + "peer": true + }, + "node_modules/hermes-estree": { + "version": "0.29.1", + "resolved": "https://registry.npmjs.org/hermes-estree/-/hermes-estree-0.29.1.tgz", + "integrity": "sha512-jl+x31n4/w+wEqm0I2r4CMimukLbLQEYpisys5oCre611CI5fc9TxhqkBBCJ1edDG4Kza0f7CgNz8xVMLZQOmQ==", + "license": "MIT" + }, + "node_modules/hermes-parser": { + "version": "0.29.1", + "resolved": "https://registry.npmjs.org/hermes-parser/-/hermes-parser-0.29.1.tgz", + "integrity": "sha512-xBHWmUtRC5e/UL0tI7Ivt2riA/YBq9+SiYFU7C1oBa/j2jYGlIF9043oak1F47ihuDIxQ5nbsKueYJDRY02UgA==", "license": "MIT", "dependencies": { - "nofilter": "^3.1.0" - }, - "engines": { - "node": ">=12.19" + "hermes-estree": "0.29.1" } }, - "node_modules/cd": { - "version": "0.3.3", - "resolved": "https://registry.npmjs.org/cd/-/cd-0.3.3.tgz", - "integrity": "sha512-X2y0Ssu48ucdkrNgCdg6k3EZWjWVy/dsEywUUTeZEIW31f3bQfq65Svm+TzU1Hz+qqhdmyCdjGhUvRsSKHl/mw==", - "engines": { - "node": "*" - } + "node_modules/hey-listen": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/hey-listen/-/hey-listen-1.0.8.tgz", + "integrity": "sha512-COpmrF2NOg4TBWUJ5UVyaCU2A88wEMkUPK4hNqyCkqHbxT92BbvfjoSozkAIIm6XhicGlJHhFdullInrdhwU8Q==", + "license": "MIT" }, - "node_modules/chai": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/chai/-/chai-4.5.0.tgz", - "integrity": "sha512-RITGBfijLkBddZvnn8jdqoTypxvqbOLYQkGGxXzeFjVHvudaPw0HNFD9x928/eUwYWd2dPCugVqspGALTZZQKw==", + "node_modules/history": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/history/-/history-5.3.0.tgz", + "integrity": "sha512-ZqaKwjjrAYUYfLG+htGaIIZ4nioX2L70ZUMIFysS3xvBsSG4x/n1V6TXV3N8ZYNuFGlDirFg32T7B6WOUPDYcQ==", + "dev": true, "license": "MIT", "dependencies": { - "assertion-error": "^1.1.0", - "check-error": "^1.0.3", - "deep-eql": "^4.1.3", - "get-func-name": "^2.0.2", - "loupe": "^2.3.6", - "pathval": "^1.1.1", - "type-detect": "^4.1.0" - }, - "engines": { - "node": ">=4" + "@babel/runtime": "^7.7.6" } }, - "node_modules/chai-as-promised": { - "version": "7.1.2", - "resolved": "https://registry.npmjs.org/chai-as-promised/-/chai-as-promised-7.1.2.tgz", - "integrity": "sha512-aBDHZxRzYnUYuIAIPBH2s511DjlKPzXNlXSGFC8CwmroWQLfrW0LtE1nK3MAwwNhJPa9raEjNCmRoFpG0Hurdw==", - "license": "WTFPL", + "node_modules/hmac-drbg": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/hmac-drbg/-/hmac-drbg-1.0.1.tgz", + "integrity": "sha512-Tti3gMqLdZfhOQY1Mzf/AanLiqh1WTiJgEj26ZuYQ9fbkLomzGchCws4FyrSd4VkpBfiNhaE1On+lOz894jvXg==", + "license": "MIT", "dependencies": { - "check-error": "^1.0.2" - }, - "peerDependencies": { - "chai": ">= 2.1.2 < 6" + "hash.js": "^1.0.3", + "minimalistic-assert": "^1.0.0", + "minimalistic-crypto-utils": "^1.0.1" } }, - "node_modules/chai/node_modules/type-detect": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-4.1.0.tgz", - "integrity": "sha512-Acylog8/luQ8L7il+geoSxhEkazvkslg7PSNKOX59mbB9cOveP5aq9h74Y7YU8yDpJwetzQQrfIwtf4Wp4LKcw==", - "license": "MIT", - "engines": { - "node": ">=4" + "node_modules/hoist-non-react-statics": { + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/hoist-non-react-statics/-/hoist-non-react-statics-3.3.2.tgz", + "integrity": "sha512-/gGivxi8JPKWNm/W0jSmzcMPpfpPLc3dY/6GxhX2hQ9iGj3aDfklV4ET7NjKpSinLpJ5vafa9iiGIEZg10SfBw==", + "license": "BSD-3-Clause", + "dependencies": { + "react-is": "^16.7.0" } }, - "node_modules/chakra-react-select": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/chakra-react-select/-/chakra-react-select-4.5.0.tgz", - "integrity": "sha512-5oxVH9tmn3kVVLt9m/zT28Efv44mk30BZETubE2MhkGMIeM9oJsiL2+dhgKLNUMLRxglmacY00oGQTSI0JrRTA==", + "node_modules/hoist-non-react-statics/node_modules/react-is": { + "version": "16.13.1", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz", + "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==", + "license": "MIT" + }, + "node_modules/hosted-git-info": { + "version": "2.8.9", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.9.tgz", + "integrity": "sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==", + "dev": true, + "license": "ISC" + }, + "node_modules/hpack.js": { + "version": "2.1.6", + "resolved": "https://registry.npmjs.org/hpack.js/-/hpack.js-2.1.6.tgz", + "integrity": "sha512-zJxVehUdMGIKsRaNt7apO2Gqp0BdqW5yaiGHXXmbpvxgBYVZnAql+BJb4RO5ad2MgpbZKn5G6nMnegrH1FcNYQ==", "license": "MIT", "dependencies": { - "react-select": "5.7.0" - }, - "peerDependencies": { - "@chakra-ui/form-control": "^2.0.0", - "@chakra-ui/icon": "^3.0.0", - "@chakra-ui/layout": "^2.0.0", - "@chakra-ui/media-query": "^3.0.0", - "@chakra-ui/menu": "^2.0.0", - "@chakra-ui/spinner": "^2.0.0", - "@chakra-ui/system": "^2.0.0", - "@emotion/react": "^11.8.1", - "react": "^18.0.0", - "react-dom": "^18.0.0" + "inherits": "^2.0.1", + "obuf": "^1.0.0", + "readable-stream": "^2.0.1", + "wbuf": "^1.1.0" } }, - "node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "node_modules/html-encoding-sniffer": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/html-encoding-sniffer/-/html-encoding-sniffer-4.0.0.tgz", + "integrity": "sha512-Y22oTqIU4uuPgEemfz7NDJz6OeKf12Lsu+QC+s3BVpda64lTiMYCyGwg5ki4vFxkMwQdeZDl2adZoqUgdFuTgQ==", + "dev": true, "license": "MIT", "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" + "whatwg-encoding": "^3.1.1" }, "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" + "node": ">=18" } }, - "node_modules/chalk/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "node_modules/html-escaper": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/html-escaper/-/html-escaper-2.0.2.tgz", + "integrity": "sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==", + "license": "MIT" + }, + "node_modules/html-minifier-terser": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/html-minifier-terser/-/html-minifier-terser-7.2.0.tgz", + "integrity": "sha512-tXgn3QfqPIpGl9o+K5tpcj3/MN4SfLtsx2GWwBC3SSd0tXQGyF3gsSqad8loJgKZGM3ZxbYDd5yhiBIdWpmvLA==", "license": "MIT", "dependencies": { - "color-convert": "^2.0.1" + "camel-case": "^4.1.2", + "clean-css": "~5.3.2", + "commander": "^10.0.0", + "entities": "^4.4.0", + "param-case": "^3.0.4", + "relateurl": "^0.2.7", + "terser": "^5.15.1" }, - "engines": { - "node": ">=8" + "bin": { + "html-minifier-terser": "cli.js" }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" + "engines": { + "node": "^14.13.1 || >=16.0.0" } }, - "node_modules/chalk/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "node_modules/html-minifier-terser/node_modules/commander": { + "version": "10.0.1", + "resolved": "https://registry.npmjs.org/commander/-/commander-10.0.1.tgz", + "integrity": "sha512-y4Mg2tXshplEbSGzx7amzPwKKOCGuoSRP/CjEdwwk0FOGlUbq6lKuoyDZTNZkmxHdJtp54hdfY/JUrdL7Xfdug==", "license": "MIT", - "dependencies": { - "color-name": "~1.1.4" - }, "engines": { - "node": ">=7.0.0" + "node": ">=14" } }, - "node_modules/chalk/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "license": "MIT" + "node_modules/html-minifier-terser/node_modules/entities": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/entities/-/entities-4.5.0.tgz", + "integrity": "sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==", + "license": "BSD-2-Clause", + "engines": { + "node": ">=0.12" + }, + "funding": { + "url": "https://github.com/fb55/entities?sponsor=1" + } }, - "node_modules/char-regex": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/char-regex/-/char-regex-1.0.2.tgz", - "integrity": "sha512-kWWXztvZ5SBQV+eRgKFeh8q5sLuZY2+8WUIzlxWVTg+oGwY14qylx1KbKzHd8P6ZYkAg0xyIDU9JMHhyJMZ1jw==", - "dev": true, + "node_modules/html-parse-stringify": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/html-parse-stringify/-/html-parse-stringify-3.0.1.tgz", + "integrity": "sha512-KknJ50kTInJ7qIScF3jeaFRpMpE8/lfiTdzf/twXyPBLAGrLRTmkz3AdTnKeh40X8k9L2fdYwEp/42WGXIRGcg==", "license": "MIT", - "engines": { - "node": ">=10" + "dependencies": { + "void-elements": "3.1.0" } }, - "node_modules/character-entities": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/character-entities/-/character-entities-1.2.4.tgz", - "integrity": "sha512-iBMyeEHxfVnIakwOuDXpVkc54HijNgCyQB2w0VfGQThle6NXn50zU6V/u+LDhxHcDUPojn6Kpga3PTAD8W1bQw==", + "node_modules/html-tags": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/html-tags/-/html-tags-3.3.1.tgz", + "integrity": "sha512-ztqyC3kLto0e9WbNp0aeP+M3kTt+nbaIveGmUxAtZa+8iFgKLUOD4YKM5j+f3QD89bra7UeumolZHKuOXnTmeQ==", "license": "MIT", + "engines": { + "node": ">=8" + }, "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/character-entities-legacy": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/character-entities-legacy/-/character-entities-legacy-1.1.4.tgz", - "integrity": "sha512-3Xnr+7ZFS1uxeiUDvV02wQ+QDbc55o97tIV5zHScSPJpcLm/r0DFPcoY3tYRp+VZukxuMeKgXYmsXQHO05zQeA==", + "node_modules/html-void-elements": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/html-void-elements/-/html-void-elements-3.0.0.tgz", + "integrity": "sha512-bEqo66MRXsUGxWHV5IP0PUiAWwoEjba4VCzg0LjFJBpchPaTfyfCKTG6bc5F8ucKec3q5y6qOdGyYTSBEvhCrg==", "license": "MIT", "funding": { "type": "github", "url": "https://github.com/sponsors/wooorm" } }, - "node_modules/character-reference-invalid": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/character-reference-invalid/-/character-reference-invalid-1.1.4.tgz", - "integrity": "sha512-mKKUkUbhPpQlCOfIuZkvSEgktjPFIsZKRRbC6KWVEMvlzblj3i3asQv5ODsrwt0N3pHAEvjP8KTQPHkp0+6jOg==", + "node_modules/html-webpack-plugin": { + "version": "5.6.5", + "resolved": "https://registry.npmjs.org/html-webpack-plugin/-/html-webpack-plugin-5.6.5.tgz", + "integrity": "sha512-4xynFbKNNk+WlzXeQQ+6YYsH2g7mpfPszQZUi3ovKlj+pDmngQ7vRXjrrmGROabmKwyQkcgcX5hqfOwHbFmK5g==", "license": "MIT", + "dependencies": { + "@types/html-minifier-terser": "^6.0.0", + "html-minifier-terser": "^6.0.2", + "lodash": "^4.17.21", + "pretty-error": "^4.0.0", + "tapable": "^2.0.0" + }, + "engines": { + "node": ">=10.13.0" + }, "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" + "type": "opencollective", + "url": "https://opencollective.com/html-webpack-plugin" + }, + "peerDependencies": { + "@rspack/core": "0.x || 1.x", + "webpack": "^5.20.0" + }, + "peerDependenciesMeta": { + "@rspack/core": { + "optional": true + }, + "webpack": { + "optional": true + } } }, - "node_modules/chardet": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/chardet/-/chardet-2.1.0.tgz", - "integrity": "sha512-bNFETTG/pM5ryzQ9Ad0lJOTa6HWD/YsScAR3EnCPZRPlQh77JocYktSHOUHelyhm8IARL+o4c4F1bP5KVOjiRA==", - "dev": true, - "license": "MIT" - }, - "node_modules/charenc": { - "version": "0.0.2", - "resolved": "https://registry.npmjs.org/charenc/-/charenc-0.0.2.tgz", - "integrity": "sha512-yrLQ/yVUFXkzg7EDQsPieE/53+0RlaWTs+wBrvW36cyilJ2SaDWfl4Yj7MtLTXleV9uEKefbAGUPv2/iWSooRA==", - "dev": true, - "license": "BSD-3-Clause", + "node_modules/html-webpack-plugin/node_modules/commander": { + "version": "8.3.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-8.3.0.tgz", + "integrity": "sha512-OkTL9umf+He2DZkUq8f8J9of7yL6RJKI24dVITBmNfZBmri9zYZQrKkuXiKhyfPSu8tUhnVBB1iKXevvnlR4Ww==", + "license": "MIT", "engines": { - "node": "*" + "node": ">= 12" } }, - "node_modules/check-error": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/check-error/-/check-error-1.0.3.tgz", - "integrity": "sha512-iKEoDYaRmd1mxM90a2OEfWhjsjPpYPuQ+lMYsoxB126+t8fw7ySEO48nmDg5COTjxDI65/Y2OWpeEHk3ZOe8zg==", + "node_modules/html-webpack-plugin/node_modules/html-minifier-terser": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/html-minifier-terser/-/html-minifier-terser-6.1.0.tgz", + "integrity": "sha512-YXxSlJBZTP7RS3tWnQw74ooKa6L9b9i9QYXY21eUEvhZ3u9XLfv6OnFsQq6RxkhHygsaUMvYsZRV5rU/OVNZxw==", "license": "MIT", "dependencies": { - "get-func-name": "^2.0.2" + "camel-case": "^4.1.2", + "clean-css": "^5.2.2", + "commander": "^8.3.0", + "he": "^1.2.0", + "param-case": "^3.0.4", + "relateurl": "^0.2.7", + "terser": "^5.10.0" + }, + "bin": { + "html-minifier-terser": "cli.js" }, "engines": { - "node": "*" + "node": ">=12" } }, - "node_modules/chokidar": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.6.0.tgz", - "integrity": "sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==", + "node_modules/htmlparser2": { + "version": "8.0.2", + "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-8.0.2.tgz", + "integrity": "sha512-GYdjWKDkbRLkZ5geuHs5NY1puJ+PXwP7+fHPRz06Eirsb9ugf6d8kkXav6ADhcODhFFPMIXyxkxSuMf3D6NCFA==", + "funding": [ + "https://github.com/fb55/htmlparser2?sponsor=1", + { + "type": "github", + "url": "https://github.com/sponsors/fb55" + } + ], "license": "MIT", "dependencies": { - "anymatch": "~3.1.2", - "braces": "~3.0.2", - "glob-parent": "~5.1.2", - "is-binary-path": "~2.1.0", - "is-glob": "~4.0.1", - "normalize-path": "~3.0.0", - "readdirp": "~3.6.0" - }, + "domelementtype": "^2.3.0", + "domhandler": "^5.0.3", + "domutils": "^3.0.1", + "entities": "^4.4.0" + } + }, + "node_modules/htmlparser2/node_modules/entities": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/entities/-/entities-4.5.0.tgz", + "integrity": "sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==", + "license": "BSD-2-Clause", "engines": { - "node": ">= 8.10.0" + "node": ">=0.12" }, "funding": { - "url": "https://paulmillr.com/funding/" - }, - "optionalDependencies": { - "fsevents": "~2.3.2" + "url": "https://github.com/fb55/entities?sponsor=1" } }, - "node_modules/chokidar/node_modules/glob-parent": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", - "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", - "license": "ISC", + "node_modules/http-basic": { + "version": "8.1.3", + "resolved": "https://registry.npmjs.org/http-basic/-/http-basic-8.1.3.tgz", + "integrity": "sha512-/EcDMwJZh3mABI2NhGfHOGOeOZITqfkEO4p/xK+l3NpyncIHUQBoMvCSF/b5GqvKtySC2srL/GGG3+EtlqlmCw==", + "dev": true, + "license": "MIT", "dependencies": { - "is-glob": "^4.0.1" + "caseless": "^0.12.0", + "concat-stream": "^1.6.2", + "http-response-object": "^3.0.1", + "parse-cache-control": "^1.0.1" }, "engines": { - "node": ">= 6" + "node": ">=6.0.0" } }, - "node_modules/chownr": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/chownr/-/chownr-2.0.0.tgz", - "integrity": "sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ==", - "license": "ISC", - "optional": true, - "engines": { - "node": ">=10" - } + "node_modules/http-cache-semantics": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.2.0.tgz", + "integrity": "sha512-dTxcvPXqPvXBQpq5dUr6mEMJX4oIEFv6bwom3FDwKRDsuIjjJGANqhBuoAn9c1RQJIdAKav33ED65E2ys+87QQ==", + "license": "BSD-2-Clause" }, - "node_modules/chrome-launcher": { - "version": "0.15.2", - "resolved": "https://registry.npmjs.org/chrome-launcher/-/chrome-launcher-0.15.2.tgz", - "integrity": "sha512-zdLEwNo3aUVzIhKhTtXfxhdvZhUghrnmkvcAq2NoDd+LeOHKf03H5jwZ8T/STsAlzyALkBVK552iaG1fGf1xVQ==", - "license": "Apache-2.0", - "peer": true, + "node_modules/http-deceiver": { + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/http-deceiver/-/http-deceiver-1.2.7.tgz", + "integrity": "sha512-LmpOGxTfbpgtGVxJrj5k7asXHCgNZp5nLfp+hWc8QQRqtb7fUy6kRY3BO1h9ddF6yIPYUARgxGOwB42DnxIaNw==", + "license": "MIT" + }, + "node_modules/http-errors": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz", + "integrity": "sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==", + "license": "MIT", "dependencies": { - "@types/node": "*", - "escape-string-regexp": "^4.0.0", - "is-wsl": "^2.2.0", - "lighthouse-logger": "^1.0.0" - }, - "bin": { - "print-chrome-path": "bin/print-chrome-path.js" + "depd": "2.0.0", + "inherits": "2.0.4", + "setprototypeof": "1.2.0", + "statuses": "2.0.1", + "toidentifier": "1.0.1" }, "engines": { - "node": ">=12.13.0" + "node": ">= 0.8" } }, - "node_modules/chrome-trace-event": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/chrome-trace-event/-/chrome-trace-event-1.0.4.tgz", - "integrity": "sha512-rNjApaLzuwaOTjCiT8lSDdGN1APCiqkChLMJxJPWLunPAt5fy8xgU9/jNOchV84wfIxrA0lRQB7oCT8jrn/wrQ==", + "node_modules/http-errors/node_modules/statuses": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", + "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==", "license": "MIT", "engines": { - "node": ">=6.0" + "node": ">= 0.8" } }, - "node_modules/chromium-edge-launcher": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/chromium-edge-launcher/-/chromium-edge-launcher-0.2.0.tgz", - "integrity": "sha512-JfJjUnq25y9yg4FABRRVPmBGWPZZi+AQXT4mxupb67766/0UlhG8PAZCz6xzEMXTbW3CsSoE8PcCWA49n35mKg==", - "license": "Apache-2.0", - "peer": true, + "node_modules/http-parser-js": { + "version": "0.5.10", + "resolved": "https://registry.npmjs.org/http-parser-js/-/http-parser-js-0.5.10.tgz", + "integrity": "sha512-Pysuw9XpUq5dVc/2SMHpuTY01RFl8fttgcyunjL7eEMhGM3cI4eOmiCycJDVCo/7O7ClfQD3SaI6ftDzqOXYMA==", + "license": "MIT" + }, + "node_modules/http-proxy": { + "version": "1.18.1", + "resolved": "https://registry.npmjs.org/http-proxy/-/http-proxy-1.18.1.tgz", + "integrity": "sha512-7mz/721AbnJwIVbnaSv1Cz3Am0ZLT/UBwkC92VlxhXv/k/BBQfM2fXElQNC27BVGr0uwUpplYPQM9LnaBMR5NQ==", + "license": "MIT", "dependencies": { - "@types/node": "*", - "escape-string-regexp": "^4.0.0", - "is-wsl": "^2.2.0", - "lighthouse-logger": "^1.0.0", - "mkdirp": "^1.0.4", - "rimraf": "^3.0.2" + "eventemitter3": "^4.0.0", + "follow-redirects": "^1.0.0", + "requires-port": "^1.0.0" + }, + "engines": { + "node": ">=8.0.0" } }, - "node_modules/chromium-edge-launcher/node_modules/glob": { - "version": "7.2.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", - "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", - "deprecated": "Glob versions prior to v9 are no longer supported", - "license": "ISC", - "peer": true, + "node_modules/http-proxy-agent": { + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-7.0.2.tgz", + "integrity": "sha512-T1gkAiYYDWYx3V5Bmyu7HcfcvL7mUrTWiM6yOfa3PIphViJ/gFPbvidQ+veqSOHci/PxBcDabeUNCzpOODJZig==", + "dev": true, + "license": "MIT", "dependencies": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.1.1", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" + "agent-base": "^7.1.0", + "debug": "^4.3.4" }, "engines": { - "node": "*" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" + "node": ">= 14" } }, - "node_modules/chromium-edge-launcher/node_modules/mkdirp": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", - "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", + "node_modules/http-proxy-agent/node_modules/agent-base": { + "version": "7.1.4", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-7.1.4.tgz", + "integrity": "sha512-MnA+YT8fwfJPgBx3m60MNqakm30XOkyIoH1y6huTQvC0PwZG7ki8NacLBcrPbNoo8vEZy7Jpuk7+jMO+CUovTQ==", + "dev": true, "license": "MIT", - "peer": true, - "bin": { - "mkdirp": "bin/cmd.js" - }, "engines": { - "node": ">=10" + "node": ">= 14" } }, - "node_modules/chromium-edge-launcher/node_modules/rimraf": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", - "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", - "deprecated": "Rimraf versions prior to v4 are no longer supported", - "license": "ISC", - "peer": true, + "node_modules/http-proxy-middleware": { + "version": "2.0.9", + "resolved": "https://registry.npmjs.org/http-proxy-middleware/-/http-proxy-middleware-2.0.9.tgz", + "integrity": "sha512-c1IyJYLYppU574+YI7R4QyX2ystMtVXZwIdzazUIPIJsHuWNd+mho2j+bKoHftndicGj9yh+xjd+l0yj7VeT1Q==", + "license": "MIT", "dependencies": { - "glob": "^7.1.3" + "@types/http-proxy": "^1.17.8", + "http-proxy": "^1.18.1", + "is-glob": "^4.0.1", + "is-plain-obj": "^3.0.0", + "micromatch": "^4.0.2" }, - "bin": { - "rimraf": "bin.js" + "engines": { + "node": ">=12.0.0" + }, + "peerDependencies": { + "@types/express": "^4.17.13" + }, + "peerDependenciesMeta": { + "@types/express": { + "optional": true + } + } + }, + "node_modules/http-proxy-middleware/node_modules/is-plain-obj": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-3.0.0.tgz", + "integrity": "sha512-gwsOE28k+23GP1B6vFl1oVh/WOzmawBrKwo5Ev6wMKzPkaXaCDIQKzLnvsA42DRlbVTWorkgTKIviAKCWkfUwA==", + "license": "MIT", + "engines": { + "node": ">=10" }, "funding": { - "url": "https://github.com/sponsors/isaacs" + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/ci-info": { - "version": "3.9.0", - "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.9.0.tgz", - "integrity": "sha512-NIxF55hv4nSqQswkAeiOi1r83xy8JldOFDTWiug55KBu9Jnblncd2U6ViHmYgHf01TPZS77NJBhBMKdWj9HQMQ==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/sibiraj-s" - } - ], + "node_modules/http-proxy/node_modules/eventemitter3": { + "version": "4.0.7", + "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.7.tgz", + "integrity": "sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==", + "license": "MIT" + }, + "node_modules/http-response-object": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/http-response-object/-/http-response-object-3.0.2.tgz", + "integrity": "sha512-bqX0XTF6fnXSQcEJ2Iuyr75yVakyjIDCqroJQ/aHfSdlM743Cwqoi2nDYMzLGWUcuTWGWy8AAvOKXTfiv6q9RA==", + "dev": true, "license": "MIT", - "engines": { - "node": ">=8" + "dependencies": { + "@types/node": "^10.0.3" } }, - "node_modules/cipher-base": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/cipher-base/-/cipher-base-1.0.7.tgz", - "integrity": "sha512-Mz9QMT5fJe7bKI7MH31UilT5cEK5EHHRCccw/YRFsRY47AuNgaV6HY3rscp0/I4Q+tTW/5zoqpSeRRI54TkDWA==", + "node_modules/http-response-object/node_modules/@types/node": { + "version": "10.17.60", + "resolved": "https://registry.npmjs.org/@types/node/-/node-10.17.60.tgz", + "integrity": "sha512-F0KIgDJfy2nA3zMLmWGKxcH2ZVEtCZXHHdOQs2gSaQ27+lNeEfGxzkIw90aXswATX7AZ33tahPbzy6KAfUreVw==", + "dev": true, + "license": "MIT" + }, + "node_modules/http2-wrapper": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/http2-wrapper/-/http2-wrapper-2.2.1.tgz", + "integrity": "sha512-V5nVw1PAOgfI3Lmeaj2Exmeg7fenjhRUgz1lPSezy1CuhPYbgQtbQj4jZfEAEMlaL+vupsvhjqCyjzob0yxsmQ==", "license": "MIT", "dependencies": { - "inherits": "^2.0.4", - "safe-buffer": "^5.2.1", - "to-buffer": "^1.2.2" + "quick-lru": "^5.1.1", + "resolve-alpn": "^1.2.0" }, "engines": { - "node": ">= 0.10" + "node": ">=10.19.0" } }, - "node_modules/cjs-module-lexer": { - "version": "1.4.3", - "resolved": "https://registry.npmjs.org/cjs-module-lexer/-/cjs-module-lexer-1.4.3.tgz", - "integrity": "sha512-9z8TZaGM1pfswYeXrUpzPrkx8UnWYdhJclsiYMm6x/w5+nN+8Tf/LnAgfLGQCm59qAOxU8WwHEq2vNwF6i4j+Q==", + "node_modules/https-browserify": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/https-browserify/-/https-browserify-1.0.0.tgz", + "integrity": "sha512-J+FkSdyD+0mA0N+81tMotaRMfSL9SGi+xpD3T6YApKsc3bGSXJlfXri3VyFOeYkfLRQisDk1W+jIFFKBeUBbBg==", "dev": true, "license": "MIT" }, - "node_modules/class-transformer": { - "version": "0.5.1", - "resolved": "https://registry.npmjs.org/class-transformer/-/class-transformer-0.5.1.tgz", - "integrity": "sha512-SQa1Ws6hUbfC98vKGxZH3KFY0Y1lm5Zm0SY8XX9zbK7FJCyVEac3ATW0RIpwzW+oOfmHE5PMPufDG9hCfoEOMw==", - "license": "MIT" - }, - "node_modules/class-validator": { - "version": "0.14.2", - "resolved": "https://registry.npmjs.org/class-validator/-/class-validator-0.14.2.tgz", - "integrity": "sha512-3kMVRF2io8N8pY1IFIXlho9r8IPUUIfHe2hYVtiebvAzU2XeQFXTv+XI4WX+TnXmtwXMDcjngcpkiPM0O9PvLw==", + "node_modules/https-proxy-agent": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz", + "integrity": "sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==", + "devOptional": true, "license": "MIT", "dependencies": { - "@types/validator": "^13.11.8", - "libphonenumber-js": "^1.11.1", - "validator": "^13.9.0" + "agent-base": "6", + "debug": "4" + }, + "engines": { + "node": ">= 6" } }, - "node_modules/clean-stack": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-2.2.0.tgz", - "integrity": "sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==", + "node_modules/human-id": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/human-id/-/human-id-4.1.1.tgz", + "integrity": "sha512-3gKm/gCSUipeLsRYZbbdA1BD83lBoWUkZ7G9VFrhWPAU76KwYo5KR8V28bpoPm/ygy0x5/GCbpRQdY7VLYCoIg==", "dev": true, "license": "MIT", + "bin": { + "human-id": "dist/cli.js" + } + }, + "node_modules/human-signals": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz", + "integrity": "sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==", + "license": "Apache-2.0", "engines": { - "node": ">=6" + "node": ">=10.17.0" } }, - "node_modules/clear-any-console": { - "version": "1.16.3", - "resolved": "https://registry.npmjs.org/clear-any-console/-/clear-any-console-1.16.3.tgz", - "integrity": "sha512-x174l55a86DGVU0KvnLITsXhRgqwd/xNDTy16OyKKOiJU+1pXF9DrV9YvlepfMc/JuJ3a7CMNLEF4O7qwk0mEw==", + "node_modules/humanize-ms": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/humanize-ms/-/humanize-ms-1.2.1.tgz", + "integrity": "sha512-Fl70vYtsAFb/C06PTS9dZBo7ihau+Tu/DNCk/OyHhea07S+aeMWpFFkUaXRa8fI+ScZbEI8dfSxwY7gxZ9SAVQ==", "dev": true, "license": "MIT", "dependencies": { - "langbase": "*" + "ms": "^2.0.0" } }, - "node_modules/cli-boxes": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/cli-boxes/-/cli-boxes-2.2.1.tgz", - "integrity": "sha512-y4coMcylgSCdVinjiDBuR8PCC2bLjyGTwEmPb9NHR/QaNU6EUOXcTY/s6VjGMD6ENSEaeQYHCY0GNGS5jfMwPw==", + "node_modules/husky": { + "version": "9.1.7", + "resolved": "https://registry.npmjs.org/husky/-/husky-9.1.7.tgz", + "integrity": "sha512-5gs5ytaNjBrh5Ow3zrvdUUY+0VxIuWVL4i9irt6friV+BqdCfmV11CQTWMiBYWHbXhco+J1kHfTOUkePhCDvMA==", "dev": true, "license": "MIT", + "bin": { + "husky": "bin.js" + }, "engines": { - "node": ">=6" + "node": ">=18" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "url": "https://github.com/sponsors/typicode" } }, - "node_modules/cli-cursor": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-3.1.0.tgz", - "integrity": "sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==", + "node_modules/hyperdyperid": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/hyperdyperid/-/hyperdyperid-1.2.0.tgz", + "integrity": "sha512-Y93lCzHYgGWdrJ66yIktxiaGULYc6oGiABxhcO5AufBeOyoIdZF7bIfLaOrbM0iGIOXQQgxxRrFEnb+Y6w1n4A==", "license": "MIT", - "dependencies": { - "restore-cursor": "^3.1.0" - }, "engines": { - "node": ">=8" + "node": ">=10.18" } }, - "node_modules/cli-spinners": { - "version": "2.9.2", - "resolved": "https://registry.npmjs.org/cli-spinners/-/cli-spinners-2.9.2.tgz", - "integrity": "sha512-ywqV+5MmyL4E7ybXgKys4DugZbX0FC6LnwrhjuykIjnK9k8OQacQ7axGKnjDXWNhns0xot3bZI5h55H8yo9cJg==", + "node_modules/i18next": { + "version": "23.10.1", + "resolved": "https://registry.npmjs.org/i18next/-/i18next-23.10.1.tgz", + "integrity": "sha512-NDiIzFbcs3O9PXpfhkjyf7WdqFn5Vq6mhzhtkXzj51aOcNuPNcTwuYNuXCpHsanZGHlHKL35G7huoFeVic1hng==", + "funding": [ + { + "type": "individual", + "url": "https://locize.com" + }, + { + "type": "individual", + "url": "https://locize.com/i18next.html" + }, + { + "type": "individual", + "url": "https://www.i18next.com/how-to/faq#i18next-is-awesome.-how-can-i-support-the-project" + } + ], "license": "MIT", - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "peer": true, + "dependencies": { + "@babel/runtime": "^7.23.2" } }, - "node_modules/cli-table3": { - "version": "0.6.3", - "resolved": "https://registry.npmjs.org/cli-table3/-/cli-table3-0.6.3.tgz", - "integrity": "sha512-w5Jac5SykAeZJKntOxJCrm63Eg5/4dhMWIcuTbo9rpE+brgaSZo0RuNJZeOyMgsUdhDeojvgyQLmjI+K50ZGyg==", + "node_modules/i18next-browser-languagedetector": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/i18next-browser-languagedetector/-/i18next-browser-languagedetector-7.2.0.tgz", + "integrity": "sha512-U00DbDtFIYD3wkWsr2aVGfXGAj2TgnELzOX9qv8bT0aJtvPV9CRO77h+vgmHFBMe7LAxdwvT/7VkCWGya6L3tA==", "license": "MIT", "dependencies": { - "string-width": "^4.2.0" - }, - "engines": { - "node": "10.* || >= 12.*" - }, - "optionalDependencies": { - "@colors/colors": "1.5.0" + "@babel/runtime": "^7.23.2" } }, - "node_modules/cli-truncate": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/cli-truncate/-/cli-truncate-4.0.0.tgz", - "integrity": "sha512-nPdaFdQ0h/GEigbPClz11D0v/ZJEwxmeVZGeMo3Z5StPtUTkA9o1lD6QwoirYiSDzbcwn2XcjwmCp68W1IS4TA==", + "node_modules/iconv-lite": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.7.0.tgz", + "integrity": "sha512-cf6L2Ds3h57VVmkZe+Pn+5APsT7FpqJtEhhieDCvrE2MK5Qk9MyffgQyuxQTm6BChfeZNtcOLHp9IcWRVcIcBQ==", "dev": true, "license": "MIT", "dependencies": { - "slice-ansi": "^5.0.0", - "string-width": "^7.0.0" + "safer-buffer": ">= 2.1.2 < 3.0.0" }, "engines": { - "node": ">=18" + "node": ">=0.10.0" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "type": "opencollective", + "url": "https://opencollective.com/express" } }, - "node_modules/cli-truncate/node_modules/ansi-regex": { - "version": "6.2.2", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.2.2.tgz", - "integrity": "sha512-Bq3SmSpyFHaWjPk8If9yc6svM8c56dB5BAtW4Qbw5jHTwwXXcTLoRMkpDJp6VL0XzlWaCHTXrkFURMYmD0sLqg==", - "dev": true, - "license": "MIT", + "node_modules/icss-utils": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/icss-utils/-/icss-utils-5.1.0.tgz", + "integrity": "sha512-soFhflCVWLfRNOPU3iv5Z9VUdT44xFRbzjLsEzSr5AQmgqPMTHdU3PMT1Cf1ssx8fLNJDA1juftYl+PUcv3MqA==", + "license": "ISC", "engines": { - "node": ">=12" + "node": "^10 || ^12 || >= 14" }, - "funding": { - "url": "https://github.com/chalk/ansi-regex?sponsor=1" + "peerDependencies": { + "postcss": "^8.1.0" } }, - "node_modules/cli-truncate/node_modules/emoji-regex": { - "version": "10.5.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-10.5.0.tgz", - "integrity": "sha512-lb49vf1Xzfx080OKA0o6l8DQQpV+6Vg95zyCJX9VB/BqKYlhG7N4wgROUUHRA+ZPUefLnteQOad7z1kT2bV7bg==", - "dev": true, - "license": "MIT" + "node_modules/idb-keyval": { + "version": "6.2.2", + "resolved": "https://registry.npmjs.org/idb-keyval/-/idb-keyval-6.2.2.tgz", + "integrity": "sha512-yjD9nARJ/jb1g+CvD0tlhUHOrJ9Sy0P8T9MF3YaLlHnSRpwPfpTX0XIvpmw3gAJUmEu3FiICLBDPXVwyEvrleg==", + "license": "Apache-2.0", + "peer": true }, - "node_modules/cli-truncate/node_modules/string-width": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-7.2.0.tgz", - "integrity": "sha512-tsaTIkKW9b4N+AEj+SVA+WhJzV7/zMhcSu78mLKWSk7cXMOSHsBKFWUs0fWwq8QyK3MgJBQRX6Gbi4kYbdvGkQ==", - "dev": true, + "node_modules/ieee754": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", + "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "BSD-3-Clause" + }, + "node_modules/ignore": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.2.tgz", + "integrity": "sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==", + "license": "MIT", + "engines": { + "node": ">= 4" + } + }, + "node_modules/image-size": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/image-size/-/image-size-1.2.1.tgz", + "integrity": "sha512-rH+46sQJ2dlwfjfhCyNx5thzrv+dtmBIhPHk0zgRUukHzZ/kRueTJXoYYsclBaKcSMBWuGbOFXtioLpzTb5euw==", "license": "MIT", "dependencies": { - "emoji-regex": "^10.3.0", - "get-east-asian-width": "^1.0.0", - "strip-ansi": "^7.1.0" + "queue": "6.0.2" }, - "engines": { - "node": ">=18" + "bin": { + "image-size": "bin/image-size.js" }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "engines": { + "node": ">=16.x" } }, - "node_modules/cli-truncate/node_modules/strip-ansi": { - "version": "7.1.2", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.2.tgz", - "integrity": "sha512-gmBGslpoQJtgnMAvOVqGZpEz9dyoKTCzy2nfz/n8aIFhN/jCE/rCmcxabB6jOOHV+0WNnylOxaxBQPSvcWklhA==", + "node_modules/immutable": { + "version": "4.3.7", + "resolved": "https://registry.npmjs.org/immutable/-/immutable-4.3.7.tgz", + "integrity": "sha512-1hqclzwYwjRDFLjcFxOM5AYkkG0rpFPpr1RLPMEuGczoS7YA8gLhy8SWXYRAA/XwfEHpfo3cw5JGioS32fnMRw==", "dev": true, + "license": "MIT" + }, + "node_modules/import-fresh": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.1.tgz", + "integrity": "sha512-TR3KfrTZTYLPB6jUjfx6MF9WcWrHL9su5TObK4ZkYgBdWKPOFoSoQIdEuTuR82pmtxH2spWG9h6etwfr1pLBqQ==", "license": "MIT", "dependencies": { - "ansi-regex": "^6.0.1" + "parent-module": "^1.0.0", + "resolve-from": "^4.0.0" }, "engines": { - "node": ">=12" + "node": ">=6" }, "funding": { - "url": "https://github.com/chalk/strip-ansi?sponsor=1" + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/cli-welcome": { - "version": "2.2.3", - "resolved": "https://registry.npmjs.org/cli-welcome/-/cli-welcome-2.2.3.tgz", - "integrity": "sha512-hxaOpahLk5PAYJj4tOcv8vaNMaBQHeMzeLQTAHq2EoGGTKVYV/MPCSlg5EEsKZ7y8WDGS2ScQtnITw02ZNukMQ==", - "dev": true, + "node_modules/import-fresh/node_modules/resolve-from": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", + "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", "license": "MIT", - "dependencies": { - "chalk": "^2.4.2", - "clear-any-console": "^1.16.0" + "engines": { + "node": ">=4" } }, - "node_modules/cli-welcome/node_modules/ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "dev": true, + "node_modules/import-lazy": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/import-lazy/-/import-lazy-4.0.0.tgz", + "integrity": "sha512-rKtvo6a868b5Hu3heneU+L4yEQ4jYKLtjpnPeUdK7h0yzXGmyBTypknlkCvHFBqfX9YlorEiMM6Dnq/5atfHkw==", "license": "MIT", - "dependencies": { - "color-convert": "^1.9.0" - }, "engines": { - "node": ">=4" + "node": ">=8" } }, - "node_modules/cli-welcome/node_modules/chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "node_modules/import-local": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/import-local/-/import-local-3.2.0.tgz", + "integrity": "sha512-2SPlun1JUPWoM6t3F0dw0FkCF/jWY8kttcY4f599GLTSjh2OCuuhdTkJQsEcZzBqbXZGKMK2OqW1oZsjtf/gQA==", "dev": true, "license": "MIT", "dependencies": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" + "pkg-dir": "^4.2.0", + "resolve-cwd": "^3.0.0" + }, + "bin": { + "import-local-fixture": "fixtures/cli.js" }, "engines": { - "node": ">=4" + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/cli-welcome/node_modules/color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "node_modules/import-meta-resolve": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/import-meta-resolve/-/import-meta-resolve-4.2.0.tgz", + "integrity": "sha512-Iqv2fzaTQN28s/FwZAoFq0ZSs/7hMAHJVX+w8PZl3cY19Pxk6jFFalxQoIfW2826i/fDLXv8IiEZRIT0lDuWcg==", "dev": true, "license": "MIT", - "dependencies": { - "color-name": "1.1.3" + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" } }, - "node_modules/cli-welcome/node_modules/color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", - "dev": true, - "license": "MIT" - }, - "node_modules/cli-welcome/node_modules/escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", - "dev": true, + "node_modules/imurmurhash": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", + "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", "license": "MIT", "engines": { - "node": ">=0.8.0" + "node": ">=0.8.19" } }, - "node_modules/cli-welcome/node_modules/has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", - "dev": true, + "node_modules/indent-string": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz", + "integrity": "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==", "license": "MIT", "engines": { - "node": ">=4" + "node": ">=8" } }, - "node_modules/cli-welcome/node_modules/supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "dev": true, + "node_modules/infima": { + "version": "0.2.0-alpha.45", + "resolved": "https://registry.npmjs.org/infima/-/infima-0.2.0-alpha.45.tgz", + "integrity": "sha512-uyH0zfr1erU1OohLk0fT4Rrb94AOhguWNOcD9uGrSpRvNB+6gZXUoJX5J0NtvzBO10YZ9PgvA4NFgt+fYg8ojw==", "license": "MIT", - "dependencies": { - "has-flag": "^3.0.0" - }, "engines": { - "node": ">=4" + "node": ">=12" } }, - "node_modules/cli-width": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/cli-width/-/cli-width-3.0.0.tgz", - "integrity": "sha512-FxqpkPPwu1HjuN93Omfm4h8uIanXofW0RxVEW3k5RKx+mJJYSthzNhp32Kzxxy3YAEZ/Dc/EWN1vZRY0+kOhbw==", + "node_modules/inflight": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "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.", "license": "ISC", - "engines": { - "node": ">= 10" + "dependencies": { + "once": "^1.3.0", + "wrappy": "1" } }, - "node_modules/cliui": { - "version": "8.0.1", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz", - "integrity": "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==", + "node_modules/inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", + "license": "ISC" + }, + "node_modules/ini": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/ini/-/ini-4.1.1.tgz", + "integrity": "sha512-QQnnxNyfvmHFIsj7gkPcYymR8Jdw/o7mp5ZFihxn6h8Ci6fh3Dx4E1gPjpQEpIuPo9XVNY/ZUwh4BPMjGyL01g==", + "dev": true, "license": "ISC", - "dependencies": { - "string-width": "^4.2.0", - "strip-ansi": "^6.0.1", - "wrap-ansi": "^7.0.0" - }, "engines": { - "node": ">=12" + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } }, - "node_modules/clone": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/clone/-/clone-1.0.4.tgz", - "integrity": "sha512-JQHZ2QMW6l3aH/j6xCqQThY/9OH4D/9ls34cgkUBiEeocRTU04tHfKPBsUK1PqZCUQM7GiA0IIXJSuXHI64Kbg==", - "license": "MIT", + "node_modules/iniparser": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/iniparser/-/iniparser-1.0.5.tgz", + "integrity": "sha512-i40MWqgTU6h/70NtMsDVVDLjDYWwcIR1yIEVDPfxZIJno9z9L4s83p/V7vAu2i48Vj0gpByrkGFub7ko9XvPrw==", + "optional": true, "engines": { - "node": ">=0.8" + "node": "*" } }, - "node_modules/co": { - "version": "4.6.0", - "resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz", - "integrity": "sha512-QVb0dM5HvG+uaxitm8wONl7jltx8dqhfU33DcqtOZcLSVIKSDDLDi7+0LbAKiyI8hD9u42m2YxXSkMGWThaecQ==", - "dev": true, + "node_modules/inline-style-parser": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/inline-style-parser/-/inline-style-parser-0.1.1.tgz", + "integrity": "sha512-7NXolsK4CAS5+xvdj5OMMbI962hU/wvwoxk+LWR9Ek9bVtyuuYScDN6eS0rUm6TxApFpw7CX1o4uJzcd4AyD3Q==", + "license": "MIT" + }, + "node_modules/inquirer": { + "version": "8.2.6", + "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-8.2.6.tgz", + "integrity": "sha512-M1WuAmb7pn9zdFRtQYk26ZBoY043Sse0wVDdk4Bppr+JOXyQYybdtvK+l9wUibhtjdjvtoiNy8tk+EgsYIUqKg==", "license": "MIT", + "dependencies": { + "ansi-escapes": "^4.2.1", + "chalk": "^4.1.1", + "cli-cursor": "^3.1.0", + "cli-width": "^3.0.0", + "external-editor": "^3.0.3", + "figures": "^3.0.0", + "lodash": "^4.17.21", + "mute-stream": "0.0.8", + "ora": "^5.4.1", + "run-async": "^2.4.0", + "rxjs": "^7.5.5", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0", + "through": "^2.3.6", + "wrap-ansi": "^6.0.1" + }, "engines": { - "iojs": ">= 1.0.0", - "node": ">= 0.12.0" + "node": ">=12.0.0" } }, - "node_modules/collect-v8-coverage": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/collect-v8-coverage/-/collect-v8-coverage-1.0.2.tgz", - "integrity": "sha512-lHl4d5/ONEbLlJvaJNtsF/Lz+WvB07u2ycqTYbdrq7UypDXailES4valYb2eWiJFxZlVmpGekfqoxQhzyFdT4Q==", - "dev": true, - "license": "MIT" - }, - "node_modules/color": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/color/-/color-5.0.2.tgz", - "integrity": "sha512-e2hz5BzbUPcYlIRHo8ieAhYgoajrJr+hWoceg6E345TPsATMUKqDgzt8fSXZJJbxfpiPzkWyphz8yn8At7q3fA==", + "node_modules/inquirer/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "license": "MIT", "dependencies": { - "color-convert": "^3.0.1", - "color-string": "^2.0.0" + "color-convert": "^2.0.1" }, "engines": { - "node": ">=18" + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/color-convert": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-3.1.2.tgz", - "integrity": "sha512-UNqkvCDXstVck3kdowtOTWROIJQwafjOfXSmddoDrXo4cewMKmusCeF22Q24zvjR8nwWib/3S/dfyzPItPEiJg==", + "node_modules/inquirer/node_modules/bl": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/bl/-/bl-4.1.0.tgz", + "integrity": "sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==", + "license": "MIT", + "dependencies": { + "buffer": "^5.5.0", + "inherits": "^2.0.4", + "readable-stream": "^3.4.0" + } + }, + "node_modules/inquirer/node_modules/buffer": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", + "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], "license": "MIT", "dependencies": { - "color-name": "^2.0.0" - }, - "engines": { - "node": ">=14.6" - } - }, - "node_modules/color-name": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-2.0.2.tgz", - "integrity": "sha512-9vEt7gE16EW7Eu7pvZnR0abW9z6ufzhXxGXZEVU9IqPdlsUiMwJeJfRtq0zePUmnbHGT9zajca7mX8zgoayo4A==", - "license": "MIT", - "engines": { - "node": ">=12.20" + "base64-js": "^1.3.1", + "ieee754": "^1.1.13" } }, - "node_modules/color-string": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/color-string/-/color-string-2.1.2.tgz", - "integrity": "sha512-RxmjYxbWemV9gKu4zPgiZagUxbH3RQpEIO77XoSSX0ivgABDZ+h8Zuash/EMFLTI4N9QgFPOJ6JQpPZKFxa+dA==", + "node_modules/inquirer/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", "license": "MIT", "dependencies": { - "color-name": "^2.0.0" + "color-name": "~1.1.4" }, "engines": { - "node": ">=18" - } - }, - "node_modules/color-support": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-support/-/color-support-1.1.3.tgz", - "integrity": "sha512-qiBjkpbMLO/HL68y+lh4q0/O1MZFj2RX6X/KmMa3+gJD3z+WwI1ZzDHysvqHGS3mP6mznPckpXmw1nI9cJjyRg==", - "license": "ISC", - "optional": true, - "bin": { - "color-support": "bin.js" + "node": ">=7.0.0" } }, - "node_modules/color2k": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/color2k/-/color2k-2.0.3.tgz", - "integrity": "sha512-zW190nQTIoXcGCaU08DvVNFTmQhUpnJfVuAKfWqUQkflXKpaDdpaYoM0iluLS9lgJNHyBF58KKA2FBEwkD7wog==", - "license": "MIT" - }, - "node_modules/colorette": { - "version": "2.0.20", - "resolved": "https://registry.npmjs.org/colorette/-/colorette-2.0.20.tgz", - "integrity": "sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w==", + "node_modules/inquirer/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", "license": "MIT" }, - "node_modules/colors": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/colors/-/colors-1.4.0.tgz", - "integrity": "sha512-a+UqTh4kgZg/SlGvfbzDHpgRu7AAQOmmqRHJnxhRZICKFUT91brVhNNt58CMWU9PsBbv3PDCZUHbVxuDiH2mtA==", - "dev": true, + "node_modules/inquirer/node_modules/is-interactive": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-interactive/-/is-interactive-1.0.0.tgz", + "integrity": "sha512-2HvIEKRoqS62guEC+qBjpvRubdX910WCMuJTZ+I9yvqKU2/12eSL549HMwtabb4oupdj2sMP50k+XJfB/8JE6w==", "license": "MIT", "engines": { - "node": ">=0.1.90" + "node": ">=8" } }, - "node_modules/combined-stream": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", - "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", + "node_modules/inquirer/node_modules/ora": { + "version": "5.4.1", + "resolved": "https://registry.npmjs.org/ora/-/ora-5.4.1.tgz", + "integrity": "sha512-5b6Y85tPxZZ7QytO+BQzysW31HJku27cRIlkbAXaNx+BdcVi+LlRFmVXzeF6a7JCwJpyw5c4b+YSVImQIrBpuQ==", "license": "MIT", "dependencies": { - "delayed-stream": "~1.0.0" + "bl": "^4.1.0", + "chalk": "^4.1.0", + "cli-cursor": "^3.1.0", + "cli-spinners": "^2.5.0", + "is-interactive": "^1.0.0", + "is-unicode-supported": "^0.1.0", + "log-symbols": "^4.1.0", + "strip-ansi": "^6.0.0", + "wcwidth": "^1.0.1" }, "engines": { - "node": ">= 0.8" - } - }, - "node_modules/comma-separated-tokens": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/comma-separated-tokens/-/comma-separated-tokens-1.0.8.tgz", - "integrity": "sha512-GHuDRO12Sypu2cV70d1dkA2EUmXHgntrzbpvOB+Qy+49ypNfGgFQIC2fhhXbnyrJRynDCAARsT7Ou0M6hirpfw==", - "license": "MIT", + "node": ">=10" + }, "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/command-exists": { - "version": "1.2.9", - "resolved": "https://registry.npmjs.org/command-exists/-/command-exists-1.2.9.tgz", - "integrity": "sha512-LTQ/SGc+s0Xc0Fu5WaKnR0YiygZkm9eKFvyS+fRsU7/ZWFF8ykFM6Pc9aCVf1+xasOOZpO3BAVgVrKvsqKHV7w==", - "dev": true, - "license": "MIT" - }, - "node_modules/command-line-args": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/command-line-args/-/command-line-args-5.2.1.tgz", - "integrity": "sha512-H4UfQhZyakIjC74I9d34fGYDwk3XpSr17QhEd0Q3I9Xq1CETHo4Hcuo87WyWHpAF1aSLjLRf5lD9ZGX2qStUvg==", - "devOptional": true, + "node_modules/inquirer/node_modules/readable-stream": { + "version": "3.6.2", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", + "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", "license": "MIT", "dependencies": { - "array-back": "^3.1.0", - "find-replace": "^3.0.0", - "lodash.camelcase": "^4.3.0", - "typical": "^4.0.0" + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" }, "engines": { - "node": ">=4.0.0" + "node": ">= 6" } }, - "node_modules/command-line-commands": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/command-line-commands/-/command-line-commands-3.0.2.tgz", - "integrity": "sha512-ac6PdCtdR6q7S3HN+JiVLIWGHY30PRYIEl2qPo+FuEuzwAUk0UYyimrngrg7FvF/mCr4Jgoqv5ZnHZgads50rw==", + "node_modules/inquirer/node_modules/wrap-ansi": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz", + "integrity": "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==", "license": "MIT", - "optional": true, "dependencies": { - "array-back": "^4.0.1" + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" }, "engines": { "node": ">=8" } }, - "node_modules/command-line-commands/node_modules/array-back": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/array-back/-/array-back-4.0.2.tgz", - "integrity": "sha512-NbdMezxqf94cnNfWLL7V/im0Ub+Anbb0IoZhvzie8+4HJ4nMQuzHuy49FkGYCJK2yAloZ3meiB6AVMClbrI1vg==", - "license": "MIT", - "optional": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/command-line-usage": { - "version": "6.1.3", - "resolved": "https://registry.npmjs.org/command-line-usage/-/command-line-usage-6.1.3.tgz", - "integrity": "sha512-sH5ZSPr+7UStsloltmDh7Ce5fb8XPlHyoPzTpyyMuYCtervL65+ubVZ6Q61cFtFl62UyJlc8/JwERRbAFPUqgw==", - "devOptional": true, + "node_modules/internal-slot": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.1.0.tgz", + "integrity": "sha512-4gd7VpWNQNB4UKKCFFVcp1AVv+FMOgs9NKzjHKusc8jTMhd5eL1NqQqOpE0KzMds804/yHlglp3uxgluOqAPLw==", + "dev": true, "license": "MIT", "dependencies": { - "array-back": "^4.0.2", - "chalk": "^2.4.2", - "table-layout": "^1.0.2", - "typical": "^5.2.0" + "es-errors": "^1.3.0", + "hasown": "^2.0.2", + "side-channel": "^1.1.0" }, "engines": { - "node": ">=8.0.0" + "node": ">= 0.4" } }, - "node_modules/command-line-usage/node_modules/ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "devOptional": true, - "license": "MIT", - "dependencies": { - "color-convert": "^1.9.0" - }, + "node_modules/internmap": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/internmap/-/internmap-2.0.3.tgz", + "integrity": "sha512-5Hh7Y1wQbvY5ooGgPbDaL5iYLAPzMTUrjMulskHLH6wnv/A+1q5rgEaiuqEjB+oxGXIVZs1FF+R/KPN3ZSQYYg==", + "license": "ISC", "engines": { - "node": ">=4" + "node": ">=12" } }, - "node_modules/command-line-usage/node_modules/array-back": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/array-back/-/array-back-4.0.2.tgz", - "integrity": "sha512-NbdMezxqf94cnNfWLL7V/im0Ub+Anbb0IoZhvzie8+4HJ4nMQuzHuy49FkGYCJK2yAloZ3meiB6AVMClbrI1vg==", - "devOptional": true, + "node_modules/interpret": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/interpret/-/interpret-1.4.0.tgz", + "integrity": "sha512-agE4QfB2Lkp9uICn7BAqoscw4SZP9kTE2hxiFI3jBPmXJfdqiahTbUuKGsMoN2GtqL9AxhYioAcVvgsb1HvRbA==", "license": "MIT", "engines": { - "node": ">=8" + "node": ">= 0.10" } }, - "node_modules/command-line-usage/node_modules/chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "devOptional": true, + "node_modules/invariant": { + "version": "2.2.4", + "resolved": "https://registry.npmjs.org/invariant/-/invariant-2.2.4.tgz", + "integrity": "sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA==", "license": "MIT", "dependencies": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - }, - "engines": { - "node": ">=4" + "loose-envify": "^1.0.0" } }, - "node_modules/command-line-usage/node_modules/color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", - "devOptional": true, + "node_modules/io-bricks-ui": { + "version": "2.7.4", + "resolved": "https://registry.npmjs.org/io-bricks-ui/-/io-bricks-ui-2.7.4.tgz", + "integrity": "sha512-OAw7WRzklHHq6ArC82pleA+miFeJkLj8e6YNK6m/AxTIF4U2qqC4pdBQMlNyGiS/wjErjdaxH7hgV/qfs6LWhQ==", "license": "MIT", "dependencies": { - "color-name": "1.1.3" + "@chakra-ui/anatomy": "2.1.1", + "@emotion/react": "^11.0.0", + "@phosphor-icons/react": "2.0.9", + "@tanstack/react-table": "^8.9.1", + "chakra-react-select": "4.5.0", + "date-fns": "^2.29.3", + "echarts": "^5.3.3", + "echarts-for-react": "^3.0.2", + "lodash": "^4.17.21", + "react-day-picker": "^8.6.0", + "react-hook-form": "^7.41.5", + "react-markdown": "^6.0.3", + "react-number-format": "5.1.4" + }, + "peerDependencies": { + "@chakra-ui/react": "2.6.1", + "@emotion/styled": "^11.0.0", + "react": "^18.2.0", + "react-dom": "^18.2.0" } }, - "node_modules/command-line-usage/node_modules/color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", - "devOptional": true, + "node_modules/io-bricks-ui/node_modules/@chakra-ui/anatomy": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/@chakra-ui/anatomy/-/anatomy-2.1.1.tgz", + "integrity": "sha512-LUHAoqJAgxAqmyckG5bUpBrfEo1FleEyY+1A8hkWciy58gZ+h3GoY9oBpHcdo7XdHPpy3G+3hieK/7i9NLwxAw==", "license": "MIT" }, - "node_modules/command-line-usage/node_modules/escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", - "devOptional": true, + "node_modules/io-ts": { + "version": "1.10.4", + "resolved": "https://registry.npmjs.org/io-ts/-/io-ts-1.10.4.tgz", + "integrity": "sha512-b23PteSnYXSONJ6JQXRAlvJhuw8KOtkqa87W4wDtvMrud/DTJd5X+NpOOI+O/zZwVq6v0VLAaJ+1EDViKEuN9g==", + "dev": true, "license": "MIT", - "engines": { - "node": ">=0.8.0" + "dependencies": { + "fp-ts": "^1.0.0" } }, - "node_modules/command-line-usage/node_modules/has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", - "devOptional": true, + "node_modules/ipaddr.js": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz", + "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==", "license": "MIT", "engines": { - "node": ">=4" + "node": ">= 0.10" } }, - "node_modules/command-line-usage/node_modules/supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "devOptional": true, + "node_modules/iron-webcrypto": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/iron-webcrypto/-/iron-webcrypto-1.2.1.tgz", + "integrity": "sha512-feOM6FaSr6rEABp/eDfVseKyTMDt+KGpeB35SkVn9Tyn0CqvVsY3EwI0v5i8nMHyJnzCIQf7nsy3p41TPkJZhg==", "license": "MIT", - "dependencies": { - "has-flag": "^3.0.0" - }, - "engines": { - "node": ">=4" + "funding": { + "url": "https://github.com/sponsors/brc-dd" } }, - "node_modules/command-line-usage/node_modules/typical": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/typical/-/typical-5.2.0.tgz", - "integrity": "sha512-dvdQgNDNJo+8B2uBQoqdb11eUCE1JQXhvjC/CZtgvZseVd5TYMXnq0+vuUemXbd/Se29cTaUuPX3YIc2xgbvIg==", - "devOptional": true, + "node_modules/is-alphabetical": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-alphabetical/-/is-alphabetical-1.0.4.tgz", + "integrity": "sha512-DwzsA04LQ10FHTZuL0/grVDk4rFoVH1pjAToYwBrHSxcrBIGQuXrQMtD5U1b0U2XVgKZCTLLP8u2Qxqhy3l2Vg==", "license": "MIT", - "engines": { - "node": ">=8" + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" } }, - "node_modules/commander": { - "version": "11.1.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-11.1.0.tgz", - "integrity": "sha512-yPVavfyCcRhmorC7rWlkHn15b4wDVgVmBA7kV4QVBsF7kv/9TKJAbAXVTxvTnwP8HHKjRCJDClKbciiYS7p0DQ==", + "node_modules/is-alphanumerical": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-alphanumerical/-/is-alphanumerical-1.0.4.tgz", + "integrity": "sha512-UzoZUr+XfVz3t3v4KyGEniVL9BDRoQtY7tOyrRybkVNjDFWyo1yhXNGrrBTQxp3ib9BLAWs7k2YKBQsFRkZG9A==", + "license": "MIT", + "dependencies": { + "is-alphabetical": "^1.0.0", + "is-decimal": "^1.0.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/is-arguments": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/is-arguments/-/is-arguments-1.2.0.tgz", + "integrity": "sha512-7bVbi0huj/wrIAOzb8U1aszg9kdi3KN/CyU19CTI7tAoZYEZoL9yCDXpbXN+uPsuWnP02cyug1gleqq+TU+YCA==", "dev": true, "license": "MIT", + "dependencies": { + "call-bound": "^1.0.2", + "has-tostringtag": "^1.0.2" + }, "engines": { - "node": ">=16" + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/comment-json": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/comment-json/-/comment-json-4.2.3.tgz", - "integrity": "sha512-SsxdiOf064DWoZLH799Ata6u7iV658A11PlWtZATDlXPpKGJnbJZ5Z24ybixAi+LUUqJ/GKowAejtC5GFUG7Tw==", + "node_modules/is-array-buffer": { + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/is-array-buffer/-/is-array-buffer-3.0.5.tgz", + "integrity": "sha512-DDfANUiiG2wC1qawP66qlTugJeL5HyzMpfr8lLK+jMQirGzNod0B12cFB/9q838Ru27sBwfw78/rdoU7RERz6A==", + "dev": true, "license": "MIT", "dependencies": { - "array-timsort": "^1.0.3", - "core-util-is": "^1.0.3", - "esprima": "^4.0.1", - "has-own-prop": "^2.0.0", - "repeat-string": "^1.6.1" + "call-bind": "^1.0.8", + "call-bound": "^1.0.3", + "get-intrinsic": "^1.2.6" }, "engines": { - "node": ">= 6" + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/commondir": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/commondir/-/commondir-1.0.1.tgz", - "integrity": "sha512-W9pAhw0ja1Edb5GVdIF1mjZw/ASI0AlShXM83UUGe2DVr5TdAPEA1OA8m/g8zWp9x6On7gqufY+FatDbC3MDQg==", - "dev": true, + "node_modules/is-arrayish": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", + "integrity": "sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==", "license": "MIT" }, - "node_modules/compare-func": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/compare-func/-/compare-func-2.0.0.tgz", - "integrity": "sha512-zHig5N+tPWARooBnb0Zx1MFcdfpyJrfTJ3Y5L+IFvUm8rM74hHz66z0gw0x4tijh5CorKkKUCnW82R2vmpeCRA==", + "node_modules/is-async-function": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-async-function/-/is-async-function-2.1.1.tgz", + "integrity": "sha512-9dgM/cZBnNvjzaMYHVoxxfPj2QXt22Ev7SuuPrs+xav0ukGB0S6d4ydZdEiM48kLx5kDV+QBPrpVnFyefL8kkQ==", "dev": true, "license": "MIT", "dependencies": { - "array-ify": "^1.0.0", - "dot-prop": "^5.1.0" + "async-function": "^1.0.0", + "call-bound": "^1.0.3", + "get-proto": "^1.0.1", + "has-tostringtag": "^1.0.2", + "safe-regex-test": "^1.1.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/compare-versions": { - "version": "6.1.1", - "resolved": "https://registry.npmjs.org/compare-versions/-/compare-versions-6.1.1.tgz", - "integrity": "sha512-4hm4VPpIecmlg59CHXnRDnqGplJFrbLG4aFEl5vl6cK1u76ws3LLvX7ikFnTDl5vo39sjWD6AaDPYodJp/NNHg==", - "dev": true, - "license": "MIT" - }, - "node_modules/component-emitter": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.3.1.tgz", - "integrity": "sha512-T0+barUSQRTUQASh8bx02dl+DhF54GtIDY13Y3m9oWTklKbb3Wv974meRpeZ3lp1JpLVECWWNHC4vaG2XHXouQ==", + "node_modules/is-bigint": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-bigint/-/is-bigint-1.1.0.tgz", + "integrity": "sha512-n4ZT37wG78iz03xPRKJrHTdZbe3IicyucEtdRsV5yglwc3GyUfbAfpSeD0FJ41NbUNSt5wbhqfp1fS+BgnvDFQ==", "dev": true, "license": "MIT", + "dependencies": { + "has-bigints": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/compress-commons": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/compress-commons/-/compress-commons-4.1.2.tgz", - "integrity": "sha512-D3uMHtGc/fcO1Gt1/L7i1e33VOvD4A9hfQLP+6ewd+BvG/gQ84Yh4oftEhAdjSMgBgwGL+jsppT7JYNpo6MHHg==", - "dev": true, + "node_modules/is-binary-path": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", + "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", "license": "MIT", "dependencies": { - "buffer-crc32": "^0.2.13", - "crc32-stream": "^4.0.2", - "normalize-path": "^3.0.0", - "readable-stream": "^3.6.0" + "binary-extensions": "^2.0.0" }, "engines": { - "node": ">= 10" + "node": ">=8" } }, - "node_modules/compress-commons/node_modules/readable-stream": { - "version": "3.6.2", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", - "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", + "node_modules/is-boolean-object": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.2.2.tgz", + "integrity": "sha512-wa56o2/ElJMYqjCjGkXri7it5FbebW5usLw/nPmCMs5DeZ7eziSYZhSmPRn0txqeW4LnAmQQU7FgqLpsEFKM4A==", "dev": true, "license": "MIT", "dependencies": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" + "call-bound": "^1.0.3", + "has-tostringtag": "^1.0.2" }, "engines": { - "node": ">= 6" + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/compute-scroll-into-view": { - "version": "1.0.20", - "resolved": "https://registry.npmjs.org/compute-scroll-into-view/-/compute-scroll-into-view-1.0.20.tgz", - "integrity": "sha512-UCB0ioiyj8CRjtrvaceBLqqhZCVP+1B8+NWQhmdsm0VXOJtobBCf1dBQmebCCo34qZmUwZfIH2MZLqNHazrfjg==", - "license": "MIT" + "node_modules/is-buffer": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-2.0.5.tgz", + "integrity": "sha512-i2R6zNFDwgEHJyQUtJEk0XFi1i0dPFn/oqjK3/vPCcDeJvW5NQ83V8QbicfF1SupOaB0h8ntgBC2YiE7dfyctQ==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT", + "engines": { + "node": ">=4" + } }, - "node_modules/concat-map": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", - "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", - "license": "MIT" + "node_modules/is-callable": { + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.7.tgz", + "integrity": "sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } }, - "node_modules/concat-stream": { - "version": "1.6.2", - "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.2.tgz", - "integrity": "sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==", - "engines": [ - "node >= 0.8" - ], + "node_modules/is-ci": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/is-ci/-/is-ci-3.0.1.tgz", + "integrity": "sha512-ZYvCgrefwqoQ6yTyYUbQu64HsITZ3NfKX1lzaEYdkTDcfKzzCI/wthRRYKkdjHKFVgNiXKAKm65Zo1pk2as/QQ==", "license": "MIT", "dependencies": { - "buffer-from": "^1.0.0", - "inherits": "^2.0.3", - "readable-stream": "^2.2.2", - "typedarray": "^0.0.6" + "ci-info": "^3.2.0" + }, + "bin": { + "is-ci": "bin.js" } }, - "node_modules/confbox": { - "version": "0.1.8", - "resolved": "https://registry.npmjs.org/confbox/-/confbox-0.1.8.tgz", - "integrity": "sha512-RMtmw0iFkeR4YV+fUOSucriAQNb9g8zFR52MWCtl+cCZOFRNL6zeB395vPzFhEjjn4fMxXudmELnl/KF/WrK6w==", - "dev": true, - "license": "MIT" - }, - "node_modules/config-chain": { - "version": "1.1.13", - "resolved": "https://registry.npmjs.org/config-chain/-/config-chain-1.1.13.tgz", - "integrity": "sha512-qj+f8APARXHrM0hraqXYb2/bOVSV4PvJQlNZ/DVj0QrmNM2q2euizkeuVckQ57J+W0mRH6Hvi+k50M4Jul2VRQ==", - "dev": true, + "node_modules/is-core-module": { + "version": "2.16.1", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.16.1.tgz", + "integrity": "sha512-UfoeMA6fIJ8wTYFEUjelnaGI67v6+N7qXJEvQuIGa99l4xsCruSYOVSQ0uPANn4dAzm8lkYPaKLrrijLq7x23w==", "license": "MIT", "dependencies": { - "ini": "^1.3.4", - "proto-list": "~1.2.1" + "hasown": "^2.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/config-chain/node_modules/ini": { - "version": "1.3.8", - "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz", - "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==", - "dev": true, - "license": "ISC" - }, - "node_modules/configstore": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/configstore/-/configstore-6.0.0.tgz", - "integrity": "sha512-cD31W1v3GqUlQvbBCGcXmd2Nj9SvLDOP1oQ0YFuLETufzSPaKp11rYBsSOm7rCsW3OnIRAFM3OxRhceaXNYHkA==", + "node_modules/is-data-view": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-data-view/-/is-data-view-1.0.2.tgz", + "integrity": "sha512-RKtWF8pGmS87i2D6gqQu/l7EYRlVdfzemCJN/P3UOs//x1QE7mfhvzHIApBTRf7axvT6DMGwSwBXYCT0nfB9xw==", "dev": true, - "license": "BSD-2-Clause", + "license": "MIT", "dependencies": { - "dot-prop": "^6.0.1", - "graceful-fs": "^4.2.6", - "unique-string": "^3.0.0", - "write-file-atomic": "^3.0.3", - "xdg-basedir": "^5.0.1" + "call-bound": "^1.0.2", + "get-intrinsic": "^1.2.6", + "is-typed-array": "^1.1.13" }, "engines": { - "node": ">=12" + "node": ">= 0.4" }, "funding": { - "url": "https://github.com/yeoman/configstore?sponsor=1" + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/configstore/node_modules/dot-prop": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/dot-prop/-/dot-prop-6.0.1.tgz", - "integrity": "sha512-tE7ztYzXHIeyvc7N+hR3oi7FIbf/NIjVP9hmAt3yMXzrQ072/fpjGLx2GxNxGxUl5V73MEqYzioOMoVhGMJ5cA==", + "node_modules/is-date-object": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.1.0.tgz", + "integrity": "sha512-PwwhEakHVKTdRNVOw+/Gyh0+MzlCl4R6qKvkhuvLtPMggI1WAHt9sOwZxQLSGpUaDnrdyDsomoRgNnCfKNSXXg==", "dev": true, "license": "MIT", "dependencies": { - "is-obj": "^2.0.0" + "call-bound": "^1.0.2", + "has-tostringtag": "^1.0.2" }, "engines": { - "node": ">=10" + "node": ">= 0.4" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/configstore/node_modules/signal-exit": { - "version": "3.0.7", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", - "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", - "dev": true, - "license": "ISC" - }, - "node_modules/configstore/node_modules/write-file-atomic": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-3.0.3.tgz", - "integrity": "sha512-AvHcyZ5JnSfq3ioSyjrBkH9yW4m7Ayk8/9My/DD9onKeu/94fwrMocemO2QAJFAlnnDN+ZDS+ZjAR5ua1/PV/Q==", - "dev": true, - "license": "ISC", - "dependencies": { - "imurmurhash": "^0.1.4", - "is-typedarray": "^1.0.0", - "signal-exit": "^3.0.2", - "typedarray-to-buffer": "^3.1.5" + "node_modules/is-decimal": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-decimal/-/is-decimal-1.0.4.tgz", + "integrity": "sha512-RGdriMmQQvZ2aqaQq3awNA6dCGtKpiDFcOzrTWrDAT2MiWrKQVPmxLGHl7Y2nNu6led0kEyoX0enY0qXYsv9zw==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" } }, - "node_modules/connect": { - "version": "3.7.0", - "resolved": "https://registry.npmjs.org/connect/-/connect-3.7.0.tgz", - "integrity": "sha512-ZqRXc+tZukToSNmh5C2iWMSoV3X1YUcPbqEM4DkEG5tNQXrQUZCNVGGv3IuicnkMtPfGf3Xtp8WCXs295iQ1pQ==", + "node_modules/is-docker": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-2.2.1.tgz", + "integrity": "sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==", "license": "MIT", - "peer": true, - "dependencies": { - "debug": "2.6.9", - "finalhandler": "1.1.2", - "parseurl": "~1.3.3", - "utils-merge": "1.0.1" + "bin": { + "is-docker": "cli.js" }, "engines": { - "node": ">= 0.10.0" + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/connect-history-api-fallback": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/connect-history-api-fallback/-/connect-history-api-fallback-1.6.0.tgz", - "integrity": "sha512-e54B99q/OUoH64zYYRf3HBP5z24G38h5D3qXu23JGRoigpX5Ss4r9ZnDk3g0Z8uQC2x2lPaJ+UlWBc1ZWBWdLg==", - "dev": true, + "node_modules/is-extendable": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", + "integrity": "sha512-5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw==", "license": "MIT", "engines": { - "node": ">=0.8" - } - }, - "node_modules/connect/node_modules/debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "license": "MIT", - "peer": true, - "dependencies": { - "ms": "2.0.0" + "node": ">=0.10.0" } }, - "node_modules/connect/node_modules/encodeurl": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", - "integrity": "sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==", + "node_modules/is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", "license": "MIT", - "peer": true, "engines": { - "node": ">= 0.8" + "node": ">=0.10.0" } }, - "node_modules/connect/node_modules/finalhandler": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.1.2.tgz", - "integrity": "sha512-aAWcW57uxVNrQZqFXjITpW3sIUQmHGG3qSb9mUah9MgMC4NeWhNOlNjXEYq3HjRAvL6arUviZGGJsBg6z0zsWA==", + "node_modules/is-finalizationregistry": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/is-finalizationregistry/-/is-finalizationregistry-1.1.1.tgz", + "integrity": "sha512-1pC6N8qWJbWoPtEjgcL2xyhQOP491EQjeUo3qTKcmV8YSDDJrOepfG8pcC7h/QgnQHYSv0mJ3Z/ZWxmatVrysg==", + "dev": true, "license": "MIT", - "peer": true, "dependencies": { - "debug": "2.6.9", - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "on-finished": "~2.3.0", - "parseurl": "~1.3.3", - "statuses": "~1.5.0", - "unpipe": "~1.0.0" + "call-bound": "^1.0.3" }, "engines": { - "node": ">= 0.8" + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/connect/node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", - "license": "MIT", - "peer": true - }, - "node_modules/connect/node_modules/on-finished": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz", - "integrity": "sha512-ikqdkGAAyf/X/gPhXGvfgAytDZtDbr+bkNUJ0N9h5MI/dmdgCs3l6hoHrcUv41sRKew3jIwrp4qQDXiK99Utww==", + "node_modules/is-fullwidth-code-point": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-4.0.0.tgz", + "integrity": "sha512-O4L094N2/dZ7xqVdrXhh9r1KODPJpFms8B5sGdJLPy664AgvXsreZUyCQQNItZRDlYug4xStLjNp/sz3HvBowQ==", + "dev": true, "license": "MIT", - "peer": true, - "dependencies": { - "ee-first": "1.1.1" - }, "engines": { - "node": ">= 0.8" + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/connect/node_modules/statuses": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz", - "integrity": "sha512-OpZ3zP+jT1PI7I8nemJX4AKmAX070ZkYPVWV/AaKTJl+tXCTGyVdC1a4SL8RUQYEwk/f34ZX8UTykN68FwrqAA==", + "node_modules/is-generator-fn": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-generator-fn/-/is-generator-fn-2.1.0.tgz", + "integrity": "sha512-cTIB4yPYL/Grw0EaSzASzg6bBy9gqCofvWN8okThAYIxKJZC+udlRAmGbM0XLeniEJSs8uEgHPGuHSe1XsOLSQ==", + "dev": true, "license": "MIT", - "peer": true, "engines": { - "node": ">= 0.6" + "node": ">=6" } }, - "node_modules/consola": { - "version": "2.15.3", - "resolved": "https://registry.npmjs.org/consola/-/consola-2.15.3.tgz", - "integrity": "sha512-9vAdYbHj6x2fLKC4+oPH0kFzY/orMZyG2Aj+kNylHxKGJ/Ed4dpNyAQYwJOdqO4zdM7XpVHmyejQDcQHrnuXbw==", - "license": "MIT" - }, - "node_modules/console-browserify": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/console-browserify/-/console-browserify-1.2.0.tgz", - "integrity": "sha512-ZMkYO/LkF17QvCPqM0gxw8yUzigAOZOSWSHg91FH6orS7vcEj5dVZTidN2fQ14yBSdg97RqhSNwLUXInd52OTA==", - "dev": true - }, - "node_modules/console-control-strings": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/console-control-strings/-/console-control-strings-1.1.0.tgz", - "integrity": "sha512-ty/fTekppD2fIwRvnZAVdeOiGd1c7YXEixbgJTNzqcxJWKQnjJ/V1bNEEE6hygpM3WjwHFUVK6HTjWSzV4a8sQ==", - "license": "ISC", - "optional": true - }, - "node_modules/constants-browserify": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/constants-browserify/-/constants-browserify-1.0.0.tgz", - "integrity": "sha512-xFxOwqIzR/e1k1gLiWEophSCMqXcwVHIH7akf7b/vxcUeGunlj3hvZaaqxwHsTgn+IndtkQJgSztIDWeumWJDQ==", + "node_modules/is-generator-function": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/is-generator-function/-/is-generator-function-1.1.2.tgz", + "integrity": "sha512-upqt1SkGkODW9tsGNG5mtXTXtECizwtS2kA161M+gJPc1xdb/Ax629af6YrTwcOeQHbewrPNlE5Dx7kzvXTizA==", "dev": true, - "license": "MIT" - }, - "node_modules/content-disposition": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-1.0.0.tgz", - "integrity": "sha512-Au9nRL8VNUut/XSzbQA38+M78dzP4D+eqg3gfJHMIHHYa3bg067xj1KxMUWj+VULbiZMowKngFFbKczUrNJ1mg==", "license": "MIT", - "peer": true, "dependencies": { - "safe-buffer": "5.2.1" + "call-bound": "^1.0.4", + "generator-function": "^2.0.0", + "get-proto": "^1.0.1", + "has-tostringtag": "^1.0.2", + "safe-regex-test": "^1.1.0" }, "engines": { - "node": ">= 0.6" + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/content-type": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.5.tgz", - "integrity": "sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA==", + "node_modules/is-glob": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", + "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", "license": "MIT", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/conventional-changelog-angular": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/conventional-changelog-angular/-/conventional-changelog-angular-7.0.0.tgz", - "integrity": "sha512-ROjNchA9LgfNMTTFSIWPzebCwOGFdgkEq45EnvvrmSLvCtAw0HSmrCs7/ty+wAeYUZyNay0YMUNYFTRL72PkBQ==", - "dev": true, - "license": "ISC", "dependencies": { - "compare-func": "^2.0.0" + "is-extglob": "^2.1.1" }, "engines": { - "node": ">=16" + "node": ">=0.10.0" } }, - "node_modules/conventional-changelog-conventionalcommits": { - "version": "7.0.2", - "resolved": "https://registry.npmjs.org/conventional-changelog-conventionalcommits/-/conventional-changelog-conventionalcommits-7.0.2.tgz", - "integrity": "sha512-NKXYmMR/Hr1DevQegFB4MwfM5Vv0m4UIxKZTTYuD98lpTknaZlSRrDOG4X7wIXpGkfsYxZTghUN+Qq+T0YQI7w==", - "dev": true, - "license": "ISC", - "dependencies": { - "compare-func": "^2.0.0" - }, + "node_modules/is-hex-prefixed": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-hex-prefixed/-/is-hex-prefixed-1.0.0.tgz", + "integrity": "sha512-WvtOiug1VFrE9v1Cydwm+FnXd3+w9GaeVUss5W4v/SLy3UW00vP+6iNF2SdnfiBoLy4bTqVdkftNGTUeOFVsbA==", + "license": "MIT", "engines": { - "node": ">=16" + "node": ">=6.5.0", + "npm": ">=3" } }, - "node_modules/conventional-commits-parser": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/conventional-commits-parser/-/conventional-commits-parser-5.0.0.tgz", - "integrity": "sha512-ZPMl0ZJbw74iS9LuX9YIAiW8pfM5p3yh2o/NbXHbkFuZzY5jvdi5jFycEOkmBW5H5I7nA+D6f3UcsCLP2vvSEA==", - "dev": true, + "node_modules/is-hexadecimal": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-hexadecimal/-/is-hexadecimal-1.0.4.tgz", + "integrity": "sha512-gyPJuv83bHMpocVYoqof5VDiZveEoGoFL8m3BXNb2VW8Xs+rz9kqO8LOQ5DH6EsuvilT1ApazU0pyl+ytbPtlw==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/is-inside-container": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-inside-container/-/is-inside-container-1.0.0.tgz", + "integrity": "sha512-KIYLCCJghfHZxqjYBE7rEy0OBuTd5xCHS7tHVgvCLkx7StIoaxwNW3hCALgEUjFfeRk+MG/Qxmp/vtETEF3tRA==", "license": "MIT", "dependencies": { - "is-text-path": "^2.0.0", - "JSONStream": "^1.3.5", - "meow": "^12.0.1", - "split2": "^4.0.0" + "is-docker": "^3.0.0" }, "bin": { - "conventional-commits-parser": "cli.mjs" + "is-inside-container": "cli.js" }, "engines": { - "node": ">=16" + "node": ">=14.16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/convert-source-map": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz", - "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==", - "license": "MIT" - }, - "node_modules/cookie": { - "version": "0.7.2", - "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.7.2.tgz", - "integrity": "sha512-yki5XnKuf750l50uGTllt6kKILY4nQ1eNIQatoXEByZ5dWgnKqbnqmTrBE5B4N7lrMJKQ2ytWMiTO2o0v6Ew/w==", + "node_modules/is-inside-container/node_modules/is-docker": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-3.0.0.tgz", + "integrity": "sha512-eljcgEDlEns/7AXFosB5K/2nCM4P7FQPkGc/DWLy5rmFEWvZayGrik1d9/QIY5nJ4f9YsVvBkA6kJpHn9rISdQ==", "license": "MIT", - "peer": true, + "bin": { + "is-docker": "cli.js" + }, "engines": { - "node": ">= 0.6" + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/cookie-es": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/cookie-es/-/cookie-es-1.2.2.tgz", - "integrity": "sha512-+W7VmiVINB+ywl1HGXJXmrqkOhpKrIiVZV6tQuV54ZyQC7MMuBt81Vc336GMLoHBq5hV/F9eXgt5Mnx0Rha5Fg==", - "license": "MIT" - }, - "node_modules/cookie-signature": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.2.2.tgz", - "integrity": "sha512-D76uU73ulSXrD1UXF4KE2TMxVVwhsnCgfAyTg9k8P6KGZjlXKrOLe4dJQKI3Bxi5wjesZoFXJWElNWBjPZMbhg==", + "node_modules/is-installed-globally": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/is-installed-globally/-/is-installed-globally-0.4.0.tgz", + "integrity": "sha512-iwGqO3J21aaSkC7jWnHP/difazwS7SFeIqxv6wEtLU8Y5KlzFTjyqcSIT0d8s4+dDhKytsk9PJZ2BkS5eZwQRQ==", "license": "MIT", - "peer": true, + "dependencies": { + "global-dirs": "^3.0.0", + "is-path-inside": "^3.0.2" + }, "engines": { - "node": ">=6.6.0" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/cookiejar": { - "version": "2.1.4", - "resolved": "https://registry.npmjs.org/cookiejar/-/cookiejar-2.1.4.tgz", - "integrity": "sha512-LDx6oHrK+PhzLKJU9j5S7/Y3jM/mUHvD/DeI1WQmJn652iPC5Y4TBzC9l+5OMOXlyTTA+SmVUPm0HQUwpD5Jqw==", + "node_modules/is-interactive": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-interactive/-/is-interactive-2.0.0.tgz", + "integrity": "sha512-qP1vozQRI+BMOPcjFzrjXuQvdak2pHNUMZoeG2eRbiSqyvbEf/wQtEOTOX1guk6E3t36RkaqiSt8A/6YElNxLQ==", "dev": true, - "license": "MIT" - }, - "node_modules/copy-to-clipboard": { - "version": "3.3.3", - "resolved": "https://registry.npmjs.org/copy-to-clipboard/-/copy-to-clipboard-3.3.3.tgz", - "integrity": "sha512-2KV8NhB5JqC3ky0r9PMCAZKbUHSwtEo4CwCs0KXgruG43gX5PMqDEBbVU4OUzw2MuAWUfsuFmWvEKG5QRfSnJA==", "license": "MIT", - "dependencies": { - "toggle-selection": "^1.0.6" + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/core-js-compat": { - "version": "3.45.1", - "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.45.1.tgz", - "integrity": "sha512-tqTt5T4PzsMIZ430XGviK4vzYSoeNJ6CXODi6c/voxOT6IZqBht5/EKaSNnYiEjjRYxjVz7DQIsOsY0XNi8PIA==", + "node_modules/is-map": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/is-map/-/is-map-2.0.3.tgz", + "integrity": "sha512-1Qed0/Hr2m+YqxnM09CjA2d/i6YZNfF6R2oRAOj36eUdS6qIV/huPJNSEpKbupewFs+ZsJlxsjjPbc0/afW6Lw==", "dev": true, "license": "MIT", - "dependencies": { - "browserslist": "^4.25.3" + "engines": { + "node": ">= 0.4" }, "funding": { - "type": "opencollective", - "url": "https://opencollective.com/core-js" + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/core-util-is": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz", - "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==", - "license": "MIT" - }, - "node_modules/cors": { - "version": "2.8.5", - "resolved": "https://registry.npmjs.org/cors/-/cors-2.8.5.tgz", - "integrity": "sha512-KIHbLJqu73RGr/hnbrO9uBeixNGuvSQjul/jdFvS/KFSIH1hWVd1ng7zOHx+YrEfInLG7q4n6GHQ9cDtxv/P6g==", + "node_modules/is-nan": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/is-nan/-/is-nan-1.3.2.tgz", + "integrity": "sha512-E+zBKpQ2t6MEo1VsonYmluk9NxGrbzpeeLC2xIViuO2EjU2xsXsBPwTr3Ykv9l08UYEVEdWeRZNouaZqF6RN0w==", + "dev": true, "license": "MIT", "dependencies": { - "object-assign": "^4", - "vary": "^1" + "call-bind": "^1.0.0", + "define-properties": "^1.1.3" }, "engines": { - "node": ">= 0.10" + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/cosmiconfig": { - "version": "9.0.0", - "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-9.0.0.tgz", - "integrity": "sha512-itvL5h8RETACmOTFc4UfIyB2RfEHi71Ax6E/PivVxq9NseKbOWpeyHEOIbmAw1rs8Ak0VursQNww7lf7YtUwzg==", + "node_modules/is-negative-zero": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.3.tgz", + "integrity": "sha512-5KoIu2Ngpyek75jXodFvnafB6DJgr3u8uuK0LEZJjrU19DrMD3EVERaR8sjz8CCGgpZvxPl9SuE1GMVPFHx1mw==", "dev": true, "license": "MIT", - "dependencies": { - "env-paths": "^2.2.1", - "import-fresh": "^3.3.0", - "js-yaml": "^4.1.0", - "parse-json": "^5.2.0" - }, "engines": { - "node": ">=14" + "node": ">= 0.4" }, "funding": { - "url": "https://github.com/sponsors/d-fischer" - }, - "peerDependencies": { - "typescript": ">=4.9.5" + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-network-error": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/is-network-error/-/is-network-error-1.3.0.tgz", + "integrity": "sha512-6oIwpsgRfnDiyEDLMay/GqCl3HoAtH5+RUKW29gYkL0QA+ipzpDLA16yQs7/RHCSu+BwgbJaOUqa4A99qNVQVw==", + "license": "MIT", + "engines": { + "node": ">=16" }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/cosmiconfig-typescript-loader": { + "node_modules/is-npm": { "version": "6.1.0", - "resolved": "https://registry.npmjs.org/cosmiconfig-typescript-loader/-/cosmiconfig-typescript-loader-6.1.0.tgz", - "integrity": "sha512-tJ1w35ZRUiM5FeTzT7DtYWAFFv37ZLqSRkGi2oeCK1gPhvaWjkAtfXvLmvE1pRfxxp9aQo6ba/Pvg1dKj05D4g==", - "dev": true, + "resolved": "https://registry.npmjs.org/is-npm/-/is-npm-6.1.0.tgz", + "integrity": "sha512-O2z4/kNgyjhQwVR1Wpkbfc19JIhggF97NZNCpWTnjH7kVcZMUrnut9XSN7txI7VdyIYk5ZatOq3zvSuWpU8hoA==", "license": "MIT", - "dependencies": { - "jiti": "^2.4.1" - }, "engines": { - "node": ">=v18" + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" }, - "peerDependencies": { - "@types/node": "*", - "cosmiconfig": ">=9", - "typescript": ">=5" + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/cpu-features": { - "version": "0.0.10", - "resolved": "https://registry.npmjs.org/cpu-features/-/cpu-features-0.0.10.tgz", - "integrity": "sha512-9IkYqtX3YHPCzoVg1Py+o9057a3i0fp7S530UWokCSaFVTc7CwXPRiOjRjBQQ18ZCNafx78YfnG+HALxtVmOGA==", + "node_modules/is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "license": "MIT", + "engines": { + "node": ">=0.12.0" + } + }, + "node_modules/is-number-object": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.1.1.tgz", + "integrity": "sha512-lZhclumE1G6VYD8VHe35wFaIif+CTy5SJIi5+3y4psDgWu4wPDoBhF8NxUOinEc7pHgiTsT6MaBb92rKhhD+Xw==", "dev": true, - "hasInstallScript": true, - "optional": true, + "license": "MIT", "dependencies": { - "buildcheck": "~0.0.6", - "nan": "^2.19.0" + "call-bound": "^1.0.3", + "has-tostringtag": "^1.0.2" }, "engines": { - "node": ">=10.0.0" + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/crc-32": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/crc-32/-/crc-32-1.2.2.tgz", - "integrity": "sha512-ROmzCKrTnOwybPcJApAA6WBWij23HVfGVNKqqrZpuyZOHqK2CwHSvpGuyt/UNNvaIjEd8X5IFGp4Mh+Ie1IHJQ==", - "license": "Apache-2.0", - "bin": { - "crc32": "bin/crc32.njs" - }, + "node_modules/is-obj": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-obj/-/is-obj-2.0.0.tgz", + "integrity": "sha512-drqDG3cbczxxEJRoOXcOjtdp1J/lyp1mNn0xaznRs8+muBhgQcrnbspox5X5fOw0HnMnbfDzvnEMEtqDEJEo8w==", + "license": "MIT", "engines": { - "node": ">=0.8" + "node": ">=8" } }, - "node_modules/crc32-stream": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/crc32-stream/-/crc32-stream-4.0.3.tgz", - "integrity": "sha512-NT7w2JVU7DFroFdYkeq8cywxrgjPHWkdX1wjpRQXPX5Asews3tA+Ght6lddQO5Mkumffp3X7GEqku3epj2toIw==", - "dev": true, - "license": "MIT", - "dependencies": { - "crc-32": "^1.2.0", - "readable-stream": "^3.4.0" - }, + "node_modules/is-path-inside": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz", + "integrity": "sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==", + "license": "MIT", "engines": { - "node": ">= 10" + "node": ">=8" } }, - "node_modules/crc32-stream/node_modules/readable-stream": { - "version": "3.6.2", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", - "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", - "dev": true, + "node_modules/is-plain-obj": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-2.1.0.tgz", + "integrity": "sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA==", "license": "MIT", - "dependencies": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - }, "engines": { - "node": ">= 6" + "node": ">=8" } }, - "node_modules/create-ecdh": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/create-ecdh/-/create-ecdh-4.0.4.tgz", - "integrity": "sha512-mf+TCx8wWc9VpuxfP2ht0iSISLZnt0JgWlrOKZiNqyUZWnjIaCIVNQArMHnCZKfEYRg6IM7A+NeJoN8gf/Ws0A==", - "dev": true, + "node_modules/is-plain-object": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", + "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==", "license": "MIT", "dependencies": { - "bn.js": "^4.1.0", - "elliptic": "^6.5.3" + "isobject": "^3.0.1" + }, + "engines": { + "node": ">=0.10.0" } }, - "node_modules/create-ecdh/node_modules/bn.js": { - "version": "4.12.2", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.2.tgz", - "integrity": "sha512-n4DSx829VRTRByMRGdjQ9iqsN0Bh4OolPsFnaZBLcbi8iXcB+kJ9s7EnRt4wILZNV3kPLHkRVfOc/HvhC3ovDw==", + "node_modules/is-potential-custom-element-name": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-potential-custom-element-name/-/is-potential-custom-element-name-1.0.1.tgz", + "integrity": "sha512-bCYeRA2rVibKZd+s2625gGnGF/t7DSqDs4dP7CrLA1m7jKWz6pps0LpYLJN8Q64HtmPKJ1hrN3nzPNKFEKOUiQ==", "dev": true, "license": "MIT" }, - "node_modules/create-hash": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/create-hash/-/create-hash-1.2.0.tgz", - "integrity": "sha512-z00bCGNHDG8mHAkP7CtT1qVu+bFQUPjYq/4Iv3C3kWjTFV10zIjfSoeqXo9Asws8gwSHDGj/hl2u4OGIjapeCg==", - "license": "MIT", - "dependencies": { - "cipher-base": "^1.0.1", - "inherits": "^2.0.1", - "md5.js": "^1.3.4", - "ripemd160": "^2.0.1", - "sha.js": "^2.4.0" - } + "node_modules/is-promise": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/is-promise/-/is-promise-4.0.0.tgz", + "integrity": "sha512-hvpoI6korhJMnej285dSg6nu1+e6uxs7zG3BYAm5byqDsgJNWwxzM6z6iZiAgQR4TJ30JmBTOwqZUw3WlyH3AQ==", + "license": "MIT" }, - "node_modules/create-hmac": { - "version": "1.1.7", - "resolved": "https://registry.npmjs.org/create-hmac/-/create-hmac-1.1.7.tgz", - "integrity": "sha512-MJG9liiZ+ogc4TzUwuvbER1JRdgvUFSB5+VR/g5h82fGaIRWMWddtKBHi7/sVhfjQZ6SehlyhvQYrcYkaUIpLg==", + "node_modules/is-reference": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/is-reference/-/is-reference-1.2.1.tgz", + "integrity": "sha512-U82MsXXiFIrjCK4otLT+o2NA2Cd2g5MLoOVXUZjIOhLurrRxpEXzI8O0KZHr3IjLvlAH1kTPYSuqer5T9ZVBKQ==", + "dev": true, "license": "MIT", "dependencies": { - "cipher-base": "^1.0.3", - "create-hash": "^1.1.0", - "inherits": "^2.0.1", - "ripemd160": "^2.0.0", - "safe-buffer": "^5.0.1", - "sha.js": "^2.4.8" + "@types/estree": "*" } }, - "node_modules/create-jest": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/create-jest/-/create-jest-29.7.0.tgz", - "integrity": "sha512-Adz2bdH0Vq3F53KEMJOoftQFutWCukm6J24wbPWRO4k1kMY7gS7ds/uoJkNuV8wDCtWWnuwGcJwpWcih+zEW1Q==", + "node_modules/is-regex": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.2.1.tgz", + "integrity": "sha512-MjYsKHO5O7mCsmRGxWcLWheFqN9DJ/2TmngvjKXihe6efViPqc274+Fx/4fYj/r03+ESvBdTXK0V6tA3rgez1g==", "dev": true, "license": "MIT", "dependencies": { - "@jest/types": "^29.6.3", - "chalk": "^4.0.0", - "exit": "^0.1.2", - "graceful-fs": "^4.2.9", - "jest-config": "^29.7.0", - "jest-util": "^29.7.0", - "prompts": "^2.0.1" - }, - "bin": { - "create-jest": "bin/create-jest.js" + "call-bound": "^1.0.2", + "gopd": "^1.2.0", + "has-tostringtag": "^1.0.2", + "hasown": "^2.0.2" }, "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/create-require": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/create-require/-/create-require-1.1.1.tgz", - "integrity": "sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==", - "devOptional": true, - "license": "MIT" - }, - "node_modules/cron": { - "version": "4.3.3", - "resolved": "https://registry.npmjs.org/cron/-/cron-4.3.3.tgz", - "integrity": "sha512-B/CJj5yL3sjtlun6RtYHvoSB26EmQ2NUmhq9ZiJSyKIM4K/fqfh9aelDFlIayD2YMeFZqWLi9hHV+c+pq2Djkw==", + "node_modules/is-regexp": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-regexp/-/is-regexp-1.0.0.tgz", + "integrity": "sha512-7zjFAPO4/gwyQAAgRRmqeEeyIICSdmCqa3tsVHMdBzaXXRiqopZL4Cyghg/XulGWrtABTpbnYYzzIRffLkP4oA==", "license": "MIT", - "dependencies": { - "@types/luxon": "~3.7.0", - "luxon": "~3.7.0" - }, "engines": { - "node": ">=18.x" + "node": ">=0.10.0" } }, - "node_modules/cross-fetch": { - "version": "3.1.6", - "resolved": "https://registry.npmjs.org/cross-fetch/-/cross-fetch-3.1.6.tgz", - "integrity": "sha512-riRvo06crlE8HiqOwIpQhxwdOk4fOeR7FVM/wXoxchFEqMNUjvbs3bfo4OTgMEMHzppd4DxFBDbyySj8Cv781g==", + "node_modules/is-set": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/is-set/-/is-set-2.0.3.tgz", + "integrity": "sha512-iPAjerrse27/ygGLxw+EBR9agv9Y6uLeYVJMu+QNCoouJ1/1ri0mGrcWpfCqFZuzzx3WjtwxG098X+n4OuRkPg==", + "dev": true, "license": "MIT", - "dependencies": { - "node-fetch": "^2.6.11" + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/cross-spawn": { - "version": "7.0.6", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz", - "integrity": "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==", + "node_modules/is-shared-array-buffer": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.4.tgz", + "integrity": "sha512-ISWac8drv4ZGfwKl5slpHG9OwPNty4jOWPRIhBpxOoD+hqITiwuipOQ2bNthAzwA3B4fIjO4Nln74N0S9byq8A==", + "dev": true, "license": "MIT", "dependencies": { - "path-key": "^3.1.0", - "shebang-command": "^2.0.0", - "which": "^2.0.1" + "call-bound": "^1.0.3" }, "engines": { - "node": ">= 8" + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/crossws": { - "version": "0.3.5", - "resolved": "https://registry.npmjs.org/crossws/-/crossws-0.3.5.tgz", - "integrity": "sha512-ojKiDvcmByhwa8YYqbQI/hg7MEU0NC03+pSdEq4ZUnZR9xXpwk7E43SMNGkn+JxJGPFtNvQ48+vV2p+P1ml5PA==", + "node_modules/is-stream": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", + "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==", "license": "MIT", - "dependencies": { - "uncrypto": "^0.1.3" - } - }, - "node_modules/crypt": { - "version": "0.0.2", - "resolved": "https://registry.npmjs.org/crypt/-/crypt-0.0.2.tgz", - "integrity": "sha512-mCxBlsHFYh9C+HVpiEacem8FEBnMXgU9gy4zmNC+SXAZNB/1idgp/aulFJ4FgCi7GPEVbfyng092GqL2k2rmow==", - "dev": true, - "license": "BSD-3-Clause", "engines": { - "node": "*" + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/crypto-browserify": { - "version": "3.12.1", - "resolved": "https://registry.npmjs.org/crypto-browserify/-/crypto-browserify-3.12.1.tgz", - "integrity": "sha512-r4ESw/IlusD17lgQi1O20Fa3qNnsckR126TdUuBgAu7GBYSIPvdNyONd3Zrxh0xCwA4+6w/TDArBPsMvhur+KQ==", + "node_modules/is-string": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.1.1.tgz", + "integrity": "sha512-BtEeSsoaQjlSPBemMQIrY1MY0uM6vnS1g5fmufYOtnxLGUZM2178PKbhsk7Ffv58IX+ZtcvoGwccYsh0PglkAA==", "dev": true, "license": "MIT", "dependencies": { - "browserify-cipher": "^1.0.1", - "browserify-sign": "^4.2.3", - "create-ecdh": "^4.0.4", - "create-hash": "^1.2.0", - "create-hmac": "^1.1.7", - "diffie-hellman": "^5.0.3", - "hash-base": "~3.0.4", - "inherits": "^2.0.4", - "pbkdf2": "^3.1.2", - "public-encrypt": "^4.0.3", - "randombytes": "^2.1.0", - "randomfill": "^1.0.4" + "call-bound": "^1.0.3", + "has-tostringtag": "^1.0.2" }, "engines": { - "node": ">= 0.10" + "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/crypto-browserify/node_modules/hash-base": { - "version": "3.0.5", - "resolved": "https://registry.npmjs.org/hash-base/-/hash-base-3.0.5.tgz", - "integrity": "sha512-vXm0l45VbcHEVlTCzs8M+s0VeYsB2lnlAaThoLKGXr3bE/VWDOelNUnycUPEhKEaXARL2TEFjBOyUiM6+55KBg==", + "node_modules/is-subdir": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/is-subdir/-/is-subdir-1.2.0.tgz", + "integrity": "sha512-2AT6j+gXe/1ueqbW6fLZJiIw3F8iXGJtt0yDrZaBhAZEG1raiTxKWU+IPqMCzQAXOUCKdA4UDMgacKH25XG2Cw==", "dev": true, "license": "MIT", "dependencies": { - "inherits": "^2.0.4", - "safe-buffer": "^5.2.1" + "better-path-resolve": "1.0.0" }, "engines": { - "node": ">= 0.10" + "node": ">=4" } }, - "node_modules/crypto-js": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/crypto-js/-/crypto-js-4.2.0.tgz", - "integrity": "sha512-KALDyEYgpY+Rlob/iriUtjV6d5Eq+Y191A5g4UqLAi8CyGP9N1+FdVbkc1SxKc2r4YAYqG8JzO2KGL+AizD70Q==", - "license": "MIT" - }, - "node_modules/crypto-random-string": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/crypto-random-string/-/crypto-random-string-4.0.0.tgz", - "integrity": "sha512-x8dy3RnvYdlUcPOjkEHqozhiwzKNSq7GcPuXFbnyMOCHxX8V3OgIg/pYuabl2sbUPfIJaeAQB7PMOK8DFIdoRA==", + "node_modules/is-symbol": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.1.1.tgz", + "integrity": "sha512-9gGx6GTtCQM73BgmHQXfDmLtfjjTUDSyoxTCbp5WtoixAhfgsDirWIcVQ/IHpvI5Vgd5i/J5F7B9cN/WlVbC/w==", "dev": true, "license": "MIT", "dependencies": { - "type-fest": "^1.0.1" + "call-bound": "^1.0.2", + "has-symbols": "^1.1.0", + "safe-regex-test": "^1.1.0" }, "engines": { - "node": ">=12" + "node": ">= 0.4" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/crypto-random-string/node_modules/type-fest": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-1.4.0.tgz", - "integrity": "sha512-yGSza74xk0UG8k+pLh5oeoYirvIiWo5t0/o3zHHAO2tRDiZcxWP7fywNlXhqb6/r6sWvwi+RsyQMWhVLe4BVuA==", + "node_modules/is-text-path": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-text-path/-/is-text-path-2.0.0.tgz", + "integrity": "sha512-+oDTluR6WEjdXEJMnC2z6A4FRwFoYuvShVVEGsS7ewc0UTi2QtAKMDJuL4BDEVt+5T7MjFo12RP8ghOM75oKJw==", "dev": true, - "license": "(MIT OR CC0-1.0)", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/css-box-model": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/css-box-model/-/css-box-model-1.2.1.tgz", - "integrity": "sha512-a7Vr4Q/kd/aw96bnJG332W9V9LkJO69JRcaCYDUqjp6/z0w6VcZjgAcTbgFxEPfBgdnAwlh3iwu+hLopa+flJw==", "license": "MIT", "dependencies": { - "tiny-invariant": "^1.0.6" + "text-extensions": "^2.0.0" + }, + "engines": { + "node": ">=8" } }, - "node_modules/css.escape": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/css.escape/-/css.escape-1.5.1.tgz", - "integrity": "sha512-YUifsXXuknHlUsmlgyY0PKzgPOr7/FjCePfHNt0jxm83wHZi44VDMQ7/fGNkjY3/jV1MC+1CmZbaHzugyeRtpg==", - "dev": true, - "license": "MIT" - }, - "node_modules/cssom": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/cssom/-/cssom-0.5.0.tgz", - "integrity": "sha512-iKuQcq+NdHqlAcwUY0o/HL69XQrUaQdMjmStJ8JFmUaiiQErlhrmuigkg/CU4E2J0IyUKUrMAgl36TvN67MqTw==", - "dev": true, - "license": "MIT" - }, - "node_modules/cssstyle": { - "version": "4.6.0", - "resolved": "https://registry.npmjs.org/cssstyle/-/cssstyle-4.6.0.tgz", - "integrity": "sha512-2z+rWdzbbSZv6/rhtvzvqeZQHrBaqgogqt85sqFNbabZOuFbCVFb8kPeEtZjiKkbrm395irpNKiYeFeLiQnFPg==", - "dev": true, + "node_modules/is-typed-array": { + "version": "1.1.15", + "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.15.tgz", + "integrity": "sha512-p3EcsicXjit7SaskXHs1hA91QxgTw46Fv6EFKKGS5DRFLD8yKnohjF3hxoju94b/OcMZoQukzpPpBE9uLVKzgQ==", "license": "MIT", "dependencies": { - "@asamuzakjp/css-color": "^3.2.0", - "rrweb-cssom": "^0.8.0" + "which-typed-array": "^1.1.16" }, "engines": { - "node": ">=18" + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/cssstyle/node_modules/rrweb-cssom": { - "version": "0.8.0", - "resolved": "https://registry.npmjs.org/rrweb-cssom/-/rrweb-cssom-0.8.0.tgz", - "integrity": "sha512-guoltQEx+9aMf2gDZ0s62EcV8lsXR+0w8915TC3ITdn2YueuNjdAYh/levpU9nFaoChh9RUS5ZdQMrKfVEN9tw==", - "dev": true, - "license": "MIT" - }, - "node_modules/csstype": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.3.tgz", - "integrity": "sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==", + "node_modules/is-typedarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", + "integrity": "sha512-cyA56iCMHAh5CdzjJIa4aohJyeO1YbwLi3Jc35MmRU6poroFjIGZzUzupGiRPOjgHg9TLu43xbpwXk523fMxKA==", "license": "MIT" }, - "node_modules/dargs": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/dargs/-/dargs-8.1.0.tgz", - "integrity": "sha512-wAV9QHOsNbwnWdNW2FYvE1P56wtgSbM+3SZcdGiWQILwVjACCXDCI3Ai8QlCjMDB8YK5zySiXZYBiwGmNY3lnw==", - "dev": true, + "node_modules/is-unicode-supported": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz", + "integrity": "sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==", "license": "MIT", "engines": { - "node": ">=12" + "node": ">=10" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/data-uri-to-buffer": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/data-uri-to-buffer/-/data-uri-to-buffer-4.0.1.tgz", - "integrity": "sha512-0R9ikRb668HB7QDxT1vkpuUBtqc53YyAwMwGeUFKRojY/NWKvdZ+9UYtRfGmhqNbRkTSVpMbmyhXipFFv2cb/A==", + "node_modules/is-weakmap": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/is-weakmap/-/is-weakmap-2.0.2.tgz", + "integrity": "sha512-K5pXYOm9wqY1RgjpL3YTkF39tni1XajUIkawTLUo9EZEVUFga5gSQJF8nNS7ZwJQ02y+1YCNYcMh+HIf1ZqE+w==", + "dev": true, "license": "MIT", "engines": { - "node": ">= 12" + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/data-urls": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/data-urls/-/data-urls-5.0.0.tgz", - "integrity": "sha512-ZYP5VBHshaDAiVZxjbRVcFJpc+4xGgT0bK3vzy1HLN8jTO975HEbuYzZJcHoQEY5K1a0z8YayJkyVETa08eNTg==", + "node_modules/is-weakref": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/is-weakref/-/is-weakref-1.1.1.tgz", + "integrity": "sha512-6i9mGWSlqzNMEqpCp93KwRS1uUOodk2OJ6b+sq7ZPDSy2WuI5NFIxp/254TytR8ftefexkWn5xNiHUNpPOfSew==", "dev": true, "license": "MIT", "dependencies": { - "whatwg-mimetype": "^4.0.0", - "whatwg-url": "^14.0.0" + "call-bound": "^1.0.3" }, "engines": { - "node": ">=18" + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/data-view-buffer": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/data-view-buffer/-/data-view-buffer-1.0.2.tgz", - "integrity": "sha512-EmKO5V3OLXh1rtK2wgXRansaK1/mtVdTUEiEI0W8RkvgT05kfxaH29PliLnpLP73yYO6142Q72QNa8Wx/A5CqQ==", + "node_modules/is-weakset": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/is-weakset/-/is-weakset-2.0.4.tgz", + "integrity": "sha512-mfcwb6IzQyOKTs84CQMrOwW4gQcaTOAWJ0zzJCl2WSPDrWk/OzDaImWFH3djXhb24g4eudZfLRozAvPGw4d9hQ==", "dev": true, "license": "MIT", "dependencies": { "call-bound": "^1.0.3", - "es-errors": "^1.3.0", - "is-data-view": "^1.0.2" + "get-intrinsic": "^1.2.6" }, "engines": { "node": ">= 0.4" @@ -23576,8193 +39766,9586 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/data-view-byte-length": { + "node_modules/is-windows": { "version": "1.0.2", - "resolved": "https://registry.npmjs.org/data-view-byte-length/-/data-view-byte-length-1.0.2.tgz", - "integrity": "sha512-tuhGbE6CfTM9+5ANGf+oQb72Ky/0+s3xKUpHvShfiz2RxMFgFPjsXuRLBVMtvMs15awe45SRb83D6wH4ew6wlQ==", + "resolved": "https://registry.npmjs.org/is-windows/-/is-windows-1.0.2.tgz", + "integrity": "sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==", "dev": true, "license": "MIT", - "dependencies": { - "call-bound": "^1.0.3", - "es-errors": "^1.3.0", - "is-data-view": "^1.0.2" - }, "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/inspect-js" + "node": ">=0.10.0" } }, - "node_modules/data-view-byte-offset": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/data-view-byte-offset/-/data-view-byte-offset-1.0.1.tgz", - "integrity": "sha512-BS8PfmtDGnrgYdOonGZQdLZslWIeCGFP9tpan0hi1Co2Zr2NKADsvGYA8XxuG/4UWgJ6Cjtv+YJnB6MM69QGlQ==", - "dev": true, + "node_modules/is-wsl": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-2.2.0.tgz", + "integrity": "sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==", "license": "MIT", "dependencies": { - "call-bound": "^1.0.2", - "es-errors": "^1.3.0", - "is-data-view": "^1.0.1" + "is-docker": "^2.0.0" }, "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "node": ">=8" } }, - "node_modules/date-fns": { - "version": "2.30.0", - "resolved": "https://registry.npmjs.org/date-fns/-/date-fns-2.30.0.tgz", - "integrity": "sha512-fnULvOpxnC5/Vg3NCiWelDsLiUc9bRwAPs/+LfTLNvetFCtCTN+yQz15C/fs4AwX1R9K5GLtLfn8QW+dWisaAw==", + "node_modules/is-yarn-global": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/is-yarn-global/-/is-yarn-global-0.4.1.tgz", + "integrity": "sha512-/kppl+R+LO5VmhYSEWARUFjodS25D68gvj8W7z0I7OWhUla5xWu8KL6CtB2V0R6yqhnRgbcaREMr4EEM6htLPQ==", "license": "MIT", - "dependencies": { - "@babel/runtime": "^7.21.0" - }, "engines": { - "node": ">=0.11" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/date-fns" + "node": ">=12" } }, - "node_modules/date-fns-tz": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/date-fns-tz/-/date-fns-tz-2.0.1.tgz", - "integrity": "sha512-fJCG3Pwx8HUoLhkepdsP7Z5RsucUi+ZBOxyM5d0ZZ6c4SdYustq0VMmOu6Wf7bli+yS/Jwp91TOCqn9jMcVrUA==", - "dev": true, + "node_modules/isarray": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz", + "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==", + "license": "MIT" + }, + "node_modules/isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", + "license": "ISC" + }, + "node_modules/isobject": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", + "integrity": "sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg==", "license": "MIT", - "peerDependencies": { - "date-fns": "2.x" + "engines": { + "node": ">=0.10.0" } }, - "node_modules/dateformat": { - "version": "4.6.3", - "resolved": "https://registry.npmjs.org/dateformat/-/dateformat-4.6.3.tgz", - "integrity": "sha512-2P0p0pFGzHS5EMnhdxQi7aJN+iMheud0UhG4dlE1DLAlvL8JHjJJTX/CSm4JXwV0Ka5nGk3zC5mcb5bUQUxxMA==", + "node_modules/isomorphic-timers-promises": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/isomorphic-timers-promises/-/isomorphic-timers-promises-1.0.1.tgz", + "integrity": "sha512-u4sej9B1LPSxTGKB/HiuzvEQnXH0ECYkSVQU39koSwmFAxhlEAFl9RdTvLv4TOTQUgBS5O3O5fwUxk6byBZ+IQ==", + "dev": true, "license": "MIT", "engines": { - "node": "*" + "node": ">=10" } }, - "node_modules/dayjs": { - "version": "1.11.18", - "resolved": "https://registry.npmjs.org/dayjs/-/dayjs-1.11.18.tgz", - "integrity": "sha512-zFBQ7WFRvVRhKcWoUh+ZA1g2HVgUbsZm9sbddh8EC5iv93sui8DVVz1Npvz+r6meo9VKfa8NyLWBsQK1VvIKPA==", - "license": "MIT" + "node_modules/isomorphic-unfetch": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/isomorphic-unfetch/-/isomorphic-unfetch-3.1.0.tgz", + "integrity": "sha512-geDJjpoZ8N0kWexiwkX8F9NkTsXhetLPVbZFQ+JTW239QNOwvB0gniuR1Wc6f0AMTn7/mFGyXvHTifrCp/GH8Q==", + "license": "MIT", + "dependencies": { + "node-fetch": "^2.6.1", + "unfetch": "^4.2.0" + } }, - "node_modules/death": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/death/-/death-1.1.0.tgz", - "integrity": "sha512-vsV6S4KVHvTGxbEcij7hkWRv0It+sGGWVOM67dQde/o5Xjnr+KmLjxWJii2uEObIrt1CcM9w0Yaovx+iOlIL+w==", - "dev": true + "node_modules/istanbul": { + "version": "0.3.22", + "resolved": "https://registry.npmjs.org/istanbul/-/istanbul-0.3.22.tgz", + "integrity": "sha512-8H/jxiee2UqX/mviKkPoKQYMxU2t995FC5PwO4zjWeDPOozjoeKqxEyN62l9o5+UgzvYQbrKgQjjxhGON8FcMg==", + "deprecated": "This module is no longer maintained, try this instead:\n npm i nyc\nVisit https://istanbul.js.org/integrations for other alternatives.", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "abbrev": "1.0.x", + "async": "1.x", + "escodegen": "1.7.x", + "esprima": "2.5.x", + "fileset": "0.2.x", + "handlebars": "^4.0.1", + "js-yaml": "3.x", + "mkdirp": "0.5.x", + "nopt": "3.x", + "once": "1.x", + "resolve": "1.1.x", + "supports-color": "^3.1.0", + "which": "^1.1.1", + "wordwrap": "^1.0.0" + }, + "bin": { + "istanbul": "lib/cli.js" + } }, - "node_modules/debug": { - "version": "4.4.3", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.3.tgz", - "integrity": "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==", + "node_modules/istanbul-combine": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/istanbul-combine/-/istanbul-combine-0.3.0.tgz", + "integrity": "sha512-zWtpO29Qs2ruIRu6qYtsX5guqw+/JFcZlTLrv1XUoBHe30r9v8pJgisf4VbMK3P2gahZjP6SlY1cz4qZ2YHaxw==", + "dev": true, "license": "MIT", "dependencies": { - "ms": "^2.1.3" - }, - "engines": { - "node": ">=6.0" + "glob": "^5.0.3", + "istanbul": "0.3.x", + "minimist": "^1.1.1", + "q": "^1.2.0" }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } + "bin": { + "istanbul-combine": "cli.js" } }, - "node_modules/decamelize": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-4.0.0.tgz", - "integrity": "sha512-9iE1PgSik9HeIIw2JO94IidnE3eBoQrFJ3w7sFuzSX4DpmZ3v5sZpUiV5Swcf6mQEF+Y0ru8Neo+p+nyh2J+hQ==", + "node_modules/istanbul-combine/node_modules/glob": { + "version": "5.0.15", + "resolved": "https://registry.npmjs.org/glob/-/glob-5.0.15.tgz", + "integrity": "sha512-c9IPMazfRITpmAAKi22dK1VKxGDX9ehhqfABDriL/lzO92xcUKEJPQHrVA/2YHSNFB4iFlykVmWvwo48nr3OxA==", + "deprecated": "Glob versions prior to v9 are no longer supported", "dev": true, - "license": "MIT", + "license": "ISC", + "dependencies": { + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "2 || 3", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + } + }, + "node_modules/istanbul-lib-coverage": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.2.tgz", + "integrity": "sha512-O8dpsF+r0WV/8MNRKfnmrtCWhuKjxrq2w+jpzBL5UZKTi2LeVWnWOmWRxFlesJONmc+wLAGvKQZEOanko0LFTg==", + "license": "BSD-3-Clause", "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">=8" } }, - "node_modules/decimal.js": { - "version": "10.6.0", - "resolved": "https://registry.npmjs.org/decimal.js/-/decimal.js-10.6.0.tgz", - "integrity": "sha512-YpgQiITW3JXGntzdUmyUR1V812Hn8T1YVXhCu+wO3OpS4eU9l4YdD3qjyiKdV6mvV29zapkMeD390UVEf2lkUg==", + "node_modules/istanbul-lib-hook": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/istanbul-lib-hook/-/istanbul-lib-hook-3.0.0.tgz", + "integrity": "sha512-Pt/uge1Q9s+5VAZ+pCo16TYMWPBIl+oaNIjgLQxcX0itS6ueeaA+pEfThZpH8WxhFgCiEb8sAJY6MdUKgiIWaQ==", "dev": true, - "license": "MIT" - }, - "node_modules/decode-uri-component": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.2.tgz", - "integrity": "sha512-FqUYQ+8o158GyGTrMFJms9qh3CqTKvAqgqsTnkLI8sKu0028orqBhxNMFkFen0zGyg6epACD32pjVk58ngIErQ==", - "license": "MIT", + "license": "BSD-3-Clause", + "dependencies": { + "append-transform": "^2.0.0" + }, "engines": { - "node": ">=0.10" + "node": ">=8" } }, - "node_modules/decompress-response": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-6.0.0.tgz", - "integrity": "sha512-aW35yZM6Bb/4oJlZncMH2LCoZtJXTRxES17vE3hoRiowU2kWHaJKFkSBDnDR+cm9J+9QhXmREyIfv0pji9ejCQ==", + "node_modules/istanbul-lib-instrument": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-6.0.3.tgz", + "integrity": "sha512-Vtgk7L/R2JHyyGW07spoFlB8/lpjiOLTjMdms6AFMraYt3BaJauod/NGrfnVG/y4Ix1JEuMRPDPEj2ua+zz1/Q==", "dev": true, - "license": "MIT", + "license": "BSD-3-Clause", "dependencies": { - "mimic-response": "^3.1.0" + "@babel/core": "^7.23.9", + "@babel/parser": "^7.23.9", + "@istanbuljs/schema": "^0.1.3", + "istanbul-lib-coverage": "^3.2.0", + "semver": "^7.5.4" }, "engines": { "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/decompress-response/node_modules/mimic-response": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-3.1.0.tgz", - "integrity": "sha512-z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb064c6Wr4N/wv0DzQTjNzHNGQ==", + "node_modules/istanbul-lib-instrument/node_modules/semver": { + "version": "7.7.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.2.tgz", + "integrity": "sha512-RF0Fw+rO5AMf9MAyaRXI4AV0Ulj5lMHqVxxdSgiVbixSCXoEmmX/jk0CuJw4+3SqroYO9VoUh+HcuJivvtJemA==", "dev": true, - "license": "MIT", + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + }, "engines": { "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/dedent": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/dedent/-/dedent-1.7.0.tgz", - "integrity": "sha512-HGFtf8yhuhGhqO07SV79tRp+br4MnbdjeVxotpn1QBl30pcLLCQjX5b2295ll0fv8RKDKsmWYrl05usHM9CewQ==", - "license": "MIT", - "peerDependencies": { - "babel-plugin-macros": "^3.1.0" + "node_modules/istanbul-lib-processinfo": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/istanbul-lib-processinfo/-/istanbul-lib-processinfo-2.0.3.tgz", + "integrity": "sha512-NkwHbo3E00oybX6NGJi6ar0B29vxyvNwoC7eJ4G4Yq28UfY758Hgn/heV8VRFhevPED4LXfFz0DQ8z/0kw9zMg==", + "dev": true, + "license": "ISC", + "dependencies": { + "archy": "^1.0.0", + "cross-spawn": "^7.0.3", + "istanbul-lib-coverage": "^3.2.0", + "p-map": "^3.0.0", + "rimraf": "^3.0.0", + "uuid": "^8.3.2" }, - "peerDependenciesMeta": { - "babel-plugin-macros": { - "optional": true - } + "engines": { + "node": ">=8" } }, - "node_modules/deep-eql": { - "version": "4.1.4", - "resolved": "https://registry.npmjs.org/deep-eql/-/deep-eql-4.1.4.tgz", - "integrity": "sha512-SUwdGfqdKOwxCPeVYjwSyRpJ7Z+fhpwIAtmCUdZIWZ/YP5R9WAsyuSgpLVDi9bjWoN2LXHNss/dk3urXtdQxGg==", - "license": "MIT", + "node_modules/istanbul-lib-processinfo/node_modules/glob": { + "version": "7.2.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", + "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", + "deprecated": "Glob versions prior to v9 are no longer supported", + "dev": true, + "license": "ISC", "dependencies": { - "type-detect": "^4.0.0" + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.1.1", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" }, "engines": { - "node": ">=6" + "node": "*" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/deep-equal": { - "version": "2.2.3", - "resolved": "https://registry.npmjs.org/deep-equal/-/deep-equal-2.2.3.tgz", - "integrity": "sha512-ZIwpnevOurS8bpT4192sqAowWM76JDKSHYzMLty3BZGSswgq6pBaH3DhCSW5xVAZICZyKdOBPjwww5wfgT/6PA==", + "node_modules/istanbul-lib-processinfo/node_modules/p-map": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/p-map/-/p-map-3.0.0.tgz", + "integrity": "sha512-d3qXVTF/s+W+CdJ5A29wywV2n8CQQYahlgz2bFiA+4eVNJbHJodPZ+/gXwPGh0bOqA+j8S+6+ckmvLGPk1QpxQ==", "dev": true, "license": "MIT", "dependencies": { - "array-buffer-byte-length": "^1.0.0", - "call-bind": "^1.0.5", - "es-get-iterator": "^1.1.3", - "get-intrinsic": "^1.2.2", - "is-arguments": "^1.1.1", - "is-array-buffer": "^3.0.2", - "is-date-object": "^1.0.5", - "is-regex": "^1.1.4", - "is-shared-array-buffer": "^1.0.2", - "isarray": "^2.0.5", - "object-is": "^1.1.5", - "object-keys": "^1.1.1", - "object.assign": "^4.1.4", - "regexp.prototype.flags": "^1.5.1", - "side-channel": "^1.0.4", - "which-boxed-primitive": "^1.0.2", - "which-collection": "^1.0.1", - "which-typed-array": "^1.1.13" + "aggregate-error": "^3.0.0" }, "engines": { - "node": ">= 0.4" + "node": ">=8" + } + }, + "node_modules/istanbul-lib-processinfo/node_modules/rimraf": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", + "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", + "deprecated": "Rimraf versions prior to v4 are no longer supported", + "dev": true, + "license": "ISC", + "dependencies": { + "glob": "^7.1.3" + }, + "bin": { + "rimraf": "bin.js" }, "funding": { - "url": "https://github.com/sponsors/ljharb" + "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/deep-extend": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz", - "integrity": "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==", - "devOptional": true, + "node_modules/istanbul-lib-processinfo/node_modules/uuid": { + "version": "8.3.2", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", + "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==", + "dev": true, "license": "MIT", - "engines": { - "node": ">=4.0.0" + "bin": { + "uuid": "dist/bin/uuid" } }, - "node_modules/deep-is": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", - "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==", + "node_modules/istanbul-lib-report": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/istanbul-lib-report/-/istanbul-lib-report-3.0.1.tgz", + "integrity": "sha512-GCfE1mtsHGOELCU8e/Z7YWzpmybrx/+dSTfLrvY8qRmaY6zXTKWn6WQIjaAFw069icm6GVMNkgu0NzI4iPZUNw==", "dev": true, - "license": "MIT" - }, - "node_modules/deepmerge": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.3.1.tgz", - "integrity": "sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==", - "license": "MIT", + "license": "BSD-3-Clause", + "dependencies": { + "istanbul-lib-coverage": "^3.0.0", + "make-dir": "^4.0.0", + "supports-color": "^7.1.0" + }, "engines": { - "node": ">=0.10.0" + "node": ">=10" } }, - "node_modules/defaults": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/defaults/-/defaults-1.0.4.tgz", - "integrity": "sha512-eFuaLoy/Rxalv2kr+lqMlUnrDWV+3j4pljOIJgLIhI058IQfWJ7vXhyEIHu+HtC738klGALYxOKDO0bQP3tg8A==", + "node_modules/istanbul-lib-report/node_modules/make-dir": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-4.0.0.tgz", + "integrity": "sha512-hXdUTZYIVOt1Ex//jAQi+wTZZpUpwBj/0QsOzqegb3rGMMeJiSEu5xLHnYfBrRV4RH2+OCSOO95Is/7x1WJ4bw==", + "dev": true, "license": "MIT", "dependencies": { - "clone": "^1.0.2" + "semver": "^7.5.3" + }, + "engines": { + "node": ">=10" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/defer-to-connect": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/defer-to-connect/-/defer-to-connect-2.0.1.tgz", - "integrity": "sha512-4tvttepXG1VaYGrRibk5EwJd1t4udunSOVMdLSAL6mId1ix438oPwPZMALY41FCijukO1L0twNcGsdzS7dHgDg==", + "node_modules/istanbul-lib-report/node_modules/semver": { + "version": "7.7.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.2.tgz", + "integrity": "sha512-RF0Fw+rO5AMf9MAyaRXI4AV0Ulj5lMHqVxxdSgiVbixSCXoEmmX/jk0CuJw4+3SqroYO9VoUh+HcuJivvtJemA==", "dev": true, - "license": "MIT", + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + }, "engines": { "node": ">=10" } }, - "node_modules/define-data-property": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.4.tgz", - "integrity": "sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==", - "license": "MIT", + "node_modules/istanbul-lib-source-maps": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/istanbul-lib-source-maps/-/istanbul-lib-source-maps-4.0.1.tgz", + "integrity": "sha512-n3s8EwkdFIJCG3BPKBYvskgXGoy88ARzvegkitk60NxRdwltLOTaH7CUiMRXvwYorl0Q712iEjcWB+fK/MrWVw==", + "dev": true, + "license": "BSD-3-Clause", "dependencies": { - "es-define-property": "^1.0.0", - "es-errors": "^1.3.0", - "gopd": "^1.0.1" + "debug": "^4.1.1", + "istanbul-lib-coverage": "^3.0.0", + "source-map": "^0.6.1" }, "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "node": ">=10" } }, - "node_modules/define-properties": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.2.1.tgz", - "integrity": "sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==", + "node_modules/istanbul-lib-source-maps/node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", "dev": true, - "license": "MIT", + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/istanbul-reports": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-3.2.0.tgz", + "integrity": "sha512-HGYWWS/ehqTV3xN10i23tkPkpH46MLCIMFNCaaKNavAXTF1RkqxawEPtnjnGZ6XKSInBKkiOA5BKS+aZiY3AvA==", + "dev": true, + "license": "BSD-3-Clause", "dependencies": { - "define-data-property": "^1.0.1", - "has-property-descriptors": "^1.0.0", - "object-keys": "^1.1.1" + "html-escaper": "^2.0.0", + "istanbul-lib-report": "^3.0.0" }, "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "node": ">=8" } }, - "node_modules/defu": { - "version": "6.1.4", - "resolved": "https://registry.npmjs.org/defu/-/defu-6.1.4.tgz", - "integrity": "sha512-mEQCMmwJu317oSz8CwdIOdwf3xMif1ttiM8LTufzc3g6kR+9Pe236twL8j3IYT1F7GfRgGcW6MWxzZjLIkuHIg==", - "license": "MIT" + "node_modules/istanbul/node_modules/abbrev": { + "version": "1.0.9", + "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.0.9.tgz", + "integrity": "sha512-LEyx4aLEC3x6T0UguF6YILf+ntvmOaWsVfENmIW0E9H09vKlLDGelMjjSm0jkDHALj8A8quZ/HapKNigzwge+Q==", + "dev": true, + "license": "ISC" }, - "node_modules/delayed-stream": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", - "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==", + "node_modules/istanbul/node_modules/argparse": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", + "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", + "dev": true, "license": "MIT", - "engines": { - "node": ">=0.4.0" + "dependencies": { + "sprintf-js": "~1.0.2" } }, - "node_modules/delegates": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/delegates/-/delegates-1.0.0.tgz", - "integrity": "sha512-bd2L678uiWATM6m5Z1VzNCErI3jiGzt6HGY8OVICs40JQq/HALfbyNJmp0UDakEY4pMMaN0Ly5om/B1VI/+xfQ==", - "license": "MIT", - "optional": true - }, - "node_modules/delete-empty": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/delete-empty/-/delete-empty-3.0.0.tgz", - "integrity": "sha512-ZUyiwo76W+DYnKsL3Kim6M/UOavPdBJgDYWOmuQhYaZvJH0AXAHbUNyEDtRbBra8wqqr686+63/0azfEk1ebUQ==", + "node_modules/istanbul/node_modules/escodegen": { + "version": "1.7.1", + "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-1.7.1.tgz", + "integrity": "sha512-2cd7+JUtUEmZVpGmfF9r+uRYXswJAkf85Ce8GvdBa7hSvdjY8hGo+rwC5syAgYzqHpfxNJzLntFjw6879yPbgQ==", "dev": true, - "license": "MIT", + "license": "BSD-2-Clause", "dependencies": { - "ansi-colors": "^4.1.0", - "minimist": "^1.2.0", - "path-starts-with": "^2.0.0", - "rimraf": "^2.6.2" + "esprima": "^1.2.2", + "estraverse": "^1.9.1", + "esutils": "^2.0.2", + "optionator": "^0.5.0" }, "bin": { - "delete-empty": "bin/cli.js" + "escodegen": "bin/escodegen.js", + "esgenerate": "bin/esgenerate.js" }, "engines": { - "node": ">=10" + "node": ">=0.12.0" + }, + "optionalDependencies": { + "source-map": "~0.2.0" } }, - "node_modules/delete-empty/node_modules/glob": { - "version": "7.2.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", - "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", - "deprecated": "Glob versions prior to v9 are no longer supported", + "node_modules/istanbul/node_modules/escodegen/node_modules/esprima": { + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/esprima/-/esprima-1.2.5.tgz", + "integrity": "sha512-S9VbPDU0adFErpDai3qDkjq8+G05ONtKzcyNrPKg/ZKa+tf879nX2KexNU95b31UoTJjRLInNBHHHjFPoCd7lQ==", "dev": true, - "license": "ISC", - "dependencies": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.1.1", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" + "bin": { + "esparse": "bin/esparse.js", + "esvalidate": "bin/esvalidate.js" }, "engines": { - "node": "*" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" + "node": ">=0.4.0" } }, - "node_modules/delete-empty/node_modules/rimraf": { - "version": "2.7.1", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", - "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", - "deprecated": "Rimraf versions prior to v4 are no longer supported", + "node_modules/istanbul/node_modules/esprima": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/esprima/-/esprima-2.5.0.tgz", + "integrity": "sha512-uM6hfS0/8ybNIj8SGRMdidPJy5uhWqWN/GIkyqnMAbCSL44yfFGLuBpRRCgOpBXBZt2OymQuM+IfahkqJq3DWw==", "dev": true, - "license": "ISC", - "dependencies": { - "glob": "^7.1.3" - }, + "license": "BSD-2-Clause", "bin": { - "rimraf": "bin.js" - } - }, - "node_modules/depd": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", - "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==", - "license": "MIT", + "esparse": "bin/esparse.js", + "esvalidate": "bin/esvalidate.js" + }, "engines": { - "node": ">= 0.8" + "node": ">=0.10.0" } }, - "node_modules/dequal": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/dequal/-/dequal-2.0.3.tgz", - "integrity": "sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA==", + "node_modules/istanbul/node_modules/estraverse": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-1.9.3.tgz", + "integrity": "sha512-25w1fMXQrGdoquWnScXZGckOv+Wes+JDnuN/+7ex3SauFRS72r2lFDec0EKPt2YD1wUJ/IrfEex+9yp4hfSOJA==", "dev": true, - "license": "MIT", "engines": { - "node": ">=6" + "node": ">=0.10.0" } }, - "node_modules/des.js": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/des.js/-/des.js-1.1.0.tgz", - "integrity": "sha512-r17GxjhUCjSRy8aiJpr8/UadFIzMzJGexI3Nmz4ADi9LYSFx4gTBp80+NaX/YsXWWLhpZ7v/v/ubEc/bCNfKwg==", + "node_modules/istanbul/node_modules/fast-levenshtein": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-1.0.7.tgz", + "integrity": "sha512-hYsfI0s4lfQ2rHVFKXwAr/L/ZSbq9TZwgXtZqW7ANcn9o9GKvcbWxOnxx7jykXf/Ezv1V8TvaBEKcGK7DWKX5A==", "dev": true, - "license": "MIT", - "dependencies": { - "inherits": "^2.0.1", - "minimalistic-assert": "^1.0.0" - } - }, - "node_modules/destr": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/destr/-/destr-2.0.5.tgz", - "integrity": "sha512-ugFTXCtDZunbzasqBxrK93Ik/DRYsO6S/fedkWEMKqt04xZ4csmnmwGDBAb07QWNaGMAmnTIemsYZCksjATwsA==", "license": "MIT" }, - "node_modules/destroy": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.2.0.tgz", - "integrity": "sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==", + "node_modules/istanbul/node_modules/has-flag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-1.0.0.tgz", + "integrity": "sha512-DyYHfIYwAJmjAjSSPKANxI8bFY9YtFrgkAfinBojQ8YJTOuOuav64tMUJv584SES4xl74PmuaevIyaLESHdTAA==", + "dev": true, "license": "MIT", "engines": { - "node": ">= 0.8", - "npm": "1.2.8000 || >= 1.4.16" + "node": ">=0.10.0" } }, - "node_modules/detect-browser": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/detect-browser/-/detect-browser-5.3.0.tgz", - "integrity": "sha512-53rsFbGdwMwlF7qvCt0ypLM5V5/Mbl0szB7GPN8y9NCcbknYOeVVXdrXEq+90IwAfrrzt6Hd+u2E2ntakICU8w==", - "license": "MIT" - }, - "node_modules/detect-indent": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/detect-indent/-/detect-indent-6.1.0.tgz", - "integrity": "sha512-reYkTUJAZb9gUuZ2RvVCNhVHdg62RHnJ7WJl8ftMi4diZ6NWlciOzQN88pUhSELEwflJht4oQDv0F0BMlwaYtA==", + "node_modules/istanbul/node_modules/js-yaml": { + "version": "3.14.2", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.2.tgz", + "integrity": "sha512-PMSmkqxr106Xa156c2M265Z+FTrPl+oxd/rgOQy2tijQeK5TxQ43psO1ZCwhVOSdnn+RzkzlRz/eY4BgJBYVpg==", "dev": true, "license": "MIT", - "engines": { - "node": ">=8" + "dependencies": { + "argparse": "^1.0.7", + "esprima": "^4.0.0" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" } }, - "node_modules/detect-libc": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-2.1.1.tgz", - "integrity": "sha512-ecqj/sy1jcK1uWrwpR67UhYrIFQ+5WlGxth34WquCbamhFA6hkkwiu37o6J5xCHdo1oixJRfVRw+ywV+Hq/0Aw==", - "license": "Apache-2.0", - "optional": true, + "node_modules/istanbul/node_modules/js-yaml/node_modules/esprima": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", + "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", + "dev": true, + "license": "BSD-2-Clause", + "bin": { + "esparse": "bin/esparse.js", + "esvalidate": "bin/esvalidate.js" + }, "engines": { - "node": ">=8" + "node": ">=4" } }, - "node_modules/detect-newline": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/detect-newline/-/detect-newline-3.1.0.tgz", - "integrity": "sha512-TLz+x/vEXm/Y7P7wn1EJFNLxYpUD4TgMosxY6fAVJUnJMbupHBOncxyWUG9OpTaH9EBD7uFI5LfEgmMOc54DsA==", + "node_modules/istanbul/node_modules/levn": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/levn/-/levn-0.2.5.tgz", + "integrity": "sha512-mvp+NO++YH0B+e8cC/SvJxk6k5Z9Ngd3iXuz7tmT8vZCyQZj/5SI1GkFOiZGGPkm5wWGI9SUrqiAfPq7BJH+0w==", "dev": true, - "license": "MIT", + "dependencies": { + "prelude-ls": "~1.1.0", + "type-check": "~0.3.1" + }, "engines": { - "node": ">=8" + "node": ">= 0.8.0" } }, - "node_modules/detect-node-es": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/detect-node-es/-/detect-node-es-1.1.0.tgz", - "integrity": "sha512-ypdmJU/TbBby2Dxibuv7ZLW3Bs1QEmM7nHjEANfohJLvE0XVujisn1qPJcZxg+qDucsr+bP6fLD1rPS3AhJ7EQ==", - "license": "MIT" - }, - "node_modules/dezalgo": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/dezalgo/-/dezalgo-1.0.4.tgz", - "integrity": "sha512-rXSP0bf+5n0Qonsb+SVVfNfIsimO4HEtmnIpPHY8Q1UCzKlQrDMfdobr8nJOOsRgWCyMRqeSBQzmWUMq7zvVig==", + "node_modules/istanbul/node_modules/nopt": { + "version": "3.0.6", + "resolved": "https://registry.npmjs.org/nopt/-/nopt-3.0.6.tgz", + "integrity": "sha512-4GUt3kSEYmk4ITxzB/b9vaIDfUVWN/Ml1Fwl11IlnIG2iaJ9O6WXZ9SrYM9NLI8OCBieN2Y8SWC2oJV0RQ7qYg==", "dev": true, "license": "ISC", "dependencies": { - "asap": "^2.0.0", - "wrappy": "1" + "abbrev": "1" + }, + "bin": { + "nopt": "bin/nopt.js" } }, - "node_modules/did-jwt": { - "version": "8.0.18", - "resolved": "https://registry.npmjs.org/did-jwt/-/did-jwt-8.0.18.tgz", - "integrity": "sha512-yS3Y+aUKjYqRFrgR/RY77NuOOqS7SFfvfFH4THhWD6+hkxeUZcKQSsdNZ12QR1Vd48yP9exwae2wzbuOZn0NqQ==", - "license": "Apache-2.0", + "node_modules/istanbul/node_modules/optionator": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.5.0.tgz", + "integrity": "sha512-jUr7aBk/kCInAEsl+qxuw4ORpe458atDKXNLhyvPUD4NfnsJsbAViX1b9nb/0rS62lO8cIFd1VoiaXLQ+MybOw==", + "dev": true, "dependencies": { - "@noble/ciphers": "^1.0.0", - "@noble/curves": "^1.0.0", - "@noble/hashes": "^1.3.0", - "@scure/base": "^2.0.0", - "canonicalize": "^2.0.0", - "did-resolver": "^4.1.0", - "multibase": "^4.0.6", - "multiformats": "^9.6.2", - "uint8arrays": "3.1.1" + "deep-is": "~0.1.2", + "fast-levenshtein": "~1.0.0", + "levn": "~0.2.5", + "prelude-ls": "~1.1.1", + "type-check": "~0.3.1", + "wordwrap": "~0.0.2" + }, + "engines": { + "node": ">= 0.8.0" } }, - "node_modules/did-jwt/node_modules/@scure/base": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/@scure/base/-/base-2.0.0.tgz", - "integrity": "sha512-3E1kpuZginKkek01ovG8krQ0Z44E3DHPjc5S2rjJw9lZn3KSQOs8S7wqikF/AH7iRanHypj85uGyxk0XAyC37w==", + "node_modules/istanbul/node_modules/optionator/node_modules/wordwrap": { + "version": "0.0.3", + "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-0.0.3.tgz", + "integrity": "sha512-1tMA907+V4QmxV7dbRvb4/8MaRALK6q9Abid3ndMYnbyo8piisCmeONVqVSXqQA3KaP4SLt5b7ud6E2sqP8TFw==", + "dev": true, "license": "MIT", - "funding": { - "url": "https://paulmillr.com/funding/" + "engines": { + "node": ">=0.4.0" } }, - "node_modules/did-jwt/node_modules/multiformats": { - "version": "9.9.0", - "resolved": "https://registry.npmjs.org/multiformats/-/multiformats-9.9.0.tgz", - "integrity": "sha512-HoMUjhH9T8DDBNT+6xzkrd9ga/XiBI4xLr58LJACwK6G3HTOPeMz4nB4KJs33L2BelrIJa7P0VuNaVF3hMYfjg==", - "license": "(Apache-2.0 AND MIT)" + "node_modules/istanbul/node_modules/prelude-ls": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz", + "integrity": "sha512-ESF23V4SKG6lVSGZgYNpbsiaAkdab6ZgOxe52p7+Kid3W3u3bxR4Vfd/o21dmN7jSt0IwgZ4v5MUd26FEtXE9w==", + "dev": true, + "engines": { + "node": ">= 0.8.0" + } }, - "node_modules/did-resolver": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/did-resolver/-/did-resolver-4.1.0.tgz", - "integrity": "sha512-S6fWHvCXkZg2IhS4RcVHxwuyVejPR7c+a4Go0xbQ9ps5kILa8viiYQgrM4gfTyeTjJ0ekgJH9gk/BawTpmkbZA==", - "license": "Apache-2.0" + "node_modules/istanbul/node_modules/resolve": { + "version": "1.1.7", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.1.7.tgz", + "integrity": "sha512-9znBF0vBcaSN3W2j7wKvdERPwqTxSpCq+if5C0WoTCyV9n24rua28jeuQ2pL/HOf+yUe/Mef+H/5p60K0Id3bg==", + "dev": true, + "license": "MIT" }, - "node_modules/diff": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/diff/-/diff-5.2.0.tgz", - "integrity": "sha512-uIFDxqpRZGZ6ThOk84hEfqWoHx2devRFvpTZcTHur85vImfaxUbTW9Ryh4CpCuDnToOP1CEtXKIgytHBPVff5A==", + "node_modules/istanbul/node_modules/source-map": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.2.0.tgz", + "integrity": "sha512-CBdZ2oa/BHhS4xj5DlhjWNHcan57/5YuvfdLf17iVmIpd9KRm+DFLmC6nBNj+6Ua7Kt3TmOjDpQT1aTYOQtoUA==", "dev": true, - "license": "BSD-3-Clause", + "optional": true, + "dependencies": { + "amdefine": ">=0.0.4" + }, "engines": { - "node": ">=0.3.1" + "node": ">=0.8.0" } }, - "node_modules/diff-sequences": { - "version": "29.6.3", - "resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-29.6.3.tgz", - "integrity": "sha512-EjePK1srD3P08o2j4f0ExnylqRs5B9tJjcp9t1krH2qRi8CCdsYfwe9JgSLurFBWwq4uOlipzfk5fHNvwFKr8Q==", + "node_modules/istanbul/node_modules/supports-color": { + "version": "3.2.3", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz", + "integrity": "sha512-Jds2VIYDrlp5ui7t8abHN2bjAu4LV/q4N2KivFPpGH0lrka0BMq/33AmECUXlKPcHigkNaqfXRENFju+rlcy+A==", "dev": true, "license": "MIT", + "dependencies": { + "has-flag": "^1.0.0" + }, "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "node": ">=0.8.0" } }, - "node_modules/diffie-hellman": { - "version": "5.0.3", - "resolved": "https://registry.npmjs.org/diffie-hellman/-/diffie-hellman-5.0.3.tgz", - "integrity": "sha512-kqag/Nl+f3GwyK25fhUMYj81BUOrZ9IuJsjIcDE5icNM9FJHAVm3VcUDxdLPoQtTuUylWm6ZIknYJwwaPxsUzg==", + "node_modules/istanbul/node_modules/type-check": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz", + "integrity": "sha512-ZCmOJdvOWDBYJlzAoFkC+Q0+bUyEOS1ltgp1MGU03fqHG+dbi9tBFU2Rd9QKiDZFAYrhPh2JUf7rZRIuHRKtOg==", "dev": true, "license": "MIT", "dependencies": { - "bn.js": "^4.1.0", - "miller-rabin": "^4.0.0", - "randombytes": "^2.0.0" + "prelude-ls": "~1.1.2" + }, + "engines": { + "node": ">= 0.8.0" } }, - "node_modules/diffie-hellman/node_modules/bn.js": { - "version": "4.12.2", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.2.tgz", - "integrity": "sha512-n4DSx829VRTRByMRGdjQ9iqsN0Bh4OolPsFnaZBLcbi8iXcB+kJ9s7EnRt4wILZNV3kPLHkRVfOc/HvhC3ovDw==", - "dev": true, - "license": "MIT" - }, - "node_modules/difflib": { - "version": "0.2.4", - "resolved": "https://registry.npmjs.org/difflib/-/difflib-0.2.4.tgz", - "integrity": "sha512-9YVwmMb0wQHQNr5J9m6BSj6fk4pfGITGQOOs+D9Fl+INODWFOfvhIU1hNv6GgR1RBoC/9NJcwu77zShxV0kT7w==", + "node_modules/istanbul/node_modules/which": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", + "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", "dev": true, + "license": "ISC", "dependencies": { - "heap": ">= 0.2.0" + "isexe": "^2.0.0" }, - "engines": { - "node": "*" + "bin": { + "which": "bin/which" } }, - "node_modules/dijkstrajs": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/dijkstrajs/-/dijkstrajs-1.0.3.tgz", - "integrity": "sha512-qiSlmBq9+BCdCA/L46dw8Uy93mloxsPSbwnm5yrKn2vMPiy8KyAskTF6zuV/j5BMsmOGZDPs7KjU+mjb670kfA==", - "license": "MIT" + "node_modules/iterare": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/iterare/-/iterare-1.2.1.tgz", + "integrity": "sha512-RKYVTCjAnRthyJes037NX/IiqeidgN1xc3j1RjFfECFp28A1GVwK9nA+i0rJPaHqSZwygLzRnFlzUuHFoWWy+Q==", + "license": "ISC", + "engines": { + "node": ">=6" + } }, - "node_modules/dir-glob": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", - "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==", + "node_modules/iterator.prototype": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/iterator.prototype/-/iterator.prototype-1.1.5.tgz", + "integrity": "sha512-H0dkQoCa3b2VEeKQBOxFph+JAbcrQdE7KC0UkqwpLmv2EC4P41QXP+rqo9wYodACiG5/WM5s9oDApTU8utwj9g==", "dev": true, "license": "MIT", "dependencies": { - "path-type": "^4.0.0" + "define-data-property": "^1.1.4", + "es-object-atoms": "^1.0.0", + "get-intrinsic": "^1.2.6", + "get-proto": "^1.0.0", + "has-symbols": "^1.1.0", + "set-function-name": "^2.0.2" }, "engines": { - "node": ">=8" + "node": ">= 0.4" } }, - "node_modules/docker-compose": { - "version": "0.24.8", - "resolved": "https://registry.npmjs.org/docker-compose/-/docker-compose-0.24.8.tgz", - "integrity": "sha512-plizRs/Vf15H+GCVxq2EUvyPK7ei9b/cVesHvjnX4xaXjM9spHe2Ytq0BitndFgvTJ3E3NljPNUEl7BAN43iZw==", + "node_modules/jackspeak": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-4.1.1.tgz", + "integrity": "sha512-zptv57P3GpL+O0I7VdMJNBZCu+BPHVQUk55Ft8/QCJjTVxrnJHuVuX/0Bl2A6/+2oyR/ZMEuFKwmzqqZ/U5nPQ==", "dev": true, - "license": "MIT", + "license": "BlueOak-1.0.0", "dependencies": { - "yaml": "^2.2.2" + "@isaacs/cliui": "^8.0.2" }, "engines": { - "node": ">= 6.0.0" + "node": "20 || >=22" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/docker-modem": { - "version": "3.0.8", - "resolved": "https://registry.npmjs.org/docker-modem/-/docker-modem-3.0.8.tgz", - "integrity": "sha512-f0ReSURdM3pcKPNS30mxOHSbaFLcknGmQjwSfmbcdOw1XWKXVhukM3NJHhr7NpY9BIyyWQb0EBo3KQvvuU5egQ==", + "node_modules/jest": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest/-/jest-29.7.0.tgz", + "integrity": "sha512-NIy3oAFp9shda19hy4HK0HRTWKtPJmGdnvywu01nOqNC2vZg+Z+fvJDxpMQA88eb2I9EcafcdjYgsDthnYTvGw==", "dev": true, - "license": "Apache-2.0", + "license": "MIT", + "peer": true, "dependencies": { - "debug": "^4.1.1", - "readable-stream": "^3.5.0", - "split-ca": "^1.0.1", - "ssh2": "^1.11.0" + "@jest/core": "^29.7.0", + "@jest/types": "^29.6.3", + "import-local": "^3.0.2", + "jest-cli": "^29.7.0" + }, + "bin": { + "jest": "bin/jest.js" }, "engines": { - "node": ">= 8.0" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + }, + "peerDependencies": { + "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0" + }, + "peerDependenciesMeta": { + "node-notifier": { + "optional": true + } } }, - "node_modules/docker-modem/node_modules/readable-stream": { - "version": "3.6.2", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", - "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", + "node_modules/jest-changed-files": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-changed-files/-/jest-changed-files-29.7.0.tgz", + "integrity": "sha512-fEArFiwf1BpQ+4bXSprcDc3/x4HSzL4al2tozwVpDFpsxALjLYdyiIK4e5Vz66GQJIbXJ82+35PtysofptNX2w==", "dev": true, "license": "MIT", "dependencies": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" + "execa": "^5.0.0", + "jest-util": "^29.7.0", + "p-limit": "^3.1.0" }, "engines": { - "node": ">= 6" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/dockerode": { - "version": "3.3.5", - "resolved": "https://registry.npmjs.org/dockerode/-/dockerode-3.3.5.tgz", - "integrity": "sha512-/0YNa3ZDNeLr/tSckmD69+Gq+qVNhvKfAHNeZJBnp7EOP6RGKV8ORrJHkUn20So5wU+xxT7+1n5u8PjHbfjbSA==", + "node_modules/jest-changed-files/node_modules/p-limit": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", + "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", "dev": true, - "license": "Apache-2.0", + "license": "MIT", "dependencies": { - "@balena/dockerignore": "^1.0.2", - "docker-modem": "^3.0.0", - "tar-fs": "~2.0.1" + "yocto-queue": "^0.1.0" }, "engines": { - "node": ">= 8.0" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/dockerode/node_modules/chownr": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.1.4.tgz", - "integrity": "sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==", - "dev": true, - "license": "ISC" - }, - "node_modules/dockerode/node_modules/tar-fs": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/tar-fs/-/tar-fs-2.0.1.tgz", - "integrity": "sha512-6tzWDMeroL87uF/+lin46k+Q+46rAJ0SyPGz7OW7wTgblI273hsBqk2C1j0/xNadNLKDTUL9BukSjB7cwgmlPA==", + "node_modules/jest-changed-files/node_modules/yocto-queue": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", + "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", "dev": true, "license": "MIT", - "dependencies": { - "chownr": "^1.1.1", - "mkdirp-classic": "^0.5.2", - "pump": "^3.0.0", - "tar-stream": "^2.0.0" + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/doctrine": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", - "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==", + "node_modules/jest-circus": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-circus/-/jest-circus-29.7.0.tgz", + "integrity": "sha512-3E1nCMgipcTkCocFwM90XXQab9bS+GMsjdpmPrlelaxwD93Ad8iVEjX/vvHPdLPnFf+L40u+5+iutRdA1N9myw==", "dev": true, - "license": "Apache-2.0", + "license": "MIT", "dependencies": { - "esutils": "^2.0.2" + "@jest/environment": "^29.7.0", + "@jest/expect": "^29.7.0", + "@jest/test-result": "^29.7.0", + "@jest/types": "^29.6.3", + "@types/node": "*", + "chalk": "^4.0.0", + "co": "^4.6.0", + "dedent": "^1.0.0", + "is-generator-fn": "^2.0.0", + "jest-each": "^29.7.0", + "jest-matcher-utils": "^29.7.0", + "jest-message-util": "^29.7.0", + "jest-runtime": "^29.7.0", + "jest-snapshot": "^29.7.0", + "jest-util": "^29.7.0", + "p-limit": "^3.1.0", + "pretty-format": "^29.7.0", + "pure-rand": "^6.0.0", + "slash": "^3.0.0", + "stack-utils": "^2.0.3" }, "engines": { - "node": ">=6.0.0" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/dom-accessibility-api": { - "version": "0.6.3", - "resolved": "https://registry.npmjs.org/dom-accessibility-api/-/dom-accessibility-api-0.6.3.tgz", - "integrity": "sha512-7ZgogeTnjuHbo+ct10G9Ffp0mif17idi0IyWNVA/wcwcm7NPOD/WEHVP3n7n3MhXqxoIYm8d6MuZohYWIZ4T3w==", + "node_modules/jest-circus/node_modules/p-limit": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", + "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", "dev": true, - "license": "MIT" - }, - "node_modules/dom-helpers": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/dom-helpers/-/dom-helpers-5.2.1.tgz", - "integrity": "sha512-nRCa7CK3VTrM2NmGkIy4cbK7IZlgBE/PYMn55rrXefr5xXDP0LdtfPnblFDoVdcAfslJ7or6iqAUnx0CCGIWQA==", "license": "MIT", "dependencies": { - "@babel/runtime": "^7.8.7", - "csstype": "^3.0.2" + "yocto-queue": "^0.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/domain-browser": { - "version": "4.22.0", - "resolved": "https://registry.npmjs.org/domain-browser/-/domain-browser-4.22.0.tgz", - "integrity": "sha512-IGBwjF7tNk3cwypFNH/7bfzBcgSCbaMOD3GsaY1AU/JRrnHnYgEM0+9kQt52iZxjNsjBtJYtao146V+f8jFZNw==", + "node_modules/jest-circus/node_modules/yocto-queue": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", + "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", "dev": true, "license": "MIT", "engines": { "node": ">=10" }, "funding": { - "url": "https://bevry.me/fund" + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/domexception": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/domexception/-/domexception-4.0.0.tgz", - "integrity": "sha512-A2is4PLG+eeSfoTMA95/s4pvAoSo2mKtiM5jlHkAVewmiO8ISFTFKZjH7UAM1Atli/OT/7JHOrJRJiMKUZKYBw==", - "deprecated": "Use your platform's native DOMException instead", + "node_modules/jest-cli": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-cli/-/jest-cli-29.7.0.tgz", + "integrity": "sha512-OVVobw2IubN/GSYsxETi+gOe7Ka59EFMR/twOU3Jb2GnKKeMGJB5SGUUrEz3SFVmJASUdZUzy83sLNNQ2gZslg==", "dev": true, "license": "MIT", "dependencies": { - "webidl-conversions": "^7.0.0" + "@jest/core": "^29.7.0", + "@jest/test-result": "^29.7.0", + "@jest/types": "^29.6.3", + "chalk": "^4.0.0", + "create-jest": "^29.7.0", + "exit": "^0.1.2", + "import-local": "^3.0.2", + "jest-config": "^29.7.0", + "jest-util": "^29.7.0", + "jest-validate": "^29.7.0", + "yargs": "^17.3.1" + }, + "bin": { + "jest": "bin/jest.js" }, "engines": { - "node": ">=12" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + }, + "peerDependencies": { + "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0" + }, + "peerDependenciesMeta": { + "node-notifier": { + "optional": true + } } }, - "node_modules/dot-prop": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/dot-prop/-/dot-prop-5.3.0.tgz", - "integrity": "sha512-QM8q3zDe58hqUqjraQOmzZ1LIH9SWQJTlEKCH4kJ2oQvLZk7RbQXvtDM2XEq3fwkV9CCvvH4LA0AV+ogFsBM2Q==", + "node_modules/jest-config": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-config/-/jest-config-29.7.0.tgz", + "integrity": "sha512-uXbpfeQ7R6TZBqI3/TxCU4q4ttk3u0PJeC+E0zbfSoSjq6bJ7buBPxzQPL0ifrkY4DNu4JUdk0ImlBUYi840eQ==", "dev": true, "license": "MIT", "dependencies": { - "is-obj": "^2.0.0" + "@babel/core": "^7.11.6", + "@jest/test-sequencer": "^29.7.0", + "@jest/types": "^29.6.3", + "babel-jest": "^29.7.0", + "chalk": "^4.0.0", + "ci-info": "^3.2.0", + "deepmerge": "^4.2.2", + "glob": "^7.1.3", + "graceful-fs": "^4.2.9", + "jest-circus": "^29.7.0", + "jest-environment-node": "^29.7.0", + "jest-get-type": "^29.6.3", + "jest-regex-util": "^29.6.3", + "jest-resolve": "^29.7.0", + "jest-runner": "^29.7.0", + "jest-util": "^29.7.0", + "jest-validate": "^29.7.0", + "micromatch": "^4.0.4", + "parse-json": "^5.2.0", + "pretty-format": "^29.7.0", + "slash": "^3.0.0", + "strip-json-comments": "^3.1.1" }, "engines": { - "node": ">=8" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + }, + "peerDependencies": { + "@types/node": "*", + "ts-node": ">=9.0.0" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + }, + "ts-node": { + "optional": true + } } }, - "node_modules/dotenv": { - "version": "16.6.1", - "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-16.6.1.tgz", - "integrity": "sha512-uBq4egWHTcTt33a72vpSG0z3HnPuIl6NqYcTrKEg2azoEyl2hpW0zqlxysq2pK9HlDIHyHyakeYaYnSAwd8bow==", - "license": "BSD-2-Clause", + "node_modules/jest-config/node_modules/glob": { + "version": "7.2.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", + "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", + "deprecated": "Glob versions prior to v9 are no longer supported", + "dev": true, + "license": "ISC", + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.1.1", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, "engines": { - "node": ">=12" + "node": "*" }, "funding": { - "url": "https://dotenvx.com" + "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/dotenv-expand": { - "version": "10.0.0", - "resolved": "https://registry.npmjs.org/dotenv-expand/-/dotenv-expand-10.0.0.tgz", - "integrity": "sha512-GopVGCpVS1UKH75VKHGuQFqS1Gusej0z4FyQkPdwjil2gNIv+LNsqBlboOzpJFZKVT95GkCyWJbBSdFEFUWI2A==", - "license": "BSD-2-Clause", + "node_modules/jest-diff": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-29.7.0.tgz", + "integrity": "sha512-LMIgiIrhigmPrs03JHpxUh2yISK3vLFPkAodPeo0+BuF7wA2FoQbkEg1u8gBYBThncu7e1oEDUfIXVuTqLRUjw==", + "dev": true, + "license": "MIT", + "dependencies": { + "chalk": "^4.0.0", + "diff-sequences": "^29.6.3", + "jest-get-type": "^29.6.3", + "pretty-format": "^29.7.0" + }, "engines": { - "node": ">=12" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/dpdm": { - "version": "3.14.0", - "resolved": "https://registry.npmjs.org/dpdm/-/dpdm-3.14.0.tgz", - "integrity": "sha512-YJzsFSyEtj88q5eTELg3UWU7TVZkG1dpbF4JDQ3t1b07xuzXmdoGeSz9TKOke1mUuOpWlk4q+pBh+aHzD6GBTg==", + "node_modules/jest-docblock": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-docblock/-/jest-docblock-29.7.0.tgz", + "integrity": "sha512-q617Auw3A612guyaFgsbFeYpNP5t2aoUNLwBUbc/0kD1R4t9ixDbyFTHd1nok4epoVFpr7PmeWHrhvuV3XaJ4g==", + "dev": true, "license": "MIT", "dependencies": { - "chalk": "^4.1.2", - "fs-extra": "^11.1.1", - "glob": "^10.3.4", - "ora": "^5.4.1", - "tslib": "^2.6.2", - "typescript": "^5.2.2", - "yargs": "^17.7.2" + "detect-newline": "^3.0.0" }, - "bin": { - "dpdm": "lib/bin/dpdm.js" + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/dpdm/node_modules/bl": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/bl/-/bl-4.1.0.tgz", - "integrity": "sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==", + "node_modules/jest-each": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-each/-/jest-each-29.7.0.tgz", + "integrity": "sha512-gns+Er14+ZrEoC5fhOfYCY1LOHHr0TI+rQUHZS8Ttw2l7gl+80eHc/gFf2Ktkw0+SIACDTeWvpFcv3B04VembQ==", + "dev": true, "license": "MIT", "dependencies": { - "buffer": "^5.5.0", - "inherits": "^2.0.4", - "readable-stream": "^3.4.0" + "@jest/types": "^29.6.3", + "chalk": "^4.0.0", + "jest-get-type": "^29.6.3", + "jest-util": "^29.7.0", + "pretty-format": "^29.7.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/dpdm/node_modules/brace-expansion": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.2.tgz", - "integrity": "sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==", + "node_modules/jest-environment-jsdom": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-environment-jsdom/-/jest-environment-jsdom-29.7.0.tgz", + "integrity": "sha512-k9iQbsf9OyOfdzWH8HDmrRT0gSIcX+FLNW7IQq94tFX0gynPwqDTW0Ho6iMVNjGz/nb+l/vW3dWM2bbLLpkbXA==", + "dev": true, "license": "MIT", "dependencies": { - "balanced-match": "^1.0.0" + "@jest/environment": "^29.7.0", + "@jest/fake-timers": "^29.7.0", + "@jest/types": "^29.6.3", + "@types/jsdom": "^20.0.0", + "@types/node": "*", + "jest-mock": "^29.7.0", + "jest-util": "^29.7.0", + "jsdom": "^20.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + }, + "peerDependencies": { + "canvas": "^2.5.0" + }, + "peerDependenciesMeta": { + "canvas": { + "optional": true + } } }, - "node_modules/dpdm/node_modules/buffer": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", - "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], + "node_modules/jest-environment-jsdom/node_modules/cssstyle": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/cssstyle/-/cssstyle-2.3.0.tgz", + "integrity": "sha512-AZL67abkUzIuvcHqk7c09cezpGNcxUxU4Ioi/05xHk4DQeTkWmGYftIE6ctU6AEt+Gn4n1lDStOtj7FKycP71A==", + "dev": true, "license": "MIT", "dependencies": { - "base64-js": "^1.3.1", - "ieee754": "^1.1.13" + "cssom": "~0.3.6" + }, + "engines": { + "node": ">=8" } }, - "node_modules/dpdm/node_modules/fs-extra": { - "version": "11.3.2", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-11.3.2.tgz", - "integrity": "sha512-Xr9F6z6up6Ws+NjzMCZc6WXg2YFRlrLP9NQDO3VQrWrfiojdhS56TzueT88ze0uBdCTwEIhQ3ptnmKeWGFAe0A==", + "node_modules/jest-environment-jsdom/node_modules/cssstyle/node_modules/cssom": { + "version": "0.3.8", + "resolved": "https://registry.npmjs.org/cssom/-/cssom-0.3.8.tgz", + "integrity": "sha512-b0tGHbfegbhPJpxpiBPU2sCkigAqtM9O121le6bbOlgyV+NyGyCmVfJ6QW9eRjz8CpNfWEOYBIMIGRYkLwsIYg==", + "dev": true, + "license": "MIT" + }, + "node_modules/jest-environment-jsdom/node_modules/data-urls": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/data-urls/-/data-urls-3.0.2.tgz", + "integrity": "sha512-Jy/tj3ldjZJo63sVAvg6LHt2mHvl4V6AgRAmNDtLdm7faqtsx+aJG42rsyCo9JCoRVKwPFzKlIPx3DIibwSIaQ==", + "dev": true, "license": "MIT", "dependencies": { - "graceful-fs": "^4.2.0", - "jsonfile": "^6.0.1", - "universalify": "^2.0.0" + "abab": "^2.0.6", + "whatwg-mimetype": "^3.0.0", + "whatwg-url": "^11.0.0" }, "engines": { - "node": ">=14.14" + "node": ">=12" } }, - "node_modules/dpdm/node_modules/glob": { - "version": "10.4.5", - "resolved": "https://registry.npmjs.org/glob/-/glob-10.4.5.tgz", - "integrity": "sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg==", - "license": "ISC", + "node_modules/jest-environment-jsdom/node_modules/escodegen": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-2.1.0.tgz", + "integrity": "sha512-2NlIDTwUWJN0mRPQOdtQBzbUHvdGY2P1VXSyU83Q3xKxM7WHX2Ql8dKq782Q9TgQUNOLEzEYu9bzLNj1q88I5w==", + "dev": true, + "license": "BSD-2-Clause", "dependencies": { - "foreground-child": "^3.1.0", - "jackspeak": "^3.1.2", - "minimatch": "^9.0.4", - "minipass": "^7.1.2", - "package-json-from-dist": "^1.0.0", - "path-scurry": "^1.11.1" + "esprima": "^4.0.1", + "estraverse": "^5.2.0", + "esutils": "^2.0.2" }, "bin": { - "glob": "dist/esm/bin.mjs" + "escodegen": "bin/escodegen.js", + "esgenerate": "bin/esgenerate.js" }, - "funding": { - "url": "https://github.com/sponsors/isaacs" + "engines": { + "node": ">=6.0" + }, + "optionalDependencies": { + "source-map": "~0.6.1" } }, - "node_modules/dpdm/node_modules/is-interactive": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-interactive/-/is-interactive-1.0.0.tgz", - "integrity": "sha512-2HvIEKRoqS62guEC+qBjpvRubdX910WCMuJTZ+I9yvqKU2/12eSL549HMwtabb4oupdj2sMP50k+XJfB/8JE6w==", + "node_modules/jest-environment-jsdom/node_modules/html-encoding-sniffer": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/html-encoding-sniffer/-/html-encoding-sniffer-3.0.0.tgz", + "integrity": "sha512-oWv4T4yJ52iKrufjnyZPkrN0CH3QnrUqdB6In1g5Fe1mia8GmF36gnfNySxoZtxD5+NmYw1EElVXiBk93UeskA==", + "dev": true, "license": "MIT", + "dependencies": { + "whatwg-encoding": "^2.0.0" + }, "engines": { - "node": ">=8" + "node": ">=12" } }, - "node_modules/dpdm/node_modules/jackspeak": { - "version": "3.4.3", - "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-3.4.3.tgz", - "integrity": "sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw==", - "license": "BlueOak-1.0.0", + "node_modules/jest-environment-jsdom/node_modules/http-proxy-agent": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-5.0.0.tgz", + "integrity": "sha512-n2hY8YdoRE1i7r6M0w9DIw5GgZN0G25P8zLCRQ8rjXtTU3vsNFBI/vWK/UIeE6g5MUUz6avwAPXmL6Fy9D/90w==", + "dev": true, + "license": "MIT", "dependencies": { - "@isaacs/cliui": "^8.0.2" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" + "@tootallnate/once": "2", + "agent-base": "6", + "debug": "4" }, - "optionalDependencies": { - "@pkgjs/parseargs": "^0.11.0" + "engines": { + "node": ">= 6" } }, - "node_modules/dpdm/node_modules/jsonfile": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.2.0.tgz", - "integrity": "sha512-FGuPw30AdOIUTRMC2OMRtQV+jkVj2cfPqSeWXv1NEAJ1qZ5zb1X6z1mFhbfOB/iy3ssJCD+3KuZ8r8C3uVFlAg==", + "node_modules/jest-environment-jsdom/node_modules/iconv-lite": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", + "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", + "dev": true, "license": "MIT", "dependencies": { - "universalify": "^2.0.0" + "safer-buffer": ">= 2.1.2 < 3.0.0" }, - "optionalDependencies": { - "graceful-fs": "^4.1.6" + "engines": { + "node": ">=0.10.0" } }, - "node_modules/dpdm/node_modules/lru-cache": { - "version": "10.4.3", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz", - "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==", - "license": "ISC" - }, - "node_modules/dpdm/node_modules/minimatch": { - "version": "9.0.5", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", - "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", - "license": "ISC", + "node_modules/jest-environment-jsdom/node_modules/jsdom": { + "version": "20.0.3", + "resolved": "https://registry.npmjs.org/jsdom/-/jsdom-20.0.3.tgz", + "integrity": "sha512-SYhBvTh89tTfCD/CRdSOm13mOBa42iTaTyfyEWBdKcGdPxPtLFBXuHR8XHb33YNYaP+lLbmSvBTsnoesCNJEsQ==", + "dev": true, + "license": "MIT", "dependencies": { - "brace-expansion": "^2.0.1" + "abab": "^2.0.6", + "acorn": "^8.8.1", + "acorn-globals": "^7.0.0", + "cssom": "^0.5.0", + "cssstyle": "^2.3.0", + "data-urls": "^3.0.2", + "decimal.js": "^10.4.2", + "domexception": "^4.0.0", + "escodegen": "^2.0.0", + "form-data": "^4.0.0", + "html-encoding-sniffer": "^3.0.0", + "http-proxy-agent": "^5.0.0", + "https-proxy-agent": "^5.0.1", + "is-potential-custom-element-name": "^1.0.1", + "nwsapi": "^2.2.2", + "parse5": "^7.1.1", + "saxes": "^6.0.0", + "symbol-tree": "^3.2.4", + "tough-cookie": "^4.1.2", + "w3c-xmlserializer": "^4.0.0", + "webidl-conversions": "^7.0.0", + "whatwg-encoding": "^2.0.0", + "whatwg-mimetype": "^3.0.0", + "whatwg-url": "^11.0.0", + "ws": "^8.11.0", + "xml-name-validator": "^4.0.0" }, "engines": { - "node": ">=16 || 14 >=14.17" + "node": ">=14" }, - "funding": { - "url": "https://github.com/sponsors/isaacs" + "peerDependencies": { + "canvas": "^2.5.0" + }, + "peerDependenciesMeta": { + "canvas": { + "optional": true + } } }, - "node_modules/dpdm/node_modules/ora": { - "version": "5.4.1", - "resolved": "https://registry.npmjs.org/ora/-/ora-5.4.1.tgz", - "integrity": "sha512-5b6Y85tPxZZ7QytO+BQzysW31HJku27cRIlkbAXaNx+BdcVi+LlRFmVXzeF6a7JCwJpyw5c4b+YSVImQIrBpuQ==", + "node_modules/jest-environment-jsdom/node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true, + "license": "BSD-3-Clause", + "optional": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/jest-environment-jsdom/node_modules/tr46": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-3.0.0.tgz", + "integrity": "sha512-l7FvfAHlcmulp8kr+flpQZmVwtu7nfRV7NZujtN0OqES8EL4O4e0qqzL0DC5gAvx/ZC/9lk6rhcUwYvkBnBnYA==", + "dev": true, "license": "MIT", "dependencies": { - "bl": "^4.1.0", - "chalk": "^4.1.0", - "cli-cursor": "^3.1.0", - "cli-spinners": "^2.5.0", - "is-interactive": "^1.0.0", - "is-unicode-supported": "^0.1.0", - "log-symbols": "^4.1.0", - "strip-ansi": "^6.0.0", - "wcwidth": "^1.0.1" + "punycode": "^2.1.1" }, "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">=12" } }, - "node_modules/dpdm/node_modules/path-scurry": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-1.11.1.tgz", - "integrity": "sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==", - "license": "BlueOak-1.0.0", + "node_modules/jest-environment-jsdom/node_modules/w3c-xmlserializer": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/w3c-xmlserializer/-/w3c-xmlserializer-4.0.0.tgz", + "integrity": "sha512-d+BFHzbiCx6zGfz0HyQ6Rg69w9k19nviJspaj4yNscGjrHu94sVP+aRm75yEbCh+r2/yR+7q6hux9LVtbuTGBw==", + "dev": true, + "license": "MIT", "dependencies": { - "lru-cache": "^10.2.0", - "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0" + "xml-name-validator": "^4.0.0" }, "engines": { - "node": ">=16 || 14 >=14.18" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" + "node": ">=14" } }, - "node_modules/dpdm/node_modules/readable-stream": { - "version": "3.6.2", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", - "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", + "node_modules/jest-environment-jsdom/node_modules/whatwg-encoding": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/whatwg-encoding/-/whatwg-encoding-2.0.0.tgz", + "integrity": "sha512-p41ogyeMUrw3jWclHWTQg1k05DSVXPLcVxRTYsXUk+ZooOCZLcoYgPZ/HL/D/N+uQPOtcp1me1WhBEaX02mhWg==", + "dev": true, "license": "MIT", "dependencies": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" + "iconv-lite": "0.6.3" }, "engines": { - "node": ">= 6" + "node": ">=12" } }, - "node_modules/dpdm/node_modules/universalify": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.1.tgz", - "integrity": "sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==", + "node_modules/jest-environment-jsdom/node_modules/whatwg-mimetype": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/whatwg-mimetype/-/whatwg-mimetype-3.0.0.tgz", + "integrity": "sha512-nt+N2dzIutVRxARx1nghPKGv1xHikU7HKdfafKkLNLindmPU/ch3U31NOCGGA/dmPcmb1VlofO0vnKAcsm0o/Q==", + "dev": true, "license": "MIT", "engines": { - "node": ">= 10.0.0" + "node": ">=12" } }, - "node_modules/dunder-proto": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/dunder-proto/-/dunder-proto-1.0.1.tgz", - "integrity": "sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==", + "node_modules/jest-environment-jsdom/node_modules/whatwg-url": { + "version": "11.0.0", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-11.0.0.tgz", + "integrity": "sha512-RKT8HExMpoYx4igMiVMY83lN6UeITKJlBQ+vR/8ZJ8OCdSiN3RwCq+9gH0+Xzj0+5IrM6i4j/6LuvzbZIQgEcQ==", + "dev": true, "license": "MIT", "dependencies": { - "call-bind-apply-helpers": "^1.0.1", - "es-errors": "^1.3.0", - "gopd": "^1.2.0" + "tr46": "^3.0.0", + "webidl-conversions": "^7.0.0" }, "engines": { - "node": ">= 0.4" + "node": ">=12" } }, - "node_modules/duplexify": { - "version": "4.1.3", - "resolved": "https://registry.npmjs.org/duplexify/-/duplexify-4.1.3.tgz", - "integrity": "sha512-M3BmBhwJRZsSx38lZyhE53Csddgzl5R7xGJNk7CVddZD6CcmwMCH8J+7AprIrQKH7TonKxaCjcv27Qmf+sQ+oA==", - "license": "MIT", - "dependencies": { - "end-of-stream": "^1.4.1", - "inherits": "^2.0.3", - "readable-stream": "^3.1.1", - "stream-shift": "^1.0.2" + "node_modules/jest-environment-jsdom/node_modules/xml-name-validator": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/xml-name-validator/-/xml-name-validator-4.0.0.tgz", + "integrity": "sha512-ICP2e+jsHvAj2E2lIHxa5tjXRlKDJo4IdvPvCXbXQGdzSfmSpNVyIKMvoZHjDY9DP0zV17iI85o90vRFXNccRw==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=12" } }, - "node_modules/duplexify/node_modules/readable-stream": { - "version": "3.6.2", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", - "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", + "node_modules/jest-environment-node": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-environment-node/-/jest-environment-node-29.7.0.tgz", + "integrity": "sha512-DOSwCRqXirTOyheM+4d5YZOrWcdu0LNZ87ewUoywbcb2XR4wKgqiG8vNeYwhjFMbEkfju7wx2GYH0P2gevGvFw==", "license": "MIT", "dependencies": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" + "@jest/environment": "^29.7.0", + "@jest/fake-timers": "^29.7.0", + "@jest/types": "^29.6.3", + "@types/node": "*", + "jest-mock": "^29.7.0", + "jest-util": "^29.7.0" }, "engines": { - "node": ">= 6" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/eastasianwidth": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz", - "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==", - "license": "MIT" + "node_modules/jest-get-type": { + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-29.6.3.tgz", + "integrity": "sha512-zrteXnqYxfQh7l5FHyL38jL39di8H8rHoecLH3JNxH3BwOrBsNeabdap5e0I23lD4HHI8W5VFBZqG4Eaq5LNcw==", + "license": "MIT", + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } }, - "node_modules/ecdsa-sig-formatter": { - "version": "1.0.11", - "resolved": "https://registry.npmjs.org/ecdsa-sig-formatter/-/ecdsa-sig-formatter-1.0.11.tgz", - "integrity": "sha512-nagl3RYrbNv6kQkeJIpt6NJZy8twLB/2vtz6yN9Z4vRKHN4/QZJIEbqohALSgwKdnksuY3k5Addp5lg8sVoVcQ==", - "license": "Apache-2.0", + "node_modules/jest-haste-map": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-29.7.0.tgz", + "integrity": "sha512-fP8u2pyfqx0K1rGn1R9pyE0/KTn+G7PxktWidOBTqFPLYX0b9ksaMFkhK5vrS3DVun09pckLdlx90QthlW7AmA==", + "license": "MIT", "dependencies": { - "safe-buffer": "^5.0.1" + "@jest/types": "^29.6.3", + "@types/graceful-fs": "^4.1.3", + "@types/node": "*", + "anymatch": "^3.0.3", + "fb-watchman": "^2.0.0", + "graceful-fs": "^4.2.9", + "jest-regex-util": "^29.6.3", + "jest-util": "^29.7.0", + "jest-worker": "^29.7.0", + "micromatch": "^4.0.4", + "walker": "^1.0.8" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + }, + "optionalDependencies": { + "fsevents": "^2.3.2" } }, - "node_modules/echarts": { - "version": "5.6.0", - "resolved": "https://registry.npmjs.org/echarts/-/echarts-5.6.0.tgz", - "integrity": "sha512-oTbVTsXfKuEhxftHqL5xprgLoc0k7uScAwtryCgWF6hPYFLRwOUHiFmHGCBKP5NPFNkDVopOieyUqYGH8Fa3kA==", - "license": "Apache-2.0", + "node_modules/jest-leak-detector": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-leak-detector/-/jest-leak-detector-29.7.0.tgz", + "integrity": "sha512-kYA8IJcSYtST2BY9I+SMC32nDpBT3J2NvWJx8+JCuCdl/CR1I4EKUJROiP8XtCcxqgTTBGJNdbB1A8XRKbTetw==", + "dev": true, + "license": "MIT", "dependencies": { - "tslib": "2.3.0", - "zrender": "5.6.1" + "jest-get-type": "^29.6.3", + "pretty-format": "^29.7.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/echarts-for-react": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/echarts-for-react/-/echarts-for-react-3.0.2.tgz", - "integrity": "sha512-DRwIiTzx8JfwPOVgGttDytBqdp5VzCSyMRIxubgU/g2n9y3VLUmF2FK7Icmg/sNVkv4+rktmrLN9w22U2yy3fA==", + "node_modules/jest-matcher-utils": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-29.7.0.tgz", + "integrity": "sha512-sBkD+Xi9DtcChsI3L3u0+N0opgPYnCRPtGcQYrgXmR+hmt/fYfWAL0xRXYU8eWOdfuLgBe0YCW3AFtnRLagq/g==", + "dev": true, "license": "MIT", "dependencies": { - "fast-deep-equal": "^3.1.3", - "size-sensor": "^1.0.1" + "chalk": "^4.0.0", + "jest-diff": "^29.7.0", + "jest-get-type": "^29.6.3", + "pretty-format": "^29.7.0" }, - "peerDependencies": { - "echarts": "^3.0.0 || ^4.0.0 || ^5.0.0", - "react": "^15.0.0 || >=16.0.0" + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/echarts/node_modules/tslib": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.3.0.tgz", - "integrity": "sha512-N82ooyxVNm6h1riLCoyS9e3fuJ3AMG2zIZs2Gd1ATcSFjSA23Q0fzjjZeh0jbJvWVDZ0cJT8yaNNaaXHzueNjg==", - "license": "0BSD" - }, - "node_modules/ee-first": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", - "integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==", - "license": "MIT" - }, - "node_modules/efate": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/efate/-/efate-1.5.1.tgz", - "integrity": "sha512-lkq5XDCBNcZElE09T5NX8H+ViF5tZPLu98Wog//xj69Y9k9gguoImEc5APFfSudH/eWfFUZKIjmK2ZNF16r3kg==", + "node_modules/jest-message-util": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-29.7.0.tgz", + "integrity": "sha512-GBEV4GRADeP+qtB2+6u61stea8mGcOT4mCtrYISZwfu9/ISHFJ/5zOMXYbpBE9RsS5+Gb63DW4FgmnKJ79Kf6w==", "license": "MIT", "dependencies": { - "debug": "^4.1.1", - "lodash.merge": "^4.6.2", - "lodash.mergewith": "^4.6.2" + "@babel/code-frame": "^7.12.13", + "@jest/types": "^29.6.3", + "@types/stack-utils": "^2.0.0", + "chalk": "^4.0.0", + "graceful-fs": "^4.2.9", + "micromatch": "^4.0.4", + "pretty-format": "^29.7.0", + "slash": "^3.0.0", + "stack-utils": "^2.0.3" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/electron-to-chromium": { - "version": "1.5.228", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.228.tgz", - "integrity": "sha512-nxkiyuqAn4MJ1QbobwqJILiDtu/jk14hEAWaMiJmNPh1Z+jqoFlBFZjdXwLWGeVSeu9hGLg6+2G9yJaW8rBIFA==", - "license": "ISC" - }, - "node_modules/elliptic": { - "version": "6.6.1", - "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.6.1.tgz", - "integrity": "sha512-RaddvvMatK2LJHqFJ+YA4WysVN5Ita9E35botqIYspQ4TkRAlCicdzKOjlyv/1Za5RyTNn7di//eEV0uTAfe3g==", + "node_modules/jest-mock": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-mock/-/jest-mock-29.7.0.tgz", + "integrity": "sha512-ITOMZn+UkYS4ZFh83xYAOzWStloNzJFO2s8DWrE4lhtGD+AorgnbkiKERe4wQVBydIGPx059g6riW5Btp6Llnw==", "license": "MIT", "dependencies": { - "bn.js": "^4.11.9", - "brorand": "^1.1.0", - "hash.js": "^1.0.0", - "hmac-drbg": "^1.0.1", - "inherits": "^2.0.4", - "minimalistic-assert": "^1.0.1", - "minimalistic-crypto-utils": "^1.0.1" + "@jest/types": "^29.6.3", + "@types/node": "*", + "jest-util": "^29.7.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/elliptic/node_modules/bn.js": { - "version": "4.12.2", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.2.tgz", - "integrity": "sha512-n4DSx829VRTRByMRGdjQ9iqsN0Bh4OolPsFnaZBLcbi8iXcB+kJ9s7EnRt4wILZNV3kPLHkRVfOc/HvhC3ovDw==", - "license": "MIT" - }, - "node_modules/emittery": { - "version": "0.13.1", - "resolved": "https://registry.npmjs.org/emittery/-/emittery-0.13.1.tgz", - "integrity": "sha512-DeWwawk6r5yR9jFgnDKYt4sLS0LmHJJi3ZOnb5/JdbYwj3nW+FxQnHIjhBKz8YLC7oRNPVM9NQ47I3CVx34eqQ==", + "node_modules/jest-pnp-resolver": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/jest-pnp-resolver/-/jest-pnp-resolver-1.2.3.tgz", + "integrity": "sha512-+3NpwQEnRoIBtx4fyhblQDPgJI0H1IEIkX7ShLUjPGA7TtUTvI1oiKi3SR4oBR0hQhQR80l4WAe5RrXBwWMA8w==", "dev": true, "license": "MIT", "engines": { - "node": ">=12" + "node": ">=6" }, - "funding": { - "url": "https://github.com/sindresorhus/emittery?sponsor=1" + "peerDependencies": { + "jest-resolve": "*" + }, + "peerDependenciesMeta": { + "jest-resolve": { + "optional": true + } } }, - "node_modules/emoji-regex": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", - "license": "MIT" - }, - "node_modules/enabled": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/enabled/-/enabled-2.0.0.tgz", - "integrity": "sha512-AKrN98kuwOzMIdAizXGI86UFBoo26CL21UM763y1h/GMSJ4/OHU9k2YlsmBpyScFo/wbLzWQJBMCW4+IO3/+OQ==", - "license": "MIT" - }, - "node_modules/encode-utf8": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/encode-utf8/-/encode-utf8-1.0.3.tgz", - "integrity": "sha512-ucAnuBEhUK4boH2HjVYG5Q2mQyPorvv0u/ocS+zhdw0S8AlHYY+GOFhP1Gio5z4icpP2ivFSvhtFjQi8+T9ppw==", - "license": "MIT" + "node_modules/jest-regex-util": { + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-29.6.3.tgz", + "integrity": "sha512-KJJBsRCyyLNWCNBOvZyRDnAIfUiRJ8v+hOBQYGn8gDyF3UegwiP4gwRR3/SDa42g1YbVycTidUF3rKjyLFDWbg==", + "license": "MIT", + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } }, - "node_modules/encodeurl": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-2.0.0.tgz", - "integrity": "sha512-Q0n9HRi4m6JuGIV1eFlmvJB7ZEVxu93IrMyiMsGC0lrMJMWzRgx6WGquyfQgZVb31vhGgXnfmPNNXmxnOkRBrg==", + "node_modules/jest-resolve": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-resolve/-/jest-resolve-29.7.0.tgz", + "integrity": "sha512-IOVhZSrg+UvVAshDSDtHyFCCBUl/Q3AAJv8iZ6ZjnZ74xzvwuzLXid9IIIPgTnY62SJjfuupMKZsZQRsCvxEgA==", + "dev": true, "license": "MIT", - "peer": true, + "dependencies": { + "chalk": "^4.0.0", + "graceful-fs": "^4.2.9", + "jest-haste-map": "^29.7.0", + "jest-pnp-resolver": "^1.2.2", + "jest-util": "^29.7.0", + "jest-validate": "^29.7.0", + "resolve": "^1.20.0", + "resolve.exports": "^2.0.0", + "slash": "^3.0.0" + }, "engines": { - "node": ">= 0.8" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/end-of-stream": { - "version": "1.4.5", - "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.5.tgz", - "integrity": "sha512-ooEGc6HP26xXq/N+GCGOT0JKCLDGrq2bQUZrQ7gyrJiZANJ/8YDTxTpQBXGMn+WbIQXNVpyWymm7KYVICQnyOg==", + "node_modules/jest-resolve-dependencies": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-resolve-dependencies/-/jest-resolve-dependencies-29.7.0.tgz", + "integrity": "sha512-un0zD/6qxJ+S0et7WxeI3H5XSe9lTBBR7bOHCHXkKR6luG5mwDDlIzVQ0V5cZCuoTgEdcdwzTghYkTWfubi+nA==", + "dev": true, "license": "MIT", "dependencies": { - "once": "^1.4.0" + "jest-regex-util": "^29.6.3", + "jest-snapshot": "^29.7.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/enhanced-resolve": { - "version": "5.18.3", - "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.18.3.tgz", - "integrity": "sha512-d4lC8xfavMeBjzGr2vECC3fsGXziXZQyJxD868h2M/mBI3PwAuODxAkLkq5HYuvrPYcUtiLzsTo8U3PgX3Ocww==", + "node_modules/jest-runner": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-runner/-/jest-runner-29.7.0.tgz", + "integrity": "sha512-fsc4N6cPCAahybGBfTRcq5wFR6fpLznMg47sY5aDpsoejOcVYFb07AHuSnR0liMcPTgBsA3ZJL6kFOjPdoNipQ==", + "dev": true, "license": "MIT", "dependencies": { - "graceful-fs": "^4.2.4", - "tapable": "^2.2.0" + "@jest/console": "^29.7.0", + "@jest/environment": "^29.7.0", + "@jest/test-result": "^29.7.0", + "@jest/transform": "^29.7.0", + "@jest/types": "^29.6.3", + "@types/node": "*", + "chalk": "^4.0.0", + "emittery": "^0.13.1", + "graceful-fs": "^4.2.9", + "jest-docblock": "^29.7.0", + "jest-environment-node": "^29.7.0", + "jest-haste-map": "^29.7.0", + "jest-leak-detector": "^29.7.0", + "jest-message-util": "^29.7.0", + "jest-resolve": "^29.7.0", + "jest-runtime": "^29.7.0", + "jest-util": "^29.7.0", + "jest-watcher": "^29.7.0", + "jest-worker": "^29.7.0", + "p-limit": "^3.1.0", + "source-map-support": "0.5.13" }, "engines": { - "node": ">=10.13.0" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/enquirer": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/enquirer/-/enquirer-2.4.1.tgz", - "integrity": "sha512-rRqJg/6gd538VHvR3PSrdRBb/1Vy2YfzHqzvbhGIQpDRKIa4FgV/54b5Q1xYSxOOwKvjXweS26E0Q+nAMwp2pQ==", + "node_modules/jest-runner/node_modules/p-limit": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", + "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", "dev": true, "license": "MIT", "dependencies": { - "ansi-colors": "^4.1.1", - "strip-ansi": "^6.0.1" + "yocto-queue": "^0.1.0" }, "engines": { - "node": ">=8.6" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/entities": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/entities/-/entities-6.0.1.tgz", - "integrity": "sha512-aN97NXWF6AWBTahfVOIrB/NShkzi5H7F9r1s9mD3cDj4Ko5f2qhhVoYMibXF7GlLveb/D2ioWay8lxI97Ven3g==", + "node_modules/jest-runner/node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", "dev": true, - "license": "BSD-2-Clause", + "license": "BSD-3-Clause", "engines": { - "node": ">=0.12" - }, - "funding": { - "url": "https://github.com/fb55/entities?sponsor=1" + "node": ">=0.10.0" } }, - "node_modules/env-paths": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/env-paths/-/env-paths-2.2.1.tgz", - "integrity": "sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A==", + "node_modules/jest-runner/node_modules/source-map-support": { + "version": "0.5.13", + "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.13.tgz", + "integrity": "sha512-SHSKFHadjVA5oR4PPqhtAVdcBWwRYVd6g6cAXnIbRiIwc2EhPrTuKUBdSLvlEKyIP3GCf89fltvcZiP9MMFA1w==", "dev": true, "license": "MIT", - "engines": { - "node": ">=6" + "dependencies": { + "buffer-from": "^1.0.0", + "source-map": "^0.6.0" } }, - "node_modules/environment": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/environment/-/environment-1.1.0.tgz", - "integrity": "sha512-xUtoPkMggbz0MPyPiIWr1Kp4aeWJjDZ6SMvURhimjdZgsRuDplF5/s9hcgGhyXMhs+6vpnuoiZ2kFiu3FMnS8Q==", + "node_modules/jest-runner/node_modules/yocto-queue": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", + "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", "dev": true, "license": "MIT", "engines": { - "node": ">=18" + "node": ">=10" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/error-ex": { - "version": "1.3.4", - "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.4.tgz", - "integrity": "sha512-sqQamAnR14VgCr1A618A3sGrygcpK+HEbenA/HiEAkkUwcZIIB/tgWqHFxWgOyDh4nB4JCRimh79dR5Ywc9MDQ==", + "node_modules/jest-runtime": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-runtime/-/jest-runtime-29.7.0.tgz", + "integrity": "sha512-gUnLjgwdGqW7B4LvOIkbKs9WGbn+QLqRQQ9juC6HndeDiezIwhDP+mhMwHWCEcfQ5RUXa6OPnFF8BJh5xegwwQ==", + "dev": true, "license": "MIT", "dependencies": { - "is-arrayish": "^0.2.1" + "@jest/environment": "^29.7.0", + "@jest/fake-timers": "^29.7.0", + "@jest/globals": "^29.7.0", + "@jest/source-map": "^29.6.3", + "@jest/test-result": "^29.7.0", + "@jest/transform": "^29.7.0", + "@jest/types": "^29.6.3", + "@types/node": "*", + "chalk": "^4.0.0", + "cjs-module-lexer": "^1.0.0", + "collect-v8-coverage": "^1.0.0", + "glob": "^7.1.3", + "graceful-fs": "^4.2.9", + "jest-haste-map": "^29.7.0", + "jest-message-util": "^29.7.0", + "jest-mock": "^29.7.0", + "jest-regex-util": "^29.6.3", + "jest-resolve": "^29.7.0", + "jest-snapshot": "^29.7.0", + "jest-util": "^29.7.0", + "slash": "^3.0.0", + "strip-bom": "^4.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/error-stack-parser": { - "version": "2.1.4", - "resolved": "https://registry.npmjs.org/error-stack-parser/-/error-stack-parser-2.1.4.tgz", - "integrity": "sha512-Sk5V6wVazPhq5MhpO+AUxJn5x7XSXGl1R93Vn7i+zS15KDVxQijejNCrz8340/2bgLBjR9GtEG8ZVKONDjcqGQ==", - "license": "MIT", - "peer": true, + "node_modules/jest-runtime/node_modules/glob": { + "version": "7.2.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", + "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", + "deprecated": "Glob versions prior to v9 are no longer supported", + "dev": true, + "license": "ISC", "dependencies": { - "stackframe": "^1.3.4" + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.1.1", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/es-abstract": { - "version": "1.24.0", - "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.24.0.tgz", - "integrity": "sha512-WSzPgsdLtTcQwm4CROfS5ju2Wa1QQcVeT37jFjYzdFz1r9ahadC8B8/a4qxJxM+09F18iumCdRmlr96ZYkQvEg==", + "node_modules/jest-snapshot": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-snapshot/-/jest-snapshot-29.7.0.tgz", + "integrity": "sha512-Rm0BMWtxBcioHr1/OX5YCP8Uov4riHvKPknOGs804Zg9JGZgmIBkbtlxJC/7Z4msKYVbIJtfU+tKb8xlYNfdkw==", "dev": true, "license": "MIT", "dependencies": { - "array-buffer-byte-length": "^1.0.2", - "arraybuffer.prototype.slice": "^1.0.4", - "available-typed-arrays": "^1.0.7", - "call-bind": "^1.0.8", - "call-bound": "^1.0.4", - "data-view-buffer": "^1.0.2", - "data-view-byte-length": "^1.0.2", - "data-view-byte-offset": "^1.0.1", - "es-define-property": "^1.0.1", - "es-errors": "^1.3.0", - "es-object-atoms": "^1.1.1", - "es-set-tostringtag": "^2.1.0", - "es-to-primitive": "^1.3.0", - "function.prototype.name": "^1.1.8", - "get-intrinsic": "^1.3.0", - "get-proto": "^1.0.1", - "get-symbol-description": "^1.1.0", - "globalthis": "^1.0.4", - "gopd": "^1.2.0", - "has-property-descriptors": "^1.0.2", - "has-proto": "^1.2.0", - "has-symbols": "^1.1.0", - "hasown": "^2.0.2", - "internal-slot": "^1.1.0", - "is-array-buffer": "^3.0.5", - "is-callable": "^1.2.7", - "is-data-view": "^1.0.2", - "is-negative-zero": "^2.0.3", - "is-regex": "^1.2.1", - "is-set": "^2.0.3", - "is-shared-array-buffer": "^1.0.4", - "is-string": "^1.1.1", - "is-typed-array": "^1.1.15", - "is-weakref": "^1.1.1", - "math-intrinsics": "^1.1.0", - "object-inspect": "^1.13.4", - "object-keys": "^1.1.1", - "object.assign": "^4.1.7", - "own-keys": "^1.0.1", - "regexp.prototype.flags": "^1.5.4", - "safe-array-concat": "^1.1.3", - "safe-push-apply": "^1.0.0", - "safe-regex-test": "^1.1.0", - "set-proto": "^1.0.0", - "stop-iteration-iterator": "^1.1.0", - "string.prototype.trim": "^1.2.10", - "string.prototype.trimend": "^1.0.9", - "string.prototype.trimstart": "^1.0.8", - "typed-array-buffer": "^1.0.3", - "typed-array-byte-length": "^1.0.3", - "typed-array-byte-offset": "^1.0.4", - "typed-array-length": "^1.0.7", - "unbox-primitive": "^1.1.0", - "which-typed-array": "^1.1.19" + "@babel/core": "^7.11.6", + "@babel/generator": "^7.7.2", + "@babel/plugin-syntax-jsx": "^7.7.2", + "@babel/plugin-syntax-typescript": "^7.7.2", + "@babel/types": "^7.3.3", + "@jest/expect-utils": "^29.7.0", + "@jest/transform": "^29.7.0", + "@jest/types": "^29.6.3", + "babel-preset-current-node-syntax": "^1.0.0", + "chalk": "^4.0.0", + "expect": "^29.7.0", + "graceful-fs": "^4.2.9", + "jest-diff": "^29.7.0", + "jest-get-type": "^29.6.3", + "jest-matcher-utils": "^29.7.0", + "jest-message-util": "^29.7.0", + "jest-util": "^29.7.0", + "natural-compare": "^1.4.0", + "pretty-format": "^29.7.0", + "semver": "^7.5.3" }, "engines": { - "node": ">= 0.4" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-snapshot/node_modules/semver": { + "version": "7.7.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.2.tgz", + "integrity": "sha512-RF0Fw+rO5AMf9MAyaRXI4AV0Ulj5lMHqVxxdSgiVbixSCXoEmmX/jk0CuJw4+3SqroYO9VoUh+HcuJivvtJemA==", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver.js" }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "engines": { + "node": ">=10" } }, - "node_modules/es-define-property": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.1.tgz", - "integrity": "sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==", + "node_modules/jest-util": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-29.7.0.tgz", + "integrity": "sha512-z6EbKajIpqGKU56y5KBUgy1dt1ihhQJgWzUlZHArA/+X2ad7Cb5iF+AK1EWVL/Bo7Rz9uurpqw6SiBCefUbCGA==", "license": "MIT", + "dependencies": { + "@jest/types": "^29.6.3", + "@types/node": "*", + "chalk": "^4.0.0", + "ci-info": "^3.2.0", + "graceful-fs": "^4.2.9", + "picomatch": "^2.2.3" + }, "engines": { - "node": ">= 0.4" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/es-errors": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz", - "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==", + "node_modules/jest-util/node_modules/picomatch": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", "license": "MIT", "engines": { - "node": ">= 0.4" + "node": ">=8.6" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" } }, - "node_modules/es-get-iterator": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/es-get-iterator/-/es-get-iterator-1.1.3.tgz", - "integrity": "sha512-sPZmqHBe6JIiTfN5q2pEi//TwxmAFHwj/XEuYjTuse78i8KxaqMTTzxPoFKuzRpDpTJ+0NAbpfenkmH2rePtuw==", - "dev": true, + "node_modules/jest-validate": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-validate/-/jest-validate-29.7.0.tgz", + "integrity": "sha512-ZB7wHqaRGVw/9hST/OuFUReG7M8vKeq0/J2egIGLdvjHCmYqGARhzXmtgi+gVeZ5uXFF219aOc3Ls2yLg27tkw==", "license": "MIT", "dependencies": { - "call-bind": "^1.0.2", - "get-intrinsic": "^1.1.3", - "has-symbols": "^1.0.3", - "is-arguments": "^1.1.1", - "is-map": "^2.0.2", - "is-set": "^2.0.2", - "is-string": "^1.0.7", - "isarray": "^2.0.5", - "stop-iteration-iterator": "^1.0.0" + "@jest/types": "^29.6.3", + "camelcase": "^6.2.0", + "chalk": "^4.0.0", + "jest-get-type": "^29.6.3", + "leven": "^3.1.0", + "pretty-format": "^29.7.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-validate/node_modules/camelcase": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz", + "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==", + "license": "MIT", + "engines": { + "node": ">=10" }, "funding": { - "url": "https://github.com/sponsors/ljharb" + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/es-iterator-helpers": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/es-iterator-helpers/-/es-iterator-helpers-1.2.1.tgz", - "integrity": "sha512-uDn+FE1yrDzyC0pCo961B2IHbdM8y/ACZsKD4dG6WqrjV53BADjwa7D+1aom2rsNVfLyDgU/eigvlJGJ08OQ4w==", + "node_modules/jest-watcher": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-watcher/-/jest-watcher-29.7.0.tgz", + "integrity": "sha512-49Fg7WXkU3Vl2h6LbLtMQ/HyB6rXSIX7SqvBLQmssRBGN9I0PNvPmAmCWSOY6SOvrjhI/F7/bGAv9RtnsPA03g==", "dev": true, "license": "MIT", "dependencies": { - "call-bind": "^1.0.8", - "call-bound": "^1.0.3", - "define-properties": "^1.2.1", - "es-abstract": "^1.23.6", - "es-errors": "^1.3.0", - "es-set-tostringtag": "^2.0.3", - "function-bind": "^1.1.2", - "get-intrinsic": "^1.2.6", - "globalthis": "^1.0.4", - "gopd": "^1.2.0", - "has-property-descriptors": "^1.0.2", - "has-proto": "^1.2.0", - "has-symbols": "^1.1.0", - "internal-slot": "^1.1.0", - "iterator.prototype": "^1.1.4", - "safe-array-concat": "^1.1.3" + "@jest/test-result": "^29.7.0", + "@jest/types": "^29.6.3", + "@types/node": "*", + "ansi-escapes": "^4.2.1", + "chalk": "^4.0.0", + "emittery": "^0.13.1", + "jest-util": "^29.7.0", + "string-length": "^4.0.1" }, "engines": { - "node": ">= 0.4" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/es-module-lexer": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-1.7.0.tgz", - "integrity": "sha512-jEQoCwk8hyb2AZziIOLhDqpm5+2ww5uIE6lkO/6jcOCusfk6LhMHpXXfBLXTZ7Ydyt0j4VoUQv6uGNYbdW+kBA==", - "license": "MIT" - }, - "node_modules/es-object-atoms": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/es-object-atoms/-/es-object-atoms-1.1.1.tgz", - "integrity": "sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA==", + "node_modules/jest-worker": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-29.7.0.tgz", + "integrity": "sha512-eIz2msL/EzL9UFTFFx7jBTkeZfku0yUAyZZZmJ93H2TYEiroIx2PQjEXcwYtYl8zXCxb+PAmA2hLIt/6ZEkPHw==", "license": "MIT", "dependencies": { - "es-errors": "^1.3.0" + "@types/node": "*", + "jest-util": "^29.7.0", + "merge-stream": "^2.0.0", + "supports-color": "^8.0.0" }, "engines": { - "node": ">= 0.4" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/es-set-tostringtag": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.1.0.tgz", - "integrity": "sha512-j6vWzfrGVfyXxge+O0x5sh6cvxAog0a/4Rdd2K36zCMV5eJ+/+tOAngRO8cODMNWbVRdVlmGZQL2YS3yR8bIUA==", + "node_modules/jest-worker/node_modules/supports-color": { + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", + "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", "license": "MIT", "dependencies": { - "es-errors": "^1.3.0", - "get-intrinsic": "^1.2.6", - "has-tostringtag": "^1.0.2", - "hasown": "^2.0.2" + "has-flag": "^4.0.0" }, "engines": { - "node": ">= 0.4" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/supports-color?sponsor=1" } }, - "node_modules/es-shim-unscopables": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/es-shim-unscopables/-/es-shim-unscopables-1.1.0.tgz", - "integrity": "sha512-d9T8ucsEhh8Bi1woXCf+TIKDIROLG5WCkxg8geBCbvk22kzwC5G2OnXVMO6FUsvQlgUUXQ2itephWDLqDzbeCw==", + "node_modules/jiti": { + "version": "2.6.1", + "resolved": "https://registry.npmjs.org/jiti/-/jiti-2.6.1.tgz", + "integrity": "sha512-ekilCSN1jwRvIbgeg/57YFh8qQDNbwDb9xT/qu2DAHbFFZUicIl4ygVaAvzveMhMVr3LnpSKTNnwt8PoOfmKhQ==", "dev": true, "license": "MIT", + "bin": { + "jiti": "lib/jiti-cli.mjs" + } + }, + "node_modules/joi": { + "version": "17.12.2", + "resolved": "https://registry.npmjs.org/joi/-/joi-17.12.2.tgz", + "integrity": "sha512-RonXAIzCiHLc8ss3Ibuz45u28GOsWE1UpfDXLbN/9NKbL4tCJf8TWYVKsoYuuh+sAUt7fsSNpA+r2+TBA6Wjmw==", + "license": "BSD-3-Clause", + "peer": true, "dependencies": { - "hasown": "^2.0.2" - }, + "@hapi/hoek": "^9.3.0", + "@hapi/topo": "^5.1.0", + "@sideway/address": "^4.1.5", + "@sideway/formula": "^3.0.1", + "@sideway/pinpoint": "^2.0.0" + } + }, + "node_modules/joycon": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/joycon/-/joycon-3.1.1.tgz", + "integrity": "sha512-34wB/Y7MW7bzjKRjUKTa46I2Z7eV62Rkhva+KkopW7Qvv/OSWBqvkSY7vusOPrNuZcUG3tApvdVgNB8POj3SPw==", + "license": "MIT", "engines": { - "node": ">= 0.4" + "node": ">=10" } }, - "node_modules/es-to-primitive": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.3.0.tgz", - "integrity": "sha512-w+5mJ3GuFL+NjVtJlvydShqE1eN3h3PbI7/5LAsYJP/2qtuMXjfL2LpHSRqo4b4eSF5K/DH1JXKUAHSB2UW50g==", + "node_modules/js-base64": { + "version": "3.7.8", + "resolved": "https://registry.npmjs.org/js-base64/-/js-base64-3.7.8.tgz", + "integrity": "sha512-hNngCeKxIUQiEUN3GPJOkz4wF/YvdUdbNL9hsBcMQTkKzboD7T/q3OYOuuPZLUE6dBxSGpwhk5mwuDud7JVAow==", + "license": "BSD-3-Clause" + }, + "node_modules/js-cookie": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/js-cookie/-/js-cookie-2.2.1.tgz", + "integrity": "sha512-HvdH2LzI/EAZcUwA8+0nKNtWHqS+ZmijLA30RwZA0bo7ToCckjK5MkGhjED9KoRcXO6BaGI3I9UIzSA1FKFPOQ==", "dev": true, + "license": "MIT" + }, + "node_modules/js-sha3": { + "version": "0.8.0", + "resolved": "https://registry.npmjs.org/js-sha3/-/js-sha3-0.8.0.tgz", + "integrity": "sha512-gF1cRrHhIzNfToc802P800N8PpXS+evLLXfsVpowqmAFR9uwbi89WvXg2QspOmXL8QL86J4T1EpFu+yUkwJY3Q==", + "license": "MIT" + }, + "node_modules/js-tokens": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", + "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", + "license": "MIT" + }, + "node_modules/js-yaml": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", + "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", "license": "MIT", "dependencies": { - "is-callable": "^1.2.7", - "is-date-object": "^1.0.5", - "is-symbol": "^1.0.4" - }, - "engines": { - "node": ">= 0.4" + "argparse": "^2.0.1" }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "bin": { + "js-yaml": "bin/js-yaml.js" } }, - "node_modules/es6-promise": { - "version": "4.2.8", - "resolved": "https://registry.npmjs.org/es6-promise/-/es6-promise-4.2.8.tgz", - "integrity": "sha512-HJDGx5daxeIvxdBxvG2cb9g4tEvwIk3i8+nhX0yGrYmZUzbkdg8QbDevheDB8gd0//uPj4c1EQua8Q+MViT0/w==", - "license": "MIT" + "node_modules/jsc-safe-url": { + "version": "0.2.4", + "resolved": "https://registry.npmjs.org/jsc-safe-url/-/jsc-safe-url-0.2.4.tgz", + "integrity": "sha512-0wM3YBWtYePOjfyXQH5MWQ8H7sdk5EXSwZvmSLKk2RboVQ2Bu239jycHDz5J/8Blf3K0Qnoy2b6xD+z10MFB+Q==", + "license": "0BSD" }, - "node_modules/esbuild": { - "version": "0.25.10", - "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.25.10.tgz", - "integrity": "sha512-9RiGKvCwaqxO2owP61uQ4BgNborAQskMR6QusfWzQqv7AZOg5oGehdY2pRJMTKuwxd1IDBP4rSbI5lHzU7SMsQ==", + "node_modules/jsdom": { + "version": "24.0.0", + "resolved": "https://registry.npmjs.org/jsdom/-/jsdom-24.0.0.tgz", + "integrity": "sha512-UDS2NayCvmXSXVP6mpTj+73JnNQadZlr9N68189xib2tx5Mls7swlTNao26IoHv46BZJFvXygyRtyXd1feAk1A==", "dev": true, - "hasInstallScript": true, "license": "MIT", - "bin": { - "esbuild": "bin/esbuild" - }, - "engines": { - "node": ">=18" - }, - "optionalDependencies": { - "@esbuild/aix-ppc64": "0.25.10", - "@esbuild/android-arm": "0.25.10", - "@esbuild/android-arm64": "0.25.10", - "@esbuild/android-x64": "0.25.10", - "@esbuild/darwin-arm64": "0.25.10", - "@esbuild/darwin-x64": "0.25.10", - "@esbuild/freebsd-arm64": "0.25.10", - "@esbuild/freebsd-x64": "0.25.10", - "@esbuild/linux-arm": "0.25.10", - "@esbuild/linux-arm64": "0.25.10", - "@esbuild/linux-ia32": "0.25.10", - "@esbuild/linux-loong64": "0.25.10", - "@esbuild/linux-mips64el": "0.25.10", - "@esbuild/linux-ppc64": "0.25.10", - "@esbuild/linux-riscv64": "0.25.10", - "@esbuild/linux-s390x": "0.25.10", - "@esbuild/linux-x64": "0.25.10", - "@esbuild/netbsd-arm64": "0.25.10", - "@esbuild/netbsd-x64": "0.25.10", - "@esbuild/openbsd-arm64": "0.25.10", - "@esbuild/openbsd-x64": "0.25.10", - "@esbuild/openharmony-arm64": "0.25.10", - "@esbuild/sunos-x64": "0.25.10", - "@esbuild/win32-arm64": "0.25.10", - "@esbuild/win32-ia32": "0.25.10", - "@esbuild/win32-x64": "0.25.10" + "dependencies": { + "cssstyle": "^4.0.1", + "data-urls": "^5.0.0", + "decimal.js": "^10.4.3", + "form-data": "^4.0.0", + "html-encoding-sniffer": "^4.0.0", + "http-proxy-agent": "^7.0.0", + "https-proxy-agent": "^7.0.2", + "is-potential-custom-element-name": "^1.0.1", + "nwsapi": "^2.2.7", + "parse5": "^7.1.2", + "rrweb-cssom": "^0.6.0", + "saxes": "^6.0.0", + "symbol-tree": "^3.2.4", + "tough-cookie": "^4.1.3", + "w3c-xmlserializer": "^5.0.0", + "webidl-conversions": "^7.0.0", + "whatwg-encoding": "^3.1.1", + "whatwg-mimetype": "^4.0.0", + "whatwg-url": "^14.0.0", + "ws": "^8.16.0", + "xml-name-validator": "^5.0.0" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "canvas": "^2.11.2" + }, + "peerDependenciesMeta": { + "canvas": { + "optional": true + } } }, - "node_modules/esbuild/node_modules/@esbuild/aix-ppc64": { - "version": "0.25.10", - "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.25.10.tgz", - "integrity": "sha512-0NFWnA+7l41irNuaSVlLfgNT12caWJVLzp5eAVhZ0z1qpxbockccEt3s+149rE64VUI3Ml2zt8Nv5JVc4QXTsw==", - "cpu": [ - "ppc64" - ], + "node_modules/jsdom/node_modules/agent-base": { + "version": "7.1.4", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-7.1.4.tgz", + "integrity": "sha512-MnA+YT8fwfJPgBx3m60MNqakm30XOkyIoH1y6huTQvC0PwZG7ki8NacLBcrPbNoo8vEZy7Jpuk7+jMO+CUovTQ==", "dev": true, "license": "MIT", - "optional": true, - "os": [ - "aix" - ], "engines": { - "node": ">=18" + "node": ">= 14" } }, - "node_modules/esbuild/node_modules/@esbuild/android-arm": { - "version": "0.25.10", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.25.10.tgz", - "integrity": "sha512-dQAxF1dW1C3zpeCDc5KqIYuZ1tgAdRXNoZP7vkBIRtKZPYe2xVr/d3SkirklCHudW1B45tGiUlz2pUWDfbDD4w==", - "cpu": [ - "arm" - ], + "node_modules/jsdom/node_modules/https-proxy-agent": { + "version": "7.0.6", + "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-7.0.6.tgz", + "integrity": "sha512-vK9P5/iUfdl95AI+JVyUuIcVtd4ofvtrOr3HNtM2yxC9bnMbEdp3x01OhQNnjb8IJYi38VlTE3mBXwcfvywuSw==", "dev": true, "license": "MIT", - "optional": true, - "os": [ - "android" - ], + "dependencies": { + "agent-base": "^7.1.2", + "debug": "4" + }, "engines": { - "node": ">=18" + "node": ">= 14" } }, - "node_modules/esbuild/node_modules/@esbuild/android-arm64": { - "version": "0.25.10", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.25.10.tgz", - "integrity": "sha512-LSQa7eDahypv/VO6WKohZGPSJDq5OVOo3UoFR1E4t4Gj1W7zEQMUhI+lo81H+DtB+kP+tDgBp+M4oNCwp6kffg==", - "cpu": [ - "arm64" - ], - "dev": true, + "node_modules/jsesc": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-3.1.0.tgz", + "integrity": "sha512-/sM3dO2FOzXjKQhJuo0Q173wf2KOo8t4I8vHy6lF9poUp7bKT0/NHE8fPX23PwfhnykfqnC2xRxOnVw5XuGIaA==", "license": "MIT", - "optional": true, - "os": [ - "android" - ], + "bin": { + "jsesc": "bin/jsesc" + }, "engines": { - "node": ">=18" + "node": ">=6" } }, - "node_modules/esbuild/node_modules/@esbuild/android-x64": { - "version": "0.25.10", - "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.25.10.tgz", - "integrity": "sha512-MiC9CWdPrfhibcXwr39p9ha1x0lZJ9KaVfvzA0Wxwz9ETX4v5CHfF09bx935nHlhi+MxhA63dKRRQLiVgSUtEg==", - "cpu": [ - "x64" - ], + "node_modules/json-buffer": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz", + "integrity": "sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==", + "license": "MIT" + }, + "node_modules/json-parse-better-errors": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz", + "integrity": "sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw==", "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "android" - ], + "license": "MIT" + }, + "node_modules/json-parse-even-better-errors": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz", + "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==", + "license": "MIT" + }, + "node_modules/json-rpc-engine": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/json-rpc-engine/-/json-rpc-engine-6.1.0.tgz", + "integrity": "sha512-NEdLrtrq1jUZyfjkr9OCz9EzCNhnRyWtt1PAnvnhwy6e8XETS0Dtc+ZNCO2gvuAoKsIn2+vCSowXTYE4CkgnAQ==", + "license": "ISC", + "dependencies": { + "@metamask/safe-event-emitter": "^2.0.0", + "eth-rpc-errors": "^4.0.2" + }, "engines": { - "node": ">=18" + "node": ">=10.0.0" } }, - "node_modules/esbuild/node_modules/@esbuild/darwin-arm64": { - "version": "0.25.10", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.25.10.tgz", - "integrity": "sha512-JC74bdXcQEpW9KkV326WpZZjLguSZ3DfS8wrrvPMHgQOIEIG/sPXEN/V8IssoJhbefLRcRqw6RQH2NnpdprtMA==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "darwin" - ], + "node_modules/json-rpc-engine/node_modules/@metamask/safe-event-emitter": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@metamask/safe-event-emitter/-/safe-event-emitter-2.0.0.tgz", + "integrity": "sha512-/kSXhY692qiV1MXu6EeOZvg5nECLclxNXcKCxJ3cXQgYuRymRHpdx/t7JXfsK+JLjwA1e1c1/SBrlQYpusC29Q==", + "license": "ISC" + }, + "node_modules/json-rpc-middleware-stream": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/json-rpc-middleware-stream/-/json-rpc-middleware-stream-4.2.3.tgz", + "integrity": "sha512-4iFb0yffm5vo3eFKDbQgke9o17XBcLQ2c3sONrXSbcOLzP8LTojqo8hRGVgtJShhm5q4ZDSNq039fAx9o65E1w==", + "license": "ISC", + "dependencies": { + "@metamask/safe-event-emitter": "^3.0.0", + "json-rpc-engine": "^6.1.0", + "readable-stream": "^2.3.3" + }, "engines": { - "node": ">=18" + "node": ">=14.0.0" } }, - "node_modules/esbuild/node_modules/@esbuild/darwin-x64": { - "version": "0.25.10", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.25.10.tgz", - "integrity": "sha512-tguWg1olF6DGqzws97pKZ8G2L7Ig1vjDmGTwcTuYHbuU6TTjJe5FXbgs5C1BBzHbJ2bo1m3WkQDbWO2PvamRcg==", - "cpu": [ - "x64" - ], + "node_modules/json-schema": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.4.0.tgz", + "integrity": "sha512-es94M3nTIfsEPisRafak+HDLfHXnKBhV3vU5eqPcS3flIWqcxJWgXHXiey3YrpaNsanY5ei1VoYEbOzijuq9BA==", + "license": "(AFL-2.1 OR BSD-3-Clause)" + }, + "node_modules/json-schema-traverse": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", + "license": "MIT" + }, + "node_modules/json-stable-stringify-without-jsonify": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", + "integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==", + "dev": true, + "license": "MIT" + }, + "node_modules/json-stream-stringify": { + "version": "3.1.6", + "resolved": "https://registry.npmjs.org/json-stream-stringify/-/json-stream-stringify-3.1.6.tgz", + "integrity": "sha512-x7fpwxOkbhFCaJDJ8vb1fBY3DdSa4AlITaz+HHILQJzdPMnHEFjxPwVUi1ALIbcIxDE0PNe/0i7frnY8QnBQog==", "dev": true, "license": "MIT", - "optional": true, - "os": [ - "darwin" - ], "engines": { - "node": ">=18" + "node": ">=7.10.1" } }, - "node_modules/esbuild/node_modules/@esbuild/freebsd-arm64": { - "version": "0.25.10", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.25.10.tgz", - "integrity": "sha512-3ZioSQSg1HT2N05YxeJWYR+Libe3bREVSdWhEEgExWaDtyFbbXWb49QgPvFH8u03vUPX10JhJPcz7s9t9+boWg==", - "cpu": [ - "arm64" - ], - "dev": true, + "node_modules/json5": { + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz", + "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==", "license": "MIT", - "optional": true, - "os": [ - "freebsd" - ], + "bin": { + "json5": "lib/cli.js" + }, "engines": { - "node": ">=18" + "node": ">=6" } }, - "node_modules/esbuild/node_modules/@esbuild/freebsd-x64": { - "version": "0.25.10", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.25.10.tgz", - "integrity": "sha512-LLgJfHJk014Aa4anGDbh8bmI5Lk+QidDmGzuC2D+vP7mv/GeSN+H39zOf7pN5N8p059FcOfs2bVlrRr4SK9WxA==", - "cpu": [ - "x64" - ], + "node_modules/jsonc-parser": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/jsonc-parser/-/jsonc-parser-3.2.0.tgz", + "integrity": "sha512-gfFQZrcTc8CnKXp6Y4/CBT3fTc0OVuDofpre4aEeEpSBPV5X5v4+Vmx+8snU7RLPrNHPKSgLxGo9YuQzz20o+w==", + "license": "MIT" + }, + "node_modules/jsonfile": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz", + "integrity": "sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg==", "dev": true, "license": "MIT", - "optional": true, - "os": [ - "freebsd" - ], + "optionalDependencies": { + "graceful-fs": "^4.1.6" + } + }, + "node_modules/jsonld": { + "version": "8.3.3", + "resolved": "https://registry.npmjs.org/jsonld/-/jsonld-8.3.3.tgz", + "integrity": "sha512-9YcilrF+dLfg9NTEof/mJLMtbdX1RJ8dbWtJgE00cMOIohb1lIyJl710vFiTaiHTl6ZYODJuBd32xFvUhmv3kg==", + "license": "BSD-3-Clause", + "dependencies": { + "@digitalbazaar/http-client": "^3.4.1", + "canonicalize": "^1.0.1", + "lru-cache": "^6.0.0", + "rdf-canonize": "^3.4.0" + }, "engines": { - "node": ">=18" + "node": ">=14" } }, - "node_modules/esbuild/node_modules/@esbuild/linux-arm": { - "version": "0.25.10", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.25.10.tgz", - "integrity": "sha512-oR31GtBTFYCqEBALI9r6WxoU/ZofZl962pouZRTEYECvNF/dtXKku8YXcJkhgK/beU+zedXfIzHijSRapJY3vg==", - "cpu": [ - "arm" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], + "node_modules/jsonld/node_modules/canonicalize": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/canonicalize/-/canonicalize-1.0.8.tgz", + "integrity": "sha512-0CNTVCLZggSh7bc5VkX5WWPWO+cyZbNd07IHIsSXLia/eAq+r836hgk+8BKoEh7949Mda87VUOitx5OddVj64A==", + "license": "Apache-2.0" + }, + "node_modules/jsonld/node_modules/lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "license": "ISC", + "dependencies": { + "yallist": "^4.0.0" + }, "engines": { - "node": ">=18" + "node": ">=10" } }, - "node_modules/esbuild/node_modules/@esbuild/linux-arm64": { - "version": "0.25.10", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.25.10.tgz", - "integrity": "sha512-5luJWN6YKBsawd5f9i4+c+geYiVEw20FVW5x0v1kEMWNq8UctFjDiMATBxLvmmHA4bf7F6hTRaJgtghFr9iziQ==", - "cpu": [ - "arm64" + "node_modules/jsonld/node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "license": "ISC" + }, + "node_modules/jsonparse": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/jsonparse/-/jsonparse-1.3.1.tgz", + "integrity": "sha512-POQXvpdL69+CluYsillJ7SUhKvytYjW9vG/GKpnf+xP8UWgYEM/RaMzHHofbALDiKbbP1W8UEYmgGl39WkPZsg==", + "dev": true, + "engines": [ + "node >= 0.2.0" ], + "license": "MIT" + }, + "node_modules/jsonschema": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/jsonschema/-/jsonschema-1.5.0.tgz", + "integrity": "sha512-K+A9hhqbn0f3pJX17Q/7H6yQfD/5OXgdrR5UE12gMXCiN9D5Xq2o5mddV2QEcX/bjla99ASsAAQUyMCCRWAEhw==", "dev": true, "license": "MIT", - "optional": true, - "os": [ - "linux" - ], "engines": { - "node": ">=18" + "node": "*" } }, - "node_modules/esbuild/node_modules/@esbuild/linux-ia32": { - "version": "0.25.10", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.25.10.tgz", - "integrity": "sha512-NrSCx2Kim3EnnWgS4Txn0QGt0Xipoumb6z6sUtl5bOEZIVKhzfyp/Lyw4C1DIYvzeW/5mWYPBFJU3a/8Yr75DQ==", - "cpu": [ - "ia32" - ], + "node_modules/JSONStream": { + "version": "1.3.5", + "resolved": "https://registry.npmjs.org/JSONStream/-/JSONStream-1.3.5.tgz", + "integrity": "sha512-E+iruNOY8VV9s4JEbe1aNEm6MiszPRr/UfcHMz0TQh1BXSxHK+ASV1R6W4HpjBhSeS+54PIsAMCBmwD06LLsqQ==", "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], + "license": "(MIT OR Apache-2.0)", + "dependencies": { + "jsonparse": "^1.2.0", + "through": ">=2.2.7 <3" + }, + "bin": { + "JSONStream": "bin.js" + }, "engines": { - "node": ">=18" + "node": "*" } }, - "node_modules/esbuild/node_modules/@esbuild/linux-loong64": { - "version": "0.25.10", - "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.25.10.tgz", - "integrity": "sha512-xoSphrd4AZda8+rUDDfD9J6FUMjrkTz8itpTITM4/xgerAZZcFW7Dv+sun7333IfKxGG8gAq+3NbfEMJfiY+Eg==", - "cpu": [ - "loong64" - ], - "dev": true, + "node_modules/jsonwebtoken": { + "version": "9.0.0", + "resolved": "https://registry.npmjs.org/jsonwebtoken/-/jsonwebtoken-9.0.0.tgz", + "integrity": "sha512-tuGfYXxkQGDPnLJ7SibiQgVgeDgfbPq2k2ICcbgqW8WxWLBAxKQM/ZCu/IT8SOSwmaYl4dpTFCW5xZv7YbbWUw==", "license": "MIT", - "optional": true, - "os": [ - "linux" - ], + "dependencies": { + "jws": "^3.2.2", + "lodash": "^4.17.21", + "ms": "^2.1.1", + "semver": "^7.3.8" + }, "engines": { - "node": ">=18" + "node": ">=12", + "npm": ">=6" } }, - "node_modules/esbuild/node_modules/@esbuild/linux-mips64el": { - "version": "0.25.10", - "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.25.10.tgz", - "integrity": "sha512-ab6eiuCwoMmYDyTnyptoKkVS3k8fy/1Uvq7Dj5czXI6DF2GqD2ToInBI0SHOp5/X1BdZ26RKc5+qjQNGRBelRA==", - "cpu": [ - "mips64el" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], + "node_modules/jsonwebtoken/node_modules/semver": { + "version": "7.7.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.2.tgz", + "integrity": "sha512-RF0Fw+rO5AMf9MAyaRXI4AV0Ulj5lMHqVxxdSgiVbixSCXoEmmX/jk0CuJw4+3SqroYO9VoUh+HcuJivvtJemA==", + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + }, "engines": { - "node": ">=18" + "node": ">=10" } }, - "node_modules/esbuild/node_modules/@esbuild/linux-ppc64": { - "version": "0.25.10", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.25.10.tgz", - "integrity": "sha512-NLinzzOgZQsGpsTkEbdJTCanwA5/wozN9dSgEl12haXJBzMTpssebuXR42bthOF3z7zXFWH1AmvWunUCkBE4EA==", - "cpu": [ - "ppc64" - ], + "node_modules/jsx-ast-utils": { + "version": "3.3.5", + "resolved": "https://registry.npmjs.org/jsx-ast-utils/-/jsx-ast-utils-3.3.5.tgz", + "integrity": "sha512-ZZow9HBI5O6EPgSJLUb8n2NKgmVWTwCvHGwFuJlMjvLFqlGG6pjirPhtdsseaLZjSibD8eegzmYpUZwoIlj2cQ==", "dev": true, "license": "MIT", - "optional": true, - "os": [ - "linux" - ], + "dependencies": { + "array-includes": "^3.1.6", + "array.prototype.flat": "^1.3.1", + "object.assign": "^4.1.4", + "object.values": "^1.1.6" + }, "engines": { - "node": ">=18" + "node": ">=4.0" } }, - "node_modules/esbuild/node_modules/@esbuild/linux-riscv64": { - "version": "0.25.10", - "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.25.10.tgz", - "integrity": "sha512-FE557XdZDrtX8NMIeA8LBJX3dC2M8VGXwfrQWU7LB5SLOajfJIxmSdyL/gU1m64Zs9CBKvm4UAuBp5aJ8OgnrA==", - "cpu": [ - "riscv64" - ], - "dev": true, + "node_modules/jwa": { + "version": "1.4.2", + "resolved": "https://registry.npmjs.org/jwa/-/jwa-1.4.2.tgz", + "integrity": "sha512-eeH5JO+21J78qMvTIDdBXidBd6nG2kZjg5Ohz/1fpa28Z4CcsWUzJ1ZZyFq/3z3N17aZy+ZuBoHljASbL1WfOw==", "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=18" + "dependencies": { + "buffer-equal-constant-time": "^1.0.1", + "ecdsa-sig-formatter": "1.0.11", + "safe-buffer": "^5.0.1" } }, - "node_modules/esbuild/node_modules/@esbuild/linux-s390x": { - "version": "0.25.10", - "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.25.10.tgz", - "integrity": "sha512-3BBSbgzuB9ajLoVZk0mGu+EHlBwkusRmeNYdqmznmMc9zGASFjSsxgkNsqmXugpPk00gJ0JNKh/97nxmjctdew==", - "cpu": [ - "s390x" - ], - "dev": true, + "node_modules/jws": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/jws/-/jws-3.2.2.tgz", + "integrity": "sha512-YHlZCB6lMTllWDtSPHz/ZXTsi8S00usEV6v1tjq8tOUZzw7DpSDWVXjXDre6ed1w/pd495ODpHZYSdkRTsa0HA==", "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=18" + "dependencies": { + "jwa": "^1.4.1", + "safe-buffer": "^5.0.1" } }, - "node_modules/esbuild/node_modules/@esbuild/linux-x64": { - "version": "0.25.10", - "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.25.10.tgz", - "integrity": "sha512-QSX81KhFoZGwenVyPoberggdW1nrQZSvfVDAIUXr3WqLRZGZqWk/P4T8p2SP+de2Sr5HPcvjhcJzEiulKgnxtA==", - "cpu": [ - "x64" + "node_modules/katex": { + "version": "0.16.27", + "resolved": "https://registry.npmjs.org/katex/-/katex-0.16.27.tgz", + "integrity": "sha512-aeQoDkuRWSqQN6nSvVCEFvfXdqo1OQiCmmW1kc9xSdjutPv7BGO7pqY9sQRJpMOGrEdfDgF2TfRXe5eUAD2Waw==", + "funding": [ + "https://opencollective.com/katex", + "https://github.com/sponsors/katex" ], - "dev": true, "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=18" + "dependencies": { + "commander": "^8.3.0" + }, + "bin": { + "katex": "cli.js" } }, - "node_modules/esbuild/node_modules/@esbuild/netbsd-x64": { - "version": "0.25.10", - "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.25.10.tgz", - "integrity": "sha512-7RTytDPGU6fek/hWuN9qQpeGPBZFfB4zZgcz2VK2Z5VpdUxEI8JKYsg3JfO0n/Z1E/6l05n0unDCNc4HnhQGig==", - "cpu": [ - "x64" - ], - "dev": true, + "node_modules/katex/node_modules/commander": { + "version": "8.3.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-8.3.0.tgz", + "integrity": "sha512-OkTL9umf+He2DZkUq8f8J9of7yL6RJKI24dVITBmNfZBmri9zYZQrKkuXiKhyfPSu8tUhnVBB1iKXevvnlR4Ww==", "license": "MIT", - "optional": true, - "os": [ - "netbsd" - ], "engines": { - "node": ">=18" + "node": ">= 12" } }, - "node_modules/esbuild/node_modules/@esbuild/openbsd-x64": { - "version": "0.25.10", - "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.25.10.tgz", - "integrity": "sha512-XkA4frq1TLj4bEMB+2HnI0+4RnjbuGZfet2gs/LNs5Hc7D89ZQBHQ0gL2ND6Lzu1+QVkjp3x1gIcPKzRNP8bXw==", - "cpu": [ - "x64" - ], - "dev": true, + "node_modules/keccak": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/keccak/-/keccak-3.0.4.tgz", + "integrity": "sha512-3vKuW0jV8J3XNTzvfyicFR5qvxrSAGl7KIhvgOu5cmWwM7tZRj3fMbj/pfIf4be7aznbc+prBWGjywox/g2Y6Q==", + "hasInstallScript": true, "license": "MIT", - "optional": true, - "os": [ - "openbsd" - ], + "dependencies": { + "node-addon-api": "^2.0.0", + "node-gyp-build": "^4.2.0", + "readable-stream": "^3.6.0" + }, "engines": { - "node": ">=18" + "node": ">=10.0.0" } }, - "node_modules/esbuild/node_modules/@esbuild/sunos-x64": { - "version": "0.25.10", - "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.25.10.tgz", - "integrity": "sha512-fswk3XT0Uf2pGJmOpDB7yknqhVkJQkAQOcW/ccVOtfx05LkbWOaRAtn5SaqXypeKQra1QaEa841PgrSL9ubSPQ==", - "cpu": [ - "x64" - ], - "dev": true, + "node_modules/keccak/node_modules/readable-stream": { + "version": "3.6.2", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", + "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", "license": "MIT", - "optional": true, - "os": [ - "sunos" - ], + "dependencies": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + }, "engines": { - "node": ">=18" + "node": ">= 6" } }, - "node_modules/esbuild/node_modules/@esbuild/win32-arm64": { - "version": "0.25.10", - "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.25.10.tgz", - "integrity": "sha512-ah+9b59KDTSfpaCg6VdJoOQvKjI33nTaQr4UluQwW7aEwZQsbMCfTmfEO4VyewOxx4RaDT/xCy9ra2GPWmO7Kw==", - "cpu": [ - "arm64" - ], - "dev": true, + "node_modules/keyv": { + "version": "4.5.4", + "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.5.4.tgz", + "integrity": "sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==", "license": "MIT", - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">=18" + "dependencies": { + "json-buffer": "3.0.1" } }, - "node_modules/esbuild/node_modules/@esbuild/win32-ia32": { - "version": "0.25.10", - "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.25.10.tgz", - "integrity": "sha512-QHPDbKkrGO8/cz9LKVnJU22HOi4pxZnZhhA2HYHez5Pz4JeffhDjf85E57Oyco163GnzNCVkZK0b/n4Y0UHcSw==", - "cpu": [ - "ia32" - ], - "dev": true, + "node_modules/keyvaluestorage-interface": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/keyvaluestorage-interface/-/keyvaluestorage-interface-1.0.0.tgz", + "integrity": "sha512-8t6Q3TclQ4uZynJY9IGr2+SsIGwK9JHcO6ootkHCGA0CrQCRy+VkouYNO2xicET6b9al7QKzpebNow+gkpCL8g==", + "license": "MIT" + }, + "node_modules/khroma": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/khroma/-/khroma-2.1.0.tgz", + "integrity": "sha512-Ls993zuzfayK269Svk9hzpeGUKob/sIgZzyHYdjQoAdQetRKpOLj+k/QQQ/6Qi0Yz65mlROrfd+Ev+1+7dz9Kw==" + }, + "node_modules/kind-of": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", + "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", "license": "MIT", - "optional": true, - "os": [ - "win32" - ], "engines": { - "node": ">=18" + "node": ">=0.10.0" } }, - "node_modules/esbuild/node_modules/@esbuild/win32-x64": { - "version": "0.25.10", - "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.25.10.tgz", - "integrity": "sha512-9KpxSVFCu0iK1owoez6aC/s/EdUQLDN3adTxGCqxMVhrPDj6bt5dbrHDXUuq+Bs2vATFBBrQS5vdQ/Ed2P+nbw==", - "cpu": [ - "x64" - ], - "dev": true, + "node_modules/kleur": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/kleur/-/kleur-3.0.3.tgz", + "integrity": "sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==", "license": "MIT", - "optional": true, - "os": [ - "win32" - ], "engines": { - "node": ">=18" + "node": ">=6" } }, - "node_modules/escalade": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.2.0.tgz", - "integrity": "sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==", + "node_modules/klona": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/klona/-/klona-2.0.6.tgz", + "integrity": "sha512-dhG34DXATL5hSxJbIexCft8FChFXtmskoZYnoPWjXQuebWYCNkVeV3KkGegCK9CP1oswI/vQibS2GY7Em/sJJA==", "license": "MIT", "engines": { - "node": ">=6" + "node": ">= 8" } }, - "node_modules/escape-goat": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/escape-goat/-/escape-goat-4.0.0.tgz", - "integrity": "sha512-2Sd4ShcWxbx6OY1IHyla/CVNwvg7XwZVoXZHcSu9w9SReNP1EzzD5T8NWKIR38fIqEns9kDWKUQTXXAmlDrdPg==", - "dev": true, + "node_modules/kuler": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/kuler/-/kuler-2.0.0.tgz", + "integrity": "sha512-Xq9nH7KlWZmXAtodXDDRE7vs6DU1gTU8zYDHDiWLSip45Egwq3plLHzPn27NgvzL2r1LMPC1vdqh98sQxtqj4A==", + "license": "MIT" + }, + "node_modules/ky": { + "version": "0.33.3", + "resolved": "https://registry.npmjs.org/ky/-/ky-0.33.3.tgz", + "integrity": "sha512-CasD9OCEQSFIam2U8efFK81Yeg8vNMTBUqtMOHlrcWQHqUX3HeCl9Dr31u4toV7emlH8Mymk5+9p0lL6mKb/Xw==", "license": "MIT", + "peer": true, "engines": { - "node": ">=12" + "node": ">=14.16" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "url": "https://github.com/sindresorhus/ky?sponsor=1" } }, - "node_modules/escape-html": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", - "integrity": "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==", - "license": "MIT" - }, - "node_modules/escape-string-regexp": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", - "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", + "node_modules/ky-universal": { + "version": "0.11.0", + "resolved": "https://registry.npmjs.org/ky-universal/-/ky-universal-0.11.0.tgz", + "integrity": "sha512-65KyweaWvk+uKKkCrfAf+xqN2/epw1IJDtlyCPxYffFCMR8u1sp2U65NtWpnozYfZxQ6IUzIlvUcw+hQ82U2Xw==", "license": "MIT", + "dependencies": { + "abort-controller": "^3.0.0", + "node-fetch": "^3.2.10" + }, "engines": { - "node": ">=10" + "node": ">=14.16" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "url": "https://github.com/sindresorhus/ky-universal?sponsor=1" + }, + "peerDependencies": { + "ky": ">=0.31.4", + "web-streams-polyfill": ">=3.2.1" + }, + "peerDependenciesMeta": { + "web-streams-polyfill": { + "optional": true + } } }, - "node_modules/escodegen": { - "version": "1.8.1", - "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-1.8.1.tgz", - "integrity": "sha512-yhi5S+mNTOuRvyW4gWlg5W1byMaQGWWSYHXsuFZ7GBo7tpyOwi2EdzMP/QWxh9hwkD2m+wDVHJsxhRIj+v/b/A==", - "dev": true, - "license": "BSD-2-Clause", + "node_modules/ky-universal/node_modules/node-fetch": { + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-3.3.2.tgz", + "integrity": "sha512-dRB78srN/l6gqWulah9SrxeYnxeddIG30+GOqK/9OlLVyLg3HPnr6SqOWTWOXKRwC2eGYCkZ59NNuSgvSrpgOA==", + "license": "MIT", "dependencies": { - "esprima": "^2.7.1", - "estraverse": "^1.9.1", - "esutils": "^2.0.2", - "optionator": "^0.8.1" - }, - "bin": { - "escodegen": "bin/escodegen.js", - "esgenerate": "bin/esgenerate.js" + "data-uri-to-buffer": "^4.0.0", + "fetch-blob": "^3.1.4", + "formdata-polyfill": "^4.0.10" }, "engines": { - "node": ">=0.12.0" + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" }, - "optionalDependencies": { - "source-map": "~0.2.0" + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/node-fetch" } }, - "node_modules/escodegen/node_modules/esprima": { - "version": "2.7.3", - "resolved": "https://registry.npmjs.org/esprima/-/esprima-2.7.3.tgz", - "integrity": "sha512-OarPfz0lFCiW4/AV2Oy1Rp9qu0iusTKqykwTspGCZtPxmF81JR4MmIebvF1F9+UOKth2ZubLQ4XGGaU+hSn99A==", + "node_modules/langbase": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/langbase/-/langbase-1.2.3.tgz", + "integrity": "sha512-rhJaursMFuXFB/KzY+7Eztyt7qZEkhz9z9ryl+IQLSvSsjbn61dgFGsxh0tSzA2M+DygW3cXTyYZr/K3SA3OXA==", "dev": true, - "license": "BSD-2-Clause", - "bin": { - "esparse": "bin/esparse.js", - "esvalidate": "bin/esvalidate.js" + "license": "Apache-2.0", + "dependencies": { + "dotenv": "^16.4.5", + "openai": "^4.82.0", + "zod": "^3.23.8", + "zod-validation-error": "^3.3.0" }, "engines": { - "node": ">=0.10.0" + "node": ">=18" + }, + "peerDependencies": { + "react": "^18 || ^19" + }, + "peerDependenciesMeta": { + "react": { + "optional": true + } } }, - "node_modules/escodegen/node_modules/estraverse": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-1.9.3.tgz", - "integrity": "sha512-25w1fMXQrGdoquWnScXZGckOv+Wes+JDnuN/+7ex3SauFRS72r2lFDec0EKPt2YD1wUJ/IrfEex+9yp4hfSOJA==", - "dev": true, + "node_modules/langium": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/langium/-/langium-3.3.1.tgz", + "integrity": "sha512-QJv/h939gDpvT+9SiLVlY7tZC3xB2qK57v0J04Sh9wpMb6MP1q8gB21L3WIo8T5P1MSMg3Ep14L7KkDCFG3y4w==", + "license": "MIT", + "dependencies": { + "chevrotain": "~11.0.3", + "chevrotain-allstar": "~0.3.0", + "vscode-languageserver": "~9.0.1", + "vscode-languageserver-textdocument": "~1.0.11", + "vscode-uri": "~3.0.8" + }, "engines": { - "node": ">=0.10.0" + "node": ">=16.0.0" } }, - "node_modules/escodegen/node_modules/levn": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz", - "integrity": "sha512-0OO4y2iOHix2W6ujICbKIaEQXvFQHue65vUG3pb5EUomzPI90z9hsA1VsO/dbIIpC53J8gxM9Q4Oho0jrCM/yA==", - "dev": true, + "node_modules/latest-version": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/latest-version/-/latest-version-7.0.0.tgz", + "integrity": "sha512-KvNT4XqAMzdcL6ka6Tl3i2lYeFDgXNCuIX+xNx6ZMVR1dFq+idXd9FLKNMOIx0t9mJ9/HudyX4oZWXZQ0UJHeg==", "license": "MIT", "dependencies": { - "prelude-ls": "~1.1.2", - "type-check": "~0.3.2" + "package-json": "^8.1.0" }, "engines": { - "node": ">= 0.8.0" + "node": ">=14.16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/escodegen/node_modules/optionator": { - "version": "0.8.3", - "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.8.3.tgz", - "integrity": "sha512-+IW9pACdk3XWmmTXG8m3upGUJst5XRGzxMRjXzAuJ1XnIFNvfhjjIuYkDvysnPQ7qzqVzLt78BCruntqRhWQbA==", + "node_modules/launch-editor": { + "version": "2.12.0", + "resolved": "https://registry.npmjs.org/launch-editor/-/launch-editor-2.12.0.tgz", + "integrity": "sha512-giOHXoOtifjdHqUamwKq6c49GzBdLjvxrd2D+Q4V6uOHopJv7p9VJxikDsQ/CBXZbEITgUqSVHXLTG3VhPP1Dg==", + "license": "MIT", + "dependencies": { + "picocolors": "^1.1.1", + "shell-quote": "^1.8.3" + } + }, + "node_modules/layout-base": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/layout-base/-/layout-base-1.0.2.tgz", + "integrity": "sha512-8h2oVEZNktL4BH2JCOI90iD1yXwL6iNW7KcCKT2QZgQJR2vbqDsldCTPRU9NifTCqHZci57XvQQ15YTu+sTYPg==", + "license": "MIT" + }, + "node_modules/lazystream": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/lazystream/-/lazystream-1.0.1.tgz", + "integrity": "sha512-b94GiNHQNy6JNTrt5w6zNyffMrNkXZb3KTkCZJb2V1xaEGCk093vkZ2jk3tpaeP33/OiXC+WvK9AxUebnf5nbw==", "dev": true, "license": "MIT", "dependencies": { - "deep-is": "~0.1.3", - "fast-levenshtein": "~2.0.6", - "levn": "~0.3.0", - "prelude-ls": "~1.1.2", - "type-check": "~0.3.2", - "word-wrap": "~1.2.3" + "readable-stream": "^2.0.5" }, "engines": { - "node": ">= 0.8.0" + "node": ">= 0.6.3" } }, - "node_modules/escodegen/node_modules/prelude-ls": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz", - "integrity": "sha512-ESF23V4SKG6lVSGZgYNpbsiaAkdab6ZgOxe52p7+Kid3W3u3bxR4Vfd/o21dmN7jSt0IwgZ4v5MUd26FEtXE9w==", - "dev": true, + "node_modules/leven": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/leven/-/leven-3.1.0.tgz", + "integrity": "sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A==", + "license": "MIT", "engines": { - "node": ">= 0.8.0" + "node": ">=6" } }, - "node_modules/escodegen/node_modules/source-map": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.2.0.tgz", - "integrity": "sha512-CBdZ2oa/BHhS4xj5DlhjWNHcan57/5YuvfdLf17iVmIpd9KRm+DFLmC6nBNj+6Ua7Kt3TmOjDpQT1aTYOQtoUA==", + "node_modules/levn": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", + "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", "dev": true, - "optional": true, + "license": "MIT", "dependencies": { - "amdefine": ">=0.0.4" + "prelude-ls": "^1.2.1", + "type-check": "~0.4.0" }, "engines": { - "node": ">=0.8.0" + "node": ">= 0.8.0" } }, - "node_modules/escodegen/node_modules/type-check": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz", - "integrity": "sha512-ZCmOJdvOWDBYJlzAoFkC+Q0+bUyEOS1ltgp1MGU03fqHG+dbi9tBFU2Rd9QKiDZFAYrhPh2JUf7rZRIuHRKtOg==", - "dev": true, + "node_modules/libphonenumber-js": { + "version": "1.12.23", + "resolved": "https://registry.npmjs.org/libphonenumber-js/-/libphonenumber-js-1.12.23.tgz", + "integrity": "sha512-RN3q3gImZ91BvRDYjWp7ICz3gRn81mW5L4SW+2afzNCC0I/nkXstBgZThQGTE3S/9q5J90FH4dP+TXx8NhdZKg==", + "license": "MIT" + }, + "node_modules/lighthouse-logger": { + "version": "1.4.2", + "resolved": "https://registry.npmjs.org/lighthouse-logger/-/lighthouse-logger-1.4.2.tgz", + "integrity": "sha512-gPWxznF6TKmUHrOQjlVo2UbaL2EJ71mb2CCeRs/2qBpi4L/g4LUVc9+3lKQ6DTUZwJswfM7ainGrLO1+fOqa2g==", + "license": "Apache-2.0", + "dependencies": { + "debug": "^2.6.9", + "marky": "^1.2.2" + } + }, + "node_modules/lighthouse-logger/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", "license": "MIT", "dependencies": { - "prelude-ls": "~1.1.2" - }, + "ms": "2.0.0" + } + }, + "node_modules/lighthouse-logger/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "license": "MIT" + }, + "node_modules/lilconfig": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-3.1.3.tgz", + "integrity": "sha512-/vlFKAoH5Cgt3Ie+JLhRbwOsCQePABiU3tJ1egGvyQ+33R/vcwM2Zl2QR/LzjsBeItPt3oSVXapn+m4nQDvpzw==", + "license": "MIT", "engines": { - "node": ">= 0.8.0" + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/antonk52" } }, - "node_modules/eslint": { - "version": "8.57.1", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.57.1.tgz", - "integrity": "sha512-ypowyDxpVSYpkXr9WPv2PAZCtNip1Mv5KTW0SCurXv/9iOpcrH9PaqUElksqEB6pChqHGDRCFTyrZlGhnLNGiA==", - "deprecated": "This version is no longer supported. Please see https://eslint.org/version-support for other options.", + "node_modules/lines-and-columns": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz", + "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==", + "license": "MIT" + }, + "node_modules/lint-staged": { + "version": "15.5.2", + "resolved": "https://registry.npmjs.org/lint-staged/-/lint-staged-15.5.2.tgz", + "integrity": "sha512-YUSOLq9VeRNAo/CTaVmhGDKG+LBtA8KF1X4K5+ykMSwWST1vDxJRB2kv2COgLb1fvpCo+A/y9A0G0znNVmdx4w==", "dev": true, "license": "MIT", "dependencies": { - "@eslint-community/eslint-utils": "^4.2.0", - "@eslint-community/regexpp": "^4.6.1", - "@eslint/eslintrc": "^2.1.4", - "@eslint/js": "8.57.1", - "@humanwhocodes/config-array": "^0.13.0", - "@humanwhocodes/module-importer": "^1.0.1", - "@nodelib/fs.walk": "^1.2.8", - "@ungap/structured-clone": "^1.2.0", - "ajv": "^6.12.4", - "chalk": "^4.0.0", - "cross-spawn": "^7.0.2", - "debug": "^4.3.2", - "doctrine": "^3.0.0", - "escape-string-regexp": "^4.0.0", - "eslint-scope": "^7.2.2", - "eslint-visitor-keys": "^3.4.3", - "espree": "^9.6.1", - "esquery": "^1.4.2", - "esutils": "^2.0.2", - "fast-deep-equal": "^3.1.3", - "file-entry-cache": "^6.0.1", - "find-up": "^5.0.0", - "glob-parent": "^6.0.2", - "globals": "^13.19.0", - "graphemer": "^1.4.0", - "ignore": "^5.2.0", - "imurmurhash": "^0.1.4", - "is-glob": "^4.0.0", - "is-path-inside": "^3.0.3", - "js-yaml": "^4.1.0", - "json-stable-stringify-without-jsonify": "^1.0.1", - "levn": "^0.4.1", - "lodash.merge": "^4.6.2", - "minimatch": "^3.1.2", - "natural-compare": "^1.4.0", - "optionator": "^0.9.3", - "strip-ansi": "^6.0.1", - "text-table": "^0.2.0" + "chalk": "^5.4.1", + "commander": "^13.1.0", + "debug": "^4.4.0", + "execa": "^8.0.1", + "lilconfig": "^3.1.3", + "listr2": "^8.2.5", + "micromatch": "^4.0.8", + "pidtree": "^0.6.0", + "string-argv": "^0.3.2", + "yaml": "^2.7.0" }, "bin": { - "eslint": "bin/eslint.js" + "lint-staged": "bin/lint-staged.js" }, "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + "node": ">=18.12.0" }, "funding": { - "url": "https://opencollective.com/eslint" + "url": "https://opencollective.com/lint-staged" } }, - "node_modules/eslint-config-prettier": { - "version": "9.1.2", - "resolved": "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-9.1.2.tgz", - "integrity": "sha512-iI1f+D2ViGn+uvv5HuHVUamg8ll4tN+JRHGc6IJi4TP9Kl976C57fzPXgseXNs8v0iA8aSJpHsTWjDb9QJamGQ==", + "node_modules/lint-staged/node_modules/chalk": { + "version": "5.6.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-5.6.2.tgz", + "integrity": "sha512-7NzBL0rN6fMUW+f7A6Io4h40qQlG+xGmtMxfbnH/K7TAtt8JQWVQK+6g0UXKMeVJoyV5EkkNsErQ8pVD3bLHbA==", "dev": true, "license": "MIT", - "bin": { - "eslint-config-prettier": "bin/cli.js" + "engines": { + "node": "^12.17.0 || ^14.13 || >=16.0.0" }, - "peerDependencies": { - "eslint": ">=7.0.0" + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" } }, - "node_modules/eslint-import-resolver-node": { - "version": "0.3.9", - "resolved": "https://registry.npmjs.org/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.9.tgz", - "integrity": "sha512-WFj2isz22JahUv+B788TlO3N6zL3nNJGU8CcZbPZvVEkBPaJdCV4vy5wyghty5ROFbCRnm132v8BScu5/1BQ8g==", + "node_modules/lint-staged/node_modules/commander": { + "version": "13.1.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-13.1.0.tgz", + "integrity": "sha512-/rFeCpNJQbhSZjGVwO9RFV3xPqbnERS8MmIQzCtD/zl6gpJuV/bMLuN92oG3F7d8oDEHHRrujSXNUr8fpjntKw==", "dev": true, "license": "MIT", - "dependencies": { - "debug": "^3.2.7", - "is-core-module": "^2.13.0", - "resolve": "^1.22.4" + "engines": { + "node": ">=18" } }, - "node_modules/eslint-import-resolver-node/node_modules/debug": { - "version": "3.2.7", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", - "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", + "node_modules/lint-staged/node_modules/execa": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/execa/-/execa-8.0.1.tgz", + "integrity": "sha512-VyhnebXciFV2DESc+p6B+y0LjSm0krU4OgJN44qFAhBY0TJ+1V61tYD2+wHusZ6F9n5K+vl8k0sTy7PEfV4qpg==", "dev": true, "license": "MIT", "dependencies": { - "ms": "^2.1.1" - } - }, - "node_modules/eslint-import-resolver-typescript": { - "version": "3.6.1", - "resolved": "https://registry.npmjs.org/eslint-import-resolver-typescript/-/eslint-import-resolver-typescript-3.6.1.tgz", - "integrity": "sha512-xgdptdoi5W3niYeuQxKmzVDTATvLYqhpwmykwsh7f6HIOStGWEIL9iqZgQDF9u9OEzrRwR8no5q2VT+bjAujTg==", - "dev": true, - "license": "ISC", - "dependencies": { - "debug": "^4.3.4", - "enhanced-resolve": "^5.12.0", - "eslint-module-utils": "^2.7.4", - "fast-glob": "^3.3.1", - "get-tsconfig": "^4.5.0", - "is-core-module": "^2.11.0", - "is-glob": "^4.0.3" + "cross-spawn": "^7.0.3", + "get-stream": "^8.0.1", + "human-signals": "^5.0.0", + "is-stream": "^3.0.0", + "merge-stream": "^2.0.0", + "npm-run-path": "^5.1.0", + "onetime": "^6.0.0", + "signal-exit": "^4.1.0", + "strip-final-newline": "^3.0.0" }, "engines": { - "node": "^14.18.0 || >=16.0.0" + "node": ">=16.17" }, "funding": { - "url": "https://opencollective.com/unts/projects/eslint-import-resolver-ts" - }, - "peerDependencies": { - "eslint": "*", - "eslint-plugin-import": "*" + "url": "https://github.com/sindresorhus/execa?sponsor=1" } }, - "node_modules/eslint-module-utils": { - "version": "2.12.1", - "resolved": "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.12.1.tgz", - "integrity": "sha512-L8jSWTze7K2mTg0vos/RuLRS5soomksDPoJLXIslC7c8Wmut3bx7CPpJijDcBZtxQ5lrbUdM+s0OlNbz0DCDNw==", + "node_modules/lint-staged/node_modules/get-stream": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-8.0.1.tgz", + "integrity": "sha512-VaUJspBffn/LMCJVoMvSAdmscJyS1auj5Zulnn5UoYcY531UWmdwhRWkcGKnGU93m5HSXP9LP2usOryrBtQowA==", "dev": true, "license": "MIT", - "dependencies": { - "debug": "^3.2.7" - }, "engines": { - "node": ">=4" + "node": ">=16" }, - "peerDependenciesMeta": { - "eslint": { - "optional": true - } - } - }, - "node_modules/eslint-module-utils/node_modules/debug": { - "version": "3.2.7", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", - "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "ms": "^2.1.1" + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/eslint-plugin-import": { - "version": "2.32.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.32.0.tgz", - "integrity": "sha512-whOE1HFo/qJDyX4SnXzP4N6zOWn79WhnCUY/iDR0mPfQZO8wcYE4JClzI2oZrhBnnMUCBCHZhO6VQyoBU95mZA==", + "node_modules/lint-staged/node_modules/human-signals": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-5.0.0.tgz", + "integrity": "sha512-AXcZb6vzzrFAUE61HnN4mpLqd/cSIwNQjtNWR0euPm6y0iqx3G4gOXaIDdtdDwZmhwe82LA6+zinmW4UBWVePQ==", "dev": true, - "license": "MIT", - "dependencies": { - "@rtsao/scc": "^1.1.0", - "array-includes": "^3.1.9", - "array.prototype.findlastindex": "^1.2.6", - "array.prototype.flat": "^1.3.3", - "array.prototype.flatmap": "^1.3.3", - "debug": "^3.2.7", - "doctrine": "^2.1.0", - "eslint-import-resolver-node": "^0.3.9", - "eslint-module-utils": "^2.12.1", - "hasown": "^2.0.2", - "is-core-module": "^2.16.1", - "is-glob": "^4.0.3", - "minimatch": "^3.1.2", - "object.fromentries": "^2.0.8", - "object.groupby": "^1.0.3", - "object.values": "^1.2.1", - "semver": "^6.3.1", - "string.prototype.trimend": "^1.0.9", - "tsconfig-paths": "^3.15.0" - }, + "license": "Apache-2.0", "engines": { - "node": ">=4" + "node": ">=16.17.0" + } + }, + "node_modules/lint-staged/node_modules/is-stream": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-3.0.0.tgz", + "integrity": "sha512-LnQR4bZ9IADDRSkvpqMGvt/tEJWclzklNgSw48V5EAaAeDd6qGvN8ei6k5p0tvxSR171VmGyHuTiAOfxAbr8kA==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" }, - "peerDependencies": { - "eslint": "^2 || ^3 || ^4 || ^5 || ^6 || ^7.2.0 || ^8 || ^9" + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/eslint-plugin-import/node_modules/debug": { - "version": "3.2.7", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", - "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", + "node_modules/lint-staged/node_modules/mimic-fn": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-4.0.0.tgz", + "integrity": "sha512-vqiC06CuhBTUdZH+RYl8sFrL096vA45Ok5ISO6sE/Mr1jRbGH4Csnhi8f3wKVl7x8mO4Au7Ir9D3Oyv1VYMFJw==", "dev": true, "license": "MIT", - "dependencies": { - "ms": "^2.1.1" + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/eslint-plugin-import/node_modules/doctrine": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz", - "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==", + "node_modules/lint-staged/node_modules/npm-run-path": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-5.3.0.tgz", + "integrity": "sha512-ppwTtiJZq0O/ai0z7yfudtBpWIoxM8yE6nHi1X47eFR2EWORqfbu6CnPlNsjeN683eT0qG6H/Pyf9fCcvjnnnQ==", "dev": true, - "license": "Apache-2.0", + "license": "MIT", "dependencies": { - "esutils": "^2.0.2" + "path-key": "^4.0.0" }, "engines": { - "node": ">=0.10.0" + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/eslint-plugin-import/node_modules/json5": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.2.tgz", - "integrity": "sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA==", + "node_modules/lint-staged/node_modules/onetime": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-6.0.0.tgz", + "integrity": "sha512-1FlR+gjXK7X+AsAHso35MnyN5KqGwJRi/31ft6x0M194ht7S+rWAvd7PHss9xSKMzE0asv1pyIHaJYq+BbacAQ==", "dev": true, "license": "MIT", "dependencies": { - "minimist": "^1.2.0" + "mimic-fn": "^4.0.0" }, - "bin": { - "json5": "lib/cli.js" + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/eslint-plugin-import/node_modules/strip-bom": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", - "integrity": "sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==", + "node_modules/lint-staged/node_modules/path-key": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-4.0.0.tgz", + "integrity": "sha512-haREypq7xkM7ErfgIyA0z+Bj4AGKlMSdlQE2jvJo6huWD1EdkKYV+G/T4nq0YEF2vgTT8kqMFKo1uHn950r4SQ==", "dev": true, "license": "MIT", "engines": { - "node": ">=4" + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/eslint-plugin-import/node_modules/tsconfig-paths": { - "version": "3.15.0", - "resolved": "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-3.15.0.tgz", - "integrity": "sha512-2Ac2RgzDe/cn48GvOe3M+o82pEFewD3UPbyoUHHdKasHwJKjds4fLXWf/Ux5kATBKN20oaFGu+jbElp1pos0mg==", + "node_modules/lint-staged/node_modules/strip-final-newline": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-3.0.0.tgz", + "integrity": "sha512-dOESqjYr96iWYylGObzd39EuNTa5VJxyvVAEm5Jnh7KGo75V43Hk1odPQkNDyXNmUR6k+gEiDVXnjB8HJ3crXw==", "dev": true, "license": "MIT", - "dependencies": { - "@types/json5": "^0.0.29", - "json5": "^1.0.2", - "minimist": "^1.2.6", - "strip-bom": "^3.0.0" + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/eslint-plugin-jest": { - "version": "27.9.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-jest/-/eslint-plugin-jest-27.9.0.tgz", - "integrity": "sha512-QIT7FH7fNmd9n4se7FFKHbsLKGQiw885Ds6Y/sxKgCZ6natwCsXdgPOADnYVxN2QrRweF0FZWbJ6S7Rsn7llug==", + "node_modules/listr2": { + "version": "8.3.3", + "resolved": "https://registry.npmjs.org/listr2/-/listr2-8.3.3.tgz", + "integrity": "sha512-LWzX2KsqcB1wqQ4AHgYb4RsDXauQiqhjLk+6hjbaeHG4zpjjVAB6wC/gz6X0l+Du1cN3pUB5ZlrvTbhGSNnUQQ==", "dev": true, "license": "MIT", "dependencies": { - "@typescript-eslint/utils": "^5.10.0" + "cli-truncate": "^4.0.0", + "colorette": "^2.0.20", + "eventemitter3": "^5.0.1", + "log-update": "^6.1.0", + "rfdc": "^1.4.1", + "wrap-ansi": "^9.0.0" }, "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - }, - "peerDependencies": { - "@typescript-eslint/eslint-plugin": "^5.0.0 || ^6.0.0 || ^7.0.0", - "eslint": "^7.0.0 || ^8.0.0", - "jest": "*" - }, - "peerDependenciesMeta": { - "@typescript-eslint/eslint-plugin": { - "optional": true - }, - "jest": { - "optional": true - } + "node": ">=18.0.0" } }, - "node_modules/eslint-plugin-jest/node_modules/@typescript-eslint/scope-manager": { - "version": "5.62.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.62.0.tgz", - "integrity": "sha512-VXuvVvZeQCQb5Zgf4HAxc04q5j+WrNAtNh9OwCsCgpKqESMTu3tF/jhZ3xG6T4NZwWl65Bg8KuS2uEvhSfLl0w==", + "node_modules/listr2/node_modules/ansi-regex": { + "version": "6.2.2", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.2.2.tgz", + "integrity": "sha512-Bq3SmSpyFHaWjPk8If9yc6svM8c56dB5BAtW4Qbw5jHTwwXXcTLoRMkpDJp6VL0XzlWaCHTXrkFURMYmD0sLqg==", "dev": true, "license": "MIT", - "dependencies": { - "@typescript-eslint/types": "5.62.0", - "@typescript-eslint/visitor-keys": "5.62.0" - }, "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + "node": ">=12" }, "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" + "url": "https://github.com/chalk/ansi-regex?sponsor=1" } }, - "node_modules/eslint-plugin-jest/node_modules/@typescript-eslint/types": { - "version": "5.62.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.62.0.tgz", - "integrity": "sha512-87NVngcbVXUahrRTqIK27gD2t5Cu1yuCXxbLcFtCzZGlfyVWWh8mLHkoxzjsB6DDNnvdL+fW8MiwPEJyGJQDgQ==", + "node_modules/listr2/node_modules/ansi-styles": { + "version": "6.2.3", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.3.tgz", + "integrity": "sha512-4Dj6M28JB+oAH8kFkTLUo+a2jwOFkuqb3yucU0CANcRRUbxS0cP0nZYCGjcc3BNXwRIsUVmDGgzawme7zvJHvg==", "dev": true, "license": "MIT", "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + "node": ">=12" }, "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" + "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/eslint-plugin-jest/node_modules/@typescript-eslint/typescript-estree": { - "version": "5.62.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.62.0.tgz", - "integrity": "sha512-CmcQ6uY7b9y694lKdRB8FEel7JbU/40iSAPomu++SjLMntB+2Leay2LO6i8VnJk58MtE9/nQSFIH6jpyRWyYzA==", + "node_modules/listr2/node_modules/emoji-regex": { + "version": "10.5.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-10.5.0.tgz", + "integrity": "sha512-lb49vf1Xzfx080OKA0o6l8DQQpV+6Vg95zyCJX9VB/BqKYlhG7N4wgROUUHRA+ZPUefLnteQOad7z1kT2bV7bg==", "dev": true, - "license": "BSD-2-Clause", + "license": "MIT" + }, + "node_modules/listr2/node_modules/string-width": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-7.2.0.tgz", + "integrity": "sha512-tsaTIkKW9b4N+AEj+SVA+WhJzV7/zMhcSu78mLKWSk7cXMOSHsBKFWUs0fWwq8QyK3MgJBQRX6Gbi4kYbdvGkQ==", + "dev": true, + "license": "MIT", "dependencies": { - "@typescript-eslint/types": "5.62.0", - "@typescript-eslint/visitor-keys": "5.62.0", - "debug": "^4.3.4", - "globby": "^11.1.0", - "is-glob": "^4.0.3", - "semver": "^7.3.7", - "tsutils": "^3.21.0" + "emoji-regex": "^10.3.0", + "get-east-asian-width": "^1.0.0", + "strip-ansi": "^7.1.0" }, "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + "node": ">=18" }, "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/eslint-plugin-jest/node_modules/@typescript-eslint/utils": { - "version": "5.62.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-5.62.0.tgz", - "integrity": "sha512-n8oxjeb5aIbPFEtmQxQYOLI0i9n5ySBEY/ZEHHZqKQSFnxio1rv6dthascc9dLuwrL0RC5mPCxB7vnAVGAYWAQ==", + "node_modules/listr2/node_modules/strip-ansi": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.2.tgz", + "integrity": "sha512-gmBGslpoQJtgnMAvOVqGZpEz9dyoKTCzy2nfz/n8aIFhN/jCE/rCmcxabB6jOOHV+0WNnylOxaxBQPSvcWklhA==", "dev": true, "license": "MIT", "dependencies": { - "@eslint-community/eslint-utils": "^4.2.0", - "@types/json-schema": "^7.0.9", - "@types/semver": "^7.3.12", - "@typescript-eslint/scope-manager": "5.62.0", - "@typescript-eslint/types": "5.62.0", - "@typescript-eslint/typescript-estree": "5.62.0", - "eslint-scope": "^5.1.1", - "semver": "^7.3.7" + "ansi-regex": "^6.0.1" }, "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + "node": ">=12" }, "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependencies": { - "eslint": "^6.0.0 || ^7.0.0 || ^8.0.0" + "url": "https://github.com/chalk/strip-ansi?sponsor=1" } }, - "node_modules/eslint-plugin-jest/node_modules/@typescript-eslint/visitor-keys": { - "version": "5.62.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.62.0.tgz", - "integrity": "sha512-07ny+LHRzQXepkGg6w0mFY41fVUNBrL2Roj/++7V1txKugfjm/Ci/qSND03r2RhlJhJYMcTn9AhhSSqQp0Ysyw==", + "node_modules/listr2/node_modules/wrap-ansi": { + "version": "9.0.2", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-9.0.2.tgz", + "integrity": "sha512-42AtmgqjV+X1VpdOfyTGOYRi0/zsoLqtXQckTmqTeybT+BDIbM/Guxo7x3pE2vtpr1ok6xRqM9OpBe+Jyoqyww==", "dev": true, "license": "MIT", "dependencies": { - "@typescript-eslint/types": "5.62.0", - "eslint-visitor-keys": "^3.3.0" + "ansi-styles": "^6.2.1", + "string-width": "^7.0.0", + "strip-ansi": "^7.1.0" }, "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + "node": ">=18" }, "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" } }, - "node_modules/eslint-plugin-jest/node_modules/eslint-scope": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", - "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==", + "node_modules/lit": { + "version": "2.8.0", + "resolved": "https://registry.npmjs.org/lit/-/lit-2.8.0.tgz", + "integrity": "sha512-4Sc3OFX9QHOJaHbmTMk28SYgVxLN3ePDjg7hofEft2zWlehFL3LiAuapWc4U/kYwMYJSh2hTCPZ6/LIC7ii0MA==", + "license": "BSD-3-Clause", + "dependencies": { + "@lit/reactive-element": "^1.6.0", + "lit-element": "^3.3.0", + "lit-html": "^2.8.0" + } + }, + "node_modules/lit-element": { + "version": "3.3.3", + "resolved": "https://registry.npmjs.org/lit-element/-/lit-element-3.3.3.tgz", + "integrity": "sha512-XbeRxmTHubXENkV4h8RIPyr8lXc+Ff28rkcQzw3G6up2xg5E8Zu1IgOWIwBLEQsu3cOVFqdYwiVi0hv0SlpqUA==", + "license": "BSD-3-Clause", + "dependencies": { + "@lit-labs/ssr-dom-shim": "^1.1.0", + "@lit/reactive-element": "^1.3.0", + "lit-html": "^2.8.0" + } + }, + "node_modules/lit-html": { + "version": "2.8.0", + "resolved": "https://registry.npmjs.org/lit-html/-/lit-html-2.8.0.tgz", + "integrity": "sha512-o9t+MQM3P4y7M7yNzqAyjp7z+mQGa4NS4CxiyLqFPyFWyc4O+nodLrkrxSaCTrla6M5YOLaT3RpbbqjszB5g3Q==", + "license": "BSD-3-Clause", + "dependencies": { + "@types/trusted-types": "^2.0.2" + } + }, + "node_modules/load-json-file": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-4.0.0.tgz", + "integrity": "sha512-Kx8hMakjX03tiGTLAIdJ+lL0htKnXjEZN6hk/tozf/WOuYGdZBJrZ+rCJRbVCugsjB3jMLn9746NsQIf5VjBMw==", "dev": true, - "license": "BSD-2-Clause", + "license": "MIT", "dependencies": { - "esrecurse": "^4.3.0", - "estraverse": "^4.1.1" + "graceful-fs": "^4.1.2", + "parse-json": "^4.0.0", + "pify": "^3.0.0", + "strip-bom": "^3.0.0" }, "engines": { - "node": ">=8.0.0" + "node": ">=4" } }, - "node_modules/eslint-plugin-jest/node_modules/estraverse": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", - "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", + "node_modules/load-json-file/node_modules/parse-json": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-4.0.0.tgz", + "integrity": "sha512-aOIos8bujGN93/8Ox/jPLh7RwVnPEysynVFE+fQZyg6jKELEHwzgKdLRFHUgXJL6kylijVSBC4BvN9OmsB48Rw==", "dev": true, - "license": "BSD-2-Clause", + "license": "MIT", + "dependencies": { + "error-ex": "^1.3.1", + "json-parse-better-errors": "^1.0.1" + }, "engines": { - "node": ">=4.0" + "node": ">=4" } }, - "node_modules/eslint-plugin-jest/node_modules/semver": { - "version": "7.7.2", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.2.tgz", - "integrity": "sha512-RF0Fw+rO5AMf9MAyaRXI4AV0Ulj5lMHqVxxdSgiVbixSCXoEmmX/jk0CuJw4+3SqroYO9VoUh+HcuJivvtJemA==", + "node_modules/load-json-file/node_modules/strip-bom": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", + "integrity": "sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==", "dev": true, - "license": "ISC", - "bin": { - "semver": "bin/semver.js" - }, + "license": "MIT", "engines": { - "node": ">=10" + "node": ">=4" } }, - "node_modules/eslint-plugin-license-header": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/eslint-plugin-license-header/-/eslint-plugin-license-header-0.6.1.tgz", - "integrity": "sha512-9aIz8q3OaMr1/uQmCGCWySjTs5nEXUJexNegz/8lluNcZbEl82Ag1Vyr1Hu3oIveRW1NbXDPs6nu4zu9mbrmWA==", - "dev": true, + "node_modules/loader-runner": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/loader-runner/-/loader-runner-4.3.1.tgz", + "integrity": "sha512-IWqP2SCPhyVFTBtRcgMHdzlf9ul25NwaFx4wCEH/KjAXuuHY4yNjvPXsBokp8jCB936PyWRaPKUNh8NvylLp2Q==", + "license": "MIT", + "engines": { + "node": ">=6.11.5" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + } + }, + "node_modules/loader-utils": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-2.0.4.tgz", + "integrity": "sha512-xXqpXoINfFhgua9xiqD8fPFHgkoq1mmmpE92WlDbm9rNRd/EbRb+Gqf908T2DMfuHjjJlksiK2RbHVOdD/MqSw==", "license": "MIT", "dependencies": { - "requireindex": "^1.2.0" + "big.js": "^5.2.2", + "emojis-list": "^3.0.0", + "json5": "^2.1.2" + }, + "engines": { + "node": ">=8.9.0" } }, - "node_modules/eslint-plugin-prettier": { - "version": "5.5.4", - "resolved": "https://registry.npmjs.org/eslint-plugin-prettier/-/eslint-plugin-prettier-5.5.4.tgz", - "integrity": "sha512-swNtI95SToIz05YINMA6Ox5R057IMAmWZ26GqPxusAp1TZzj+IdY9tXNWWD3vkF/wEqydCONcwjTFpxybBqZsg==", + "node_modules/local-pkg": { + "version": "0.5.1", + "resolved": "https://registry.npmjs.org/local-pkg/-/local-pkg-0.5.1.tgz", + "integrity": "sha512-9rrA30MRRP3gBD3HTGnC6cDFpaE1kVDWxWgqWJUN0RvDNAo+Nz/9GxB+nHOH0ifbVFy0hSA1V6vFDvnx54lTEQ==", "dev": true, "license": "MIT", "dependencies": { - "prettier-linter-helpers": "^1.0.0", - "synckit": "^0.11.7" + "mlly": "^1.7.3", + "pkg-types": "^1.2.1" }, "engines": { - "node": "^14.18.0 || >=16.0.0" + "node": ">=14" }, "funding": { - "url": "https://opencollective.com/eslint-plugin-prettier" + "url": "https://github.com/sponsors/antfu" + } + }, + "node_modules/locate-path": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", + "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", + "dev": true, + "license": "MIT", + "dependencies": { + "p-locate": "^5.0.0" }, - "peerDependencies": { - "@types/eslint": ">=8.0.0", - "eslint": ">=8.0.0", - "eslint-config-prettier": ">= 7.0.0 <10.0.0 || >=10.1.0", - "prettier": ">=3.0.0" + "engines": { + "node": ">=10" }, - "peerDependenciesMeta": { - "@types/eslint": { - "optional": true - }, - "eslint-config-prettier": { - "optional": true - } + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/eslint-plugin-prettier/node_modules/@pkgr/core": { - "version": "0.2.9", - "resolved": "https://registry.npmjs.org/@pkgr/core/-/core-0.2.9.tgz", - "integrity": "sha512-QNqXyfVS2wm9hweSYD2O7F0G06uurj9kZ96TRQE5Y9hU7+tgdZwIkbAKc5Ocy1HxEY2kuDQa6cQ1WRs/O5LFKA==", + "node_modules/lock": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/lock/-/lock-1.1.0.tgz", + "integrity": "sha512-NZQIJJL5Rb9lMJ0Yl1JoVr9GSdo4HTPsUEWsSFzB8dE8DSoiLCVavWZPi7Rnlv/o73u6I24S/XYc/NmG4l8EKA==", + "license": "MIT" + }, + "node_modules/lodash": { + "version": "4.17.21", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", + "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", + "license": "MIT" + }, + "node_modules/lodash-es": { + "version": "4.17.22", + "resolved": "https://registry.npmjs.org/lodash-es/-/lodash-es-4.17.22.tgz", + "integrity": "sha512-XEawp1t0gxSi9x01glktRZ5HDy0HXqrM0x5pXQM98EaI0NxO6jVM7omDOxsuEo5UIASAnm2bRp1Jt/e0a2XU8Q==", + "license": "MIT" + }, + "node_modules/lodash.camelcase": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/lodash.camelcase/-/lodash.camelcase-4.3.0.tgz", + "integrity": "sha512-TwuEnCnxbc3rAvhf/LbG7tJUDzhqXyFnv3dtzLOPgCG/hODL7WFnsbwktkD7yUV0RrreP/l1PALq/YSg6VvjlA==", + "license": "MIT" + }, + "node_modules/lodash.debounce": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/lodash.debounce/-/lodash.debounce-4.0.8.tgz", + "integrity": "sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow==", + "license": "MIT" + }, + "node_modules/lodash.defaults": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/lodash.defaults/-/lodash.defaults-4.2.0.tgz", + "integrity": "sha512-qjxPLHd3r5DnsdGacqOMU6pb/avJzdh9tFX2ymgoZE27BmjXrNy/y4LoaiTeAb+O3gL8AfpJGtqfX/ae2leYYQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/lodash.difference": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/lodash.difference/-/lodash.difference-4.5.0.tgz", + "integrity": "sha512-dS2j+W26TQ7taQBGN8Lbbq04ssV3emRw4NY58WErlTO29pIqS0HmoT5aJ9+TUQ1N3G+JOZSji4eugsWwGp9yPA==", + "dev": true, + "license": "MIT" + }, + "node_modules/lodash.flatten": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/lodash.flatten/-/lodash.flatten-4.4.0.tgz", + "integrity": "sha512-C5N2Z3DgnnKr0LOpv/hKCgKdb7ZZwafIrsesve6lmzvZIRZRGaZ/l6Q8+2W7NaT+ZwO3fFlSCzCzrDCFdJfZ4g==", + "dev": true, + "license": "MIT" + }, + "node_modules/lodash.flattendeep": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/lodash.flattendeep/-/lodash.flattendeep-4.4.0.tgz", + "integrity": "sha512-uHaJFihxmJcEX3kT4I23ABqKKalJ/zDrDg0lsFtc1h+3uw49SIJ5beyhx5ExVRti3AvKoOJngIj7xz3oylPdWQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/lodash.isequal": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/lodash.isequal/-/lodash.isequal-4.5.0.tgz", + "integrity": "sha512-pDo3lu8Jhfjqls6GkMgpahsF9kCyayhgykjyLMNFTKWrpVdAQtYyB4muAMWozBB4ig/dtWAmsMxLEI8wuz+DYQ==", + "deprecated": "This package is deprecated. Use require('node:util').isDeepStrictEqual instead.", + "license": "MIT" + }, + "node_modules/lodash.isplainobject": { + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/lodash.isplainobject/-/lodash.isplainobject-4.0.6.tgz", + "integrity": "sha512-oSXzaWypCMHkPC3NvBEaPHf0KsA5mvPrOPgQWDsbg8n7orZ290M0BmC/jgRZ4vcJ6DTAhjrsSYgdsW/F+MFOBA==", + "dev": true, + "license": "MIT" + }, + "node_modules/lodash.kebabcase": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/lodash.kebabcase/-/lodash.kebabcase-4.1.1.tgz", + "integrity": "sha512-N8XRTIMMqqDgSy4VLKPnJ/+hpGZN+PHQiJnSenYqPaVV/NCqEogTnAdZLQiGKhxX+JCs8waWq2t1XHWKOmlY8g==", + "dev": true, + "license": "MIT" + }, + "node_modules/lodash.memoize": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/lodash.memoize/-/lodash.memoize-4.1.2.tgz", + "integrity": "sha512-t7j+NzmgnQzTAYXcsHYLgimltOV1MXHtlOWf6GjL9Kj8GK5FInw5JotxvbOs+IvV1/Dzo04/fCGfLVs7aXb4Ag==", + "license": "MIT" + }, + "node_modules/lodash.merge": { + "version": "4.6.2", + "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", + "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", + "license": "MIT" + }, + "node_modules/lodash.mergewith": { + "version": "4.6.2", + "resolved": "https://registry.npmjs.org/lodash.mergewith/-/lodash.mergewith-4.6.2.tgz", + "integrity": "sha512-GK3g5RPZWTRSeLSpgP8Xhra+pnjBC56q9FZYe1d5RN3TJ35dbkGy3YqBSMbyCrlbi+CM9Z3Jk5yTL7RCsqboyQ==", + "license": "MIT" + }, + "node_modules/lodash.snakecase": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/lodash.snakecase/-/lodash.snakecase-4.1.1.tgz", + "integrity": "sha512-QZ1d4xoBHYUeuouhEq3lk3Uq7ldgyFXGBhg04+oRLnIz8o9T65Eh+8YdroUwn846zchkA9yDsDl5CVVaV2nqYw==", + "dev": true, + "license": "MIT" + }, + "node_modules/lodash.startcase": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/lodash.startcase/-/lodash.startcase-4.4.0.tgz", + "integrity": "sha512-+WKqsK294HMSc2jEbNgpHpd0JfIBhp7rEV4aqXWqFr6AlXov+SlcgB1Fv01y2kGe3Gc8nMW7VA0SrGuSkRfIEg==", + "dev": true, + "license": "MIT" + }, + "node_modules/lodash.throttle": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/lodash.throttle/-/lodash.throttle-4.1.1.tgz", + "integrity": "sha512-wIkUCfVKpVsWo3JSZlc+8MB5it+2AN5W8J7YVMST30UrvcQNZ1Okbj+rbVniijTWE6FGYy4XJq/rHkas8qJMLQ==", + "license": "MIT" + }, + "node_modules/lodash.truncate": { + "version": "4.4.2", + "resolved": "https://registry.npmjs.org/lodash.truncate/-/lodash.truncate-4.4.2.tgz", + "integrity": "sha512-jttmRe7bRse52OsWIMDLaXxWqRAmtIUccAQ3garviCqJjafXOfNMO0yMfNpdD6zbGaTU0P5Nz7e7gAT6cKmJRw==", + "dev": true, + "license": "MIT" + }, + "node_modules/lodash.union": { + "version": "4.6.0", + "resolved": "https://registry.npmjs.org/lodash.union/-/lodash.union-4.6.0.tgz", + "integrity": "sha512-c4pB2CdGrGdjMKYLA+XiRDO7Y0PRQbm/Gzg8qMj+QH+pFVAoTp5sBpO0odL3FjoPCGjK96p6qsP+yQoiLoOBcw==", + "dev": true, + "license": "MIT" + }, + "node_modules/lodash.uniq": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/lodash.uniq/-/lodash.uniq-4.5.0.tgz", + "integrity": "sha512-xfBaXQd9ryd9dlSDvnvI0lvxfLJlYAZzXomUYzLKtUeOQvOP5piqAWuGtrhWeqaXK9hhoM/iyJc5AV+XfsX3HQ==", + "license": "MIT" + }, + "node_modules/lodash.upperfirst": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/lodash.upperfirst/-/lodash.upperfirst-4.3.1.tgz", + "integrity": "sha512-sReKOYJIJf74dhJONhU4e0/shzi1trVbSWDOhKYE5XV2O+H7Sb2Dihwuc7xWxVl+DgFPyTqIN3zMfT9cq5iWDg==", "dev": true, + "license": "MIT" + }, + "node_modules/log-symbols": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-4.1.0.tgz", + "integrity": "sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==", "license": "MIT", + "dependencies": { + "chalk": "^4.1.0", + "is-unicode-supported": "^0.1.0" + }, "engines": { - "node": "^12.20.0 || ^14.18.0 || >=16.0.0" + "node": ">=10" }, "funding": { - "url": "https://opencollective.com/pkgr" + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/eslint-plugin-prettier/node_modules/synckit": { - "version": "0.11.11", - "resolved": "https://registry.npmjs.org/synckit/-/synckit-0.11.11.tgz", - "integrity": "sha512-MeQTA1r0litLUf0Rp/iisCaL8761lKAZHaimlbGK4j0HysC4PLfqygQj9srcs0m2RdtDYnF8UuYyKpbjHYp7Jw==", + "node_modules/log-update": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/log-update/-/log-update-6.1.0.tgz", + "integrity": "sha512-9ie8ItPR6tjY5uYJh8K/Zrv/RMZ5VOlOWvtZdEHYSTFKZfIBPQa9tOAEeAWhd+AnIneLJ22w5fjOYtoutpWq5w==", "dev": true, "license": "MIT", "dependencies": { - "@pkgr/core": "^0.2.9" + "ansi-escapes": "^7.0.0", + "cli-cursor": "^5.0.0", + "slice-ansi": "^7.1.0", + "strip-ansi": "^7.1.0", + "wrap-ansi": "^9.0.0" }, "engines": { - "node": "^14.18.0 || >=16.0.0" + "node": ">=18" }, "funding": { - "url": "https://opencollective.com/synckit" + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/eslint-plugin-react": { - "version": "7.34.1", - "resolved": "https://registry.npmjs.org/eslint-plugin-react/-/eslint-plugin-react-7.34.1.tgz", - "integrity": "sha512-N97CxlouPT1AHt8Jn0mhhN2RrADlUAsk1/atcT2KyA/l9Q/E6ll7OIGwNumFmWfZ9skV3XXccYS19h80rHtgkw==", + "node_modules/log-update/node_modules/ansi-escapes": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-7.1.1.tgz", + "integrity": "sha512-Zhl0ErHcSRUaVfGUeUdDuLgpkEo8KIFjB4Y9uAc46ScOpdDiU1Dbyplh7qWJeJ/ZHpbyMSM26+X3BySgnIz40Q==", "dev": true, "license": "MIT", "dependencies": { - "array-includes": "^3.1.7", - "array.prototype.findlast": "^1.2.4", - "array.prototype.flatmap": "^1.3.2", - "array.prototype.toreversed": "^1.1.2", - "array.prototype.tosorted": "^1.1.3", - "doctrine": "^2.1.0", - "es-iterator-helpers": "^1.0.17", - "estraverse": "^5.3.0", - "jsx-ast-utils": "^2.4.1 || ^3.0.0", - "minimatch": "^3.1.2", - "object.entries": "^1.1.7", - "object.fromentries": "^2.0.7", - "object.hasown": "^1.1.3", - "object.values": "^1.1.7", - "prop-types": "^15.8.1", - "resolve": "^2.0.0-next.5", - "semver": "^6.3.1", - "string.prototype.matchall": "^4.0.10" + "environment": "^1.0.0" }, "engines": { - "node": ">=4" + "node": ">=18" }, - "peerDependencies": { - "eslint": "^3 || ^4 || ^5 || ^6 || ^7 || ^8" + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/eslint-plugin-react-hooks": { - "version": "4.6.2", - "resolved": "https://registry.npmjs.org/eslint-plugin-react-hooks/-/eslint-plugin-react-hooks-4.6.2.tgz", - "integrity": "sha512-QzliNJq4GinDBcD8gPB5v0wh6g8q3SUi6EFF0x8N/BL9PoVs0atuGc47ozMRyOWAKdwaZ5OnbOEa3WR+dSGKuQ==", + "node_modules/log-update/node_modules/ansi-regex": { + "version": "6.2.2", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.2.2.tgz", + "integrity": "sha512-Bq3SmSpyFHaWjPk8If9yc6svM8c56dB5BAtW4Qbw5jHTwwXXcTLoRMkpDJp6VL0XzlWaCHTXrkFURMYmD0sLqg==", "dev": true, "license": "MIT", "engines": { - "node": ">=10" + "node": ">=12" }, - "peerDependencies": { - "eslint": "^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0-0" + "funding": { + "url": "https://github.com/chalk/ansi-regex?sponsor=1" } }, - "node_modules/eslint-plugin-react-refresh": { - "version": "0.3.5", - "resolved": "https://registry.npmjs.org/eslint-plugin-react-refresh/-/eslint-plugin-react-refresh-0.3.5.tgz", - "integrity": "sha512-61qNIsc7fo9Pp/mju0J83kzvLm0Bsayu7OQSLEoJxLDCBjIIyb87bkzufoOvdDxLkSlMfkF7UxomC4+eztUBSA==", + "node_modules/log-update/node_modules/ansi-styles": { + "version": "6.2.3", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.3.tgz", + "integrity": "sha512-4Dj6M28JB+oAH8kFkTLUo+a2jwOFkuqb3yucU0CANcRRUbxS0cP0nZYCGjcc3BNXwRIsUVmDGgzawme7zvJHvg==", "dev": true, "license": "MIT", - "peerDependencies": { - "eslint": ">=7" - } - }, - "node_modules/eslint-plugin-react/node_modules/doctrine": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz", - "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "esutils": "^2.0.2" - }, "engines": { - "node": ">=0.10.0" + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/eslint-plugin-react/node_modules/resolve": { - "version": "2.0.0-next.5", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-2.0.0-next.5.tgz", - "integrity": "sha512-U7WjGVG9sH8tvjW5SmGbQuui75FiyjAX72HX15DwBBwF9dNiQZRQAg9nnPhYy+TUnE0+VcrttuvNI8oSxZcocA==", + "node_modules/log-update/node_modules/cli-cursor": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-5.0.0.tgz", + "integrity": "sha512-aCj4O5wKyszjMmDT4tZj93kxyydN/K5zPWSCe6/0AV/AA1pqe5ZBIw0a2ZfPQV7lL5/yb5HsUreJ6UFAF1tEQw==", "dev": true, "license": "MIT", "dependencies": { - "is-core-module": "^2.13.0", - "path-parse": "^1.0.7", - "supports-preserve-symlinks-flag": "^1.0.0" + "restore-cursor": "^5.0.0" }, - "bin": { - "resolve": "bin/resolve" + "engines": { + "node": ">=18" }, "funding": { - "url": "https://github.com/sponsors/ljharb" + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/eslint-plugin-unused-imports": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-unused-imports/-/eslint-plugin-unused-imports-4.2.0.tgz", - "integrity": "sha512-hLbJ2/wnjKq4kGA9AUaExVFIbNzyxYdVo49QZmKCnhk5pc9wcYRbfgLHvWJ8tnsdcseGhoUAddm9gn/lt+d74w==", + "node_modules/log-update/node_modules/emoji-regex": { + "version": "10.5.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-10.5.0.tgz", + "integrity": "sha512-lb49vf1Xzfx080OKA0o6l8DQQpV+6Vg95zyCJX9VB/BqKYlhG7N4wgROUUHRA+ZPUefLnteQOad7z1kT2bV7bg==", "dev": true, - "license": "MIT", - "peerDependencies": { - "@typescript-eslint/eslint-plugin": "^8.0.0-0 || ^7.0.0 || ^6.0.0 || ^5.0.0", - "eslint": "^9.0.0 || ^8.0.0" - }, - "peerDependenciesMeta": { - "@typescript-eslint/eslint-plugin": { - "optional": true - } - } + "license": "MIT" }, - "node_modules/eslint-rule-composer": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/eslint-rule-composer/-/eslint-rule-composer-0.3.0.tgz", - "integrity": "sha512-bt+Sh8CtDmn2OajxvNO+BX7Wn4CIWMpTRm3MaiKPCQcnnlm0CS2mhui6QaoeQugs+3Kj2ESKEEGJUdVafwhiCg==", + "node_modules/log-update/node_modules/is-fullwidth-code-point": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-5.1.0.tgz", + "integrity": "sha512-5XHYaSyiqADb4RnZ1Bdad6cPp8Toise4TzEjcOYDHZkTCbKgiUl7WTUCpNWHuxmDt91wnsZBc9xinNzopv3JMQ==", "dev": true, "license": "MIT", - "engines": { - "node": ">=4.0.0" - } - }, - "node_modules/eslint-scope": { - "version": "7.2.2", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.2.2.tgz", - "integrity": "sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg==", - "dev": true, - "license": "BSD-2-Clause", "dependencies": { - "esrecurse": "^4.3.0", - "estraverse": "^5.2.0" + "get-east-asian-width": "^1.3.1" }, "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + "node": ">=18" }, "funding": { - "url": "https://opencollective.com/eslint" + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/eslint-visitor-keys": { - "version": "3.4.3", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz", - "integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==", + "node_modules/log-update/node_modules/onetime": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-7.0.0.tgz", + "integrity": "sha512-VXJjc87FScF88uafS3JllDgvAm+c/Slfz06lorj2uAY34rlUu0Nt+v8wreiImcrgAjjIHp1rXpTDlLOGw29WwQ==", "dev": true, - "license": "Apache-2.0", + "license": "MIT", + "dependencies": { + "mimic-function": "^5.0.0" + }, "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + "node": ">=18" }, "funding": { - "url": "https://opencollective.com/eslint" + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/eslint/node_modules/@eslint/eslintrc": { - "version": "2.1.4", - "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-2.1.4.tgz", - "integrity": "sha512-269Z39MS6wVJtsoUl10L60WdkhJVdPG24Q4eZTH3nnF6lpvSShEK3wQjDX9JRWAUPvPh7COouPpU9IrqaZFvtQ==", + "node_modules/log-update/node_modules/restore-cursor": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-5.1.0.tgz", + "integrity": "sha512-oMA2dcrw6u0YfxJQXm342bFKX/E4sG9rbTzO9ptUcR/e8A33cHuvStiYOwH7fszkZlZ1z/ta9AAoPk2F4qIOHA==", "dev": true, "license": "MIT", "dependencies": { - "ajv": "^6.12.4", - "debug": "^4.3.2", - "espree": "^9.6.0", - "globals": "^13.19.0", - "ignore": "^5.2.0", - "import-fresh": "^3.2.1", - "js-yaml": "^4.1.0", - "minimatch": "^3.1.2", - "strip-json-comments": "^3.1.1" + "onetime": "^7.0.0", + "signal-exit": "^4.1.0" }, "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + "node": ">=18" }, "funding": { - "url": "https://opencollective.com/eslint" + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/eslint/node_modules/@eslint/js": { - "version": "8.57.1", - "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.57.1.tgz", - "integrity": "sha512-d9zaMRSTIKDLhctzH12MtXvJKSSUhaHcjV+2Z+GK+EEY7XKpP5yR4x+N3TAcHTcu963nIr+TMcCb4DBCYX1z6Q==", + "node_modules/log-update/node_modules/slice-ansi": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-7.1.2.tgz", + "integrity": "sha512-iOBWFgUX7caIZiuutICxVgX1SdxwAVFFKwt1EvMYYec/NWO5meOJ6K5uQxhrYBdQJne4KxiqZc+KptFOWFSI9w==", "dev": true, "license": "MIT", - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - } - }, - "node_modules/eslint/node_modules/@humanwhocodes/config-array": { - "version": "0.13.0", - "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.13.0.tgz", - "integrity": "sha512-DZLEEqFWQFiyK6h5YIeynKx7JlvCYWL0cImfSRXZ9l4Sg2efkFGTuFf6vzXjK1cq6IYkU+Eg/JizXw+TD2vRNw==", - "deprecated": "Use @eslint/config-array instead", - "dev": true, - "license": "Apache-2.0", "dependencies": { - "@humanwhocodes/object-schema": "^2.0.3", - "debug": "^4.3.1", - "minimatch": "^3.0.5" + "ansi-styles": "^6.2.1", + "is-fullwidth-code-point": "^5.0.0" }, "engines": { - "node": ">=10.10.0" + "node": ">=18" + }, + "funding": { + "url": "https://github.com/chalk/slice-ansi?sponsor=1" } }, - "node_modules/eslint/node_modules/globals": { - "version": "13.24.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-13.24.0.tgz", - "integrity": "sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==", + "node_modules/log-update/node_modules/string-width": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-7.2.0.tgz", + "integrity": "sha512-tsaTIkKW9b4N+AEj+SVA+WhJzV7/zMhcSu78mLKWSk7cXMOSHsBKFWUs0fWwq8QyK3MgJBQRX6Gbi4kYbdvGkQ==", "dev": true, "license": "MIT", "dependencies": { - "type-fest": "^0.20.2" + "emoji-regex": "^10.3.0", + "get-east-asian-width": "^1.0.0", + "strip-ansi": "^7.1.0" }, "engines": { - "node": ">=8" + "node": ">=18" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/espree": { - "version": "9.6.1", - "resolved": "https://registry.npmjs.org/espree/-/espree-9.6.1.tgz", - "integrity": "sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==", + "node_modules/log-update/node_modules/strip-ansi": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.2.tgz", + "integrity": "sha512-gmBGslpoQJtgnMAvOVqGZpEz9dyoKTCzy2nfz/n8aIFhN/jCE/rCmcxabB6jOOHV+0WNnylOxaxBQPSvcWklhA==", "dev": true, - "license": "BSD-2-Clause", + "license": "MIT", "dependencies": { - "acorn": "^8.9.0", - "acorn-jsx": "^5.3.2", - "eslint-visitor-keys": "^3.4.1" + "ansi-regex": "^6.0.1" }, "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + "node": ">=12" }, "funding": { - "url": "https://opencollective.com/eslint" - } - }, - "node_modules/esprima": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", - "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", - "license": "BSD-2-Clause", - "bin": { - "esparse": "bin/esparse.js", - "esvalidate": "bin/esvalidate.js" - }, - "engines": { - "node": ">=4" + "url": "https://github.com/chalk/strip-ansi?sponsor=1" } }, - "node_modules/esquery": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.6.0.tgz", - "integrity": "sha512-ca9pw9fomFcKPvFLXhBKUK90ZvGibiGOvRJNbjljY7s7uq/5YO4BOzcYtJqExdx99rF6aAcnRxHmcUHcz6sQsg==", + "node_modules/log-update/node_modules/wrap-ansi": { + "version": "9.0.2", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-9.0.2.tgz", + "integrity": "sha512-42AtmgqjV+X1VpdOfyTGOYRi0/zsoLqtXQckTmqTeybT+BDIbM/Guxo7x3pE2vtpr1ok6xRqM9OpBe+Jyoqyww==", "dev": true, - "license": "BSD-3-Clause", + "license": "MIT", "dependencies": { - "estraverse": "^5.1.0" + "ansi-styles": "^6.2.1", + "string-width": "^7.0.0", + "strip-ansi": "^7.1.0" }, "engines": { - "node": ">=0.10" + "node": ">=18" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" } }, - "node_modules/esrecurse": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", - "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", - "license": "BSD-2-Clause", + "node_modules/logform": { + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/logform/-/logform-2.7.0.tgz", + "integrity": "sha512-TFYA4jnP7PVbmlBIfhlSe+WKxs9dklXMTEGcBCIvLhE/Tn3H6Gk1norupVW7m5Cnd4bLcr08AytbyV/xj7f/kQ==", + "license": "MIT", "dependencies": { - "estraverse": "^5.2.0" + "@colors/colors": "1.6.0", + "@types/triple-beam": "^1.3.2", + "fecha": "^4.2.0", + "ms": "^2.1.1", + "safe-stable-stringify": "^2.3.1", + "triple-beam": "^1.3.0" }, "engines": { - "node": ">=4.0" + "node": ">= 12.0.0" } }, - "node_modules/estraverse": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", - "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", - "license": "BSD-2-Clause", + "node_modules/logform/node_modules/@colors/colors": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/@colors/colors/-/colors-1.6.0.tgz", + "integrity": "sha512-Ir+AOibqzrIsL6ajt3Rz3LskB7OiMVHqltZmspbW/TJuTVuyOMirVqAkjfY6JISiLHgyNqicAC8AyHHGzNd/dA==", + "license": "MIT", "engines": { - "node": ">=4.0" + "node": ">=0.1.90" } }, - "node_modules/estree-walker": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-2.0.2.tgz", - "integrity": "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==", - "dev": true, - "license": "MIT" + "node_modules/long": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/long/-/long-4.0.0.tgz", + "integrity": "sha512-XsP+KhQif4bjX1kbuSiySJFNAehNxgLb6hPRGJ9QsUr8ajHkuXGdrHmFUTUUXhDwVX2R5bY4JNZEwbUiMhV+MA==", + "license": "Apache-2.0" }, - "node_modules/esutils": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", - "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", - "dev": true, - "license": "BSD-2-Clause", - "engines": { - "node": ">=0.10.0" + "node_modules/longest-streak": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/longest-streak/-/longest-streak-3.1.0.tgz", + "integrity": "sha512-9Ri+o0JYgehTaVBBDoMqIl8GXtbWg711O3srftcHhZ0dqnETqLaoIK0x17fUw9rFSlK/0NlsKe0Ahhyl5pXE2g==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" } }, - "node_modules/etag": { - "version": "1.8.1", - "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", - "integrity": "sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==", + "node_modules/loose-envify": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz", + "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==", "license": "MIT", - "engines": { - "node": ">= 0.6" + "dependencies": { + "js-tokens": "^3.0.0 || ^4.0.0" + }, + "bin": { + "loose-envify": "cli.js" } }, - "node_modules/eth-gas-reporter": { - "version": "0.2.27", - "resolved": "https://registry.npmjs.org/eth-gas-reporter/-/eth-gas-reporter-0.2.27.tgz", - "integrity": "sha512-femhvoAM7wL0GcI8ozTdxfuBtBFJ9qsyIAsmKVjlWAHUbdnnXHt+lKzz/kmldM5lA9jLuNHGwuIxorNpLbR1Zw==", - "dev": true, + "node_modules/loupe": { + "version": "2.3.7", + "resolved": "https://registry.npmjs.org/loupe/-/loupe-2.3.7.tgz", + "integrity": "sha512-zSMINGVYkdpYSOBmLi0D1Uo7JU9nVdQKrHxC8eYlV+9YKK9WePqAlL7lSlorG/U2Fw1w0hTBmaa/jrQ3UbPHtA==", "license": "MIT", "dependencies": { - "@solidity-parser/parser": "^0.14.0", - "axios": "^1.5.1", - "cli-table3": "^0.5.0", - "colors": "1.4.0", - "ethereum-cryptography": "^1.0.3", - "ethers": "^5.7.2", - "fs-readdir-recursive": "^1.1.0", - "lodash": "^4.17.14", - "markdown-table": "^1.1.3", - "mocha": "^10.2.0", - "req-cwd": "^2.0.0", - "sha1": "^1.1.1", - "sync-request": "^6.0.0" - }, - "peerDependencies": { - "@codechecks/client": "^0.1.0" + "get-func-name": "^2.0.1" + } + }, + "node_modules/lower-case": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/lower-case/-/lower-case-2.0.2.tgz", + "integrity": "sha512-7fm3l3NAF9WfN6W3JOmf5drwpVqX78JtoGJ3A6W0a6ZnldM41w2fV5D490psKFTpMds8TJse/eHLFFsNHHjHgg==", + "license": "MIT", + "dependencies": { + "tslib": "^2.0.3" + } + }, + "node_modules/lowercase-keys": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-3.0.0.tgz", + "integrity": "sha512-ozCC6gdQ+glXOQsveKD0YsDy8DSQFjDTz4zyzEHNV5+JP5D62LmfDZ6o1cycFx9ouG940M5dE8C8CTewdj2YWQ==", + "license": "MIT", + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" }, - "peerDependenciesMeta": { - "@codechecks/client": { - "optional": true - } + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/eth-gas-reporter/node_modules/@noble/hashes": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.2.0.tgz", - "integrity": "sha512-FZfhjEDbT5GRswV3C6uvLPHMiVD6lQBmpoX5+eSiPaMTXte/IKqI5dykDxzZB/WBeK/CDuQRBWarPdi3FNY2zQ==", + "node_modules/lru_map": { + "version": "0.3.3", + "resolved": "https://registry.npmjs.org/lru_map/-/lru_map-0.3.3.tgz", + "integrity": "sha512-Pn9cox5CsMYngeDbmChANltQl+5pi6XmTrraMSzhPmMBbmgcxmqWry0U3PGapCU1yB4/LqCcom7qhHZiF/jGfQ==", "dev": true, - "funding": [ - { - "type": "individual", - "url": "https://paulmillr.com/funding/" - } - ], "license": "MIT" }, - "node_modules/eth-gas-reporter/node_modules/@scure/base": { - "version": "1.1.9", - "resolved": "https://registry.npmjs.org/@scure/base/-/base-1.1.9.tgz", - "integrity": "sha512-8YKhl8GHiNI/pU2VMaofa2Tor7PJRAjwQLBBuilkJ9L5+13yVbC7JO/wS7piioAvPSwR3JKM1IJ/u4xQzbcXKg==", - "dev": true, + "node_modules/lru-cache": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", + "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", + "license": "ISC", + "dependencies": { + "yallist": "^3.0.2" + } + }, + "node_modules/luxon": { + "version": "3.7.2", + "resolved": "https://registry.npmjs.org/luxon/-/luxon-3.7.2.tgz", + "integrity": "sha512-vtEhXh/gNjI9Yg1u4jX/0YVPMvxzHuGgCm6tC5kZyb08yjGWGnqAjGJvcXbqQR2P3MyMEFnRbpcdFS6PBcLqew==", "license": "MIT", - "funding": { - "url": "https://paulmillr.com/funding/" + "engines": { + "node": ">=12" } }, - "node_modules/eth-gas-reporter/node_modules/@scure/bip32": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/@scure/bip32/-/bip32-1.1.5.tgz", - "integrity": "sha512-XyNh1rB0SkEqd3tXcXMi+Xe1fvg+kUIcoRIEujP1Jgv7DqW2r9lg3Ah0NkFaCs9sTkQAQA8kw7xiRXzENi9Rtw==", + "node_modules/lz-string": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/lz-string/-/lz-string-1.5.0.tgz", + "integrity": "sha512-h5bgJWpxJNswbU7qCrV0tIKQCaS3blPDrqKWx+QxzuzL1zGUzij9XCWLrSLsJPu5t+eWA/ycetzYAO5IOMcWAQ==", "dev": true, - "funding": [ - { - "type": "individual", - "url": "https://paulmillr.com/funding/" - } - ], "license": "MIT", - "dependencies": { - "@noble/hashes": "~1.2.0", - "@noble/secp256k1": "~1.7.0", - "@scure/base": "~1.1.0" + "bin": { + "lz-string": "bin/bin.js" } }, - "node_modules/eth-gas-reporter/node_modules/@scure/bip39": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/@scure/bip39/-/bip39-1.1.1.tgz", - "integrity": "sha512-t+wDck2rVkh65Hmv280fYdVdY25J9YeEUIgn2LG1WM6gxFkGzcksoDiUkWVpVp3Oex9xGC68JU2dSbUfwZ2jPg==", - "dev": true, - "funding": [ - { - "type": "individual", - "url": "https://paulmillr.com/funding/" - } - ], + "node_modules/magic-string": { + "version": "0.30.5", + "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.5.tgz", + "integrity": "sha512-7xlpfBaQaP/T6Vh8MO/EqXSW5En6INHEvEXQiuff7Gku0PWjU3uf6w/j9o7O+SpB5fOAkrI5HeoNgwjEO0pFsA==", "license": "MIT", "dependencies": { - "@noble/hashes": "~1.2.0", - "@scure/base": "~1.1.0" + "@jridgewell/sourcemap-codec": "^1.4.15" + }, + "engines": { + "node": ">=12" } }, - "node_modules/eth-gas-reporter/node_modules/ansi-regex": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.1.tgz", - "integrity": "sha512-+O9Jct8wf++lXxxFc4hc8LsjaSq0HFzzL7cVsw8pRDIPdjKD2mT4ytDZlLuSBZ4cLKZFXIrMGO7DbQCtMJJMKw==", + "node_modules/magicast": { + "version": "0.3.5", + "resolved": "https://registry.npmjs.org/magicast/-/magicast-0.3.5.tgz", + "integrity": "sha512-L0WhttDl+2BOsybvEOLK7fW3UA0OQ0IQ2d6Zl2x/a6vVRs3bAY0ECOSHHeL5jD+SbOpOCUEi0y1DgHEn9Qn1AQ==", "dev": true, "license": "MIT", - "engines": { - "node": ">=4" + "dependencies": { + "@babel/parser": "^7.25.4", + "@babel/types": "^7.25.4", + "source-map-js": "^1.2.0" } }, - "node_modules/eth-gas-reporter/node_modules/cli-table3": { - "version": "0.5.1", - "resolved": "https://registry.npmjs.org/cli-table3/-/cli-table3-0.5.1.tgz", - "integrity": "sha512-7Qg2Jrep1S/+Q3EceiZtQcDPWxhAvBw+ERf1162v4sikJrvojMHFqXt8QIVha8UlH9rgU0BeWPytZ9/TzYqlUw==", - "dev": true, + "node_modules/make-dir": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz", + "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==", + "devOptional": true, "license": "MIT", "dependencies": { - "object-assign": "^4.1.0", - "string-width": "^2.1.1" + "semver": "^6.0.0" }, "engines": { - "node": ">=6" + "node": ">=8" }, - "optionalDependencies": { - "colors": "^1.1.2" + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/eth-gas-reporter/node_modules/ethereum-cryptography": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/ethereum-cryptography/-/ethereum-cryptography-1.2.0.tgz", - "integrity": "sha512-6yFQC9b5ug6/17CQpCyE3k9eKBMdhyVjzUy1WkiuY/E4vj/SXDBbCw8QEIaXqf0Mf2SnY6RmpDcwlUmBSS0EJw==", - "dev": true, + "node_modules/make-error": { + "version": "1.3.6", + "resolved": "https://registry.npmjs.org/make-error/-/make-error-1.3.6.tgz", + "integrity": "sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==", + "devOptional": true, + "license": "ISC" + }, + "node_modules/make-promises-safe": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/make-promises-safe/-/make-promises-safe-5.1.0.tgz", + "integrity": "sha512-AfdZ49rtyhQR/6cqVKGoH7y4ql7XkS5HJI1lZm0/5N6CQosy1eYbBJ/qbhkKHzo17UH7M918Bysf6XB9f3kS1g==", "license": "MIT", + "optional": true + }, + "node_modules/makeerror": { + "version": "1.0.12", + "resolved": "https://registry.npmjs.org/makeerror/-/makeerror-1.0.12.tgz", + "integrity": "sha512-JmqCvUhmt43madlpFzG4BQzG2Z3m6tvQDNKdClZnO3VbIudJYmxsT0FNJMeiB2+JTSlTQTSbU8QdesVmwJcmLg==", + "license": "BSD-3-Clause", "dependencies": { - "@noble/hashes": "1.2.0", - "@noble/secp256k1": "1.7.1", - "@scure/bip32": "1.1.5", - "@scure/bip39": "1.1.1" + "tmpl": "1.0.5" } }, - "node_modules/eth-gas-reporter/node_modules/is-fullwidth-code-point": { + "node_modules/markdown-extensions": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", - "integrity": "sha512-VHskAKYM8RfSFXwee5t5cbN5PZeq1Wrh6qd5bkyiXIf6UQcN6w/A0eXM9r6t8d+GYOh+o6ZhiEnb88LN/Y8m2w==", - "dev": true, + "resolved": "https://registry.npmjs.org/markdown-extensions/-/markdown-extensions-2.0.0.tgz", + "integrity": "sha512-o5vL7aDWatOTX8LzaS1WMoaoxIiLRQJuIKKe2wAw6IeULDHaqbiqiggmx+pKvZDb1Sj+pE46Sn1T7lCqfFtg1Q==", "license": "MIT", "engines": { - "node": ">=4" + "node": ">=16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/eth-gas-reporter/node_modules/string-width": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz", - "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==", + "node_modules/markdown-table": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/markdown-table/-/markdown-table-1.1.3.tgz", + "integrity": "sha512-1RUZVgQlpJSPWYbFSpmudq5nHY1doEIv89gBtF0s4gW1GF2XorxcA/70M5vq7rLv0a6mhOUccRsqkwhwLCIQ2Q==", "dev": true, + "license": "MIT" + }, + "node_modules/marked": { + "version": "16.4.2", + "resolved": "https://registry.npmjs.org/marked/-/marked-16.4.2.tgz", + "integrity": "sha512-TI3V8YYWvkVf3KJe1dRkpnjs68JUPyEa5vjKrp1XEEJUAOaQc+Qj+L1qWbPd0SJuAdQkFU0h73sXXqwDYxsiDA==", "license": "MIT", - "dependencies": { - "is-fullwidth-code-point": "^2.0.0", - "strip-ansi": "^4.0.0" + "bin": { + "marked": "bin/marked.js" }, "engines": { - "node": ">=4" + "node": ">= 20" } }, - "node_modules/eth-gas-reporter/node_modules/strip-ansi": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", - "integrity": "sha512-4XaJ2zQdCzROZDivEVIDPkcQn8LMFSa8kj8Gxb/Lnwzv9A8VctNZ+lfivC/sV3ivW8ElJTERXZoPBRrZKkNKow==", - "dev": true, + "node_modules/marky": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/marky/-/marky-1.3.0.tgz", + "integrity": "sha512-ocnPZQLNpvbedwTy9kNrQEsknEfgvcLMvOtz3sFeWApDq1MXH1TqkCIx58xlpESsfwQOnuBO9beyQuNGzVvuhQ==", + "license": "Apache-2.0" + }, + "node_modules/math-intrinsics": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/math-intrinsics/-/math-intrinsics-1.1.0.tgz", + "integrity": "sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==", "license": "MIT", - "dependencies": { - "ansi-regex": "^3.0.0" - }, "engines": { - "node": ">=4" + "node": ">= 0.4" } }, - "node_modules/eth-rpc-errors": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/eth-rpc-errors/-/eth-rpc-errors-4.0.3.tgz", - "integrity": "sha512-Z3ymjopaoft7JDoxZcEb3pwdGh7yiYMhOwm2doUt6ASXlMavpNlK6Cre0+IMl2VSGyEU9rkiperQhp5iRxn5Pg==", - "license": "MIT", + "node_modules/mcl-wasm": { + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/mcl-wasm/-/mcl-wasm-1.8.0.tgz", + "integrity": "sha512-j6kekpd/i6XLHKgUPLPOqts3EUIw+lOFPdyQ4cqepONZ2R/dtfc3+DnYMJXKXw4JF8c6hfcBZ04gbYWOXurv+Q==", + "dev": true, + "license": "BSD-3-Clause", "dependencies": { - "fast-safe-stringify": "^2.0.6" + "@types/node": "^20.2.5" + }, + "engines": { + "node": ">=14.17" } }, - "node_modules/ethereum-bloom-filters": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/ethereum-bloom-filters/-/ethereum-bloom-filters-1.2.0.tgz", - "integrity": "sha512-28hyiE7HVsWubqhpVLVmZXFd4ITeHi+BUu05o9isf0GUpMtzBUi+8/gFrGaGYzvGAJQmJ3JKj77Mk9G98T84rA==", + "node_modules/md5.js": { + "version": "1.3.5", + "resolved": "https://registry.npmjs.org/md5.js/-/md5.js-1.3.5.tgz", + "integrity": "sha512-xitP+WxNPcTTOgnTJcrhM0xvdPepipPSf3I8EIpGKeFLjt3PlJLIDG3u8EX53ZIubkb+5U2+3rELYpEhHhzdkg==", "license": "MIT", "dependencies": { - "@noble/hashes": "^1.4.0" + "hash-base": "^3.0.0", + "inherits": "^2.0.1", + "safe-buffer": "^5.1.2" } }, - "node_modules/ethereum-cryptography": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/ethereum-cryptography/-/ethereum-cryptography-2.2.1.tgz", - "integrity": "sha512-r/W8lkHSiTLxUxW8Rf3u4HGB0xQweG2RyETjywylKZSzLWoWAijRz8WCuOtJ6wah+avllXBqZuk29HCCvhEIRg==", + "node_modules/mdast-util-definitions": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/mdast-util-definitions/-/mdast-util-definitions-4.0.0.tgz", + "integrity": "sha512-k8AJ6aNnUkB7IE+5azR9h81O5EQ/cTDXtWdMq9Kk5KcEW/8ritU5CeLg/9HhOC++nALHBlaogJ5jz0Ybk3kPMQ==", "license": "MIT", "dependencies": { - "@noble/curves": "1.4.2", - "@noble/hashes": "1.4.0", - "@scure/bip32": "1.4.0", - "@scure/bip39": "1.3.0" + "unist-util-visit": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/ethereum-cryptography/node_modules/@noble/curves": { - "version": "1.4.2", - "resolved": "https://registry.npmjs.org/@noble/curves/-/curves-1.4.2.tgz", - "integrity": "sha512-TavHr8qycMChk8UwMld0ZDRvatedkzWfH8IiaeGCfymOP5i0hSCozz9vHOL0nkwk7HRMlFnAiKpS2jrUmSybcw==", + "node_modules/mdast-util-directive": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/mdast-util-directive/-/mdast-util-directive-3.1.0.tgz", + "integrity": "sha512-I3fNFt+DHmpWCYAT7quoM6lHf9wuqtI+oCOfvILnoicNIqjh5E3dEJWiXuYME2gNe8vl1iMQwyUHa7bgFmak6Q==", "license": "MIT", "dependencies": { - "@noble/hashes": "1.4.0" + "@types/mdast": "^4.0.0", + "@types/unist": "^3.0.0", + "ccount": "^2.0.0", + "devlop": "^1.0.0", + "mdast-util-from-markdown": "^2.0.0", + "mdast-util-to-markdown": "^2.0.0", + "parse-entities": "^4.0.0", + "stringify-entities": "^4.0.0", + "unist-util-visit-parents": "^6.0.0" }, "funding": { - "url": "https://paulmillr.com/funding/" + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/ethereum-cryptography/node_modules/@noble/hashes": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.4.0.tgz", - "integrity": "sha512-V1JJ1WTRUqHHrOSh597hURcMqVKVGL/ea3kv0gSnEdsEZ0/+VyPghM1lMNGc00z7CIQorSvbKpuJkxvuHbvdbg==", + "node_modules/mdast-util-directive/node_modules/@types/mdast": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/@types/mdast/-/mdast-4.0.4.tgz", + "integrity": "sha512-kGaNbPh1k7AFzgpud/gMdvIm5xuECykRR+JnWKQno9TAXVa6WIVCGTPvYGekIDL4uwCZQSYbUxNBSb1aUo79oA==", "license": "MIT", - "engines": { - "node": ">= 16" - }, - "funding": { - "url": "https://paulmillr.com/funding/" + "dependencies": { + "@types/unist": "*" } }, - "node_modules/ethereumjs-util": { - "version": "7.1.5", - "resolved": "https://registry.npmjs.org/ethereumjs-util/-/ethereumjs-util-7.1.5.tgz", - "integrity": "sha512-SDl5kKrQAudFBUe5OJM9Ac6WmMyYmXX/6sTmLZ3ffG2eY6ZIGBes3pEDxNN6V72WyOw4CPD5RomKdsa8DAAwLg==", - "license": "MPL-2.0", - "dependencies": { - "@types/bn.js": "^5.1.0", - "bn.js": "^5.1.2", - "create-hash": "^1.1.2", - "ethereum-cryptography": "^0.1.3", - "rlp": "^2.2.4" - }, - "engines": { - "node": ">=10.0.0" + "node_modules/mdast-util-directive/node_modules/character-entities-legacy": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/character-entities-legacy/-/character-entities-legacy-3.0.0.tgz", + "integrity": "sha512-RpPp0asT/6ufRm//AJVwpViZbGM/MkjQFxJccQRHmISF/22NBtsHqAWmL+/pmkPWoIUJdWyeVleTl1wydHATVQ==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" } }, - "node_modules/ethereumjs-util/node_modules/ethereum-cryptography": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/ethereum-cryptography/-/ethereum-cryptography-0.1.3.tgz", - "integrity": "sha512-w8/4x1SGGzc+tO97TASLja6SLd3fRIK2tLVcV2Gx4IB21hE19atll5Cq9o3d0ZmAYC/8aw0ipieTSiekAea4SQ==", + "node_modules/mdast-util-directive/node_modules/character-reference-invalid": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/character-reference-invalid/-/character-reference-invalid-2.0.1.tgz", + "integrity": "sha512-iBZ4F4wRbyORVsu0jPV7gXkOsGYjGHPmAyv+HiHG8gi5PtC9KI2j1+v8/tlibRvjoWX027ypmG/n0HtO5t7unw==", "license": "MIT", - "dependencies": { - "@types/pbkdf2": "^3.0.0", - "@types/secp256k1": "^4.0.1", - "blakejs": "^1.1.0", - "browserify-aes": "^1.2.0", - "bs58check": "^2.1.2", - "create-hash": "^1.2.0", - "create-hmac": "^1.1.7", - "hash.js": "^1.1.7", - "keccak": "^3.0.0", - "pbkdf2": "^3.0.17", - "randombytes": "^2.1.0", - "safe-buffer": "^5.1.2", - "scrypt-js": "^3.0.0", - "secp256k1": "^4.0.1", - "setimmediate": "^1.0.5" + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" } }, - "node_modules/ethers": { - "version": "5.8.0", - "resolved": "https://registry.npmjs.org/ethers/-/ethers-5.8.0.tgz", - "integrity": "sha512-DUq+7fHrCg1aPDFCHx6UIPb3nmt2XMpM7Y/g2gLhsl3lIBqeAfOJIl1qEvRf2uq3BiKxmh6Fh5pfp2ieyek7Kg==", - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], + "node_modules/mdast-util-directive/node_modules/is-alphabetical": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-alphabetical/-/is-alphabetical-2.0.1.tgz", + "integrity": "sha512-FWyyY60MeTNyeSRpkM2Iry0G9hpr7/9kD40mD/cGQEuilcZYS4okz8SN2Q6rLCJ8gbCt6fN+rC+6tMGS99LaxQ==", "license": "MIT", - "dependencies": { - "@ethersproject/abi": "5.8.0", - "@ethersproject/abstract-provider": "5.8.0", - "@ethersproject/abstract-signer": "5.8.0", - "@ethersproject/address": "5.8.0", - "@ethersproject/base64": "5.8.0", - "@ethersproject/basex": "5.8.0", - "@ethersproject/bignumber": "5.8.0", - "@ethersproject/bytes": "5.8.0", - "@ethersproject/constants": "5.8.0", - "@ethersproject/contracts": "5.8.0", - "@ethersproject/hash": "5.8.0", - "@ethersproject/hdnode": "5.8.0", - "@ethersproject/json-wallets": "5.8.0", - "@ethersproject/keccak256": "5.8.0", - "@ethersproject/logger": "5.8.0", - "@ethersproject/networks": "5.8.0", - "@ethersproject/pbkdf2": "5.8.0", - "@ethersproject/properties": "5.8.0", - "@ethersproject/providers": "5.8.0", - "@ethersproject/random": "5.8.0", - "@ethersproject/rlp": "5.8.0", - "@ethersproject/sha2": "5.8.0", - "@ethersproject/signing-key": "5.8.0", - "@ethersproject/solidity": "5.8.0", - "@ethersproject/strings": "5.8.0", - "@ethersproject/transactions": "5.8.0", - "@ethersproject/units": "5.8.0", - "@ethersproject/wallet": "5.8.0", - "@ethersproject/web": "5.8.0", - "@ethersproject/wordlists": "5.8.0" + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" } }, - "node_modules/ethjs-unit": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/ethjs-unit/-/ethjs-unit-0.1.6.tgz", - "integrity": "sha512-/Sn9Y0oKl0uqQuvgFk/zQgR7aw1g36qX/jzSQ5lSwlO0GigPymk4eGQfeNTD03w1dPOqfz8V77Cy43jH56pagw==", + "node_modules/mdast-util-directive/node_modules/is-alphanumerical": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-alphanumerical/-/is-alphanumerical-2.0.1.tgz", + "integrity": "sha512-hmbYhX/9MUMF5uh7tOXyK/n0ZvWpad5caBA17GsC6vyuCqaWliRG5K1qS9inmUhEMaOBIW7/whAnSwveW/LtZw==", "license": "MIT", "dependencies": { - "bn.js": "4.11.6", - "number-to-bn": "1.7.0" + "is-alphabetical": "^2.0.0", + "is-decimal": "^2.0.0" }, - "engines": { - "node": ">=6.5.0", - "npm": ">=3" + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" } }, - "node_modules/ethjs-unit/node_modules/bn.js": { - "version": "4.11.6", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.6.tgz", - "integrity": "sha512-XWwnNNFCuuSQ0m3r3C4LE3EiORltHd9M05pq6FOlVeiophzRbMo50Sbz1ehl8K3Z+jw9+vmgnXefY1hz8X+2wA==", - "license": "MIT" - }, - "node_modules/ethr-did-resolver": { - "version": "11.0.5", - "resolved": "https://registry.npmjs.org/ethr-did-resolver/-/ethr-did-resolver-11.0.5.tgz", - "integrity": "sha512-fTQ+4g4aRDyU1hzlPH6FYgpoOd7fM8ZV9+3JCl2PqSDnS8Iz9V+y/9KOjLzqhY6LKhMWW5hIbaGypwOPWj15JA==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "did-resolver": "^4.1.0", - "ethers": "^6.8.1" + "node_modules/mdast-util-directive/node_modules/is-decimal": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-decimal/-/is-decimal-2.0.1.tgz", + "integrity": "sha512-AAB9hiomQs5DXWcRB1rqsxGUstbRroFOPPVAomNk/3XHR5JyEZChOyTWe2oayKnsSsr/kcGqF+z6yuH6HHpN0A==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" } }, - "node_modules/ethr-did-resolver/node_modules/@adraffy/ens-normalize": { - "version": "1.10.1", - "resolved": "https://registry.npmjs.org/@adraffy/ens-normalize/-/ens-normalize-1.10.1.tgz", - "integrity": "sha512-96Z2IP3mYmF1Xg2cDm8f1gWGf/HUVedQ3FMifV4kG/PQ4yEP51xDtRAEfhVNt5f/uzpNkZHwWQuUcu6D6K+Ekw==", - "dev": true, - "license": "MIT" + "node_modules/mdast-util-directive/node_modules/is-hexadecimal": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-hexadecimal/-/is-hexadecimal-2.0.1.tgz", + "integrity": "sha512-DgZQp241c8oO6cA1SbTEWiXeoxV42vlcJxgH+B3hi1AiqqKruZR3ZGF8In3fj4+/y/7rHvlOZLZtgJ/4ttYGZg==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } }, - "node_modules/ethr-did-resolver/node_modules/@noble/curves": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@noble/curves/-/curves-1.2.0.tgz", - "integrity": "sha512-oYclrNgRaM9SsBUBVbb8M6DTV7ZHRTKugureoYEncY5c65HOmRzvSiTE3y5CYaPYJA/GVkrhXEoF0M3Ya9PMnw==", - "dev": true, + "node_modules/mdast-util-directive/node_modules/mdast-util-from-markdown": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/mdast-util-from-markdown/-/mdast-util-from-markdown-2.0.2.tgz", + "integrity": "sha512-uZhTV/8NBuw0WHkPTrCqDOl0zVe1BIng5ZtHoDk49ME1qqcjYmmLmOf0gELgcRMxN4w2iuIeVso5/6QymSrgmA==", "license": "MIT", "dependencies": { - "@noble/hashes": "1.3.2" + "@types/mdast": "^4.0.0", + "@types/unist": "^3.0.0", + "decode-named-character-reference": "^1.0.0", + "devlop": "^1.0.0", + "mdast-util-to-string": "^4.0.0", + "micromark": "^4.0.0", + "micromark-util-decode-numeric-character-reference": "^2.0.0", + "micromark-util-decode-string": "^2.0.0", + "micromark-util-normalize-identifier": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0", + "unist-util-stringify-position": "^4.0.0" }, "funding": { - "url": "https://paulmillr.com/funding/" + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/ethr-did-resolver/node_modules/@noble/hashes": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.3.2.tgz", - "integrity": "sha512-MVC8EAQp7MvEcm30KWENFjgR+Mkmf+D189XJTkFIlwohU5hcBbn1ZkKq7KVTi2Hme3PMGF390DaL52beVrIihQ==", - "dev": true, + "node_modules/mdast-util-directive/node_modules/mdast-util-to-string": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/mdast-util-to-string/-/mdast-util-to-string-4.0.0.tgz", + "integrity": "sha512-0H44vDimn51F0YwvxSJSm0eCDOJTRlmN0R1yBh4HLj9wiV1Dn0QoXGbvFAWj2hSItVTlCmBF1hqKlIyUBVFLPg==", "license": "MIT", - "engines": { - "node": ">= 16" + "dependencies": { + "@types/mdast": "^4.0.0" }, "funding": { - "url": "https://paulmillr.com/funding/" + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/ethr-did-resolver/node_modules/@types/node": { - "version": "22.7.5", - "resolved": "https://registry.npmjs.org/@types/node/-/node-22.7.5.tgz", - "integrity": "sha512-jML7s2NAzMWc//QSJ1a3prpk78cOPchGvXJsC3C6R6PSMoooztvRVQEz89gmBTBY1SPMaqo5teB4uNHPdetShQ==", - "dev": true, + "node_modules/mdast-util-directive/node_modules/micromark": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/micromark/-/micromark-4.0.2.tgz", + "integrity": "sha512-zpe98Q6kvavpCr1NPVSCMebCKfD7CA2NqZ+rykeNhONIJBpc1tFKt9hucLGwha3jNTNI8lHpctWJWoimVF4PfA==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], "license": "MIT", "dependencies": { - "undici-types": "~6.19.2" + "@types/debug": "^4.0.0", + "debug": "^4.0.0", + "decode-named-character-reference": "^1.0.0", + "devlop": "^1.0.0", + "micromark-core-commonmark": "^2.0.0", + "micromark-factory-space": "^2.0.0", + "micromark-util-character": "^2.0.0", + "micromark-util-chunked": "^2.0.0", + "micromark-util-combine-extensions": "^2.0.0", + "micromark-util-decode-numeric-character-reference": "^2.0.0", + "micromark-util-encode": "^2.0.0", + "micromark-util-normalize-identifier": "^2.0.0", + "micromark-util-resolve-all": "^2.0.0", + "micromark-util-sanitize-uri": "^2.0.0", + "micromark-util-subtokenize": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/mdast-util-directive/node_modules/micromark-factory-space": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-factory-space/-/micromark-factory-space-2.0.1.tgz", + "integrity": "sha512-zRkxjtBxxLd2Sc0d+fbnEunsTj46SWXgXciZmHq0kDYGnck/ZSGj9/wULTV95uoeYiK5hRXP2mJ98Uo4cq/LQg==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "micromark-util-character": "^2.0.0", + "micromark-util-types": "^2.0.0" } }, - "node_modules/ethr-did-resolver/node_modules/aes-js": { - "version": "4.0.0-beta.5", - "resolved": "https://registry.npmjs.org/aes-js/-/aes-js-4.0.0-beta.5.tgz", - "integrity": "sha512-G965FqalsNyrPqgEGON7nIx1e/OVENSgiEIzyC63haUMuvNnwIgIjMs52hlTCKhkBny7A2ORNlfY9Zu+jmGk1Q==", - "dev": true, - "license": "MIT" - }, - "node_modules/ethr-did-resolver/node_modules/ethers": { - "version": "6.15.0", - "resolved": "https://registry.npmjs.org/ethers/-/ethers-6.15.0.tgz", - "integrity": "sha512-Kf/3ZW54L4UT0pZtsY/rf+EkBU7Qi5nnhonjUb8yTXcxH3cdcWrV2cRyk0Xk/4jK6OoHhxxZHriyhje20If2hQ==", - "dev": true, + "node_modules/mdast-util-directive/node_modules/micromark-util-character": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/micromark-util-character/-/micromark-util-character-2.1.1.tgz", + "integrity": "sha512-wv8tdUTJ3thSFFFJKtpYKOYiGP2+v96Hvk4Tu8KpCAsTMs6yi+nVmGh1syvSCsaxz45J6Jbw+9DD6g97+NV67Q==", "funding": [ { - "type": "individual", - "url": "https://github.com/sponsors/ethers-io/" + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" }, { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" + "type": "OpenCollective", + "url": "https://opencollective.com/unified" } ], "license": "MIT", "dependencies": { - "@adraffy/ens-normalize": "1.10.1", - "@noble/curves": "1.2.0", - "@noble/hashes": "1.3.2", - "@types/node": "22.7.5", - "aes-js": "4.0.0-beta.5", - "tslib": "2.7.0", - "ws": "8.17.1" - }, - "engines": { - "node": ">=14.0.0" + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" } }, - "node_modules/ethr-did-resolver/node_modules/tslib": { - "version": "2.7.0", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.7.0.tgz", - "integrity": "sha512-gLXCKdN1/j47AiHiOkJN69hJmcbGTHI0ImLmbYLHykhgeN0jVGola9yVjFgzCUklsZQMW55o+dW7IXv3RCXDzA==", - "dev": true, - "license": "0BSD" - }, - "node_modules/ethr-did-resolver/node_modules/undici-types": { - "version": "6.19.8", - "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.19.8.tgz", - "integrity": "sha512-ve2KP6f/JnbPBFyobGHuerC9g1FYGn/F8n1LWTwNxCEzd6IfqTwUQcNXgEtmmQ6DlRrC1hrSrBnCZPokRrDHjw==", - "dev": true, + "node_modules/mdast-util-directive/node_modules/micromark-util-symbol": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-util-symbol/-/micromark-util-symbol-2.0.1.tgz", + "integrity": "sha512-vs5t8Apaud9N28kgCrRUdEed4UJ+wWNvicHLPxCa9ENlYuAY31M0ETy5y1vA33YoNPDFTghEbnh6efaE8h4x0Q==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], "license": "MIT" }, - "node_modules/ethr-did-resolver/node_modules/ws": { - "version": "8.17.1", - "resolved": "https://registry.npmjs.org/ws/-/ws-8.17.1.tgz", - "integrity": "sha512-6XQFvXTkbfUOZOKKILFG1PDK2NDQs4azKQl26T0YS5CxqWLgXajbPZ+h4gZekJyRqFU8pvnbAbbs/3TgRPy+GQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=10.0.0" - }, - "peerDependencies": { - "bufferutil": "^4.0.1", - "utf-8-validate": ">=5.0.2" - }, - "peerDependenciesMeta": { - "bufferutil": { - "optional": true + "node_modules/mdast-util-directive/node_modules/micromark-util-types": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/micromark-util-types/-/micromark-util-types-2.0.2.tgz", + "integrity": "sha512-Yw0ECSpJoViF1qTU4DC6NwtC4aWGt1EkzaQB8KPPyCRR8z9TWeV0HbEFGTO+ZY1wB22zmxnJqhPyTpOVCpeHTA==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" }, - "utf-8-validate": { - "optional": true + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" } - } - }, - "node_modules/event-target-shim": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/event-target-shim/-/event-target-shim-5.0.1.tgz", - "integrity": "sha512-i/2XbnSz/uxRCU6+NdVJgKWDTM427+MqYbkQzD321DuCQJUqOuJKIA0IM2+W2xtYHdKOmZ4dR6fExsd4SXL+WQ==", - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/eventemitter3": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-5.0.1.tgz", - "integrity": "sha512-GWkBvjiSZK87ELrYOSESUYeVIc9mvLLf/nXalMOS5dYrgZq9o5OVkbZAVM06CVxYsCwH9BDZFPlQTlPA1j4ahA==", + ], "license": "MIT" }, - "node_modules/events": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/events/-/events-3.3.0.tgz", - "integrity": "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==", + "node_modules/mdast-util-directive/node_modules/parse-entities": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/parse-entities/-/parse-entities-4.0.2.tgz", + "integrity": "sha512-GG2AQYWoLgL877gQIKeRPGO1xF9+eG1ujIb5soS5gPvLQ1y2o8FL90w2QWNdf9I361Mpp7726c+lj3U0qK1uGw==", "license": "MIT", - "engines": { - "node": ">=0.8.x" - } - }, - "node_modules/events-universal": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/events-universal/-/events-universal-1.0.1.tgz", - "integrity": "sha512-LUd5euvbMLpwOF8m6ivPCbhQeSiYVNb8Vs0fQ8QjXo0JTkEHpz8pxdQf0gStltaPpw0Cca8b39KxvK9cfKRiAw==", - "dev": true, - "license": "Apache-2.0", "dependencies": { - "bare-events": "^2.7.0" + "@types/unist": "^2.0.0", + "character-entities-legacy": "^3.0.0", + "character-reference-invalid": "^2.0.0", + "decode-named-character-reference": "^1.0.0", + "is-alphanumerical": "^2.0.0", + "is-decimal": "^2.0.0", + "is-hexadecimal": "^2.0.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" } }, - "node_modules/evp_bytestokey": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/evp_bytestokey/-/evp_bytestokey-1.0.3.tgz", - "integrity": "sha512-/f2Go4TognH/KvCISP7OUsHn85hT9nUkxxA9BEWxFn+Oj9o8ZNLm/40hdlgSLyuOimsrTKLUMEorQexp/aPQeA==", - "license": "MIT", - "dependencies": { - "md5.js": "^1.3.4", - "safe-buffer": "^5.1.1" - } + "node_modules/mdast-util-directive/node_modules/parse-entities/node_modules/@types/unist": { + "version": "2.0.11", + "resolved": "https://registry.npmjs.org/@types/unist/-/unist-2.0.11.tgz", + "integrity": "sha512-CmBKiL6NNo/OqgmMn95Fk9Whlp2mtvIv+KNpQKN2F4SjvrEesubTRWGYSg+BnWZOnlCaSTU1sMpsBOzgbYhnsA==", + "license": "MIT" }, - "node_modules/execa": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz", - "integrity": "sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==", - "dev": true, + "node_modules/mdast-util-directive/node_modules/unist-util-is": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-6.0.1.tgz", + "integrity": "sha512-LsiILbtBETkDz8I9p1dQ0uyRUWuaQzd/cuEeS1hoRSyW5E5XGmTzlwY1OrNzzakGowI9Dr/I8HVaw4hTtnxy8g==", "license": "MIT", "dependencies": { - "cross-spawn": "^7.0.3", - "get-stream": "^6.0.0", - "human-signals": "^2.1.0", - "is-stream": "^2.0.0", - "merge-stream": "^2.0.0", - "npm-run-path": "^4.0.1", - "onetime": "^5.1.2", - "signal-exit": "^3.0.3", - "strip-final-newline": "^2.0.0" - }, - "engines": { - "node": ">=10" + "@types/unist": "^3.0.0" }, "funding": { - "url": "https://github.com/sindresorhus/execa?sponsor=1" - } - }, - "node_modules/execa/node_modules/signal-exit": { - "version": "3.0.7", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", - "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", - "dev": true, - "license": "ISC" - }, - "node_modules/exit": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/exit/-/exit-0.1.2.tgz", - "integrity": "sha512-Zk/eNKV2zbjpKzrsQ+n1G6poVbErQxJ0LBOJXaKZ1EViLzH+hrLu9cdXI4zw9dBQJslwBEpbQ2P1oS7nDxs6jQ==", - "dev": true, - "engines": { - "node": ">= 0.8.0" + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/expect": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/expect/-/expect-29.7.0.tgz", - "integrity": "sha512-2Zks0hf1VLFYI1kbh0I5jP3KHHyCHpkfyHBzsSXRFgl/Bg9mWYfMW8oD+PdMPlEwy5HNsR9JutYy6pMeOh61nw==", - "dev": true, + "node_modules/mdast-util-directive/node_modules/unist-util-stringify-position": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-4.0.0.tgz", + "integrity": "sha512-0ASV06AAoKCDkS2+xw5RXJywruurpbC4JZSm7nr7MOt1ojAzvyyaO+UxZf18j8FCF6kmzCZKcAgN/yu2gm2XgQ==", "license": "MIT", "dependencies": { - "@jest/expect-utils": "^29.7.0", - "jest-get-type": "^29.6.3", - "jest-matcher-utils": "^29.7.0", - "jest-message-util": "^29.7.0", - "jest-util": "^29.7.0" + "@types/unist": "^3.0.0" }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/exponential-backoff": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/exponential-backoff/-/exponential-backoff-3.1.2.tgz", - "integrity": "sha512-8QxYTVXUkuy7fIIoitQkPwGonB8F3Zj8eEO8Sqg9Zv/bkI7RJAzowee4gr81Hak/dUTpA2Z7VfQgoijjPNlUZA==", - "license": "Apache-2.0", - "peer": true - }, - "node_modules/express": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/express/-/express-5.1.0.tgz", - "integrity": "sha512-DT9ck5YIRU+8GYzzU5kT3eHGA5iL+1Zd0EutOmTE9Dtk+Tvuzd23VBU+ec7HPNSTxXYO55gPV/hq4pSBJDjFpA==", + "node_modules/mdast-util-directive/node_modules/unist-util-visit-parents": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-6.0.2.tgz", + "integrity": "sha512-goh1s1TBrqSqukSc8wrjwWhL0hiJxgA8m4kFxGlQ+8FYQ3C/m11FcTs4YYem7V664AhHVvgoQLk890Ssdsr2IQ==", "license": "MIT", - "peer": true, "dependencies": { - "accepts": "^2.0.0", - "body-parser": "^2.2.0", - "content-disposition": "^1.0.0", - "content-type": "^1.0.5", - "cookie": "^0.7.1", - "cookie-signature": "^1.2.1", - "debug": "^4.4.0", - "encodeurl": "^2.0.0", - "escape-html": "^1.0.3", - "etag": "^1.8.1", - "finalhandler": "^2.1.0", - "fresh": "^2.0.0", - "http-errors": "^2.0.0", - "merge-descriptors": "^2.0.0", - "mime-types": "^3.0.0", - "on-finished": "^2.4.1", - "once": "^1.4.0", - "parseurl": "^1.3.3", - "proxy-addr": "^2.0.7", - "qs": "^6.14.0", - "range-parser": "^1.2.1", - "router": "^2.2.0", - "send": "^1.1.0", - "serve-static": "^2.2.0", - "statuses": "^2.0.1", - "type-is": "^2.0.1", - "vary": "^1.1.2" - }, - "engines": { - "node": ">= 18" + "@types/unist": "^3.0.0", + "unist-util-is": "^6.0.0" }, "funding": { "type": "opencollective", - "url": "https://opencollective.com/express" + "url": "https://opencollective.com/unified" } }, - "node_modules/express/node_modules/body-parser": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-2.2.0.tgz", - "integrity": "sha512-02qvAaxv8tp7fBa/mw1ga98OGm+eCbqzJOKoRt70sLmfEEi+jyBYVTDGfCL/k06/4EMk/z01gCe7HoCH/f2LTg==", + "node_modules/mdast-util-find-and-replace": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/mdast-util-find-and-replace/-/mdast-util-find-and-replace-3.0.2.tgz", + "integrity": "sha512-Tmd1Vg/m3Xz43afeNxDIhWRtFZgM2VLyaf4vSTYwudTyeuTneoL3qtWMA5jeLyz/O1vDJmmV4QuScFCA2tBPwg==", "license": "MIT", - "peer": true, "dependencies": { - "bytes": "^3.1.2", - "content-type": "^1.0.5", - "debug": "^4.4.0", - "http-errors": "^2.0.0", - "iconv-lite": "^0.6.3", - "on-finished": "^2.4.1", - "qs": "^6.14.0", - "raw-body": "^3.0.0", - "type-is": "^2.0.0" + "@types/mdast": "^4.0.0", + "escape-string-regexp": "^5.0.0", + "unist-util-is": "^6.0.0", + "unist-util-visit-parents": "^6.0.0" }, - "engines": { - "node": ">=18" + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/express/node_modules/iconv-lite": { - "version": "0.6.3", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", - "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", + "node_modules/mdast-util-find-and-replace/node_modules/@types/mdast": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/@types/mdast/-/mdast-4.0.4.tgz", + "integrity": "sha512-kGaNbPh1k7AFzgpud/gMdvIm5xuECykRR+JnWKQno9TAXVa6WIVCGTPvYGekIDL4uwCZQSYbUxNBSb1aUo79oA==", "license": "MIT", - "peer": true, "dependencies": { - "safer-buffer": ">= 2.1.2 < 3.0.0" - }, - "engines": { - "node": ">=0.10.0" + "@types/unist": "*" } }, - "node_modules/express/node_modules/media-typer": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-1.1.0.tgz", - "integrity": "sha512-aisnrDP4GNe06UcKFnV5bfMNPBUw4jsLGaWwWfnH3v02GnBuXX2MCVn5RbrWo0j3pczUilYblq7fQ7Nw2t5XKw==", + "node_modules/mdast-util-find-and-replace/node_modules/escape-string-regexp": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-5.0.0.tgz", + "integrity": "sha512-/veY75JbMK4j1yjvuUxuVsiS/hr/4iHs9FTT6cgTexxdE0Ly/glccBAkloH/DofkjRbZU3bnoj38mOmhkZ0lHw==", "license": "MIT", - "peer": true, "engines": { - "node": ">= 0.8" + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/express/node_modules/qs": { - "version": "6.14.0", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.14.0.tgz", - "integrity": "sha512-YWWTjgABSKcvs/nWBi9PycY/JiPJqOD4JA6o9Sej2AtvSGarXxKC3OQSk4pAarbdQlKAh5D4FCQkJNkW+GAn3w==", - "license": "BSD-3-Clause", - "peer": true, + "node_modules/mdast-util-find-and-replace/node_modules/unist-util-is": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-6.0.1.tgz", + "integrity": "sha512-LsiILbtBETkDz8I9p1dQ0uyRUWuaQzd/cuEeS1hoRSyW5E5XGmTzlwY1OrNzzakGowI9Dr/I8HVaw4hTtnxy8g==", + "license": "MIT", "dependencies": { - "side-channel": "^1.1.0" - }, - "engines": { - "node": ">=0.6" + "@types/unist": "^3.0.0" }, "funding": { - "url": "https://github.com/sponsors/ljharb" + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/express/node_modules/raw-body": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-3.0.1.tgz", - "integrity": "sha512-9G8cA+tuMS75+6G/TzW8OtLzmBDMo8p1JRxN5AZ+LAp8uxGA8V8GZm4GQ4/N5QNQEnLmg6SS7wyuSmbKepiKqA==", + "node_modules/mdast-util-find-and-replace/node_modules/unist-util-visit-parents": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-6.0.2.tgz", + "integrity": "sha512-goh1s1TBrqSqukSc8wrjwWhL0hiJxgA8m4kFxGlQ+8FYQ3C/m11FcTs4YYem7V664AhHVvgoQLk890Ssdsr2IQ==", "license": "MIT", - "peer": true, "dependencies": { - "bytes": "3.1.2", - "http-errors": "2.0.0", - "iconv-lite": "0.7.0", - "unpipe": "1.0.0" + "@types/unist": "^3.0.0", + "unist-util-is": "^6.0.0" }, - "engines": { - "node": ">= 0.10" + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/express/node_modules/raw-body/node_modules/iconv-lite": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.7.0.tgz", - "integrity": "sha512-cf6L2Ds3h57VVmkZe+Pn+5APsT7FpqJtEhhieDCvrE2MK5Qk9MyffgQyuxQTm6BChfeZNtcOLHp9IcWRVcIcBQ==", + "node_modules/mdast-util-from-markdown": { + "version": "0.8.5", + "resolved": "https://registry.npmjs.org/mdast-util-from-markdown/-/mdast-util-from-markdown-0.8.5.tgz", + "integrity": "sha512-2hkTXtYYnr+NubD/g6KGBS/0mFmBcifAsI0yIWRiRo0PjVs6SSOSOdtzbp6kSGnShDN6G5aWZpKQ2lWRy27mWQ==", "license": "MIT", - "peer": true, "dependencies": { - "safer-buffer": ">= 2.1.2 < 3.0.0" - }, - "engines": { - "node": ">=0.10.0" + "@types/mdast": "^3.0.0", + "mdast-util-to-string": "^2.0.0", + "micromark": "~2.11.0", + "parse-entities": "^2.0.0", + "unist-util-stringify-position": "^2.0.0" }, "funding": { "type": "opencollective", - "url": "https://opencollective.com/express" + "url": "https://opencollective.com/unified" } }, - "node_modules/express/node_modules/type-is": { + "node_modules/mdast-util-frontmatter": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/type-is/-/type-is-2.0.1.tgz", - "integrity": "sha512-OZs6gsjF4vMp32qrCbiVSkrFmXtG/AZhY3t0iAMrMBiAZyV9oALtXO8hsrHbMXF9x6L3grlFuwW2oAz7cav+Gw==", + "resolved": "https://registry.npmjs.org/mdast-util-frontmatter/-/mdast-util-frontmatter-2.0.1.tgz", + "integrity": "sha512-LRqI9+wdgC25P0URIJY9vwocIzCcksduHQ9OF2joxQoyTNVduwLAFUzjoopuRJbJAReaKrNQKAZKL3uCMugWJA==", "license": "MIT", - "peer": true, "dependencies": { - "content-type": "^1.0.5", - "media-typer": "^1.1.0", - "mime-types": "^3.0.0" + "@types/mdast": "^4.0.0", + "devlop": "^1.0.0", + "escape-string-regexp": "^5.0.0", + "mdast-util-from-markdown": "^2.0.0", + "mdast-util-to-markdown": "^2.0.0", + "micromark-extension-frontmatter": "^2.0.0" }, - "engines": { - "node": ">= 0.6" + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/extend": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", - "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==", - "license": "MIT" - }, - "node_modules/extendable-error": { - "version": "0.1.7", - "resolved": "https://registry.npmjs.org/extendable-error/-/extendable-error-0.1.7.tgz", - "integrity": "sha512-UOiS2in6/Q0FK0R0q6UY9vYpQ21mr/Qn1KOnte7vsACuNJf514WvCCUHSRCPcgjPT2bAhNIJdlE6bVap1GKmeg==", - "dev": true, - "license": "MIT" - }, - "node_modules/extension-port-stream": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/extension-port-stream/-/extension-port-stream-2.1.1.tgz", - "integrity": "sha512-qknp5o5rj2J9CRKfVB8KJr+uXQlrojNZzdESUPhKYLXf97TPcGf6qWWKmpsNNtUyOdzFhab1ON0jzouNxHHvow==", - "license": "ISC", + "node_modules/mdast-util-frontmatter/node_modules/@types/mdast": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/@types/mdast/-/mdast-4.0.4.tgz", + "integrity": "sha512-kGaNbPh1k7AFzgpud/gMdvIm5xuECykRR+JnWKQno9TAXVa6WIVCGTPvYGekIDL4uwCZQSYbUxNBSb1aUo79oA==", + "license": "MIT", "dependencies": { - "webextension-polyfill": ">=0.10.0 <1.0" - }, + "@types/unist": "*" + } + }, + "node_modules/mdast-util-frontmatter/node_modules/escape-string-regexp": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-5.0.0.tgz", + "integrity": "sha512-/veY75JbMK4j1yjvuUxuVsiS/hr/4iHs9FTT6cgTexxdE0Ly/glccBAkloH/DofkjRbZU3bnoj38mOmhkZ0lHw==", + "license": "MIT", "engines": { - "node": ">=12.0.0" + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/external-editor": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/external-editor/-/external-editor-3.1.0.tgz", - "integrity": "sha512-hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew==", + "node_modules/mdast-util-frontmatter/node_modules/mdast-util-from-markdown": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/mdast-util-from-markdown/-/mdast-util-from-markdown-2.0.2.tgz", + "integrity": "sha512-uZhTV/8NBuw0WHkPTrCqDOl0zVe1BIng5ZtHoDk49ME1qqcjYmmLmOf0gELgcRMxN4w2iuIeVso5/6QymSrgmA==", "license": "MIT", "dependencies": { - "chardet": "^0.7.0", - "iconv-lite": "^0.4.24", - "tmp": "^0.0.33" + "@types/mdast": "^4.0.0", + "@types/unist": "^3.0.0", + "decode-named-character-reference": "^1.0.0", + "devlop": "^1.0.0", + "mdast-util-to-string": "^4.0.0", + "micromark": "^4.0.0", + "micromark-util-decode-numeric-character-reference": "^2.0.0", + "micromark-util-decode-string": "^2.0.0", + "micromark-util-normalize-identifier": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0", + "unist-util-stringify-position": "^4.0.0" }, - "engines": { - "node": ">=4" + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/external-editor/node_modules/chardet": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/chardet/-/chardet-0.7.0.tgz", - "integrity": "sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==", - "license": "MIT" - }, - "node_modules/external-editor/node_modules/iconv-lite": { - "version": "0.4.24", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", - "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", + "node_modules/mdast-util-frontmatter/node_modules/mdast-util-to-string": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/mdast-util-to-string/-/mdast-util-to-string-4.0.0.tgz", + "integrity": "sha512-0H44vDimn51F0YwvxSJSm0eCDOJTRlmN0R1yBh4HLj9wiV1Dn0QoXGbvFAWj2hSItVTlCmBF1hqKlIyUBVFLPg==", "license": "MIT", "dependencies": { - "safer-buffer": ">= 2.1.2 < 3" + "@types/mdast": "^4.0.0" }, - "engines": { - "node": ">=0.10.0" + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/fast-base64-decode": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fast-base64-decode/-/fast-base64-decode-1.0.0.tgz", - "integrity": "sha512-qwaScUgUGBYeDNRnbc/KyllVU88Jk1pRHPStuF/lO7B0/RTRLj7U0lkdTAutlBblY08rwZDff6tNU9cjv6j//Q==", - "license": "MIT" + "node_modules/mdast-util-frontmatter/node_modules/micromark": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/micromark/-/micromark-4.0.2.tgz", + "integrity": "sha512-zpe98Q6kvavpCr1NPVSCMebCKfD7CA2NqZ+rykeNhONIJBpc1tFKt9hucLGwha3jNTNI8lHpctWJWoimVF4PfA==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "@types/debug": "^4.0.0", + "debug": "^4.0.0", + "decode-named-character-reference": "^1.0.0", + "devlop": "^1.0.0", + "micromark-core-commonmark": "^2.0.0", + "micromark-factory-space": "^2.0.0", + "micromark-util-character": "^2.0.0", + "micromark-util-chunked": "^2.0.0", + "micromark-util-combine-extensions": "^2.0.0", + "micromark-util-decode-numeric-character-reference": "^2.0.0", + "micromark-util-encode": "^2.0.0", + "micromark-util-normalize-identifier": "^2.0.0", + "micromark-util-resolve-all": "^2.0.0", + "micromark-util-sanitize-uri": "^2.0.0", + "micromark-util-subtokenize": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/mdast-util-frontmatter/node_modules/micromark-factory-space": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-factory-space/-/micromark-factory-space-2.0.1.tgz", + "integrity": "sha512-zRkxjtBxxLd2Sc0d+fbnEunsTj46SWXgXciZmHq0kDYGnck/ZSGj9/wULTV95uoeYiK5hRXP2mJ98Uo4cq/LQg==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "micromark-util-character": "^2.0.0", + "micromark-util-types": "^2.0.0" + } }, - "node_modules/fast-copy": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/fast-copy/-/fast-copy-3.0.2.tgz", - "integrity": "sha512-dl0O9Vhju8IrcLndv2eU4ldt1ftXMqqfgN4H1cpmGV7P6jeB9FwpN9a2c8DPGE1Ys88rNUJVYDHq73CGAGOPfQ==", - "license": "MIT" + "node_modules/mdast-util-frontmatter/node_modules/micromark-util-character": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/micromark-util-character/-/micromark-util-character-2.1.1.tgz", + "integrity": "sha512-wv8tdUTJ3thSFFFJKtpYKOYiGP2+v96Hvk4Tu8KpCAsTMs6yi+nVmGh1syvSCsaxz45J6Jbw+9DD6g97+NV67Q==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + } }, - "node_modules/fast-deep-equal": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", - "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", + "node_modules/mdast-util-frontmatter/node_modules/micromark-util-symbol": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-util-symbol/-/micromark-util-symbol-2.0.1.tgz", + "integrity": "sha512-vs5t8Apaud9N28kgCrRUdEed4UJ+wWNvicHLPxCa9ENlYuAY31M0ETy5y1vA33YoNPDFTghEbnh6efaE8h4x0Q==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], "license": "MIT" }, - "node_modules/fast-diff": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/fast-diff/-/fast-diff-1.3.0.tgz", - "integrity": "sha512-VxPP4NqbUjj6MaAOafWeUn2cXWLcCtljklUtZf0Ind4XQ+QPtmA0b18zZy0jIQx+ExRVCR/ZQpBmik5lXshNsw==", - "dev": true, - "license": "Apache-2.0" - }, - "node_modules/fast-fifo": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/fast-fifo/-/fast-fifo-1.3.2.tgz", - "integrity": "sha512-/d9sfos4yxzpwkDkuN7k2SqFKtYNmCTzgfEpz82x34IM9/zc8KGxQoXg1liNC/izpRM/MBdt44Nmx41ZWqk+FQ==", - "dev": true, + "node_modules/mdast-util-frontmatter/node_modules/micromark-util-types": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/micromark-util-types/-/micromark-util-types-2.0.2.tgz", + "integrity": "sha512-Yw0ECSpJoViF1qTU4DC6NwtC4aWGt1EkzaQB8KPPyCRR8z9TWeV0HbEFGTO+ZY1wB22zmxnJqhPyTpOVCpeHTA==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], "license": "MIT" }, - "node_modules/fast-glob": { - "version": "3.3.3", - "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.3.tgz", - "integrity": "sha512-7MptL8U0cqcFdzIzwOTHoilX9x5BrNqye7Z/LuC7kCMRio1EMSyqRK3BEAUD7sXRq4iT4AzTVuZdhgQ2TCvYLg==", - "dev": true, + "node_modules/mdast-util-frontmatter/node_modules/unist-util-stringify-position": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-4.0.0.tgz", + "integrity": "sha512-0ASV06AAoKCDkS2+xw5RXJywruurpbC4JZSm7nr7MOt1ojAzvyyaO+UxZf18j8FCF6kmzCZKcAgN/yu2gm2XgQ==", "license": "MIT", "dependencies": { - "@nodelib/fs.stat": "^2.0.2", - "@nodelib/fs.walk": "^1.2.3", - "glob-parent": "^5.1.2", - "merge2": "^1.3.0", - "micromatch": "^4.0.8" + "@types/unist": "^3.0.0" }, - "engines": { - "node": ">=8.6.0" + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/fast-glob/node_modules/glob-parent": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", - "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", - "dev": true, - "license": "ISC", + "node_modules/mdast-util-gfm": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/mdast-util-gfm/-/mdast-util-gfm-3.1.0.tgz", + "integrity": "sha512-0ulfdQOM3ysHhCJ1p06l0b0VKlhU0wuQs3thxZQagjcjPrlFRqY215uZGHHJan9GEAXd9MbfPjFJz+qMkVR6zQ==", + "license": "MIT", "dependencies": { - "is-glob": "^4.0.1" + "mdast-util-from-markdown": "^2.0.0", + "mdast-util-gfm-autolink-literal": "^2.0.0", + "mdast-util-gfm-footnote": "^2.0.0", + "mdast-util-gfm-strikethrough": "^2.0.0", + "mdast-util-gfm-table": "^2.0.0", + "mdast-util-gfm-task-list-item": "^2.0.0", + "mdast-util-to-markdown": "^2.0.0" }, - "engines": { - "node": ">= 6" + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/fast-json-stable-stringify": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", - "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", - "license": "MIT" - }, - "node_modules/fast-levenshtein": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", - "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==", - "dev": true, - "license": "MIT" + "node_modules/mdast-util-gfm-autolink-literal": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/mdast-util-gfm-autolink-literal/-/mdast-util-gfm-autolink-literal-2.0.1.tgz", + "integrity": "sha512-5HVP2MKaP6L+G6YaxPNjuL0BPrq9orG3TsrZ9YXbA3vDw/ACI4MEsnoDpn6ZNm7GnZgtAcONJyPhOP8tNJQavQ==", + "license": "MIT", + "dependencies": { + "@types/mdast": "^4.0.0", + "ccount": "^2.0.0", + "devlop": "^1.0.0", + "mdast-util-find-and-replace": "^3.0.0", + "micromark-util-character": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } }, - "node_modules/fast-redact": { - "version": "3.5.0", - "resolved": "https://registry.npmjs.org/fast-redact/-/fast-redact-3.5.0.tgz", - "integrity": "sha512-dwsoQlS7h9hMeYUq1W++23NDcBLV4KqONnITDV9DjfS3q1SgDGVrBdvvTLUotWtPSD7asWDV9/CmsZPy8Hf70A==", + "node_modules/mdast-util-gfm-autolink-literal/node_modules/@types/mdast": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/@types/mdast/-/mdast-4.0.4.tgz", + "integrity": "sha512-kGaNbPh1k7AFzgpud/gMdvIm5xuECykRR+JnWKQno9TAXVa6WIVCGTPvYGekIDL4uwCZQSYbUxNBSb1aUo79oA==", "license": "MIT", - "engines": { - "node": ">=6" + "dependencies": { + "@types/unist": "*" } }, - "node_modules/fast-safe-stringify": { + "node_modules/mdast-util-gfm-autolink-literal/node_modules/micromark-util-character": { "version": "2.1.1", - "resolved": "https://registry.npmjs.org/fast-safe-stringify/-/fast-safe-stringify-2.1.1.tgz", - "integrity": "sha512-W+KJc2dmILlPplD/H4K9l9LcAHAfPtP6BY84uVLXQ6Evcz9Lcg33Y2z1IVblT6xdY54PXYVHEv+0Wpq8Io6zkA==", - "license": "MIT" + "resolved": "https://registry.npmjs.org/micromark-util-character/-/micromark-util-character-2.1.1.tgz", + "integrity": "sha512-wv8tdUTJ3thSFFFJKtpYKOYiGP2+v96Hvk4Tu8KpCAsTMs6yi+nVmGh1syvSCsaxz45J6Jbw+9DD6g97+NV67Q==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + } }, - "node_modules/fast-uri": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/fast-uri/-/fast-uri-3.1.0.tgz", - "integrity": "sha512-iPeeDKJSWf4IEOasVVrknXpaBV0IApz/gp7S2bb7Z4Lljbl2MGJRqInZiUrQwV16cpzw/D3S5j5Julj/gT52AA==", + "node_modules/mdast-util-gfm-autolink-literal/node_modules/micromark-util-symbol": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-util-symbol/-/micromark-util-symbol-2.0.1.tgz", + "integrity": "sha512-vs5t8Apaud9N28kgCrRUdEed4UJ+wWNvicHLPxCa9ENlYuAY31M0ETy5y1vA33YoNPDFTghEbnh6efaE8h4x0Q==", "funding": [ { - "type": "github", - "url": "https://github.com/sponsors/fastify" + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" }, { - "type": "opencollective", - "url": "https://opencollective.com/fastify" + "type": "OpenCollective", + "url": "https://opencollective.com/unified" } ], - "license": "BSD-3-Clause" + "license": "MIT" }, - "node_modules/fast-xml-parser": { - "version": "5.2.5", - "resolved": "https://registry.npmjs.org/fast-xml-parser/-/fast-xml-parser-5.2.5.tgz", - "integrity": "sha512-pfX9uG9Ki0yekDHx2SiuRIyFdyAr1kMIMitPvb0YBo8SUfKvia7w7FIyd/l6av85pFYRhZscS75MwMnbvY+hcQ==", + "node_modules/mdast-util-gfm-autolink-literal/node_modules/micromark-util-types": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/micromark-util-types/-/micromark-util-types-2.0.2.tgz", + "integrity": "sha512-Yw0ECSpJoViF1qTU4DC6NwtC4aWGt1EkzaQB8KPPyCRR8z9TWeV0HbEFGTO+ZY1wB22zmxnJqhPyTpOVCpeHTA==", "funding": [ { - "type": "github", - "url": "https://github.com/sponsors/NaturalIntelligence" + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" } ], + "license": "MIT" + }, + "node_modules/mdast-util-gfm-footnote": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/mdast-util-gfm-footnote/-/mdast-util-gfm-footnote-2.1.0.tgz", + "integrity": "sha512-sqpDWlsHn7Ac9GNZQMeUzPQSMzR6Wv0WKRNvQRg0KqHh02fpTz69Qc1QSseNX29bhz1ROIyNyxExfawVKTm1GQ==", "license": "MIT", "dependencies": { - "strnum": "^2.1.0" + "@types/mdast": "^4.0.0", + "devlop": "^1.1.0", + "mdast-util-from-markdown": "^2.0.0", + "mdast-util-to-markdown": "^2.0.0", + "micromark-util-normalize-identifier": "^2.0.0" }, - "bin": { - "fxparser": "src/cli/cli.js" + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/fastq": { - "version": "1.19.1", - "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.19.1.tgz", - "integrity": "sha512-GwLTyxkCXjXbxqIhTsMI2Nui8huMPtnxg7krajPJAjnEG/iiOS7i+zCtWGZR9G0NBKbXKh6X9m9UIsYX/N6vvQ==", - "dev": true, - "license": "ISC", + "node_modules/mdast-util-gfm-footnote/node_modules/@types/mdast": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/@types/mdast/-/mdast-4.0.4.tgz", + "integrity": "sha512-kGaNbPh1k7AFzgpud/gMdvIm5xuECykRR+JnWKQno9TAXVa6WIVCGTPvYGekIDL4uwCZQSYbUxNBSb1aUo79oA==", + "license": "MIT", "dependencies": { - "reusify": "^1.0.4" + "@types/unist": "*" } }, - "node_modules/fb-dotslash": { - "version": "0.5.8", - "resolved": "https://registry.npmjs.org/fb-dotslash/-/fb-dotslash-0.5.8.tgz", - "integrity": "sha512-XHYLKk9J4BupDxi9bSEhkfss0m+Vr9ChTrjhf9l2iw3jB5C7BnY4GVPoMcqbrTutsKJso6yj2nAB6BI/F2oZaA==", - "dev": true, - "license": "(MIT OR Apache-2.0)", - "peer": true, - "bin": { - "dotslash": "bin/dotslash" + "node_modules/mdast-util-gfm-footnote/node_modules/mdast-util-from-markdown": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/mdast-util-from-markdown/-/mdast-util-from-markdown-2.0.2.tgz", + "integrity": "sha512-uZhTV/8NBuw0WHkPTrCqDOl0zVe1BIng5ZtHoDk49ME1qqcjYmmLmOf0gELgcRMxN4w2iuIeVso5/6QymSrgmA==", + "license": "MIT", + "dependencies": { + "@types/mdast": "^4.0.0", + "@types/unist": "^3.0.0", + "decode-named-character-reference": "^1.0.0", + "devlop": "^1.0.0", + "mdast-util-to-string": "^4.0.0", + "micromark": "^4.0.0", + "micromark-util-decode-numeric-character-reference": "^2.0.0", + "micromark-util-decode-string": "^2.0.0", + "micromark-util-normalize-identifier": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0", + "unist-util-stringify-position": "^4.0.0" }, - "engines": { - "node": ">=20" + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/fb-watchman": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/fb-watchman/-/fb-watchman-2.0.2.tgz", - "integrity": "sha512-p5161BqbuCaSnB8jIbzQHOlpgsPmK5rJVDfDKO91Axs5NC1uu3HRQm6wt9cd9/+GtQQIO53JdGXXoyDpTAsgYA==", - "license": "Apache-2.0", + "node_modules/mdast-util-gfm-footnote/node_modules/mdast-util-to-string": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/mdast-util-to-string/-/mdast-util-to-string-4.0.0.tgz", + "integrity": "sha512-0H44vDimn51F0YwvxSJSm0eCDOJTRlmN0R1yBh4HLj9wiV1Dn0QoXGbvFAWj2hSItVTlCmBF1hqKlIyUBVFLPg==", + "license": "MIT", "dependencies": { - "bser": "2.1.1" + "@types/mdast": "^4.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/fdir": { - "version": "6.5.0", - "resolved": "https://registry.npmjs.org/fdir/-/fdir-6.5.0.tgz", - "integrity": "sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg==", - "dev": true, + "node_modules/mdast-util-gfm-footnote/node_modules/micromark": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/micromark/-/micromark-4.0.2.tgz", + "integrity": "sha512-zpe98Q6kvavpCr1NPVSCMebCKfD7CA2NqZ+rykeNhONIJBpc1tFKt9hucLGwha3jNTNI8lHpctWJWoimVF4PfA==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], "license": "MIT", - "engines": { - "node": ">=12.0.0" - }, - "peerDependencies": { - "picomatch": "^3 || ^4" - }, - "peerDependenciesMeta": { - "picomatch": { - "optional": true + "dependencies": { + "@types/debug": "^4.0.0", + "debug": "^4.0.0", + "decode-named-character-reference": "^1.0.0", + "devlop": "^1.0.0", + "micromark-core-commonmark": "^2.0.0", + "micromark-factory-space": "^2.0.0", + "micromark-util-character": "^2.0.0", + "micromark-util-chunked": "^2.0.0", + "micromark-util-combine-extensions": "^2.0.0", + "micromark-util-decode-numeric-character-reference": "^2.0.0", + "micromark-util-encode": "^2.0.0", + "micromark-util-normalize-identifier": "^2.0.0", + "micromark-util-resolve-all": "^2.0.0", + "micromark-util-sanitize-uri": "^2.0.0", + "micromark-util-subtokenize": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/mdast-util-gfm-footnote/node_modules/micromark-factory-space": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-factory-space/-/micromark-factory-space-2.0.1.tgz", + "integrity": "sha512-zRkxjtBxxLd2Sc0d+fbnEunsTj46SWXgXciZmHq0kDYGnck/ZSGj9/wULTV95uoeYiK5hRXP2mJ98Uo4cq/LQg==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" } + ], + "license": "MIT", + "dependencies": { + "micromark-util-character": "^2.0.0", + "micromark-util-types": "^2.0.0" } }, - "node_modules/fecha": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/fecha/-/fecha-4.2.3.tgz", - "integrity": "sha512-OP2IUU6HeYKJi3i0z4A19kHMQoLVs4Hc+DPqqxI2h/DPZHTm/vjsfC6P0b4jCMy14XizLBqvndQ+UilD7707Jw==", - "license": "MIT" - }, - "node_modules/fetch-blob": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/fetch-blob/-/fetch-blob-3.2.0.tgz", - "integrity": "sha512-7yAQpD2UMJzLi1Dqv7qFYnPbaPx7ZfFK6PiIxQ4PfkGPyNyl2Ugx+a/umUonmKqjhM4DnfbMvdX6otXq83soQQ==", + "node_modules/mdast-util-gfm-footnote/node_modules/micromark-util-character": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/micromark-util-character/-/micromark-util-character-2.1.1.tgz", + "integrity": "sha512-wv8tdUTJ3thSFFFJKtpYKOYiGP2+v96Hvk4Tu8KpCAsTMs6yi+nVmGh1syvSCsaxz45J6Jbw+9DD6g97+NV67Q==", "funding": [ { - "type": "github", - "url": "https://github.com/sponsors/jimmywarting" + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" }, { - "type": "paypal", - "url": "https://paypal.me/jimmywarting" + "type": "OpenCollective", + "url": "https://opencollective.com/unified" } ], "license": "MIT", "dependencies": { - "node-domexception": "^1.0.0", - "web-streams-polyfill": "^3.0.3" - }, - "engines": { - "node": "^12.20 || >= 14.13" + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" } }, - "node_modules/fetch-blob/node_modules/web-streams-polyfill": { - "version": "3.3.3", - "resolved": "https://registry.npmjs.org/web-streams-polyfill/-/web-streams-polyfill-3.3.3.tgz", - "integrity": "sha512-d2JWLCivmZYTSIoge9MsgFCZrt571BikcWGYkjC1khllbTeDlGqZ2D8vD8E/lJa8WGWbb7Plm8/XJYV7IJHZZw==", - "license": "MIT", - "engines": { - "node": ">= 8" - } + "node_modules/mdast-util-gfm-footnote/node_modules/micromark-util-symbol": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-util-symbol/-/micromark-util-symbol-2.0.1.tgz", + "integrity": "sha512-vs5t8Apaud9N28kgCrRUdEed4UJ+wWNvicHLPxCa9ENlYuAY31M0ETy5y1vA33YoNPDFTghEbnh6efaE8h4x0Q==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT" }, - "node_modules/figures": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/figures/-/figures-3.2.0.tgz", - "integrity": "sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg==", + "node_modules/mdast-util-gfm-footnote/node_modules/micromark-util-types": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/micromark-util-types/-/micromark-util-types-2.0.2.tgz", + "integrity": "sha512-Yw0ECSpJoViF1qTU4DC6NwtC4aWGt1EkzaQB8KPPyCRR8z9TWeV0HbEFGTO+ZY1wB22zmxnJqhPyTpOVCpeHTA==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT" + }, + "node_modules/mdast-util-gfm-footnote/node_modules/unist-util-stringify-position": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-4.0.0.tgz", + "integrity": "sha512-0ASV06AAoKCDkS2+xw5RXJywruurpbC4JZSm7nr7MOt1ojAzvyyaO+UxZf18j8FCF6kmzCZKcAgN/yu2gm2XgQ==", "license": "MIT", "dependencies": { - "escape-string-regexp": "^1.0.5" - }, - "engines": { - "node": ">=8" + "@types/unist": "^3.0.0" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/figures/node_modules/escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", - "license": "MIT", - "engines": { - "node": ">=0.8.0" + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/file-entry-cache": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz", - "integrity": "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==", - "dev": true, + "node_modules/mdast-util-gfm-strikethrough": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/mdast-util-gfm-strikethrough/-/mdast-util-gfm-strikethrough-2.0.0.tgz", + "integrity": "sha512-mKKb915TF+OC5ptj5bJ7WFRPdYtuHv0yTRxK2tJvi+BDqbkiG7h7u/9SI89nRAYcmap2xHQL9D+QG/6wSrTtXg==", "license": "MIT", "dependencies": { - "flat-cache": "^3.0.4" + "@types/mdast": "^4.0.0", + "mdast-util-from-markdown": "^2.0.0", + "mdast-util-to-markdown": "^2.0.0" }, - "engines": { - "node": "^10.12.0 || >=12.0.0" + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/file-stream-rotator": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/file-stream-rotator/-/file-stream-rotator-0.6.1.tgz", - "integrity": "sha512-u+dBid4PvZw17PmDeRcNOtCP9CCK/9lRN2w+r1xIS7yOL9JFrIBKTvrYsxT4P0pGtThYTn++QS5ChHaUov3+zQ==", + "node_modules/mdast-util-gfm-strikethrough/node_modules/@types/mdast": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/@types/mdast/-/mdast-4.0.4.tgz", + "integrity": "sha512-kGaNbPh1k7AFzgpud/gMdvIm5xuECykRR+JnWKQno9TAXVa6WIVCGTPvYGekIDL4uwCZQSYbUxNBSb1aUo79oA==", "license": "MIT", "dependencies": { - "moment": "^2.29.1" + "@types/unist": "*" } }, - "node_modules/fill-range": { - "version": "7.1.1", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz", - "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==", + "node_modules/mdast-util-gfm-strikethrough/node_modules/mdast-util-from-markdown": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/mdast-util-from-markdown/-/mdast-util-from-markdown-2.0.2.tgz", + "integrity": "sha512-uZhTV/8NBuw0WHkPTrCqDOl0zVe1BIng5ZtHoDk49ME1qqcjYmmLmOf0gELgcRMxN4w2iuIeVso5/6QymSrgmA==", "license": "MIT", "dependencies": { - "to-regex-range": "^5.0.1" + "@types/mdast": "^4.0.0", + "@types/unist": "^3.0.0", + "decode-named-character-reference": "^1.0.0", + "devlop": "^1.0.0", + "mdast-util-to-string": "^4.0.0", + "micromark": "^4.0.0", + "micromark-util-decode-numeric-character-reference": "^2.0.0", + "micromark-util-decode-string": "^2.0.0", + "micromark-util-normalize-identifier": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0", + "unist-util-stringify-position": "^4.0.0" }, - "engines": { - "node": ">=8" + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/filter-obj": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/filter-obj/-/filter-obj-1.1.0.tgz", - "integrity": "sha512-8rXg1ZnX7xzy2NGDVkBVaAy+lSlPNwad13BtgSlLuxfIslyt5Vg64U7tFcCt4WS1R0hvtnQybT/IyCkGZ3DpXQ==", + "node_modules/mdast-util-gfm-strikethrough/node_modules/mdast-util-to-string": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/mdast-util-to-string/-/mdast-util-to-string-4.0.0.tgz", + "integrity": "sha512-0H44vDimn51F0YwvxSJSm0eCDOJTRlmN0R1yBh4HLj9wiV1Dn0QoXGbvFAWj2hSItVTlCmBF1hqKlIyUBVFLPg==", "license": "MIT", - "engines": { - "node": ">=0.10.0" + "dependencies": { + "@types/mdast": "^4.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/finalhandler": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-2.1.0.tgz", - "integrity": "sha512-/t88Ty3d5JWQbWYgaOGCCYfXRwV1+be02WqYYlL6h0lEiUAMPM8o8qKGO01YIkOHzka2up08wvgYD0mDiI+q3Q==", + "node_modules/mdast-util-gfm-strikethrough/node_modules/micromark": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/micromark/-/micromark-4.0.2.tgz", + "integrity": "sha512-zpe98Q6kvavpCr1NPVSCMebCKfD7CA2NqZ+rykeNhONIJBpc1tFKt9hucLGwha3jNTNI8lHpctWJWoimVF4PfA==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], "license": "MIT", - "peer": true, "dependencies": { - "debug": "^4.4.0", - "encodeurl": "^2.0.0", - "escape-html": "^1.0.3", - "on-finished": "^2.4.1", - "parseurl": "^1.3.3", - "statuses": "^2.0.1" - }, - "engines": { - "node": ">= 0.8" + "@types/debug": "^4.0.0", + "debug": "^4.0.0", + "decode-named-character-reference": "^1.0.0", + "devlop": "^1.0.0", + "micromark-core-commonmark": "^2.0.0", + "micromark-factory-space": "^2.0.0", + "micromark-util-character": "^2.0.0", + "micromark-util-chunked": "^2.0.0", + "micromark-util-combine-extensions": "^2.0.0", + "micromark-util-decode-numeric-character-reference": "^2.0.0", + "micromark-util-encode": "^2.0.0", + "micromark-util-normalize-identifier": "^2.0.0", + "micromark-util-resolve-all": "^2.0.0", + "micromark-util-sanitize-uri": "^2.0.0", + "micromark-util-subtokenize": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/mdast-util-gfm-strikethrough/node_modules/micromark-factory-space": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-factory-space/-/micromark-factory-space-2.0.1.tgz", + "integrity": "sha512-zRkxjtBxxLd2Sc0d+fbnEunsTj46SWXgXciZmHq0kDYGnck/ZSGj9/wULTV95uoeYiK5hRXP2mJ98Uo4cq/LQg==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "micromark-util-character": "^2.0.0", + "micromark-util-types": "^2.0.0" } }, - "node_modules/find-replace": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/find-replace/-/find-replace-3.0.0.tgz", - "integrity": "sha512-6Tb2myMioCAgv5kfvP5/PkZZ/ntTpVK39fHY7WkWBgvbeE+VHd/tZuZ4mrC+bxh4cfOZeYKVPaJIZtZXV7GNCQ==", - "devOptional": true, + "node_modules/mdast-util-gfm-strikethrough/node_modules/micromark-util-character": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/micromark-util-character/-/micromark-util-character-2.1.1.tgz", + "integrity": "sha512-wv8tdUTJ3thSFFFJKtpYKOYiGP2+v96Hvk4Tu8KpCAsTMs6yi+nVmGh1syvSCsaxz45J6Jbw+9DD6g97+NV67Q==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], "license": "MIT", "dependencies": { - "array-back": "^3.0.1" - }, - "engines": { - "node": ">=4.0.0" + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" } }, - "node_modules/find-root": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/find-root/-/find-root-1.1.0.tgz", - "integrity": "sha512-NKfW6bec6GfKc0SGx1e07QZY9PE99u0Bft/0rzSD5k3sO/vwkVUpDUKVm5Gpp5Ue3YfShPFTX2070tDs5kB9Ng==", + "node_modules/mdast-util-gfm-strikethrough/node_modules/micromark-util-symbol": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-util-symbol/-/micromark-util-symbol-2.0.1.tgz", + "integrity": "sha512-vs5t8Apaud9N28kgCrRUdEed4UJ+wWNvicHLPxCa9ENlYuAY31M0ETy5y1vA33YoNPDFTghEbnh6efaE8h4x0Q==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], "license": "MIT" }, - "node_modules/find-up": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", - "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", - "dev": true, + "node_modules/mdast-util-gfm-strikethrough/node_modules/micromark-util-types": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/micromark-util-types/-/micromark-util-types-2.0.2.tgz", + "integrity": "sha512-Yw0ECSpJoViF1qTU4DC6NwtC4aWGt1EkzaQB8KPPyCRR8z9TWeV0HbEFGTO+ZY1wB22zmxnJqhPyTpOVCpeHTA==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT" + }, + "node_modules/mdast-util-gfm-strikethrough/node_modules/unist-util-stringify-position": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-4.0.0.tgz", + "integrity": "sha512-0ASV06AAoKCDkS2+xw5RXJywruurpbC4JZSm7nr7MOt1ojAzvyyaO+UxZf18j8FCF6kmzCZKcAgN/yu2gm2XgQ==", "license": "MIT", "dependencies": { - "locate-path": "^6.0.0", - "path-exists": "^4.0.0" - }, - "engines": { - "node": ">=10" + "@types/unist": "^3.0.0" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/fireblocks-sdk": { - "version": "5.11.0", - "resolved": "https://registry.npmjs.org/fireblocks-sdk/-/fireblocks-sdk-5.11.0.tgz", - "integrity": "sha512-a21ekRNUgVBiu7dtDCPUDRPs/CUGCe22/FrEJxA5y0swU7+wsLvZyTokyGxyaiGwYwRw9nuX8sGTErjPw5FRow==", + "node_modules/mdast-util-gfm-table": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/mdast-util-gfm-table/-/mdast-util-gfm-table-2.0.0.tgz", + "integrity": "sha512-78UEvebzz/rJIxLvE7ZtDd/vIQ0RHv+3Mh5DR96p7cS7HsBhYIICDBCu8csTNWNO6tBWfqXPWekRuj2FNOGOZg==", "license": "MIT", "dependencies": { - "@notabene/pii-sdk": "^1.16.0", - "axios": "^0.27.2", - "jsonwebtoken": "9.0.0", - "platform": "^1.3.6", - "qs": "^6.11.0", - "query-string": "^7.1.3", - "uuid": "^8.3.2" + "@types/mdast": "^4.0.0", + "devlop": "^1.0.0", + "markdown-table": "^3.0.0", + "mdast-util-from-markdown": "^2.0.0", + "mdast-util-to-markdown": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/fireblocks-sdk/node_modules/axios": { - "version": "0.27.2", - "resolved": "https://registry.npmjs.org/axios/-/axios-0.27.2.tgz", - "integrity": "sha512-t+yRIyySRTp/wua5xEr+z1q60QmLq8ABsS5O9Me1AsE5dfKqgnCFzwiCZZ/cGNd1lq4/7akDWMxdhVlucjmnOQ==", + "node_modules/mdast-util-gfm-table/node_modules/@types/mdast": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/@types/mdast/-/mdast-4.0.4.tgz", + "integrity": "sha512-kGaNbPh1k7AFzgpud/gMdvIm5xuECykRR+JnWKQno9TAXVa6WIVCGTPvYGekIDL4uwCZQSYbUxNBSb1aUo79oA==", "license": "MIT", "dependencies": { - "follow-redirects": "^1.14.9", - "form-data": "^4.0.0" + "@types/unist": "*" } }, - "node_modules/fireblocks-sdk/node_modules/uuid": { - "version": "8.3.2", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", - "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==", + "node_modules/mdast-util-gfm-table/node_modules/markdown-table": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/markdown-table/-/markdown-table-3.0.4.tgz", + "integrity": "sha512-wiYz4+JrLyb/DqW2hkFJxP7Vd7JuTDm77fvbM8VfEQdmSMqcImWeeRbHwZjBjIFki/VaMK2BhFi7oUUZeM5bqw==", "license": "MIT", - "bin": { - "uuid": "dist/bin/uuid" - } - }, - "node_modules/flat": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/flat/-/flat-5.0.2.tgz", - "integrity": "sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ==", - "dev": true, - "license": "BSD-3-Clause", - "bin": { - "flat": "cli.js" + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" } }, - "node_modules/flat-cache": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.2.0.tgz", - "integrity": "sha512-CYcENa+FtcUKLmhhqyctpclsq7QF38pKjZHsGNiSQF5r4FtoKDWabFDl3hzaEQMvT1LHEysw5twgLvpYYb4vbw==", - "dev": true, + "node_modules/mdast-util-gfm-table/node_modules/mdast-util-from-markdown": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/mdast-util-from-markdown/-/mdast-util-from-markdown-2.0.2.tgz", + "integrity": "sha512-uZhTV/8NBuw0WHkPTrCqDOl0zVe1BIng5ZtHoDk49ME1qqcjYmmLmOf0gELgcRMxN4w2iuIeVso5/6QymSrgmA==", "license": "MIT", "dependencies": { - "flatted": "^3.2.9", - "keyv": "^4.5.3", - "rimraf": "^3.0.2" - }, - "engines": { - "node": "^10.12.0 || >=12.0.0" - } - }, - "node_modules/flat-cache/node_modules/glob": { - "version": "7.2.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", - "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", - "deprecated": "Glob versions prior to v9 are no longer supported", - "dev": true, - "license": "ISC", - "dependencies": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.1.1", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - }, - "engines": { - "node": "*" + "@types/mdast": "^4.0.0", + "@types/unist": "^3.0.0", + "decode-named-character-reference": "^1.0.0", + "devlop": "^1.0.0", + "mdast-util-to-string": "^4.0.0", + "micromark": "^4.0.0", + "micromark-util-decode-numeric-character-reference": "^2.0.0", + "micromark-util-decode-string": "^2.0.0", + "micromark-util-normalize-identifier": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0", + "unist-util-stringify-position": "^4.0.0" }, "funding": { - "url": "https://github.com/sponsors/isaacs" + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/flat-cache/node_modules/rimraf": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", - "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", - "deprecated": "Rimraf versions prior to v4 are no longer supported", - "dev": true, - "license": "ISC", + "node_modules/mdast-util-gfm-table/node_modules/mdast-util-to-string": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/mdast-util-to-string/-/mdast-util-to-string-4.0.0.tgz", + "integrity": "sha512-0H44vDimn51F0YwvxSJSm0eCDOJTRlmN0R1yBh4HLj9wiV1Dn0QoXGbvFAWj2hSItVTlCmBF1hqKlIyUBVFLPg==", + "license": "MIT", "dependencies": { - "glob": "^7.1.3" - }, - "bin": { - "rimraf": "bin.js" + "@types/mdast": "^4.0.0" }, "funding": { - "url": "https://github.com/sponsors/isaacs" + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/flatted": { - "version": "3.3.3", - "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.3.3.tgz", - "integrity": "sha512-GX+ysw4PBCz0PzosHDepZGANEuFCMLrnRTiEy9McGjmkCQYwRq4A/X786G/fjM/+OjsWSU1ZrY5qyARZmO/uwg==", - "dev": true, - "license": "ISC" - }, - "node_modules/flow-enums-runtime": { - "version": "0.0.6", - "resolved": "https://registry.npmjs.org/flow-enums-runtime/-/flow-enums-runtime-0.0.6.tgz", - "integrity": "sha512-3PYnM29RFXwvAN6Pc/scUfkI7RwhQ/xqyLUyPNlXUp9S40zI8nup9tUSrTLSVnWGBN38FNiGWbwZOB6uR4OGdw==", - "license": "MIT", - "peer": true - }, - "node_modules/fn.name": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/fn.name/-/fn.name-1.1.0.tgz", - "integrity": "sha512-GRnmB5gPyJpAhTQdSZTSp9uaPSvl09KoYcMQtsB9rQoOmzs9dH6ffeccH+Z+cv6P68Hu5bC6JjRh4Ah/mHSNRw==", - "license": "MIT" - }, - "node_modules/focus-lock": { - "version": "1.3.6", - "resolved": "https://registry.npmjs.org/focus-lock/-/focus-lock-1.3.6.tgz", - "integrity": "sha512-Ik/6OCk9RQQ0T5Xw+hKNLWrjSMtv51dD4GRmJjbD5a58TIEpI5a5iXagKVl3Z5UuyslMCA8Xwnu76jQob62Yhg==", + "node_modules/mdast-util-gfm-table/node_modules/micromark": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/micromark/-/micromark-4.0.2.tgz", + "integrity": "sha512-zpe98Q6kvavpCr1NPVSCMebCKfD7CA2NqZ+rykeNhONIJBpc1tFKt9hucLGwha3jNTNI8lHpctWJWoimVF4PfA==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], "license": "MIT", "dependencies": { - "tslib": "^2.0.3" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/follow-redirects": { - "version": "1.15.11", - "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.11.tgz", - "integrity": "sha512-deG2P0JfjrTxl50XGCDyfI97ZGVCxIpfKYmfyrQ54n5FO/0gfIES8C/Psl6kWVDolizcaaxZJnTS0QSMxvnsBQ==", + "@types/debug": "^4.0.0", + "debug": "^4.0.0", + "decode-named-character-reference": "^1.0.0", + "devlop": "^1.0.0", + "micromark-core-commonmark": "^2.0.0", + "micromark-factory-space": "^2.0.0", + "micromark-util-character": "^2.0.0", + "micromark-util-chunked": "^2.0.0", + "micromark-util-combine-extensions": "^2.0.0", + "micromark-util-decode-numeric-character-reference": "^2.0.0", + "micromark-util-encode": "^2.0.0", + "micromark-util-normalize-identifier": "^2.0.0", + "micromark-util-resolve-all": "^2.0.0", + "micromark-util-sanitize-uri": "^2.0.0", + "micromark-util-subtokenize": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/mdast-util-gfm-table/node_modules/micromark-factory-space": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-factory-space/-/micromark-factory-space-2.0.1.tgz", + "integrity": "sha512-zRkxjtBxxLd2Sc0d+fbnEunsTj46SWXgXciZmHq0kDYGnck/ZSGj9/wULTV95uoeYiK5hRXP2mJ98Uo4cq/LQg==", "funding": [ { - "type": "individual", - "url": "https://github.com/sponsors/RubenVerborgh" + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" } ], "license": "MIT", - "engines": { - "node": ">=4.0" - }, - "peerDependenciesMeta": { - "debug": { - "optional": true - } + "dependencies": { + "micromark-util-character": "^2.0.0", + "micromark-util-types": "^2.0.0" } }, - "node_modules/for-each": { - "version": "0.3.5", - "resolved": "https://registry.npmjs.org/for-each/-/for-each-0.3.5.tgz", - "integrity": "sha512-dKx12eRCVIzqCxFGplyFKJMPvLEWgmNtUrpTiJIR5u97zEhRG8ySrtboPHZXx7daLxQVrl643cTzbab2tkQjxg==", + "node_modules/mdast-util-gfm-table/node_modules/micromark-util-character": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/micromark-util-character/-/micromark-util-character-2.1.1.tgz", + "integrity": "sha512-wv8tdUTJ3thSFFFJKtpYKOYiGP2+v96Hvk4Tu8KpCAsTMs6yi+nVmGh1syvSCsaxz45J6Jbw+9DD6g97+NV67Q==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], "license": "MIT", "dependencies": { - "is-callable": "^1.2.7" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" } }, - "node_modules/foreground-child": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-3.3.1.tgz", - "integrity": "sha512-gIXjKqtFuWEgzFRJA9WCQeSJLZDjgJUOMCMzxtvFq/37KojM1BFGufqsCy0r4qSQmYLsZYMeyRqzIWOMup03sw==", - "license": "ISC", - "dependencies": { - "cross-spawn": "^7.0.6", - "signal-exit": "^4.0.1" - }, - "engines": { - "node": ">=14" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } + "node_modules/mdast-util-gfm-table/node_modules/micromark-util-symbol": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-util-symbol/-/micromark-util-symbol-2.0.1.tgz", + "integrity": "sha512-vs5t8Apaud9N28kgCrRUdEed4UJ+wWNvicHLPxCa9ENlYuAY31M0ETy5y1vA33YoNPDFTghEbnh6efaE8h4x0Q==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT" }, - "node_modules/forge-light": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/forge-light/-/forge-light-1.1.4.tgz", - "integrity": "sha512-Nr0xdu93LJawgBZVU/tC+A+4pbKqigdY5PRBz8CXNm4e5saAZIqU2Qe9+nVFtVO5TWCHSgvI0LaZZuatgE5J1g==", - "license": "(BSD-3-Clause OR GPL-2.0)", - "engines": { - "node": ">= 6.13.0" - } + "node_modules/mdast-util-gfm-table/node_modules/micromark-util-types": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/micromark-util-types/-/micromark-util-types-2.0.2.tgz", + "integrity": "sha512-Yw0ECSpJoViF1qTU4DC6NwtC4aWGt1EkzaQB8KPPyCRR8z9TWeV0HbEFGTO+ZY1wB22zmxnJqhPyTpOVCpeHTA==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT" }, - "node_modules/fork-ts-checker-webpack-plugin": { - "version": "9.0.2", - "resolved": "https://registry.npmjs.org/fork-ts-checker-webpack-plugin/-/fork-ts-checker-webpack-plugin-9.0.2.tgz", - "integrity": "sha512-Uochze2R8peoN1XqlSi/rGUkDQpRogtLFocP9+PGu68zk1BDAKXfdeCdyVZpgTk8V8WFVQXdEz426VKjXLO1Gg==", + "node_modules/mdast-util-gfm-table/node_modules/unist-util-stringify-position": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-4.0.0.tgz", + "integrity": "sha512-0ASV06AAoKCDkS2+xw5RXJywruurpbC4JZSm7nr7MOt1ojAzvyyaO+UxZf18j8FCF6kmzCZKcAgN/yu2gm2XgQ==", "license": "MIT", "dependencies": { - "@babel/code-frame": "^7.16.7", - "chalk": "^4.1.2", - "chokidar": "^3.5.3", - "cosmiconfig": "^8.2.0", - "deepmerge": "^4.2.2", - "fs-extra": "^10.0.0", - "memfs": "^3.4.1", - "minimatch": "^3.0.4", - "node-abort-controller": "^3.0.1", - "schema-utils": "^3.1.1", - "semver": "^7.3.5", - "tapable": "^2.2.1" - }, - "engines": { - "node": ">=12.13.0", - "yarn": ">=1.0.0" + "@types/unist": "^3.0.0" }, - "peerDependencies": { - "typescript": ">3.6.0", - "webpack": "^5.11.0" + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/fork-ts-checker-webpack-plugin/node_modules/cosmiconfig": { - "version": "8.3.6", - "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-8.3.6.tgz", - "integrity": "sha512-kcZ6+W5QzcJ3P1Mt+83OUv/oHFqZHIx8DuxG6eZ5RGMERoLqp4BuGjhHLYGK+Kf5XVkQvqBSmAy/nGWN3qDgEA==", + "node_modules/mdast-util-gfm-task-list-item": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/mdast-util-gfm-task-list-item/-/mdast-util-gfm-task-list-item-2.0.0.tgz", + "integrity": "sha512-IrtvNvjxC1o06taBAVJznEnkiHxLFTzgonUdy8hzFVeDun0uTjxxrRGVaNFqkU1wJR3RBPEfsxmU6jDWPofrTQ==", "license": "MIT", "dependencies": { - "import-fresh": "^3.3.0", - "js-yaml": "^4.1.0", - "parse-json": "^5.2.0", - "path-type": "^4.0.0" - }, - "engines": { - "node": ">=14" + "@types/mdast": "^4.0.0", + "devlop": "^1.0.0", + "mdast-util-from-markdown": "^2.0.0", + "mdast-util-to-markdown": "^2.0.0" }, "funding": { - "url": "https://github.com/sponsors/d-fischer" - }, - "peerDependencies": { - "typescript": ">=4.9.5" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/fork-ts-checker-webpack-plugin/node_modules/fs-extra": { - "version": "10.1.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-10.1.0.tgz", - "integrity": "sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==", + "node_modules/mdast-util-gfm-task-list-item/node_modules/@types/mdast": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/@types/mdast/-/mdast-4.0.4.tgz", + "integrity": "sha512-kGaNbPh1k7AFzgpud/gMdvIm5xuECykRR+JnWKQno9TAXVa6WIVCGTPvYGekIDL4uwCZQSYbUxNBSb1aUo79oA==", "license": "MIT", "dependencies": { - "graceful-fs": "^4.2.0", - "jsonfile": "^6.0.1", - "universalify": "^2.0.0" - }, - "engines": { - "node": ">=12" + "@types/unist": "*" } }, - "node_modules/fork-ts-checker-webpack-plugin/node_modules/jsonfile": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.2.0.tgz", - "integrity": "sha512-FGuPw30AdOIUTRMC2OMRtQV+jkVj2cfPqSeWXv1NEAJ1qZ5zb1X6z1mFhbfOB/iy3ssJCD+3KuZ8r8C3uVFlAg==", + "node_modules/mdast-util-gfm-task-list-item/node_modules/mdast-util-from-markdown": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/mdast-util-from-markdown/-/mdast-util-from-markdown-2.0.2.tgz", + "integrity": "sha512-uZhTV/8NBuw0WHkPTrCqDOl0zVe1BIng5ZtHoDk49ME1qqcjYmmLmOf0gELgcRMxN4w2iuIeVso5/6QymSrgmA==", "license": "MIT", "dependencies": { - "universalify": "^2.0.0" + "@types/mdast": "^4.0.0", + "@types/unist": "^3.0.0", + "decode-named-character-reference": "^1.0.0", + "devlop": "^1.0.0", + "mdast-util-to-string": "^4.0.0", + "micromark": "^4.0.0", + "micromark-util-decode-numeric-character-reference": "^2.0.0", + "micromark-util-decode-string": "^2.0.0", + "micromark-util-normalize-identifier": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0", + "unist-util-stringify-position": "^4.0.0" }, - "optionalDependencies": { - "graceful-fs": "^4.1.6" + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/fork-ts-checker-webpack-plugin/node_modules/semver": { - "version": "7.7.2", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.2.tgz", - "integrity": "sha512-RF0Fw+rO5AMf9MAyaRXI4AV0Ulj5lMHqVxxdSgiVbixSCXoEmmX/jk0CuJw4+3SqroYO9VoUh+HcuJivvtJemA==", - "license": "ISC", - "bin": { - "semver": "bin/semver.js" + "node_modules/mdast-util-gfm-task-list-item/node_modules/mdast-util-to-string": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/mdast-util-to-string/-/mdast-util-to-string-4.0.0.tgz", + "integrity": "sha512-0H44vDimn51F0YwvxSJSm0eCDOJTRlmN0R1yBh4HLj9wiV1Dn0QoXGbvFAWj2hSItVTlCmBF1hqKlIyUBVFLPg==", + "license": "MIT", + "dependencies": { + "@types/mdast": "^4.0.0" }, - "engines": { - "node": ">=10" + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/fork-ts-checker-webpack-plugin/node_modules/universalify": { + "node_modules/mdast-util-gfm-task-list-item/node_modules/micromark": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/micromark/-/micromark-4.0.2.tgz", + "integrity": "sha512-zpe98Q6kvavpCr1NPVSCMebCKfD7CA2NqZ+rykeNhONIJBpc1tFKt9hucLGwha3jNTNI8lHpctWJWoimVF4PfA==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "@types/debug": "^4.0.0", + "debug": "^4.0.0", + "decode-named-character-reference": "^1.0.0", + "devlop": "^1.0.0", + "micromark-core-commonmark": "^2.0.0", + "micromark-factory-space": "^2.0.0", + "micromark-util-character": "^2.0.0", + "micromark-util-chunked": "^2.0.0", + "micromark-util-combine-extensions": "^2.0.0", + "micromark-util-decode-numeric-character-reference": "^2.0.0", + "micromark-util-encode": "^2.0.0", + "micromark-util-normalize-identifier": "^2.0.0", + "micromark-util-resolve-all": "^2.0.0", + "micromark-util-sanitize-uri": "^2.0.0", + "micromark-util-subtokenize": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/mdast-util-gfm-task-list-item/node_modules/micromark-factory-space": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.1.tgz", - "integrity": "sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==", + "resolved": "https://registry.npmjs.org/micromark-factory-space/-/micromark-factory-space-2.0.1.tgz", + "integrity": "sha512-zRkxjtBxxLd2Sc0d+fbnEunsTj46SWXgXciZmHq0kDYGnck/ZSGj9/wULTV95uoeYiK5hRXP2mJ98Uo4cq/LQg==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], "license": "MIT", - "engines": { - "node": ">= 10.0.0" + "dependencies": { + "micromark-util-character": "^2.0.0", + "micromark-util-types": "^2.0.0" } }, - "node_modules/form-data": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.4.tgz", - "integrity": "sha512-KrGhL9Q4zjj0kiUt5OO4Mr/A/jlI2jDYs5eHBpYHPcBEVSiipAvn2Ko2HnPe20rmcuuvMHNdZFp+4IlGTMF0Ow==", + "node_modules/mdast-util-gfm-task-list-item/node_modules/micromark-util-character": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/micromark-util-character/-/micromark-util-character-2.1.1.tgz", + "integrity": "sha512-wv8tdUTJ3thSFFFJKtpYKOYiGP2+v96Hvk4Tu8KpCAsTMs6yi+nVmGh1syvSCsaxz45J6Jbw+9DD6g97+NV67Q==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], "license": "MIT", "dependencies": { - "asynckit": "^0.4.0", - "combined-stream": "^1.0.8", - "es-set-tostringtag": "^2.1.0", - "hasown": "^2.0.2", - "mime-types": "^2.1.12" - }, - "engines": { - "node": ">= 6" + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" } }, - "node_modules/form-data-encoder": { - "version": "1.7.2", - "resolved": "https://registry.npmjs.org/form-data-encoder/-/form-data-encoder-1.7.2.tgz", - "integrity": "sha512-qfqtYan3rxrnCk1VYaA4H+Ms9xdpPqvLZa6xmMgFvhO32x7/3J/ExcTd6qpxM0vH2GdMI+poehyBZvqfMTto8A==", - "dev": true, + "node_modules/mdast-util-gfm-task-list-item/node_modules/micromark-util-symbol": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-util-symbol/-/micromark-util-symbol-2.0.1.tgz", + "integrity": "sha512-vs5t8Apaud9N28kgCrRUdEed4UJ+wWNvicHLPxCa9ENlYuAY31M0ETy5y1vA33YoNPDFTghEbnh6efaE8h4x0Q==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], "license": "MIT" }, - "node_modules/form-data/node_modules/mime-db": { - "version": "1.52.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", - "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", - "license": "MIT", - "engines": { - "node": ">= 0.6" - } + "node_modules/mdast-util-gfm-task-list-item/node_modules/micromark-util-types": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/micromark-util-types/-/micromark-util-types-2.0.2.tgz", + "integrity": "sha512-Yw0ECSpJoViF1qTU4DC6NwtC4aWGt1EkzaQB8KPPyCRR8z9TWeV0HbEFGTO+ZY1wB22zmxnJqhPyTpOVCpeHTA==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT" }, - "node_modules/form-data/node_modules/mime-types": { - "version": "2.1.35", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", - "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", + "node_modules/mdast-util-gfm-task-list-item/node_modules/unist-util-stringify-position": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-4.0.0.tgz", + "integrity": "sha512-0ASV06AAoKCDkS2+xw5RXJywruurpbC4JZSm7nr7MOt1ojAzvyyaO+UxZf18j8FCF6kmzCZKcAgN/yu2gm2XgQ==", "license": "MIT", "dependencies": { - "mime-db": "1.52.0" + "@types/unist": "^3.0.0" }, - "engines": { - "node": ">= 0.6" + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/format-util": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/format-util/-/format-util-1.0.5.tgz", - "integrity": "sha512-varLbTj0e0yVyRpqQhuWV+8hlePAgaoFRhNFj50BNjEIrw1/DphHSObtqwskVCPWNgzwPoQrZAbfa/SBiicNeg==", - "dev": true, - "license": "MIT" - }, - "node_modules/formdata-node": { - "version": "4.4.1", - "resolved": "https://registry.npmjs.org/formdata-node/-/formdata-node-4.4.1.tgz", - "integrity": "sha512-0iirZp3uVDjVGt9p49aTaqjk84TrglENEDuqfdlZQ1roC9CWlPk6Avf8EEnZNcAqPonwkG35x4n3ww/1THYAeQ==", - "dev": true, + "node_modules/mdast-util-gfm/node_modules/@types/mdast": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/@types/mdast/-/mdast-4.0.4.tgz", + "integrity": "sha512-kGaNbPh1k7AFzgpud/gMdvIm5xuECykRR+JnWKQno9TAXVa6WIVCGTPvYGekIDL4uwCZQSYbUxNBSb1aUo79oA==", "license": "MIT", "dependencies": { - "node-domexception": "1.0.0", - "web-streams-polyfill": "4.0.0-beta.3" - }, - "engines": { - "node": ">= 12.20" + "@types/unist": "*" } }, - "node_modules/formdata-polyfill": { - "version": "4.0.10", - "resolved": "https://registry.npmjs.org/formdata-polyfill/-/formdata-polyfill-4.0.10.tgz", - "integrity": "sha512-buewHzMvYL29jdeQTVILecSaZKnt/RJWjoZCF5OW60Z67/GmSLBkOFM7qh1PI3zFNtJbaZL5eQu1vLfazOwj4g==", + "node_modules/mdast-util-gfm/node_modules/mdast-util-from-markdown": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/mdast-util-from-markdown/-/mdast-util-from-markdown-2.0.2.tgz", + "integrity": "sha512-uZhTV/8NBuw0WHkPTrCqDOl0zVe1BIng5ZtHoDk49ME1qqcjYmmLmOf0gELgcRMxN4w2iuIeVso5/6QymSrgmA==", "license": "MIT", "dependencies": { - "fetch-blob": "^3.1.2" + "@types/mdast": "^4.0.0", + "@types/unist": "^3.0.0", + "decode-named-character-reference": "^1.0.0", + "devlop": "^1.0.0", + "mdast-util-to-string": "^4.0.0", + "micromark": "^4.0.0", + "micromark-util-decode-numeric-character-reference": "^2.0.0", + "micromark-util-decode-string": "^2.0.0", + "micromark-util-normalize-identifier": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0", + "unist-util-stringify-position": "^4.0.0" }, - "engines": { - "node": ">=12.20.0" + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/formidable": { - "version": "3.5.4", - "resolved": "https://registry.npmjs.org/formidable/-/formidable-3.5.4.tgz", - "integrity": "sha512-YikH+7CUTOtP44ZTnUhR7Ic2UASBPOqmaRkRKxRbywPTe5VxF7RRCck4af9wutiZ/QKM5nME9Bie2fFaPz5Gug==", - "dev": true, + "node_modules/mdast-util-gfm/node_modules/mdast-util-to-string": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/mdast-util-to-string/-/mdast-util-to-string-4.0.0.tgz", + "integrity": "sha512-0H44vDimn51F0YwvxSJSm0eCDOJTRlmN0R1yBh4HLj9wiV1Dn0QoXGbvFAWj2hSItVTlCmBF1hqKlIyUBVFLPg==", "license": "MIT", "dependencies": { - "@paralleldrive/cuid2": "^2.2.2", - "dezalgo": "^1.0.4", - "once": "^1.4.0" - }, - "engines": { - "node": ">=14.0.0" + "@types/mdast": "^4.0.0" }, "funding": { - "url": "https://ko-fi.com/tunnckoCore/commissions" - } - }, - "node_modules/forwarded": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz", - "integrity": "sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==", - "license": "MIT", - "engines": { - "node": ">= 0.6" + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/fp-ts": { - "version": "1.19.3", - "resolved": "https://registry.npmjs.org/fp-ts/-/fp-ts-1.19.3.tgz", - "integrity": "sha512-H5KQDspykdHuztLTg+ajGN0Z2qUjcEf3Ybxc6hLt0k7/zPkn29XnKnxlBPyW2XIddWrGaJBzBl4VLYOtk39yZg==", - "dev": true, - "license": "MIT" - }, - "node_modules/framer-motion": { - "version": "10.18.0", - "resolved": "https://registry.npmjs.org/framer-motion/-/framer-motion-10.18.0.tgz", - "integrity": "sha512-oGlDh1Q1XqYPksuTD/usb0I70hq95OUzmL9+6Zd+Hs4XV0oaISBa/UUMSjYiq6m8EUF32132mOJ8xVZS+I0S6w==", + "node_modules/mdast-util-gfm/node_modules/micromark": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/micromark/-/micromark-4.0.2.tgz", + "integrity": "sha512-zpe98Q6kvavpCr1NPVSCMebCKfD7CA2NqZ+rykeNhONIJBpc1tFKt9hucLGwha3jNTNI8lHpctWJWoimVF4PfA==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], "license": "MIT", "dependencies": { - "tslib": "^2.4.0" - }, - "optionalDependencies": { - "@emotion/is-prop-valid": "^0.8.2" - }, - "peerDependencies": { - "react": "^18.0.0", - "react-dom": "^18.0.0" - }, - "peerDependenciesMeta": { - "react": { - "optional": true + "@types/debug": "^4.0.0", + "debug": "^4.0.0", + "decode-named-character-reference": "^1.0.0", + "devlop": "^1.0.0", + "micromark-core-commonmark": "^2.0.0", + "micromark-factory-space": "^2.0.0", + "micromark-util-character": "^2.0.0", + "micromark-util-chunked": "^2.0.0", + "micromark-util-combine-extensions": "^2.0.0", + "micromark-util-decode-numeric-character-reference": "^2.0.0", + "micromark-util-encode": "^2.0.0", + "micromark-util-normalize-identifier": "^2.0.0", + "micromark-util-resolve-all": "^2.0.0", + "micromark-util-sanitize-uri": "^2.0.0", + "micromark-util-subtokenize": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/mdast-util-gfm/node_modules/micromark-factory-space": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-factory-space/-/micromark-factory-space-2.0.1.tgz", + "integrity": "sha512-zRkxjtBxxLd2Sc0d+fbnEunsTj46SWXgXciZmHq0kDYGnck/ZSGj9/wULTV95uoeYiK5hRXP2mJ98Uo4cq/LQg==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" }, - "react-dom": { - "optional": true + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" } - } - }, - "node_modules/framer-motion/node_modules/@emotion/is-prop-valid": { - "version": "0.8.8", - "resolved": "https://registry.npmjs.org/@emotion/is-prop-valid/-/is-prop-valid-0.8.8.tgz", - "integrity": "sha512-u5WtneEAr5IDG2Wv65yhunPSMLIpuKsbuOktRojfrEiEvRyC85LgPMZI63cr7NUqT8ZIGdSVg8ZKGxIug4lXcA==", + ], "license": "MIT", - "optional": true, "dependencies": { - "@emotion/memoize": "0.7.4" + "micromark-util-character": "^2.0.0", + "micromark-util-types": "^2.0.0" } }, - "node_modules/framer-motion/node_modules/@emotion/memoize": { - "version": "0.7.4", - "resolved": "https://registry.npmjs.org/@emotion/memoize/-/memoize-0.7.4.tgz", - "integrity": "sha512-Ja/Vfqe3HpuzRsG1oBtWTHk2PGZ7GR+2Vz5iYGelAw8dx32K0y7PjVuxK6z1nMpZOqAFsRUPCkK1YjJ56qJlgw==", - "license": "MIT", - "optional": true - }, - "node_modules/framesync": { - "version": "6.1.2", - "resolved": "https://registry.npmjs.org/framesync/-/framesync-6.1.2.tgz", - "integrity": "sha512-jBTqhX6KaQVDyus8muwZbBeGGP0XgujBRbQ7gM7BRdS3CadCZIHiawyzYLnafYcvZIh5j8WE7cxZKFn7dXhu9g==", + "node_modules/mdast-util-gfm/node_modules/micromark-util-character": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/micromark-util-character/-/micromark-util-character-2.1.1.tgz", + "integrity": "sha512-wv8tdUTJ3thSFFFJKtpYKOYiGP2+v96Hvk4Tu8KpCAsTMs6yi+nVmGh1syvSCsaxz45J6Jbw+9DD6g97+NV67Q==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], "license": "MIT", "dependencies": { - "tslib": "2.4.0" + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" } }, - "node_modules/framesync/node_modules/tslib": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.4.0.tgz", - "integrity": "sha512-d6xOpEDfsi2CZVlPQzGeux8XMwLT9hssAsaPYExaQMuYskwb+x1x7J371tWlbBdWHroy99KnVB6qIkUbs5X3UQ==", - "license": "0BSD" - }, - "node_modules/fresh": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/fresh/-/fresh-2.0.0.tgz", - "integrity": "sha512-Rx/WycZ60HOaqLKAi6cHRKKI7zxWbJ31MhntmtwMoaTeF7XFH9hhBp8vITaMidfljRQ6eYWCKkaTK+ykVJHP2A==", - "license": "MIT", - "peer": true, - "engines": { - "node": ">= 0.8" - } + "node_modules/mdast-util-gfm/node_modules/micromark-util-symbol": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-util-symbol/-/micromark-util-symbol-2.0.1.tgz", + "integrity": "sha512-vs5t8Apaud9N28kgCrRUdEed4UJ+wWNvicHLPxCa9ENlYuAY31M0ETy5y1vA33YoNPDFTghEbnh6efaE8h4x0Q==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT" }, - "node_modules/fs-constants": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs-constants/-/fs-constants-1.0.0.tgz", - "integrity": "sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow==", - "dev": true, + "node_modules/mdast-util-gfm/node_modules/micromark-util-types": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/micromark-util-types/-/micromark-util-types-2.0.2.tgz", + "integrity": "sha512-Yw0ECSpJoViF1qTU4DC6NwtC4aWGt1EkzaQB8KPPyCRR8z9TWeV0HbEFGTO+ZY1wB22zmxnJqhPyTpOVCpeHTA==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], "license": "MIT" }, - "node_modules/fs-extra": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-7.0.1.tgz", - "integrity": "sha512-YJDaCJZEnBmcbw13fvdAM9AwNOJwOzrE4pqMqBq5nFiEqXUqHwlK4B+3pUw6JNvfSPtX05xFHtYy/1ni01eGCw==", - "dev": true, + "node_modules/mdast-util-gfm/node_modules/unist-util-stringify-position": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-4.0.0.tgz", + "integrity": "sha512-0ASV06AAoKCDkS2+xw5RXJywruurpbC4JZSm7nr7MOt1ojAzvyyaO+UxZf18j8FCF6kmzCZKcAgN/yu2gm2XgQ==", "license": "MIT", "dependencies": { - "graceful-fs": "^4.1.2", - "jsonfile": "^4.0.0", - "universalify": "^0.1.0" + "@types/unist": "^3.0.0" }, - "engines": { - "node": ">=6 <7 || >=8" + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/fs-minipass": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-2.1.0.tgz", - "integrity": "sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg==", - "license": "ISC", - "optional": true, + "node_modules/mdast-util-mdx": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/mdast-util-mdx/-/mdast-util-mdx-3.0.0.tgz", + "integrity": "sha512-JfbYLAW7XnYTTbUsmpu0kdBUVe+yKVJZBItEjwyYJiDJuZ9w4eeaqks4HQO+R7objWgS2ymV60GYpI14Ug554w==", + "license": "MIT", "dependencies": { - "minipass": "^3.0.0" + "mdast-util-from-markdown": "^2.0.0", + "mdast-util-mdx-expression": "^2.0.0", + "mdast-util-mdx-jsx": "^3.0.0", + "mdast-util-mdxjs-esm": "^2.0.0", + "mdast-util-to-markdown": "^2.0.0" }, - "engines": { - "node": ">= 8" + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/fs-minipass/node_modules/minipass": { - "version": "3.3.6", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", - "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", - "license": "ISC", - "optional": true, + "node_modules/mdast-util-mdx-expression": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/mdast-util-mdx-expression/-/mdast-util-mdx-expression-2.0.1.tgz", + "integrity": "sha512-J6f+9hUp+ldTZqKRSg7Vw5V6MqjATc+3E4gf3CFNcuZNWD8XdyI6zQ8GqH7f8169MM6P7hMBRDVGnn7oHB9kXQ==", + "license": "MIT", "dependencies": { - "yallist": "^4.0.0" + "@types/estree-jsx": "^1.0.0", + "@types/hast": "^3.0.0", + "@types/mdast": "^4.0.0", + "devlop": "^1.0.0", + "mdast-util-from-markdown": "^2.0.0", + "mdast-util-to-markdown": "^2.0.0" }, - "engines": { - "node": ">=8" + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/fs-minipass/node_modules/yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", - "license": "ISC", - "optional": true - }, - "node_modules/fs-monkey": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/fs-monkey/-/fs-monkey-1.1.0.tgz", - "integrity": "sha512-QMUezzXWII9EV5aTFXW1UBVUO77wYPpjqIF8/AviUCThNeSYZykpoTixUeaNNBwmCev0AMDWMAni+f8Hxb1IFw==", - "license": "Unlicense" - }, - "node_modules/fs-readdir-recursive": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/fs-readdir-recursive/-/fs-readdir-recursive-1.1.0.tgz", - "integrity": "sha512-GNanXlVr2pf02+sPN40XN8HG+ePaNcvM0q5mZBd668Obwb0yD5GiUbZOFgwn8kGMY6I3mdyDJzieUy3PTYyTRA==", - "dev": true, - "license": "MIT" - }, - "node_modules/fs.realpath": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", - "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==", - "license": "ISC" - }, - "node_modules/fsevents": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", - "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", - "hasInstallScript": true, + "node_modules/mdast-util-mdx-expression/node_modules/@types/mdast": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/@types/mdast/-/mdast-4.0.4.tgz", + "integrity": "sha512-kGaNbPh1k7AFzgpud/gMdvIm5xuECykRR+JnWKQno9TAXVa6WIVCGTPvYGekIDL4uwCZQSYbUxNBSb1aUo79oA==", "license": "MIT", - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": "^8.16.0 || ^10.6.0 || >=11.0.0" + "dependencies": { + "@types/unist": "*" } }, - "node_modules/function-bind": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", - "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", + "node_modules/mdast-util-mdx-expression/node_modules/mdast-util-from-markdown": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/mdast-util-from-markdown/-/mdast-util-from-markdown-2.0.2.tgz", + "integrity": "sha512-uZhTV/8NBuw0WHkPTrCqDOl0zVe1BIng5ZtHoDk49ME1qqcjYmmLmOf0gELgcRMxN4w2iuIeVso5/6QymSrgmA==", "license": "MIT", + "dependencies": { + "@types/mdast": "^4.0.0", + "@types/unist": "^3.0.0", + "decode-named-character-reference": "^1.0.0", + "devlop": "^1.0.0", + "mdast-util-to-string": "^4.0.0", + "micromark": "^4.0.0", + "micromark-util-decode-numeric-character-reference": "^2.0.0", + "micromark-util-decode-string": "^2.0.0", + "micromark-util-normalize-identifier": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0", + "unist-util-stringify-position": "^4.0.0" + }, "funding": { - "url": "https://github.com/sponsors/ljharb" + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/function.prototype.name": { - "version": "1.1.8", - "resolved": "https://registry.npmjs.org/function.prototype.name/-/function.prototype.name-1.1.8.tgz", - "integrity": "sha512-e5iwyodOHhbMr/yNrc7fDYG4qlbIvI5gajyzPnb5TCwyhjApznQh1BMFou9b30SevY43gCJKXycoCBjMbsuW0Q==", - "dev": true, + "node_modules/mdast-util-mdx-expression/node_modules/mdast-util-to-string": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/mdast-util-to-string/-/mdast-util-to-string-4.0.0.tgz", + "integrity": "sha512-0H44vDimn51F0YwvxSJSm0eCDOJTRlmN0R1yBh4HLj9wiV1Dn0QoXGbvFAWj2hSItVTlCmBF1hqKlIyUBVFLPg==", "license": "MIT", "dependencies": { - "call-bind": "^1.0.8", - "call-bound": "^1.0.3", - "define-properties": "^1.2.1", - "functions-have-names": "^1.2.3", - "hasown": "^2.0.2", - "is-callable": "^1.2.7" - }, - "engines": { - "node": ">= 0.4" + "@types/mdast": "^4.0.0" }, "funding": { - "url": "https://github.com/sponsors/ljharb" + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/functions-have-names": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/functions-have-names/-/functions-have-names-1.2.3.tgz", - "integrity": "sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==", - "dev": true, + "node_modules/mdast-util-mdx-expression/node_modules/micromark": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/micromark/-/micromark-4.0.2.tgz", + "integrity": "sha512-zpe98Q6kvavpCr1NPVSCMebCKfD7CA2NqZ+rykeNhONIJBpc1tFKt9hucLGwha3jNTNI8lHpctWJWoimVF4PfA==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], "license": "MIT", - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/gauge": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/gauge/-/gauge-3.0.2.tgz", - "integrity": "sha512-+5J6MS/5XksCuXq++uFRsnUd7Ovu1XenbeuIuNRJxYWjgQbPuFhT14lAvsWfqfAmnwluf1OwMjz39HjfLPci0Q==", - "deprecated": "This package is no longer supported.", - "license": "ISC", - "optional": true, "dependencies": { - "aproba": "^1.0.3 || ^2.0.0", - "color-support": "^1.1.2", - "console-control-strings": "^1.0.0", - "has-unicode": "^2.0.1", - "object-assign": "^4.1.1", - "signal-exit": "^3.0.0", - "string-width": "^4.2.3", - "strip-ansi": "^6.0.1", - "wide-align": "^1.1.2" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/gauge/node_modules/signal-exit": { - "version": "3.0.7", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", - "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", - "license": "ISC", - "optional": true - }, - "node_modules/generator-function": { + "@types/debug": "^4.0.0", + "debug": "^4.0.0", + "decode-named-character-reference": "^1.0.0", + "devlop": "^1.0.0", + "micromark-core-commonmark": "^2.0.0", + "micromark-factory-space": "^2.0.0", + "micromark-util-character": "^2.0.0", + "micromark-util-chunked": "^2.0.0", + "micromark-util-combine-extensions": "^2.0.0", + "micromark-util-decode-numeric-character-reference": "^2.0.0", + "micromark-util-encode": "^2.0.0", + "micromark-util-normalize-identifier": "^2.0.0", + "micromark-util-resolve-all": "^2.0.0", + "micromark-util-sanitize-uri": "^2.0.0", + "micromark-util-subtokenize": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/mdast-util-mdx-expression/node_modules/micromark-factory-space": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/generator-function/-/generator-function-2.0.1.tgz", - "integrity": "sha512-SFdFmIJi+ybC0vjlHN0ZGVGHc3lgE0DxPAT0djjVg+kjOnSqclqmj0KQ7ykTOLP6YxoqOvuAODGdcHJn+43q3g==", - "dev": true, + "resolved": "https://registry.npmjs.org/micromark-factory-space/-/micromark-factory-space-2.0.1.tgz", + "integrity": "sha512-zRkxjtBxxLd2Sc0d+fbnEunsTj46SWXgXciZmHq0kDYGnck/ZSGj9/wULTV95uoeYiK5hRXP2mJ98Uo4cq/LQg==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], "license": "MIT", - "engines": { - "node": ">= 0.4" + "dependencies": { + "micromark-util-character": "^2.0.0", + "micromark-util-types": "^2.0.0" } }, - "node_modules/gensync": { - "version": "1.0.0-beta.2", - "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", - "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==", + "node_modules/mdast-util-mdx-expression/node_modules/micromark-util-character": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/micromark-util-character/-/micromark-util-character-2.1.1.tgz", + "integrity": "sha512-wv8tdUTJ3thSFFFJKtpYKOYiGP2+v96Hvk4Tu8KpCAsTMs6yi+nVmGh1syvSCsaxz45J6Jbw+9DD6g97+NV67Q==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], "license": "MIT", - "engines": { - "node": ">=6.9.0" + "dependencies": { + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" } }, - "node_modules/get-caller-file": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", - "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", - "license": "ISC", - "engines": { - "node": "6.* || 8.* || >= 10.*" - } + "node_modules/mdast-util-mdx-expression/node_modules/micromark-util-symbol": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-util-symbol/-/micromark-util-symbol-2.0.1.tgz", + "integrity": "sha512-vs5t8Apaud9N28kgCrRUdEed4UJ+wWNvicHLPxCa9ENlYuAY31M0ETy5y1vA33YoNPDFTghEbnh6efaE8h4x0Q==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT" }, - "node_modules/get-east-asian-width": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/get-east-asian-width/-/get-east-asian-width-1.4.0.tgz", - "integrity": "sha512-QZjmEOC+IT1uk6Rx0sX22V6uHWVwbdbxf1faPqJ1QhLdGgsRGCZoyaQBm/piRdJy/D2um6hM1UP7ZEeQ4EkP+Q==", - "dev": true, + "node_modules/mdast-util-mdx-expression/node_modules/micromark-util-types": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/micromark-util-types/-/micromark-util-types-2.0.2.tgz", + "integrity": "sha512-Yw0ECSpJoViF1qTU4DC6NwtC4aWGt1EkzaQB8KPPyCRR8z9TWeV0HbEFGTO+ZY1wB22zmxnJqhPyTpOVCpeHTA==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT" + }, + "node_modules/mdast-util-mdx-expression/node_modules/unist-util-stringify-position": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-4.0.0.tgz", + "integrity": "sha512-0ASV06AAoKCDkS2+xw5RXJywruurpbC4JZSm7nr7MOt1ojAzvyyaO+UxZf18j8FCF6kmzCZKcAgN/yu2gm2XgQ==", "license": "MIT", - "engines": { - "node": ">=18" + "dependencies": { + "@types/unist": "^3.0.0" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/get-func-name": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/get-func-name/-/get-func-name-2.0.2.tgz", - "integrity": "sha512-8vXOvuE167CtIc3OyItco7N/dpRtBbYOsPsXCz7X/PMnlGjYjSGuZJgM1Y7mmew7BKf9BqvLX2tnOVy1BBUsxQ==", + "node_modules/mdast-util-mdx-jsx": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/mdast-util-mdx-jsx/-/mdast-util-mdx-jsx-3.2.0.tgz", + "integrity": "sha512-lj/z8v0r6ZtsN/cGNNtemmmfoLAFZnjMbNyLzBafjzikOM+glrjNHPlf6lQDOTccj9n5b0PPihEBbhneMyGs1Q==", "license": "MIT", - "engines": { - "node": "*" + "dependencies": { + "@types/estree-jsx": "^1.0.0", + "@types/hast": "^3.0.0", + "@types/mdast": "^4.0.0", + "@types/unist": "^3.0.0", + "ccount": "^2.0.0", + "devlop": "^1.1.0", + "mdast-util-from-markdown": "^2.0.0", + "mdast-util-to-markdown": "^2.0.0", + "parse-entities": "^4.0.0", + "stringify-entities": "^4.0.0", + "unist-util-stringify-position": "^4.0.0", + "vfile-message": "^4.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/get-intrinsic": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.3.0.tgz", - "integrity": "sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ==", + "node_modules/mdast-util-mdx-jsx/node_modules/@types/mdast": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/@types/mdast/-/mdast-4.0.4.tgz", + "integrity": "sha512-kGaNbPh1k7AFzgpud/gMdvIm5xuECykRR+JnWKQno9TAXVa6WIVCGTPvYGekIDL4uwCZQSYbUxNBSb1aUo79oA==", "license": "MIT", "dependencies": { - "call-bind-apply-helpers": "^1.0.2", - "es-define-property": "^1.0.1", - "es-errors": "^1.3.0", - "es-object-atoms": "^1.1.1", - "function-bind": "^1.1.2", - "get-proto": "^1.0.1", - "gopd": "^1.2.0", - "has-symbols": "^1.1.0", - "hasown": "^2.0.2", - "math-intrinsics": "^1.1.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "@types/unist": "*" } }, - "node_modules/get-nonce": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/get-nonce/-/get-nonce-1.0.1.tgz", - "integrity": "sha512-FJhYRoDaiatfEkUK8HKlicmu/3SGFD51q3itKDGoSTysQJBnfOcxU5GxnhE1E6soB76MbT0MBtnKJuXyAx+96Q==", + "node_modules/mdast-util-mdx-jsx/node_modules/character-entities-legacy": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/character-entities-legacy/-/character-entities-legacy-3.0.0.tgz", + "integrity": "sha512-RpPp0asT/6ufRm//AJVwpViZbGM/MkjQFxJccQRHmISF/22NBtsHqAWmL+/pmkPWoIUJdWyeVleTl1wydHATVQ==", "license": "MIT", - "engines": { - "node": ">=6" + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" } }, - "node_modules/get-package-type": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/get-package-type/-/get-package-type-0.1.0.tgz", - "integrity": "sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q==", + "node_modules/mdast-util-mdx-jsx/node_modules/character-reference-invalid": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/character-reference-invalid/-/character-reference-invalid-2.0.1.tgz", + "integrity": "sha512-iBZ4F4wRbyORVsu0jPV7gXkOsGYjGHPmAyv+HiHG8gi5PtC9KI2j1+v8/tlibRvjoWX027ypmG/n0HtO5t7unw==", "license": "MIT", - "engines": { - "node": ">=8.0.0" + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" } }, - "node_modules/get-port": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/get-port/-/get-port-3.2.0.tgz", - "integrity": "sha512-x5UJKlgeUiNT8nyo/AcnwLnZuZNcSjSw0kogRB+Whd1fjjFq4B1hySFxSFWWSn4mIBzg3sRNUDFYc4g5gjPoLg==", - "dev": true, + "node_modules/mdast-util-mdx-jsx/node_modules/is-alphabetical": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-alphabetical/-/is-alphabetical-2.0.1.tgz", + "integrity": "sha512-FWyyY60MeTNyeSRpkM2Iry0G9hpr7/9kD40mD/cGQEuilcZYS4okz8SN2Q6rLCJ8gbCt6fN+rC+6tMGS99LaxQ==", "license": "MIT", - "engines": { - "node": ">=4" + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" } }, - "node_modules/get-proto": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/get-proto/-/get-proto-1.0.1.tgz", - "integrity": "sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==", + "node_modules/mdast-util-mdx-jsx/node_modules/is-alphanumerical": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-alphanumerical/-/is-alphanumerical-2.0.1.tgz", + "integrity": "sha512-hmbYhX/9MUMF5uh7tOXyK/n0ZvWpad5caBA17GsC6vyuCqaWliRG5K1qS9inmUhEMaOBIW7/whAnSwveW/LtZw==", "license": "MIT", "dependencies": { - "dunder-proto": "^1.0.1", - "es-object-atoms": "^1.0.0" + "is-alphabetical": "^2.0.0", + "is-decimal": "^2.0.0" }, - "engines": { - "node": ">= 0.4" + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" } }, - "node_modules/get-stream": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz", - "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==", - "dev": true, + "node_modules/mdast-util-mdx-jsx/node_modules/is-decimal": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-decimal/-/is-decimal-2.0.1.tgz", + "integrity": "sha512-AAB9hiomQs5DXWcRB1rqsxGUstbRroFOPPVAomNk/3XHR5JyEZChOyTWe2oayKnsSsr/kcGqF+z6yuH6HHpN0A==", "license": "MIT", - "engines": { - "node": ">=10" - }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "type": "github", + "url": "https://github.com/sponsors/wooorm" } }, - "node_modules/get-symbol-description": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/get-symbol-description/-/get-symbol-description-1.1.0.tgz", - "integrity": "sha512-w9UMqWwJxHNOvoNzSJ2oPF5wvYcvP7jUvYzhp67yEhTi17ZDBBC1z9pTdGuzjD+EFIqLSYRweZjqfiPzQ06Ebg==", - "dev": true, + "node_modules/mdast-util-mdx-jsx/node_modules/is-hexadecimal": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-hexadecimal/-/is-hexadecimal-2.0.1.tgz", + "integrity": "sha512-DgZQp241c8oO6cA1SbTEWiXeoxV42vlcJxgH+B3hi1AiqqKruZR3ZGF8In3fj4+/y/7rHvlOZLZtgJ/4ttYGZg==", "license": "MIT", - "dependencies": { - "call-bound": "^1.0.3", - "es-errors": "^1.3.0", - "get-intrinsic": "^1.2.6" - }, - "engines": { - "node": ">= 0.4" - }, "funding": { - "url": "https://github.com/sponsors/ljharb" + "type": "github", + "url": "https://github.com/sponsors/wooorm" } }, - "node_modules/get-tsconfig": { - "version": "4.10.1", - "resolved": "https://registry.npmjs.org/get-tsconfig/-/get-tsconfig-4.10.1.tgz", - "integrity": "sha512-auHyJ4AgMz7vgS8Hp3N6HXSmlMdUyhSUrfBF16w153rxtLIEOE+HGqaBppczZvnHLqQJfiHotCYpNhl0lUROFQ==", - "dev": true, + "node_modules/mdast-util-mdx-jsx/node_modules/mdast-util-from-markdown": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/mdast-util-from-markdown/-/mdast-util-from-markdown-2.0.2.tgz", + "integrity": "sha512-uZhTV/8NBuw0WHkPTrCqDOl0zVe1BIng5ZtHoDk49ME1qqcjYmmLmOf0gELgcRMxN4w2iuIeVso5/6QymSrgmA==", "license": "MIT", "dependencies": { - "resolve-pkg-maps": "^1.0.0" + "@types/mdast": "^4.0.0", + "@types/unist": "^3.0.0", + "decode-named-character-reference": "^1.0.0", + "devlop": "^1.0.0", + "mdast-util-to-string": "^4.0.0", + "micromark": "^4.0.0", + "micromark-util-decode-numeric-character-reference": "^2.0.0", + "micromark-util-decode-string": "^2.0.0", + "micromark-util-normalize-identifier": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0", + "unist-util-stringify-position": "^4.0.0" }, "funding": { - "url": "https://github.com/privatenumber/get-tsconfig?sponsor=1" + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/ghost-testrpc": { - "version": "0.0.2", - "resolved": "https://registry.npmjs.org/ghost-testrpc/-/ghost-testrpc-0.0.2.tgz", - "integrity": "sha512-i08dAEgJ2g8z5buJIrCTduwPIhih3DP+hOCTyyryikfV8T0bNvHnGXO67i0DD1H4GBDETTclPy9njZbfluQYrQ==", - "dev": true, - "license": "ISC", + "node_modules/mdast-util-mdx-jsx/node_modules/mdast-util-to-string": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/mdast-util-to-string/-/mdast-util-to-string-4.0.0.tgz", + "integrity": "sha512-0H44vDimn51F0YwvxSJSm0eCDOJTRlmN0R1yBh4HLj9wiV1Dn0QoXGbvFAWj2hSItVTlCmBF1hqKlIyUBVFLPg==", + "license": "MIT", "dependencies": { - "chalk": "^2.4.2", - "node-emoji": "^1.10.0" + "@types/mdast": "^4.0.0" }, - "bin": { - "testrpc-sc": "index.js" + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/ghost-testrpc/node_modules/ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "dev": true, + "node_modules/mdast-util-mdx-jsx/node_modules/micromark": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/micromark/-/micromark-4.0.2.tgz", + "integrity": "sha512-zpe98Q6kvavpCr1NPVSCMebCKfD7CA2NqZ+rykeNhONIJBpc1tFKt9hucLGwha3jNTNI8lHpctWJWoimVF4PfA==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], "license": "MIT", "dependencies": { - "color-convert": "^1.9.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/ghost-testrpc/node_modules/chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "dev": true, + "@types/debug": "^4.0.0", + "debug": "^4.0.0", + "decode-named-character-reference": "^1.0.0", + "devlop": "^1.0.0", + "micromark-core-commonmark": "^2.0.0", + "micromark-factory-space": "^2.0.0", + "micromark-util-character": "^2.0.0", + "micromark-util-chunked": "^2.0.0", + "micromark-util-combine-extensions": "^2.0.0", + "micromark-util-decode-numeric-character-reference": "^2.0.0", + "micromark-util-encode": "^2.0.0", + "micromark-util-normalize-identifier": "^2.0.0", + "micromark-util-resolve-all": "^2.0.0", + "micromark-util-sanitize-uri": "^2.0.0", + "micromark-util-subtokenize": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/mdast-util-mdx-jsx/node_modules/micromark-factory-space": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-factory-space/-/micromark-factory-space-2.0.1.tgz", + "integrity": "sha512-zRkxjtBxxLd2Sc0d+fbnEunsTj46SWXgXciZmHq0kDYGnck/ZSGj9/wULTV95uoeYiK5hRXP2mJ98Uo4cq/LQg==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], "license": "MIT", "dependencies": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - }, - "engines": { - "node": ">=4" + "micromark-util-character": "^2.0.0", + "micromark-util-types": "^2.0.0" } }, - "node_modules/ghost-testrpc/node_modules/color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", - "dev": true, + "node_modules/mdast-util-mdx-jsx/node_modules/micromark-util-character": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/micromark-util-character/-/micromark-util-character-2.1.1.tgz", + "integrity": "sha512-wv8tdUTJ3thSFFFJKtpYKOYiGP2+v96Hvk4Tu8KpCAsTMs6yi+nVmGh1syvSCsaxz45J6Jbw+9DD6g97+NV67Q==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], "license": "MIT", "dependencies": { - "color-name": "1.1.3" + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" } }, - "node_modules/ghost-testrpc/node_modules/color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", - "dev": true, + "node_modules/mdast-util-mdx-jsx/node_modules/micromark-util-symbol": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-util-symbol/-/micromark-util-symbol-2.0.1.tgz", + "integrity": "sha512-vs5t8Apaud9N28kgCrRUdEed4UJ+wWNvicHLPxCa9ENlYuAY31M0ETy5y1vA33YoNPDFTghEbnh6efaE8h4x0Q==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], "license": "MIT" }, - "node_modules/ghost-testrpc/node_modules/escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.8.0" - } - }, - "node_modules/ghost-testrpc/node_modules/has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=4" - } + "node_modules/mdast-util-mdx-jsx/node_modules/micromark-util-types": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/micromark-util-types/-/micromark-util-types-2.0.2.tgz", + "integrity": "sha512-Yw0ECSpJoViF1qTU4DC6NwtC4aWGt1EkzaQB8KPPyCRR8z9TWeV0HbEFGTO+ZY1wB22zmxnJqhPyTpOVCpeHTA==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT" }, - "node_modules/ghost-testrpc/node_modules/supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "dev": true, + "node_modules/mdast-util-mdx-jsx/node_modules/parse-entities": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/parse-entities/-/parse-entities-4.0.2.tgz", + "integrity": "sha512-GG2AQYWoLgL877gQIKeRPGO1xF9+eG1ujIb5soS5gPvLQ1y2o8FL90w2QWNdf9I361Mpp7726c+lj3U0qK1uGw==", "license": "MIT", "dependencies": { - "has-flag": "^3.0.0" + "@types/unist": "^2.0.0", + "character-entities-legacy": "^3.0.0", + "character-reference-invalid": "^2.0.0", + "decode-named-character-reference": "^1.0.0", + "is-alphanumerical": "^2.0.0", + "is-decimal": "^2.0.0", + "is-hexadecimal": "^2.0.0" }, - "engines": { - "node": ">=4" + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" } }, - "node_modules/git-config": { - "version": "0.0.7", - "resolved": "https://registry.npmjs.org/git-config/-/git-config-0.0.7.tgz", - "integrity": "sha512-LidZlYZXWzVjS+M3TEwhtYBaYwLeOZrXci1tBgqp/vDdZTBMl02atvwb6G35L64ibscYoPnxfbwwUS+VZAISLA==", - "license": "BSD-3-Clause", - "optional": true, - "dependencies": { - "iniparser": "~1.0.5" - } + "node_modules/mdast-util-mdx-jsx/node_modules/parse-entities/node_modules/@types/unist": { + "version": "2.0.11", + "resolved": "https://registry.npmjs.org/@types/unist/-/unist-2.0.11.tgz", + "integrity": "sha512-CmBKiL6NNo/OqgmMn95Fk9Whlp2mtvIv+KNpQKN2F4SjvrEesubTRWGYSg+BnWZOnlCaSTU1sMpsBOzgbYhnsA==", + "license": "MIT" }, - "node_modules/git-raw-commits": { + "node_modules/mdast-util-mdx-jsx/node_modules/unist-util-stringify-position": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/git-raw-commits/-/git-raw-commits-4.0.0.tgz", - "integrity": "sha512-ICsMM1Wk8xSGMowkOmPrzo2Fgmfo4bMHLNX6ytHjajRJUqvHOw/TFapQ+QG75c3X/tTDDhOSRPGC52dDbNM8FQ==", - "dev": true, + "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-4.0.0.tgz", + "integrity": "sha512-0ASV06AAoKCDkS2+xw5RXJywruurpbC4JZSm7nr7MOt1ojAzvyyaO+UxZf18j8FCF6kmzCZKcAgN/yu2gm2XgQ==", "license": "MIT", "dependencies": { - "dargs": "^8.0.0", - "meow": "^12.0.1", - "split2": "^4.0.0" - }, - "bin": { - "git-raw-commits": "cli.mjs" + "@types/unist": "^3.0.0" }, - "engines": { - "node": ">=16" + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/glob": { - "version": "11.0.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-11.0.3.tgz", - "integrity": "sha512-2Nim7dha1KVkaiF4q6Dj+ngPPMdfvLJEOpZk/jKiUAkqKebpGAWQXAq9z1xu9HKu5lWfqw/FASuccEjyznjPaA==", - "dev": true, - "license": "ISC", + "node_modules/mdast-util-mdx-jsx/node_modules/vfile-message": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/vfile-message/-/vfile-message-4.0.3.tgz", + "integrity": "sha512-QTHzsGd1EhbZs4AsQ20JX1rC3cOlt/IWJruk893DfLRr57lcnOeMaWG4K0JrRta4mIJZKth2Au3mM3u03/JWKw==", + "license": "MIT", "dependencies": { - "foreground-child": "^3.3.1", - "jackspeak": "^4.1.1", - "minimatch": "^10.0.3", - "minipass": "^7.1.2", - "package-json-from-dist": "^1.0.0", - "path-scurry": "^2.0.0" - }, - "bin": { - "glob": "dist/esm/bin.mjs" - }, - "engines": { - "node": "20 || >=22" + "@types/unist": "^3.0.0", + "unist-util-stringify-position": "^4.0.0" }, "funding": { - "url": "https://github.com/sponsors/isaacs" + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/glob-parent": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", - "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", - "dev": true, - "license": "ISC", + "node_modules/mdast-util-mdx/node_modules/@types/mdast": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/@types/mdast/-/mdast-4.0.4.tgz", + "integrity": "sha512-kGaNbPh1k7AFzgpud/gMdvIm5xuECykRR+JnWKQno9TAXVa6WIVCGTPvYGekIDL4uwCZQSYbUxNBSb1aUo79oA==", + "license": "MIT", "dependencies": { - "is-glob": "^4.0.3" - }, - "engines": { - "node": ">=10.13.0" + "@types/unist": "*" } }, - "node_modules/glob-to-regexp": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/glob-to-regexp/-/glob-to-regexp-0.4.1.tgz", - "integrity": "sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==", - "license": "BSD-2-Clause" - }, - "node_modules/glob/node_modules/minimatch": { - "version": "10.0.3", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-10.0.3.tgz", - "integrity": "sha512-IPZ167aShDZZUMdRk66cyQAW3qr0WzbHkPdMYa8bzZhlHhO3jALbKdxcaak7W9FfT2rZNpQuUu4Od7ILEpXSaw==", - "dev": true, - "license": "ISC", + "node_modules/mdast-util-mdx/node_modules/mdast-util-from-markdown": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/mdast-util-from-markdown/-/mdast-util-from-markdown-2.0.2.tgz", + "integrity": "sha512-uZhTV/8NBuw0WHkPTrCqDOl0zVe1BIng5ZtHoDk49ME1qqcjYmmLmOf0gELgcRMxN4w2iuIeVso5/6QymSrgmA==", + "license": "MIT", "dependencies": { - "@isaacs/brace-expansion": "^5.0.0" - }, - "engines": { - "node": "20 || >=22" + "@types/mdast": "^4.0.0", + "@types/unist": "^3.0.0", + "decode-named-character-reference": "^1.0.0", + "devlop": "^1.0.0", + "mdast-util-to-string": "^4.0.0", + "micromark": "^4.0.0", + "micromark-util-decode-numeric-character-reference": "^2.0.0", + "micromark-util-decode-string": "^2.0.0", + "micromark-util-normalize-identifier": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0", + "unist-util-stringify-position": "^4.0.0" }, "funding": { - "url": "https://github.com/sponsors/isaacs" + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/global-directory": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/global-directory/-/global-directory-4.0.1.tgz", - "integrity": "sha512-wHTUcDUoZ1H5/0iVqEudYW4/kAlN5cZ3j/bXn0Dpbizl9iaUVeWSHqiOjsgk6OW2bkLclbBjzewBz6weQ1zA2Q==", - "dev": true, + "node_modules/mdast-util-mdx/node_modules/mdast-util-to-string": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/mdast-util-to-string/-/mdast-util-to-string-4.0.0.tgz", + "integrity": "sha512-0H44vDimn51F0YwvxSJSm0eCDOJTRlmN0R1yBh4HLj9wiV1Dn0QoXGbvFAWj2hSItVTlCmBF1hqKlIyUBVFLPg==", "license": "MIT", "dependencies": { - "ini": "4.1.1" - }, - "engines": { - "node": ">=18" + "@types/mdast": "^4.0.0" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/global-dirs": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/global-dirs/-/global-dirs-3.0.1.tgz", - "integrity": "sha512-NBcGGFbBA9s1VzD41QXDG+3++t9Mn5t1FpLdhESY6oKY4gYTFpX4wO3sqGUa0Srjtbfj3szX0RnemmrVRUdULA==", - "dev": true, + "node_modules/mdast-util-mdx/node_modules/micromark": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/micromark/-/micromark-4.0.2.tgz", + "integrity": "sha512-zpe98Q6kvavpCr1NPVSCMebCKfD7CA2NqZ+rykeNhONIJBpc1tFKt9hucLGwha3jNTNI8lHpctWJWoimVF4PfA==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], "license": "MIT", "dependencies": { - "ini": "2.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/global-dirs/node_modules/ini": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ini/-/ini-2.0.0.tgz", - "integrity": "sha512-7PnF4oN3CvZF23ADhA5wRaYEQpJ8qygSkbtTXWBeXWXmEVRXK+1ITciHWwHhsjv1TmW0MgacIv6hEi5pX5NQdA==", - "dev": true, - "license": "ISC", - "engines": { - "node": ">=10" - } - }, - "node_modules/global-modules": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/global-modules/-/global-modules-2.0.0.tgz", - "integrity": "sha512-NGbfmJBp9x8IxyJSd1P+otYK8vonoJactOogrVfFRIAEY1ukil8RSKDz2Yo7wh1oihl51l/r6W4epkeKJHqL8A==", - "dev": true, + "@types/debug": "^4.0.0", + "debug": "^4.0.0", + "decode-named-character-reference": "^1.0.0", + "devlop": "^1.0.0", + "micromark-core-commonmark": "^2.0.0", + "micromark-factory-space": "^2.0.0", + "micromark-util-character": "^2.0.0", + "micromark-util-chunked": "^2.0.0", + "micromark-util-combine-extensions": "^2.0.0", + "micromark-util-decode-numeric-character-reference": "^2.0.0", + "micromark-util-encode": "^2.0.0", + "micromark-util-normalize-identifier": "^2.0.0", + "micromark-util-resolve-all": "^2.0.0", + "micromark-util-sanitize-uri": "^2.0.0", + "micromark-util-subtokenize": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/mdast-util-mdx/node_modules/micromark-factory-space": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-factory-space/-/micromark-factory-space-2.0.1.tgz", + "integrity": "sha512-zRkxjtBxxLd2Sc0d+fbnEunsTj46SWXgXciZmHq0kDYGnck/ZSGj9/wULTV95uoeYiK5hRXP2mJ98Uo4cq/LQg==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], "license": "MIT", "dependencies": { - "global-prefix": "^3.0.0" - }, - "engines": { - "node": ">=6" + "micromark-util-character": "^2.0.0", + "micromark-util-types": "^2.0.0" } }, - "node_modules/global-prefix": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/global-prefix/-/global-prefix-3.0.0.tgz", - "integrity": "sha512-awConJSVCHVGND6x3tmMaKcQvwXLhjdkmomy2W+Goaui8YPgYgXJZewhg3fWC+DlfqqQuWg8AwqjGTD2nAPVWg==", - "dev": true, + "node_modules/mdast-util-mdx/node_modules/micromark-util-character": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/micromark-util-character/-/micromark-util-character-2.1.1.tgz", + "integrity": "sha512-wv8tdUTJ3thSFFFJKtpYKOYiGP2+v96Hvk4Tu8KpCAsTMs6yi+nVmGh1syvSCsaxz45J6Jbw+9DD6g97+NV67Q==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], "license": "MIT", "dependencies": { - "ini": "^1.3.5", - "kind-of": "^6.0.2", - "which": "^1.3.1" - }, - "engines": { - "node": ">=6" + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" } }, - "node_modules/global-prefix/node_modules/ini": { - "version": "1.3.8", - "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz", - "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==", - "dev": true, - "license": "ISC" - }, - "node_modules/global-prefix/node_modules/which": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", - "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", - "dev": true, - "license": "ISC", - "dependencies": { - "isexe": "^2.0.0" - }, - "bin": { - "which": "bin/which" - } + "node_modules/mdast-util-mdx/node_modules/micromark-util-symbol": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-util-symbol/-/micromark-util-symbol-2.0.1.tgz", + "integrity": "sha512-vs5t8Apaud9N28kgCrRUdEed4UJ+wWNvicHLPxCa9ENlYuAY31M0ETy5y1vA33YoNPDFTghEbnh6efaE8h4x0Q==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT" }, - "node_modules/globals": { - "version": "15.15.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-15.15.0.tgz", - "integrity": "sha512-7ACyT3wmyp3I61S4fG682L0VA2RGD9otkqGJIwNUMF1SWUombIIk+af1unuDYgMm082aHYwD+mzJvv9Iu8dsgg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } + "node_modules/mdast-util-mdx/node_modules/micromark-util-types": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/micromark-util-types/-/micromark-util-types-2.0.2.tgz", + "integrity": "sha512-Yw0ECSpJoViF1qTU4DC6NwtC4aWGt1EkzaQB8KPPyCRR8z9TWeV0HbEFGTO+ZY1wB22zmxnJqhPyTpOVCpeHTA==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT" }, - "node_modules/globalthis": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/globalthis/-/globalthis-1.0.4.tgz", - "integrity": "sha512-DpLKbNU4WylpxJykQujfCcwYWiV/Jhm50Goo0wrVILAv5jOr9d+H+UR3PhSCD2rCCEIg0uc+G+muBTwD54JhDQ==", - "dev": true, + "node_modules/mdast-util-mdx/node_modules/unist-util-stringify-position": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-4.0.0.tgz", + "integrity": "sha512-0ASV06AAoKCDkS2+xw5RXJywruurpbC4JZSm7nr7MOt1ojAzvyyaO+UxZf18j8FCF6kmzCZKcAgN/yu2gm2XgQ==", "license": "MIT", "dependencies": { - "define-properties": "^1.2.1", - "gopd": "^1.0.1" - }, - "engines": { - "node": ">= 0.4" + "@types/unist": "^3.0.0" }, "funding": { - "url": "https://github.com/sponsors/ljharb" + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/globby": { - "version": "11.1.0", - "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz", - "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==", - "dev": true, + "node_modules/mdast-util-mdxjs-esm": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/mdast-util-mdxjs-esm/-/mdast-util-mdxjs-esm-2.0.1.tgz", + "integrity": "sha512-EcmOpxsZ96CvlP03NghtH1EsLtr0n9Tm4lPUJUBccV9RwUOneqSycg19n5HGzCf+10LozMRSObtVr3ee1WoHtg==", "license": "MIT", "dependencies": { - "array-union": "^2.1.0", - "dir-glob": "^3.0.1", - "fast-glob": "^3.2.9", - "ignore": "^5.2.0", - "merge2": "^1.4.1", - "slash": "^3.0.0" - }, - "engines": { - "node": ">=10" + "@types/estree-jsx": "^1.0.0", + "@types/hast": "^3.0.0", + "@types/mdast": "^4.0.0", + "devlop": "^1.0.0", + "mdast-util-from-markdown": "^2.0.0", + "mdast-util-to-markdown": "^2.0.0" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/globrex": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/globrex/-/globrex-0.1.2.tgz", - "integrity": "sha512-uHJgbwAMwNFf5mLst7IWLNg14x1CkeqglJb/K3doi4dw6q2IvAAmM/Y81kevy83wP+Sst+nutFTYOGg3d1lsxg==", - "dev": true, - "license": "MIT" + "node_modules/mdast-util-mdxjs-esm/node_modules/@types/mdast": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/@types/mdast/-/mdast-4.0.4.tgz", + "integrity": "sha512-kGaNbPh1k7AFzgpud/gMdvIm5xuECykRR+JnWKQno9TAXVa6WIVCGTPvYGekIDL4uwCZQSYbUxNBSb1aUo79oA==", + "license": "MIT", + "dependencies": { + "@types/unist": "*" + } }, - "node_modules/gopd": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.2.0.tgz", - "integrity": "sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==", + "node_modules/mdast-util-mdxjs-esm/node_modules/mdast-util-from-markdown": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/mdast-util-from-markdown/-/mdast-util-from-markdown-2.0.2.tgz", + "integrity": "sha512-uZhTV/8NBuw0WHkPTrCqDOl0zVe1BIng5ZtHoDk49ME1qqcjYmmLmOf0gELgcRMxN4w2iuIeVso5/6QymSrgmA==", "license": "MIT", - "engines": { - "node": ">= 0.4" + "dependencies": { + "@types/mdast": "^4.0.0", + "@types/unist": "^3.0.0", + "decode-named-character-reference": "^1.0.0", + "devlop": "^1.0.0", + "mdast-util-to-string": "^4.0.0", + "micromark": "^4.0.0", + "micromark-util-decode-numeric-character-reference": "^2.0.0", + "micromark-util-decode-string": "^2.0.0", + "micromark-util-normalize-identifier": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0", + "unist-util-stringify-position": "^4.0.0" }, "funding": { - "url": "https://github.com/sponsors/ljharb" + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/got": { - "version": "12.6.1", - "resolved": "https://registry.npmjs.org/got/-/got-12.6.1.tgz", - "integrity": "sha512-mThBblvlAF1d4O5oqyvN+ZxLAYwIJK7bpMxgYqPD9okW0C3qm5FFn7k811QrcuEBwaogR3ngOFoCfs6mRv7teQ==", - "dev": true, + "node_modules/mdast-util-mdxjs-esm/node_modules/mdast-util-to-string": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/mdast-util-to-string/-/mdast-util-to-string-4.0.0.tgz", + "integrity": "sha512-0H44vDimn51F0YwvxSJSm0eCDOJTRlmN0R1yBh4HLj9wiV1Dn0QoXGbvFAWj2hSItVTlCmBF1hqKlIyUBVFLPg==", "license": "MIT", "dependencies": { - "@sindresorhus/is": "^5.2.0", - "@szmarczak/http-timer": "^5.0.1", - "cacheable-lookup": "^7.0.0", - "cacheable-request": "^10.2.8", - "decompress-response": "^6.0.0", - "form-data-encoder": "^2.1.2", - "get-stream": "^6.0.1", - "http2-wrapper": "^2.1.10", - "lowercase-keys": "^3.0.0", - "p-cancelable": "^3.0.0", - "responselike": "^3.0.0" - }, - "engines": { - "node": ">=14.16" + "@types/mdast": "^4.0.0" }, "funding": { - "url": "https://github.com/sindresorhus/got?sponsor=1" + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/got/node_modules/form-data-encoder": { - "version": "2.1.4", - "resolved": "https://registry.npmjs.org/form-data-encoder/-/form-data-encoder-2.1.4.tgz", - "integrity": "sha512-yDYSgNMraqvnxiEXO4hi88+YZxaHC6QKzb5N84iRCTDeRO7ZALpir/lVmf/uXUhnwUr2O4HU8s/n6x+yNjQkHw==", - "dev": true, + "node_modules/mdast-util-mdxjs-esm/node_modules/micromark": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/micromark/-/micromark-4.0.2.tgz", + "integrity": "sha512-zpe98Q6kvavpCr1NPVSCMebCKfD7CA2NqZ+rykeNhONIJBpc1tFKt9hucLGwha3jNTNI8lHpctWJWoimVF4PfA==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], "license": "MIT", - "engines": { - "node": ">= 14.17" - } - }, - "node_modules/graceful-fs": { - "version": "4.2.11", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", - "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==", - "license": "ISC" - }, - "node_modules/graphemer": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/graphemer/-/graphemer-1.4.0.tgz", - "integrity": "sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==", - "dev": true, - "license": "MIT" - }, - "node_modules/h3": { - "version": "1.15.4", - "resolved": "https://registry.npmjs.org/h3/-/h3-1.15.4.tgz", - "integrity": "sha512-z5cFQWDffyOe4vQ9xIqNfCZdV4p//vy6fBnr8Q1AWnVZ0teurKMG66rLj++TKwKPUP3u7iMUvrvKaEUiQw2QWQ==", + "dependencies": { + "@types/debug": "^4.0.0", + "debug": "^4.0.0", + "decode-named-character-reference": "^1.0.0", + "devlop": "^1.0.0", + "micromark-core-commonmark": "^2.0.0", + "micromark-factory-space": "^2.0.0", + "micromark-util-character": "^2.0.0", + "micromark-util-chunked": "^2.0.0", + "micromark-util-combine-extensions": "^2.0.0", + "micromark-util-decode-numeric-character-reference": "^2.0.0", + "micromark-util-encode": "^2.0.0", + "micromark-util-normalize-identifier": "^2.0.0", + "micromark-util-resolve-all": "^2.0.0", + "micromark-util-sanitize-uri": "^2.0.0", + "micromark-util-subtokenize": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/mdast-util-mdxjs-esm/node_modules/micromark-factory-space": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-factory-space/-/micromark-factory-space-2.0.1.tgz", + "integrity": "sha512-zRkxjtBxxLd2Sc0d+fbnEunsTj46SWXgXciZmHq0kDYGnck/ZSGj9/wULTV95uoeYiK5hRXP2mJ98Uo4cq/LQg==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], "license": "MIT", "dependencies": { - "cookie-es": "^1.2.2", - "crossws": "^0.3.5", - "defu": "^6.1.4", - "destr": "^2.0.5", - "iron-webcrypto": "^1.2.1", - "node-mock-http": "^1.0.2", - "radix3": "^1.1.2", - "ufo": "^1.6.1", - "uncrypto": "^0.1.3" + "micromark-util-character": "^2.0.0", + "micromark-util-types": "^2.0.0" } }, - "node_modules/handlebars": { - "version": "4.7.8", - "resolved": "https://registry.npmjs.org/handlebars/-/handlebars-4.7.8.tgz", - "integrity": "sha512-vafaFqs8MZkRrSX7sFVUdo3ap/eNiLnb4IakshzvP56X5Nr1iGKAIqdX6tMlm6HcNRIkr6AxO5jFEoJzzpT8aQ==", - "devOptional": true, + "node_modules/mdast-util-mdxjs-esm/node_modules/micromark-util-character": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/micromark-util-character/-/micromark-util-character-2.1.1.tgz", + "integrity": "sha512-wv8tdUTJ3thSFFFJKtpYKOYiGP2+v96Hvk4Tu8KpCAsTMs6yi+nVmGh1syvSCsaxz45J6Jbw+9DD6g97+NV67Q==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], "license": "MIT", "dependencies": { - "minimist": "^1.2.5", - "neo-async": "^2.6.2", - "source-map": "^0.6.1", - "wordwrap": "^1.0.0" - }, - "bin": { - "handlebars": "bin/handlebars" - }, - "engines": { - "node": ">=0.4.7" - }, - "optionalDependencies": { - "uglify-js": "^3.1.4" + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" } }, - "node_modules/handlebars/node_modules/source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "devOptional": true, - "license": "BSD-3-Clause", - "engines": { - "node": ">=0.10.0" - } + "node_modules/mdast-util-mdxjs-esm/node_modules/micromark-util-symbol": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-util-symbol/-/micromark-util-symbol-2.0.1.tgz", + "integrity": "sha512-vs5t8Apaud9N28kgCrRUdEed4UJ+wWNvicHLPxCa9ENlYuAY31M0ETy5y1vA33YoNPDFTghEbnh6efaE8h4x0Q==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT" }, - "node_modules/hardhat": { - "version": "2.26.3", - "resolved": "https://registry.npmjs.org/hardhat/-/hardhat-2.26.3.tgz", - "integrity": "sha512-gBfjbxCCEaRgMCRgTpjo1CEoJwqNPhyGMMVHYZJxoQ3LLftp2erSVf8ZF6hTQC0r2wst4NcqNmLWqMnHg1quTw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@ethereumjs/util": "^9.1.0", - "@ethersproject/abi": "^5.1.2", - "@nomicfoundation/edr": "^0.11.3", - "@nomicfoundation/solidity-analyzer": "^0.1.0", - "@sentry/node": "^5.18.1", - "adm-zip": "^0.4.16", - "aggregate-error": "^3.0.0", - "ansi-escapes": "^4.3.0", - "boxen": "^5.1.2", - "chokidar": "^4.0.0", - "ci-info": "^2.0.0", - "debug": "^4.1.1", - "enquirer": "^2.3.0", - "env-paths": "^2.2.0", - "ethereum-cryptography": "^1.0.3", - "find-up": "^5.0.0", - "fp-ts": "1.19.3", - "fs-extra": "^7.0.1", - "immutable": "^4.0.0-rc.12", - "io-ts": "1.10.4", - "json-stream-stringify": "^3.1.4", - "keccak": "^3.0.2", - "lodash": "^4.17.11", - "micro-eth-signer": "^0.14.0", - "mnemonist": "^0.38.0", - "mocha": "^10.0.0", - "p-map": "^4.0.0", - "picocolors": "^1.1.0", - "raw-body": "^2.4.1", - "resolve": "1.17.0", - "semver": "^6.3.0", - "solc": "0.8.26", - "source-map-support": "^0.5.13", - "stacktrace-parser": "^0.1.10", - "tinyglobby": "^0.2.6", - "tsort": "0.0.1", - "undici": "^5.14.0", - "uuid": "^8.3.2", - "ws": "^7.4.6" - }, - "bin": { - "hardhat": "internal/cli/bootstrap.js" - }, - "peerDependencies": { - "ts-node": "*", - "typescript": "*" - }, - "peerDependenciesMeta": { - "ts-node": { - "optional": true + "node_modules/mdast-util-mdxjs-esm/node_modules/micromark-util-types": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/micromark-util-types/-/micromark-util-types-2.0.2.tgz", + "integrity": "sha512-Yw0ECSpJoViF1qTU4DC6NwtC4aWGt1EkzaQB8KPPyCRR8z9TWeV0HbEFGTO+ZY1wB22zmxnJqhPyTpOVCpeHTA==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" }, - "typescript": { - "optional": true + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" } - } + ], + "license": "MIT" }, - "node_modules/hardhat-abi-exporter": { - "version": "2.11.0", - "resolved": "https://registry.npmjs.org/hardhat-abi-exporter/-/hardhat-abi-exporter-2.11.0.tgz", - "integrity": "sha512-hBC4Xzncew9pdqVpzWoEEBJUthp99TCH39cHlMehVxBBQ6EIsIFyj3N0yd0hkVDfM8/s/FMRAuO5jntZBpwCZQ==", - "dev": true, + "node_modules/mdast-util-mdxjs-esm/node_modules/unist-util-stringify-position": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-4.0.0.tgz", + "integrity": "sha512-0ASV06AAoKCDkS2+xw5RXJywruurpbC4JZSm7nr7MOt1ojAzvyyaO+UxZf18j8FCF6kmzCZKcAgN/yu2gm2XgQ==", "license": "MIT", "dependencies": { - "@ethersproject/abi": "^5.7.0", - "delete-empty": "^3.0.0" + "@types/unist": "^3.0.0" }, - "engines": { - "node": ">=14.14.0" - }, - "peerDependencies": { - "hardhat": "^2.0.0" + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/hardhat-contract-sizer": { - "version": "2.10.1", - "resolved": "https://registry.npmjs.org/hardhat-contract-sizer/-/hardhat-contract-sizer-2.10.1.tgz", - "integrity": "sha512-/PPQQbUMgW6ERzk8M0/DA8/v2TEM9xRRAnF9qKPNMYF6FX5DFWcnxBsQvtp8uBz+vy7rmLyV9Elti2wmmhgkbg==", - "dev": true, + "node_modules/mdast-util-phrasing": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/mdast-util-phrasing/-/mdast-util-phrasing-4.1.0.tgz", + "integrity": "sha512-TqICwyvJJpBwvGAMZjj4J2n0X8QWp21b9l0o7eXyVJ25YNWYbJDVIyD1bZXE6WtV6RmKJVYmQAKWa0zWOABz2w==", "license": "MIT", "dependencies": { - "chalk": "^4.0.0", - "cli-table3": "^0.6.0", - "strip-ansi": "^6.0.0" + "@types/mdast": "^4.0.0", + "unist-util-is": "^6.0.0" }, - "peerDependencies": { - "hardhat": "^2.0.0" + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/hardhat-dependency-compiler": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/hardhat-dependency-compiler/-/hardhat-dependency-compiler-1.2.1.tgz", - "integrity": "sha512-xG5iwbspTtxOEiP5UsPngEYQ1Hg+fjTjliapIjdTQmwGkCPofrsDhQDV2O/dopcYzcR68nTx2X8xTewYHgA2rQ==", - "dev": true, + "node_modules/mdast-util-phrasing/node_modules/@types/mdast": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/@types/mdast/-/mdast-4.0.4.tgz", + "integrity": "sha512-kGaNbPh1k7AFzgpud/gMdvIm5xuECykRR+JnWKQno9TAXVa6WIVCGTPvYGekIDL4uwCZQSYbUxNBSb1aUo79oA==", "license": "MIT", - "engines": { - "node": ">=14.14.0" - }, - "peerDependencies": { - "hardhat": "^2.0.0" + "dependencies": { + "@types/unist": "*" } }, - "node_modules/hardhat-gas-reporter": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/hardhat-gas-reporter/-/hardhat-gas-reporter-1.0.10.tgz", - "integrity": "sha512-02N4+So/fZrzJ88ci54GqwVA3Zrf0C9duuTyGt0CFRIh/CdNwbnTgkXkRfojOMLBQ+6t+lBIkgbsOtqMvNwikA==", - "dev": true, + "node_modules/mdast-util-phrasing/node_modules/unist-util-is": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-6.0.1.tgz", + "integrity": "sha512-LsiILbtBETkDz8I9p1dQ0uyRUWuaQzd/cuEeS1hoRSyW5E5XGmTzlwY1OrNzzakGowI9Dr/I8HVaw4hTtnxy8g==", "license": "MIT", "dependencies": { - "array-uniq": "1.0.3", - "eth-gas-reporter": "^0.2.25", - "sha1": "^1.1.1" + "@types/unist": "^3.0.0" }, - "peerDependencies": { - "hardhat": "^2.0.2" - } - }, - "node_modules/hardhat/node_modules/@ethereumjs/rlp": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/@ethereumjs/rlp/-/rlp-5.0.2.tgz", - "integrity": "sha512-DziebCdg4JpGlEqEdGgXmjqcFoJi+JGulUXwEjsZGAscAQ7MyD/7LE/GVCP29vEQxKc7AAwjT3A2ywHp2xfoCA==", - "dev": true, - "license": "MPL-2.0", - "bin": { - "rlp": "bin/rlp.cjs" - }, - "engines": { - "node": ">=18" + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/hardhat/node_modules/@ethereumjs/util": { - "version": "9.1.0", - "resolved": "https://registry.npmjs.org/@ethereumjs/util/-/util-9.1.0.tgz", - "integrity": "sha512-XBEKsYqLGXLah9PNJbgdkigthkG7TAGvlD/sH12beMXEyHDyigfcbdvHhmLyDWgDyOJn4QwiQUaF7yeuhnjdog==", - "dev": true, - "license": "MPL-2.0", + "node_modules/mdast-util-to-hast": { + "version": "10.2.0", + "resolved": "https://registry.npmjs.org/mdast-util-to-hast/-/mdast-util-to-hast-10.2.0.tgz", + "integrity": "sha512-JoPBfJ3gBnHZ18icCwHR50orC9kNH81tiR1gs01D8Q5YpV6adHNO9nKNuFBCJQ941/32PT1a63UF/DitmS3amQ==", + "license": "MIT", "dependencies": { - "@ethereumjs/rlp": "^5.0.2", - "ethereum-cryptography": "^2.2.1" + "@types/mdast": "^3.0.0", + "@types/unist": "^2.0.0", + "mdast-util-definitions": "^4.0.0", + "mdurl": "^1.0.0", + "unist-builder": "^2.0.0", + "unist-util-generated": "^1.0.0", + "unist-util-position": "^3.0.0", + "unist-util-visit": "^2.0.0" }, - "engines": { - "node": ">=18" + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/hardhat/node_modules/@ethereumjs/util/node_modules/@noble/hashes": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.4.0.tgz", - "integrity": "sha512-V1JJ1WTRUqHHrOSh597hURcMqVKVGL/ea3kv0gSnEdsEZ0/+VyPghM1lMNGc00z7CIQorSvbKpuJkxvuHbvdbg==", - "dev": true, + "node_modules/mdast-util-to-hast/node_modules/@types/unist": { + "version": "2.0.11", + "resolved": "https://registry.npmjs.org/@types/unist/-/unist-2.0.11.tgz", + "integrity": "sha512-CmBKiL6NNo/OqgmMn95Fk9Whlp2mtvIv+KNpQKN2F4SjvrEesubTRWGYSg+BnWZOnlCaSTU1sMpsBOzgbYhnsA==", + "license": "MIT" + }, + "node_modules/mdast-util-to-markdown": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/mdast-util-to-markdown/-/mdast-util-to-markdown-2.1.2.tgz", + "integrity": "sha512-xj68wMTvGXVOKonmog6LwyJKrYXZPvlwabaryTjLh9LuvovB/KAH+kvi8Gjj+7rJjsFi23nkUxRQv1KqSroMqA==", "license": "MIT", - "engines": { - "node": ">= 16" + "dependencies": { + "@types/mdast": "^4.0.0", + "@types/unist": "^3.0.0", + "longest-streak": "^3.0.0", + "mdast-util-phrasing": "^4.0.0", + "mdast-util-to-string": "^4.0.0", + "micromark-util-classify-character": "^2.0.0", + "micromark-util-decode-string": "^2.0.0", + "unist-util-visit": "^5.0.0", + "zwitch": "^2.0.0" }, "funding": { - "url": "https://paulmillr.com/funding/" + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/hardhat/node_modules/@ethereumjs/util/node_modules/ethereum-cryptography": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/ethereum-cryptography/-/ethereum-cryptography-2.2.1.tgz", - "integrity": "sha512-r/W8lkHSiTLxUxW8Rf3u4HGB0xQweG2RyETjywylKZSzLWoWAijRz8WCuOtJ6wah+avllXBqZuk29HCCvhEIRg==", - "dev": true, + "node_modules/mdast-util-to-markdown/node_modules/@types/mdast": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/@types/mdast/-/mdast-4.0.4.tgz", + "integrity": "sha512-kGaNbPh1k7AFzgpud/gMdvIm5xuECykRR+JnWKQno9TAXVa6WIVCGTPvYGekIDL4uwCZQSYbUxNBSb1aUo79oA==", "license": "MIT", "dependencies": { - "@noble/curves": "1.4.2", - "@noble/hashes": "1.4.0", - "@scure/bip32": "1.4.0", - "@scure/bip39": "1.3.0" + "@types/unist": "*" } }, - "node_modules/hardhat/node_modules/@noble/curves": { - "version": "1.4.2", - "resolved": "https://registry.npmjs.org/@noble/curves/-/curves-1.4.2.tgz", - "integrity": "sha512-TavHr8qycMChk8UwMld0ZDRvatedkzWfH8IiaeGCfymOP5i0hSCozz9vHOL0nkwk7HRMlFnAiKpS2jrUmSybcw==", - "dev": true, + "node_modules/mdast-util-to-markdown/node_modules/mdast-util-to-string": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/mdast-util-to-string/-/mdast-util-to-string-4.0.0.tgz", + "integrity": "sha512-0H44vDimn51F0YwvxSJSm0eCDOJTRlmN0R1yBh4HLj9wiV1Dn0QoXGbvFAWj2hSItVTlCmBF1hqKlIyUBVFLPg==", "license": "MIT", "dependencies": { - "@noble/hashes": "1.4.0" + "@types/mdast": "^4.0.0" }, "funding": { - "url": "https://paulmillr.com/funding/" + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/hardhat/node_modules/@noble/curves/node_modules/@noble/hashes": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.4.0.tgz", - "integrity": "sha512-V1JJ1WTRUqHHrOSh597hURcMqVKVGL/ea3kv0gSnEdsEZ0/+VyPghM1lMNGc00z7CIQorSvbKpuJkxvuHbvdbg==", - "dev": true, + "node_modules/mdast-util-to-markdown/node_modules/unist-util-is": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-6.0.1.tgz", + "integrity": "sha512-LsiILbtBETkDz8I9p1dQ0uyRUWuaQzd/cuEeS1hoRSyW5E5XGmTzlwY1OrNzzakGowI9Dr/I8HVaw4hTtnxy8g==", "license": "MIT", - "engines": { - "node": ">= 16" + "dependencies": { + "@types/unist": "^3.0.0" }, "funding": { - "url": "https://paulmillr.com/funding/" + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/hardhat/node_modules/@noble/hashes": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.2.0.tgz", - "integrity": "sha512-FZfhjEDbT5GRswV3C6uvLPHMiVD6lQBmpoX5+eSiPaMTXte/IKqI5dykDxzZB/WBeK/CDuQRBWarPdi3FNY2zQ==", - "dev": true, - "funding": [ - { - "type": "individual", - "url": "https://paulmillr.com/funding/" - } - ], - "license": "MIT" - }, - "node_modules/hardhat/node_modules/@scure/base": { - "version": "1.1.9", - "resolved": "https://registry.npmjs.org/@scure/base/-/base-1.1.9.tgz", - "integrity": "sha512-8YKhl8GHiNI/pU2VMaofa2Tor7PJRAjwQLBBuilkJ9L5+13yVbC7JO/wS7piioAvPSwR3JKM1IJ/u4xQzbcXKg==", - "dev": true, + "node_modules/mdast-util-to-markdown/node_modules/unist-util-visit": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-5.0.0.tgz", + "integrity": "sha512-MR04uvD+07cwl/yhVuVWAtw+3GOR/knlL55Nd/wAdblk27GCVt3lqpTivy/tkJcZoNPzTwS1Y+KMojlLDhoTzg==", "license": "MIT", + "dependencies": { + "@types/unist": "^3.0.0", + "unist-util-is": "^6.0.0", + "unist-util-visit-parents": "^6.0.0" + }, "funding": { - "url": "https://paulmillr.com/funding/" + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/hardhat/node_modules/chokidar": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-4.0.3.tgz", - "integrity": "sha512-Qgzu8kfBvo+cA4962jnP1KkS6Dop5NS6g7R5LFYJr4b8Ub94PPQXUksCw9PvXoeXPRRddRNC5C1JQUR2SMGtnA==", - "dev": true, + "node_modules/mdast-util-to-markdown/node_modules/unist-util-visit-parents": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-6.0.2.tgz", + "integrity": "sha512-goh1s1TBrqSqukSc8wrjwWhL0hiJxgA8m4kFxGlQ+8FYQ3C/m11FcTs4YYem7V664AhHVvgoQLk890Ssdsr2IQ==", "license": "MIT", "dependencies": { - "readdirp": "^4.0.1" - }, - "engines": { - "node": ">= 14.16.0" + "@types/unist": "^3.0.0", + "unist-util-is": "^6.0.0" }, "funding": { - "url": "https://paulmillr.com/funding/" + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/hardhat/node_modules/ci-info": { + "node_modules/mdast-util-to-string": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-2.0.0.tgz", - "integrity": "sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ==", - "dev": true, - "license": "MIT" - }, - "node_modules/hardhat/node_modules/ethereum-cryptography": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/ethereum-cryptography/-/ethereum-cryptography-1.2.0.tgz", - "integrity": "sha512-6yFQC9b5ug6/17CQpCyE3k9eKBMdhyVjzUy1WkiuY/E4vj/SXDBbCw8QEIaXqf0Mf2SnY6RmpDcwlUmBSS0EJw==", - "dev": true, + "resolved": "https://registry.npmjs.org/mdast-util-to-string/-/mdast-util-to-string-2.0.0.tgz", + "integrity": "sha512-AW4DRS3QbBayY/jJmD8437V1Gombjf8RSOUCMFBuo5iHi58AGEgVCKQ+ezHkZZDpAQS75hcBMpLqjpJTjtUL7w==", "license": "MIT", - "dependencies": { - "@noble/hashes": "1.2.0", - "@noble/secp256k1": "1.7.1", - "@scure/bip32": "1.1.5", - "@scure/bip39": "1.1.1" + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/hardhat/node_modules/ethereum-cryptography/node_modules/@scure/bip32": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/@scure/bip32/-/bip32-1.1.5.tgz", - "integrity": "sha512-XyNh1rB0SkEqd3tXcXMi+Xe1fvg+kUIcoRIEujP1Jgv7DqW2r9lg3Ah0NkFaCs9sTkQAQA8kw7xiRXzENi9Rtw==", - "dev": true, - "funding": [ - { - "type": "individual", - "url": "https://paulmillr.com/funding/" - } - ], - "license": "MIT", - "dependencies": { - "@noble/hashes": "~1.2.0", - "@noble/secp256k1": "~1.7.0", - "@scure/base": "~1.1.0" - } + "node_modules/mdn-data": { + "version": "2.0.30", + "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.30.tgz", + "integrity": "sha512-GaqWWShW4kv/G9IEucWScBx9G1/vsFZZJUO+tD26M8J8z3Kw5RDQjaoZe03YAClgeS/SWPOcb4nkFBTEi5DUEA==", + "license": "CC0-1.0" }, - "node_modules/hardhat/node_modules/ethereum-cryptography/node_modules/@scure/bip39": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/@scure/bip39/-/bip39-1.1.1.tgz", - "integrity": "sha512-t+wDck2rVkh65Hmv280fYdVdY25J9YeEUIgn2LG1WM6gxFkGzcksoDiUkWVpVp3Oex9xGC68JU2dSbUfwZ2jPg==", - "dev": true, - "funding": [ - { - "type": "individual", - "url": "https://paulmillr.com/funding/" - } - ], - "license": "MIT", - "dependencies": { - "@noble/hashes": "~1.2.0", - "@scure/base": "~1.1.0" - } + "node_modules/mdurl": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/mdurl/-/mdurl-1.0.1.tgz", + "integrity": "sha512-/sKlQJCBYVY9Ers9hqzKou4H6V5UWc/M59TH2dvkt+84itfnq7uFOMLpOiOS4ujvHP4etln18fmIxA5R5fll0g==", + "license": "MIT" }, - "node_modules/hardhat/node_modules/readdirp": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-4.1.2.tgz", - "integrity": "sha512-GDhwkLfywWL2s6vEjyhri+eXmfH6j1L7JE27WhqLeYzoh/A3DBaYGEj2H/HFZCn/kMfim73FXxEJTw06WtxQwg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 14.18.0" - }, - "funding": { - "type": "individual", - "url": "https://paulmillr.com/funding/" + "node_modules/media-typer": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", + "integrity": "sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==", + "license": "MIT", + "engines": { + "node": ">= 0.6" } }, - "node_modules/hardhat/node_modules/resolve": { - "version": "1.17.0", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.17.0.tgz", - "integrity": "sha512-ic+7JYiV8Vi2yzQGFWOkiZD5Z9z7O2Zhm9XMaTxdJExKasieFCr+yXZ/WmXsckHiKl12ar0y6XiXDx3m4RHn1w==", - "dev": true, - "license": "MIT", + "node_modules/memfs": { + "version": "3.5.3", + "resolved": "https://registry.npmjs.org/memfs/-/memfs-3.5.3.tgz", + "integrity": "sha512-UERzLsxzllchadvbPs5aolHh65ISpKpM+ccLbOJ8/vvpBKmAWf+la7dXFy7Mr0ySHbdHrFv5kGFCUHHe6GFEmw==", + "license": "Unlicense", "dependencies": { - "path-parse": "^1.0.6" + "fs-monkey": "^1.0.4" }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "engines": { + "node": ">= 4.0.0" } }, - "node_modules/hardhat/node_modules/uuid": { - "version": "8.3.2", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", - "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==", + "node_modules/memoize-one": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/memoize-one/-/memoize-one-6.0.0.tgz", + "integrity": "sha512-rkpe71W0N0c0Xz6QD0eJETuWAJGnJ9afsl1srmwPrI+yBCkge5EycXXbYRyvL29zZVUWQCY7InPRCv3GDXuZNw==", + "license": "MIT" + }, + "node_modules/memorystream": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/memorystream/-/memorystream-0.3.1.tgz", + "integrity": "sha512-S3UwM3yj5mtUSEfP41UZmt/0SCoVYUcU1rkXv+BQ5Ig8ndL4sPoJNBUJERafdPb5jjHJGuMgytgKvKIf58XNBw==", "dev": true, - "license": "MIT", - "bin": { - "uuid": "dist/bin/uuid" + "engines": { + "node": ">= 0.10.0" } }, - "node_modules/hardhat/node_modules/ws": { - "version": "7.5.10", - "resolved": "https://registry.npmjs.org/ws/-/ws-7.5.10.tgz", - "integrity": "sha512-+dbF1tHwZpXcbOJdVOkzLDxZP1ailvSxM6ZweXTegylPny803bFhA+vqBYw4s31NSAk4S2Qz+AKXK9a4wkdjcQ==", + "node_modules/meow": { + "version": "12.1.1", + "resolved": "https://registry.npmjs.org/meow/-/meow-12.1.1.tgz", + "integrity": "sha512-BhXM0Au22RwUneMPwSCnyhTOizdWoIEPU9sp0Aqa1PnDMR5Wv2FGXYDjuzJEIX+Eo2Rb8xuYe5jrnm5QowQFkw==", "dev": true, "license": "MIT", "engines": { - "node": ">=8.3.0" - }, - "peerDependencies": { - "bufferutil": "^4.0.1", - "utf-8-validate": "^5.0.2" + "node": ">=16.10" }, - "peerDependenciesMeta": { - "bufferutil": { - "optional": true - }, - "utf-8-validate": { - "optional": true - } + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/has-bigints": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.1.0.tgz", - "integrity": "sha512-R3pbpkcIqv2Pm3dUwgjclDRVmWpTJW2DcMzcIhEXEx1oh/CEMObMm3KLmRJOdvhM7o4uQBnwr8pzRK2sJWIqfg==", - "dev": true, + "node_modules/merge-descriptors": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-2.0.0.tgz", + "integrity": "sha512-Snk314V5ayFLhp3fkUREub6WtjBfPdCPY1Ln8/8munuLuiYhsABgBVWsozAG+MWMbVEvcdcpbi9R7ww22l9Q3g==", "license": "MIT", "engines": { - "node": ">= 0.4" + "node": ">=18" }, "funding": { - "url": "https://github.com/sponsors/ljharb" + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "node_modules/merge-stream": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", + "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==", + "license": "MIT" + }, + "node_modules/merge2": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", + "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", "license": "MIT", "engines": { - "node": ">=8" + "node": ">= 8" } }, - "node_modules/has-own-prop": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/has-own-prop/-/has-own-prop-2.0.0.tgz", - "integrity": "sha512-Pq0h+hvsVm6dDEa8x82GnLSYHOzNDt7f0ddFa3FqcQlgzEiptPqL+XrOJNavjOzSYiYWIrgeVYYgGlLmnxwilQ==", + "node_modules/mermaid": { + "version": "11.12.2", + "resolved": "https://registry.npmjs.org/mermaid/-/mermaid-11.12.2.tgz", + "integrity": "sha512-n34QPDPEKmaeCG4WDMGy0OT6PSyxKCfy2pJgShP+Qow2KLrvWjclwbc3yXfSIf4BanqWEhQEpngWwNp/XhZt6w==", + "license": "MIT", + "dependencies": { + "@braintree/sanitize-url": "^7.1.1", + "@iconify/utils": "^3.0.1", + "@mermaid-js/parser": "^0.6.3", + "@types/d3": "^7.4.3", + "cytoscape": "^3.29.3", + "cytoscape-cose-bilkent": "^4.1.0", + "cytoscape-fcose": "^2.2.0", + "d3": "^7.9.0", + "d3-sankey": "^0.12.3", + "dagre-d3-es": "7.0.13", + "dayjs": "^1.11.18", + "dompurify": "^3.2.5", + "katex": "^0.16.22", + "khroma": "^2.1.0", + "lodash-es": "^4.17.21", + "marked": "^16.2.1", + "roughjs": "^4.6.6", + "stylis": "^4.3.6", + "ts-dedent": "^2.2.0", + "uuid": "^11.1.0" + } + }, + "node_modules/mermaid/node_modules/stylis": { + "version": "4.3.6", + "resolved": "https://registry.npmjs.org/stylis/-/stylis-4.3.6.tgz", + "integrity": "sha512-yQ3rwFWRfwNUY7H5vpU0wfdkNSnvnJinhF9830Swlaxl03zsOjCfmX0ugac+3LtK0lYSgwL/KXc8oYL3mG4YFQ==", + "license": "MIT" + }, + "node_modules/mermaid/node_modules/uuid": { + "version": "11.1.0", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-11.1.0.tgz", + "integrity": "sha512-0/A9rDy9P7cJ+8w1c9WD9V//9Wj15Ce2MPz8Ri6032usz+NfePxx5AcN3bN+r6ZL6jEo066/yNYB3tn4pQEx+A==", + "funding": [ + "https://github.com/sponsors/broofa", + "https://github.com/sponsors/ctavan" + ], + "license": "MIT", + "bin": { + "uuid": "dist/esm/bin/uuid" + } + }, + "node_modules/methods": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", + "integrity": "sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w==", "license": "MIT", "engines": { - "node": ">=8" + "node": ">= 0.6" } }, - "node_modules/has-property-descriptors": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.2.tgz", - "integrity": "sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==", + "node_modules/metro": { + "version": "0.83.3", + "resolved": "https://registry.npmjs.org/metro/-/metro-0.83.3.tgz", + "integrity": "sha512-+rP+/GieOzkt97hSJ0MrPOuAH/jpaS21ZDvL9DJ35QYRDlQcwzcvUlGUf79AnQxq/2NPiS/AULhhM4TKutIt8Q==", "license": "MIT", "dependencies": { - "es-define-property": "^1.0.0" + "@babel/code-frame": "^7.24.7", + "@babel/core": "^7.25.2", + "@babel/generator": "^7.25.0", + "@babel/parser": "^7.25.3", + "@babel/template": "^7.25.0", + "@babel/traverse": "^7.25.3", + "@babel/types": "^7.25.2", + "accepts": "^1.3.7", + "chalk": "^4.0.0", + "ci-info": "^2.0.0", + "connect": "^3.6.5", + "debug": "^4.4.0", + "error-stack-parser": "^2.0.6", + "flow-enums-runtime": "^0.0.6", + "graceful-fs": "^4.2.4", + "hermes-parser": "0.32.0", + "image-size": "^1.0.2", + "invariant": "^2.2.4", + "jest-worker": "^29.7.0", + "jsc-safe-url": "^0.2.2", + "lodash.throttle": "^4.1.1", + "metro-babel-transformer": "0.83.3", + "metro-cache": "0.83.3", + "metro-cache-key": "0.83.3", + "metro-config": "0.83.3", + "metro-core": "0.83.3", + "metro-file-map": "0.83.3", + "metro-resolver": "0.83.3", + "metro-runtime": "0.83.3", + "metro-source-map": "0.83.3", + "metro-symbolicate": "0.83.3", + "metro-transform-plugins": "0.83.3", + "metro-transform-worker": "0.83.3", + "mime-types": "^2.1.27", + "nullthrows": "^1.1.1", + "serialize-error": "^2.1.0", + "source-map": "^0.5.6", + "throat": "^5.0.0", + "ws": "^7.5.10", + "yargs": "^17.6.2" }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "bin": { + "metro": "src/cli.js" + }, + "engines": { + "node": ">=20.19.4" } }, - "node_modules/has-proto": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.2.0.tgz", - "integrity": "sha512-KIL7eQPfHQRC8+XluaIw7BHUwwqL19bQn4hzNgdr+1wXoU0KKj6rufu47lhY7KbJR2C6T6+PfyN0Ea7wkSS+qQ==", - "dev": true, + "node_modules/metro-babel-transformer": { + "version": "0.83.3", + "resolved": "https://registry.npmjs.org/metro-babel-transformer/-/metro-babel-transformer-0.83.3.tgz", + "integrity": "sha512-1vxlvj2yY24ES1O5RsSIvg4a4WeL7PFXgKOHvXTXiW0deLvQr28ExXj6LjwCCDZ4YZLhq6HddLpZnX4dEdSq5g==", "license": "MIT", "dependencies": { - "dunder-proto": "^1.0.0" + "@babel/core": "^7.25.2", + "flow-enums-runtime": "^0.0.6", + "hermes-parser": "0.32.0", + "nullthrows": "^1.1.1" }, "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "node": ">=20.19.4" } }, - "node_modules/has-symbols": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.1.0.tgz", - "integrity": "sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==", + "node_modules/metro-babel-transformer/node_modules/hermes-estree": { + "version": "0.32.0", + "resolved": "https://registry.npmjs.org/hermes-estree/-/hermes-estree-0.32.0.tgz", + "integrity": "sha512-KWn3BqnlDOl97Xe1Yviur6NbgIZ+IP+UVSpshlZWkq+EtoHg6/cwiDj/osP9PCEgFE15KBm1O55JRwbMEm5ejQ==", + "license": "MIT" + }, + "node_modules/metro-babel-transformer/node_modules/hermes-parser": { + "version": "0.32.0", + "resolved": "https://registry.npmjs.org/hermes-parser/-/hermes-parser-0.32.0.tgz", + "integrity": "sha512-g4nBOWFpuiTqjR3LZdRxKUkij9iyveWeuks7INEsMX741f3r9xxrOe8TeQfUxtda0eXmiIFiMQzoeSQEno33Hw==", "license": "MIT", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "dependencies": { + "hermes-estree": "0.32.0" } }, - "node_modules/has-tostringtag": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.2.tgz", - "integrity": "sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==", + "node_modules/metro-cache": { + "version": "0.83.3", + "resolved": "https://registry.npmjs.org/metro-cache/-/metro-cache-0.83.3.tgz", + "integrity": "sha512-3jo65X515mQJvKqK3vWRblxDEcgY55Sk3w4xa6LlfEXgQ9g1WgMh9m4qVZVwgcHoLy0a2HENTPCCX4Pk6s8c8Q==", "license": "MIT", "dependencies": { - "has-symbols": "^1.0.3" + "exponential-backoff": "^3.1.1", + "flow-enums-runtime": "^0.0.6", + "https-proxy-agent": "^7.0.5", + "metro-core": "0.83.3" }, "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "node": ">=20.19.4" } }, - "node_modules/has-unicode": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/has-unicode/-/has-unicode-2.0.1.tgz", - "integrity": "sha512-8Rf9Y83NBReMnx0gFzA8JImQACstCYWUplepDa9xprwwtmgEZUF0h/i5xSA625zB/I37EtrswSST6OXxwaaIJQ==", - "license": "ISC", - "optional": true + "node_modules/metro-cache-key": { + "version": "0.83.3", + "resolved": "https://registry.npmjs.org/metro-cache-key/-/metro-cache-key-0.83.3.tgz", + "integrity": "sha512-59ZO049jKzSmvBmG/B5bZ6/dztP0ilp0o988nc6dpaDsU05Cl1c/lRf+yx8m9WW/JVgbmfO5MziBU559XjI5Zw==", + "license": "MIT", + "dependencies": { + "flow-enums-runtime": "^0.0.6" + }, + "engines": { + "node": ">=20.19.4" + } }, - "node_modules/has-yarn": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-yarn/-/has-yarn-3.0.0.tgz", - "integrity": "sha512-IrsVwUHhEULx3R8f/aA8AHuEzAorplsab/v8HBzEiIukwq5i/EC+xmOW+HfP1OaDP+2JkgT1yILHN2O3UFIbcA==", - "dev": true, + "node_modules/metro-cache/node_modules/agent-base": { + "version": "7.1.4", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-7.1.4.tgz", + "integrity": "sha512-MnA+YT8fwfJPgBx3m60MNqakm30XOkyIoH1y6huTQvC0PwZG7ki8NacLBcrPbNoo8vEZy7Jpuk7+jMO+CUovTQ==", "license": "MIT", "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">= 14" } }, - "node_modules/hash-base": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/hash-base/-/hash-base-3.1.2.tgz", - "integrity": "sha512-Bb33KbowVTIj5s7Ked1OsqHUeCpz//tPwR+E2zJgJKo9Z5XolZ9b6bdUgjmYlwnWhoOQKoTd1TYToZGn5mAYOg==", + "node_modules/metro-cache/node_modules/https-proxy-agent": { + "version": "7.0.6", + "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-7.0.6.tgz", + "integrity": "sha512-vK9P5/iUfdl95AI+JVyUuIcVtd4ofvtrOr3HNtM2yxC9bnMbEdp3x01OhQNnjb8IJYi38VlTE3mBXwcfvywuSw==", "license": "MIT", "dependencies": { - "inherits": "^2.0.4", - "readable-stream": "^2.3.8", - "safe-buffer": "^5.2.1", - "to-buffer": "^1.2.1" + "agent-base": "^7.1.2", + "debug": "4" }, "engines": { - "node": ">= 0.8" + "node": ">= 14" } }, - "node_modules/hash.js": { - "version": "1.1.7", - "resolved": "https://registry.npmjs.org/hash.js/-/hash.js-1.1.7.tgz", - "integrity": "sha512-taOaskGt4z4SOANNseOviYDvjEJinIkRgmp7LbKP2YTTmVxWBl87s/uzK9r+44BclBSp2X7K1hqeNfz9JbBeXA==", + "node_modules/metro-config": { + "version": "0.83.3", + "resolved": "https://registry.npmjs.org/metro-config/-/metro-config-0.83.3.tgz", + "integrity": "sha512-mTel7ipT0yNjKILIan04bkJkuCzUUkm2SeEaTads8VfEecCh+ltXchdq6DovXJqzQAXuR2P9cxZB47Lg4klriA==", "license": "MIT", "dependencies": { - "inherits": "^2.0.3", - "minimalistic-assert": "^1.0.1" + "connect": "^3.6.5", + "flow-enums-runtime": "^0.0.6", + "jest-validate": "^29.7.0", + "metro": "0.83.3", + "metro-cache": "0.83.3", + "metro-core": "0.83.3", + "metro-runtime": "0.83.3", + "yaml": "^2.6.1" + }, + "engines": { + "node": ">=20.19.4" } }, - "node_modules/hasown": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz", - "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==", + "node_modules/metro-core": { + "version": "0.83.3", + "resolved": "https://registry.npmjs.org/metro-core/-/metro-core-0.83.3.tgz", + "integrity": "sha512-M+X59lm7oBmJZamc96usuF1kusd5YimqG/q97g4Ac7slnJ3YiGglW5CsOlicTR5EWf8MQFxxjDoB6ytTqRe8Hw==", "license": "MIT", "dependencies": { - "function-bind": "^1.1.2" + "flow-enums-runtime": "^0.0.6", + "lodash.throttle": "^4.1.1", + "metro-resolver": "0.83.3" }, "engines": { - "node": ">= 0.4" + "node": ">=20.19.4" } }, - "node_modules/he": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/he/-/he-1.2.0.tgz", - "integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==", - "dev": true, + "node_modules/metro-file-map": { + "version": "0.83.3", + "resolved": "https://registry.npmjs.org/metro-file-map/-/metro-file-map-0.83.3.tgz", + "integrity": "sha512-jg5AcyE0Q9Xbbu/4NAwwZkmQn7doJCKGW0SLeSJmzNB9Z24jBe0AL2PHNMy4eu0JiKtNWHz9IiONGZWq7hjVTA==", "license": "MIT", - "bin": { - "he": "bin/he" + "dependencies": { + "debug": "^4.4.0", + "fb-watchman": "^2.0.0", + "flow-enums-runtime": "^0.0.6", + "graceful-fs": "^4.2.4", + "invariant": "^2.2.4", + "jest-worker": "^29.7.0", + "micromatch": "^4.0.4", + "nullthrows": "^1.1.1", + "walker": "^1.0.7" + }, + "engines": { + "node": ">=20.19.4" } }, - "node_modules/heap": { - "version": "0.2.7", - "resolved": "https://registry.npmjs.org/heap/-/heap-0.2.7.tgz", - "integrity": "sha512-2bsegYkkHO+h/9MGbn6KWcE45cHZgPANo5LXF7EvWdT0yT2EguSVO1nDgU5c8+ZOPwp2vMNa7YFsJhVcDR9Sdg==", - "dev": true, - "license": "MIT" - }, - "node_modules/help-me": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/help-me/-/help-me-5.0.0.tgz", - "integrity": "sha512-7xgomUX6ADmcYzFik0HzAxh/73YlKR9bmFzf51CZwR+b6YtzU2m0u49hQCqV6SvlqIqsaxovfwdvbnsw3b/zpg==", - "license": "MIT" - }, - "node_modules/hermes-compiler": { - "version": "0.14.0", - "resolved": "https://registry.npmjs.org/hermes-compiler/-/hermes-compiler-0.14.0.tgz", - "integrity": "sha512-clxa193o+GYYwykWVFfpHduCATz8fR5jvU7ngXpfKHj+E9hr9vjLNtdLSEe8MUbObvVexV3wcyxQ00xTPIrB1Q==", - "dev": true, - "license": "MIT", - "peer": true - }, - "node_modules/hermes-estree": { - "version": "0.29.1", - "resolved": "https://registry.npmjs.org/hermes-estree/-/hermes-estree-0.29.1.tgz", - "integrity": "sha512-jl+x31n4/w+wEqm0I2r4CMimukLbLQEYpisys5oCre611CI5fc9TxhqkBBCJ1edDG4Kza0f7CgNz8xVMLZQOmQ==", + "node_modules/metro-minify-terser": { + "version": "0.83.3", + "resolved": "https://registry.npmjs.org/metro-minify-terser/-/metro-minify-terser-0.83.3.tgz", + "integrity": "sha512-O2BmfWj6FSfzBLrNCXt/rr2VYZdX5i6444QJU0fFoc7Ljg+Q+iqebwE3K0eTvkI6TRjELsXk1cjU+fXwAR4OjQ==", "license": "MIT", - "peer": true + "dependencies": { + "flow-enums-runtime": "^0.0.6", + "terser": "^5.15.0" + }, + "engines": { + "node": ">=20.19.4" + } }, - "node_modules/hermes-parser": { - "version": "0.29.1", - "resolved": "https://registry.npmjs.org/hermes-parser/-/hermes-parser-0.29.1.tgz", - "integrity": "sha512-xBHWmUtRC5e/UL0tI7Ivt2riA/YBq9+SiYFU7C1oBa/j2jYGlIF9043oak1F47ihuDIxQ5nbsKueYJDRY02UgA==", + "node_modules/metro-resolver": { + "version": "0.83.3", + "resolved": "https://registry.npmjs.org/metro-resolver/-/metro-resolver-0.83.3.tgz", + "integrity": "sha512-0js+zwI5flFxb1ktmR///bxHYg7OLpRpWZlBBruYG8OKYxeMP7SV0xQ/o/hUelrEMdK4LJzqVtHAhBm25LVfAQ==", "license": "MIT", - "peer": true, "dependencies": { - "hermes-estree": "0.29.1" + "flow-enums-runtime": "^0.0.6" + }, + "engines": { + "node": ">=20.19.4" } }, - "node_modules/hey-listen": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/hey-listen/-/hey-listen-1.0.8.tgz", - "integrity": "sha512-COpmrF2NOg4TBWUJ5UVyaCU2A88wEMkUPK4hNqyCkqHbxT92BbvfjoSozkAIIm6XhicGlJHhFdullInrdhwU8Q==", - "license": "MIT" - }, - "node_modules/history": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/history/-/history-5.3.0.tgz", - "integrity": "sha512-ZqaKwjjrAYUYfLG+htGaIIZ4nioX2L70ZUMIFysS3xvBsSG4x/n1V6TXV3N8ZYNuFGlDirFg32T7B6WOUPDYcQ==", - "dev": true, + "node_modules/metro-runtime": { + "version": "0.83.3", + "resolved": "https://registry.npmjs.org/metro-runtime/-/metro-runtime-0.83.3.tgz", + "integrity": "sha512-JHCJb9ebr9rfJ+LcssFYA2x1qPYuSD/bbePupIGhpMrsla7RCwC/VL3yJ9cSU+nUhU4c9Ixxy8tBta+JbDeZWw==", "license": "MIT", "dependencies": { - "@babel/runtime": "^7.7.6" + "@babel/runtime": "^7.25.0", + "flow-enums-runtime": "^0.0.6" + }, + "engines": { + "node": ">=20.19.4" } }, - "node_modules/hmac-drbg": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/hmac-drbg/-/hmac-drbg-1.0.1.tgz", - "integrity": "sha512-Tti3gMqLdZfhOQY1Mzf/AanLiqh1WTiJgEj26ZuYQ9fbkLomzGchCws4FyrSd4VkpBfiNhaE1On+lOz894jvXg==", + "node_modules/metro-source-map": { + "version": "0.83.3", + "resolved": "https://registry.npmjs.org/metro-source-map/-/metro-source-map-0.83.3.tgz", + "integrity": "sha512-xkC3qwUBh2psVZgVavo8+r2C9Igkk3DibiOXSAht1aYRRcztEZNFtAMtfSB7sdO2iFMx2Mlyu++cBxz/fhdzQg==", "license": "MIT", "dependencies": { - "hash.js": "^1.0.3", - "minimalistic-assert": "^1.0.0", - "minimalistic-crypto-utils": "^1.0.1" + "@babel/traverse": "^7.25.3", + "@babel/traverse--for-generate-function-map": "npm:@babel/traverse@^7.25.3", + "@babel/types": "^7.25.2", + "flow-enums-runtime": "^0.0.6", + "invariant": "^2.2.4", + "metro-symbolicate": "0.83.3", + "nullthrows": "^1.1.1", + "ob1": "0.83.3", + "source-map": "^0.5.6", + "vlq": "^1.0.0" + }, + "engines": { + "node": ">=20.19.4" } }, - "node_modules/hoist-non-react-statics": { - "version": "3.3.2", - "resolved": "https://registry.npmjs.org/hoist-non-react-statics/-/hoist-non-react-statics-3.3.2.tgz", - "integrity": "sha512-/gGivxi8JPKWNm/W0jSmzcMPpfpPLc3dY/6GxhX2hQ9iGj3aDfklV4ET7NjKpSinLpJ5vafa9iiGIEZg10SfBw==", - "license": "BSD-3-Clause", + "node_modules/metro-symbolicate": { + "version": "0.83.3", + "resolved": "https://registry.npmjs.org/metro-symbolicate/-/metro-symbolicate-0.83.3.tgz", + "integrity": "sha512-F/YChgKd6KbFK3eUR5HdUsfBqVsanf5lNTwFd4Ca7uuxnHgBC3kR/Hba/RGkenR3pZaGNp5Bu9ZqqP52Wyhomw==", + "license": "MIT", "dependencies": { - "react-is": "^16.7.0" + "flow-enums-runtime": "^0.0.6", + "invariant": "^2.2.4", + "metro-source-map": "0.83.3", + "nullthrows": "^1.1.1", + "source-map": "^0.5.6", + "vlq": "^1.0.0" + }, + "bin": { + "metro-symbolicate": "src/index.js" + }, + "engines": { + "node": ">=20.19.4" } }, - "node_modules/hoist-non-react-statics/node_modules/react-is": { - "version": "16.13.1", - "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz", - "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==", - "license": "MIT" - }, - "node_modules/hosted-git-info": { - "version": "2.8.9", - "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.9.tgz", - "integrity": "sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==", - "dev": true, - "license": "ISC" - }, - "node_modules/html-encoding-sniffer": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/html-encoding-sniffer/-/html-encoding-sniffer-4.0.0.tgz", - "integrity": "sha512-Y22oTqIU4uuPgEemfz7NDJz6OeKf12Lsu+QC+s3BVpda64lTiMYCyGwg5ki4vFxkMwQdeZDl2adZoqUgdFuTgQ==", - "dev": true, + "node_modules/metro-transform-plugins": { + "version": "0.83.3", + "resolved": "https://registry.npmjs.org/metro-transform-plugins/-/metro-transform-plugins-0.83.3.tgz", + "integrity": "sha512-eRGoKJU6jmqOakBMH5kUB7VitEWiNrDzBHpYbkBXW7C5fUGeOd2CyqrosEzbMK5VMiZYyOcNFEphvxk3OXey2A==", "license": "MIT", "dependencies": { - "whatwg-encoding": "^3.1.1" + "@babel/core": "^7.25.2", + "@babel/generator": "^7.25.0", + "@babel/template": "^7.25.0", + "@babel/traverse": "^7.25.3", + "flow-enums-runtime": "^0.0.6", + "nullthrows": "^1.1.1" }, "engines": { - "node": ">=18" + "node": ">=20.19.4" } }, - "node_modules/html-escaper": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/html-escaper/-/html-escaper-2.0.2.tgz", - "integrity": "sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==", - "dev": true, - "license": "MIT" - }, - "node_modules/html-parse-stringify": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/html-parse-stringify/-/html-parse-stringify-3.0.1.tgz", - "integrity": "sha512-KknJ50kTInJ7qIScF3jeaFRpMpE8/lfiTdzf/twXyPBLAGrLRTmkz3AdTnKeh40X8k9L2fdYwEp/42WGXIRGcg==", + "node_modules/metro-transform-worker": { + "version": "0.83.3", + "resolved": "https://registry.npmjs.org/metro-transform-worker/-/metro-transform-worker-0.83.3.tgz", + "integrity": "sha512-Ztekew9t/gOIMZX1tvJOgX7KlSLL5kWykl0Iwu2cL2vKMKVALRl1hysyhUw0vjpAvLFx+Kfq9VLjnHIkW32fPA==", "license": "MIT", "dependencies": { - "void-elements": "3.1.0" + "@babel/core": "^7.25.2", + "@babel/generator": "^7.25.0", + "@babel/parser": "^7.25.3", + "@babel/types": "^7.25.2", + "flow-enums-runtime": "^0.0.6", + "metro": "0.83.3", + "metro-babel-transformer": "0.83.3", + "metro-cache": "0.83.3", + "metro-cache-key": "0.83.3", + "metro-minify-terser": "0.83.3", + "metro-source-map": "0.83.3", + "metro-transform-plugins": "0.83.3", + "nullthrows": "^1.1.1" + }, + "engines": { + "node": ">=20.19.4" } }, - "node_modules/http-basic": { - "version": "8.1.3", - "resolved": "https://registry.npmjs.org/http-basic/-/http-basic-8.1.3.tgz", - "integrity": "sha512-/EcDMwJZh3mABI2NhGfHOGOeOZITqfkEO4p/xK+l3NpyncIHUQBoMvCSF/b5GqvKtySC2srL/GGG3+EtlqlmCw==", - "dev": true, + "node_modules/metro/node_modules/accepts": { + "version": "1.3.8", + "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.8.tgz", + "integrity": "sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==", "license": "MIT", "dependencies": { - "caseless": "^0.12.0", - "concat-stream": "^1.6.2", - "http-response-object": "^3.0.1", - "parse-cache-control": "^1.0.1" + "mime-types": "~2.1.34", + "negotiator": "0.6.3" }, "engines": { - "node": ">=6.0.0" + "node": ">= 0.6" } }, - "node_modules/http-cache-semantics": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.2.0.tgz", - "integrity": "sha512-dTxcvPXqPvXBQpq5dUr6mEMJX4oIEFv6bwom3FDwKRDsuIjjJGANqhBuoAn9c1RQJIdAKav33ED65E2ys+87QQ==", - "dev": true, - "license": "BSD-2-Clause" - }, - "node_modules/http-errors": { + "node_modules/metro/node_modules/ci-info": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz", - "integrity": "sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==", + "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-2.0.0.tgz", + "integrity": "sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ==", + "license": "MIT" + }, + "node_modules/metro/node_modules/hermes-estree": { + "version": "0.32.0", + "resolved": "https://registry.npmjs.org/hermes-estree/-/hermes-estree-0.32.0.tgz", + "integrity": "sha512-KWn3BqnlDOl97Xe1Yviur6NbgIZ+IP+UVSpshlZWkq+EtoHg6/cwiDj/osP9PCEgFE15KBm1O55JRwbMEm5ejQ==", + "license": "MIT" + }, + "node_modules/metro/node_modules/hermes-parser": { + "version": "0.32.0", + "resolved": "https://registry.npmjs.org/hermes-parser/-/hermes-parser-0.32.0.tgz", + "integrity": "sha512-g4nBOWFpuiTqjR3LZdRxKUkij9iyveWeuks7INEsMX741f3r9xxrOe8TeQfUxtda0eXmiIFiMQzoeSQEno33Hw==", "license": "MIT", "dependencies": { - "depd": "2.0.0", - "inherits": "2.0.4", - "setprototypeof": "1.2.0", - "statuses": "2.0.1", - "toidentifier": "1.0.1" - }, - "engines": { - "node": ">= 0.8" + "hermes-estree": "0.32.0" } }, - "node_modules/http-errors/node_modules/statuses": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", - "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==", + "node_modules/metro/node_modules/mime-db": { + "version": "1.52.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", + "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", "license": "MIT", "engines": { - "node": ">= 0.8" + "node": ">= 0.6" } }, - "node_modules/http-proxy-agent": { - "version": "7.0.2", - "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-7.0.2.tgz", - "integrity": "sha512-T1gkAiYYDWYx3V5Bmyu7HcfcvL7mUrTWiM6yOfa3PIphViJ/gFPbvidQ+veqSOHci/PxBcDabeUNCzpOODJZig==", - "dev": true, + "node_modules/metro/node_modules/mime-types": { + "version": "2.1.35", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", + "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", "license": "MIT", "dependencies": { - "agent-base": "^7.1.0", - "debug": "^4.3.4" + "mime-db": "1.52.0" }, "engines": { - "node": ">= 14" + "node": ">= 0.6" } }, - "node_modules/http-proxy-agent/node_modules/agent-base": { - "version": "7.1.4", - "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-7.1.4.tgz", - "integrity": "sha512-MnA+YT8fwfJPgBx3m60MNqakm30XOkyIoH1y6huTQvC0PwZG7ki8NacLBcrPbNoo8vEZy7Jpuk7+jMO+CUovTQ==", - "dev": true, + "node_modules/metro/node_modules/negotiator": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz", + "integrity": "sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==", "license": "MIT", "engines": { - "node": ">= 14" + "node": ">= 0.6" } }, - "node_modules/http-response-object": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/http-response-object/-/http-response-object-3.0.2.tgz", - "integrity": "sha512-bqX0XTF6fnXSQcEJ2Iuyr75yVakyjIDCqroJQ/aHfSdlM743Cwqoi2nDYMzLGWUcuTWGWy8AAvOKXTfiv6q9RA==", - "dev": true, + "node_modules/metro/node_modules/ws": { + "version": "7.5.10", + "resolved": "https://registry.npmjs.org/ws/-/ws-7.5.10.tgz", + "integrity": "sha512-+dbF1tHwZpXcbOJdVOkzLDxZP1ailvSxM6ZweXTegylPny803bFhA+vqBYw4s31NSAk4S2Qz+AKXK9a4wkdjcQ==", "license": "MIT", - "dependencies": { - "@types/node": "^10.0.3" + "engines": { + "node": ">=8.3.0" + }, + "peerDependencies": { + "bufferutil": "^4.0.1", + "utf-8-validate": "^5.0.2" + }, + "peerDependenciesMeta": { + "bufferutil": { + "optional": true + }, + "utf-8-validate": { + "optional": true + } } }, - "node_modules/http-response-object/node_modules/@types/node": { - "version": "10.17.60", - "resolved": "https://registry.npmjs.org/@types/node/-/node-10.17.60.tgz", - "integrity": "sha512-F0KIgDJfy2nA3zMLmWGKxcH2ZVEtCZXHHdOQs2gSaQ27+lNeEfGxzkIw90aXswATX7AZ33tahPbzy6KAfUreVw==", - "dev": true, - "license": "MIT" - }, - "node_modules/http2-wrapper": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/http2-wrapper/-/http2-wrapper-2.2.1.tgz", - "integrity": "sha512-V5nVw1PAOgfI3Lmeaj2Exmeg7fenjhRUgz1lPSezy1CuhPYbgQtbQj4jZfEAEMlaL+vupsvhjqCyjzob0yxsmQ==", + "node_modules/micro-eth-signer": { + "version": "0.14.0", + "resolved": "https://registry.npmjs.org/micro-eth-signer/-/micro-eth-signer-0.14.0.tgz", + "integrity": "sha512-5PLLzHiVYPWClEvZIXXFu5yutzpadb73rnQCpUqIHu3No3coFuWQNfE5tkBQJ7djuLYl6aRLaS0MgWJYGoqiBw==", "dev": true, "license": "MIT", "dependencies": { - "quick-lru": "^5.1.1", - "resolve-alpn": "^1.2.0" - }, - "engines": { - "node": ">=10.19.0" + "@noble/curves": "~1.8.1", + "@noble/hashes": "~1.7.1", + "micro-packed": "~0.7.2" } }, - "node_modules/https-browserify": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/https-browserify/-/https-browserify-1.0.0.tgz", - "integrity": "sha512-J+FkSdyD+0mA0N+81tMotaRMfSL9SGi+xpD3T6YApKsc3bGSXJlfXri3VyFOeYkfLRQisDk1W+jIFFKBeUBbBg==", + "node_modules/micro-eth-signer/node_modules/@noble/curves": { + "version": "1.8.2", + "resolved": "https://registry.npmjs.org/@noble/curves/-/curves-1.8.2.tgz", + "integrity": "sha512-vnI7V6lFNe0tLAuJMu+2sX+FcL14TaCWy1qiczg1VwRmPrpQCdq5ESXQMqUc2tluRNf6irBXrWbl1mGN8uaU/g==", "dev": true, - "license": "MIT" - }, - "node_modules/https-proxy-agent": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz", - "integrity": "sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==", - "devOptional": true, "license": "MIT", "dependencies": { - "agent-base": "6", - "debug": "4" + "@noble/hashes": "1.7.2" }, "engines": { - "node": ">= 6" + "node": "^14.21.3 || >=16" + }, + "funding": { + "url": "https://paulmillr.com/funding/" } }, - "node_modules/human-id": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/human-id/-/human-id-4.1.1.tgz", - "integrity": "sha512-3gKm/gCSUipeLsRYZbbdA1BD83lBoWUkZ7G9VFrhWPAU76KwYo5KR8V28bpoPm/ygy0x5/GCbpRQdY7VLYCoIg==", + "node_modules/micro-eth-signer/node_modules/@noble/hashes": { + "version": "1.7.2", + "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.7.2.tgz", + "integrity": "sha512-biZ0NUSxyjLLqo6KxEJ1b+C2NAx0wtDoFvCaXHGgUkeHzf3Xc1xKumFKREuT7f7DARNZ/slvYUwFG6B0f2b6hQ==", "dev": true, "license": "MIT", - "bin": { - "human-id": "dist/cli.js" - } - }, - "node_modules/human-signals": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz", - "integrity": "sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==", - "dev": true, - "license": "Apache-2.0", "engines": { - "node": ">=10.17.0" + "node": "^14.21.3 || >=16" + }, + "funding": { + "url": "https://paulmillr.com/funding/" } }, - "node_modules/humanize-ms": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/humanize-ms/-/humanize-ms-1.2.1.tgz", - "integrity": "sha512-Fl70vYtsAFb/C06PTS9dZBo7ihau+Tu/DNCk/OyHhea07S+aeMWpFFkUaXRa8fI+ScZbEI8dfSxwY7gxZ9SAVQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "ms": "^2.0.0" - } + "node_modules/micro-ftch": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/micro-ftch/-/micro-ftch-0.3.1.tgz", + "integrity": "sha512-/0LLxhzP0tfiR5hcQebtudP56gUurs2CLkGarnCiB/OqEyUFQ6U3paQi/tgLv0hBJYt2rnr9MNpxz4fiiugstg==", + "license": "MIT" }, - "node_modules/husky": { - "version": "9.1.7", - "resolved": "https://registry.npmjs.org/husky/-/husky-9.1.7.tgz", - "integrity": "sha512-5gs5ytaNjBrh5Ow3zrvdUUY+0VxIuWVL4i9irt6friV+BqdCfmV11CQTWMiBYWHbXhco+J1kHfTOUkePhCDvMA==", + "node_modules/micro-packed": { + "version": "0.7.3", + "resolved": "https://registry.npmjs.org/micro-packed/-/micro-packed-0.7.3.tgz", + "integrity": "sha512-2Milxs+WNC00TRlem41oRswvw31146GiSaoCT7s3Xi2gMUglW5QBeqlQaZeHr5tJx9nm3i57LNXPqxOOaWtTYg==", "dev": true, "license": "MIT", - "bin": { - "husky": "bin.js" - }, - "engines": { - "node": ">=18" + "dependencies": { + "@scure/base": "~1.2.5" }, "funding": { - "url": "https://github.com/sponsors/typicode" + "url": "https://paulmillr.com/funding/" } }, - "node_modules/i18next": { - "version": "23.10.1", - "resolved": "https://registry.npmjs.org/i18next/-/i18next-23.10.1.tgz", - "integrity": "sha512-NDiIzFbcs3O9PXpfhkjyf7WdqFn5Vq6mhzhtkXzj51aOcNuPNcTwuYNuXCpHsanZGHlHKL35G7huoFeVic1hng==", + "node_modules/micromark": { + "version": "2.11.4", + "resolved": "https://registry.npmjs.org/micromark/-/micromark-2.11.4.tgz", + "integrity": "sha512-+WoovN/ppKolQOFIAajxi7Lu9kInbPxFuTBVEavFcL8eAfVstoc5MocPmqBeAdBOJV00uaVjegzH4+MA0DN/uA==", "funding": [ { - "type": "individual", - "url": "https://locize.com" - }, - { - "type": "individual", - "url": "https://locize.com/i18next.html" + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" }, { - "type": "individual", - "url": "https://www.i18next.com/how-to/faq#i18next-is-awesome.-how-can-i-support-the-project" + "type": "OpenCollective", + "url": "https://opencollective.com/unified" } ], "license": "MIT", "dependencies": { - "@babel/runtime": "^7.23.2" + "debug": "^4.0.0", + "parse-entities": "^2.0.0" } }, - "node_modules/i18next-browser-languagedetector": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/i18next-browser-languagedetector/-/i18next-browser-languagedetector-7.2.0.tgz", - "integrity": "sha512-U00DbDtFIYD3wkWsr2aVGfXGAj2TgnELzOX9qv8bT0aJtvPV9CRO77h+vgmHFBMe7LAxdwvT/7VkCWGya6L3tA==", + "node_modules/micromark-core-commonmark": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/micromark-core-commonmark/-/micromark-core-commonmark-2.0.3.tgz", + "integrity": "sha512-RDBrHEMSxVFLg6xvnXmb1Ayr2WzLAWjeSATAoxwKYJV94TeNavgoIdA0a9ytzDSVzBy2YKFK+emCPOEibLeCrg==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], "license": "MIT", "dependencies": { - "@babel/runtime": "^7.23.2" + "decode-named-character-reference": "^1.0.0", + "devlop": "^1.0.0", + "micromark-factory-destination": "^2.0.0", + "micromark-factory-label": "^2.0.0", + "micromark-factory-space": "^2.0.0", + "micromark-factory-title": "^2.0.0", + "micromark-factory-whitespace": "^2.0.0", + "micromark-util-character": "^2.0.0", + "micromark-util-chunked": "^2.0.0", + "micromark-util-classify-character": "^2.0.0", + "micromark-util-html-tag-name": "^2.0.0", + "micromark-util-normalize-identifier": "^2.0.0", + "micromark-util-resolve-all": "^2.0.0", + "micromark-util-subtokenize": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/micromark-core-commonmark/node_modules/micromark-factory-space": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-factory-space/-/micromark-factory-space-2.0.1.tgz", + "integrity": "sha512-zRkxjtBxxLd2Sc0d+fbnEunsTj46SWXgXciZmHq0kDYGnck/ZSGj9/wULTV95uoeYiK5hRXP2mJ98Uo4cq/LQg==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "micromark-util-character": "^2.0.0", + "micromark-util-types": "^2.0.0" } }, - "node_modules/iconv-lite": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.7.0.tgz", - "integrity": "sha512-cf6L2Ds3h57VVmkZe+Pn+5APsT7FpqJtEhhieDCvrE2MK5Qk9MyffgQyuxQTm6BChfeZNtcOLHp9IcWRVcIcBQ==", - "dev": true, + "node_modules/micromark-core-commonmark/node_modules/micromark-util-character": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/micromark-util-character/-/micromark-util-character-2.1.1.tgz", + "integrity": "sha512-wv8tdUTJ3thSFFFJKtpYKOYiGP2+v96Hvk4Tu8KpCAsTMs6yi+nVmGh1syvSCsaxz45J6Jbw+9DD6g97+NV67Q==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], "license": "MIT", "dependencies": { - "safer-buffer": ">= 2.1.2 < 3.0.0" - }, - "engines": { - "node": ">=0.10.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/express" + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" } }, - "node_modules/idb-keyval": { - "version": "6.2.2", - "resolved": "https://registry.npmjs.org/idb-keyval/-/idb-keyval-6.2.2.tgz", - "integrity": "sha512-yjD9nARJ/jb1g+CvD0tlhUHOrJ9Sy0P8T9MF3YaLlHnSRpwPfpTX0XIvpmw3gAJUmEu3FiICLBDPXVwyEvrleg==", - "license": "Apache-2.0" - }, - "node_modules/ieee754": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", - "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==", + "node_modules/micromark-core-commonmark/node_modules/micromark-util-symbol": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-util-symbol/-/micromark-util-symbol-2.0.1.tgz", + "integrity": "sha512-vs5t8Apaud9N28kgCrRUdEed4UJ+wWNvicHLPxCa9ENlYuAY31M0ETy5y1vA33YoNPDFTghEbnh6efaE8h4x0Q==", "funding": [ { - "type": "github", - "url": "https://github.com/sponsors/feross" + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" }, { - "type": "patreon", - "url": "https://www.patreon.com/feross" + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT" + }, + "node_modules/micromark-core-commonmark/node_modules/micromark-util-types": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/micromark-util-types/-/micromark-util-types-2.0.2.tgz", + "integrity": "sha512-Yw0ECSpJoViF1qTU4DC6NwtC4aWGt1EkzaQB8KPPyCRR8z9TWeV0HbEFGTO+ZY1wB22zmxnJqhPyTpOVCpeHTA==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" }, { - "type": "consulting", - "url": "https://feross.org/support" + "type": "OpenCollective", + "url": "https://opencollective.com/unified" } ], - "license": "BSD-3-Clause" - }, - "node_modules/ignore": { - "version": "5.3.2", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.2.tgz", - "integrity": "sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 4" - } + "license": "MIT" }, - "node_modules/image-size": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/image-size/-/image-size-1.2.1.tgz", - "integrity": "sha512-rH+46sQJ2dlwfjfhCyNx5thzrv+dtmBIhPHk0zgRUukHzZ/kRueTJXoYYsclBaKcSMBWuGbOFXtioLpzTb5euw==", + "node_modules/micromark-extension-directive": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/micromark-extension-directive/-/micromark-extension-directive-3.0.2.tgz", + "integrity": "sha512-wjcXHgk+PPdmvR58Le9d7zQYWy+vKEU9Se44p2CrCDPiLr2FMyiT4Fyb5UFKFC66wGB3kPlgD7q3TnoqPS7SZA==", "license": "MIT", - "peer": true, "dependencies": { - "queue": "6.0.2" + "devlop": "^1.0.0", + "micromark-factory-space": "^2.0.0", + "micromark-factory-whitespace": "^2.0.0", + "micromark-util-character": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0", + "parse-entities": "^4.0.0" }, - "bin": { - "image-size": "bin/image-size.js" - }, - "engines": { - "node": ">=16.x" + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/immutable": { - "version": "4.3.7", - "resolved": "https://registry.npmjs.org/immutable/-/immutable-4.3.7.tgz", - "integrity": "sha512-1hqclzwYwjRDFLjcFxOM5AYkkG0rpFPpr1RLPMEuGczoS7YA8gLhy8SWXYRAA/XwfEHpfo3cw5JGioS32fnMRw==", - "dev": true, + "node_modules/micromark-extension-directive/node_modules/@types/unist": { + "version": "2.0.11", + "resolved": "https://registry.npmjs.org/@types/unist/-/unist-2.0.11.tgz", + "integrity": "sha512-CmBKiL6NNo/OqgmMn95Fk9Whlp2mtvIv+KNpQKN2F4SjvrEesubTRWGYSg+BnWZOnlCaSTU1sMpsBOzgbYhnsA==", "license": "MIT" }, - "node_modules/import-fresh": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.1.tgz", - "integrity": "sha512-TR3KfrTZTYLPB6jUjfx6MF9WcWrHL9su5TObK4ZkYgBdWKPOFoSoQIdEuTuR82pmtxH2spWG9h6etwfr1pLBqQ==", + "node_modules/micromark-extension-directive/node_modules/character-entities-legacy": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/character-entities-legacy/-/character-entities-legacy-3.0.0.tgz", + "integrity": "sha512-RpPp0asT/6ufRm//AJVwpViZbGM/MkjQFxJccQRHmISF/22NBtsHqAWmL+/pmkPWoIUJdWyeVleTl1wydHATVQ==", "license": "MIT", - "dependencies": { - "parent-module": "^1.0.0", - "resolve-from": "^4.0.0" - }, - "engines": { - "node": ">=6" - }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "type": "github", + "url": "https://github.com/sponsors/wooorm" } }, - "node_modules/import-fresh/node_modules/resolve-from": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", - "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", + "node_modules/micromark-extension-directive/node_modules/character-reference-invalid": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/character-reference-invalid/-/character-reference-invalid-2.0.1.tgz", + "integrity": "sha512-iBZ4F4wRbyORVsu0jPV7gXkOsGYjGHPmAyv+HiHG8gi5PtC9KI2j1+v8/tlibRvjoWX027ypmG/n0HtO5t7unw==", "license": "MIT", - "engines": { - "node": ">=4" + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" } }, - "node_modules/import-lazy": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/import-lazy/-/import-lazy-4.0.0.tgz", - "integrity": "sha512-rKtvo6a868b5Hu3heneU+L4yEQ4jYKLtjpnPeUdK7h0yzXGmyBTypknlkCvHFBqfX9YlorEiMM6Dnq/5atfHkw==", - "dev": true, + "node_modules/micromark-extension-directive/node_modules/is-alphabetical": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-alphabetical/-/is-alphabetical-2.0.1.tgz", + "integrity": "sha512-FWyyY60MeTNyeSRpkM2Iry0G9hpr7/9kD40mD/cGQEuilcZYS4okz8SN2Q6rLCJ8gbCt6fN+rC+6tMGS99LaxQ==", "license": "MIT", - "engines": { - "node": ">=8" + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" } }, - "node_modules/import-local": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/import-local/-/import-local-3.2.0.tgz", - "integrity": "sha512-2SPlun1JUPWoM6t3F0dw0FkCF/jWY8kttcY4f599GLTSjh2OCuuhdTkJQsEcZzBqbXZGKMK2OqW1oZsjtf/gQA==", - "dev": true, + "node_modules/micromark-extension-directive/node_modules/is-alphanumerical": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-alphanumerical/-/is-alphanumerical-2.0.1.tgz", + "integrity": "sha512-hmbYhX/9MUMF5uh7tOXyK/n0ZvWpad5caBA17GsC6vyuCqaWliRG5K1qS9inmUhEMaOBIW7/whAnSwveW/LtZw==", "license": "MIT", "dependencies": { - "pkg-dir": "^4.2.0", - "resolve-cwd": "^3.0.0" - }, - "bin": { - "import-local-fixture": "fixtures/cli.js" - }, - "engines": { - "node": ">=8" + "is-alphabetical": "^2.0.0", + "is-decimal": "^2.0.0" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "type": "github", + "url": "https://github.com/sponsors/wooorm" } }, - "node_modules/import-meta-resolve": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/import-meta-resolve/-/import-meta-resolve-4.2.0.tgz", - "integrity": "sha512-Iqv2fzaTQN28s/FwZAoFq0ZSs/7hMAHJVX+w8PZl3cY19Pxk6jFFalxQoIfW2826i/fDLXv8IiEZRIT0lDuWcg==", - "dev": true, + "node_modules/micromark-extension-directive/node_modules/is-decimal": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-decimal/-/is-decimal-2.0.1.tgz", + "integrity": "sha512-AAB9hiomQs5DXWcRB1rqsxGUstbRroFOPPVAomNk/3XHR5JyEZChOyTWe2oayKnsSsr/kcGqF+z6yuH6HHpN0A==", "license": "MIT", "funding": { "type": "github", "url": "https://github.com/sponsors/wooorm" } }, - "node_modules/imurmurhash": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", - "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", + "node_modules/micromark-extension-directive/node_modules/is-hexadecimal": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-hexadecimal/-/is-hexadecimal-2.0.1.tgz", + "integrity": "sha512-DgZQp241c8oO6cA1SbTEWiXeoxV42vlcJxgH+B3hi1AiqqKruZR3ZGF8In3fj4+/y/7rHvlOZLZtgJ/4ttYGZg==", "license": "MIT", - "engines": { - "node": ">=0.8.19" + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" } }, - "node_modules/indent-string": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz", - "integrity": "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==", - "dev": true, + "node_modules/micromark-extension-directive/node_modules/micromark-factory-space": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-factory-space/-/micromark-factory-space-2.0.1.tgz", + "integrity": "sha512-zRkxjtBxxLd2Sc0d+fbnEunsTj46SWXgXciZmHq0kDYGnck/ZSGj9/wULTV95uoeYiK5hRXP2mJ98Uo4cq/LQg==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/inflight": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", - "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.", - "license": "ISC", "dependencies": { - "once": "^1.3.0", - "wrappy": "1" + "micromark-util-character": "^2.0.0", + "micromark-util-types": "^2.0.0" } }, - "node_modules/inherits": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", - "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", - "license": "ISC" - }, - "node_modules/ini": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/ini/-/ini-4.1.1.tgz", - "integrity": "sha512-QQnnxNyfvmHFIsj7gkPcYymR8Jdw/o7mp5ZFihxn6h8Ci6fh3Dx4E1gPjpQEpIuPo9XVNY/ZUwh4BPMjGyL01g==", - "dev": true, - "license": "ISC", - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + "node_modules/micromark-extension-directive/node_modules/micromark-util-character": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/micromark-util-character/-/micromark-util-character-2.1.1.tgz", + "integrity": "sha512-wv8tdUTJ3thSFFFJKtpYKOYiGP2+v96Hvk4Tu8KpCAsTMs6yi+nVmGh1syvSCsaxz45J6Jbw+9DD6g97+NV67Q==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" } }, - "node_modules/iniparser": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/iniparser/-/iniparser-1.0.5.tgz", - "integrity": "sha512-i40MWqgTU6h/70NtMsDVVDLjDYWwcIR1yIEVDPfxZIJno9z9L4s83p/V7vAu2i48Vj0gpByrkGFub7ko9XvPrw==", - "optional": true, - "engines": { - "node": "*" - } + "node_modules/micromark-extension-directive/node_modules/micromark-util-symbol": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-util-symbol/-/micromark-util-symbol-2.0.1.tgz", + "integrity": "sha512-vs5t8Apaud9N28kgCrRUdEed4UJ+wWNvicHLPxCa9ENlYuAY31M0ETy5y1vA33YoNPDFTghEbnh6efaE8h4x0Q==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT" }, - "node_modules/inline-style-parser": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/inline-style-parser/-/inline-style-parser-0.1.1.tgz", - "integrity": "sha512-7NXolsK4CAS5+xvdj5OMMbI962hU/wvwoxk+LWR9Ek9bVtyuuYScDN6eS0rUm6TxApFpw7CX1o4uJzcd4AyD3Q==", + "node_modules/micromark-extension-directive/node_modules/micromark-util-types": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/micromark-util-types/-/micromark-util-types-2.0.2.tgz", + "integrity": "sha512-Yw0ECSpJoViF1qTU4DC6NwtC4aWGt1EkzaQB8KPPyCRR8z9TWeV0HbEFGTO+ZY1wB22zmxnJqhPyTpOVCpeHTA==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], "license": "MIT" }, - "node_modules/inquirer": { - "version": "8.2.6", - "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-8.2.6.tgz", - "integrity": "sha512-M1WuAmb7pn9zdFRtQYk26ZBoY043Sse0wVDdk4Bppr+JOXyQYybdtvK+l9wUibhtjdjvtoiNy8tk+EgsYIUqKg==", + "node_modules/micromark-extension-directive/node_modules/parse-entities": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/parse-entities/-/parse-entities-4.0.2.tgz", + "integrity": "sha512-GG2AQYWoLgL877gQIKeRPGO1xF9+eG1ujIb5soS5gPvLQ1y2o8FL90w2QWNdf9I361Mpp7726c+lj3U0qK1uGw==", "license": "MIT", "dependencies": { - "ansi-escapes": "^4.2.1", - "chalk": "^4.1.1", - "cli-cursor": "^3.1.0", - "cli-width": "^3.0.0", - "external-editor": "^3.0.3", - "figures": "^3.0.0", - "lodash": "^4.17.21", - "mute-stream": "0.0.8", - "ora": "^5.4.1", - "run-async": "^2.4.0", - "rxjs": "^7.5.5", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0", - "through": "^2.3.6", - "wrap-ansi": "^6.0.1" + "@types/unist": "^2.0.0", + "character-entities-legacy": "^3.0.0", + "character-reference-invalid": "^2.0.0", + "decode-named-character-reference": "^1.0.0", + "is-alphanumerical": "^2.0.0", + "is-decimal": "^2.0.0", + "is-hexadecimal": "^2.0.0" }, - "engines": { - "node": ">=12.0.0" + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" } }, - "node_modules/inquirer/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "node_modules/micromark-extension-frontmatter": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/micromark-extension-frontmatter/-/micromark-extension-frontmatter-2.0.0.tgz", + "integrity": "sha512-C4AkuM3dA58cgZha7zVnuVxBhDsbttIMiytjgsM2XbHAB2faRVaHRle40558FBN+DJcrLNCoqG5mlrpdU4cRtg==", "license": "MIT", "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" + "fault": "^2.0.0", + "micromark-util-character": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" }, "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/inquirer/node_modules/bl": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/bl/-/bl-4.1.0.tgz", - "integrity": "sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==", + "node_modules/micromark-extension-frontmatter/node_modules/micromark-util-character": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/micromark-util-character/-/micromark-util-character-2.1.1.tgz", + "integrity": "sha512-wv8tdUTJ3thSFFFJKtpYKOYiGP2+v96Hvk4Tu8KpCAsTMs6yi+nVmGh1syvSCsaxz45J6Jbw+9DD6g97+NV67Q==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], "license": "MIT", "dependencies": { - "buffer": "^5.5.0", - "inherits": "^2.0.4", - "readable-stream": "^3.4.0" + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" } }, - "node_modules/inquirer/node_modules/buffer": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", - "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==", + "node_modules/micromark-extension-frontmatter/node_modules/micromark-util-symbol": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-util-symbol/-/micromark-util-symbol-2.0.1.tgz", + "integrity": "sha512-vs5t8Apaud9N28kgCrRUdEed4UJ+wWNvicHLPxCa9ENlYuAY31M0ETy5y1vA33YoNPDFTghEbnh6efaE8h4x0Q==", "funding": [ { - "type": "github", - "url": "https://github.com/sponsors/feross" + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" }, { - "type": "patreon", - "url": "https://www.patreon.com/feross" + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT" + }, + "node_modules/micromark-extension-frontmatter/node_modules/micromark-util-types": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/micromark-util-types/-/micromark-util-types-2.0.2.tgz", + "integrity": "sha512-Yw0ECSpJoViF1qTU4DC6NwtC4aWGt1EkzaQB8KPPyCRR8z9TWeV0HbEFGTO+ZY1wB22zmxnJqhPyTpOVCpeHTA==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" }, { - "type": "consulting", - "url": "https://feross.org/support" + "type": "OpenCollective", + "url": "https://opencollective.com/unified" } ], + "license": "MIT" + }, + "node_modules/micromark-extension-gfm": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/micromark-extension-gfm/-/micromark-extension-gfm-3.0.0.tgz", + "integrity": "sha512-vsKArQsicm7t0z2GugkCKtZehqUm31oeGBV/KVSorWSy8ZlNAv7ytjFhvaryUiCUJYqs+NoE6AFhpQvBTM6Q4w==", "license": "MIT", "dependencies": { - "base64-js": "^1.3.1", - "ieee754": "^1.1.13" + "micromark-extension-gfm-autolink-literal": "^2.0.0", + "micromark-extension-gfm-footnote": "^2.0.0", + "micromark-extension-gfm-strikethrough": "^2.0.0", + "micromark-extension-gfm-table": "^2.0.0", + "micromark-extension-gfm-tagfilter": "^2.0.0", + "micromark-extension-gfm-task-list-item": "^2.0.0", + "micromark-util-combine-extensions": "^2.0.0", + "micromark-util-types": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/inquirer/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "node_modules/micromark-extension-gfm-autolink-literal": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/micromark-extension-gfm-autolink-literal/-/micromark-extension-gfm-autolink-literal-2.1.0.tgz", + "integrity": "sha512-oOg7knzhicgQ3t4QCjCWgTmfNhvQbDDnJeVu9v81r7NltNCVmhPy1fJRX27pISafdjL+SVc4d3l48Gb6pbRypw==", "license": "MIT", "dependencies": { - "color-name": "~1.1.4" + "micromark-util-character": "^2.0.0", + "micromark-util-sanitize-uri": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" }, - "engines": { - "node": ">=7.0.0" + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/inquirer/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "license": "MIT" - }, - "node_modules/inquirer/node_modules/is-interactive": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-interactive/-/is-interactive-1.0.0.tgz", - "integrity": "sha512-2HvIEKRoqS62guEC+qBjpvRubdX910WCMuJTZ+I9yvqKU2/12eSL549HMwtabb4oupdj2sMP50k+XJfB/8JE6w==", + "node_modules/micromark-extension-gfm-autolink-literal/node_modules/micromark-util-character": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/micromark-util-character/-/micromark-util-character-2.1.1.tgz", + "integrity": "sha512-wv8tdUTJ3thSFFFJKtpYKOYiGP2+v96Hvk4Tu8KpCAsTMs6yi+nVmGh1syvSCsaxz45J6Jbw+9DD6g97+NV67Q==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], "license": "MIT", - "engines": { - "node": ">=8" + "dependencies": { + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" } }, - "node_modules/inquirer/node_modules/ora": { - "version": "5.4.1", - "resolved": "https://registry.npmjs.org/ora/-/ora-5.4.1.tgz", - "integrity": "sha512-5b6Y85tPxZZ7QytO+BQzysW31HJku27cRIlkbAXaNx+BdcVi+LlRFmVXzeF6a7JCwJpyw5c4b+YSVImQIrBpuQ==", + "node_modules/micromark-extension-gfm-autolink-literal/node_modules/micromark-util-symbol": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-util-symbol/-/micromark-util-symbol-2.0.1.tgz", + "integrity": "sha512-vs5t8Apaud9N28kgCrRUdEed4UJ+wWNvicHLPxCa9ENlYuAY31M0ETy5y1vA33YoNPDFTghEbnh6efaE8h4x0Q==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT" + }, + "node_modules/micromark-extension-gfm-autolink-literal/node_modules/micromark-util-types": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/micromark-util-types/-/micromark-util-types-2.0.2.tgz", + "integrity": "sha512-Yw0ECSpJoViF1qTU4DC6NwtC4aWGt1EkzaQB8KPPyCRR8z9TWeV0HbEFGTO+ZY1wB22zmxnJqhPyTpOVCpeHTA==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT" + }, + "node_modules/micromark-extension-gfm-footnote": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/micromark-extension-gfm-footnote/-/micromark-extension-gfm-footnote-2.1.0.tgz", + "integrity": "sha512-/yPhxI1ntnDNsiHtzLKYnE3vf9JZ6cAisqVDauhp4CEHxlb4uoOTxOCJ+9s51bIB8U1N1FJ1RXOKTIlD5B/gqw==", "license": "MIT", "dependencies": { - "bl": "^4.1.0", - "chalk": "^4.1.0", - "cli-cursor": "^3.1.0", - "cli-spinners": "^2.5.0", - "is-interactive": "^1.0.0", - "is-unicode-supported": "^0.1.0", - "log-symbols": "^4.1.0", - "strip-ansi": "^6.0.0", - "wcwidth": "^1.0.1" - }, - "engines": { - "node": ">=10" + "devlop": "^1.0.0", + "micromark-core-commonmark": "^2.0.0", + "micromark-factory-space": "^2.0.0", + "micromark-util-character": "^2.0.0", + "micromark-util-normalize-identifier": "^2.0.0", + "micromark-util-sanitize-uri": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/inquirer/node_modules/readable-stream": { - "version": "3.6.2", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", - "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", + "node_modules/micromark-extension-gfm-footnote/node_modules/micromark-factory-space": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-factory-space/-/micromark-factory-space-2.0.1.tgz", + "integrity": "sha512-zRkxjtBxxLd2Sc0d+fbnEunsTj46SWXgXciZmHq0kDYGnck/ZSGj9/wULTV95uoeYiK5hRXP2mJ98Uo4cq/LQg==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], "license": "MIT", "dependencies": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - }, - "engines": { - "node": ">= 6" + "micromark-util-character": "^2.0.0", + "micromark-util-types": "^2.0.0" } }, - "node_modules/inquirer/node_modules/wrap-ansi": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz", - "integrity": "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==", + "node_modules/micromark-extension-gfm-footnote/node_modules/micromark-util-character": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/micromark-util-character/-/micromark-util-character-2.1.1.tgz", + "integrity": "sha512-wv8tdUTJ3thSFFFJKtpYKOYiGP2+v96Hvk4Tu8KpCAsTMs6yi+nVmGh1syvSCsaxz45J6Jbw+9DD6g97+NV67Q==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], "license": "MIT", "dependencies": { - "ansi-styles": "^4.0.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0" - }, - "engines": { - "node": ">=8" + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" } }, - "node_modules/internal-slot": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.1.0.tgz", - "integrity": "sha512-4gd7VpWNQNB4UKKCFFVcp1AVv+FMOgs9NKzjHKusc8jTMhd5eL1NqQqOpE0KzMds804/yHlglp3uxgluOqAPLw==", - "dev": true, + "node_modules/micromark-extension-gfm-footnote/node_modules/micromark-util-symbol": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-util-symbol/-/micromark-util-symbol-2.0.1.tgz", + "integrity": "sha512-vs5t8Apaud9N28kgCrRUdEed4UJ+wWNvicHLPxCa9ENlYuAY31M0ETy5y1vA33YoNPDFTghEbnh6efaE8h4x0Q==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT" + }, + "node_modules/micromark-extension-gfm-footnote/node_modules/micromark-util-types": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/micromark-util-types/-/micromark-util-types-2.0.2.tgz", + "integrity": "sha512-Yw0ECSpJoViF1qTU4DC6NwtC4aWGt1EkzaQB8KPPyCRR8z9TWeV0HbEFGTO+ZY1wB22zmxnJqhPyTpOVCpeHTA==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT" + }, + "node_modules/micromark-extension-gfm-strikethrough": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/micromark-extension-gfm-strikethrough/-/micromark-extension-gfm-strikethrough-2.1.0.tgz", + "integrity": "sha512-ADVjpOOkjz1hhkZLlBiYA9cR2Anf8F4HqZUO6e5eDcPQd0Txw5fxLzzxnEkSkfnD0wziSGiv7sYhk/ktvbf1uw==", "license": "MIT", "dependencies": { - "es-errors": "^1.3.0", - "hasown": "^2.0.2", - "side-channel": "^1.1.0" + "devlop": "^1.0.0", + "micromark-util-chunked": "^2.0.0", + "micromark-util-classify-character": "^2.0.0", + "micromark-util-resolve-all": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" }, - "engines": { - "node": ">= 0.4" + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/interpret": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/interpret/-/interpret-1.4.0.tgz", - "integrity": "sha512-agE4QfB2Lkp9uICn7BAqoscw4SZP9kTE2hxiFI3jBPmXJfdqiahTbUuKGsMoN2GtqL9AxhYioAcVvgsb1HvRbA==", + "node_modules/micromark-extension-gfm-strikethrough/node_modules/micromark-util-symbol": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-util-symbol/-/micromark-util-symbol-2.0.1.tgz", + "integrity": "sha512-vs5t8Apaud9N28kgCrRUdEed4UJ+wWNvicHLPxCa9ENlYuAY31M0ETy5y1vA33YoNPDFTghEbnh6efaE8h4x0Q==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT" + }, + "node_modules/micromark-extension-gfm-strikethrough/node_modules/micromark-util-types": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/micromark-util-types/-/micromark-util-types-2.0.2.tgz", + "integrity": "sha512-Yw0ECSpJoViF1qTU4DC6NwtC4aWGt1EkzaQB8KPPyCRR8z9TWeV0HbEFGTO+ZY1wB22zmxnJqhPyTpOVCpeHTA==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT" + }, + "node_modules/micromark-extension-gfm-table": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/micromark-extension-gfm-table/-/micromark-extension-gfm-table-2.1.1.tgz", + "integrity": "sha512-t2OU/dXXioARrC6yWfJ4hqB7rct14e8f7m0cbI5hUmDyyIlwv5vEtooptH8INkbLzOatzKuVbQmAYcbWoyz6Dg==", "license": "MIT", - "engines": { - "node": ">= 0.10" + "dependencies": { + "devlop": "^1.0.0", + "micromark-factory-space": "^2.0.0", + "micromark-util-character": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/invariant": { - "version": "2.2.4", - "resolved": "https://registry.npmjs.org/invariant/-/invariant-2.2.4.tgz", - "integrity": "sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA==", + "node_modules/micromark-extension-gfm-table/node_modules/micromark-factory-space": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-factory-space/-/micromark-factory-space-2.0.1.tgz", + "integrity": "sha512-zRkxjtBxxLd2Sc0d+fbnEunsTj46SWXgXciZmHq0kDYGnck/ZSGj9/wULTV95uoeYiK5hRXP2mJ98Uo4cq/LQg==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], "license": "MIT", - "peer": true, "dependencies": { - "loose-envify": "^1.0.0" + "micromark-util-character": "^2.0.0", + "micromark-util-types": "^2.0.0" } }, - "node_modules/io-bricks-ui": { - "version": "2.7.4", - "resolved": "https://registry.npmjs.org/io-bricks-ui/-/io-bricks-ui-2.7.4.tgz", - "integrity": "sha512-OAw7WRzklHHq6ArC82pleA+miFeJkLj8e6YNK6m/AxTIF4U2qqC4pdBQMlNyGiS/wjErjdaxH7hgV/qfs6LWhQ==", + "node_modules/micromark-extension-gfm-table/node_modules/micromark-util-character": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/micromark-util-character/-/micromark-util-character-2.1.1.tgz", + "integrity": "sha512-wv8tdUTJ3thSFFFJKtpYKOYiGP2+v96Hvk4Tu8KpCAsTMs6yi+nVmGh1syvSCsaxz45J6Jbw+9DD6g97+NV67Q==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], "license": "MIT", "dependencies": { - "@chakra-ui/anatomy": "2.1.1", - "@emotion/react": "^11.0.0", - "@phosphor-icons/react": "2.0.9", - "@tanstack/react-table": "^8.9.1", - "chakra-react-select": "4.5.0", - "date-fns": "^2.29.3", - "echarts": "^5.3.3", - "echarts-for-react": "^3.0.2", - "lodash": "^4.17.21", - "react-day-picker": "^8.6.0", - "react-hook-form": "^7.41.5", - "react-markdown": "^6.0.3", - "react-number-format": "5.1.4" - }, - "peerDependencies": { - "@chakra-ui/react": "2.6.1", - "@emotion/styled": "^11.0.0", - "react": "^18.2.0", - "react-dom": "^18.2.0" + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" } }, - "node_modules/io-bricks-ui/node_modules/@chakra-ui/anatomy": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/@chakra-ui/anatomy/-/anatomy-2.1.1.tgz", - "integrity": "sha512-LUHAoqJAgxAqmyckG5bUpBrfEo1FleEyY+1A8hkWciy58gZ+h3GoY9oBpHcdo7XdHPpy3G+3hieK/7i9NLwxAw==", + "node_modules/micromark-extension-gfm-table/node_modules/micromark-util-symbol": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-util-symbol/-/micromark-util-symbol-2.0.1.tgz", + "integrity": "sha512-vs5t8Apaud9N28kgCrRUdEed4UJ+wWNvicHLPxCa9ENlYuAY31M0ETy5y1vA33YoNPDFTghEbnh6efaE8h4x0Q==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], "license": "MIT" }, - "node_modules/io-ts": { - "version": "1.10.4", - "resolved": "https://registry.npmjs.org/io-ts/-/io-ts-1.10.4.tgz", - "integrity": "sha512-b23PteSnYXSONJ6JQXRAlvJhuw8KOtkqa87W4wDtvMrud/DTJd5X+NpOOI+O/zZwVq6v0VLAaJ+1EDViKEuN9g==", - "dev": true, + "node_modules/micromark-extension-gfm-table/node_modules/micromark-util-types": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/micromark-util-types/-/micromark-util-types-2.0.2.tgz", + "integrity": "sha512-Yw0ECSpJoViF1qTU4DC6NwtC4aWGt1EkzaQB8KPPyCRR8z9TWeV0HbEFGTO+ZY1wB22zmxnJqhPyTpOVCpeHTA==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT" + }, + "node_modules/micromark-extension-gfm-tagfilter": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/micromark-extension-gfm-tagfilter/-/micromark-extension-gfm-tagfilter-2.0.0.tgz", + "integrity": "sha512-xHlTOmuCSotIA8TW1mDIM6X2O1SiX5P9IuDtqGonFhEK0qgRI4yeC6vMxEV2dgyr2TiD+2PQ10o+cOhdVAcwfg==", "license": "MIT", "dependencies": { - "fp-ts": "^1.0.0" + "micromark-util-types": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/ipaddr.js": { - "version": "1.9.1", - "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz", - "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==", - "license": "MIT", - "engines": { - "node": ">= 0.10" - } + "node_modules/micromark-extension-gfm-tagfilter/node_modules/micromark-util-types": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/micromark-util-types/-/micromark-util-types-2.0.2.tgz", + "integrity": "sha512-Yw0ECSpJoViF1qTU4DC6NwtC4aWGt1EkzaQB8KPPyCRR8z9TWeV0HbEFGTO+ZY1wB22zmxnJqhPyTpOVCpeHTA==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT" }, - "node_modules/iron-webcrypto": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/iron-webcrypto/-/iron-webcrypto-1.2.1.tgz", - "integrity": "sha512-feOM6FaSr6rEABp/eDfVseKyTMDt+KGpeB35SkVn9Tyn0CqvVsY3EwI0v5i8nMHyJnzCIQf7nsy3p41TPkJZhg==", + "node_modules/micromark-extension-gfm-task-list-item": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/micromark-extension-gfm-task-list-item/-/micromark-extension-gfm-task-list-item-2.1.0.tgz", + "integrity": "sha512-qIBZhqxqI6fjLDYFTBIa4eivDMnP+OZqsNwmQ3xNLE4Cxwc+zfQEfbs6tzAo2Hjq+bh6q5F+Z8/cksrLFYWQQw==", "license": "MIT", + "dependencies": { + "devlop": "^1.0.0", + "micromark-factory-space": "^2.0.0", + "micromark-util-character": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + }, "funding": { - "url": "https://github.com/sponsors/brc-dd" + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/is-alphabetical": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/is-alphabetical/-/is-alphabetical-1.0.4.tgz", - "integrity": "sha512-DwzsA04LQ10FHTZuL0/grVDk4rFoVH1pjAToYwBrHSxcrBIGQuXrQMtD5U1b0U2XVgKZCTLLP8u2Qxqhy3l2Vg==", + "node_modules/micromark-extension-gfm-task-list-item/node_modules/micromark-factory-space": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-factory-space/-/micromark-factory-space-2.0.1.tgz", + "integrity": "sha512-zRkxjtBxxLd2Sc0d+fbnEunsTj46SWXgXciZmHq0kDYGnck/ZSGj9/wULTV95uoeYiK5hRXP2mJ98Uo4cq/LQg==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], "license": "MIT", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" + "dependencies": { + "micromark-util-character": "^2.0.0", + "micromark-util-types": "^2.0.0" } }, - "node_modules/is-alphanumerical": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/is-alphanumerical/-/is-alphanumerical-1.0.4.tgz", - "integrity": "sha512-UzoZUr+XfVz3t3v4KyGEniVL9BDRoQtY7tOyrRybkVNjDFWyo1yhXNGrrBTQxp3ib9BLAWs7k2YKBQsFRkZG9A==", + "node_modules/micromark-extension-gfm-task-list-item/node_modules/micromark-util-character": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/micromark-util-character/-/micromark-util-character-2.1.1.tgz", + "integrity": "sha512-wv8tdUTJ3thSFFFJKtpYKOYiGP2+v96Hvk4Tu8KpCAsTMs6yi+nVmGh1syvSCsaxz45J6Jbw+9DD6g97+NV67Q==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], "license": "MIT", "dependencies": { - "is-alphabetical": "^1.0.0", - "is-decimal": "^1.0.0" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" } }, - "node_modules/is-arguments": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/is-arguments/-/is-arguments-1.2.0.tgz", - "integrity": "sha512-7bVbi0huj/wrIAOzb8U1aszg9kdi3KN/CyU19CTI7tAoZYEZoL9yCDXpbXN+uPsuWnP02cyug1gleqq+TU+YCA==", - "dev": true, + "node_modules/micromark-extension-gfm-task-list-item/node_modules/micromark-util-symbol": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-util-symbol/-/micromark-util-symbol-2.0.1.tgz", + "integrity": "sha512-vs5t8Apaud9N28kgCrRUdEed4UJ+wWNvicHLPxCa9ENlYuAY31M0ETy5y1vA33YoNPDFTghEbnh6efaE8h4x0Q==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT" + }, + "node_modules/micromark-extension-gfm-task-list-item/node_modules/micromark-util-types": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/micromark-util-types/-/micromark-util-types-2.0.2.tgz", + "integrity": "sha512-Yw0ECSpJoViF1qTU4DC6NwtC4aWGt1EkzaQB8KPPyCRR8z9TWeV0HbEFGTO+ZY1wB22zmxnJqhPyTpOVCpeHTA==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT" + }, + "node_modules/micromark-extension-gfm/node_modules/micromark-util-types": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/micromark-util-types/-/micromark-util-types-2.0.2.tgz", + "integrity": "sha512-Yw0ECSpJoViF1qTU4DC6NwtC4aWGt1EkzaQB8KPPyCRR8z9TWeV0HbEFGTO+ZY1wB22zmxnJqhPyTpOVCpeHTA==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT" + }, + "node_modules/micromark-extension-mdx-expression": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/micromark-extension-mdx-expression/-/micromark-extension-mdx-expression-3.0.1.tgz", + "integrity": "sha512-dD/ADLJ1AeMvSAKBwO22zG22N4ybhe7kFIZ3LsDI0GlsNr2A3KYxb0LdC1u5rj4Nw+CHKY0RVdnHX8vj8ejm4Q==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], "license": "MIT", "dependencies": { - "call-bound": "^1.0.2", - "has-tostringtag": "^1.0.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "@types/estree": "^1.0.0", + "devlop": "^1.0.0", + "micromark-factory-mdx-expression": "^2.0.0", + "micromark-factory-space": "^2.0.0", + "micromark-util-character": "^2.0.0", + "micromark-util-events-to-acorn": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" } }, - "node_modules/is-array-buffer": { - "version": "3.0.5", - "resolved": "https://registry.npmjs.org/is-array-buffer/-/is-array-buffer-3.0.5.tgz", - "integrity": "sha512-DDfANUiiG2wC1qawP66qlTugJeL5HyzMpfr8lLK+jMQirGzNod0B12cFB/9q838Ru27sBwfw78/rdoU7RERz6A==", - "dev": true, + "node_modules/micromark-extension-mdx-expression/node_modules/micromark-factory-space": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-factory-space/-/micromark-factory-space-2.0.1.tgz", + "integrity": "sha512-zRkxjtBxxLd2Sc0d+fbnEunsTj46SWXgXciZmHq0kDYGnck/ZSGj9/wULTV95uoeYiK5hRXP2mJ98Uo4cq/LQg==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], "license": "MIT", "dependencies": { - "call-bind": "^1.0.8", - "call-bound": "^1.0.3", - "get-intrinsic": "^1.2.6" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "micromark-util-character": "^2.0.0", + "micromark-util-types": "^2.0.0" } }, - "node_modules/is-arrayish": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", - "integrity": "sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==", - "license": "MIT" - }, - "node_modules/is-async-function": { + "node_modules/micromark-extension-mdx-expression/node_modules/micromark-util-character": { "version": "2.1.1", - "resolved": "https://registry.npmjs.org/is-async-function/-/is-async-function-2.1.1.tgz", - "integrity": "sha512-9dgM/cZBnNvjzaMYHVoxxfPj2QXt22Ev7SuuPrs+xav0ukGB0S6d4ydZdEiM48kLx5kDV+QBPrpVnFyefL8kkQ==", - "dev": true, + "resolved": "https://registry.npmjs.org/micromark-util-character/-/micromark-util-character-2.1.1.tgz", + "integrity": "sha512-wv8tdUTJ3thSFFFJKtpYKOYiGP2+v96Hvk4Tu8KpCAsTMs6yi+nVmGh1syvSCsaxz45J6Jbw+9DD6g97+NV67Q==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], "license": "MIT", "dependencies": { - "async-function": "^1.0.0", - "call-bound": "^1.0.3", - "get-proto": "^1.0.1", - "has-tostringtag": "^1.0.2", - "safe-regex-test": "^1.1.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" } }, - "node_modules/is-bigint": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-bigint/-/is-bigint-1.1.0.tgz", - "integrity": "sha512-n4ZT37wG78iz03xPRKJrHTdZbe3IicyucEtdRsV5yglwc3GyUfbAfpSeD0FJ41NbUNSt5wbhqfp1fS+BgnvDFQ==", - "dev": true, + "node_modules/micromark-extension-mdx-expression/node_modules/micromark-util-symbol": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-util-symbol/-/micromark-util-symbol-2.0.1.tgz", + "integrity": "sha512-vs5t8Apaud9N28kgCrRUdEed4UJ+wWNvicHLPxCa9ENlYuAY31M0ETy5y1vA33YoNPDFTghEbnh6efaE8h4x0Q==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT" + }, + "node_modules/micromark-extension-mdx-expression/node_modules/micromark-util-types": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/micromark-util-types/-/micromark-util-types-2.0.2.tgz", + "integrity": "sha512-Yw0ECSpJoViF1qTU4DC6NwtC4aWGt1EkzaQB8KPPyCRR8z9TWeV0HbEFGTO+ZY1wB22zmxnJqhPyTpOVCpeHTA==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT" + }, + "node_modules/micromark-extension-mdx-jsx": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/micromark-extension-mdx-jsx/-/micromark-extension-mdx-jsx-3.0.2.tgz", + "integrity": "sha512-e5+q1DjMh62LZAJOnDraSSbDMvGJ8x3cbjygy2qFEi7HCeUT4BDKCvMozPozcD6WmOt6sVvYDNBKhFSz3kjOVQ==", "license": "MIT", "dependencies": { - "has-bigints": "^1.0.2" - }, - "engines": { - "node": ">= 0.4" + "@types/estree": "^1.0.0", + "devlop": "^1.0.0", + "estree-util-is-identifier-name": "^3.0.0", + "micromark-factory-mdx-expression": "^2.0.0", + "micromark-factory-space": "^2.0.0", + "micromark-util-character": "^2.0.0", + "micromark-util-events-to-acorn": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0", + "vfile-message": "^4.0.0" }, "funding": { - "url": "https://github.com/sponsors/ljharb" + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/is-binary-path": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", - "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", + "node_modules/micromark-extension-mdx-jsx/node_modules/micromark-factory-space": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-factory-space/-/micromark-factory-space-2.0.1.tgz", + "integrity": "sha512-zRkxjtBxxLd2Sc0d+fbnEunsTj46SWXgXciZmHq0kDYGnck/ZSGj9/wULTV95uoeYiK5hRXP2mJ98Uo4cq/LQg==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], "license": "MIT", "dependencies": { - "binary-extensions": "^2.0.0" - }, - "engines": { - "node": ">=8" + "micromark-util-character": "^2.0.0", + "micromark-util-types": "^2.0.0" } }, - "node_modules/is-boolean-object": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.2.2.tgz", - "integrity": "sha512-wa56o2/ElJMYqjCjGkXri7it5FbebW5usLw/nPmCMs5DeZ7eziSYZhSmPRn0txqeW4LnAmQQU7FgqLpsEFKM4A==", - "dev": true, + "node_modules/micromark-extension-mdx-jsx/node_modules/micromark-util-character": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/micromark-util-character/-/micromark-util-character-2.1.1.tgz", + "integrity": "sha512-wv8tdUTJ3thSFFFJKtpYKOYiGP2+v96Hvk4Tu8KpCAsTMs6yi+nVmGh1syvSCsaxz45J6Jbw+9DD6g97+NV67Q==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], "license": "MIT", "dependencies": { - "call-bound": "^1.0.3", - "has-tostringtag": "^1.0.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" } }, - "node_modules/is-buffer": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-2.0.5.tgz", - "integrity": "sha512-i2R6zNFDwgEHJyQUtJEk0XFi1i0dPFn/oqjK3/vPCcDeJvW5NQ83V8QbicfF1SupOaB0h8ntgBC2YiE7dfyctQ==", + "node_modules/micromark-extension-mdx-jsx/node_modules/micromark-util-symbol": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-util-symbol/-/micromark-util-symbol-2.0.1.tgz", + "integrity": "sha512-vs5t8Apaud9N28kgCrRUdEed4UJ+wWNvicHLPxCa9ENlYuAY31M0ETy5y1vA33YoNPDFTghEbnh6efaE8h4x0Q==", "funding": [ { - "type": "github", - "url": "https://github.com/sponsors/feross" + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" }, { - "type": "patreon", - "url": "https://www.patreon.com/feross" + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT" + }, + "node_modules/micromark-extension-mdx-jsx/node_modules/micromark-util-types": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/micromark-util-types/-/micromark-util-types-2.0.2.tgz", + "integrity": "sha512-Yw0ECSpJoViF1qTU4DC6NwtC4aWGt1EkzaQB8KPPyCRR8z9TWeV0HbEFGTO+ZY1wB22zmxnJqhPyTpOVCpeHTA==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" }, { - "type": "consulting", - "url": "https://feross.org/support" + "type": "OpenCollective", + "url": "https://opencollective.com/unified" } ], - "license": "MIT", - "engines": { - "node": ">=4" - } + "license": "MIT" }, - "node_modules/is-callable": { - "version": "1.2.7", - "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.7.tgz", - "integrity": "sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==", + "node_modules/micromark-extension-mdx-jsx/node_modules/unist-util-stringify-position": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-4.0.0.tgz", + "integrity": "sha512-0ASV06AAoKCDkS2+xw5RXJywruurpbC4JZSm7nr7MOt1ojAzvyyaO+UxZf18j8FCF6kmzCZKcAgN/yu2gm2XgQ==", "license": "MIT", - "engines": { - "node": ">= 0.4" + "dependencies": { + "@types/unist": "^3.0.0" }, "funding": { - "url": "https://github.com/sponsors/ljharb" + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/is-ci": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/is-ci/-/is-ci-3.0.1.tgz", - "integrity": "sha512-ZYvCgrefwqoQ6yTyYUbQu64HsITZ3NfKX1lzaEYdkTDcfKzzCI/wthRRYKkdjHKFVgNiXKAKm65Zo1pk2as/QQ==", - "dev": true, + "node_modules/micromark-extension-mdx-jsx/node_modules/vfile-message": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/vfile-message/-/vfile-message-4.0.3.tgz", + "integrity": "sha512-QTHzsGd1EhbZs4AsQ20JX1rC3cOlt/IWJruk893DfLRr57lcnOeMaWG4K0JrRta4mIJZKth2Au3mM3u03/JWKw==", "license": "MIT", "dependencies": { - "ci-info": "^3.2.0" + "@types/unist": "^3.0.0", + "unist-util-stringify-position": "^4.0.0" }, - "bin": { - "is-ci": "bin.js" + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/is-core-module": { - "version": "2.16.1", - "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.16.1.tgz", - "integrity": "sha512-UfoeMA6fIJ8wTYFEUjelnaGI67v6+N7qXJEvQuIGa99l4xsCruSYOVSQ0uPANn4dAzm8lkYPaKLrrijLq7x23w==", + "node_modules/micromark-extension-mdx-md": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/micromark-extension-mdx-md/-/micromark-extension-mdx-md-2.0.0.tgz", + "integrity": "sha512-EpAiszsB3blw4Rpba7xTOUptcFeBFi+6PY8VnJ2hhimH+vCQDirWgsMpz7w1XcZE7LVrSAUGb9VJpG9ghlYvYQ==", "license": "MIT", "dependencies": { - "hasown": "^2.0.2" - }, - "engines": { - "node": ">= 0.4" + "micromark-util-types": "^2.0.0" }, "funding": { - "url": "https://github.com/sponsors/ljharb" + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/is-data-view": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-data-view/-/is-data-view-1.0.2.tgz", - "integrity": "sha512-RKtWF8pGmS87i2D6gqQu/l7EYRlVdfzemCJN/P3UOs//x1QE7mfhvzHIApBTRf7axvT6DMGwSwBXYCT0nfB9xw==", - "dev": true, + "node_modules/micromark-extension-mdx-md/node_modules/micromark-util-types": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/micromark-util-types/-/micromark-util-types-2.0.2.tgz", + "integrity": "sha512-Yw0ECSpJoViF1qTU4DC6NwtC4aWGt1EkzaQB8KPPyCRR8z9TWeV0HbEFGTO+ZY1wB22zmxnJqhPyTpOVCpeHTA==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT" + }, + "node_modules/micromark-extension-mdxjs": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/micromark-extension-mdxjs/-/micromark-extension-mdxjs-3.0.0.tgz", + "integrity": "sha512-A873fJfhnJ2siZyUrJ31l34Uqwy4xIFmvPY1oj+Ean5PHcPBYzEsvqvWGaWcfEIr11O5Dlw3p2y0tZWpKHDejQ==", "license": "MIT", "dependencies": { - "call-bound": "^1.0.2", - "get-intrinsic": "^1.2.6", - "is-typed-array": "^1.1.13" - }, - "engines": { - "node": ">= 0.4" + "acorn": "^8.0.0", + "acorn-jsx": "^5.0.0", + "micromark-extension-mdx-expression": "^3.0.0", + "micromark-extension-mdx-jsx": "^3.0.0", + "micromark-extension-mdx-md": "^2.0.0", + "micromark-extension-mdxjs-esm": "^3.0.0", + "micromark-util-combine-extensions": "^2.0.0", + "micromark-util-types": "^2.0.0" }, "funding": { - "url": "https://github.com/sponsors/ljharb" + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/is-date-object": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.1.0.tgz", - "integrity": "sha512-PwwhEakHVKTdRNVOw+/Gyh0+MzlCl4R6qKvkhuvLtPMggI1WAHt9sOwZxQLSGpUaDnrdyDsomoRgNnCfKNSXXg==", - "dev": true, + "node_modules/micromark-extension-mdxjs-esm": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/micromark-extension-mdxjs-esm/-/micromark-extension-mdxjs-esm-3.0.0.tgz", + "integrity": "sha512-DJFl4ZqkErRpq/dAPyeWp15tGrcrrJho1hKK5uBS70BCtfrIFg81sqcTVu3Ta+KD1Tk5vAtBNElWxtAa+m8K9A==", "license": "MIT", "dependencies": { - "call-bound": "^1.0.2", - "has-tostringtag": "^1.0.2" - }, - "engines": { - "node": ">= 0.4" + "@types/estree": "^1.0.0", + "devlop": "^1.0.0", + "micromark-core-commonmark": "^2.0.0", + "micromark-util-character": "^2.0.0", + "micromark-util-events-to-acorn": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0", + "unist-util-position-from-estree": "^2.0.0", + "vfile-message": "^4.0.0" }, "funding": { - "url": "https://github.com/sponsors/ljharb" + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/is-decimal": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/is-decimal/-/is-decimal-1.0.4.tgz", - "integrity": "sha512-RGdriMmQQvZ2aqaQq3awNA6dCGtKpiDFcOzrTWrDAT2MiWrKQVPmxLGHl7Y2nNu6led0kEyoX0enY0qXYsv9zw==", + "node_modules/micromark-extension-mdxjs-esm/node_modules/micromark-util-character": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/micromark-util-character/-/micromark-util-character-2.1.1.tgz", + "integrity": "sha512-wv8tdUTJ3thSFFFJKtpYKOYiGP2+v96Hvk4Tu8KpCAsTMs6yi+nVmGh1syvSCsaxz45J6Jbw+9DD6g97+NV67Q==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], "license": "MIT", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" + "dependencies": { + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" } }, - "node_modules/is-docker": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-2.2.1.tgz", - "integrity": "sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==", - "license": "MIT", - "peer": true, - "bin": { - "is-docker": "cli.js" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } + "node_modules/micromark-extension-mdxjs-esm/node_modules/micromark-util-symbol": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-util-symbol/-/micromark-util-symbol-2.0.1.tgz", + "integrity": "sha512-vs5t8Apaud9N28kgCrRUdEed4UJ+wWNvicHLPxCa9ENlYuAY31M0ETy5y1vA33YoNPDFTghEbnh6efaE8h4x0Q==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT" }, - "node_modules/is-extglob": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", - "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } + "node_modules/micromark-extension-mdxjs-esm/node_modules/micromark-util-types": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/micromark-util-types/-/micromark-util-types-2.0.2.tgz", + "integrity": "sha512-Yw0ECSpJoViF1qTU4DC6NwtC4aWGt1EkzaQB8KPPyCRR8z9TWeV0HbEFGTO+ZY1wB22zmxnJqhPyTpOVCpeHTA==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT" }, - "node_modules/is-finalizationregistry": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/is-finalizationregistry/-/is-finalizationregistry-1.1.1.tgz", - "integrity": "sha512-1pC6N8qWJbWoPtEjgcL2xyhQOP491EQjeUo3qTKcmV8YSDDJrOepfG8pcC7h/QgnQHYSv0mJ3Z/ZWxmatVrysg==", - "dev": true, + "node_modules/micromark-extension-mdxjs-esm/node_modules/unist-util-stringify-position": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-4.0.0.tgz", + "integrity": "sha512-0ASV06AAoKCDkS2+xw5RXJywruurpbC4JZSm7nr7MOt1ojAzvyyaO+UxZf18j8FCF6kmzCZKcAgN/yu2gm2XgQ==", "license": "MIT", "dependencies": { - "call-bound": "^1.0.3" - }, - "engines": { - "node": ">= 0.4" + "@types/unist": "^3.0.0" }, "funding": { - "url": "https://github.com/sponsors/ljharb" + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/is-fullwidth-code-point": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-4.0.0.tgz", - "integrity": "sha512-O4L094N2/dZ7xqVdrXhh9r1KODPJpFms8B5sGdJLPy664AgvXsreZUyCQQNItZRDlYug4xStLjNp/sz3HvBowQ==", - "dev": true, + "node_modules/micromark-extension-mdxjs-esm/node_modules/vfile-message": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/vfile-message/-/vfile-message-4.0.3.tgz", + "integrity": "sha512-QTHzsGd1EhbZs4AsQ20JX1rC3cOlt/IWJruk893DfLRr57lcnOeMaWG4K0JrRta4mIJZKth2Au3mM3u03/JWKw==", "license": "MIT", - "engines": { - "node": ">=12" + "dependencies": { + "@types/unist": "^3.0.0", + "unist-util-stringify-position": "^4.0.0" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/is-generator-fn": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-generator-fn/-/is-generator-fn-2.1.0.tgz", - "integrity": "sha512-cTIB4yPYL/Grw0EaSzASzg6bBy9gqCofvWN8okThAYIxKJZC+udlRAmGbM0XLeniEJSs8uEgHPGuHSe1XsOLSQ==", - "dev": true, + "node_modules/micromark-extension-mdxjs/node_modules/micromark-util-types": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/micromark-util-types/-/micromark-util-types-2.0.2.tgz", + "integrity": "sha512-Yw0ECSpJoViF1qTU4DC6NwtC4aWGt1EkzaQB8KPPyCRR8z9TWeV0HbEFGTO+ZY1wB22zmxnJqhPyTpOVCpeHTA==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT" + }, + "node_modules/micromark-factory-destination": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-factory-destination/-/micromark-factory-destination-2.0.1.tgz", + "integrity": "sha512-Xe6rDdJlkmbFRExpTOmRj9N3MaWmbAgdpSrBQvCFqhezUn4AHqJHbaEnfbVYYiexVSs//tqOdY/DxhjdCiJnIA==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], "license": "MIT", - "engines": { - "node": ">=6" + "dependencies": { + "micromark-util-character": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" } }, - "node_modules/is-generator-function": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/is-generator-function/-/is-generator-function-1.1.2.tgz", - "integrity": "sha512-upqt1SkGkODW9tsGNG5mtXTXtECizwtS2kA161M+gJPc1xdb/Ax629af6YrTwcOeQHbewrPNlE5Dx7kzvXTizA==", - "dev": true, + "node_modules/micromark-factory-destination/node_modules/micromark-util-character": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/micromark-util-character/-/micromark-util-character-2.1.1.tgz", + "integrity": "sha512-wv8tdUTJ3thSFFFJKtpYKOYiGP2+v96Hvk4Tu8KpCAsTMs6yi+nVmGh1syvSCsaxz45J6Jbw+9DD6g97+NV67Q==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], "license": "MIT", "dependencies": { - "call-bound": "^1.0.4", - "generator-function": "^2.0.0", - "get-proto": "^1.0.1", - "has-tostringtag": "^1.0.2", - "safe-regex-test": "^1.1.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" } }, - "node_modules/is-glob": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", - "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", + "node_modules/micromark-factory-destination/node_modules/micromark-util-symbol": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-util-symbol/-/micromark-util-symbol-2.0.1.tgz", + "integrity": "sha512-vs5t8Apaud9N28kgCrRUdEed4UJ+wWNvicHLPxCa9ENlYuAY31M0ETy5y1vA33YoNPDFTghEbnh6efaE8h4x0Q==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT" + }, + "node_modules/micromark-factory-destination/node_modules/micromark-util-types": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/micromark-util-types/-/micromark-util-types-2.0.2.tgz", + "integrity": "sha512-Yw0ECSpJoViF1qTU4DC6NwtC4aWGt1EkzaQB8KPPyCRR8z9TWeV0HbEFGTO+ZY1wB22zmxnJqhPyTpOVCpeHTA==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT" + }, + "node_modules/micromark-factory-label": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-factory-label/-/micromark-factory-label-2.0.1.tgz", + "integrity": "sha512-VFMekyQExqIW7xIChcXn4ok29YE3rnuyveW3wZQWWqF4Nv9Wk5rgJ99KzPvHjkmPXF93FXIbBp6YdW3t71/7Vg==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], "license": "MIT", "dependencies": { - "is-extglob": "^2.1.1" - }, - "engines": { - "node": ">=0.10.0" + "devlop": "^1.0.0", + "micromark-util-character": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" } }, - "node_modules/is-hex-prefixed": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-hex-prefixed/-/is-hex-prefixed-1.0.0.tgz", - "integrity": "sha512-WvtOiug1VFrE9v1Cydwm+FnXd3+w9GaeVUss5W4v/SLy3UW00vP+6iNF2SdnfiBoLy4bTqVdkftNGTUeOFVsbA==", + "node_modules/micromark-factory-label/node_modules/micromark-util-character": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/micromark-util-character/-/micromark-util-character-2.1.1.tgz", + "integrity": "sha512-wv8tdUTJ3thSFFFJKtpYKOYiGP2+v96Hvk4Tu8KpCAsTMs6yi+nVmGh1syvSCsaxz45J6Jbw+9DD6g97+NV67Q==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], "license": "MIT", - "engines": { - "node": ">=6.5.0", - "npm": ">=3" + "dependencies": { + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" } }, - "node_modules/is-hexadecimal": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/is-hexadecimal/-/is-hexadecimal-1.0.4.tgz", - "integrity": "sha512-gyPJuv83bHMpocVYoqof5VDiZveEoGoFL8m3BXNb2VW8Xs+rz9kqO8LOQ5DH6EsuvilT1ApazU0pyl+ytbPtlw==", + "node_modules/micromark-factory-label/node_modules/micromark-util-symbol": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-util-symbol/-/micromark-util-symbol-2.0.1.tgz", + "integrity": "sha512-vs5t8Apaud9N28kgCrRUdEed4UJ+wWNvicHLPxCa9ENlYuAY31M0ETy5y1vA33YoNPDFTghEbnh6efaE8h4x0Q==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT" + }, + "node_modules/micromark-factory-label/node_modules/micromark-util-types": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/micromark-util-types/-/micromark-util-types-2.0.2.tgz", + "integrity": "sha512-Yw0ECSpJoViF1qTU4DC6NwtC4aWGt1EkzaQB8KPPyCRR8z9TWeV0HbEFGTO+ZY1wB22zmxnJqhPyTpOVCpeHTA==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT" + }, + "node_modules/micromark-factory-mdx-expression": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/micromark-factory-mdx-expression/-/micromark-factory-mdx-expression-2.0.3.tgz", + "integrity": "sha512-kQnEtA3vzucU2BkrIa8/VaSAsP+EJ3CKOvhMuJgOEGg9KDC6OAY6nSnNDVRiVNRqj7Y4SlSzcStaH/5jge8JdQ==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], "license": "MIT", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" + "dependencies": { + "@types/estree": "^1.0.0", + "devlop": "^1.0.0", + "micromark-factory-space": "^2.0.0", + "micromark-util-character": "^2.0.0", + "micromark-util-events-to-acorn": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0", + "unist-util-position-from-estree": "^2.0.0", + "vfile-message": "^4.0.0" } }, - "node_modules/is-installed-globally": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/is-installed-globally/-/is-installed-globally-0.4.0.tgz", - "integrity": "sha512-iwGqO3J21aaSkC7jWnHP/difazwS7SFeIqxv6wEtLU8Y5KlzFTjyqcSIT0d8s4+dDhKytsk9PJZ2BkS5eZwQRQ==", - "dev": true, + "node_modules/micromark-factory-mdx-expression/node_modules/micromark-factory-space": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-factory-space/-/micromark-factory-space-2.0.1.tgz", + "integrity": "sha512-zRkxjtBxxLd2Sc0d+fbnEunsTj46SWXgXciZmHq0kDYGnck/ZSGj9/wULTV95uoeYiK5hRXP2mJ98Uo4cq/LQg==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], "license": "MIT", "dependencies": { - "global-dirs": "^3.0.0", - "is-path-inside": "^3.0.2" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "micromark-util-character": "^2.0.0", + "micromark-util-types": "^2.0.0" } }, - "node_modules/is-interactive": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-interactive/-/is-interactive-2.0.0.tgz", - "integrity": "sha512-qP1vozQRI+BMOPcjFzrjXuQvdak2pHNUMZoeG2eRbiSqyvbEf/wQtEOTOX1guk6E3t36RkaqiSt8A/6YElNxLQ==", - "dev": true, + "node_modules/micromark-factory-mdx-expression/node_modules/micromark-util-character": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/micromark-util-character/-/micromark-util-character-2.1.1.tgz", + "integrity": "sha512-wv8tdUTJ3thSFFFJKtpYKOYiGP2+v96Hvk4Tu8KpCAsTMs6yi+nVmGh1syvSCsaxz45J6Jbw+9DD6g97+NV67Q==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], "license": "MIT", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "dependencies": { + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" } }, - "node_modules/is-map": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/is-map/-/is-map-2.0.3.tgz", - "integrity": "sha512-1Qed0/Hr2m+YqxnM09CjA2d/i6YZNfF6R2oRAOj36eUdS6qIV/huPJNSEpKbupewFs+ZsJlxsjjPbc0/afW6Lw==", - "dev": true, + "node_modules/micromark-factory-mdx-expression/node_modules/micromark-util-symbol": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-util-symbol/-/micromark-util-symbol-2.0.1.tgz", + "integrity": "sha512-vs5t8Apaud9N28kgCrRUdEed4UJ+wWNvicHLPxCa9ENlYuAY31M0ETy5y1vA33YoNPDFTghEbnh6efaE8h4x0Q==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT" + }, + "node_modules/micromark-factory-mdx-expression/node_modules/micromark-util-types": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/micromark-util-types/-/micromark-util-types-2.0.2.tgz", + "integrity": "sha512-Yw0ECSpJoViF1qTU4DC6NwtC4aWGt1EkzaQB8KPPyCRR8z9TWeV0HbEFGTO+ZY1wB22zmxnJqhPyTpOVCpeHTA==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT" + }, + "node_modules/micromark-factory-mdx-expression/node_modules/unist-util-stringify-position": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-4.0.0.tgz", + "integrity": "sha512-0ASV06AAoKCDkS2+xw5RXJywruurpbC4JZSm7nr7MOt1ojAzvyyaO+UxZf18j8FCF6kmzCZKcAgN/yu2gm2XgQ==", "license": "MIT", - "engines": { - "node": ">= 0.4" + "dependencies": { + "@types/unist": "^3.0.0" }, "funding": { - "url": "https://github.com/sponsors/ljharb" + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/is-nan": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/is-nan/-/is-nan-1.3.2.tgz", - "integrity": "sha512-E+zBKpQ2t6MEo1VsonYmluk9NxGrbzpeeLC2xIViuO2EjU2xsXsBPwTr3Ykv9l08UYEVEdWeRZNouaZqF6RN0w==", - "dev": true, + "node_modules/micromark-factory-mdx-expression/node_modules/vfile-message": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/vfile-message/-/vfile-message-4.0.3.tgz", + "integrity": "sha512-QTHzsGd1EhbZs4AsQ20JX1rC3cOlt/IWJruk893DfLRr57lcnOeMaWG4K0JrRta4mIJZKth2Au3mM3u03/JWKw==", "license": "MIT", "dependencies": { - "call-bind": "^1.0.0", - "define-properties": "^1.1.3" - }, - "engines": { - "node": ">= 0.4" + "@types/unist": "^3.0.0", + "unist-util-stringify-position": "^4.0.0" }, "funding": { - "url": "https://github.com/sponsors/ljharb" + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/is-negative-zero": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.3.tgz", - "integrity": "sha512-5KoIu2Ngpyek75jXodFvnafB6DJgr3u8uuK0LEZJjrU19DrMD3EVERaR8sjz8CCGgpZvxPl9SuE1GMVPFHx1mw==", - "dev": true, + "node_modules/micromark-factory-space": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/micromark-factory-space/-/micromark-factory-space-1.1.0.tgz", + "integrity": "sha512-cRzEj7c0OL4Mw2v6nwzttyOZe8XY/Z8G0rzmWQZTBi/jjwyw/U4uqKtUORXQrR5bAZZnbTI/feRV/R7hc4jQYQ==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], "license": "MIT", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "dependencies": { + "micromark-util-character": "^1.0.0", + "micromark-util-types": "^1.0.0" } }, - "node_modules/is-npm": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/is-npm/-/is-npm-6.1.0.tgz", - "integrity": "sha512-O2z4/kNgyjhQwVR1Wpkbfc19JIhggF97NZNCpWTnjH7kVcZMUrnut9XSN7txI7VdyIYk5ZatOq3zvSuWpU8hoA==", - "dev": true, + "node_modules/micromark-factory-title": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-factory-title/-/micromark-factory-title-2.0.1.tgz", + "integrity": "sha512-5bZ+3CjhAd9eChYTHsjy6TGxpOFSKgKKJPJxr293jTbfry2KDoWkhBb6TcPVB4NmzaPhMs1Frm9AZH7OD4Cjzw==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], "license": "MIT", - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "dependencies": { + "micromark-factory-space": "^2.0.0", + "micromark-util-character": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" } }, - "node_modules/is-number": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", - "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "node_modules/micromark-factory-title/node_modules/micromark-factory-space": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-factory-space/-/micromark-factory-space-2.0.1.tgz", + "integrity": "sha512-zRkxjtBxxLd2Sc0d+fbnEunsTj46SWXgXciZmHq0kDYGnck/ZSGj9/wULTV95uoeYiK5hRXP2mJ98Uo4cq/LQg==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], "license": "MIT", - "engines": { - "node": ">=0.12.0" + "dependencies": { + "micromark-util-character": "^2.0.0", + "micromark-util-types": "^2.0.0" } }, - "node_modules/is-number-object": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.1.1.tgz", - "integrity": "sha512-lZhclumE1G6VYD8VHe35wFaIif+CTy5SJIi5+3y4psDgWu4wPDoBhF8NxUOinEc7pHgiTsT6MaBb92rKhhD+Xw==", - "dev": true, + "node_modules/micromark-factory-title/node_modules/micromark-util-character": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/micromark-util-character/-/micromark-util-character-2.1.1.tgz", + "integrity": "sha512-wv8tdUTJ3thSFFFJKtpYKOYiGP2+v96Hvk4Tu8KpCAsTMs6yi+nVmGh1syvSCsaxz45J6Jbw+9DD6g97+NV67Q==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], "license": "MIT", "dependencies": { - "call-bound": "^1.0.3", - "has-tostringtag": "^1.0.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" } }, - "node_modules/is-obj": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-obj/-/is-obj-2.0.0.tgz", - "integrity": "sha512-drqDG3cbczxxEJRoOXcOjtdp1J/lyp1mNn0xaznRs8+muBhgQcrnbspox5X5fOw0HnMnbfDzvnEMEtqDEJEo8w==", - "dev": true, + "node_modules/micromark-factory-title/node_modules/micromark-util-symbol": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-util-symbol/-/micromark-util-symbol-2.0.1.tgz", + "integrity": "sha512-vs5t8Apaud9N28kgCrRUdEed4UJ+wWNvicHLPxCa9ENlYuAY31M0ETy5y1vA33YoNPDFTghEbnh6efaE8h4x0Q==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT" + }, + "node_modules/micromark-factory-title/node_modules/micromark-util-types": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/micromark-util-types/-/micromark-util-types-2.0.2.tgz", + "integrity": "sha512-Yw0ECSpJoViF1qTU4DC6NwtC4aWGt1EkzaQB8KPPyCRR8z9TWeV0HbEFGTO+ZY1wB22zmxnJqhPyTpOVCpeHTA==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT" + }, + "node_modules/micromark-factory-whitespace": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-factory-whitespace/-/micromark-factory-whitespace-2.0.1.tgz", + "integrity": "sha512-Ob0nuZ3PKt/n0hORHyvoD9uZhr+Za8sFoP+OnMcnWK5lngSzALgQYKMr9RJVOWLqQYuyn6ulqGWSXdwf6F80lQ==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], "license": "MIT", - "engines": { - "node": ">=8" + "dependencies": { + "micromark-factory-space": "^2.0.0", + "micromark-util-character": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" } }, - "node_modules/is-path-inside": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz", - "integrity": "sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==", - "dev": true, + "node_modules/micromark-factory-whitespace/node_modules/micromark-factory-space": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-factory-space/-/micromark-factory-space-2.0.1.tgz", + "integrity": "sha512-zRkxjtBxxLd2Sc0d+fbnEunsTj46SWXgXciZmHq0kDYGnck/ZSGj9/wULTV95uoeYiK5hRXP2mJ98Uo4cq/LQg==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], "license": "MIT", - "engines": { - "node": ">=8" + "dependencies": { + "micromark-util-character": "^2.0.0", + "micromark-util-types": "^2.0.0" } }, - "node_modules/is-plain-obj": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-2.1.0.tgz", - "integrity": "sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA==", + "node_modules/micromark-factory-whitespace/node_modules/micromark-util-character": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/micromark-util-character/-/micromark-util-character-2.1.1.tgz", + "integrity": "sha512-wv8tdUTJ3thSFFFJKtpYKOYiGP2+v96Hvk4Tu8KpCAsTMs6yi+nVmGh1syvSCsaxz45J6Jbw+9DD6g97+NV67Q==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], "license": "MIT", - "engines": { - "node": ">=8" + "dependencies": { + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" } }, - "node_modules/is-potential-custom-element-name": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-potential-custom-element-name/-/is-potential-custom-element-name-1.0.1.tgz", - "integrity": "sha512-bCYeRA2rVibKZd+s2625gGnGF/t7DSqDs4dP7CrLA1m7jKWz6pps0LpYLJN8Q64HtmPKJ1hrN3nzPNKFEKOUiQ==", - "dev": true, + "node_modules/micromark-factory-whitespace/node_modules/micromark-util-symbol": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-util-symbol/-/micromark-util-symbol-2.0.1.tgz", + "integrity": "sha512-vs5t8Apaud9N28kgCrRUdEed4UJ+wWNvicHLPxCa9ENlYuAY31M0ETy5y1vA33YoNPDFTghEbnh6efaE8h4x0Q==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], "license": "MIT" }, - "node_modules/is-promise": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/is-promise/-/is-promise-4.0.0.tgz", - "integrity": "sha512-hvpoI6korhJMnej285dSg6nu1+e6uxs7zG3BYAm5byqDsgJNWwxzM6z6iZiAgQR4TJ30JmBTOwqZUw3WlyH3AQ==", - "license": "MIT", - "peer": true + "node_modules/micromark-factory-whitespace/node_modules/micromark-util-types": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/micromark-util-types/-/micromark-util-types-2.0.2.tgz", + "integrity": "sha512-Yw0ECSpJoViF1qTU4DC6NwtC4aWGt1EkzaQB8KPPyCRR8z9TWeV0HbEFGTO+ZY1wB22zmxnJqhPyTpOVCpeHTA==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT" }, - "node_modules/is-reference": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/is-reference/-/is-reference-1.2.1.tgz", - "integrity": "sha512-U82MsXXiFIrjCK4otLT+o2NA2Cd2g5MLoOVXUZjIOhLurrRxpEXzI8O0KZHr3IjLvlAH1kTPYSuqer5T9ZVBKQ==", - "dev": true, + "node_modules/micromark-util-character": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/micromark-util-character/-/micromark-util-character-1.2.0.tgz", + "integrity": "sha512-lXraTwcX3yH/vMDaFWCQJP1uIszLVebzUa3ZHdrgxr7KEU/9mL4mVgCpGbyhvNLNlauROiNUq7WN5u7ndbY6xg==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], "license": "MIT", "dependencies": { - "@types/estree": "*" + "micromark-util-symbol": "^1.0.0", + "micromark-util-types": "^1.0.0" } }, - "node_modules/is-regex": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.2.1.tgz", - "integrity": "sha512-MjYsKHO5O7mCsmRGxWcLWheFqN9DJ/2TmngvjKXihe6efViPqc274+Fx/4fYj/r03+ESvBdTXK0V6tA3rgez1g==", - "dev": true, + "node_modules/micromark-util-chunked": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-util-chunked/-/micromark-util-chunked-2.0.1.tgz", + "integrity": "sha512-QUNFEOPELfmvv+4xiNg2sRYeS/P84pTW0TCgP5zc9FpXetHY0ab7SxKyAQCNCc1eK0459uoLI1y5oO5Vc1dbhA==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], "license": "MIT", "dependencies": { - "call-bound": "^1.0.2", - "gopd": "^1.2.0", - "has-tostringtag": "^1.0.2", - "hasown": "^2.0.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "micromark-util-symbol": "^2.0.0" } }, - "node_modules/is-set": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/is-set/-/is-set-2.0.3.tgz", - "integrity": "sha512-iPAjerrse27/ygGLxw+EBR9agv9Y6uLeYVJMu+QNCoouJ1/1ri0mGrcWpfCqFZuzzx3WjtwxG098X+n4OuRkPg==", - "dev": true, + "node_modules/micromark-util-chunked/node_modules/micromark-util-symbol": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-util-symbol/-/micromark-util-symbol-2.0.1.tgz", + "integrity": "sha512-vs5t8Apaud9N28kgCrRUdEed4UJ+wWNvicHLPxCa9ENlYuAY31M0ETy5y1vA33YoNPDFTghEbnh6efaE8h4x0Q==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT" + }, + "node_modules/micromark-util-classify-character": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-util-classify-character/-/micromark-util-classify-character-2.0.1.tgz", + "integrity": "sha512-K0kHzM6afW/MbeWYWLjoHQv1sgg2Q9EccHEDzSkxiP/EaagNzCm7T/WMKZ3rjMbvIpvBiZgwR3dKMygtA4mG1Q==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], "license": "MIT", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "dependencies": { + "micromark-util-character": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" } }, - "node_modules/is-shared-array-buffer": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.4.tgz", - "integrity": "sha512-ISWac8drv4ZGfwKl5slpHG9OwPNty4jOWPRIhBpxOoD+hqITiwuipOQ2bNthAzwA3B4fIjO4Nln74N0S9byq8A==", - "dev": true, + "node_modules/micromark-util-classify-character/node_modules/micromark-util-character": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/micromark-util-character/-/micromark-util-character-2.1.1.tgz", + "integrity": "sha512-wv8tdUTJ3thSFFFJKtpYKOYiGP2+v96Hvk4Tu8KpCAsTMs6yi+nVmGh1syvSCsaxz45J6Jbw+9DD6g97+NV67Q==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], "license": "MIT", "dependencies": { - "call-bound": "^1.0.3" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" } }, - "node_modules/is-stream": { + "node_modules/micromark-util-classify-character/node_modules/micromark-util-symbol": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", - "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==", - "license": "MIT", - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } + "resolved": "https://registry.npmjs.org/micromark-util-symbol/-/micromark-util-symbol-2.0.1.tgz", + "integrity": "sha512-vs5t8Apaud9N28kgCrRUdEed4UJ+wWNvicHLPxCa9ENlYuAY31M0ETy5y1vA33YoNPDFTghEbnh6efaE8h4x0Q==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT" }, - "node_modules/is-string": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.1.1.tgz", - "integrity": "sha512-BtEeSsoaQjlSPBemMQIrY1MY0uM6vnS1g5fmufYOtnxLGUZM2178PKbhsk7Ffv58IX+ZtcvoGwccYsh0PglkAA==", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bound": "^1.0.3", - "has-tostringtag": "^1.0.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } + "node_modules/micromark-util-classify-character/node_modules/micromark-util-types": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/micromark-util-types/-/micromark-util-types-2.0.2.tgz", + "integrity": "sha512-Yw0ECSpJoViF1qTU4DC6NwtC4aWGt1EkzaQB8KPPyCRR8z9TWeV0HbEFGTO+ZY1wB22zmxnJqhPyTpOVCpeHTA==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT" }, - "node_modules/is-subdir": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/is-subdir/-/is-subdir-1.2.0.tgz", - "integrity": "sha512-2AT6j+gXe/1ueqbW6fLZJiIw3F8iXGJtt0yDrZaBhAZEG1raiTxKWU+IPqMCzQAXOUCKdA4UDMgacKH25XG2Cw==", - "dev": true, + "node_modules/micromark-util-combine-extensions": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-util-combine-extensions/-/micromark-util-combine-extensions-2.0.1.tgz", + "integrity": "sha512-OnAnH8Ujmy59JcyZw8JSbK9cGpdVY44NKgSM7E9Eh7DiLS2E9RNQf0dONaGDzEG9yjEl5hcqeIsj4hfRkLH/Bg==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], "license": "MIT", "dependencies": { - "better-path-resolve": "1.0.0" - }, - "engines": { - "node": ">=4" + "micromark-util-chunked": "^2.0.0", + "micromark-util-types": "^2.0.0" } }, - "node_modules/is-symbol": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.1.1.tgz", - "integrity": "sha512-9gGx6GTtCQM73BgmHQXfDmLtfjjTUDSyoxTCbp5WtoixAhfgsDirWIcVQ/IHpvI5Vgd5i/J5F7B9cN/WlVbC/w==", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bound": "^1.0.2", - "has-symbols": "^1.1.0", - "safe-regex-test": "^1.1.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "node_modules/micromark-util-combine-extensions/node_modules/micromark-util-types": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/micromark-util-types/-/micromark-util-types-2.0.2.tgz", + "integrity": "sha512-Yw0ECSpJoViF1qTU4DC6NwtC4aWGt1EkzaQB8KPPyCRR8z9TWeV0HbEFGTO+ZY1wB22zmxnJqhPyTpOVCpeHTA==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT" + }, + "node_modules/micromark-util-decode-numeric-character-reference": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/micromark-util-decode-numeric-character-reference/-/micromark-util-decode-numeric-character-reference-2.0.2.tgz", + "integrity": "sha512-ccUbYk6CwVdkmCQMyr64dXz42EfHGkPQlBj5p7YVGzq8I7CtjXZJrubAYezf7Rp+bjPseiROqe7G6foFd+lEuw==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "micromark-util-symbol": "^2.0.0" } }, - "node_modules/is-text-path": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-text-path/-/is-text-path-2.0.0.tgz", - "integrity": "sha512-+oDTluR6WEjdXEJMnC2z6A4FRwFoYuvShVVEGsS7ewc0UTi2QtAKMDJuL4BDEVt+5T7MjFo12RP8ghOM75oKJw==", - "dev": true, + "node_modules/micromark-util-decode-numeric-character-reference/node_modules/micromark-util-symbol": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-util-symbol/-/micromark-util-symbol-2.0.1.tgz", + "integrity": "sha512-vs5t8Apaud9N28kgCrRUdEed4UJ+wWNvicHLPxCa9ENlYuAY31M0ETy5y1vA33YoNPDFTghEbnh6efaE8h4x0Q==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT" + }, + "node_modules/micromark-util-decode-string": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-util-decode-string/-/micromark-util-decode-string-2.0.1.tgz", + "integrity": "sha512-nDV/77Fj6eH1ynwscYTOsbK7rR//Uj0bZXBwJZRfaLEJ1iGBR6kIfNmlNqaqJf649EP0F3NWNdeJi03elllNUQ==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], "license": "MIT", "dependencies": { - "text-extensions": "^2.0.0" - }, - "engines": { - "node": ">=8" + "decode-named-character-reference": "^1.0.0", + "micromark-util-character": "^2.0.0", + "micromark-util-decode-numeric-character-reference": "^2.0.0", + "micromark-util-symbol": "^2.0.0" } }, - "node_modules/is-typed-array": { - "version": "1.1.15", - "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.15.tgz", - "integrity": "sha512-p3EcsicXjit7SaskXHs1hA91QxgTw46Fv6EFKKGS5DRFLD8yKnohjF3hxoju94b/OcMZoQukzpPpBE9uLVKzgQ==", + "node_modules/micromark-util-decode-string/node_modules/micromark-util-character": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/micromark-util-character/-/micromark-util-character-2.1.1.tgz", + "integrity": "sha512-wv8tdUTJ3thSFFFJKtpYKOYiGP2+v96Hvk4Tu8KpCAsTMs6yi+nVmGh1syvSCsaxz45J6Jbw+9DD6g97+NV67Q==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], "license": "MIT", "dependencies": { - "which-typed-array": "^1.1.16" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" } }, - "node_modules/is-typedarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", - "integrity": "sha512-cyA56iCMHAh5CdzjJIa4aohJyeO1YbwLi3Jc35MmRU6poroFjIGZzUzupGiRPOjgHg9TLu43xbpwXk523fMxKA==", - "dev": true, + "node_modules/micromark-util-decode-string/node_modules/micromark-util-symbol": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-util-symbol/-/micromark-util-symbol-2.0.1.tgz", + "integrity": "sha512-vs5t8Apaud9N28kgCrRUdEed4UJ+wWNvicHLPxCa9ENlYuAY31M0ETy5y1vA33YoNPDFTghEbnh6efaE8h4x0Q==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], "license": "MIT" }, - "node_modules/is-unicode-supported": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz", - "integrity": "sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==", + "node_modules/micromark-util-decode-string/node_modules/micromark-util-types": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/micromark-util-types/-/micromark-util-types-2.0.2.tgz", + "integrity": "sha512-Yw0ECSpJoViF1qTU4DC6NwtC4aWGt1EkzaQB8KPPyCRR8z9TWeV0HbEFGTO+ZY1wB22zmxnJqhPyTpOVCpeHTA==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT" + }, + "node_modules/micromark-util-encode": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-util-encode/-/micromark-util-encode-2.0.1.tgz", + "integrity": "sha512-c3cVx2y4KqUnwopcO9b/SCdo2O67LwJJ/UyqGfbigahfegL9myoEFoDYZgkT7f36T0bLrM9hZTAaAyH+PCAXjw==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT" + }, + "node_modules/micromark-util-events-to-acorn": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/micromark-util-events-to-acorn/-/micromark-util-events-to-acorn-2.0.3.tgz", + "integrity": "sha512-jmsiEIiZ1n7X1Rr5k8wVExBQCg5jy4UXVADItHmNk1zkwEVhBuIUKRu3fqv+hs4nxLISi2DQGlqIOGiFxgbfHg==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], "license": "MIT", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "dependencies": { + "@types/estree": "^1.0.0", + "@types/unist": "^3.0.0", + "devlop": "^1.0.0", + "estree-util-visit": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0", + "vfile-message": "^4.0.0" } }, - "node_modules/is-weakmap": { + "node_modules/micromark-util-events-to-acorn/node_modules/micromark-util-symbol": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-util-symbol/-/micromark-util-symbol-2.0.1.tgz", + "integrity": "sha512-vs5t8Apaud9N28kgCrRUdEed4UJ+wWNvicHLPxCa9ENlYuAY31M0ETy5y1vA33YoNPDFTghEbnh6efaE8h4x0Q==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT" + }, + "node_modules/micromark-util-events-to-acorn/node_modules/micromark-util-types": { "version": "2.0.2", - "resolved": "https://registry.npmjs.org/is-weakmap/-/is-weakmap-2.0.2.tgz", - "integrity": "sha512-K5pXYOm9wqY1RgjpL3YTkF39tni1XajUIkawTLUo9EZEVUFga5gSQJF8nNS7ZwJQ02y+1YCNYcMh+HIf1ZqE+w==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } + "resolved": "https://registry.npmjs.org/micromark-util-types/-/micromark-util-types-2.0.2.tgz", + "integrity": "sha512-Yw0ECSpJoViF1qTU4DC6NwtC4aWGt1EkzaQB8KPPyCRR8z9TWeV0HbEFGTO+ZY1wB22zmxnJqhPyTpOVCpeHTA==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT" }, - "node_modules/is-weakref": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/is-weakref/-/is-weakref-1.1.1.tgz", - "integrity": "sha512-6i9mGWSlqzNMEqpCp93KwRS1uUOodk2OJ6b+sq7ZPDSy2WuI5NFIxp/254TytR8ftefexkWn5xNiHUNpPOfSew==", - "dev": true, + "node_modules/micromark-util-events-to-acorn/node_modules/unist-util-stringify-position": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-4.0.0.tgz", + "integrity": "sha512-0ASV06AAoKCDkS2+xw5RXJywruurpbC4JZSm7nr7MOt1ojAzvyyaO+UxZf18j8FCF6kmzCZKcAgN/yu2gm2XgQ==", "license": "MIT", "dependencies": { - "call-bound": "^1.0.3" - }, - "engines": { - "node": ">= 0.4" + "@types/unist": "^3.0.0" }, "funding": { - "url": "https://github.com/sponsors/ljharb" + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/is-weakset": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/is-weakset/-/is-weakset-2.0.4.tgz", - "integrity": "sha512-mfcwb6IzQyOKTs84CQMrOwW4gQcaTOAWJ0zzJCl2WSPDrWk/OzDaImWFH3djXhb24g4eudZfLRozAvPGw4d9hQ==", - "dev": true, + "node_modules/micromark-util-events-to-acorn/node_modules/vfile-message": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/vfile-message/-/vfile-message-4.0.3.tgz", + "integrity": "sha512-QTHzsGd1EhbZs4AsQ20JX1rC3cOlt/IWJruk893DfLRr57lcnOeMaWG4K0JrRta4mIJZKth2Au3mM3u03/JWKw==", "license": "MIT", "dependencies": { - "call-bound": "^1.0.3", - "get-intrinsic": "^1.2.6" - }, - "engines": { - "node": ">= 0.4" + "@types/unist": "^3.0.0", + "unist-util-stringify-position": "^4.0.0" }, "funding": { - "url": "https://github.com/sponsors/ljharb" + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/is-windows": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-windows/-/is-windows-1.0.2.tgz", - "integrity": "sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } + "node_modules/micromark-util-html-tag-name": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-util-html-tag-name/-/micromark-util-html-tag-name-2.0.1.tgz", + "integrity": "sha512-2cNEiYDhCWKI+Gs9T0Tiysk136SnR13hhO8yW6BGNyhOC4qYFnwF1nKfD3HFAIXA5c45RrIG1ub11GiXeYd1xA==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT" }, - "node_modules/is-wsl": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-2.2.0.tgz", - "integrity": "sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==", + "node_modules/micromark-util-normalize-identifier": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-util-normalize-identifier/-/micromark-util-normalize-identifier-2.0.1.tgz", + "integrity": "sha512-sxPqmo70LyARJs0w2UclACPUUEqltCkJ6PhKdMIDuJ3gSf/Q+/GIe3WKl0Ijb/GyH9lOpUkRAO2wp0GVkLvS9Q==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], "license": "MIT", - "peer": true, "dependencies": { - "is-docker": "^2.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/is-yarn-global": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/is-yarn-global/-/is-yarn-global-0.4.1.tgz", - "integrity": "sha512-/kppl+R+LO5VmhYSEWARUFjodS25D68gvj8W7z0I7OWhUla5xWu8KL6CtB2V0R6yqhnRgbcaREMr4EEM6htLPQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=12" + "micromark-util-symbol": "^2.0.0" } }, - "node_modules/isarray": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz", - "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==", + "node_modules/micromark-util-normalize-identifier/node_modules/micromark-util-symbol": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-util-symbol/-/micromark-util-symbol-2.0.1.tgz", + "integrity": "sha512-vs5t8Apaud9N28kgCrRUdEed4UJ+wWNvicHLPxCa9ENlYuAY31M0ETy5y1vA33YoNPDFTghEbnh6efaE8h4x0Q==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], "license": "MIT" }, - "node_modules/isexe": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", - "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", - "license": "ISC" - }, - "node_modules/isomorphic-timers-promises": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/isomorphic-timers-promises/-/isomorphic-timers-promises-1.0.1.tgz", - "integrity": "sha512-u4sej9B1LPSxTGKB/HiuzvEQnXH0ECYkSVQU39koSwmFAxhlEAFl9RdTvLv4TOTQUgBS5O3O5fwUxk6byBZ+IQ==", - "dev": true, + "node_modules/micromark-util-resolve-all": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-util-resolve-all/-/micromark-util-resolve-all-2.0.1.tgz", + "integrity": "sha512-VdQyxFWFT2/FGJgwQnJYbe1jjQoNTS4RjglmSjTUlpUMa95Htx9NHeYW4rGDJzbjvCsl9eLjMQwGeElsqmzcHg==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], "license": "MIT", - "engines": { - "node": ">=10" + "dependencies": { + "micromark-util-types": "^2.0.0" } }, - "node_modules/isomorphic-unfetch": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/isomorphic-unfetch/-/isomorphic-unfetch-3.1.0.tgz", - "integrity": "sha512-geDJjpoZ8N0kWexiwkX8F9NkTsXhetLPVbZFQ+JTW239QNOwvB0gniuR1Wc6f0AMTn7/mFGyXvHTifrCp/GH8Q==", + "node_modules/micromark-util-resolve-all/node_modules/micromark-util-types": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/micromark-util-types/-/micromark-util-types-2.0.2.tgz", + "integrity": "sha512-Yw0ECSpJoViF1qTU4DC6NwtC4aWGt1EkzaQB8KPPyCRR8z9TWeV0HbEFGTO+ZY1wB22zmxnJqhPyTpOVCpeHTA==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT" + }, + "node_modules/micromark-util-sanitize-uri": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-util-sanitize-uri/-/micromark-util-sanitize-uri-2.0.1.tgz", + "integrity": "sha512-9N9IomZ/YuGGZZmQec1MbgxtlgougxTodVwDzzEouPKo3qFWvymFHWcnDi2vzV1ff6kas9ucW+o3yzJK9YB1AQ==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], "license": "MIT", "dependencies": { - "node-fetch": "^2.6.1", - "unfetch": "^4.2.0" - } - }, - "node_modules/istanbul-lib-coverage": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.2.tgz", - "integrity": "sha512-O8dpsF+r0WV/8MNRKfnmrtCWhuKjxrq2w+jpzBL5UZKTi2LeVWnWOmWRxFlesJONmc+wLAGvKQZEOanko0LFTg==", - "license": "BSD-3-Clause", - "engines": { - "node": ">=8" + "micromark-util-character": "^2.0.0", + "micromark-util-encode": "^2.0.0", + "micromark-util-symbol": "^2.0.0" } }, - "node_modules/istanbul-lib-instrument": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-6.0.3.tgz", - "integrity": "sha512-Vtgk7L/R2JHyyGW07spoFlB8/lpjiOLTjMdms6AFMraYt3BaJauod/NGrfnVG/y4Ix1JEuMRPDPEj2ua+zz1/Q==", - "dev": true, - "license": "BSD-3-Clause", + "node_modules/micromark-util-sanitize-uri/node_modules/micromark-util-character": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/micromark-util-character/-/micromark-util-character-2.1.1.tgz", + "integrity": "sha512-wv8tdUTJ3thSFFFJKtpYKOYiGP2+v96Hvk4Tu8KpCAsTMs6yi+nVmGh1syvSCsaxz45J6Jbw+9DD6g97+NV67Q==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", "dependencies": { - "@babel/core": "^7.23.9", - "@babel/parser": "^7.23.9", - "@istanbuljs/schema": "^0.1.3", - "istanbul-lib-coverage": "^3.2.0", - "semver": "^7.5.4" - }, - "engines": { - "node": ">=10" + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" } }, - "node_modules/istanbul-lib-instrument/node_modules/semver": { - "version": "7.7.2", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.2.tgz", - "integrity": "sha512-RF0Fw+rO5AMf9MAyaRXI4AV0Ulj5lMHqVxxdSgiVbixSCXoEmmX/jk0CuJw4+3SqroYO9VoUh+HcuJivvtJemA==", - "dev": true, - "license": "ISC", - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } + "node_modules/micromark-util-sanitize-uri/node_modules/micromark-util-symbol": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-util-symbol/-/micromark-util-symbol-2.0.1.tgz", + "integrity": "sha512-vs5t8Apaud9N28kgCrRUdEed4UJ+wWNvicHLPxCa9ENlYuAY31M0ETy5y1vA33YoNPDFTghEbnh6efaE8h4x0Q==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT" }, - "node_modules/istanbul-lib-report": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/istanbul-lib-report/-/istanbul-lib-report-3.0.1.tgz", - "integrity": "sha512-GCfE1mtsHGOELCU8e/Z7YWzpmybrx/+dSTfLrvY8qRmaY6zXTKWn6WQIjaAFw069icm6GVMNkgu0NzI4iPZUNw==", - "dev": true, - "license": "BSD-3-Clause", - "dependencies": { - "istanbul-lib-coverage": "^3.0.0", - "make-dir": "^4.0.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - } + "node_modules/micromark-util-sanitize-uri/node_modules/micromark-util-types": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/micromark-util-types/-/micromark-util-types-2.0.2.tgz", + "integrity": "sha512-Yw0ECSpJoViF1qTU4DC6NwtC4aWGt1EkzaQB8KPPyCRR8z9TWeV0HbEFGTO+ZY1wB22zmxnJqhPyTpOVCpeHTA==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT" }, - "node_modules/istanbul-lib-report/node_modules/make-dir": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-4.0.0.tgz", - "integrity": "sha512-hXdUTZYIVOt1Ex//jAQi+wTZZpUpwBj/0QsOzqegb3rGMMeJiSEu5xLHnYfBrRV4RH2+OCSOO95Is/7x1WJ4bw==", - "dev": true, + "node_modules/micromark-util-subtokenize": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/micromark-util-subtokenize/-/micromark-util-subtokenize-2.1.0.tgz", + "integrity": "sha512-XQLu552iSctvnEcgXw6+Sx75GflAPNED1qx7eBJ+wydBb2KCbRZe+NwvIEEMM83uml1+2WSXpBAcp9IUCgCYWA==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], "license": "MIT", "dependencies": { - "semver": "^7.5.3" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/istanbul-lib-report/node_modules/semver": { - "version": "7.7.2", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.2.tgz", - "integrity": "sha512-RF0Fw+rO5AMf9MAyaRXI4AV0Ulj5lMHqVxxdSgiVbixSCXoEmmX/jk0CuJw4+3SqroYO9VoUh+HcuJivvtJemA==", - "dev": true, - "license": "ISC", - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" + "devlop": "^1.0.0", + "micromark-util-chunked": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" } }, - "node_modules/istanbul-lib-source-maps": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/istanbul-lib-source-maps/-/istanbul-lib-source-maps-4.0.1.tgz", - "integrity": "sha512-n3s8EwkdFIJCG3BPKBYvskgXGoy88ARzvegkitk60NxRdwltLOTaH7CUiMRXvwYorl0Q712iEjcWB+fK/MrWVw==", - "dev": true, - "license": "BSD-3-Clause", - "dependencies": { - "debug": "^4.1.1", - "istanbul-lib-coverage": "^3.0.0", - "source-map": "^0.6.1" - }, - "engines": { - "node": ">=10" - } + "node_modules/micromark-util-subtokenize/node_modules/micromark-util-symbol": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-util-symbol/-/micromark-util-symbol-2.0.1.tgz", + "integrity": "sha512-vs5t8Apaud9N28kgCrRUdEed4UJ+wWNvicHLPxCa9ENlYuAY31M0ETy5y1vA33YoNPDFTghEbnh6efaE8h4x0Q==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT" }, - "node_modules/istanbul-lib-source-maps/node_modules/source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true, - "license": "BSD-3-Clause", - "engines": { - "node": ">=0.10.0" - } + "node_modules/micromark-util-subtokenize/node_modules/micromark-util-types": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/micromark-util-types/-/micromark-util-types-2.0.2.tgz", + "integrity": "sha512-Yw0ECSpJoViF1qTU4DC6NwtC4aWGt1EkzaQB8KPPyCRR8z9TWeV0HbEFGTO+ZY1wB22zmxnJqhPyTpOVCpeHTA==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT" }, - "node_modules/istanbul-reports": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-3.2.0.tgz", - "integrity": "sha512-HGYWWS/ehqTV3xN10i23tkPkpH46MLCIMFNCaaKNavAXTF1RkqxawEPtnjnGZ6XKSInBKkiOA5BKS+aZiY3AvA==", - "dev": true, - "license": "BSD-3-Clause", - "dependencies": { - "html-escaper": "^2.0.0", - "istanbul-lib-report": "^3.0.0" - }, - "engines": { - "node": ">=8" - } + "node_modules/micromark-util-symbol": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/micromark-util-symbol/-/micromark-util-symbol-1.1.0.tgz", + "integrity": "sha512-uEjpEYY6KMs1g7QfJ2eX1SQEV+ZT4rUD3UcF6l57acZvLNK7PBZL+ty82Z1qhK1/yXIY4bdx04FKMgR0g4IAag==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT" }, - "node_modules/iterare": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/iterare/-/iterare-1.2.1.tgz", - "integrity": "sha512-RKYVTCjAnRthyJes037NX/IiqeidgN1xc3j1RjFfECFp28A1GVwK9nA+i0rJPaHqSZwygLzRnFlzUuHFoWWy+Q==", - "license": "ISC", - "engines": { - "node": ">=6" - } + "node_modules/micromark-util-types": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/micromark-util-types/-/micromark-util-types-1.1.0.tgz", + "integrity": "sha512-ukRBgie8TIAcacscVHSiddHjO4k/q3pnedmzMQ4iwDcK0FtFCohKOlFbaOL/mPgfnPsL3C1ZyxJa4sbWrBl3jg==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT" }, - "node_modules/iterator.prototype": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/iterator.prototype/-/iterator.prototype-1.1.5.tgz", - "integrity": "sha512-H0dkQoCa3b2VEeKQBOxFph+JAbcrQdE7KC0UkqwpLmv2EC4P41QXP+rqo9wYodACiG5/WM5s9oDApTU8utwj9g==", - "dev": true, + "node_modules/micromatch": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.8.tgz", + "integrity": "sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==", "license": "MIT", "dependencies": { - "define-data-property": "^1.1.4", - "es-object-atoms": "^1.0.0", - "get-intrinsic": "^1.2.6", - "get-proto": "^1.0.0", - "has-symbols": "^1.1.0", - "set-function-name": "^2.0.2" + "braces": "^3.0.3", + "picomatch": "^2.3.1" }, "engines": { - "node": ">= 0.4" + "node": ">=8.6" } }, - "node_modules/jackspeak": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-4.1.1.tgz", - "integrity": "sha512-zptv57P3GpL+O0I7VdMJNBZCu+BPHVQUk55Ft8/QCJjTVxrnJHuVuX/0Bl2A6/+2oyR/ZMEuFKwmzqqZ/U5nPQ==", - "dev": true, - "license": "BlueOak-1.0.0", - "dependencies": { - "@isaacs/cliui": "^8.0.2" - }, + "node_modules/micromatch/node_modules/picomatch": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "license": "MIT", "engines": { - "node": "20 || >=22" + "node": ">=8.6" }, "funding": { - "url": "https://github.com/sponsors/isaacs" + "url": "https://github.com/sponsors/jonschlinkert" } }, - "node_modules/jest": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest/-/jest-29.7.0.tgz", - "integrity": "sha512-NIy3oAFp9shda19hy4HK0HRTWKtPJmGdnvywu01nOqNC2vZg+Z+fvJDxpMQA88eb2I9EcafcdjYgsDthnYTvGw==", + "node_modules/miller-rabin": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/miller-rabin/-/miller-rabin-4.0.1.tgz", + "integrity": "sha512-115fLhvZVqWwHPbClyntxEVfVDfl9DLLTuJvq3g2O/Oxi8AiNouAHvDSzHS0viUJc+V5vm3eq91Xwqn9dp4jRA==", "dev": true, "license": "MIT", "dependencies": { - "@jest/core": "^29.7.0", - "@jest/types": "^29.6.3", - "import-local": "^3.0.2", - "jest-cli": "^29.7.0" + "bn.js": "^4.0.0", + "brorand": "^1.0.1" }, "bin": { - "jest": "bin/jest.js" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - }, - "peerDependencies": { - "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0" - }, - "peerDependenciesMeta": { - "node-notifier": { - "optional": true - } + "miller-rabin": "bin/miller-rabin" } }, - "node_modules/jest-changed-files": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-changed-files/-/jest-changed-files-29.7.0.tgz", - "integrity": "sha512-fEArFiwf1BpQ+4bXSprcDc3/x4HSzL4al2tozwVpDFpsxALjLYdyiIK4e5Vz66GQJIbXJ82+35PtysofptNX2w==", + "node_modules/miller-rabin/node_modules/bn.js": { + "version": "4.12.2", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.2.tgz", + "integrity": "sha512-n4DSx829VRTRByMRGdjQ9iqsN0Bh4OolPsFnaZBLcbi8iXcB+kJ9s7EnRt4wILZNV3kPLHkRVfOc/HvhC3ovDw==", "dev": true, - "license": "MIT", - "dependencies": { - "execa": "^5.0.0", - "jest-util": "^29.7.0", - "p-limit": "^3.1.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } + "license": "MIT" }, - "node_modules/jest-changed-files/node_modules/p-limit": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", - "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", + "node_modules/mime": { + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/mime/-/mime-2.6.0.tgz", + "integrity": "sha512-USPkMeET31rOMiarsBNIHZKLGgvKc/LrjofAnBlOttf5ajRvqiRA8QsenbcooctK6d6Ts6aqZXBA+XbkKthiQg==", "dev": true, "license": "MIT", - "dependencies": { - "yocto-queue": "^0.1.0" + "bin": { + "mime": "cli.js" }, "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">=4.0.0" } }, - "node_modules/jest-changed-files/node_modules/yocto-queue": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", - "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", - "dev": true, + "node_modules/mime-db": { + "version": "1.54.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.54.0.tgz", + "integrity": "sha512-aU5EJuIN2WDemCcAp2vFBfp/m4EAhWJnUNSSw0ixs7/kXbd6Pg64EmwJkNdFhB8aWt1sH2CTXrLxo/iAGV3oPQ==", "license": "MIT", "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">= 0.6" } }, - "node_modules/jest-circus": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-circus/-/jest-circus-29.7.0.tgz", - "integrity": "sha512-3E1nCMgipcTkCocFwM90XXQab9bS+GMsjdpmPrlelaxwD93Ad8iVEjX/vvHPdLPnFf+L40u+5+iutRdA1N9myw==", - "dev": true, + "node_modules/mime-types": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-3.0.1.tgz", + "integrity": "sha512-xRc4oEhT6eaBpU1XF7AjpOFD+xQmXNB5OVKwp4tqCuBpHLS/ZbBDrc07mYTDqVMg6PfxUjjNp85O6Cd2Z/5HWA==", "license": "MIT", "dependencies": { - "@jest/environment": "^29.7.0", - "@jest/expect": "^29.7.0", - "@jest/test-result": "^29.7.0", - "@jest/types": "^29.6.3", - "@types/node": "*", - "chalk": "^4.0.0", - "co": "^4.6.0", - "dedent": "^1.0.0", - "is-generator-fn": "^2.0.0", - "jest-each": "^29.7.0", - "jest-matcher-utils": "^29.7.0", - "jest-message-util": "^29.7.0", - "jest-runtime": "^29.7.0", - "jest-snapshot": "^29.7.0", - "jest-util": "^29.7.0", - "p-limit": "^3.1.0", - "pretty-format": "^29.7.0", - "pure-rand": "^6.0.0", - "slash": "^3.0.0", - "stack-utils": "^2.0.3" + "mime-db": "^1.54.0" }, "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "node": ">= 0.6" } }, - "node_modules/jest-circus/node_modules/p-limit": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", - "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", - "dev": true, + "node_modules/mimic-fn": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", + "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", "license": "MIT", - "dependencies": { - "yocto-queue": "^0.1.0" - }, "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">=6" } }, - "node_modules/jest-circus/node_modules/yocto-queue": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", - "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", + "node_modules/mimic-function": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/mimic-function/-/mimic-function-5.0.1.tgz", + "integrity": "sha512-VP79XUPxV2CigYP3jWwAUFSku2aKqBH7uTAapFWCBqutsbmDo96KY5o8uh6U+/YSIn5OxJnXp73beVkpqMIGhA==", "dev": true, "license": "MIT", "engines": { - "node": ">=10" + "node": ">=18" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/jest-cli": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-cli/-/jest-cli-29.7.0.tgz", - "integrity": "sha512-OVVobw2IubN/GSYsxETi+gOe7Ka59EFMR/twOU3Jb2GnKKeMGJB5SGUUrEz3SFVmJASUdZUzy83sLNNQ2gZslg==", - "dev": true, + "node_modules/mimic-response": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-4.0.0.tgz", + "integrity": "sha512-e5ISH9xMYU0DzrT+jl8q2ze9D6eWBto+I8CNpe+VI+K2J/F/k3PdkdTdz4wvGVH4NTpo+NRYTVIuMQEMMcsLqg==", "license": "MIT", - "dependencies": { - "@jest/core": "^29.7.0", - "@jest/test-result": "^29.7.0", - "@jest/types": "^29.6.3", - "chalk": "^4.0.0", - "create-jest": "^29.7.0", - "exit": "^0.1.2", - "import-local": "^3.0.2", - "jest-config": "^29.7.0", - "jest-util": "^29.7.0", - "jest-validate": "^29.7.0", - "yargs": "^17.3.1" - }, - "bin": { - "jest": "bin/jest.js" - }, "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - }, - "peerDependencies": { - "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0" + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" }, - "peerDependenciesMeta": { - "node-notifier": { - "optional": true - } + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/jest-config": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-config/-/jest-config-29.7.0.tgz", - "integrity": "sha512-uXbpfeQ7R6TZBqI3/TxCU4q4ttk3u0PJeC+E0zbfSoSjq6bJ7buBPxzQPL0ifrkY4DNu4JUdk0ImlBUYi840eQ==", + "node_modules/min-indent": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/min-indent/-/min-indent-1.0.1.tgz", + "integrity": "sha512-I9jwMn07Sy/IwOj3zVkVik2JTvgpaykDZEigL6Rx6N9LbMywwUSMtxET+7lVoDLLd3O3IXwJwvuuns8UB/HeAg==", "dev": true, "license": "MIT", - "dependencies": { - "@babel/core": "^7.11.6", - "@jest/test-sequencer": "^29.7.0", - "@jest/types": "^29.6.3", - "babel-jest": "^29.7.0", - "chalk": "^4.0.0", - "ci-info": "^3.2.0", - "deepmerge": "^4.2.2", - "glob": "^7.1.3", - "graceful-fs": "^4.2.9", - "jest-circus": "^29.7.0", - "jest-environment-node": "^29.7.0", - "jest-get-type": "^29.6.3", - "jest-regex-util": "^29.6.3", - "jest-resolve": "^29.7.0", - "jest-runner": "^29.7.0", - "jest-util": "^29.7.0", - "jest-validate": "^29.7.0", - "micromatch": "^4.0.4", - "parse-json": "^5.2.0", - "pretty-format": "^29.7.0", - "slash": "^3.0.0", - "strip-json-comments": "^3.1.1" - }, "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - }, - "peerDependencies": { - "@types/node": "*", - "ts-node": ">=9.0.0" - }, - "peerDependenciesMeta": { - "@types/node": { - "optional": true - }, - "ts-node": { - "optional": true - } + "node": ">=4" } }, - "node_modules/jest-config/node_modules/glob": { - "version": "7.2.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", - "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", - "deprecated": "Glob versions prior to v9 are no longer supported", - "dev": true, - "license": "ISC", + "node_modules/mini-css-extract-plugin": { + "version": "2.9.4", + "resolved": "https://registry.npmjs.org/mini-css-extract-plugin/-/mini-css-extract-plugin-2.9.4.tgz", + "integrity": "sha512-ZWYT7ln73Hptxqxk2DxPU9MmapXRhxkJD6tkSR04dnQxm8BGu2hzgKLugK5yySD97u/8yy7Ma7E76k9ZdvtjkQ==", + "license": "MIT", "dependencies": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.1.1", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" + "schema-utils": "^4.0.0", + "tapable": "^2.2.1" }, "engines": { - "node": "*" + "node": ">= 12.13.0" }, "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/jest-diff": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-29.7.0.tgz", - "integrity": "sha512-LMIgiIrhigmPrs03JHpxUh2yISK3vLFPkAodPeo0+BuF7wA2FoQbkEg1u8gBYBThncu7e1oEDUfIXVuTqLRUjw==", - "dev": true, - "license": "MIT", - "dependencies": { - "chalk": "^4.0.0", - "diff-sequences": "^29.6.3", - "jest-get-type": "^29.6.3", - "pretty-format": "^29.7.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/jest-docblock": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-docblock/-/jest-docblock-29.7.0.tgz", - "integrity": "sha512-q617Auw3A612guyaFgsbFeYpNP5t2aoUNLwBUbc/0kD1R4t9ixDbyFTHd1nok4epoVFpr7PmeWHrhvuV3XaJ4g==", - "dev": true, - "license": "MIT", - "dependencies": { - "detect-newline": "^3.0.0" + "type": "opencollective", + "url": "https://opencollective.com/webpack" }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "peerDependencies": { + "webpack": "^5.0.0" } }, - "node_modules/jest-each": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-each/-/jest-each-29.7.0.tgz", - "integrity": "sha512-gns+Er14+ZrEoC5fhOfYCY1LOHHr0TI+rQUHZS8Ttw2l7gl+80eHc/gFf2Ktkw0+SIACDTeWvpFcv3B04VembQ==", - "dev": true, + "node_modules/mini-css-extract-plugin/node_modules/ajv": { + "version": "8.17.1", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.17.1.tgz", + "integrity": "sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g==", "license": "MIT", "dependencies": { - "@jest/types": "^29.6.3", - "chalk": "^4.0.0", - "jest-get-type": "^29.6.3", - "jest-util": "^29.7.0", - "pretty-format": "^29.7.0" + "fast-deep-equal": "^3.1.3", + "fast-uri": "^3.0.1", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2" }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" } }, - "node_modules/jest-environment-jsdom": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-environment-jsdom/-/jest-environment-jsdom-29.7.0.tgz", - "integrity": "sha512-k9iQbsf9OyOfdzWH8HDmrRT0gSIcX+FLNW7IQq94tFX0gynPwqDTW0Ho6iMVNjGz/nb+l/vW3dWM2bbLLpkbXA==", - "dev": true, + "node_modules/mini-css-extract-plugin/node_modules/ajv-keywords": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-5.1.0.tgz", + "integrity": "sha512-YCS/JNFAUyr5vAuhk1DWm1CBxRHW9LbJ2ozWeemrIqpbsqKjHVxYPyi5GC0rjZIT5JxJ3virVTS8wk4i/Z+krw==", "license": "MIT", "dependencies": { - "@jest/environment": "^29.7.0", - "@jest/fake-timers": "^29.7.0", - "@jest/types": "^29.6.3", - "@types/jsdom": "^20.0.0", - "@types/node": "*", - "jest-mock": "^29.7.0", - "jest-util": "^29.7.0", - "jsdom": "^20.0.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "fast-deep-equal": "^3.1.3" }, "peerDependencies": { - "canvas": "^2.5.0" - }, - "peerDependenciesMeta": { - "canvas": { - "optional": true - } - } - }, - "node_modules/jest-environment-jsdom/node_modules/cssstyle": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/cssstyle/-/cssstyle-2.3.0.tgz", - "integrity": "sha512-AZL67abkUzIuvcHqk7c09cezpGNcxUxU4Ioi/05xHk4DQeTkWmGYftIE6ctU6AEt+Gn4n1lDStOtj7FKycP71A==", - "dev": true, - "license": "MIT", - "dependencies": { - "cssom": "~0.3.6" - }, - "engines": { - "node": ">=8" + "ajv": "^8.8.2" } }, - "node_modules/jest-environment-jsdom/node_modules/cssstyle/node_modules/cssom": { - "version": "0.3.8", - "resolved": "https://registry.npmjs.org/cssom/-/cssom-0.3.8.tgz", - "integrity": "sha512-b0tGHbfegbhPJpxpiBPU2sCkigAqtM9O121le6bbOlgyV+NyGyCmVfJ6QW9eRjz8CpNfWEOYBIMIGRYkLwsIYg==", - "dev": true, + "node_modules/mini-css-extract-plugin/node_modules/json-schema-traverse": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", + "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", "license": "MIT" }, - "node_modules/jest-environment-jsdom/node_modules/data-urls": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/data-urls/-/data-urls-3.0.2.tgz", - "integrity": "sha512-Jy/tj3ldjZJo63sVAvg6LHt2mHvl4V6AgRAmNDtLdm7faqtsx+aJG42rsyCo9JCoRVKwPFzKlIPx3DIibwSIaQ==", - "dev": true, + "node_modules/mini-css-extract-plugin/node_modules/schema-utils": { + "version": "4.3.3", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-4.3.3.tgz", + "integrity": "sha512-eflK8wEtyOE6+hsaRVPxvUKYCpRgzLqDTb8krvAsRIwOGlHoSgYLgBXoubGgLd2fT41/OUYdb48v4k4WWHQurA==", "license": "MIT", "dependencies": { - "abab": "^2.0.6", - "whatwg-mimetype": "^3.0.0", - "whatwg-url": "^11.0.0" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/jest-environment-jsdom/node_modules/escodegen": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-2.1.0.tgz", - "integrity": "sha512-2NlIDTwUWJN0mRPQOdtQBzbUHvdGY2P1VXSyU83Q3xKxM7WHX2Ql8dKq782Q9TgQUNOLEzEYu9bzLNj1q88I5w==", - "dev": true, - "license": "BSD-2-Clause", - "dependencies": { - "esprima": "^4.0.1", - "estraverse": "^5.2.0", - "esutils": "^2.0.2" - }, - "bin": { - "escodegen": "bin/escodegen.js", - "esgenerate": "bin/esgenerate.js" + "@types/json-schema": "^7.0.9", + "ajv": "^8.9.0", + "ajv-formats": "^2.1.1", + "ajv-keywords": "^5.1.0" }, "engines": { - "node": ">=6.0" + "node": ">= 10.13.0" }, - "optionalDependencies": { - "source-map": "~0.6.1" + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" } }, - "node_modules/jest-environment-jsdom/node_modules/html-encoding-sniffer": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/html-encoding-sniffer/-/html-encoding-sniffer-3.0.0.tgz", - "integrity": "sha512-oWv4T4yJ52iKrufjnyZPkrN0CH3QnrUqdB6In1g5Fe1mia8GmF36gnfNySxoZtxD5+NmYw1EElVXiBk93UeskA==", - "dev": true, - "license": "MIT", - "dependencies": { - "whatwg-encoding": "^2.0.0" - }, - "engines": { - "node": ">=12" - } + "node_modules/minimalistic-assert": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz", + "integrity": "sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==", + "license": "ISC" }, - "node_modules/jest-environment-jsdom/node_modules/http-proxy-agent": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-5.0.0.tgz", - "integrity": "sha512-n2hY8YdoRE1i7r6M0w9DIw5GgZN0G25P8zLCRQ8rjXtTU3vsNFBI/vWK/UIeE6g5MUUz6avwAPXmL6Fy9D/90w==", - "dev": true, - "license": "MIT", + "node_modules/minimalistic-crypto-utils": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz", + "integrity": "sha512-JIYlbt6g8i5jKfJ3xz7rF0LXmv2TkDxBLUkiBeZ7bAx4GnnNMr8xFpGnOxn6GhTEHx3SjRrZEoU+j04prX1ktg==", + "license": "MIT" + }, + "node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "license": "ISC", "dependencies": { - "@tootallnate/once": "2", - "agent-base": "6", - "debug": "4" + "brace-expansion": "^1.1.7" }, "engines": { - "node": ">= 6" + "node": "*" } }, - "node_modules/jest-environment-jsdom/node_modules/iconv-lite": { - "version": "0.6.3", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", - "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", - "dev": true, + "node_modules/minimist": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz", + "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==", "license": "MIT", - "dependencies": { - "safer-buffer": ">= 2.1.2 < 3.0.0" - }, - "engines": { - "node": ">=0.10.0" + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/jest-environment-jsdom/node_modules/jsdom": { - "version": "20.0.3", - "resolved": "https://registry.npmjs.org/jsdom/-/jsdom-20.0.3.tgz", - "integrity": "sha512-SYhBvTh89tTfCD/CRdSOm13mOBa42iTaTyfyEWBdKcGdPxPtLFBXuHR8XHb33YNYaP+lLbmSvBTsnoesCNJEsQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "abab": "^2.0.6", - "acorn": "^8.8.1", - "acorn-globals": "^7.0.0", - "cssom": "^0.5.0", - "cssstyle": "^2.3.0", - "data-urls": "^3.0.2", - "decimal.js": "^10.4.2", - "domexception": "^4.0.0", - "escodegen": "^2.0.0", - "form-data": "^4.0.0", - "html-encoding-sniffer": "^3.0.0", - "http-proxy-agent": "^5.0.0", - "https-proxy-agent": "^5.0.1", - "is-potential-custom-element-name": "^1.0.1", - "nwsapi": "^2.2.2", - "parse5": "^7.1.1", - "saxes": "^6.0.0", - "symbol-tree": "^3.2.4", - "tough-cookie": "^4.1.2", - "w3c-xmlserializer": "^4.0.0", - "webidl-conversions": "^7.0.0", - "whatwg-encoding": "^2.0.0", - "whatwg-mimetype": "^3.0.0", - "whatwg-url": "^11.0.0", - "ws": "^8.11.0", - "xml-name-validator": "^4.0.0" - }, + "node_modules/minipass": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.2.tgz", + "integrity": "sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==", + "license": "ISC", "engines": { - "node": ">=14" - }, - "peerDependencies": { - "canvas": "^2.5.0" - }, - "peerDependenciesMeta": { - "canvas": { - "optional": true - } + "node": ">=16 || 14 >=14.17" } }, - "node_modules/jest-environment-jsdom/node_modules/source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true, - "license": "BSD-3-Clause", + "node_modules/minizlib": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-2.1.2.tgz", + "integrity": "sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg==", + "license": "MIT", "optional": true, + "dependencies": { + "minipass": "^3.0.0", + "yallist": "^4.0.0" + }, "engines": { - "node": ">=0.10.0" + "node": ">= 8" } }, - "node_modules/jest-environment-jsdom/node_modules/tr46": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/tr46/-/tr46-3.0.0.tgz", - "integrity": "sha512-l7FvfAHlcmulp8kr+flpQZmVwtu7nfRV7NZujtN0OqES8EL4O4e0qqzL0DC5gAvx/ZC/9lk6rhcUwYvkBnBnYA==", - "dev": true, - "license": "MIT", + "node_modules/minizlib/node_modules/minipass": { + "version": "3.3.6", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", + "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", + "license": "ISC", + "optional": true, "dependencies": { - "punycode": "^2.1.1" + "yallist": "^4.0.0" }, "engines": { - "node": ">=12" + "node": ">=8" } }, - "node_modules/jest-environment-jsdom/node_modules/w3c-xmlserializer": { + "node_modules/minizlib/node_modules/yallist": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/w3c-xmlserializer/-/w3c-xmlserializer-4.0.0.tgz", - "integrity": "sha512-d+BFHzbiCx6zGfz0HyQ6Rg69w9k19nviJspaj4yNscGjrHu94sVP+aRm75yEbCh+r2/yR+7q6hux9LVtbuTGBw==", - "dev": true, + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "license": "ISC", + "optional": true + }, + "node_modules/mkdirp": { + "version": "0.5.6", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.6.tgz", + "integrity": "sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==", "license": "MIT", "dependencies": { - "xml-name-validator": "^4.0.0" + "minimist": "^1.2.6" }, - "engines": { - "node": ">=14" + "bin": { + "mkdirp": "bin/cmd.js" } }, - "node_modules/jest-environment-jsdom/node_modules/whatwg-encoding": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/whatwg-encoding/-/whatwg-encoding-2.0.0.tgz", - "integrity": "sha512-p41ogyeMUrw3jWclHWTQg1k05DSVXPLcVxRTYsXUk+ZooOCZLcoYgPZ/HL/D/N+uQPOtcp1me1WhBEaX02mhWg==", + "node_modules/mkdirp-classic": { + "version": "0.5.3", + "resolved": "https://registry.npmjs.org/mkdirp-classic/-/mkdirp-classic-0.5.3.tgz", + "integrity": "sha512-gKLcREMhtuZRwRAfqP3RFW+TK4JqApVBtOIftVgjuABpAtpxhPGaDcfvbhNvD0B8iD1oUr/txX35NjcaY6Ns/A==", "dev": true, + "license": "MIT" + }, + "node_modules/mlly": { + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/mlly/-/mlly-1.8.0.tgz", + "integrity": "sha512-l8D9ODSRWLe2KHJSifWGwBqpTZXIXTeo8mlKjY+E2HAakaTeNpqAyBZ8GSqLzHgw4XmHmC8whvpjJNMbFZN7/g==", "license": "MIT", "dependencies": { - "iconv-lite": "0.6.3" - }, - "engines": { - "node": ">=12" + "acorn": "^8.15.0", + "pathe": "^2.0.3", + "pkg-types": "^1.3.1", + "ufo": "^1.6.1" } }, - "node_modules/jest-environment-jsdom/node_modules/whatwg-mimetype": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/whatwg-mimetype/-/whatwg-mimetype-3.0.0.tgz", - "integrity": "sha512-nt+N2dzIutVRxARx1nghPKGv1xHikU7HKdfafKkLNLindmPU/ch3U31NOCGGA/dmPcmb1VlofO0vnKAcsm0o/Q==", + "node_modules/mlly/node_modules/pathe": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/pathe/-/pathe-2.0.3.tgz", + "integrity": "sha512-WUjGcAqP1gQacoQe+OBJsFA7Ld4DyXuUIjZ5cc75cLHvJ7dtNsTugphxIADwspS+AraAUePCKrSVtPLFj/F88w==", + "license": "MIT" + }, + "node_modules/mnemonist": { + "version": "0.38.5", + "resolved": "https://registry.npmjs.org/mnemonist/-/mnemonist-0.38.5.tgz", + "integrity": "sha512-bZTFT5rrPKtPJxj8KSV0WkPyNxl72vQepqqVUAW2ARUpUSF2qXMB6jZj7hW5/k7C1rtpzqbD/IIbJwLXUjCHeg==", "dev": true, "license": "MIT", - "engines": { - "node": ">=12" + "dependencies": { + "obliterator": "^2.0.0" } }, - "node_modules/jest-environment-jsdom/node_modules/whatwg-url": { - "version": "11.0.0", - "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-11.0.0.tgz", - "integrity": "sha512-RKT8HExMpoYx4igMiVMY83lN6UeITKJlBQ+vR/8ZJ8OCdSiN3RwCq+9gH0+Xzj0+5IrM6i4j/6LuvzbZIQgEcQ==", + "node_modules/mocha": { + "version": "10.8.2", + "resolved": "https://registry.npmjs.org/mocha/-/mocha-10.8.2.tgz", + "integrity": "sha512-VZlYo/WE8t1tstuRmqgeyBgCbJc/lEdopaa+axcKzTBJ+UIdlAB9XnmvTCAH4pwR4ElNInaedhEBmZD8iCSVEg==", "dev": true, "license": "MIT", "dependencies": { - "tr46": "^3.0.0", - "webidl-conversions": "^7.0.0" + "ansi-colors": "^4.1.3", + "browser-stdout": "^1.3.1", + "chokidar": "^3.5.3", + "debug": "^4.3.5", + "diff": "^5.2.0", + "escape-string-regexp": "^4.0.0", + "find-up": "^5.0.0", + "glob": "^8.1.0", + "he": "^1.2.0", + "js-yaml": "^4.1.0", + "log-symbols": "^4.1.0", + "minimatch": "^5.1.6", + "ms": "^2.1.3", + "serialize-javascript": "^6.0.2", + "strip-json-comments": "^3.1.1", + "supports-color": "^8.1.1", + "workerpool": "^6.5.1", + "yargs": "^16.2.0", + "yargs-parser": "^20.2.9", + "yargs-unparser": "^2.0.0" + }, + "bin": { + "_mocha": "bin/_mocha", + "mocha": "bin/mocha.js" }, "engines": { - "node": ">=12" + "node": ">= 14.0.0" } }, - "node_modules/jest-environment-jsdom/node_modules/xml-name-validator": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/xml-name-validator/-/xml-name-validator-4.0.0.tgz", - "integrity": "sha512-ICP2e+jsHvAj2E2lIHxa5tjXRlKDJo4IdvPvCXbXQGdzSfmSpNVyIKMvoZHjDY9DP0zV17iI85o90vRFXNccRw==", + "node_modules/mocha/node_modules/brace-expansion": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.2.tgz", + "integrity": "sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==", "dev": true, - "license": "Apache-2.0", - "engines": { - "node": ">=12" + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0" } }, - "node_modules/jest-environment-node": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-environment-node/-/jest-environment-node-29.7.0.tgz", - "integrity": "sha512-DOSwCRqXirTOyheM+4d5YZOrWcdu0LNZ87ewUoywbcb2XR4wKgqiG8vNeYwhjFMbEkfju7wx2GYH0P2gevGvFw==", - "license": "MIT", + "node_modules/mocha/node_modules/cliui": { + "version": "7.0.4", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz", + "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==", + "dev": true, + "license": "ISC", "dependencies": { - "@jest/environment": "^29.7.0", - "@jest/fake-timers": "^29.7.0", - "@jest/types": "^29.6.3", - "@types/node": "*", - "jest-mock": "^29.7.0", - "jest-util": "^29.7.0" + "string-width": "^4.2.0", + "strip-ansi": "^6.0.0", + "wrap-ansi": "^7.0.0" + } + }, + "node_modules/mocha/node_modules/glob": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/glob/-/glob-8.1.0.tgz", + "integrity": "sha512-r8hpEjiQEYlF2QU0df3dS+nxxSIreXQS1qRhMJM0Q5NDdR386C7jb7Hwwod8Fgiuex+k0GFjgft18yvxm5XoCQ==", + "deprecated": "Glob versions prior to v9 are no longer supported", + "dev": true, + "license": "ISC", + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^5.0.1", + "once": "^1.3.0" }, "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/jest-get-type": { - "version": "29.6.3", - "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-29.6.3.tgz", - "integrity": "sha512-zrteXnqYxfQh7l5FHyL38jL39di8H8rHoecLH3JNxH3BwOrBsNeabdap5e0I23lD4HHI8W5VFBZqG4Eaq5LNcw==", - "license": "MIT", + "node_modules/mocha/node_modules/minimatch": { + "version": "5.1.6", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.6.tgz", + "integrity": "sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==", + "dev": true, + "license": "ISC", + "dependencies": { + "brace-expansion": "^2.0.1" + }, "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "node": ">=10" } }, - "node_modules/jest-haste-map": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-29.7.0.tgz", - "integrity": "sha512-fP8u2pyfqx0K1rGn1R9pyE0/KTn+G7PxktWidOBTqFPLYX0b9ksaMFkhK5vrS3DVun09pckLdlx90QthlW7AmA==", + "node_modules/mocha/node_modules/supports-color": { + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", + "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", + "dev": true, "license": "MIT", "dependencies": { - "@jest/types": "^29.6.3", - "@types/graceful-fs": "^4.1.3", - "@types/node": "*", - "anymatch": "^3.0.3", - "fb-watchman": "^2.0.0", - "graceful-fs": "^4.2.9", - "jest-regex-util": "^29.6.3", - "jest-util": "^29.7.0", - "jest-worker": "^29.7.0", - "micromatch": "^4.0.4", - "walker": "^1.0.8" + "has-flag": "^4.0.0" }, "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "node": ">=10" }, - "optionalDependencies": { - "fsevents": "^2.3.2" + "funding": { + "url": "https://github.com/chalk/supports-color?sponsor=1" } }, - "node_modules/jest-leak-detector": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-leak-detector/-/jest-leak-detector-29.7.0.tgz", - "integrity": "sha512-kYA8IJcSYtST2BY9I+SMC32nDpBT3J2NvWJx8+JCuCdl/CR1I4EKUJROiP8XtCcxqgTTBGJNdbB1A8XRKbTetw==", + "node_modules/mocha/node_modules/yargs": { + "version": "16.2.0", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz", + "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==", "dev": true, "license": "MIT", "dependencies": { - "jest-get-type": "^29.6.3", - "pretty-format": "^29.7.0" + "cliui": "^7.0.2", + "escalade": "^3.1.1", + "get-caller-file": "^2.0.5", + "require-directory": "^2.1.1", + "string-width": "^4.2.0", + "y18n": "^5.0.5", + "yargs-parser": "^20.2.2" }, "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "node": ">=10" } }, - "node_modules/jest-matcher-utils": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-29.7.0.tgz", - "integrity": "sha512-sBkD+Xi9DtcChsI3L3u0+N0opgPYnCRPtGcQYrgXmR+hmt/fYfWAL0xRXYU8eWOdfuLgBe0YCW3AFtnRLagq/g==", + "node_modules/mocha/node_modules/yargs-parser": { + "version": "20.2.9", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.9.tgz", + "integrity": "sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==", "dev": true, - "license": "MIT", - "dependencies": { - "chalk": "^4.0.0", - "jest-diff": "^29.7.0", - "jest-get-type": "^29.6.3", - "pretty-format": "^29.7.0" - }, + "license": "ISC", "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "node": ">=10" } }, - "node_modules/jest-message-util": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-29.7.0.tgz", - "integrity": "sha512-GBEV4GRADeP+qtB2+6u61stea8mGcOT4mCtrYISZwfu9/ISHFJ/5zOMXYbpBE9RsS5+Gb63DW4FgmnKJ79Kf6w==", + "node_modules/moment": { + "version": "2.30.1", + "resolved": "https://registry.npmjs.org/moment/-/moment-2.30.1.tgz", + "integrity": "sha512-uEmtNhbDOrWPFS+hdjFCBfy9f2YoyzRpwcl+DqpC6taX21FzsTLQVbMV/W7PzNSX6x/bhC1zA3c2UQ5NzH6how==", "license": "MIT", - "dependencies": { - "@babel/code-frame": "^7.12.13", - "@jest/types": "^29.6.3", - "@types/stack-utils": "^2.0.0", - "chalk": "^4.0.0", - "graceful-fs": "^4.2.9", - "micromatch": "^4.0.4", - "pretty-format": "^29.7.0", - "slash": "^3.0.0", - "stack-utils": "^2.0.3" - }, "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "node": "*" } }, - "node_modules/jest-mock": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-mock/-/jest-mock-29.7.0.tgz", - "integrity": "sha512-ITOMZn+UkYS4ZFh83xYAOzWStloNzJFO2s8DWrE4lhtGD+AorgnbkiKERe4wQVBydIGPx059g6riW5Btp6Llnw==", + "node_modules/motion": { + "version": "10.16.2", + "resolved": "https://registry.npmjs.org/motion/-/motion-10.16.2.tgz", + "integrity": "sha512-p+PurYqfUdcJZvtnmAqu5fJgV2kR0uLFQuBKtLeFVTrYEVllI99tiOTSefVNYuip9ELTEkepIIDftNdze76NAQ==", "license": "MIT", "dependencies": { - "@jest/types": "^29.6.3", - "@types/node": "*", - "jest-util": "^29.7.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "@motionone/animation": "^10.15.1", + "@motionone/dom": "^10.16.2", + "@motionone/svelte": "^10.16.2", + "@motionone/types": "^10.15.1", + "@motionone/utils": "^10.15.1", + "@motionone/vue": "^10.16.2" } }, - "node_modules/jest-pnp-resolver": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/jest-pnp-resolver/-/jest-pnp-resolver-1.2.3.tgz", - "integrity": "sha512-+3NpwQEnRoIBtx4fyhblQDPgJI0H1IEIkX7ShLUjPGA7TtUTvI1oiKi3SR4oBR0hQhQR80l4WAe5RrXBwWMA8w==", + "node_modules/mri": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/mri/-/mri-1.2.0.tgz", + "integrity": "sha512-tzzskb3bG8LvYGFF/mDTpq3jpI6Q9wc3LEmBaghu+DdCssd1FakN7Bc0hVNmEyGq1bq3RgfkCb3cmQLpNPOroA==", "dev": true, "license": "MIT", "engines": { - "node": ">=6" - }, - "peerDependencies": { - "jest-resolve": "*" - }, - "peerDependenciesMeta": { - "jest-resolve": { - "optional": true - } + "node": ">=4" } }, - "node_modules/jest-regex-util": { - "version": "29.6.3", - "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-29.6.3.tgz", - "integrity": "sha512-KJJBsRCyyLNWCNBOvZyRDnAIfUiRJ8v+hOBQYGn8gDyF3UegwiP4gwRR3/SDa42g1YbVycTidUF3rKjyLFDWbg==", + "node_modules/mrmime": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/mrmime/-/mrmime-2.0.1.tgz", + "integrity": "sha512-Y3wQdFg2Va6etvQ5I82yUhGdsKrcYox6p7FfL1LbK2J4V01F9TGlepTIhnK24t7koZibmg82KGglhA1XK5IsLQ==", "license": "MIT", "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "node": ">=10" } }, - "node_modules/jest-resolve": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-resolve/-/jest-resolve-29.7.0.tgz", - "integrity": "sha512-IOVhZSrg+UvVAshDSDtHyFCCBUl/Q3AAJv8iZ6ZjnZ74xzvwuzLXid9IIIPgTnY62SJjfuupMKZsZQRsCvxEgA==", - "dev": true, + "node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "license": "MIT" + }, + "node_modules/multer": { + "version": "1.4.4-lts.1", + "resolved": "https://registry.npmjs.org/multer/-/multer-1.4.4-lts.1.tgz", + "integrity": "sha512-WeSGziVj6+Z2/MwQo3GvqzgR+9Uc+qt8SwHKh3gvNPiISKfsMfG4SvCOFYlxxgkXt7yIV2i1yczehm0EOKIxIg==", + "deprecated": "Multer 1.x is impacted by a number of vulnerabilities, which have been patched in 2.x. You should upgrade to the latest 2.x version.", "license": "MIT", "dependencies": { - "chalk": "^4.0.0", - "graceful-fs": "^4.2.9", - "jest-haste-map": "^29.7.0", - "jest-pnp-resolver": "^1.2.2", - "jest-util": "^29.7.0", - "jest-validate": "^29.7.0", - "resolve": "^1.20.0", - "resolve.exports": "^2.0.0", - "slash": "^3.0.0" + "append-field": "^1.0.0", + "busboy": "^1.0.0", + "concat-stream": "^1.5.2", + "mkdirp": "^0.5.4", + "object-assign": "^4.1.1", + "type-is": "^1.6.4", + "xtend": "^4.0.0" }, "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "node": ">= 6.0.0" } }, - "node_modules/jest-resolve-dependencies": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-resolve-dependencies/-/jest-resolve-dependencies-29.7.0.tgz", - "integrity": "sha512-un0zD/6qxJ+S0et7WxeI3H5XSe9lTBBR7bOHCHXkKR6luG5mwDDlIzVQ0V5cZCuoTgEdcdwzTghYkTWfubi+nA==", - "dev": true, + "node_modules/multibase": { + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/multibase/-/multibase-4.0.6.tgz", + "integrity": "sha512-x23pDe5+svdLz/k5JPGCVdfn7Q5mZVMBETiC+ORfO+sor9Sgs0smJzAjfTbM5tckeCqnaUuMYoz+k3RXMmJClQ==", + "deprecated": "This module has been superseded by the multiformats module", "license": "MIT", "dependencies": { - "jest-regex-util": "^29.6.3", - "jest-snapshot": "^29.7.0" + "@multiformats/base-x": "^4.0.1" }, "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "node": ">=12.0.0", + "npm": ">=6.0.0" } }, - "node_modules/jest-runner": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-runner/-/jest-runner-29.7.0.tgz", - "integrity": "sha512-fsc4N6cPCAahybGBfTRcq5wFR6fpLznMg47sY5aDpsoejOcVYFb07AHuSnR0liMcPTgBsA3ZJL6kFOjPdoNipQ==", - "dev": true, + "node_modules/multicast-dns": { + "version": "7.2.5", + "resolved": "https://registry.npmjs.org/multicast-dns/-/multicast-dns-7.2.5.tgz", + "integrity": "sha512-2eznPJP8z2BFLX50tf0LuODrpINqP1RVIm/CObbTcBRITQgmC/TjcREF1NeTBzIcR5XO/ukWo+YHOjBbFwIupg==", "license": "MIT", "dependencies": { - "@jest/console": "^29.7.0", - "@jest/environment": "^29.7.0", - "@jest/test-result": "^29.7.0", - "@jest/transform": "^29.7.0", - "@jest/types": "^29.6.3", - "@types/node": "*", - "chalk": "^4.0.0", - "emittery": "^0.13.1", - "graceful-fs": "^4.2.9", - "jest-docblock": "^29.7.0", - "jest-environment-node": "^29.7.0", - "jest-haste-map": "^29.7.0", - "jest-leak-detector": "^29.7.0", - "jest-message-util": "^29.7.0", - "jest-resolve": "^29.7.0", - "jest-runtime": "^29.7.0", - "jest-util": "^29.7.0", - "jest-watcher": "^29.7.0", - "jest-worker": "^29.7.0", - "p-limit": "^3.1.0", - "source-map-support": "0.5.13" + "dns-packet": "^5.2.2", + "thunky": "^1.0.2" }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "bin": { + "multicast-dns": "cli.js" } }, - "node_modules/jest-runner/node_modules/p-limit": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", - "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", - "dev": true, + "node_modules/multicodec": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/multicodec/-/multicodec-3.2.1.tgz", + "integrity": "sha512-+expTPftro8VAW8kfvcuNNNBgb9gPeNYV9dn+z1kJRWF2vih+/S79f2RVeIwmrJBUJ6NT9IUPWnZDQvegEh5pw==", + "deprecated": "This module has been superseded by the multiformats module", "license": "MIT", "dependencies": { - "yocto-queue": "^0.1.0" - }, + "uint8arrays": "^3.0.0", + "varint": "^6.0.0" + } + }, + "node_modules/multiformats": { + "version": "13.4.1", + "resolved": "https://registry.npmjs.org/multiformats/-/multiformats-13.4.1.tgz", + "integrity": "sha512-VqO6OSvLrFVAYYjgsr8tyv62/rCQhPgsZUXLTqoFLSgdkgiUYKYeArbt1uWLlEpkjxQe+P0+sHlbPEte1Bi06Q==", + "license": "Apache-2.0 OR MIT" + }, + "node_modules/mute-stream": { + "version": "0.0.8", + "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.8.tgz", + "integrity": "sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA==", + "license": "ISC" + }, + "node_modules/mylas": { + "version": "2.1.13", + "resolved": "https://registry.npmjs.org/mylas/-/mylas-2.1.13.tgz", + "integrity": "sha512-+MrqnJRtxdF+xngFfUUkIMQrUUL0KsxbADUkn23Z/4ibGg192Q+z+CQyiYwvWTsYjJygmMR8+w3ZDa98Zh6ESg==", + "dev": true, + "license": "MIT", "engines": { - "node": ">=10" + "node": ">=12.0.0" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "type": "github", + "url": "https://github.com/sponsors/raouldeheer" } }, - "node_modules/jest-runner/node_modules/source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true, - "license": "BSD-3-Clause", - "engines": { - "node": ">=0.10.0" + "node_modules/named-urls": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/named-urls/-/named-urls-2.0.1.tgz", + "integrity": "sha512-e/WeLA52FeLZpWt5JcpYp4fZqESBxoNuyJB3LQljHqNPNt0ow1t8QOTFEIeOZf+X+bJOLIXCPCnmyPZnBV8sMg==", + "license": "MIT", + "dependencies": { + "path-to-regexp": "^6.1.0" } }, - "node_modules/jest-runner/node_modules/source-map-support": { - "version": "0.5.13", - "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.13.tgz", - "integrity": "sha512-SHSKFHadjVA5oR4PPqhtAVdcBWwRYVd6g6cAXnIbRiIwc2EhPrTuKUBdSLvlEKyIP3GCf89fltvcZiP9MMFA1w==", + "node_modules/named-urls/node_modules/path-to-regexp": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-6.3.0.tgz", + "integrity": "sha512-Yhpw4T9C6hPpgPeA28us07OJeqZ5EzQTkbfwuhsUg0c237RomFoETJgmp2sa3F/41gfLE6G5cqcYwznmeEeOlQ==", + "license": "MIT" + }, + "node_modules/nan": { + "version": "2.23.0", + "resolved": "https://registry.npmjs.org/nan/-/nan-2.23.0.tgz", + "integrity": "sha512-1UxuyYGdoQHcGg87Lkqm3FzefucTa0NAiOcuRsDmysep3c1LVCRK2krrUDafMWtjSG04htvAmvg96+SDknOmgQ==", "dev": true, "license": "MIT", - "dependencies": { - "buffer-from": "^1.0.0", - "source-map": "^0.6.0" + "optional": true + }, + "node_modules/nanoid": { + "version": "3.3.11", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.11.tgz", + "integrity": "sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "bin": { + "nanoid": "bin/nanoid.cjs" + }, + "engines": { + "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" } }, - "node_modules/jest-runner/node_modules/yocto-queue": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", - "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", + "node_modules/natural-compare": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", + "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==", "dev": true, + "license": "MIT" + }, + "node_modules/negotiator": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-1.0.0.tgz", + "integrity": "sha512-8Ofs/AUQh8MaEcrlq5xOX0CQ9ypTF5dl78mjlMNfOK08fzpgTHQRQPBxcPlEtIw0yRpws+Zo/3r+5WRby7u3Gg==", "license": "MIT", "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">= 0.6" } }, - "node_modules/jest-runtime": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-runtime/-/jest-runtime-29.7.0.tgz", - "integrity": "sha512-gUnLjgwdGqW7B4LvOIkbKs9WGbn+QLqRQQ9juC6HndeDiezIwhDP+mhMwHWCEcfQ5RUXa6OPnFF8BJh5xegwwQ==", - "dev": true, - "license": "MIT", + "node_modules/neo-async": { + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz", + "integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==", + "license": "MIT" + }, + "node_modules/neon-cli": { + "version": "0.10.1", + "resolved": "https://registry.npmjs.org/neon-cli/-/neon-cli-0.10.1.tgz", + "integrity": "sha512-kOd9ELaYETe1J1nBEOYD7koAZVj6xR9TGwOPccAsWmwL5amkaXXXwXHCUHkBAWujlgSZY5f2pT+pFGkzoHExYQ==", + "license": "SEE LICENSE IN LICENSE-*", + "optional": true, "dependencies": { - "@jest/environment": "^29.7.0", - "@jest/fake-timers": "^29.7.0", - "@jest/globals": "^29.7.0", - "@jest/source-map": "^29.6.3", - "@jest/test-result": "^29.7.0", - "@jest/transform": "^29.7.0", - "@jest/types": "^29.6.3", - "@types/node": "*", - "chalk": "^4.0.0", - "cjs-module-lexer": "^1.0.0", - "collect-v8-coverage": "^1.0.0", - "glob": "^7.1.3", - "graceful-fs": "^4.2.9", - "jest-haste-map": "^29.7.0", - "jest-message-util": "^29.7.0", - "jest-mock": "^29.7.0", - "jest-regex-util": "^29.6.3", - "jest-resolve": "^29.7.0", - "jest-snapshot": "^29.7.0", - "jest-util": "^29.7.0", - "slash": "^3.0.0", - "strip-bom": "^4.0.0" + "chalk": "^4.1.0", + "command-line-args": "^5.1.1", + "command-line-commands": "^3.0.1", + "command-line-usage": "^6.1.0", + "git-config": "0.0.7", + "handlebars": "^4.7.6", + "inquirer": "^7.3.3", + "make-promises-safe": "^5.1.0", + "rimraf": "^3.0.2", + "semver": "^7.3.2", + "toml": "^3.0.0", + "ts-typed-json": "^0.3.2", + "validate-npm-package-license": "^3.0.4", + "validate-npm-package-name": "^3.0.0" + }, + "bin": { + "neon": "bin/cli.js" }, "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "node": ">=8" } }, - "node_modules/jest-runtime/node_modules/glob": { + "node_modules/neon-cli/node_modules/glob": { "version": "7.2.3", "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", "deprecated": "Glob versions prior to v9 are no longer supported", - "dev": true, "license": "ISC", + "optional": true, "dependencies": { "fs.realpath": "^1.0.0", "inflight": "^1.0.4", @@ -31778,1632 +49361,1376 @@ "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/jest-snapshot": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-snapshot/-/jest-snapshot-29.7.0.tgz", - "integrity": "sha512-Rm0BMWtxBcioHr1/OX5YCP8Uov4riHvKPknOGs804Zg9JGZgmIBkbtlxJC/7Z4msKYVbIJtfU+tKb8xlYNfdkw==", - "dev": true, + "node_modules/neon-cli/node_modules/inquirer": { + "version": "7.3.3", + "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-7.3.3.tgz", + "integrity": "sha512-JG3eIAj5V9CwcGvuOmoo6LB9kbAYT8HXffUl6memuszlwDC/qvFAJw49XJ5NROSFNPxp3iQg1GqkFhaY/CR0IA==", "license": "MIT", + "optional": true, "dependencies": { - "@babel/core": "^7.11.6", - "@babel/generator": "^7.7.2", - "@babel/plugin-syntax-jsx": "^7.7.2", - "@babel/plugin-syntax-typescript": "^7.7.2", - "@babel/types": "^7.3.3", - "@jest/expect-utils": "^29.7.0", - "@jest/transform": "^29.7.0", - "@jest/types": "^29.6.3", - "babel-preset-current-node-syntax": "^1.0.0", - "chalk": "^4.0.0", - "expect": "^29.7.0", - "graceful-fs": "^4.2.9", - "jest-diff": "^29.7.0", - "jest-get-type": "^29.6.3", - "jest-matcher-utils": "^29.7.0", - "jest-message-util": "^29.7.0", - "jest-util": "^29.7.0", - "natural-compare": "^1.4.0", - "pretty-format": "^29.7.0", - "semver": "^7.5.3" + "ansi-escapes": "^4.2.1", + "chalk": "^4.1.0", + "cli-cursor": "^3.1.0", + "cli-width": "^3.0.0", + "external-editor": "^3.0.3", + "figures": "^3.0.0", + "lodash": "^4.17.19", + "mute-stream": "0.0.8", + "run-async": "^2.4.0", + "rxjs": "^6.6.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0", + "through": "^2.3.6" }, "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "node": ">=8.0.0" } }, - "node_modules/jest-snapshot/node_modules/semver": { - "version": "7.7.2", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.2.tgz", - "integrity": "sha512-RF0Fw+rO5AMf9MAyaRXI4AV0Ulj5lMHqVxxdSgiVbixSCXoEmmX/jk0CuJw4+3SqroYO9VoUh+HcuJivvtJemA==", - "dev": true, + "node_modules/neon-cli/node_modules/rimraf": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", + "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", + "deprecated": "Rimraf versions prior to v4 are no longer supported", "license": "ISC", - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/jest-util": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-29.7.0.tgz", - "integrity": "sha512-z6EbKajIpqGKU56y5KBUgy1dt1ihhQJgWzUlZHArA/+X2ad7Cb5iF+AK1EWVL/Bo7Rz9uurpqw6SiBCefUbCGA==", - "license": "MIT", + "optional": true, "dependencies": { - "@jest/types": "^29.6.3", - "@types/node": "*", - "chalk": "^4.0.0", - "ci-info": "^3.2.0", - "graceful-fs": "^4.2.9", - "picomatch": "^2.2.3" + "glob": "^7.1.3" }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/jest-util/node_modules/picomatch": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", - "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", - "license": "MIT", - "engines": { - "node": ">=8.6" + "bin": { + "rimraf": "bin.js" }, "funding": { - "url": "https://github.com/sponsors/jonschlinkert" + "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/jest-validate": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-validate/-/jest-validate-29.7.0.tgz", - "integrity": "sha512-ZB7wHqaRGVw/9hST/OuFUReG7M8vKeq0/J2egIGLdvjHCmYqGARhzXmtgi+gVeZ5uXFF219aOc3Ls2yLg27tkw==", - "license": "MIT", + "node_modules/neon-cli/node_modules/rxjs": { + "version": "6.6.7", + "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.6.7.tgz", + "integrity": "sha512-hTdwr+7yYNIT5n4AMYp85KA6yw2Va0FLa3Rguvbpa4W3I5xynaBZo41cM3XM+4Q6fRMj3sBYIR1VAmZMXYJvRQ==", + "license": "Apache-2.0", + "optional": true, "dependencies": { - "@jest/types": "^29.6.3", - "camelcase": "^6.2.0", - "chalk": "^4.0.0", - "jest-get-type": "^29.6.3", - "leven": "^3.1.0", - "pretty-format": "^29.7.0" + "tslib": "^1.9.0" }, "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "npm": ">=2.0.0" } }, - "node_modules/jest-validate/node_modules/camelcase": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz", - "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==", - "license": "MIT", + "node_modules/neon-cli/node_modules/semver": { + "version": "7.7.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.2.tgz", + "integrity": "sha512-RF0Fw+rO5AMf9MAyaRXI4AV0Ulj5lMHqVxxdSgiVbixSCXoEmmX/jk0CuJw4+3SqroYO9VoUh+HcuJivvtJemA==", + "license": "ISC", + "optional": true, + "bin": { + "semver": "bin/semver.js" + }, "engines": { "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/jest-watcher": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-watcher/-/jest-watcher-29.7.0.tgz", - "integrity": "sha512-49Fg7WXkU3Vl2h6LbLtMQ/HyB6rXSIX7SqvBLQmssRBGN9I0PNvPmAmCWSOY6SOvrjhI/F7/bGAv9RtnsPA03g==", + "node_modules/neon-cli/node_modules/tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", + "license": "0BSD", + "optional": true + }, + "node_modules/nice-try": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/nice-try/-/nice-try-1.0.5.tgz", + "integrity": "sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==", "dev": true, - "license": "MIT", - "dependencies": { - "@jest/test-result": "^29.7.0", - "@jest/types": "^29.6.3", - "@types/node": "*", - "ansi-escapes": "^4.2.1", - "chalk": "^4.0.0", - "emittery": "^0.13.1", - "jest-util": "^29.7.0", - "string-length": "^4.0.1" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } + "license": "MIT" }, - "node_modules/jest-worker": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-29.7.0.tgz", - "integrity": "sha512-eIz2msL/EzL9UFTFFx7jBTkeZfku0yUAyZZZmJ93H2TYEiroIx2PQjEXcwYtYl8zXCxb+PAmA2hLIt/6ZEkPHw==", + "node_modules/no-case": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/no-case/-/no-case-3.0.4.tgz", + "integrity": "sha512-fgAN3jGAh+RoxUGZHTSOLJIqUc2wmoBwGR4tbpNAKmmovFoWq0OdRkb0VkldReO2a2iBT/OEulG9XSUc10r3zg==", "license": "MIT", "dependencies": { - "@types/node": "*", - "jest-util": "^29.7.0", - "merge-stream": "^2.0.0", - "supports-color": "^8.0.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "lower-case": "^2.0.2", + "tslib": "^2.0.3" } }, - "node_modules/jest-worker/node_modules/supports-color": { - "version": "8.1.1", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", - "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", + "node_modules/node-abort-controller": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/node-abort-controller/-/node-abort-controller-3.1.1.tgz", + "integrity": "sha512-AGK2yQKIjRuqnc6VkX2Xj5d+QW8xZ87pa1UK6yA6ouUyuxfHuMP6umE5QK7UmTeOAymo+Zx1Fxiuw9rVx8taHQ==", + "license": "MIT" + }, + "node_modules/node-addon-api": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-2.0.2.tgz", + "integrity": "sha512-Ntyt4AIXyaLIuMHF6IOoTakB3K+RWxwtsHNRxllEoA6vPwP9o4866g6YWDLUdnucilZhmkxiHwHr11gAENw+QA==", + "license": "MIT" + }, + "node_modules/node-domexception": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/node-domexception/-/node-domexception-1.0.0.tgz", + "integrity": "sha512-/jKZoMpw0F8GRwl4/eLROPA3cfcXtLApP0QzLmUT/HuPCZWyB7IY9ZrMeKw2O/nFIqPQB3PVM9aYm0F312AXDQ==", + "deprecated": "Use your platform's native DOMException instead", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/jimmywarting" + }, + { + "type": "github", + "url": "https://paypal.me/jimmywarting" + } + ], "license": "MIT", - "dependencies": { - "has-flag": "^4.0.0" - }, "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/supports-color?sponsor=1" + "node": ">=10.5.0" } }, - "node_modules/jiti": { - "version": "2.6.1", - "resolved": "https://registry.npmjs.org/jiti/-/jiti-2.6.1.tgz", - "integrity": "sha512-ekilCSN1jwRvIbgeg/57YFh8qQDNbwDb9xT/qu2DAHbFFZUicIl4ygVaAvzveMhMVr3LnpSKTNnwt8PoOfmKhQ==", - "dev": true, + "node_modules/node-emoji": { + "version": "1.11.0", + "resolved": "https://registry.npmjs.org/node-emoji/-/node-emoji-1.11.0.tgz", + "integrity": "sha512-wo2DpQkQp7Sjm2A0cq+sN7EHKO6Sl0ctXeBdFZrL9T9+UywORbufTcTZxom8YqpLQt/FqNMUkOpkZrJVYSKD3A==", "license": "MIT", - "bin": { - "jiti": "lib/jiti-cli.mjs" - } - }, - "node_modules/joi": { - "version": "17.12.2", - "resolved": "https://registry.npmjs.org/joi/-/joi-17.12.2.tgz", - "integrity": "sha512-RonXAIzCiHLc8ss3Ibuz45u28GOsWE1UpfDXLbN/9NKbL4tCJf8TWYVKsoYuuh+sAUt7fsSNpA+r2+TBA6Wjmw==", - "license": "BSD-3-Clause", "dependencies": { - "@hapi/hoek": "^9.3.0", - "@hapi/topo": "^5.1.0", - "@sideway/address": "^4.1.5", - "@sideway/formula": "^3.0.1", - "@sideway/pinpoint": "^2.0.0" - } - }, - "node_modules/joycon": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/joycon/-/joycon-3.1.1.tgz", - "integrity": "sha512-34wB/Y7MW7bzjKRjUKTa46I2Z7eV62Rkhva+KkopW7Qvv/OSWBqvkSY7vusOPrNuZcUG3tApvdVgNB8POj3SPw==", - "license": "MIT", - "engines": { - "node": ">=10" + "lodash": "^4.17.21" } }, - "node_modules/js-base64": { - "version": "3.7.8", - "resolved": "https://registry.npmjs.org/js-base64/-/js-base64-3.7.8.tgz", - "integrity": "sha512-hNngCeKxIUQiEUN3GPJOkz4wF/YvdUdbNL9hsBcMQTkKzboD7T/q3OYOuuPZLUE6dBxSGpwhk5mwuDud7JVAow==", - "license": "BSD-3-Clause" - }, - "node_modules/js-cookie": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/js-cookie/-/js-cookie-2.2.1.tgz", - "integrity": "sha512-HvdH2LzI/EAZcUwA8+0nKNtWHqS+ZmijLA30RwZA0bo7ToCckjK5MkGhjED9KoRcXO6BaGI3I9UIzSA1FKFPOQ==", + "node_modules/node-eval": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/node-eval/-/node-eval-2.0.0.tgz", + "integrity": "sha512-Ap+L9HznXAVeJj3TJ1op6M6bg5xtTq8L5CU/PJxtkhea/DrIxdTknGKIECKd/v/Lgql95iuMAYvIzBNd0pmcMg==", "dev": true, - "license": "MIT" - }, - "node_modules/js-sha3": { - "version": "0.8.0", - "resolved": "https://registry.npmjs.org/js-sha3/-/js-sha3-0.8.0.tgz", - "integrity": "sha512-gF1cRrHhIzNfToc802P800N8PpXS+evLLXfsVpowqmAFR9uwbi89WvXg2QspOmXL8QL86J4T1EpFu+yUkwJY3Q==", - "license": "MIT" - }, - "node_modules/js-tokens": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", - "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", - "license": "MIT" - }, - "node_modules/js-yaml": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", - "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", "license": "MIT", "dependencies": { - "argparse": "^2.0.1" + "path-is-absolute": "1.0.1" }, - "bin": { - "js-yaml": "bin/js-yaml.js" + "engines": { + "node": ">= 4" } }, - "node_modules/jsc-safe-url": { - "version": "0.2.4", - "resolved": "https://registry.npmjs.org/jsc-safe-url/-/jsc-safe-url-0.2.4.tgz", - "integrity": "sha512-0wM3YBWtYePOjfyXQH5MWQ8H7sdk5EXSwZvmSLKk2RboVQ2Bu239jycHDz5J/8Blf3K0Qnoy2b6xD+z10MFB+Q==", - "license": "0BSD", - "peer": true - }, - "node_modules/jsdom": { - "version": "24.0.0", - "resolved": "https://registry.npmjs.org/jsdom/-/jsdom-24.0.0.tgz", - "integrity": "sha512-UDS2NayCvmXSXVP6mpTj+73JnNQadZlr9N68189xib2tx5Mls7swlTNao26IoHv46BZJFvXygyRtyXd1feAk1A==", - "dev": true, + "node_modules/node-fetch": { + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.7.0.tgz", + "integrity": "sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==", "license": "MIT", "dependencies": { - "cssstyle": "^4.0.1", - "data-urls": "^5.0.0", - "decimal.js": "^10.4.3", - "form-data": "^4.0.0", - "html-encoding-sniffer": "^4.0.0", - "http-proxy-agent": "^7.0.0", - "https-proxy-agent": "^7.0.2", - "is-potential-custom-element-name": "^1.0.1", - "nwsapi": "^2.2.7", - "parse5": "^7.1.2", - "rrweb-cssom": "^0.6.0", - "saxes": "^6.0.0", - "symbol-tree": "^3.2.4", - "tough-cookie": "^4.1.3", - "w3c-xmlserializer": "^5.0.0", - "webidl-conversions": "^7.0.0", - "whatwg-encoding": "^3.1.1", - "whatwg-mimetype": "^4.0.0", - "whatwg-url": "^14.0.0", - "ws": "^8.16.0", - "xml-name-validator": "^5.0.0" + "whatwg-url": "^5.0.0" }, "engines": { - "node": ">=18" + "node": "4.x || >=6.0.0" }, "peerDependencies": { - "canvas": "^2.11.2" + "encoding": "^0.1.0" }, "peerDependenciesMeta": { - "canvas": { + "encoding": { "optional": true } } }, - "node_modules/jsdom/node_modules/agent-base": { - "version": "7.1.4", - "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-7.1.4.tgz", - "integrity": "sha512-MnA+YT8fwfJPgBx3m60MNqakm30XOkyIoH1y6huTQvC0PwZG7ki8NacLBcrPbNoo8vEZy7Jpuk7+jMO+CUovTQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 14" - } - }, - "node_modules/jsdom/node_modules/https-proxy-agent": { - "version": "7.0.6", - "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-7.0.6.tgz", - "integrity": "sha512-vK9P5/iUfdl95AI+JVyUuIcVtd4ofvtrOr3HNtM2yxC9bnMbEdp3x01OhQNnjb8IJYi38VlTE3mBXwcfvywuSw==", - "dev": true, - "license": "MIT", - "dependencies": { - "agent-base": "^7.1.2", - "debug": "4" - }, - "engines": { - "node": ">= 14" - } - }, - "node_modules/jsesc": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-3.1.0.tgz", - "integrity": "sha512-/sM3dO2FOzXjKQhJuo0Q173wf2KOo8t4I8vHy6lF9poUp7bKT0/NHE8fPX23PwfhnykfqnC2xRxOnVw5XuGIaA==", - "license": "MIT", - "bin": { - "jsesc": "bin/jsesc" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/json-buffer": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz", - "integrity": "sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==", - "dev": true, + "node_modules/node-fetch-native": { + "version": "1.6.7", + "resolved": "https://registry.npmjs.org/node-fetch-native/-/node-fetch-native-1.6.7.tgz", + "integrity": "sha512-g9yhqoedzIUm0nTnTqAQvueMPVOuIY16bqgAJJC8XOOubYFNwz6IER9qs0Gq2Xd0+CecCKFjtdDTMA4u4xG06Q==", "license": "MIT" }, - "node_modules/json-parse-better-errors": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz", - "integrity": "sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw==", - "dev": true, + "node_modules/node-fetch/node_modules/tr46": { + "version": "0.0.3", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", + "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==", "license": "MIT" }, - "node_modules/json-parse-even-better-errors": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz", - "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==", - "license": "MIT" + "node_modules/node-fetch/node_modules/webidl-conversions": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", + "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==", + "license": "BSD-2-Clause" }, - "node_modules/json-rpc-engine": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/json-rpc-engine/-/json-rpc-engine-6.1.0.tgz", - "integrity": "sha512-NEdLrtrq1jUZyfjkr9OCz9EzCNhnRyWtt1PAnvnhwy6e8XETS0Dtc+ZNCO2gvuAoKsIn2+vCSowXTYE4CkgnAQ==", - "license": "ISC", + "node_modules/node-fetch/node_modules/whatwg-url": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", + "integrity": "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==", + "license": "MIT", "dependencies": { - "@metamask/safe-event-emitter": "^2.0.0", - "eth-rpc-errors": "^4.0.2" - }, - "engines": { - "node": ">=10.0.0" + "tr46": "~0.0.3", + "webidl-conversions": "^3.0.0" } }, - "node_modules/json-rpc-engine/node_modules/@metamask/safe-event-emitter": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/@metamask/safe-event-emitter/-/safe-event-emitter-2.0.0.tgz", - "integrity": "sha512-/kSXhY692qiV1MXu6EeOZvg5nECLclxNXcKCxJ3cXQgYuRymRHpdx/t7JXfsK+JLjwA1e1c1/SBrlQYpusC29Q==", - "license": "ISC" - }, - "node_modules/json-rpc-middleware-stream": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/json-rpc-middleware-stream/-/json-rpc-middleware-stream-4.2.3.tgz", - "integrity": "sha512-4iFb0yffm5vo3eFKDbQgke9o17XBcLQ2c3sONrXSbcOLzP8LTojqo8hRGVgtJShhm5q4ZDSNq039fAx9o65E1w==", - "license": "ISC", - "dependencies": { - "@metamask/safe-event-emitter": "^3.0.0", - "json-rpc-engine": "^6.1.0", - "readable-stream": "^2.3.3" - }, + "node_modules/node-forge": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/node-forge/-/node-forge-1.3.3.tgz", + "integrity": "sha512-rLvcdSyRCyouf6jcOIPe/BgwG/d7hKjzMKOas33/pHEr6gbq18IK9zV7DiPvzsz0oBJPme6qr6H6kGZuI9/DZg==", + "license": "(BSD-3-Clause OR GPL-2.0)", "engines": { - "node": ">=14.0.0" + "node": ">= 6.13.0" + } + }, + "node_modules/node-gyp-build": { + "version": "4.8.4", + "resolved": "https://registry.npmjs.org/node-gyp-build/-/node-gyp-build-4.8.4.tgz", + "integrity": "sha512-LA4ZjwlnUblHVgq0oBF3Jl/6h/Nvs5fzBLwdEF4nuxnFdsfajde4WfxtJr3CaiH+F6ewcIB/q4jQ4UzPyid+CQ==", + "license": "MIT", + "bin": { + "node-gyp-build": "bin.js", + "node-gyp-build-optional": "optional.js", + "node-gyp-build-test": "build-test.js" } }, - "node_modules/json-schema-traverse": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", - "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", + "node_modules/node-int64": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/node-int64/-/node-int64-0.4.0.tgz", + "integrity": "sha512-O5lz91xSOeoXP6DulyHfllpq+Eg00MWitZIbtPfoSEvqIHdl5gfcY6hYzDWnj0qD5tz52PI08u9qUvSVeUBeHw==", "license": "MIT" }, - "node_modules/json-stable-stringify-without-jsonify": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", - "integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==", - "dev": true, + "node_modules/node-mock-http": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/node-mock-http/-/node-mock-http-1.0.3.tgz", + "integrity": "sha512-jN8dK25fsfnMrVsEhluUTPkBFY+6ybu7jSB1n+ri/vOGjJxU8J9CZhpSGkHXSkFjtUhbmoncG/YG9ta5Ludqog==", "license": "MIT" }, - "node_modules/json-stream-stringify": { - "version": "3.1.6", - "resolved": "https://registry.npmjs.org/json-stream-stringify/-/json-stream-stringify-3.1.6.tgz", - "integrity": "sha512-x7fpwxOkbhFCaJDJ8vb1fBY3DdSa4AlITaz+HHILQJzdPMnHEFjxPwVUi1ALIbcIxDE0PNe/0i7frnY8QnBQog==", + "node_modules/node-preload": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/node-preload/-/node-preload-0.2.1.tgz", + "integrity": "sha512-RM5oyBy45cLEoHqCeh+MNuFAxO0vTFBLskvQbOKnEE7YTTSN4tbN8QWDIPQ6L+WvKsB/qLEGpYe2ZZ9d4W9OIQ==", "dev": true, "license": "MIT", - "engines": { - "node": ">=7.10.1" - } - }, - "node_modules/json5": { - "version": "2.2.3", - "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz", - "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==", - "license": "MIT", - "bin": { - "json5": "lib/cli.js" + "dependencies": { + "process-on-spawn": "^1.0.0" }, "engines": { - "node": ">=6" + "node": ">=8" } }, - "node_modules/jsonc-parser": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/jsonc-parser/-/jsonc-parser-3.2.0.tgz", - "integrity": "sha512-gfFQZrcTc8CnKXp6Y4/CBT3fTc0OVuDofpre4aEeEpSBPV5X5v4+Vmx+8snU7RLPrNHPKSgLxGo9YuQzz20o+w==", + "node_modules/node-releases": { + "version": "2.0.27", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.27.tgz", + "integrity": "sha512-nmh3lCkYZ3grZvqcCH+fjmQ7X+H0OeZgP40OierEaAptX4XofMh5kwNbWh7lBduUzCcV/8kZ+NDLCwm2iorIlA==", "license": "MIT" }, - "node_modules/jsonfile": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz", - "integrity": "sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg==", + "node_modules/node-stdlib-browser": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/node-stdlib-browser/-/node-stdlib-browser-1.3.1.tgz", + "integrity": "sha512-X75ZN8DCLftGM5iKwoYLA3rjnrAEs97MkzvSd4q2746Tgpg8b8XWiBGiBG4ZpgcAqBgtgPHTiAc8ZMCvZuikDw==", "dev": true, "license": "MIT", - "optionalDependencies": { - "graceful-fs": "^4.1.6" - } - }, - "node_modules/jsonld": { - "version": "8.3.3", - "resolved": "https://registry.npmjs.org/jsonld/-/jsonld-8.3.3.tgz", - "integrity": "sha512-9YcilrF+dLfg9NTEof/mJLMtbdX1RJ8dbWtJgE00cMOIohb1lIyJl710vFiTaiHTl6ZYODJuBd32xFvUhmv3kg==", - "license": "BSD-3-Clause", "dependencies": { - "@digitalbazaar/http-client": "^3.4.1", - "canonicalize": "^1.0.1", - "lru-cache": "^6.0.0", - "rdf-canonize": "^3.4.0" + "assert": "^2.0.0", + "browser-resolve": "^2.0.0", + "browserify-zlib": "^0.2.0", + "buffer": "^5.7.1", + "console-browserify": "^1.1.0", + "constants-browserify": "^1.0.0", + "create-require": "^1.1.1", + "crypto-browserify": "^3.12.1", + "domain-browser": "4.22.0", + "events": "^3.0.0", + "https-browserify": "^1.0.0", + "isomorphic-timers-promises": "^1.0.1", + "os-browserify": "^0.3.0", + "path-browserify": "^1.0.1", + "pkg-dir": "^5.0.0", + "process": "^0.11.10", + "punycode": "^1.4.1", + "querystring-es3": "^0.2.1", + "readable-stream": "^3.6.0", + "stream-browserify": "^3.0.0", + "stream-http": "^3.2.0", + "string_decoder": "^1.0.0", + "timers-browserify": "^2.0.4", + "tty-browserify": "0.0.1", + "url": "^0.11.4", + "util": "^0.12.4", + "vm-browserify": "^1.0.1" }, "engines": { - "node": ">=14" + "node": ">=10" } }, - "node_modules/jsonld/node_modules/canonicalize": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/canonicalize/-/canonicalize-1.0.8.tgz", - "integrity": "sha512-0CNTVCLZggSh7bc5VkX5WWPWO+cyZbNd07IHIsSXLia/eAq+r836hgk+8BKoEh7949Mda87VUOitx5OddVj64A==", - "license": "Apache-2.0" + "node_modules/node-stdlib-browser/node_modules/buffer": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", + "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT", + "dependencies": { + "base64-js": "^1.3.1", + "ieee754": "^1.1.13" + } }, - "node_modules/jsonld/node_modules/lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", - "license": "ISC", + "node_modules/node-stdlib-browser/node_modules/pkg-dir": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-5.0.0.tgz", + "integrity": "sha512-NPE8TDbzl/3YQYY7CSS228s3g2ollTFnc+Qi3tqmqJp9Vg2ovUpixcJEo2HJScN2Ez+kEaal6y70c0ehqJBJeA==", + "dev": true, + "license": "MIT", "dependencies": { - "yallist": "^4.0.0" + "find-up": "^5.0.0" }, "engines": { "node": ">=10" } }, - "node_modules/jsonld/node_modules/yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", - "license": "ISC" - }, - "node_modules/jsonparse": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/jsonparse/-/jsonparse-1.3.1.tgz", - "integrity": "sha512-POQXvpdL69+CluYsillJ7SUhKvytYjW9vG/GKpnf+xP8UWgYEM/RaMzHHofbALDiKbbP1W8UEYmgGl39WkPZsg==", + "node_modules/node-stdlib-browser/node_modules/punycode": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz", + "integrity": "sha512-jmYNElW7yvO7TV33CjSmvSiE2yco3bV2czu/OzDKdMNVZQWfxCblURLhf+47syQRBntjfLdd/H0egrzIG+oaFQ==", "dev": true, - "engines": [ - "node >= 0.2.0" - ], "license": "MIT" }, - "node_modules/jsonschema": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/jsonschema/-/jsonschema-1.5.0.tgz", - "integrity": "sha512-K+A9hhqbn0f3pJX17Q/7H6yQfD/5OXgdrR5UE12gMXCiN9D5Xq2o5mddV2QEcX/bjla99ASsAAQUyMCCRWAEhw==", + "node_modules/node-stdlib-browser/node_modules/readable-stream": { + "version": "3.6.2", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", + "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", "dev": true, "license": "MIT", + "dependencies": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + }, "engines": { - "node": "*" + "node": ">= 6" } }, - "node_modules/JSONStream": { - "version": "1.3.5", - "resolved": "https://registry.npmjs.org/JSONStream/-/JSONStream-1.3.5.tgz", - "integrity": "sha512-E+iruNOY8VV9s4JEbe1aNEm6MiszPRr/UfcHMz0TQh1BXSxHK+ASV1R6W4HpjBhSeS+54PIsAMCBmwD06LLsqQ==", - "dev": true, - "license": "(MIT OR Apache-2.0)", + "node_modules/nofilter": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/nofilter/-/nofilter-3.1.0.tgz", + "integrity": "sha512-l2NNj07e9afPnhAhvgVrCD/oy2Ai1yfLpuo3EpiO1jFTsB4sFz6oIfAfSZyQzVpkZQ9xS8ZS5g1jCBgq4Hwo0g==", + "license": "MIT", + "engines": { + "node": ">=12.19" + } + }, + "node_modules/nopt": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/nopt/-/nopt-5.0.0.tgz", + "integrity": "sha512-Tbj67rffqceeLpcRXrT7vKAN8CwfPeIBgM7E6iBkmKLV7bEMwpGgYLGv0jACUsECaa/vuxP0IjEont6umdMgtQ==", + "license": "ISC", + "optional": true, "dependencies": { - "jsonparse": "^1.2.0", - "through": ">=2.2.7 <3" + "abbrev": "1" }, "bin": { - "JSONStream": "bin.js" + "nopt": "bin/nopt.js" }, "engines": { - "node": "*" + "node": ">=6" } }, - "node_modules/jsonwebtoken": { - "version": "9.0.0", - "resolved": "https://registry.npmjs.org/jsonwebtoken/-/jsonwebtoken-9.0.0.tgz", - "integrity": "sha512-tuGfYXxkQGDPnLJ7SibiQgVgeDgfbPq2k2ICcbgqW8WxWLBAxKQM/ZCu/IT8SOSwmaYl4dpTFCW5xZv7YbbWUw==", - "license": "MIT", + "node_modules/normalize-package-data": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz", + "integrity": "sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==", + "dev": true, + "license": "BSD-2-Clause", "dependencies": { - "jws": "^3.2.2", - "lodash": "^4.17.21", - "ms": "^2.1.1", - "semver": "^7.3.8" - }, - "engines": { - "node": ">=12", - "npm": ">=6" + "hosted-git-info": "^2.1.4", + "resolve": "^1.10.0", + "semver": "2 || 3 || 4 || 5", + "validate-npm-package-license": "^3.0.1" } }, - "node_modules/jsonwebtoken/node_modules/semver": { - "version": "7.7.2", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.2.tgz", - "integrity": "sha512-RF0Fw+rO5AMf9MAyaRXI4AV0Ulj5lMHqVxxdSgiVbixSCXoEmmX/jk0CuJw4+3SqroYO9VoUh+HcuJivvtJemA==", + "node_modules/normalize-package-data/node_modules/semver": { + "version": "5.7.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz", + "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==", + "dev": true, "license": "ISC", "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" + "semver": "bin/semver" } }, - "node_modules/jsx-ast-utils": { - "version": "3.3.5", - "resolved": "https://registry.npmjs.org/jsx-ast-utils/-/jsx-ast-utils-3.3.5.tgz", - "integrity": "sha512-ZZow9HBI5O6EPgSJLUb8n2NKgmVWTwCvHGwFuJlMjvLFqlGG6pjirPhtdsseaLZjSibD8eegzmYpUZwoIlj2cQ==", - "dev": true, + "node_modules/normalize-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", + "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", "license": "MIT", - "dependencies": { - "array-includes": "^3.1.6", - "array.prototype.flat": "^1.3.1", - "object.assign": "^4.1.4", - "object.values": "^1.1.6" - }, "engines": { - "node": ">=4.0" + "node": ">=0.10.0" } }, - "node_modules/jwa": { - "version": "1.4.2", - "resolved": "https://registry.npmjs.org/jwa/-/jwa-1.4.2.tgz", - "integrity": "sha512-eeH5JO+21J78qMvTIDdBXidBd6nG2kZjg5Ohz/1fpa28Z4CcsWUzJ1ZZyFq/3z3N17aZy+ZuBoHljASbL1WfOw==", + "node_modules/normalize-url": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-8.1.0.tgz", + "integrity": "sha512-X06Mfd/5aKsRHc0O0J5CUedwnPmnDtLF2+nq+KN9KSDlJHkPuh0JUviWjEWMe0SW/9TDdSLVPuk7L5gGTIA1/w==", "license": "MIT", - "dependencies": { - "buffer-equal-constant-time": "^1.0.1", - "ecdsa-sig-formatter": "1.0.11", - "safe-buffer": "^5.0.1" + "engines": { + "node": ">=14.16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/jws": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/jws/-/jws-3.2.2.tgz", - "integrity": "sha512-YHlZCB6lMTllWDtSPHz/ZXTsi8S00usEV6v1tjq8tOUZzw7DpSDWVXjXDre6ed1w/pd495ODpHZYSdkRTsa0HA==", + "node_modules/npm-run-all": { + "version": "4.1.5", + "resolved": "https://registry.npmjs.org/npm-run-all/-/npm-run-all-4.1.5.tgz", + "integrity": "sha512-Oo82gJDAVcaMdi3nuoKFavkIHBRVqQ1qvMb+9LHk/cF4P6B2m8aP04hGf7oL6wZ9BuGwX1onlLhpuoofSyoQDQ==", + "dev": true, "license": "MIT", "dependencies": { - "jwa": "^1.4.1", - "safe-buffer": "^5.0.1" + "ansi-styles": "^3.2.1", + "chalk": "^2.4.1", + "cross-spawn": "^6.0.5", + "memorystream": "^0.3.1", + "minimatch": "^3.0.4", + "pidtree": "^0.3.0", + "read-pkg": "^3.0.0", + "shell-quote": "^1.6.1", + "string.prototype.padend": "^3.0.0" + }, + "bin": { + "npm-run-all": "bin/npm-run-all/index.js", + "run-p": "bin/run-p/index.js", + "run-s": "bin/run-s/index.js" + }, + "engines": { + "node": ">= 4" } }, - "node_modules/keccak": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/keccak/-/keccak-3.0.4.tgz", - "integrity": "sha512-3vKuW0jV8J3XNTzvfyicFR5qvxrSAGl7KIhvgOu5cmWwM7tZRj3fMbj/pfIf4be7aznbc+prBWGjywox/g2Y6Q==", - "hasInstallScript": true, + "node_modules/npm-run-all/node_modules/ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, "license": "MIT", "dependencies": { - "node-addon-api": "^2.0.0", - "node-gyp-build": "^4.2.0", - "readable-stream": "^3.6.0" + "color-convert": "^1.9.0" }, "engines": { - "node": ">=10.0.0" + "node": ">=4" } }, - "node_modules/keccak/node_modules/readable-stream": { - "version": "3.6.2", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", - "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", + "node_modules/npm-run-all/node_modules/chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, "license": "MIT", "dependencies": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" }, "engines": { - "node": ">= 6" + "node": ">=4" } }, - "node_modules/keyv": { - "version": "4.5.4", - "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.5.4.tgz", - "integrity": "sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==", + "node_modules/npm-run-all/node_modules/color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", "dev": true, "license": "MIT", "dependencies": { - "json-buffer": "3.0.1" + "color-name": "1.1.3" } }, - "node_modules/keyvaluestorage-interface": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/keyvaluestorage-interface/-/keyvaluestorage-interface-1.0.0.tgz", - "integrity": "sha512-8t6Q3TclQ4uZynJY9IGr2+SsIGwK9JHcO6ootkHCGA0CrQCRy+VkouYNO2xicET6b9al7QKzpebNow+gkpCL8g==", + "node_modules/npm-run-all/node_modules/color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", + "dev": true, "license": "MIT" }, - "node_modules/kind-of": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", - "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", + "node_modules/npm-run-all/node_modules/cross-spawn": { + "version": "6.0.6", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.6.tgz", + "integrity": "sha512-VqCUuhcd1iB+dsv8gxPttb5iZh/D0iubSP21g36KXdEuf6I5JiioesUVjpCdHV9MZRUfVFlvwtIUyPfxo5trtw==", "dev": true, "license": "MIT", + "dependencies": { + "nice-try": "^1.0.4", + "path-key": "^2.0.1", + "semver": "^5.5.0", + "shebang-command": "^1.2.0", + "which": "^1.2.9" + }, "engines": { - "node": ">=0.10.0" + "node": ">=4.8" } }, - "node_modules/kleur": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/kleur/-/kleur-3.0.3.tgz", - "integrity": "sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==", + "node_modules/npm-run-all/node_modules/escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", "dev": true, "license": "MIT", "engines": { - "node": ">=6" + "node": ">=0.8.0" } }, - "node_modules/klona": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/klona/-/klona-2.0.6.tgz", - "integrity": "sha512-dhG34DXATL5hSxJbIexCft8FChFXtmskoZYnoPWjXQuebWYCNkVeV3KkGegCK9CP1oswI/vQibS2GY7Em/sJJA==", + "node_modules/npm-run-all/node_modules/has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", + "dev": true, "license": "MIT", "engines": { - "node": ">= 8" + "node": ">=4" } }, - "node_modules/kuler": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/kuler/-/kuler-2.0.0.tgz", - "integrity": "sha512-Xq9nH7KlWZmXAtodXDDRE7vs6DU1gTU8zYDHDiWLSip45Egwq3plLHzPn27NgvzL2r1LMPC1vdqh98sQxtqj4A==", - "license": "MIT" - }, - "node_modules/ky": { - "version": "0.33.3", - "resolved": "https://registry.npmjs.org/ky/-/ky-0.33.3.tgz", - "integrity": "sha512-CasD9OCEQSFIam2U8efFK81Yeg8vNMTBUqtMOHlrcWQHqUX3HeCl9Dr31u4toV7emlH8Mymk5+9p0lL6mKb/Xw==", + "node_modules/npm-run-all/node_modules/path-key": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz", + "integrity": "sha512-fEHGKCSmUSDPv4uoj8AlD+joPlq3peND+HRYyxFz4KPw4z926S/b8rIuFs2FYJg3BwsxJf6A9/3eIdLaYC+9Dw==", + "dev": true, "license": "MIT", "engines": { - "node": ">=14.16" - }, - "funding": { - "url": "https://github.com/sindresorhus/ky?sponsor=1" + "node": ">=4" } }, - "node_modules/ky-universal": { - "version": "0.11.0", - "resolved": "https://registry.npmjs.org/ky-universal/-/ky-universal-0.11.0.tgz", - "integrity": "sha512-65KyweaWvk+uKKkCrfAf+xqN2/epw1IJDtlyCPxYffFCMR8u1sp2U65NtWpnozYfZxQ6IUzIlvUcw+hQ82U2Xw==", + "node_modules/npm-run-all/node_modules/pidtree": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/pidtree/-/pidtree-0.3.1.tgz", + "integrity": "sha512-qQbW94hLHEqCg7nhby4yRC7G2+jYHY4Rguc2bjw7Uug4GIJuu1tvf2uHaZv5Q8zdt+WKJ6qK1FOI6amaWUo5FA==", + "dev": true, "license": "MIT", - "dependencies": { - "abort-controller": "^3.0.0", - "node-fetch": "^3.2.10" + "bin": { + "pidtree": "bin/pidtree.js" }, "engines": { - "node": ">=14.16" - }, - "funding": { - "url": "https://github.com/sindresorhus/ky-universal?sponsor=1" - }, - "peerDependencies": { - "ky": ">=0.31.4", - "web-streams-polyfill": ">=3.2.1" - }, - "peerDependenciesMeta": { - "web-streams-polyfill": { - "optional": true - } + "node": ">=0.10" } }, - "node_modules/ky-universal/node_modules/node-fetch": { - "version": "3.3.2", - "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-3.3.2.tgz", - "integrity": "sha512-dRB78srN/l6gqWulah9SrxeYnxeddIG30+GOqK/9OlLVyLg3HPnr6SqOWTWOXKRwC2eGYCkZ59NNuSgvSrpgOA==", + "node_modules/npm-run-all/node_modules/semver": { + "version": "5.7.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz", + "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver" + } + }, + "node_modules/npm-run-all/node_modules/shebang-command": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz", + "integrity": "sha512-EV3L1+UQWGor21OmnvojK36mhg+TyIKDh3iFBKBohr5xeXIhNBcx8oWdgkTEEQ+BEFFYdLRuqMfd5L84N1V5Vg==", + "dev": true, "license": "MIT", "dependencies": { - "data-uri-to-buffer": "^4.0.0", - "fetch-blob": "^3.1.4", - "formdata-polyfill": "^4.0.10" + "shebang-regex": "^1.0.0" }, "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/node-fetch" + "node": ">=0.10.0" } }, - "node_modules/langbase": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/langbase/-/langbase-1.2.3.tgz", - "integrity": "sha512-rhJaursMFuXFB/KzY+7Eztyt7qZEkhz9z9ryl+IQLSvSsjbn61dgFGsxh0tSzA2M+DygW3cXTyYZr/K3SA3OXA==", + "node_modules/npm-run-all/node_modules/shebang-regex": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz", + "integrity": "sha512-wpoSFAxys6b2a2wHZ1XpDSgD7N9iVjg29Ph9uV/uaP9Ex/KXlkTZTeddxDPSYQpgvzKLGJke2UU0AzoGCjNIvQ==", "dev": true, - "license": "Apache-2.0", - "dependencies": { - "dotenv": "^16.4.5", - "openai": "^4.82.0", - "zod": "^3.23.8", - "zod-validation-error": "^3.3.0" - }, + "license": "MIT", "engines": { - "node": ">=18" - }, - "peerDependencies": { - "react": "^18 || ^19" - }, - "peerDependenciesMeta": { - "react": { - "optional": true - } + "node": ">=0.10.0" } }, - "node_modules/latest-version": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/latest-version/-/latest-version-7.0.0.tgz", - "integrity": "sha512-KvNT4XqAMzdcL6ka6Tl3i2lYeFDgXNCuIX+xNx6ZMVR1dFq+idXd9FLKNMOIx0t9mJ9/HudyX4oZWXZQ0UJHeg==", + "node_modules/npm-run-all/node_modules/supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", "dev": true, "license": "MIT", "dependencies": { - "package-json": "^8.1.0" + "has-flag": "^3.0.0" }, "engines": { - "node": ">=14.16" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">=4" } }, - "node_modules/lazystream": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/lazystream/-/lazystream-1.0.1.tgz", - "integrity": "sha512-b94GiNHQNy6JNTrt5w6zNyffMrNkXZb3KTkCZJb2V1xaEGCk093vkZ2jk3tpaeP33/OiXC+WvK9AxUebnf5nbw==", + "node_modules/npm-run-all/node_modules/which": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", + "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", "dev": true, - "license": "MIT", + "license": "ISC", "dependencies": { - "readable-stream": "^2.0.5" + "isexe": "^2.0.0" }, - "engines": { - "node": ">= 0.6.3" + "bin": { + "which": "bin/which" } }, - "node_modules/leven": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/leven/-/leven-3.1.0.tgz", - "integrity": "sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A==", + "node_modules/npm-run-path": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz", + "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==", "license": "MIT", + "dependencies": { + "path-key": "^3.0.0" + }, "engines": { - "node": ">=6" + "node": ">=8" } }, - "node_modules/levn": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", - "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", - "dev": true, - "license": "MIT", + "node_modules/npmlog": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/npmlog/-/npmlog-5.0.1.tgz", + "integrity": "sha512-AqZtDUWOMKs1G/8lwylVjrdYgqA4d9nu8hc+0gzRxlDb1I10+FHBGMXs6aiQHFdCUUlqH99MUMuLfzWDNDtfxw==", + "deprecated": "This package is no longer supported.", + "license": "ISC", + "optional": true, "dependencies": { - "prelude-ls": "^1.2.1", - "type-check": "~0.4.0" - }, - "engines": { - "node": ">= 0.8.0" + "are-we-there-yet": "^2.0.0", + "console-control-strings": "^1.1.0", + "gauge": "^3.0.0", + "set-blocking": "^2.0.0" } }, - "node_modules/libphonenumber-js": { - "version": "1.12.23", - "resolved": "https://registry.npmjs.org/libphonenumber-js/-/libphonenumber-js-1.12.23.tgz", - "integrity": "sha512-RN3q3gImZ91BvRDYjWp7ICz3gRn81mW5L4SW+2afzNCC0I/nkXstBgZThQGTE3S/9q5J90FH4dP+TXx8NhdZKg==", + "node_modules/nprogress": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/nprogress/-/nprogress-0.2.0.tgz", + "integrity": "sha512-I19aIingLgR1fmhftnbWWO3dXc0hSxqHQHQb3H8m+K3TnEn/iSeTZZOyvKXWqQESMwuUVnatlCnZdLBZZt2VSA==", "license": "MIT" }, - "node_modules/lighthouse-logger": { - "version": "1.4.2", - "resolved": "https://registry.npmjs.org/lighthouse-logger/-/lighthouse-logger-1.4.2.tgz", - "integrity": "sha512-gPWxznF6TKmUHrOQjlVo2UbaL2EJ71mb2CCeRs/2qBpi4L/g4LUVc9+3lKQ6DTUZwJswfM7ainGrLO1+fOqa2g==", - "license": "Apache-2.0", - "peer": true, + "node_modules/nth-check": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-2.1.1.tgz", + "integrity": "sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w==", + "license": "BSD-2-Clause", "dependencies": { - "debug": "^2.6.9", - "marky": "^1.2.2" + "boolbase": "^1.0.0" + }, + "funding": { + "url": "https://github.com/fb55/nth-check?sponsor=1" } }, - "node_modules/lighthouse-logger/node_modules/debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "node_modules/null-loader": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/null-loader/-/null-loader-4.0.1.tgz", + "integrity": "sha512-pxqVbi4U6N26lq+LmgIbB5XATP0VdZKOG25DhHi8btMmJJefGArFyDg1yc4U3hWCJbMqSrw0qyrz1UQX+qYXqg==", "license": "MIT", - "peer": true, "dependencies": { - "ms": "2.0.0" + "loader-utils": "^2.0.0", + "schema-utils": "^3.0.0" + }, + "engines": { + "node": ">= 10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "webpack": "^4.0.0 || ^5.0.0" } }, - "node_modules/lighthouse-logger/node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", - "license": "MIT", - "peer": true + "node_modules/nullthrows": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/nullthrows/-/nullthrows-1.1.1.tgz", + "integrity": "sha512-2vPPEi+Z7WqML2jZYddDIfy5Dqb0r2fze2zTxNNknZaFpVHU3mFB3R+DWeJWGVx0ecvttSGlJTI+WG+8Z4cDWw==", + "license": "MIT" }, - "node_modules/lilconfig": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-3.1.3.tgz", - "integrity": "sha512-/vlFKAoH5Cgt3Ie+JLhRbwOsCQePABiU3tJ1egGvyQ+33R/vcwM2Zl2QR/LzjsBeItPt3oSVXapn+m4nQDvpzw==", - "dev": true, + "node_modules/number-to-bn": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/number-to-bn/-/number-to-bn-1.7.0.tgz", + "integrity": "sha512-wsJ9gfSz1/s4ZsJN01lyonwuxA1tml6X1yBDnfpMglypcBRFZZkus26EdPSlqS5GJfYddVZa22p3VNb3z5m5Ig==", "license": "MIT", - "engines": { - "node": ">=14" + "dependencies": { + "bn.js": "4.11.6", + "strip-hex-prefix": "1.0.0" }, - "funding": { - "url": "https://github.com/sponsors/antonk52" + "engines": { + "node": ">=6.5.0", + "npm": ">=3" } }, - "node_modules/lines-and-columns": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz", - "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==", + "node_modules/number-to-bn/node_modules/bn.js": { + "version": "4.11.6", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.6.tgz", + "integrity": "sha512-XWwnNNFCuuSQ0m3r3C4LE3EiORltHd9M05pq6FOlVeiophzRbMo50Sbz1ehl8K3Z+jw9+vmgnXefY1hz8X+2wA==", "license": "MIT" }, - "node_modules/lint-staged": { - "version": "15.5.2", - "resolved": "https://registry.npmjs.org/lint-staged/-/lint-staged-15.5.2.tgz", - "integrity": "sha512-YUSOLq9VeRNAo/CTaVmhGDKG+LBtA8KF1X4K5+ykMSwWST1vDxJRB2kv2COgLb1fvpCo+A/y9A0G0znNVmdx4w==", + "node_modules/nwsapi": { + "version": "2.2.22", + "resolved": "https://registry.npmjs.org/nwsapi/-/nwsapi-2.2.22.tgz", + "integrity": "sha512-ujSMe1OWVn55euT1ihwCI1ZcAaAU3nxUiDwfDQldc51ZXaB9m2AyOn6/jh1BLe2t/G8xd6uKG1UBF2aZJeg2SQ==", "dev": true, - "license": "MIT", + "license": "MIT" + }, + "node_modules/nyc": { + "version": "17.1.0", + "resolved": "https://registry.npmjs.org/nyc/-/nyc-17.1.0.tgz", + "integrity": "sha512-U42vQ4czpKa0QdI1hu950XuNhYqgoM+ZF1HT+VuUHL9hPfDPVvNQyltmMqdE9bUHMVa+8yNbc3QKTj8zQhlVxQ==", + "dev": true, + "license": "ISC", "dependencies": { - "chalk": "^5.4.1", - "commander": "^13.1.0", - "debug": "^4.4.0", - "execa": "^8.0.1", - "lilconfig": "^3.1.3", - "listr2": "^8.2.5", - "micromatch": "^4.0.8", - "pidtree": "^0.6.0", - "string-argv": "^0.3.2", - "yaml": "^2.7.0" + "@istanbuljs/load-nyc-config": "^1.0.0", + "@istanbuljs/schema": "^0.1.2", + "caching-transform": "^4.0.0", + "convert-source-map": "^1.7.0", + "decamelize": "^1.2.0", + "find-cache-dir": "^3.2.0", + "find-up": "^4.1.0", + "foreground-child": "^3.3.0", + "get-package-type": "^0.1.0", + "glob": "^7.1.6", + "istanbul-lib-coverage": "^3.0.0", + "istanbul-lib-hook": "^3.0.0", + "istanbul-lib-instrument": "^6.0.2", + "istanbul-lib-processinfo": "^2.0.2", + "istanbul-lib-report": "^3.0.0", + "istanbul-lib-source-maps": "^4.0.0", + "istanbul-reports": "^3.0.2", + "make-dir": "^3.0.0", + "node-preload": "^0.2.1", + "p-map": "^3.0.0", + "process-on-spawn": "^1.0.0", + "resolve-from": "^5.0.0", + "rimraf": "^3.0.0", + "signal-exit": "^3.0.2", + "spawn-wrap": "^2.0.0", + "test-exclude": "^6.0.0", + "yargs": "^15.0.2" }, "bin": { - "lint-staged": "bin/lint-staged.js" + "nyc": "bin/nyc.js" }, "engines": { - "node": ">=18.12.0" - }, - "funding": { - "url": "https://opencollective.com/lint-staged" + "node": ">=18" } }, - "node_modules/lint-staged/node_modules/chalk": { - "version": "5.6.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-5.6.2.tgz", - "integrity": "sha512-7NzBL0rN6fMUW+f7A6Io4h40qQlG+xGmtMxfbnH/K7TAtt8JQWVQK+6g0UXKMeVJoyV5EkkNsErQ8pVD3bLHbA==", + "node_modules/nyc/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "dev": true, "license": "MIT", + "dependencies": { + "color-convert": "^2.0.1" + }, "engines": { - "node": "^12.17.0 || ^14.13 || >=16.0.0" + "node": ">=8" }, "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" + "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/lint-staged/node_modules/commander": { - "version": "13.1.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-13.1.0.tgz", - "integrity": "sha512-/rFeCpNJQbhSZjGVwO9RFV3xPqbnERS8MmIQzCtD/zl6gpJuV/bMLuN92oG3F7d8oDEHHRrujSXNUr8fpjntKw==", + "node_modules/nyc/node_modules/cliui": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-6.0.0.tgz", + "integrity": "sha512-t6wbgtoCXvAzst7QgXxJYqPt0usEfbgQdftEPbLL/cvv6HPE5VgvqCuAIDR0NgU52ds6rFwqrgakNLrHEjCbrQ==", "dev": true, - "license": "MIT", - "engines": { - "node": ">=18" + "license": "ISC", + "dependencies": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.0", + "wrap-ansi": "^6.2.0" } }, - "node_modules/lint-staged/node_modules/execa": { - "version": "8.0.1", - "resolved": "https://registry.npmjs.org/execa/-/execa-8.0.1.tgz", - "integrity": "sha512-VyhnebXciFV2DESc+p6B+y0LjSm0krU4OgJN44qFAhBY0TJ+1V61tYD2+wHusZ6F9n5K+vl8k0sTy7PEfV4qpg==", + "node_modules/nyc/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", "dev": true, "license": "MIT", "dependencies": { - "cross-spawn": "^7.0.3", - "get-stream": "^8.0.1", - "human-signals": "^5.0.0", - "is-stream": "^3.0.0", - "merge-stream": "^2.0.0", - "npm-run-path": "^5.1.0", - "onetime": "^6.0.0", - "signal-exit": "^4.1.0", - "strip-final-newline": "^3.0.0" + "color-name": "~1.1.4" }, "engines": { - "node": ">=16.17" - }, - "funding": { - "url": "https://github.com/sindresorhus/execa?sponsor=1" + "node": ">=7.0.0" } }, - "node_modules/lint-staged/node_modules/get-stream": { - "version": "8.0.1", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-8.0.1.tgz", - "integrity": "sha512-VaUJspBffn/LMCJVoMvSAdmscJyS1auj5Zulnn5UoYcY531UWmdwhRWkcGKnGU93m5HSXP9LP2usOryrBtQowA==", + "node_modules/nyc/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", "dev": true, - "license": "MIT", - "engines": { - "node": ">=16" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } + "license": "MIT" }, - "node_modules/lint-staged/node_modules/human-signals": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-5.0.0.tgz", - "integrity": "sha512-AXcZb6vzzrFAUE61HnN4mpLqd/cSIwNQjtNWR0euPm6y0iqx3G4gOXaIDdtdDwZmhwe82LA6+zinmW4UBWVePQ==", + "node_modules/nyc/node_modules/convert-source-map": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.9.0.tgz", + "integrity": "sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==", "dev": true, - "license": "Apache-2.0", - "engines": { - "node": ">=16.17.0" - } + "license": "MIT" }, - "node_modules/lint-staged/node_modules/is-stream": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-3.0.0.tgz", - "integrity": "sha512-LnQR4bZ9IADDRSkvpqMGvt/tEJWclzklNgSw48V5EAaAeDd6qGvN8ei6k5p0tvxSR171VmGyHuTiAOfxAbr8kA==", + "node_modules/nyc/node_modules/decamelize": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", + "integrity": "sha512-z2S+W9X73hAUUki+N+9Za2lBlun89zigOyGrsax+KUQ6wKW4ZoWpEYBkGhQjwAjjDCkWxhY0VKEhk8wzY7F5cA==", "dev": true, "license": "MIT", "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">=0.10.0" } }, - "node_modules/lint-staged/node_modules/mimic-fn": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-4.0.0.tgz", - "integrity": "sha512-vqiC06CuhBTUdZH+RYl8sFrL096vA45Ok5ISO6sE/Mr1jRbGH4Csnhi8f3wKVl7x8mO4Au7Ir9D3Oyv1VYMFJw==", + "node_modules/nyc/node_modules/find-up": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", + "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", "dev": true, "license": "MIT", - "engines": { - "node": ">=12" + "dependencies": { + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "engines": { + "node": ">=8" } }, - "node_modules/lint-staged/node_modules/npm-run-path": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-5.3.0.tgz", - "integrity": "sha512-ppwTtiJZq0O/ai0z7yfudtBpWIoxM8yE6nHi1X47eFR2EWORqfbu6CnPlNsjeN683eT0qG6H/Pyf9fCcvjnnnQ==", + "node_modules/nyc/node_modules/glob": { + "version": "7.2.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", + "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", + "deprecated": "Glob versions prior to v9 are no longer supported", "dev": true, - "license": "MIT", + "license": "ISC", "dependencies": { - "path-key": "^4.0.0" + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.1.1", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" }, "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + "node": "*" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/lint-staged/node_modules/onetime": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/onetime/-/onetime-6.0.0.tgz", - "integrity": "sha512-1FlR+gjXK7X+AsAHso35MnyN5KqGwJRi/31ft6x0M194ht7S+rWAvd7PHss9xSKMzE0asv1pyIHaJYq+BbacAQ==", + "node_modules/nyc/node_modules/locate-path": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", + "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", "dev": true, "license": "MIT", "dependencies": { - "mimic-fn": "^4.0.0" + "p-locate": "^4.1.0" }, "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">=8" } }, - "node_modules/lint-staged/node_modules/path-key": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-4.0.0.tgz", - "integrity": "sha512-haREypq7xkM7ErfgIyA0z+Bj4AGKlMSdlQE2jvJo6huWD1EdkKYV+G/T4nq0YEF2vgTT8kqMFKo1uHn950r4SQ==", + "node_modules/nyc/node_modules/p-locate": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", + "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", "dev": true, "license": "MIT", - "engines": { - "node": ">=12" + "dependencies": { + "p-limit": "^2.2.0" }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/lint-staged/node_modules/strip-final-newline": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-3.0.0.tgz", - "integrity": "sha512-dOESqjYr96iWYylGObzd39EuNTa5VJxyvVAEm5Jnh7KGo75V43Hk1odPQkNDyXNmUR6k+gEiDVXnjB8HJ3crXw==", - "dev": true, - "license": "MIT", "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">=8" } }, - "node_modules/listr2": { - "version": "8.3.3", - "resolved": "https://registry.npmjs.org/listr2/-/listr2-8.3.3.tgz", - "integrity": "sha512-LWzX2KsqcB1wqQ4AHgYb4RsDXauQiqhjLk+6hjbaeHG4zpjjVAB6wC/gz6X0l+Du1cN3pUB5ZlrvTbhGSNnUQQ==", + "node_modules/nyc/node_modules/p-map": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/p-map/-/p-map-3.0.0.tgz", + "integrity": "sha512-d3qXVTF/s+W+CdJ5A29wywV2n8CQQYahlgz2bFiA+4eVNJbHJodPZ+/gXwPGh0bOqA+j8S+6+ckmvLGPk1QpxQ==", "dev": true, "license": "MIT", "dependencies": { - "cli-truncate": "^4.0.0", - "colorette": "^2.0.20", - "eventemitter3": "^5.0.1", - "log-update": "^6.1.0", - "rfdc": "^1.4.1", - "wrap-ansi": "^9.0.0" + "aggregate-error": "^3.0.0" }, "engines": { - "node": ">=18.0.0" + "node": ">=8" } }, - "node_modules/listr2/node_modules/ansi-regex": { - "version": "6.2.2", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.2.2.tgz", - "integrity": "sha512-Bq3SmSpyFHaWjPk8If9yc6svM8c56dB5BAtW4Qbw5jHTwwXXcTLoRMkpDJp6VL0XzlWaCHTXrkFURMYmD0sLqg==", + "node_modules/nyc/node_modules/rimraf": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", + "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", + "deprecated": "Rimraf versions prior to v4 are no longer supported", "dev": true, - "license": "MIT", - "engines": { - "node": ">=12" + "license": "ISC", + "dependencies": { + "glob": "^7.1.3" }, - "funding": { - "url": "https://github.com/chalk/ansi-regex?sponsor=1" - } - }, - "node_modules/listr2/node_modules/ansi-styles": { - "version": "6.2.3", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.3.tgz", - "integrity": "sha512-4Dj6M28JB+oAH8kFkTLUo+a2jwOFkuqb3yucU0CANcRRUbxS0cP0nZYCGjcc3BNXwRIsUVmDGgzawme7zvJHvg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=12" + "bin": { + "rimraf": "bin.js" }, "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" + "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/listr2/node_modules/emoji-regex": { - "version": "10.5.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-10.5.0.tgz", - "integrity": "sha512-lb49vf1Xzfx080OKA0o6l8DQQpV+6Vg95zyCJX9VB/BqKYlhG7N4wgROUUHRA+ZPUefLnteQOad7z1kT2bV7bg==", + "node_modules/nyc/node_modules/signal-exit": { + "version": "3.0.7", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", + "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", "dev": true, - "license": "MIT" + "license": "ISC" }, - "node_modules/listr2/node_modules/string-width": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-7.2.0.tgz", - "integrity": "sha512-tsaTIkKW9b4N+AEj+SVA+WhJzV7/zMhcSu78mLKWSk7cXMOSHsBKFWUs0fWwq8QyK3MgJBQRX6Gbi4kYbdvGkQ==", + "node_modules/nyc/node_modules/wrap-ansi": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz", + "integrity": "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==", "dev": true, "license": "MIT", "dependencies": { - "emoji-regex": "^10.3.0", - "get-east-asian-width": "^1.0.0", - "strip-ansi": "^7.1.0" + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" }, "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">=8" } }, - "node_modules/listr2/node_modules/strip-ansi": { - "version": "7.1.2", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.2.tgz", - "integrity": "sha512-gmBGslpoQJtgnMAvOVqGZpEz9dyoKTCzy2nfz/n8aIFhN/jCE/rCmcxabB6jOOHV+0WNnylOxaxBQPSvcWklhA==", + "node_modules/nyc/node_modules/y18n": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.3.tgz", + "integrity": "sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ==", "dev": true, - "license": "MIT", - "dependencies": { - "ansi-regex": "^6.0.1" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/strip-ansi?sponsor=1" - } + "license": "ISC" }, - "node_modules/listr2/node_modules/wrap-ansi": { - "version": "9.0.2", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-9.0.2.tgz", - "integrity": "sha512-42AtmgqjV+X1VpdOfyTGOYRi0/zsoLqtXQckTmqTeybT+BDIbM/Guxo7x3pE2vtpr1ok6xRqM9OpBe+Jyoqyww==", + "node_modules/nyc/node_modules/yargs": { + "version": "15.4.1", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-15.4.1.tgz", + "integrity": "sha512-aePbxDmcYW++PaqBsJ+HYUFwCdv4LVvdnhBy78E57PIor8/OVvhMrADFFEDh8DHDFRv/O9i3lPhsENjO7QX0+A==", "dev": true, "license": "MIT", "dependencies": { - "ansi-styles": "^6.2.1", - "string-width": "^7.0.0", - "strip-ansi": "^7.1.0" + "cliui": "^6.0.0", + "decamelize": "^1.2.0", + "find-up": "^4.1.0", + "get-caller-file": "^2.0.1", + "require-directory": "^2.1.1", + "require-main-filename": "^2.0.0", + "set-blocking": "^2.0.0", + "string-width": "^4.2.0", + "which-module": "^2.0.0", + "y18n": "^4.0.0", + "yargs-parser": "^18.1.2" }, "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/chalk/wrap-ansi?sponsor=1" - } - }, - "node_modules/lit": { - "version": "2.8.0", - "resolved": "https://registry.npmjs.org/lit/-/lit-2.8.0.tgz", - "integrity": "sha512-4Sc3OFX9QHOJaHbmTMk28SYgVxLN3ePDjg7hofEft2zWlehFL3LiAuapWc4U/kYwMYJSh2hTCPZ6/LIC7ii0MA==", - "license": "BSD-3-Clause", - "dependencies": { - "@lit/reactive-element": "^1.6.0", - "lit-element": "^3.3.0", - "lit-html": "^2.8.0" - } - }, - "node_modules/lit-element": { - "version": "3.3.3", - "resolved": "https://registry.npmjs.org/lit-element/-/lit-element-3.3.3.tgz", - "integrity": "sha512-XbeRxmTHubXENkV4h8RIPyr8lXc+Ff28rkcQzw3G6up2xg5E8Zu1IgOWIwBLEQsu3cOVFqdYwiVi0hv0SlpqUA==", - "license": "BSD-3-Clause", - "dependencies": { - "@lit-labs/ssr-dom-shim": "^1.1.0", - "@lit/reactive-element": "^1.3.0", - "lit-html": "^2.8.0" - } - }, - "node_modules/lit-html": { - "version": "2.8.0", - "resolved": "https://registry.npmjs.org/lit-html/-/lit-html-2.8.0.tgz", - "integrity": "sha512-o9t+MQM3P4y7M7yNzqAyjp7z+mQGa4NS4CxiyLqFPyFWyc4O+nodLrkrxSaCTrla6M5YOLaT3RpbbqjszB5g3Q==", - "license": "BSD-3-Clause", - "dependencies": { - "@types/trusted-types": "^2.0.2" + "node": ">=8" } }, - "node_modules/load-json-file": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-4.0.0.tgz", - "integrity": "sha512-Kx8hMakjX03tiGTLAIdJ+lL0htKnXjEZN6hk/tozf/WOuYGdZBJrZ+rCJRbVCugsjB3jMLn9746NsQIf5VjBMw==", + "node_modules/nyc/node_modules/yargs-parser": { + "version": "18.1.3", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-18.1.3.tgz", + "integrity": "sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ==", "dev": true, - "license": "MIT", + "license": "ISC", "dependencies": { - "graceful-fs": "^4.1.2", - "parse-json": "^4.0.0", - "pify": "^3.0.0", - "strip-bom": "^3.0.0" + "camelcase": "^5.0.0", + "decamelize": "^1.2.0" }, "engines": { - "node": ">=4" + "node": ">=6" } }, - "node_modules/load-json-file/node_modules/parse-json": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-4.0.0.tgz", - "integrity": "sha512-aOIos8bujGN93/8Ox/jPLh7RwVnPEysynVFE+fQZyg6jKELEHwzgKdLRFHUgXJL6kylijVSBC4BvN9OmsB48Rw==", - "dev": true, + "node_modules/ob1": { + "version": "0.83.3", + "resolved": "https://registry.npmjs.org/ob1/-/ob1-0.83.3.tgz", + "integrity": "sha512-egUxXCDwoWG06NGCS5s5AdcpnumHKJlfd3HH06P3m9TEMwwScfcY35wpQxbm9oHof+dM/lVH9Rfyu1elTVelSA==", "license": "MIT", "dependencies": { - "error-ex": "^1.3.1", - "json-parse-better-errors": "^1.0.1" + "flow-enums-runtime": "^0.0.6" }, "engines": { - "node": ">=4" + "node": ">=20.19.4" } }, - "node_modules/load-json-file/node_modules/strip-bom": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", - "integrity": "sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==", - "dev": true, + "node_modules/object-assign": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", + "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==", "license": "MIT", "engines": { - "node": ">=4" + "node": ">=0.10.0" } }, - "node_modules/loader-runner": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/loader-runner/-/loader-runner-4.3.0.tgz", - "integrity": "sha512-3R/1M+yS3j5ou80Me59j7F9IMs4PXs3VqRrm0TU3AbKPxlmpoY1TNscJV/oGJXo8qCatFGTfDbY6W6ipGOYXfg==", + "node_modules/object-hash": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/object-hash/-/object-hash-2.2.0.tgz", + "integrity": "sha512-gScRMn0bS5fH+IuwyIFgnh9zBdo4DV+6GhygmWM9HyNJSgS0hScp1f5vjtm7oIIOiT9trXrShAkLFSc2IqKNgw==", "license": "MIT", "engines": { - "node": ">=6.11.5" + "node": ">= 6" } }, - "node_modules/local-pkg": { - "version": "0.5.1", - "resolved": "https://registry.npmjs.org/local-pkg/-/local-pkg-0.5.1.tgz", - "integrity": "sha512-9rrA30MRRP3gBD3HTGnC6cDFpaE1kVDWxWgqWJUN0RvDNAo+Nz/9GxB+nHOH0ifbVFy0hSA1V6vFDvnx54lTEQ==", - "dev": true, + "node_modules/object-inspect": { + "version": "1.13.4", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.4.tgz", + "integrity": "sha512-W67iLl4J2EXEGTbfeHCffrjDfitvLANg0UlX3wFUUSTx92KXRFegMHUVgSqE+wvhAbi4WqjGg9czysTV2Epbew==", "license": "MIT", - "dependencies": { - "mlly": "^1.7.3", - "pkg-types": "^1.2.1" - }, "engines": { - "node": ">=14" + "node": ">= 0.4" }, "funding": { - "url": "https://github.com/sponsors/antfu" + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/locate-path": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", - "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", + "node_modules/object-is": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/object-is/-/object-is-1.1.6.tgz", + "integrity": "sha512-F8cZ+KfGlSGi09lJT7/Nd6KJZ9ygtvYC0/UYYLI9nmQKLMnydpB9yvbv9K1uSkEu7FU9vYPmVwLg328tX+ot3Q==", "dev": true, "license": "MIT", "dependencies": { - "p-locate": "^5.0.0" + "call-bind": "^1.0.7", + "define-properties": "^1.2.1" }, "engines": { - "node": ">=10" + "node": ">= 0.4" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/lock": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/lock/-/lock-1.1.0.tgz", - "integrity": "sha512-NZQIJJL5Rb9lMJ0Yl1JoVr9GSdo4HTPsUEWsSFzB8dE8DSoiLCVavWZPi7Rnlv/o73u6I24S/XYc/NmG4l8EKA==", - "license": "MIT" - }, - "node_modules/lodash": { - "version": "4.17.21", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", - "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", - "license": "MIT" - }, - "node_modules/lodash.camelcase": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/lodash.camelcase/-/lodash.camelcase-4.3.0.tgz", - "integrity": "sha512-TwuEnCnxbc3rAvhf/LbG7tJUDzhqXyFnv3dtzLOPgCG/hODL7WFnsbwktkD7yUV0RrreP/l1PALq/YSg6VvjlA==", - "license": "MIT" - }, - "node_modules/lodash.debounce": { - "version": "4.0.8", - "resolved": "https://registry.npmjs.org/lodash.debounce/-/lodash.debounce-4.0.8.tgz", - "integrity": "sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow==", - "dev": true, - "license": "MIT" - }, - "node_modules/lodash.defaults": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/lodash.defaults/-/lodash.defaults-4.2.0.tgz", - "integrity": "sha512-qjxPLHd3r5DnsdGacqOMU6pb/avJzdh9tFX2ymgoZE27BmjXrNy/y4LoaiTeAb+O3gL8AfpJGtqfX/ae2leYYQ==", - "dev": true, - "license": "MIT" - }, - "node_modules/lodash.difference": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/lodash.difference/-/lodash.difference-4.5.0.tgz", - "integrity": "sha512-dS2j+W26TQ7taQBGN8Lbbq04ssV3emRw4NY58WErlTO29pIqS0HmoT5aJ9+TUQ1N3G+JOZSji4eugsWwGp9yPA==", - "dev": true, - "license": "MIT" - }, - "node_modules/lodash.flatten": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/lodash.flatten/-/lodash.flatten-4.4.0.tgz", - "integrity": "sha512-C5N2Z3DgnnKr0LOpv/hKCgKdb7ZZwafIrsesve6lmzvZIRZRGaZ/l6Q8+2W7NaT+ZwO3fFlSCzCzrDCFdJfZ4g==", - "dev": true, - "license": "MIT" - }, - "node_modules/lodash.isequal": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/lodash.isequal/-/lodash.isequal-4.5.0.tgz", - "integrity": "sha512-pDo3lu8Jhfjqls6GkMgpahsF9kCyayhgykjyLMNFTKWrpVdAQtYyB4muAMWozBB4ig/dtWAmsMxLEI8wuz+DYQ==", - "deprecated": "This package is deprecated. Use require('node:util').isDeepStrictEqual instead.", - "license": "MIT" - }, - "node_modules/lodash.isplainobject": { - "version": "4.0.6", - "resolved": "https://registry.npmjs.org/lodash.isplainobject/-/lodash.isplainobject-4.0.6.tgz", - "integrity": "sha512-oSXzaWypCMHkPC3NvBEaPHf0KsA5mvPrOPgQWDsbg8n7orZ290M0BmC/jgRZ4vcJ6DTAhjrsSYgdsW/F+MFOBA==", - "dev": true, - "license": "MIT" - }, - "node_modules/lodash.kebabcase": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/lodash.kebabcase/-/lodash.kebabcase-4.1.1.tgz", - "integrity": "sha512-N8XRTIMMqqDgSy4VLKPnJ/+hpGZN+PHQiJnSenYqPaVV/NCqEogTnAdZLQiGKhxX+JCs8waWq2t1XHWKOmlY8g==", - "dev": true, - "license": "MIT" - }, - "node_modules/lodash.memoize": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/lodash.memoize/-/lodash.memoize-4.1.2.tgz", - "integrity": "sha512-t7j+NzmgnQzTAYXcsHYLgimltOV1MXHtlOWf6GjL9Kj8GK5FInw5JotxvbOs+IvV1/Dzo04/fCGfLVs7aXb4Ag==", - "dev": true, - "license": "MIT" - }, - "node_modules/lodash.merge": { - "version": "4.6.2", - "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", - "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", - "license": "MIT" - }, - "node_modules/lodash.mergewith": { - "version": "4.6.2", - "resolved": "https://registry.npmjs.org/lodash.mergewith/-/lodash.mergewith-4.6.2.tgz", - "integrity": "sha512-GK3g5RPZWTRSeLSpgP8Xhra+pnjBC56q9FZYe1d5RN3TJ35dbkGy3YqBSMbyCrlbi+CM9Z3Jk5yTL7RCsqboyQ==", - "license": "MIT" - }, - "node_modules/lodash.snakecase": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/lodash.snakecase/-/lodash.snakecase-4.1.1.tgz", - "integrity": "sha512-QZ1d4xoBHYUeuouhEq3lk3Uq7ldgyFXGBhg04+oRLnIz8o9T65Eh+8YdroUwn846zchkA9yDsDl5CVVaV2nqYw==", - "dev": true, - "license": "MIT" - }, - "node_modules/lodash.startcase": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/lodash.startcase/-/lodash.startcase-4.4.0.tgz", - "integrity": "sha512-+WKqsK294HMSc2jEbNgpHpd0JfIBhp7rEV4aqXWqFr6AlXov+SlcgB1Fv01y2kGe3Gc8nMW7VA0SrGuSkRfIEg==", - "dev": true, - "license": "MIT" - }, - "node_modules/lodash.throttle": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/lodash.throttle/-/lodash.throttle-4.1.1.tgz", - "integrity": "sha512-wIkUCfVKpVsWo3JSZlc+8MB5it+2AN5W8J7YVMST30UrvcQNZ1Okbj+rbVniijTWE6FGYy4XJq/rHkas8qJMLQ==", + "node_modules/object-keys": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", + "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", "license": "MIT", - "peer": true - }, - "node_modules/lodash.truncate": { - "version": "4.4.2", - "resolved": "https://registry.npmjs.org/lodash.truncate/-/lodash.truncate-4.4.2.tgz", - "integrity": "sha512-jttmRe7bRse52OsWIMDLaXxWqRAmtIUccAQ3garviCqJjafXOfNMO0yMfNpdD6zbGaTU0P5Nz7e7gAT6cKmJRw==", - "dev": true, - "license": "MIT" - }, - "node_modules/lodash.union": { - "version": "4.6.0", - "resolved": "https://registry.npmjs.org/lodash.union/-/lodash.union-4.6.0.tgz", - "integrity": "sha512-c4pB2CdGrGdjMKYLA+XiRDO7Y0PRQbm/Gzg8qMj+QH+pFVAoTp5sBpO0odL3FjoPCGjK96p6qsP+yQoiLoOBcw==", - "dev": true, - "license": "MIT" - }, - "node_modules/lodash.uniq": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/lodash.uniq/-/lodash.uniq-4.5.0.tgz", - "integrity": "sha512-xfBaXQd9ryd9dlSDvnvI0lvxfLJlYAZzXomUYzLKtUeOQvOP5piqAWuGtrhWeqaXK9hhoM/iyJc5AV+XfsX3HQ==", - "dev": true, - "license": "MIT" - }, - "node_modules/lodash.upperfirst": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/lodash.upperfirst/-/lodash.upperfirst-4.3.1.tgz", - "integrity": "sha512-sReKOYJIJf74dhJONhU4e0/shzi1trVbSWDOhKYE5XV2O+H7Sb2Dihwuc7xWxVl+DgFPyTqIN3zMfT9cq5iWDg==", - "dev": true, - "license": "MIT" + "engines": { + "node": ">= 0.4" + } }, - "node_modules/log-symbols": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-4.1.0.tgz", - "integrity": "sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==", + "node_modules/object.assign": { + "version": "4.1.7", + "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.7.tgz", + "integrity": "sha512-nK28WOo+QIjBkDduTINE4JkF/UJJKyf2EJxvJKfblDpyg0Q+pkOHNTL0Qwy6NP6FhE/EnzV73BxxqcJaXY9anw==", "license": "MIT", "dependencies": { - "chalk": "^4.1.0", - "is-unicode-supported": "^0.1.0" + "call-bind": "^1.0.8", + "call-bound": "^1.0.3", + "define-properties": "^1.2.1", + "es-object-atoms": "^1.0.0", + "has-symbols": "^1.1.0", + "object-keys": "^1.1.1" }, "engines": { - "node": ">=10" + "node": ">= 0.4" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/log-update": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/log-update/-/log-update-6.1.0.tgz", - "integrity": "sha512-9ie8ItPR6tjY5uYJh8K/Zrv/RMZ5VOlOWvtZdEHYSTFKZfIBPQa9tOAEeAWhd+AnIneLJ22w5fjOYtoutpWq5w==", + "node_modules/object.entries": { + "version": "1.1.9", + "resolved": "https://registry.npmjs.org/object.entries/-/object.entries-1.1.9.tgz", + "integrity": "sha512-8u/hfXFRBD1O0hPUjioLhoWFHRmt6tKA4/vZPyckBr18l1KE9uHrFaFaUi8MDRTpi4uak2goyPTSNJLXX2k2Hw==", "dev": true, "license": "MIT", "dependencies": { - "ansi-escapes": "^7.0.0", - "cli-cursor": "^5.0.0", - "slice-ansi": "^7.1.0", - "strip-ansi": "^7.1.0", - "wrap-ansi": "^9.0.0" + "call-bind": "^1.0.8", + "call-bound": "^1.0.4", + "define-properties": "^1.2.1", + "es-object-atoms": "^1.1.1" }, "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">= 0.4" } }, - "node_modules/log-update/node_modules/ansi-escapes": { - "version": "7.1.1", - "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-7.1.1.tgz", - "integrity": "sha512-Zhl0ErHcSRUaVfGUeUdDuLgpkEo8KIFjB4Y9uAc46ScOpdDiU1Dbyplh7qWJeJ/ZHpbyMSM26+X3BySgnIz40Q==", + "node_modules/object.fromentries": { + "version": "2.0.8", + "resolved": "https://registry.npmjs.org/object.fromentries/-/object.fromentries-2.0.8.tgz", + "integrity": "sha512-k6E21FzySsSK5a21KRADBd/NGneRegFO5pLHfdQLpRDETUNJueLXs3WCzyQ3tFRDYgbq3KHGXfTbi2bs8WQ6rQ==", "dev": true, "license": "MIT", "dependencies": { - "environment": "^1.0.0" + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.2", + "es-object-atoms": "^1.0.0" }, "engines": { - "node": ">=18" + "node": ">= 0.4" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/log-update/node_modules/ansi-regex": { - "version": "6.2.2", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.2.2.tgz", - "integrity": "sha512-Bq3SmSpyFHaWjPk8If9yc6svM8c56dB5BAtW4Qbw5jHTwwXXcTLoRMkpDJp6VL0XzlWaCHTXrkFURMYmD0sLqg==", + "node_modules/object.groupby": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/object.groupby/-/object.groupby-1.0.3.tgz", + "integrity": "sha512-+Lhy3TQTuzXI5hevh8sBGqbmurHbbIjAi0Z4S63nthVLmLxfbj4T54a4CfZrXIrt9iP4mVAPYMo/v99taj3wjQ==", "dev": true, "license": "MIT", - "engines": { - "node": ">=12" + "dependencies": { + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.2" }, - "funding": { - "url": "https://github.com/chalk/ansi-regex?sponsor=1" + "engines": { + "node": ">= 0.4" } }, - "node_modules/log-update/node_modules/ansi-styles": { - "version": "6.2.3", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.3.tgz", - "integrity": "sha512-4Dj6M28JB+oAH8kFkTLUo+a2jwOFkuqb3yucU0CANcRRUbxS0cP0nZYCGjcc3BNXwRIsUVmDGgzawme7zvJHvg==", + "node_modules/object.hasown": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/object.hasown/-/object.hasown-1.1.4.tgz", + "integrity": "sha512-FZ9LZt9/RHzGySlBARE3VF+gE26TxR38SdmqOqliuTnl9wrKulaQs+4dee1V+Io8VfxqzAfHu6YuRgUy8OHoTg==", "dev": true, "license": "MIT", + "dependencies": { + "define-properties": "^1.2.1", + "es-abstract": "^1.23.2", + "es-object-atoms": "^1.0.0" + }, "engines": { - "node": ">=12" + "node": ">= 0.4" }, "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/log-update/node_modules/cli-cursor": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-5.0.0.tgz", - "integrity": "sha512-aCj4O5wKyszjMmDT4tZj93kxyydN/K5zPWSCe6/0AV/AA1pqe5ZBIw0a2ZfPQV7lL5/yb5HsUreJ6UFAF1tEQw==", + "node_modules/object.values": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.2.1.tgz", + "integrity": "sha512-gXah6aZrcUxjWg2zR2MwouP2eHlCBzdV4pygudehaKXSGW4v2AsRQUK+lwwXhii6KFZcunEnmSUoYp5CXibxtA==", "dev": true, "license": "MIT", "dependencies": { - "restore-cursor": "^5.0.0" + "call-bind": "^1.0.8", + "call-bound": "^1.0.3", + "define-properties": "^1.2.1", + "es-object-atoms": "^1.0.0" }, "engines": { - "node": ">=18" + "node": ">= 0.4" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/log-update/node_modules/emoji-regex": { - "version": "10.5.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-10.5.0.tgz", - "integrity": "sha512-lb49vf1Xzfx080OKA0o6l8DQQpV+6Vg95zyCJX9VB/BqKYlhG7N4wgROUUHRA+ZPUefLnteQOad7z1kT2bV7bg==", + "node_modules/obliterator": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/obliterator/-/obliterator-2.0.5.tgz", + "integrity": "sha512-42CPE9AhahZRsMNslczq0ctAEtqk8Eka26QofnqC346BZdHDySk3LWka23LI7ULIw11NmltpiLagIq8gBozxTw==", "dev": true, "license": "MIT" }, - "node_modules/log-update/node_modules/is-fullwidth-code-point": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-5.1.0.tgz", - "integrity": "sha512-5XHYaSyiqADb4RnZ1Bdad6cPp8Toise4TzEjcOYDHZkTCbKgiUl7WTUCpNWHuxmDt91wnsZBc9xinNzopv3JMQ==", - "dev": true, + "node_modules/obuf": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/obuf/-/obuf-1.1.2.tgz", + "integrity": "sha512-PX1wu0AmAdPqOL1mWhqmlOd8kOIZQwGZw6rh7uby9fTc5lhaOWFLX3I6R1hrF9k3zUY40e6igsLGkDXK92LJNg==", + "license": "MIT" + }, + "node_modules/ofetch": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/ofetch/-/ofetch-1.4.1.tgz", + "integrity": "sha512-QZj2DfGplQAr2oj9KzceK9Hwz6Whxazmn85yYeVuS3u9XTMOGMRx0kO95MQ+vLsj/S/NwBDMMLU5hpxvI6Tklw==", "license": "MIT", "dependencies": { - "get-east-asian-width": "^1.3.1" - }, + "destr": "^2.0.3", + "node-fetch-native": "^1.6.4", + "ufo": "^1.5.4" + } + }, + "node_modules/on-exit-leak-free": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/on-exit-leak-free/-/on-exit-leak-free-2.1.2.tgz", + "integrity": "sha512-0eJJY6hXLGf1udHwfNftBqH+g73EU4B504nZeKpz1sYRKafAghwxEJunB2O7rDZkL4PGfsMVnTXZ2EjibbqcsA==", + "license": "MIT", "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">=14.0.0" } }, - "node_modules/log-update/node_modules/onetime": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/onetime/-/onetime-7.0.0.tgz", - "integrity": "sha512-VXJjc87FScF88uafS3JllDgvAm+c/Slfz06lorj2uAY34rlUu0Nt+v8wreiImcrgAjjIHp1rXpTDlLOGw29WwQ==", - "dev": true, + "node_modules/on-finished": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz", + "integrity": "sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==", "license": "MIT", "dependencies": { - "mimic-function": "^5.0.0" + "ee-first": "1.1.1" }, "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">= 0.8" } }, - "node_modules/log-update/node_modules/restore-cursor": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-5.1.0.tgz", - "integrity": "sha512-oMA2dcrw6u0YfxJQXm342bFKX/E4sG9rbTzO9ptUcR/e8A33cHuvStiYOwH7fszkZlZ1z/ta9AAoPk2F4qIOHA==", - "dev": true, + "node_modules/on-headers": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/on-headers/-/on-headers-1.1.0.tgz", + "integrity": "sha512-737ZY3yNnXy37FHkQxPzt4UZ2UWPWiCZWLvFZ4fu5cueciegX0zGPnrlY6bwRg4FdQOe9YU8MkmJwGhoMybl8A==", "license": "MIT", - "dependencies": { - "onetime": "^7.0.0", - "signal-exit": "^4.1.0" - }, "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">= 0.8" } }, - "node_modules/log-update/node_modules/slice-ansi": { - "version": "7.1.2", - "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-7.1.2.tgz", - "integrity": "sha512-iOBWFgUX7caIZiuutICxVgX1SdxwAVFFKwt1EvMYYec/NWO5meOJ6K5uQxhrYBdQJne4KxiqZc+KptFOWFSI9w==", - "dev": true, + "node_modules/once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", + "license": "ISC", + "dependencies": { + "wrappy": "1" + } + }, + "node_modules/one-time": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/one-time/-/one-time-1.0.0.tgz", + "integrity": "sha512-5DXOiRKwuSEcQ/l0kGCF6Q3jcADFv5tSmRaJck/OqkVFcOzutB134KRSfF0xDrL39MNnqxbHBbUUcjZIhTgb2g==", "license": "MIT", "dependencies": { - "ansi-styles": "^6.2.1", - "is-fullwidth-code-point": "^5.0.0" + "fn.name": "1.x.x" + } + }, + "node_modules/onetime": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", + "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", + "license": "MIT", + "dependencies": { + "mimic-fn": "^2.1.0" }, "engines": { - "node": ">=18" + "node": ">=6" }, "funding": { - "url": "https://github.com/chalk/slice-ansi?sponsor=1" + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/log-update/node_modules/string-width": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-7.2.0.tgz", - "integrity": "sha512-tsaTIkKW9b4N+AEj+SVA+WhJzV7/zMhcSu78mLKWSk7cXMOSHsBKFWUs0fWwq8QyK3MgJBQRX6Gbi4kYbdvGkQ==", - "dev": true, + "node_modules/open": { + "version": "7.4.2", + "resolved": "https://registry.npmjs.org/open/-/open-7.4.2.tgz", + "integrity": "sha512-MVHddDVweXZF3awtlAS+6pgKLlm/JgxZ90+/NBurBoQctVOOB/zDdVjcyPzQ+0laDGbsWgrRkflI65sQeOgT9Q==", "license": "MIT", "dependencies": { - "emoji-regex": "^10.3.0", - "get-east-asian-width": "^1.0.0", - "strip-ansi": "^7.1.0" + "is-docker": "^2.0.0", + "is-wsl": "^2.1.1" }, "engines": { - "node": ">=18" + "node": ">=8" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/log-update/node_modules/strip-ansi": { - "version": "7.1.2", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.2.tgz", - "integrity": "sha512-gmBGslpoQJtgnMAvOVqGZpEz9dyoKTCzy2nfz/n8aIFhN/jCE/rCmcxabB6jOOHV+0WNnylOxaxBQPSvcWklhA==", + "node_modules/openai": { + "version": "4.104.0", + "resolved": "https://registry.npmjs.org/openai/-/openai-4.104.0.tgz", + "integrity": "sha512-p99EFNsA/yX6UhVO93f5kJsDRLAg+CTA2RBqdHK4RtK8u5IJw32Hyb2dTGKbnnFmnuoBv5r7Z2CURI9sGZpSuA==", "dev": true, - "license": "MIT", + "license": "Apache-2.0", "dependencies": { - "ansi-regex": "^6.0.1" + "@types/node": "^18.11.18", + "@types/node-fetch": "^2.6.4", + "abort-controller": "^3.0.0", + "agentkeepalive": "^4.2.1", + "form-data-encoder": "1.7.2", + "formdata-node": "^4.3.2", + "node-fetch": "^2.6.7" }, - "engines": { - "node": ">=12" + "bin": { + "openai": "bin/cli" }, - "funding": { - "url": "https://github.com/chalk/strip-ansi?sponsor=1" + "peerDependencies": { + "ws": "^8.18.0", + "zod": "^3.23.8" + }, + "peerDependenciesMeta": { + "ws": { + "optional": true + }, + "zod": { + "optional": true + } } }, - "node_modules/log-update/node_modules/wrap-ansi": { - "version": "9.0.2", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-9.0.2.tgz", - "integrity": "sha512-42AtmgqjV+X1VpdOfyTGOYRi0/zsoLqtXQckTmqTeybT+BDIbM/Guxo7x3pE2vtpr1ok6xRqM9OpBe+Jyoqyww==", + "node_modules/openai/node_modules/@types/node": { + "version": "18.19.129", + "resolved": "https://registry.npmjs.org/@types/node/-/node-18.19.129.tgz", + "integrity": "sha512-hrmi5jWt2w60ayox3iIXwpMEnfUvOLJCRtrOPbHtH15nTjvO7uhnelvrdAs0dO0/zl5DZ3ZbahiaXEVb54ca/A==", "dev": true, "license": "MIT", "dependencies": { - "ansi-styles": "^6.2.1", - "string-width": "^7.0.0", - "strip-ansi": "^7.1.0" - }, - "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + "undici-types": "~5.26.4" } }, - "node_modules/logform": { - "version": "2.7.0", - "resolved": "https://registry.npmjs.org/logform/-/logform-2.7.0.tgz", - "integrity": "sha512-TFYA4jnP7PVbmlBIfhlSe+WKxs9dklXMTEGcBCIvLhE/Tn3H6Gk1norupVW7m5Cnd4bLcr08AytbyV/xj7f/kQ==", + "node_modules/opener": { + "version": "1.5.2", + "resolved": "https://registry.npmjs.org/opener/-/opener-1.5.2.tgz", + "integrity": "sha512-ur5UIdyw5Y7yEj9wLzhqXiy6GZ3Mwx0yGI+5sMn2r0N0v3cKJvUmFH5yPP+WXh9e0xfyzyJX95D8l088DNFj7A==", + "license": "(WTFPL OR MIT)", + "bin": { + "opener": "bin/opener-bin.js" + } + }, + "node_modules/optionator": { + "version": "0.9.4", + "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.4.tgz", + "integrity": "sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==", + "dev": true, "license": "MIT", "dependencies": { - "@colors/colors": "1.6.0", - "@types/triple-beam": "^1.3.2", - "fecha": "^4.2.0", - "ms": "^2.1.1", - "safe-stable-stringify": "^2.3.1", - "triple-beam": "^1.3.0" + "deep-is": "^0.1.3", + "fast-levenshtein": "^2.0.6", + "levn": "^0.4.1", + "prelude-ls": "^1.2.1", + "type-check": "^0.4.0", + "word-wrap": "^1.2.5" }, "engines": { - "node": ">= 12.0.0" + "node": ">= 0.8.0" } }, - "node_modules/logform/node_modules/@colors/colors": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/@colors/colors/-/colors-1.6.0.tgz", - "integrity": "sha512-Ir+AOibqzrIsL6ajt3Rz3LskB7OiMVHqltZmspbW/TJuTVuyOMirVqAkjfY6JISiLHgyNqicAC8AyHHGzNd/dA==", + "node_modules/ora": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/ora/-/ora-7.0.1.tgz", + "integrity": "sha512-0TUxTiFJWv+JnjWm4o9yvuskpEJLXTcng8MJuKd+SzAzp2o+OP3HWqNhB4OdJRt1Vsd9/mR0oyaEYlOnL7XIRw==", + "dev": true, "license": "MIT", + "dependencies": { + "chalk": "^5.3.0", + "cli-cursor": "^4.0.0", + "cli-spinners": "^2.9.0", + "is-interactive": "^2.0.0", + "is-unicode-supported": "^1.3.0", + "log-symbols": "^5.1.0", + "stdin-discarder": "^0.1.0", + "string-width": "^6.1.0", + "strip-ansi": "^7.1.0" + }, "engines": { - "node": ">=0.1.90" + "node": ">=16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/long": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/long/-/long-4.0.0.tgz", - "integrity": "sha512-XsP+KhQif4bjX1kbuSiySJFNAehNxgLb6hPRGJ9QsUr8ajHkuXGdrHmFUTUUXhDwVX2R5bY4JNZEwbUiMhV+MA==", - "license": "Apache-2.0" - }, - "node_modules/loose-envify": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz", - "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==", + "node_modules/ora/node_modules/ansi-regex": { + "version": "6.2.2", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.2.2.tgz", + "integrity": "sha512-Bq3SmSpyFHaWjPk8If9yc6svM8c56dB5BAtW4Qbw5jHTwwXXcTLoRMkpDJp6VL0XzlWaCHTXrkFURMYmD0sLqg==", + "dev": true, "license": "MIT", - "dependencies": { - "js-tokens": "^3.0.0 || ^4.0.0" + "engines": { + "node": ">=12" }, - "bin": { - "loose-envify": "cli.js" + "funding": { + "url": "https://github.com/chalk/ansi-regex?sponsor=1" } }, - "node_modules/loupe": { - "version": "2.3.7", - "resolved": "https://registry.npmjs.org/loupe/-/loupe-2.3.7.tgz", - "integrity": "sha512-zSMINGVYkdpYSOBmLi0D1Uo7JU9nVdQKrHxC8eYlV+9YKK9WePqAlL7lSlorG/U2Fw1w0hTBmaa/jrQ3UbPHtA==", + "node_modules/ora/node_modules/chalk": { + "version": "5.6.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-5.6.2.tgz", + "integrity": "sha512-7NzBL0rN6fMUW+f7A6Io4h40qQlG+xGmtMxfbnH/K7TAtt8JQWVQK+6g0UXKMeVJoyV5EkkNsErQ8pVD3bLHbA==", + "dev": true, "license": "MIT", - "dependencies": { - "get-func-name": "^2.0.1" + "engines": { + "node": "^12.17.0 || ^14.13 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" } }, - "node_modules/lowercase-keys": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-3.0.0.tgz", - "integrity": "sha512-ozCC6gdQ+glXOQsveKD0YsDy8DSQFjDTz4zyzEHNV5+JP5D62LmfDZ6o1cycFx9ouG940M5dE8C8CTewdj2YWQ==", + "node_modules/ora/node_modules/cli-cursor": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-4.0.0.tgz", + "integrity": "sha512-VGtlMu3x/4DOtIUwEkRezxUZ2lBacNJCHash0N0WeZDBS+7Ux1dm3XWAgWYxLJFMMdOeXMHXorshEFhbMSGelg==", "dev": true, "license": "MIT", + "dependencies": { + "restore-cursor": "^4.0.0" + }, "engines": { "node": "^12.20.0 || ^14.13.1 || >=16.0.0" }, @@ -33411,1482 +50738,1751 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/lru_map": { - "version": "0.3.3", - "resolved": "https://registry.npmjs.org/lru_map/-/lru_map-0.3.3.tgz", - "integrity": "sha512-Pn9cox5CsMYngeDbmChANltQl+5pi6XmTrraMSzhPmMBbmgcxmqWry0U3PGapCU1yB4/LqCcom7qhHZiF/jGfQ==", + "node_modules/ora/node_modules/emoji-regex": { + "version": "10.5.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-10.5.0.tgz", + "integrity": "sha512-lb49vf1Xzfx080OKA0o6l8DQQpV+6Vg95zyCJX9VB/BqKYlhG7N4wgROUUHRA+ZPUefLnteQOad7z1kT2bV7bg==", "dev": true, "license": "MIT" }, - "node_modules/lru-cache": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", - "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", - "license": "ISC", - "dependencies": { - "yallist": "^3.0.2" - } - }, - "node_modules/luxon": { - "version": "3.7.2", - "resolved": "https://registry.npmjs.org/luxon/-/luxon-3.7.2.tgz", - "integrity": "sha512-vtEhXh/gNjI9Yg1u4jX/0YVPMvxzHuGgCm6tC5kZyb08yjGWGnqAjGJvcXbqQR2P3MyMEFnRbpcdFS6PBcLqew==", + "node_modules/ora/node_modules/is-unicode-supported": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-1.3.0.tgz", + "integrity": "sha512-43r2mRvz+8JRIKnWJ+3j8JtjRKZ6GmjzfaE/qiBJnikNnYv/6bagRJ1kUhNk8R5EX/GkobD+r+sfxCPJsiKBLQ==", + "dev": true, "license": "MIT", "engines": { "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/lz-string": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/lz-string/-/lz-string-1.5.0.tgz", - "integrity": "sha512-h5bgJWpxJNswbU7qCrV0tIKQCaS3blPDrqKWx+QxzuzL1zGUzij9XCWLrSLsJPu5t+eWA/ycetzYAO5IOMcWAQ==", + "node_modules/ora/node_modules/log-symbols": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-5.1.0.tgz", + "integrity": "sha512-l0x2DvrW294C9uDCoQe1VSU4gf529FkSZ6leBl4TiqZH/e+0R7hSfHQBNut2mNygDgHwvYHfFLn6Oxb3VWj2rA==", "dev": true, "license": "MIT", - "bin": { - "lz-string": "bin/bin.js" - } - }, - "node_modules/magic-string": { - "version": "0.30.5", - "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.5.tgz", - "integrity": "sha512-7xlpfBaQaP/T6Vh8MO/EqXSW5En6INHEvEXQiuff7Gku0PWjU3uf6w/j9o7O+SpB5fOAkrI5HeoNgwjEO0pFsA==", - "license": "MIT", "dependencies": { - "@jridgewell/sourcemap-codec": "^1.4.15" + "chalk": "^5.0.0", + "is-unicode-supported": "^1.1.0" }, "engines": { "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/magicast": { - "version": "0.3.5", - "resolved": "https://registry.npmjs.org/magicast/-/magicast-0.3.5.tgz", - "integrity": "sha512-L0WhttDl+2BOsybvEOLK7fW3UA0OQ0IQ2d6Zl2x/a6vVRs3bAY0ECOSHHeL5jD+SbOpOCUEi0y1DgHEn9Qn1AQ==", + "node_modules/ora/node_modules/restore-cursor": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-4.0.0.tgz", + "integrity": "sha512-I9fPXU9geO9bHOt9pHHOhOkYerIMsmVaWB0rA2AI9ERh/+x/i7MV5HKBNrg+ljO5eoPVgCcnFuRjJ9uH6I/3eg==", "dev": true, "license": "MIT", "dependencies": { - "@babel/parser": "^7.25.4", - "@babel/types": "^7.25.4", - "source-map-js": "^1.2.0" + "onetime": "^5.1.0", + "signal-exit": "^3.0.2" + }, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/make-dir": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz", - "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==", + "node_modules/ora/node_modules/signal-exit": { + "version": "3.0.7", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", + "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", + "dev": true, + "license": "ISC" + }, + "node_modules/ora/node_modules/string-width": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-6.1.0.tgz", + "integrity": "sha512-k01swCJAgQmuADB0YIc+7TuatfNvTBVOoaUWJjTB9R4VJzR5vNWzf5t42ESVZFPS8xTySF7CAdV4t/aaIm3UnQ==", + "dev": true, "license": "MIT", - "optional": true, "dependencies": { - "semver": "^6.0.0" + "eastasianwidth": "^0.2.0", + "emoji-regex": "^10.2.1", + "strip-ansi": "^7.0.1" }, "engines": { - "node": ">=8" + "node": ">=16" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/make-error": { - "version": "1.3.6", - "resolved": "https://registry.npmjs.org/make-error/-/make-error-1.3.6.tgz", - "integrity": "sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==", - "devOptional": true, - "license": "ISC" - }, - "node_modules/make-promises-safe": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/make-promises-safe/-/make-promises-safe-5.1.0.tgz", - "integrity": "sha512-AfdZ49rtyhQR/6cqVKGoH7y4ql7XkS5HJI1lZm0/5N6CQosy1eYbBJ/qbhkKHzo17UH7M918Bysf6XB9f3kS1g==", + "node_modules/ora/node_modules/strip-ansi": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.2.tgz", + "integrity": "sha512-gmBGslpoQJtgnMAvOVqGZpEz9dyoKTCzy2nfz/n8aIFhN/jCE/rCmcxabB6jOOHV+0WNnylOxaxBQPSvcWklhA==", + "dev": true, "license": "MIT", - "optional": true - }, - "node_modules/makeerror": { - "version": "1.0.12", - "resolved": "https://registry.npmjs.org/makeerror/-/makeerror-1.0.12.tgz", - "integrity": "sha512-JmqCvUhmt43madlpFzG4BQzG2Z3m6tvQDNKdClZnO3VbIudJYmxsT0FNJMeiB2+JTSlTQTSbU8QdesVmwJcmLg==", - "license": "BSD-3-Clause", "dependencies": { - "tmpl": "1.0.5" + "ansi-regex": "^6.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/strip-ansi?sponsor=1" } }, - "node_modules/markdown-table": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/markdown-table/-/markdown-table-1.1.3.tgz", - "integrity": "sha512-1RUZVgQlpJSPWYbFSpmudq5nHY1doEIv89gBtF0s4gW1GF2XorxcA/70M5vq7rLv0a6mhOUccRsqkwhwLCIQ2Q==", + "node_modules/ordinal": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/ordinal/-/ordinal-1.0.3.tgz", + "integrity": "sha512-cMddMgb2QElm8G7vdaa02jhUNbTSrhsgAGUz1OokD83uJTwSUn+nKoNoKVVaRa08yF6sgfO7Maou1+bgLd9rdQ==", "dev": true, "license": "MIT" }, - "node_modules/marky": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/marky/-/marky-1.3.0.tgz", - "integrity": "sha512-ocnPZQLNpvbedwTy9kNrQEsknEfgvcLMvOtz3sFeWApDq1MXH1TqkCIx58xlpESsfwQOnuBO9beyQuNGzVvuhQ==", - "license": "Apache-2.0", - "peer": true + "node_modules/os-browserify": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/os-browserify/-/os-browserify-0.3.0.tgz", + "integrity": "sha512-gjcpUc3clBf9+210TRaDWbf+rZZZEshZ+DlXMRCeAjp0xhTrnQsKHypIy1J3d5hKdUzj69t708EHtU8P6bUn0A==", + "dev": true, + "license": "MIT" }, - "node_modules/math-intrinsics": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/math-intrinsics/-/math-intrinsics-1.1.0.tgz", - "integrity": "sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==", + "node_modules/os-tmpdir": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", + "integrity": "sha512-D2FR03Vir7FIu45XBY20mTb+/ZSWB00sjU9jdQXt83gDrI4Ztz5Fs7/yy74g2N5SVQY4xY1qDr4rNddwYRVX0g==", "license": "MIT", "engines": { - "node": ">= 0.4" + "node": ">=0.10.0" } }, - "node_modules/mcl-wasm": { - "version": "1.8.0", - "resolved": "https://registry.npmjs.org/mcl-wasm/-/mcl-wasm-1.8.0.tgz", - "integrity": "sha512-j6kekpd/i6XLHKgUPLPOqts3EUIw+lOFPdyQ4cqepONZ2R/dtfc3+DnYMJXKXw4JF8c6hfcBZ04gbYWOXurv+Q==", + "node_modules/outdent": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/outdent/-/outdent-0.5.0.tgz", + "integrity": "sha512-/jHxFIzoMXdqPzTaCpFzAAWhpkSjZPF4Vsn6jAfNpmbH/ymsmd7Qc6VE9BGn0L6YMj6uwpQLxCECpus4ukKS9Q==", "dev": true, - "license": "BSD-3-Clause", + "license": "MIT" + }, + "node_modules/own-keys": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/own-keys/-/own-keys-1.0.1.tgz", + "integrity": "sha512-qFOyK5PjiWZd+QQIh+1jhdb9LpxTF0qs7Pm8o5QHYZ0M3vKqSqzsZaEB6oWlxZ+q2sJBMI/Ktgd2N5ZwQoRHfg==", + "dev": true, + "license": "MIT", "dependencies": { - "@types/node": "^20.2.5" + "get-intrinsic": "^1.2.6", + "object-keys": "^1.1.1", + "safe-push-apply": "^1.0.0" }, "engines": { - "node": ">=14.17" + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/md5.js": { - "version": "1.3.5", - "resolved": "https://registry.npmjs.org/md5.js/-/md5.js-1.3.5.tgz", - "integrity": "sha512-xitP+WxNPcTTOgnTJcrhM0xvdPepipPSf3I8EIpGKeFLjt3PlJLIDG3u8EX53ZIubkb+5U2+3rELYpEhHhzdkg==", + "node_modules/ox": { + "version": "0.9.3", + "resolved": "https://registry.npmjs.org/ox/-/ox-0.9.3.tgz", + "integrity": "sha512-KzyJP+fPV4uhuuqrTZyok4DC7vFzi7HLUFiUNEmpbyh59htKWkOC98IONC1zgXJPbHAhQgqs6B0Z6StCGhmQvg==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/wevm" + } + ], "license": "MIT", "dependencies": { - "hash-base": "^3.0.0", - "inherits": "^2.0.1", - "safe-buffer": "^5.1.2" + "@adraffy/ens-normalize": "^1.11.0", + "@noble/ciphers": "^1.3.0", + "@noble/curves": "1.9.1", + "@noble/hashes": "^1.8.0", + "@scure/bip32": "^1.7.0", + "@scure/bip39": "^1.6.0", + "abitype": "^1.0.9", + "eventemitter3": "5.0.1" + }, + "peerDependencies": { + "typescript": ">=5.4.0" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } } }, - "node_modules/mdast-util-definitions": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/mdast-util-definitions/-/mdast-util-definitions-4.0.0.tgz", - "integrity": "sha512-k8AJ6aNnUkB7IE+5azR9h81O5EQ/cTDXtWdMq9Kk5KcEW/8ritU5CeLg/9HhOC++nALHBlaogJ5jz0Ybk3kPMQ==", + "node_modules/ox/node_modules/@noble/curves": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/@noble/curves/-/curves-1.9.1.tgz", + "integrity": "sha512-k11yZxZg+t+gWvBbIswW0yoJlu8cHOC7dhunwOzoWH/mXGBiYyR4YY6hAEK/3EUs4UpB8la1RfdRpeGsFHkWsA==", "license": "MIT", "dependencies": { - "unist-util-visit": "^2.0.0" + "@noble/hashes": "1.8.0" + }, + "engines": { + "node": "^14.21.3 || >=16" }, "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" + "url": "https://paulmillr.com/funding/" } }, - "node_modules/mdast-util-from-markdown": { - "version": "0.8.5", - "resolved": "https://registry.npmjs.org/mdast-util-from-markdown/-/mdast-util-from-markdown-0.8.5.tgz", - "integrity": "sha512-2hkTXtYYnr+NubD/g6KGBS/0mFmBcifAsI0yIWRiRo0PjVs6SSOSOdtzbp6kSGnShDN6G5aWZpKQ2lWRy27mWQ==", + "node_modules/ox/node_modules/@scure/bip32": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/@scure/bip32/-/bip32-1.7.0.tgz", + "integrity": "sha512-E4FFX/N3f4B80AKWp5dP6ow+flD1LQZo/w8UnLGYZO674jS6YnYeepycOOksv+vLPSpgN35wgKgy+ybfTb2SMw==", "license": "MIT", "dependencies": { - "@types/mdast": "^3.0.0", - "mdast-util-to-string": "^2.0.0", - "micromark": "~2.11.0", - "parse-entities": "^2.0.0", - "unist-util-stringify-position": "^2.0.0" + "@noble/curves": "~1.9.0", + "@noble/hashes": "~1.8.0", + "@scure/base": "~1.2.5" }, "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" + "url": "https://paulmillr.com/funding/" } }, - "node_modules/mdast-util-to-hast": { - "version": "10.2.0", - "resolved": "https://registry.npmjs.org/mdast-util-to-hast/-/mdast-util-to-hast-10.2.0.tgz", - "integrity": "sha512-JoPBfJ3gBnHZ18icCwHR50orC9kNH81tiR1gs01D8Q5YpV6adHNO9nKNuFBCJQ941/32PT1a63UF/DitmS3amQ==", + "node_modules/ox/node_modules/@scure/bip39": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/@scure/bip39/-/bip39-1.6.0.tgz", + "integrity": "sha512-+lF0BbLiJNwVlev4eKelw1WWLaiKXw7sSl8T6FvBlWkdX+94aGJ4o8XjUdlyhTCjd8c+B3KT3JfS8P0bLRNU6A==", "license": "MIT", "dependencies": { - "@types/mdast": "^3.0.0", - "@types/unist": "^2.0.0", - "mdast-util-definitions": "^4.0.0", - "mdurl": "^1.0.0", - "unist-builder": "^2.0.0", - "unist-util-generated": "^1.0.0", - "unist-util-position": "^3.0.0", - "unist-util-visit": "^2.0.0" + "@noble/hashes": "~1.8.0", + "@scure/base": "~1.2.5" }, "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/mdast-util-to-hast/node_modules/@types/unist": { - "version": "2.0.11", - "resolved": "https://registry.npmjs.org/@types/unist/-/unist-2.0.11.tgz", - "integrity": "sha512-CmBKiL6NNo/OqgmMn95Fk9Whlp2mtvIv+KNpQKN2F4SjvrEesubTRWGYSg+BnWZOnlCaSTU1sMpsBOzgbYhnsA==", - "license": "MIT" - }, - "node_modules/mdast-util-to-string": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/mdast-util-to-string/-/mdast-util-to-string-2.0.0.tgz", - "integrity": "sha512-AW4DRS3QbBayY/jJmD8437V1Gombjf8RSOUCMFBuo5iHi58AGEgVCKQ+ezHkZZDpAQS75hcBMpLqjpJTjtUL7w==", - "license": "MIT", - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" + "url": "https://paulmillr.com/funding/" } }, - "node_modules/mdurl": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/mdurl/-/mdurl-1.0.1.tgz", - "integrity": "sha512-/sKlQJCBYVY9Ers9hqzKou4H6V5UWc/M59TH2dvkt+84itfnq7uFOMLpOiOS4ujvHP4etln18fmIxA5R5fll0g==", - "license": "MIT" - }, - "node_modules/media-typer": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", - "integrity": "sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==", + "node_modules/p-cancelable": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/p-cancelable/-/p-cancelable-3.0.0.tgz", + "integrity": "sha512-mlVgR3PGuzlo0MmTdk4cXqXWlwQDLnONTAg6sm62XkMJEiRxN3GL3SffkYvqwonbkJBcrI7Uvv5Zh9yjvn2iUw==", "license": "MIT", "engines": { - "node": ">= 0.6" + "node": ">=12.20" } }, - "node_modules/memfs": { - "version": "3.5.3", - "resolved": "https://registry.npmjs.org/memfs/-/memfs-3.5.3.tgz", - "integrity": "sha512-UERzLsxzllchadvbPs5aolHh65ISpKpM+ccLbOJ8/vvpBKmAWf+la7dXFy7Mr0ySHbdHrFv5kGFCUHHe6GFEmw==", - "license": "Unlicense", + "node_modules/p-filter": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/p-filter/-/p-filter-2.1.0.tgz", + "integrity": "sha512-ZBxxZ5sL2HghephhpGAQdoskxplTwr7ICaehZwLIlfL6acuVgZPm8yBNuRAFBGEqtD/hmUeq9eqLg2ys9Xr/yw==", + "dev": true, + "license": "MIT", "dependencies": { - "fs-monkey": "^1.0.4" + "p-map": "^2.0.0" }, "engines": { - "node": ">= 4.0.0" + "node": ">=8" } }, - "node_modules/memoize-one": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/memoize-one/-/memoize-one-6.0.0.tgz", - "integrity": "sha512-rkpe71W0N0c0Xz6QD0eJETuWAJGnJ9afsl1srmwPrI+yBCkge5EycXXbYRyvL29zZVUWQCY7InPRCv3GDXuZNw==", - "license": "MIT" - }, - "node_modules/memorystream": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/memorystream/-/memorystream-0.3.1.tgz", - "integrity": "sha512-S3UwM3yj5mtUSEfP41UZmt/0SCoVYUcU1rkXv+BQ5Ig8ndL4sPoJNBUJERafdPb5jjHJGuMgytgKvKIf58XNBw==", + "node_modules/p-filter/node_modules/p-map": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/p-map/-/p-map-2.1.0.tgz", + "integrity": "sha512-y3b8Kpd8OAN444hxfBbFfj1FY/RjtTd8tzYwhUqNYXx0fXx2iX4maP4Qr6qhIKbQXI02wTLAda4fYUbDagTUFw==", "dev": true, + "license": "MIT", "engines": { - "node": ">= 0.10.0" + "node": ">=6" } }, - "node_modules/meow": { - "version": "12.1.1", - "resolved": "https://registry.npmjs.org/meow/-/meow-12.1.1.tgz", - "integrity": "sha512-BhXM0Au22RwUneMPwSCnyhTOizdWoIEPU9sp0Aqa1PnDMR5Wv2FGXYDjuzJEIX+Eo2Rb8xuYe5jrnm5QowQFkw==", - "dev": true, + "node_modules/p-finally": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/p-finally/-/p-finally-1.0.0.tgz", + "integrity": "sha512-LICb2p9CB7FS+0eR1oqWnHhp0FljGLZCWBE9aix0Uye9W8LTQPwMTYVGWQWIw9RdQiDg4+epXQODwIYJtSJaow==", "license": "MIT", "engines": { - "node": ">=16.10" + "node": ">=4" + } + }, + "node_modules/p-limit": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", + "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", + "license": "MIT", + "dependencies": { + "p-try": "^2.0.0" + }, + "engines": { + "node": ">=6" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/merge-descriptors": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-2.0.0.tgz", - "integrity": "sha512-Snk314V5ayFLhp3fkUREub6WtjBfPdCPY1Ln8/8munuLuiYhsABgBVWsozAG+MWMbVEvcdcpbi9R7ww22l9Q3g==", + "node_modules/p-locate": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", + "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", + "dev": true, "license": "MIT", - "peer": true, + "dependencies": { + "p-limit": "^3.0.2" + }, "engines": { - "node": ">=18" + "node": ">=10" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/merge-stream": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", - "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==", - "license": "MIT" - }, - "node_modules/merge2": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", - "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", + "node_modules/p-locate/node_modules/p-limit": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", + "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", "dev": true, "license": "MIT", + "dependencies": { + "yocto-queue": "^0.1.0" + }, "engines": { - "node": ">= 8" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/methods": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", - "integrity": "sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w==", + "node_modules/p-locate/node_modules/yocto-queue": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", + "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", + "dev": true, "license": "MIT", "engines": { - "node": ">= 0.6" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/metro": { - "version": "0.83.3", - "resolved": "https://registry.npmjs.org/metro/-/metro-0.83.3.tgz", - "integrity": "sha512-+rP+/GieOzkt97hSJ0MrPOuAH/jpaS21ZDvL9DJ35QYRDlQcwzcvUlGUf79AnQxq/2NPiS/AULhhM4TKutIt8Q==", + "node_modules/p-map": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/p-map/-/p-map-4.0.0.tgz", + "integrity": "sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ==", "license": "MIT", - "peer": true, - "dependencies": { - "@babel/code-frame": "^7.24.7", - "@babel/core": "^7.25.2", - "@babel/generator": "^7.25.0", - "@babel/parser": "^7.25.3", - "@babel/template": "^7.25.0", - "@babel/traverse": "^7.25.3", - "@babel/types": "^7.25.2", - "accepts": "^1.3.7", - "chalk": "^4.0.0", - "ci-info": "^2.0.0", - "connect": "^3.6.5", - "debug": "^4.4.0", - "error-stack-parser": "^2.0.6", - "flow-enums-runtime": "^0.0.6", - "graceful-fs": "^4.2.4", - "hermes-parser": "0.32.0", - "image-size": "^1.0.2", - "invariant": "^2.2.4", - "jest-worker": "^29.7.0", - "jsc-safe-url": "^0.2.2", - "lodash.throttle": "^4.1.1", - "metro-babel-transformer": "0.83.3", - "metro-cache": "0.83.3", - "metro-cache-key": "0.83.3", - "metro-config": "0.83.3", - "metro-core": "0.83.3", - "metro-file-map": "0.83.3", - "metro-resolver": "0.83.3", - "metro-runtime": "0.83.3", - "metro-source-map": "0.83.3", - "metro-symbolicate": "0.83.3", - "metro-transform-plugins": "0.83.3", - "metro-transform-worker": "0.83.3", - "mime-types": "^2.1.27", - "nullthrows": "^1.1.1", - "serialize-error": "^2.1.0", - "source-map": "^0.5.6", - "throat": "^5.0.0", - "ws": "^7.5.10", - "yargs": "^17.6.2" - }, - "bin": { - "metro": "src/cli.js" + "dependencies": { + "aggregate-error": "^3.0.0" }, "engines": { - "node": ">=20.19.4" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/metro-babel-transformer": { - "version": "0.83.3", - "resolved": "https://registry.npmjs.org/metro-babel-transformer/-/metro-babel-transformer-0.83.3.tgz", - "integrity": "sha512-1vxlvj2yY24ES1O5RsSIvg4a4WeL7PFXgKOHvXTXiW0deLvQr28ExXj6LjwCCDZ4YZLhq6HddLpZnX4dEdSq5g==", + "node_modules/p-queue": { + "version": "6.6.2", + "resolved": "https://registry.npmjs.org/p-queue/-/p-queue-6.6.2.tgz", + "integrity": "sha512-RwFpb72c/BhQLEXIZ5K2e+AhgNVmIejGlTgiB9MzZ0e93GRvqZ7uSi0dvRF7/XIXDeNkra2fNHBxTyPDGySpjQ==", "license": "MIT", - "peer": true, "dependencies": { - "@babel/core": "^7.25.2", - "flow-enums-runtime": "^0.0.6", - "hermes-parser": "0.32.0", - "nullthrows": "^1.1.1" + "eventemitter3": "^4.0.4", + "p-timeout": "^3.2.0" }, "engines": { - "node": ">=20.19.4" + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/metro-babel-transformer/node_modules/hermes-estree": { - "version": "0.32.0", - "resolved": "https://registry.npmjs.org/hermes-estree/-/hermes-estree-0.32.0.tgz", - "integrity": "sha512-KWn3BqnlDOl97Xe1Yviur6NbgIZ+IP+UVSpshlZWkq+EtoHg6/cwiDj/osP9PCEgFE15KBm1O55JRwbMEm5ejQ==", - "license": "MIT", - "peer": true + "node_modules/p-queue/node_modules/eventemitter3": { + "version": "4.0.7", + "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.7.tgz", + "integrity": "sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==", + "license": "MIT" }, - "node_modules/metro-babel-transformer/node_modules/hermes-parser": { - "version": "0.32.0", - "resolved": "https://registry.npmjs.org/hermes-parser/-/hermes-parser-0.32.0.tgz", - "integrity": "sha512-g4nBOWFpuiTqjR3LZdRxKUkij9iyveWeuks7INEsMX741f3r9xxrOe8TeQfUxtda0eXmiIFiMQzoeSQEno33Hw==", + "node_modules/p-retry": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/p-retry/-/p-retry-6.2.1.tgz", + "integrity": "sha512-hEt02O4hUct5wtwg4H4KcWgDdm+l1bOaEy/hWzd8xtXB9BqxTWBBhb+2ImAtH4Cv4rPjV76xN3Zumqk3k3AhhQ==", "license": "MIT", - "peer": true, "dependencies": { - "hermes-estree": "0.32.0" + "@types/retry": "0.12.2", + "is-network-error": "^1.0.0", + "retry": "^0.13.1" + }, + "engines": { + "node": ">=16.17" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/metro-cache": { - "version": "0.83.3", - "resolved": "https://registry.npmjs.org/metro-cache/-/metro-cache-0.83.3.tgz", - "integrity": "sha512-3jo65X515mQJvKqK3vWRblxDEcgY55Sk3w4xa6LlfEXgQ9g1WgMh9m4qVZVwgcHoLy0a2HENTPCCX4Pk6s8c8Q==", + "node_modules/p-timeout": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/p-timeout/-/p-timeout-3.2.0.tgz", + "integrity": "sha512-rhIwUycgwwKcP9yTOOFK/AKsAopjjCakVqLHePO3CC6Mir1Z99xT+R63jZxAT5lFZLa2inS5h+ZS2GvR99/FBg==", "license": "MIT", - "peer": true, "dependencies": { - "exponential-backoff": "^3.1.1", - "flow-enums-runtime": "^0.0.6", - "https-proxy-agent": "^7.0.5", - "metro-core": "0.83.3" + "p-finally": "^1.0.0" }, "engines": { - "node": ">=20.19.4" + "node": ">=8" } }, - "node_modules/metro-cache-key": { - "version": "0.83.3", - "resolved": "https://registry.npmjs.org/metro-cache-key/-/metro-cache-key-0.83.3.tgz", - "integrity": "sha512-59ZO049jKzSmvBmG/B5bZ6/dztP0ilp0o988nc6dpaDsU05Cl1c/lRf+yx8m9WW/JVgbmfO5MziBU559XjI5Zw==", + "node_modules/p-try": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", + "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", "license": "MIT", - "peer": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/package-hash": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/package-hash/-/package-hash-4.0.0.tgz", + "integrity": "sha512-whdkPIooSu/bASggZ96BWVvZTRMOFxnyUG5PnTSGKoJE2gd5mbVNmR2Nj20QFzxYYgAXpoqC+AiXzl+UMRh7zQ==", + "dev": true, + "license": "ISC", "dependencies": { - "flow-enums-runtime": "^0.0.6" + "graceful-fs": "^4.1.15", + "hasha": "^5.0.0", + "lodash.flattendeep": "^4.4.0", + "release-zalgo": "^1.0.0" }, "engines": { - "node": ">=20.19.4" + "node": ">=8" } }, - "node_modules/metro-cache/node_modules/agent-base": { - "version": "7.1.4", - "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-7.1.4.tgz", - "integrity": "sha512-MnA+YT8fwfJPgBx3m60MNqakm30XOkyIoH1y6huTQvC0PwZG7ki8NacLBcrPbNoo8vEZy7Jpuk7+jMO+CUovTQ==", + "node_modules/package-json": { + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/package-json/-/package-json-8.1.1.tgz", + "integrity": "sha512-cbH9IAIJHNj9uXi196JVsRlt7cHKak6u/e6AkL/bkRelZ7rlL3X1YKxsZwa36xipOEKAsdtmaG6aAJoM1fx2zA==", "license": "MIT", - "peer": true, + "dependencies": { + "got": "^12.1.0", + "registry-auth-token": "^5.0.1", + "registry-url": "^6.0.0", + "semver": "^7.3.7" + }, "engines": { - "node": ">= 14" + "node": ">=14.16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/metro-cache/node_modules/https-proxy-agent": { - "version": "7.0.6", - "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-7.0.6.tgz", - "integrity": "sha512-vK9P5/iUfdl95AI+JVyUuIcVtd4ofvtrOr3HNtM2yxC9bnMbEdp3x01OhQNnjb8IJYi38VlTE3mBXwcfvywuSw==", - "license": "MIT", - "peer": true, - "dependencies": { - "agent-base": "^7.1.2", - "debug": "4" + "node_modules/package-json-from-dist": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/package-json-from-dist/-/package-json-from-dist-1.0.1.tgz", + "integrity": "sha512-UEZIS3/by4OC8vL3P2dTXRETpebLI2NiI5vIrjaD/5UtrkFX/tNbwjTSRAGC/+7CAo2pIcBaRgWmcBBHcsaCIw==", + "license": "BlueOak-1.0.0" + }, + "node_modules/package-json/node_modules/semver": { + "version": "7.7.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.2.tgz", + "integrity": "sha512-RF0Fw+rO5AMf9MAyaRXI4AV0Ulj5lMHqVxxdSgiVbixSCXoEmmX/jk0CuJw4+3SqroYO9VoUh+HcuJivvtJemA==", + "license": "ISC", + "bin": { + "semver": "bin/semver.js" }, "engines": { - "node": ">= 14" + "node": ">=10" } }, - "node_modules/metro-config": { - "version": "0.83.3", - "resolved": "https://registry.npmjs.org/metro-config/-/metro-config-0.83.3.tgz", - "integrity": "sha512-mTel7ipT0yNjKILIan04bkJkuCzUUkm2SeEaTads8VfEecCh+ltXchdq6DovXJqzQAXuR2P9cxZB47Lg4klriA==", + "node_modules/package-manager-detector": { + "version": "0.2.11", + "resolved": "https://registry.npmjs.org/package-manager-detector/-/package-manager-detector-0.2.11.tgz", + "integrity": "sha512-BEnLolu+yuz22S56CU1SUKq3XC3PkwD5wv4ikR4MfGvnRVcmzXR9DwSlW2fEamyTPyXHomBJRzgapeuBvRNzJQ==", + "dev": true, "license": "MIT", - "peer": true, "dependencies": { - "connect": "^3.6.5", - "flow-enums-runtime": "^0.0.6", - "jest-validate": "^29.7.0", - "metro": "0.83.3", - "metro-cache": "0.83.3", - "metro-core": "0.83.3", - "metro-runtime": "0.83.3", - "yaml": "^2.6.1" + "quansync": "^0.2.7" + } + }, + "node_modules/pako": { + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/pako/-/pako-1.0.11.tgz", + "integrity": "sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw==", + "dev": true, + "license": "(MIT AND Zlib)" + }, + "node_modules/param-case": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/param-case/-/param-case-3.0.4.tgz", + "integrity": "sha512-RXlj7zCYokReqWpOPH9oYivUzLYZ5vAPIfEmCTNViosC78F8F0H9y7T7gG2M39ymgutxF5gcFEsyZQSph9Bp3A==", + "license": "MIT", + "dependencies": { + "dot-case": "^3.0.4", + "tslib": "^2.0.3" + } + }, + "node_modules/parent-module": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", + "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", + "license": "MIT", + "dependencies": { + "callsites": "^3.0.0" }, "engines": { - "node": ">=20.19.4" + "node": ">=6" } }, - "node_modules/metro-core": { - "version": "0.83.3", - "resolved": "https://registry.npmjs.org/metro-core/-/metro-core-0.83.3.tgz", - "integrity": "sha512-M+X59lm7oBmJZamc96usuF1kusd5YimqG/q97g4Ac7slnJ3YiGglW5CsOlicTR5EWf8MQFxxjDoB6ytTqRe8Hw==", - "license": "MIT", - "peer": true, + "node_modules/parse-asn1": { + "version": "5.1.9", + "resolved": "https://registry.npmjs.org/parse-asn1/-/parse-asn1-5.1.9.tgz", + "integrity": "sha512-fIYNuZ/HastSb80baGOuPRo1O9cf4baWw5WsAp7dBuUzeTD/BoaG8sVTdlPFksBE2lF21dN+A1AnrpIjSWqHHg==", + "dev": true, + "license": "ISC", "dependencies": { - "flow-enums-runtime": "^0.0.6", - "lodash.throttle": "^4.1.1", - "metro-resolver": "0.83.3" + "asn1.js": "^4.10.1", + "browserify-aes": "^1.2.0", + "evp_bytestokey": "^1.0.3", + "pbkdf2": "^3.1.5", + "safe-buffer": "^5.2.1" }, "engines": { - "node": ">=20.19.4" + "node": ">= 0.10" } }, - "node_modules/metro-file-map": { - "version": "0.83.3", - "resolved": "https://registry.npmjs.org/metro-file-map/-/metro-file-map-0.83.3.tgz", - "integrity": "sha512-jg5AcyE0Q9Xbbu/4NAwwZkmQn7doJCKGW0SLeSJmzNB9Z24jBe0AL2PHNMy4eu0JiKtNWHz9IiONGZWq7hjVTA==", + "node_modules/parse-cache-control": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/parse-cache-control/-/parse-cache-control-1.0.1.tgz", + "integrity": "sha512-60zvsJReQPX5/QP0Kzfd/VrpjScIQ7SHBW6bFCYfEP+fp0Eppr1SHhIO5nd1PjZtvclzSzES9D/p5nFJurwfWg==", + "dev": true + }, + "node_modules/parse-entities": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/parse-entities/-/parse-entities-2.0.0.tgz", + "integrity": "sha512-kkywGpCcRYhqQIchaWqZ875wzpS/bMKhz5HnN3p7wveJTkTtyAB/AlnS0f8DFSqYW1T82t6yEAkEcB+A1I3MbQ==", "license": "MIT", - "peer": true, "dependencies": { - "debug": "^4.4.0", - "fb-watchman": "^2.0.0", - "flow-enums-runtime": "^0.0.6", - "graceful-fs": "^4.2.4", - "invariant": "^2.2.4", - "jest-worker": "^29.7.0", - "micromatch": "^4.0.4", - "nullthrows": "^1.1.1", - "walker": "^1.0.7" + "character-entities": "^1.0.0", + "character-entities-legacy": "^1.0.0", + "character-reference-invalid": "^1.0.0", + "is-alphanumerical": "^1.0.0", + "is-decimal": "^1.0.0", + "is-hexadecimal": "^1.0.0" }, - "engines": { - "node": ">=20.19.4" + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" } }, - "node_modules/metro-minify-terser": { - "version": "0.83.3", - "resolved": "https://registry.npmjs.org/metro-minify-terser/-/metro-minify-terser-0.83.3.tgz", - "integrity": "sha512-O2BmfWj6FSfzBLrNCXt/rr2VYZdX5i6444QJU0fFoc7Ljg+Q+iqebwE3K0eTvkI6TRjELsXk1cjU+fXwAR4OjQ==", + "node_modules/parse-json": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz", + "integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==", "license": "MIT", - "peer": true, "dependencies": { - "flow-enums-runtime": "^0.0.6", - "terser": "^5.15.0" + "@babel/code-frame": "^7.0.0", + "error-ex": "^1.3.1", + "json-parse-even-better-errors": "^2.3.0", + "lines-and-columns": "^1.1.6" }, "engines": { - "node": ">=20.19.4" + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/metro-resolver": { - "version": "0.83.3", - "resolved": "https://registry.npmjs.org/metro-resolver/-/metro-resolver-0.83.3.tgz", - "integrity": "sha512-0js+zwI5flFxb1ktmR///bxHYg7OLpRpWZlBBruYG8OKYxeMP7SV0xQ/o/hUelrEMdK4LJzqVtHAhBm25LVfAQ==", + "node_modules/parse-numeric-range": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/parse-numeric-range/-/parse-numeric-range-1.3.0.tgz", + "integrity": "sha512-twN+njEipszzlMJd4ONUYgSfZPDxgHhT9Ahed5uTigpQn90FggW4SA/AIPq/6a149fTbE9qBEcSwE3FAEp6wQQ==", + "license": "ISC" + }, + "node_modules/parse5": { + "version": "7.3.0", + "resolved": "https://registry.npmjs.org/parse5/-/parse5-7.3.0.tgz", + "integrity": "sha512-IInvU7fabl34qmi9gY8XOVxhYyMyuH2xUNpb2q8/Y+7552KlejkRvqvD19nMoUW/uQGGbqNpA6Tufu5FL5BZgw==", "license": "MIT", - "peer": true, "dependencies": { - "flow-enums-runtime": "^0.0.6" + "entities": "^6.0.0" }, - "engines": { - "node": ">=20.19.4" + "funding": { + "url": "https://github.com/inikulin/parse5?sponsor=1" } }, - "node_modules/metro-runtime": { - "version": "0.83.3", - "resolved": "https://registry.npmjs.org/metro-runtime/-/metro-runtime-0.83.3.tgz", - "integrity": "sha512-JHCJb9ebr9rfJ+LcssFYA2x1qPYuSD/bbePupIGhpMrsla7RCwC/VL3yJ9cSU+nUhU4c9Ixxy8tBta+JbDeZWw==", + "node_modules/parse5-htmlparser2-tree-adapter": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/parse5-htmlparser2-tree-adapter/-/parse5-htmlparser2-tree-adapter-7.1.0.tgz", + "integrity": "sha512-ruw5xyKs6lrpo9x9rCZqZZnIUntICjQAd0Wsmp396Ul9lN/h+ifgVV1x1gZHi8euej6wTfpqX8j+BFQxF0NS/g==", "license": "MIT", - "peer": true, "dependencies": { - "@babel/runtime": "^7.25.0", - "flow-enums-runtime": "^0.0.6" + "domhandler": "^5.0.3", + "parse5": "^7.0.0" }, + "funding": { + "url": "https://github.com/inikulin/parse5?sponsor=1" + } + }, + "node_modules/parseurl": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", + "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==", + "license": "MIT", "engines": { - "node": ">=20.19.4" + "node": ">= 0.8" } }, - "node_modules/metro-source-map": { - "version": "0.83.3", - "resolved": "https://registry.npmjs.org/metro-source-map/-/metro-source-map-0.83.3.tgz", - "integrity": "sha512-xkC3qwUBh2psVZgVavo8+r2C9Igkk3DibiOXSAht1aYRRcztEZNFtAMtfSB7sdO2iFMx2Mlyu++cBxz/fhdzQg==", + "node_modules/pascal-case": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/pascal-case/-/pascal-case-3.1.2.tgz", + "integrity": "sha512-uWlGT3YSnK9x3BQJaOdcZwrnV6hPpd8jFH1/ucpiLRPh/2zCVJKS19E4GvYHvaCcACn3foXZ0cLB9Wrx1KGe5g==", "license": "MIT", - "peer": true, "dependencies": { - "@babel/traverse": "^7.25.3", - "@babel/traverse--for-generate-function-map": "npm:@babel/traverse@^7.25.3", - "@babel/types": "^7.25.2", - "flow-enums-runtime": "^0.0.6", - "invariant": "^2.2.4", - "metro-symbolicate": "0.83.3", - "nullthrows": "^1.1.1", - "ob1": "0.83.3", - "source-map": "^0.5.6", - "vlq": "^1.0.0" - }, + "no-case": "^3.0.4", + "tslib": "^2.0.3" + } + }, + "node_modules/path-browserify": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/path-browserify/-/path-browserify-1.0.1.tgz", + "integrity": "sha512-b7uo2UCUOYZcnF/3ID0lulOJi/bafxa1xPe7ZPsammBSpjSWQkjNxlt635YGS2MiR9GjvuXCtz2emr3jbsz98g==", + "dev": true, + "license": "MIT" + }, + "node_modules/path-data-parser": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/path-data-parser/-/path-data-parser-0.1.0.tgz", + "integrity": "sha512-NOnmBpt5Y2RWbuv0LMzsayp3lVylAHLPUTut412ZA3l+C4uw4ZVkQbjShYCQ8TCpUMdPapr4YjUqLYD6v68j+w==", + "license": "MIT" + }, + "node_modules/path-exists": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", + "license": "MIT", "engines": { - "node": ">=20.19.4" + "node": ">=8" } }, - "node_modules/metro-symbolicate": { - "version": "0.83.3", - "resolved": "https://registry.npmjs.org/metro-symbolicate/-/metro-symbolicate-0.83.3.tgz", - "integrity": "sha512-F/YChgKd6KbFK3eUR5HdUsfBqVsanf5lNTwFd4Ca7uuxnHgBC3kR/Hba/RGkenR3pZaGNp5Bu9ZqqP52Wyhomw==", + "node_modules/path-is-absolute": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", + "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", "license": "MIT", - "peer": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/path-is-inside": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/path-is-inside/-/path-is-inside-1.0.2.tgz", + "integrity": "sha512-DUWJr3+ULp4zXmol/SZkFf3JGsS9/SIv+Y3Rt93/UjPpDpklB5f1er4O3POIbUuUJ3FXgqte2Q7SrU6zAqwk8w==", + "license": "(WTFPL OR MIT)" + }, + "node_modules/path-key": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/path-parse": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", + "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", + "license": "MIT" + }, + "node_modules/path-scurry": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-2.0.0.tgz", + "integrity": "sha512-ypGJsmGtdXUOeM5u93TyeIEfEhM6s+ljAhrk5vAvSx8uyY/02OvrZnA0YNGUrPXfpJMgI1ODd3nwz8Npx4O4cg==", + "dev": true, + "license": "BlueOak-1.0.0", "dependencies": { - "flow-enums-runtime": "^0.0.6", - "invariant": "^2.2.4", - "metro-source-map": "0.83.3", - "nullthrows": "^1.1.1", - "source-map": "^0.5.6", - "vlq": "^1.0.0" + "lru-cache": "^11.0.0", + "minipass": "^7.1.2" }, - "bin": { - "metro-symbolicate": "src/index.js" + "engines": { + "node": "20 || >=22" }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/path-scurry/node_modules/lru-cache": { + "version": "11.2.2", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-11.2.2.tgz", + "integrity": "sha512-F9ODfyqML2coTIsQpSkRHnLSZMtkU8Q+mSfcaIyKwy58u+8k5nvAYeiNhsyMARvzNcXJ9QfWVrcPsC9e9rAxtg==", + "dev": true, + "license": "ISC", "engines": { - "node": ">=20.19.4" + "node": "20 || >=22" } }, - "node_modules/metro-transform-plugins": { - "version": "0.83.3", - "resolved": "https://registry.npmjs.org/metro-transform-plugins/-/metro-transform-plugins-0.83.3.tgz", - "integrity": "sha512-eRGoKJU6jmqOakBMH5kUB7VitEWiNrDzBHpYbkBXW7C5fUGeOd2CyqrosEzbMK5VMiZYyOcNFEphvxk3OXey2A==", + "node_modules/path-starts-with": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/path-starts-with/-/path-starts-with-2.0.1.tgz", + "integrity": "sha512-wZ3AeiRBRlNwkdUxvBANh0+esnt38DLffHDujZyRHkqkaKHTglnY2EP5UX3b8rdeiSutgO4y9NEJwXezNP5vHg==", + "dev": true, "license": "MIT", - "peer": true, - "dependencies": { - "@babel/core": "^7.25.2", - "@babel/generator": "^7.25.0", - "@babel/template": "^7.25.0", - "@babel/traverse": "^7.25.3", - "flow-enums-runtime": "^0.0.6", - "nullthrows": "^1.1.1" - }, "engines": { - "node": ">=20.19.4" + "node": ">=8" } }, - "node_modules/metro-transform-worker": { - "version": "0.83.3", - "resolved": "https://registry.npmjs.org/metro-transform-worker/-/metro-transform-worker-0.83.3.tgz", - "integrity": "sha512-Ztekew9t/gOIMZX1tvJOgX7KlSLL5kWykl0Iwu2cL2vKMKVALRl1hysyhUw0vjpAvLFx+Kfq9VLjnHIkW32fPA==", + "node_modules/path-to-regexp": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-3.2.0.tgz", + "integrity": "sha512-jczvQbCUS7XmS7o+y1aEO9OBVFeZBQ1MDSEqmO7xSoPgOPoowY/SxLpZ6Vh97/8qHZOteiCKb7gkG9gA2ZUxJA==", + "license": "MIT" + }, + "node_modules/path-type": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", + "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/pathe": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/pathe/-/pathe-1.1.2.tgz", + "integrity": "sha512-whLdWMYL2TwI08hn8/ZqAbrVemu0LNaNNJZX73O6qaIdCTfXutsLhMkjdENX0qhsQ9uIimo4/aQOmXkoon2nDQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/pathval": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/pathval/-/pathval-1.1.1.tgz", + "integrity": "sha512-Dp6zGqpTdETdR63lehJYPeIOqpiNBNtc7BpWSLrOje7UaIsE5aY92r/AunQA7rsXvet3lrJ3JnZX29UPTKXyKQ==", + "license": "MIT", + "engines": { + "node": "*" + } + }, + "node_modules/pbkdf2": { + "version": "3.1.5", + "resolved": "https://registry.npmjs.org/pbkdf2/-/pbkdf2-3.1.5.tgz", + "integrity": "sha512-Q3CG/cYvCO1ye4QKkuH7EXxs3VC/rI1/trd+qX2+PolbaKG0H+bgcZzrTt96mMyRtejk+JMCiLUn3y29W8qmFQ==", "license": "MIT", - "peer": true, "dependencies": { - "@babel/core": "^7.25.2", - "@babel/generator": "^7.25.0", - "@babel/parser": "^7.25.3", - "@babel/types": "^7.25.2", - "flow-enums-runtime": "^0.0.6", - "metro": "0.83.3", - "metro-babel-transformer": "0.83.3", - "metro-cache": "0.83.3", - "metro-cache-key": "0.83.3", - "metro-minify-terser": "0.83.3", - "metro-source-map": "0.83.3", - "metro-transform-plugins": "0.83.3", - "nullthrows": "^1.1.1" + "create-hash": "^1.2.0", + "create-hmac": "^1.1.7", + "ripemd160": "^2.0.3", + "safe-buffer": "^5.2.1", + "sha.js": "^2.4.12", + "to-buffer": "^1.2.1" }, "engines": { - "node": ">=20.19.4" + "node": ">= 0.10" } }, - "node_modules/metro/node_modules/accepts": { - "version": "1.3.8", - "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.8.tgz", - "integrity": "sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==", + "node_modules/pg": { + "version": "8.16.0", + "resolved": "https://registry.npmjs.org/pg/-/pg-8.16.0.tgz", + "integrity": "sha512-7SKfdvP8CTNXjMUzfcVTaI+TDzBEeaUnVwiVGZQD1Hh33Kpev7liQba9uLd4CfN8r9mCVsD0JIpq03+Unpz+kg==", "license": "MIT", "peer": true, "dependencies": { - "mime-types": "~2.1.34", - "negotiator": "0.6.3" + "pg-connection-string": "^2.9.0", + "pg-pool": "^3.10.0", + "pg-protocol": "^1.10.0", + "pg-types": "2.2.0", + "pgpass": "1.0.5" }, "engines": { - "node": ">= 0.6" + "node": ">= 8.0.0" + }, + "optionalDependencies": { + "pg-cloudflare": "^1.2.5" + }, + "peerDependencies": { + "pg-native": ">=3.0.1" + }, + "peerDependenciesMeta": { + "pg-native": { + "optional": true + } } }, - "node_modules/metro/node_modules/ci-info": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-2.0.0.tgz", - "integrity": "sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ==", + "node_modules/pg-cloudflare": { + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/pg-cloudflare/-/pg-cloudflare-1.2.7.tgz", + "integrity": "sha512-YgCtzMH0ptvZJslLM1ffsY4EuGaU0cx4XSdXLRFae8bPP4dS5xL1tNB3k2o/N64cHJpwU7dxKli/nZ2lUa5fLg==", "license": "MIT", - "peer": true + "optional": true }, - "node_modules/metro/node_modules/hermes-estree": { - "version": "0.32.0", - "resolved": "https://registry.npmjs.org/hermes-estree/-/hermes-estree-0.32.0.tgz", - "integrity": "sha512-KWn3BqnlDOl97Xe1Yviur6NbgIZ+IP+UVSpshlZWkq+EtoHg6/cwiDj/osP9PCEgFE15KBm1O55JRwbMEm5ejQ==", - "license": "MIT", - "peer": true + "node_modules/pg-connection-string": { + "version": "2.9.1", + "resolved": "https://registry.npmjs.org/pg-connection-string/-/pg-connection-string-2.9.1.tgz", + "integrity": "sha512-nkc6NpDcvPVpZXxrreI/FOtX3XemeLl8E0qFr6F2Lrm/I8WOnaWNhIPK2Z7OHpw7gh5XJThi6j6ppgNoaT1w4w==", + "license": "MIT" }, - "node_modules/metro/node_modules/hermes-parser": { - "version": "0.32.0", - "resolved": "https://registry.npmjs.org/hermes-parser/-/hermes-parser-0.32.0.tgz", - "integrity": "sha512-g4nBOWFpuiTqjR3LZdRxKUkij9iyveWeuks7INEsMX741f3r9xxrOe8TeQfUxtda0eXmiIFiMQzoeSQEno33Hw==", - "license": "MIT", - "peer": true, - "dependencies": { - "hermes-estree": "0.32.0" + "node_modules/pg-int8": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/pg-int8/-/pg-int8-1.0.1.tgz", + "integrity": "sha512-WCtabS6t3c8SkpDBUlb1kjOs7l66xsGdKpIPZsg4wR+B3+u9UAum2odSsF9tnvxg80h4ZxLWMy4pRjOsFIqQpw==", + "license": "ISC", + "engines": { + "node": ">=4.0.0" } }, - "node_modules/metro/node_modules/mime-db": { - "version": "1.52.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", - "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", + "node_modules/pg-pool": { + "version": "3.10.1", + "resolved": "https://registry.npmjs.org/pg-pool/-/pg-pool-3.10.1.tgz", + "integrity": "sha512-Tu8jMlcX+9d8+QVzKIvM/uJtp07PKr82IUOYEphaWcoBhIYkoHpLXN3qO59nAI11ripznDsEzEv8nUxBVWajGg==", "license": "MIT", - "peer": true, - "engines": { - "node": ">= 0.6" + "peerDependencies": { + "pg": ">=8.0" } }, - "node_modules/metro/node_modules/mime-types": { - "version": "2.1.35", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", - "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", + "node_modules/pg-protocol": { + "version": "1.10.3", + "resolved": "https://registry.npmjs.org/pg-protocol/-/pg-protocol-1.10.3.tgz", + "integrity": "sha512-6DIBgBQaTKDJyxnXaLiLR8wBpQQcGWuAESkRBX/t6OwA8YsqP+iVSiond2EDy6Y/dsGk8rh/jtax3js5NeV7JQ==", + "license": "MIT" + }, + "node_modules/pg-types": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/pg-types/-/pg-types-2.2.0.tgz", + "integrity": "sha512-qTAAlrEsl8s4OiEQY69wDvcMIdQN6wdz5ojQiOy6YRMuynxenON0O5oCpJI6lshc6scgAY8qvJ2On/p+CXY0GA==", "license": "MIT", - "peer": true, "dependencies": { - "mime-db": "1.52.0" + "pg-int8": "1.0.1", + "postgres-array": "~2.0.0", + "postgres-bytea": "~1.0.0", + "postgres-date": "~1.0.4", + "postgres-interval": "^1.1.0" }, "engines": { - "node": ">= 0.6" + "node": ">=4" } }, - "node_modules/metro/node_modules/negotiator": { - "version": "0.6.3", - "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz", - "integrity": "sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==", + "node_modules/pgpass": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/pgpass/-/pgpass-1.0.5.tgz", + "integrity": "sha512-FdW9r/jQZhSeohs1Z3sI1yxFQNFvMcnmfuj4WBMUTxOrAyLMaTcE1aAMBiTlbMNaXvBCQuVi0R7hd8udDSP7ug==", "license": "MIT", - "peer": true, - "engines": { - "node": ">= 0.6" + "dependencies": { + "split2": "^4.1.0" } }, - "node_modules/metro/node_modules/ws": { - "version": "7.5.10", - "resolved": "https://registry.npmjs.org/ws/-/ws-7.5.10.tgz", - "integrity": "sha512-+dbF1tHwZpXcbOJdVOkzLDxZP1ailvSxM6ZweXTegylPny803bFhA+vqBYw4s31NSAk4S2Qz+AKXK9a4wkdjcQ==", + "node_modules/picocolors": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz", + "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==", + "license": "ISC" + }, + "node_modules/picomatch": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-3.0.1.tgz", + "integrity": "sha512-I3EurrIQMlRc9IaAZnqRR044Phh2DXY+55o7uJ0V+hYZAcQYSuFWsc9q5PvyDHUSCe1Qxn/iBz+78s86zWnGag==", "license": "MIT", "peer": true, "engines": { - "node": ">=8.3.0" - }, - "peerDependencies": { - "bufferutil": "^4.0.1", - "utf-8-validate": "^5.0.2" + "node": ">=10" }, - "peerDependenciesMeta": { - "bufferutil": { - "optional": true - }, - "utf-8-validate": { - "optional": true - } - } - }, - "node_modules/micro-eth-signer": { - "version": "0.14.0", - "resolved": "https://registry.npmjs.org/micro-eth-signer/-/micro-eth-signer-0.14.0.tgz", - "integrity": "sha512-5PLLzHiVYPWClEvZIXXFu5yutzpadb73rnQCpUqIHu3No3coFuWQNfE5tkBQJ7djuLYl6aRLaS0MgWJYGoqiBw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@noble/curves": "~1.8.1", - "@noble/hashes": "~1.7.1", - "micro-packed": "~0.7.2" + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" } }, - "node_modules/micro-eth-signer/node_modules/@noble/curves": { - "version": "1.8.2", - "resolved": "https://registry.npmjs.org/@noble/curves/-/curves-1.8.2.tgz", - "integrity": "sha512-vnI7V6lFNe0tLAuJMu+2sX+FcL14TaCWy1qiczg1VwRmPrpQCdq5ESXQMqUc2tluRNf6irBXrWbl1mGN8uaU/g==", + "node_modules/pidtree": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/pidtree/-/pidtree-0.6.0.tgz", + "integrity": "sha512-eG2dWTVw5bzqGRztnHExczNxt5VGsE6OwTeCG3fdUf9KBsZzO3R5OIIIzWR+iZA0NtZ+RDVdaoE2dK1cn6jH4g==", "dev": true, "license": "MIT", - "dependencies": { - "@noble/hashes": "1.7.2" + "bin": { + "pidtree": "bin/pidtree.js" }, "engines": { - "node": "^14.21.3 || >=16" - }, - "funding": { - "url": "https://paulmillr.com/funding/" + "node": ">=0.10" } }, - "node_modules/micro-eth-signer/node_modules/@noble/hashes": { - "version": "1.7.2", - "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.7.2.tgz", - "integrity": "sha512-biZ0NUSxyjLLqo6KxEJ1b+C2NAx0wtDoFvCaXHGgUkeHzf3Xc1xKumFKREuT7f7DARNZ/slvYUwFG6B0f2b6hQ==", + "node_modules/pify": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", + "integrity": "sha512-C3FsVNH1udSEX48gGX1xfvwTWfsYWj5U+8/uK15BGzIGrKoUpghX8hWZwa/OFnakBiiVNmBvemTJR5mcy7iPcg==", "dev": true, "license": "MIT", "engines": { - "node": "^14.21.3 || >=16" - }, - "funding": { - "url": "https://paulmillr.com/funding/" + "node": ">=4" } }, - "node_modules/micro-ftch": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/micro-ftch/-/micro-ftch-0.3.1.tgz", - "integrity": "sha512-/0LLxhzP0tfiR5hcQebtudP56gUurs2CLkGarnCiB/OqEyUFQ6U3paQi/tgLv0hBJYt2rnr9MNpxz4fiiugstg==", - "license": "MIT" - }, - "node_modules/micro-packed": { - "version": "0.7.3", - "resolved": "https://registry.npmjs.org/micro-packed/-/micro-packed-0.7.3.tgz", - "integrity": "sha512-2Milxs+WNC00TRlem41oRswvw31146GiSaoCT7s3Xi2gMUglW5QBeqlQaZeHr5tJx9nm3i57LNXPqxOOaWtTYg==", - "dev": true, + "node_modules/pino": { + "version": "9.13.0", + "resolved": "https://registry.npmjs.org/pino/-/pino-9.13.0.tgz", + "integrity": "sha512-SpTXQhkQXekIKEe7c887S3lk3v90Q+/HVRZVyNAhe98PQc++6I5ec/R0pciH8/CciXjCoVZIZfRNicbC6KZgnw==", "license": "MIT", "dependencies": { - "@scure/base": "~1.2.5" + "atomic-sleep": "^1.0.0", + "on-exit-leak-free": "^2.1.0", + "pino-abstract-transport": "^2.0.0", + "pino-std-serializers": "^7.0.0", + "process-warning": "^5.0.0", + "quick-format-unescaped": "^4.0.3", + "real-require": "^0.2.0", + "safe-stable-stringify": "^2.3.1", + "slow-redact": "^0.3.0", + "sonic-boom": "^4.0.1", + "thread-stream": "^3.0.0" }, - "funding": { - "url": "https://paulmillr.com/funding/" + "bin": { + "pino": "bin.js" } }, - "node_modules/micromark": { - "version": "2.11.4", - "resolved": "https://registry.npmjs.org/micromark/-/micromark-2.11.4.tgz", - "integrity": "sha512-+WoovN/ppKolQOFIAajxi7Lu9kInbPxFuTBVEavFcL8eAfVstoc5MocPmqBeAdBOJV00uaVjegzH4+MA0DN/uA==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], + "node_modules/pino-abstract-transport": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/pino-abstract-transport/-/pino-abstract-transport-2.0.0.tgz", + "integrity": "sha512-F63x5tizV6WCh4R6RHyi2Ml+M70DNRXt/+HANowMflpgGFMAym/VKm6G7ZOQRjqN7XbGxK1Lg9t6ZrtzOaivMw==", "license": "MIT", "dependencies": { - "debug": "^4.0.0", - "parse-entities": "^2.0.0" + "split2": "^4.0.0" } }, - "node_modules/micromatch": { - "version": "4.0.8", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.8.tgz", - "integrity": "sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==", + "node_modules/pino-pretty": { + "version": "13.1.1", + "resolved": "https://registry.npmjs.org/pino-pretty/-/pino-pretty-13.1.1.tgz", + "integrity": "sha512-TNNEOg0eA0u+/WuqH0MH0Xui7uqVk9D74ESOpjtebSQYbNWJk/dIxCXIxFsNfeN53JmtWqYHP2OrIZjT/CBEnA==", "license": "MIT", "dependencies": { - "braces": "^3.0.3", - "picomatch": "^2.3.1" + "colorette": "^2.0.7", + "dateformat": "^4.6.3", + "fast-copy": "^3.0.2", + "fast-safe-stringify": "^2.1.1", + "help-me": "^5.0.0", + "joycon": "^3.1.1", + "minimist": "^1.2.6", + "on-exit-leak-free": "^2.1.0", + "pino-abstract-transport": "^2.0.0", + "pump": "^3.0.0", + "secure-json-parse": "^4.0.0", + "sonic-boom": "^4.0.1", + "strip-json-comments": "^5.0.2" }, - "engines": { - "node": ">=8.6" + "bin": { + "pino-pretty": "bin.js" } }, - "node_modules/micromatch/node_modules/picomatch": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", - "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "node_modules/pino-pretty/node_modules/strip-json-comments": { + "version": "5.0.3", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-5.0.3.tgz", + "integrity": "sha512-1tB5mhVo7U+ETBKNf92xT4hrQa3pm0MZ0PQvuDnWgAAGHDsfp4lPSpiS6psrSiet87wyGPh9ft6wmhOMQ0hDiw==", "license": "MIT", "engines": { - "node": ">=8.6" + "node": ">=14.16" }, "funding": { - "url": "https://github.com/sponsors/jonschlinkert" - } - }, - "node_modules/miller-rabin": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/miller-rabin/-/miller-rabin-4.0.1.tgz", - "integrity": "sha512-115fLhvZVqWwHPbClyntxEVfVDfl9DLLTuJvq3g2O/Oxi8AiNouAHvDSzHS0viUJc+V5vm3eq91Xwqn9dp4jRA==", - "dev": true, - "license": "MIT", - "dependencies": { - "bn.js": "^4.0.0", - "brorand": "^1.0.1" - }, - "bin": { - "miller-rabin": "bin/miller-rabin" + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/miller-rabin/node_modules/bn.js": { - "version": "4.12.2", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.2.tgz", - "integrity": "sha512-n4DSx829VRTRByMRGdjQ9iqsN0Bh4OolPsFnaZBLcbi8iXcB+kJ9s7EnRt4wILZNV3kPLHkRVfOc/HvhC3ovDw==", - "dev": true, + "node_modules/pino-std-serializers": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/pino-std-serializers/-/pino-std-serializers-7.0.0.tgz", + "integrity": "sha512-e906FRY0+tV27iq4juKzSYPbUj2do2X2JX4EzSca1631EB2QJQUqGbDuERal7LCtOpxl6x3+nvo9NPZcmjkiFA==", "license": "MIT" }, - "node_modules/mime": { - "version": "2.6.0", - "resolved": "https://registry.npmjs.org/mime/-/mime-2.6.0.tgz", - "integrity": "sha512-USPkMeET31rOMiarsBNIHZKLGgvKc/LrjofAnBlOttf5ajRvqiRA8QsenbcooctK6d6Ts6aqZXBA+XbkKthiQg==", - "dev": true, - "license": "MIT", - "bin": { - "mime": "cli.js" - }, - "engines": { - "node": ">=4.0.0" - } - }, - "node_modules/mime-db": { - "version": "1.54.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.54.0.tgz", - "integrity": "sha512-aU5EJuIN2WDemCcAp2vFBfp/m4EAhWJnUNSSw0ixs7/kXbd6Pg64EmwJkNdFhB8aWt1sH2CTXrLxo/iAGV3oPQ==", + "node_modules/pirates": { + "version": "4.0.7", + "resolved": "https://registry.npmjs.org/pirates/-/pirates-4.0.7.tgz", + "integrity": "sha512-TfySrs/5nm8fQJDcBDuUng3VOUKsd7S+zqvbOTiGXHfxX4wK31ard+hoNuvkicM/2YFzlpDgABOevKSsB4G/FA==", "license": "MIT", - "peer": true, "engines": { - "node": ">= 0.6" + "node": ">= 6" } }, - "node_modules/mime-types": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-3.0.1.tgz", - "integrity": "sha512-xRc4oEhT6eaBpU1XF7AjpOFD+xQmXNB5OVKwp4tqCuBpHLS/ZbBDrc07mYTDqVMg6PfxUjjNp85O6Cd2Z/5HWA==", + "node_modules/pkg-dir": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz", + "integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==", + "dev": true, "license": "MIT", - "peer": true, "dependencies": { - "mime-db": "^1.54.0" + "find-up": "^4.0.0" }, "engines": { - "node": ">= 0.6" + "node": ">=8" } }, - "node_modules/mimic-fn": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", - "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", + "node_modules/pkg-dir/node_modules/find-up": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", + "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", + "dev": true, "license": "MIT", + "dependencies": { + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" + }, "engines": { - "node": ">=6" + "node": ">=8" } }, - "node_modules/mimic-function": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/mimic-function/-/mimic-function-5.0.1.tgz", - "integrity": "sha512-VP79XUPxV2CigYP3jWwAUFSku2aKqBH7uTAapFWCBqutsbmDo96KY5o8uh6U+/YSIn5OxJnXp73beVkpqMIGhA==", + "node_modules/pkg-dir/node_modules/locate-path": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", + "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", "dev": true, "license": "MIT", - "engines": { - "node": ">=18" + "dependencies": { + "p-locate": "^4.1.0" }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "engines": { + "node": ">=8" } }, - "node_modules/mimic-response": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-4.0.0.tgz", - "integrity": "sha512-e5ISH9xMYU0DzrT+jl8q2ze9D6eWBto+I8CNpe+VI+K2J/F/k3PdkdTdz4wvGVH4NTpo+NRYTVIuMQEMMcsLqg==", + "node_modules/pkg-dir/node_modules/p-locate": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", + "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", "dev": true, "license": "MIT", - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + "dependencies": { + "p-limit": "^2.2.0" }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "engines": { + "node": ">=8" } }, - "node_modules/min-indent": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/min-indent/-/min-indent-1.0.1.tgz", - "integrity": "sha512-I9jwMn07Sy/IwOj3zVkVik2JTvgpaykDZEigL6Rx6N9LbMywwUSMtxET+7lVoDLLd3O3IXwJwvuuns8UB/HeAg==", - "dev": true, + "node_modules/pkg-types": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/pkg-types/-/pkg-types-1.3.1.tgz", + "integrity": "sha512-/Jm5M4RvtBFVkKWRu2BLUTNP8/M2a+UwuAX+ae4770q1qVGtfjG+WTCupoZixokjmHiry8uI+dlY8KXYV5HVVQ==", "license": "MIT", - "engines": { - "node": ">=4" + "dependencies": { + "confbox": "^0.1.8", + "mlly": "^1.7.4", + "pathe": "^2.0.1" } }, - "node_modules/minimalistic-assert": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz", - "integrity": "sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==", - "license": "ISC" + "node_modules/pkg-types/node_modules/pathe": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/pathe/-/pathe-2.0.3.tgz", + "integrity": "sha512-WUjGcAqP1gQacoQe+OBJsFA7Ld4DyXuUIjZ5cc75cLHvJ7dtNsTugphxIADwspS+AraAUePCKrSVtPLFj/F88w==", + "license": "MIT" }, - "node_modules/minimalistic-crypto-utils": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz", - "integrity": "sha512-JIYlbt6g8i5jKfJ3xz7rF0LXmv2TkDxBLUkiBeZ7bAx4GnnNMr8xFpGnOxn6GhTEHx3SjRrZEoU+j04prX1ktg==", + "node_modules/platform": { + "version": "1.3.6", + "resolved": "https://registry.npmjs.org/platform/-/platform-1.3.6.tgz", + "integrity": "sha512-fnWVljUchTro6RiCFvCXBbNhJc2NijN7oIQxbwsyL0buWJPG85v81ehlHI9fXrJsMNgTofEoWIQeClKpgxFLrg==", "license": "MIT" }, - "node_modules/minimatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", - "license": "ISC", + "node_modules/plimit-lit": { + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/plimit-lit/-/plimit-lit-1.6.1.tgz", + "integrity": "sha512-B7+VDyb8Tl6oMJT9oSO2CW8XC/T4UcJGrwOVoNGwOQsQYhlpfajmrMj5xeejqaASq3V/EqThyOeATEOMuSEXiA==", + "dev": true, + "license": "MIT", "dependencies": { - "brace-expansion": "^1.1.7" + "queue-lit": "^1.5.1" }, "engines": { - "node": "*" + "node": ">=12" } }, - "node_modules/minimist": { - "version": "1.2.8", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz", - "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==", + "node_modules/pluralize": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/pluralize/-/pluralize-8.0.0.tgz", + "integrity": "sha512-Nc3IT5yHzflTfbjgqWcCPpo7DaKy4FnpB0l/zCAW0Tc7jxAiuqSxHasntB3D7887LSrA93kDJ9IXovxJYxyLCA==", "license": "MIT", - "funding": { - "url": "https://github.com/sponsors/ljharb" + "engines": { + "node": ">=4" } }, - "node_modules/minipass": { - "version": "7.1.2", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.2.tgz", - "integrity": "sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==", - "license": "ISC", + "node_modules/pngjs": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/pngjs/-/pngjs-5.0.0.tgz", + "integrity": "sha512-40QW5YalBNfQo5yRYmiw7Yz6TKKVr3h6970B2YE+3fQpsWcrbj1PzJgxeJ19DRQjhMbKPIuMY8rFaXc8moolVw==", + "license": "MIT", "engines": { - "node": ">=16 || 14 >=14.17" + "node": ">=10.13.0" } }, - "node_modules/minizlib": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-2.1.2.tgz", - "integrity": "sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg==", + "node_modules/points-on-curve": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/points-on-curve/-/points-on-curve-0.2.0.tgz", + "integrity": "sha512-0mYKnYYe9ZcqMCWhUjItv/oHjvgEsfKvnUTg8sAtnHr3GVy7rGkXCb6d5cSyqrWqL4k81b9CPg3urd+T7aop3A==", + "license": "MIT" + }, + "node_modules/points-on-path": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/points-on-path/-/points-on-path-0.2.1.tgz", + "integrity": "sha512-25ClnWWuw7JbWZcgqY/gJ4FQWadKxGWk+3kR/7kD0tCaDtPPMj7oHu2ToLaVhfpnHrZzYby2w6tUA0eOIuUg8g==", "license": "MIT", - "optional": true, "dependencies": { - "minipass": "^3.0.0", - "yallist": "^4.0.0" - }, - "engines": { - "node": ">= 8" + "path-data-parser": "0.1.0", + "points-on-curve": "0.2.0" } }, - "node_modules/minizlib/node_modules/minipass": { - "version": "3.3.6", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", - "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", - "license": "ISC", - "optional": true, - "dependencies": { - "yallist": "^4.0.0" - }, + "node_modules/pony-cause": { + "version": "2.1.11", + "resolved": "https://registry.npmjs.org/pony-cause/-/pony-cause-2.1.11.tgz", + "integrity": "sha512-M7LhCsdNbNgiLYiP4WjsfLUuFmCfnjdF6jKe2R9NKl4WFN+HZPGHJZ9lnLP7f9ZnKe3U9nuWD0szirmj+migUg==", + "license": "0BSD", "engines": { - "node": ">=8" + "node": ">=12.0.0" } }, - "node_modules/minizlib/node_modules/yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", - "license": "ISC", - "optional": true - }, - "node_modules/mkdirp": { - "version": "0.5.6", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.6.tgz", - "integrity": "sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==", + "node_modules/possible-typed-array-names": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/possible-typed-array-names/-/possible-typed-array-names-1.1.0.tgz", + "integrity": "sha512-/+5VFTchJDoVj3bhoqi6UeymcD00DAwb1nJwamzPvHEszJ4FpF6SNNbUbOS8yI56qHzdV8eK0qEfOSiodkTdxg==", "license": "MIT", - "dependencies": { - "minimist": "^1.2.6" - }, - "bin": { - "mkdirp": "bin/cmd.js" + "engines": { + "node": ">= 0.4" } }, - "node_modules/mkdirp-classic": { - "version": "0.5.3", - "resolved": "https://registry.npmjs.org/mkdirp-classic/-/mkdirp-classic-0.5.3.tgz", - "integrity": "sha512-gKLcREMhtuZRwRAfqP3RFW+TK4JqApVBtOIftVgjuABpAtpxhPGaDcfvbhNvD0B8iD1oUr/txX35NjcaY6Ns/A==", - "dev": true, - "license": "MIT" - }, - "node_modules/mlly": { - "version": "1.8.0", - "resolved": "https://registry.npmjs.org/mlly/-/mlly-1.8.0.tgz", - "integrity": "sha512-l8D9ODSRWLe2KHJSifWGwBqpTZXIXTeo8mlKjY+E2HAakaTeNpqAyBZ8GSqLzHgw4XmHmC8whvpjJNMbFZN7/g==", - "dev": true, + "node_modules/postcss": { + "version": "8.5.6", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.6.tgz", + "integrity": "sha512-3Ybi1tAuwAP9s0r1UQ2J4n5Y0G05bJkpUIO0/bI9MhwmD70S5aTWbXGBwxHrelT+XM1k6dM0pk+SwNkpTRN7Pg==", + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/postcss" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], "license": "MIT", "dependencies": { - "acorn": "^8.15.0", - "pathe": "^2.0.3", - "pkg-types": "^1.3.1", - "ufo": "^1.6.1" + "nanoid": "^3.3.11", + "picocolors": "^1.1.1", + "source-map-js": "^1.2.1" + }, + "engines": { + "node": "^10 || ^12 || >=14" } }, - "node_modules/mlly/node_modules/pathe": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/pathe/-/pathe-2.0.3.tgz", - "integrity": "sha512-WUjGcAqP1gQacoQe+OBJsFA7Ld4DyXuUIjZ5cc75cLHvJ7dtNsTugphxIADwspS+AraAUePCKrSVtPLFj/F88w==", - "dev": true, - "license": "MIT" - }, - "node_modules/mnemonist": { - "version": "0.38.5", - "resolved": "https://registry.npmjs.org/mnemonist/-/mnemonist-0.38.5.tgz", - "integrity": "sha512-bZTFT5rrPKtPJxj8KSV0WkPyNxl72vQepqqVUAW2ARUpUSF2qXMB6jZj7hW5/k7C1rtpzqbD/IIbJwLXUjCHeg==", - "dev": true, + "node_modules/postcss-attribute-case-insensitive": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/postcss-attribute-case-insensitive/-/postcss-attribute-case-insensitive-7.0.1.tgz", + "integrity": "sha512-Uai+SupNSqzlschRyNx3kbCTWgY/2hcwtHEI/ej2LJWc9JJ77qKgGptd8DHwY1mXtZ7Aoh4z4yxfwMBue9eNgw==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], "license": "MIT", "dependencies": { - "obliterator": "^2.0.0" + "postcss-selector-parser": "^7.0.0" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "postcss": "^8.4" } }, - "node_modules/mocha": { - "version": "10.8.2", - "resolved": "https://registry.npmjs.org/mocha/-/mocha-10.8.2.tgz", - "integrity": "sha512-VZlYo/WE8t1tstuRmqgeyBgCbJc/lEdopaa+axcKzTBJ+UIdlAB9XnmvTCAH4pwR4ElNInaedhEBmZD8iCSVEg==", - "dev": true, + "node_modules/postcss-attribute-case-insensitive/node_modules/postcss-selector-parser": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-7.1.1.tgz", + "integrity": "sha512-orRsuYpJVw8LdAwqqLykBj9ecS5/cRHlI5+nvTo8LcCKmzDmqVORXtOIYEEQuL9D4BxtA1lm5isAqzQZCoQ6Eg==", "license": "MIT", "dependencies": { - "ansi-colors": "^4.1.3", - "browser-stdout": "^1.3.1", - "chokidar": "^3.5.3", - "debug": "^4.3.5", - "diff": "^5.2.0", - "escape-string-regexp": "^4.0.0", - "find-up": "^5.0.0", - "glob": "^8.1.0", - "he": "^1.2.0", - "js-yaml": "^4.1.0", - "log-symbols": "^4.1.0", - "minimatch": "^5.1.6", - "ms": "^2.1.3", - "serialize-javascript": "^6.0.2", - "strip-json-comments": "^3.1.1", - "supports-color": "^8.1.1", - "workerpool": "^6.5.1", - "yargs": "^16.2.0", - "yargs-parser": "^20.2.9", - "yargs-unparser": "^2.0.0" + "cssesc": "^3.0.0", + "util-deprecate": "^1.0.2" }, - "bin": { - "_mocha": "bin/_mocha", - "mocha": "bin/mocha.js" + "engines": { + "node": ">=4" + } + }, + "node_modules/postcss-calc": { + "version": "9.0.1", + "resolved": "https://registry.npmjs.org/postcss-calc/-/postcss-calc-9.0.1.tgz", + "integrity": "sha512-TipgjGyzP5QzEhsOZUaIkeO5mKeMFpebWzRogWG/ysonUlnHcq5aJe0jOjpfzUU8PeSaBQnrE8ehR0QA5vs8PQ==", + "license": "MIT", + "dependencies": { + "postcss-selector-parser": "^6.0.11", + "postcss-value-parser": "^4.2.0" }, "engines": { - "node": ">= 14.0.0" + "node": "^14 || ^16 || >=18.0" + }, + "peerDependencies": { + "postcss": "^8.2.2" } }, - "node_modules/mocha/node_modules/brace-expansion": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.2.tgz", - "integrity": "sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==", - "dev": true, + "node_modules/postcss-clamp": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/postcss-clamp/-/postcss-clamp-4.1.0.tgz", + "integrity": "sha512-ry4b1Llo/9zz+PKC+030KUnPITTJAHeOwjfAyyB60eT0AorGLdzp52s31OsPRHRf8NchkgFoG2y6fCfn1IV1Ow==", "license": "MIT", "dependencies": { - "balanced-match": "^1.0.0" + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": ">=7.6.0" + }, + "peerDependencies": { + "postcss": "^8.4.6" } }, - "node_modules/mocha/node_modules/cliui": { - "version": "7.0.4", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz", - "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==", - "dev": true, - "license": "ISC", + "node_modules/postcss-color-functional-notation": { + "version": "7.0.12", + "resolved": "https://registry.npmjs.org/postcss-color-functional-notation/-/postcss-color-functional-notation-7.0.12.tgz", + "integrity": "sha512-TLCW9fN5kvO/u38/uesdpbx3e8AkTYhMvDZYa9JpmImWuTE99bDQ7GU7hdOADIZsiI9/zuxfAJxny/khknp1Zw==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "license": "MIT-0", "dependencies": { - "string-width": "^4.2.0", - "strip-ansi": "^6.0.0", - "wrap-ansi": "^7.0.0" + "@csstools/css-color-parser": "^3.1.0", + "@csstools/css-parser-algorithms": "^3.0.5", + "@csstools/css-tokenizer": "^3.0.4", + "@csstools/postcss-progressive-custom-properties": "^4.2.1", + "@csstools/utilities": "^2.0.0" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "postcss": "^8.4" } }, - "node_modules/mocha/node_modules/glob": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/glob/-/glob-8.1.0.tgz", - "integrity": "sha512-r8hpEjiQEYlF2QU0df3dS+nxxSIreXQS1qRhMJM0Q5NDdR386C7jb7Hwwod8Fgiuex+k0GFjgft18yvxm5XoCQ==", - "deprecated": "Glob versions prior to v9 are no longer supported", - "dev": true, - "license": "ISC", + "node_modules/postcss-color-hex-alpha": { + "version": "10.0.0", + "resolved": "https://registry.npmjs.org/postcss-color-hex-alpha/-/postcss-color-hex-alpha-10.0.0.tgz", + "integrity": "sha512-1kervM2cnlgPs2a8Vt/Qbe5cQ++N7rkYo/2rz2BkqJZIHQwaVuJgQH38REHrAi4uM0b1fqxMkWYmese94iMp3w==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "license": "MIT", "dependencies": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^5.0.1", - "once": "^1.3.0" + "@csstools/utilities": "^2.0.0", + "postcss-value-parser": "^4.2.0" }, "engines": { - "node": ">=12" + "node": ">=18" }, - "funding": { - "url": "https://github.com/sponsors/isaacs" + "peerDependencies": { + "postcss": "^8.4" } }, - "node_modules/mocha/node_modules/minimatch": { - "version": "5.1.6", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.6.tgz", - "integrity": "sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==", - "dev": true, - "license": "ISC", + "node_modules/postcss-color-rebeccapurple": { + "version": "10.0.0", + "resolved": "https://registry.npmjs.org/postcss-color-rebeccapurple/-/postcss-color-rebeccapurple-10.0.0.tgz", + "integrity": "sha512-JFta737jSP+hdAIEhk1Vs0q0YF5P8fFcj+09pweS8ktuGuZ8pPlykHsk6mPxZ8awDl4TrcxUqJo9l1IhVr/OjQ==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "license": "MIT-0", "dependencies": { - "brace-expansion": "^2.0.1" + "@csstools/utilities": "^2.0.0", + "postcss-value-parser": "^4.2.0" }, "engines": { - "node": ">=10" + "node": ">=18" + }, + "peerDependencies": { + "postcss": "^8.4" } }, - "node_modules/mocha/node_modules/supports-color": { - "version": "8.1.1", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", - "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", - "dev": true, + "node_modules/postcss-colormin": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/postcss-colormin/-/postcss-colormin-6.1.0.tgz", + "integrity": "sha512-x9yX7DOxeMAR+BgGVnNSAxmAj98NX/YxEMNFP+SDCEeNLb2r3i6Hh1ksMsnW8Ub5SLCpbescQqn9YEbE9554Sw==", "license": "MIT", "dependencies": { - "has-flag": "^4.0.0" + "browserslist": "^4.23.0", + "caniuse-api": "^3.0.0", + "colord": "^2.9.3", + "postcss-value-parser": "^4.2.0" }, "engines": { - "node": ">=10" + "node": "^14 || ^16 || >=18.0" }, - "funding": { - "url": "https://github.com/chalk/supports-color?sponsor=1" + "peerDependencies": { + "postcss": "^8.4.31" } }, - "node_modules/mocha/node_modules/yargs": { - "version": "16.2.0", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz", - "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==", - "dev": true, + "node_modules/postcss-convert-values": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/postcss-convert-values/-/postcss-convert-values-6.1.0.tgz", + "integrity": "sha512-zx8IwP/ts9WvUM6NkVSkiU902QZL1bwPhaVaLynPtCsOTqp+ZKbNi+s6XJg3rfqpKGA/oc7Oxk5t8pOQJcwl/w==", "license": "MIT", "dependencies": { - "cliui": "^7.0.2", - "escalade": "^3.1.1", - "get-caller-file": "^2.0.5", - "require-directory": "^2.1.1", - "string-width": "^4.2.0", - "y18n": "^5.0.5", - "yargs-parser": "^20.2.2" + "browserslist": "^4.23.0", + "postcss-value-parser": "^4.2.0" }, "engines": { - "node": ">=10" + "node": "^14 || ^16 || >=18.0" + }, + "peerDependencies": { + "postcss": "^8.4.31" } }, - "node_modules/mocha/node_modules/yargs-parser": { - "version": "20.2.9", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.9.tgz", - "integrity": "sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==", - "dev": true, - "license": "ISC", + "node_modules/postcss-custom-media": { + "version": "11.0.6", + "resolved": "https://registry.npmjs.org/postcss-custom-media/-/postcss-custom-media-11.0.6.tgz", + "integrity": "sha512-C4lD4b7mUIw+RZhtY7qUbf4eADmb7Ey8BFA2px9jUbwg7pjTZDl4KY4bvlUV+/vXQvzQRfiGEVJyAbtOsCMInw==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "license": "MIT", + "dependencies": { + "@csstools/cascade-layer-name-parser": "^2.0.5", + "@csstools/css-parser-algorithms": "^3.0.5", + "@csstools/css-tokenizer": "^3.0.4", + "@csstools/media-query-list-parser": "^4.0.3" + }, "engines": { - "node": ">=10" + "node": ">=18" + }, + "peerDependencies": { + "postcss": "^8.4" } }, - "node_modules/moment": { - "version": "2.30.1", - "resolved": "https://registry.npmjs.org/moment/-/moment-2.30.1.tgz", - "integrity": "sha512-uEmtNhbDOrWPFS+hdjFCBfy9f2YoyzRpwcl+DqpC6taX21FzsTLQVbMV/W7PzNSX6x/bhC1zA3c2UQ5NzH6how==", + "node_modules/postcss-custom-properties": { + "version": "14.0.6", + "resolved": "https://registry.npmjs.org/postcss-custom-properties/-/postcss-custom-properties-14.0.6.tgz", + "integrity": "sha512-fTYSp3xuk4BUeVhxCSJdIPhDLpJfNakZKoiTDx7yRGCdlZrSJR7mWKVOBS4sBF+5poPQFMj2YdXx1VHItBGihQ==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], "license": "MIT", + "dependencies": { + "@csstools/cascade-layer-name-parser": "^2.0.5", + "@csstools/css-parser-algorithms": "^3.0.5", + "@csstools/css-tokenizer": "^3.0.4", + "@csstools/utilities": "^2.0.0", + "postcss-value-parser": "^4.2.0" + }, "engines": { - "node": "*" + "node": ">=18" + }, + "peerDependencies": { + "postcss": "^8.4" } }, - "node_modules/motion": { - "version": "10.16.2", - "resolved": "https://registry.npmjs.org/motion/-/motion-10.16.2.tgz", - "integrity": "sha512-p+PurYqfUdcJZvtnmAqu5fJgV2kR0uLFQuBKtLeFVTrYEVllI99tiOTSefVNYuip9ELTEkepIIDftNdze76NAQ==", + "node_modules/postcss-custom-selectors": { + "version": "8.0.5", + "resolved": "https://registry.npmjs.org/postcss-custom-selectors/-/postcss-custom-selectors-8.0.5.tgz", + "integrity": "sha512-9PGmckHQswiB2usSO6XMSswO2yFWVoCAuih1yl9FVcwkscLjRKjwsjM3t+NIWpSU2Jx3eOiK2+t4vVTQaoCHHg==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], "license": "MIT", "dependencies": { - "@motionone/animation": "^10.15.1", - "@motionone/dom": "^10.16.2", - "@motionone/svelte": "^10.16.2", - "@motionone/types": "^10.15.1", - "@motionone/utils": "^10.15.1", - "@motionone/vue": "^10.16.2" + "@csstools/cascade-layer-name-parser": "^2.0.5", + "@csstools/css-parser-algorithms": "^3.0.5", + "@csstools/css-tokenizer": "^3.0.4", + "postcss-selector-parser": "^7.0.0" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "postcss": "^8.4" } }, - "node_modules/mri": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/mri/-/mri-1.2.0.tgz", - "integrity": "sha512-tzzskb3bG8LvYGFF/mDTpq3jpI6Q9wc3LEmBaghu+DdCssd1FakN7Bc0hVNmEyGq1bq3RgfkCb3cmQLpNPOroA==", - "dev": true, + "node_modules/postcss-custom-selectors/node_modules/postcss-selector-parser": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-7.1.1.tgz", + "integrity": "sha512-orRsuYpJVw8LdAwqqLykBj9ecS5/cRHlI5+nvTo8LcCKmzDmqVORXtOIYEEQuL9D4BxtA1lm5isAqzQZCoQ6Eg==", "license": "MIT", + "dependencies": { + "cssesc": "^3.0.0", + "util-deprecate": "^1.0.2" + }, "engines": { "node": ">=4" } }, - "node_modules/ms": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", - "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", - "license": "MIT" - }, - "node_modules/multer": { - "version": "1.4.4-lts.1", - "resolved": "https://registry.npmjs.org/multer/-/multer-1.4.4-lts.1.tgz", - "integrity": "sha512-WeSGziVj6+Z2/MwQo3GvqzgR+9Uc+qt8SwHKh3gvNPiISKfsMfG4SvCOFYlxxgkXt7yIV2i1yczehm0EOKIxIg==", - "deprecated": "Multer 1.x is impacted by a number of vulnerabilities, which have been patched in 2.x. You should upgrade to the latest 2.x version.", - "license": "MIT", + "node_modules/postcss-dir-pseudo-class": { + "version": "9.0.1", + "resolved": "https://registry.npmjs.org/postcss-dir-pseudo-class/-/postcss-dir-pseudo-class-9.0.1.tgz", + "integrity": "sha512-tRBEK0MHYvcMUrAuYMEOa0zg9APqirBcgzi6P21OhxtJyJADo/SWBwY1CAwEohQ/6HDaa9jCjLRG7K3PVQYHEA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "license": "MIT-0", "dependencies": { - "append-field": "^1.0.0", - "busboy": "^1.0.0", - "concat-stream": "^1.5.2", - "mkdirp": "^0.5.4", - "object-assign": "^4.1.1", - "type-is": "^1.6.4", - "xtend": "^4.0.0" + "postcss-selector-parser": "^7.0.0" }, "engines": { - "node": ">= 6.0.0" + "node": ">=18" + }, + "peerDependencies": { + "postcss": "^8.4" } }, - "node_modules/multibase": { - "version": "4.0.6", - "resolved": "https://registry.npmjs.org/multibase/-/multibase-4.0.6.tgz", - "integrity": "sha512-x23pDe5+svdLz/k5JPGCVdfn7Q5mZVMBETiC+ORfO+sor9Sgs0smJzAjfTbM5tckeCqnaUuMYoz+k3RXMmJClQ==", - "deprecated": "This module has been superseded by the multiformats module", + "node_modules/postcss-dir-pseudo-class/node_modules/postcss-selector-parser": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-7.1.1.tgz", + "integrity": "sha512-orRsuYpJVw8LdAwqqLykBj9ecS5/cRHlI5+nvTo8LcCKmzDmqVORXtOIYEEQuL9D4BxtA1lm5isAqzQZCoQ6Eg==", "license": "MIT", "dependencies": { - "@multiformats/base-x": "^4.0.1" + "cssesc": "^3.0.0", + "util-deprecate": "^1.0.2" }, "engines": { - "node": ">=12.0.0", - "npm": ">=6.0.0" + "node": ">=4" } }, - "node_modules/multicodec": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/multicodec/-/multicodec-3.2.1.tgz", - "integrity": "sha512-+expTPftro8VAW8kfvcuNNNBgb9gPeNYV9dn+z1kJRWF2vih+/S79f2RVeIwmrJBUJ6NT9IUPWnZDQvegEh5pw==", - "deprecated": "This module has been superseded by the multiformats module", + "node_modules/postcss-discard-comments": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/postcss-discard-comments/-/postcss-discard-comments-6.0.2.tgz", + "integrity": "sha512-65w/uIqhSBBfQmYnG92FO1mWZjJ4GL5b8atm5Yw2UgrwD7HiNiSSNwJor1eCFGzUgYnN/iIknhNRVqjrrpuglw==", "license": "MIT", - "dependencies": { - "uint8arrays": "^3.0.0", - "varint": "^6.0.0" + "engines": { + "node": "^14 || ^16 || >=18.0" + }, + "peerDependencies": { + "postcss": "^8.4.31" } }, - "node_modules/multiformats": { - "version": "13.4.1", - "resolved": "https://registry.npmjs.org/multiformats/-/multiformats-13.4.1.tgz", - "integrity": "sha512-VqO6OSvLrFVAYYjgsr8tyv62/rCQhPgsZUXLTqoFLSgdkgiUYKYeArbt1uWLlEpkjxQe+P0+sHlbPEte1Bi06Q==", - "license": "Apache-2.0 OR MIT" + "node_modules/postcss-discard-duplicates": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/postcss-discard-duplicates/-/postcss-discard-duplicates-6.0.3.tgz", + "integrity": "sha512-+JA0DCvc5XvFAxwx6f/e68gQu/7Z9ud584VLmcgto28eB8FqSFZwtrLwB5Kcp70eIoWP/HXqz4wpo8rD8gpsTw==", + "license": "MIT", + "engines": { + "node": "^14 || ^16 || >=18.0" + }, + "peerDependencies": { + "postcss": "^8.4.31" + } }, - "node_modules/mute-stream": { - "version": "0.0.8", - "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.8.tgz", - "integrity": "sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA==", - "license": "ISC" + "node_modules/postcss-discard-empty": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/postcss-discard-empty/-/postcss-discard-empty-6.0.3.tgz", + "integrity": "sha512-znyno9cHKQsK6PtxL5D19Fj9uwSzC2mB74cpT66fhgOadEUPyXFkbgwm5tvc3bt3NAy8ltE5MrghxovZRVnOjQ==", + "license": "MIT", + "engines": { + "node": "^14 || ^16 || >=18.0" + }, + "peerDependencies": { + "postcss": "^8.4.31" + } }, - "node_modules/mylas": { - "version": "2.1.13", - "resolved": "https://registry.npmjs.org/mylas/-/mylas-2.1.13.tgz", - "integrity": "sha512-+MrqnJRtxdF+xngFfUUkIMQrUUL0KsxbADUkn23Z/4ibGg192Q+z+CQyiYwvWTsYjJygmMR8+w3ZDa98Zh6ESg==", - "dev": true, + "node_modules/postcss-discard-overridden": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/postcss-discard-overridden/-/postcss-discard-overridden-6.0.2.tgz", + "integrity": "sha512-j87xzI4LUggC5zND7KdjsI25APtyMuynXZSujByMaav2roV6OZX+8AaCUcZSWqckZpjAjRyFDdpqybgjFO0HJQ==", "license": "MIT", "engines": { - "node": ">=12.0.0" + "node": "^14 || ^16 || >=18.0" }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/raouldeheer" + "peerDependencies": { + "postcss": "^8.4.31" } }, - "node_modules/named-urls": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/named-urls/-/named-urls-2.0.1.tgz", - "integrity": "sha512-e/WeLA52FeLZpWt5JcpYp4fZqESBxoNuyJB3LQljHqNPNt0ow1t8QOTFEIeOZf+X+bJOLIXCPCnmyPZnBV8sMg==", + "node_modules/postcss-discard-unused": { + "version": "6.0.5", + "resolved": "https://registry.npmjs.org/postcss-discard-unused/-/postcss-discard-unused-6.0.5.tgz", + "integrity": "sha512-wHalBlRHkaNnNwfC8z+ppX57VhvS+HWgjW508esjdaEYr3Mx7Gnn2xA4R/CKf5+Z9S5qsqC+Uzh4ueENWwCVUA==", "license": "MIT", "dependencies": { - "path-to-regexp": "^6.1.0" + "postcss-selector-parser": "^6.0.16" + }, + "engines": { + "node": "^14 || ^16 || >=18.0" + }, + "peerDependencies": { + "postcss": "^8.4.31" } }, - "node_modules/named-urls/node_modules/path-to-regexp": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-6.3.0.tgz", - "integrity": "sha512-Yhpw4T9C6hPpgPeA28us07OJeqZ5EzQTkbfwuhsUg0c237RomFoETJgmp2sa3F/41gfLE6G5cqcYwznmeEeOlQ==", - "license": "MIT" - }, - "node_modules/nan": { - "version": "2.23.0", - "resolved": "https://registry.npmjs.org/nan/-/nan-2.23.0.tgz", - "integrity": "sha512-1UxuyYGdoQHcGg87Lkqm3FzefucTa0NAiOcuRsDmysep3c1LVCRK2krrUDafMWtjSG04htvAmvg96+SDknOmgQ==", - "dev": true, - "license": "MIT", - "optional": true + "node_modules/postcss-double-position-gradients": { + "version": "6.0.4", + "resolved": "https://registry.npmjs.org/postcss-double-position-gradients/-/postcss-double-position-gradients-6.0.4.tgz", + "integrity": "sha512-m6IKmxo7FxSP5nF2l63QbCC3r+bWpFUWmZXZf096WxG0m7Vl1Q1+ruFOhpdDRmKrRS+S3Jtk+TVk/7z0+BVK6g==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "license": "MIT-0", + "dependencies": { + "@csstools/postcss-progressive-custom-properties": "^4.2.1", + "@csstools/utilities": "^2.0.0", + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "postcss": "^8.4" + } }, - "node_modules/nanoid": { - "version": "3.3.11", - "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.11.tgz", - "integrity": "sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w==", - "dev": true, + "node_modules/postcss-focus-visible": { + "version": "10.0.1", + "resolved": "https://registry.npmjs.org/postcss-focus-visible/-/postcss-focus-visible-10.0.1.tgz", + "integrity": "sha512-U58wyjS/I1GZgjRok33aE8juW9qQgQUNwTSdxQGuShHzwuYdcklnvK/+qOWX1Q9kr7ysbraQ6ht6r+udansalA==", "funding": [ { "type": "github", - "url": "https://github.com/sponsors/ai" + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" } ], + "license": "MIT-0", + "dependencies": { + "postcss-selector-parser": "^7.0.0" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "postcss": "^8.4" + } + }, + "node_modules/postcss-focus-visible/node_modules/postcss-selector-parser": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-7.1.1.tgz", + "integrity": "sha512-orRsuYpJVw8LdAwqqLykBj9ecS5/cRHlI5+nvTo8LcCKmzDmqVORXtOIYEEQuL9D4BxtA1lm5isAqzQZCoQ6Eg==", "license": "MIT", - "bin": { - "nanoid": "bin/nanoid.cjs" + "dependencies": { + "cssesc": "^3.0.0", + "util-deprecate": "^1.0.2" }, "engines": { - "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" + "node": ">=4" } }, - "node_modules/natural-compare": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", - "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==", - "dev": true, - "license": "MIT" + "node_modules/postcss-focus-within": { + "version": "9.0.1", + "resolved": "https://registry.npmjs.org/postcss-focus-within/-/postcss-focus-within-9.0.1.tgz", + "integrity": "sha512-fzNUyS1yOYa7mOjpci/bR+u+ESvdar6hk8XNK/TRR0fiGTp2QT5N+ducP0n3rfH/m9I7H/EQU6lsa2BrgxkEjw==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "license": "MIT-0", + "dependencies": { + "postcss-selector-parser": "^7.0.0" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "postcss": "^8.4" + } }, - "node_modules/negotiator": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-1.0.0.tgz", - "integrity": "sha512-8Ofs/AUQh8MaEcrlq5xOX0CQ9ypTF5dl78mjlMNfOK08fzpgTHQRQPBxcPlEtIw0yRpws+Zo/3r+5WRby7u3Gg==", + "node_modules/postcss-focus-within/node_modules/postcss-selector-parser": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-7.1.1.tgz", + "integrity": "sha512-orRsuYpJVw8LdAwqqLykBj9ecS5/cRHlI5+nvTo8LcCKmzDmqVORXtOIYEEQuL9D4BxtA1lm5isAqzQZCoQ6Eg==", "license": "MIT", - "peer": true, + "dependencies": { + "cssesc": "^3.0.0", + "util-deprecate": "^1.0.2" + }, "engines": { - "node": ">= 0.6" + "node": ">=4" } }, - "node_modules/neo-async": { - "version": "2.6.2", - "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz", - "integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==", - "license": "MIT" + "node_modules/postcss-font-variant": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/postcss-font-variant/-/postcss-font-variant-5.0.0.tgz", + "integrity": "sha512-1fmkBaCALD72CK2a9i468mA/+tr9/1cBxRRMXOUaZqO43oWPR5imcyPjXwuv7PXbCid4ndlP5zWhidQVVa3hmA==", + "license": "MIT", + "peerDependencies": { + "postcss": "^8.1.0" + } }, - "node_modules/neon-cli": { - "version": "0.10.1", - "resolved": "https://registry.npmjs.org/neon-cli/-/neon-cli-0.10.1.tgz", - "integrity": "sha512-kOd9ELaYETe1J1nBEOYD7koAZVj6xR9TGwOPccAsWmwL5amkaXXXwXHCUHkBAWujlgSZY5f2pT+pFGkzoHExYQ==", - "license": "SEE LICENSE IN LICENSE-*", - "optional": true, - "dependencies": { - "chalk": "^4.1.0", - "command-line-args": "^5.1.1", - "command-line-commands": "^3.0.1", - "command-line-usage": "^6.1.0", - "git-config": "0.0.7", - "handlebars": "^4.7.6", - "inquirer": "^7.3.3", - "make-promises-safe": "^5.1.0", - "rimraf": "^3.0.2", - "semver": "^7.3.2", - "toml": "^3.0.0", - "ts-typed-json": "^0.3.2", - "validate-npm-package-license": "^3.0.4", - "validate-npm-package-name": "^3.0.0" + "node_modules/postcss-gap-properties": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/postcss-gap-properties/-/postcss-gap-properties-6.0.0.tgz", + "integrity": "sha512-Om0WPjEwiM9Ru+VhfEDPZJAKWUd0mV1HmNXqp2C29z80aQ2uP9UVhLc7e3aYMIor/S5cVhoPgYQ7RtfeZpYTRw==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "license": "MIT-0", + "engines": { + "node": ">=18" }, - "bin": { - "neon": "bin/cli.js" + "peerDependencies": { + "postcss": "^8.4" + } + }, + "node_modules/postcss-image-set-function": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/postcss-image-set-function/-/postcss-image-set-function-7.0.0.tgz", + "integrity": "sha512-QL7W7QNlZuzOwBTeXEmbVckNt1FSmhQtbMRvGGqqU4Nf4xk6KUEQhAoWuMzwbSv5jxiRiSZ5Tv7eiDB9U87znA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "license": "MIT-0", + "dependencies": { + "@csstools/utilities": "^2.0.0", + "postcss-value-parser": "^4.2.0" }, "engines": { - "node": ">=8" + "node": ">=18" + }, + "peerDependencies": { + "postcss": "^8.4" } }, - "node_modules/neon-cli/node_modules/glob": { - "version": "7.2.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", - "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", - "deprecated": "Glob versions prior to v9 are no longer supported", - "license": "ISC", - "optional": true, + "node_modules/postcss-lab-function": { + "version": "7.0.12", + "resolved": "https://registry.npmjs.org/postcss-lab-function/-/postcss-lab-function-7.0.12.tgz", + "integrity": "sha512-tUcyRk1ZTPec3OuKFsqtRzW2Go5lehW29XA21lZ65XmzQkz43VY2tyWEC202F7W3mILOjw0voOiuxRGTsN+J9w==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "license": "MIT-0", "dependencies": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.1.1", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" + "@csstools/css-color-parser": "^3.1.0", + "@csstools/css-parser-algorithms": "^3.0.5", + "@csstools/css-tokenizer": "^3.0.4", + "@csstools/postcss-progressive-custom-properties": "^4.2.1", + "@csstools/utilities": "^2.0.0" }, "engines": { - "node": "*" + "node": ">=18" }, - "funding": { - "url": "https://github.com/sponsors/isaacs" + "peerDependencies": { + "postcss": "^8.4" } }, - "node_modules/neon-cli/node_modules/inquirer": { - "version": "7.3.3", - "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-7.3.3.tgz", - "integrity": "sha512-JG3eIAj5V9CwcGvuOmoo6LB9kbAYT8HXffUl6memuszlwDC/qvFAJw49XJ5NROSFNPxp3iQg1GqkFhaY/CR0IA==", + "node_modules/postcss-loader": { + "version": "7.3.4", + "resolved": "https://registry.npmjs.org/postcss-loader/-/postcss-loader-7.3.4.tgz", + "integrity": "sha512-iW5WTTBSC5BfsBJ9daFMPVrLT36MrNiC6fqOZTTaHjBNX6Pfd5p+hSBqe/fEeNd7pc13QiAyGt7VdGMw4eRC4A==", "license": "MIT", - "optional": true, "dependencies": { - "ansi-escapes": "^4.2.1", - "chalk": "^4.1.0", - "cli-cursor": "^3.1.0", - "cli-width": "^3.0.0", - "external-editor": "^3.0.3", - "figures": "^3.0.0", - "lodash": "^4.17.19", - "mute-stream": "0.0.8", - "run-async": "^2.4.0", - "rxjs": "^6.6.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0", - "through": "^2.3.6" + "cosmiconfig": "^8.3.5", + "jiti": "^1.20.0", + "semver": "^7.5.4" }, "engines": { - "node": ">=8.0.0" + "node": ">= 14.15.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "postcss": "^7.0.0 || ^8.0.1", + "webpack": "^5.0.0" } }, - "node_modules/neon-cli/node_modules/rimraf": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", - "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", - "deprecated": "Rimraf versions prior to v4 are no longer supported", - "license": "ISC", - "optional": true, + "node_modules/postcss-loader/node_modules/cosmiconfig": { + "version": "8.3.6", + "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-8.3.6.tgz", + "integrity": "sha512-kcZ6+W5QzcJ3P1Mt+83OUv/oHFqZHIx8DuxG6eZ5RGMERoLqp4BuGjhHLYGK+Kf5XVkQvqBSmAy/nGWN3qDgEA==", + "license": "MIT", "dependencies": { - "glob": "^7.1.3" + "import-fresh": "^3.3.0", + "js-yaml": "^4.1.0", + "parse-json": "^5.2.0", + "path-type": "^4.0.0" }, - "bin": { - "rimraf": "bin.js" + "engines": { + "node": ">=14" }, "funding": { - "url": "https://github.com/sponsors/isaacs" + "url": "https://github.com/sponsors/d-fischer" + }, + "peerDependencies": { + "typescript": ">=4.9.5" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } } }, - "node_modules/neon-cli/node_modules/rxjs": { - "version": "6.6.7", - "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.6.7.tgz", - "integrity": "sha512-hTdwr+7yYNIT5n4AMYp85KA6yw2Va0FLa3Rguvbpa4W3I5xynaBZo41cM3XM+4Q6fRMj3sBYIR1VAmZMXYJvRQ==", - "license": "Apache-2.0", - "optional": true, - "dependencies": { - "tslib": "^1.9.0" - }, - "engines": { - "npm": ">=2.0.0" + "node_modules/postcss-loader/node_modules/jiti": { + "version": "1.21.7", + "resolved": "https://registry.npmjs.org/jiti/-/jiti-1.21.7.tgz", + "integrity": "sha512-/imKNG4EbWNrVjoNC/1H5/9GFy+tqjGBHCaSsN+P2RnPqjsLmv6UD3Ej+Kj8nBWaRAwyk7kK5ZUc+OEatnTR3A==", + "license": "MIT", + "bin": { + "jiti": "bin/jiti.js" } }, - "node_modules/neon-cli/node_modules/semver": { - "version": "7.7.2", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.2.tgz", - "integrity": "sha512-RF0Fw+rO5AMf9MAyaRXI4AV0Ulj5lMHqVxxdSgiVbixSCXoEmmX/jk0CuJw4+3SqroYO9VoUh+HcuJivvtJemA==", + "node_modules/postcss-loader/node_modules/semver": { + "version": "7.7.3", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.3.tgz", + "integrity": "sha512-SdsKMrI9TdgjdweUSR9MweHA4EJ8YxHn8DFaDisvhVlUOe4BF1tLD7GAj0lIqWVl+dPb/rExr0Btby5loQm20Q==", "license": "ISC", - "optional": true, "bin": { "semver": "bin/semver.js" }, @@ -34894,3571 +52490,3960 @@ "node": ">=10" } }, - "node_modules/neon-cli/node_modules/tslib": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", - "license": "0BSD", - "optional": true - }, - "node_modules/nice-try": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/nice-try/-/nice-try-1.0.5.tgz", - "integrity": "sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==", - "dev": true, - "license": "MIT" - }, - "node_modules/node-abort-controller": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/node-abort-controller/-/node-abort-controller-3.1.1.tgz", - "integrity": "sha512-AGK2yQKIjRuqnc6VkX2Xj5d+QW8xZ87pa1UK6yA6ouUyuxfHuMP6umE5QK7UmTeOAymo+Zx1Fxiuw9rVx8taHQ==", - "license": "MIT" - }, - "node_modules/node-addon-api": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-2.0.2.tgz", - "integrity": "sha512-Ntyt4AIXyaLIuMHF6IOoTakB3K+RWxwtsHNRxllEoA6vPwP9o4866g6YWDLUdnucilZhmkxiHwHr11gAENw+QA==", - "license": "MIT" - }, - "node_modules/node-domexception": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/node-domexception/-/node-domexception-1.0.0.tgz", - "integrity": "sha512-/jKZoMpw0F8GRwl4/eLROPA3cfcXtLApP0QzLmUT/HuPCZWyB7IY9ZrMeKw2O/nFIqPQB3PVM9aYm0F312AXDQ==", - "deprecated": "Use your platform's native DOMException instead", + "node_modules/postcss-logical": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/postcss-logical/-/postcss-logical-8.1.0.tgz", + "integrity": "sha512-pL1hXFQ2fEXNKiNiAgtfA005T9FBxky5zkX6s4GZM2D8RkVgRqz3f4g1JUoq925zXv495qk8UNldDwh8uGEDoA==", "funding": [ { "type": "github", - "url": "https://github.com/sponsors/jimmywarting" + "url": "https://github.com/sponsors/csstools" }, { - "type": "github", - "url": "https://paypal.me/jimmywarting" + "type": "opencollective", + "url": "https://opencollective.com/csstools" } ], + "license": "MIT-0", + "dependencies": { + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "postcss": "^8.4" + } + }, + "node_modules/postcss-merge-idents": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/postcss-merge-idents/-/postcss-merge-idents-6.0.3.tgz", + "integrity": "sha512-1oIoAsODUs6IHQZkLQGO15uGEbK3EAl5wi9SS8hs45VgsxQfMnxvt+L+zIr7ifZFIH14cfAeVe2uCTa+SPRa3g==", "license": "MIT", + "dependencies": { + "cssnano-utils": "^4.0.2", + "postcss-value-parser": "^4.2.0" + }, "engines": { - "node": ">=10.5.0" + "node": "^14 || ^16 || >=18.0" + }, + "peerDependencies": { + "postcss": "^8.4.31" } }, - "node_modules/node-emoji": { - "version": "1.11.0", - "resolved": "https://registry.npmjs.org/node-emoji/-/node-emoji-1.11.0.tgz", - "integrity": "sha512-wo2DpQkQp7Sjm2A0cq+sN7EHKO6Sl0ctXeBdFZrL9T9+UywORbufTcTZxom8YqpLQt/FqNMUkOpkZrJVYSKD3A==", + "node_modules/postcss-merge-longhand": { + "version": "6.0.5", + "resolved": "https://registry.npmjs.org/postcss-merge-longhand/-/postcss-merge-longhand-6.0.5.tgz", + "integrity": "sha512-5LOiordeTfi64QhICp07nzzuTDjNSO8g5Ksdibt44d+uvIIAE1oZdRn8y/W5ZtYgRH/lnLDlvi9F8btZcVzu3w==", "license": "MIT", "dependencies": { - "lodash": "^4.17.21" + "postcss-value-parser": "^4.2.0", + "stylehacks": "^6.1.1" + }, + "engines": { + "node": "^14 || ^16 || >=18.0" + }, + "peerDependencies": { + "postcss": "^8.4.31" } }, - "node_modules/node-eval": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/node-eval/-/node-eval-2.0.0.tgz", - "integrity": "sha512-Ap+L9HznXAVeJj3TJ1op6M6bg5xtTq8L5CU/PJxtkhea/DrIxdTknGKIECKd/v/Lgql95iuMAYvIzBNd0pmcMg==", - "dev": true, + "node_modules/postcss-merge-rules": { + "version": "6.1.1", + "resolved": "https://registry.npmjs.org/postcss-merge-rules/-/postcss-merge-rules-6.1.1.tgz", + "integrity": "sha512-KOdWF0gju31AQPZiD+2Ar9Qjowz1LTChSjFFbS+e2sFgc4uHOp3ZvVX4sNeTlk0w2O31ecFGgrFzhO0RSWbWwQ==", "license": "MIT", "dependencies": { - "path-is-absolute": "1.0.1" + "browserslist": "^4.23.0", + "caniuse-api": "^3.0.0", + "cssnano-utils": "^4.0.2", + "postcss-selector-parser": "^6.0.16" }, "engines": { - "node": ">= 4" + "node": "^14 || ^16 || >=18.0" + }, + "peerDependencies": { + "postcss": "^8.4.31" } }, - "node_modules/node-fetch": { - "version": "2.7.0", - "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.7.0.tgz", - "integrity": "sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==", + "node_modules/postcss-minify-font-values": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/postcss-minify-font-values/-/postcss-minify-font-values-6.1.0.tgz", + "integrity": "sha512-gklfI/n+9rTh8nYaSJXlCo3nOKqMNkxuGpTn/Qm0gstL3ywTr9/WRKznE+oy6fvfolH6dF+QM4nCo8yPLdvGJg==", "license": "MIT", "dependencies": { - "whatwg-url": "^5.0.0" + "postcss-value-parser": "^4.2.0" }, "engines": { - "node": "4.x || >=6.0.0" + "node": "^14 || ^16 || >=18.0" }, "peerDependencies": { - "encoding": "^0.1.0" + "postcss": "^8.4.31" + } + }, + "node_modules/postcss-minify-gradients": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/postcss-minify-gradients/-/postcss-minify-gradients-6.0.3.tgz", + "integrity": "sha512-4KXAHrYlzF0Rr7uc4VrfwDJ2ajrtNEpNEuLxFgwkhFZ56/7gaE4Nr49nLsQDZyUe+ds+kEhf+YAUolJiYXF8+Q==", + "license": "MIT", + "dependencies": { + "colord": "^2.9.3", + "cssnano-utils": "^4.0.2", + "postcss-value-parser": "^4.2.0" }, - "peerDependenciesMeta": { - "encoding": { - "optional": true - } + "engines": { + "node": "^14 || ^16 || >=18.0" + }, + "peerDependencies": { + "postcss": "^8.4.31" } }, - "node_modules/node-fetch-native": { - "version": "1.6.7", - "resolved": "https://registry.npmjs.org/node-fetch-native/-/node-fetch-native-1.6.7.tgz", - "integrity": "sha512-g9yhqoedzIUm0nTnTqAQvueMPVOuIY16bqgAJJC8XOOubYFNwz6IER9qs0Gq2Xd0+CecCKFjtdDTMA4u4xG06Q==", - "license": "MIT" + "node_modules/postcss-minify-params": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/postcss-minify-params/-/postcss-minify-params-6.1.0.tgz", + "integrity": "sha512-bmSKnDtyyE8ujHQK0RQJDIKhQ20Jq1LYiez54WiaOoBtcSuflfK3Nm596LvbtlFcpipMjgClQGyGr7GAs+H1uA==", + "license": "MIT", + "dependencies": { + "browserslist": "^4.23.0", + "cssnano-utils": "^4.0.2", + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^14 || ^16 || >=18.0" + }, + "peerDependencies": { + "postcss": "^8.4.31" + } }, - "node_modules/node-fetch/node_modules/tr46": { - "version": "0.0.3", - "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", - "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==", - "license": "MIT" + "node_modules/postcss-minify-selectors": { + "version": "6.0.4", + "resolved": "https://registry.npmjs.org/postcss-minify-selectors/-/postcss-minify-selectors-6.0.4.tgz", + "integrity": "sha512-L8dZSwNLgK7pjTto9PzWRoMbnLq5vsZSTu8+j1P/2GB8qdtGQfn+K1uSvFgYvgh83cbyxT5m43ZZhUMTJDSClQ==", + "license": "MIT", + "dependencies": { + "postcss-selector-parser": "^6.0.16" + }, + "engines": { + "node": "^14 || ^16 || >=18.0" + }, + "peerDependencies": { + "postcss": "^8.4.31" + } }, - "node_modules/node-fetch/node_modules/webidl-conversions": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", - "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==", - "license": "BSD-2-Clause" + "node_modules/postcss-modules-extract-imports": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/postcss-modules-extract-imports/-/postcss-modules-extract-imports-3.1.0.tgz", + "integrity": "sha512-k3kNe0aNFQDAZGbin48pL2VNidTF0w4/eASDsxlyspobzU3wZQLOGj7L9gfRe0Jo9/4uud09DsjFNH7winGv8Q==", + "license": "ISC", + "engines": { + "node": "^10 || ^12 || >= 14" + }, + "peerDependencies": { + "postcss": "^8.1.0" + } }, - "node_modules/node-fetch/node_modules/whatwg-url": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", - "integrity": "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==", + "node_modules/postcss-modules-local-by-default": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/postcss-modules-local-by-default/-/postcss-modules-local-by-default-4.2.0.tgz", + "integrity": "sha512-5kcJm/zk+GJDSfw+V/42fJ5fhjL5YbFDl8nVdXkJPLLW+Vf9mTD5Xe0wqIaDnLuL2U6cDNpTr+UQ+v2HWIBhzw==", "license": "MIT", "dependencies": { - "tr46": "~0.0.3", - "webidl-conversions": "^3.0.0" + "icss-utils": "^5.0.0", + "postcss-selector-parser": "^7.0.0", + "postcss-value-parser": "^4.1.0" + }, + "engines": { + "node": "^10 || ^12 || >= 14" + }, + "peerDependencies": { + "postcss": "^8.1.0" } }, - "node_modules/node-gyp-build": { - "version": "4.8.4", - "resolved": "https://registry.npmjs.org/node-gyp-build/-/node-gyp-build-4.8.4.tgz", - "integrity": "sha512-LA4ZjwlnUblHVgq0oBF3Jl/6h/Nvs5fzBLwdEF4nuxnFdsfajde4WfxtJr3CaiH+F6ewcIB/q4jQ4UzPyid+CQ==", + "node_modules/postcss-modules-local-by-default/node_modules/postcss-selector-parser": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-7.1.1.tgz", + "integrity": "sha512-orRsuYpJVw8LdAwqqLykBj9ecS5/cRHlI5+nvTo8LcCKmzDmqVORXtOIYEEQuL9D4BxtA1lm5isAqzQZCoQ6Eg==", "license": "MIT", - "bin": { - "node-gyp-build": "bin.js", - "node-gyp-build-optional": "optional.js", - "node-gyp-build-test": "build-test.js" + "dependencies": { + "cssesc": "^3.0.0", + "util-deprecate": "^1.0.2" + }, + "engines": { + "node": ">=4" } }, - "node_modules/node-int64": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/node-int64/-/node-int64-0.4.0.tgz", - "integrity": "sha512-O5lz91xSOeoXP6DulyHfllpq+Eg00MWitZIbtPfoSEvqIHdl5gfcY6hYzDWnj0qD5tz52PI08u9qUvSVeUBeHw==", - "license": "MIT" - }, - "node_modules/node-mock-http": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/node-mock-http/-/node-mock-http-1.0.3.tgz", - "integrity": "sha512-jN8dK25fsfnMrVsEhluUTPkBFY+6ybu7jSB1n+ri/vOGjJxU8J9CZhpSGkHXSkFjtUhbmoncG/YG9ta5Ludqog==", - "license": "MIT" - }, - "node_modules/node-releases": { - "version": "2.0.21", - "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.21.tgz", - "integrity": "sha512-5b0pgg78U3hwXkCM8Z9b2FJdPZlr9Psr9V2gQPESdGHqbntyFJKFW4r5TeWGFzafGY3hzs1JC62VEQMbl1JFkw==", - "license": "MIT" + "node_modules/postcss-modules-scope": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/postcss-modules-scope/-/postcss-modules-scope-3.2.1.tgz", + "integrity": "sha512-m9jZstCVaqGjTAuny8MdgE88scJnCiQSlSrOWcTQgM2t32UBe+MUmFSO5t7VMSfAf/FJKImAxBav8ooCHJXCJA==", + "license": "ISC", + "dependencies": { + "postcss-selector-parser": "^7.0.0" + }, + "engines": { + "node": "^10 || ^12 || >= 14" + }, + "peerDependencies": { + "postcss": "^8.1.0" + } }, - "node_modules/node-stdlib-browser": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/node-stdlib-browser/-/node-stdlib-browser-1.3.1.tgz", - "integrity": "sha512-X75ZN8DCLftGM5iKwoYLA3rjnrAEs97MkzvSd4q2746Tgpg8b8XWiBGiBG4ZpgcAqBgtgPHTiAc8ZMCvZuikDw==", - "dev": true, + "node_modules/postcss-modules-scope/node_modules/postcss-selector-parser": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-7.1.1.tgz", + "integrity": "sha512-orRsuYpJVw8LdAwqqLykBj9ecS5/cRHlI5+nvTo8LcCKmzDmqVORXtOIYEEQuL9D4BxtA1lm5isAqzQZCoQ6Eg==", "license": "MIT", "dependencies": { - "assert": "^2.0.0", - "browser-resolve": "^2.0.0", - "browserify-zlib": "^0.2.0", - "buffer": "^5.7.1", - "console-browserify": "^1.1.0", - "constants-browserify": "^1.0.0", - "create-require": "^1.1.1", - "crypto-browserify": "^3.12.1", - "domain-browser": "4.22.0", - "events": "^3.0.0", - "https-browserify": "^1.0.0", - "isomorphic-timers-promises": "^1.0.1", - "os-browserify": "^0.3.0", - "path-browserify": "^1.0.1", - "pkg-dir": "^5.0.0", - "process": "^0.11.10", - "punycode": "^1.4.1", - "querystring-es3": "^0.2.1", - "readable-stream": "^3.6.0", - "stream-browserify": "^3.0.0", - "stream-http": "^3.2.0", - "string_decoder": "^1.0.0", - "timers-browserify": "^2.0.4", - "tty-browserify": "0.0.1", - "url": "^0.11.4", - "util": "^0.12.4", - "vm-browserify": "^1.0.1" + "cssesc": "^3.0.0", + "util-deprecate": "^1.0.2" }, "engines": { - "node": ">=10" + "node": ">=4" } }, - "node_modules/node-stdlib-browser/node_modules/buffer": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", - "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==", - "dev": true, + "node_modules/postcss-modules-values": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/postcss-modules-values/-/postcss-modules-values-4.0.0.tgz", + "integrity": "sha512-RDxHkAiEGI78gS2ofyvCsu7iycRv7oqw5xMWn9iMoR0N/7mf9D50ecQqUo5BZ9Zh2vH4bCUR/ktCqbB9m8vJjQ==", + "license": "ISC", + "dependencies": { + "icss-utils": "^5.0.0" + }, + "engines": { + "node": "^10 || ^12 || >= 14" + }, + "peerDependencies": { + "postcss": "^8.1.0" + } + }, + "node_modules/postcss-nesting": { + "version": "13.0.2", + "resolved": "https://registry.npmjs.org/postcss-nesting/-/postcss-nesting-13.0.2.tgz", + "integrity": "sha512-1YCI290TX+VP0U/K/aFxzHzQWHWURL+CtHMSbex1lCdpXD1SoR2sYuxDu5aNI9lPoXpKTCggFZiDJbwylU0LEQ==", "funding": [ { "type": "github", - "url": "https://github.com/sponsors/feross" + "url": "https://github.com/sponsors/csstools" }, { - "type": "patreon", - "url": "https://www.patreon.com/feross" + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "license": "MIT-0", + "dependencies": { + "@csstools/selector-resolve-nested": "^3.1.0", + "@csstools/selector-specificity": "^5.0.0", + "postcss-selector-parser": "^7.0.0" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "postcss": "^8.4" + } + }, + "node_modules/postcss-nesting/node_modules/@csstools/selector-resolve-nested": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/@csstools/selector-resolve-nested/-/selector-resolve-nested-3.1.0.tgz", + "integrity": "sha512-mf1LEW0tJLKfWyvn5KdDrhpxHyuxpbNwTIwOYLIvsTffeyOf85j5oIzfG0yosxDgx/sswlqBnESYUcQH0vgZ0g==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" }, { - "type": "consulting", - "url": "https://feross.org/support" + "type": "opencollective", + "url": "https://opencollective.com/csstools" } ], - "license": "MIT", - "dependencies": { - "base64-js": "^1.3.1", - "ieee754": "^1.1.13" + "license": "MIT-0", + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "postcss-selector-parser": "^7.0.0" } }, - "node_modules/node-stdlib-browser/node_modules/pkg-dir": { + "node_modules/postcss-nesting/node_modules/@csstools/selector-specificity": { "version": "5.0.0", - "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-5.0.0.tgz", - "integrity": "sha512-NPE8TDbzl/3YQYY7CSS228s3g2ollTFnc+Qi3tqmqJp9Vg2ovUpixcJEo2HJScN2Ez+kEaal6y70c0ehqJBJeA==", - "dev": true, + "resolved": "https://registry.npmjs.org/@csstools/selector-specificity/-/selector-specificity-5.0.0.tgz", + "integrity": "sha512-PCqQV3c4CoVm3kdPhyeZ07VmBRdH2EpMFA/pd9OASpOEC3aXNGoqPDAZ80D0cLpMBxnmk0+yNhGsEx31hq7Gtw==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "license": "MIT-0", + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "postcss-selector-parser": "^7.0.0" + } + }, + "node_modules/postcss-nesting/node_modules/postcss-selector-parser": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-7.1.1.tgz", + "integrity": "sha512-orRsuYpJVw8LdAwqqLykBj9ecS5/cRHlI5+nvTo8LcCKmzDmqVORXtOIYEEQuL9D4BxtA1lm5isAqzQZCoQ6Eg==", "license": "MIT", "dependencies": { - "find-up": "^5.0.0" + "cssesc": "^3.0.0", + "util-deprecate": "^1.0.2" }, "engines": { - "node": ">=10" + "node": ">=4" } }, - "node_modules/node-stdlib-browser/node_modules/punycode": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz", - "integrity": "sha512-jmYNElW7yvO7TV33CjSmvSiE2yco3bV2czu/OzDKdMNVZQWfxCblURLhf+47syQRBntjfLdd/H0egrzIG+oaFQ==", - "dev": true, - "license": "MIT" + "node_modules/postcss-normalize-charset": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/postcss-normalize-charset/-/postcss-normalize-charset-6.0.2.tgz", + "integrity": "sha512-a8N9czmdnrjPHa3DeFlwqst5eaL5W8jYu3EBbTTkI5FHkfMhFZh1EGbku6jhHhIzTA6tquI2P42NtZ59M/H/kQ==", + "license": "MIT", + "engines": { + "node": "^14 || ^16 || >=18.0" + }, + "peerDependencies": { + "postcss": "^8.4.31" + } }, - "node_modules/node-stdlib-browser/node_modules/readable-stream": { - "version": "3.6.2", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", - "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", - "dev": true, + "node_modules/postcss-normalize-display-values": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/postcss-normalize-display-values/-/postcss-normalize-display-values-6.0.2.tgz", + "integrity": "sha512-8H04Mxsb82ON/aAkPeq8kcBbAtI5Q2a64X/mnRRfPXBq7XeogoQvReqxEfc0B4WPq1KimjezNC8flUtC3Qz6jg==", "license": "MIT", "dependencies": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" + "postcss-value-parser": "^4.2.0" }, "engines": { - "node": ">= 6" + "node": "^14 || ^16 || >=18.0" + }, + "peerDependencies": { + "postcss": "^8.4.31" } }, - "node_modules/nofilter": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/nofilter/-/nofilter-3.1.0.tgz", - "integrity": "sha512-l2NNj07e9afPnhAhvgVrCD/oy2Ai1yfLpuo3EpiO1jFTsB4sFz6oIfAfSZyQzVpkZQ9xS8ZS5g1jCBgq4Hwo0g==", + "node_modules/postcss-normalize-positions": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/postcss-normalize-positions/-/postcss-normalize-positions-6.0.2.tgz", + "integrity": "sha512-/JFzI441OAB9O7VnLA+RtSNZvQ0NCFZDOtp6QPFo1iIyawyXg0YI3CYM9HBy1WvwCRHnPep/BvI1+dGPKoXx/Q==", "license": "MIT", + "dependencies": { + "postcss-value-parser": "^4.2.0" + }, "engines": { - "node": ">=12.19" + "node": "^14 || ^16 || >=18.0" + }, + "peerDependencies": { + "postcss": "^8.4.31" } }, - "node_modules/nopt": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/nopt/-/nopt-5.0.0.tgz", - "integrity": "sha512-Tbj67rffqceeLpcRXrT7vKAN8CwfPeIBgM7E6iBkmKLV7bEMwpGgYLGv0jACUsECaa/vuxP0IjEont6umdMgtQ==", - "license": "ISC", - "optional": true, + "node_modules/postcss-normalize-repeat-style": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/postcss-normalize-repeat-style/-/postcss-normalize-repeat-style-6.0.2.tgz", + "integrity": "sha512-YdCgsfHkJ2jEXwR4RR3Tm/iOxSfdRt7jplS6XRh9Js9PyCR/aka/FCb6TuHT2U8gQubbm/mPmF6L7FY9d79VwQ==", + "license": "MIT", "dependencies": { - "abbrev": "1" - }, - "bin": { - "nopt": "bin/nopt.js" + "postcss-value-parser": "^4.2.0" }, "engines": { - "node": ">=6" + "node": "^14 || ^16 || >=18.0" + }, + "peerDependencies": { + "postcss": "^8.4.31" } }, - "node_modules/normalize-package-data": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz", - "integrity": "sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==", - "dev": true, - "license": "BSD-2-Clause", + "node_modules/postcss-normalize-string": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/postcss-normalize-string/-/postcss-normalize-string-6.0.2.tgz", + "integrity": "sha512-vQZIivlxlfqqMp4L9PZsFE4YUkWniziKjQWUtsxUiVsSSPelQydwS8Wwcuw0+83ZjPWNTl02oxlIvXsmmG+CiQ==", + "license": "MIT", "dependencies": { - "hosted-git-info": "^2.1.4", - "resolve": "^1.10.0", - "semver": "2 || 3 || 4 || 5", - "validate-npm-package-license": "^3.0.1" + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^14 || ^16 || >=18.0" + }, + "peerDependencies": { + "postcss": "^8.4.31" } }, - "node_modules/normalize-package-data/node_modules/semver": { - "version": "5.7.2", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz", - "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==", - "dev": true, - "license": "ISC", - "bin": { - "semver": "bin/semver" + "node_modules/postcss-normalize-timing-functions": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/postcss-normalize-timing-functions/-/postcss-normalize-timing-functions-6.0.2.tgz", + "integrity": "sha512-a+YrtMox4TBtId/AEwbA03VcJgtyW4dGBizPl7e88cTFULYsprgHWTbfyjSLyHeBcK/Q9JhXkt2ZXiwaVHoMzA==", + "license": "MIT", + "dependencies": { + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^14 || ^16 || >=18.0" + }, + "peerDependencies": { + "postcss": "^8.4.31" } }, - "node_modules/normalize-path": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", - "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", + "node_modules/postcss-normalize-unicode": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/postcss-normalize-unicode/-/postcss-normalize-unicode-6.1.0.tgz", + "integrity": "sha512-QVC5TQHsVj33otj8/JD869Ndr5Xcc/+fwRh4HAsFsAeygQQXm+0PySrKbr/8tkDKzW+EVT3QkqZMfFrGiossDg==", "license": "MIT", + "dependencies": { + "browserslist": "^4.23.0", + "postcss-value-parser": "^4.2.0" + }, "engines": { - "node": ">=0.10.0" + "node": "^14 || ^16 || >=18.0" + }, + "peerDependencies": { + "postcss": "^8.4.31" } }, - "node_modules/normalize-url": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-8.1.0.tgz", - "integrity": "sha512-X06Mfd/5aKsRHc0O0J5CUedwnPmnDtLF2+nq+KN9KSDlJHkPuh0JUviWjEWMe0SW/9TDdSLVPuk7L5gGTIA1/w==", - "dev": true, + "node_modules/postcss-normalize-url": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/postcss-normalize-url/-/postcss-normalize-url-6.0.2.tgz", + "integrity": "sha512-kVNcWhCeKAzZ8B4pv/DnrU1wNh458zBNp8dh4y5hhxih5RZQ12QWMuQrDgPRw3LRl8mN9vOVfHl7uhvHYMoXsQ==", "license": "MIT", + "dependencies": { + "postcss-value-parser": "^4.2.0" + }, "engines": { - "node": ">=14.16" + "node": "^14 || ^16 || >=18.0" }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "peerDependencies": { + "postcss": "^8.4.31" } }, - "node_modules/npm-run-all": { - "version": "4.1.5", - "resolved": "https://registry.npmjs.org/npm-run-all/-/npm-run-all-4.1.5.tgz", - "integrity": "sha512-Oo82gJDAVcaMdi3nuoKFavkIHBRVqQ1qvMb+9LHk/cF4P6B2m8aP04hGf7oL6wZ9BuGwX1onlLhpuoofSyoQDQ==", - "dev": true, + "node_modules/postcss-normalize-whitespace": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/postcss-normalize-whitespace/-/postcss-normalize-whitespace-6.0.2.tgz", + "integrity": "sha512-sXZ2Nj1icbJOKmdjXVT9pnyHQKiSAyuNQHSgRCUgThn2388Y9cGVDR+E9J9iAYbSbLHI+UUwLVl1Wzco/zgv0Q==", "license": "MIT", "dependencies": { - "ansi-styles": "^3.2.1", - "chalk": "^2.4.1", - "cross-spawn": "^6.0.5", - "memorystream": "^0.3.1", - "minimatch": "^3.0.4", - "pidtree": "^0.3.0", - "read-pkg": "^3.0.0", - "shell-quote": "^1.6.1", - "string.prototype.padend": "^3.0.0" + "postcss-value-parser": "^4.2.0" }, - "bin": { - "npm-run-all": "bin/npm-run-all/index.js", - "run-p": "bin/run-p/index.js", - "run-s": "bin/run-s/index.js" + "engines": { + "node": "^14 || ^16 || >=18.0" }, + "peerDependencies": { + "postcss": "^8.4.31" + } + }, + "node_modules/postcss-opacity-percentage": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/postcss-opacity-percentage/-/postcss-opacity-percentage-3.0.0.tgz", + "integrity": "sha512-K6HGVzyxUxd/VgZdX04DCtdwWJ4NGLG212US4/LA1TLAbHgmAsTWVR86o+gGIbFtnTkfOpb9sCRBx8K7HO66qQ==", + "funding": [ + { + "type": "kofi", + "url": "https://ko-fi.com/mrcgrtz" + }, + { + "type": "liberapay", + "url": "https://liberapay.com/mrcgrtz" + } + ], + "license": "MIT", "engines": { - "node": ">= 4" + "node": ">=18" + }, + "peerDependencies": { + "postcss": "^8.4" } }, - "node_modules/npm-run-all/node_modules/ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "dev": true, + "node_modules/postcss-ordered-values": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/postcss-ordered-values/-/postcss-ordered-values-6.0.2.tgz", + "integrity": "sha512-VRZSOB+JU32RsEAQrO94QPkClGPKJEL/Z9PCBImXMhIeK5KAYo6slP/hBYlLgrCjFxyqvn5VC81tycFEDBLG1Q==", "license": "MIT", "dependencies": { - "color-convert": "^1.9.0" + "cssnano-utils": "^4.0.2", + "postcss-value-parser": "^4.2.0" }, "engines": { - "node": ">=4" + "node": "^14 || ^16 || >=18.0" + }, + "peerDependencies": { + "postcss": "^8.4.31" } }, - "node_modules/npm-run-all/node_modules/chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "dev": true, - "license": "MIT", + "node_modules/postcss-overflow-shorthand": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/postcss-overflow-shorthand/-/postcss-overflow-shorthand-6.0.0.tgz", + "integrity": "sha512-BdDl/AbVkDjoTofzDQnwDdm/Ym6oS9KgmO7Gr+LHYjNWJ6ExORe4+3pcLQsLA9gIROMkiGVjjwZNoL/mpXHd5Q==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "license": "MIT-0", "dependencies": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" + "postcss-value-parser": "^4.2.0" }, "engines": { - "node": ">=4" + "node": ">=18" + }, + "peerDependencies": { + "postcss": "^8.4" } }, - "node_modules/npm-run-all/node_modules/color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", - "dev": true, + "node_modules/postcss-page-break": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/postcss-page-break/-/postcss-page-break-3.0.4.tgz", + "integrity": "sha512-1JGu8oCjVXLa9q9rFTo4MbeeA5FMe00/9C7lN4va606Rdb+HkxXtXsmEDrIraQ11fGz/WvKWa8gMuCKkrXpTsQ==", "license": "MIT", - "dependencies": { - "color-name": "1.1.3" + "peerDependencies": { + "postcss": "^8" } }, - "node_modules/npm-run-all/node_modules/color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", - "dev": true, - "license": "MIT" - }, - "node_modules/npm-run-all/node_modules/cross-spawn": { - "version": "6.0.6", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.6.tgz", - "integrity": "sha512-VqCUuhcd1iB+dsv8gxPttb5iZh/D0iubSP21g36KXdEuf6I5JiioesUVjpCdHV9MZRUfVFlvwtIUyPfxo5trtw==", - "dev": true, - "license": "MIT", + "node_modules/postcss-place": { + "version": "10.0.0", + "resolved": "https://registry.npmjs.org/postcss-place/-/postcss-place-10.0.0.tgz", + "integrity": "sha512-5EBrMzat2pPAxQNWYavwAfoKfYcTADJ8AXGVPcUZ2UkNloUTWzJQExgrzrDkh3EKzmAx1evfTAzF9I8NGcc+qw==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "license": "MIT-0", "dependencies": { - "nice-try": "^1.0.4", - "path-key": "^2.0.1", - "semver": "^5.5.0", - "shebang-command": "^1.2.0", - "which": "^1.2.9" + "postcss-value-parser": "^4.2.0" }, "engines": { - "node": ">=4.8" + "node": ">=18" + }, + "peerDependencies": { + "postcss": "^8.4" } }, - "node_modules/npm-run-all/node_modules/escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", - "dev": true, - "license": "MIT", + "node_modules/postcss-preset-env": { + "version": "10.5.0", + "resolved": "https://registry.npmjs.org/postcss-preset-env/-/postcss-preset-env-10.5.0.tgz", + "integrity": "sha512-xgxFQPAPxeWmsgy8cR7GM1PGAL/smA5E9qU7K//D4vucS01es3M0fDujhDJn3kY8Ip7/vVYcecbe1yY+vBo3qQ==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "license": "MIT-0", + "dependencies": { + "@csstools/postcss-alpha-function": "^1.0.1", + "@csstools/postcss-cascade-layers": "^5.0.2", + "@csstools/postcss-color-function": "^4.0.12", + "@csstools/postcss-color-function-display-p3-linear": "^1.0.1", + "@csstools/postcss-color-mix-function": "^3.0.12", + "@csstools/postcss-color-mix-variadic-function-arguments": "^1.0.2", + "@csstools/postcss-content-alt-text": "^2.0.8", + "@csstools/postcss-contrast-color-function": "^2.0.12", + "@csstools/postcss-exponential-functions": "^2.0.9", + "@csstools/postcss-font-format-keywords": "^4.0.0", + "@csstools/postcss-gamut-mapping": "^2.0.11", + "@csstools/postcss-gradients-interpolation-method": "^5.0.12", + "@csstools/postcss-hwb-function": "^4.0.12", + "@csstools/postcss-ic-unit": "^4.0.4", + "@csstools/postcss-initial": "^2.0.1", + "@csstools/postcss-is-pseudo-class": "^5.0.3", + "@csstools/postcss-light-dark-function": "^2.0.11", + "@csstools/postcss-logical-float-and-clear": "^3.0.0", + "@csstools/postcss-logical-overflow": "^2.0.0", + "@csstools/postcss-logical-overscroll-behavior": "^2.0.0", + "@csstools/postcss-logical-resize": "^3.0.0", + "@csstools/postcss-logical-viewport-units": "^3.0.4", + "@csstools/postcss-media-minmax": "^2.0.9", + "@csstools/postcss-media-queries-aspect-ratio-number-values": "^3.0.5", + "@csstools/postcss-nested-calc": "^4.0.0", + "@csstools/postcss-normalize-display-values": "^4.0.0", + "@csstools/postcss-oklab-function": "^4.0.12", + "@csstools/postcss-position-area-property": "^1.0.0", + "@csstools/postcss-progressive-custom-properties": "^4.2.1", + "@csstools/postcss-random-function": "^2.0.1", + "@csstools/postcss-relative-color-syntax": "^3.0.12", + "@csstools/postcss-scope-pseudo-class": "^4.0.1", + "@csstools/postcss-sign-functions": "^1.1.4", + "@csstools/postcss-stepped-value-functions": "^4.0.9", + "@csstools/postcss-system-ui-font-family": "^1.0.0", + "@csstools/postcss-text-decoration-shorthand": "^4.0.3", + "@csstools/postcss-trigonometric-functions": "^4.0.9", + "@csstools/postcss-unset-value": "^4.0.0", + "autoprefixer": "^10.4.22", + "browserslist": "^4.28.0", + "css-blank-pseudo": "^7.0.1", + "css-has-pseudo": "^7.0.3", + "css-prefers-color-scheme": "^10.0.0", + "cssdb": "^8.5.2", + "postcss-attribute-case-insensitive": "^7.0.1", + "postcss-clamp": "^4.1.0", + "postcss-color-functional-notation": "^7.0.12", + "postcss-color-hex-alpha": "^10.0.0", + "postcss-color-rebeccapurple": "^10.0.0", + "postcss-custom-media": "^11.0.6", + "postcss-custom-properties": "^14.0.6", + "postcss-custom-selectors": "^8.0.5", + "postcss-dir-pseudo-class": "^9.0.1", + "postcss-double-position-gradients": "^6.0.4", + "postcss-focus-visible": "^10.0.1", + "postcss-focus-within": "^9.0.1", + "postcss-font-variant": "^5.0.0", + "postcss-gap-properties": "^6.0.0", + "postcss-image-set-function": "^7.0.0", + "postcss-lab-function": "^7.0.12", + "postcss-logical": "^8.1.0", + "postcss-nesting": "^13.0.2", + "postcss-opacity-percentage": "^3.0.0", + "postcss-overflow-shorthand": "^6.0.0", + "postcss-page-break": "^3.0.4", + "postcss-place": "^10.0.0", + "postcss-pseudo-class-any-link": "^10.0.1", + "postcss-replace-overflow-wrap": "^4.0.0", + "postcss-selector-not": "^8.0.1" + }, "engines": { - "node": ">=0.8.0" + "node": ">=18" + }, + "peerDependencies": { + "postcss": "^8.4" } }, - "node_modules/npm-run-all/node_modules/has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", - "dev": true, - "license": "MIT", + "node_modules/postcss-pseudo-class-any-link": { + "version": "10.0.1", + "resolved": "https://registry.npmjs.org/postcss-pseudo-class-any-link/-/postcss-pseudo-class-any-link-10.0.1.tgz", + "integrity": "sha512-3el9rXlBOqTFaMFkWDOkHUTQekFIYnaQY55Rsp8As8QQkpiSgIYEcF/6Ond93oHiDsGb4kad8zjt+NPlOC1H0Q==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "license": "MIT-0", + "dependencies": { + "postcss-selector-parser": "^7.0.0" + }, "engines": { - "node": ">=4" + "node": ">=18" + }, + "peerDependencies": { + "postcss": "^8.4" } }, - "node_modules/npm-run-all/node_modules/path-key": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz", - "integrity": "sha512-fEHGKCSmUSDPv4uoj8AlD+joPlq3peND+HRYyxFz4KPw4z926S/b8rIuFs2FYJg3BwsxJf6A9/3eIdLaYC+9Dw==", - "dev": true, + "node_modules/postcss-pseudo-class-any-link/node_modules/postcss-selector-parser": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-7.1.1.tgz", + "integrity": "sha512-orRsuYpJVw8LdAwqqLykBj9ecS5/cRHlI5+nvTo8LcCKmzDmqVORXtOIYEEQuL9D4BxtA1lm5isAqzQZCoQ6Eg==", "license": "MIT", + "dependencies": { + "cssesc": "^3.0.0", + "util-deprecate": "^1.0.2" + }, "engines": { "node": ">=4" } }, - "node_modules/npm-run-all/node_modules/pidtree": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/pidtree/-/pidtree-0.3.1.tgz", - "integrity": "sha512-qQbW94hLHEqCg7nhby4yRC7G2+jYHY4Rguc2bjw7Uug4GIJuu1tvf2uHaZv5Q8zdt+WKJ6qK1FOI6amaWUo5FA==", - "dev": true, + "node_modules/postcss-reduce-idents": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/postcss-reduce-idents/-/postcss-reduce-idents-6.0.3.tgz", + "integrity": "sha512-G3yCqZDpsNPoQgbDUy3T0E6hqOQ5xigUtBQyrmq3tn2GxlyiL0yyl7H+T8ulQR6kOcHJ9t7/9H4/R2tv8tJbMA==", "license": "MIT", - "bin": { - "pidtree": "bin/pidtree.js" + "dependencies": { + "postcss-value-parser": "^4.2.0" }, "engines": { - "node": ">=0.10" + "node": "^14 || ^16 || >=18.0" + }, + "peerDependencies": { + "postcss": "^8.4.31" } }, - "node_modules/npm-run-all/node_modules/semver": { - "version": "5.7.2", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz", - "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==", - "dev": true, - "license": "ISC", - "bin": { - "semver": "bin/semver" + "node_modules/postcss-reduce-initial": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/postcss-reduce-initial/-/postcss-reduce-initial-6.1.0.tgz", + "integrity": "sha512-RarLgBK/CrL1qZags04oKbVbrrVK2wcxhvta3GCxrZO4zveibqbRPmm2VI8sSgCXwoUHEliRSbOfpR0b/VIoiw==", + "license": "MIT", + "dependencies": { + "browserslist": "^4.23.0", + "caniuse-api": "^3.0.0" + }, + "engines": { + "node": "^14 || ^16 || >=18.0" + }, + "peerDependencies": { + "postcss": "^8.4.31" } }, - "node_modules/npm-run-all/node_modules/shebang-command": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz", - "integrity": "sha512-EV3L1+UQWGor21OmnvojK36mhg+TyIKDh3iFBKBohr5xeXIhNBcx8oWdgkTEEQ+BEFFYdLRuqMfd5L84N1V5Vg==", - "dev": true, + "node_modules/postcss-reduce-transforms": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/postcss-reduce-transforms/-/postcss-reduce-transforms-6.0.2.tgz", + "integrity": "sha512-sB+Ya++3Xj1WaT9+5LOOdirAxP7dJZms3GRcYheSPi1PiTMigsxHAdkrbItHxwYHr4kt1zL7mmcHstgMYT+aiA==", "license": "MIT", "dependencies": { - "shebang-regex": "^1.0.0" + "postcss-value-parser": "^4.2.0" }, "engines": { - "node": ">=0.10.0" + "node": "^14 || ^16 || >=18.0" + }, + "peerDependencies": { + "postcss": "^8.4.31" } }, - "node_modules/npm-run-all/node_modules/shebang-regex": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz", - "integrity": "sha512-wpoSFAxys6b2a2wHZ1XpDSgD7N9iVjg29Ph9uV/uaP9Ex/KXlkTZTeddxDPSYQpgvzKLGJke2UU0AzoGCjNIvQ==", - "dev": true, + "node_modules/postcss-replace-overflow-wrap": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/postcss-replace-overflow-wrap/-/postcss-replace-overflow-wrap-4.0.0.tgz", + "integrity": "sha512-KmF7SBPphT4gPPcKZc7aDkweHiKEEO8cla/GjcBK+ckKxiZslIu3C4GCRW3DNfL0o7yW7kMQu9xlZ1kXRXLXtw==", "license": "MIT", - "engines": { - "node": ">=0.10.0" + "peerDependencies": { + "postcss": "^8.0.3" } }, - "node_modules/npm-run-all/node_modules/supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "dev": true, + "node_modules/postcss-selector-not": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/postcss-selector-not/-/postcss-selector-not-8.0.1.tgz", + "integrity": "sha512-kmVy/5PYVb2UOhy0+LqUYAhKj7DUGDpSWa5LZqlkWJaaAV+dxxsOG3+St0yNLu6vsKD7Dmqx+nWQt0iil89+WA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], "license": "MIT", "dependencies": { - "has-flag": "^3.0.0" + "postcss-selector-parser": "^7.0.0" }, "engines": { - "node": ">=4" + "node": ">=18" + }, + "peerDependencies": { + "postcss": "^8.4" } }, - "node_modules/npm-run-all/node_modules/which": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", - "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", - "dev": true, - "license": "ISC", + "node_modules/postcss-selector-not/node_modules/postcss-selector-parser": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-7.1.1.tgz", + "integrity": "sha512-orRsuYpJVw8LdAwqqLykBj9ecS5/cRHlI5+nvTo8LcCKmzDmqVORXtOIYEEQuL9D4BxtA1lm5isAqzQZCoQ6Eg==", + "license": "MIT", "dependencies": { - "isexe": "^2.0.0" + "cssesc": "^3.0.0", + "util-deprecate": "^1.0.2" }, - "bin": { - "which": "bin/which" + "engines": { + "node": ">=4" } }, - "node_modules/npm-run-path": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz", - "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==", - "dev": true, + "node_modules/postcss-selector-parser": { + "version": "6.1.2", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.1.2.tgz", + "integrity": "sha512-Q8qQfPiZ+THO/3ZrOrO0cJJKfpYCagtMUkXbnEfmgUjwXg6z/WBeOyS9APBBPCTSiDV+s4SwQGu8yFsiMRIudg==", "license": "MIT", "dependencies": { - "path-key": "^3.0.0" + "cssesc": "^3.0.0", + "util-deprecate": "^1.0.2" }, "engines": { - "node": ">=8" + "node": ">=4" } }, - "node_modules/npmlog": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/npmlog/-/npmlog-5.0.1.tgz", - "integrity": "sha512-AqZtDUWOMKs1G/8lwylVjrdYgqA4d9nu8hc+0gzRxlDb1I10+FHBGMXs6aiQHFdCUUlqH99MUMuLfzWDNDtfxw==", - "deprecated": "This package is no longer supported.", - "license": "ISC", - "optional": true, + "node_modules/postcss-sort-media-queries": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/postcss-sort-media-queries/-/postcss-sort-media-queries-5.2.0.tgz", + "integrity": "sha512-AZ5fDMLD8SldlAYlvi8NIqo0+Z8xnXU2ia0jxmuhxAU+Lqt9K+AlmLNJ/zWEnE9x+Zx3qL3+1K20ATgNOr3fAA==", + "license": "MIT", "dependencies": { - "are-we-there-yet": "^2.0.0", - "console-control-strings": "^1.1.0", - "gauge": "^3.0.0", - "set-blocking": "^2.0.0" + "sort-css-media-queries": "2.2.0" + }, + "engines": { + "node": ">=14.0.0" + }, + "peerDependencies": { + "postcss": "^8.4.23" } }, - "node_modules/nullthrows": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/nullthrows/-/nullthrows-1.1.1.tgz", - "integrity": "sha512-2vPPEi+Z7WqML2jZYddDIfy5Dqb0r2fze2zTxNNknZaFpVHU3mFB3R+DWeJWGVx0ecvttSGlJTI+WG+8Z4cDWw==", + "node_modules/postcss-svgo": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/postcss-svgo/-/postcss-svgo-6.0.3.tgz", + "integrity": "sha512-dlrahRmxP22bX6iKEjOM+c8/1p+81asjKT+V5lrgOH944ryx/OHpclnIbGsKVd3uWOXFLYJwCVf0eEkJGvO96g==", "license": "MIT", - "peer": true + "dependencies": { + "postcss-value-parser": "^4.2.0", + "svgo": "^3.2.0" + }, + "engines": { + "node": "^14 || ^16 || >= 18" + }, + "peerDependencies": { + "postcss": "^8.4.31" + } }, - "node_modules/number-to-bn": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/number-to-bn/-/number-to-bn-1.7.0.tgz", - "integrity": "sha512-wsJ9gfSz1/s4ZsJN01lyonwuxA1tml6X1yBDnfpMglypcBRFZZkus26EdPSlqS5GJfYddVZa22p3VNb3z5m5Ig==", + "node_modules/postcss-unique-selectors": { + "version": "6.0.4", + "resolved": "https://registry.npmjs.org/postcss-unique-selectors/-/postcss-unique-selectors-6.0.4.tgz", + "integrity": "sha512-K38OCaIrO8+PzpArzkLKB42dSARtC2tmG6PvD4b1o1Q2E9Os8jzfWFfSy/rixsHwohtsDdFtAWGjFVFUdwYaMg==", "license": "MIT", "dependencies": { - "bn.js": "4.11.6", - "strip-hex-prefix": "1.0.0" + "postcss-selector-parser": "^6.0.16" }, "engines": { - "node": ">=6.5.0", - "npm": ">=3" + "node": "^14 || ^16 || >=18.0" + }, + "peerDependencies": { + "postcss": "^8.4.31" } }, - "node_modules/number-to-bn/node_modules/bn.js": { - "version": "4.11.6", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.6.tgz", - "integrity": "sha512-XWwnNNFCuuSQ0m3r3C4LE3EiORltHd9M05pq6FOlVeiophzRbMo50Sbz1ehl8K3Z+jw9+vmgnXefY1hz8X+2wA==", - "license": "MIT" - }, - "node_modules/nwsapi": { - "version": "2.2.22", - "resolved": "https://registry.npmjs.org/nwsapi/-/nwsapi-2.2.22.tgz", - "integrity": "sha512-ujSMe1OWVn55euT1ihwCI1ZcAaAU3nxUiDwfDQldc51ZXaB9m2AyOn6/jh1BLe2t/G8xd6uKG1UBF2aZJeg2SQ==", - "dev": true, + "node_modules/postcss-value-parser": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz", + "integrity": "sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==", "license": "MIT" }, - "node_modules/ob1": { - "version": "0.83.3", - "resolved": "https://registry.npmjs.org/ob1/-/ob1-0.83.3.tgz", - "integrity": "sha512-egUxXCDwoWG06NGCS5s5AdcpnumHKJlfd3HH06P3m9TEMwwScfcY35wpQxbm9oHof+dM/lVH9Rfyu1elTVelSA==", + "node_modules/postcss-zindex": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/postcss-zindex/-/postcss-zindex-6.0.2.tgz", + "integrity": "sha512-5BxW9l1evPB/4ZIc+2GobEBoKC+h8gPGCMi+jxsYvd2x0mjq7wazk6DrP71pStqxE9Foxh5TVnonbWpFZzXaYg==", "license": "MIT", - "peer": true, - "dependencies": { - "flow-enums-runtime": "^0.0.6" - }, "engines": { - "node": ">=20.19.4" + "node": "^14 || ^16 || >=18.0" + }, + "peerDependencies": { + "postcss": "^8.4.31" } }, - "node_modules/object-assign": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", - "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==", + "node_modules/postgres-array": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/postgres-array/-/postgres-array-2.0.0.tgz", + "integrity": "sha512-VpZrUqU5A69eQyW2c5CA1jtLecCsN2U/bD6VilrFDWq5+5UIEVO7nazS3TEcHf1zuPYO/sqGvUvW62g86RXZuA==", "license": "MIT", "engines": { - "node": ">=0.10.0" + "node": ">=4" } }, - "node_modules/object-hash": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/object-hash/-/object-hash-2.2.0.tgz", - "integrity": "sha512-gScRMn0bS5fH+IuwyIFgnh9zBdo4DV+6GhygmWM9HyNJSgS0hScp1f5vjtm7oIIOiT9trXrShAkLFSc2IqKNgw==", + "node_modules/postgres-bytea": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/postgres-bytea/-/postgres-bytea-1.0.0.tgz", + "integrity": "sha512-xy3pmLuQqRBZBXDULy7KbaitYqLcmxigw14Q5sj8QBVLqEwXfeybIKVWiqAXTlcvdvb0+xkOtDbfQMOf4lST1w==", "license": "MIT", "engines": { - "node": ">= 6" + "node": ">=0.10.0" } }, - "node_modules/object-inspect": { - "version": "1.13.4", - "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.4.tgz", - "integrity": "sha512-W67iLl4J2EXEGTbfeHCffrjDfitvLANg0UlX3wFUUSTx92KXRFegMHUVgSqE+wvhAbi4WqjGg9czysTV2Epbew==", + "node_modules/postgres-date": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/postgres-date/-/postgres-date-1.0.7.tgz", + "integrity": "sha512-suDmjLVQg78nMK2UZ454hAG+OAW+HQPZ6n++TNDUX+L0+uUlLywnoxJKDou51Zm+zTCjrCl0Nq6J9C5hP9vK/Q==", "license": "MIT", "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "node": ">=0.10.0" } }, - "node_modules/object-is": { - "version": "1.1.6", - "resolved": "https://registry.npmjs.org/object-is/-/object-is-1.1.6.tgz", - "integrity": "sha512-F8cZ+KfGlSGi09lJT7/Nd6KJZ9ygtvYC0/UYYLI9nmQKLMnydpB9yvbv9K1uSkEu7FU9vYPmVwLg328tX+ot3Q==", - "dev": true, + "node_modules/postgres-interval": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/postgres-interval/-/postgres-interval-1.2.0.tgz", + "integrity": "sha512-9ZhXKM/rw350N1ovuWHbGxnGh/SNJ4cnxHiM0rxE4VN41wsg8P8zWn9hv/buK00RP4WvlOyr/RBDiptyxVbkZQ==", "license": "MIT", "dependencies": { - "call-bind": "^1.0.7", - "define-properties": "^1.2.1" + "xtend": "^4.0.0" }, "engines": { - "node": ">= 0.4" - }, + "node": ">=0.10.0" + } + }, + "node_modules/preact": { + "version": "10.4.1", + "resolved": "https://registry.npmjs.org/preact/-/preact-10.4.1.tgz", + "integrity": "sha512-WKrRpCSwL2t3tpOOGhf2WfTpcmbpxaWtDbdJdKdjd0aEiTkvOmS4NBkG6kzlaAHI9AkQ3iVqbFWM3Ei7mZ4o1Q==", + "license": "MIT", "funding": { - "url": "https://github.com/sponsors/ljharb" + "type": "opencollective", + "url": "https://opencollective.com/preact" } }, - "node_modules/object-keys": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", - "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", + "node_modules/prelude-ls": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", + "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", "dev": true, "license": "MIT", "engines": { - "node": ">= 0.4" + "node": ">= 0.8.0" } }, - "node_modules/object.assign": { - "version": "4.1.7", - "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.7.tgz", - "integrity": "sha512-nK28WOo+QIjBkDduTINE4JkF/UJJKyf2EJxvJKfblDpyg0Q+pkOHNTL0Qwy6NP6FhE/EnzV73BxxqcJaXY9anw==", + "node_modules/prettier": { + "version": "3.6.2", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.6.2.tgz", + "integrity": "sha512-I7AIg5boAr5R0FFtJ6rCfD+LFsWHp81dolrFD8S79U9tb8Az2nGrJncnMSnys+bpQJfRUzqs9hnA81OAA3hCuQ==", "dev": true, "license": "MIT", - "dependencies": { - "call-bind": "^1.0.8", - "call-bound": "^1.0.3", - "define-properties": "^1.2.1", - "es-object-atoms": "^1.0.0", - "has-symbols": "^1.1.0", - "object-keys": "^1.1.1" + "peer": true, + "bin": { + "prettier": "bin/prettier.cjs" }, "engines": { - "node": ">= 0.4" + "node": ">=14" }, "funding": { - "url": "https://github.com/sponsors/ljharb" + "url": "https://github.com/prettier/prettier?sponsor=1" } }, - "node_modules/object.entries": { - "version": "1.1.9", - "resolved": "https://registry.npmjs.org/object.entries/-/object.entries-1.1.9.tgz", - "integrity": "sha512-8u/hfXFRBD1O0hPUjioLhoWFHRmt6tKA4/vZPyckBr18l1KE9uHrFaFaUi8MDRTpi4uak2goyPTSNJLXX2k2Hw==", + "node_modules/prettier-linter-helpers": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/prettier-linter-helpers/-/prettier-linter-helpers-1.0.0.tgz", + "integrity": "sha512-GbK2cP9nraSSUF9N2XwUwqfzlAFlMNYYl+ShE/V+H8a9uNl/oUqB1w2EL54Jh0OlyRSd8RfWYJ3coVS4TROP2w==", "dev": true, "license": "MIT", "dependencies": { - "call-bind": "^1.0.8", - "call-bound": "^1.0.4", - "define-properties": "^1.2.1", - "es-object-atoms": "^1.1.1" + "fast-diff": "^1.1.2" }, "engines": { - "node": ">= 0.4" + "node": ">=6.0.0" } }, - "node_modules/object.fromentries": { - "version": "2.0.8", - "resolved": "https://registry.npmjs.org/object.fromentries/-/object.fromentries-2.0.8.tgz", - "integrity": "sha512-k6E21FzySsSK5a21KRADBd/NGneRegFO5pLHfdQLpRDETUNJueLXs3WCzyQ3tFRDYgbq3KHGXfTbi2bs8WQ6rQ==", + "node_modules/prettier-plugin-solidity": { + "version": "1.4.3", + "resolved": "https://registry.npmjs.org/prettier-plugin-solidity/-/prettier-plugin-solidity-1.4.3.tgz", + "integrity": "sha512-Mrr/iiR9f9IaeGRMZY2ApumXcn/C5Gs3S7B7hWB3gigBFML06C0yEyW86oLp0eqiA0qg+46FaChgLPJCj/pIlg==", "dev": true, "license": "MIT", "dependencies": { - "call-bind": "^1.0.7", - "define-properties": "^1.2.1", - "es-abstract": "^1.23.2", - "es-object-atoms": "^1.0.0" + "@solidity-parser/parser": "^0.20.1", + "semver": "^7.7.1" }, "engines": { - "node": ">= 0.4" + "node": ">=18" }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "peerDependencies": { + "prettier": ">=2.3.0" } }, - "node_modules/object.groupby": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/object.groupby/-/object.groupby-1.0.3.tgz", - "integrity": "sha512-+Lhy3TQTuzXI5hevh8sBGqbmurHbbIjAi0Z4S63nthVLmLxfbj4T54a4CfZrXIrt9iP4mVAPYMo/v99taj3wjQ==", + "node_modules/prettier-plugin-solidity/node_modules/@solidity-parser/parser": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@solidity-parser/parser/-/parser-0.20.2.tgz", + "integrity": "sha512-rbu0bzwNvMcwAjH86hiEAcOeRI2EeK8zCkHDrFykh/Al8mvJeFmjy3UrE7GYQjNwOgbGUUtCn5/k8CB8zIu7QA==", "dev": true, - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.7", - "define-properties": "^1.2.1", - "es-abstract": "^1.23.2" + "license": "MIT" + }, + "node_modules/prettier-plugin-solidity/node_modules/semver": { + "version": "7.7.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.2.tgz", + "integrity": "sha512-RF0Fw+rO5AMf9MAyaRXI4AV0Ulj5lMHqVxxdSgiVbixSCXoEmmX/jk0CuJw4+3SqroYO9VoUh+HcuJivvtJemA==", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver.js" }, "engines": { - "node": ">= 0.4" + "node": ">=10" } }, - "node_modules/object.hasown": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/object.hasown/-/object.hasown-1.1.4.tgz", - "integrity": "sha512-FZ9LZt9/RHzGySlBARE3VF+gE26TxR38SdmqOqliuTnl9wrKulaQs+4dee1V+Io8VfxqzAfHu6YuRgUy8OHoTg==", - "dev": true, + "node_modules/pretty-error": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/pretty-error/-/pretty-error-4.0.0.tgz", + "integrity": "sha512-AoJ5YMAcXKYxKhuJGdcvse+Voc6v1RgnsR3nWcYU7q4t6z0Q6T86sv5Zq8VIRbOWWFpvdGE83LtdSMNd+6Y0xw==", "license": "MIT", "dependencies": { - "define-properties": "^1.2.1", - "es-abstract": "^1.23.2", - "es-object-atoms": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "lodash": "^4.17.20", + "renderkid": "^3.0.0" } }, - "node_modules/object.values": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.2.1.tgz", - "integrity": "sha512-gXah6aZrcUxjWg2zR2MwouP2eHlCBzdV4pygudehaKXSGW4v2AsRQUK+lwwXhii6KFZcunEnmSUoYp5CXibxtA==", - "dev": true, + "node_modules/pretty-format": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.7.0.tgz", + "integrity": "sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ==", "license": "MIT", "dependencies": { - "call-bind": "^1.0.8", - "call-bound": "^1.0.3", - "define-properties": "^1.2.1", - "es-object-atoms": "^1.0.0" + "@jest/schemas": "^29.6.3", + "ansi-styles": "^5.0.0", + "react-is": "^18.0.0" }, "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/obliterator": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/obliterator/-/obliterator-2.0.5.tgz", - "integrity": "sha512-42CPE9AhahZRsMNslczq0ctAEtqk8Eka26QofnqC346BZdHDySk3LWka23LI7ULIw11NmltpiLagIq8gBozxTw==", - "dev": true, + "node_modules/pretty-format/node_modules/react-is": { + "version": "18.3.1", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.3.1.tgz", + "integrity": "sha512-/LLMVyas0ljjAtoYiPqYiL8VWXzUUdThrmU5+n20DZv+a+ClRoevUzw5JxU+Ieh5/c87ytoTBV9G1FiKfNJdmg==", "license": "MIT" }, - "node_modules/ofetch": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/ofetch/-/ofetch-1.4.1.tgz", - "integrity": "sha512-QZj2DfGplQAr2oj9KzceK9Hwz6Whxazmn85yYeVuS3u9XTMOGMRx0kO95MQ+vLsj/S/NwBDMMLU5hpxvI6Tklw==", + "node_modules/pretty-time": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/pretty-time/-/pretty-time-1.1.0.tgz", + "integrity": "sha512-28iF6xPQrP8Oa6uxE6a1biz+lWeTOAPKggvjB8HAs6nVMKZwf5bG++632Dx614hIWgUPkgivRfG+a8uAXGTIbA==", + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/prism-react-renderer": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/prism-react-renderer/-/prism-react-renderer-2.4.1.tgz", + "integrity": "sha512-ey8Ls/+Di31eqzUxC46h8MksNuGx/n0AAC8uKpwFau4RPDYLuE3EXTp8N8G2vX2N7UC/+IXeNUnlWBGGcAG+Ig==", "license": "MIT", "dependencies": { - "destr": "^2.0.3", - "node-fetch-native": "^1.6.4", - "ufo": "^1.5.4" + "@types/prismjs": "^1.26.0", + "clsx": "^2.0.0" + }, + "peerDependencies": { + "react": ">=16.0.0" } }, - "node_modules/on-exit-leak-free": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/on-exit-leak-free/-/on-exit-leak-free-2.1.2.tgz", - "integrity": "sha512-0eJJY6hXLGf1udHwfNftBqH+g73EU4B504nZeKpz1sYRKafAghwxEJunB2O7rDZkL4PGfsMVnTXZ2EjibbqcsA==", + "node_modules/prismjs": { + "version": "1.30.0", + "resolved": "https://registry.npmjs.org/prismjs/-/prismjs-1.30.0.tgz", + "integrity": "sha512-DEvV2ZF2r2/63V+tK8hQvrR2ZGn10srHbXviTlcv7Kpzw8jWiNTqbVgjO3IY8RxrrOUF8VPMQQFysYYYv0YZxw==", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/process": { + "version": "0.11.10", + "resolved": "https://registry.npmjs.org/process/-/process-0.11.10.tgz", + "integrity": "sha512-cdGef/drWFoydD1JsMzuFf8100nZl+GT+yacc2bEced5f9Rjk4z+WtFUTBu9PhOi9j/jfmBPu0mMEY4wIdAF8A==", + "dev": true, "license": "MIT", "engines": { - "node": ">=14.0.0" + "node": ">= 0.6.0" } }, - "node_modules/on-finished": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz", - "integrity": "sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==", + "node_modules/process-nextick-args": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", + "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==", + "license": "MIT" + }, + "node_modules/process-on-spawn": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/process-on-spawn/-/process-on-spawn-1.1.0.tgz", + "integrity": "sha512-JOnOPQ/8TZgjs1JIH/m9ni7FfimjNa/PRx7y/Wb5qdItsnhO0jE4AT7fC0HjC28DUQWDr50dwSYZLdRMlqDq3Q==", + "dev": true, "license": "MIT", "dependencies": { - "ee-first": "1.1.1" + "fromentries": "^1.2.0" }, "engines": { - "node": ">= 0.8" + "node": ">=8" } }, - "node_modules/once": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", - "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", - "license": "ISC", - "dependencies": { - "wrappy": "1" - } + "node_modules/process-warning": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/process-warning/-/process-warning-5.0.0.tgz", + "integrity": "sha512-a39t9ApHNx2L4+HBnQKqxxHNs1r7KF+Intd8Q/g1bUh6q0WIp9voPXJ/x0j+ZL45KF1pJd9+q2jLIRMfvEshkA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/fastify" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/fastify" + } + ], + "license": "MIT" }, - "node_modules/one-time": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/one-time/-/one-time-1.0.0.tgz", - "integrity": "sha512-5DXOiRKwuSEcQ/l0kGCF6Q3jcADFv5tSmRaJck/OqkVFcOzutB134KRSfF0xDrL39MNnqxbHBbUUcjZIhTgb2g==", + "node_modules/promise": { + "version": "8.3.0", + "resolved": "https://registry.npmjs.org/promise/-/promise-8.3.0.tgz", + "integrity": "sha512-rZPNPKTOYVNEEKFaq1HqTgOwZD+4/YHS5ukLzQCypkj+OkYx7iv0mA91lJlpPPZ8vMau3IIGj5Qlwrx+8iiSmg==", "license": "MIT", "dependencies": { - "fn.name": "1.x.x" + "asap": "~2.0.6" } }, - "node_modules/onetime": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", - "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", + "node_modules/prompts": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/prompts/-/prompts-2.4.2.tgz", + "integrity": "sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q==", "license": "MIT", "dependencies": { - "mimic-fn": "^2.1.0" + "kleur": "^3.0.3", + "sisteransi": "^1.0.5" }, "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">= 6" } }, - "node_modules/open": { - "version": "7.4.2", - "resolved": "https://registry.npmjs.org/open/-/open-7.4.2.tgz", - "integrity": "sha512-MVHddDVweXZF3awtlAS+6pgKLlm/JgxZ90+/NBurBoQctVOOB/zDdVjcyPzQ+0laDGbsWgrRkflI65sQeOgT9Q==", + "node_modules/prop-types": { + "version": "15.8.1", + "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.8.1.tgz", + "integrity": "sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==", "license": "MIT", - "peer": true, "dependencies": { - "is-docker": "^2.0.0", - "is-wsl": "^2.1.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "loose-envify": "^1.4.0", + "object-assign": "^4.1.1", + "react-is": "^16.13.1" } }, - "node_modules/openai": { - "version": "4.104.0", - "resolved": "https://registry.npmjs.org/openai/-/openai-4.104.0.tgz", - "integrity": "sha512-p99EFNsA/yX6UhVO93f5kJsDRLAg+CTA2RBqdHK4RtK8u5IJw32Hyb2dTGKbnnFmnuoBv5r7Z2CURI9sGZpSuA==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "@types/node": "^18.11.18", - "@types/node-fetch": "^2.6.4", - "abort-controller": "^3.0.0", - "agentkeepalive": "^4.2.1", - "form-data-encoder": "1.7.2", - "formdata-node": "^4.3.2", - "node-fetch": "^2.6.7" - }, - "bin": { - "openai": "bin/cli" - }, - "peerDependencies": { - "ws": "^8.18.0", - "zod": "^3.23.8" - }, - "peerDependenciesMeta": { - "ws": { - "optional": true - }, - "zod": { - "optional": true - } - } + "node_modules/prop-types/node_modules/react-is": { + "version": "16.13.1", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz", + "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==", + "license": "MIT" }, - "node_modules/openai/node_modules/@types/node": { - "version": "18.19.129", - "resolved": "https://registry.npmjs.org/@types/node/-/node-18.19.129.tgz", - "integrity": "sha512-hrmi5jWt2w60ayox3iIXwpMEnfUvOLJCRtrOPbHtH15nTjvO7uhnelvrdAs0dO0/zl5DZ3ZbahiaXEVb54ca/A==", + "node_modules/proper-lockfile": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/proper-lockfile/-/proper-lockfile-4.1.2.tgz", + "integrity": "sha512-TjNPblN4BwAWMXU8s9AEz4JmQxnD1NNL7bNOY/AKUzyamc379FWASUhc/K1pL2noVb+XmZKLL68cjzLsiOAMaA==", "dev": true, "license": "MIT", "dependencies": { - "undici-types": "~5.26.4" + "graceful-fs": "^4.2.4", + "retry": "^0.12.0", + "signal-exit": "^3.0.2" } }, - "node_modules/optionator": { - "version": "0.9.4", - "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.4.tgz", - "integrity": "sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==", + "node_modules/proper-lockfile/node_modules/retry": { + "version": "0.12.0", + "resolved": "https://registry.npmjs.org/retry/-/retry-0.12.0.tgz", + "integrity": "sha512-9LkiTwjUh6rT555DtE9rTX+BKByPfrMzEAtnlEtdEwr3Nkffwiihqe2bWADg+OQRjt9gl6ICdmB/ZFDCGAtSow==", "dev": true, "license": "MIT", - "dependencies": { - "deep-is": "^0.1.3", - "fast-levenshtein": "^2.0.6", - "levn": "^0.4.1", - "prelude-ls": "^1.2.1", - "type-check": "^0.4.0", - "word-wrap": "^1.2.5" - }, "engines": { - "node": ">= 0.8.0" + "node": ">= 4" } }, - "node_modules/ora": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/ora/-/ora-7.0.1.tgz", - "integrity": "sha512-0TUxTiFJWv+JnjWm4o9yvuskpEJLXTcng8MJuKd+SzAzp2o+OP3HWqNhB4OdJRt1Vsd9/mR0oyaEYlOnL7XIRw==", + "node_modules/proper-lockfile/node_modules/signal-exit": { + "version": "3.0.7", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", + "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", + "dev": true, + "license": "ISC" + }, + "node_modules/properties-reader": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/properties-reader/-/properties-reader-2.3.0.tgz", + "integrity": "sha512-z597WicA7nDZxK12kZqHr2TcvwNU1GCfA5UwfDY/HDp3hXPoPlb5rlEx9bwGTiJnc0OqbBTkU975jDToth8Gxw==", "dev": true, "license": "MIT", "dependencies": { - "chalk": "^5.3.0", - "cli-cursor": "^4.0.0", - "cli-spinners": "^2.9.0", - "is-interactive": "^2.0.0", - "is-unicode-supported": "^1.3.0", - "log-symbols": "^5.1.0", - "stdin-discarder": "^0.1.0", - "string-width": "^6.1.0", - "strip-ansi": "^7.1.0" + "mkdirp": "^1.0.4" }, "engines": { - "node": ">=16" + "node": ">=14" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "type": "github", + "url": "https://github.com/steveukx/properties?sponsor=1" } }, - "node_modules/ora/node_modules/ansi-regex": { - "version": "6.2.2", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.2.2.tgz", - "integrity": "sha512-Bq3SmSpyFHaWjPk8If9yc6svM8c56dB5BAtW4Qbw5jHTwwXXcTLoRMkpDJp6VL0XzlWaCHTXrkFURMYmD0sLqg==", + "node_modules/properties-reader/node_modules/mkdirp": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", + "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", "dev": true, "license": "MIT", - "engines": { - "node": ">=12" + "bin": { + "mkdirp": "bin/cmd.js" }, - "funding": { - "url": "https://github.com/chalk/ansi-regex?sponsor=1" + "engines": { + "node": ">=10" } }, - "node_modules/ora/node_modules/chalk": { - "version": "5.6.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-5.6.2.tgz", - "integrity": "sha512-7NzBL0rN6fMUW+f7A6Io4h40qQlG+xGmtMxfbnH/K7TAtt8JQWVQK+6g0UXKMeVJoyV5EkkNsErQ8pVD3bLHbA==", - "dev": true, + "node_modules/property-information": { + "version": "5.6.0", + "resolved": "https://registry.npmjs.org/property-information/-/property-information-5.6.0.tgz", + "integrity": "sha512-YUHSPk+A30YPv+0Qf8i9Mbfe/C0hdPXk1s1jPVToV8pk8BQtpw10ct89Eo7OWkutrwqvT0eicAxlOg3dOAu8JA==", "license": "MIT", - "engines": { - "node": "^12.17.0 || ^14.13 || >=16.0.0" + "dependencies": { + "xtend": "^4.0.0" }, "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" + "type": "github", + "url": "https://github.com/sponsors/wooorm" } }, - "node_modules/ora/node_modules/cli-cursor": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-4.0.0.tgz", - "integrity": "sha512-VGtlMu3x/4DOtIUwEkRezxUZ2lBacNJCHash0N0WeZDBS+7Ux1dm3XWAgWYxLJFMMdOeXMHXorshEFhbMSGelg==", - "dev": true, - "license": "MIT", + "node_modules/proto-list": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/proto-list/-/proto-list-1.2.4.tgz", + "integrity": "sha512-vtK/94akxsTMhe0/cbfpR+syPuszcuwhqVjJq26CuNDgFGj682oRBXOP5MJpv2r7JtE8MsiepGIqvvOTBwn2vA==", + "license": "ISC" + }, + "node_modules/protobufjs": { + "version": "7.2.5", + "resolved": "https://registry.npmjs.org/protobufjs/-/protobufjs-7.2.5.tgz", + "integrity": "sha512-gGXRSXvxQ7UiPgfw8gevrfRWcTlSbOFg+p/N+JVJEK5VhueL2miT6qTymqAmjr1Q5WbOCyJbyrk6JfWKwlFn6A==", + "hasInstallScript": true, + "license": "BSD-3-Clause", "dependencies": { - "restore-cursor": "^4.0.0" + "@protobufjs/aspromise": "^1.1.2", + "@protobufjs/base64": "^1.1.2", + "@protobufjs/codegen": "^2.0.4", + "@protobufjs/eventemitter": "^1.1.0", + "@protobufjs/fetch": "^1.1.0", + "@protobufjs/float": "^1.0.2", + "@protobufjs/inquire": "^1.1.0", + "@protobufjs/path": "^1.1.2", + "@protobufjs/pool": "^1.1.0", + "@protobufjs/utf8": "^1.1.0", + "@types/node": ">=13.7.0", + "long": "^5.0.0" }, "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">=12.0.0" } }, - "node_modules/ora/node_modules/emoji-regex": { - "version": "10.5.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-10.5.0.tgz", - "integrity": "sha512-lb49vf1Xzfx080OKA0o6l8DQQpV+6Vg95zyCJX9VB/BqKYlhG7N4wgROUUHRA+ZPUefLnteQOad7z1kT2bV7bg==", - "dev": true, - "license": "MIT" + "node_modules/protobufjs/node_modules/long": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/long/-/long-5.3.2.tgz", + "integrity": "sha512-mNAgZ1GmyNhD7AuqnTG3/VQ26o760+ZYBPKjPvugO8+nLbYfX6TVpJPseBvopbdY+qpZ/lKUnmEc1LeZYS3QAA==", + "license": "Apache-2.0" }, - "node_modules/ora/node_modules/is-unicode-supported": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-1.3.0.tgz", - "integrity": "sha512-43r2mRvz+8JRIKnWJ+3j8JtjRKZ6GmjzfaE/qiBJnikNnYv/6bagRJ1kUhNk8R5EX/GkobD+r+sfxCPJsiKBLQ==", - "dev": true, + "node_modules/proxy-addr": { + "version": "2.0.7", + "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz", + "integrity": "sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==", "license": "MIT", - "engines": { - "node": ">=12" + "dependencies": { + "forwarded": "0.2.0", + "ipaddr.js": "1.9.1" }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "engines": { + "node": ">= 0.10" } }, - "node_modules/ora/node_modules/log-symbols": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-5.1.0.tgz", - "integrity": "sha512-l0x2DvrW294C9uDCoQe1VSU4gf529FkSZ6leBl4TiqZH/e+0R7hSfHQBNut2mNygDgHwvYHfFLn6Oxb3VWj2rA==", + "node_modules/proxy-compare": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/proxy-compare/-/proxy-compare-2.5.1.tgz", + "integrity": "sha512-oyfc0Tx87Cpwva5ZXezSp5V9vht1c7dZBhvuV/y3ctkgMVUmiAGDVeeB0dKhGSyT0v1ZTEQYpe/RXlBVBNuCLA==", + "license": "MIT" + }, + "node_modules/proxy-from-env": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz", + "integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==", + "license": "MIT" + }, + "node_modules/psl": { + "version": "1.15.0", + "resolved": "https://registry.npmjs.org/psl/-/psl-1.15.0.tgz", + "integrity": "sha512-JZd3gMVBAVQkSs6HdNZo9Sdo0LNcQeMNP3CozBJb3JYC/QUYZTnKxP+f8oWRX4rHP5EurWxqAHTSwUCjlNKa1w==", "dev": true, "license": "MIT", "dependencies": { - "chalk": "^5.0.0", - "is-unicode-supported": "^1.1.0" - }, - "engines": { - "node": ">=12" + "punycode": "^2.3.1" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "url": "https://github.com/sponsors/lupomontero" } }, - "node_modules/ora/node_modules/restore-cursor": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-4.0.0.tgz", - "integrity": "sha512-I9fPXU9geO9bHOt9pHHOhOkYerIMsmVaWB0rA2AI9ERh/+x/i7MV5HKBNrg+ljO5eoPVgCcnFuRjJ9uH6I/3eg==", + "node_modules/public-encrypt": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/public-encrypt/-/public-encrypt-4.0.3.tgz", + "integrity": "sha512-zVpa8oKZSz5bTMTFClc1fQOnyyEzpl5ozpi1B5YcvBrdohMjH2rfsBtyXcuNuwjsDIXmBYlF2N5FlJYhR29t8Q==", "dev": true, "license": "MIT", "dependencies": { - "onetime": "^5.1.0", - "signal-exit": "^3.0.2" - }, - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "bn.js": "^4.1.0", + "browserify-rsa": "^4.0.0", + "create-hash": "^1.1.0", + "parse-asn1": "^5.0.0", + "randombytes": "^2.0.1", + "safe-buffer": "^5.1.2" } }, - "node_modules/ora/node_modules/signal-exit": { - "version": "3.0.7", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", - "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", + "node_modules/public-encrypt/node_modules/bn.js": { + "version": "4.12.2", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.2.tgz", + "integrity": "sha512-n4DSx829VRTRByMRGdjQ9iqsN0Bh4OolPsFnaZBLcbi8iXcB+kJ9s7EnRt4wILZNV3kPLHkRVfOc/HvhC3ovDw==", "dev": true, - "license": "ISC" + "license": "MIT" }, - "node_modules/ora/node_modules/string-width": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-6.1.0.tgz", - "integrity": "sha512-k01swCJAgQmuADB0YIc+7TuatfNvTBVOoaUWJjTB9R4VJzR5vNWzf5t42ESVZFPS8xTySF7CAdV4t/aaIm3UnQ==", - "dev": true, + "node_modules/pump": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.3.tgz", + "integrity": "sha512-todwxLMY7/heScKmntwQG8CXVkWUOdYxIvY2s0VWAAMh/nd8SoYiRaKjlr7+iCs984f2P8zvrfWcDDYVb73NfA==", "license": "MIT", "dependencies": { - "eastasianwidth": "^0.2.0", - "emoji-regex": "^10.2.1", - "strip-ansi": "^7.0.1" - }, + "end-of-stream": "^1.1.0", + "once": "^1.3.1" + } + }, + "node_modules/punycode": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz", + "integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==", + "license": "MIT", "engines": { - "node": ">=16" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">=6" } }, - "node_modules/ora/node_modules/strip-ansi": { - "version": "7.1.2", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.2.tgz", - "integrity": "sha512-gmBGslpoQJtgnMAvOVqGZpEz9dyoKTCzy2nfz/n8aIFhN/jCE/rCmcxabB6jOOHV+0WNnylOxaxBQPSvcWklhA==", - "dev": true, + "node_modules/pupa": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/pupa/-/pupa-3.3.0.tgz", + "integrity": "sha512-LjgDO2zPtoXP2wJpDjZrGdojii1uqO0cnwKoIoUzkfS98HDmbeiGmYiXo3lXeFlq2xvne1QFQhwYXSUCLKtEuA==", "license": "MIT", "dependencies": { - "ansi-regex": "^6.0.1" + "escape-goat": "^4.0.0" }, "engines": { - "node": ">=12" + "node": ">=12.20" }, "funding": { - "url": "https://github.com/chalk/strip-ansi?sponsor=1" + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/ordinal": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/ordinal/-/ordinal-1.0.3.tgz", - "integrity": "sha512-cMddMgb2QElm8G7vdaa02jhUNbTSrhsgAGUz1OokD83uJTwSUn+nKoNoKVVaRa08yF6sgfO7Maou1+bgLd9rdQ==", + "node_modules/pure-rand": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/pure-rand/-/pure-rand-6.1.0.tgz", + "integrity": "sha512-bVWawvoZoBYpp6yIoQtQXHZjmz35RSVHnUOTefl8Vcjr8snTPY1wnpSPMWekcFwbxI6gtmT7rSYPFvz71ldiOA==", "dev": true, + "funding": [ + { + "type": "individual", + "url": "https://github.com/sponsors/dubzzz" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/fast-check" + } + ], "license": "MIT" }, - "node_modules/os-browserify": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/os-browserify/-/os-browserify-0.3.0.tgz", - "integrity": "sha512-gjcpUc3clBf9+210TRaDWbf+rZZZEshZ+DlXMRCeAjp0xhTrnQsKHypIy1J3d5hKdUzj69t708EHtU8P6bUn0A==", - "dev": true, - "license": "MIT" + "node_modules/pvtsutils": { + "version": "1.3.6", + "resolved": "https://registry.npmjs.org/pvtsutils/-/pvtsutils-1.3.6.tgz", + "integrity": "sha512-PLgQXQ6H2FWCaeRak8vvk1GW462lMxB5s3Jm673N82zI4vqtVUPuZdffdZbPDFRoU8kAhItWFtPCWiPpp4/EDg==", + "license": "MIT", + "dependencies": { + "tslib": "^2.8.1" + } }, - "node_modules/os-tmpdir": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", - "integrity": "sha512-D2FR03Vir7FIu45XBY20mTb+/ZSWB00sjU9jdQXt83gDrI4Ztz5Fs7/yy74g2N5SVQY4xY1qDr4rNddwYRVX0g==", + "node_modules/pvutils": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/pvutils/-/pvutils-1.1.3.tgz", + "integrity": "sha512-pMpnA0qRdFp32b1sJl1wOJNxZLQ2cbQx+k6tjNtZ8CpvVhNqEPRgivZ2WOUev2YMajecdH7ctUPDvEe87nariQ==", "license": "MIT", "engines": { - "node": ">=0.10.0" + "node": ">=6.0.0" } }, - "node_modules/outdent": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/outdent/-/outdent-0.5.0.tgz", - "integrity": "sha512-/jHxFIzoMXdqPzTaCpFzAAWhpkSjZPF4Vsn6jAfNpmbH/ymsmd7Qc6VE9BGn0L6YMj6uwpQLxCECpus4ukKS9Q==", - "dev": true, - "license": "MIT" - }, - "node_modules/own-keys": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/own-keys/-/own-keys-1.0.1.tgz", - "integrity": "sha512-qFOyK5PjiWZd+QQIh+1jhdb9LpxTF0qs7Pm8o5QHYZ0M3vKqSqzsZaEB6oWlxZ+q2sJBMI/Ktgd2N5ZwQoRHfg==", + "node_modules/q": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/q/-/q-1.5.1.tgz", + "integrity": "sha512-kV/CThkXo6xyFEZUugw/+pIOywXcDbFYgSct5cT3gqlbkBE1SJdwy6UQoZvodiWF/ckQLZyDE/Bu1M6gVu5lVw==", + "deprecated": "You or someone you depend on is using Q, the JavaScript Promise library that gave JavaScript developers strong feelings about promises. They can almost certainly migrate to the native JavaScript promise now. Thank you literally everyone for joining me in this bet against the odds. Be excellent to each other.\n\n(For a CapTP with native promises, see @endo/eventual-send and @endo/captp)", "dev": true, "license": "MIT", - "dependencies": { - "get-intrinsic": "^1.2.6", - "object-keys": "^1.1.1", - "safe-push-apply": "^1.0.0" - }, "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "node": ">=0.6.0", + "teleport": ">=0.2.0" } }, - "node_modules/ox": { - "version": "0.9.3", - "resolved": "https://registry.npmjs.org/ox/-/ox-0.9.3.tgz", - "integrity": "sha512-KzyJP+fPV4uhuuqrTZyok4DC7vFzi7HLUFiUNEmpbyh59htKWkOC98IONC1zgXJPbHAhQgqs6B0Z6StCGhmQvg==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/wevm" - } - ], + "node_modules/qrcode": { + "version": "1.5.3", + "resolved": "https://registry.npmjs.org/qrcode/-/qrcode-1.5.3.tgz", + "integrity": "sha512-puyri6ApkEHYiVl4CFzo1tDkAZ+ATcnbJrJ6RiBM1Fhctdn/ix9MTE3hRph33omisEbC/2fcfemsseiKgBPKZg==", "license": "MIT", "dependencies": { - "@adraffy/ens-normalize": "^1.11.0", - "@noble/ciphers": "^1.3.0", - "@noble/curves": "1.9.1", - "@noble/hashes": "^1.8.0", - "@scure/bip32": "^1.7.0", - "@scure/bip39": "^1.6.0", - "abitype": "^1.0.9", - "eventemitter3": "5.0.1" + "dijkstrajs": "^1.0.1", + "encode-utf8": "^1.0.3", + "pngjs": "^5.0.0", + "yargs": "^15.3.1" }, - "peerDependencies": { - "typescript": ">=5.4.0" + "bin": { + "qrcode": "bin/qrcode" }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } + "engines": { + "node": ">=10.13.0" } }, - "node_modules/ox/node_modules/@noble/curves": { - "version": "1.9.1", - "resolved": "https://registry.npmjs.org/@noble/curves/-/curves-1.9.1.tgz", - "integrity": "sha512-k11yZxZg+t+gWvBbIswW0yoJlu8cHOC7dhunwOzoWH/mXGBiYyR4YY6hAEK/3EUs4UpB8la1RfdRpeGsFHkWsA==", + "node_modules/qrcode/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "license": "MIT", "dependencies": { - "@noble/hashes": "1.8.0" + "color-convert": "^2.0.1" }, "engines": { - "node": "^14.21.3 || >=16" + "node": ">=8" }, "funding": { - "url": "https://paulmillr.com/funding/" + "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/ox/node_modules/@scure/bip32": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/@scure/bip32/-/bip32-1.7.0.tgz", - "integrity": "sha512-E4FFX/N3f4B80AKWp5dP6ow+flD1LQZo/w8UnLGYZO674jS6YnYeepycOOksv+vLPSpgN35wgKgy+ybfTb2SMw==", - "license": "MIT", + "node_modules/qrcode/node_modules/cliui": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-6.0.0.tgz", + "integrity": "sha512-t6wbgtoCXvAzst7QgXxJYqPt0usEfbgQdftEPbLL/cvv6HPE5VgvqCuAIDR0NgU52ds6rFwqrgakNLrHEjCbrQ==", + "license": "ISC", "dependencies": { - "@noble/curves": "~1.9.0", - "@noble/hashes": "~1.8.0", - "@scure/base": "~1.2.5" - }, - "funding": { - "url": "https://paulmillr.com/funding/" + "string-width": "^4.2.0", + "strip-ansi": "^6.0.0", + "wrap-ansi": "^6.2.0" } }, - "node_modules/ox/node_modules/@scure/bip39": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/@scure/bip39/-/bip39-1.6.0.tgz", - "integrity": "sha512-+lF0BbLiJNwVlev4eKelw1WWLaiKXw7sSl8T6FvBlWkdX+94aGJ4o8XjUdlyhTCjd8c+B3KT3JfS8P0bLRNU6A==", + "node_modules/qrcode/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", "license": "MIT", "dependencies": { - "@noble/hashes": "~1.8.0", - "@scure/base": "~1.2.5" + "color-name": "~1.1.4" }, - "funding": { - "url": "https://paulmillr.com/funding/" + "engines": { + "node": ">=7.0.0" } }, - "node_modules/p-cancelable": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/p-cancelable/-/p-cancelable-3.0.0.tgz", - "integrity": "sha512-mlVgR3PGuzlo0MmTdk4cXqXWlwQDLnONTAg6sm62XkMJEiRxN3GL3SffkYvqwonbkJBcrI7Uvv5Zh9yjvn2iUw==", - "dev": true, + "node_modules/qrcode/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "license": "MIT" + }, + "node_modules/qrcode/node_modules/decamelize": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", + "integrity": "sha512-z2S+W9X73hAUUki+N+9Za2lBlun89zigOyGrsax+KUQ6wKW4ZoWpEYBkGhQjwAjjDCkWxhY0VKEhk8wzY7F5cA==", "license": "MIT", "engines": { - "node": ">=12.20" + "node": ">=0.10.0" } }, - "node_modules/p-filter": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/p-filter/-/p-filter-2.1.0.tgz", - "integrity": "sha512-ZBxxZ5sL2HghephhpGAQdoskxplTwr7ICaehZwLIlfL6acuVgZPm8yBNuRAFBGEqtD/hmUeq9eqLg2ys9Xr/yw==", - "dev": true, + "node_modules/qrcode/node_modules/find-up": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", + "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", "license": "MIT", "dependencies": { - "p-map": "^2.0.0" + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" }, "engines": { "node": ">=8" } }, - "node_modules/p-filter/node_modules/p-map": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/p-map/-/p-map-2.1.0.tgz", - "integrity": "sha512-y3b8Kpd8OAN444hxfBbFfj1FY/RjtTd8tzYwhUqNYXx0fXx2iX4maP4Qr6qhIKbQXI02wTLAda4fYUbDagTUFw==", - "dev": true, + "node_modules/qrcode/node_modules/locate-path": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", + "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", "license": "MIT", + "dependencies": { + "p-locate": "^4.1.0" + }, "engines": { - "node": ">=6" + "node": ">=8" } }, - "node_modules/p-limit": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", - "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", + "node_modules/qrcode/node_modules/p-locate": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", + "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", "license": "MIT", "dependencies": { - "p-try": "^2.0.0" + "p-limit": "^2.2.0" }, "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">=8" } }, - "node_modules/p-locate": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", - "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", - "dev": true, + "node_modules/qrcode/node_modules/wrap-ansi": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz", + "integrity": "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==", "license": "MIT", "dependencies": { - "p-limit": "^3.0.2" + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" }, "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">=8" } }, - "node_modules/p-locate/node_modules/p-limit": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", - "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", - "dev": true, + "node_modules/qrcode/node_modules/y18n": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.3.tgz", + "integrity": "sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ==", + "license": "ISC" + }, + "node_modules/qrcode/node_modules/yargs": { + "version": "15.4.1", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-15.4.1.tgz", + "integrity": "sha512-aePbxDmcYW++PaqBsJ+HYUFwCdv4LVvdnhBy78E57PIor8/OVvhMrADFFEDh8DHDFRv/O9i3lPhsENjO7QX0+A==", "license": "MIT", "dependencies": { - "yocto-queue": "^0.1.0" + "cliui": "^6.0.0", + "decamelize": "^1.2.0", + "find-up": "^4.1.0", + "get-caller-file": "^2.0.1", + "require-directory": "^2.1.1", + "require-main-filename": "^2.0.0", + "set-blocking": "^2.0.0", + "string-width": "^4.2.0", + "which-module": "^2.0.0", + "y18n": "^4.0.0", + "yargs-parser": "^18.1.2" }, "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">=8" } }, - "node_modules/p-locate/node_modules/yocto-queue": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", - "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=10" + "node_modules/qrcode/node_modules/yargs-parser": { + "version": "18.1.3", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-18.1.3.tgz", + "integrity": "sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ==", + "license": "ISC", + "dependencies": { + "camelcase": "^5.0.0", + "decamelize": "^1.2.0" }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "engines": { + "node": ">=6" } }, - "node_modules/p-map": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/p-map/-/p-map-4.0.0.tgz", - "integrity": "sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ==", - "dev": true, - "license": "MIT", + "node_modules/qs": { + "version": "6.11.0", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.11.0.tgz", + "integrity": "sha512-MvjoMCJwEarSbUYk5O+nmoSzSutSsTwF85zcHPQ9OrlFoZOYIjaqBAJIqIXjptyD5vThxGq52Xu/MaJzRkIk4Q==", + "license": "BSD-3-Clause", "dependencies": { - "aggregate-error": "^3.0.0" + "side-channel": "^1.0.4" }, "engines": { - "node": ">=10" + "node": ">=0.6" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/p-try": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", - "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", - "license": "MIT", - "engines": { - "node": ">=6" + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/package-json": { - "version": "8.1.1", - "resolved": "https://registry.npmjs.org/package-json/-/package-json-8.1.1.tgz", - "integrity": "sha512-cbH9IAIJHNj9uXi196JVsRlt7cHKak6u/e6AkL/bkRelZ7rlL3X1YKxsZwa36xipOEKAsdtmaG6aAJoM1fx2zA==", + "node_modules/quansync": { + "version": "0.2.11", + "resolved": "https://registry.npmjs.org/quansync/-/quansync-0.2.11.tgz", + "integrity": "sha512-AifT7QEbW9Nri4tAwR5M/uzpBuqfZf+zwaEM/QkzEjj7NBuFD2rBuy0K3dE+8wltbezDV7JMA0WfnCPYRSYbXA==", "dev": true, + "funding": [ + { + "type": "individual", + "url": "https://github.com/sponsors/antfu" + }, + { + "type": "individual", + "url": "https://github.com/sponsors/sxzz" + } + ], + "license": "MIT" + }, + "node_modules/query-string": { + "version": "7.1.3", + "resolved": "https://registry.npmjs.org/query-string/-/query-string-7.1.3.tgz", + "integrity": "sha512-hh2WYhq4fi8+b+/2Kg9CEge4fDPvHS534aOOvOZeQ3+Vf2mCFsaFBYj0i+iXcAq6I9Vzp5fjMFBlONvayDC1qg==", "license": "MIT", "dependencies": { - "got": "^12.1.0", - "registry-auth-token": "^5.0.1", - "registry-url": "^6.0.0", - "semver": "^7.3.7" + "decode-uri-component": "^0.2.2", + "filter-obj": "^1.1.0", + "split-on-first": "^1.0.0", + "strict-uri-encode": "^2.0.0" }, "engines": { - "node": ">=14.16" + "node": ">=6" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/package-json-from-dist": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/package-json-from-dist/-/package-json-from-dist-1.0.1.tgz", - "integrity": "sha512-UEZIS3/by4OC8vL3P2dTXRETpebLI2NiI5vIrjaD/5UtrkFX/tNbwjTSRAGC/+7CAo2pIcBaRgWmcBBHcsaCIw==", - "license": "BlueOak-1.0.0" - }, - "node_modules/package-json/node_modules/semver": { - "version": "7.7.2", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.2.tgz", - "integrity": "sha512-RF0Fw+rO5AMf9MAyaRXI4AV0Ulj5lMHqVxxdSgiVbixSCXoEmmX/jk0CuJw4+3SqroYO9VoUh+HcuJivvtJemA==", + "node_modules/querystring-es3": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/querystring-es3/-/querystring-es3-0.2.1.tgz", + "integrity": "sha512-773xhDQnZBMFobEiztv8LIl70ch5MSF/jUQVlhwFyBILqq96anmoctVIYz+ZRp0qbCKATTn6ev02M3r7Ga5vqA==", "dev": true, - "license": "ISC", - "bin": { - "semver": "bin/semver.js" - }, "engines": { - "node": ">=10" + "node": ">=0.4.x" } }, - "node_modules/package-manager-detector": { - "version": "0.2.11", - "resolved": "https://registry.npmjs.org/package-manager-detector/-/package-manager-detector-0.2.11.tgz", - "integrity": "sha512-BEnLolu+yuz22S56CU1SUKq3XC3PkwD5wv4ikR4MfGvnRVcmzXR9DwSlW2fEamyTPyXHomBJRzgapeuBvRNzJQ==", + "node_modules/querystringify": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/querystringify/-/querystringify-2.2.0.tgz", + "integrity": "sha512-FIqgj2EUvTa7R50u0rGsyTftzjYmv/a3hO345bZNrqabNqjtgiDMgmo4mkUjd+nzU5oF3dClKqFIPUKybUyqoQ==", "dev": true, + "license": "MIT" + }, + "node_modules/queue": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/queue/-/queue-6.0.2.tgz", + "integrity": "sha512-iHZWu+q3IdFZFX36ro/lKBkSvfkztY5Y7HMiPlOUjhupPcG2JMfst2KKEpu5XndviX/3UhFbRngUPNKtgvtZiA==", "license": "MIT", "dependencies": { - "quansync": "^0.2.7" + "inherits": "~2.0.3" } }, - "node_modules/pako": { - "version": "1.0.11", - "resolved": "https://registry.npmjs.org/pako/-/pako-1.0.11.tgz", - "integrity": "sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw==", + "node_modules/queue-lit": { + "version": "1.5.2", + "resolved": "https://registry.npmjs.org/queue-lit/-/queue-lit-1.5.2.tgz", + "integrity": "sha512-tLc36IOPeMAubu8BkW8YDBV+WyIgKlYU7zUNs0J5Vk9skSZ4JfGlPOqplP0aHdfv7HL0B2Pg6nwiq60Qc6M2Hw==", "dev": true, - "license": "(MIT AND Zlib)" - }, - "node_modules/parent-module": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", - "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", "license": "MIT", - "dependencies": { - "callsites": "^3.0.0" - }, "engines": { - "node": ">=6" + "node": ">=12" } }, - "node_modules/parse-asn1": { - "version": "5.1.9", - "resolved": "https://registry.npmjs.org/parse-asn1/-/parse-asn1-5.1.9.tgz", - "integrity": "sha512-fIYNuZ/HastSb80baGOuPRo1O9cf4baWw5WsAp7dBuUzeTD/BoaG8sVTdlPFksBE2lF21dN+A1AnrpIjSWqHHg==", - "dev": true, - "license": "ISC", - "dependencies": { - "asn1.js": "^4.10.1", - "browserify-aes": "^1.2.0", - "evp_bytestokey": "^1.0.3", - "pbkdf2": "^3.1.5", - "safe-buffer": "^5.2.1" - }, - "engines": { - "node": ">= 0.10" - } + "node_modules/queue-microtask": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", + "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT" }, - "node_modules/parse-cache-control": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/parse-cache-control/-/parse-cache-control-1.0.1.tgz", - "integrity": "sha512-60zvsJReQPX5/QP0Kzfd/VrpjScIQ7SHBW6bFCYfEP+fp0Eppr1SHhIO5nd1PjZtvclzSzES9D/p5nFJurwfWg==", - "dev": true + "node_modules/quick-format-unescaped": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/quick-format-unescaped/-/quick-format-unescaped-4.0.4.tgz", + "integrity": "sha512-tYC1Q1hgyRuHgloV/YXs2w15unPVh8qfu/qCTfhTYamaw7fyhumKa2yGpdSo87vY32rIclj+4fWYQXUMs9EHvg==", + "license": "MIT" }, - "node_modules/parse-entities": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/parse-entities/-/parse-entities-2.0.0.tgz", - "integrity": "sha512-kkywGpCcRYhqQIchaWqZ875wzpS/bMKhz5HnN3p7wveJTkTtyAB/AlnS0f8DFSqYW1T82t6yEAkEcB+A1I3MbQ==", + "node_modules/quick-lru": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/quick-lru/-/quick-lru-5.1.1.tgz", + "integrity": "sha512-WuyALRjWPDGtt/wzJiadO5AXY+8hZ80hVpe6MyivgraREW751X3SbhRvG3eLKOYN+8VEvqLcf3wdnt44Z4S4SA==", "license": "MIT", - "dependencies": { - "character-entities": "^1.0.0", - "character-entities-legacy": "^1.0.0", - "character-reference-invalid": "^1.0.0", - "is-alphanumerical": "^1.0.0", - "is-decimal": "^1.0.0", - "is-hexadecimal": "^1.0.0" + "engines": { + "node": ">=10" }, "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/parse-json": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz", - "integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==", + "node_modules/radix3": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/radix3/-/radix3-1.1.2.tgz", + "integrity": "sha512-b484I/7b8rDEdSDKckSSBA8knMpcdsXudlE/LNL639wFoHKwLbEkQFZHWEYwDC0wa0FKUcCY+GAF73Z7wxNVFA==", + "license": "MIT" + }, + "node_modules/randombytes": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", + "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", "license": "MIT", "dependencies": { - "@babel/code-frame": "^7.0.0", - "error-ex": "^1.3.1", - "json-parse-even-better-errors": "^2.3.0", - "lines-and-columns": "^1.1.6" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "safe-buffer": "^5.1.0" } }, - "node_modules/parse5": { - "version": "7.3.0", - "resolved": "https://registry.npmjs.org/parse5/-/parse5-7.3.0.tgz", - "integrity": "sha512-IInvU7fabl34qmi9gY8XOVxhYyMyuH2xUNpb2q8/Y+7552KlejkRvqvD19nMoUW/uQGGbqNpA6Tufu5FL5BZgw==", + "node_modules/randomfill": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/randomfill/-/randomfill-1.0.4.tgz", + "integrity": "sha512-87lcbR8+MhcWcUiQ+9e+Rwx8MyR2P7qnt15ynUlbm3TU/fjbgz4GsvfSUDTemtCCtVCqb4ZcEFlyPNTh9bBTLw==", "dev": true, "license": "MIT", "dependencies": { - "entities": "^6.0.0" - }, - "funding": { - "url": "https://github.com/inikulin/parse5?sponsor=1" + "randombytes": "^2.0.5", + "safe-buffer": "^5.1.0" } }, - "node_modules/parseurl": { - "version": "1.3.3", - "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", - "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==", + "node_modules/range-parser": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", + "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==", "license": "MIT", "engines": { - "node": ">= 0.8" + "node": ">= 0.6" } }, - "node_modules/path-browserify": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/path-browserify/-/path-browserify-1.0.1.tgz", - "integrity": "sha512-b7uo2UCUOYZcnF/3ID0lulOJi/bafxa1xPe7ZPsammBSpjSWQkjNxlt635YGS2MiR9GjvuXCtz2emr3jbsz98g==", - "dev": true, - "license": "MIT" - }, - "node_modules/path-exists": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", - "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", + "node_modules/raw-body": { + "version": "2.5.2", + "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.2.tgz", + "integrity": "sha512-8zGqypfENjCIqGhgXToC8aB2r7YrBX+AQAfIPs/Mlk+BtPTztOvTS01NRW/3Eh60J+a48lt8qsCzirQ6loCVfA==", "license": "MIT", + "dependencies": { + "bytes": "3.1.2", + "http-errors": "2.0.0", + "iconv-lite": "0.4.24", + "unpipe": "1.0.0" + }, "engines": { - "node": ">=8" + "node": ">= 0.8" } }, - "node_modules/path-is-absolute": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", - "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", + "node_modules/raw-body/node_modules/iconv-lite": { + "version": "0.4.24", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", + "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", "license": "MIT", + "dependencies": { + "safer-buffer": ">= 2.1.2 < 3" + }, "engines": { "node": ">=0.10.0" } }, - "node_modules/path-key": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", - "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/path-parse": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", - "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", - "license": "MIT" - }, - "node_modules/path-scurry": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-2.0.0.tgz", - "integrity": "sha512-ypGJsmGtdXUOeM5u93TyeIEfEhM6s+ljAhrk5vAvSx8uyY/02OvrZnA0YNGUrPXfpJMgI1ODd3nwz8Npx4O4cg==", - "dev": true, - "license": "BlueOak-1.0.0", + "node_modules/rc": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/rc/-/rc-1.2.8.tgz", + "integrity": "sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==", + "license": "(BSD-2-Clause OR MIT OR Apache-2.0)", "dependencies": { - "lru-cache": "^11.0.0", - "minipass": "^7.1.2" - }, - "engines": { - "node": "20 || >=22" + "deep-extend": "^0.6.0", + "ini": "~1.3.0", + "minimist": "^1.2.0", + "strip-json-comments": "~2.0.1" }, - "funding": { - "url": "https://github.com/sponsors/isaacs" + "bin": { + "rc": "cli.js" } }, - "node_modules/path-scurry/node_modules/lru-cache": { - "version": "11.2.2", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-11.2.2.tgz", - "integrity": "sha512-F9ODfyqML2coTIsQpSkRHnLSZMtkU8Q+mSfcaIyKwy58u+8k5nvAYeiNhsyMARvzNcXJ9QfWVrcPsC9e9rAxtg==", - "dev": true, - "license": "ISC", - "engines": { - "node": "20 || >=22" - } + "node_modules/rc/node_modules/ini": { + "version": "1.3.8", + "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz", + "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==", + "license": "ISC" }, - "node_modules/path-starts-with": { + "node_modules/rc/node_modules/strip-json-comments": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/path-starts-with/-/path-starts-with-2.0.1.tgz", - "integrity": "sha512-wZ3AeiRBRlNwkdUxvBANh0+esnt38DLffHDujZyRHkqkaKHTglnY2EP5UX3b8rdeiSutgO4y9NEJwXezNP5vHg==", - "dev": true, + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", + "integrity": "sha512-4gB8na07fecVVkOI6Rs4e7T6NOTki5EmL7TUduTs6bu3EdnSycntVJ4re8kgZA+wx9IueI2Y11bfbgwtzuE0KQ==", "license": "MIT", "engines": { - "node": ">=8" + "node": ">=0.10.0" } }, - "node_modules/path-to-regexp": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-3.2.0.tgz", - "integrity": "sha512-jczvQbCUS7XmS7o+y1aEO9OBVFeZBQ1MDSEqmO7xSoPgOPoowY/SxLpZ6Vh97/8qHZOteiCKb7gkG9gA2ZUxJA==", - "license": "MIT" + "node_modules/rdf-canonize": { + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/rdf-canonize/-/rdf-canonize-3.4.0.tgz", + "integrity": "sha512-fUeWjrkOO0t1rg7B2fdyDTvngj+9RlUyL92vOdiB7c0FPguWVsniIMjEtHH+meLBO9rzkUlUzBVXgWrjI8P9LA==", + "license": "BSD-3-Clause", + "dependencies": { + "setimmediate": "^1.0.5" + }, + "engines": { + "node": ">=12" + } }, - "node_modules/path-type": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", - "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", + "node_modules/react": { + "version": "18.3.1", + "resolved": "https://registry.npmjs.org/react/-/react-18.3.1.tgz", + "integrity": "sha512-wS+hAgJShR0KhEvPJArfuPVN1+Hz1t0Y6n5jLrGQbkb4urgPE/0Rve+1kMB1v/oWgHgm4WIcV+i7F2pTVj+2iQ==", "license": "MIT", + "peer": true, + "dependencies": { + "loose-envify": "^1.1.0" + }, "engines": { - "node": ">=8" + "node": ">=0.10.0" } }, - "node_modules/pathe": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/pathe/-/pathe-1.1.2.tgz", - "integrity": "sha512-whLdWMYL2TwI08hn8/ZqAbrVemu0LNaNNJZX73O6qaIdCTfXutsLhMkjdENX0qhsQ9uIimo4/aQOmXkoon2nDQ==", - "dev": true, - "license": "MIT" + "node_modules/react-clientside-effect": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/react-clientside-effect/-/react-clientside-effect-1.2.8.tgz", + "integrity": "sha512-ma2FePH0z3px2+WOu6h+YycZcEvFmmxIlAb62cF52bG86eMySciO/EQZeQMXd07kPCYB0a1dWDT5J+KE9mCDUw==", + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.12.13" + }, + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc" + } }, - "node_modules/pathval": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/pathval/-/pathval-1.1.1.tgz", - "integrity": "sha512-Dp6zGqpTdETdR63lehJYPeIOqpiNBNtc7BpWSLrOje7UaIsE5aY92r/AunQA7rsXvet3lrJ3JnZX29UPTKXyKQ==", + "node_modules/react-day-picker": { + "version": "8.10.1", + "resolved": "https://registry.npmjs.org/react-day-picker/-/react-day-picker-8.10.1.tgz", + "integrity": "sha512-TMx7fNbhLk15eqcMt+7Z7S2KF7mfTId/XJDjKE8f+IUcFn0l08/kI4FiYTL/0yuOLmEcbR4Fwe3GJf/NiiMnPA==", "license": "MIT", - "engines": { - "node": "*" + "funding": { + "type": "individual", + "url": "https://github.com/sponsors/gpbl" + }, + "peerDependencies": { + "date-fns": "^2.28.0 || ^3.0.0", + "react": "^16.8.0 || ^17.0.0 || ^18.0.0" } }, - "node_modules/pbkdf2": { - "version": "3.1.5", - "resolved": "https://registry.npmjs.org/pbkdf2/-/pbkdf2-3.1.5.tgz", - "integrity": "sha512-Q3CG/cYvCO1ye4QKkuH7EXxs3VC/rI1/trd+qX2+PolbaKG0H+bgcZzrTt96mMyRtejk+JMCiLUn3y29W8qmFQ==", + "node_modules/react-device-detect": { + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/react-device-detect/-/react-device-detect-2.2.3.tgz", + "integrity": "sha512-buYY3qrCnQVlIFHrC5UcUoAj7iANs/+srdkwsnNjI7anr3Tt7UY6MqNxtMLlr0tMBied0O49UZVK8XKs3ZIiPw==", "license": "MIT", "dependencies": { - "create-hash": "^1.2.0", - "create-hmac": "^1.1.7", - "ripemd160": "^2.0.3", - "safe-buffer": "^5.2.1", - "sha.js": "^2.4.12", - "to-buffer": "^1.2.1" + "ua-parser-js": "^1.0.33" }, - "engines": { - "node": ">= 0.10" + "peerDependencies": { + "react": ">= 0.14.0", + "react-dom": ">= 0.14.0" } }, - "node_modules/pg": { - "version": "8.16.0", - "resolved": "https://registry.npmjs.org/pg/-/pg-8.16.0.tgz", - "integrity": "sha512-7SKfdvP8CTNXjMUzfcVTaI+TDzBEeaUnVwiVGZQD1Hh33Kpev7liQba9uLd4CfN8r9mCVsD0JIpq03+Unpz+kg==", + "node_modules/react-devtools-core": { + "version": "6.1.5", + "resolved": "https://registry.npmjs.org/react-devtools-core/-/react-devtools-core-6.1.5.tgz", + "integrity": "sha512-ePrwPfxAnB+7hgnEr8vpKxL9cmnp7F322t8oqcPshbIQQhDKgFDW4tjhF2wjVbdXF9O/nyuy3sQWd9JGpiLPvA==", "license": "MIT", "dependencies": { - "pg-connection-string": "^2.9.0", - "pg-pool": "^3.10.0", - "pg-protocol": "^1.10.0", - "pg-types": "2.2.0", - "pgpass": "1.0.5" - }, + "shell-quote": "^1.6.1", + "ws": "^7" + } + }, + "node_modules/react-devtools-core/node_modules/ws": { + "version": "7.5.10", + "resolved": "https://registry.npmjs.org/ws/-/ws-7.5.10.tgz", + "integrity": "sha512-+dbF1tHwZpXcbOJdVOkzLDxZP1ailvSxM6ZweXTegylPny803bFhA+vqBYw4s31NSAk4S2Qz+AKXK9a4wkdjcQ==", + "license": "MIT", "engines": { - "node": ">= 8.0.0" - }, - "optionalDependencies": { - "pg-cloudflare": "^1.2.5" + "node": ">=8.3.0" }, "peerDependencies": { - "pg-native": ">=3.0.1" + "bufferutil": "^4.0.1", + "utf-8-validate": "^5.0.2" }, "peerDependenciesMeta": { - "pg-native": { + "bufferutil": { + "optional": true + }, + "utf-8-validate": { "optional": true } } }, - "node_modules/pg-cloudflare": { - "version": "1.2.7", - "resolved": "https://registry.npmjs.org/pg-cloudflare/-/pg-cloudflare-1.2.7.tgz", - "integrity": "sha512-YgCtzMH0ptvZJslLM1ffsY4EuGaU0cx4XSdXLRFae8bPP4dS5xL1tNB3k2o/N64cHJpwU7dxKli/nZ2lUa5fLg==", - "license": "MIT", - "optional": true - }, - "node_modules/pg-connection-string": { - "version": "2.9.1", - "resolved": "https://registry.npmjs.org/pg-connection-string/-/pg-connection-string-2.9.1.tgz", - "integrity": "sha512-nkc6NpDcvPVpZXxrreI/FOtX3XemeLl8E0qFr6F2Lrm/I8WOnaWNhIPK2Z7OHpw7gh5XJThi6j6ppgNoaT1w4w==", - "license": "MIT" - }, - "node_modules/pg-int8": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/pg-int8/-/pg-int8-1.0.1.tgz", - "integrity": "sha512-WCtabS6t3c8SkpDBUlb1kjOs7l66xsGdKpIPZsg4wR+B3+u9UAum2odSsF9tnvxg80h4ZxLWMy4pRjOsFIqQpw==", - "license": "ISC", - "engines": { - "node": ">=4.0.0" - } - }, - "node_modules/pg-pool": { - "version": "3.10.1", - "resolved": "https://registry.npmjs.org/pg-pool/-/pg-pool-3.10.1.tgz", - "integrity": "sha512-Tu8jMlcX+9d8+QVzKIvM/uJtp07PKr82IUOYEphaWcoBhIYkoHpLXN3qO59nAI11ripznDsEzEv8nUxBVWajGg==", + "node_modules/react-dom": { + "version": "18.3.1", + "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-18.3.1.tgz", + "integrity": "sha512-5m4nQKp+rZRb09LNH59GM4BxTh9251/ylbKIbpe7TpGxfJ+9kv6BLkLBXIjjspbgbnIBNqlI23tRnTWT0snUIw==", "license": "MIT", + "peer": true, + "dependencies": { + "loose-envify": "^1.1.0", + "scheduler": "^0.23.2" + }, "peerDependencies": { - "pg": ">=8.0" + "react": "^18.3.1" } }, - "node_modules/pg-protocol": { - "version": "1.10.3", - "resolved": "https://registry.npmjs.org/pg-protocol/-/pg-protocol-1.10.3.tgz", - "integrity": "sha512-6DIBgBQaTKDJyxnXaLiLR8wBpQQcGWuAESkRBX/t6OwA8YsqP+iVSiond2EDy6Y/dsGk8rh/jtax3js5NeV7JQ==", + "node_modules/react-fast-compare": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/react-fast-compare/-/react-fast-compare-3.2.1.tgz", + "integrity": "sha512-xTYf9zFim2pEif/Fw16dBiXpe0hoy5PxcD8+OwBnTtNLfIm3g6WxhKNurY+6OmdH1u6Ta/W/Vl6vjbYP1MFnDg==", "license": "MIT" }, - "node_modules/pg-types": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/pg-types/-/pg-types-2.2.0.tgz", - "integrity": "sha512-qTAAlrEsl8s4OiEQY69wDvcMIdQN6wdz5ojQiOy6YRMuynxenON0O5oCpJI6lshc6scgAY8qvJ2On/p+CXY0GA==", + "node_modules/react-focus-lock": { + "version": "2.13.6", + "resolved": "https://registry.npmjs.org/react-focus-lock/-/react-focus-lock-2.13.6.tgz", + "integrity": "sha512-ehylFFWyYtBKXjAO9+3v8d0i+cnc1trGS0vlTGhzFW1vbFXVUTmR8s2tt/ZQG8x5hElg6rhENlLG1H3EZK0Llg==", "license": "MIT", "dependencies": { - "pg-int8": "1.0.1", - "postgres-array": "~2.0.0", - "postgres-bytea": "~1.0.0", - "postgres-date": "~1.0.4", - "postgres-interval": "^1.1.0" + "@babel/runtime": "^7.0.0", + "focus-lock": "^1.3.6", + "prop-types": "^15.6.2", + "react-clientside-effect": "^1.2.7", + "use-callback-ref": "^1.3.3", + "use-sidecar": "^1.1.3" }, - "engines": { - "node": ">=4" + "peerDependencies": { + "@types/react": "*", + "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } } }, - "node_modules/pgpass": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/pgpass/-/pgpass-1.0.5.tgz", - "integrity": "sha512-FdW9r/jQZhSeohs1Z3sI1yxFQNFvMcnmfuj4WBMUTxOrAyLMaTcE1aAMBiTlbMNaXvBCQuVi0R7hd8udDSP7ug==", - "license": "MIT", + "node_modules/react-helmet-async": { + "name": "@slorber/react-helmet-async", + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/@slorber/react-helmet-async/-/react-helmet-async-1.3.0.tgz", + "integrity": "sha512-e9/OK8VhwUSc67diWI8Rb3I0YgI9/SBQtnhe9aEuK6MhZm7ntZZimXgwXnd8W96YTmSOb9M4d8LwhRZyhWr/1A==", + "license": "Apache-2.0", "dependencies": { - "split2": "^4.1.0" + "@babel/runtime": "^7.12.5", + "invariant": "^2.2.4", + "prop-types": "^15.7.2", + "react-fast-compare": "^3.2.0", + "shallowequal": "^1.1.0" + }, + "peerDependencies": { + "react": "^16.6.0 || ^17.0.0 || ^18.0.0 || ^19.0.0", + "react-dom": "^16.6.0 || ^17.0.0 || ^18.0.0 || ^19.0.0" } }, - "node_modules/picocolors": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz", - "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==", - "license": "ISC" - }, - "node_modules/picomatch": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-3.0.1.tgz", - "integrity": "sha512-I3EurrIQMlRc9IaAZnqRR044Phh2DXY+55o7uJ0V+hYZAcQYSuFWsc9q5PvyDHUSCe1Qxn/iBz+78s86zWnGag==", + "node_modules/react-hook-form": { + "version": "7.41.5", + "resolved": "https://registry.npmjs.org/react-hook-form/-/react-hook-form-7.41.5.tgz", + "integrity": "sha512-DAKjSJ7X9f16oQrP3TW2/eD9N6HOgrmIahP4LOdFphEWVfGZ2LulFd6f6AQ/YS/0cx/5oc4j8a1PXxuaurWp/Q==", "license": "MIT", "engines": { - "node": ">=10" + "node": ">=12.22.0" }, "funding": { - "url": "https://github.com/sponsors/jonschlinkert" + "type": "opencollective", + "url": "https://opencollective.com/react-hook-form" + }, + "peerDependencies": { + "react": "^16.8.0 || ^17 || ^18" } }, - "node_modules/pidtree": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/pidtree/-/pidtree-0.6.0.tgz", - "integrity": "sha512-eG2dWTVw5bzqGRztnHExczNxt5VGsE6OwTeCG3fdUf9KBsZzO3R5OIIIzWR+iZA0NtZ+RDVdaoE2dK1cn6jH4g==", - "dev": true, + "node_modules/react-i18next": { + "version": "13.2.0", + "resolved": "https://registry.npmjs.org/react-i18next/-/react-i18next-13.2.0.tgz", + "integrity": "sha512-YD8xMc+I0jkHHLotd8ERMzZ53hMaCBVLCndbcbBveJn3FbppRP4jyYOAkmR8XItN01sTD9ilAjoEjpH1i42IgA==", "license": "MIT", - "bin": { - "pidtree": "bin/pidtree.js" + "dependencies": { + "@babel/runtime": "^7.22.5", + "html-parse-stringify": "^3.0.1" }, - "engines": { - "node": ">=0.10" + "peerDependencies": { + "i18next": ">= 23.2.3", + "react": ">= 16.8.0" + }, + "peerDependenciesMeta": { + "react-dom": { + "optional": true + }, + "react-native": { + "optional": true + } } }, - "node_modules/pify": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", - "integrity": "sha512-C3FsVNH1udSEX48gGX1xfvwTWfsYWj5U+8/uK15BGzIGrKoUpghX8hWZwa/OFnakBiiVNmBvemTJR5mcy7iPcg==", - "dev": true, + "node_modules/react-is": { + "version": "17.0.2", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-17.0.2.tgz", + "integrity": "sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w==", + "license": "MIT" + }, + "node_modules/react-json-view-lite": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/react-json-view-lite/-/react-json-view-lite-2.5.0.tgz", + "integrity": "sha512-tk7o7QG9oYyELWHL8xiMQ8x4WzjCzbWNyig3uexmkLb54r8jO0yH3WCWx8UZS0c49eSA4QUmG5caiRJ8fAn58g==", "license": "MIT", "engines": { - "node": ">=4" + "node": ">=18" + }, + "peerDependencies": { + "react": "^18.0.0 || ^19.0.0" } }, - "node_modules/pino": { - "version": "9.13.0", - "resolved": "https://registry.npmjs.org/pino/-/pino-9.13.0.tgz", - "integrity": "sha512-SpTXQhkQXekIKEe7c887S3lk3v90Q+/HVRZVyNAhe98PQc++6I5ec/R0pciH8/CciXjCoVZIZfRNicbC6KZgnw==", + "node_modules/react-loadable": { + "name": "@docusaurus/react-loadable", + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/@docusaurus/react-loadable/-/react-loadable-6.0.0.tgz", + "integrity": "sha512-YMMxTUQV/QFSnbgrP3tjDzLHRg7vsbMn8e9HAa8o/1iXoiomo48b7sk/kkmWEuWNDPJVlKSJRB6Y2fHqdJk+SQ==", "license": "MIT", "dependencies": { - "atomic-sleep": "^1.0.0", - "on-exit-leak-free": "^2.1.0", - "pino-abstract-transport": "^2.0.0", - "pino-std-serializers": "^7.0.0", - "process-warning": "^5.0.0", - "quick-format-unescaped": "^4.0.3", - "real-require": "^0.2.0", - "safe-stable-stringify": "^2.3.1", - "slow-redact": "^0.3.0", - "sonic-boom": "^4.0.1", - "thread-stream": "^3.0.0" + "@types/react": "*" }, - "bin": { - "pino": "bin.js" + "peerDependencies": { + "react": "*" } }, - "node_modules/pino-abstract-transport": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/pino-abstract-transport/-/pino-abstract-transport-2.0.0.tgz", - "integrity": "sha512-F63x5tizV6WCh4R6RHyi2Ml+M70DNRXt/+HANowMflpgGFMAym/VKm6G7ZOQRjqN7XbGxK1Lg9t6ZrtzOaivMw==", + "node_modules/react-loadable-ssr-addon-v5-slorber": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/react-loadable-ssr-addon-v5-slorber/-/react-loadable-ssr-addon-v5-slorber-1.0.1.tgz", + "integrity": "sha512-lq3Lyw1lGku8zUEJPDxsNm1AfYHBrO9Y1+olAYwpUJ2IGFBskM0DMKok97A6LWUpHm+o7IvQBOWu9MLenp9Z+A==", "license": "MIT", "dependencies": { - "split2": "^4.0.0" + "@babel/runtime": "^7.10.3" + }, + "engines": { + "node": ">=10.13.0" + }, + "peerDependencies": { + "react-loadable": "*", + "webpack": ">=4.41.1 || 5.x" } }, - "node_modules/pino-pretty": { - "version": "13.1.1", - "resolved": "https://registry.npmjs.org/pino-pretty/-/pino-pretty-13.1.1.tgz", - "integrity": "sha512-TNNEOg0eA0u+/WuqH0MH0Xui7uqVk9D74ESOpjtebSQYbNWJk/dIxCXIxFsNfeN53JmtWqYHP2OrIZjT/CBEnA==", + "node_modules/react-markdown": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/react-markdown/-/react-markdown-6.0.3.tgz", + "integrity": "sha512-kQbpWiMoBHnj9myLlmZG9T1JdoT/OEyHK7hqM6CqFT14MAkgWiWBUYijLyBmxbntaN6dCDicPcUhWhci1QYodg==", "license": "MIT", "dependencies": { - "colorette": "^2.0.7", - "dateformat": "^4.6.3", - "fast-copy": "^3.0.2", - "fast-safe-stringify": "^2.1.1", - "help-me": "^5.0.0", - "joycon": "^3.1.1", - "minimist": "^1.2.6", - "on-exit-leak-free": "^2.1.0", - "pino-abstract-transport": "^2.0.0", - "pump": "^3.0.0", - "secure-json-parse": "^4.0.0", - "sonic-boom": "^4.0.1", - "strip-json-comments": "^5.0.2" + "@types/hast": "^2.0.0", + "@types/unist": "^2.0.3", + "comma-separated-tokens": "^1.0.0", + "prop-types": "^15.7.2", + "property-information": "^5.3.0", + "react-is": "^17.0.0", + "remark-parse": "^9.0.0", + "remark-rehype": "^8.0.0", + "space-separated-tokens": "^1.1.0", + "style-to-object": "^0.3.0", + "unified": "^9.0.0", + "unist-util-visit": "^2.0.0", + "vfile": "^4.0.0" }, - "bin": { - "pino-pretty": "bin.js" + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + }, + "peerDependencies": { + "@types/react": ">=16", + "react": ">=16" } }, - "node_modules/pino-pretty/node_modules/strip-json-comments": { - "version": "5.0.3", - "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-5.0.3.tgz", - "integrity": "sha512-1tB5mhVo7U+ETBKNf92xT4hrQa3pm0MZ0PQvuDnWgAAGHDsfp4lPSpiS6psrSiet87wyGPh9ft6wmhOMQ0hDiw==", + "node_modules/react-markdown/node_modules/@types/hast": { + "version": "2.3.10", + "resolved": "https://registry.npmjs.org/@types/hast/-/hast-2.3.10.tgz", + "integrity": "sha512-McWspRw8xx8J9HurkVBfYj0xKoE25tOFlHGdx4MJ5xORQrMGZNqJhVQWaIbm6Oyla5kYOXtDiopzKRJzEOkwJw==", "license": "MIT", - "engines": { - "node": ">=14.16" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "dependencies": { + "@types/unist": "^2" } }, - "node_modules/pino-std-serializers": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/pino-std-serializers/-/pino-std-serializers-7.0.0.tgz", - "integrity": "sha512-e906FRY0+tV27iq4juKzSYPbUj2do2X2JX4EzSca1631EB2QJQUqGbDuERal7LCtOpxl6x3+nvo9NPZcmjkiFA==", + "node_modules/react-markdown/node_modules/@types/unist": { + "version": "2.0.11", + "resolved": "https://registry.npmjs.org/@types/unist/-/unist-2.0.11.tgz", + "integrity": "sha512-CmBKiL6NNo/OqgmMn95Fk9Whlp2mtvIv+KNpQKN2F4SjvrEesubTRWGYSg+BnWZOnlCaSTU1sMpsBOzgbYhnsA==", "license": "MIT" }, - "node_modules/pirates": { - "version": "4.0.7", - "resolved": "https://registry.npmjs.org/pirates/-/pirates-4.0.7.tgz", - "integrity": "sha512-TfySrs/5nm8fQJDcBDuUng3VOUKsd7S+zqvbOTiGXHfxX4wK31ard+hoNuvkicM/2YFzlpDgABOevKSsB4G/FA==", + "node_modules/react-number-format": { + "version": "5.1.4", + "resolved": "https://registry.npmjs.org/react-number-format/-/react-number-format-5.1.4.tgz", + "integrity": "sha512-QV7QHzHrk9ZS9V0bWkIwu6ywiXJt0www4/cXWEVEgwaNqthmOZl/Cf5O0ukEPlGZJJr06Jh3+CM4rZsvXn8cOg==", "license": "MIT", - "engines": { - "node": ">= 6" + "dependencies": { + "prop-types": "^15.7.2" + }, + "peerDependencies": { + "react": "^0.14 || ^15.0.0 || ^16.0.0 || ^17.0.0 || ^18.0.0", + "react-dom": "^0.14 || ^15.0.0 || ^16.0.0 || ^17.0.0 || ^18.0.0" } }, - "node_modules/pkg-dir": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz", - "integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==", + "node_modules/react-refresh": { + "version": "0.17.0", + "resolved": "https://registry.npmjs.org/react-refresh/-/react-refresh-0.17.0.tgz", + "integrity": "sha512-z6F7K9bV85EfseRCp2bzrpyQ0Gkw1uLoCel9XBVWPg/TjRj94SkJzUTGfOa4bs7iJvBWtQG0Wq7wnI0syw3EBQ==", "dev": true, "license": "MIT", - "dependencies": { - "find-up": "^4.0.0" - }, "engines": { - "node": ">=8" + "node": ">=0.10.0" } }, - "node_modules/pkg-dir/node_modules/find-up": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", - "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", - "dev": true, + "node_modules/react-remove-scroll": { + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/react-remove-scroll/-/react-remove-scroll-2.7.1.tgz", + "integrity": "sha512-HpMh8+oahmIdOuS5aFKKY6Pyog+FNaZV/XyJOq7b4YFwsFHe5yYfdbIalI4k3vU2nSDql7YskmUseHsRrJqIPA==", "license": "MIT", "dependencies": { - "locate-path": "^5.0.0", - "path-exists": "^4.0.0" + "react-remove-scroll-bar": "^2.3.7", + "react-style-singleton": "^2.2.3", + "tslib": "^2.1.0", + "use-callback-ref": "^1.3.3", + "use-sidecar": "^1.1.3" }, "engines": { - "node": ">=8" + "node": ">=10" + }, + "peerDependencies": { + "@types/react": "*", + "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } } }, - "node_modules/pkg-dir/node_modules/locate-path": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", - "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", - "dev": true, + "node_modules/react-remove-scroll-bar": { + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/react-remove-scroll-bar/-/react-remove-scroll-bar-2.3.8.tgz", + "integrity": "sha512-9r+yi9+mgU33AKcj6IbT9oRCO78WriSj6t/cF8DWBZJ9aOGPOTEDvdUDz1FwKim7QXWwmHqtdHnRJfhAxEG46Q==", "license": "MIT", "dependencies": { - "p-locate": "^4.1.0" + "react-style-singleton": "^2.2.2", + "tslib": "^2.0.0" }, "engines": { - "node": ">=8" + "node": ">=10" + }, + "peerDependencies": { + "@types/react": "*", + "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } } }, - "node_modules/pkg-dir/node_modules/p-locate": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", - "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", - "dev": true, + "node_modules/react-router": { + "version": "6.10.0", + "resolved": "https://registry.npmjs.org/react-router/-/react-router-6.10.0.tgz", + "integrity": "sha512-Nrg0BWpQqrC3ZFFkyewrflCud9dio9ME3ojHCF/WLsprJVzkq3q3UeEhMCAW1dobjeGbWgjNn/PVF6m46ANxXQ==", "license": "MIT", "dependencies": { - "p-limit": "^2.2.0" + "@remix-run/router": "1.5.0" }, "engines": { - "node": ">=8" + "node": ">=14" + }, + "peerDependencies": { + "react": ">=16.8" } }, - "node_modules/pkg-types": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/pkg-types/-/pkg-types-1.3.1.tgz", - "integrity": "sha512-/Jm5M4RvtBFVkKWRu2BLUTNP8/M2a+UwuAX+ae4770q1qVGtfjG+WTCupoZixokjmHiry8uI+dlY8KXYV5HVVQ==", - "dev": true, + "node_modules/react-router-config": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/react-router-config/-/react-router-config-5.1.1.tgz", + "integrity": "sha512-DuanZjaD8mQp1ppHjgnnUnyOlqYXZVjnov/JzFhjLEwd3Z4dYjMSnqrEzzGThH47vpCOqPPwJM2FtthLeJ8Pbg==", "license": "MIT", "dependencies": { - "confbox": "^0.1.8", - "mlly": "^1.7.4", - "pathe": "^2.0.1" + "@babel/runtime": "^7.1.2" + }, + "peerDependencies": { + "react": ">=15", + "react-router": ">=5" } }, - "node_modules/pkg-types/node_modules/pathe": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/pathe/-/pathe-2.0.3.tgz", - "integrity": "sha512-WUjGcAqP1gQacoQe+OBJsFA7Ld4DyXuUIjZ5cc75cLHvJ7dtNsTugphxIADwspS+AraAUePCKrSVtPLFj/F88w==", - "dev": true, - "license": "MIT" - }, - "node_modules/platform": { - "version": "1.3.6", - "resolved": "https://registry.npmjs.org/platform/-/platform-1.3.6.tgz", - "integrity": "sha512-fnWVljUchTro6RiCFvCXBbNhJc2NijN7oIQxbwsyL0buWJPG85v81ehlHI9fXrJsMNgTofEoWIQeClKpgxFLrg==", - "license": "MIT" - }, - "node_modules/plimit-lit": { - "version": "1.6.1", - "resolved": "https://registry.npmjs.org/plimit-lit/-/plimit-lit-1.6.1.tgz", - "integrity": "sha512-B7+VDyb8Tl6oMJT9oSO2CW8XC/T4UcJGrwOVoNGwOQsQYhlpfajmrMj5xeejqaASq3V/EqThyOeATEOMuSEXiA==", - "dev": true, + "node_modules/react-router-dom": { + "version": "6.10.0", + "resolved": "https://registry.npmjs.org/react-router-dom/-/react-router-dom-6.10.0.tgz", + "integrity": "sha512-E5dfxRPuXKJqzwSe/qGcqdwa18QiWC6f3H3cWXM24qj4N0/beCIf/CWTipop2xm7mR0RCS99NnaqPNjHtrAzCg==", "license": "MIT", + "peer": true, "dependencies": { - "queue-lit": "^1.5.1" + "@remix-run/router": "1.5.0", + "react-router": "6.10.0" }, "engines": { - "node": ">=12" + "node": ">=14" + }, + "peerDependencies": { + "react": ">=16.8", + "react-dom": ">=16.8" } }, - "node_modules/pluralize": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/pluralize/-/pluralize-8.0.0.tgz", - "integrity": "sha512-Nc3IT5yHzflTfbjgqWcCPpo7DaKy4FnpB0l/zCAW0Tc7jxAiuqSxHasntB3D7887LSrA93kDJ9IXovxJYxyLCA==", + "node_modules/react-select": { + "version": "5.7.0", + "resolved": "https://registry.npmjs.org/react-select/-/react-select-5.7.0.tgz", + "integrity": "sha512-lJGiMxCa3cqnUr2Jjtg9YHsaytiZqeNOKeibv6WF5zbK/fPegZ1hg3y/9P1RZVLhqBTs0PfqQLKuAACednYGhQ==", "license": "MIT", - "engines": { - "node": ">=4" + "dependencies": { + "@babel/runtime": "^7.12.0", + "@emotion/cache": "^11.4.0", + "@emotion/react": "^11.8.1", + "@floating-ui/dom": "^1.0.1", + "@types/react-transition-group": "^4.4.0", + "memoize-one": "^6.0.0", + "prop-types": "^15.6.0", + "react-transition-group": "^4.3.0", + "use-isomorphic-layout-effect": "^1.1.2" + }, + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0 || ^18.0.0", + "react-dom": "^16.8.0 || ^17.0.0 || ^18.0.0" } }, - "node_modules/pngjs": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/pngjs/-/pngjs-5.0.0.tgz", - "integrity": "sha512-40QW5YalBNfQo5yRYmiw7Yz6TKKVr3h6970B2YE+3fQpsWcrbj1PzJgxeJ19DRQjhMbKPIuMY8rFaXc8moolVw==", + "node_modules/react-select-event": { + "version": "5.5.1", + "resolved": "https://registry.npmjs.org/react-select-event/-/react-select-event-5.5.1.tgz", + "integrity": "sha512-goAx28y0+iYrbqZA2FeRTreHHs/ZtSuKxtA+J5jpKT5RHPCbVZJ4MqACfPnWyFXsEec+3dP5bCrNTxIX8oYe9A==", + "dev": true, "license": "MIT", - "engines": { - "node": ">=10.13.0" + "dependencies": { + "@testing-library/dom": ">=7" } }, - "node_modules/pony-cause": { - "version": "2.1.11", - "resolved": "https://registry.npmjs.org/pony-cause/-/pony-cause-2.1.11.tgz", - "integrity": "sha512-M7LhCsdNbNgiLYiP4WjsfLUuFmCfnjdF6jKe2R9NKl4WFN+HZPGHJZ9lnLP7f9ZnKe3U9nuWD0szirmj+migUg==", - "license": "0BSD", + "node_modules/react-style-singleton": { + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/react-style-singleton/-/react-style-singleton-2.2.3.tgz", + "integrity": "sha512-b6jSvxvVnyptAiLjbkWLE/lOnR4lfTtDAl+eUC7RZy+QQWc6wRzIV2CE6xBuMmDxc2qIihtDCZD5NPOFl7fRBQ==", + "license": "MIT", + "dependencies": { + "get-nonce": "^1.0.0", + "tslib": "^2.0.0" + }, "engines": { - "node": ">=12.0.0" + "node": ">=10" + }, + "peerDependencies": { + "@types/react": "*", + "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } } }, - "node_modules/possible-typed-array-names": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/possible-typed-array-names/-/possible-typed-array-names-1.1.0.tgz", - "integrity": "sha512-/+5VFTchJDoVj3bhoqi6UeymcD00DAwb1nJwamzPvHEszJ4FpF6SNNbUbOS8yI56qHzdV8eK0qEfOSiodkTdxg==", - "license": "MIT", - "engines": { - "node": ">= 0.4" + "node_modules/react-transition-group": { + "version": "4.4.5", + "resolved": "https://registry.npmjs.org/react-transition-group/-/react-transition-group-4.4.5.tgz", + "integrity": "sha512-pZcd1MCJoiKiBR2NRxeCRg13uCXbydPnmB4EOeRrY7480qNWO8IIgQG6zlDkm6uRMsURXPuKq0GWtiM59a5Q6g==", + "license": "BSD-3-Clause", + "dependencies": { + "@babel/runtime": "^7.5.5", + "dom-helpers": "^5.0.1", + "loose-envify": "^1.4.0", + "prop-types": "^15.6.2" + }, + "peerDependencies": { + "react": ">=16.6.0", + "react-dom": ">=16.6.0" } }, - "node_modules/postcss": { - "version": "8.5.6", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.6.tgz", - "integrity": "sha512-3Ybi1tAuwAP9s0r1UQ2J4n5Y0G05bJkpUIO0/bI9MhwmD70S5aTWbXGBwxHrelT+XM1k6dM0pk+SwNkpTRN7Pg==", + "node_modules/read-pkg": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-3.0.0.tgz", + "integrity": "sha512-BLq/cCO9two+lBgiTYNqD6GdtK8s4NpaWrl6/rCO9w0TUS8oJl7cmToOZfRYllKTISY6nt1U7jQ53brmKqY6BA==", "dev": true, - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/postcss/" - }, - { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/postcss" - }, - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ], "license": "MIT", "dependencies": { - "nanoid": "^3.3.11", - "picocolors": "^1.1.1", - "source-map-js": "^1.2.1" + "load-json-file": "^4.0.0", + "normalize-package-data": "^2.3.2", + "path-type": "^3.0.0" }, "engines": { - "node": "^10 || ^12 || >=14" + "node": ">=4" } }, - "node_modules/postgres-array": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/postgres-array/-/postgres-array-2.0.0.tgz", - "integrity": "sha512-VpZrUqU5A69eQyW2c5CA1jtLecCsN2U/bD6VilrFDWq5+5UIEVO7nazS3TEcHf1zuPYO/sqGvUvW62g86RXZuA==", + "node_modules/read-pkg/node_modules/path-type": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-3.0.0.tgz", + "integrity": "sha512-T2ZUsdZFHgA3u4e5PfPbjd7HDDpxPnQb5jN0SrDsjNSuVXHJqtwTnWqG0B1jZrgmJ/7lj1EmVIByWt1gxGkWvg==", + "dev": true, "license": "MIT", + "dependencies": { + "pify": "^3.0.0" + }, "engines": { "node": ">=4" } }, - "node_modules/postgres-bytea": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/postgres-bytea/-/postgres-bytea-1.0.0.tgz", - "integrity": "sha512-xy3pmLuQqRBZBXDULy7KbaitYqLcmxigw14Q5sj8QBVLqEwXfeybIKVWiqAXTlcvdvb0+xkOtDbfQMOf4lST1w==", + "node_modules/read-yaml-file": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/read-yaml-file/-/read-yaml-file-1.1.0.tgz", + "integrity": "sha512-VIMnQi/Z4HT2Fxuwg5KrY174U1VdUIASQVWXXyqtNRtxSr9IYkn1rsI6Tb6HsrHCmB7gVpNwX6JxPTHcH6IoTA==", + "dev": true, "license": "MIT", + "dependencies": { + "graceful-fs": "^4.1.5", + "js-yaml": "^3.6.1", + "pify": "^4.0.1", + "strip-bom": "^3.0.0" + }, "engines": { - "node": ">=0.10.0" + "node": ">=6" } }, - "node_modules/postgres-date": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/postgres-date/-/postgres-date-1.0.7.tgz", - "integrity": "sha512-suDmjLVQg78nMK2UZ454hAG+OAW+HQPZ6n++TNDUX+L0+uUlLywnoxJKDou51Zm+zTCjrCl0Nq6J9C5hP9vK/Q==", + "node_modules/read-yaml-file/node_modules/argparse": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", + "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", + "dev": true, "license": "MIT", - "engines": { - "node": ">=0.10.0" + "dependencies": { + "sprintf-js": "~1.0.2" } }, - "node_modules/postgres-interval": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/postgres-interval/-/postgres-interval-1.2.0.tgz", - "integrity": "sha512-9ZhXKM/rw350N1ovuWHbGxnGh/SNJ4cnxHiM0rxE4VN41wsg8P8zWn9hv/buK00RP4WvlOyr/RBDiptyxVbkZQ==", + "node_modules/read-yaml-file/node_modules/js-yaml": { + "version": "3.14.1", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", + "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", + "dev": true, "license": "MIT", "dependencies": { - "xtend": "^4.0.0" + "argparse": "^1.0.7", + "esprima": "^4.0.0" }, - "engines": { - "node": ">=0.10.0" + "bin": { + "js-yaml": "bin/js-yaml.js" } }, - "node_modules/preact": { - "version": "10.4.1", - "resolved": "https://registry.npmjs.org/preact/-/preact-10.4.1.tgz", - "integrity": "sha512-WKrRpCSwL2t3tpOOGhf2WfTpcmbpxaWtDbdJdKdjd0aEiTkvOmS4NBkG6kzlaAHI9AkQ3iVqbFWM3Ei7mZ4o1Q==", + "node_modules/read-yaml-file/node_modules/pify": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz", + "integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==", + "dev": true, "license": "MIT", - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/preact" + "engines": { + "node": ">=6" } }, - "node_modules/prelude-ls": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", - "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", + "node_modules/read-yaml-file/node_modules/strip-bom": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", + "integrity": "sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==", "dev": true, "license": "MIT", "engines": { - "node": ">= 0.8.0" + "node": ">=4" } }, - "node_modules/prettier": { - "version": "3.6.2", - "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.6.2.tgz", - "integrity": "sha512-I7AIg5boAr5R0FFtJ6rCfD+LFsWHp81dolrFD8S79U9tb8Az2nGrJncnMSnys+bpQJfRUzqs9hnA81OAA3hCuQ==", - "dev": true, + "node_modules/readable-stream": { + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", + "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", "license": "MIT", - "bin": { - "prettier": "bin/prettier.cjs" - }, - "engines": { - "node": ">=14" - }, - "funding": { - "url": "https://github.com/prettier/prettier?sponsor=1" + "dependencies": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" } }, - "node_modules/prettier-linter-helpers": { + "node_modules/readable-stream/node_modules/isarray": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/prettier-linter-helpers/-/prettier-linter-helpers-1.0.0.tgz", - "integrity": "sha512-GbK2cP9nraSSUF9N2XwUwqfzlAFlMNYYl+ShE/V+H8a9uNl/oUqB1w2EL54Jh0OlyRSd8RfWYJ3coVS4TROP2w==", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", + "license": "MIT" + }, + "node_modules/readable-stream/node_modules/safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "license": "MIT" + }, + "node_modules/readdir-glob": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/readdir-glob/-/readdir-glob-1.1.3.tgz", + "integrity": "sha512-v05I2k7xN8zXvPD9N+z/uhXPaj0sUFCe2rcWZIpBsqxfP7xXFQ0tipAd/wjj1YxWyWtUS5IDJpOG82JKt2EAVA==", "dev": true, - "license": "MIT", + "license": "Apache-2.0", "dependencies": { - "fast-diff": "^1.1.2" - }, - "engines": { - "node": ">=6.0.0" + "minimatch": "^5.1.0" } }, - "node_modules/prettier-plugin-solidity": { - "version": "1.4.3", - "resolved": "https://registry.npmjs.org/prettier-plugin-solidity/-/prettier-plugin-solidity-1.4.3.tgz", - "integrity": "sha512-Mrr/iiR9f9IaeGRMZY2ApumXcn/C5Gs3S7B7hWB3gigBFML06C0yEyW86oLp0eqiA0qg+46FaChgLPJCj/pIlg==", + "node_modules/readdir-glob/node_modules/brace-expansion": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.2.tgz", + "integrity": "sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==", "dev": true, "license": "MIT", "dependencies": { - "@solidity-parser/parser": "^0.20.1", - "semver": "^7.7.1" - }, - "engines": { - "node": ">=18" - }, - "peerDependencies": { - "prettier": ">=2.3.0" + "balanced-match": "^1.0.0" } }, - "node_modules/prettier-plugin-solidity/node_modules/@solidity-parser/parser": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/@solidity-parser/parser/-/parser-0.20.2.tgz", - "integrity": "sha512-rbu0bzwNvMcwAjH86hiEAcOeRI2EeK8zCkHDrFykh/Al8mvJeFmjy3UrE7GYQjNwOgbGUUtCn5/k8CB8zIu7QA==", - "dev": true, - "license": "MIT" - }, - "node_modules/prettier-plugin-solidity/node_modules/semver": { - "version": "7.7.2", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.2.tgz", - "integrity": "sha512-RF0Fw+rO5AMf9MAyaRXI4AV0Ulj5lMHqVxxdSgiVbixSCXoEmmX/jk0CuJw4+3SqroYO9VoUh+HcuJivvtJemA==", + "node_modules/readdir-glob/node_modules/minimatch": { + "version": "5.1.6", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.6.tgz", + "integrity": "sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==", "dev": true, "license": "ISC", - "bin": { - "semver": "bin/semver.js" + "dependencies": { + "brace-expansion": "^2.0.1" }, "engines": { "node": ">=10" } }, - "node_modules/pretty-format": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.7.0.tgz", - "integrity": "sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ==", + "node_modules/readdirp": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", + "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", "license": "MIT", "dependencies": { - "@jest/schemas": "^29.6.3", - "ansi-styles": "^5.0.0", - "react-is": "^18.0.0" + "picomatch": "^2.2.1" }, "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "node": ">=8.10.0" } }, - "node_modules/pretty-format/node_modules/react-is": { - "version": "18.3.1", - "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.3.1.tgz", - "integrity": "sha512-/LLMVyas0ljjAtoYiPqYiL8VWXzUUdThrmU5+n20DZv+a+ClRoevUzw5JxU+Ieh5/c87ytoTBV9G1FiKfNJdmg==", - "license": "MIT" - }, - "node_modules/process": { - "version": "0.11.10", - "resolved": "https://registry.npmjs.org/process/-/process-0.11.10.tgz", - "integrity": "sha512-cdGef/drWFoydD1JsMzuFf8100nZl+GT+yacc2bEced5f9Rjk4z+WtFUTBu9PhOi9j/jfmBPu0mMEY4wIdAF8A==", - "dev": true, + "node_modules/readdirp/node_modules/picomatch": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", "license": "MIT", "engines": { - "node": ">= 0.6.0" + "node": ">=8.6" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" } }, - "node_modules/process-nextick-args": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", - "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==", - "license": "MIT" - }, - "node_modules/process-warning": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/process-warning/-/process-warning-5.0.0.tgz", - "integrity": "sha512-a39t9ApHNx2L4+HBnQKqxxHNs1r7KF+Intd8Q/g1bUh6q0WIp9voPXJ/x0j+ZL45KF1pJd9+q2jLIRMfvEshkA==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/fastify" - }, - { - "type": "opencollective", - "url": "https://opencollective.com/fastify" - } - ], + "node_modules/reading-time": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/reading-time/-/reading-time-1.5.0.tgz", + "integrity": "sha512-onYyVhBNr4CmAxFsKS7bz+uTLRakypIe4R+5A824vBSkQy/hB3fZepoVEf8OVAxzLvK+H/jm9TzpI3ETSm64Kg==", "license": "MIT" }, - "node_modules/promise": { - "version": "8.3.0", - "resolved": "https://registry.npmjs.org/promise/-/promise-8.3.0.tgz", - "integrity": "sha512-rZPNPKTOYVNEEKFaq1HqTgOwZD+4/YHS5ukLzQCypkj+OkYx7iv0mA91lJlpPPZ8vMau3IIGj5Qlwrx+8iiSmg==", + "node_modules/real-require": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/real-require/-/real-require-0.2.0.tgz", + "integrity": "sha512-57frrGM/OCTLqLOAh0mhVA9VBMHd+9U7Zb2THMGdBUoZVOtGbJzjxsYGDJ3A9AYYCP4hn6y1TVbaOfzWtm5GFg==", "license": "MIT", - "dependencies": { - "asap": "~2.0.6" + "engines": { + "node": ">= 12.13.0" } }, - "node_modules/prompts": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/prompts/-/prompts-2.4.2.tgz", - "integrity": "sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q==", - "dev": true, - "license": "MIT", + "node_modules/rechoir": { + "version": "0.6.2", + "resolved": "https://registry.npmjs.org/rechoir/-/rechoir-0.6.2.tgz", + "integrity": "sha512-HFM8rkZ+i3zrV+4LQjwQ0W+ez98pApMGM3HUrN04j3CqzPOzl9nmP15Y8YXNm8QHGv/eacOVEjqhmWpkRV0NAw==", "dependencies": { - "kleur": "^3.0.3", - "sisteransi": "^1.0.5" + "resolve": "^1.1.6" }, "engines": { - "node": ">= 6" + "node": ">= 0.10" } }, - "node_modules/prop-types": { - "version": "15.8.1", - "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.8.1.tgz", - "integrity": "sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==", + "node_modules/recma-build-jsx": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/recma-build-jsx/-/recma-build-jsx-1.0.0.tgz", + "integrity": "sha512-8GtdyqaBcDfva+GUKDr3nev3VpKAhup1+RvkMvUxURHpW7QyIvk9F5wz7Vzo06CEMSilw6uArgRqhpiUcWp8ew==", "license": "MIT", "dependencies": { - "loose-envify": "^1.4.0", - "object-assign": "^4.1.1", - "react-is": "^16.13.1" + "@types/estree": "^1.0.0", + "estree-util-build-jsx": "^3.0.0", + "vfile": "^6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/prop-types/node_modules/react-is": { - "version": "16.13.1", - "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz", - "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==", - "license": "MIT" - }, - "node_modules/proper-lockfile": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/proper-lockfile/-/proper-lockfile-4.1.2.tgz", - "integrity": "sha512-TjNPblN4BwAWMXU8s9AEz4JmQxnD1NNL7bNOY/AKUzyamc379FWASUhc/K1pL2noVb+XmZKLL68cjzLsiOAMaA==", - "dev": true, + "node_modules/recma-build-jsx/node_modules/unist-util-stringify-position": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-4.0.0.tgz", + "integrity": "sha512-0ASV06AAoKCDkS2+xw5RXJywruurpbC4JZSm7nr7MOt1ojAzvyyaO+UxZf18j8FCF6kmzCZKcAgN/yu2gm2XgQ==", "license": "MIT", "dependencies": { - "graceful-fs": "^4.2.4", - "retry": "^0.12.0", - "signal-exit": "^3.0.2" + "@types/unist": "^3.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/proper-lockfile/node_modules/retry": { - "version": "0.12.0", - "resolved": "https://registry.npmjs.org/retry/-/retry-0.12.0.tgz", - "integrity": "sha512-9LkiTwjUh6rT555DtE9rTX+BKByPfrMzEAtnlEtdEwr3Nkffwiihqe2bWADg+OQRjt9gl6ICdmB/ZFDCGAtSow==", - "dev": true, + "node_modules/recma-build-jsx/node_modules/vfile": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/vfile/-/vfile-6.0.3.tgz", + "integrity": "sha512-KzIbH/9tXat2u30jf+smMwFCsno4wHVdNmzFyL+T/L3UGqqk6JKfVqOFOZEpZSHADH1k40ab6NUIXZq422ov3Q==", "license": "MIT", - "engines": { - "node": ">= 4" + "dependencies": { + "@types/unist": "^3.0.0", + "vfile-message": "^4.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/proper-lockfile/node_modules/signal-exit": { - "version": "3.0.7", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", - "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", - "dev": true, - "license": "ISC" - }, - "node_modules/properties-reader": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/properties-reader/-/properties-reader-2.3.0.tgz", - "integrity": "sha512-z597WicA7nDZxK12kZqHr2TcvwNU1GCfA5UwfDY/HDp3hXPoPlb5rlEx9bwGTiJnc0OqbBTkU975jDToth8Gxw==", - "dev": true, + "node_modules/recma-build-jsx/node_modules/vfile-message": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/vfile-message/-/vfile-message-4.0.3.tgz", + "integrity": "sha512-QTHzsGd1EhbZs4AsQ20JX1rC3cOlt/IWJruk893DfLRr57lcnOeMaWG4K0JrRta4mIJZKth2Au3mM3u03/JWKw==", "license": "MIT", "dependencies": { - "mkdirp": "^1.0.4" - }, - "engines": { - "node": ">=14" + "@types/unist": "^3.0.0", + "unist-util-stringify-position": "^4.0.0" }, "funding": { - "type": "github", - "url": "https://github.com/steveukx/properties?sponsor=1" + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/properties-reader/node_modules/mkdirp": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", - "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", - "dev": true, + "node_modules/recma-jsx": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/recma-jsx/-/recma-jsx-1.0.1.tgz", + "integrity": "sha512-huSIy7VU2Z5OLv6oFLosQGGDqPqdO1iq6bWNAdhzMxSJP7RAso4fCZ1cKu8j9YHCZf3TPrq4dw3okhrylgcd7w==", "license": "MIT", - "bin": { - "mkdirp": "bin/cmd.js" + "dependencies": { + "acorn-jsx": "^5.0.0", + "estree-util-to-js": "^2.0.0", + "recma-parse": "^1.0.0", + "recma-stringify": "^1.0.0", + "unified": "^11.0.0" }, - "engines": { - "node": ">=10" + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + }, + "peerDependencies": { + "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" } }, - "node_modules/property-information": { - "version": "5.6.0", - "resolved": "https://registry.npmjs.org/property-information/-/property-information-5.6.0.tgz", - "integrity": "sha512-YUHSPk+A30YPv+0Qf8i9Mbfe/C0hdPXk1s1jPVToV8pk8BQtpw10ct89Eo7OWkutrwqvT0eicAxlOg3dOAu8JA==", + "node_modules/recma-jsx/node_modules/bail": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/bail/-/bail-2.0.2.tgz", + "integrity": "sha512-0xO6mYd7JB2YesxDKplafRpsiOzPt9V02ddPCLbY1xYGPOX24NTyN50qnUxgCPcSoYMhKpAuBTjQoRZCAkUDRw==", "license": "MIT", - "dependencies": { - "xtend": "^4.0.0" - }, "funding": { "type": "github", "url": "https://github.com/sponsors/wooorm" } }, - "node_modules/proto-list": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/proto-list/-/proto-list-1.2.4.tgz", - "integrity": "sha512-vtK/94akxsTMhe0/cbfpR+syPuszcuwhqVjJq26CuNDgFGj682oRBXOP5MJpv2r7JtE8MsiepGIqvvOTBwn2vA==", - "dev": true, - "license": "ISC" - }, - "node_modules/protobufjs": { - "version": "7.2.5", - "resolved": "https://registry.npmjs.org/protobufjs/-/protobufjs-7.2.5.tgz", - "integrity": "sha512-gGXRSXvxQ7UiPgfw8gevrfRWcTlSbOFg+p/N+JVJEK5VhueL2miT6qTymqAmjr1Q5WbOCyJbyrk6JfWKwlFn6A==", - "hasInstallScript": true, - "license": "BSD-3-Clause", - "dependencies": { - "@protobufjs/aspromise": "^1.1.2", - "@protobufjs/base64": "^1.1.2", - "@protobufjs/codegen": "^2.0.4", - "@protobufjs/eventemitter": "^1.1.0", - "@protobufjs/fetch": "^1.1.0", - "@protobufjs/float": "^1.0.2", - "@protobufjs/inquire": "^1.1.0", - "@protobufjs/path": "^1.1.2", - "@protobufjs/pool": "^1.1.0", - "@protobufjs/utf8": "^1.1.0", - "@types/node": ">=13.7.0", - "long": "^5.0.0" - }, + "node_modules/recma-jsx/node_modules/is-plain-obj": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-4.1.0.tgz", + "integrity": "sha512-+Pgi+vMuUNkJyExiMBt5IlFoMyKnr5zhJ4Uspz58WOhBF5QoIZkFyNHIbBAtHwzVAgk5RtndVNsDRN61/mmDqg==", + "license": "MIT", "engines": { - "node": ">=12.0.0" + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/protobufjs/node_modules/long": { - "version": "5.3.2", - "resolved": "https://registry.npmjs.org/long/-/long-5.3.2.tgz", - "integrity": "sha512-mNAgZ1GmyNhD7AuqnTG3/VQ26o760+ZYBPKjPvugO8+nLbYfX6TVpJPseBvopbdY+qpZ/lKUnmEc1LeZYS3QAA==", - "license": "Apache-2.0" - }, - "node_modules/proxy-addr": { - "version": "2.0.7", - "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz", - "integrity": "sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==", + "node_modules/recma-jsx/node_modules/trough": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/trough/-/trough-2.2.0.tgz", + "integrity": "sha512-tmMpK00BjZiUyVyvrBK7knerNgmgvcV/KLVyuma/SC+TQN167GrMRciANTz09+k3zW8L8t60jWO1GpfkZdjTaw==", "license": "MIT", - "dependencies": { - "forwarded": "0.2.0", - "ipaddr.js": "1.9.1" - }, - "engines": { - "node": ">= 0.10" + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" } }, - "node_modules/proxy-compare": { - "version": "2.5.1", - "resolved": "https://registry.npmjs.org/proxy-compare/-/proxy-compare-2.5.1.tgz", - "integrity": "sha512-oyfc0Tx87Cpwva5ZXezSp5V9vht1c7dZBhvuV/y3ctkgMVUmiAGDVeeB0dKhGSyT0v1ZTEQYpe/RXlBVBNuCLA==", - "license": "MIT" - }, - "node_modules/proxy-from-env": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz", - "integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==", - "license": "MIT" - }, - "node_modules/psl": { - "version": "1.15.0", - "resolved": "https://registry.npmjs.org/psl/-/psl-1.15.0.tgz", - "integrity": "sha512-JZd3gMVBAVQkSs6HdNZo9Sdo0LNcQeMNP3CozBJb3JYC/QUYZTnKxP+f8oWRX4rHP5EurWxqAHTSwUCjlNKa1w==", - "dev": true, + "node_modules/recma-jsx/node_modules/unified": { + "version": "11.0.5", + "resolved": "https://registry.npmjs.org/unified/-/unified-11.0.5.tgz", + "integrity": "sha512-xKvGhPWw3k84Qjh8bI3ZeJjqnyadK+GEFtazSfZv/rKeTkTjOJho6mFqh2SM96iIcZokxiOpg78GazTSg8+KHA==", "license": "MIT", "dependencies": { - "punycode": "^2.3.1" + "@types/unist": "^3.0.0", + "bail": "^2.0.0", + "devlop": "^1.0.0", + "extend": "^3.0.0", + "is-plain-obj": "^4.0.0", + "trough": "^2.0.0", + "vfile": "^6.0.0" }, "funding": { - "url": "https://github.com/sponsors/lupomontero" + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/public-encrypt": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/public-encrypt/-/public-encrypt-4.0.3.tgz", - "integrity": "sha512-zVpa8oKZSz5bTMTFClc1fQOnyyEzpl5ozpi1B5YcvBrdohMjH2rfsBtyXcuNuwjsDIXmBYlF2N5FlJYhR29t8Q==", - "dev": true, + "node_modules/recma-jsx/node_modules/unist-util-stringify-position": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-4.0.0.tgz", + "integrity": "sha512-0ASV06AAoKCDkS2+xw5RXJywruurpbC4JZSm7nr7MOt1ojAzvyyaO+UxZf18j8FCF6kmzCZKcAgN/yu2gm2XgQ==", "license": "MIT", "dependencies": { - "bn.js": "^4.1.0", - "browserify-rsa": "^4.0.0", - "create-hash": "^1.1.0", - "parse-asn1": "^5.0.0", - "randombytes": "^2.0.1", - "safe-buffer": "^5.1.2" + "@types/unist": "^3.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } - }, - "node_modules/public-encrypt/node_modules/bn.js": { - "version": "4.12.2", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.2.tgz", - "integrity": "sha512-n4DSx829VRTRByMRGdjQ9iqsN0Bh4OolPsFnaZBLcbi8iXcB+kJ9s7EnRt4wILZNV3kPLHkRVfOc/HvhC3ovDw==", - "dev": true, - "license": "MIT" - }, - "node_modules/pump": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.3.tgz", - "integrity": "sha512-todwxLMY7/heScKmntwQG8CXVkWUOdYxIvY2s0VWAAMh/nd8SoYiRaKjlr7+iCs984f2P8zvrfWcDDYVb73NfA==", + }, + "node_modules/recma-jsx/node_modules/vfile": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/vfile/-/vfile-6.0.3.tgz", + "integrity": "sha512-KzIbH/9tXat2u30jf+smMwFCsno4wHVdNmzFyL+T/L3UGqqk6JKfVqOFOZEpZSHADH1k40ab6NUIXZq422ov3Q==", "license": "MIT", "dependencies": { - "end-of-stream": "^1.1.0", - "once": "^1.3.1" + "@types/unist": "^3.0.0", + "vfile-message": "^4.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/punycode": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz", - "integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==", + "node_modules/recma-jsx/node_modules/vfile-message": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/vfile-message/-/vfile-message-4.0.3.tgz", + "integrity": "sha512-QTHzsGd1EhbZs4AsQ20JX1rC3cOlt/IWJruk893DfLRr57lcnOeMaWG4K0JrRta4mIJZKth2Au3mM3u03/JWKw==", "license": "MIT", - "engines": { - "node": ">=6" + "dependencies": { + "@types/unist": "^3.0.0", + "unist-util-stringify-position": "^4.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/pupa": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/pupa/-/pupa-3.3.0.tgz", - "integrity": "sha512-LjgDO2zPtoXP2wJpDjZrGdojii1uqO0cnwKoIoUzkfS98HDmbeiGmYiXo3lXeFlq2xvne1QFQhwYXSUCLKtEuA==", - "dev": true, + "node_modules/recma-parse": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/recma-parse/-/recma-parse-1.0.0.tgz", + "integrity": "sha512-OYLsIGBB5Y5wjnSnQW6t3Xg7q3fQ7FWbw/vcXtORTnyaSFscOtABg+7Pnz6YZ6c27fG1/aN8CjfwoUEUIdwqWQ==", "license": "MIT", "dependencies": { - "escape-goat": "^4.0.0" + "@types/estree": "^1.0.0", + "esast-util-from-js": "^2.0.0", + "unified": "^11.0.0", + "vfile": "^6.0.0" }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/recma-parse/node_modules/bail": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/bail/-/bail-2.0.2.tgz", + "integrity": "sha512-0xO6mYd7JB2YesxDKplafRpsiOzPt9V02ddPCLbY1xYGPOX24NTyN50qnUxgCPcSoYMhKpAuBTjQoRZCAkUDRw==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/recma-parse/node_modules/is-plain-obj": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-4.1.0.tgz", + "integrity": "sha512-+Pgi+vMuUNkJyExiMBt5IlFoMyKnr5zhJ4Uspz58WOhBF5QoIZkFyNHIbBAtHwzVAgk5RtndVNsDRN61/mmDqg==", + "license": "MIT", "engines": { - "node": ">=12.20" + "node": ">=12" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/pure-rand": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/pure-rand/-/pure-rand-6.1.0.tgz", - "integrity": "sha512-bVWawvoZoBYpp6yIoQtQXHZjmz35RSVHnUOTefl8Vcjr8snTPY1wnpSPMWekcFwbxI6gtmT7rSYPFvz71ldiOA==", - "dev": true, - "funding": [ - { - "type": "individual", - "url": "https://github.com/sponsors/dubzzz" - }, - { - "type": "opencollective", - "url": "https://opencollective.com/fast-check" - } - ], - "license": "MIT" - }, - "node_modules/pvtsutils": { - "version": "1.3.6", - "resolved": "https://registry.npmjs.org/pvtsutils/-/pvtsutils-1.3.6.tgz", - "integrity": "sha512-PLgQXQ6H2FWCaeRak8vvk1GW462lMxB5s3Jm673N82zI4vqtVUPuZdffdZbPDFRoU8kAhItWFtPCWiPpp4/EDg==", + "node_modules/recma-parse/node_modules/trough": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/trough/-/trough-2.2.0.tgz", + "integrity": "sha512-tmMpK00BjZiUyVyvrBK7knerNgmgvcV/KLVyuma/SC+TQN167GrMRciANTz09+k3zW8L8t60jWO1GpfkZdjTaw==", "license": "MIT", - "dependencies": { - "tslib": "^2.8.1" + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" } }, - "node_modules/pvutils": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/pvutils/-/pvutils-1.1.3.tgz", - "integrity": "sha512-pMpnA0qRdFp32b1sJl1wOJNxZLQ2cbQx+k6tjNtZ8CpvVhNqEPRgivZ2WOUev2YMajecdH7ctUPDvEe87nariQ==", + "node_modules/recma-parse/node_modules/unified": { + "version": "11.0.5", + "resolved": "https://registry.npmjs.org/unified/-/unified-11.0.5.tgz", + "integrity": "sha512-xKvGhPWw3k84Qjh8bI3ZeJjqnyadK+GEFtazSfZv/rKeTkTjOJho6mFqh2SM96iIcZokxiOpg78GazTSg8+KHA==", "license": "MIT", - "engines": { - "node": ">=6.0.0" + "dependencies": { + "@types/unist": "^3.0.0", + "bail": "^2.0.0", + "devlop": "^1.0.0", + "extend": "^3.0.0", + "is-plain-obj": "^4.0.0", + "trough": "^2.0.0", + "vfile": "^6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/qrcode": { - "version": "1.5.3", - "resolved": "https://registry.npmjs.org/qrcode/-/qrcode-1.5.3.tgz", - "integrity": "sha512-puyri6ApkEHYiVl4CFzo1tDkAZ+ATcnbJrJ6RiBM1Fhctdn/ix9MTE3hRph33omisEbC/2fcfemsseiKgBPKZg==", + "node_modules/recma-parse/node_modules/unist-util-stringify-position": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-4.0.0.tgz", + "integrity": "sha512-0ASV06AAoKCDkS2+xw5RXJywruurpbC4JZSm7nr7MOt1ojAzvyyaO+UxZf18j8FCF6kmzCZKcAgN/yu2gm2XgQ==", "license": "MIT", "dependencies": { - "dijkstrajs": "^1.0.1", - "encode-utf8": "^1.0.3", - "pngjs": "^5.0.0", - "yargs": "^15.3.1" - }, - "bin": { - "qrcode": "bin/qrcode" + "@types/unist": "^3.0.0" }, - "engines": { - "node": ">=10.13.0" + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/qrcode/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "node_modules/recma-parse/node_modules/vfile": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/vfile/-/vfile-6.0.3.tgz", + "integrity": "sha512-KzIbH/9tXat2u30jf+smMwFCsno4wHVdNmzFyL+T/L3UGqqk6JKfVqOFOZEpZSHADH1k40ab6NUIXZq422ov3Q==", "license": "MIT", "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" + "@types/unist": "^3.0.0", + "vfile-message": "^4.0.0" }, "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/qrcode/node_modules/cliui": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-6.0.0.tgz", - "integrity": "sha512-t6wbgtoCXvAzst7QgXxJYqPt0usEfbgQdftEPbLL/cvv6HPE5VgvqCuAIDR0NgU52ds6rFwqrgakNLrHEjCbrQ==", - "license": "ISC", + "node_modules/recma-parse/node_modules/vfile-message": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/vfile-message/-/vfile-message-4.0.3.tgz", + "integrity": "sha512-QTHzsGd1EhbZs4AsQ20JX1rC3cOlt/IWJruk893DfLRr57lcnOeMaWG4K0JrRta4mIJZKth2Au3mM3u03/JWKw==", + "license": "MIT", "dependencies": { - "string-width": "^4.2.0", - "strip-ansi": "^6.0.0", - "wrap-ansi": "^6.2.0" + "@types/unist": "^3.0.0", + "unist-util-stringify-position": "^4.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/qrcode/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "node_modules/recma-stringify": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/recma-stringify/-/recma-stringify-1.0.0.tgz", + "integrity": "sha512-cjwII1MdIIVloKvC9ErQ+OgAtwHBmcZ0Bg4ciz78FtbT8In39aAYbaA7zvxQ61xVMSPE8WxhLwLbhif4Js2C+g==", "license": "MIT", "dependencies": { - "color-name": "~1.1.4" + "@types/estree": "^1.0.0", + "estree-util-to-js": "^2.0.0", + "unified": "^11.0.0", + "vfile": "^6.0.0" }, - "engines": { - "node": ">=7.0.0" + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/qrcode/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "license": "MIT" - }, - "node_modules/qrcode/node_modules/decamelize": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", - "integrity": "sha512-z2S+W9X73hAUUki+N+9Za2lBlun89zigOyGrsax+KUQ6wKW4ZoWpEYBkGhQjwAjjDCkWxhY0VKEhk8wzY7F5cA==", + "node_modules/recma-stringify/node_modules/bail": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/bail/-/bail-2.0.2.tgz", + "integrity": "sha512-0xO6mYd7JB2YesxDKplafRpsiOzPt9V02ddPCLbY1xYGPOX24NTyN50qnUxgCPcSoYMhKpAuBTjQoRZCAkUDRw==", "license": "MIT", - "engines": { - "node": ">=0.10.0" + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" } }, - "node_modules/qrcode/node_modules/find-up": { + "node_modules/recma-stringify/node_modules/is-plain-obj": { "version": "4.1.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", - "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", + "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-4.1.0.tgz", + "integrity": "sha512-+Pgi+vMuUNkJyExiMBt5IlFoMyKnr5zhJ4Uspz58WOhBF5QoIZkFyNHIbBAtHwzVAgk5RtndVNsDRN61/mmDqg==", "license": "MIT", - "dependencies": { - "locate-path": "^5.0.0", - "path-exists": "^4.0.0" - }, "engines": { - "node": ">=8" + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/qrcode/node_modules/locate-path": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", - "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", + "node_modules/recma-stringify/node_modules/trough": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/trough/-/trough-2.2.0.tgz", + "integrity": "sha512-tmMpK00BjZiUyVyvrBK7knerNgmgvcV/KLVyuma/SC+TQN167GrMRciANTz09+k3zW8L8t60jWO1GpfkZdjTaw==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/recma-stringify/node_modules/unified": { + "version": "11.0.5", + "resolved": "https://registry.npmjs.org/unified/-/unified-11.0.5.tgz", + "integrity": "sha512-xKvGhPWw3k84Qjh8bI3ZeJjqnyadK+GEFtazSfZv/rKeTkTjOJho6mFqh2SM96iIcZokxiOpg78GazTSg8+KHA==", "license": "MIT", "dependencies": { - "p-locate": "^4.1.0" + "@types/unist": "^3.0.0", + "bail": "^2.0.0", + "devlop": "^1.0.0", + "extend": "^3.0.0", + "is-plain-obj": "^4.0.0", + "trough": "^2.0.0", + "vfile": "^6.0.0" }, - "engines": { - "node": ">=8" + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/qrcode/node_modules/p-locate": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", - "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", + "node_modules/recma-stringify/node_modules/unist-util-stringify-position": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-4.0.0.tgz", + "integrity": "sha512-0ASV06AAoKCDkS2+xw5RXJywruurpbC4JZSm7nr7MOt1ojAzvyyaO+UxZf18j8FCF6kmzCZKcAgN/yu2gm2XgQ==", "license": "MIT", "dependencies": { - "p-limit": "^2.2.0" + "@types/unist": "^3.0.0" }, - "engines": { - "node": ">=8" + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/qrcode/node_modules/wrap-ansi": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz", - "integrity": "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==", + "node_modules/recma-stringify/node_modules/vfile": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/vfile/-/vfile-6.0.3.tgz", + "integrity": "sha512-KzIbH/9tXat2u30jf+smMwFCsno4wHVdNmzFyL+T/L3UGqqk6JKfVqOFOZEpZSHADH1k40ab6NUIXZq422ov3Q==", "license": "MIT", "dependencies": { - "ansi-styles": "^4.0.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0" + "@types/unist": "^3.0.0", + "vfile-message": "^4.0.0" }, - "engines": { - "node": ">=8" + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/qrcode/node_modules/y18n": { + "node_modules/recma-stringify/node_modules/vfile-message": { "version": "4.0.3", - "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.3.tgz", - "integrity": "sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ==", - "license": "ISC" + "resolved": "https://registry.npmjs.org/vfile-message/-/vfile-message-4.0.3.tgz", + "integrity": "sha512-QTHzsGd1EhbZs4AsQ20JX1rC3cOlt/IWJruk893DfLRr57lcnOeMaWG4K0JrRta4mIJZKth2Au3mM3u03/JWKw==", + "license": "MIT", + "dependencies": { + "@types/unist": "^3.0.0", + "unist-util-stringify-position": "^4.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } }, - "node_modules/qrcode/node_modules/yargs": { - "version": "15.4.1", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-15.4.1.tgz", - "integrity": "sha512-aePbxDmcYW++PaqBsJ+HYUFwCdv4LVvdnhBy78E57PIor8/OVvhMrADFFEDh8DHDFRv/O9i3lPhsENjO7QX0+A==", + "node_modules/recursive-readdir": { + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/recursive-readdir/-/recursive-readdir-2.2.3.tgz", + "integrity": "sha512-8HrF5ZsXk5FAH9dgsx3BlUer73nIhuj+9OrQwEbLTPOBzGkL1lsFCR01am+v+0m2Cmbs1nP12hLDl5FA7EszKA==", + "dev": true, "license": "MIT", "dependencies": { - "cliui": "^6.0.0", - "decamelize": "^1.2.0", - "find-up": "^4.1.0", - "get-caller-file": "^2.0.1", - "require-directory": "^2.1.1", - "require-main-filename": "^2.0.0", - "set-blocking": "^2.0.0", - "string-width": "^4.2.0", - "which-module": "^2.0.0", - "y18n": "^4.0.0", - "yargs-parser": "^18.1.2" + "minimatch": "^3.0.5" }, "engines": { - "node": ">=8" + "node": ">=6.0.0" } }, - "node_modules/qrcode/node_modules/yargs-parser": { - "version": "18.1.3", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-18.1.3.tgz", - "integrity": "sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ==", - "license": "ISC", + "node_modules/redent": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/redent/-/redent-3.0.0.tgz", + "integrity": "sha512-6tDA8g98We0zd0GvVeMT9arEOnTw9qM03L9cJXaCjrip1OO764RDBLBfrB4cwzNGDj5OA5ioymC9GkizgWJDUg==", + "dev": true, + "license": "MIT", "dependencies": { - "camelcase": "^5.0.0", - "decamelize": "^1.2.0" + "indent-string": "^4.0.0", + "strip-indent": "^3.0.0" }, + "engines": { + "node": ">=8" + } + }, + "node_modules/reduce-flatten": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/reduce-flatten/-/reduce-flatten-2.0.0.tgz", + "integrity": "sha512-EJ4UNY/U1t2P/2k6oqotuX2Cc3T6nxJwsM0N0asT7dhrtH1ltUxDn4NalSYmPE2rCkVpcf/X6R0wDwcFpzhd4w==", + "devOptional": true, + "license": "MIT", "engines": { "node": ">=6" } }, - "node_modules/qs": { - "version": "6.11.0", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.11.0.tgz", - "integrity": "sha512-MvjoMCJwEarSbUYk5O+nmoSzSutSsTwF85zcHPQ9OrlFoZOYIjaqBAJIqIXjptyD5vThxGq52Xu/MaJzRkIk4Q==", - "license": "BSD-3-Clause", + "node_modules/reflect-metadata": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/reflect-metadata/-/reflect-metadata-0.2.2.tgz", + "integrity": "sha512-urBwgfrvVP/eAyXx4hluJivBKzuEbSQs9rKWCrCkbSxNv8mxPcUZKeuoF3Uy4mJl3Lwprp6yy5/39VWigZ4K6Q==", + "license": "Apache-2.0", + "peer": true + }, + "node_modules/reflect.getprototypeof": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/reflect.getprototypeof/-/reflect.getprototypeof-1.0.10.tgz", + "integrity": "sha512-00o4I+DVrefhv+nX0ulyi3biSHCPDe+yLv5o/p6d/UVlirijB8E16FtfwSAi4g3tcqrQ4lRAqQSoFEZJehYEcw==", + "dev": true, + "license": "MIT", "dependencies": { - "side-channel": "^1.0.4" + "call-bind": "^1.0.8", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.9", + "es-errors": "^1.3.0", + "es-object-atoms": "^1.0.0", + "get-intrinsic": "^1.2.7", + "get-proto": "^1.0.1", + "which-builtin-type": "^1.2.1" }, "engines": { - "node": ">=0.6" + "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/quansync": { - "version": "0.2.11", - "resolved": "https://registry.npmjs.org/quansync/-/quansync-0.2.11.tgz", - "integrity": "sha512-AifT7QEbW9Nri4tAwR5M/uzpBuqfZf+zwaEM/QkzEjj7NBuFD2rBuy0K3dE+8wltbezDV7JMA0WfnCPYRSYbXA==", - "dev": true, - "funding": [ - { - "type": "individual", - "url": "https://github.com/sponsors/antfu" - }, - { - "type": "individual", - "url": "https://github.com/sponsors/sxzz" - } - ], + "node_modules/regenerate": { + "version": "1.4.2", + "resolved": "https://registry.npmjs.org/regenerate/-/regenerate-1.4.2.tgz", + "integrity": "sha512-zrceR/XhGYU/d/opr2EKO7aRHUeiBI8qjtfHqADTwZd6Szfy16la6kqD0MIUs5z5hx6AaKa+PixpPrR289+I0A==", "license": "MIT" }, - "node_modules/query-string": { - "version": "7.1.3", - "resolved": "https://registry.npmjs.org/query-string/-/query-string-7.1.3.tgz", - "integrity": "sha512-hh2WYhq4fi8+b+/2Kg9CEge4fDPvHS534aOOvOZeQ3+Vf2mCFsaFBYj0i+iXcAq6I9Vzp5fjMFBlONvayDC1qg==", + "node_modules/regenerate-unicode-properties": { + "version": "10.2.2", + "resolved": "https://registry.npmjs.org/regenerate-unicode-properties/-/regenerate-unicode-properties-10.2.2.tgz", + "integrity": "sha512-m03P+zhBeQd1RGnYxrGyDAPpWX/epKirLrp8e3qevZdVkKtnCrjjWczIbYc8+xd6vcTStVlqfycTx1KR4LOr0g==", "license": "MIT", "dependencies": { - "decode-uri-component": "^0.2.2", - "filter-obj": "^1.1.0", - "split-on-first": "^1.0.0", - "strict-uri-encode": "^2.0.0" + "regenerate": "^1.4.2" }, "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">=4" } }, - "node_modules/querystring-es3": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/querystring-es3/-/querystring-es3-0.2.1.tgz", - "integrity": "sha512-773xhDQnZBMFobEiztv8LIl70ch5MSF/jUQVlhwFyBILqq96anmoctVIYz+ZRp0qbCKATTn6ev02M3r7Ga5vqA==", + "node_modules/regenerator-runtime": { + "version": "0.13.11", + "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.11.tgz", + "integrity": "sha512-kY1AZVr2Ra+t+piVaJ4gxaFaReZVH40AKNo7UCX6W+dEwBo/2oZJzqfuN1qLq1oL45o56cPaTXELwrTh8Fpggg==", + "license": "MIT" + }, + "node_modules/regexp.prototype.flags": { + "version": "1.5.4", + "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.5.4.tgz", + "integrity": "sha512-dYqgNSZbDwkaJ2ceRd9ojCGjBq+mOm9LmtXnAnEGyHhN/5R7iDW2TRw3h+o/jCFxus3P2LfWIIiwowAjANm7IA==", "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.8", + "define-properties": "^1.2.1", + "es-errors": "^1.3.0", + "get-proto": "^1.0.1", + "gopd": "^1.2.0", + "set-function-name": "^2.0.2" + }, "engines": { - "node": ">=0.4.x" + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/querystringify": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/querystringify/-/querystringify-2.2.0.tgz", - "integrity": "sha512-FIqgj2EUvTa7R50u0rGsyTftzjYmv/a3hO345bZNrqabNqjtgiDMgmo4mkUjd+nzU5oF3dClKqFIPUKybUyqoQ==", - "dev": true, - "license": "MIT" - }, - "node_modules/queue": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/queue/-/queue-6.0.2.tgz", - "integrity": "sha512-iHZWu+q3IdFZFX36ro/lKBkSvfkztY5Y7HMiPlOUjhupPcG2JMfst2KKEpu5XndviX/3UhFbRngUPNKtgvtZiA==", + "node_modules/regexpu-core": { + "version": "6.4.0", + "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-6.4.0.tgz", + "integrity": "sha512-0ghuzq67LI9bLXpOX/ISfve/Mq33a4aFRzoQYhnnok1JOFpmE/A2TBGkNVenOGEeSBCjIiWcc6MVOG5HEQv0sA==", "license": "MIT", - "peer": true, "dependencies": { - "inherits": "~2.0.3" + "regenerate": "^1.4.2", + "regenerate-unicode-properties": "^10.2.2", + "regjsgen": "^0.8.0", + "regjsparser": "^0.13.0", + "unicode-match-property-ecmascript": "^2.0.0", + "unicode-match-property-value-ecmascript": "^2.2.1" + }, + "engines": { + "node": ">=4" } }, - "node_modules/queue-lit": { - "version": "1.5.2", - "resolved": "https://registry.npmjs.org/queue-lit/-/queue-lit-1.5.2.tgz", - "integrity": "sha512-tLc36IOPeMAubu8BkW8YDBV+WyIgKlYU7zUNs0J5Vk9skSZ4JfGlPOqplP0aHdfv7HL0B2Pg6nwiq60Qc6M2Hw==", - "dev": true, + "node_modules/registry-auth-token": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/registry-auth-token/-/registry-auth-token-5.1.0.tgz", + "integrity": "sha512-GdekYuwLXLxMuFTwAPg5UKGLW/UXzQrZvH/Zj791BQif5T05T0RsaLfHc9q3ZOKi7n+BoprPD9mJ0O0k4xzUlw==", "license": "MIT", + "dependencies": { + "@pnpm/npm-conf": "^2.1.0" + }, "engines": { - "node": ">=12" + "node": ">=14" } }, - "node_modules/queue-microtask": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", - "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "license": "MIT" - }, - "node_modules/quick-format-unescaped": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/quick-format-unescaped/-/quick-format-unescaped-4.0.4.tgz", - "integrity": "sha512-tYC1Q1hgyRuHgloV/YXs2w15unPVh8qfu/qCTfhTYamaw7fyhumKa2yGpdSo87vY32rIclj+4fWYQXUMs9EHvg==", - "license": "MIT" - }, - "node_modules/quick-lru": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/quick-lru/-/quick-lru-5.1.1.tgz", - "integrity": "sha512-WuyALRjWPDGtt/wzJiadO5AXY+8hZ80hVpe6MyivgraREW751X3SbhRvG3eLKOYN+8VEvqLcf3wdnt44Z4S4SA==", - "dev": true, + "node_modules/registry-url": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/registry-url/-/registry-url-6.0.1.tgz", + "integrity": "sha512-+crtS5QjFRqFCoQmvGduwYWEBng99ZvmFvF+cUJkGYF1L1BfU8C6Zp9T7f5vPAwyLkUExpvK+ANVZmGU49qi4Q==", "license": "MIT", + "dependencies": { + "rc": "1.2.8" + }, "engines": { - "node": ">=10" + "node": ">=12" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/radix3": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/radix3/-/radix3-1.1.2.tgz", - "integrity": "sha512-b484I/7b8rDEdSDKckSSBA8knMpcdsXudlE/LNL639wFoHKwLbEkQFZHWEYwDC0wa0FKUcCY+GAF73Z7wxNVFA==", + "node_modules/regjsgen": { + "version": "0.8.0", + "resolved": "https://registry.npmjs.org/regjsgen/-/regjsgen-0.8.0.tgz", + "integrity": "sha512-RvwtGe3d7LvWiDQXeQw8p5asZUmfU1G/l6WbUXeHta7Y2PEIvBTwH6E2EfmYUK8pxcxEdEmaomqyp0vZZ7C+3Q==", "license": "MIT" }, - "node_modules/randombytes": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", - "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", + "node_modules/regjsparser": { + "version": "0.13.0", + "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.13.0.tgz", + "integrity": "sha512-NZQZdC5wOE/H3UT28fVGL+ikOZcEzfMGk/c3iN9UGxzWHMa1op7274oyiUVrAG4B2EuFhus8SvkaYnhvW92p9Q==", + "license": "BSD-2-Clause", + "dependencies": { + "jsesc": "~3.1.0" + }, + "bin": { + "regjsparser": "bin/parser" + } + }, + "node_modules/rehype-raw": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/rehype-raw/-/rehype-raw-7.0.0.tgz", + "integrity": "sha512-/aE8hCfKlQeA8LmyeyQvQF3eBiLRGNlfBJEvWH7ivp9sBqs7TNqBL5X3v157rM4IFETqDnIOO+z5M/biZbo9Ww==", "license": "MIT", "dependencies": { - "safe-buffer": "^5.1.0" + "@types/hast": "^3.0.0", + "hast-util-raw": "^9.0.0", + "vfile": "^6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/randomfill": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/randomfill/-/randomfill-1.0.4.tgz", - "integrity": "sha512-87lcbR8+MhcWcUiQ+9e+Rwx8MyR2P7qnt15ynUlbm3TU/fjbgz4GsvfSUDTemtCCtVCqb4ZcEFlyPNTh9bBTLw==", - "dev": true, + "node_modules/rehype-raw/node_modules/unist-util-stringify-position": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-4.0.0.tgz", + "integrity": "sha512-0ASV06AAoKCDkS2+xw5RXJywruurpbC4JZSm7nr7MOt1ojAzvyyaO+UxZf18j8FCF6kmzCZKcAgN/yu2gm2XgQ==", "license": "MIT", "dependencies": { - "randombytes": "^2.0.5", - "safe-buffer": "^5.1.0" + "@types/unist": "^3.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/range-parser": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", - "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==", + "node_modules/rehype-raw/node_modules/vfile": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/vfile/-/vfile-6.0.3.tgz", + "integrity": "sha512-KzIbH/9tXat2u30jf+smMwFCsno4wHVdNmzFyL+T/L3UGqqk6JKfVqOFOZEpZSHADH1k40ab6NUIXZq422ov3Q==", "license": "MIT", - "engines": { - "node": ">= 0.6" + "dependencies": { + "@types/unist": "^3.0.0", + "vfile-message": "^4.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/raw-body": { - "version": "2.5.2", - "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.2.tgz", - "integrity": "sha512-8zGqypfENjCIqGhgXToC8aB2r7YrBX+AQAfIPs/Mlk+BtPTztOvTS01NRW/3Eh60J+a48lt8qsCzirQ6loCVfA==", + "node_modules/rehype-raw/node_modules/vfile-message": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/vfile-message/-/vfile-message-4.0.3.tgz", + "integrity": "sha512-QTHzsGd1EhbZs4AsQ20JX1rC3cOlt/IWJruk893DfLRr57lcnOeMaWG4K0JrRta4mIJZKth2Au3mM3u03/JWKw==", "license": "MIT", "dependencies": { - "bytes": "3.1.2", - "http-errors": "2.0.0", - "iconv-lite": "0.4.24", - "unpipe": "1.0.0" + "@types/unist": "^3.0.0", + "unist-util-stringify-position": "^4.0.0" }, - "engines": { - "node": ">= 0.8" + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/raw-body/node_modules/iconv-lite": { - "version": "0.4.24", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", - "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", + "node_modules/rehype-recma": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/rehype-recma/-/rehype-recma-1.0.0.tgz", + "integrity": "sha512-lqA4rGUf1JmacCNWWZx0Wv1dHqMwxzsDWYMTowuplHF3xH0N/MmrZ/G3BDZnzAkRmxDadujCjaKM2hqYdCBOGw==", "license": "MIT", "dependencies": { - "safer-buffer": ">= 2.1.2 < 3" + "@types/estree": "^1.0.0", + "@types/hast": "^3.0.0", + "hast-util-to-estree": "^3.0.0" }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/relateurl": { + "version": "0.2.7", + "resolved": "https://registry.npmjs.org/relateurl/-/relateurl-0.2.7.tgz", + "integrity": "sha512-G08Dxvm4iDN3MLM0EsP62EDV9IuhXPR6blNz6Utcp7zyV3tr4HVNINt6MpaRWbxoOHT3Q7YN2P+jaHX8vUbgog==", + "license": "MIT", "engines": { - "node": ">=0.10.0" + "node": ">= 0.10" } }, - "node_modules/rc": { - "version": "1.2.8", - "resolved": "https://registry.npmjs.org/rc/-/rc-1.2.8.tgz", - "integrity": "sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==", - "dev": true, - "license": "(BSD-2-Clause OR MIT OR Apache-2.0)", + "node_modules/remark-directive": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/remark-directive/-/remark-directive-3.0.1.tgz", + "integrity": "sha512-gwglrEQEZcZYgVyG1tQuA+h58EZfq5CSULw7J90AFuCTyib1thgHPoqQ+h9iFvU6R+vnZ5oNFQR5QKgGpk741A==", + "license": "MIT", "dependencies": { - "deep-extend": "^0.6.0", - "ini": "~1.3.0", - "minimist": "^1.2.0", - "strip-json-comments": "~2.0.1" + "@types/mdast": "^4.0.0", + "mdast-util-directive": "^3.0.0", + "micromark-extension-directive": "^3.0.0", + "unified": "^11.0.0" }, - "bin": { - "rc": "cli.js" + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/rc/node_modules/ini": { - "version": "1.3.8", - "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz", - "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==", - "dev": true, - "license": "ISC" + "node_modules/remark-directive/node_modules/@types/mdast": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/@types/mdast/-/mdast-4.0.4.tgz", + "integrity": "sha512-kGaNbPh1k7AFzgpud/gMdvIm5xuECykRR+JnWKQno9TAXVa6WIVCGTPvYGekIDL4uwCZQSYbUxNBSb1aUo79oA==", + "license": "MIT", + "dependencies": { + "@types/unist": "*" + } }, - "node_modules/rc/node_modules/strip-json-comments": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", - "integrity": "sha512-4gB8na07fecVVkOI6Rs4e7T6NOTki5EmL7TUduTs6bu3EdnSycntVJ4re8kgZA+wx9IueI2Y11bfbgwtzuE0KQ==", - "dev": true, + "node_modules/remark-directive/node_modules/bail": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/bail/-/bail-2.0.2.tgz", + "integrity": "sha512-0xO6mYd7JB2YesxDKplafRpsiOzPt9V02ddPCLbY1xYGPOX24NTyN50qnUxgCPcSoYMhKpAuBTjQoRZCAkUDRw==", "license": "MIT", - "engines": { - "node": ">=0.10.0" + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" } }, - "node_modules/rdf-canonize": { - "version": "3.4.0", - "resolved": "https://registry.npmjs.org/rdf-canonize/-/rdf-canonize-3.4.0.tgz", - "integrity": "sha512-fUeWjrkOO0t1rg7B2fdyDTvngj+9RlUyL92vOdiB7c0FPguWVsniIMjEtHH+meLBO9rzkUlUzBVXgWrjI8P9LA==", - "license": "BSD-3-Clause", - "dependencies": { - "setimmediate": "^1.0.5" - }, + "node_modules/remark-directive/node_modules/is-plain-obj": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-4.1.0.tgz", + "integrity": "sha512-+Pgi+vMuUNkJyExiMBt5IlFoMyKnr5zhJ4Uspz58WOhBF5QoIZkFyNHIbBAtHwzVAgk5RtndVNsDRN61/mmDqg==", + "license": "MIT", "engines": { "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/react": { - "version": "18.3.1", - "resolved": "https://registry.npmjs.org/react/-/react-18.3.1.tgz", - "integrity": "sha512-wS+hAgJShR0KhEvPJArfuPVN1+Hz1t0Y6n5jLrGQbkb4urgPE/0Rve+1kMB1v/oWgHgm4WIcV+i7F2pTVj+2iQ==", + "node_modules/remark-directive/node_modules/trough": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/trough/-/trough-2.2.0.tgz", + "integrity": "sha512-tmMpK00BjZiUyVyvrBK7knerNgmgvcV/KLVyuma/SC+TQN167GrMRciANTz09+k3zW8L8t60jWO1GpfkZdjTaw==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/remark-directive/node_modules/unified": { + "version": "11.0.5", + "resolved": "https://registry.npmjs.org/unified/-/unified-11.0.5.tgz", + "integrity": "sha512-xKvGhPWw3k84Qjh8bI3ZeJjqnyadK+GEFtazSfZv/rKeTkTjOJho6mFqh2SM96iIcZokxiOpg78GazTSg8+KHA==", "license": "MIT", "dependencies": { - "loose-envify": "^1.1.0" + "@types/unist": "^3.0.0", + "bail": "^2.0.0", + "devlop": "^1.0.0", + "extend": "^3.0.0", + "is-plain-obj": "^4.0.0", + "trough": "^2.0.0", + "vfile": "^6.0.0" }, - "engines": { - "node": ">=0.10.0" + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/react-clientside-effect": { - "version": "1.2.8", - "resolved": "https://registry.npmjs.org/react-clientside-effect/-/react-clientside-effect-1.2.8.tgz", - "integrity": "sha512-ma2FePH0z3px2+WOu6h+YycZcEvFmmxIlAb62cF52bG86eMySciO/EQZeQMXd07kPCYB0a1dWDT5J+KE9mCDUw==", + "node_modules/remark-directive/node_modules/unist-util-stringify-position": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-4.0.0.tgz", + "integrity": "sha512-0ASV06AAoKCDkS2+xw5RXJywruurpbC4JZSm7nr7MOt1ojAzvyyaO+UxZf18j8FCF6kmzCZKcAgN/yu2gm2XgQ==", "license": "MIT", "dependencies": { - "@babel/runtime": "^7.12.13" + "@types/unist": "^3.0.0" }, - "peerDependencies": { - "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc" + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/react-day-picker": { - "version": "8.10.1", - "resolved": "https://registry.npmjs.org/react-day-picker/-/react-day-picker-8.10.1.tgz", - "integrity": "sha512-TMx7fNbhLk15eqcMt+7Z7S2KF7mfTId/XJDjKE8f+IUcFn0l08/kI4FiYTL/0yuOLmEcbR4Fwe3GJf/NiiMnPA==", + "node_modules/remark-directive/node_modules/vfile": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/vfile/-/vfile-6.0.3.tgz", + "integrity": "sha512-KzIbH/9tXat2u30jf+smMwFCsno4wHVdNmzFyL+T/L3UGqqk6JKfVqOFOZEpZSHADH1k40ab6NUIXZq422ov3Q==", "license": "MIT", - "funding": { - "type": "individual", - "url": "https://github.com/sponsors/gpbl" + "dependencies": { + "@types/unist": "^3.0.0", + "vfile-message": "^4.0.0" }, - "peerDependencies": { - "date-fns": "^2.28.0 || ^3.0.0", - "react": "^16.8.0 || ^17.0.0 || ^18.0.0" + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/react-device-detect": { - "version": "2.2.3", - "resolved": "https://registry.npmjs.org/react-device-detect/-/react-device-detect-2.2.3.tgz", - "integrity": "sha512-buYY3qrCnQVlIFHrC5UcUoAj7iANs/+srdkwsnNjI7anr3Tt7UY6MqNxtMLlr0tMBied0O49UZVK8XKs3ZIiPw==", + "node_modules/remark-directive/node_modules/vfile-message": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/vfile-message/-/vfile-message-4.0.3.tgz", + "integrity": "sha512-QTHzsGd1EhbZs4AsQ20JX1rC3cOlt/IWJruk893DfLRr57lcnOeMaWG4K0JrRta4mIJZKth2Au3mM3u03/JWKw==", "license": "MIT", "dependencies": { - "ua-parser-js": "^1.0.33" + "@types/unist": "^3.0.0", + "unist-util-stringify-position": "^4.0.0" }, - "peerDependencies": { - "react": ">= 0.14.0", - "react-dom": ">= 0.14.0" + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/react-devtools-core": { - "version": "6.1.5", - "resolved": "https://registry.npmjs.org/react-devtools-core/-/react-devtools-core-6.1.5.tgz", - "integrity": "sha512-ePrwPfxAnB+7hgnEr8vpKxL9cmnp7F322t8oqcPshbIQQhDKgFDW4tjhF2wjVbdXF9O/nyuy3sQWd9JGpiLPvA==", + "node_modules/remark-emoji": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/remark-emoji/-/remark-emoji-4.0.1.tgz", + "integrity": "sha512-fHdvsTR1dHkWKev9eNyhTo4EFwbUvJ8ka9SgeWkMPYFX4WoI7ViVBms3PjlQYgw5TLvNQso3GUB/b/8t3yo+dg==", "license": "MIT", - "peer": true, "dependencies": { - "shell-quote": "^1.6.1", - "ws": "^7" + "@types/mdast": "^4.0.2", + "emoticon": "^4.0.1", + "mdast-util-find-and-replace": "^3.0.1", + "node-emoji": "^2.1.0", + "unified": "^11.0.4" + }, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" } }, - "node_modules/react-devtools-core/node_modules/ws": { - "version": "7.5.10", - "resolved": "https://registry.npmjs.org/ws/-/ws-7.5.10.tgz", - "integrity": "sha512-+dbF1tHwZpXcbOJdVOkzLDxZP1ailvSxM6ZweXTegylPny803bFhA+vqBYw4s31NSAk4S2Qz+AKXK9a4wkdjcQ==", + "node_modules/remark-emoji/node_modules/@sindresorhus/is": { + "version": "4.6.0", + "resolved": "https://registry.npmjs.org/@sindresorhus/is/-/is-4.6.0.tgz", + "integrity": "sha512-t09vSN3MdfsyCHoFcTRCH/iUtG7OJ0CsjzB8cjAmKc/va/kIgeDI/TxsigdncE/4be734m0cvIYwNaV4i2XqAw==", "license": "MIT", - "peer": true, "engines": { - "node": ">=8.3.0" - }, - "peerDependencies": { - "bufferutil": "^4.0.1", - "utf-8-validate": "^5.0.2" + "node": ">=10" }, - "peerDependenciesMeta": { - "bufferutil": { - "optional": true - }, - "utf-8-validate": { - "optional": true - } + "funding": { + "url": "https://github.com/sindresorhus/is?sponsor=1" } }, - "node_modules/react-dom": { - "version": "18.3.1", - "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-18.3.1.tgz", - "integrity": "sha512-5m4nQKp+rZRb09LNH59GM4BxTh9251/ylbKIbpe7TpGxfJ+9kv6BLkLBXIjjspbgbnIBNqlI23tRnTWT0snUIw==", + "node_modules/remark-emoji/node_modules/@types/mdast": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/@types/mdast/-/mdast-4.0.4.tgz", + "integrity": "sha512-kGaNbPh1k7AFzgpud/gMdvIm5xuECykRR+JnWKQno9TAXVa6WIVCGTPvYGekIDL4uwCZQSYbUxNBSb1aUo79oA==", "license": "MIT", "dependencies": { - "loose-envify": "^1.1.0", - "scheduler": "^0.23.2" - }, - "peerDependencies": { - "react": "^18.3.1" + "@types/unist": "*" } }, - "node_modules/react-fast-compare": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/react-fast-compare/-/react-fast-compare-3.2.1.tgz", - "integrity": "sha512-xTYf9zFim2pEif/Fw16dBiXpe0hoy5PxcD8+OwBnTtNLfIm3g6WxhKNurY+6OmdH1u6Ta/W/Vl6vjbYP1MFnDg==", - "license": "MIT" - }, - "node_modules/react-focus-lock": { - "version": "2.13.6", - "resolved": "https://registry.npmjs.org/react-focus-lock/-/react-focus-lock-2.13.6.tgz", - "integrity": "sha512-ehylFFWyYtBKXjAO9+3v8d0i+cnc1trGS0vlTGhzFW1vbFXVUTmR8s2tt/ZQG8x5hElg6rhENlLG1H3EZK0Llg==", + "node_modules/remark-emoji/node_modules/bail": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/bail/-/bail-2.0.2.tgz", + "integrity": "sha512-0xO6mYd7JB2YesxDKplafRpsiOzPt9V02ddPCLbY1xYGPOX24NTyN50qnUxgCPcSoYMhKpAuBTjQoRZCAkUDRw==", "license": "MIT", - "dependencies": { - "@babel/runtime": "^7.0.0", - "focus-lock": "^1.3.6", - "prop-types": "^15.6.2", - "react-clientside-effect": "^1.2.7", - "use-callback-ref": "^1.3.3", - "use-sidecar": "^1.1.3" - }, - "peerDependencies": { - "@types/react": "*", - "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc" - }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - } + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" } }, - "node_modules/react-hook-form": { - "version": "7.41.5", - "resolved": "https://registry.npmjs.org/react-hook-form/-/react-hook-form-7.41.5.tgz", - "integrity": "sha512-DAKjSJ7X9f16oQrP3TW2/eD9N6HOgrmIahP4LOdFphEWVfGZ2LulFd6f6AQ/YS/0cx/5oc4j8a1PXxuaurWp/Q==", + "node_modules/remark-emoji/node_modules/is-plain-obj": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-4.1.0.tgz", + "integrity": "sha512-+Pgi+vMuUNkJyExiMBt5IlFoMyKnr5zhJ4Uspz58WOhBF5QoIZkFyNHIbBAtHwzVAgk5RtndVNsDRN61/mmDqg==", "license": "MIT", "engines": { - "node": ">=12.22.0" + "node": ">=12" }, "funding": { - "type": "opencollective", - "url": "https://opencollective.com/react-hook-form" - }, - "peerDependencies": { - "react": "^16.8.0 || ^17 || ^18" + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/react-i18next": { - "version": "13.2.0", - "resolved": "https://registry.npmjs.org/react-i18next/-/react-i18next-13.2.0.tgz", - "integrity": "sha512-YD8xMc+I0jkHHLotd8ERMzZ53hMaCBVLCndbcbBveJn3FbppRP4jyYOAkmR8XItN01sTD9ilAjoEjpH1i42IgA==", + "node_modules/remark-emoji/node_modules/node-emoji": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/node-emoji/-/node-emoji-2.2.0.tgz", + "integrity": "sha512-Z3lTE9pLaJF47NyMhd4ww1yFTAP8YhYI8SleJiHzM46Fgpm5cnNzSl9XfzFNqbaz+VlJrIj3fXQ4DeN1Rjm6cw==", "license": "MIT", "dependencies": { - "@babel/runtime": "^7.22.5", - "html-parse-stringify": "^3.0.1" - }, - "peerDependencies": { - "i18next": ">= 23.2.3", - "react": ">= 16.8.0" + "@sindresorhus/is": "^4.6.0", + "char-regex": "^1.0.2", + "emojilib": "^2.4.0", + "skin-tone": "^2.0.0" }, - "peerDependenciesMeta": { - "react-dom": { - "optional": true - }, - "react-native": { - "optional": true - } + "engines": { + "node": ">=18" } }, - "node_modules/react-is": { - "version": "17.0.2", - "resolved": "https://registry.npmjs.org/react-is/-/react-is-17.0.2.tgz", - "integrity": "sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w==", - "license": "MIT" + "node_modules/remark-emoji/node_modules/trough": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/trough/-/trough-2.2.0.tgz", + "integrity": "sha512-tmMpK00BjZiUyVyvrBK7knerNgmgvcV/KLVyuma/SC+TQN167GrMRciANTz09+k3zW8L8t60jWO1GpfkZdjTaw==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } }, - "node_modules/react-markdown": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/react-markdown/-/react-markdown-6.0.3.tgz", - "integrity": "sha512-kQbpWiMoBHnj9myLlmZG9T1JdoT/OEyHK7hqM6CqFT14MAkgWiWBUYijLyBmxbntaN6dCDicPcUhWhci1QYodg==", + "node_modules/remark-emoji/node_modules/unified": { + "version": "11.0.5", + "resolved": "https://registry.npmjs.org/unified/-/unified-11.0.5.tgz", + "integrity": "sha512-xKvGhPWw3k84Qjh8bI3ZeJjqnyadK+GEFtazSfZv/rKeTkTjOJho6mFqh2SM96iIcZokxiOpg78GazTSg8+KHA==", "license": "MIT", "dependencies": { - "@types/hast": "^2.0.0", - "@types/unist": "^2.0.3", - "comma-separated-tokens": "^1.0.0", - "prop-types": "^15.7.2", - "property-information": "^5.3.0", - "react-is": "^17.0.0", - "remark-parse": "^9.0.0", - "remark-rehype": "^8.0.0", - "space-separated-tokens": "^1.1.0", - "style-to-object": "^0.3.0", - "unified": "^9.0.0", - "unist-util-visit": "^2.0.0", - "vfile": "^4.0.0" + "@types/unist": "^3.0.0", + "bail": "^2.0.0", + "devlop": "^1.0.0", + "extend": "^3.0.0", + "is-plain-obj": "^4.0.0", + "trough": "^2.0.0", + "vfile": "^6.0.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/unified" - }, - "peerDependencies": { - "@types/react": ">=16", - "react": ">=16" } }, - "node_modules/react-markdown/node_modules/@types/hast": { - "version": "2.3.10", - "resolved": "https://registry.npmjs.org/@types/hast/-/hast-2.3.10.tgz", - "integrity": "sha512-McWspRw8xx8J9HurkVBfYj0xKoE25tOFlHGdx4MJ5xORQrMGZNqJhVQWaIbm6Oyla5kYOXtDiopzKRJzEOkwJw==", + "node_modules/remark-emoji/node_modules/unist-util-stringify-position": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-4.0.0.tgz", + "integrity": "sha512-0ASV06AAoKCDkS2+xw5RXJywruurpbC4JZSm7nr7MOt1ojAzvyyaO+UxZf18j8FCF6kmzCZKcAgN/yu2gm2XgQ==", "license": "MIT", "dependencies": { - "@types/unist": "^2" + "@types/unist": "^3.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/react-markdown/node_modules/@types/unist": { - "version": "2.0.11", - "resolved": "https://registry.npmjs.org/@types/unist/-/unist-2.0.11.tgz", - "integrity": "sha512-CmBKiL6NNo/OqgmMn95Fk9Whlp2mtvIv+KNpQKN2F4SjvrEesubTRWGYSg+BnWZOnlCaSTU1sMpsBOzgbYhnsA==", - "license": "MIT" - }, - "node_modules/react-number-format": { - "version": "5.1.4", - "resolved": "https://registry.npmjs.org/react-number-format/-/react-number-format-5.1.4.tgz", - "integrity": "sha512-QV7QHzHrk9ZS9V0bWkIwu6ywiXJt0www4/cXWEVEgwaNqthmOZl/Cf5O0ukEPlGZJJr06Jh3+CM4rZsvXn8cOg==", + "node_modules/remark-emoji/node_modules/vfile": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/vfile/-/vfile-6.0.3.tgz", + "integrity": "sha512-KzIbH/9tXat2u30jf+smMwFCsno4wHVdNmzFyL+T/L3UGqqk6JKfVqOFOZEpZSHADH1k40ab6NUIXZq422ov3Q==", "license": "MIT", "dependencies": { - "prop-types": "^15.7.2" + "@types/unist": "^3.0.0", + "vfile-message": "^4.0.0" }, - "peerDependencies": { - "react": "^0.14 || ^15.0.0 || ^16.0.0 || ^17.0.0 || ^18.0.0", - "react-dom": "^0.14 || ^15.0.0 || ^16.0.0 || ^17.0.0 || ^18.0.0" + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/react-refresh": { - "version": "0.17.0", - "resolved": "https://registry.npmjs.org/react-refresh/-/react-refresh-0.17.0.tgz", - "integrity": "sha512-z6F7K9bV85EfseRCp2bzrpyQ0Gkw1uLoCel9XBVWPg/TjRj94SkJzUTGfOa4bs7iJvBWtQG0Wq7wnI0syw3EBQ==", - "dev": true, + "node_modules/remark-emoji/node_modules/vfile-message": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/vfile-message/-/vfile-message-4.0.3.tgz", + "integrity": "sha512-QTHzsGd1EhbZs4AsQ20JX1rC3cOlt/IWJruk893DfLRr57lcnOeMaWG4K0JrRta4mIJZKth2Au3mM3u03/JWKw==", "license": "MIT", - "engines": { - "node": ">=0.10.0" + "dependencies": { + "@types/unist": "^3.0.0", + "unist-util-stringify-position": "^4.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/react-remove-scroll": { - "version": "2.7.1", - "resolved": "https://registry.npmjs.org/react-remove-scroll/-/react-remove-scroll-2.7.1.tgz", - "integrity": "sha512-HpMh8+oahmIdOuS5aFKKY6Pyog+FNaZV/XyJOq7b4YFwsFHe5yYfdbIalI4k3vU2nSDql7YskmUseHsRrJqIPA==", + "node_modules/remark-frontmatter": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/remark-frontmatter/-/remark-frontmatter-5.0.0.tgz", + "integrity": "sha512-XTFYvNASMe5iPN0719nPrdItC9aU0ssC4v14mH1BCi1u0n1gAocqcujWUrByftZTbLhRtiKRyjYTSIOcr69UVQ==", "license": "MIT", "dependencies": { - "react-remove-scroll-bar": "^2.3.7", - "react-style-singleton": "^2.2.3", - "tslib": "^2.1.0", - "use-callback-ref": "^1.3.3", - "use-sidecar": "^1.1.3" - }, - "engines": { - "node": ">=10" + "@types/mdast": "^4.0.0", + "mdast-util-frontmatter": "^2.0.0", + "micromark-extension-frontmatter": "^2.0.0", + "unified": "^11.0.0" }, - "peerDependencies": { - "@types/react": "*", - "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc" - }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - } + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/react-remove-scroll-bar": { - "version": "2.3.8", - "resolved": "https://registry.npmjs.org/react-remove-scroll-bar/-/react-remove-scroll-bar-2.3.8.tgz", - "integrity": "sha512-9r+yi9+mgU33AKcj6IbT9oRCO78WriSj6t/cF8DWBZJ9aOGPOTEDvdUDz1FwKim7QXWwmHqtdHnRJfhAxEG46Q==", + "node_modules/remark-frontmatter/node_modules/@types/mdast": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/@types/mdast/-/mdast-4.0.4.tgz", + "integrity": "sha512-kGaNbPh1k7AFzgpud/gMdvIm5xuECykRR+JnWKQno9TAXVa6WIVCGTPvYGekIDL4uwCZQSYbUxNBSb1aUo79oA==", "license": "MIT", "dependencies": { - "react-style-singleton": "^2.2.2", - "tslib": "^2.0.0" - }, - "engines": { - "node": ">=10" - }, - "peerDependencies": { - "@types/react": "*", - "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0" - }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - } + "@types/unist": "*" } }, - "node_modules/react-router": { - "version": "6.10.0", - "resolved": "https://registry.npmjs.org/react-router/-/react-router-6.10.0.tgz", - "integrity": "sha512-Nrg0BWpQqrC3ZFFkyewrflCud9dio9ME3ojHCF/WLsprJVzkq3q3UeEhMCAW1dobjeGbWgjNn/PVF6m46ANxXQ==", + "node_modules/remark-frontmatter/node_modules/bail": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/bail/-/bail-2.0.2.tgz", + "integrity": "sha512-0xO6mYd7JB2YesxDKplafRpsiOzPt9V02ddPCLbY1xYGPOX24NTyN50qnUxgCPcSoYMhKpAuBTjQoRZCAkUDRw==", "license": "MIT", - "dependencies": { - "@remix-run/router": "1.5.0" - }, - "engines": { - "node": ">=14" - }, - "peerDependencies": { - "react": ">=16.8" + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" } }, - "node_modules/react-router-dom": { - "version": "6.10.0", - "resolved": "https://registry.npmjs.org/react-router-dom/-/react-router-dom-6.10.0.tgz", - "integrity": "sha512-E5dfxRPuXKJqzwSe/qGcqdwa18QiWC6f3H3cWXM24qj4N0/beCIf/CWTipop2xm7mR0RCS99NnaqPNjHtrAzCg==", + "node_modules/remark-frontmatter/node_modules/is-plain-obj": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-4.1.0.tgz", + "integrity": "sha512-+Pgi+vMuUNkJyExiMBt5IlFoMyKnr5zhJ4Uspz58WOhBF5QoIZkFyNHIbBAtHwzVAgk5RtndVNsDRN61/mmDqg==", "license": "MIT", - "dependencies": { - "@remix-run/router": "1.5.0", - "react-router": "6.10.0" - }, "engines": { - "node": ">=14" + "node": ">=12" }, - "peerDependencies": { - "react": ">=16.8", - "react-dom": ">=16.8" + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/react-select": { - "version": "5.7.0", - "resolved": "https://registry.npmjs.org/react-select/-/react-select-5.7.0.tgz", - "integrity": "sha512-lJGiMxCa3cqnUr2Jjtg9YHsaytiZqeNOKeibv6WF5zbK/fPegZ1hg3y/9P1RZVLhqBTs0PfqQLKuAACednYGhQ==", + "node_modules/remark-frontmatter/node_modules/trough": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/trough/-/trough-2.2.0.tgz", + "integrity": "sha512-tmMpK00BjZiUyVyvrBK7knerNgmgvcV/KLVyuma/SC+TQN167GrMRciANTz09+k3zW8L8t60jWO1GpfkZdjTaw==", "license": "MIT", - "dependencies": { - "@babel/runtime": "^7.12.0", - "@emotion/cache": "^11.4.0", - "@emotion/react": "^11.8.1", - "@floating-ui/dom": "^1.0.1", - "@types/react-transition-group": "^4.4.0", - "memoize-one": "^6.0.0", - "prop-types": "^15.6.0", - "react-transition-group": "^4.3.0", - "use-isomorphic-layout-effect": "^1.1.2" - }, - "peerDependencies": { - "react": "^16.8.0 || ^17.0.0 || ^18.0.0", - "react-dom": "^16.8.0 || ^17.0.0 || ^18.0.0" + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" } }, - "node_modules/react-select-event": { - "version": "5.5.1", - "resolved": "https://registry.npmjs.org/react-select-event/-/react-select-event-5.5.1.tgz", - "integrity": "sha512-goAx28y0+iYrbqZA2FeRTreHHs/ZtSuKxtA+J5jpKT5RHPCbVZJ4MqACfPnWyFXsEec+3dP5bCrNTxIX8oYe9A==", - "dev": true, + "node_modules/remark-frontmatter/node_modules/unified": { + "version": "11.0.5", + "resolved": "https://registry.npmjs.org/unified/-/unified-11.0.5.tgz", + "integrity": "sha512-xKvGhPWw3k84Qjh8bI3ZeJjqnyadK+GEFtazSfZv/rKeTkTjOJho6mFqh2SM96iIcZokxiOpg78GazTSg8+KHA==", "license": "MIT", "dependencies": { - "@testing-library/dom": ">=7" + "@types/unist": "^3.0.0", + "bail": "^2.0.0", + "devlop": "^1.0.0", + "extend": "^3.0.0", + "is-plain-obj": "^4.0.0", + "trough": "^2.0.0", + "vfile": "^6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/react-style-singleton": { - "version": "2.2.3", - "resolved": "https://registry.npmjs.org/react-style-singleton/-/react-style-singleton-2.2.3.tgz", - "integrity": "sha512-b6jSvxvVnyptAiLjbkWLE/lOnR4lfTtDAl+eUC7RZy+QQWc6wRzIV2CE6xBuMmDxc2qIihtDCZD5NPOFl7fRBQ==", + "node_modules/remark-frontmatter/node_modules/unist-util-stringify-position": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-4.0.0.tgz", + "integrity": "sha512-0ASV06AAoKCDkS2+xw5RXJywruurpbC4JZSm7nr7MOt1ojAzvyyaO+UxZf18j8FCF6kmzCZKcAgN/yu2gm2XgQ==", "license": "MIT", "dependencies": { - "get-nonce": "^1.0.0", - "tslib": "^2.0.0" + "@types/unist": "^3.0.0" }, - "engines": { - "node": ">=10" - }, - "peerDependencies": { - "@types/react": "*", - "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc" - }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - } + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/react-transition-group": { - "version": "4.4.5", - "resolved": "https://registry.npmjs.org/react-transition-group/-/react-transition-group-4.4.5.tgz", - "integrity": "sha512-pZcd1MCJoiKiBR2NRxeCRg13uCXbydPnmB4EOeRrY7480qNWO8IIgQG6zlDkm6uRMsURXPuKq0GWtiM59a5Q6g==", - "license": "BSD-3-Clause", + "node_modules/remark-frontmatter/node_modules/vfile": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/vfile/-/vfile-6.0.3.tgz", + "integrity": "sha512-KzIbH/9tXat2u30jf+smMwFCsno4wHVdNmzFyL+T/L3UGqqk6JKfVqOFOZEpZSHADH1k40ab6NUIXZq422ov3Q==", + "license": "MIT", "dependencies": { - "@babel/runtime": "^7.5.5", - "dom-helpers": "^5.0.1", - "loose-envify": "^1.4.0", - "prop-types": "^15.6.2" + "@types/unist": "^3.0.0", + "vfile-message": "^4.0.0" }, - "peerDependencies": { - "react": ">=16.6.0", - "react-dom": ">=16.6.0" + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/read-pkg": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-3.0.0.tgz", - "integrity": "sha512-BLq/cCO9two+lBgiTYNqD6GdtK8s4NpaWrl6/rCO9w0TUS8oJl7cmToOZfRYllKTISY6nt1U7jQ53brmKqY6BA==", - "dev": true, + "node_modules/remark-frontmatter/node_modules/vfile-message": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/vfile-message/-/vfile-message-4.0.3.tgz", + "integrity": "sha512-QTHzsGd1EhbZs4AsQ20JX1rC3cOlt/IWJruk893DfLRr57lcnOeMaWG4K0JrRta4mIJZKth2Au3mM3u03/JWKw==", "license": "MIT", "dependencies": { - "load-json-file": "^4.0.0", - "normalize-package-data": "^2.3.2", - "path-type": "^3.0.0" + "@types/unist": "^3.0.0", + "unist-util-stringify-position": "^4.0.0" }, - "engines": { - "node": ">=4" + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/read-pkg/node_modules/path-type": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/path-type/-/path-type-3.0.0.tgz", - "integrity": "sha512-T2ZUsdZFHgA3u4e5PfPbjd7HDDpxPnQb5jN0SrDsjNSuVXHJqtwTnWqG0B1jZrgmJ/7lj1EmVIByWt1gxGkWvg==", - "dev": true, + "node_modules/remark-gfm": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/remark-gfm/-/remark-gfm-4.0.1.tgz", + "integrity": "sha512-1quofZ2RQ9EWdeN34S79+KExV1764+wCUGop5CPL1WGdD0ocPpu91lzPGbwWMECpEpd42kJGQwzRfyov9j4yNg==", "license": "MIT", "dependencies": { - "pify": "^3.0.0" + "@types/mdast": "^4.0.0", + "mdast-util-gfm": "^3.0.0", + "micromark-extension-gfm": "^3.0.0", + "remark-parse": "^11.0.0", + "remark-stringify": "^11.0.0", + "unified": "^11.0.0" }, - "engines": { - "node": ">=4" + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/read-yaml-file": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/read-yaml-file/-/read-yaml-file-1.1.0.tgz", - "integrity": "sha512-VIMnQi/Z4HT2Fxuwg5KrY174U1VdUIASQVWXXyqtNRtxSr9IYkn1rsI6Tb6HsrHCmB7gVpNwX6JxPTHcH6IoTA==", - "dev": true, + "node_modules/remark-gfm/node_modules/@types/mdast": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/@types/mdast/-/mdast-4.0.4.tgz", + "integrity": "sha512-kGaNbPh1k7AFzgpud/gMdvIm5xuECykRR+JnWKQno9TAXVa6WIVCGTPvYGekIDL4uwCZQSYbUxNBSb1aUo79oA==", "license": "MIT", "dependencies": { - "graceful-fs": "^4.1.5", - "js-yaml": "^3.6.1", - "pify": "^4.0.1", - "strip-bom": "^3.0.0" - }, - "engines": { - "node": ">=6" + "@types/unist": "*" } }, - "node_modules/read-yaml-file/node_modules/argparse": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", - "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", - "dev": true, + "node_modules/remark-gfm/node_modules/bail": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/bail/-/bail-2.0.2.tgz", + "integrity": "sha512-0xO6mYd7JB2YesxDKplafRpsiOzPt9V02ddPCLbY1xYGPOX24NTyN50qnUxgCPcSoYMhKpAuBTjQoRZCAkUDRw==", "license": "MIT", - "dependencies": { - "sprintf-js": "~1.0.2" + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/remark-gfm/node_modules/is-plain-obj": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-4.1.0.tgz", + "integrity": "sha512-+Pgi+vMuUNkJyExiMBt5IlFoMyKnr5zhJ4Uspz58WOhBF5QoIZkFyNHIbBAtHwzVAgk5RtndVNsDRN61/mmDqg==", + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/read-yaml-file/node_modules/js-yaml": { - "version": "3.14.1", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", - "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", - "dev": true, + "node_modules/remark-gfm/node_modules/mdast-util-from-markdown": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/mdast-util-from-markdown/-/mdast-util-from-markdown-2.0.2.tgz", + "integrity": "sha512-uZhTV/8NBuw0WHkPTrCqDOl0zVe1BIng5ZtHoDk49ME1qqcjYmmLmOf0gELgcRMxN4w2iuIeVso5/6QymSrgmA==", "license": "MIT", "dependencies": { - "argparse": "^1.0.7", - "esprima": "^4.0.0" + "@types/mdast": "^4.0.0", + "@types/unist": "^3.0.0", + "decode-named-character-reference": "^1.0.0", + "devlop": "^1.0.0", + "mdast-util-to-string": "^4.0.0", + "micromark": "^4.0.0", + "micromark-util-decode-numeric-character-reference": "^2.0.0", + "micromark-util-decode-string": "^2.0.0", + "micromark-util-normalize-identifier": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0", + "unist-util-stringify-position": "^4.0.0" }, - "bin": { - "js-yaml": "bin/js-yaml.js" + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/read-yaml-file/node_modules/pify": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz", - "integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==", - "dev": true, + "node_modules/remark-gfm/node_modules/mdast-util-to-string": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/mdast-util-to-string/-/mdast-util-to-string-4.0.0.tgz", + "integrity": "sha512-0H44vDimn51F0YwvxSJSm0eCDOJTRlmN0R1yBh4HLj9wiV1Dn0QoXGbvFAWj2hSItVTlCmBF1hqKlIyUBVFLPg==", "license": "MIT", - "engines": { - "node": ">=6" + "dependencies": { + "@types/mdast": "^4.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/read-yaml-file/node_modules/strip-bom": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", - "integrity": "sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==", - "dev": true, + "node_modules/remark-gfm/node_modules/micromark": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/micromark/-/micromark-4.0.2.tgz", + "integrity": "sha512-zpe98Q6kvavpCr1NPVSCMebCKfD7CA2NqZ+rykeNhONIJBpc1tFKt9hucLGwha3jNTNI8lHpctWJWoimVF4PfA==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], "license": "MIT", - "engines": { - "node": ">=4" + "dependencies": { + "@types/debug": "^4.0.0", + "debug": "^4.0.0", + "decode-named-character-reference": "^1.0.0", + "devlop": "^1.0.0", + "micromark-core-commonmark": "^2.0.0", + "micromark-factory-space": "^2.0.0", + "micromark-util-character": "^2.0.0", + "micromark-util-chunked": "^2.0.0", + "micromark-util-combine-extensions": "^2.0.0", + "micromark-util-decode-numeric-character-reference": "^2.0.0", + "micromark-util-encode": "^2.0.0", + "micromark-util-normalize-identifier": "^2.0.0", + "micromark-util-resolve-all": "^2.0.0", + "micromark-util-sanitize-uri": "^2.0.0", + "micromark-util-subtokenize": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/remark-gfm/node_modules/micromark-factory-space": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-factory-space/-/micromark-factory-space-2.0.1.tgz", + "integrity": "sha512-zRkxjtBxxLd2Sc0d+fbnEunsTj46SWXgXciZmHq0kDYGnck/ZSGj9/wULTV95uoeYiK5hRXP2mJ98Uo4cq/LQg==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "micromark-util-character": "^2.0.0", + "micromark-util-types": "^2.0.0" } }, - "node_modules/readable-stream": { - "version": "2.3.8", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", - "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", + "node_modules/remark-gfm/node_modules/micromark-util-character": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/micromark-util-character/-/micromark-util-character-2.1.1.tgz", + "integrity": "sha512-wv8tdUTJ3thSFFFJKtpYKOYiGP2+v96Hvk4Tu8KpCAsTMs6yi+nVmGh1syvSCsaxz45J6Jbw+9DD6g97+NV67Q==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], "license": "MIT", "dependencies": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" } }, - "node_modules/readable-stream/node_modules/isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", + "node_modules/remark-gfm/node_modules/micromark-util-symbol": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-util-symbol/-/micromark-util-symbol-2.0.1.tgz", + "integrity": "sha512-vs5t8Apaud9N28kgCrRUdEed4UJ+wWNvicHLPxCa9ENlYuAY31M0ETy5y1vA33YoNPDFTghEbnh6efaE8h4x0Q==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], "license": "MIT" }, - "node_modules/readable-stream/node_modules/safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "node_modules/remark-gfm/node_modules/micromark-util-types": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/micromark-util-types/-/micromark-util-types-2.0.2.tgz", + "integrity": "sha512-Yw0ECSpJoViF1qTU4DC6NwtC4aWGt1EkzaQB8KPPyCRR8z9TWeV0HbEFGTO+ZY1wB22zmxnJqhPyTpOVCpeHTA==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], "license": "MIT" }, - "node_modules/readdir-glob": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/readdir-glob/-/readdir-glob-1.1.3.tgz", - "integrity": "sha512-v05I2k7xN8zXvPD9N+z/uhXPaj0sUFCe2rcWZIpBsqxfP7xXFQ0tipAd/wjj1YxWyWtUS5IDJpOG82JKt2EAVA==", - "dev": true, - "license": "Apache-2.0", + "node_modules/remark-gfm/node_modules/remark-parse": { + "version": "11.0.0", + "resolved": "https://registry.npmjs.org/remark-parse/-/remark-parse-11.0.0.tgz", + "integrity": "sha512-FCxlKLNGknS5ba/1lmpYijMUzX2esxW5xQqjWxw2eHFfS2MSdaHVINFmhjo+qN1WhZhNimq0dZATN9pH0IDrpA==", + "license": "MIT", "dependencies": { - "minimatch": "^5.1.0" + "@types/mdast": "^4.0.0", + "mdast-util-from-markdown": "^2.0.0", + "micromark-util-types": "^2.0.0", + "unified": "^11.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/readdir-glob/node_modules/brace-expansion": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.2.tgz", - "integrity": "sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==", - "dev": true, + "node_modules/remark-gfm/node_modules/trough": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/trough/-/trough-2.2.0.tgz", + "integrity": "sha512-tmMpK00BjZiUyVyvrBK7knerNgmgvcV/KLVyuma/SC+TQN167GrMRciANTz09+k3zW8L8t60jWO1GpfkZdjTaw==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/remark-gfm/node_modules/unified": { + "version": "11.0.5", + "resolved": "https://registry.npmjs.org/unified/-/unified-11.0.5.tgz", + "integrity": "sha512-xKvGhPWw3k84Qjh8bI3ZeJjqnyadK+GEFtazSfZv/rKeTkTjOJho6mFqh2SM96iIcZokxiOpg78GazTSg8+KHA==", "license": "MIT", "dependencies": { - "balanced-match": "^1.0.0" + "@types/unist": "^3.0.0", + "bail": "^2.0.0", + "devlop": "^1.0.0", + "extend": "^3.0.0", + "is-plain-obj": "^4.0.0", + "trough": "^2.0.0", + "vfile": "^6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/readdir-glob/node_modules/minimatch": { - "version": "5.1.6", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.6.tgz", - "integrity": "sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==", - "dev": true, - "license": "ISC", + "node_modules/remark-gfm/node_modules/unist-util-stringify-position": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-4.0.0.tgz", + "integrity": "sha512-0ASV06AAoKCDkS2+xw5RXJywruurpbC4JZSm7nr7MOt1ojAzvyyaO+UxZf18j8FCF6kmzCZKcAgN/yu2gm2XgQ==", + "license": "MIT", "dependencies": { - "brace-expansion": "^2.0.1" + "@types/unist": "^3.0.0" }, - "engines": { - "node": ">=10" + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/readdirp": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", - "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", + "node_modules/remark-gfm/node_modules/vfile": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/vfile/-/vfile-6.0.3.tgz", + "integrity": "sha512-KzIbH/9tXat2u30jf+smMwFCsno4wHVdNmzFyL+T/L3UGqqk6JKfVqOFOZEpZSHADH1k40ab6NUIXZq422ov3Q==", "license": "MIT", "dependencies": { - "picomatch": "^2.2.1" + "@types/unist": "^3.0.0", + "vfile-message": "^4.0.0" }, - "engines": { - "node": ">=8.10.0" + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/readdirp/node_modules/picomatch": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", - "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "node_modules/remark-gfm/node_modules/vfile-message": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/vfile-message/-/vfile-message-4.0.3.tgz", + "integrity": "sha512-QTHzsGd1EhbZs4AsQ20JX1rC3cOlt/IWJruk893DfLRr57lcnOeMaWG4K0JrRta4mIJZKth2Au3mM3u03/JWKw==", "license": "MIT", - "engines": { - "node": ">=8.6" + "dependencies": { + "@types/unist": "^3.0.0", + "unist-util-stringify-position": "^4.0.0" }, "funding": { - "url": "https://github.com/sponsors/jonschlinkert" + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/real-require": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/real-require/-/real-require-0.2.0.tgz", - "integrity": "sha512-57frrGM/OCTLqLOAh0mhVA9VBMHd+9U7Zb2THMGdBUoZVOtGbJzjxsYGDJ3A9AYYCP4hn6y1TVbaOfzWtm5GFg==", + "node_modules/remark-mdx": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/remark-mdx/-/remark-mdx-3.1.1.tgz", + "integrity": "sha512-Pjj2IYlUY3+D8x00UJsIOg5BEvfMyeI+2uLPn9VO9Wg4MEtN/VTIq2NEJQfde9PnX15KgtHyl9S0BcTnWrIuWg==", "license": "MIT", - "engines": { - "node": ">= 12.13.0" + "dependencies": { + "mdast-util-mdx": "^3.0.0", + "micromark-extension-mdxjs": "^3.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/rechoir": { - "version": "0.6.2", - "resolved": "https://registry.npmjs.org/rechoir/-/rechoir-0.6.2.tgz", - "integrity": "sha512-HFM8rkZ+i3zrV+4LQjwQ0W+ez98pApMGM3HUrN04j3CqzPOzl9nmP15Y8YXNm8QHGv/eacOVEjqhmWpkRV0NAw==", + "node_modules/remark-parse": { + "version": "9.0.0", + "resolved": "https://registry.npmjs.org/remark-parse/-/remark-parse-9.0.0.tgz", + "integrity": "sha512-geKatMwSzEXKHuzBNU1z676sGcDcFoChMK38TgdHJNAYfFtsfHDQG7MoJAjs6sgYMqyLduCYWDIWZIxiPeafEw==", + "license": "MIT", "dependencies": { - "resolve": "^1.1.6" + "mdast-util-from-markdown": "^0.8.0" }, - "engines": { - "node": ">= 0.10" + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/recursive-readdir": { - "version": "2.2.3", - "resolved": "https://registry.npmjs.org/recursive-readdir/-/recursive-readdir-2.2.3.tgz", - "integrity": "sha512-8HrF5ZsXk5FAH9dgsx3BlUer73nIhuj+9OrQwEbLTPOBzGkL1lsFCR01am+v+0m2Cmbs1nP12hLDl5FA7EszKA==", - "dev": true, + "node_modules/remark-rehype": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/remark-rehype/-/remark-rehype-8.1.0.tgz", + "integrity": "sha512-EbCu9kHgAxKmW1yEYjx3QafMyGY3q8noUbNUI5xyKbaFP89wbhDrKxyIQNukNYthzjNHZu6J7hwFg7hRm1svYA==", "license": "MIT", "dependencies": { - "minimatch": "^3.0.5" + "mdast-util-to-hast": "^10.2.0" }, - "engines": { - "node": ">=6.0.0" + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/redent": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/redent/-/redent-3.0.0.tgz", - "integrity": "sha512-6tDA8g98We0zd0GvVeMT9arEOnTw9qM03L9cJXaCjrip1OO764RDBLBfrB4cwzNGDj5OA5ioymC9GkizgWJDUg==", - "dev": true, + "node_modules/remark-stringify": { + "version": "11.0.0", + "resolved": "https://registry.npmjs.org/remark-stringify/-/remark-stringify-11.0.0.tgz", + "integrity": "sha512-1OSmLd3awB/t8qdoEOMazZkNsfVTeY4fTsgzcQFdXNq8ToTN4ZGwrMnlda4K6smTFKD+GRV6O48i6Z4iKgPPpw==", "license": "MIT", "dependencies": { - "indent-string": "^4.0.0", - "strip-indent": "^3.0.0" + "@types/mdast": "^4.0.0", + "mdast-util-to-markdown": "^2.0.0", + "unified": "^11.0.0" }, - "engines": { - "node": ">=8" + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/reduce-flatten": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/reduce-flatten/-/reduce-flatten-2.0.0.tgz", - "integrity": "sha512-EJ4UNY/U1t2P/2k6oqotuX2Cc3T6nxJwsM0N0asT7dhrtH1ltUxDn4NalSYmPE2rCkVpcf/X6R0wDwcFpzhd4w==", - "devOptional": true, + "node_modules/remark-stringify/node_modules/@types/mdast": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/@types/mdast/-/mdast-4.0.4.tgz", + "integrity": "sha512-kGaNbPh1k7AFzgpud/gMdvIm5xuECykRR+JnWKQno9TAXVa6WIVCGTPvYGekIDL4uwCZQSYbUxNBSb1aUo79oA==", "license": "MIT", - "engines": { - "node": ">=6" + "dependencies": { + "@types/unist": "*" } }, - "node_modules/reflect-metadata": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/reflect-metadata/-/reflect-metadata-0.2.2.tgz", - "integrity": "sha512-urBwgfrvVP/eAyXx4hluJivBKzuEbSQs9rKWCrCkbSxNv8mxPcUZKeuoF3Uy4mJl3Lwprp6yy5/39VWigZ4K6Q==", - "license": "Apache-2.0" + "node_modules/remark-stringify/node_modules/bail": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/bail/-/bail-2.0.2.tgz", + "integrity": "sha512-0xO6mYd7JB2YesxDKplafRpsiOzPt9V02ddPCLbY1xYGPOX24NTyN50qnUxgCPcSoYMhKpAuBTjQoRZCAkUDRw==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } }, - "node_modules/reflect.getprototypeof": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/reflect.getprototypeof/-/reflect.getprototypeof-1.0.10.tgz", - "integrity": "sha512-00o4I+DVrefhv+nX0ulyi3biSHCPDe+yLv5o/p6d/UVlirijB8E16FtfwSAi4g3tcqrQ4lRAqQSoFEZJehYEcw==", - "dev": true, + "node_modules/remark-stringify/node_modules/is-plain-obj": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-4.1.0.tgz", + "integrity": "sha512-+Pgi+vMuUNkJyExiMBt5IlFoMyKnr5zhJ4Uspz58WOhBF5QoIZkFyNHIbBAtHwzVAgk5RtndVNsDRN61/mmDqg==", "license": "MIT", - "dependencies": { - "call-bind": "^1.0.8", - "define-properties": "^1.2.1", - "es-abstract": "^1.23.9", - "es-errors": "^1.3.0", - "es-object-atoms": "^1.0.0", - "get-intrinsic": "^1.2.7", - "get-proto": "^1.0.1", - "which-builtin-type": "^1.2.1" - }, "engines": { - "node": ">= 0.4" + "node": ">=12" }, "funding": { - "url": "https://github.com/sponsors/ljharb" + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/regenerate": { - "version": "1.4.2", - "resolved": "https://registry.npmjs.org/regenerate/-/regenerate-1.4.2.tgz", - "integrity": "sha512-zrceR/XhGYU/d/opr2EKO7aRHUeiBI8qjtfHqADTwZd6Szfy16la6kqD0MIUs5z5hx6AaKa+PixpPrR289+I0A==", - "dev": true, - "license": "MIT" + "node_modules/remark-stringify/node_modules/trough": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/trough/-/trough-2.2.0.tgz", + "integrity": "sha512-tmMpK00BjZiUyVyvrBK7knerNgmgvcV/KLVyuma/SC+TQN167GrMRciANTz09+k3zW8L8t60jWO1GpfkZdjTaw==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } }, - "node_modules/regenerate-unicode-properties": { - "version": "10.2.2", - "resolved": "https://registry.npmjs.org/regenerate-unicode-properties/-/regenerate-unicode-properties-10.2.2.tgz", - "integrity": "sha512-m03P+zhBeQd1RGnYxrGyDAPpWX/epKirLrp8e3qevZdVkKtnCrjjWczIbYc8+xd6vcTStVlqfycTx1KR4LOr0g==", - "dev": true, + "node_modules/remark-stringify/node_modules/unified": { + "version": "11.0.5", + "resolved": "https://registry.npmjs.org/unified/-/unified-11.0.5.tgz", + "integrity": "sha512-xKvGhPWw3k84Qjh8bI3ZeJjqnyadK+GEFtazSfZv/rKeTkTjOJho6mFqh2SM96iIcZokxiOpg78GazTSg8+KHA==", "license": "MIT", "dependencies": { - "regenerate": "^1.4.2" + "@types/unist": "^3.0.0", + "bail": "^2.0.0", + "devlop": "^1.0.0", + "extend": "^3.0.0", + "is-plain-obj": "^4.0.0", + "trough": "^2.0.0", + "vfile": "^6.0.0" }, - "engines": { - "node": ">=4" + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/regenerator-runtime": { - "version": "0.13.11", - "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.11.tgz", - "integrity": "sha512-kY1AZVr2Ra+t+piVaJ4gxaFaReZVH40AKNo7UCX6W+dEwBo/2oZJzqfuN1qLq1oL45o56cPaTXELwrTh8Fpggg==", + "node_modules/remark-stringify/node_modules/unist-util-stringify-position": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-4.0.0.tgz", + "integrity": "sha512-0ASV06AAoKCDkS2+xw5RXJywruurpbC4JZSm7nr7MOt1ojAzvyyaO+UxZf18j8FCF6kmzCZKcAgN/yu2gm2XgQ==", "license": "MIT", - "peer": true + "dependencies": { + "@types/unist": "^3.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } }, - "node_modules/regexp.prototype.flags": { - "version": "1.5.4", - "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.5.4.tgz", - "integrity": "sha512-dYqgNSZbDwkaJ2ceRd9ojCGjBq+mOm9LmtXnAnEGyHhN/5R7iDW2TRw3h+o/jCFxus3P2LfWIIiwowAjANm7IA==", - "dev": true, + "node_modules/remark-stringify/node_modules/vfile": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/vfile/-/vfile-6.0.3.tgz", + "integrity": "sha512-KzIbH/9tXat2u30jf+smMwFCsno4wHVdNmzFyL+T/L3UGqqk6JKfVqOFOZEpZSHADH1k40ab6NUIXZq422ov3Q==", "license": "MIT", "dependencies": { - "call-bind": "^1.0.8", - "define-properties": "^1.2.1", - "es-errors": "^1.3.0", - "get-proto": "^1.0.1", - "gopd": "^1.2.0", - "set-function-name": "^2.0.2" - }, - "engines": { - "node": ">= 0.4" + "@types/unist": "^3.0.0", + "vfile-message": "^4.0.0" }, "funding": { - "url": "https://github.com/sponsors/ljharb" + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/regexpu-core": { - "version": "6.4.0", - "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-6.4.0.tgz", - "integrity": "sha512-0ghuzq67LI9bLXpOX/ISfve/Mq33a4aFRzoQYhnnok1JOFpmE/A2TBGkNVenOGEeSBCjIiWcc6MVOG5HEQv0sA==", - "dev": true, + "node_modules/remark-stringify/node_modules/vfile-message": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/vfile-message/-/vfile-message-4.0.3.tgz", + "integrity": "sha512-QTHzsGd1EhbZs4AsQ20JX1rC3cOlt/IWJruk893DfLRr57lcnOeMaWG4K0JrRta4mIJZKth2Au3mM3u03/JWKw==", "license": "MIT", "dependencies": { - "regenerate": "^1.4.2", - "regenerate-unicode-properties": "^10.2.2", - "regjsgen": "^0.8.0", - "regjsparser": "^0.13.0", - "unicode-match-property-ecmascript": "^2.0.0", - "unicode-match-property-value-ecmascript": "^2.2.1" + "@types/unist": "^3.0.0", + "unist-util-stringify-position": "^4.0.0" }, - "engines": { - "node": ">=4" + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/registry-auth-token": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/registry-auth-token/-/registry-auth-token-5.1.0.tgz", - "integrity": "sha512-GdekYuwLXLxMuFTwAPg5UKGLW/UXzQrZvH/Zj791BQif5T05T0RsaLfHc9q3ZOKi7n+BoprPD9mJ0O0k4xzUlw==", - "dev": true, + "node_modules/renderkid": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/renderkid/-/renderkid-3.0.0.tgz", + "integrity": "sha512-q/7VIQA8lmM1hF+jn+sFSPWGlMkSAeNYcPLmDQx2zzuiDfaLrOmumR8iaUKlenFgh0XRPIUeSPlH3A+AW3Z5pg==", "license": "MIT", "dependencies": { - "@pnpm/npm-conf": "^2.1.0" + "css-select": "^4.1.3", + "dom-converter": "^0.2.0", + "htmlparser2": "^6.1.0", + "lodash": "^4.17.21", + "strip-ansi": "^6.0.1" + } + }, + "node_modules/renderkid/node_modules/css-select": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/css-select/-/css-select-4.3.0.tgz", + "integrity": "sha512-wPpOYtnsVontu2mODhA19JrqWxNsfdatRKd64kmpRbQgh1KtItko5sTnEpPdpSaJszTOhEMlF/RPz28qj4HqhQ==", + "license": "BSD-2-Clause", + "dependencies": { + "boolbase": "^1.0.0", + "css-what": "^6.0.1", + "domhandler": "^4.3.1", + "domutils": "^2.8.0", + "nth-check": "^2.0.1" }, - "engines": { - "node": ">=14" + "funding": { + "url": "https://github.com/sponsors/fb55" } }, - "node_modules/registry-url": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/registry-url/-/registry-url-6.0.1.tgz", - "integrity": "sha512-+crtS5QjFRqFCoQmvGduwYWEBng99ZvmFvF+cUJkGYF1L1BfU8C6Zp9T7f5vPAwyLkUExpvK+ANVZmGU49qi4Q==", - "dev": true, + "node_modules/renderkid/node_modules/dom-serializer": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-1.4.1.tgz", + "integrity": "sha512-VHwB3KfrcOOkelEG2ZOfxqLZdfkil8PtJi4P8N2MMXucZq2yLp75ClViUlOVwyoHEDjYU433Aq+5zWP61+RGag==", "license": "MIT", "dependencies": { - "rc": "1.2.8" - }, - "engines": { - "node": ">=12" + "domelementtype": "^2.0.1", + "domhandler": "^4.2.0", + "entities": "^2.0.0" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "url": "https://github.com/cheeriojs/dom-serializer?sponsor=1" } }, - "node_modules/regjsgen": { - "version": "0.8.0", - "resolved": "https://registry.npmjs.org/regjsgen/-/regjsgen-0.8.0.tgz", - "integrity": "sha512-RvwtGe3d7LvWiDQXeQw8p5asZUmfU1G/l6WbUXeHta7Y2PEIvBTwH6E2EfmYUK8pxcxEdEmaomqyp0vZZ7C+3Q==", - "dev": true, - "license": "MIT" - }, - "node_modules/regjsparser": { - "version": "0.13.0", - "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.13.0.tgz", - "integrity": "sha512-NZQZdC5wOE/H3UT28fVGL+ikOZcEzfMGk/c3iN9UGxzWHMa1op7274oyiUVrAG4B2EuFhus8SvkaYnhvW92p9Q==", - "dev": true, + "node_modules/renderkid/node_modules/domhandler": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-4.3.1.tgz", + "integrity": "sha512-GrwoxYN+uWlzO8uhUXRl0P+kHE4GtVPfYzVLcUxPL7KNdHKj66vvlhiweIHqYYXWlw+T8iLMp42Lm67ghw4WMQ==", "license": "BSD-2-Clause", "dependencies": { - "jsesc": "~3.1.0" + "domelementtype": "^2.2.0" }, - "bin": { - "regjsparser": "bin/parser" + "engines": { + "node": ">= 4" + }, + "funding": { + "url": "https://github.com/fb55/domhandler?sponsor=1" } }, - "node_modules/remark-parse": { - "version": "9.0.0", - "resolved": "https://registry.npmjs.org/remark-parse/-/remark-parse-9.0.0.tgz", - "integrity": "sha512-geKatMwSzEXKHuzBNU1z676sGcDcFoChMK38TgdHJNAYfFtsfHDQG7MoJAjs6sgYMqyLduCYWDIWZIxiPeafEw==", - "license": "MIT", + "node_modules/renderkid/node_modules/domutils": { + "version": "2.8.0", + "resolved": "https://registry.npmjs.org/domutils/-/domutils-2.8.0.tgz", + "integrity": "sha512-w96Cjofp72M5IIhpjgobBimYEfoPjx1Vx0BSX9P30WBdZW2WIKU0T1Bd0kz2eNZ9ikjKgHbEyKx8BB6H1L3h3A==", + "license": "BSD-2-Clause", "dependencies": { - "mdast-util-from-markdown": "^0.8.0" + "dom-serializer": "^1.0.1", + "domelementtype": "^2.2.0", + "domhandler": "^4.2.0" }, "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" + "url": "https://github.com/fb55/domutils?sponsor=1" } }, - "node_modules/remark-rehype": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/remark-rehype/-/remark-rehype-8.1.0.tgz", - "integrity": "sha512-EbCu9kHgAxKmW1yEYjx3QafMyGY3q8noUbNUI5xyKbaFP89wbhDrKxyIQNukNYthzjNHZu6J7hwFg7hRm1svYA==", + "node_modules/renderkid/node_modules/entities": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/entities/-/entities-2.2.0.tgz", + "integrity": "sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A==", + "license": "BSD-2-Clause", + "funding": { + "url": "https://github.com/fb55/entities?sponsor=1" + } + }, + "node_modules/renderkid/node_modules/htmlparser2": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-6.1.0.tgz", + "integrity": "sha512-gyyPk6rgonLFEDGoeRgQNaEUvdJ4ktTmmUh/h2t7s+M8oPpIPxgNACWa+6ESR57kXstwqPiCut0V8NRpcwgU7A==", + "funding": [ + "https://github.com/fb55/htmlparser2?sponsor=1", + { + "type": "github", + "url": "https://github.com/sponsors/fb55" + } + ], "license": "MIT", "dependencies": { - "mdast-util-to-hast": "^10.2.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" + "domelementtype": "^2.0.1", + "domhandler": "^4.0.0", + "domutils": "^2.5.2", + "entities": "^2.0.0" } }, "node_modules/repeat-string": { @@ -38524,6 +56509,14 @@ "node": ">=0.10.0" } }, + "node_modules/require-like": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/require-like/-/require-like-0.1.2.tgz", + "integrity": "sha512-oyrU88skkMtDdauHDuKVrgR+zuItqr6/c//FXzvmxRGMexSDc6hNvJInGW3LL46n+8b50RykrvwSUIIQH2LQ5A==", + "engines": { + "node": "*" + } + }, "node_modules/require-main-filename": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-2.0.0.tgz", @@ -38544,7 +56537,6 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz", "integrity": "sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ==", - "dev": true, "license": "MIT" }, "node_modules/resolve": { @@ -38571,7 +56563,6 @@ "version": "1.2.1", "resolved": "https://registry.npmjs.org/resolve-alpn/-/resolve-alpn-1.2.1.tgz", "integrity": "sha512-0a1F4l73/ZFZOakJnQ3FvkJ2+gSTQWz/r2KE5OdDY0TxPm5h4GkqkWWfM47T7HsbnOtcJVEF4epCVy6u7Q3K+g==", - "dev": true, "license": "MIT" }, "node_modules/resolve-cwd": { @@ -38596,6 +56587,12 @@ "node": ">=8" } }, + "node_modules/resolve-pathname": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/resolve-pathname/-/resolve-pathname-3.0.0.tgz", + "integrity": "sha512-C7rARubxI8bXFNB/hqcp/4iUeIXJhJZvFPFPiSPRnhU5UPxzMFIl+2E6yY6c4k9giDJAhtV+enfA+G89N6Csng==", + "license": "MIT" + }, "node_modules/resolve-pkg-maps": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/resolve-pkg-maps/-/resolve-pkg-maps-1.0.0.tgz", @@ -38620,7 +56617,6 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/responselike/-/responselike-3.0.0.tgz", "integrity": "sha512-40yHxbNcl2+rzXvZuVkrYohathsSJlMTXKryG5y8uciHv1+xDLHQpgjG64JUO9nrEq2jGLH6IZ8BcZyw3wrweg==", - "dev": true, "license": "MIT", "dependencies": { "lowercase-keys": "^3.0.0" @@ -38655,7 +56651,6 @@ "version": "0.13.1", "resolved": "https://registry.npmjs.org/retry/-/retry-0.13.1.tgz", "integrity": "sha512-XQBQ3I8W1Cge0Seh+6gjj03LbmRFWuoszgK9ooCpwYIrhhoO80pfq4cUkU5DkknwfOfFteRwlZ56PYOGYyFWdg==", - "dev": true, "license": "MIT", "engines": { "node": ">= 4" @@ -38665,7 +56660,6 @@ "version": "1.1.0", "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.1.0.tgz", "integrity": "sha512-g6QUff04oZpHs0eG5p83rFLhHeV00ug/Yf9nZM6fLeUrPguBTkTQOdpAWWspMh55TZfVQDPaN3NQJfbVRAxdIw==", - "dev": true, "license": "MIT", "engines": { "iojs": ">=1.0.0", @@ -38730,12 +56724,19 @@ "rlp": "bin/rlp" } }, + "node_modules/robust-predicates": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/robust-predicates/-/robust-predicates-3.0.2.tgz", + "integrity": "sha512-IXgzBWvWQwE6PrDI05OvmXUIruQTcoMDzRsOd5CDvHCVLcLHMTSYvOK5Cm46kWqlV3yAbuSpBZdJ5oP5OUoStg==", + "license": "Unlicense" + }, "node_modules/rollup": { "version": "4.52.3", "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.52.3.tgz", "integrity": "sha512-RIDh866U8agLgiIcdpB+COKnlCreHJLfIhWC3LVflku5YHfpnsIKigRZeFfMfCc4dVcqNVfQQ5gO/afOck064A==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "@types/estree": "1.0.8" }, @@ -38829,12 +56830,23 @@ "dev": true, "license": "MIT" }, + "node_modules/roughjs": { + "version": "4.6.6", + "resolved": "https://registry.npmjs.org/roughjs/-/roughjs-4.6.6.tgz", + "integrity": "sha512-ZUz/69+SYpFN/g/lUlo2FXcIjRkSu3nDarreVdGGndHEBJ6cXPdKguS8JGxwj5HA5xIbVKSmLgr5b3AWxtRfvQ==", + "license": "MIT", + "dependencies": { + "hachure-fill": "^0.5.2", + "path-data-parser": "^0.1.0", + "points-on-curve": "^0.2.0", + "points-on-path": "^0.2.1" + } + }, "node_modules/router": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/router/-/router-2.2.0.tgz", "integrity": "sha512-nLTrUKm2UyiL7rlhapu/Zl45FwNgkZGaCpZbIHajDYgwlJCOzLSk+cIPAnsEqV955GjILJnKbdQC1nVPz+gAYQ==", "license": "MIT", - "peer": true, "dependencies": { "debug": "^4.4.0", "depd": "^2.0.0", @@ -38851,7 +56863,6 @@ "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-8.3.0.tgz", "integrity": "sha512-7jdwVIRtsP8MYpdXSwOS0YdD0Du+qOoF/AEPIt88PcCFrZCzx41oxku1jD88hZBwbNUIEfpqvuhjFaMAqMTWnA==", "license": "MIT", - "peer": true, "funding": { "type": "opencollective", "url": "https://opencollective.com/express" @@ -38864,6 +56875,36 @@ "dev": true, "license": "MIT" }, + "node_modules/rtlcss": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/rtlcss/-/rtlcss-4.3.0.tgz", + "integrity": "sha512-FI+pHEn7Wc4NqKXMXFM+VAYKEj/mRIcW4h24YVwVtyjI+EqGrLc2Hx/Ny0lrZ21cBWU2goLy36eqMcNj3AQJig==", + "license": "MIT", + "dependencies": { + "escalade": "^3.1.1", + "picocolors": "^1.0.0", + "postcss": "^8.4.21", + "strip-json-comments": "^3.1.1" + }, + "bin": { + "rtlcss": "bin/rtlcss.js" + }, + "engines": { + "node": ">=12.0.0" + } + }, + "node_modules/run-applescript": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/run-applescript/-/run-applescript-7.1.0.tgz", + "integrity": "sha512-DPe5pVFaAsinSaV6QjQ6gdiedWDcRCbUuiQfQa2wmWV7+xC9bGulGI8+TdRmoFkAPaBXk8CrAbnlY2ISniJ47Q==", + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/run-async": { "version": "2.4.1", "resolved": "https://registry.npmjs.org/run-async/-/run-async-2.4.1.tgz", @@ -38877,7 +56918,6 @@ "version": "1.2.0", "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", - "dev": true, "funding": [ { "type": "github", @@ -38897,11 +56937,18 @@ "queue-microtask": "^1.2.2" } }, + "node_modules/rw": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/rw/-/rw-1.3.3.tgz", + "integrity": "sha512-PdhdWy89SiZogBLaw42zdeqtRJ//zFd2PgQavcICDUgJT5oW10QCRKbJ6bg4r0/UY2M6BWd5tkxuGFRvCkgfHQ==", + "license": "BSD-3-Clause" + }, "node_modules/rxjs": { "version": "7.8.2", "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-7.8.2.tgz", "integrity": "sha512-dhKf903U/PQZY6boNNtAGdWbG85WAbjT/1xYoZIC7FAY0yWapOBQVsVrDl58W86//e1VpMNBtRV4MaXfdMySFA==", "license": "Apache-2.0", + "peer": true, "dependencies": { "tslib": "^2.1.0" } @@ -38996,6 +57043,12 @@ "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", "license": "MIT" }, + "node_modules/sax": { + "version": "1.4.3", + "resolved": "https://registry.npmjs.org/sax/-/sax-1.4.3.tgz", + "integrity": "sha512-yqYn1JhPczigF94DMS+shiDMjDowYO6y9+wB/4WgO0Y19jWYk0lQ4tuG5KI7kj4FTp1wxPj5IFfcrz/s1c3jjQ==", + "license": "BlueOak-1.0.0" + }, "node_modules/saxes": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/saxes/-/saxes-6.0.0.tgz", @@ -39177,6 +57230,12 @@ "loose-envify": "^1.1.0" } }, + "node_modules/schema-dts": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/schema-dts/-/schema-dts-1.1.5.tgz", + "integrity": "sha512-RJr9EaCmsLzBX2NDiO5Z3ux2BVosNZN5jo0gWgsyKvxKIUL5R3swNvoorulAeL9kLB0iTSX7V6aokhla2m7xbg==", + "license": "Apache-2.0" + }, "node_modules/schema-utils": { "version": "3.3.0", "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.3.0.tgz", @@ -39201,6 +57260,13 @@ "integrity": "sha512-cdwTTnqPu0Hyvf5in5asVdZocVDTNRmR7XEcJuIzMjJeSHybHl7vpB66AzwTaIg6CLSbtjcxc8fqcySfnTkccA==", "license": "MIT" }, + "node_modules/search-insights": { + "version": "2.17.3", + "resolved": "https://registry.npmjs.org/search-insights/-/search-insights-2.17.3.tgz", + "integrity": "sha512-RQPdCYTa8A68uM2jwxoY842xDhvx3E5LFL1LxvxCNMev4o5mLuokczhzjAgGwUZBAmOKZknArSxLKmXtIi2AxQ==", + "license": "MIT", + "peer": true + }, "node_modules/secp256k1": { "version": "4.0.4", "resolved": "https://registry.npmjs.org/secp256k1/-/secp256k1-4.0.4.tgz", @@ -39222,6 +57288,19 @@ "integrity": "sha512-eh0GgfEkpnoWDq+VY8OyvYhFEzBk6jIYbRKdIlyTiAXIVJ8PyBaKb0rp7oDtoddbdoHWhq8wwr+XZ81F1rpNdA==", "license": "MIT" }, + "node_modules/section-matter": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/section-matter/-/section-matter-1.0.0.tgz", + "integrity": "sha512-vfD3pmTzGpufjScBh50YHKzEu2lxBWhVEHsNGoEXmCmn2hKGfeNLYMzCJpe8cD7gqX7TJluOVpBkAequ6dgMmA==", + "license": "MIT", + "dependencies": { + "extend-shallow": "^2.0.1", + "kind-of": "^6.0.0" + }, + "engines": { + "node": ">=4" + } + }, "node_modules/secure-json-parse": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/secure-json-parse/-/secure-json-parse-4.0.0.tgz", @@ -39238,6 +57317,25 @@ ], "license": "BSD-3-Clause" }, + "node_modules/select-hose": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/select-hose/-/select-hose-2.0.0.tgz", + "integrity": "sha512-mEugaLK+YfkijB4fx0e6kImuJdCIt2LxCRcbEYPqRGCs4F2ogyfZU5IAZRdjCP8JPq2AtdNoC/Dux63d9Kiryg==", + "license": "MIT" + }, + "node_modules/selfsigned": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/selfsigned/-/selfsigned-2.4.1.tgz", + "integrity": "sha512-th5B4L2U+eGLq1TVh7zNRGBapioSORUeymIydxgFpwww9d2qyKvtuPU2jJuHvYAwwqi2Y596QBL3eEqcPEYL8Q==", + "license": "MIT", + "dependencies": { + "@types/node-forge": "^1.3.0", + "node-forge": "^1" + }, + "engines": { + "node": ">=10" + } + }, "node_modules/semver": { "version": "6.3.1", "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", @@ -39251,7 +57349,6 @@ "version": "4.0.0", "resolved": "https://registry.npmjs.org/semver-diff/-/semver-diff-4.0.0.tgz", "integrity": "sha512-0Ju4+6A8iOnpL/Thra7dZsSlOHYAHIeMxfhWQRI1/VLcT3WDBZKKtQt/QkBOsiIN9ZpuvHE6cGZ0x4glCMmfiA==", - "dev": true, "license": "MIT", "dependencies": { "semver": "^7.3.5" @@ -39267,7 +57364,6 @@ "version": "7.7.2", "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.2.tgz", "integrity": "sha512-RF0Fw+rO5AMf9MAyaRXI4AV0Ulj5lMHqVxxdSgiVbixSCXoEmmX/jk0CuJw4+3SqroYO9VoUh+HcuJivvtJemA==", - "dev": true, "license": "ISC", "bin": { "semver": "bin/semver.js" @@ -39281,7 +57377,6 @@ "resolved": "https://registry.npmjs.org/send/-/send-1.2.0.tgz", "integrity": "sha512-uaW0WwXKpL9blXE2o0bRhoL2EGXIrZxQ2ZQ4mgcfoBxdFmQold+qWsD2jLrfZ0trjKL6vOw0j//eAwcALFjKSw==", "license": "MIT", - "peer": true, "dependencies": { "debug": "^4.3.5", "encodeurl": "^2.0.0", @@ -39304,7 +57399,6 @@ "resolved": "https://registry.npmjs.org/serialize-error/-/serialize-error-2.1.0.tgz", "integrity": "sha512-ghgmKt5o4Tly5yEG/UJp8qTd0AN7Xalw4XBtDEKP655B699qMEtra1WlXeE6WIvdEG481JvRxULKsInq/iNysw==", "license": "MIT", - "peer": true, "engines": { "node": ">=0.10.0" } @@ -39318,12 +57412,201 @@ "randombytes": "^2.1.0" } }, + "node_modules/serve-handler": { + "version": "6.1.6", + "resolved": "https://registry.npmjs.org/serve-handler/-/serve-handler-6.1.6.tgz", + "integrity": "sha512-x5RL9Y2p5+Sh3D38Fh9i/iQ5ZK+e4xuXRd/pGbM4D13tgo/MGwbttUk8emytcr1YYzBYs+apnUngBDFYfpjPuQ==", + "license": "MIT", + "dependencies": { + "bytes": "3.0.0", + "content-disposition": "0.5.2", + "mime-types": "2.1.18", + "minimatch": "3.1.2", + "path-is-inside": "1.0.2", + "path-to-regexp": "3.3.0", + "range-parser": "1.2.0" + } + }, + "node_modules/serve-handler/node_modules/bytes": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.0.0.tgz", + "integrity": "sha512-pMhOfFDPiv9t5jjIXkHosWmkSyQbvsgEVNkz0ERHbuLh2T/7j4Mqqpz523Fe8MVY89KC6Sh/QfS2sM+SjgFDcw==", + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/serve-handler/node_modules/content-disposition": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.2.tgz", + "integrity": "sha512-kRGRZw3bLlFISDBgwTSA1TMBFN6J6GWDeubmDE3AF+3+yXL8hTWv8r5rkLbqYXY4RjPk/EzHnClI3zQf1cFmHA==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/serve-handler/node_modules/mime-db": { + "version": "1.33.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.33.0.tgz", + "integrity": "sha512-BHJ/EKruNIqJf/QahvxwQZXKygOQ256myeN/Ew+THcAa5q+PjyTTMMeNQC4DZw5AwfvelsUrA6B67NKMqXDbzQ==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/serve-handler/node_modules/mime-types": { + "version": "2.1.18", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.18.tgz", + "integrity": "sha512-lc/aahn+t4/SWV/qcmumYjymLsWfN3ELhpmVuUFjgsORruuZPVSwAQryq+HHGvO/SI2KVX26bx+En+zhM8g8hQ==", + "license": "MIT", + "dependencies": { + "mime-db": "~1.33.0" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/serve-handler/node_modules/path-to-regexp": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-3.3.0.tgz", + "integrity": "sha512-qyCH421YQPS2WFDxDjftfc1ZR5WKQzVzqsp4n9M2kQhVOo/ByahFoUNJfl58kOcEGfQ//7weFTDhm+ss8Ecxgw==", + "license": "MIT" + }, + "node_modules/serve-handler/node_modules/range-parser": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.0.tgz", + "integrity": "sha512-kA5WQoNVo4t9lNx2kQNFCxKeBl5IbbSNBl1M/tLkw9WCn+hxNBAW5Qh8gdhs63CJnhjJ2zQWFoqPJP2sK1AV5A==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/serve-index": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/serve-index/-/serve-index-1.9.1.tgz", + "integrity": "sha512-pXHfKNP4qujrtteMrSBb0rc8HJ9Ms/GrXwcUtUtD5s4ewDJI8bT3Cz2zTVRMKtri49pLx2e0Ya8ziP5Ya2pZZw==", + "license": "MIT", + "dependencies": { + "accepts": "~1.3.4", + "batch": "0.6.1", + "debug": "2.6.9", + "escape-html": "~1.0.3", + "http-errors": "~1.6.2", + "mime-types": "~2.1.17", + "parseurl": "~1.3.2" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/serve-index/node_modules/accepts": { + "version": "1.3.8", + "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.8.tgz", + "integrity": "sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==", + "license": "MIT", + "dependencies": { + "mime-types": "~2.1.34", + "negotiator": "0.6.3" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/serve-index/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "license": "MIT", + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/serve-index/node_modules/depd": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", + "integrity": "sha512-7emPTl6Dpo6JRXOXjLRxck+FlLRX5847cLKEn00PLAgc3g2hTZZgr+e4c2v6QpSmLeFP3n5yUo7ft6avBK/5jQ==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/serve-index/node_modules/http-errors": { + "version": "1.6.3", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.6.3.tgz", + "integrity": "sha512-lks+lVC8dgGyh97jxvxeYTWQFvh4uw4yC12gVl63Cg30sjPX4wuGcdkICVXDAESr6OJGjqGA8Iz5mkeN6zlD7A==", + "license": "MIT", + "dependencies": { + "depd": "~1.1.2", + "inherits": "2.0.3", + "setprototypeof": "1.1.0", + "statuses": ">= 1.4.0 < 2" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/serve-index/node_modules/inherits": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", + "integrity": "sha512-x00IRNXNy63jwGkJmzPigoySHbaqpNuzKbBOmzK+g2OdZpQ9w+sxCN+VSB3ja7IAge2OP2qpfxTjeNcyjmW1uw==", + "license": "ISC" + }, + "node_modules/serve-index/node_modules/mime-db": { + "version": "1.52.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", + "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/serve-index/node_modules/mime-types": { + "version": "2.1.35", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", + "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", + "license": "MIT", + "dependencies": { + "mime-db": "1.52.0" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/serve-index/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "license": "MIT" + }, + "node_modules/serve-index/node_modules/negotiator": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz", + "integrity": "sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/serve-index/node_modules/setprototypeof": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.0.tgz", + "integrity": "sha512-BvE/TwpZX4FXExxOxZyRGQQv651MSwmWKZGqvmPcRIjDqWub67kTKuIMx43cZZrS/cBBzwBcNDWoFxt2XEFIpQ==", + "license": "ISC" + }, + "node_modules/serve-index/node_modules/statuses": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz", + "integrity": "sha512-OpZ3zP+jT1PI7I8nemJX4AKmAX070ZkYPVWV/AaKTJl+tXCTGyVdC1a4SL8RUQYEwk/f34ZX8UTykN68FwrqAA==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, "node_modules/serve-static": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-2.2.0.tgz", "integrity": "sha512-61g9pCh0Vnh7IutZjtLGGpTA355+OPn2TyDv/6ivP2h/AdAVX9azsoxmg2/M6nZeQZNYBEwIcsne1mJd9oQItQ==", "license": "MIT", - "peer": true, "dependencies": { "encodeurl": "^2.0.0", "escape-html": "^1.0.3", @@ -39434,6 +57717,24 @@ "node": "*" } }, + "node_modules/shallow-clone": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/shallow-clone/-/shallow-clone-3.0.1.tgz", + "integrity": "sha512-/6KqX+GVUdqPuPPd2LxDDxzX6CAbjJehAAOKlNpqqUpAqPM6HeL8f+o3a+JsyGjn2lv0WY8UsTgUJjU9Ok55NA==", + "license": "MIT", + "dependencies": { + "kind-of": "^6.0.2" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/shallowequal": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/shallowequal/-/shallowequal-1.1.0.tgz", + "integrity": "sha512-y0m1JoUZSlPAjXVtPPW70aZWfIL/dSP7AFkRnniLCrK/8MDKog3TySTBmckD+RObVxH0v4Tox67+F14PdED2oQ==", + "license": "MIT" + }, "node_modules/shebang-command": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", @@ -39596,11 +57897,55 @@ "url": "https://github.com/sponsors/isaacs" } }, + "node_modules/sirv": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/sirv/-/sirv-2.0.4.tgz", + "integrity": "sha512-94Bdh3cC2PKrbgSOUqTiGPWVZeSiXfKOVZNJniWoqrWrRkB1CJzBU3NEbiTsPcYy1lDsANA/THzS+9WBiy5nfQ==", + "license": "MIT", + "dependencies": { + "@polka/url": "^1.0.0-next.24", + "mrmime": "^2.0.0", + "totalist": "^3.0.0" + }, + "engines": { + "node": ">= 10" + } + }, "node_modules/sisteransi": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/sisteransi/-/sisteransi-1.0.5.tgz", "integrity": "sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==", - "dev": true, + "license": "MIT" + }, + "node_modules/sitemap": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/sitemap/-/sitemap-7.1.2.tgz", + "integrity": "sha512-ARCqzHJ0p4gWt+j7NlU5eDlIO9+Rkr/JhPFZKKQ1l5GCus7rJH4UdrlVAh0xC/gDS/Qir2UMxqYNHtsKr2rpCw==", + "license": "MIT", + "dependencies": { + "@types/node": "^17.0.5", + "@types/sax": "^1.2.1", + "arg": "^5.0.0", + "sax": "^1.2.4" + }, + "bin": { + "sitemap": "dist/cli.js" + }, + "engines": { + "node": ">=12.0.0", + "npm": ">=5.6.0" + } + }, + "node_modules/sitemap/node_modules/@types/node": { + "version": "17.0.45", + "resolved": "https://registry.npmjs.org/@types/node/-/node-17.0.45.tgz", + "integrity": "sha512-w+tIMs3rq2afQdsPJlODhoUEKzFP1ayaoyl1CcnwtIlsVe7K7bA1NGm4s3PraqTLlXnbIN84zuBlxBWo1u9BLw==", + "license": "MIT" + }, + "node_modules/sitemap/node_modules/arg": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/arg/-/arg-5.0.2.tgz", + "integrity": "sha512-PYjyFOLKQ9y57JvQ6QLo8dAgNqswh8M1RMJYdQduT6xbWSgK36P/Z/v+p888pM69jMMfS8Xd8F6I1kQ/I9HUGg==", "license": "MIT" }, "node_modules/size-sensor": { @@ -39609,6 +57954,18 @@ "integrity": "sha512-2NCmWxY7A9pYKGXNBfteo4hy14gWu47rg5692peVMst6lQLPKrVjhY+UTEsPI5ceFRJSl3gVgMYaUi/hKuaiKw==", "license": "ISC" }, + "node_modules/skin-tone": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/skin-tone/-/skin-tone-2.0.0.tgz", + "integrity": "sha512-kUMbT1oBJCpgrnKoSr0o6wPtvRWT9W9UKvGLwfJYO2WuahZRHOpEyL1ckyMGgMWh0UdpmaoFqKKD29WTomNEGA==", + "license": "MIT", + "dependencies": { + "unicode-emoji-modifier-base": "^1.0.0" + }, + "engines": { + "node": ">=8" + } + }, "node_modules/slash": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", @@ -39654,6 +58011,36 @@ "integrity": "sha512-cf723wn9JeRIYP9tdtd86GuqoR5937u64Io+CYjlm2i7jvu7g0H+Cp0l0ShAf/4ZL+ISUTVT+8Qzz7RZmp9FjA==", "license": "MIT" }, + "node_modules/snake-case": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/snake-case/-/snake-case-3.0.4.tgz", + "integrity": "sha512-LAOh4z89bGQvl9pFfNF8V146i7o7/CqFPbqzYgP+yYzDIDeS9HaNFtXABamRW+AQzEVODcvE79ljJ+8a9YSdMg==", + "license": "MIT", + "dependencies": { + "dot-case": "^3.0.4", + "tslib": "^2.0.3" + } + }, + "node_modules/sockjs": { + "version": "0.3.24", + "resolved": "https://registry.npmjs.org/sockjs/-/sockjs-0.3.24.tgz", + "integrity": "sha512-GJgLTZ7vYb/JtPSSZ10hsOYIvEYsjbNU+zPdIHcUaWVNUEPivzxku31865sSSud0Da0W4lEeOPlmw93zLQchuQ==", + "license": "MIT", + "dependencies": { + "faye-websocket": "^0.11.3", + "uuid": "^8.3.2", + "websocket-driver": "^0.7.4" + } + }, + "node_modules/sockjs/node_modules/uuid": { + "version": "8.3.2", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", + "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==", + "license": "MIT", + "bin": { + "uuid": "dist/bin/uuid" + } + }, "node_modules/solc": { "version": "0.8.26", "resolved": "https://registry.npmjs.org/solc/-/solc-0.8.26.tgz", @@ -39872,11 +58259,12 @@ "license": "MIT" }, "node_modules/solidity-coverage": { - "version": "0.8.16", - "resolved": "https://registry.npmjs.org/solidity-coverage/-/solidity-coverage-0.8.16.tgz", - "integrity": "sha512-qKqgm8TPpcnCK0HCDLJrjbOA2tQNEJY4dHX/LSSQ9iwYFS973MwjtgYn2Iv3vfCEQJTj5xtm4cuUMzlJsJSMbg==", + "version": "0.8.17", + "resolved": "https://registry.npmjs.org/solidity-coverage/-/solidity-coverage-0.8.17.tgz", + "integrity": "sha512-5P8vnB6qVX9tt1MfuONtCTEaEGO/O4WuEidPHIAJjx4sktHHKhO3rFvnE0q8L30nWJPTrcqGQMT7jpE29B2qow==", "dev": true, "license": "ISC", + "peer": true, "dependencies": { "@ethersproject/abi": "^5.0.9", "@solidity-parser/parser": "^0.20.1", @@ -40079,6 +58467,15 @@ "atomic-sleep": "^1.0.0" } }, + "node_modules/sort-css-media-queries": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/sort-css-media-queries/-/sort-css-media-queries-2.2.0.tgz", + "integrity": "sha512-0xtkGhWCC9MGt/EzgnvbbbKhqWjl1+/rncmhTh5qCpbYguXh6S/qwePfv/JQ8jePXXmqingylxoC49pCkSPIbA==", + "license": "MIT", + "engines": { + "node": ">= 6.3.0" + } + }, "node_modules/source-map": { "version": "0.5.7", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", @@ -40092,7 +58489,6 @@ "version": "1.2.1", "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.1.tgz", "integrity": "sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==", - "dev": true, "license": "BSD-3-Clause", "engines": { "node": ">=0.10.0" @@ -40141,6 +58537,84 @@ "integrity": "sha512-wcFzz9cDfbuqe0FZzfi2or1sgyIrsDwmPwfZC4hiNidPdPINjeUwNfv5kldczoEAcjl9Y1L3SM7Uz2PUEQzxQw==", "license": "(WTFPL OR MIT)" }, + "node_modules/spawn-wrap": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/spawn-wrap/-/spawn-wrap-2.0.0.tgz", + "integrity": "sha512-EeajNjfN9zMnULLwhZZQU3GWBoFNkbngTUPfaawT4RkMiviTxcX0qfhVbGey39mfctfDHkWtuecgQ8NJcyQWHg==", + "dev": true, + "license": "ISC", + "dependencies": { + "foreground-child": "^2.0.0", + "is-windows": "^1.0.2", + "make-dir": "^3.0.0", + "rimraf": "^3.0.0", + "signal-exit": "^3.0.2", + "which": "^2.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/spawn-wrap/node_modules/foreground-child": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-2.0.0.tgz", + "integrity": "sha512-dCIq9FpEcyQyXKCkyzmlPTFNgrCzPudOe+mhvJU5zAtlBnGVy2yKxtfsxK2tQBThwq225jcvBjpw1Gr40uzZCA==", + "dev": true, + "license": "ISC", + "dependencies": { + "cross-spawn": "^7.0.0", + "signal-exit": "^3.0.2" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/spawn-wrap/node_modules/glob": { + "version": "7.2.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", + "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", + "deprecated": "Glob versions prior to v9 are no longer supported", + "dev": true, + "license": "ISC", + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.1.1", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/spawn-wrap/node_modules/rimraf": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", + "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", + "deprecated": "Rimraf versions prior to v4 are no longer supported", + "dev": true, + "license": "ISC", + "dependencies": { + "glob": "^7.1.3" + }, + "bin": { + "rimraf": "bin.js" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/spawn-wrap/node_modules/signal-exit": { + "version": "3.0.7", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", + "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", + "dev": true, + "license": "ISC" + }, "node_modules/spawndamnit": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/spawndamnit/-/spawndamnit-3.0.1.tgz", @@ -40188,6 +58662,50 @@ "devOptional": true, "license": "CC0-1.0" }, + "node_modules/spdy": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/spdy/-/spdy-4.0.2.tgz", + "integrity": "sha512-r46gZQZQV+Kl9oItvl1JZZqJKGr+oEkB08A6BzkiR7593/7IbtuncXHd2YoYeTsG4157ZssMu9KYvUHLcjcDoA==", + "license": "MIT", + "dependencies": { + "debug": "^4.1.0", + "handle-thing": "^2.0.0", + "http-deceiver": "^1.2.7", + "select-hose": "^2.0.0", + "spdy-transport": "^3.0.0" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/spdy-transport": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/spdy-transport/-/spdy-transport-3.0.0.tgz", + "integrity": "sha512-hsLVFE5SjA6TCisWeJXFKniGGOpBgMLmerfO2aCyCU5s7nJ/rpAepqmFifv/GCbSbueEeAJJnmSQ2rKC/g8Fcw==", + "license": "MIT", + "dependencies": { + "debug": "^4.1.0", + "detect-node": "^2.0.4", + "hpack.js": "^2.1.6", + "obuf": "^1.1.2", + "readable-stream": "^3.0.6", + "wbuf": "^1.7.3" + } + }, + "node_modules/spdy-transport/node_modules/readable-stream": { + "version": "3.6.2", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", + "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", + "license": "MIT", + "dependencies": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + }, + "engines": { + "node": ">= 6" + } + }, "node_modules/split-ca": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/split-ca/-/split-ca-1.0.1.tgz", @@ -40248,6 +58766,18 @@ "url": "https://github.com/squirrellyjs/squirrelly?sponsor=1" } }, + "node_modules/srcset": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/srcset/-/srcset-4.0.0.tgz", + "integrity": "sha512-wvLeHgcVHKO8Sc/H/5lkGreJQVeYMm9rlmt8PuR1xE31rIuXhuzznUUqAt8MqLhB3MqJdFzlNAfpcWnxiFUcPw==", + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/ssh-remote-port-forward": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/ssh-remote-port-forward/-/ssh-remote-port-forward-1.0.4.tgz", @@ -40329,8 +58859,7 @@ "version": "1.3.4", "resolved": "https://registry.npmjs.org/stackframe/-/stackframe-1.3.4.tgz", "integrity": "sha512-oeVtt7eWQS+Na6F//S4kJ2K2VbRlS9D43mAlMyVpVWovy9o+jfgH8O9agzANzaiLjclA0oYzUXEM4PurhSUChw==", - "license": "MIT", - "peer": true + "license": "MIT" }, "node_modules/stacktrace-parser": { "version": "0.1.11", @@ -40358,7 +58887,6 @@ "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.2.tgz", "integrity": "sha512-DvEy55V3DB7uknRo+4iOGT5fP1slR8wQohVdknigZPMpMstaKJQWhwiYBACJE3Ul2pTnATihhBYnRhZQHGBiRw==", "license": "MIT", - "peer": true, "engines": { "node": ">= 0.8" } @@ -40367,7 +58895,6 @@ "version": "3.9.0", "resolved": "https://registry.npmjs.org/std-env/-/std-env-3.9.0.tgz", "integrity": "sha512-UGvjygr6F6tpH7o2qyqR6QYpwraIjKSdtzyBdyytFOHmPZY917kwdwLG0RbOjWOnKmnm3PeHjaoLLMie7kPLQw==", - "dev": true, "license": "MIT" }, "node_modules/stdin-discarder": { @@ -40688,6 +59215,53 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/stringify-entities": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/stringify-entities/-/stringify-entities-4.0.4.tgz", + "integrity": "sha512-IwfBptatlO+QCJUo19AqvrPNqlVMpW9YEL2LIVY+Rpv2qsjCGxaDLNRgeGsQWJhfItebuJhsGSLjaBbNSQ+ieg==", + "license": "MIT", + "dependencies": { + "character-entities-html4": "^2.0.0", + "character-entities-legacy": "^3.0.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/stringify-entities/node_modules/character-entities-legacy": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/character-entities-legacy/-/character-entities-legacy-3.0.0.tgz", + "integrity": "sha512-RpPp0asT/6ufRm//AJVwpViZbGM/MkjQFxJccQRHmISF/22NBtsHqAWmL+/pmkPWoIUJdWyeVleTl1wydHATVQ==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/stringify-object": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/stringify-object/-/stringify-object-3.3.0.tgz", + "integrity": "sha512-rHqiFh1elqCQ9WPLIC8I0Q/g/wj5J1eMkyoiD6eoQApWHP0FtlK7rqnhmabL5VUY9JQCcqwwvlOaSuutekgyrw==", + "license": "BSD-2-Clause", + "dependencies": { + "get-own-enumerable-property-symbols": "^3.0.0", + "is-obj": "^1.0.1", + "is-regexp": "^1.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/stringify-object/node_modules/is-obj": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-obj/-/is-obj-1.0.1.tgz", + "integrity": "sha512-l4RyHgRqGN4Y3+9JHVrNqO+tN0rV5My76uW5/nuO4K1b6vw5G8d/cmFjP9tRfEsdhZNt0IFdZuK/c2Vr4Nb+Qg==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/strip-ansi": { "version": "6.0.1", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", @@ -40723,11 +59297,19 @@ "node": ">=8" } }, + "node_modules/strip-bom-string": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/strip-bom-string/-/strip-bom-string-1.0.0.tgz", + "integrity": "sha512-uCC2VHvQRYu+lMh4My/sFNmF2klFymLX1wHJeXnbEJERpV/ZsVuonzerjfrGpIGF7LBVa1O7i9kjiWvJiFck8g==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/strip-final-newline": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz", "integrity": "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==", - "dev": true, "license": "MIT", "engines": { "node": ">=6" @@ -40763,7 +59345,6 @@ "version": "3.1.1", "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", - "dev": true, "license": "MIT", "engines": { "node": ">=8" @@ -40804,6 +59385,30 @@ ], "license": "MIT" }, + "node_modules/style-to-js": { + "version": "1.1.21", + "resolved": "https://registry.npmjs.org/style-to-js/-/style-to-js-1.1.21.tgz", + "integrity": "sha512-RjQetxJrrUJLQPHbLku6U/ocGtzyjbJMP9lCNK7Ag0CNh690nSH8woqWH9u16nMjYBAok+i7JO1NP2pOy8IsPQ==", + "license": "MIT", + "dependencies": { + "style-to-object": "1.0.14" + } + }, + "node_modules/style-to-js/node_modules/inline-style-parser": { + "version": "0.2.7", + "resolved": "https://registry.npmjs.org/inline-style-parser/-/inline-style-parser-0.2.7.tgz", + "integrity": "sha512-Nb2ctOyNR8DqQoR0OwRG95uNWIC0C1lCgf5Naz5H6Ji72KZ8OcFZLz2P5sNgwlyoJ8Yif11oMuYs5pBQa86csA==", + "license": "MIT" + }, + "node_modules/style-to-js/node_modules/style-to-object": { + "version": "1.0.14", + "resolved": "https://registry.npmjs.org/style-to-object/-/style-to-object-1.0.14.tgz", + "integrity": "sha512-LIN7rULI0jBscWQYaSswptyderlarFkjQ+t79nzty8tcIAceVomEVlLzH5VP4Cmsv6MtKhs7qaAiwlcp+Mgaxw==", + "license": "MIT", + "dependencies": { + "inline-style-parser": "0.2.7" + } + }, "node_modules/style-to-object": { "version": "0.3.0", "resolved": "https://registry.npmjs.org/style-to-object/-/style-to-object-0.3.0.tgz", @@ -40813,6 +59418,22 @@ "inline-style-parser": "0.1.1" } }, + "node_modules/stylehacks": { + "version": "6.1.1", + "resolved": "https://registry.npmjs.org/stylehacks/-/stylehacks-6.1.1.tgz", + "integrity": "sha512-gSTTEQ670cJNoaeIp9KX6lZmm8LJ3jPB5yJmX8Zq/wQxOsAFXV3qjWzHas3YYk1qesuVIyYWWUpZ0vSE/dTSGg==", + "license": "MIT", + "dependencies": { + "browserslist": "^4.23.0", + "postcss-selector-parser": "^6.0.16" + }, + "engines": { + "node": "^14 || ^16 || >=18.0" + }, + "peerDependencies": { + "postcss": "^8.4.31" + } + }, "node_modules/stylis": { "version": "4.2.0", "resolved": "https://registry.npmjs.org/stylis/-/stylis-4.2.0.tgz", @@ -40880,6 +59501,46 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/svg-parser": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/svg-parser/-/svg-parser-2.0.4.tgz", + "integrity": "sha512-e4hG1hRwoOdRb37cIMSgzNsxyzKfayW6VOflrwvR+/bzrkyxY/31WkbgnQpgtrNp1SdpJvpUAGTa/ZoiPNDuRQ==", + "license": "MIT" + }, + "node_modules/svgo": { + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/svgo/-/svgo-3.3.2.tgz", + "integrity": "sha512-OoohrmuUlBs8B8o6MB2Aevn+pRIH9zDALSR+6hhqVfa6fRwG/Qw9VUMSMW9VNg2CFc/MTIfabtdOVl9ODIJjpw==", + "license": "MIT", + "dependencies": { + "@trysound/sax": "0.2.0", + "commander": "^7.2.0", + "css-select": "^5.1.0", + "css-tree": "^2.3.1", + "css-what": "^6.1.0", + "csso": "^5.0.5", + "picocolors": "^1.0.0" + }, + "bin": { + "svgo": "bin/svgo" + }, + "engines": { + "node": ">=14.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/svgo" + } + }, + "node_modules/svgo/node_modules/commander": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-7.2.0.tgz", + "integrity": "sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==", + "license": "MIT", + "engines": { + "node": ">= 10" + } + }, "node_modules/swagger-ui-dist": { "version": "5.17.14", "resolved": "https://registry.npmjs.org/swagger-ui-dist/-/swagger-ui-dist-5.17.14.tgz", @@ -40901,6 +59562,28 @@ "express": ">=4.0.0 || >=5.0.0-beta" } }, + "node_modules/swr": { + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/swr/-/swr-2.3.8.tgz", + "integrity": "sha512-gaCPRVoMq8WGDcWj9p4YWzCMPHzE0WNl6W8ADIx9c3JBEIdMkJGMzW+uzXvxHMltwcYACr9jP+32H8/hgwMR7w==", + "license": "MIT", + "dependencies": { + "dequal": "^2.0.3", + "use-sync-external-store": "^1.6.0" + }, + "peerDependencies": { + "react": "^16.11.0 || ^17.0.0 || ^18.0.0 || ^19.0.0" + } + }, + "node_modules/swr/node_modules/use-sync-external-store": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/use-sync-external-store/-/use-sync-external-store-1.6.0.tgz", + "integrity": "sha512-Pp6GSwGP/NrPIrxVFAIkOQeyw8lFenOHijQWkUTrDvrF4ALqylP2C/KCkeS9dpUM3KvYRQhna5vt7IL95+ZQ9w==", + "license": "MIT", + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0" + } + }, "node_modules/symbol-observable": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/symbol-observable/-/symbol-observable-4.0.0.tgz", @@ -41101,9 +59784,9 @@ } }, "node_modules/tapable": { - "version": "2.2.3", - "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.2.3.tgz", - "integrity": "sha512-ZL6DDuAlRlLGghwcfmSn9sK3Hr6ArtyudlSAiCqQ6IfE+b+HHbydbYDIG15IfS5do+7XQQBdBiubF/cV2dnDzg==", + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.3.0.tgz", + "integrity": "sha512-g9ljZiwki/LfxmQADO3dEY1CbpmXT5Hm2fJ+QaGKwSXUylMybePR7/67YW7jOrrvjEgL1Fmz5kzyAjWVWLlucg==", "license": "MIT", "engines": { "node": ">=6" @@ -41311,9 +59994,9 @@ } }, "node_modules/terser-webpack-plugin": { - "version": "5.3.14", - "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-5.3.14.tgz", - "integrity": "sha512-vkZjpUjb6OMS7dhV+tILUW6BhpDR7P2L/aQSAv+Uwk+m8KATX9EccViHTJR2qDtACKPIYndLGCyl3FMo+r2LMw==", + "version": "5.3.16", + "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-5.3.16.tgz", + "integrity": "sha512-h9oBFCWrq78NyWWVcSwZarJkZ01c2AyGrzs1crmHZO3QUg9D61Wu4NPjBy69n7JqylFF5y+CsUZYmYEIZ3mR+Q==", "license": "MIT", "dependencies": { "@jridgewell/trace-mapping": "^0.3.25", @@ -41349,6 +60032,7 @@ "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.17.1.tgz", "integrity": "sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g==", "license": "MIT", + "peer": true, "dependencies": { "fast-deep-equal": "^3.1.3", "fast-uri": "^3.0.1", @@ -41636,6 +60320,22 @@ "node": ">= 0.6" } }, + "node_modules/thingies": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/thingies/-/thingies-2.5.0.tgz", + "integrity": "sha512-s+2Bwztg6PhWUD7XMfeYm5qliDdSiZm7M7n8KjTkIsm3l/2lgVRc2/Gx/v+ZX8lT4FMA+i8aQvhcWylldc+ZNw==", + "license": "MIT", + "engines": { + "node": ">=10.18" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/streamich" + }, + "peerDependencies": { + "tslib": "^2" + } + }, "node_modules/thread-stream": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/thread-stream/-/thread-stream-3.1.0.tgz", @@ -41649,8 +60349,19 @@ "version": "5.0.0", "resolved": "https://registry.npmjs.org/throat/-/throat-5.0.0.tgz", "integrity": "sha512-fcwX4mndzpLQKBS1DVYhGAcYaYt7vsHNIvQV+WXMvnow5cgjPphq5CaayLaGsjRdSCKZFNGt7/GYAuXaNOiYCA==", + "license": "MIT" + }, + "node_modules/throttleit": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/throttleit/-/throttleit-2.1.0.tgz", + "integrity": "sha512-nt6AMGKW1p/70DF/hGBdJB57B8Tspmbp5gfJ8ilhLnt7kkr2ye7hzD6NVG8GGErk2HWF34igrL2CXmNIkzKqKw==", "license": "MIT", - "peer": true + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } }, "node_modules/through": { "version": "2.3.8", @@ -41658,6 +60369,12 @@ "integrity": "sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==", "license": "MIT" }, + "node_modules/thunky": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/thunky/-/thunky-1.1.0.tgz", + "integrity": "sha512-eHY7nBftgThBqOyHGVN+l8gF0BucP09fMo0oO/Lb0w1OF80dJv+lDVpXG60WMQvkcxAkNybKsrEIE3ZtKGmPrA==", + "license": "MIT" + }, "node_modules/timers-browserify": { "version": "2.0.12", "resolved": "https://registry.npmjs.org/timers-browserify/-/timers-browserify-2.0.12.tgz", @@ -41677,6 +60394,12 @@ "integrity": "sha512-+FbBPE1o9QAYvviau/qC5SE3caw21q3xkvWKBtja5vgqOWIHHJ3ioaq1VPfn/Szqctz2bU/oYeKd9/z5BL+PVg==", "license": "MIT" }, + "node_modules/tiny-warning": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/tiny-warning/-/tiny-warning-1.0.3.tgz", + "integrity": "sha512-lBN9zLN/oAf68o3zNXYrdCt1kP8WsiGW8Oo2ka41b2IM5JL/S1CTyX1rW0mb/zSuJun0ZUrDxx4sqvYS2FWzPA==", + "license": "MIT" + }, "node_modules/tinybench": { "version": "2.9.0", "resolved": "https://registry.npmjs.org/tinybench/-/tinybench-2.9.0.tgz", @@ -41688,7 +60411,6 @@ "version": "1.0.1", "resolved": "https://registry.npmjs.org/tinyexec/-/tinyexec-1.0.1.tgz", "integrity": "sha512-5uC6DDlmeqiOwCPmK9jMSdOuZTh8bU39Ys6yidB+UTt5hfZUPGAypSgFRiEp+jbi9qH40BLDvy85jIU88wKSqw==", - "dev": true, "license": "MIT" }, "node_modules/tinyglobby": { @@ -41807,6 +60529,15 @@ "license": "MIT", "optional": true }, + "node_modules/totalist": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/totalist/-/totalist-3.0.1.tgz", + "integrity": "sha512-sf4i37nQ2LBx4m3wB74y+ubopq6W/dIzXg0FDGjsYnZHVa1Da8FH853wlL2gtUhg+xJXjfk3kUZS3BRoQeoQBQ==", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, "node_modules/tough-cookie": { "version": "4.1.4", "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-4.1.4.tgz", @@ -41846,6 +60577,22 @@ "node": ">=18" } }, + "node_modules/tree-dump": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/tree-dump/-/tree-dump-1.1.0.tgz", + "integrity": "sha512-rMuvhU4MCDbcbnleZTFezWsaZXRFemSqAM+7jPnzUl1fo9w3YEKOxAeui0fz3OI4EU4hf23iyA7uQRVko+UaBA==", + "license": "Apache-2.0", + "engines": { + "node": ">=10.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/streamich" + }, + "peerDependencies": { + "tslib": "2" + } + }, "node_modules/tree-kill": { "version": "1.2.2", "resolved": "https://registry.npmjs.org/tree-kill/-/tree-kill-1.2.2.tgz", @@ -41855,6 +60602,16 @@ "tree-kill": "cli.js" } }, + "node_modules/trim-lines": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/trim-lines/-/trim-lines-3.0.1.tgz", + "integrity": "sha512-kRj8B+YHZCc9kQYdWfJB2/oUl9rA99qbowYYBtr4ui4mZyAQ2JpvVBd/6U2YloATfqBhBTSMhTpgBHtU0Mf3Rg==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, "node_modules/triple-beam": { "version": "1.4.1", "resolved": "https://registry.npmjs.org/triple-beam/-/triple-beam-1.4.1.tgz", @@ -41903,6 +60660,15 @@ "write-markdown": "dist/write-markdown.js" } }, + "node_modules/ts-dedent": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/ts-dedent/-/ts-dedent-2.2.0.tgz", + "integrity": "sha512-q5W7tVM71e2xjHZTlgfTDoPF/SmqKG5hddq9SzR49CH2hayqRKJtQ4mtRlSxKaJlR/+9rEM+mnBHf7I2/BQcpQ==", + "license": "MIT", + "engines": { + "node": ">=6.10" + } + }, "node_modules/ts-essentials": { "version": "7.0.3", "resolved": "https://registry.npmjs.org/ts-essentials/-/ts-essentials-7.0.3.tgz", @@ -41998,6 +60764,7 @@ "integrity": "sha512-f0FFpIdcHgn8zcPSbf1dRevwt047YMnaiJM3u2w2RewrB+fob/zePZcrOyQoLMMO7aBIddLcQIEK5dYjkLnGrQ==", "devOptional": true, "license": "MIT", + "peer": true, "dependencies": { "@cspotcode/source-map-support": "^0.8.0", "@tsconfig/node10": "^1.0.7", @@ -42796,6 +61563,7 @@ "integrity": "sha512-x/sQYr5w9K7yv3es7jo4KTX05CLxOf7TRWwoHlrjRh8H82G64g+k7VuWPJlgMo6qrjfCulOdfBjiaDtmhFYD/Q==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "@types/prettier": "^2.1.1", "debug": "^4.3.1", @@ -42963,7 +61731,6 @@ "version": "3.1.5", "resolved": "https://registry.npmjs.org/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz", "integrity": "sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q==", - "dev": true, "license": "MIT", "dependencies": { "is-typedarray": "^1.0.0" @@ -42974,6 +61741,7 @@ "resolved": "https://registry.npmjs.org/typeorm/-/typeorm-0.3.24.tgz", "integrity": "sha512-4IrHG7A0tY8l5gEGXfW56VOMfUVWEkWlH/h5wmcyZ+V8oCiLj7iTPp0lEjMEZVrxEkGSdP9ErgTKHKXQApl/oA==", "license": "MIT", + "peer": true, "dependencies": { "@sqltools/formatter": "^1.2.5", "ansis": "^3.17.0", @@ -43174,6 +61942,7 @@ "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.9.3.tgz", "integrity": "sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw==", "license": "Apache-2.0", + "peer": true, "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" @@ -43317,7 +62086,15 @@ "version": "2.0.1", "resolved": "https://registry.npmjs.org/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-2.0.1.tgz", "integrity": "sha512-dA8WbNeb2a6oQzAQ55YlT5vQAWGV9WXOsi3SskE3bcCdM0P4SDd+24zS/OCacdRq5BkdsRj9q3Pg6YyQoxIGqg==", - "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/unicode-emoji-modifier-base": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/unicode-emoji-modifier-base/-/unicode-emoji-modifier-base-1.0.0.tgz", + "integrity": "sha512-yLSH4py7oFH3oG/9K+XWrz1pSi3dfUrWEnInbxMfArOfc1+33BlGPQtLsOYwvdMy11AwUBetYuaRxSPqgkq+8g==", "license": "MIT", "engines": { "node": ">=4" @@ -43327,7 +62104,6 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/unicode-match-property-ecmascript/-/unicode-match-property-ecmascript-2.0.0.tgz", "integrity": "sha512-5kaZCrbp5mmbz5ulBkDkbY0SsPOjKqVS35VpL9ulMPfSl0J0Xsm+9Evphv9CoIZFwre7aJoa94AY6seMKGVN5Q==", - "dev": true, "license": "MIT", "dependencies": { "unicode-canonical-property-names-ecmascript": "^2.0.0", @@ -43341,7 +62117,6 @@ "version": "2.2.1", "resolved": "https://registry.npmjs.org/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-2.2.1.tgz", "integrity": "sha512-JQ84qTuMg4nVkx8ga4A16a1epI9H6uTXAknqxkGF/aFfRLw1xC/Bp24HNLaZhHSkWd3+84t8iXnp1J0kYcZHhg==", - "dev": true, "license": "MIT", "engines": { "node": ">=4" @@ -43351,7 +62126,6 @@ "version": "2.2.0", "resolved": "https://registry.npmjs.org/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-2.2.0.tgz", "integrity": "sha512-hpbDzxUY9BFwX+UeBnxv3Sh1q7HFxj48DTmXchNgRa46lO8uj3/1iEn3MiNUYTg1g9ctIqXCCERn8gYZhHC5lQ==", - "dev": true, "license": "MIT", "engines": { "node": ">=4" @@ -43392,7 +62166,6 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/unique-string/-/unique-string-3.0.0.tgz", "integrity": "sha512-VGXBUVwxKMBUznyffQweQABPRRW1vHZAbadFZud4pLFAqRGvv/96vafgjWFqzourzr8YonlQiPgH0YCJfawoGQ==", - "dev": true, "license": "MIT", "dependencies": { "crypto-random-string": "^4.0.0" @@ -43444,6 +62217,19 @@ "url": "https://opencollective.com/unified" } }, + "node_modules/unist-util-position-from-estree": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/unist-util-position-from-estree/-/unist-util-position-from-estree-2.0.0.tgz", + "integrity": "sha512-KaFVRjoqLyF6YXCbVLNad/eS4+OfPQQn2yOd7zF/h5T/CSL2v8NpN6a5TPvtbXthAGw5nG+PuTtq+DdIZr+cRQ==", + "license": "MIT", + "dependencies": { + "@types/unist": "^3.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, "node_modules/unist-util-stringify-position": { "version": "2.0.3", "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-2.0.3.tgz", @@ -43524,9 +62310,9 @@ } }, "node_modules/update-browserslist-db": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.1.3.tgz", - "integrity": "sha512-UxhIZQ+QInVdunkDAaiazvvT/+fXL5Osr0JZlJulepYu6Jd7qJtDZjlur0emRlT71EN3ScPoE7gvsuIKKNavKw==", + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.2.3.tgz", + "integrity": "sha512-Js0m9cx+qOgDxo0eMiFGEueWztz+d4+M3rGlmKPT+T4IS/jP4ylw3Nwpu6cpTTP8R1MAC1kF4VbdLt3ARf209w==", "funding": [ { "type": "opencollective", @@ -43557,7 +62343,6 @@ "version": "6.0.2", "resolved": "https://registry.npmjs.org/update-notifier/-/update-notifier-6.0.2.tgz", "integrity": "sha512-EDxhTEVPZZRLWYcJ4ZXjGFN0oP7qYvbXWzEgRm/Yql4dHX5wDbvh89YHP6PK1lzZJYrMtXUuZZz8XGK+U6U1og==", - "dev": true, "license": "BSD-2-Clause", "dependencies": { "boxen": "^7.0.0", @@ -43586,7 +62371,6 @@ "version": "6.2.2", "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.2.2.tgz", "integrity": "sha512-Bq3SmSpyFHaWjPk8If9yc6svM8c56dB5BAtW4Qbw5jHTwwXXcTLoRMkpDJp6VL0XzlWaCHTXrkFURMYmD0sLqg==", - "dev": true, "license": "MIT", "engines": { "node": ">=12" @@ -43599,7 +62383,6 @@ "version": "6.2.3", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.3.tgz", "integrity": "sha512-4Dj6M28JB+oAH8kFkTLUo+a2jwOFkuqb3yucU0CANcRRUbxS0cP0nZYCGjcc3BNXwRIsUVmDGgzawme7zvJHvg==", - "dev": true, "license": "MIT", "engines": { "node": ">=12" @@ -43612,7 +62395,6 @@ "version": "7.1.1", "resolved": "https://registry.npmjs.org/boxen/-/boxen-7.1.1.tgz", "integrity": "sha512-2hCgjEmP8YLWQ130n2FerGv7rYpfBmnmp9Uy2Le1vge6X3gZIfSmEzP5QTDElFxcvVcXlEn8Aq6MU/PZygIOog==", - "dev": true, "license": "MIT", "dependencies": { "ansi-align": "^3.0.1", @@ -43635,7 +62417,6 @@ "version": "7.0.1", "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-7.0.1.tgz", "integrity": "sha512-xlx1yCK2Oc1APsPXDL2LdlNP6+uu8OCDdhOBSVT279M/S+y75O30C2VuD8T2ogdePBBl7PfPF4504tnLgX3zfw==", - "dev": true, "license": "MIT", "engines": { "node": ">=14.16" @@ -43648,7 +62429,6 @@ "version": "5.6.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-5.6.2.tgz", "integrity": "sha512-7NzBL0rN6fMUW+f7A6Io4h40qQlG+xGmtMxfbnH/K7TAtt8JQWVQK+6g0UXKMeVJoyV5EkkNsErQ8pVD3bLHbA==", - "dev": true, "license": "MIT", "engines": { "node": "^12.17.0 || ^14.13 || >=16.0.0" @@ -43661,7 +62441,6 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/cli-boxes/-/cli-boxes-3.0.0.tgz", "integrity": "sha512-/lzGpEWL/8PfI0BmBOPRwp0c/wFNX1RdUML3jK/RcSBA9T8mZDdQpqYBKtCFTOfQbwPqWEOpjqW+Fnayc0969g==", - "dev": true, "license": "MIT", "engines": { "node": ">=10" @@ -43674,14 +62453,12 @@ "version": "9.2.2", "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==", - "dev": true, "license": "MIT" }, "node_modules/update-notifier/node_modules/semver": { "version": "7.7.2", "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.2.tgz", "integrity": "sha512-RF0Fw+rO5AMf9MAyaRXI4AV0Ulj5lMHqVxxdSgiVbixSCXoEmmX/jk0CuJw4+3SqroYO9VoUh+HcuJivvtJemA==", - "dev": true, "license": "ISC", "bin": { "semver": "bin/semver.js" @@ -43694,7 +62471,6 @@ "version": "5.1.2", "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz", "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==", - "dev": true, "license": "MIT", "dependencies": { "eastasianwidth": "^0.2.0", @@ -43712,7 +62488,6 @@ "version": "7.1.2", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.2.tgz", "integrity": "sha512-gmBGslpoQJtgnMAvOVqGZpEz9dyoKTCzy2nfz/n8aIFhN/jCE/rCmcxabB6jOOHV+0WNnylOxaxBQPSvcWklhA==", - "dev": true, "license": "MIT", "dependencies": { "ansi-regex": "^6.0.1" @@ -43728,7 +62503,6 @@ "version": "2.19.0", "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-2.19.0.tgz", "integrity": "sha512-RAH822pAdBgcNMAfWnCBU3CFZcfZ/i1eZjwFU/dsLKumyuuP3niueg2UAukXYF0E2AAoc82ZSSf9J0WQBinzHA==", - "dev": true, "license": "(MIT OR CC0-1.0)", "engines": { "node": ">=12.20" @@ -43741,7 +62515,6 @@ "version": "4.0.1", "resolved": "https://registry.npmjs.org/widest-line/-/widest-line-4.0.1.tgz", "integrity": "sha512-o0cyEG0e8GPzT4iGHphIOh0cJOV8fivsXxddQasHPHfoZf1ZexrfeA21w2NaEN1RHE+fXlfISmOE8R9N3u3Qig==", - "dev": true, "license": "MIT", "dependencies": { "string-width": "^5.0.1" @@ -43757,7 +62530,6 @@ "version": "8.1.0", "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-8.1.0.tgz", "integrity": "sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==", - "dev": true, "license": "MIT", "dependencies": { "ansi-styles": "^6.1.0", @@ -43794,6 +62566,54 @@ "node": ">= 0.4" } }, + "node_modules/url-loader": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/url-loader/-/url-loader-4.1.1.tgz", + "integrity": "sha512-3BTV812+AVHHOJQO8O5MkWgZ5aosP7GnROJwvzLS9hWDj00lZ6Z0wNak423Lp9PBZN05N+Jk/N5Si8jRAlGyWA==", + "license": "MIT", + "dependencies": { + "loader-utils": "^2.0.0", + "mime-types": "^2.1.27", + "schema-utils": "^3.0.0" + }, + "engines": { + "node": ">= 10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "file-loader": "*", + "webpack": "^4.0.0 || ^5.0.0" + }, + "peerDependenciesMeta": { + "file-loader": { + "optional": true + } + } + }, + "node_modules/url-loader/node_modules/mime-db": { + "version": "1.52.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", + "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/url-loader/node_modules/mime-types": { + "version": "2.1.35", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", + "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", + "license": "MIT", + "dependencies": { + "mime-db": "1.52.0" + }, + "engines": { + "node": ">= 0.6" + } + }, "node_modules/url-parse": { "version": "1.5.10", "resolved": "https://registry.npmjs.org/url-parse/-/url-parse-1.5.10.tgz", @@ -43930,6 +62750,21 @@ "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==", "license": "MIT" }, + "node_modules/utila": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/utila/-/utila-0.4.0.tgz", + "integrity": "sha512-Z0DbgELS9/L/75wZbro8xAnT50pBVFQZ+hUEueGDU5FN51YSCYM+jdxsfCiHjwNP/4LCDD0i/graKpeBnOXKRA==", + "license": "MIT" + }, + "node_modules/utility-types": { + "version": "3.11.0", + "resolved": "https://registry.npmjs.org/utility-types/-/utility-types-3.11.0.tgz", + "integrity": "sha512-6Z7Ma2aVEWisaL6TvBCy7P8rm2LQoPv6dJ7ecIaIixHcwfbJ0x7mWdbcwlIM5IGQxPZSFYeqRCqlOOeKoJYMkw==", + "license": "MIT", + "engines": { + "node": ">= 4" + } + }, "node_modules/utils-merge": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", @@ -44029,6 +62864,12 @@ } } }, + "node_modules/value-equal": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/value-equal/-/value-equal-1.0.1.tgz", + "integrity": "sha512-NOJ6JZCAWr0zlxZt+xqCHNTEKOsrks2HQd4MqhP1qy4z1SkbEP467eNx6TgDKXMvUOb+OENfJCZwM+16n7fRfw==", + "license": "MIT" + }, "node_modules/varint": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/varint/-/varint-6.0.0.tgz", @@ -44050,10 +62891,65 @@ "integrity": "sha512-O6AE4OskCG5S1emQ/4gl8zK586RqA3srz3nfK/Viy0UPToBc5Trp9BVFb1u0CjsKrAWwnpr4ifM/KBXPWwJbCA==", "license": "MIT", "dependencies": { - "@types/unist": "^2.0.0", - "is-buffer": "^2.0.0", - "unist-util-stringify-position": "^2.0.0", - "vfile-message": "^2.0.0" + "@types/unist": "^2.0.0", + "is-buffer": "^2.0.0", + "unist-util-stringify-position": "^2.0.0", + "vfile-message": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/vfile-location": { + "version": "5.0.3", + "resolved": "https://registry.npmjs.org/vfile-location/-/vfile-location-5.0.3.tgz", + "integrity": "sha512-5yXvWDEgqeiYiBe1lbxYF7UMAIm/IcopxMHrMQDq3nvKcjPKIhZklUKL+AE7J7uApI4kwe2snsK+eI6UTj9EHg==", + "license": "MIT", + "dependencies": { + "@types/unist": "^3.0.0", + "vfile": "^6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/vfile-location/node_modules/unist-util-stringify-position": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-4.0.0.tgz", + "integrity": "sha512-0ASV06AAoKCDkS2+xw5RXJywruurpbC4JZSm7nr7MOt1ojAzvyyaO+UxZf18j8FCF6kmzCZKcAgN/yu2gm2XgQ==", + "license": "MIT", + "dependencies": { + "@types/unist": "^3.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/vfile-location/node_modules/vfile": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/vfile/-/vfile-6.0.3.tgz", + "integrity": "sha512-KzIbH/9tXat2u30jf+smMwFCsno4wHVdNmzFyL+T/L3UGqqk6JKfVqOFOZEpZSHADH1k40ab6NUIXZq422ov3Q==", + "license": "MIT", + "dependencies": { + "@types/unist": "^3.0.0", + "vfile-message": "^4.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/vfile-location/node_modules/vfile-message": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/vfile-message/-/vfile-message-4.0.3.tgz", + "integrity": "sha512-QTHzsGd1EhbZs4AsQ20JX1rC3cOlt/IWJruk893DfLRr57lcnOeMaWG4K0JrRta4mIJZKth2Au3mM3u03/JWKw==", + "license": "MIT", + "dependencies": { + "@types/unist": "^3.0.0", + "unist-util-stringify-position": "^4.0.0" }, "funding": { "type": "opencollective", @@ -44092,6 +62988,7 @@ "integrity": "sha512-ifW3Lb2sMdX+WU91s3R0FyQlAyLxOzCSCP37ujw0+r5POeHPwe6udWVIElKQq8gk3t7b8rkmvqC6IHBpCff4GQ==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "esbuild": "^0.18.10", "postcss": "^8.4.27", @@ -45073,10 +63970,523 @@ "node": ">=12" } }, - "node_modules/vite/node_modules/@esbuild/win32-ia32": { - "version": "0.18.20", - "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.18.20.tgz", - "integrity": "sha512-Wv7QBi3ID/rROT08SABTS7eV4hX26sVduqDOTe1MvGMjNd3EjOz4b7zeexIR62GTIEKrfJXKL9LFxTYgkyeu7g==", + "node_modules/vite/node_modules/@esbuild/win32-ia32": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.18.20.tgz", + "integrity": "sha512-Wv7QBi3ID/rROT08SABTS7eV4hX26sVduqDOTe1MvGMjNd3EjOz4b7zeexIR62GTIEKrfJXKL9LFxTYgkyeu7g==", + "cpu": [ + "ia32" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vite/node_modules/@esbuild/win32-x64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.18.20.tgz", + "integrity": "sha512-kTdfRcSiDfQca/y9QIkng02avJ+NCaQvrMejlsB3RRv5sE9rRoeBPISaZpKxHELzRxZyLvNts1P27W3wV+8geQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vite/node_modules/esbuild": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.18.20.tgz", + "integrity": "sha512-ceqxoedUrcayh7Y7ZX6NdbbDzGROiyVBgC4PriJThBKSVPWnnFHZAkfI1lJT8QFkOwH4qOS2SJkS4wvpGl8BpA==", + "dev": true, + "hasInstallScript": true, + "license": "MIT", + "bin": { + "esbuild": "bin/esbuild" + }, + "engines": { + "node": ">=12" + }, + "optionalDependencies": { + "@esbuild/android-arm": "0.18.20", + "@esbuild/android-arm64": "0.18.20", + "@esbuild/android-x64": "0.18.20", + "@esbuild/darwin-arm64": "0.18.20", + "@esbuild/darwin-x64": "0.18.20", + "@esbuild/freebsd-arm64": "0.18.20", + "@esbuild/freebsd-x64": "0.18.20", + "@esbuild/linux-arm": "0.18.20", + "@esbuild/linux-arm64": "0.18.20", + "@esbuild/linux-ia32": "0.18.20", + "@esbuild/linux-loong64": "0.18.20", + "@esbuild/linux-mips64el": "0.18.20", + "@esbuild/linux-ppc64": "0.18.20", + "@esbuild/linux-riscv64": "0.18.20", + "@esbuild/linux-s390x": "0.18.20", + "@esbuild/linux-x64": "0.18.20", + "@esbuild/netbsd-x64": "0.18.20", + "@esbuild/openbsd-x64": "0.18.20", + "@esbuild/sunos-x64": "0.18.20", + "@esbuild/win32-arm64": "0.18.20", + "@esbuild/win32-ia32": "0.18.20", + "@esbuild/win32-x64": "0.18.20" + } + }, + "node_modules/vite/node_modules/rollup": { + "version": "3.29.5", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-3.29.5.tgz", + "integrity": "sha512-GVsDdsbJzzy4S/v3dqWPJ7EfvZJfCHiDqe80IyrF59LYuP+e6U1LJoUqeuqRbwAWoMNoXivMNeNAOf5E22VA1w==", + "dev": true, + "license": "MIT", + "bin": { + "rollup": "dist/bin/rollup" + }, + "engines": { + "node": ">=14.18.0", + "npm": ">=8.0.0" + }, + "optionalDependencies": { + "fsevents": "~2.3.2" + } + }, + "node_modules/vitest": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/vitest/-/vitest-1.4.0.tgz", + "integrity": "sha512-gujzn0g7fmwf83/WzrDTnncZt2UiXP41mHuFYFrdwaLRVQ6JYQEiME2IfEjU3vcFL3VKa75XhI3lFgn+hfVsQw==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "@vitest/expect": "1.4.0", + "@vitest/runner": "1.4.0", + "@vitest/snapshot": "1.4.0", + "@vitest/spy": "1.4.0", + "@vitest/utils": "1.4.0", + "acorn-walk": "^8.3.2", + "chai": "^4.3.10", + "debug": "^4.3.4", + "execa": "^8.0.1", + "local-pkg": "^0.5.0", + "magic-string": "^0.30.5", + "pathe": "^1.1.1", + "picocolors": "^1.0.0", + "std-env": "^3.5.0", + "strip-literal": "^2.0.0", + "tinybench": "^2.5.1", + "tinypool": "^0.8.2", + "vite": "^5.0.0", + "vite-node": "1.4.0", + "why-is-node-running": "^2.2.2" + }, + "bin": { + "vitest": "vitest.mjs" + }, + "engines": { + "node": "^18.0.0 || >=20.0.0" + }, + "funding": { + "url": "https://opencollective.com/vitest" + }, + "peerDependencies": { + "@edge-runtime/vm": "*", + "@types/node": "^18.0.0 || >=20.0.0", + "@vitest/browser": "1.4.0", + "@vitest/ui": "1.4.0", + "happy-dom": "*", + "jsdom": "*" + }, + "peerDependenciesMeta": { + "@edge-runtime/vm": { + "optional": true + }, + "@types/node": { + "optional": true + }, + "@vitest/browser": { + "optional": true + }, + "@vitest/ui": { + "optional": true + }, + "happy-dom": { + "optional": true + }, + "jsdom": { + "optional": true + } + } + }, + "node_modules/vitest/node_modules/@esbuild/aix-ppc64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.21.5.tgz", + "integrity": "sha512-1SDgH6ZSPTlggy1yI6+Dbkiz8xzpHJEVAlF/AM1tHPLsf5STom9rwtjE4hKAF20FfXXNTFqEYXyJNWh1GiZedQ==", + "cpu": [ + "ppc64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "aix" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vitest/node_modules/@esbuild/android-arm": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.21.5.tgz", + "integrity": "sha512-vCPvzSjpPHEi1siZdlvAlsPxXl7WbOVUBBAowWug4rJHb68Ox8KualB+1ocNvT5fjv6wpkX6o/iEpbDrf68zcg==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vitest/node_modules/@esbuild/android-arm64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.21.5.tgz", + "integrity": "sha512-c0uX9VAUBQ7dTDCjq+wdyGLowMdtR/GoC2U5IYk/7D1H1JYC0qseD7+11iMP2mRLN9RcCMRcjC4YMclCzGwS/A==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vitest/node_modules/@esbuild/android-x64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.21.5.tgz", + "integrity": "sha512-D7aPRUUNHRBwHxzxRvp856rjUHRFW1SdQATKXH2hqA0kAZb1hKmi02OpYRacl0TxIGz/ZmXWlbZgjwWYaCakTA==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vitest/node_modules/@esbuild/darwin-arm64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.21.5.tgz", + "integrity": "sha512-DwqXqZyuk5AiWWf3UfLiRDJ5EDd49zg6O9wclZ7kUMv2WRFr4HKjXp/5t8JZ11QbQfUS6/cRCKGwYhtNAY88kQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vitest/node_modules/@esbuild/darwin-x64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.21.5.tgz", + "integrity": "sha512-se/JjF8NlmKVG4kNIuyWMV/22ZaerB+qaSi5MdrXtd6R08kvs2qCN4C09miupktDitvh8jRFflwGFBQcxZRjbw==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vitest/node_modules/@esbuild/freebsd-arm64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.21.5.tgz", + "integrity": "sha512-5JcRxxRDUJLX8JXp/wcBCy3pENnCgBR9bN6JsY4OmhfUtIHe3ZW0mawA7+RDAcMLrMIZaf03NlQiX9DGyB8h4g==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vitest/node_modules/@esbuild/freebsd-x64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.21.5.tgz", + "integrity": "sha512-J95kNBj1zkbMXtHVH29bBriQygMXqoVQOQYA+ISs0/2l3T9/kj42ow2mpqerRBxDJnmkUDCaQT/dfNXWX/ZZCQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vitest/node_modules/@esbuild/linux-arm": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.21.5.tgz", + "integrity": "sha512-bPb5AHZtbeNGjCKVZ9UGqGwo8EUu4cLq68E95A53KlxAPRmUyYv2D6F0uUI65XisGOL1hBP5mTronbgo+0bFcA==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vitest/node_modules/@esbuild/linux-arm64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.21.5.tgz", + "integrity": "sha512-ibKvmyYzKsBeX8d8I7MH/TMfWDXBF3db4qM6sy+7re0YXya+K1cem3on9XgdT2EQGMu4hQyZhan7TeQ8XkGp4Q==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vitest/node_modules/@esbuild/linux-ia32": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.21.5.tgz", + "integrity": "sha512-YvjXDqLRqPDl2dvRODYmmhz4rPeVKYvppfGYKSNGdyZkA01046pLWyRKKI3ax8fbJoK5QbxblURkwK/MWY18Tg==", + "cpu": [ + "ia32" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vitest/node_modules/@esbuild/linux-loong64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.21.5.tgz", + "integrity": "sha512-uHf1BmMG8qEvzdrzAqg2SIG/02+4/DHB6a9Kbya0XDvwDEKCoC8ZRWI5JJvNdUjtciBGFQ5PuBlpEOXQj+JQSg==", + "cpu": [ + "loong64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vitest/node_modules/@esbuild/linux-mips64el": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.21.5.tgz", + "integrity": "sha512-IajOmO+KJK23bj52dFSNCMsz1QP1DqM6cwLUv3W1QwyxkyIWecfafnI555fvSGqEKwjMXVLokcV5ygHW5b3Jbg==", + "cpu": [ + "mips64el" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vitest/node_modules/@esbuild/linux-ppc64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.21.5.tgz", + "integrity": "sha512-1hHV/Z4OEfMwpLO8rp7CvlhBDnjsC3CttJXIhBi+5Aj5r+MBvy4egg7wCbe//hSsT+RvDAG7s81tAvpL2XAE4w==", + "cpu": [ + "ppc64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vitest/node_modules/@esbuild/linux-riscv64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.21.5.tgz", + "integrity": "sha512-2HdXDMd9GMgTGrPWnJzP2ALSokE/0O5HhTUvWIbD3YdjME8JwvSCnNGBnTThKGEB91OZhzrJ4qIIxk/SBmyDDA==", + "cpu": [ + "riscv64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vitest/node_modules/@esbuild/linux-s390x": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.21.5.tgz", + "integrity": "sha512-zus5sxzqBJD3eXxwvjN1yQkRepANgxE9lgOW2qLnmr8ikMTphkjgXu1HR01K4FJg8h1kEEDAqDcZQtbrRnB41A==", + "cpu": [ + "s390x" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vitest/node_modules/@esbuild/linux-x64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.21.5.tgz", + "integrity": "sha512-1rYdTpyv03iycF1+BhzrzQJCdOuAOtaqHTWJZCWvijKD2N5Xu0TtVC8/+1faWqcP9iBCWOmjmhoH94dH82BxPQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vitest/node_modules/@esbuild/netbsd-x64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.21.5.tgz", + "integrity": "sha512-Woi2MXzXjMULccIwMnLciyZH4nCIMpWQAs049KEeMvOcNADVxo0UBIQPfSmxB3CWKedngg7sWZdLvLczpe0tLg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "netbsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vitest/node_modules/@esbuild/openbsd-x64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.21.5.tgz", + "integrity": "sha512-HLNNw99xsvx12lFBUwoT8EVCsSvRNDVxNpjZ7bPn947b8gJPzeHWyNVhFsaerc0n3TsbOINvRP2byTZ5LKezow==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vitest/node_modules/@esbuild/sunos-x64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.21.5.tgz", + "integrity": "sha512-6+gjmFpfy0BHU5Tpptkuh8+uw3mnrvgs+dSPQXQOv3ekbordwnzTVEb4qnIvQcYXq6gzkyTnoZ9dZG+D4garKg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "sunos" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vitest/node_modules/@esbuild/win32-arm64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.21.5.tgz", + "integrity": "sha512-Z0gOTd75VvXqyq7nsl93zwahcTROgqvuAcYDUr+vOv8uHhNSKROyU961kgtCD1e95IqPKSQKH7tBTslnS3tA8A==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vitest/node_modules/@esbuild/win32-ia32": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.21.5.tgz", + "integrity": "sha512-SWXFF1CL2RVNMaVs+BBClwtfZSvDgtL//G/smwAc5oVK/UPu2Gu9tIaRgFmYFFKrmg3SyAjSrElf0TiJ1v8fYA==", "cpu": [ "ia32" ], @@ -45090,10 +64500,10 @@ "node": ">=12" } }, - "node_modules/vite/node_modules/@esbuild/win32-x64": { - "version": "0.18.20", - "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.18.20.tgz", - "integrity": "sha512-kTdfRcSiDfQca/y9QIkng02avJ+NCaQvrMejlsB3RRv5sE9rRoeBPISaZpKxHELzRxZyLvNts1P27W3wV+8geQ==", + "node_modules/vitest/node_modules/@esbuild/win32-x64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.21.5.tgz", + "integrity": "sha512-tQd/1efJuzPC6rCFwEvLtci/xNFcTZknmXs98FYDfGE4wP9ClFV98nyKrzJKVPMhdDnjzLhdUyMX4PsQAPjwIw==", "cpu": [ "x64" ], @@ -45107,10 +64517,10 @@ "node": ">=12" } }, - "node_modules/vite/node_modules/esbuild": { - "version": "0.18.20", - "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.18.20.tgz", - "integrity": "sha512-ceqxoedUrcayh7Y7ZX6NdbbDzGROiyVBgC4PriJThBKSVPWnnFHZAkfI1lJT8QFkOwH4qOS2SJkS4wvpGl8BpA==", + "node_modules/vitest/node_modules/esbuild": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.21.5.tgz", + "integrity": "sha512-mg3OPMV4hXywwpoDxu3Qda5xCKQi+vCTZq8S9J/EpkhB2HzKXq4SNFZE3+NK93JYxc8VMSep+lOUSC/RVKaBqw==", "dev": true, "hasInstallScript": true, "license": "MIT", @@ -45121,608 +64531,852 @@ "node": ">=12" }, "optionalDependencies": { - "@esbuild/android-arm": "0.18.20", - "@esbuild/android-arm64": "0.18.20", - "@esbuild/android-x64": "0.18.20", - "@esbuild/darwin-arm64": "0.18.20", - "@esbuild/darwin-x64": "0.18.20", - "@esbuild/freebsd-arm64": "0.18.20", - "@esbuild/freebsd-x64": "0.18.20", - "@esbuild/linux-arm": "0.18.20", - "@esbuild/linux-arm64": "0.18.20", - "@esbuild/linux-ia32": "0.18.20", - "@esbuild/linux-loong64": "0.18.20", - "@esbuild/linux-mips64el": "0.18.20", - "@esbuild/linux-ppc64": "0.18.20", - "@esbuild/linux-riscv64": "0.18.20", - "@esbuild/linux-s390x": "0.18.20", - "@esbuild/linux-x64": "0.18.20", - "@esbuild/netbsd-x64": "0.18.20", - "@esbuild/openbsd-x64": "0.18.20", - "@esbuild/sunos-x64": "0.18.20", - "@esbuild/win32-arm64": "0.18.20", - "@esbuild/win32-ia32": "0.18.20", - "@esbuild/win32-x64": "0.18.20" + "@esbuild/aix-ppc64": "0.21.5", + "@esbuild/android-arm": "0.21.5", + "@esbuild/android-arm64": "0.21.5", + "@esbuild/android-x64": "0.21.5", + "@esbuild/darwin-arm64": "0.21.5", + "@esbuild/darwin-x64": "0.21.5", + "@esbuild/freebsd-arm64": "0.21.5", + "@esbuild/freebsd-x64": "0.21.5", + "@esbuild/linux-arm": "0.21.5", + "@esbuild/linux-arm64": "0.21.5", + "@esbuild/linux-ia32": "0.21.5", + "@esbuild/linux-loong64": "0.21.5", + "@esbuild/linux-mips64el": "0.21.5", + "@esbuild/linux-ppc64": "0.21.5", + "@esbuild/linux-riscv64": "0.21.5", + "@esbuild/linux-s390x": "0.21.5", + "@esbuild/linux-x64": "0.21.5", + "@esbuild/netbsd-x64": "0.21.5", + "@esbuild/openbsd-x64": "0.21.5", + "@esbuild/sunos-x64": "0.21.5", + "@esbuild/win32-arm64": "0.21.5", + "@esbuild/win32-ia32": "0.21.5", + "@esbuild/win32-x64": "0.21.5" } }, - "node_modules/vite/node_modules/rollup": { - "version": "3.29.5", - "resolved": "https://registry.npmjs.org/rollup/-/rollup-3.29.5.tgz", - "integrity": "sha512-GVsDdsbJzzy4S/v3dqWPJ7EfvZJfCHiDqe80IyrF59LYuP+e6U1LJoUqeuqRbwAWoMNoXivMNeNAOf5E22VA1w==", + "node_modules/vitest/node_modules/execa": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/execa/-/execa-8.0.1.tgz", + "integrity": "sha512-VyhnebXciFV2DESc+p6B+y0LjSm0krU4OgJN44qFAhBY0TJ+1V61tYD2+wHusZ6F9n5K+vl8k0sTy7PEfV4qpg==", "dev": true, "license": "MIT", - "bin": { - "rollup": "dist/bin/rollup" + "dependencies": { + "cross-spawn": "^7.0.3", + "get-stream": "^8.0.1", + "human-signals": "^5.0.0", + "is-stream": "^3.0.0", + "merge-stream": "^2.0.0", + "npm-run-path": "^5.1.0", + "onetime": "^6.0.0", + "signal-exit": "^4.1.0", + "strip-final-newline": "^3.0.0" }, "engines": { - "node": ">=14.18.0", - "npm": ">=8.0.0" + "node": ">=16.17" }, - "optionalDependencies": { - "fsevents": "~2.3.2" + "funding": { + "url": "https://github.com/sindresorhus/execa?sponsor=1" } }, - "node_modules/vitest": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/vitest/-/vitest-1.4.0.tgz", - "integrity": "sha512-gujzn0g7fmwf83/WzrDTnncZt2UiXP41mHuFYFrdwaLRVQ6JYQEiME2IfEjU3vcFL3VKa75XhI3lFgn+hfVsQw==", + "node_modules/vitest/node_modules/get-stream": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-8.0.1.tgz", + "integrity": "sha512-VaUJspBffn/LMCJVoMvSAdmscJyS1auj5Zulnn5UoYcY531UWmdwhRWkcGKnGU93m5HSXP9LP2usOryrBtQowA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/vitest/node_modules/human-signals": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-5.0.0.tgz", + "integrity": "sha512-AXcZb6vzzrFAUE61HnN4mpLqd/cSIwNQjtNWR0euPm6y0iqx3G4gOXaIDdtdDwZmhwe82LA6+zinmW4UBWVePQ==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=16.17.0" + } + }, + "node_modules/vitest/node_modules/is-stream": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-3.0.0.tgz", + "integrity": "sha512-LnQR4bZ9IADDRSkvpqMGvt/tEJWclzklNgSw48V5EAaAeDd6qGvN8ei6k5p0tvxSR171VmGyHuTiAOfxAbr8kA==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/vitest/node_modules/mimic-fn": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-4.0.0.tgz", + "integrity": "sha512-vqiC06CuhBTUdZH+RYl8sFrL096vA45Ok5ISO6sE/Mr1jRbGH4Csnhi8f3wKVl7x8mO4Au7Ir9D3Oyv1VYMFJw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/vitest/node_modules/npm-run-path": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-5.3.0.tgz", + "integrity": "sha512-ppwTtiJZq0O/ai0z7yfudtBpWIoxM8yE6nHi1X47eFR2EWORqfbu6CnPlNsjeN683eT0qG6H/Pyf9fCcvjnnnQ==", "dev": true, "license": "MIT", "dependencies": { - "@vitest/expect": "1.4.0", - "@vitest/runner": "1.4.0", - "@vitest/snapshot": "1.4.0", - "@vitest/spy": "1.4.0", - "@vitest/utils": "1.4.0", - "acorn-walk": "^8.3.2", - "chai": "^4.3.10", - "debug": "^4.3.4", - "execa": "^8.0.1", - "local-pkg": "^0.5.0", - "magic-string": "^0.30.5", - "pathe": "^1.1.1", - "picocolors": "^1.0.0", - "std-env": "^3.5.0", - "strip-literal": "^2.0.0", - "tinybench": "^2.5.1", - "tinypool": "^0.8.2", - "vite": "^5.0.0", - "vite-node": "1.4.0", - "why-is-node-running": "^2.2.2" + "path-key": "^4.0.0" + }, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/vitest/node_modules/onetime": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-6.0.0.tgz", + "integrity": "sha512-1FlR+gjXK7X+AsAHso35MnyN5KqGwJRi/31ft6x0M194ht7S+rWAvd7PHss9xSKMzE0asv1pyIHaJYq+BbacAQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "mimic-fn": "^4.0.0" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/vitest/node_modules/path-key": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-4.0.0.tgz", + "integrity": "sha512-haREypq7xkM7ErfgIyA0z+Bj4AGKlMSdlQE2jvJo6huWD1EdkKYV+G/T4nq0YEF2vgTT8kqMFKo1uHn950r4SQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/vitest/node_modules/strip-final-newline": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-3.0.0.tgz", + "integrity": "sha512-dOESqjYr96iWYylGObzd39EuNTa5VJxyvVAEm5Jnh7KGo75V43Hk1odPQkNDyXNmUR6k+gEiDVXnjB8HJ3crXw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/vitest/node_modules/vite": { + "version": "5.4.20", + "resolved": "https://registry.npmjs.org/vite/-/vite-5.4.20.tgz", + "integrity": "sha512-j3lYzGC3P+B5Yfy/pfKNgVEg4+UtcIJcVRt2cDjIOmhLourAqPqf8P7acgxeiSgUB7E3p2P8/3gNIgDLpwzs4g==", + "dev": true, + "license": "MIT", + "dependencies": { + "esbuild": "^0.21.3", + "postcss": "^8.4.43", + "rollup": "^4.20.0" }, "bin": { - "vitest": "vitest.mjs" + "vite": "bin/vite.js" }, "engines": { "node": "^18.0.0 || >=20.0.0" }, "funding": { - "url": "https://opencollective.com/vitest" + "url": "https://github.com/vitejs/vite?sponsor=1" + }, + "optionalDependencies": { + "fsevents": "~2.3.3" }, "peerDependencies": { - "@edge-runtime/vm": "*", "@types/node": "^18.0.0 || >=20.0.0", - "@vitest/browser": "1.4.0", - "@vitest/ui": "1.4.0", - "happy-dom": "*", - "jsdom": "*" + "less": "*", + "lightningcss": "^1.21.0", + "sass": "*", + "sass-embedded": "*", + "stylus": "*", + "sugarss": "*", + "terser": "^5.4.0" }, "peerDependenciesMeta": { - "@edge-runtime/vm": { + "@types/node": { "optional": true }, - "@types/node": { + "less": { "optional": true }, - "@vitest/browser": { + "lightningcss": { "optional": true }, - "@vitest/ui": { + "sass": { "optional": true }, - "happy-dom": { + "sass-embedded": { "optional": true }, - "jsdom": { + "stylus": { + "optional": true + }, + "sugarss": { + "optional": true + }, + "terser": { "optional": true } } }, - "node_modules/vitest/node_modules/@esbuild/aix-ppc64": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.21.5.tgz", - "integrity": "sha512-1SDgH6ZSPTlggy1yI6+Dbkiz8xzpHJEVAlF/AM1tHPLsf5STom9rwtjE4hKAF20FfXXNTFqEYXyJNWh1GiZedQ==", - "cpu": [ - "ppc64" - ], + "node_modules/vlq": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/vlq/-/vlq-1.0.1.tgz", + "integrity": "sha512-gQpnTgkubC6hQgdIcRdYGDSDc+SaujOdyesZQMv6JlfQee/9Mp0Qhnys6WxDWvQnL5WZdT7o2Ul187aSt0Rq+w==", + "license": "MIT" + }, + "node_modules/vm-browserify": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/vm-browserify/-/vm-browserify-1.1.2.tgz", + "integrity": "sha512-2ham8XPWTONajOR0ohOKOHXkm3+gaBmGut3SRuu75xLd/RRaY6vqgh8NBYYk7+RW3u5AtzPQZG8F10LHkl0lAQ==", "dev": true, + "license": "MIT" + }, + "node_modules/void-elements": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/void-elements/-/void-elements-3.1.0.tgz", + "integrity": "sha512-Dhxzh5HZuiHQhbvTW9AMetFfBHDMYpo23Uo9btPXgdYP+3T5S+p+jgNy7spra+veYhBP2dCSgxR/i2Y02h5/6w==", "license": "MIT", - "optional": true, - "os": [ - "aix" - ], "engines": { - "node": ">=12" + "node": ">=0.10.0" } }, - "node_modules/vitest/node_modules/@esbuild/android-arm": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.21.5.tgz", - "integrity": "sha512-vCPvzSjpPHEi1siZdlvAlsPxXl7WbOVUBBAowWug4rJHb68Ox8KualB+1ocNvT5fjv6wpkX6o/iEpbDrf68zcg==", - "cpu": [ - "arm" - ], - "dev": true, + "node_modules/vscode-jsonrpc": { + "version": "8.2.0", + "resolved": "https://registry.npmjs.org/vscode-jsonrpc/-/vscode-jsonrpc-8.2.0.tgz", + "integrity": "sha512-C+r0eKJUIfiDIfwJhria30+TYWPtuHJXHtI7J0YlOmKAo7ogxP20T0zxB7HZQIFhIyvoBPwWskjxrvAtfjyZfA==", "license": "MIT", - "optional": true, - "os": [ - "android" - ], "engines": { - "node": ">=12" + "node": ">=14.0.0" } }, - "node_modules/vitest/node_modules/@esbuild/android-arm64": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.21.5.tgz", - "integrity": "sha512-c0uX9VAUBQ7dTDCjq+wdyGLowMdtR/GoC2U5IYk/7D1H1JYC0qseD7+11iMP2mRLN9RcCMRcjC4YMclCzGwS/A==", - "cpu": [ - "arm64" - ], - "dev": true, + "node_modules/vscode-languageserver": { + "version": "9.0.1", + "resolved": "https://registry.npmjs.org/vscode-languageserver/-/vscode-languageserver-9.0.1.tgz", + "integrity": "sha512-woByF3PDpkHFUreUa7Hos7+pUWdeWMXRd26+ZX2A8cFx6v/JPTtd4/uN0/jB6XQHYaOlHbio03NTHCqrgG5n7g==", "license": "MIT", - "optional": true, - "os": [ - "android" - ], - "engines": { - "node": ">=12" + "dependencies": { + "vscode-languageserver-protocol": "3.17.5" + }, + "bin": { + "installServerIntoExtension": "bin/installServerIntoExtension" } }, - "node_modules/vitest/node_modules/@esbuild/android-x64": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.21.5.tgz", - "integrity": "sha512-D7aPRUUNHRBwHxzxRvp856rjUHRFW1SdQATKXH2hqA0kAZb1hKmi02OpYRacl0TxIGz/ZmXWlbZgjwWYaCakTA==", - "cpu": [ - "x64" - ], - "dev": true, + "node_modules/vscode-languageserver-protocol": { + "version": "3.17.5", + "resolved": "https://registry.npmjs.org/vscode-languageserver-protocol/-/vscode-languageserver-protocol-3.17.5.tgz", + "integrity": "sha512-mb1bvRJN8SVznADSGWM9u/b07H7Ecg0I3OgXDuLdn307rl/J3A9YD6/eYOssqhecL27hK1IPZAsaqh00i/Jljg==", "license": "MIT", - "optional": true, - "os": [ - "android" - ], - "engines": { - "node": ">=12" + "dependencies": { + "vscode-jsonrpc": "8.2.0", + "vscode-languageserver-types": "3.17.5" } }, - "node_modules/vitest/node_modules/@esbuild/darwin-arm64": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.21.5.tgz", - "integrity": "sha512-DwqXqZyuk5AiWWf3UfLiRDJ5EDd49zg6O9wclZ7kUMv2WRFr4HKjXp/5t8JZ11QbQfUS6/cRCKGwYhtNAY88kQ==", - "cpu": [ - "arm64" - ], + "node_modules/vscode-languageserver-textdocument": { + "version": "1.0.12", + "resolved": "https://registry.npmjs.org/vscode-languageserver-textdocument/-/vscode-languageserver-textdocument-1.0.12.tgz", + "integrity": "sha512-cxWNPesCnQCcMPeenjKKsOCKQZ/L6Tv19DTRIGuLWe32lyzWhihGVJ/rcckZXJxfdKCFvRLS3fpBIsV/ZGX4zA==", + "license": "MIT" + }, + "node_modules/vscode-languageserver-types": { + "version": "3.17.5", + "resolved": "https://registry.npmjs.org/vscode-languageserver-types/-/vscode-languageserver-types-3.17.5.tgz", + "integrity": "sha512-Ld1VelNuX9pdF39h2Hgaeb5hEZM2Z3jUrrMgWQAu82jMtZp7p3vJT3BzToKtZI7NgQssZje5o0zryOrhQvzQAg==", + "license": "MIT" + }, + "node_modules/vscode-uri": { + "version": "3.0.8", + "resolved": "https://registry.npmjs.org/vscode-uri/-/vscode-uri-3.0.8.tgz", + "integrity": "sha512-AyFQ0EVmsOZOlAnxoFOGOq1SQDWAB7C6aqMGS23svWAllfOaxbuFvcT8D1i8z3Gyn8fraVeZNNmN6e9bxxXkKw==", + "license": "MIT" + }, + "node_modules/w3c-xmlserializer": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/w3c-xmlserializer/-/w3c-xmlserializer-5.0.0.tgz", + "integrity": "sha512-o8qghlI8NZHU1lLPrpi2+Uq7abh4GGPpYANlalzWxyWteJOCsr/P+oPBA49TOLu5FTZO4d3F9MnWJfiMo4BkmA==", "dev": true, "license": "MIT", - "optional": true, - "os": [ - "darwin" - ], + "dependencies": { + "xml-name-validator": "^5.0.0" + }, "engines": { - "node": ">=12" + "node": ">=18" } }, - "node_modules/vitest/node_modules/@esbuild/darwin-x64": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.21.5.tgz", - "integrity": "sha512-se/JjF8NlmKVG4kNIuyWMV/22ZaerB+qaSi5MdrXtd6R08kvs2qCN4C09miupktDitvh8jRFflwGFBQcxZRjbw==", - "cpu": [ - "x64" - ], - "dev": true, + "node_modules/walker": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/walker/-/walker-1.0.8.tgz", + "integrity": "sha512-ts/8E8l5b7kY0vlWLewOkDXMmPdLcVV4GmOQLyxuSswIJsweeFZtAsMF7k1Nszz+TYBQrlYRmzOnr398y1JemQ==", + "license": "Apache-2.0", + "dependencies": { + "makeerror": "1.0.12" + } + }, + "node_modules/watchpack": { + "version": "2.4.4", + "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-2.4.4.tgz", + "integrity": "sha512-c5EGNOiyxxV5qmTtAB7rbiXxi1ooX1pQKMLX/MIabJjRA0SJBQOjKF+KSVfHkr9U1cADPon0mRiVe/riyaiDUA==", "license": "MIT", - "optional": true, - "os": [ - "darwin" - ], + "dependencies": { + "glob-to-regexp": "^0.4.1", + "graceful-fs": "^4.1.2" + }, "engines": { - "node": ">=12" + "node": ">=10.13.0" } }, - "node_modules/vitest/node_modules/@esbuild/freebsd-arm64": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.21.5.tgz", - "integrity": "sha512-5JcRxxRDUJLX8JXp/wcBCy3pENnCgBR9bN6JsY4OmhfUtIHe3ZW0mawA7+RDAcMLrMIZaf03NlQiX9DGyB8h4g==", - "cpu": [ - "arm64" - ], - "dev": true, + "node_modules/wbuf": { + "version": "1.7.3", + "resolved": "https://registry.npmjs.org/wbuf/-/wbuf-1.7.3.tgz", + "integrity": "sha512-O84QOnr0icsbFGLS0O3bI5FswxzRr8/gHwWkDlQFskhSPryQXvrTMxjxGP4+iWYoauLoBvfDpkrOauZ+0iZpDA==", "license": "MIT", - "optional": true, - "os": [ - "freebsd" - ], - "engines": { - "node": ">=12" + "dependencies": { + "minimalistic-assert": "^1.0.0" } }, - "node_modules/vitest/node_modules/@esbuild/freebsd-x64": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.21.5.tgz", - "integrity": "sha512-J95kNBj1zkbMXtHVH29bBriQygMXqoVQOQYA+ISs0/2l3T9/kj42ow2mpqerRBxDJnmkUDCaQT/dfNXWX/ZZCQ==", - "cpu": [ - "x64" - ], - "dev": true, + "node_modules/wcwidth": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/wcwidth/-/wcwidth-1.0.1.tgz", + "integrity": "sha512-XHPEwS0q6TaxcvG85+8EYkbiCux2XtWG2mkc47Ng2A77BQu9+DqIOJldST4HgPkuea7dvKSj5VgX3P1d4rW8Tg==", "license": "MIT", - "optional": true, - "os": [ - "freebsd" - ], + "dependencies": { + "defaults": "^1.0.3" + } + }, + "node_modules/web-namespaces": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/web-namespaces/-/web-namespaces-2.0.1.tgz", + "integrity": "sha512-bKr1DkiNa2krS7qxNtdrtHAmzuYGFQLiQ13TsorsdT6ULTkPLKuu5+GsFpDlg6JFjUTwX2DyhMPG2be8uPrqsQ==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/web-streams-polyfill": { + "version": "4.0.0-beta.3", + "resolved": "https://registry.npmjs.org/web-streams-polyfill/-/web-streams-polyfill-4.0.0-beta.3.tgz", + "integrity": "sha512-QW95TCTaHmsYfHDybGMwO5IJIM93I/6vTRk+daHTWFPhwh+C8Cg7j7XyKrwrj8Ib6vYXe0ocYNrmzY4xAAN6ug==", + "devOptional": true, + "license": "MIT", + "peer": true, + "engines": { + "node": ">= 14" + } + }, + "node_modules/web3-core-helpers": { + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/web3-core-helpers/-/web3-core-helpers-1.8.0.tgz", + "integrity": "sha512-nMAVwZB3rEp/khHI2BvFy0e/xCryf501p5NGjswmJtEM+Zrd3Biaw52JrB1qAZZIzCA8cmLKaOgdfamoDOpWdw==", + "license": "LGPL-3.0", + "dependencies": { + "web3-eth-iban": "1.8.0", + "web3-utils": "1.8.0" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/web3-core-helpers/node_modules/web3-utils": { + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/web3-utils/-/web3-utils-1.8.0.tgz", + "integrity": "sha512-7nUIl7UWpLVka2f09CMbKOSEvorvHnaugIabU4mj7zfMvm0tSByLcEu3eyV9qgS11qxxLuOkzBIwCstTflhmpQ==", + "license": "LGPL-3.0", + "dependencies": { + "bn.js": "^5.2.1", + "ethereum-bloom-filters": "^1.0.6", + "ethereumjs-util": "^7.1.0", + "ethjs-unit": "0.1.6", + "number-to-bn": "1.7.0", + "randombytes": "^2.1.0", + "utf8": "3.0.0" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/web3-eth-iban": { + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/web3-eth-iban/-/web3-eth-iban-1.8.0.tgz", + "integrity": "sha512-4RbvUxcMpo/e5811sE3a6inJ2H4+FFqUVmlRYs0RaXaxiHweahSRBNcpO0UWgmlePTolj0rXqPT2oEr0DuC8kg==", + "license": "LGPL-3.0", + "dependencies": { + "bn.js": "^5.2.1", + "web3-utils": "1.8.0" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/web3-eth-iban/node_modules/web3-utils": { + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/web3-utils/-/web3-utils-1.8.0.tgz", + "integrity": "sha512-7nUIl7UWpLVka2f09CMbKOSEvorvHnaugIabU4mj7zfMvm0tSByLcEu3eyV9qgS11qxxLuOkzBIwCstTflhmpQ==", + "license": "LGPL-3.0", + "dependencies": { + "bn.js": "^5.2.1", + "ethereum-bloom-filters": "^1.0.6", + "ethereumjs-util": "^7.1.0", + "ethjs-unit": "0.1.6", + "number-to-bn": "1.7.0", + "randombytes": "^2.1.0", + "utf8": "3.0.0" + }, "engines": { - "node": ">=12" + "node": ">=8.0.0" } }, - "node_modules/vitest/node_modules/@esbuild/linux-arm": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.21.5.tgz", - "integrity": "sha512-bPb5AHZtbeNGjCKVZ9UGqGwo8EUu4cLq68E95A53KlxAPRmUyYv2D6F0uUI65XisGOL1hBP5mTronbgo+0bFcA==", - "cpu": [ - "arm" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], + "node_modules/web3-providers-http": { + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/web3-providers-http/-/web3-providers-http-1.8.0.tgz", + "integrity": "sha512-/MqxwRzExohBWW97mqlCSW/+NHydGRyoEDUS1bAIF2YjfKFwyRtHgrEzOojzkC9JvB+8LofMvbXk9CcltpZapw==", + "license": "LGPL-3.0", + "dependencies": { + "abortcontroller-polyfill": "^1.7.3", + "cross-fetch": "^3.1.4", + "es6-promise": "^4.2.8", + "web3-core-helpers": "1.8.0" + }, "engines": { - "node": ">=12" + "node": ">=8.0.0" } }, - "node_modules/vitest/node_modules/@esbuild/linux-arm64": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.21.5.tgz", - "integrity": "sha512-ibKvmyYzKsBeX8d8I7MH/TMfWDXBF3db4qM6sy+7re0YXya+K1cem3on9XgdT2EQGMu4hQyZhan7TeQ8XkGp4Q==", - "cpu": [ - "arm64" - ], + "node_modules/web3-utils": { + "version": "1.10.4", + "resolved": "https://registry.npmjs.org/web3-utils/-/web3-utils-1.10.4.tgz", + "integrity": "sha512-tsu8FiKJLk2PzhDl9fXbGUWTkkVXYhtTA+SmEFkKft+9BgwLxfCRpU96sWv7ICC8zixBNd3JURVoiR3dUXgP8A==", "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], + "license": "LGPL-3.0", + "dependencies": { + "@ethereumjs/util": "^8.1.0", + "bn.js": "^5.2.1", + "ethereum-bloom-filters": "^1.0.6", + "ethereum-cryptography": "^2.1.2", + "ethjs-unit": "0.1.6", + "number-to-bn": "1.7.0", + "randombytes": "^2.1.0", + "utf8": "3.0.0" + }, "engines": { - "node": ">=12" + "node": ">=8.0.0" } }, - "node_modules/vitest/node_modules/@esbuild/linux-ia32": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.21.5.tgz", - "integrity": "sha512-YvjXDqLRqPDl2dvRODYmmhz4rPeVKYvppfGYKSNGdyZkA01046pLWyRKKI3ax8fbJoK5QbxblURkwK/MWY18Tg==", - "cpu": [ - "ia32" - ], + "node_modules/webextension-polyfill": { + "version": "0.10.0", + "resolved": "https://registry.npmjs.org/webextension-polyfill/-/webextension-polyfill-0.10.0.tgz", + "integrity": "sha512-c5s35LgVa5tFaHhrZDnr3FpQpjj1BB+RXhLTYUxGqBVN460HkbM8TBtEqdXWbpTKfzwCcjAZVF7zXCYSKtcp9g==", + "license": "MPL-2.0" + }, + "node_modules/webidl-conversions": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-7.0.0.tgz", + "integrity": "sha512-VwddBukDzu71offAQR975unBIGqfKZpM+8ZX6ySk8nYhVoo5CYaZyzt3YBvYtRtO+aoGlqxPg/B87NGVZ/fu6g==", "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], + "license": "BSD-2-Clause", "engines": { "node": ">=12" } }, - "node_modules/vitest/node_modules/@esbuild/linux-loong64": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.21.5.tgz", - "integrity": "sha512-uHf1BmMG8qEvzdrzAqg2SIG/02+4/DHB6a9Kbya0XDvwDEKCoC8ZRWI5JJvNdUjtciBGFQ5PuBlpEOXQj+JQSg==", - "cpu": [ - "loong64" - ], - "dev": true, + "node_modules/webpack": { + "version": "5.90.1", + "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.90.1.tgz", + "integrity": "sha512-SstPdlAC5IvgFnhiRok8hqJo/+ArAbNv7rhU4fnWGHNVfN59HSQFaxZDSAL3IFG2YmqxuRs+IU33milSxbPlog==", "license": "MIT", - "optional": true, - "os": [ - "linux" - ], + "peer": true, + "dependencies": { + "@types/eslint-scope": "^3.7.3", + "@types/estree": "^1.0.5", + "@webassemblyjs/ast": "^1.11.5", + "@webassemblyjs/wasm-edit": "^1.11.5", + "@webassemblyjs/wasm-parser": "^1.11.5", + "acorn": "^8.7.1", + "acorn-import-assertions": "^1.9.0", + "browserslist": "^4.21.10", + "chrome-trace-event": "^1.0.2", + "enhanced-resolve": "^5.15.0", + "es-module-lexer": "^1.2.1", + "eslint-scope": "5.1.1", + "events": "^3.2.0", + "glob-to-regexp": "^0.4.1", + "graceful-fs": "^4.2.9", + "json-parse-even-better-errors": "^2.3.1", + "loader-runner": "^4.2.0", + "mime-types": "^2.1.27", + "neo-async": "^2.6.2", + "schema-utils": "^3.2.0", + "tapable": "^2.1.1", + "terser-webpack-plugin": "^5.3.10", + "watchpack": "^2.4.0", + "webpack-sources": "^3.2.3" + }, + "bin": { + "webpack": "bin/webpack.js" + }, "engines": { - "node": ">=12" + "node": ">=10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependenciesMeta": { + "webpack-cli": { + "optional": true + } } }, - "node_modules/vitest/node_modules/@esbuild/linux-mips64el": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.21.5.tgz", - "integrity": "sha512-IajOmO+KJK23bj52dFSNCMsz1QP1DqM6cwLUv3W1QwyxkyIWecfafnI555fvSGqEKwjMXVLokcV5ygHW5b3Jbg==", - "cpu": [ - "mips64el" - ], - "dev": true, + "node_modules/webpack-bundle-analyzer": { + "version": "4.10.2", + "resolved": "https://registry.npmjs.org/webpack-bundle-analyzer/-/webpack-bundle-analyzer-4.10.2.tgz", + "integrity": "sha512-vJptkMm9pk5si4Bv922ZbKLV8UTT4zib4FPgXMhgzUny0bfDDkLXAVQs3ly3fS4/TN9ROFtb0NFrm04UXFE/Vw==", "license": "MIT", - "optional": true, - "os": [ - "linux" - ], + "dependencies": { + "@discoveryjs/json-ext": "0.5.7", + "acorn": "^8.0.4", + "acorn-walk": "^8.0.0", + "commander": "^7.2.0", + "debounce": "^1.2.1", + "escape-string-regexp": "^4.0.0", + "gzip-size": "^6.0.0", + "html-escaper": "^2.0.2", + "opener": "^1.5.2", + "picocolors": "^1.0.0", + "sirv": "^2.0.3", + "ws": "^7.3.1" + }, + "bin": { + "webpack-bundle-analyzer": "lib/bin/analyzer.js" + }, "engines": { - "node": ">=12" + "node": ">= 10.13.0" } }, - "node_modules/vitest/node_modules/@esbuild/linux-ppc64": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.21.5.tgz", - "integrity": "sha512-1hHV/Z4OEfMwpLO8rp7CvlhBDnjsC3CttJXIhBi+5Aj5r+MBvy4egg7wCbe//hSsT+RvDAG7s81tAvpL2XAE4w==", - "cpu": [ - "ppc64" - ], - "dev": true, + "node_modules/webpack-bundle-analyzer/node_modules/commander": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-7.2.0.tgz", + "integrity": "sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==", "license": "MIT", - "optional": true, - "os": [ - "linux" - ], "engines": { - "node": ">=12" + "node": ">= 10" } }, - "node_modules/vitest/node_modules/@esbuild/linux-riscv64": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.21.5.tgz", - "integrity": "sha512-2HdXDMd9GMgTGrPWnJzP2ALSokE/0O5HhTUvWIbD3YdjME8JwvSCnNGBnTThKGEB91OZhzrJ4qIIxk/SBmyDDA==", - "cpu": [ - "riscv64" - ], - "dev": true, + "node_modules/webpack-bundle-analyzer/node_modules/ws": { + "version": "7.5.10", + "resolved": "https://registry.npmjs.org/ws/-/ws-7.5.10.tgz", + "integrity": "sha512-+dbF1tHwZpXcbOJdVOkzLDxZP1ailvSxM6ZweXTegylPny803bFhA+vqBYw4s31NSAk4S2Qz+AKXK9a4wkdjcQ==", "license": "MIT", - "optional": true, - "os": [ - "linux" - ], "engines": { - "node": ">=12" + "node": ">=8.3.0" + }, + "peerDependencies": { + "bufferutil": "^4.0.1", + "utf-8-validate": "^5.0.2" + }, + "peerDependenciesMeta": { + "bufferutil": { + "optional": true + }, + "utf-8-validate": { + "optional": true + } } }, - "node_modules/vitest/node_modules/@esbuild/linux-s390x": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.21.5.tgz", - "integrity": "sha512-zus5sxzqBJD3eXxwvjN1yQkRepANgxE9lgOW2qLnmr8ikMTphkjgXu1HR01K4FJg8h1kEEDAqDcZQtbrRnB41A==", - "cpu": [ - "s390x" - ], - "dev": true, + "node_modules/webpack-dev-middleware": { + "version": "7.4.5", + "resolved": "https://registry.npmjs.org/webpack-dev-middleware/-/webpack-dev-middleware-7.4.5.tgz", + "integrity": "sha512-uxQ6YqGdE4hgDKNf7hUiPXOdtkXvBJXrfEGYSx7P7LC8hnUYGK70X6xQXUvXeNyBDDcsiQXpG2m3G9vxowaEuA==", "license": "MIT", - "optional": true, - "os": [ - "linux" - ], + "dependencies": { + "colorette": "^2.0.10", + "memfs": "^4.43.1", + "mime-types": "^3.0.1", + "on-finished": "^2.4.1", + "range-parser": "^1.2.1", + "schema-utils": "^4.0.0" + }, "engines": { - "node": ">=12" + "node": ">= 18.12.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "webpack": "^5.0.0" + }, + "peerDependenciesMeta": { + "webpack": { + "optional": true + } } }, - "node_modules/vitest/node_modules/@esbuild/linux-x64": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.21.5.tgz", - "integrity": "sha512-1rYdTpyv03iycF1+BhzrzQJCdOuAOtaqHTWJZCWvijKD2N5Xu0TtVC8/+1faWqcP9iBCWOmjmhoH94dH82BxPQ==", - "cpu": [ - "x64" - ], - "dev": true, + "node_modules/webpack-dev-middleware/node_modules/ajv": { + "version": "8.17.1", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.17.1.tgz", + "integrity": "sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g==", "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" + "dependencies": { + "fast-deep-equal": "^3.1.3", + "fast-uri": "^3.0.1", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" } }, - "node_modules/vitest/node_modules/@esbuild/netbsd-x64": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.21.5.tgz", - "integrity": "sha512-Woi2MXzXjMULccIwMnLciyZH4nCIMpWQAs049KEeMvOcNADVxo0UBIQPfSmxB3CWKedngg7sWZdLvLczpe0tLg==", - "cpu": [ - "x64" - ], - "dev": true, + "node_modules/webpack-dev-middleware/node_modules/ajv-keywords": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-5.1.0.tgz", + "integrity": "sha512-YCS/JNFAUyr5vAuhk1DWm1CBxRHW9LbJ2ozWeemrIqpbsqKjHVxYPyi5GC0rjZIT5JxJ3virVTS8wk4i/Z+krw==", "license": "MIT", - "optional": true, - "os": [ - "netbsd" - ], - "engines": { - "node": ">=12" + "dependencies": { + "fast-deep-equal": "^3.1.3" + }, + "peerDependencies": { + "ajv": "^8.8.2" } }, - "node_modules/vitest/node_modules/@esbuild/openbsd-x64": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.21.5.tgz", - "integrity": "sha512-HLNNw99xsvx12lFBUwoT8EVCsSvRNDVxNpjZ7bPn947b8gJPzeHWyNVhFsaerc0n3TsbOINvRP2byTZ5LKezow==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "openbsd" - ], - "engines": { - "node": ">=12" + "node_modules/webpack-dev-middleware/node_modules/json-schema-traverse": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", + "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", + "license": "MIT" + }, + "node_modules/webpack-dev-middleware/node_modules/memfs": { + "version": "4.51.1", + "resolved": "https://registry.npmjs.org/memfs/-/memfs-4.51.1.tgz", + "integrity": "sha512-Eyt3XrufitN2ZL9c/uIRMyDwXanLI88h/L3MoWqNY747ha3dMR9dWqp8cRT5ntjZ0U1TNuq4U91ZXK0sMBjYOQ==", + "license": "Apache-2.0", + "dependencies": { + "@jsonjoy.com/json-pack": "^1.11.0", + "@jsonjoy.com/util": "^1.9.0", + "glob-to-regex.js": "^1.0.1", + "thingies": "^2.5.0", + "tree-dump": "^1.0.3", + "tslib": "^2.0.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/streamich" } }, - "node_modules/vitest/node_modules/@esbuild/sunos-x64": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.21.5.tgz", - "integrity": "sha512-6+gjmFpfy0BHU5Tpptkuh8+uw3mnrvgs+dSPQXQOv3ekbordwnzTVEb4qnIvQcYXq6gzkyTnoZ9dZG+D4garKg==", - "cpu": [ - "x64" - ], - "dev": true, + "node_modules/webpack-dev-middleware/node_modules/schema-utils": { + "version": "4.3.3", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-4.3.3.tgz", + "integrity": "sha512-eflK8wEtyOE6+hsaRVPxvUKYCpRgzLqDTb8krvAsRIwOGlHoSgYLgBXoubGgLd2fT41/OUYdb48v4k4WWHQurA==", "license": "MIT", - "optional": true, - "os": [ - "sunos" - ], + "dependencies": { + "@types/json-schema": "^7.0.9", + "ajv": "^8.9.0", + "ajv-formats": "^2.1.1", + "ajv-keywords": "^5.1.0" + }, "engines": { - "node": ">=12" + "node": ">= 10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" } }, - "node_modules/vitest/node_modules/@esbuild/win32-arm64": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.21.5.tgz", - "integrity": "sha512-Z0gOTd75VvXqyq7nsl93zwahcTROgqvuAcYDUr+vOv8uHhNSKROyU961kgtCD1e95IqPKSQKH7tBTslnS3tA8A==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "win32" - ], + "node_modules/webpack-dev-server": { + "version": "5.2.2", + "resolved": "https://registry.npmjs.org/webpack-dev-server/-/webpack-dev-server-5.2.2.tgz", + "integrity": "sha512-QcQ72gh8a+7JO63TAx/6XZf/CWhgMzu5m0QirvPfGvptOusAxG12w2+aua1Jkjr7hzaWDnJ2n6JFeexMHI+Zjg==", + "license": "MIT", + "dependencies": { + "@types/bonjour": "^3.5.13", + "@types/connect-history-api-fallback": "^1.5.4", + "@types/express": "^4.17.21", + "@types/express-serve-static-core": "^4.17.21", + "@types/serve-index": "^1.9.4", + "@types/serve-static": "^1.15.5", + "@types/sockjs": "^0.3.36", + "@types/ws": "^8.5.10", + "ansi-html-community": "^0.0.8", + "bonjour-service": "^1.2.1", + "chokidar": "^3.6.0", + "colorette": "^2.0.10", + "compression": "^1.7.4", + "connect-history-api-fallback": "^2.0.0", + "express": "^4.21.2", + "graceful-fs": "^4.2.6", + "http-proxy-middleware": "^2.0.9", + "ipaddr.js": "^2.1.0", + "launch-editor": "^2.6.1", + "open": "^10.0.3", + "p-retry": "^6.2.0", + "schema-utils": "^4.2.0", + "selfsigned": "^2.4.1", + "serve-index": "^1.9.1", + "sockjs": "^0.3.24", + "spdy": "^4.0.2", + "webpack-dev-middleware": "^7.4.2", + "ws": "^8.18.0" + }, + "bin": { + "webpack-dev-server": "bin/webpack-dev-server.js" + }, "engines": { - "node": ">=12" + "node": ">= 18.12.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "webpack": "^5.0.0" + }, + "peerDependenciesMeta": { + "webpack": { + "optional": true + }, + "webpack-cli": { + "optional": true + } } }, - "node_modules/vitest/node_modules/@esbuild/win32-ia32": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.21.5.tgz", - "integrity": "sha512-SWXFF1CL2RVNMaVs+BBClwtfZSvDgtL//G/smwAc5oVK/UPu2Gu9tIaRgFmYFFKrmg3SyAjSrElf0TiJ1v8fYA==", - "cpu": [ - "ia32" - ], - "dev": true, + "node_modules/webpack-dev-server/node_modules/accepts": { + "version": "1.3.8", + "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.8.tgz", + "integrity": "sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==", "license": "MIT", - "optional": true, - "os": [ - "win32" - ], + "dependencies": { + "mime-types": "~2.1.34", + "negotiator": "0.6.3" + }, "engines": { - "node": ">=12" + "node": ">= 0.6" } }, - "node_modules/vitest/node_modules/@esbuild/win32-x64": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.21.5.tgz", - "integrity": "sha512-tQd/1efJuzPC6rCFwEvLtci/xNFcTZknmXs98FYDfGE4wP9ClFV98nyKrzJKVPMhdDnjzLhdUyMX4PsQAPjwIw==", - "cpu": [ - "x64" - ], - "dev": true, + "node_modules/webpack-dev-server/node_modules/ajv": { + "version": "8.17.1", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.17.1.tgz", + "integrity": "sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g==", "license": "MIT", - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">=12" + "dependencies": { + "fast-deep-equal": "^3.1.3", + "fast-uri": "^3.0.1", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" } }, - "node_modules/vitest/node_modules/esbuild": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.21.5.tgz", - "integrity": "sha512-mg3OPMV4hXywwpoDxu3Qda5xCKQi+vCTZq8S9J/EpkhB2HzKXq4SNFZE3+NK93JYxc8VMSep+lOUSC/RVKaBqw==", - "dev": true, - "hasInstallScript": true, + "node_modules/webpack-dev-server/node_modules/ajv-keywords": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-5.1.0.tgz", + "integrity": "sha512-YCS/JNFAUyr5vAuhk1DWm1CBxRHW9LbJ2ozWeemrIqpbsqKjHVxYPyi5GC0rjZIT5JxJ3virVTS8wk4i/Z+krw==", "license": "MIT", - "bin": { - "esbuild": "bin/esbuild" - }, - "engines": { - "node": ">=12" + "dependencies": { + "fast-deep-equal": "^3.1.3" }, - "optionalDependencies": { - "@esbuild/aix-ppc64": "0.21.5", - "@esbuild/android-arm": "0.21.5", - "@esbuild/android-arm64": "0.21.5", - "@esbuild/android-x64": "0.21.5", - "@esbuild/darwin-arm64": "0.21.5", - "@esbuild/darwin-x64": "0.21.5", - "@esbuild/freebsd-arm64": "0.21.5", - "@esbuild/freebsd-x64": "0.21.5", - "@esbuild/linux-arm": "0.21.5", - "@esbuild/linux-arm64": "0.21.5", - "@esbuild/linux-ia32": "0.21.5", - "@esbuild/linux-loong64": "0.21.5", - "@esbuild/linux-mips64el": "0.21.5", - "@esbuild/linux-ppc64": "0.21.5", - "@esbuild/linux-riscv64": "0.21.5", - "@esbuild/linux-s390x": "0.21.5", - "@esbuild/linux-x64": "0.21.5", - "@esbuild/netbsd-x64": "0.21.5", - "@esbuild/openbsd-x64": "0.21.5", - "@esbuild/sunos-x64": "0.21.5", - "@esbuild/win32-arm64": "0.21.5", - "@esbuild/win32-ia32": "0.21.5", - "@esbuild/win32-x64": "0.21.5" + "peerDependencies": { + "ajv": "^8.8.2" } }, - "node_modules/vitest/node_modules/execa": { - "version": "8.0.1", - "resolved": "https://registry.npmjs.org/execa/-/execa-8.0.1.tgz", - "integrity": "sha512-VyhnebXciFV2DESc+p6B+y0LjSm0krU4OgJN44qFAhBY0TJ+1V61tYD2+wHusZ6F9n5K+vl8k0sTy7PEfV4qpg==", - "dev": true, + "node_modules/webpack-dev-server/node_modules/body-parser": { + "version": "1.20.4", + "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.4.tgz", + "integrity": "sha512-ZTgYYLMOXY9qKU/57FAo8F+HA2dGX7bqGc71txDRC1rS4frdFI5R7NhluHxH6M0YItAP0sHB4uqAOcYKxO6uGA==", "license": "MIT", "dependencies": { - "cross-spawn": "^7.0.3", - "get-stream": "^8.0.1", - "human-signals": "^5.0.0", - "is-stream": "^3.0.0", - "merge-stream": "^2.0.0", - "npm-run-path": "^5.1.0", - "onetime": "^6.0.0", - "signal-exit": "^4.1.0", - "strip-final-newline": "^3.0.0" + "bytes": "~3.1.2", + "content-type": "~1.0.5", + "debug": "2.6.9", + "depd": "2.0.0", + "destroy": "~1.2.0", + "http-errors": "~2.0.1", + "iconv-lite": "~0.4.24", + "on-finished": "~2.4.1", + "qs": "~6.14.0", + "raw-body": "~2.5.3", + "type-is": "~1.6.18", + "unpipe": "~1.0.0" }, "engines": { - "node": ">=16.17" - }, - "funding": { - "url": "https://github.com/sindresorhus/execa?sponsor=1" + "node": ">= 0.8", + "npm": "1.2.8000 || >= 1.4.16" } }, - "node_modules/vitest/node_modules/get-stream": { - "version": "8.0.1", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-8.0.1.tgz", - "integrity": "sha512-VaUJspBffn/LMCJVoMvSAdmscJyS1auj5Zulnn5UoYcY531UWmdwhRWkcGKnGU93m5HSXP9LP2usOryrBtQowA==", - "dev": true, + "node_modules/webpack-dev-server/node_modules/connect-history-api-fallback": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/connect-history-api-fallback/-/connect-history-api-fallback-2.0.0.tgz", + "integrity": "sha512-U73+6lQFmfiNPrYbXqr6kZ1i1wiRqXnp2nhMsINseWXO8lDau0LGEffJ8kQi4EjLZympVgRdvqjAgiZ1tgzDDA==", "license": "MIT", "engines": { - "node": ">=16" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">=0.8" } }, - "node_modules/vitest/node_modules/human-signals": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-5.0.0.tgz", - "integrity": "sha512-AXcZb6vzzrFAUE61HnN4mpLqd/cSIwNQjtNWR0euPm6y0iqx3G4gOXaIDdtdDwZmhwe82LA6+zinmW4UBWVePQ==", - "dev": true, - "license": "Apache-2.0", + "node_modules/webpack-dev-server/node_modules/content-disposition": { + "version": "0.5.4", + "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.4.tgz", + "integrity": "sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==", + "license": "MIT", + "dependencies": { + "safe-buffer": "5.2.1" + }, "engines": { - "node": ">=16.17.0" + "node": ">= 0.6" } }, - "node_modules/vitest/node_modules/is-stream": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-3.0.0.tgz", - "integrity": "sha512-LnQR4bZ9IADDRSkvpqMGvt/tEJWclzklNgSw48V5EAaAeDd6qGvN8ei6k5p0tvxSR171VmGyHuTiAOfxAbr8kA==", - "dev": true, + "node_modules/webpack-dev-server/node_modules/cookie-signature": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.7.tgz", + "integrity": "sha512-NXdYc3dLr47pBkpUCHtKSwIOQXLVn8dZEuywboCOJY/osA0wFSLlSawr3KN8qXJEyX66FcONTH8EIlVuK0yyFA==", + "license": "MIT" + }, + "node_modules/webpack-dev-server/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", "license": "MIT", - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "dependencies": { + "ms": "2.0.0" } }, - "node_modules/vitest/node_modules/mimic-fn": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-4.0.0.tgz", - "integrity": "sha512-vqiC06CuhBTUdZH+RYl8sFrL096vA45Ok5ISO6sE/Mr1jRbGH4Csnhi8f3wKVl7x8mO4Au7Ir9D3Oyv1VYMFJw==", - "dev": true, + "node_modules/webpack-dev-server/node_modules/debug/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "license": "MIT" + }, + "node_modules/webpack-dev-server/node_modules/define-lazy-prop": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/define-lazy-prop/-/define-lazy-prop-3.0.0.tgz", + "integrity": "sha512-N+MeXYoqr3pOgn8xfyRPREN7gHakLYjhsHhWGT3fWAiL4IkAt0iDw14QiiEm2bE30c5XX5q0FtAA3CK5f9/BUg==", "license": "MIT", "engines": { "node": ">=12" @@ -45731,359 +65385,301 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/vitest/node_modules/npm-run-path": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-5.3.0.tgz", - "integrity": "sha512-ppwTtiJZq0O/ai0z7yfudtBpWIoxM8yE6nHi1X47eFR2EWORqfbu6CnPlNsjeN683eT0qG6H/Pyf9fCcvjnnnQ==", - "dev": true, + "node_modules/webpack-dev-server/node_modules/express": { + "version": "4.22.1", + "resolved": "https://registry.npmjs.org/express/-/express-4.22.1.tgz", + "integrity": "sha512-F2X8g9P1X7uCPZMA3MVf9wcTqlyNp7IhH5qPCI0izhaOIYXaW9L535tGA3qmjRzpH+bZczqq7hVKxTR4NWnu+g==", "license": "MIT", "dependencies": { - "path-key": "^4.0.0" + "accepts": "~1.3.8", + "array-flatten": "1.1.1", + "body-parser": "~1.20.3", + "content-disposition": "~0.5.4", + "content-type": "~1.0.4", + "cookie": "~0.7.1", + "cookie-signature": "~1.0.6", + "debug": "2.6.9", + "depd": "2.0.0", + "encodeurl": "~2.0.0", + "escape-html": "~1.0.3", + "etag": "~1.8.1", + "finalhandler": "~1.3.1", + "fresh": "~0.5.2", + "http-errors": "~2.0.0", + "merge-descriptors": "1.0.3", + "methods": "~1.1.2", + "on-finished": "~2.4.1", + "parseurl": "~1.3.3", + "path-to-regexp": "~0.1.12", + "proxy-addr": "~2.0.7", + "qs": "~6.14.0", + "range-parser": "~1.2.1", + "safe-buffer": "5.2.1", + "send": "~0.19.0", + "serve-static": "~1.16.2", + "setprototypeof": "1.2.0", + "statuses": "~2.0.1", + "type-is": "~1.6.18", + "utils-merge": "1.0.1", + "vary": "~1.1.2" }, "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + "node": ">= 0.10.0" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "type": "opencollective", + "url": "https://opencollective.com/express" } }, - "node_modules/vitest/node_modules/onetime": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/onetime/-/onetime-6.0.0.tgz", - "integrity": "sha512-1FlR+gjXK7X+AsAHso35MnyN5KqGwJRi/31ft6x0M194ht7S+rWAvd7PHss9xSKMzE0asv1pyIHaJYq+BbacAQ==", - "dev": true, + "node_modules/webpack-dev-server/node_modules/finalhandler": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.3.2.tgz", + "integrity": "sha512-aA4RyPcd3badbdABGDuTXCMTtOneUCAYH/gxoYRTZlIJdF0YPWuGqiAsIrhNnnqdXGswYk6dGujem4w80UJFhg==", "license": "MIT", "dependencies": { - "mimic-fn": "^4.0.0" + "debug": "2.6.9", + "encodeurl": "~2.0.0", + "escape-html": "~1.0.3", + "on-finished": "~2.4.1", + "parseurl": "~1.3.3", + "statuses": "~2.0.2", + "unpipe": "~1.0.0" }, "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">= 0.8" } }, - "node_modules/vitest/node_modules/path-key": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-4.0.0.tgz", - "integrity": "sha512-haREypq7xkM7ErfgIyA0z+Bj4AGKlMSdlQE2jvJo6huWD1EdkKYV+G/T4nq0YEF2vgTT8kqMFKo1uHn950r4SQ==", - "dev": true, + "node_modules/webpack-dev-server/node_modules/fresh": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", + "integrity": "sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==", "license": "MIT", "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">= 0.6" } }, - "node_modules/vitest/node_modules/strip-final-newline": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-3.0.0.tgz", - "integrity": "sha512-dOESqjYr96iWYylGObzd39EuNTa5VJxyvVAEm5Jnh7KGo75V43Hk1odPQkNDyXNmUR6k+gEiDVXnjB8HJ3crXw==", - "dev": true, + "node_modules/webpack-dev-server/node_modules/http-errors": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.1.tgz", + "integrity": "sha512-4FbRdAX+bSdmo4AUFuS0WNiPz8NgFt+r8ThgNWmlrjQjt1Q7ZR9+zTlce2859x4KSXrwIsaeTqDoKQmtP8pLmQ==", "license": "MIT", + "dependencies": { + "depd": "~2.0.0", + "inherits": "~2.0.4", + "setprototypeof": "~1.2.0", + "statuses": "~2.0.2", + "toidentifier": "~1.0.1" + }, "engines": { - "node": ">=12" + "node": ">= 0.8" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "type": "opencollective", + "url": "https://opencollective.com/express" } }, - "node_modules/vitest/node_modules/vite": { - "version": "5.4.20", - "resolved": "https://registry.npmjs.org/vite/-/vite-5.4.20.tgz", - "integrity": "sha512-j3lYzGC3P+B5Yfy/pfKNgVEg4+UtcIJcVRt2cDjIOmhLourAqPqf8P7acgxeiSgUB7E3p2P8/3gNIgDLpwzs4g==", - "dev": true, + "node_modules/webpack-dev-server/node_modules/iconv-lite": { + "version": "0.4.24", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", + "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", "license": "MIT", "dependencies": { - "esbuild": "^0.21.3", - "postcss": "^8.4.43", - "rollup": "^4.20.0" - }, - "bin": { - "vite": "bin/vite.js" + "safer-buffer": ">= 2.1.2 < 3" }, "engines": { - "node": "^18.0.0 || >=20.0.0" - }, - "funding": { - "url": "https://github.com/vitejs/vite?sponsor=1" - }, - "optionalDependencies": { - "fsevents": "~2.3.3" - }, - "peerDependencies": { - "@types/node": "^18.0.0 || >=20.0.0", - "less": "*", - "lightningcss": "^1.21.0", - "sass": "*", - "sass-embedded": "*", - "stylus": "*", - "sugarss": "*", - "terser": "^5.4.0" - }, - "peerDependenciesMeta": { - "@types/node": { - "optional": true - }, - "less": { - "optional": true - }, - "lightningcss": { - "optional": true - }, - "sass": { - "optional": true - }, - "sass-embedded": { - "optional": true - }, - "stylus": { - "optional": true - }, - "sugarss": { - "optional": true - }, - "terser": { - "optional": true - } + "node": ">=0.10.0" } }, - "node_modules/vlq": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/vlq/-/vlq-1.0.1.tgz", - "integrity": "sha512-gQpnTgkubC6hQgdIcRdYGDSDc+SaujOdyesZQMv6JlfQee/9Mp0Qhnys6WxDWvQnL5WZdT7o2Ul187aSt0Rq+w==", + "node_modules/webpack-dev-server/node_modules/ipaddr.js": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-2.3.0.tgz", + "integrity": "sha512-Zv/pA+ciVFbCSBBjGfaKUya/CcGmUHzTydLMaTwrUUEM2DIEO3iZvueGxmacvmN50fGpGVKeTXpb2LcYQxeVdg==", "license": "MIT", - "peer": true + "engines": { + "node": ">= 10" + } }, - "node_modules/vm-browserify": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/vm-browserify/-/vm-browserify-1.1.2.tgz", - "integrity": "sha512-2ham8XPWTONajOR0ohOKOHXkm3+gaBmGut3SRuu75xLd/RRaY6vqgh8NBYYk7+RW3u5AtzPQZG8F10LHkl0lAQ==", - "dev": true, + "node_modules/webpack-dev-server/node_modules/json-schema-traverse": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", + "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", "license": "MIT" }, - "node_modules/void-elements": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/void-elements/-/void-elements-3.1.0.tgz", - "integrity": "sha512-Dhxzh5HZuiHQhbvTW9AMetFfBHDMYpo23Uo9btPXgdYP+3T5S+p+jgNy7spra+veYhBP2dCSgxR/i2Y02h5/6w==", + "node_modules/webpack-dev-server/node_modules/merge-descriptors": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.3.tgz", + "integrity": "sha512-gaNvAS7TZ897/rVaZ0nMtAyxNyi/pdbjbAwUpFQpN70GqnVfOiXpeUUMKRBmzXaSQ8DdTX4/0ms62r2K+hE6mQ==", "license": "MIT", - "engines": { - "node": ">=0.10.0" + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/w3c-xmlserializer": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/w3c-xmlserializer/-/w3c-xmlserializer-5.0.0.tgz", - "integrity": "sha512-o8qghlI8NZHU1lLPrpi2+Uq7abh4GGPpYANlalzWxyWteJOCsr/P+oPBA49TOLu5FTZO4d3F9MnWJfiMo4BkmA==", - "dev": true, + "node_modules/webpack-dev-server/node_modules/mime": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", + "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==", "license": "MIT", - "dependencies": { - "xml-name-validator": "^5.0.0" + "bin": { + "mime": "cli.js" }, "engines": { - "node": ">=18" - } - }, - "node_modules/walker": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/walker/-/walker-1.0.8.tgz", - "integrity": "sha512-ts/8E8l5b7kY0vlWLewOkDXMmPdLcVV4GmOQLyxuSswIJsweeFZtAsMF7k1Nszz+TYBQrlYRmzOnr398y1JemQ==", - "license": "Apache-2.0", - "dependencies": { - "makeerror": "1.0.12" + "node": ">=4" } }, - "node_modules/watchpack": { - "version": "2.4.4", - "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-2.4.4.tgz", - "integrity": "sha512-c5EGNOiyxxV5qmTtAB7rbiXxi1ooX1pQKMLX/MIabJjRA0SJBQOjKF+KSVfHkr9U1cADPon0mRiVe/riyaiDUA==", + "node_modules/webpack-dev-server/node_modules/mime-db": { + "version": "1.52.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", + "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", "license": "MIT", - "dependencies": { - "glob-to-regexp": "^0.4.1", - "graceful-fs": "^4.1.2" - }, "engines": { - "node": ">=10.13.0" + "node": ">= 0.6" } }, - "node_modules/wcwidth": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/wcwidth/-/wcwidth-1.0.1.tgz", - "integrity": "sha512-XHPEwS0q6TaxcvG85+8EYkbiCux2XtWG2mkc47Ng2A77BQu9+DqIOJldST4HgPkuea7dvKSj5VgX3P1d4rW8Tg==", + "node_modules/webpack-dev-server/node_modules/mime-types": { + "version": "2.1.35", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", + "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", "license": "MIT", "dependencies": { - "defaults": "^1.0.3" + "mime-db": "1.52.0" + }, + "engines": { + "node": ">= 0.6" } }, - "node_modules/web-streams-polyfill": { - "version": "4.0.0-beta.3", - "resolved": "https://registry.npmjs.org/web-streams-polyfill/-/web-streams-polyfill-4.0.0-beta.3.tgz", - "integrity": "sha512-QW95TCTaHmsYfHDybGMwO5IJIM93I/6vTRk+daHTWFPhwh+C8Cg7j7XyKrwrj8Ib6vYXe0ocYNrmzY4xAAN6ug==", - "devOptional": true, + "node_modules/webpack-dev-server/node_modules/negotiator": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz", + "integrity": "sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==", "license": "MIT", "engines": { - "node": ">= 14" + "node": ">= 0.6" } }, - "node_modules/web3-core-helpers": { - "version": "1.8.0", - "resolved": "https://registry.npmjs.org/web3-core-helpers/-/web3-core-helpers-1.8.0.tgz", - "integrity": "sha512-nMAVwZB3rEp/khHI2BvFy0e/xCryf501p5NGjswmJtEM+Zrd3Biaw52JrB1qAZZIzCA8cmLKaOgdfamoDOpWdw==", - "license": "LGPL-3.0", + "node_modules/webpack-dev-server/node_modules/open": { + "version": "10.2.0", + "resolved": "https://registry.npmjs.org/open/-/open-10.2.0.tgz", + "integrity": "sha512-YgBpdJHPyQ2UE5x+hlSXcnejzAvD0b22U2OuAP+8OnlJT+PjWPxtgmGqKKc+RgTM63U9gN0YzrYc71R2WT/hTA==", + "license": "MIT", "dependencies": { - "web3-eth-iban": "1.8.0", - "web3-utils": "1.8.0" + "default-browser": "^5.2.1", + "define-lazy-prop": "^3.0.0", + "is-inside-container": "^1.0.0", + "wsl-utils": "^0.1.0" }, "engines": { - "node": ">=8.0.0" + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/web3-core-helpers/node_modules/web3-utils": { - "version": "1.8.0", - "resolved": "https://registry.npmjs.org/web3-utils/-/web3-utils-1.8.0.tgz", - "integrity": "sha512-7nUIl7UWpLVka2f09CMbKOSEvorvHnaugIabU4mj7zfMvm0tSByLcEu3eyV9qgS11qxxLuOkzBIwCstTflhmpQ==", - "license": "LGPL-3.0", + "node_modules/webpack-dev-server/node_modules/path-to-regexp": { + "version": "0.1.12", + "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.12.tgz", + "integrity": "sha512-RA1GjUVMnvYFxuqovrEqZoxxW5NUZqbwKtYz/Tt7nXerk0LbLblQmrsgdeOxV5SFHf0UDggjS/bSeOZwt1pmEQ==", + "license": "MIT" + }, + "node_modules/webpack-dev-server/node_modules/qs": { + "version": "6.14.0", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.14.0.tgz", + "integrity": "sha512-YWWTjgABSKcvs/nWBi9PycY/JiPJqOD4JA6o9Sej2AtvSGarXxKC3OQSk4pAarbdQlKAh5D4FCQkJNkW+GAn3w==", + "license": "BSD-3-Clause", "dependencies": { - "bn.js": "^5.2.1", - "ethereum-bloom-filters": "^1.0.6", - "ethereumjs-util": "^7.1.0", - "ethjs-unit": "0.1.6", - "number-to-bn": "1.7.0", - "randombytes": "^2.1.0", - "utf8": "3.0.0" + "side-channel": "^1.1.0" }, "engines": { - "node": ">=8.0.0" + "node": ">=0.6" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/web3-eth-iban": { - "version": "1.8.0", - "resolved": "https://registry.npmjs.org/web3-eth-iban/-/web3-eth-iban-1.8.0.tgz", - "integrity": "sha512-4RbvUxcMpo/e5811sE3a6inJ2H4+FFqUVmlRYs0RaXaxiHweahSRBNcpO0UWgmlePTolj0rXqPT2oEr0DuC8kg==", - "license": "LGPL-3.0", + "node_modules/webpack-dev-server/node_modules/raw-body": { + "version": "2.5.3", + "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.3.tgz", + "integrity": "sha512-s4VSOf6yN0rvbRZGxs8Om5CWj6seneMwK3oDb4lWDH0UPhWcxwOWw5+qk24bxq87szX1ydrwylIOp2uG1ojUpA==", + "license": "MIT", "dependencies": { - "bn.js": "^5.2.1", - "web3-utils": "1.8.0" + "bytes": "~3.1.2", + "http-errors": "~2.0.1", + "iconv-lite": "~0.4.24", + "unpipe": "~1.0.0" }, "engines": { - "node": ">=8.0.0" + "node": ">= 0.8" } }, - "node_modules/web3-eth-iban/node_modules/web3-utils": { - "version": "1.8.0", - "resolved": "https://registry.npmjs.org/web3-utils/-/web3-utils-1.8.0.tgz", - "integrity": "sha512-7nUIl7UWpLVka2f09CMbKOSEvorvHnaugIabU4mj7zfMvm0tSByLcEu3eyV9qgS11qxxLuOkzBIwCstTflhmpQ==", - "license": "LGPL-3.0", + "node_modules/webpack-dev-server/node_modules/schema-utils": { + "version": "4.3.3", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-4.3.3.tgz", + "integrity": "sha512-eflK8wEtyOE6+hsaRVPxvUKYCpRgzLqDTb8krvAsRIwOGlHoSgYLgBXoubGgLd2fT41/OUYdb48v4k4WWHQurA==", + "license": "MIT", "dependencies": { - "bn.js": "^5.2.1", - "ethereum-bloom-filters": "^1.0.6", - "ethereumjs-util": "^7.1.0", - "ethjs-unit": "0.1.6", - "number-to-bn": "1.7.0", - "randombytes": "^2.1.0", - "utf8": "3.0.0" + "@types/json-schema": "^7.0.9", + "ajv": "^8.9.0", + "ajv-formats": "^2.1.1", + "ajv-keywords": "^5.1.0" }, "engines": { - "node": ">=8.0.0" + "node": ">= 10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" } }, - "node_modules/web3-providers-http": { - "version": "1.8.0", - "resolved": "https://registry.npmjs.org/web3-providers-http/-/web3-providers-http-1.8.0.tgz", - "integrity": "sha512-/MqxwRzExohBWW97mqlCSW/+NHydGRyoEDUS1bAIF2YjfKFwyRtHgrEzOojzkC9JvB+8LofMvbXk9CcltpZapw==", - "license": "LGPL-3.0", + "node_modules/webpack-dev-server/node_modules/send": { + "version": "0.19.2", + "resolved": "https://registry.npmjs.org/send/-/send-0.19.2.tgz", + "integrity": "sha512-VMbMxbDeehAxpOtWJXlcUS5E8iXh6QmN+BkRX1GARS3wRaXEEgzCcB10gTQazO42tpNIya8xIyNx8fll1OFPrg==", + "license": "MIT", "dependencies": { - "abortcontroller-polyfill": "^1.7.3", - "cross-fetch": "^3.1.4", - "es6-promise": "^4.2.8", - "web3-core-helpers": "1.8.0" + "debug": "2.6.9", + "depd": "2.0.0", + "destroy": "1.2.0", + "encodeurl": "~2.0.0", + "escape-html": "~1.0.3", + "etag": "~1.8.1", + "fresh": "~0.5.2", + "http-errors": "~2.0.1", + "mime": "1.6.0", + "ms": "2.1.3", + "on-finished": "~2.4.1", + "range-parser": "~1.2.1", + "statuses": "~2.0.2" }, "engines": { - "node": ">=8.0.0" + "node": ">= 0.8.0" } }, - "node_modules/web3-utils": { - "version": "1.10.4", - "resolved": "https://registry.npmjs.org/web3-utils/-/web3-utils-1.10.4.tgz", - "integrity": "sha512-tsu8FiKJLk2PzhDl9fXbGUWTkkVXYhtTA+SmEFkKft+9BgwLxfCRpU96sWv7ICC8zixBNd3JURVoiR3dUXgP8A==", - "dev": true, - "license": "LGPL-3.0", + "node_modules/webpack-dev-server/node_modules/serve-static": { + "version": "1.16.3", + "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.16.3.tgz", + "integrity": "sha512-x0RTqQel6g5SY7Lg6ZreMmsOzncHFU7nhnRWkKgWuMTu5NN0DR5oruckMqRvacAN9d5w6ARnRBXl9xhDCgfMeA==", + "license": "MIT", "dependencies": { - "@ethereumjs/util": "^8.1.0", - "bn.js": "^5.2.1", - "ethereum-bloom-filters": "^1.0.6", - "ethereum-cryptography": "^2.1.2", - "ethjs-unit": "0.1.6", - "number-to-bn": "1.7.0", - "randombytes": "^2.1.0", - "utf8": "3.0.0" + "encodeurl": "~2.0.0", + "escape-html": "~1.0.3", + "parseurl": "~1.3.3", + "send": "~0.19.1" }, "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/webextension-polyfill": { - "version": "0.10.0", - "resolved": "https://registry.npmjs.org/webextension-polyfill/-/webextension-polyfill-0.10.0.tgz", - "integrity": "sha512-c5s35LgVa5tFaHhrZDnr3FpQpjj1BB+RXhLTYUxGqBVN460HkbM8TBtEqdXWbpTKfzwCcjAZVF7zXCYSKtcp9g==", - "license": "MPL-2.0" - }, - "node_modules/webidl-conversions": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-7.0.0.tgz", - "integrity": "sha512-VwddBukDzu71offAQR975unBIGqfKZpM+8ZX6ySk8nYhVoo5CYaZyzt3YBvYtRtO+aoGlqxPg/B87NGVZ/fu6g==", - "dev": true, - "license": "BSD-2-Clause", - "engines": { - "node": ">=12" + "node": ">= 0.8.0" } }, - "node_modules/webpack": { - "version": "5.90.1", - "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.90.1.tgz", - "integrity": "sha512-SstPdlAC5IvgFnhiRok8hqJo/+ArAbNv7rhU4fnWGHNVfN59HSQFaxZDSAL3IFG2YmqxuRs+IU33milSxbPlog==", + "node_modules/webpack-merge": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/webpack-merge/-/webpack-merge-6.0.1.tgz", + "integrity": "sha512-hXXvrjtx2PLYx4qruKl+kyRSLc52V+cCvMxRjmKwoA+CBbbF5GfIBtR6kCvl0fYGqTUPKB+1ktVmTHqMOzgCBg==", "license": "MIT", "dependencies": { - "@types/eslint-scope": "^3.7.3", - "@types/estree": "^1.0.5", - "@webassemblyjs/ast": "^1.11.5", - "@webassemblyjs/wasm-edit": "^1.11.5", - "@webassemblyjs/wasm-parser": "^1.11.5", - "acorn": "^8.7.1", - "acorn-import-assertions": "^1.9.0", - "browserslist": "^4.21.10", - "chrome-trace-event": "^1.0.2", - "enhanced-resolve": "^5.15.0", - "es-module-lexer": "^1.2.1", - "eslint-scope": "5.1.1", - "events": "^3.2.0", - "glob-to-regexp": "^0.4.1", - "graceful-fs": "^4.2.9", - "json-parse-even-better-errors": "^2.3.1", - "loader-runner": "^4.2.0", - "mime-types": "^2.1.27", - "neo-async": "^2.6.2", - "schema-utils": "^3.2.0", - "tapable": "^2.1.1", - "terser-webpack-plugin": "^5.3.10", - "watchpack": "^2.4.0", - "webpack-sources": "^3.2.3" - }, - "bin": { - "webpack": "bin/webpack.js" + "clone-deep": "^4.0.1", + "flat": "^5.0.2", + "wildcard": "^2.0.1" }, "engines": { - "node": ">=10.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - }, - "peerDependenciesMeta": { - "webpack-cli": { - "optional": true - } + "node": ">=18.0.0" } }, "node_modules/webpack-node-externals": { @@ -46147,6 +65743,73 @@ "node": ">= 0.6" } }, + "node_modules/webpackbar": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/webpackbar/-/webpackbar-6.0.1.tgz", + "integrity": "sha512-TnErZpmuKdwWBdMoexjio3KKX6ZtoKHRVvLIU0A47R0VVBDtx3ZyOJDktgYixhoJokZTYTt1Z37OkO9pnGJa9Q==", + "license": "MIT", + "dependencies": { + "ansi-escapes": "^4.3.2", + "chalk": "^4.1.2", + "consola": "^3.2.3", + "figures": "^3.2.0", + "markdown-table": "^2.0.0", + "pretty-time": "^1.1.0", + "std-env": "^3.7.0", + "wrap-ansi": "^7.0.0" + }, + "engines": { + "node": ">=14.21.3" + }, + "peerDependencies": { + "webpack": "3 || 4 || 5" + } + }, + "node_modules/webpackbar/node_modules/consola": { + "version": "3.4.2", + "resolved": "https://registry.npmjs.org/consola/-/consola-3.4.2.tgz", + "integrity": "sha512-5IKcdX0nnYavi6G7TtOhwkYzyjfJlatbjMjuLSfE2kYT5pMDOilZ4OvMhi637CcDICTmz3wARPoyhqyX1Y+XvA==", + "license": "MIT", + "engines": { + "node": "^14.18.0 || >=16.10.0" + } + }, + "node_modules/webpackbar/node_modules/markdown-table": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/markdown-table/-/markdown-table-2.0.0.tgz", + "integrity": "sha512-Ezda85ToJUBhM6WGaG6veasyym+Tbs3cMAw/ZhOPqXiYsr0jgocBV3j3nx+4lk47plLlIqjwuTm/ywVI+zjJ/A==", + "license": "MIT", + "dependencies": { + "repeat-string": "^1.0.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/websocket-driver": { + "version": "0.7.4", + "resolved": "https://registry.npmjs.org/websocket-driver/-/websocket-driver-0.7.4.tgz", + "integrity": "sha512-b17KeDIQVjvb0ssuSDF2cYXSg2iztliJ4B9WdsuB6J952qCPKmnVq4DyW5motImXHDC1cBT/1UezrJVsKw5zjg==", + "license": "Apache-2.0", + "dependencies": { + "http-parser-js": ">=0.5.1", + "safe-buffer": ">=5.1.0", + "websocket-extensions": ">=0.1.1" + }, + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/websocket-extensions": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/websocket-extensions/-/websocket-extensions-0.1.4.tgz", + "integrity": "sha512-OqedPIGOfsDlo31UNwYbCFMSaO9m9G/0faIHj5/dZFDMFqPTcx6UwqyOy3COEaEOg/9VsGIpdqn62W5KhoKSpg==", + "license": "Apache-2.0", + "engines": { + "node": ">=0.8.0" + } + }, "node_modules/whatwg-encoding": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/whatwg-encoding/-/whatwg-encoding-3.1.1.tgz", @@ -46177,8 +65840,7 @@ "version": "3.6.20", "resolved": "https://registry.npmjs.org/whatwg-fetch/-/whatwg-fetch-3.6.20.tgz", "integrity": "sha512-EqhiFU6daOA8kpjOWTL0olhVOF3i7OrFzSYiGsEMB8GcXS+RrzauAERX65xMeNWVqxA6HXH2m69Z9LaKKdisfg==", - "license": "MIT", - "peer": true + "license": "MIT" }, "node_modules/whatwg-mimetype": { "version": "4.0.0", @@ -46353,6 +66015,12 @@ "node": ">=8" } }, + "node_modules/wildcard": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/wildcard/-/wildcard-2.0.1.tgz", + "integrity": "sha512-CC1bOL87PIWSBhDcTrdeLo6eGT7mCFtrg0uIJtqJUFyK+eJnzl8A1niH56uu7KMa5XFrtiV+AQuHO3n7DsHnLQ==", + "license": "MIT" + }, "node_modules/winston": { "version": "3.18.3", "resolved": "https://registry.npmjs.org/winston/-/winston-3.18.3.tgz", @@ -46645,11 +66313,40 @@ } } }, + "node_modules/wsl-utils": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/wsl-utils/-/wsl-utils-0.1.0.tgz", + "integrity": "sha512-h3Fbisa2nKGPxCpm89Hk33lBLsnaGBvctQopaBSOW/uIs6FTe1ATyAnKFJrzVs9vpGdsTe73WF3V4lIsk4Gacw==", + "license": "MIT", + "dependencies": { + "is-wsl": "^3.1.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/wsl-utils/node_modules/is-wsl": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-3.1.0.tgz", + "integrity": "sha512-UcVfVfaK4Sc4m7X3dUSoHoozQGBEFeDC+zVo06t98xe8CzHSZZBekNXH+tu0NalHolcJ/QAGqS46Hef7QXBIMw==", + "license": "MIT", + "dependencies": { + "is-inside-container": "^1.0.0" + }, + "engines": { + "node": ">=16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/xdg-basedir": { "version": "5.1.0", "resolved": "https://registry.npmjs.org/xdg-basedir/-/xdg-basedir-5.1.0.tgz", "integrity": "sha512-GCPAHLvrIH13+c0SuacwvRYj2SxJXQ4kaVTT5xgL3kPrz56XxkF21IGhjSE1+W0aw7gpBWRGXLCPnPby6lSpmQ==", - "dev": true, "license": "MIT", "engines": { "node": ">=12" @@ -46658,6 +66355,18 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/xml-js": { + "version": "1.6.11", + "resolved": "https://registry.npmjs.org/xml-js/-/xml-js-1.6.11.tgz", + "integrity": "sha512-7rVi2KMfwfWFl+GpPg6m80IVMWXLRjO+PxTq7V2CDhoGak0wzYzFgUY2m4XJ47OGdXd8eLE8EmwfAmdjw7lC1g==", + "license": "MIT", + "dependencies": { + "sax": "^1.2.4" + }, + "bin": { + "xml-js": "bin/cli.js" + } + }, "node_modules/xml-name-validator": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/xml-name-validator/-/xml-name-validator-5.0.0.tgz", @@ -46781,7 +66490,6 @@ "version": "1.2.1", "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-1.2.1.tgz", "integrity": "sha512-AyeEbWOu/TAXdxlV9wmGcR0+yh2j3vYPGOECcIj2S7MkrLyC7ne+oye2BKTItt0ii2PHk4cDy+95+LshzbXnGg==", - "dev": true, "license": "MIT", "engines": { "node": ">=12.20" @@ -46869,6 +66577,7 @@ "resolved": "https://registry.npmjs.org/zod/-/zod-3.25.76.tgz", "integrity": "sha512-gzUt/qt81nXsFGKIFcC3YnfEAx5NkunCfnDlvuBSSFS02bcXu4Lmea0AFIUwbLWxWPx3d9p8S5QoaujKcNQxcQ==", "license": "MIT", + "peer": true, "funding": { "url": "https://github.com/sponsors/colinhacks" } @@ -46929,9 +66638,19 @@ } } }, + "node_modules/zwitch": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/zwitch/-/zwitch-2.0.4.tgz", + "integrity": "sha512-bXE4cR/kVZhKZX/RjPEflHaKVhUVl85noU3v6b8apfQEc1x4A+zBxjZ4lN8LqGd6WZ3dl98pY4o717VFmoPp+A==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, "packages/ats/contracts": { "name": "@hashgraph/asset-tokenization-contracts", - "version": "3.1.0", + "version": "4.0.0", "license": "Apache-2.0", "dependencies": { "dotenv": "^16.0.3", @@ -46957,12 +66676,16 @@ "chai": "^4.4.0", "dotenv": "^16.0.3", "glob": "^11.0.3", - "hardhat": "^v2.26.3", + "hardhat": "^v2.28.2", "hardhat-abi-exporter": "^2.11.0", "hardhat-contract-sizer": "^2.10.0", "hardhat-dependency-compiler": "^1.2.1", "hardhat-gas-reporter": "^1.0.8", - "solidity-coverage": "^0.8.14", + "istanbul-combine": "^0.3.0", + "nyc": "^17.1.0", + "prettier": "^3.5.3", + "prettier-plugin-solidity": "^1.4.2", + "solidity-coverage": "^0.8.17", "ts-node": "^10.9.1", "tsc-alias": "^1.8.16", "tsconfig-paths": "^4.2.0", @@ -47045,13 +66768,167 @@ "bn.js": "^5.2.1" } }, - "packages/ats/contracts/node_modules/@react-native/virtualized-lists": { - "version": "0.81.4", - "resolved": "https://registry.npmjs.org/@react-native/virtualized-lists/-/virtualized-lists-0.81.4.tgz", - "integrity": "sha512-hBM+rMyL6Wm1Q4f/WpqGsaCojKSNUBqAXLABNGoWm1vabZ7cSnARMxBvA/2vo3hLcoR4v7zDK8tkKm9+O0LjVA==", + "packages/ats/contracts/node_modules/@react-native/assets-registry": { + "version": "0.83.1", + "resolved": "https://registry.npmjs.org/@react-native/assets-registry/-/assets-registry-0.83.1.tgz", + "integrity": "sha512-AT7/T6UwQqO39bt/4UL5EXvidmrddXrt0yJa7ENXndAv+8yBzMsZn6fyiax6+ERMt9GLzAECikv3lj22cn2wJA==", + "dev": true, + "license": "MIT", + "peer": true, + "engines": { + "node": ">= 20.19.4" + } + }, + "packages/ats/contracts/node_modules/@react-native/codegen": { + "version": "0.83.1", + "resolved": "https://registry.npmjs.org/@react-native/codegen/-/codegen-0.83.1.tgz", + "integrity": "sha512-FpRxenonwH+c2a5X5DZMKUD7sCudHxB3eSQPgV9R+uxd28QWslyAWrpnJM/Az96AEksHnymDzEmzq2HLX5nb+g==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "@babel/core": "^7.25.2", + "@babel/parser": "^7.25.3", + "glob": "^7.1.1", + "hermes-parser": "0.32.0", + "invariant": "^2.2.4", + "nullthrows": "^1.1.1", + "yargs": "^17.6.2" + }, + "engines": { + "node": ">= 20.19.4" + }, + "peerDependencies": { + "@babel/core": "*" + } + }, + "packages/ats/contracts/node_modules/@react-native/codegen/node_modules/glob": { + "version": "7.2.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", + "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", + "deprecated": "Glob versions prior to v9 are no longer supported", + "dev": true, + "license": "ISC", + "peer": true, + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.1.1", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "packages/ats/contracts/node_modules/@react-native/community-cli-plugin": { + "version": "0.83.1", + "resolved": "https://registry.npmjs.org/@react-native/community-cli-plugin/-/community-cli-plugin-0.83.1.tgz", + "integrity": "sha512-FqR1ftydr08PYlRbrDF06eRiiiGOK/hNmz5husv19sK6iN5nHj1SMaCIVjkH/a5vryxEddyFhU6PzO/uf4kOHg==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "@react-native/dev-middleware": "0.83.1", + "debug": "^4.4.0", + "invariant": "^2.2.4", + "metro": "^0.83.3", + "metro-config": "^0.83.3", + "metro-core": "^0.83.3", + "semver": "^7.1.3" + }, + "engines": { + "node": ">= 20.19.4" + }, + "peerDependencies": { + "@react-native-community/cli": "*", + "@react-native/metro-config": "*" + }, + "peerDependenciesMeta": { + "@react-native-community/cli": { + "optional": true + }, + "@react-native/metro-config": { + "optional": true + } + } + }, + "packages/ats/contracts/node_modules/@react-native/debugger-frontend": { + "version": "0.83.1", + "resolved": "https://registry.npmjs.org/@react-native/debugger-frontend/-/debugger-frontend-0.83.1.tgz", + "integrity": "sha512-01Rn3goubFvPjHXONooLmsW0FLxJDKIUJNOlOS0cPtmmTIx9YIjxhe/DxwHXGk7OnULd7yl3aYy7WlBsEd5Xmg==", + "dev": true, + "license": "BSD-3-Clause", + "peer": true, + "engines": { + "node": ">= 20.19.4" + } + }, + "packages/ats/contracts/node_modules/@react-native/dev-middleware": { + "version": "0.83.1", + "resolved": "https://registry.npmjs.org/@react-native/dev-middleware/-/dev-middleware-0.83.1.tgz", + "integrity": "sha512-QJaSfNRzj3Lp7MmlCRgSBlt1XZ38xaBNXypXAp/3H3OdFifnTZOeYOpFmcpjcXYnDqkxetuwZg8VL65SQhB8dg==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "@isaacs/ttlcache": "^1.4.1", + "@react-native/debugger-frontend": "0.83.1", + "@react-native/debugger-shell": "0.83.1", + "chrome-launcher": "^0.15.2", + "chromium-edge-launcher": "^0.2.0", + "connect": "^3.6.5", + "debug": "^4.4.0", + "invariant": "^2.2.4", + "nullthrows": "^1.1.1", + "open": "^7.0.3", + "serve-static": "^1.16.2", + "ws": "^7.5.10" + }, + "engines": { + "node": ">= 20.19.4" + } + }, + "packages/ats/contracts/node_modules/@react-native/gradle-plugin": { + "version": "0.83.1", + "resolved": "https://registry.npmjs.org/@react-native/gradle-plugin/-/gradle-plugin-0.83.1.tgz", + "integrity": "sha512-6ESDnwevp1CdvvxHNgXluil5OkqbjkJAkVy7SlpFsMGmVhrSxNAgD09SSRxMNdKsnLtzIvMsFCzyHLsU/S4PtQ==", + "dev": true, + "license": "MIT", + "peer": true, + "engines": { + "node": ">= 20.19.4" + } + }, + "packages/ats/contracts/node_modules/@react-native/js-polyfills": { + "version": "0.83.1", + "resolved": "https://registry.npmjs.org/@react-native/js-polyfills/-/js-polyfills-0.83.1.tgz", + "integrity": "sha512-qgPpdWn/c5laA+3WoJ6Fak8uOm7CG50nBsLlPsF8kbT7rUHIVB9WaP6+GPsoKV/H15koW7jKuLRoNVT7c3Ht3w==", "dev": true, "license": "MIT", "peer": true, + "engines": { + "node": ">= 20.19.4" + } + }, + "packages/ats/contracts/node_modules/@react-native/normalize-colors": { + "version": "0.83.1", + "resolved": "https://registry.npmjs.org/@react-native/normalize-colors/-/normalize-colors-0.83.1.tgz", + "integrity": "sha512-84feABbmeWo1kg81726UOlMKAhcQyFXYz2SjRKYkS78QmfhVDhJ2o/ps1VjhFfBz0i/scDwT1XNv9GwmRIghkg==", + "dev": true, + "license": "MIT", + "peer": true + }, + "packages/ats/contracts/node_modules/@react-native/virtualized-lists": { + "version": "0.83.1", + "resolved": "https://registry.npmjs.org/@react-native/virtualized-lists/-/virtualized-lists-0.83.1.tgz", + "integrity": "sha512-MdmoAbQUTOdicCocm5XAFDJWsswxk7hxa6ALnm6Y88p01HFML0W593hAn6qOt9q6IM1KbAcebtH6oOd4gcQy8w==", + "dev": true, + "license": "MIT", "dependencies": { "invariant": "^2.2.4", "nullthrows": "^1.1.1" @@ -47060,7 +66937,7 @@ "node": ">= 20.19.4" }, "peerDependencies": { - "@types/react": "^19.1.0", + "@types/react": "^19.2.0", "react": "*", "react-native": "*" }, @@ -47070,17 +66947,79 @@ } } }, + "packages/ats/contracts/node_modules/babel-plugin-syntax-hermes-parser": { + "version": "0.32.0", + "resolved": "https://registry.npmjs.org/babel-plugin-syntax-hermes-parser/-/babel-plugin-syntax-hermes-parser-0.32.0.tgz", + "integrity": "sha512-m5HthL++AbyeEA2FcdwOLfVFvWYECOBObLHNqdR8ceY4TsEdn4LdX2oTvbB2QJSSElE2AWA/b2MXZ/PF/CqLZg==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "hermes-parser": "0.32.0" + } + }, "packages/ats/contracts/node_modules/commander": { "version": "12.1.0", "resolved": "https://registry.npmjs.org/commander/-/commander-12.1.0.tgz", "integrity": "sha512-Vw8qHK3bZM9y/P10u3Vib8o/DdkvA2OtPtZvD871QKjy74Wj1WSKFILMPRPSdUSx5RFK1arlJzEtA4PkFgnbuA==", "dev": true, "license": "MIT", - "peer": true, "engines": { "node": ">=18" } }, + "packages/ats/contracts/node_modules/fresh": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", + "integrity": "sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==", + "dev": true, + "license": "MIT", + "peer": true, + "engines": { + "node": ">= 0.6" + } + }, + "packages/ats/contracts/node_modules/hermes-estree": { + "version": "0.32.0", + "resolved": "https://registry.npmjs.org/hermes-estree/-/hermes-estree-0.32.0.tgz", + "integrity": "sha512-KWn3BqnlDOl97Xe1Yviur6NbgIZ+IP+UVSpshlZWkq+EtoHg6/cwiDj/osP9PCEgFE15KBm1O55JRwbMEm5ejQ==", + "dev": true, + "license": "MIT", + "peer": true + }, + "packages/ats/contracts/node_modules/hermes-parser": { + "version": "0.32.0", + "resolved": "https://registry.npmjs.org/hermes-parser/-/hermes-parser-0.32.0.tgz", + "integrity": "sha512-g4nBOWFpuiTqjR3LZdRxKUkij9iyveWeuks7INEsMX741f3r9xxrOe8TeQfUxtda0eXmiIFiMQzoeSQEno33Hw==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "hermes-estree": "0.32.0" + } + }, + "packages/ats/contracts/node_modules/http-errors": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.1.tgz", + "integrity": "sha512-4FbRdAX+bSdmo4AUFuS0WNiPz8NgFt+r8ThgNWmlrjQjt1Q7ZR9+zTlce2859x4KSXrwIsaeTqDoKQmtP8pLmQ==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "depd": "~2.0.0", + "inherits": "~2.0.4", + "setprototypeof": "~1.2.0", + "statuses": "~2.0.2", + "toidentifier": "~1.0.1" + }, + "engines": { + "node": ">= 0.8" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" + } + }, "packages/ats/contracts/node_modules/long": { "version": "5.3.2", "resolved": "https://registry.npmjs.org/long/-/long-5.3.2.tgz", @@ -47093,13 +67032,26 @@ "resolved": "https://registry.npmjs.org/memoize-one/-/memoize-one-5.2.1.tgz", "integrity": "sha512-zYiwtZUcYyXKo/np96AGZAckk+FWWsUdJ3cHGGmld7+AhvcWmQyGCYUh1hc4Q/pkOhb65dQR/pqCyK0cOaHz4Q==", "dev": true, + "license": "MIT" + }, + "packages/ats/contracts/node_modules/mime": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", + "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==", + "dev": true, "license": "MIT", - "peer": true + "peer": true, + "bin": { + "mime": "cli.js" + }, + "engines": { + "node": ">=4" + } }, "packages/ats/contracts/node_modules/react": { - "version": "19.2.0", - "resolved": "https://registry.npmjs.org/react/-/react-19.2.0.tgz", - "integrity": "sha512-tmbWg6W31tQLeB5cdIBOicJDJRR2KzXsV7uSK9iNfLWQ5bIZfxuPEHp7M8wiHyHnn0DD1i7w3Zmin0FtkrwoCQ==", + "version": "19.2.3", + "resolved": "https://registry.npmjs.org/react/-/react-19.2.3.tgz", + "integrity": "sha512-Ku/hhYbVjOQnXDZFv2+RibmLFGwFdeeKHFcOTlrt7xplBnya5OGn/hIRDsqDiSUcfORsDC7MPxwork8jBwsIWA==", "dev": true, "license": "MIT", "peer": true, @@ -47108,46 +67060,47 @@ } }, "packages/ats/contracts/node_modules/react-native": { - "version": "0.81.4", - "resolved": "https://registry.npmjs.org/react-native/-/react-native-0.81.4.tgz", - "integrity": "sha512-bt5bz3A/+Cv46KcjV0VQa+fo7MKxs17RCcpzjftINlen4ZDUl0I6Ut+brQ2FToa5oD0IB0xvQHfmsg2EDqsZdQ==", + "version": "0.83.1", + "resolved": "https://registry.npmjs.org/react-native/-/react-native-0.83.1.tgz", + "integrity": "sha512-mL1q5HPq5cWseVhWRLl+Fwvi5z1UO+3vGOpjr+sHFwcUletPRZ5Kv+d0tUfqHmvi73/53NjlQqX1Pyn4GguUfA==", "dev": true, "license": "MIT", "peer": true, "dependencies": { "@jest/create-cache-key-function": "^29.7.0", - "@react-native/assets-registry": "0.81.4", - "@react-native/codegen": "0.81.4", - "@react-native/community-cli-plugin": "0.81.4", - "@react-native/gradle-plugin": "0.81.4", - "@react-native/js-polyfills": "0.81.4", - "@react-native/normalize-colors": "0.81.4", - "@react-native/virtualized-lists": "0.81.4", + "@react-native/assets-registry": "0.83.1", + "@react-native/codegen": "0.83.1", + "@react-native/community-cli-plugin": "0.83.1", + "@react-native/gradle-plugin": "0.83.1", + "@react-native/js-polyfills": "0.83.1", + "@react-native/normalize-colors": "0.83.1", + "@react-native/virtualized-lists": "0.83.1", "abort-controller": "^3.0.0", "anser": "^1.4.9", "ansi-regex": "^5.0.0", "babel-jest": "^29.7.0", - "babel-plugin-syntax-hermes-parser": "0.29.1", + "babel-plugin-syntax-hermes-parser": "0.32.0", "base64-js": "^1.5.1", "commander": "^12.0.0", "flow-enums-runtime": "^0.0.6", "glob": "^7.1.1", + "hermes-compiler": "0.14.0", "invariant": "^2.2.4", "jest-environment-node": "^29.7.0", "memoize-one": "^5.0.0", - "metro-runtime": "^0.83.1", - "metro-source-map": "^0.83.1", + "metro-runtime": "^0.83.3", + "metro-source-map": "^0.83.3", "nullthrows": "^1.1.1", "pretty-format": "^29.7.0", "promise": "^8.3.0", "react-devtools-core": "^6.1.5", "react-refresh": "^0.14.0", "regenerator-runtime": "^0.13.2", - "scheduler": "0.26.0", + "scheduler": "0.27.0", "semver": "^7.1.3", "stacktrace-parser": "^0.1.10", "whatwg-fetch": "^3.0.0", - "ws": "^6.2.3", + "ws": "^7.5.10", "yargs": "^17.6.2" }, "bin": { @@ -47157,8 +67110,8 @@ "node": ">= 20.19.4" }, "peerDependencies": { - "@types/react": "^19.1.0", - "react": "^19.1.0" + "@types/react": "^19.1.1", + "react": "^19.2.0" }, "peerDependenciesMeta": { "@types/react": { @@ -47186,7 +67139,6 @@ "deprecated": "Glob versions prior to v9 are no longer supported", "dev": true, "license": "ISC", - "peer": true, "dependencies": { "fs.realpath": "^1.0.0", "inflight": "^1.0.4", @@ -47208,26 +67160,23 @@ "integrity": "sha512-jCvmsr+1IUSMUyzOkRcvnVbX3ZYC6g9TDrDbFuFmRDq7PD4yaGbLKNQL6k2jnArV8hjYxh7hVhAZB6s9HDGpZA==", "dev": true, "license": "MIT", - "peer": true, "engines": { "node": ">=0.10.0" } }, "packages/ats/contracts/node_modules/scheduler": { - "version": "0.26.0", - "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.26.0.tgz", - "integrity": "sha512-NlHwttCI/l5gCPR3D1nNXtWABUmBwvZpEQiD4IXSbIDq8BzLIK/7Ir5gTFSGZDUu37K5cMNp0hFtzO38sC7gWA==", + "version": "0.27.0", + "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.27.0.tgz", + "integrity": "sha512-eNv+WrVbKu1f3vbYJT/xtiF5syA5HPIMtf9IgY/nKg0sWqzAUEvqY/xm7OcZc/qafLx/iO9FgOmeSAp4v5ti/Q==", "dev": true, - "license": "MIT", - "peer": true + "license": "MIT" }, "packages/ats/contracts/node_modules/semver": { - "version": "7.7.2", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.2.tgz", - "integrity": "sha512-RF0Fw+rO5AMf9MAyaRXI4AV0Ulj5lMHqVxxdSgiVbixSCXoEmmX/jk0CuJw4+3SqroYO9VoUh+HcuJivvtJemA==", + "version": "7.7.3", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.3.tgz", + "integrity": "sha512-SdsKMrI9TdgjdweUSR9MweHA4EJ8YxHn8DFaDisvhVlUOe4BF1tLD7GAj0lIqWVl+dPb/rExr0Btby5loQm20Q==", "dev": true, "license": "ISC", - "peer": true, "bin": { "semver": "bin/semver.js" }, @@ -47235,20 +67184,93 @@ "node": ">=10" } }, - "packages/ats/contracts/node_modules/ws": { - "version": "6.2.3", - "resolved": "https://registry.npmjs.org/ws/-/ws-6.2.3.tgz", - "integrity": "sha512-jmTjYU0j60B+vHey6TfR3Z7RD61z/hmxBS3VMSGIrroOWXQEneK1zNuotOUrGyBHQj0yrpsLHPWtigEFd13ndA==", + "packages/ats/contracts/node_modules/send": { + "version": "0.19.2", + "resolved": "https://registry.npmjs.org/send/-/send-0.19.2.tgz", + "integrity": "sha512-VMbMxbDeehAxpOtWJXlcUS5E8iXh6QmN+BkRX1GARS3wRaXEEgzCcB10gTQazO42tpNIya8xIyNx8fll1OFPrg==", "dev": true, "license": "MIT", "peer": true, "dependencies": { - "async-limiter": "~1.0.0" + "debug": "2.6.9", + "depd": "2.0.0", + "destroy": "1.2.0", + "encodeurl": "~2.0.0", + "escape-html": "~1.0.3", + "etag": "~1.8.1", + "fresh": "~0.5.2", + "http-errors": "~2.0.1", + "mime": "1.6.0", + "ms": "2.1.3", + "on-finished": "~2.4.1", + "range-parser": "~1.2.1", + "statuses": "~2.0.2" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "packages/ats/contracts/node_modules/send/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "license": "MIT", + "dependencies": { + "ms": "2.0.0" + } + }, + "packages/ats/contracts/node_modules/send/node_modules/debug/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "dev": true, + "license": "MIT", + "peer": true + }, + "packages/ats/contracts/node_modules/serve-static": { + "version": "1.16.3", + "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.16.3.tgz", + "integrity": "sha512-x0RTqQel6g5SY7Lg6ZreMmsOzncHFU7nhnRWkKgWuMTu5NN0DR5oruckMqRvacAN9d5w6ARnRBXl9xhDCgfMeA==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "encodeurl": "~2.0.0", + "escape-html": "~1.0.3", + "parseurl": "~1.3.3", + "send": "~0.19.1" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "packages/ats/contracts/node_modules/ws": { + "version": "7.5.10", + "resolved": "https://registry.npmjs.org/ws/-/ws-7.5.10.tgz", + "integrity": "sha512-+dbF1tHwZpXcbOJdVOkzLDxZP1ailvSxM6ZweXTegylPny803bFhA+vqBYw4s31NSAk4S2Qz+AKXK9a4wkdjcQ==", + "dev": true, + "license": "MIT", + "peer": true, + "engines": { + "node": ">=8.3.0" + }, + "peerDependencies": { + "bufferutil": "^4.0.1", + "utf-8-validate": "^5.0.2" + }, + "peerDependenciesMeta": { + "bufferutil": { + "optional": true + }, + "utf-8-validate": { + "optional": true + } } }, "packages/ats/sdk": { "name": "@hashgraph/asset-tokenization-sdk", - "version": "3.1.0", + "version": "4.0.0", "license": "Apache-2.0", "dependencies": { "@ethersproject/contracts": "^5.7.0", @@ -47447,12 +67469,135 @@ "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" } }, - "packages/ats/sdk/node_modules/@react-native/virtualized-lists": { - "version": "0.81.4", - "resolved": "https://registry.npmjs.org/@react-native/virtualized-lists/-/virtualized-lists-0.81.4.tgz", - "integrity": "sha512-hBM+rMyL6Wm1Q4f/WpqGsaCojKSNUBqAXLABNGoWm1vabZ7cSnARMxBvA/2vo3hLcoR4v7zDK8tkKm9+O0LjVA==", + "packages/ats/sdk/node_modules/@react-native/assets-registry": { + "version": "0.83.1", + "resolved": "https://registry.npmjs.org/@react-native/assets-registry/-/assets-registry-0.83.1.tgz", + "integrity": "sha512-AT7/T6UwQqO39bt/4UL5EXvidmrddXrt0yJa7ENXndAv+8yBzMsZn6fyiax6+ERMt9GLzAECikv3lj22cn2wJA==", + "license": "MIT", + "peer": true, + "engines": { + "node": ">= 20.19.4" + } + }, + "packages/ats/sdk/node_modules/@react-native/codegen": { + "version": "0.83.1", + "resolved": "https://registry.npmjs.org/@react-native/codegen/-/codegen-0.83.1.tgz", + "integrity": "sha512-FpRxenonwH+c2a5X5DZMKUD7sCudHxB3eSQPgV9R+uxd28QWslyAWrpnJM/Az96AEksHnymDzEmzq2HLX5nb+g==", + "license": "MIT", + "peer": true, + "dependencies": { + "@babel/core": "^7.25.2", + "@babel/parser": "^7.25.3", + "glob": "^7.1.1", + "hermes-parser": "0.32.0", + "invariant": "^2.2.4", + "nullthrows": "^1.1.1", + "yargs": "^17.6.2" + }, + "engines": { + "node": ">= 20.19.4" + }, + "peerDependencies": { + "@babel/core": "*" + } + }, + "packages/ats/sdk/node_modules/@react-native/community-cli-plugin": { + "version": "0.83.1", + "resolved": "https://registry.npmjs.org/@react-native/community-cli-plugin/-/community-cli-plugin-0.83.1.tgz", + "integrity": "sha512-FqR1ftydr08PYlRbrDF06eRiiiGOK/hNmz5husv19sK6iN5nHj1SMaCIVjkH/a5vryxEddyFhU6PzO/uf4kOHg==", + "license": "MIT", + "peer": true, + "dependencies": { + "@react-native/dev-middleware": "0.83.1", + "debug": "^4.4.0", + "invariant": "^2.2.4", + "metro": "^0.83.3", + "metro-config": "^0.83.3", + "metro-core": "^0.83.3", + "semver": "^7.1.3" + }, + "engines": { + "node": ">= 20.19.4" + }, + "peerDependencies": { + "@react-native-community/cli": "*", + "@react-native/metro-config": "*" + }, + "peerDependenciesMeta": { + "@react-native-community/cli": { + "optional": true + }, + "@react-native/metro-config": { + "optional": true + } + } + }, + "packages/ats/sdk/node_modules/@react-native/debugger-frontend": { + "version": "0.83.1", + "resolved": "https://registry.npmjs.org/@react-native/debugger-frontend/-/debugger-frontend-0.83.1.tgz", + "integrity": "sha512-01Rn3goubFvPjHXONooLmsW0FLxJDKIUJNOlOS0cPtmmTIx9YIjxhe/DxwHXGk7OnULd7yl3aYy7WlBsEd5Xmg==", + "license": "BSD-3-Clause", + "peer": true, + "engines": { + "node": ">= 20.19.4" + } + }, + "packages/ats/sdk/node_modules/@react-native/dev-middleware": { + "version": "0.83.1", + "resolved": "https://registry.npmjs.org/@react-native/dev-middleware/-/dev-middleware-0.83.1.tgz", + "integrity": "sha512-QJaSfNRzj3Lp7MmlCRgSBlt1XZ38xaBNXypXAp/3H3OdFifnTZOeYOpFmcpjcXYnDqkxetuwZg8VL65SQhB8dg==", + "license": "MIT", + "peer": true, + "dependencies": { + "@isaacs/ttlcache": "^1.4.1", + "@react-native/debugger-frontend": "0.83.1", + "@react-native/debugger-shell": "0.83.1", + "chrome-launcher": "^0.15.2", + "chromium-edge-launcher": "^0.2.0", + "connect": "^3.6.5", + "debug": "^4.4.0", + "invariant": "^2.2.4", + "nullthrows": "^1.1.1", + "open": "^7.0.3", + "serve-static": "^1.16.2", + "ws": "^7.5.10" + }, + "engines": { + "node": ">= 20.19.4" + } + }, + "packages/ats/sdk/node_modules/@react-native/gradle-plugin": { + "version": "0.83.1", + "resolved": "https://registry.npmjs.org/@react-native/gradle-plugin/-/gradle-plugin-0.83.1.tgz", + "integrity": "sha512-6ESDnwevp1CdvvxHNgXluil5OkqbjkJAkVy7SlpFsMGmVhrSxNAgD09SSRxMNdKsnLtzIvMsFCzyHLsU/S4PtQ==", + "license": "MIT", + "peer": true, + "engines": { + "node": ">= 20.19.4" + } + }, + "packages/ats/sdk/node_modules/@react-native/js-polyfills": { + "version": "0.83.1", + "resolved": "https://registry.npmjs.org/@react-native/js-polyfills/-/js-polyfills-0.83.1.tgz", + "integrity": "sha512-qgPpdWn/c5laA+3WoJ6Fak8uOm7CG50nBsLlPsF8kbT7rUHIVB9WaP6+GPsoKV/H15koW7jKuLRoNVT7c3Ht3w==", "license": "MIT", "peer": true, + "engines": { + "node": ">= 20.19.4" + } + }, + "packages/ats/sdk/node_modules/@react-native/normalize-colors": { + "version": "0.83.1", + "resolved": "https://registry.npmjs.org/@react-native/normalize-colors/-/normalize-colors-0.83.1.tgz", + "integrity": "sha512-84feABbmeWo1kg81726UOlMKAhcQyFXYz2SjRKYkS78QmfhVDhJ2o/ps1VjhFfBz0i/scDwT1XNv9GwmRIghkg==", + "license": "MIT", + "peer": true + }, + "packages/ats/sdk/node_modules/@react-native/virtualized-lists": { + "version": "0.83.1", + "resolved": "https://registry.npmjs.org/@react-native/virtualized-lists/-/virtualized-lists-0.83.1.tgz", + "integrity": "sha512-MdmoAbQUTOdicCocm5XAFDJWsswxk7hxa6ALnm6Y88p01HFML0W593hAn6qOt9q6IM1KbAcebtH6oOd4gcQy8w==", + "license": "MIT", "dependencies": { "invariant": "^2.2.4", "nullthrows": "^1.1.1" @@ -47461,7 +67606,7 @@ "node": ">= 20.19.4" }, "peerDependencies": { - "@types/react": "^19.1.0", + "@types/react": "^19.2.0", "react": "*", "react-native": "*" }, @@ -47542,6 +67687,16 @@ "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" } }, + "packages/ats/sdk/node_modules/babel-plugin-syntax-hermes-parser": { + "version": "0.32.0", + "resolved": "https://registry.npmjs.org/babel-plugin-syntax-hermes-parser/-/babel-plugin-syntax-hermes-parser-0.32.0.tgz", + "integrity": "sha512-m5HthL++AbyeEA2FcdwOLfVFvWYECOBObLHNqdR8ceY4TsEdn4LdX2oTvbB2QJSSElE2AWA/b2MXZ/PF/CqLZg==", + "license": "MIT", + "peer": true, + "dependencies": { + "hermes-parser": "0.32.0" + } + }, "packages/ats/sdk/node_modules/babel-preset-jest": { "version": "30.2.0", "resolved": "https://registry.npmjs.org/babel-preset-jest/-/babel-preset-jest-30.2.0.tgz", @@ -47580,18 +67735,26 @@ "resolved": "https://registry.npmjs.org/commander/-/commander-12.1.0.tgz", "integrity": "sha512-Vw8qHK3bZM9y/P10u3Vib8o/DdkvA2OtPtZvD871QKjy74Wj1WSKFILMPRPSdUSx5RFK1arlJzEtA4PkFgnbuA==", "license": "MIT", - "peer": true, "engines": { "node": ">=18" } }, + "packages/ats/sdk/node_modules/fresh": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", + "integrity": "sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==", + "license": "MIT", + "peer": true, + "engines": { + "node": ">= 0.6" + } + }, "packages/ats/sdk/node_modules/glob": { "version": "7.2.3", "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", "deprecated": "Glob versions prior to v9 are no longer supported", "license": "ISC", - "peer": true, "dependencies": { "fs.realpath": "^1.0.0", "inflight": "^1.0.4", @@ -47607,6 +67770,44 @@ "url": "https://github.com/sponsors/isaacs" } }, + "packages/ats/sdk/node_modules/hermes-estree": { + "version": "0.32.0", + "resolved": "https://registry.npmjs.org/hermes-estree/-/hermes-estree-0.32.0.tgz", + "integrity": "sha512-KWn3BqnlDOl97Xe1Yviur6NbgIZ+IP+UVSpshlZWkq+EtoHg6/cwiDj/osP9PCEgFE15KBm1O55JRwbMEm5ejQ==", + "license": "MIT", + "peer": true + }, + "packages/ats/sdk/node_modules/hermes-parser": { + "version": "0.32.0", + "resolved": "https://registry.npmjs.org/hermes-parser/-/hermes-parser-0.32.0.tgz", + "integrity": "sha512-g4nBOWFpuiTqjR3LZdRxKUkij9iyveWeuks7INEsMX741f3r9xxrOe8TeQfUxtda0eXmiIFiMQzoeSQEno33Hw==", + "license": "MIT", + "peer": true, + "dependencies": { + "hermes-estree": "0.32.0" + } + }, + "packages/ats/sdk/node_modules/http-errors": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.1.tgz", + "integrity": "sha512-4FbRdAX+bSdmo4AUFuS0WNiPz8NgFt+r8ThgNWmlrjQjt1Q7ZR9+zTlce2859x4KSXrwIsaeTqDoKQmtP8pLmQ==", + "license": "MIT", + "peer": true, + "dependencies": { + "depd": "~2.0.0", + "inherits": "~2.0.4", + "setprototypeof": "~1.2.0", + "statuses": "~2.0.2", + "toidentifier": "~1.0.1" + }, + "engines": { + "node": ">= 0.8" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" + } + }, "packages/ats/sdk/node_modules/jest-haste-map": { "version": "30.2.0", "resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-30.2.0.tgz", @@ -47681,8 +67882,20 @@ "version": "5.2.1", "resolved": "https://registry.npmjs.org/memoize-one/-/memoize-one-5.2.1.tgz", "integrity": "sha512-zYiwtZUcYyXKo/np96AGZAckk+FWWsUdJ3cHGGmld7+AhvcWmQyGCYUh1hc4Q/pkOhb65dQR/pqCyK0cOaHz4Q==", + "license": "MIT" + }, + "packages/ats/sdk/node_modules/mime": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", + "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==", "license": "MIT", - "peer": true + "peer": true, + "bin": { + "mime": "cli.js" + }, + "engines": { + "node": ">=4" + } }, "packages/ats/sdk/node_modules/picomatch": { "version": "4.0.3", @@ -47698,9 +67911,9 @@ } }, "packages/ats/sdk/node_modules/react": { - "version": "19.2.0", - "resolved": "https://registry.npmjs.org/react/-/react-19.2.0.tgz", - "integrity": "sha512-tmbWg6W31tQLeB5cdIBOicJDJRR2KzXsV7uSK9iNfLWQ5bIZfxuPEHp7M8wiHyHnn0DD1i7w3Zmin0FtkrwoCQ==", + "version": "19.2.3", + "resolved": "https://registry.npmjs.org/react/-/react-19.2.3.tgz", + "integrity": "sha512-Ku/hhYbVjOQnXDZFv2+RibmLFGwFdeeKHFcOTlrt7xplBnya5OGn/hIRDsqDiSUcfORsDC7MPxwork8jBwsIWA==", "license": "MIT", "peer": true, "engines": { @@ -47708,45 +67921,46 @@ } }, "packages/ats/sdk/node_modules/react-native": { - "version": "0.81.4", - "resolved": "https://registry.npmjs.org/react-native/-/react-native-0.81.4.tgz", - "integrity": "sha512-bt5bz3A/+Cv46KcjV0VQa+fo7MKxs17RCcpzjftINlen4ZDUl0I6Ut+brQ2FToa5oD0IB0xvQHfmsg2EDqsZdQ==", + "version": "0.83.1", + "resolved": "https://registry.npmjs.org/react-native/-/react-native-0.83.1.tgz", + "integrity": "sha512-mL1q5HPq5cWseVhWRLl+Fwvi5z1UO+3vGOpjr+sHFwcUletPRZ5Kv+d0tUfqHmvi73/53NjlQqX1Pyn4GguUfA==", "license": "MIT", "peer": true, "dependencies": { "@jest/create-cache-key-function": "^29.7.0", - "@react-native/assets-registry": "0.81.4", - "@react-native/codegen": "0.81.4", - "@react-native/community-cli-plugin": "0.81.4", - "@react-native/gradle-plugin": "0.81.4", - "@react-native/js-polyfills": "0.81.4", - "@react-native/normalize-colors": "0.81.4", - "@react-native/virtualized-lists": "0.81.4", + "@react-native/assets-registry": "0.83.1", + "@react-native/codegen": "0.83.1", + "@react-native/community-cli-plugin": "0.83.1", + "@react-native/gradle-plugin": "0.83.1", + "@react-native/js-polyfills": "0.83.1", + "@react-native/normalize-colors": "0.83.1", + "@react-native/virtualized-lists": "0.83.1", "abort-controller": "^3.0.0", "anser": "^1.4.9", "ansi-regex": "^5.0.0", "babel-jest": "^29.7.0", - "babel-plugin-syntax-hermes-parser": "0.29.1", + "babel-plugin-syntax-hermes-parser": "0.32.0", "base64-js": "^1.5.1", "commander": "^12.0.0", "flow-enums-runtime": "^0.0.6", "glob": "^7.1.1", + "hermes-compiler": "0.14.0", "invariant": "^2.2.4", "jest-environment-node": "^29.7.0", "memoize-one": "^5.0.0", - "metro-runtime": "^0.83.1", - "metro-source-map": "^0.83.1", + "metro-runtime": "^0.83.3", + "metro-source-map": "^0.83.3", "nullthrows": "^1.1.1", "pretty-format": "^29.7.0", "promise": "^8.3.0", "react-devtools-core": "^6.1.5", "react-refresh": "^0.14.0", "regenerator-runtime": "^0.13.2", - "scheduler": "0.26.0", + "scheduler": "0.27.0", "semver": "^7.1.3", "stacktrace-parser": "^0.1.10", "whatwg-fetch": "^3.0.0", - "ws": "^6.2.3", + "ws": "^7.5.10", "yargs": "^17.6.2" }, "bin": { @@ -47756,8 +67970,8 @@ "node": ">= 20.19.4" }, "peerDependencies": { - "@types/react": "^19.1.0", - "react": "^19.1.0" + "@types/react": "^19.1.1", + "react": "^19.2.0" }, "peerDependenciesMeta": { "@types/react": { @@ -47782,7 +67996,6 @@ "resolved": "https://registry.npmjs.org/@jest/schemas/-/schemas-29.6.3.tgz", "integrity": "sha512-mo5j5X+jIZmJQveBKeS/clAueipV7KgiX1vMgCxam1RNYiqE1w62n0/tJJnHtjW8ZHcQco5gY85jA3mi0L+nSA==", "license": "MIT", - "peer": true, "dependencies": { "@sinclair/typebox": "^0.27.8" }, @@ -47795,7 +68008,6 @@ "resolved": "https://registry.npmjs.org/@jest/transform/-/transform-29.7.0.tgz", "integrity": "sha512-ok/BTPFzFKVMwO5eOHRrvnBVHdRy9IrsrW1GpMaQ9MCnilNLXQKmAX8s1YXDFaai9xJpac2ySzV0YeRRECr2Vw==", "license": "MIT", - "peer": true, "dependencies": { "@babel/core": "^7.11.6", "@jest/types": "^29.6.3", @@ -47822,7 +68034,6 @@ "resolved": "https://registry.npmjs.org/@jest/types/-/types-29.6.3.tgz", "integrity": "sha512-u3UPsIilWKOM3F9CXtrG8LEJmNxwoCQC/XVj4IKYXvvpx7QIi/Kg1LI5uDmDpKlac62NUtX7eLjRh+jVZcLOzw==", "license": "MIT", - "peer": true, "dependencies": { "@jest/schemas": "^29.6.3", "@types/istanbul-lib-coverage": "^2.0.0", @@ -47839,15 +68050,13 @@ "version": "0.27.8", "resolved": "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.27.8.tgz", "integrity": "sha512-+Fj43pSMwJs4KRrH/938Uf+uAELIgVBmQzg/q1YG10djyfA3TnrU8N8XzqCh/okZdszqBQTZf96idMfE5lnwTA==", - "license": "MIT", - "peer": true + "license": "MIT" }, "packages/ats/sdk/node_modules/react-native/node_modules/babel-jest": { "version": "29.7.0", "resolved": "https://registry.npmjs.org/babel-jest/-/babel-jest-29.7.0.tgz", "integrity": "sha512-BrvGY3xZSwEcCzKvKsCi2GgHqDqsYkOP4/by5xCgIwGXQxIEh+8ew3gmrE1y7XRR6LHZIj6yLYnUi/mm2KXKBg==", "license": "MIT", - "peer": true, "dependencies": { "@jest/transform": "^29.7.0", "@types/babel__core": "^7.1.14", @@ -47869,7 +68078,6 @@ "resolved": "https://registry.npmjs.org/babel-plugin-istanbul/-/babel-plugin-istanbul-6.1.1.tgz", "integrity": "sha512-Y1IQok9821cC9onCx5otgFfRm7Lm+I+wwxOx738M/WLPZ9Q42m4IG5W0FNX8WLL2gYMZo3JkuXIH2DOpWM+qwA==", "license": "BSD-3-Clause", - "peer": true, "dependencies": { "@babel/helper-plugin-utils": "^7.0.0", "@istanbuljs/load-nyc-config": "^1.0.0", @@ -47886,7 +68094,6 @@ "resolved": "https://registry.npmjs.org/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-29.6.3.tgz", "integrity": "sha512-ESAc/RJvGTFEzRwOTT4+lNDk/GNHMkKbNzsvT0qKRfDyyYTskxB5rnU2njIDYVxXCBHHEI1c0YwHob3WaYujOg==", "license": "MIT", - "peer": true, "dependencies": { "@babel/template": "^7.3.3", "@babel/types": "^7.3.3", @@ -47902,7 +68109,6 @@ "resolved": "https://registry.npmjs.org/babel-preset-jest/-/babel-preset-jest-29.6.3.tgz", "integrity": "sha512-0B3bhxR6snWXJZtR/RliHTDPRgn1sNHOR0yVtq/IiQFyuOVjFS+wuio/R4gSNkyYmKmJB4wGZv2NZanmKmTnNA==", "license": "MIT", - "peer": true, "dependencies": { "babel-plugin-jest-hoist": "^29.6.3", "babel-preset-current-node-syntax": "^1.0.0" @@ -47925,7 +68131,6 @@ } ], "license": "MIT", - "peer": true, "engines": { "node": ">=8" } @@ -47935,7 +68140,6 @@ "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-5.2.1.tgz", "integrity": "sha512-pzqtp31nLv/XFOzXGuvhCb8qhjmTVo5vjVk19XE4CRlSWz0KoeJ3bw9XsA7nOp9YBf4qHjwBxkDzKcME/J29Yg==", "license": "BSD-3-Clause", - "peer": true, "dependencies": { "@babel/core": "^7.12.3", "@babel/parser": "^7.14.7", @@ -47952,7 +68156,6 @@ "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", "license": "ISC", - "peer": true, "bin": { "semver": "bin/semver.js" } @@ -47962,7 +68165,6 @@ "resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-29.7.0.tgz", "integrity": "sha512-fP8u2pyfqx0K1rGn1R9pyE0/KTn+G7PxktWidOBTqFPLYX0b9ksaMFkhK5vrS3DVun09pckLdlx90QthlW7AmA==", "license": "MIT", - "peer": true, "dependencies": { "@jest/types": "^29.6.3", "@types/graceful-fs": "^4.1.3", @@ -47988,7 +68190,6 @@ "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-29.6.3.tgz", "integrity": "sha512-KJJBsRCyyLNWCNBOvZyRDnAIfUiRJ8v+hOBQYGn8gDyF3UegwiP4gwRR3/SDa42g1YbVycTidUF3rKjyLFDWbg==", "license": "MIT", - "peer": true, "engines": { "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } @@ -47998,7 +68199,6 @@ "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-29.7.0.tgz", "integrity": "sha512-z6EbKajIpqGKU56y5KBUgy1dt1ihhQJgWzUlZHArA/+X2ad7Cb5iF+AK1EWVL/Bo7Rz9uurpqw6SiBCefUbCGA==", "license": "MIT", - "peer": true, "dependencies": { "@jest/types": "^29.6.3", "@types/node": "*", @@ -48016,7 +68216,6 @@ "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-29.7.0.tgz", "integrity": "sha512-eIz2msL/EzL9UFTFFx7jBTkeZfku0yUAyZZZmJ93H2TYEiroIx2PQjEXcwYtYl8zXCxb+PAmA2hLIt/6ZEkPHw==", "license": "MIT", - "peer": true, "dependencies": { "@types/node": "*", "jest-util": "^29.7.0", @@ -48032,7 +68231,6 @@ "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", "license": "MIT", - "peer": true, "engines": { "node": ">=8.6" }, @@ -48044,15 +68242,13 @@ "version": "3.0.7", "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", - "license": "ISC", - "peer": true + "license": "ISC" }, "packages/ats/sdk/node_modules/react-native/node_modules/write-file-atomic": { "version": "4.0.2", "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-4.0.2.tgz", "integrity": "sha512-7KxauUdBmSdWnmpaGFg+ppNjKF8uNLry8LyzjauQDOVONfFLNKrKvQOxZ/VuTIcS/gge/YNahf5RIIQWTSarlg==", "license": "ISC", - "peer": true, "dependencies": { "imurmurhash": "^0.1.4", "signal-exit": "^3.0.7" @@ -48066,24 +68262,21 @@ "resolved": "https://registry.npmjs.org/react-refresh/-/react-refresh-0.14.2.tgz", "integrity": "sha512-jCvmsr+1IUSMUyzOkRcvnVbX3ZYC6g9TDrDbFuFmRDq7PD4yaGbLKNQL6k2jnArV8hjYxh7hVhAZB6s9HDGpZA==", "license": "MIT", - "peer": true, "engines": { "node": ">=0.10.0" } }, "packages/ats/sdk/node_modules/scheduler": { - "version": "0.26.0", - "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.26.0.tgz", - "integrity": "sha512-NlHwttCI/l5gCPR3D1nNXtWABUmBwvZpEQiD4IXSbIDq8BzLIK/7Ir5gTFSGZDUu37K5cMNp0hFtzO38sC7gWA==", - "license": "MIT", - "peer": true + "version": "0.27.0", + "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.27.0.tgz", + "integrity": "sha512-eNv+WrVbKu1f3vbYJT/xtiF5syA5HPIMtf9IgY/nKg0sWqzAUEvqY/xm7OcZc/qafLx/iO9FgOmeSAp4v5ti/Q==", + "license": "MIT" }, "packages/ats/sdk/node_modules/semver": { - "version": "7.7.2", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.2.tgz", - "integrity": "sha512-RF0Fw+rO5AMf9MAyaRXI4AV0Ulj5lMHqVxxdSgiVbixSCXoEmmX/jk0CuJw4+3SqroYO9VoUh+HcuJivvtJemA==", + "version": "7.7.3", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.3.tgz", + "integrity": "sha512-SdsKMrI9TdgjdweUSR9MweHA4EJ8YxHn8DFaDisvhVlUOe4BF1tLD7GAj0lIqWVl+dPb/rExr0Btby5loQm20Q==", "license": "ISC", - "peer": true, "bin": { "semver": "bin/semver.js" }, @@ -48091,343 +68284,182 @@ "node": ">=10" } }, - "packages/ats/sdk/node_modules/supports-color": { - "version": "8.1.1", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", - "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", + "packages/ats/sdk/node_modules/send": { + "version": "0.19.2", + "resolved": "https://registry.npmjs.org/send/-/send-0.19.2.tgz", + "integrity": "sha512-VMbMxbDeehAxpOtWJXlcUS5E8iXh6QmN+BkRX1GARS3wRaXEEgzCcB10gTQazO42tpNIya8xIyNx8fll1OFPrg==", "license": "MIT", + "peer": true, "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/supports-color?sponsor=1" - } - }, - "packages/ats/sdk/node_modules/write-file-atomic": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-5.0.1.tgz", - "integrity": "sha512-+QU2zd6OTD8XWIJCbffaiQeH9U73qIqafo1x6V1snCWYGJf6cVE0cDR4D8xRzcEnfI21IFrUPzPGtcPf8AC+Rw==", - "dev": true, - "license": "ISC", - "dependencies": { - "imurmurhash": "^0.1.4", - "signal-exit": "^4.0.1" + "debug": "2.6.9", + "depd": "2.0.0", + "destroy": "1.2.0", + "encodeurl": "~2.0.0", + "escape-html": "~1.0.3", + "etag": "~1.8.1", + "fresh": "~0.5.2", + "http-errors": "~2.0.1", + "mime": "1.6.0", + "ms": "2.1.3", + "on-finished": "~2.4.1", + "range-parser": "~1.2.1", + "statuses": "~2.0.2" }, "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + "node": ">= 0.8.0" } }, - "packages/ats/sdk/node_modules/ws": { - "version": "6.2.3", - "resolved": "https://registry.npmjs.org/ws/-/ws-6.2.3.tgz", - "integrity": "sha512-jmTjYU0j60B+vHey6TfR3Z7RD61z/hmxBS3VMSGIrroOWXQEneK1zNuotOUrGyBHQj0yrpsLHPWtigEFd13ndA==", + "packages/ats/sdk/node_modules/send/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", "license": "MIT", "peer": true, "dependencies": { - "async-limiter": "~1.0.0" - } - }, - "packages/mass-payout/contracts": { - "name": "@mass-payout/contracts", - "version": "1.0.0", - "license": "UNLICENSED", - "dependencies": { - "bn.js": "5.2.1" - }, - "devDependencies": { - "@hashgraph/sdk": "2.64.5", - "@hashgraph/smart-contracts": "github:hashgraph/hedera-smart-contracts#v0.10.1", - "@nomicfoundation/hardhat-chai-matchers": "1.0.6", - "@nomicfoundation/hardhat-toolbox": "^2.0.2", - "@nomiclabs/hardhat-ethers": "2.2.3", - "@nomiclabs/hardhat-etherscan": "3.1.8", - "@openzeppelin/contracts": "^5.3.0", - "@openzeppelin/contracts-upgradeable": "^4.9.6", - "@openzeppelin/hardhat-upgrades": "^1.28.0", - "@terminal3/ecdsa_vc": "0.1.21", - "@typechain/ethers-v5": "^10.1.0", - "@typechain/hardhat": "^6.1.2", - "@types/mocha": "10.0.10", - "chai": "^4.4.0", - "chai-as-promised": "^7.1.1", - "dotenv": "^16.0.3", - "ethers": "^5.8.0", - "hardhat": "^2.22.19", - "hardhat-abi-exporter": "^2.11.0", - "hardhat-contract-sizer": "^2.10.0", - "hardhat-gas-reporter": "^1.0.8", - "prettier-plugin-solidity": "^1.4.2", - "solhint": "^3.3.7", - "solhint-plugin-prettier": "^0.1.0", - "solidity-coverage": "^0.8.16", - "tsconfig-paths": "^4.2.0", - "typechain": "8.3.2" - }, - "engines": { - "node": ">=22.16.0" - } - }, - "packages/mass-payout/contracts/node_modules/@adraffy/ens-normalize": { - "version": "1.10.1", - "resolved": "https://registry.npmjs.org/@adraffy/ens-normalize/-/ens-normalize-1.10.1.tgz", - "integrity": "sha512-96Z2IP3mYmF1Xg2cDm8f1gWGf/HUVedQ3FMifV4kG/PQ4yEP51xDtRAEfhVNt5f/uzpNkZHwWQuUcu6D6K+Ekw==", - "dev": true, - "license": "MIT" - }, - "packages/mass-payout/contracts/node_modules/@hashgraph/cryptography": { - "version": "1.7.2", - "resolved": "https://registry.npmjs.org/@hashgraph/cryptography/-/cryptography-1.7.2.tgz", - "integrity": "sha512-XeLpuoUNrW/F9gCiivmg5RnHjoNc8i5S4kK5BII6Dk3KfgeYt6hwJw1jGqwXenmrprbxPq7QIh10HuCTrGCzcw==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "@noble/curves": "^1.8.1", - "asn1js": "^3.0.6", - "bignumber.js": "^9.1.1", - "bn.js": "^5.2.1", - "buffer": "^6.0.3", - "crypto-js": "^4.2.0", - "forge-light": "1.1.4", - "js-base64": "^3.7.7", - "react-native-get-random-values": "^1.11.0", - "spark-md5": "^3.0.2", - "tweetnacl": "^1.0.3", - "utf8": "^3.0.0" - }, - "engines": { - "node": ">=12.0.0" - }, - "peerDependenciesMeta": { - "expo-crypto": { - "optional": true - } - } - }, - "packages/mass-payout/contracts/node_modules/@hashgraph/proto": { - "version": "2.18.5", - "resolved": "https://registry.npmjs.org/@hashgraph/proto/-/proto-2.18.5.tgz", - "integrity": "sha512-LifEGGhvkqF49PYVP0xkcnCh8fP43q/+JkGPdZkwKglw1wFAJkPHZtQmGZSjmDpl2gbJiRyzvzJ1Q9MJ1VBA4Q==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "long": "^5.2.3", - "protobufjs": "7.2.5" - }, - "engines": { - "node": ">=10.0.0" - } - }, - "packages/mass-payout/contracts/node_modules/@hashgraph/sdk": { - "version": "2.64.5", - "resolved": "https://registry.npmjs.org/@hashgraph/sdk/-/sdk-2.64.5.tgz", - "integrity": "sha512-AIa8jlkhDx2GZHSURWb3YuobTDwozmVyiyvt7MZRDDYKQbibrpyvrTI6E2IRx1xn7fI0Vd5aHELtmHYmkEVjag==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "@ethersproject/abi": "^5.8.0", - "@ethersproject/bignumber": "^5.8.0", - "@ethersproject/bytes": "^5.8.0", - "@ethersproject/rlp": "^5.8.0", - "@grpc/grpc-js": "^1.12.6", - "@hashgraph/cryptography": "1.7.2", - "@hashgraph/proto": "2.18.5", - "bignumber.js": "^9.1.1", - "bn.js": "^5.1.1", - "crypto-js": "^4.2.0", - "js-base64": "^3.7.4", - "long": "^5.3.1", - "pino": "^9.6.0", - "pino-pretty": "^13.0.0", - "protobufjs": "7.2.5", - "rfc4648": "^1.5.3", - "utf8": "^3.0.0" - }, - "engines": { - "node": ">=18.0.0" - }, - "peerDependencies": { - "bn.js": "^5.2.1" - } - }, - "packages/mass-payout/contracts/node_modules/@noble/hashes": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.3.2.tgz", - "integrity": "sha512-MVC8EAQp7MvEcm30KWENFjgR+Mkmf+D189XJTkFIlwohU5hcBbn1ZkKq7KVTi2Hme3PMGF390DaL52beVrIihQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 16" - }, - "funding": { - "url": "https://paulmillr.com/funding/" + "ms": "2.0.0" } }, - "packages/mass-payout/contracts/node_modules/@openzeppelin/contracts": { - "version": "5.4.0", - "resolved": "https://registry.npmjs.org/@openzeppelin/contracts/-/contracts-5.4.0.tgz", - "integrity": "sha512-eCYgWnLg6WO+X52I16TZt8uEjbtdkgLC0SUX/xnAksjjrQI4Xfn4iBRoI5j55dmlOhDv1Y7BoR3cU7e3WWhC6A==", - "dev": true, - "license": "MIT" + "packages/ats/sdk/node_modules/send/node_modules/debug/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "license": "MIT", + "peer": true }, - "packages/mass-payout/contracts/node_modules/@react-native/assets-registry": { - "version": "0.83.1", - "resolved": "https://registry.npmjs.org/@react-native/assets-registry/-/assets-registry-0.83.1.tgz", - "integrity": "sha512-AT7/T6UwQqO39bt/4UL5EXvidmrddXrt0yJa7ENXndAv+8yBzMsZn6fyiax6+ERMt9GLzAECikv3lj22cn2wJA==", - "dev": true, + "packages/ats/sdk/node_modules/serve-static": { + "version": "1.16.3", + "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.16.3.tgz", + "integrity": "sha512-x0RTqQel6g5SY7Lg6ZreMmsOzncHFU7nhnRWkKgWuMTu5NN0DR5oruckMqRvacAN9d5w6ARnRBXl9xhDCgfMeA==", "license": "MIT", "peer": true, + "dependencies": { + "encodeurl": "~2.0.0", + "escape-html": "~1.0.3", + "parseurl": "~1.3.3", + "send": "~0.19.1" + }, "engines": { - "node": ">= 20.19.4" + "node": ">= 0.8.0" } }, - "packages/mass-payout/contracts/node_modules/@react-native/codegen": { - "version": "0.83.1", - "resolved": "https://registry.npmjs.org/@react-native/codegen/-/codegen-0.83.1.tgz", - "integrity": "sha512-FpRxenonwH+c2a5X5DZMKUD7sCudHxB3eSQPgV9R+uxd28QWslyAWrpnJM/Az96AEksHnymDzEmzq2HLX5nb+g==", - "dev": true, + "packages/ats/sdk/node_modules/supports-color": { + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", + "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", "license": "MIT", - "peer": true, "dependencies": { - "@babel/core": "^7.25.2", - "@babel/parser": "^7.25.3", - "glob": "^7.1.1", - "hermes-parser": "0.32.0", - "invariant": "^2.2.4", - "nullthrows": "^1.1.1", - "yargs": "^17.6.2" + "has-flag": "^4.0.0" }, "engines": { - "node": ">= 20.19.4" + "node": ">=10" }, - "peerDependencies": { - "@babel/core": "*" + "funding": { + "url": "https://github.com/chalk/supports-color?sponsor=1" } }, - "packages/mass-payout/contracts/node_modules/@react-native/community-cli-plugin": { - "version": "0.83.1", - "resolved": "https://registry.npmjs.org/@react-native/community-cli-plugin/-/community-cli-plugin-0.83.1.tgz", - "integrity": "sha512-FqR1ftydr08PYlRbrDF06eRiiiGOK/hNmz5husv19sK6iN5nHj1SMaCIVjkH/a5vryxEddyFhU6PzO/uf4kOHg==", + "packages/ats/sdk/node_modules/write-file-atomic": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-5.0.1.tgz", + "integrity": "sha512-+QU2zd6OTD8XWIJCbffaiQeH9U73qIqafo1x6V1snCWYGJf6cVE0cDR4D8xRzcEnfI21IFrUPzPGtcPf8AC+Rw==", "dev": true, - "license": "MIT", - "peer": true, + "license": "ISC", "dependencies": { - "@react-native/dev-middleware": "0.83.1", - "debug": "^4.4.0", - "invariant": "^2.2.4", - "metro": "^0.83.3", - "metro-config": "^0.83.3", - "metro-core": "^0.83.3", - "semver": "^7.1.3" + "imurmurhash": "^0.1.4", + "signal-exit": "^4.0.1" }, "engines": { - "node": ">= 20.19.4" + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "packages/ats/sdk/node_modules/ws": { + "version": "7.5.10", + "resolved": "https://registry.npmjs.org/ws/-/ws-7.5.10.tgz", + "integrity": "sha512-+dbF1tHwZpXcbOJdVOkzLDxZP1ailvSxM6ZweXTegylPny803bFhA+vqBYw4s31NSAk4S2Qz+AKXK9a4wkdjcQ==", + "license": "MIT", + "peer": true, + "engines": { + "node": ">=8.3.0" }, "peerDependencies": { - "@react-native-community/cli": "*", - "@react-native/metro-config": "*" + "bufferutil": "^4.0.1", + "utf-8-validate": "^5.0.2" }, "peerDependenciesMeta": { - "@react-native-community/cli": { + "bufferutil": { "optional": true }, - "@react-native/metro-config": { + "utf-8-validate": { "optional": true } } }, - "packages/mass-payout/contracts/node_modules/@react-native/debugger-frontend": { - "version": "0.83.1", - "resolved": "https://registry.npmjs.org/@react-native/debugger-frontend/-/debugger-frontend-0.83.1.tgz", - "integrity": "sha512-01Rn3goubFvPjHXONooLmsW0FLxJDKIUJNOlOS0cPtmmTIx9YIjxhe/DxwHXGk7OnULd7yl3aYy7WlBsEd5Xmg==", - "dev": true, - "license": "BSD-3-Clause", - "peer": true, - "engines": { - "node": ">= 20.19.4" - } - }, - "packages/mass-payout/contracts/node_modules/@react-native/dev-middleware": { - "version": "0.83.1", - "resolved": "https://registry.npmjs.org/@react-native/dev-middleware/-/dev-middleware-0.83.1.tgz", - "integrity": "sha512-QJaSfNRzj3Lp7MmlCRgSBlt1XZ38xaBNXypXAp/3H3OdFifnTZOeYOpFmcpjcXYnDqkxetuwZg8VL65SQhB8dg==", - "dev": true, - "license": "MIT", - "peer": true, + "packages/mass-payout/contracts": { + "name": "@hashgraph/mass-payout-contracts", + "version": "1.0.0", + "license": "UNLICENSED", "dependencies": { - "@isaacs/ttlcache": "^1.4.1", - "@react-native/debugger-frontend": "0.83.1", - "@react-native/debugger-shell": "0.83.1", - "chrome-launcher": "^0.15.2", - "chromium-edge-launcher": "^0.2.0", - "connect": "^3.6.5", - "debug": "^4.4.0", - "invariant": "^2.2.4", - "nullthrows": "^1.1.1", - "open": "^7.0.3", - "serve-static": "^1.16.2", - "ws": "^7.5.10" + "bn.js": "5.2.1" + }, + "devDependencies": { + "@hashgraph/smart-contracts": "github:hashgraph/hedera-smart-contracts#v0.10.1", + "@hiero-ledger/sdk": "2.79.0", + "@nomicfoundation/hardhat-chai-matchers": "1.0.6", + "@nomicfoundation/hardhat-toolbox": "^2.0.2", + "@nomiclabs/hardhat-ethers": "2.2.3", + "@nomiclabs/hardhat-etherscan": "3.1.8", + "@openzeppelin/contracts": "^5.3.0", + "@openzeppelin/contracts-upgradeable": "^4.9.6", + "@openzeppelin/hardhat-upgrades": "^1.28.0", + "@primitivefi/hardhat-dodoc": "^0.2.3", + "@terminal3/ecdsa_vc": "0.1.21", + "@typechain/ethers-v5": "^10.1.0", + "@typechain/hardhat": "^6.1.2", + "@types/mocha": "10.0.10", + "chai": "^4.4.0", + "chai-as-promised": "^7.1.1", + "dotenv": "^16.0.3", + "ethers": "^5.8.0", + "hardhat": "^2.22.19", + "hardhat-abi-exporter": "^2.11.0", + "hardhat-contract-sizer": "^2.10.0", + "hardhat-gas-reporter": "^1.0.8", + "prettier-plugin-solidity": "^1.4.2", + "solhint": "^3.3.7", + "solhint-plugin-prettier": "^0.1.0", + "solidity-coverage": "^0.8.16", + "tsconfig-paths": "^4.2.0", + "typechain": "8.3.2" }, "engines": { - "node": ">= 20.19.4" + "node": ">=22.16.0" } }, - "packages/mass-payout/contracts/node_modules/@react-native/gradle-plugin": { - "version": "0.83.1", - "resolved": "https://registry.npmjs.org/@react-native/gradle-plugin/-/gradle-plugin-0.83.1.tgz", - "integrity": "sha512-6ESDnwevp1CdvvxHNgXluil5OkqbjkJAkVy7SlpFsMGmVhrSxNAgD09SSRxMNdKsnLtzIvMsFCzyHLsU/S4PtQ==", + "packages/mass-payout/contracts/node_modules/@adraffy/ens-normalize": { + "version": "1.10.1", + "resolved": "https://registry.npmjs.org/@adraffy/ens-normalize/-/ens-normalize-1.10.1.tgz", + "integrity": "sha512-96Z2IP3mYmF1Xg2cDm8f1gWGf/HUVedQ3FMifV4kG/PQ4yEP51xDtRAEfhVNt5f/uzpNkZHwWQuUcu6D6K+Ekw==", "dev": true, - "license": "MIT", - "peer": true, - "engines": { - "node": ">= 20.19.4" - } + "license": "MIT" }, - "packages/mass-payout/contracts/node_modules/@react-native/js-polyfills": { - "version": "0.83.1", - "resolved": "https://registry.npmjs.org/@react-native/js-polyfills/-/js-polyfills-0.83.1.tgz", - "integrity": "sha512-qgPpdWn/c5laA+3WoJ6Fak8uOm7CG50nBsLlPsF8kbT7rUHIVB9WaP6+GPsoKV/H15koW7jKuLRoNVT7c3Ht3w==", + "packages/mass-payout/contracts/node_modules/@noble/hashes": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.3.2.tgz", + "integrity": "sha512-MVC8EAQp7MvEcm30KWENFjgR+Mkmf+D189XJTkFIlwohU5hcBbn1ZkKq7KVTi2Hme3PMGF390DaL52beVrIihQ==", "dev": true, "license": "MIT", - "peer": true, "engines": { - "node": ">= 20.19.4" + "node": ">= 16" + }, + "funding": { + "url": "https://paulmillr.com/funding/" } }, - "packages/mass-payout/contracts/node_modules/@react-native/normalize-colors": { - "version": "0.83.1", - "resolved": "https://registry.npmjs.org/@react-native/normalize-colors/-/normalize-colors-0.83.1.tgz", - "integrity": "sha512-84feABbmeWo1kg81726UOlMKAhcQyFXYz2SjRKYkS78QmfhVDhJ2o/ps1VjhFfBz0i/scDwT1XNv9GwmRIghkg==", - "dev": true, - "license": "MIT", - "peer": true - }, - "packages/mass-payout/contracts/node_modules/@react-native/virtualized-lists": { - "version": "0.83.1", - "resolved": "https://registry.npmjs.org/@react-native/virtualized-lists/-/virtualized-lists-0.83.1.tgz", - "integrity": "sha512-MdmoAbQUTOdicCocm5XAFDJWsswxk7hxa6ALnm6Y88p01HFML0W593hAn6qOt9q6IM1KbAcebtH6oOd4gcQy8w==", + "packages/mass-payout/contracts/node_modules/@openzeppelin/contracts": { + "version": "5.4.0", + "resolved": "https://registry.npmjs.org/@openzeppelin/contracts/-/contracts-5.4.0.tgz", + "integrity": "sha512-eCYgWnLg6WO+X52I16TZt8uEjbtdkgLC0SUX/xnAksjjrQI4Xfn4iBRoI5j55dmlOhDv1Y7BoR3cU7e3WWhC6A==", "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "invariant": "^2.2.4", - "nullthrows": "^1.1.1" - }, - "engines": { - "node": ">= 20.19.4" - }, - "peerDependencies": { - "@types/react": "^19.2.0", - "react": "*", - "react-native": "*" - }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - } - } + "license": "MIT" }, "packages/mass-payout/contracts/node_modules/@terminal3/ecdsa_vc": { "version": "0.1.21", @@ -48755,311 +68787,6 @@ "dev": true, "license": "MIT" }, - "packages/mass-payout/contracts/node_modules/babel-plugin-syntax-hermes-parser": { - "version": "0.32.0", - "resolved": "https://registry.npmjs.org/babel-plugin-syntax-hermes-parser/-/babel-plugin-syntax-hermes-parser-0.32.0.tgz", - "integrity": "sha512-m5HthL++AbyeEA2FcdwOLfVFvWYECOBObLHNqdR8ceY4TsEdn4LdX2oTvbB2QJSSElE2AWA/b2MXZ/PF/CqLZg==", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "hermes-parser": "0.32.0" - } - }, - "packages/mass-payout/contracts/node_modules/commander": { - "version": "12.1.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-12.1.0.tgz", - "integrity": "sha512-Vw8qHK3bZM9y/P10u3Vib8o/DdkvA2OtPtZvD871QKjy74Wj1WSKFILMPRPSdUSx5RFK1arlJzEtA4PkFgnbuA==", - "dev": true, - "license": "MIT", - "peer": true, - "engines": { - "node": ">=18" - } - }, - "packages/mass-payout/contracts/node_modules/fresh": { - "version": "0.5.2", - "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", - "integrity": "sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==", - "dev": true, - "license": "MIT", - "peer": true, - "engines": { - "node": ">= 0.6" - } - }, - "packages/mass-payout/contracts/node_modules/glob": { - "version": "7.2.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", - "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", - "deprecated": "Glob versions prior to v9 are no longer supported", - "dev": true, - "license": "ISC", - "peer": true, - "dependencies": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.1.1", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - }, - "engines": { - "node": "*" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "packages/mass-payout/contracts/node_modules/hermes-estree": { - "version": "0.32.0", - "resolved": "https://registry.npmjs.org/hermes-estree/-/hermes-estree-0.32.0.tgz", - "integrity": "sha512-KWn3BqnlDOl97Xe1Yviur6NbgIZ+IP+UVSpshlZWkq+EtoHg6/cwiDj/osP9PCEgFE15KBm1O55JRwbMEm5ejQ==", - "dev": true, - "license": "MIT", - "peer": true - }, - "packages/mass-payout/contracts/node_modules/hermes-parser": { - "version": "0.32.0", - "resolved": "https://registry.npmjs.org/hermes-parser/-/hermes-parser-0.32.0.tgz", - "integrity": "sha512-g4nBOWFpuiTqjR3LZdRxKUkij9iyveWeuks7INEsMX741f3r9xxrOe8TeQfUxtda0eXmiIFiMQzoeSQEno33Hw==", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "hermes-estree": "0.32.0" - } - }, - "packages/mass-payout/contracts/node_modules/http-errors": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.1.tgz", - "integrity": "sha512-4FbRdAX+bSdmo4AUFuS0WNiPz8NgFt+r8ThgNWmlrjQjt1Q7ZR9+zTlce2859x4KSXrwIsaeTqDoKQmtP8pLmQ==", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "depd": "~2.0.0", - "inherits": "~2.0.4", - "setprototypeof": "~1.2.0", - "statuses": "~2.0.2", - "toidentifier": "~1.0.1" - }, - "engines": { - "node": ">= 0.8" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/express" - } - }, - "packages/mass-payout/contracts/node_modules/long": { - "version": "5.3.2", - "resolved": "https://registry.npmjs.org/long/-/long-5.3.2.tgz", - "integrity": "sha512-mNAgZ1GmyNhD7AuqnTG3/VQ26o760+ZYBPKjPvugO8+nLbYfX6TVpJPseBvopbdY+qpZ/lKUnmEc1LeZYS3QAA==", - "dev": true, - "license": "Apache-2.0" - }, - "packages/mass-payout/contracts/node_modules/memoize-one": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/memoize-one/-/memoize-one-5.2.1.tgz", - "integrity": "sha512-zYiwtZUcYyXKo/np96AGZAckk+FWWsUdJ3cHGGmld7+AhvcWmQyGCYUh1hc4Q/pkOhb65dQR/pqCyK0cOaHz4Q==", - "dev": true, - "license": "MIT", - "peer": true - }, - "packages/mass-payout/contracts/node_modules/mime": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", - "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==", - "dev": true, - "license": "MIT", - "peer": true, - "bin": { - "mime": "cli.js" - }, - "engines": { - "node": ">=4" - } - }, - "packages/mass-payout/contracts/node_modules/react": { - "version": "19.2.3", - "resolved": "https://registry.npmjs.org/react/-/react-19.2.3.tgz", - "integrity": "sha512-Ku/hhYbVjOQnXDZFv2+RibmLFGwFdeeKHFcOTlrt7xplBnya5OGn/hIRDsqDiSUcfORsDC7MPxwork8jBwsIWA==", - "dev": true, - "license": "MIT", - "peer": true, - "engines": { - "node": ">=0.10.0" - } - }, - "packages/mass-payout/contracts/node_modules/react-native": { - "version": "0.83.1", - "resolved": "https://registry.npmjs.org/react-native/-/react-native-0.83.1.tgz", - "integrity": "sha512-mL1q5HPq5cWseVhWRLl+Fwvi5z1UO+3vGOpjr+sHFwcUletPRZ5Kv+d0tUfqHmvi73/53NjlQqX1Pyn4GguUfA==", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "@jest/create-cache-key-function": "^29.7.0", - "@react-native/assets-registry": "0.83.1", - "@react-native/codegen": "0.83.1", - "@react-native/community-cli-plugin": "0.83.1", - "@react-native/gradle-plugin": "0.83.1", - "@react-native/js-polyfills": "0.83.1", - "@react-native/normalize-colors": "0.83.1", - "@react-native/virtualized-lists": "0.83.1", - "abort-controller": "^3.0.0", - "anser": "^1.4.9", - "ansi-regex": "^5.0.0", - "babel-jest": "^29.7.0", - "babel-plugin-syntax-hermes-parser": "0.32.0", - "base64-js": "^1.5.1", - "commander": "^12.0.0", - "flow-enums-runtime": "^0.0.6", - "glob": "^7.1.1", - "hermes-compiler": "0.14.0", - "invariant": "^2.2.4", - "jest-environment-node": "^29.7.0", - "memoize-one": "^5.0.0", - "metro-runtime": "^0.83.3", - "metro-source-map": "^0.83.3", - "nullthrows": "^1.1.1", - "pretty-format": "^29.7.0", - "promise": "^8.3.0", - "react-devtools-core": "^6.1.5", - "react-refresh": "^0.14.0", - "regenerator-runtime": "^0.13.2", - "scheduler": "0.27.0", - "semver": "^7.1.3", - "stacktrace-parser": "^0.1.10", - "whatwg-fetch": "^3.0.0", - "ws": "^7.5.10", - "yargs": "^17.6.2" - }, - "bin": { - "react-native": "cli.js" - }, - "engines": { - "node": ">= 20.19.4" - }, - "peerDependencies": { - "@types/react": "^19.1.1", - "react": "^19.2.0" - }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - } - } - }, - "packages/mass-payout/contracts/node_modules/react-native-get-random-values": { - "version": "1.11.0", - "resolved": "https://registry.npmjs.org/react-native-get-random-values/-/react-native-get-random-values-1.11.0.tgz", - "integrity": "sha512-4BTbDbRmS7iPdhYLRcz3PGFIpFJBwNZg9g42iwa2P6FOv9vZj/xJc678RZXnLNZzd0qd7Q3CCF6Yd+CU2eoXKQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "fast-base64-decode": "^1.0.0" - }, - "peerDependencies": { - "react-native": ">=0.56" - } - }, - "packages/mass-payout/contracts/node_modules/react-refresh": { - "version": "0.14.2", - "resolved": "https://registry.npmjs.org/react-refresh/-/react-refresh-0.14.2.tgz", - "integrity": "sha512-jCvmsr+1IUSMUyzOkRcvnVbX3ZYC6g9TDrDbFuFmRDq7PD4yaGbLKNQL6k2jnArV8hjYxh7hVhAZB6s9HDGpZA==", - "dev": true, - "license": "MIT", - "peer": true, - "engines": { - "node": ">=0.10.0" - } - }, - "packages/mass-payout/contracts/node_modules/scheduler": { - "version": "0.27.0", - "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.27.0.tgz", - "integrity": "sha512-eNv+WrVbKu1f3vbYJT/xtiF5syA5HPIMtf9IgY/nKg0sWqzAUEvqY/xm7OcZc/qafLx/iO9FgOmeSAp4v5ti/Q==", - "dev": true, - "license": "MIT", - "peer": true - }, - "packages/mass-payout/contracts/node_modules/semver": { - "version": "7.7.3", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.3.tgz", - "integrity": "sha512-SdsKMrI9TdgjdweUSR9MweHA4EJ8YxHn8DFaDisvhVlUOe4BF1tLD7GAj0lIqWVl+dPb/rExr0Btby5loQm20Q==", - "dev": true, - "license": "ISC", - "peer": true, - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, - "packages/mass-payout/contracts/node_modules/send": { - "version": "0.19.2", - "resolved": "https://registry.npmjs.org/send/-/send-0.19.2.tgz", - "integrity": "sha512-VMbMxbDeehAxpOtWJXlcUS5E8iXh6QmN+BkRX1GARS3wRaXEEgzCcB10gTQazO42tpNIya8xIyNx8fll1OFPrg==", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "debug": "2.6.9", - "depd": "2.0.0", - "destroy": "1.2.0", - "encodeurl": "~2.0.0", - "escape-html": "~1.0.3", - "etag": "~1.8.1", - "fresh": "~0.5.2", - "http-errors": "~2.0.1", - "mime": "1.6.0", - "ms": "2.1.3", - "on-finished": "~2.4.1", - "range-parser": "~1.2.1", - "statuses": "~2.0.2" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "packages/mass-payout/contracts/node_modules/send/node_modules/debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "ms": "2.0.0" - } - }, - "packages/mass-payout/contracts/node_modules/send/node_modules/debug/node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", - "dev": true, - "license": "MIT", - "peer": true - }, - "packages/mass-payout/contracts/node_modules/serve-static": { - "version": "1.16.3", - "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.16.3.tgz", - "integrity": "sha512-x0RTqQel6g5SY7Lg6ZreMmsOzncHFU7nhnRWkKgWuMTu5NN0DR5oruckMqRvacAN9d5w6ARnRBXl9xhDCgfMeA==", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "encodeurl": "~2.0.0", - "escape-html": "~1.0.3", - "parseurl": "~1.3.3", - "send": "~0.19.1" - }, - "engines": { - "node": ">= 0.8.0" - } - }, "packages/mass-payout/contracts/node_modules/tslib": { "version": "2.7.0", "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.7.0.tgz", @@ -49088,35 +68815,12 @@ "uuid": "dist/bin/uuid" } }, - "packages/mass-payout/contracts/node_modules/ws": { - "version": "7.5.10", - "resolved": "https://registry.npmjs.org/ws/-/ws-7.5.10.tgz", - "integrity": "sha512-+dbF1tHwZpXcbOJdVOkzLDxZP1ailvSxM6ZweXTegylPny803bFhA+vqBYw4s31NSAk4S2Qz+AKXK9a4wkdjcQ==", - "dev": true, - "license": "MIT", - "peer": true, - "engines": { - "node": ">=8.3.0" - }, - "peerDependencies": { - "bufferutil": "^4.0.1", - "utf-8-validate": "^5.0.2" - }, - "peerDependenciesMeta": { - "bufferutil": { - "optional": true - }, - "utf-8-validate": { - "optional": true - } - } - }, "packages/mass-payout/sdk": { - "name": "@mass-payout/sdk", + "name": "@hashgraph/mass-payout-sdk", "version": "1.0.0", "license": "Apache-2.0", "dependencies": { - "@hashgraph/sdk": "2.66.0", + "@hiero-ledger/sdk": "2.79.0", "@nestjs/common": "10.3.3", "@nestjs/core": "10.3.3", "bn.js": "5.2.1", diff --git a/package.json b/package.json index ebd3106b7..a2f707841 100644 --- a/package.json +++ b/package.json @@ -3,7 +3,7 @@ "license": "Apache-2.0", "description": "asset tokenization", "private": true, - "workspaces": ["packages/ats/*", "packages/mass-payout/*", "apps/ats/*", "apps/mass-payout/*"], + "workspaces": ["packages/ats/*", "packages/mass-payout/*", "apps/ats/*", "apps/mass-payout/*", "apps/docs"], "overrides": { "@hashgraph/asset-tokenization-dapp": { "i18next": "23.10.1", @@ -11,7 +11,7 @@ "zustand": "4.4.1", "@phosphor-icons/react": "2.0.9" }, - "@mass-payout/frontend": { + "@hashgraph/mass-payout-frontend": { "i18next": "23.10.1", "i18next-browser-languagedetector": "7.2.0", "zustand": "4.5.2", @@ -51,6 +51,7 @@ "release:ats": "changeset version --ignore '@hashgraph/mass-payout*'", "release:mp": "changeset version --ignore '@hashgraph/asset-tokenization-*'", "release:preview": "changeset status", + "docs:start": "npm run start --workspace=apps/docs", "ats:setup": "npm ci && npm run ats:build", "ats:setup:clean": "npm run ats:clean && npm install && npm run ats:build", "ats:build": "npm run ats:contracts:build && npm run ats:sdk:build && npm run ats:web:build", @@ -69,7 +70,7 @@ "ats:contracts:format:check": "npm run format:check --workspace=packages/ats/contracts", "ats:contracts:lint": "npm run lint --workspace=packages/ats/contracts", "ats:contracts:lint:fix": "npm run lint:fix --workspace=packages/ats/contracts", - "ats:contracts:build": "npm run build --workspace=packages/ats/contracts", + "ats:contracts:build": "NODE_OPTIONS='--max-old-space-size=8192' npm run build --workspace=packages/ats/contracts", "ats:contracts:compile": "npm run compile --workspace=packages/ats/contracts", "ats:contracts:test": "npm run test --workspace=packages/ats/contracts", "ats:contracts:test:parallel": "npm run test:parallel --workspace=packages/ats/contracts", @@ -82,34 +83,51 @@ "ats:contracts:test:coverage": "npm run test:coverage --workspace=packages/ats/contracts", "ats:contracts:test:ci": "npm run test:ci --workspace=packages/ats/contracts --if-present || npm run test --workspace=packages/ats/contracts", "ats:contracts:clean": "npm run clean --workspace=packages/ats/contracts", - "ats:contracts:deploy": "npm run deploy --workspace=packages/ats/contracts", - "ats:contracts:deploy:local": "npm run deploy:local --workspace=packages/ats/contracts", - "ats:contracts:deploy:local:auto": "npm run deploy:local:auto --workspace=packages/ats/contracts", - "ats:contracts:deploy:hedera:local": "npm run deploy:hedera:local --workspace=packages/ats/contracts", - "ats:contracts:deploy:hedera:previewnet": "npm run deploy:hedera:previewnet --workspace=packages/ats/contracts", - "ats:contracts:deploy:hedera:testnet": "npm run deploy:hedera:testnet --workspace=packages/ats/contracts", - "ats:contracts:deploy:hedera:mainnet": "npm run deploy:hedera:mainnet --workspace=packages/ats/contracts", - "ats:contracts:deploy:hardhat": "npm run deploy:hardhat --workspace=packages/ats/contracts", - "ats:contracts:upgrade": "npm run upgrade --workspace=packages/ats/contracts", - "ats:contracts:upgrade:local": "npm run upgrade:local --workspace=packages/ats/contracts", - "ats:contracts:upgrade:hedera:local": "npm run upgrade:hedera:local --workspace=packages/ats/contracts", - "ats:contracts:upgrade:testnet": "npm run upgrade:testnet --workspace=packages/ats/contracts", - "ats:contracts:upgrade:mainnet": "npm run upgrade:mainnet --workspace=packages/ats/contracts", - "ats:contracts:upgrade:previewnet": "npm run upgrade:previewnet --workspace=packages/ats/contracts", + "ats:contracts:deploy:newBlr": "npm run deploy:newBlr --workspace=packages/ats/contracts", + "ats:contracts:deploy:newBlr:local": "npm run deploy:newBlr:local --workspace=packages/ats/contracts", + "ats:contracts:deploy:newBlr:hedera:local": "npm run deploy:newBlr:hedera:local --workspace=packages/ats/contracts", + "ats:contracts:deploy:newBlr:hedera:previewnet": "npm run deploy:newBlr:hedera:previewnet --workspace=packages/ats/contracts", + "ats:contracts:deploy:newBlr:hedera:testnet": "npm run deploy:newBlr:hedera:testnet --workspace=packages/ats/contracts", + "ats:contracts:deploy:newBlr:hedera:mainnet": "npm run deploy:newBlr:hedera:mainnet --workspace=packages/ats/contracts", + "ats:contracts:deploy:existingBlr": "npm run deploy:existingBlr --workspace=packages/ats/contracts", + "ats:contracts:deploy:existingBlr:local": "npm run deploy:existingBlr:local --workspace=packages/ats/contracts", + "ats:contracts:deploy:existingBlr:hedera:local": "npm run deploy:existingBlr:hedera:local --workspace=packages/ats/contracts", + "ats:contracts:deploy:existingBlr:hedera:previewnet": "npm run deploy:existingBlr:hedera:previewnet --workspace=packages/ats/contracts", + "ats:contracts:deploy:existingBlr:hedera:testnet": "npm run deploy:existingBlr:hedera:testnet --workspace=packages/ats/contracts", + "ats:contracts:deploy:existingBlr:hedera:mainnet": "npm run deploy:existingBlr:hedera:mainnet --workspace=packages/ats/contracts", + "ats:contracts:upgrade:configs": "npm run upgrade:configs --workspace=packages/ats/contracts", + "ats:contracts:upgrade:configs:local": "npm run upgrade:configs:local --workspace=packages/ats/contracts", + "ats:contracts:upgrade:configs:hedera:local": "npm run upgrade:configs:hedera:local --workspace=packages/ats/contracts", + "ats:contracts:upgrade:configs:hedera:previewnet": "npm run upgrade:configs:hedera:previewnet --workspace=packages/ats/contracts", + "ats:contracts:upgrade:configs:hedera:testnet": "npm run upgrade:configs:hedera:testnet --workspace=packages/ats/contracts", + "ats:contracts:upgrade:configs:hedera:mainnet": "npm run upgrade:configs:hedera:mainnet --workspace=packages/ats/contracts", "ats:contracts:upgrade:tup": "npm run upgrade:tup --workspace=packages/ats/contracts", "ats:contracts:upgrade:tup:local": "npm run upgrade:tup:local --workspace=packages/ats/contracts", - "ats:contracts:upgrade:tup:hedera-local": "npm run upgrade:tup:hedera-local --workspace=packages/ats/contracts", - "ats:contracts:upgrade:tup:testnet": "npm run upgrade:tup:testnet --workspace=packages/ats/contracts", - "ats:contracts:upgrade:tup:mainnet": "npm run upgrade:tup:mainnet --workspace=packages/ats/contracts", - "ats:contracts:upgrade:tup:previewnet": "npm run upgrade:tup:previewnet --workspace=packages/ats/contracts", + "ats:contracts:upgrade:tup:hedera:local": "npm run upgrade:tup:hedera:local --workspace=packages/ats/contracts", + "ats:contracts:upgrade:tup:hedera:previewnet": "npm run upgrade:tup:hedera:previewnet --workspace=packages/ats/contracts", + "ats:contracts:upgrade:tup:hedera:testnet": "npm run upgrade:tup:hedera:testnet --workspace=packages/ats/contracts", + "ats:contracts:upgrade:tup:hedera:mainnet": "npm run upgrade:tup:hedera:mainnet --workspace=packages/ats/contracts", + "ats:contracts:deploy": "npm run ats:contracts:deploy:newBlr", + "ats:contracts:deploy:local": "npm run ats:contracts:deploy:newBlr:local", + "ats:contracts:deploy:hedera:local": "npm run ats:contracts:deploy:newBlr:hedera:local", + "ats:contracts:deploy:hedera:previewnet": "npm run ats:contracts:deploy:newBlr:hedera:previewnet", + "ats:contracts:deploy:hedera:testnet": "npm run ats:contracts:deploy:newBlr:hedera:testnet", + "ats:contracts:deploy:hedera:mainnet": "npm run ats:contracts:deploy:newBlr:hedera:mainnet", + "ats:contracts:upgrade": "npm run ats:contracts:upgrade:configs", + "ats:contracts:upgrade:local": "npm run ats:contracts:upgrade:configs:local", + "ats:contracts:upgrade:hedera:local": "npm run ats:contracts:upgrade:configs:hedera:local", + "ats:contracts:upgrade:hedera:previewnet": "npm run ats:contracts:upgrade:configs:hedera:previewnet", + "ats:contracts:upgrade:testnet": "npm run ats:contracts:upgrade:configs:hedera:testnet", + "ats:contracts:upgrade:mainnet": "npm run ats:contracts:upgrade:configs:hedera:mainnet", "ats:contracts:publish": "npm run publish --workspace=packages/ats/contracts", "ats:sdk:build": "npm run build --workspace=packages/ats/sdk", "ats:sdk:test": "npm run test --workspace=packages/ats/sdk", + "ats:sdk:test:coverage": "npm run test:coverage --workspace=packages/ats/sdk", "ats:sdk:test:ci": "npm run test:ci --workspace=packages/ats/sdk --if-present || npm run test --workspace=packages/ats/sdk", "ats:sdk:clean": "npm run clean --workspace=packages/ats/sdk", "ats:sdk:publish": "npm run publish --workspace=packages/ats/sdk", "ats:web:build": "npm run build --workspace=apps/ats/web", - "ats:web:test": "npm run test --workspace=apps/ats/web", + "ats:web:test": "NODE_OPTIONS='--max-old-space-size=8192' npm run test --workspace=apps/ats/web", "ats:web:test:update": "npm run test:update --workspace=apps/ats/web", "ats:web:test:ci": "npm run test:ci --workspace=apps/ats/web", "ats:web:dev": "npm run dev --workspace=apps/ats/web", @@ -140,8 +158,6 @@ "mass-payout:backend:build": "npm run build --workspace=apps/mass-payout/backend", "mass-payout:backend:test": "npm run test --workspace=apps/mass-payout/backend", "mass-payout:backend:test:ci": "npm run test:ci --workspace=apps/mass-payout/backend --if-present || npm run test --workspace=apps/mass-payout/backend", - "mass-payout:backend:dev": "npm run start:dev --workspace=apps/mass-payout/backend", - "mass-payout:backend:start": "npm run start --workspace=apps/mass-payout/backend", "mass-payout:backend:clean": "npm run clean --workspace=apps/mass-payout/backend", "mass-payout:frontend:build": "npm run build --workspace=apps/mass-payout/frontend", "mass-payout:frontend:test": "npm run test --workspace=apps/mass-payout/frontend", @@ -180,5 +196,6 @@ "*.sol": ["npm run lint:staged:sol --", "npm run format:staged --"], "*.{js,mjs,cjs,ts,tsx,mts}": ["npm run lint:staged:js -- --fix", "npm run format:staged --"], "*.{json,md,yml,yaml}": ["npm run format:staged --"] - } + }, + "packageManager": "yarn@4.9.2+sha512.1fc009bc09d13cfd0e19efa44cbfc2b9cf6ca61482725eb35bbc5e257e093ebf4130db6dfe15d604ff4b79efd8e1e8e99b25fa7d0a6197c9f9826358d4d65c3c" } diff --git a/packages/ats/contracts/.solcover.js b/packages/ats/contracts/.solcover.js index cc7e69b5f..df0a7a72a 100644 --- a/packages/ats/contracts/.solcover.js +++ b/packages/ats/contracts/.solcover.js @@ -1,3 +1,5 @@ module.exports = { - istanbulFolder: "../../../coverage/contracts", + // istanbulFolder: "../../../coverage/contracts", + istanbulReporter: ["html", "json", "lcov"], + skipFiles: ["mocks/", "test/"], }; diff --git a/packages/ats/contracts/CHANGELOG.md b/packages/ats/contracts/CHANGELOG.md index 77cb713da..65feb7ed0 100644 --- a/packages/ats/contracts/CHANGELOG.md +++ b/packages/ats/contracts/CHANGELOG.md @@ -1,5 +1,111 @@ # @hashgraph/asset-tokenization-contracts +## 4.0.0 + +### Major Changes + +- 3ba32c9: Audit issues fixes: compliance with ERC1400 standard, pause bypasses removed, dividends calculations errors fixed, hold data stale data updated, duplicated CA not accepted anymore, batch freeze operations and external lists do not accept zero addresses anymore, gas optimizations +- 6950d41: Code refactor plus Coupon fixing, start and end date added. Four type of bonds exist : standard, fixed rate, kpi linked rate and sustainability performance target rate +- 8f7487a: EIP712 standard fixed. Now single name (ERC20 token name) and version (BLR version number) used for all facets methods. Nonce facet created to centralized to nonce per user management. + +### Minor Changes + +- 2d5495e: Increase test coverage for smart contracts by adding comprehensive tests for ERC standards (ERC1410, ERC20, ERC3643, ERC20Permit, ERC20Votes), factory components, bond and equity modules, clearing, access control, external lists, KPIs, and other functionalities. Includes fixes for test synchronization, removal of unused code, and optimization of test fixtures. +- 902fea1: Added Docusaurus and project documentation, renamed the MP package organization, and added a Claude documentation command. +- 1f51771: Centralize deployment file management and enhance for downstream consumption: + + **Bug Fixes & Refactoring:** + - Fixed critical variable shadowing bug in filename extraction + - Added cross-platform path handling (Unix/Windows) + - Eliminated 240 lines of duplicated code across workflow files + - Centralized deployment file utilities in infrastructure layer + - Added TDD regression tests to prevent future bugs + + **New Features (Downstream Enhancement):** + - Made `WorkflowType` fully extensible: changed from `AtsWorkflowType | (string & Record)` to `AtsWorkflowType | string` + - Made deployment output types fully extensible by removing generic constraint + - Added type guards: `isSaveSuccess()`, `isSaveFailure()`, `isAtsWorkflow()` + - Added `registerWorkflowDescriptor()` for custom workflow naming + - Updated `generateDeploymentFilename()` with descriptor registry fallback + - Added comprehensive downstream usage documentation to README + - Exported `ATS_WORKFLOW_DESCRIPTORS` and new utility functions + + **Breaking Changes:** + - `WorkflowType`: Simplified from complex intersection to clean union `AtsWorkflowType | string` + - `SaveDeploymentOptions` and `saveDeploymentOutput()` now accept any type (removed `extends AnyDeploymentOutput` constraint) + - These changes enable downstream projects to use custom workflows and output types without type assertions + - ATS workflows maintain full type safety through literal types and default type parameters + + Enables downstream projects (like GBP) to extend ATS deployment utilities with custom workflows and output types while maintaining type safety and backward compatibility. + +- b802e88: feat(contracts): add updateResolverProxyConfig operation with comprehensive tests + + Add new `updateResolverProxyConfig` operation for updating already deployed ResolverProxy configurations. Enables downstream projects to update proxy version, configuration ID, or resolver address without redeploying. + + Features: + - Parameter-based action detection (version/config/resolver updates) + - `getResolverProxyConfigInfo` helper for querying proxy state + - Pre/post state verification with structured results + - New lightweight `deployResolverProxyFixture` using composition pattern + - 33 comprehensive tests (12 unit + 21 integration) + - Architecture documentation in CLAUDE.md + +- c7ff16f: Add comprehensive upgrade workflows for ATS configurations and infrastructure + + **New Features:** + - Configuration upgrade workflow for ResolverProxy token contracts (Equity/Bond) + - TUP proxy upgrade workflow for BLR and Factory infrastructure + - CLI entry points for both upgrade patterns with environment configuration + - Checkpoint-based resumability for failed upgrades + - Selective configuration upgrades (equity, bond, or both) + - Batch update support for multiple ResolverProxy tokens + + **Infrastructure Improvements:** + - Fixed import inconsistencies (relative imports β†’ @scripts/\* aliases) + - Simplified checkpoint directory structure (.checkpoints/) + - Added Zod runtime validation with helpful error messages + - Optimized registry lookups from O(nΒ²) to O(n) complexity + - Enhanced CheckpointManager with nested path support + - Added ts-node configuration for path alias resolution + - Fixed confirmations bug in tests + + **Testing:** + - 1,419 new test cases with comprehensive coverage + - 33 configuration upgrade tests + - 25 TUP upgrade tests + - Enhanced checkpoint resumability tests + - All 1,010 tests passing + + **Documentation:** + - Added Scenarios 3-6 to DEVELOPER_GUIDE.md + - Comprehensive README.md upgrade sections + - Updated .env.sample with upgrade variables + - Clear distinction between TUP and ResolverProxy patterns + + **Breaking Changes:** None - backward compatible + +- cbcc1db: Protected Transfer and Lock methods removed from smart contracts and sdk. + +### Patch Changes + +- dff883d: Fix CI/CD workflow bug where Contracts package was never published to npm due to duplicate SDK publish block. The second publish step now correctly publishes Contracts instead of publishing SDK twice. +- 7f92cd7: Enable parallel test execution with tsx loader for 60-75% faster test runs + - Add tsx (v4.21.0) for runtime TypeScript support in Mocha worker threads + - Configure parallel test scripts with NODE_OPTIONS='--import tsx' + - Fix circular dependency in checkpoint module imports + - Fix DiamondCutManager test assertions to use TypeChain factories + - Separate contract and script tests with dedicated parallel targets + +- c10a8ee: Replaced the Hashgraph SDK with the Hiero Ledger SDK +- 1ecd8ee: Update timestamp format to ISO standard with filesystem-safe characters +- fa07c70: test(contracts): add comprehensive unit and integration tests for TUP upgrade operations + + Add 34 tests for TransparentUpgradeableProxy (TUP) upgrade operations: + - 13 unit tests covering parameter validation, behavior detection, result structure, and helper functions + - 21 integration tests covering upgrade scenarios, access control, state verification, and gas reporting + - New TUP test fixtures using composition pattern (deployTupProxyFixture, deployTupProxyWithV2Fixture) + - Mock contracts (MockImplementation, MockImplementationV2) with proper initialization guards and storage layout compatibility + ## 3.1.0 ### Minor Changes diff --git a/packages/ats/contracts/Configuration.ts b/packages/ats/contracts/Configuration.ts index 8932ce2d6..90a9dbe21 100644 --- a/packages/ats/contracts/Configuration.ts +++ b/packages/ats/contracts/Configuration.ts @@ -297,7 +297,8 @@ export const CONTRACT_NAMES = [ "BondUSARead", //TODO "ScheduledSnapshotsFacet", "ScheduledBalanceAdjustmentsFacet", - "scheduledCrossOrderedTasksFacet", + "ScheduledCrossOrderedTasksFacet", + "ScheduledCouponListingFacet", "SnapshotsFacet", "CorporateActionsFacet", "TransferAndLockFacet", diff --git a/packages/ats/contracts/Dockerfile.coverage b/packages/ats/contracts/Dockerfile.coverage new file mode 100644 index 000000000..4a1105746 --- /dev/null +++ b/packages/ats/contracts/Dockerfile.coverage @@ -0,0 +1,45 @@ +# Use an official Node runtime as a parent image +FROM node:24.13.0 + +# Install dependencies for native solc (glibc etc) +RUN apt-get update && apt-get install -y libusb-1.0-0-dev libudev-dev && rm -rf /var/lib/apt/lists/* + +# Set the working directory in the container +WORKDIR /usr/src/app + +# Copy monorepo configuration +COPY package*.json ./ + +# Copy workspace package.json files for better caching +COPY packages/ats/contracts/package*.json ./packages/ats/contracts/ + +# Install dependencies (using workspaces) +# We use --include-workspace-root to ensure root devDependencies are available +# We install all dependencies because workers will need full node_modules +RUN npm ci --include-workspace-root --ignore-scripts + +# Create directories for Hardhat cache and artifacts to ensure they are writeable +RUN mkdir -p packages/ats/contracts/cache packages/ats/contracts/artifacts packages/ats/contracts/typechain-types + +# Copy the rest of the application code +COPY . . + +# Build the contracts and generate types if needed +WORKDIR /usr/src/app/packages/ats/contracts +RUN npm i +# Ensure global HOME is set and writeable for .coverage_parallel_temp +ENV HOME=/usr/src/app +RUN npm run compile + +# Add these lines before the RUN npm run compile command +RUN useradd -m hardhatuser && \ + chown -R hardhatuser /usr/src/app && \ + chown -R hardhatuser /usr/src/app/packages/ats/contracts + +USER hardhatuser + +# Set the working directory again after switching user +WORKDIR /usr/src/app/packages/ats/contracts + +# The command to run parallel coverage +CMD ["npx", "hardhat", "coverage"] diff --git a/packages/ats/contracts/README.md b/packages/ats/contracts/README.md index d6d304637..dfcea83a7 100644 --- a/packages/ats/contracts/README.md +++ b/packages/ats/contracts/README.md @@ -23,7 +23,7 @@ The contracts module contains the code of all Solidity smart contracts deployed **Standards:** - ERC-1400 for security tokens -- Partial ERC-3643 (TREX) compatibility (v1.15.0+) +- Partial ERC-3643 (T-REX) compatibility (v1.15.0+) **Location:** `packages/ats/contracts` within the monorepo @@ -346,37 +346,153 @@ npm run test:demo # Demo tests npm run test:demo:hedera # Hedera-specific demo tests ``` -### Architecture +## Architecture -The Asset Tokenization Studio uses a modular diamond pattern architecture where functionality is split into facets. This approach allows for upgradeable contracts while maintaining gas efficiency. +The ATS contracts implement a **4-layer hierarchical design** using the **Diamond Pattern (EIP-2535)** for maximum upgradeability and modularity. -#### Core Facets +### System Overview + +``` +β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” +β”‚ ProxyAdmin β”‚ +β”‚ (Manages proxy upgrades) β”‚ +β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ + β”‚ + β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”€β”€β” + β”‚ β”‚ +β”Œβ”€β”€β”€β”€β”€β”€β”€β–Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”Œβ”€β”€β”€β”€β–Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” +β”‚ BLR Proxy β”‚ β”‚ Factory Proxy β”‚ +β”‚ (Facet Registry) β”‚ β”‚ (Token Creator) β”‚ +β””β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ + β”‚ + β”œβ”€ Business Logic Resolver (BLR) + β”‚ β”œβ”€ Facet version management + β”‚ β”œβ”€ Configuration management + β”‚ └─ Resolver key β†’ address mapping + β”‚ + β”œβ”€ 46+ Facets (Layers 0-3) + β”‚ β”œβ”€ Layer 0: Storage wrappers + β”‚ β”œβ”€ Layer 1: Core business logic + β”‚ β”œβ”€ Layer 2: Domain features + β”‚ └─ Layer 3: Jurisdiction-specific + β”‚ + └─ 2 Configurations + β”œβ”€ Equity Config (43 facets) + └─ Bond Config (43 facets) +``` + +### Four-Layer Architecture + +**Layer 0: Storage Wrappers** + +- Data structures and storage management +- Examples: `ERC1400StorageWrapper`, `KycStorageWrapper`, `CapStorageWrapper` +- Storage isolation per feature for upgradeability +- EIP-1967 storage pattern + +**Layer 1: Core Business Logic** + +- ERC-1400/ERC-3643 base implementations +- `Common.sol` provides shared logic for all facets +- Access control, validation, and core operations +- Domains: AccessControl, Freeze, Hold, ControlList, CorporateActions + +**Layer 2: Domain-Specific Features (Facets)** + +- **Bond**: Coupon payments, maturity redemption (`Bond.sol`, `BondRead.sol`) +- **Equity**: Dividends, voting, balance adjustments (`Equity.sol`) +- **Scheduled Tasks**: Snapshots, balance adjustments, cross-ordered tasks +- **Proceed Recipients**: Payment distribution logic +- Each facet is independently upgradeable + +**Layer 3: Jurisdiction-Specific Implementations** + +- USA-specific features: `bondUSA/`, `equityUSA/` +- Specialized compliance rules per jurisdiction +- Extends Layer 2 features with regulatory requirements + +### Key Components + +**Business Logic Resolver (BLR)** + +- Central registry mapping Business Logic Keys (BLK) to versioned facet addresses +- Manages global version counter across all facets +- Provides configuration management for token types +- Location: `contracts/resolver/BusinessLogicResolver.sol` + +**Diamond Proxy (ResolverProxy)** + +- EIP-2535 compliant proxy routing function calls to appropriate facets +- Each token is a proxy instance +- Routes via BLR resolution +- Location: `contracts/resolverProxy/ResolverProxy.sol` + +**TREXFactory** + +- Factory pattern for deploying complete token ecosystems +- Creates tokens with specific configurations (Equity/Bond) +- Handles initialization of all required facets +- Location: `contracts/factory/TREXFactory.sol` + +### Core Facet Categories **ERC1400 Token Standard Facets:** -- `ERC1410ManagementFacet`: Token partition management and administrative functions +- `ERC1410ManagementFacet`: Token partition management - `ERC1410ReadFacet`: Read-only token state queries -- `ERC1410TokenHolderFacet`: Token holder operations (transfers, approvals) -- `ERC20Facet`: Basic ERC20 compatibility layer +- `ERC1410TokenHolderFacet`: Token holder operations +- `ERC20Facet`: ERC20 compatibility layer - `ERC1594Facet`: Security token issuance and redemption - `ERC1644Facet`: Controller operations for forced transfers **ERC3643 (T-REX) Compliance Facets:** -- `ERC3643Facet`: Core ERC3643 token operations (mint, burn, forced transfers) -- `ERC3643BatchFacet`: Batch operations for gas-efficient bulk actions -- `FreezeFacet`: Advanced freeze functionality for partial and full address freezing +- `ERC3643ManagementFacet`: Core operations (mint, burn, forced transfers) +- `ERC3643OperationsFacet`: Transfer and compliance operations +- `ERC3643ReadFacet`: State queries +- `ERC3643BatchFacet`: Gas-efficient bulk operations +- `FreezeFacet`: Partial and full address freezing **Hold & Clearing Facets:** - `HoldManagementFacet`: Hold creation and management - `HoldReadFacet`: Hold state queries - `HoldTokenHolderFacet`: Token holder hold operations -- `ClearingHoldCreationFacet`: Clearing-specific hold creation +- `ClearingHoldCreationFacet`: Clearing-specific holds - `ClearingTransferFacet`: Clearing transfers - `ClearingRedeemFacet`: Clearing redemptions -- `ClearingActionsFacet`: Clearing operation approvals -- `ClearingReadFacet`: Clearing state queries +- `ClearingActionsFacet`: Operation approvals +- `ClearingReadFacet`: State queries + +### Design Patterns + +**Diamond Pattern Implementation:** + +- Facets share storage via inheritance +- Function selector routing via fallback +- Versioned facet upgrades +- Configuration-based facet composition + +**Proxy Pattern:** + +- Transparent upgradeable proxies (OpenZeppelin) +- ProxyAdmin for upgrade management +- Separate implementation and proxy contracts + +**Registry Pattern:** + +- Resolver keys map to facet implementations +- Version management for safe upgrades +- Configuration snapshots for token types + +### Documentation + +For comprehensive architecture documentation and tutorials, see the [ATS Developer Guides](../../../docs/ats/developer-guides/contracts/). + +Additional resources: + +- **[Scripts Technical Reference](scripts/README.md)** +- **[Developer Guide](scripts/DEVELOPER_GUIDE.md)** ### Security Roles @@ -385,7 +501,7 @@ The platform implements a comprehensive role-based access control system: #### Administrative Roles - **Admin Role**: Full administrative control over the security token -- **TREX Owner**: Owner of ERC3643 tokens with special privileges for compliance configuration +- **T-REX Owner**: Owner of ERC3643 tokens with special privileges for compliance configuration - **Diamond Owner**: Contract upgrade and facet management permissions #### Operational Roles @@ -473,3 +589,9 @@ bytes32 constant _ADJUSTMENT_BALANCE_ROLE = 0x6d0d63b623e69df3a6ea8aebd01f360a02 ## 🧩 Notes: - All roles are `bytes32` constants derived using: `keccak256("security.token.standard.role.")` _(replace `` with the actual role string)_ + +--- + +## πŸ“š Documentation + +For more information about the project, see the [Documentation](https://hashgraph.github.io/asset-tokenization-studio/). diff --git a/packages/ats/contracts/contracts/factory/ERC3643/interfaces/IBondRead.sol b/packages/ats/contracts/contracts/factory/ERC3643/interfaces/IBondRead.sol index 35e2ed84f..0f2772d20 100644 --- a/packages/ats/contracts/contracts/factory/ERC3643/interfaces/IBondRead.sol +++ b/packages/ats/contracts/contracts/factory/ERC3643/interfaces/IBondRead.sol @@ -2,6 +2,11 @@ pragma solidity ^0.8.17; interface TRexIBondRead { + enum RateCalculationStatus { + PENDING, + SET + } + struct BondDetailsData { bytes3 currency; uint256 nominalValue; @@ -13,9 +18,12 @@ interface TRexIBondRead { struct Coupon { uint256 recordDate; uint256 executionDate; + uint256 startDate; + uint256 endDate; + uint256 fixingDate; uint256 rate; uint8 rateDecimals; - uint256 period; + RateCalculationStatus rateStatus; } struct RegisteredCoupon { @@ -25,13 +33,9 @@ interface TRexIBondRead { struct CouponFor { uint256 tokenBalance; - uint256 rate; - uint8 rateDecimals; - uint256 recordDate; - uint256 executionDate; - uint256 period; uint8 decimals; bool recordDateReached; + Coupon coupon; } struct CouponAmountFor { @@ -93,4 +97,13 @@ interface TRexIBondRead { * @dev It is the list of token holders at the snapshot taken at the record date */ function getTotalCouponHolders(uint256 _couponID) external view returns (uint256); + + function getCouponFromOrderedListAt(uint256 _pos) external view returns (uint256 couponID_); + + function getCouponsOrderedList( + uint256 _pageIndex, + uint256 _pageLength + ) external view returns (uint256[] memory couponIDs_); + + function getCouponsOrderedListTotal() external view returns (uint256 total_); } diff --git a/packages/ats/contracts/contracts/factory/ERC3643/interfaces/IDiamondLoupe.sol b/packages/ats/contracts/contracts/factory/ERC3643/interfaces/IDiamondLoupe.sol index d6a28a573..0deab25ae 100644 --- a/packages/ats/contracts/contracts/factory/ERC3643/interfaces/IDiamondLoupe.sol +++ b/packages/ats/contracts/contracts/factory/ERC3643/interfaces/IDiamondLoupe.sol @@ -1,17 +1,6 @@ // SPDX-License-Identifier: Apache-2.0 pragma solidity ^0.8.17; -// A loupe is a small magnifying glass used to look at resolverProxys. -// These functions look at resolverProxys -/// #### Structs -/// ``` -/// struct Facet { -/// bytes32 facetId; -/// address facetAddress; -/// bytes4[] selectors; -/// } -///``` -// HACK: I think that Loupe and Cut should be only one contract. interface TRexIDiamondLoupe { struct Facet { bytes32 id; diff --git a/packages/ats/contracts/contracts/factory/ERC3643/interfaces/IEquity.sol b/packages/ats/contracts/contracts/factory/ERC3643/interfaces/IEquity.sol index 6d2b89eb7..fb9020679 100644 --- a/packages/ats/contracts/contracts/factory/ERC3643/interfaces/IEquity.sol +++ b/packages/ats/contracts/contracts/factory/ERC3643/interfaces/IEquity.sol @@ -78,13 +78,13 @@ interface TRexIEquity { * @notice Sets a new dividend * @dev Can only be called by an account with the corporate actions role */ - function setDividends(Dividend calldata _newDividend) external returns (bool success_, uint256 dividendID_); + function setDividends(Dividend calldata _newDividend) external returns (uint256 dividendID_); /** * @notice Sets a new voting * @dev Can only be called by an account with the corporate actions role */ - function setVoting(Voting calldata _newVoting) external returns (bool success_, uint256 voteID_); + function setVoting(Voting calldata _newVoting) external returns (uint256 voteID_); /** * @notice Sets a new scheduled balance adjustment @@ -92,7 +92,7 @@ interface TRexIEquity { */ function setScheduledBalanceAdjustment( ScheduledBalanceAdjustment calldata _newBalanceAdjustment - ) external returns (bool success_, uint256 balanceAdjustmentID_); + ) external returns (uint256 balanceAdjustmentID_); function getEquityDetails() external view returns (EquityDetailsData memory equityDetailsData_); diff --git a/packages/ats/contracts/contracts/factory/ERC3643/interfaces/IFactory.sol b/packages/ats/contracts/contracts/factory/ERC3643/interfaces/IFactory.sol index 4488fec34..401a00467 100644 --- a/packages/ats/contracts/contracts/factory/ERC3643/interfaces/IFactory.sol +++ b/packages/ats/contracts/contracts/factory/ERC3643/interfaces/IFactory.sol @@ -7,6 +7,11 @@ import { TRexIERC20 as IERC20 } from "./IERC20.sol"; import { TRexIBondRead as IBondRead } from "./IBondRead.sol"; import { TRexIEquity as IEquity } from "./IEquity.sol"; import { FactoryRegulationData, RegulationData, RegulationType, RegulationSubType } from "./regulation.sol"; +import { TRexIFixedRate as IFixedRate } from "./IFixedRate.sol"; +import { TRexIKpiLinkedRate as IKpiLinkedRate } from "./IKpiLinkedRate.sol"; +// prettier-ignore +// solhint-disable-next-line max-line-length +import {TRexISustainabilityPerformanceTargetRate as ISustainabilityPerformanceTargetRate} from './ISustainabilityPerformanceTargetRate.sol'; interface TRexIFactory { enum SecurityType { @@ -19,7 +24,6 @@ interface TRexIFactory { uint256 version; } - // TODO: Separete common data in new struct struct SecurityData { bool arePartitionsProtected; bool isMultiPartition; @@ -52,6 +56,28 @@ interface TRexIFactory { bytes[] proceedRecipientsData; } + struct BondKpiLinkedRateData { + BondData bondData; + FactoryRegulationData factoryRegulationData; + IKpiLinkedRate.InterestRate interestRate; + IKpiLinkedRate.ImpactData impactData; + address kpiOracle; + } + + struct BondSustainabilityPerformanceTargetRateData { + BondData bondData; + FactoryRegulationData factoryRegulationData; + ISustainabilityPerformanceTargetRate.InterestRate interestRate; + ISustainabilityPerformanceTargetRate.ImpactData[] impactData; + address[] projects; + } + + struct BondFixedRateData { + BondData bondData; + FactoryRegulationData factoryRegulationData; + IFixedRate.FixedRateData fixedRateData; + } + event EquityDeployed( address indexed deployer, address equityAddress, @@ -66,6 +92,20 @@ interface TRexIFactory { FactoryRegulationData regulationData ); + event BondFixedRateDeployed(address indexed deployer, address bondAddress, BondFixedRateData bondFixedRateData); + + event BondKpiLinkedRateDeployed( + address indexed deployer, + address bondAddress, + BondKpiLinkedRateData bondKpiLinkedRateData + ); + + event BondSustainabilityPerformanceTargetRateDeployed( + address indexed deployer, + address bondAddress, + BondSustainabilityPerformanceTargetRateData bondSustainabilityPerformanceTargetRateData + ); + error EmptyResolver(IBusinessLogicResolver resolver); error NoInitialAdmins(); @@ -85,6 +125,16 @@ interface TRexIFactory { FactoryRegulationData calldata _factoryRegulationData ) external returns (address bondAddress_); + function deployBondFixedRate(BondFixedRateData calldata _bondFixedRateData) external returns (address bondAddress_); + + function deployBondKpiLinkedRate( + BondKpiLinkedRateData calldata _bondKpiLinkedRateData + ) external returns (address bondAddress_); + + function deployBondSustainabilityPerformanceTargetRate( + BondSustainabilityPerformanceTargetRateData calldata _bondSustainabilityPerformanceTargetRateData + ) external returns (address bondAddress_); + function getAppliedRegulationData( RegulationType _regulationType, RegulationSubType _regulationSubType diff --git a/packages/ats/contracts/contracts/factory/ERC3643/interfaces/IFixedRate.sol b/packages/ats/contracts/contracts/factory/ERC3643/interfaces/IFixedRate.sol new file mode 100644 index 000000000..a5284cdbf --- /dev/null +++ b/packages/ats/contracts/contracts/factory/ERC3643/interfaces/IFixedRate.sol @@ -0,0 +1,18 @@ +// SPDX-License-Identifier: Apache-2.0 +pragma solidity ^0.8.17; + +interface TRexIFixedRate { + struct FixedRateData { + uint256 rate; + uint8 rateDecimals; + } + + event RateUpdated(address indexed operator, uint256 newRate, uint8 newRateDecimals); + + // solhint-disable-next-line func-name-mixedcase + function initialize_FixedRate(FixedRateData calldata _initData) external; + + function setRate(uint256 _newRate, uint8 _newRateDecimals) external; + + function getRate() external view returns (uint256 rate_, uint8 decimals_); +} diff --git a/packages/ats/contracts/contracts/factory/ERC3643/interfaces/IKpi.sol b/packages/ats/contracts/contracts/factory/ERC3643/interfaces/IKpi.sol new file mode 100644 index 000000000..c31f2b45c --- /dev/null +++ b/packages/ats/contracts/contracts/factory/ERC3643/interfaces/IKpi.sol @@ -0,0 +1,11 @@ +// SPDX-License-Identifier: Apache-2.0 +pragma solidity ^0.8.17; + +interface TRexIKpi { + function setMinValidDate(uint256 _minValidDate) external; + + function getKpiData( + uint256 _fromDate, + uint256 _toDate + ) external view returns (uint256 kpiAggregatedValue_, bool exists_); +} diff --git a/packages/ats/contracts/contracts/factory/ERC3643/interfaces/IKpiLinkedRate.sol b/packages/ats/contracts/contracts/factory/ERC3643/interfaces/IKpiLinkedRate.sol new file mode 100644 index 000000000..dc2728c95 --- /dev/null +++ b/packages/ats/contracts/contracts/factory/ERC3643/interfaces/IKpiLinkedRate.sol @@ -0,0 +1,46 @@ +// SPDX-License-Identifier: Apache-2.0 +pragma solidity ^0.8.17; + +interface TRexIKpiLinkedRate { + struct InterestRate { + uint256 maxRate; + uint256 baseRate; + uint256 minRate; + uint256 startPeriod; + uint256 startRate; + uint256 missedPenalty; + uint256 reportPeriod; + uint8 rateDecimals; + } + struct ImpactData { + uint256 maxDeviationCap; + uint256 baseLine; + uint256 maxDeviationFloor; + uint8 impactDataDecimals; + uint256 adjustmentPrecision; + } + + event InterestRateUpdated(address indexed operator, InterestRate newInterestRate); + event ImpactDataUpdated(address indexed operator, ImpactData newImpactData); + event KpiOracleUpdated(address indexed operator, address kpiOracle); + + error WrongInterestRateValues(InterestRate interestRate); + error WrongImpactDataValues(ImpactData impactData); + error KpiOracleCalledFailed(); + + // solhint-disable-next-line func-name-mixedcase + function initialize_KpiLinkedRate( + InterestRate calldata _interestRate, + ImpactData calldata _impactData, + address kpiOracle + ) external; + + function setInterestRate(InterestRate calldata _newInterestRate) external; + function setImpactData(ImpactData calldata _newImpactData) external; + function setKpiOracle(address _kpiOracle) external; + + function getInterestRate() external view returns (InterestRate memory interestRate_); + + function getImpactData() external view returns (ImpactData memory impactData_); + function getKpiOracle() external view returns (address kpiOracle_); +} diff --git a/packages/ats/contracts/contracts/factory/ERC3643/interfaces/IScheduledCouponListing.sol b/packages/ats/contracts/contracts/factory/ERC3643/interfaces/IScheduledCouponListing.sol new file mode 100644 index 000000000..f6c666cc3 --- /dev/null +++ b/packages/ats/contracts/contracts/factory/ERC3643/interfaces/IScheduledCouponListing.sol @@ -0,0 +1,13 @@ +// SPDX-License-Identifier: Apache-2.0 +pragma solidity ^0.8.17; + +import { ScheduledTask } from "./IScheduledTasksCommon.sol"; + +interface TRexIScheduledCouponListing { + function scheduledCouponListingCount() external view returns (uint256); + + function getScheduledCouponListing( + uint256 _pageIndex, + uint256 _pageLength + ) external view returns (ScheduledTask[] memory scheduledCouponListing_); +} diff --git a/packages/ats/contracts/contracts/factory/ERC3643/interfaces/IScheduledTasksCommon.sol b/packages/ats/contracts/contracts/factory/ERC3643/interfaces/IScheduledTasksCommon.sol new file mode 100644 index 000000000..622ed64c3 --- /dev/null +++ b/packages/ats/contracts/contracts/factory/ERC3643/interfaces/IScheduledTasksCommon.sol @@ -0,0 +1,12 @@ +// SPDX-License-Identifier: Apache-2.0 +pragma solidity ^0.8.17; + +struct ScheduledTask { + uint256 scheduledTimestamp; + bytes data; +} + +struct ScheduledTasksDataStorage { + mapping(uint256 => ScheduledTask) scheduledTasks; + uint256 scheduledTaskCount; +} diff --git a/packages/ats/contracts/contracts/factory/ERC3643/interfaces/ISustainabilityPerformanceTargetRate.sol b/packages/ats/contracts/contracts/factory/ERC3643/interfaces/ISustainabilityPerformanceTargetRate.sol new file mode 100644 index 000000000..1c33c6836 --- /dev/null +++ b/packages/ats/contracts/contracts/factory/ERC3643/interfaces/ISustainabilityPerformanceTargetRate.sol @@ -0,0 +1,47 @@ +// SPDX-License-Identifier: Apache-2.0 +pragma solidity >=0.8.0 <0.9.0; + +interface TRexISustainabilityPerformanceTargetRate { + struct InterestRate { + uint256 baseRate; + uint256 startPeriod; + uint256 startRate; + uint8 rateDecimals; + } + + enum BaseLineMode { + MINIMUM, + MAXIMUM + } + + enum ImpactDataMode { + PENALTY, + BONUS + } + + struct ImpactData { + uint256 baseLine; + BaseLineMode baseLineMode; + uint256 deltaRate; + ImpactDataMode impactDataMode; + } + + event InterestRateUpdated(address indexed operator, InterestRate newInterestRate); + event ImpactDataUpdated(address indexed operator, ImpactData[] newImpactData, address[] projects); + + error NotExistingProject(address); + error ProvidedListsLengthMismatch(uint256 impactDataLength, uint256 projectsLength); + + // solhint-disable-next-line func-name-mixedcase + function initialize_SustainabilityPerformanceTargetRate( + InterestRate calldata _interestRate, + ImpactData[] calldata _impactData, + address[] calldata _projects + ) external; + + function setInterestRate(InterestRate calldata _newInterestRate) external; + function setImpactData(ImpactData[] calldata _newImpactData, address[] calldata projects) external; + + function getInterestRate() external view returns (InterestRate memory interestRate_); + function getImpactDataFor(address _project) external view returns (ImpactData memory impactData_); +} diff --git a/packages/ats/contracts/contracts/factory/Factory.sol b/packages/ats/contracts/contracts/factory/Factory.sol index 73cd38ec9..470ce4335 100644 --- a/packages/ats/contracts/contracts/factory/Factory.sol +++ b/packages/ats/contracts/contracts/factory/Factory.sol @@ -7,7 +7,6 @@ import { IResolverProxy } from "../interfaces/resolver/resolverProxy/IResolverPr import { _DEFAULT_ADMIN_ROLE } from "../layer_1/constants/roles.sol"; import { IControlList } from "../layer_1/interfaces/controlList/IControlList.sol"; import { IERC20 } from "../layer_1/interfaces/ERC1400/IERC20.sol"; -import { IERC20Permit } from "../layer_1/interfaces/ERC1400/IERC20Permit.sol"; import { IERC20Votes } from "../layer_1/interfaces/ERC1400/IERC20Votes.sol"; import { IERC1644 } from "../layer_1/interfaces/ERC1400/IERC1644.sol"; import { IERC1410 } from "../layer_1/interfaces/ERC1400/IERC1410.sol"; @@ -15,7 +14,6 @@ import { ICap } from "../layer_1/interfaces/cap/ICap.sol"; import { IERC1594 } from "../layer_1/interfaces/ERC1400/IERC1594.sol"; import { IClearingActions } from "../layer_1/interfaces/clearing/IClearingActions.sol"; import { IBusinessLogicResolver } from "../interfaces/resolver/IBusinessLogicResolver.sol"; -import { LocalContext } from "../layer_0/context/LocalContext.sol"; import { FactoryRegulationData, buildRegulationData, @@ -36,8 +34,14 @@ import { IExternalKycListManagement } from "../layer_1/interfaces/externalKycLis import { IKyc } from "../layer_1/interfaces/kyc/IKyc.sol"; import { IERC3643 } from "../layer_1/interfaces/ERC3643/IERC3643.sol"; import { validateISIN } from "./isinValidator.sol"; - -contract Factory is IFactory, LocalContext { +import { IFixedRate } from "../layer_2/interfaces/interestRates/fixedRate/IFixedRate.sol"; +import { IKpiLinkedRate } from "../layer_2/interfaces/interestRates/kpiLinkedRate/IKpiLinkedRate.sol"; +import { Common } from "../layer_0/common/Common.sol"; +// prettier-ignore +// solhint-disable-next-line max-line-length +import { ISustainabilityPerformanceTargetRate } from "../layer_2/interfaces/interestRates/sustainabilityPerformanceTargetRate/ISustainabilityPerformanceTargetRate.sol"; + +contract Factory is IFactory, Common { modifier checkResolver(IBusinessLogicResolver resolver) { if (address(resolver) == address(0)) { revert EmptyResolver(resolver); @@ -118,20 +122,86 @@ contract Factory is IFactory, LocalContext { checkRegulation(_factoryRegulationData.regulationType, _factoryRegulationData.regulationSubType) returns (address bondAddress_) { - bondAddress_ = _deploySecurity(_bondData.security, SecurityType.Bond); + bondAddress_ = _deployBond(_bondData, _factoryRegulationData); - IBondUSA(bondAddress_)._initialize_bondUSA( - _bondData.bondDetails, - buildRegulationData(_factoryRegulationData.regulationType, _factoryRegulationData.regulationSubType), - _factoryRegulationData.additionalSecurityData + emit BondDeployed(_msgSender(), bondAddress_, _bondData, _factoryRegulationData); + } + + function deployBondFixedRate( + BondFixedRateData calldata _bondFixedRateData + ) + external + checkResolver(_bondFixedRateData.bondData.security.resolver) + checkISIN(_bondFixedRateData.bondData.security.erc20MetadataInfo.isin) + checkAdmins(_bondFixedRateData.bondData.security.rbacs) + checkRegulation( + _bondFixedRateData.factoryRegulationData.regulationType, + _bondFixedRateData.factoryRegulationData.regulationSubType + ) + returns (address bondAddress_) + { + bondAddress_ = _deployBond(_bondFixedRateData.bondData, _bondFixedRateData.factoryRegulationData); + + IFixedRate(bondAddress_).initialize_FixedRate(_bondFixedRateData.fixedRateData); + + emit BondFixedRateDeployed(_msgSender(), bondAddress_, _bondFixedRateData); + } + + function deployBondKpiLinkedRate( + BondKpiLinkedRateData calldata _bondKpiLinkedRateData + ) + external + checkResolver(_bondKpiLinkedRateData.bondData.security.resolver) + checkISIN(_bondKpiLinkedRateData.bondData.security.erc20MetadataInfo.isin) + checkAdmins(_bondKpiLinkedRateData.bondData.security.rbacs) + checkRegulation( + _bondKpiLinkedRateData.factoryRegulationData.regulationType, + _bondKpiLinkedRateData.factoryRegulationData.regulationSubType + ) + checkInterestRate(_bondKpiLinkedRateData.interestRate) + checkImpactData(_bondKpiLinkedRateData.impactData) + returns (address bondAddress_) + { + bondAddress_ = _deployBond(_bondKpiLinkedRateData.bondData, _bondKpiLinkedRateData.factoryRegulationData); + + IKpiLinkedRate(bondAddress_).initialize_KpiLinkedRate( + _bondKpiLinkedRateData.interestRate, + _bondKpiLinkedRateData.impactData, + _bondKpiLinkedRateData.kpiOracle ); - IProceedRecipients(bondAddress_).initialize_ProceedRecipients( - _bondData.proceedRecipients, - _bondData.proceedRecipientsData + emit BondKpiLinkedRateDeployed(_msgSender(), bondAddress_, _bondKpiLinkedRateData); + } + + function deployBondSustainabilityPerformanceTargetRate( + BondSustainabilityPerformanceTargetRateData calldata _bondSustainabilityPerformanceTargetRateData + ) + external + checkResolver(_bondSustainabilityPerformanceTargetRateData.bondData.security.resolver) + checkISIN(_bondSustainabilityPerformanceTargetRateData.bondData.security.erc20MetadataInfo.isin) + checkAdmins(_bondSustainabilityPerformanceTargetRateData.bondData.security.rbacs) + checkRegulation( + _bondSustainabilityPerformanceTargetRateData.factoryRegulationData.regulationType, + _bondSustainabilityPerformanceTargetRateData.factoryRegulationData.regulationSubType + ) + returns (address bondAddress_) + { + bondAddress_ = _deployBond( + _bondSustainabilityPerformanceTargetRateData.bondData, + _bondSustainabilityPerformanceTargetRateData.factoryRegulationData ); - emit BondDeployed(_msgSender(), bondAddress_, _bondData, _factoryRegulationData); + ISustainabilityPerformanceTargetRate(bondAddress_).initialize_SustainabilityPerformanceTargetRate( + _bondSustainabilityPerformanceTargetRateData.interestRate, + _bondSustainabilityPerformanceTargetRateData.impactData, + _bondSustainabilityPerformanceTargetRateData.projects + ); + + emit BondSustainabilityPerformanceTargetRateDeployed( + _msgSender(), + bondAddress_, + _bondSustainabilityPerformanceTargetRateData + ); } function getAppliedRegulationData( @@ -141,6 +211,24 @@ contract Factory is IFactory, LocalContext { regulationData_ = buildRegulationData(_regulationType, _regulationSubType); } + function _deployBond( + BondData calldata _bondData, + FactoryRegulationData calldata _factoryRegulationData + ) internal returns (address bondAddress_) { + bondAddress_ = _deploySecurity(_bondData.security, SecurityType.Bond); + + IBondUSA(bondAddress_)._initialize_bondUSA( + _bondData.bondDetails, + buildRegulationData(_factoryRegulationData.regulationType, _factoryRegulationData.regulationSubType), + _factoryRegulationData.additionalSecurityData + ); + + IProceedRecipients(bondAddress_).initialize_ProceedRecipients( + _bondData.proceedRecipients, + _bondData.proceedRecipientsData + ); + } + function _deploySecurity( SecurityData calldata _securityData, SecurityType _securityType @@ -193,7 +281,6 @@ contract Factory is IFactory, LocalContext { IERC20Votes(securityAddress_).initialize_ERC20Votes(_securityData.erc20VotesActivated); - IERC20Permit(securityAddress_).initialize_ERC20Permit(); IERC3643(securityAddress_).initialize_ERC3643(_securityData.compliance, _securityData.identityRegistry); } } diff --git a/packages/ats/contracts/contracts/interfaces/factory/IFactory.sol b/packages/ats/contracts/contracts/interfaces/factory/IFactory.sol index bf2b0ed1f..e5a83a486 100644 --- a/packages/ats/contracts/contracts/interfaces/factory/IFactory.sol +++ b/packages/ats/contracts/contracts/interfaces/factory/IFactory.sol @@ -12,6 +12,11 @@ import { RegulationType, RegulationSubType } from "../../layer_3/constants/regulation.sol"; +import { IFixedRate } from "../../layer_2/interfaces/interestRates/fixedRate/IFixedRate.sol"; +import { IKpiLinkedRate } from "../../layer_2/interfaces/interestRates/kpiLinkedRate/IKpiLinkedRate.sol"; +// prettier-ignore +// solhint-disable-next-line max-line-length +import { ISustainabilityPerformanceTargetRate } from "../../layer_2/interfaces/interestRates/sustainabilityPerformanceTargetRate/ISustainabilityPerformanceTargetRate.sol"; interface IFactory { enum SecurityType { @@ -24,7 +29,6 @@ interface IFactory { uint256 version; } - // TODO: Separete common data in new struct struct SecurityData { bool arePartitionsProtected; bool isMultiPartition; @@ -57,6 +61,28 @@ interface IFactory { bytes[] proceedRecipientsData; } + struct BondKpiLinkedRateData { + BondData bondData; + FactoryRegulationData factoryRegulationData; + IKpiLinkedRate.InterestRate interestRate; + IKpiLinkedRate.ImpactData impactData; + address kpiOracle; + } + + struct BondSustainabilityPerformanceTargetRateData { + BondData bondData; + FactoryRegulationData factoryRegulationData; + ISustainabilityPerformanceTargetRate.InterestRate interestRate; + ISustainabilityPerformanceTargetRate.ImpactData[] impactData; + address[] projects; + } + + struct BondFixedRateData { + BondData bondData; + FactoryRegulationData factoryRegulationData; + IFixedRate.FixedRateData fixedRateData; + } + event EquityDeployed( address indexed deployer, address equityAddress, @@ -71,6 +97,20 @@ interface IFactory { FactoryRegulationData regulationData ); + event BondFixedRateDeployed(address indexed deployer, address bondAddress, BondFixedRateData bondFixedRateData); + + event BondKpiLinkedRateDeployed( + address indexed deployer, + address bondAddress, + BondKpiLinkedRateData bondKpiLinkedRateData + ); + + event BondSustainabilityPerformanceTargetRateDeployed( + address indexed deployer, + address bondAddress, + BondSustainabilityPerformanceTargetRateData bondSustainabilityPerformanceTargetRateData + ); + error EmptyResolver(IBusinessLogicResolver resolver); error NoInitialAdmins(); @@ -90,6 +130,16 @@ interface IFactory { FactoryRegulationData calldata _factoryRegulationData ) external returns (address bondAddress_); + function deployBondFixedRate(BondFixedRateData calldata _bondFixedRateData) external returns (address bondAddress_); + + function deployBondKpiLinkedRate( + BondKpiLinkedRateData calldata _bondKpiLinkedRateData + ) external returns (address bondAddress_); + + function deployBondSustainabilityPerformanceTargetRate( + BondSustainabilityPerformanceTargetRateData calldata _bondSustainabilityPerformanceTargetRateData + ) external returns (address bondAddress_); + function getAppliedRegulationData( RegulationType _regulationType, RegulationSubType _regulationSubType diff --git a/packages/ats/contracts/contracts/interfaces/resolver/IBusinessLogicResolverWrapper.sol b/packages/ats/contracts/contracts/interfaces/resolver/IBusinessLogicResolverWrapper.sol index 47a2e0582..3e8439abe 100644 --- a/packages/ats/contracts/contracts/interfaces/resolver/IBusinessLogicResolverWrapper.sol +++ b/packages/ats/contracts/contracts/interfaces/resolver/IBusinessLogicResolverWrapper.sol @@ -16,8 +16,6 @@ pragma solidity >=0.8.0 <0.9.0; */ interface IBusinessLogicResolverWrapper { error BusinessLogicVersionDoesNotExist(uint256 version); - error BusinessLogicNotActive(bytes32 businessLogicKey); error BusinessLogicKeyDuplicated(bytes32 businessLogicKey); - error AllBusinessLogicKeysMustBeenInformed(); error ZeroKeyNotValidForBusinessLogic(); } diff --git a/packages/ats/contracts/contracts/interfaces/resolver/resolverProxy/IDiamondLoupe.sol b/packages/ats/contracts/contracts/interfaces/resolver/resolverProxy/IDiamondLoupe.sol index 53b015482..b9ced40eb 100644 --- a/packages/ats/contracts/contracts/interfaces/resolver/resolverProxy/IDiamondLoupe.sol +++ b/packages/ats/contracts/contracts/interfaces/resolver/resolverProxy/IDiamondLoupe.sol @@ -3,17 +3,6 @@ pragma solidity >=0.8.0 <0.9.0; import { IStaticFunctionSelectors } from "./IStaticFunctionSelectors.sol"; -// A loupe is a small magnifying glass used to look at resolverProxys. -// These functions look at resolverProxys -/// #### Structs -/// ``` -/// struct Facet { -/// bytes32 facetId; -/// address facetAddress; -/// bytes4[] selectors; -/// } -///``` -// HACK: I think that Loupe and Cut should be only one contract. interface IDiamondLoupe is IStaticFunctionSelectors { struct Facet { bytes32 id; diff --git a/packages/ats/contracts/contracts/layer_0/ERC1400/ERC1410/ERC1410BasicStorageWrapper.sol b/packages/ats/contracts/contracts/layer_0/ERC1400/ERC1410/ERC1410BasicStorageWrapper.sol index 95b337063..2847c26e1 100644 --- a/packages/ats/contracts/contracts/layer_0/ERC1400/ERC1410/ERC1410BasicStorageWrapper.sol +++ b/packages/ats/contracts/contracts/layer_0/ERC1400/ERC1410/ERC1410BasicStorageWrapper.sol @@ -12,6 +12,12 @@ import { LowLevelCall } from "../../common/libraries/LowLevelCall.sol"; abstract contract ERC1410BasicStorageWrapper is IERC1410StorageWrapper, ERC20StorageWrapper1 { using LowLevelCall for address; + // solhint-disable-next-line func-name-mixedcase + function _initialize_ERC1410(bool _multiPartition) internal override { + _erc1410BasicStorage().multiPartition = _multiPartition; + _erc1410BasicStorage().initialized = true; + } + function _transferByPartition( address _from, BasicTransferInfo memory _basicTransferInfo, @@ -19,7 +25,7 @@ abstract contract ERC1410BasicStorageWrapper is IERC1410StorageWrapper, ERC20Sto bytes memory _data, address _operator, bytes memory _operatorData - ) internal returns (bytes32) { + ) internal override returns (bytes32) { _beforeTokenTransfer(_partition, _from, _basicTransferInfo.to, _basicTransferInfo.value); _reduceBalanceByPartition(_from, _basicTransferInfo.value, _partition); @@ -55,12 +61,10 @@ abstract contract ERC1410BasicStorageWrapper is IERC1410StorageWrapper, ERC20Sto _afterTokenTransfer(_partition, _from, _basicTransferInfo.to, _basicTransferInfo.value); - return bytes32(0); + return _partition; } - function _beforeTokenTransfer(bytes32 partition, address from, address to, uint256 amount) internal virtual; - - function _afterTokenTransfer(bytes32 partition, address from, address to, uint256 amount) internal virtual; - - function _addPartitionTo(uint256 _value, address _account, bytes32 _partition) internal virtual; + function _isERC1410Initialized() internal view override returns (bool) { + return _erc1410BasicStorage().initialized; + } } diff --git a/packages/ats/contracts/contracts/layer_0/ERC1400/ERC1410/ERC1410BasicStorageWrapperRead.sol b/packages/ats/contracts/contracts/layer_0/ERC1400/ERC1410/ERC1410BasicStorageWrapperRead.sol index 6370f87eb..e5be44cd8 100644 --- a/packages/ats/contracts/contracts/layer_0/ERC1400/ERC1410/ERC1410BasicStorageWrapperRead.sol +++ b/packages/ats/contracts/contracts/layer_0/ERC1400/ERC1410/ERC1410BasicStorageWrapperRead.sol @@ -31,22 +31,22 @@ abstract contract ERC1410BasicStorageWrapperRead is IERC1410StorageWrapper, Lock uint256 totalTokenHolders; } - modifier onlyWithoutMultiPartition() { + modifier onlyWithoutMultiPartition() override { _checkWithoutMultiPartition(); _; } - modifier onlyDefaultPartitionWithSinglePartition(bytes32 partition) { + modifier onlyDefaultPartitionWithSinglePartition(bytes32 partition) override { _checkDefaultPartitionWithSinglePartition(partition); _; } - modifier validateAddress(address account) { + modifier validateAddress(address account) override { _checkValidAddress(account); _; } - function _reduceBalanceByPartition(address _from, uint256 _value, bytes32 _partition) internal { + function _reduceBalanceByPartition(address _from, uint256 _value, bytes32 _partition) internal override { if (!_validPartition(_partition, _from)) { revert IERC1410StorageWrapper.InvalidPartition(_from, _partition); } @@ -70,7 +70,7 @@ abstract contract ERC1410BasicStorageWrapperRead is IERC1410StorageWrapper, Lock erc1410Storage.balances[_from] -= _value; } - function _deletePartitionForHolder(address _holder, bytes32 _partition, uint256 index) internal { + function _deletePartitionForHolder(address _holder, bytes32 _partition, uint256 index) internal override { ERC1410BasicStorage storage erc1410Storage = _erc1410BasicStorage(); if (index != erc1410Storage.partitions[_holder].length - 1) { erc1410Storage.partitions[_holder][index] = erc1410Storage.partitions[_holder][ @@ -82,7 +82,7 @@ abstract contract ERC1410BasicStorageWrapperRead is IERC1410StorageWrapper, Lock erc1410Storage.partitions[_holder].pop(); } - function _increaseBalanceByPartition(address _from, uint256 _value, bytes32 _partition) internal { + function _increaseBalanceByPartition(address _from, uint256 _value, bytes32 _partition) internal override { if (!_validPartition(_partition, _from)) { revert IERC1410StorageWrapper.InvalidPartition(_from, _partition); } @@ -95,22 +95,22 @@ abstract contract ERC1410BasicStorageWrapperRead is IERC1410StorageWrapper, Lock erc1410Storage.balances[_from] += _value; } - function _adjustTotalSupplyByPartition(bytes32 _partition, uint256 _factor) internal { + function _adjustTotalSupplyByPartition(bytes32 _partition, uint256 _factor) internal override { _erc1410BasicStorage().totalSupplyByPartition[_partition] *= _factor; } - function _adjustTotalSupply(uint256 factor) internal { + function _adjustTotalSupply(uint256 factor) internal override { _erc1410BasicStorage().totalSupply *= factor; } - function _adjustTotalBalanceAndPartitionBalanceFor(bytes32 partition, address account) internal { + function _adjustTotalBalanceAndPartitionBalanceFor(bytes32 partition, address account) internal override { uint256 abaf = _getAbaf(); ERC1410BasicStorage storage basicStorage = _erc1410BasicStorage(); _adjustPartitionBalanceFor(basicStorage, abaf, partition, account); _adjustTotalBalanceFor(basicStorage, abaf, account); } - function _replaceTokenHolder(address newTokenHolder, address oldTokenHolder) internal { + function _replaceTokenHolder(address newTokenHolder, address oldTokenHolder) internal override { ERC1410BasicStorage storage basicStorage = _erc1410BasicStorage(); uint256 index = basicStorage.tokenHolderIndex[oldTokenHolder]; @@ -119,7 +119,7 @@ abstract contract ERC1410BasicStorageWrapperRead is IERC1410StorageWrapper, Lock basicStorage.tokenHolderIndex[oldTokenHolder] = 0; } - function _addNewTokenHolder(address tokenHolder) internal { + function _addNewTokenHolder(address tokenHolder) internal override { ERC1410BasicStorage storage basicStorage = _erc1410BasicStorage(); uint256 nextIndex = ++basicStorage.totalTokenHolders; @@ -127,7 +127,7 @@ abstract contract ERC1410BasicStorageWrapperRead is IERC1410StorageWrapper, Lock basicStorage.tokenHolderIndex[tokenHolder] = nextIndex; } - function _removeTokenHolder(address tokenHolder) internal { + function _removeTokenHolder(address tokenHolder) internal override { ERC1410BasicStorage storage basicStorage = _erc1410BasicStorage(); uint256 lastIndex = basicStorage.totalTokenHolders; @@ -148,7 +148,7 @@ abstract contract ERC1410BasicStorageWrapperRead is IERC1410StorageWrapper, Lock function _getTokenHolders( uint256 _pageIndex, uint256 _pageLength - ) internal view returns (address[] memory holders_) { + ) internal view override returns (address[] memory holders_) { (uint256 start, uint256 end) = LibCommon.getStartAndEnd(_pageIndex, _pageLength); holders_ = new address[](LibCommon.getSize(start, end, _getTotalTokenHolders())); @@ -162,35 +162,35 @@ abstract contract ERC1410BasicStorageWrapperRead is IERC1410StorageWrapper, Lock } } - function _getTokenHolder(uint256 _index) internal view returns (address) { + function _getTokenHolder(uint256 _index) internal view override returns (address) { return _erc1410BasicStorage().tokenHolders[_index]; } - function _getTotalTokenHolders() internal view returns (uint256) { + function _getTotalTokenHolders() internal view override returns (uint256) { return _erc1410BasicStorage().totalTokenHolders; } - function _getTokenHolderIndex(address _tokenHolder) internal view returns (uint256) { + function _getTokenHolderIndex(address _tokenHolder) internal view override returns (uint256) { return _erc1410BasicStorage().tokenHolderIndex[_tokenHolder]; } - function _totalSupply() internal view returns (uint256) { + function _totalSupply() internal view override returns (uint256) { return _erc1410BasicStorage().totalSupply; } - function _isMultiPartition() internal view returns (bool) { + function _isMultiPartition() internal view override returns (bool) { return _erc1410BasicStorage().multiPartition; } - function _totalSupplyByPartition(bytes32 _partition) internal view returns (uint256) { + function _totalSupplyByPartition(bytes32 _partition) internal view override returns (uint256) { return _erc1410BasicStorage().totalSupplyByPartition[_partition]; } - function _balanceOf(address _tokenHolder) internal view returns (uint256) { + function _balanceOf(address _tokenHolder) internal view override returns (uint256) { return _erc1410BasicStorage().balances[_tokenHolder]; } - function _balanceOfByPartition(bytes32 _partition, address _tokenHolder) internal view returns (uint256) { + function _balanceOfByPartition(bytes32 _partition, address _tokenHolder) internal view override returns (uint256) { if (_validPartition(_partition, _tokenHolder)) { ERC1410BasicStorage storage erc1410Storage = _erc1410BasicStorage(); return @@ -201,7 +201,7 @@ abstract contract ERC1410BasicStorageWrapperRead is IERC1410StorageWrapper, Lock } } - function _partitionsOf(address _tokenHolder) internal view returns (bytes32[] memory) { + function _partitionsOf(address _tokenHolder) internal view override returns (bytes32[] memory) { ERC1410BasicStorage storage erc1410Storage = _erc1410BasicStorage(); bytes32[] memory partitionsList = new bytes32[](erc1410Storage.partitions[_tokenHolder].length); for (uint256 i = 0; i < erc1410Storage.partitions[_tokenHolder].length; i++) { @@ -210,7 +210,7 @@ abstract contract ERC1410BasicStorageWrapperRead is IERC1410StorageWrapper, Lock return partitionsList; } - function _validPartition(bytes32 _partition, address _holder) internal view returns (bool) { + function _validPartition(bytes32 _partition, address _holder) internal view override returns (bool) { ERC1410BasicStorage storage erc1410Storage = _erc1410BasicStorage(); if (erc1410Storage.partitionToIndex[_holder][_partition] == 0) { return false; @@ -219,7 +219,7 @@ abstract contract ERC1410BasicStorageWrapperRead is IERC1410StorageWrapper, Lock } } - function _validPartitionForReceiver(bytes32 _partition, address _to) internal view returns (bool) { + function _validPartitionForReceiver(bytes32 _partition, address _to) internal view override returns (bool) { ERC1410BasicStorage storage erc1410Storage = _erc1410BasicStorage(); uint256 index = erc1410Storage.partitionToIndex[_to][_partition]; @@ -227,9 +227,9 @@ abstract contract ERC1410BasicStorageWrapperRead is IERC1410StorageWrapper, Lock return index != 0; } - function _checkDefaultPartitionWithSinglePartition(bytes32 partition) internal view { - if (!_isMultiPartition() && partition != _DEFAULT_PARTITION) - revert PartitionNotAllowedInSinglePartitionMode(partition); + function _checkDefaultPartitionWithSinglePartition(bytes32 _partition) internal view override { + if (!_isMultiPartition() && _partition != _DEFAULT_PARTITION) + revert PartitionNotAllowedInSinglePartitionMode(_partition); } function _erc1410BasicStorage() internal pure returns (ERC1410BasicStorage storage erc1410BasicStorage_) { @@ -240,7 +240,7 @@ abstract contract ERC1410BasicStorageWrapperRead is IERC1410StorageWrapper, Lock } } - function _checkValidAddress(address account) internal pure { + function _checkValidAddress(address account) internal pure override { if (account == address(0)) revert ZeroAddressNotAllowed(); } diff --git a/packages/ats/contracts/contracts/layer_0/ERC1400/ERC1410/ERC1410OperatorStorageWrapper.sol b/packages/ats/contracts/contracts/layer_0/ERC1400/ERC1410/ERC1410OperatorStorageWrapper.sol index f880d58b3..a3f11f4d6 100644 --- a/packages/ats/contracts/contracts/layer_0/ERC1400/ERC1410/ERC1410OperatorStorageWrapper.sol +++ b/packages/ats/contracts/contracts/layer_0/ERC1400/ERC1410/ERC1410OperatorStorageWrapper.sol @@ -2,7 +2,7 @@ pragma solidity >=0.8.0 <0.9.0; import { _ERC1410_OPERATOR_STORAGE_POSITION } from "../../constants/storagePositions.sol"; -import { BasicTransferInfo, OperatorTransferData } from "../../../layer_1/interfaces/ERC1400/IERC1410.sol"; +import { BasicTransferInfo, OperatorTransferData } from "contracts/layer_1/interfaces/ERC1400/IERC1410.sol"; import { ERC1410BasicStorageWrapper } from "./ERC1410BasicStorageWrapper.sol"; abstract contract ERC1410OperatorStorageWrapper is ERC1410BasicStorageWrapper { @@ -13,34 +13,34 @@ abstract contract ERC1410OperatorStorageWrapper is ERC1410BasicStorageWrapper { mapping(address => mapping(address => bool)) approvals; } - modifier onlyOperator(bytes32 _partition, address _from) { + modifier onlyOperator(bytes32 _partition, address _from) override { _checkOperator(_partition, _from); _; } - function _authorizeOperator(address _operator) internal { + function _authorizeOperator(address _operator) internal override { _erc1410operatorStorage().approvals[_msgSender()][_operator] = true; emit AuthorizedOperator(_operator, _msgSender()); } - function _revokeOperator(address _operator) internal { + function _revokeOperator(address _operator) internal override { _erc1410operatorStorage().approvals[_msgSender()][_operator] = false; emit RevokedOperator(_operator, _msgSender()); } - function _authorizeOperatorByPartition(bytes32 _partition, address _operator) internal { + function _authorizeOperatorByPartition(bytes32 _partition, address _operator) internal override { _erc1410operatorStorage().partitionApprovals[_msgSender()][_partition][_operator] = true; emit AuthorizedOperatorByPartition(_partition, _operator, _msgSender()); } - function _revokeOperatorByPartition(bytes32 _partition, address _operator) internal { + function _revokeOperatorByPartition(bytes32 _partition, address _operator) internal override { _erc1410operatorStorage().partitionApprovals[_msgSender()][_partition][_operator] = false; emit RevokedOperatorByPartition(_partition, _operator, _msgSender()); } function _operatorTransferByPartition( OperatorTransferData calldata _operatorTransferData - ) internal returns (bytes32) { + ) internal override returns (bytes32) { return _transferByPartition( _operatorTransferData.from, @@ -52,7 +52,7 @@ abstract contract ERC1410OperatorStorageWrapper is ERC1410BasicStorageWrapper { ); } - function _isOperator(address _operator, address _tokenHolder) internal view returns (bool) { + function _isOperator(address _operator, address _tokenHolder) internal view override returns (bool) { return _erc1410operatorStorage().approvals[_tokenHolder][_operator]; } @@ -60,15 +60,19 @@ abstract contract ERC1410OperatorStorageWrapper is ERC1410BasicStorageWrapper { bytes32 _partition, address _operator, address _tokenHolder - ) internal view returns (bool) { + ) internal view override returns (bool) { return _erc1410operatorStorage().partitionApprovals[_tokenHolder][_partition][_operator]; } - function _isAuthorized(bytes32 _partition, address _operator, address _tokenHolder) internal view returns (bool) { + function _isAuthorized( + bytes32 _partition, + address _operator, + address _tokenHolder + ) internal view override returns (bool) { return _isOperator(_operator, _tokenHolder) || _isOperatorForPartition(_partition, _operator, _tokenHolder); } - function _checkOperator(bytes32 _partition, address _from) internal view { + function _checkOperator(bytes32 _partition, address _from) internal view override { if (!_isAuthorized(_partition, _msgSender(), _from)) revert Unauthorized(_msgSender(), _from, _partition); } diff --git a/packages/ats/contracts/contracts/layer_0/ERC1400/ERC1410/ERC1410ProtectedPartitionsStorageWrapper.sol b/packages/ats/contracts/contracts/layer_0/ERC1400/ERC1410/ERC1410ProtectedPartitionsStorageWrapper.sol index 10711d6c2..f610ba037 100644 --- a/packages/ats/contracts/contracts/layer_0/ERC1400/ERC1410/ERC1410ProtectedPartitionsStorageWrapper.sol +++ b/packages/ats/contracts/contracts/layer_0/ERC1400/ERC1410/ERC1410ProtectedPartitionsStorageWrapper.sol @@ -3,7 +3,10 @@ pragma solidity >=0.8.0 <0.9.0; import { BasicTransferInfo } from "../../../layer_1/interfaces/ERC1400/IERC1410.sol"; import { ERC1644StorageWrapper } from "../ERC1644/ERC1644StorageWrapper.sol"; -import { checkNounceAndDeadline } from "../../../layer_1/protectedPartitions/signatureVerification.sol"; +import { checkNounceAndDeadline } from "../../../layer_0/common/libraries/ERC712Lib.sol"; +import { + IProtectedPartitionsStorageWrapper +} from "../../../layer_1/interfaces/protectedPartitions/IProtectedPartitionsStorageWrapper.sol"; abstract contract ERC1410ProtectedPartitionsStorageWrapper is ERC1644StorageWrapper { function _protectedTransferFromByPartition( @@ -11,31 +14,39 @@ abstract contract ERC1410ProtectedPartitionsStorageWrapper is ERC1644StorageWrap address _from, address _to, uint256 _amount, - uint256 _deadline, - uint256 _nounce, - bytes calldata _signature - ) internal { - checkNounceAndDeadline(_nounce, _from, _getNounceFor(_from), _deadline, _blockTimestamp()); + IProtectedPartitionsStorageWrapper.ProtectionData calldata _protectionData + ) internal override returns (bytes32) { + checkNounceAndDeadline( + _protectionData.nounce, + _from, + _getNonceFor(_from), + _protectionData.deadline, + _blockTimestamp() + ); - _checkTransferSignature(_partition, _from, _to, _amount, _deadline, _nounce, _signature); + _checkTransferSignature(_partition, _from, _to, _amount, _protectionData); - _setNounce(_nounce, _from); + _setNonceFor(_protectionData.nounce, _from); - _transferByPartition(_from, BasicTransferInfo(_to, _amount), _partition, "", _msgSender(), ""); + return _transferByPartition(_from, BasicTransferInfo(_to, _amount), _partition, "", _msgSender(), ""); } function _protectedRedeemFromByPartition( bytes32 _partition, address _from, uint256 _amount, - uint256 _deadline, - uint256 _nounce, - bytes calldata _signature - ) internal { - checkNounceAndDeadline(_nounce, _from, _getNounceFor(_from), _deadline, _blockTimestamp()); - - _checkRedeemSignature(_partition, _from, _amount, _deadline, _nounce, _signature); - _setNounce(_nounce, _from); + IProtectedPartitionsStorageWrapper.ProtectionData calldata _protectionData + ) internal override { + checkNounceAndDeadline( + _protectionData.nounce, + _from, + _getNonceFor(_from), + _protectionData.deadline, + _blockTimestamp() + ); + + _checkRedeemSignature(_partition, _from, _amount, _protectionData); + _setNonceFor(_protectionData.nounce, _from); _redeemByPartition(_partition, _from, _msgSender(), _amount, "", ""); } diff --git a/packages/ats/contracts/contracts/layer_0/ERC1400/ERC1410/ERC1410StandardStorageWrapper.sol b/packages/ats/contracts/contracts/layer_0/ERC1400/ERC1410/ERC1410StandardStorageWrapper.sol index 4ba980a23..6b6e7d481 100644 --- a/packages/ats/contracts/contracts/layer_0/ERC1400/ERC1410/ERC1410StandardStorageWrapper.sol +++ b/packages/ats/contracts/contracts/layer_0/ERC1400/ERC1410/ERC1410StandardStorageWrapper.sol @@ -56,12 +56,12 @@ abstract contract ERC1410StandardStorageWrapper is ERC1410OperatorStorageWrapper } } - function _triggerAndSyncAll(bytes32 _partition, address _from, address _to) internal { - _triggerScheduledCrossOrderedTasks(0); + function _triggerAndSyncAll(bytes32 _partition, address _from, address _to) internal override { + _callTriggerPendingScheduledCrossOrderedTasks(); _syncBalanceAdjustments(_partition, _from, _to); } - function _syncBalanceAdjustments(bytes32 _partition, address _from, address _to) internal { + function _syncBalanceAdjustments(bytes32 _partition, address _from, address _to) internal override { // adjust the total supply for the partition _adjustTotalAndMaxSupplyForPartition(_partition); @@ -83,7 +83,7 @@ abstract contract ERC1410StandardStorageWrapper is ERC1410OperatorStorageWrapper if (_value != 0) erc1410Storage.balances[_account] += _value; } - function _issueByPartition(IssueData memory _issueData) internal { + function _issueByPartition(IssueData memory _issueData) internal override { _validateParams(_issueData.partition, _issueData.value); _beforeTokenTransfer(_issueData.partition, address(0), _issueData.tokenHolder, _issueData.value); @@ -121,7 +121,7 @@ abstract contract ERC1410StandardStorageWrapper is ERC1410OperatorStorageWrapper uint256 _value, bytes memory _data, bytes memory _operatorData - ) internal { + ) internal override { _beforeTokenTransfer(_partition, _from, address(0), _value); _reduceBalanceByPartition(_from, _value, _partition); @@ -140,54 +140,47 @@ abstract contract ERC1410StandardStorageWrapper is ERC1410OperatorStorageWrapper emit RedeemedByPartition(_partition, _operator, _from, _value, _data, _operatorData); } - function _reduceTotalSupplyByPartition(bytes32 _partition, uint256 _value) internal { + function _reduceTotalSupplyByPartition(bytes32 _partition, uint256 _value) internal override { ERC1410BasicStorage storage erc1410Storage = _erc1410BasicStorage(); erc1410Storage.totalSupply -= _value; erc1410Storage.totalSupplyByPartition[_partition] -= _value; } - function _increaseTotalSupplyByPartition(bytes32 _partition, uint256 _value) internal { + function _increaseTotalSupplyByPartition(bytes32 _partition, uint256 _value) internal override { ERC1410BasicStorage storage erc1410Storage = _erc1410BasicStorage(); erc1410Storage.totalSupply += _value; erc1410Storage.totalSupplyByPartition[_partition] += _value; } - function _updateAccountSnapshot(address account, bytes32 partition) internal virtual; - - function _updateTotalSupplySnapshot(bytes32 partition) internal virtual; - - function _updateTokenHolderSnapshot(address account) internal virtual; - - function _updateTotalTokenHolderSnapshot() internal virtual; - - function _adjustTotalAndMaxSupplyForPartition(bytes32 _partition) internal virtual; - - function _totalSupplyAdjusted() internal view returns (uint256) { + function _totalSupplyAdjusted() internal view override returns (uint256) { return _totalSupplyAdjustedAt(_blockTimestamp()); } - function _totalSupplyAdjustedAt(uint256 _timestamp) internal view returns (uint256) { + function _totalSupplyAdjustedAt(uint256 _timestamp) internal view override returns (uint256) { (uint256 pendingABAF, ) = _getPendingScheduledBalanceAdjustmentsAt(_timestamp); return _totalSupply() * pendingABAF; } - function _totalSupplyByPartitionAdjusted(bytes32 _partition) internal view returns (uint256) { + function _totalSupplyByPartitionAdjusted(bytes32 _partition) internal view override returns (uint256) { uint256 factor = _calculateFactor(_getAbafAdjusted(), _getLabafByPartition(_partition)); return _totalSupplyByPartition(_partition) * factor; } - function _balanceOfAdjusted(address _tokenHolder) internal view returns (uint256) { + function _balanceOfAdjusted(address _tokenHolder) internal view override returns (uint256) { return _balanceOfAdjustedAt(_tokenHolder, _blockTimestamp()); } - function _balanceOfAdjustedAt(address _tokenHolder, uint256 _timestamp) internal view returns (uint256) { + function _balanceOfAdjustedAt(address _tokenHolder, uint256 _timestamp) internal view override returns (uint256) { uint256 factor = _calculateFactor(_getAbafAdjustedAt(_timestamp), _getLabafByUser(_tokenHolder)); return _balanceOf(_tokenHolder) * factor; } - function _balanceOfByPartitionAdjusted(bytes32 _partition, address _tokenHolder) internal view returns (uint256) { + function _balanceOfByPartitionAdjusted( + bytes32 _partition, + address _tokenHolder + ) internal view override returns (uint256) { return _balanceOfByPartitionAdjustedAt(_partition, _tokenHolder, _blockTimestamp()); } @@ -195,7 +188,7 @@ abstract contract ERC1410StandardStorageWrapper is ERC1410OperatorStorageWrapper bytes32 _partition, address _tokenHolder, uint256 _timestamp - ) internal view returns (uint256) { + ) internal view override returns (uint256) { uint256 factor = _calculateFactor( _getAbafAdjustedAt(_timestamp), _getLabafByUserAndPartition(_partition, _tokenHolder) @@ -203,8 +196,6 @@ abstract contract ERC1410StandardStorageWrapper is ERC1410OperatorStorageWrapper return _balanceOfByPartition(_partition, _tokenHolder) * factor; } - function _getLabafByUserAndPartition(bytes32 _partition, address _account) internal view virtual returns (uint256); - function _getTotalBalance(address _tokenHolder) internal view virtual override returns (uint256) { return super._getTotalBalance(_tokenHolder) + _balanceOfAdjustedAt(_tokenHolder, _blockTimestamp()); } @@ -227,7 +218,7 @@ abstract contract ERC1410StandardStorageWrapper is ERC1410OperatorStorageWrapper _balanceOfByPartitionAdjustedAt(_partition, _tokenHolder, _blockTimestamp()); } - function _validateParams(bytes32 _partition, uint256 _value) internal pure { + function _validateParams(bytes32 _partition, uint256 _value) internal pure override { if (_value == uint256(0)) { revert ZeroValue(); } diff --git a/packages/ats/contracts/contracts/layer_0/ERC1400/ERC1594/ERC1594StorageWrapper.sol b/packages/ats/contracts/contracts/layer_0/ERC1400/ERC1594/ERC1594StorageWrapper.sol index 4ee73bca5..6ee1029dc 100644 --- a/packages/ats/contracts/contracts/layer_0/ERC1400/ERC1594/ERC1594StorageWrapper.sol +++ b/packages/ats/contracts/contracts/layer_0/ERC1400/ERC1594/ERC1594StorageWrapper.sol @@ -21,11 +21,6 @@ abstract contract ERC1594StorageWrapper is IERC1594StorageWrapper, CapStorageWra bool initialized; } - modifier onlyIssuable() { - _checkIssuable(); - _; - } - modifier onlyCanTransferFromByPartition( address _from, address _to, @@ -33,68 +28,65 @@ abstract contract ERC1594StorageWrapper is IERC1594StorageWrapper, CapStorageWra uint256 _value, bytes memory, bytes memory - ) { + ) override { _checkCanTransferFromByPartition(_from, _to, _partition, _value, EMPTY_BYTES, EMPTY_BYTES); _; } modifier onlyCanRedeemFromByPartition(address _from, bytes32 _partition, uint256 _value, bytes memory, bytes memory) + override { _checkCanRedeemFromByPartition(_from, _partition, _value, EMPTY_BYTES, EMPTY_BYTES); _; } - modifier onlyIdentified(address _from, address _to) { + modifier onlyIdentified(address _from, address _to) override { _checkIdentity(_from, _to); _; } - modifier onlyCompliant(address _from, address _to, bool _checkSender) { + modifier onlyCompliant(address _from, address _to, bool _checkSender) override { _checkCompliance(_from, _to, _checkSender); _; } // solhint-disable-next-line func-name-mixedcase - function _initialize_ERC1594() internal { + function _initialize_ERC1594() internal override { ERC1594Storage storage ds = _erc1594Storage(); ds.issuance = true; ds.initialized = true; } // TODO: In this case are able to perform that operation another role? - function _issue(address _tokenHolder, uint256 _value, bytes memory _data) internal { + function _issue(address _tokenHolder, uint256 _value, bytes memory _data) internal override { // Add a function to validate the `_data` parameter _mint(_tokenHolder, _value); emit Issued(_msgSender(), _tokenHolder, _value, _data); } - function _redeem(uint256 _value, bytes memory _data) internal { + function _redeem(uint256 _value, bytes memory _data) internal override { // Add a function to validate the `_data` parameter _burn(_msgSender(), _value); emit Redeemed(address(0), _msgSender(), _value, _data); } - function _redeemFrom(address _tokenHolder, uint256 _value, bytes memory _data) internal { + function _redeemFrom(address _tokenHolder, uint256 _value, bytes memory _data) internal override { // Add a function to validate the `_data` parameter _burnFrom(_tokenHolder, _value); emit Redeemed(_msgSender(), _tokenHolder, _value, _data); } - function _isIssuable() internal view returns (bool) { + function _isIssuable() internal view override returns (bool) { return _erc1594Storage().issuance; } - function _checkIssuable() internal view { - if (!_isIssuable()) revert IssuanceIsClosed(); - } - function _checkCanRedeemFromByPartition( address _from, bytes32 _partition, uint256 _value, bytes memory, bytes memory - ) internal view { + ) internal view override { (bool isAbleToRedeemFrom, , bytes32 reasonCode, bytes memory details) = _isAbleToRedeemFromByPartition( _from, _partition, @@ -113,7 +105,12 @@ abstract contract ERC1594StorageWrapper is IERC1594StorageWrapper, CapStorageWra uint256 _value, bytes memory /*_data*/, bytes memory /*_operatorData*/ - ) internal view returns (bool isAbleToRedeemFrom, bytes1 statusCode, bytes32 reasonCode, bytes memory details) { + ) + internal + view + override + returns (bool isAbleToRedeemFrom, bytes1 statusCode, bytes32 reasonCode, bytes memory details) + { (isAbleToRedeemFrom, statusCode, reasonCode, details) = _genericChecks(); if (!isAbleToRedeemFrom) { return (isAbleToRedeemFrom, statusCode, reasonCode, details); @@ -149,7 +146,7 @@ abstract contract ERC1594StorageWrapper is IERC1594StorageWrapper, CapStorageWra uint256 _value, bytes memory /*_data*/, bytes memory /*_operatorData*/ - ) internal view { + ) internal view override { (bool isAbleToTransfer, , bytes32 reasonCode, bytes memory details) = _isAbleToTransferFromByPartition( _from, _to, @@ -170,7 +167,12 @@ abstract contract ERC1594StorageWrapper is IERC1594StorageWrapper, CapStorageWra uint256 _value, bytes memory /*_data*/, bytes memory /*_operatorData*/ - ) internal view returns (bool isAbleToTransfer, bytes1 statusCode, bytes32 reasonCode, bytes memory details) { + ) + internal + view + override + returns (bool isAbleToTransfer, bytes1 statusCode, bytes32 reasonCode, bytes memory details) + { (isAbleToTransfer, statusCode, reasonCode, details) = _genericChecks(); if (!isAbleToTransfer) { return (isAbleToTransfer, statusCode, reasonCode, details); @@ -213,6 +215,10 @@ abstract contract ERC1594StorageWrapper is IERC1594StorageWrapper, CapStorageWra } } + function _isERC1594Initialized() internal view override returns (bool) { + return _erc1594Storage().initialized; + } + function _erc1594Storage() internal pure returns (ERC1594Storage storage ds) { bytes32 position = _ERC1594_STORAGE_POSITION; // solhint-disable-next-line no-inline-assembly diff --git a/packages/ats/contracts/contracts/layer_0/ERC1400/ERC1644/ERC1644StorageWrapper.sol b/packages/ats/contracts/contracts/layer_0/ERC1400/ERC1644/ERC1644StorageWrapper.sol index 5858564f7..2cf0a84dc 100644 --- a/packages/ats/contracts/contracts/layer_0/ERC1400/ERC1644/ERC1644StorageWrapper.sol +++ b/packages/ats/contracts/contracts/layer_0/ERC1400/ERC1644/ERC1644StorageWrapper.sol @@ -11,18 +11,24 @@ abstract contract ERC1644StorageWrapper is IERC1644StorageWrapper, ERC3643Storag bool initialized; } - modifier onlyControllable() { + modifier onlyControllable() override { _checkControllable(); _; } + // solhint-disable-next-line func-name-mixedcase + function _initialize_ERC1644(bool _controllable) internal override { + _erc1644Storage().isControllable = _controllable; + _erc1644Storage().initialized = true; + } + function _controllerTransfer( address _from, address _to, uint256 _value, bytes memory _data, bytes memory _operatorData - ) internal { + ) internal override { _transfer(_from, _to, _value); emit ControllerTransfer(msg.sender, _from, _to, _value, _data, _operatorData); } @@ -32,22 +38,24 @@ abstract contract ERC1644StorageWrapper is IERC1644StorageWrapper, ERC3643Storag uint256 _value, bytes memory _data, bytes memory _operatorData - ) internal { + ) internal override { _burn(_tokenHolder, _value); emit ControllerRedemption(msg.sender, _tokenHolder, _value, _data, _operatorData); } - function _finalizeControllable() internal { - if (!_erc1644Storage().isControllable) return; - + function _finalizeControllable() internal override { _erc1644Storage().isControllable = false; emit FinalizedControllerFeature(_msgSender()); } - function _isControllable() internal view returns (bool) { + function _isControllable() internal view override returns (bool) { return _erc1644Storage().isControllable; } + function _isERC1644Initialized() internal view override returns (bool) { + return _erc1644Storage().initialized; + } + function _erc1644Storage() internal pure returns (ERC1644Storage storage erc1644Storage_) { bytes32 position = _ERC1644_STORAGE_POSITION; // solhint-disable-next-line no-inline-assembly diff --git a/packages/ats/contracts/contracts/layer_0/ERC1400/ERC20/ERC20StorageWrapper1.sol b/packages/ats/contracts/contracts/layer_0/ERC1400/ERC20/ERC20StorageWrapper1.sol index e5208b36c..a265da961 100644 --- a/packages/ats/contracts/contracts/layer_0/ERC1400/ERC20/ERC20StorageWrapper1.sol +++ b/packages/ats/contracts/contracts/layer_0/ERC1400/ERC20/ERC20StorageWrapper1.sol @@ -17,23 +17,34 @@ abstract contract ERC20StorageWrapper1 is ERC1410BasicStorageWrapperRead { IFactory.SecurityType securityType; } - function _adjustDecimals(uint8 decimals) internal { + // solhint-disable-next-line func-name-mixedcase + function _initialize_ERC20(IERC20.ERC20Metadata calldata erc20Metadata) internal override { + ERC20Storage storage erc20Storage = _erc20Storage(); + erc20Storage.name = erc20Metadata.info.name; + erc20Storage.symbol = erc20Metadata.info.symbol; + erc20Storage.isin = erc20Metadata.info.isin; + erc20Storage.decimals = erc20Metadata.info.decimals; + erc20Storage.securityType = erc20Metadata.securityType; + erc20Storage.initialized = true; + } + + function _adjustDecimals(uint8 decimals) internal override { _erc20Storage().decimals += decimals; } - function _decimalsAdjusted() internal view returns (uint8) { + function _decimalsAdjusted() internal view override returns (uint8) { return _decimalsAdjustedAt(_blockTimestamp()); } - function _allowanceAdjusted(address _owner, address _spender) internal view returns (uint256) { + function _allowanceAdjusted(address _owner, address _spender) internal view override returns (uint256) { return _allowanceAdjustedAt(_owner, _spender, _blockTimestamp()); } - function _allowance(address owner, address spender) internal view returns (uint256) { - return _erc20Storage().allowed[owner][spender]; + function _allowance(address _owner, address _spender) internal view override returns (uint256) { + return _erc20Storage().allowed[_owner][_spender]; } - function _decimalsAdjustedAt(uint256 _timestamp) internal view returns (uint8) { + function _decimalsAdjustedAt(uint256 _timestamp) internal view override returns (uint8) { return _getERC20MetadataAdjustedAt(_timestamp).info.decimals; } @@ -41,24 +52,24 @@ abstract contract ERC20StorageWrapper1 is ERC1410BasicStorageWrapperRead { address _owner, address _spender, uint256 _timestamp - ) internal view returns (uint256) { + ) internal view override returns (uint256) { uint256 factor = _calculateFactor(_getAbafAdjustedAt(_timestamp), _getAllowanceLabaf(_owner, _spender)); return _allowance(_owner, _spender) * factor; } - function _getERC20MetadataAdjusted() internal view returns (IERC20.ERC20Metadata memory erc20Metadata_) { + function _getERC20MetadataAdjusted() internal view override returns (IERC20.ERC20Metadata memory erc20Metadata_) { erc20Metadata_ = _getERC20MetadataAdjustedAt(_blockTimestamp()); } function _getERC20MetadataAdjustedAt( uint256 _timestamp - ) internal view returns (IERC20.ERC20Metadata memory erc20Metadata_) { + ) internal view override returns (IERC20.ERC20Metadata memory erc20Metadata_) { (, uint8 pendingDecimals) = _getPendingScheduledBalanceAdjustmentsAt(_timestamp); erc20Metadata_ = _getERC20Metadata(); erc20Metadata_.info.decimals += pendingDecimals; } - function _getERC20Metadata() internal view returns (IERC20.ERC20Metadata memory erc20Metadata_) { + function _getERC20Metadata() internal view override returns (IERC20.ERC20Metadata memory erc20Metadata_) { ERC20Storage storage erc20Storage = _erc20Storage(); IERC20.ERC20MetadataInfo memory erc20Info = IERC20.ERC20MetadataInfo({ name: erc20Storage.name, @@ -69,10 +80,18 @@ abstract contract ERC20StorageWrapper1 is ERC1410BasicStorageWrapperRead { erc20Metadata_ = IERC20.ERC20Metadata({ info: erc20Info, securityType: erc20Storage.securityType }); } - function _decimals() internal view returns (uint8) { + function _getName() internal view override returns (string memory) { + return _erc20Storage().name; + } + + function _decimals() internal view override returns (uint8) { return _erc20Storage().decimals; } + function _isERC20Initialized() internal view override returns (bool) { + return _erc20Storage().initialized; + } + function _erc20Storage() internal pure returns (ERC20Storage storage erc20Storage_) { bytes32 position = _ERC20_STORAGE_POSITION; // solhint-disable-next-line no-inline-assembly diff --git a/packages/ats/contracts/contracts/layer_0/ERC1400/ERC20/ERC20StorageWrapper2.sol b/packages/ats/contracts/contracts/layer_0/ERC1400/ERC20/ERC20StorageWrapper2.sol index 5de349b09..92ddf0e57 100644 --- a/packages/ats/contracts/contracts/layer_0/ERC1400/ERC20/ERC20StorageWrapper2.sol +++ b/packages/ats/contracts/contracts/layer_0/ERC1400/ERC20/ERC20StorageWrapper2.sol @@ -7,13 +7,13 @@ import { BasicTransferInfo, IssueData } from "../../../layer_1/interfaces/ERC140 import { ERC1410StandardStorageWrapper } from "../ERC1410/ERC1410StandardStorageWrapper.sol"; abstract contract ERC20StorageWrapper2 is IERC20StorageWrapper, ERC1410StandardStorageWrapper { - function _beforeAllowanceUpdate(address _owner, address _spender) internal { + function _beforeAllowanceUpdate(address _owner, address _spender) internal override { _triggerAndSyncAll(_DEFAULT_PARTITION, _owner, address(0)); _updateAllowanceAndLabaf(_owner, _spender); } - function _updateAllowanceAndLabaf(address _owner, address _spender) internal { + function _updateAllowanceAndLabaf(address _owner, address _spender) internal override { uint256 abaf = _getAbaf(); uint256 labaf = _getAllowanceLabaf(_owner, _spender); @@ -25,10 +25,9 @@ abstract contract ERC20StorageWrapper2 is IERC20StorageWrapper, ERC1410StandardS _updateAllowanceLabaf(_owner, _spender, abaf); } - function _approve(address owner, address spender, uint256 value) internal returns (bool) { - if (owner == address(0)) { - revert ZeroOwnerAddress(); - } + function _approve(address owner, address spender, uint256 value) internal override returns (bool) { + assert(owner != address(0)); + if (spender == address(0)) { revert SpenderWithZeroAddress(); } @@ -38,7 +37,7 @@ abstract contract ERC20StorageWrapper2 is IERC20StorageWrapper, ERC1410StandardS return true; } - function _increaseAllowance(address spender, uint256 addedValue) internal returns (bool) { + function _increaseAllowance(address spender, uint256 addedValue) internal override returns (bool) { if (spender == address(0)) { revert SpenderWithZeroAddress(); } @@ -48,7 +47,7 @@ abstract contract ERC20StorageWrapper2 is IERC20StorageWrapper, ERC1410StandardS return true; } - function _decreaseAllowance(address spender, uint256 subtractedValue) internal returns (bool) { + function _decreaseAllowance(address spender, uint256 subtractedValue) internal override returns (bool) { if (spender == address(0)) { revert SpenderWithZeroAddress(); } @@ -57,33 +56,33 @@ abstract contract ERC20StorageWrapper2 is IERC20StorageWrapper, ERC1410StandardS return true; } - function _transferFrom(address spender, address from, address to, uint256 value) internal returns (bool) { + function _transferFrom(address spender, address from, address to, uint256 value) internal override returns (bool) { _decreaseAllowedBalance(from, spender, value); _transferByPartition(from, BasicTransferInfo(to, value), _DEFAULT_PARTITION, "", spender, ""); return _emitTransferEvent(from, to, value); } - function _transfer(address from, address to, uint256 value) internal returns (bool) { + function _transfer(address from, address to, uint256 value) internal override returns (bool) { _transferByPartition(from, BasicTransferInfo(to, value), _DEFAULT_PARTITION, "", address(0), ""); return _emitTransferEvent(from, to, value); } - function _mint(address to, uint256 value) internal { + function _mint(address to, uint256 value) internal override { _issueByPartition(IssueData(_DEFAULT_PARTITION, to, value, "")); _emitTransferEvent(address(0), to, value); } - function _burn(address from, uint256 value) internal { + function _burn(address from, uint256 value) internal override { _redeemByPartition(_DEFAULT_PARTITION, from, address(0), value, "", ""); _emitTransferEvent(from, address(0), value); } - function _burnFrom(address account, uint256 value) internal { + function _burnFrom(address account, uint256 value) internal override { _decreaseAllowedBalance(account, _msgSender(), value); _burn(account, value); } - function _decreaseAllowedBalance(address from, address spender, uint256 value) internal { + function _decreaseAllowedBalance(address from, address spender, uint256 value) internal override { _beforeAllowanceUpdate(from, spender); ERC20Storage storage erc20Storage = _erc20Storage(); @@ -95,7 +94,7 @@ abstract contract ERC20StorageWrapper2 is IERC20StorageWrapper, ERC1410StandardS erc20Storage.allowed[from][spender] -= value; } - function _increaseAllowedBalance(address from, address spender, uint256 value) internal { + function _increaseAllowedBalance(address from, address spender, uint256 value) internal override { _beforeAllowanceUpdate(from, spender); ERC20Storage storage erc20Storage = _erc20Storage(); diff --git a/packages/ats/contracts/contracts/layer_0/ERC1400/ERC20Permit/ERC20PermitStorageWrapper.sol b/packages/ats/contracts/contracts/layer_0/ERC1400/ERC20Permit/ERC20PermitStorageWrapper.sol index e372a4a18..a9d8b69bd 100644 --- a/packages/ats/contracts/contracts/layer_0/ERC1400/ERC20Permit/ERC20PermitStorageWrapper.sol +++ b/packages/ats/contracts/contracts/layer_0/ERC1400/ERC20Permit/ERC20PermitStorageWrapper.sol @@ -5,15 +5,17 @@ import { ERC20VotesStorageWrapper } from "../../ERC1400/ERC20Votes/ERC20VotesSto import { IERC20Permit } from "../../../layer_1/interfaces/ERC1400/IERC20Permit.sol"; import { ECDSA } from "@openzeppelin/contracts/utils/cryptography/ECDSA.sol"; import { ERC20PERMIT_TYPEHASH } from "../../constants/values.sol"; -import { _CONTRACT_NAME_ERC20PERMIT, _CONTRACT_VERSION_ERC20PERMIT } from "../../../layer_1/constants/values.sol"; -import { getDomainHash } from "../../../layer_1/protectedPartitions/signatureVerification.sol"; -import { _ERC20PERMIT_STORAGE_POSITION } from "../../constants/storagePositions.sol"; +import { getDomainHash } from "../../../layer_0/common/libraries/ERC712Lib.sol"; +import { Strings } from "@openzeppelin/contracts/utils/Strings.sol"; abstract contract ERC20PermitStorageWrapper is ERC20VotesStorageWrapper { struct ERC20PermitStorage { - string contractName; - string contractVersion; - bool initialized; + // solhint-disable-next-line var-name-mixedcase + string DEPRECATED_contractName; + // solhint-disable-next-line var-name-mixedcase + string DEPRECATED_contractVersion; + // solhint-disable-next-line var-name-mixedcase + bool DEPRECATED_initialized; } function _permit( @@ -24,21 +26,15 @@ abstract contract ERC20PermitStorageWrapper is ERC20VotesStorageWrapper { uint8 v, bytes32 r, bytes32 s - ) internal { + ) internal override { if (_isExpired(deadline)) { revert IERC20Permit.ERC2612ExpiredSignature(deadline); } - bytes32 structHash = keccak256( - abi.encode( - ERC20PERMIT_TYPEHASH, - owner, - spender, - value, - _protectedPartitionsStorage().nounces[owner]++, - deadline - ) - ); + uint256 currentNonce = _getNonceFor(owner); + + bytes32 structHash = keccak256(abi.encode(ERC20PERMIT_TYPEHASH, owner, spender, value, currentNonce, deadline)); + _setNonceFor(currentNonce + 1, owner); address signer = ECDSA.recover(ECDSA.toTypedDataHash(_DOMAIN_SEPARATOR(), structHash), v, r, s); if (signer != owner) { @@ -48,15 +44,7 @@ abstract contract ERC20PermitStorageWrapper is ERC20VotesStorageWrapper { } // solhint-disable-next-line func-name-mixedcase - function _DOMAIN_SEPARATOR() internal view returns (bytes32) { - return getDomainHash(_CONTRACT_NAME_ERC20PERMIT, _CONTRACT_VERSION_ERC20PERMIT, _blockChainid(), address(this)); - } - - function _erc20PermitStorage() internal pure returns (ERC20PermitStorage storage erc20permitStorage_) { - bytes32 position = _ERC20PERMIT_STORAGE_POSITION; - // solhint-disable-next-line no-inline-assembly - assembly { - erc20permitStorage_.slot := position - } + function _DOMAIN_SEPARATOR() internal view override returns (bytes32) { + return getDomainHash(_getName(), Strings.toString(_getResolverProxyVersion()), _blockChainid(), address(this)); } } diff --git a/packages/ats/contracts/contracts/layer_0/ERC1400/ERC20Votes/ERC20VotesStorageWrapper.sol b/packages/ats/contracts/contracts/layer_0/ERC1400/ERC20Votes/ERC20VotesStorageWrapper.sol index b8812d5a8..a20120907 100644 --- a/packages/ats/contracts/contracts/layer_0/ERC1400/ERC20Votes/ERC20VotesStorageWrapper.sol +++ b/packages/ats/contracts/contracts/layer_0/ERC1400/ERC20Votes/ERC20VotesStorageWrapper.sol @@ -4,19 +4,23 @@ pragma solidity >=0.8.0 <0.9.0; import { _ERC20VOTES_STORAGE_POSITION } from "../../constants/storagePositions.sol"; import { ERC1594StorageWrapper } from "../ERC1594/ERC1594StorageWrapper.sol"; import { IERC20Votes } from "../../../layer_1/interfaces/ERC1400/IERC20Votes.sol"; -import { Math } from "@openzeppelin/contracts/utils/math/Math.sol"; import { SafeCast } from "@openzeppelin/contracts/utils/math/SafeCast.sol"; +import { CheckpointsLib } from "../../common/libraries/CheckpointsLib.sol"; // solhint-disable custom-errors abstract contract ERC20VotesStorageWrapper is ERC1594StorageWrapper { + using CheckpointsLib for CheckpointsLib.Checkpoint[]; + struct ERC20VotesStorage { bool activated; - string contractName; - string contractVersion; + // solhint-disable-next-line var-name-mixedcase + string DEPRECATED_contractName; + // solhint-disable-next-line var-name-mixedcase + string DEPRECATED_contractVersion; mapping(address => address) delegates; - mapping(address => IERC20Votes.Checkpoint[]) checkpoints; - IERC20Votes.Checkpoint[] totalSupplyCheckpoints; - IERC20Votes.Checkpoint[] abafCheckpoints; + mapping(address => CheckpointsLib.Checkpoint[]) checkpoints; + CheckpointsLib.Checkpoint[] totalSupplyCheckpoints; + CheckpointsLib.Checkpoint[] abafCheckpoints; bool initialized; } @@ -24,15 +28,22 @@ abstract contract ERC20VotesStorageWrapper is ERC1594StorageWrapper { event DelegateVotesChanged(address indexed delegate, uint256 previousBalance, uint256 newBalance); - function _setActivate(bool _activated) internal virtual { + // solhint-disable-next-line func-name-mixedcase + function _initialize_ERC20Votes(bool _activated) internal override { + ERC20VotesStorage storage erc20VotesStorage = _erc20VotesStorage(); + _setActivate(_activated); + erc20VotesStorage.initialized = true; + } + + function _setActivate(bool _activated) internal virtual override { _erc20VotesStorage().activated = _activated; } - function _delegate(address delegatee) internal virtual { + function _delegate(address delegatee) internal override { _delegate(_msgSender(), delegatee); } - function _takeAbafCheckpoint() internal { + function _takeAbafCheckpoint() internal override { ERC20VotesStorage storage erc20VotesStorage = _erc20VotesStorage(); uint256 abaf = _getAbaf(); @@ -41,13 +52,13 @@ abstract contract ERC20VotesStorageWrapper is ERC1594StorageWrapper { uint256 pos = erc20VotesStorage.abafCheckpoints.length; if (pos != 0) - if (erc20VotesStorage.abafCheckpoints[pos - 1].fromBlock == _clock()) { - if (erc20VotesStorage.abafCheckpoints[pos - 1].votes != abaf) + if (erc20VotesStorage.abafCheckpoints[pos - 1].from == _clock()) { + if (erc20VotesStorage.abafCheckpoints[pos - 1].value != abaf) revert IERC20Votes.AbafChangeForBlockForbidden(_clock()); return; } - _erc20VotesStorage().abafCheckpoints.push(IERC20Votes.Checkpoint({ fromBlock: _clock(), votes: abaf })); + _erc20VotesStorage().abafCheckpoints.push(CheckpointsLib.Checkpoint({ from: _clock(), value: abaf })); } function _afterTokenTransfer( @@ -70,8 +81,8 @@ abstract contract ERC20VotesStorageWrapper is ERC1594StorageWrapper { } } - function _delegate(address delegator, address delegatee) internal virtual { - _triggerScheduledCrossOrderedTasks(0); + function _delegate(address delegator, address delegatee) internal virtual override { + _callTriggerPendingScheduledCrossOrderedTasks(); _takeAbafCheckpoint(); @@ -79,6 +90,10 @@ abstract contract ERC20VotesStorageWrapper is ERC1594StorageWrapper { if (currentDelegate == delegatee) return; + _triggerScheduledCrossOrderedTasks(0); + + _takeAbafCheckpoint(); + uint256 delegatorBalance = _balanceOfAdjustedAt(delegator, _blockTimestamp()) + _getLockedAmountForAdjustedAt(delegator, _blockTimestamp()) + _getHeldAmountForAdjusted(delegator) + @@ -91,7 +106,7 @@ abstract contract ERC20VotesStorageWrapper is ERC1594StorageWrapper { _moveVotingPower(currentDelegate, delegatee, delegatorBalance); } - function _moveVotingPower(address src, address dst, uint256 amount) internal { + function _moveVotingPower(address src, address dst, uint256 amount) internal override { if (src != dst && amount > 0) { if (src != address(0)) { _moveVotingPower(src, _subtract, amount); @@ -117,139 +132,98 @@ abstract contract ERC20VotesStorageWrapper is ERC1594StorageWrapper { } function _writeCheckpoint( - IERC20Votes.Checkpoint[] storage ckpts, + CheckpointsLib.Checkpoint[] storage ckpts, function(uint256, uint256) view returns (uint256) op, uint256 delta ) internal returns (uint256 oldWeight, uint256 newWeight) { uint256 pos = ckpts.length; unchecked { - IERC20Votes.Checkpoint memory oldCkpt = pos == 0 ? IERC20Votes.Checkpoint(0, 0) : ckpts[pos - 1]; + CheckpointsLib.Checkpoint memory oldCkpt = pos == 0 ? CheckpointsLib.Checkpoint(0, 0) : ckpts[pos - 1]; - oldWeight = oldCkpt.votes * _calculateFactorBetween(oldCkpt.fromBlock, _clock()); + oldWeight = oldCkpt.value * _calculateFactorBetween(oldCkpt.from, _clock()); newWeight = op(oldWeight, delta); - if (pos > 0 && oldCkpt.fromBlock == _clock()) { - ckpts[pos - 1].votes = newWeight; + if (pos > 0 && oldCkpt.from == _clock()) { + ckpts[pos - 1].value = newWeight; } else { - ckpts.push(IERC20Votes.Checkpoint({ fromBlock: _clock(), votes: newWeight })); + ckpts.push(CheckpointsLib.Checkpoint({ from: _clock(), value: newWeight })); } } } - /*function _hashTypedDataV4( - bytes32 structHash - ) internal view virtual returns (bytes32) { - return - ECDSA.toTypedDataHash( - getDomainHash( - _erc20VotesStorage().contractName, - _erc20VotesStorage().contractVersion, - _blockChainid(), - address(this) - ), - structHash - ); - }*/ - - function _clock() internal view virtual returns (uint48) { + function _clock() internal view virtual override returns (uint48) { return SafeCast.toUint48(_blockNumber()); } // solhint-disable-next-line func-name-mixedcase - function _CLOCK_MODE() internal view virtual returns (string memory) { + function _CLOCK_MODE() internal view virtual override returns (string memory) { // Check that the clock was not modified require(_clock() == _blockNumber(), "ERC20Votes: broken clock mode"); return "mode=blocknumber&from=default"; } - function _checkpoints(address account, uint256 pos) internal view virtual returns (IERC20Votes.Checkpoint memory) { + function _checkpoints( + address account, + uint256 pos + ) internal view virtual override returns (CheckpointsLib.Checkpoint memory) { return _erc20VotesStorage().checkpoints[account][pos]; } - function _numCheckpoints(address account) internal view virtual returns (uint256) { + function _numCheckpoints(address account) internal view virtual override returns (uint256) { return _erc20VotesStorage().checkpoints[account].length; } - function _delegates(address account) internal view virtual returns (address) { + function _delegates(address account) internal view virtual override returns (address) { return _erc20VotesStorage().delegates[account]; } - function _getVotes(address account) internal view virtual returns (uint256) { + function _getVotes(address account) internal view virtual override returns (uint256) { return _getVotesAdjusted(_clock(), _erc20VotesStorage().checkpoints[account]); } - function _getPastVotes(address account, uint256 timepoint) internal view virtual returns (uint256) { + function _getPastVotes(address account, uint256 timepoint) internal view virtual override returns (uint256) { require(timepoint < _clock(), "ERC20Votes: future lookup"); return _getVotesAdjusted(timepoint, _erc20VotesStorage().checkpoints[account]); } - function _getPastTotalSupply(uint256 timepoint) internal view virtual returns (uint256) { + function _getPastTotalSupply(uint256 timepoint) internal view virtual override returns (uint256) { require(timepoint < _clock(), "ERC20Votes: future lookup"); return _getVotesAdjusted(timepoint, _erc20VotesStorage().totalSupplyCheckpoints); } function _getVotesAdjusted( uint256 timepoint, - IERC20Votes.Checkpoint[] storage ckpts - ) internal view returns (uint256) { - (uint256 blockNumber, uint256 votes) = _checkpointsLookup(ckpts, timepoint); + CheckpointsLib.Checkpoint[] storage ckpts + ) internal view override returns (uint256) { + (uint256 blockNumber, uint256 votes) = ckpts.checkpointsLookup(timepoint); return votes * _calculateFactorBetween(blockNumber, timepoint); } - function _checkpointsLookup( - IERC20Votes.Checkpoint[] storage ckpts, - uint256 timepoint - ) internal view returns (uint256 block_, uint256 vote_) { - uint256 length = ckpts.length; - - uint256 low = 0; - uint256 high = length; - - if (length > 5) { - uint256 mid = length - Math.sqrt(length); - if (ckpts[mid].fromBlock > timepoint) { - high = mid; - } else { - low = mid + 1; - } - } - - while (low < high) { - uint256 mid = Math.average(low, high); - if (ckpts[mid].fromBlock > timepoint) { - high = mid; - } else { - low = mid + 1; - } - } - - if (high == 0) return (0, 0); - - unchecked { - return (ckpts[high - 1].fromBlock, ckpts[high - 1].votes); - } - } - - function _calculateFactorBetween(uint256 _fromBlock, uint256 _toBlock) internal view returns (uint256) { - (, uint256 abafAtBlockFrom) = _checkpointsLookup(_erc20VotesStorage().abafCheckpoints, _fromBlock); - (, uint256 abafAtBlockTo) = _checkpointsLookup(_erc20VotesStorage().abafCheckpoints, _toBlock); + function _calculateFactorBetween(uint256 _fromBlock, uint256 _toBlock) internal view override returns (uint256) { + (, uint256 abafAtBlockFrom) = _erc20VotesStorage().abafCheckpoints.checkpointsLookup(_fromBlock); + (, uint256 abafAtBlockTo) = _erc20VotesStorage().abafCheckpoints.checkpointsLookup(_toBlock); + assert(abafAtBlockFrom <= abafAtBlockTo); - if (abafAtBlockFrom == 0 || abafAtBlockTo == 0) return 1; + if (abafAtBlockFrom == 0) return 1; return abafAtBlockTo / abafAtBlockFrom; } - function _isActivated() internal view returns (bool) { + function _isActivated() internal view override returns (bool) { return _erc20VotesStorage().activated; } - function _add(uint256 a, uint256 b) internal pure returns (uint256) { + function _isERC20VotesInitialized() internal view override returns (bool) { + return _erc20VotesStorage().initialized; + } + + function _add(uint256 a, uint256 b) internal pure override returns (uint256) { return a + b; } - function _subtract(uint256 a, uint256 b) internal pure returns (uint256) { + function _subtract(uint256 a, uint256 b) internal pure override returns (uint256) { return a - b; } diff --git a/packages/ats/contracts/contracts/layer_0/ERC3643/ERC3643StorageWrapper1.sol b/packages/ats/contracts/contracts/layer_0/ERC3643/ERC3643StorageWrapper1.sol index 1a7747d80..a2572c2e4 100644 --- a/packages/ats/contracts/contracts/layer_0/ERC3643/ERC3643StorageWrapper1.sol +++ b/packages/ats/contracts/contracts/layer_0/ERC3643/ERC3643StorageWrapper1.sol @@ -1,47 +1,44 @@ // SPDX-License-Identifier: Apache-2.0 pragma solidity >=0.8.0 <0.9.0; -import { _ERC3643_STORAGE_POSITION, _RESOLVER_PROXY_STORAGE_POSITION } from "../constants/storagePositions.sol"; +import { _ERC3643_STORAGE_POSITION } from "../constants/storagePositions.sol"; import { _AGENT_ROLE } from "../constants/roles.sol"; import { IERC3643Management } from "../../layer_1/interfaces/ERC3643/IERC3643Management.sol"; import { IAccessControl } from "../../layer_1/interfaces/accessControl/IAccessControl.sol"; import { IERC3643StorageWrapper } from "../../layer_1/interfaces/ERC3643/IERC3643StorageWrapper.sol"; import { IIdentityRegistry } from "../../layer_1/interfaces/ERC3643/IIdentityRegistry.sol"; -import { ResolverProxyUnstructured } from "../../resolver/resolverProxy/unstructured/ResolverProxyUnstructured.sol"; -import { _ERC3643_STORAGE_POSITION, _RESOLVER_PROXY_STORAGE_POSITION } from "../constants/storagePositions.sol"; import { ICompliance } from "../../layer_1/interfaces/ERC3643/ICompliance.sol"; import { LowLevelCall } from "../common/libraries/LowLevelCall.sol"; import { ProceedRecipientsStorageWrapper } from "../proceedRecipients/ProceedRecipientsStorageWrapper.sol"; import { Strings } from "@openzeppelin/contracts/utils/Strings.sol"; -import { _AGENT_ROLE } from "../constants/roles.sol"; abstract contract ERC3643StorageWrapper1 is IERC3643StorageWrapper, ProceedRecipientsStorageWrapper { using LowLevelCall for address; - modifier onlyUnrecoveredAddress(address _account) { + modifier onlyUnrecoveredAddress(address _account) override { _checkRecoveredAddress(_account); _; } - modifier onlyValidInputAmountsArrayLength(address[] memory _addresses, uint256[] memory _amounts) { + modifier onlyValidInputAmountsArrayLength(address[] memory _addresses, uint256[] memory _amounts) override { _checkInputAmountsArrayLength(_addresses, _amounts); _; } - modifier onlyValidInputBoolArrayLength(address[] memory _addresses, bool[] memory _status) { + modifier onlyValidInputBoolArrayLength(address[] memory _addresses, bool[] memory _status) override { _checkInputBoolArrayLength(_addresses, _status); _; } // solhint-disable-next-line func-name-mixedcase - function _initialize_ERC3643(address _compliance, address _identityRegistry) internal { + function _initialize_ERC3643(address _compliance, address _identityRegistry) internal override { IERC3643Management.ERC3643Storage storage eRC3643Storage = _erc3643Storage(); eRC3643Storage.initialized = true; _setCompliance(_compliance); _setIdentityRegistry(_identityRegistry); } - function _setAddressFrozen(address _userAddress, bool _freezeStatus) internal { + function _setAddressFrozen(address _userAddress, bool _freezeStatus) internal override { if (_freezeStatus) { _getControlListType() ? _removeFromControlList(_userAddress) : _addToControlList(_userAddress); return; @@ -49,59 +46,65 @@ abstract contract ERC3643StorageWrapper1 is IERC3643StorageWrapper, ProceedRecip _getControlListType() ? _addToControlList(_userAddress) : _removeFromControlList(_userAddress); } - function _addAgent(address _agent) internal { + function _addAgent(address _agent) internal override { if (!_grantRole(_AGENT_ROLE, _agent)) { revert IAccessControl.AccountAssignedToRole(_AGENT_ROLE, _agent); } + emit IERC3643Management.AgentAdded(_agent); } - function _removeAgent(address _agent) internal { + function _removeAgent(address _agent) internal override { if (!_revokeRole(_AGENT_ROLE, _agent)) { revert IAccessControl.AccountNotAssignedToRole(_AGENT_ROLE, _agent); } + emit IERC3643Management.AgentRemoved(_agent); } - function _setCompliance(address _compliance) internal { + function _setCompliance(address _compliance) internal override { _erc3643Storage().compliance = _compliance; emit ComplianceAdded(_compliance); } - function _setIdentityRegistry(address _identityRegistry) internal { + function _setIdentityRegistry(address _identityRegistry) internal override { _erc3643Storage().identityRegistry = _identityRegistry; + emit IERC3643Management.IdentityRegistryAdded(_identityRegistry); } - function _getFrozenAmountFor(address _userAddress) internal view returns (uint256) { + function _getFrozenAmountFor(address _userAddress) internal view override returns (uint256) { IERC3643Management.ERC3643Storage storage st = _erc3643Storage(); return st.frozenTokens[_userAddress]; } - function _getFrozenAmountForByPartition(bytes32 _partition, address _userAddress) internal view returns (uint256) { + function _getFrozenAmountForByPartition( + bytes32 _partition, + address _userAddress + ) internal view override returns (uint256) { IERC3643Management.ERC3643Storage storage st = _erc3643Storage(); return st.frozenTokensByPartition[_userAddress][_partition]; } - function _checkRecoveredAddress(address _sender) internal view { + function _checkRecoveredAddress(address _sender) internal view override { if (_isRecovered(_sender)) revert IERC3643Management.WalletRecovered(); } - function _isRecovered(address _sender) internal view returns (bool) { + function _isRecovered(address _sender) internal view override returns (bool) { return _erc3643Storage().addressRecovered[_sender]; } - function _version() internal view returns (string memory) { + function _version() internal view override returns (string memory) { return // solhint-disable quotes string( abi.encodePacked( "{", '"Resolver": "', - Strings.toHexString(uint160(address(_resolverProxyStorage().resolver)), 20), + Strings.toHexString(uint160(address(_getBusinessLogicResolver())), 20), '", ', '"Config ID": "', - Strings.toHexString(uint256(_resolverProxyStorage().resolverProxyConfigurationId), 32), + Strings.toHexString(uint256(_getResolverProxyConfigurationId()), 32), '", ', '"Version": "', - Strings.toString(_resolverProxyStorage().version), + Strings.toString(_getResolverProxyVersion()), '"', "}" ) @@ -109,25 +112,32 @@ abstract contract ERC3643StorageWrapper1 is IERC3643StorageWrapper, ProceedRecip // solhint-enable quotes } - function _getCompliance() internal view returns (ICompliance) { + function _getCompliance() internal view override returns (ICompliance) { return ICompliance(_erc3643Storage().compliance); } - function _getIdentityRegistry() internal view returns (IIdentityRegistry) { + function _getIdentityRegistry() internal view override returns (IIdentityRegistry) { return IIdentityRegistry(_erc3643Storage().identityRegistry); } - function _getOnchainID() internal view returns (address) { + function _getOnchainID() internal view override returns (address) { return _erc3643Storage().onchainID; } - function _checkInputAmountsArrayLength(address[] memory _addresses, uint256[] memory _amounts) internal pure { + function _isERC3643Initialized() internal view override returns (bool) { + return _erc3643Storage().initialized; + } + + function _checkInputAmountsArrayLength( + address[] memory _addresses, + uint256[] memory _amounts + ) internal pure override { if (_addresses.length != _amounts.length) { revert IERC3643Management.InputAmountsArrayLengthMismatch(); } } - function _checkInputBoolArrayLength(address[] memory _addresses, bool[] memory _status) internal pure { + function _checkInputBoolArrayLength(address[] memory _addresses, bool[] memory _status) internal pure override { if (_addresses.length != _status.length) { revert IERC3643Management.InputBoolArrayLengthMismatch(); } @@ -140,16 +150,4 @@ abstract contract ERC3643StorageWrapper1 is IERC3643StorageWrapper, ProceedRecip erc3643Storage_.slot := position } } - - /** - * @dev This belongs to the ResolverProxyUnstructured contract. - * Since it is not in the common inheritance chain we redeclare it here - */ - function _resolverProxyStorage() internal pure returns (ResolverProxyUnstructured.ResolverProxyStorage storage ds) { - bytes32 position = _RESOLVER_PROXY_STORAGE_POSITION; - // solhint-disable-next-line no-inline-assembly - assembly { - ds.slot := position - } - } } diff --git a/packages/ats/contracts/contracts/layer_0/ERC3643/ERC3643StorageWrapper2.sol b/packages/ats/contracts/contracts/layer_0/ERC3643/ERC3643StorageWrapper2.sol index 7068ce330..ac93b0824 100644 --- a/packages/ats/contracts/contracts/layer_0/ERC3643/ERC3643StorageWrapper2.sol +++ b/packages/ats/contracts/contracts/layer_0/ERC3643/ERC3643StorageWrapper2.sol @@ -4,33 +4,61 @@ pragma solidity >=0.8.0 <0.9.0; import { _DEFAULT_PARTITION } from "../constants/values.sol"; import { SnapshotsStorageWrapper2 } from "../snapshots/SnapshotsStorageWrapper2.sol"; import { IERC3643Management } from "../../layer_1/interfaces/ERC3643/IERC3643Management.sol"; +import { ERC20StorageWrapper1 } from "../ERC1400/ERC20/ERC20StorageWrapper1.sol"; abstract contract ERC3643StorageWrapper2 is SnapshotsStorageWrapper2 { - modifier onlyEmptyWallet(address _tokenHolder) { + modifier onlyEmptyWallet(address _tokenHolder) override { if (!_canRecover(_tokenHolder)) revert IERC3643Management.CannotRecoverWallet(); _; } - function _setName(string calldata _name) internal returns (ERC20Storage storage erc20Storage_) { - erc20Storage_ = _erc20Storage(); + function _setName(string calldata _name) internal override { + ERC20StorageWrapper1.ERC20Storage storage erc20Storage_ = _erc20Storage(); erc20Storage_.name = _name; + emit IERC3643Management.UpdatedTokenInformation( + erc20Storage_.name, + erc20Storage_.symbol, + erc20Storage_.decimals, + _version(), + _erc3643Storage().onchainID + ); } - function _setSymbol(string calldata _symbol) internal returns (ERC20Storage storage erc20Storage_) { - erc20Storage_ = _erc20Storage(); + function _setSymbol(string calldata _symbol) internal override { + ERC20StorageWrapper1.ERC20Storage storage erc20Storage_ = _erc20Storage(); erc20Storage_.symbol = _symbol; + emit IERC3643Management.UpdatedTokenInformation( + erc20Storage_.name, + erc20Storage_.symbol, + erc20Storage_.decimals, + _version(), + _erc3643Storage().onchainID + ); + } + + function _setOnchainID(address _onchainID) internal override { + ERC20StorageWrapper1.ERC20Storage storage erc20Storage = _erc20Storage(); + _erc3643Storage().onchainID = _onchainID; + + emit IERC3643Management.UpdatedTokenInformation( + erc20Storage.name, + erc20Storage.symbol, + erc20Storage.decimals, + _version(), + _onchainID + ); } - function _freezeTokens(address _account, uint256 _amount) internal { + function _freezeTokens(address _account, uint256 _amount) internal override { _freezeTokensByPartition(_DEFAULT_PARTITION, _account, _amount); } - function _unfreezeTokens(address _account, uint256 _amount) internal { + function _unfreezeTokens(address _account, uint256 _amount) internal override { _checkUnfreezeAmount(_DEFAULT_PARTITION, _account, _amount); _unfreezeTokensByPartition(_DEFAULT_PARTITION, _account, _amount); } - function _freezeTokensByPartition(bytes32 _partition, address _account, uint256 _amount) internal { + function _freezeTokensByPartition(bytes32 _partition, address _account, uint256 _amount) internal override { _triggerAndSyncAll(_partition, _account, address(0)); _updateTotalFreeze(_partition, _account); @@ -43,7 +71,7 @@ abstract contract ERC3643StorageWrapper2 is SnapshotsStorageWrapper2 { _reduceBalanceByPartition(_account, _amount, _partition); } - function _unfreezeTokensByPartition(bytes32 _partition, address _account, uint256 _amount) internal { + function _unfreezeTokensByPartition(bytes32 _partition, address _account, uint256 _amount) internal override { _triggerAndSyncAll(_partition, _account, address(0)); _updateTotalFreeze(_partition, _account); @@ -55,7 +83,7 @@ abstract contract ERC3643StorageWrapper2 is SnapshotsStorageWrapper2 { _transferFrozenBalance(_partition, _account, _amount); } - function _updateTotalFreeze(bytes32 _partition, address _tokenHolder) internal returns (uint256 abaf_) { + function _updateTotalFreeze(bytes32 _partition, address _tokenHolder) internal override returns (uint256 abaf_) { abaf_ = _getAbaf(); uint256 labaf = _getTotalFrozenLabaf(_tokenHolder); uint256 labafByPartition = _getTotalFrozenLabafByPartition(_partition, _tokenHolder); @@ -73,12 +101,12 @@ abstract contract ERC3643StorageWrapper2 is SnapshotsStorageWrapper2 { } } - function _beforeFreeze(bytes32 _partition, address _tokenHolder) internal { + function _beforeFreeze(bytes32 _partition, address _tokenHolder) internal override { _updateAccountSnapshot(_tokenHolder, _partition); _updateAccountFrozenBalancesSnapshot(_tokenHolder, _partition); } - function _updateTotalFreezeAmountAndLabaf(address _tokenHolder, uint256 _factor, uint256 _abaf) internal { + function _updateTotalFreezeAmountAndLabaf(address _tokenHolder, uint256 _factor, uint256 _abaf) internal override { if (_factor == 1) return; _erc3643Storage().frozenTokens[_tokenHolder] *= _factor; @@ -90,14 +118,14 @@ abstract contract ERC3643StorageWrapper2 is SnapshotsStorageWrapper2 { address _tokenHolder, uint256 _factor, uint256 _abaf - ) internal { + ) internal override { if (_factor == 1) return; _erc3643Storage().frozenTokensByPartition[_tokenHolder][_partition] *= _factor; _setTotalFreezeLabafByPartition(_partition, _tokenHolder, _abaf); } - function _transferFrozenBalance(bytes32 _partition, address _to, uint256 _amount) internal { + function _transferFrozenBalance(bytes32 _partition, address _to, uint256 _amount) internal override { if (_validPartitionForReceiver(_partition, _to)) { _increaseBalanceByPartition(_to, _amount, _partition); return; @@ -105,7 +133,11 @@ abstract contract ERC3643StorageWrapper2 is SnapshotsStorageWrapper2 { _addPartitionTo(_amount, _to, _partition); } - function _recoveryAddress(address _lostWallet, address _newWallet) internal returns (bool) { + function _recoveryAddress( + address _lostWallet, + address _newWallet, + address _investorOnchainID + ) internal override returns (bool) { uint256 frozenBalance = _getFrozenAmountForAdjusted(_lostWallet); if (frozenBalance > 0) { _unfreezeTokens(_lostWallet, frozenBalance); @@ -122,12 +154,12 @@ abstract contract ERC3643StorageWrapper2 is SnapshotsStorageWrapper2 { } _erc3643Storage().addressRecovered[_lostWallet] = true; _erc3643Storage().addressRecovered[_newWallet] = false; + + emit IERC3643Management.RecoverySuccess(_lostWallet, _newWallet, _investorOnchainID); return true; } - function _getFrozenAmountForAdjusted( - address _tokenHolder - ) internal view virtual override returns (uint256 amount_) { + function _getFrozenAmountForAdjusted(address _tokenHolder) internal view override returns (uint256 amount_) { uint256 factor = _calculateFactor(_getAbafAdjusted(), _getTotalFrozenLabaf(_tokenHolder)); return _getFrozenAmountFor(_tokenHolder) * factor; @@ -136,7 +168,7 @@ abstract contract ERC3643StorageWrapper2 is SnapshotsStorageWrapper2 { function _getFrozenAmountForAdjustedAt( address _tokenHolder, uint256 _timestamp - ) internal view returns (uint256 amount_) { + ) internal view override returns (uint256 amount_) { uint256 factor = _calculateFactorForFrozenAmountByTokenHolderAdjustedAt(_tokenHolder, _timestamp); return _getFrozenAmountFor(_tokenHolder) * factor; @@ -167,7 +199,7 @@ abstract contract ERC3643StorageWrapper2 is SnapshotsStorageWrapper2 { function _getFrozenAmountForByPartitionAdjusted( bytes32 _partition, address _tokenHolder - ) internal view virtual override returns (uint256 amount_) { + ) internal view override returns (uint256 amount_) { uint256 factor = _calculateFactor( _getAbafAdjusted(), _getTotalFrozenLabafByPartition(_partition, _tokenHolder) @@ -175,7 +207,7 @@ abstract contract ERC3643StorageWrapper2 is SnapshotsStorageWrapper2 { return _getFrozenAmountForByPartition(_partition, _tokenHolder) * factor; } - function _canRecover(address _tokenHolder) internal view returns (bool isEmpty_) { + function _canRecover(address _tokenHolder) internal view override returns (bool isEmpty_) { isEmpty_ = _getLockedAmountFor(_tokenHolder) + _getHeldAmountFor(_tokenHolder) + _getClearedAmountFor(_tokenHolder) == 0; diff --git a/packages/ats/contracts/contracts/layer_0/Internals.sol b/packages/ats/contracts/contracts/layer_0/Internals.sol new file mode 100644 index 000000000..d1425868c --- /dev/null +++ b/packages/ats/contracts/contracts/layer_0/Internals.sol @@ -0,0 +1,1477 @@ +// SPDX-License-Identifier: Apache-2.0 +pragma solidity >=0.8.0 <0.9.0; + +import { Modifiers } from "./Modifiers.sol"; +import { CheckpointsLib } from "./common/libraries/CheckpointsLib.sol"; +import { IClearing } from "../layer_1/interfaces/clearing/IClearing.sol"; +import { IClearingTransfer } from "../layer_1/interfaces/clearing/IClearingTransfer.sol"; +import { IClearingRedeem } from "../layer_1/interfaces/clearing/IClearingRedeem.sol"; +import { IClearingHoldCreation } from "../layer_1/interfaces/clearing/IClearingHoldCreation.sol"; +import { ThirdPartyType } from "./common/types/ThirdPartyType.sol"; +import { Hold, HoldData, HoldIdentifier, OperationType, ProtectedHold } from "../layer_1/interfaces/hold/IHold.sol"; +import { Snapshots, PartitionSnapshots, SnapshotsAddress } from "../layer_1/interfaces/snapshots/ISnapshots.sol"; +import { ILock } from "../layer_1/interfaces/lock/ILock.sol"; +import { ISecurity } from "../layer_3/interfaces/ISecurity.sol"; +import { IBondRead } from "../layer_2/interfaces/bond/IBondRead.sol"; +import { RegulationData, AdditionalSecurityData } from "../layer_3/constants/regulation.sol"; +import { ICap } from "../layer_1/interfaces/cap/ICap.sol"; +import { IERC20 } from "../layer_1/interfaces/ERC1400/IERC20.sol"; +import { IEquity } from "../layer_2/interfaces/equity/IEquity.sol"; +import { IKpiLinkedRate } from "../layer_2/interfaces/interestRates/kpiLinkedRate/IKpiLinkedRate.sol"; +import { IKyc } from "../layer_1/interfaces/kyc/IKyc.sol"; +// prettier-ignore +// solhint-disable-next-line max-line-length +import { ISustainabilityPerformanceTargetRate } from "../layer_2/interfaces/interestRates/sustainabilityPerformanceTargetRate/ISustainabilityPerformanceTargetRate.sol"; +import { + ScheduledTask, + ScheduledTasksDataStorage +} from "../layer_2/interfaces/scheduledTasks/scheduledTasksCommon/IScheduledTasksCommon.sol"; +import { IssueData, OperatorTransferData, BasicTransferInfo } from "../layer_1/interfaces/ERC1400/IERC1410.sol"; +import { IIdentityRegistry } from "../layer_1/interfaces/ERC3643/IIdentityRegistry.sol"; +import { ICompliance } from "../layer_1/interfaces/ERC3643/ICompliance.sol"; +import { + IProtectedPartitionsStorageWrapper +} from "../layer_1/interfaces/protectedPartitions/IProtectedPartitionsStorageWrapper.sol"; +import { IBusinessLogicResolver } from "../interfaces/resolver/IBusinessLogicResolver.sol"; + +abstract contract Internals is Modifiers { + function _addAgent(address _agent) internal virtual; + function _addCorporateAction( + bytes32 _actionType, + bytes memory _data + ) internal virtual returns (bytes32 corporateActionId_, uint256 corporateActionIdByType_); + function _addExternalList(bytes32 _position, address _list) internal virtual returns (bool success_); + function _addIssuer(address _issuer) internal virtual returns (bool success_); + function _addNewTokenHolder(address tokenHolder) internal virtual; + function _addPartitionTo(uint256 _value, address _account, bytes32 _partition) internal virtual; + function _addProceedRecipient(address _proceedRecipient, bytes calldata _data) internal virtual; + function _addScheduledBalanceAdjustment(uint256 _newScheduledTimestamp, bytes memory _newData) internal virtual; + function _addScheduledCouponListing(uint256 _newScheduledTimestamp, bytes memory _newData) internal virtual; + function _addScheduledCrossOrderedTask(uint256 _newScheduledTimestamp, bytes memory _newData) internal virtual; + function _addScheduledSnapshot(uint256 _newScheduledTimestamp, bytes memory _newData) internal virtual; + function _addToControlList(address _account) internal virtual returns (bool success_); + function _addToCouponsOrderedList(uint256 _couponID) internal virtual; + function _adjustBalances(uint256 _factor, uint8 _decimals) internal virtual; + function _adjustClearingBalances( + IClearing.ClearingOperationIdentifier memory _clearingOperationIdentifier, + address _to + ) internal virtual; + function _adjustDecimals(uint8 decimals) internal virtual; + function _adjustHoldBalances(HoldIdentifier calldata _holdIdentifier, address _to) internal virtual; + function _adjustMaxSupply(uint256 factor) internal virtual; + function _adjustMaxSupplyByPartition(bytes32 partition, uint256 factor) internal virtual; + function _adjustTotalAndMaxSupplyForPartition(bytes32 _partition) internal virtual; + function _adjustTotalBalanceAndPartitionBalanceFor(bytes32 partition, address account) internal virtual; + function _adjustTotalSupply(uint256 factor) internal virtual; + function _adjustTotalSupplyByPartition(bytes32 _partition, uint256 _factor) internal virtual; + function _afterTokenTransfer(bytes32 /*partition*/, address from, address to, uint256 amount) internal virtual; + function _applyRoles( + bytes32[] calldata _roles, + bool[] calldata _actives, + address _account + ) internal virtual returns (bool success_); + function _approve(address owner, address spender, uint256 value) internal virtual returns (bool); + function _approveClearingOperationByPartition( + IClearing.ClearingOperationIdentifier calldata _clearingOperationIdentifier + ) internal virtual returns (bool success_, bytes memory operationData_, bytes32 partition_); + function _authorizeOperator(address _operator) internal virtual; + function _authorizeOperatorByPartition(bytes32 _partition, address _operator) internal virtual; + function _beforeAllowanceUpdate(address _owner, address _spender) internal virtual; + function _beforeClearingOperation( + IClearing.ClearingOperationIdentifier memory _clearingOperationIdentifier, + address _to + ) internal virtual; + function _beforeExecuteHold(HoldIdentifier calldata _holdIdentifier, address _to) internal virtual; + function _beforeFreeze(bytes32 _partition, address _tokenHolder) internal virtual; + function _beforeHold(bytes32 _partition, address _tokenHolder) internal virtual; + function _beforeReclaimHold(HoldIdentifier calldata _holdIdentifier) internal virtual; + function _beforeReleaseHold(HoldIdentifier calldata _holdIdentifier) internal virtual; + function _beforeTokenTransfer(bytes32 partition, address from, address to, uint256 amount) internal virtual; + function _burn(address from, uint256 value) internal virtual; + function _burnFrom(address account, uint256 value) internal virtual; + function _cancelClearingOperationByPartition( + IClearing.ClearingOperationIdentifier calldata _clearingOperationIdentifier + ) internal virtual returns (bool success_); + function _clearingHoldCreationCreation( + IClearing.ClearingOperation memory _clearingOperation, + address _from, + Hold calldata _hold, + bytes memory _operatorData, + ThirdPartyType _thirdPartyType + ) internal virtual returns (bool success_, uint256 clearingId_); + function _clearingRedeemCreation( + IClearing.ClearingOperation memory _clearingOperation, + uint256 _amount, + address _from, + bytes memory _operatorData, + ThirdPartyType _thirdPartyType + ) internal virtual returns (bool success_, uint256 clearingId_); + function _clearingTransferCreation( + IClearing.ClearingOperation memory _clearingOperation, + uint256 _amount, + address _to, + address _from, + bytes memory _operatorData, + ThirdPartyType _thirdPartyType + ) internal virtual returns (bool success_, uint256 clearingId_); + function _controllerRedeem( + address _tokenHolder, + uint256 _value, + bytes memory _data, + bytes memory _operatorData + ) internal virtual; + function _controllerTransfer( + address _from, + address _to, + uint256 _value, + bytes memory _data, + bytes memory _operatorData + ) internal virtual; + function _createHoldByPartition( + bytes32 _partition, + address _from, + Hold memory _hold, + bytes memory _operatorData, + ThirdPartyType _thirdPartyType + ) internal virtual returns (bool success_, uint256 holdId_); + function _decreaseAllowance(address spender, uint256 subtractedValue) internal virtual returns (bool); + function _decreaseAllowedBalance(address from, address spender, uint256 value) internal virtual; + function _decreaseAllowedBalanceForClearing( + bytes32 _partition, + uint256 _clearingId, + IClearing.ClearingOperationType _clearingOperationType, + address _from, + uint256 _amount + ) internal virtual; + function _decreaseAllowedBalanceForHold( + bytes32 _partition, + address _from, + uint256 _amount, + uint256 _holdId + ) internal virtual; + function _decreaseHeldAmount( + HoldIdentifier calldata _holdIdentifier, + uint256 _amount + ) internal virtual returns (uint256 newHoldBalance_); + function _delegate(address delegatee) internal virtual; + function _delegate(address delegator, address delegatee) internal virtual; + function _deletePartitionForHolder(address _holder, bytes32 _partition, uint256 index) internal virtual; + function _executeHoldByPartition( + HoldIdentifier calldata _holdIdentifier, + address _to, + uint256 _amount + ) internal virtual returns (bool success_, bytes32 partition_); + function _finalizeControllable() internal virtual; + function _freezeTokens(address _account, uint256 _amount) internal virtual; + function _freezeTokensByPartition(bytes32 _partition, address _account, uint256 _amount) internal virtual; + function _grantKyc( + address _account, + string memory _vcId, + uint256 _validFrom, + uint256 _validTo, + address _issuer + ) internal virtual returns (bool success_); + function _grantRole(bytes32 _role, address _account) internal virtual returns (bool success_); + function _increaseAllowance(address spender, uint256 addedValue) internal virtual returns (bool); + function _increaseAllowedBalance(address from, address spender, uint256 value) internal virtual; + function _increaseBalanceByPartition(address _from, uint256 _value, bytes32 _partition) internal virtual; + function _increaseClearedAmounts(address _tokenHolder, bytes32 _partition, uint256 _amount) internal virtual; + function _increaseTotalSupplyByPartition(bytes32 _partition, uint256 _value) internal virtual; + function _initBalanceAdjustment(bytes32 _actionId, bytes memory _data) internal virtual; + function _initCoupon(bytes32 _actionId, IBondRead.Coupon memory _newCoupon) internal virtual; + function _initDividend(bytes32 _actionId, bytes memory _data) internal virtual; + function _initVotingRights(bytes32 _actionId, bytes memory _data) internal virtual; + function _initializeSecurity( + RegulationData memory _regulationData, + AdditionalSecurityData calldata _additionalSecurityData + ) internal virtual; + // solhint-disable-next-line func-name-mixedcase + function _initialize_Cap(uint256 maxSupply, ICap.PartitionCap[] calldata partitionCap) internal virtual; + // solhint-disable-next-line func-name-mixedcase + function _initialize_ControlList(bool _isWhiteList) internal virtual; + // solhint-disable-next-line func-name-mixedcase + function _initialize_ERC1594() internal virtual; + // solhint-disable-next-line func-name-mixedcase + function _initialize_ERC20(IERC20.ERC20Metadata calldata erc20Metadata) internal virtual; + // solhint-disable-next-line func-name-mixedcase + function _initialize_ERC20Votes(bool _activated) internal virtual; + // solhint-disable-next-line func-name-mixedcase + function _initialize_ERC3643(address _compliance, address _identityRegistry) internal virtual; + // solhint-disable-next-line func-name-mixedcase + function _initialize_bond(IBondRead.BondDetailsData calldata _bondDetailsData) internal virtual; + function _setExternalListInitialized(bytes32 _position) internal virtual; + function _issue(address _tokenHolder, uint256 _value, bytes memory _data) internal virtual; + function _issueByPartition(IssueData memory _issueData) internal virtual; + function _lockByPartition( + bytes32 _partition, + uint256 _amount, + address _tokenHolder, + uint256 _expirationTimestamp + ) internal virtual returns (bool success_, uint256 lockId_); + function _mint(address to, uint256 value) internal virtual; + function _moveVotingPower(address src, address dst, uint256 amount) internal virtual; + function _onScheduledBalanceAdjustmentTriggered( + uint256 _pos, + uint256 _scheduledTasksLength, + ScheduledTask memory _scheduledTask + ) internal virtual; + function _onScheduledCouponListingTriggered( + uint256 _pos, + uint256 _scheduledTasksLength, + ScheduledTask memory _scheduledTask + ) internal virtual; + function _onScheduledCrossOrderedTaskTriggered( + uint256 _pos, + uint256 _scheduledTasksLength, + ScheduledTask memory _scheduledTask + ) internal virtual; + function _onScheduledSnapshotTriggered( + uint256 _pos, + uint256 _scheduledTasksLength, + ScheduledTask memory _scheduledTask + ) internal virtual; + function _operateHoldByPartition( + HoldIdentifier calldata _holdIdentifier, + address _to, + uint256 _amount, + OperationType _operation + ) internal virtual returns (bool success_); + function _operatorTransferByPartition( + OperatorTransferData calldata _operatorTransferData + ) internal virtual returns (bytes32); + function _permit( + address owner, + address spender, + uint256 value, + uint256 deadline, + uint8 v, + bytes32 r, + bytes32 s + ) internal virtual; + function _protectedClearingCreateHoldByPartition( + IClearing.ProtectedClearingOperation memory _protectedClearingOperation, + Hold calldata _hold, + bytes calldata _signature + ) internal virtual returns (bool success_, uint256 clearingId_); + function _protectedClearingRedeemByPartition( + IClearing.ProtectedClearingOperation calldata _protectedClearingOperation, + uint256 _amount, + bytes calldata _signature + ) internal virtual returns (bool success_, uint256 clearingId_); + function _protectedClearingTransferByPartition( + IClearing.ProtectedClearingOperation calldata _protectedClearingOperation, + uint256 _amount, + address _to, + bytes calldata _signature + ) internal virtual returns (bool success_, uint256 clearingId_); + function _protectedCreateHoldByPartition( + bytes32 _partition, + address _from, + ProtectedHold memory _protectedHold, + bytes calldata _signature + ) internal virtual returns (bool success_, uint256 holdId_); + function _protectedRedeemFromByPartition( + bytes32 _partition, + address _from, + uint256 _amount, + IProtectedPartitionsStorageWrapper.ProtectionData calldata _protectionData + ) internal virtual; + function _protectedTransferFromByPartition( + bytes32 _partition, + address _from, + address _to, + uint256 _amount, + IProtectedPartitionsStorageWrapper.ProtectionData calldata _protectionData + ) internal virtual returns (bytes32); + function _pushLabafUserPartition(address _tokenHolder, uint256 _labaf) internal virtual; + function _reclaimClearingOperationByPartition( + IClearing.ClearingOperationIdentifier calldata _clearingOperationIdentifier + ) internal virtual returns (bool success_); + function _reclaimHoldByPartition( + HoldIdentifier calldata _holdIdentifier + ) internal virtual returns (bool success_, uint256 amount_); + function _recoveryAddress( + address _lostWallet, + address _newWallet, + address _investorOnchainID + ) internal virtual returns (bool); + function _redeem(uint256 _value, bytes memory _data) internal virtual; + function _redeemByPartition( + bytes32 _partition, + address _from, + address _operator, + uint256 _value, + bytes memory _data, + bytes memory _operatorData + ) internal virtual; + function _redeemFrom(address _tokenHolder, uint256 _value, bytes memory _data) internal virtual; + function _reduceBalanceByPartition(address _from, uint256 _value, bytes32 _partition) internal virtual; + function _reduceTotalSupplyByPartition(bytes32 _partition, uint256 _value) internal virtual; + function _releaseByPartition( + bytes32 _partition, + uint256 _lockId, + address _tokenHolder + ) internal virtual returns (bool success_); + function _releaseHoldByPartition( + HoldIdentifier calldata _holdIdentifier, + uint256 _amount + ) internal virtual returns (bool success_); + function _removeAgent(address _agent) internal virtual; + function _removeClearing( + IClearing.ClearingOperationIdentifier memory _clearingOperationIdentifier + ) internal virtual; + function _removeExternalList(bytes32 _position, address _list) internal virtual returns (bool success_); + function _removeFromControlList(address _account) internal virtual returns (bool success_); + function _removeHold(HoldIdentifier calldata _holdIdentifier) internal virtual; + function _removeIssuer(address _issuer) internal virtual returns (bool success_); + function _removeLabafClearing( + IClearing.ClearingOperationIdentifier memory _clearingOperationIdentifier + ) internal virtual; + function _removeLabafHold(bytes32 _partition, address _tokenHolder, uint256 _holdId) internal virtual; + function _removeLabafLock(bytes32 _partition, address _tokenHolder, uint256 _lockId) internal virtual; + function _removeProceedRecipient(address _proceedRecipient) internal virtual; + function _removeProceedRecipientData(address _proceedRecipient) internal virtual; + function _removeTokenHolder(address tokenHolder) internal virtual; + function _replaceTokenHolder(address newTokenHolder, address oldTokenHolder) internal virtual; + function _revokeKyc(address _account) internal virtual returns (bool success_); + function _revokeOperator(address _operator) internal virtual; + function _revokeOperatorByPartition(bytes32 _partition, address _operator) internal virtual; + function _revokeRole(bytes32 _role, address _account) internal virtual returns (bool success_); + function _setActivate(bool _activated) internal virtual; + function _setAddressFrozen(address _userAddress, bool _freezeStatus) internal virtual; + function _setClearedLabafById( + IClearing.ClearingOperationIdentifier memory _clearingOperationIdentifier, + uint256 _labaf + ) internal virtual; + function _setClearing(bool _activated) internal virtual returns (bool success_); + function _setCompliance(address _compliance) internal virtual; + function _setCoupon( + IBondRead.Coupon memory _newCoupon + ) internal virtual returns (bytes32 corporateActionId_, uint256 couponID_); + function _setDividends( + IEquity.Dividend calldata _newDividend + ) internal virtual returns (bytes32 corporateActionId_, uint256 dividendId_); + function _setHeldLabafById( + bytes32 _partition, + address _tokenHolder, + uint256 _lockId, + uint256 _labaf + ) internal virtual; + function _setIdentityRegistry(address _identityRegistry) internal virtual; + function _setImpactData(IKpiLinkedRate.ImpactData calldata _newImpactData) internal virtual; + function _setInterestRate(IKpiLinkedRate.InterestRate calldata _newInterestRate) internal virtual; + function _setInternalKyc(bool _activated) internal virtual returns (bool success_); + function _setKpiOracle(address _kpiOracle) internal virtual; + function _setLockLabafById( + bytes32 _partition, + address _tokenHolder, + uint256 _lockId, + uint256 _labaf + ) internal virtual; + function _setMaturityDate(uint256 _maturityDate) internal virtual returns (bool success_); + function _setMaxSupply(uint256 _maxSupply) internal virtual; + function _setMaxSupplyByPartition(bytes32 _partition, uint256 _maxSupply) internal virtual; + function _setNonceFor(uint256 _nounce, address _account) internal virtual; + function _setPause(bool _paused) internal virtual; + function _setProceedRecipientData(address _proceedRecipient, bytes calldata _data) internal virtual; + function _setProtectedPartitions(bool _protected) internal virtual; + function _setRate(uint256 _newRate, uint8 _newRateDecimals) internal virtual; + function _setRevocationRegistryAddress(address _revocationRegistryAddress) internal virtual returns (bool success_); + function _setSPTImpactData( + ISustainabilityPerformanceTargetRate.ImpactData calldata _newImpactData, + address _project + ) internal virtual; + function _setSPTInterestRate( + ISustainabilityPerformanceTargetRate.InterestRate calldata _newInterestRate + ) internal virtual; + function _setScheduledBalanceAdjustment( + IEquity.ScheduledBalanceAdjustment calldata _newBalanceAdjustment + ) internal virtual returns (bytes32 corporateActionId_, uint256 balanceAdjustmentID_); + function _setTotalClearedLabaf(address _tokenHolder, uint256 _labaf) internal virtual; + function _setTotalClearedLabafByPartition( + bytes32 _partition, + address _tokenHolder, + uint256 _labaf + ) internal virtual; + function _setTotalFreezeLabaf(address _tokenHolder, uint256 _labaf) internal virtual; + function _setTotalFreezeLabafByPartition(bytes32 _partition, address _tokenHolder, uint256 _labaf) internal virtual; + function _setTotalHeldLabaf(address _tokenHolder, uint256 _labaf) internal virtual; + function _setTotalHeldLabafByPartition(bytes32 _partition, address _tokenHolder, uint256 _labaf) internal virtual; + function _setTotalLockLabaf(address _tokenHolder, uint256 _labaf) internal virtual; + function _setTotalLockLabafByPartition(bytes32 _partition, address _tokenHolder, uint256 _labaf) internal virtual; + function _setVoting( + IEquity.Voting calldata _newVoting + ) internal virtual returns (bytes32 corporateActionId_, uint256 voteID_); + function _snapshot() internal virtual returns (uint256); + function _storeBondDetails(IBondRead.BondDetailsData memory _bondDetails) internal virtual; + function _storeEquityDetails(IEquity.EquityDetailsData memory _equityDetailsData) internal virtual; + function _storeRegulationData( + RegulationData memory _regulationData, + AdditionalSecurityData calldata _additionalSecurityData + ) internal virtual; + function _syncBalanceAdjustments(bytes32 _partition, address _from, address _to) internal virtual; + function _takeAbafCheckpoint() internal virtual; + function _takeSnapshot() internal virtual returns (uint256 snapshotID_); + function _transfer(address from, address to, uint256 value) internal virtual returns (bool); + function _transferByPartition( + address _from, + BasicTransferInfo memory _basicTransferInfo, + bytes32 _partition, + bytes memory _data, + address _operator, + bytes memory _operatorData + ) internal virtual returns (bytes32); + function _transferClearingBalance(bytes32 _partition, address _to, uint256 _amount) internal virtual; + function _transferFrom(address spender, address from, address to, uint256 value) internal virtual returns (bool); + function _transferFrozenBalance(bytes32 _partition, address _to, uint256 _amount) internal virtual; + function _transferHold(HoldIdentifier calldata _holdIdentifier, address _to, uint256 _amount) internal virtual; + function _triggerAndSyncAll(bytes32 _partition, address _from, address _to) internal virtual; + function _triggerScheduledBalanceAdjustments(uint256 _max) internal virtual returns (uint256); + function _triggerScheduledCouponListing(uint256 _max) internal virtual returns (uint256); + function _triggerScheduledCrossOrderedTasks(uint256 _max) internal virtual returns (uint256); + function _callTriggerPendingScheduledCrossOrderedTasks() internal virtual returns (uint256); + function _triggerScheduledSnapshots(uint256 _max) internal virtual returns (uint256); + function _triggerScheduledTasks( + ScheduledTasksDataStorage storage _scheduledTasks, + function(uint256, uint256, ScheduledTask memory) internal callBack, + uint256 _max, + uint256 _timestamp + ) internal virtual returns (uint256); + function _unfreezeTokens(address _account, uint256 _amount) internal virtual; + function _unfreezeTokensByPartition(bytes32 _partition, address _account, uint256 _amount) internal virtual; + function _updateAbaf(uint256 factor) internal virtual; + function _updateAbafSnapshot() internal virtual; + function _updateAccountClearedBalancesSnapshot(address account, bytes32 partition) internal virtual; + function _updateAccountFrozenBalancesSnapshot(address account, bytes32 partition) internal virtual; + function _updateAccountHeldBalancesSnapshot(address account, bytes32 partition) internal virtual; + function _updateAccountLockedBalancesSnapshot(address account, bytes32 partition) internal virtual; + function _updateAccountSnapshot( + Snapshots storage balanceSnapshots, + uint256 currentValue, + Snapshots storage partitionBalanceSnapshots, + PartitionSnapshots storage partitionSnapshots, + uint256 currentValueForPartition, + bytes32[] memory partitionIds + ) internal virtual; + function _updateAccountSnapshot(address account, bytes32 partition) internal virtual; + function _updateAllowanceAndLabaf(address _owner, address _spender) internal virtual; + function _updateAllowanceLabaf(address _owner, address _spender, uint256 _labaf) internal virtual; + function _updateAssetTotalSupplySnapshot() internal virtual; + function _updateClearing( + IClearing.ClearingOperationIdentifier memory _clearingOperationIdentifier, + uint256 _abaf + ) internal virtual; + function _updateClearingAmountById( + IClearing.ClearingOperationIdentifier memory _clearingOperationIdentifier, + uint256 _factor + ) internal virtual; + function _updateCorporateActionData(bytes32 _actionId, bytes memory _newData) internal virtual; + function _updateCorporateActionResult(bytes32 actionId, uint256 resultId, bytes memory newResult) internal virtual; + function _updateCouponRate( + uint256 _couponID, + IBondRead.Coupon memory _coupon, + uint256 _rate, + uint8 _rateDecimals + ) internal virtual; + function _updateDecimalsSnapshot() internal virtual; + function _updateExternalLists( + bytes32 _position, + address[] calldata _lists, + bool[] calldata _actives + ) internal virtual returns (bool success_); + function _updateHold(bytes32 _partition, uint256 _holdId, address _tokenHolder, uint256 _abaf) internal virtual; + function _updateHoldAmountById( + bytes32 _partition, + uint256 _holdId, + address _tokenHolder, + uint256 _factor + ) internal virtual; + function _updateLabafByPartition(bytes32 partition) internal virtual; + function _updateLabafByTokenHolder(uint256 labaf, address tokenHolder) internal virtual; + function _updateLabafByTokenHolderAndPartitionIndex( + uint256 labaf, + address tokenHolder, + uint256 partitionIndex + ) internal virtual; + function _updateLockAmountById( + bytes32 _partition, + uint256 _lockId, + address _tokenHolder, + uint256 _factor + ) internal virtual; + function _updateLockByIndex( + bytes32 _partition, + uint256 _lockId, + address _tokenHolder, + uint256 _abaf + ) internal virtual; + function _updateLockedBalancesBeforeLock( + bytes32 _partition, + uint256 /*_amount*/, + address _tokenHolder, + uint256 /*_expirationTimestamp*/ + ) internal virtual; + function _updateLockedBalancesBeforeRelease( + bytes32 _partition, + uint256 /*_lockId*/, + address _tokenHolder + ) internal virtual; + function _updateSnapshot(Snapshots storage snapshots, uint256 currentValue) internal virtual; + function _updateSnapshotAddress(SnapshotsAddress storage snapshots, address currentValue) internal virtual; + function _updateSnapshotPartitions( + Snapshots storage snapshots, + PartitionSnapshots storage partitionSnapshots, + uint256 currentValueForPartition, + // There is a limitation in the number of partitions an account can have, if it has to many the snapshot + // transaction will run out of gas + bytes32[] memory partitionIds + ) internal virtual; + function _updateTokenHolderSnapshot(address account) internal virtual; + function _updateTotalCleared(bytes32 _partition, address _tokenHolder) internal virtual returns (uint256 abaf_); + function _updateTotalClearedAmountAndLabaf(address _tokenHolder, uint256 _factor, uint256 _abaf) internal virtual; + function _updateTotalClearedAmountAndLabafByPartition( + bytes32 _partition, + address _tokenHolder, + uint256 _factor, + uint256 _abaf + ) internal virtual; + function _updateTotalFreeze(bytes32 _partition, address _tokenHolder) internal virtual returns (uint256 abaf_); + function _updateTotalFreezeAmountAndLabaf(address _tokenHolder, uint256 _factor, uint256 _abaf) internal virtual; + function _updateTotalFreezeAmountAndLabafByPartition( + bytes32 _partition, + address _tokenHolder, + uint256 _factor, + uint256 _abaf + ) internal virtual; + function _updateTotalHeldAmountAndLabaf(address _tokenHolder, uint256 _factor, uint256 _abaf) internal virtual; + function _updateTotalHeldAmountAndLabafByPartition( + bytes32 _partition, + address _tokenHolder, + uint256 _factor, + uint256 _abaf + ) internal virtual; + function _updateTotalHold(bytes32 _partition, address _tokenHolder) internal virtual returns (uint256 abaf_); + function _updateTotalLock(bytes32 _partition, address _tokenHolder) internal virtual returns (uint256 abaf_); + function _updateTotalLockedAmountAndLabaf(address _tokenHolder, uint256 _factor, uint256 _abaf) internal virtual; + function _updateTotalLockedAmountAndLabafByPartition( + bytes32 _partition, + address _tokenHolder, + uint256 _factor, + uint256 _abaf + ) internal virtual; + function _updateTotalSupplySnapshot(bytes32 partition) internal virtual; + function _updateTotalTokenHolderSnapshot() internal virtual; + // solhint-disable-next-line func-name-mixedcase + function _initializeClearing(bool _clearingActive) internal virtual; + // solhint-disable-next-line func-name-mixedcase + function _initialize_ProtectedPartitions(bool _protectPartition) internal virtual returns (bool success_); + // solhint-disable-next-line func-name-mixedcase + function _initializeInternalKyc(bool _internalKycActivated) internal virtual; + // solhint-disable-next-line func-name-mixedcase + function _initialize_ExternalControlLists(address[] calldata _controlLists) internal virtual; + // solhint-disable-next-line func-name-mixedcase + function _initialize_ExternalKycLists(address[] calldata _kycLists) internal virtual; + // solhint-disable-next-line func-name-mixedcase + function _initialize_ExternalPauses(address[] calldata _pauses) internal virtual; + // solhint-disable-next-line func-name-mixedcase + function _initialize_ERC1410(bool _multiPartition) internal virtual; + // solhint-disable-next-line func-name-mixedcase + function _initialize_ERC1644(bool _controllable) internal virtual; + function _setName(string calldata _name) internal virtual; + + function _setSymbol(string calldata _symbol) internal virtual; + + function _setOnchainID(address _onchainID) internal virtual; + // solhint-disable-next-line func-name-mixedcase + function _initialize_ProceedRecipients( + address[] calldata _proceedRecipients, + bytes[] calldata _data + ) internal virtual; + // solhint-disable-next-line func-name-mixedcase + function _initialize_SustainabilityPerformanceTargetRate( + ISustainabilityPerformanceTargetRate.InterestRate calldata _interestRate, + ISustainabilityPerformanceTargetRate.ImpactData[] calldata _impactData, + address[] calldata _projects + ) internal virtual; + // solhint-disable-next-line func-name-mixedcase + function _CLOCK_MODE() internal view virtual returns (string memory); + // solhint-disable-next-line func-name-mixedcase + function _DOMAIN_SEPARATOR() internal view virtual returns (bytes32); + function _abafAtSnapshot(uint256 _snapshotID) internal view virtual returns (uint256 abaf_); + function _addressValueAt( + uint256 snapshotId, + SnapshotsAddress storage snapshots + ) internal view virtual returns (bool, address); + function _allowance(address _owner, address _spender) internal view virtual returns (uint256); + function _allowanceAdjusted(address _owner, address _spender) internal view virtual returns (uint256); + function _allowanceAdjustedAt( + address _owner, + address _spender, + uint256 _timestamp + ) internal view virtual returns (uint256); + function _arePartitionsProtected() internal view virtual returns (bool); + function _balanceOf(address _tokenHolder) internal view virtual returns (uint256); + function _balanceOfAdjusted(address _tokenHolder) internal view virtual returns (uint256); + function _balanceOfAdjustedAt(address _tokenHolder, uint256 _timestamp) internal view virtual returns (uint256); + function _balanceOfAt(address _tokenHolder, uint256 _snapshotId) internal view virtual returns (uint256); + function _balanceOfAtAdjusted( + uint256 _snapshotId, + Snapshots storage _snapshots, + uint256 _currentBalanceAdjusted + ) internal view virtual returns (uint256); + function _balanceOfAtByPartition( + bytes32 _partition, + address account, + uint256 snapshotId + ) internal view virtual returns (uint256); + function _balanceOfAtSnapshot( + uint256 _snapshotID, + address _tokenHolder + ) internal view virtual returns (uint256 balance_); + function _balanceOfAtSnapshotByPartition( + bytes32 _partition, + uint256 _snapshotID, + address _tokenHolder + ) internal view virtual returns (uint256 balance_); + function _balanceOfByPartition(bytes32 _partition, address _tokenHolder) internal view virtual returns (uint256); + function _balanceOfByPartitionAdjusted( + bytes32 _partition, + address _tokenHolder + ) internal view virtual returns (uint256); + function _balanceOfByPartitionAdjustedAt( + bytes32 _partition, + address _tokenHolder, + uint256 _timestamp + ) internal view virtual returns (uint256); + function _calculateFactorBetween(uint256 _fromBlock, uint256 _toBlock) internal view virtual returns (uint256); + function _calculateFactorByAbafAndTokenHolder( + uint256 abaf, + address tokenHolder + ) internal view virtual returns (uint256 factor); + function _calculateFactorByTokenHolderAndPartitionIndex( + uint256 abaf, + address tokenHolder, + uint256 partitionIndex + ) internal view virtual returns (uint256 factor); + function _canRecover(address _tokenHolder) internal view virtual returns (bool isEmpty_); + function _checkAnyRole(bytes32[] memory _roles, address _account) internal view virtual; + function _checkCanRedeemFromByPartition( + address _from, + bytes32 _partition, + uint256 _value, + bytes memory, + bytes memory + ) internal view virtual; + function _checkCanTransferFromByPartition( + address _from, + address _to, + bytes32 _partition, + uint256 _value, + bytes memory /*_data*/, + bytes memory /*_operatorData*/ + ) internal view virtual; + function _checkClearingCreateHoldSignature( + IClearing.ProtectedClearingOperation memory _protectedClearingOperation, + Hold memory _hold, + bytes calldata _signature + ) internal view virtual; + function _checkClearingRedeemSignature( + IClearing.ProtectedClearingOperation calldata _protectedClearingOperation, + uint256 _amount, + bytes calldata _signature + ) internal view virtual; + function _checkClearingTransferSignature( + IClearing.ProtectedClearingOperation calldata _protectedClearingOperation, + uint256 _amount, + address _to, + bytes calldata _signature + ) internal view virtual; + function _checkCompliance(address _from, address _to, bool _checkSender) internal view virtual; + function _checkControlList(address _account) internal view virtual; + function _checkCreateHoldSignature( + bytes32 _partition, + address _from, + ProtectedHold memory _protectedHold, + bytes calldata _signature + ) internal view virtual; + function _checkDefaultPartitionWithSinglePartition(bytes32 _partition) internal view virtual; + function _checkExpirationTimestamp( + IClearing.ClearingOperationIdentifier calldata _clearingOperationIdentifier, + bool _mustBeExpired + ) internal view virtual; + function _checkExpirationTimestamp(uint256 _expirationTimestamp) internal view virtual; + function _checkIdentity(address _from, address _to) internal view virtual; + function _checkNewMaxSupplyByPartition(bytes32 _partition, uint256 _newMaxSupply) internal view virtual; + function _checkOperator(bytes32 _partition, address _from) internal view virtual; + function _checkProtectedPartitions() internal view virtual; + function _checkRecoveredAddress(address _sender) internal view virtual; + function _checkRedeemSignature( + bytes32 _partition, + address _from, + uint256 _amount, + IProtectedPartitionsStorageWrapper.ProtectionData calldata _protectionData + ) internal view virtual; + function _checkRole(bytes32 _role, address _account) internal view virtual; + function _checkRoleForPartition(bytes32 partition, address account) internal view virtual; + function _checkTransferSignature( + bytes32 _partition, + address _from, + address _to, + uint256 _amount, + IProtectedPartitionsStorageWrapper.ProtectionData calldata _protectionData + ) internal view virtual; + function _checkUnProtectedPartitionsOrWildCardRole() internal view virtual; + function _checkUnpaused() internal view virtual; + function _checkValidKycStatus(IKyc.KycStatus _kycStatus, address _account) internal view virtual; + function _checkWithinMaxSupply(uint256 _amount) internal view virtual; + function _checkpoints( + address account, + uint256 pos + ) internal view virtual returns (CheckpointsLib.Checkpoint memory); + function _clearedBalanceOfAtSnapshot( + uint256 _snapshotID, + address _tokenHolder + ) internal view virtual returns (uint256 balance_); + function _clearedBalanceOfAtSnapshotByPartition( + bytes32 _partition, + uint256 _snapshotID, + address _tokenHolder + ) internal view virtual returns (uint256 balance_); + function _clock() internal view virtual returns (uint48); + function _decimals() internal view virtual returns (uint8); + function _decimalsAdjusted() internal view virtual returns (uint8); + function _decimalsAdjustedAt(uint256 _timestamp) internal view virtual returns (uint8); + function _decimalsAtSnapshot(uint256 _snapshotID) internal view virtual returns (uint8 decimals_); + function _delegates(address account) internal view virtual returns (address); + function _frozenBalanceOfAtSnapshot( + uint256 _snapshotID, + address _tokenHolder + ) internal view virtual returns (uint256 balance_); + function _frozenBalanceOfAtSnapshotByPartition( + bytes32 _partition, + uint256 _snapshotID, + address _tokenHolder + ) internal view virtual returns (uint256 balance_); + function _calculateFactorForClearedAmountByTokenHolderAdjustedAt( + address tokenHolder, + uint256 timestamp + ) internal view virtual returns (uint256 factor); + function _calculateFactorForFrozenAmountByTokenHolderAdjustedAt( + address tokenHolder, + uint256 timestamp + ) internal view virtual returns (uint256 factor); + function _calculateFactorForHeldAmountByTokenHolderAdjustedAt( + address tokenHolder, + uint256 timestamp + ) internal view virtual returns (uint256 factor); + function _calculateFactorForLockedAmountByTokenHolderAdjustedAt( + address tokenHolder, + uint256 timestamp + ) internal view virtual returns (uint256 factor); + function _getAbaf() internal view virtual returns (uint256); + function _getAbafAdjusted() internal view virtual returns (uint256); + function _getAbafAdjustedAt(uint256 _timestamp) internal view virtual returns (uint256); + function _getAllowanceLabaf(address _owner, address _spender) internal view virtual returns (uint256); + function _getBondDetails() internal view virtual returns (IBondRead.BondDetailsData memory bondDetails_); + function _getClearedAmountFor(address _tokenHolder) internal view virtual returns (uint256 amount_); + function _getClearedAmountForAdjusted(address _tokenHolder) internal view virtual returns (uint256 amount_); + function _getClearedAmountForAdjustedAt( + address _tokenHolder, + uint256 _timestamp + ) internal view virtual returns (uint256 amount_); + function _getClearedAmountForByPartition( + bytes32 _partition, + address _tokenHolder + ) internal view virtual returns (uint256 amount_); + function _getClearedAmountForByPartitionAdjusted( + bytes32 _partition, + address _tokenHolder + ) internal view virtual returns (uint256 amount_); + function _getClearingBasicInfo( + IClearing.ClearingOperationIdentifier memory _clearingOperationIdentifier + ) internal view virtual returns (IClearing.ClearingOperationBasicInfo memory clearingOperationBasicInfo_); + function _getClearingCountForByPartition( + bytes32 _partition, + address _tokenHolder, + IClearing.ClearingOperationType _clearingOperationType + ) internal view virtual returns (uint256); + function _getClearingHoldCreationForByPartition( + bytes32 _partition, + address _tokenHolder, + uint256 _clearingId + ) internal view virtual returns (IClearingHoldCreation.ClearingHoldCreationData memory clearingHoldCreationData_); + function _getClearingHoldCreationForByPartitionAdjusted( + bytes32 _partition, + address _tokenHolder, + uint256 _clearingId + ) internal view virtual returns (IClearingTransfer.ClearingHoldCreationData memory clearingHoldCreationData_); + function _getClearingLabafById( + IClearing.ClearingOperationIdentifier memory _clearingOperationIdentifier + ) internal view virtual returns (uint256); + function _getClearingLabafByPartition( + IClearing.ClearingOperationIdentifier memory _clearingOperationIdentifier + ) internal view virtual returns (uint256); + function _getClearingRedeemForByPartition( + bytes32 _partition, + address _tokenHolder, + uint256 _clearingId + ) internal view virtual returns (IClearingRedeem.ClearingRedeemData memory clearingRedeemData_); + function _getClearingRedeemForByPartitionAdjusted( + bytes32 _partition, + address _tokenHolder, + uint256 _clearingId + ) internal view virtual returns (IClearingTransfer.ClearingRedeemData memory clearingRedeemData_); + function _getClearingThirdParty( + bytes32 _partition, + address _tokenHolder, + IClearing.ClearingOperationType _operationType, + uint256 _clearingId + ) internal view virtual returns (address thirdParty_); + function _getClearingTransferForByPartition( + bytes32 _partition, + address _tokenHolder, + uint256 _clearingId + ) internal view virtual returns (IClearingTransfer.ClearingTransferData memory clearingTransferData_); + function _getClearingTransferForByPartitionAdjusted( + bytes32 _partition, + address _tokenHolder, + uint256 _clearingId + ) internal view virtual returns (IClearingTransfer.ClearingTransferData memory clearingTransferData_); + function _getClearingsIdForByPartition( + bytes32 _partition, + address _tokenHolder, + IClearing.ClearingOperationType _clearingOperationType, + uint256 _pageIndex, + uint256 _pageLength + ) internal view virtual returns (uint256[] memory clearingsId_); + function _getControlListCount() internal view virtual returns (uint256 controlListCount_); + function _getControlListMembers( + uint256 _pageIndex, + uint256 _pageLength + ) internal view virtual returns (address[] memory members_); + function _getControlListType() internal view virtual returns (bool); + function _getCorporateAction( + bytes32 _corporateActionId + ) internal view virtual returns (bytes32 actionType_, uint256 actionTypeId_, bytes memory data_); + function _getCorporateActionCount() internal view virtual returns (uint256 corporateActionCount_); + function _getCorporateActionCountByType( + bytes32 _actionType + ) internal view virtual returns (uint256 corporateActionCount_); + function _getCorporateActionData(bytes32 actionId) internal view virtual returns (bytes memory); + function _getCorporateActionIdByTypeIndex( + bytes32 _actionType, + uint256 _typeIndex + ) internal view virtual returns (bytes32 corporateActionId_); + function _getCorporateActionIds( + uint256 _pageIndex, + uint256 _pageLength + ) internal view virtual returns (bytes32[] memory corporateActionIds_); + function _getCorporateActionIdsByType( + bytes32 _actionType, + uint256 _pageIndex, + uint256 _pageLength + ) internal view virtual returns (bytes32[] memory corporateActionIds_); + function _getCorporateActionResult( + bytes32 actionId, + uint256 resultId + ) internal view virtual returns (bytes memory result_); + function _getCorporateActionResultCount(bytes32 actionId) internal view virtual returns (uint256); + function _getCoupon( + uint256 _couponID + ) internal view virtual returns (IBondRead.RegisteredCoupon memory registeredCoupon_); + function _getCouponAmountFor( + uint256 _couponID, + address _account + ) internal view virtual returns (IBondRead.CouponAmountFor memory couponAmountFor_); + function _getCouponCount() internal view virtual returns (uint256 couponCount_); + function _getCouponFor( + uint256 _couponID, + address _account + ) internal view virtual returns (IBondRead.CouponFor memory couponFor_); + function _getCouponFromOrderedListAt(uint256 _pos) internal view virtual returns (uint256 couponID_); + function _getCouponHolders( + uint256 _couponID, + uint256 _pageIndex, + uint256 _pageLength + ) internal view virtual returns (address[] memory holders_); + function _getCouponsOrderedList( + uint256 _pageIndex, + uint256 _pageLength + ) internal view virtual returns (uint256[] memory couponIDs_); + function _getCouponsOrderedListTotal() internal view virtual returns (uint256 total_); + function _getCouponsOrderedListTotalAdjusted() internal view virtual returns (uint256 total_); + function _getCurrentSnapshotId() internal view virtual returns (uint256); + function _getDividendAmountFor( + uint256 _dividendID, + address _account + ) internal view virtual returns (IEquity.DividendAmountFor memory dividendAmountFor_); + function _getDividendHolders( + uint256 _dividendID, + uint256 _pageIndex, + uint256 _pageLength + ) internal view virtual returns (address[] memory holders_); + function _getDividends( + uint256 _dividendID + ) internal view virtual returns (IEquity.RegisteredDividend memory registeredDividend_); + function _getDividendsCount() internal view virtual returns (uint256 dividendCount_); + function _getDividendsFor( + uint256 _dividendID, + address _account + ) internal view virtual returns (IEquity.DividendFor memory dividendFor_); + function _getERC20Metadata() internal view virtual returns (IERC20.ERC20Metadata memory erc20Metadata_); + function _getName() internal view virtual returns (string memory); + function _getERC20MetadataAdjusted() internal view virtual returns (IERC20.ERC20Metadata memory erc20Metadata_); + function _getERC20MetadataAdjustedAt( + uint256 _timestamp + ) internal view virtual returns (IERC20.ERC20Metadata memory erc20Metadata_); + function _getEquityDetails() internal view virtual returns (IEquity.EquityDetailsData memory equityDetails_); + function _getExternalListsCount(bytes32 _position) internal view virtual returns (uint256 count_); + function _getExternalListsMembers( + bytes32 _position, + uint256 _pageIndex, + uint256 _pageLength + ) internal view virtual returns (address[] memory members_); + function _getFrozenAmountFor(address _userAddress) internal view virtual returns (uint256); + function _getFrozenAmountForAdjusted(address _tokenHolder) internal view virtual returns (uint256 amount_); + function _getFrozenAmountForAdjustedAt( + address _tokenHolder, + uint256 _timestamp + ) internal view virtual returns (uint256 amount_); + function _getFrozenAmountForByPartition( + bytes32 _partition, + address _userAddress + ) internal view virtual returns (uint256); + function _getFrozenAmountForByPartitionAdjusted( + bytes32 _partition, + address _tokenHolder + ) internal view virtual returns (uint256 amount_); + function _getHeldAmountFor(address _tokenHolder) internal view virtual returns (uint256 amount_); + function _getHeldAmountForAdjusted(address _tokenHolder) internal view virtual returns (uint256 amount_); + function _getHeldAmountForAdjustedAt( + address _tokenHolder, + uint256 _timestamp + ) internal view virtual returns (uint256 amount_); + function _getHeldAmountForByPartition( + bytes32 _partition, + address _tokenHolder + ) internal view virtual returns (uint256 amount_); + function _getHeldAmountForByPartitionAdjusted( + bytes32 _partition, + address _tokenHolder + ) internal view virtual returns (uint256 amount_); + function _getHold(HoldIdentifier memory _holdIdentifier) internal view virtual returns (HoldData memory); + function _getHoldCountForByPartition( + bytes32 _partition, + address _tokenHolder + ) internal view virtual returns (uint256); + function _getHoldForByPartition( + HoldIdentifier calldata _holdIdentifier + ) + internal + view + virtual + returns ( + uint256 amount_, + uint256 expirationTimestamp_, + address escrow_, + address destination_, + bytes memory data_, + bytes memory operatorData_, + ThirdPartyType thirdPartType_ + ); + function _getHoldForByPartitionAdjusted( + HoldIdentifier calldata _holdIdentifier + ) + internal + view + virtual + returns ( + uint256 amount_, + uint256 expirationTimestamp_, + address escrow_, + address destination_, + bytes memory data_, + bytes memory operatorData_, + ThirdPartyType thirdPartType_ + ); + function _getHoldLabafById( + bytes32 _partition, + address _tokenHolder, + uint256 _holdId + ) internal view virtual returns (uint256); + function _getHoldLabafByPartition( + bytes32 _partition, + uint256 _holdId, + address _tokenHolder + ) internal view virtual returns (uint256); + function _getHoldThirdParty( + HoldIdentifier calldata _holdIdentifier + ) internal view virtual returns (address thirdParty_); + function _getHoldsIdForByPartition( + bytes32 _partition, + address _tokenHolder, + uint256 _pageIndex, + uint256 _pageLength + ) internal view virtual returns (uint256[] memory holdsId_); + function _getImpactData() internal view virtual returns (IKpiLinkedRate.ImpactData memory impactData_); + function _getInterestRate() internal view virtual returns (IKpiLinkedRate.InterestRate memory interestRate_); + function _getIssuerListCount() internal view virtual returns (uint256 issuerListCount_); + function _getIssuerListMembers( + uint256 _pageIndex, + uint256 _pageLength + ) internal view virtual returns (address[] memory members_); + function _getKpiOracle() internal view virtual returns (address kpiOracle_); + function _getKycAccountsCount(IKyc.KycStatus _kycStatus) internal view virtual returns (uint256 kycAccountsCount_); + function _getKycAccountsData( + IKyc.KycStatus _kycStatus, + uint256 _pageIndex, + uint256 _pageLength + ) internal view virtual returns (address[] memory accounts_, IKyc.KycData[] memory kycData_); + function _getKycFor(address _account) internal view virtual returns (IKyc.KycData memory); + function _getKycStatusFor(address _account) internal view virtual returns (IKyc.KycStatus kycStatus_); + function _getLabafByPartition(bytes32 _partition) internal view virtual returns (uint256); + function _getLabafByUser(address _account) internal view virtual returns (uint256); + function _getLabafByUserAndPartition(bytes32 _partition, address _account) internal view virtual returns (uint256); + function _getLock( + bytes32 _partition, + address _tokenHolder, + uint256 _lockId + ) internal view virtual returns (ILock.LockData memory); + function _getLockByIndex( + bytes32 _partition, + address _tokenHolder, + uint256 _lockIndex + ) internal view virtual returns (ILock.LockData memory); + function _getLockCountForByPartition( + bytes32 _partition, + address _tokenHolder + ) internal view virtual returns (uint256 lockCount_); + function _getLockForByPartition( + bytes32 partition, + address tokenHolder, + uint256 lockId + ) internal view virtual returns (uint256 amount, uint256 expirationTimestamp); + function _getLockForByPartitionAdjusted( + bytes32 _partition, + address _tokenHolder, + uint256 _lockId + ) internal view virtual returns (uint256 amount_, uint256 expirationTimestamp_); + function _getLockLabafById( + bytes32 _partition, + address _tokenHolder, + uint256 _lockId + ) internal view virtual returns (uint256); + function _getLockedAmountFor(address _tokenHolder) internal view virtual returns (uint256 amount_); + function _getLockedAmountForAdjustedAt( + address tokenHolder, + uint256 timestamp + ) internal view virtual returns (uint256 amount_); + function _getLockedAmountForByPartition( + bytes32 _partition, + address _tokenHolder + ) internal view virtual returns (uint256); + function _getLockedAmountForByPartitionAdjusted( + bytes32 _partition, + address _tokenHolder + ) internal view virtual returns (uint256 amount_); + function _getLocksIdForByPartition( + bytes32 _partition, + address _tokenHolder, + uint256 _pageIndex, + uint256 _pageLength + ) internal view virtual returns (uint256[] memory locksId_); + function _getMaturityDate() internal view virtual returns (uint256 maturityDate_); + function _getMaxSupply() internal view virtual returns (uint256); + function _getMaxSupplyAdjusted() internal view virtual returns (uint256 maxSupply_); + function _getMaxSupplyAdjustedAt(uint256 timestamp) internal view virtual returns (uint256); + function _getMaxSupplyByPartition(bytes32 partition) internal view virtual returns (uint256); + function _getMaxSupplyByPartitionAdjusted(bytes32 _partition) internal view virtual returns (uint256 maxSupply_); + function _getMaxSupplyByPartitionAdjustedAt( + bytes32 partition, + uint256 timestamp + ) internal view virtual returns (uint256); + function _getNonceFor(address _account) internal view virtual returns (uint256); + function _getOnchainID() internal view virtual returns (address); + function _getPastTotalSupply(uint256 timepoint) internal view virtual returns (uint256); + function _getPastVotes(address account, uint256 timepoint) internal view virtual returns (uint256); + function _getPendingScheduledBalanceAdjustmentsAt( + uint256 _timestamp + ) internal view virtual returns (uint256 pendingABAF_, uint8 pendingDecimals_); + function _getPendingScheduledCouponListingTotalAt( + uint256 _timestamp + ) internal view virtual returns (uint256 total_); + function _getPrincipalFor( + address _account + ) internal view virtual returns (IBondRead.PrincipalFor memory principalFor_); + function _getProceedRecipientData(address _proceedRecipient) internal view virtual returns (bytes memory); + function _getProceedRecipientsCount() internal view virtual returns (uint256); + function _getRate() internal view virtual returns (uint256 rate_, uint8 decimals_); + function _getRevocationRegistryAddress() internal view virtual returns (address revocationRegistryAddress_); + function _getRoleAdmin(bytes32 _role) internal view virtual returns (bytes32); + function _getRoleCountFor(address _account) internal view virtual returns (uint256 roleCount_); + function _getRoleMemberCount(bytes32 _role) internal view virtual returns (uint256 memberCount_); + function _getRoleMembers( + bytes32 _role, + uint256 _pageIndex, + uint256 _pageLength + ) internal view virtual returns (address[] memory members_); + function _getRolesFor( + address _account, + uint256 _pageIndex, + uint256 _pageLength + ) internal view virtual returns (bytes32[] memory roles_); + function _indexFor(uint256 snapshotId, uint256[] storage ids) internal view virtual returns (bool, uint256); + function _getSPTImpactDataFor( + address _project + ) internal view virtual returns (ISustainabilityPerformanceTargetRate.ImpactData memory impactData_); + function _getSPTInterestRate() + internal + view + virtual + returns (ISustainabilityPerformanceTargetRate.InterestRate memory interestRate_); + function _getScheduledBalanceAdjustment( + uint256 _balanceAdjustmentID + ) internal view virtual returns (IEquity.ScheduledBalanceAdjustment memory balanceAdjustment_); + function _getScheduledBalanceAdjustmentCount() internal view virtual returns (uint256); + function _getScheduledBalanceAdjustments( + uint256 _pageIndex, + uint256 _pageLength + ) internal view virtual returns (ScheduledTask[] memory scheduledBalanceAdjustment_); + function _getScheduledBalanceAdjustmentsCount() internal view virtual returns (uint256 balanceAdjustmentCount_); + function _getScheduledCouponListing( + uint256 _pageIndex, + uint256 _pageLength + ) internal view virtual returns (ScheduledTask[] memory scheduledCouponListing_); + function _getScheduledCouponListingCount() internal view virtual returns (uint256); + function _getScheduledCouponListingIdAtIndex(uint256 _index) internal view virtual returns (uint256 couponID_); + function _getScheduledCrossOrderedTaskCount() internal view virtual returns (uint256); + function _getScheduledCrossOrderedTasks( + uint256 _pageIndex, + uint256 _pageLength + ) internal view virtual returns (ScheduledTask[] memory scheduledTask_); + function _getScheduledSnapshotCount() internal view virtual returns (uint256); + function _getScheduledSnapshots( + uint256 _pageIndex, + uint256 _pageLength + ) internal view virtual returns (ScheduledTask[] memory scheduledSnapshot_); + function _getSnapshotBalanceForIfDateReached( + uint256 _date, + uint256 _snapshotId, + address _account + ) internal view virtual returns (uint256 balance_, uint8 decimals_, bool dateReached_); + function _getTokenHolder(uint256 _index) internal view virtual returns (address); + function _getTokenHolderIndex(address _tokenHolder) internal view virtual returns (uint256); + function _getTokenHolders( + uint256 _pageIndex, + uint256 _pageLength + ) internal view virtual returns (address[] memory holders_); + function _getTotalBalance(address _tokenHolder) internal view virtual returns (uint256 totalBalance); + function _getTotalBalanceForAdjustedAt( + address _tokenHolder, + uint256 _timestamp + ) internal view virtual returns (uint256 totalBalance); + function _getTotalBalanceForByPartitionAdjusted( + bytes32 _partition, + address _tokenHolder + ) internal view virtual returns (uint256); + function _getTotalBalanceOfAtSnapshot( + uint256 _snapshotId, + address _tokenHolder + ) internal view virtual returns (uint256); + function _getTotalBalanceOfAtSnapshotByPartition( + bytes32 _partition, + uint256 _snapshotId, + address _tokenHolder + ) internal view virtual returns (uint256); + function _getTotalClearedLabaf(address _tokenHolder) internal view virtual returns (uint256 labaf_); + function _getTotalClearedLabafByPartition( + bytes32 _partition, + address _tokenHolder + ) internal view virtual returns (uint256 labaf_); + function _getTotalCouponHolders(uint256 _couponID) internal view virtual returns (uint256); + function _getTotalDividendHolders(uint256 _dividendID) internal view virtual returns (uint256); + function _getTotalFrozenLabaf(address _tokenHolder) internal view virtual returns (uint256 labaf_); + function _getTotalFrozenLabafByPartition( + bytes32 _partition, + address _tokenHolder + ) internal view virtual returns (uint256 labaf_); + function _getTotalHeldLabaf(address _tokenHolder) internal view virtual returns (uint256 labaf_); + function _getTotalHeldLabafByPartition( + bytes32 _partition, + address _tokenHolder + ) internal view virtual returns (uint256 labaf_); + function _getTotalLockLabaf(address _tokenHolder) internal view virtual returns (uint256 labaf_); + function _getTotalLockLabafByPartition( + bytes32 _partition, + address _tokenHolder + ) internal view virtual returns (uint256 labaf_); + function _getTotalTokenHolders() internal view virtual returns (uint256); + function _getTotalVotingHolders(uint256 _voteID) internal view virtual returns (uint256); + function _getUintResultAt(bytes32 _actionId, uint256 resultId) internal view virtual returns (uint256); + function _actionContentHashExists(bytes32 _contentHash) internal view virtual returns (bool); + function _getVotes(address account) internal view virtual returns (uint256); + function _getVotesAdjusted( + uint256 timepoint, + CheckpointsLib.Checkpoint[] storage ckpts + ) internal view virtual returns (uint256); + function _getVoting( + uint256 _voteID + ) internal view virtual returns (IEquity.RegisteredVoting memory registeredVoting_); + function _getVotingCount() internal view virtual returns (uint256 votingCount_); + function _getVotingFor( + uint256 _voteID, + address _account + ) internal view virtual returns (IEquity.VotingFor memory votingFor_); + function _getVotingHolders( + uint256 _voteID, + uint256 _pageIndex, + uint256 _pageLength + ) internal view virtual returns (address[] memory holders_); + function _hasAnyRole(bytes32[] memory _roles, address _account) internal view virtual returns (bool); + function _hasRole(bytes32 _role, address _account) internal view virtual returns (bool); + function _heldBalanceOfAtSnapshot( + uint256 _snapshotID, + address _tokenHolder + ) internal view virtual returns (uint256 balance_); + function _heldBalanceOfAtSnapshotByPartition( + bytes32 _partition, + uint256 _snapshotID, + address _tokenHolder + ) internal view virtual returns (uint256 balance_); + function _isAbleToAccess(address _account) internal view virtual returns (bool); + function _isAbleToRedeemFromByPartition( + address _from, + bytes32 _partition, + uint256 _value, + bytes memory /*_data*/, + bytes memory /*_operatorData*/ + ) + internal + view + virtual + returns (bool isAbleToRedeemFrom, bytes1 statusCode, bytes32 reasonCode, bytes memory details); + function _isAbleToTransferFromByPartition( + address _from, + address _to, + bytes32 _partition, + uint256 _value, + bytes memory /*_data*/, + bytes memory /*_operatorData*/ + ) + internal + view + virtual + returns (bool isAbleToTransfer, bytes1 statusCode, bytes32 reasonCode, bytes memory details); + function _isActivated() internal view virtual returns (bool); + function _isAuthorized( + bytes32 _partition, + address _operator, + address _tokenHolder + ) internal view virtual returns (bool); + function _isBondInitialized() internal view virtual returns (bool); + function _isCapInitialized() internal view virtual returns (bool); + function _isClearingActivated() internal view virtual returns (bool); + function _isClearingCreateHoldSignatureValid( + IClearing.ProtectedClearingOperation memory _protectedClearingOperation, + Hold memory _hold, + bytes calldata _signature + ) internal view virtual returns (bool); + function _isClearingIdValid( + IClearing.ClearingOperationIdentifier calldata _clearingOperationIdentifier + ) internal view virtual returns (bool); + function _isClearingInitialized() internal view virtual returns (bool); + function _isClearingRedeemSignatureValid( + IClearing.ProtectedClearingOperation calldata _protectedClearingOperation, + uint256 _amount, + bytes calldata _signature + ) internal view virtual returns (bool); + function _isClearingTransferSignatureValid( + IClearing.ProtectedClearingOperation calldata _protectedClearingOperation, + address _to, + uint256 _amount, + bytes calldata _signature + ) internal view virtual returns (bool); + function _isControlListInitialized() internal view virtual returns (bool); + function _isControllable() internal view virtual returns (bool); + function _isCreateHoldSignatureValid( + bytes32 _partition, + address _from, + ProtectedHold memory _protectedHold, + bytes calldata _signature + ) internal view virtual returns (bool); + function _isERC20Initialized() internal view virtual returns (bool); + function _isERC20VotesInitialized() internal view virtual returns (bool); + function _isExternalList(bytes32 _position, address _list) internal view virtual returns (bool); + function _isExternallyAuthorized(address _account) internal view virtual returns (bool); + function _isExternallyGranted(address _account, IKyc.KycStatus _kycStatus) internal view virtual returns (bool); + function _isExternallyPaused() internal view virtual returns (bool); + function _isHoldExpired(Hold memory _hold) internal view virtual returns (bool); + function _isHoldIdValid(HoldIdentifier memory _holdIdentifier) internal view virtual returns (bool); + function _isInControlList(address _account) internal view virtual returns (bool); + function _isInternalKycActivated() internal view virtual returns (bool); + function _isIssuable() internal view virtual returns (bool); + function _isIssuer(address _issuer) internal view virtual returns (bool); + function _isLockIdValid( + bytes32 _partition, + address _tokenHolder, + uint256 _lockId + ) internal view virtual returns (bool); + function _isLockedExpirationTimestamp( + bytes32 _partition, + address _tokenHolder, + uint256 _lockId + ) internal view virtual returns (bool); + function _isMultiPartition() internal view virtual returns (bool); + function _isOperator(address _operator, address _tokenHolder) internal view virtual returns (bool); + function _isOperatorForPartition( + bytes32 _partition, + address _operator, + address _tokenHolder + ) internal view virtual returns (bool); + function _isPaused() internal view virtual returns (bool); + function _isProceedRecipient(address _proceedRecipient) internal view virtual returns (bool); + function _isRecovered(address _sender) internal view virtual returns (bool); + function _isRedeemSignatureValid( + bytes32 _partition, + address _from, + uint256 _amount, + IProtectedPartitionsStorageWrapper.ProtectionData calldata _protectionData + ) internal view virtual returns (bool); + function _isTransferSignatureValid( + bytes32 _partition, + address _from, + address _to, + uint256 _amount, + IProtectedPartitionsStorageWrapper.ProtectionData calldata _protectionData + ) internal view virtual returns (bool); + function _lastSnapshotId(uint256[] storage ids) internal view virtual returns (uint256); + function _lockedBalanceOfAtSnapshot( + uint256 _snapshotID, + address _tokenHolder + ) internal view virtual returns (uint256 balance_); + function _lockedBalanceOfAtSnapshotByPartition( + bytes32 _partition, + uint256 _snapshotID, + address _tokenHolder + ) internal view virtual returns (uint256 balance_); + function _numCheckpoints(address account) internal view virtual returns (uint256); + function _partitionsOf(address _tokenHolder) internal view virtual returns (bytes32[] memory); + function _partitionsOfAtSnapshot( + uint256 _snapshotID, + address _tokenHolder + ) internal view virtual returns (bytes32[] memory); + function _tokenHoldersAt( + uint256 snapshotId, + uint256 _pageIndex, + uint256 _pageLength + ) internal view virtual returns (address[] memory); + function _totalSupply() internal view virtual returns (uint256); + function _totalSupplyAdjusted() internal view virtual returns (uint256); + function _totalSupplyAdjustedAt(uint256 _timestamp) internal view virtual returns (uint256); + function _totalSupplyAt(uint256 _snapshotId) internal view virtual returns (uint256); + function _totalSupplyAtSnapshot(uint256 _snapshotID) internal view virtual returns (uint256 totalSupply_); + function _totalSupplyAtSnapshotByPartition( + bytes32 _partition, + uint256 _snapshotID + ) internal view virtual returns (uint256 totalSupply_); + function _totalSupplyByPartition(bytes32 _partition) internal view virtual returns (uint256); + function _totalSupplyByPartitionAdjusted(bytes32 _partition) internal view virtual returns (uint256); + function _totalTokenHoldersAt(uint256 snapshotId) internal view virtual returns (uint256); + function _validPartition(bytes32 _partition, address _holder) internal view virtual returns (bool); + function _validPartitionForReceiver(bytes32 _partition, address _to) internal view virtual returns (bool); + function _valueAt(uint256 snapshotId, Snapshots storage snapshots) internal view virtual returns (bool, uint256); + function _verifyKycStatus(IKyc.KycStatus _kycStatus, address _account) internal view virtual returns (bool); + function _version() internal view virtual returns (string memory); + // solhint-disable-next-line func-name-mixedcase + function _isProtectedPartitionInitialized() internal view virtual returns (bool); + + function _isKycInitialized() internal view virtual returns (bool); + + function _isExternalControlListInitialized() internal view virtual returns (bool); + + function _isKycExternalInitialized() internal view virtual returns (bool); + + function _isExternalPauseInitialized() internal view virtual returns (bool); + + function _isERC3643Initialized() internal view virtual returns (bool); + + function _isERC1410Initialized() internal view virtual returns (bool); + + function _isERC1594Initialized() internal view virtual returns (bool); + + function _isERC1644Initialized() internal view virtual returns (bool); + + function _getIdentityRegistry() internal view virtual returns (IIdentityRegistry); + + function _getCompliance() internal view virtual returns (ICompliance); + + function _isProceedRecipientsInitialized() internal view virtual returns (bool); + + function _getProceedRecipients( + uint256 _pageIndex, + uint256 _pageLength + ) internal view virtual returns (address[] memory proceedRecipients_); + + function _getPreviousCouponInOrderedList( + uint256 _couponID + ) internal view virtual returns (uint256 previousCouponID_); + + function _isSustainabilityPerformanceTargetRateInitialized() internal view virtual returns (bool); + function _getBusinessLogicResolver() internal view virtual returns (IBusinessLogicResolver); + + function _getResolverProxyConfigurationId() internal view virtual returns (bytes32); + + function _getResolverProxyVersion() internal view virtual returns (uint256); + function _buildClearingHoldCreationData( + uint256 _amount, + uint256 _expirationTimestamp, + uint256 _holdExpirationTimestamp, + bytes memory _data, + bytes memory _holdData, + address _escrow, + address _to, + bytes memory _operatorData, + ThirdPartyType _operatorType + ) internal pure virtual returns (IClearing.ClearingHoldCreationData memory); + function _buildClearingOperationIdentifier( + address _from, + bytes32 _partition, + uint256 _clearingId, + IClearing.ClearingOperationType _operationType + ) internal pure virtual returns (IClearing.ClearingOperationIdentifier memory); + function _buildClearingRedeemData( + uint256 _amount, + uint256 _expirationTimestamp, + bytes memory _data, + bytes memory _operatorData, + ThirdPartyType _operatorType + ) internal pure virtual returns (IClearing.ClearingRedeemData memory); + function _buildClearingTransferData( + uint256 _amount, + uint256 _expirationTimestamp, + address _to, + bytes memory _data, + bytes memory _operatorData, + ThirdPartyType _operatorType + ) internal pure virtual returns (IClearing.ClearingTransferData memory); + function _add(uint256 a, uint256 b) internal pure virtual returns (uint256); + function _calculateFactor(uint256 _abaf, uint256 _labaf) internal pure virtual returns (uint256 factor_); + function _calculateRoleForPartition(bytes32 partition) internal pure virtual returns (bytes32 role); + function _isCorrectMaxSupply(uint256 _amount, uint256 _maxSupply) internal pure virtual returns (bool); + function _isEscrow(Hold memory _hold, address _escrow) internal pure virtual returns (bool); + function _protectedPartitionsRole(bytes32 _partition) internal pure virtual returns (bytes32); + function _subtract(uint256 a, uint256 b) internal pure virtual returns (uint256); + function _checkHoldAmount(uint256 _amount, HoldData memory holdData) internal pure virtual; + function _checkInputAmountsArrayLength( + address[] memory _addresses, + uint256[] memory _amounts + ) internal pure virtual; + function _checkInputBoolArrayLength(address[] memory _addresses, bool[] memory _status) internal pure virtual; + function _checkValidAddress(address account) internal pure virtual; + function _validateParams(bytes32 _partition, uint256 _value) internal pure virtual; + function _getSecurityRegulationData() + internal + pure + virtual + returns (ISecurity.SecurityRegulationData memory securityRegulationData_); +} diff --git a/packages/ats/contracts/contracts/layer_0/Modifiers.sol b/packages/ats/contracts/contracts/layer_0/Modifiers.sol new file mode 100644 index 000000000..b915db5be --- /dev/null +++ b/packages/ats/contracts/contracts/layer_0/Modifiers.sol @@ -0,0 +1,113 @@ +// SPDX-License-Identifier: Apache-2.0 +pragma solidity >=0.8.0 <0.9.0; + +import { LocalContext } from "./context/LocalContext.sol"; +import { IKyc } from "../layer_1/interfaces/kyc/IKyc.sol"; +import { IKpiLinkedRate } from "../layer_2/interfaces/interestRates/kpiLinkedRate/IKpiLinkedRate.sol"; +import { IClearing } from "../layer_1/interfaces/clearing/IClearing.sol"; +import { HoldIdentifier } from "../layer_1/interfaces/hold/IHold.sol"; + +abstract contract Modifiers is LocalContext { + // ===== ControlList Modifiers ===== + modifier onlyListedAllowed(address _account) virtual; + + // ===== KYC Modifiers ===== + modifier onlyValidDates(uint256 _validFrom, uint256 _validTo) virtual; + modifier onlyValidKycStatus(IKyc.KycStatus _kycStatus, address _account) virtual; + + // ===== ProceedRecipients Modifiers ===== + modifier onlyIfProceedRecipient(address _proceedRecipient) virtual; + modifier onlyIfNotProceedRecipient(address _proceedRecipient) virtual; + + // ===== ProtectedPartitions Modifiers ===== + modifier onlyProtectedPartitions() virtual; + modifier onlyValidParticipant(bytes32 _partition) virtual; + + // ===== AccessControl Modifiers ===== + modifier onlyRole(bytes32 _role) virtual; + modifier onlyRoleFor(bytes32 _role, address _account) virtual; + modifier onlySameRolesAndActivesLength(uint256 _rolesLength, uint256 _activesLength) virtual; + modifier onlyConsistentRoles(bytes32[] calldata _roles, bool[] calldata _actives) virtual; + + // ===== KpiLinkedRate Modifiers ===== + modifier checkInterestRate(IKpiLinkedRate.InterestRate calldata _newInterestRate) virtual; + modifier checkImpactData(IKpiLinkedRate.ImpactData calldata _newImpactData) virtual; + + // ===== ERC3643 Modifiers ===== + modifier onlyEmptyWallet(address _tokenHolder) virtual; + modifier onlyUnrecoveredAddress(address _account) virtual; + modifier onlyValidInputAmountsArrayLength(address[] memory _addresses, uint256[] memory _amounts) virtual; + modifier onlyValidInputBoolArrayLength(address[] memory _addresses, bool[] memory _status) virtual; + + // ===== Bond Modifiers ===== + modifier onlyAfterCurrentMaturityDate(uint256 _maturityDate) virtual; + + // ===== CorporateActions Modifiers ===== + modifier validateDates(uint256 _firstDate, uint256 _secondDate) virtual; + modifier onlyMatchingActionType(bytes32 _actionType, uint256 _index) virtual; + + // ===== Pause Modifiers ===== + modifier onlyUnpaused() virtual; + modifier onlyPaused() virtual; + + // ===== ERC1410 Modifiers ===== + modifier validateAddress(address account) virtual; + modifier onlyDefaultPartitionWithSinglePartition(bytes32 partition) virtual; + + // ===== Common Modifiers ===== + modifier onlyUnProtectedPartitionsOrWildCardRole() virtual; + modifier onlyClearingDisabled() virtual; + modifier onlyUninitialized(bool _initialized) virtual; + + // ===== ScheduledTasks Modifiers ===== + modifier onlyValidTimestamp(uint256 _timestamp) virtual; + + // ===== Cap Modifiers ===== + modifier onlyValidNewMaxSupply(uint256 _newMaxSupply) virtual; + modifier onlyValidNewMaxSupplyByPartition(bytes32 _partition, uint256 _newMaxSupply) virtual; + modifier onlyWithinMaxSupply(uint256 _amount) virtual; + modifier onlyWithinMaxSupplyByPartition(bytes32 _partition, uint256 _amount) virtual; + + modifier onlyWithValidExpirationTimestamp(uint256 _expirationTimestamp) virtual; + modifier onlyClearingActivated() virtual; + modifier onlyWithValidClearingId(IClearing.ClearingOperationIdentifier calldata _clearingOperationIdentifier) + virtual; + modifier validateExpirationTimestamp( + IClearing.ClearingOperationIdentifier calldata _clearingOperationIdentifier, + bool _mustBeExpired + ) virtual; + + // ===== ERC1594 Modifiers ===== + modifier onlyIdentified(address _from, address _to) virtual; + modifier onlyCompliant(address _from, address _to, bool _checkSender) virtual; + modifier onlyCanTransferFromByPartition( + address _from, + address _to, + bytes32 _partition, + uint256 _value, + bytes memory, + bytes memory + ) virtual; + modifier onlyCanRedeemFromByPartition(address _from, bytes32 _partition, uint256 _value, bytes memory, bytes memory) + virtual; + modifier onlyWithoutMultiPartition() virtual; + + // ===== ERC1644 Modifiers ===== + modifier onlyControllable() virtual; + + // ===== SSI Modifiers ===== + modifier onlyIssuerListed(address _issuer) virtual; + + // ===== ERC1410 Operator Modifiers ===== + modifier onlyOperator(bytes32 _partition, address _from) virtual; + + // ===== Lock Modifiers ===== + modifier onlyWithLockedExpirationTimestamp(bytes32 _partition, address _tokenHolder, uint256 _lockId) virtual; + modifier onlyWithValidLockId(bytes32 _partition, address _tokenHolder, uint256 _lockId) virtual; + + // ===== Hold Modifiers ===== + modifier onlyWithValidHoldId(HoldIdentifier calldata _holdIdentifier) virtual; + + // ===== AdjustBalances Modifiers ===== + modifier validateFactor(uint256 _factor) virtual; +} diff --git a/packages/ats/contracts/contracts/layer_0/adjustBalances/AdjustBalancesStorageWrapper1.sol b/packages/ats/contracts/contracts/layer_0/adjustBalances/AdjustBalancesStorageWrapper1.sol index 1c165a415..ca1301c03 100644 --- a/packages/ats/contracts/contracts/layer_0/adjustBalances/AdjustBalancesStorageWrapper1.sol +++ b/packages/ats/contracts/contracts/layer_0/adjustBalances/AdjustBalancesStorageWrapper1.sol @@ -43,37 +43,39 @@ abstract contract AdjustBalancesStorageWrapper1 is mapping(address => mapping(bytes32 => uint256)) labafFrozenAmountByAccountAndPartition; } - modifier validateFactor(uint256 _factor) { + modifier validateFactor(uint256 _factor) override { _checkFactor(_factor); _; } - function _updateAbaf(uint256 factor) internal { + function _updateAbaf(uint256 factor) internal override { _adjustBalancesStorage().abaf = _calculateNewAbaf(_getAbaf(), factor); } - function _updateLabafByPartition(bytes32 partition) internal { + function _updateLabafByPartition(bytes32 partition) internal override { AdjustBalancesStorage storage adjustBalancesStorage = _adjustBalancesStorage(); adjustBalancesStorage.labafByPartition[partition] = adjustBalancesStorage.abaf; } - function _updateLabafByTokenHolder(uint256 labaf, address tokenHolder) internal { + function _updateLabafByTokenHolder(uint256 labaf, address tokenHolder) internal override { _adjustBalancesStorage().labaf[tokenHolder] = labaf; } - function _pushLabafUserPartition(address _tokenHolder, uint256 _labaf) internal { + function _pushLabafUserPartition(address _tokenHolder, uint256 _labaf) internal override { _adjustBalancesStorage().labafUserPartition[_tokenHolder].push(_labaf); } - function _removeLabafHold(bytes32 _partition, address _tokenHolder, uint256 _holdId) internal { + function _removeLabafHold(bytes32 _partition, address _tokenHolder, uint256 _holdId) internal override { delete _adjustBalancesStorage().labafHeldAmountByAccountPartitionAndId[_tokenHolder][_partition][_holdId]; } - function _removeLabafLock(bytes32 _partition, address _tokenHolder, uint256 _lockId) internal { + function _removeLabafLock(bytes32 _partition, address _tokenHolder, uint256 _lockId) internal override { delete _adjustBalancesStorage().labafLockedAmountByAccountPartitionAndId[_tokenHolder][_partition][_lockId]; } - function _removeLabafClearing(IClearing.ClearingOperationIdentifier memory _clearingOperationIdentifier) internal { + function _removeLabafClearing( + IClearing.ClearingOperationIdentifier memory _clearingOperationIdentifier + ) internal override { delete _adjustBalancesStorage().labafClearedAmountByAccountPartitionTypeAndId[ _clearingOperationIdentifier.tokenHolder ][_clearingOperationIdentifier.partition][_clearingOperationIdentifier.clearingOperationType][ @@ -81,34 +83,48 @@ abstract contract AdjustBalancesStorageWrapper1 is ]; } - function _setLockLabafById(bytes32 _partition, address _tokenHolder, uint256 _lockId, uint256 _labaf) internal { + function _setLockLabafById( + bytes32 _partition, + address _tokenHolder, + uint256 _lockId, + uint256 _labaf + ) internal override { _adjustBalancesStorage().labafLockedAmountByAccountPartitionAndId[_tokenHolder][_partition][_lockId] = _labaf; } - function _setHeldLabafById(bytes32 _partition, address _tokenHolder, uint256 _lockId, uint256 _labaf) internal { + function _setHeldLabafById( + bytes32 _partition, + address _tokenHolder, + uint256 _lockId, + uint256 _labaf + ) internal override { _adjustBalancesStorage().labafHeldAmountByAccountPartitionAndId[_tokenHolder][_partition][_lockId] = _labaf; } - function _setTotalHeldLabaf(address _tokenHolder, uint256 _labaf) internal { + function _setTotalHeldLabaf(address _tokenHolder, uint256 _labaf) internal override { _adjustBalancesStorage().labafHeldAmountByAccount[_tokenHolder] = _labaf; } - function _setTotalHeldLabafByPartition(bytes32 _partition, address _tokenHolder, uint256 _labaf) internal { + function _setTotalHeldLabafByPartition(bytes32 _partition, address _tokenHolder, uint256 _labaf) internal override { _adjustBalancesStorage().labafHeldAmountByAccountAndPartition[_tokenHolder][_partition] = _labaf; } - function _setTotalFreezeLabaf(address _tokenHolder, uint256 _labaf) internal { + function _setTotalFreezeLabaf(address _tokenHolder, uint256 _labaf) internal override { _adjustBalancesStorage().labafFrozenAmountByAccount[_tokenHolder] = _labaf; } - function _setTotalFreezeLabafByPartition(bytes32 _partition, address _tokenHolder, uint256 _labaf) internal { + function _setTotalFreezeLabafByPartition( + bytes32 _partition, + address _tokenHolder, + uint256 _labaf + ) internal override { _adjustBalancesStorage().labafFrozenAmountByAccountAndPartition[_tokenHolder][_partition] = _labaf; } function _setClearedLabafById( IClearing.ClearingOperationIdentifier memory _clearingOperationIdentifier, uint256 _labaf - ) internal { + ) internal override { _adjustBalancesStorage().labafClearedAmountByAccountPartitionTypeAndId[ _clearingOperationIdentifier.tokenHolder ][_clearingOperationIdentifier.partition][_clearingOperationIdentifier.clearingOperationType][ @@ -116,11 +132,15 @@ abstract contract AdjustBalancesStorageWrapper1 is ] = _labaf; } - function _setTotalClearedLabaf(address _tokenHolder, uint256 _labaf) internal { + function _setTotalClearedLabaf(address _tokenHolder, uint256 _labaf) internal override { _adjustBalancesStorage().labafClearedAmountByAccount[_tokenHolder] = _labaf; } - function _setTotalClearedLabafByPartition(bytes32 _partition, address _tokenHolder, uint256 _labaf) internal { + function _setTotalClearedLabafByPartition( + bytes32 _partition, + address _tokenHolder, + uint256 _labaf + ) internal override { _adjustBalancesStorage().labafClearedAmountByAccountAndPartition[_tokenHolder][_partition] = _labaf; } @@ -128,48 +148,41 @@ abstract contract AdjustBalancesStorageWrapper1 is uint256 labaf, address tokenHolder, uint256 partitionIndex - ) internal { + ) internal override { _adjustBalancesStorage().labafUserPartition[tokenHolder][partitionIndex - 1] = labaf; } - function _updateAllowanceLabaf(address _owner, address _spender, uint256 _labaf) internal { + function _updateAllowanceLabaf(address _owner, address _spender, uint256 _labaf) internal override { _adjustBalancesStorage().labafsAllowances[_owner][_spender] = _labaf; } - function _setTotalLockLabaf(address _tokenHolder, uint256 _labaf) internal { + function _setTotalLockLabaf(address _tokenHolder, uint256 _labaf) internal override { _adjustBalancesStorage().labafLockedAmountByAccount[_tokenHolder] = _labaf; } - function _setTotalLockLabafByPartition(bytes32 _partition, address _tokenHolder, uint256 _labaf) internal { + function _setTotalLockLabafByPartition(bytes32 _partition, address _tokenHolder, uint256 _labaf) internal override { _adjustBalancesStorage().labafLockedAmountByAccountAndPartition[_tokenHolder][_partition] = _labaf; } function _calculateFactorByAbafAndTokenHolder( uint256 abaf, address tokenHolder - ) internal view returns (uint256 factor) { + ) internal view override returns (uint256 factor) { factor = _calculateFactor(abaf, _adjustBalancesStorage().labaf[tokenHolder]); } - function _calculateFactorByPartitionAdjustedAt( - bytes32 partition, - uint256 timestamp - ) internal view returns (uint256) { - return _calculateFactor(_getAbafAdjustedAt(timestamp), _adjustBalancesStorage().labafByPartition[partition]); - } - function _calculateFactorByTokenHolderAndPartitionIndex( uint256 abaf, address tokenHolder, uint256 partitionIndex - ) internal view returns (uint256 factor) { + ) internal view override returns (uint256 factor) { factor = _calculateFactor(abaf, _adjustBalancesStorage().labafUserPartition[tokenHolder][partitionIndex - 1]); } function _calculateFactorForLockedAmountByTokenHolderAdjustedAt( address tokenHolder, uint256 timestamp - ) internal view returns (uint256 factor) { + ) internal view override returns (uint256 factor) { factor = _calculateFactor( _getAbafAdjustedAt(timestamp), _adjustBalancesStorage().labafLockedAmountByAccount[tokenHolder] @@ -179,7 +192,7 @@ abstract contract AdjustBalancesStorageWrapper1 is function _calculateFactorForFrozenAmountByTokenHolderAdjustedAt( address tokenHolder, uint256 timestamp - ) internal view returns (uint256 factor) { + ) internal view override returns (uint256 factor) { factor = _calculateFactor( _getAbafAdjustedAt(timestamp), _adjustBalancesStorage().labafFrozenAmountByAccount[tokenHolder] @@ -189,7 +202,7 @@ abstract contract AdjustBalancesStorageWrapper1 is function _calculateFactorForHeldAmountByTokenHolderAdjustedAt( address tokenHolder, uint256 timestamp - ) internal view returns (uint256 factor) { + ) internal view override returns (uint256 factor) { factor = _calculateFactor( _getAbafAdjustedAt(timestamp), _adjustBalancesStorage().labafHeldAmountByAccount[tokenHolder] @@ -199,48 +212,48 @@ abstract contract AdjustBalancesStorageWrapper1 is function _calculateFactorForClearedAmountByTokenHolderAdjustedAt( address tokenHolder, uint256 timestamp - ) internal view returns (uint256 factor) { + ) internal view override returns (uint256 factor) { factor = _calculateFactor( _getAbafAdjustedAt(timestamp), _adjustBalancesStorage().labafClearedAmountByAccount[tokenHolder] ); } - function _getAbaf() internal view returns (uint256) { + function _getAbaf() internal view override returns (uint256) { return _adjustBalancesStorage().abaf; } - function _getAbafAdjusted() internal view returns (uint256) { + function _getAbafAdjusted() internal view override returns (uint256) { return _getAbafAdjustedAt(_blockTimestamp()); } - function _getAbafAdjustedAt(uint256 _timestamp) internal view returns (uint256) { + function _getAbafAdjustedAt(uint256 _timestamp) internal view override returns (uint256) { uint256 abaf = _getAbaf(); if (abaf == 0) abaf = 1; (uint256 pendingAbaf, ) = _getPendingScheduledBalanceAdjustmentsAt(_timestamp); return abaf * pendingAbaf; } - function _getLabafByUser(address _account) internal view returns (uint256) { + function _getLabafByUser(address _account) internal view override returns (uint256) { return _adjustBalancesStorage().labaf[_account]; } - function _getLabafByPartition(bytes32 _partition) internal view returns (uint256) { + function _getLabafByPartition(bytes32 _partition) internal view override returns (uint256) { return _adjustBalancesStorage().labafByPartition[_partition]; } - function _getAllowanceLabaf(address _owner, address _spender) internal view returns (uint256) { + function _getAllowanceLabaf(address _owner, address _spender) internal view override returns (uint256) { return _adjustBalancesStorage().labafsAllowances[_owner][_spender]; } - function _getTotalLockLabaf(address _tokenHolder) internal view returns (uint256 labaf_) { + function _getTotalLockLabaf(address _tokenHolder) internal view override returns (uint256 labaf_) { return _adjustBalancesStorage().labafLockedAmountByAccount[_tokenHolder]; } function _getTotalLockLabafByPartition( bytes32 _partition, address _tokenHolder - ) internal view returns (uint256 labaf_) { + ) internal view override returns (uint256 labaf_) { return _adjustBalancesStorage().labafLockedAmountByAccountAndPartition[_tokenHolder][_partition]; } @@ -248,29 +261,29 @@ abstract contract AdjustBalancesStorageWrapper1 is bytes32 _partition, address _tokenHolder, uint256 _lockId - ) internal view returns (uint256) { + ) internal view override returns (uint256) { return _adjustBalancesStorage().labafLockedAmountByAccountPartitionAndId[_tokenHolder][_partition][_lockId]; } - function _getTotalHeldLabaf(address _tokenHolder) internal view returns (uint256 labaf_) { + function _getTotalHeldLabaf(address _tokenHolder) internal view override returns (uint256 labaf_) { return _adjustBalancesStorage().labafHeldAmountByAccount[_tokenHolder]; } function _getTotalHeldLabafByPartition( bytes32 _partition, address _tokenHolder - ) internal view returns (uint256 labaf_) { + ) internal view override returns (uint256 labaf_) { return _adjustBalancesStorage().labafHeldAmountByAccountAndPartition[_tokenHolder][_partition]; } - function _getTotalFrozenLabaf(address _tokenHolder) internal view returns (uint256 labaf_) { + function _getTotalFrozenLabaf(address _tokenHolder) internal view override returns (uint256 labaf_) { return _adjustBalancesStorage().labafFrozenAmountByAccount[_tokenHolder]; } function _getTotalFrozenLabafByPartition( bytes32 _partition, address _tokenHolder - ) internal view returns (uint256 labaf_) { + ) internal view override returns (uint256 labaf_) { return _adjustBalancesStorage().labafFrozenAmountByAccountAndPartition[_tokenHolder][_partition]; } @@ -278,24 +291,24 @@ abstract contract AdjustBalancesStorageWrapper1 is bytes32 _partition, address _tokenHolder, uint256 _holdId - ) internal view returns (uint256) { + ) internal view override returns (uint256) { return _adjustBalancesStorage().labafHeldAmountByAccountPartitionAndId[_tokenHolder][_partition][_holdId]; } - function _getTotalClearedLabaf(address _tokenHolder) internal view returns (uint256 labaf_) { + function _getTotalClearedLabaf(address _tokenHolder) internal view override returns (uint256 labaf_) { return _adjustBalancesStorage().labafClearedAmountByAccount[_tokenHolder]; } function _getTotalClearedLabafByPartition( bytes32 _partition, address _tokenHolder - ) internal view returns (uint256 labaf_) { + ) internal view override returns (uint256 labaf_) { return _adjustBalancesStorage().labafClearedAmountByAccountAndPartition[_tokenHolder][_partition]; } function _getClearingLabafById( IClearing.ClearingOperationIdentifier memory _clearingOperationIdentifier - ) internal view returns (uint256) { + ) internal view override returns (uint256) { return _adjustBalancesStorage().labafClearedAmountByAccountPartitionTypeAndId[ _clearingOperationIdentifier.tokenHolder @@ -304,7 +317,7 @@ abstract contract AdjustBalancesStorageWrapper1 is ]; } - function _calculateFactor(uint256 _abaf, uint256 _labaf) internal pure returns (uint256 factor_) { + function _calculateFactor(uint256 _abaf, uint256 _labaf) internal pure override returns (uint256 factor_) { if (_abaf == 0) return 1; if (_labaf == 0) return _abaf; factor_ = _abaf / _labaf; diff --git a/packages/ats/contracts/contracts/layer_0/bond/BondStorageWrapper.sol b/packages/ats/contracts/contracts/layer_0/bond/BondStorageWrapper.sol index 728023f95..c06f0218e 100644 --- a/packages/ats/contracts/contracts/layer_0/bond/BondStorageWrapper.sol +++ b/packages/ats/contracts/contracts/layer_0/bond/BondStorageWrapper.sol @@ -2,15 +2,12 @@ pragma solidity >=0.8.0 <0.9.0; import { _BOND_STORAGE_POSITION } from "../../layer_2/constants/storagePositions.sol"; -import { - COUPON_CORPORATE_ACTION_TYPE, - SNAPSHOT_RESULT_ID, - SNAPSHOT_TASK_TYPE -} from "../../layer_2/constants/values.sol"; +import { COUPON_CORPORATE_ACTION_TYPE, SNAPSHOT_RESULT_ID, SNAPSHOT_TASK_TYPE } from "../constants/values.sol"; import { IBondRead } from "../../layer_2/interfaces/bond/IBondRead.sol"; import { IBondStorageWrapper } from "../../layer_2/interfaces/bond/IBondStorageWrapper.sol"; import { EnumerableSet } from "@openzeppelin/contracts/utils/structs/EnumerableSet.sol"; import { ERC20PermitStorageWrapper } from "../ERC1400/ERC20Permit/ERC20PermitStorageWrapper.sol"; +import { LibCommon } from "../common/libraries/LibCommon.sol"; abstract contract BondStorageWrapper is IBondStorageWrapper, ERC20PermitStorageWrapper { using EnumerableSet for EnumerableSet.Bytes32Set; @@ -22,6 +19,7 @@ abstract contract BondStorageWrapper is IBondStorageWrapper, ERC20PermitStorageW uint256 maturityDate; bool initialized; uint8 nominalValueDecimals; + uint256[] couponsOrderedListByIds; } /** @@ -30,12 +28,26 @@ abstract contract BondStorageWrapper is IBondStorageWrapper, ERC20PermitStorageW * Reverts with `BondMaturityDateWrong` if the provided maturity date is less than or equal * to the current maturity date. */ - modifier onlyAfterCurrentMaturityDate(uint256 _maturityDate) { + modifier onlyAfterCurrentMaturityDate(uint256 _maturityDate) override { _checkMaturityDate(_maturityDate); _; } - function _storeBondDetails(IBondRead.BondDetailsData memory _bondDetails) internal { + // solhint-disable-next-line func-name-mixedcase + function _initialize_bond( + IBondRead.BondDetailsData calldata _bondDetailsData + ) + internal + override + validateDates(_bondDetailsData.startingDate, _bondDetailsData.maturityDate) + onlyValidTimestamp(_bondDetailsData.startingDate) + { + BondDataStorage storage bondStorage = _bondStorage(); + bondStorage.initialized = true; + _storeBondDetails(_bondDetailsData); + } + + function _storeBondDetails(IBondRead.BondDetailsData memory _bondDetails) internal override { _bondStorage().currency = _bondDetails.currency; _bondStorage().nominalValue = _bondDetails.nominalValue; _bondStorage().nominalValueDecimals = _bondDetails.nominalValueDecimals; @@ -45,23 +57,23 @@ abstract contract BondStorageWrapper is IBondStorageWrapper, ERC20PermitStorageW function _setCoupon( IBondRead.Coupon memory _newCoupon - ) internal returns (bool success_, bytes32 corporateActionId_, uint256 couponID_) { + ) internal virtual override returns (bytes32 corporateActionId_, uint256 couponID_) { bytes memory data = abi.encode(_newCoupon); - (success_, corporateActionId_, couponID_) = _addCorporateAction(COUPON_CORPORATE_ACTION_TYPE, data); + (corporateActionId_, couponID_) = _addCorporateAction(COUPON_CORPORATE_ACTION_TYPE, data); + + _initCoupon(corporateActionId_, _newCoupon); - _initCoupon(success_, corporateActionId_, data); + emit CouponSet(corporateActionId_, couponID_, _msgSender(), _newCoupon); } - function _initCoupon(bool _success, bytes32 _actionId, bytes memory _data) internal { - if (!_success) { + function _initCoupon(bytes32 _actionId, IBondRead.Coupon memory _newCoupon) internal virtual override { + if (_actionId == bytes32(0)) { revert IBondStorageWrapper.CouponCreationFailed(); } - IBondRead.Coupon memory newCoupon = abi.decode(_data, (IBondRead.Coupon)); - - _addScheduledCrossOrderedTask(newCoupon.recordDate, abi.encode(SNAPSHOT_TASK_TYPE)); - _addScheduledSnapshot(newCoupon.recordDate, abi.encode(_actionId)); + _addScheduledCrossOrderedTask(_newCoupon.recordDate, abi.encode(SNAPSHOT_TASK_TYPE)); + _addScheduledSnapshot(_newCoupon.recordDate, abi.encode(_actionId)); } /** @@ -69,12 +81,87 @@ abstract contract BondStorageWrapper is IBondStorageWrapper, ERC20PermitStorageW * @param _maturityDate The new maturity date to be set. * @return success_ True if the maturity date was set successfully. */ - function _setMaturityDate(uint256 _maturityDate) internal returns (bool success_) { + function _setMaturityDate(uint256 _maturityDate) internal override returns (bool success_) { _bondStorage().maturityDate = _maturityDate; return true; } - function _getBondDetails() internal view returns (IBondRead.BondDetailsData memory bondDetails_) { + function _addToCouponsOrderedList(uint256 _couponID) internal virtual override { + _bondStorage().couponsOrderedListByIds.push(_couponID); + } + + function _updateCouponRate( + uint256 _couponID, + IBondRead.Coupon memory _coupon, + uint256 _rate, + uint8 _rateDecimals + ) internal virtual override { + bytes32 actionId = _getCorporateActionIdByTypeIndex(COUPON_CORPORATE_ACTION_TYPE, _couponID - 1); + + _coupon.rate = _rate; + _coupon.rateDecimals = _rateDecimals; + _coupon.rateStatus = IBondRead.RateCalculationStatus.SET; + + _updateCorporateActionData(actionId, abi.encode(_coupon)); + } + + function _getCouponFromOrderedListAt(uint256 _pos) internal view override returns (uint256 couponID_) { + if (_pos >= _getCouponsOrderedListTotalAdjusted()) return 0; + + uint256 actualOrderedListLengthTotal = _getCouponsOrderedListTotal(); + + if (_pos < actualOrderedListLengthTotal) return _bondStorage().couponsOrderedListByIds[_pos]; + + uint256 pendingIndexOffset = _pos - actualOrderedListLengthTotal; + + uint256 index = _getScheduledCouponListingCount() - 1 - pendingIndexOffset; + + return _getScheduledCouponListingIdAtIndex(index); + } + + function _getCouponsOrderedList( + uint256 _pageIndex, + uint256 _pageLength + ) internal view override returns (uint256[] memory couponIDs_) { + (uint256 start, uint256 end) = LibCommon.getStartAndEnd(_pageIndex, _pageLength); + + couponIDs_ = new uint256[](LibCommon.getSize(start, end, _getCouponsOrderedListTotalAdjusted())); + + for (uint256 i = 0; i < couponIDs_.length; i++) { + couponIDs_[i] = _getCouponFromOrderedListAt(start + i); + } + } + + function _getCouponsOrderedListTotalAdjusted() internal view override returns (uint256 total_) { + return _getCouponsOrderedListTotal() + _getPendingScheduledCouponListingTotalAt(_blockTimestamp()); + } + + function _getCouponsOrderedListTotal() internal view override returns (uint256 total_) { + return _bondStorage().couponsOrderedListByIds.length; + } + + function _getPreviousCouponInOrderedList( + uint256 _couponID + ) internal view override returns (uint256 previousCouponID_) { + uint256 orderedListLength = _getCouponsOrderedListTotalAdjusted(); + + if (orderedListLength < 2) return (0); + + if (_getCouponFromOrderedListAt(0) == _couponID) return (0); + + orderedListLength--; + uint256 previousCouponId; + + for (uint256 index = 0; index < orderedListLength; index++) { + previousCouponId = _getCouponFromOrderedListAt(index); + uint256 couponId = _getCouponFromOrderedListAt(index + 1); + if (couponId == _couponID) break; + } + + return previousCouponId; + } + + function _getBondDetails() internal view override returns (IBondRead.BondDetailsData memory bondDetails_) { bondDetails_ = IBondRead.BondDetailsData({ currency: _bondStorage().currency, nominalValue: _bondStorage().nominalValue, @@ -84,14 +171,16 @@ abstract contract BondStorageWrapper is IBondStorageWrapper, ERC20PermitStorageW }); } - function _getMaturityDate() internal view returns (uint256 maturityDate_) { + function _getMaturityDate() internal view override returns (uint256 maturityDate_) { return _bondStorage().maturityDate; } - function _getCoupon(uint256 _couponID) internal view returns (IBondRead.RegisteredCoupon memory registeredCoupon_) { - bytes32 actionId = _corporateActionsStorage().actionsByType[COUPON_CORPORATE_ACTION_TYPE].at(_couponID - 1); + function _getCoupon( + uint256 _couponID + ) internal view virtual override returns (IBondRead.RegisteredCoupon memory registeredCoupon_) { + bytes32 actionId = _getCorporateActionIdByTypeIndex(COUPON_CORPORATE_ACTION_TYPE, _couponID - 1); - (, bytes memory data) = _getCorporateAction(actionId); + (, , bytes memory data) = _getCorporateAction(actionId); if (data.length > 0) { (registeredCoupon_.coupon) = abi.decode(data, (IBondRead.Coupon)); @@ -103,14 +192,10 @@ abstract contract BondStorageWrapper is IBondStorageWrapper, ERC20PermitStorageW function _getCouponFor( uint256 _couponID, address _account - ) internal view returns (IBondRead.CouponFor memory couponFor_) { + ) internal view override returns (IBondRead.CouponFor memory couponFor_) { IBondRead.RegisteredCoupon memory registeredCoupon = _getCoupon(_couponID); - couponFor_.rate = registeredCoupon.coupon.rate; - couponFor_.rateDecimals = registeredCoupon.coupon.rateDecimals; - couponFor_.recordDate = registeredCoupon.coupon.recordDate; - couponFor_.executionDate = registeredCoupon.coupon.executionDate; - couponFor_.period = registeredCoupon.coupon.period; + couponFor_.coupon = registeredCoupon.coupon; if (registeredCoupon.coupon.recordDate < _blockTimestamp()) { couponFor_.recordDateReached = true; @@ -126,7 +211,7 @@ abstract contract BondStorageWrapper is IBondStorageWrapper, ERC20PermitStorageW function _getCouponAmountFor( uint256 _couponID, address _account - ) internal view returns (IBondRead.CouponAmountFor memory couponAmountFor_) { + ) internal view override returns (IBondRead.CouponAmountFor memory couponAmountFor_) { IBondRead.CouponFor memory couponFor = _getCouponFor(_couponID, _account); if (!couponFor.recordDateReached) return couponAmountFor_; @@ -135,24 +220,24 @@ abstract contract BondStorageWrapper is IBondStorageWrapper, ERC20PermitStorageW couponAmountFor_.recordDateReached = true; - couponAmountFor_.numerator = - couponFor.tokenBalance * - bondDetails.nominalValue * - couponFor.rate * - couponFor.period; + uint256 period = couponFor.coupon.endDate - couponFor.coupon.startDate; + + couponAmountFor_.numerator = couponFor.tokenBalance * bondDetails.nominalValue * couponFor.coupon.rate * period; couponAmountFor_.denominator = - 10 ** (couponFor.decimals + bondDetails.nominalValueDecimals + couponFor.rateDecimals) * + 10 ** (couponFor.decimals + bondDetails.nominalValueDecimals + couponFor.coupon.rateDecimals) * 365 days; } - function _getPrincipalFor(address _account) internal view returns (IBondRead.PrincipalFor memory principalFor_) { + function _getPrincipalFor( + address _account + ) internal view override returns (IBondRead.PrincipalFor memory principalFor_) { IBondRead.BondDetailsData memory bondDetails = _getBondDetails(); principalFor_.numerator = _balanceOfAdjusted(_account) * bondDetails.nominalValue; principalFor_.denominator = 10 ** (_decimalsAdjusted() + bondDetails.nominalValueDecimals); } - function _getCouponCount() internal view returns (uint256 couponCount_) { + function _getCouponCount() internal view override returns (uint256 couponCount_) { return _getCorporateActionCountByType(COUPON_CORPORATE_ACTION_TYPE); } @@ -160,7 +245,7 @@ abstract contract BondStorageWrapper is IBondStorageWrapper, ERC20PermitStorageW uint256 _couponID, uint256 _pageIndex, uint256 _pageLength - ) internal view returns (address[] memory holders_) { + ) internal view override returns (address[] memory holders_) { IBondRead.RegisteredCoupon memory registeredCoupon = _getCoupon(_couponID); if (registeredCoupon.coupon.recordDate >= _blockTimestamp()) return new address[](0); @@ -171,7 +256,7 @@ abstract contract BondStorageWrapper is IBondStorageWrapper, ERC20PermitStorageW return _getTokenHolders(_pageIndex, _pageLength); } - function _getTotalCouponHolders(uint256 _couponID) internal view returns (uint256) { + function _getTotalCouponHolders(uint256 _couponID) internal view override returns (uint256) { IBondRead.RegisteredCoupon memory registeredCoupon = _getCoupon(_couponID); if (registeredCoupon.coupon.recordDate >= _blockTimestamp()) return 0; @@ -181,6 +266,10 @@ abstract contract BondStorageWrapper is IBondStorageWrapper, ERC20PermitStorageW return _getTotalTokenHolders(); } + function _isBondInitialized() internal view override returns (bool) { + return _bondStorage().initialized; + } + function _bondStorage() internal pure returns (BondDataStorage storage bondData_) { bytes32 position = _BOND_STORAGE_POSITION; // solhint-disable-next-line no-inline-assembly diff --git a/packages/ats/contracts/contracts/layer_0/cap/CapStorageWrapper1.sol b/packages/ats/contracts/contracts/layer_0/cap/CapStorageWrapper1.sol index 45d618f07..dfeb019a0 100644 --- a/packages/ats/contracts/contracts/layer_0/cap/CapStorageWrapper1.sol +++ b/packages/ats/contracts/contracts/layer_0/cap/CapStorageWrapper1.sol @@ -4,6 +4,7 @@ pragma solidity >=0.8.0 <0.9.0; import { AdjustBalancesStorageWrapper1 } from "../adjustBalances/AdjustBalancesStorageWrapper1.sol"; import { _CAP_STORAGE_POSITION } from "../constants/storagePositions.sol"; import { MAX_UINT256 } from "../constants/values.sol"; +import { ICap } from "contracts/layer_1/interfaces/cap/ICap.sol"; abstract contract CapStorageWrapper1 is AdjustBalancesStorageWrapper1 { struct CapDataStorage { @@ -12,47 +13,67 @@ abstract contract CapStorageWrapper1 is AdjustBalancesStorageWrapper1 { bool initialized; } - function _adjustMaxSupply(uint256 factor) internal { + // solhint-disable-next-line func-name-mixedcase + function _initialize_Cap(uint256 maxSupply, ICap.PartitionCap[] calldata partitionCap) internal override { + CapDataStorage storage capStorage = _capStorage(); + + capStorage.maxSupply = maxSupply; + + for (uint256 i = 0; i < partitionCap.length; i++) { + capStorage.maxSupplyByPartition[partitionCap[i].partition] = partitionCap[i].maxSupply; + } + + capStorage.initialized = true; + } + + function _adjustMaxSupply(uint256 factor) internal override { CapDataStorage storage capStorage = _capStorage(); if (capStorage.maxSupply == MAX_UINT256) return; capStorage.maxSupply *= factor; } - function _adjustMaxSupplyByPartition(bytes32 partition, uint256 factor) internal { + function _adjustMaxSupplyByPartition(bytes32 partition, uint256 factor) internal override { CapDataStorage storage capStorage = _capStorage(); if (capStorage.maxSupplyByPartition[partition] == MAX_UINT256) return; capStorage.maxSupplyByPartition[partition] *= factor; } - function _getMaxSupply() internal view returns (uint256) { + function _getMaxSupply() internal view override returns (uint256) { return _capStorage().maxSupply; } - function _getMaxSupplyByPartition(bytes32 partition) internal view returns (uint256) { + function _getMaxSupplyByPartition(bytes32 partition) internal view override returns (uint256) { return _capStorage().maxSupplyByPartition[partition]; } - function _getMaxSupplyAdjusted() internal view returns (uint256 maxSupply_) { + function _getMaxSupplyAdjusted() internal view override returns (uint256 maxSupply_) { return _getMaxSupplyAdjustedAt(_blockTimestamp()); } - function _getMaxSupplyAdjustedAt(uint256 timestamp) internal view returns (uint256) { + function _getMaxSupplyAdjustedAt(uint256 timestamp) internal view override returns (uint256) { CapDataStorage storage capStorage = _capStorage(); if (capStorage.maxSupply == MAX_UINT256) return MAX_UINT256; (uint256 pendingAbaf, ) = _getPendingScheduledBalanceAdjustmentsAt(timestamp); return capStorage.maxSupply * pendingAbaf; } - function _getMaxSupplyByPartitionAdjusted(bytes32 _partition) internal view returns (uint256 maxSupply_) { + function _getMaxSupplyByPartitionAdjusted(bytes32 _partition) internal view override returns (uint256 maxSupply_) { return _getMaxSupplyByPartitionAdjustedAt(_partition, _blockTimestamp()); } - function _getMaxSupplyByPartitionAdjustedAt(bytes32 partition, uint256 timestamp) internal view returns (uint256) { + function _getMaxSupplyByPartitionAdjustedAt( + bytes32 partition, + uint256 timestamp + ) internal view override returns (uint256) { uint256 factor = _calculateFactor(_getAbafAdjustedAt(timestamp), _getLabafByPartition(partition)); return _getMaxSupplyByPartition(partition) * factor; } - function _isCorrectMaxSupply(uint256 _amount, uint256 _maxSupply) internal pure returns (bool) { + function _isCapInitialized() internal view override returns (bool) { + return _capStorage().initialized; + } + + function _isCorrectMaxSupply(uint256 _amount, uint256 _maxSupply) internal pure override returns (bool) { return (_maxSupply == 0) || (_amount <= _maxSupply); } diff --git a/packages/ats/contracts/contracts/layer_0/cap/CapStorageWrapper2.sol b/packages/ats/contracts/contracts/layer_0/cap/CapStorageWrapper2.sol index aad75b40d..f3808fb26 100644 --- a/packages/ats/contracts/contracts/layer_0/cap/CapStorageWrapper2.sol +++ b/packages/ats/contracts/contracts/layer_0/cap/CapStorageWrapper2.sol @@ -6,40 +6,40 @@ import { LockStorageWrapper2 } from "../lock/LockStorageWrapper2.sol"; abstract contract CapStorageWrapper2 is ICapStorageWrapper, LockStorageWrapper2 { // modifiers - modifier onlyWithinMaxSupply(uint256 _amount) { + modifier onlyWithinMaxSupply(uint256 _amount) override { _checkWithinMaxSupply(_amount); _; } - modifier onlyWithinMaxSupplyByPartition(bytes32 _partition, uint256 _amount) { + modifier onlyWithinMaxSupplyByPartition(bytes32 _partition, uint256 _amount) override { _checkWithinMaxSupplyByPartition(_partition, _amount); _; } - modifier onlyValidNewMaxSupply(uint256 _newMaxSupply) { + modifier onlyValidNewMaxSupply(uint256 _newMaxSupply) override { _checkNewMaxSupply(_newMaxSupply); _; } - modifier onlyValidNewMaxSupplyByPartition(bytes32 _partition, uint256 _newMaxSupply) { + modifier onlyValidNewMaxSupplyByPartition(bytes32 _partition, uint256 _newMaxSupply) override { _checkNewMaxSupplyByPartition(_partition, _newMaxSupply); _; } // Internal - function _setMaxSupply(uint256 _maxSupply) internal { + function _setMaxSupply(uint256 _maxSupply) internal override { uint256 previousMaxSupply = _getMaxSupply(); _capStorage().maxSupply = _maxSupply; emit MaxSupplySet(_msgSender(), _maxSupply, previousMaxSupply); } - function _setMaxSupplyByPartition(bytes32 _partition, uint256 _maxSupply) internal { + function _setMaxSupplyByPartition(bytes32 _partition, uint256 _maxSupply) internal override { uint256 previousMaxSupplyByPartition = _getMaxSupplyByPartition(_partition); _capStorage().maxSupplyByPartition[_partition] = _maxSupply; emit MaxSupplyByPartitionSet(_msgSender(), _partition, _maxSupply, previousMaxSupplyByPartition); } - function _checkNewMaxSupplyByPartition(bytes32 _partition, uint256 _newMaxSupply) internal view { + function _checkNewMaxSupplyByPartition(bytes32 _partition, uint256 _newMaxSupply) internal view override { if (_newMaxSupply == 0) return; uint256 totalSupplyForPartition = _totalSupplyByPartitionAdjusted(_partition); if (totalSupplyForPartition > _newMaxSupply) { @@ -51,7 +51,7 @@ abstract contract CapStorageWrapper2 is ICapStorageWrapper, LockStorageWrapper2 } } - function _checkWithinMaxSupply(uint256 _amount) internal view { + function _checkWithinMaxSupply(uint256 _amount) internal view override { uint256 maxSupply = _getMaxSupply(); if (!_isCorrectMaxSupply(_totalSupply() + _amount, maxSupply)) { revert ICapStorageWrapper.MaxSupplyReached(maxSupply); diff --git a/packages/ats/contracts/contracts/layer_0/clearing/ClearingStorageWrapper1.sol b/packages/ats/contracts/contracts/layer_0/clearing/ClearingStorageWrapper1.sol index 3d1fe968d..11a8c2467 100644 --- a/packages/ats/contracts/contracts/layer_0/clearing/ClearingStorageWrapper1.sol +++ b/packages/ats/contracts/contracts/layer_0/clearing/ClearingStorageWrapper1.sol @@ -6,7 +6,6 @@ import { HoldStorageWrapper1 } from "../hold/HoldStorageWrapper1.sol"; import { IClearing } from "../../layer_1/interfaces/clearing/IClearing.sol"; import { IClearingTransfer } from "../../layer_1/interfaces/clearing/IClearingTransfer.sol"; import { IClearingRedeem } from "../../layer_1/interfaces/clearing/IClearingRedeem.sol"; -import { IClearing } from "../../layer_1/interfaces/clearing/IClearing.sol"; import { IClearingHoldCreation } from "../../layer_1/interfaces/clearing/IClearingHoldCreation.sol"; import { LibCommon } from "../common/libraries/LibCommon.sol"; import { EnumerableSet } from "@openzeppelin/contracts/utils/structs/EnumerableSet.sol"; @@ -16,12 +15,14 @@ abstract contract ClearingStorageWrapper1 is HoldStorageWrapper1 { using LibCommon for EnumerableSet.UintSet; using EnumerableSet for EnumerableSet.UintSet; - modifier onlyWithValidClearingId(IClearing.ClearingOperationIdentifier calldata _clearingOperationIdentifier) { + modifier onlyWithValidClearingId(IClearing.ClearingOperationIdentifier calldata _clearingOperationIdentifier) + override + { _checkClearingId(_clearingOperationIdentifier); _; } - modifier onlyClearingActivated() { + modifier onlyClearingActivated() override { _checkClearingActivated(); _; } @@ -29,19 +30,25 @@ abstract contract ClearingStorageWrapper1 is HoldStorageWrapper1 { modifier validateExpirationTimestamp( IClearing.ClearingOperationIdentifier calldata _clearingOperationIdentifier, bool _mustBeExpired - ) { + ) override { _checkExpirationTimestamp(_clearingOperationIdentifier, _mustBeExpired); _; } - function _setClearing(bool _activated) internal returns (bool success_) { + function _initializeClearing(bool _clearingActive) internal override { + IClearing.ClearingDataStorage storage clearingStorage = _clearingStorage(); + clearingStorage.initialized = true; + clearingStorage.activated = _clearingActive; + } + + function _setClearing(bool _activated) internal override returns (bool success_) { _clearingStorage().activated = _activated; success_ = true; } function _isClearingIdValid( IClearing.ClearingOperationIdentifier calldata _clearingOperationIdentifier - ) internal view returns (bool) { + ) internal view override returns (bool) { return _clearingStorage() .clearingIdsByAccountAndPartitionAndTypes[_clearingOperationIdentifier.tokenHolder][ @@ -49,7 +56,7 @@ abstract contract ClearingStorageWrapper1 is HoldStorageWrapper1 { ][_clearingOperationIdentifier.clearingOperationType].contains(_clearingOperationIdentifier.clearingId); } - function _isClearingActivated() internal view returns (bool) { + function _isClearingActivated() internal view override returns (bool) { return _clearingStorage().activated; } @@ -57,7 +64,7 @@ abstract contract ClearingStorageWrapper1 is HoldStorageWrapper1 { bytes32 _partition, address _tokenHolder, IClearing.ClearingOperationType _clearingOperationType - ) internal view returns (uint256) { + ) internal view override returns (uint256) { return _clearingStorage() .clearingIdsByAccountAndPartitionAndTypes[_tokenHolder][_partition][_clearingOperationType].length(); @@ -65,7 +72,7 @@ abstract contract ClearingStorageWrapper1 is HoldStorageWrapper1 { function _getClearingBasicInfo( IClearing.ClearingOperationIdentifier memory _clearingOperationIdentifier - ) internal view returns (IClearing.ClearingOperationBasicInfo memory clearingOperationBasicInfo_) { + ) internal view override returns (IClearing.ClearingOperationBasicInfo memory clearingOperationBasicInfo_) { if (_clearingOperationIdentifier.clearingOperationType == IClearing.ClearingOperationType.Redeem) { IClearingTransfer.ClearingRedeemData memory clearingRedeemData = _getClearingRedeemForByPartition( _clearingOperationIdentifier.partition, @@ -114,7 +121,7 @@ abstract contract ClearingStorageWrapper1 is HoldStorageWrapper1 { IClearing.ClearingOperationType _clearingOperationType, uint256 _pageIndex, uint256 _pageLength - ) internal view returns (uint256[] memory clearingsId_) { + ) internal view override returns (uint256[] memory clearingsId_) { return _clearingStorage() .clearingIdsByAccountAndPartitionAndTypes[_tokenHolder][_partition][_clearingOperationType].getFromSet( @@ -128,7 +135,7 @@ abstract contract ClearingStorageWrapper1 is HoldStorageWrapper1 { address _tokenHolder, IClearing.ClearingOperationType _operationType, uint256 _clearingId - ) internal view returns (address thirdParty_) { + ) internal view override returns (address thirdParty_) { thirdParty_ = _clearingStorage().clearingThirdPartyByAccountPartitionTypeAndId[_tokenHolder][_partition][ _operationType ][_clearingId]; @@ -138,7 +145,7 @@ abstract contract ClearingStorageWrapper1 is HoldStorageWrapper1 { bytes32 _partition, address _tokenHolder, uint256 _clearingId - ) internal view returns (IClearingTransfer.ClearingTransferData memory clearingTransferData_) { + ) internal view override returns (IClearingTransfer.ClearingTransferData memory clearingTransferData_) { clearingTransferData_ = _clearingStorage().clearingTransferByAccountPartitionAndId[_tokenHolder][_partition][ _clearingId ]; @@ -148,7 +155,7 @@ abstract contract ClearingStorageWrapper1 is HoldStorageWrapper1 { bytes32 _partition, address _tokenHolder, uint256 _clearingId - ) internal view returns (IClearingRedeem.ClearingRedeemData memory clearingRedeemData_) { + ) internal view override returns (IClearingRedeem.ClearingRedeemData memory clearingRedeemData_) { clearingRedeemData_ = _clearingStorage().clearingRedeemByAccountPartitionAndId[_tokenHolder][_partition][ _clearingId ]; @@ -158,33 +165,37 @@ abstract contract ClearingStorageWrapper1 is HoldStorageWrapper1 { bytes32 _partition, address _tokenHolder, uint256 _clearingId - ) internal view returns (IClearingHoldCreation.ClearingHoldCreationData memory clearingHoldCreationData_) { + ) internal view override returns (IClearingHoldCreation.ClearingHoldCreationData memory clearingHoldCreationData_) { clearingHoldCreationData_ = _clearingStorage().clearingHoldCreationByAccountPartitionAndId[_tokenHolder][ _partition ][_clearingId]; } - function _getClearedAmountFor(address _tokenHolder) internal view returns (uint256 amount_) { + function _getClearedAmountFor(address _tokenHolder) internal view override returns (uint256 amount_) { return _clearingStorage().totalClearedAmountByAccount[_tokenHolder]; } function _getClearedAmountForByPartition( bytes32 _partition, address _tokenHolder - ) internal view returns (uint256 amount_) { + ) internal view override returns (uint256 amount_) { return _clearingStorage().totalClearedAmountByAccountAndPartition[_tokenHolder][_partition]; } function _checkExpirationTimestamp( IClearing.ClearingOperationIdentifier calldata _clearingOperationIdentifier, bool _mustBeExpired - ) internal view { + ) internal view override { if (_isExpired(_getClearingBasicInfo(_clearingOperationIdentifier).expirationTimestamp) != _mustBeExpired) { if (_mustBeExpired) revert IClearing.ExpirationDateNotReached(); revert IClearing.ExpirationDateReached(); } } + function _isClearingInitialized() internal view override returns (bool) { + return _clearingStorage().initialized; + } + function _buildClearingTransferData( uint256 _amount, uint256 _expirationTimestamp, @@ -192,7 +203,7 @@ abstract contract ClearingStorageWrapper1 is HoldStorageWrapper1 { bytes memory _data, bytes memory _operatorData, ThirdPartyType _operatorType - ) internal pure returns (IClearing.ClearingTransferData memory) { + ) internal pure override returns (IClearing.ClearingTransferData memory) { return IClearing.ClearingTransferData({ amount: _amount, @@ -210,7 +221,7 @@ abstract contract ClearingStorageWrapper1 is HoldStorageWrapper1 { bytes memory _data, bytes memory _operatorData, ThirdPartyType _operatorType - ) internal pure returns (IClearing.ClearingRedeemData memory) { + ) internal pure override returns (IClearing.ClearingRedeemData memory) { return IClearing.ClearingRedeemData({ amount: _amount, @@ -231,7 +242,7 @@ abstract contract ClearingStorageWrapper1 is HoldStorageWrapper1 { address _to, bytes memory _operatorData, ThirdPartyType _operatorType - ) internal pure returns (IClearing.ClearingHoldCreationData memory) { + ) internal pure override returns (IClearing.ClearingHoldCreationData memory) { return IClearing.ClearingHoldCreationData({ amount: _amount, @@ -251,7 +262,7 @@ abstract contract ClearingStorageWrapper1 is HoldStorageWrapper1 { bytes32 _partition, uint256 _clearingId, IClearing.ClearingOperationType _operationType - ) internal pure returns (IClearing.ClearingOperationIdentifier memory) { + ) internal pure override returns (IClearing.ClearingOperationIdentifier memory) { return IClearing.ClearingOperationIdentifier({ tokenHolder: _from, diff --git a/packages/ats/contracts/contracts/layer_0/clearing/ClearingStorageWrapper2.sol b/packages/ats/contracts/contracts/layer_0/clearing/ClearingStorageWrapper2.sol index 257d2fda6..6afc8d592 100644 --- a/packages/ats/contracts/contracts/layer_0/clearing/ClearingStorageWrapper2.sol +++ b/packages/ats/contracts/contracts/layer_0/clearing/ClearingStorageWrapper2.sol @@ -7,7 +7,7 @@ import { IClearingActions } from "../../layer_1/interfaces/clearing/IClearingAct import { IClearingTransfer } from "../../layer_1/interfaces/clearing/IClearingTransfer.sol"; import { IClearingStorageWrapper } from "../../layer_1/interfaces/clearing/IClearingStorageWrapper.sol"; import { EnumerableSet } from "@openzeppelin/contracts/utils/structs/EnumerableSet.sol"; -import { checkNounceAndDeadline } from "../../layer_1/protectedPartitions/signatureVerification.sol"; +import { checkNounceAndDeadline } from "../../layer_0/common/libraries/ERC712Lib.sol"; import { Hold } from "../../layer_1/interfaces/hold/IHold.sol"; import { ThirdPartyType } from "../common/types/ThirdPartyType.sol"; import { ICompliance } from "../../layer_1/interfaces/ERC3643/ICompliance.sol"; @@ -24,18 +24,18 @@ abstract contract ClearingStorageWrapper2 is IClearingStorageWrapper, HoldStorag uint256 _amount, address _to, bytes calldata _signature - ) internal returns (bool success_, uint256 clearingId_) { + ) internal override returns (bool success_, uint256 clearingId_) { checkNounceAndDeadline( _protectedClearingOperation.nonce, _protectedClearingOperation.from, - _getNounceFor(_protectedClearingOperation.from), + _getNonceFor(_protectedClearingOperation.from), _protectedClearingOperation.deadline, _blockTimestamp() ); _checkClearingTransferSignature(_protectedClearingOperation, _amount, _to, _signature); - _setNounce(_protectedClearingOperation.nonce, _protectedClearingOperation.from); + _setNonceFor(_protectedClearingOperation.nonce, _protectedClearingOperation.from); (success_, clearingId_) = _clearingTransferCreation( _protectedClearingOperation.clearingOperation, @@ -51,18 +51,18 @@ abstract contract ClearingStorageWrapper2 is IClearingStorageWrapper, HoldStorag IClearing.ProtectedClearingOperation memory _protectedClearingOperation, Hold calldata _hold, bytes calldata _signature - ) internal returns (bool success_, uint256 clearingId_) { + ) internal override returns (bool success_, uint256 clearingId_) { checkNounceAndDeadline( _protectedClearingOperation.nonce, _protectedClearingOperation.from, - _getNounceFor(_protectedClearingOperation.from), + _getNonceFor(_protectedClearingOperation.from), _protectedClearingOperation.deadline, _blockTimestamp() ); _checkClearingCreateHoldSignature(_protectedClearingOperation, _hold, _signature); - _setNounce(_protectedClearingOperation.nonce, _protectedClearingOperation.from); + _setNonceFor(_protectedClearingOperation.nonce, _protectedClearingOperation.from); (success_, clearingId_) = _clearingHoldCreationCreation( _protectedClearingOperation.clearingOperation, @@ -77,18 +77,18 @@ abstract contract ClearingStorageWrapper2 is IClearingStorageWrapper, HoldStorag IClearing.ProtectedClearingOperation calldata _protectedClearingOperation, uint256 _amount, bytes calldata _signature - ) internal returns (bool success_, uint256 clearingId_) { + ) internal override returns (bool success_, uint256 clearingId_) { checkNounceAndDeadline( _protectedClearingOperation.nonce, _protectedClearingOperation.from, - _getNounceFor(_protectedClearingOperation.from), + _getNonceFor(_protectedClearingOperation.from), _protectedClearingOperation.deadline, _blockTimestamp() ); _checkClearingRedeemSignature(_protectedClearingOperation, _amount, _signature); - _setNounce(_protectedClearingOperation.nonce, _protectedClearingOperation.from); + _setNonceFor(_protectedClearingOperation.nonce, _protectedClearingOperation.from); (success_, clearingId_) = _clearingRedeemCreation( _protectedClearingOperation.clearingOperation, @@ -134,7 +134,7 @@ abstract contract ClearingStorageWrapper2 is IClearingStorageWrapper, HoldStorag address _from, bytes memory _operatorData, ThirdPartyType _thirdPartyType - ) internal returns (bool success_, uint256 clearingId_) { + ) internal override returns (bool success_, uint256 clearingId_) { bytes memory data = _clearingOperation.data; uint256 expirationTimestamp = _clearingOperation.expirationTimestamp; @@ -170,7 +170,7 @@ abstract contract ClearingStorageWrapper2 is IClearingStorageWrapper, HoldStorag address _from, bytes memory _operatorData, ThirdPartyType _thirdPartyType - ) internal returns (bool success_, uint256 clearingId_) { + ) internal override returns (bool success_, uint256 clearingId_) { clearingId_ = _operateClearingCreation( _clearingOperation, _from, @@ -208,7 +208,7 @@ abstract contract ClearingStorageWrapper2 is IClearingStorageWrapper, HoldStorag Hold calldata _hold, bytes memory _operatorData, ThirdPartyType _thirdPartyType - ) internal returns (bool success_, uint256 clearingId_) { + ) internal override returns (bool success_, uint256 clearingId_) { clearingId_ = _operateClearingCreation( _clearingOperation, _from, @@ -246,7 +246,7 @@ abstract contract ClearingStorageWrapper2 is IClearingStorageWrapper, HoldStorag function _approveClearingOperationByPartition( IClearing.ClearingOperationIdentifier calldata _clearingOperationIdentifier - ) internal returns (bool success_, bytes memory operationData_) { + ) internal override returns (bool success_, bytes memory operationData_, bytes32 partition_) { return _handleClearingOperationByPartition( _clearingOperationIdentifier, @@ -256,8 +256,8 @@ abstract contract ClearingStorageWrapper2 is IClearingStorageWrapper, HoldStorag function _cancelClearingOperationByPartition( IClearing.ClearingOperationIdentifier calldata _clearingOperationIdentifier - ) internal returns (bool success_) { - (success_, ) = _handleClearingOperationByPartition( + ) internal override returns (bool success_) { + (success_, , ) = _handleClearingOperationByPartition( _clearingOperationIdentifier, IClearingActions.ClearingActionType.Cancel ); @@ -265,8 +265,8 @@ abstract contract ClearingStorageWrapper2 is IClearingStorageWrapper, HoldStorag function _reclaimClearingOperationByPartition( IClearing.ClearingOperationIdentifier calldata _clearingOperationIdentifier - ) internal returns (bool success_) { - (success_, ) = _handleClearingOperationByPartition( + ) internal override returns (bool success_) { + (success_, , ) = _handleClearingOperationByPartition( _clearingOperationIdentifier, IClearingActions.ClearingActionType.Reclaim ); @@ -275,14 +275,14 @@ abstract contract ClearingStorageWrapper2 is IClearingStorageWrapper, HoldStorag function _handleClearingOperationByPartition( IClearing.ClearingOperationIdentifier calldata _clearingOperationIdentifier, IClearingActions.ClearingActionType operationType - ) internal returns (bool success_, bytes memory operationData_) { + ) internal returns (bool success_, bytes memory operationData_, bytes32 partition_) { _beforeClearingOperation( _clearingOperationIdentifier, _getClearingBasicInfo(_clearingOperationIdentifier).destination ); uint256 amount; ThirdPartyType operatorType; - (success_, amount, operatorType, operationData_) = _operateClearingAction( + (success_, amount, operatorType, operationData_, partition_) = _operateClearingAction( _clearingOperationIdentifier, operationType ); @@ -292,15 +292,24 @@ abstract contract ClearingStorageWrapper2 is IClearingStorageWrapper, HoldStorag function _operateClearingAction( IClearing.ClearingOperationIdentifier calldata _clearingOperationIdentifier, IClearingActions.ClearingActionType _operation - ) internal returns (bool success_, uint256 amount_, ThirdPartyType operatorType_, bytes memory operationData_) { + ) + internal + returns ( + bool success_, + uint256 amount_, + ThirdPartyType operatorType_, + bytes memory operationData_, + bytes32 partition_ + ) + { if (_clearingOperationIdentifier.clearingOperationType == IClearing.ClearingOperationType.Transfer) { - (success_, amount_, operatorType_) = _clearingTransferExecution( + (success_, amount_, operatorType_, partition_) = _clearingTransferExecution( _clearingOperationIdentifier.partition, _clearingOperationIdentifier.tokenHolder, _clearingOperationIdentifier.clearingId, _operation ); - return (success_, amount_, operatorType_, operationData_); + return (success_, amount_, operatorType_, operationData_, partition_); } if (_clearingOperationIdentifier.clearingOperationType == IClearing.ClearingOperationType.Redeem) { @@ -310,19 +319,20 @@ abstract contract ClearingStorageWrapper2 is IClearingStorageWrapper, HoldStorag _clearingOperationIdentifier.clearingId, _operation ); - return (success_, amount_, operatorType_, operationData_); + return (success_, amount_, operatorType_, operationData_, bytes32(0)); } - return - _clearingHoldCreationExecution( - _clearingOperationIdentifier.partition, - _clearingOperationIdentifier.tokenHolder, - _clearingOperationIdentifier.clearingId, - _operation - ); + (success_, amount_, operatorType_, operationData_) = _clearingHoldCreationExecution( + _clearingOperationIdentifier.partition, + _clearingOperationIdentifier.tokenHolder, + _clearingOperationIdentifier.clearingId, + _operation + ); + + return (success_, amount_, operatorType_, operationData_, bytes32(0)); } - function _transferClearingBalance(bytes32 _partition, address _to, uint256 _amount) internal { + function _transferClearingBalance(bytes32 _partition, address _to, uint256 _amount) internal override { if (_validPartitionForReceiver(_partition, _to)) { _increaseBalanceByPartition(_to, _amount, _partition); return; @@ -330,7 +340,9 @@ abstract contract ClearingStorageWrapper2 is IClearingStorageWrapper, HoldStorag _addPartitionTo(_amount, _to, _partition); } - function _removeClearing(IClearing.ClearingOperationIdentifier memory _clearingOperationIdentifier) internal { + function _removeClearing( + IClearing.ClearingOperationIdentifier memory _clearingOperationIdentifier + ) internal override { IClearing.ClearingDataStorage storage clearingStorage = _clearingStorage(); uint256 amount = _getClearingBasicInfo(_clearingOperationIdentifier).amount; @@ -368,7 +380,7 @@ abstract contract ClearingStorageWrapper2 is IClearingStorageWrapper, HoldStorag function _beforeClearingOperation( IClearing.ClearingOperationIdentifier memory _clearingOperationIdentifier, address _to - ) internal { + ) internal override { _adjustClearingBalances(_clearingOperationIdentifier, _to); _updateAccountSnapshot(_clearingOperationIdentifier.tokenHolder, _clearingOperationIdentifier.partition); _updateAccountSnapshot(_to, _clearingOperationIdentifier.partition); @@ -381,7 +393,7 @@ abstract contract ClearingStorageWrapper2 is IClearingStorageWrapper, HoldStorag function _adjustClearingBalances( IClearing.ClearingOperationIdentifier memory _clearingOperationIdentifier, address _to - ) internal { + ) internal override { _triggerAndSyncAll(_clearingOperationIdentifier.partition, _clearingOperationIdentifier.tokenHolder, _to); _updateClearing( @@ -393,7 +405,7 @@ abstract contract ClearingStorageWrapper2 is IClearingStorageWrapper, HoldStorag function _updateClearing( IClearing.ClearingOperationIdentifier memory _clearingOperationIdentifier, uint256 _abaf - ) internal { + ) internal override { uint256 clearingLabaf = _getClearingLabafByPartition(_clearingOperationIdentifier); if (_abaf == clearingLabaf) { @@ -406,7 +418,7 @@ abstract contract ClearingStorageWrapper2 is IClearingStorageWrapper, HoldStorag function _updateClearingAmountById( IClearing.ClearingOperationIdentifier memory _clearingOperationIdentifier, uint256 _factor - ) internal { + ) internal override { if (_factor == 1) return; if (_clearingOperationIdentifier.clearingOperationType == IClearing.ClearingOperationType.Transfer) { @@ -429,12 +441,12 @@ abstract contract ClearingStorageWrapper2 is IClearingStorageWrapper, HoldStorag ][_clearingOperationIdentifier.clearingId].amount *= _factor; } - function _increaseClearedAmounts(address _tokenHolder, bytes32 _partition, uint256 _amount) internal { + function _increaseClearedAmounts(address _tokenHolder, bytes32 _partition, uint256 _amount) internal override { _clearingStorage().totalClearedAmountByAccountAndPartition[_tokenHolder][_partition] += _amount; _clearingStorage().totalClearedAmountByAccount[_tokenHolder] += _amount; } - function _updateTotalCleared(bytes32 _partition, address _tokenHolder) internal returns (uint256 abaf_) { + function _updateTotalCleared(bytes32 _partition, address _tokenHolder) internal override returns (uint256 abaf_) { abaf_ = _getAbaf(); uint256 labaf = _getTotalClearedLabaf(_tokenHolder); @@ -454,7 +466,7 @@ abstract contract ClearingStorageWrapper2 is IClearingStorageWrapper, HoldStorag } } - function _updateTotalClearedAmountAndLabaf(address _tokenHolder, uint256 _factor, uint256 _abaf) internal { + function _updateTotalClearedAmountAndLabaf(address _tokenHolder, uint256 _factor, uint256 _abaf) internal override { if (_factor == 1) return; _clearingStorage().totalClearedAmountByAccount[_tokenHolder] *= _factor; @@ -466,7 +478,7 @@ abstract contract ClearingStorageWrapper2 is IClearingStorageWrapper, HoldStorag address _tokenHolder, uint256 _factor, uint256 _abaf - ) internal { + ) internal override { if (_factor == 1) return; _clearingStorage().totalClearedAmountByAccountAndPartition[_tokenHolder][_partition] *= _factor; @@ -491,7 +503,7 @@ abstract contract ClearingStorageWrapper2 is IClearingStorageWrapper, HoldStorag IClearing.ClearingOperationType _clearingOperationType, address _from, uint256 _amount - ) internal { + ) internal override { address spender = _msgSender(); _decreaseAllowedBalance(_from, spender, _amount); _clearingStorage().clearingThirdPartyByAccountPartitionTypeAndId[_from][_partition][_clearingOperationType][ @@ -510,7 +522,7 @@ abstract contract ClearingStorageWrapper2 is IClearingStorageWrapper, HoldStorag function _getClearedAmountForAdjustedAt( address _tokenHolder, uint256 _timestamp - ) internal view returns (uint256 amount_) { + ) internal view override returns (uint256 amount_) { uint256 factor = _calculateFactorForClearedAmountByTokenHolderAdjustedAt(_tokenHolder, _timestamp); return _getClearedAmountFor(_tokenHolder) * factor; @@ -553,7 +565,7 @@ abstract contract ClearingStorageWrapper2 is IClearingStorageWrapper, HoldStorag bytes32 _partition, address _tokenHolder, uint256 _clearingId - ) internal view returns (IClearingTransfer.ClearingTransferData memory clearingTransferData_) { + ) internal view override returns (IClearingTransfer.ClearingTransferData memory clearingTransferData_) { clearingTransferData_ = _getClearingTransferForByPartition(_partition, _tokenHolder, _clearingId); clearingTransferData_.amount *= _calculateFactor( @@ -573,7 +585,7 @@ abstract contract ClearingStorageWrapper2 is IClearingStorageWrapper, HoldStorag bytes32 _partition, address _tokenHolder, uint256 _clearingId - ) internal view returns (IClearingTransfer.ClearingRedeemData memory clearingRedeemData_) { + ) internal view override returns (IClearingTransfer.ClearingRedeemData memory clearingRedeemData_) { clearingRedeemData_ = _getClearingRedeemForByPartition(_partition, _tokenHolder, _clearingId); clearingRedeemData_.amount *= _calculateFactor( @@ -593,7 +605,7 @@ abstract contract ClearingStorageWrapper2 is IClearingStorageWrapper, HoldStorag bytes32 _partition, address _tokenHolder, uint256 _clearingId - ) internal view returns (IClearingTransfer.ClearingHoldCreationData memory clearingHoldCreationData_) { + ) internal view override returns (IClearingTransfer.ClearingHoldCreationData memory clearingHoldCreationData_) { clearingHoldCreationData_ = _getClearingHoldCreationForByPartition(_partition, _tokenHolder, _clearingId); clearingHoldCreationData_.amount *= _calculateFactor( @@ -609,20 +621,12 @@ abstract contract ClearingStorageWrapper2 is IClearingStorageWrapper, HoldStorag ); } - function _getClearingLabafByPartition( - IClearing.ClearingOperationIdentifier memory _clearingOperationIdentifier - ) internal view virtual returns (uint256); - - function _checkCompliance(address _from, address _to, bool _checkSender) internal view virtual; - - function _checkIdentity(address _from, address _to) internal view virtual; - function _clearingTransferExecution( bytes32 _partition, address _tokenHolder, uint256 _clearingId, IClearingActions.ClearingActionType _operation - ) private returns (bool success_, uint256 amount_, ThirdPartyType operatorType_) { + ) private returns (bool success_, uint256 amount_, ThirdPartyType operatorType_, bytes32 partition_) { IClearing.ClearingTransferData memory clearingTransferData = _getClearingTransferForByPartition( _partition, _tokenHolder, @@ -636,6 +640,8 @@ abstract contract ClearingStorageWrapper2 is IClearingStorageWrapper, HoldStorag _checkCompliance(_tokenHolder, clearingTransferData.destination, false); destination = clearingTransferData.destination; + + partition_ = _partition; } _transferClearingBalance(_partition, destination, clearingTransferData.amount); diff --git a/packages/ats/contracts/contracts/layer_1/common/Common.sol b/packages/ats/contracts/contracts/layer_0/common/Common.sol similarity index 58% rename from packages/ats/contracts/contracts/layer_1/common/Common.sol rename to packages/ats/contracts/contracts/layer_0/common/Common.sol index 5de7516ee..6aea86609 100644 --- a/packages/ats/contracts/contracts/layer_1/common/Common.sol +++ b/packages/ats/contracts/contracts/layer_0/common/Common.sol @@ -2,43 +2,33 @@ pragma solidity >=0.8.0 <0.9.0; import { _WILD_CARD_ROLE } from "../constants/roles.sol"; -import { IClearing } from "../interfaces/clearing/IClearing.sol"; -import { TransferAndLockStorageWrapper } from "../../layer_0/transferAndLock/TransferAndLockStorageWrapper.sol"; +import { IClearing } from "../../layer_1/interfaces/clearing/IClearing.sol"; +import { SecurityStorageWrapper } from "../security/SecurityStorageWrapper.sol"; -abstract contract Common is TransferAndLockStorageWrapper { +abstract contract Common is SecurityStorageWrapper { error AlreadyInitialized(); - error OnlyDelegateAllowed(); - modifier onlyUninitialized(bool _initialized) { + modifier onlyUninitialized(bool _initialized) override { _checkUninitialized(_initialized); _; } - modifier onlyDelegate() { - _checkDelegate(); - _; - } - - modifier onlyUnProtectedPartitionsOrWildCardRole() { + modifier onlyUnProtectedPartitionsOrWildCardRole() override { _checkUnProtectedPartitionsOrWildCardRole(); _; } - modifier onlyClearingDisabled() { + modifier onlyClearingDisabled() override { _checkClearingDisabled(); _; } - function _checkUnProtectedPartitionsOrWildCardRole() internal view { + function _checkUnProtectedPartitionsOrWildCardRole() internal view override { if (_arePartitionsProtected() && !_hasRole(_WILD_CARD_ROLE, _msgSender())) { revert PartitionsAreProtectedAndNoRole(_msgSender(), _WILD_CARD_ROLE); } } - function _checkDelegate() private view { - if (_msgSender() != address(this)) revert OnlyDelegateAllowed(); - } - function _checkClearingDisabled() private view { if (_isClearingActivated()) { revert IClearing.ClearingIsActivated(); diff --git a/packages/ats/contracts/contracts/layer_0/common/libraries/CheckpointsLib.sol b/packages/ats/contracts/contracts/layer_0/common/libraries/CheckpointsLib.sol new file mode 100644 index 000000000..52268d13a --- /dev/null +++ b/packages/ats/contracts/contracts/layer_0/common/libraries/CheckpointsLib.sol @@ -0,0 +1,45 @@ +// SPDX-License-Identifier: Apache-2.0 +pragma solidity >=0.8.0 <0.9.0; + +import { Math } from "@openzeppelin/contracts/utils/math/Math.sol"; + +library CheckpointsLib { + struct Checkpoint { + uint256 from; + uint256 value; + } + + function checkpointsLookup( + Checkpoint[] storage self, + uint256 timepoint + ) internal view returns (uint256 block_, uint256 vote_) { + uint256 length = self.length; + + uint256 low = 0; + uint256 high = length; + + if (length > 5) { + uint256 mid = length - Math.sqrt(length); + if (self[mid].from > timepoint) { + high = mid; + } else { + low = mid + 1; + } + } + + while (low < high) { + uint256 mid = Math.average(low, high); + if (self[mid].from > timepoint) { + high = mid; + } else { + low = mid + 1; + } + } + + if (high == 0) return (0, 0); + + unchecked { + return (self[high - 1].from, self[high - 1].value); + } + } +} diff --git a/packages/ats/contracts/contracts/layer_0/common/libraries/DecimalsLib.sol b/packages/ats/contracts/contracts/layer_0/common/libraries/DecimalsLib.sol new file mode 100644 index 000000000..689108192 --- /dev/null +++ b/packages/ats/contracts/contracts/layer_0/common/libraries/DecimalsLib.sol @@ -0,0 +1,18 @@ +// SPDX-License-Identifier: Apache-2.0 +pragma solidity >=0.8.0 <0.9.0; + +library DecimalsLib { + function calculateDecimalsAdjustment( + uint256 _amount, + uint8 _decimals, + uint8 _newDecimals + ) internal pure returns (uint256 newAmount_) { + if (_decimals == _newDecimals) return _amount; + + if (_decimals > _newDecimals) { + return _amount / (10 ** (_decimals - _newDecimals)); + } else { + return _amount * (10 ** (_newDecimals - _decimals)); + } + } +} diff --git a/packages/ats/contracts/contracts/layer_1/protectedPartitions/signatureVerification.sol b/packages/ats/contracts/contracts/layer_0/common/libraries/ERC712Lib.sol similarity index 95% rename from packages/ats/contracts/contracts/layer_1/protectedPartitions/signatureVerification.sol rename to packages/ats/contracts/contracts/layer_0/common/libraries/ERC712Lib.sol index 21d4f4ce4..bc72259cb 100644 --- a/packages/ats/contracts/contracts/layer_1/protectedPartitions/signatureVerification.sol +++ b/packages/ats/contracts/contracts/layer_0/common/libraries/ERC712Lib.sol @@ -1,9 +1,8 @@ -// SPDX-License-Identifier: MIT +// SPDX-License-Identifier: Apache-2.0 pragma solidity >=0.8.0 <0.9.0; +import { _DOMAIN_TYPE_HASH, _SALT } from "../../constants/values.sol"; import { - _DOMAIN_TYPE_HASH, - _SALT, _PROTECTED_TRANSFER_FROM_PARTITION_TYPEHASH, _PROTECTED_REDEEM_FROM_PARTITION_TYPEHASH, _PROTECTED_CREATE_HOLD_FROM_PARTITION_TYPEHASH, @@ -13,16 +12,34 @@ import { _PROTECTED_CLEARING_REDEEM_TYPEHASH, _CLEARING_OPERATION_TYPEHASH, _PROTECTED_CLEARING_OPERATION_TYPEHASH, - _PROTECTED_CLEARING_CREATE_HOLD_FROM_PARTITION_TYPEHASH, - _PROTECTED_CLEARING_OPERATION_TYPEHASH -} from "../constants/values.sol"; -import { Hold, ProtectedHold } from "../interfaces/hold/IHold.sol"; -import { IClearing } from "../interfaces/clearing/IClearing.sol"; + _PROTECTED_CLEARING_CREATE_HOLD_FROM_PARTITION_TYPEHASH +} from "../../../layer_1/constants/values.sol"; +import { Hold, ProtectedHold } from "../../../layer_1/interfaces/hold/IHold.sol"; +import { IClearing } from "../../../layer_1/interfaces/clearing/IClearing.sol"; error WrongSignatureLength(); error WrongNounce(uint256 nounce, address account); error ExpiredDeadline(uint256 deadline); +function getDomainHash( + string memory _contractName, + string memory _contractVersion, + uint256 _chainId, + address _contractAddress +) pure returns (bytes32) { + return + keccak256( + abi.encode( + _DOMAIN_TYPE_HASH, + keccak256(bytes(_contractName)), + keccak256(bytes(_contractVersion)), + _chainId, + _contractAddress + ) + ); +} + +// function hashes function getMessageHashTransfer( bytes32 _partition, address _from, @@ -180,6 +197,7 @@ function getMessageHashClearingRedeem( ); } +// checks function checkNounceAndDeadline( uint256 _nounce, address _account, @@ -199,38 +217,6 @@ function isNounceValid(uint256 _nounce, uint256 _currentNounce) pure returns (bo return _currentNounce < _nounce; } -function verify( - address _signer, - bytes32 _functionHash, - bytes memory _signature, - string memory _contractName, - string memory _contractVersion, - uint256 _chainid, - address _contractAddress -) pure returns (bool) { - bytes32 domainHash = getDomainHash(_contractName, _contractVersion, _chainid, _contractAddress); - bytes32 prefixedHash = keccak256(abi.encodePacked(_SALT, domainHash, _functionHash)); - return (recoverSigner(prefixedHash, _signature) == _signer); -} - -function getDomainHash( - string memory _contractName, - string memory _contractVersion, - uint256 _chainId, - address _contractAddress -) pure returns (bytes32) { - return - keccak256( - abi.encode( - _DOMAIN_TYPE_HASH, - keccak256(bytes(_contractName)), - keccak256(bytes(_contractVersion)), - _chainId, - _contractAddress - ) - ); -} - function recoverSigner(bytes32 _prefixedHash, bytes memory _signature) pure returns (address) { (bytes32 r, bytes32 s, uint8 v) = splitSignature(_signature); return ecrecover(_prefixedHash, v, r, s); @@ -249,3 +235,17 @@ function splitSignature(bytes memory sig) pure returns (bytes32 r, bytes32 s, ui } // implicitly return (r, s, v) } + +function verify( + address _signer, + bytes32 _functionHash, + bytes memory _signature, + string memory _contractName, + string memory _contractVersion, + uint256 _chainid, + address _contractAddress +) pure returns (bool) { + bytes32 domainHash = getDomainHash(_contractName, _contractVersion, _chainid, _contractAddress); + bytes32 prefixedHash = keccak256(abi.encodePacked(_SALT, domainHash, _functionHash)); + return (recoverSigner(prefixedHash, _signature) == _signer); +} diff --git a/packages/ats/contracts/contracts/layer_0/constants/storagePositions.sol b/packages/ats/contracts/contracts/layer_0/constants/storagePositions.sol index 1b239348c..dc917d4a1 100644 --- a/packages/ats/contracts/contracts/layer_0/constants/storagePositions.sol +++ b/packages/ats/contracts/contracts/layer_0/constants/storagePositions.sol @@ -36,6 +36,9 @@ bytes32 constant _SCHEDULED_SNAPSHOTS_STORAGE_POSITION = 0xe5334ddaa6268d55c7efe // keccak256('security.token.standard.scheduledBalanceAdjustments.storage'); bytes32 constant _SCHEDULED_BALANCE_ADJUSTMENTS_STORAGE_POSITION = 0xaf4aaa3de473ec9b58645d40f5a2fe4e176157e247b2d875db61f1a70935ac68; +// keccak256('security.token.standard.scheduledCouponListing.storage'); +bytes32 constant _SCHEDULED_COUPON_LISTING_STORAGE_POSITION = 0x020cecc946ba57a1f8569220f46e5763939a3e864a1a4064efc2be63a845635a; + // keccak256('security.token.standard.scheduledCrossOrderedTasks.storage'); bytes32 constant _SCHEDULED_CROSS_ORDERED_TASKS_STORAGE_POSITION = 0x07c301a048b8fa80688acfab6d93f7e94a43ce454031a02cdd132b92ca943a70; @@ -95,3 +98,9 @@ bytes32 constant _PROCEED_RECIPIENTS_STORAGE_POSITION = 0xd76ee368b4f6f14377350e // keccak256('security.token.standard.proceedRecipients.data.storage'); bytes32 constant _PROCEED_RECIPIENTS_DATA_STORAGE_POSITION = 0xc7c4e0ff0ace36b5d2de5287c034dccef63aa2fb6c2498a31a48fd5516019f8c; + +// keccak256('security.token.standard.kpis.data.storage'); +bytes32 constant _KPIS_STORAGE_POSITION = 0x15e2583fed61d8b30b191451b67403569c6ee36d7d93206cb4a6de2f6f69c0b9; + +// keccak256('security.token.standard.nonce.storage'); +bytes32 constant _NONCE_STORAGE_POSITION = 0xfce5baa472f37a2de2808d549c4eb6787a5a27db638637a7ffa45da5f9f8c9f7; diff --git a/packages/ats/contracts/contracts/layer_0/constants/values.sol b/packages/ats/contracts/contracts/layer_0/constants/values.sol index a44cf622b..05eb84081 100644 --- a/packages/ats/contracts/contracts/layer_0/constants/values.sol +++ b/packages/ats/contracts/contracts/layer_0/constants/values.sol @@ -11,6 +11,7 @@ bytes constant EMPTY_BYTES = bytes(""); // Used as the default partition for ERC1410 token operations when no specific partition is specified bytes32 constant _DEFAULT_PARTITION = 0x0000000000000000000000000000000000000000000000000000000000000001; uint256 constant SNAPSHOT_RESULT_ID = 0; +uint256 constant COUPON_LISTING_RESULT_ID = 1; // keccak256('security.token.standard.dividend.corporateAction'); bytes32 constant DIVIDEND_CORPORATE_ACTION_TYPE = 0x1c29d09f87f2b0c8192a7719a2acdfdfa320dc2835b5a0398e5bd8dc34c14b0e; @@ -30,6 +31,9 @@ bytes32 constant BALANCE_ADJUSTMENT_TASK_TYPE = 0x9ce9cffaccaf68fc544ce4df9e5e27 // keccak256('security.token.standard.snapshot.scheduledTasks'); bytes32 constant SNAPSHOT_TASK_TYPE = 0x322c4b500b27950e00c27e3a40ca8f9ffacbc81a3b4e3c9516717391fd54234c; +// keccak256('security.token.standard.couponListing.scheduledTasks'); +bytes32 constant COUPON_LISTING_TASK_TYPE = 0xc0025ea024305bcaedb7e0a5d9ef6f0bca23bb36ee261794fdfb21cd810563ce; + bytes32 constant ERC20PERMIT_TYPEHASH = keccak256( "Permit(address owner,address spender,uint256 value,uint256 nonce,uint256 deadline)" ); @@ -56,3 +60,10 @@ bytes1 constant _ADDRESS_RECOVERED_FROM_ERROR_ID = 0x54; bytes1 constant _ADDRESS_RECOVERED_TO_ERROR_ID = 0x55; bytes1 constant _SUCCESS = 0x00; + +// solhint-disable max-line-length +//keccak256( +// 'EIP712Domain(string name,string version,uint256 chainId,address verifyingContract)' +//); +bytes32 constant _DOMAIN_TYPE_HASH = 0x8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f; +string constant _SALT = "\x19\x01"; diff --git a/packages/ats/contracts/contracts/layer_0/core/accessControl/AccessControlStorageWrapper.sol b/packages/ats/contracts/contracts/layer_0/core/accessControl/AccessControlStorageWrapper.sol index e56a220cd..afd887888 100644 --- a/packages/ats/contracts/contracts/layer_0/core/accessControl/AccessControlStorageWrapper.sol +++ b/packages/ats/contracts/contracts/layer_0/core/accessControl/AccessControlStorageWrapper.sol @@ -7,16 +7,15 @@ import { EnumerableSet } from "@openzeppelin/contracts/utils/structs/EnumerableS import { IAccessControlStorageWrapper } from "../../../layer_1/interfaces/accessControl/IAccessControlStorageWrapper.sol"; -import { LocalContext } from "../../context/LocalContext.sol"; import { BusinessLogicResolverWrapper } from "../../../resolver/BusinessLogicResolverWrapper.sol"; import { _ACCESS_CONTROL_STORAGE_POSITION } from "../../constants/storagePositions.sol"; +import { ResolverProxyStorageWrapper } from "../resolverProxy/ResolverProxyStorageWrapper.sol"; abstract contract AccessControlStorageWrapper is IAccessControlStorageWrapper, - LocalContext, + ResolverProxyStorageWrapper, BusinessLogicResolverWrapper { - // TODO: Check if it's possible to use only one dependency of AddressSet and Bytes32Set using LibCommon for EnumerableSet.AddressSet; using LibCommon for EnumerableSet.Bytes32Set; using EnumerableSet for EnumerableSet.AddressSet; @@ -32,32 +31,32 @@ abstract contract AccessControlStorageWrapper is mapping(address => EnumerableSet.Bytes32Set) memberRoles; } - modifier onlyRole(bytes32 _role) { + modifier onlyRole(bytes32 _role) override { _checkRole(_role, _msgSender()); _; } - modifier onlyRoleFor(bytes32 _role, address _account) { + modifier onlyRoleFor(bytes32 _role, address _account) override { _checkRole(_role, _account); _; } - modifier onlySameRolesAndActivesLength(uint256 _rolesLength, uint256 _activesLength) { + modifier onlySameRolesAndActivesLength(uint256 _rolesLength, uint256 _activesLength) override { _checkSameRolesAndActivesLength(_rolesLength, _activesLength); _; } - modifier onlyConsistentRoles(bytes32[] calldata _roles, bool[] calldata _actives) { + modifier onlyConsistentRoles(bytes32[] calldata _roles, bool[] calldata _actives) override { ArrayLib.checkUniqueValues(_roles, _actives); _; } // Internal - function _grantRole(bytes32 _role, address _account) internal returns (bool success_) { + function _grantRole(bytes32 _role, address _account) internal override returns (bool success_) { success_ = _grant(_rolesStorage(), _role, _account); } - function _revokeRole(bytes32 _role, address _account) internal returns (bool success_) { + function _revokeRole(bytes32 _role, address _account) internal override returns (bool success_) { success_ = _remove(_rolesStorage(), _role, _account); } @@ -65,7 +64,7 @@ abstract contract AccessControlStorageWrapper is bytes32[] calldata _roles, bool[] calldata _actives, address _account - ) internal returns (bool success_) { + ) internal override returns (bool success_) { RoleDataStorage storage roleDataStorage = _rolesStorage(); address sender = _msgSender(); uint256 length = _roles.length; @@ -86,15 +85,15 @@ abstract contract AccessControlStorageWrapper is success_ = true; } - function _getRoleAdmin(bytes32 _role) internal view returns (bytes32) { + function _getRoleAdmin(bytes32 _role) internal view override returns (bytes32) { return _rolesStorage().roles[_role].roleAdmin; } - function _hasRole(bytes32 _role, address _account) internal view returns (bool) { + function _hasRole(bytes32 _role, address _account) internal view override returns (bool) { return _has(_rolesStorage(), _role, _account); } - function _hasAnyRole(bytes32[] memory _roles, address _account) internal view returns (bool) { + function _hasAnyRole(bytes32[] memory _roles, address _account) internal view override returns (bool) { for (uint256 i; i < _roles.length; i++) { if (_has(_rolesStorage(), _roles[i], _account)) { return true; @@ -103,7 +102,7 @@ abstract contract AccessControlStorageWrapper is return false; } - function _getRoleCountFor(address _account) internal view returns (uint256 roleCount_) { + function _getRoleCountFor(address _account) internal view override returns (uint256 roleCount_) { roleCount_ = _rolesStorage().memberRoles[_account].length(); } @@ -111,11 +110,11 @@ abstract contract AccessControlStorageWrapper is address _account, uint256 _pageIndex, uint256 _pageLength - ) internal view returns (bytes32[] memory roles_) { + ) internal view override returns (bytes32[] memory roles_) { roles_ = _rolesStorage().memberRoles[_account].getFromSet(_pageIndex, _pageLength); } - function _getRoleMemberCount(bytes32 _role) internal view returns (uint256 memberCount_) { + function _getRoleMemberCount(bytes32 _role) internal view override returns (uint256 memberCount_) { memberCount_ = _rolesStorage().roles[_role].roleMembers.length(); } @@ -123,17 +122,17 @@ abstract contract AccessControlStorageWrapper is bytes32 _role, uint256 _pageIndex, uint256 _pageLength - ) internal view returns (address[] memory members_) { + ) internal view override returns (address[] memory members_) { members_ = _rolesStorage().roles[_role].roleMembers.getFromSet(_pageIndex, _pageLength); } - function _checkRole(bytes32 _role, address _account) internal view { + function _checkRole(bytes32 _role, address _account) internal view override { if (!_hasRole(_role, _account)) { revert AccountHasNoRole(_account, _role); } } - function _checkAnyRole(bytes32[] memory _roles, address _account) internal view { + function _checkAnyRole(bytes32[] memory _roles, address _account) internal view override { if (!_hasAnyRole(_roles, _account)) { revert AccountHasNoRoles(_account, _roles); } diff --git a/packages/ats/contracts/contracts/layer_0/core/controlList/ControlListStorageWrapper.sol b/packages/ats/contracts/contracts/layer_0/core/controlList/ControlListStorageWrapper.sol index a453b8881..0da25bc43 100644 --- a/packages/ats/contracts/contracts/layer_0/core/controlList/ControlListStorageWrapper.sol +++ b/packages/ats/contracts/contracts/layer_0/core/controlList/ControlListStorageWrapper.sol @@ -24,49 +24,60 @@ abstract contract ControlListStorageWrapper is IControlListStorageWrapper, Exter } // modifiers - modifier onlyListedAllowed(address _account) { + modifier onlyListedAllowed(address _account) override { _checkControlList(_account); _; } + // solhint-disable-next-line func-name-mixedcase + function _initialize_ControlList(bool _isWhiteList) internal override { + ControlListStorage storage controlListStorage = _controlListStorage(); + controlListStorage.isWhiteList = _isWhiteList; + controlListStorage.initialized = true; + } + // Internal - function _addToControlList(address _account) internal returns (bool success_) { + function _addToControlList(address _account) internal override returns (bool success_) { success_ = _controlListStorage().list.add(_account); } - function _removeFromControlList(address _account) internal returns (bool success_) { + function _removeFromControlList(address _account) internal override returns (bool success_) { success_ = _controlListStorage().list.remove(_account); } - function _getControlListType() internal view returns (bool) { + function _getControlListType() internal view override returns (bool) { return _controlListStorage().isWhiteList; } - function _getControlListCount() internal view returns (uint256 controlListCount_) { + function _getControlListCount() internal view override returns (uint256 controlListCount_) { controlListCount_ = _controlListStorage().list.length(); } function _getControlListMembers( uint256 _pageIndex, uint256 _pageLength - ) internal view returns (address[] memory members_) { + ) internal view override returns (address[] memory members_) { return _controlListStorage().list.getFromSet(_pageIndex, _pageLength); } - function _isInControlList(address _account) internal view returns (bool) { + function _isInControlList(address _account) internal view override returns (bool) { return _controlListStorage().list.contains(_account); } - function _isAbleToAccess(address _account) internal view returns (bool) { + function _isAbleToAccess(address _account) internal view override returns (bool) { return (_getControlListType() == _isInControlList(_account) && _isExternallyAuthorized(_account)); } - function _checkControlList(address _account) internal view { + function _checkControlList(address _account) internal view override { if (!_isAbleToAccess(_account)) { revert AccountIsBlocked(_account); } } + function _isControlListInitialized() internal view override returns (bool) { + return _controlListStorage().initialized; + } + function _controlListStorage() internal pure returns (ControlListStorage storage controlList_) { bytes32 position = _CONTROL_LIST_STORAGE_POSITION; // solhint-disable-next-line no-inline-assembly diff --git a/packages/ats/contracts/contracts/layer_0/core/externalControlLists/ExternalControlListManagementStorageWrapper.sol b/packages/ats/contracts/contracts/layer_0/core/externalControlLists/ExternalControlListManagementStorageWrapper.sol index 2edf63d53..4db8f6953 100644 --- a/packages/ats/contracts/contracts/layer_0/core/externalControlLists/ExternalControlListManagementStorageWrapper.sol +++ b/packages/ats/contracts/contracts/layer_0/core/externalControlLists/ExternalControlListManagementStorageWrapper.sol @@ -11,7 +11,20 @@ abstract contract ExternalControlListManagementStorageWrapper is ProtectedPartit using LibCommon for EnumerableSet.AddressSet; using EnumerableSet for EnumerableSet.AddressSet; - function _isExternallyAuthorized(address _account) internal view returns (bool) { + // solhint-disable-next-line func-name-mixedcase + function _initialize_ExternalControlLists(address[] calldata _controlLists) internal override { + uint256 length = _controlLists.length; + for (uint256 index; index < length; ) { + _checkValidAddress(_controlLists[index]); + _addExternalList(_CONTROL_LIST_MANAGEMENT_STORAGE_POSITION, _controlLists[index]); + unchecked { + ++index; + } + } + _setExternalListInitialized(_CONTROL_LIST_MANAGEMENT_STORAGE_POSITION); + } + + function _isExternallyAuthorized(address _account) internal view override returns (bool) { ExternalListDataStorage storage externalControlListStorage = _externalListStorage( _CONTROL_LIST_MANAGEMENT_STORAGE_POSITION ); @@ -24,4 +37,8 @@ abstract contract ExternalControlListManagementStorageWrapper is ProtectedPartit } return true; } + + function _isExternalControlListInitialized() internal view override returns (bool) { + return _externalListStorage(_CONTROL_LIST_MANAGEMENT_STORAGE_POSITION).initialized; + } } diff --git a/packages/ats/contracts/contracts/layer_0/core/externalKycLists/ExternalKycListManagementStorageWrapper.sol b/packages/ats/contracts/contracts/layer_0/core/externalKycLists/ExternalKycListManagementStorageWrapper.sol index 0d8cb3b64..da9cfe7ff 100644 --- a/packages/ats/contracts/contracts/layer_0/core/externalKycLists/ExternalKycListManagementStorageWrapper.sol +++ b/packages/ats/contracts/contracts/layer_0/core/externalKycLists/ExternalKycListManagementStorageWrapper.sol @@ -12,7 +12,20 @@ abstract contract ExternalKycListManagementStorageWrapper is ExternalListManagem using LibCommon for EnumerableSet.AddressSet; using EnumerableSet for EnumerableSet.AddressSet; - function _isExternallyGranted(address _account, IKyc.KycStatus _kycStatus) internal view returns (bool) { + // solhint-disable-next-line func-name-mixedcase + function _initialize_ExternalKycLists(address[] calldata _kycLists) internal override { + uint256 length = _kycLists.length; + for (uint256 index; index < length; ) { + _checkValidAddress(_kycLists[index]); + _addExternalList(_KYC_MANAGEMENT_STORAGE_POSITION, _kycLists[index]); + unchecked { + ++index; + } + } + _setExternalListInitialized(_KYC_MANAGEMENT_STORAGE_POSITION); + } + + function _isExternallyGranted(address _account, IKyc.KycStatus _kycStatus) internal view override returns (bool) { ExternalListDataStorage storage externalKycListStorage = _externalListStorage(_KYC_MANAGEMENT_STORAGE_POSITION); uint256 length = _getExternalListsCount(_KYC_MANAGEMENT_STORAGE_POSITION); for (uint256 index; index < length; ) { @@ -24,4 +37,8 @@ abstract contract ExternalKycListManagementStorageWrapper is ExternalListManagem } return true; } + + function _isKycExternalInitialized() internal view override returns (bool) { + return _externalListStorage(_KYC_MANAGEMENT_STORAGE_POSITION).initialized; + } } diff --git a/packages/ats/contracts/contracts/layer_0/core/externalLists/ExternalListManagementStorageWrapper.sol b/packages/ats/contracts/contracts/layer_0/core/externalLists/ExternalListManagementStorageWrapper.sol index 9c7b5a34a..a67c58691 100644 --- a/packages/ats/contracts/contracts/layer_0/core/externalLists/ExternalListManagementStorageWrapper.sol +++ b/packages/ats/contracts/contracts/layer_0/core/externalLists/ExternalListManagementStorageWrapper.sol @@ -14,13 +14,16 @@ abstract contract ExternalListManagementStorageWrapper is SsiManagementStorageWr EnumerableSet.AddressSet list; } + error ZeroAddressNotAllowed(); + function _updateExternalLists( bytes32 _position, address[] calldata _lists, bool[] calldata _actives - ) internal returns (bool success_) { + ) internal override returns (bool success_) { uint256 length = _lists.length; for (uint256 index; index < length; ) { + _checkValidAddress(_lists[index]); if (_actives[index]) { if (!_isExternalList(_position, _lists[index])) { _addExternalList(_position, _lists[index]); @@ -40,19 +43,23 @@ abstract contract ExternalListManagementStorageWrapper is SsiManagementStorageWr success_ = true; } - function _addExternalList(bytes32 _position, address _list) internal returns (bool success_) { + function _addExternalList(bytes32 _position, address _list) internal override returns (bool success_) { success_ = _externalListStorage(_position).list.add(_list); } - function _removeExternalList(bytes32 _position, address _list) internal returns (bool success_) { + function _removeExternalList(bytes32 _position, address _list) internal override returns (bool success_) { success_ = _externalListStorage(_position).list.remove(_list); } - function _isExternalList(bytes32 _position, address _list) internal view returns (bool) { + function _setExternalListInitialized(bytes32 _position) internal override { + _externalListStorage(_position).initialized = true; + } + + function _isExternalList(bytes32 _position, address _list) internal view override returns (bool) { return _externalListStorage(_position).list.contains(_list); } - function _getExternalListsCount(bytes32 _position) internal view returns (uint256 count_) { + function _getExternalListsCount(bytes32 _position) internal view override returns (uint256 count_) { count_ = _externalListStorage(_position).list.length(); } @@ -60,7 +67,7 @@ abstract contract ExternalListManagementStorageWrapper is SsiManagementStorageWr bytes32 _position, uint256 _pageIndex, uint256 _pageLength - ) internal view returns (address[] memory members_) { + ) internal view override returns (address[] memory members_) { members_ = _externalListStorage(_position).list.getFromSet(_pageIndex, _pageLength); } diff --git a/packages/ats/contracts/contracts/layer_0/core/externalPauses/ExternalPauseManagementStorageWrapper.sol b/packages/ats/contracts/contracts/layer_0/core/externalPauses/ExternalPauseManagementStorageWrapper.sol index ce04effaa..c27ddd73a 100644 --- a/packages/ats/contracts/contracts/layer_0/core/externalPauses/ExternalPauseManagementStorageWrapper.sol +++ b/packages/ats/contracts/contracts/layer_0/core/externalPauses/ExternalPauseManagementStorageWrapper.sol @@ -11,13 +11,26 @@ abstract contract ExternalPauseManagementStorageWrapper is ControlListStorageWra using LibCommon for EnumerableSet.AddressSet; using EnumerableSet for EnumerableSet.AddressSet; - function _isExternallyPaused() internal view returns (bool) { + // solhint-disable-next-line func-name-mixedcase + function _initialize_ExternalPauses(address[] calldata _pauses) internal override { + uint256 length = _pauses.length; + for (uint256 index; index < length; ) { + _checkValidAddress(_pauses[index]); + _addExternalList(_PAUSE_MANAGEMENT_STORAGE_POSITION, _pauses[index]); + unchecked { + ++index; + } + } + _setExternalListInitialized(_PAUSE_MANAGEMENT_STORAGE_POSITION); + } + + function _isExternallyPaused() internal view override returns (bool) { ExternalListDataStorage storage externalPauseDataStorage = _externalListStorage( _PAUSE_MANAGEMENT_STORAGE_POSITION ); uint256 length = _getExternalListsCount(_PAUSE_MANAGEMENT_STORAGE_POSITION); - for (uint256 index; index < length; ++index) { + for (uint256 index = 0; index < length; ) { if (IExternalPause(externalPauseDataStorage.list.at(index)).isPaused()) return true; unchecked { ++index; @@ -25,4 +38,8 @@ abstract contract ExternalPauseManagementStorageWrapper is ControlListStorageWra } return false; } + + function _isExternalPauseInitialized() internal view override returns (bool) { + return _externalListStorage(_PAUSE_MANAGEMENT_STORAGE_POSITION).initialized; + } } diff --git a/packages/ats/contracts/contracts/layer_0/core/kyc/KycStorageWrapper.sol b/packages/ats/contracts/contracts/layer_0/core/kyc/KycStorageWrapper.sol index 30d1da986..33d7a737f 100644 --- a/packages/ats/contracts/contracts/layer_0/core/kyc/KycStorageWrapper.sol +++ b/packages/ats/contracts/contracts/layer_0/core/kyc/KycStorageWrapper.sol @@ -5,9 +5,6 @@ import { IKyc } from "../../../layer_1/interfaces/kyc/IKyc.sol"; import { ExternalKycListManagementStorageWrapper } from "../externalKycLists/ExternalKycListManagementStorageWrapper.sol"; -import { - ExternalKycListManagementStorageWrapper -} from "../externalKycLists/ExternalKycListManagementStorageWrapper.sol"; import { _KYC_STORAGE_POSITION } from "../../constants/storagePositions.sol"; import { LibCommon } from "../../common/libraries/LibCommon.sol"; import { EnumerableSet } from "@openzeppelin/contracts/utils/structs/EnumerableSet.sol"; @@ -24,17 +21,23 @@ abstract contract KycStorageWrapper is ExternalKycListManagementStorageWrapper { bool internalKycActivated; } - modifier onlyValidDates(uint256 _validFrom, uint256 _validTo) { + modifier onlyValidDates(uint256 _validFrom, uint256 _validTo) override { _checkValidDates(_validFrom, _validTo); _; } - modifier onlyValidKycStatus(IKyc.KycStatus _kycStatus, address _account) { + modifier onlyValidKycStatus(IKyc.KycStatus _kycStatus, address _account) override { _checkValidKycStatus(_kycStatus, _account); _; } - function _setInternalKyc(bool _activated) internal returns (bool success_) { + function _initializeInternalKyc(bool _internalKycActivated) internal override { + KycStorage storage kycStorage = _kycStorage(); + kycStorage.initialized = true; + kycStorage.internalKycActivated = _internalKycActivated; + } + + function _setInternalKyc(bool _activated) internal override returns (bool success_) { _kycStorage().internalKycActivated = _activated; success_ = true; } @@ -45,20 +48,20 @@ abstract contract KycStorageWrapper is ExternalKycListManagementStorageWrapper { uint256 _validFrom, uint256 _validTo, address _issuer - ) internal returns (bool success_) { + ) internal override returns (bool success_) { _kycStorage().kyc[_account] = IKyc.KycData(_validFrom, _validTo, _vcId, _issuer, IKyc.KycStatus.GRANTED); _kycStorage().kycAddressesByStatus[IKyc.KycStatus.GRANTED].add(_account); success_ = true; } - function _revokeKyc(address _account) internal returns (bool success_) { + function _revokeKyc(address _account) internal override returns (bool success_) { delete _kycStorage().kyc[_account]; _kycStorage().kycAddressesByStatus[IKyc.KycStatus.GRANTED].remove(_account); success_ = true; } - function _getKycStatusFor(address _account) internal view virtual returns (IKyc.KycStatus kycStatus_) { + function _getKycStatusFor(address _account) internal view override returns (IKyc.KycStatus kycStatus_) { IKyc.KycData memory kycFor = _getKycFor(_account); if (kycFor.validTo < _blockTimestamp()) return IKyc.KycStatus.NOT_GRANTED; @@ -79,11 +82,13 @@ abstract contract KycStorageWrapper is ExternalKycListManagementStorageWrapper { return kycFor.status; } - function _getKycFor(address _account) internal view virtual returns (IKyc.KycData memory) { + function _getKycFor(address _account) internal view override returns (IKyc.KycData memory) { return _kycStorage().kyc[_account]; } - function _getKycAccountsCount(IKyc.KycStatus _kycStatus) internal view virtual returns (uint256 kycAccountsCount_) { + function _getKycAccountsCount( + IKyc.KycStatus _kycStatus + ) internal view override returns (uint256 kycAccountsCount_) { kycAccountsCount_ = _kycStorage().kycAddressesByStatus[_kycStatus].length(); } @@ -91,7 +96,7 @@ abstract contract KycStorageWrapper is ExternalKycListManagementStorageWrapper { IKyc.KycStatus _kycStatus, uint256 _pageIndex, uint256 _pageLength - ) internal view virtual returns (address[] memory accounts_, IKyc.KycData[] memory kycData_) { + ) internal view override returns (address[] memory accounts_, IKyc.KycData[] memory kycData_) { accounts_ = _kycStorage().kycAddressesByStatus[_kycStatus].getFromSet(_pageIndex, _pageLength); uint256 totalAccounts = accounts_.length; @@ -106,21 +111,25 @@ abstract contract KycStorageWrapper is ExternalKycListManagementStorageWrapper { } } - function _verifyKycStatus(IKyc.KycStatus _kycStatus, address _account) internal view virtual returns (bool) { + function _verifyKycStatus(IKyc.KycStatus _kycStatus, address _account) internal view override returns (bool) { KycStorage storage kycStorage = _kycStorage(); bool internalKycValid = !kycStorage.internalKycActivated || _getKycStatusFor(_account) == _kycStatus; return internalKycValid && _isExternallyGranted(_account, _kycStatus); } - function _checkValidKycStatus(IKyc.KycStatus _kycStatus, address _account) internal view { + function _checkValidKycStatus(IKyc.KycStatus _kycStatus, address _account) internal view override { if (!_verifyKycStatus(_kycStatus, _account)) revert IKyc.InvalidKycStatus(); } - function _isInternalKycActivated() internal view returns (bool) { + function _isInternalKycActivated() internal view override returns (bool) { return _kycStorage().internalKycActivated; } + function _isKycInitialized() internal view override returns (bool) { + return _kycStorage().initialized; + } + function _kycStorage() internal pure returns (KycStorage storage kyc_) { bytes32 position = _KYC_STORAGE_POSITION; // solhint-disable-next-line no-inline-assembly diff --git a/packages/ats/contracts/contracts/layer_0/core/nonce/NonceStorageWrapper.sol b/packages/ats/contracts/contracts/layer_0/core/nonce/NonceStorageWrapper.sol new file mode 100644 index 000000000..aad6643c5 --- /dev/null +++ b/packages/ats/contracts/contracts/layer_0/core/nonce/NonceStorageWrapper.sol @@ -0,0 +1,27 @@ +// SPDX-License-Identifier: Apache-2.0 +pragma solidity >=0.8.0 <0.9.0; + +import { Internals } from "../../Internals.sol"; +import { _NONCE_STORAGE_POSITION } from "../../constants/storagePositions.sol"; + +abstract contract NonceStorageWrapper is Internals { + struct NonceDataStorage { + mapping(address => uint256) nonces; + } + + function _setNonceFor(uint256 _nounce, address _account) internal override { + _nonceStorage().nonces[_account] = _nounce; + } + + function _getNonceFor(address _account) internal view override returns (uint256) { + return _nonceStorage().nonces[_account]; + } + + function _nonceStorage() internal pure returns (NonceDataStorage storage nonces_) { + bytes32 position = _NONCE_STORAGE_POSITION; + // solhint-disable-next-line no-inline-assembly + assembly { + nonces_.slot := position + } + } +} diff --git a/packages/ats/contracts/contracts/layer_0/core/pause/PauseStorageWrapper.sol b/packages/ats/contracts/contracts/layer_0/core/pause/PauseStorageWrapper.sol index 7e0f057fb..bfa5fd9ec 100644 --- a/packages/ats/contracts/contracts/layer_0/core/pause/PauseStorageWrapper.sol +++ b/packages/ats/contracts/contracts/layer_0/core/pause/PauseStorageWrapper.sol @@ -11,18 +11,18 @@ abstract contract PauseStorageWrapper is IPauseStorageWrapper, ExternalPauseMana } // modifiers - modifier onlyPaused() { + modifier onlyPaused() override { _checkPaused(); _; } - modifier onlyUnpaused() { + modifier onlyUnpaused() override { _checkUnpaused(); _; } // Internal - function _setPause(bool _paused) internal { + function _setPause(bool _paused) internal override { _pauseStorage().paused = _paused; if (_paused) { emit TokenPaused(_msgSender()); @@ -31,11 +31,11 @@ abstract contract PauseStorageWrapper is IPauseStorageWrapper, ExternalPauseMana emit TokenUnpaused(_msgSender()); } - function _isPaused() internal view returns (bool) { + function _isPaused() internal view override returns (bool) { return (_pauseStorage().paused || _isExternallyPaused()); } - function _checkUnpaused() internal view { + function _checkUnpaused() internal view override { if (_isPaused()) { revert TokenIsPaused(); } diff --git a/packages/ats/contracts/contracts/layer_0/core/protectedPartitions/ProtectedPartitionsStorageWrapper.sol b/packages/ats/contracts/contracts/layer_0/core/protectedPartitions/ProtectedPartitionsStorageWrapper.sol index 9de4c0e19..7c1e7b263 100644 --- a/packages/ats/contracts/contracts/layer_0/core/protectedPartitions/ProtectedPartitionsStorageWrapper.sol +++ b/packages/ats/contracts/contracts/layer_0/core/protectedPartitions/ProtectedPartitionsStorageWrapper.sol @@ -17,29 +17,41 @@ import { getMessageHashClearingCreateHold, getMessageHashClearingRedeem, verify -} from "../../../layer_1/protectedPartitions/signatureVerification.sol"; +} from "../../../layer_0/common/libraries/ERC712Lib.sol"; +import { Strings } from "@openzeppelin/contracts/utils/Strings.sol"; abstract contract ProtectedPartitionsStorageWrapper is IProtectedPartitionsStorageWrapper, KycStorageWrapper { struct ProtectedPartitionsDataStorage { bool initialized; bool arePartitionsProtected; - string contractName; - string contractVersion; - mapping(address => uint256) nounces; + // solhint-disable-next-line var-name-mixedcase + string DEPRECATED_contractName; + // solhint-disable-next-line var-name-mixedcase + string DEPRECATED_contractVersion; + // solhint-disable-next-line var-name-mixedcase + mapping(address => uint256) DEPRECATED_nounces; } // modifiers - modifier onlyProtectedPartitions() { + modifier onlyProtectedPartitions() override { _checkProtectedPartitions(); _; } - modifier onlyValidParticipant(bytes32 _partition) { + modifier onlyValidParticipant(bytes32 _partition) override { _checkValidPartition(_partition); _; } - function _setProtectedPartitions(bool _protected) internal { + // solhint-disable-next-line func-name-mixedcase + function _initialize_ProtectedPartitions(bool _protectPartitions) internal override returns (bool success_) { + ProtectedPartitionsDataStorage storage protectedPartitionsStorage = _protectedPartitionsStorage(); + protectedPartitionsStorage.arePartitionsProtected = _protectPartitions; + protectedPartitionsStorage.initialized = true; + success_ = true; + } + + function _setProtectedPartitions(bool _protected) internal override { _protectedPartitionsStorage().arePartitionsProtected = _protected; if (_protected) { emit PartitionsProtected(_msgSender()); @@ -48,29 +60,18 @@ abstract contract ProtectedPartitionsStorageWrapper is IProtectedPartitionsStora emit PartitionsUnProtected(_msgSender()); } - function _setNounce(uint256 _nounce, address _account) internal { - _protectedPartitionsStorage().nounces[_account] = _nounce; - } - - function _arePartitionsProtected() internal view returns (bool) { + function _arePartitionsProtected() internal view override returns (bool) { return _protectedPartitionsStorage().arePartitionsProtected; } - function _getNounceFor(address _account) internal view returns (uint256) { - return _protectedPartitionsStorage().nounces[_account]; - } - function _checkTransferSignature( bytes32 _partition, address _from, address _to, uint256 _amount, - uint256 _deadline, - uint256 _nounce, - bytes calldata _signature - ) internal view { - if (!_isTransferSignatureValid(_partition, _from, _to, _amount, _deadline, _nounce, _signature)) - revert WrongSignature(); + IProtectedPartitionsStorageWrapper.ProtectionData calldata _protectionData + ) internal view override { + if (!_isTransferSignatureValid(_partition, _from, _to, _amount, _protectionData)) revert WrongSignature(); } function _isTransferSignatureValid( @@ -78,18 +79,23 @@ abstract contract ProtectedPartitionsStorageWrapper is IProtectedPartitionsStora address _from, address _to, uint256 _amount, - uint256 _deadline, - uint256 _nounce, - bytes calldata _signature - ) internal view returns (bool) { - bytes32 functionHash = getMessageHashTransfer(_partition, _from, _to, _amount, _deadline, _nounce); + IProtectedPartitionsStorageWrapper.ProtectionData calldata _protectionData + ) internal view override returns (bool) { + bytes32 functionHash = getMessageHashTransfer( + _partition, + _from, + _to, + _amount, + _protectionData.deadline, + _protectionData.nounce + ); return verify( _from, functionHash, - _signature, - _protectedPartitionsStorage().contractName, - _protectedPartitionsStorage().contractVersion, + _protectionData.signature, + _getName(), + Strings.toString(_getResolverProxyVersion()), _blockChainid(), address(this) ); @@ -99,30 +105,31 @@ abstract contract ProtectedPartitionsStorageWrapper is IProtectedPartitionsStora bytes32 _partition, address _from, uint256 _amount, - uint256 _deadline, - uint256 _nounce, - bytes calldata _signature - ) internal view { - if (!_isRedeemSignatureValid(_partition, _from, _amount, _deadline, _nounce, _signature)) - revert WrongSignature(); + IProtectedPartitionsStorageWrapper.ProtectionData calldata _protectionData + ) internal view override { + if (!_isRedeemSignatureValid(_partition, _from, _amount, _protectionData)) revert WrongSignature(); } function _isRedeemSignatureValid( bytes32 _partition, address _from, uint256 _amount, - uint256 _deadline, - uint256 _nounce, - bytes calldata _signature - ) internal view returns (bool) { - bytes32 functionHash = getMessageHashRedeem(_partition, _from, _amount, _deadline, _nounce); + IProtectedPartitionsStorageWrapper.ProtectionData calldata _protectionData + ) internal view override returns (bool) { + bytes32 functionHash = getMessageHashRedeem( + _partition, + _from, + _amount, + _protectionData.deadline, + _protectionData.nounce + ); return verify( _from, functionHash, - _signature, - _protectedPartitionsStorage().contractName, - _protectedPartitionsStorage().contractVersion, + _protectionData.signature, + _getName(), + Strings.toString(_getResolverProxyVersion()), _blockChainid(), address(this) ); @@ -133,7 +140,7 @@ abstract contract ProtectedPartitionsStorageWrapper is IProtectedPartitionsStora address _from, ProtectedHold memory _protectedHold, bytes calldata _signature - ) internal view { + ) internal view override { if (!_isCreateHoldSignatureValid(_partition, _from, _protectedHold, _signature)) revert WrongSignature(); } @@ -142,7 +149,7 @@ abstract contract ProtectedPartitionsStorageWrapper is IProtectedPartitionsStora address _from, ProtectedHold memory _protectedHold, bytes calldata _signature - ) internal view returns (bool) { + ) internal view override returns (bool) { bytes32 functionHash = getMessageHashCreateHold(_partition, _from, _protectedHold); return @@ -150,8 +157,8 @@ abstract contract ProtectedPartitionsStorageWrapper is IProtectedPartitionsStora _from, functionHash, _signature, - _protectedPartitionsStorage().contractName, - _protectedPartitionsStorage().contractVersion, + _getName(), + Strings.toString(_getResolverProxyVersion()), _blockChainid(), address(this) ); @@ -161,7 +168,7 @@ abstract contract ProtectedPartitionsStorageWrapper is IProtectedPartitionsStora IClearing.ProtectedClearingOperation memory _protectedClearingOperation, Hold memory _hold, bytes calldata _signature - ) internal view { + ) internal view override { if (!_isClearingCreateHoldSignatureValid(_protectedClearingOperation, _hold, _signature)) revert WrongSignature(); } @@ -170,7 +177,7 @@ abstract contract ProtectedPartitionsStorageWrapper is IProtectedPartitionsStora IClearing.ProtectedClearingOperation memory _protectedClearingOperation, Hold memory _hold, bytes calldata _signature - ) internal view returns (bool) { + ) internal view override returns (bool) { bytes32 functionHash = getMessageHashClearingCreateHold(_protectedClearingOperation, _hold); return @@ -178,8 +185,8 @@ abstract contract ProtectedPartitionsStorageWrapper is IProtectedPartitionsStora _protectedClearingOperation.from, functionHash, _signature, - _protectedPartitionsStorage().contractName, - _protectedPartitionsStorage().contractVersion, + _getName(), + Strings.toString(_getResolverProxyVersion()), _blockChainid(), address(this) ); @@ -190,7 +197,7 @@ abstract contract ProtectedPartitionsStorageWrapper is IProtectedPartitionsStora uint256 _amount, address _to, bytes calldata _signature - ) internal view { + ) internal view override { if (!_isClearingTransferSignatureValid(_protectedClearingOperation, _to, _amount, _signature)) revert WrongSignature(); } @@ -200,7 +207,7 @@ abstract contract ProtectedPartitionsStorageWrapper is IProtectedPartitionsStora address _to, uint256 _amount, bytes calldata _signature - ) internal view returns (bool) { + ) internal view override returns (bool) { bytes32 functionHash = getMessageHashClearingTransfer(_protectedClearingOperation, _to, _amount); return @@ -208,8 +215,8 @@ abstract contract ProtectedPartitionsStorageWrapper is IProtectedPartitionsStora _protectedClearingOperation.from, functionHash, _signature, - _protectedPartitionsStorage().contractName, - _protectedPartitionsStorage().contractVersion, + _getName(), + Strings.toString(_getResolverProxyVersion()), _blockChainid(), address(this) ); @@ -219,7 +226,7 @@ abstract contract ProtectedPartitionsStorageWrapper is IProtectedPartitionsStora IClearing.ProtectedClearingOperation calldata _protectedClearingOperation, uint256 _amount, bytes calldata _signature - ) internal view { + ) internal view override { if (!_isClearingRedeemSignatureValid(_protectedClearingOperation, _amount, _signature)) revert WrongSignature(); } @@ -227,7 +234,7 @@ abstract contract ProtectedPartitionsStorageWrapper is IProtectedPartitionsStora IClearing.ProtectedClearingOperation calldata _protectedClearingOperation, uint256 _amount, bytes calldata _signature - ) internal view returns (bool) { + ) internal view override returns (bool) { bytes32 functionHash = getMessageHashClearingRedeem(_protectedClearingOperation, _amount); return @@ -235,26 +242,30 @@ abstract contract ProtectedPartitionsStorageWrapper is IProtectedPartitionsStora _protectedClearingOperation.from, functionHash, _signature, - _protectedPartitionsStorage().contractName, - _protectedPartitionsStorage().contractVersion, + _getName(), + Strings.toString(_getResolverProxyVersion()), _blockChainid(), address(this) ); } - function _checkRoleForPartition(bytes32 partition, address account) internal view { + function _checkRoleForPartition(bytes32 partition, address account) internal view override { _checkRole(_calculateRoleForPartition(partition), account); } - function _checkProtectedPartitions() internal view { + function _checkProtectedPartitions() internal view override { if (!_arePartitionsProtected()) revert PartitionsAreUnProtected(); } - function _protectedPartitionsRole(bytes32 _partition) internal pure returns (bytes32) { + function _isProtectedPartitionInitialized() internal view override returns (bool) { + return _protectedPartitionsStorage().initialized; + } + + function _protectedPartitionsRole(bytes32 _partition) internal pure override returns (bytes32) { return keccak256(abi.encodePacked(_PROTECTED_PARTITIONS_PARTICIPANT_ROLE, _partition)); } - function _calculateRoleForPartition(bytes32 partition) internal pure returns (bytes32 role) { + function _calculateRoleForPartition(bytes32 partition) internal pure override returns (bytes32 role) { role = keccak256(abi.encode(_PROTECTED_PARTITIONS_PARTICIPANT_ROLE, partition)); } diff --git a/packages/ats/contracts/contracts/layer_0/core/resolverProxy/ResolverProxyStorageWrapper.sol b/packages/ats/contracts/contracts/layer_0/core/resolverProxy/ResolverProxyStorageWrapper.sol new file mode 100644 index 000000000..da5b4866f --- /dev/null +++ b/packages/ats/contracts/contracts/layer_0/core/resolverProxy/ResolverProxyStorageWrapper.sol @@ -0,0 +1,46 @@ +// SPDX-License-Identifier: Apache-2.0 +pragma solidity >=0.8.0 <0.9.0; + +import { IBusinessLogicResolver } from "../../../interfaces/resolver/IBusinessLogicResolver.sol"; +import { _RESOLVER_PROXY_STORAGE_POSITION } from "../../../layer_1/constants/storagePositions.sol"; +import { NonceStorageWrapper } from "../nonce/NonceStorageWrapper.sol"; + +// Remember to add the loupe functions from DiamondLoupeFacet.sol.sol to the resolverProxy. +// The loupe functions are required by the EIP2535 ResolverProxys standard +abstract contract ResolverProxyStorageWrapper is NonceStorageWrapper { + struct FacetIdsAndSelectorPosition { + bytes32 facetId; + uint16 selectorPosition; + } + + struct ResolverProxyStorage { + IBusinessLogicResolver resolver; + bytes32 resolverProxyConfigurationId; + uint256 version; + // AccessControl instead of owned. Only DEFAULT_ADMIN role. + } + + function _getBusinessLogicResolver() internal view override returns (IBusinessLogicResolver) { + return _resolverProxyStorage().resolver; + } + + function _getResolverProxyConfigurationId() internal view override returns (bytes32) { + return _resolverProxyStorage().resolverProxyConfigurationId; + } + + function _getResolverProxyVersion() internal view override returns (uint256) { + return _resolverProxyStorage().version; + } + + /** + * @dev This belongs to the ResolverProxyUnstructured contract. + * Since it is not in the common inheritance chain we redeclare it here + */ + function _resolverProxyStorage() internal pure returns (ResolverProxyStorage storage ds) { + bytes32 position = _RESOLVER_PROXY_STORAGE_POSITION; + // solhint-disable-next-line no-inline-assembly + assembly { + ds.slot := position + } + } +} diff --git a/packages/ats/contracts/contracts/layer_0/core/ssi/SsiManagementStorageWrapper.sol b/packages/ats/contracts/contracts/layer_0/core/ssi/SsiManagementStorageWrapper.sol index c7fb1c22c..b504e15e4 100644 --- a/packages/ats/contracts/contracts/layer_0/core/ssi/SsiManagementStorageWrapper.sol +++ b/packages/ats/contracts/contracts/layer_0/core/ssi/SsiManagementStorageWrapper.sol @@ -17,41 +17,43 @@ abstract contract SsiManagementStorageWrapper is AccessControlStorageWrapper { } // modifiers - modifier onlyIssuerListed(address _issuer) { + modifier onlyIssuerListed(address _issuer) override { _checkIssuer(_issuer); _; } // Internal - function _setRevocationRegistryAddress(address _revocationRegistryAddress) internal returns (bool success_) { + function _setRevocationRegistryAddress( + address _revocationRegistryAddress + ) internal override returns (bool success_) { _ssiManagementStorage().revocationRegistry = _revocationRegistryAddress; return true; } - function _addIssuer(address _issuer) internal returns (bool success_) { + function _addIssuer(address _issuer) internal override returns (bool success_) { success_ = _ssiManagementStorage().issuerList.add(_issuer); } - function _removeIssuer(address _issuer) internal returns (bool success_) { + function _removeIssuer(address _issuer) internal override returns (bool success_) { success_ = _ssiManagementStorage().issuerList.remove(_issuer); } - function _getRevocationRegistryAddress() internal view returns (address revocationRegistryAddress_) { + function _getRevocationRegistryAddress() internal view override returns (address revocationRegistryAddress_) { revocationRegistryAddress_ = _ssiManagementStorage().revocationRegistry; } - function _getIssuerListCount() internal view returns (uint256 issuerListCount_) { + function _getIssuerListCount() internal view override returns (uint256 issuerListCount_) { issuerListCount_ = _ssiManagementStorage().issuerList.length(); } function _getIssuerListMembers( uint256 _pageIndex, uint256 _pageLength - ) internal view returns (address[] memory members_) { + ) internal view override returns (address[] memory members_) { return _ssiManagementStorage().issuerList.getFromSet(_pageIndex, _pageLength); } - function _isIssuer(address _issuer) internal view returns (bool) { + function _isIssuer(address _issuer) internal view override returns (bool) { return _ssiManagementStorage().issuerList.contains(_issuer); } diff --git a/packages/ats/contracts/contracts/layer_0/corporateActions/CorporateActionsStorageWrapper.sol b/packages/ats/contracts/contracts/layer_0/corporateActions/CorporateActionsStorageWrapper.sol index 1576c9d7e..36f70d9bd 100644 --- a/packages/ats/contracts/contracts/layer_0/corporateActions/CorporateActionsStorageWrapper.sol +++ b/packages/ats/contracts/contracts/layer_0/corporateActions/CorporateActionsStorageWrapper.sol @@ -1,10 +1,6 @@ // SPDX-License-Identifier: Apache-2.0 pragma solidity >=0.8.0 <0.9.0; -import { - ICorporateActionsStorageWrapper, - CorporateActionDataStorage -} from "../../layer_1/interfaces/corporateActions/ICorporateActionsStorageWrapper.sol"; import { ICorporateActionsStorageWrapper, CorporateActionDataStorage @@ -18,12 +14,12 @@ abstract contract CorporateActionsStorageWrapper is ClearingStorageWrapper1 { using LibCommon for EnumerableSet.Bytes32Set; using EnumerableSet for EnumerableSet.Bytes32Set; - modifier validateDates(uint256 _firstDate, uint256 _secondDate) { + modifier validateDates(uint256 _firstDate, uint256 _secondDate) override { _checkDates(_firstDate, _secondDate); _; } - modifier onlyMatchingActionType(bytes32 _actionType, uint256 _index) { + modifier onlyMatchingActionType(bytes32 _actionType, uint256 _index) override { _checkMatchingActionType(_actionType, _index); _; } @@ -32,19 +28,41 @@ abstract contract CorporateActionsStorageWrapper is ClearingStorageWrapper1 { function _addCorporateAction( bytes32 _actionType, bytes memory _data - ) internal returns (bool success_, bytes32 corporateActionId_, uint256 corporateActionIndexByType_) { + ) internal override returns (bytes32 corporateActionId_, uint256 corporateActionIdByType_) { CorporateActionDataStorage storage corporateActions_ = _corporateActionsStorage(); + + bytes32 contentHash = keccak256(abi.encode(_actionType, _data)); + if (corporateActions_.actionsContentHashes[contentHash]) { + return (bytes32(0), 0); + } + corporateActions_.actionsContentHashes[contentHash] = true; + corporateActionId_ = bytes32(corporateActions_.actions.length() + 1); // TODO: Review when it can return false. - success_ = - corporateActions_.actions.add(corporateActionId_) && - corporateActions_.actionsByType[_actionType].add(corporateActionId_); + bool success = corporateActions_.actions.add(corporateActionId_); + + if (!success) { + return (bytes32(0), 0); + } + + corporateActions_.actionsByType[_actionType].push(corporateActionId_); + + corporateActionIdByType_ = _getCorporateActionCountByType(_actionType); + corporateActions_.actionsData[corporateActionId_].actionType = _actionType; corporateActions_.actionsData[corporateActionId_].data = _data; - corporateActionIndexByType_ = _getCorporateActionCountByType(_actionType); + corporateActions_.actionsData[corporateActionId_].actionIdByType = corporateActionIdByType_; } - function _updateCorporateActionResult(bytes32 actionId, uint256 resultId, bytes memory newResult) internal { + function _updateCorporateActionData(bytes32 _actionId, bytes memory _newData) internal override { + _corporateActionsStorage().actionsData[_actionId].data = _newData; + } + + function _updateCorporateActionResult( + bytes32 actionId, + uint256 resultId, + bytes memory newResult + ) internal override { CorporateActionDataStorage storage corporateActions_ = _corporateActionsStorage(); bytes[] memory results = corporateActions_.actionsData[actionId].results; @@ -62,52 +80,70 @@ abstract contract CorporateActionsStorageWrapper is ClearingStorageWrapper1 { function _getCorporateAction( bytes32 _corporateActionId - ) internal view returns (bytes32 actionType_, bytes memory data_) { + ) internal view override returns (bytes32 actionType_, uint256 actionTypeId_, bytes memory data_) { CorporateActionDataStorage storage corporateActions_ = _corporateActionsStorage(); actionType_ = corporateActions_.actionsData[_corporateActionId].actionType; data_ = corporateActions_.actionsData[_corporateActionId].data; + actionTypeId_ = corporateActions_.actionsData[_corporateActionId].actionIdByType; } - function _getCorporateActionCount() internal view virtual returns (uint256 corporateActionCount_) { + function _getCorporateActionCount() internal view virtual override returns (uint256 corporateActionCount_) { return _corporateActionsStorage().actions.length(); } function _getCorporateActionIds( uint256 _pageIndex, uint256 _pageLength - ) internal view returns (bytes32[] memory corporateActionIds_) { + ) internal view override returns (bytes32[] memory corporateActionIds_) { corporateActionIds_ = _corporateActionsStorage().actions.getFromSet(_pageIndex, _pageLength); } - function _getCorporateActionCountByType(bytes32 _actionType) internal view returns (uint256 corporateActionCount_) { - return _corporateActionsStorage().actionsByType[_actionType].length(); + function _getCorporateActionCountByType( + bytes32 _actionType + ) internal view override returns (uint256 corporateActionCount_) { + return _corporateActionsStorage().actionsByType[_actionType].length; + } + + function _getCorporateActionIdByTypeIndex( + bytes32 _actionType, + uint256 _typeIndex + ) internal view override returns (bytes32 corporateActionId_) { + return _corporateActionsStorage().actionsByType[_actionType][_typeIndex]; } function _getCorporateActionIdsByType( bytes32 _actionType, uint256 _pageIndex, uint256 _pageLength - ) internal view returns (bytes32[] memory corporateActionIds_) { - corporateActionIds_ = _corporateActionsStorage().actionsByType[_actionType].getFromSet(_pageIndex, _pageLength); + ) internal view override returns (bytes32[] memory corporateActionIds_) { + (uint256 start, uint256 end) = LibCommon.getStartAndEnd(_pageIndex, _pageLength); + + corporateActionIds_ = new bytes32[](LibCommon.getSize(start, end, _getCorporateActionCountByType(_actionType))); + + CorporateActionDataStorage storage corporateActions = _corporateActionsStorage(); + + for (uint256 i = 0; i < corporateActionIds_.length; i++) { + corporateActionIds_[i] = corporateActions.actionsByType[_actionType][start + i]; + } } function _getCorporateActionResult( bytes32 actionId, uint256 resultId - ) internal view returns (bytes memory result_) { + ) internal view override returns (bytes memory result_) { if (_getCorporateActionResultCount(actionId) > resultId) result_ = _corporateActionsStorage().actionsData[actionId].results[resultId]; } - function _getCorporateActionResultCount(bytes32 actionId) internal view returns (uint256) { + function _getCorporateActionResultCount(bytes32 actionId) internal view override returns (uint256) { return _corporateActionsStorage().actionsData[actionId].results.length; } - function _getCorporateActionData(bytes32 actionId) internal view returns (bytes memory) { + function _getCorporateActionData(bytes32 actionId) internal view override returns (bytes memory) { return _corporateActionsStorage().actionsData[actionId].data; } - function _getUintResultAt(bytes32 _actionId, uint256 resultId) internal view returns (uint256) { + function _getUintResultAt(bytes32 _actionId, uint256 resultId) internal view override returns (uint256) { bytes memory data = _getCorporateActionResult(_actionId, resultId); uint256 bytesLength = data.length; @@ -124,6 +160,10 @@ abstract contract CorporateActionsStorageWrapper is ClearingStorageWrapper1 { return value; } + function _actionContentHashExists(bytes32 _contentHash) internal view override returns (bool) { + return _corporateActionsStorage().actionsContentHashes[_contentHash]; + } + function _corporateActionsStorage() internal pure returns (CorporateActionDataStorage storage corporateActions_) { bytes32 position = _CORPORATE_ACTION_STORAGE_POSITION; // solhint-disable-next-line no-inline-assembly diff --git a/packages/ats/contracts/contracts/layer_0/equity/EquityStorageWrapper.sol b/packages/ats/contracts/contracts/layer_0/equity/EquityStorageWrapper.sol index 5133cb7f6..f14a156e2 100644 --- a/packages/ats/contracts/contracts/layer_0/equity/EquityStorageWrapper.sol +++ b/packages/ats/contracts/contracts/layer_0/equity/EquityStorageWrapper.sol @@ -33,7 +33,7 @@ abstract contract EquityStorageWrapper is IEquityStorageWrapper, BondStorageWrap uint8 nominalValueDecimals; } - function _storeEquityDetails(IEquity.EquityDetailsData memory _equityDetailsData) internal { + function _storeEquityDetails(IEquity.EquityDetailsData memory _equityDetailsData) internal override { _equityStorage().votingRight = _equityDetailsData.votingRight; _equityStorage().informationRight = _equityDetailsData.informationRight; _equityStorage().liquidationRight = _equityDetailsData.liquidationRight; @@ -49,16 +49,16 @@ abstract contract EquityStorageWrapper is IEquityStorageWrapper, BondStorageWrap function _setDividends( IEquity.Dividend calldata _newDividend - ) internal returns (bool success_, bytes32 corporateActionId_, uint256 dividendId_) { + ) internal override returns (bytes32 corporateActionId_, uint256 dividendId_) { bytes memory data = abi.encode(_newDividend); - (success_, corporateActionId_, dividendId_) = _addCorporateAction(DIVIDEND_CORPORATE_ACTION_TYPE, data); + (corporateActionId_, dividendId_) = _addCorporateAction(DIVIDEND_CORPORATE_ACTION_TYPE, data); - _initDividend(success_, corporateActionId_, data); + _initDividend(corporateActionId_, data); } - function _initDividend(bool _success, bytes32 _actionId, bytes memory _data) internal { - if (!_success) { + function _initDividend(bytes32 _actionId, bytes memory _data) internal override { + if (_actionId == bytes32(0)) { revert IEquityStorageWrapper.DividendCreationFailed(); } @@ -70,16 +70,16 @@ abstract contract EquityStorageWrapper is IEquityStorageWrapper, BondStorageWrap function _setVoting( IEquity.Voting calldata _newVoting - ) internal returns (bool success_, bytes32 corporateActionId_, uint256 voteID_) { + ) internal override returns (bytes32 corporateActionId_, uint256 voteID_) { bytes memory data = abi.encode(_newVoting); - (success_, corporateActionId_, voteID_) = _addCorporateAction(VOTING_RIGHTS_CORPORATE_ACTION_TYPE, data); + (corporateActionId_, voteID_) = _addCorporateAction(VOTING_RIGHTS_CORPORATE_ACTION_TYPE, data); - _initVotingRights(success_, corporateActionId_, data); + _initVotingRights(corporateActionId_, data); } - function _initVotingRights(bool _success, bytes32 _actionId, bytes memory _data) internal { - if (!_success) { + function _initVotingRights(bytes32 _actionId, bytes memory _data) internal override { + if (_actionId == bytes32(0)) { revert IEquityStorageWrapper.VotingRightsCreationFailed(); } @@ -91,19 +91,19 @@ abstract contract EquityStorageWrapper is IEquityStorageWrapper, BondStorageWrap function _setScheduledBalanceAdjustment( IEquity.ScheduledBalanceAdjustment calldata _newBalanceAdjustment - ) internal returns (bool success_, bytes32 corporateActionId_, uint256 balanceAdjustmentID_) { + ) internal override returns (bytes32 corporateActionId_, uint256 balanceAdjustmentID_) { bytes memory data = abi.encode(_newBalanceAdjustment); - (success_, corporateActionId_, balanceAdjustmentID_) = _addCorporateAction( + (corporateActionId_, balanceAdjustmentID_) = _addCorporateAction( BALANCE_ADJUSTMENT_CORPORATE_ACTION_TYPE, data ); - _initBalanceAdjustment(success_, corporateActionId_, data); + _initBalanceAdjustment(corporateActionId_, data); } - function _initBalanceAdjustment(bool _success, bytes32 _actionId, bytes memory _data) internal { - if (!_success) { + function _initBalanceAdjustment(bytes32 _actionId, bytes memory _data) internal override { + if (_actionId == bytes32(0)) { revert IEquityStorageWrapper.BalanceAdjustmentCreationFailed(); } @@ -116,7 +116,7 @@ abstract contract EquityStorageWrapper is IEquityStorageWrapper, BondStorageWrap _addScheduledBalanceAdjustment(newBalanceAdjustment.executionDate, abi.encode(_actionId)); } - function _getEquityDetails() internal view returns (IEquity.EquityDetailsData memory equityDetails_) { + function _getEquityDetails() internal view override returns (IEquity.EquityDetailsData memory equityDetails_) { equityDetails_ = IEquity.EquityDetailsData({ votingRight: _equityStorage().votingRight, informationRight: _equityStorage().informationRight, @@ -140,14 +140,13 @@ abstract contract EquityStorageWrapper is IEquityStorageWrapper, BondStorageWrap */ function _getDividends( uint256 _dividendID - ) internal view returns (IEquity.RegisteredDividend memory registeredDividend_) { - bytes32 actionId = _corporateActionsStorage().actionsByType[DIVIDEND_CORPORATE_ACTION_TYPE].at(_dividendID - 1); + ) internal view override returns (IEquity.RegisteredDividend memory registeredDividend_) { + bytes32 actionId = _getCorporateActionIdByTypeIndex(DIVIDEND_CORPORATE_ACTION_TYPE, _dividendID - 1); - (, bytes memory data) = _getCorporateAction(actionId); + (, , bytes memory data) = _getCorporateAction(actionId); - if (data.length > 0) { - (registeredDividend_.dividend) = abi.decode(data, (IEquity.Dividend)); - } + assert(data.length > 0); + (registeredDividend_.dividend) = abi.decode(data, (IEquity.Dividend)); registeredDividend_.snapshotId = _getUintResultAt(actionId, SNAPSHOT_RESULT_ID); } @@ -161,7 +160,7 @@ abstract contract EquityStorageWrapper is IEquityStorageWrapper, BondStorageWrap function _getDividendsFor( uint256 _dividendID, address _account - ) internal view returns (IEquity.DividendFor memory dividendFor_) { + ) internal view override returns (IEquity.DividendFor memory dividendFor_) { IEquity.RegisteredDividend memory registeredDividend = _getDividends(_dividendID); dividendFor_.amount = registeredDividend.dividend.amount; @@ -183,7 +182,7 @@ abstract contract EquityStorageWrapper is IEquityStorageWrapper, BondStorageWrap function _getDividendAmountFor( uint256 _dividendID, address _account - ) internal view returns (IEquity.DividendAmountFor memory dividendAmountFor_) { + ) internal view override returns (IEquity.DividendAmountFor memory dividendAmountFor_) { IEquity.DividendFor memory dividendFor = _getDividendsFor(_dividendID, _account); if (!dividendFor.recordDateReached) return dividendAmountFor_; @@ -195,7 +194,7 @@ abstract contract EquityStorageWrapper is IEquityStorageWrapper, BondStorageWrap dividendAmountFor_.denominator = 10 ** (dividendFor.decimals + dividendFor.amountDecimals); } - function _getDividendsCount() internal view returns (uint256 dividendCount_) { + function _getDividendsCount() internal view override returns (uint256 dividendCount_) { return _getCorporateActionCountByType(DIVIDEND_CORPORATE_ACTION_TYPE); } @@ -203,7 +202,7 @@ abstract contract EquityStorageWrapper is IEquityStorageWrapper, BondStorageWrap uint256 _dividendID, uint256 _pageIndex, uint256 _pageLength - ) internal view returns (address[] memory holders_) { + ) internal view override returns (address[] memory holders_) { IEquity.RegisteredDividend memory registeredDividend = _getDividends(_dividendID); if (registeredDividend.dividend.recordDate >= _blockTimestamp()) return new address[](0); @@ -214,7 +213,7 @@ abstract contract EquityStorageWrapper is IEquityStorageWrapper, BondStorageWrap return _getTokenHolders(_pageIndex, _pageLength); } - function _getTotalDividendHolders(uint256 _dividendID) internal view returns (uint256) { + function _getTotalDividendHolders(uint256 _dividendID) internal view override returns (uint256) { IEquity.RegisteredDividend memory registeredDividend = _getDividends(_dividendID); if (registeredDividend.dividend.recordDate >= _blockTimestamp()) return 0; @@ -224,16 +223,15 @@ abstract contract EquityStorageWrapper is IEquityStorageWrapper, BondStorageWrap return _getTotalTokenHolders(); } - function _getVoting(uint256 _voteID) internal view returns (IEquity.RegisteredVoting memory registeredVoting_) { - bytes32 actionId = _corporateActionsStorage().actionsByType[VOTING_RIGHTS_CORPORATE_ACTION_TYPE].at( - _voteID - 1 - ); + function _getVoting( + uint256 _voteID + ) internal view override returns (IEquity.RegisteredVoting memory registeredVoting_) { + bytes32 actionId = _getCorporateActionIdByTypeIndex(VOTING_RIGHTS_CORPORATE_ACTION_TYPE, _voteID - 1); - (, bytes memory data) = _getCorporateAction(actionId); + (, , bytes memory data) = _getCorporateAction(actionId); - if (data.length > 0) { - (registeredVoting_.voting) = abi.decode(data, (IEquity.Voting)); - } + assert(data.length > 0); + (registeredVoting_.voting) = abi.decode(data, (IEquity.Voting)); registeredVoting_.snapshotId = _getUintResultAt(actionId, SNAPSHOT_RESULT_ID); } @@ -248,7 +246,7 @@ abstract contract EquityStorageWrapper is IEquityStorageWrapper, BondStorageWrap function _getVotingFor( uint256 _voteID, address _account - ) internal view returns (IEquity.VotingFor memory votingFor_) { + ) internal view override returns (IEquity.VotingFor memory votingFor_) { IEquity.RegisteredVoting memory registeredVoting = _getVoting(_voteID); votingFor_.recordDate = registeredVoting.voting.recordDate; @@ -265,7 +263,7 @@ abstract contract EquityStorageWrapper is IEquityStorageWrapper, BondStorageWrap ); } - function _getVotingCount() internal view returns (uint256 votingCount_) { + function _getVotingCount() internal view override returns (uint256 votingCount_) { return _getCorporateActionCountByType(VOTING_RIGHTS_CORPORATE_ACTION_TYPE); } @@ -273,7 +271,7 @@ abstract contract EquityStorageWrapper is IEquityStorageWrapper, BondStorageWrap uint256 _voteID, uint256 _pageIndex, uint256 _pageLength - ) internal view returns (address[] memory holders_) { + ) internal view override returns (address[] memory holders_) { IEquity.RegisteredVoting memory registeredVoting = _getVoting(_voteID); if (registeredVoting.voting.recordDate >= _blockTimestamp()) return new address[](0); @@ -284,7 +282,7 @@ abstract contract EquityStorageWrapper is IEquityStorageWrapper, BondStorageWrap return _getTokenHolders(_pageIndex, _pageLength); } - function _getTotalVotingHolders(uint256 _voteID) internal view returns (uint256) { + function _getTotalVotingHolders(uint256 _voteID) internal view override returns (uint256) { IEquity.RegisteredVoting memory registeredVoting = _getVoting(_voteID); if (registeredVoting.voting.recordDate >= _blockTimestamp()) return 0; @@ -294,21 +292,21 @@ abstract contract EquityStorageWrapper is IEquityStorageWrapper, BondStorageWrap return _getTotalTokenHolders(); } - function _getScheduledBalanceAdjusment( + function _getScheduledBalanceAdjustment( uint256 _balanceAdjustmentID - ) internal view returns (IEquity.ScheduledBalanceAdjustment memory balanceAdjustment_) { - bytes32 actionId = _corporateActionsStorage().actionsByType[BALANCE_ADJUSTMENT_CORPORATE_ACTION_TYPE].at( + ) internal view override returns (IEquity.ScheduledBalanceAdjustment memory balanceAdjustment_) { + bytes32 actionId = _getCorporateActionIdByTypeIndex( + BALANCE_ADJUSTMENT_CORPORATE_ACTION_TYPE, _balanceAdjustmentID - 1 ); - (, bytes memory data) = _getCorporateAction(actionId); + (, , bytes memory data) = _getCorporateAction(actionId); - if (data.length > 0) { - (balanceAdjustment_) = abi.decode(data, (IEquity.ScheduledBalanceAdjustment)); - } + assert(data.length > 0); + (balanceAdjustment_) = abi.decode(data, (IEquity.ScheduledBalanceAdjustment)); } - function _getScheduledBalanceAdjustmentsCount() internal view returns (uint256 balanceAdjustmentCount_) { + function _getScheduledBalanceAdjustmentsCount() internal view override returns (uint256 balanceAdjustmentCount_) { return _getCorporateActionCountByType(BALANCE_ADJUSTMENT_CORPORATE_ACTION_TYPE); } @@ -316,7 +314,7 @@ abstract contract EquityStorageWrapper is IEquityStorageWrapper, BondStorageWrap uint256 _date, uint256 _snapshotId, address _account - ) internal view returns (uint256 balance_, uint8 decimals_, bool dateReached_) { + ) internal view override returns (uint256 balance_, uint8 decimals_, bool dateReached_) { if (_date < _blockTimestamp()) { dateReached_ = true; diff --git a/packages/ats/contracts/contracts/layer_0/hold/HoldStorageWrapper1.sol b/packages/ats/contracts/contracts/layer_0/hold/HoldStorageWrapper1.sol index 467d98c92..5c0f11547 100644 --- a/packages/ats/contracts/contracts/layer_0/hold/HoldStorageWrapper1.sol +++ b/packages/ats/contracts/contracts/layer_0/hold/HoldStorageWrapper1.sol @@ -12,30 +12,30 @@ abstract contract HoldStorageWrapper1 is ERC3643StorageWrapper1 { using LibCommon for EnumerableSet.UintSet; using EnumerableSet for EnumerableSet.UintSet; - modifier onlyWithValidHoldId(HoldIdentifier calldata _holdIdentifier) { + modifier onlyWithValidHoldId(HoldIdentifier calldata _holdIdentifier) override { _checkHoldId(_holdIdentifier); _; } - function _isHoldIdValid(HoldIdentifier memory _holdIdentifier) internal view returns (bool) { + function _isHoldIdValid(HoldIdentifier memory _holdIdentifier) internal view override returns (bool) { return _getHold(_holdIdentifier).id != 0; } - function _getHold(HoldIdentifier memory _holdIdentifier) internal view returns (HoldData memory) { + function _getHold(HoldIdentifier memory _holdIdentifier) internal view override returns (HoldData memory) { return _holdStorage().holdsByAccountPartitionAndId[_holdIdentifier.tokenHolder][_holdIdentifier.partition][ _holdIdentifier.holdId ]; } - function _getHeldAmountFor(address _tokenHolder) internal view returns (uint256 amount_) { + function _getHeldAmountFor(address _tokenHolder) internal view override returns (uint256 amount_) { return _holdStorage().totalHeldAmountByAccount[_tokenHolder]; } function _getHeldAmountForByPartition( bytes32 _partition, address _tokenHolder - ) internal view returns (uint256 amount_) { + ) internal view override returns (uint256 amount_) { return _holdStorage().totalHeldAmountByAccountAndPartition[_tokenHolder][_partition]; } @@ -44,7 +44,7 @@ abstract contract HoldStorageWrapper1 is ERC3643StorageWrapper1 { address _tokenHolder, uint256 _pageIndex, uint256 _pageLength - ) internal view returns (uint256[] memory holdsId_) { + ) internal view override returns (uint256[] memory holdsId_) { return _holdStorage().holdIdsByAccountAndPartition[_tokenHolder][_partition].getFromSet(_pageIndex, _pageLength); } @@ -54,6 +54,7 @@ abstract contract HoldStorageWrapper1 is ERC3643StorageWrapper1 { ) internal view + override returns ( uint256 amount_, uint256 expirationTimestamp_, @@ -76,19 +77,22 @@ abstract contract HoldStorageWrapper1 is ERC3643StorageWrapper1 { ); } - function _getHoldCountForByPartition(bytes32 _partition, address _tokenHolder) internal view returns (uint256) { + function _getHoldCountForByPartition( + bytes32 _partition, + address _tokenHolder + ) internal view override returns (uint256) { return _holdStorage().holdIdsByAccountAndPartition[_tokenHolder][_partition].length(); } - function _isHoldExpired(Hold memory _hold) internal view returns (bool) { + function _isHoldExpired(Hold memory _hold) internal view override returns (bool) { return _blockTimestamp() > _hold.expirationTimestamp; } - function _isEscrow(Hold memory _hold, address _escrow) internal pure returns (bool) { + function _isEscrow(Hold memory _hold, address _escrow) internal pure override returns (bool) { return _escrow == _hold.escrow; } - function _checkHoldAmount(uint256 _amount, HoldData memory holdData) internal pure { + function _checkHoldAmount(uint256 _amount, HoldData memory holdData) internal pure override { if (_amount > holdData.hold.amount) revert IHold.InsufficientHoldBalance(holdData.hold.amount, _amount); } diff --git a/packages/ats/contracts/contracts/layer_0/hold/HoldStorageWrapper2.sol b/packages/ats/contracts/contracts/layer_0/hold/HoldStorageWrapper2.sol index b0a727ee7..67ef733fd 100644 --- a/packages/ats/contracts/contracts/layer_0/hold/HoldStorageWrapper2.sol +++ b/packages/ats/contracts/contracts/layer_0/hold/HoldStorageWrapper2.sol @@ -19,7 +19,7 @@ import { LowLevelCall } from "../common/libraries/LowLevelCall.sol"; import { ERC1410ProtectedPartitionsStorageWrapper } from "../ERC1400/ERC1410/ERC1410ProtectedPartitionsStorageWrapper.sol"; -import { checkNounceAndDeadline } from "../../layer_1/protectedPartitions/signatureVerification.sol"; +import { checkNounceAndDeadline } from "../../layer_0/common/libraries/ERC712Lib.sol"; abstract contract HoldStorageWrapper2 is ERC1410ProtectedPartitionsStorageWrapper { using EnumerableSet for EnumerableSet.UintSet; @@ -31,7 +31,7 @@ abstract contract HoldStorageWrapper2 is ERC1410ProtectedPartitionsStorageWrappe Hold memory _hold, bytes memory _operatorData, ThirdPartyType _thirdPartyType - ) internal returns (bool success_, uint256 holdId_) { + ) internal override returns (bool success_, uint256 holdId_) { _triggerAndSyncAll(_partition, _from, address(0)); uint256 abaf = _updateTotalHold(_partition, _from); @@ -59,7 +59,7 @@ abstract contract HoldStorageWrapper2 is ERC1410ProtectedPartitionsStorageWrappe address _from, uint256 _amount, uint256 _holdId - ) internal { + ) internal override { address thirdPartyAddress = _msgSender(); _decreaseAllowedBalance(_from, thirdPartyAddress, _amount); _holdStorage().holdThirdPartyByAccountPartitionAndId[_from][_partition][_holdId] = thirdPartyAddress; @@ -70,18 +70,18 @@ abstract contract HoldStorageWrapper2 is ERC1410ProtectedPartitionsStorageWrappe address _from, ProtectedHold memory _protectedHold, bytes calldata _signature - ) internal returns (bool success_, uint256 holdId_) { + ) internal override returns (bool success_, uint256 holdId_) { checkNounceAndDeadline( _protectedHold.nonce, _from, - _getNounceFor(_from), + _getNonceFor(_from), _protectedHold.deadline, _blockTimestamp() ); _checkCreateHoldSignature(_partition, _from, _protectedHold, _signature); - _setNounce(_protectedHold.nonce, _from); + _setNonceFor(_protectedHold.nonce, _from); return _createHoldByPartition(_partition, _from, _protectedHold.hold, "", ThirdPartyType.PROTECTED); } @@ -90,10 +90,11 @@ abstract contract HoldStorageWrapper2 is ERC1410ProtectedPartitionsStorageWrappe HoldIdentifier calldata _holdIdentifier, address _to, uint256 _amount - ) internal returns (bool success_) { + ) internal override returns (bool success_, bytes32 partition_) { _beforeExecuteHold(_holdIdentifier, _to); success_ = _operateHoldByPartition(_holdIdentifier, _to, _amount, OperationType.Execute); + partition_ = _holdIdentifier.partition; HoldData memory holdData = _getHold(_holdIdentifier); @@ -105,7 +106,7 @@ abstract contract HoldStorageWrapper2 is ERC1410ProtectedPartitionsStorageWrappe function _releaseHoldByPartition( HoldIdentifier calldata _holdIdentifier, uint256 _amount - ) internal returns (bool success_) { + ) internal override returns (bool success_) { _beforeReleaseHold(_holdIdentifier); HoldData memory holdData = _getHold(_holdIdentifier); @@ -119,6 +120,8 @@ abstract contract HoldStorageWrapper2 is ERC1410ProtectedPartitionsStorageWrappe OperationType.Release ); + holdData = _getHold(_holdIdentifier); + if (holdData.hold.amount == 0) { _removeLabafHold(_holdIdentifier.partition, _holdIdentifier.tokenHolder, _holdIdentifier.holdId); } @@ -126,7 +129,7 @@ abstract contract HoldStorageWrapper2 is ERC1410ProtectedPartitionsStorageWrappe function _reclaimHoldByPartition( HoldIdentifier calldata _holdIdentifier - ) internal returns (bool success_, uint256 amount_) { + ) internal override returns (bool success_, uint256 amount_) { _beforeReclaimHold(_holdIdentifier); HoldData memory holdData = _getHold(_holdIdentifier); @@ -149,7 +152,7 @@ abstract contract HoldStorageWrapper2 is ERC1410ProtectedPartitionsStorageWrappe address _to, uint256 _amount, OperationType _operation - ) internal returns (bool success_) { + ) internal override returns (bool success_) { HoldData memory holdData = _getHold(_holdIdentifier); if (_operation == OperationType.Execute) { @@ -175,7 +178,7 @@ abstract contract HoldStorageWrapper2 is ERC1410ProtectedPartitionsStorageWrappe success_ = true; } - function _transferHold(HoldIdentifier calldata _holdIdentifier, address _to, uint256 _amount) internal { + function _transferHold(HoldIdentifier calldata _holdIdentifier, address _to, uint256 _amount) internal override { if (_decreaseHeldAmount(_holdIdentifier, _amount) == 0) { _removeHold(_holdIdentifier); } @@ -201,7 +204,7 @@ abstract contract HoldStorageWrapper2 is ERC1410ProtectedPartitionsStorageWrappe function _decreaseHeldAmount( HoldIdentifier calldata _holdIdentifier, uint256 _amount - ) internal returns (uint256 newHoldBalance_) { + ) internal override returns (uint256 newHoldBalance_) { HoldDataStorage storage holdStorage = _holdStorage(); holdStorage.totalHeldAmountByAccount[_holdIdentifier.tokenHolder] -= _amount; @@ -219,7 +222,7 @@ abstract contract HoldStorageWrapper2 is ERC1410ProtectedPartitionsStorageWrappe .amount; } - function _removeHold(HoldIdentifier calldata _holdIdentifier) internal { + function _removeHold(HoldIdentifier calldata _holdIdentifier) internal override { HoldDataStorage storage holdStorage = _holdStorage(); holdStorage.holdIdsByAccountAndPartition[_holdIdentifier.tokenHolder][_holdIdentifier.partition].remove( @@ -237,7 +240,7 @@ abstract contract HoldStorageWrapper2 is ERC1410ProtectedPartitionsStorageWrappe _removeLabafHold(_holdIdentifier.partition, _holdIdentifier.tokenHolder, _holdIdentifier.holdId); } - function _updateTotalHold(bytes32 _partition, address _tokenHolder) internal returns (uint256 abaf_) { + function _updateTotalHold(bytes32 _partition, address _tokenHolder) internal override returns (uint256 abaf_) { abaf_ = _getAbaf(); uint256 labaf = _getTotalHeldLabaf(_tokenHolder); @@ -256,7 +259,7 @@ abstract contract HoldStorageWrapper2 is ERC1410ProtectedPartitionsStorageWrappe } } - function _updateTotalHeldAmountAndLabaf(address _tokenHolder, uint256 _factor, uint256 _abaf) internal { + function _updateTotalHeldAmountAndLabaf(address _tokenHolder, uint256 _factor, uint256 _abaf) internal override { if (_factor == 1) return; _holdStorage().totalHeldAmountByAccount[_tokenHolder] *= _factor; @@ -268,35 +271,33 @@ abstract contract HoldStorageWrapper2 is ERC1410ProtectedPartitionsStorageWrappe address _tokenHolder, uint256 _factor, uint256 _abaf - ) internal { + ) internal override { if (_factor == 1) return; _holdStorage().totalHeldAmountByAccountAndPartition[_tokenHolder][_partition] *= _factor; _setTotalHeldLabafByPartition(_partition, _tokenHolder, _abaf); } - function _beforeHold(bytes32 _partition, address _tokenHolder) internal { + function _beforeHold(bytes32 _partition, address _tokenHolder) internal override { _updateAccountSnapshot(_tokenHolder, _partition); _updateAccountHeldBalancesSnapshot(_tokenHolder, _partition); } - function _beforeExecuteHold(HoldIdentifier calldata _holdIdentifier, address _to) internal { + function _beforeExecuteHold(HoldIdentifier calldata _holdIdentifier, address _to) internal override { _adjustHoldBalances(_holdIdentifier, _to); _updateAccountSnapshot(_to, _holdIdentifier.partition); _updateAccountHeldBalancesSnapshot(_holdIdentifier.tokenHolder, _holdIdentifier.partition); } - function _beforeReleaseHold(HoldIdentifier calldata _holdIdentifier) internal { - _adjustHoldBalances(_holdIdentifier, _holdIdentifier.tokenHolder); + function _beforeReleaseHold(HoldIdentifier calldata _holdIdentifier) internal override { _beforeExecuteHold(_holdIdentifier, _holdIdentifier.tokenHolder); } - function _beforeReclaimHold(HoldIdentifier calldata _holdIdentifier) internal { - _adjustHoldBalances(_holdIdentifier, _holdIdentifier.tokenHolder); + function _beforeReclaimHold(HoldIdentifier calldata _holdIdentifier) internal override { _beforeExecuteHold(_holdIdentifier, _holdIdentifier.tokenHolder); } - function _adjustHoldBalances(HoldIdentifier calldata _holdIdentifier, address _to) internal { + function _adjustHoldBalances(HoldIdentifier calldata _holdIdentifier, address _to) internal override { _triggerAndSyncAll(_holdIdentifier.partition, _holdIdentifier.tokenHolder, _to); uint256 abaf = _updateTotalHold(_holdIdentifier.partition, _holdIdentifier.tokenHolder); @@ -304,7 +305,7 @@ abstract contract HoldStorageWrapper2 is ERC1410ProtectedPartitionsStorageWrappe _updateHold(_holdIdentifier.partition, _holdIdentifier.holdId, _holdIdentifier.tokenHolder, abaf); } - function _updateHold(bytes32 _partition, uint256 _holdId, address _tokenHolder, uint256 _abaf) internal { + function _updateHold(bytes32 _partition, uint256 _holdId, address _tokenHolder, uint256 _abaf) internal override { uint256 holdLabaf = _getHoldLabafByPartition(_partition, _holdId, _tokenHolder); if (_abaf != holdLabaf) { @@ -320,14 +321,14 @@ abstract contract HoldStorageWrapper2 is ERC1410ProtectedPartitionsStorageWrappe uint256 _holdId, address _tokenHolder, uint256 _factor - ) internal { + ) internal override { if (_factor == 1) return; HoldDataStorage storage holdStorage = _holdStorage(); holdStorage.holdsByAccountPartitionAndId[_tokenHolder][_partition][_holdId].hold.amount *= _factor; } - function _getHeldAmountForAdjusted(address _tokenHolder) internal view virtual override returns (uint256 amount_) { + function _getHeldAmountForAdjusted(address _tokenHolder) internal view override returns (uint256 amount_) { uint256 factor = _calculateFactor(_getAbafAdjusted(), _getTotalHeldLabaf(_tokenHolder)); return _getHeldAmountFor(_tokenHolder) * factor; @@ -336,7 +337,7 @@ abstract contract HoldStorageWrapper2 is ERC1410ProtectedPartitionsStorageWrappe function _getHeldAmountForAdjustedAt( address _tokenHolder, uint256 _timestamp - ) internal view returns (uint256 amount_) { + ) internal view override returns (uint256 amount_) { uint256 factor = _calculateFactorForHeldAmountByTokenHolderAdjustedAt(_tokenHolder, _timestamp); return _getHeldAmountFor(_tokenHolder) * factor; @@ -367,7 +368,7 @@ abstract contract HoldStorageWrapper2 is ERC1410ProtectedPartitionsStorageWrappe function _getHeldAmountForByPartitionAdjusted( bytes32 _partition, address _tokenHolder - ) internal view virtual override returns (uint256 amount_) { + ) internal view override returns (uint256 amount_) { uint256 factor = _calculateFactor(_getAbafAdjusted(), _getTotalHeldLabafByPartition(_partition, _tokenHolder)); return _getHeldAmountForByPartition(_partition, _tokenHolder) * factor; } @@ -377,6 +378,7 @@ abstract contract HoldStorageWrapper2 is ERC1410ProtectedPartitionsStorageWrappe ) internal view + override returns ( uint256 amount_, uint256 expirationTimestamp_, @@ -404,7 +406,9 @@ abstract contract HoldStorageWrapper2 is ERC1410ProtectedPartitionsStorageWrappe amount_ *= factor; } - function _getHoldThirdParty(HoldIdentifier calldata _holdIdentifier) internal view returns (address thirdParty_) { + function _getHoldThirdParty( + HoldIdentifier calldata _holdIdentifier + ) internal view override returns (address thirdParty_) { HoldDataStorage storage holdStorage = _holdStorage(); thirdParty_ = holdStorage.holdThirdPartyByAccountPartitionAndId[_holdIdentifier.tokenHolder][ @@ -412,12 +416,6 @@ abstract contract HoldStorageWrapper2 is ERC1410ProtectedPartitionsStorageWrappe ][_holdIdentifier.holdId]; } - function _getHoldLabafByPartition( - bytes32 _partition, - uint256 _holdId, - address _tokenHolder - ) internal view virtual returns (uint256); - function _restoreHoldAllowance( ThirdPartyType _thirdPartyType, HoldIdentifier calldata _holdIdentifier, diff --git a/packages/ats/contracts/contracts/layer_0/interestRates/fixedRate/FixedRateStorageWrapper.sol b/packages/ats/contracts/contracts/layer_0/interestRates/fixedRate/FixedRateStorageWrapper.sol new file mode 100644 index 000000000..567bea98f --- /dev/null +++ b/packages/ats/contracts/contracts/layer_0/interestRates/fixedRate/FixedRateStorageWrapper.sol @@ -0,0 +1,35 @@ +// SPDX-License-Identifier: Apache-2.0 +pragma solidity >=0.8.0 <0.9.0; + +import { _FIXED_RATE_STORAGE_POSITION } from "../../../layer_2/constants/storagePositions.sol"; +import { + SustainabilityPerformanceTargetRateStorageWrapper +} from "../sustainabilityPerformanceTargetRate/SustainabilityPerformanceTargetRateStorageWrapper.sol"; + +abstract contract FixedRateStorageWrapper is SustainabilityPerformanceTargetRateStorageWrapper { + struct FixedRateDataStorage { + uint256 rate; + uint8 decimals; + bool initialized; + } + + function _setRate(uint256 _newRate, uint8 _newRateDecimals) internal override { + FixedRateDataStorage storage fixedRateStorage = _fixedRateStorage(); + + fixedRateStorage.rate = _newRate; + fixedRateStorage.decimals = _newRateDecimals; + } + + function _getRate() internal view override returns (uint256 rate_, uint8 decimals_) { + rate_ = _fixedRateStorage().rate; + decimals_ = _fixedRateStorage().decimals; + } + + function _fixedRateStorage() internal pure returns (FixedRateDataStorage storage fixedRateDataStorage_) { + bytes32 position = _FIXED_RATE_STORAGE_POSITION; + // solhint-disable-next-line no-inline-assembly + assembly { + fixedRateDataStorage_.slot := position + } + } +} diff --git a/packages/ats/contracts/contracts/layer_0/interestRates/kpiLinkedRate/KpiLinkedRateStorageWrapper.sol b/packages/ats/contracts/contracts/layer_0/interestRates/kpiLinkedRate/KpiLinkedRateStorageWrapper.sol new file mode 100644 index 000000000..ea35146bd --- /dev/null +++ b/packages/ats/contracts/contracts/layer_0/interestRates/kpiLinkedRate/KpiLinkedRateStorageWrapper.sol @@ -0,0 +1,114 @@ +// SPDX-License-Identifier: Apache-2.0 +pragma solidity >=0.8.0 <0.9.0; + +import { _KPI_LINKED_RATE_STORAGE_POSITION } from "../../../layer_2/constants/storagePositions.sol"; +import { IKpiLinkedRate } from "../../../layer_2/interfaces/interestRates/kpiLinkedRate/IKpiLinkedRate.sol"; +import { PauseStorageWrapper } from "../../core/pause/PauseStorageWrapper.sol"; + +abstract contract KpiLinkedRateStorageWrapper is PauseStorageWrapper { + struct KpiLinkedRateDataStorage { + uint256 maxRate; + uint256 baseRate; + uint256 minRate; + uint256 startPeriod; + uint256 startRate; + uint256 missedPenalty; + uint256 reportPeriod; + uint8 rateDecimals; + uint256 maxDeviationCap; + uint256 baseLine; + uint256 maxDeviationFloor; + uint256 adjustmentPrecision; + uint8 impactDataDecimals; + address kpiOracle; + bool initialized; + } + + modifier checkInterestRate(IKpiLinkedRate.InterestRate calldata _newInterestRate) override { + if ( + _newInterestRate.minRate > _newInterestRate.baseRate || _newInterestRate.baseRate > _newInterestRate.maxRate + ) { + revert IKpiLinkedRate.WrongInterestRateValues(_newInterestRate); + } + _; + } + + modifier checkImpactData(IKpiLinkedRate.ImpactData calldata _newImpactData) override { + if ( + _newImpactData.maxDeviationFloor > _newImpactData.baseLine || + _newImpactData.baseLine > _newImpactData.maxDeviationCap + ) { + revert IKpiLinkedRate.WrongImpactDataValues(_newImpactData); + } + _; + } + + function _setInterestRate(IKpiLinkedRate.InterestRate calldata _newInterestRate) internal override { + _callTriggerPendingScheduledCrossOrderedTasks(); + + KpiLinkedRateDataStorage storage kpiLinkedRateDataStorage = _kpiLinkedRateStorage(); + kpiLinkedRateDataStorage.maxRate = _newInterestRate.maxRate; + kpiLinkedRateDataStorage.baseRate = _newInterestRate.baseRate; + kpiLinkedRateDataStorage.minRate = _newInterestRate.minRate; + kpiLinkedRateDataStorage.startPeriod = _newInterestRate.startPeriod; + kpiLinkedRateDataStorage.startRate = _newInterestRate.startRate; + kpiLinkedRateDataStorage.missedPenalty = _newInterestRate.missedPenalty; + kpiLinkedRateDataStorage.reportPeriod = _newInterestRate.reportPeriod; + kpiLinkedRateDataStorage.rateDecimals = _newInterestRate.rateDecimals; + } + function _setImpactData(IKpiLinkedRate.ImpactData calldata _newImpactData) internal override { + _callTriggerPendingScheduledCrossOrderedTasks(); + + KpiLinkedRateDataStorage storage kpiLinkedRateDataStorage = _kpiLinkedRateStorage(); + kpiLinkedRateDataStorage.maxDeviationCap = _newImpactData.maxDeviationCap; + kpiLinkedRateDataStorage.baseLine = _newImpactData.baseLine; + kpiLinkedRateDataStorage.maxDeviationFloor = _newImpactData.maxDeviationFloor; + kpiLinkedRateDataStorage.impactDataDecimals = _newImpactData.impactDataDecimals; + kpiLinkedRateDataStorage.adjustmentPrecision = _newImpactData.adjustmentPrecision; + } + + function _setKpiOracle(address _kpiOracle) internal override { + _callTriggerPendingScheduledCrossOrderedTasks(); + + _kpiLinkedRateStorage().kpiOracle = _kpiOracle; + } + + function _getInterestRate() internal view override returns (IKpiLinkedRate.InterestRate memory interestRate_) { + interestRate_ = IKpiLinkedRate.InterestRate({ + maxRate: _kpiLinkedRateStorage().maxRate, + baseRate: _kpiLinkedRateStorage().baseRate, + minRate: _kpiLinkedRateStorage().minRate, + startPeriod: _kpiLinkedRateStorage().startPeriod, + startRate: _kpiLinkedRateStorage().startRate, + missedPenalty: _kpiLinkedRateStorage().missedPenalty, + reportPeriod: _kpiLinkedRateStorage().reportPeriod, + rateDecimals: _kpiLinkedRateStorage().rateDecimals + }); + } + + function _getImpactData() internal view override returns (IKpiLinkedRate.ImpactData memory impactData_) { + impactData_ = IKpiLinkedRate.ImpactData({ + maxDeviationCap: _kpiLinkedRateStorage().maxDeviationCap, + baseLine: _kpiLinkedRateStorage().baseLine, + maxDeviationFloor: _kpiLinkedRateStorage().maxDeviationFloor, + impactDataDecimals: _kpiLinkedRateStorage().impactDataDecimals, + adjustmentPrecision: _kpiLinkedRateStorage().adjustmentPrecision + }); + } + + function _getKpiOracle() internal view override returns (address kpiOracle_) { + kpiOracle_ = _kpiLinkedRateStorage().kpiOracle; + } + + function _kpiLinkedRateStorage() + internal + pure + returns (KpiLinkedRateDataStorage storage kpiLinkedRateDataStorage_) + { + bytes32 position = _KPI_LINKED_RATE_STORAGE_POSITION; + // solhint-disable-next-line no-inline-assembly + assembly { + kpiLinkedRateDataStorage_.slot := position + } + } +} diff --git a/packages/ats/contracts/contracts/layer_0/interestRates/sustainabilityPerformanceTargetRate/SustainabilityPerformanceTargetRateStorageWrapper.sol b/packages/ats/contracts/contracts/layer_0/interestRates/sustainabilityPerformanceTargetRate/SustainabilityPerformanceTargetRateStorageWrapper.sol new file mode 100644 index 000000000..b51e5a0ab --- /dev/null +++ b/packages/ats/contracts/contracts/layer_0/interestRates/sustainabilityPerformanceTargetRate/SustainabilityPerformanceTargetRateStorageWrapper.sol @@ -0,0 +1,106 @@ +// SPDX-License-Identifier: Apache-2.0 +pragma solidity >=0.8.0 <0.9.0; + +import { + _SUSTAINABILITY_PERFORMANCE_TARGET_RATE_STORAGE_POSITION +} from "contracts/layer_2/constants/storagePositions.sol"; +// prettier-ignore +// solhint-disable-next-line max-line-length +import { ISustainabilityPerformanceTargetRate } from "contracts/layer_2/interfaces/interestRates/sustainabilityPerformanceTargetRate/ISustainabilityPerformanceTargetRate.sol"; +import { KpiLinkedRateStorageWrapper } from "../kpiLinkedRate/KpiLinkedRateStorageWrapper.sol"; + +abstract contract SustainabilityPerformanceTargetRateStorageWrapper is KpiLinkedRateStorageWrapper { + struct SustainabilityPerformanceTargetRateDataStorage { + uint256 baseRate; + uint256 startPeriod; + uint256 startRate; + uint8 rateDecimals; + mapping(address project => ISustainabilityPerformanceTargetRate.ImpactData impactData) impactDataByProject; + bool initialized; + } + + modifier onlyEqualLength(uint256 len1, uint256 len2) { + if (len1 != len2) { + revert ISustainabilityPerformanceTargetRate.ProvidedListsLengthMismatch(len1, len2); + } + _; + } + + // solhint-disable-next-line func-name-mixedcase + function _initialize_SustainabilityPerformanceTargetRate( + ISustainabilityPerformanceTargetRate.InterestRate calldata _interestRate, + ISustainabilityPerformanceTargetRate.ImpactData[] calldata _impactData, + address[] calldata _projects + ) internal override { + _setSPTInterestRate(_interestRate); + for (uint256 index = 0; index < _impactData.length; index++) { + if (!_isProceedRecipient(_projects[index])) + revert ISustainabilityPerformanceTargetRate.NotExistingProject(_projects[index]); + _setSPTImpactData(_impactData[index], _projects[index]); + } + + _sustainabilityPerformanceTargetRateStorage().initialized = true; + } + + function _setSPTInterestRate( + ISustainabilityPerformanceTargetRate.InterestRate calldata _newInterestRate + ) internal override { + _callTriggerPendingScheduledCrossOrderedTasks(); + SustainabilityPerformanceTargetRateDataStorage + storage sustainabilityPerformanceTargetRateDataStorage = _sustainabilityPerformanceTargetRateStorage(); + sustainabilityPerformanceTargetRateDataStorage.baseRate = _newInterestRate.baseRate; + sustainabilityPerformanceTargetRateDataStorage.startPeriod = _newInterestRate.startPeriod; + sustainabilityPerformanceTargetRateDataStorage.startRate = _newInterestRate.startRate; + sustainabilityPerformanceTargetRateDataStorage.rateDecimals = _newInterestRate.rateDecimals; + } + function _setSPTImpactData( + ISustainabilityPerformanceTargetRate.ImpactData calldata _newImpactData, + address _project + ) internal override { + _callTriggerPendingScheduledCrossOrderedTasks(); + ISustainabilityPerformanceTargetRate.ImpactData + storage impactData = _sustainabilityPerformanceTargetRateStorage().impactDataByProject[_project]; + impactData.baseLine = _newImpactData.baseLine; + impactData.baseLineMode = _newImpactData.baseLineMode; + impactData.deltaRate = _newImpactData.deltaRate; + impactData.impactDataMode = _newImpactData.impactDataMode; + } + + function _getSPTInterestRate() + internal + view + override + returns (ISustainabilityPerformanceTargetRate.InterestRate memory interestRate_) + { + SustainabilityPerformanceTargetRateDataStorage + storage sustainabilityPerformanceTargetRateDataStorage = _sustainabilityPerformanceTargetRateStorage(); + interestRate_ = ISustainabilityPerformanceTargetRate.InterestRate({ + baseRate: sustainabilityPerformanceTargetRateDataStorage.baseRate, + startPeriod: sustainabilityPerformanceTargetRateDataStorage.startPeriod, + startRate: sustainabilityPerformanceTargetRateDataStorage.startRate, + rateDecimals: sustainabilityPerformanceTargetRateDataStorage.rateDecimals + }); + } + + function _getSPTImpactDataFor( + address _project + ) internal view override returns (ISustainabilityPerformanceTargetRate.ImpactData memory impactData_) { + return _sustainabilityPerformanceTargetRateStorage().impactDataByProject[_project]; + } + + function _isSustainabilityPerformanceTargetRateInitialized() internal view override returns (bool) { + return _sustainabilityPerformanceTargetRateStorage().initialized; + } + + function _sustainabilityPerformanceTargetRateStorage() + internal + pure + returns (SustainabilityPerformanceTargetRateDataStorage storage sustainabilityPerformanceTargetRateDataStorage_) + { + bytes32 position = _SUSTAINABILITY_PERFORMANCE_TARGET_RATE_STORAGE_POSITION; + // solhint-disable-next-line no-inline-assembly + assembly { + sustainabilityPerformanceTargetRateDataStorage_.slot := position + } + } +} diff --git a/packages/ats/contracts/contracts/layer_0/lock/LockStorageWrapper1.sol b/packages/ats/contracts/contracts/layer_0/lock/LockStorageWrapper1.sol index 5a5221f82..5fcc0b82b 100644 --- a/packages/ats/contracts/contracts/layer_0/lock/LockStorageWrapper1.sol +++ b/packages/ats/contracts/contracts/layer_0/lock/LockStorageWrapper1.sol @@ -1,25 +1,20 @@ // SPDX-License-Identifier: Apache-2.0 pragma solidity >=0.8.0 <0.9.0; -import { LibCommon } from "..//common/libraries/LibCommon.sol"; +import { LibCommon } from "../common/libraries/LibCommon.sol"; import { _LOCK_STORAGE_POSITION } from "../constants/storagePositions.sol"; import { EnumerableSet } from "@openzeppelin/contracts/utils/structs/EnumerableSet.sol"; import { CapStorageWrapper1 } from "../cap/CapStorageWrapper1.sol"; +import { ILock } from "../../layer_1/interfaces/lock/ILock.sol"; abstract contract LockStorageWrapper1 is CapStorageWrapper1 { using LibCommon for EnumerableSet.UintSet; using EnumerableSet for EnumerableSet.UintSet; - struct LockData { - uint256 id; - uint256 amount; - uint256 expirationTimestamp; - } - struct LockDataStorage { mapping(address => uint256) totalLockedAmountByAccount; mapping(address => mapping(bytes32 => uint256)) totalLockedAmountByAccountAndPartition; - mapping(address => mapping(bytes32 => mapping(uint256 => LockData))) locksByAccountPartitionAndId; + mapping(address => mapping(bytes32 => mapping(uint256 => ILock.LockData))) locksByAccountPartitionAndId; mapping(address => mapping(bytes32 => EnumerableSet.UintSet)) lockIdsByAccountAndPartition; mapping(address => mapping(bytes32 => uint256)) nextLockIdByAccountAndPartition; } @@ -28,29 +23,32 @@ abstract contract LockStorageWrapper1 is CapStorageWrapper1 { error WrongExpirationTimestamp(); error LockExpirationNotReached(); - modifier onlyWithValidExpirationTimestamp(uint256 _expirationTimestamp) { + modifier onlyWithValidExpirationTimestamp(uint256 _expirationTimestamp) override { _checkExpirationTimestamp(_expirationTimestamp); _; } - modifier onlyWithValidLockId(bytes32 _partition, address _tokenHolder, uint256 _lockId) { + modifier onlyWithValidLockId(bytes32 _partition, address _tokenHolder, uint256 _lockId) override { _checkValidLockId(_partition, _tokenHolder, _lockId); _; } - modifier onlyWithLockedExpirationTimestamp(bytes32 _partition, address _tokenHolder, uint256 _lockId) { + modifier onlyWithLockedExpirationTimestamp(bytes32 _partition, address _tokenHolder, uint256 _lockId) override { _checkLockedExpirationTimestamp(_partition, _tokenHolder, _lockId); _; } - function _getLockedAmountForByPartition(bytes32 _partition, address _tokenHolder) internal view returns (uint256) { + function _getLockedAmountForByPartition( + bytes32 _partition, + address _tokenHolder + ) internal view override returns (uint256) { return _lockStorage().totalLockedAmountByAccountAndPartition[_tokenHolder][_partition]; } function _getLockCountForByPartition( bytes32 _partition, address _tokenHolder - ) internal view returns (uint256 lockCount_) { + ) internal view override returns (uint256 lockCount_) { return _lockStorage().lockIdsByAccountAndPartition[_tokenHolder][_partition].length(); } @@ -59,7 +57,7 @@ abstract contract LockStorageWrapper1 is CapStorageWrapper1 { address _tokenHolder, uint256 _pageIndex, uint256 _pageLength - ) internal view returns (uint256[] memory locksId_) { + ) internal view override returns (uint256[] memory locksId_) { return _lockStorage().lockIdsByAccountAndPartition[_tokenHolder][_partition].getFromSet(_pageIndex, _pageLength); } @@ -68,8 +66,8 @@ abstract contract LockStorageWrapper1 is CapStorageWrapper1 { bytes32 partition, address tokenHolder, uint256 lockId - ) internal view returns (uint256 amount, uint256 expirationTimestamp) { - LockData memory lock = _getLock(partition, tokenHolder, lockId); + ) internal view override returns (uint256 amount, uint256 expirationTimestamp) { + ILock.LockData memory lock = _getLock(partition, tokenHolder, lockId); amount = lock.amount; expirationTimestamp = lock.expirationTimestamp; } @@ -78,14 +76,14 @@ abstract contract LockStorageWrapper1 is CapStorageWrapper1 { bytes32 _partition, address _tokenHolder, uint256 _lockId - ) internal view returns (uint256 amount_, uint256 expirationTimestamp_) { + ) internal view override returns (uint256 amount_, uint256 expirationTimestamp_) { uint256 factor = _calculateFactor(_getAbafAdjusted(), _getLockLabafById(_partition, _tokenHolder, _lockId)); (amount_, expirationTimestamp_) = _getLockForByPartition(_partition, _tokenHolder, _lockId); amount_ *= factor; } - function _getLockedAmountFor(address _tokenHolder) internal view returns (uint256 amount_) { + function _getLockedAmountFor(address _tokenHolder) internal view override returns (uint256 amount_) { return _lockStorage().totalLockedAmountByAccount[_tokenHolder]; } @@ -93,7 +91,7 @@ abstract contract LockStorageWrapper1 is CapStorageWrapper1 { function _getLockedAmountForAdjustedAt( address tokenHolder, uint256 timestamp - ) internal view returns (uint256 amount_) { + ) internal view override returns (uint256 amount_) { uint256 factor = _calculateFactorForLockedAmountByTokenHolderAdjustedAt(tokenHolder, timestamp); return _getLockedAmountFor(tokenHolder) * factor; } @@ -102,7 +100,9 @@ abstract contract LockStorageWrapper1 is CapStorageWrapper1 { bytes32 _partition, address _tokenHolder ) internal view virtual override returns (uint256) { - return _getLockedAmountForByPartitionAdjusted(_partition, _tokenHolder); + return + super._getTotalBalanceForByPartitionAdjusted(_partition, _tokenHolder) + + _getLockedAmountForByPartitionAdjusted(_partition, _tokenHolder); } function _getTotalBalanceForAdjustedAt( @@ -121,7 +121,7 @@ abstract contract LockStorageWrapper1 is CapStorageWrapper1 { function _getLockedAmountForByPartitionAdjusted( bytes32 _partition, address _tokenHolder - ) internal view returns (uint256 amount_) { + ) internal view override returns (uint256 amount_) { uint256 factor = _calculateFactor(_getAbafAdjusted(), _getTotalLockLabafByPartition(_partition, _tokenHolder)); return _getLockedAmountForByPartition(_partition, _tokenHolder) * factor; } @@ -130,7 +130,7 @@ abstract contract LockStorageWrapper1 is CapStorageWrapper1 { bytes32 _partition, address _tokenHolder, uint256 _lockId - ) internal view returns (LockData memory) { + ) internal view override returns (ILock.LockData memory) { return _lockStorage().locksByAccountPartitionAndId[_tokenHolder][_partition][_lockId]; } @@ -138,10 +138,10 @@ abstract contract LockStorageWrapper1 is CapStorageWrapper1 { bytes32 _partition, address _tokenHolder, uint256 _lockIndex - ) internal view returns (LockData memory) { + ) internal view override returns (ILock.LockData memory) { LockDataStorage storage lockStorage = _lockStorage(); - if (_lockIndex == 0) return LockData(0, 0, 0); + if (_lockIndex == 0) return ILock.LockData(0, 0, 0); _lockIndex--; @@ -156,19 +156,23 @@ abstract contract LockStorageWrapper1 is CapStorageWrapper1 { bytes32 _partition, address _tokenHolder, uint256 _lockId - ) internal view returns (bool) { - LockData memory lock = _getLock(_partition, _tokenHolder, _lockId); + ) internal view override returns (bool) { + ILock.LockData memory lock = _getLock(_partition, _tokenHolder, _lockId); if (lock.expirationTimestamp > _blockTimestamp()) return false; return true; } - function _isLockIdValid(bytes32 _partition, address _tokenHolder, uint256 _lockId) internal view returns (bool) { + function _isLockIdValid( + bytes32 _partition, + address _tokenHolder, + uint256 _lockId + ) internal view override returns (bool) { return _lockStorage().lockIdsByAccountAndPartition[_tokenHolder][_partition].contains(_lockId); } - function _checkExpirationTimestamp(uint256 _expirationTimestamp) internal view { + function _checkExpirationTimestamp(uint256 _expirationTimestamp) internal view override { if (_expirationTimestamp < _blockTimestamp()) revert WrongExpirationTimestamp(); } diff --git a/packages/ats/contracts/contracts/layer_0/lock/LockStorageWrapper2.sol b/packages/ats/contracts/contracts/layer_0/lock/LockStorageWrapper2.sol index a4499300d..168030e48 100644 --- a/packages/ats/contracts/contracts/layer_0/lock/LockStorageWrapper2.sol +++ b/packages/ats/contracts/contracts/layer_0/lock/LockStorageWrapper2.sol @@ -3,6 +3,7 @@ pragma solidity >=0.8.0 <0.9.0; import { EnumerableSet } from "@openzeppelin/contracts/utils/structs/EnumerableSet.sol"; import { AdjustBalancesStorageWrapper2 } from "../adjustBalances/AdjustBalancesStorageWrapper2.sol"; +import { ILock } from "../../layer_1/interfaces/lock/ILock.sol"; abstract contract LockStorageWrapper2 is AdjustBalancesStorageWrapper2 { using EnumerableSet for EnumerableSet.UintSet; @@ -12,7 +13,7 @@ abstract contract LockStorageWrapper2 is AdjustBalancesStorageWrapper2 { uint256 _amount, address _tokenHolder, uint256 _expirationTimestamp - ) internal returns (bool success_, uint256 lockId_) { + ) internal override returns (bool success_, uint256 lockId_) { _triggerAndSyncAll(_partition, _tokenHolder, address(0)); uint256 abaf = _updateTotalLock(_partition, _tokenHolder); @@ -24,7 +25,7 @@ abstract contract LockStorageWrapper2 is AdjustBalancesStorageWrapper2 { lockId_ = ++lockStorage.nextLockIdByAccountAndPartition[_tokenHolder][_partition]; - LockData memory lock = LockData(lockId_, _amount, _expirationTimestamp); + ILock.LockData memory lock = ILock.LockData(lockId_, _amount, _expirationTimestamp); _setLockLabafById(_partition, _tokenHolder, lockId_, abaf); lockStorage.locksByAccountPartitionAndId[_tokenHolder][_partition][lockId_] = lock; @@ -39,7 +40,7 @@ abstract contract LockStorageWrapper2 is AdjustBalancesStorageWrapper2 { bytes32 _partition, uint256 _lockId, address _tokenHolder - ) internal returns (bool success_) { + ) internal override returns (bool success_) { _triggerAndSyncAll(_partition, address(0), _tokenHolder); uint256 abaf = _updateTotalLock(_partition, _tokenHolder); @@ -65,10 +66,9 @@ abstract contract LockStorageWrapper2 is AdjustBalancesStorageWrapper2 { } success_ = true; - _removeLabafLock(_partition, _tokenHolder, _lockId); } - function _updateTotalLock(bytes32 _partition, address _tokenHolder) internal returns (uint256 abaf_) { + function _updateTotalLock(bytes32 _partition, address _tokenHolder) internal override returns (uint256 abaf_) { abaf_ = _getAbaf(); uint256 labaf = _getTotalLockLabaf(_tokenHolder); @@ -92,7 +92,12 @@ abstract contract LockStorageWrapper2 is AdjustBalancesStorageWrapper2 { * LABAF (Locked Amount Before Adjustment Factor) for each lock is not updated * because the lock is deleted right after, optimizing gas usage. */ - function _updateLockByIndex(bytes32 _partition, uint256 _lockId, address _tokenHolder, uint256 _abaf) internal { + function _updateLockByIndex( + bytes32 _partition, + uint256 _lockId, + address _tokenHolder, + uint256 _abaf + ) internal override { uint256 lockLabaf = _getLockLabafById(_partition, _tokenHolder, _lockId); if (_abaf != lockLabaf) { @@ -107,12 +112,12 @@ abstract contract LockStorageWrapper2 is AdjustBalancesStorageWrapper2 { uint256 _lockId, address _tokenHolder, uint256 _factor - ) internal { + ) internal override { if (_factor == 1) return; _lockStorage().locksByAccountPartitionAndId[_tokenHolder][_partition][_lockId].amount *= _factor; } - function _updateTotalLockedAmountAndLabaf(address _tokenHolder, uint256 _factor, uint256 _abaf) internal { + function _updateTotalLockedAmountAndLabaf(address _tokenHolder, uint256 _factor, uint256 _abaf) internal override { if (_factor == 1) return; LockDataStorage storage lockStorage = _lockStorage(); @@ -125,7 +130,7 @@ abstract contract LockStorageWrapper2 is AdjustBalancesStorageWrapper2 { address _tokenHolder, uint256 _factor, uint256 _abaf - ) internal { + ) internal override { if (_factor == 1) return; LockDataStorage storage lockStorage = _lockStorage(); @@ -138,7 +143,7 @@ abstract contract LockStorageWrapper2 is AdjustBalancesStorageWrapper2 { uint256 /*_amount*/, address _tokenHolder, uint256 /*_expirationTimestamp*/ - ) internal { + ) internal override { _updateAccountSnapshot(_tokenHolder, _partition); _updateAccountLockedBalancesSnapshot(_tokenHolder, _partition); } @@ -147,7 +152,7 @@ abstract contract LockStorageWrapper2 is AdjustBalancesStorageWrapper2 { bytes32 _partition, uint256 /*_lockId*/, address _tokenHolder - ) internal { + ) internal override { _updateAccountSnapshot(_tokenHolder, _partition); _updateAccountLockedBalancesSnapshot(_tokenHolder, _partition); } diff --git a/packages/ats/contracts/contracts/layer_0/proceedRecipients/ProceedRecipientsStorageWrapper.sol b/packages/ats/contracts/contracts/layer_0/proceedRecipients/ProceedRecipientsStorageWrapper.sol index c54fe6eb3..5bcc69f43 100644 --- a/packages/ats/contracts/contracts/layer_0/proceedRecipients/ProceedRecipientsStorageWrapper.sol +++ b/packages/ats/contracts/contracts/layer_0/proceedRecipients/ProceedRecipientsStorageWrapper.sol @@ -13,42 +13,79 @@ abstract contract ProceedRecipientsStorageWrapper is TotalBalancesStorageWrapper mapping(address => bytes) proceedRecipientData; } - modifier onlyIfProceedRecipient(address _proceedRecipient) { - if (!_isExternalList(_PROCEED_RECIPIENTS_STORAGE_POSITION, _proceedRecipient)) { + modifier onlyIfProceedRecipient(address _proceedRecipient) override { + if (!_isProceedRecipient(_proceedRecipient)) { revert IProceedRecipients.ProceedRecipientNotFound(_proceedRecipient); } _; } - modifier onlyIfNotProceedRecipient(address _proceedRecipient) { - if (_isExternalList(_PROCEED_RECIPIENTS_STORAGE_POSITION, _proceedRecipient)) { + modifier onlyIfNotProceedRecipient(address _proceedRecipient) override { + if (_isProceedRecipient(_proceedRecipient)) { revert IProceedRecipients.ProceedRecipientAlreadyExists(_proceedRecipient); } _; } - function _addProceedRecipient(address _proceedRecipient, bytes calldata _data) internal { + // solhint-disable-next-line func-name-mixedcase + function _initialize_ProceedRecipients( + address[] calldata _proceedRecipients, + bytes[] calldata _data + ) internal override { + uint256 length = _proceedRecipients.length; + for (uint256 index; index < length; ) { + _checkValidAddress(_proceedRecipients[index]); + _addExternalList(_PROCEED_RECIPIENTS_STORAGE_POSITION, _proceedRecipients[index]); + _setProceedRecipientData(_proceedRecipients[index], _data[index]); + unchecked { + ++index; + } + } + + _setExternalListInitialized(_PROCEED_RECIPIENTS_STORAGE_POSITION); + } + + function _addProceedRecipient(address _proceedRecipient, bytes calldata _data) internal virtual override { _addExternalList(_PROCEED_RECIPIENTS_STORAGE_POSITION, _proceedRecipient); _setProceedRecipientData(_proceedRecipient, _data); } - function _removeProceedRecipient(address _proceedRecipient) internal { + function _removeProceedRecipient(address _proceedRecipient) internal virtual override { _removeExternalList(_PROCEED_RECIPIENTS_STORAGE_POSITION, _proceedRecipient); _removeProceedRecipientData(_proceedRecipient); } - function _setProceedRecipientData(address _proceedRecipient, bytes calldata _data) internal { + function _setProceedRecipientData(address _proceedRecipient, bytes calldata _data) internal override { _proceedRecipientsDataStorage().proceedRecipientData[_proceedRecipient] = _data; } - function _removeProceedRecipientData(address _proceedRecipient) internal { + function _removeProceedRecipientData(address _proceedRecipient) internal override { delete _proceedRecipientsDataStorage().proceedRecipientData[_proceedRecipient]; } - function _getProceedRecipientData(address _proceedRecipient) internal view returns (bytes memory) { + function _getProceedRecipientData(address _proceedRecipient) internal view override returns (bytes memory) { return _proceedRecipientsDataStorage().proceedRecipientData[_proceedRecipient]; } + function _isProceedRecipient(address _proceedRecipient) internal view override returns (bool) { + return _isExternalList(_PROCEED_RECIPIENTS_STORAGE_POSITION, _proceedRecipient); + } + + function _getProceedRecipientsCount() internal view override returns (uint256) { + return _getExternalListsCount(_PROCEED_RECIPIENTS_STORAGE_POSITION); + } + + function _getProceedRecipients( + uint256 _pageIndex, + uint256 _pageLength + ) internal view override returns (address[] memory proceedRecipients_) { + return _getExternalListsMembers(_PROCEED_RECIPIENTS_STORAGE_POSITION, _pageIndex, _pageLength); + } + + function _isProceedRecipientsInitialized() internal view override returns (bool) { + return _externalListStorage(_PROCEED_RECIPIENTS_STORAGE_POSITION).initialized; + } + function _proceedRecipientsDataStorage() internal pure diff --git a/packages/ats/contracts/contracts/layer_0/scheduledTasks/ScheduledTasksCommon.sol b/packages/ats/contracts/contracts/layer_0/scheduledTasks/ScheduledTasksCommon.sol index 352007b8d..eaf882210 100644 --- a/packages/ats/contracts/contracts/layer_0/scheduledTasks/ScheduledTasksCommon.sol +++ b/packages/ats/contracts/contracts/layer_0/scheduledTasks/ScheduledTasksCommon.sol @@ -10,24 +10,18 @@ import { abstract contract ScheduledTasksCommon is SnapshotsStorageWrapper1 { error WrongTimestamp(uint256 timeStamp); - error NotAutocalling(); - modifier onlyValidTimestamp(uint256 _timestamp) { + modifier onlyValidTimestamp(uint256 _timestamp) override { _checkTimestamp(_timestamp); _; } - modifier onlyAutoCalling(bool _autoCalling) { - _checkAutoCalling(_autoCalling); - _; - } - function _triggerScheduledTasks( ScheduledTasksDataStorage storage _scheduledTasks, function(uint256, uint256, ScheduledTask memory) internal callBack, uint256 _max, uint256 _timestamp - ) internal returns (uint256) { + ) internal override returns (uint256) { uint256 scheduledTasksLength = ScheduledTasksLib.getScheduledTaskCount(_scheduledTasks); if (scheduledTasksLength == 0) { @@ -64,8 +58,4 @@ abstract contract ScheduledTasksCommon is SnapshotsStorageWrapper1 { function _checkTimestamp(uint256 _timestamp) private view { if (_timestamp <= _blockTimestamp()) revert WrongTimestamp(_timestamp); } - - function _checkAutoCalling(bool _autoCalling) private pure { - if (!_autoCalling) revert NotAutocalling(); - } } diff --git a/packages/ats/contracts/contracts/layer_0/scheduledTasks/scheduledBalanceAdjustments/ScheduledBalanceAdjustmentsStorageWrapper.sol b/packages/ats/contracts/contracts/layer_0/scheduledTasks/scheduledBalanceAdjustments/ScheduledBalanceAdjustmentsStorageWrapper.sol index de167684f..7afe6e4fd 100644 --- a/packages/ats/contracts/contracts/layer_0/scheduledTasks/scheduledBalanceAdjustments/ScheduledBalanceAdjustmentsStorageWrapper.sol +++ b/packages/ats/contracts/contracts/layer_0/scheduledTasks/scheduledBalanceAdjustments/ScheduledBalanceAdjustmentsStorageWrapper.sol @@ -1,7 +1,9 @@ // SPDX-License-Identifier: Apache-2.0 pragma solidity >=0.8.0 <0.9.0; -import { ScheduledSnapshotsStorageWrapper } from "../scheduledSnapshots/ScheduledSnapshotsStorageWrapper.sol"; +import { + ScheduledCouponListingStorageWrapper +} from "../scheduledCouponListing/ScheduledCouponListingStorageWrapper.sol"; import { ScheduledTasksLib } from "../../../layer_2/scheduledTasks/ScheduledTasksLib.sol"; import { _SCHEDULED_BALANCE_ADJUSTMENTS_STORAGE_POSITION } from "../../constants/storagePositions.sol"; import { IEquity } from "../../../layer_2/interfaces/equity/IEquity.sol"; @@ -10,12 +12,12 @@ import { ScheduledTasksDataStorage } from "../../../layer_2/interfaces/scheduledTasks/scheduledTasksCommon/IScheduledTasksCommon.sol"; -abstract contract ScheduledBalanceAdjustmentsStorageWrapper is ScheduledSnapshotsStorageWrapper { - function _addScheduledBalanceAdjustment(uint256 _newScheduledTimestamp, bytes memory _newData) internal { +abstract contract ScheduledBalanceAdjustmentsStorageWrapper is ScheduledCouponListingStorageWrapper { + function _addScheduledBalanceAdjustment(uint256 _newScheduledTimestamp, bytes memory _newData) internal override { ScheduledTasksLib.addScheduledTask(_scheduledBalanceAdjustmentStorage(), _newScheduledTimestamp, _newData); } - function _triggerScheduledBalanceAdjustments(uint256 _max) internal returns (uint256) { + function _triggerScheduledBalanceAdjustments(uint256 _max) internal override returns (uint256) { return _triggerScheduledTasks( _scheduledBalanceAdjustmentStorage(), @@ -29,11 +31,11 @@ abstract contract ScheduledBalanceAdjustmentsStorageWrapper is ScheduledSnapshot uint256 /*_pos*/, uint256 /*_scheduledTasksLength*/, ScheduledTask memory _scheduledTask - ) internal { + ) internal override { bytes memory data = _scheduledTask.data; if (data.length == 0) return; - (, bytes memory balanceAdjustmentData) = _getCorporateAction(abi.decode(data, (bytes32))); + (, , bytes memory balanceAdjustmentData) = _getCorporateAction(abi.decode(data, (bytes32))); if (balanceAdjustmentData.length == 0) return; IEquity.ScheduledBalanceAdjustment memory balanceAdjustment = abi.decode( balanceAdjustmentData, @@ -42,22 +44,20 @@ abstract contract ScheduledBalanceAdjustmentsStorageWrapper is ScheduledSnapshot _adjustBalances(balanceAdjustment.factor, balanceAdjustment.decimals); } - function _adjustBalances(uint256 _factor, uint8 _decimals) internal virtual; - - function _getScheduledBalanceAdjustmentCount() internal view returns (uint256) { + function _getScheduledBalanceAdjustmentCount() internal view override returns (uint256) { return ScheduledTasksLib.getScheduledTaskCount(_scheduledBalanceAdjustmentStorage()); } function _getScheduledBalanceAdjustments( uint256 _pageIndex, uint256 _pageLength - ) internal view returns (ScheduledTask[] memory scheduledBalanceAdjustment_) { + ) internal view override returns (ScheduledTask[] memory scheduledBalanceAdjustment_) { return ScheduledTasksLib.getScheduledTasks(_scheduledBalanceAdjustmentStorage(), _pageIndex, _pageLength); } function _getPendingScheduledBalanceAdjustmentsAt( uint256 _timestamp - ) internal view returns (uint256 pendingABAF_, uint8 pendingDecimals_) { + ) internal view override returns (uint256 pendingABAF_, uint8 pendingDecimals_) { // * Initialization pendingABAF_ = 1; pendingDecimals_ = 0; diff --git a/packages/ats/contracts/contracts/layer_0/scheduledTasks/scheduledCouponListing/ScheduledCouponListingStorageWrapper.sol b/packages/ats/contracts/contracts/layer_0/scheduledTasks/scheduledCouponListing/ScheduledCouponListingStorageWrapper.sol new file mode 100644 index 000000000..89bc1f3bb --- /dev/null +++ b/packages/ats/contracts/contracts/layer_0/scheduledTasks/scheduledCouponListing/ScheduledCouponListingStorageWrapper.sol @@ -0,0 +1,103 @@ +// SPDX-License-Identifier: Apache-2.0 +pragma solidity >=0.8.0 <0.9.0; + +import { ScheduledSnapshotsStorageWrapper } from "../scheduledSnapshots/ScheduledSnapshotsStorageWrapper.sol"; +import { ScheduledTasksLib } from "../../../layer_2/scheduledTasks/ScheduledTasksLib.sol"; +import { _SCHEDULED_COUPON_LISTING_STORAGE_POSITION } from "../../constants/storagePositions.sol"; +import { + ScheduledTask, + ScheduledTasksDataStorage +} from "../../../layer_2/interfaces/scheduledTasks/scheduledTasksCommon/IScheduledTasksCommon.sol"; +import { COUPON_LISTING_RESULT_ID } from "../../constants/values.sol"; + +abstract contract ScheduledCouponListingStorageWrapper is ScheduledSnapshotsStorageWrapper { + function _addScheduledCouponListing(uint256 _newScheduledTimestamp, bytes memory _newData) internal override { + ScheduledTasksLib.addScheduledTask(_scheduledCouponListingStorage(), _newScheduledTimestamp, _newData); + } + + function _triggerScheduledCouponListing(uint256 _max) internal override returns (uint256) { + return + _triggerScheduledTasks( + _scheduledCouponListingStorage(), + _onScheduledCouponListingTriggered, + _max, + _blockTimestamp() + ); + } + + function _onScheduledCouponListingTriggered( + uint256 /*_pos*/, + uint256 /*_scheduledTasksLength*/, + ScheduledTask memory _scheduledTask + ) internal override { + bytes memory data = _scheduledTask.data; + + if (data.length == 0) return; + + bytes32 actionId = abi.decode(data, (bytes32)); + + _addToCouponsOrderedList(uint256(actionId)); + uint256 pos = _getCouponsOrderedListTotal(); + + _updateCorporateActionResult(actionId, COUPON_LISTING_RESULT_ID, abi.encodePacked(pos)); + } + + function _getScheduledCouponListingCount() internal view override returns (uint256) { + return ScheduledTasksLib.getScheduledTaskCount(_scheduledCouponListingStorage()); + } + + function _getScheduledCouponListing( + uint256 _pageIndex, + uint256 _pageLength + ) internal view override returns (ScheduledTask[] memory scheduledCouponListing_) { + return ScheduledTasksLib.getScheduledTasks(_scheduledCouponListingStorage(), _pageIndex, _pageLength); + } + + function _getPendingScheduledCouponListingTotalAt( + uint256 _timestamp + ) internal view override returns (uint256 total_) { + total_ = 0; + + ScheduledTasksDataStorage storage scheduledCouponListing = _scheduledCouponListingStorage(); + + uint256 scheduledTaskCount = ScheduledTasksLib.getScheduledTaskCount(scheduledCouponListing); + + for (uint256 i = 1; i <= scheduledTaskCount; i++) { + uint256 pos = scheduledTaskCount - i; + + ScheduledTask memory scheduledTask = ScheduledTasksLib.getScheduledTasksByIndex( + scheduledCouponListing, + pos + ); + + if (scheduledTask.scheduledTimestamp < _timestamp) { + total_++; + } else { + break; + } + } + } + + function _getScheduledCouponListingIdAtIndex(uint256 _index) internal view override returns (uint256 couponID_) { + ScheduledTask memory couponListing = ScheduledTasksLib.getScheduledTasksByIndex( + _scheduledCouponListingStorage(), + _index + ); + + bytes32 actionId = abi.decode(couponListing.data, (bytes32)); + + (, couponID_, ) = _getCorporateAction(actionId); + } + + function _scheduledCouponListingStorage() + internal + pure + returns (ScheduledTasksDataStorage storage scheduledCouponListing_) + { + bytes32 position = _SCHEDULED_COUPON_LISTING_STORAGE_POSITION; + // solhint-disable-next-line no-inline-assembly + assembly { + scheduledCouponListing_.slot := position + } + } +} diff --git a/packages/ats/contracts/contracts/layer_0/scheduledTasks/scheduledCrossOrderedTasks/ScheduledCrossOrderedTasksStorageWrapper.sol b/packages/ats/contracts/contracts/layer_0/scheduledTasks/scheduledCrossOrderedTasks/ScheduledCrossOrderedTasksStorageWrapper.sol index 2a959f1b2..99e1e1460 100644 --- a/packages/ats/contracts/contracts/layer_0/scheduledTasks/scheduledCrossOrderedTasks/ScheduledCrossOrderedTasksStorageWrapper.sol +++ b/packages/ats/contracts/contracts/layer_0/scheduledTasks/scheduledCrossOrderedTasks/ScheduledCrossOrderedTasksStorageWrapper.sol @@ -1,26 +1,26 @@ // SPDX-License-Identifier: Apache-2.0 pragma solidity >=0.8.0 <0.9.0; -import { - IScheduledCrossOrderedTasks -} from "../../../layer_2/interfaces/scheduledTasks/scheduledCrossOrderedTasks/IScheduledCrossOrderedTasks.sol"; import { ScheduledTasksLib } from "../../../layer_2/scheduledTasks/ScheduledTasksLib.sol"; import { _SCHEDULED_CROSS_ORDERED_TASKS_STORAGE_POSITION } from "../../constants/storagePositions.sol"; import { ScheduledBalanceAdjustmentsStorageWrapper } from "../scheduledBalanceAdjustments/ScheduledBalanceAdjustmentsStorageWrapper.sol"; -import { SNAPSHOT_TASK_TYPE } from "../../constants/values.sol"; +import { SNAPSHOT_TASK_TYPE, BALANCE_ADJUSTMENT_TASK_TYPE } from "contracts/layer_0/constants/values.sol"; import { ScheduledTask, ScheduledTasksDataStorage } from "../../../layer_2/interfaces/scheduledTasks/scheduledTasksCommon/IScheduledTasksCommon.sol"; +import { + IScheduledCrossOrderedTasks +} from "contracts/layer_2/interfaces/scheduledTasks/scheduledCrossOrderedTasks/IScheduledCrossOrderedTasks.sol"; abstract contract ScheduledCrossOrderedTasksStorageWrapper is ScheduledBalanceAdjustmentsStorageWrapper { - function _addScheduledCrossOrderedTask(uint256 _newScheduledTimestamp, bytes memory _newData) internal { + function _addScheduledCrossOrderedTask(uint256 _newScheduledTimestamp, bytes memory _newData) internal override { ScheduledTasksLib.addScheduledTask(_scheduledCrossOrderedTaskStorage(), _newScheduledTimestamp, _newData); } - function _triggerScheduledCrossOrderedTasks(uint256 _max) internal returns (uint256) { + function _triggerScheduledCrossOrderedTasks(uint256 _max) internal override returns (uint256) { return _triggerScheduledTasks( _scheduledCrossOrderedTaskStorage(), @@ -30,29 +30,47 @@ abstract contract ScheduledCrossOrderedTasksStorageWrapper is ScheduledBalanceAd ); } + function _callTriggerPendingScheduledCrossOrderedTasks() internal override returns (uint256) { + if (_getScheduledCrossOrderedTaskCount() == 0) { + return 0; + } + return IScheduledCrossOrderedTasks(address(this)).triggerPendingScheduledCrossOrderedTasks(); + } + function _onScheduledCrossOrderedTaskTriggered( uint256 /*_pos*/, uint256 /*_scheduledTasksLength*/, ScheduledTask memory _scheduledTask - ) internal { + ) internal override { bytes memory data = _scheduledTask.data; if (data.length == 0) return; - if (abi.decode(data, (bytes32)) == SNAPSHOT_TASK_TYPE) { + + bytes32 taskType = abi.decode(data, (bytes32)); + + if (taskType == SNAPSHOT_TASK_TYPE) { _triggerScheduledSnapshots(1); return; } - _triggerScheduledBalanceAdjustments(1); + if (taskType == BALANCE_ADJUSTMENT_TASK_TYPE) { + _triggerScheduledBalanceAdjustments(1); + return; + } + + _postOnScheduledCrossOrderedTaskTriggered(taskType); } - function _getScheduledCrossOrderedTaskCount() internal view returns (uint256) { + // solhint-disable-next-line no-empty-blocks + function _postOnScheduledCrossOrderedTaskTriggered(bytes32 taskType) internal virtual {} + + function _getScheduledCrossOrderedTaskCount() internal view override returns (uint256) { return ScheduledTasksLib.getScheduledTaskCount(_scheduledCrossOrderedTaskStorage()); } function _getScheduledCrossOrderedTasks( uint256 _pageIndex, uint256 _pageLength - ) internal view returns (ScheduledTask[] memory scheduledTask_) { + ) internal view override returns (ScheduledTask[] memory scheduledTask_) { return ScheduledTasksLib.getScheduledTasks(_scheduledCrossOrderedTaskStorage(), _pageIndex, _pageLength); } diff --git a/packages/ats/contracts/contracts/layer_0/scheduledTasks/scheduledSnapshots/ScheduledSnapshotsStorageWrapper.sol b/packages/ats/contracts/contracts/layer_0/scheduledTasks/scheduledSnapshots/ScheduledSnapshotsStorageWrapper.sol index ceb6a101e..44658b5cc 100644 --- a/packages/ats/contracts/contracts/layer_0/scheduledTasks/scheduledSnapshots/ScheduledSnapshotsStorageWrapper.sol +++ b/packages/ats/contracts/contracts/layer_0/scheduledTasks/scheduledSnapshots/ScheduledSnapshotsStorageWrapper.sol @@ -1,9 +1,6 @@ // SPDX-License-Identifier: Apache-2.0 pragma solidity >=0.8.0 <0.9.0; -import { - IScheduledSnapshots -} from "../../../layer_2/interfaces/scheduledTasks/scheduledSnapshots/IScheduledSnapshots.sol"; import { ScheduledTasksLib } from "../../../layer_2/scheduledTasks/ScheduledTasksLib.sol"; import { ScheduledTasksCommon } from "../ScheduledTasksCommon.sol"; import { _SCHEDULED_SNAPSHOTS_STORAGE_POSITION } from "../../constants/storagePositions.sol"; @@ -14,11 +11,11 @@ import { } from "../../../layer_2/interfaces/scheduledTasks/scheduledTasksCommon/IScheduledTasksCommon.sol"; abstract contract ScheduledSnapshotsStorageWrapper is ScheduledTasksCommon { - function _addScheduledSnapshot(uint256 _newScheduledTimestamp, bytes memory _newData) internal { + function _addScheduledSnapshot(uint256 _newScheduledTimestamp, bytes memory _newData) internal override { ScheduledTasksLib.addScheduledTask(_scheduledSnapshotStorage(), _newScheduledTimestamp, _newData); } - function _triggerScheduledSnapshots(uint256 _max) internal returns (uint256) { + function _triggerScheduledSnapshots(uint256 _max) internal override returns (uint256) { return _triggerScheduledTasks(_scheduledSnapshotStorage(), _onScheduledSnapshotTriggered, _max, _blockTimestamp()); } @@ -27,7 +24,7 @@ abstract contract ScheduledSnapshotsStorageWrapper is ScheduledTasksCommon { uint256 _pos, uint256 _scheduledTasksLength, ScheduledTask memory _scheduledTask - ) internal { + ) internal override { uint256 newSnapShotID; if (_pos == _scheduledTasksLength - 1) { newSnapShotID = _snapshot(); @@ -41,14 +38,14 @@ abstract contract ScheduledSnapshotsStorageWrapper is ScheduledTasksCommon { } } - function _getScheduledSnapshotCount() internal view returns (uint256) { + function _getScheduledSnapshotCount() internal view override returns (uint256) { return ScheduledTasksLib.getScheduledTaskCount(_scheduledSnapshotStorage()); } function _getScheduledSnapshots( uint256 _pageIndex, uint256 _pageLength - ) internal view returns (ScheduledTask[] memory scheduledSnapshot_) { + ) internal view override returns (ScheduledTask[] memory scheduledSnapshot_) { return ScheduledTasksLib.getScheduledTasks(_scheduledSnapshotStorage(), _pageIndex, _pageLength); } diff --git a/packages/ats/contracts/contracts/layer_0/security/SecurityStorageWrapper.sol b/packages/ats/contracts/contracts/layer_0/security/SecurityStorageWrapper.sol index de76bffd9..e68bf9e04 100644 --- a/packages/ats/contracts/contracts/layer_0/security/SecurityStorageWrapper.sol +++ b/packages/ats/contracts/contracts/layer_0/security/SecurityStorageWrapper.sol @@ -6,18 +6,18 @@ import { _SECURITY_STORAGE_POSITION } from "../../layer_3/constants/storagePosit import { ISecurity } from "../../layer_3/interfaces/ISecurity.sol"; import { EquityStorageWrapper } from "../equity/EquityStorageWrapper.sol"; -contract SecurityStorageWrapper is EquityStorageWrapper { +abstract contract SecurityStorageWrapper is EquityStorageWrapper { function _initializeSecurity( RegulationData memory _regulationData, AdditionalSecurityData calldata _additionalSecurityData - ) internal { + ) internal override { _storeRegulationData(_regulationData, _additionalSecurityData); } function _storeRegulationData( RegulationData memory _regulationData, AdditionalSecurityData calldata _additionalSecurityData - ) internal { + ) internal override { ISecurity.SecurityRegulationData storage data = _securityStorage(); data.regulationData = _regulationData; data.additionalSecurityData = _additionalSecurityData; @@ -26,6 +26,7 @@ contract SecurityStorageWrapper is EquityStorageWrapper { function _getSecurityRegulationData() internal pure + override returns (ISecurity.SecurityRegulationData memory securityRegulationData_) { securityRegulationData_ = _securityStorage(); diff --git a/packages/ats/contracts/contracts/layer_0/snapshots/SnapshotsStorageWrapper1.sol b/packages/ats/contracts/contracts/layer_0/snapshots/SnapshotsStorageWrapper1.sol index ddbeddfeb..d62a1c809 100644 --- a/packages/ats/contracts/contracts/layer_0/snapshots/SnapshotsStorageWrapper1.sol +++ b/packages/ats/contracts/contracts/layer_0/snapshots/SnapshotsStorageWrapper1.sol @@ -4,7 +4,13 @@ pragma solidity >=0.8.0 <0.9.0; import { ArraysUpgradeable } from "@openzeppelin/contracts-upgradeable/utils/ArraysUpgradeable.sol"; import { CountersUpgradeable } from "@openzeppelin/contracts-upgradeable/utils/CountersUpgradeable.sol"; import { _SNAPSHOT_STORAGE_POSITION } from "../constants/storagePositions.sol"; -import { ISnapshotsStorageWrapper } from "../../layer_1/interfaces/snapshots/ISnapshots.sol"; +import { + ISnapshotsStorageWrapper, + Snapshots, + SnapshotsAddress, + PartitionSnapshots, + ListOfPartitions +} from "../../layer_1/interfaces/snapshots/ISnapshots.sol"; import { CorporateActionsStorageWrapper } from "../corporateActions/CorporateActionsStorageWrapper.sol"; abstract contract SnapshotsStorageWrapper1 is ISnapshotsStorageWrapper, CorporateActionsStorageWrapper { @@ -13,23 +19,6 @@ abstract contract SnapshotsStorageWrapper1 is ISnapshotsStorageWrapper, Corporat // Snapshotted values have arrays of ids and the value corresponding to that id. These could be an array of a // Snapshot struct, but that would impede usage of functions that work on an array. - struct Snapshots { - uint256[] ids; - uint256[] values; - } - - struct SnapshotsAddress { - uint256[] ids; - address[] values; - } - - struct ListOfPartitions { - bytes32[] partitions; - } - struct PartitionSnapshots { - uint256[] ids; - ListOfPartitions[] values; - } struct SnapshotStorage { /// @dev Snapshots for total balances per account @@ -71,22 +60,22 @@ abstract contract SnapshotsStorageWrapper1 is ISnapshotsStorageWrapper, Corporat Snapshots totalTokenHoldersSnapshots; } - function _takeSnapshot() internal returns (uint256 snapshotID_) { + function _takeSnapshot() internal override returns (uint256 snapshotID_) { snapshotID_ = _snapshot(); emit SnapshotTaken(_msgSender(), snapshotID_); } - function _snapshot() internal returns (uint256) { + function _snapshot() internal override returns (uint256) { _snapshotStorage().currentSnapshotId.increment(); uint256 currentId = _getCurrentSnapshotId(); - emit SnapshotTriggered(_msgSender(), currentId); + emit SnapshotTriggered(currentId); return currentId; } - function _updateSnapshot(Snapshots storage snapshots, uint256 currentValue) internal { + function _updateSnapshot(Snapshots storage snapshots, uint256 currentValue) internal override { uint256 currentId = _getCurrentSnapshotId(); if (_lastSnapshotId(snapshots.ids) < currentId) { snapshots.ids.push(currentId); @@ -94,7 +83,7 @@ abstract contract SnapshotsStorageWrapper1 is ISnapshotsStorageWrapper, Corporat } } - function _updateSnapshotAddress(SnapshotsAddress storage snapshots, address currentValue) internal { + function _updateSnapshotAddress(SnapshotsAddress storage snapshots, address currentValue) internal override { uint256 currentId = _getCurrentSnapshotId(); if (_lastSnapshotId(snapshots.ids) < currentId) { snapshots.ids.push(currentId); @@ -106,10 +95,8 @@ abstract contract SnapshotsStorageWrapper1 is ISnapshotsStorageWrapper, Corporat Snapshots storage snapshots, PartitionSnapshots storage partitionSnapshots, uint256 currentValueForPartition, - // There is a limitation in the number of partitions an account can have, if it has to many the snapshot - // transaction will run out of gas bytes32[] memory partitionIds - ) internal { + ) internal override { uint256 currentId = _getCurrentSnapshotId(); if (_lastSnapshotId(snapshots.ids) < currentId) { snapshots.ids.push(currentId); @@ -122,11 +109,11 @@ abstract contract SnapshotsStorageWrapper1 is ISnapshotsStorageWrapper, Corporat } } - function _getCurrentSnapshotId() internal view returns (uint256) { + function _getCurrentSnapshotId() internal view override returns (uint256) { return _snapshotStorage().currentSnapshotId.current(); } - function _valueAt(uint256 snapshotId, Snapshots storage snapshots) internal view returns (bool, uint256) { + function _valueAt(uint256 snapshotId, Snapshots storage snapshots) internal view override returns (bool, uint256) { (bool found, uint256 index) = _indexFor(snapshotId, snapshots.ids); return (found, found ? snapshots.values[index] : 0); @@ -135,13 +122,13 @@ abstract contract SnapshotsStorageWrapper1 is ISnapshotsStorageWrapper, Corporat function _addressValueAt( uint256 snapshotId, SnapshotsAddress storage snapshots - ) internal view returns (bool, address) { + ) internal view override returns (bool, address) { (bool found, uint256 index) = _indexFor(snapshotId, snapshots.ids); return (found, found ? snapshots.values[index] : address(0)); } - function _indexFor(uint256 snapshotId, uint256[] storage ids) internal view returns (bool, uint256) { + function _indexFor(uint256 snapshotId, uint256[] storage ids) internal view override returns (bool, uint256) { if (snapshotId == 0) { revert SnapshotIdNull(); } @@ -158,7 +145,7 @@ abstract contract SnapshotsStorageWrapper1 is ISnapshotsStorageWrapper, Corporat } } - function _lastSnapshotId(uint256[] storage ids) internal view returns (uint256) { + function _lastSnapshotId(uint256[] storage ids) internal view override returns (uint256) { if (ids.length == 0) { return 0; } else { diff --git a/packages/ats/contracts/contracts/layer_0/snapshots/SnapshotsStorageWrapper2.sol b/packages/ats/contracts/contracts/layer_0/snapshots/SnapshotsStorageWrapper2.sol index 20bf8c554..aeb64c8f7 100644 --- a/packages/ats/contracts/contracts/layer_0/snapshots/SnapshotsStorageWrapper2.sol +++ b/packages/ats/contracts/contracts/layer_0/snapshots/SnapshotsStorageWrapper2.sol @@ -10,15 +10,15 @@ import { ERC20StorageWrapper2 } from "../ERC1400/ERC20/ERC20StorageWrapper2.sol" import { LibCommon } from "../../layer_0/common/libraries/LibCommon.sol"; abstract contract SnapshotsStorageWrapper2 is ISnapshotsStorageWrapper, ERC20StorageWrapper2 { - function _updateAbafSnapshot() internal { + function _updateAbafSnapshot() internal override { _updateSnapshot(_snapshotStorage().abafSnapshots, _getAbaf()); } - function _updateDecimalsSnapshot() internal { + function _updateDecimalsSnapshot() internal override { _updateSnapshot(_snapshotStorage().decimals, _decimals()); } - function _updateAssetTotalSupplySnapshot() internal { + function _updateAssetTotalSupplySnapshot() internal override { _updateSnapshot(_snapshotStorage().totalSupplySnapshots, _totalSupply()); } @@ -71,7 +71,7 @@ abstract contract SnapshotsStorageWrapper2 is ISnapshotsStorageWrapper, ERC20Sto PartitionSnapshots storage partitionSnapshots, uint256 currentValueForPartition, bytes32[] memory partitionIds - ) internal { + ) internal override { _updateSnapshot(balanceSnapshots, currentValue); _updateSnapshotPartitions( partitionBalanceSnapshots, @@ -81,7 +81,7 @@ abstract contract SnapshotsStorageWrapper2 is ISnapshotsStorageWrapper, ERC20Sto ); } - function _updateAccountLockedBalancesSnapshot(address account, bytes32 partition) internal { + function _updateAccountLockedBalancesSnapshot(address account, bytes32 partition) internal override { _updateSnapshot(_snapshotStorage().accountLockedBalanceSnapshots[account], _getLockedAmountFor(account)); _updateSnapshot( _snapshotStorage().accountPartitionLockedBalanceSnapshots[account][partition], @@ -89,7 +89,7 @@ abstract contract SnapshotsStorageWrapper2 is ISnapshotsStorageWrapper, ERC20Sto ); } - function _updateAccountHeldBalancesSnapshot(address account, bytes32 partition) internal { + function _updateAccountHeldBalancesSnapshot(address account, bytes32 partition) internal override { _updateSnapshot(_snapshotStorage().accountHeldBalanceSnapshots[account], _getHeldAmountFor(account)); _updateSnapshot( _snapshotStorage().accountPartitionHeldBalanceSnapshots[account][partition], @@ -97,7 +97,7 @@ abstract contract SnapshotsStorageWrapper2 is ISnapshotsStorageWrapper, ERC20Sto ); } - function _updateAccountFrozenBalancesSnapshot(address account, bytes32 partition) internal { + function _updateAccountFrozenBalancesSnapshot(address account, bytes32 partition) internal override { _updateSnapshot(_snapshotStorage().accountFrozenBalanceSnapshots[account], _getFrozenAmountFor(account)); _updateSnapshot( _snapshotStorage().accountPartitionFrozenBalanceSnapshots[account][partition], @@ -105,7 +105,7 @@ abstract contract SnapshotsStorageWrapper2 is ISnapshotsStorageWrapper, ERC20Sto ); } - function _updateAccountClearedBalancesSnapshot(address account, bytes32 partition) internal { + function _updateAccountClearedBalancesSnapshot(address account, bytes32 partition) internal override { _updateSnapshot(_snapshotStorage().accountClearedBalanceSnapshots[account], _getClearedAmountFor(account)); _updateSnapshot( _snapshotStorage().accountPartitionClearedBalanceSnapshots[account][partition], @@ -129,19 +129,22 @@ abstract contract SnapshotsStorageWrapper2 is ISnapshotsStorageWrapper, ERC20Sto _updateSnapshot(_snapshotStorage().totalTokenHoldersSnapshots, _getTotalTokenHolders()); } - function _abafAtSnapshot(uint256 _snapshotID) internal view returns (uint256 abaf_) { + function _abafAtSnapshot(uint256 _snapshotID) internal view override returns (uint256 abaf_) { (bool snapshotted, uint256 value) = _valueAt(_snapshotID, _snapshotStorage().abafSnapshots); return snapshotted ? value : _getAbaf(); } - function _decimalsAtSnapshot(uint256 _snapshotID) internal view returns (uint8 decimals_) { + function _decimalsAtSnapshot(uint256 _snapshotID) internal view override returns (uint8 decimals_) { (bool snapshotted, uint256 value) = _valueAt(_snapshotID, _snapshotStorage().decimals); return snapshotted ? uint8(value) : _decimalsAdjusted(); } - function _balanceOfAtSnapshot(uint256 _snapshotID, address _tokenHolder) internal view returns (uint256 balance_) { + function _balanceOfAtSnapshot( + uint256 _snapshotID, + address _tokenHolder + ) internal view override returns (uint256 balance_) { return _balanceOfAt(_tokenHolder, _snapshotID); } @@ -180,14 +183,14 @@ abstract contract SnapshotsStorageWrapper2 is ISnapshotsStorageWrapper, ERC20Sto bytes32 _partition, uint256 _snapshotID, address _tokenHolder - ) internal view returns (uint256 balance_) { + ) internal view override returns (uint256 balance_) { return _balanceOfAtByPartition(_partition, _tokenHolder, _snapshotID); } function _partitionsOfAtSnapshot( uint256 _snapshotID, address _tokenHolder - ) internal view returns (bytes32[] memory) { + ) internal view override returns (bytes32[] memory) { PartitionSnapshots storage partitionSnapshots = _snapshotStorage().accountPartitionMetadata[_tokenHolder]; (bool found, uint256 index) = _indexFor(_snapshotID, partitionSnapshots.ids); @@ -199,16 +202,16 @@ abstract contract SnapshotsStorageWrapper2 is ISnapshotsStorageWrapper, ERC20Sto return partitionSnapshots.values[index].partitions; } - function _totalSupplyAtSnapshot(uint256 _snapshotID) internal view returns (uint256 totalSupply_) { + function _totalSupplyAtSnapshot(uint256 _snapshotID) internal view override returns (uint256 totalSupply_) { return _totalSupplyAt(_snapshotID); } - function _balanceOfAt(address account, uint256 snapshotId) internal view returns (uint256) { + function _balanceOfAt(address _tokenHolder, uint256 _snapshotId) internal view override returns (uint256) { return _balanceOfAtAdjusted( - snapshotId, - _snapshotStorage().accountBalanceSnapshots[account], - _balanceOfAdjusted(account) + _snapshotId, + _snapshotStorage().accountBalanceSnapshots[_tokenHolder], + _balanceOfAdjusted(_tokenHolder) ); } @@ -216,7 +219,7 @@ abstract contract SnapshotsStorageWrapper2 is ISnapshotsStorageWrapper, ERC20Sto uint256 snapshotId, uint256 _pageIndex, uint256 _pageLength - ) internal view virtual returns (address[] memory) { + ) internal view virtual override returns (address[] memory) { (uint256 start, uint256 end) = LibCommon.getStartAndEnd(_pageIndex, _pageLength); address[] memory tk = new address[](LibCommon.getSize(start, end, _totalTokenHoldersAt(snapshotId))); @@ -234,7 +237,7 @@ abstract contract SnapshotsStorageWrapper2 is ISnapshotsStorageWrapper, ERC20Sto return tk; } - function _totalTokenHoldersAt(uint256 snapshotId) internal view virtual returns (uint256) { + function _totalTokenHoldersAt(uint256 snapshotId) internal view override returns (uint256) { (bool snapshotted, uint256 value) = _valueAt(snapshotId, _snapshotStorage().totalTokenHoldersSnapshots); return snapshotted ? value : _getTotalTokenHolders(); @@ -244,7 +247,7 @@ abstract contract SnapshotsStorageWrapper2 is ISnapshotsStorageWrapper, ERC20Sto bytes32 _partition, address account, uint256 snapshotId - ) internal view returns (uint256) { + ) internal view override returns (uint256) { return _balanceOfAtAdjusted( snapshotId, @@ -256,7 +259,7 @@ abstract contract SnapshotsStorageWrapper2 is ISnapshotsStorageWrapper, ERC20Sto function _totalSupplyAtSnapshotByPartition( bytes32 _partition, uint256 _snapshotID - ) internal view returns (uint256 totalSupply_) { + ) internal view override returns (uint256 totalSupply_) { return _balanceOfAtAdjusted( _snapshotID, @@ -268,7 +271,7 @@ abstract contract SnapshotsStorageWrapper2 is ISnapshotsStorageWrapper, ERC20Sto function _lockedBalanceOfAtSnapshot( uint256 _snapshotID, address _tokenHolder - ) internal view returns (uint256 balance_) { + ) internal view override returns (uint256 balance_) { return _balanceOfAtAdjusted( _snapshotID, @@ -281,7 +284,7 @@ abstract contract SnapshotsStorageWrapper2 is ISnapshotsStorageWrapper, ERC20Sto bytes32 _partition, uint256 _snapshotID, address _tokenHolder - ) internal view returns (uint256 balance_) { + ) internal view override returns (uint256 balance_) { return _balanceOfAtAdjusted( _snapshotID, @@ -293,7 +296,7 @@ abstract contract SnapshotsStorageWrapper2 is ISnapshotsStorageWrapper, ERC20Sto function _heldBalanceOfAtSnapshot( uint256 _snapshotID, address _tokenHolder - ) internal view returns (uint256 balance_) { + ) internal view override returns (uint256 balance_) { return _balanceOfAtAdjusted( _snapshotID, @@ -306,7 +309,7 @@ abstract contract SnapshotsStorageWrapper2 is ISnapshotsStorageWrapper, ERC20Sto bytes32 _partition, uint256 _snapshotID, address _tokenHolder - ) internal view returns (uint256 balance_) { + ) internal view override returns (uint256 balance_) { return _balanceOfAtAdjusted( _snapshotID, @@ -318,7 +321,7 @@ abstract contract SnapshotsStorageWrapper2 is ISnapshotsStorageWrapper, ERC20Sto function _frozenBalanceOfAtSnapshot( uint256 _snapshotID, address _tokenHolder - ) internal view returns (uint256 balance_) { + ) internal view override returns (uint256 balance_) { return _balanceOfAtAdjusted( _snapshotID, @@ -331,7 +334,7 @@ abstract contract SnapshotsStorageWrapper2 is ISnapshotsStorageWrapper, ERC20Sto bytes32 _partition, uint256 _snapshotID, address _tokenHolder - ) internal view returns (uint256 balance_) { + ) internal view override returns (uint256 balance_) { return _balanceOfAtAdjusted( _snapshotID, @@ -343,7 +346,7 @@ abstract contract SnapshotsStorageWrapper2 is ISnapshotsStorageWrapper, ERC20Sto function _clearedBalanceOfAtSnapshot( uint256 _snapshotID, address _tokenHolder - ) internal view returns (uint256 balance_) { + ) internal view override returns (uint256 balance_) { return _balanceOfAtAdjusted( _snapshotID, @@ -356,7 +359,7 @@ abstract contract SnapshotsStorageWrapper2 is ISnapshotsStorageWrapper, ERC20Sto bytes32 _partition, uint256 _snapshotID, address _tokenHolder - ) internal view returns (uint256 balance_) { + ) internal view override returns (uint256 balance_) { return _balanceOfAtAdjusted( _snapshotID, @@ -369,7 +372,7 @@ abstract contract SnapshotsStorageWrapper2 is ISnapshotsStorageWrapper, ERC20Sto uint256 _snapshotId, Snapshots storage _snapshots, uint256 _currentBalanceAdjusted - ) internal view returns (uint256) { + ) internal view override returns (uint256) { (bool snapshotted, uint256 value) = _valueAt(_snapshotId, _snapshots); if (snapshotted) return value; @@ -387,30 +390,9 @@ abstract contract SnapshotsStorageWrapper2 is ISnapshotsStorageWrapper, ERC20Sto /** * @dev Retrieves the total supply at the time `snapshotId` was created. */ - function _totalSupplyAt(uint256 snapshotId) internal view returns (uint256) { - (bool snapshotted, uint256 value) = _valueAt(snapshotId, _snapshotStorage().totalSupplySnapshots); + function _totalSupplyAt(uint256 _snapshotId) internal view override returns (uint256) { + (bool snapshotted, uint256 value) = _valueAt(_snapshotId, _snapshotStorage().totalSupplySnapshots); return snapshotted ? value : _totalSupply(); } - - function _getHeldAmountForAdjusted(address _tokenHolder) internal view virtual returns (uint256 amount_); - - function _getHeldAmountForByPartitionAdjusted( - bytes32 _partition, - address _tokenHolder - ) internal view virtual returns (uint256 amount_); - - function _getFrozenAmountForAdjusted(address _tokenHolder) internal view virtual returns (uint256 amount_); - - function _getFrozenAmountForByPartitionAdjusted( - bytes32 _partition, - address _tokenHolder - ) internal view virtual returns (uint256 amount_); - - function _getClearedAmountForAdjusted(address _tokenHolder) internal view virtual returns (uint256 amount_); - - function _getClearedAmountForByPartitionAdjusted( - bytes32 _partition, - address _tokenHolder - ) internal view virtual returns (uint256 amount_); } diff --git a/packages/ats/contracts/contracts/layer_0/totalBalances/TotalBalancesStorageWrapper.sol b/packages/ats/contracts/contracts/layer_0/totalBalances/TotalBalancesStorageWrapper.sol index bade813f3..6482eeb62 100644 --- a/packages/ats/contracts/contracts/layer_0/totalBalances/TotalBalancesStorageWrapper.sol +++ b/packages/ats/contracts/contracts/layer_0/totalBalances/TotalBalancesStorageWrapper.sol @@ -1,33 +1,24 @@ // SPDX-License-Identifier: Apache-2.0 pragma solidity >=0.8.0 <0.9.0; -import { PauseStorageWrapper } from "../core/pause/PauseStorageWrapper.sol"; +import { FixedRateStorageWrapper } from "../interestRates/fixedRate/FixedRateStorageWrapper.sol"; -abstract contract TotalBalancesStorageWrapper is PauseStorageWrapper { - function _getTotalBalance(address /*_tokenHolder*/) internal view virtual returns (uint256 totalBalance) { +abstract contract TotalBalancesStorageWrapper is FixedRateStorageWrapper { + function _getTotalBalance(address /*_tokenHolder*/) internal view virtual override returns (uint256 totalBalance) { return 0; } function _getTotalBalanceForAdjustedAt( address /*_tokenHolder*/, uint256 /*_timestamp*/ - ) internal view virtual returns (uint256 totalBalance) { + ) internal view virtual override returns (uint256 totalBalance) { return 0; } function _getTotalBalanceForByPartitionAdjusted( - bytes32 partition, - address tokenHolder - ) internal view virtual returns (uint256 totalBalance); - - function _getTotalBalanceOfAtSnapshot( - uint256 snapshotId, - address tokenHolder - ) internal view virtual returns (uint256 totalBalance); - - function _getTotalBalanceOfAtSnapshotByPartition( - bytes32 partition, - uint256 snapshotId, - address tokenHolder - ) internal view virtual returns (uint256 totalBalance); + bytes32 /*_partition*/, + address /*_tokenHolder*/ + ) internal view virtual override returns (uint256) { + return 0; + } } diff --git a/packages/ats/contracts/contracts/layer_0/transferAndLock/TransferAndLockStorageWrapper.sol b/packages/ats/contracts/contracts/layer_0/transferAndLock/TransferAndLockStorageWrapper.sol deleted file mode 100644 index 8db597055..000000000 --- a/packages/ats/contracts/contracts/layer_0/transferAndLock/TransferAndLockStorageWrapper.sol +++ /dev/null @@ -1,181 +0,0 @@ -// SPDX-License-Identifier: Apache-2.0 -pragma solidity >=0.8.0 <0.9.0; - -import { checkNounceAndDeadline, verify } from "../../layer_1/protectedPartitions/signatureVerification.sol"; -import { ITransferAndLock } from "../../layer_3/interfaces/ITransferAndLock.sol"; -import { ITransferAndLockStorageWrapper } from "../../layer_3/interfaces/ITransferAndLockStorageWrapper.sol"; -import { _DEFAULT_PARTITION } from "../../layer_0/constants/values.sol"; -import { - getMessageHashTransferAndLockByPartition, - getMessageHashTransferAndLock -} from "../../layer_3/transferAndLock/signatureVerification.sol"; -import { BasicTransferInfo } from "../../layer_1/interfaces/ERC1400/IERC1410.sol"; -import { SecurityStorageWrapper } from "../security/SecurityStorageWrapper.sol"; - -abstract contract TransferAndLockStorageWrapper is ITransferAndLockStorageWrapper, SecurityStorageWrapper { - function _protectedTransferAndLockByPartition( - bytes32 _partition, - ITransferAndLock.TransferAndLockStruct calldata _transferAndLock, - uint256 _deadline, - uint256 _nounce, - bytes calldata _signature - ) internal returns (bool success_, uint256 lockId_) { - checkNounceAndDeadline( - _nounce, - _transferAndLock.from, - _getNounceFor(_transferAndLock.from), - _deadline, - _blockTimestamp() - ); - - _checkTransferAndLockByPartitionSignature(_partition, _transferAndLock, _deadline, _nounce, _signature); - - _setNounce(_nounce, _transferAndLock.from); - - _transferByPartition( - _msgSender(), - BasicTransferInfo(_transferAndLock.to, _transferAndLock.amount), - _partition, - _transferAndLock.data, - _msgSender(), - "" - ); - (success_, lockId_) = _lockByPartition( - _partition, - _transferAndLock.amount, - _transferAndLock.to, - _transferAndLock.expirationTimestamp - ); - - emit PartitionTransferredAndLocked( - _partition, - _msgSender(), - _transferAndLock.to, - _transferAndLock.amount, - _transferAndLock.data, - _transferAndLock.expirationTimestamp, - lockId_ - ); - } - - function _protectedTransferAndLock( - ITransferAndLock.TransferAndLockStruct calldata _transferAndLock, - uint256 _deadline, - uint256 _nounce, - bytes calldata _signature - ) internal returns (bool success_, uint256 lockId_) { - checkNounceAndDeadline( - _nounce, - _transferAndLock.from, - _getNounceFor(_transferAndLock.from), - _deadline, - _blockTimestamp() - ); - - _checkTransferAndLockSignature(_transferAndLock, _deadline, _nounce, _signature); - - _setNounce(_nounce, _transferAndLock.from); - - _transferByPartition( - _msgSender(), - BasicTransferInfo(_transferAndLock.to, _transferAndLock.amount), - _DEFAULT_PARTITION, - _transferAndLock.data, - _msgSender(), - "" - ); - (success_, lockId_) = _lockByPartition( - _DEFAULT_PARTITION, - _transferAndLock.amount, - _transferAndLock.to, - _transferAndLock.expirationTimestamp - ); - - emit PartitionTransferredAndLocked( - _DEFAULT_PARTITION, - _msgSender(), - _transferAndLock.to, - _transferAndLock.amount, - _transferAndLock.data, - _transferAndLock.expirationTimestamp, - lockId_ - ); - } - - function _checkTransferAndLockByPartitionSignature( - bytes32 _partition, - ITransferAndLock.TransferAndLockStruct calldata _transferAndLock, - uint256 _deadline, - uint256 _nounce, - bytes calldata _signature - ) internal view { - if (!_isTransferAndLockByPartitionSignatureValid(_partition, _transferAndLock, _deadline, _nounce, _signature)) - revert WrongSignature(); - } - - function _isTransferAndLockByPartitionSignatureValid( - bytes32 _partition, - ITransferAndLock.TransferAndLockStruct calldata _transferAndLock, - uint256 _deadline, - uint256 _nounce, - bytes calldata _signature - ) internal view returns (bool) { - bytes32 functionHash = getMessageHashTransferAndLockByPartition( - _partition, - _transferAndLock.from, - _transferAndLock.to, - _transferAndLock.amount, - _transferAndLock.data, - _transferAndLock.expirationTimestamp, - _deadline, - _nounce - ); - return - verify( - _transferAndLock.from, - functionHash, - _signature, - _protectedPartitionsStorage().contractName, - _protectedPartitionsStorage().contractVersion, - _blockChainid(), - address(this) - ); - } - - function _checkTransferAndLockSignature( - ITransferAndLock.TransferAndLockStruct calldata _transferAndLock, - uint256 _deadline, - uint256 _nounce, - bytes calldata _signature - ) internal view { - if (!_isTransferAndLockSignatureValid(_transferAndLock, _deadline, _nounce, _signature)) - revert WrongSignature(); - } - - function _isTransferAndLockSignatureValid( - ITransferAndLock.TransferAndLockStruct calldata _transferAndLock, - uint256 _deadline, - uint256 _nounce, - bytes calldata _signature - ) internal view returns (bool) { - bytes32 functionHash = getMessageHashTransferAndLock( - _transferAndLock.from, - _transferAndLock.to, - _transferAndLock.amount, - _transferAndLock.data, - _transferAndLock.expirationTimestamp, - _deadline, - _nounce - ); - return - verify( - _transferAndLock.from, - functionHash, - _signature, - _protectedPartitionsStorage().contractName, - _protectedPartitionsStorage().contractVersion, - _blockChainid(), - address(this) - ); - } -} diff --git a/packages/ats/contracts/contracts/layer_0_extensions/bond/fixedInterestRate/Common.sol b/packages/ats/contracts/contracts/layer_0_extensions/bond/fixedInterestRate/Common.sol new file mode 100644 index 000000000..8dcefc059 --- /dev/null +++ b/packages/ats/contracts/contracts/layer_0_extensions/bond/fixedInterestRate/Common.sol @@ -0,0 +1,7 @@ +// SPDX-License-Identifier: Apache-2.0 +pragma solidity >=0.8.0 <0.9.0; + +import { BondStorageWrapperFixedInterestRate } from "./bond/BondStorageWrapper.sol"; + +// solhint-disable no-empty-blocks +abstract contract CommonFixedInterestRate is BondStorageWrapperFixedInterestRate {} diff --git a/packages/ats/contracts/contracts/layer_0_extensions/bond/fixedInterestRate/FACETS.md b/packages/ats/contracts/contracts/layer_0_extensions/bond/fixedInterestRate/FACETS.md new file mode 100644 index 000000000..63007b245 --- /dev/null +++ b/packages/ats/contracts/contracts/layer_0_extensions/bond/fixedInterestRate/FACETS.md @@ -0,0 +1,3 @@ +# Bond Fixed Interest Rate Custom Facets + +- Bond diff --git a/packages/ats/contracts/contracts/layer_0_extensions/bond/fixedInterestRate/Internals.sol b/packages/ats/contracts/contracts/layer_0_extensions/bond/fixedInterestRate/Internals.sol new file mode 100644 index 000000000..6552facee --- /dev/null +++ b/packages/ats/contracts/contracts/layer_0_extensions/bond/fixedInterestRate/Internals.sol @@ -0,0 +1,7 @@ +// SPDX-License-Identifier: Apache-2.0 +pragma solidity >=0.8.0 <0.9.0; + +import { ModifiersFixedInterestRate } from "./Modifiers.sol"; + +// solhint-disable-next-line no-empty-blocks +abstract contract InternalsFixedInterestRate is ModifiersFixedInterestRate {} diff --git a/packages/ats/contracts/contracts/layer_0_extensions/bond/fixedInterestRate/Modifiers.sol b/packages/ats/contracts/contracts/layer_0_extensions/bond/fixedInterestRate/Modifiers.sol new file mode 100644 index 000000000..6553d9745 --- /dev/null +++ b/packages/ats/contracts/contracts/layer_0_extensions/bond/fixedInterestRate/Modifiers.sol @@ -0,0 +1,7 @@ +// SPDX-License-Identifier: Apache-2.0 +pragma solidity >=0.8.0 <0.9.0; + +import { Internals } from "contracts/layer_0/Internals.sol"; + +// solhint-disable-next-line no-empty-blocks +abstract contract ModifiersFixedInterestRate is Internals {} diff --git a/packages/ats/contracts/contracts/layer_0_extensions/bond/fixedInterestRate/bond/BondStorageWrapper.sol b/packages/ats/contracts/contracts/layer_0_extensions/bond/fixedInterestRate/bond/BondStorageWrapper.sol new file mode 100644 index 000000000..404c7ccd3 --- /dev/null +++ b/packages/ats/contracts/contracts/layer_0_extensions/bond/fixedInterestRate/bond/BondStorageWrapper.sol @@ -0,0 +1,27 @@ +// SPDX-License-Identifier: Apache-2.0 +pragma solidity >=0.8.0 <0.9.0; + +import { IBondRead } from "contracts/layer_2/interfaces/bond/IBondRead.sol"; +import { InternalsFixedInterestRate } from "../Internals.sol"; +import { Common } from "contracts/layer_0/common/Common.sol"; +import { Internals } from "contracts/layer_0/Internals.sol"; +import { BondStorageWrapper } from "contracts/layer_0/bond/BondStorageWrapper.sol"; + +abstract contract BondStorageWrapperFixedInterestRate is InternalsFixedInterestRate, Common { + error InterestRateIsFixed(); + + function _setCoupon( + IBondRead.Coupon memory _newCoupon + ) internal virtual override(Internals, BondStorageWrapper) returns (bytes32 corporateActionId_, uint256 couponID_) { + if ( + _newCoupon.rateStatus != IBondRead.RateCalculationStatus.PENDING || + _newCoupon.rate != 0 || + _newCoupon.rateDecimals != 0 + ) revert InterestRateIsFixed(); + + (_newCoupon.rate, _newCoupon.rateDecimals) = _getRate(); + _newCoupon.rateStatus = IBondRead.RateCalculationStatus.SET; + + return super._setCoupon(_newCoupon); + } +} diff --git a/packages/ats/contracts/contracts/layer_0_extensions/bond/fixingDateInterestRate/BondStorageWrapperFixingDateInterestRate.sol b/packages/ats/contracts/contracts/layer_0_extensions/bond/fixingDateInterestRate/BondStorageWrapperFixingDateInterestRate.sol new file mode 100644 index 000000000..de6adc4af --- /dev/null +++ b/packages/ats/contracts/contracts/layer_0_extensions/bond/fixingDateInterestRate/BondStorageWrapperFixingDateInterestRate.sol @@ -0,0 +1,53 @@ +// SPDX-License-Identifier: Apache-2.0 +pragma solidity >=0.8.0 <0.9.0; + +import { IBondRead } from "contracts/layer_2/interfaces/bond/IBondRead.sol"; +import { COUPON_LISTING_TASK_TYPE } from "../../../layer_0/constants/values.sol"; +import { LowLevelCall } from "contracts/layer_0/common/libraries/LowLevelCall.sol"; +import { EnumerableSet } from "@openzeppelin/contracts/utils/structs/EnumerableSet.sol"; +import { + ScheduledCrossOrderedTasksStorageWrapperFixingDateInterestRate +} from "./ScheduledCrossOrderedTasksStorageWrapper.sol"; + +abstract contract BondStorageWrapperFixingDateInterestRate is + ScheduledCrossOrderedTasksStorageWrapperFixingDateInterestRate +{ + using LowLevelCall for address; + using EnumerableSet for EnumerableSet.Bytes32Set; + + function _checkCoupon( + IBondRead.Coupon memory _newCoupon, + bytes4 _reasonCode, + bytes memory _details + ) internal virtual { + if ( + _newCoupon.rateStatus != IBondRead.RateCalculationStatus.PENDING || + _newCoupon.rate != 0 || + _newCoupon.rateDecimals != 0 + ) LowLevelCall.revertWithData(_reasonCode, _details); + } + + function _initCoupon(bytes32 _actionId, IBondRead.Coupon memory _newCoupon) internal virtual override { + super._initCoupon(_actionId, _newCoupon); + + _addScheduledCrossOrderedTask(_newCoupon.fixingDate, abi.encode(COUPON_LISTING_TASK_TYPE)); + _addScheduledCouponListing(_newCoupon.fixingDate, abi.encode(_actionId)); + } + + function _getCouponAdjusted( + uint256 _couponID, + function(uint256, IBondRead.Coupon memory) internal view returns (uint256, uint8) _calculateRate + ) internal view virtual returns (IBondRead.RegisteredCoupon memory registeredCoupon_) { + registeredCoupon_ = super._getCoupon(_couponID); + + if (registeredCoupon_.coupon.rateStatus == IBondRead.RateCalculationStatus.SET) return registeredCoupon_; + + if (registeredCoupon_.coupon.fixingDate > _blockTimestamp()) return registeredCoupon_; + + (registeredCoupon_.coupon.rate, registeredCoupon_.coupon.rateDecimals) = _calculateRate( + _couponID, + registeredCoupon_.coupon + ); + registeredCoupon_.coupon.rateStatus = IBondRead.RateCalculationStatus.SET; + } +} diff --git a/packages/ats/contracts/contracts/layer_0_extensions/bond/fixingDateInterestRate/ScheduledCrossOrderedTasksStorageWrapper.sol b/packages/ats/contracts/contracts/layer_0_extensions/bond/fixingDateInterestRate/ScheduledCrossOrderedTasksStorageWrapper.sol new file mode 100644 index 000000000..1a3d9990d --- /dev/null +++ b/packages/ats/contracts/contracts/layer_0_extensions/bond/fixingDateInterestRate/ScheduledCrossOrderedTasksStorageWrapper.sol @@ -0,0 +1,14 @@ +// SPDX-License-Identifier: Apache-2.0 +pragma solidity >=0.8.0 <0.9.0; + +import { Common } from "contracts/layer_0/common/Common.sol"; +import { COUPON_LISTING_TASK_TYPE } from "contracts/layer_0/constants/values.sol"; + +abstract contract ScheduledCrossOrderedTasksStorageWrapperFixingDateInterestRate is Common { + function _postOnScheduledCrossOrderedTaskTriggered(bytes32 taskType) internal override { + if (taskType == COUPON_LISTING_TASK_TYPE) { + _triggerScheduledCouponListing(1); + return; + } + } +} diff --git a/packages/ats/contracts/contracts/layer_0_extensions/bond/fixingDateInterestRate/kpiInterestRate/kpiLinkedInterestRate/Common.sol b/packages/ats/contracts/contracts/layer_0_extensions/bond/fixingDateInterestRate/kpiInterestRate/kpiLinkedInterestRate/Common.sol new file mode 100644 index 000000000..ce7beed80 --- /dev/null +++ b/packages/ats/contracts/contracts/layer_0_extensions/bond/fixingDateInterestRate/kpiInterestRate/kpiLinkedInterestRate/Common.sol @@ -0,0 +1,7 @@ +// SPDX-License-Identifier: Apache-2.0 +pragma solidity >=0.8.0 <0.9.0; + +import { BondStorageWrapperKpiLinkedInterestRate } from "./bond/BondStorageWrapper.sol"; + +// solhint-disable no-empty-blocks +abstract contract CommonKpiLinkedInterestRate is BondStorageWrapperKpiLinkedInterestRate {} diff --git a/packages/ats/contracts/contracts/layer_0_extensions/bond/fixingDateInterestRate/kpiInterestRate/kpiLinkedInterestRate/FACETS.md b/packages/ats/contracts/contracts/layer_0_extensions/bond/fixingDateInterestRate/kpiInterestRate/kpiLinkedInterestRate/FACETS.md new file mode 100644 index 000000000..4aaff895c --- /dev/null +++ b/packages/ats/contracts/contracts/layer_0_extensions/bond/fixingDateInterestRate/kpiInterestRate/kpiLinkedInterestRate/FACETS.md @@ -0,0 +1,29 @@ +# Bond Kpi Linked Interest Rate Custom Facets + +- Bond +- BondRead +- Adjust Balances +- Clearing Actions +- Clearing Hold Creation +- Clearing Redeem +- Clearing Transfer +- ERC1410 Issuer +- ERC1410 Management +- ERC1410 Token Holder +- ERC1594 +- ERC1644 +- ERC20 +- ERC20 Votes +- ERC3643 Batch +- ERC3643 Management +- ERC3643 Operations +- Freeze +- Hold Management +- Hold Token holder +- Kpi Linked Rate +- SPT Linked Rate +- Kpis +- Lock +- Scheduled Cross Ordered Tasks +- Snapshots +- Transfer And Lock diff --git a/packages/ats/contracts/contracts/layer_0_extensions/bond/fixingDateInterestRate/kpiInterestRate/kpiLinkedInterestRate/Internals.sol b/packages/ats/contracts/contracts/layer_0_extensions/bond/fixingDateInterestRate/kpiInterestRate/kpiLinkedInterestRate/Internals.sol new file mode 100644 index 000000000..85123fca3 --- /dev/null +++ b/packages/ats/contracts/contracts/layer_0_extensions/bond/fixingDateInterestRate/kpiInterestRate/kpiLinkedInterestRate/Internals.sol @@ -0,0 +1,15 @@ +// SPDX-License-Identifier: Apache-2.0 +pragma solidity >=0.8.0 <0.9.0; + +import { IBondRead } from "contracts/layer_2/interfaces/bond/IBondRead.sol"; +import { ModifiersKpiLinkedInterestRate } from "./Modifiers.sol"; + +abstract contract InternalsKpiLinkedInterestRate is ModifiersKpiLinkedInterestRate { + // ===== Bond Methods ===== + function _setKpiLinkedInterestRate(uint256 _couponID) internal virtual; + + function _calculateKpiLinkedInterestRate( + uint256 _couponID, + IBondRead.Coupon memory _coupon + ) internal view virtual returns (uint256 rate_, uint8 rateDecimals); +} diff --git a/packages/ats/contracts/contracts/layer_0_extensions/bond/fixingDateInterestRate/kpiInterestRate/kpiLinkedInterestRate/Modifiers.sol b/packages/ats/contracts/contracts/layer_0_extensions/bond/fixingDateInterestRate/kpiInterestRate/kpiLinkedInterestRate/Modifiers.sol new file mode 100644 index 000000000..624d1066b --- /dev/null +++ b/packages/ats/contracts/contracts/layer_0_extensions/bond/fixingDateInterestRate/kpiInterestRate/kpiLinkedInterestRate/Modifiers.sol @@ -0,0 +1,7 @@ +// SPDX-License-Identifier: Apache-2.0 +pragma solidity >=0.8.0 <0.9.0; + +import { Internals } from "contracts/layer_0/Internals.sol"; + +// solhint-disable-next-line no-empty-blocks +abstract contract ModifiersKpiLinkedInterestRate is Internals {} diff --git a/packages/ats/contracts/contracts/layer_0_extensions/bond/fixingDateInterestRate/kpiInterestRate/kpiLinkedInterestRate/bond/BondStorageWrapper.sol b/packages/ats/contracts/contracts/layer_0_extensions/bond/fixingDateInterestRate/kpiInterestRate/kpiLinkedInterestRate/bond/BondStorageWrapper.sol new file mode 100644 index 000000000..400c10d99 --- /dev/null +++ b/packages/ats/contracts/contracts/layer_0_extensions/bond/fixingDateInterestRate/kpiInterestRate/kpiLinkedInterestRate/bond/BondStorageWrapper.sol @@ -0,0 +1,139 @@ +// SPDX-License-Identifier: Apache-2.0 +pragma solidity >=0.8.0 <0.9.0; + +import { IBondRead } from "contracts/layer_2/interfaces/bond/IBondRead.sol"; +import { IKpi } from "contracts/layer_2/interfaces/interestRates/kpiLinkedRate/IKpi.sol"; +import { IKpiLinkedRate } from "contracts/layer_2/interfaces/interestRates/kpiLinkedRate/IKpiLinkedRate.sol"; +import { LowLevelCall } from "contracts/layer_0/common/libraries/LowLevelCall.sol"; +import { EnumerableSet } from "@openzeppelin/contracts/utils/structs/EnumerableSet.sol"; +import { DecimalsLib } from "contracts/layer_0/common/libraries/DecimalsLib.sol"; +import { InternalsKpiLinkedInterestRate } from "../Internals.sol"; +import { BondStorageWrapperFixingDateInterestRate } from "../../../BondStorageWrapperFixingDateInterestRate.sol"; +import { Internals } from "contracts/layer_0/Internals.sol"; +import { BondStorageWrapper } from "contracts/layer_0/bond/BondStorageWrapper.sol"; + +abstract contract BondStorageWrapperKpiLinkedInterestRate is + InternalsKpiLinkedInterestRate, + BondStorageWrapperFixingDateInterestRate +{ + using LowLevelCall for address; + using EnumerableSet for EnumerableSet.Bytes32Set; + + error InterestRateIsKpiLinked(); + + function _setCoupon( + IBondRead.Coupon memory _newCoupon + ) internal virtual override(Internals, BondStorageWrapper) returns (bytes32 corporateActionId_, uint256 couponID_) { + _checkCoupon(_newCoupon, InterestRateIsKpiLinked.selector, ""); + + return super._setCoupon(_newCoupon); + } + + function _addToCouponsOrderedList(uint256 _couponID) internal virtual override(Internals, BondStorageWrapper) { + super._addToCouponsOrderedList(_couponID); + _setKpiLinkedInterestRate(_couponID); + } + + function _setKpiLinkedInterestRate(uint256 _couponID) internal override { + IBondRead.Coupon memory coupon = _getCoupon(_couponID).coupon; + + (uint256 rate, uint8 rateDecimals) = _calculateKpiLinkedInterestRate(_couponID, coupon); + + _updateCouponRate(_couponID, coupon, rate, rateDecimals); + } + + function _getCoupon( + uint256 _couponID + ) + internal + view + virtual + override(Internals, BondStorageWrapper) + returns (IBondRead.RegisteredCoupon memory registeredCoupon_) + { + return _getCouponAdjusted(_couponID, _calculateKpiLinkedInterestRate); + } + + function _calculateKpiLinkedInterestRate( + uint256 _couponID, + IBondRead.Coupon memory _coupon + ) internal view override returns (uint256 rate_, uint8 rateDecimals) { + KpiLinkedRateDataStorage memory kpiLinkedRateStorage = _kpiLinkedRateStorage(); + + if (_coupon.fixingDate < kpiLinkedRateStorage.startPeriod) { + return (kpiLinkedRateStorage.startRate, kpiLinkedRateStorage.rateDecimals); + } + + if (kpiLinkedRateStorage.kpiOracle == address(0)) { + return (kpiLinkedRateStorage.baseRate, kpiLinkedRateStorage.rateDecimals); + } + + (uint256 impactData, bool reportFound) = abi.decode( + kpiLinkedRateStorage.kpiOracle.functionStaticCall( + abi.encodeWithSelector( + IKpi.getKpiData.selector, + _coupon.fixingDate - kpiLinkedRateStorage.reportPeriod, + _coupon.fixingDate + ), + IKpiLinkedRate.KpiOracleCalledFailed.selector + ), + (uint256, bool) + ); + + uint256 rate; + + if (!reportFound) { + (uint256 previousRate, uint8 previousRateDecimals) = _previousRate(_couponID); + + previousRate = DecimalsLib.calculateDecimalsAdjustment( + previousRate, + previousRateDecimals, + kpiLinkedRateStorage.rateDecimals + ); + + rate = previousRate + kpiLinkedRateStorage.missedPenalty; + + if (rate > kpiLinkedRateStorage.maxRate) rate = kpiLinkedRateStorage.maxRate; + + return (rate, kpiLinkedRateStorage.rateDecimals); + } + + uint256 impactDeltaRate; + uint256 factor = 10 ** kpiLinkedRateStorage.adjustmentPrecision; + + if (kpiLinkedRateStorage.baseLine > impactData) { + impactDeltaRate = + (factor * (kpiLinkedRateStorage.baseLine - impactData)) / + (kpiLinkedRateStorage.baseLine - kpiLinkedRateStorage.maxDeviationFloor); + if (impactDeltaRate > factor) impactDeltaRate = factor; + rate = + kpiLinkedRateStorage.baseRate - + (((kpiLinkedRateStorage.baseRate - kpiLinkedRateStorage.minRate) * impactDeltaRate) / factor); + } else { + impactDeltaRate = + (factor * (impactData - kpiLinkedRateStorage.baseLine)) / + (kpiLinkedRateStorage.maxDeviationCap - kpiLinkedRateStorage.baseLine); + if (impactDeltaRate > factor) impactDeltaRate = factor; + rate = + kpiLinkedRateStorage.baseRate + + (((kpiLinkedRateStorage.maxRate - kpiLinkedRateStorage.baseRate) * impactDeltaRate) / factor); + } + + return (rate, kpiLinkedRateStorage.rateDecimals); + } + + function _previousRate(uint256 _couponID) internal view returns (uint256 rate_, uint8 rateDecimals_) { + uint256 previousCouponId = _getPreviousCouponInOrderedList(_couponID); + + if (previousCouponId == 0) { + return (0, 0); + } + + IBondRead.Coupon memory previousCoupon = _getCoupon(previousCouponId).coupon; + + if (previousCoupon.rateStatus != IBondRead.RateCalculationStatus.SET) { + return _calculateKpiLinkedInterestRate(previousCouponId, previousCoupon); + } + return (previousCoupon.rate, previousCoupon.rateDecimals); + } +} diff --git a/packages/ats/contracts/contracts/layer_0_extensions/bond/fixingDateInterestRate/kpiInterestRate/sustainabilityPerformanceTargetInterestRate/Common.sol b/packages/ats/contracts/contracts/layer_0_extensions/bond/fixingDateInterestRate/kpiInterestRate/sustainabilityPerformanceTargetInterestRate/Common.sol new file mode 100644 index 000000000..65b47c155 --- /dev/null +++ b/packages/ats/contracts/contracts/layer_0_extensions/bond/fixingDateInterestRate/kpiInterestRate/sustainabilityPerformanceTargetInterestRate/Common.sol @@ -0,0 +1,9 @@ +// SPDX-License-Identifier: Apache-2.0 +pragma solidity >=0.8.0 <0.9.0; + +import { BondStorageWrapperSustainabilityPerformanceTargetInterestRate } from "./bond/BondStorageWrapper.sol"; + +// solhint-disable no-empty-blocks +abstract contract CommonSustainabilityPerformanceTargetInterestRate is + BondStorageWrapperSustainabilityPerformanceTargetInterestRate +{} diff --git a/packages/ats/contracts/contracts/layer_0_extensions/bond/fixingDateInterestRate/kpiInterestRate/sustainabilityPerformanceTargetInterestRate/FACETS.md b/packages/ats/contracts/contracts/layer_0_extensions/bond/fixingDateInterestRate/kpiInterestRate/sustainabilityPerformanceTargetInterestRate/FACETS.md new file mode 100644 index 000000000..ea4606710 --- /dev/null +++ b/packages/ats/contracts/contracts/layer_0_extensions/bond/fixingDateInterestRate/kpiInterestRate/sustainabilityPerformanceTargetInterestRate/FACETS.md @@ -0,0 +1,29 @@ +# Bond Kpi SPT Interest Rate Custom Facets + +- Bond +- BondRead +- Adjust Balances +- Clearing Actions +- Clearing Hold Creation +- Clearing Redeem +- Clearing Transfer +- ERC1410 Issuer +- ERC1410 Management +- ERC1410 Token Holder +- ERC1594 +- ERC1644 +- ERC20 +- ERC20 Votes +- ERC3643 Batch +- ERC3643 Management +- ERC3643 Operations +- Freeze +- Hold Management +- Hold Token holder +- Kpi Linked Rate +- SPT Linked Rate +- Kpis +- Lock +- Scheduled Cross Ordered Tasks +- Snapshots +- Transfer And Lock diff --git a/packages/ats/contracts/contracts/layer_0_extensions/bond/fixingDateInterestRate/kpiInterestRate/sustainabilityPerformanceTargetInterestRate/Internals.sol b/packages/ats/contracts/contracts/layer_0_extensions/bond/fixingDateInterestRate/kpiInterestRate/sustainabilityPerformanceTargetInterestRate/Internals.sol new file mode 100644 index 000000000..323328b0e --- /dev/null +++ b/packages/ats/contracts/contracts/layer_0_extensions/bond/fixingDateInterestRate/kpiInterestRate/sustainabilityPerformanceTargetInterestRate/Internals.sol @@ -0,0 +1,37 @@ +// SPDX-License-Identifier: Apache-2.0 +pragma solidity >=0.8.0 <0.9.0; + +import { CheckpointsLib } from "contracts/layer_0/common/libraries/CheckpointsLib.sol"; +import { ModifiersSustainabilityPerformanceTargetInterestRate } from "./Modifiers.sol"; +import { IBondRead } from "contracts/layer_2/interfaces/bond/IBondRead.sol"; + +abstract contract InternalsSustainabilityPerformanceTargetInterestRate is + ModifiersSustainabilityPerformanceTargetInterestRate +{ + // ===== KPIs Methods ===== + function _addKpiData(uint256 _date, uint256 _value, address _project) internal virtual; + function _pushKpiData(CheckpointsLib.Checkpoint[] storage _ckpt, uint256 _date, uint256 _value) internal virtual; + function _overwriteKpiData( + CheckpointsLib.Checkpoint[] storage _ckpt, + uint256 _date, + uint256 _value, + uint256 _pos + ) internal virtual; + function _setMinDate(uint256 _date) internal virtual; + function _setCheckpointDate(uint256 _date, address _project) internal virtual; + // ===== Bond Methods ===== + function _setSustainabilityPerformanceTargetInterestRate(uint256 _couponID) internal virtual; + + function _getLatestKpiData( + uint256 _from, + uint256 _to, + address _project + ) internal view virtual returns (uint256 value_, bool exists_); + function _getMinDateAdjusted() internal view virtual returns (uint256 minDate_); + function _isCheckpointDate(uint256 _date, address _project) internal view virtual returns (bool); + + function _calculateSustainabilityPerformanceTargetInterestRate( + uint256 _couponID, + IBondRead.Coupon memory _coupon + ) internal view virtual returns (uint256 rate_, uint8 rateDecimals); +} diff --git a/packages/ats/contracts/contracts/layer_0_extensions/bond/fixingDateInterestRate/kpiInterestRate/sustainabilityPerformanceTargetInterestRate/Modifiers.sol b/packages/ats/contracts/contracts/layer_0_extensions/bond/fixingDateInterestRate/kpiInterestRate/sustainabilityPerformanceTargetInterestRate/Modifiers.sol new file mode 100644 index 000000000..7c047b18e --- /dev/null +++ b/packages/ats/contracts/contracts/layer_0_extensions/bond/fixingDateInterestRate/kpiInterestRate/sustainabilityPerformanceTargetInterestRate/Modifiers.sol @@ -0,0 +1,8 @@ +// SPDX-License-Identifier: Apache-2.0 +pragma solidity >=0.8.0 <0.9.0; + +import { Internals } from "contracts/layer_0/Internals.sol"; + +abstract contract ModifiersSustainabilityPerformanceTargetInterestRate is Internals { + modifier isValidDate(uint256 _date, address _project) virtual; +} diff --git a/packages/ats/contracts/contracts/layer_0_extensions/bond/fixingDateInterestRate/kpiInterestRate/sustainabilityPerformanceTargetInterestRate/bond/BondStorageWrapper.sol b/packages/ats/contracts/contracts/layer_0_extensions/bond/fixingDateInterestRate/kpiInterestRate/sustainabilityPerformanceTargetInterestRate/bond/BondStorageWrapper.sol new file mode 100644 index 000000000..9e80e0679 --- /dev/null +++ b/packages/ats/contracts/contracts/layer_0_extensions/bond/fixingDateInterestRate/kpiInterestRate/sustainabilityPerformanceTargetInterestRate/bond/BondStorageWrapper.sol @@ -0,0 +1,143 @@ +// SPDX-License-Identifier: Apache-2.0 +pragma solidity >=0.8.0 <0.9.0; + +import { IBondRead } from "contracts/layer_2/interfaces/bond/IBondRead.sol"; +// prettier-ignore +// solhint-disable-next-line max-line-length +import { ISustainabilityPerformanceTargetRate } from "contracts/layer_2/interfaces/interestRates/sustainabilityPerformanceTargetRate/ISustainabilityPerformanceTargetRate.sol"; +import { EnumerableSet } from "@openzeppelin/contracts/utils/structs/EnumerableSet.sol"; +import { + ProceedRecipientsStorageWrapperSustainabilityPerformanceTargetInterestRate +} from "../proceedRecipients/ProceedRecipientsStorageWrapper.sol"; +import { Internals } from "contracts/layer_0/Internals.sol"; +import { BondStorageWrapper } from "contracts/layer_0/bond/BondStorageWrapper.sol"; + +abstract contract BondStorageWrapperSustainabilityPerformanceTargetInterestRate is + ProceedRecipientsStorageWrapperSustainabilityPerformanceTargetInterestRate +{ + using EnumerableSet for EnumerableSet.Bytes32Set; + + error InterestRateIsSustainabilityPerformanceTarget(); + + function _setCoupon( + IBondRead.Coupon memory _newCoupon + ) internal virtual override(Internals, BondStorageWrapper) returns (bytes32 corporateActionId_, uint256 couponID_) { + _checkCoupon(_newCoupon, InterestRateIsSustainabilityPerformanceTarget.selector, ""); + + return super._setCoupon(_newCoupon); + } + + function _addToCouponsOrderedList(uint256 _couponID) internal virtual override { + super._addToCouponsOrderedList(_couponID); + _setSustainabilityPerformanceTargetInterestRate(_couponID); + } + + function _setSustainabilityPerformanceTargetInterestRate(uint256 _couponID) internal override { + IBondRead.Coupon memory coupon = _getCoupon(_couponID).coupon; + + (uint256 rate, uint8 rateDecimals) = _calculateSustainabilityPerformanceTargetInterestRate(_couponID, coupon); + + _updateCouponRate(_couponID, coupon, rate, rateDecimals); + } + + function _getCoupon( + uint256 _couponID + ) + internal + view + virtual + override(Internals, BondStorageWrapper) + returns (IBondRead.RegisteredCoupon memory registeredCoupon_) + { + return _getCouponAdjusted(_couponID, _calculateSustainabilityPerformanceTargetInterestRate); + } + + function _calculateSustainabilityPerformanceTargetInterestRate( + uint256 _couponID, + IBondRead.Coupon memory _coupon + ) internal view override returns (uint256 rate_, uint8 rateDecimals_) { + SustainabilityPerformanceTargetRateDataStorage + storage sustainabilityPerformanceTargetRateStorage = _sustainabilityPerformanceTargetRateStorage(); + + if (_coupon.fixingDate < sustainabilityPerformanceTargetRateStorage.startPeriod) { + return ( + sustainabilityPerformanceTargetRateStorage.startRate, + sustainabilityPerformanceTargetRateStorage.rateDecimals + ); + } + + rate_ = sustainabilityPerformanceTargetRateStorage.baseRate; + rateDecimals_ = sustainabilityPerformanceTargetRateStorage.rateDecimals; + + address[] memory projects = _getProceedRecipients(0, _getProceedRecipientsCount()); + uint256 totalRateToAdd = 0; + uint256 totalRateToSubtract = 0; + + for (uint256 index = 0; index < projects.length; ) { + ISustainabilityPerformanceTargetRate.ImpactData memory impactData = _getSPTImpactDataFor(projects[index]); + + (uint256 value, bool exists) = _getLatestKpiData( + _previousFixingDate(_couponID), + _coupon.fixingDate, + projects[index] + ); + + if (impactData.impactDataMode == ISustainabilityPerformanceTargetRate.ImpactDataMode.PENALTY) { + if (!exists) { + totalRateToAdd += impactData.deltaRate; + continue; + } + if (impactData.baseLineMode == ISustainabilityPerformanceTargetRate.BaseLineMode.MINIMUM) { + if (value < impactData.baseLine) { + totalRateToAdd += impactData.deltaRate; + continue; + } + } else { + if (value > impactData.baseLine) { + totalRateToAdd += impactData.deltaRate; + continue; + } + } + } else { + if (!exists) { + continue; + } + if (impactData.baseLineMode == ISustainabilityPerformanceTargetRate.BaseLineMode.MINIMUM) { + if (value > impactData.baseLine) { + totalRateToSubtract += impactData.deltaRate; + continue; + } + } else { + if (value < impactData.baseLine) { + totalRateToSubtract += impactData.deltaRate; + continue; + } + } + } + + unchecked { + ++index; + } + } + + rate_ += totalRateToAdd; + + if (rate_ > totalRateToSubtract) { + rate_ -= totalRateToSubtract; + } else { + rate_ = 0; + } + } + + function _previousFixingDate(uint256 _couponID) internal view returns (uint256 fixingDate_) { + uint256 previousCouponId = _getPreviousCouponInOrderedList(_couponID); + + if (previousCouponId == 0) { + return 0; + } + + IBondRead.Coupon memory previousCoupon = _getCoupon(previousCouponId).coupon; + + return previousCoupon.fixingDate; + } +} diff --git a/packages/ats/contracts/contracts/layer_0_extensions/bond/fixingDateInterestRate/kpiInterestRate/sustainabilityPerformanceTargetInterestRate/kpis/KpisStorageWrapper.sol b/packages/ats/contracts/contracts/layer_0_extensions/bond/fixingDateInterestRate/kpiInterestRate/sustainabilityPerformanceTargetInterestRate/kpis/KpisStorageWrapper.sol new file mode 100644 index 000000000..5af187e55 --- /dev/null +++ b/packages/ats/contracts/contracts/layer_0_extensions/bond/fixingDateInterestRate/kpiInterestRate/sustainabilityPerformanceTargetInterestRate/kpis/KpisStorageWrapper.sol @@ -0,0 +1,130 @@ +// SPDX-License-Identifier: Apache-2.0 +pragma solidity >=0.8.0 <0.9.0; + +import { _KPIS_STORAGE_POSITION } from "contracts/layer_0/constants/storagePositions.sol"; +import { IKpis } from "contracts/layer_2/interfaces/kpis/kpiLatest/IKpis.sol"; +import { CheckpointsLib } from "contracts/layer_0/common/libraries/CheckpointsLib.sol"; +import { InternalsSustainabilityPerformanceTargetInterestRate } from "../Internals.sol"; +import { BondStorageWrapperFixingDateInterestRate } from "../../../BondStorageWrapperFixingDateInterestRate.sol"; +import { Internals } from "contracts/layer_0/Internals.sol"; +import { BondStorageWrapper } from "contracts/layer_0/bond/BondStorageWrapper.sol"; + +abstract contract KpisStorageWrapper is + InternalsSustainabilityPerformanceTargetInterestRate, + BondStorageWrapperFixingDateInterestRate +{ + using CheckpointsLib for CheckpointsLib.Checkpoint[]; + + struct KpisDataStorage { + mapping(address => CheckpointsLib.Checkpoint[]) checkpointsByProject; + mapping(address => mapping(uint256 => bool)) checkpointsDatesByProject; + uint256 minDate; + } + + modifier isValidDate(uint256 _date, address _project) override { + if (_date <= _getMinDateAdjusted() || _date > _blockTimestamp()) { + revert IKpis.InvalidDate(_date, _getMinDateAdjusted(), _blockTimestamp()); + } + if (_isCheckpointDate(_date, _project)) { + revert IKpis.KpiDataAlreadyExists(_date); + } + _; + } + + function _addKpiData(uint256 _date, uint256 _value, address _project) internal override { + assert(_isCheckpointDate(_date, _project) == false); + _setCheckpointDate(_date, _project); + + CheckpointsLib.Checkpoint[] storage ckpt = _kpisDataStorage().checkpointsByProject[_project]; + uint256 length = ckpt.length; + + if (length == 0 || ckpt[length - 1].from < _date) { + _pushKpiData(ckpt, _date, _value); + emit IKpis.KpiDataAdded(_project, _date, _value); + return; + } + + _pushKpiData(ckpt, ckpt[length - 1].from, ckpt[length - 1].value); + + for (uint256 index = length - 1; index >= 0; index--) { + if (index == 0) { + _overwriteKpiData(ckpt, _date, _value, index); + break; + } + + assert(ckpt[index - 1].from != _date); + + if (ckpt[index - 1].from < _date) { + _overwriteKpiData(ckpt, _date, _value, index); + break; + } + _overwriteKpiData(ckpt, ckpt[index - 1].from, ckpt[index - 1].value, index); + } + + emit IKpis.KpiDataAdded(_project, _date, _value); + } + + function _pushKpiData(CheckpointsLib.Checkpoint[] storage _ckpt, uint256 _date, uint256 _value) internal override { + _ckpt.push(CheckpointsLib.Checkpoint({ from: _date, value: _value })); + } + + function _overwriteKpiData( + CheckpointsLib.Checkpoint[] storage _ckpt, + uint256 _date, + uint256 _value, + uint256 _pos + ) internal override { + _ckpt[_pos].from = _date; + _ckpt[_pos].value = _value; + } + + function _setMinDate(uint256 _date) internal override { + _kpisDataStorage().minDate = _date; + } + + function _setCheckpointDate(uint256 _date, address _project) internal override { + _kpisDataStorage().checkpointsDatesByProject[_project][_date] = true; + } + + function _addToCouponsOrderedList(uint256 _couponID) internal virtual override(Internals, BondStorageWrapper) { + super._addToCouponsOrderedList(_couponID); + + uint256 lastFixingDate = _getCoupon(_couponID).coupon.fixingDate; + + if (lastFixingDate > _kpisDataStorage().minDate) _kpisDataStorage().minDate = lastFixingDate; + } + + function _getLatestKpiData( + uint256 _from, + uint256 _to, + address _project + ) internal view override returns (uint256 value_, bool exists_) { + (uint256 from, uint256 value) = _kpisDataStorage().checkpointsByProject[_project].checkpointsLookup(_to); + if (from <= _from) return (0, false); + return (value, true); + } + + function _getMinDateAdjusted() internal view override returns (uint256 minDate_) { + minDate_ = _kpisDataStorage().minDate; + + uint256 total = _getCouponsOrderedListTotalAdjusted(); + + if (total == 0) return minDate_; + + uint256 lastFixingDate = _getCoupon(_getCouponFromOrderedListAt(total - 1)).coupon.fixingDate; + + if (lastFixingDate > minDate_) minDate_ = lastFixingDate; + } + + function _isCheckpointDate(uint256 _date, address _project) internal view override returns (bool) { + return _kpisDataStorage().checkpointsDatesByProject[_project][_date]; + } + + function _kpisDataStorage() internal pure returns (KpisDataStorage storage kpisDataStorage_) { + bytes32 position = _KPIS_STORAGE_POSITION; + // solhint-disable-next-line no-inline-assembly + assembly { + kpisDataStorage_.slot := position + } + } +} diff --git a/packages/ats/contracts/contracts/layer_0_extensions/bond/fixingDateInterestRate/kpiInterestRate/sustainabilityPerformanceTargetInterestRate/proceedRecipients/ProceedRecipientsStorageWrapper.sol b/packages/ats/contracts/contracts/layer_0_extensions/bond/fixingDateInterestRate/kpiInterestRate/sustainabilityPerformanceTargetInterestRate/proceedRecipients/ProceedRecipientsStorageWrapper.sol new file mode 100644 index 000000000..54f9b4d1c --- /dev/null +++ b/packages/ats/contracts/contracts/layer_0_extensions/bond/fixingDateInterestRate/kpiInterestRate/sustainabilityPerformanceTargetInterestRate/proceedRecipients/ProceedRecipientsStorageWrapper.sol @@ -0,0 +1,25 @@ +// SPDX-License-Identifier: Apache-2.0 +pragma solidity >=0.8.0 <0.9.0; + +import { KpisStorageWrapper } from "../kpis/KpisStorageWrapper.sol"; +import { Internals } from "contracts/layer_0/Internals.sol"; +import { + ProceedRecipientsStorageWrapper +} from "contracts/layer_0/proceedRecipients/ProceedRecipientsStorageWrapper.sol"; + +abstract contract ProceedRecipientsStorageWrapperSustainabilityPerformanceTargetInterestRate is KpisStorageWrapper { + function _addProceedRecipient( + address _proceedRecipient, + bytes calldata _data + ) internal override(Internals, ProceedRecipientsStorageWrapper) { + _callTriggerPendingScheduledCrossOrderedTasks(); + super._addProceedRecipient(_proceedRecipient, _data); + } + + function _removeProceedRecipient( + address _proceedRecipient + ) internal override(Internals, ProceedRecipientsStorageWrapper) { + _callTriggerPendingScheduledCrossOrderedTasks(); + super._removeProceedRecipient(_proceedRecipient); + } +} diff --git a/packages/ats/contracts/contracts/layer_1/ERC1400/ERC1410/ERC1410Issuer.sol b/packages/ats/contracts/contracts/layer_1/ERC1400/ERC1410/ERC1410Issuer.sol index 4ad26e856..0b93a4e1d 100644 --- a/packages/ats/contracts/contracts/layer_1/ERC1400/ERC1410/ERC1410Issuer.sol +++ b/packages/ats/contracts/contracts/layer_1/ERC1400/ERC1410/ERC1410Issuer.sol @@ -3,16 +3,15 @@ pragma solidity >=0.8.0 <0.9.0; import { _AGENT_ROLE, _ISSUER_ROLE } from "../../constants/roles.sol"; import { IERC1410Issuer } from "../../interfaces/ERC1400/IERC1410Issuer.sol"; -import { Common } from "../../common/Common.sol"; +import { Internals } from "../../../layer_0/Internals.sol"; import { IssueData } from "../../../layer_1/interfaces/ERC1400/IERC1410.sol"; -abstract contract ERC1410Issuer is IERC1410Issuer, Common { +abstract contract ERC1410Issuer is IERC1410Issuer, Internals { function issueByPartition( IssueData calldata _issueData ) external onlyUnpaused - onlyIssuable onlyWithinMaxSupply(_issueData.value) onlyWithinMaxSupplyByPartition(_issueData.partition, _issueData.value) onlyDefaultPartitionWithSinglePartition(_issueData.partition) diff --git a/packages/ats/contracts/contracts/layer_1/ERC1400/ERC1410/ERC1410IssuerFacet.sol b/packages/ats/contracts/contracts/layer_1/ERC1400/ERC1410/ERC1410IssuerFacetBase.sol similarity index 55% rename from packages/ats/contracts/contracts/layer_1/ERC1400/ERC1410/ERC1410IssuerFacet.sol rename to packages/ats/contracts/contracts/layer_1/ERC1400/ERC1410/ERC1410IssuerFacetBase.sol index 85fb6156f..830da8fd9 100644 --- a/packages/ats/contracts/contracts/layer_1/ERC1400/ERC1410/ERC1410IssuerFacet.sol +++ b/packages/ats/contracts/contracts/layer_1/ERC1400/ERC1410/ERC1410IssuerFacetBase.sol @@ -1,24 +1,19 @@ // SPDX-License-Identifier: Apache-2.0 pragma solidity >=0.8.0 <0.9.0; -import { _ERC1410_ISSUER_RESOLVER_KEY } from "../../../layer_1/constants/resolverKeys.sol"; import { IStaticFunctionSelectors } from "../../../interfaces/resolver/resolverProxy/IStaticFunctionSelectors.sol"; import { IERC1410Issuer } from "../../interfaces/ERC1400/IERC1410Issuer.sol"; import { ERC1410Issuer } from "./ERC1410Issuer.sol"; -contract ERC1410IssuerFacet is IStaticFunctionSelectors, ERC1410Issuer { - function getStaticResolverKey() external pure returns (bytes32 staticResolverKey_) { - staticResolverKey_ = _ERC1410_ISSUER_RESOLVER_KEY; - } - - function getStaticFunctionSelectors() external pure returns (bytes4[] memory staticFunctionSelectors_) { +abstract contract ERC1410IssuerFacetBase is IStaticFunctionSelectors, ERC1410Issuer { + function getStaticFunctionSelectors() external pure override returns (bytes4[] memory staticFunctionSelectors_) { staticFunctionSelectors_ = new bytes4[](1); uint256 selectorIndex = 0; // Issue function staticFunctionSelectors_[selectorIndex++] = this.issueByPartition.selector; } - function getStaticInterfaceIds() external pure returns (bytes4[] memory staticInterfaceIds_) { + function getStaticInterfaceIds() external pure override returns (bytes4[] memory staticInterfaceIds_) { staticInterfaceIds_ = new bytes4[](1); staticInterfaceIds_[0] = type(IERC1410Issuer).interfaceId; } diff --git a/packages/ats/contracts/contracts/layer_1/ERC1400/ERC1410/ERC1410Management.sol b/packages/ats/contracts/contracts/layer_1/ERC1400/ERC1410/ERC1410Management.sol index 442506f2d..3531c63d7 100644 --- a/packages/ats/contracts/contracts/layer_1/ERC1400/ERC1410/ERC1410Management.sol +++ b/packages/ats/contracts/contracts/layer_1/ERC1400/ERC1410/ERC1410Management.sol @@ -1,19 +1,18 @@ // SPDX-License-Identifier: Apache-2.0 pragma solidity >=0.8.0 <0.9.0; -import { _CONTROLLER_ROLE, _AGENT_ROLE, _ISSUER_ROLE } from "../../constants/roles.sol"; +import { _CONTROLLER_ROLE, _AGENT_ROLE } from "../../constants/roles.sol"; import { BasicTransferInfo, OperatorTransferData } from "../../interfaces/ERC1400/IERC1410.sol"; import { IERC1410Management } from "../../interfaces/ERC1400/IERC1410Management.sol"; -import { Common } from "../../common/Common.sol"; -import { IssueData } from "../../../layer_1/interfaces/ERC1400/IERC1410.sol"; +import { Internals } from "../../../layer_0/Internals.sol"; +import { + IProtectedPartitionsStorageWrapper +} from "../../interfaces/protectedPartitions/IProtectedPartitionsStorageWrapper.sol"; -abstract contract ERC1410Management is IERC1410Management, Common { +abstract contract ERC1410Management is IERC1410Management, Internals { // solhint-disable-next-line func-name-mixedcase - function initialize_ERC1410( - bool _multiPartition - ) external override onlyUninitialized(_erc1410BasicStorage().initialized) { - _erc1410BasicStorage().multiPartition = _multiPartition; - _erc1410BasicStorage().initialized = true; + function initialize_ERC1410(bool _multiPartition) external override onlyUninitialized(_isERC1410Initialized()) { + _initialize_ERC1410(_multiPartition); } function controllerTransferByPartition( @@ -23,14 +22,22 @@ abstract contract ERC1410Management is IERC1410Management, Common { uint256 _value, bytes calldata _data, bytes calldata _operatorData - ) external override onlyUnpaused onlyDefaultPartitionWithSinglePartition(_partition) onlyControllable { + ) + external + override + onlyUnpaused + onlyDefaultPartitionWithSinglePartition(_partition) + onlyControllable + returns (bytes32) + { { bytes32[] memory roles = new bytes32[](2); roles[0] = _CONTROLLER_ROLE; roles[1] = _AGENT_ROLE; _checkAnyRole(roles, _msgSender()); } - _transferByPartition(_from, BasicTransferInfo(_to, _value), _partition, _data, _msgSender(), _operatorData); + return + _transferByPartition(_from, BasicTransferInfo(_to, _value), _partition, _data, _msgSender(), _operatorData); } function controllerRedeemByPartition( @@ -95,26 +102,23 @@ abstract contract ERC1410Management is IERC1410Management, Common { address _from, address _to, uint256 _amount, - uint256 _deadline, - uint256 _nounce, - bytes calldata _signature + IProtectedPartitionsStorageWrapper.ProtectionData calldata _protectionData ) external override onlyRole(_protectedPartitionsRole(_partition)) onlyProtectedPartitions onlyCanTransferFromByPartition(_from, _to, _partition, _amount, "", "") + returns (bytes32) { - _protectedTransferFromByPartition(_partition, _from, _to, _amount, _deadline, _nounce, _signature); + return _protectedTransferFromByPartition(_partition, _from, _to, _amount, _protectionData); } function protectedRedeemFromByPartition( bytes32 _partition, address _from, uint256 _amount, - uint256 _deadline, - uint256 _nounce, - bytes calldata _signature + IProtectedPartitionsStorageWrapper.ProtectionData calldata _protectionData ) external override @@ -122,6 +126,6 @@ abstract contract ERC1410Management is IERC1410Management, Common { onlyProtectedPartitions onlyCanRedeemFromByPartition(_from, _partition, _amount, "", "") { - _protectedRedeemFromByPartition(_partition, _from, _amount, _deadline, _nounce, _signature); + _protectedRedeemFromByPartition(_partition, _from, _amount, _protectionData); } } diff --git a/packages/ats/contracts/contracts/layer_1/ERC1400/ERC1410/ERC1410ManagementFacet.sol b/packages/ats/contracts/contracts/layer_1/ERC1400/ERC1410/ERC1410ManagementFacetBase.sol similarity index 74% rename from packages/ats/contracts/contracts/layer_1/ERC1400/ERC1410/ERC1410ManagementFacet.sol rename to packages/ats/contracts/contracts/layer_1/ERC1400/ERC1410/ERC1410ManagementFacetBase.sol index f84594341..94cc6e105 100644 --- a/packages/ats/contracts/contracts/layer_1/ERC1400/ERC1410/ERC1410ManagementFacet.sol +++ b/packages/ats/contracts/contracts/layer_1/ERC1400/ERC1410/ERC1410ManagementFacetBase.sol @@ -1,14 +1,13 @@ // SPDX-License-Identifier: Apache-2.0 pragma solidity >=0.8.0 <0.9.0; -import { _ERC1410_MANAGEMENT_RESOLVER_KEY } from "../../../layer_1/constants/resolverKeys.sol"; import { IStaticFunctionSelectors } from "../../../interfaces/resolver/resolverProxy/IStaticFunctionSelectors.sol"; import { IERC1410Management } from "../../interfaces/ERC1400/IERC1410Management.sol"; import { ERC1410Management } from "./ERC1410Management.sol"; /** - * @title ERC1410ManagementFacet - * @notice Facet implementing privileged ERC1410 operations including controller transfers, operator actions, + * @title ERC1410ManagementFacetBase + * @notice Base facet implementing privileged ERC1410 operations including controller transfers, operator actions, * and partition management * @dev This facet provides administrative functions for ERC1410 token management that require elevated permissions. * Only users with appropriate roles (controller, operator, or other privileged roles) can execute these functions. @@ -22,12 +21,8 @@ import { ERC1410Management } from "./ERC1410Management.sol"; * - Partition-based token issuance * */ -contract ERC1410ManagementFacet is IStaticFunctionSelectors, ERC1410Management { - function getStaticResolverKey() external pure returns (bytes32 staticResolverKey_) { - staticResolverKey_ = _ERC1410_MANAGEMENT_RESOLVER_KEY; - } - - function getStaticFunctionSelectors() external pure returns (bytes4[] memory staticFunctionSelectors_) { +abstract contract ERC1410ManagementFacetBase is IStaticFunctionSelectors, ERC1410Management { + function getStaticFunctionSelectors() external pure override returns (bytes4[] memory staticFunctionSelectors_) { staticFunctionSelectors_ = new bytes4[](7); uint256 selectorIndex = 0; // Initialization function @@ -43,7 +38,7 @@ contract ERC1410ManagementFacet is IStaticFunctionSelectors, ERC1410Management { staticFunctionSelectors_[selectorIndex++] = this.protectedRedeemFromByPartition.selector; } - function getStaticInterfaceIds() external pure returns (bytes4[] memory staticInterfaceIds_) { + function getStaticInterfaceIds() external pure override returns (bytes4[] memory staticInterfaceIds_) { staticInterfaceIds_ = new bytes4[](1); staticInterfaceIds_[0] = type(IERC1410Management).interfaceId; } diff --git a/packages/ats/contracts/contracts/layer_1/ERC1400/ERC1410/ERC1410Read.sol b/packages/ats/contracts/contracts/layer_1/ERC1400/ERC1410/ERC1410Read.sol index 1c4400744..fe0b948d5 100644 --- a/packages/ats/contracts/contracts/layer_1/ERC1400/ERC1410/ERC1410Read.sol +++ b/packages/ats/contracts/contracts/layer_1/ERC1400/ERC1410/ERC1410Read.sol @@ -2,14 +2,14 @@ pragma solidity >=0.8.0 <0.9.0; import { IERC1410Read } from "../../interfaces/ERC1400/IERC1410Read.sol"; -import { Common } from "../../common/Common.sol"; +import { Internals } from "../../../layer_0/Internals.sol"; /** * @title ERC1410Read * @dev Facet containing all read-only operations for ERC1410 functionality * @notice This facet handles balance queries, partition queries, operator queries, and validation queries */ -abstract contract ERC1410Read is IERC1410Read, Common { +abstract contract ERC1410Read is IERC1410Read, Internals { function balanceOf(address _tokenHolder) external view returns (uint256) { return _balanceOfAdjusted(_tokenHolder); } diff --git a/packages/ats/contracts/contracts/layer_1/ERC1400/ERC1410/ERC1410ReadFacet.sol b/packages/ats/contracts/contracts/layer_1/ERC1400/ERC1410/ERC1410ReadFacetBase.sol similarity index 71% rename from packages/ats/contracts/contracts/layer_1/ERC1400/ERC1410/ERC1410ReadFacet.sol rename to packages/ats/contracts/contracts/layer_1/ERC1400/ERC1410/ERC1410ReadFacetBase.sol index 7264e9bbe..fb205bfb6 100644 --- a/packages/ats/contracts/contracts/layer_1/ERC1400/ERC1410/ERC1410ReadFacet.sol +++ b/packages/ats/contracts/contracts/layer_1/ERC1400/ERC1410/ERC1410ReadFacetBase.sol @@ -1,21 +1,17 @@ // SPDX-License-Identifier: MIT pragma solidity >=0.8.0 <0.9.0; -import { _ERC1410_READ_RESOLVER_KEY } from "../../../layer_1/constants/resolverKeys.sol"; import { IStaticFunctionSelectors } from "../../../interfaces/resolver/resolverProxy/IStaticFunctionSelectors.sol"; import { IERC1410Read } from "../../interfaces/ERC1400/IERC1410Read.sol"; import { ERC1410Read } from "./ERC1410Read.sol"; -contract ERC1410ReadFacet is IStaticFunctionSelectors, ERC1410Read { - function getStaticResolverKey() external pure returns (bytes32 staticResolverKey_) { - staticResolverKey_ = _ERC1410_READ_RESOLVER_KEY; - } - - function getStaticFunctionSelectors() external pure returns (bytes4[] memory staticFunctionSelectors_) { - staticFunctionSelectors_ = new bytes4[](10); +abstract contract ERC1410ReadFacetBase is IStaticFunctionSelectors, ERC1410Read { + function getStaticFunctionSelectors() external pure override returns (bytes4[] memory staticFunctionSelectors_) { + staticFunctionSelectors_ = new bytes4[](11); uint256 selectorIndex = 0; // Balance and supply functions staticFunctionSelectors_[selectorIndex++] = this.balanceOf.selector; + staticFunctionSelectors_[selectorIndex++] = this.balanceOfAt.selector; staticFunctionSelectors_[selectorIndex++] = this.balanceOfByPartition.selector; staticFunctionSelectors_[selectorIndex++] = this.totalSupply.selector; staticFunctionSelectors_[selectorIndex++] = this.totalSupplyByPartition.selector; @@ -30,7 +26,7 @@ contract ERC1410ReadFacet is IStaticFunctionSelectors, ERC1410Read { staticFunctionSelectors_[selectorIndex++] = this.canRedeemByPartition.selector; } - function getStaticInterfaceIds() external pure returns (bytes4[] memory staticInterfaceIds_) { + function getStaticInterfaceIds() external pure override returns (bytes4[] memory staticInterfaceIds_) { staticInterfaceIds_ = new bytes4[](1); staticInterfaceIds_[0] = type(IERC1410Read).interfaceId; } diff --git a/packages/ats/contracts/contracts/layer_1/ERC1400/ERC1410/ERC1410TokenHolder.sol b/packages/ats/contracts/contracts/layer_1/ERC1400/ERC1410/ERC1410TokenHolder.sol index 905b8102c..bd7644b7e 100644 --- a/packages/ats/contracts/contracts/layer_1/ERC1400/ERC1410/ERC1410TokenHolder.sol +++ b/packages/ats/contracts/contracts/layer_1/ERC1400/ERC1410/ERC1410TokenHolder.sol @@ -3,7 +3,7 @@ pragma solidity >=0.8.0 <0.9.0; import { BasicTransferInfo } from "../../interfaces/ERC1400/IERC1410.sol"; import { IERC1410TokenHolder } from "../../interfaces/ERC1400/IERC1410TokenHolder.sol"; -import { Common } from "../../common/Common.sol"; +import { Internals } from "../../../layer_0/Internals.sol"; /** * @title ERC1410TokenHolder @@ -11,7 +11,7 @@ import { Common } from "../../common/Common.sol"; * @dev Facet containing all transfer-related operations for ERC1410 functionality * @dev These methods can by called by any users (token holders). */ -abstract contract ERC1410TokenHolder is IERC1410TokenHolder, Common { +abstract contract ERC1410TokenHolder is IERC1410TokenHolder, Internals { function transferByPartition( bytes32 _partition, BasicTransferInfo calldata _basicTransferInfo, @@ -31,14 +31,6 @@ abstract contract ERC1410TokenHolder is IERC1410TokenHolder, Common { ) returns (bytes32) { - // Add a function to verify the `_data` parameter - // TODO: Need to create the bytes division of the `_partition` so it can be easily findout in which receiver's - // partition token will transfered. For current implementation we are assuming that the receiver's partition - // will be same as sender's as well as it also pass the `_validPartition()` check. In this particular case we - // are also assuming that reciever has the some tokens of the same partition as well (To avoid the array index - // out of bound error). - // Note- There is no operator used for the execution of this call so `_operator` value in - // in event is address(0) same for the `_operatorData` return _transferByPartition(msg.sender, _basicTransferInfo, _partition, _data, address(0), ""); } @@ -53,7 +45,6 @@ abstract contract ERC1410TokenHolder is IERC1410TokenHolder, Common { onlyUnProtectedPartitionsOrWildCardRole onlyCanRedeemFromByPartition(_msgSender(), _partition, _value, _data, "") { - // Add the function to validate the `_data` parameter _redeemByPartition(_partition, _msgSender(), address(0), _value, _data, ""); } diff --git a/packages/ats/contracts/contracts/layer_1/ERC1400/ERC1410/ERC1410TokenHolderFacet.sol b/packages/ats/contracts/contracts/layer_1/ERC1400/ERC1410/ERC1410TokenHolderFacetBase.sol similarity index 68% rename from packages/ats/contracts/contracts/layer_1/ERC1400/ERC1410/ERC1410TokenHolderFacet.sol rename to packages/ats/contracts/contracts/layer_1/ERC1400/ERC1410/ERC1410TokenHolderFacetBase.sol index ccfc232bc..0fe63bee3 100644 --- a/packages/ats/contracts/contracts/layer_1/ERC1400/ERC1410/ERC1410TokenHolderFacet.sol +++ b/packages/ats/contracts/contracts/layer_1/ERC1400/ERC1410/ERC1410TokenHolderFacetBase.sol @@ -1,17 +1,12 @@ // SPDX-License-Identifier: Apache-2.0 pragma solidity >=0.8.0 <0.9.0; -import { _ERC1410_TOKEN_HOLDER_RESOLVER_KEY } from "../../../layer_1/constants/resolverKeys.sol"; import { IStaticFunctionSelectors } from "../../../interfaces/resolver/resolverProxy/IStaticFunctionSelectors.sol"; import { IERC1410TokenHolder } from "../../interfaces/ERC1400/IERC1410TokenHolder.sol"; import { ERC1410TokenHolder } from "./ERC1410TokenHolder.sol"; -contract ERC1410TokenHolderFacet is IStaticFunctionSelectors, ERC1410TokenHolder { - function getStaticResolverKey() external pure returns (bytes32 staticResolverKey_) { - staticResolverKey_ = _ERC1410_TOKEN_HOLDER_RESOLVER_KEY; - } - - function getStaticFunctionSelectors() external pure returns (bytes4[] memory staticFunctionSelectors_) { +abstract contract ERC1410TokenHolderFacetBase is IStaticFunctionSelectors, ERC1410TokenHolder { + function getStaticFunctionSelectors() external pure override returns (bytes4[] memory staticFunctionSelectors_) { staticFunctionSelectors_ = new bytes4[](7); uint256 selectorIndex = 0; staticFunctionSelectors_[selectorIndex++] = this.transferByPartition.selector; @@ -24,7 +19,7 @@ contract ERC1410TokenHolderFacet is IStaticFunctionSelectors, ERC1410TokenHolder staticFunctionSelectors_[selectorIndex++] = this.triggerAndSyncAll.selector; } - function getStaticInterfaceIds() external pure returns (bytes4[] memory staticInterfaceIds_) { + function getStaticInterfaceIds() external pure override returns (bytes4[] memory staticInterfaceIds_) { staticInterfaceIds_ = new bytes4[](1); staticInterfaceIds_[0] = type(IERC1410TokenHolder).interfaceId; } diff --git a/packages/ats/contracts/contracts/layer_1/ERC1400/ERC1410/fixedRate/ERC1410IssuerFixedRateFacet.sol b/packages/ats/contracts/contracts/layer_1/ERC1400/ERC1410/fixedRate/ERC1410IssuerFixedRateFacet.sol new file mode 100644 index 000000000..d7f2f8b1b --- /dev/null +++ b/packages/ats/contracts/contracts/layer_1/ERC1400/ERC1410/fixedRate/ERC1410IssuerFixedRateFacet.sol @@ -0,0 +1,12 @@ +// SPDX-License-Identifier: Apache-2.0 +pragma solidity >=0.8.0 <0.9.0; + +import { ERC1410IssuerFacetBase } from "../ERC1410IssuerFacetBase.sol"; +import { _ERC1410_ISSUER_FIXED_RATE_RESOLVER_KEY } from "contracts/layer_1/constants/resolverKeys.sol"; +import { CommonFixedInterestRate } from "contracts/layer_0_extensions/bond/fixedInterestRate/Common.sol"; + +contract ERC1410IssuerFixedRateFacet is ERC1410IssuerFacetBase, CommonFixedInterestRate { + function getStaticResolverKey() external pure override returns (bytes32 staticResolverKey_) { + staticResolverKey_ = _ERC1410_ISSUER_FIXED_RATE_RESOLVER_KEY; + } +} diff --git a/packages/ats/contracts/contracts/layer_1/ERC1400/ERC1410/fixedRate/ERC1410ManagementFixedRateFacet.sol b/packages/ats/contracts/contracts/layer_1/ERC1400/ERC1410/fixedRate/ERC1410ManagementFixedRateFacet.sol new file mode 100644 index 000000000..4bc9b5f48 --- /dev/null +++ b/packages/ats/contracts/contracts/layer_1/ERC1400/ERC1410/fixedRate/ERC1410ManagementFixedRateFacet.sol @@ -0,0 +1,12 @@ +// SPDX-License-Identifier: Apache-2.0 +pragma solidity >=0.8.0 <0.9.0; + +import { ERC1410ManagementFacetBase } from "../ERC1410ManagementFacetBase.sol"; +import { _ERC1410_MANAGEMENT_FIXED_RATE_RESOLVER_KEY } from "contracts/layer_1/constants/resolverKeys.sol"; +import { CommonFixedInterestRate } from "contracts/layer_0_extensions/bond/fixedInterestRate/Common.sol"; + +contract ERC1410ManagementFixedRateFacet is ERC1410ManagementFacetBase, CommonFixedInterestRate { + function getStaticResolverKey() external pure override returns (bytes32 staticResolverKey_) { + staticResolverKey_ = _ERC1410_MANAGEMENT_FIXED_RATE_RESOLVER_KEY; + } +} diff --git a/packages/ats/contracts/contracts/layer_1/ERC1400/ERC1410/fixedRate/ERC1410ReadFixedRateFacet.sol b/packages/ats/contracts/contracts/layer_1/ERC1400/ERC1410/fixedRate/ERC1410ReadFixedRateFacet.sol new file mode 100644 index 000000000..53be800bf --- /dev/null +++ b/packages/ats/contracts/contracts/layer_1/ERC1400/ERC1410/fixedRate/ERC1410ReadFixedRateFacet.sol @@ -0,0 +1,12 @@ +// SPDX-License-Identifier: MIT +pragma solidity >=0.8.0 <0.9.0; + +import { ERC1410ReadFacetBase } from "../ERC1410ReadFacetBase.sol"; +import { _ERC1410_READ_FIXED_RATE_RESOLVER_KEY } from "contracts/layer_1/constants/resolverKeys.sol"; +import { CommonFixedInterestRate } from "contracts/layer_0_extensions/bond/fixedInterestRate/Common.sol"; + +contract ERC1410ReadFixedRateFacet is ERC1410ReadFacetBase, CommonFixedInterestRate { + function getStaticResolverKey() external pure override returns (bytes32 staticResolverKey_) { + staticResolverKey_ = _ERC1410_READ_FIXED_RATE_RESOLVER_KEY; + } +} diff --git a/packages/ats/contracts/contracts/layer_1/ERC1400/ERC1410/fixedRate/ERC1410TokenHolderFixedRateFacet.sol b/packages/ats/contracts/contracts/layer_1/ERC1400/ERC1410/fixedRate/ERC1410TokenHolderFixedRateFacet.sol new file mode 100644 index 000000000..f4ea1691f --- /dev/null +++ b/packages/ats/contracts/contracts/layer_1/ERC1400/ERC1410/fixedRate/ERC1410TokenHolderFixedRateFacet.sol @@ -0,0 +1,12 @@ +// SPDX-License-Identifier: Apache-2.0 +pragma solidity >=0.8.0 <0.9.0; + +import { ERC1410TokenHolderFacetBase } from "../ERC1410TokenHolderFacetBase.sol"; +import { _ERC1410_TOKEN_HOLDER_FIXED_RATE_RESOLVER_KEY } from "contracts/layer_1/constants/resolverKeys.sol"; +import { CommonFixedInterestRate } from "contracts/layer_0_extensions/bond/fixedInterestRate/Common.sol"; + +contract ERC1410TokenHolderFixedRateFacet is ERC1410TokenHolderFacetBase, CommonFixedInterestRate { + function getStaticResolverKey() external pure override returns (bytes32 staticResolverKey_) { + staticResolverKey_ = _ERC1410_TOKEN_HOLDER_FIXED_RATE_RESOLVER_KEY; + } +} diff --git a/packages/ats/contracts/contracts/layer_1/ERC1400/ERC1410/kpiLinkedRate/ERC1410IssuerKpiLinkedRateFacet.sol b/packages/ats/contracts/contracts/layer_1/ERC1400/ERC1410/kpiLinkedRate/ERC1410IssuerKpiLinkedRateFacet.sol new file mode 100644 index 000000000..d0dc60872 --- /dev/null +++ b/packages/ats/contracts/contracts/layer_1/ERC1400/ERC1410/kpiLinkedRate/ERC1410IssuerKpiLinkedRateFacet.sol @@ -0,0 +1,14 @@ +// SPDX-License-Identifier: Apache-2.0 +pragma solidity >=0.8.0 <0.9.0; + +import { ERC1410IssuerFacetBase } from "../ERC1410IssuerFacetBase.sol"; +import { _ERC1410_ISSUER_KPI_LINKED_RATE_RESOLVER_KEY } from "contracts/layer_1/constants/resolverKeys.sol"; +import { + CommonKpiLinkedInterestRate +} from "contracts/layer_0_extensions/bond/fixingDateInterestRate/kpiInterestRate/kpiLinkedInterestRate/Common.sol"; + +contract ERC1410IssuerKpiLinkedRateFacet is ERC1410IssuerFacetBase, CommonKpiLinkedInterestRate { + function getStaticResolverKey() external pure override returns (bytes32 staticResolverKey_) { + staticResolverKey_ = _ERC1410_ISSUER_KPI_LINKED_RATE_RESOLVER_KEY; + } +} diff --git a/packages/ats/contracts/contracts/layer_1/ERC1400/ERC1410/kpiLinkedRate/ERC1410ManagementKpiLinkedRateFacet.sol b/packages/ats/contracts/contracts/layer_1/ERC1400/ERC1410/kpiLinkedRate/ERC1410ManagementKpiLinkedRateFacet.sol new file mode 100644 index 000000000..af9fe10ff --- /dev/null +++ b/packages/ats/contracts/contracts/layer_1/ERC1400/ERC1410/kpiLinkedRate/ERC1410ManagementKpiLinkedRateFacet.sol @@ -0,0 +1,14 @@ +// SPDX-License-Identifier: Apache-2.0 +pragma solidity >=0.8.0 <0.9.0; + +import { ERC1410ManagementFacetBase } from "../ERC1410ManagementFacetBase.sol"; +import { _ERC1410_MANAGEMENT_KPI_LINKED_RATE_RESOLVER_KEY } from "contracts/layer_1/constants/resolverKeys.sol"; +import { + CommonKpiLinkedInterestRate +} from "contracts/layer_0_extensions/bond/fixingDateInterestRate/kpiInterestRate/kpiLinkedInterestRate/Common.sol"; + +contract ERC1410ManagementKpiLinkedRateFacet is ERC1410ManagementFacetBase, CommonKpiLinkedInterestRate { + function getStaticResolverKey() external pure override returns (bytes32 staticResolverKey_) { + staticResolverKey_ = _ERC1410_MANAGEMENT_KPI_LINKED_RATE_RESOLVER_KEY; + } +} diff --git a/packages/ats/contracts/contracts/layer_1/ERC1400/ERC1410/kpiLinkedRate/ERC1410ReadKpiLinkedRateFacet.sol b/packages/ats/contracts/contracts/layer_1/ERC1400/ERC1410/kpiLinkedRate/ERC1410ReadKpiLinkedRateFacet.sol new file mode 100644 index 000000000..4f4edb1f7 --- /dev/null +++ b/packages/ats/contracts/contracts/layer_1/ERC1400/ERC1410/kpiLinkedRate/ERC1410ReadKpiLinkedRateFacet.sol @@ -0,0 +1,14 @@ +// SPDX-License-Identifier: MIT +pragma solidity >=0.8.0 <0.9.0; + +import { ERC1410ReadFacetBase } from "../ERC1410ReadFacetBase.sol"; +import { _ERC1410_READ_KPI_LINKED_RATE_RESOLVER_KEY } from "contracts/layer_1/constants/resolverKeys.sol"; +import { + CommonKpiLinkedInterestRate +} from "contracts/layer_0_extensions/bond/fixingDateInterestRate/kpiInterestRate/kpiLinkedInterestRate/Common.sol"; + +contract ERC1410ReadKpiLinkedRateFacet is ERC1410ReadFacetBase, CommonKpiLinkedInterestRate { + function getStaticResolverKey() external pure override returns (bytes32 staticResolverKey_) { + staticResolverKey_ = _ERC1410_READ_KPI_LINKED_RATE_RESOLVER_KEY; + } +} diff --git a/packages/ats/contracts/contracts/layer_1/ERC1400/ERC1410/kpiLinkedRate/ERC1410TokenHolderKpiLinkedRateFacet.sol b/packages/ats/contracts/contracts/layer_1/ERC1400/ERC1410/kpiLinkedRate/ERC1410TokenHolderKpiLinkedRateFacet.sol new file mode 100644 index 000000000..1be329d5f --- /dev/null +++ b/packages/ats/contracts/contracts/layer_1/ERC1400/ERC1410/kpiLinkedRate/ERC1410TokenHolderKpiLinkedRateFacet.sol @@ -0,0 +1,14 @@ +// SPDX-License-Identifier: Apache-2.0 +pragma solidity >=0.8.0 <0.9.0; + +import { ERC1410TokenHolderFacetBase } from "../ERC1410TokenHolderFacetBase.sol"; +import { _ERC1410_TOKEN_HOLDER_KPI_LINKED_RATE_RESOLVER_KEY } from "contracts/layer_1/constants/resolverKeys.sol"; +import { + CommonKpiLinkedInterestRate +} from "contracts/layer_0_extensions/bond/fixingDateInterestRate/kpiInterestRate/kpiLinkedInterestRate/Common.sol"; + +contract ERC1410TokenHolderKpiLinkedRateFacet is ERC1410TokenHolderFacetBase, CommonKpiLinkedInterestRate { + function getStaticResolverKey() external pure override returns (bytes32 staticResolverKey_) { + staticResolverKey_ = _ERC1410_TOKEN_HOLDER_KPI_LINKED_RATE_RESOLVER_KEY; + } +} diff --git a/packages/ats/contracts/contracts/layer_1/ERC1400/ERC1410/standard/ERC1410IssuerFacet.sol b/packages/ats/contracts/contracts/layer_1/ERC1400/ERC1410/standard/ERC1410IssuerFacet.sol new file mode 100644 index 000000000..ebff446b0 --- /dev/null +++ b/packages/ats/contracts/contracts/layer_1/ERC1400/ERC1410/standard/ERC1410IssuerFacet.sol @@ -0,0 +1,12 @@ +// SPDX-License-Identifier: Apache-2.0 +pragma solidity >=0.8.0 <0.9.0; + +import { ERC1410IssuerFacetBase } from "../ERC1410IssuerFacetBase.sol"; +import { _ERC1410_ISSUER_RESOLVER_KEY } from "contracts/layer_1/constants/resolverKeys.sol"; +import { Common } from "contracts/layer_0/common/Common.sol"; + +contract ERC1410IssuerFacet is ERC1410IssuerFacetBase, Common { + function getStaticResolverKey() external pure override returns (bytes32 staticResolverKey_) { + staticResolverKey_ = _ERC1410_ISSUER_RESOLVER_KEY; + } +} diff --git a/packages/ats/contracts/contracts/layer_1/ERC1400/ERC1410/standard/ERC1410ManagementFacet.sol b/packages/ats/contracts/contracts/layer_1/ERC1400/ERC1410/standard/ERC1410ManagementFacet.sol new file mode 100644 index 000000000..e36629b73 --- /dev/null +++ b/packages/ats/contracts/contracts/layer_1/ERC1400/ERC1410/standard/ERC1410ManagementFacet.sol @@ -0,0 +1,12 @@ +// SPDX-License-Identifier: Apache-2.0 +pragma solidity >=0.8.0 <0.9.0; + +import { ERC1410ManagementFacetBase } from "../ERC1410ManagementFacetBase.sol"; +import { _ERC1410_MANAGEMENT_RESOLVER_KEY } from "contracts/layer_1/constants/resolverKeys.sol"; +import { Common } from "contracts/layer_0/common/Common.sol"; + +contract ERC1410ManagementFacet is ERC1410ManagementFacetBase, Common { + function getStaticResolverKey() external pure override returns (bytes32 staticResolverKey_) { + staticResolverKey_ = _ERC1410_MANAGEMENT_RESOLVER_KEY; + } +} diff --git a/packages/ats/contracts/contracts/layer_1/ERC1400/ERC1410/standard/ERC1410ReadFacet.sol b/packages/ats/contracts/contracts/layer_1/ERC1400/ERC1410/standard/ERC1410ReadFacet.sol new file mode 100644 index 000000000..ec6e7c75c --- /dev/null +++ b/packages/ats/contracts/contracts/layer_1/ERC1400/ERC1410/standard/ERC1410ReadFacet.sol @@ -0,0 +1,12 @@ +// SPDX-License-Identifier: MIT +pragma solidity >=0.8.0 <0.9.0; + +import { ERC1410ReadFacetBase } from "../ERC1410ReadFacetBase.sol"; +import { _ERC1410_READ_RESOLVER_KEY } from "contracts/layer_1/constants/resolverKeys.sol"; +import { Common } from "contracts/layer_0/common/Common.sol"; + +contract ERC1410ReadFacet is ERC1410ReadFacetBase, Common { + function getStaticResolverKey() external pure override returns (bytes32 staticResolverKey_) { + staticResolverKey_ = _ERC1410_READ_RESOLVER_KEY; + } +} diff --git a/packages/ats/contracts/contracts/layer_1/ERC1400/ERC1410/standard/ERC1410TokenHolderFacet.sol b/packages/ats/contracts/contracts/layer_1/ERC1400/ERC1410/standard/ERC1410TokenHolderFacet.sol new file mode 100644 index 000000000..b9362b974 --- /dev/null +++ b/packages/ats/contracts/contracts/layer_1/ERC1400/ERC1410/standard/ERC1410TokenHolderFacet.sol @@ -0,0 +1,12 @@ +// SPDX-License-Identifier: Apache-2.0 +pragma solidity >=0.8.0 <0.9.0; + +import { ERC1410TokenHolderFacetBase } from "../ERC1410TokenHolderFacetBase.sol"; +import { _ERC1410_TOKEN_HOLDER_RESOLVER_KEY } from "contracts/layer_1/constants/resolverKeys.sol"; +import { Common } from "contracts/layer_0/common/Common.sol"; + +contract ERC1410TokenHolderFacet is ERC1410TokenHolderFacetBase, Common { + function getStaticResolverKey() external pure override returns (bytes32 staticResolverKey_) { + staticResolverKey_ = _ERC1410_TOKEN_HOLDER_RESOLVER_KEY; + } +} diff --git a/packages/ats/contracts/contracts/layer_1/ERC1400/ERC1410/sustainabilityPerformanceTargetRate/ERC1410IssuerSustainabilityPerformanceTargetRateFacet.sol b/packages/ats/contracts/contracts/layer_1/ERC1400/ERC1410/sustainabilityPerformanceTargetRate/ERC1410IssuerSustainabilityPerformanceTargetRateFacet.sol new file mode 100644 index 000000000..411d0978e --- /dev/null +++ b/packages/ats/contracts/contracts/layer_1/ERC1400/ERC1410/sustainabilityPerformanceTargetRate/ERC1410IssuerSustainabilityPerformanceTargetRateFacet.sol @@ -0,0 +1,19 @@ +// SPDX-License-Identifier: Apache-2.0 +pragma solidity >=0.8.0 <0.9.0; + +import { ERC1410IssuerFacetBase } from "../ERC1410IssuerFacetBase.sol"; +import { + _ERC1410_ISSUER_SUSTAINABILITY_PERFORMANCE_TARGET_RATE_RESOLVER_KEY +} from "contracts/layer_1/constants/resolverKeys.sol"; +// prettier-ignore +// solhint-disable-next-line max-line-length +import { CommonSustainabilityPerformanceTargetInterestRate } from "contracts/layer_0_extensions/bond/fixingDateInterestRate/kpiInterestRate/sustainabilityPerformanceTargetInterestRate/Common.sol"; + +contract ERC1410IssuerSustainabilityPerformanceTargetRateFacet is + ERC1410IssuerFacetBase, + CommonSustainabilityPerformanceTargetInterestRate +{ + function getStaticResolverKey() external pure override returns (bytes32 staticResolverKey_) { + staticResolverKey_ = _ERC1410_ISSUER_SUSTAINABILITY_PERFORMANCE_TARGET_RATE_RESOLVER_KEY; + } +} diff --git a/packages/ats/contracts/contracts/layer_1/ERC1400/ERC1410/sustainabilityPerformanceTargetRate/ERC1410ManagementSustainabilityPerformanceTargetRateFacet.sol b/packages/ats/contracts/contracts/layer_1/ERC1400/ERC1410/sustainabilityPerformanceTargetRate/ERC1410ManagementSustainabilityPerformanceTargetRateFacet.sol new file mode 100644 index 000000000..b93fe9f5b --- /dev/null +++ b/packages/ats/contracts/contracts/layer_1/ERC1400/ERC1410/sustainabilityPerformanceTargetRate/ERC1410ManagementSustainabilityPerformanceTargetRateFacet.sol @@ -0,0 +1,19 @@ +// SPDX-License-Identifier: Apache-2.0 +pragma solidity >=0.8.0 <0.9.0; + +import { ERC1410ManagementFacetBase } from "../ERC1410ManagementFacetBase.sol"; +import { + _ERC1410_MANAGEMENT_SUSTAINABILITY_PERFORMANCE_TARGET_RATE_RESOLVER_KEY +} from "contracts/layer_1/constants/resolverKeys.sol"; +// prettier-ignore +// solhint-disable-next-line max-line-length +import { CommonSustainabilityPerformanceTargetInterestRate } from "contracts/layer_0_extensions/bond/fixingDateInterestRate/kpiInterestRate/sustainabilityPerformanceTargetInterestRate/Common.sol"; + +contract ERC1410ManagementSustainabilityPerformanceTargetRateFacet is + ERC1410ManagementFacetBase, + CommonSustainabilityPerformanceTargetInterestRate +{ + function getStaticResolverKey() external pure override returns (bytes32 staticResolverKey_) { + staticResolverKey_ = _ERC1410_MANAGEMENT_SUSTAINABILITY_PERFORMANCE_TARGET_RATE_RESOLVER_KEY; + } +} diff --git a/packages/ats/contracts/contracts/layer_1/ERC1400/ERC1410/sustainabilityPerformanceTargetRate/ERC1410ReadSustainabilityPerformanceTargetRateFacet.sol b/packages/ats/contracts/contracts/layer_1/ERC1400/ERC1410/sustainabilityPerformanceTargetRate/ERC1410ReadSustainabilityPerformanceTargetRateFacet.sol new file mode 100644 index 000000000..ba4bf4db5 --- /dev/null +++ b/packages/ats/contracts/contracts/layer_1/ERC1400/ERC1410/sustainabilityPerformanceTargetRate/ERC1410ReadSustainabilityPerformanceTargetRateFacet.sol @@ -0,0 +1,19 @@ +// SPDX-License-Identifier: MIT +pragma solidity >=0.8.0 <0.9.0; + +import { ERC1410ReadFacetBase } from "../ERC1410ReadFacetBase.sol"; +import { + _ERC1410_READ_SUSTAINABILITY_PERFORMANCE_TARGET_RATE_RESOLVER_KEY +} from "contracts/layer_1/constants/resolverKeys.sol"; +// prettier-ignore +// solhint-disable-next-line max-line-length +import { CommonSustainabilityPerformanceTargetInterestRate } from "contracts/layer_0_extensions/bond/fixingDateInterestRate/kpiInterestRate/sustainabilityPerformanceTargetInterestRate/Common.sol"; + +contract ERC1410ReadSustainabilityPerformanceTargetRateFacet is + ERC1410ReadFacetBase, + CommonSustainabilityPerformanceTargetInterestRate +{ + function getStaticResolverKey() external pure override returns (bytes32 staticResolverKey_) { + staticResolverKey_ = _ERC1410_READ_SUSTAINABILITY_PERFORMANCE_TARGET_RATE_RESOLVER_KEY; + } +} diff --git a/packages/ats/contracts/contracts/layer_1/ERC1400/ERC1410/sustainabilityPerformanceTargetRate/ERC1410TokenHolderSustainabilityPerformanceTargetRateFacet.sol b/packages/ats/contracts/contracts/layer_1/ERC1400/ERC1410/sustainabilityPerformanceTargetRate/ERC1410TokenHolderSustainabilityPerformanceTargetRateFacet.sol new file mode 100644 index 000000000..8f2c8e61d --- /dev/null +++ b/packages/ats/contracts/contracts/layer_1/ERC1400/ERC1410/sustainabilityPerformanceTargetRate/ERC1410TokenHolderSustainabilityPerformanceTargetRateFacet.sol @@ -0,0 +1,19 @@ +// SPDX-License-Identifier: Apache-2.0 +pragma solidity >=0.8.0 <0.9.0; + +import { ERC1410TokenHolderFacetBase } from "../ERC1410TokenHolderFacetBase.sol"; +import { + _ERC1410_TOKEN_HOLDER_SUSTAINABILITY_PERFORMANCE_TARGET_RATE_RESOLVER_KEY +} from "contracts/layer_1/constants/resolverKeys.sol"; +// prettier-ignore +// solhint-disable-next-line max-line-length +import { CommonSustainabilityPerformanceTargetInterestRate } from "contracts/layer_0_extensions/bond/fixingDateInterestRate/kpiInterestRate/sustainabilityPerformanceTargetInterestRate/Common.sol"; + +contract ERC1410TokenHolderSustainabilityPerformanceTargetRateFacet is + ERC1410TokenHolderFacetBase, + CommonSustainabilityPerformanceTargetInterestRate +{ + function getStaticResolverKey() external pure override returns (bytes32 staticResolverKey_) { + staticResolverKey_ = _ERC1410_TOKEN_HOLDER_SUSTAINABILITY_PERFORMANCE_TARGET_RATE_RESOLVER_KEY; + } +} diff --git a/packages/ats/contracts/contracts/layer_1/ERC1400/ERC1594/ERC1594.sol b/packages/ats/contracts/contracts/layer_1/ERC1400/ERC1594/ERC1594.sol index 819d373fa..65feba5fa 100644 --- a/packages/ats/contracts/contracts/layer_1/ERC1400/ERC1594/ERC1594.sol +++ b/packages/ats/contracts/contracts/layer_1/ERC1400/ERC1594/ERC1594.sol @@ -3,19 +3,19 @@ pragma solidity >=0.8.0 <0.9.0; import { _ISSUER_ROLE, _AGENT_ROLE } from "../../constants/roles.sol"; import { IERC1594 } from "../../interfaces/ERC1400/IERC1594.sol"; -import { Common } from "../../common/Common.sol"; +import { Internals } from "../../../layer_0/Internals.sol"; import { _DEFAULT_PARTITION } from "../../../layer_0/constants/values.sol"; -abstract contract ERC1594 is IERC1594, Common { +abstract contract ERC1594 is IERC1594, Internals { // solhint-disable-next-line func-name-mixedcase - function initialize_ERC1594() external override onlyUninitialized(_erc1594Storage().initialized) { - super._initialize_ERC1594(); + function initialize_ERC1594() external override onlyUninitialized(_isERC1594Initialized()) { + _initialize_ERC1594(); } function transferWithData( address _to, uint256 _value, - bytes calldata /*_data*/ + bytes calldata _data // ignored in the current implementation ) external override @@ -25,13 +25,14 @@ abstract contract ERC1594 is IERC1594, Common { { // Add a function to validate the `_data` parameter _transfer(_msgSender(), _to, _value); + emit TransferWithData(_msgSender(), _to, _value, _data); } function transferFromWithData( address _from, address _to, uint256 _value, - bytes calldata /*_data*/ + bytes calldata _data // ignored in the current implementation ) external override @@ -46,6 +47,7 @@ abstract contract ERC1594 is IERC1594, Common { } // Add a function to validate the `_data` parameter _transferFrom(_msgSender(), _from, _to, _value); + emit TransferFromWithData(_msgSender(), _from, _to, _value, _data); } function issue( @@ -59,7 +61,6 @@ abstract contract ERC1594 is IERC1594, Common { onlyWithinMaxSupply(_value) onlyIdentified(address(0), _tokenHolder) onlyCompliant(address(0), _tokenHolder, false) - onlyIssuable onlyUnpaused { { diff --git a/packages/ats/contracts/contracts/layer_1/ERC1400/ERC1594/ERC1594Facet.sol b/packages/ats/contracts/contracts/layer_1/ERC1400/ERC1594/ERC1594FacetBase.sol similarity index 83% rename from packages/ats/contracts/contracts/layer_1/ERC1400/ERC1594/ERC1594Facet.sol rename to packages/ats/contracts/contracts/layer_1/ERC1400/ERC1594/ERC1594FacetBase.sol index ffc45c540..9a9bb7ab1 100644 --- a/packages/ats/contracts/contracts/layer_1/ERC1400/ERC1594/ERC1594Facet.sol +++ b/packages/ats/contracts/contracts/layer_1/ERC1400/ERC1594/ERC1594FacetBase.sol @@ -2,15 +2,10 @@ pragma solidity >=0.8.0 <0.9.0; import { IStaticFunctionSelectors } from "../../../interfaces/resolver/resolverProxy/IStaticFunctionSelectors.sol"; -import { _ERC1594_RESOLVER_KEY } from "../../constants/resolverKeys.sol"; import { IERC1594 } from "../../interfaces/ERC1400/IERC1594.sol"; import { ERC1594 } from "./ERC1594.sol"; -contract ERC1594Facet is ERC1594, IStaticFunctionSelectors { - function getStaticResolverKey() external pure override returns (bytes32 staticResolverKey_) { - staticResolverKey_ = _ERC1594_RESOLVER_KEY; - } - +abstract contract ERC1594FacetBase is ERC1594, IStaticFunctionSelectors { function getStaticFunctionSelectors() external pure override returns (bytes4[] memory staticFunctionSelectors_) { staticFunctionSelectors_ = new bytes4[](9); uint256 selectorsIndex; diff --git a/packages/ats/contracts/contracts/layer_1/ERC1400/ERC1594/fixedRate/ERC1594FixedRateFacet.sol b/packages/ats/contracts/contracts/layer_1/ERC1400/ERC1594/fixedRate/ERC1594FixedRateFacet.sol new file mode 100644 index 000000000..c06aa9c57 --- /dev/null +++ b/packages/ats/contracts/contracts/layer_1/ERC1400/ERC1594/fixedRate/ERC1594FixedRateFacet.sol @@ -0,0 +1,12 @@ +// SPDX-License-Identifier: Apache-2.0 +pragma solidity >=0.8.0 <0.9.0; + +import { ERC1594FacetBase } from "../ERC1594FacetBase.sol"; +import { _ERC1594_FIXED_RATE_RESOLVER_KEY } from "contracts/layer_1/constants/resolverKeys.sol"; +import { CommonFixedInterestRate } from "contracts/layer_0_extensions/bond/fixedInterestRate/Common.sol"; + +contract ERC1594FixedRateFacet is ERC1594FacetBase, CommonFixedInterestRate { + function getStaticResolverKey() external pure override returns (bytes32 staticResolverKey_) { + staticResolverKey_ = _ERC1594_FIXED_RATE_RESOLVER_KEY; + } +} diff --git a/packages/ats/contracts/contracts/layer_1/ERC1400/ERC1594/kpiLinkedRate/ERC1594KpiLinkedRateFacet.sol b/packages/ats/contracts/contracts/layer_1/ERC1400/ERC1594/kpiLinkedRate/ERC1594KpiLinkedRateFacet.sol new file mode 100644 index 000000000..0670d1537 --- /dev/null +++ b/packages/ats/contracts/contracts/layer_1/ERC1400/ERC1594/kpiLinkedRate/ERC1594KpiLinkedRateFacet.sol @@ -0,0 +1,14 @@ +// SPDX-License-Identifier: Apache-2.0 +pragma solidity >=0.8.0 <0.9.0; + +import { ERC1594FacetBase } from "../ERC1594FacetBase.sol"; +import { _ERC1594_KPI_LINKED_RATE_RESOLVER_KEY } from "contracts/layer_1/constants/resolverKeys.sol"; +import { + CommonKpiLinkedInterestRate +} from "contracts/layer_0_extensions/bond/fixingDateInterestRate/kpiInterestRate/kpiLinkedInterestRate/Common.sol"; + +contract ERC1594KpiLinkedRateFacet is ERC1594FacetBase, CommonKpiLinkedInterestRate { + function getStaticResolverKey() external pure override returns (bytes32 staticResolverKey_) { + staticResolverKey_ = _ERC1594_KPI_LINKED_RATE_RESOLVER_KEY; + } +} diff --git a/packages/ats/contracts/contracts/layer_1/ERC1400/ERC1594/standard/ERC1594Facet.sol b/packages/ats/contracts/contracts/layer_1/ERC1400/ERC1594/standard/ERC1594Facet.sol new file mode 100644 index 000000000..b84fa720c --- /dev/null +++ b/packages/ats/contracts/contracts/layer_1/ERC1400/ERC1594/standard/ERC1594Facet.sol @@ -0,0 +1,12 @@ +// SPDX-License-Identifier: Apache-2.0 +pragma solidity >=0.8.0 <0.9.0; + +import { ERC1594FacetBase } from "../ERC1594FacetBase.sol"; +import { _ERC1594_RESOLVER_KEY } from "contracts/layer_1/constants/resolverKeys.sol"; +import { Common } from "contracts/layer_0/common/Common.sol"; + +contract ERC1594Facet is ERC1594FacetBase, Common { + function getStaticResolverKey() external pure override returns (bytes32 staticResolverKey_) { + staticResolverKey_ = _ERC1594_RESOLVER_KEY; + } +} diff --git a/packages/ats/contracts/contracts/layer_1/ERC1400/ERC1594/sustainabilityPerformanceTargetRate/ERC1594SustainabilityPerformanceTargetRateFacet.sol b/packages/ats/contracts/contracts/layer_1/ERC1400/ERC1594/sustainabilityPerformanceTargetRate/ERC1594SustainabilityPerformanceTargetRateFacet.sol new file mode 100644 index 000000000..d1d3b7bf2 --- /dev/null +++ b/packages/ats/contracts/contracts/layer_1/ERC1400/ERC1594/sustainabilityPerformanceTargetRate/ERC1594SustainabilityPerformanceTargetRateFacet.sol @@ -0,0 +1,19 @@ +// SPDX-License-Identifier: Apache-2.0 +pragma solidity >=0.8.0 <0.9.0; + +import { ERC1594FacetBase } from "../ERC1594FacetBase.sol"; +import { + _ERC1594_SUSTAINABILITY_PERFORMANCE_TARGET_RATE_RESOLVER_KEY +} from "contracts/layer_1/constants/resolverKeys.sol"; +// prettier-ignore +// solhint-disable-next-line max-line-length +import { CommonSustainabilityPerformanceTargetInterestRate } from "contracts/layer_0_extensions/bond/fixingDateInterestRate/kpiInterestRate/sustainabilityPerformanceTargetInterestRate/Common.sol"; + +contract ERC1594SustainabilityPerformanceTargetRateFacet is + ERC1594FacetBase, + CommonSustainabilityPerformanceTargetInterestRate +{ + function getStaticResolverKey() external pure override returns (bytes32 staticResolverKey_) { + staticResolverKey_ = _ERC1594_SUSTAINABILITY_PERFORMANCE_TARGET_RATE_RESOLVER_KEY; + } +} diff --git a/packages/ats/contracts/contracts/layer_1/ERC1400/ERC1643/ERC1643.sol b/packages/ats/contracts/contracts/layer_1/ERC1400/ERC1643/ERC1643.sol index 9512ce951..9e147ffd5 100644 --- a/packages/ats/contracts/contracts/layer_1/ERC1400/ERC1643/ERC1643.sol +++ b/packages/ats/contracts/contracts/layer_1/ERC1400/ERC1643/ERC1643.sol @@ -4,9 +4,9 @@ pragma solidity >=0.8.0 <0.9.0; import { IERC1643 } from "../../interfaces/ERC1400/IERC1643.sol"; import { _DOCUMENTER_ROLE } from "../../constants/roles.sol"; import { _ERC1643_STORAGE_POSITION } from "../../constants/storagePositions.sol"; -import { Common } from "../../common/Common.sol"; +import { Internals } from "../../../layer_0/Internals.sol"; -abstract contract ERC1643 is IERC1643, Common { +abstract contract ERC1643 is IERC1643, Internals { function setDocument( bytes32 _name, string calldata _uri, diff --git a/packages/ats/contracts/contracts/layer_1/ERC1400/ERC1643/ERC1643Facet.sol b/packages/ats/contracts/contracts/layer_1/ERC1400/ERC1643/ERC1643FacetBase.sol similarity index 79% rename from packages/ats/contracts/contracts/layer_1/ERC1400/ERC1643/ERC1643Facet.sol rename to packages/ats/contracts/contracts/layer_1/ERC1400/ERC1643/ERC1643FacetBase.sol index c35c4d92f..8906480c0 100644 --- a/packages/ats/contracts/contracts/layer_1/ERC1400/ERC1643/ERC1643Facet.sol +++ b/packages/ats/contracts/contracts/layer_1/ERC1400/ERC1643/ERC1643FacetBase.sol @@ -3,14 +3,9 @@ pragma solidity >=0.8.0 <0.9.0; import { IERC1643 } from "../../interfaces/ERC1400/IERC1643.sol"; import { IStaticFunctionSelectors } from "../../../interfaces/resolver/resolverProxy/IStaticFunctionSelectors.sol"; -import { _ERC1643_RESOLVER_KEY } from "../../constants/resolverKeys.sol"; import { ERC1643 } from "./ERC1643.sol"; -contract ERC1643Facet is ERC1643, IStaticFunctionSelectors { - function getStaticResolverKey() external pure override returns (bytes32 staticResolverKey_) { - staticResolverKey_ = _ERC1643_RESOLVER_KEY; - } - +abstract contract ERC1643FacetBase is ERC1643, IStaticFunctionSelectors { function getStaticFunctionSelectors() external pure override returns (bytes4[] memory staticFunctionSelectors_) { staticFunctionSelectors_ = new bytes4[](4); uint256 selectorsIndex; diff --git a/packages/ats/contracts/contracts/layer_1/ERC1400/ERC1643/fixedRate/ERC1643FixedRateFacet.sol b/packages/ats/contracts/contracts/layer_1/ERC1400/ERC1643/fixedRate/ERC1643FixedRateFacet.sol new file mode 100644 index 000000000..464ae984e --- /dev/null +++ b/packages/ats/contracts/contracts/layer_1/ERC1400/ERC1643/fixedRate/ERC1643FixedRateFacet.sol @@ -0,0 +1,12 @@ +// SPDX-License-Identifier: Apache-2.0 +pragma solidity >=0.8.0 <0.9.0; + +import { ERC1643FacetBase } from "../ERC1643FacetBase.sol"; +import { _ERC1643_FIXED_RATE_RESOLVER_KEY } from "contracts/layer_1/constants/resolverKeys.sol"; +import { CommonFixedInterestRate } from "contracts/layer_0_extensions/bond/fixedInterestRate/Common.sol"; + +contract ERC1643FixedRateFacet is ERC1643FacetBase, CommonFixedInterestRate { + function getStaticResolverKey() external pure override returns (bytes32 staticResolverKey_) { + staticResolverKey_ = _ERC1643_FIXED_RATE_RESOLVER_KEY; + } +} diff --git a/packages/ats/contracts/contracts/layer_1/ERC1400/ERC1643/kpiLinkedRate/ERC1643KpiLinkedRateFacet.sol b/packages/ats/contracts/contracts/layer_1/ERC1400/ERC1643/kpiLinkedRate/ERC1643KpiLinkedRateFacet.sol new file mode 100644 index 000000000..1d20335f2 --- /dev/null +++ b/packages/ats/contracts/contracts/layer_1/ERC1400/ERC1643/kpiLinkedRate/ERC1643KpiLinkedRateFacet.sol @@ -0,0 +1,14 @@ +// SPDX-License-Identifier: Apache-2.0 +pragma solidity >=0.8.0 <0.9.0; + +import { ERC1643FacetBase } from "../ERC1643FacetBase.sol"; +import { _ERC1643_KPI_LINKED_RATE_RESOLVER_KEY } from "contracts/layer_1/constants/resolverKeys.sol"; +import { + CommonKpiLinkedInterestRate +} from "contracts/layer_0_extensions/bond/fixingDateInterestRate/kpiInterestRate/kpiLinkedInterestRate/Common.sol"; + +contract ERC1643KpiLinkedRateFacet is ERC1643FacetBase, CommonKpiLinkedInterestRate { + function getStaticResolverKey() external pure override returns (bytes32 staticResolverKey_) { + staticResolverKey_ = _ERC1643_KPI_LINKED_RATE_RESOLVER_KEY; + } +} diff --git a/packages/ats/contracts/contracts/layer_1/ERC1400/ERC1643/standard/ERC1643Facet.sol b/packages/ats/contracts/contracts/layer_1/ERC1400/ERC1643/standard/ERC1643Facet.sol new file mode 100644 index 000000000..a16164e53 --- /dev/null +++ b/packages/ats/contracts/contracts/layer_1/ERC1400/ERC1643/standard/ERC1643Facet.sol @@ -0,0 +1,12 @@ +// SPDX-License-Identifier: Apache-2.0 +pragma solidity >=0.8.0 <0.9.0; + +import { ERC1643FacetBase } from "../ERC1643FacetBase.sol"; +import { _ERC1643_RESOLVER_KEY } from "contracts/layer_1/constants/resolverKeys.sol"; +import { Common } from "contracts/layer_0/common/Common.sol"; + +contract ERC1643Facet is ERC1643FacetBase, Common { + function getStaticResolverKey() external pure override returns (bytes32 staticResolverKey_) { + staticResolverKey_ = _ERC1643_RESOLVER_KEY; + } +} diff --git a/packages/ats/contracts/contracts/layer_1/ERC1400/ERC1643/sustainabilityPerformanceTargetRate/ERC1643SustainabilityPerformanceTargetRateFacet.sol b/packages/ats/contracts/contracts/layer_1/ERC1400/ERC1643/sustainabilityPerformanceTargetRate/ERC1643SustainabilityPerformanceTargetRateFacet.sol new file mode 100644 index 000000000..5babd5873 --- /dev/null +++ b/packages/ats/contracts/contracts/layer_1/ERC1400/ERC1643/sustainabilityPerformanceTargetRate/ERC1643SustainabilityPerformanceTargetRateFacet.sol @@ -0,0 +1,19 @@ +// SPDX-License-Identifier: Apache-2.0 +pragma solidity >=0.8.0 <0.9.0; + +import { ERC1643FacetBase } from "../ERC1643FacetBase.sol"; +import { + _ERC1643_SUSTAINABILITY_PERFORMANCE_TARGET_RATE_RESOLVER_KEY +} from "contracts/layer_1/constants/resolverKeys.sol"; +// prettier-ignore +// solhint-disable-next-line max-line-length +import { CommonSustainabilityPerformanceTargetInterestRate } from "contracts/layer_0_extensions/bond/fixingDateInterestRate/kpiInterestRate/sustainabilityPerformanceTargetInterestRate/Common.sol"; + +contract ERC1643SustainabilityPerformanceTargetRateFacet is + ERC1643FacetBase, + CommonSustainabilityPerformanceTargetInterestRate +{ + function getStaticResolverKey() external pure override returns (bytes32 staticResolverKey_) { + staticResolverKey_ = _ERC1643_SUSTAINABILITY_PERFORMANCE_TARGET_RATE_RESOLVER_KEY; + } +} diff --git a/packages/ats/contracts/contracts/layer_1/ERC1400/ERC1644/ERC1644.sol b/packages/ats/contracts/contracts/layer_1/ERC1400/ERC1644/ERC1644.sol index f020bcc82..5d6420481 100644 --- a/packages/ats/contracts/contracts/layer_1/ERC1400/ERC1644/ERC1644.sol +++ b/packages/ats/contracts/contracts/layer_1/ERC1400/ERC1644/ERC1644.sol @@ -3,13 +3,12 @@ pragma solidity >=0.8.0 <0.9.0; import { IERC1644 } from "../../interfaces/ERC1400/IERC1644.sol"; import { _DEFAULT_ADMIN_ROLE, _CONTROLLER_ROLE, _AGENT_ROLE } from "../../constants/roles.sol"; -import { Common } from "../../common/Common.sol"; +import { Internals } from "../../../layer_0/Internals.sol"; -abstract contract ERC1644 is IERC1644, Common { +abstract contract ERC1644 is IERC1644, Internals { // solhint-disable-next-line func-name-mixedcase - function initialize_ERC1644(bool _controllable) external override onlyUninitialized(_erc1644Storage().initialized) { - _erc1644Storage().isControllable = _controllable; - _erc1644Storage().initialized = true; + function initialize_ERC1644(bool _controllable) external override onlyUninitialized(_isERC1644Initialized()) { + _initialize_ERC1644(_controllable); } function controllerTransfer( diff --git a/packages/ats/contracts/contracts/layer_1/ERC1400/ERC1644/ERC1644Facet.sol b/packages/ats/contracts/contracts/layer_1/ERC1400/ERC1644/ERC1644FacetBase.sol similarity index 80% rename from packages/ats/contracts/contracts/layer_1/ERC1400/ERC1644/ERC1644Facet.sol rename to packages/ats/contracts/contracts/layer_1/ERC1400/ERC1644/ERC1644FacetBase.sol index d225b6946..b96012aee 100644 --- a/packages/ats/contracts/contracts/layer_1/ERC1400/ERC1644/ERC1644Facet.sol +++ b/packages/ats/contracts/contracts/layer_1/ERC1400/ERC1644/ERC1644FacetBase.sol @@ -3,14 +3,9 @@ pragma solidity >=0.8.0 <0.9.0; import { IERC1644 } from "../../interfaces/ERC1400/IERC1644.sol"; import { IStaticFunctionSelectors } from "../../../interfaces/resolver/resolverProxy/IStaticFunctionSelectors.sol"; -import { _ERC1644_RESOLVER_KEY } from "../../constants/resolverKeys.sol"; import { ERC1644 } from "./ERC1644.sol"; -contract ERC1644Facet is ERC1644, IStaticFunctionSelectors { - function getStaticResolverKey() external pure override returns (bytes32 staticResolverKey_) { - staticResolverKey_ = _ERC1644_RESOLVER_KEY; - } - +abstract contract ERC1644FacetBase is ERC1644, IStaticFunctionSelectors { function getStaticFunctionSelectors() external pure override returns (bytes4[] memory staticFunctionSelectors_) { staticFunctionSelectors_ = new bytes4[](5); uint256 selectorsIndex; diff --git a/packages/ats/contracts/contracts/layer_1/ERC1400/ERC1644/fixedRate/ERC1644FixedRateFacet.sol b/packages/ats/contracts/contracts/layer_1/ERC1400/ERC1644/fixedRate/ERC1644FixedRateFacet.sol new file mode 100644 index 000000000..f0e45a54f --- /dev/null +++ b/packages/ats/contracts/contracts/layer_1/ERC1400/ERC1644/fixedRate/ERC1644FixedRateFacet.sol @@ -0,0 +1,12 @@ +// SPDX-License-Identifier: Apache-2.0 +pragma solidity >=0.8.0 <0.9.0; + +import { ERC1644FacetBase } from "../ERC1644FacetBase.sol"; +import { _ERC1644_FIXED_RATE_RESOLVER_KEY } from "contracts/layer_1/constants/resolverKeys.sol"; +import { CommonFixedInterestRate } from "contracts/layer_0_extensions/bond/fixedInterestRate/Common.sol"; + +contract ERC1644FixedRateFacet is ERC1644FacetBase, CommonFixedInterestRate { + function getStaticResolverKey() external pure override returns (bytes32 staticResolverKey_) { + staticResolverKey_ = _ERC1644_FIXED_RATE_RESOLVER_KEY; + } +} diff --git a/packages/ats/contracts/contracts/layer_1/ERC1400/ERC1644/kpiLinkedRate/ERC1644KpiLinkedRateFacet.sol b/packages/ats/contracts/contracts/layer_1/ERC1400/ERC1644/kpiLinkedRate/ERC1644KpiLinkedRateFacet.sol new file mode 100644 index 000000000..1e060268d --- /dev/null +++ b/packages/ats/contracts/contracts/layer_1/ERC1400/ERC1644/kpiLinkedRate/ERC1644KpiLinkedRateFacet.sol @@ -0,0 +1,14 @@ +// SPDX-License-Identifier: Apache-2.0 +pragma solidity >=0.8.0 <0.9.0; + +import { ERC1644FacetBase } from "../ERC1644FacetBase.sol"; +import { _ERC1644_KPI_LINKED_RATE_RESOLVER_KEY } from "contracts/layer_1/constants/resolverKeys.sol"; +import { + CommonKpiLinkedInterestRate +} from "contracts/layer_0_extensions/bond/fixingDateInterestRate/kpiInterestRate/kpiLinkedInterestRate/Common.sol"; + +contract ERC1644KpiLinkedRateFacet is ERC1644FacetBase, CommonKpiLinkedInterestRate { + function getStaticResolverKey() external pure override returns (bytes32 staticResolverKey_) { + staticResolverKey_ = _ERC1644_KPI_LINKED_RATE_RESOLVER_KEY; + } +} diff --git a/packages/ats/contracts/contracts/layer_1/ERC1400/ERC1644/standard/ERC1644Facet.sol b/packages/ats/contracts/contracts/layer_1/ERC1400/ERC1644/standard/ERC1644Facet.sol new file mode 100644 index 000000000..d70359ee5 --- /dev/null +++ b/packages/ats/contracts/contracts/layer_1/ERC1400/ERC1644/standard/ERC1644Facet.sol @@ -0,0 +1,12 @@ +// SPDX-License-Identifier: Apache-2.0 +pragma solidity >=0.8.0 <0.9.0; + +import { ERC1644FacetBase } from "../ERC1644FacetBase.sol"; +import { _ERC1644_RESOLVER_KEY } from "contracts/layer_1/constants/resolverKeys.sol"; +import { Common } from "contracts/layer_0/common/Common.sol"; + +contract ERC1644Facet is ERC1644FacetBase, Common { + function getStaticResolverKey() external pure override returns (bytes32 staticResolverKey_) { + staticResolverKey_ = _ERC1644_RESOLVER_KEY; + } +} diff --git a/packages/ats/contracts/contracts/layer_1/ERC1400/ERC1644/sustainabilityPerformanceTargetRate/ERC1644SustainabilityPerformanceTargetRateFacet.sol b/packages/ats/contracts/contracts/layer_1/ERC1400/ERC1644/sustainabilityPerformanceTargetRate/ERC1644SustainabilityPerformanceTargetRateFacet.sol new file mode 100644 index 000000000..1868375fe --- /dev/null +++ b/packages/ats/contracts/contracts/layer_1/ERC1400/ERC1644/sustainabilityPerformanceTargetRate/ERC1644SustainabilityPerformanceTargetRateFacet.sol @@ -0,0 +1,19 @@ +// SPDX-License-Identifier: Apache-2.0 +pragma solidity >=0.8.0 <0.9.0; + +import { ERC1644FacetBase } from "../ERC1644FacetBase.sol"; +import { + _ERC1644_SUSTAINABILITY_PERFORMANCE_TARGET_RATE_RESOLVER_KEY +} from "contracts/layer_1/constants/resolverKeys.sol"; +// prettier-ignore +// solhint-disable-next-line max-line-length +import { CommonSustainabilityPerformanceTargetInterestRate } from "contracts/layer_0_extensions/bond/fixingDateInterestRate/kpiInterestRate/sustainabilityPerformanceTargetInterestRate/Common.sol"; + +contract ERC1644SustainabilityPerformanceTargetRateFacet is + ERC1644FacetBase, + CommonSustainabilityPerformanceTargetInterestRate +{ + function getStaticResolverKey() external pure override returns (bytes32 staticResolverKey_) { + staticResolverKey_ = _ERC1644_SUSTAINABILITY_PERFORMANCE_TARGET_RATE_RESOLVER_KEY; + } +} diff --git a/packages/ats/contracts/contracts/layer_1/ERC1400/ERC20/ERC20.sol b/packages/ats/contracts/contracts/layer_1/ERC1400/ERC20/ERC20.sol index 11969ac92..6aef6f4a9 100644 --- a/packages/ats/contracts/contracts/layer_1/ERC1400/ERC20/ERC20.sol +++ b/packages/ats/contracts/contracts/layer_1/ERC1400/ERC20/ERC20.sol @@ -2,22 +2,16 @@ // Contract copy-pasted form OZ and extended pragma solidity >=0.8.0 <0.9.0; -import { Common } from "../../common/Common.sol"; +import { Internals } from "../../../layer_0/Internals.sol"; import { IERC20 } from "../../interfaces/ERC1400/IERC20.sol"; import { _DEFAULT_PARTITION } from "../../../layer_0/constants/values.sol"; -abstract contract ERC20 is IERC20, Common { +abstract contract ERC20 is IERC20, Internals { // solhint-disable-next-line func-name-mixedcase function initialize_ERC20( ERC20Metadata calldata erc20Metadata - ) external override onlyUninitialized(_erc20Storage().initialized) { - ERC20Storage storage erc20Storage = _erc20Storage(); - erc20Storage.name = erc20Metadata.info.name; - erc20Storage.symbol = erc20Metadata.info.symbol; - erc20Storage.isin = erc20Metadata.info.isin; - erc20Storage.decimals = erc20Metadata.info.decimals; - erc20Storage.securityType = erc20Metadata.securityType; - erc20Storage.initialized = true; + ) external override onlyUninitialized(_isERC20Initialized()) { + _initialize_ERC20(erc20Metadata); } function approve( diff --git a/packages/ats/contracts/contracts/layer_1/ERC1400/ERC20/ERC20Facet.sol b/packages/ats/contracts/contracts/layer_1/ERC1400/ERC20/ERC20FacetBase.sol similarity index 86% rename from packages/ats/contracts/contracts/layer_1/ERC1400/ERC20/ERC20Facet.sol rename to packages/ats/contracts/contracts/layer_1/ERC1400/ERC20/ERC20FacetBase.sol index 2465ea434..7e45423f2 100644 --- a/packages/ats/contracts/contracts/layer_1/ERC1400/ERC20/ERC20Facet.sol +++ b/packages/ats/contracts/contracts/layer_1/ERC1400/ERC20/ERC20FacetBase.sol @@ -4,14 +4,9 @@ pragma solidity >=0.8.0 <0.9.0; import { IERC20 } from "../../interfaces/ERC1400/IERC20.sol"; import { IStaticFunctionSelectors } from "../../../interfaces/resolver/resolverProxy/IStaticFunctionSelectors.sol"; -import { _ERC20_RESOLVER_KEY } from "../../constants/resolverKeys.sol"; import { ERC20 } from "./ERC20.sol"; -contract ERC20Facet is ERC20, IStaticFunctionSelectors { - function getStaticResolverKey() external pure override returns (bytes32 staticResolverKey_) { - staticResolverKey_ = _ERC20_RESOLVER_KEY; - } - +abstract contract ERC20FacetBase is ERC20, IStaticFunctionSelectors { function getStaticFunctionSelectors() external pure override returns (bytes4[] memory staticFunctionSelectors_) { staticFunctionSelectors_ = new bytes4[](12); uint256 selectorsIndex; diff --git a/packages/ats/contracts/contracts/layer_1/ERC1400/ERC20/fixedRate/ERC20FixedRateFacet.sol b/packages/ats/contracts/contracts/layer_1/ERC1400/ERC20/fixedRate/ERC20FixedRateFacet.sol new file mode 100644 index 000000000..2c170e0a2 --- /dev/null +++ b/packages/ats/contracts/contracts/layer_1/ERC1400/ERC20/fixedRate/ERC20FixedRateFacet.sol @@ -0,0 +1,13 @@ +// SPDX-License-Identifier: Apache-2.0 +// Contract copy-pasted form OZ and extended +pragma solidity >=0.8.0 <0.9.0; + +import { ERC20FacetBase } from "../ERC20FacetBase.sol"; +import { _ERC20_FIXED_RATE_RESOLVER_KEY } from "../../../constants/resolverKeys.sol"; +import { CommonFixedInterestRate } from "contracts/layer_0_extensions/bond/fixedInterestRate/Common.sol"; + +contract ERC20FixedRateFacet is ERC20FacetBase, CommonFixedInterestRate { + function getStaticResolverKey() external pure override returns (bytes32 staticResolverKey_) { + staticResolverKey_ = _ERC20_FIXED_RATE_RESOLVER_KEY; + } +} diff --git a/packages/ats/contracts/contracts/layer_1/ERC1400/ERC20/kpiLinkedRate/ERC20KpiLinkedRateFacet.sol b/packages/ats/contracts/contracts/layer_1/ERC1400/ERC20/kpiLinkedRate/ERC20KpiLinkedRateFacet.sol new file mode 100644 index 000000000..f3f5c8ee3 --- /dev/null +++ b/packages/ats/contracts/contracts/layer_1/ERC1400/ERC20/kpiLinkedRate/ERC20KpiLinkedRateFacet.sol @@ -0,0 +1,15 @@ +// SPDX-License-Identifier: Apache-2.0 +// Contract copy-pasted form OZ and extended +pragma solidity >=0.8.0 <0.9.0; + +import { ERC20FacetBase } from "../ERC20FacetBase.sol"; +import { _ERC20_KPI_LINKED_RATE_RESOLVER_KEY } from "../../../constants/resolverKeys.sol"; +import { + CommonKpiLinkedInterestRate +} from "contracts/layer_0_extensions/bond/fixingDateInterestRate/kpiInterestRate/kpiLinkedInterestRate/Common.sol"; + +contract ERC20KpiLinkedRateFacet is ERC20FacetBase, CommonKpiLinkedInterestRate { + function getStaticResolverKey() external pure override returns (bytes32 staticResolverKey_) { + staticResolverKey_ = _ERC20_KPI_LINKED_RATE_RESOLVER_KEY; + } +} diff --git a/packages/ats/contracts/contracts/layer_1/ERC1400/ERC20/standard/ERC20Facet.sol b/packages/ats/contracts/contracts/layer_1/ERC1400/ERC20/standard/ERC20Facet.sol new file mode 100644 index 000000000..c977e19e7 --- /dev/null +++ b/packages/ats/contracts/contracts/layer_1/ERC1400/ERC20/standard/ERC20Facet.sol @@ -0,0 +1,13 @@ +// SPDX-License-Identifier: Apache-2.0 +// Contract copy-pasted form OZ and extended +pragma solidity >=0.8.0 <0.9.0; + +import { ERC20FacetBase } from "../ERC20FacetBase.sol"; +import { _ERC20_RESOLVER_KEY } from "../../../constants/resolverKeys.sol"; +import { Common } from "contracts/layer_0/common/Common.sol"; + +contract ERC20Facet is ERC20FacetBase, Common { + function getStaticResolverKey() external pure override returns (bytes32 staticResolverKey_) { + staticResolverKey_ = _ERC20_RESOLVER_KEY; + } +} diff --git a/packages/ats/contracts/contracts/layer_1/ERC1400/ERC20/sustainabilityPerformanceTargetRate/ERC20SustainabilityPerformanceTargetRateFacet.sol b/packages/ats/contracts/contracts/layer_1/ERC1400/ERC20/sustainabilityPerformanceTargetRate/ERC20SustainabilityPerformanceTargetRateFacet.sol new file mode 100644 index 000000000..6ca3f39d1 --- /dev/null +++ b/packages/ats/contracts/contracts/layer_1/ERC1400/ERC20/sustainabilityPerformanceTargetRate/ERC20SustainabilityPerformanceTargetRateFacet.sol @@ -0,0 +1,18 @@ +// SPDX-License-Identifier: Apache-2.0 +// Contract copy-pasted form OZ and extended +pragma solidity >=0.8.0 <0.9.0; + +import { ERC20FacetBase } from "../ERC20FacetBase.sol"; +import { _ERC20_SUSTAINABILITY_PERFORMANCE_TARGET_RATE_RESOLVER_KEY } from "../../../constants/resolverKeys.sol"; +// prettier-ignore +// solhint-disable-next-line max-line-length +import { CommonSustainabilityPerformanceTargetInterestRate } from "contracts/layer_0_extensions/bond/fixingDateInterestRate/kpiInterestRate/sustainabilityPerformanceTargetInterestRate/Common.sol"; + +contract ERC20SustainabilityPerformanceTargetRateFacet is + ERC20FacetBase, + CommonSustainabilityPerformanceTargetInterestRate +{ + function getStaticResolverKey() external pure override returns (bytes32 staticResolverKey_) { + staticResolverKey_ = _ERC20_SUSTAINABILITY_PERFORMANCE_TARGET_RATE_RESOLVER_KEY; + } +} diff --git a/packages/ats/contracts/contracts/layer_1/ERC1400/ERC20Permit/ERC20Permit.sol b/packages/ats/contracts/contracts/layer_1/ERC1400/ERC20Permit/ERC20Permit.sol index b3891166a..0111cc342 100644 --- a/packages/ats/contracts/contracts/layer_1/ERC1400/ERC20Permit/ERC20Permit.sol +++ b/packages/ats/contracts/contracts/layer_1/ERC1400/ERC20Permit/ERC20Permit.sol @@ -2,19 +2,10 @@ // Contract copy-pasted form OZ and extended pragma solidity >=0.8.0 <0.9.0; -import { Common } from "../../common/Common.sol"; +import { Internals } from "../../../layer_0/Internals.sol"; import { IERC20Permit } from "../../interfaces/ERC1400/IERC20Permit.sol"; -import { _CONTRACT_NAME_ERC20PERMIT, _CONTRACT_VERSION_ERC20PERMIT } from "../../constants/values.sol"; - -abstract contract ERC20Permit is IERC20Permit, Common { - // solhint-disable-next-line func-name-mixedcase - function initialize_ERC20Permit() external override onlyUninitialized(_erc20PermitStorage().initialized) { - ERC20PermitStorage storage erc20PermitStorage = _erc20PermitStorage(); - erc20PermitStorage.initialized = true; - erc20PermitStorage.contractName = _CONTRACT_NAME_ERC20PERMIT; - erc20PermitStorage.contractVersion = _CONTRACT_VERSION_ERC20PERMIT; - } +abstract contract ERC20Permit is IERC20Permit, Internals { function permit( address owner, address spender, @@ -38,10 +29,6 @@ abstract contract ERC20Permit is IERC20Permit, Common { _permit(owner, spender, value, deadline, v, r, s); } - function nonces(address owner) external view override returns (uint256) { - return _getNounceFor(owner); - } - // solhint-disable-next-line func-name-mixedcase function DOMAIN_SEPARATOR() external view override returns (bytes32) { return _DOMAIN_SEPARATOR(); diff --git a/packages/ats/contracts/contracts/layer_1/ERC1400/ERC20Permit/ERC20PermitFacet.sol b/packages/ats/contracts/contracts/layer_1/ERC1400/ERC20Permit/ERC20PermitFacetBase.sol similarity index 64% rename from packages/ats/contracts/contracts/layer_1/ERC1400/ERC20Permit/ERC20PermitFacet.sol rename to packages/ats/contracts/contracts/layer_1/ERC1400/ERC20Permit/ERC20PermitFacetBase.sol index d247f4aa1..8425d8137 100644 --- a/packages/ats/contracts/contracts/layer_1/ERC1400/ERC20Permit/ERC20PermitFacet.sol +++ b/packages/ats/contracts/contracts/layer_1/ERC1400/ERC20Permit/ERC20PermitFacetBase.sol @@ -4,20 +4,13 @@ pragma solidity >=0.8.0 <0.9.0; import { IERC20Permit } from "../../interfaces/ERC1400/IERC20Permit.sol"; import { IStaticFunctionSelectors } from "../../../interfaces/resolver/resolverProxy/IStaticFunctionSelectors.sol"; -import { _ERC20PERMIT_RESOLVER_KEY } from "../../constants/resolverKeys.sol"; import { ERC20Permit } from "./ERC20Permit.sol"; -contract ERC20PermitFacet is ERC20Permit, IStaticFunctionSelectors { - function getStaticResolverKey() external pure override returns (bytes32 staticResolverKey_) { - staticResolverKey_ = _ERC20PERMIT_RESOLVER_KEY; - } - +abstract contract ERC20PermitFacetBase is ERC20Permit, IStaticFunctionSelectors { function getStaticFunctionSelectors() external pure override returns (bytes4[] memory staticFunctionSelectors_) { - staticFunctionSelectors_ = new bytes4[](4); + staticFunctionSelectors_ = new bytes4[](2); uint256 selectorsIndex; - staticFunctionSelectors_[selectorsIndex++] = this.initialize_ERC20Permit.selector; staticFunctionSelectors_[selectorsIndex++] = this.permit.selector; - staticFunctionSelectors_[selectorsIndex++] = this.nonces.selector; staticFunctionSelectors_[selectorsIndex++] = this.DOMAIN_SEPARATOR.selector; } diff --git a/packages/ats/contracts/contracts/layer_1/ERC1400/ERC20Permit/fixedRate/ERC20PermitFixedRateFacet.sol b/packages/ats/contracts/contracts/layer_1/ERC1400/ERC20Permit/fixedRate/ERC20PermitFixedRateFacet.sol new file mode 100644 index 000000000..d1185d723 --- /dev/null +++ b/packages/ats/contracts/contracts/layer_1/ERC1400/ERC20Permit/fixedRate/ERC20PermitFixedRateFacet.sol @@ -0,0 +1,12 @@ +// SPDX-License-Identifier: Apache-2.0 +pragma solidity >=0.8.0 <0.9.0; + +import { ERC20PermitFacetBase } from "../ERC20PermitFacetBase.sol"; +import { _ERC20PERMIT_FIXED_RATE_RESOLVER_KEY } from "../../../constants/resolverKeys.sol"; +import { CommonFixedInterestRate } from "contracts/layer_0_extensions/bond/fixedInterestRate/Common.sol"; + +contract ERC20PermitFixedRateFacet is ERC20PermitFacetBase, CommonFixedInterestRate { + function getStaticResolverKey() external pure override returns (bytes32 staticResolverKey_) { + staticResolverKey_ = _ERC20PERMIT_FIXED_RATE_RESOLVER_KEY; + } +} diff --git a/packages/ats/contracts/contracts/layer_1/ERC1400/ERC20Permit/kpiLinkedRate/ERC20PermitKpiLinkedRateFacet.sol b/packages/ats/contracts/contracts/layer_1/ERC1400/ERC20Permit/kpiLinkedRate/ERC20PermitKpiLinkedRateFacet.sol new file mode 100644 index 000000000..3a9208865 --- /dev/null +++ b/packages/ats/contracts/contracts/layer_1/ERC1400/ERC20Permit/kpiLinkedRate/ERC20PermitKpiLinkedRateFacet.sol @@ -0,0 +1,14 @@ +// SPDX-License-Identifier: Apache-2.0 +pragma solidity >=0.8.0 <0.9.0; + +import { ERC20PermitFacetBase } from "../ERC20PermitFacetBase.sol"; +import { _ERC20PERMIT_KPI_LINKED_RATE_RESOLVER_KEY } from "../../../constants/resolverKeys.sol"; +import { + CommonKpiLinkedInterestRate +} from "contracts/layer_0_extensions/bond/fixingDateInterestRate/kpiInterestRate/kpiLinkedInterestRate/Common.sol"; + +contract ERC20PermitKpiLinkedRateFacet is ERC20PermitFacetBase, CommonKpiLinkedInterestRate { + function getStaticResolverKey() external pure override returns (bytes32 staticResolverKey_) { + staticResolverKey_ = _ERC20PERMIT_KPI_LINKED_RATE_RESOLVER_KEY; + } +} diff --git a/packages/ats/contracts/contracts/layer_1/ERC1400/ERC20Permit/standard/ERC20PermitFacet.sol b/packages/ats/contracts/contracts/layer_1/ERC1400/ERC20Permit/standard/ERC20PermitFacet.sol new file mode 100644 index 000000000..eef11fc7c --- /dev/null +++ b/packages/ats/contracts/contracts/layer_1/ERC1400/ERC20Permit/standard/ERC20PermitFacet.sol @@ -0,0 +1,12 @@ +// SPDX-License-Identifier: Apache-2.0 +pragma solidity >=0.8.0 <0.9.0; + +import { ERC20PermitFacetBase } from "../ERC20PermitFacetBase.sol"; +import { _ERC20PERMIT_RESOLVER_KEY } from "../../../constants/resolverKeys.sol"; +import { Common } from "contracts/layer_0/common/Common.sol"; + +contract ERC20PermitFacet is ERC20PermitFacetBase, Common { + function getStaticResolverKey() external pure override returns (bytes32 staticResolverKey_) { + staticResolverKey_ = _ERC20PERMIT_RESOLVER_KEY; + } +} diff --git a/packages/ats/contracts/contracts/layer_1/ERC1400/ERC20Permit/sustainabilityPerformanceTargetRate/ERC20PermitSustainabilityPerformanceTargetRateFacet.sol b/packages/ats/contracts/contracts/layer_1/ERC1400/ERC20Permit/sustainabilityPerformanceTargetRate/ERC20PermitSustainabilityPerformanceTargetRateFacet.sol new file mode 100644 index 000000000..ab6735c78 --- /dev/null +++ b/packages/ats/contracts/contracts/layer_1/ERC1400/ERC20Permit/sustainabilityPerformanceTargetRate/ERC20PermitSustainabilityPerformanceTargetRateFacet.sol @@ -0,0 +1,17 @@ +// SPDX-License-Identifier: Apache-2.0 +pragma solidity >=0.8.0 <0.9.0; + +import { ERC20PermitFacetBase } from "../ERC20PermitFacetBase.sol"; +import { _ERC20PERMIT_SUSTAINABILITY_PERFORMANCE_TARGET_RATE_RESOLVER_KEY } from "../../../constants/resolverKeys.sol"; +// prettier-ignore +// solhint-disable-next-line max-line-length +import { CommonSustainabilityPerformanceTargetInterestRate } from "contracts/layer_0_extensions/bond/fixingDateInterestRate/kpiInterestRate/sustainabilityPerformanceTargetInterestRate/Common.sol"; + +contract ERC20PermitSustainabilityPerformanceTargetRateFacet is + ERC20PermitFacetBase, + CommonSustainabilityPerformanceTargetInterestRate +{ + function getStaticResolverKey() external pure override returns (bytes32 staticResolverKey_) { + staticResolverKey_ = _ERC20PERMIT_SUSTAINABILITY_PERFORMANCE_TARGET_RATE_RESOLVER_KEY; + } +} diff --git a/packages/ats/contracts/contracts/layer_1/ERC1400/ERC20Votes/ERC20Votes.sol b/packages/ats/contracts/contracts/layer_1/ERC1400/ERC20Votes/ERC20Votes.sol index 798051d1e..7f4ae190b 100644 --- a/packages/ats/contracts/contracts/layer_1/ERC1400/ERC20Votes/ERC20Votes.sol +++ b/packages/ats/contracts/contracts/layer_1/ERC1400/ERC20Votes/ERC20Votes.sol @@ -2,20 +2,14 @@ // Contract copy-pasted form OZ and extended pragma solidity >=0.8.0 <0.9.0; -import { Common } from "../../common/Common.sol"; +import { Internals } from "../../../layer_0/Internals.sol"; import { IERC20Votes } from "../../interfaces/ERC1400/IERC20Votes.sol"; -import { _CONTRACT_NAME_ERC20VOTES, _CONTRACT_VERSION_ERC20VOTES } from "../../constants/values.sol"; +import { CheckpointsLib } from "../../../layer_0/common/libraries/CheckpointsLib.sol"; -abstract contract ERC20Votes is IERC20Votes, Common { +abstract contract ERC20Votes is IERC20Votes, Internals { // solhint-disable-next-line func-name-mixedcase - function initialize_ERC20Votes( - bool _activated - ) external override onlyUninitialized(_erc20VotesStorage().initialized) { - ERC20VotesStorage storage erc20VotesStorage = _erc20VotesStorage(); - _setActivate(_activated); - erc20VotesStorage.initialized = true; - erc20VotesStorage.contractName = _CONTRACT_NAME_ERC20VOTES; - erc20VotesStorage.contractVersion = _CONTRACT_VERSION_ERC20VOTES; + function initialize_ERC20Votes(bool _activated) external override onlyUninitialized(_isERC20VotesInitialized()) { + _initialize_ERC20Votes(_activated); } function delegate(address _delegatee) external override onlyUnpaused { @@ -47,7 +41,10 @@ abstract contract ERC20Votes is IERC20Votes, Common { return _delegates(_account); } - function checkpoints(address _account, uint256 _pos) external view override returns (Checkpoint memory) { + function checkpoints( + address _account, + uint256 _pos + ) external view override returns (CheckpointsLib.Checkpoint memory) { return _checkpoints(_account, _pos); } diff --git a/packages/ats/contracts/contracts/layer_1/ERC1400/ERC20Votes/ERC20VotesFacet.sol b/packages/ats/contracts/contracts/layer_1/ERC1400/ERC20Votes/ERC20VotesFacetBase.sol similarity index 87% rename from packages/ats/contracts/contracts/layer_1/ERC1400/ERC20Votes/ERC20VotesFacet.sol rename to packages/ats/contracts/contracts/layer_1/ERC1400/ERC20Votes/ERC20VotesFacetBase.sol index b2b8e657a..0889d7800 100644 --- a/packages/ats/contracts/contracts/layer_1/ERC1400/ERC20Votes/ERC20VotesFacet.sol +++ b/packages/ats/contracts/contracts/layer_1/ERC1400/ERC20Votes/ERC20VotesFacetBase.sol @@ -7,14 +7,9 @@ import { IERC5805 } from "@openzeppelin/contracts/interfaces/IERC5805.sol"; import { IERC6372 } from "@openzeppelin/contracts/interfaces/IERC6372.sol"; import { IVotes } from "@openzeppelin/contracts/governance/utils/IVotes.sol"; import { IStaticFunctionSelectors } from "../../../interfaces/resolver/resolverProxy/IStaticFunctionSelectors.sol"; -import { _ERC20VOTES_RESOLVER_KEY } from "../../constants/resolverKeys.sol"; import { ERC20Votes } from "./ERC20Votes.sol"; -contract ERC20VotesFacet is ERC20Votes, IStaticFunctionSelectors { - function getStaticResolverKey() external pure override returns (bytes32 staticResolverKey_) { - staticResolverKey_ = _ERC20VOTES_RESOLVER_KEY; - } - +abstract contract ERC20VotesFacetBase is ERC20Votes, IStaticFunctionSelectors { function getStaticFunctionSelectors() external pure override returns (bytes4[] memory staticFunctionSelectors_) { staticFunctionSelectors_ = new bytes4[](11); uint256 selectorsIndex; diff --git a/packages/ats/contracts/contracts/layer_1/ERC1400/ERC20Votes/fixedRate/ERC20VotesFixedRateFacet.sol b/packages/ats/contracts/contracts/layer_1/ERC1400/ERC20Votes/fixedRate/ERC20VotesFixedRateFacet.sol new file mode 100644 index 000000000..efeac60c2 --- /dev/null +++ b/packages/ats/contracts/contracts/layer_1/ERC1400/ERC20Votes/fixedRate/ERC20VotesFixedRateFacet.sol @@ -0,0 +1,12 @@ +// SPDX-License-Identifier: Apache-2.0 +pragma solidity >=0.8.0 <0.9.0; + +import { ERC20VotesFacetBase } from "../ERC20VotesFacetBase.sol"; +import { _ERC20VOTES_FIXED_RATE_RESOLVER_KEY } from "../../../constants/resolverKeys.sol"; +import { CommonFixedInterestRate } from "contracts/layer_0_extensions/bond/fixedInterestRate/Common.sol"; + +contract ERC20VotesFixedRateFacet is ERC20VotesFacetBase, CommonFixedInterestRate { + function getStaticResolverKey() external pure override returns (bytes32 staticResolverKey_) { + staticResolverKey_ = _ERC20VOTES_FIXED_RATE_RESOLVER_KEY; + } +} diff --git a/packages/ats/contracts/contracts/layer_1/ERC1400/ERC20Votes/kpiLinkedRate/ERC20VotesKpiLinkedRateFacet.sol b/packages/ats/contracts/contracts/layer_1/ERC1400/ERC20Votes/kpiLinkedRate/ERC20VotesKpiLinkedRateFacet.sol new file mode 100644 index 000000000..c058b1f98 --- /dev/null +++ b/packages/ats/contracts/contracts/layer_1/ERC1400/ERC20Votes/kpiLinkedRate/ERC20VotesKpiLinkedRateFacet.sol @@ -0,0 +1,14 @@ +// SPDX-License-Identifier: Apache-2.0 +pragma solidity >=0.8.0 <0.9.0; + +import { ERC20VotesFacetBase } from "../ERC20VotesFacetBase.sol"; +import { _ERC20VOTES_KPI_LINKED_RATE_RESOLVER_KEY } from "../../../constants/resolverKeys.sol"; +import { + CommonKpiLinkedInterestRate +} from "contracts/layer_0_extensions/bond/fixingDateInterestRate/kpiInterestRate/kpiLinkedInterestRate/Common.sol"; + +contract ERC20VotesKpiLinkedRateFacet is ERC20VotesFacetBase, CommonKpiLinkedInterestRate { + function getStaticResolverKey() external pure override returns (bytes32 staticResolverKey_) { + staticResolverKey_ = _ERC20VOTES_KPI_LINKED_RATE_RESOLVER_KEY; + } +} diff --git a/packages/ats/contracts/contracts/layer_1/ERC1400/ERC20Votes/standard/ERC20VotesFacet.sol b/packages/ats/contracts/contracts/layer_1/ERC1400/ERC20Votes/standard/ERC20VotesFacet.sol new file mode 100644 index 000000000..5c507bed5 --- /dev/null +++ b/packages/ats/contracts/contracts/layer_1/ERC1400/ERC20Votes/standard/ERC20VotesFacet.sol @@ -0,0 +1,12 @@ +// SPDX-License-Identifier: Apache-2.0 +pragma solidity >=0.8.0 <0.9.0; + +import { ERC20VotesFacetBase } from "../ERC20VotesFacetBase.sol"; +import { _ERC20VOTES_RESOLVER_KEY } from "../../../constants/resolverKeys.sol"; +import { Common } from "contracts/layer_0/common/Common.sol"; + +contract ERC20VotesFacet is ERC20VotesFacetBase, Common { + function getStaticResolverKey() external pure override returns (bytes32 staticResolverKey_) { + staticResolverKey_ = _ERC20VOTES_RESOLVER_KEY; + } +} diff --git a/packages/ats/contracts/contracts/layer_1/ERC1400/ERC20Votes/sustainabilityPerformanceTargetRate/ERC20VotesSustainabilityPerformanceTargetRateFacet.sol b/packages/ats/contracts/contracts/layer_1/ERC1400/ERC20Votes/sustainabilityPerformanceTargetRate/ERC20VotesSustainabilityPerformanceTargetRateFacet.sol new file mode 100644 index 000000000..97e30da1e --- /dev/null +++ b/packages/ats/contracts/contracts/layer_1/ERC1400/ERC20Votes/sustainabilityPerformanceTargetRate/ERC20VotesSustainabilityPerformanceTargetRateFacet.sol @@ -0,0 +1,17 @@ +// SPDX-License-Identifier: Apache-2.0 +pragma solidity >=0.8.0 <0.9.0; + +import { ERC20VotesFacetBase } from "../ERC20VotesFacetBase.sol"; +import { _ERC20VOTES_SUSTAINABILITY_PERFORMANCE_TARGET_RATE_RESOLVER_KEY } from "../../../constants/resolverKeys.sol"; +// prettier-ignore +// solhint-disable-next-line max-line-length +import { CommonSustainabilityPerformanceTargetInterestRate } from "contracts/layer_0_extensions/bond/fixingDateInterestRate/kpiInterestRate/sustainabilityPerformanceTargetInterestRate/Common.sol"; + +contract ERC20VotesSustainabilityPerformanceTargetRateFacet is + ERC20VotesFacetBase, + CommonSustainabilityPerformanceTargetInterestRate +{ + function getStaticResolverKey() external pure override returns (bytes32 staticResolverKey_) { + staticResolverKey_ = _ERC20VOTES_SUSTAINABILITY_PERFORMANCE_TARGET_RATE_RESOLVER_KEY; + } +} diff --git a/packages/ats/contracts/contracts/layer_1/ERC3643/ERC3643.sol b/packages/ats/contracts/contracts/layer_1/ERC3643/ERC3643.sol deleted file mode 100644 index 3b56f0b1d..000000000 --- a/packages/ats/contracts/contracts/layer_1/ERC3643/ERC3643.sol +++ /dev/null @@ -1,91 +0,0 @@ -// SPDX-License-Identifier: Apache-2.0 -pragma solidity >=0.8.0 <0.9.0; - -import { _AGENT_ROLE, _TREX_OWNER_ROLE } from "../constants/roles.sol"; -import { IERC3643Management } from "../interfaces/ERC3643/IERC3643Management.sol"; -import { Common } from "../common/Common.sol"; - -abstract contract ERC3643Management is IERC3643Management, Common { - address private constant _ONCHAIN_ID = address(0); - - // ====== External functions (state-changing) ====== - // solhint-disable-next-line func-name-mixedcase - function initialize_ERC3643( - address _compliance, - address _identityRegistry - ) external onlyUninitialized(_erc3643Storage().initialized) { - _initialize_ERC3643(_compliance, _identityRegistry); - } - - function setName(string calldata _name) external override onlyUnpaused onlyRole(_TREX_OWNER_ROLE) { - ERC20Storage storage erc20Storage = _setName(_name); - - emit UpdatedTokenInformation( - erc20Storage.name, - erc20Storage.symbol, - erc20Storage.decimals, - _version(), - _erc3643Storage().onchainID - ); - } - - function setSymbol(string calldata _symbol) external override onlyUnpaused onlyRole(_TREX_OWNER_ROLE) { - ERC20Storage storage erc20Storage = _setSymbol(_symbol); - - emit UpdatedTokenInformation( - erc20Storage.name, - erc20Storage.symbol, - erc20Storage.decimals, - _version(), - _erc3643Storage().onchainID - ); - } - - function setOnchainID(address _onchainID) external override onlyUnpaused onlyRole(_TREX_OWNER_ROLE) { - ERC20Storage storage erc20Storage = _erc20Storage(); - _erc3643Storage().onchainID = _onchainID; - - emit UpdatedTokenInformation( - erc20Storage.name, - erc20Storage.symbol, - erc20Storage.decimals, - _version(), - _onchainID - ); - } - - function setIdentityRegistry(address _identityRegistry) external override onlyUnpaused onlyRole(_TREX_OWNER_ROLE) { - _setIdentityRegistry(_identityRegistry); - emit IdentityRegistryAdded(_identityRegistry); - } - - function setCompliance(address _compliance) external override onlyUnpaused onlyRole(_TREX_OWNER_ROLE) { - _setCompliance(_compliance); - } - - function addAgent(address _agent) external onlyRole(_getRoleAdmin(_AGENT_ROLE)) onlyUnpaused { - _addAgent(_agent); - emit AgentAdded(_agent); - } - - function removeAgent(address _agent) external onlyRole(_getRoleAdmin(_AGENT_ROLE)) onlyUnpaused { - _removeAgent(_agent); - emit AgentRemoved(_agent); - } - - function recoveryAddress( - address _lostWallet, - address _newWallet, - address _investorOnchainID - ) - external - onlyUnrecoveredAddress(_lostWallet) - onlyRole(_AGENT_ROLE) - onlyEmptyWallet(_lostWallet) - onlyWithoutMultiPartition - returns (bool success_) - { - success_ = _recoveryAddress(_lostWallet, _newWallet); - emit RecoverySuccess(_lostWallet, _newWallet, _investorOnchainID); - } -} diff --git a/packages/ats/contracts/contracts/layer_1/ERC3643/ERC3643Batch.sol b/packages/ats/contracts/contracts/layer_1/ERC3643/ERC3643Batch.sol index ae2ab3370..612ecc8ac 100644 --- a/packages/ats/contracts/contracts/layer_1/ERC3643/ERC3643Batch.sol +++ b/packages/ats/contracts/contracts/layer_1/ERC3643/ERC3643Batch.sol @@ -2,10 +2,10 @@ pragma solidity >=0.8.0 <0.9.0; import { _CONTROLLER_ROLE, _ISSUER_ROLE, _AGENT_ROLE } from "../constants/roles.sol"; -import { Common } from "../common/Common.sol"; +import { Internals } from "../../layer_0/Internals.sol"; import { IERC3643Batch } from "../interfaces/ERC3643/IERC3643Batch.sol"; -abstract contract ERC3643Batch is IERC3643Batch, Common { +abstract contract ERC3643Batch is IERC3643Batch, Internals { function batchTransfer( address[] calldata _toList, uint256[] calldata _amounts @@ -54,7 +54,7 @@ abstract contract ERC3643Batch is IERC3643Batch, Common { function batchMint( address[] calldata _toList, uint256[] calldata _amounts - ) external onlyValidInputAmountsArrayLength(_toList, _amounts) onlyUnpaused onlyWithoutMultiPartition onlyIssuable { + ) external onlyValidInputAmountsArrayLength(_toList, _amounts) onlyUnpaused onlyWithoutMultiPartition { { bytes32[] memory roles = new bytes32[](2); roles[0] = _ISSUER_ROLE; diff --git a/packages/ats/contracts/contracts/layer_1/ERC3643/ERC3643BatchFacet.sol b/packages/ats/contracts/contracts/layer_1/ERC3643/ERC3643BatchFacetBase.sol similarity index 78% rename from packages/ats/contracts/contracts/layer_1/ERC3643/ERC3643BatchFacet.sol rename to packages/ats/contracts/contracts/layer_1/ERC3643/ERC3643BatchFacetBase.sol index 9965d0bd4..b55aeccb9 100644 --- a/packages/ats/contracts/contracts/layer_1/ERC3643/ERC3643BatchFacet.sol +++ b/packages/ats/contracts/contracts/layer_1/ERC3643/ERC3643BatchFacetBase.sol @@ -3,14 +3,9 @@ pragma solidity >=0.8.0 <0.9.0; import { IERC3643Batch } from "../interfaces/ERC3643/IERC3643Batch.sol"; import { IStaticFunctionSelectors } from "../../interfaces/resolver/resolverProxy/IStaticFunctionSelectors.sol"; -import { _ERC3643_BATCH_RESOLVER_KEY } from "../constants/resolverKeys.sol"; import { ERC3643Batch } from "./ERC3643Batch.sol"; -contract ERC3643BatchFacet is ERC3643Batch, IStaticFunctionSelectors { - function getStaticResolverKey() external pure override returns (bytes32 staticResolverKey_) { - staticResolverKey_ = _ERC3643_BATCH_RESOLVER_KEY; - } - +abstract contract ERC3643BatchFacetBase is ERC3643Batch, IStaticFunctionSelectors { function getStaticFunctionSelectors() external pure override returns (bytes4[] memory staticFunctionSelectors_) { staticFunctionSelectors_ = new bytes4[](4); uint256 selectorsIndex; diff --git a/packages/ats/contracts/contracts/layer_1/ERC3643/ERC3643Management.sol b/packages/ats/contracts/contracts/layer_1/ERC3643/ERC3643Management.sol index 3b56f0b1d..fd305dea2 100644 --- a/packages/ats/contracts/contracts/layer_1/ERC3643/ERC3643Management.sol +++ b/packages/ats/contracts/contracts/layer_1/ERC3643/ERC3643Management.sol @@ -3,9 +3,9 @@ pragma solidity >=0.8.0 <0.9.0; import { _AGENT_ROLE, _TREX_OWNER_ROLE } from "../constants/roles.sol"; import { IERC3643Management } from "../interfaces/ERC3643/IERC3643Management.sol"; -import { Common } from "../common/Common.sol"; +import { Internals } from "../../layer_0/Internals.sol"; -abstract contract ERC3643Management is IERC3643Management, Common { +abstract contract ERC3643Management is IERC3643Management, Internals { address private constant _ONCHAIN_ID = address(0); // ====== External functions (state-changing) ====== @@ -13,50 +13,24 @@ abstract contract ERC3643Management is IERC3643Management, Common { function initialize_ERC3643( address _compliance, address _identityRegistry - ) external onlyUninitialized(_erc3643Storage().initialized) { + ) external onlyUninitialized(_isERC3643Initialized()) { _initialize_ERC3643(_compliance, _identityRegistry); } function setName(string calldata _name) external override onlyUnpaused onlyRole(_TREX_OWNER_ROLE) { - ERC20Storage storage erc20Storage = _setName(_name); - - emit UpdatedTokenInformation( - erc20Storage.name, - erc20Storage.symbol, - erc20Storage.decimals, - _version(), - _erc3643Storage().onchainID - ); + _setName(_name); } function setSymbol(string calldata _symbol) external override onlyUnpaused onlyRole(_TREX_OWNER_ROLE) { - ERC20Storage storage erc20Storage = _setSymbol(_symbol); - - emit UpdatedTokenInformation( - erc20Storage.name, - erc20Storage.symbol, - erc20Storage.decimals, - _version(), - _erc3643Storage().onchainID - ); + _setSymbol(_symbol); } function setOnchainID(address _onchainID) external override onlyUnpaused onlyRole(_TREX_OWNER_ROLE) { - ERC20Storage storage erc20Storage = _erc20Storage(); - _erc3643Storage().onchainID = _onchainID; - - emit UpdatedTokenInformation( - erc20Storage.name, - erc20Storage.symbol, - erc20Storage.decimals, - _version(), - _onchainID - ); + _setOnchainID(_onchainID); } function setIdentityRegistry(address _identityRegistry) external override onlyUnpaused onlyRole(_TREX_OWNER_ROLE) { _setIdentityRegistry(_identityRegistry); - emit IdentityRegistryAdded(_identityRegistry); } function setCompliance(address _compliance) external override onlyUnpaused onlyRole(_TREX_OWNER_ROLE) { @@ -65,12 +39,10 @@ abstract contract ERC3643Management is IERC3643Management, Common { function addAgent(address _agent) external onlyRole(_getRoleAdmin(_AGENT_ROLE)) onlyUnpaused { _addAgent(_agent); - emit AgentAdded(_agent); } function removeAgent(address _agent) external onlyRole(_getRoleAdmin(_AGENT_ROLE)) onlyUnpaused { _removeAgent(_agent); - emit AgentRemoved(_agent); } function recoveryAddress( @@ -85,7 +57,6 @@ abstract contract ERC3643Management is IERC3643Management, Common { onlyWithoutMultiPartition returns (bool success_) { - success_ = _recoveryAddress(_lostWallet, _newWallet); - emit RecoverySuccess(_lostWallet, _newWallet, _investorOnchainID); + success_ = _recoveryAddress(_lostWallet, _newWallet, _investorOnchainID); } } diff --git a/packages/ats/contracts/contracts/layer_1/ERC3643/ERC3643ManagementFacet.sol b/packages/ats/contracts/contracts/layer_1/ERC3643/ERC3643ManagementFacetBase.sol similarity index 82% rename from packages/ats/contracts/contracts/layer_1/ERC3643/ERC3643ManagementFacet.sol rename to packages/ats/contracts/contracts/layer_1/ERC3643/ERC3643ManagementFacetBase.sol index ab45c6274..4ac776490 100644 --- a/packages/ats/contracts/contracts/layer_1/ERC3643/ERC3643ManagementFacet.sol +++ b/packages/ats/contracts/contracts/layer_1/ERC3643/ERC3643ManagementFacetBase.sol @@ -1,16 +1,11 @@ // SPDX-License-Identifier: Apache-2.0 pragma solidity >=0.8.0 <0.9.0; -import { _ERC3643_MANAGEMENT_RESOLVER_KEY } from "../constants/resolverKeys.sol"; import { IERC3643Management } from "../interfaces/ERC3643/IERC3643Management.sol"; import { IStaticFunctionSelectors } from "../../interfaces/resolver/resolverProxy/IStaticFunctionSelectors.sol"; import { ERC3643Management } from "./ERC3643Management.sol"; -contract ERC3643ManagementFacet is IStaticFunctionSelectors, ERC3643Management { - function getStaticResolverKey() external pure override returns (bytes32 staticResolverKey_) { - staticResolverKey_ = _ERC3643_MANAGEMENT_RESOLVER_KEY; - } - +abstract contract ERC3643ManagementFacetBase is IStaticFunctionSelectors, ERC3643Management { function getStaticFunctionSelectors() external pure override returns (bytes4[] memory staticFunctionSelectors_) { staticFunctionSelectors_ = new bytes4[](9); uint256 selectorsIndex; diff --git a/packages/ats/contracts/contracts/layer_1/ERC3643/ERC3643Operations.sol b/packages/ats/contracts/contracts/layer_1/ERC3643/ERC3643Operations.sol index 78f7512d9..4c33aa83a 100644 --- a/packages/ats/contracts/contracts/layer_1/ERC3643/ERC3643Operations.sol +++ b/packages/ats/contracts/contracts/layer_1/ERC3643/ERC3643Operations.sol @@ -3,9 +3,9 @@ pragma solidity >=0.8.0 <0.9.0; import { _CONTROLLER_ROLE, _ISSUER_ROLE, _AGENT_ROLE } from "../constants/roles.sol"; import { IERC3643Operations } from "../interfaces/ERC3643/IERC3643Operations.sol"; -import { Common } from "../common/Common.sol"; +import { Internals } from "../../layer_0/Internals.sol"; -abstract contract ERC3643Operations is IERC3643Operations, Common { +abstract contract ERC3643Operations is IERC3643Operations, Internals { function burn( address _userAddress, uint256 _amount @@ -29,7 +29,6 @@ abstract contract ERC3643Operations is IERC3643Operations, Common { onlyWithinMaxSupply(_amount) onlyIdentified(address(0), _to) onlyCompliant(address(0), _to, false) - onlyIssuable { { bytes32[] memory roles = new bytes32[](2); diff --git a/packages/ats/contracts/contracts/layer_1/ERC3643/ERC3643OperationsFacet.sol b/packages/ats/contracts/contracts/layer_1/ERC3643/ERC3643OperationsFacetBase.sol similarity index 76% rename from packages/ats/contracts/contracts/layer_1/ERC3643/ERC3643OperationsFacet.sol rename to packages/ats/contracts/contracts/layer_1/ERC3643/ERC3643OperationsFacetBase.sol index aaa227acd..0d87e42dd 100644 --- a/packages/ats/contracts/contracts/layer_1/ERC3643/ERC3643OperationsFacet.sol +++ b/packages/ats/contracts/contracts/layer_1/ERC3643/ERC3643OperationsFacetBase.sol @@ -1,16 +1,11 @@ // SPDX-License-Identifier: Apache-2.0 pragma solidity >=0.8.0 <0.9.0; -import { _ERC3643_OPERATIONS_RESOLVER_KEY } from "../constants/resolverKeys.sol"; import { IERC3643Operations } from "../interfaces/ERC3643/IERC3643Operations.sol"; import { IStaticFunctionSelectors } from "../../interfaces/resolver/resolverProxy/IStaticFunctionSelectors.sol"; import { ERC3643Operations } from "./ERC3643Operations.sol"; -contract ERC3643OperationsFacet is IStaticFunctionSelectors, ERC3643Operations { - function getStaticResolverKey() external pure override returns (bytes32 staticResolverKey_) { - staticResolverKey_ = _ERC3643_OPERATIONS_RESOLVER_KEY; - } - +abstract contract ERC3643OperationsFacetBase is IStaticFunctionSelectors, ERC3643Operations { function getStaticFunctionSelectors() external pure override returns (bytes4[] memory staticFunctionSelectors_) { staticFunctionSelectors_ = new bytes4[](3); uint256 selectorsIndex; diff --git a/packages/ats/contracts/contracts/layer_1/ERC3643/ERC3643Read.sol b/packages/ats/contracts/contracts/layer_1/ERC3643/ERC3643Read.sol index 4c6ec6b1b..47cd87b71 100644 --- a/packages/ats/contracts/contracts/layer_1/ERC3643/ERC3643Read.sol +++ b/packages/ats/contracts/contracts/layer_1/ERC3643/ERC3643Read.sol @@ -5,9 +5,9 @@ import { _AGENT_ROLE } from "../constants/roles.sol"; import { IERC3643Read } from "../interfaces/ERC3643/IERC3643Read.sol"; import { ICompliance } from "../interfaces/ERC3643/ICompliance.sol"; import { IIdentityRegistry } from "../interfaces/ERC3643/IIdentityRegistry.sol"; -import { Common } from "../common/Common.sol"; +import { Internals } from "../../layer_0/Internals.sol"; -abstract contract ERC3643Read is IERC3643Read, Common { +abstract contract ERC3643Read is IERC3643Read, Internals { function isAgent(address _agent) external view returns (bool) { return _hasRole(_AGENT_ROLE, _agent); } diff --git a/packages/ats/contracts/contracts/layer_1/ERC3643/ERC3643ReadFacet.sol b/packages/ats/contracts/contracts/layer_1/ERC3643/ERC3643ReadFacetBase.sol similarity index 80% rename from packages/ats/contracts/contracts/layer_1/ERC3643/ERC3643ReadFacet.sol rename to packages/ats/contracts/contracts/layer_1/ERC3643/ERC3643ReadFacetBase.sol index 169158b09..864fba01f 100644 --- a/packages/ats/contracts/contracts/layer_1/ERC3643/ERC3643ReadFacet.sol +++ b/packages/ats/contracts/contracts/layer_1/ERC3643/ERC3643ReadFacetBase.sol @@ -1,16 +1,11 @@ // SPDX-License-Identifier: Apache-2.0 pragma solidity >=0.8.0 <0.9.0; -import { _ERC3643_READ_RESOLVER_KEY } from "../constants/resolverKeys.sol"; import { IERC3643Read } from "../interfaces/ERC3643/IERC3643Read.sol"; import { IStaticFunctionSelectors } from "../../interfaces/resolver/resolverProxy/IStaticFunctionSelectors.sol"; import { ERC3643Read } from "./ERC3643Read.sol"; -contract ERC3643ReadFacet is IStaticFunctionSelectors, ERC3643Read { - function getStaticResolverKey() external pure override returns (bytes32 staticResolverKey_) { - staticResolverKey_ = _ERC3643_READ_RESOLVER_KEY; - } - +abstract contract ERC3643ReadFacetBase is IStaticFunctionSelectors, ERC3643Read { function getStaticFunctionSelectors() external pure override returns (bytes4[] memory staticFunctionSelectors_) { staticFunctionSelectors_ = new bytes4[](6); uint256 selectorsIndex; diff --git a/packages/ats/contracts/contracts/layer_1/ERC3643/fixedRate/ERC3643BatchFixedRateFacet.sol b/packages/ats/contracts/contracts/layer_1/ERC3643/fixedRate/ERC3643BatchFixedRateFacet.sol new file mode 100644 index 000000000..a19cf91cf --- /dev/null +++ b/packages/ats/contracts/contracts/layer_1/ERC3643/fixedRate/ERC3643BatchFixedRateFacet.sol @@ -0,0 +1,12 @@ +// SPDX-License-Identifier: Apache-2.0 +pragma solidity >=0.8.0 <0.9.0; + +import { _ERC3643_BATCH_FIXED_RATE_RESOLVER_KEY } from "../../constants/resolverKeys.sol"; +import { ERC3643BatchFacetBase } from "../ERC3643BatchFacetBase.sol"; +import { CommonFixedInterestRate } from "../../../layer_0_extensions/bond/fixedInterestRate/Common.sol"; + +contract ERC3643BatchFixedRateFacet is ERC3643BatchFacetBase, CommonFixedInterestRate { + function getStaticResolverKey() external pure override returns (bytes32 staticResolverKey_) { + staticResolverKey_ = _ERC3643_BATCH_FIXED_RATE_RESOLVER_KEY; + } +} diff --git a/packages/ats/contracts/contracts/layer_1/ERC3643/fixedRate/ERC3643ManagementFixedRateFacet.sol b/packages/ats/contracts/contracts/layer_1/ERC3643/fixedRate/ERC3643ManagementFixedRateFacet.sol new file mode 100644 index 000000000..344091d48 --- /dev/null +++ b/packages/ats/contracts/contracts/layer_1/ERC3643/fixedRate/ERC3643ManagementFixedRateFacet.sol @@ -0,0 +1,12 @@ +// SPDX-License-Identifier: Apache-2.0 +pragma solidity >=0.8.0 <0.9.0; + +import { _ERC3643_MANAGEMENT_FIXED_RATE_RESOLVER_KEY } from "../../constants/resolverKeys.sol"; +import { ERC3643ManagementFacetBase } from "../ERC3643ManagementFacetBase.sol"; +import { CommonFixedInterestRate } from "../../../layer_0_extensions/bond/fixedInterestRate/Common.sol"; + +contract ERC3643ManagementFixedRateFacet is ERC3643ManagementFacetBase, CommonFixedInterestRate { + function getStaticResolverKey() external pure override returns (bytes32 staticResolverKey_) { + staticResolverKey_ = _ERC3643_MANAGEMENT_FIXED_RATE_RESOLVER_KEY; + } +} diff --git a/packages/ats/contracts/contracts/layer_1/ERC3643/fixedRate/ERC3643OperationsFixedRateFacet.sol b/packages/ats/contracts/contracts/layer_1/ERC3643/fixedRate/ERC3643OperationsFixedRateFacet.sol new file mode 100644 index 000000000..dfe47e5f5 --- /dev/null +++ b/packages/ats/contracts/contracts/layer_1/ERC3643/fixedRate/ERC3643OperationsFixedRateFacet.sol @@ -0,0 +1,12 @@ +// SPDX-License-Identifier: Apache-2.0 +pragma solidity >=0.8.0 <0.9.0; + +import { _ERC3643_OPERATIONS_FIXED_RATE_RESOLVER_KEY } from "../../constants/resolverKeys.sol"; +import { ERC3643OperationsFacetBase } from "../ERC3643OperationsFacetBase.sol"; +import { CommonFixedInterestRate } from "../../../layer_0_extensions/bond/fixedInterestRate/Common.sol"; + +contract ERC3643OperationsFixedRateFacet is ERC3643OperationsFacetBase, CommonFixedInterestRate { + function getStaticResolverKey() external pure override returns (bytes32 staticResolverKey_) { + staticResolverKey_ = _ERC3643_OPERATIONS_FIXED_RATE_RESOLVER_KEY; + } +} diff --git a/packages/ats/contracts/contracts/layer_1/ERC3643/fixedRate/ERC3643ReadFixedRateFacet.sol b/packages/ats/contracts/contracts/layer_1/ERC3643/fixedRate/ERC3643ReadFixedRateFacet.sol new file mode 100644 index 000000000..c89dd7089 --- /dev/null +++ b/packages/ats/contracts/contracts/layer_1/ERC3643/fixedRate/ERC3643ReadFixedRateFacet.sol @@ -0,0 +1,12 @@ +// SPDX-License-Identifier: Apache-2.0 +pragma solidity >=0.8.0 <0.9.0; + +import { _ERC3643_READ_FIXED_RATE_RESOLVER_KEY } from "../../constants/resolverKeys.sol"; +import { ERC3643ReadFacetBase } from "../ERC3643ReadFacetBase.sol"; +import { CommonFixedInterestRate } from "../../../layer_0_extensions/bond/fixedInterestRate/Common.sol"; + +contract ERC3643ReadFixedRateFacet is ERC3643ReadFacetBase, CommonFixedInterestRate { + function getStaticResolverKey() external pure override returns (bytes32 staticResolverKey_) { + staticResolverKey_ = _ERC3643_READ_FIXED_RATE_RESOLVER_KEY; + } +} diff --git a/packages/ats/contracts/contracts/layer_1/ERC3643/kpiLinkedRate/ERC3643BatchKpiLinkedRateFacet.sol b/packages/ats/contracts/contracts/layer_1/ERC3643/kpiLinkedRate/ERC3643BatchKpiLinkedRateFacet.sol new file mode 100644 index 000000000..62b024462 --- /dev/null +++ b/packages/ats/contracts/contracts/layer_1/ERC3643/kpiLinkedRate/ERC3643BatchKpiLinkedRateFacet.sol @@ -0,0 +1,14 @@ +// SPDX-License-Identifier: Apache-2.0 +pragma solidity >=0.8.0 <0.9.0; + +import { _ERC3643_BATCH_KPI_LINKED_RATE_RESOLVER_KEY } from "../../constants/resolverKeys.sol"; +import { ERC3643BatchFacetBase } from "../ERC3643BatchFacetBase.sol"; +import { + CommonKpiLinkedInterestRate +} from "../../../layer_0_extensions/bond/fixingDateInterestRate/kpiInterestRate/kpiLinkedInterestRate/Common.sol"; + +contract ERC3643BatchKpiLinkedRateFacet is ERC3643BatchFacetBase, CommonKpiLinkedInterestRate { + function getStaticResolverKey() external pure override returns (bytes32 staticResolverKey_) { + staticResolverKey_ = _ERC3643_BATCH_KPI_LINKED_RATE_RESOLVER_KEY; + } +} diff --git a/packages/ats/contracts/contracts/layer_1/ERC3643/kpiLinkedRate/ERC3643ManagementKpiLinkedRateFacet.sol b/packages/ats/contracts/contracts/layer_1/ERC3643/kpiLinkedRate/ERC3643ManagementKpiLinkedRateFacet.sol new file mode 100644 index 000000000..04ab25619 --- /dev/null +++ b/packages/ats/contracts/contracts/layer_1/ERC3643/kpiLinkedRate/ERC3643ManagementKpiLinkedRateFacet.sol @@ -0,0 +1,14 @@ +// SPDX-License-Identifier: Apache-2.0 +pragma solidity >=0.8.0 <0.9.0; + +import { _ERC3643_MANAGEMENT_KPI_LINKED_RATE_RESOLVER_KEY } from "../../constants/resolverKeys.sol"; +import { ERC3643ManagementFacetBase } from "../ERC3643ManagementFacetBase.sol"; +import { + CommonKpiLinkedInterestRate +} from "../../../layer_0_extensions/bond/fixingDateInterestRate/kpiInterestRate/kpiLinkedInterestRate/Common.sol"; + +contract ERC3643ManagementKpiLinkedRateFacet is ERC3643ManagementFacetBase, CommonKpiLinkedInterestRate { + function getStaticResolverKey() external pure override returns (bytes32 staticResolverKey_) { + staticResolverKey_ = _ERC3643_MANAGEMENT_KPI_LINKED_RATE_RESOLVER_KEY; + } +} diff --git a/packages/ats/contracts/contracts/layer_1/ERC3643/kpiLinkedRate/ERC3643OperationsKpiLinkedRateFacet.sol b/packages/ats/contracts/contracts/layer_1/ERC3643/kpiLinkedRate/ERC3643OperationsKpiLinkedRateFacet.sol new file mode 100644 index 000000000..8a873180f --- /dev/null +++ b/packages/ats/contracts/contracts/layer_1/ERC3643/kpiLinkedRate/ERC3643OperationsKpiLinkedRateFacet.sol @@ -0,0 +1,14 @@ +// SPDX-License-Identifier: Apache-2.0 +pragma solidity >=0.8.0 <0.9.0; + +import { _ERC3643_OPERATIONS_KPI_LINKED_RATE_RESOLVER_KEY } from "../../constants/resolverKeys.sol"; +import { ERC3643OperationsFacetBase } from "../ERC3643OperationsFacetBase.sol"; +import { + CommonKpiLinkedInterestRate +} from "../../../layer_0_extensions/bond/fixingDateInterestRate/kpiInterestRate/kpiLinkedInterestRate/Common.sol"; + +contract ERC3643OperationsKpiLinkedRateFacet is ERC3643OperationsFacetBase, CommonKpiLinkedInterestRate { + function getStaticResolverKey() external pure override returns (bytes32 staticResolverKey_) { + staticResolverKey_ = _ERC3643_OPERATIONS_KPI_LINKED_RATE_RESOLVER_KEY; + } +} diff --git a/packages/ats/contracts/contracts/layer_1/ERC3643/kpiLinkedRate/ERC3643ReadKpiLinkedRateFacet.sol b/packages/ats/contracts/contracts/layer_1/ERC3643/kpiLinkedRate/ERC3643ReadKpiLinkedRateFacet.sol new file mode 100644 index 000000000..f71c4a59f --- /dev/null +++ b/packages/ats/contracts/contracts/layer_1/ERC3643/kpiLinkedRate/ERC3643ReadKpiLinkedRateFacet.sol @@ -0,0 +1,14 @@ +// SPDX-License-Identifier: Apache-2.0 +pragma solidity >=0.8.0 <0.9.0; + +import { _ERC3643_READ_KPI_LINKED_RATE_RESOLVER_KEY } from "../../constants/resolverKeys.sol"; +import { ERC3643ReadFacetBase } from "../ERC3643ReadFacetBase.sol"; +import { + CommonKpiLinkedInterestRate +} from "../../../layer_0_extensions/bond/fixingDateInterestRate/kpiInterestRate/kpiLinkedInterestRate/Common.sol"; + +contract ERC3643ReadKpiLinkedRateFacet is ERC3643ReadFacetBase, CommonKpiLinkedInterestRate { + function getStaticResolverKey() external pure override returns (bytes32 staticResolverKey_) { + staticResolverKey_ = _ERC3643_READ_KPI_LINKED_RATE_RESOLVER_KEY; + } +} diff --git a/packages/ats/contracts/contracts/layer_1/ERC3643/standard/ERC3643BatchFacet.sol b/packages/ats/contracts/contracts/layer_1/ERC3643/standard/ERC3643BatchFacet.sol new file mode 100644 index 000000000..2dad6df85 --- /dev/null +++ b/packages/ats/contracts/contracts/layer_1/ERC3643/standard/ERC3643BatchFacet.sol @@ -0,0 +1,12 @@ +// SPDX-License-Identifier: Apache-2.0 +pragma solidity >=0.8.0 <0.9.0; + +import { _ERC3643_BATCH_RESOLVER_KEY } from "../../constants/resolverKeys.sol"; +import { ERC3643BatchFacetBase } from "../ERC3643BatchFacetBase.sol"; +import { Common } from "../../../layer_0/common/Common.sol"; + +contract ERC3643BatchFacet is ERC3643BatchFacetBase, Common { + function getStaticResolverKey() external pure override returns (bytes32 staticResolverKey_) { + staticResolverKey_ = _ERC3643_BATCH_RESOLVER_KEY; + } +} diff --git a/packages/ats/contracts/contracts/layer_1/ERC3643/standard/ERC3643ManagementFacet.sol b/packages/ats/contracts/contracts/layer_1/ERC3643/standard/ERC3643ManagementFacet.sol new file mode 100644 index 000000000..7286310ce --- /dev/null +++ b/packages/ats/contracts/contracts/layer_1/ERC3643/standard/ERC3643ManagementFacet.sol @@ -0,0 +1,12 @@ +// SPDX-License-Identifier: Apache-2.0 +pragma solidity >=0.8.0 <0.9.0; + +import { _ERC3643_MANAGEMENT_RESOLVER_KEY } from "../../constants/resolverKeys.sol"; +import { ERC3643ManagementFacetBase } from "../ERC3643ManagementFacetBase.sol"; +import { Common } from "../../../layer_0/common/Common.sol"; + +contract ERC3643ManagementFacet is ERC3643ManagementFacetBase, Common { + function getStaticResolverKey() external pure override returns (bytes32 staticResolverKey_) { + staticResolverKey_ = _ERC3643_MANAGEMENT_RESOLVER_KEY; + } +} diff --git a/packages/ats/contracts/contracts/layer_1/ERC3643/standard/ERC3643OperationsFacet.sol b/packages/ats/contracts/contracts/layer_1/ERC3643/standard/ERC3643OperationsFacet.sol new file mode 100644 index 000000000..0363f256d --- /dev/null +++ b/packages/ats/contracts/contracts/layer_1/ERC3643/standard/ERC3643OperationsFacet.sol @@ -0,0 +1,12 @@ +// SPDX-License-Identifier: Apache-2.0 +pragma solidity >=0.8.0 <0.9.0; + +import { _ERC3643_OPERATIONS_RESOLVER_KEY } from "../../constants/resolverKeys.sol"; +import { ERC3643OperationsFacetBase } from "../ERC3643OperationsFacetBase.sol"; +import { Common } from "../../../layer_0/common/Common.sol"; + +contract ERC3643OperationsFacet is ERC3643OperationsFacetBase, Common { + function getStaticResolverKey() external pure override returns (bytes32 staticResolverKey_) { + staticResolverKey_ = _ERC3643_OPERATIONS_RESOLVER_KEY; + } +} diff --git a/packages/ats/contracts/contracts/layer_1/ERC3643/standard/ERC3643ReadFacet.sol b/packages/ats/contracts/contracts/layer_1/ERC3643/standard/ERC3643ReadFacet.sol new file mode 100644 index 000000000..95c89c7c7 --- /dev/null +++ b/packages/ats/contracts/contracts/layer_1/ERC3643/standard/ERC3643ReadFacet.sol @@ -0,0 +1,12 @@ +// SPDX-License-Identifier: Apache-2.0 +pragma solidity >=0.8.0 <0.9.0; + +import { _ERC3643_READ_RESOLVER_KEY } from "../../constants/resolverKeys.sol"; +import { ERC3643ReadFacetBase } from "../ERC3643ReadFacetBase.sol"; +import { Common } from "../../../layer_0/common/Common.sol"; + +contract ERC3643ReadFacet is ERC3643ReadFacetBase, Common { + function getStaticResolverKey() external pure override returns (bytes32 staticResolverKey_) { + staticResolverKey_ = _ERC3643_READ_RESOLVER_KEY; + } +} diff --git a/packages/ats/contracts/contracts/layer_1/ERC3643/sustainabilityPerformanceTargetRate/ERC3643BatchSustainabilityPerformanceTargetRateFacet.sol b/packages/ats/contracts/contracts/layer_1/ERC3643/sustainabilityPerformanceTargetRate/ERC3643BatchSustainabilityPerformanceTargetRateFacet.sol new file mode 100644 index 000000000..aadc2fe7f --- /dev/null +++ b/packages/ats/contracts/contracts/layer_1/ERC3643/sustainabilityPerformanceTargetRate/ERC3643BatchSustainabilityPerformanceTargetRateFacet.sol @@ -0,0 +1,17 @@ +// SPDX-License-Identifier: Apache-2.0 +pragma solidity >=0.8.0 <0.9.0; + +import { _ERC3643_BATCH_SUSTAINABILITY_PERFORMANCE_TARGET_RATE_RESOLVER_KEY } from "../../constants/resolverKeys.sol"; +import { ERC3643BatchFacetBase } from "../ERC3643BatchFacetBase.sol"; +// prettier-ignore +// solhint-disable-next-line max-line-length +import { CommonSustainabilityPerformanceTargetInterestRate } from "../../../layer_0_extensions/bond/fixingDateInterestRate/kpiInterestRate/sustainabilityPerformanceTargetInterestRate/Common.sol"; + +contract ERC3643BatchSustainabilityPerformanceTargetRateFacet is + ERC3643BatchFacetBase, + CommonSustainabilityPerformanceTargetInterestRate +{ + function getStaticResolverKey() external pure override returns (bytes32 staticResolverKey_) { + staticResolverKey_ = _ERC3643_BATCH_SUSTAINABILITY_PERFORMANCE_TARGET_RATE_RESOLVER_KEY; + } +} diff --git a/packages/ats/contracts/contracts/layer_1/ERC3643/sustainabilityPerformanceTargetRate/ERC3643ManagementSustainabilityPerformanceTargetRateFacet.sol b/packages/ats/contracts/contracts/layer_1/ERC3643/sustainabilityPerformanceTargetRate/ERC3643ManagementSustainabilityPerformanceTargetRateFacet.sol new file mode 100644 index 000000000..147598e1e --- /dev/null +++ b/packages/ats/contracts/contracts/layer_1/ERC3643/sustainabilityPerformanceTargetRate/ERC3643ManagementSustainabilityPerformanceTargetRateFacet.sol @@ -0,0 +1,19 @@ +// SPDX-License-Identifier: Apache-2.0 +pragma solidity >=0.8.0 <0.9.0; + +import { + _ERC3643_MANAGEMENT_SUSTAINABILITY_PERFORMANCE_TARGET_RATE_RESOLVER_KEY +} from "../../constants/resolverKeys.sol"; +import { ERC3643ManagementFacetBase } from "../ERC3643ManagementFacetBase.sol"; +// prettier-ignore +// solhint-disable-next-line max-line-length +import { CommonSustainabilityPerformanceTargetInterestRate } from "../../../layer_0_extensions/bond/fixingDateInterestRate/kpiInterestRate/sustainabilityPerformanceTargetInterestRate/Common.sol"; + +contract ERC3643ManagementSustainabilityPerformanceTargetRateFacet is + ERC3643ManagementFacetBase, + CommonSustainabilityPerformanceTargetInterestRate +{ + function getStaticResolverKey() external pure override returns (bytes32 staticResolverKey_) { + staticResolverKey_ = _ERC3643_MANAGEMENT_SUSTAINABILITY_PERFORMANCE_TARGET_RATE_RESOLVER_KEY; + } +} diff --git a/packages/ats/contracts/contracts/layer_1/ERC3643/sustainabilityPerformanceTargetRate/ERC3643OperationsSustainabilityPerformanceTargetRateFacet.sol b/packages/ats/contracts/contracts/layer_1/ERC3643/sustainabilityPerformanceTargetRate/ERC3643OperationsSustainabilityPerformanceTargetRateFacet.sol new file mode 100644 index 000000000..988b83d35 --- /dev/null +++ b/packages/ats/contracts/contracts/layer_1/ERC3643/sustainabilityPerformanceTargetRate/ERC3643OperationsSustainabilityPerformanceTargetRateFacet.sol @@ -0,0 +1,19 @@ +// SPDX-License-Identifier: Apache-2.0 +pragma solidity >=0.8.0 <0.9.0; + +import { + _ERC3643_OPERATIONS_SUSTAINABILITY_PERFORMANCE_TARGET_RATE_RESOLVER_KEY +} from "../../constants/resolverKeys.sol"; +import { ERC3643OperationsFacetBase } from "../ERC3643OperationsFacetBase.sol"; +// prettier-ignore +// solhint-disable-next-line max-line-length +import { CommonSustainabilityPerformanceTargetInterestRate } from "../../../layer_0_extensions/bond/fixingDateInterestRate/kpiInterestRate/sustainabilityPerformanceTargetInterestRate/Common.sol"; + +contract ERC3643OperationsSustainabilityPerformanceTargetRateFacet is + ERC3643OperationsFacetBase, + CommonSustainabilityPerformanceTargetInterestRate +{ + function getStaticResolverKey() external pure override returns (bytes32 staticResolverKey_) { + staticResolverKey_ = _ERC3643_OPERATIONS_SUSTAINABILITY_PERFORMANCE_TARGET_RATE_RESOLVER_KEY; + } +} diff --git a/packages/ats/contracts/contracts/layer_1/ERC3643/sustainabilityPerformanceTargetRate/ERC3643ReadSustainabilityPerformanceTargetRateFacet.sol b/packages/ats/contracts/contracts/layer_1/ERC3643/sustainabilityPerformanceTargetRate/ERC3643ReadSustainabilityPerformanceTargetRateFacet.sol new file mode 100644 index 000000000..8d50b9d03 --- /dev/null +++ b/packages/ats/contracts/contracts/layer_1/ERC3643/sustainabilityPerformanceTargetRate/ERC3643ReadSustainabilityPerformanceTargetRateFacet.sol @@ -0,0 +1,17 @@ +// SPDX-License-Identifier: Apache-2.0 +pragma solidity >=0.8.0 <0.9.0; + +import { _ERC3643_READ_SUSTAINABILITY_PERFORMANCE_TARGET_RATE_RESOLVER_KEY } from "../../constants/resolverKeys.sol"; +import { ERC3643ReadFacetBase } from "../ERC3643ReadFacetBase.sol"; +// prettier-ignore +// solhint-disable-next-line max-line-length +import { CommonSustainabilityPerformanceTargetInterestRate } from "../../../layer_0_extensions/bond/fixingDateInterestRate/kpiInterestRate/sustainabilityPerformanceTargetInterestRate/Common.sol"; + +contract ERC3643ReadSustainabilityPerformanceTargetRateFacet is + ERC3643ReadFacetBase, + CommonSustainabilityPerformanceTargetInterestRate +{ + function getStaticResolverKey() external pure override returns (bytes32 staticResolverKey_) { + staticResolverKey_ = _ERC3643_READ_SUSTAINABILITY_PERFORMANCE_TARGET_RATE_RESOLVER_KEY; + } +} diff --git a/packages/ats/contracts/contracts/layer_1/accessControl/AccessControl.sol b/packages/ats/contracts/contracts/layer_1/accessControl/AccessControl.sol index 43836b7e9..6efb57873 100644 --- a/packages/ats/contracts/contracts/layer_1/accessControl/AccessControl.sol +++ b/packages/ats/contracts/contracts/layer_1/accessControl/AccessControl.sol @@ -2,9 +2,9 @@ pragma solidity >=0.8.0 <0.9.0; import { IAccessControl } from "../interfaces/accessControl/IAccessControl.sol"; -import { Common } from "../common/Common.sol"; +import { Internals } from "contracts/layer_0/Internals.sol"; -abstract contract AccessControl is IAccessControl, Common { +abstract contract AccessControl is IAccessControl, Internals { function grantRole( bytes32 _role, address _account diff --git a/packages/ats/contracts/contracts/layer_1/accessControl/AccessControlFacet.sol b/packages/ats/contracts/contracts/layer_1/accessControl/AccessControlFacetBase.sol similarity index 82% rename from packages/ats/contracts/contracts/layer_1/accessControl/AccessControlFacet.sol rename to packages/ats/contracts/contracts/layer_1/accessControl/AccessControlFacetBase.sol index ddae00f89..36d217c26 100644 --- a/packages/ats/contracts/contracts/layer_1/accessControl/AccessControlFacet.sol +++ b/packages/ats/contracts/contracts/layer_1/accessControl/AccessControlFacetBase.sol @@ -3,14 +3,9 @@ pragma solidity >=0.8.0 <0.9.0; import { IAccessControl } from "../interfaces/accessControl/IAccessControl.sol"; import { AccessControl } from "./AccessControl.sol"; -import { _ACCESS_CONTROL_RESOLVER_KEY } from "../constants/resolverKeys.sol"; import { IStaticFunctionSelectors } from "../../interfaces/resolver/resolverProxy/IStaticFunctionSelectors.sol"; -contract AccessControlFacet is AccessControl, IStaticFunctionSelectors { - function getStaticResolverKey() external pure override returns (bytes32 staticResolverKey_) { - staticResolverKey_ = _ACCESS_CONTROL_RESOLVER_KEY; - } - +abstract contract AccessControlFacetBase is AccessControl, IStaticFunctionSelectors { function getStaticFunctionSelectors() external pure override returns (bytes4[] memory staticFunctionSelectors_) { uint256 selectorIndex; staticFunctionSelectors_ = new bytes4[](9); diff --git a/packages/ats/contracts/contracts/layer_1/accessControl/fixedRate/AccessControlFixedRateFacet.sol b/packages/ats/contracts/contracts/layer_1/accessControl/fixedRate/AccessControlFixedRateFacet.sol new file mode 100644 index 000000000..ff8bcfbb8 --- /dev/null +++ b/packages/ats/contracts/contracts/layer_1/accessControl/fixedRate/AccessControlFixedRateFacet.sol @@ -0,0 +1,12 @@ +// SPDX-License-Identifier: Apache-2.0 +pragma solidity >=0.8.0 <0.9.0; + +import { AccessControlFacetBase } from "../AccessControlFacetBase.sol"; +import { _ACCESS_CONTROL_FIXED_RATE_RESOLVER_KEY } from "contracts/layer_1/constants/resolverKeys.sol"; +import { CommonFixedInterestRate } from "contracts/layer_0_extensions/bond/fixedInterestRate/Common.sol"; + +contract AccessControlFixedRateFacet is AccessControlFacetBase, CommonFixedInterestRate { + function getStaticResolverKey() external pure override returns (bytes32 staticResolverKey_) { + staticResolverKey_ = _ACCESS_CONTROL_FIXED_RATE_RESOLVER_KEY; + } +} diff --git a/packages/ats/contracts/contracts/layer_1/accessControl/kpiLinkedRate/AccessControlKpiLinkedRateFacet.sol b/packages/ats/contracts/contracts/layer_1/accessControl/kpiLinkedRate/AccessControlKpiLinkedRateFacet.sol new file mode 100644 index 000000000..2242afac9 --- /dev/null +++ b/packages/ats/contracts/contracts/layer_1/accessControl/kpiLinkedRate/AccessControlKpiLinkedRateFacet.sol @@ -0,0 +1,14 @@ +// SPDX-License-Identifier: Apache-2.0 +pragma solidity >=0.8.0 <0.9.0; + +import { AccessControlFacetBase } from "../AccessControlFacetBase.sol"; +import { _ACCESS_CONTROL_KPI_LINKED_RATE_RESOLVER_KEY } from "contracts/layer_1/constants/resolverKeys.sol"; +import { + CommonKpiLinkedInterestRate +} from "contracts/layer_0_extensions/bond/fixingDateInterestRate/kpiInterestRate/kpiLinkedInterestRate/Common.sol"; + +contract AccessControlKpiLinkedRateFacet is AccessControlFacetBase, CommonKpiLinkedInterestRate { + function getStaticResolverKey() external pure override returns (bytes32 staticResolverKey_) { + staticResolverKey_ = _ACCESS_CONTROL_KPI_LINKED_RATE_RESOLVER_KEY; + } +} diff --git a/packages/ats/contracts/contracts/layer_1/accessControl/standard/AccessControlFacet.sol b/packages/ats/contracts/contracts/layer_1/accessControl/standard/AccessControlFacet.sol new file mode 100644 index 000000000..55c4b0af5 --- /dev/null +++ b/packages/ats/contracts/contracts/layer_1/accessControl/standard/AccessControlFacet.sol @@ -0,0 +1,12 @@ +// SPDX-License-Identifier: Apache-2.0 +pragma solidity >=0.8.0 <0.9.0; + +import { AccessControlFacetBase } from "../AccessControlFacetBase.sol"; +import { _ACCESS_CONTROL_RESOLVER_KEY } from "contracts/layer_1/constants/resolverKeys.sol"; +import { Common } from "contracts/layer_0/common/Common.sol"; + +contract AccessControlFacet is AccessControlFacetBase, Common { + function getStaticResolverKey() external pure override returns (bytes32 staticResolverKey_) { + staticResolverKey_ = _ACCESS_CONTROL_RESOLVER_KEY; + } +} diff --git a/packages/ats/contracts/contracts/layer_1/accessControl/sustainabilityPerformanceTargetRate/AccessControlSustainabilityPerformanceTargetRateFacet.sol b/packages/ats/contracts/contracts/layer_1/accessControl/sustainabilityPerformanceTargetRate/AccessControlSustainabilityPerformanceTargetRateFacet.sol new file mode 100644 index 000000000..7383036cf --- /dev/null +++ b/packages/ats/contracts/contracts/layer_1/accessControl/sustainabilityPerformanceTargetRate/AccessControlSustainabilityPerformanceTargetRateFacet.sol @@ -0,0 +1,19 @@ +// SPDX-License-Identifier: Apache-2.0 +pragma solidity >=0.8.0 <0.9.0; + +import { AccessControlFacetBase } from "../AccessControlFacetBase.sol"; +import { + _ACCESS_CONTROL_SUSTAINABILITY_PERFORMANCE_TARGET_RATE_RESOLVER_KEY +} from "contracts/layer_1/constants/resolverKeys.sol"; +// prettier-ignore +// solhint-disable-next-line max-line-length +import { CommonSustainabilityPerformanceTargetInterestRate } from "contracts/layer_0_extensions/bond/fixingDateInterestRate/kpiInterestRate/sustainabilityPerformanceTargetInterestRate/Common.sol"; + +contract AccessControlSustainabilityPerformanceTargetRateFacet is + AccessControlFacetBase, + CommonSustainabilityPerformanceTargetInterestRate +{ + function getStaticResolverKey() external pure override returns (bytes32 staticResolverKey_) { + staticResolverKey_ = _ACCESS_CONTROL_SUSTAINABILITY_PERFORMANCE_TARGET_RATE_RESOLVER_KEY; + } +} diff --git a/packages/ats/contracts/contracts/layer_1/cap/Cap.sol b/packages/ats/contracts/contracts/layer_1/cap/Cap.sol index e3ff7fa45..5384de020 100644 --- a/packages/ats/contracts/contracts/layer_1/cap/Cap.sol +++ b/packages/ats/contracts/contracts/layer_1/cap/Cap.sol @@ -1,25 +1,17 @@ // SPDX-License-Identifier: Apache-2.0 pragma solidity >=0.8.0 <0.9.0; -import { ICap } from "../interfaces/cap/ICap.sol"; +import { ICap } from "contracts/layer_1/interfaces/cap/ICap.sol"; import { _CAP_ROLE } from "../constants/roles.sol"; -import { Common } from "../common/Common.sol"; +import { Internals } from "../../layer_0/Internals.sol"; -abstract contract Cap is ICap, Common { +abstract contract Cap is ICap, Internals { // solhint-disable-next-line func-name-mixedcase function initialize_Cap( uint256 maxSupply, PartitionCap[] calldata partitionCap - ) external override onlyUninitialized(_capStorage().initialized) onlyValidNewMaxSupply(maxSupply) { - CapDataStorage storage capStorage = _capStorage(); - - capStorage.maxSupply = maxSupply; - - for (uint256 i = 0; i < partitionCap.length; i++) { - capStorage.maxSupplyByPartition[partitionCap[i].partition] = partitionCap[i].maxSupply; - } - - capStorage.initialized = true; + ) external override onlyUninitialized(_isCapInitialized()) onlyValidNewMaxSupply(maxSupply) { + _initialize_Cap(maxSupply, partitionCap); } function setMaxSupply( diff --git a/packages/ats/contracts/contracts/layer_1/cap/CapFacet.sol b/packages/ats/contracts/contracts/layer_1/cap/CapFacetBase.sol similarity index 81% rename from packages/ats/contracts/contracts/layer_1/cap/CapFacet.sol rename to packages/ats/contracts/contracts/layer_1/cap/CapFacetBase.sol index 5f3ac4a9a..bab13ecd1 100644 --- a/packages/ats/contracts/contracts/layer_1/cap/CapFacet.sol +++ b/packages/ats/contracts/contracts/layer_1/cap/CapFacetBase.sol @@ -2,15 +2,10 @@ pragma solidity >=0.8.0 <0.9.0; import { ICap } from "../interfaces/cap/ICap.sol"; -import { IStaticFunctionSelectors } from "../../interfaces/resolver/resolverProxy/IStaticFunctionSelectors.sol"; -import { _CAP_RESOLVER_KEY } from "../constants/resolverKeys.sol"; import { Cap } from "./Cap.sol"; +import { IStaticFunctionSelectors } from "../../interfaces/resolver/resolverProxy/IStaticFunctionSelectors.sol"; -contract CapFacet is Cap, IStaticFunctionSelectors { - function getStaticResolverKey() external pure override returns (bytes32 staticResolverKey_) { - staticResolverKey_ = _CAP_RESOLVER_KEY; - } - +abstract contract CapFacetBase is Cap, IStaticFunctionSelectors { function getStaticFunctionSelectors() external pure override returns (bytes4[] memory staticFunctionSelectors_) { uint256 selectorIndex; staticFunctionSelectors_ = new bytes4[](5); diff --git a/packages/ats/contracts/contracts/layer_1/cap/fixedRate/CapFixedRateFacet.sol b/packages/ats/contracts/contracts/layer_1/cap/fixedRate/CapFixedRateFacet.sol new file mode 100644 index 000000000..1a5107179 --- /dev/null +++ b/packages/ats/contracts/contracts/layer_1/cap/fixedRate/CapFixedRateFacet.sol @@ -0,0 +1,12 @@ +// SPDX-License-Identifier: Apache-2.0 +pragma solidity >=0.8.0 <0.9.0; + +import { CapFacetBase } from "../CapFacetBase.sol"; +import { _CAP_FIXED_RATE_RESOLVER_KEY } from "contracts/layer_1/constants/resolverKeys.sol"; +import { CommonFixedInterestRate } from "contracts/layer_0_extensions/bond/fixedInterestRate/Common.sol"; + +contract CapFixedRateFacet is CapFacetBase, CommonFixedInterestRate { + function getStaticResolverKey() external pure override returns (bytes32 staticResolverKey_) { + staticResolverKey_ = _CAP_FIXED_RATE_RESOLVER_KEY; + } +} diff --git a/packages/ats/contracts/contracts/layer_1/cap/kpiLinkedRate/CapKpiLinkedRateFacet.sol b/packages/ats/contracts/contracts/layer_1/cap/kpiLinkedRate/CapKpiLinkedRateFacet.sol new file mode 100644 index 000000000..1385fbf4c --- /dev/null +++ b/packages/ats/contracts/contracts/layer_1/cap/kpiLinkedRate/CapKpiLinkedRateFacet.sol @@ -0,0 +1,14 @@ +// SPDX-License-Identifier: Apache-2.0 +pragma solidity >=0.8.0 <0.9.0; + +import { CapFacetBase } from "../CapFacetBase.sol"; +import { _CAP_KPI_LINKED_RATE_RESOLVER_KEY } from "contracts/layer_1/constants/resolverKeys.sol"; +import { + CommonKpiLinkedInterestRate +} from "contracts/layer_0_extensions/bond/fixingDateInterestRate/kpiInterestRate/kpiLinkedInterestRate/Common.sol"; + +contract CapKpiLinkedRateFacet is CapFacetBase, CommonKpiLinkedInterestRate { + function getStaticResolverKey() external pure override returns (bytes32 staticResolverKey_) { + staticResolverKey_ = _CAP_KPI_LINKED_RATE_RESOLVER_KEY; + } +} diff --git a/packages/ats/contracts/contracts/layer_1/cap/standard/CapFacet.sol b/packages/ats/contracts/contracts/layer_1/cap/standard/CapFacet.sol new file mode 100644 index 000000000..213b835ba --- /dev/null +++ b/packages/ats/contracts/contracts/layer_1/cap/standard/CapFacet.sol @@ -0,0 +1,12 @@ +// SPDX-License-Identifier: Apache-2.0 +pragma solidity >=0.8.0 <0.9.0; + +import { CapFacetBase } from "../CapFacetBase.sol"; +import { _CAP_RESOLVER_KEY } from "contracts/layer_1/constants/resolverKeys.sol"; +import { Common } from "contracts/layer_0/common/Common.sol"; + +contract CapFacet is CapFacetBase, Common { + function getStaticResolverKey() external pure override returns (bytes32 staticResolverKey_) { + staticResolverKey_ = _CAP_RESOLVER_KEY; + } +} diff --git a/packages/ats/contracts/contracts/layer_1/cap/sustainabilityPerformanceTargetRate/CapSustainabilityPerformanceTargetRateFacet.sol b/packages/ats/contracts/contracts/layer_1/cap/sustainabilityPerformanceTargetRate/CapSustainabilityPerformanceTargetRateFacet.sol new file mode 100644 index 000000000..5ddd8b79e --- /dev/null +++ b/packages/ats/contracts/contracts/layer_1/cap/sustainabilityPerformanceTargetRate/CapSustainabilityPerformanceTargetRateFacet.sol @@ -0,0 +1,17 @@ +// SPDX-License-Identifier: Apache-2.0 +pragma solidity >=0.8.0 <0.9.0; + +import { CapFacetBase } from "../CapFacetBase.sol"; +import { _CAP_SUSTAINABILITY_PERFORMANCE_TARGET_RATE_RESOLVER_KEY } from "contracts/layer_1/constants/resolverKeys.sol"; +// prettier-ignore +// solhint-disable-next-line max-line-length +import { CommonSustainabilityPerformanceTargetInterestRate } from "contracts/layer_0_extensions/bond/fixingDateInterestRate/kpiInterestRate/sustainabilityPerformanceTargetInterestRate/Common.sol"; + +contract CapSustainabilityPerformanceTargetRateFacet is + CapFacetBase, + CommonSustainabilityPerformanceTargetInterestRate +{ + function getStaticResolverKey() external pure override returns (bytes32 staticResolverKey_) { + staticResolverKey_ = _CAP_SUSTAINABILITY_PERFORMANCE_TARGET_RATE_RESOLVER_KEY; + } +} diff --git a/packages/ats/contracts/contracts/layer_1/clearing/ClearingActions.sol b/packages/ats/contracts/contracts/layer_1/clearing/ClearingActions.sol index 192e635ab..48ee9cd04 100644 --- a/packages/ats/contracts/contracts/layer_1/clearing/ClearingActions.sol +++ b/packages/ats/contracts/contracts/layer_1/clearing/ClearingActions.sol @@ -1,17 +1,15 @@ // SPDX-License-Identifier: Apache-2.0 pragma solidity >=0.8.0 <0.9.0; -import { Common } from "../common/Common.sol"; +import { Internals } from "contracts/layer_0/Internals.sol"; import { IClearingActions } from "../interfaces/clearing/IClearingActions.sol"; import { IClearing } from "../interfaces/clearing/IClearing.sol"; import { _CLEARING_VALIDATOR_ROLE } from "../constants/roles.sol"; import { _CLEARING_ROLE } from "../constants/roles.sol"; -abstract contract ClearingActions is IClearingActions, Common { - function initializeClearing(bool _clearingActive) external onlyUninitialized(_clearingStorage().initialized) { - IClearing.ClearingDataStorage storage clearingStorage = _clearingStorage(); - clearingStorage.initialized = true; - clearingStorage.activated = _clearingActive; +abstract contract ClearingActions is IClearingActions, Internals { + function initializeClearing(bool _clearingActive) external onlyUninitialized(_isClearingInitialized()) { + _initializeClearing(_clearingActive); } function activateClearing() external onlyRole(_CLEARING_ROLE) onlyUnpaused returns (bool success_) { @@ -35,10 +33,10 @@ abstract contract ClearingActions is IClearingActions, Common { onlyWithValidClearingId(_clearingOperationIdentifier) onlyClearingActivated validateExpirationTimestamp(_clearingOperationIdentifier, false) - returns (bool success_) + returns (bool success_, bytes32 partition_) { bytes memory operationData; - (success_, operationData) = _approveClearingOperationByPartition(_clearingOperationIdentifier); + (success_, operationData, partition_) = _approveClearingOperationByPartition(_clearingOperationIdentifier); emit ClearingOperationApproved( _msgSender(), diff --git a/packages/ats/contracts/contracts/layer_1/clearing/ClearingActionsFacet.sol b/packages/ats/contracts/contracts/layer_1/clearing/ClearingActionsFacetBase.sol similarity index 73% rename from packages/ats/contracts/contracts/layer_1/clearing/ClearingActionsFacet.sol rename to packages/ats/contracts/contracts/layer_1/clearing/ClearingActionsFacetBase.sol index 2f312c071..c975ca7b5 100644 --- a/packages/ats/contracts/contracts/layer_1/clearing/ClearingActionsFacet.sol +++ b/packages/ats/contracts/contracts/layer_1/clearing/ClearingActionsFacetBase.sol @@ -1,16 +1,11 @@ // SPDX-License-Identifier: Apache-2.0 pragma solidity >=0.8.0 <0.9.0; -import { IClearing } from "../interfaces/clearing/IClearing.sol"; -import { IStaticFunctionSelectors } from "../../interfaces/resolver/resolverProxy/IStaticFunctionSelectors.sol"; -import { _CLEARING_ACTIONS_RESOLVER_KEY } from "../constants/resolverKeys.sol"; +import { IClearingActions } from "../interfaces/clearing/IClearingActions.sol"; import { ClearingActions } from "./ClearingActions.sol"; +import { IStaticFunctionSelectors } from "../../interfaces/resolver/resolverProxy/IStaticFunctionSelectors.sol"; -contract ClearingActionsFacet is ClearingActions, IStaticFunctionSelectors { - function getStaticResolverKey() external pure override returns (bytes32 staticResolverKey_) { - staticResolverKey_ = _CLEARING_ACTIONS_RESOLVER_KEY; - } - +abstract contract ClearingActionsFacetBase is ClearingActions, IStaticFunctionSelectors { function getStaticFunctionSelectors() external pure override returns (bytes4[] memory staticFunctionSelectors_) { uint256 selectorIndex; staticFunctionSelectors_ = new bytes4[](7); @@ -26,6 +21,6 @@ contract ClearingActionsFacet is ClearingActions, IStaticFunctionSelectors { function getStaticInterfaceIds() external pure override returns (bytes4[] memory staticInterfaceIds_) { staticInterfaceIds_ = new bytes4[](1); uint256 selectorsIndex; - staticInterfaceIds_[selectorsIndex++] = type(IClearing).interfaceId; + staticInterfaceIds_[selectorsIndex++] = type(IClearingActions).interfaceId; } } diff --git a/packages/ats/contracts/contracts/layer_1/clearing/ClearingHoldCreation.sol b/packages/ats/contracts/contracts/layer_1/clearing/ClearingHoldCreation.sol index aa760daf9..101a4930c 100644 --- a/packages/ats/contracts/contracts/layer_1/clearing/ClearingHoldCreation.sol +++ b/packages/ats/contracts/contracts/layer_1/clearing/ClearingHoldCreation.sol @@ -1,12 +1,12 @@ // SPDX-License-Identifier: Apache-2.0 pragma solidity >=0.8.0 <0.9.0; -import { Common } from "../common/Common.sol"; +import { Internals } from "contracts/layer_0/Internals.sol"; import { IClearingHoldCreation } from "../interfaces/clearing/IClearingHoldCreation.sol"; import { Hold } from "../interfaces/hold/IHold.sol"; import { ThirdPartyType } from "../../layer_0/common/types/ThirdPartyType.sol"; -abstract contract ClearingHoldCreation is IClearingHoldCreation, Common { +abstract contract ClearingHoldCreation is IClearingHoldCreation, Internals { function clearingCreateHoldByPartition( ClearingOperation calldata _clearingOperation, Hold calldata _hold diff --git a/packages/ats/contracts/contracts/layer_1/clearing/ClearingHoldCreationFacet.sol b/packages/ats/contracts/contracts/layer_1/clearing/ClearingHoldCreationFacetBase.sol similarity index 79% rename from packages/ats/contracts/contracts/layer_1/clearing/ClearingHoldCreationFacet.sol rename to packages/ats/contracts/contracts/layer_1/clearing/ClearingHoldCreationFacetBase.sol index 2d65e7f7a..7583e7b5a 100644 --- a/packages/ats/contracts/contracts/layer_1/clearing/ClearingHoldCreationFacet.sol +++ b/packages/ats/contracts/contracts/layer_1/clearing/ClearingHoldCreationFacetBase.sol @@ -2,15 +2,10 @@ pragma solidity >=0.8.0 <0.9.0; import { IClearingHoldCreation } from "../interfaces/clearing/IClearingHoldCreation.sol"; -import { IStaticFunctionSelectors } from "../../interfaces/resolver/resolverProxy/IStaticFunctionSelectors.sol"; -import { _CLEARING_HOLDCREATION_RESOLVER_KEY } from "../constants/resolverKeys.sol"; import { ClearingHoldCreation } from "./ClearingHoldCreation.sol"; +import { IStaticFunctionSelectors } from "../../interfaces/resolver/resolverProxy/IStaticFunctionSelectors.sol"; -contract ClearingHoldCreationFacet is ClearingHoldCreation, IStaticFunctionSelectors { - function getStaticResolverKey() external pure override returns (bytes32 staticResolverKey_) { - staticResolverKey_ = _CLEARING_HOLDCREATION_RESOLVER_KEY; - } - +abstract contract ClearingHoldCreationFacetBase is ClearingHoldCreation, IStaticFunctionSelectors { function getStaticFunctionSelectors() external pure override returns (bytes4[] memory staticFunctionSelectors_) { uint256 selectorIndex; staticFunctionSelectors_ = new bytes4[](5); diff --git a/packages/ats/contracts/contracts/layer_1/clearing/ClearingRead.sol b/packages/ats/contracts/contracts/layer_1/clearing/ClearingRead.sol index 1cc294761..6fcd4f938 100644 --- a/packages/ats/contracts/contracts/layer_1/clearing/ClearingRead.sol +++ b/packages/ats/contracts/contracts/layer_1/clearing/ClearingRead.sol @@ -1,10 +1,10 @@ // SPDX-License-Identifier: Apache-2.0 pragma solidity >=0.8.0 <0.9.0; -import { Common } from "../common/Common.sol"; +import { Internals } from "contracts/layer_0/Internals.sol"; import { IClearingRead } from "../interfaces/clearing/IClearingRead.sol"; -abstract contract ClearingRead is IClearingRead, Common { +abstract contract ClearingRead is IClearingRead, Internals { function getClearedAmountFor(address _tokenHolder) external view returns (uint256 amount_) { return _getClearedAmountForAdjusted(_tokenHolder); } diff --git a/packages/ats/contracts/contracts/layer_1/clearing/ClearingReadFacet.sol b/packages/ats/contracts/contracts/layer_1/clearing/ClearingReadFacetBase.sol similarity index 80% rename from packages/ats/contracts/contracts/layer_1/clearing/ClearingReadFacet.sol rename to packages/ats/contracts/contracts/layer_1/clearing/ClearingReadFacetBase.sol index c880c9c90..461fc2a30 100644 --- a/packages/ats/contracts/contracts/layer_1/clearing/ClearingReadFacet.sol +++ b/packages/ats/contracts/contracts/layer_1/clearing/ClearingReadFacetBase.sol @@ -2,15 +2,10 @@ pragma solidity >=0.8.0 <0.9.0; import { IClearingRead } from "../interfaces/clearing/IClearingRead.sol"; -import { IStaticFunctionSelectors } from "../../interfaces/resolver/resolverProxy/IStaticFunctionSelectors.sol"; -import { _CLEARING_READ_RESOLVER_KEY } from "../constants/resolverKeys.sol"; import { ClearingRead } from "./ClearingRead.sol"; +import { IStaticFunctionSelectors } from "../../interfaces/resolver/resolverProxy/IStaticFunctionSelectors.sol"; -contract ClearingReadFacet is ClearingRead, IStaticFunctionSelectors { - function getStaticResolverKey() external pure override returns (bytes32 staticResolverKey_) { - staticResolverKey_ = _CLEARING_READ_RESOLVER_KEY; - } - +abstract contract ClearingReadFacetBase is ClearingRead, IStaticFunctionSelectors { function getStaticFunctionSelectors() external pure override returns (bytes4[] memory staticFunctionSelectors_) { uint256 selectorIndex; staticFunctionSelectors_ = new bytes4[](5); diff --git a/packages/ats/contracts/contracts/layer_1/clearing/ClearingRedeem.sol b/packages/ats/contracts/contracts/layer_1/clearing/ClearingRedeem.sol index c54b2d468..e4818f197 100644 --- a/packages/ats/contracts/contracts/layer_1/clearing/ClearingRedeem.sol +++ b/packages/ats/contracts/contracts/layer_1/clearing/ClearingRedeem.sol @@ -1,11 +1,11 @@ // SPDX-License-Identifier: Apache-2.0 pragma solidity >=0.8.0 <0.9.0; -import { Common } from "../common/Common.sol"; +import { Internals } from "contracts/layer_0/Internals.sol"; import { IClearingRedeem } from "../interfaces/clearing/IClearingRedeem.sol"; import { ThirdPartyType } from "../../layer_0/common/types/ThirdPartyType.sol"; -abstract contract ClearingRedeem is IClearingRedeem, Common { +abstract contract ClearingRedeem is IClearingRedeem, Internals { function clearingRedeemByPartition( ClearingOperation calldata _clearingOperation, uint256 _amount diff --git a/packages/ats/contracts/contracts/layer_1/clearing/ClearingRedeemFacet.sol b/packages/ats/contracts/contracts/layer_1/clearing/ClearingRedeemFacetBase.sol similarity index 80% rename from packages/ats/contracts/contracts/layer_1/clearing/ClearingRedeemFacet.sol rename to packages/ats/contracts/contracts/layer_1/clearing/ClearingRedeemFacetBase.sol index 427ae5bb3..6f9507abc 100644 --- a/packages/ats/contracts/contracts/layer_1/clearing/ClearingRedeemFacet.sol +++ b/packages/ats/contracts/contracts/layer_1/clearing/ClearingRedeemFacetBase.sol @@ -2,15 +2,10 @@ pragma solidity >=0.8.0 <0.9.0; import { IClearingRedeem } from "../interfaces/clearing/IClearingRedeem.sol"; -import { IStaticFunctionSelectors } from "../../interfaces/resolver/resolverProxy/IStaticFunctionSelectors.sol"; -import { _CLEARING_REDEEM_RESOLVER_KEY } from "../constants/resolverKeys.sol"; import { ClearingRedeem } from "./ClearingRedeem.sol"; +import { IStaticFunctionSelectors } from "../../interfaces/resolver/resolverProxy/IStaticFunctionSelectors.sol"; -contract ClearingRedeemFacet is ClearingRedeem, IStaticFunctionSelectors { - function getStaticResolverKey() external pure override returns (bytes32 staticResolverKey_) { - staticResolverKey_ = _CLEARING_REDEEM_RESOLVER_KEY; - } - +abstract contract ClearingRedeemFacetBase is ClearingRedeem, IStaticFunctionSelectors { function getStaticFunctionSelectors() external pure override returns (bytes4[] memory staticFunctionSelectors_) { uint256 selectorIndex; staticFunctionSelectors_ = new bytes4[](5); diff --git a/packages/ats/contracts/contracts/layer_1/clearing/ClearingTransfer.sol b/packages/ats/contracts/contracts/layer_1/clearing/ClearingTransfer.sol index f7a3c889a..94a17bb74 100644 --- a/packages/ats/contracts/contracts/layer_1/clearing/ClearingTransfer.sol +++ b/packages/ats/contracts/contracts/layer_1/clearing/ClearingTransfer.sol @@ -1,11 +1,11 @@ // SPDX-License-Identifier: Apache-2.0 pragma solidity >=0.8.0 <0.9.0; -import { Common } from "../common/Common.sol"; +import { Internals } from "contracts/layer_0/Internals.sol"; import { IClearingTransfer } from "../interfaces/clearing/IClearingTransfer.sol"; import { ThirdPartyType } from "../../layer_0/common/types/ThirdPartyType.sol"; -abstract contract ClearingTransfer is IClearingTransfer, Common { +abstract contract ClearingTransfer is IClearingTransfer, Internals { function clearingTransferByPartition( ClearingOperation calldata _clearingOperation, uint256 _amount, diff --git a/packages/ats/contracts/contracts/layer_1/clearing/ClearingTransferFacet.sol b/packages/ats/contracts/contracts/layer_1/clearing/ClearingTransferFacetBase.sol similarity index 80% rename from packages/ats/contracts/contracts/layer_1/clearing/ClearingTransferFacet.sol rename to packages/ats/contracts/contracts/layer_1/clearing/ClearingTransferFacetBase.sol index f4caeb3bd..9da40aca9 100644 --- a/packages/ats/contracts/contracts/layer_1/clearing/ClearingTransferFacet.sol +++ b/packages/ats/contracts/contracts/layer_1/clearing/ClearingTransferFacetBase.sol @@ -2,15 +2,10 @@ pragma solidity >=0.8.0 <0.9.0; import { IClearingTransfer } from "../interfaces/clearing/IClearingTransfer.sol"; -import { IStaticFunctionSelectors } from "../../interfaces/resolver/resolverProxy/IStaticFunctionSelectors.sol"; -import { _CLEARING_TRANSFER_RESOLVER_KEY } from "../constants/resolverKeys.sol"; import { ClearingTransfer } from "./ClearingTransfer.sol"; +import { IStaticFunctionSelectors } from "../../interfaces/resolver/resolverProxy/IStaticFunctionSelectors.sol"; -contract ClearingTransferFacet is ClearingTransfer, IStaticFunctionSelectors { - function getStaticResolverKey() external pure override returns (bytes32 staticResolverKey_) { - staticResolverKey_ = _CLEARING_TRANSFER_RESOLVER_KEY; - } - +abstract contract ClearingTransferFacetBase is ClearingTransfer, IStaticFunctionSelectors { function getStaticFunctionSelectors() external pure override returns (bytes4[] memory staticFunctionSelectors_) { uint256 selectorIndex; staticFunctionSelectors_ = new bytes4[](5); diff --git a/packages/ats/contracts/contracts/layer_1/clearing/fixedRate/ClearingActionsFixedRateFacet.sol b/packages/ats/contracts/contracts/layer_1/clearing/fixedRate/ClearingActionsFixedRateFacet.sol new file mode 100644 index 000000000..63d8d5e96 --- /dev/null +++ b/packages/ats/contracts/contracts/layer_1/clearing/fixedRate/ClearingActionsFixedRateFacet.sol @@ -0,0 +1,12 @@ +// SPDX-License-Identifier: Apache-2.0 +pragma solidity >=0.8.0 <0.9.0; + +import { ClearingActionsFacetBase } from "../ClearingActionsFacetBase.sol"; +import { _CLEARING_ACTIONS_FIXED_RATE_RESOLVER_KEY } from "contracts/layer_1/constants/resolverKeys.sol"; +import { CommonFixedInterestRate } from "contracts/layer_0_extensions/bond/fixedInterestRate/Common.sol"; + +contract ClearingActionsFixedRateFacet is ClearingActionsFacetBase, CommonFixedInterestRate { + function getStaticResolverKey() external pure override returns (bytes32 staticResolverKey_) { + staticResolverKey_ = _CLEARING_ACTIONS_FIXED_RATE_RESOLVER_KEY; + } +} diff --git a/packages/ats/contracts/contracts/layer_1/clearing/fixedRate/ClearingHoldCreationFixedRateFacet.sol b/packages/ats/contracts/contracts/layer_1/clearing/fixedRate/ClearingHoldCreationFixedRateFacet.sol new file mode 100644 index 000000000..9c1f1b4d3 --- /dev/null +++ b/packages/ats/contracts/contracts/layer_1/clearing/fixedRate/ClearingHoldCreationFixedRateFacet.sol @@ -0,0 +1,12 @@ +// SPDX-License-Identifier: Apache-2.0 +pragma solidity >=0.8.0 <0.9.0; + +import { ClearingHoldCreationFacetBase } from "../ClearingHoldCreationFacetBase.sol"; +import { _CLEARING_HOLDCREATION_FIXED_RATE_RESOLVER_KEY } from "contracts/layer_1/constants/resolverKeys.sol"; +import { CommonFixedInterestRate } from "contracts/layer_0_extensions/bond/fixedInterestRate/Common.sol"; + +contract ClearingHoldCreationFixedRateFacet is ClearingHoldCreationFacetBase, CommonFixedInterestRate { + function getStaticResolverKey() external pure override returns (bytes32 staticResolverKey_) { + staticResolverKey_ = _CLEARING_HOLDCREATION_FIXED_RATE_RESOLVER_KEY; + } +} diff --git a/packages/ats/contracts/contracts/layer_1/clearing/fixedRate/ClearingReadFixedRateFacet.sol b/packages/ats/contracts/contracts/layer_1/clearing/fixedRate/ClearingReadFixedRateFacet.sol new file mode 100644 index 000000000..55f255497 --- /dev/null +++ b/packages/ats/contracts/contracts/layer_1/clearing/fixedRate/ClearingReadFixedRateFacet.sol @@ -0,0 +1,12 @@ +// SPDX-License-Identifier: Apache-2.0 +pragma solidity >=0.8.0 <0.9.0; + +import { ClearingReadFacetBase } from "../ClearingReadFacetBase.sol"; +import { _CLEARING_READ_FIXED_RATE_RESOLVER_KEY } from "contracts/layer_1/constants/resolverKeys.sol"; +import { CommonFixedInterestRate } from "contracts/layer_0_extensions/bond/fixedInterestRate/Common.sol"; + +contract ClearingReadFixedRateFacet is ClearingReadFacetBase, CommonFixedInterestRate { + function getStaticResolverKey() external pure override returns (bytes32 staticResolverKey_) { + staticResolverKey_ = _CLEARING_READ_FIXED_RATE_RESOLVER_KEY; + } +} diff --git a/packages/ats/contracts/contracts/layer_1/clearing/fixedRate/ClearingRedeemFixedRateFacet.sol b/packages/ats/contracts/contracts/layer_1/clearing/fixedRate/ClearingRedeemFixedRateFacet.sol new file mode 100644 index 000000000..ba3763e30 --- /dev/null +++ b/packages/ats/contracts/contracts/layer_1/clearing/fixedRate/ClearingRedeemFixedRateFacet.sol @@ -0,0 +1,12 @@ +// SPDX-License-Identifier: Apache-2.0 +pragma solidity >=0.8.0 <0.9.0; + +import { ClearingRedeemFacetBase } from "../ClearingRedeemFacetBase.sol"; +import { _CLEARING_REDEEM_FIXED_RATE_RESOLVER_KEY } from "contracts/layer_1/constants/resolverKeys.sol"; +import { CommonFixedInterestRate } from "contracts/layer_0_extensions/bond/fixedInterestRate/Common.sol"; + +contract ClearingRedeemFixedRateFacet is ClearingRedeemFacetBase, CommonFixedInterestRate { + function getStaticResolverKey() external pure override returns (bytes32 staticResolverKey_) { + staticResolverKey_ = _CLEARING_REDEEM_FIXED_RATE_RESOLVER_KEY; + } +} diff --git a/packages/ats/contracts/contracts/layer_1/clearing/fixedRate/ClearingTransferFixedRateFacet.sol b/packages/ats/contracts/contracts/layer_1/clearing/fixedRate/ClearingTransferFixedRateFacet.sol new file mode 100644 index 000000000..d0408c3f2 --- /dev/null +++ b/packages/ats/contracts/contracts/layer_1/clearing/fixedRate/ClearingTransferFixedRateFacet.sol @@ -0,0 +1,12 @@ +// SPDX-License-Identifier: Apache-2.0 +pragma solidity >=0.8.0 <0.9.0; + +import { ClearingTransferFacetBase } from "../ClearingTransferFacetBase.sol"; +import { _CLEARING_TRANSFER_FIXED_RATE_RESOLVER_KEY } from "contracts/layer_1/constants/resolverKeys.sol"; +import { CommonFixedInterestRate } from "contracts/layer_0_extensions/bond/fixedInterestRate/Common.sol"; + +contract ClearingTransferFixedRateFacet is ClearingTransferFacetBase, CommonFixedInterestRate { + function getStaticResolverKey() external pure override returns (bytes32 staticResolverKey_) { + staticResolverKey_ = _CLEARING_TRANSFER_FIXED_RATE_RESOLVER_KEY; + } +} diff --git a/packages/ats/contracts/contracts/layer_1/clearing/kpiLinkedRate/ClearingActionsKpiLinkedRateFacet.sol b/packages/ats/contracts/contracts/layer_1/clearing/kpiLinkedRate/ClearingActionsKpiLinkedRateFacet.sol new file mode 100644 index 000000000..8114ccdb1 --- /dev/null +++ b/packages/ats/contracts/contracts/layer_1/clearing/kpiLinkedRate/ClearingActionsKpiLinkedRateFacet.sol @@ -0,0 +1,14 @@ +// SPDX-License-Identifier: Apache-2.0 +pragma solidity >=0.8.0 <0.9.0; + +import { ClearingActionsFacetBase } from "../ClearingActionsFacetBase.sol"; +import { _CLEARING_ACTIONS_KPI_LINKED_RATE_RESOLVER_KEY } from "contracts/layer_1/constants/resolverKeys.sol"; +import { + CommonKpiLinkedInterestRate +} from "contracts/layer_0_extensions/bond/fixingDateInterestRate/kpiInterestRate/kpiLinkedInterestRate/Common.sol"; + +contract ClearingActionsKpiLinkedRateFacet is ClearingActionsFacetBase, CommonKpiLinkedInterestRate { + function getStaticResolverKey() external pure override returns (bytes32 staticResolverKey_) { + staticResolverKey_ = _CLEARING_ACTIONS_KPI_LINKED_RATE_RESOLVER_KEY; + } +} diff --git a/packages/ats/contracts/contracts/layer_1/clearing/kpiLinkedRate/ClearingHoldCreationKpiLinkedRateFacet.sol b/packages/ats/contracts/contracts/layer_1/clearing/kpiLinkedRate/ClearingHoldCreationKpiLinkedRateFacet.sol new file mode 100644 index 000000000..638e05002 --- /dev/null +++ b/packages/ats/contracts/contracts/layer_1/clearing/kpiLinkedRate/ClearingHoldCreationKpiLinkedRateFacet.sol @@ -0,0 +1,14 @@ +// SPDX-License-Identifier: Apache-2.0 +pragma solidity >=0.8.0 <0.9.0; + +import { ClearingHoldCreationFacetBase } from "../ClearingHoldCreationFacetBase.sol"; +import { _CLEARING_HOLDCREATION_KPI_LINKED_RATE_RESOLVER_KEY } from "contracts/layer_1/constants/resolverKeys.sol"; +import { + CommonKpiLinkedInterestRate +} from "contracts/layer_0_extensions/bond/fixingDateInterestRate/kpiInterestRate/kpiLinkedInterestRate/Common.sol"; + +contract ClearingHoldCreationKpiLinkedRateFacet is ClearingHoldCreationFacetBase, CommonKpiLinkedInterestRate { + function getStaticResolverKey() external pure override returns (bytes32 staticResolverKey_) { + staticResolverKey_ = _CLEARING_HOLDCREATION_KPI_LINKED_RATE_RESOLVER_KEY; + } +} diff --git a/packages/ats/contracts/contracts/layer_1/clearing/kpiLinkedRate/ClearingReadKpiLinkedRateFacet.sol b/packages/ats/contracts/contracts/layer_1/clearing/kpiLinkedRate/ClearingReadKpiLinkedRateFacet.sol new file mode 100644 index 000000000..30c97075d --- /dev/null +++ b/packages/ats/contracts/contracts/layer_1/clearing/kpiLinkedRate/ClearingReadKpiLinkedRateFacet.sol @@ -0,0 +1,14 @@ +// SPDX-License-Identifier: Apache-2.0 +pragma solidity >=0.8.0 <0.9.0; + +import { ClearingReadFacetBase } from "../ClearingReadFacetBase.sol"; +import { _CLEARING_READ_KPI_LINKED_RATE_RESOLVER_KEY } from "contracts/layer_1/constants/resolverKeys.sol"; +import { + CommonKpiLinkedInterestRate +} from "contracts/layer_0_extensions/bond/fixingDateInterestRate/kpiInterestRate/kpiLinkedInterestRate/Common.sol"; + +contract ClearingReadKpiLinkedRateFacet is ClearingReadFacetBase, CommonKpiLinkedInterestRate { + function getStaticResolverKey() external pure override returns (bytes32 staticResolverKey_) { + staticResolverKey_ = _CLEARING_READ_KPI_LINKED_RATE_RESOLVER_KEY; + } +} diff --git a/packages/ats/contracts/contracts/layer_1/clearing/kpiLinkedRate/ClearingRedeemKpiLinkedRateFacet.sol b/packages/ats/contracts/contracts/layer_1/clearing/kpiLinkedRate/ClearingRedeemKpiLinkedRateFacet.sol new file mode 100644 index 000000000..3d97a9ef1 --- /dev/null +++ b/packages/ats/contracts/contracts/layer_1/clearing/kpiLinkedRate/ClearingRedeemKpiLinkedRateFacet.sol @@ -0,0 +1,14 @@ +// SPDX-License-Identifier: Apache-2.0 +pragma solidity >=0.8.0 <0.9.0; + +import { ClearingRedeemFacetBase } from "../ClearingRedeemFacetBase.sol"; +import { _CLEARING_REDEEM_KPI_LINKED_RATE_RESOLVER_KEY } from "contracts/layer_1/constants/resolverKeys.sol"; +import { + CommonKpiLinkedInterestRate +} from "contracts/layer_0_extensions/bond/fixingDateInterestRate/kpiInterestRate/kpiLinkedInterestRate/Common.sol"; + +contract ClearingRedeemKpiLinkedRateFacet is ClearingRedeemFacetBase, CommonKpiLinkedInterestRate { + function getStaticResolverKey() external pure override returns (bytes32 staticResolverKey_) { + staticResolverKey_ = _CLEARING_REDEEM_KPI_LINKED_RATE_RESOLVER_KEY; + } +} diff --git a/packages/ats/contracts/contracts/layer_1/clearing/kpiLinkedRate/ClearingTransferKpiLinkedRateFacet.sol b/packages/ats/contracts/contracts/layer_1/clearing/kpiLinkedRate/ClearingTransferKpiLinkedRateFacet.sol new file mode 100644 index 000000000..4eb0deb3e --- /dev/null +++ b/packages/ats/contracts/contracts/layer_1/clearing/kpiLinkedRate/ClearingTransferKpiLinkedRateFacet.sol @@ -0,0 +1,14 @@ +// SPDX-License-Identifier: Apache-2.0 +pragma solidity >=0.8.0 <0.9.0; + +import { ClearingTransferFacetBase } from "../ClearingTransferFacetBase.sol"; +import { _CLEARING_TRANSFER_KPI_LINKED_RATE_RESOLVER_KEY } from "contracts/layer_1/constants/resolverKeys.sol"; +import { + CommonKpiLinkedInterestRate +} from "contracts/layer_0_extensions/bond/fixingDateInterestRate/kpiInterestRate/kpiLinkedInterestRate/Common.sol"; + +contract ClearingTransferKpiLinkedRateFacet is ClearingTransferFacetBase, CommonKpiLinkedInterestRate { + function getStaticResolverKey() external pure override returns (bytes32 staticResolverKey_) { + staticResolverKey_ = _CLEARING_TRANSFER_KPI_LINKED_RATE_RESOLVER_KEY; + } +} diff --git a/packages/ats/contracts/contracts/layer_1/clearing/standard/ClearingActionsFacet.sol b/packages/ats/contracts/contracts/layer_1/clearing/standard/ClearingActionsFacet.sol new file mode 100644 index 000000000..42666001c --- /dev/null +++ b/packages/ats/contracts/contracts/layer_1/clearing/standard/ClearingActionsFacet.sol @@ -0,0 +1,12 @@ +// SPDX-License-Identifier: Apache-2.0 +pragma solidity >=0.8.0 <0.9.0; + +import { ClearingActionsFacetBase } from "../ClearingActionsFacetBase.sol"; +import { _CLEARING_ACTIONS_RESOLVER_KEY } from "contracts/layer_1/constants/resolverKeys.sol"; +import { Common } from "contracts/layer_0/common/Common.sol"; + +contract ClearingActionsFacet is ClearingActionsFacetBase, Common { + function getStaticResolverKey() external pure override returns (bytes32 staticResolverKey_) { + staticResolverKey_ = _CLEARING_ACTIONS_RESOLVER_KEY; + } +} diff --git a/packages/ats/contracts/contracts/layer_1/clearing/standard/ClearingHoldCreationFacet.sol b/packages/ats/contracts/contracts/layer_1/clearing/standard/ClearingHoldCreationFacet.sol new file mode 100644 index 000000000..0e60ba21a --- /dev/null +++ b/packages/ats/contracts/contracts/layer_1/clearing/standard/ClearingHoldCreationFacet.sol @@ -0,0 +1,12 @@ +// SPDX-License-Identifier: Apache-2.0 +pragma solidity >=0.8.0 <0.9.0; + +import { ClearingHoldCreationFacetBase } from "../ClearingHoldCreationFacetBase.sol"; +import { _CLEARING_HOLDCREATION_RESOLVER_KEY } from "contracts/layer_1/constants/resolverKeys.sol"; +import { Common } from "contracts/layer_0/common/Common.sol"; + +contract ClearingHoldCreationFacet is ClearingHoldCreationFacetBase, Common { + function getStaticResolverKey() external pure override returns (bytes32 staticResolverKey_) { + staticResolverKey_ = _CLEARING_HOLDCREATION_RESOLVER_KEY; + } +} diff --git a/packages/ats/contracts/contracts/layer_1/clearing/standard/ClearingReadFacet.sol b/packages/ats/contracts/contracts/layer_1/clearing/standard/ClearingReadFacet.sol new file mode 100644 index 000000000..fecd4ee8e --- /dev/null +++ b/packages/ats/contracts/contracts/layer_1/clearing/standard/ClearingReadFacet.sol @@ -0,0 +1,12 @@ +// SPDX-License-Identifier: Apache-2.0 +pragma solidity >=0.8.0 <0.9.0; + +import { ClearingReadFacetBase } from "../ClearingReadFacetBase.sol"; +import { _CLEARING_READ_RESOLVER_KEY } from "contracts/layer_1/constants/resolverKeys.sol"; +import { Common } from "contracts/layer_0/common/Common.sol"; + +contract ClearingReadFacet is ClearingReadFacetBase, Common { + function getStaticResolverKey() external pure override returns (bytes32 staticResolverKey_) { + staticResolverKey_ = _CLEARING_READ_RESOLVER_KEY; + } +} diff --git a/packages/ats/contracts/contracts/layer_1/clearing/standard/ClearingRedeemFacet.sol b/packages/ats/contracts/contracts/layer_1/clearing/standard/ClearingRedeemFacet.sol new file mode 100644 index 000000000..1c5888f4c --- /dev/null +++ b/packages/ats/contracts/contracts/layer_1/clearing/standard/ClearingRedeemFacet.sol @@ -0,0 +1,12 @@ +// SPDX-License-Identifier: Apache-2.0 +pragma solidity >=0.8.0 <0.9.0; + +import { ClearingRedeemFacetBase } from "../ClearingRedeemFacetBase.sol"; +import { _CLEARING_REDEEM_RESOLVER_KEY } from "contracts/layer_1/constants/resolverKeys.sol"; +import { Common } from "contracts/layer_0/common/Common.sol"; + +contract ClearingRedeemFacet is ClearingRedeemFacetBase, Common { + function getStaticResolverKey() external pure override returns (bytes32 staticResolverKey_) { + staticResolverKey_ = _CLEARING_REDEEM_RESOLVER_KEY; + } +} diff --git a/packages/ats/contracts/contracts/layer_1/clearing/standard/ClearingTransferFacet.sol b/packages/ats/contracts/contracts/layer_1/clearing/standard/ClearingTransferFacet.sol new file mode 100644 index 000000000..bb95c004e --- /dev/null +++ b/packages/ats/contracts/contracts/layer_1/clearing/standard/ClearingTransferFacet.sol @@ -0,0 +1,12 @@ +// SPDX-License-Identifier: Apache-2.0 +pragma solidity >=0.8.0 <0.9.0; + +import { ClearingTransferFacetBase } from "../ClearingTransferFacetBase.sol"; +import { _CLEARING_TRANSFER_RESOLVER_KEY } from "contracts/layer_1/constants/resolverKeys.sol"; +import { Common } from "contracts/layer_0/common/Common.sol"; + +contract ClearingTransferFacet is ClearingTransferFacetBase, Common { + function getStaticResolverKey() external pure override returns (bytes32 staticResolverKey_) { + staticResolverKey_ = _CLEARING_TRANSFER_RESOLVER_KEY; + } +} diff --git a/packages/ats/contracts/contracts/layer_1/clearing/sustainabilityPerformanceTargetRate/ClearingActionsSustainabilityPerformanceTargetRateFacet.sol b/packages/ats/contracts/contracts/layer_1/clearing/sustainabilityPerformanceTargetRate/ClearingActionsSustainabilityPerformanceTargetRateFacet.sol new file mode 100644 index 000000000..ab3c12955 --- /dev/null +++ b/packages/ats/contracts/contracts/layer_1/clearing/sustainabilityPerformanceTargetRate/ClearingActionsSustainabilityPerformanceTargetRateFacet.sol @@ -0,0 +1,19 @@ +// SPDX-License-Identifier: Apache-2.0 +pragma solidity >=0.8.0 <0.9.0; + +import { ClearingActionsFacetBase } from "../ClearingActionsFacetBase.sol"; +import { + _CLEARING_ACTIONS_SUSTAINABILITY_PERFORMANCE_TARGET_RATE_RESOLVER_KEY +} from "contracts/layer_1/constants/resolverKeys.sol"; +// prettier-ignore +// solhint-disable-next-line max-line-length +import { CommonSustainabilityPerformanceTargetInterestRate } from "contracts/layer_0_extensions/bond/fixingDateInterestRate/kpiInterestRate/sustainabilityPerformanceTargetInterestRate/Common.sol"; + +contract ClearingActionsSustainabilityPerformanceTargetRateFacet is + ClearingActionsFacetBase, + CommonSustainabilityPerformanceTargetInterestRate +{ + function getStaticResolverKey() external pure override returns (bytes32 staticResolverKey_) { + staticResolverKey_ = _CLEARING_ACTIONS_SUSTAINABILITY_PERFORMANCE_TARGET_RATE_RESOLVER_KEY; + } +} diff --git a/packages/ats/contracts/contracts/layer_1/clearing/sustainabilityPerformanceTargetRate/ClearingHoldCreationSustainabilityPerformanceTargetRateFacet.sol b/packages/ats/contracts/contracts/layer_1/clearing/sustainabilityPerformanceTargetRate/ClearingHoldCreationSustainabilityPerformanceTargetRateFacet.sol new file mode 100644 index 000000000..93af94b23 --- /dev/null +++ b/packages/ats/contracts/contracts/layer_1/clearing/sustainabilityPerformanceTargetRate/ClearingHoldCreationSustainabilityPerformanceTargetRateFacet.sol @@ -0,0 +1,19 @@ +// SPDX-License-Identifier: Apache-2.0 +pragma solidity >=0.8.0 <0.9.0; + +import { ClearingHoldCreationFacetBase } from "../ClearingHoldCreationFacetBase.sol"; +import { + _CLEARING_HOLDCREATION_SUSTAINABILITY_PERFORMANCE_TARGET_RATE_RESOLVER_KEY +} from "contracts/layer_1/constants/resolverKeys.sol"; +// prettier-ignore +// solhint-disable-next-line max-line-length +import { CommonSustainabilityPerformanceTargetInterestRate } from "contracts/layer_0_extensions/bond/fixingDateInterestRate/kpiInterestRate/sustainabilityPerformanceTargetInterestRate/Common.sol"; + +contract ClearingHoldCreationSustainabilityPerformanceTargetRateFacet is + ClearingHoldCreationFacetBase, + CommonSustainabilityPerformanceTargetInterestRate +{ + function getStaticResolverKey() external pure override returns (bytes32 staticResolverKey_) { + staticResolverKey_ = _CLEARING_HOLDCREATION_SUSTAINABILITY_PERFORMANCE_TARGET_RATE_RESOLVER_KEY; + } +} diff --git a/packages/ats/contracts/contracts/layer_1/clearing/sustainabilityPerformanceTargetRate/ClearingReadSustainabilityPerformanceTargetRateFacet.sol b/packages/ats/contracts/contracts/layer_1/clearing/sustainabilityPerformanceTargetRate/ClearingReadSustainabilityPerformanceTargetRateFacet.sol new file mode 100644 index 000000000..1147ddfd1 --- /dev/null +++ b/packages/ats/contracts/contracts/layer_1/clearing/sustainabilityPerformanceTargetRate/ClearingReadSustainabilityPerformanceTargetRateFacet.sol @@ -0,0 +1,19 @@ +// SPDX-License-Identifier: Apache-2.0 +pragma solidity >=0.8.0 <0.9.0; + +import { ClearingReadFacetBase } from "../ClearingReadFacetBase.sol"; +import { + _CLEARING_READ_SUSTAINABILITY_PERFORMANCE_TARGET_RATE_RESOLVER_KEY +} from "contracts/layer_1/constants/resolverKeys.sol"; +// prettier-ignore +// solhint-disable-next-line max-line-length +import { CommonSustainabilityPerformanceTargetInterestRate } from "contracts/layer_0_extensions/bond/fixingDateInterestRate/kpiInterestRate/sustainabilityPerformanceTargetInterestRate/Common.sol"; + +contract ClearingReadSustainabilityPerformanceTargetRateFacet is + ClearingReadFacetBase, + CommonSustainabilityPerformanceTargetInterestRate +{ + function getStaticResolverKey() external pure override returns (bytes32 staticResolverKey_) { + staticResolverKey_ = _CLEARING_READ_SUSTAINABILITY_PERFORMANCE_TARGET_RATE_RESOLVER_KEY; + } +} diff --git a/packages/ats/contracts/contracts/layer_1/clearing/sustainabilityPerformanceTargetRate/ClearingRedeemSustainabilityPerformanceTargetRateFacet.sol b/packages/ats/contracts/contracts/layer_1/clearing/sustainabilityPerformanceTargetRate/ClearingRedeemSustainabilityPerformanceTargetRateFacet.sol new file mode 100644 index 000000000..d4897665c --- /dev/null +++ b/packages/ats/contracts/contracts/layer_1/clearing/sustainabilityPerformanceTargetRate/ClearingRedeemSustainabilityPerformanceTargetRateFacet.sol @@ -0,0 +1,19 @@ +// SPDX-License-Identifier: Apache-2.0 +pragma solidity >=0.8.0 <0.9.0; + +import { ClearingRedeemFacetBase } from "../ClearingRedeemFacetBase.sol"; +import { + _CLEARING_REDEEM_SUSTAINABILITY_PERFORMANCE_TARGET_RATE_RESOLVER_KEY +} from "contracts/layer_1/constants/resolverKeys.sol"; +// prettier-ignore +// solhint-disable-next-line max-line-length +import { CommonSustainabilityPerformanceTargetInterestRate } from "contracts/layer_0_extensions/bond/fixingDateInterestRate/kpiInterestRate/sustainabilityPerformanceTargetInterestRate/Common.sol"; + +contract ClearingRedeemSustainabilityPerformanceTargetRateFacet is + ClearingRedeemFacetBase, + CommonSustainabilityPerformanceTargetInterestRate +{ + function getStaticResolverKey() external pure override returns (bytes32 staticResolverKey_) { + staticResolverKey_ = _CLEARING_REDEEM_SUSTAINABILITY_PERFORMANCE_TARGET_RATE_RESOLVER_KEY; + } +} diff --git a/packages/ats/contracts/contracts/layer_1/clearing/sustainabilityPerformanceTargetRate/ClearingTransferSustainabilityPerformanceTargetRateFacet.sol b/packages/ats/contracts/contracts/layer_1/clearing/sustainabilityPerformanceTargetRate/ClearingTransferSustainabilityPerformanceTargetRateFacet.sol new file mode 100644 index 000000000..38c26bafb --- /dev/null +++ b/packages/ats/contracts/contracts/layer_1/clearing/sustainabilityPerformanceTargetRate/ClearingTransferSustainabilityPerformanceTargetRateFacet.sol @@ -0,0 +1,19 @@ +// SPDX-License-Identifier: Apache-2.0 +pragma solidity >=0.8.0 <0.9.0; + +import { ClearingTransferFacetBase } from "../ClearingTransferFacetBase.sol"; +import { + _CLEARING_TRANSFER_SUSTAINABILITY_PERFORMANCE_TARGET_RATE_RESOLVER_KEY +} from "contracts/layer_1/constants/resolverKeys.sol"; +// prettier-ignore +// solhint-disable-next-line max-line-length +import { CommonSustainabilityPerformanceTargetInterestRate } from "contracts/layer_0_extensions/bond/fixingDateInterestRate/kpiInterestRate/sustainabilityPerformanceTargetInterestRate/Common.sol"; + +contract ClearingTransferSustainabilityPerformanceTargetRateFacet is + ClearingTransferFacetBase, + CommonSustainabilityPerformanceTargetInterestRate +{ + function getStaticResolverKey() external pure override returns (bytes32 staticResolverKey_) { + staticResolverKey_ = _CLEARING_TRANSFER_SUSTAINABILITY_PERFORMANCE_TARGET_RATE_RESOLVER_KEY; + } +} diff --git a/packages/ats/contracts/contracts/layer_1/constants/resolverKeys.sol b/packages/ats/contracts/contracts/layer_1/constants/resolverKeys.sol index 483d26cfa..d7ed6eeac 100644 --- a/packages/ats/contracts/contracts/layer_1/constants/resolverKeys.sol +++ b/packages/ats/contracts/contracts/layer_1/constants/resolverKeys.sol @@ -3,49 +3,166 @@ pragma solidity >=0.8.0 <0.9.0; // solhint-disable max-line-length -// keccak256('security.token.standard.accesscontrol.resolverKey'); +// keccak256("security.token.standard.accesscontrol.resolverKey"); bytes32 constant _ACCESS_CONTROL_RESOLVER_KEY = 0x011768a41cb4fe76a26f444eec15d81a0d84e919a36336d72c6539cf41c0fcf6; -// keccak256('security.token.standard.controllist.resolverKey'); +// keccak256("security.token.standard.accesscontrol.fixed.rate.resolverKey"); +bytes32 constant _ACCESS_CONTROL_FIXED_RATE_RESOLVER_KEY = 0xb35ad81b5769c62538fe6a90e40db8be624645f77c1738ce582ede5da399ecb2; + +// keccak256("security.token.standard.accesscontrol.kpilinked.rate.resolverKey"); +bytes32 constant _ACCESS_CONTROL_KPI_LINKED_RATE_RESOLVER_KEY = 0x465c95eea6723a1645e5399789cee702b19d0bcd0ad3f894270aa25488fb4ab9; + +// keccak256("security.token.standard.accesscontrol.SustainabilityPerformanceTarget.rate.resolverKey"); +bytes32 constant _ACCESS_CONTROL_SUSTAINABILITY_PERFORMANCE_TARGET_RATE_RESOLVER_KEY = 0x9d13e61abd630355ccae4279993868d7cf3b04d4368a0fedcefe6fec3fabaa0c; + +// keccak256("security.token.standard.controllist.resolverKey"); bytes32 constant _CONTROL_LIST_RESOLVER_KEY = 0xfbb1491bfcecd95f79409bd5a4b69a4ba1e5573573372f5d2d66c11e3016414c; -// keccak256('security.token.standard.pause.resolverKey'); +// keccak256("security.token.standard.controllist.fixed.rate.resolverKey"); +bytes32 constant _CONTROL_LIST_FIXED_RATE_RESOLVER_KEY = 0x083b7e0957ebd3a0f69bf432ce05d94c1848cbdbf0e66664919c4803b14dfdf8; + +// keccak256("security.token.standard.controllist.kpilinked.rate.resolverKey"); +bytes32 constant _CONTROL_LIST_KPI_LINKED_RATE_RESOLVER_KEY = 0xaaa80b13f9a051b7f9546e92763bedfbe259f511da870cbb1133fe0e79c8eac5; + +// keccak256("security.token.standard.controllist.SustainabilityPerformanceTarget.rate.resolverKey"); +bytes32 constant _CONTROL_LIST_SUSTAINABILITY_PERFORMANCE_TARGET_RATE_RESOLVER_KEY = 0xe3fbab5a4ccf7a873a9601bf5494c43f6e4b53218ff8310ec97811471397b3cf; + +// keccak256("security.token.standard.pause.resolverKey"); bytes32 constant _PAUSE_RESOLVER_KEY = 0x9429fd9ef38f89f41bd9ec33fd5c94b287ed1c27a98938da43835ac761b2f92c; -// keccak256('security.token.standard.cap.resolverKey'); +// keccak256("security.token.standard.cap.resolverKey"); bytes32 constant _CAP_RESOLVER_KEY = 0xfb3f8aac36661b5540c571d821c80dc9db7ede5ca2a4204ee562b3356f0c026b; -// keccak256('security.token.standard.erc20.resolverKey'); +// keccak256("security.token.standard.cap.fixed.rate.resolverKey"); +bytes32 constant _CAP_FIXED_RATE_RESOLVER_KEY = 0x288b5a4b82f38369168fd49de3e5e68c76fc0394c2e89817b70a65368ba4dcf7; + +// keccak256("security.token.standard.cap.kpilinked.rate.resolverKey"); +bytes32 constant _CAP_KPI_LINKED_RATE_RESOLVER_KEY = 0xdc8cc0612bf886bcc1666e31c5de3392bee78451de7213b01fe78d560a804435; + +// keccak256("security.token.standard.cap.SustainabilityPerformanceTarget.rate.resolverKey"); +bytes32 constant _CAP_SUSTAINABILITY_PERFORMANCE_TARGET_RATE_RESOLVER_KEY = 0xa321c5301bbccd760c5aaf08286a67948cb7d49be22c17f12aa163b324a276d0; + +// keccak256("security.token.standard.erc20.resolverKey"); bytes32 constant _ERC20_RESOLVER_KEY = 0x064c883089ba1a596d9146c7aaa73c19ef8825f374c67a9538787c3d12e68dc5; -// keccak256('security.token.standard.erc20votes.resolverKey'); +// keccak256("security.token.standard.erc20.fixed.rate.resolverKey"); +bytes32 constant _ERC20_FIXED_RATE_RESOLVER_KEY = 0x3e4f428a95dadb9b2d5121c4067c845270879ee5e180e4c4d03ad40f00160376; + +// keccak256("security.token.standard.erc20.kpilinked.rate.resolverKey"); +bytes32 constant _ERC20_KPI_LINKED_RATE_RESOLVER_KEY = 0xe4565636726032d04f6d265d3ee61c2f046ea49ecb39f4ca68dd4f65713e9620; + +// keccak256("security.token.standard.erc20.SustainabilityPerformanceTarget.rate.resolverKey"); +bytes32 constant _ERC20_SUSTAINABILITY_PERFORMANCE_TARGET_RATE_RESOLVER_KEY = 0x002a101a46899eecb6af6a76839f76be301e6292a6a5d3eb7a1bae4a0d3574ee; + +// keccak256("security.token.standard.erc20votes.resolverKey"); bytes32 constant _ERC20VOTES_RESOLVER_KEY = 0x5cbfbaa435e19a43530a00ac685c9b5252862a94af2053667ded44642a0d9f4c; -// keccak256('security.token.standard.erc1594.resolverKey'); +// keccak256("security.token.standard.erc20votes.fixed.rate.resolverKey"); +bytes32 constant _ERC20VOTES_FIXED_RATE_RESOLVER_KEY = 0xce2bc140ce5298990432f0332c33ccaa813a89e3bc3c0589eb30eabe005d2742; + +// keccak256("security.token.standard.erc20votes.kpilinked.rate.resolverKey"); +bytes32 constant _ERC20VOTES_KPI_LINKED_RATE_RESOLVER_KEY = 0x9d720cb6c08dff4ea63b2b4f3908fa551321fdc478de6b46a67ba5ecb46f82fc; + +// keccak256("security.token.standard.erc20votes.SustainabilityPerformanceTarget.rate.resolverKey"); +bytes32 constant _ERC20VOTES_SUSTAINABILITY_PERFORMANCE_TARGET_RATE_RESOLVER_KEY = 0x9d7e0002a7ae9c94734d62ac85bb1cd4c333dd6c5fb308a7a2b60dd77dfa9d44; + +// keccak256("security.token.standard.erc1594.resolverKey"); bytes32 constant _ERC1594_RESOLVER_KEY = 0xcb70773e8163595d8bd906e277adeb3935976ad802ee8c29face3dfb0263291f; -// keccak256('security.token.standard.erc20permit.resolverKey'); +// keccak256("security.token.standard.erc1594.fixed.rate.resolverKey"); +bytes32 constant _ERC1594_FIXED_RATE_RESOLVER_KEY = 0x7a8f3e6d2c4b1a9e5f7d8c6b4a2e1f9d7c5b3a1e9f7d5c3b1a9e7f5d3c1b9e7f; + +// keccak256("security.token.standard.erc1594.kpilinked.rate.resolverKey"); +bytes32 constant _ERC1594_KPI_LINKED_RATE_RESOLVER_KEY = 0x1b4e7a9d3f5c2e8a6d4b9f7e5c3a1d8f6e4c2a9d7f5e3c1b8f6d4e2c9a7f5d3e; + +// keccak256("security.token.standard.erc1594.SustainabilityPerformanceTarget.rate.resolverKey"); +bytes32 constant _ERC1594_SUSTAINABILITY_PERFORMANCE_TARGET_RATE_RESOLVER_KEY = 0x2c5f8a3d6e9b1f4c7a2e5d8b1f4c7a2e5d8b1f4c7a2e5d8b1f4c7a2e5d8b1f4c; + +// keccak256("security.token.standard.erc20permit.resolverKey"); bytes32 constant _ERC20PERMIT_RESOLVER_KEY = 0xef05f0313623d32145212ed45620c8b2c8c294b3d6955cf26f3d1b0569fbc1fa; -// keccak256('security.token.standard.erc1643.resolverKey'); +// keccak256("security.token.standard.erc20permit.fixed.rate.resolverKey"); +bytes32 constant _ERC20PERMIT_FIXED_RATE_RESOLVER_KEY = 0xc85b8a95de0375d3b552d368932ecaeb9fe85d470eb1e89bc29040cb35d168a3; + +// keccak256("security.token.standard.erc20permit.kpilinked.rate.resolverKey"); +bytes32 constant _ERC20PERMIT_KPI_LINKED_RATE_RESOLVER_KEY = 0x468437a5a7a128b245fb2c3ac08cf17e5f2a6983dece41309b58fffa1fca80a9; + +// keccak256("security.token.standard.erc20permit.SustainabilityPerformanceTarget.rate.resolverKey"); +bytes32 constant _ERC20PERMIT_SUSTAINABILITY_PERFORMANCE_TARGET_RATE_RESOLVER_KEY = 0x3bf8d35ad3c3320d95184dd4f9a0bfc2e56b151318d9d27eefa74461d24f5c61; + +// keccak256("security.token.standard.erc1643.resolverKey"); bytes32 constant _ERC1643_RESOLVER_KEY = 0x24543637956a3076689f171d3932b10f22d40f3785d53acebb340f37bed01625; -// keccak256('security.token.standard.erc1410.read.resolverKey'); +// keccak256("security.token.standard.erc1643.fixed.rate.resolverKey"); +bytes32 constant _ERC1643_FIXED_RATE_RESOLVER_KEY = 0x3d6e9f1c5a8b2e7f4d9c6a3e1f8d5c2a9f6e3d1c8f5e2d9c6f3e1d8c5f2d9c6f; + +// keccak256("security.token.standard.erc1643.kpilinked.rate.resolverKey"); +bytes32 constant _ERC1643_KPI_LINKED_RATE_RESOLVER_KEY = 0x4e7f1a2d5c8e3f6a9d2e5f8c1d4a7e2f5c8d1e4f7c2e5d8f1e4c7d2f5e8d1f4e; + +// keccak256("security.token.standard.erc1643.SustainabilityPerformanceTarget.rate.resolverKey"); +bytes32 constant _ERC1643_SUSTAINABILITY_PERFORMANCE_TARGET_RATE_RESOLVER_KEY = 0x5f8d2a3e6c9f1d4e7a2f5c8d1e4f7c2e5d8f1e4c7d2f5e8d1f4c7e2d5f8d1f4c; + +// keccak256("security.token.standard.erc1410.read.resolverKey"); bytes32 constant _ERC1410_READ_RESOLVER_KEY = 0x5eb2734b83ea80c3eb63463a6192b30ab2526cb7a073f0abfda1a404c92ae497; -// keccak256('security.token.standard.erc1410.tokenHolder.resolverKey'); +// keccak256("security.token.standard.erc1410.read.fixed.rate.resolverKey"); +bytes32 constant _ERC1410_READ_FIXED_RATE_RESOLVER_KEY = 0x289451d28da5d8ff4e7759db6b1c418b7871f0d6ad63bf7f75cd411f3d79686d; + +// keccak256("security.token.standard.erc1410.read.kpilinked.rate.resolverKey"); +bytes32 constant _ERC1410_READ_KPI_LINKED_RATE_RESOLVER_KEY = 0x696d9b2b17b535f70254309692c77475c258c27dfa6853bbecc611bc350136cd; + +// keccak256("security.token.standard.erc1410.read.SustainabilityPerformanceTarget.rate.resolverKey"); +bytes32 constant _ERC1410_READ_SUSTAINABILITY_PERFORMANCE_TARGET_RATE_RESOLVER_KEY = 0x7c15e98edcc41b3177b8cfff7055cd57b47000fd843fce22e7ead13f07e346b6; + +// keccak256("security.token.standard.erc1410.tokenHolder.resolverKey"); bytes32 constant _ERC1410_TOKEN_HOLDER_RESOLVER_KEY = 0x0466bf860d23f1ecbc25f364735e0dc3830d236f09182599831730ddd2792caa; -// keccak256('security.token.standard.erc1410.management.resolverKey'); +// keccak256("security.token.standard.erc1410.tokenHolder.fixed.rate.resolverKey"); +bytes32 constant _ERC1410_TOKEN_HOLDER_FIXED_RATE_RESOLVER_KEY = 0xfd248a6ee4af07046520c6ec6f9b61a009db5407ec2f967775040cd67b66f08d; + +// keccak256("security.token.standard.erc1410.tokenHolder.kpilinked.rate.resolverKey"); +bytes32 constant _ERC1410_TOKEN_HOLDER_KPI_LINKED_RATE_RESOLVER_KEY = 0x463e4b758e14b6cdc1dd053ae3df476d527be8131eb3b41c64b4cf8019855237; + +// keccak256("security.token.standard.erc1410.tokenHolder.SustainabilityPerformanceTarget.rate.resolverKey"); +bytes32 constant _ERC1410_TOKEN_HOLDER_SUSTAINABILITY_PERFORMANCE_TARGET_RATE_RESOLVER_KEY = 0x6e21f1ca6d12f08b0d36f08711a48500d02dcf7edd2e8b87e4de350b98df4822; + +// keccak256("security.token.standard.erc1410.management.resolverKey"); bytes32 constant _ERC1410_MANAGEMENT_RESOLVER_KEY = 0x232f8686795d3f197681faf0d8db05655e759f62d709d56b97e5d9cfff29dbf5; -// keccak256('security.token.standard.erc1410.issuer.resolverKey'); +// keccak256("security.token.standard.erc1410.management.fixed.rate.resolverKey"); +bytes32 constant _ERC1410_MANAGEMENT_FIXED_RATE_RESOLVER_KEY = 0xf616851e84bfcfb3b33a8cc54c54c34e9168ba2b8d233a0b3daacee27f0266ca; + +// keccak256("security.token.standard.erc1410.management.kpilinked.rate.resolverKey"); +bytes32 constant _ERC1410_MANAGEMENT_KPI_LINKED_RATE_RESOLVER_KEY = 0x831449a00c9cf218fe471b13f84f7109b57ad4b1202d4ed93009ee3d53276a2f; + +// keccak256("security.token.standard.erc1410.management.SustainabilityPerformanceTarget.rate.resolverKey"); +bytes32 constant _ERC1410_MANAGEMENT_SUSTAINABILITY_PERFORMANCE_TARGET_RATE_RESOLVER_KEY = 0x6768fcc73686ddd306656061b0e415208ded041927d9935de3747583559d0c5e; + +// keccak256("security.token.standard.erc1410.issuer.resolverKey"); bytes32 constant _ERC1410_ISSUER_RESOLVER_KEY = 0x6e82b75f32c9647cc00b4c3eabbef5a82677f3e91d5d196eb4dd6a0365941344; -// keccak256('security.token.standard.erc1644.resolverKey'); +// keccak256("security.token.standard.erc1410.issuer.fixed.rate.resolverKey"); +bytes32 constant _ERC1410_ISSUER_FIXED_RATE_RESOLVER_KEY = 0xb9c76f134ffdac743e817a2726bdf9f28a48dfea1f9f54b1066e4e0de68f2a06; + +// keccak256("security.token.standard.erc1410.issuer.kpilinked.rate.resolverKey"); +bytes32 constant _ERC1410_ISSUER_KPI_LINKED_RATE_RESOLVER_KEY = 0x97246e7c6950bcc047f6ea198308a7f304bca9f3f13d2ce5d7fdeee9cc9e0828; + +// keccak256("security.token.standard.erc1410.issuer.SustainabilityPerformanceTarget.rate.resolverKey"); +bytes32 constant _ERC1410_ISSUER_SUSTAINABILITY_PERFORMANCE_TARGET_RATE_RESOLVER_KEY = 0x4d5a3964d29183253487011c31ec3e09977b5eded43c8a3a222a2e53f4282f61; + +// keccak256("security.token.standard.erc1644.resolverKey"); bytes32 constant _ERC1644_RESOLVER_KEY = 0xf1da2ed271d62ba0b6597874c96fb6ed7d929e5ec679f4ad8c2c516c72f6736d; -// keccak256('security.token.standard.snapshots.resolverKey'); +// keccak256("security.token.standard.erc1644.fixed.rate.resolverKey"); +bytes32 constant _ERC1644_FIXED_RATE_RESOLVER_KEY = 0x6f9e3d1c8a5f2e9d6c3f1e8d5c2f9e6d3f1e8c5f2d9e6c3f1d8e5c2f9d6e3f1d; + +// keccak256("security.token.standard.erc1644.kpilinked.rate.resolverKey"); +bytes32 constant _ERC1644_KPI_LINKED_RATE_RESOLVER_KEY = 0x7a1f4e2d5c8f3e6d9c2f5e8d1f4c7e2d5f8c1f4e7d2e5f8c1e4d7c2f5d8e1f4c; + +// keccak256("security.token.standard.erc1644.SustainabilityPerformanceTarget.rate.resolverKey"); +bytes32 constant _ERC1644_SUSTAINABILITY_PERFORMANCE_TARGET_RATE_RESOLVER_KEY = 0x8b2f5e3d6f9c2e5d8f1e4c7d2e5f8d1f4c7e2d5f8d1f4c7e2d5f8d1f4c7e2d5f; + +// keccak256("security.token.standard.snapshots.resolverKey"); bytes32 constant _SNAPSHOTS_RESOLVER_KEY = 0x9a3fc46d83536ef6b87eb4fec37302bfd1a7c18e81ea2da853b911b44cf5b0cf; // keccak256("security.token.standard.resolver.proxy.resolverKey") @@ -63,6 +180,15 @@ bytes32 constant _DIAMOND_RESOLVER_KEY = 0x1b5212ea37fb29e99afa2812a5d7d7e662a47 // keccak256("security.token.standard.corporateActions.resolverKey") bytes32 constant _CORPORATE_ACTIONS_RESOLVER_KEY = 0x3cc74200ccfb5d585a6d170f8824979dbf1b592e0a41eef41cf6d86cf4882077; +// keccak256("security.token.standard.corporateactions.fixed.rate.resolverKey"); +bytes32 constant _CORPORATE_ACTIONS_FIXED_RATE_RESOLVER_KEY = 0xd2c0415cebdbb6dcaf014ce92df6bcae060743c622fd7ce954105b71954e0424; + +// keccak256("security.token.standard.corporateactions.kpilinked.rate.resolverKey"); +bytes32 constant _CORPORATE_ACTIONS_KPI_LINKED_RATE_RESOLVER_KEY = 0xf86b1190fb42cc572ccdeac774fdf968c303079b8c5eceaeb1c9f4f9089bb6be; + +// keccak256("security.token.standard.corporateactions.SustainabilityPerformanceTarget.rate.resolverKey"); +bytes32 constant _CORPORATE_ACTIONS_SUSTAINABILITY_PERFORMANCE_TARGET_RATE_RESOLVER_KEY = 0xa4a23267cb0a22c52bd05b12e644136bc38b7ac51218a0cb3aed166697caa79e; + // keccak256("security.token.standard.lock.resolverKey") bytes32 constant _LOCK_RESOLVER_KEY = 0xf1364345b3db5ebe5808f2d2d2aaecb9cdb4fddacad1534033060ebc886fc1e9; @@ -72,12 +198,39 @@ bytes32 constant _PROTECTED_PARTITIONS_RESOLVER_KEY = 0x6d65d2938c05a4d952aff084 // keccak256("security.token.standard.hold.tokenHolder.resolverKey") bytes32 constant _HOLD_TOKEN_HOLDER_RESOLVER_KEY = 0x87b17a3ce9a86872f21469d26f005543a22ef5729998559f4ad433d5c4253f3e; +// keccak256("security.token.standard.hold.tokenHolder.fixed.rate.resolverKey") +bytes32 constant _HOLD_TOKEN_HOLDER_FIXED_RATE_RESOLVER_KEY = 0x0d354aad4576c421c121516a105362711db178c6f0d6e0159d68d9f3ebbda486; + +// keccak256("security.token.standard.hold.tokenHolder.kpilinked.rate.resolverKey") +bytes32 constant _HOLD_TOKEN_HOLDER_KPI_LINKED_RATE_RESOLVER_KEY = 0x09f3820ce986997421b684b2482b6d982f31b5ed27a0d72e2aece5ffb3c8fd39; + +// keccak256("security.token.standard.hold.tokenHolder.SustainabilityPerformanceTarget.rate.resolverKey") +bytes32 constant _HOLD_TOKEN_HOLDER_SUSTAINABILITY_PERFORMANCE_TARGET_RATE_RESOLVER_KEY = 0x28ae4d4cdc1846ba348a31e222161d8343223560c1875fe3efcad8c5dd5f81e0; + // keccak256("security.token.standard.hold.management.resolverKey") bytes32 constant _HOLD_MANAGEMENT_RESOLVER_KEY = 0xaab5a0e0978ad146ca8dc61d16bab0212224eadf68bd08e3c66600ee4f59c12a; +// keccak256("security.token.standard.hold.management.fixed.rate.resolverKey") +bytes32 constant _HOLD_MANAGEMENT_FIXED_RATE_RESOLVER_KEY = 0x8e342108c0845c91b05aef6328f881a5a4cb86d47914f75a3fbd3b9219f740d1; + +// keccak256("security.token.standard.hold.management.kpilinked.rate.resolverKey") +bytes32 constant _HOLD_MANAGEMENT_KPI_LINKED_RATE_RESOLVER_KEY = 0x33bc2345a65f03b5ab804f5dc155e7971e7f094f51868fcae940f3a0b2d9a7de; + +// keccak256("security.token.standard.hold.management.SustainabilityPerformanceTarget.rate.resolverKey") +bytes32 constant _HOLD_MANAGEMENT_SUSTAINABILITY_PERFORMANCE_TARGET_RATE_RESOLVER_KEY = 0x0d5970e1c2888cfd8951593b20cf1050f0fd9758475a44e0cbab08aaf7a3a058; + // keccak256("security.token.standard.holdRead.resolverKey") bytes32 constant _HOLD_READ_RESOLVER_KEY = 0xd8a2714462c01975a075ccd4be2588934afd8074afef746fac089b757b803851; +// keccak256("security.token.standard.holdRead.fixed.rate.resolverKey") +bytes32 constant _HOLD_READ_FIXED_RATE_RESOLVER_KEY = 0xcf1b5b7fa2ca417ea3b952a93a6157f237fce01f4944d27160e5101f05335e52; + +// keccak256("security.token.standard.holdRead.kpilinked.rate.resolverKey") +bytes32 constant _HOLD_READ_KPI_LINKED_RATE_RESOLVER_KEY = 0x6b896f9725e5d4f4b5f8cff875e71b5f3284000a933f6ab32c01cdd5f71306d6; + +// keccak256("security.token.standard.holdRead.SustainabilityPerformanceTarget.rate.resolverKey") +bytes32 constant _HOLD_READ_SUSTAINABILITY_PERFORMANCE_TARGET_RATE_RESOLVER_KEY = 0x8e7113391652a4d3d8feb1d90990cd06ee33dc67a640b4400f8bfb9fae4f91b2; + // keccak256("security.token.standard.ssi.management.resolverKey") bytes32 constant _SSI_MANAGEMENT_RESOLVER_KEY = 0x46df6aaf3742e0cbad136a74fb679b686e087dcc3a3d92d1c4ce2f3ef1b508a0; @@ -99,6 +252,51 @@ bytes32 constant _CLEARING_READ_RESOLVER_KEY = 0xebb2e29bdf4edaf4ca66a3f9b773508 // keccak256("security.token.standard.clearing.actions.resolverKey") bytes32 constant _CLEARING_ACTIONS_RESOLVER_KEY = 0x5472dfc5c92ad7a8651518ea7d3854d3b6494e5bcaa19f91cd61bf93bf6f2a74; +// keccak256("security.token.standard.clearing.transfer.fixed.rate.resolverKey"); +bytes32 constant _CLEARING_TRANSFER_FIXED_RATE_RESOLVER_KEY = 0x1ba056fe3e7ef86779515a9e7f364e84af0f60eb5f4175ac6d6e6e3f4c05fffb; + +// keccak256("security.token.standard.clearing.transfer.kpilinked.rate.resolverKey"); +bytes32 constant _CLEARING_TRANSFER_KPI_LINKED_RATE_RESOLVER_KEY = 0x1b229a6d3b8a8ecba97d1e7c2c4a89c4cf71b9b5852317278f57384d728f8bde; + +// keccak256("security.token.standard.clearing.transfer.SustainabilityPerformanceTarget.rate.resolverKey"); +bytes32 constant _CLEARING_TRANSFER_SUSTAINABILITY_PERFORMANCE_TARGET_RATE_RESOLVER_KEY = 0x7e29efe8ee5285a43acddbe766fd9219266a74cb24ed3331b4e350d8e263d0c7; + +// keccak256("security.token.standard.clearing.redeem.fixed.rate.resolverKey"); +bytes32 constant _CLEARING_REDEEM_FIXED_RATE_RESOLVER_KEY = 0xa8edf3401d5e3f8e9a45b0992984a31a2522a24ed793e5e7980f8d66508473c9; + +// keccak256("security.token.standard.clearing.redeem.kpilinked.rate.resolverKey"); +bytes32 constant _CLEARING_REDEEM_KPI_LINKED_RATE_RESOLVER_KEY = 0xc38aaff0161104c594b7a323af3facf5beb1e304b730fcbee09f5eed74b11375; + +// keccak256("security.token.standard.clearing.redeem.SustainabilityPerformanceTarget.rate.resolverKey"); +bytes32 constant _CLEARING_REDEEM_SUSTAINABILITY_PERFORMANCE_TARGET_RATE_RESOLVER_KEY = 0xc4731d62375990b9721357983c8f6acf3fdc78d7814919c187607f653b768d5d; + +// keccak256("security.token.standard.clearing.holdCreation.fixed.rate.resolverKey"); +bytes32 constant _CLEARING_HOLDCREATION_FIXED_RATE_RESOLVER_KEY = 0xf4d60b90b7a9edb9598b8c4aa2a4477e3a65750eab2cce564385f35d882a23c3; + +// keccak256("security.token.standard.clearing.holdCreation.kpilinked.rate.resolverKey"); +bytes32 constant _CLEARING_HOLDCREATION_KPI_LINKED_RATE_RESOLVER_KEY = 0x1ba40338a89cd18f2799a3e6a86f0be118236340eeff5a19a19a08d3d6e3d08c; + +// keccak256("security.token.standard.clearing.holdCreation.SustainabilityPerformanceTarget.rate.resolverKey"); +bytes32 constant _CLEARING_HOLDCREATION_SUSTAINABILITY_PERFORMANCE_TARGET_RATE_RESOLVER_KEY = 0x0e59e36a2b1298d11c3612c3203c6d45cb185879383f5a22617c4f49495c070d; + +// keccak256("security.token.standard.clearing.read.fixed.rate.resolverKey"); +bytes32 constant _CLEARING_READ_FIXED_RATE_RESOLVER_KEY = 0xcd312e798e5b62ec98cc7c8ac3547a640f68ee74e351b73397be02dab3d5b14f; + +// keccak256("security.token.standard.clearing.read.kpilinked.rate.resolverKey"); +bytes32 constant _CLEARING_READ_KPI_LINKED_RATE_RESOLVER_KEY = 0x3740ea12ff1c9c37f216ba72884079bcaabe99f51cdd9b019be5b218ba5db0e2; + +// keccak256("security.token.standard.clearing.read.SustainabilityPerformanceTarget.rate.resolverKey"); +bytes32 constant _CLEARING_READ_SUSTAINABILITY_PERFORMANCE_TARGET_RATE_RESOLVER_KEY = 0xa188d3ee426a514ccfe03470d196ed29da48de0ae59898d9b5a30ec680515a11; + +// keccak256("security.token.standard.clearing.actions.fixed.rate.resolverKey"); +bytes32 constant _CLEARING_ACTIONS_FIXED_RATE_RESOLVER_KEY = 0x497fbb5ba36b9a6b791669e513c877ebfe079b61e0eb37afbd19b696266a0223; + +// keccak256("security.token.standard.clearing.actions.kpilinked.rate.resolverKey"); +bytes32 constant _CLEARING_ACTIONS_KPI_LINKED_RATE_RESOLVER_KEY = 0x4960adcd566163ba9edaee816f8739f1c788cace28ad805c136644de52929faa; + +// keccak256("security.token.standard.clearing.actions.SustainabilityPerformanceTarget.rate.resolverKey"); +bytes32 constant _CLEARING_ACTIONS_SUSTAINABILITY_PERFORMANCE_TARGET_RATE_RESOLVER_KEY = 0xae9d6d2e1d9a660994e89e185ab5a3439d2def9baa6ba47fdf854ce0a29a5033; + // keccak256("security.token.standard.pause.management.resolverKey") bytes32 constant _PAUSE_MANAGEMENT_RESOLVER_KEY = 0xadd2e196c17b4f607e327e46341eedbbbc3dce86ac90ceb3e7244b0a5f8590ac; @@ -108,17 +306,179 @@ bytes32 constant _CONTROL_LIST_MANAGEMENT_RESOLVER_KEY = 0xb28d59e89fa116cebe06d // keccak256("security.token.standard.kyc.management.resolverKey") bytes32 constant _KYC_MANAGEMENT_RESOLVER_KEY = 0x8676785f4d841823214e8ee8c497b3336a210be7559f5571c590249f6203e821; -// keccak256('security.token.standard.erc3643.management.resolverKey'); -bytes32 constant _ERC3643_MANAGEMENT_RESOLVER_KEY = 0x06d7f1ffc912a9e44e5d742aa1c1eff596d0fabf91a1d0fb1c3ac0fba01f1773; +// keccak256("security.token.standard.erc3643.read.resolverKey"); +bytes32 constant _ERC3643_READ_RESOLVER_KEY = 0x7743c4e9ff26ef34c3c482d2c12dabe076035eb44bf1c736722f04c33c20ef6a; + +// keccak256("security.token.standard.erc3643.read.fixed.rate.resolverKey"); +bytes32 constant _ERC3643_READ_FIXED_RATE_RESOLVER_KEY = 0x53569c2059b40a4ccb6382b2180607da114ff92bfa263d7489ec7face7c4cc1f; + +// keccak256("security.token.standard.erc3643.read.kpilinked.rate.resolverKey"); +bytes32 constant _ERC3643_READ_KPI_LINKED_RATE_RESOLVER_KEY = 0x68ba78621a8627653774f3b9800b77ac34bd334ecc2dc4d933f9e30d6197194f; + +// keccak256("security.token.standard.erc3643.read.SustainabilityPerformanceTarget.rate.resolverKey"); +bytes32 constant _ERC3643_READ_SUSTAINABILITY_PERFORMANCE_TARGET_RATE_RESOLVER_KEY = 0x2fc56e8abd44d0dc70cf8876ea454caab82a906ec6333516c1feb4de9b4cb4f8; + +// keccak256("security.token.standard.erc3643.management.resolverKey"); +bytes32 constant _ERC3643_MANAGEMENT_RESOLVER_KEY = 0xae7b7d0da6ac02e802a8d85aa821dd5cb84e8448836471680f744f64b678a073; + +// keccak256("security.token.standard.erc3643.management.fixed.rate.resolverKey"); +bytes32 constant _ERC3643_MANAGEMENT_FIXED_RATE_RESOLVER_KEY = 0xb82ec3e8b1d44871bbfe25257f4e57b7d9778bc578af2f0ce9ef218f6b897797; + +// keccak256("security.token.standard.erc3643.management.kpilinked.rate.resolverKey"); +bytes32 constant _ERC3643_MANAGEMENT_KPI_LINKED_RATE_RESOLVER_KEY = 0x649facd691e27202b46bb9e328ca96c6f6dc0aeefdd6cfc15707ee162b7d5103; + +// keccak256("security.token.standard.erc3643.management.SustainabilityPerformanceTarget.rate.resolverKey"); +bytes32 constant _ERC3643_MANAGEMENT_SUSTAINABILITY_PERFORMANCE_TARGET_RATE_RESOLVER_KEY = 0x324a20f20a55098c207cd0bc42498561962995b82918d6a9697320c42c5b11fa; + +// keccak256("security.token.standard.erc3643.operations.resolverKey"); +bytes32 constant _ERC3643_OPERATIONS_RESOLVER_KEY = 0xe30b6b8e9e62fb8f017c940c7ffac12709f7ef6ae90beac5570fab25c7384e9c; + +// keccak256("security.token.standard.erc3643.operations.fixed.rate.resolverKey"); +bytes32 constant _ERC3643_OPERATIONS_FIXED_RATE_RESOLVER_KEY = 0x6524c4b11c24bcfff0472462572cdfbe5c671cad2df1ac54402e8a7b4dc3ee02; -// keccak256('security.token.standard.erc3643.batch.resolverKey'); -bytes32 constant _ERC3643_BATCH_RESOLVER_KEY = 0x9e671b494908a7523ee4e531ae7b7076b84f1c675d31346a9697f0ff4695f249; +// keccak256("security.token.standard.erc3643.operations.kpilinked.rate.resolverKey"); +bytes32 constant _ERC3643_OPERATIONS_KPI_LINKED_RATE_RESOLVER_KEY = 0x87b7a50a7578f2499b459e665b6b7b809ac635280a2157d21fc5de0fc4b54715; -// keccak256('security.token.standard.erc3643.read.resolverKey'); -bytes32 constant _ERC3643_READ_RESOLVER_KEY = 0xf1a7f92f11da0b048b6417201459d4e1eaef0e112e0d58d5bd6ee4481e5394c7; +// keccak256("security.token.standard.erc3643.operations.SustainabilityPerformanceTarget.rate.resolverKey"); +bytes32 constant _ERC3643_OPERATIONS_SUSTAINABILITY_PERFORMANCE_TARGET_RATE_RESOLVER_KEY = 0xbe85d38775742687362efc4fc0ffed08044614079fc51bbf7b0f29e11d3ffafa; -// keccak256('security.token.standard.erc3643.operations.resolverKey'); -bytes32 constant _ERC3643_OPERATIONS_RESOLVER_KEY = 0x39de33e56c92afe3cd7ece00d0ff8a0df512878690719e48c17d5b54604d2de2; +// keccak256("security.token.standard.erc3643.batch.resolverKey"); +bytes32 constant _ERC3643_BATCH_RESOLVER_KEY = 0x00332311d9f0c311b31b87399043a90feb10341fcbb4d7f4ed6e3c0072a3c392; -// keccak256('security.token.standard.freeze.resolverKey'); +// keccak256("security.token.standard.erc3643.batch.fixed.rate.resolverKey"); +bytes32 constant _ERC3643_BATCH_FIXED_RATE_RESOLVER_KEY = 0x3563ac36f573b2e288846d3437686b6a5137a7c9b5cbcd027816db63e07d4138; + +// keccak256("security.token.standard.erc3643.batch.kpilinked.rate.resolverKey"); +bytes32 constant _ERC3643_BATCH_KPI_LINKED_RATE_RESOLVER_KEY = 0xdf3ace3e8d3a434ee6c69da03060d81e1c8c217c16fad43a2819c0bc545253ae; + +// keccak256("security.token.standard.erc3643.batch.SustainabilityPerformanceTarget.rate.resolverKey"); +bytes32 constant _ERC3643_BATCH_SUSTAINABILITY_PERFORMANCE_TARGET_RATE_RESOLVER_KEY = 0x500c4c5bff9db733228f1df9b6e818bf8fab883422d3fbe971c036b513e983d9; + +// keccak256("security.token.standard.freeze.resolverKey"); bytes32 constant _FREEZE_RESOLVER_KEY = 0x49f765e7155d979a148049c2a0ebed5e028b11799061897a255f99314f0bd3f1; + +// keccak256("security.token.standard.externalcontrollist.resolverKey"); +bytes32 constant _EXTERNAL_CONTROL_LIST_RESOLVER_KEY = 0x490196911bc65200514fb4568861a36670854901dffa91bc27577664fdace575; + +// keccak256("security.token.standard.externalcontrollist.fixed.rate.resolverKey"); +bytes32 constant _EXTERNAL_CONTROL_LIST_FIXED_RATE_RESOLVER_KEY = 0xdb213fa4fc549f5bc27fc79e6094fe6a26e303e8eabc8a86a8de7bb307d570d8; + +// keccak256("security.token.standard.externalcontrollist.kpilinked.rate.resolverKey"); +bytes32 constant _EXTERNAL_CONTROL_LIST_KPI_LINKED_RATE_RESOLVER_KEY = 0x9ecec5a17142ae1072721e064f5e9a3f0795a2bea57673f40a9440b8adec0052; + +// keccak256("security.token.standard.externalcontrollist.SustainabilityPerformanceTarget.rate.resolverKey"); +bytes32 constant _EXTERNAL_CONTROL_LIST_SUSTAINABILITY_PERFORMANCE_TARGET_RATE_RESOLVER_KEY = 0x2c56accbf6faf923cd323935455dac00c2ddffe08f0becdf49d515e4b4d355af; + +// keccak256("security.token.standard.externalkyclist.resolverKey"); +bytes32 constant _EXTERNAL_KYC_LIST_RESOLVER_KEY = 0x32f05e55195d945105aff8ac4b041d4680824578bd72c6a34e4aa906a59237f1; + +// keccak256("security.token.standard.externalkyclist.fixed.rate.resolverKey"); +bytes32 constant _EXTERNAL_KYC_LIST_FIXED_RATE_RESOLVER_KEY = 0x4f9cf8c8583a46a60ec88a37a07f91d915dba024a57bdb729a4805603f5c40b2; + +// keccak256("security.token.standard.externalkyclist.kpilinked.rate.resolverKey"); +bytes32 constant _EXTERNAL_KYC_LIST_KPI_LINKED_RATE_RESOLVER_KEY = 0xc15c973cec2d75a95d94522af2dc05c535be214a6cce368887f7e7d3ead3a491; + +// keccak256("security.token.standard.externalkyclist.SustainabilityPerformanceTarget.rate.resolverKey"); +bytes32 constant _EXTERNAL_KYC_LIST_SUSTAINABILITY_PERFORMANCE_TARGET_RATE_RESOLVER_KEY = 0x0fcfeebcf118ca3c39fbed0e2a527a866cac42bbd3fcad5f9b4f755ef97f3aa9; + +// keccak256("security.token.standard.externalpause.resolverKey"); +bytes32 constant _EXTERNAL_PAUSE_RESOLVER_KEY = 0x158025f9e40c5d145e7915a14d5e97459728d98c715d8329359e305df737ee3c; + +// keccak256("security.token.standard.externalpause.fixed.rate.resolverKey"); +bytes32 constant _EXTERNAL_PAUSE_FIXED_RATE_RESOLVER_KEY = 0x752307e5e93ea6e9b979833cf52e6043f71fd4b983ec32aa685f9b160594e326; + +// keccak256("security.token.standard.externalpause.kpilinked.rate.resolverKey"); +bytes32 constant _EXTERNAL_PAUSE_KPI_LINKED_RATE_RESOLVER_KEY = 0x549d7aab8deeb4a493aa9765937da4290840d4a6fe04399ef4bb818694d9aee4; + +// keccak256("security.token.standard.externalpause.SustainabilityPerformanceTarget.rate.resolverKey"); +bytes32 constant _EXTERNAL_PAUSE_SUSTAINABILITY_PERFORMANCE_TARGET_RATE_RESOLVER_KEY = 0x07846b678053cbd4be5d9d3929fa9af5ab76bb508a0f7957f5239302aad45bc3; + +// keccak256("security.token.standard.freeze.fixed.rate.resolverKey"); +bytes32 constant _FREEZE_FIXED_RATE_RESOLVER_KEY = 0xad6f49f17db4659e78d7c82e5414ef50b6bfddf3f3e15adc3d0a0e958f696841; + +// keccak256("security.token.standard.freeze.kpilinked.rate.resolverKey"); +bytes32 constant _FREEZE_KPI_LINKED_RATE_RESOLVER_KEY = 0xb03614fe7a4412f420f88bc18fc39ab43459dbfdbbdbd0a8e109356b0928272e; + +// keccak256("security.token.standard.freeze.SustainabilityPerformanceTarget.rate.resolverKey"); +bytes32 constant _FREEZE_SUSTAINABILITY_PERFORMANCE_TARGET_RATE_RESOLVER_KEY = 0x25ca5cbe52a82389e142792fdab2ffc58f224f2628f9a92a3f717134cbe229e4; + +// keccak256("security.token.standard.hold.resolverKey"); +bytes32 constant _HOLD_RESOLVER_KEY = 0x6c7216c5c52bc8f5019fc2fb333eb5e518e647fd82c807ed7c2a1fe4a03a3860; + +// keccak256("security.token.standard.hold.fixed.rate.resolverKey"); +bytes32 constant _HOLD_FIXED_RATE_RESOLVER_KEY = 0xed113dc152639988cc04869ce8c061c4a3350fe3826e16fc37960453a8d20b50; + +// keccak256("security.token.standard.hold.kpilinked.rate.resolverKey"); +bytes32 constant _HOLD_KPI_LINKED_RATE_RESOLVER_KEY = 0xed86feb6fdd55e6a056bda1a5b7149c2d0d6d7d024625b67aa2c567ba0ef2b9e; + +// keccak256("security.token.standard.hold.SustainabilityPerformanceTarget.rate.resolverKey"); +bytes32 constant _HOLD_SUSTAINABILITY_PERFORMANCE_TARGET_RATE_RESOLVER_KEY = 0x4574524c203fbcc0f5b9f08bcd2b9a9d47c5a9cf3a30eeb540a93a33a8a2f834; + +// keccak256("security.token.standard.kyc.fixed.rate.resolverKey"); +bytes32 constant _KYC_FIXED_RATE_RESOLVER_KEY = 0x76145b42d3591928a90298dbd705c8cdb33be9f5eee50f649fb58ed3f36b9f04; + +// keccak256("security.token.standard.kyc.kpilinked.rate.resolverKey"); +bytes32 constant _KYC_KPI_LINKED_RATE_RESOLVER_KEY = 0x9cf03144d37b7b92d5b438e1f037a64ebdc48c2891bc4b475a15a1cf833574d0; + +// keccak256("security.token.standard.kyc.SustainabilityPerformanceTarget.rate.resolverKey"); +bytes32 constant _KYC_SUSTAINABILITY_PERFORMANCE_TARGET_RATE_RESOLVER_KEY = 0x1cb818916342973b46841d2ca9543c702bf6380fb0fc179f356139aa142379c3; + +// keccak256("security.token.standard.lock.fixed.rate.resolverKey"); +bytes32 constant _LOCK_FIXED_RATE_RESOLVER_KEY = 0x053d181bbb93fc7807aafeac901706f74ec5767053695d2b769bf0fdcf065e4d; + +// keccak256("security.token.standard.lock.kpilinked.rate.resolverKey"); +bytes32 constant _LOCK_KPI_LINKED_RATE_RESOLVER_KEY = 0x04caf3f62f31b8b1edd96c39948d89098fd83c1a1b5b76aa39927cf7ad8e9d42; + +// keccak256("security.token.standard.lock.SustainabilityPerformanceTarget.rate.resolverKey"); +bytes32 constant _LOCK_SUSTAINABILITY_PERFORMANCE_TARGET_RATE_RESOLVER_KEY = 0xe73c2eecf92b5b8eb7ecc89b379f70193694f2906188318c3407458267385b82; + +// keccak256("security.token.standard.pause.fixed.rate.resolverKey"); +bytes32 constant _PAUSE_FIXED_RATE_RESOLVER_KEY = 0x9fd7fc8200742d120881c0cf0a0541bae13e372519d986a5169b23b82ea06f12; + +// keccak256("security.token.standard.pause.kpilinked.rate.resolverKey"); +bytes32 constant _PAUSE_KPI_LINKED_RATE_RESOLVER_KEY = 0x77ff7dc4f2d4a0cb28f09307895b94478d6655e7a545222f97b753a6c90a8f71; + +// keccak256("security.token.standard.pause.SustainabilityPerformanceTarget.rate.resolverKey"); +bytes32 constant _PAUSE_SUSTAINABILITY_PERFORMANCE_TARGET_RATE_RESOLVER_KEY = 0xa16c7f2d6b5ab7f05dd30bd562ac9f3005fe21e3b2bde131733e37c0d42046ee; + +// keccak256("security.token.standard.protectedpartitions.fixed.rate.resolverKey"); +bytes32 constant _PROTECTED_PARTITIONS_FIXED_RATE_RESOLVER_KEY = 0x1f8166e21922daee7192ddd5f8a1ce657013d69d412a4e4f5848ab75f1ca8db3; + +// keccak256("security.token.standard.protectedpartitions.kpilinked.rate.resolverKey"); +bytes32 constant _PROTECTED_PARTITIONS_KPI_LINKED_RATE_RESOLVER_KEY = 0x665aad7ee148905a0af716acbc6abd8f408eadce853caf3f84528a9810ffc436; + +// keccak256("security.token.standard.protectedpartitions.SustainabilityPerformanceTarget.rate.resolverKey"); +bytes32 constant _PROTECTED_PARTITIONS_SUSTAINABILITY_PERFORMANCE_TARGET_RATE_RESOLVER_KEY = 0x088ec2750f42a30fde9383e74f4148ce5df963263d426deffc1d29fff61a6538; + +// keccak256("security.token.standard.snapshots.fixed.rate.resolverKey"); +bytes32 constant _SNAPSHOTS_FIXED_RATE_RESOLVER_KEY = 0xf9b2659fdf4231d426bc34cef93a8b3f42e5cfaf762f65dbf6537ab3e5ee8348; + +// keccak256("security.token.standard.snapshots.kpilinked.rate.resolverKey"); +bytes32 constant _SNAPSHOTS_KPI_LINKED_RATE_RESOLVER_KEY = 0x9c0a9b3a98c7e535e4b1a0749f01f63ea94b600fbee8df56d7c18a1f3043ee20; + +// keccak256("security.token.standard.snapshots.SustainabilityPerformanceTarget.rate.resolverKey"); +bytes32 constant _SNAPSHOTS_SUSTAINABILITY_PERFORMANCE_TARGET_RATE_RESOLVER_KEY = 0xbcc6255960c1cbe69dae32f7db730d14a35fdb81d91cc7e637e5af4d229bcbbe; + +// keccak256("security.token.standard.ssi.resolverKey"); +bytes32 constant _SSI_RESOLVER_KEY = 0x77c35dccfcdc80370e925aae86871ef8bc71db0b8e082c073cda906e89bb610e; + +// keccak256("security.token.standard.ssi.fixed.rate.resolverKey"); +bytes32 constant _SSI_FIXED_RATE_RESOLVER_KEY = 0xd3c3eb4fde853b08d2509769f85fbcc3147edd847e1e8da89c805628293effb2; + +// keccak256("security.token.standard.ssi.kpilinked.rate.resolverKey"); +bytes32 constant _SSI_KPI_LINKED_RATE_RESOLVER_KEY = 0xac0a01362676a7a1370879903993e04310cb7a3b60fc327072dcf7a00ce50e5a; + +// keccak256("security.token.standard.ssi.SustainabilityPerformanceTarget.rate.resolverKey"); +bytes32 constant _SSI_SUSTAINABILITY_PERFORMANCE_TARGET_RATE_RESOLVER_KEY = 0x5de367269fd9e98ceb172f263a954ee471605474013e206e00340c5914046c8b; + +// keccak256("security.token.standard.nonces.resolverKey"); +bytes32 constant _NONCES_RESOLVER_KEY = 0xb235fd4aa74228c048d55d58514cd3393ef934423864ef7ddca6d302041c2bd1; + +// keccak256("security.token.standard.nonces.fixed.rate.resolverKey"); +bytes32 constant _NONCES_FIXED_RATE_RESOLVER_KEY = 0xb13c3f8e56b31e6f487b3586c2eafb6f13c33bf6b0063a62f31fb386b0dab046; + +// keccak256("security.token.standard.nonces.kpilinked.rate.resolverKey"); +bytes32 constant _NONCES_KPI_LINKED_RATE_RESOLVER_KEY = 0xc267b98bd9bdee7ecfccb0929874a128cc0814cf4bd67274423368452b324dc6; + +// keccak256("security.token.standard.nonces.SustainabilityPerformanceTarget.rate.resolverKey"); +bytes32 constant _NONCES_SUSTAINABILITY_PERFORMANCE_TARGET_RATE_RESOLVER_KEY = 0x631217f1fdd4036273035308e6637d8cdef1927db4eef0af68e5aac13a70892e; diff --git a/packages/ats/contracts/contracts/layer_1/constants/values.sol b/packages/ats/contracts/contracts/layer_1/constants/values.sol index b17df4e10..18e586e94 100644 --- a/packages/ats/contracts/contracts/layer_1/constants/values.sol +++ b/packages/ats/contracts/contracts/layer_1/constants/values.sol @@ -27,35 +27,24 @@ bytes1 constant _ADDRESS_RECOVERED_TO_ERROR_ID = 0x55; bytes1 constant _SUCCESS = 0x00; -// solhint-disable max-line-length -//keccak256( -// 'EIP712Domain(string name,string version,uint256 chainId,address verifyingContract)' -//); -bytes32 constant _DOMAIN_TYPE_HASH = 0x8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f; -string constant _SALT = "\x19\x01"; -string constant _CONTRACT_NAME_PROTECTEDPARTITIONS = "ProtectedPartitions"; -string constant _CONTRACT_VERSION_PROTECTEDPARTITIONS = "1.0.0"; -string constant _CONTRACT_NAME_ERC20VOTES = "ERC20Votes"; -string constant _CONTRACT_VERSION_ERC20VOTES = "1.0.0"; -string constant _CONTRACT_NAME_ERC20PERMIT = "ERC20Permit"; -string constant _CONTRACT_VERSION_ERC20PERMIT = "1.0.0"; -//keccak256( -// 'protectedTransferFromByPartition(bytes32 _partition,address _from,address _to,uint256 _amount,uint256 _deadline,uint256 _nounce)' -//); +// solhint-disable-next-line max-line-length +//keccak256('protectedTransferFromByPartition(bytes32 _partition,address _from,address _to,uint256 _amount,uint256 _deadline,uint256 _nounce)'); +// solhint-disable-next-line max-line-length bytes32 constant _PROTECTED_TRANSFER_FROM_PARTITION_TYPEHASH = 0x2d745a289deb1f3b76a62c3c841fc26cbf0bc208da63068e1eec99f929bbdc9e; -//keccak256( -// 'protectedRedeemFromByPartition(bytes32 _partition,address _from,uint256 _amount,uint256 _deadline,uint256 _nounce)' -//); + +// solhint-disable-next-line max-line-length +//keccak256('protectedRedeemFromByPartition(bytes32 _partition,address _from,uint256 _amount,uint256 _deadline,uint256 _nounce)'); +// solhint-disable-next-line max-line-length bytes32 constant _PROTECTED_REDEEM_FROM_PARTITION_TYPEHASH = 0x5075effccf2d386f2a3f230b6a45274e523d872e1b1b33a0cf97bef34dfa14e7; -//keccak256( -//'protectedCreateHoldByPartition(bytes32 _partition,address _from,ProtectedHold _protectedHold)Hold(uint256 amount,uint256 expirationTimestamp,address escrow,address to,bytes data)ProtectedHold(Hold hold,uint256 deadline,uint256 nonce)' -//); +// solhint-disable-next-line max-line-length +//keccak256('protectedCreateHoldByPartition(bytes32 _partition,address _from,ProtectedHold _protectedHold)Hold(uint256 amount,uint256 expirationTimestamp,address escrow,address to,bytes data)ProtectedHold(Hold hold,uint256 deadline,uint256 nonce)'); +// solhint-disable-next-line max-line-length bytes32 constant _PROTECTED_CREATE_HOLD_FROM_PARTITION_TYPEHASH = 0xfd0d74766e5201a669a9197ba674709a23bc9c94c38a9ed40649836def3747eb; -//keccak256( -//'protectedClearingCreateHoldByPartition(ProtectedClearingOperation _protectedClearingOperation,Hold _hold)ClearingOperation(bytes32 partition,uint256 expirationTimestamp,bytes data)Hold(uint256 amount,uint256 expirationTimestamp,address escrow,address to,bytes data)ProtectedClearingOperation(ClearingOperation clearingOperation,address from,uint256 deadline,uint256 nonce)' -//); +// solhint-disable-next-line max-line-length +//keccak256('protectedClearingCreateHoldByPartition(ProtectedClearingOperation _protectedClearingOperation,Hold _hold)ClearingOperation(bytes32 partition,uint256 expirationTimestamp,bytes data)Hold(uint256 amount,uint256 expirationTimestamp,address escrow,address to,bytes data)ProtectedClearingOperation(ClearingOperation clearingOperation,address from,uint256 deadline,uint256 nonce)'); +// solhint-disable-next-line max-line-length bytes32 constant _PROTECTED_CLEARING_CREATE_HOLD_FROM_PARTITION_TYPEHASH = 0x785e8513e34a44521b76d095722cbc8f41f6073a2f949a9dc79f85da36188f08; //keccak256( @@ -63,9 +52,9 @@ bytes32 constant _PROTECTED_CLEARING_CREATE_HOLD_FROM_PARTITION_TYPEHASH = 0x785 //); bytes32 constant _HOLD_TYPEHASH = 0x638791043a42aa7472ccb18a7ede86b9baf01fb2d2128a743cf5dc473057d7bc; -//keccak256( -//'ProtectedClearingOperation(ClearingOperation clearingOperation,address from,uint256 deadline,uint256 nonce)ClearingOperation(bytes32 partition,uint256 expirationTimestamp,bytes data)' -//); +// solhint-disable-next-line max-line-length +//keccak256('ProtectedClearingOperation(ClearingOperation clearingOperation,address from,uint256 deadline,uint256 nonce)ClearingOperation(bytes32 partition,uint256 expirationTimestamp,bytes data)'); +// solhint-disable-next-line max-line-length bytes32 constant _PROTECTED_CLEARING_OPERATION_TYPEHASH = 0x1e3a71820115912522e83d52ecad9fb4b7753a55d2d3d24c1c4e3047f9eb2e1f; //keccak256( @@ -73,17 +62,16 @@ bytes32 constant _PROTECTED_CLEARING_OPERATION_TYPEHASH = 0x1e3a71820115912522e8 //); bytes32 constant _CLEARING_OPERATION_TYPEHASH = 0x6b1a3eed3300b58d08c0db9042a291c5c816c5891e585aad19ad1b2723d147bc; -//keccak256( -//'ProtectedHold(Hold hold,uint256 deadline,uint256 nonce)Hold(uint256 amount,uint256 expirationTimestamp,address escrow,address to,bytes data)' -//); +// solhint-disable-next-line max-line-length +//keccak256('ProtectedHold(Hold hold,uint256 deadline,uint256 nonce)Hold(uint256 amount,uint256 expirationTimestamp,address escrow,address to,bytes data)'); bytes32 constant _PROTECTED_HOLD_TYPEHASH = 0x432ede4c9f6d06cc57be0d75da5dce179cd5f56db988520d5b77795a69b0dc2e; -//keccak256( -//'protectedClearingTransferByPartition(ProtectedClearingOperation _protectedClearingOperation,uint256 _amount,address _to)ClearingOperation(bytes32 partition,uint256 expirationTimestamp,bytes data)ProtectedClearingOperation(ClearingOperation clearingOperation,address from,uint256 deadline,uint256 nonce)' -//); +// solhint-disable-next-line max-line-length +//keccak256('protectedClearingTransferByPartition(ProtectedClearingOperation _protectedClearingOperation,uint256 _amount,address _to)ClearingOperation(bytes32 partition,uint256 expirationTimestamp,bytes data)ProtectedClearingOperation(ClearingOperation clearingOperation,address from,uint256 deadline,uint256 nonce)'); +// solhint-disable-next-line max-line-length bytes32 constant _PROTECTED_CLEARING_TRANSFER_PARTITION_TYPEHASH = 0x9ac8bf58d69dcdeba1416569ae4a5e8aef8b8bd1517e584211c6f3b149ef7989; -//keccak256( -//'protectedClearingRedeemByPartition(ProtectedClearingOperation _protectedClearingOperation,uint256 _amount)ClearingOperation(bytes32 partition,uint256 expirationTimestamp,bytes data)ProtectedClearingOperation(ClearingOperation clearingOperation,address from,uint256 deadline,uint256 nonce)' -//); +// solhint-disable-next-line max-line-length +//keccak256('protectedClearingRedeemByPartition(ProtectedClearingOperation _protectedClearingOperation,uint256 _amount)ClearingOperation(bytes32 partition,uint256 expirationTimestamp,bytes data)ProtectedClearingOperation(ClearingOperation clearingOperation,address from,uint256 deadline,uint256 nonce)'); +// solhint-disable-next-line max-line-length bytes32 constant _PROTECTED_CLEARING_REDEEM_TYPEHASH = 0x9800252304972e5a6e126479147b31373237346ee6c2c4cdbfd4ee18a138477e; diff --git a/packages/ats/contracts/contracts/layer_1/controlList/ControlList.sol b/packages/ats/contracts/contracts/layer_1/controlList/ControlList.sol index 85ba5578d..dc85898ed 100644 --- a/packages/ats/contracts/contracts/layer_1/controlList/ControlList.sol +++ b/packages/ats/contracts/contracts/layer_1/controlList/ControlList.sol @@ -2,18 +2,15 @@ pragma solidity >=0.8.0 <0.9.0; import { IControlList } from "../interfaces/controlList/IControlList.sol"; -import { Common } from "../common/Common.sol"; +import { Internals } from "contracts/layer_0/Internals.sol"; import { _CONTROL_LIST_ROLE } from "../constants/roles.sol"; -abstract contract ControlList is IControlList, Common { - // TODO: UNPAUSED +abstract contract ControlList is IControlList, Internals { // solhint-disable-next-line func-name-mixedcase function initialize_ControlList( bool _isWhiteList - ) external override onlyUninitialized(_controlListStorage().initialized) { - ControlListStorage storage controlListStorage = _controlListStorage(); - controlListStorage.isWhiteList = _isWhiteList; - controlListStorage.initialized = true; + ) external override onlyUninitialized(_isControlListInitialized()) { + _initialize_ControlList(_isWhiteList); } function addToControlList( diff --git a/packages/ats/contracts/contracts/layer_1/controlList/ControlListFacet.sol b/packages/ats/contracts/contracts/layer_1/controlList/ControlListFacetBase.sol similarity index 82% rename from packages/ats/contracts/contracts/layer_1/controlList/ControlListFacet.sol rename to packages/ats/contracts/contracts/layer_1/controlList/ControlListFacetBase.sol index 882b47dd1..43f2ab203 100644 --- a/packages/ats/contracts/contracts/layer_1/controlList/ControlListFacet.sol +++ b/packages/ats/contracts/contracts/layer_1/controlList/ControlListFacetBase.sol @@ -1,16 +1,11 @@ // SPDX-License-Identifier: Apache-2.0 pragma solidity >=0.8.0 <0.9.0; -import { IControlList } from "../interfaces/controlList/IControlList.sol"; import { IStaticFunctionSelectors } from "../../interfaces/resolver/resolverProxy/IStaticFunctionSelectors.sol"; -import { _CONTROL_LIST_RESOLVER_KEY } from "../constants/resolverKeys.sol"; import { ControlList } from "./ControlList.sol"; +import { IControlList } from "../interfaces/controlList/IControlList.sol"; -contract ControlListFacet is ControlList, IStaticFunctionSelectors { - function getStaticResolverKey() external pure override returns (bytes32 staticResolverKey_) { - staticResolverKey_ = _CONTROL_LIST_RESOLVER_KEY; - } - +abstract contract ControlListFacetBase is ControlList, IStaticFunctionSelectors { function getStaticFunctionSelectors() external pure override returns (bytes4[] memory staticFunctionSelectors_) { uint256 selectorIndex; staticFunctionSelectors_ = new bytes4[](7); diff --git a/packages/ats/contracts/contracts/layer_1/controlList/fixedRate/ControlListFixedRateFacet.sol b/packages/ats/contracts/contracts/layer_1/controlList/fixedRate/ControlListFixedRateFacet.sol new file mode 100644 index 000000000..bf4cdb902 --- /dev/null +++ b/packages/ats/contracts/contracts/layer_1/controlList/fixedRate/ControlListFixedRateFacet.sol @@ -0,0 +1,12 @@ +// SPDX-License-Identifier: Apache-2.0 +pragma solidity >=0.8.0 <0.9.0; + +import { ControlListFacetBase } from "../ControlListFacetBase.sol"; +import { _CONTROL_LIST_FIXED_RATE_RESOLVER_KEY } from "contracts/layer_1/constants/resolverKeys.sol"; +import { CommonFixedInterestRate } from "contracts/layer_0_extensions/bond/fixedInterestRate/Common.sol"; + +contract ControlListFixedRateFacet is ControlListFacetBase, CommonFixedInterestRate { + function getStaticResolverKey() external pure override returns (bytes32 staticResolverKey_) { + staticResolverKey_ = _CONTROL_LIST_FIXED_RATE_RESOLVER_KEY; + } +} diff --git a/packages/ats/contracts/contracts/layer_1/controlList/kpiLinkedRate/ControlListKpiLinkedRateFacet.sol b/packages/ats/contracts/contracts/layer_1/controlList/kpiLinkedRate/ControlListKpiLinkedRateFacet.sol new file mode 100644 index 000000000..1f190cd53 --- /dev/null +++ b/packages/ats/contracts/contracts/layer_1/controlList/kpiLinkedRate/ControlListKpiLinkedRateFacet.sol @@ -0,0 +1,14 @@ +// SPDX-License-Identifier: Apache-2.0 +pragma solidity >=0.8.0 <0.9.0; + +import { ControlListFacetBase } from "../ControlListFacetBase.sol"; +import { _CONTROL_LIST_KPI_LINKED_RATE_RESOLVER_KEY } from "contracts/layer_1/constants/resolverKeys.sol"; +import { + CommonKpiLinkedInterestRate +} from "contracts/layer_0_extensions/bond/fixingDateInterestRate/kpiInterestRate/kpiLinkedInterestRate/Common.sol"; + +contract ControlListKpiLinkedRateFacet is ControlListFacetBase, CommonKpiLinkedInterestRate { + function getStaticResolverKey() external pure override returns (bytes32 staticResolverKey_) { + staticResolverKey_ = _CONTROL_LIST_KPI_LINKED_RATE_RESOLVER_KEY; + } +} diff --git a/packages/ats/contracts/contracts/layer_1/controlList/standard/ControlListFacet.sol b/packages/ats/contracts/contracts/layer_1/controlList/standard/ControlListFacet.sol new file mode 100644 index 000000000..6b0d5c967 --- /dev/null +++ b/packages/ats/contracts/contracts/layer_1/controlList/standard/ControlListFacet.sol @@ -0,0 +1,12 @@ +// SPDX-License-Identifier: Apache-2.0 +pragma solidity >=0.8.0 <0.9.0; + +import { ControlListFacetBase } from "../ControlListFacetBase.sol"; +import { _CONTROL_LIST_RESOLVER_KEY } from "contracts/layer_1/constants/resolverKeys.sol"; +import { Common } from "contracts/layer_0/common/Common.sol"; + +contract ControlListFacet is ControlListFacetBase, Common { + function getStaticResolverKey() external pure override returns (bytes32 staticResolverKey_) { + staticResolverKey_ = _CONTROL_LIST_RESOLVER_KEY; + } +} diff --git a/packages/ats/contracts/contracts/layer_1/controlList/sustainabilityPerformanceTargetRate/ControlListSustainabilityPerformanceTargetRateFacet.sol b/packages/ats/contracts/contracts/layer_1/controlList/sustainabilityPerformanceTargetRate/ControlListSustainabilityPerformanceTargetRateFacet.sol new file mode 100644 index 000000000..e2dc5d62d --- /dev/null +++ b/packages/ats/contracts/contracts/layer_1/controlList/sustainabilityPerformanceTargetRate/ControlListSustainabilityPerformanceTargetRateFacet.sol @@ -0,0 +1,19 @@ +// SPDX-License-Identifier: Apache-2.0 +pragma solidity >=0.8.0 <0.9.0; + +import { ControlListFacetBase } from "../ControlListFacetBase.sol"; +import { + _CONTROL_LIST_SUSTAINABILITY_PERFORMANCE_TARGET_RATE_RESOLVER_KEY +} from "contracts/layer_1/constants/resolverKeys.sol"; +// prettier-ignore +// solhint-disable-next-line max-line-length +import { CommonSustainabilityPerformanceTargetInterestRate } from "contracts/layer_0_extensions/bond/fixingDateInterestRate/kpiInterestRate/sustainabilityPerformanceTargetInterestRate/Common.sol"; + +contract ControlListSustainabilityPerformanceTargetRateFacet is + ControlListFacetBase, + CommonSustainabilityPerformanceTargetInterestRate +{ + function getStaticResolverKey() external pure override returns (bytes32 staticResolverKey_) { + staticResolverKey_ = _CONTROL_LIST_SUSTAINABILITY_PERFORMANCE_TARGET_RATE_RESOLVER_KEY; + } +} diff --git a/packages/ats/contracts/contracts/layer_1/corporateActions/CorporateActions.sol b/packages/ats/contracts/contracts/layer_1/corporateActions/CorporateActions.sol index 82b2c44ca..847808fb9 100644 --- a/packages/ats/contracts/contracts/layer_1/corporateActions/CorporateActions.sol +++ b/packages/ats/contracts/contracts/layer_1/corporateActions/CorporateActions.sol @@ -2,10 +2,10 @@ pragma solidity >=0.8.0 <0.9.0; import { ICorporateActions } from "../interfaces/corporateActions/ICorporateActions.sol"; -import { Common } from "../common/Common.sol"; +import { Internals } from "../../layer_0/Internals.sol"; import { _CORPORATE_ACTION_ROLE } from "../constants/roles.sol"; -abstract contract CorporateActions is ICorporateActions, Common { +abstract contract CorporateActions is ICorporateActions, Internals { function addCorporateAction( bytes32 _actionType, bytes memory _data @@ -14,20 +14,20 @@ abstract contract CorporateActions is ICorporateActions, Common { override onlyUnpaused onlyRole(_CORPORATE_ACTION_ROLE) - returns (bool success_, bytes32 corporateActionId_, uint256 corporateActionIndexByType_) + returns (bytes32 corporateActionId_, uint256 corporateActionIdByType_) { - (success_, corporateActionId_, corporateActionIndexByType_) = _addCorporateAction(_actionType, _data); + (corporateActionId_, corporateActionIdByType_) = _addCorporateAction(_actionType, _data); - if (!success_) { + if (corporateActionId_ == bytes32(0)) { revert DuplicatedCorporateAction(_actionType, _data); } - emit CorporateActionAdded(_msgSender(), _actionType, corporateActionId_, corporateActionIndexByType_, _data); + emit CorporateActionAdded(_msgSender(), _actionType, corporateActionId_, corporateActionIdByType_, _data); } function getCorporateAction( bytes32 _corporateActionId - ) external view override returns (bytes32 actionType_, bytes memory data_) { - (actionType_, data_) = _getCorporateAction(_corporateActionId); + ) external view override returns (bytes32 actionType_, uint256 actionTypeId_, bytes memory data_) { + (actionType_, actionTypeId_, data_) = _getCorporateAction(_corporateActionId); } function getCorporateActionCount() external view override returns (uint256 corporateActionCount_) { @@ -54,4 +54,8 @@ abstract contract CorporateActions is ICorporateActions, Common { ) external view override returns (bytes32[] memory corporateActionIds_) { corporateActionIds_ = _getCorporateActionIdsByType(_actionType, _pageIndex, _pageLength); } + + function actionContentHashExists(bytes32 _contentHash) external view returns (bool) { + return _actionContentHashExists(_contentHash); + } } diff --git a/packages/ats/contracts/contracts/layer_1/corporateActions/CorporateActionsFacet.sol b/packages/ats/contracts/contracts/layer_1/corporateActions/CorporateActionsFacetBase.sol similarity index 77% rename from packages/ats/contracts/contracts/layer_1/corporateActions/CorporateActionsFacet.sol rename to packages/ats/contracts/contracts/layer_1/corporateActions/CorporateActionsFacetBase.sol index a5d906316..bcfe59b2d 100644 --- a/packages/ats/contracts/contracts/layer_1/corporateActions/CorporateActionsFacet.sol +++ b/packages/ats/contracts/contracts/layer_1/corporateActions/CorporateActionsFacetBase.sol @@ -2,24 +2,20 @@ pragma solidity >=0.8.0 <0.9.0; import { ICorporateActions } from "../interfaces/corporateActions/ICorporateActions.sol"; -import { _CORPORATE_ACTIONS_RESOLVER_KEY } from "../constants/resolverKeys.sol"; import { IStaticFunctionSelectors } from "../../interfaces/resolver/resolverProxy/IStaticFunctionSelectors.sol"; import { CorporateActions } from "./CorporateActions.sol"; -contract CorporateActionsFacet is CorporateActions, IStaticFunctionSelectors { - function getStaticResolverKey() external pure override returns (bytes32 staticResolverKey_) { - staticResolverKey_ = _CORPORATE_ACTIONS_RESOLVER_KEY; - } - +abstract contract CorporateActionsFacetBase is CorporateActions, IStaticFunctionSelectors { function getStaticFunctionSelectors() external pure override returns (bytes4[] memory staticFunctionSelectors_) { uint256 selectorIndex; - staticFunctionSelectors_ = new bytes4[](6); + staticFunctionSelectors_ = new bytes4[](7); staticFunctionSelectors_[selectorIndex++] = this.addCorporateAction.selector; staticFunctionSelectors_[selectorIndex++] = this.getCorporateAction.selector; staticFunctionSelectors_[selectorIndex++] = this.getCorporateActionCount.selector; staticFunctionSelectors_[selectorIndex++] = this.getCorporateActionIds.selector; staticFunctionSelectors_[selectorIndex++] = this.getCorporateActionCountByType.selector; staticFunctionSelectors_[selectorIndex++] = this.getCorporateActionIdsByType.selector; + staticFunctionSelectors_[selectorIndex++] = this.actionContentHashExists.selector; } function getStaticInterfaceIds() external pure override returns (bytes4[] memory staticInterfaceIds_) { diff --git a/packages/ats/contracts/contracts/layer_1/corporateActions/fixedRate/CorporateActionsFixedRateFacet.sol b/packages/ats/contracts/contracts/layer_1/corporateActions/fixedRate/CorporateActionsFixedRateFacet.sol new file mode 100644 index 000000000..948e18461 --- /dev/null +++ b/packages/ats/contracts/contracts/layer_1/corporateActions/fixedRate/CorporateActionsFixedRateFacet.sol @@ -0,0 +1,12 @@ +// SPDX-License-Identifier: Apache-2.0 +pragma solidity >=0.8.0 <0.9.0; + +import { CorporateActionsFacetBase } from "../CorporateActionsFacetBase.sol"; +import { _CORPORATE_ACTIONS_FIXED_RATE_RESOLVER_KEY } from "contracts/layer_1/constants/resolverKeys.sol"; +import { CommonFixedInterestRate } from "contracts/layer_0_extensions/bond/fixedInterestRate/Common.sol"; + +contract CorporateActionsFixedRateFacet is CorporateActionsFacetBase, CommonFixedInterestRate { + function getStaticResolverKey() external pure override returns (bytes32 staticResolverKey_) { + staticResolverKey_ = _CORPORATE_ACTIONS_FIXED_RATE_RESOLVER_KEY; + } +} diff --git a/packages/ats/contracts/contracts/layer_1/corporateActions/kpiLinkedRate/CorporateActionsKpiLinkedRateFacet.sol b/packages/ats/contracts/contracts/layer_1/corporateActions/kpiLinkedRate/CorporateActionsKpiLinkedRateFacet.sol new file mode 100644 index 000000000..507b9300f --- /dev/null +++ b/packages/ats/contracts/contracts/layer_1/corporateActions/kpiLinkedRate/CorporateActionsKpiLinkedRateFacet.sol @@ -0,0 +1,14 @@ +// SPDX-License-Identifier: Apache-2.0 +pragma solidity >=0.8.0 <0.9.0; + +import { CorporateActionsFacetBase } from "../CorporateActionsFacetBase.sol"; +import { _CORPORATE_ACTIONS_KPI_LINKED_RATE_RESOLVER_KEY } from "contracts/layer_1/constants/resolverKeys.sol"; +import { + CommonKpiLinkedInterestRate +} from "contracts/layer_0_extensions/bond/fixingDateInterestRate/kpiInterestRate/kpiLinkedInterestRate/Common.sol"; + +contract CorporateActionsKpiLinkedRateFacet is CorporateActionsFacetBase, CommonKpiLinkedInterestRate { + function getStaticResolverKey() external pure override returns (bytes32 staticResolverKey_) { + staticResolverKey_ = _CORPORATE_ACTIONS_KPI_LINKED_RATE_RESOLVER_KEY; + } +} diff --git a/packages/ats/contracts/contracts/layer_1/corporateActions/standard/CorporateActionsFacet.sol b/packages/ats/contracts/contracts/layer_1/corporateActions/standard/CorporateActionsFacet.sol new file mode 100644 index 000000000..df4f76cf6 --- /dev/null +++ b/packages/ats/contracts/contracts/layer_1/corporateActions/standard/CorporateActionsFacet.sol @@ -0,0 +1,12 @@ +// SPDX-License-Identifier: Apache-2.0 +pragma solidity >=0.8.0 <0.9.0; + +import { CorporateActionsFacetBase } from "../CorporateActionsFacetBase.sol"; +import { _CORPORATE_ACTIONS_RESOLVER_KEY } from "contracts/layer_1/constants/resolverKeys.sol"; +import { Common } from "contracts/layer_0/common/Common.sol"; + +contract CorporateActionsFacet is CorporateActionsFacetBase, Common { + function getStaticResolverKey() external pure override returns (bytes32 staticResolverKey_) { + staticResolverKey_ = _CORPORATE_ACTIONS_RESOLVER_KEY; + } +} diff --git a/packages/ats/contracts/contracts/layer_1/corporateActions/sustainabilityPerformanceTargetRate/CorporateActionsSustainabilityPerformanceTargetRateFacet.sol b/packages/ats/contracts/contracts/layer_1/corporateActions/sustainabilityPerformanceTargetRate/CorporateActionsSustainabilityPerformanceTargetRateFacet.sol new file mode 100644 index 000000000..cde86e29e --- /dev/null +++ b/packages/ats/contracts/contracts/layer_1/corporateActions/sustainabilityPerformanceTargetRate/CorporateActionsSustainabilityPerformanceTargetRateFacet.sol @@ -0,0 +1,19 @@ +// SPDX-License-Identifier: Apache-2.0 +pragma solidity >=0.8.0 <0.9.0; + +import { CorporateActionsFacetBase } from "../CorporateActionsFacetBase.sol"; +import { + _CORPORATE_ACTIONS_SUSTAINABILITY_PERFORMANCE_TARGET_RATE_RESOLVER_KEY +} from "contracts/layer_1/constants/resolverKeys.sol"; +// prettier-ignore +// solhint-disable-next-line max-line-length +import { CommonSustainabilityPerformanceTargetInterestRate } from "contracts/layer_0_extensions/bond/fixingDateInterestRate/kpiInterestRate/sustainabilityPerformanceTargetInterestRate/Common.sol"; + +contract CorporateActionsSustainabilityPerformanceTargetRateFacet is + CorporateActionsFacetBase, + CommonSustainabilityPerformanceTargetInterestRate +{ + function getStaticResolverKey() external pure override returns (bytes32 staticResolverKey_) { + staticResolverKey_ = _CORPORATE_ACTIONS_SUSTAINABILITY_PERFORMANCE_TARGET_RATE_RESOLVER_KEY; + } +} diff --git a/packages/ats/contracts/contracts/layer_1/externalControlLists/ExternalControlListManagement.sol b/packages/ats/contracts/contracts/layer_1/externalControlLists/ExternalControlListManagement.sol index 803a67278..13d476cfa 100644 --- a/packages/ats/contracts/contracts/layer_1/externalControlLists/ExternalControlListManagement.sol +++ b/packages/ats/contracts/contracts/layer_1/externalControlLists/ExternalControlListManagement.sol @@ -2,26 +2,16 @@ pragma solidity >=0.8.0 <0.9.0; import { IExternalControlListManagement } from "../interfaces/externalControlLists/IExternalControlListManagement.sol"; -import { Common } from "../common/Common.sol"; +import { Internals } from "contracts/layer_0/Internals.sol"; import { _CONTROL_LIST_MANAGER_ROLE } from "../constants/roles.sol"; import { _CONTROL_LIST_MANAGEMENT_STORAGE_POSITION } from "../../layer_0/constants/storagePositions.sol"; -abstract contract ExternalControlListManagement is IExternalControlListManagement, Common { +abstract contract ExternalControlListManagement is IExternalControlListManagement, Internals { // solhint-disable-next-line func-name-mixedcase function initialize_ExternalControlLists( address[] calldata _controlLists - ) external override onlyUninitialized(_externalListStorage(_CONTROL_LIST_MANAGEMENT_STORAGE_POSITION).initialized) { - ExternalListDataStorage storage externalControlListDataStorage = _externalListStorage( - _CONTROL_LIST_MANAGEMENT_STORAGE_POSITION - ); - uint256 length = _controlLists.length; - for (uint256 index; index < length; ) { - _addExternalList(_CONTROL_LIST_MANAGEMENT_STORAGE_POSITION, _controlLists[index]); - unchecked { - ++index; - } - } - externalControlListDataStorage.initialized = true; + ) external override onlyUninitialized(_isExternalControlListInitialized()) { + _initialize_ExternalControlLists(_controlLists); } function updateExternalControlLists( @@ -44,7 +34,14 @@ abstract contract ExternalControlListManagement is IExternalControlListManagemen function addExternalControlList( address _controlList - ) external override onlyRole(_CONTROL_LIST_MANAGER_ROLE) onlyUnpaused returns (bool success_) { + ) + external + override + onlyRole(_CONTROL_LIST_MANAGER_ROLE) + onlyUnpaused + validateAddress(_controlList) + returns (bool success_) + { success_ = _addExternalList(_CONTROL_LIST_MANAGEMENT_STORAGE_POSITION, _controlList); if (!success_) { revert ListedControlList(_controlList); diff --git a/packages/ats/contracts/contracts/layer_1/externalControlLists/ExternalControlListManagementFacet.sol b/packages/ats/contracts/contracts/layer_1/externalControlLists/ExternalControlListManagementFacetBase.sol similarity index 80% rename from packages/ats/contracts/contracts/layer_1/externalControlLists/ExternalControlListManagementFacet.sol rename to packages/ats/contracts/contracts/layer_1/externalControlLists/ExternalControlListManagementFacetBase.sol index 8fb778b37..28a3d6932 100644 --- a/packages/ats/contracts/contracts/layer_1/externalControlLists/ExternalControlListManagementFacet.sol +++ b/packages/ats/contracts/contracts/layer_1/externalControlLists/ExternalControlListManagementFacetBase.sol @@ -3,14 +3,9 @@ pragma solidity >=0.8.0 <0.9.0; import { IExternalControlListManagement } from "../interfaces/externalControlLists/IExternalControlListManagement.sol"; import { IStaticFunctionSelectors } from "../../interfaces/resolver/resolverProxy/IStaticFunctionSelectors.sol"; -import { _CONTROL_LIST_MANAGEMENT_RESOLVER_KEY } from "../constants/resolverKeys.sol"; import { ExternalControlListManagement } from "./ExternalControlListManagement.sol"; -contract ExternalControlListManagementFacet is ExternalControlListManagement, IStaticFunctionSelectors { - function getStaticResolverKey() external pure override returns (bytes32 staticResolverKey_) { - staticResolverKey_ = _CONTROL_LIST_MANAGEMENT_RESOLVER_KEY; - } - +abstract contract ExternalControlListManagementFacetBase is ExternalControlListManagement, IStaticFunctionSelectors { function getStaticFunctionSelectors() external pure override returns (bytes4[] memory staticFunctionSelectors_) { uint256 selectorIndex; staticFunctionSelectors_ = new bytes4[](7); diff --git a/packages/ats/contracts/contracts/layer_1/externalControlLists/fixedRate/ExternalControlListManagementFixedRateFacet.sol b/packages/ats/contracts/contracts/layer_1/externalControlLists/fixedRate/ExternalControlListManagementFixedRateFacet.sol new file mode 100644 index 000000000..483953119 --- /dev/null +++ b/packages/ats/contracts/contracts/layer_1/externalControlLists/fixedRate/ExternalControlListManagementFixedRateFacet.sol @@ -0,0 +1,15 @@ +// SPDX-License-Identifier: Apache-2.0 +pragma solidity >=0.8.0 <0.9.0; + +import { ExternalControlListManagementFacetBase } from "../ExternalControlListManagementFacetBase.sol"; +import { _EXTERNAL_CONTROL_LIST_FIXED_RATE_RESOLVER_KEY } from "contracts/layer_1/constants/resolverKeys.sol"; +import { CommonFixedInterestRate } from "contracts/layer_0_extensions/bond/fixedInterestRate/Common.sol"; + +contract ExternalControlListManagementFixedRateFacet is + ExternalControlListManagementFacetBase, + CommonFixedInterestRate +{ + function getStaticResolverKey() external pure override returns (bytes32 staticResolverKey_) { + staticResolverKey_ = _EXTERNAL_CONTROL_LIST_FIXED_RATE_RESOLVER_KEY; + } +} diff --git a/packages/ats/contracts/contracts/layer_1/externalControlLists/kpiLinkedRate/ExternalControlListManagementKpiLinkedRateFacet.sol b/packages/ats/contracts/contracts/layer_1/externalControlLists/kpiLinkedRate/ExternalControlListManagementKpiLinkedRateFacet.sol new file mode 100644 index 000000000..dc68e6c53 --- /dev/null +++ b/packages/ats/contracts/contracts/layer_1/externalControlLists/kpiLinkedRate/ExternalControlListManagementKpiLinkedRateFacet.sol @@ -0,0 +1,17 @@ +// SPDX-License-Identifier: Apache-2.0 +pragma solidity >=0.8.0 <0.9.0; + +import { ExternalControlListManagementFacetBase } from "../ExternalControlListManagementFacetBase.sol"; +import { _EXTERNAL_CONTROL_LIST_KPI_LINKED_RATE_RESOLVER_KEY } from "contracts/layer_1/constants/resolverKeys.sol"; +import { + CommonKpiLinkedInterestRate +} from "contracts/layer_0_extensions/bond/fixingDateInterestRate/kpiInterestRate/kpiLinkedInterestRate/Common.sol"; + +contract ExternalControlListManagementKpiLinkedRateFacet is + ExternalControlListManagementFacetBase, + CommonKpiLinkedInterestRate +{ + function getStaticResolverKey() external pure override returns (bytes32 staticResolverKey_) { + staticResolverKey_ = _EXTERNAL_CONTROL_LIST_KPI_LINKED_RATE_RESOLVER_KEY; + } +} diff --git a/packages/ats/contracts/contracts/layer_1/externalControlLists/standard/ExternalControlListManagementFacet.sol b/packages/ats/contracts/contracts/layer_1/externalControlLists/standard/ExternalControlListManagementFacet.sol new file mode 100644 index 000000000..44afe1e96 --- /dev/null +++ b/packages/ats/contracts/contracts/layer_1/externalControlLists/standard/ExternalControlListManagementFacet.sol @@ -0,0 +1,12 @@ +// SPDX-License-Identifier: Apache-2.0 +pragma solidity >=0.8.0 <0.9.0; + +import { ExternalControlListManagementFacetBase } from "../ExternalControlListManagementFacetBase.sol"; +import { _EXTERNAL_CONTROL_LIST_RESOLVER_KEY } from "contracts/layer_1/constants/resolverKeys.sol"; +import { Common } from "contracts/layer_0/common/Common.sol"; + +contract ExternalControlListManagementFacet is ExternalControlListManagementFacetBase, Common { + function getStaticResolverKey() external pure override returns (bytes32 staticResolverKey_) { + staticResolverKey_ = _EXTERNAL_CONTROL_LIST_RESOLVER_KEY; + } +} diff --git a/packages/ats/contracts/contracts/layer_1/externalControlLists/sustainabilityPerformanceTargetRate/ExternalControlListManagementSustainabilityPerformanceTargetRateFacet.sol b/packages/ats/contracts/contracts/layer_1/externalControlLists/sustainabilityPerformanceTargetRate/ExternalControlListManagementSustainabilityPerformanceTargetRateFacet.sol new file mode 100644 index 000000000..ac685f1b1 --- /dev/null +++ b/packages/ats/contracts/contracts/layer_1/externalControlLists/sustainabilityPerformanceTargetRate/ExternalControlListManagementSustainabilityPerformanceTargetRateFacet.sol @@ -0,0 +1,19 @@ +// SPDX-License-Identifier: Apache-2.0 +pragma solidity >=0.8.0 <0.9.0; + +import { ExternalControlListManagementFacetBase } from "../ExternalControlListManagementFacetBase.sol"; +import { + _EXTERNAL_CONTROL_LIST_SUSTAINABILITY_PERFORMANCE_TARGET_RATE_RESOLVER_KEY +} from "contracts/layer_1/constants/resolverKeys.sol"; +// prettier-ignore +// solhint-disable-next-line max-line-length +import { CommonSustainabilityPerformanceTargetInterestRate } from "contracts/layer_0_extensions/bond/fixingDateInterestRate/kpiInterestRate/sustainabilityPerformanceTargetInterestRate/Common.sol"; + +contract ExternalControlListManagementSustainabilityPerformanceTargetRateFacet is + ExternalControlListManagementFacetBase, + CommonSustainabilityPerformanceTargetInterestRate +{ + function getStaticResolverKey() external pure override returns (bytes32 staticResolverKey_) { + staticResolverKey_ = _EXTERNAL_CONTROL_LIST_SUSTAINABILITY_PERFORMANCE_TARGET_RATE_RESOLVER_KEY; + } +} diff --git a/packages/ats/contracts/contracts/layer_1/externalKycLists/ExternalKycListManagement.sol b/packages/ats/contracts/contracts/layer_1/externalKycLists/ExternalKycListManagement.sol index fe74d8240..aba90fd68 100644 --- a/packages/ats/contracts/contracts/layer_1/externalKycLists/ExternalKycListManagement.sol +++ b/packages/ats/contracts/contracts/layer_1/externalKycLists/ExternalKycListManagement.sol @@ -2,27 +2,17 @@ pragma solidity >=0.8.0 <0.9.0; import { IExternalKycListManagement } from "../interfaces/externalKycLists/IExternalKycListManagement.sol"; -import { Common } from "../common/Common.sol"; +import { Internals } from "contracts/layer_0/Internals.sol"; import { _KYC_MANAGER_ROLE } from "../constants/roles.sol"; import { _KYC_MANAGEMENT_STORAGE_POSITION } from "../../layer_0/constants/storagePositions.sol"; import { IKyc } from "../interfaces/kyc/IKyc.sol"; -abstract contract ExternalKycListManagement is IExternalKycListManagement, Common { +abstract contract ExternalKycListManagement is IExternalKycListManagement, Internals { // solhint-disable-next-line func-name-mixedcase function initialize_ExternalKycLists( address[] calldata _kycLists - ) external override onlyUninitialized(_externalListStorage(_KYC_MANAGEMENT_STORAGE_POSITION).initialized) { - ExternalListDataStorage storage externalKycListDataStorage = _externalListStorage( - _KYC_MANAGEMENT_STORAGE_POSITION - ); - uint256 length = _kycLists.length; - for (uint256 index; index < length; ) { - _addExternalList(_KYC_MANAGEMENT_STORAGE_POSITION, _kycLists[index]); - unchecked { - ++index; - } - } - externalKycListDataStorage.initialized = true; + ) external override onlyUninitialized(_isKycExternalInitialized()) { + _initialize_ExternalKycLists(_kycLists); } function updateExternalKycLists( @@ -45,7 +35,7 @@ abstract contract ExternalKycListManagement is IExternalKycListManagement, Commo function addExternalKycList( address _kycLists - ) external override onlyRole(_KYC_MANAGER_ROLE) onlyUnpaused returns (bool success_) { + ) external override onlyRole(_KYC_MANAGER_ROLE) onlyUnpaused validateAddress(_kycLists) returns (bool success_) { success_ = _addExternalList(_KYC_MANAGEMENT_STORAGE_POSITION, _kycLists); if (!success_) { revert ListedKycList(_kycLists); diff --git a/packages/ats/contracts/contracts/layer_1/externalKycLists/ExternalKycListManagementFacet.sol b/packages/ats/contracts/contracts/layer_1/externalKycLists/ExternalKycListManagementFacetBase.sol similarity index 82% rename from packages/ats/contracts/contracts/layer_1/externalKycLists/ExternalKycListManagementFacet.sol rename to packages/ats/contracts/contracts/layer_1/externalKycLists/ExternalKycListManagementFacetBase.sol index fc4aaac85..396f331f1 100644 --- a/packages/ats/contracts/contracts/layer_1/externalKycLists/ExternalKycListManagementFacet.sol +++ b/packages/ats/contracts/contracts/layer_1/externalKycLists/ExternalKycListManagementFacetBase.sol @@ -3,14 +3,9 @@ pragma solidity >=0.8.0 <0.9.0; import { IExternalKycListManagement } from "../interfaces/externalKycLists/IExternalKycListManagement.sol"; import { IStaticFunctionSelectors } from "../../interfaces/resolver/resolverProxy/IStaticFunctionSelectors.sol"; -import { _KYC_MANAGEMENT_RESOLVER_KEY } from "../constants/resolverKeys.sol"; import { ExternalKycListManagement } from "./ExternalKycListManagement.sol"; -contract ExternalKycListManagementFacet is ExternalKycListManagement, IStaticFunctionSelectors { - function getStaticResolverKey() external pure override returns (bytes32 staticResolverKey_) { - staticResolverKey_ = _KYC_MANAGEMENT_RESOLVER_KEY; - } - +abstract contract ExternalKycListManagementFacetBase is ExternalKycListManagement, IStaticFunctionSelectors { function getStaticFunctionSelectors() external pure override returns (bytes4[] memory staticFunctionSelectors_) { uint256 selectorIndex; staticFunctionSelectors_ = new bytes4[](8); diff --git a/packages/ats/contracts/contracts/layer_1/externalKycLists/fixedRate/ExternalKycListManagementFixedRateFacet.sol b/packages/ats/contracts/contracts/layer_1/externalKycLists/fixedRate/ExternalKycListManagementFixedRateFacet.sol new file mode 100644 index 000000000..5c93c7139 --- /dev/null +++ b/packages/ats/contracts/contracts/layer_1/externalKycLists/fixedRate/ExternalKycListManagementFixedRateFacet.sol @@ -0,0 +1,12 @@ +// SPDX-License-Identifier: Apache-2.0 +pragma solidity >=0.8.0 <0.9.0; + +import { ExternalKycListManagementFacetBase } from "../ExternalKycListManagementFacetBase.sol"; +import { _EXTERNAL_KYC_LIST_FIXED_RATE_RESOLVER_KEY } from "contracts/layer_1/constants/resolverKeys.sol"; +import { CommonFixedInterestRate } from "contracts/layer_0_extensions/bond/fixedInterestRate/Common.sol"; + +contract ExternalKycListManagementFixedRateFacet is ExternalKycListManagementFacetBase, CommonFixedInterestRate { + function getStaticResolverKey() external pure override returns (bytes32 staticResolverKey_) { + staticResolverKey_ = _EXTERNAL_KYC_LIST_FIXED_RATE_RESOLVER_KEY; + } +} diff --git a/packages/ats/contracts/contracts/layer_1/externalKycLists/kpiLinkedRate/ExternalKycListManagementKpiLinkedRateFacet.sol b/packages/ats/contracts/contracts/layer_1/externalKycLists/kpiLinkedRate/ExternalKycListManagementKpiLinkedRateFacet.sol new file mode 100644 index 000000000..d8e7af1e7 --- /dev/null +++ b/packages/ats/contracts/contracts/layer_1/externalKycLists/kpiLinkedRate/ExternalKycListManagementKpiLinkedRateFacet.sol @@ -0,0 +1,17 @@ +// SPDX-License-Identifier: Apache-2.0 +pragma solidity >=0.8.0 <0.9.0; + +import { ExternalKycListManagementFacetBase } from "../ExternalKycListManagementFacetBase.sol"; +import { _EXTERNAL_KYC_LIST_KPI_LINKED_RATE_RESOLVER_KEY } from "contracts/layer_1/constants/resolverKeys.sol"; +import { + CommonKpiLinkedInterestRate +} from "contracts/layer_0_extensions/bond/fixingDateInterestRate/kpiInterestRate/kpiLinkedInterestRate/Common.sol"; + +contract ExternalKycListManagementKpiLinkedRateFacet is + ExternalKycListManagementFacetBase, + CommonKpiLinkedInterestRate +{ + function getStaticResolverKey() external pure override returns (bytes32 staticResolverKey_) { + staticResolverKey_ = _EXTERNAL_KYC_LIST_KPI_LINKED_RATE_RESOLVER_KEY; + } +} diff --git a/packages/ats/contracts/contracts/layer_1/externalKycLists/standard/ExternalKycListManagementFacet.sol b/packages/ats/contracts/contracts/layer_1/externalKycLists/standard/ExternalKycListManagementFacet.sol new file mode 100644 index 000000000..a95dd7284 --- /dev/null +++ b/packages/ats/contracts/contracts/layer_1/externalKycLists/standard/ExternalKycListManagementFacet.sol @@ -0,0 +1,12 @@ +// SPDX-License-Identifier: Apache-2.0 +pragma solidity >=0.8.0 <0.9.0; + +import { ExternalKycListManagementFacetBase } from "../ExternalKycListManagementFacetBase.sol"; +import { _EXTERNAL_KYC_LIST_RESOLVER_KEY } from "contracts/layer_1/constants/resolverKeys.sol"; +import { Common } from "contracts/layer_0/common/Common.sol"; + +contract ExternalKycListManagementFacet is ExternalKycListManagementFacetBase, Common { + function getStaticResolverKey() external pure override returns (bytes32 staticResolverKey_) { + staticResolverKey_ = _EXTERNAL_KYC_LIST_RESOLVER_KEY; + } +} diff --git a/packages/ats/contracts/contracts/layer_1/externalKycLists/sustainabilityPerformanceTargetRate/ExternalKycListManagementSustainabilityPerformanceTargetRateFacet.sol b/packages/ats/contracts/contracts/layer_1/externalKycLists/sustainabilityPerformanceTargetRate/ExternalKycListManagementSustainabilityPerformanceTargetRateFacet.sol new file mode 100644 index 000000000..b18c39f38 --- /dev/null +++ b/packages/ats/contracts/contracts/layer_1/externalKycLists/sustainabilityPerformanceTargetRate/ExternalKycListManagementSustainabilityPerformanceTargetRateFacet.sol @@ -0,0 +1,19 @@ +// SPDX-License-Identifier: Apache-2.0 +pragma solidity >=0.8.0 <0.9.0; + +import { ExternalKycListManagementFacetBase } from "../ExternalKycListManagementFacetBase.sol"; +import { + _EXTERNAL_KYC_LIST_SUSTAINABILITY_PERFORMANCE_TARGET_RATE_RESOLVER_KEY +} from "contracts/layer_1/constants/resolverKeys.sol"; +// prettier-ignore +// solhint-disable-next-line max-line-length +import { CommonSustainabilityPerformanceTargetInterestRate } from "contracts/layer_0_extensions/bond/fixingDateInterestRate/kpiInterestRate/sustainabilityPerformanceTargetInterestRate/Common.sol"; + +contract ExternalKycListManagementSustainabilityPerformanceTargetRateFacet is + ExternalKycListManagementFacetBase, + CommonSustainabilityPerformanceTargetInterestRate +{ + function getStaticResolverKey() external pure override returns (bytes32 staticResolverKey_) { + staticResolverKey_ = _EXTERNAL_KYC_LIST_SUSTAINABILITY_PERFORMANCE_TARGET_RATE_RESOLVER_KEY; + } +} diff --git a/packages/ats/contracts/contracts/layer_1/externalPauses/ExternalPauseManagement.sol b/packages/ats/contracts/contracts/layer_1/externalPauses/ExternalPauseManagement.sol index 986a1408a..2c3ba33a4 100644 --- a/packages/ats/contracts/contracts/layer_1/externalPauses/ExternalPauseManagement.sol +++ b/packages/ats/contracts/contracts/layer_1/externalPauses/ExternalPauseManagement.sol @@ -2,26 +2,16 @@ pragma solidity >=0.8.0 <0.9.0; import { IExternalPauseManagement } from "../interfaces/externalPauses/IExternalPauseManagement.sol"; -import { Common } from "../common/Common.sol"; +import { Internals } from "contracts/layer_0/Internals.sol"; import { _PAUSE_MANAGER_ROLE } from "../constants/roles.sol"; import { _PAUSE_MANAGEMENT_STORAGE_POSITION } from "../../layer_0/constants/storagePositions.sol"; -abstract contract ExternalPauseManagement is IExternalPauseManagement, Common { +abstract contract ExternalPauseManagement is IExternalPauseManagement, Internals { // solhint-disable-next-line func-name-mixedcase function initialize_ExternalPauses( address[] calldata _pauses - ) external override onlyUninitialized(_externalListStorage(_PAUSE_MANAGEMENT_STORAGE_POSITION).initialized) { - ExternalListDataStorage storage externalPauseDataStorage = _externalListStorage( - _PAUSE_MANAGEMENT_STORAGE_POSITION - ); - uint256 length = _pauses.length; - for (uint256 index; index < length; ) { - _addExternalList(_PAUSE_MANAGEMENT_STORAGE_POSITION, _pauses[index]); - unchecked { - ++index; - } - } - externalPauseDataStorage.initialized = true; + ) external override onlyUninitialized(_isExternalPauseInitialized()) { + _initialize_ExternalPauses(_pauses); } function updateExternalPauses( @@ -44,7 +34,7 @@ abstract contract ExternalPauseManagement is IExternalPauseManagement, Common { function addExternalPause( address _pause - ) external override onlyRole(_PAUSE_MANAGER_ROLE) onlyUnpaused returns (bool success_) { + ) external override onlyRole(_PAUSE_MANAGER_ROLE) onlyUnpaused validateAddress(_pause) returns (bool success_) { success_ = _addExternalList(_PAUSE_MANAGEMENT_STORAGE_POSITION, _pause); if (!success_) { revert ListedPause(_pause); diff --git a/packages/ats/contracts/contracts/layer_1/externalPauses/ExternalPauseManagementFacet.sol b/packages/ats/contracts/contracts/layer_1/externalPauses/ExternalPauseManagementFacetBase.sol similarity index 81% rename from packages/ats/contracts/contracts/layer_1/externalPauses/ExternalPauseManagementFacet.sol rename to packages/ats/contracts/contracts/layer_1/externalPauses/ExternalPauseManagementFacetBase.sol index bb9068869..518d4f465 100644 --- a/packages/ats/contracts/contracts/layer_1/externalPauses/ExternalPauseManagementFacet.sol +++ b/packages/ats/contracts/contracts/layer_1/externalPauses/ExternalPauseManagementFacetBase.sol @@ -3,14 +3,9 @@ pragma solidity >=0.8.0 <0.9.0; import { IExternalPauseManagement } from "../interfaces/externalPauses/IExternalPauseManagement.sol"; import { IStaticFunctionSelectors } from "../../interfaces/resolver/resolverProxy/IStaticFunctionSelectors.sol"; -import { _PAUSE_MANAGEMENT_RESOLVER_KEY } from "../constants/resolverKeys.sol"; import { ExternalPauseManagement } from "./ExternalPauseManagement.sol"; -contract ExternalPauseManagementFacet is ExternalPauseManagement, IStaticFunctionSelectors { - function getStaticResolverKey() external pure override returns (bytes32 staticResolverKey_) { - staticResolverKey_ = _PAUSE_MANAGEMENT_RESOLVER_KEY; - } - +abstract contract ExternalPauseManagementFacetBase is ExternalPauseManagement, IStaticFunctionSelectors { function getStaticFunctionSelectors() external pure override returns (bytes4[] memory staticFunctionSelectors_) { uint256 selectorIndex; staticFunctionSelectors_ = new bytes4[](7); diff --git a/packages/ats/contracts/contracts/layer_1/externalPauses/fixedRate/ExternalPauseManagementFixedRateFacet.sol b/packages/ats/contracts/contracts/layer_1/externalPauses/fixedRate/ExternalPauseManagementFixedRateFacet.sol new file mode 100644 index 000000000..396e8be4c --- /dev/null +++ b/packages/ats/contracts/contracts/layer_1/externalPauses/fixedRate/ExternalPauseManagementFixedRateFacet.sol @@ -0,0 +1,12 @@ +// SPDX-License-Identifier: Apache-2.0 +pragma solidity >=0.8.0 <0.9.0; + +import { ExternalPauseManagementFacetBase } from "../ExternalPauseManagementFacetBase.sol"; +import { _EXTERNAL_PAUSE_FIXED_RATE_RESOLVER_KEY } from "contracts/layer_1/constants/resolverKeys.sol"; +import { CommonFixedInterestRate } from "contracts/layer_0_extensions/bond/fixedInterestRate/Common.sol"; + +contract ExternalPauseManagementFixedRateFacet is ExternalPauseManagementFacetBase, CommonFixedInterestRate { + function getStaticResolverKey() external pure override returns (bytes32 staticResolverKey_) { + staticResolverKey_ = _EXTERNAL_PAUSE_FIXED_RATE_RESOLVER_KEY; + } +} diff --git a/packages/ats/contracts/contracts/layer_1/externalPauses/kpiLinkedRate/ExternalPauseManagementKpiLinkedRateFacet.sol b/packages/ats/contracts/contracts/layer_1/externalPauses/kpiLinkedRate/ExternalPauseManagementKpiLinkedRateFacet.sol new file mode 100644 index 000000000..41544ff7a --- /dev/null +++ b/packages/ats/contracts/contracts/layer_1/externalPauses/kpiLinkedRate/ExternalPauseManagementKpiLinkedRateFacet.sol @@ -0,0 +1,14 @@ +// SPDX-License-Identifier: Apache-2.0 +pragma solidity >=0.8.0 <0.9.0; + +import { ExternalPauseManagementFacetBase } from "../ExternalPauseManagementFacetBase.sol"; +import { _EXTERNAL_PAUSE_KPI_LINKED_RATE_RESOLVER_KEY } from "contracts/layer_1/constants/resolverKeys.sol"; +import { + CommonKpiLinkedInterestRate +} from "contracts/layer_0_extensions/bond/fixingDateInterestRate/kpiInterestRate/kpiLinkedInterestRate/Common.sol"; + +contract ExternalPauseManagementKpiLinkedRateFacet is ExternalPauseManagementFacetBase, CommonKpiLinkedInterestRate { + function getStaticResolverKey() external pure override returns (bytes32 staticResolverKey_) { + staticResolverKey_ = _EXTERNAL_PAUSE_KPI_LINKED_RATE_RESOLVER_KEY; + } +} diff --git a/packages/ats/contracts/contracts/layer_1/externalPauses/standard/ExternalPauseManagementFacet.sol b/packages/ats/contracts/contracts/layer_1/externalPauses/standard/ExternalPauseManagementFacet.sol new file mode 100644 index 000000000..55681d16d --- /dev/null +++ b/packages/ats/contracts/contracts/layer_1/externalPauses/standard/ExternalPauseManagementFacet.sol @@ -0,0 +1,12 @@ +// SPDX-License-Identifier: Apache-2.0 +pragma solidity >=0.8.0 <0.9.0; + +import { ExternalPauseManagementFacetBase } from "../ExternalPauseManagementFacetBase.sol"; +import { _EXTERNAL_PAUSE_RESOLVER_KEY } from "contracts/layer_1/constants/resolverKeys.sol"; +import { Common } from "contracts/layer_0/common/Common.sol"; + +contract ExternalPauseManagementFacet is ExternalPauseManagementFacetBase, Common { + function getStaticResolverKey() external pure override returns (bytes32 staticResolverKey_) { + staticResolverKey_ = _EXTERNAL_PAUSE_RESOLVER_KEY; + } +} diff --git a/packages/ats/contracts/contracts/layer_1/externalPauses/sustainabilityPerformanceTargetRate/ExternalPauseManagementSustainabilityPerformanceTargetRateFacet.sol b/packages/ats/contracts/contracts/layer_1/externalPauses/sustainabilityPerformanceTargetRate/ExternalPauseManagementSustainabilityPerformanceTargetRateFacet.sol new file mode 100644 index 000000000..acd50fb08 --- /dev/null +++ b/packages/ats/contracts/contracts/layer_1/externalPauses/sustainabilityPerformanceTargetRate/ExternalPauseManagementSustainabilityPerformanceTargetRateFacet.sol @@ -0,0 +1,19 @@ +// SPDX-License-Identifier: Apache-2.0 +pragma solidity >=0.8.0 <0.9.0; + +import { ExternalPauseManagementFacetBase } from "../ExternalPauseManagementFacetBase.sol"; +import { + _EXTERNAL_PAUSE_SUSTAINABILITY_PERFORMANCE_TARGET_RATE_RESOLVER_KEY +} from "contracts/layer_1/constants/resolverKeys.sol"; +// prettier-ignore +// solhint-disable-next-line max-line-length +import { CommonSustainabilityPerformanceTargetInterestRate } from "contracts/layer_0_extensions/bond/fixingDateInterestRate/kpiInterestRate/sustainabilityPerformanceTargetInterestRate/Common.sol"; + +contract ExternalPauseManagementSustainabilityPerformanceTargetRateFacet is + ExternalPauseManagementFacetBase, + CommonSustainabilityPerformanceTargetInterestRate +{ + function getStaticResolverKey() external pure override returns (bytes32 staticResolverKey_) { + staticResolverKey_ = _EXTERNAL_PAUSE_SUSTAINABILITY_PERFORMANCE_TARGET_RATE_RESOLVER_KEY; + } +} diff --git a/packages/ats/contracts/contracts/layer_1/freeze/Freeze.sol b/packages/ats/contracts/contracts/layer_1/freeze/Freeze.sol index a7dbcfd0c..83166f372 100644 --- a/packages/ats/contracts/contracts/layer_1/freeze/Freeze.sol +++ b/packages/ats/contracts/contracts/layer_1/freeze/Freeze.sol @@ -1,13 +1,13 @@ // SPDX-License-Identifier: Apache-2.0 pragma solidity >=0.8.0 <0.9.0; -import { Common } from "../common/Common.sol"; +import { Internals } from "contracts/layer_0/Internals.sol"; import { IFreeze } from "../interfaces/freeze/IFreeze.sol"; import { _FREEZE_MANAGER_ROLE, _AGENT_ROLE } from "../constants/roles.sol"; import { _DEFAULT_PARTITION } from "../../layer_0/constants/values.sol"; -abstract contract Freeze is IFreeze, Common { +abstract contract Freeze is IFreeze, Internals { // ====== External functions (state-changing) ====== function setAddressFrozen( @@ -62,7 +62,7 @@ abstract contract Freeze is IFreeze, Common { function batchSetAddressFrozen( address[] calldata _userAddresses, bool[] calldata _freeze - ) external onlyValidInputBoolArrayLength(_userAddresses, _freeze) { + ) external onlyUnpaused onlyValidInputBoolArrayLength(_userAddresses, _freeze) { { bytes32[] memory roles = new bytes32[](2); roles[0] = _FREEZE_MANAGER_ROLE; @@ -70,6 +70,7 @@ abstract contract Freeze is IFreeze, Common { _checkAnyRole(roles, _msgSender()); } for (uint256 i = 0; i < _userAddresses.length; i++) { + _checkValidAddress(_userAddresses[i]); _setAddressFrozen(_userAddresses[i], _freeze[i]); emit AddressFrozen(_userAddresses[i], _freeze[i], _msgSender()); } diff --git a/packages/ats/contracts/contracts/layer_1/freeze/FreezeFacet.sol b/packages/ats/contracts/contracts/layer_1/freeze/FreezeFacetBase.sol similarity index 82% rename from packages/ats/contracts/contracts/layer_1/freeze/FreezeFacet.sol rename to packages/ats/contracts/contracts/layer_1/freeze/FreezeFacetBase.sol index 1ed72c944..1c8e852cf 100644 --- a/packages/ats/contracts/contracts/layer_1/freeze/FreezeFacet.sol +++ b/packages/ats/contracts/contracts/layer_1/freeze/FreezeFacetBase.sol @@ -1,15 +1,10 @@ // SPDX-License-Identifier: Apache-2.0 pragma solidity >=0.8.0 <0.9.0; -import { _FREEZE_RESOLVER_KEY } from "../constants/resolverKeys.sol"; import { IStaticFunctionSelectors } from "../../interfaces/resolver/resolverProxy/IStaticFunctionSelectors.sol"; import { IFreeze } from "../interfaces/freeze/IFreeze.sol"; import { Freeze } from "./Freeze.sol"; -contract FreezeFacet is Freeze, IStaticFunctionSelectors { - function getStaticResolverKey() external pure override returns (bytes32 staticResolverKey_) { - staticResolverKey_ = _FREEZE_RESOLVER_KEY; - } - +abstract contract FreezeFacetBase is Freeze, IStaticFunctionSelectors { function getStaticFunctionSelectors() external pure override returns (bytes4[] memory staticFunctionSelectors_) { staticFunctionSelectors_ = new bytes4[](7); uint256 selectorsIndex; diff --git a/packages/ats/contracts/contracts/layer_1/freeze/fixedRate/FreezeFixedRateFacet.sol b/packages/ats/contracts/contracts/layer_1/freeze/fixedRate/FreezeFixedRateFacet.sol new file mode 100644 index 000000000..4046610f5 --- /dev/null +++ b/packages/ats/contracts/contracts/layer_1/freeze/fixedRate/FreezeFixedRateFacet.sol @@ -0,0 +1,12 @@ +// SPDX-License-Identifier: Apache-2.0 +pragma solidity >=0.8.0 <0.9.0; + +import { FreezeFacetBase } from "../FreezeFacetBase.sol"; +import { _FREEZE_FIXED_RATE_RESOLVER_KEY } from "contracts/layer_1/constants/resolverKeys.sol"; +import { CommonFixedInterestRate } from "contracts/layer_0_extensions/bond/fixedInterestRate/Common.sol"; + +contract FreezeFixedRateFacet is FreezeFacetBase, CommonFixedInterestRate { + function getStaticResolverKey() external pure override returns (bytes32 staticResolverKey_) { + staticResolverKey_ = _FREEZE_FIXED_RATE_RESOLVER_KEY; + } +} diff --git a/packages/ats/contracts/contracts/layer_1/freeze/kpiLinkedRate/FreezeKpiLinkedRateFacet.sol b/packages/ats/contracts/contracts/layer_1/freeze/kpiLinkedRate/FreezeKpiLinkedRateFacet.sol new file mode 100644 index 000000000..528055763 --- /dev/null +++ b/packages/ats/contracts/contracts/layer_1/freeze/kpiLinkedRate/FreezeKpiLinkedRateFacet.sol @@ -0,0 +1,14 @@ +// SPDX-License-Identifier: Apache-2.0 +pragma solidity >=0.8.0 <0.9.0; + +import { FreezeFacetBase } from "../FreezeFacetBase.sol"; +import { _FREEZE_KPI_LINKED_RATE_RESOLVER_KEY } from "contracts/layer_1/constants/resolverKeys.sol"; +import { + CommonKpiLinkedInterestRate +} from "contracts/layer_0_extensions/bond/fixingDateInterestRate/kpiInterestRate/kpiLinkedInterestRate/Common.sol"; + +contract FreezeKpiLinkedRateFacet is FreezeFacetBase, CommonKpiLinkedInterestRate { + function getStaticResolverKey() external pure override returns (bytes32 staticResolverKey_) { + staticResolverKey_ = _FREEZE_KPI_LINKED_RATE_RESOLVER_KEY; + } +} diff --git a/packages/ats/contracts/contracts/layer_1/freeze/standard/FreezeFacet.sol b/packages/ats/contracts/contracts/layer_1/freeze/standard/FreezeFacet.sol new file mode 100644 index 000000000..1c6e74b15 --- /dev/null +++ b/packages/ats/contracts/contracts/layer_1/freeze/standard/FreezeFacet.sol @@ -0,0 +1,12 @@ +// SPDX-License-Identifier: Apache-2.0 +pragma solidity >=0.8.0 <0.9.0; + +import { FreezeFacetBase } from "../FreezeFacetBase.sol"; +import { _FREEZE_RESOLVER_KEY } from "contracts/layer_1/constants/resolverKeys.sol"; +import { Common } from "contracts/layer_0/common/Common.sol"; + +contract FreezeFacet is FreezeFacetBase, Common { + function getStaticResolverKey() external pure override returns (bytes32 staticResolverKey_) { + staticResolverKey_ = _FREEZE_RESOLVER_KEY; + } +} diff --git a/packages/ats/contracts/contracts/layer_1/freeze/sustainabilityPerformanceTargetRate/FreezeSustainabilityPerformanceTargetRateFacet.sol b/packages/ats/contracts/contracts/layer_1/freeze/sustainabilityPerformanceTargetRate/FreezeSustainabilityPerformanceTargetRateFacet.sol new file mode 100644 index 000000000..2a3fb83a9 --- /dev/null +++ b/packages/ats/contracts/contracts/layer_1/freeze/sustainabilityPerformanceTargetRate/FreezeSustainabilityPerformanceTargetRateFacet.sol @@ -0,0 +1,19 @@ +// SPDX-License-Identifier: Apache-2.0 +pragma solidity >=0.8.0 <0.9.0; + +import { FreezeFacetBase } from "../FreezeFacetBase.sol"; +import { + _FREEZE_SUSTAINABILITY_PERFORMANCE_TARGET_RATE_RESOLVER_KEY +} from "contracts/layer_1/constants/resolverKeys.sol"; +// prettier-ignore +// solhint-disable-next-line max-line-length +import { CommonSustainabilityPerformanceTargetInterestRate } from "contracts/layer_0_extensions/bond/fixingDateInterestRate/kpiInterestRate/sustainabilityPerformanceTargetInterestRate/Common.sol"; + +contract FreezeSustainabilityPerformanceTargetRateFacet is + FreezeFacetBase, + CommonSustainabilityPerformanceTargetInterestRate +{ + function getStaticResolverKey() external pure override returns (bytes32 staticResolverKey_) { + staticResolverKey_ = _FREEZE_SUSTAINABILITY_PERFORMANCE_TARGET_RATE_RESOLVER_KEY; + } +} diff --git a/packages/ats/contracts/contracts/layer_1/hold/HoldManagement.sol b/packages/ats/contracts/contracts/layer_1/hold/HoldManagement.sol index ba042c790..84196faa5 100644 --- a/packages/ats/contracts/contracts/layer_1/hold/HoldManagement.sol +++ b/packages/ats/contracts/contracts/layer_1/hold/HoldManagement.sol @@ -4,10 +4,10 @@ pragma solidity >=0.8.0 <0.9.0; import { _CONTROLLER_ROLE } from "../constants/roles.sol"; import { Hold, ProtectedHold } from "../interfaces/hold/IHold.sol"; import { IHoldManagement } from "../interfaces/hold/IHoldManagement.sol"; -import { Common } from "../common/Common.sol"; +import { Internals } from "contracts/layer_0/Internals.sol"; import { ThirdPartyType } from "../../layer_0/common/types/ThirdPartyType.sol"; -abstract contract HoldManagement is IHoldManagement, Common { +abstract contract HoldManagement is IHoldManagement, Internals { function operatorCreateHoldByPartition( bytes32 _partition, address _from, diff --git a/packages/ats/contracts/contracts/layer_1/hold/HoldManagementFacet.sol b/packages/ats/contracts/contracts/layer_1/hold/HoldManagementFacetBase.sol similarity index 77% rename from packages/ats/contracts/contracts/layer_1/hold/HoldManagementFacet.sol rename to packages/ats/contracts/contracts/layer_1/hold/HoldManagementFacetBase.sol index 07b5fc2c9..f657295c3 100644 --- a/packages/ats/contracts/contracts/layer_1/hold/HoldManagementFacet.sol +++ b/packages/ats/contracts/contracts/layer_1/hold/HoldManagementFacetBase.sol @@ -1,16 +1,11 @@ // SPDX-License-Identifier: Apache-2.0 pragma solidity >=0.8.0 <0.9.0; -import { _HOLD_MANAGEMENT_RESOLVER_KEY } from "../constants/resolverKeys.sol"; import { IStaticFunctionSelectors } from "../../interfaces/resolver/resolverProxy/IStaticFunctionSelectors.sol"; import { IHoldManagement } from "../interfaces/hold/IHoldManagement.sol"; import { HoldManagement } from "./HoldManagement.sol"; -contract HoldManagementFacet is IStaticFunctionSelectors, HoldManagement { - function getStaticResolverKey() external pure override returns (bytes32 staticResolverKey_) { - staticResolverKey_ = _HOLD_MANAGEMENT_RESOLVER_KEY; - } - +abstract contract HoldManagementFacetBase is IStaticFunctionSelectors, HoldManagement { function getStaticFunctionSelectors() external pure override returns (bytes4[] memory staticFunctionSelectors_) { uint256 selectorIndex; staticFunctionSelectors_ = new bytes4[](3); diff --git a/packages/ats/contracts/contracts/layer_1/hold/HoldRead.sol b/packages/ats/contracts/contracts/layer_1/hold/HoldRead.sol index dd1659b00..8692ef045 100644 --- a/packages/ats/contracts/contracts/layer_1/hold/HoldRead.sol +++ b/packages/ats/contracts/contracts/layer_1/hold/HoldRead.sol @@ -4,9 +4,9 @@ pragma solidity >=0.8.0 <0.9.0; import { HoldIdentifier } from "../interfaces/hold/IHold.sol"; import { IHoldRead } from "../interfaces/hold/IHoldRead.sol"; import { ThirdPartyType } from "../../layer_0/common/types/ThirdPartyType.sol"; -import { Common } from "../common/Common.sol"; +import { Internals } from "contracts/layer_0/Internals.sol"; -abstract contract HoldRead is IHoldRead, Common { +abstract contract HoldRead is IHoldRead, Internals { function getHeldAmountFor(address _tokenHolder) external view override returns (uint256 amount_) { return _getHeldAmountForAdjusted(_tokenHolder); } diff --git a/packages/ats/contracts/contracts/layer_1/hold/HoldReadFacet.sol b/packages/ats/contracts/contracts/layer_1/hold/HoldReadFacetBase.sol similarity index 81% rename from packages/ats/contracts/contracts/layer_1/hold/HoldReadFacet.sol rename to packages/ats/contracts/contracts/layer_1/hold/HoldReadFacetBase.sol index d261908eb..b362d6f7b 100644 --- a/packages/ats/contracts/contracts/layer_1/hold/HoldReadFacet.sol +++ b/packages/ats/contracts/contracts/layer_1/hold/HoldReadFacetBase.sol @@ -1,16 +1,11 @@ // SPDX-License-Identifier: Apache-2.0 pragma solidity >=0.8.0 <0.9.0; -import { _HOLD_READ_RESOLVER_KEY } from "../constants/resolverKeys.sol"; import { IStaticFunctionSelectors } from "../../interfaces/resolver/resolverProxy/IStaticFunctionSelectors.sol"; import { IHoldRead } from "../interfaces/hold/IHoldRead.sol"; import { HoldRead } from "./HoldRead.sol"; -contract HoldReadFacet is IStaticFunctionSelectors, HoldRead { - function getStaticResolverKey() external pure override returns (bytes32 staticResolverKey_) { - staticResolverKey_ = _HOLD_READ_RESOLVER_KEY; - } - +abstract contract HoldReadFacetBase is IStaticFunctionSelectors, HoldRead { function getStaticFunctionSelectors() external pure override returns (bytes4[] memory staticFunctionSelectors_) { uint256 selectorIndex; staticFunctionSelectors_ = new bytes4[](6); diff --git a/packages/ats/contracts/contracts/layer_1/hold/HoldTokenHolder.sol b/packages/ats/contracts/contracts/layer_1/hold/HoldTokenHolder.sol index f9d563376..fcbcec7ad 100644 --- a/packages/ats/contracts/contracts/layer_1/hold/HoldTokenHolder.sol +++ b/packages/ats/contracts/contracts/layer_1/hold/HoldTokenHolder.sol @@ -3,10 +3,10 @@ pragma solidity >=0.8.0 <0.9.0; import { Hold, HoldIdentifier } from "../interfaces/hold/IHold.sol"; import { IHoldTokenHolder } from "../interfaces/hold/IHoldTokenHolder.sol"; -import { Common } from "../common/Common.sol"; +import { Internals } from "contracts/layer_0/Internals.sol"; import { ThirdPartyType } from "../../layer_0/common/types/ThirdPartyType.sol"; -abstract contract HoldTokenHolder is IHoldTokenHolder, Common { +abstract contract HoldTokenHolder is IHoldTokenHolder, Internals { function createHoldByPartition( bytes32 _partition, Hold calldata _hold @@ -75,9 +75,9 @@ abstract contract HoldTokenHolder is IHoldTokenHolder, Common { onlyIdentified(_holdIdentifier.tokenHolder, _to) onlyCompliant(address(0), _to, false) onlyWithValidHoldId(_holdIdentifier) - returns (bool success_) + returns (bool success_, bytes32 partition_) { - success_ = _executeHoldByPartition(_holdIdentifier, _to, _amount); + (success_, partition_) = _executeHoldByPartition(_holdIdentifier, _to, _amount); emit HoldByPartitionExecuted( _holdIdentifier.tokenHolder, diff --git a/packages/ats/contracts/contracts/layer_1/hold/HoldTokenHolderFacet.sol b/packages/ats/contracts/contracts/layer_1/hold/HoldTokenHolderFacetBase.sol similarity index 79% rename from packages/ats/contracts/contracts/layer_1/hold/HoldTokenHolderFacet.sol rename to packages/ats/contracts/contracts/layer_1/hold/HoldTokenHolderFacetBase.sol index d85bed59b..118c2c3e4 100644 --- a/packages/ats/contracts/contracts/layer_1/hold/HoldTokenHolderFacet.sol +++ b/packages/ats/contracts/contracts/layer_1/hold/HoldTokenHolderFacetBase.sol @@ -1,16 +1,11 @@ // SPDX-License-Identifier: Apache-2.0 pragma solidity >=0.8.0 <0.9.0; -import { _HOLD_TOKEN_HOLDER_RESOLVER_KEY } from "../constants/resolverKeys.sol"; import { IStaticFunctionSelectors } from "../../interfaces/resolver/resolverProxy/IStaticFunctionSelectors.sol"; import { IHoldTokenHolder } from "../interfaces/hold/IHoldTokenHolder.sol"; import { HoldTokenHolder } from "./HoldTokenHolder.sol"; -contract HoldTokenHolderFacet is IStaticFunctionSelectors, HoldTokenHolder { - function getStaticResolverKey() external pure override returns (bytes32 staticResolverKey_) { - staticResolverKey_ = _HOLD_TOKEN_HOLDER_RESOLVER_KEY; - } - +abstract contract HoldTokenHolderFacetBase is IStaticFunctionSelectors, HoldTokenHolder { function getStaticFunctionSelectors() external pure override returns (bytes4[] memory staticFunctionSelectors_) { uint256 selectorIndex; staticFunctionSelectors_ = new bytes4[](5); diff --git a/packages/ats/contracts/contracts/layer_1/hold/fixedRate/HoldManagementFixedRateFacet.sol b/packages/ats/contracts/contracts/layer_1/hold/fixedRate/HoldManagementFixedRateFacet.sol new file mode 100644 index 000000000..ca62bcc3d --- /dev/null +++ b/packages/ats/contracts/contracts/layer_1/hold/fixedRate/HoldManagementFixedRateFacet.sol @@ -0,0 +1,12 @@ +// SPDX-License-Identifier: Apache-2.0 +pragma solidity >=0.8.0 <0.9.0; + +import { HoldManagementFacetBase } from "../HoldManagementFacetBase.sol"; +import { _HOLD_FIXED_RATE_RESOLVER_KEY } from "contracts/layer_1/constants/resolverKeys.sol"; +import { CommonFixedInterestRate } from "contracts/layer_0_extensions/bond/fixedInterestRate/Common.sol"; + +contract HoldManagementFixedRateFacet is HoldManagementFacetBase, CommonFixedInterestRate { + function getStaticResolverKey() external pure override returns (bytes32 staticResolverKey_) { + staticResolverKey_ = _HOLD_FIXED_RATE_RESOLVER_KEY; + } +} diff --git a/packages/ats/contracts/contracts/layer_1/hold/fixedRate/HoldReadFixedRateFacet.sol b/packages/ats/contracts/contracts/layer_1/hold/fixedRate/HoldReadFixedRateFacet.sol new file mode 100644 index 000000000..7e9333c62 --- /dev/null +++ b/packages/ats/contracts/contracts/layer_1/hold/fixedRate/HoldReadFixedRateFacet.sol @@ -0,0 +1,12 @@ +// SPDX-License-Identifier: Apache-2.0 +pragma solidity >=0.8.0 <0.9.0; + +import { HoldReadFacetBase } from "../HoldReadFacetBase.sol"; +import { _HOLD_READ_FIXED_RATE_RESOLVER_KEY } from "contracts/layer_1/constants/resolverKeys.sol"; +import { CommonFixedInterestRate } from "contracts/layer_0_extensions/bond/fixedInterestRate/Common.sol"; + +contract HoldReadFixedRateFacet is HoldReadFacetBase, CommonFixedInterestRate { + function getStaticResolverKey() external pure override returns (bytes32 staticResolverKey_) { + staticResolverKey_ = _HOLD_READ_FIXED_RATE_RESOLVER_KEY; + } +} diff --git a/packages/ats/contracts/contracts/layer_1/hold/fixedRate/HoldTokenHolderFixedRateFacet.sol b/packages/ats/contracts/contracts/layer_1/hold/fixedRate/HoldTokenHolderFixedRateFacet.sol new file mode 100644 index 000000000..bdbf2f45a --- /dev/null +++ b/packages/ats/contracts/contracts/layer_1/hold/fixedRate/HoldTokenHolderFixedRateFacet.sol @@ -0,0 +1,12 @@ +// SPDX-License-Identifier: Apache-2.0 +pragma solidity >=0.8.0 <0.9.0; + +import { HoldTokenHolderFacetBase } from "../HoldTokenHolderFacetBase.sol"; +import { _HOLD_TOKEN_HOLDER_FIXED_RATE_RESOLVER_KEY } from "contracts/layer_1/constants/resolverKeys.sol"; +import { CommonFixedInterestRate } from "contracts/layer_0_extensions/bond/fixedInterestRate/Common.sol"; + +contract HoldTokenHolderFixedRateFacet is HoldTokenHolderFacetBase, CommonFixedInterestRate { + function getStaticResolverKey() external pure override returns (bytes32 staticResolverKey_) { + staticResolverKey_ = _HOLD_TOKEN_HOLDER_FIXED_RATE_RESOLVER_KEY; + } +} diff --git a/packages/ats/contracts/contracts/layer_1/hold/kpiLinkedRate/HoldManagementKpiLinkedRateFacet.sol b/packages/ats/contracts/contracts/layer_1/hold/kpiLinkedRate/HoldManagementKpiLinkedRateFacet.sol new file mode 100644 index 000000000..251eda877 --- /dev/null +++ b/packages/ats/contracts/contracts/layer_1/hold/kpiLinkedRate/HoldManagementKpiLinkedRateFacet.sol @@ -0,0 +1,14 @@ +// SPDX-License-Identifier: Apache-2.0 +pragma solidity >=0.8.0 <0.9.0; + +import { HoldManagementFacetBase } from "../HoldManagementFacetBase.sol"; +import { _HOLD_KPI_LINKED_RATE_RESOLVER_KEY } from "contracts/layer_1/constants/resolverKeys.sol"; +import { + CommonKpiLinkedInterestRate +} from "contracts/layer_0_extensions/bond/fixingDateInterestRate/kpiInterestRate/kpiLinkedInterestRate/Common.sol"; + +contract HoldManagementKpiLinkedRateFacet is HoldManagementFacetBase, CommonKpiLinkedInterestRate { + function getStaticResolverKey() external pure override returns (bytes32 staticResolverKey_) { + staticResolverKey_ = _HOLD_KPI_LINKED_RATE_RESOLVER_KEY; + } +} diff --git a/packages/ats/contracts/contracts/layer_1/hold/kpiLinkedRate/HoldReadKpiLinkedRateFacet.sol b/packages/ats/contracts/contracts/layer_1/hold/kpiLinkedRate/HoldReadKpiLinkedRateFacet.sol new file mode 100644 index 000000000..cb4b15244 --- /dev/null +++ b/packages/ats/contracts/contracts/layer_1/hold/kpiLinkedRate/HoldReadKpiLinkedRateFacet.sol @@ -0,0 +1,14 @@ +// SPDX-License-Identifier: Apache-2.0 +pragma solidity >=0.8.0 <0.9.0; + +import { HoldReadFacetBase } from "../HoldReadFacetBase.sol"; +import { _HOLD_READ_KPI_LINKED_RATE_RESOLVER_KEY } from "contracts/layer_1/constants/resolverKeys.sol"; +import { + CommonKpiLinkedInterestRate +} from "contracts/layer_0_extensions/bond/fixingDateInterestRate/kpiInterestRate/kpiLinkedInterestRate/Common.sol"; + +contract HoldReadKpiLinkedRateFacet is HoldReadFacetBase, CommonKpiLinkedInterestRate { + function getStaticResolverKey() external pure override returns (bytes32 staticResolverKey_) { + staticResolverKey_ = _HOLD_READ_KPI_LINKED_RATE_RESOLVER_KEY; + } +} diff --git a/packages/ats/contracts/contracts/layer_1/hold/kpiLinkedRate/HoldTokenHolderKpiLinkedRateFacet.sol b/packages/ats/contracts/contracts/layer_1/hold/kpiLinkedRate/HoldTokenHolderKpiLinkedRateFacet.sol new file mode 100644 index 000000000..d4e179a7d --- /dev/null +++ b/packages/ats/contracts/contracts/layer_1/hold/kpiLinkedRate/HoldTokenHolderKpiLinkedRateFacet.sol @@ -0,0 +1,14 @@ +// SPDX-License-Identifier: Apache-2.0 +pragma solidity >=0.8.0 <0.9.0; + +import { HoldTokenHolderFacetBase } from "../HoldTokenHolderFacetBase.sol"; +import { _HOLD_TOKEN_HOLDER_KPI_LINKED_RATE_RESOLVER_KEY } from "contracts/layer_1/constants/resolverKeys.sol"; +import { + CommonKpiLinkedInterestRate +} from "contracts/layer_0_extensions/bond/fixingDateInterestRate/kpiInterestRate/kpiLinkedInterestRate/Common.sol"; + +contract HoldTokenHolderKpiLinkedRateFacet is HoldTokenHolderFacetBase, CommonKpiLinkedInterestRate { + function getStaticResolverKey() external pure override returns (bytes32 staticResolverKey_) { + staticResolverKey_ = _HOLD_TOKEN_HOLDER_KPI_LINKED_RATE_RESOLVER_KEY; + } +} diff --git a/packages/ats/contracts/contracts/layer_1/hold/standard/HoldManagementFacet.sol b/packages/ats/contracts/contracts/layer_1/hold/standard/HoldManagementFacet.sol new file mode 100644 index 000000000..c09fb7183 --- /dev/null +++ b/packages/ats/contracts/contracts/layer_1/hold/standard/HoldManagementFacet.sol @@ -0,0 +1,12 @@ +// SPDX-License-Identifier: Apache-2.0 +pragma solidity >=0.8.0 <0.9.0; + +import { HoldManagementFacetBase } from "../HoldManagementFacetBase.sol"; +import { _HOLD_RESOLVER_KEY } from "contracts/layer_1/constants/resolverKeys.sol"; +import { Common } from "contracts/layer_0/common/Common.sol"; + +contract HoldManagementFacet is HoldManagementFacetBase, Common { + function getStaticResolverKey() external pure override returns (bytes32 staticResolverKey_) { + staticResolverKey_ = _HOLD_RESOLVER_KEY; + } +} diff --git a/packages/ats/contracts/contracts/layer_1/hold/standard/HoldReadFacet.sol b/packages/ats/contracts/contracts/layer_1/hold/standard/HoldReadFacet.sol new file mode 100644 index 000000000..245081ade --- /dev/null +++ b/packages/ats/contracts/contracts/layer_1/hold/standard/HoldReadFacet.sol @@ -0,0 +1,12 @@ +// SPDX-License-Identifier: Apache-2.0 +pragma solidity >=0.8.0 <0.9.0; + +import { HoldReadFacetBase } from "../HoldReadFacetBase.sol"; +import { _HOLD_READ_RESOLVER_KEY } from "contracts/layer_1/constants/resolverKeys.sol"; +import { Common } from "contracts/layer_0/common/Common.sol"; + +contract HoldReadFacet is HoldReadFacetBase, Common { + function getStaticResolverKey() external pure override returns (bytes32 staticResolverKey_) { + staticResolverKey_ = _HOLD_READ_RESOLVER_KEY; + } +} diff --git a/packages/ats/contracts/contracts/layer_1/hold/standard/HoldTokenHolderFacet.sol b/packages/ats/contracts/contracts/layer_1/hold/standard/HoldTokenHolderFacet.sol new file mode 100644 index 000000000..b514aba9e --- /dev/null +++ b/packages/ats/contracts/contracts/layer_1/hold/standard/HoldTokenHolderFacet.sol @@ -0,0 +1,12 @@ +// SPDX-License-Identifier: Apache-2.0 +pragma solidity >=0.8.0 <0.9.0; + +import { HoldTokenHolderFacetBase } from "../HoldTokenHolderFacetBase.sol"; +import { _HOLD_TOKEN_HOLDER_RESOLVER_KEY } from "contracts/layer_1/constants/resolverKeys.sol"; +import { Common } from "contracts/layer_0/common/Common.sol"; + +contract HoldTokenHolderFacet is HoldTokenHolderFacetBase, Common { + function getStaticResolverKey() external pure override returns (bytes32 staticResolverKey_) { + staticResolverKey_ = _HOLD_TOKEN_HOLDER_RESOLVER_KEY; + } +} diff --git a/packages/ats/contracts/contracts/layer_1/hold/sustainabilityPerformanceTargetRate/HoldManagementSustainabilityPerformanceTargetRateFacet.sol b/packages/ats/contracts/contracts/layer_1/hold/sustainabilityPerformanceTargetRate/HoldManagementSustainabilityPerformanceTargetRateFacet.sol new file mode 100644 index 000000000..79754a6f6 --- /dev/null +++ b/packages/ats/contracts/contracts/layer_1/hold/sustainabilityPerformanceTargetRate/HoldManagementSustainabilityPerformanceTargetRateFacet.sol @@ -0,0 +1,19 @@ +// SPDX-License-Identifier: Apache-2.0 +pragma solidity >=0.8.0 <0.9.0; + +import { HoldManagementFacetBase } from "../HoldManagementFacetBase.sol"; +import { + _HOLD_SUSTAINABILITY_PERFORMANCE_TARGET_RATE_RESOLVER_KEY +} from "contracts/layer_1/constants/resolverKeys.sol"; +// prettier-ignore +// solhint-disable-next-line max-line-length +import { CommonSustainabilityPerformanceTargetInterestRate } from "contracts/layer_0_extensions/bond/fixingDateInterestRate/kpiInterestRate/sustainabilityPerformanceTargetInterestRate/Common.sol"; + +contract HoldManagementSustainabilityPerformanceTargetRateFacet is + HoldManagementFacetBase, + CommonSustainabilityPerformanceTargetInterestRate +{ + function getStaticResolverKey() external pure override returns (bytes32 staticResolverKey_) { + staticResolverKey_ = _HOLD_SUSTAINABILITY_PERFORMANCE_TARGET_RATE_RESOLVER_KEY; + } +} diff --git a/packages/ats/contracts/contracts/layer_1/hold/sustainabilityPerformanceTargetRate/HoldReadSustainabilityPerformanceTargetRateFacet.sol b/packages/ats/contracts/contracts/layer_1/hold/sustainabilityPerformanceTargetRate/HoldReadSustainabilityPerformanceTargetRateFacet.sol new file mode 100644 index 000000000..77143243d --- /dev/null +++ b/packages/ats/contracts/contracts/layer_1/hold/sustainabilityPerformanceTargetRate/HoldReadSustainabilityPerformanceTargetRateFacet.sol @@ -0,0 +1,19 @@ +// SPDX-License-Identifier: Apache-2.0 +pragma solidity >=0.8.0 <0.9.0; + +import { HoldReadFacetBase } from "../HoldReadFacetBase.sol"; +import { + _HOLD_READ_SUSTAINABILITY_PERFORMANCE_TARGET_RATE_RESOLVER_KEY +} from "contracts/layer_1/constants/resolverKeys.sol"; +// prettier-ignore +// solhint-disable-next-line max-line-length +import { CommonSustainabilityPerformanceTargetInterestRate } from "contracts/layer_0_extensions/bond/fixingDateInterestRate/kpiInterestRate/sustainabilityPerformanceTargetInterestRate/Common.sol"; + +contract HoldReadSustainabilityPerformanceTargetRateFacet is + HoldReadFacetBase, + CommonSustainabilityPerformanceTargetInterestRate +{ + function getStaticResolverKey() external pure override returns (bytes32 staticResolverKey_) { + staticResolverKey_ = _HOLD_READ_SUSTAINABILITY_PERFORMANCE_TARGET_RATE_RESOLVER_KEY; + } +} diff --git a/packages/ats/contracts/contracts/layer_1/hold/sustainabilityPerformanceTargetRate/HoldTokenHolderSustainabilityPerformanceTargetRateFacet.sol b/packages/ats/contracts/contracts/layer_1/hold/sustainabilityPerformanceTargetRate/HoldTokenHolderSustainabilityPerformanceTargetRateFacet.sol new file mode 100644 index 000000000..d43299a09 --- /dev/null +++ b/packages/ats/contracts/contracts/layer_1/hold/sustainabilityPerformanceTargetRate/HoldTokenHolderSustainabilityPerformanceTargetRateFacet.sol @@ -0,0 +1,19 @@ +// SPDX-License-Identifier: Apache-2.0 +pragma solidity >=0.8.0 <0.9.0; + +import { HoldTokenHolderFacetBase } from "../HoldTokenHolderFacetBase.sol"; +import { + _HOLD_TOKEN_HOLDER_SUSTAINABILITY_PERFORMANCE_TARGET_RATE_RESOLVER_KEY +} from "contracts/layer_1/constants/resolverKeys.sol"; +// prettier-ignore +// solhint-disable-next-line max-line-length +import { CommonSustainabilityPerformanceTargetInterestRate } from "contracts/layer_0_extensions/bond/fixingDateInterestRate/kpiInterestRate/sustainabilityPerformanceTargetInterestRate/Common.sol"; + +contract HoldTokenHolderSustainabilityPerformanceTargetRateFacet is + HoldTokenHolderFacetBase, + CommonSustainabilityPerformanceTargetInterestRate +{ + function getStaticResolverKey() external pure override returns (bytes32 staticResolverKey_) { + staticResolverKey_ = _HOLD_TOKEN_HOLDER_SUSTAINABILITY_PERFORMANCE_TARGET_RATE_RESOLVER_KEY; + } +} diff --git a/packages/ats/contracts/contracts/layer_1/interfaces/ERC1400/IERC1410Management.sol b/packages/ats/contracts/contracts/layer_1/interfaces/ERC1400/IERC1410Management.sol index 753b95aae..01bad6840 100644 --- a/packages/ats/contracts/contracts/layer_1/interfaces/ERC1400/IERC1410Management.sol +++ b/packages/ats/contracts/contracts/layer_1/interfaces/ERC1400/IERC1410Management.sol @@ -3,7 +3,7 @@ pragma solidity >=0.8.0 <0.9.0; import { OperatorTransferData } from "../../../layer_1/interfaces/ERC1400/IERC1410.sol"; -import { IssueData } from "../../../layer_1/interfaces/ERC1400/IERC1410.sol"; +import { IProtectedPartitionsStorageWrapper } from "../protectedPartitions/IProtectedPartitionsStorageWrapper.sol"; /** * @title IERC1410Management @@ -26,7 +26,7 @@ interface IERC1410Management { uint256 _value, bytes calldata _data, bytes calldata _operatorData - ) external; + ) external returns (bytes32); /** * @notice Forces a redeem in a partition from a token holder @@ -74,10 +74,8 @@ interface IERC1410Management { address _from, address _to, uint256 _amount, - uint256 _deadline, - uint256 _nounce, - bytes calldata _signature - ) external; + IProtectedPartitionsStorageWrapper.ProtectionData calldata _protectionData + ) external returns (bytes32); /** * @notice Redeems tokens from the token holder by presenting an off-chain signature @@ -87,8 +85,6 @@ interface IERC1410Management { bytes32 _partition, address _from, uint256 _amount, - uint256 _deadline, - uint256 _nounce, - bytes calldata _signature + IProtectedPartitionsStorageWrapper.ProtectionData calldata _protectionData ) external; } diff --git a/packages/ats/contracts/contracts/layer_1/interfaces/ERC1400/IERC1410StorageWrapper.sol b/packages/ats/contracts/contracts/layer_1/interfaces/ERC1400/IERC1410StorageWrapper.sol index 559f8787e..997ca3c6c 100644 --- a/packages/ats/contracts/contracts/layer_1/interfaces/ERC1400/IERC1410StorageWrapper.sol +++ b/packages/ats/contracts/contracts/layer_1/interfaces/ERC1400/IERC1410StorageWrapper.sol @@ -42,7 +42,6 @@ interface IERC1410StorageWrapper { error NotAllowedInMultiPartitionMode(); error PartitionNotAllowedInSinglePartitionMode(bytes32 partition); - error ZeroAddressNotAllowed(); error ZeroPartition(); error ZeroValue(); error InvalidPartition(address account, bytes32 partition); diff --git a/packages/ats/contracts/contracts/layer_1/interfaces/ERC1400/IERC1594.sol b/packages/ats/contracts/contracts/layer_1/interfaces/ERC1400/IERC1594.sol index f3cfaadda..01797a059 100644 --- a/packages/ats/contracts/contracts/layer_1/interfaces/ERC1400/IERC1594.sol +++ b/packages/ats/contracts/contracts/layer_1/interfaces/ERC1400/IERC1594.sol @@ -2,6 +2,16 @@ pragma solidity >=0.8.0 <0.9.0; interface IERC1594 { + event TransferWithData(address indexed sender, address indexed to, uint256 amount, bytes data); + + event TransferFromWithData( + address indexed sender, + address indexed from, + address indexed to, + uint256 amount, + bytes data + ); + // solhint-disable-next-line func-name-mixedcase function initialize_ERC1594() external; diff --git a/packages/ats/contracts/contracts/layer_1/interfaces/ERC1400/IERC1594StorageWrapper.sol b/packages/ats/contracts/contracts/layer_1/interfaces/ERC1400/IERC1594StorageWrapper.sol index c02d404b9..5c1216099 100644 --- a/packages/ats/contracts/contracts/layer_1/interfaces/ERC1400/IERC1594StorageWrapper.sol +++ b/packages/ats/contracts/contracts/layer_1/interfaces/ERC1400/IERC1594StorageWrapper.sol @@ -4,5 +4,4 @@ pragma solidity >=0.8.0 <0.9.0; interface IERC1594StorageWrapper { event Issued(address indexed _operator, address indexed _to, uint256 _value, bytes _data); event Redeemed(address indexed _operator, address indexed _from, uint256 _value, bytes _data); - error IssuanceIsClosed(); } diff --git a/packages/ats/contracts/contracts/layer_1/interfaces/ERC1400/IERC20Permit.sol b/packages/ats/contracts/contracts/layer_1/interfaces/ERC1400/IERC20Permit.sol index 5506c2ca3..4fffdd523 100644 --- a/packages/ats/contracts/contracts/layer_1/interfaces/ERC1400/IERC20Permit.sol +++ b/packages/ats/contracts/contracts/layer_1/interfaces/ERC1400/IERC20Permit.sol @@ -7,9 +7,6 @@ interface IERC20Permit { error ERC2612ExpiredSignature(uint256 deadline); error ERC2612InvalidSigner(address signer, address owner); - // solhint-disable-next-line func-name-mixedcase - function initialize_ERC20Permit() external; - /** * @notice Approves a third party to spend tokens using off-chain signature */ @@ -23,11 +20,6 @@ interface IERC20Permit { bytes32 s ) external; - /** - * @notice Returns the current nonce for `owner` - */ - function nonces(address owner) external view returns (uint256); - /** * @notice Returns the domain separator used in the encoding of the signature for `permit`, as defined by {EIP712} */ diff --git a/packages/ats/contracts/contracts/layer_1/interfaces/ERC1400/IERC20Votes.sol b/packages/ats/contracts/contracts/layer_1/interfaces/ERC1400/IERC20Votes.sol index bca8b4627..aa1c423f6 100644 --- a/packages/ats/contracts/contracts/layer_1/interfaces/ERC1400/IERC20Votes.sol +++ b/packages/ats/contracts/contracts/layer_1/interfaces/ERC1400/IERC20Votes.sol @@ -4,13 +4,9 @@ pragma solidity >=0.8.0 <0.9.0; import { IERC5805 } from "./IERC5805.sol"; +import { CheckpointsLib } from "../../../layer_0/common/libraries/CheckpointsLib.sol"; interface IERC20Votes is IERC5805 { - struct Checkpoint { - uint256 fromBlock; - uint256 votes; - } - error AbafChangeForBlockForbidden(uint256 blockNumber); // solhint-disable-next-line func-name-mixedcase @@ -18,7 +14,7 @@ interface IERC20Votes is IERC5805 { function isActivated() external view returns (bool); - function checkpoints(address _account, uint256 _pos) external view returns (Checkpoint memory); + function checkpoints(address _account, uint256 _pos) external view returns (CheckpointsLib.Checkpoint memory); function numCheckpoints(address _account) external view returns (uint256); } diff --git a/packages/ats/contracts/contracts/layer_1/interfaces/clearing/IClearingActions.sol b/packages/ats/contracts/contracts/layer_1/interfaces/clearing/IClearingActions.sol index 05aaf79bf..1afcb19f9 100644 --- a/packages/ats/contracts/contracts/layer_1/interfaces/clearing/IClearingActions.sol +++ b/packages/ats/contracts/contracts/layer_1/interfaces/clearing/IClearingActions.sol @@ -58,7 +58,7 @@ interface IClearingActions { */ function approveClearingOperationByPartition( IClearing.ClearingOperationIdentifier calldata _clearingOperationIdentifier - ) external returns (bool success_); + ) external returns (bool success_, bytes32 partition_); /** * @notice Cancels a clearing operation returning funds back to the token holder diff --git a/packages/ats/contracts/contracts/layer_1/interfaces/corporateActions/ICorporateActions.sol b/packages/ats/contracts/contracts/layer_1/interfaces/corporateActions/ICorporateActions.sol index c07034eb4..d0384e598 100644 --- a/packages/ats/contracts/contracts/layer_1/interfaces/corporateActions/ICorporateActions.sol +++ b/packages/ats/contracts/contracts/layer_1/interfaces/corporateActions/ICorporateActions.sol @@ -8,14 +8,14 @@ interface ICorporateActions { * @param operator The caller of the function that emitted the event * @param actionType The corporate action's action type (used for classification) * @param corporateActionId The corporate action's unique Id - * @param corporateActionIndexByType The corporate action's index for its action type + * @param corporateActionIdByType The corporate action's id for its action type * @param data The corporate action's data (defining the corporate aciton itself) */ event CorporateActionAdded( address indexed operator, bytes32 indexed actionType, bytes32 indexed corporateActionId, - uint256 corporateActionIndexByType, + uint256 corporateActionIdByType, bytes data ); @@ -24,18 +24,19 @@ interface ICorporateActions { function addCorporateAction( bytes32 _actionType, bytes memory _data - ) external returns (bool success_, bytes32 corporateActionId_, uint256 corporateActionIndexByType_); + ) external returns (bytes32 corporateActionId_, uint256 corporateActionIdByType_); /** * @dev Returns a corporate action info * * @param _corporateActionId The corporate action unique Id * @return actionType_ the corproate action type + * @return actionTypeIndex_ the corproate action type index * @return data_ the corproate action related data (body and anything else) */ function getCorporateAction( bytes32 _corporateActionId - ) external view returns (bytes32 actionType_, bytes memory data_); + ) external view returns (bytes32 actionType_, uint256 actionTypeIndex_, bytes memory data_); /** * @dev Returns the number of corporate actions the token currently has @@ -77,4 +78,6 @@ interface ICorporateActions { uint256 _pageIndex, uint256 _pageLength ) external view returns (bytes32[] memory corporateActionIds_); + + function actionContentHashExists(bytes32 _contentHash) external view returns (bool); } diff --git a/packages/ats/contracts/contracts/layer_1/interfaces/corporateActions/ICorporateActionsStorageWrapper.sol b/packages/ats/contracts/contracts/layer_1/interfaces/corporateActions/ICorporateActionsStorageWrapper.sol index aa689f38d..d2ff92a3a 100644 --- a/packages/ats/contracts/contracts/layer_1/interfaces/corporateActions/ICorporateActionsStorageWrapper.sol +++ b/packages/ats/contracts/contracts/layer_1/interfaces/corporateActions/ICorporateActionsStorageWrapper.sol @@ -7,12 +7,14 @@ struct ActionData { bytes32 actionType; bytes data; bytes[] results; + uint256 actionIdByType; } struct CorporateActionDataStorage { EnumerableSet.Bytes32Set actions; mapping(bytes32 => ActionData) actionsData; - mapping(bytes32 => EnumerableSet.Bytes32Set) actionsByType; + mapping(bytes32 => bytes32[]) actionsByType; + mapping(bytes32 => bool) actionsContentHashes; } interface ICorporateActionsStorageWrapper { diff --git a/packages/ats/contracts/contracts/layer_1/interfaces/hold/IHoldTokenHolder.sol b/packages/ats/contracts/contracts/layer_1/interfaces/hold/IHoldTokenHolder.sol index ca0b310cf..53640589d 100644 --- a/packages/ats/contracts/contracts/layer_1/interfaces/hold/IHoldTokenHolder.sol +++ b/packages/ats/contracts/contracts/layer_1/interfaces/hold/IHoldTokenHolder.sol @@ -79,7 +79,7 @@ interface IHoldTokenHolder { HoldIdentifier calldata _holdIdentifier, address _to, uint256 _amount - ) external returns (bool success_); + ) external returns (bool success_, bytes32 partition_); /** * @notice Releases the held tokens back to the token holde diff --git a/packages/ats/contracts/contracts/layer_1/interfaces/lock/ILock.sol b/packages/ats/contracts/contracts/layer_1/interfaces/lock/ILock.sol index 2de66ad88..007c7d269 100644 --- a/packages/ats/contracts/contracts/layer_1/interfaces/lock/ILock.sol +++ b/packages/ats/contracts/contracts/layer_1/interfaces/lock/ILock.sol @@ -2,6 +2,12 @@ pragma solidity >=0.8.0 <0.9.0; interface ILock { + struct LockData { + uint256 id; + uint256 amount; + uint256 expirationTimestamp; + } + event LockedByPartition( address indexed operator, address indexed tokenHolder, diff --git a/packages/ats/contracts/contracts/layer_1/interfaces/nonces/INonces.sol b/packages/ats/contracts/contracts/layer_1/interfaces/nonces/INonces.sol new file mode 100644 index 000000000..0e26fea7e --- /dev/null +++ b/packages/ats/contracts/contracts/layer_1/interfaces/nonces/INonces.sol @@ -0,0 +1,11 @@ +// SPDX-License-Identifier: Apache-2.0 +// Contract copy-pasted form OZ and extended + +pragma solidity >=0.8.0 <0.9.0; + +interface INonces { + /** + * @notice Returns the current nonce for `owner` + */ + function nonces(address owner) external view returns (uint256); +} diff --git a/packages/ats/contracts/contracts/layer_1/interfaces/protectedPartitions/IProtectedPartitions.sol b/packages/ats/contracts/contracts/layer_1/interfaces/protectedPartitions/IProtectedPartitions.sol index 9852b8d3d..93ccd8ddb 100644 --- a/packages/ats/contracts/contracts/layer_1/interfaces/protectedPartitions/IProtectedPartitions.sol +++ b/packages/ats/contracts/contracts/layer_1/interfaces/protectedPartitions/IProtectedPartitions.sol @@ -24,13 +24,6 @@ interface IProtectedPartitions { */ function arePartitionsProtected() external view returns (bool); - /** - * @notice Returns the nounce for an account - * @param account The address of the account - * @return uint256 The nounce for the account - */ - function getNounceFor(address account) external view returns (uint256); - /** * @notice Calculates the role required to transfer tokens from a given partition * @param _partition The partition to calculate the role for diff --git a/packages/ats/contracts/contracts/layer_1/interfaces/protectedPartitions/IProtectedPartitionsStorageWrapper.sol b/packages/ats/contracts/contracts/layer_1/interfaces/protectedPartitions/IProtectedPartitionsStorageWrapper.sol index a6ff5ddb9..c4569c2fb 100644 --- a/packages/ats/contracts/contracts/layer_1/interfaces/protectedPartitions/IProtectedPartitionsStorageWrapper.sol +++ b/packages/ats/contracts/contracts/layer_1/interfaces/protectedPartitions/IProtectedPartitionsStorageWrapper.sol @@ -2,6 +2,12 @@ pragma solidity >=0.8.0 <0.9.0; interface IProtectedPartitionsStorageWrapper { + struct ProtectionData { + uint256 deadline; + uint256 nounce; + bytes signature; + } + event PartitionsProtected(address indexed operator); event PartitionsUnProtected(address indexed operator); diff --git a/packages/ats/contracts/contracts/layer_1/interfaces/snapshots/ISnapshots.sol b/packages/ats/contracts/contracts/layer_1/interfaces/snapshots/ISnapshots.sol index 7a9521de8..e3d368ff8 100644 --- a/packages/ats/contracts/contracts/layer_1/interfaces/snapshots/ISnapshots.sol +++ b/packages/ats/contracts/contracts/layer_1/interfaces/snapshots/ISnapshots.sol @@ -1,7 +1,6 @@ // SPDX-License-Identifier: Apache-2.0 pragma solidity >=0.8.0 <0.9.0; -import { CountersUpgradeable } from "@openzeppelin/contracts-upgradeable/utils/CountersUpgradeable.sol"; import { ISnapshotsStorageWrapper } from "./ISnapshotsStorageWrapper.sol"; // Snapshotted values have arrays of ids and the value corresponding to that id. These could be an array of a @@ -11,6 +10,11 @@ struct Snapshots { uint256[] values; } +struct SnapshotsAddress { + uint256[] ids; + address[] values; +} + struct ListOfPartitions { bytes32[] partitions; } @@ -19,34 +23,6 @@ struct PartitionSnapshots { ListOfPartitions[] values; } -struct SnapshotStorage { - // Snapshots for total balances per account - mapping(address => Snapshots) accountBalanceSnapshots; - // Snapshots for balances per account and partition - mapping(address => mapping(bytes32 => Snapshots)) accountPartitionBalanceSnapshots; - // Metadata for partitions associated with each account - mapping(address => PartitionSnapshots) accountPartitionMetadata; - Snapshots totalSupplySnapshots; // Snapshots for the total supply - // Snapshot ids increase monotonically, with the first value being 1. An id of 0 is invalid. - // Unique ID for the current snapshot - CountersUpgradeable.Counter currentSnapshotId; - // Snapshots for locked balances per account - mapping(address => Snapshots) accountLockedBalanceSnapshots; - // Snapshots for locked balances per account and partition - mapping(address => mapping(bytes32 => Snapshots)) accountPartitionLockedBalanceSnapshots; - // Snapshots for the total supply by partition - mapping(bytes32 => Snapshots) totalSupplyByPartitionSnapshots; - mapping(address => Snapshots) accountHeldBalanceSnapshots; - mapping(address => mapping(bytes32 => Snapshots)) accountPartitionHeldBalanceSnapshots; - // Clearing - mapping(address => Snapshots) accountClearedBalanceSnapshots; - mapping(address => mapping(bytes32 => Snapshots)) accountPartitionClearedBalanceSnapshots; - Snapshots abafSnapshots; - Snapshots decimals; - mapping(address => Snapshots) accountFrozenBalanceSnapshots; - mapping(address => mapping(bytes32 => Snapshots)) accountPartitionFrozenBalanceSnapshots; -} - interface ISnapshots is ISnapshotsStorageWrapper { /** * @notice Takes a snapshot of the current balances and total supplies diff --git a/packages/ats/contracts/contracts/layer_1/interfaces/snapshots/ISnapshotsStorageWrapper.sol b/packages/ats/contracts/contracts/layer_1/interfaces/snapshots/ISnapshotsStorageWrapper.sol index bf9776220..49c599717 100644 --- a/packages/ats/contracts/contracts/layer_1/interfaces/snapshots/ISnapshotsStorageWrapper.sol +++ b/packages/ats/contracts/contracts/layer_1/interfaces/snapshots/ISnapshotsStorageWrapper.sol @@ -4,7 +4,7 @@ pragma solidity >=0.8.0 <0.9.0; interface ISnapshotsStorageWrapper { // Events event SnapshotTaken(address indexed operator, uint256 indexed snapshotID); - event SnapshotTriggered(address indexed operator, uint256 snapshotId); + event SnapshotTriggered(uint256 snapshotId); // Errors error SnapshotIdNull(); error SnapshotIdDoesNotExists(uint256 snapshotId); diff --git a/packages/ats/contracts/contracts/layer_1/kyc/Kyc.sol b/packages/ats/contracts/contracts/layer_1/kyc/Kyc.sol index 966d4d063..495231ebd 100644 --- a/packages/ats/contracts/contracts/layer_1/kyc/Kyc.sol +++ b/packages/ats/contracts/contracts/layer_1/kyc/Kyc.sol @@ -3,13 +3,11 @@ pragma solidity >=0.8.0 <0.9.0; import { _KYC_ROLE, _INTERNAL_KYC_MANAGER_ROLE } from "../constants/roles.sol"; import { IKyc } from "../interfaces/kyc/IKyc.sol"; -import { Common } from "../common/Common.sol"; +import { Internals } from "contracts/layer_0/Internals.sol"; -abstract contract Kyc is IKyc, Common { - function initializeInternalKyc(bool _internalKycActivated) external onlyUninitialized(_kycStorage().initialized) { - KycStorage storage kycStorage = _kycStorage(); - kycStorage.initialized = true; - kycStorage.internalKycActivated = _internalKycActivated; +abstract contract Kyc is IKyc, Internals { + function initializeInternalKyc(bool _internalKycActivated) external onlyUninitialized(_isKycInitialized()) { + _initializeInternalKyc(_internalKycActivated); } function activateInternalKyc() external onlyRole(_INTERNAL_KYC_MANAGER_ROLE) onlyUnpaused returns (bool success_) { diff --git a/packages/ats/contracts/contracts/layer_1/kyc/KycFacet.sol b/packages/ats/contracts/contracts/layer_1/kyc/KycFacetBase.sol similarity index 84% rename from packages/ats/contracts/contracts/layer_1/kyc/KycFacet.sol rename to packages/ats/contracts/contracts/layer_1/kyc/KycFacetBase.sol index fdcb0d18b..8e36eddd8 100644 --- a/packages/ats/contracts/contracts/layer_1/kyc/KycFacet.sol +++ b/packages/ats/contracts/contracts/layer_1/kyc/KycFacetBase.sol @@ -2,15 +2,10 @@ pragma solidity >=0.8.0 <0.9.0; import { IKyc } from "../interfaces/kyc/IKyc.sol"; -import { _KYC_RESOLVER_KEY } from "../constants/resolverKeys.sol"; import { IStaticFunctionSelectors } from "../../interfaces/resolver/resolverProxy/IStaticFunctionSelectors.sol"; import { Kyc } from "./Kyc.sol"; -contract KycFacet is Kyc, IStaticFunctionSelectors { - function getStaticResolverKey() external pure virtual override returns (bytes32 staticResolverKey_) { - staticResolverKey_ = _KYC_RESOLVER_KEY; - } - +abstract contract KycFacetBase is Kyc, IStaticFunctionSelectors { function getStaticFunctionSelectors() external pure override returns (bytes4[] memory staticFunctionSelectors_) { uint256 selectorIndex; staticFunctionSelectors_ = new bytes4[](10); diff --git a/packages/ats/contracts/contracts/layer_1/kyc/fixedRate/KycFixedRateFacet.sol b/packages/ats/contracts/contracts/layer_1/kyc/fixedRate/KycFixedRateFacet.sol new file mode 100644 index 000000000..75c4d7fdc --- /dev/null +++ b/packages/ats/contracts/contracts/layer_1/kyc/fixedRate/KycFixedRateFacet.sol @@ -0,0 +1,12 @@ +// SPDX-License-Identifier: Apache-2.0 +pragma solidity >=0.8.0 <0.9.0; + +import { KycFacetBase } from "../KycFacetBase.sol"; +import { _KYC_FIXED_RATE_RESOLVER_KEY } from "contracts/layer_1/constants/resolverKeys.sol"; +import { CommonFixedInterestRate } from "contracts/layer_0_extensions/bond/fixedInterestRate/Common.sol"; + +contract KycFixedRateFacet is KycFacetBase, CommonFixedInterestRate { + function getStaticResolverKey() external pure override returns (bytes32 staticResolverKey_) { + staticResolverKey_ = _KYC_FIXED_RATE_RESOLVER_KEY; + } +} diff --git a/packages/ats/contracts/contracts/layer_1/kyc/kpiLinkedRate/KycKpiLinkedRateFacet.sol b/packages/ats/contracts/contracts/layer_1/kyc/kpiLinkedRate/KycKpiLinkedRateFacet.sol new file mode 100644 index 000000000..751c59348 --- /dev/null +++ b/packages/ats/contracts/contracts/layer_1/kyc/kpiLinkedRate/KycKpiLinkedRateFacet.sol @@ -0,0 +1,14 @@ +// SPDX-License-Identifier: Apache-2.0 +pragma solidity >=0.8.0 <0.9.0; + +import { KycFacetBase } from "../KycFacetBase.sol"; +import { _KYC_KPI_LINKED_RATE_RESOLVER_KEY } from "contracts/layer_1/constants/resolverKeys.sol"; +import { + CommonKpiLinkedInterestRate +} from "contracts/layer_0_extensions/bond/fixingDateInterestRate/kpiInterestRate/kpiLinkedInterestRate/Common.sol"; + +contract KycKpiLinkedRateFacet is KycFacetBase, CommonKpiLinkedInterestRate { + function getStaticResolverKey() external pure override returns (bytes32 staticResolverKey_) { + staticResolverKey_ = _KYC_KPI_LINKED_RATE_RESOLVER_KEY; + } +} diff --git a/packages/ats/contracts/contracts/layer_1/kyc/standard/KycFacet.sol b/packages/ats/contracts/contracts/layer_1/kyc/standard/KycFacet.sol new file mode 100644 index 000000000..3fea9d541 --- /dev/null +++ b/packages/ats/contracts/contracts/layer_1/kyc/standard/KycFacet.sol @@ -0,0 +1,12 @@ +// SPDX-License-Identifier: Apache-2.0 +pragma solidity >=0.8.0 <0.9.0; + +import { KycFacetBase } from "../KycFacetBase.sol"; +import { _KYC_RESOLVER_KEY } from "contracts/layer_1/constants/resolverKeys.sol"; +import { Common } from "contracts/layer_0/common/Common.sol"; + +contract KycFacet is KycFacetBase, Common { + function getStaticResolverKey() external pure override returns (bytes32 staticResolverKey_) { + staticResolverKey_ = _KYC_RESOLVER_KEY; + } +} diff --git a/packages/ats/contracts/contracts/layer_1/kyc/sustainabilityPerformanceTargetRate/KycSustainabilityPerformanceTargetRateFacet.sol b/packages/ats/contracts/contracts/layer_1/kyc/sustainabilityPerformanceTargetRate/KycSustainabilityPerformanceTargetRateFacet.sol new file mode 100644 index 000000000..570473f91 --- /dev/null +++ b/packages/ats/contracts/contracts/layer_1/kyc/sustainabilityPerformanceTargetRate/KycSustainabilityPerformanceTargetRateFacet.sol @@ -0,0 +1,17 @@ +// SPDX-License-Identifier: Apache-2.0 +pragma solidity >=0.8.0 <0.9.0; + +import { KycFacetBase } from "../KycFacetBase.sol"; +import { _KYC_SUSTAINABILITY_PERFORMANCE_TARGET_RATE_RESOLVER_KEY } from "contracts/layer_1/constants/resolverKeys.sol"; +// prettier-ignore +// solhint-disable-next-line max-line-length +import { CommonSustainabilityPerformanceTargetInterestRate } from "contracts/layer_0_extensions/bond/fixingDateInterestRate/kpiInterestRate/sustainabilityPerformanceTargetInterestRate/Common.sol"; + +contract KycSustainabilityPerformanceTargetRateFacet is + KycFacetBase, + CommonSustainabilityPerformanceTargetInterestRate +{ + function getStaticResolverKey() external pure override returns (bytes32 staticResolverKey_) { + staticResolverKey_ = _KYC_SUSTAINABILITY_PERFORMANCE_TARGET_RATE_RESOLVER_KEY; + } +} diff --git a/packages/ats/contracts/contracts/layer_1/lock/Lock.sol b/packages/ats/contracts/contracts/layer_1/lock/Lock.sol index b016bb5b5..641e23593 100644 --- a/packages/ats/contracts/contracts/layer_1/lock/Lock.sol +++ b/packages/ats/contracts/contracts/layer_1/lock/Lock.sol @@ -4,9 +4,9 @@ pragma solidity >=0.8.0 <0.9.0; import { _DEFAULT_PARTITION } from "../../layer_0/constants/values.sol"; import { _LOCKER_ROLE } from "../constants/roles.sol"; import { ILock } from "../interfaces/lock/ILock.sol"; -import { Common } from "../common/Common.sol"; +import { Internals } from "contracts/layer_0/Internals.sol"; -abstract contract Lock is ILock, Common { +abstract contract Lock is ILock, Internals { // Functions function lockByPartition( bytes32 _partition, diff --git a/packages/ats/contracts/contracts/layer_1/lock/LockFacet.sol b/packages/ats/contracts/contracts/layer_1/lock/LockFacetBase.sol similarity index 86% rename from packages/ats/contracts/contracts/layer_1/lock/LockFacet.sol rename to packages/ats/contracts/contracts/layer_1/lock/LockFacetBase.sol index 7f0d53983..a8ba5a331 100644 --- a/packages/ats/contracts/contracts/layer_1/lock/LockFacet.sol +++ b/packages/ats/contracts/contracts/layer_1/lock/LockFacetBase.sol @@ -3,14 +3,9 @@ pragma solidity >=0.8.0 <0.9.0; import { IStaticFunctionSelectors } from "../../interfaces/resolver/resolverProxy/IStaticFunctionSelectors.sol"; import { ILock } from "../interfaces/lock/ILock.sol"; -import { _LOCK_RESOLVER_KEY } from "../constants/resolverKeys.sol"; import { Lock } from "./Lock.sol"; -contract LockFacet is Lock, IStaticFunctionSelectors { - function getStaticResolverKey() external pure override returns (bytes32 staticResolverKey_) { - staticResolverKey_ = _LOCK_RESOLVER_KEY; - } - +abstract contract LockFacetBase is Lock, IStaticFunctionSelectors { function getStaticFunctionSelectors() external pure override returns (bytes4[] memory staticFunctionSelectors_) { uint256 selectorIndex; staticFunctionSelectors_ = new bytes4[](12); diff --git a/packages/ats/contracts/contracts/layer_1/lock/fixedRate/LockFixedRateFacet.sol b/packages/ats/contracts/contracts/layer_1/lock/fixedRate/LockFixedRateFacet.sol new file mode 100644 index 000000000..60bd25171 --- /dev/null +++ b/packages/ats/contracts/contracts/layer_1/lock/fixedRate/LockFixedRateFacet.sol @@ -0,0 +1,12 @@ +// SPDX-License-Identifier: Apache-2.0 +pragma solidity >=0.8.0 <0.9.0; + +import { LockFacetBase } from "../LockFacetBase.sol"; +import { _LOCK_FIXED_RATE_RESOLVER_KEY } from "contracts/layer_1/constants/resolverKeys.sol"; +import { CommonFixedInterestRate } from "contracts/layer_0_extensions/bond/fixedInterestRate/Common.sol"; + +contract LockFixedRateFacet is LockFacetBase, CommonFixedInterestRate { + function getStaticResolverKey() external pure override returns (bytes32 staticResolverKey_) { + staticResolverKey_ = _LOCK_FIXED_RATE_RESOLVER_KEY; + } +} diff --git a/packages/ats/contracts/contracts/layer_1/lock/kpiLinkedRate/LockKpiLinkedRateFacet.sol b/packages/ats/contracts/contracts/layer_1/lock/kpiLinkedRate/LockKpiLinkedRateFacet.sol new file mode 100644 index 000000000..73c22518e --- /dev/null +++ b/packages/ats/contracts/contracts/layer_1/lock/kpiLinkedRate/LockKpiLinkedRateFacet.sol @@ -0,0 +1,14 @@ +// SPDX-License-Identifier: Apache-2.0 +pragma solidity >=0.8.0 <0.9.0; + +import { LockFacetBase } from "../LockFacetBase.sol"; +import { _LOCK_KPI_LINKED_RATE_RESOLVER_KEY } from "contracts/layer_1/constants/resolverKeys.sol"; +import { + CommonKpiLinkedInterestRate +} from "contracts/layer_0_extensions/bond/fixingDateInterestRate/kpiInterestRate/kpiLinkedInterestRate/Common.sol"; + +contract LockKpiLinkedRateFacet is LockFacetBase, CommonKpiLinkedInterestRate { + function getStaticResolverKey() external pure override returns (bytes32 staticResolverKey_) { + staticResolverKey_ = _LOCK_KPI_LINKED_RATE_RESOLVER_KEY; + } +} diff --git a/packages/ats/contracts/contracts/layer_1/lock/standard/LockFacet.sol b/packages/ats/contracts/contracts/layer_1/lock/standard/LockFacet.sol new file mode 100644 index 000000000..743689f35 --- /dev/null +++ b/packages/ats/contracts/contracts/layer_1/lock/standard/LockFacet.sol @@ -0,0 +1,12 @@ +// SPDX-License-Identifier: Apache-2.0 +pragma solidity >=0.8.0 <0.9.0; + +import { LockFacetBase } from "../LockFacetBase.sol"; +import { _LOCK_RESOLVER_KEY } from "contracts/layer_1/constants/resolverKeys.sol"; +import { Common } from "contracts/layer_0/common/Common.sol"; + +contract LockFacet is LockFacetBase, Common { + function getStaticResolverKey() external pure override returns (bytes32 staticResolverKey_) { + staticResolverKey_ = _LOCK_RESOLVER_KEY; + } +} diff --git a/packages/ats/contracts/contracts/layer_1/lock/sustainabilityPerformanceTargetRate/LockSustainabilityPerformanceTargetRateFacet.sol b/packages/ats/contracts/contracts/layer_1/lock/sustainabilityPerformanceTargetRate/LockSustainabilityPerformanceTargetRateFacet.sol new file mode 100644 index 000000000..751ea3211 --- /dev/null +++ b/packages/ats/contracts/contracts/layer_1/lock/sustainabilityPerformanceTargetRate/LockSustainabilityPerformanceTargetRateFacet.sol @@ -0,0 +1,19 @@ +// SPDX-License-Identifier: Apache-2.0 +pragma solidity >=0.8.0 <0.9.0; + +import { LockFacetBase } from "../LockFacetBase.sol"; +import { + _LOCK_SUSTAINABILITY_PERFORMANCE_TARGET_RATE_RESOLVER_KEY +} from "contracts/layer_1/constants/resolverKeys.sol"; +// prettier-ignore +// solhint-disable-next-line max-line-length +import { CommonSustainabilityPerformanceTargetInterestRate } from "contracts/layer_0_extensions/bond/fixingDateInterestRate/kpiInterestRate/sustainabilityPerformanceTargetInterestRate/Common.sol"; + +contract LockSustainabilityPerformanceTargetRateFacet is + LockFacetBase, + CommonSustainabilityPerformanceTargetInterestRate +{ + function getStaticResolverKey() external pure override returns (bytes32 staticResolverKey_) { + staticResolverKey_ = _LOCK_SUSTAINABILITY_PERFORMANCE_TARGET_RATE_RESOLVER_KEY; + } +} diff --git a/packages/ats/contracts/contracts/layer_1/nonces/Nonces.sol b/packages/ats/contracts/contracts/layer_1/nonces/Nonces.sol new file mode 100644 index 000000000..f73c46270 --- /dev/null +++ b/packages/ats/contracts/contracts/layer_1/nonces/Nonces.sol @@ -0,0 +1,11 @@ +// SPDX-License-Identifier: Apache-2.0 +pragma solidity >=0.8.0 <0.9.0; + +import { INonces } from "../interfaces/nonces/INonces.sol"; +import { Internals } from "contracts/layer_0/Internals.sol"; + +abstract contract Nonces is INonces, Internals { + function nonces(address owner) external view returns (uint256) { + return _getNonceFor(owner); + } +} diff --git a/packages/ats/contracts/contracts/layer_1/nonces/NoncesFacetBase.sol b/packages/ats/contracts/contracts/layer_1/nonces/NoncesFacetBase.sol new file mode 100644 index 000000000..6ea793b81 --- /dev/null +++ b/packages/ats/contracts/contracts/layer_1/nonces/NoncesFacetBase.sol @@ -0,0 +1,20 @@ +// SPDX-License-Identifier: Apache-2.0 +pragma solidity >=0.8.0 <0.9.0; + +import { INonces } from "../interfaces/nonces/INonces.sol"; +import { Nonces } from "./Nonces.sol"; +import { IStaticFunctionSelectors } from "../../interfaces/resolver/resolverProxy/IStaticFunctionSelectors.sol"; + +abstract contract NoncesFacetBase is Nonces, IStaticFunctionSelectors { + function getStaticFunctionSelectors() external pure override returns (bytes4[] memory staticFunctionSelectors_) { + uint256 selectorIndex; + staticFunctionSelectors_ = new bytes4[](1); + staticFunctionSelectors_[selectorIndex++] = this.nonces.selector; + } + + function getStaticInterfaceIds() external pure override returns (bytes4[] memory staticInterfaceIds_) { + staticInterfaceIds_ = new bytes4[](1); + uint256 selectorsIndex; + staticInterfaceIds_[selectorsIndex++] = type(INonces).interfaceId; + } +} diff --git a/packages/ats/contracts/contracts/layer_1/nonces/fixedRate/NoncesFixedRateFacet.sol b/packages/ats/contracts/contracts/layer_1/nonces/fixedRate/NoncesFixedRateFacet.sol new file mode 100644 index 000000000..ccb4f3c75 --- /dev/null +++ b/packages/ats/contracts/contracts/layer_1/nonces/fixedRate/NoncesFixedRateFacet.sol @@ -0,0 +1,12 @@ +// SPDX-License-Identifier: Apache-2.0 +pragma solidity >=0.8.0 <0.9.0; + +import { NoncesFacetBase } from "../NoncesFacetBase.sol"; +import { _NONCES_FIXED_RATE_RESOLVER_KEY } from "contracts/layer_1/constants/resolverKeys.sol"; +import { CommonFixedInterestRate } from "contracts/layer_0_extensions/bond/fixedInterestRate/Common.sol"; + +contract NoncesFixedRateFacet is NoncesFacetBase, CommonFixedInterestRate { + function getStaticResolverKey() external pure override returns (bytes32 staticResolverKey_) { + staticResolverKey_ = _NONCES_FIXED_RATE_RESOLVER_KEY; + } +} diff --git a/packages/ats/contracts/contracts/layer_1/nonces/kpiLinkedRate/NoncesKpiLinkedRateFacet.sol b/packages/ats/contracts/contracts/layer_1/nonces/kpiLinkedRate/NoncesKpiLinkedRateFacet.sol new file mode 100644 index 000000000..8fe12fb28 --- /dev/null +++ b/packages/ats/contracts/contracts/layer_1/nonces/kpiLinkedRate/NoncesKpiLinkedRateFacet.sol @@ -0,0 +1,14 @@ +// SPDX-License-Identifier: Apache-2.0 +pragma solidity >=0.8.0 <0.9.0; + +import { NoncesFacetBase } from "../NoncesFacetBase.sol"; +import { _NONCES_KPI_LINKED_RATE_RESOLVER_KEY } from "contracts/layer_1/constants/resolverKeys.sol"; +import { + CommonKpiLinkedInterestRate +} from "contracts/layer_0_extensions/bond/fixingDateInterestRate/kpiInterestRate/kpiLinkedInterestRate/Common.sol"; + +contract NoncesKpiLinkedRateFacet is NoncesFacetBase, CommonKpiLinkedInterestRate { + function getStaticResolverKey() external pure override returns (bytes32 staticResolverKey_) { + staticResolverKey_ = _NONCES_KPI_LINKED_RATE_RESOLVER_KEY; + } +} diff --git a/packages/ats/contracts/contracts/layer_1/nonces/standard/NoncesFacet.sol b/packages/ats/contracts/contracts/layer_1/nonces/standard/NoncesFacet.sol new file mode 100644 index 000000000..abdcc8818 --- /dev/null +++ b/packages/ats/contracts/contracts/layer_1/nonces/standard/NoncesFacet.sol @@ -0,0 +1,12 @@ +// SPDX-License-Identifier: Apache-2.0 +pragma solidity >=0.8.0 <0.9.0; + +import { NoncesFacetBase } from "../NoncesFacetBase.sol"; +import { _NONCES_RESOLVER_KEY } from "contracts/layer_1/constants/resolverKeys.sol"; +import { Common } from "contracts/layer_0/common/Common.sol"; + +contract NoncesFacet is NoncesFacetBase, Common { + function getStaticResolverKey() external pure override returns (bytes32 staticResolverKey_) { + staticResolverKey_ = _NONCES_RESOLVER_KEY; + } +} diff --git a/packages/ats/contracts/contracts/layer_1/nonces/sustainabilityPerformanceTargetRate/NoncesSustainabilityPerformanceTargetRateFacet.sol b/packages/ats/contracts/contracts/layer_1/nonces/sustainabilityPerformanceTargetRate/NoncesSustainabilityPerformanceTargetRateFacet.sol new file mode 100644 index 000000000..cb73f7302 --- /dev/null +++ b/packages/ats/contracts/contracts/layer_1/nonces/sustainabilityPerformanceTargetRate/NoncesSustainabilityPerformanceTargetRateFacet.sol @@ -0,0 +1,19 @@ +// SPDX-License-Identifier: Apache-2.0 +pragma solidity >=0.8.0 <0.9.0; + +import { NoncesFacetBase } from "../NoncesFacetBase.sol"; +import { + _NONCES_SUSTAINABILITY_PERFORMANCE_TARGET_RATE_RESOLVER_KEY +} from "contracts/layer_1/constants/resolverKeys.sol"; +// prettier-ignore +// solhint-disable-next-line max-line-length +import { CommonSustainabilityPerformanceTargetInterestRate } from "contracts/layer_0_extensions/bond/fixingDateInterestRate/kpiInterestRate/sustainabilityPerformanceTargetInterestRate/Common.sol"; + +contract NoncesSustainabilityPerformanceTargetRateFacet is + NoncesFacetBase, + CommonSustainabilityPerformanceTargetInterestRate +{ + function getStaticResolverKey() external pure override returns (bytes32 staticResolverKey_) { + staticResolverKey_ = _NONCES_SUSTAINABILITY_PERFORMANCE_TARGET_RATE_RESOLVER_KEY; + } +} diff --git a/packages/ats/contracts/contracts/layer_1/pause/Pause.sol b/packages/ats/contracts/contracts/layer_1/pause/Pause.sol index d2212a116..d3e6152a0 100644 --- a/packages/ats/contracts/contracts/layer_1/pause/Pause.sol +++ b/packages/ats/contracts/contracts/layer_1/pause/Pause.sol @@ -3,9 +3,9 @@ pragma solidity >=0.8.0 <0.9.0; import { IPause } from "../interfaces/pause/IPause.sol"; import { _PAUSER_ROLE } from "../constants/roles.sol"; -import { Common } from "../common/Common.sol"; +import { Internals } from "contracts/layer_0/Internals.sol"; -abstract contract Pause is IPause, Common { +abstract contract Pause is IPause, Internals { function pause() external override onlyRole(_PAUSER_ROLE) onlyUnpaused returns (bool success_) { _setPause(true); success_ = true; diff --git a/packages/ats/contracts/contracts/layer_1/pause/PauseFacet.sol b/packages/ats/contracts/contracts/layer_1/pause/PauseFacetBase.sol similarity index 77% rename from packages/ats/contracts/contracts/layer_1/pause/PauseFacet.sol rename to packages/ats/contracts/contracts/layer_1/pause/PauseFacetBase.sol index bdb2b3c72..28bd13c99 100644 --- a/packages/ats/contracts/contracts/layer_1/pause/PauseFacet.sol +++ b/packages/ats/contracts/contracts/layer_1/pause/PauseFacetBase.sol @@ -3,14 +3,9 @@ pragma solidity >=0.8.0 <0.9.0; import { IPause } from "../interfaces/pause/IPause.sol"; import { Pause } from "./Pause.sol"; -import { _PAUSE_RESOLVER_KEY } from "../constants/resolverKeys.sol"; import { IStaticFunctionSelectors } from "../../interfaces/resolver/resolverProxy/IStaticFunctionSelectors.sol"; -contract PauseFacet is Pause, IStaticFunctionSelectors { - function getStaticResolverKey() external pure override returns (bytes32 staticResolverKey_) { - staticResolverKey_ = _PAUSE_RESOLVER_KEY; - } - +abstract contract PauseFacetBase is Pause, IStaticFunctionSelectors { function getStaticFunctionSelectors() external pure override returns (bytes4[] memory staticFunctionSelectors_) { uint256 selectorIndex; staticFunctionSelectors_ = new bytes4[](3); diff --git a/packages/ats/contracts/contracts/layer_1/pause/fixedRate/PauseFixedRateFacet.sol b/packages/ats/contracts/contracts/layer_1/pause/fixedRate/PauseFixedRateFacet.sol new file mode 100644 index 000000000..9a9a2a343 --- /dev/null +++ b/packages/ats/contracts/contracts/layer_1/pause/fixedRate/PauseFixedRateFacet.sol @@ -0,0 +1,12 @@ +// SPDX-License-Identifier: Apache-2.0 +pragma solidity >=0.8.0 <0.9.0; + +import { PauseFacetBase } from "../PauseFacetBase.sol"; +import { _PAUSE_FIXED_RATE_RESOLVER_KEY } from "contracts/layer_1/constants/resolverKeys.sol"; +import { CommonFixedInterestRate } from "contracts/layer_0_extensions/bond/fixedInterestRate/Common.sol"; + +contract PauseFixedRateFacet is PauseFacetBase, CommonFixedInterestRate { + function getStaticResolverKey() external pure override returns (bytes32 staticResolverKey_) { + staticResolverKey_ = _PAUSE_FIXED_RATE_RESOLVER_KEY; + } +} diff --git a/packages/ats/contracts/contracts/layer_1/pause/kpiLinkedRate/PauseKpiLinkedRateFacet.sol b/packages/ats/contracts/contracts/layer_1/pause/kpiLinkedRate/PauseKpiLinkedRateFacet.sol new file mode 100644 index 000000000..75634547c --- /dev/null +++ b/packages/ats/contracts/contracts/layer_1/pause/kpiLinkedRate/PauseKpiLinkedRateFacet.sol @@ -0,0 +1,14 @@ +// SPDX-License-Identifier: Apache-2.0 +pragma solidity >=0.8.0 <0.9.0; + +import { PauseFacetBase } from "../PauseFacetBase.sol"; +import { _PAUSE_KPI_LINKED_RATE_RESOLVER_KEY } from "contracts/layer_1/constants/resolverKeys.sol"; +import { + CommonKpiLinkedInterestRate +} from "contracts/layer_0_extensions/bond/fixingDateInterestRate/kpiInterestRate/kpiLinkedInterestRate/Common.sol"; + +contract PauseKpiLinkedRateFacet is PauseFacetBase, CommonKpiLinkedInterestRate { + function getStaticResolverKey() external pure override returns (bytes32 staticResolverKey_) { + staticResolverKey_ = _PAUSE_KPI_LINKED_RATE_RESOLVER_KEY; + } +} diff --git a/packages/ats/contracts/contracts/layer_1/pause/standard/PauseFacet.sol b/packages/ats/contracts/contracts/layer_1/pause/standard/PauseFacet.sol new file mode 100644 index 000000000..f2ea3071f --- /dev/null +++ b/packages/ats/contracts/contracts/layer_1/pause/standard/PauseFacet.sol @@ -0,0 +1,12 @@ +// SPDX-License-Identifier: Apache-2.0 +pragma solidity >=0.8.0 <0.9.0; + +import { PauseFacetBase } from "../PauseFacetBase.sol"; +import { _PAUSE_RESOLVER_KEY } from "contracts/layer_1/constants/resolverKeys.sol"; +import { Common } from "contracts/layer_0/common/Common.sol"; + +contract PauseFacet is PauseFacetBase, Common { + function getStaticResolverKey() external pure override returns (bytes32 staticResolverKey_) { + staticResolverKey_ = _PAUSE_RESOLVER_KEY; + } +} diff --git a/packages/ats/contracts/contracts/layer_1/pause/sustainabilityPerformanceTargetRate/PauseSustainabilityPerformanceTargetRateFacet.sol b/packages/ats/contracts/contracts/layer_1/pause/sustainabilityPerformanceTargetRate/PauseSustainabilityPerformanceTargetRateFacet.sol new file mode 100644 index 000000000..68b017340 --- /dev/null +++ b/packages/ats/contracts/contracts/layer_1/pause/sustainabilityPerformanceTargetRate/PauseSustainabilityPerformanceTargetRateFacet.sol @@ -0,0 +1,19 @@ +// SPDX-License-Identifier: Apache-2.0 +pragma solidity >=0.8.0 <0.9.0; + +import { PauseFacetBase } from "../PauseFacetBase.sol"; +import { + _PAUSE_SUSTAINABILITY_PERFORMANCE_TARGET_RATE_RESOLVER_KEY +} from "contracts/layer_1/constants/resolverKeys.sol"; +// prettier-ignore +// solhint-disable-next-line max-line-length +import { CommonSustainabilityPerformanceTargetInterestRate } from "contracts/layer_0_extensions/bond/fixingDateInterestRate/kpiInterestRate/sustainabilityPerformanceTargetInterestRate/Common.sol"; + +contract PauseSustainabilityPerformanceTargetRateFacet is + PauseFacetBase, + CommonSustainabilityPerformanceTargetInterestRate +{ + function getStaticResolverKey() external pure override returns (bytes32 staticResolverKey_) { + staticResolverKey_ = _PAUSE_SUSTAINABILITY_PERFORMANCE_TARGET_RATE_RESOLVER_KEY; + } +} diff --git a/packages/ats/contracts/contracts/layer_1/protectedPartitions/ProtectedPartitions.sol b/packages/ats/contracts/contracts/layer_1/protectedPartitions/ProtectedPartitions.sol index fa9555dfa..6d348b417 100644 --- a/packages/ats/contracts/contracts/layer_1/protectedPartitions/ProtectedPartitions.sol +++ b/packages/ats/contracts/contracts/layer_1/protectedPartitions/ProtectedPartitions.sol @@ -1,22 +1,16 @@ // SPDX-License-Identifier: Apache-2.0 pragma solidity >=0.8.0 <0.9.0; -import { Common } from "../common/Common.sol"; +import { Internals } from "contracts/layer_0/Internals.sol"; import { IProtectedPartitions } from "../interfaces/protectedPartitions/IProtectedPartitions.sol"; -import { _CONTRACT_NAME_PROTECTEDPARTITIONS, _CONTRACT_VERSION_PROTECTEDPARTITIONS } from "../constants/values.sol"; import { _PROTECTED_PARTITIONS_ROLE } from "../constants/roles.sol"; -abstract contract ProtectedPartitions is IProtectedPartitions, Common { +abstract contract ProtectedPartitions is IProtectedPartitions, Internals { // solhint-disable-next-line func-name-mixedcase function initialize_ProtectedPartitions( bool _protectPartitions - ) external override onlyUninitialized(_protectedPartitionsStorage().initialized) returns (bool success_) { - ProtectedPartitionsDataStorage storage protectedPartitionsStorage = _protectedPartitionsStorage(); - protectedPartitionsStorage.arePartitionsProtected = _protectPartitions; - protectedPartitionsStorage.contractName = _CONTRACT_NAME_PROTECTEDPARTITIONS; - protectedPartitionsStorage.contractVersion = _CONTRACT_VERSION_PROTECTEDPARTITIONS; - protectedPartitionsStorage.initialized = true; - success_ = true; + ) external override onlyUninitialized(_isProtectedPartitionInitialized()) returns (bool success_) { + _initialize_ProtectedPartitions(_protectPartitions); } function protectPartitions() @@ -45,10 +39,6 @@ abstract contract ProtectedPartitions is IProtectedPartitions, Common { return _arePartitionsProtected(); } - function getNounceFor(address account) external view override returns (uint256) { - return _getNounceFor(account); - } - function calculateRoleForPartition(bytes32 partition) external pure override returns (bytes32 role) { role = _calculateRoleForPartition(partition); } diff --git a/packages/ats/contracts/contracts/layer_1/protectedPartitions/ProtectedPartitionsFacet.sol b/packages/ats/contracts/contracts/layer_1/protectedPartitions/ProtectedPartitionsFacetBase.sol similarity index 72% rename from packages/ats/contracts/contracts/layer_1/protectedPartitions/ProtectedPartitionsFacet.sol rename to packages/ats/contracts/contracts/layer_1/protectedPartitions/ProtectedPartitionsFacetBase.sol index 1aa5367c1..d22b9ce86 100644 --- a/packages/ats/contracts/contracts/layer_1/protectedPartitions/ProtectedPartitionsFacet.sol +++ b/packages/ats/contracts/contracts/layer_1/protectedPartitions/ProtectedPartitionsFacetBase.sol @@ -3,22 +3,16 @@ pragma solidity >=0.8.0 <0.9.0; import { IProtectedPartitions } from "../interfaces/protectedPartitions/IProtectedPartitions.sol"; import { IStaticFunctionSelectors } from "../../interfaces/resolver/resolverProxy/IStaticFunctionSelectors.sol"; -import { _PROTECTED_PARTITIONS_RESOLVER_KEY } from "../constants/resolverKeys.sol"; import { ProtectedPartitions } from "./ProtectedPartitions.sol"; -contract ProtectedPartitionsFacet is ProtectedPartitions, IStaticFunctionSelectors { - function getStaticResolverKey() external pure override returns (bytes32 staticResolverKey_) { - staticResolverKey_ = _PROTECTED_PARTITIONS_RESOLVER_KEY; - } - +abstract contract ProtectedPartitionsFacetBase is ProtectedPartitions, IStaticFunctionSelectors { function getStaticFunctionSelectors() external pure override returns (bytes4[] memory staticFunctionSelectors_) { uint256 selectorIndex; - staticFunctionSelectors_ = new bytes4[](6); + staticFunctionSelectors_ = new bytes4[](5); staticFunctionSelectors_[selectorIndex++] = this.initialize_ProtectedPartitions.selector; staticFunctionSelectors_[selectorIndex++] = this.protectPartitions.selector; staticFunctionSelectors_[selectorIndex++] = this.unprotectPartitions.selector; staticFunctionSelectors_[selectorIndex++] = this.arePartitionsProtected.selector; - staticFunctionSelectors_[selectorIndex++] = this.getNounceFor.selector; staticFunctionSelectors_[selectorIndex++] = this.calculateRoleForPartition.selector; } diff --git a/packages/ats/contracts/contracts/layer_1/protectedPartitions/fixedRate/ProtectedPartitionsFixedRateFacet.sol b/packages/ats/contracts/contracts/layer_1/protectedPartitions/fixedRate/ProtectedPartitionsFixedRateFacet.sol new file mode 100644 index 000000000..32dcea075 --- /dev/null +++ b/packages/ats/contracts/contracts/layer_1/protectedPartitions/fixedRate/ProtectedPartitionsFixedRateFacet.sol @@ -0,0 +1,12 @@ +// SPDX-License-Identifier: Apache-2.0 +pragma solidity >=0.8.0 <0.9.0; + +import { ProtectedPartitionsFacetBase } from "../ProtectedPartitionsFacetBase.sol"; +import { _PROTECTED_PARTITIONS_FIXED_RATE_RESOLVER_KEY } from "contracts/layer_1/constants/resolverKeys.sol"; +import { CommonFixedInterestRate } from "contracts/layer_0_extensions/bond/fixedInterestRate/Common.sol"; + +contract ProtectedPartitionsFixedRateFacet is ProtectedPartitionsFacetBase, CommonFixedInterestRate { + function getStaticResolverKey() external pure override returns (bytes32 staticResolverKey_) { + staticResolverKey_ = _PROTECTED_PARTITIONS_FIXED_RATE_RESOLVER_KEY; + } +} diff --git a/packages/ats/contracts/contracts/layer_1/protectedPartitions/kpiLinkedRate/ProtectedPartitionsKpiLinkedRateFacet.sol b/packages/ats/contracts/contracts/layer_1/protectedPartitions/kpiLinkedRate/ProtectedPartitionsKpiLinkedRateFacet.sol new file mode 100644 index 000000000..6bd57d4ce --- /dev/null +++ b/packages/ats/contracts/contracts/layer_1/protectedPartitions/kpiLinkedRate/ProtectedPartitionsKpiLinkedRateFacet.sol @@ -0,0 +1,14 @@ +// SPDX-License-Identifier: Apache-2.0 +pragma solidity >=0.8.0 <0.9.0; + +import { ProtectedPartitionsFacetBase } from "../ProtectedPartitionsFacetBase.sol"; +import { _PROTECTED_PARTITIONS_KPI_LINKED_RATE_RESOLVER_KEY } from "contracts/layer_1/constants/resolverKeys.sol"; +import { + CommonKpiLinkedInterestRate +} from "contracts/layer_0_extensions/bond/fixingDateInterestRate/kpiInterestRate/kpiLinkedInterestRate/Common.sol"; + +contract ProtectedPartitionsKpiLinkedRateFacet is ProtectedPartitionsFacetBase, CommonKpiLinkedInterestRate { + function getStaticResolverKey() external pure override returns (bytes32 staticResolverKey_) { + staticResolverKey_ = _PROTECTED_PARTITIONS_KPI_LINKED_RATE_RESOLVER_KEY; + } +} diff --git a/packages/ats/contracts/contracts/layer_1/protectedPartitions/standard/ProtectedPartitionsFacet.sol b/packages/ats/contracts/contracts/layer_1/protectedPartitions/standard/ProtectedPartitionsFacet.sol new file mode 100644 index 000000000..8fe3333f4 --- /dev/null +++ b/packages/ats/contracts/contracts/layer_1/protectedPartitions/standard/ProtectedPartitionsFacet.sol @@ -0,0 +1,12 @@ +// SPDX-License-Identifier: Apache-2.0 +pragma solidity >=0.8.0 <0.9.0; + +import { ProtectedPartitionsFacetBase } from "../ProtectedPartitionsFacetBase.sol"; +import { _PROTECTED_PARTITIONS_RESOLVER_KEY } from "contracts/layer_1/constants/resolverKeys.sol"; +import { Common } from "contracts/layer_0/common/Common.sol"; + +contract ProtectedPartitionsFacet is ProtectedPartitionsFacetBase, Common { + function getStaticResolverKey() external pure override returns (bytes32 staticResolverKey_) { + staticResolverKey_ = _PROTECTED_PARTITIONS_RESOLVER_KEY; + } +} diff --git a/packages/ats/contracts/contracts/layer_1/protectedPartitions/sustainabilityPerformanceTargetRate/ProtectedPartitionsSustainabilityPerformanceTargetRateFacet.sol b/packages/ats/contracts/contracts/layer_1/protectedPartitions/sustainabilityPerformanceTargetRate/ProtectedPartitionsSustainabilityPerformanceTargetRateFacet.sol new file mode 100644 index 000000000..29e3da73a --- /dev/null +++ b/packages/ats/contracts/contracts/layer_1/protectedPartitions/sustainabilityPerformanceTargetRate/ProtectedPartitionsSustainabilityPerformanceTargetRateFacet.sol @@ -0,0 +1,19 @@ +// SPDX-License-Identifier: Apache-2.0 +pragma solidity >=0.8.0 <0.9.0; + +import { ProtectedPartitionsFacetBase } from "../ProtectedPartitionsFacetBase.sol"; +import { + _PROTECTED_PARTITIONS_SUSTAINABILITY_PERFORMANCE_TARGET_RATE_RESOLVER_KEY +} from "contracts/layer_1/constants/resolverKeys.sol"; +// prettier-ignore +// solhint-disable-next-line max-line-length +import { CommonSustainabilityPerformanceTargetInterestRate } from "contracts/layer_0_extensions/bond/fixingDateInterestRate/kpiInterestRate/sustainabilityPerformanceTargetInterestRate/Common.sol"; + +contract ProtectedPartitionsSustainabilityPerformanceTargetRateFacet is + ProtectedPartitionsFacetBase, + CommonSustainabilityPerformanceTargetInterestRate +{ + function getStaticResolverKey() external pure override returns (bytes32 staticResolverKey_) { + staticResolverKey_ = _PROTECTED_PARTITIONS_SUSTAINABILITY_PERFORMANCE_TARGET_RATE_RESOLVER_KEY; + } +} diff --git a/packages/ats/contracts/contracts/layer_1/snapshots/Snapshots.sol b/packages/ats/contracts/contracts/layer_1/snapshots/Snapshots.sol index ed424ff0c..9fc088a3c 100644 --- a/packages/ats/contracts/contracts/layer_1/snapshots/Snapshots.sol +++ b/packages/ats/contracts/contracts/layer_1/snapshots/Snapshots.sol @@ -2,12 +2,12 @@ pragma solidity >=0.8.0 <0.9.0; import { ISnapshots } from "../interfaces/snapshots/ISnapshots.sol"; -import { Common } from "../common/Common.sol"; +import { Internals } from "contracts/layer_0/Internals.sol"; import { _SNAPSHOT_ROLE } from "../constants/roles.sol"; -abstract contract Snapshots is ISnapshots, Common { +abstract contract Snapshots is ISnapshots, Internals { function takeSnapshot() external override onlyUnpaused onlyRole(_SNAPSHOT_ROLE) returns (uint256 snapshotID_) { - _triggerScheduledCrossOrderedTasks(0); + _callTriggerPendingScheduledCrossOrderedTasks(); snapshotID_ = _takeSnapshot(); } diff --git a/packages/ats/contracts/contracts/layer_1/snapshots/SnapshotsFacet.sol b/packages/ats/contracts/contracts/layer_1/snapshots/SnapshotsFacetBase.sol similarity index 88% rename from packages/ats/contracts/contracts/layer_1/snapshots/SnapshotsFacet.sol rename to packages/ats/contracts/contracts/layer_1/snapshots/SnapshotsFacetBase.sol index 666e8ccd4..5beb9e0b7 100644 --- a/packages/ats/contracts/contracts/layer_1/snapshots/SnapshotsFacet.sol +++ b/packages/ats/contracts/contracts/layer_1/snapshots/SnapshotsFacetBase.sol @@ -1,16 +1,11 @@ // SPDX-License-Identifier: Apache-2.0 pragma solidity >=0.8.0 <0.9.0; -import { _SNAPSHOTS_RESOLVER_KEY } from "../../layer_1/constants/resolverKeys.sol"; import { IStaticFunctionSelectors } from "../../interfaces/resolver/resolverProxy/IStaticFunctionSelectors.sol"; import { ISnapshots } from "../interfaces/snapshots/ISnapshots.sol"; import { Snapshots } from "./Snapshots.sol"; -contract SnapshotsFacet is Snapshots, IStaticFunctionSelectors { - function getStaticResolverKey() external pure override returns (bytes32 staticResolverKey_) { - staticResolverKey_ = _SNAPSHOTS_RESOLVER_KEY; - } - +abstract contract SnapshotsFacetBase is Snapshots, IStaticFunctionSelectors { function getStaticFunctionSelectors() external pure override returns (bytes4[] memory staticFunctionSelectors_) { uint256 selectorIndex; staticFunctionSelectors_ = new bytes4[](17); diff --git a/packages/ats/contracts/contracts/layer_1/snapshots/fixedRate/SnapshotsFixedRateFacet.sol b/packages/ats/contracts/contracts/layer_1/snapshots/fixedRate/SnapshotsFixedRateFacet.sol new file mode 100644 index 000000000..d34750c36 --- /dev/null +++ b/packages/ats/contracts/contracts/layer_1/snapshots/fixedRate/SnapshotsFixedRateFacet.sol @@ -0,0 +1,12 @@ +// SPDX-License-Identifier: Apache-2.0 +pragma solidity >=0.8.0 <0.9.0; + +import { SnapshotsFacetBase } from "../SnapshotsFacetBase.sol"; +import { _SNAPSHOTS_FIXED_RATE_RESOLVER_KEY } from "contracts/layer_1/constants/resolverKeys.sol"; +import { CommonFixedInterestRate } from "contracts/layer_0_extensions/bond/fixedInterestRate/Common.sol"; + +contract SnapshotsFixedRateFacet is SnapshotsFacetBase, CommonFixedInterestRate { + function getStaticResolverKey() external pure override returns (bytes32 staticResolverKey_) { + staticResolverKey_ = _SNAPSHOTS_FIXED_RATE_RESOLVER_KEY; + } +} diff --git a/packages/ats/contracts/contracts/layer_1/snapshots/kpiLinkedRate/SnapshotsKpiLinkedRateFacet.sol b/packages/ats/contracts/contracts/layer_1/snapshots/kpiLinkedRate/SnapshotsKpiLinkedRateFacet.sol new file mode 100644 index 000000000..08c83b2a1 --- /dev/null +++ b/packages/ats/contracts/contracts/layer_1/snapshots/kpiLinkedRate/SnapshotsKpiLinkedRateFacet.sol @@ -0,0 +1,14 @@ +// SPDX-License-Identifier: Apache-2.0 +pragma solidity >=0.8.0 <0.9.0; + +import { SnapshotsFacetBase } from "../SnapshotsFacetBase.sol"; +import { _SNAPSHOTS_KPI_LINKED_RATE_RESOLVER_KEY } from "contracts/layer_1/constants/resolverKeys.sol"; +import { + CommonKpiLinkedInterestRate +} from "contracts/layer_0_extensions/bond/fixingDateInterestRate/kpiInterestRate/kpiLinkedInterestRate/Common.sol"; + +contract SnapshotsKpiLinkedRateFacet is SnapshotsFacetBase, CommonKpiLinkedInterestRate { + function getStaticResolverKey() external pure override returns (bytes32 staticResolverKey_) { + staticResolverKey_ = _SNAPSHOTS_KPI_LINKED_RATE_RESOLVER_KEY; + } +} diff --git a/packages/ats/contracts/contracts/layer_1/snapshots/standard/SnapshotsFacet.sol b/packages/ats/contracts/contracts/layer_1/snapshots/standard/SnapshotsFacet.sol new file mode 100644 index 000000000..a9da44b61 --- /dev/null +++ b/packages/ats/contracts/contracts/layer_1/snapshots/standard/SnapshotsFacet.sol @@ -0,0 +1,12 @@ +// SPDX-License-Identifier: Apache-2.0 +pragma solidity >=0.8.0 <0.9.0; + +import { SnapshotsFacetBase } from "../SnapshotsFacetBase.sol"; +import { _SNAPSHOTS_RESOLVER_KEY } from "contracts/layer_1/constants/resolverKeys.sol"; +import { Common } from "contracts/layer_0/common/Common.sol"; + +contract SnapshotsFacet is SnapshotsFacetBase, Common { + function getStaticResolverKey() external pure override returns (bytes32 staticResolverKey_) { + staticResolverKey_ = _SNAPSHOTS_RESOLVER_KEY; + } +} diff --git a/packages/ats/contracts/contracts/layer_1/snapshots/sustainabilityPerformanceTargetRate/SnapshotsSustainabilityPerformanceTargetRateFacet.sol b/packages/ats/contracts/contracts/layer_1/snapshots/sustainabilityPerformanceTargetRate/SnapshotsSustainabilityPerformanceTargetRateFacet.sol new file mode 100644 index 000000000..6e9b09a2d --- /dev/null +++ b/packages/ats/contracts/contracts/layer_1/snapshots/sustainabilityPerformanceTargetRate/SnapshotsSustainabilityPerformanceTargetRateFacet.sol @@ -0,0 +1,19 @@ +// SPDX-License-Identifier: Apache-2.0 +pragma solidity >=0.8.0 <0.9.0; + +import { SnapshotsFacetBase } from "../SnapshotsFacetBase.sol"; +import { + _SNAPSHOTS_SUSTAINABILITY_PERFORMANCE_TARGET_RATE_RESOLVER_KEY +} from "contracts/layer_1/constants/resolverKeys.sol"; +// prettier-ignore +// solhint-disable-next-line max-line-length +import { CommonSustainabilityPerformanceTargetInterestRate } from "contracts/layer_0_extensions/bond/fixingDateInterestRate/kpiInterestRate/sustainabilityPerformanceTargetInterestRate/Common.sol"; + +contract SnapshotsSustainabilityPerformanceTargetRateFacet is + SnapshotsFacetBase, + CommonSustainabilityPerformanceTargetInterestRate +{ + function getStaticResolverKey() external pure override returns (bytes32 staticResolverKey_) { + staticResolverKey_ = _SNAPSHOTS_SUSTAINABILITY_PERFORMANCE_TARGET_RATE_RESOLVER_KEY; + } +} diff --git a/packages/ats/contracts/contracts/layer_1/ssi/SsiManagement.sol b/packages/ats/contracts/contracts/layer_1/ssi/SsiManagement.sol index 5e90cd1c4..2d9e8cffb 100644 --- a/packages/ats/contracts/contracts/layer_1/ssi/SsiManagement.sol +++ b/packages/ats/contracts/contracts/layer_1/ssi/SsiManagement.sol @@ -1,11 +1,11 @@ // SPDX-License-Identifier: Apache-2.0 pragma solidity >=0.8.0 <0.9.0; -import { Common } from "../common/Common.sol"; +import { Internals } from "contracts/layer_0/Internals.sol"; import { _SSI_MANAGER_ROLE } from "../constants/roles.sol"; import { ISsiManagement } from "../interfaces/ssi/ISsiManagement.sol"; -abstract contract SsiManagement is ISsiManagement, Common { +abstract contract SsiManagement is ISsiManagement, Internals { function setRevocationRegistryAddress( address _revocationRegistryAddress ) external override onlyRole(_SSI_MANAGER_ROLE) onlyUnpaused returns (bool success_) { diff --git a/packages/ats/contracts/contracts/layer_1/ssi/SsiManagementFacet.sol b/packages/ats/contracts/contracts/layer_1/ssi/SsiManagementFacetBase.sol similarity index 81% rename from packages/ats/contracts/contracts/layer_1/ssi/SsiManagementFacet.sol rename to packages/ats/contracts/contracts/layer_1/ssi/SsiManagementFacetBase.sol index 700495c2b..fb7cb39b2 100644 --- a/packages/ats/contracts/contracts/layer_1/ssi/SsiManagementFacet.sol +++ b/packages/ats/contracts/contracts/layer_1/ssi/SsiManagementFacetBase.sol @@ -2,15 +2,10 @@ pragma solidity >=0.8.0 <0.9.0; import { IStaticFunctionSelectors } from "../../interfaces/resolver/resolverProxy/IStaticFunctionSelectors.sol"; -import { _SSI_MANAGEMENT_RESOLVER_KEY } from "../constants/resolverKeys.sol"; import { ISsiManagement } from "../interfaces/ssi/ISsiManagement.sol"; import { SsiManagement } from "./SsiManagement.sol"; -contract SsiManagementFacet is SsiManagement, IStaticFunctionSelectors { - function getStaticResolverKey() external pure virtual override returns (bytes32 staticResolverKey_) { - staticResolverKey_ = _SSI_MANAGEMENT_RESOLVER_KEY; - } - +abstract contract SsiManagementFacetBase is SsiManagement, IStaticFunctionSelectors { function getStaticFunctionSelectors() external pure diff --git a/packages/ats/contracts/contracts/layer_1/ssi/fixedRate/SsiManagementFixedRateFacet.sol b/packages/ats/contracts/contracts/layer_1/ssi/fixedRate/SsiManagementFixedRateFacet.sol new file mode 100644 index 000000000..be3d99fef --- /dev/null +++ b/packages/ats/contracts/contracts/layer_1/ssi/fixedRate/SsiManagementFixedRateFacet.sol @@ -0,0 +1,12 @@ +// SPDX-License-Identifier: Apache-2.0 +pragma solidity >=0.8.0 <0.9.0; + +import { SsiManagementFacetBase } from "../SsiManagementFacetBase.sol"; +import { _SSI_FIXED_RATE_RESOLVER_KEY } from "contracts/layer_1/constants/resolverKeys.sol"; +import { CommonFixedInterestRate } from "contracts/layer_0_extensions/bond/fixedInterestRate/Common.sol"; + +contract SsiManagementFixedRateFacet is SsiManagementFacetBase, CommonFixedInterestRate { + function getStaticResolverKey() external pure override returns (bytes32 staticResolverKey_) { + staticResolverKey_ = _SSI_FIXED_RATE_RESOLVER_KEY; + } +} diff --git a/packages/ats/contracts/contracts/layer_1/ssi/kpiLinkedRate/SsiManagementKpiLinkedRateFacet.sol b/packages/ats/contracts/contracts/layer_1/ssi/kpiLinkedRate/SsiManagementKpiLinkedRateFacet.sol new file mode 100644 index 000000000..77469baee --- /dev/null +++ b/packages/ats/contracts/contracts/layer_1/ssi/kpiLinkedRate/SsiManagementKpiLinkedRateFacet.sol @@ -0,0 +1,14 @@ +// SPDX-License-Identifier: Apache-2.0 +pragma solidity >=0.8.0 <0.9.0; + +import { SsiManagementFacetBase } from "../SsiManagementFacetBase.sol"; +import { _SSI_KPI_LINKED_RATE_RESOLVER_KEY } from "contracts/layer_1/constants/resolverKeys.sol"; +import { + CommonKpiLinkedInterestRate +} from "contracts/layer_0_extensions/bond/fixingDateInterestRate/kpiInterestRate/kpiLinkedInterestRate/Common.sol"; + +contract SsiManagementKpiLinkedRateFacet is SsiManagementFacetBase, CommonKpiLinkedInterestRate { + function getStaticResolverKey() external pure override returns (bytes32 staticResolverKey_) { + staticResolverKey_ = _SSI_KPI_LINKED_RATE_RESOLVER_KEY; + } +} diff --git a/packages/ats/contracts/contracts/layer_1/ssi/standard/SsiManagementFacet.sol b/packages/ats/contracts/contracts/layer_1/ssi/standard/SsiManagementFacet.sol new file mode 100644 index 000000000..51b96babf --- /dev/null +++ b/packages/ats/contracts/contracts/layer_1/ssi/standard/SsiManagementFacet.sol @@ -0,0 +1,12 @@ +// SPDX-License-Identifier: Apache-2.0 +pragma solidity >=0.8.0 <0.9.0; + +import { SsiManagementFacetBase } from "../SsiManagementFacetBase.sol"; +import { _SSI_RESOLVER_KEY } from "contracts/layer_1/constants/resolverKeys.sol"; +import { Common } from "contracts/layer_0/common/Common.sol"; + +contract SsiManagementFacet is SsiManagementFacetBase, Common { + function getStaticResolverKey() external pure override returns (bytes32 staticResolverKey_) { + staticResolverKey_ = _SSI_RESOLVER_KEY; + } +} diff --git a/packages/ats/contracts/contracts/layer_1/ssi/sustainabilityPerformanceTargetRate/SsiManagementSustainabilityPerformanceTargetRateFacet.sol b/packages/ats/contracts/contracts/layer_1/ssi/sustainabilityPerformanceTargetRate/SsiManagementSustainabilityPerformanceTargetRateFacet.sol new file mode 100644 index 000000000..46ac07ea9 --- /dev/null +++ b/packages/ats/contracts/contracts/layer_1/ssi/sustainabilityPerformanceTargetRate/SsiManagementSustainabilityPerformanceTargetRateFacet.sol @@ -0,0 +1,17 @@ +// SPDX-License-Identifier: Apache-2.0 +pragma solidity >=0.8.0 <0.9.0; + +import { SsiManagementFacetBase } from "../SsiManagementFacetBase.sol"; +import { _SSI_SUSTAINABILITY_PERFORMANCE_TARGET_RATE_RESOLVER_KEY } from "contracts/layer_1/constants/resolverKeys.sol"; +// prettier-ignore +// solhint-disable-next-line max-line-length +import { CommonSustainabilityPerformanceTargetInterestRate } from "contracts/layer_0_extensions/bond/fixingDateInterestRate/kpiInterestRate/sustainabilityPerformanceTargetInterestRate/Common.sol"; + +contract SsiManagementSustainabilityPerformanceTargetRateFacet is + SsiManagementFacetBase, + CommonSustainabilityPerformanceTargetInterestRate +{ + function getStaticResolverKey() external pure override returns (bytes32 staticResolverKey_) { + staticResolverKey_ = _SSI_SUSTAINABILITY_PERFORMANCE_TARGET_RATE_RESOLVER_KEY; + } +} diff --git a/packages/ats/contracts/contracts/layer_2/adjustBalances/AdjustBalances.sol b/packages/ats/contracts/contracts/layer_2/adjustBalances/AdjustBalances.sol index 1ed1c5829..13a41e854 100644 --- a/packages/ats/contracts/contracts/layer_2/adjustBalances/AdjustBalances.sol +++ b/packages/ats/contracts/contracts/layer_2/adjustBalances/AdjustBalances.sol @@ -1,15 +1,15 @@ // SPDX-License-Identifier: Apache-2.0 pragma solidity >=0.8.0 <0.9.0; import { IAdjustBalances } from "../interfaces/adjustBalances/IAdjustBalances.sol"; -import { Common } from "../../layer_1/common/Common.sol"; +import { Internals } from "../../layer_0/Internals.sol"; import { _ADJUSTMENT_BALANCE_ROLE } from "../constants/roles.sol"; -abstract contract AdjustBalances is IAdjustBalances, Common { +abstract contract AdjustBalances is IAdjustBalances, Internals { function adjustBalances( uint256 factor, uint8 decimals ) external override onlyUnpaused onlyRole(_ADJUSTMENT_BALANCE_ROLE) validateFactor(factor) returns (bool success_) { - _triggerScheduledCrossOrderedTasks(0); + _callTriggerPendingScheduledCrossOrderedTasks(); _adjustBalances(factor, decimals); success_ = true; } diff --git a/packages/ats/contracts/contracts/layer_2/adjustBalances/AdjustBalancesFacet.sol b/packages/ats/contracts/contracts/layer_2/adjustBalances/AdjustBalancesFacetBase.sol similarity index 73% rename from packages/ats/contracts/contracts/layer_2/adjustBalances/AdjustBalancesFacet.sol rename to packages/ats/contracts/contracts/layer_2/adjustBalances/AdjustBalancesFacetBase.sol index b2ba48a67..097ff6caf 100644 --- a/packages/ats/contracts/contracts/layer_2/adjustBalances/AdjustBalancesFacet.sol +++ b/packages/ats/contracts/contracts/layer_2/adjustBalances/AdjustBalancesFacetBase.sol @@ -1,15 +1,10 @@ // SPDX-License-Identifier: Apache-2.0 pragma solidity >=0.8.0 <0.9.0; import { IAdjustBalances } from "../interfaces/adjustBalances/IAdjustBalances.sol"; -import { _BALANCE_ADJUSTMENTS_RESOLVER_KEY } from "../constants/resolverKeys.sol"; import { IStaticFunctionSelectors } from "../../interfaces/resolver/resolverProxy/IStaticFunctionSelectors.sol"; import { AdjustBalances } from "./AdjustBalances.sol"; -contract AdjustBalancesFacet is AdjustBalances, IStaticFunctionSelectors { - function getStaticResolverKey() external pure override returns (bytes32 staticResolverKey_) { - staticResolverKey_ = _BALANCE_ADJUSTMENTS_RESOLVER_KEY; - } - +abstract contract AdjustBalancesFacetBase is AdjustBalances, IStaticFunctionSelectors { function getStaticFunctionSelectors() external pure override returns (bytes4[] memory staticFunctionSelectors_) { uint256 selectorIndex; staticFunctionSelectors_ = new bytes4[](1); diff --git a/packages/ats/contracts/contracts/layer_2/adjustBalances/fixedRate/AdjustBalancesFixedRateFacet.sol b/packages/ats/contracts/contracts/layer_2/adjustBalances/fixedRate/AdjustBalancesFixedRateFacet.sol new file mode 100644 index 000000000..7aada2471 --- /dev/null +++ b/packages/ats/contracts/contracts/layer_2/adjustBalances/fixedRate/AdjustBalancesFixedRateFacet.sol @@ -0,0 +1,12 @@ +// SPDX-License-Identifier: Apache-2.0 +pragma solidity >=0.8.0 <0.9.0; + +import { AdjustBalancesFacetBase } from "../AdjustBalancesFacetBase.sol"; +import { _BALANCE_ADJUSTMENTS_FIXED_RATE_RESOLVER_KEY } from "contracts/layer_2/constants/resolverKeys.sol"; +import { CommonFixedInterestRate } from "contracts/layer_0_extensions/bond/fixedInterestRate/Common.sol"; + +contract AdjustBalancesFixedRateFacet is AdjustBalancesFacetBase, CommonFixedInterestRate { + function getStaticResolverKey() external pure override returns (bytes32 staticResolverKey_) { + staticResolverKey_ = _BALANCE_ADJUSTMENTS_FIXED_RATE_RESOLVER_KEY; + } +} diff --git a/packages/ats/contracts/contracts/layer_2/adjustBalances/kpiLinkedRate/AdjustBalancesKpiLinkedRateFacet.sol b/packages/ats/contracts/contracts/layer_2/adjustBalances/kpiLinkedRate/AdjustBalancesKpiLinkedRateFacet.sol new file mode 100644 index 000000000..c010f7196 --- /dev/null +++ b/packages/ats/contracts/contracts/layer_2/adjustBalances/kpiLinkedRate/AdjustBalancesKpiLinkedRateFacet.sol @@ -0,0 +1,14 @@ +// SPDX-License-Identifier: Apache-2.0 +pragma solidity >=0.8.0 <0.9.0; + +import { AdjustBalancesFacetBase } from "../AdjustBalancesFacetBase.sol"; +import { _BALANCE_ADJUSTMENTS_KPI_LINKED_RATE_RESOLVER_KEY } from "contracts/layer_2/constants/resolverKeys.sol"; +import { + CommonKpiLinkedInterestRate +} from "contracts/layer_0_extensions/bond/fixingDateInterestRate/kpiInterestRate/kpiLinkedInterestRate/Common.sol"; + +contract AdjustBalancesKpiLinkedRateFacet is AdjustBalancesFacetBase, CommonKpiLinkedInterestRate { + function getStaticResolverKey() external pure override returns (bytes32 staticResolverKey_) { + staticResolverKey_ = _BALANCE_ADJUSTMENTS_KPI_LINKED_RATE_RESOLVER_KEY; + } +} diff --git a/packages/ats/contracts/contracts/layer_2/adjustBalances/standard/AdjustBalancesFacet.sol b/packages/ats/contracts/contracts/layer_2/adjustBalances/standard/AdjustBalancesFacet.sol new file mode 100644 index 000000000..d9ab680f0 --- /dev/null +++ b/packages/ats/contracts/contracts/layer_2/adjustBalances/standard/AdjustBalancesFacet.sol @@ -0,0 +1,12 @@ +// SPDX-License-Identifier: Apache-2.0 +pragma solidity >=0.8.0 <0.9.0; + +import { AdjustBalancesFacetBase } from "../AdjustBalancesFacetBase.sol"; +import { _BALANCE_ADJUSTMENTS_RESOLVER_KEY } from "contracts/layer_2/constants/resolverKeys.sol"; +import { Common } from "contracts/layer_0/common/Common.sol"; + +contract AdjustBalancesFacet is AdjustBalancesFacetBase, Common { + function getStaticResolverKey() external pure override returns (bytes32 staticResolverKey_) { + staticResolverKey_ = _BALANCE_ADJUSTMENTS_RESOLVER_KEY; + } +} diff --git a/packages/ats/contracts/contracts/layer_2/adjustBalances/sustainabilityPerformanceTargetRate/AdjustBalancesSustainabilityPerformanceTargetRateFacet.sol b/packages/ats/contracts/contracts/layer_2/adjustBalances/sustainabilityPerformanceTargetRate/AdjustBalancesSustainabilityPerformanceTargetRateFacet.sol new file mode 100644 index 000000000..f9f73e262 --- /dev/null +++ b/packages/ats/contracts/contracts/layer_2/adjustBalances/sustainabilityPerformanceTargetRate/AdjustBalancesSustainabilityPerformanceTargetRateFacet.sol @@ -0,0 +1,19 @@ +// SPDX-License-Identifier: Apache-2.0 +pragma solidity >=0.8.0 <0.9.0; + +import { AdjustBalancesFacetBase } from "../AdjustBalancesFacetBase.sol"; +import { + _BALANCE_ADJUSTMENTS_SUSTAINABILITY_PERFORMANCE_TARGET_RATE_RESOLVER_KEY +} from "contracts/layer_2/constants/resolverKeys.sol"; +// prettier-ignore +// solhint-disable-next-line max-line-length +import { CommonSustainabilityPerformanceTargetInterestRate } from "contracts/layer_0_extensions/bond/fixingDateInterestRate/kpiInterestRate/sustainabilityPerformanceTargetInterestRate/Common.sol"; + +contract AdjustBalancesSustainabilityPerformanceTargetRateFacet is + AdjustBalancesFacetBase, + CommonSustainabilityPerformanceTargetInterestRate +{ + function getStaticResolverKey() external pure override returns (bytes32 staticResolverKey_) { + staticResolverKey_ = _BALANCE_ADJUSTMENTS_SUSTAINABILITY_PERFORMANCE_TARGET_RATE_RESOLVER_KEY; + } +} diff --git a/packages/ats/contracts/contracts/layer_2/bond/Bond.sol b/packages/ats/contracts/contracts/layer_2/bond/Bond.sol index 18021de95..05f24a03b 100644 --- a/packages/ats/contracts/contracts/layer_2/bond/Bond.sol +++ b/packages/ats/contracts/contracts/layer_2/bond/Bond.sol @@ -4,10 +4,10 @@ pragma solidity >=0.8.0 <0.9.0; import { IBond } from "../interfaces/bond/IBond.sol"; import { IBondRead } from "../interfaces/bond/IBondRead.sol"; import { IKyc } from "../../layer_1/interfaces/kyc/IKyc.sol"; -import { Common } from "../../layer_1/common/Common.sol"; import { _CORPORATE_ACTION_ROLE, _BOND_MANAGER_ROLE, _MATURITY_REDEEMER_ROLE } from "../../layer_1/constants/roles.sol"; +import { Internals } from "contracts/layer_0/Internals.sol"; -abstract contract Bond is IBond, Common { +abstract contract Bond is IBond, Internals { function fullRedeemAtMaturity( address _tokenHolder ) @@ -26,9 +26,8 @@ abstract contract Bond is IBond, Common { for (uint256 i = 0; i < partitions.length; i++) { bytes32 partition = partitions[i]; uint256 balance = _balanceOfByPartition(partition, _tokenHolder); - if (balance > 0) { - _redeemByPartition(partition, _tokenHolder, _msgSender(), balance, "", ""); - } + assert(balance > 0); + _redeemByPartition(partition, _tokenHolder, _msgSender(), balance, "", ""); } } @@ -59,22 +58,15 @@ abstract contract Bond is IBond, Common { override onlyUnpaused onlyRole(_CORPORATE_ACTION_ROLE) + validateDates(_newCoupon.startDate, _newCoupon.endDate) validateDates(_newCoupon.recordDate, _newCoupon.executionDate) + validateDates(_newCoupon.fixingDate, _newCoupon.executionDate) onlyValidTimestamp(_newCoupon.recordDate) - returns (bool success_, uint256 couponID_) + onlyValidTimestamp(_newCoupon.fixingDate) + returns (uint256 couponID_) { bytes32 corporateActionID; - (success_, corporateActionID, couponID_) = _setCoupon(_newCoupon); - emit CouponSet( - corporateActionID, - couponID_, - _msgSender(), - _newCoupon.recordDate, - _newCoupon.executionDate, - _newCoupon.rate, - _newCoupon.rateDecimals, - _newCoupon.period - ); + (corporateActionID, couponID_) = _setCoupon(_newCoupon); } function updateMaturityDate( @@ -91,17 +83,4 @@ abstract contract Bond is IBond, Common { success_ = _setMaturityDate(_newMaturityDate); return success_; } - - // solhint-disable-next-line func-name-mixedcase - function _initialize_bond( - IBondRead.BondDetailsData calldata _bondDetailsData - ) - internal - validateDates(_bondDetailsData.startingDate, _bondDetailsData.maturityDate) - onlyValidTimestamp(_bondDetailsData.startingDate) - { - BondDataStorage storage bondStorage = _bondStorage(); - bondStorage.initialized = true; - _storeBondDetails(_bondDetailsData); - } } diff --git a/packages/ats/contracts/contracts/layer_2/bond/BondRead.sol b/packages/ats/contracts/contracts/layer_2/bond/BondRead.sol index 149c1f7cf..0bd8a28ea 100644 --- a/packages/ats/contracts/contracts/layer_2/bond/BondRead.sol +++ b/packages/ats/contracts/contracts/layer_2/bond/BondRead.sol @@ -2,11 +2,10 @@ pragma solidity >=0.8.0 <0.9.0; import { IBondRead } from "../interfaces/bond/IBondRead.sol"; -import { Common } from "../../layer_1/common/Common.sol"; -import { COUPON_CORPORATE_ACTION_TYPE } from "../constants/values.sol"; -import { IStaticFunctionSelectors } from "../../interfaces/resolver/resolverProxy/IStaticFunctionSelectors.sol"; +import { COUPON_CORPORATE_ACTION_TYPE } from "../../layer_0/constants/values.sol"; +import { Internals } from "../../layer_0/Internals.sol"; -abstract contract BondRead is IBondRead, IStaticFunctionSelectors, Common { +abstract contract BondRead is IBondRead, Internals { function getBondDetails() external view override returns (BondDetailsData memory bondDetailsData_) { return _getBondDetails(); } @@ -68,4 +67,19 @@ abstract contract BondRead is IBondRead, IStaticFunctionSelectors, Common { function getTotalCouponHolders(uint256 _couponID) external view returns (uint256) { return _getTotalCouponHolders(_couponID); } + + function getCouponFromOrderedListAt(uint256 _pos) external view returns (uint256 couponID_) { + return _getCouponFromOrderedListAt(_pos); + } + + function getCouponsOrderedList( + uint256 _pageIndex, + uint256 _pageLength + ) external view returns (uint256[] memory couponIDs_) { + return _getCouponsOrderedList(_pageIndex, _pageLength); + } + + function getCouponsOrderedListTotal() external view returns (uint256 total_) { + return _getCouponsOrderedListTotalAdjusted(); + } } diff --git a/packages/ats/contracts/contracts/layer_2/constants/resolverKeys.sol b/packages/ats/contracts/contracts/layer_2/constants/resolverKeys.sol index 6a924dacf..f3e5f0318 100644 --- a/packages/ats/contracts/contracts/layer_2/constants/resolverKeys.sol +++ b/packages/ats/contracts/contracts/layer_2/constants/resolverKeys.sol @@ -6,23 +6,122 @@ pragma solidity >=0.8.0 <0.9.0; // keccak256('security.token.standard.equity.resolverKey'); bytes32 constant _EQUITY_RESOLVER_KEY = 0xfe85fe0513f5a5676011f59495ae16b2b93c981c190e99e61903e5603542c810; -// keccak256('security.token.standard.bond.resolverKey'); -bytes32 constant _BOND_RESOLVER_KEY = 0x09c1d80a160a7250b5fabc46d06a7fa4067e6d7292047c5024584b43f17d55ef; +// keccak256('security.token.standard.bond.variable.rate.resolverKey'); +bytes32 constant _BOND_VARIABLE_RATE_RESOLVER_KEY = 0xe6594ee8f54f346ab25268fdc7955031a6b06102355e1446353d89ab1d593de3; -// keccak256('security.token.standard.bond.read.resolverKey'); -bytes32 constant _BOND_READ_RESOLVER_KEY = 0xe7ca0b805514da05524faf33d2d9d9432bf1dfa53096073a7267041cfdfb6d68; +// keccak256('security.token.standard.bond.fixed.rate.resolverKey'); +bytes32 constant _BOND_FIXED_RATE_RESOLVER_KEY = 0xd55d8787d23b78e70dada1ade45b8758f5c027e2cddf3556606c07d388ce159a; + +// keccak256('security.token.standard.bond.kpilinked.rate.resolverKey'); +bytes32 constant _BOND_KPI_LINKED_RATE_RESOLVER_KEY = 0x99c145ff21354eb7b25cb096873143fa3d3aba98457b96bcd13f1d1f2b9bf28c; + +// keccak256('security.token.standard.bond.SustainabilityPerformanceTarget.rate.resolverKey'); +bytes32 constant _BOND_SUSTAINABILITY_PERFORMANCE_TARGET_RATE_RESOLVER_KEY = 0x8048a878c656dcf3886e69ad27a9272a4fb9499299ab5f0e1b6c99ac3b1130f8; + +// keccak256('security.token.standard.bond.variable.read.resolverKey'); +bytes32 constant _BOND_VARIABLE_READ_RESOLVER_KEY = 0x624866e79d4c0a78a8dc32cbce49563cdf86eba627bd05a9821dbaa1674ac231; + +// keccak256('security.token.standard.bond.fixed.read.resolverKey'); +bytes32 constant _BOND_FIXED_READ_RESOLVER_KEY = 0xd5d703d15aa25ad6419288846269dcbba84f489f1c986be2c919f84c042b8c24; + +// keccak256('security.token.standard.bond.kpilinked.read.resolverKey'); +bytes32 constant _BOND_KPI_LINKED_READ_RESOLVER_KEY = 0xcced91a2a03bf45bd62730a7f4703ee2d762f8ebccff315c7145258265f73249; + +// keccak256('security.token.standard.bond.SustainabilityPerformanceTarget.read.resolverKey'); +bytes32 constant _BOND_SUSTAINABILITY_PERFORMANCE_TARGET_READ_RESOLVER_KEY = 0x339d458f2928ef5148317aab39e4375a27e6c531d2e5b9de2d4fb23ad0e8b504; // keccak256('security.token.standard.scheduled.snapshots.resolverKey'); bytes32 constant _SCHEDULED_SNAPSHOTS_RESOLVER_KEY = 0x100f681e33d02a1124c2c05a537a1229eca89767c5e6e8720066ca74bfb85793; +// keccak256("security.token.standard.scheduled.snapshots.fixed.rate.resolverKey") +bytes32 constant _SCHEDULED_SNAPSHOTS_FIXED_RATE_RESOLVER_KEY = 0xe3f0d8c05423e6bf8dc42fb776a1ce265739fc66f9b501077b207a0c2a56cab6; + +// keccak256("security.token.standard.scheduled.snapshots.kpilinked.rate.resolverKey") +bytes32 constant _SCHEDULED_SNAPSHOTS_KPI_LINKED_RATE_RESOLVER_KEY = 0xbfb6dd5a6beac6604a320b8363bc0da4093ba327dd037970ad82d422b0d88526; + +// keccak256("security.token.standard.scheduled.snapshots.SustainabilityPerformanceTarget.rate.resolverKey") +bytes32 constant _SCHEDULED_SNAPSHOTS_SUSTAINABILITY_PERFORMANCE_TARGET_RATE_RESOLVER_KEY = 0x99a85df534e32a3b9fce8e80f0cc30d6703e578eb5c641ab2d9e95530d046b4b; + // keccak256('security.token.standard.scheduled.balanceAdjustments.resolverKey'); bytes32 constant _SCHEDULED_BALANCE_ADJUSTMENTS_RESOLVER_KEY = 0xc418e67a48260d700e5f85863ad6fa6593206a4385728f8baba1572d631535e0; +// keccak256("security.token.standard.scheduled.balanceAdjustments.fixed.rate.resolverKey") +bytes32 constant _SCHEDULED_BALANCE_ADJUSTMENTS_FIXED_RATE_RESOLVER_KEY = 0xb3336a1ececdcd807fd6e81cc57e9392c75bf3fd303a2f5df0b11c0dda87ce7f; + +// keccak256("security.token.standard.scheduled.balanceAdjustments.kpilinked.rate.resolverKey") +bytes32 constant _SCHEDULED_BALANCE_ADJUSTMENTS_KPI_LINKED_RATE_RESOLVER_KEY = 0x3da33aed4e04baa1b9c39bd96d0bc7be51ecaa1468eff7f632c29fb134644cb4; + +// keccak256("security.token.standard.scheduled.balanceAdjustments.SustainabilityPerformanceTarget.rate.resolverKey") +bytes32 constant _SCHEDULED_BALANCE_ADJUSTMENTS_SUSTAINABILITY_PERFORMANCE_TARGET_RATE_RESOLVER_KEY = 0x1168df5bb8a348d137af6e29915c261dc82c495f72484a046ac4f750899625f4; + +// keccak256('security.token.standard.scheduled.couponListing.resolverKey'); +bytes32 constant _SCHEDULED_COUPON_LISTING_RESOLVER_KEY = 0x6cc7645ae5bcd122875ce8bd150bd28dda6374546c4c2421e5ae4fdeedb3ab30; + +// keccak256("security.token.standard.scheduled.couponListing.fixed.rate.resolverKey") +bytes32 constant _SCHEDULED_COUPON_LISTING_FIXED_RATE_RESOLVER_KEY = 0x9c249eccb68ce7eae5f58a9b4fbe1f3b6a6f2a644b36c3f1b3559077b4f4e266; + +// keccak256("security.token.standard.scheduled.couponListing.kpilinked.rate.resolverKey") +bytes32 constant _SCHEDULED_COUPON_LISTING_KPI_LINKED_RATE_RESOLVER_KEY = 0x9f42d2f2ae6efad6d2acf0399ec9e5a1bed9e41c68a86b58f1de78da4fe3c598; + +// keccak256("security.token.standard.scheduled.couponListing.SustainabilityPerformanceTarget.rate.resolverKey") +bytes32 constant _SCHEDULED_COUPON_LISTING_SUSTAINABILITY_PERFORMANCE_TARGET_RATE_RESOLVER_KEY = 0x85c0dee450a5a4657a9de39ca4ba19881b079d55d5bb64641d52f59bea709ba8; + // keccak256('security.token.standard.scheduled.tasks.resolverKey'); bytes32 constant _SCHEDULED_TASKS_RESOLVER_KEY = 0xa4934195ab83f1497ce5fc99b68d0f41694716bcfba5f232aa6c8e0d4d504f08; +// keccak256("security.token.standard.scheduled.crossOrderedTasks.fixed.rate.resolverKey") +bytes32 constant _SCHEDULED_CROSS_ORDERED_TASKS_FIXED_RATE_RESOLVER_KEY = 0x1312a5fa6cd5c7128015b199c47eacbf1636ef5cf437c0ee84c619dfbd372ca0; + +// keccak256("security.token.standard.scheduled.crossOrderedTasks.kpilinked.rate.resolverKey") +bytes32 constant _SCHEDULED_CROSS_ORDERED_TASKS_KPI_LINKED_RATE_RESOLVER_KEY = 0x04d20e52e58dbadedfcf6c373a826fc5f7c665fd6caf67c8a65a9e777a8b70ec; + +// keccak256("security.token.standard.scheduled.crossOrderedTasks.SustainabilityPerformanceTarget.rate.resolverKey") +bytes32 constant _SCHEDULED_CROSS_ORDERED_TASKS_SUSTAINABILITY_PERFORMANCE_TARGET_RATE_RESOLVER_KEY = 0x23d3302e505d889e80b20005bf316ccd7cbbd3c547a7305d600e8f0d9bc73267; + // keccak256('security.token.standard.balanceAdjustments.resolverKey'); bytes32 constant _BALANCE_ADJUSTMENTS_RESOLVER_KEY = 0x2bbe9fb018f1e7dd12b4442154e7fdfd75aec7b0a65d07debf49de4ece5fe8b8; +// keccak256("security.token.standard.balanceAdjustments.fixed.rate.resolverKey"); +bytes32 constant _BALANCE_ADJUSTMENTS_FIXED_RATE_RESOLVER_KEY = 0xa7e8f6d5c4b3a2e1f9d8c7b6a5e4f3d2c1b9a8e7f6d5c4b3a2e1f9d8c7b6a5e4; + +// keccak256("security.token.standard.balanceAdjustments.kpilinked.rate.resolverKey"); +bytes32 constant _BALANCE_ADJUSTMENTS_KPI_LINKED_RATE_RESOLVER_KEY = 0xb8f9e7d6c5b4a3e2f1d9c8b7a6e5f4d3c2b1a9e8f7d6c5b4a3e2f1d9c8b7a6e5; + +// keccak256("security.token.standard.balanceAdjustments.SustainabilityPerformanceTarget.rate.resolverKey"); +bytes32 constant _BALANCE_ADJUSTMENTS_SUSTAINABILITY_PERFORMANCE_TARGET_RATE_RESOLVER_KEY = 0xc9e1f8d7c6b5a4e3f2d1c9b8a7e6f5d4c3b2a1e9f8d7c6b5a4e3f2d1c9b8a7e6; + // keccak256('security.token.standard.proceedRecipients.resolverKey'); bytes32 constant _PROCEED_RECIPIENTS_RESOLVER_KEY = 0x87f4b676bf89cd24a01a78fd8e7fb2102c2f6d034be73d16402f7297e0ae625b; + +// keccak256("security.token.standard.proceedRecipients.fixed.rate.resolverKey"); +bytes32 constant _PROCEED_RECIPIENTS_FIXED_RATE_RESOLVER_KEY = 0xd1f2e9d8c7b6a5e4f3d2c1b9a8e7f6d5c4b3a2e1f9d8c7b6a5e4f3d2c1b9a8e7; + +// keccak256("security.token.standard.proceedRecipients.kpilinked.rate.resolverKey"); +bytes32 constant _PROCEED_RECIPIENTS_KPI_LINKED_RATE_RESOLVER_KEY = 0xe2f3e1d9c8b7a6e5f4d3c2b1a9e8f7d6c5b4a3e2f1d9c8b7a6e5f4d3c2b1a9e8; + +// keccak256("security.token.standard.proceedRecipients.SustainabilityPerformanceTarget.rate.resolverKey"); +bytes32 constant _PROCEED_RECIPIENTS_SUSTAINABILITY_PERFORMANCE_TARGET_RATE_RESOLVER_KEY = 0xf3e4f2e1d9c8b7a6e5f4d3c2b1a9e8f7d6c5b4a3e2f1d9c8b7a6e5f4d3c2b1a9; + +// keccak256('security.token.standard.fixedRate.resolverKey'); +bytes32 constant _FIXED_RATE_RESOLVER_KEY = 0x2871e1c37f7423765d88b16528db7e80ad8e2bae5ab5d55e26659840c1d6b504; + +// keccak256('security.token.standard.kpiLinkedRate.resolverKey'); +bytes32 constant _KPI_LINKED_RATE_RESOLVER_KEY = 0x92999bd0329d03e46274ce7743ebe0060df95286df4fa7b354937b7d21757d22; + +// keccak256('security.token.standard.sustainabilityPerformanceTargetRate.resolverKey'); +bytes32 constant _SUSTAINABILITY_PERFORMANCE_TARGET_RATE_RESOLVER_KEY = 0xa261a7434029a925924f47ccea7fbe12af1e56efd74e8f1d8ac23bec19a27e49; + +// keccak256('security.token.standard.kpis.resolverKey'); +bytes32 constant _KPIS_RESOLVER_KEY = 0xb228c36d89348606afcfbad286f8eddb0d0cdd727eefd0f0fd87f17ea0793051; + +// keccak256('security.token.standard.kpis.latest.resolverKey'); +bytes32 constant _KPIS_LATEST_RESOLVER_KEY = 0x74c5b383d6a5c70ac558779f6286a871cfb3fd94d076be0cae4861e57f4db077; + +// keccak256('security.token.standard.kpis.latest.fixed.rate.resolverKey'); +bytes32 constant _KPIS_LATEST_FIXED_RATE_RESOLVER_KEY = 0xd64d934b81c9185a4a06f528d8e39de9f53b7947736496d32a79d4269f3fa442; + +// keccak256('security.token.standard.kpis.latest.kpilinked.rate.resolverKey'); +bytes32 constant _KPIS_LATEST_KPI_LINKED_RATE_RESOLVER_KEY = 0x9a05806c3d9c062dfa7983f282dccc0397cb5d4ebf19b80ad4b5586c1d8c6cc6; + +// keccak256('security.token.standard.kpis.latest.SustainabilityPerformanceTarget.rate.resolverKey'); +bytes32 constant _KPIS_LATEST_SUSTAINABILITY_PERFORMANCE_TARGET_RATE_RESOLVER_KEY = 0xb668a0e99ee4bce486604d5a7097a4e5d837d1736e0cf43b190b56d0adea78b9; diff --git a/packages/ats/contracts/contracts/layer_2/constants/roles.sol b/packages/ats/contracts/contracts/layer_2/constants/roles.sol index 2cd2c9c57..b95d85c2d 100644 --- a/packages/ats/contracts/contracts/layer_2/constants/roles.sol +++ b/packages/ats/contracts/contracts/layer_2/constants/roles.sol @@ -8,3 +8,9 @@ bytes32 constant _ADJUSTMENT_BALANCE_ROLE = 0x6d0d63b623e69df3a6ea8aebd01f360a02 // keccak256('security.token.standard.role.proceedRecipient'); bytes32 constant _PROCEED_RECIPIENT_MANAGER_ROLE = 0xebc53fe99fea28c7aa9476a714959af5b931f34a8a8734365ec63113198d512f; + +// keccak256('security.token.standard.role.interestRateManager'); +bytes32 constant _INTEREST_RATE_MANAGER_ROLE = 0xa174f099c94c902831d8b8a07810700505da86a76ea0bcb7629884ef26cf682e; + +// keccak256('security.token.standard.role.kpiManager'); +bytes32 constant _KPI_MANAGER_ROLE = 0x441e549cc2c88d01fa80bd9e7b40412d3106214149223501aa25d4fa23bf306d; diff --git a/packages/ats/contracts/contracts/layer_2/constants/storagePositions.sol b/packages/ats/contracts/contracts/layer_2/constants/storagePositions.sol index 984952a90..9faf181aa 100644 --- a/packages/ats/contracts/contracts/layer_2/constants/storagePositions.sol +++ b/packages/ats/contracts/contracts/layer_2/constants/storagePositions.sol @@ -23,3 +23,12 @@ bytes32 constant _ERC20_STORAGE_POSITION = 0xd9e01023f6efb8d6fd07b486ce7d576973b // keccak256('security.token.standard.snapshot.2.storage'); bytes32 constant _SNAPSHOT_2_STORAGE_POSITION = 0x7fa31c0dfd7893e990d22efcc9d48c475631ab02fa1ab34086c54e7f6d9d9b10; + +// keccak256('security.token.standard.fixed.rate.storage'); +bytes32 constant _FIXED_RATE_STORAGE_POSITION = 0x15c219561d57f111c36d547315cfca3a61aa37154b27a2b98e8991c6b8b15a34; + +// keccak256('security.token.standard.kpiLinked.rate.storage'); +bytes32 constant _KPI_LINKED_RATE_STORAGE_POSITION = 0x3004b60ac76f4502c30ee18a6db5845c0ce175b00881a07640a1fd25d9506785; + +// keccak256('security.token.standard.sustainabilityPerformanceTarget.rate.storage'); +bytes32 constant _SUSTAINABILITY_PERFORMANCE_TARGET_RATE_STORAGE_POSITION = 0x93dfece0e867ca7a953a76c2874bb7238395e73f4592fa6a72639df7d5350c09; diff --git a/packages/ats/contracts/contracts/layer_2/equity/Equity.sol b/packages/ats/contracts/contracts/layer_2/equity/Equity.sol index 07d46deb8..d59668288 100644 --- a/packages/ats/contracts/contracts/layer_2/equity/Equity.sol +++ b/packages/ats/contracts/contracts/layer_2/equity/Equity.sol @@ -6,9 +6,9 @@ import { DIVIDEND_CORPORATE_ACTION_TYPE, VOTING_RIGHTS_CORPORATE_ACTION_TYPE, BALANCE_ADJUSTMENT_CORPORATE_ACTION_TYPE -} from "../constants/values.sol"; +} from "../../layer_0/constants/values.sol"; import { IEquity } from "../interfaces/equity/IEquity.sol"; -import { Common } from "../../layer_1/common/Common.sol"; +import { Common } from "../../layer_0/common/Common.sol"; import { EnumerableSet } from "@openzeppelin/contracts/utils/structs/EnumerableSet.sol"; abstract contract Equity is IEquity, Common { @@ -23,10 +23,10 @@ abstract contract Equity is IEquity, Common { onlyRole(_CORPORATE_ACTION_ROLE) validateDates(_newDividend.recordDate, _newDividend.executionDate) onlyValidTimestamp(_newDividend.recordDate) - returns (bool success_, uint256 dividendID_) + returns (uint256 dividendID_) { bytes32 corporateActionID; - (success_, corporateActionID, dividendID_) = _setDividends(_newDividend); + (corporateActionID, dividendID_) = _setDividends(_newDividend); emit DividendSet( corporateActionID, dividendID_, @@ -46,10 +46,10 @@ abstract contract Equity is IEquity, Common { onlyUnpaused onlyRole(_CORPORATE_ACTION_ROLE) onlyValidTimestamp(_newVoting.recordDate) - returns (bool success_, uint256 voteID_) + returns (uint256 voteID_) { bytes32 corporateActionID; - (success_, corporateActionID, voteID_) = _setVoting(_newVoting); + (corporateActionID, voteID_) = _setVoting(_newVoting); emit VotingSet(corporateActionID, voteID_, _msgSender(), _newVoting.recordDate, _newVoting.data); } @@ -62,10 +62,10 @@ abstract contract Equity is IEquity, Common { onlyRole(_CORPORATE_ACTION_ROLE) onlyValidTimestamp(_newBalanceAdjustment.executionDate) validateFactor(_newBalanceAdjustment.factor) - returns (bool success_, uint256 balanceAdjustmentID_) + returns (uint256 balanceAdjustmentID_) { bytes32 corporateActionID; - (success_, corporateActionID, balanceAdjustmentID_) = _setScheduledBalanceAdjustment(_newBalanceAdjustment); + (corporateActionID, balanceAdjustmentID_) = _setScheduledBalanceAdjustment(_newBalanceAdjustment); emit ScheduledBalanceAdjustmentSet( corporateActionID, balanceAdjustmentID_, @@ -184,7 +184,7 @@ abstract contract Equity is IEquity, Common { onlyMatchingActionType(BALANCE_ADJUSTMENT_CORPORATE_ACTION_TYPE, _balanceAdjustmentID - 1) returns (ScheduledBalanceAdjustment memory balanceAdjustment_) { - return _getScheduledBalanceAdjusment(_balanceAdjustmentID); + return _getScheduledBalanceAdjustment(_balanceAdjustmentID); } function getScheduledBalanceAdjustmentCount() external view override returns (uint256 balanceAdjustmentCount_) { diff --git a/packages/ats/contracts/contracts/layer_2/interestRates/fixedRate/FixedRate.sol b/packages/ats/contracts/contracts/layer_2/interestRates/fixedRate/FixedRate.sol new file mode 100644 index 000000000..e79b7818a --- /dev/null +++ b/packages/ats/contracts/contracts/layer_2/interestRates/fixedRate/FixedRate.sol @@ -0,0 +1,28 @@ +// SPDX-License-Identifier: Apache-2.0 +pragma solidity >=0.8.0 <0.9.0; + +import { CommonFixedInterestRate } from "../../../layer_0_extensions/bond/fixedInterestRate/Common.sol"; +import { IFixedRate } from "../../interfaces/interestRates/fixedRate/IFixedRate.sol"; +import { _INTEREST_RATE_MANAGER_ROLE } from "../../constants/roles.sol"; + +contract FixedRate is IFixedRate, CommonFixedInterestRate { + // solhint-disable-next-line func-name-mixedcase + function initialize_FixedRate( + FixedRateData calldata _initData + ) external override onlyUninitialized(_fixedRateStorage().initialized) { + _setRate(_initData.rate, _initData.rateDecimals); + _fixedRateStorage().initialized = true; + } + + function setRate( + uint256 _newRate, + uint8 _newRateDecimals + ) external override onlyRole(_INTEREST_RATE_MANAGER_ROLE) onlyUnpaused { + _setRate(_newRate, _newRateDecimals); + emit RateUpdated(_msgSender(), _newRate, _newRateDecimals); + } + + function getRate() external view override returns (uint256 rate_, uint8 decimals_) { + return _getRate(); + } +} diff --git a/packages/ats/contracts/contracts/layer_2/interestRates/fixedRate/FixedRateFacet.sol b/packages/ats/contracts/contracts/layer_2/interestRates/fixedRate/FixedRateFacet.sol new file mode 100644 index 000000000..f58510902 --- /dev/null +++ b/packages/ats/contracts/contracts/layer_2/interestRates/fixedRate/FixedRateFacet.sol @@ -0,0 +1,26 @@ +// SPDX-License-Identifier: Apache-2.0 +pragma solidity >=0.8.0 <0.9.0; +import { IFixedRate } from "../../interfaces/interestRates/fixedRate/IFixedRate.sol"; +import { _FIXED_RATE_RESOLVER_KEY } from "../../constants/resolverKeys.sol"; +import { IStaticFunctionSelectors } from "../../../interfaces/resolver/resolverProxy/IStaticFunctionSelectors.sol"; +import { FixedRate } from "./FixedRate.sol"; + +contract FixedRateFacet is FixedRate, IStaticFunctionSelectors { + function getStaticResolverKey() external pure override returns (bytes32 staticResolverKey_) { + staticResolverKey_ = _FIXED_RATE_RESOLVER_KEY; + } + + function getStaticFunctionSelectors() external pure override returns (bytes4[] memory staticFunctionSelectors_) { + uint256 selectorIndex; + staticFunctionSelectors_ = new bytes4[](3); + staticFunctionSelectors_[selectorIndex++] = this.initialize_FixedRate.selector; + staticFunctionSelectors_[selectorIndex++] = this.setRate.selector; + staticFunctionSelectors_[selectorIndex++] = this.getRate.selector; + } + + function getStaticInterfaceIds() external pure override returns (bytes4[] memory staticInterfaceIds_) { + staticInterfaceIds_ = new bytes4[](1); + uint256 selectorsIndex; + staticInterfaceIds_[selectorsIndex++] = type(IFixedRate).interfaceId; + } +} diff --git a/packages/ats/contracts/contracts/layer_2/interestRates/kpiLinkedRate/KpiLinkedRate.sol b/packages/ats/contracts/contracts/layer_2/interestRates/kpiLinkedRate/KpiLinkedRate.sol new file mode 100644 index 000000000..f34b86247 --- /dev/null +++ b/packages/ats/contracts/contracts/layer_2/interestRates/kpiLinkedRate/KpiLinkedRate.sol @@ -0,0 +1,53 @@ +// SPDX-License-Identifier: Apache-2.0 +pragma solidity >=0.8.0 <0.9.0; + +import { + CommonKpiLinkedInterestRate +} from "contracts/layer_0_extensions/bond/fixingDateInterestRate/kpiInterestRate/kpiLinkedInterestRate/Common.sol"; +import { IKpiLinkedRate } from "../../interfaces/interestRates/kpiLinkedRate/IKpiLinkedRate.sol"; +import { _INTEREST_RATE_MANAGER_ROLE } from "../../constants/roles.sol"; + +contract KpiLinkedRate is IKpiLinkedRate, CommonKpiLinkedInterestRate { + // solhint-disable-next-line func-name-mixedcase + function initialize_KpiLinkedRate( + InterestRate calldata _interestRate, + ImpactData calldata _impactData, + address kpiOracle + ) external override onlyUninitialized(_kpiLinkedRateStorage().initialized) { + _setInterestRate(_interestRate); + _setImpactData(_impactData); + _setKpiOracle(kpiOracle); + _kpiLinkedRateStorage().initialized = true; + } + + function setInterestRate( + InterestRate calldata _newInterestRate + ) external onlyRole(_INTEREST_RATE_MANAGER_ROLE) onlyUnpaused checkInterestRate(_newInterestRate) { + _setInterestRate(_newInterestRate); + emit InterestRateUpdated(_msgSender(), _newInterestRate); + } + + function setImpactData( + ImpactData calldata _newImpactData + ) external onlyRole(_INTEREST_RATE_MANAGER_ROLE) onlyUnpaused checkImpactData(_newImpactData) { + _setImpactData(_newImpactData); + emit ImpactDataUpdated(_msgSender(), _newImpactData); + } + + function setKpiOracle(address _kpiOracle) external onlyRole(_INTEREST_RATE_MANAGER_ROLE) onlyUnpaused { + _setKpiOracle(_kpiOracle); + emit KpiOracleUpdated(_msgSender(), _kpiOracle); + } + + function getInterestRate() external view returns (InterestRate memory interestRate_) { + interestRate_ = _getInterestRate(); + } + + function getImpactData() external view returns (ImpactData memory impactData_) { + impactData_ = _getImpactData(); + } + + function getKpiOracle() external view returns (address kpiOracle_) { + return _getKpiOracle(); + } +} diff --git a/packages/ats/contracts/contracts/layer_2/interestRates/kpiLinkedRate/KpiLinkedRateFacet.sol b/packages/ats/contracts/contracts/layer_2/interestRates/kpiLinkedRate/KpiLinkedRateFacet.sol new file mode 100644 index 000000000..9af9433e9 --- /dev/null +++ b/packages/ats/contracts/contracts/layer_2/interestRates/kpiLinkedRate/KpiLinkedRateFacet.sol @@ -0,0 +1,30 @@ +// SPDX-License-Identifier: Apache-2.0 +pragma solidity >=0.8.0 <0.9.0; +import { IKpiLinkedRate } from "../../interfaces/interestRates/kpiLinkedRate/IKpiLinkedRate.sol"; +import { _KPI_LINKED_RATE_RESOLVER_KEY } from "../../constants/resolverKeys.sol"; +import { IStaticFunctionSelectors } from "../../../interfaces/resolver/resolverProxy/IStaticFunctionSelectors.sol"; +import { KpiLinkedRate } from "./KpiLinkedRate.sol"; + +contract KpiLinkedRateFacet is KpiLinkedRate, IStaticFunctionSelectors { + function getStaticResolverKey() external pure override returns (bytes32 staticResolverKey_) { + staticResolverKey_ = _KPI_LINKED_RATE_RESOLVER_KEY; + } + + function getStaticFunctionSelectors() external pure override returns (bytes4[] memory staticFunctionSelectors_) { + uint256 selectorIndex; + staticFunctionSelectors_ = new bytes4[](7); + staticFunctionSelectors_[selectorIndex++] = this.initialize_KpiLinkedRate.selector; + staticFunctionSelectors_[selectorIndex++] = this.setInterestRate.selector; + staticFunctionSelectors_[selectorIndex++] = this.setImpactData.selector; + staticFunctionSelectors_[selectorIndex++] = this.setKpiOracle.selector; + staticFunctionSelectors_[selectorIndex++] = this.getInterestRate.selector; + staticFunctionSelectors_[selectorIndex++] = this.getImpactData.selector; + staticFunctionSelectors_[selectorIndex++] = this.getKpiOracle.selector; + } + + function getStaticInterfaceIds() external pure override returns (bytes4[] memory staticInterfaceIds_) { + staticInterfaceIds_ = new bytes4[](1); + uint256 selectorsIndex; + staticInterfaceIds_[selectorsIndex++] = type(IKpiLinkedRate).interfaceId; + } +} diff --git a/packages/ats/contracts/contracts/layer_2/interestRates/sustainabilityPerformanceTargetRate/SustainabilityPerformanceTargetRate.sol b/packages/ats/contracts/contracts/layer_2/interestRates/sustainabilityPerformanceTargetRate/SustainabilityPerformanceTargetRate.sol new file mode 100644 index 000000000..fb763da14 --- /dev/null +++ b/packages/ats/contracts/contracts/layer_2/interestRates/sustainabilityPerformanceTargetRate/SustainabilityPerformanceTargetRate.sol @@ -0,0 +1,61 @@ +// SPDX-License-Identifier: Apache-2.0 +pragma solidity >=0.8.0 <0.9.0; + +// prettier-ignore +// solhint-disable-next-line max-line-length +import { CommonSustainabilityPerformanceTargetInterestRate } from "contracts/layer_0_extensions/bond/fixingDateInterestRate/kpiInterestRate/sustainabilityPerformanceTargetInterestRate/Common.sol"; +import { + ISustainabilityPerformanceTargetRate +} from "../../interfaces/interestRates/sustainabilityPerformanceTargetRate/ISustainabilityPerformanceTargetRate.sol"; +import { _INTEREST_RATE_MANAGER_ROLE } from "../../constants/roles.sol"; + +contract SustainabilityPerformanceTargetRate is + ISustainabilityPerformanceTargetRate, + CommonSustainabilityPerformanceTargetInterestRate +{ + // solhint-disable-next-line func-name-mixedcase + function initialize_SustainabilityPerformanceTargetRate( + InterestRate calldata _interestRate, + ImpactData[] calldata _impactData, + address[] calldata _projects + ) + external + override + onlyUninitialized(_isSustainabilityPerformanceTargetRateInitialized()) + onlyEqualLength(_impactData.length, _projects.length) + { + _initialize_SustainabilityPerformanceTargetRate(_interestRate, _impactData, _projects); + } + + function setInterestRate( + InterestRate calldata _newInterestRate + ) external onlyRole(_INTEREST_RATE_MANAGER_ROLE) onlyUnpaused { + _setSPTInterestRate(_newInterestRate); + emit InterestRateUpdated(_msgSender(), _newInterestRate); + } + + function setImpactData( + ImpactData[] calldata _newImpactData, + address[] calldata _projects + ) + external + onlyRole(_INTEREST_RATE_MANAGER_ROLE) + onlyUnpaused + onlyEqualLength(_newImpactData.length, _projects.length) + { + for (uint256 index = 0; index < _newImpactData.length; index++) { + if (!_isProceedRecipient(_projects[index])) revert NotExistingProject(_projects[index]); + _setSPTImpactData(_newImpactData[index], _projects[index]); + } + + emit ImpactDataUpdated(_msgSender(), _newImpactData, _projects); + } + + function getInterestRate() external view returns (InterestRate memory interestRate_) { + interestRate_ = _getSPTInterestRate(); + } + + function getImpactDataFor(address _project) external view returns (ImpactData memory impactData_) { + impactData_ = _getSPTImpactDataFor(_project); + } +} diff --git a/packages/ats/contracts/contracts/layer_2/interestRates/sustainabilityPerformanceTargetRate/SustainabilityPerformanceTargetRateFacet.sol b/packages/ats/contracts/contracts/layer_2/interestRates/sustainabilityPerformanceTargetRate/SustainabilityPerformanceTargetRateFacet.sol new file mode 100644 index 000000000..e99b28dd3 --- /dev/null +++ b/packages/ats/contracts/contracts/layer_2/interestRates/sustainabilityPerformanceTargetRate/SustainabilityPerformanceTargetRateFacet.sol @@ -0,0 +1,30 @@ +// SPDX-License-Identifier: Apache-2.0 +pragma solidity >=0.8.0 <0.9.0; +import { + ISustainabilityPerformanceTargetRate +} from "../../interfaces/interestRates/sustainabilityPerformanceTargetRate/ISustainabilityPerformanceTargetRate.sol"; +import { _SUSTAINABILITY_PERFORMANCE_TARGET_RATE_RESOLVER_KEY } from "../../constants/resolverKeys.sol"; +import { IStaticFunctionSelectors } from "../../../interfaces/resolver/resolverProxy/IStaticFunctionSelectors.sol"; +import { SustainabilityPerformanceTargetRate } from "./SustainabilityPerformanceTargetRate.sol"; + +contract SustainabilityPerformanceTargetRateFacet is SustainabilityPerformanceTargetRate, IStaticFunctionSelectors { + function getStaticResolverKey() external pure override returns (bytes32 staticResolverKey_) { + staticResolverKey_ = _SUSTAINABILITY_PERFORMANCE_TARGET_RATE_RESOLVER_KEY; + } + + function getStaticFunctionSelectors() external pure override returns (bytes4[] memory staticFunctionSelectors_) { + uint256 selectorIndex; + staticFunctionSelectors_ = new bytes4[](5); + staticFunctionSelectors_[selectorIndex++] = this.initialize_SustainabilityPerformanceTargetRate.selector; + staticFunctionSelectors_[selectorIndex++] = this.setInterestRate.selector; + staticFunctionSelectors_[selectorIndex++] = this.setImpactData.selector; + staticFunctionSelectors_[selectorIndex++] = this.getInterestRate.selector; + staticFunctionSelectors_[selectorIndex++] = this.getImpactDataFor.selector; + } + + function getStaticInterfaceIds() external pure override returns (bytes4[] memory staticInterfaceIds_) { + staticInterfaceIds_ = new bytes4[](1); + uint256 selectorsIndex; + staticInterfaceIds_[selectorsIndex++] = type(ISustainabilityPerformanceTargetRate).interfaceId; + } +} diff --git a/packages/ats/contracts/contracts/layer_2/interfaces/bond/IBond.sol b/packages/ats/contracts/contracts/layer_2/interfaces/bond/IBond.sol index 3ab7879d1..82780146e 100644 --- a/packages/ats/contracts/contracts/layer_2/interfaces/bond/IBond.sol +++ b/packages/ats/contracts/contracts/layer_2/interfaces/bond/IBond.sol @@ -3,6 +3,12 @@ pragma solidity >=0.8.0 <0.9.0; import { IBondRead } from "./IBondRead.sol"; interface IBond { + event MaturityDateUpdated( + address indexed bondId, + uint256 indexed maturityDate, + uint256 indexed previousMaturityDate + ); + /** * @notice Redeems all bonds at maturity from a token holder (all partitions considered) * @param _tokenHolder The address of the token holder redeeming the bonds. @@ -21,7 +27,7 @@ interface IBond { * @notice Sets a new coupon for the bond * @param _newCoupon The new coupon to be set */ - function setCoupon(IBondRead.Coupon calldata _newCoupon) external returns (bool success_, uint256 couponID_); + function setCoupon(IBondRead.Coupon calldata _newCoupon) external returns (uint256 couponID_); /** * @notice Updates the maturity date of the bond. diff --git a/packages/ats/contracts/contracts/layer_2/interfaces/bond/IBondRead.sol b/packages/ats/contracts/contracts/layer_2/interfaces/bond/IBondRead.sol index 02696c388..2ca1fa79c 100644 --- a/packages/ats/contracts/contracts/layer_2/interfaces/bond/IBondRead.sol +++ b/packages/ats/contracts/contracts/layer_2/interfaces/bond/IBondRead.sol @@ -2,6 +2,11 @@ pragma solidity >=0.8.0 <0.9.0; interface IBondRead { + enum RateCalculationStatus { + PENDING, + SET + } + struct BondDetailsData { bytes3 currency; uint256 nominalValue; @@ -13,9 +18,12 @@ interface IBondRead { struct Coupon { uint256 recordDate; uint256 executionDate; + uint256 startDate; + uint256 endDate; + uint256 fixingDate; uint256 rate; uint8 rateDecimals; - uint256 period; + RateCalculationStatus rateStatus; } struct RegisteredCoupon { @@ -25,13 +33,9 @@ interface IBondRead { struct CouponFor { uint256 tokenBalance; - uint256 rate; - uint8 rateDecimals; - uint256 recordDate; - uint256 executionDate; - uint256 period; uint8 decimals; bool recordDateReached; + Coupon coupon; } struct CouponAmountFor { @@ -93,4 +97,13 @@ interface IBondRead { * @dev It is the list of token holders at the snapshot taken at the record date */ function getTotalCouponHolders(uint256 _couponID) external view returns (uint256); + + function getCouponFromOrderedListAt(uint256 _pos) external view returns (uint256 couponID_); + + function getCouponsOrderedList( + uint256 _pageIndex, + uint256 _pageLength + ) external view returns (uint256[] memory couponIDs_); + + function getCouponsOrderedListTotal() external view returns (uint256 total_); } diff --git a/packages/ats/contracts/contracts/layer_2/interfaces/bond/IBondStorageWrapper.sol b/packages/ats/contracts/contracts/layer_2/interfaces/bond/IBondStorageWrapper.sol index fca1e11fe..0782594c5 100644 --- a/packages/ats/contracts/contracts/layer_2/interfaces/bond/IBondStorageWrapper.sol +++ b/packages/ats/contracts/contracts/layer_2/interfaces/bond/IBondStorageWrapper.sol @@ -1,39 +1,17 @@ // SPDX-License-Identifier: Apache-2.0 pragma solidity >=0.8.0 <0.9.0; +import { IBondRead } from "./IBondRead.sol"; + interface IBondStorageWrapper { /** * @notice Emitted when a coupon is created or updated for a bond or corporate action. * @param corporateActionId Unique identifier grouping related corporate actions or coupons. * @param couponId Identifier of the created or updated coupon. * @param operator Address that performed the operation. - * @param recordDate Record date timestamp used to determine eligible holders. - * @param executionDate Execution/payment date timestamp for the coupon. - * @param rate Coupon rate or amount expressed in contract-specific units. - * @param period Period length between coupon payments. - */ - event CouponSet( - bytes32 corporateActionId, - uint256 couponId, - address indexed operator, - uint256 indexed recordDate, - uint256 indexed executionDate, - uint256 rate, - uint256 rateDecimals, - uint256 period - ); - - /** - * @notice Emitted when a bond's maturity date is modified. - * @param bondId Address of the bond whose maturity changed. - * @param maturityDate New maturity timestamp. - * @param previousMaturityDate Previous maturity timestamp prior to the update. + * @param coupon Coupon struct containing recordDate, executionDate, rate, and period. */ - event MaturityDateUpdated( - address indexed bondId, - uint256 indexed maturityDate, - uint256 indexed previousMaturityDate - ); + event CouponSet(bytes32 corporateActionId, uint256 couponId, address indexed operator, IBondRead.Coupon coupon); /** * @notice Coupon creation failed due to an internal failure. diff --git a/packages/ats/contracts/contracts/layer_2/interfaces/equity/IEquity.sol b/packages/ats/contracts/contracts/layer_2/interfaces/equity/IEquity.sol index 21ece076d..e8a2b220d 100644 --- a/packages/ats/contracts/contracts/layer_2/interfaces/equity/IEquity.sol +++ b/packages/ats/contracts/contracts/layer_2/interfaces/equity/IEquity.sol @@ -78,13 +78,13 @@ interface IEquity { * @notice Sets a new dividend * @dev Can only be called by an account with the corporate actions role */ - function setDividends(Dividend calldata _newDividend) external returns (bool success_, uint256 dividendID_); + function setDividends(Dividend calldata _newDividend) external returns (uint256 dividendID_); /** * @notice Sets a new voting * @dev Can only be called by an account with the corporate actions role */ - function setVoting(Voting calldata _newVoting) external returns (bool success_, uint256 voteID_); + function setVoting(Voting calldata _newVoting) external returns (uint256 voteID_); /** * @notice Sets a new scheduled balance adjustment @@ -92,7 +92,7 @@ interface IEquity { */ function setScheduledBalanceAdjustment( ScheduledBalanceAdjustment calldata _newBalanceAdjustment - ) external returns (bool success_, uint256 balanceAdjustmentID_); + ) external returns (uint256 balanceAdjustmentID_); function getEquityDetails() external view returns (EquityDetailsData memory equityDetailsData_); diff --git a/packages/ats/contracts/contracts/layer_2/interfaces/interestRates/fixedRate/IFixedRate.sol b/packages/ats/contracts/contracts/layer_2/interfaces/interestRates/fixedRate/IFixedRate.sol new file mode 100644 index 000000000..1ae845829 --- /dev/null +++ b/packages/ats/contracts/contracts/layer_2/interfaces/interestRates/fixedRate/IFixedRate.sol @@ -0,0 +1,18 @@ +// SPDX-License-Identifier: Apache-2.0 +pragma solidity >=0.8.0 <0.9.0; + +interface IFixedRate { + struct FixedRateData { + uint256 rate; + uint8 rateDecimals; + } + + event RateUpdated(address indexed operator, uint256 newRate, uint8 newRateDecimals); + + // solhint-disable-next-line func-name-mixedcase + function initialize_FixedRate(FixedRateData calldata _initData) external; + + function setRate(uint256 _newRate, uint8 _newRateDecimals) external; + + function getRate() external view returns (uint256 rate_, uint8 decimals_); +} diff --git a/packages/ats/contracts/contracts/layer_2/interfaces/interestRates/kpiLinkedRate/IKpi.sol b/packages/ats/contracts/contracts/layer_2/interfaces/interestRates/kpiLinkedRate/IKpi.sol new file mode 100644 index 000000000..bf131b3e0 --- /dev/null +++ b/packages/ats/contracts/contracts/layer_2/interfaces/interestRates/kpiLinkedRate/IKpi.sol @@ -0,0 +1,11 @@ +// SPDX-License-Identifier: Apache-2.0 +pragma solidity >=0.8.0 <0.9.0; + +interface IKpi { + function setMinValidDate(uint256 _minValidDate) external; + + function getKpiData( + uint256 _fromDate, + uint256 _toDate + ) external view returns (uint256 kpiAggregatedValue_, bool exists_); +} diff --git a/packages/ats/contracts/contracts/layer_2/interfaces/interestRates/kpiLinkedRate/IKpiLinkedRate.sol b/packages/ats/contracts/contracts/layer_2/interfaces/interestRates/kpiLinkedRate/IKpiLinkedRate.sol new file mode 100644 index 000000000..2e2bb5a56 --- /dev/null +++ b/packages/ats/contracts/contracts/layer_2/interfaces/interestRates/kpiLinkedRate/IKpiLinkedRate.sol @@ -0,0 +1,46 @@ +// SPDX-License-Identifier: Apache-2.0 +pragma solidity >=0.8.0 <0.9.0; + +interface IKpiLinkedRate { + struct InterestRate { + uint256 maxRate; + uint256 baseRate; + uint256 minRate; + uint256 startPeriod; + uint256 startRate; + uint256 missedPenalty; + uint256 reportPeriod; + uint8 rateDecimals; + } + struct ImpactData { + uint256 maxDeviationCap; + uint256 baseLine; + uint256 maxDeviationFloor; + uint8 impactDataDecimals; + uint256 adjustmentPrecision; + } + + event InterestRateUpdated(address indexed operator, InterestRate newInterestRate); + event ImpactDataUpdated(address indexed operator, ImpactData newImpactData); + event KpiOracleUpdated(address indexed operator, address kpiOracle); + + error WrongInterestRateValues(InterestRate interestRate); + error WrongImpactDataValues(ImpactData impactData); + error KpiOracleCalledFailed(); + + // solhint-disable-next-line func-name-mixedcase + function initialize_KpiLinkedRate( + InterestRate calldata _interestRate, + ImpactData calldata _impactData, + address kpiOracle + ) external; + + function setInterestRate(InterestRate calldata _newInterestRate) external; + function setImpactData(ImpactData calldata _newImpactData) external; + function setKpiOracle(address _kpiOracle) external; + + function getInterestRate() external view returns (InterestRate memory interestRate_); + + function getImpactData() external view returns (ImpactData memory impactData_); + function getKpiOracle() external view returns (address kpiOracle_); +} diff --git a/packages/ats/contracts/contracts/layer_2/interfaces/interestRates/sustainabilityPerformanceTargetRate/ISustainabilityPerformanceTargetRate.sol b/packages/ats/contracts/contracts/layer_2/interfaces/interestRates/sustainabilityPerformanceTargetRate/ISustainabilityPerformanceTargetRate.sol new file mode 100644 index 000000000..1a86cee02 --- /dev/null +++ b/packages/ats/contracts/contracts/layer_2/interfaces/interestRates/sustainabilityPerformanceTargetRate/ISustainabilityPerformanceTargetRate.sol @@ -0,0 +1,47 @@ +// SPDX-License-Identifier: Apache-2.0 +pragma solidity >=0.8.0 <0.9.0; + +interface ISustainabilityPerformanceTargetRate { + struct InterestRate { + uint256 baseRate; + uint256 startPeriod; + uint256 startRate; + uint8 rateDecimals; + } + + enum BaseLineMode { + MINIMUM, + MAXIMUM + } + + enum ImpactDataMode { + PENALTY, + BONUS + } + + struct ImpactData { + uint256 baseLine; + BaseLineMode baseLineMode; + uint256 deltaRate; + ImpactDataMode impactDataMode; + } + + event InterestRateUpdated(address indexed operator, InterestRate newInterestRate); + event ImpactDataUpdated(address indexed operator, ImpactData[] newImpactData, address[] projects); + + error NotExistingProject(address); + error ProvidedListsLengthMismatch(uint256 impactDataLength, uint256 projectsLength); + + // solhint-disable-next-line func-name-mixedcase + function initialize_SustainabilityPerformanceTargetRate( + InterestRate calldata _interestRate, + ImpactData[] calldata _impactData, + address[] calldata _projects + ) external; + + function setInterestRate(InterestRate calldata _newInterestRate) external; + function setImpactData(ImpactData[] calldata _newImpactData, address[] calldata projects) external; + + function getInterestRate() external view returns (InterestRate memory interestRate_); + function getImpactDataFor(address _project) external view returns (ImpactData memory impactData_); +} diff --git a/packages/ats/contracts/contracts/layer_2/interfaces/kpis/kpiLatest/IKpis.sol b/packages/ats/contracts/contracts/layer_2/interfaces/kpis/kpiLatest/IKpis.sol new file mode 100644 index 000000000..0cf2a9f86 --- /dev/null +++ b/packages/ats/contracts/contracts/layer_2/interfaces/kpis/kpiLatest/IKpis.sol @@ -0,0 +1,24 @@ +// SPDX-License-Identifier: Apache-2.0 +pragma solidity >=0.8.0 <0.9.0; + +interface IKpis { + event KpiDataAdded(address indexed project, uint256 date, uint256 value); + + error InvalidDate(uint256 providedDate, uint256 minDate, uint256 maxDate); + + error KpiDataAlreadyExists(uint256 date); + + error InvalidDateRange(uint256 fromDate, uint256 toDate); + + function addKpiData(uint256 _date, uint256 _value, address _project) external; + + function getLatestKpiData( + uint256 _from, + uint256 _to, + address _project + ) external view returns (uint256 value_, bool exists_); + + function getMinDate() external view returns (uint256 minDate_); + + function isCheckPointDate(uint256 _date, address _project) external view returns (bool exists_); +} diff --git a/packages/ats/contracts/contracts/layer_2/interfaces/scheduledTasks/scheduledCouponListing/IScheduledCouponListing.sol b/packages/ats/contracts/contracts/layer_2/interfaces/scheduledTasks/scheduledCouponListing/IScheduledCouponListing.sol new file mode 100644 index 000000000..a3113f9a4 --- /dev/null +++ b/packages/ats/contracts/contracts/layer_2/interfaces/scheduledTasks/scheduledCouponListing/IScheduledCouponListing.sol @@ -0,0 +1,13 @@ +// SPDX-License-Identifier: Apache-2.0 +pragma solidity >=0.8.0 <0.9.0; + +import { ScheduledTask } from "../scheduledTasksCommon/IScheduledTasksCommon.sol"; + +interface IScheduledCouponListing { + function scheduledCouponListingCount() external view returns (uint256); + + function getScheduledCouponListing( + uint256 _pageIndex, + uint256 _pageLength + ) external view returns (ScheduledTask[] memory scheduledCouponListing_); +} diff --git a/packages/ats/contracts/contracts/layer_2/kpis/kpiLatest/Kpis.sol b/packages/ats/contracts/contracts/layer_2/kpis/kpiLatest/Kpis.sol new file mode 100644 index 000000000..4b9ccd96a --- /dev/null +++ b/packages/ats/contracts/contracts/layer_2/kpis/kpiLatest/Kpis.sol @@ -0,0 +1,34 @@ +// SPDX-License-Identifier: Apache-2.0 +pragma solidity >=0.8.0 <0.9.0; + +import { IKpis } from "../../interfaces/kpis/kpiLatest/IKpis.sol"; +import { _KPI_MANAGER_ROLE } from "../../constants/roles.sol"; +// prettier-ignore +// solhint-disable-next-line max-line-length +import { InternalsSustainabilityPerformanceTargetInterestRate } from "contracts/layer_0_extensions/bond/fixingDateInterestRate/kpiInterestRate/sustainabilityPerformanceTargetInterestRate/Internals.sol"; + +abstract contract Kpis is IKpis, InternalsSustainabilityPerformanceTargetInterestRate { + function addKpiData( + uint256 _date, + uint256 _value, + address _project + ) external onlyRole(_KPI_MANAGER_ROLE) onlyUnpaused isValidDate(_date, _project) { + _addKpiData(_date, _value, _project); + } + + function getLatestKpiData( + uint256 _from, + uint256 _to, + address _project + ) external view returns (uint256 value_, bool exists_) { + return _getLatestKpiData(_from, _to, _project); + } + + function getMinDate() external view returns (uint256 minDate_) { + return _getMinDateAdjusted(); + } + + function isCheckPointDate(uint256 _date, address _project) external view returns (bool exists_) { + return _isCheckpointDate(_date, _project); + } +} diff --git a/packages/ats/contracts/contracts/layer_2/kpis/kpiLatest/KpisFacetBase.sol b/packages/ats/contracts/contracts/layer_2/kpis/kpiLatest/KpisFacetBase.sol new file mode 100644 index 000000000..6b01ef8a1 --- /dev/null +++ b/packages/ats/contracts/contracts/layer_2/kpis/kpiLatest/KpisFacetBase.sol @@ -0,0 +1,23 @@ +// SPDX-License-Identifier: Apache-2.0 +pragma solidity >=0.8.0 <0.9.0; + +import { IStaticFunctionSelectors } from "../../../interfaces/resolver/resolverProxy/IStaticFunctionSelectors.sol"; +import { IKpis } from "../../interfaces/kpis/kpiLatest/IKpis.sol"; +import { Kpis } from "./Kpis.sol"; + +abstract contract KpisFacetBase is Kpis, IStaticFunctionSelectors { + function getStaticFunctionSelectors() external pure override returns (bytes4[] memory staticFunctionSelectors_) { + uint256 selectorIndex; + staticFunctionSelectors_ = new bytes4[](4); + staticFunctionSelectors_[selectorIndex++] = this.addKpiData.selector; + staticFunctionSelectors_[selectorIndex++] = this.getLatestKpiData.selector; + staticFunctionSelectors_[selectorIndex++] = this.getMinDate.selector; + staticFunctionSelectors_[selectorIndex++] = this.isCheckPointDate.selector; + } + + function getStaticInterfaceIds() external pure override returns (bytes4[] memory staticInterfaceIds_) { + staticInterfaceIds_ = new bytes4[](1); + uint256 selectorsIndex; + staticInterfaceIds_[selectorsIndex++] = type(IKpis).interfaceId; + } +} diff --git a/packages/ats/contracts/contracts/layer_2/kpis/kpiLatest/sustainabilityPerformanceTargetRate/KpisSustainabilityPerformanceTargetRateFacet.sol b/packages/ats/contracts/contracts/layer_2/kpis/kpiLatest/sustainabilityPerformanceTargetRate/KpisSustainabilityPerformanceTargetRateFacet.sol new file mode 100644 index 000000000..595a508c7 --- /dev/null +++ b/packages/ats/contracts/contracts/layer_2/kpis/kpiLatest/sustainabilityPerformanceTargetRate/KpisSustainabilityPerformanceTargetRateFacet.sol @@ -0,0 +1,17 @@ +// SPDX-License-Identifier: Apache-2.0 +pragma solidity >=0.8.0 <0.9.0; + +import { KpisFacetBase } from "../KpisFacetBase.sol"; +// prettier-ignore +// solhint-disable-next-line max-line-length +import { CommonSustainabilityPerformanceTargetInterestRate } from "contracts/layer_0_extensions/bond/fixingDateInterestRate/kpiInterestRate/sustainabilityPerformanceTargetInterestRate/Common.sol"; +import { _KPIS_LATEST_SUSTAINABILITY_PERFORMANCE_TARGET_RATE_RESOLVER_KEY } from "../../../constants/resolverKeys.sol"; + +contract KpisSustainabilityPerformanceTargetRateFacet is + KpisFacetBase, + CommonSustainabilityPerformanceTargetInterestRate +{ + function getStaticResolverKey() external pure override returns (bytes32 staticResolverKey_) { + staticResolverKey_ = _KPIS_LATEST_SUSTAINABILITY_PERFORMANCE_TARGET_RATE_RESOLVER_KEY; + } +} diff --git a/packages/ats/contracts/contracts/layer_2/proceedRecipients/ProceedRecipients.sol b/packages/ats/contracts/contracts/layer_2/proceedRecipients/ProceedRecipients.sol index 7d18446d3..04fba601b 100644 --- a/packages/ats/contracts/contracts/layer_2/proceedRecipients/ProceedRecipients.sol +++ b/packages/ats/contracts/contracts/layer_2/proceedRecipients/ProceedRecipients.sol @@ -2,26 +2,16 @@ pragma solidity >=0.8.0 <0.9.0; import { IProceedRecipients } from "../interfaces/proceedRecipients/IProceedRecipients.sol"; -import { Common } from "../../layer_1/common/Common.sol"; +import { Internals } from "../../layer_0/Internals.sol"; import { _PROCEED_RECIPIENT_MANAGER_ROLE } from "../constants/roles.sol"; -import { _PROCEED_RECIPIENTS_STORAGE_POSITION } from "../../layer_0/constants/storagePositions.sol"; -contract ProceedRecipients is IProceedRecipients, Common { +abstract contract ProceedRecipients is IProceedRecipients, Internals { // solhint-disable-next-line func-name-mixedcase function initialize_ProceedRecipients( address[] calldata _proceedRecipients, bytes[] calldata _data - ) external override onlyUninitialized(_externalListStorage(_PROCEED_RECIPIENTS_STORAGE_POSITION).initialized) { - uint256 length = _proceedRecipients.length; - for (uint256 index; index < length; ) { - _addExternalList(_PROCEED_RECIPIENTS_STORAGE_POSITION, _proceedRecipients[index]); - _setProceedRecipientData(_proceedRecipients[index], _data[index]); - unchecked { - ++index; - } - } - - _externalListStorage(_PROCEED_RECIPIENTS_STORAGE_POSITION).initialized = true; + ) external override onlyUninitialized(_isProceedRecipientsInitialized()) { + _initialize_ProceedRecipients(_proceedRecipients, _data); } function addProceedRecipient( @@ -32,6 +22,7 @@ contract ProceedRecipients is IProceedRecipients, Common { override onlyUnpaused onlyRole(_PROCEED_RECIPIENT_MANAGER_ROLE) + validateAddress(_proceedRecipient) onlyIfNotProceedRecipient(_proceedRecipient) { _addProceedRecipient(_proceedRecipient, _data); @@ -59,6 +50,7 @@ contract ProceedRecipients is IProceedRecipients, Common { override onlyUnpaused onlyRole(_PROCEED_RECIPIENT_MANAGER_ROLE) + validateAddress(_proceedRecipient) onlyIfProceedRecipient(_proceedRecipient) { _setProceedRecipientData(_proceedRecipient, _data); @@ -66,7 +58,7 @@ contract ProceedRecipients is IProceedRecipients, Common { } function isProceedRecipient(address _proceedRecipient) external view override returns (bool) { - return _isExternalList(_PROCEED_RECIPIENTS_STORAGE_POSITION, _proceedRecipient); + return _isProceedRecipient(_proceedRecipient); } function getProceedRecipientData(address _proceedRecipient) external view override returns (bytes memory) { @@ -74,13 +66,13 @@ contract ProceedRecipients is IProceedRecipients, Common { } function getProceedRecipientsCount() external view override returns (uint256) { - return _getExternalListsCount(_PROCEED_RECIPIENTS_STORAGE_POSITION); + return _getProceedRecipientsCount(); } function getProceedRecipients( uint256 _pageIndex, uint256 _pageLength ) external view override returns (address[] memory proceedRecipients_) { - return _getExternalListsMembers(_PROCEED_RECIPIENTS_STORAGE_POSITION, _pageIndex, _pageLength); + return _getProceedRecipients(_pageIndex, _pageLength); } } diff --git a/packages/ats/contracts/contracts/layer_2/proceedRecipients/ProceedRecipientsFacet.sol b/packages/ats/contracts/contracts/layer_2/proceedRecipients/ProceedRecipientsFacetBase.sol similarity index 82% rename from packages/ats/contracts/contracts/layer_2/proceedRecipients/ProceedRecipientsFacet.sol rename to packages/ats/contracts/contracts/layer_2/proceedRecipients/ProceedRecipientsFacetBase.sol index 9ee9d3479..c9f4a8b5e 100644 --- a/packages/ats/contracts/contracts/layer_2/proceedRecipients/ProceedRecipientsFacet.sol +++ b/packages/ats/contracts/contracts/layer_2/proceedRecipients/ProceedRecipientsFacetBase.sol @@ -4,13 +4,8 @@ pragma solidity >=0.8.0 <0.9.0; import { IStaticFunctionSelectors } from "../../interfaces/resolver/resolverProxy/IStaticFunctionSelectors.sol"; import { ProceedRecipients } from "./ProceedRecipients.sol"; import { IProceedRecipients } from "../interfaces/proceedRecipients/IProceedRecipients.sol"; -import { _PROCEED_RECIPIENTS_RESOLVER_KEY } from "../constants/resolverKeys.sol"; - -contract ProceedRecipientsFacet is ProceedRecipients, IStaticFunctionSelectors { - function getStaticResolverKey() external pure override returns (bytes32 staticResolverKey_) { - staticResolverKey_ = _PROCEED_RECIPIENTS_RESOLVER_KEY; - } +abstract contract ProceedRecipientsFacetBase is ProceedRecipients, IStaticFunctionSelectors { function getStaticFunctionSelectors() external pure override returns (bytes4[] memory staticFunctionSelectors_) { uint256 selectorIndex; staticFunctionSelectors_ = new bytes4[](8); diff --git a/packages/ats/contracts/contracts/layer_2/proceedRecipients/fixedRate/ProceedRecipientsFixedRateFacet.sol b/packages/ats/contracts/contracts/layer_2/proceedRecipients/fixedRate/ProceedRecipientsFixedRateFacet.sol new file mode 100644 index 000000000..06f6142f8 --- /dev/null +++ b/packages/ats/contracts/contracts/layer_2/proceedRecipients/fixedRate/ProceedRecipientsFixedRateFacet.sol @@ -0,0 +1,12 @@ +// SPDX-License-Identifier: Apache-2.0 +pragma solidity >=0.8.0 <0.9.0; + +import { ProceedRecipientsFacetBase } from "../ProceedRecipientsFacetBase.sol"; +import { _PROCEED_RECIPIENTS_FIXED_RATE_RESOLVER_KEY } from "contracts/layer_2/constants/resolverKeys.sol"; +import { CommonFixedInterestRate } from "contracts/layer_0_extensions/bond/fixedInterestRate/Common.sol"; + +contract ProceedRecipientsFixedRateFacet is ProceedRecipientsFacetBase, CommonFixedInterestRate { + function getStaticResolverKey() external pure override returns (bytes32 staticResolverKey_) { + staticResolverKey_ = _PROCEED_RECIPIENTS_FIXED_RATE_RESOLVER_KEY; + } +} diff --git a/packages/ats/contracts/contracts/layer_2/proceedRecipients/kpiLinkedRate/ProceedRecipientsKpiLinkedRateFacet.sol b/packages/ats/contracts/contracts/layer_2/proceedRecipients/kpiLinkedRate/ProceedRecipientsKpiLinkedRateFacet.sol new file mode 100644 index 000000000..be45ba6f5 --- /dev/null +++ b/packages/ats/contracts/contracts/layer_2/proceedRecipients/kpiLinkedRate/ProceedRecipientsKpiLinkedRateFacet.sol @@ -0,0 +1,14 @@ +// SPDX-License-Identifier: Apache-2.0 +pragma solidity >=0.8.0 <0.9.0; + +import { ProceedRecipientsFacetBase } from "../ProceedRecipientsFacetBase.sol"; +import { _PROCEED_RECIPIENTS_KPI_LINKED_RATE_RESOLVER_KEY } from "contracts/layer_2/constants/resolverKeys.sol"; +import { + CommonKpiLinkedInterestRate +} from "contracts/layer_0_extensions/bond/fixingDateInterestRate/kpiInterestRate/kpiLinkedInterestRate/Common.sol"; + +contract ProceedRecipientsKpiLinkedRateFacet is ProceedRecipientsFacetBase, CommonKpiLinkedInterestRate { + function getStaticResolverKey() external pure override returns (bytes32 staticResolverKey_) { + staticResolverKey_ = _PROCEED_RECIPIENTS_KPI_LINKED_RATE_RESOLVER_KEY; + } +} diff --git a/packages/ats/contracts/contracts/layer_2/proceedRecipients/standard/ProceedRecipientsFacet.sol b/packages/ats/contracts/contracts/layer_2/proceedRecipients/standard/ProceedRecipientsFacet.sol new file mode 100644 index 000000000..21d0a366b --- /dev/null +++ b/packages/ats/contracts/contracts/layer_2/proceedRecipients/standard/ProceedRecipientsFacet.sol @@ -0,0 +1,12 @@ +// SPDX-License-Identifier: Apache-2.0 +pragma solidity >=0.8.0 <0.9.0; + +import { ProceedRecipientsFacetBase } from "../ProceedRecipientsFacetBase.sol"; +import { _PROCEED_RECIPIENTS_RESOLVER_KEY } from "contracts/layer_2/constants/resolverKeys.sol"; +import { Common } from "contracts/layer_0/common/Common.sol"; + +contract ProceedRecipientsFacet is ProceedRecipientsFacetBase, Common { + function getStaticResolverKey() external pure override returns (bytes32 staticResolverKey_) { + staticResolverKey_ = _PROCEED_RECIPIENTS_RESOLVER_KEY; + } +} diff --git a/packages/ats/contracts/contracts/layer_2/proceedRecipients/sustainabilityPerformanceTargetRate/ProceedRecipientsSustainabilityPerformanceTargetRateFacet.sol b/packages/ats/contracts/contracts/layer_2/proceedRecipients/sustainabilityPerformanceTargetRate/ProceedRecipientsSustainabilityPerformanceTargetRateFacet.sol new file mode 100644 index 000000000..37988ec23 --- /dev/null +++ b/packages/ats/contracts/contracts/layer_2/proceedRecipients/sustainabilityPerformanceTargetRate/ProceedRecipientsSustainabilityPerformanceTargetRateFacet.sol @@ -0,0 +1,19 @@ +// SPDX-License-Identifier: Apache-2.0 +pragma solidity >=0.8.0 <0.9.0; + +import { ProceedRecipientsFacetBase } from "../ProceedRecipientsFacetBase.sol"; +import { + _PROCEED_RECIPIENTS_SUSTAINABILITY_PERFORMANCE_TARGET_RATE_RESOLVER_KEY +} from "contracts/layer_2/constants/resolverKeys.sol"; +// prettier-ignore +// solhint-disable-next-line max-line-length +import { CommonSustainabilityPerformanceTargetInterestRate } from "contracts/layer_0_extensions/bond/fixingDateInterestRate/kpiInterestRate/sustainabilityPerformanceTargetInterestRate/Common.sol"; + +contract ProceedRecipientsSustainabilityPerformanceTargetRateFacet is + ProceedRecipientsFacetBase, + CommonSustainabilityPerformanceTargetInterestRate +{ + function getStaticResolverKey() external pure override returns (bytes32 staticResolverKey_) { + staticResolverKey_ = _PROCEED_RECIPIENTS_SUSTAINABILITY_PERFORMANCE_TARGET_RATE_RESOLVER_KEY; + } +} diff --git a/packages/ats/contracts/contracts/layer_2/scheduledTasks/scheduledBalanceAdjustments/ScheduledBalanceAdjustments.sol b/packages/ats/contracts/contracts/layer_2/scheduledTasks/scheduledBalanceAdjustments/ScheduledBalanceAdjustments.sol index d32d758df..b72f12202 100644 --- a/packages/ats/contracts/contracts/layer_2/scheduledTasks/scheduledBalanceAdjustments/ScheduledBalanceAdjustments.sol +++ b/packages/ats/contracts/contracts/layer_2/scheduledTasks/scheduledBalanceAdjustments/ScheduledBalanceAdjustments.sol @@ -1,14 +1,14 @@ // SPDX-License-Identifier: Apache-2.0 pragma solidity >=0.8.0 <0.9.0; -import { Common } from "../../../layer_1/common/Common.sol"; +import { Internals } from "../../../layer_0/Internals.sol"; import { IScheduledBalanceAdjustments } from "../../interfaces/scheduledTasks/scheduledBalanceAdjustments/IScheduledBalanceAdjustments.sol"; import { ScheduledTask } from "../../interfaces/scheduledTasks/scheduledTasksCommon/IScheduledTasksCommon.sol"; import { EnumerableSet } from "@openzeppelin/contracts/utils/structs/EnumerableSet.sol"; -abstract contract ScheduledBalanceAdjustments is IScheduledBalanceAdjustments, Common { +abstract contract ScheduledBalanceAdjustments is IScheduledBalanceAdjustments, Internals { using EnumerableSet for EnumerableSet.Bytes32Set; function scheduledBalanceAdjustmentCount() external view override returns (uint256) { diff --git a/packages/ats/contracts/contracts/layer_2/scheduledTasks/scheduledBalanceAdjustments/ScheduledBalanceAdjustmentsFacet.sol b/packages/ats/contracts/contracts/layer_2/scheduledTasks/scheduledBalanceAdjustments/ScheduledBalanceAdjustmentsFacetBase.sol similarity index 74% rename from packages/ats/contracts/contracts/layer_2/scheduledTasks/scheduledBalanceAdjustments/ScheduledBalanceAdjustmentsFacet.sol rename to packages/ats/contracts/contracts/layer_2/scheduledTasks/scheduledBalanceAdjustments/ScheduledBalanceAdjustmentsFacetBase.sol index 3e8cc4ca7..2df5f68c2 100644 --- a/packages/ats/contracts/contracts/layer_2/scheduledTasks/scheduledBalanceAdjustments/ScheduledBalanceAdjustmentsFacet.sol +++ b/packages/ats/contracts/contracts/layer_2/scheduledTasks/scheduledBalanceAdjustments/ScheduledBalanceAdjustmentsFacetBase.sol @@ -2,17 +2,12 @@ pragma solidity >=0.8.0 <0.9.0; import { IStaticFunctionSelectors } from "../../../interfaces/resolver/resolverProxy/IStaticFunctionSelectors.sol"; -import { _SCHEDULED_BALANCE_ADJUSTMENTS_RESOLVER_KEY } from "../../constants/resolverKeys.sol"; import { IScheduledBalanceAdjustments } from "../../interfaces/scheduledTasks/scheduledBalanceAdjustments/IScheduledBalanceAdjustments.sol"; import { ScheduledBalanceAdjustments } from "./ScheduledBalanceAdjustments.sol"; -contract ScheduledBalanceAdjustmentsFacet is ScheduledBalanceAdjustments, IStaticFunctionSelectors { - function getStaticResolverKey() external pure override returns (bytes32 staticResolverKey_) { - staticResolverKey_ = _SCHEDULED_BALANCE_ADJUSTMENTS_RESOLVER_KEY; - } - +abstract contract ScheduledBalanceAdjustmentsFacetBase is ScheduledBalanceAdjustments, IStaticFunctionSelectors { function getStaticFunctionSelectors() external pure override returns (bytes4[] memory staticFunctionSelectors_) { uint256 selectorIndex; staticFunctionSelectors_ = new bytes4[](2); diff --git a/packages/ats/contracts/contracts/layer_2/scheduledTasks/scheduledBalanceAdjustments/fixedRate/ScheduledBalanceAdjustmentsFixedRateFacet.sol b/packages/ats/contracts/contracts/layer_2/scheduledTasks/scheduledBalanceAdjustments/fixedRate/ScheduledBalanceAdjustmentsFixedRateFacet.sol new file mode 100644 index 000000000..670f7ad35 --- /dev/null +++ b/packages/ats/contracts/contracts/layer_2/scheduledTasks/scheduledBalanceAdjustments/fixedRate/ScheduledBalanceAdjustmentsFixedRateFacet.sol @@ -0,0 +1,12 @@ +// SPDX-License-Identifier: Apache-2.0 +pragma solidity >=0.8.0 <0.9.0; + +import { _SCHEDULED_BALANCE_ADJUSTMENTS_FIXED_RATE_RESOLVER_KEY } from "../../../constants/resolverKeys.sol"; +import { ScheduledBalanceAdjustmentsFacetBase } from "../ScheduledBalanceAdjustmentsFacetBase.sol"; +import { CommonFixedInterestRate } from "../../../../layer_0_extensions/bond/fixedInterestRate/Common.sol"; + +contract ScheduledBalanceAdjustmentsFixedRateFacet is ScheduledBalanceAdjustmentsFacetBase, CommonFixedInterestRate { + function getStaticResolverKey() external pure override returns (bytes32 staticResolverKey_) { + staticResolverKey_ = _SCHEDULED_BALANCE_ADJUSTMENTS_FIXED_RATE_RESOLVER_KEY; + } +} diff --git a/packages/ats/contracts/contracts/layer_2/scheduledTasks/scheduledBalanceAdjustments/kpiLinkedRate/ScheduledBalanceAdjustmentsKpiLinkedRateFacet.sol b/packages/ats/contracts/contracts/layer_2/scheduledTasks/scheduledBalanceAdjustments/kpiLinkedRate/ScheduledBalanceAdjustmentsKpiLinkedRateFacet.sol new file mode 100644 index 000000000..81e6f0118 --- /dev/null +++ b/packages/ats/contracts/contracts/layer_2/scheduledTasks/scheduledBalanceAdjustments/kpiLinkedRate/ScheduledBalanceAdjustmentsKpiLinkedRateFacet.sol @@ -0,0 +1,17 @@ +// SPDX-License-Identifier: Apache-2.0 +pragma solidity >=0.8.0 <0.9.0; + +import { _SCHEDULED_BALANCE_ADJUSTMENTS_KPI_LINKED_RATE_RESOLVER_KEY } from "../../../constants/resolverKeys.sol"; +import { ScheduledBalanceAdjustmentsFacetBase } from "../ScheduledBalanceAdjustmentsFacetBase.sol"; +import { + CommonKpiLinkedInterestRate +} from "../../../../layer_0_extensions/bond/fixingDateInterestRate/kpiInterestRate/kpiLinkedInterestRate/Common.sol"; + +contract ScheduledBalanceAdjustmentsKpiLinkedRateFacet is + ScheduledBalanceAdjustmentsFacetBase, + CommonKpiLinkedInterestRate +{ + function getStaticResolverKey() external pure override returns (bytes32 staticResolverKey_) { + staticResolverKey_ = _SCHEDULED_BALANCE_ADJUSTMENTS_KPI_LINKED_RATE_RESOLVER_KEY; + } +} diff --git a/packages/ats/contracts/contracts/layer_2/scheduledTasks/scheduledBalanceAdjustments/standard/ScheduledBalanceAdjustmentsFacet.sol b/packages/ats/contracts/contracts/layer_2/scheduledTasks/scheduledBalanceAdjustments/standard/ScheduledBalanceAdjustmentsFacet.sol new file mode 100644 index 000000000..9b6712a84 --- /dev/null +++ b/packages/ats/contracts/contracts/layer_2/scheduledTasks/scheduledBalanceAdjustments/standard/ScheduledBalanceAdjustmentsFacet.sol @@ -0,0 +1,12 @@ +// SPDX-License-Identifier: Apache-2.0 +pragma solidity >=0.8.0 <0.9.0; + +import { _SCHEDULED_BALANCE_ADJUSTMENTS_RESOLVER_KEY } from "../../../constants/resolverKeys.sol"; +import { ScheduledBalanceAdjustmentsFacetBase } from "../ScheduledBalanceAdjustmentsFacetBase.sol"; +import { Common } from "../../../../layer_0/common/Common.sol"; + +contract ScheduledBalanceAdjustmentsFacet is ScheduledBalanceAdjustmentsFacetBase, Common { + function getStaticResolverKey() external pure override returns (bytes32 staticResolverKey_) { + staticResolverKey_ = _SCHEDULED_BALANCE_ADJUSTMENTS_RESOLVER_KEY; + } +} diff --git a/packages/ats/contracts/contracts/layer_2/scheduledTasks/scheduledBalanceAdjustments/sustainabilityPerformanceTargetRate/ScheduledBalanceAdjustmentsSustainabilityPerformanceTargetRateFacet.sol b/packages/ats/contracts/contracts/layer_2/scheduledTasks/scheduledBalanceAdjustments/sustainabilityPerformanceTargetRate/ScheduledBalanceAdjustmentsSustainabilityPerformanceTargetRateFacet.sol new file mode 100644 index 000000000..830d3026d --- /dev/null +++ b/packages/ats/contracts/contracts/layer_2/scheduledTasks/scheduledBalanceAdjustments/sustainabilityPerformanceTargetRate/ScheduledBalanceAdjustmentsSustainabilityPerformanceTargetRateFacet.sol @@ -0,0 +1,20 @@ +// SPDX-License-Identifier: Apache-2.0 +pragma solidity >=0.8.0 <0.9.0; + +import { + _SCHEDULED_BALANCE_ADJUSTMENTS_SUSTAINABILITY_PERFORMANCE_TARGET_RATE_RESOLVER_KEY +} from "../../../constants/resolverKeys.sol"; +// solhint-disable-next-line max-line-length +import { ScheduledBalanceAdjustmentsFacetBase } from "../ScheduledBalanceAdjustmentsFacetBase.sol"; +// prettier-ignore +// solhint-disable-next-line max-line-length +import { CommonSustainabilityPerformanceTargetInterestRate } from "../../../../layer_0_extensions/bond/fixingDateInterestRate/kpiInterestRate/sustainabilityPerformanceTargetInterestRate/Common.sol"; + +contract ScheduledBalanceAdjustmentsSustainabilityPerformanceTargetRateFacet is + ScheduledBalanceAdjustmentsFacetBase, + CommonSustainabilityPerformanceTargetInterestRate +{ + function getStaticResolverKey() external pure override returns (bytes32 staticResolverKey_) { + staticResolverKey_ = _SCHEDULED_BALANCE_ADJUSTMENTS_SUSTAINABILITY_PERFORMANCE_TARGET_RATE_RESOLVER_KEY; + } +} diff --git a/packages/ats/contracts/contracts/layer_2/scheduledTasks/scheduledCouponListing/ScheduledCouponListing.sol b/packages/ats/contracts/contracts/layer_2/scheduledTasks/scheduledCouponListing/ScheduledCouponListing.sol new file mode 100644 index 000000000..d20688fb5 --- /dev/null +++ b/packages/ats/contracts/contracts/layer_2/scheduledTasks/scheduledCouponListing/ScheduledCouponListing.sol @@ -0,0 +1,24 @@ +// SPDX-License-Identifier: Apache-2.0 +pragma solidity >=0.8.0 <0.9.0; + +import { Internals } from "../../../layer_0/Internals.sol"; +import { + IScheduledCouponListing +} from "../../interfaces/scheduledTasks/scheduledCouponListing/IScheduledCouponListing.sol"; +import { ScheduledTask } from "../../interfaces/scheduledTasks/scheduledTasksCommon/IScheduledTasksCommon.sol"; +import { EnumerableSet } from "@openzeppelin/contracts/utils/structs/EnumerableSet.sol"; + +abstract contract ScheduledCouponListing is IScheduledCouponListing, Internals { + using EnumerableSet for EnumerableSet.Bytes32Set; + + function scheduledCouponListingCount() external view override returns (uint256) { + return _getScheduledCouponListingCount(); + } + + function getScheduledCouponListing( + uint256 _pageIndex, + uint256 _pageLength + ) external view override returns (ScheduledTask[] memory scheduledCouponListing_) { + scheduledCouponListing_ = _getScheduledCouponListing(_pageIndex, _pageLength); + } +} diff --git a/packages/ats/contracts/contracts/layer_2/scheduledTasks/scheduledCouponListing/ScheduledCouponListingFacetBase.sol b/packages/ats/contracts/contracts/layer_2/scheduledTasks/scheduledCouponListing/ScheduledCouponListingFacetBase.sol new file mode 100644 index 000000000..103ac660b --- /dev/null +++ b/packages/ats/contracts/contracts/layer_2/scheduledTasks/scheduledCouponListing/ScheduledCouponListingFacetBase.sol @@ -0,0 +1,23 @@ +// SPDX-License-Identifier: Apache-2.0 +pragma solidity >=0.8.0 <0.9.0; + +import { IStaticFunctionSelectors } from "../../../interfaces/resolver/resolverProxy/IStaticFunctionSelectors.sol"; +import { + IScheduledCouponListing +} from "../../interfaces/scheduledTasks/scheduledCouponListing/IScheduledCouponListing.sol"; +import { ScheduledCouponListing } from "./ScheduledCouponListing.sol"; + +abstract contract ScheduledCouponListingFacetBase is ScheduledCouponListing, IStaticFunctionSelectors { + function getStaticFunctionSelectors() external pure override returns (bytes4[] memory staticFunctionSelectors_) { + uint256 selectorIndex; + staticFunctionSelectors_ = new bytes4[](2); + staticFunctionSelectors_[selectorIndex++] = this.scheduledCouponListingCount.selector; + staticFunctionSelectors_[selectorIndex++] = this.getScheduledCouponListing.selector; + } + + function getStaticInterfaceIds() external pure override returns (bytes4[] memory staticInterfaceIds_) { + staticInterfaceIds_ = new bytes4[](1); + uint256 selectorsIndex; + staticInterfaceIds_[selectorsIndex++] = type(IScheduledCouponListing).interfaceId; + } +} diff --git a/packages/ats/contracts/contracts/layer_2/scheduledTasks/scheduledCouponListing/fixedRate/ScheduledCouponListingFixedRateFacet.sol b/packages/ats/contracts/contracts/layer_2/scheduledTasks/scheduledCouponListing/fixedRate/ScheduledCouponListingFixedRateFacet.sol new file mode 100644 index 000000000..8111084a7 --- /dev/null +++ b/packages/ats/contracts/contracts/layer_2/scheduledTasks/scheduledCouponListing/fixedRate/ScheduledCouponListingFixedRateFacet.sol @@ -0,0 +1,12 @@ +// SPDX-License-Identifier: Apache-2.0 +pragma solidity >=0.8.0 <0.9.0; + +import { _SCHEDULED_COUPON_LISTING_FIXED_RATE_RESOLVER_KEY } from "../../../constants/resolverKeys.sol"; +import { ScheduledCouponListingFacetBase } from "../ScheduledCouponListingFacetBase.sol"; +import { CommonFixedInterestRate } from "../../../../layer_0_extensions/bond/fixedInterestRate/Common.sol"; + +contract ScheduledCouponListingFixedRateFacet is ScheduledCouponListingFacetBase, CommonFixedInterestRate { + function getStaticResolverKey() external pure override returns (bytes32 staticResolverKey_) { + staticResolverKey_ = _SCHEDULED_COUPON_LISTING_FIXED_RATE_RESOLVER_KEY; + } +} diff --git a/packages/ats/contracts/contracts/layer_2/scheduledTasks/scheduledCouponListing/kpiLinkedRate/ScheduledCouponListingKpiLinkedRateFacet.sol b/packages/ats/contracts/contracts/layer_2/scheduledTasks/scheduledCouponListing/kpiLinkedRate/ScheduledCouponListingKpiLinkedRateFacet.sol new file mode 100644 index 000000000..b96703e39 --- /dev/null +++ b/packages/ats/contracts/contracts/layer_2/scheduledTasks/scheduledCouponListing/kpiLinkedRate/ScheduledCouponListingKpiLinkedRateFacet.sol @@ -0,0 +1,14 @@ +// SPDX-License-Identifier: Apache-2.0 +pragma solidity >=0.8.0 <0.9.0; + +import { _SCHEDULED_COUPON_LISTING_KPI_LINKED_RATE_RESOLVER_KEY } from "../../../constants/resolverKeys.sol"; +import { ScheduledCouponListingFacetBase } from "../ScheduledCouponListingFacetBase.sol"; +import { + CommonKpiLinkedInterestRate +} from "../../../../layer_0_extensions/bond/fixingDateInterestRate/kpiInterestRate/kpiLinkedInterestRate/Common.sol"; + +contract ScheduledCouponListingKpiLinkedRateFacet is ScheduledCouponListingFacetBase, CommonKpiLinkedInterestRate { + function getStaticResolverKey() external pure override returns (bytes32 staticResolverKey_) { + staticResolverKey_ = _SCHEDULED_COUPON_LISTING_KPI_LINKED_RATE_RESOLVER_KEY; + } +} diff --git a/packages/ats/contracts/contracts/layer_2/scheduledTasks/scheduledCouponListing/standard/ScheduledCouponListingFacet.sol b/packages/ats/contracts/contracts/layer_2/scheduledTasks/scheduledCouponListing/standard/ScheduledCouponListingFacet.sol new file mode 100644 index 000000000..4a6c2af84 --- /dev/null +++ b/packages/ats/contracts/contracts/layer_2/scheduledTasks/scheduledCouponListing/standard/ScheduledCouponListingFacet.sol @@ -0,0 +1,12 @@ +// SPDX-License-Identifier: Apache-2.0 +pragma solidity >=0.8.0 <0.9.0; + +import { _SCHEDULED_COUPON_LISTING_RESOLVER_KEY } from "../../../constants/resolverKeys.sol"; +import { ScheduledCouponListingFacetBase } from "../ScheduledCouponListingFacetBase.sol"; +import { Common } from "../../../../layer_0/common/Common.sol"; + +contract ScheduledCouponListingFacet is ScheduledCouponListingFacetBase, Common { + function getStaticResolverKey() external pure override returns (bytes32 staticResolverKey_) { + staticResolverKey_ = _SCHEDULED_COUPON_LISTING_RESOLVER_KEY; + } +} diff --git a/packages/ats/contracts/contracts/layer_2/scheduledTasks/scheduledCouponListing/sustainabilityPerformanceTargetRate/ScheduledCouponListingSustainabilityPerformanceTargetRateFacet.sol b/packages/ats/contracts/contracts/layer_2/scheduledTasks/scheduledCouponListing/sustainabilityPerformanceTargetRate/ScheduledCouponListingSustainabilityPerformanceTargetRateFacet.sol new file mode 100644 index 000000000..65baf1d5a --- /dev/null +++ b/packages/ats/contracts/contracts/layer_2/scheduledTasks/scheduledCouponListing/sustainabilityPerformanceTargetRate/ScheduledCouponListingSustainabilityPerformanceTargetRateFacet.sol @@ -0,0 +1,19 @@ +// SPDX-License-Identifier: Apache-2.0 +pragma solidity >=0.8.0 <0.9.0; + +import { + _SCHEDULED_COUPON_LISTING_SUSTAINABILITY_PERFORMANCE_TARGET_RATE_RESOLVER_KEY +} from "../../../constants/resolverKeys.sol"; +import { ScheduledCouponListingFacetBase } from "../ScheduledCouponListingFacetBase.sol"; +// prettier-ignore +// solhint-disable-next-line max-line-length +import { CommonSustainabilityPerformanceTargetInterestRate } from "../../../../layer_0_extensions/bond/fixingDateInterestRate/kpiInterestRate/sustainabilityPerformanceTargetInterestRate/Common.sol"; + +contract ScheduledCouponListingSustainabilityPerformanceTargetRateFacet is + ScheduledCouponListingFacetBase, + CommonSustainabilityPerformanceTargetInterestRate +{ + function getStaticResolverKey() external pure override returns (bytes32 staticResolverKey_) { + staticResolverKey_ = _SCHEDULED_COUPON_LISTING_SUSTAINABILITY_PERFORMANCE_TARGET_RATE_RESOLVER_KEY; + } +} diff --git a/packages/ats/contracts/contracts/layer_2/scheduledTasks/scheduledCrossOrderedTasks/ScheduledCrossOrderedTasks.sol b/packages/ats/contracts/contracts/layer_2/scheduledTasks/scheduledCrossOrderedTasks/ScheduledCrossOrderedTasks.sol index 7de5c3487..0f827385d 100644 --- a/packages/ats/contracts/contracts/layer_2/scheduledTasks/scheduledCrossOrderedTasks/ScheduledCrossOrderedTasks.sol +++ b/packages/ats/contracts/contracts/layer_2/scheduledTasks/scheduledCrossOrderedTasks/ScheduledCrossOrderedTasks.sol @@ -1,14 +1,14 @@ // SPDX-License-Identifier: Apache-2.0 pragma solidity >=0.8.0 <0.9.0; -import { Common } from "../../../layer_1/common/Common.sol"; +import { Internals } from "../../../layer_0/Internals.sol"; import { IScheduledCrossOrderedTasks } from "../../interfaces/scheduledTasks/scheduledCrossOrderedTasks/IScheduledCrossOrderedTasks.sol"; import { ScheduledTask } from "../../interfaces/scheduledTasks/scheduledTasksCommon/IScheduledTasksCommon.sol"; import { EnumerableSet } from "@openzeppelin/contracts/utils/structs/EnumerableSet.sol"; -abstract contract ScheduledCrossOrderedTasks is IScheduledCrossOrderedTasks, Common { +abstract contract ScheduledCrossOrderedTasks is IScheduledCrossOrderedTasks, Internals { using EnumerableSet for EnumerableSet.Bytes32Set; function triggerPendingScheduledCrossOrderedTasks() external override onlyUnpaused returns (uint256) { diff --git a/packages/ats/contracts/contracts/layer_2/scheduledTasks/scheduledCrossOrderedTasks/ScheduledCrossOrderedTasksFacet.sol b/packages/ats/contracts/contracts/layer_2/scheduledTasks/scheduledCrossOrderedTasks/ScheduledCrossOrderedTasksFacetBase.sol similarity index 79% rename from packages/ats/contracts/contracts/layer_2/scheduledTasks/scheduledCrossOrderedTasks/ScheduledCrossOrderedTasksFacet.sol rename to packages/ats/contracts/contracts/layer_2/scheduledTasks/scheduledCrossOrderedTasks/ScheduledCrossOrderedTasksFacetBase.sol index 68823126a..03ab3d26d 100644 --- a/packages/ats/contracts/contracts/layer_2/scheduledTasks/scheduledCrossOrderedTasks/ScheduledCrossOrderedTasksFacet.sol +++ b/packages/ats/contracts/contracts/layer_2/scheduledTasks/scheduledCrossOrderedTasks/ScheduledCrossOrderedTasksFacetBase.sol @@ -2,17 +2,12 @@ pragma solidity >=0.8.0 <0.9.0; import { IStaticFunctionSelectors } from "../../../interfaces/resolver/resolverProxy/IStaticFunctionSelectors.sol"; -import { _SCHEDULED_TASKS_RESOLVER_KEY } from "../../constants/resolverKeys.sol"; import { IScheduledCrossOrderedTasks } from "../../interfaces/scheduledTasks/scheduledCrossOrderedTasks/IScheduledCrossOrderedTasks.sol"; import { ScheduledCrossOrderedTasks } from "./ScheduledCrossOrderedTasks.sol"; -contract ScheduledCrossOrderedTasksFacet is ScheduledCrossOrderedTasks, IStaticFunctionSelectors { - function getStaticResolverKey() external pure override returns (bytes32 staticResolverKey_) { - staticResolverKey_ = _SCHEDULED_TASKS_RESOLVER_KEY; - } - +abstract contract ScheduledCrossOrderedTasksFacetBase is ScheduledCrossOrderedTasks, IStaticFunctionSelectors { function getStaticFunctionSelectors() external pure override returns (bytes4[] memory staticFunctionSelectors_) { uint256 selectorIndex; staticFunctionSelectors_ = new bytes4[](4); diff --git a/packages/ats/contracts/contracts/layer_2/scheduledTasks/scheduledCrossOrderedTasks/fixedRate/ScheduledCrossOrderedTasksFixedRateFacet.sol b/packages/ats/contracts/contracts/layer_2/scheduledTasks/scheduledCrossOrderedTasks/fixedRate/ScheduledCrossOrderedTasksFixedRateFacet.sol new file mode 100644 index 000000000..d8fc8b3be --- /dev/null +++ b/packages/ats/contracts/contracts/layer_2/scheduledTasks/scheduledCrossOrderedTasks/fixedRate/ScheduledCrossOrderedTasksFixedRateFacet.sol @@ -0,0 +1,12 @@ +// SPDX-License-Identifier: Apache-2.0 +pragma solidity >=0.8.0 <0.9.0; + +import { _SCHEDULED_CROSS_ORDERED_TASKS_FIXED_RATE_RESOLVER_KEY } from "../../../constants/resolverKeys.sol"; +import { ScheduledCrossOrderedTasksFacetBase } from "../ScheduledCrossOrderedTasksFacetBase.sol"; +import { CommonFixedInterestRate } from "../../../../layer_0_extensions/bond/fixedInterestRate/Common.sol"; + +contract ScheduledCrossOrderedTasksFixedRateFacet is ScheduledCrossOrderedTasksFacetBase, CommonFixedInterestRate { + function getStaticResolverKey() external pure override returns (bytes32 staticResolverKey_) { + staticResolverKey_ = _SCHEDULED_CROSS_ORDERED_TASKS_FIXED_RATE_RESOLVER_KEY; + } +} diff --git a/packages/ats/contracts/contracts/layer_2/scheduledTasks/scheduledCrossOrderedTasks/kpiLinkedRate/ScheduledCrossOrderedTasksKpiLinkedRateFacet.sol b/packages/ats/contracts/contracts/layer_2/scheduledTasks/scheduledCrossOrderedTasks/kpiLinkedRate/ScheduledCrossOrderedTasksKpiLinkedRateFacet.sol new file mode 100644 index 000000000..69cb5eb63 --- /dev/null +++ b/packages/ats/contracts/contracts/layer_2/scheduledTasks/scheduledCrossOrderedTasks/kpiLinkedRate/ScheduledCrossOrderedTasksKpiLinkedRateFacet.sol @@ -0,0 +1,17 @@ +// SPDX-License-Identifier: Apache-2.0 +pragma solidity >=0.8.0 <0.9.0; + +import { _SCHEDULED_CROSS_ORDERED_TASKS_KPI_LINKED_RATE_RESOLVER_KEY } from "../../../constants/resolverKeys.sol"; +import { ScheduledCrossOrderedTasksFacetBase } from "../ScheduledCrossOrderedTasksFacetBase.sol"; +import { + CommonKpiLinkedInterestRate +} from "../../../../layer_0_extensions/bond/fixingDateInterestRate/kpiInterestRate/kpiLinkedInterestRate/Common.sol"; + +contract ScheduledCrossOrderedTasksKpiLinkedRateFacet is + ScheduledCrossOrderedTasksFacetBase, + CommonKpiLinkedInterestRate +{ + function getStaticResolverKey() external pure override returns (bytes32 staticResolverKey_) { + staticResolverKey_ = _SCHEDULED_CROSS_ORDERED_TASKS_KPI_LINKED_RATE_RESOLVER_KEY; + } +} diff --git a/packages/ats/contracts/contracts/layer_2/scheduledTasks/scheduledCrossOrderedTasks/standard/ScheduledCrossOrderedTasksFacet.sol b/packages/ats/contracts/contracts/layer_2/scheduledTasks/scheduledCrossOrderedTasks/standard/ScheduledCrossOrderedTasksFacet.sol new file mode 100644 index 000000000..eb64e1670 --- /dev/null +++ b/packages/ats/contracts/contracts/layer_2/scheduledTasks/scheduledCrossOrderedTasks/standard/ScheduledCrossOrderedTasksFacet.sol @@ -0,0 +1,12 @@ +// SPDX-License-Identifier: Apache-2.0 +pragma solidity >=0.8.0 <0.9.0; + +import { _SCHEDULED_TASKS_RESOLVER_KEY } from "../../../constants/resolverKeys.sol"; +import { ScheduledCrossOrderedTasksFacetBase } from "../ScheduledCrossOrderedTasksFacetBase.sol"; +import { Common } from "../../../../layer_0/common/Common.sol"; + +contract ScheduledCrossOrderedTasksFacet is ScheduledCrossOrderedTasksFacetBase, Common { + function getStaticResolverKey() external pure override returns (bytes32 staticResolverKey_) { + staticResolverKey_ = _SCHEDULED_TASKS_RESOLVER_KEY; + } +} diff --git a/packages/ats/contracts/contracts/layer_2/scheduledTasks/scheduledCrossOrderedTasks/sustainabilityPerformanceTargetRate/ScheduledCrossOrderedTasksSustainabilityPerformanceTargetRateFacet.sol b/packages/ats/contracts/contracts/layer_2/scheduledTasks/scheduledCrossOrderedTasks/sustainabilityPerformanceTargetRate/ScheduledCrossOrderedTasksSustainabilityPerformanceTargetRateFacet.sol new file mode 100644 index 000000000..7e1e61df3 --- /dev/null +++ b/packages/ats/contracts/contracts/layer_2/scheduledTasks/scheduledCrossOrderedTasks/sustainabilityPerformanceTargetRate/ScheduledCrossOrderedTasksSustainabilityPerformanceTargetRateFacet.sol @@ -0,0 +1,19 @@ +// SPDX-License-Identifier: Apache-2.0 +pragma solidity >=0.8.0 <0.9.0; + +import { + _SCHEDULED_CROSS_ORDERED_TASKS_SUSTAINABILITY_PERFORMANCE_TARGET_RATE_RESOLVER_KEY +} from "../../../constants/resolverKeys.sol"; +import { ScheduledCrossOrderedTasksFacetBase } from "../ScheduledCrossOrderedTasksFacetBase.sol"; +// prettier-ignore +// solhint-disable-next-line max-line-length +import { CommonSustainabilityPerformanceTargetInterestRate } from "../../../../layer_0_extensions/bond/fixingDateInterestRate/kpiInterestRate/sustainabilityPerformanceTargetInterestRate/Common.sol"; + +contract ScheduledCrossOrderedTasksSustainabilityPerformanceTargetRateFacet is + ScheduledCrossOrderedTasksFacetBase, + CommonSustainabilityPerformanceTargetInterestRate +{ + function getStaticResolverKey() external pure override returns (bytes32 staticResolverKey_) { + staticResolverKey_ = _SCHEDULED_CROSS_ORDERED_TASKS_SUSTAINABILITY_PERFORMANCE_TARGET_RATE_RESOLVER_KEY; + } +} diff --git a/packages/ats/contracts/contracts/layer_2/scheduledTasks/scheduledSnapshots/ScheduledSnapshots.sol b/packages/ats/contracts/contracts/layer_2/scheduledTasks/scheduledSnapshots/ScheduledSnapshots.sol index e116b5eae..6a9c681db 100644 --- a/packages/ats/contracts/contracts/layer_2/scheduledTasks/scheduledSnapshots/ScheduledSnapshots.sol +++ b/packages/ats/contracts/contracts/layer_2/scheduledTasks/scheduledSnapshots/ScheduledSnapshots.sol @@ -1,12 +1,12 @@ // SPDX-License-Identifier: Apache-2.0 pragma solidity >=0.8.0 <0.9.0; -import { Common } from "../../../layer_1/common/Common.sol"; +import { Internals } from "../../../layer_0/Internals.sol"; import { IScheduledSnapshots } from "../../interfaces/scheduledTasks/scheduledSnapshots/IScheduledSnapshots.sol"; import { ScheduledTask } from "../../interfaces/scheduledTasks/scheduledTasksCommon/IScheduledTasksCommon.sol"; import { EnumerableSet } from "@openzeppelin/contracts/utils/structs/EnumerableSet.sol"; -abstract contract ScheduledSnapshots is IScheduledSnapshots, Common { +abstract contract ScheduledSnapshots is IScheduledSnapshots, Internals { using EnumerableSet for EnumerableSet.Bytes32Set; function scheduledSnapshotCount() external view override returns (uint256) { diff --git a/packages/ats/contracts/contracts/layer_2/scheduledTasks/scheduledSnapshots/ScheduledSnapshotsFacet.sol b/packages/ats/contracts/contracts/layer_2/scheduledTasks/scheduledSnapshots/ScheduledSnapshotsFacetBase.sol similarity index 75% rename from packages/ats/contracts/contracts/layer_2/scheduledTasks/scheduledSnapshots/ScheduledSnapshotsFacet.sol rename to packages/ats/contracts/contracts/layer_2/scheduledTasks/scheduledSnapshots/ScheduledSnapshotsFacetBase.sol index 04391bf1e..162aa4c64 100644 --- a/packages/ats/contracts/contracts/layer_2/scheduledTasks/scheduledSnapshots/ScheduledSnapshotsFacet.sol +++ b/packages/ats/contracts/contracts/layer_2/scheduledTasks/scheduledSnapshots/ScheduledSnapshotsFacetBase.sol @@ -2,15 +2,10 @@ pragma solidity >=0.8.0 <0.9.0; import { IStaticFunctionSelectors } from "../../../interfaces/resolver/resolverProxy/IStaticFunctionSelectors.sol"; -import { _SCHEDULED_SNAPSHOTS_RESOLVER_KEY } from "../../constants/resolverKeys.sol"; import { IScheduledSnapshots } from "../../interfaces/scheduledTasks/scheduledSnapshots/IScheduledSnapshots.sol"; import { ScheduledSnapshots } from "./ScheduledSnapshots.sol"; -contract ScheduledSnapshotsFacet is ScheduledSnapshots, IStaticFunctionSelectors { - function getStaticResolverKey() external pure override returns (bytes32 staticResolverKey_) { - staticResolverKey_ = _SCHEDULED_SNAPSHOTS_RESOLVER_KEY; - } - +abstract contract ScheduledSnapshotsFacetBase is ScheduledSnapshots, IStaticFunctionSelectors { function getStaticFunctionSelectors() external pure override returns (bytes4[] memory staticFunctionSelectors_) { uint256 selectorIndex; staticFunctionSelectors_ = new bytes4[](2); diff --git a/packages/ats/contracts/contracts/layer_2/scheduledTasks/scheduledSnapshots/fixedRate/ScheduledSnapshotsFixedRateFacet.sol b/packages/ats/contracts/contracts/layer_2/scheduledTasks/scheduledSnapshots/fixedRate/ScheduledSnapshotsFixedRateFacet.sol new file mode 100644 index 000000000..33e0c4821 --- /dev/null +++ b/packages/ats/contracts/contracts/layer_2/scheduledTasks/scheduledSnapshots/fixedRate/ScheduledSnapshotsFixedRateFacet.sol @@ -0,0 +1,12 @@ +// SPDX-License-Identifier: Apache-2.0 +pragma solidity >=0.8.0 <0.9.0; + +import { _SCHEDULED_SNAPSHOTS_FIXED_RATE_RESOLVER_KEY } from "../../../constants/resolverKeys.sol"; +import { ScheduledSnapshotsFacetBase } from "../ScheduledSnapshotsFacetBase.sol"; +import { CommonFixedInterestRate } from "../../../../layer_0_extensions/bond/fixedInterestRate/Common.sol"; + +contract ScheduledSnapshotsFixedRateFacet is ScheduledSnapshotsFacetBase, CommonFixedInterestRate { + function getStaticResolverKey() external pure override returns (bytes32 staticResolverKey_) { + staticResolverKey_ = _SCHEDULED_SNAPSHOTS_FIXED_RATE_RESOLVER_KEY; + } +} diff --git a/packages/ats/contracts/contracts/layer_2/scheduledTasks/scheduledSnapshots/kpiLinkedRate/ScheduledSnapshotsKpiLinkedRateFacet.sol b/packages/ats/contracts/contracts/layer_2/scheduledTasks/scheduledSnapshots/kpiLinkedRate/ScheduledSnapshotsKpiLinkedRateFacet.sol new file mode 100644 index 000000000..2fea452cf --- /dev/null +++ b/packages/ats/contracts/contracts/layer_2/scheduledTasks/scheduledSnapshots/kpiLinkedRate/ScheduledSnapshotsKpiLinkedRateFacet.sol @@ -0,0 +1,14 @@ +// SPDX-License-Identifier: Apache-2.0 +pragma solidity >=0.8.0 <0.9.0; + +import { _SCHEDULED_SNAPSHOTS_KPI_LINKED_RATE_RESOLVER_KEY } from "../../../constants/resolverKeys.sol"; +import { ScheduledSnapshotsFacetBase } from "../ScheduledSnapshotsFacetBase.sol"; +import { + CommonKpiLinkedInterestRate +} from "../../../../layer_0_extensions/bond/fixingDateInterestRate/kpiInterestRate/kpiLinkedInterestRate/Common.sol"; + +contract ScheduledSnapshotsKpiLinkedRateFacet is ScheduledSnapshotsFacetBase, CommonKpiLinkedInterestRate { + function getStaticResolverKey() external pure override returns (bytes32 staticResolverKey_) { + staticResolverKey_ = _SCHEDULED_SNAPSHOTS_KPI_LINKED_RATE_RESOLVER_KEY; + } +} diff --git a/packages/ats/contracts/contracts/layer_2/scheduledTasks/scheduledSnapshots/standard/ScheduledSnapshotsFacet.sol b/packages/ats/contracts/contracts/layer_2/scheduledTasks/scheduledSnapshots/standard/ScheduledSnapshotsFacet.sol new file mode 100644 index 000000000..c692a4d21 --- /dev/null +++ b/packages/ats/contracts/contracts/layer_2/scheduledTasks/scheduledSnapshots/standard/ScheduledSnapshotsFacet.sol @@ -0,0 +1,12 @@ +// SPDX-License-Identifier: Apache-2.0 +pragma solidity >=0.8.0 <0.9.0; + +import { _SCHEDULED_SNAPSHOTS_RESOLVER_KEY } from "../../../constants/resolverKeys.sol"; +import { ScheduledSnapshotsFacetBase } from "../ScheduledSnapshotsFacetBase.sol"; +import { Common } from "../../../../layer_0/common/Common.sol"; + +contract ScheduledSnapshotsFacet is ScheduledSnapshotsFacetBase, Common { + function getStaticResolverKey() external pure override returns (bytes32 staticResolverKey_) { + staticResolverKey_ = _SCHEDULED_SNAPSHOTS_RESOLVER_KEY; + } +} diff --git a/packages/ats/contracts/contracts/layer_2/scheduledTasks/scheduledSnapshots/sustainabilityPerformanceTargetRate/ScheduledSnapshotsSustainabilityPerformanceTargetRateFacet.sol b/packages/ats/contracts/contracts/layer_2/scheduledTasks/scheduledSnapshots/sustainabilityPerformanceTargetRate/ScheduledSnapshotsSustainabilityPerformanceTargetRateFacet.sol new file mode 100644 index 000000000..ab12b8fbe --- /dev/null +++ b/packages/ats/contracts/contracts/layer_2/scheduledTasks/scheduledSnapshots/sustainabilityPerformanceTargetRate/ScheduledSnapshotsSustainabilityPerformanceTargetRateFacet.sol @@ -0,0 +1,19 @@ +// SPDX-License-Identifier: Apache-2.0 +pragma solidity >=0.8.0 <0.9.0; + +import { + _SCHEDULED_SNAPSHOTS_SUSTAINABILITY_PERFORMANCE_TARGET_RATE_RESOLVER_KEY +} from "../../../constants/resolverKeys.sol"; +import { ScheduledSnapshotsFacetBase } from "../ScheduledSnapshotsFacetBase.sol"; +// prettier-ignore +// solhint-disable-next-line max-line-length +import { CommonSustainabilityPerformanceTargetInterestRate } from "../../../../layer_0_extensions/bond/fixingDateInterestRate/kpiInterestRate/sustainabilityPerformanceTargetInterestRate/Common.sol"; + +contract ScheduledSnapshotsSustainabilityPerformanceTargetRateFacet is + ScheduledSnapshotsFacetBase, + CommonSustainabilityPerformanceTargetInterestRate +{ + function getStaticResolverKey() external pure override returns (bytes32 staticResolverKey_) { + staticResolverKey_ = _SCHEDULED_SNAPSHOTS_SUSTAINABILITY_PERFORMANCE_TARGET_RATE_RESOLVER_KEY; + } +} diff --git a/packages/ats/contracts/contracts/layer_3/bondUSA/BondUSA.sol b/packages/ats/contracts/contracts/layer_3/bondUSA/BondUSA.sol index f62ddb2bd..fd9d83f76 100644 --- a/packages/ats/contracts/contracts/layer_3/bondUSA/BondUSA.sol +++ b/packages/ats/contracts/contracts/layer_3/bondUSA/BondUSA.sol @@ -13,7 +13,7 @@ abstract contract BondUSA is IBondUSA, Bond { IBondRead.BondDetailsData calldata _bondDetailsData, RegulationData memory _regulationData, AdditionalSecurityData calldata _additionalSecurityData - ) external override onlyUninitialized(_bondStorage().initialized) { + ) external override onlyUninitialized(_isBondInitialized()) { _initialize_bond(_bondDetailsData); _initializeSecurity(_regulationData, _additionalSecurityData); } diff --git a/packages/ats/contracts/contracts/layer_3/bondUSA/BondUSAFacet.sol b/packages/ats/contracts/contracts/layer_3/bondUSA/BondUSAFacetBase.sol similarity index 73% rename from packages/ats/contracts/contracts/layer_3/bondUSA/BondUSAFacet.sol rename to packages/ats/contracts/contracts/layer_3/bondUSA/BondUSAFacetBase.sol index d628dc9bb..60dfd53bf 100644 --- a/packages/ats/contracts/contracts/layer_3/bondUSA/BondUSAFacet.sol +++ b/packages/ats/contracts/contracts/layer_3/bondUSA/BondUSAFacetBase.sol @@ -2,17 +2,11 @@ pragma solidity >=0.8.0 <0.9.0; import { IBondUSA } from "../interfaces/IBondUSA.sol"; -import { _BOND_RESOLVER_KEY } from "../../layer_2/constants/resolverKeys.sol"; import { IBond } from "../../layer_2/interfaces/bond/IBond.sol"; -import { ISecurity } from "../interfaces/ISecurity.sol"; import { IStaticFunctionSelectors } from "../../interfaces/resolver/resolverProxy/IStaticFunctionSelectors.sol"; import { BondUSA } from "./BondUSA.sol"; -contract BondUSAFacet is BondUSA, IStaticFunctionSelectors { - function getStaticResolverKey() external pure override returns (bytes32 staticResolverKey_) { - staticResolverKey_ = _BOND_RESOLVER_KEY; - } - +abstract contract BondUSAFacetBase is BondUSA, IStaticFunctionSelectors { function getStaticFunctionSelectors() external pure override returns (bytes4[] memory staticFunctionSelectors_) { uint256 selectorIndex; staticFunctionSelectors_ = new bytes4[](5); @@ -24,10 +18,9 @@ contract BondUSAFacet is BondUSA, IStaticFunctionSelectors { } function getStaticInterfaceIds() external pure override returns (bytes4[] memory staticInterfaceIds_) { - staticInterfaceIds_ = new bytes4[](3); + staticInterfaceIds_ = new bytes4[](2); uint256 selectorsIndex; staticInterfaceIds_[selectorsIndex++] = type(IBond).interfaceId; - staticInterfaceIds_[selectorsIndex++] = type(ISecurity).interfaceId; staticInterfaceIds_[selectorsIndex++] = type(IBondUSA).interfaceId; } } diff --git a/packages/ats/contracts/contracts/layer_3/bondUSA/BondUSAReadFacet.sol b/packages/ats/contracts/contracts/layer_3/bondUSA/BondUSAReadFacetBase.sol similarity index 74% rename from packages/ats/contracts/contracts/layer_3/bondUSA/BondUSAReadFacet.sol rename to packages/ats/contracts/contracts/layer_3/bondUSA/BondUSAReadFacetBase.sol index 8679ccc5a..7170bbe2c 100644 --- a/packages/ats/contracts/contracts/layer_3/bondUSA/BondUSAReadFacet.sol +++ b/packages/ats/contracts/contracts/layer_3/bondUSA/BondUSAReadFacetBase.sol @@ -3,18 +3,14 @@ pragma solidity >=0.8.0 <0.9.0; import { BondRead } from "../../layer_2/bond/BondRead.sol"; import { Security } from "../security/Security.sol"; -import { _BOND_READ_RESOLVER_KEY } from "../../layer_2/constants/resolverKeys.sol"; import { IBondRead } from "../../layer_2/interfaces/bond/IBondRead.sol"; import { ISecurity } from "../interfaces/ISecurity.sol"; +import { IStaticFunctionSelectors } from "../../interfaces/resolver/resolverProxy/IStaticFunctionSelectors.sol"; -contract BondUSAReadFacet is BondRead, Security { - function getStaticResolverKey() external pure override returns (bytes32 staticResolverKey_) { - staticResolverKey_ = _BOND_READ_RESOLVER_KEY; - } - +abstract contract BondUSAReadFacetBase is BondRead, IStaticFunctionSelectors, Security { function getStaticFunctionSelectors() external pure override returns (bytes4[] memory staticFunctionSelectors_) { uint256 selectorIndex; - staticFunctionSelectors_ = new bytes4[](11); + staticFunctionSelectors_ = new bytes4[](14); staticFunctionSelectors_[selectorIndex++] = this.getBondDetails.selector; staticFunctionSelectors_[selectorIndex++] = this.getCoupon.selector; staticFunctionSelectors_[selectorIndex++] = this.getCouponFor.selector; @@ -26,10 +22,13 @@ contract BondUSAReadFacet is BondRead, Security { staticFunctionSelectors_[selectorIndex++] = this.getSecurityRegulationData.selector; staticFunctionSelectors_[selectorIndex++] = this.getSecurityHolders.selector; staticFunctionSelectors_[selectorIndex++] = this.getTotalSecurityHolders.selector; + staticFunctionSelectors_[selectorIndex++] = this.getCouponFromOrderedListAt.selector; + staticFunctionSelectors_[selectorIndex++] = this.getCouponsOrderedList.selector; + staticFunctionSelectors_[selectorIndex++] = this.getCouponsOrderedListTotal.selector; } function getStaticInterfaceIds() external pure override returns (bytes4[] memory staticInterfaceIds_) { - staticInterfaceIds_ = new bytes4[](3); + staticInterfaceIds_ = new bytes4[](2); uint256 selectorsIndex; staticInterfaceIds_[selectorsIndex++] = type(IBondRead).interfaceId; staticInterfaceIds_[selectorsIndex++] = type(ISecurity).interfaceId; diff --git a/packages/ats/contracts/contracts/layer_3/bondUSA/fixedRate/BondUSAFixedRateFacet.sol b/packages/ats/contracts/contracts/layer_3/bondUSA/fixedRate/BondUSAFixedRateFacet.sol new file mode 100644 index 000000000..78af9618b --- /dev/null +++ b/packages/ats/contracts/contracts/layer_3/bondUSA/fixedRate/BondUSAFixedRateFacet.sol @@ -0,0 +1,12 @@ +// SPDX-License-Identifier: Apache-2.0 +pragma solidity >=0.8.0 <0.9.0; + +import { _BOND_FIXED_RATE_RESOLVER_KEY } from "contracts/layer_2/constants/resolverKeys.sol"; +import { BondUSAFacetBase } from "../BondUSAFacetBase.sol"; +import { CommonFixedInterestRate } from "contracts/layer_0_extensions/bond/fixedInterestRate/Common.sol"; + +contract BondUSAFixedRateFacet is BondUSAFacetBase, CommonFixedInterestRate { + function getStaticResolverKey() external pure override returns (bytes32 staticResolverKey_) { + staticResolverKey_ = _BOND_FIXED_RATE_RESOLVER_KEY; + } +} diff --git a/packages/ats/contracts/contracts/layer_3/bondUSA/fixedRate/BondUSAReadFixedRateFacet.sol b/packages/ats/contracts/contracts/layer_3/bondUSA/fixedRate/BondUSAReadFixedRateFacet.sol new file mode 100644 index 000000000..63afe1566 --- /dev/null +++ b/packages/ats/contracts/contracts/layer_3/bondUSA/fixedRate/BondUSAReadFixedRateFacet.sol @@ -0,0 +1,12 @@ +// SPDX-License-Identifier: Apache-2.0 +pragma solidity >=0.8.0 <0.9.0; + +import { BondUSAReadFacetBase } from "../BondUSAReadFacetBase.sol"; +import { _BOND_FIXED_READ_RESOLVER_KEY } from "contracts/layer_2/constants/resolverKeys.sol"; +import { CommonFixedInterestRate } from "contracts/layer_0_extensions/bond/fixedInterestRate/Common.sol"; + +contract BondUSAReadFixedRateFacet is BondUSAReadFacetBase, CommonFixedInterestRate { + function getStaticResolverKey() external pure virtual override returns (bytes32 staticResolverKey_) { + staticResolverKey_ = _BOND_FIXED_READ_RESOLVER_KEY; + } +} diff --git a/packages/ats/contracts/contracts/layer_3/bondUSA/kpiLinkedRate/BondUSAKpiLinkedRateFacet.sol b/packages/ats/contracts/contracts/layer_3/bondUSA/kpiLinkedRate/BondUSAKpiLinkedRateFacet.sol new file mode 100644 index 000000000..6c5777ab6 --- /dev/null +++ b/packages/ats/contracts/contracts/layer_3/bondUSA/kpiLinkedRate/BondUSAKpiLinkedRateFacet.sol @@ -0,0 +1,14 @@ +// SPDX-License-Identifier: Apache-2.0 +pragma solidity >=0.8.0 <0.9.0; + +import { _BOND_KPI_LINKED_RATE_RESOLVER_KEY } from "contracts/layer_2/constants/resolverKeys.sol"; +import { BondUSAFacetBase } from "../BondUSAFacetBase.sol"; +import { + CommonKpiLinkedInterestRate +} from "contracts/layer_0_extensions/bond/fixingDateInterestRate/kpiInterestRate/kpiLinkedInterestRate/Common.sol"; + +contract BondUSAKpiLinkedRateFacet is BondUSAFacetBase, CommonKpiLinkedInterestRate { + function getStaticResolverKey() external pure override returns (bytes32 staticResolverKey_) { + staticResolverKey_ = _BOND_KPI_LINKED_RATE_RESOLVER_KEY; + } +} diff --git a/packages/ats/contracts/contracts/layer_3/bondUSA/kpiLinkedRate/BondUSAReadKpiLinkedRateFacet.sol b/packages/ats/contracts/contracts/layer_3/bondUSA/kpiLinkedRate/BondUSAReadKpiLinkedRateFacet.sol new file mode 100644 index 000000000..6a47a2cde --- /dev/null +++ b/packages/ats/contracts/contracts/layer_3/bondUSA/kpiLinkedRate/BondUSAReadKpiLinkedRateFacet.sol @@ -0,0 +1,14 @@ +// SPDX-License-Identifier: Apache-2.0 +pragma solidity >=0.8.0 <0.9.0; + +import { BondUSAReadFacetBase } from "../BondUSAReadFacetBase.sol"; +import { _BOND_KPI_LINKED_READ_RESOLVER_KEY } from "contracts/layer_2/constants/resolverKeys.sol"; +import { + CommonKpiLinkedInterestRate +} from "contracts/layer_0_extensions/bond/fixingDateInterestRate/kpiInterestRate/kpiLinkedInterestRate/Common.sol"; + +contract BondUSAReadKpiLinkedRateFacet is BondUSAReadFacetBase, CommonKpiLinkedInterestRate { + function getStaticResolverKey() external pure virtual override returns (bytes32 staticResolverKey_) { + staticResolverKey_ = _BOND_KPI_LINKED_READ_RESOLVER_KEY; + } +} diff --git a/packages/ats/contracts/contracts/layer_3/bondUSA/sustainabilityPerformanceTargetRate/BondUSAReadSustainabilityPerformanceTargetRateFacet.sol b/packages/ats/contracts/contracts/layer_3/bondUSA/sustainabilityPerformanceTargetRate/BondUSAReadSustainabilityPerformanceTargetRateFacet.sol new file mode 100644 index 000000000..12c3f258f --- /dev/null +++ b/packages/ats/contracts/contracts/layer_3/bondUSA/sustainabilityPerformanceTargetRate/BondUSAReadSustainabilityPerformanceTargetRateFacet.sol @@ -0,0 +1,19 @@ +// SPDX-License-Identifier: Apache-2.0 +pragma solidity >=0.8.0 <0.9.0; + +import { + _BOND_SUSTAINABILITY_PERFORMANCE_TARGET_READ_RESOLVER_KEY +} from "contracts/layer_2/constants/resolverKeys.sol"; +import { BondUSAReadFacetBase } from "../BondUSAReadFacetBase.sol"; +// prettier-ignore +// solhint-disable-next-line max-line-length +import { CommonSustainabilityPerformanceTargetInterestRate } from "contracts/layer_0_extensions/bond/fixingDateInterestRate/kpiInterestRate/sustainabilityPerformanceTargetInterestRate/Common.sol"; + +contract BondUSAReadSustainabilityPerformanceTargetRateFacet is + BondUSAReadFacetBase, + CommonSustainabilityPerformanceTargetInterestRate +{ + function getStaticResolverKey() external pure virtual override returns (bytes32 staticResolverKey_) { + staticResolverKey_ = _BOND_SUSTAINABILITY_PERFORMANCE_TARGET_READ_RESOLVER_KEY; + } +} diff --git a/packages/ats/contracts/contracts/layer_3/bondUSA/sustainabilityPerformanceTargetRate/BondUSASustainabilityPerformanceTargetRateFacet.sol b/packages/ats/contracts/contracts/layer_3/bondUSA/sustainabilityPerformanceTargetRate/BondUSASustainabilityPerformanceTargetRateFacet.sol new file mode 100644 index 000000000..51bdaa850 --- /dev/null +++ b/packages/ats/contracts/contracts/layer_3/bondUSA/sustainabilityPerformanceTargetRate/BondUSASustainabilityPerformanceTargetRateFacet.sol @@ -0,0 +1,19 @@ +// SPDX-License-Identifier: Apache-2.0 +pragma solidity >=0.8.0 <0.9.0; + +import { + _BOND_SUSTAINABILITY_PERFORMANCE_TARGET_RATE_RESOLVER_KEY +} from "contracts/layer_2/constants/resolverKeys.sol"; +import { BondUSAFacetBase } from "../BondUSAFacetBase.sol"; +// prettier-ignore +// solhint-disable-next-line max-line-length +import { CommonSustainabilityPerformanceTargetInterestRate } from "contracts/layer_0_extensions/bond/fixingDateInterestRate/kpiInterestRate/sustainabilityPerformanceTargetInterestRate/Common.sol"; + +contract BondUSASustainabilityPerformanceTargetRateFacet is + BondUSAFacetBase, + CommonSustainabilityPerformanceTargetInterestRate +{ + function getStaticResolverKey() external pure override returns (bytes32 staticResolverKey_) { + staticResolverKey_ = _BOND_SUSTAINABILITY_PERFORMANCE_TARGET_RATE_RESOLVER_KEY; + } +} diff --git a/packages/ats/contracts/contracts/layer_3/bondUSA/variableRate/BondUSAFacet.sol b/packages/ats/contracts/contracts/layer_3/bondUSA/variableRate/BondUSAFacet.sol new file mode 100644 index 000000000..7647f7d7e --- /dev/null +++ b/packages/ats/contracts/contracts/layer_3/bondUSA/variableRate/BondUSAFacet.sol @@ -0,0 +1,12 @@ +// SPDX-License-Identifier: Apache-2.0 +pragma solidity >=0.8.0 <0.9.0; + +import { _BOND_VARIABLE_RATE_RESOLVER_KEY } from "contracts/layer_2/constants/resolverKeys.sol"; +import { BondUSAFacetBase } from "../BondUSAFacetBase.sol"; +import { Common } from "contracts/layer_0/common/Common.sol"; + +contract BondUSAFacet is BondUSAFacetBase, Common { + function getStaticResolverKey() external pure override returns (bytes32 staticResolverKey_) { + staticResolverKey_ = _BOND_VARIABLE_RATE_RESOLVER_KEY; + } +} diff --git a/packages/ats/contracts/contracts/layer_3/bondUSA/variableRate/BondUSAReadFacet.sol b/packages/ats/contracts/contracts/layer_3/bondUSA/variableRate/BondUSAReadFacet.sol new file mode 100644 index 000000000..1fc842f8e --- /dev/null +++ b/packages/ats/contracts/contracts/layer_3/bondUSA/variableRate/BondUSAReadFacet.sol @@ -0,0 +1,12 @@ +// SPDX-License-Identifier: Apache-2.0 +pragma solidity >=0.8.0 <0.9.0; + +import { _BOND_VARIABLE_READ_RESOLVER_KEY } from "contracts/layer_2/constants/resolverKeys.sol"; +import { BondUSAReadFacetBase } from "../BondUSAReadFacetBase.sol"; +import { Common } from "contracts/layer_0/common/Common.sol"; + +contract BondUSAReadFacet is BondUSAReadFacetBase, Common { + function getStaticResolverKey() external pure virtual override returns (bytes32 staticResolverKey_) { + staticResolverKey_ = _BOND_VARIABLE_READ_RESOLVER_KEY; + } +} diff --git a/packages/ats/contracts/contracts/layer_3/constants/resolverKeys.sol b/packages/ats/contracts/contracts/layer_3/constants/resolverKeys.sol index 09e171b7f..6d1a43684 100644 --- a/packages/ats/contracts/contracts/layer_3/constants/resolverKeys.sol +++ b/packages/ats/contracts/contracts/layer_3/constants/resolverKeys.sol @@ -5,3 +5,12 @@ pragma solidity >=0.8.0 <0.9.0; // keccak256("security.token.standard.transferAndLock.resolverKey") bytes32 constant _TRANSFER_AND_LOCK_RESOLVER_KEY = 0xd9b300e6bf7a143b8fd8cf1d4ab050e691c862bf0f57a7d49cc08c60efe68d08; + +// keccak256("security.token.standard.transferandlock.fixed.rate.resolverKey"); +bytes32 constant _TRANSFER_AND_LOCK_FIXED_RATE_RESOLVER_KEY = 0x8c3d5e9f2a6b1c4d7e8f9a2b3c4d5e6f7a8b9c0d1e2f3a4b5c6d7e8f9a0b1c2d; + +// keccak256("security.token.standard.transferandlock.kpilinked.rate.resolverKey"); +bytes32 constant _TRANSFER_AND_LOCK_KPI_LINKED_RATE_RESOLVER_KEY = 0x3e5f7a9b1c2d4e6f8a9b0c1d2e3f4a5b6c7d8e9f0a1b2c3d4e5f6a7b8c9d0e1f; + +// keccak256("security.token.standard.transferandlock.SustainabilityPerformanceTarget.rate.resolverKey"); +bytes32 constant _TRANSFER_AND_LOCK_SUSTAINABILITY_PERFORMANCE_TARGET_RATE_RESOLVER_KEY = 0x9d1e3f5a7b9c0d2e4f6a8b0c1d3e5f7a9b0c2d4e6f8a9b1c3d5e7f9a0b2c4d6e; diff --git a/packages/ats/contracts/contracts/layer_3/constants/values.sol b/packages/ats/contracts/contracts/layer_3/constants/values.sol deleted file mode 100644 index 79e72eb43..000000000 --- a/packages/ats/contracts/contracts/layer_3/constants/values.sol +++ /dev/null @@ -1,12 +0,0 @@ -// SPDX-License-Identifier: Apache-2.0 -pragma solidity >=0.8.0 <0.9.0; - -// solhint-disable max-line-length -//keccak256( -// 'protectedTransferAndLockByPartition(bytes32 _partition,address _to,uint256 _amount,bytes _data,uint256 _expirationTimestamp,uint256 _deadline,uint256 _nounce)' -//); -bytes32 constant _PROTECTED_TRANSFER_AND_LOCK_BY_PARTITION_FROM_PARTITION_TYPEHASH = 0x469e1ad68f1c00613412b08721e55c66600385de9bc2915bcf325ce75cb9787f; -//keccak256( -// 'protectedTransferAndLock(address _to,uint256 _amount,bytes _data,uint256 _expirationTimestamp,uint256 _deadline,uint256 _nounce)' -//); -bytes32 constant _PROTECTED_TRANSFER_AND_LOCK_FROM_PARTITION_TYPEHASH = 0x47531ba1baf5848f059b0278afd48ad424733a64d386375ab4b34a37fd7008c4; diff --git a/packages/ats/contracts/contracts/layer_3/interfaces/ITransferAndLock.sol b/packages/ats/contracts/contracts/layer_3/interfaces/ITransferAndLock.sol index bf3c790c8..47d4ede30 100644 --- a/packages/ats/contracts/contracts/layer_3/interfaces/ITransferAndLock.sol +++ b/packages/ats/contracts/contracts/layer_3/interfaces/ITransferAndLock.sol @@ -2,13 +2,15 @@ pragma solidity >=0.8.0 <0.9.0; interface ITransferAndLock { - struct TransferAndLockStruct { - address from; - address to; - uint256 amount; - bytes data; - uint256 expirationTimestamp; - } + event PartitionTransferredAndLocked( + bytes32 indexed partition, + address indexed from, + address to, + uint256 value, + bytes data, + uint256 expirationTimestamp, + uint256 lockId + ); /** * @notice Transfers tokens to a specified address for a partition and locks them until the expiration timestamp @@ -40,37 +42,4 @@ interface ITransferAndLock { bytes calldata _data, uint256 _expirationTimestamp ) external returns (bool success_, uint256 lockId_); - - /** - * @notice Transfers tokens to a specified address for a partition and locks them until the expiration timestamp - * @dev Can only be called by an account with the protected partitions role - * @param _partition The partition from which tokens will be transferred and locked - * @param _transferAndLockData The struct containing the transfer and lock data - * @param _deadline The deadline timestamp for the signature to be valid - * @param _nounce The nounce for the signature to be valid - * @param _signature The signature of the transfer and lock data - */ - function protectedTransferAndLockByPartition( - bytes32 _partition, - TransferAndLockStruct calldata _transferAndLockData, - uint256 _deadline, - uint256 _nounce, - bytes calldata _signature - ) external returns (bool success_, uint256 lockId_); - - /** - * @notice Transfers tokens to a specified address and locks them until the expiration - * timestamp using the default partition - * @dev Can only be called by an account with the protected partitions role - * @param _transferAndLockData The struct containing the transfer and lock data - * @param _deadline The deadline timestamp for the signature to be valid - * @param _nounce The nounce for the signature to be valid - * @param _signature The signature of the transfer and lock data - */ - function protectedTransferAndLock( - TransferAndLockStruct calldata _transferAndLockData, - uint256 _deadline, - uint256 _nounce, - bytes calldata _signature - ) external returns (bool success_, uint256 lockId_); } diff --git a/packages/ats/contracts/contracts/layer_3/interfaces/ITransferAndLockStorageWrapper.sol b/packages/ats/contracts/contracts/layer_3/interfaces/ITransferAndLockStorageWrapper.sol deleted file mode 100644 index 672c43a92..000000000 --- a/packages/ats/contracts/contracts/layer_3/interfaces/ITransferAndLockStorageWrapper.sol +++ /dev/null @@ -1,14 +0,0 @@ -// SPDX-License-Identifier: Apache-2.0 -pragma solidity >=0.8.0 <0.9.0; - -interface ITransferAndLockStorageWrapper { - event PartitionTransferredAndLocked( - bytes32 indexed partition, - address indexed from, - address to, - uint256 value, - bytes data, - uint256 expirationTimestamp, - uint256 lockId - ); -} diff --git a/packages/ats/contracts/contracts/layer_3/security/Security.sol b/packages/ats/contracts/contracts/layer_3/security/Security.sol index d8254010b..bd1360afa 100644 --- a/packages/ats/contracts/contracts/layer_3/security/Security.sol +++ b/packages/ats/contracts/contracts/layer_3/security/Security.sol @@ -2,9 +2,9 @@ pragma solidity >=0.8.0 <0.9.0; import { ISecurity } from "../interfaces/ISecurity.sol"; -import { Common } from "../../layer_1/common/Common.sol"; +import { Internals } from "../../layer_0/Internals.sol"; -abstract contract Security is ISecurity, Common { +abstract contract Security is ISecurity, Internals { function getSecurityHolders( uint256 _pageIndex, uint256 _pageLength diff --git a/packages/ats/contracts/contracts/layer_3/transferAndLock/TransferAndLock.sol b/packages/ats/contracts/contracts/layer_3/transferAndLock/TransferAndLock.sol index 0a89de303..26b230023 100644 --- a/packages/ats/contracts/contracts/layer_3/transferAndLock/TransferAndLock.sol +++ b/packages/ats/contracts/contracts/layer_3/transferAndLock/TransferAndLock.sol @@ -5,10 +5,9 @@ import { _DEFAULT_PARTITION } from "../../layer_0/constants/values.sol"; import { _LOCKER_ROLE } from "../../layer_1/constants/roles.sol"; import { ITransferAndLock } from "../interfaces/ITransferAndLock.sol"; import { BasicTransferInfo } from "../../layer_1/interfaces/ERC1400/IERC1410.sol"; -import { Common } from "../../layer_1/common/Common.sol"; -import { ITransferAndLock } from "../interfaces/ITransferAndLock.sol"; +import { Internals } from "../../layer_0/Internals.sol"; -abstract contract TransferAndLock is ITransferAndLock, Common { +abstract contract TransferAndLock is ITransferAndLock, Internals { function transferAndLockByPartition( bytes32 _partition, address _to, @@ -72,43 +71,4 @@ abstract contract TransferAndLock is ITransferAndLock, Common { lockId_ ); } - - function protectedTransferAndLockByPartition( - bytes32 _partition, - TransferAndLockStruct calldata _transferAndLockData, - uint256 _deadline, - uint256 _nounce, - bytes calldata _signature - ) - external - override - onlyRoleFor(_LOCKER_ROLE, _transferAndLockData.from) - onlyRole(_protectedPartitionsRole(_partition)) - onlyUnpaused - onlyDefaultPartitionWithSinglePartition(_partition) - onlyWithValidExpirationTimestamp(_transferAndLockData.expirationTimestamp) - onlyProtectedPartitions - returns (bool success_, uint256 lockId_) - { - return _protectedTransferAndLockByPartition(_partition, _transferAndLockData, _deadline, _nounce, _signature); - } - - function protectedTransferAndLock( - TransferAndLockStruct calldata _transferAndLockData, - uint256 _deadline, - uint256 _nounce, - bytes calldata _signature - ) - external - override - onlyRoleFor(_LOCKER_ROLE, _transferAndLockData.from) - onlyRole(_protectedPartitionsRole(_DEFAULT_PARTITION)) - onlyUnpaused - onlyWithoutMultiPartition - onlyWithValidExpirationTimestamp(_transferAndLockData.expirationTimestamp) - onlyProtectedPartitions - returns (bool success_, uint256 lockId_) - { - return _protectedTransferAndLock(_transferAndLockData, _deadline, _nounce, _signature); - } } diff --git a/packages/ats/contracts/contracts/layer_3/transferAndLock/TransferAndLockFacet.sol b/packages/ats/contracts/contracts/layer_3/transferAndLock/TransferAndLockFacetBase.sol similarity index 75% rename from packages/ats/contracts/contracts/layer_3/transferAndLock/TransferAndLockFacet.sol rename to packages/ats/contracts/contracts/layer_3/transferAndLock/TransferAndLockFacetBase.sol index 9d2c0c1c1..70be234a3 100644 --- a/packages/ats/contracts/contracts/layer_3/transferAndLock/TransferAndLockFacet.sol +++ b/packages/ats/contracts/contracts/layer_3/transferAndLock/TransferAndLockFacetBase.sol @@ -1,16 +1,11 @@ // SPDX-License-Identifier: Apache-2.0 pragma solidity >=0.8.0 <0.9.0; -import { _TRANSFER_AND_LOCK_RESOLVER_KEY } from "../constants/resolverKeys.sol"; import { IStaticFunctionSelectors } from "../../interfaces/resolver/resolverProxy/IStaticFunctionSelectors.sol"; import { ITransferAndLock } from "../interfaces/ITransferAndLock.sol"; import { TransferAndLock } from "./TransferAndLock.sol"; -contract TransferAndLockFacet is TransferAndLock, IStaticFunctionSelectors { - function getStaticResolverKey() external pure override returns (bytes32 staticResolverKey_) { - staticResolverKey_ = _TRANSFER_AND_LOCK_RESOLVER_KEY; - } - +abstract contract TransferAndLockFacetBase is TransferAndLock, IStaticFunctionSelectors { function getStaticFunctionSelectors() external pure override returns (bytes4[] memory staticFunctionSelectors_) { uint256 selectorIndex; staticFunctionSelectors_ = new bytes4[](2); diff --git a/packages/ats/contracts/contracts/layer_3/transferAndLock/fixedRate/TransferAndLockFixedRateFacet.sol b/packages/ats/contracts/contracts/layer_3/transferAndLock/fixedRate/TransferAndLockFixedRateFacet.sol new file mode 100644 index 000000000..dcc85ef45 --- /dev/null +++ b/packages/ats/contracts/contracts/layer_3/transferAndLock/fixedRate/TransferAndLockFixedRateFacet.sol @@ -0,0 +1,12 @@ +// SPDX-License-Identifier: Apache-2.0 +pragma solidity >=0.8.0 <0.9.0; + +import { _TRANSFER_AND_LOCK_FIXED_RATE_RESOLVER_KEY } from "../../constants/resolverKeys.sol"; +import { TransferAndLockFacetBase } from "../TransferAndLockFacetBase.sol"; +import { CommonFixedInterestRate } from "../../../layer_0_extensions/bond/fixedInterestRate/Common.sol"; + +contract TransferAndLockFixedRateFacet is TransferAndLockFacetBase, CommonFixedInterestRate { + function getStaticResolverKey() external pure override returns (bytes32 staticResolverKey_) { + staticResolverKey_ = _TRANSFER_AND_LOCK_FIXED_RATE_RESOLVER_KEY; + } +} diff --git a/packages/ats/contracts/contracts/layer_3/transferAndLock/kpiLinkedRate/TransferAndLockKpiLinkedRateFacet.sol b/packages/ats/contracts/contracts/layer_3/transferAndLock/kpiLinkedRate/TransferAndLockKpiLinkedRateFacet.sol new file mode 100644 index 000000000..cda254090 --- /dev/null +++ b/packages/ats/contracts/contracts/layer_3/transferAndLock/kpiLinkedRate/TransferAndLockKpiLinkedRateFacet.sol @@ -0,0 +1,14 @@ +// SPDX-License-Identifier: Apache-2.0 +pragma solidity >=0.8.0 <0.9.0; + +import { _TRANSFER_AND_LOCK_KPI_LINKED_RATE_RESOLVER_KEY } from "../../constants/resolverKeys.sol"; +import { TransferAndLockFacetBase } from "../TransferAndLockFacetBase.sol"; +import { + CommonKpiLinkedInterestRate +} from "../../../layer_0_extensions/bond/fixingDateInterestRate/kpiInterestRate/kpiLinkedInterestRate/Common.sol"; + +contract TransferAndLockKpiLinkedRateFacet is TransferAndLockFacetBase, CommonKpiLinkedInterestRate { + function getStaticResolverKey() external pure override returns (bytes32 staticResolverKey_) { + staticResolverKey_ = _TRANSFER_AND_LOCK_KPI_LINKED_RATE_RESOLVER_KEY; + } +} diff --git a/packages/ats/contracts/contracts/layer_3/transferAndLock/signatureVerification.sol b/packages/ats/contracts/contracts/layer_3/transferAndLock/signatureVerification.sol deleted file mode 100644 index b8079dcd8..000000000 --- a/packages/ats/contracts/contracts/layer_3/transferAndLock/signatureVerification.sol +++ /dev/null @@ -1,57 +0,0 @@ -// SPDX-License-Identifier: Apache-2.0 -pragma solidity >=0.8.0 <0.9.0; - -import { - _PROTECTED_TRANSFER_AND_LOCK_FROM_PARTITION_TYPEHASH, - _PROTECTED_TRANSFER_AND_LOCK_BY_PARTITION_FROM_PARTITION_TYPEHASH -} from "../constants/values.sol"; - -function getMessageHashTransferAndLock( - address _from, - address _to, - uint256 _amount, - bytes calldata _data, - uint256 _expirationTimestamp, - uint256 _deadline, - uint256 _nounce -) pure returns (bytes32) { - return - keccak256( - abi.encode( - _PROTECTED_TRANSFER_AND_LOCK_FROM_PARTITION_TYPEHASH, - _from, - _to, - _amount, - _data, - _expirationTimestamp, - _deadline, - _nounce - ) - ); -} - -function getMessageHashTransferAndLockByPartition( - bytes32 _partition, - address _from, - address _to, - uint256 _amount, - bytes calldata _data, - uint256 _expirationTimestamp, - uint256 _deadline, - uint256 _nounce -) pure returns (bytes32) { - return - keccak256( - abi.encode( - _PROTECTED_TRANSFER_AND_LOCK_BY_PARTITION_FROM_PARTITION_TYPEHASH, - _partition, - _from, - _to, - _amount, - _data, - _expirationTimestamp, - _deadline, - _nounce - ) - ); -} diff --git a/packages/ats/contracts/contracts/layer_3/transferAndLock/standard/TransferAndLockFacet.sol b/packages/ats/contracts/contracts/layer_3/transferAndLock/standard/TransferAndLockFacet.sol new file mode 100644 index 000000000..1ce9b0b71 --- /dev/null +++ b/packages/ats/contracts/contracts/layer_3/transferAndLock/standard/TransferAndLockFacet.sol @@ -0,0 +1,12 @@ +// SPDX-License-Identifier: Apache-2.0 +pragma solidity >=0.8.0 <0.9.0; + +import { _TRANSFER_AND_LOCK_RESOLVER_KEY } from "../../constants/resolverKeys.sol"; +import { TransferAndLockFacetBase } from "../TransferAndLockFacetBase.sol"; +import { Common } from "../../../layer_0/common/Common.sol"; + +contract TransferAndLockFacet is TransferAndLockFacetBase, Common { + function getStaticResolverKey() external pure override returns (bytes32 staticResolverKey_) { + staticResolverKey_ = _TRANSFER_AND_LOCK_RESOLVER_KEY; + } +} diff --git a/packages/ats/contracts/contracts/layer_3/transferAndLock/sustainabilityPerformanceTargetRate/TransferAndLockSustainabilityPerformanceTargetRateFacet.sol b/packages/ats/contracts/contracts/layer_3/transferAndLock/sustainabilityPerformanceTargetRate/TransferAndLockSustainabilityPerformanceTargetRateFacet.sol new file mode 100644 index 000000000..783b2b9ca --- /dev/null +++ b/packages/ats/contracts/contracts/layer_3/transferAndLock/sustainabilityPerformanceTargetRate/TransferAndLockSustainabilityPerformanceTargetRateFacet.sol @@ -0,0 +1,19 @@ +// SPDX-License-Identifier: Apache-2.0 +pragma solidity >=0.8.0 <0.9.0; + +import { + _TRANSFER_AND_LOCK_SUSTAINABILITY_PERFORMANCE_TARGET_RATE_RESOLVER_KEY +} from "../../constants/resolverKeys.sol"; +import { TransferAndLockFacetBase } from "../TransferAndLockFacetBase.sol"; +// prettier-ignore +// solhint-disable-next-line max-line-length +import { CommonSustainabilityPerformanceTargetInterestRate } from "../../../layer_0_extensions/bond/fixingDateInterestRate/kpiInterestRate/sustainabilityPerformanceTargetInterestRate/Common.sol"; + +contract TransferAndLockSustainabilityPerformanceTargetRateFacet is + TransferAndLockFacetBase, + CommonSustainabilityPerformanceTargetInterestRate +{ + function getStaticResolverKey() external pure override returns (bytes32 staticResolverKey_) { + staticResolverKey_ = _TRANSFER_AND_LOCK_SUSTAINABILITY_PERFORMANCE_TARGET_RATE_RESOLVER_KEY; + } +} diff --git a/packages/ats/contracts/contracts/mocks/MockComplianceModule.sol b/packages/ats/contracts/contracts/mocks/MockComplianceModule.sol new file mode 100644 index 000000000..e7b59714e --- /dev/null +++ b/packages/ats/contracts/contracts/mocks/MockComplianceModule.sol @@ -0,0 +1,112 @@ +// SPDX-License-Identifier: MIT +pragma solidity ^0.8.17; + +/** + * @title MockComplianceModule + * @dev Mock implementation of IModule interface for testing compliance module functionality + */ +contract MockComplianceModule { + mapping(address => bool) private _boundCompliances; + mapping(address => uint256) private _complianceConfig; + + event ComplianceBound(address indexed _compliance); + event ComplianceUnbound(address indexed _compliance); + event ConfigSet(address indexed _compliance, uint256 value); + + error AlreadyBound(); + error NotBound(); + + /** + * @dev Binds the module to a compliance contract + * @param _compliance address of the compliance contract + */ + function bindCompliance(address _compliance) external { + if (_boundCompliances[_compliance]) revert AlreadyBound(); + _boundCompliances[_compliance] = true; + emit ComplianceBound(_compliance); + } + + /** + * @dev Unbinds the module from a compliance contract + * @param _compliance address of the compliance contract + */ + function unbindCompliance(address _compliance) external { + if (!_boundCompliances[_compliance]) revert NotBound(); + _boundCompliances[_compliance] = false; + emit ComplianceUnbound(_compliance); + } + + /** + * @dev Configuration function to test compliance settings + * @param _value configuration value to set + */ + function setConfig(uint256 _value) external { + _complianceConfig[msg.sender] = _value; + emit ConfigSet(msg.sender, _value); + } + + /** + * @dev Returns whether a compliance is bound + * @param _compliance address of the compliance contract + */ + function isComplianceBound(address _compliance) external view returns (bool) { + return _boundCompliances[_compliance]; + } + + /** + * @dev Get configuration value + * @param _compliance address of the compliance contract + */ + function getConfig(address _compliance) external view returns (uint256) { + return _complianceConfig[_compliance]; + } + + /** + * @dev Mock implementation of moduleTransferAction + */ + function moduleTransferAction(address, address, uint256) external pure { + // solhint-disable-previous-line no-empty-blocks + } + + /** + * @dev Mock implementation of moduleMintAction + */ + function moduleMintAction(address, uint256) external pure { + // solhint-disable-previous-line no-empty-blocks + } + + /** + * @dev Mock implementation of moduleBurnAction + */ + function moduleBurnAction(address, uint256) external pure { + // solhint-disable-previous-line no-empty-blocks + } + + /** + * @dev Mock implementation of moduleCheck + */ + function moduleCheck(address, address, uint256, address) external pure returns (bool) { + return true; + } + + /** + * @dev checks whether compliance is suitable to bind to the module + */ + function canComplianceBind(address) external pure returns (bool) { + return true; + } + + /** + * @dev getter for module plug & play status + */ + function isPlugAndPlay() external pure returns (bool) { + return true; + } + + /** + * @dev getter for the name of the module + */ + function name() external pure returns (string memory) { + return "MockComplianceModule"; + } +} diff --git a/packages/ats/contracts/contracts/mocks/MockIncompleteImplementationAuthority.sol b/packages/ats/contracts/contracts/mocks/MockIncompleteImplementationAuthority.sol new file mode 100644 index 000000000..cc3c83f19 --- /dev/null +++ b/packages/ats/contracts/contracts/mocks/MockIncompleteImplementationAuthority.sol @@ -0,0 +1,28 @@ +// SPDX-License-Identifier: Apache-2.0 +pragma solidity ^0.8.17; + +/** + * @notice Mock contract for testing incomplete implementation authority + * @dev Returns zero address for all implementation getters + */ +contract MockIncompleteImplementationAuthority { + function getCTRImplementation() external pure returns (address) { + return address(0); + } + + function getIRImplementation() external pure returns (address) { + return address(0); + } + + function getIRSImplementation() external pure returns (address) { + return address(0); + } + + function getMCImplementation() external pure returns (address) { + return address(0); + } + + function getTIRImplementation() external pure returns (address) { + return address(0); + } +} diff --git a/packages/ats/contracts/contracts/mocks/MockedKpiOracle.sol b/packages/ats/contracts/contracts/mocks/MockedKpiOracle.sol new file mode 100644 index 000000000..01868754f --- /dev/null +++ b/packages/ats/contracts/contracts/mocks/MockedKpiOracle.sol @@ -0,0 +1,24 @@ +// SPDX-License-Identifier: MIT +pragma solidity >=0.8.0 <0.9.0; + +contract MockedKpiOracle { + uint256 private _kpiValue; + uint256 private _minValidDate; + bool private _exists; + + function setKpiValue(uint256 kpiValue) external { + _kpiValue = kpiValue; + } + + function setExists(bool exists) external { + _exists = exists; + } + + function setMinValidDate(uint256 minValidDate) external { + _minValidDate = minValidDate; + } + + function getKpiData(uint256, uint256) external view returns (uint256, bool) { + return (_kpiValue, _exists); + } +} diff --git a/packages/ats/contracts/contracts/mocks/MockedRegulation.sol b/packages/ats/contracts/contracts/mocks/MockedRegulation.sol new file mode 100644 index 000000000..810435859 --- /dev/null +++ b/packages/ats/contracts/contracts/mocks/MockedRegulation.sol @@ -0,0 +1,104 @@ +// SPDX-License-Identifier: Apache-2.0 +pragma solidity ^0.8.17; + +import { + buildRegulationData, + buildDealSize, + buildAccreditedInvestors, + buildMaxNonAccreditedInvestors, + buildManualInvestorVerification, + buildInternationalInvestors, + buildResaleHoldPeriod, + checkRegulationTypeAndSubType, + isValidTypeAndSubType, + isValidTypeAndSubTypeForRegS, + isValidTypeAndSubTypeForRegD, + RegulationType, + RegulationSubType, + RegulationData, + AccreditedInvestors, + ManualInvestorVerification, + InternationalInvestors, + ResaleHoldPeriod +} from "../factory/ERC3643/interfaces/regulation.sol"; +/** + * @notice Helper contract to expose regulation.sol pure functions for testing + */ +contract MockedRegulation { + function testBuildRegulationData( + RegulationType _regulationType, + RegulationSubType _regulationSubType + ) external pure returns (RegulationData memory) { + return buildRegulationData(_regulationType, _regulationSubType); + } + + function testBuildDealSize( + RegulationType _regulationType, + RegulationSubType _regulationSubType + ) external pure returns (uint256) { + return buildDealSize(_regulationType, _regulationSubType); + } + + function testBuildAccreditedInvestors( + RegulationType _regulationType, + RegulationSubType _regulationSubType + ) external pure returns (AccreditedInvestors) { + return buildAccreditedInvestors(_regulationType, _regulationSubType); + } + + function testBuildMaxNonAccreditedInvestors( + RegulationType _regulationType, + RegulationSubType _regulationSubType + ) external pure returns (uint256) { + return buildMaxNonAccreditedInvestors(_regulationType, _regulationSubType); + } + + function testBuildManualInvestorVerification( + RegulationType _regulationType, + RegulationSubType _regulationSubType + ) external pure returns (ManualInvestorVerification) { + return buildManualInvestorVerification(_regulationType, _regulationSubType); + } + + function testBuildInternationalInvestors( + RegulationType _regulationType, + RegulationSubType _regulationSubType + ) external pure returns (InternationalInvestors) { + return buildInternationalInvestors(_regulationType, _regulationSubType); + } + + function testBuildResaleHoldPeriod( + RegulationType _regulationType, + RegulationSubType _regulationSubType + ) external pure returns (ResaleHoldPeriod) { + return buildResaleHoldPeriod(_regulationType, _regulationSubType); + } + + function testCheckRegulationTypeAndSubType( + RegulationType _regulationType, + RegulationSubType _regulationSubType + ) external pure { + checkRegulationTypeAndSubType(_regulationType, _regulationSubType); + } + + function testIsValidTypeAndSubType( + RegulationType _regulationType, + RegulationSubType _regulationSubType + ) external pure returns (bool) { + return isValidTypeAndSubType(_regulationType, _regulationSubType); + } + + function testIsValidTypeAndSubTypeForRegS( + RegulationType _regulationType, + RegulationSubType _regulationSubType + ) external pure returns (bool) { + return isValidTypeAndSubTypeForRegS(_regulationType, _regulationSubType); + } + + function testIsValidTypeAndSubTypeForRegD( + RegulationType _regulationType, + RegulationSubType _regulationSubType + ) external pure returns (bool) { + return isValidTypeAndSubTypeForRegD(_regulationType, _regulationSubType); + } +} diff --git a/packages/ats/contracts/contracts/resolver/BusinessLogicResolverWrapper.sol b/packages/ats/contracts/contracts/resolver/BusinessLogicResolverWrapper.sol index a0ba2e5b3..32b8704aa 100644 --- a/packages/ats/contracts/contracts/resolver/BusinessLogicResolverWrapper.sol +++ b/packages/ats/contracts/contracts/resolver/BusinessLogicResolverWrapper.sol @@ -42,7 +42,8 @@ abstract contract BusinessLogicResolverWrapper is IBusinessLogicResolverWrapper businessLogicResolverDataStorage.latestVersion++; IBusinessLogicResolver.BusinessLogicRegistryData memory _businessLogicsRegistryData; - for (uint256 index; index < _businessLogicsRegistryDatas.length; index++) { + uint256 businessLogicsRegistryDatasLength = _businessLogicsRegistryDatas.length; + for (uint256 index; index < businessLogicsRegistryDatasLength; ) { _businessLogicsRegistryData = _businessLogicsRegistryDatas[index]; if (!businessLogicResolverDataStorage.businessLogicActive[_businessLogicsRegistryData.businessLogicKey]) { @@ -74,6 +75,10 @@ abstract contract BusinessLogicResolverWrapper is IBusinessLogicResolverWrapper ) ) ] = versions.length - 1; + + unchecked { + ++index; + } } businessLogicResolverDataStorage.versionStatuses[ @@ -200,11 +205,8 @@ abstract contract BusinessLogicResolverWrapper is IBusinessLogicResolverWrapper function _checkValidKeys( IBusinessLogicResolver.BusinessLogicRegistryData[] calldata _businessLogicsRegistryDatas ) private view { - BusinessLogicResolverDataStorage storage businessLogicResolverDataStorage = _businessLogicResolverStorage(); - // Check all previously activated keys are in the array.this // Check non duplicated keys. - uint256 activesBusinessLogicsKeys; bytes32 currentKey; uint256 length = _businessLogicsRegistryDatas.length; uint256 innerIndex; @@ -212,7 +214,6 @@ abstract contract BusinessLogicResolverWrapper is IBusinessLogicResolverWrapper currentKey = _businessLogicsRegistryDatas[index].businessLogicKey; if (uint256(currentKey) == 0) revert ZeroKeyNotValidForBusinessLogic(); - if (businessLogicResolverDataStorage.businessLogicActive[currentKey]) ++activesBusinessLogicsKeys; unchecked { innerIndex = index + 1; } @@ -227,7 +228,5 @@ abstract contract BusinessLogicResolverWrapper is IBusinessLogicResolverWrapper ++index; } } - if (activesBusinessLogicsKeys != businessLogicResolverDataStorage.activeBusinessLogics.length) - revert AllBusinessLogicKeysMustBeenInformed(); } } diff --git a/packages/ats/contracts/contracts/resolver/diamondCutManager/DiamondCutManager.sol b/packages/ats/contracts/contracts/resolver/diamondCutManager/DiamondCutManager.sol index 410b314bc..ec2d7469f 100644 --- a/packages/ats/contracts/contracts/resolver/diamondCutManager/DiamondCutManager.sol +++ b/packages/ats/contracts/contracts/resolver/diamondCutManager/DiamondCutManager.sol @@ -6,8 +6,9 @@ import { Pause } from "../../layer_1/pause/Pause.sol"; import { AccessControl } from "../../layer_1/accessControl/AccessControl.sol"; import { DiamondCutManagerWrapper } from "./DiamondCutManagerWrapper.sol"; import { IDiamondLoupe } from "../../interfaces/resolver/resolverProxy/IDiamondLoupe.sol"; +import { Common } from "contracts/layer_0/common/Common.sol"; -abstract contract DiamondCutManager is AccessControl, Pause, DiamondCutManagerWrapper { +abstract contract DiamondCutManager is AccessControl, Pause, DiamondCutManagerWrapper, Common { modifier validateConfigurationId(bytes32 _configurationId) { _checkConfigurationId(_configurationId); _; diff --git a/packages/ats/contracts/contracts/resolver/diamondCutManager/DiamondCutManagerWrapper.sol b/packages/ats/contracts/contracts/resolver/diamondCutManager/DiamondCutManagerWrapper.sol index a41c8d048..81a5198aa 100644 --- a/packages/ats/contracts/contracts/resolver/diamondCutManager/DiamondCutManagerWrapper.sol +++ b/packages/ats/contracts/contracts/resolver/diamondCutManager/DiamondCutManagerWrapper.sol @@ -95,7 +95,6 @@ abstract contract DiamondCutManagerWrapper is IDiamondCutManager, BusinessLogicR address addr = _resolveBusinessLogicByVersion(facetId, facetVersion); - // TODO: is better a checkFacetRegistered in BusinessLogicResolverWrapper?? if (addr == address(0)) { revert FacetIdNotRegistered(_configurationId, facetId); } @@ -466,7 +465,6 @@ abstract contract DiamondCutManagerWrapper is IDiamondCutManager, BusinessLogicR } } - // TODO: Move to a separate file. function _buildHash(bytes32 _configurationId, uint256 _version) private pure returns (bytes32 hash_) { hash_ = keccak256(abi.encodePacked(_configurationId, _version)); } diff --git a/packages/ats/contracts/contracts/resolver/resolverProxy/facets/DiamondLoupeFacet.sol b/packages/ats/contracts/contracts/resolver/resolverProxy/facets/DiamondLoupeFacet.sol index fffa76b77..1337d55fe 100644 --- a/packages/ats/contracts/contracts/resolver/resolverProxy/facets/DiamondLoupeFacet.sol +++ b/packages/ats/contracts/contracts/resolver/resolverProxy/facets/DiamondLoupeFacet.sol @@ -9,7 +9,6 @@ import { IDiamondLoupe } from "../../../interfaces/resolver/resolverProxy/IDiamo import { IERC165 } from "@openzeppelin/contracts/utils/introspection/IERC165.sol"; import { _DIAMOND_LOUPE_RESOLVER_KEY } from "../../../layer_1/constants/resolverKeys.sol"; -// HACK: I think that Loupe and Cut implementation should be only one contract. contract DiamondLoupeFacet is IDiamondLoupe, IERC165, ResolverProxyUnstructured { function getFacets() external view override returns (Facet[] memory facets_) { ResolverProxyStorage storage ds = _resolverProxyStorage(); diff --git a/packages/ats/contracts/contracts/resolver/resolverProxy/unstructured/ResolverProxyUnstructured.sol b/packages/ats/contracts/contracts/resolver/resolverProxy/unstructured/ResolverProxyUnstructured.sol index 612b27e6b..8e461ca80 100644 --- a/packages/ats/contracts/contracts/resolver/resolverProxy/unstructured/ResolverProxyUnstructured.sol +++ b/packages/ats/contracts/contracts/resolver/resolverProxy/unstructured/ResolverProxyUnstructured.sol @@ -4,25 +4,12 @@ pragma solidity >=0.8.0 <0.9.0; import { IResolverProxy } from "../../../interfaces/resolver/resolverProxy/IResolverProxy.sol"; import { IBusinessLogicResolver } from "../../../interfaces/resolver/IBusinessLogicResolver.sol"; import { IDiamondLoupe } from "../../../interfaces/resolver/resolverProxy/IDiamondLoupe.sol"; -import { AccessControlStorageWrapper } from "../../../layer_0/core/accessControl/AccessControlStorageWrapper.sol"; -import { PauseStorageWrapper } from "../../../layer_0/core/pause/PauseStorageWrapper.sol"; -import { _RESOLVER_PROXY_STORAGE_POSITION } from "../../../layer_1/constants/storagePositions.sol"; +import { Common } from "../../../layer_0/common/Common.sol"; +import { ResolverProxyStorageWrapper } from "../../../layer_0/core/resolverProxy/ResolverProxyStorageWrapper.sol"; // Remember to add the loupe functions from DiamondLoupeFacet.sol.sol to the resolverProxy. // The loupe functions are required by the EIP2535 ResolverProxys standard -abstract contract ResolverProxyUnstructured is AccessControlStorageWrapper, PauseStorageWrapper { - struct FacetIdsAndSelectorPosition { - bytes32 facetId; - uint16 selectorPosition; - } - - struct ResolverProxyStorage { - IBusinessLogicResolver resolver; - bytes32 resolverProxyConfigurationId; - uint256 version; - // AccessControl instead of owned. Only DEFAULT_ADMIN role. - } - +abstract contract ResolverProxyUnstructured is Common { function _initialize( IBusinessLogicResolver _resolver, bytes32 _resolverProxyConfigurationId, @@ -30,22 +17,28 @@ abstract contract ResolverProxyUnstructured is AccessControlStorageWrapper, Paus IResolverProxy.Rbac[] memory _rbacs ) internal { _resolver.checkResolverProxyConfigurationRegistered(_resolverProxyConfigurationId, _version); - ResolverProxyStorage storage ds = _resolverProxyStorage(); + ResolverProxyStorageWrapper.ResolverProxyStorage storage ds = _resolverProxyStorage(); _updateResolver(ds, _resolver); _updateConfigId(ds, _resolverProxyConfigurationId); _updateVersion(ds, _version); _assignRbacRoles(_rbacs); } - function _updateResolver(ResolverProxyStorage storage _ds, IBusinessLogicResolver _resolver) internal { + function _updateResolver( + ResolverProxyStorageWrapper.ResolverProxyStorage storage _ds, + IBusinessLogicResolver _resolver + ) internal { _ds.resolver = _resolver; } - function _updateConfigId(ResolverProxyStorage storage _ds, bytes32 _resolverProxyConfigurationId) internal { + function _updateConfigId( + ResolverProxyStorageWrapper.ResolverProxyStorage storage _ds, + bytes32 _resolverProxyConfigurationId + ) internal { _ds.resolverProxyConfigurationId = _resolverProxyConfigurationId; } - function _updateVersion(ResolverProxyStorage storage _ds, uint256 _version) internal { + function _updateVersion(ResolverProxyStorageWrapper.ResolverProxyStorage storage _ds, uint256 _version) internal { _ds.version = _version; } @@ -57,7 +50,9 @@ abstract contract ResolverProxyUnstructured is AccessControlStorageWrapper, Paus } } - function _getFacetsLength(ResolverProxyStorage storage _ds) internal view returns (uint256 facetsLength_) { + function _getFacetsLength( + ResolverProxyStorageWrapper.ResolverProxyStorage storage _ds + ) internal view returns (uint256 facetsLength_) { facetsLength_ = _ds.resolver.getFacetsLengthByConfigurationIdAndVersion( _ds.resolverProxyConfigurationId, _ds.version @@ -65,7 +60,7 @@ abstract contract ResolverProxyUnstructured is AccessControlStorageWrapper, Paus } function _getFacets( - ResolverProxyStorage storage _ds, + ResolverProxyStorageWrapper.ResolverProxyStorage storage _ds, uint256 _pageIndex, uint256 _pageLength ) internal view returns (IDiamondLoupe.Facet[] memory facets_) { @@ -78,7 +73,7 @@ abstract contract ResolverProxyUnstructured is AccessControlStorageWrapper, Paus } function _getFacetSelectorsLength( - ResolverProxyStorage storage _ds, + ResolverProxyStorageWrapper.ResolverProxyStorage storage _ds, bytes32 _facetId ) internal view returns (uint256 facetSelectorsLength_) { facetSelectorsLength_ = _ds.resolver.getFacetSelectorsLengthByConfigurationIdVersionAndFacetId( @@ -89,7 +84,7 @@ abstract contract ResolverProxyUnstructured is AccessControlStorageWrapper, Paus } function _getFacetSelectors( - ResolverProxyStorage storage _ds, + ResolverProxyStorageWrapper.ResolverProxyStorage storage _ds, bytes32 _facetId, uint256 _pageIndex, uint256 _pageLength @@ -104,7 +99,7 @@ abstract contract ResolverProxyUnstructured is AccessControlStorageWrapper, Paus } function _getFacetIds( - ResolverProxyStorage storage _ds, + ResolverProxyStorageWrapper.ResolverProxyStorage storage _ds, uint256 _pageIndex, uint256 _pageLength ) internal view returns (bytes32[] memory facetIds_) { @@ -117,7 +112,7 @@ abstract contract ResolverProxyUnstructured is AccessControlStorageWrapper, Paus } function _getFacetAddresses( - ResolverProxyStorage storage _ds, + ResolverProxyStorageWrapper.ResolverProxyStorage storage _ds, uint256 _pageIndex, uint256 _pageLength ) internal view returns (address[] memory facetAddresses_) { @@ -130,7 +125,7 @@ abstract contract ResolverProxyUnstructured is AccessControlStorageWrapper, Paus } function _getFacetIdBySelector( - ResolverProxyStorage storage _ds, + ResolverProxyStorageWrapper.ResolverProxyStorage storage _ds, bytes4 _selector ) internal view returns (bytes32 facetId_) { facetId_ = _ds.resolver.getFacetIdByConfigurationIdVersionAndSelector( @@ -141,7 +136,7 @@ abstract contract ResolverProxyUnstructured is AccessControlStorageWrapper, Paus } function _getFacet( - ResolverProxyStorage storage _ds, + ResolverProxyStorageWrapper.ResolverProxyStorage storage _ds, bytes32 _facetId ) internal view returns (IDiamondLoupe.Facet memory facet_) { facet_ = _ds.resolver.getFacetByConfigurationIdVersionAndFacetId( @@ -151,12 +146,15 @@ abstract contract ResolverProxyUnstructured is AccessControlStorageWrapper, Paus ); } - function _getFacetAddress(ResolverProxyStorage storage _ds, bytes4 _selector) internal view returns (address) { + function _getFacetAddress( + ResolverProxyStorageWrapper.ResolverProxyStorage storage _ds, + bytes4 _selector + ) internal view returns (address) { return _ds.resolver.resolveResolverProxyCall(_ds.resolverProxyConfigurationId, _ds.version, _selector); } function _supportsInterface( - ResolverProxyStorage storage _ds, + ResolverProxyStorageWrapper.ResolverProxyStorage storage _ds, bytes4 _interfaceId ) internal view returns (bool isSupported_) { isSupported_ = _ds.resolver.resolveSupportsInterface( @@ -165,12 +163,4 @@ abstract contract ResolverProxyUnstructured is AccessControlStorageWrapper, Paus _interfaceId ); } - - function _resolverProxyStorage() internal pure returns (ResolverProxyStorage storage ds) { - bytes32 position = _RESOLVER_PROXY_STORAGE_POSITION; - // solhint-disable-next-line no-inline-assembly - assembly { - ds.slot := position - } - } } diff --git a/packages/ats/contracts/contracts/test/testTimeTravel/facetsTimeTravel/AccessControlFacetTimeTravel.sol b/packages/ats/contracts/contracts/test/testTimeTravel/facetsTimeTravel/accessControl/AccessControlFacetTimeTravel.sol similarity index 65% rename from packages/ats/contracts/contracts/test/testTimeTravel/facetsTimeTravel/AccessControlFacetTimeTravel.sol rename to packages/ats/contracts/contracts/test/testTimeTravel/facetsTimeTravel/accessControl/AccessControlFacetTimeTravel.sol index 9cd73f489..b67c678dd 100644 --- a/packages/ats/contracts/contracts/test/testTimeTravel/facetsTimeTravel/AccessControlFacetTimeTravel.sol +++ b/packages/ats/contracts/contracts/test/testTimeTravel/facetsTimeTravel/accessControl/AccessControlFacetTimeTravel.sol @@ -1,9 +1,9 @@ // SPDX-License-Identifier: Apache-2.0 pragma solidity >=0.8.0 <0.9.0; -import { AccessControlFacet } from "../../../layer_1/accessControl/AccessControlFacet.sol"; -import { TimeTravelStorageWrapper } from "../timeTravel/TimeTravelStorageWrapper.sol"; -import { LocalContext } from "../../../layer_0/context/LocalContext.sol"; +import { AccessControlFacet } from "../../../../layer_1/accessControl/standard/AccessControlFacet.sol"; +import { TimeTravelStorageWrapper } from "../../timeTravel/TimeTravelStorageWrapper.sol"; +import { LocalContext } from "../../../../layer_0/context/LocalContext.sol"; contract AccessControlFacetTimeTravel is AccessControlFacet, TimeTravelStorageWrapper { function _blockTimestamp() internal view override(LocalContext, TimeTravelStorageWrapper) returns (uint256) { diff --git a/packages/ats/contracts/contracts/test/testTimeTravel/facetsTimeTravel/accessControl/AccessControlFixedRateFacetTimeTravel.sol b/packages/ats/contracts/contracts/test/testTimeTravel/facetsTimeTravel/accessControl/AccessControlFixedRateFacetTimeTravel.sol new file mode 100644 index 000000000..57c5731d6 --- /dev/null +++ b/packages/ats/contracts/contracts/test/testTimeTravel/facetsTimeTravel/accessControl/AccessControlFixedRateFacetTimeTravel.sol @@ -0,0 +1,18 @@ +// SPDX-License-Identifier: Apache-2.0 +pragma solidity >=0.8.0 <0.9.0; + +import { + AccessControlFixedRateFacet +} from "../../../../layer_1/accessControl/fixedRate/AccessControlFixedRateFacet.sol"; +import { TimeTravelStorageWrapper } from "../../timeTravel/TimeTravelStorageWrapper.sol"; +import { LocalContext } from "../../../../layer_0/context/LocalContext.sol"; + +contract AccessControlFixedRateFacetTimeTravel is AccessControlFixedRateFacet, TimeTravelStorageWrapper { + function _blockTimestamp() internal view override(LocalContext, TimeTravelStorageWrapper) returns (uint256) { + return TimeTravelStorageWrapper._blockTimestamp(); + } + + function _blockNumber() internal view override(LocalContext, TimeTravelStorageWrapper) returns (uint256) { + return TimeTravelStorageWrapper._blockNumber(); + } +} diff --git a/packages/ats/contracts/contracts/test/testTimeTravel/facetsTimeTravel/accessControl/AccessControlKpiLinkedRateFacetTimeTravel.sol b/packages/ats/contracts/contracts/test/testTimeTravel/facetsTimeTravel/accessControl/AccessControlKpiLinkedRateFacetTimeTravel.sol new file mode 100644 index 000000000..3b61dc937 --- /dev/null +++ b/packages/ats/contracts/contracts/test/testTimeTravel/facetsTimeTravel/accessControl/AccessControlKpiLinkedRateFacetTimeTravel.sol @@ -0,0 +1,18 @@ +// SPDX-License-Identifier: Apache-2.0 +pragma solidity >=0.8.0 <0.9.0; + +import { + AccessControlKpiLinkedRateFacet +} from "../../../../layer_1/accessControl/kpiLinkedRate/AccessControlKpiLinkedRateFacet.sol"; +import { TimeTravelStorageWrapper } from "../../timeTravel/TimeTravelStorageWrapper.sol"; +import { LocalContext } from "../../../../layer_0/context/LocalContext.sol"; + +contract AccessControlKpiLinkedRateFacetTimeTravel is AccessControlKpiLinkedRateFacet, TimeTravelStorageWrapper { + function _blockTimestamp() internal view override(LocalContext, TimeTravelStorageWrapper) returns (uint256) { + return TimeTravelStorageWrapper._blockTimestamp(); + } + + function _blockNumber() internal view override(LocalContext, TimeTravelStorageWrapper) returns (uint256) { + return TimeTravelStorageWrapper._blockNumber(); + } +} diff --git a/packages/ats/contracts/contracts/test/testTimeTravel/facetsTimeTravel/accessControl/AccessControlSustainabilityPerformanceTargetRateFacetTimeTravel.sol b/packages/ats/contracts/contracts/test/testTimeTravel/facetsTimeTravel/accessControl/AccessControlSustainabilityPerformanceTargetRateFacetTimeTravel.sol new file mode 100644 index 000000000..cdaaa71f5 --- /dev/null +++ b/packages/ats/contracts/contracts/test/testTimeTravel/facetsTimeTravel/accessControl/AccessControlSustainabilityPerformanceTargetRateFacetTimeTravel.sol @@ -0,0 +1,21 @@ +// SPDX-License-Identifier: Apache-2.0 +pragma solidity >=0.8.0 <0.9.0; + +import { + AccessControlSustainabilityPerformanceTargetRateFacet +} from "../../../../layer_1/accessControl/sustainabilityPerformanceTargetRate/AccessControlSustainabilityPerformanceTargetRateFacet.sol"; +import { TimeTravelStorageWrapper } from "../../timeTravel/TimeTravelStorageWrapper.sol"; +import { LocalContext } from "../../../../layer_0/context/LocalContext.sol"; + +contract AccessControlSustainabilityPerformanceTargetRateFacetTimeTravel is + AccessControlSustainabilityPerformanceTargetRateFacet, + TimeTravelStorageWrapper +{ + function _blockTimestamp() internal view override(LocalContext, TimeTravelStorageWrapper) returns (uint256) { + return TimeTravelStorageWrapper._blockTimestamp(); + } + + function _blockNumber() internal view override(LocalContext, TimeTravelStorageWrapper) returns (uint256) { + return TimeTravelStorageWrapper._blockNumber(); + } +} diff --git a/packages/ats/contracts/contracts/test/testTimeTravel/facetsTimeTravel/AdjustBalancesFacetTimeTravel.sol b/packages/ats/contracts/contracts/test/testTimeTravel/facetsTimeTravel/adjustBalances/AdjustBalancesFacetTimeTravel.sol similarity index 65% rename from packages/ats/contracts/contracts/test/testTimeTravel/facetsTimeTravel/AdjustBalancesFacetTimeTravel.sol rename to packages/ats/contracts/contracts/test/testTimeTravel/facetsTimeTravel/adjustBalances/AdjustBalancesFacetTimeTravel.sol index 3b4d3e977..883967c94 100644 --- a/packages/ats/contracts/contracts/test/testTimeTravel/facetsTimeTravel/AdjustBalancesFacetTimeTravel.sol +++ b/packages/ats/contracts/contracts/test/testTimeTravel/facetsTimeTravel/adjustBalances/AdjustBalancesFacetTimeTravel.sol @@ -1,8 +1,8 @@ // SPDX-License-Identifier: Apache-2.0 pragma solidity >=0.8.0 <0.9.0; -import { AdjustBalancesFacet } from "../../../layer_2/adjustBalances/AdjustBalancesFacet.sol"; -import { TimeTravelStorageWrapper } from "../timeTravel/TimeTravelStorageWrapper.sol"; -import { LocalContext } from "../../../layer_0/context/LocalContext.sol"; +import { AdjustBalancesFacet } from "../../../../layer_2/adjustBalances/standard/AdjustBalancesFacet.sol"; +import { TimeTravelStorageWrapper } from "../../timeTravel/TimeTravelStorageWrapper.sol"; +import { LocalContext } from "../../../../layer_0/context/LocalContext.sol"; contract AdjustBalancesFacetTimeTravel is AdjustBalancesFacet, TimeTravelStorageWrapper { function _blockTimestamp() internal view override(LocalContext, TimeTravelStorageWrapper) returns (uint256) { diff --git a/packages/ats/contracts/contracts/test/testTimeTravel/facetsTimeTravel/adjustBalances/AdjustBalancesFixedRateFacetTimeTravel.sol b/packages/ats/contracts/contracts/test/testTimeTravel/facetsTimeTravel/adjustBalances/AdjustBalancesFixedRateFacetTimeTravel.sol new file mode 100644 index 000000000..0c1f49939 --- /dev/null +++ b/packages/ats/contracts/contracts/test/testTimeTravel/facetsTimeTravel/adjustBalances/AdjustBalancesFixedRateFacetTimeTravel.sol @@ -0,0 +1,16 @@ +// SPDX-License-Identifier: Apache-2.0 +pragma solidity >=0.8.0 <0.9.0; +import { + AdjustBalancesFixedRateFacet +} from "../../../../layer_2/adjustBalances/fixedRate/AdjustBalancesFixedRateFacet.sol"; +import { TimeTravelStorageWrapper } from "../../timeTravel/TimeTravelStorageWrapper.sol"; +import { LocalContext } from "../../../../layer_0/context/LocalContext.sol"; + +contract AdjustBalancesFixedRateFacetTimeTravel is AdjustBalancesFixedRateFacet, TimeTravelStorageWrapper { + function _blockTimestamp() internal view override(LocalContext, TimeTravelStorageWrapper) returns (uint256) { + return TimeTravelStorageWrapper._blockTimestamp(); + } + function _blockNumber() internal view override(LocalContext, TimeTravelStorageWrapper) returns (uint256) { + return TimeTravelStorageWrapper._blockNumber(); + } +} diff --git a/packages/ats/contracts/contracts/test/testTimeTravel/facetsTimeTravel/adjustBalances/AdjustBalancesKpiLinkedRateFacetTimeTravel.sol b/packages/ats/contracts/contracts/test/testTimeTravel/facetsTimeTravel/adjustBalances/AdjustBalancesKpiLinkedRateFacetTimeTravel.sol new file mode 100644 index 000000000..c4fcde7c4 --- /dev/null +++ b/packages/ats/contracts/contracts/test/testTimeTravel/facetsTimeTravel/adjustBalances/AdjustBalancesKpiLinkedRateFacetTimeTravel.sol @@ -0,0 +1,16 @@ +// SPDX-License-Identifier: Apache-2.0 +pragma solidity >=0.8.0 <0.9.0; +import { + AdjustBalancesKpiLinkedRateFacet +} from "../../../../layer_2/adjustBalances/kpiLinkedRate/AdjustBalancesKpiLinkedRateFacet.sol"; +import { TimeTravelStorageWrapper } from "../../timeTravel/TimeTravelStorageWrapper.sol"; +import { LocalContext } from "../../../../layer_0/context/LocalContext.sol"; + +contract AdjustBalancesKpiLinkedRateFacetTimeTravel is AdjustBalancesKpiLinkedRateFacet, TimeTravelStorageWrapper { + function _blockTimestamp() internal view override(LocalContext, TimeTravelStorageWrapper) returns (uint256) { + return TimeTravelStorageWrapper._blockTimestamp(); + } + function _blockNumber() internal view override(LocalContext, TimeTravelStorageWrapper) returns (uint256) { + return TimeTravelStorageWrapper._blockNumber(); + } +} diff --git a/packages/ats/contracts/contracts/test/testTimeTravel/facetsTimeTravel/adjustBalances/AdjustBalancesSustainabilityPerformanceTargetRateFacetTimeTravel.sol b/packages/ats/contracts/contracts/test/testTimeTravel/facetsTimeTravel/adjustBalances/AdjustBalancesSustainabilityPerformanceTargetRateFacetTimeTravel.sol new file mode 100644 index 000000000..03dde34b3 --- /dev/null +++ b/packages/ats/contracts/contracts/test/testTimeTravel/facetsTimeTravel/adjustBalances/AdjustBalancesSustainabilityPerformanceTargetRateFacetTimeTravel.sol @@ -0,0 +1,19 @@ +// SPDX-License-Identifier: Apache-2.0 +pragma solidity >=0.8.0 <0.9.0; +import { + AdjustBalancesSustainabilityPerformanceTargetRateFacet +} from "../../../../layer_2/adjustBalances/sustainabilityPerformanceTargetRate/AdjustBalancesSustainabilityPerformanceTargetRateFacet.sol"; +import { TimeTravelStorageWrapper } from "../../timeTravel/TimeTravelStorageWrapper.sol"; +import { LocalContext } from "../../../../layer_0/context/LocalContext.sol"; + +contract AdjustBalancesSustainabilityPerformanceTargetRateFacetTimeTravel is + AdjustBalancesSustainabilityPerformanceTargetRateFacet, + TimeTravelStorageWrapper +{ + function _blockTimestamp() internal view override(LocalContext, TimeTravelStorageWrapper) returns (uint256) { + return TimeTravelStorageWrapper._blockTimestamp(); + } + function _blockNumber() internal view override(LocalContext, TimeTravelStorageWrapper) returns (uint256) { + return TimeTravelStorageWrapper._blockNumber(); + } +} diff --git a/packages/ats/contracts/contracts/test/testTimeTravel/facetsTimeTravel/BondUSAFacetTimeTravel.sol b/packages/ats/contracts/contracts/test/testTimeTravel/facetsTimeTravel/bondUSA/BondUSAFacetTimeTravel.sol similarity index 66% rename from packages/ats/contracts/contracts/test/testTimeTravel/facetsTimeTravel/BondUSAFacetTimeTravel.sol rename to packages/ats/contracts/contracts/test/testTimeTravel/facetsTimeTravel/bondUSA/BondUSAFacetTimeTravel.sol index 3ebc6667c..0f95fdb30 100644 --- a/packages/ats/contracts/contracts/test/testTimeTravel/facetsTimeTravel/BondUSAFacetTimeTravel.sol +++ b/packages/ats/contracts/contracts/test/testTimeTravel/facetsTimeTravel/bondUSA/BondUSAFacetTimeTravel.sol @@ -1,9 +1,9 @@ // SPDX-License-Identifier: Apache-2.0 pragma solidity >=0.8.0 <0.9.0; -import { BondUSAFacet } from "../../../layer_3/bondUSA/BondUSAFacet.sol"; -import { TimeTravelStorageWrapper } from "../timeTravel/TimeTravelStorageWrapper.sol"; -import { LocalContext } from "../../../layer_0/context/LocalContext.sol"; +import { BondUSAFacet } from "contracts/layer_3/bondUSA/variableRate/BondUSAFacet.sol"; +import { TimeTravelStorageWrapper } from "../../timeTravel/TimeTravelStorageWrapper.sol"; +import { LocalContext } from "../../../../layer_0/context/LocalContext.sol"; contract BondUSAFacetTimeTravel is BondUSAFacet, TimeTravelStorageWrapper { function _blockTimestamp() internal view override(LocalContext, TimeTravelStorageWrapper) returns (uint256) { diff --git a/packages/ats/contracts/contracts/test/testTimeTravel/facetsTimeTravel/bondUSA/BondUSAFixedRateFacetTimeTravel.sol b/packages/ats/contracts/contracts/test/testTimeTravel/facetsTimeTravel/bondUSA/BondUSAFixedRateFacetTimeTravel.sol new file mode 100644 index 000000000..4ff587475 --- /dev/null +++ b/packages/ats/contracts/contracts/test/testTimeTravel/facetsTimeTravel/bondUSA/BondUSAFixedRateFacetTimeTravel.sol @@ -0,0 +1,16 @@ +// SPDX-License-Identifier: Apache-2.0 +pragma solidity >=0.8.0 <0.9.0; + +import { BondUSAFixedRateFacet } from "../../../../layer_3/bondUSA/fixedRate/BondUSAFixedRateFacet.sol"; +import { TimeTravelStorageWrapper } from "../../timeTravel/TimeTravelStorageWrapper.sol"; +import { LocalContext } from "../../../../layer_0/context/LocalContext.sol"; + +contract BondUSAFixedRateFacetTimeTravel is BondUSAFixedRateFacet, TimeTravelStorageWrapper { + function _blockTimestamp() internal view override(LocalContext, TimeTravelStorageWrapper) returns (uint256) { + return TimeTravelStorageWrapper._blockTimestamp(); + } + + function _blockNumber() internal view override(LocalContext, TimeTravelStorageWrapper) returns (uint256) { + return TimeTravelStorageWrapper._blockNumber(); + } +} diff --git a/packages/ats/contracts/contracts/test/testTimeTravel/facetsTimeTravel/bondUSA/BondUSAKpiLinkedRateFacetTimeTravel.sol b/packages/ats/contracts/contracts/test/testTimeTravel/facetsTimeTravel/bondUSA/BondUSAKpiLinkedRateFacetTimeTravel.sol new file mode 100644 index 000000000..fbcc61809 --- /dev/null +++ b/packages/ats/contracts/contracts/test/testTimeTravel/facetsTimeTravel/bondUSA/BondUSAKpiLinkedRateFacetTimeTravel.sol @@ -0,0 +1,16 @@ +// SPDX-License-Identifier: Apache-2.0 +pragma solidity >=0.8.0 <0.9.0; + +import { BondUSAKpiLinkedRateFacet } from "../../../../layer_3/bondUSA/kpiLinkedRate/BondUSAKpiLinkedRateFacet.sol"; +import { TimeTravelStorageWrapper } from "../../timeTravel/TimeTravelStorageWrapper.sol"; +import { LocalContext } from "../../../../layer_0/context/LocalContext.sol"; + +contract BondUSAKpiLinkedRateFacetTimeTravel is BondUSAKpiLinkedRateFacet, TimeTravelStorageWrapper { + function _blockTimestamp() internal view override(LocalContext, TimeTravelStorageWrapper) returns (uint256) { + return TimeTravelStorageWrapper._blockTimestamp(); + } + + function _blockNumber() internal view override(LocalContext, TimeTravelStorageWrapper) returns (uint256) { + return TimeTravelStorageWrapper._blockNumber(); + } +} diff --git a/packages/ats/contracts/contracts/test/testTimeTravel/facetsTimeTravel/bondUSA/BondUSASustainabilityPerformanceTargetRateFacetTimeTravel.sol b/packages/ats/contracts/contracts/test/testTimeTravel/facetsTimeTravel/bondUSA/BondUSASustainabilityPerformanceTargetRateFacetTimeTravel.sol new file mode 100644 index 000000000..620c00723 --- /dev/null +++ b/packages/ats/contracts/contracts/test/testTimeTravel/facetsTimeTravel/bondUSA/BondUSASustainabilityPerformanceTargetRateFacetTimeTravel.sol @@ -0,0 +1,21 @@ +// SPDX-License-Identifier: Apache-2.0 +pragma solidity >=0.8.0 <0.9.0; + +import { + BondUSASustainabilityPerformanceTargetRateFacet +} from "contracts/layer_3/bondUSA/sustainabilityPerformanceTargetRate/BondUSASustainabilityPerformanceTargetRateFacet.sol"; +import { TimeTravelStorageWrapper } from "../../timeTravel/TimeTravelStorageWrapper.sol"; +import { LocalContext } from "../../../../layer_0/context/LocalContext.sol"; + +contract BondUSASustainabilityPerformanceTargetRateFacetTimeTravel is + BondUSASustainabilityPerformanceTargetRateFacet, + TimeTravelStorageWrapper +{ + function _blockTimestamp() internal view override(LocalContext, TimeTravelStorageWrapper) returns (uint256) { + return TimeTravelStorageWrapper._blockTimestamp(); + } + + function _blockNumber() internal view override(LocalContext, TimeTravelStorageWrapper) returns (uint256) { + return TimeTravelStorageWrapper._blockNumber(); + } +} diff --git a/packages/ats/contracts/contracts/test/testTimeTravel/facetsTimeTravel/BondUSAReadFacetTimeTravel.sol b/packages/ats/contracts/contracts/test/testTimeTravel/facetsTimeTravel/bondUSARead/BondUSAReadFacetTimeTravel.sol similarity index 65% rename from packages/ats/contracts/contracts/test/testTimeTravel/facetsTimeTravel/BondUSAReadFacetTimeTravel.sol rename to packages/ats/contracts/contracts/test/testTimeTravel/facetsTimeTravel/bondUSARead/BondUSAReadFacetTimeTravel.sol index 652f18e4e..da6e6ede8 100644 --- a/packages/ats/contracts/contracts/test/testTimeTravel/facetsTimeTravel/BondUSAReadFacetTimeTravel.sol +++ b/packages/ats/contracts/contracts/test/testTimeTravel/facetsTimeTravel/bondUSARead/BondUSAReadFacetTimeTravel.sol @@ -1,9 +1,9 @@ // SPDX-License-Identifier: Apache-2.0 pragma solidity >=0.8.0 <0.9.0; -import { BondUSAReadFacet } from "../../../layer_3/bondUSA/BondUSAReadFacet.sol"; -import { TimeTravelStorageWrapper } from "../timeTravel/TimeTravelStorageWrapper.sol"; -import { LocalContext } from "../../../layer_0/context/LocalContext.sol"; +import { BondUSAReadFacet } from "../../../../layer_3/bondUSA/variableRate/BondUSAReadFacet.sol"; +import { TimeTravelStorageWrapper } from "../../timeTravel/TimeTravelStorageWrapper.sol"; +import { LocalContext } from "../../../../layer_0/context/LocalContext.sol"; contract BondUSAReadFacetTimeTravel is BondUSAReadFacet, TimeTravelStorageWrapper { function _blockTimestamp() internal view override(LocalContext, TimeTravelStorageWrapper) returns (uint256) { diff --git a/packages/ats/contracts/contracts/test/testTimeTravel/facetsTimeTravel/bondUSARead/BondUSAReadFixedRateFacetTimeTravel.sol b/packages/ats/contracts/contracts/test/testTimeTravel/facetsTimeTravel/bondUSARead/BondUSAReadFixedRateFacetTimeTravel.sol new file mode 100644 index 000000000..146495713 --- /dev/null +++ b/packages/ats/contracts/contracts/test/testTimeTravel/facetsTimeTravel/bondUSARead/BondUSAReadFixedRateFacetTimeTravel.sol @@ -0,0 +1,16 @@ +// SPDX-License-Identifier: Apache-2.0 +pragma solidity >=0.8.0 <0.9.0; + +import { BondUSAReadFixedRateFacet } from "../../../../layer_3/bondUSA/fixedRate/BondUSAReadFixedRateFacet.sol"; +import { TimeTravelStorageWrapper } from "../../timeTravel/TimeTravelStorageWrapper.sol"; +import { LocalContext } from "../../../../layer_0/context/LocalContext.sol"; + +contract BondUSAReadFixedRateFacetTimeTravel is BondUSAReadFixedRateFacet, TimeTravelStorageWrapper { + function _blockTimestamp() internal view override(LocalContext, TimeTravelStorageWrapper) returns (uint256) { + return TimeTravelStorageWrapper._blockTimestamp(); + } + + function _blockNumber() internal view override(LocalContext, TimeTravelStorageWrapper) returns (uint256) { + return TimeTravelStorageWrapper._blockNumber(); + } +} diff --git a/packages/ats/contracts/contracts/test/testTimeTravel/facetsTimeTravel/bondUSARead/BondUSAReadKpiLinkedRateFacetTimeTravel.sol b/packages/ats/contracts/contracts/test/testTimeTravel/facetsTimeTravel/bondUSARead/BondUSAReadKpiLinkedRateFacetTimeTravel.sol new file mode 100644 index 000000000..6c6498703 --- /dev/null +++ b/packages/ats/contracts/contracts/test/testTimeTravel/facetsTimeTravel/bondUSARead/BondUSAReadKpiLinkedRateFacetTimeTravel.sol @@ -0,0 +1,18 @@ +// SPDX-License-Identifier: Apache-2.0 +pragma solidity >=0.8.0 <0.9.0; + +import { + BondUSAReadKpiLinkedRateFacet +} from "../../../../layer_3/bondUSA/kpiLinkedRate/BondUSAReadKpiLinkedRateFacet.sol"; +import { TimeTravelStorageWrapper } from "../../timeTravel/TimeTravelStorageWrapper.sol"; +import { LocalContext } from "../../../../layer_0/context/LocalContext.sol"; + +contract BondUSAReadKpiLinkedRateFacetTimeTravel is BondUSAReadKpiLinkedRateFacet, TimeTravelStorageWrapper { + function _blockTimestamp() internal view override(LocalContext, TimeTravelStorageWrapper) returns (uint256) { + return TimeTravelStorageWrapper._blockTimestamp(); + } + + function _blockNumber() internal view override(LocalContext, TimeTravelStorageWrapper) returns (uint256) { + return TimeTravelStorageWrapper._blockNumber(); + } +} diff --git a/packages/ats/contracts/contracts/test/testTimeTravel/facetsTimeTravel/bondUSARead/BondUSAReadSustainabilityPerformanceTargetRateFacetTimeTravel.sol b/packages/ats/contracts/contracts/test/testTimeTravel/facetsTimeTravel/bondUSARead/BondUSAReadSustainabilityPerformanceTargetRateFacetTimeTravel.sol new file mode 100644 index 000000000..3e08478e3 --- /dev/null +++ b/packages/ats/contracts/contracts/test/testTimeTravel/facetsTimeTravel/bondUSARead/BondUSAReadSustainabilityPerformanceTargetRateFacetTimeTravel.sol @@ -0,0 +1,21 @@ +// SPDX-License-Identifier: Apache-2.0 +pragma solidity >=0.8.0 <0.9.0; + +import { + BondUSAReadSustainabilityPerformanceTargetRateFacet +} from "contracts/layer_3/bondUSA/sustainabilityPerformanceTargetRate/BondUSAReadSustainabilityPerformanceTargetRateFacet.sol"; +import { TimeTravelStorageWrapper } from "../../timeTravel/TimeTravelStorageWrapper.sol"; +import { LocalContext } from "../../../../layer_0/context/LocalContext.sol"; + +contract BondUSAReadSustainabilityPerformanceTargetRateFacetTimeTravel is + BondUSAReadSustainabilityPerformanceTargetRateFacet, + TimeTravelStorageWrapper +{ + function _blockTimestamp() internal view override(LocalContext, TimeTravelStorageWrapper) returns (uint256) { + return TimeTravelStorageWrapper._blockTimestamp(); + } + + function _blockNumber() internal view override(LocalContext, TimeTravelStorageWrapper) returns (uint256) { + return TimeTravelStorageWrapper._blockNumber(); + } +} diff --git a/packages/ats/contracts/contracts/test/testTimeTravel/facetsTimeTravel/CapFacetTimeTravel.sol b/packages/ats/contracts/contracts/test/testTimeTravel/facetsTimeTravel/cap/CapFacetTimeTravel.sol similarity index 67% rename from packages/ats/contracts/contracts/test/testTimeTravel/facetsTimeTravel/CapFacetTimeTravel.sol rename to packages/ats/contracts/contracts/test/testTimeTravel/facetsTimeTravel/cap/CapFacetTimeTravel.sol index bbd9fc89b..d2a1c2664 100644 --- a/packages/ats/contracts/contracts/test/testTimeTravel/facetsTimeTravel/CapFacetTimeTravel.sol +++ b/packages/ats/contracts/contracts/test/testTimeTravel/facetsTimeTravel/cap/CapFacetTimeTravel.sol @@ -1,9 +1,9 @@ // SPDX-License-Identifier: Apache-2.0 pragma solidity >=0.8.0 <0.9.0; -import { CapFacet } from "../../../layer_1/cap/CapFacet.sol"; -import { TimeTravelStorageWrapper } from "../timeTravel/TimeTravelStorageWrapper.sol"; -import { LocalContext } from "../../../layer_0/context/LocalContext.sol"; +import { CapFacet } from "../../../../layer_1/cap/standard/CapFacet.sol"; +import { TimeTravelStorageWrapper } from "../../timeTravel/TimeTravelStorageWrapper.sol"; +import { LocalContext } from "../../../../layer_0/context/LocalContext.sol"; contract CapFacetTimeTravel is CapFacet, TimeTravelStorageWrapper { function _blockTimestamp() internal view override(LocalContext, TimeTravelStorageWrapper) returns (uint256) { diff --git a/packages/ats/contracts/contracts/test/testTimeTravel/facetsTimeTravel/cap/CapFixedRateFacetTimeTravel.sol b/packages/ats/contracts/contracts/test/testTimeTravel/facetsTimeTravel/cap/CapFixedRateFacetTimeTravel.sol new file mode 100644 index 000000000..0ca633490 --- /dev/null +++ b/packages/ats/contracts/contracts/test/testTimeTravel/facetsTimeTravel/cap/CapFixedRateFacetTimeTravel.sol @@ -0,0 +1,16 @@ +// SPDX-License-Identifier: Apache-2.0 +pragma solidity >=0.8.0 <0.9.0; + +import { CapFixedRateFacet } from "../../../../layer_1/cap/fixedRate/CapFixedRateFacet.sol"; +import { TimeTravelStorageWrapper } from "../../timeTravel/TimeTravelStorageWrapper.sol"; +import { LocalContext } from "../../../../layer_0/context/LocalContext.sol"; + +contract CapFixedRateFacetTimeTravel is CapFixedRateFacet, TimeTravelStorageWrapper { + function _blockTimestamp() internal view override(LocalContext, TimeTravelStorageWrapper) returns (uint256) { + return TimeTravelStorageWrapper._blockTimestamp(); + } + + function _blockNumber() internal view override(LocalContext, TimeTravelStorageWrapper) returns (uint256) { + return TimeTravelStorageWrapper._blockNumber(); + } +} diff --git a/packages/ats/contracts/contracts/test/testTimeTravel/facetsTimeTravel/cap/CapKpiLinkedRateFacetTimeTravel.sol b/packages/ats/contracts/contracts/test/testTimeTravel/facetsTimeTravel/cap/CapKpiLinkedRateFacetTimeTravel.sol new file mode 100644 index 000000000..1cd8fc456 --- /dev/null +++ b/packages/ats/contracts/contracts/test/testTimeTravel/facetsTimeTravel/cap/CapKpiLinkedRateFacetTimeTravel.sol @@ -0,0 +1,16 @@ +// SPDX-License-Identifier: Apache-2.0 +pragma solidity >=0.8.0 <0.9.0; + +import { CapKpiLinkedRateFacet } from "../../../../layer_1/cap/kpiLinkedRate/CapKpiLinkedRateFacet.sol"; +import { TimeTravelStorageWrapper } from "../../timeTravel/TimeTravelStorageWrapper.sol"; +import { LocalContext } from "../../../../layer_0/context/LocalContext.sol"; + +contract CapKpiLinkedRateFacetTimeTravel is CapKpiLinkedRateFacet, TimeTravelStorageWrapper { + function _blockTimestamp() internal view override(LocalContext, TimeTravelStorageWrapper) returns (uint256) { + return TimeTravelStorageWrapper._blockTimestamp(); + } + + function _blockNumber() internal view override(LocalContext, TimeTravelStorageWrapper) returns (uint256) { + return TimeTravelStorageWrapper._blockNumber(); + } +} diff --git a/packages/ats/contracts/contracts/test/testTimeTravel/facetsTimeTravel/cap/CapSustainabilityPerformanceTargetRateFacetTimeTravel.sol b/packages/ats/contracts/contracts/test/testTimeTravel/facetsTimeTravel/cap/CapSustainabilityPerformanceTargetRateFacetTimeTravel.sol new file mode 100644 index 000000000..751d2db1d --- /dev/null +++ b/packages/ats/contracts/contracts/test/testTimeTravel/facetsTimeTravel/cap/CapSustainabilityPerformanceTargetRateFacetTimeTravel.sol @@ -0,0 +1,21 @@ +// SPDX-License-Identifier: Apache-2.0 +pragma solidity >=0.8.0 <0.9.0; + +import { + CapSustainabilityPerformanceTargetRateFacet +} from "../../../../layer_1/cap/sustainabilityPerformanceTargetRate/CapSustainabilityPerformanceTargetRateFacet.sol"; +import { TimeTravelStorageWrapper } from "../../timeTravel/TimeTravelStorageWrapper.sol"; +import { LocalContext } from "../../../../layer_0/context/LocalContext.sol"; + +contract CapSustainabilityPerformanceTargetRateFacetTimeTravel is + CapSustainabilityPerformanceTargetRateFacet, + TimeTravelStorageWrapper +{ + function _blockTimestamp() internal view override(LocalContext, TimeTravelStorageWrapper) returns (uint256) { + return TimeTravelStorageWrapper._blockTimestamp(); + } + + function _blockNumber() internal view override(LocalContext, TimeTravelStorageWrapper) returns (uint256) { + return TimeTravelStorageWrapper._blockNumber(); + } +} diff --git a/packages/ats/contracts/contracts/test/testTimeTravel/facetsTimeTravel/ClearingActionsFacetTimeTravel.sol b/packages/ats/contracts/contracts/test/testTimeTravel/facetsTimeTravel/clearingActions/ClearingActionsFacetTimeTravel.sol similarity index 65% rename from packages/ats/contracts/contracts/test/testTimeTravel/facetsTimeTravel/ClearingActionsFacetTimeTravel.sol rename to packages/ats/contracts/contracts/test/testTimeTravel/facetsTimeTravel/clearingActions/ClearingActionsFacetTimeTravel.sol index 7438296b0..5dea2fd01 100644 --- a/packages/ats/contracts/contracts/test/testTimeTravel/facetsTimeTravel/ClearingActionsFacetTimeTravel.sol +++ b/packages/ats/contracts/contracts/test/testTimeTravel/facetsTimeTravel/clearingActions/ClearingActionsFacetTimeTravel.sol @@ -1,9 +1,9 @@ // SPDX-License-Identifier: Apache-2.0 pragma solidity >=0.8.0 <0.9.0; -import { ClearingActionsFacet } from "../../../layer_1/clearing/ClearingActionsFacet.sol"; -import { TimeTravelStorageWrapper } from "../timeTravel/TimeTravelStorageWrapper.sol"; -import { LocalContext } from "../../../layer_0/context/LocalContext.sol"; +import { ClearingActionsFacet } from "../../../../layer_1/clearing/standard/ClearingActionsFacet.sol"; +import { TimeTravelStorageWrapper } from "../../timeTravel/TimeTravelStorageWrapper.sol"; +import { LocalContext } from "../../../../layer_0/context/LocalContext.sol"; contract ClearingActionsFacetTimeTravel is ClearingActionsFacet, TimeTravelStorageWrapper { function _blockTimestamp() internal view override(LocalContext, TimeTravelStorageWrapper) returns (uint256) { diff --git a/packages/ats/contracts/contracts/test/testTimeTravel/facetsTimeTravel/clearingActions/ClearingActionsFixedRateFacetTimeTravel.sol b/packages/ats/contracts/contracts/test/testTimeTravel/facetsTimeTravel/clearingActions/ClearingActionsFixedRateFacetTimeTravel.sol new file mode 100644 index 000000000..f7a78eeb7 --- /dev/null +++ b/packages/ats/contracts/contracts/test/testTimeTravel/facetsTimeTravel/clearingActions/ClearingActionsFixedRateFacetTimeTravel.sol @@ -0,0 +1,18 @@ +// SPDX-License-Identifier: Apache-2.0 +pragma solidity >=0.8.0 <0.9.0; + +import { + ClearingActionsFixedRateFacet +} from "../../../../layer_1/clearing/fixedRate/ClearingActionsFixedRateFacet.sol"; +import { TimeTravelStorageWrapper } from "../../timeTravel/TimeTravelStorageWrapper.sol"; +import { LocalContext } from "../../../../layer_0/context/LocalContext.sol"; + +contract ClearingActionsFixedRateFacetTimeTravel is ClearingActionsFixedRateFacet, TimeTravelStorageWrapper { + function _blockTimestamp() internal view override(LocalContext, TimeTravelStorageWrapper) returns (uint256) { + return TimeTravelStorageWrapper._blockTimestamp(); + } + + function _blockNumber() internal view override(LocalContext, TimeTravelStorageWrapper) returns (uint256) { + return TimeTravelStorageWrapper._blockNumber(); + } +} diff --git a/packages/ats/contracts/contracts/test/testTimeTravel/facetsTimeTravel/clearingActions/ClearingActionsKpiLinkedRateFacetTimeTravel.sol b/packages/ats/contracts/contracts/test/testTimeTravel/facetsTimeTravel/clearingActions/ClearingActionsKpiLinkedRateFacetTimeTravel.sol new file mode 100644 index 000000000..c032792c7 --- /dev/null +++ b/packages/ats/contracts/contracts/test/testTimeTravel/facetsTimeTravel/clearingActions/ClearingActionsKpiLinkedRateFacetTimeTravel.sol @@ -0,0 +1,18 @@ +// SPDX-License-Identifier: Apache-2.0 +pragma solidity >=0.8.0 <0.9.0; + +import { + ClearingActionsKpiLinkedRateFacet +} from "../../../../layer_1/clearing/kpiLinkedRate/ClearingActionsKpiLinkedRateFacet.sol"; +import { TimeTravelStorageWrapper } from "../../timeTravel/TimeTravelStorageWrapper.sol"; +import { LocalContext } from "../../../../layer_0/context/LocalContext.sol"; + +contract ClearingActionsKpiLinkedRateFacetTimeTravel is ClearingActionsKpiLinkedRateFacet, TimeTravelStorageWrapper { + function _blockTimestamp() internal view override(LocalContext, TimeTravelStorageWrapper) returns (uint256) { + return TimeTravelStorageWrapper._blockTimestamp(); + } + + function _blockNumber() internal view override(LocalContext, TimeTravelStorageWrapper) returns (uint256) { + return TimeTravelStorageWrapper._blockNumber(); + } +} diff --git a/packages/ats/contracts/contracts/test/testTimeTravel/facetsTimeTravel/clearingActions/ClearingActionsSustainabilityPerformanceTargetRateFacetTimeTravel.sol b/packages/ats/contracts/contracts/test/testTimeTravel/facetsTimeTravel/clearingActions/ClearingActionsSustainabilityPerformanceTargetRateFacetTimeTravel.sol new file mode 100644 index 000000000..04781ea9f --- /dev/null +++ b/packages/ats/contracts/contracts/test/testTimeTravel/facetsTimeTravel/clearingActions/ClearingActionsSustainabilityPerformanceTargetRateFacetTimeTravel.sol @@ -0,0 +1,21 @@ +// SPDX-License-Identifier: Apache-2.0 +pragma solidity >=0.8.0 <0.9.0; + +import { + ClearingActionsSustainabilityPerformanceTargetRateFacet +} from "../../../../layer_1/clearing/sustainabilityPerformanceTargetRate/ClearingActionsSustainabilityPerformanceTargetRateFacet.sol"; +import { TimeTravelStorageWrapper } from "../../timeTravel/TimeTravelStorageWrapper.sol"; +import { LocalContext } from "../../../../layer_0/context/LocalContext.sol"; + +contract ClearingActionsSustainabilityPerformanceTargetRateFacetTimeTravel is + ClearingActionsSustainabilityPerformanceTargetRateFacet, + TimeTravelStorageWrapper +{ + function _blockTimestamp() internal view override(LocalContext, TimeTravelStorageWrapper) returns (uint256) { + return TimeTravelStorageWrapper._blockTimestamp(); + } + + function _blockNumber() internal view override(LocalContext, TimeTravelStorageWrapper) returns (uint256) { + return TimeTravelStorageWrapper._blockNumber(); + } +} diff --git a/packages/ats/contracts/contracts/test/testTimeTravel/facetsTimeTravel/ClearingHoldCreationFacetTimeTravel.sol b/packages/ats/contracts/contracts/test/testTimeTravel/facetsTimeTravel/clearingHoldCreation/ClearingHoldCreationFacetTimeTravel.sol similarity index 65% rename from packages/ats/contracts/contracts/test/testTimeTravel/facetsTimeTravel/ClearingHoldCreationFacetTimeTravel.sol rename to packages/ats/contracts/contracts/test/testTimeTravel/facetsTimeTravel/clearingHoldCreation/ClearingHoldCreationFacetTimeTravel.sol index 5f050c8ec..e313d5a8e 100644 --- a/packages/ats/contracts/contracts/test/testTimeTravel/facetsTimeTravel/ClearingHoldCreationFacetTimeTravel.sol +++ b/packages/ats/contracts/contracts/test/testTimeTravel/facetsTimeTravel/clearingHoldCreation/ClearingHoldCreationFacetTimeTravel.sol @@ -1,9 +1,9 @@ // SPDX-License-Identifier: Apache-2.0 pragma solidity >=0.8.0 <0.9.0; -import { ClearingHoldCreationFacet } from "../../../layer_1/clearing/ClearingHoldCreationFacet.sol"; -import { TimeTravelStorageWrapper } from "../timeTravel/TimeTravelStorageWrapper.sol"; -import { LocalContext } from "../../../layer_0/context/LocalContext.sol"; +import { ClearingHoldCreationFacet } from "../../../../layer_1/clearing/standard/ClearingHoldCreationFacet.sol"; +import { TimeTravelStorageWrapper } from "../../timeTravel/TimeTravelStorageWrapper.sol"; +import { LocalContext } from "../../../../layer_0/context/LocalContext.sol"; contract ClearingHoldCreationFacetTimeTravel is ClearingHoldCreationFacet, TimeTravelStorageWrapper { function _blockTimestamp() internal view override(LocalContext, TimeTravelStorageWrapper) returns (uint256) { diff --git a/packages/ats/contracts/contracts/test/testTimeTravel/facetsTimeTravel/clearingHoldCreation/ClearingHoldCreationFixedRateFacetTimeTravel.sol b/packages/ats/contracts/contracts/test/testTimeTravel/facetsTimeTravel/clearingHoldCreation/ClearingHoldCreationFixedRateFacetTimeTravel.sol new file mode 100644 index 000000000..66baedd06 --- /dev/null +++ b/packages/ats/contracts/contracts/test/testTimeTravel/facetsTimeTravel/clearingHoldCreation/ClearingHoldCreationFixedRateFacetTimeTravel.sol @@ -0,0 +1,18 @@ +// SPDX-License-Identifier: Apache-2.0 +pragma solidity >=0.8.0 <0.9.0; + +import { + ClearingHoldCreationFixedRateFacet +} from "../../../../layer_1/clearing/fixedRate/ClearingHoldCreationFixedRateFacet.sol"; +import { TimeTravelStorageWrapper } from "../../timeTravel/TimeTravelStorageWrapper.sol"; +import { LocalContext } from "../../../../layer_0/context/LocalContext.sol"; + +contract ClearingHoldCreationFixedRateFacetTimeTravel is ClearingHoldCreationFixedRateFacet, TimeTravelStorageWrapper { + function _blockTimestamp() internal view override(LocalContext, TimeTravelStorageWrapper) returns (uint256) { + return TimeTravelStorageWrapper._blockTimestamp(); + } + + function _blockNumber() internal view override(LocalContext, TimeTravelStorageWrapper) returns (uint256) { + return TimeTravelStorageWrapper._blockNumber(); + } +} diff --git a/packages/ats/contracts/contracts/test/testTimeTravel/facetsTimeTravel/clearingHoldCreation/ClearingHoldCreationKpiLinkedRateFacetTimeTravel.sol b/packages/ats/contracts/contracts/test/testTimeTravel/facetsTimeTravel/clearingHoldCreation/ClearingHoldCreationKpiLinkedRateFacetTimeTravel.sol new file mode 100644 index 000000000..961681254 --- /dev/null +++ b/packages/ats/contracts/contracts/test/testTimeTravel/facetsTimeTravel/clearingHoldCreation/ClearingHoldCreationKpiLinkedRateFacetTimeTravel.sol @@ -0,0 +1,21 @@ +// SPDX-License-Identifier: Apache-2.0 +pragma solidity >=0.8.0 <0.9.0; + +import { + ClearingHoldCreationKpiLinkedRateFacet +} from "../../../../layer_1/clearing/kpiLinkedRate/ClearingHoldCreationKpiLinkedRateFacet.sol"; +import { TimeTravelStorageWrapper } from "../../timeTravel/TimeTravelStorageWrapper.sol"; +import { LocalContext } from "../../../../layer_0/context/LocalContext.sol"; + +contract ClearingHoldCreationKpiLinkedRateFacetTimeTravel is + ClearingHoldCreationKpiLinkedRateFacet, + TimeTravelStorageWrapper +{ + function _blockTimestamp() internal view override(LocalContext, TimeTravelStorageWrapper) returns (uint256) { + return TimeTravelStorageWrapper._blockTimestamp(); + } + + function _blockNumber() internal view override(LocalContext, TimeTravelStorageWrapper) returns (uint256) { + return TimeTravelStorageWrapper._blockNumber(); + } +} diff --git a/packages/ats/contracts/contracts/test/testTimeTravel/facetsTimeTravel/clearingHoldCreation/ClearingHoldCreationSustainabilityPerformanceTargetRateFacetTimeTravel.sol b/packages/ats/contracts/contracts/test/testTimeTravel/facetsTimeTravel/clearingHoldCreation/ClearingHoldCreationSustainabilityPerformanceTargetRateFacetTimeTravel.sol new file mode 100644 index 000000000..48e701dcd --- /dev/null +++ b/packages/ats/contracts/contracts/test/testTimeTravel/facetsTimeTravel/clearingHoldCreation/ClearingHoldCreationSustainabilityPerformanceTargetRateFacetTimeTravel.sol @@ -0,0 +1,21 @@ +// SPDX-License-Identifier: Apache-2.0 +pragma solidity >=0.8.0 <0.9.0; + +import { + ClearingHoldCreationSustainabilityPerformanceTargetRateFacet +} from "../../../../layer_1/clearing/sustainabilityPerformanceTargetRate/ClearingHoldCreationSustainabilityPerformanceTargetRateFacet.sol"; +import { TimeTravelStorageWrapper } from "../../timeTravel/TimeTravelStorageWrapper.sol"; +import { LocalContext } from "../../../../layer_0/context/LocalContext.sol"; + +contract ClearingHoldCreationSustainabilityPerformanceTargetRateFacetTimeTravel is + ClearingHoldCreationSustainabilityPerformanceTargetRateFacet, + TimeTravelStorageWrapper +{ + function _blockTimestamp() internal view override(LocalContext, TimeTravelStorageWrapper) returns (uint256) { + return TimeTravelStorageWrapper._blockTimestamp(); + } + + function _blockNumber() internal view override(LocalContext, TimeTravelStorageWrapper) returns (uint256) { + return TimeTravelStorageWrapper._blockNumber(); + } +} diff --git a/packages/ats/contracts/contracts/test/testTimeTravel/facetsTimeTravel/ClearingReadFacetTimeTravel.sol b/packages/ats/contracts/contracts/test/testTimeTravel/facetsTimeTravel/clearingRead/ClearingReadFacetTimeTravel.sol similarity index 66% rename from packages/ats/contracts/contracts/test/testTimeTravel/facetsTimeTravel/ClearingReadFacetTimeTravel.sol rename to packages/ats/contracts/contracts/test/testTimeTravel/facetsTimeTravel/clearingRead/ClearingReadFacetTimeTravel.sol index 741415e2c..3db412e24 100644 --- a/packages/ats/contracts/contracts/test/testTimeTravel/facetsTimeTravel/ClearingReadFacetTimeTravel.sol +++ b/packages/ats/contracts/contracts/test/testTimeTravel/facetsTimeTravel/clearingRead/ClearingReadFacetTimeTravel.sol @@ -1,9 +1,9 @@ // SPDX-License-Identifier: Apache-2.0 pragma solidity >=0.8.0 <0.9.0; -import { ClearingReadFacet } from "../../../layer_1/clearing/ClearingReadFacet.sol"; -import { TimeTravelStorageWrapper } from "../timeTravel/TimeTravelStorageWrapper.sol"; -import { LocalContext } from "../../../layer_0/context/LocalContext.sol"; +import { ClearingReadFacet } from "../../../../layer_1/clearing/standard/ClearingReadFacet.sol"; +import { TimeTravelStorageWrapper } from "../../timeTravel/TimeTravelStorageWrapper.sol"; +import { LocalContext } from "../../../../layer_0/context/LocalContext.sol"; contract ClearingReadFacetTimeTravel is ClearingReadFacet, TimeTravelStorageWrapper { function _blockTimestamp() internal view override(LocalContext, TimeTravelStorageWrapper) returns (uint256) { diff --git a/packages/ats/contracts/contracts/test/testTimeTravel/facetsTimeTravel/clearingRead/ClearingReadFixedRateFacetTimeTravel.sol b/packages/ats/contracts/contracts/test/testTimeTravel/facetsTimeTravel/clearingRead/ClearingReadFixedRateFacetTimeTravel.sol new file mode 100644 index 000000000..ba63e247e --- /dev/null +++ b/packages/ats/contracts/contracts/test/testTimeTravel/facetsTimeTravel/clearingRead/ClearingReadFixedRateFacetTimeTravel.sol @@ -0,0 +1,16 @@ +// SPDX-License-Identifier: Apache-2.0 +pragma solidity >=0.8.0 <0.9.0; + +import { ClearingReadFixedRateFacet } from "../../../../layer_1/clearing/fixedRate/ClearingReadFixedRateFacet.sol"; +import { TimeTravelStorageWrapper } from "../../timeTravel/TimeTravelStorageWrapper.sol"; +import { LocalContext } from "../../../../layer_0/context/LocalContext.sol"; + +contract ClearingReadFixedRateFacetTimeTravel is ClearingReadFixedRateFacet, TimeTravelStorageWrapper { + function _blockTimestamp() internal view override(LocalContext, TimeTravelStorageWrapper) returns (uint256) { + return TimeTravelStorageWrapper._blockTimestamp(); + } + + function _blockNumber() internal view override(LocalContext, TimeTravelStorageWrapper) returns (uint256) { + return TimeTravelStorageWrapper._blockNumber(); + } +} diff --git a/packages/ats/contracts/contracts/test/testTimeTravel/facetsTimeTravel/clearingRead/ClearingReadKpiLinkedRateFacetTimeTravel.sol b/packages/ats/contracts/contracts/test/testTimeTravel/facetsTimeTravel/clearingRead/ClearingReadKpiLinkedRateFacetTimeTravel.sol new file mode 100644 index 000000000..433c06b38 --- /dev/null +++ b/packages/ats/contracts/contracts/test/testTimeTravel/facetsTimeTravel/clearingRead/ClearingReadKpiLinkedRateFacetTimeTravel.sol @@ -0,0 +1,18 @@ +// SPDX-License-Identifier: Apache-2.0 +pragma solidity >=0.8.0 <0.9.0; + +import { + ClearingReadKpiLinkedRateFacet +} from "../../../../layer_1/clearing/kpiLinkedRate/ClearingReadKpiLinkedRateFacet.sol"; +import { TimeTravelStorageWrapper } from "../../timeTravel/TimeTravelStorageWrapper.sol"; +import { LocalContext } from "../../../../layer_0/context/LocalContext.sol"; + +contract ClearingReadKpiLinkedRateFacetTimeTravel is ClearingReadKpiLinkedRateFacet, TimeTravelStorageWrapper { + function _blockTimestamp() internal view override(LocalContext, TimeTravelStorageWrapper) returns (uint256) { + return TimeTravelStorageWrapper._blockTimestamp(); + } + + function _blockNumber() internal view override(LocalContext, TimeTravelStorageWrapper) returns (uint256) { + return TimeTravelStorageWrapper._blockNumber(); + } +} diff --git a/packages/ats/contracts/contracts/test/testTimeTravel/facetsTimeTravel/clearingRead/ClearingReadSustainabilityPerformanceTargetRateFacetTimeTravel.sol b/packages/ats/contracts/contracts/test/testTimeTravel/facetsTimeTravel/clearingRead/ClearingReadSustainabilityPerformanceTargetRateFacetTimeTravel.sol new file mode 100644 index 000000000..742c2e369 --- /dev/null +++ b/packages/ats/contracts/contracts/test/testTimeTravel/facetsTimeTravel/clearingRead/ClearingReadSustainabilityPerformanceTargetRateFacetTimeTravel.sol @@ -0,0 +1,21 @@ +// SPDX-License-Identifier: Apache-2.0 +pragma solidity >=0.8.0 <0.9.0; + +import { + ClearingReadSustainabilityPerformanceTargetRateFacet +} from "../../../../layer_1/clearing/sustainabilityPerformanceTargetRate/ClearingReadSustainabilityPerformanceTargetRateFacet.sol"; +import { TimeTravelStorageWrapper } from "../../timeTravel/TimeTravelStorageWrapper.sol"; +import { LocalContext } from "../../../../layer_0/context/LocalContext.sol"; + +contract ClearingReadSustainabilityPerformanceTargetRateFacetTimeTravel is + ClearingReadSustainabilityPerformanceTargetRateFacet, + TimeTravelStorageWrapper +{ + function _blockTimestamp() internal view override(LocalContext, TimeTravelStorageWrapper) returns (uint256) { + return TimeTravelStorageWrapper._blockTimestamp(); + } + + function _blockNumber() internal view override(LocalContext, TimeTravelStorageWrapper) returns (uint256) { + return TimeTravelStorageWrapper._blockNumber(); + } +} diff --git a/packages/ats/contracts/contracts/test/testTimeTravel/facetsTimeTravel/ClearingRedeemFacetTimeTravel.sol b/packages/ats/contracts/contracts/test/testTimeTravel/facetsTimeTravel/clearingRedeem/ClearingRedeemFacetTimeTravel.sol similarity index 65% rename from packages/ats/contracts/contracts/test/testTimeTravel/facetsTimeTravel/ClearingRedeemFacetTimeTravel.sol rename to packages/ats/contracts/contracts/test/testTimeTravel/facetsTimeTravel/clearingRedeem/ClearingRedeemFacetTimeTravel.sol index b98d7fe7e..99b8ad56c 100644 --- a/packages/ats/contracts/contracts/test/testTimeTravel/facetsTimeTravel/ClearingRedeemFacetTimeTravel.sol +++ b/packages/ats/contracts/contracts/test/testTimeTravel/facetsTimeTravel/clearingRedeem/ClearingRedeemFacetTimeTravel.sol @@ -1,9 +1,9 @@ // SPDX-License-Identifier: Apache-2.0 pragma solidity >=0.8.0 <0.9.0; -import { ClearingRedeemFacet } from "../../../layer_1/clearing/ClearingRedeemFacet.sol"; -import { TimeTravelStorageWrapper } from "../timeTravel/TimeTravelStorageWrapper.sol"; -import { LocalContext } from "../../../layer_0/context/LocalContext.sol"; +import { ClearingRedeemFacet } from "../../../../layer_1/clearing/standard/ClearingRedeemFacet.sol"; +import { TimeTravelStorageWrapper } from "../../timeTravel/TimeTravelStorageWrapper.sol"; +import { LocalContext } from "../../../../layer_0/context/LocalContext.sol"; contract ClearingRedeemFacetTimeTravel is ClearingRedeemFacet, TimeTravelStorageWrapper { function _blockTimestamp() internal view override(LocalContext, TimeTravelStorageWrapper) returns (uint256) { diff --git a/packages/ats/contracts/contracts/test/testTimeTravel/facetsTimeTravel/clearingRedeem/ClearingRedeemFixedRateFacetTimeTravel.sol b/packages/ats/contracts/contracts/test/testTimeTravel/facetsTimeTravel/clearingRedeem/ClearingRedeemFixedRateFacetTimeTravel.sol new file mode 100644 index 000000000..b7ebce0f7 --- /dev/null +++ b/packages/ats/contracts/contracts/test/testTimeTravel/facetsTimeTravel/clearingRedeem/ClearingRedeemFixedRateFacetTimeTravel.sol @@ -0,0 +1,16 @@ +// SPDX-License-Identifier: Apache-2.0 +pragma solidity >=0.8.0 <0.9.0; + +import { ClearingRedeemFixedRateFacet } from "../../../../layer_1/clearing/fixedRate/ClearingRedeemFixedRateFacet.sol"; +import { TimeTravelStorageWrapper } from "../../timeTravel/TimeTravelStorageWrapper.sol"; +import { LocalContext } from "../../../../layer_0/context/LocalContext.sol"; + +contract ClearingRedeemFixedRateFacetTimeTravel is ClearingRedeemFixedRateFacet, TimeTravelStorageWrapper { + function _blockTimestamp() internal view override(LocalContext, TimeTravelStorageWrapper) returns (uint256) { + return TimeTravelStorageWrapper._blockTimestamp(); + } + + function _blockNumber() internal view override(LocalContext, TimeTravelStorageWrapper) returns (uint256) { + return TimeTravelStorageWrapper._blockNumber(); + } +} diff --git a/packages/ats/contracts/contracts/test/testTimeTravel/facetsTimeTravel/clearingRedeem/ClearingRedeemKpiLinkedRateFacetTimeTravel.sol b/packages/ats/contracts/contracts/test/testTimeTravel/facetsTimeTravel/clearingRedeem/ClearingRedeemKpiLinkedRateFacetTimeTravel.sol new file mode 100644 index 000000000..074a16543 --- /dev/null +++ b/packages/ats/contracts/contracts/test/testTimeTravel/facetsTimeTravel/clearingRedeem/ClearingRedeemKpiLinkedRateFacetTimeTravel.sol @@ -0,0 +1,18 @@ +// SPDX-License-Identifier: Apache-2.0 +pragma solidity >=0.8.0 <0.9.0; + +import { + ClearingRedeemKpiLinkedRateFacet +} from "../../../../layer_1/clearing/kpiLinkedRate/ClearingRedeemKpiLinkedRateFacet.sol"; +import { TimeTravelStorageWrapper } from "../../timeTravel/TimeTravelStorageWrapper.sol"; +import { LocalContext } from "../../../../layer_0/context/LocalContext.sol"; + +contract ClearingRedeemKpiLinkedRateFacetTimeTravel is ClearingRedeemKpiLinkedRateFacet, TimeTravelStorageWrapper { + function _blockTimestamp() internal view override(LocalContext, TimeTravelStorageWrapper) returns (uint256) { + return TimeTravelStorageWrapper._blockTimestamp(); + } + + function _blockNumber() internal view override(LocalContext, TimeTravelStorageWrapper) returns (uint256) { + return TimeTravelStorageWrapper._blockNumber(); + } +} diff --git a/packages/ats/contracts/contracts/test/testTimeTravel/facetsTimeTravel/clearingRedeem/ClearingRedeemSustainabilityPerformanceTargetRateFacetTimeTravel.sol b/packages/ats/contracts/contracts/test/testTimeTravel/facetsTimeTravel/clearingRedeem/ClearingRedeemSustainabilityPerformanceTargetRateFacetTimeTravel.sol new file mode 100644 index 000000000..b1a950a17 --- /dev/null +++ b/packages/ats/contracts/contracts/test/testTimeTravel/facetsTimeTravel/clearingRedeem/ClearingRedeemSustainabilityPerformanceTargetRateFacetTimeTravel.sol @@ -0,0 +1,21 @@ +// SPDX-License-Identifier: Apache-2.0 +pragma solidity >=0.8.0 <0.9.0; + +import { + ClearingRedeemSustainabilityPerformanceTargetRateFacet +} from "../../../../layer_1/clearing/sustainabilityPerformanceTargetRate/ClearingRedeemSustainabilityPerformanceTargetRateFacet.sol"; +import { TimeTravelStorageWrapper } from "../../timeTravel/TimeTravelStorageWrapper.sol"; +import { LocalContext } from "../../../../layer_0/context/LocalContext.sol"; + +contract ClearingRedeemSustainabilityPerformanceTargetRateFacetTimeTravel is + ClearingRedeemSustainabilityPerformanceTargetRateFacet, + TimeTravelStorageWrapper +{ + function _blockTimestamp() internal view override(LocalContext, TimeTravelStorageWrapper) returns (uint256) { + return TimeTravelStorageWrapper._blockTimestamp(); + } + + function _blockNumber() internal view override(LocalContext, TimeTravelStorageWrapper) returns (uint256) { + return TimeTravelStorageWrapper._blockNumber(); + } +} diff --git a/packages/ats/contracts/contracts/test/testTimeTravel/facetsTimeTravel/ClearingTransferFacetTimeTravel.sol b/packages/ats/contracts/contracts/test/testTimeTravel/facetsTimeTravel/clearingTransfer/ClearingTransferFacetTimeTravel.sol similarity index 65% rename from packages/ats/contracts/contracts/test/testTimeTravel/facetsTimeTravel/ClearingTransferFacetTimeTravel.sol rename to packages/ats/contracts/contracts/test/testTimeTravel/facetsTimeTravel/clearingTransfer/ClearingTransferFacetTimeTravel.sol index 8a70562e4..980630802 100644 --- a/packages/ats/contracts/contracts/test/testTimeTravel/facetsTimeTravel/ClearingTransferFacetTimeTravel.sol +++ b/packages/ats/contracts/contracts/test/testTimeTravel/facetsTimeTravel/clearingTransfer/ClearingTransferFacetTimeTravel.sol @@ -1,9 +1,9 @@ // SPDX-License-Identifier: Apache-2.0 pragma solidity >=0.8.0 <0.9.0; -import { ClearingTransferFacet } from "../../../layer_1/clearing/ClearingTransferFacet.sol"; -import { TimeTravelStorageWrapper } from "../timeTravel/TimeTravelStorageWrapper.sol"; -import { LocalContext } from "../../../layer_0/context/LocalContext.sol"; +import { ClearingTransferFacet } from "../../../../layer_1/clearing/standard/ClearingTransferFacet.sol"; +import { TimeTravelStorageWrapper } from "../../timeTravel/TimeTravelStorageWrapper.sol"; +import { LocalContext } from "../../../../layer_0/context/LocalContext.sol"; contract ClearingTransferFacetTimeTravel is ClearingTransferFacet, TimeTravelStorageWrapper { function _blockTimestamp() internal view override(LocalContext, TimeTravelStorageWrapper) returns (uint256) { diff --git a/packages/ats/contracts/contracts/test/testTimeTravel/facetsTimeTravel/clearingTransfer/ClearingTransferFixedRateFacetTimeTravel.sol b/packages/ats/contracts/contracts/test/testTimeTravel/facetsTimeTravel/clearingTransfer/ClearingTransferFixedRateFacetTimeTravel.sol new file mode 100644 index 000000000..067655e9c --- /dev/null +++ b/packages/ats/contracts/contracts/test/testTimeTravel/facetsTimeTravel/clearingTransfer/ClearingTransferFixedRateFacetTimeTravel.sol @@ -0,0 +1,18 @@ +// SPDX-License-Identifier: Apache-2.0 +pragma solidity >=0.8.0 <0.9.0; + +import { + ClearingTransferFixedRateFacet +} from "../../../../layer_1/clearing/fixedRate/ClearingTransferFixedRateFacet.sol"; +import { TimeTravelStorageWrapper } from "../../timeTravel/TimeTravelStorageWrapper.sol"; +import { LocalContext } from "../../../../layer_0/context/LocalContext.sol"; + +contract ClearingTransferFixedRateFacetTimeTravel is ClearingTransferFixedRateFacet, TimeTravelStorageWrapper { + function _blockTimestamp() internal view override(LocalContext, TimeTravelStorageWrapper) returns (uint256) { + return TimeTravelStorageWrapper._blockTimestamp(); + } + + function _blockNumber() internal view override(LocalContext, TimeTravelStorageWrapper) returns (uint256) { + return TimeTravelStorageWrapper._blockNumber(); + } +} diff --git a/packages/ats/contracts/contracts/test/testTimeTravel/facetsTimeTravel/clearingTransfer/ClearingTransferKpiLinkedRateFacetTimeTravel.sol b/packages/ats/contracts/contracts/test/testTimeTravel/facetsTimeTravel/clearingTransfer/ClearingTransferKpiLinkedRateFacetTimeTravel.sol new file mode 100644 index 000000000..36706e0df --- /dev/null +++ b/packages/ats/contracts/contracts/test/testTimeTravel/facetsTimeTravel/clearingTransfer/ClearingTransferKpiLinkedRateFacetTimeTravel.sol @@ -0,0 +1,18 @@ +// SPDX-License-Identifier: Apache-2.0 +pragma solidity >=0.8.0 <0.9.0; + +import { + ClearingTransferKpiLinkedRateFacet +} from "../../../../layer_1/clearing/kpiLinkedRate/ClearingTransferKpiLinkedRateFacet.sol"; +import { TimeTravelStorageWrapper } from "../../timeTravel/TimeTravelStorageWrapper.sol"; +import { LocalContext } from "../../../../layer_0/context/LocalContext.sol"; + +contract ClearingTransferKpiLinkedRateFacetTimeTravel is ClearingTransferKpiLinkedRateFacet, TimeTravelStorageWrapper { + function _blockTimestamp() internal view override(LocalContext, TimeTravelStorageWrapper) returns (uint256) { + return TimeTravelStorageWrapper._blockTimestamp(); + } + + function _blockNumber() internal view override(LocalContext, TimeTravelStorageWrapper) returns (uint256) { + return TimeTravelStorageWrapper._blockNumber(); + } +} diff --git a/packages/ats/contracts/contracts/test/testTimeTravel/facetsTimeTravel/clearingTransfer/ClearingTransferSustainabilityPerformanceTargetRateFacetTimeTravel.sol b/packages/ats/contracts/contracts/test/testTimeTravel/facetsTimeTravel/clearingTransfer/ClearingTransferSustainabilityPerformanceTargetRateFacetTimeTravel.sol new file mode 100644 index 000000000..ed865bbca --- /dev/null +++ b/packages/ats/contracts/contracts/test/testTimeTravel/facetsTimeTravel/clearingTransfer/ClearingTransferSustainabilityPerformanceTargetRateFacetTimeTravel.sol @@ -0,0 +1,21 @@ +// SPDX-License-Identifier: Apache-2.0 +pragma solidity >=0.8.0 <0.9.0; + +import { + ClearingTransferSustainabilityPerformanceTargetRateFacet +} from "../../../../layer_1/clearing/sustainabilityPerformanceTargetRate/ClearingTransferSustainabilityPerformanceTargetRateFacet.sol"; +import { TimeTravelStorageWrapper } from "../../timeTravel/TimeTravelStorageWrapper.sol"; +import { LocalContext } from "../../../../layer_0/context/LocalContext.sol"; + +contract ClearingTransferSustainabilityPerformanceTargetRateFacetTimeTravel is + ClearingTransferSustainabilityPerformanceTargetRateFacet, + TimeTravelStorageWrapper +{ + function _blockTimestamp() internal view override(LocalContext, TimeTravelStorageWrapper) returns (uint256) { + return TimeTravelStorageWrapper._blockTimestamp(); + } + + function _blockNumber() internal view override(LocalContext, TimeTravelStorageWrapper) returns (uint256) { + return TimeTravelStorageWrapper._blockNumber(); + } +} diff --git a/packages/ats/contracts/contracts/test/testTimeTravel/facetsTimeTravel/ControlListFacetTimeTravelTimeTravel.sol b/packages/ats/contracts/contracts/test/testTimeTravel/facetsTimeTravel/controlList/ControlListFacetTimeTravelTimeTravel.sol similarity index 65% rename from packages/ats/contracts/contracts/test/testTimeTravel/facetsTimeTravel/ControlListFacetTimeTravelTimeTravel.sol rename to packages/ats/contracts/contracts/test/testTimeTravel/facetsTimeTravel/controlList/ControlListFacetTimeTravelTimeTravel.sol index cd5191249..f4a478579 100644 --- a/packages/ats/contracts/contracts/test/testTimeTravel/facetsTimeTravel/ControlListFacetTimeTravelTimeTravel.sol +++ b/packages/ats/contracts/contracts/test/testTimeTravel/facetsTimeTravel/controlList/ControlListFacetTimeTravelTimeTravel.sol @@ -1,9 +1,9 @@ // SPDX-License-Identifier: Apache-2.0 pragma solidity >=0.8.0 <0.9.0; -import { ControlListFacet } from "../../../layer_1/controlList/ControlListFacet.sol"; -import { TimeTravelStorageWrapper } from "../timeTravel/TimeTravelStorageWrapper.sol"; -import { LocalContext } from "../../../layer_0/context/LocalContext.sol"; +import { ControlListFacet } from "../../../../layer_1/controlList/standard/ControlListFacet.sol"; +import { TimeTravelStorageWrapper } from "../../timeTravel/TimeTravelStorageWrapper.sol"; +import { LocalContext } from "../../../../layer_0/context/LocalContext.sol"; contract ControlListFacetTimeTravel is ControlListFacet, TimeTravelStorageWrapper { function _blockTimestamp() internal view override(LocalContext, TimeTravelStorageWrapper) returns (uint256) { diff --git a/packages/ats/contracts/contracts/test/testTimeTravel/facetsTimeTravel/controlList/ControlListFixedRateFacetTimeTravel.sol b/packages/ats/contracts/contracts/test/testTimeTravel/facetsTimeTravel/controlList/ControlListFixedRateFacetTimeTravel.sol new file mode 100644 index 000000000..cbd39b0ac --- /dev/null +++ b/packages/ats/contracts/contracts/test/testTimeTravel/facetsTimeTravel/controlList/ControlListFixedRateFacetTimeTravel.sol @@ -0,0 +1,16 @@ +// SPDX-License-Identifier: Apache-2.0 +pragma solidity >=0.8.0 <0.9.0; + +import { ControlListFixedRateFacet } from "../../../../layer_1/controlList/fixedRate/ControlListFixedRateFacet.sol"; +import { TimeTravelStorageWrapper } from "../../timeTravel/TimeTravelStorageWrapper.sol"; +import { LocalContext } from "../../../../layer_0/context/LocalContext.sol"; + +contract ControlListFixedRateFacetTimeTravel is ControlListFixedRateFacet, TimeTravelStorageWrapper { + function _blockTimestamp() internal view override(LocalContext, TimeTravelStorageWrapper) returns (uint256) { + return TimeTravelStorageWrapper._blockTimestamp(); + } + + function _blockNumber() internal view override(LocalContext, TimeTravelStorageWrapper) returns (uint256) { + return TimeTravelStorageWrapper._blockNumber(); + } +} diff --git a/packages/ats/contracts/contracts/test/testTimeTravel/facetsTimeTravel/controlList/ControlListKpiLinkedRateFacetTimeTravel.sol b/packages/ats/contracts/contracts/test/testTimeTravel/facetsTimeTravel/controlList/ControlListKpiLinkedRateFacetTimeTravel.sol new file mode 100644 index 000000000..8e36a000e --- /dev/null +++ b/packages/ats/contracts/contracts/test/testTimeTravel/facetsTimeTravel/controlList/ControlListKpiLinkedRateFacetTimeTravel.sol @@ -0,0 +1,18 @@ +// SPDX-License-Identifier: Apache-2.0 +pragma solidity >=0.8.0 <0.9.0; + +import { + ControlListKpiLinkedRateFacet +} from "../../../../layer_1/controlList/kpiLinkedRate/ControlListKpiLinkedRateFacet.sol"; +import { TimeTravelStorageWrapper } from "../../timeTravel/TimeTravelStorageWrapper.sol"; +import { LocalContext } from "../../../../layer_0/context/LocalContext.sol"; + +contract ControlListKpiLinkedRateFacetTimeTravel is ControlListKpiLinkedRateFacet, TimeTravelStorageWrapper { + function _blockTimestamp() internal view override(LocalContext, TimeTravelStorageWrapper) returns (uint256) { + return TimeTravelStorageWrapper._blockTimestamp(); + } + + function _blockNumber() internal view override(LocalContext, TimeTravelStorageWrapper) returns (uint256) { + return TimeTravelStorageWrapper._blockNumber(); + } +} diff --git a/packages/ats/contracts/contracts/test/testTimeTravel/facetsTimeTravel/controlList/ControlListSustainabilityPerformanceTargetRateFacetTimeTravel.sol b/packages/ats/contracts/contracts/test/testTimeTravel/facetsTimeTravel/controlList/ControlListSustainabilityPerformanceTargetRateFacetTimeTravel.sol new file mode 100644 index 000000000..2e7a82bea --- /dev/null +++ b/packages/ats/contracts/contracts/test/testTimeTravel/facetsTimeTravel/controlList/ControlListSustainabilityPerformanceTargetRateFacetTimeTravel.sol @@ -0,0 +1,21 @@ +// SPDX-License-Identifier: Apache-2.0 +pragma solidity >=0.8.0 <0.9.0; + +import { + ControlListSustainabilityPerformanceTargetRateFacet +} from "../../../../layer_1/controlList/sustainabilityPerformanceTargetRate/ControlListSustainabilityPerformanceTargetRateFacet.sol"; +import { TimeTravelStorageWrapper } from "../../timeTravel/TimeTravelStorageWrapper.sol"; +import { LocalContext } from "../../../../layer_0/context/LocalContext.sol"; + +contract ControlListSustainabilityPerformanceTargetRateFacetTimeTravel is + ControlListSustainabilityPerformanceTargetRateFacet, + TimeTravelStorageWrapper +{ + function _blockTimestamp() internal view override(LocalContext, TimeTravelStorageWrapper) returns (uint256) { + return TimeTravelStorageWrapper._blockTimestamp(); + } + + function _blockNumber() internal view override(LocalContext, TimeTravelStorageWrapper) returns (uint256) { + return TimeTravelStorageWrapper._blockNumber(); + } +} diff --git a/packages/ats/contracts/contracts/test/testTimeTravel/facetsTimeTravel/CorporateActionsFacetTimeTravel.sol b/packages/ats/contracts/contracts/test/testTimeTravel/facetsTimeTravel/corporateActions/CorporateActionsFacetTimeTravel.sol similarity index 65% rename from packages/ats/contracts/contracts/test/testTimeTravel/facetsTimeTravel/CorporateActionsFacetTimeTravel.sol rename to packages/ats/contracts/contracts/test/testTimeTravel/facetsTimeTravel/corporateActions/CorporateActionsFacetTimeTravel.sol index a9163f004..8c240d4d8 100644 --- a/packages/ats/contracts/contracts/test/testTimeTravel/facetsTimeTravel/CorporateActionsFacetTimeTravel.sol +++ b/packages/ats/contracts/contracts/test/testTimeTravel/facetsTimeTravel/corporateActions/CorporateActionsFacetTimeTravel.sol @@ -1,9 +1,9 @@ // SPDX-License-Identifier: Apache-2.0 pragma solidity >=0.8.0 <0.9.0; -import { CorporateActionsFacet } from "../../../layer_1/corporateActions/CorporateActionsFacet.sol"; -import { TimeTravelStorageWrapper } from "../timeTravel/TimeTravelStorageWrapper.sol"; -import { LocalContext } from "../../../layer_0/context/LocalContext.sol"; +import { CorporateActionsFacet } from "../../../../layer_1/corporateActions/standard/CorporateActionsFacet.sol"; +import { TimeTravelStorageWrapper } from "../../timeTravel/TimeTravelStorageWrapper.sol"; +import { LocalContext } from "../../../../layer_0/context/LocalContext.sol"; contract CorporateActionsFacetTimeTravel is CorporateActionsFacet, TimeTravelStorageWrapper { function _blockTimestamp() internal view override(LocalContext, TimeTravelStorageWrapper) returns (uint256) { diff --git a/packages/ats/contracts/contracts/test/testTimeTravel/facetsTimeTravel/corporateActions/CorporateActionsFixedRateFacetTimeTravel.sol b/packages/ats/contracts/contracts/test/testTimeTravel/facetsTimeTravel/corporateActions/CorporateActionsFixedRateFacetTimeTravel.sol new file mode 100644 index 000000000..362d9f00d --- /dev/null +++ b/packages/ats/contracts/contracts/test/testTimeTravel/facetsTimeTravel/corporateActions/CorporateActionsFixedRateFacetTimeTravel.sol @@ -0,0 +1,18 @@ +// SPDX-License-Identifier: Apache-2.0 +pragma solidity >=0.8.0 <0.9.0; + +import { + CorporateActionsFixedRateFacet +} from "../../../../layer_1/corporateActions/fixedRate/CorporateActionsFixedRateFacet.sol"; +import { TimeTravelStorageWrapper } from "../../timeTravel/TimeTravelStorageWrapper.sol"; +import { LocalContext } from "../../../../layer_0/context/LocalContext.sol"; + +contract CorporateActionsFixedRateFacetTimeTravel is CorporateActionsFixedRateFacet, TimeTravelStorageWrapper { + function _blockTimestamp() internal view override(LocalContext, TimeTravelStorageWrapper) returns (uint256) { + return TimeTravelStorageWrapper._blockTimestamp(); + } + + function _blockNumber() internal view override(LocalContext, TimeTravelStorageWrapper) returns (uint256) { + return TimeTravelStorageWrapper._blockNumber(); + } +} diff --git a/packages/ats/contracts/contracts/test/testTimeTravel/facetsTimeTravel/corporateActions/CorporateActionsKpiLinkedRateFacetTimeTravel.sol b/packages/ats/contracts/contracts/test/testTimeTravel/facetsTimeTravel/corporateActions/CorporateActionsKpiLinkedRateFacetTimeTravel.sol new file mode 100644 index 000000000..81bcedf7d --- /dev/null +++ b/packages/ats/contracts/contracts/test/testTimeTravel/facetsTimeTravel/corporateActions/CorporateActionsKpiLinkedRateFacetTimeTravel.sol @@ -0,0 +1,18 @@ +// SPDX-License-Identifier: Apache-2.0 +pragma solidity >=0.8.0 <0.9.0; + +import { + CorporateActionsKpiLinkedRateFacet +} from "../../../../layer_1/corporateActions/kpiLinkedRate/CorporateActionsKpiLinkedRateFacet.sol"; +import { TimeTravelStorageWrapper } from "../../timeTravel/TimeTravelStorageWrapper.sol"; +import { LocalContext } from "../../../../layer_0/context/LocalContext.sol"; + +contract CorporateActionsKpiLinkedRateFacetTimeTravel is CorporateActionsKpiLinkedRateFacet, TimeTravelStorageWrapper { + function _blockTimestamp() internal view override(LocalContext, TimeTravelStorageWrapper) returns (uint256) { + return TimeTravelStorageWrapper._blockTimestamp(); + } + + function _blockNumber() internal view override(LocalContext, TimeTravelStorageWrapper) returns (uint256) { + return TimeTravelStorageWrapper._blockNumber(); + } +} diff --git a/packages/ats/contracts/contracts/test/testTimeTravel/facetsTimeTravel/corporateActions/CorporateActionsSustainabilityPerformanceTargetRateFacetTimeTravel.sol b/packages/ats/contracts/contracts/test/testTimeTravel/facetsTimeTravel/corporateActions/CorporateActionsSustainabilityPerformanceTargetRateFacetTimeTravel.sol new file mode 100644 index 000000000..4a1ac6b5b --- /dev/null +++ b/packages/ats/contracts/contracts/test/testTimeTravel/facetsTimeTravel/corporateActions/CorporateActionsSustainabilityPerformanceTargetRateFacetTimeTravel.sol @@ -0,0 +1,21 @@ +// SPDX-License-Identifier: Apache-2.0 +pragma solidity >=0.8.0 <0.9.0; + +import { + CorporateActionsSustainabilityPerformanceTargetRateFacet +} from "../../../../layer_1/corporateActions/sustainabilityPerformanceTargetRate/CorporateActionsSustainabilityPerformanceTargetRateFacet.sol"; +import { TimeTravelStorageWrapper } from "../../timeTravel/TimeTravelStorageWrapper.sol"; +import { LocalContext } from "../../../../layer_0/context/LocalContext.sol"; + +contract CorporateActionsSustainabilityPerformanceTargetRateFacetTimeTravel is + CorporateActionsSustainabilityPerformanceTargetRateFacet, + TimeTravelStorageWrapper +{ + function _blockTimestamp() internal view override(LocalContext, TimeTravelStorageWrapper) returns (uint256) { + return TimeTravelStorageWrapper._blockTimestamp(); + } + + function _blockNumber() internal view override(LocalContext, TimeTravelStorageWrapper) returns (uint256) { + return TimeTravelStorageWrapper._blockNumber(); + } +} diff --git a/packages/ats/contracts/contracts/test/testTimeTravel/facetsTimeTravel/DiamondFacetTimeTravel.sol b/packages/ats/contracts/contracts/test/testTimeTravel/facetsTimeTravel/diamond/DiamondFacetTimeTravel.sol similarity index 66% rename from packages/ats/contracts/contracts/test/testTimeTravel/facetsTimeTravel/DiamondFacetTimeTravel.sol rename to packages/ats/contracts/contracts/test/testTimeTravel/facetsTimeTravel/diamond/DiamondFacetTimeTravel.sol index 6b91c17a7..028c7c0c9 100644 --- a/packages/ats/contracts/contracts/test/testTimeTravel/facetsTimeTravel/DiamondFacetTimeTravel.sol +++ b/packages/ats/contracts/contracts/test/testTimeTravel/facetsTimeTravel/diamond/DiamondFacetTimeTravel.sol @@ -2,9 +2,9 @@ pragma solidity >=0.8.0 <0.9.0; -import { DiamondFacet } from "../../../resolver/resolverProxy/facets/DiamondFacet.sol"; -import { TimeTravelStorageWrapper } from "../timeTravel/TimeTravelStorageWrapper.sol"; -import { LocalContext } from "../../../layer_0/context/LocalContext.sol"; +import { DiamondFacet } from "../../../../resolver/resolverProxy/facets/DiamondFacet.sol"; +import { TimeTravelStorageWrapper } from "../../timeTravel/TimeTravelStorageWrapper.sol"; +import { LocalContext } from "../../../../layer_0/context/LocalContext.sol"; contract DiamondFacetTimeTravel is DiamondFacet, TimeTravelStorageWrapper { function _blockTimestamp() internal view override(LocalContext, TimeTravelStorageWrapper) returns (uint256) { diff --git a/packages/ats/contracts/contracts/test/testTimeTravel/facetsTimeTravel/DiamondCutFacetTimeTravel.sol b/packages/ats/contracts/contracts/test/testTimeTravel/facetsTimeTravel/diamondCut/DiamondCutFacetTimeTravel.sol similarity index 65% rename from packages/ats/contracts/contracts/test/testTimeTravel/facetsTimeTravel/DiamondCutFacetTimeTravel.sol rename to packages/ats/contracts/contracts/test/testTimeTravel/facetsTimeTravel/diamondCut/DiamondCutFacetTimeTravel.sol index a41d66980..f28986151 100644 --- a/packages/ats/contracts/contracts/test/testTimeTravel/facetsTimeTravel/DiamondCutFacetTimeTravel.sol +++ b/packages/ats/contracts/contracts/test/testTimeTravel/facetsTimeTravel/diamondCut/DiamondCutFacetTimeTravel.sol @@ -2,9 +2,9 @@ pragma solidity >=0.8.0 <0.9.0; -import { DiamondCutFacet } from "../../../resolver/resolverProxy/facets/DiamondCutFacet.sol"; -import { TimeTravelStorageWrapper } from "../timeTravel/TimeTravelStorageWrapper.sol"; -import { LocalContext } from "../../../layer_0/context/LocalContext.sol"; +import { DiamondCutFacet } from "../../../../resolver/resolverProxy/facets/DiamondCutFacet.sol"; +import { TimeTravelStorageWrapper } from "../../timeTravel/TimeTravelStorageWrapper.sol"; +import { LocalContext } from "../../../../layer_0/context/LocalContext.sol"; contract DiamondCutFacetTimeTravel is DiamondCutFacet, TimeTravelStorageWrapper { function _blockTimestamp() internal view override(LocalContext, TimeTravelStorageWrapper) returns (uint256) { diff --git a/packages/ats/contracts/contracts/test/testTimeTravel/facetsTimeTravel/DiamondLoupeFacetTimeTravel.sol b/packages/ats/contracts/contracts/test/testTimeTravel/facetsTimeTravel/diamondLoupe/DiamondLoupeFacetTimeTravel.sol similarity index 65% rename from packages/ats/contracts/contracts/test/testTimeTravel/facetsTimeTravel/DiamondLoupeFacetTimeTravel.sol rename to packages/ats/contracts/contracts/test/testTimeTravel/facetsTimeTravel/diamondLoupe/DiamondLoupeFacetTimeTravel.sol index dd636b0a5..2884e6ee8 100644 --- a/packages/ats/contracts/contracts/test/testTimeTravel/facetsTimeTravel/DiamondLoupeFacetTimeTravel.sol +++ b/packages/ats/contracts/contracts/test/testTimeTravel/facetsTimeTravel/diamondLoupe/DiamondLoupeFacetTimeTravel.sol @@ -2,9 +2,9 @@ pragma solidity >=0.8.0 <0.9.0; -import { DiamondLoupeFacet } from "../../../resolver/resolverProxy/facets/DiamondLoupeFacet.sol"; -import { TimeTravelStorageWrapper } from "../timeTravel/TimeTravelStorageWrapper.sol"; -import { LocalContext } from "../../../layer_0/context/LocalContext.sol"; +import { DiamondLoupeFacet } from "../../../../resolver/resolverProxy/facets/DiamondLoupeFacet.sol"; +import { TimeTravelStorageWrapper } from "../../timeTravel/TimeTravelStorageWrapper.sol"; +import { LocalContext } from "../../../../layer_0/context/LocalContext.sol"; contract DiamondLoupeFacetTimeTravel is DiamondLoupeFacet, TimeTravelStorageWrapper { function _blockTimestamp() internal view override(LocalContext, TimeTravelStorageWrapper) returns (uint256) { diff --git a/packages/ats/contracts/contracts/test/testTimeTravel/facetsTimeTravel/ERC1410IssuerFacetTimeTravel.sol b/packages/ats/contracts/contracts/test/testTimeTravel/facetsTimeTravel/eRC1410Issuer/ERC1410IssuerFacetTimeTravel.sol similarity index 67% rename from packages/ats/contracts/contracts/test/testTimeTravel/facetsTimeTravel/ERC1410IssuerFacetTimeTravel.sol rename to packages/ats/contracts/contracts/test/testTimeTravel/facetsTimeTravel/eRC1410Issuer/ERC1410IssuerFacetTimeTravel.sol index 27cf7b3f1..e39e5074b 100644 --- a/packages/ats/contracts/contracts/test/testTimeTravel/facetsTimeTravel/ERC1410IssuerFacetTimeTravel.sol +++ b/packages/ats/contracts/contracts/test/testTimeTravel/facetsTimeTravel/eRC1410Issuer/ERC1410IssuerFacetTimeTravel.sol @@ -3,9 +3,9 @@ pragma solidity >=0.8.0 <0.9.0; -import { ERC1410IssuerFacet } from "../../../layer_1/ERC1400/ERC1410/ERC1410IssuerFacet.sol"; -import { TimeTravelStorageWrapper } from "../timeTravel/TimeTravelStorageWrapper.sol"; -import { LocalContext } from "../../../layer_0/context/LocalContext.sol"; +import { ERC1410IssuerFacet } from "../../../../layer_1/ERC1400/ERC1410/standard/ERC1410IssuerFacet.sol"; +import { TimeTravelStorageWrapper } from "../../timeTravel/TimeTravelStorageWrapper.sol"; +import { LocalContext } from "../../../../layer_0/context/LocalContext.sol"; contract ERC1410IssuerFacetTimeTravel is ERC1410IssuerFacet, TimeTravelStorageWrapper { function _blockTimestamp() internal view override(LocalContext, TimeTravelStorageWrapper) returns (uint256) { diff --git a/packages/ats/contracts/contracts/test/testTimeTravel/facetsTimeTravel/eRC1410Issuer/ERC1410IssuerFixedRateFacetTimeTravel.sol b/packages/ats/contracts/contracts/test/testTimeTravel/facetsTimeTravel/eRC1410Issuer/ERC1410IssuerFixedRateFacetTimeTravel.sol new file mode 100644 index 000000000..9f90151ef --- /dev/null +++ b/packages/ats/contracts/contracts/test/testTimeTravel/facetsTimeTravel/eRC1410Issuer/ERC1410IssuerFixedRateFacetTimeTravel.sol @@ -0,0 +1,20 @@ +// SPDX-License-Identifier: Apache-2.0 +// Contract copy-pasted form OZ and extended + +pragma solidity >=0.8.0 <0.9.0; + +import { + ERC1410IssuerFixedRateFacet +} from "../../../../layer_1/ERC1400/ERC1410/fixedRate/ERC1410IssuerFixedRateFacet.sol"; +import { TimeTravelStorageWrapper } from "../../timeTravel/TimeTravelStorageWrapper.sol"; +import { LocalContext } from "../../../../layer_0/context/LocalContext.sol"; + +contract ERC1410IssuerFixedRateFacetTimeTravel is ERC1410IssuerFixedRateFacet, TimeTravelStorageWrapper { + function _blockTimestamp() internal view override(LocalContext, TimeTravelStorageWrapper) returns (uint256) { + return TimeTravelStorageWrapper._blockTimestamp(); + } + + function _blockNumber() internal view override(LocalContext, TimeTravelStorageWrapper) returns (uint256) { + return TimeTravelStorageWrapper._blockNumber(); + } +} diff --git a/packages/ats/contracts/contracts/test/testTimeTravel/facetsTimeTravel/eRC1410Issuer/ERC1410IssuerKpiLinkedRateFacetTimeTravel.sol b/packages/ats/contracts/contracts/test/testTimeTravel/facetsTimeTravel/eRC1410Issuer/ERC1410IssuerKpiLinkedRateFacetTimeTravel.sol new file mode 100644 index 000000000..581e43835 --- /dev/null +++ b/packages/ats/contracts/contracts/test/testTimeTravel/facetsTimeTravel/eRC1410Issuer/ERC1410IssuerKpiLinkedRateFacetTimeTravel.sol @@ -0,0 +1,20 @@ +// SPDX-License-Identifier: Apache-2.0 +// Contract copy-pasted form OZ and extended + +pragma solidity >=0.8.0 <0.9.0; + +import { + ERC1410IssuerKpiLinkedRateFacet +} from "../../../../layer_1/ERC1400/ERC1410/kpiLinkedRate/ERC1410IssuerKpiLinkedRateFacet.sol"; +import { TimeTravelStorageWrapper } from "../../timeTravel/TimeTravelStorageWrapper.sol"; +import { LocalContext } from "../../../../layer_0/context/LocalContext.sol"; + +contract ERC1410IssuerKpiLinkedRateFacetTimeTravel is ERC1410IssuerKpiLinkedRateFacet, TimeTravelStorageWrapper { + function _blockTimestamp() internal view override(LocalContext, TimeTravelStorageWrapper) returns (uint256) { + return TimeTravelStorageWrapper._blockTimestamp(); + } + + function _blockNumber() internal view override(LocalContext, TimeTravelStorageWrapper) returns (uint256) { + return TimeTravelStorageWrapper._blockNumber(); + } +} diff --git a/packages/ats/contracts/contracts/test/testTimeTravel/facetsTimeTravel/eRC1410Issuer/ERC1410IssuerSustainabilityPerformanceTargetRateFacetTimeTravel.sol b/packages/ats/contracts/contracts/test/testTimeTravel/facetsTimeTravel/eRC1410Issuer/ERC1410IssuerSustainabilityPerformanceTargetRateFacetTimeTravel.sol new file mode 100644 index 000000000..56518b4a7 --- /dev/null +++ b/packages/ats/contracts/contracts/test/testTimeTravel/facetsTimeTravel/eRC1410Issuer/ERC1410IssuerSustainabilityPerformanceTargetRateFacetTimeTravel.sol @@ -0,0 +1,23 @@ +// SPDX-License-Identifier: Apache-2.0 +// Contract copy-pasted form OZ and extended + +pragma solidity >=0.8.0 <0.9.0; + +import { + ERC1410IssuerSustainabilityPerformanceTargetRateFacet +} from "../../../../layer_1/ERC1400/ERC1410/sustainabilityPerformanceTargetRate/ERC1410IssuerSustainabilityPerformanceTargetRateFacet.sol"; +import { TimeTravelStorageWrapper } from "../../timeTravel/TimeTravelStorageWrapper.sol"; +import { LocalContext } from "../../../../layer_0/context/LocalContext.sol"; + +contract ERC1410IssuerSustainabilityPerformanceTargetRateFacetTimeTravel is + ERC1410IssuerSustainabilityPerformanceTargetRateFacet, + TimeTravelStorageWrapper +{ + function _blockTimestamp() internal view override(LocalContext, TimeTravelStorageWrapper) returns (uint256) { + return TimeTravelStorageWrapper._blockTimestamp(); + } + + function _blockNumber() internal view override(LocalContext, TimeTravelStorageWrapper) returns (uint256) { + return TimeTravelStorageWrapper._blockNumber(); + } +} diff --git a/packages/ats/contracts/contracts/test/testTimeTravel/facetsTimeTravel/ERC1410ManagementFacetTimeTravel.sol b/packages/ats/contracts/contracts/test/testTimeTravel/facetsTimeTravel/eRC1410Management/ERC1410ManagementFacetTimeTravel.sol similarity index 66% rename from packages/ats/contracts/contracts/test/testTimeTravel/facetsTimeTravel/ERC1410ManagementFacetTimeTravel.sol rename to packages/ats/contracts/contracts/test/testTimeTravel/facetsTimeTravel/eRC1410Management/ERC1410ManagementFacetTimeTravel.sol index af358efb9..2dddad465 100644 --- a/packages/ats/contracts/contracts/test/testTimeTravel/facetsTimeTravel/ERC1410ManagementFacetTimeTravel.sol +++ b/packages/ats/contracts/contracts/test/testTimeTravel/facetsTimeTravel/eRC1410Management/ERC1410ManagementFacetTimeTravel.sol @@ -3,9 +3,9 @@ pragma solidity >=0.8.0 <0.9.0; -import { ERC1410ManagementFacet } from "../../../layer_1/ERC1400/ERC1410/ERC1410ManagementFacet.sol"; -import { TimeTravelStorageWrapper } from "../timeTravel/TimeTravelStorageWrapper.sol"; -import { LocalContext } from "../../../layer_0/context/LocalContext.sol"; +import { ERC1410ManagementFacet } from "../../../../layer_1/ERC1400/ERC1410/standard/ERC1410ManagementFacet.sol"; +import { TimeTravelStorageWrapper } from "../../timeTravel/TimeTravelStorageWrapper.sol"; +import { LocalContext } from "../../../../layer_0/context/LocalContext.sol"; contract ERC1410ManagementFacetTimeTravel is ERC1410ManagementFacet, TimeTravelStorageWrapper { function _blockTimestamp() internal view override(LocalContext, TimeTravelStorageWrapper) returns (uint256) { diff --git a/packages/ats/contracts/contracts/test/testTimeTravel/facetsTimeTravel/eRC1410Management/ERC1410ManagementFixedRateFacetTimeTravel.sol b/packages/ats/contracts/contracts/test/testTimeTravel/facetsTimeTravel/eRC1410Management/ERC1410ManagementFixedRateFacetTimeTravel.sol new file mode 100644 index 000000000..366d25a37 --- /dev/null +++ b/packages/ats/contracts/contracts/test/testTimeTravel/facetsTimeTravel/eRC1410Management/ERC1410ManagementFixedRateFacetTimeTravel.sol @@ -0,0 +1,20 @@ +// SPDX-License-Identifier: Apache-2.0 +// Contract copy-pasted form OZ and extended + +pragma solidity >=0.8.0 <0.9.0; + +import { + ERC1410ManagementFixedRateFacet +} from "../../../../layer_1/ERC1400/ERC1410/fixedRate/ERC1410ManagementFixedRateFacet.sol"; +import { TimeTravelStorageWrapper } from "../../timeTravel/TimeTravelStorageWrapper.sol"; +import { LocalContext } from "../../../../layer_0/context/LocalContext.sol"; + +contract ERC1410ManagementFixedRateFacetTimeTravel is ERC1410ManagementFixedRateFacet, TimeTravelStorageWrapper { + function _blockTimestamp() internal view override(LocalContext, TimeTravelStorageWrapper) returns (uint256) { + return TimeTravelStorageWrapper._blockTimestamp(); + } + + function _blockNumber() internal view override(LocalContext, TimeTravelStorageWrapper) returns (uint256) { + return TimeTravelStorageWrapper._blockNumber(); + } +} diff --git a/packages/ats/contracts/contracts/test/testTimeTravel/facetsTimeTravel/eRC1410Management/ERC1410ManagementKpiLinkedRateFacetTimeTravel.sol b/packages/ats/contracts/contracts/test/testTimeTravel/facetsTimeTravel/eRC1410Management/ERC1410ManagementKpiLinkedRateFacetTimeTravel.sol new file mode 100644 index 000000000..6716ca110 --- /dev/null +++ b/packages/ats/contracts/contracts/test/testTimeTravel/facetsTimeTravel/eRC1410Management/ERC1410ManagementKpiLinkedRateFacetTimeTravel.sol @@ -0,0 +1,23 @@ +// SPDX-License-Identifier: Apache-2.0 +// Contract copy-pasted form OZ and extended + +pragma solidity >=0.8.0 <0.9.0; + +import { + ERC1410ManagementKpiLinkedRateFacet +} from "../../../../layer_1/ERC1400/ERC1410/kpiLinkedRate/ERC1410ManagementKpiLinkedRateFacet.sol"; +import { TimeTravelStorageWrapper } from "../../timeTravel/TimeTravelStorageWrapper.sol"; +import { LocalContext } from "../../../../layer_0/context/LocalContext.sol"; + +contract ERC1410ManagementKpiLinkedRateFacetTimeTravel is + ERC1410ManagementKpiLinkedRateFacet, + TimeTravelStorageWrapper +{ + function _blockTimestamp() internal view override(LocalContext, TimeTravelStorageWrapper) returns (uint256) { + return TimeTravelStorageWrapper._blockTimestamp(); + } + + function _blockNumber() internal view override(LocalContext, TimeTravelStorageWrapper) returns (uint256) { + return TimeTravelStorageWrapper._blockNumber(); + } +} diff --git a/packages/ats/contracts/contracts/test/testTimeTravel/facetsTimeTravel/eRC1410Management/ERC1410ManagementSustainabilityPerformanceTargetRateFacetTimeTravel.sol b/packages/ats/contracts/contracts/test/testTimeTravel/facetsTimeTravel/eRC1410Management/ERC1410ManagementSustainabilityPerformanceTargetRateFacetTimeTravel.sol new file mode 100644 index 000000000..4c8892cee --- /dev/null +++ b/packages/ats/contracts/contracts/test/testTimeTravel/facetsTimeTravel/eRC1410Management/ERC1410ManagementSustainabilityPerformanceTargetRateFacetTimeTravel.sol @@ -0,0 +1,23 @@ +// SPDX-License-Identifier: Apache-2.0 +// Contract copy-pasted form OZ and extended + +pragma solidity >=0.8.0 <0.9.0; + +import { + ERC1410ManagementSustainabilityPerformanceTargetRateFacet +} from "../../../../layer_1/ERC1400/ERC1410/sustainabilityPerformanceTargetRate/ERC1410ManagementSustainabilityPerformanceTargetRateFacet.sol"; +import { TimeTravelStorageWrapper } from "../../timeTravel/TimeTravelStorageWrapper.sol"; +import { LocalContext } from "../../../../layer_0/context/LocalContext.sol"; + +contract ERC1410ManagementSustainabilityPerformanceTargetRateFacetTimeTravel is + ERC1410ManagementSustainabilityPerformanceTargetRateFacet, + TimeTravelStorageWrapper +{ + function _blockTimestamp() internal view override(LocalContext, TimeTravelStorageWrapper) returns (uint256) { + return TimeTravelStorageWrapper._blockTimestamp(); + } + + function _blockNumber() internal view override(LocalContext, TimeTravelStorageWrapper) returns (uint256) { + return TimeTravelStorageWrapper._blockNumber(); + } +} diff --git a/packages/ats/contracts/contracts/test/testTimeTravel/facetsTimeTravel/ERC1410ReadFacetTimeTravel.sol b/packages/ats/contracts/contracts/test/testTimeTravel/facetsTimeTravel/eRC1410Read/ERC1410ReadFacetTimeTravel.sol similarity index 67% rename from packages/ats/contracts/contracts/test/testTimeTravel/facetsTimeTravel/ERC1410ReadFacetTimeTravel.sol rename to packages/ats/contracts/contracts/test/testTimeTravel/facetsTimeTravel/eRC1410Read/ERC1410ReadFacetTimeTravel.sol index ee51886b8..26d865f58 100644 --- a/packages/ats/contracts/contracts/test/testTimeTravel/facetsTimeTravel/ERC1410ReadFacetTimeTravel.sol +++ b/packages/ats/contracts/contracts/test/testTimeTravel/facetsTimeTravel/eRC1410Read/ERC1410ReadFacetTimeTravel.sol @@ -3,9 +3,9 @@ pragma solidity >=0.8.0 <0.9.0; -import { ERC1410ReadFacet } from "../../../layer_1/ERC1400/ERC1410/ERC1410ReadFacet.sol"; -import { TimeTravelStorageWrapper } from "../timeTravel/TimeTravelStorageWrapper.sol"; -import { LocalContext } from "../../../layer_0/context/LocalContext.sol"; +import { ERC1410ReadFacet } from "../../../../layer_1/ERC1400/ERC1410/standard/ERC1410ReadFacet.sol"; +import { TimeTravelStorageWrapper } from "../../timeTravel/TimeTravelStorageWrapper.sol"; +import { LocalContext } from "../../../../layer_0/context/LocalContext.sol"; contract ERC1410ReadFacetTimeTravel is ERC1410ReadFacet, TimeTravelStorageWrapper { function _blockTimestamp() internal view override(LocalContext, TimeTravelStorageWrapper) returns (uint256) { diff --git a/packages/ats/contracts/contracts/test/testTimeTravel/facetsTimeTravel/eRC1410Read/ERC1410ReadFixedRateFacetTimeTravel.sol b/packages/ats/contracts/contracts/test/testTimeTravel/facetsTimeTravel/eRC1410Read/ERC1410ReadFixedRateFacetTimeTravel.sol new file mode 100644 index 000000000..d51342ed4 --- /dev/null +++ b/packages/ats/contracts/contracts/test/testTimeTravel/facetsTimeTravel/eRC1410Read/ERC1410ReadFixedRateFacetTimeTravel.sol @@ -0,0 +1,18 @@ +// SPDX-License-Identifier: Apache-2.0 +// Contract copy-pasted form OZ and extended + +pragma solidity >=0.8.0 <0.9.0; + +import { ERC1410ReadFixedRateFacet } from "../../../../layer_1/ERC1400/ERC1410/fixedRate/ERC1410ReadFixedRateFacet.sol"; +import { TimeTravelStorageWrapper } from "../../timeTravel/TimeTravelStorageWrapper.sol"; +import { LocalContext } from "../../../../layer_0/context/LocalContext.sol"; + +contract ERC1410ReadFixedRateFacetTimeTravel is ERC1410ReadFixedRateFacet, TimeTravelStorageWrapper { + function _blockTimestamp() internal view override(LocalContext, TimeTravelStorageWrapper) returns (uint256) { + return TimeTravelStorageWrapper._blockTimestamp(); + } + + function _blockNumber() internal view override(LocalContext, TimeTravelStorageWrapper) returns (uint256) { + return TimeTravelStorageWrapper._blockNumber(); + } +} diff --git a/packages/ats/contracts/contracts/test/testTimeTravel/facetsTimeTravel/eRC1410Read/ERC1410ReadKpiLinkedRateFacetTimeTravel.sol b/packages/ats/contracts/contracts/test/testTimeTravel/facetsTimeTravel/eRC1410Read/ERC1410ReadKpiLinkedRateFacetTimeTravel.sol new file mode 100644 index 000000000..ee7d4871b --- /dev/null +++ b/packages/ats/contracts/contracts/test/testTimeTravel/facetsTimeTravel/eRC1410Read/ERC1410ReadKpiLinkedRateFacetTimeTravel.sol @@ -0,0 +1,20 @@ +// SPDX-License-Identifier: Apache-2.0 +// Contract copy-pasted form OZ and extended + +pragma solidity >=0.8.0 <0.9.0; + +import { + ERC1410ReadKpiLinkedRateFacet +} from "../../../../layer_1/ERC1400/ERC1410/kpiLinkedRate/ERC1410ReadKpiLinkedRateFacet.sol"; +import { TimeTravelStorageWrapper } from "../../timeTravel/TimeTravelStorageWrapper.sol"; +import { LocalContext } from "../../../../layer_0/context/LocalContext.sol"; + +contract ERC1410ReadKpiLinkedRateFacetTimeTravel is ERC1410ReadKpiLinkedRateFacet, TimeTravelStorageWrapper { + function _blockTimestamp() internal view override(LocalContext, TimeTravelStorageWrapper) returns (uint256) { + return TimeTravelStorageWrapper._blockTimestamp(); + } + + function _blockNumber() internal view override(LocalContext, TimeTravelStorageWrapper) returns (uint256) { + return TimeTravelStorageWrapper._blockNumber(); + } +} diff --git a/packages/ats/contracts/contracts/test/testTimeTravel/facetsTimeTravel/eRC1410Read/ERC1410ReadSustainabilityPerformanceTargetRateFacetTimeTravel.sol b/packages/ats/contracts/contracts/test/testTimeTravel/facetsTimeTravel/eRC1410Read/ERC1410ReadSustainabilityPerformanceTargetRateFacetTimeTravel.sol new file mode 100644 index 000000000..e7369b032 --- /dev/null +++ b/packages/ats/contracts/contracts/test/testTimeTravel/facetsTimeTravel/eRC1410Read/ERC1410ReadSustainabilityPerformanceTargetRateFacetTimeTravel.sol @@ -0,0 +1,23 @@ +// SPDX-License-Identifier: Apache-2.0 +// Contract copy-pasted form OZ and extended + +pragma solidity >=0.8.0 <0.9.0; + +import { + ERC1410ReadSustainabilityPerformanceTargetRateFacet +} from "../../../../layer_1/ERC1400/ERC1410/sustainabilityPerformanceTargetRate/ERC1410ReadSustainabilityPerformanceTargetRateFacet.sol"; +import { TimeTravelStorageWrapper } from "../../timeTravel/TimeTravelStorageWrapper.sol"; +import { LocalContext } from "../../../../layer_0/context/LocalContext.sol"; + +contract ERC1410ReadSustainabilityPerformanceTargetRateFacetTimeTravel is + ERC1410ReadSustainabilityPerformanceTargetRateFacet, + TimeTravelStorageWrapper +{ + function _blockTimestamp() internal view override(LocalContext, TimeTravelStorageWrapper) returns (uint256) { + return TimeTravelStorageWrapper._blockTimestamp(); + } + + function _blockNumber() internal view override(LocalContext, TimeTravelStorageWrapper) returns (uint256) { + return TimeTravelStorageWrapper._blockNumber(); + } +} diff --git a/packages/ats/contracts/contracts/test/testTimeTravel/facetsTimeTravel/ERC1410TokenHolderFacetTimeTravel.sol b/packages/ats/contracts/contracts/test/testTimeTravel/facetsTimeTravel/eRC1410TokenHolder/ERC1410TokenHolderFacetTimeTravel.sol similarity index 66% rename from packages/ats/contracts/contracts/test/testTimeTravel/facetsTimeTravel/ERC1410TokenHolderFacetTimeTravel.sol rename to packages/ats/contracts/contracts/test/testTimeTravel/facetsTimeTravel/eRC1410TokenHolder/ERC1410TokenHolderFacetTimeTravel.sol index 7cc30796c..81c580b77 100644 --- a/packages/ats/contracts/contracts/test/testTimeTravel/facetsTimeTravel/ERC1410TokenHolderFacetTimeTravel.sol +++ b/packages/ats/contracts/contracts/test/testTimeTravel/facetsTimeTravel/eRC1410TokenHolder/ERC1410TokenHolderFacetTimeTravel.sol @@ -3,9 +3,9 @@ pragma solidity >=0.8.0 <0.9.0; -import { ERC1410TokenHolderFacet } from "../../../layer_1/ERC1400/ERC1410/ERC1410TokenHolderFacet.sol"; -import { TimeTravelStorageWrapper } from "../timeTravel/TimeTravelStorageWrapper.sol"; -import { LocalContext } from "../../../layer_0/context/LocalContext.sol"; +import { ERC1410TokenHolderFacet } from "../../../../layer_1/ERC1400/ERC1410/standard/ERC1410TokenHolderFacet.sol"; +import { TimeTravelStorageWrapper } from "../../timeTravel/TimeTravelStorageWrapper.sol"; +import { LocalContext } from "../../../../layer_0/context/LocalContext.sol"; contract ERC1410TokenHolderFacetTimeTravel is ERC1410TokenHolderFacet, TimeTravelStorageWrapper { function _blockTimestamp() internal view override(LocalContext, TimeTravelStorageWrapper) returns (uint256) { diff --git a/packages/ats/contracts/contracts/test/testTimeTravel/facetsTimeTravel/eRC1410TokenHolder/ERC1410TokenHolderFixedRateFacetTimeTravel.sol b/packages/ats/contracts/contracts/test/testTimeTravel/facetsTimeTravel/eRC1410TokenHolder/ERC1410TokenHolderFixedRateFacetTimeTravel.sol new file mode 100644 index 000000000..dadb876fc --- /dev/null +++ b/packages/ats/contracts/contracts/test/testTimeTravel/facetsTimeTravel/eRC1410TokenHolder/ERC1410TokenHolderFixedRateFacetTimeTravel.sol @@ -0,0 +1,20 @@ +// SPDX-License-Identifier: Apache-2.0 +// Contract copy-pasted form OZ and extended + +pragma solidity >=0.8.0 <0.9.0; + +import { + ERC1410TokenHolderFixedRateFacet +} from "../../../../layer_1/ERC1400/ERC1410/fixedRate/ERC1410TokenHolderFixedRateFacet.sol"; +import { TimeTravelStorageWrapper } from "../../timeTravel/TimeTravelStorageWrapper.sol"; +import { LocalContext } from "../../../../layer_0/context/LocalContext.sol"; + +contract ERC1410TokenHolderFixedRateFacetTimeTravel is ERC1410TokenHolderFixedRateFacet, TimeTravelStorageWrapper { + function _blockTimestamp() internal view override(LocalContext, TimeTravelStorageWrapper) returns (uint256) { + return TimeTravelStorageWrapper._blockTimestamp(); + } + + function _blockNumber() internal view override(LocalContext, TimeTravelStorageWrapper) returns (uint256) { + return TimeTravelStorageWrapper._blockNumber(); + } +} diff --git a/packages/ats/contracts/contracts/test/testTimeTravel/facetsTimeTravel/eRC1410TokenHolder/ERC1410TokenHolderKpiLinkedRateFacetTimeTravel.sol b/packages/ats/contracts/contracts/test/testTimeTravel/facetsTimeTravel/eRC1410TokenHolder/ERC1410TokenHolderKpiLinkedRateFacetTimeTravel.sol new file mode 100644 index 000000000..a4d1158ac --- /dev/null +++ b/packages/ats/contracts/contracts/test/testTimeTravel/facetsTimeTravel/eRC1410TokenHolder/ERC1410TokenHolderKpiLinkedRateFacetTimeTravel.sol @@ -0,0 +1,23 @@ +// SPDX-License-Identifier: Apache-2.0 +// Contract copy-pasted form OZ and extended + +pragma solidity >=0.8.0 <0.9.0; + +import { + ERC1410TokenHolderKpiLinkedRateFacet +} from "../../../../layer_1/ERC1400/ERC1410/kpiLinkedRate/ERC1410TokenHolderKpiLinkedRateFacet.sol"; +import { TimeTravelStorageWrapper } from "../../timeTravel/TimeTravelStorageWrapper.sol"; +import { LocalContext } from "../../../../layer_0/context/LocalContext.sol"; + +contract ERC1410TokenHolderKpiLinkedRateFacetTimeTravel is + ERC1410TokenHolderKpiLinkedRateFacet, + TimeTravelStorageWrapper +{ + function _blockTimestamp() internal view override(LocalContext, TimeTravelStorageWrapper) returns (uint256) { + return TimeTravelStorageWrapper._blockTimestamp(); + } + + function _blockNumber() internal view override(LocalContext, TimeTravelStorageWrapper) returns (uint256) { + return TimeTravelStorageWrapper._blockNumber(); + } +} diff --git a/packages/ats/contracts/contracts/test/testTimeTravel/facetsTimeTravel/eRC1410TokenHolder/ERC1410TokenHolderSustainabilityPerformanceTargetRateFacetTimeTravel.sol b/packages/ats/contracts/contracts/test/testTimeTravel/facetsTimeTravel/eRC1410TokenHolder/ERC1410TokenHolderSustainabilityPerformanceTargetRateFacetTimeTravel.sol new file mode 100644 index 000000000..566f1ce58 --- /dev/null +++ b/packages/ats/contracts/contracts/test/testTimeTravel/facetsTimeTravel/eRC1410TokenHolder/ERC1410TokenHolderSustainabilityPerformanceTargetRateFacetTimeTravel.sol @@ -0,0 +1,23 @@ +// SPDX-License-Identifier: Apache-2.0 +// Contract copy-pasted form OZ and extended + +pragma solidity >=0.8.0 <0.9.0; + +import { + ERC1410TokenHolderSustainabilityPerformanceTargetRateFacet +} from "../../../../layer_1/ERC1400/ERC1410/sustainabilityPerformanceTargetRate/ERC1410TokenHolderSustainabilityPerformanceTargetRateFacet.sol"; +import { TimeTravelStorageWrapper } from "../../timeTravel/TimeTravelStorageWrapper.sol"; +import { LocalContext } from "../../../../layer_0/context/LocalContext.sol"; + +contract ERC1410TokenHolderSustainabilityPerformanceTargetRateFacetTimeTravel is + ERC1410TokenHolderSustainabilityPerformanceTargetRateFacet, + TimeTravelStorageWrapper +{ + function _blockTimestamp() internal view override(LocalContext, TimeTravelStorageWrapper) returns (uint256) { + return TimeTravelStorageWrapper._blockTimestamp(); + } + + function _blockNumber() internal view override(LocalContext, TimeTravelStorageWrapper) returns (uint256) { + return TimeTravelStorageWrapper._blockNumber(); + } +} diff --git a/packages/ats/contracts/contracts/test/testTimeTravel/facetsTimeTravel/ERC1594FacetTimeTravel.sol b/packages/ats/contracts/contracts/test/testTimeTravel/facetsTimeTravel/eRC1594/ERC1594FacetTimeTravel.sol similarity index 67% rename from packages/ats/contracts/contracts/test/testTimeTravel/facetsTimeTravel/ERC1594FacetTimeTravel.sol rename to packages/ats/contracts/contracts/test/testTimeTravel/facetsTimeTravel/eRC1594/ERC1594FacetTimeTravel.sol index 6114cfc2f..0797bf757 100644 --- a/packages/ats/contracts/contracts/test/testTimeTravel/facetsTimeTravel/ERC1594FacetTimeTravel.sol +++ b/packages/ats/contracts/contracts/test/testTimeTravel/facetsTimeTravel/eRC1594/ERC1594FacetTimeTravel.sol @@ -3,9 +3,9 @@ pragma solidity >=0.8.0 <0.9.0; -import { ERC1594Facet } from "../../../layer_1/ERC1400/ERC1594/ERC1594Facet.sol"; -import { TimeTravelStorageWrapper } from "../timeTravel/TimeTravelStorageWrapper.sol"; -import { LocalContext } from "../../../layer_0/context/LocalContext.sol"; +import { ERC1594Facet } from "../../../../layer_1/ERC1400/ERC1594/standard/ERC1594Facet.sol"; +import { TimeTravelStorageWrapper } from "../../timeTravel/TimeTravelStorageWrapper.sol"; +import { LocalContext } from "../../../../layer_0/context/LocalContext.sol"; contract ERC1594FacetTimeTravel is ERC1594Facet, TimeTravelStorageWrapper { function _blockTimestamp() internal view override(LocalContext, TimeTravelStorageWrapper) returns (uint256) { diff --git a/packages/ats/contracts/contracts/test/testTimeTravel/facetsTimeTravel/eRC1594/ERC1594FixedRateFacetTimeTravel.sol b/packages/ats/contracts/contracts/test/testTimeTravel/facetsTimeTravel/eRC1594/ERC1594FixedRateFacetTimeTravel.sol new file mode 100644 index 000000000..f78c284bf --- /dev/null +++ b/packages/ats/contracts/contracts/test/testTimeTravel/facetsTimeTravel/eRC1594/ERC1594FixedRateFacetTimeTravel.sol @@ -0,0 +1,18 @@ +// SPDX-License-Identifier: Apache-2.0 +// Contract copy-pasted form OZ and extended + +pragma solidity >=0.8.0 <0.9.0; + +import { ERC1594FixedRateFacet } from "../../../../layer_1/ERC1400/ERC1594/fixedRate/ERC1594FixedRateFacet.sol"; +import { TimeTravelStorageWrapper } from "../../timeTravel/TimeTravelStorageWrapper.sol"; +import { LocalContext } from "../../../../layer_0/context/LocalContext.sol"; + +contract ERC1594FixedRateFacetTimeTravel is ERC1594FixedRateFacet, TimeTravelStorageWrapper { + function _blockTimestamp() internal view override(LocalContext, TimeTravelStorageWrapper) returns (uint256) { + return TimeTravelStorageWrapper._blockTimestamp(); + } + + function _blockNumber() internal view override(LocalContext, TimeTravelStorageWrapper) returns (uint256) { + return TimeTravelStorageWrapper._blockNumber(); + } +} diff --git a/packages/ats/contracts/contracts/test/testTimeTravel/facetsTimeTravel/eRC1594/ERC1594KpiLinkedRateFacetTimeTravel.sol b/packages/ats/contracts/contracts/test/testTimeTravel/facetsTimeTravel/eRC1594/ERC1594KpiLinkedRateFacetTimeTravel.sol new file mode 100644 index 000000000..5ce14f612 --- /dev/null +++ b/packages/ats/contracts/contracts/test/testTimeTravel/facetsTimeTravel/eRC1594/ERC1594KpiLinkedRateFacetTimeTravel.sol @@ -0,0 +1,20 @@ +// SPDX-License-Identifier: Apache-2.0 +// Contract copy-pasted form OZ and extended + +pragma solidity >=0.8.0 <0.9.0; + +import { + ERC1594KpiLinkedRateFacet +} from "../../../../layer_1/ERC1400/ERC1594/kpiLinkedRate/ERC1594KpiLinkedRateFacet.sol"; +import { TimeTravelStorageWrapper } from "../../timeTravel/TimeTravelStorageWrapper.sol"; +import { LocalContext } from "../../../../layer_0/context/LocalContext.sol"; + +contract ERC1594KpiLinkedRateFacetTimeTravel is ERC1594KpiLinkedRateFacet, TimeTravelStorageWrapper { + function _blockTimestamp() internal view override(LocalContext, TimeTravelStorageWrapper) returns (uint256) { + return TimeTravelStorageWrapper._blockTimestamp(); + } + + function _blockNumber() internal view override(LocalContext, TimeTravelStorageWrapper) returns (uint256) { + return TimeTravelStorageWrapper._blockNumber(); + } +} diff --git a/packages/ats/contracts/contracts/test/testTimeTravel/facetsTimeTravel/eRC1594/ERC1594SustainabilityPerformanceTargetRateFacetTimeTravel.sol b/packages/ats/contracts/contracts/test/testTimeTravel/facetsTimeTravel/eRC1594/ERC1594SustainabilityPerformanceTargetRateFacetTimeTravel.sol new file mode 100644 index 000000000..0ee9ef029 --- /dev/null +++ b/packages/ats/contracts/contracts/test/testTimeTravel/facetsTimeTravel/eRC1594/ERC1594SustainabilityPerformanceTargetRateFacetTimeTravel.sol @@ -0,0 +1,23 @@ +// SPDX-License-Identifier: Apache-2.0 +// Contract copy-pasted form OZ and extended + +pragma solidity >=0.8.0 <0.9.0; + +import { + ERC1594SustainabilityPerformanceTargetRateFacet +} from "../../../../layer_1/ERC1400/ERC1594/sustainabilityPerformanceTargetRate/ERC1594SustainabilityPerformanceTargetRateFacet.sol"; +import { TimeTravelStorageWrapper } from "../../timeTravel/TimeTravelStorageWrapper.sol"; +import { LocalContext } from "../../../../layer_0/context/LocalContext.sol"; + +contract ERC1594SustainabilityPerformanceTargetRateFacetTimeTravel is + ERC1594SustainabilityPerformanceTargetRateFacet, + TimeTravelStorageWrapper +{ + function _blockTimestamp() internal view override(LocalContext, TimeTravelStorageWrapper) returns (uint256) { + return TimeTravelStorageWrapper._blockTimestamp(); + } + + function _blockNumber() internal view override(LocalContext, TimeTravelStorageWrapper) returns (uint256) { + return TimeTravelStorageWrapper._blockNumber(); + } +} diff --git a/packages/ats/contracts/contracts/test/testTimeTravel/facetsTimeTravel/ERC1643FacetTimeTravel.sol b/packages/ats/contracts/contracts/test/testTimeTravel/facetsTimeTravel/eRC1643/ERC1643FacetTimeTravel.sol similarity index 65% rename from packages/ats/contracts/contracts/test/testTimeTravel/facetsTimeTravel/ERC1643FacetTimeTravel.sol rename to packages/ats/contracts/contracts/test/testTimeTravel/facetsTimeTravel/eRC1643/ERC1643FacetTimeTravel.sol index c4c7e8dfa..152fda4d6 100644 --- a/packages/ats/contracts/contracts/test/testTimeTravel/facetsTimeTravel/ERC1643FacetTimeTravel.sol +++ b/packages/ats/contracts/contracts/test/testTimeTravel/facetsTimeTravel/eRC1643/ERC1643FacetTimeTravel.sol @@ -1,9 +1,9 @@ // SPDX-License-Identifier: Apache-2.0 pragma solidity >=0.8.0 <0.9.0; -import { ERC1643Facet } from "../../../layer_1/ERC1400/ERC1643/ERC1643Facet.sol"; -import { TimeTravelStorageWrapper } from "../timeTravel/TimeTravelStorageWrapper.sol"; -import { LocalContext } from "../../../layer_0/context/LocalContext.sol"; +import { ERC1643Facet } from "../../../../layer_1/ERC1400/ERC1643/standard/ERC1643Facet.sol"; +import { TimeTravelStorageWrapper } from "../../timeTravel/TimeTravelStorageWrapper.sol"; +import { LocalContext } from "../../../../layer_0/context/LocalContext.sol"; contract ERC1643FacetTimeTravel is ERC1643Facet, TimeTravelStorageWrapper { function _blockTimestamp() internal view override(LocalContext, TimeTravelStorageWrapper) returns (uint256) { diff --git a/packages/ats/contracts/contracts/test/testTimeTravel/facetsTimeTravel/eRC1643/ERC1643FixedRateFacetTimeTravel.sol b/packages/ats/contracts/contracts/test/testTimeTravel/facetsTimeTravel/eRC1643/ERC1643FixedRateFacetTimeTravel.sol new file mode 100644 index 000000000..2fc4ee394 --- /dev/null +++ b/packages/ats/contracts/contracts/test/testTimeTravel/facetsTimeTravel/eRC1643/ERC1643FixedRateFacetTimeTravel.sol @@ -0,0 +1,16 @@ +// SPDX-License-Identifier: Apache-2.0 +pragma solidity >=0.8.0 <0.9.0; + +import { ERC1643FixedRateFacet } from "../../../../layer_1/ERC1400/ERC1643/fixedRate/ERC1643FixedRateFacet.sol"; +import { TimeTravelStorageWrapper } from "../../timeTravel/TimeTravelStorageWrapper.sol"; +import { LocalContext } from "../../../../layer_0/context/LocalContext.sol"; + +contract ERC1643FixedRateFacetTimeTravel is ERC1643FixedRateFacet, TimeTravelStorageWrapper { + function _blockTimestamp() internal view override(LocalContext, TimeTravelStorageWrapper) returns (uint256) { + return TimeTravelStorageWrapper._blockTimestamp(); + } + + function _blockNumber() internal view override(LocalContext, TimeTravelStorageWrapper) returns (uint256) { + return TimeTravelStorageWrapper._blockNumber(); + } +} diff --git a/packages/ats/contracts/contracts/test/testTimeTravel/facetsTimeTravel/eRC1643/ERC1643KpiLinkedRateFacetTimeTravel.sol b/packages/ats/contracts/contracts/test/testTimeTravel/facetsTimeTravel/eRC1643/ERC1643KpiLinkedRateFacetTimeTravel.sol new file mode 100644 index 000000000..255b3f529 --- /dev/null +++ b/packages/ats/contracts/contracts/test/testTimeTravel/facetsTimeTravel/eRC1643/ERC1643KpiLinkedRateFacetTimeTravel.sol @@ -0,0 +1,18 @@ +// SPDX-License-Identifier: Apache-2.0 +pragma solidity >=0.8.0 <0.9.0; + +import { + ERC1643KpiLinkedRateFacet +} from "../../../../layer_1/ERC1400/ERC1643/kpiLinkedRate/ERC1643KpiLinkedRateFacet.sol"; +import { TimeTravelStorageWrapper } from "../../timeTravel/TimeTravelStorageWrapper.sol"; +import { LocalContext } from "../../../../layer_0/context/LocalContext.sol"; + +contract ERC1643KpiLinkedRateFacetTimeTravel is ERC1643KpiLinkedRateFacet, TimeTravelStorageWrapper { + function _blockTimestamp() internal view override(LocalContext, TimeTravelStorageWrapper) returns (uint256) { + return TimeTravelStorageWrapper._blockTimestamp(); + } + + function _blockNumber() internal view override(LocalContext, TimeTravelStorageWrapper) returns (uint256) { + return TimeTravelStorageWrapper._blockNumber(); + } +} diff --git a/packages/ats/contracts/contracts/test/testTimeTravel/facetsTimeTravel/eRC1643/ERC1643SustainabilityPerformanceTargetRateFacetTimeTravel.sol b/packages/ats/contracts/contracts/test/testTimeTravel/facetsTimeTravel/eRC1643/ERC1643SustainabilityPerformanceTargetRateFacetTimeTravel.sol new file mode 100644 index 000000000..03f3adeb5 --- /dev/null +++ b/packages/ats/contracts/contracts/test/testTimeTravel/facetsTimeTravel/eRC1643/ERC1643SustainabilityPerformanceTargetRateFacetTimeTravel.sol @@ -0,0 +1,21 @@ +// SPDX-License-Identifier: Apache-2.0 +pragma solidity >=0.8.0 <0.9.0; + +import { + ERC1643SustainabilityPerformanceTargetRateFacet +} from "../../../../layer_1/ERC1400/ERC1643/sustainabilityPerformanceTargetRate/ERC1643SustainabilityPerformanceTargetRateFacet.sol"; +import { TimeTravelStorageWrapper } from "../../timeTravel/TimeTravelStorageWrapper.sol"; +import { LocalContext } from "../../../../layer_0/context/LocalContext.sol"; + +contract ERC1643SustainabilityPerformanceTargetRateFacetTimeTravel is + ERC1643SustainabilityPerformanceTargetRateFacet, + TimeTravelStorageWrapper +{ + function _blockTimestamp() internal view override(LocalContext, TimeTravelStorageWrapper) returns (uint256) { + return TimeTravelStorageWrapper._blockTimestamp(); + } + + function _blockNumber() internal view override(LocalContext, TimeTravelStorageWrapper) returns (uint256) { + return TimeTravelStorageWrapper._blockNumber(); + } +} diff --git a/packages/ats/contracts/contracts/test/testTimeTravel/facetsTimeTravel/ERC1644FacetTimeTravel.sol b/packages/ats/contracts/contracts/test/testTimeTravel/facetsTimeTravel/eRC1644/ERC1644FacetTimeTravel.sol similarity index 67% rename from packages/ats/contracts/contracts/test/testTimeTravel/facetsTimeTravel/ERC1644FacetTimeTravel.sol rename to packages/ats/contracts/contracts/test/testTimeTravel/facetsTimeTravel/eRC1644/ERC1644FacetTimeTravel.sol index 5e48e879f..074022efc 100644 --- a/packages/ats/contracts/contracts/test/testTimeTravel/facetsTimeTravel/ERC1644FacetTimeTravel.sol +++ b/packages/ats/contracts/contracts/test/testTimeTravel/facetsTimeTravel/eRC1644/ERC1644FacetTimeTravel.sol @@ -3,9 +3,9 @@ pragma solidity >=0.8.0 <0.9.0; -import { ERC1644Facet } from "../../../layer_1/ERC1400/ERC1644/ERC1644Facet.sol"; -import { TimeTravelStorageWrapper } from "../timeTravel/TimeTravelStorageWrapper.sol"; -import { LocalContext } from "../../../layer_0/context/LocalContext.sol"; +import { ERC1644Facet } from "../../../../layer_1/ERC1400/ERC1644/standard/ERC1644Facet.sol"; +import { TimeTravelStorageWrapper } from "../../timeTravel/TimeTravelStorageWrapper.sol"; +import { LocalContext } from "../../../../layer_0/context/LocalContext.sol"; contract ERC1644FacetTimeTravel is ERC1644Facet, TimeTravelStorageWrapper { function _blockTimestamp() internal view override(LocalContext, TimeTravelStorageWrapper) returns (uint256) { diff --git a/packages/ats/contracts/contracts/test/testTimeTravel/facetsTimeTravel/eRC1644/ERC1644FixedRateFacetTimeTravel.sol b/packages/ats/contracts/contracts/test/testTimeTravel/facetsTimeTravel/eRC1644/ERC1644FixedRateFacetTimeTravel.sol new file mode 100644 index 000000000..db9febd31 --- /dev/null +++ b/packages/ats/contracts/contracts/test/testTimeTravel/facetsTimeTravel/eRC1644/ERC1644FixedRateFacetTimeTravel.sol @@ -0,0 +1,18 @@ +// SPDX-License-Identifier: Apache-2.0 +// Contract copy-pasted form OZ and extended + +pragma solidity >=0.8.0 <0.9.0; + +import { ERC1644FixedRateFacet } from "../../../../layer_1/ERC1400/ERC1644/fixedRate/ERC1644FixedRateFacet.sol"; +import { TimeTravelStorageWrapper } from "../../timeTravel/TimeTravelStorageWrapper.sol"; +import { LocalContext } from "../../../../layer_0/context/LocalContext.sol"; + +contract ERC1644FixedRateFacetTimeTravel is ERC1644FixedRateFacet, TimeTravelStorageWrapper { + function _blockTimestamp() internal view override(LocalContext, TimeTravelStorageWrapper) returns (uint256) { + return TimeTravelStorageWrapper._blockTimestamp(); + } + + function _blockNumber() internal view override(LocalContext, TimeTravelStorageWrapper) returns (uint256) { + return TimeTravelStorageWrapper._blockNumber(); + } +} diff --git a/packages/ats/contracts/contracts/test/testTimeTravel/facetsTimeTravel/eRC1644/ERC1644KpiLinkedRateFacetTimeTravel.sol b/packages/ats/contracts/contracts/test/testTimeTravel/facetsTimeTravel/eRC1644/ERC1644KpiLinkedRateFacetTimeTravel.sol new file mode 100644 index 000000000..263c80d5c --- /dev/null +++ b/packages/ats/contracts/contracts/test/testTimeTravel/facetsTimeTravel/eRC1644/ERC1644KpiLinkedRateFacetTimeTravel.sol @@ -0,0 +1,20 @@ +// SPDX-License-Identifier: Apache-2.0 +// Contract copy-pasted form OZ and extended + +pragma solidity >=0.8.0 <0.9.0; + +import { + ERC1644KpiLinkedRateFacet +} from "../../../../layer_1/ERC1400/ERC1644/kpiLinkedRate/ERC1644KpiLinkedRateFacet.sol"; +import { TimeTravelStorageWrapper } from "../../timeTravel/TimeTravelStorageWrapper.sol"; +import { LocalContext } from "../../../../layer_0/context/LocalContext.sol"; + +contract ERC1644KpiLinkedRateFacetTimeTravel is ERC1644KpiLinkedRateFacet, TimeTravelStorageWrapper { + function _blockTimestamp() internal view override(LocalContext, TimeTravelStorageWrapper) returns (uint256) { + return TimeTravelStorageWrapper._blockTimestamp(); + } + + function _blockNumber() internal view override(LocalContext, TimeTravelStorageWrapper) returns (uint256) { + return TimeTravelStorageWrapper._blockNumber(); + } +} diff --git a/packages/ats/contracts/contracts/test/testTimeTravel/facetsTimeTravel/eRC1644/ERC1644SustainabilityPerformanceTargetRateFacetTimeTravel.sol b/packages/ats/contracts/contracts/test/testTimeTravel/facetsTimeTravel/eRC1644/ERC1644SustainabilityPerformanceTargetRateFacetTimeTravel.sol new file mode 100644 index 000000000..2d3614810 --- /dev/null +++ b/packages/ats/contracts/contracts/test/testTimeTravel/facetsTimeTravel/eRC1644/ERC1644SustainabilityPerformanceTargetRateFacetTimeTravel.sol @@ -0,0 +1,23 @@ +// SPDX-License-Identifier: Apache-2.0 +// Contract copy-pasted form OZ and extended + +pragma solidity >=0.8.0 <0.9.0; + +import { + ERC1644SustainabilityPerformanceTargetRateFacet +} from "../../../../layer_1/ERC1400/ERC1644/sustainabilityPerformanceTargetRate/ERC1644SustainabilityPerformanceTargetRateFacet.sol"; +import { TimeTravelStorageWrapper } from "../../timeTravel/TimeTravelStorageWrapper.sol"; +import { LocalContext } from "../../../../layer_0/context/LocalContext.sol"; + +contract ERC1644SustainabilityPerformanceTargetRateFacetTimeTravel is + ERC1644SustainabilityPerformanceTargetRateFacet, + TimeTravelStorageWrapper +{ + function _blockTimestamp() internal view override(LocalContext, TimeTravelStorageWrapper) returns (uint256) { + return TimeTravelStorageWrapper._blockTimestamp(); + } + + function _blockNumber() internal view override(LocalContext, TimeTravelStorageWrapper) returns (uint256) { + return TimeTravelStorageWrapper._blockNumber(); + } +} diff --git a/packages/ats/contracts/contracts/test/testTimeTravel/facetsTimeTravel/ERC20FacetTimeTravel.sol b/packages/ats/contracts/contracts/test/testTimeTravel/facetsTimeTravel/eRC20/ERC20FacetTimeTravel.sol similarity index 68% rename from packages/ats/contracts/contracts/test/testTimeTravel/facetsTimeTravel/ERC20FacetTimeTravel.sol rename to packages/ats/contracts/contracts/test/testTimeTravel/facetsTimeTravel/eRC20/ERC20FacetTimeTravel.sol index 99123ce08..5fc4080e6 100644 --- a/packages/ats/contracts/contracts/test/testTimeTravel/facetsTimeTravel/ERC20FacetTimeTravel.sol +++ b/packages/ats/contracts/contracts/test/testTimeTravel/facetsTimeTravel/eRC20/ERC20FacetTimeTravel.sol @@ -3,9 +3,9 @@ pragma solidity >=0.8.0 <0.9.0; -import { ERC20Facet } from "../../../layer_1/ERC1400/ERC20/ERC20Facet.sol"; -import { TimeTravelStorageWrapper } from "../timeTravel/TimeTravelStorageWrapper.sol"; -import { LocalContext } from "../../../layer_0/context/LocalContext.sol"; +import { ERC20Facet } from "../../../../layer_1/ERC1400/ERC20/standard/ERC20Facet.sol"; +import { TimeTravelStorageWrapper } from "../../timeTravel/TimeTravelStorageWrapper.sol"; +import { LocalContext } from "../../../../layer_0/context/LocalContext.sol"; contract ERC20FacetTimeTravel is ERC20Facet, TimeTravelStorageWrapper { function _blockTimestamp() internal view override(LocalContext, TimeTravelStorageWrapper) returns (uint256) { diff --git a/packages/ats/contracts/contracts/test/testTimeTravel/facetsTimeTravel/eRC20/ERC20FixedRateFacetTimeTravel.sol b/packages/ats/contracts/contracts/test/testTimeTravel/facetsTimeTravel/eRC20/ERC20FixedRateFacetTimeTravel.sol new file mode 100644 index 000000000..7f582e22e --- /dev/null +++ b/packages/ats/contracts/contracts/test/testTimeTravel/facetsTimeTravel/eRC20/ERC20FixedRateFacetTimeTravel.sol @@ -0,0 +1,18 @@ +// SPDX-License-Identifier: Apache-2.0 +// Contract copy-pasted form OZ and extended + +pragma solidity >=0.8.0 <0.9.0; + +import { ERC20FixedRateFacet } from "../../../../layer_1/ERC1400/ERC20/fixedRate/ERC20FixedRateFacet.sol"; +import { TimeTravelStorageWrapper } from "../../timeTravel/TimeTravelStorageWrapper.sol"; +import { LocalContext } from "../../../../layer_0/context/LocalContext.sol"; + +contract ERC20FixedRateFacetTimeTravel is ERC20FixedRateFacet, TimeTravelStorageWrapper { + function _blockTimestamp() internal view override(LocalContext, TimeTravelStorageWrapper) returns (uint256) { + return TimeTravelStorageWrapper._blockTimestamp(); + } + + function _blockNumber() internal view override(LocalContext, TimeTravelStorageWrapper) returns (uint256) { + return TimeTravelStorageWrapper._blockNumber(); + } +} diff --git a/packages/ats/contracts/contracts/test/testTimeTravel/facetsTimeTravel/eRC20/ERC20KpiLinkedRateFacetTimeTravel.sol b/packages/ats/contracts/contracts/test/testTimeTravel/facetsTimeTravel/eRC20/ERC20KpiLinkedRateFacetTimeTravel.sol new file mode 100644 index 000000000..44172aa2e --- /dev/null +++ b/packages/ats/contracts/contracts/test/testTimeTravel/facetsTimeTravel/eRC20/ERC20KpiLinkedRateFacetTimeTravel.sol @@ -0,0 +1,18 @@ +// SPDX-License-Identifier: Apache-2.0 +// Contract copy-pasted form OZ and extended + +pragma solidity >=0.8.0 <0.9.0; + +import { ERC20KpiLinkedRateFacet } from "../../../../layer_1/ERC1400/ERC20/kpiLinkedRate/ERC20KpiLinkedRateFacet.sol"; +import { TimeTravelStorageWrapper } from "../../timeTravel/TimeTravelStorageWrapper.sol"; +import { LocalContext } from "../../../../layer_0/context/LocalContext.sol"; + +contract ERC20KpiLinkedRateFacetTimeTravel is ERC20KpiLinkedRateFacet, TimeTravelStorageWrapper { + function _blockTimestamp() internal view override(LocalContext, TimeTravelStorageWrapper) returns (uint256) { + return TimeTravelStorageWrapper._blockTimestamp(); + } + + function _blockNumber() internal view override(LocalContext, TimeTravelStorageWrapper) returns (uint256) { + return TimeTravelStorageWrapper._blockNumber(); + } +} diff --git a/packages/ats/contracts/contracts/test/testTimeTravel/facetsTimeTravel/eRC20/ERC20SustainabilityPerformanceTargetRateFacetTimeTravel.sol b/packages/ats/contracts/contracts/test/testTimeTravel/facetsTimeTravel/eRC20/ERC20SustainabilityPerformanceTargetRateFacetTimeTravel.sol new file mode 100644 index 000000000..4326d22cb --- /dev/null +++ b/packages/ats/contracts/contracts/test/testTimeTravel/facetsTimeTravel/eRC20/ERC20SustainabilityPerformanceTargetRateFacetTimeTravel.sol @@ -0,0 +1,23 @@ +// SPDX-License-Identifier: Apache-2.0 +// Contract copy-pasted form OZ and extended + +pragma solidity >=0.8.0 <0.9.0; + +import { + ERC20SustainabilityPerformanceTargetRateFacet +} from "../../../../layer_1/ERC1400/ERC20/sustainabilityPerformanceTargetRate/ERC20SustainabilityPerformanceTargetRateFacet.sol"; +import { TimeTravelStorageWrapper } from "../../timeTravel/TimeTravelStorageWrapper.sol"; +import { LocalContext } from "../../../../layer_0/context/LocalContext.sol"; + +contract ERC20SustainabilityPerformanceTargetRateFacetTimeTravel is + ERC20SustainabilityPerformanceTargetRateFacet, + TimeTravelStorageWrapper +{ + function _blockTimestamp() internal view override(LocalContext, TimeTravelStorageWrapper) returns (uint256) { + return TimeTravelStorageWrapper._blockTimestamp(); + } + + function _blockNumber() internal view override(LocalContext, TimeTravelStorageWrapper) returns (uint256) { + return TimeTravelStorageWrapper._blockNumber(); + } +} diff --git a/packages/ats/contracts/contracts/test/testTimeTravel/facetsTimeTravel/ERC20PermitFacetTimeTravel.sol b/packages/ats/contracts/contracts/test/testTimeTravel/facetsTimeTravel/eRC20Permit/ERC20PermitFacetTimeTravel.sol similarity index 67% rename from packages/ats/contracts/contracts/test/testTimeTravel/facetsTimeTravel/ERC20PermitFacetTimeTravel.sol rename to packages/ats/contracts/contracts/test/testTimeTravel/facetsTimeTravel/eRC20Permit/ERC20PermitFacetTimeTravel.sol index 622c1a2fe..dd140df93 100644 --- a/packages/ats/contracts/contracts/test/testTimeTravel/facetsTimeTravel/ERC20PermitFacetTimeTravel.sol +++ b/packages/ats/contracts/contracts/test/testTimeTravel/facetsTimeTravel/eRC20Permit/ERC20PermitFacetTimeTravel.sol @@ -3,9 +3,9 @@ pragma solidity >=0.8.0 <0.9.0; -import { ERC20PermitFacet } from "../../../layer_1/ERC1400/ERC20Permit/ERC20PermitFacet.sol"; -import { TimeTravelStorageWrapper } from "../timeTravel/TimeTravelStorageWrapper.sol"; -import { LocalContext } from "../../../layer_0/context/LocalContext.sol"; +import { ERC20PermitFacet } from "../../../../layer_1/ERC1400/ERC20Permit/standard/ERC20PermitFacet.sol"; +import { TimeTravelStorageWrapper } from "../../timeTravel/TimeTravelStorageWrapper.sol"; +import { LocalContext } from "../../../../layer_0/context/LocalContext.sol"; contract ERC20PermitFacetTimeTravel is ERC20PermitFacet, TimeTravelStorageWrapper { function _blockTimestamp() internal view override(LocalContext, TimeTravelStorageWrapper) returns (uint256) { diff --git a/packages/ats/contracts/contracts/test/testTimeTravel/facetsTimeTravel/eRC20Permit/ERC20PermitFixedRateFacetTimeTravel.sol b/packages/ats/contracts/contracts/test/testTimeTravel/facetsTimeTravel/eRC20Permit/ERC20PermitFixedRateFacetTimeTravel.sol new file mode 100644 index 000000000..095b16f7c --- /dev/null +++ b/packages/ats/contracts/contracts/test/testTimeTravel/facetsTimeTravel/eRC20Permit/ERC20PermitFixedRateFacetTimeTravel.sol @@ -0,0 +1,20 @@ +// SPDX-License-Identifier: Apache-2.0 +// Contract copy-pasted form OZ and extended + +pragma solidity >=0.8.0 <0.9.0; + +import { + ERC20PermitFixedRateFacet +} from "../../../../layer_1/ERC1400/ERC20Permit/fixedRate/ERC20PermitFixedRateFacet.sol"; +import { TimeTravelStorageWrapper } from "../../timeTravel/TimeTravelStorageWrapper.sol"; +import { LocalContext } from "../../../../layer_0/context/LocalContext.sol"; + +contract ERC20PermitFixedRateFacetTimeTravel is ERC20PermitFixedRateFacet, TimeTravelStorageWrapper { + function _blockTimestamp() internal view override(LocalContext, TimeTravelStorageWrapper) returns (uint256) { + return TimeTravelStorageWrapper._blockTimestamp(); + } + + function _blockNumber() internal view override(LocalContext, TimeTravelStorageWrapper) returns (uint256) { + return TimeTravelStorageWrapper._blockNumber(); + } +} diff --git a/packages/ats/contracts/contracts/test/testTimeTravel/facetsTimeTravel/eRC20Permit/ERC20PermitKpiLinkedRateFacetTimeTravel.sol b/packages/ats/contracts/contracts/test/testTimeTravel/facetsTimeTravel/eRC20Permit/ERC20PermitKpiLinkedRateFacetTimeTravel.sol new file mode 100644 index 000000000..b1738d656 --- /dev/null +++ b/packages/ats/contracts/contracts/test/testTimeTravel/facetsTimeTravel/eRC20Permit/ERC20PermitKpiLinkedRateFacetTimeTravel.sol @@ -0,0 +1,20 @@ +// SPDX-License-Identifier: Apache-2.0 +// Contract copy-pasted form OZ and extended + +pragma solidity >=0.8.0 <0.9.0; + +import { + ERC20PermitKpiLinkedRateFacet +} from "../../../../layer_1/ERC1400/ERC20Permit/kpiLinkedRate/ERC20PermitKpiLinkedRateFacet.sol"; +import { TimeTravelStorageWrapper } from "../../timeTravel/TimeTravelStorageWrapper.sol"; +import { LocalContext } from "../../../../layer_0/context/LocalContext.sol"; + +contract ERC20PermitKpiLinkedRateFacetTimeTravel is ERC20PermitKpiLinkedRateFacet, TimeTravelStorageWrapper { + function _blockTimestamp() internal view override(LocalContext, TimeTravelStorageWrapper) returns (uint256) { + return TimeTravelStorageWrapper._blockTimestamp(); + } + + function _blockNumber() internal view override(LocalContext, TimeTravelStorageWrapper) returns (uint256) { + return TimeTravelStorageWrapper._blockNumber(); + } +} diff --git a/packages/ats/contracts/contracts/test/testTimeTravel/facetsTimeTravel/eRC20Permit/ERC20PermitSustainabilityPerformanceTargetRateFacetTimeTravel.sol b/packages/ats/contracts/contracts/test/testTimeTravel/facetsTimeTravel/eRC20Permit/ERC20PermitSustainabilityPerformanceTargetRateFacetTimeTravel.sol new file mode 100644 index 000000000..4ddcba367 --- /dev/null +++ b/packages/ats/contracts/contracts/test/testTimeTravel/facetsTimeTravel/eRC20Permit/ERC20PermitSustainabilityPerformanceTargetRateFacetTimeTravel.sol @@ -0,0 +1,23 @@ +// SPDX-License-Identifier: Apache-2.0 +// Contract copy-pasted form OZ and extended + +pragma solidity >=0.8.0 <0.9.0; + +import { + ERC20PermitSustainabilityPerformanceTargetRateFacet +} from "../../../../layer_1/ERC1400/ERC20Permit/sustainabilityPerformanceTargetRate/ERC20PermitSustainabilityPerformanceTargetRateFacet.sol"; +import { TimeTravelStorageWrapper } from "../../timeTravel/TimeTravelStorageWrapper.sol"; +import { LocalContext } from "../../../../layer_0/context/LocalContext.sol"; + +contract ERC20PermitSustainabilityPerformanceTargetRateFacetTimeTravel is + ERC20PermitSustainabilityPerformanceTargetRateFacet, + TimeTravelStorageWrapper +{ + function _blockTimestamp() internal view override(LocalContext, TimeTravelStorageWrapper) returns (uint256) { + return TimeTravelStorageWrapper._blockTimestamp(); + } + + function _blockNumber() internal view override(LocalContext, TimeTravelStorageWrapper) returns (uint256) { + return TimeTravelStorageWrapper._blockNumber(); + } +} diff --git a/packages/ats/contracts/contracts/test/testTimeTravel/facetsTimeTravel/ERC20VotesFacetTimeTravel.sol b/packages/ats/contracts/contracts/test/testTimeTravel/facetsTimeTravel/eRC20Votes/ERC20VotesFacetTimeTravel.sol similarity index 67% rename from packages/ats/contracts/contracts/test/testTimeTravel/facetsTimeTravel/ERC20VotesFacetTimeTravel.sol rename to packages/ats/contracts/contracts/test/testTimeTravel/facetsTimeTravel/eRC20Votes/ERC20VotesFacetTimeTravel.sol index cb46f21e3..caeb7d070 100644 --- a/packages/ats/contracts/contracts/test/testTimeTravel/facetsTimeTravel/ERC20VotesFacetTimeTravel.sol +++ b/packages/ats/contracts/contracts/test/testTimeTravel/facetsTimeTravel/eRC20Votes/ERC20VotesFacetTimeTravel.sol @@ -3,9 +3,9 @@ pragma solidity >=0.8.0 <0.9.0; -import { ERC20VotesFacet } from "../../../layer_1/ERC1400/ERC20Votes/ERC20VotesFacet.sol"; -import { TimeTravelStorageWrapper } from "../timeTravel/TimeTravelStorageWrapper.sol"; -import { LocalContext } from "../../../layer_0/context/LocalContext.sol"; +import { ERC20VotesFacet } from "../../../../layer_1/ERC1400/ERC20Votes/standard/ERC20VotesFacet.sol"; +import { TimeTravelStorageWrapper } from "../../timeTravel/TimeTravelStorageWrapper.sol"; +import { LocalContext } from "../../../../layer_0/context/LocalContext.sol"; contract ERC20VotesFacetTimeTravel is ERC20VotesFacet, TimeTravelStorageWrapper { function _blockTimestamp() internal view override(LocalContext, TimeTravelStorageWrapper) returns (uint256) { diff --git a/packages/ats/contracts/contracts/test/testTimeTravel/facetsTimeTravel/eRC20Votes/ERC20VotesFixedRateFacetTimeTravel.sol b/packages/ats/contracts/contracts/test/testTimeTravel/facetsTimeTravel/eRC20Votes/ERC20VotesFixedRateFacetTimeTravel.sol new file mode 100644 index 000000000..79a6b7c46 --- /dev/null +++ b/packages/ats/contracts/contracts/test/testTimeTravel/facetsTimeTravel/eRC20Votes/ERC20VotesFixedRateFacetTimeTravel.sol @@ -0,0 +1,20 @@ +// SPDX-License-Identifier: Apache-2.0 +// Contract copy-pasted form OZ and extended + +pragma solidity >=0.8.0 <0.9.0; + +import { + ERC20VotesFixedRateFacet +} from "../../../../layer_1/ERC1400/ERC20Votes/fixedRate/ERC20VotesFixedRateFacet.sol"; +import { TimeTravelStorageWrapper } from "../../timeTravel/TimeTravelStorageWrapper.sol"; +import { LocalContext } from "../../../../layer_0/context/LocalContext.sol"; + +contract ERC20VotesFixedRateFacetTimeTravel is ERC20VotesFixedRateFacet, TimeTravelStorageWrapper { + function _blockTimestamp() internal view override(LocalContext, TimeTravelStorageWrapper) returns (uint256) { + return TimeTravelStorageWrapper._blockTimestamp(); + } + + function _blockNumber() internal view override(LocalContext, TimeTravelStorageWrapper) returns (uint256) { + return TimeTravelStorageWrapper._blockNumber(); + } +} diff --git a/packages/ats/contracts/contracts/test/testTimeTravel/facetsTimeTravel/eRC20Votes/ERC20VotesKpiLinkedRateFacetTimeTravel.sol b/packages/ats/contracts/contracts/test/testTimeTravel/facetsTimeTravel/eRC20Votes/ERC20VotesKpiLinkedRateFacetTimeTravel.sol new file mode 100644 index 000000000..e6cc8eccc --- /dev/null +++ b/packages/ats/contracts/contracts/test/testTimeTravel/facetsTimeTravel/eRC20Votes/ERC20VotesKpiLinkedRateFacetTimeTravel.sol @@ -0,0 +1,20 @@ +// SPDX-License-Identifier: Apache-2.0 +// Contract copy-pasted form OZ and extended + +pragma solidity >=0.8.0 <0.9.0; + +import { + ERC20VotesKpiLinkedRateFacet +} from "../../../../layer_1/ERC1400/ERC20Votes/kpiLinkedRate/ERC20VotesKpiLinkedRateFacet.sol"; +import { TimeTravelStorageWrapper } from "../../timeTravel/TimeTravelStorageWrapper.sol"; +import { LocalContext } from "../../../../layer_0/context/LocalContext.sol"; + +contract ERC20VotesKpiLinkedRateFacetTimeTravel is ERC20VotesKpiLinkedRateFacet, TimeTravelStorageWrapper { + function _blockTimestamp() internal view override(LocalContext, TimeTravelStorageWrapper) returns (uint256) { + return TimeTravelStorageWrapper._blockTimestamp(); + } + + function _blockNumber() internal view override(LocalContext, TimeTravelStorageWrapper) returns (uint256) { + return TimeTravelStorageWrapper._blockNumber(); + } +} diff --git a/packages/ats/contracts/contracts/test/testTimeTravel/facetsTimeTravel/eRC20Votes/ERC20VotesSustainabilityPerformanceTargetRateFacetTimeTravel.sol b/packages/ats/contracts/contracts/test/testTimeTravel/facetsTimeTravel/eRC20Votes/ERC20VotesSustainabilityPerformanceTargetRateFacetTimeTravel.sol new file mode 100644 index 000000000..811f01fb2 --- /dev/null +++ b/packages/ats/contracts/contracts/test/testTimeTravel/facetsTimeTravel/eRC20Votes/ERC20VotesSustainabilityPerformanceTargetRateFacetTimeTravel.sol @@ -0,0 +1,23 @@ +// SPDX-License-Identifier: Apache-2.0 +// Contract copy-pasted form OZ and extended + +pragma solidity >=0.8.0 <0.9.0; + +import { + ERC20VotesSustainabilityPerformanceTargetRateFacet +} from "../../../../layer_1/ERC1400/ERC20Votes/sustainabilityPerformanceTargetRate/ERC20VotesSustainabilityPerformanceTargetRateFacet.sol"; +import { TimeTravelStorageWrapper } from "../../timeTravel/TimeTravelStorageWrapper.sol"; +import { LocalContext } from "../../../../layer_0/context/LocalContext.sol"; + +contract ERC20VotesSustainabilityPerformanceTargetRateFacetTimeTravel is + ERC20VotesSustainabilityPerformanceTargetRateFacet, + TimeTravelStorageWrapper +{ + function _blockTimestamp() internal view override(LocalContext, TimeTravelStorageWrapper) returns (uint256) { + return TimeTravelStorageWrapper._blockTimestamp(); + } + + function _blockNumber() internal view override(LocalContext, TimeTravelStorageWrapper) returns (uint256) { + return TimeTravelStorageWrapper._blockNumber(); + } +} diff --git a/packages/ats/contracts/contracts/test/testTimeTravel/facetsTimeTravel/ERC3643BatchFacetTimeTravel.sol b/packages/ats/contracts/contracts/test/testTimeTravel/facetsTimeTravel/eRC3643Batch/ERC3643BatchFacetTimeTravel.sol similarity index 68% rename from packages/ats/contracts/contracts/test/testTimeTravel/facetsTimeTravel/ERC3643BatchFacetTimeTravel.sol rename to packages/ats/contracts/contracts/test/testTimeTravel/facetsTimeTravel/eRC3643Batch/ERC3643BatchFacetTimeTravel.sol index 47ee0e67c..cbf61532f 100644 --- a/packages/ats/contracts/contracts/test/testTimeTravel/facetsTimeTravel/ERC3643BatchFacetTimeTravel.sol +++ b/packages/ats/contracts/contracts/test/testTimeTravel/facetsTimeTravel/eRC3643Batch/ERC3643BatchFacetTimeTravel.sol @@ -3,9 +3,9 @@ pragma solidity >=0.8.0 <0.9.0; -import { ERC3643BatchFacet } from "../../../layer_1/ERC3643/ERC3643BatchFacet.sol"; -import { TimeTravelStorageWrapper } from "../timeTravel/TimeTravelStorageWrapper.sol"; -import { LocalContext } from "../../../layer_0/context/LocalContext.sol"; +import { ERC3643BatchFacet } from "../../../../layer_1/ERC3643/standard/ERC3643BatchFacet.sol"; +import { TimeTravelStorageWrapper } from "../../timeTravel/TimeTravelStorageWrapper.sol"; +import { LocalContext } from "../../../../layer_0/context/LocalContext.sol"; contract ERC3643BatchFacetTimeTravel is ERC3643BatchFacet, TimeTravelStorageWrapper { function _blockTimestamp() internal view override(LocalContext, TimeTravelStorageWrapper) returns (uint256) { diff --git a/packages/ats/contracts/contracts/test/testTimeTravel/facetsTimeTravel/eRC3643Batch/ERC3643BatchFixedRateFacetTimeTravel.sol b/packages/ats/contracts/contracts/test/testTimeTravel/facetsTimeTravel/eRC3643Batch/ERC3643BatchFixedRateFacetTimeTravel.sol new file mode 100644 index 000000000..8813a962d --- /dev/null +++ b/packages/ats/contracts/contracts/test/testTimeTravel/facetsTimeTravel/eRC3643Batch/ERC3643BatchFixedRateFacetTimeTravel.sol @@ -0,0 +1,18 @@ +// SPDX-License-Identifier: Apache-2.0 +// Contract copy-pasted form OZ and extended + +pragma solidity >=0.8.0 <0.9.0; + +import { ERC3643BatchFixedRateFacet } from "../../../../layer_1/ERC3643/fixedRate/ERC3643BatchFixedRateFacet.sol"; +import { TimeTravelStorageWrapper } from "../../timeTravel/TimeTravelStorageWrapper.sol"; +import { LocalContext } from "../../../../layer_0/context/LocalContext.sol"; + +contract ERC3643BatchFixedRateFacetTimeTravel is ERC3643BatchFixedRateFacet, TimeTravelStorageWrapper { + function _blockTimestamp() internal view override(LocalContext, TimeTravelStorageWrapper) returns (uint256) { + return TimeTravelStorageWrapper._blockTimestamp(); + } + + function _blockNumber() internal view override(LocalContext, TimeTravelStorageWrapper) returns (uint256) { + return TimeTravelStorageWrapper._blockNumber(); + } +} diff --git a/packages/ats/contracts/contracts/test/testTimeTravel/facetsTimeTravel/eRC3643Batch/ERC3643BatchKpiLinkedRateFacetTimeTravel.sol b/packages/ats/contracts/contracts/test/testTimeTravel/facetsTimeTravel/eRC3643Batch/ERC3643BatchKpiLinkedRateFacetTimeTravel.sol new file mode 100644 index 000000000..6ae6fb8ab --- /dev/null +++ b/packages/ats/contracts/contracts/test/testTimeTravel/facetsTimeTravel/eRC3643Batch/ERC3643BatchKpiLinkedRateFacetTimeTravel.sol @@ -0,0 +1,20 @@ +// SPDX-License-Identifier: Apache-2.0 +// Contract copy-pasted form OZ and extended + +pragma solidity >=0.8.0 <0.9.0; + +import { + ERC3643BatchKpiLinkedRateFacet +} from "../../../../layer_1/ERC3643/kpiLinkedRate/ERC3643BatchKpiLinkedRateFacet.sol"; +import { TimeTravelStorageWrapper } from "../../timeTravel/TimeTravelStorageWrapper.sol"; +import { LocalContext } from "../../../../layer_0/context/LocalContext.sol"; + +contract ERC3643BatchKpiLinkedRateFacetTimeTravel is ERC3643BatchKpiLinkedRateFacet, TimeTravelStorageWrapper { + function _blockTimestamp() internal view override(LocalContext, TimeTravelStorageWrapper) returns (uint256) { + return TimeTravelStorageWrapper._blockTimestamp(); + } + + function _blockNumber() internal view override(LocalContext, TimeTravelStorageWrapper) returns (uint256) { + return TimeTravelStorageWrapper._blockNumber(); + } +} diff --git a/packages/ats/contracts/contracts/test/testTimeTravel/facetsTimeTravel/eRC3643Batch/ERC3643BatchSustainabilityPerformanceTargetRateFacetTimeTravel.sol b/packages/ats/contracts/contracts/test/testTimeTravel/facetsTimeTravel/eRC3643Batch/ERC3643BatchSustainabilityPerformanceTargetRateFacetTimeTravel.sol new file mode 100644 index 000000000..a025a604b --- /dev/null +++ b/packages/ats/contracts/contracts/test/testTimeTravel/facetsTimeTravel/eRC3643Batch/ERC3643BatchSustainabilityPerformanceTargetRateFacetTimeTravel.sol @@ -0,0 +1,23 @@ +// SPDX-License-Identifier: Apache-2.0 +// Contract copy-pasted form OZ and extended + +pragma solidity >=0.8.0 <0.9.0; + +import { + ERC3643BatchSustainabilityPerformanceTargetRateFacet +} from "../../../../layer_1/ERC3643/sustainabilityPerformanceTargetRate/ERC3643BatchSustainabilityPerformanceTargetRateFacet.sol"; +import { TimeTravelStorageWrapper } from "../../timeTravel/TimeTravelStorageWrapper.sol"; +import { LocalContext } from "../../../../layer_0/context/LocalContext.sol"; + +contract ERC3643BatchSustainabilityPerformanceTargetRateFacetTimeTravel is + ERC3643BatchSustainabilityPerformanceTargetRateFacet, + TimeTravelStorageWrapper +{ + function _blockTimestamp() internal view override(LocalContext, TimeTravelStorageWrapper) returns (uint256) { + return TimeTravelStorageWrapper._blockTimestamp(); + } + + function _blockNumber() internal view override(LocalContext, TimeTravelStorageWrapper) returns (uint256) { + return TimeTravelStorageWrapper._blockNumber(); + } +} diff --git a/packages/ats/contracts/contracts/test/testTimeTravel/facetsTimeTravel/ERC3643ManagementFacetTimeTravel.sol b/packages/ats/contracts/contracts/test/testTimeTravel/facetsTimeTravel/eRC3643Management/ERC3643ManagementFacetTimeTravel.sol similarity index 67% rename from packages/ats/contracts/contracts/test/testTimeTravel/facetsTimeTravel/ERC3643ManagementFacetTimeTravel.sol rename to packages/ats/contracts/contracts/test/testTimeTravel/facetsTimeTravel/eRC3643Management/ERC3643ManagementFacetTimeTravel.sol index ad967d35d..63e9e5673 100644 --- a/packages/ats/contracts/contracts/test/testTimeTravel/facetsTimeTravel/ERC3643ManagementFacetTimeTravel.sol +++ b/packages/ats/contracts/contracts/test/testTimeTravel/facetsTimeTravel/eRC3643Management/ERC3643ManagementFacetTimeTravel.sol @@ -3,9 +3,9 @@ pragma solidity >=0.8.0 <0.9.0; -import { ERC3643ManagementFacet } from "../../../layer_1/ERC3643/ERC3643ManagementFacet.sol"; -import { TimeTravelStorageWrapper } from "../timeTravel/TimeTravelStorageWrapper.sol"; -import { LocalContext } from "../../../layer_0/context/LocalContext.sol"; +import { ERC3643ManagementFacet } from "../../../../layer_1/ERC3643/standard/ERC3643ManagementFacet.sol"; +import { TimeTravelStorageWrapper } from "../../timeTravel/TimeTravelStorageWrapper.sol"; +import { LocalContext } from "../../../../layer_0/context/LocalContext.sol"; contract ERC3643ManagementFacetTimeTravel is ERC3643ManagementFacet, TimeTravelStorageWrapper { function _blockTimestamp() internal view override(LocalContext, TimeTravelStorageWrapper) returns (uint256) { diff --git a/packages/ats/contracts/contracts/test/testTimeTravel/facetsTimeTravel/eRC3643Management/ERC3643ManagementFixedRateFacetTimeTravel.sol b/packages/ats/contracts/contracts/test/testTimeTravel/facetsTimeTravel/eRC3643Management/ERC3643ManagementFixedRateFacetTimeTravel.sol new file mode 100644 index 000000000..57371142e --- /dev/null +++ b/packages/ats/contracts/contracts/test/testTimeTravel/facetsTimeTravel/eRC3643Management/ERC3643ManagementFixedRateFacetTimeTravel.sol @@ -0,0 +1,20 @@ +// SPDX-License-Identifier: Apache-2.0 +// Contract copy-pasted form OZ and extended + +pragma solidity >=0.8.0 <0.9.0; + +import { + ERC3643ManagementFixedRateFacet +} from "../../../../layer_1/ERC3643/fixedRate/ERC3643ManagementFixedRateFacet.sol"; +import { TimeTravelStorageWrapper } from "../../timeTravel/TimeTravelStorageWrapper.sol"; +import { LocalContext } from "../../../../layer_0/context/LocalContext.sol"; + +contract ERC3643ManagementFixedRateFacetTimeTravel is ERC3643ManagementFixedRateFacet, TimeTravelStorageWrapper { + function _blockTimestamp() internal view override(LocalContext, TimeTravelStorageWrapper) returns (uint256) { + return TimeTravelStorageWrapper._blockTimestamp(); + } + + function _blockNumber() internal view override(LocalContext, TimeTravelStorageWrapper) returns (uint256) { + return TimeTravelStorageWrapper._blockNumber(); + } +} diff --git a/packages/ats/contracts/contracts/test/testTimeTravel/facetsTimeTravel/eRC3643Management/ERC3643ManagementKpiLinkedRateFacetTimeTravel.sol b/packages/ats/contracts/contracts/test/testTimeTravel/facetsTimeTravel/eRC3643Management/ERC3643ManagementKpiLinkedRateFacetTimeTravel.sol new file mode 100644 index 000000000..cba80b1f8 --- /dev/null +++ b/packages/ats/contracts/contracts/test/testTimeTravel/facetsTimeTravel/eRC3643Management/ERC3643ManagementKpiLinkedRateFacetTimeTravel.sol @@ -0,0 +1,23 @@ +// SPDX-License-Identifier: Apache-2.0 +// Contract copy-pasted form OZ and extended + +pragma solidity >=0.8.0 <0.9.0; + +import { + ERC3643ManagementKpiLinkedRateFacet +} from "../../../../layer_1/ERC3643/kpiLinkedRate/ERC3643ManagementKpiLinkedRateFacet.sol"; +import { TimeTravelStorageWrapper } from "../../timeTravel/TimeTravelStorageWrapper.sol"; +import { LocalContext } from "../../../../layer_0/context/LocalContext.sol"; + +contract ERC3643ManagementKpiLinkedRateFacetTimeTravel is + ERC3643ManagementKpiLinkedRateFacet, + TimeTravelStorageWrapper +{ + function _blockTimestamp() internal view override(LocalContext, TimeTravelStorageWrapper) returns (uint256) { + return TimeTravelStorageWrapper._blockTimestamp(); + } + + function _blockNumber() internal view override(LocalContext, TimeTravelStorageWrapper) returns (uint256) { + return TimeTravelStorageWrapper._blockNumber(); + } +} diff --git a/packages/ats/contracts/contracts/test/testTimeTravel/facetsTimeTravel/eRC3643Management/ERC3643ManagementSustainabilityPerformanceTargetRateFacetTimeTravel.sol b/packages/ats/contracts/contracts/test/testTimeTravel/facetsTimeTravel/eRC3643Management/ERC3643ManagementSustainabilityPerformanceTargetRateFacetTimeTravel.sol new file mode 100644 index 000000000..45824161b --- /dev/null +++ b/packages/ats/contracts/contracts/test/testTimeTravel/facetsTimeTravel/eRC3643Management/ERC3643ManagementSustainabilityPerformanceTargetRateFacetTimeTravel.sol @@ -0,0 +1,23 @@ +// SPDX-License-Identifier: Apache-2.0 +// Contract copy-pasted form OZ and extended + +pragma solidity >=0.8.0 <0.9.0; + +import { + ERC3643ManagementSustainabilityPerformanceTargetRateFacet +} from "../../../../layer_1/ERC3643/sustainabilityPerformanceTargetRate/ERC3643ManagementSustainabilityPerformanceTargetRateFacet.sol"; +import { TimeTravelStorageWrapper } from "../../timeTravel/TimeTravelStorageWrapper.sol"; +import { LocalContext } from "../../../../layer_0/context/LocalContext.sol"; + +contract ERC3643ManagementSustainabilityPerformanceTargetRateFacetTimeTravel is + ERC3643ManagementSustainabilityPerformanceTargetRateFacet, + TimeTravelStorageWrapper +{ + function _blockTimestamp() internal view override(LocalContext, TimeTravelStorageWrapper) returns (uint256) { + return TimeTravelStorageWrapper._blockTimestamp(); + } + + function _blockNumber() internal view override(LocalContext, TimeTravelStorageWrapper) returns (uint256) { + return TimeTravelStorageWrapper._blockNumber(); + } +} diff --git a/packages/ats/contracts/contracts/test/testTimeTravel/facetsTimeTravel/ERC3643OperationsFacetTimeTravel.sol b/packages/ats/contracts/contracts/test/testTimeTravel/facetsTimeTravel/eRC3643Operations/ERC3643OperationsFacetTimeTravel.sol similarity index 67% rename from packages/ats/contracts/contracts/test/testTimeTravel/facetsTimeTravel/ERC3643OperationsFacetTimeTravel.sol rename to packages/ats/contracts/contracts/test/testTimeTravel/facetsTimeTravel/eRC3643Operations/ERC3643OperationsFacetTimeTravel.sol index 49929e461..03bb57b40 100644 --- a/packages/ats/contracts/contracts/test/testTimeTravel/facetsTimeTravel/ERC3643OperationsFacetTimeTravel.sol +++ b/packages/ats/contracts/contracts/test/testTimeTravel/facetsTimeTravel/eRC3643Operations/ERC3643OperationsFacetTimeTravel.sol @@ -3,9 +3,9 @@ pragma solidity >=0.8.0 <0.9.0; -import { ERC3643OperationsFacet } from "../../../layer_1/ERC3643/ERC3643OperationsFacet.sol"; -import { TimeTravelStorageWrapper } from "../timeTravel/TimeTravelStorageWrapper.sol"; -import { LocalContext } from "../../../layer_0/context/LocalContext.sol"; +import { ERC3643OperationsFacet } from "../../../../layer_1/ERC3643/standard/ERC3643OperationsFacet.sol"; +import { TimeTravelStorageWrapper } from "../../timeTravel/TimeTravelStorageWrapper.sol"; +import { LocalContext } from "../../../../layer_0/context/LocalContext.sol"; contract ERC3643OperationsFacetTimeTravel is ERC3643OperationsFacet, TimeTravelStorageWrapper { function _blockTimestamp() internal view override(LocalContext, TimeTravelStorageWrapper) returns (uint256) { diff --git a/packages/ats/contracts/contracts/test/testTimeTravel/facetsTimeTravel/eRC3643Operations/ERC3643OperationsFixedRateFacetTimeTravel.sol b/packages/ats/contracts/contracts/test/testTimeTravel/facetsTimeTravel/eRC3643Operations/ERC3643OperationsFixedRateFacetTimeTravel.sol new file mode 100644 index 000000000..04e0b123e --- /dev/null +++ b/packages/ats/contracts/contracts/test/testTimeTravel/facetsTimeTravel/eRC3643Operations/ERC3643OperationsFixedRateFacetTimeTravel.sol @@ -0,0 +1,20 @@ +// SPDX-License-Identifier: Apache-2.0 +// Contract copy-pasted form OZ and extended + +pragma solidity >=0.8.0 <0.9.0; + +import { + ERC3643OperationsFixedRateFacet +} from "../../../../layer_1/ERC3643/fixedRate/ERC3643OperationsFixedRateFacet.sol"; +import { TimeTravelStorageWrapper } from "../../timeTravel/TimeTravelStorageWrapper.sol"; +import { LocalContext } from "../../../../layer_0/context/LocalContext.sol"; + +contract ERC3643OperationsFixedRateFacetTimeTravel is ERC3643OperationsFixedRateFacet, TimeTravelStorageWrapper { + function _blockTimestamp() internal view override(LocalContext, TimeTravelStorageWrapper) returns (uint256) { + return TimeTravelStorageWrapper._blockTimestamp(); + } + + function _blockNumber() internal view override(LocalContext, TimeTravelStorageWrapper) returns (uint256) { + return TimeTravelStorageWrapper._blockNumber(); + } +} diff --git a/packages/ats/contracts/contracts/test/testTimeTravel/facetsTimeTravel/eRC3643Operations/ERC3643OperationsKpiLinkedRateFacetTimeTravel.sol b/packages/ats/contracts/contracts/test/testTimeTravel/facetsTimeTravel/eRC3643Operations/ERC3643OperationsKpiLinkedRateFacetTimeTravel.sol new file mode 100644 index 000000000..88062717d --- /dev/null +++ b/packages/ats/contracts/contracts/test/testTimeTravel/facetsTimeTravel/eRC3643Operations/ERC3643OperationsKpiLinkedRateFacetTimeTravel.sol @@ -0,0 +1,23 @@ +// SPDX-License-Identifier: Apache-2.0 +// Contract copy-pasted form OZ and extended + +pragma solidity >=0.8.0 <0.9.0; + +import { + ERC3643OperationsKpiLinkedRateFacet +} from "../../../../layer_1/ERC3643/kpiLinkedRate/ERC3643OperationsKpiLinkedRateFacet.sol"; +import { TimeTravelStorageWrapper } from "../../timeTravel/TimeTravelStorageWrapper.sol"; +import { LocalContext } from "../../../../layer_0/context/LocalContext.sol"; + +contract ERC3643OperationsKpiLinkedRateFacetTimeTravel is + ERC3643OperationsKpiLinkedRateFacet, + TimeTravelStorageWrapper +{ + function _blockTimestamp() internal view override(LocalContext, TimeTravelStorageWrapper) returns (uint256) { + return TimeTravelStorageWrapper._blockTimestamp(); + } + + function _blockNumber() internal view override(LocalContext, TimeTravelStorageWrapper) returns (uint256) { + return TimeTravelStorageWrapper._blockNumber(); + } +} diff --git a/packages/ats/contracts/contracts/test/testTimeTravel/facetsTimeTravel/eRC3643Operations/ERC3643OperationsSustainabilityPerformanceTargetRateFacetTimeTravel.sol b/packages/ats/contracts/contracts/test/testTimeTravel/facetsTimeTravel/eRC3643Operations/ERC3643OperationsSustainabilityPerformanceTargetRateFacetTimeTravel.sol new file mode 100644 index 000000000..4d436ba3e --- /dev/null +++ b/packages/ats/contracts/contracts/test/testTimeTravel/facetsTimeTravel/eRC3643Operations/ERC3643OperationsSustainabilityPerformanceTargetRateFacetTimeTravel.sol @@ -0,0 +1,23 @@ +// SPDX-License-Identifier: Apache-2.0 +// Contract copy-pasted form OZ and extended + +pragma solidity >=0.8.0 <0.9.0; + +import { + ERC3643OperationsSustainabilityPerformanceTargetRateFacet +} from "../../../../layer_1/ERC3643/sustainabilityPerformanceTargetRate/ERC3643OperationsSustainabilityPerformanceTargetRateFacet.sol"; +import { TimeTravelStorageWrapper } from "../../timeTravel/TimeTravelStorageWrapper.sol"; +import { LocalContext } from "../../../../layer_0/context/LocalContext.sol"; + +contract ERC3643OperationsSustainabilityPerformanceTargetRateFacetTimeTravel is + ERC3643OperationsSustainabilityPerformanceTargetRateFacet, + TimeTravelStorageWrapper +{ + function _blockTimestamp() internal view override(LocalContext, TimeTravelStorageWrapper) returns (uint256) { + return TimeTravelStorageWrapper._blockTimestamp(); + } + + function _blockNumber() internal view override(LocalContext, TimeTravelStorageWrapper) returns (uint256) { + return TimeTravelStorageWrapper._blockNumber(); + } +} diff --git a/packages/ats/contracts/contracts/test/testTimeTravel/facetsTimeTravel/ERC3643ReadFacetTimeTravel.sol b/packages/ats/contracts/contracts/test/testTimeTravel/facetsTimeTravel/eRC3643Read/ERC3643ReadFacetTimeTravel.sol similarity index 68% rename from packages/ats/contracts/contracts/test/testTimeTravel/facetsTimeTravel/ERC3643ReadFacetTimeTravel.sol rename to packages/ats/contracts/contracts/test/testTimeTravel/facetsTimeTravel/eRC3643Read/ERC3643ReadFacetTimeTravel.sol index 30d133edb..d94408c20 100644 --- a/packages/ats/contracts/contracts/test/testTimeTravel/facetsTimeTravel/ERC3643ReadFacetTimeTravel.sol +++ b/packages/ats/contracts/contracts/test/testTimeTravel/facetsTimeTravel/eRC3643Read/ERC3643ReadFacetTimeTravel.sol @@ -3,9 +3,9 @@ pragma solidity >=0.8.0 <0.9.0; -import { ERC3643ReadFacet } from "../../../layer_1/ERC3643/ERC3643ReadFacet.sol"; -import { TimeTravelStorageWrapper } from "../timeTravel/TimeTravelStorageWrapper.sol"; -import { LocalContext } from "../../../layer_0/context/LocalContext.sol"; +import { ERC3643ReadFacet } from "../../../../layer_1/ERC3643/standard/ERC3643ReadFacet.sol"; +import { TimeTravelStorageWrapper } from "../../timeTravel/TimeTravelStorageWrapper.sol"; +import { LocalContext } from "../../../../layer_0/context/LocalContext.sol"; contract ERC3643ReadFacetTimeTravel is ERC3643ReadFacet, TimeTravelStorageWrapper { function _blockTimestamp() internal view override(LocalContext, TimeTravelStorageWrapper) returns (uint256) { diff --git a/packages/ats/contracts/contracts/test/testTimeTravel/facetsTimeTravel/eRC3643Read/ERC3643ReadFixedRateFacetTimeTravel.sol b/packages/ats/contracts/contracts/test/testTimeTravel/facetsTimeTravel/eRC3643Read/ERC3643ReadFixedRateFacetTimeTravel.sol new file mode 100644 index 000000000..41fc8fff7 --- /dev/null +++ b/packages/ats/contracts/contracts/test/testTimeTravel/facetsTimeTravel/eRC3643Read/ERC3643ReadFixedRateFacetTimeTravel.sol @@ -0,0 +1,18 @@ +// SPDX-License-Identifier: Apache-2.0 +// Contract copy-pasted form OZ and extended + +pragma solidity >=0.8.0 <0.9.0; + +import { ERC3643ReadFixedRateFacet } from "../../../../layer_1/ERC3643/fixedRate/ERC3643ReadFixedRateFacet.sol"; +import { TimeTravelStorageWrapper } from "../../timeTravel/TimeTravelStorageWrapper.sol"; +import { LocalContext } from "../../../../layer_0/context/LocalContext.sol"; + +contract ERC3643ReadFixedRateFacetTimeTravel is ERC3643ReadFixedRateFacet, TimeTravelStorageWrapper { + function _blockTimestamp() internal view override(LocalContext, TimeTravelStorageWrapper) returns (uint256) { + return TimeTravelStorageWrapper._blockTimestamp(); + } + + function _blockNumber() internal view override(LocalContext, TimeTravelStorageWrapper) returns (uint256) { + return TimeTravelStorageWrapper._blockNumber(); + } +} diff --git a/packages/ats/contracts/contracts/test/testTimeTravel/facetsTimeTravel/eRC3643Read/ERC3643ReadKpiLinkedRateFacetTimeTravel.sol b/packages/ats/contracts/contracts/test/testTimeTravel/facetsTimeTravel/eRC3643Read/ERC3643ReadKpiLinkedRateFacetTimeTravel.sol new file mode 100644 index 000000000..5a1650a17 --- /dev/null +++ b/packages/ats/contracts/contracts/test/testTimeTravel/facetsTimeTravel/eRC3643Read/ERC3643ReadKpiLinkedRateFacetTimeTravel.sol @@ -0,0 +1,20 @@ +// SPDX-License-Identifier: Apache-2.0 +// Contract copy-pasted form OZ and extended + +pragma solidity >=0.8.0 <0.9.0; + +import { + ERC3643ReadKpiLinkedRateFacet +} from "../../../../layer_1/ERC3643/kpiLinkedRate/ERC3643ReadKpiLinkedRateFacet.sol"; +import { TimeTravelStorageWrapper } from "../../timeTravel/TimeTravelStorageWrapper.sol"; +import { LocalContext } from "../../../../layer_0/context/LocalContext.sol"; + +contract ERC3643ReadKpiLinkedRateFacetTimeTravel is ERC3643ReadKpiLinkedRateFacet, TimeTravelStorageWrapper { + function _blockTimestamp() internal view override(LocalContext, TimeTravelStorageWrapper) returns (uint256) { + return TimeTravelStorageWrapper._blockTimestamp(); + } + + function _blockNumber() internal view override(LocalContext, TimeTravelStorageWrapper) returns (uint256) { + return TimeTravelStorageWrapper._blockNumber(); + } +} diff --git a/packages/ats/contracts/contracts/test/testTimeTravel/facetsTimeTravel/eRC3643Read/ERC3643ReadSustainabilityPerformanceTargetRateFacetTimeTravel.sol b/packages/ats/contracts/contracts/test/testTimeTravel/facetsTimeTravel/eRC3643Read/ERC3643ReadSustainabilityPerformanceTargetRateFacetTimeTravel.sol new file mode 100644 index 000000000..1268f4a03 --- /dev/null +++ b/packages/ats/contracts/contracts/test/testTimeTravel/facetsTimeTravel/eRC3643Read/ERC3643ReadSustainabilityPerformanceTargetRateFacetTimeTravel.sol @@ -0,0 +1,23 @@ +// SPDX-License-Identifier: Apache-2.0 +// Contract copy-pasted form OZ and extended + +pragma solidity >=0.8.0 <0.9.0; + +import { + ERC3643ReadSustainabilityPerformanceTargetRateFacet +} from "../../../../layer_1/ERC3643/sustainabilityPerformanceTargetRate/ERC3643ReadSustainabilityPerformanceTargetRateFacet.sol"; +import { TimeTravelStorageWrapper } from "../../timeTravel/TimeTravelStorageWrapper.sol"; +import { LocalContext } from "../../../../layer_0/context/LocalContext.sol"; + +contract ERC3643ReadSustainabilityPerformanceTargetRateFacetTimeTravel is + ERC3643ReadSustainabilityPerformanceTargetRateFacet, + TimeTravelStorageWrapper +{ + function _blockTimestamp() internal view override(LocalContext, TimeTravelStorageWrapper) returns (uint256) { + return TimeTravelStorageWrapper._blockTimestamp(); + } + + function _blockNumber() internal view override(LocalContext, TimeTravelStorageWrapper) returns (uint256) { + return TimeTravelStorageWrapper._blockNumber(); + } +} diff --git a/packages/ats/contracts/contracts/test/testTimeTravel/facetsTimeTravel/EquityUSAFacetTimeTravel.sol b/packages/ats/contracts/contracts/test/testTimeTravel/facetsTimeTravel/equityUSA/EquityUSAFacetTimeTravel.sol similarity index 67% rename from packages/ats/contracts/contracts/test/testTimeTravel/facetsTimeTravel/EquityUSAFacetTimeTravel.sol rename to packages/ats/contracts/contracts/test/testTimeTravel/facetsTimeTravel/equityUSA/EquityUSAFacetTimeTravel.sol index 84c86e9cb..4cc35aaa8 100644 --- a/packages/ats/contracts/contracts/test/testTimeTravel/facetsTimeTravel/EquityUSAFacetTimeTravel.sol +++ b/packages/ats/contracts/contracts/test/testTimeTravel/facetsTimeTravel/equityUSA/EquityUSAFacetTimeTravel.sol @@ -1,9 +1,9 @@ // SPDX-License-Identifier: Apache-2.0 pragma solidity >=0.8.0 <0.9.0; -import { EquityUSAFacet } from "../../../layer_3/equityUSA/EquityUSAFacet.sol"; -import { TimeTravelStorageWrapper } from "../timeTravel/TimeTravelStorageWrapper.sol"; -import { LocalContext } from "../../../layer_0/context/LocalContext.sol"; +import { EquityUSAFacet } from "../../../../layer_3/equityUSA/EquityUSAFacet.sol"; +import { TimeTravelStorageWrapper } from "../../timeTravel/TimeTravelStorageWrapper.sol"; +import { LocalContext } from "../../../../layer_0/context/LocalContext.sol"; contract EquityUSAFacetTimeTravel is EquityUSAFacet, TimeTravelStorageWrapper { function _blockTimestamp() internal view override(LocalContext, TimeTravelStorageWrapper) returns (uint256) { diff --git a/packages/ats/contracts/contracts/test/testTimeTravel/facetsTimeTravel/ExternalControlListManagementFacetTimeTravel.sol b/packages/ats/contracts/contracts/test/testTimeTravel/facetsTimeTravel/externalControlListManagement/ExternalControlListManagementFacetTimeTravel.sol similarity index 69% rename from packages/ats/contracts/contracts/test/testTimeTravel/facetsTimeTravel/ExternalControlListManagementFacetTimeTravel.sol rename to packages/ats/contracts/contracts/test/testTimeTravel/facetsTimeTravel/externalControlListManagement/ExternalControlListManagementFacetTimeTravel.sol index 08ab770b2..e2b8b42c7 100644 --- a/packages/ats/contracts/contracts/test/testTimeTravel/facetsTimeTravel/ExternalControlListManagementFacetTimeTravel.sol +++ b/packages/ats/contracts/contracts/test/testTimeTravel/facetsTimeTravel/externalControlListManagement/ExternalControlListManagementFacetTimeTravel.sol @@ -3,9 +3,9 @@ pragma solidity >=0.8.0 <0.9.0; import { ExternalControlListManagementFacet -} from "../../../layer_1/externalControlLists/ExternalControlListManagementFacet.sol"; -import { TimeTravelStorageWrapper } from "../timeTravel/TimeTravelStorageWrapper.sol"; -import { LocalContext } from "../../../layer_0/context/LocalContext.sol"; +} from "contracts/layer_1/externalControlLists/standard/ExternalControlListManagementFacet.sol"; +import { TimeTravelStorageWrapper } from "../../timeTravel/TimeTravelStorageWrapper.sol"; +import { LocalContext } from "contracts/layer_0/context/LocalContext.sol"; contract ExternalControlListManagementFacetTimeTravel is ExternalControlListManagementFacet, TimeTravelStorageWrapper { function _blockTimestamp() internal view override(LocalContext, TimeTravelStorageWrapper) returns (uint256) { diff --git a/packages/ats/contracts/contracts/test/testTimeTravel/facetsTimeTravel/externalControlListManagement/ExternalControlListManagementFixedRateFacetTimeTravel.sol b/packages/ats/contracts/contracts/test/testTimeTravel/facetsTimeTravel/externalControlListManagement/ExternalControlListManagementFixedRateFacetTimeTravel.sol new file mode 100644 index 000000000..107ffecaf --- /dev/null +++ b/packages/ats/contracts/contracts/test/testTimeTravel/facetsTimeTravel/externalControlListManagement/ExternalControlListManagementFixedRateFacetTimeTravel.sol @@ -0,0 +1,21 @@ +// SPDX-License-Identifier: Apache-2.0 +pragma solidity >=0.8.0 <0.9.0; + +import { + ExternalControlListManagementFixedRateFacet +} from "contracts/layer_1/externalControlLists/fixedRate/ExternalControlListManagementFixedRateFacet.sol"; +import { TimeTravelStorageWrapper } from "../../timeTravel/TimeTravelStorageWrapper.sol"; +import { LocalContext } from "contracts/layer_0/context/LocalContext.sol"; + +contract ExternalControlListManagementFixedRateFacetTimeTravel is + ExternalControlListManagementFixedRateFacet, + TimeTravelStorageWrapper +{ + function _blockTimestamp() internal view override(LocalContext, TimeTravelStorageWrapper) returns (uint256) { + return TimeTravelStorageWrapper._blockTimestamp(); + } + + function _blockNumber() internal view override(LocalContext, TimeTravelStorageWrapper) returns (uint256) { + return TimeTravelStorageWrapper._blockNumber(); + } +} diff --git a/packages/ats/contracts/contracts/test/testTimeTravel/facetsTimeTravel/externalControlListManagement/ExternalControlListManagementKpiLinkedRateFacetTimeTravel.sol b/packages/ats/contracts/contracts/test/testTimeTravel/facetsTimeTravel/externalControlListManagement/ExternalControlListManagementKpiLinkedRateFacetTimeTravel.sol new file mode 100644 index 000000000..792205f51 --- /dev/null +++ b/packages/ats/contracts/contracts/test/testTimeTravel/facetsTimeTravel/externalControlListManagement/ExternalControlListManagementKpiLinkedRateFacetTimeTravel.sol @@ -0,0 +1,21 @@ +// SPDX-License-Identifier: Apache-2.0 +pragma solidity >=0.8.0 <0.9.0; + +import { + ExternalControlListManagementKpiLinkedRateFacet +} from "contracts/layer_1/externalControlLists/kpiLinkedRate/ExternalControlListManagementKpiLinkedRateFacet.sol"; +import { TimeTravelStorageWrapper } from "../../timeTravel/TimeTravelStorageWrapper.sol"; +import { LocalContext } from "contracts/layer_0/context/LocalContext.sol"; + +contract ExternalControlListManagementKpiLinkedRateFacetTimeTravel is + ExternalControlListManagementKpiLinkedRateFacet, + TimeTravelStorageWrapper +{ + function _blockTimestamp() internal view override(LocalContext, TimeTravelStorageWrapper) returns (uint256) { + return TimeTravelStorageWrapper._blockTimestamp(); + } + + function _blockNumber() internal view override(LocalContext, TimeTravelStorageWrapper) returns (uint256) { + return TimeTravelStorageWrapper._blockNumber(); + } +} diff --git a/packages/ats/contracts/contracts/test/testTimeTravel/facetsTimeTravel/externalControlListManagement/ExternalControlListManagementSustainabilityPerformanceTargetRateFacetTimeTravel.sol b/packages/ats/contracts/contracts/test/testTimeTravel/facetsTimeTravel/externalControlListManagement/ExternalControlListManagementSustainabilityPerformanceTargetRateFacetTimeTravel.sol new file mode 100644 index 000000000..3241abc6d --- /dev/null +++ b/packages/ats/contracts/contracts/test/testTimeTravel/facetsTimeTravel/externalControlListManagement/ExternalControlListManagementSustainabilityPerformanceTargetRateFacetTimeTravel.sol @@ -0,0 +1,21 @@ +// SPDX-License-Identifier: Apache-2.0 +pragma solidity >=0.8.0 <0.9.0; + +import { + ExternalControlListManagementSustainabilityPerformanceTargetRateFacet +} from "contracts/layer_1/externalControlLists/sustainabilityPerformanceTargetRate/ExternalControlListManagementSustainabilityPerformanceTargetRateFacet.sol"; +import { TimeTravelStorageWrapper } from "../../timeTravel/TimeTravelStorageWrapper.sol"; +import { LocalContext } from "contracts/layer_0/context/LocalContext.sol"; + +contract ExternalControlListManagementSustainabilityPerformanceTargetRateFacetTimeTravel is + ExternalControlListManagementSustainabilityPerformanceTargetRateFacet, + TimeTravelStorageWrapper +{ + function _blockTimestamp() internal view override(LocalContext, TimeTravelStorageWrapper) returns (uint256) { + return TimeTravelStorageWrapper._blockTimestamp(); + } + + function _blockNumber() internal view override(LocalContext, TimeTravelStorageWrapper) returns (uint256) { + return TimeTravelStorageWrapper._blockNumber(); + } +} diff --git a/packages/ats/contracts/contracts/test/testTimeTravel/facetsTimeTravel/ExternalKycListManagementFacetTimeTravel.sol b/packages/ats/contracts/contracts/test/testTimeTravel/facetsTimeTravel/externalKycListManagement/ExternalKycListManagementFacetTimeTravel.sol similarity index 64% rename from packages/ats/contracts/contracts/test/testTimeTravel/facetsTimeTravel/ExternalKycListManagementFacetTimeTravel.sol rename to packages/ats/contracts/contracts/test/testTimeTravel/facetsTimeTravel/externalKycListManagement/ExternalKycListManagementFacetTimeTravel.sol index e7f4f8466..ddb703b38 100644 --- a/packages/ats/contracts/contracts/test/testTimeTravel/facetsTimeTravel/ExternalKycListManagementFacetTimeTravel.sol +++ b/packages/ats/contracts/contracts/test/testTimeTravel/facetsTimeTravel/externalKycListManagement/ExternalKycListManagementFacetTimeTravel.sol @@ -1,9 +1,11 @@ // SPDX-License-Identifier: Apache-2.0 pragma solidity >=0.8.0 <0.9.0; -import { ExternalKycListManagementFacet } from "../../../layer_1/externalKycLists/ExternalKycListManagementFacet.sol"; -import { TimeTravelStorageWrapper } from "../timeTravel/TimeTravelStorageWrapper.sol"; -import { LocalContext } from "../../../layer_0/context/LocalContext.sol"; +import { + ExternalKycListManagementFacet +} from "../../../../layer_1/externalKycLists/standard/ExternalKycListManagementFacet.sol"; +import { TimeTravelStorageWrapper } from "../../timeTravel/TimeTravelStorageWrapper.sol"; +import { LocalContext } from "../../../../layer_0/context/LocalContext.sol"; contract ExternalKycListManagementFacetTimeTravel is ExternalKycListManagementFacet, TimeTravelStorageWrapper { function _blockTimestamp() internal view override(LocalContext, TimeTravelStorageWrapper) returns (uint256) { diff --git a/packages/ats/contracts/contracts/test/testTimeTravel/facetsTimeTravel/externalKycListManagement/ExternalKycListManagementFixedRateFacetTimeTravel.sol b/packages/ats/contracts/contracts/test/testTimeTravel/facetsTimeTravel/externalKycListManagement/ExternalKycListManagementFixedRateFacetTimeTravel.sol new file mode 100644 index 000000000..852866f55 --- /dev/null +++ b/packages/ats/contracts/contracts/test/testTimeTravel/facetsTimeTravel/externalKycListManagement/ExternalKycListManagementFixedRateFacetTimeTravel.sol @@ -0,0 +1,21 @@ +// SPDX-License-Identifier: Apache-2.0 +pragma solidity >=0.8.0 <0.9.0; + +import { + ExternalKycListManagementFixedRateFacet +} from "contracts/layer_1/externalKycLists/fixedRate/ExternalKycListManagementFixedRateFacet.sol"; +import { TimeTravelStorageWrapper } from "../../timeTravel/TimeTravelStorageWrapper.sol"; +import { LocalContext } from "contracts/layer_0/context/LocalContext.sol"; + +contract ExternalKycListManagementFixedRateFacetTimeTravel is + ExternalKycListManagementFixedRateFacet, + TimeTravelStorageWrapper +{ + function _blockTimestamp() internal view override(LocalContext, TimeTravelStorageWrapper) returns (uint256) { + return TimeTravelStorageWrapper._blockTimestamp(); + } + + function _blockNumber() internal view override(LocalContext, TimeTravelStorageWrapper) returns (uint256) { + return TimeTravelStorageWrapper._blockNumber(); + } +} diff --git a/packages/ats/contracts/contracts/test/testTimeTravel/facetsTimeTravel/externalKycListManagement/ExternalKycListManagementKpiLinkedRateFacetTimeTravel.sol b/packages/ats/contracts/contracts/test/testTimeTravel/facetsTimeTravel/externalKycListManagement/ExternalKycListManagementKpiLinkedRateFacetTimeTravel.sol new file mode 100644 index 000000000..84a360475 --- /dev/null +++ b/packages/ats/contracts/contracts/test/testTimeTravel/facetsTimeTravel/externalKycListManagement/ExternalKycListManagementKpiLinkedRateFacetTimeTravel.sol @@ -0,0 +1,21 @@ +// SPDX-License-Identifier: Apache-2.0 +pragma solidity >=0.8.0 <0.9.0; + +import { + ExternalKycListManagementKpiLinkedRateFacet +} from "contracts/layer_1/externalKycLists/kpiLinkedRate/ExternalKycListManagementKpiLinkedRateFacet.sol"; +import { TimeTravelStorageWrapper } from "../../timeTravel/TimeTravelStorageWrapper.sol"; +import { LocalContext } from "contracts/layer_0/context/LocalContext.sol"; + +contract ExternalKycListManagementKpiLinkedRateFacetTimeTravel is + ExternalKycListManagementKpiLinkedRateFacet, + TimeTravelStorageWrapper +{ + function _blockTimestamp() internal view override(LocalContext, TimeTravelStorageWrapper) returns (uint256) { + return TimeTravelStorageWrapper._blockTimestamp(); + } + + function _blockNumber() internal view override(LocalContext, TimeTravelStorageWrapper) returns (uint256) { + return TimeTravelStorageWrapper._blockNumber(); + } +} diff --git a/packages/ats/contracts/contracts/test/testTimeTravel/facetsTimeTravel/externalKycListManagement/ExternalKycListManagementSustainabilityPerformanceTargetRateFacetTimeTravel.sol b/packages/ats/contracts/contracts/test/testTimeTravel/facetsTimeTravel/externalKycListManagement/ExternalKycListManagementSustainabilityPerformanceTargetRateFacetTimeTravel.sol new file mode 100644 index 000000000..77da6d4e5 --- /dev/null +++ b/packages/ats/contracts/contracts/test/testTimeTravel/facetsTimeTravel/externalKycListManagement/ExternalKycListManagementSustainabilityPerformanceTargetRateFacetTimeTravel.sol @@ -0,0 +1,21 @@ +// SPDX-License-Identifier: Apache-2.0 +pragma solidity >=0.8.0 <0.9.0; + +import { + ExternalKycListManagementSustainabilityPerformanceTargetRateFacet +} from "contracts/layer_1/externalKycLists/sustainabilityPerformanceTargetRate/ExternalKycListManagementSustainabilityPerformanceTargetRateFacet.sol"; +import { TimeTravelStorageWrapper } from "../../timeTravel/TimeTravelStorageWrapper.sol"; +import { LocalContext } from "contracts/layer_0/context/LocalContext.sol"; + +contract ExternalKycListManagementSustainabilityPerformanceTargetRateFacetTimeTravel is + ExternalKycListManagementSustainabilityPerformanceTargetRateFacet, + TimeTravelStorageWrapper +{ + function _blockTimestamp() internal view override(LocalContext, TimeTravelStorageWrapper) returns (uint256) { + return TimeTravelStorageWrapper._blockTimestamp(); + } + + function _blockNumber() internal view override(LocalContext, TimeTravelStorageWrapper) returns (uint256) { + return TimeTravelStorageWrapper._blockNumber(); + } +} diff --git a/packages/ats/contracts/contracts/test/testTimeTravel/facetsTimeTravel/ExternalPauseManagementFacetTimeTravel.sol b/packages/ats/contracts/contracts/test/testTimeTravel/facetsTimeTravel/externalPauseManagement/ExternalPauseManagementFacetTimeTravel.sol similarity index 64% rename from packages/ats/contracts/contracts/test/testTimeTravel/facetsTimeTravel/ExternalPauseManagementFacetTimeTravel.sol rename to packages/ats/contracts/contracts/test/testTimeTravel/facetsTimeTravel/externalPauseManagement/ExternalPauseManagementFacetTimeTravel.sol index 1aa2fcd35..73dc6bd69 100644 --- a/packages/ats/contracts/contracts/test/testTimeTravel/facetsTimeTravel/ExternalPauseManagementFacetTimeTravel.sol +++ b/packages/ats/contracts/contracts/test/testTimeTravel/facetsTimeTravel/externalPauseManagement/ExternalPauseManagementFacetTimeTravel.sol @@ -1,9 +1,11 @@ // SPDX-License-Identifier: Apache-2.0 pragma solidity >=0.8.0 <0.9.0; -import { ExternalPauseManagementFacet } from "../../../layer_1/externalPauses/ExternalPauseManagementFacet.sol"; -import { TimeTravelStorageWrapper } from "../timeTravel/TimeTravelStorageWrapper.sol"; -import { LocalContext } from "../../../layer_0/context/LocalContext.sol"; +import { + ExternalPauseManagementFacet +} from "../../../../layer_1/externalPauses/standard/ExternalPauseManagementFacet.sol"; +import { TimeTravelStorageWrapper } from "../../timeTravel/TimeTravelStorageWrapper.sol"; +import { LocalContext } from "../../../../layer_0/context/LocalContext.sol"; contract ExternalPauseManagementFacetTimeTravel is ExternalPauseManagementFacet, TimeTravelStorageWrapper { function _blockTimestamp() internal view override(LocalContext, TimeTravelStorageWrapper) returns (uint256) { diff --git a/packages/ats/contracts/contracts/test/testTimeTravel/facetsTimeTravel/externalPauseManagement/ExternalPauseManagementFixedRateFacetTimeTravel.sol b/packages/ats/contracts/contracts/test/testTimeTravel/facetsTimeTravel/externalPauseManagement/ExternalPauseManagementFixedRateFacetTimeTravel.sol new file mode 100644 index 000000000..a14c9d7cf --- /dev/null +++ b/packages/ats/contracts/contracts/test/testTimeTravel/facetsTimeTravel/externalPauseManagement/ExternalPauseManagementFixedRateFacetTimeTravel.sol @@ -0,0 +1,21 @@ +// SPDX-License-Identifier: Apache-2.0 +pragma solidity >=0.8.0 <0.9.0; + +import { + ExternalPauseManagementFixedRateFacet +} from "contracts/layer_1/externalPauses/fixedRate/ExternalPauseManagementFixedRateFacet.sol"; +import { TimeTravelStorageWrapper } from "../../timeTravel/TimeTravelStorageWrapper.sol"; +import { LocalContext } from "contracts/layer_0/context/LocalContext.sol"; + +contract ExternalPauseManagementFixedRateFacetTimeTravel is + ExternalPauseManagementFixedRateFacet, + TimeTravelStorageWrapper +{ + function _blockTimestamp() internal view override(LocalContext, TimeTravelStorageWrapper) returns (uint256) { + return TimeTravelStorageWrapper._blockTimestamp(); + } + + function _blockNumber() internal view override(LocalContext, TimeTravelStorageWrapper) returns (uint256) { + return TimeTravelStorageWrapper._blockNumber(); + } +} diff --git a/packages/ats/contracts/contracts/test/testTimeTravel/facetsTimeTravel/externalPauseManagement/ExternalPauseManagementKpiLinkedRateFacetTimeTravel.sol b/packages/ats/contracts/contracts/test/testTimeTravel/facetsTimeTravel/externalPauseManagement/ExternalPauseManagementKpiLinkedRateFacetTimeTravel.sol new file mode 100644 index 000000000..05545ef87 --- /dev/null +++ b/packages/ats/contracts/contracts/test/testTimeTravel/facetsTimeTravel/externalPauseManagement/ExternalPauseManagementKpiLinkedRateFacetTimeTravel.sol @@ -0,0 +1,21 @@ +// SPDX-License-Identifier: Apache-2.0 +pragma solidity >=0.8.0 <0.9.0; + +import { + ExternalPauseManagementKpiLinkedRateFacet +} from "contracts/layer_1/externalPauses/kpiLinkedRate/ExternalPauseManagementKpiLinkedRateFacet.sol"; +import { TimeTravelStorageWrapper } from "../../timeTravel/TimeTravelStorageWrapper.sol"; +import { LocalContext } from "contracts/layer_0/context/LocalContext.sol"; + +contract ExternalPauseManagementKpiLinkedRateFacetTimeTravel is + ExternalPauseManagementKpiLinkedRateFacet, + TimeTravelStorageWrapper +{ + function _blockTimestamp() internal view override(LocalContext, TimeTravelStorageWrapper) returns (uint256) { + return TimeTravelStorageWrapper._blockTimestamp(); + } + + function _blockNumber() internal view override(LocalContext, TimeTravelStorageWrapper) returns (uint256) { + return TimeTravelStorageWrapper._blockNumber(); + } +} diff --git a/packages/ats/contracts/contracts/test/testTimeTravel/facetsTimeTravel/externalPauseManagement/ExternalPauseManagementSustainabilityPerformanceTargetRateFacetTimeTravel.sol b/packages/ats/contracts/contracts/test/testTimeTravel/facetsTimeTravel/externalPauseManagement/ExternalPauseManagementSustainabilityPerformanceTargetRateFacetTimeTravel.sol new file mode 100644 index 000000000..a2c20f431 --- /dev/null +++ b/packages/ats/contracts/contracts/test/testTimeTravel/facetsTimeTravel/externalPauseManagement/ExternalPauseManagementSustainabilityPerformanceTargetRateFacetTimeTravel.sol @@ -0,0 +1,21 @@ +// SPDX-License-Identifier: Apache-2.0 +pragma solidity >=0.8.0 <0.9.0; + +import { + ExternalPauseManagementSustainabilityPerformanceTargetRateFacet +} from "contracts/layer_1/externalPauses/sustainabilityPerformanceTargetRate/ExternalPauseManagementSustainabilityPerformanceTargetRateFacet.sol"; +import { TimeTravelStorageWrapper } from "../../timeTravel/TimeTravelStorageWrapper.sol"; +import { LocalContext } from "contracts/layer_0/context/LocalContext.sol"; + +contract ExternalPauseManagementSustainabilityPerformanceTargetRateFacetTimeTravel is + ExternalPauseManagementSustainabilityPerformanceTargetRateFacet, + TimeTravelStorageWrapper +{ + function _blockTimestamp() internal view override(LocalContext, TimeTravelStorageWrapper) returns (uint256) { + return TimeTravelStorageWrapper._blockTimestamp(); + } + + function _blockNumber() internal view override(LocalContext, TimeTravelStorageWrapper) returns (uint256) { + return TimeTravelStorageWrapper._blockNumber(); + } +} diff --git a/packages/ats/contracts/contracts/test/testTimeTravel/facetsTimeTravel/fixedRate/FixedRateFacetTimeTravel.sol b/packages/ats/contracts/contracts/test/testTimeTravel/facetsTimeTravel/fixedRate/FixedRateFacetTimeTravel.sol new file mode 100644 index 000000000..9577c04b8 --- /dev/null +++ b/packages/ats/contracts/contracts/test/testTimeTravel/facetsTimeTravel/fixedRate/FixedRateFacetTimeTravel.sol @@ -0,0 +1,16 @@ +// SPDX-License-Identifier: Apache-2.0 +pragma solidity >=0.8.0 <0.9.0; + +import { FixedRateFacet } from "../../../../layer_2/interestRates/fixedRate/FixedRateFacet.sol"; +import { TimeTravelStorageWrapper } from "../../timeTravel/TimeTravelStorageWrapper.sol"; +import { LocalContext } from "../../../../layer_0/context/LocalContext.sol"; + +contract FixedRateFacetTimeTravel is FixedRateFacet, TimeTravelStorageWrapper { + function _blockTimestamp() internal view override(LocalContext, TimeTravelStorageWrapper) returns (uint256) { + return TimeTravelStorageWrapper._blockTimestamp(); + } + + function _blockNumber() internal view override(LocalContext, TimeTravelStorageWrapper) returns (uint256) { + return TimeTravelStorageWrapper._blockNumber(); + } +} diff --git a/packages/ats/contracts/contracts/test/testTimeTravel/facetsTimeTravel/FreezeFacetTimeTravel.sol b/packages/ats/contracts/contracts/test/testTimeTravel/facetsTimeTravel/freeze/FreezeFacetTimeTravel.sol similarity index 68% rename from packages/ats/contracts/contracts/test/testTimeTravel/facetsTimeTravel/FreezeFacetTimeTravel.sol rename to packages/ats/contracts/contracts/test/testTimeTravel/facetsTimeTravel/freeze/FreezeFacetTimeTravel.sol index 295f1bf36..181f1c831 100644 --- a/packages/ats/contracts/contracts/test/testTimeTravel/facetsTimeTravel/FreezeFacetTimeTravel.sol +++ b/packages/ats/contracts/contracts/test/testTimeTravel/facetsTimeTravel/freeze/FreezeFacetTimeTravel.sol @@ -3,9 +3,9 @@ pragma solidity >=0.8.0 <0.9.0; -import { FreezeFacet } from "../../../layer_1/freeze/FreezeFacet.sol"; -import { TimeTravelStorageWrapper } from "../timeTravel/TimeTravelStorageWrapper.sol"; -import { LocalContext } from "../../../layer_0/context/LocalContext.sol"; +import { FreezeFacet } from "../../../../layer_1/freeze/standard/FreezeFacet.sol"; +import { TimeTravelStorageWrapper } from "../../timeTravel/TimeTravelStorageWrapper.sol"; +import { LocalContext } from "../../../../layer_0/context/LocalContext.sol"; contract FreezeFacetTimeTravel is FreezeFacet, TimeTravelStorageWrapper { function _blockTimestamp() internal view override(LocalContext, TimeTravelStorageWrapper) returns (uint256) { diff --git a/packages/ats/contracts/contracts/test/testTimeTravel/facetsTimeTravel/freeze/FreezeFixedRateFacetTimeTravel.sol b/packages/ats/contracts/contracts/test/testTimeTravel/facetsTimeTravel/freeze/FreezeFixedRateFacetTimeTravel.sol new file mode 100644 index 000000000..6c6e1a00f --- /dev/null +++ b/packages/ats/contracts/contracts/test/testTimeTravel/facetsTimeTravel/freeze/FreezeFixedRateFacetTimeTravel.sol @@ -0,0 +1,16 @@ +// SPDX-License-Identifier: Apache-2.0 +pragma solidity >=0.8.0 <0.9.0; + +import { FreezeFixedRateFacet } from "contracts/layer_1/freeze/fixedRate/FreezeFixedRateFacet.sol"; +import { TimeTravelStorageWrapper } from "../../timeTravel/TimeTravelStorageWrapper.sol"; +import { LocalContext } from "contracts/layer_0/context/LocalContext.sol"; + +contract FreezeFixedRateFacetTimeTravel is FreezeFixedRateFacet, TimeTravelStorageWrapper { + function _blockTimestamp() internal view override(LocalContext, TimeTravelStorageWrapper) returns (uint256) { + return TimeTravelStorageWrapper._blockTimestamp(); + } + + function _blockNumber() internal view override(LocalContext, TimeTravelStorageWrapper) returns (uint256) { + return TimeTravelStorageWrapper._blockNumber(); + } +} diff --git a/packages/ats/contracts/contracts/test/testTimeTravel/facetsTimeTravel/freeze/FreezeKpiLinkedRateFacetTimeTravel.sol b/packages/ats/contracts/contracts/test/testTimeTravel/facetsTimeTravel/freeze/FreezeKpiLinkedRateFacetTimeTravel.sol new file mode 100644 index 000000000..4fd15dfba --- /dev/null +++ b/packages/ats/contracts/contracts/test/testTimeTravel/facetsTimeTravel/freeze/FreezeKpiLinkedRateFacetTimeTravel.sol @@ -0,0 +1,16 @@ +// SPDX-License-Identifier: Apache-2.0 +pragma solidity >=0.8.0 <0.9.0; + +import { FreezeKpiLinkedRateFacet } from "contracts/layer_1/freeze/kpiLinkedRate/FreezeKpiLinkedRateFacet.sol"; +import { TimeTravelStorageWrapper } from "../../timeTravel/TimeTravelStorageWrapper.sol"; +import { LocalContext } from "contracts/layer_0/context/LocalContext.sol"; + +contract FreezeKpiLinkedRateFacetTimeTravel is FreezeKpiLinkedRateFacet, TimeTravelStorageWrapper { + function _blockTimestamp() internal view override(LocalContext, TimeTravelStorageWrapper) returns (uint256) { + return TimeTravelStorageWrapper._blockTimestamp(); + } + + function _blockNumber() internal view override(LocalContext, TimeTravelStorageWrapper) returns (uint256) { + return TimeTravelStorageWrapper._blockNumber(); + } +} diff --git a/packages/ats/contracts/contracts/test/testTimeTravel/facetsTimeTravel/freeze/FreezeSustainabilityPerformanceTargetRateFacetTimeTravel.sol b/packages/ats/contracts/contracts/test/testTimeTravel/facetsTimeTravel/freeze/FreezeSustainabilityPerformanceTargetRateFacetTimeTravel.sol new file mode 100644 index 000000000..29e8ca77a --- /dev/null +++ b/packages/ats/contracts/contracts/test/testTimeTravel/facetsTimeTravel/freeze/FreezeSustainabilityPerformanceTargetRateFacetTimeTravel.sol @@ -0,0 +1,21 @@ +// SPDX-License-Identifier: Apache-2.0 +pragma solidity >=0.8.0 <0.9.0; + +import { + FreezeSustainabilityPerformanceTargetRateFacet +} from "contracts/layer_1/freeze/sustainabilityPerformanceTargetRate/FreezeSustainabilityPerformanceTargetRateFacet.sol"; +import { TimeTravelStorageWrapper } from "../../timeTravel/TimeTravelStorageWrapper.sol"; +import { LocalContext } from "contracts/layer_0/context/LocalContext.sol"; + +contract FreezeSustainabilityPerformanceTargetRateFacetTimeTravel is + FreezeSustainabilityPerformanceTargetRateFacet, + TimeTravelStorageWrapper +{ + function _blockTimestamp() internal view override(LocalContext, TimeTravelStorageWrapper) returns (uint256) { + return TimeTravelStorageWrapper._blockTimestamp(); + } + + function _blockNumber() internal view override(LocalContext, TimeTravelStorageWrapper) returns (uint256) { + return TimeTravelStorageWrapper._blockNumber(); + } +} diff --git a/packages/ats/contracts/contracts/test/testTimeTravel/facetsTimeTravel/HoldManagementFacetTimeTravel.sol b/packages/ats/contracts/contracts/test/testTimeTravel/facetsTimeTravel/holdManagement/HoldManagementFacetTimeTravel.sol similarity index 66% rename from packages/ats/contracts/contracts/test/testTimeTravel/facetsTimeTravel/HoldManagementFacetTimeTravel.sol rename to packages/ats/contracts/contracts/test/testTimeTravel/facetsTimeTravel/holdManagement/HoldManagementFacetTimeTravel.sol index 272fd5938..e6bbd0618 100644 --- a/packages/ats/contracts/contracts/test/testTimeTravel/facetsTimeTravel/HoldManagementFacetTimeTravel.sol +++ b/packages/ats/contracts/contracts/test/testTimeTravel/facetsTimeTravel/holdManagement/HoldManagementFacetTimeTravel.sol @@ -1,9 +1,9 @@ // SPDX-License-Identifier: Apache-2.0 pragma solidity >=0.8.0 <0.9.0; -import { LocalContext } from "../../../layer_0/context/LocalContext.sol"; -import { TimeTravelStorageWrapper } from "../timeTravel/TimeTravelStorageWrapper.sol"; -import { HoldManagementFacet } from "../../../layer_1/hold/HoldManagementFacet.sol"; +import { LocalContext } from "../../../../layer_0/context/LocalContext.sol"; +import { TimeTravelStorageWrapper } from "../../timeTravel/TimeTravelStorageWrapper.sol"; +import { HoldManagementFacet } from "../../../../layer_1/hold/standard/HoldManagementFacet.sol"; contract HoldManagementFacetTimeTravel is HoldManagementFacet, TimeTravelStorageWrapper { function _blockTimestamp() internal view override(LocalContext, TimeTravelStorageWrapper) returns (uint256) { diff --git a/packages/ats/contracts/contracts/test/testTimeTravel/facetsTimeTravel/holdManagement/HoldManagementFixedRateFacetTimeTravel.sol b/packages/ats/contracts/contracts/test/testTimeTravel/facetsTimeTravel/holdManagement/HoldManagementFixedRateFacetTimeTravel.sol new file mode 100644 index 000000000..95cd9ed66 --- /dev/null +++ b/packages/ats/contracts/contracts/test/testTimeTravel/facetsTimeTravel/holdManagement/HoldManagementFixedRateFacetTimeTravel.sol @@ -0,0 +1,16 @@ +// SPDX-License-Identifier: Apache-2.0 +pragma solidity >=0.8.0 <0.9.0; + +import { HoldManagementFixedRateFacet } from "contracts/layer_1/hold/fixedRate/HoldManagementFixedRateFacet.sol"; +import { TimeTravelStorageWrapper } from "../../timeTravel/TimeTravelStorageWrapper.sol"; +import { LocalContext } from "contracts/layer_0/context/LocalContext.sol"; + +contract HoldManagementFixedRateFacetTimeTravel is HoldManagementFixedRateFacet, TimeTravelStorageWrapper { + function _blockTimestamp() internal view override(LocalContext, TimeTravelStorageWrapper) returns (uint256) { + return TimeTravelStorageWrapper._blockTimestamp(); + } + + function _blockNumber() internal view override(LocalContext, TimeTravelStorageWrapper) returns (uint256) { + return TimeTravelStorageWrapper._blockNumber(); + } +} diff --git a/packages/ats/contracts/contracts/test/testTimeTravel/facetsTimeTravel/holdManagement/HoldManagementKpiLinkedRateFacetTimeTravel.sol b/packages/ats/contracts/contracts/test/testTimeTravel/facetsTimeTravel/holdManagement/HoldManagementKpiLinkedRateFacetTimeTravel.sol new file mode 100644 index 000000000..93867c28a --- /dev/null +++ b/packages/ats/contracts/contracts/test/testTimeTravel/facetsTimeTravel/holdManagement/HoldManagementKpiLinkedRateFacetTimeTravel.sol @@ -0,0 +1,18 @@ +// SPDX-License-Identifier: Apache-2.0 +pragma solidity >=0.8.0 <0.9.0; + +import { + HoldManagementKpiLinkedRateFacet +} from "contracts/layer_1/hold/kpiLinkedRate/HoldManagementKpiLinkedRateFacet.sol"; +import { TimeTravelStorageWrapper } from "../../timeTravel/TimeTravelStorageWrapper.sol"; +import { LocalContext } from "contracts/layer_0/context/LocalContext.sol"; + +contract HoldManagementKpiLinkedRateFacetTimeTravel is HoldManagementKpiLinkedRateFacet, TimeTravelStorageWrapper { + function _blockTimestamp() internal view override(LocalContext, TimeTravelStorageWrapper) returns (uint256) { + return TimeTravelStorageWrapper._blockTimestamp(); + } + + function _blockNumber() internal view override(LocalContext, TimeTravelStorageWrapper) returns (uint256) { + return TimeTravelStorageWrapper._blockNumber(); + } +} diff --git a/packages/ats/contracts/contracts/test/testTimeTravel/facetsTimeTravel/holdManagement/HoldManagementSustainabilityPerformanceTargetRateFacetTimeTravel.sol b/packages/ats/contracts/contracts/test/testTimeTravel/facetsTimeTravel/holdManagement/HoldManagementSustainabilityPerformanceTargetRateFacetTimeTravel.sol new file mode 100644 index 000000000..dae7e36a7 --- /dev/null +++ b/packages/ats/contracts/contracts/test/testTimeTravel/facetsTimeTravel/holdManagement/HoldManagementSustainabilityPerformanceTargetRateFacetTimeTravel.sol @@ -0,0 +1,21 @@ +// SPDX-License-Identifier: Apache-2.0 +pragma solidity >=0.8.0 <0.9.0; + +import { + HoldManagementSustainabilityPerformanceTargetRateFacet +} from "contracts/layer_1/hold/sustainabilityPerformanceTargetRate/HoldManagementSustainabilityPerformanceTargetRateFacet.sol"; +import { TimeTravelStorageWrapper } from "../../timeTravel/TimeTravelStorageWrapper.sol"; +import { LocalContext } from "contracts/layer_0/context/LocalContext.sol"; + +contract HoldManagementSustainabilityPerformanceTargetRateFacetTimeTravel is + HoldManagementSustainabilityPerformanceTargetRateFacet, + TimeTravelStorageWrapper +{ + function _blockTimestamp() internal view override(LocalContext, TimeTravelStorageWrapper) returns (uint256) { + return TimeTravelStorageWrapper._blockTimestamp(); + } + + function _blockNumber() internal view override(LocalContext, TimeTravelStorageWrapper) returns (uint256) { + return TimeTravelStorageWrapper._blockNumber(); + } +} diff --git a/packages/ats/contracts/contracts/test/testTimeTravel/facetsTimeTravel/HoldReadFacetTimeTravel.sol b/packages/ats/contracts/contracts/test/testTimeTravel/facetsTimeTravel/holdRead/HoldReadFacetTimeTravel.sol similarity index 66% rename from packages/ats/contracts/contracts/test/testTimeTravel/facetsTimeTravel/HoldReadFacetTimeTravel.sol rename to packages/ats/contracts/contracts/test/testTimeTravel/facetsTimeTravel/holdRead/HoldReadFacetTimeTravel.sol index 4eab63f6e..02b00734d 100644 --- a/packages/ats/contracts/contracts/test/testTimeTravel/facetsTimeTravel/HoldReadFacetTimeTravel.sol +++ b/packages/ats/contracts/contracts/test/testTimeTravel/facetsTimeTravel/holdRead/HoldReadFacetTimeTravel.sol @@ -1,9 +1,9 @@ // SPDX-License-Identifier: Apache-2.0 pragma solidity >=0.8.0 <0.9.0; -import { HoldReadFacet } from "../../../layer_1/hold/HoldReadFacet.sol"; -import { TimeTravelStorageWrapper } from "../timeTravel/TimeTravelStorageWrapper.sol"; -import { LocalContext } from "../../../layer_0/context/LocalContext.sol"; +import { HoldReadFacet } from "../../../../layer_1/hold/standard/HoldReadFacet.sol"; +import { TimeTravelStorageWrapper } from "../../timeTravel/TimeTravelStorageWrapper.sol"; +import { LocalContext } from "../../../../layer_0/context/LocalContext.sol"; contract HoldReadFacetTimeTravel is HoldReadFacet, TimeTravelStorageWrapper { function _blockTimestamp() internal view override(LocalContext, TimeTravelStorageWrapper) returns (uint256) { diff --git a/packages/ats/contracts/contracts/test/testTimeTravel/facetsTimeTravel/holdRead/HoldReadFixedRateFacetTimeTravel.sol b/packages/ats/contracts/contracts/test/testTimeTravel/facetsTimeTravel/holdRead/HoldReadFixedRateFacetTimeTravel.sol new file mode 100644 index 000000000..b429c5445 --- /dev/null +++ b/packages/ats/contracts/contracts/test/testTimeTravel/facetsTimeTravel/holdRead/HoldReadFixedRateFacetTimeTravel.sol @@ -0,0 +1,16 @@ +// SPDX-License-Identifier: Apache-2.0 +pragma solidity >=0.8.0 <0.9.0; + +import { HoldReadFixedRateFacet } from "contracts/layer_1/hold/fixedRate/HoldReadFixedRateFacet.sol"; +import { TimeTravelStorageWrapper } from "../../timeTravel/TimeTravelStorageWrapper.sol"; +import { LocalContext } from "contracts/layer_0/context/LocalContext.sol"; + +contract HoldReadFixedRateFacetTimeTravel is HoldReadFixedRateFacet, TimeTravelStorageWrapper { + function _blockTimestamp() internal view override(LocalContext, TimeTravelStorageWrapper) returns (uint256) { + return TimeTravelStorageWrapper._blockTimestamp(); + } + + function _blockNumber() internal view override(LocalContext, TimeTravelStorageWrapper) returns (uint256) { + return TimeTravelStorageWrapper._blockNumber(); + } +} diff --git a/packages/ats/contracts/contracts/test/testTimeTravel/facetsTimeTravel/holdRead/HoldReadKpiLinkedRateFacetTimeTravel.sol b/packages/ats/contracts/contracts/test/testTimeTravel/facetsTimeTravel/holdRead/HoldReadKpiLinkedRateFacetTimeTravel.sol new file mode 100644 index 000000000..9125ed86f --- /dev/null +++ b/packages/ats/contracts/contracts/test/testTimeTravel/facetsTimeTravel/holdRead/HoldReadKpiLinkedRateFacetTimeTravel.sol @@ -0,0 +1,16 @@ +// SPDX-License-Identifier: Apache-2.0 +pragma solidity >=0.8.0 <0.9.0; + +import { HoldReadKpiLinkedRateFacet } from "contracts/layer_1/hold/kpiLinkedRate/HoldReadKpiLinkedRateFacet.sol"; +import { TimeTravelStorageWrapper } from "../../timeTravel/TimeTravelStorageWrapper.sol"; +import { LocalContext } from "contracts/layer_0/context/LocalContext.sol"; + +contract HoldReadKpiLinkedRateFacetTimeTravel is HoldReadKpiLinkedRateFacet, TimeTravelStorageWrapper { + function _blockTimestamp() internal view override(LocalContext, TimeTravelStorageWrapper) returns (uint256) { + return TimeTravelStorageWrapper._blockTimestamp(); + } + + function _blockNumber() internal view override(LocalContext, TimeTravelStorageWrapper) returns (uint256) { + return TimeTravelStorageWrapper._blockNumber(); + } +} diff --git a/packages/ats/contracts/contracts/test/testTimeTravel/facetsTimeTravel/holdRead/HoldReadSustainabilityPerformanceTargetRateFacetTimeTravel.sol b/packages/ats/contracts/contracts/test/testTimeTravel/facetsTimeTravel/holdRead/HoldReadSustainabilityPerformanceTargetRateFacetTimeTravel.sol new file mode 100644 index 000000000..93a96a052 --- /dev/null +++ b/packages/ats/contracts/contracts/test/testTimeTravel/facetsTimeTravel/holdRead/HoldReadSustainabilityPerformanceTargetRateFacetTimeTravel.sol @@ -0,0 +1,21 @@ +// SPDX-License-Identifier: Apache-2.0 +pragma solidity >=0.8.0 <0.9.0; + +import { + HoldReadSustainabilityPerformanceTargetRateFacet +} from "contracts/layer_1/hold/sustainabilityPerformanceTargetRate/HoldReadSustainabilityPerformanceTargetRateFacet.sol"; +import { TimeTravelStorageWrapper } from "../../timeTravel/TimeTravelStorageWrapper.sol"; +import { LocalContext } from "contracts/layer_0/context/LocalContext.sol"; + +contract HoldReadSustainabilityPerformanceTargetRateFacetTimeTravel is + HoldReadSustainabilityPerformanceTargetRateFacet, + TimeTravelStorageWrapper +{ + function _blockTimestamp() internal view override(LocalContext, TimeTravelStorageWrapper) returns (uint256) { + return TimeTravelStorageWrapper._blockTimestamp(); + } + + function _blockNumber() internal view override(LocalContext, TimeTravelStorageWrapper) returns (uint256) { + return TimeTravelStorageWrapper._blockNumber(); + } +} diff --git a/packages/ats/contracts/contracts/test/testTimeTravel/facetsTimeTravel/HoldTokenHolderFacetTimeTravel.sol b/packages/ats/contracts/contracts/test/testTimeTravel/facetsTimeTravel/holdTokenHolder/HoldTokenHolderFacetTimeTravel.sol similarity index 66% rename from packages/ats/contracts/contracts/test/testTimeTravel/facetsTimeTravel/HoldTokenHolderFacetTimeTravel.sol rename to packages/ats/contracts/contracts/test/testTimeTravel/facetsTimeTravel/holdTokenHolder/HoldTokenHolderFacetTimeTravel.sol index cabefca83..d645d4f35 100644 --- a/packages/ats/contracts/contracts/test/testTimeTravel/facetsTimeTravel/HoldTokenHolderFacetTimeTravel.sol +++ b/packages/ats/contracts/contracts/test/testTimeTravel/facetsTimeTravel/holdTokenHolder/HoldTokenHolderFacetTimeTravel.sol @@ -1,9 +1,9 @@ // SPDX-License-Identifier: Apache-2.0 pragma solidity >=0.8.0 <0.9.0; -import { LocalContext } from "../../../layer_0/context/LocalContext.sol"; -import { TimeTravelStorageWrapper } from "../timeTravel/TimeTravelStorageWrapper.sol"; -import { HoldTokenHolderFacet } from "../../../layer_1/hold/HoldTokenHolderFacet.sol"; +import { LocalContext } from "../../../../layer_0/context/LocalContext.sol"; +import { TimeTravelStorageWrapper } from "../../timeTravel/TimeTravelStorageWrapper.sol"; +import { HoldTokenHolderFacet } from "../../../../layer_1/hold/standard/HoldTokenHolderFacet.sol"; contract HoldTokenHolderFacetTimeTravel is HoldTokenHolderFacet, TimeTravelStorageWrapper { function _blockTimestamp() internal view override(LocalContext, TimeTravelStorageWrapper) returns (uint256) { diff --git a/packages/ats/contracts/contracts/test/testTimeTravel/facetsTimeTravel/holdTokenHolder/HoldTokenHolderFixedRateFacetTimeTravel.sol b/packages/ats/contracts/contracts/test/testTimeTravel/facetsTimeTravel/holdTokenHolder/HoldTokenHolderFixedRateFacetTimeTravel.sol new file mode 100644 index 000000000..41196b783 --- /dev/null +++ b/packages/ats/contracts/contracts/test/testTimeTravel/facetsTimeTravel/holdTokenHolder/HoldTokenHolderFixedRateFacetTimeTravel.sol @@ -0,0 +1,16 @@ +// SPDX-License-Identifier: Apache-2.0 +pragma solidity >=0.8.0 <0.9.0; + +import { HoldTokenHolderFixedRateFacet } from "contracts/layer_1/hold/fixedRate/HoldTokenHolderFixedRateFacet.sol"; +import { TimeTravelStorageWrapper } from "../../timeTravel/TimeTravelStorageWrapper.sol"; +import { LocalContext } from "contracts/layer_0/context/LocalContext.sol"; + +contract HoldTokenHolderFixedRateFacetTimeTravel is HoldTokenHolderFixedRateFacet, TimeTravelStorageWrapper { + function _blockTimestamp() internal view override(LocalContext, TimeTravelStorageWrapper) returns (uint256) { + return TimeTravelStorageWrapper._blockTimestamp(); + } + + function _blockNumber() internal view override(LocalContext, TimeTravelStorageWrapper) returns (uint256) { + return TimeTravelStorageWrapper._blockNumber(); + } +} diff --git a/packages/ats/contracts/contracts/test/testTimeTravel/facetsTimeTravel/holdTokenHolder/HoldTokenHolderKpiLinkedRateFacetTimeTravel.sol b/packages/ats/contracts/contracts/test/testTimeTravel/facetsTimeTravel/holdTokenHolder/HoldTokenHolderKpiLinkedRateFacetTimeTravel.sol new file mode 100644 index 000000000..029470a95 --- /dev/null +++ b/packages/ats/contracts/contracts/test/testTimeTravel/facetsTimeTravel/holdTokenHolder/HoldTokenHolderKpiLinkedRateFacetTimeTravel.sol @@ -0,0 +1,18 @@ +// SPDX-License-Identifier: Apache-2.0 +pragma solidity >=0.8.0 <0.9.0; + +import { + HoldTokenHolderKpiLinkedRateFacet +} from "contracts/layer_1/hold/kpiLinkedRate/HoldTokenHolderKpiLinkedRateFacet.sol"; +import { TimeTravelStorageWrapper } from "../../timeTravel/TimeTravelStorageWrapper.sol"; +import { LocalContext } from "contracts/layer_0/context/LocalContext.sol"; + +contract HoldTokenHolderKpiLinkedRateFacetTimeTravel is HoldTokenHolderKpiLinkedRateFacet, TimeTravelStorageWrapper { + function _blockTimestamp() internal view override(LocalContext, TimeTravelStorageWrapper) returns (uint256) { + return TimeTravelStorageWrapper._blockTimestamp(); + } + + function _blockNumber() internal view override(LocalContext, TimeTravelStorageWrapper) returns (uint256) { + return TimeTravelStorageWrapper._blockNumber(); + } +} diff --git a/packages/ats/contracts/contracts/test/testTimeTravel/facetsTimeTravel/holdTokenHolder/HoldTokenHolderSustainabilityPerformanceTargetRateFacetTimeTravel.sol b/packages/ats/contracts/contracts/test/testTimeTravel/facetsTimeTravel/holdTokenHolder/HoldTokenHolderSustainabilityPerformanceTargetRateFacetTimeTravel.sol new file mode 100644 index 000000000..cdc5650ec --- /dev/null +++ b/packages/ats/contracts/contracts/test/testTimeTravel/facetsTimeTravel/holdTokenHolder/HoldTokenHolderSustainabilityPerformanceTargetRateFacetTimeTravel.sol @@ -0,0 +1,21 @@ +// SPDX-License-Identifier: Apache-2.0 +pragma solidity >=0.8.0 <0.9.0; + +import { + HoldTokenHolderSustainabilityPerformanceTargetRateFacet +} from "contracts/layer_1/hold/sustainabilityPerformanceTargetRate/HoldTokenHolderSustainabilityPerformanceTargetRateFacet.sol"; +import { TimeTravelStorageWrapper } from "../../timeTravel/TimeTravelStorageWrapper.sol"; +import { LocalContext } from "contracts/layer_0/context/LocalContext.sol"; + +contract HoldTokenHolderSustainabilityPerformanceTargetRateFacetTimeTravel is + HoldTokenHolderSustainabilityPerformanceTargetRateFacet, + TimeTravelStorageWrapper +{ + function _blockTimestamp() internal view override(LocalContext, TimeTravelStorageWrapper) returns (uint256) { + return TimeTravelStorageWrapper._blockTimestamp(); + } + + function _blockNumber() internal view override(LocalContext, TimeTravelStorageWrapper) returns (uint256) { + return TimeTravelStorageWrapper._blockNumber(); + } +} diff --git a/packages/ats/contracts/contracts/test/testTimeTravel/facetsTimeTravel/kpiLinkedRate/KpiLinkedRateFacetTimeTravel.sol b/packages/ats/contracts/contracts/test/testTimeTravel/facetsTimeTravel/kpiLinkedRate/KpiLinkedRateFacetTimeTravel.sol new file mode 100644 index 000000000..a90488060 --- /dev/null +++ b/packages/ats/contracts/contracts/test/testTimeTravel/facetsTimeTravel/kpiLinkedRate/KpiLinkedRateFacetTimeTravel.sol @@ -0,0 +1,16 @@ +// SPDX-License-Identifier: Apache-2.0 +pragma solidity >=0.8.0 <0.9.0; + +import { KpiLinkedRateFacet } from "../../../../layer_2/interestRates/kpiLinkedRate/KpiLinkedRateFacet.sol"; +import { TimeTravelStorageWrapper } from "../../timeTravel/TimeTravelStorageWrapper.sol"; +import { LocalContext } from "../../../../layer_0/context/LocalContext.sol"; + +contract KpiLinkedRateFacetTimeTravel is KpiLinkedRateFacet, TimeTravelStorageWrapper { + function _blockTimestamp() internal view override(LocalContext, TimeTravelStorageWrapper) returns (uint256) { + return TimeTravelStorageWrapper._blockTimestamp(); + } + + function _blockNumber() internal view override(LocalContext, TimeTravelStorageWrapper) returns (uint256) { + return TimeTravelStorageWrapper._blockNumber(); + } +} diff --git a/packages/ats/contracts/contracts/test/testTimeTravel/facetsTimeTravel/kpis/KpisSustainabilityPerformanceTargetRateFacetTimeTravel.sol b/packages/ats/contracts/contracts/test/testTimeTravel/facetsTimeTravel/kpis/KpisSustainabilityPerformanceTargetRateFacetTimeTravel.sol new file mode 100644 index 000000000..f21116dd0 --- /dev/null +++ b/packages/ats/contracts/contracts/test/testTimeTravel/facetsTimeTravel/kpis/KpisSustainabilityPerformanceTargetRateFacetTimeTravel.sol @@ -0,0 +1,21 @@ +// SPDX-License-Identifier: Apache-2.0 +pragma solidity >=0.8.0 <0.9.0; + +import { + KpisSustainabilityPerformanceTargetRateFacet +} from "../../../../layer_2/kpis/kpiLatest/sustainabilityPerformanceTargetRate/KpisSustainabilityPerformanceTargetRateFacet.sol"; +import { TimeTravelStorageWrapper } from "../../timeTravel/TimeTravelStorageWrapper.sol"; +import { LocalContext } from "../../../../layer_0/context/LocalContext.sol"; + +contract KpisSustainabilityPerformanceTargetRateFacetTimeTravel is + KpisSustainabilityPerformanceTargetRateFacet, + TimeTravelStorageWrapper +{ + function _blockTimestamp() internal view override(LocalContext, TimeTravelStorageWrapper) returns (uint256) { + return TimeTravelStorageWrapper._blockTimestamp(); + } + + function _blockNumber() internal view override(LocalContext, TimeTravelStorageWrapper) returns (uint256) { + return TimeTravelStorageWrapper._blockNumber(); + } +} diff --git a/packages/ats/contracts/contracts/test/testTimeTravel/facetsTimeTravel/KycFacetTimeTravel.sol b/packages/ats/contracts/contracts/test/testTimeTravel/facetsTimeTravel/kyc/KycFacetTimeTravel.sol similarity index 67% rename from packages/ats/contracts/contracts/test/testTimeTravel/facetsTimeTravel/KycFacetTimeTravel.sol rename to packages/ats/contracts/contracts/test/testTimeTravel/facetsTimeTravel/kyc/KycFacetTimeTravel.sol index d2d3ca8c5..6a729aec9 100644 --- a/packages/ats/contracts/contracts/test/testTimeTravel/facetsTimeTravel/KycFacetTimeTravel.sol +++ b/packages/ats/contracts/contracts/test/testTimeTravel/facetsTimeTravel/kyc/KycFacetTimeTravel.sol @@ -1,9 +1,9 @@ // SPDX-License-Identifier: Apache-2.0 pragma solidity >=0.8.0 <0.9.0; -import { KycFacet } from "../../../layer_1/kyc/KycFacet.sol"; -import { TimeTravelStorageWrapper } from "../timeTravel/TimeTravelStorageWrapper.sol"; -import { LocalContext } from "../../../layer_0/context/LocalContext.sol"; +import { KycFacet } from "../../../../layer_1/kyc/standard/KycFacet.sol"; +import { TimeTravelStorageWrapper } from "../../timeTravel/TimeTravelStorageWrapper.sol"; +import { LocalContext } from "../../../../layer_0/context/LocalContext.sol"; contract KycFacetTimeTravel is KycFacet, TimeTravelStorageWrapper { function _blockTimestamp() internal view override(LocalContext, TimeTravelStorageWrapper) returns (uint256) { diff --git a/packages/ats/contracts/contracts/test/testTimeTravel/facetsTimeTravel/kyc/KycFixedRateFacetTimeTravel.sol b/packages/ats/contracts/contracts/test/testTimeTravel/facetsTimeTravel/kyc/KycFixedRateFacetTimeTravel.sol new file mode 100644 index 000000000..11f65c8b3 --- /dev/null +++ b/packages/ats/contracts/contracts/test/testTimeTravel/facetsTimeTravel/kyc/KycFixedRateFacetTimeTravel.sol @@ -0,0 +1,16 @@ +// SPDX-License-Identifier: Apache-2.0 +pragma solidity >=0.8.0 <0.9.0; + +import { KycFixedRateFacet } from "contracts/layer_1/kyc/fixedRate/KycFixedRateFacet.sol"; +import { TimeTravelStorageWrapper } from "../../timeTravel/TimeTravelStorageWrapper.sol"; +import { LocalContext } from "contracts/layer_0/context/LocalContext.sol"; + +contract KycFixedRateFacetTimeTravel is KycFixedRateFacet, TimeTravelStorageWrapper { + function _blockTimestamp() internal view override(LocalContext, TimeTravelStorageWrapper) returns (uint256) { + return TimeTravelStorageWrapper._blockTimestamp(); + } + + function _blockNumber() internal view override(LocalContext, TimeTravelStorageWrapper) returns (uint256) { + return TimeTravelStorageWrapper._blockNumber(); + } +} diff --git a/packages/ats/contracts/contracts/test/testTimeTravel/facetsTimeTravel/kyc/KycKpiLinkedRateFacetTimeTravel.sol b/packages/ats/contracts/contracts/test/testTimeTravel/facetsTimeTravel/kyc/KycKpiLinkedRateFacetTimeTravel.sol new file mode 100644 index 000000000..121831c17 --- /dev/null +++ b/packages/ats/contracts/contracts/test/testTimeTravel/facetsTimeTravel/kyc/KycKpiLinkedRateFacetTimeTravel.sol @@ -0,0 +1,16 @@ +// SPDX-License-Identifier: Apache-2.0 +pragma solidity >=0.8.0 <0.9.0; + +import { KycKpiLinkedRateFacet } from "contracts/layer_1/kyc/kpiLinkedRate/KycKpiLinkedRateFacet.sol"; +import { TimeTravelStorageWrapper } from "../../timeTravel/TimeTravelStorageWrapper.sol"; +import { LocalContext } from "contracts/layer_0/context/LocalContext.sol"; + +contract KycKpiLinkedRateFacetTimeTravel is KycKpiLinkedRateFacet, TimeTravelStorageWrapper { + function _blockTimestamp() internal view override(LocalContext, TimeTravelStorageWrapper) returns (uint256) { + return TimeTravelStorageWrapper._blockTimestamp(); + } + + function _blockNumber() internal view override(LocalContext, TimeTravelStorageWrapper) returns (uint256) { + return TimeTravelStorageWrapper._blockNumber(); + } +} diff --git a/packages/ats/contracts/contracts/test/testTimeTravel/facetsTimeTravel/kyc/KycSustainabilityPerformanceTargetRateFacetTimeTravel.sol b/packages/ats/contracts/contracts/test/testTimeTravel/facetsTimeTravel/kyc/KycSustainabilityPerformanceTargetRateFacetTimeTravel.sol new file mode 100644 index 000000000..259721e4c --- /dev/null +++ b/packages/ats/contracts/contracts/test/testTimeTravel/facetsTimeTravel/kyc/KycSustainabilityPerformanceTargetRateFacetTimeTravel.sol @@ -0,0 +1,21 @@ +// SPDX-License-Identifier: Apache-2.0 +pragma solidity >=0.8.0 <0.9.0; + +import { + KycSustainabilityPerformanceTargetRateFacet +} from "contracts/layer_1/kyc/sustainabilityPerformanceTargetRate/KycSustainabilityPerformanceTargetRateFacet.sol"; +import { TimeTravelStorageWrapper } from "../../timeTravel/TimeTravelStorageWrapper.sol"; +import { LocalContext } from "contracts/layer_0/context/LocalContext.sol"; + +contract KycSustainabilityPerformanceTargetRateFacetTimeTravel is + KycSustainabilityPerformanceTargetRateFacet, + TimeTravelStorageWrapper +{ + function _blockTimestamp() internal view override(LocalContext, TimeTravelStorageWrapper) returns (uint256) { + return TimeTravelStorageWrapper._blockTimestamp(); + } + + function _blockNumber() internal view override(LocalContext, TimeTravelStorageWrapper) returns (uint256) { + return TimeTravelStorageWrapper._blockNumber(); + } +} diff --git a/packages/ats/contracts/contracts/test/testTimeTravel/facetsTimeTravel/LockFacetTimeTravel.sol b/packages/ats/contracts/contracts/test/testTimeTravel/facetsTimeTravel/lock/LockFacetTimeTravel.sol similarity index 67% rename from packages/ats/contracts/contracts/test/testTimeTravel/facetsTimeTravel/LockFacetTimeTravel.sol rename to packages/ats/contracts/contracts/test/testTimeTravel/facetsTimeTravel/lock/LockFacetTimeTravel.sol index de437e7ad..a89e2b02e 100644 --- a/packages/ats/contracts/contracts/test/testTimeTravel/facetsTimeTravel/LockFacetTimeTravel.sol +++ b/packages/ats/contracts/contracts/test/testTimeTravel/facetsTimeTravel/lock/LockFacetTimeTravel.sol @@ -1,9 +1,9 @@ // SPDX-License-Identifier: Apache-2.0 pragma solidity >=0.8.0 <0.9.0; -import { LockFacet } from "../../../layer_1/lock/LockFacet.sol"; -import { TimeTravelStorageWrapper } from "../timeTravel/TimeTravelStorageWrapper.sol"; -import { LocalContext } from "../../../layer_0/context/LocalContext.sol"; +import { LockFacet } from "../../../../layer_1/lock/standard/LockFacet.sol"; +import { TimeTravelStorageWrapper } from "../../timeTravel/TimeTravelStorageWrapper.sol"; +import { LocalContext } from "../../../../layer_0/context/LocalContext.sol"; contract LockFacetTimeTravel is LockFacet, TimeTravelStorageWrapper { function _blockTimestamp() internal view override(LocalContext, TimeTravelStorageWrapper) returns (uint256) { diff --git a/packages/ats/contracts/contracts/test/testTimeTravel/facetsTimeTravel/lock/LockFixedRateFacetTimeTravel.sol b/packages/ats/contracts/contracts/test/testTimeTravel/facetsTimeTravel/lock/LockFixedRateFacetTimeTravel.sol new file mode 100644 index 000000000..61f37c667 --- /dev/null +++ b/packages/ats/contracts/contracts/test/testTimeTravel/facetsTimeTravel/lock/LockFixedRateFacetTimeTravel.sol @@ -0,0 +1,16 @@ +// SPDX-License-Identifier: Apache-2.0 +pragma solidity >=0.8.0 <0.9.0; + +import { LockFixedRateFacet } from "contracts/layer_1/lock/fixedRate/LockFixedRateFacet.sol"; +import { TimeTravelStorageWrapper } from "../../timeTravel/TimeTravelStorageWrapper.sol"; +import { LocalContext } from "contracts/layer_0/context/LocalContext.sol"; + +contract LockFixedRateFacetTimeTravel is LockFixedRateFacet, TimeTravelStorageWrapper { + function _blockTimestamp() internal view override(LocalContext, TimeTravelStorageWrapper) returns (uint256) { + return TimeTravelStorageWrapper._blockTimestamp(); + } + + function _blockNumber() internal view override(LocalContext, TimeTravelStorageWrapper) returns (uint256) { + return TimeTravelStorageWrapper._blockNumber(); + } +} diff --git a/packages/ats/contracts/contracts/test/testTimeTravel/facetsTimeTravel/lock/LockKpiLinkedRateFacetTimeTravel.sol b/packages/ats/contracts/contracts/test/testTimeTravel/facetsTimeTravel/lock/LockKpiLinkedRateFacetTimeTravel.sol new file mode 100644 index 000000000..2c5b3a994 --- /dev/null +++ b/packages/ats/contracts/contracts/test/testTimeTravel/facetsTimeTravel/lock/LockKpiLinkedRateFacetTimeTravel.sol @@ -0,0 +1,16 @@ +// SPDX-License-Identifier: Apache-2.0 +pragma solidity >=0.8.0 <0.9.0; + +import { LockKpiLinkedRateFacet } from "contracts/layer_1/lock/kpiLinkedRate/LockKpiLinkedRateFacet.sol"; +import { TimeTravelStorageWrapper } from "../../timeTravel/TimeTravelStorageWrapper.sol"; +import { LocalContext } from "contracts/layer_0/context/LocalContext.sol"; + +contract LockKpiLinkedRateFacetTimeTravel is LockKpiLinkedRateFacet, TimeTravelStorageWrapper { + function _blockTimestamp() internal view override(LocalContext, TimeTravelStorageWrapper) returns (uint256) { + return TimeTravelStorageWrapper._blockTimestamp(); + } + + function _blockNumber() internal view override(LocalContext, TimeTravelStorageWrapper) returns (uint256) { + return TimeTravelStorageWrapper._blockNumber(); + } +} diff --git a/packages/ats/contracts/contracts/test/testTimeTravel/facetsTimeTravel/lock/LockSustainabilityPerformanceTargetRateFacetTimeTravel.sol b/packages/ats/contracts/contracts/test/testTimeTravel/facetsTimeTravel/lock/LockSustainabilityPerformanceTargetRateFacetTimeTravel.sol new file mode 100644 index 000000000..4459fffe3 --- /dev/null +++ b/packages/ats/contracts/contracts/test/testTimeTravel/facetsTimeTravel/lock/LockSustainabilityPerformanceTargetRateFacetTimeTravel.sol @@ -0,0 +1,21 @@ +// SPDX-License-Identifier: Apache-2.0 +pragma solidity >=0.8.0 <0.9.0; + +import { + LockSustainabilityPerformanceTargetRateFacet +} from "contracts/layer_1/lock/sustainabilityPerformanceTargetRate/LockSustainabilityPerformanceTargetRateFacet.sol"; +import { TimeTravelStorageWrapper } from "../../timeTravel/TimeTravelStorageWrapper.sol"; +import { LocalContext } from "contracts/layer_0/context/LocalContext.sol"; + +contract LockSustainabilityPerformanceTargetRateFacetTimeTravel is + LockSustainabilityPerformanceTargetRateFacet, + TimeTravelStorageWrapper +{ + function _blockTimestamp() internal view override(LocalContext, TimeTravelStorageWrapper) returns (uint256) { + return TimeTravelStorageWrapper._blockTimestamp(); + } + + function _blockNumber() internal view override(LocalContext, TimeTravelStorageWrapper) returns (uint256) { + return TimeTravelStorageWrapper._blockNumber(); + } +} diff --git a/packages/ats/contracts/contracts/test/testTimeTravel/facetsTimeTravel/nonces/NoncesFacetTimeTravel.sol b/packages/ats/contracts/contracts/test/testTimeTravel/facetsTimeTravel/nonces/NoncesFacetTimeTravel.sol new file mode 100644 index 000000000..9523825f2 --- /dev/null +++ b/packages/ats/contracts/contracts/test/testTimeTravel/facetsTimeTravel/nonces/NoncesFacetTimeTravel.sol @@ -0,0 +1,16 @@ +// SPDX-License-Identifier: Apache-2.0 +pragma solidity >=0.8.0 <0.9.0; + +import { NoncesFacet } from "../../../../layer_1/nonces/standard/NoncesFacet.sol"; +import { TimeTravelStorageWrapper } from "../../timeTravel/TimeTravelStorageWrapper.sol"; +import { LocalContext } from "../../../../layer_0/context/LocalContext.sol"; + +contract NoncesFacetTimeTravel is NoncesFacet, TimeTravelStorageWrapper { + function _blockTimestamp() internal view override(LocalContext, TimeTravelStorageWrapper) returns (uint256) { + return TimeTravelStorageWrapper._blockTimestamp(); + } + + function _blockNumber() internal view override(LocalContext, TimeTravelStorageWrapper) returns (uint256) { + return TimeTravelStorageWrapper._blockNumber(); + } +} diff --git a/packages/ats/contracts/contracts/test/testTimeTravel/facetsTimeTravel/nonces/NoncesFixedRateFacetTimeTravel.sol b/packages/ats/contracts/contracts/test/testTimeTravel/facetsTimeTravel/nonces/NoncesFixedRateFacetTimeTravel.sol new file mode 100644 index 000000000..510d06ac6 --- /dev/null +++ b/packages/ats/contracts/contracts/test/testTimeTravel/facetsTimeTravel/nonces/NoncesFixedRateFacetTimeTravel.sol @@ -0,0 +1,16 @@ +// SPDX-License-Identifier: Apache-2.0 +pragma solidity >=0.8.0 <0.9.0; + +import { NoncesFixedRateFacet } from "contracts/layer_1/nonces/fixedRate/NoncesFixedRateFacet.sol"; +import { TimeTravelStorageWrapper } from "../../timeTravel/TimeTravelStorageWrapper.sol"; +import { LocalContext } from "contracts/layer_0/context/LocalContext.sol"; + +contract NoncesFixedRateFacetTimeTravel is NoncesFixedRateFacet, TimeTravelStorageWrapper { + function _blockTimestamp() internal view override(LocalContext, TimeTravelStorageWrapper) returns (uint256) { + return TimeTravelStorageWrapper._blockTimestamp(); + } + + function _blockNumber() internal view override(LocalContext, TimeTravelStorageWrapper) returns (uint256) { + return TimeTravelStorageWrapper._blockNumber(); + } +} diff --git a/packages/ats/contracts/contracts/test/testTimeTravel/facetsTimeTravel/nonces/NoncesKpiLinkedRateFacetTimeTravel.sol b/packages/ats/contracts/contracts/test/testTimeTravel/facetsTimeTravel/nonces/NoncesKpiLinkedRateFacetTimeTravel.sol new file mode 100644 index 000000000..f035dc057 --- /dev/null +++ b/packages/ats/contracts/contracts/test/testTimeTravel/facetsTimeTravel/nonces/NoncesKpiLinkedRateFacetTimeTravel.sol @@ -0,0 +1,16 @@ +// SPDX-License-Identifier: Apache-2.0 +pragma solidity >=0.8.0 <0.9.0; + +import { NoncesKpiLinkedRateFacet } from "contracts/layer_1/nonces/kpiLinkedRate/NoncesKpiLinkedRateFacet.sol"; +import { TimeTravelStorageWrapper } from "../../timeTravel/TimeTravelStorageWrapper.sol"; +import { LocalContext } from "contracts/layer_0/context/LocalContext.sol"; + +contract NoncesKpiLinkedRateFacetTimeTravel is NoncesKpiLinkedRateFacet, TimeTravelStorageWrapper { + function _blockTimestamp() internal view override(LocalContext, TimeTravelStorageWrapper) returns (uint256) { + return TimeTravelStorageWrapper._blockTimestamp(); + } + + function _blockNumber() internal view override(LocalContext, TimeTravelStorageWrapper) returns (uint256) { + return TimeTravelStorageWrapper._blockNumber(); + } +} diff --git a/packages/ats/contracts/contracts/test/testTimeTravel/facetsTimeTravel/nonces/NoncesSustainabilityPerformanceTargetRateFacetTimeTravel.sol b/packages/ats/contracts/contracts/test/testTimeTravel/facetsTimeTravel/nonces/NoncesSustainabilityPerformanceTargetRateFacetTimeTravel.sol new file mode 100644 index 000000000..b150c389f --- /dev/null +++ b/packages/ats/contracts/contracts/test/testTimeTravel/facetsTimeTravel/nonces/NoncesSustainabilityPerformanceTargetRateFacetTimeTravel.sol @@ -0,0 +1,21 @@ +// SPDX-License-Identifier: Apache-2.0 +pragma solidity >=0.8.0 <0.9.0; + +import { + NoncesSustainabilityPerformanceTargetRateFacet +} from "contracts/layer_1/nonces/sustainabilityPerformanceTargetRate/NoncesSustainabilityPerformanceTargetRateFacet.sol"; +import { TimeTravelStorageWrapper } from "../../timeTravel/TimeTravelStorageWrapper.sol"; +import { LocalContext } from "contracts/layer_0/context/LocalContext.sol"; + +contract NoncesSustainabilityPerformanceTargetRateFacetTimeTravel is + NoncesSustainabilityPerformanceTargetRateFacet, + TimeTravelStorageWrapper +{ + function _blockTimestamp() internal view override(LocalContext, TimeTravelStorageWrapper) returns (uint256) { + return TimeTravelStorageWrapper._blockTimestamp(); + } + + function _blockNumber() internal view override(LocalContext, TimeTravelStorageWrapper) returns (uint256) { + return TimeTravelStorageWrapper._blockNumber(); + } +} diff --git a/packages/ats/contracts/contracts/test/testTimeTravel/facetsTimeTravel/PauseFacetTimeTravel.sol b/packages/ats/contracts/contracts/test/testTimeTravel/facetsTimeTravel/pause/PauseFacetTimeTravel.sol similarity index 66% rename from packages/ats/contracts/contracts/test/testTimeTravel/facetsTimeTravel/PauseFacetTimeTravel.sol rename to packages/ats/contracts/contracts/test/testTimeTravel/facetsTimeTravel/pause/PauseFacetTimeTravel.sol index bad84191a..275e72668 100644 --- a/packages/ats/contracts/contracts/test/testTimeTravel/facetsTimeTravel/PauseFacetTimeTravel.sol +++ b/packages/ats/contracts/contracts/test/testTimeTravel/facetsTimeTravel/pause/PauseFacetTimeTravel.sol @@ -1,9 +1,9 @@ // SPDX-License-Identifier: Apache-2.0 pragma solidity >=0.8.0 <0.9.0; -import { PauseFacet } from "../../../layer_1/pause/PauseFacet.sol"; -import { TimeTravelStorageWrapper } from "../timeTravel/TimeTravelStorageWrapper.sol"; -import { LocalContext } from "../../../layer_0/context/LocalContext.sol"; +import { PauseFacet } from "../../../../layer_1/pause/standard/PauseFacet.sol"; +import { TimeTravelStorageWrapper } from "../../timeTravel/TimeTravelStorageWrapper.sol"; +import { LocalContext } from "../../../../layer_0/context/LocalContext.sol"; contract PauseFacetTimeTravel is PauseFacet, TimeTravelStorageWrapper { function _blockTimestamp() internal view override(LocalContext, TimeTravelStorageWrapper) returns (uint256) { diff --git a/packages/ats/contracts/contracts/test/testTimeTravel/facetsTimeTravel/pause/PauseFixedRateFacetTimeTravel.sol b/packages/ats/contracts/contracts/test/testTimeTravel/facetsTimeTravel/pause/PauseFixedRateFacetTimeTravel.sol new file mode 100644 index 000000000..66520a6b1 --- /dev/null +++ b/packages/ats/contracts/contracts/test/testTimeTravel/facetsTimeTravel/pause/PauseFixedRateFacetTimeTravel.sol @@ -0,0 +1,16 @@ +// SPDX-License-Identifier: Apache-2.0 +pragma solidity >=0.8.0 <0.9.0; + +import { PauseFixedRateFacet } from "contracts/layer_1/pause/fixedRate/PauseFixedRateFacet.sol"; +import { TimeTravelStorageWrapper } from "../../timeTravel/TimeTravelStorageWrapper.sol"; +import { LocalContext } from "contracts/layer_0/context/LocalContext.sol"; + +contract PauseFixedRateFacetTimeTravel is PauseFixedRateFacet, TimeTravelStorageWrapper { + function _blockTimestamp() internal view override(LocalContext, TimeTravelStorageWrapper) returns (uint256) { + return TimeTravelStorageWrapper._blockTimestamp(); + } + + function _blockNumber() internal view override(LocalContext, TimeTravelStorageWrapper) returns (uint256) { + return TimeTravelStorageWrapper._blockNumber(); + } +} diff --git a/packages/ats/contracts/contracts/test/testTimeTravel/facetsTimeTravel/pause/PauseKpiLinkedRateFacetTimeTravel.sol b/packages/ats/contracts/contracts/test/testTimeTravel/facetsTimeTravel/pause/PauseKpiLinkedRateFacetTimeTravel.sol new file mode 100644 index 000000000..65bc10331 --- /dev/null +++ b/packages/ats/contracts/contracts/test/testTimeTravel/facetsTimeTravel/pause/PauseKpiLinkedRateFacetTimeTravel.sol @@ -0,0 +1,16 @@ +// SPDX-License-Identifier: Apache-2.0 +pragma solidity >=0.8.0 <0.9.0; + +import { PauseKpiLinkedRateFacet } from "contracts/layer_1/pause/kpiLinkedRate/PauseKpiLinkedRateFacet.sol"; +import { TimeTravelStorageWrapper } from "../../timeTravel/TimeTravelStorageWrapper.sol"; +import { LocalContext } from "contracts/layer_0/context/LocalContext.sol"; + +contract PauseKpiLinkedRateFacetTimeTravel is PauseKpiLinkedRateFacet, TimeTravelStorageWrapper { + function _blockTimestamp() internal view override(LocalContext, TimeTravelStorageWrapper) returns (uint256) { + return TimeTravelStorageWrapper._blockTimestamp(); + } + + function _blockNumber() internal view override(LocalContext, TimeTravelStorageWrapper) returns (uint256) { + return TimeTravelStorageWrapper._blockNumber(); + } +} diff --git a/packages/ats/contracts/contracts/test/testTimeTravel/facetsTimeTravel/pause/PauseSustainabilityPerformanceTargetRateFacetTimeTravel.sol b/packages/ats/contracts/contracts/test/testTimeTravel/facetsTimeTravel/pause/PauseSustainabilityPerformanceTargetRateFacetTimeTravel.sol new file mode 100644 index 000000000..9f0624f9d --- /dev/null +++ b/packages/ats/contracts/contracts/test/testTimeTravel/facetsTimeTravel/pause/PauseSustainabilityPerformanceTargetRateFacetTimeTravel.sol @@ -0,0 +1,21 @@ +// SPDX-License-Identifier: Apache-2.0 +pragma solidity >=0.8.0 <0.9.0; + +import { + PauseSustainabilityPerformanceTargetRateFacet +} from "contracts/layer_1/pause/sustainabilityPerformanceTargetRate/PauseSustainabilityPerformanceTargetRateFacet.sol"; +import { TimeTravelStorageWrapper } from "../../timeTravel/TimeTravelStorageWrapper.sol"; +import { LocalContext } from "contracts/layer_0/context/LocalContext.sol"; + +contract PauseSustainabilityPerformanceTargetRateFacetTimeTravel is + PauseSustainabilityPerformanceTargetRateFacet, + TimeTravelStorageWrapper +{ + function _blockTimestamp() internal view override(LocalContext, TimeTravelStorageWrapper) returns (uint256) { + return TimeTravelStorageWrapper._blockTimestamp(); + } + + function _blockNumber() internal view override(LocalContext, TimeTravelStorageWrapper) returns (uint256) { + return TimeTravelStorageWrapper._blockNumber(); + } +} diff --git a/packages/ats/contracts/contracts/test/testTimeTravel/facetsTimeTravel/ProceedRecipientsFacetTimeTravel.sol b/packages/ats/contracts/contracts/test/testTimeTravel/facetsTimeTravel/proceedRecipients/ProceedRecipientsFacetTimeTravel.sol similarity index 64% rename from packages/ats/contracts/contracts/test/testTimeTravel/facetsTimeTravel/ProceedRecipientsFacetTimeTravel.sol rename to packages/ats/contracts/contracts/test/testTimeTravel/facetsTimeTravel/proceedRecipients/ProceedRecipientsFacetTimeTravel.sol index 69913e80a..fd2de3fb4 100644 --- a/packages/ats/contracts/contracts/test/testTimeTravel/facetsTimeTravel/ProceedRecipientsFacetTimeTravel.sol +++ b/packages/ats/contracts/contracts/test/testTimeTravel/facetsTimeTravel/proceedRecipients/ProceedRecipientsFacetTimeTravel.sol @@ -1,9 +1,9 @@ // SPDX-License-Identifier: Apache-2.0 pragma solidity >=0.8.0 <0.9.0; -import { ProceedRecipientsFacet } from "../../../layer_2/proceedRecipients/ProceedRecipientsFacet.sol"; -import { TimeTravelStorageWrapper } from "../timeTravel/TimeTravelStorageWrapper.sol"; -import { LocalContext } from "../../../layer_0/context/LocalContext.sol"; +import { ProceedRecipientsFacet } from "../../../../layer_2/proceedRecipients/standard/ProceedRecipientsFacet.sol"; +import { TimeTravelStorageWrapper } from "../../timeTravel/TimeTravelStorageWrapper.sol"; +import { LocalContext } from "../../../../layer_0/context/LocalContext.sol"; contract ProceedRecipientsFacetTimeTravel is ProceedRecipientsFacet, TimeTravelStorageWrapper { function _blockTimestamp() internal view override(LocalContext, TimeTravelStorageWrapper) returns (uint256) { diff --git a/packages/ats/contracts/contracts/test/testTimeTravel/facetsTimeTravel/proceedRecipients/ProceedRecipientsFixedRateFacetTimeTravel.sol b/packages/ats/contracts/contracts/test/testTimeTravel/facetsTimeTravel/proceedRecipients/ProceedRecipientsFixedRateFacetTimeTravel.sol new file mode 100644 index 000000000..87c375529 --- /dev/null +++ b/packages/ats/contracts/contracts/test/testTimeTravel/facetsTimeTravel/proceedRecipients/ProceedRecipientsFixedRateFacetTimeTravel.sol @@ -0,0 +1,18 @@ +// SPDX-License-Identifier: Apache-2.0 +pragma solidity >=0.8.0 <0.9.0; + +import { + ProceedRecipientsFixedRateFacet +} from "../../../../layer_2/proceedRecipients/fixedRate/ProceedRecipientsFixedRateFacet.sol"; +import { TimeTravelStorageWrapper } from "../../timeTravel/TimeTravelStorageWrapper.sol"; +import { LocalContext } from "../../../../layer_0/context/LocalContext.sol"; + +contract ProceedRecipientsFixedRateFacetTimeTravel is ProceedRecipientsFixedRateFacet, TimeTravelStorageWrapper { + function _blockTimestamp() internal view override(LocalContext, TimeTravelStorageWrapper) returns (uint256) { + return TimeTravelStorageWrapper._blockTimestamp(); + } + + function _blockNumber() internal view override(LocalContext, TimeTravelStorageWrapper) returns (uint256) { + return TimeTravelStorageWrapper._blockNumber(); + } +} diff --git a/packages/ats/contracts/contracts/test/testTimeTravel/facetsTimeTravel/proceedRecipients/ProceedRecipientsKpiLinkedRateFacetTimeTravel.sol b/packages/ats/contracts/contracts/test/testTimeTravel/facetsTimeTravel/proceedRecipients/ProceedRecipientsKpiLinkedRateFacetTimeTravel.sol new file mode 100644 index 000000000..cfc5080a7 --- /dev/null +++ b/packages/ats/contracts/contracts/test/testTimeTravel/facetsTimeTravel/proceedRecipients/ProceedRecipientsKpiLinkedRateFacetTimeTravel.sol @@ -0,0 +1,21 @@ +// SPDX-License-Identifier: Apache-2.0 +pragma solidity >=0.8.0 <0.9.0; + +import { + ProceedRecipientsKpiLinkedRateFacet +} from "../../../../layer_2/proceedRecipients/kpiLinkedRate/ProceedRecipientsKpiLinkedRateFacet.sol"; +import { TimeTravelStorageWrapper } from "../../timeTravel/TimeTravelStorageWrapper.sol"; +import { LocalContext } from "../../../../layer_0/context/LocalContext.sol"; + +contract ProceedRecipientsKpiLinkedRateFacetTimeTravel is + ProceedRecipientsKpiLinkedRateFacet, + TimeTravelStorageWrapper +{ + function _blockTimestamp() internal view override(LocalContext, TimeTravelStorageWrapper) returns (uint256) { + return TimeTravelStorageWrapper._blockTimestamp(); + } + + function _blockNumber() internal view override(LocalContext, TimeTravelStorageWrapper) returns (uint256) { + return TimeTravelStorageWrapper._blockNumber(); + } +} diff --git a/packages/ats/contracts/contracts/test/testTimeTravel/facetsTimeTravel/proceedRecipients/ProceedRecipientsSustainabilityPerformanceTargetRateFacetTimeTravel.sol b/packages/ats/contracts/contracts/test/testTimeTravel/facetsTimeTravel/proceedRecipients/ProceedRecipientsSustainabilityPerformanceTargetRateFacetTimeTravel.sol new file mode 100644 index 000000000..b07a6e3f1 --- /dev/null +++ b/packages/ats/contracts/contracts/test/testTimeTravel/facetsTimeTravel/proceedRecipients/ProceedRecipientsSustainabilityPerformanceTargetRateFacetTimeTravel.sol @@ -0,0 +1,21 @@ +// SPDX-License-Identifier: Apache-2.0 +pragma solidity >=0.8.0 <0.9.0; + +import { + ProceedRecipientsSustainabilityPerformanceTargetRateFacet +} from "../../../../layer_2/proceedRecipients/sustainabilityPerformanceTargetRate/ProceedRecipientsSustainabilityPerformanceTargetRateFacet.sol"; +import { TimeTravelStorageWrapper } from "../../timeTravel/TimeTravelStorageWrapper.sol"; +import { LocalContext } from "../../../../layer_0/context/LocalContext.sol"; + +contract ProceedRecipientsSustainabilityPerformanceTargetRateFacetTimeTravel is + ProceedRecipientsSustainabilityPerformanceTargetRateFacet, + TimeTravelStorageWrapper +{ + function _blockTimestamp() internal view override(LocalContext, TimeTravelStorageWrapper) returns (uint256) { + return TimeTravelStorageWrapper._blockTimestamp(); + } + + function _blockNumber() internal view override(LocalContext, TimeTravelStorageWrapper) returns (uint256) { + return TimeTravelStorageWrapper._blockNumber(); + } +} diff --git a/packages/ats/contracts/contracts/test/testTimeTravel/facetsTimeTravel/ProtectedPartitionsFacetTimeTravel.sol b/packages/ats/contracts/contracts/test/testTimeTravel/facetsTimeTravel/protectedPartitions/ProtectedPartitionsFacetTimeTravel.sol similarity index 64% rename from packages/ats/contracts/contracts/test/testTimeTravel/facetsTimeTravel/ProtectedPartitionsFacetTimeTravel.sol rename to packages/ats/contracts/contracts/test/testTimeTravel/facetsTimeTravel/protectedPartitions/ProtectedPartitionsFacetTimeTravel.sol index aecc818cc..d67dbd7d1 100644 --- a/packages/ats/contracts/contracts/test/testTimeTravel/facetsTimeTravel/ProtectedPartitionsFacetTimeTravel.sol +++ b/packages/ats/contracts/contracts/test/testTimeTravel/facetsTimeTravel/protectedPartitions/ProtectedPartitionsFacetTimeTravel.sol @@ -1,9 +1,11 @@ // SPDX-License-Identifier: Apache-2.0 pragma solidity >=0.8.0 <0.9.0; -import { ProtectedPartitionsFacet } from "../../../layer_1/protectedPartitions/ProtectedPartitionsFacet.sol"; -import { TimeTravelStorageWrapper } from "../timeTravel/TimeTravelStorageWrapper.sol"; -import { LocalContext } from "../../../layer_0/context/LocalContext.sol"; +import { + ProtectedPartitionsFacet +} from "../../../../layer_1/protectedPartitions/standard/ProtectedPartitionsFacet.sol"; +import { TimeTravelStorageWrapper } from "../../timeTravel/TimeTravelStorageWrapper.sol"; +import { LocalContext } from "../../../../layer_0/context/LocalContext.sol"; contract ProtectedPartitionsFacetTimeTravel is ProtectedPartitionsFacet, TimeTravelStorageWrapper { function _blockTimestamp() internal view override(LocalContext, TimeTravelStorageWrapper) returns (uint256) { diff --git a/packages/ats/contracts/contracts/test/testTimeTravel/facetsTimeTravel/protectedPartitions/ProtectedPartitionsFixedRateFacetTimeTravel.sol b/packages/ats/contracts/contracts/test/testTimeTravel/facetsTimeTravel/protectedPartitions/ProtectedPartitionsFixedRateFacetTimeTravel.sol new file mode 100644 index 000000000..829a4276b --- /dev/null +++ b/packages/ats/contracts/contracts/test/testTimeTravel/facetsTimeTravel/protectedPartitions/ProtectedPartitionsFixedRateFacetTimeTravel.sol @@ -0,0 +1,18 @@ +// SPDX-License-Identifier: Apache-2.0 +pragma solidity >=0.8.0 <0.9.0; + +import { + ProtectedPartitionsFixedRateFacet +} from "contracts/layer_1/protectedPartitions/fixedRate/ProtectedPartitionsFixedRateFacet.sol"; +import { TimeTravelStorageWrapper } from "../../timeTravel/TimeTravelStorageWrapper.sol"; +import { LocalContext } from "contracts/layer_0/context/LocalContext.sol"; + +contract ProtectedPartitionsFixedRateFacetTimeTravel is ProtectedPartitionsFixedRateFacet, TimeTravelStorageWrapper { + function _blockTimestamp() internal view override(LocalContext, TimeTravelStorageWrapper) returns (uint256) { + return TimeTravelStorageWrapper._blockTimestamp(); + } + + function _blockNumber() internal view override(LocalContext, TimeTravelStorageWrapper) returns (uint256) { + return TimeTravelStorageWrapper._blockNumber(); + } +} diff --git a/packages/ats/contracts/contracts/test/testTimeTravel/facetsTimeTravel/protectedPartitions/ProtectedPartitionsKpiLinkedRateFacetTimeTravel.sol b/packages/ats/contracts/contracts/test/testTimeTravel/facetsTimeTravel/protectedPartitions/ProtectedPartitionsKpiLinkedRateFacetTimeTravel.sol new file mode 100644 index 000000000..0ded8e454 --- /dev/null +++ b/packages/ats/contracts/contracts/test/testTimeTravel/facetsTimeTravel/protectedPartitions/ProtectedPartitionsKpiLinkedRateFacetTimeTravel.sol @@ -0,0 +1,21 @@ +// SPDX-License-Identifier: Apache-2.0 +pragma solidity >=0.8.0 <0.9.0; + +import { + ProtectedPartitionsKpiLinkedRateFacet +} from "contracts/layer_1/protectedPartitions/kpiLinkedRate/ProtectedPartitionsKpiLinkedRateFacet.sol"; +import { TimeTravelStorageWrapper } from "../../timeTravel/TimeTravelStorageWrapper.sol"; +import { LocalContext } from "contracts/layer_0/context/LocalContext.sol"; + +contract ProtectedPartitionsKpiLinkedRateFacetTimeTravel is + ProtectedPartitionsKpiLinkedRateFacet, + TimeTravelStorageWrapper +{ + function _blockTimestamp() internal view override(LocalContext, TimeTravelStorageWrapper) returns (uint256) { + return TimeTravelStorageWrapper._blockTimestamp(); + } + + function _blockNumber() internal view override(LocalContext, TimeTravelStorageWrapper) returns (uint256) { + return TimeTravelStorageWrapper._blockNumber(); + } +} diff --git a/packages/ats/contracts/contracts/test/testTimeTravel/facetsTimeTravel/protectedPartitions/ProtectedPartitionsSustainabilityPerformanceTargetRateFacetTimeTravel.sol b/packages/ats/contracts/contracts/test/testTimeTravel/facetsTimeTravel/protectedPartitions/ProtectedPartitionsSustainabilityPerformanceTargetRateFacetTimeTravel.sol new file mode 100644 index 000000000..666c0c841 --- /dev/null +++ b/packages/ats/contracts/contracts/test/testTimeTravel/facetsTimeTravel/protectedPartitions/ProtectedPartitionsSustainabilityPerformanceTargetRateFacetTimeTravel.sol @@ -0,0 +1,21 @@ +// SPDX-License-Identifier: Apache-2.0 +pragma solidity >=0.8.0 <0.9.0; + +import { + ProtectedPartitionsSustainabilityPerformanceTargetRateFacet +} from "contracts/layer_1/protectedPartitions/sustainabilityPerformanceTargetRate/ProtectedPartitionsSustainabilityPerformanceTargetRateFacet.sol"; +import { TimeTravelStorageWrapper } from "../../timeTravel/TimeTravelStorageWrapper.sol"; +import { LocalContext } from "contracts/layer_0/context/LocalContext.sol"; + +contract ProtectedPartitionsSustainabilityPerformanceTargetRateFacetTimeTravel is + ProtectedPartitionsSustainabilityPerformanceTargetRateFacet, + TimeTravelStorageWrapper +{ + function _blockTimestamp() internal view override(LocalContext, TimeTravelStorageWrapper) returns (uint256) { + return TimeTravelStorageWrapper._blockTimestamp(); + } + + function _blockNumber() internal view override(LocalContext, TimeTravelStorageWrapper) returns (uint256) { + return TimeTravelStorageWrapper._blockNumber(); + } +} diff --git a/packages/ats/contracts/contracts/test/testTimeTravel/facetsTimeTravel/ScheduledBalanceAdjustmentsFacetTimeTravel.sol b/packages/ats/contracts/contracts/test/testTimeTravel/facetsTimeTravel/scheduledBalanceAdjustments/ScheduledBalanceAdjustmentsFacetTimeTravel.sol similarity index 67% rename from packages/ats/contracts/contracts/test/testTimeTravel/facetsTimeTravel/ScheduledBalanceAdjustmentsFacetTimeTravel.sol rename to packages/ats/contracts/contracts/test/testTimeTravel/facetsTimeTravel/scheduledBalanceAdjustments/ScheduledBalanceAdjustmentsFacetTimeTravel.sol index e05c52b2d..b89cc09cb 100644 --- a/packages/ats/contracts/contracts/test/testTimeTravel/facetsTimeTravel/ScheduledBalanceAdjustmentsFacetTimeTravel.sol +++ b/packages/ats/contracts/contracts/test/testTimeTravel/facetsTimeTravel/scheduledBalanceAdjustments/ScheduledBalanceAdjustmentsFacetTimeTravel.sol @@ -3,9 +3,9 @@ pragma solidity >=0.8.0 <0.9.0; import { ScheduledBalanceAdjustmentsFacet -} from "../../../layer_2/scheduledTasks/scheduledBalanceAdjustments/ScheduledBalanceAdjustmentsFacet.sol"; -import { TimeTravelStorageWrapper } from "../timeTravel/TimeTravelStorageWrapper.sol"; -import { LocalContext } from "../../../layer_0/context/LocalContext.sol"; +} from "../../../../layer_2/scheduledTasks/scheduledBalanceAdjustments/standard/ScheduledBalanceAdjustmentsFacet.sol"; +import { TimeTravelStorageWrapper } from "../../timeTravel/TimeTravelStorageWrapper.sol"; +import { LocalContext } from "../../../../layer_0/context/LocalContext.sol"; contract ScheduledBalanceAdjustmentsFacetTimeTravel is ScheduledBalanceAdjustmentsFacet, TimeTravelStorageWrapper { function _blockTimestamp() internal view override(LocalContext, TimeTravelStorageWrapper) returns (uint256) { diff --git a/packages/ats/contracts/contracts/test/testTimeTravel/facetsTimeTravel/scheduledBalanceAdjustments/ScheduledBalanceAdjustmentsFixedRateFacetTimeTravel.sol b/packages/ats/contracts/contracts/test/testTimeTravel/facetsTimeTravel/scheduledBalanceAdjustments/ScheduledBalanceAdjustmentsFixedRateFacetTimeTravel.sol new file mode 100644 index 000000000..41f36a8cb --- /dev/null +++ b/packages/ats/contracts/contracts/test/testTimeTravel/facetsTimeTravel/scheduledBalanceAdjustments/ScheduledBalanceAdjustmentsFixedRateFacetTimeTravel.sol @@ -0,0 +1,21 @@ +// SPDX-License-Identifier: Apache-2.0 +pragma solidity >=0.8.0 <0.9.0; + +import { + ScheduledBalanceAdjustmentsFixedRateFacet +} from "../../../../layer_2/scheduledTasks/scheduledBalanceAdjustments/fixedRate/ScheduledBalanceAdjustmentsFixedRateFacet.sol"; +import { TimeTravelStorageWrapper } from "../../timeTravel/TimeTravelStorageWrapper.sol"; +import { LocalContext } from "../../../../layer_0/context/LocalContext.sol"; + +contract ScheduledBalanceAdjustmentsFixedRateFacetTimeTravel is + ScheduledBalanceAdjustmentsFixedRateFacet, + TimeTravelStorageWrapper +{ + function _blockTimestamp() internal view override(LocalContext, TimeTravelStorageWrapper) returns (uint256) { + return TimeTravelStorageWrapper._blockTimestamp(); + } + + function _blockNumber() internal view override(LocalContext, TimeTravelStorageWrapper) returns (uint256) { + return TimeTravelStorageWrapper._blockNumber(); + } +} diff --git a/packages/ats/contracts/contracts/test/testTimeTravel/facetsTimeTravel/scheduledBalanceAdjustments/ScheduledBalanceAdjustmentsKpiLinkedRateFacetTimeTravel.sol b/packages/ats/contracts/contracts/test/testTimeTravel/facetsTimeTravel/scheduledBalanceAdjustments/ScheduledBalanceAdjustmentsKpiLinkedRateFacetTimeTravel.sol new file mode 100644 index 000000000..cb6d8fb64 --- /dev/null +++ b/packages/ats/contracts/contracts/test/testTimeTravel/facetsTimeTravel/scheduledBalanceAdjustments/ScheduledBalanceAdjustmentsKpiLinkedRateFacetTimeTravel.sol @@ -0,0 +1,21 @@ +// SPDX-License-Identifier: Apache-2.0 +pragma solidity >=0.8.0 <0.9.0; + +import { + ScheduledBalanceAdjustmentsKpiLinkedRateFacet +} from "../../../../layer_2/scheduledTasks/scheduledBalanceAdjustments/kpiLinkedRate/ScheduledBalanceAdjustmentsKpiLinkedRateFacet.sol"; +import { TimeTravelStorageWrapper } from "../../timeTravel/TimeTravelStorageWrapper.sol"; +import { LocalContext } from "../../../../layer_0/context/LocalContext.sol"; + +contract ScheduledBalanceAdjustmentsKpiLinkedRateFacetTimeTravel is + ScheduledBalanceAdjustmentsKpiLinkedRateFacet, + TimeTravelStorageWrapper +{ + function _blockTimestamp() internal view override(LocalContext, TimeTravelStorageWrapper) returns (uint256) { + return TimeTravelStorageWrapper._blockTimestamp(); + } + + function _blockNumber() internal view override(LocalContext, TimeTravelStorageWrapper) returns (uint256) { + return TimeTravelStorageWrapper._blockNumber(); + } +} diff --git a/packages/ats/contracts/contracts/test/testTimeTravel/facetsTimeTravel/scheduledBalanceAdjustments/ScheduledBalanceAdjustmentsSustainabilityPerformanceTargetRateFacetTimeTravel.sol b/packages/ats/contracts/contracts/test/testTimeTravel/facetsTimeTravel/scheduledBalanceAdjustments/ScheduledBalanceAdjustmentsSustainabilityPerformanceTargetRateFacetTimeTravel.sol new file mode 100644 index 000000000..84df89480 --- /dev/null +++ b/packages/ats/contracts/contracts/test/testTimeTravel/facetsTimeTravel/scheduledBalanceAdjustments/ScheduledBalanceAdjustmentsSustainabilityPerformanceTargetRateFacetTimeTravel.sol @@ -0,0 +1,21 @@ +// SPDX-License-Identifier: Apache-2.0 +pragma solidity >=0.8.0 <0.9.0; + +import { + ScheduledBalanceAdjustmentsSustainabilityPerformanceTargetRateFacet +} from "../../../../layer_2/scheduledTasks/scheduledBalanceAdjustments/sustainabilityPerformanceTargetRate/ScheduledBalanceAdjustmentsSustainabilityPerformanceTargetRateFacet.sol"; +import { TimeTravelStorageWrapper } from "../../timeTravel/TimeTravelStorageWrapper.sol"; +import { LocalContext } from "../../../../layer_0/context/LocalContext.sol"; + +contract ScheduledBalanceAdjustmentsSustainabilityPerformanceTargetRateFacetTimeTravel is + ScheduledBalanceAdjustmentsSustainabilityPerformanceTargetRateFacet, + TimeTravelStorageWrapper +{ + function _blockTimestamp() internal view override(LocalContext, TimeTravelStorageWrapper) returns (uint256) { + return TimeTravelStorageWrapper._blockTimestamp(); + } + + function _blockNumber() internal view override(LocalContext, TimeTravelStorageWrapper) returns (uint256) { + return TimeTravelStorageWrapper._blockNumber(); + } +} diff --git a/packages/ats/contracts/contracts/test/testTimeTravel/facetsTimeTravel/scheduledCouponListing/ScheduledCouponListingFacetTimeTravel.sol b/packages/ats/contracts/contracts/test/testTimeTravel/facetsTimeTravel/scheduledCouponListing/ScheduledCouponListingFacetTimeTravel.sol new file mode 100644 index 000000000..6ed5e3a69 --- /dev/null +++ b/packages/ats/contracts/contracts/test/testTimeTravel/facetsTimeTravel/scheduledCouponListing/ScheduledCouponListingFacetTimeTravel.sol @@ -0,0 +1,18 @@ +// SPDX-License-Identifier: Apache-2.0 +pragma solidity >=0.8.0 <0.9.0; + +import { + ScheduledCouponListingFacet +} from "../../../../layer_2/scheduledTasks/scheduledCouponListing/standard/ScheduledCouponListingFacet.sol"; +import { TimeTravelStorageWrapper } from "../../timeTravel/TimeTravelStorageWrapper.sol"; +import { LocalContext } from "../../../../layer_0/context/LocalContext.sol"; + +contract ScheduledCouponListingFacetTimeTravel is ScheduledCouponListingFacet, TimeTravelStorageWrapper { + function _blockTimestamp() internal view override(LocalContext, TimeTravelStorageWrapper) returns (uint256) { + return TimeTravelStorageWrapper._blockTimestamp(); + } + + function _blockNumber() internal view override(LocalContext, TimeTravelStorageWrapper) returns (uint256) { + return TimeTravelStorageWrapper._blockNumber(); + } +} diff --git a/packages/ats/contracts/contracts/test/testTimeTravel/facetsTimeTravel/scheduledCouponListing/ScheduledCouponListingFixedRateFacetTimeTravel.sol b/packages/ats/contracts/contracts/test/testTimeTravel/facetsTimeTravel/scheduledCouponListing/ScheduledCouponListingFixedRateFacetTimeTravel.sol new file mode 100644 index 000000000..897faa5e3 --- /dev/null +++ b/packages/ats/contracts/contracts/test/testTimeTravel/facetsTimeTravel/scheduledCouponListing/ScheduledCouponListingFixedRateFacetTimeTravel.sol @@ -0,0 +1,21 @@ +// SPDX-License-Identifier: Apache-2.0 +pragma solidity >=0.8.0 <0.9.0; + +import { + ScheduledCouponListingFixedRateFacet +} from "../../../../layer_2/scheduledTasks/scheduledCouponListing/fixedRate/ScheduledCouponListingFixedRateFacet.sol"; +import { TimeTravelStorageWrapper } from "../../timeTravel/TimeTravelStorageWrapper.sol"; +import { LocalContext } from "../../../../layer_0/context/LocalContext.sol"; + +contract ScheduledCouponListingFixedRateFacetTimeTravel is + ScheduledCouponListingFixedRateFacet, + TimeTravelStorageWrapper +{ + function _blockTimestamp() internal view override(LocalContext, TimeTravelStorageWrapper) returns (uint256) { + return TimeTravelStorageWrapper._blockTimestamp(); + } + + function _blockNumber() internal view override(LocalContext, TimeTravelStorageWrapper) returns (uint256) { + return TimeTravelStorageWrapper._blockNumber(); + } +} diff --git a/packages/ats/contracts/contracts/test/testTimeTravel/facetsTimeTravel/scheduledCouponListing/ScheduledCouponListingKpiLinkedRateFacetTimeTravel.sol b/packages/ats/contracts/contracts/test/testTimeTravel/facetsTimeTravel/scheduledCouponListing/ScheduledCouponListingKpiLinkedRateFacetTimeTravel.sol new file mode 100644 index 000000000..e13a8d259 --- /dev/null +++ b/packages/ats/contracts/contracts/test/testTimeTravel/facetsTimeTravel/scheduledCouponListing/ScheduledCouponListingKpiLinkedRateFacetTimeTravel.sol @@ -0,0 +1,21 @@ +// SPDX-License-Identifier: Apache-2.0 +pragma solidity >=0.8.0 <0.9.0; + +import { + ScheduledCouponListingKpiLinkedRateFacet +} from "../../../../layer_2/scheduledTasks/scheduledCouponListing/kpiLinkedRate/ScheduledCouponListingKpiLinkedRateFacet.sol"; +import { TimeTravelStorageWrapper } from "../../timeTravel/TimeTravelStorageWrapper.sol"; +import { LocalContext } from "../../../../layer_0/context/LocalContext.sol"; + +contract ScheduledCouponListingKpiLinkedRateFacetTimeTravel is + ScheduledCouponListingKpiLinkedRateFacet, + TimeTravelStorageWrapper +{ + function _blockTimestamp() internal view override(LocalContext, TimeTravelStorageWrapper) returns (uint256) { + return TimeTravelStorageWrapper._blockTimestamp(); + } + + function _blockNumber() internal view override(LocalContext, TimeTravelStorageWrapper) returns (uint256) { + return TimeTravelStorageWrapper._blockNumber(); + } +} diff --git a/packages/ats/contracts/contracts/test/testTimeTravel/facetsTimeTravel/scheduledCouponListing/ScheduledCouponListingSustainabilityPerformanceTargetRateFacetTimeTravel.sol b/packages/ats/contracts/contracts/test/testTimeTravel/facetsTimeTravel/scheduledCouponListing/ScheduledCouponListingSustainabilityPerformanceTargetRateFacetTimeTravel.sol new file mode 100644 index 000000000..4fa697b49 --- /dev/null +++ b/packages/ats/contracts/contracts/test/testTimeTravel/facetsTimeTravel/scheduledCouponListing/ScheduledCouponListingSustainabilityPerformanceTargetRateFacetTimeTravel.sol @@ -0,0 +1,21 @@ +// SPDX-License-Identifier: Apache-2.0 +pragma solidity >=0.8.0 <0.9.0; + +import { + ScheduledCouponListingSustainabilityPerformanceTargetRateFacet +} from "../../../../layer_2/scheduledTasks/scheduledCouponListing/sustainabilityPerformanceTargetRate/ScheduledCouponListingSustainabilityPerformanceTargetRateFacet.sol"; +import { TimeTravelStorageWrapper } from "../../timeTravel/TimeTravelStorageWrapper.sol"; +import { LocalContext } from "../../../../layer_0/context/LocalContext.sol"; + +contract ScheduledCouponListingSustainabilityPerformanceTargetRateFacetTimeTravel is + ScheduledCouponListingSustainabilityPerformanceTargetRateFacet, + TimeTravelStorageWrapper +{ + function _blockTimestamp() internal view override(LocalContext, TimeTravelStorageWrapper) returns (uint256) { + return TimeTravelStorageWrapper._blockTimestamp(); + } + + function _blockNumber() internal view override(LocalContext, TimeTravelStorageWrapper) returns (uint256) { + return TimeTravelStorageWrapper._blockNumber(); + } +} diff --git a/packages/ats/contracts/contracts/test/testTimeTravel/facetsTimeTravel/scheduledCrossOrderedTasks/ScheduledCrossOrderedTasksFixedRateFacetTimeTravel.sol b/packages/ats/contracts/contracts/test/testTimeTravel/facetsTimeTravel/scheduledCrossOrderedTasks/ScheduledCrossOrderedTasksFixedRateFacetTimeTravel.sol new file mode 100644 index 000000000..ab489692f --- /dev/null +++ b/packages/ats/contracts/contracts/test/testTimeTravel/facetsTimeTravel/scheduledCrossOrderedTasks/ScheduledCrossOrderedTasksFixedRateFacetTimeTravel.sol @@ -0,0 +1,21 @@ +// SPDX-License-Identifier: Apache-2.0 +pragma solidity >=0.8.0 <0.9.0; + +import { + ScheduledCrossOrderedTasksFixedRateFacet +} from "../../../../layer_2/scheduledTasks/scheduledCrossOrderedTasks/fixedRate/ScheduledCrossOrderedTasksFixedRateFacet.sol"; +import { TimeTravelStorageWrapper } from "../../timeTravel/TimeTravelStorageWrapper.sol"; +import { LocalContext } from "../../../../layer_0/context/LocalContext.sol"; + +contract ScheduledCrossOrderedTasksFixedRateFacetTimeTravel is + ScheduledCrossOrderedTasksFixedRateFacet, + TimeTravelStorageWrapper +{ + function _blockTimestamp() internal view override(LocalContext, TimeTravelStorageWrapper) returns (uint256) { + return TimeTravelStorageWrapper._blockTimestamp(); + } + + function _blockNumber() internal view override(LocalContext, TimeTravelStorageWrapper) returns (uint256) { + return TimeTravelStorageWrapper._blockNumber(); + } +} diff --git a/packages/ats/contracts/contracts/test/testTimeTravel/facetsTimeTravel/scheduledCrossOrderedTasks/ScheduledCrossOrderedTasksKpiLinkedRateFacetTimeTravel.sol b/packages/ats/contracts/contracts/test/testTimeTravel/facetsTimeTravel/scheduledCrossOrderedTasks/ScheduledCrossOrderedTasksKpiLinkedRateFacetTimeTravel.sol new file mode 100644 index 000000000..67a5f226a --- /dev/null +++ b/packages/ats/contracts/contracts/test/testTimeTravel/facetsTimeTravel/scheduledCrossOrderedTasks/ScheduledCrossOrderedTasksKpiLinkedRateFacetTimeTravel.sol @@ -0,0 +1,21 @@ +// SPDX-License-Identifier: Apache-2.0 +pragma solidity >=0.8.0 <0.9.0; + +import { + ScheduledCrossOrderedTasksKpiLinkedRateFacet +} from "../../../../layer_2/scheduledTasks/scheduledCrossOrderedTasks/kpiLinkedRate/ScheduledCrossOrderedTasksKpiLinkedRateFacet.sol"; +import { TimeTravelStorageWrapper } from "../../timeTravel/TimeTravelStorageWrapper.sol"; +import { LocalContext } from "../../../../layer_0/context/LocalContext.sol"; + +contract ScheduledCrossOrderedTasksKpiLinkedRateFacetTimeTravel is + ScheduledCrossOrderedTasksKpiLinkedRateFacet, + TimeTravelStorageWrapper +{ + function _blockTimestamp() internal view override(LocalContext, TimeTravelStorageWrapper) returns (uint256) { + return TimeTravelStorageWrapper._blockTimestamp(); + } + + function _blockNumber() internal view override(LocalContext, TimeTravelStorageWrapper) returns (uint256) { + return TimeTravelStorageWrapper._blockNumber(); + } +} diff --git a/packages/ats/contracts/contracts/test/testTimeTravel/facetsTimeTravel/scheduledCrossOrderedTasks/ScheduledCrossOrderedTasksSustainabilityPerformanceTargetRateFacetTimeTravel.sol b/packages/ats/contracts/contracts/test/testTimeTravel/facetsTimeTravel/scheduledCrossOrderedTasks/ScheduledCrossOrderedTasksSustainabilityPerformanceTargetRateFacetTimeTravel.sol new file mode 100644 index 000000000..52ca90e09 --- /dev/null +++ b/packages/ats/contracts/contracts/test/testTimeTravel/facetsTimeTravel/scheduledCrossOrderedTasks/ScheduledCrossOrderedTasksSustainabilityPerformanceTargetRateFacetTimeTravel.sol @@ -0,0 +1,21 @@ +// SPDX-License-Identifier: Apache-2.0 +pragma solidity >=0.8.0 <0.9.0; + +import { + ScheduledCrossOrderedTasksSustainabilityPerformanceTargetRateFacet +} from "../../../../layer_2/scheduledTasks/scheduledCrossOrderedTasks/sustainabilityPerformanceTargetRate/ScheduledCrossOrderedTasksSustainabilityPerformanceTargetRateFacet.sol"; +import { TimeTravelStorageWrapper } from "../../timeTravel/TimeTravelStorageWrapper.sol"; +import { LocalContext } from "../../../../layer_0/context/LocalContext.sol"; + +contract ScheduledCrossOrderedTasksSustainabilityPerformanceTargetRateFacetTimeTravel is + ScheduledCrossOrderedTasksSustainabilityPerformanceTargetRateFacet, + TimeTravelStorageWrapper +{ + function _blockTimestamp() internal view override(LocalContext, TimeTravelStorageWrapper) returns (uint256) { + return TimeTravelStorageWrapper._blockTimestamp(); + } + + function _blockNumber() internal view override(LocalContext, TimeTravelStorageWrapper) returns (uint256) { + return TimeTravelStorageWrapper._blockNumber(); + } +} diff --git a/packages/ats/contracts/contracts/test/testTimeTravel/facetsTimeTravel/ScheduledSnapshotsFacetTimeTravel.sol b/packages/ats/contracts/contracts/test/testTimeTravel/facetsTimeTravel/scheduledSnapshots/ScheduledSnapshotsFacetTimeTravel.sol similarity index 67% rename from packages/ats/contracts/contracts/test/testTimeTravel/facetsTimeTravel/ScheduledSnapshotsFacetTimeTravel.sol rename to packages/ats/contracts/contracts/test/testTimeTravel/facetsTimeTravel/scheduledSnapshots/ScheduledSnapshotsFacetTimeTravel.sol index 02b3b607b..0f4f6c3be 100644 --- a/packages/ats/contracts/contracts/test/testTimeTravel/facetsTimeTravel/ScheduledSnapshotsFacetTimeTravel.sol +++ b/packages/ats/contracts/contracts/test/testTimeTravel/facetsTimeTravel/scheduledSnapshots/ScheduledSnapshotsFacetTimeTravel.sol @@ -3,9 +3,9 @@ pragma solidity >=0.8.0 <0.9.0; import { ScheduledSnapshotsFacet -} from "../../../layer_2/scheduledTasks/scheduledSnapshots/ScheduledSnapshotsFacet.sol"; -import { TimeTravelStorageWrapper } from "../timeTravel/TimeTravelStorageWrapper.sol"; -import { LocalContext } from "../../../layer_0/context/LocalContext.sol"; +} from "../../../../layer_2/scheduledTasks/scheduledSnapshots/standard/ScheduledSnapshotsFacet.sol"; +import { TimeTravelStorageWrapper } from "../../timeTravel/TimeTravelStorageWrapper.sol"; +import { LocalContext } from "../../../../layer_0/context/LocalContext.sol"; contract ScheduledSnapshotsFacetTimeTravel is ScheduledSnapshotsFacet, TimeTravelStorageWrapper { function _blockTimestamp() internal view override(LocalContext, TimeTravelStorageWrapper) returns (uint256) { diff --git a/packages/ats/contracts/contracts/test/testTimeTravel/facetsTimeTravel/scheduledSnapshots/ScheduledSnapshotsFixedRateFacetTimeTravel.sol b/packages/ats/contracts/contracts/test/testTimeTravel/facetsTimeTravel/scheduledSnapshots/ScheduledSnapshotsFixedRateFacetTimeTravel.sol new file mode 100644 index 000000000..cb6ad01a8 --- /dev/null +++ b/packages/ats/contracts/contracts/test/testTimeTravel/facetsTimeTravel/scheduledSnapshots/ScheduledSnapshotsFixedRateFacetTimeTravel.sol @@ -0,0 +1,18 @@ +// SPDX-License-Identifier: Apache-2.0 +pragma solidity >=0.8.0 <0.9.0; + +import { + ScheduledSnapshotsFixedRateFacet +} from "../../../../layer_2/scheduledTasks/scheduledSnapshots/fixedRate/ScheduledSnapshotsFixedRateFacet.sol"; +import { TimeTravelStorageWrapper } from "../../timeTravel/TimeTravelStorageWrapper.sol"; +import { LocalContext } from "../../../../layer_0/context/LocalContext.sol"; + +contract ScheduledSnapshotsFixedRateFacetTimeTravel is ScheduledSnapshotsFixedRateFacet, TimeTravelStorageWrapper { + function _blockTimestamp() internal view override(LocalContext, TimeTravelStorageWrapper) returns (uint256) { + return TimeTravelStorageWrapper._blockTimestamp(); + } + + function _blockNumber() internal view override(LocalContext, TimeTravelStorageWrapper) returns (uint256) { + return TimeTravelStorageWrapper._blockNumber(); + } +} diff --git a/packages/ats/contracts/contracts/test/testTimeTravel/facetsTimeTravel/scheduledSnapshots/ScheduledSnapshotsKpiLinkedRateFacetTimeTravel.sol b/packages/ats/contracts/contracts/test/testTimeTravel/facetsTimeTravel/scheduledSnapshots/ScheduledSnapshotsKpiLinkedRateFacetTimeTravel.sol new file mode 100644 index 000000000..cfeb8ce97 --- /dev/null +++ b/packages/ats/contracts/contracts/test/testTimeTravel/facetsTimeTravel/scheduledSnapshots/ScheduledSnapshotsKpiLinkedRateFacetTimeTravel.sol @@ -0,0 +1,21 @@ +// SPDX-License-Identifier: Apache-2.0 +pragma solidity >=0.8.0 <0.9.0; + +import { + ScheduledSnapshotsKpiLinkedRateFacet +} from "../../../../layer_2/scheduledTasks/scheduledSnapshots/kpiLinkedRate/ScheduledSnapshotsKpiLinkedRateFacet.sol"; +import { TimeTravelStorageWrapper } from "../../timeTravel/TimeTravelStorageWrapper.sol"; +import { LocalContext } from "../../../../layer_0/context/LocalContext.sol"; + +contract ScheduledSnapshotsKpiLinkedRateFacetTimeTravel is + ScheduledSnapshotsKpiLinkedRateFacet, + TimeTravelStorageWrapper +{ + function _blockTimestamp() internal view override(LocalContext, TimeTravelStorageWrapper) returns (uint256) { + return TimeTravelStorageWrapper._blockTimestamp(); + } + + function _blockNumber() internal view override(LocalContext, TimeTravelStorageWrapper) returns (uint256) { + return TimeTravelStorageWrapper._blockNumber(); + } +} diff --git a/packages/ats/contracts/contracts/test/testTimeTravel/facetsTimeTravel/scheduledSnapshots/ScheduledSnapshotsSustainabilityPerformanceTargetRateFacetTimeTravel.sol b/packages/ats/contracts/contracts/test/testTimeTravel/facetsTimeTravel/scheduledSnapshots/ScheduledSnapshotsSustainabilityPerformanceTargetRateFacetTimeTravel.sol new file mode 100644 index 000000000..643957914 --- /dev/null +++ b/packages/ats/contracts/contracts/test/testTimeTravel/facetsTimeTravel/scheduledSnapshots/ScheduledSnapshotsSustainabilityPerformanceTargetRateFacetTimeTravel.sol @@ -0,0 +1,21 @@ +// SPDX-License-Identifier: Apache-2.0 +pragma solidity >=0.8.0 <0.9.0; + +import { + ScheduledSnapshotsSustainabilityPerformanceTargetRateFacet +} from "../../../../layer_2/scheduledTasks/scheduledSnapshots/sustainabilityPerformanceTargetRate/ScheduledSnapshotsSustainabilityPerformanceTargetRateFacet.sol"; +import { TimeTravelStorageWrapper } from "../../timeTravel/TimeTravelStorageWrapper.sol"; +import { LocalContext } from "../../../../layer_0/context/LocalContext.sol"; + +contract ScheduledSnapshotsSustainabilityPerformanceTargetRateFacetTimeTravel is + ScheduledSnapshotsSustainabilityPerformanceTargetRateFacet, + TimeTravelStorageWrapper +{ + function _blockTimestamp() internal view override(LocalContext, TimeTravelStorageWrapper) returns (uint256) { + return TimeTravelStorageWrapper._blockTimestamp(); + } + + function _blockNumber() internal view override(LocalContext, TimeTravelStorageWrapper) returns (uint256) { + return TimeTravelStorageWrapper._blockNumber(); + } +} diff --git a/packages/ats/contracts/contracts/test/testTimeTravel/facetsTimeTravel/ScheduledTasksFacetTimeTravel.sol b/packages/ats/contracts/contracts/test/testTimeTravel/facetsTimeTravel/scheduledTasks/ScheduledTasksFacetTimeTravel.sol similarity index 67% rename from packages/ats/contracts/contracts/test/testTimeTravel/facetsTimeTravel/ScheduledTasksFacetTimeTravel.sol rename to packages/ats/contracts/contracts/test/testTimeTravel/facetsTimeTravel/scheduledTasks/ScheduledTasksFacetTimeTravel.sol index d25842f0f..1c5482f29 100644 --- a/packages/ats/contracts/contracts/test/testTimeTravel/facetsTimeTravel/ScheduledTasksFacetTimeTravel.sol +++ b/packages/ats/contracts/contracts/test/testTimeTravel/facetsTimeTravel/scheduledTasks/ScheduledTasksFacetTimeTravel.sol @@ -3,9 +3,9 @@ pragma solidity >=0.8.0 <0.9.0; import { ScheduledCrossOrderedTasksFacet -} from "../../../layer_2/scheduledTasks/scheduledCrossOrderedTasks/ScheduledCrossOrderedTasksFacet.sol"; -import { TimeTravelStorageWrapper } from "../timeTravel/TimeTravelStorageWrapper.sol"; -import { LocalContext } from "../../../layer_0/context/LocalContext.sol"; +} from "../../../../layer_2/scheduledTasks/scheduledCrossOrderedTasks/standard/ScheduledCrossOrderedTasksFacet.sol"; +import { TimeTravelStorageWrapper } from "../../timeTravel/TimeTravelStorageWrapper.sol"; +import { LocalContext } from "../../../../layer_0/context/LocalContext.sol"; contract ScheduledCrossOrderedTasksFacetTimeTravel is ScheduledCrossOrderedTasksFacet, TimeTravelStorageWrapper { function _blockTimestamp() internal view override(LocalContext, TimeTravelStorageWrapper) returns (uint256) { diff --git a/packages/ats/contracts/contracts/test/testTimeTravel/facetsTimeTravel/SnapshotsFacetTimeTravel.sol b/packages/ats/contracts/contracts/test/testTimeTravel/facetsTimeTravel/snapshots/SnapshotsFacetTimeTravel.sol similarity index 66% rename from packages/ats/contracts/contracts/test/testTimeTravel/facetsTimeTravel/SnapshotsFacetTimeTravel.sol rename to packages/ats/contracts/contracts/test/testTimeTravel/facetsTimeTravel/snapshots/SnapshotsFacetTimeTravel.sol index 28f60d209..0c8515602 100644 --- a/packages/ats/contracts/contracts/test/testTimeTravel/facetsTimeTravel/SnapshotsFacetTimeTravel.sol +++ b/packages/ats/contracts/contracts/test/testTimeTravel/facetsTimeTravel/snapshots/SnapshotsFacetTimeTravel.sol @@ -1,9 +1,9 @@ // SPDX-License-Identifier: Apache-2.0 pragma solidity >=0.8.0 <0.9.0; -import { SnapshotsFacet } from "../../../layer_1/snapshots/SnapshotsFacet.sol"; -import { TimeTravelStorageWrapper } from "../timeTravel/TimeTravelStorageWrapper.sol"; -import { LocalContext } from "../../../layer_0/context/LocalContext.sol"; +import { SnapshotsFacet } from "../../../../layer_1/snapshots/standard/SnapshotsFacet.sol"; +import { TimeTravelStorageWrapper } from "../../timeTravel/TimeTravelStorageWrapper.sol"; +import { LocalContext } from "../../../../layer_0/context/LocalContext.sol"; contract SnapshotsFacetTimeTravel is SnapshotsFacet, TimeTravelStorageWrapper { function _blockTimestamp() internal view override(LocalContext, TimeTravelStorageWrapper) returns (uint256) { diff --git a/packages/ats/contracts/contracts/test/testTimeTravel/facetsTimeTravel/snapshots/SnapshotsFixedRateFacetTimeTravel.sol b/packages/ats/contracts/contracts/test/testTimeTravel/facetsTimeTravel/snapshots/SnapshotsFixedRateFacetTimeTravel.sol new file mode 100644 index 000000000..6ce84c12b --- /dev/null +++ b/packages/ats/contracts/contracts/test/testTimeTravel/facetsTimeTravel/snapshots/SnapshotsFixedRateFacetTimeTravel.sol @@ -0,0 +1,16 @@ +// SPDX-License-Identifier: Apache-2.0 +pragma solidity >=0.8.0 <0.9.0; + +import { SnapshotsFixedRateFacet } from "contracts/layer_1/snapshots/fixedRate/SnapshotsFixedRateFacet.sol"; +import { TimeTravelStorageWrapper } from "../../timeTravel/TimeTravelStorageWrapper.sol"; +import { LocalContext } from "contracts/layer_0/context/LocalContext.sol"; + +contract SnapshotsFixedRateFacetTimeTravel is SnapshotsFixedRateFacet, TimeTravelStorageWrapper { + function _blockTimestamp() internal view override(LocalContext, TimeTravelStorageWrapper) returns (uint256) { + return TimeTravelStorageWrapper._blockTimestamp(); + } + + function _blockNumber() internal view override(LocalContext, TimeTravelStorageWrapper) returns (uint256) { + return TimeTravelStorageWrapper._blockNumber(); + } +} diff --git a/packages/ats/contracts/contracts/test/testTimeTravel/facetsTimeTravel/snapshots/SnapshotsKpiLinkedRateFacetTimeTravel.sol b/packages/ats/contracts/contracts/test/testTimeTravel/facetsTimeTravel/snapshots/SnapshotsKpiLinkedRateFacetTimeTravel.sol new file mode 100644 index 000000000..7822c0155 --- /dev/null +++ b/packages/ats/contracts/contracts/test/testTimeTravel/facetsTimeTravel/snapshots/SnapshotsKpiLinkedRateFacetTimeTravel.sol @@ -0,0 +1,16 @@ +// SPDX-License-Identifier: Apache-2.0 +pragma solidity >=0.8.0 <0.9.0; + +import { SnapshotsKpiLinkedRateFacet } from "contracts/layer_1/snapshots/kpiLinkedRate/SnapshotsKpiLinkedRateFacet.sol"; +import { TimeTravelStorageWrapper } from "../../timeTravel/TimeTravelStorageWrapper.sol"; +import { LocalContext } from "contracts/layer_0/context/LocalContext.sol"; + +contract SnapshotsKpiLinkedRateFacetTimeTravel is SnapshotsKpiLinkedRateFacet, TimeTravelStorageWrapper { + function _blockTimestamp() internal view override(LocalContext, TimeTravelStorageWrapper) returns (uint256) { + return TimeTravelStorageWrapper._blockTimestamp(); + } + + function _blockNumber() internal view override(LocalContext, TimeTravelStorageWrapper) returns (uint256) { + return TimeTravelStorageWrapper._blockNumber(); + } +} diff --git a/packages/ats/contracts/contracts/test/testTimeTravel/facetsTimeTravel/snapshots/SnapshotsSustainabilityPerformanceTargetRateFacetTimeTravel.sol b/packages/ats/contracts/contracts/test/testTimeTravel/facetsTimeTravel/snapshots/SnapshotsSustainabilityPerformanceTargetRateFacetTimeTravel.sol new file mode 100644 index 000000000..e8f239378 --- /dev/null +++ b/packages/ats/contracts/contracts/test/testTimeTravel/facetsTimeTravel/snapshots/SnapshotsSustainabilityPerformanceTargetRateFacetTimeTravel.sol @@ -0,0 +1,21 @@ +// SPDX-License-Identifier: Apache-2.0 +pragma solidity >=0.8.0 <0.9.0; + +import { + SnapshotsSustainabilityPerformanceTargetRateFacet +} from "contracts/layer_1/snapshots/sustainabilityPerformanceTargetRate/SnapshotsSustainabilityPerformanceTargetRateFacet.sol"; +import { TimeTravelStorageWrapper } from "../../timeTravel/TimeTravelStorageWrapper.sol"; +import { LocalContext } from "contracts/layer_0/context/LocalContext.sol"; + +contract SnapshotsSustainabilityPerformanceTargetRateFacetTimeTravel is + SnapshotsSustainabilityPerformanceTargetRateFacet, + TimeTravelStorageWrapper +{ + function _blockTimestamp() internal view override(LocalContext, TimeTravelStorageWrapper) returns (uint256) { + return TimeTravelStorageWrapper._blockTimestamp(); + } + + function _blockNumber() internal view override(LocalContext, TimeTravelStorageWrapper) returns (uint256) { + return TimeTravelStorageWrapper._blockNumber(); + } +} diff --git a/packages/ats/contracts/contracts/test/testTimeTravel/facetsTimeTravel/SsiManagementFacetTimeTravel.sol b/packages/ats/contracts/contracts/test/testTimeTravel/facetsTimeTravel/ssiManagement/SsiManagementFacetTimeTravel.sol similarity index 66% rename from packages/ats/contracts/contracts/test/testTimeTravel/facetsTimeTravel/SsiManagementFacetTimeTravel.sol rename to packages/ats/contracts/contracts/test/testTimeTravel/facetsTimeTravel/ssiManagement/SsiManagementFacetTimeTravel.sol index 6fe0d9f00..a45b410a7 100644 --- a/packages/ats/contracts/contracts/test/testTimeTravel/facetsTimeTravel/SsiManagementFacetTimeTravel.sol +++ b/packages/ats/contracts/contracts/test/testTimeTravel/facetsTimeTravel/ssiManagement/SsiManagementFacetTimeTravel.sol @@ -1,9 +1,9 @@ // SPDX-License-Identifier: Apache-2.0 pragma solidity >=0.8.0 <0.9.0; -import { SsiManagementFacet } from "../../../layer_1/ssi/SsiManagementFacet.sol"; -import { TimeTravelStorageWrapper } from "../timeTravel/TimeTravelStorageWrapper.sol"; -import { LocalContext } from "../../../layer_0/context/LocalContext.sol"; +import { SsiManagementFacet } from "../../../../layer_1/ssi/standard/SsiManagementFacet.sol"; +import { TimeTravelStorageWrapper } from "../../timeTravel/TimeTravelStorageWrapper.sol"; +import { LocalContext } from "../../../../layer_0/context/LocalContext.sol"; contract SsiManagementFacetTimeTravel is SsiManagementFacet, TimeTravelStorageWrapper { function _blockTimestamp() internal view override(LocalContext, TimeTravelStorageWrapper) returns (uint256) { diff --git a/packages/ats/contracts/contracts/test/testTimeTravel/facetsTimeTravel/ssiManagement/SsiManagementFixedRateFacetTimeTravel.sol b/packages/ats/contracts/contracts/test/testTimeTravel/facetsTimeTravel/ssiManagement/SsiManagementFixedRateFacetTimeTravel.sol new file mode 100644 index 000000000..83c0d5e9e --- /dev/null +++ b/packages/ats/contracts/contracts/test/testTimeTravel/facetsTimeTravel/ssiManagement/SsiManagementFixedRateFacetTimeTravel.sol @@ -0,0 +1,16 @@ +// SPDX-License-Identifier: Apache-2.0 +pragma solidity >=0.8.0 <0.9.0; + +import { SsiManagementFixedRateFacet } from "contracts/layer_1/ssi/fixedRate/SsiManagementFixedRateFacet.sol"; +import { TimeTravelStorageWrapper } from "../../timeTravel/TimeTravelStorageWrapper.sol"; +import { LocalContext } from "contracts/layer_0/context/LocalContext.sol"; + +contract SsiManagementFixedRateFacetTimeTravel is SsiManagementFixedRateFacet, TimeTravelStorageWrapper { + function _blockTimestamp() internal view override(LocalContext, TimeTravelStorageWrapper) returns (uint256) { + return TimeTravelStorageWrapper._blockTimestamp(); + } + + function _blockNumber() internal view override(LocalContext, TimeTravelStorageWrapper) returns (uint256) { + return TimeTravelStorageWrapper._blockNumber(); + } +} diff --git a/packages/ats/contracts/contracts/test/testTimeTravel/facetsTimeTravel/ssiManagement/SsiManagementKpiLinkedRateFacetTimeTravel.sol b/packages/ats/contracts/contracts/test/testTimeTravel/facetsTimeTravel/ssiManagement/SsiManagementKpiLinkedRateFacetTimeTravel.sol new file mode 100644 index 000000000..ca9c6bd47 --- /dev/null +++ b/packages/ats/contracts/contracts/test/testTimeTravel/facetsTimeTravel/ssiManagement/SsiManagementKpiLinkedRateFacetTimeTravel.sol @@ -0,0 +1,18 @@ +// SPDX-License-Identifier: Apache-2.0 +pragma solidity >=0.8.0 <0.9.0; + +import { + SsiManagementKpiLinkedRateFacet +} from "contracts/layer_1/ssi/kpiLinkedRate/SsiManagementKpiLinkedRateFacet.sol"; +import { TimeTravelStorageWrapper } from "../../timeTravel/TimeTravelStorageWrapper.sol"; +import { LocalContext } from "contracts/layer_0/context/LocalContext.sol"; + +contract SsiManagementKpiLinkedRateFacetTimeTravel is SsiManagementKpiLinkedRateFacet, TimeTravelStorageWrapper { + function _blockTimestamp() internal view override(LocalContext, TimeTravelStorageWrapper) returns (uint256) { + return TimeTravelStorageWrapper._blockTimestamp(); + } + + function _blockNumber() internal view override(LocalContext, TimeTravelStorageWrapper) returns (uint256) { + return TimeTravelStorageWrapper._blockNumber(); + } +} diff --git a/packages/ats/contracts/contracts/test/testTimeTravel/facetsTimeTravel/ssiManagement/SsiManagementSustainabilityPerformanceTargetRateFacetTimeTravel.sol b/packages/ats/contracts/contracts/test/testTimeTravel/facetsTimeTravel/ssiManagement/SsiManagementSustainabilityPerformanceTargetRateFacetTimeTravel.sol new file mode 100644 index 000000000..565014dab --- /dev/null +++ b/packages/ats/contracts/contracts/test/testTimeTravel/facetsTimeTravel/ssiManagement/SsiManagementSustainabilityPerformanceTargetRateFacetTimeTravel.sol @@ -0,0 +1,21 @@ +// SPDX-License-Identifier: Apache-2.0 +pragma solidity >=0.8.0 <0.9.0; + +import { + SsiManagementSustainabilityPerformanceTargetRateFacet +} from "contracts/layer_1/ssi/sustainabilityPerformanceTargetRate/SsiManagementSustainabilityPerformanceTargetRateFacet.sol"; +import { TimeTravelStorageWrapper } from "../../timeTravel/TimeTravelStorageWrapper.sol"; +import { LocalContext } from "contracts/layer_0/context/LocalContext.sol"; + +contract SsiManagementSustainabilityPerformanceTargetRateFacetTimeTravel is + SsiManagementSustainabilityPerformanceTargetRateFacet, + TimeTravelStorageWrapper +{ + function _blockTimestamp() internal view override(LocalContext, TimeTravelStorageWrapper) returns (uint256) { + return TimeTravelStorageWrapper._blockTimestamp(); + } + + function _blockNumber() internal view override(LocalContext, TimeTravelStorageWrapper) returns (uint256) { + return TimeTravelStorageWrapper._blockNumber(); + } +} diff --git a/packages/ats/contracts/contracts/test/testTimeTravel/facetsTimeTravel/sustainabilityPerformanceTargetRate/SustainabilityPerformanceTargetRateFacetTimeTravel.sol b/packages/ats/contracts/contracts/test/testTimeTravel/facetsTimeTravel/sustainabilityPerformanceTargetRate/SustainabilityPerformanceTargetRateFacetTimeTravel.sol new file mode 100644 index 000000000..6414d5974 --- /dev/null +++ b/packages/ats/contracts/contracts/test/testTimeTravel/facetsTimeTravel/sustainabilityPerformanceTargetRate/SustainabilityPerformanceTargetRateFacetTimeTravel.sol @@ -0,0 +1,21 @@ +// SPDX-License-Identifier: Apache-2.0 +pragma solidity >=0.8.0 <0.9.0; + +import { + SustainabilityPerformanceTargetRateFacet +} from "../../../../layer_2/interestRates/sustainabilityPerformanceTargetRate/SustainabilityPerformanceTargetRateFacet.sol"; +import { TimeTravelStorageWrapper } from "../../timeTravel/TimeTravelStorageWrapper.sol"; +import { LocalContext } from "../../../../layer_0/context/LocalContext.sol"; + +contract SustainabilityPerformanceTargetRateFacetTimeTravel is + SustainabilityPerformanceTargetRateFacet, + TimeTravelStorageWrapper +{ + function _blockTimestamp() internal view override(LocalContext, TimeTravelStorageWrapper) returns (uint256) { + return TimeTravelStorageWrapper._blockTimestamp(); + } + + function _blockNumber() internal view override(LocalContext, TimeTravelStorageWrapper) returns (uint256) { + return TimeTravelStorageWrapper._blockNumber(); + } +} diff --git a/packages/ats/contracts/contracts/test/testTimeTravel/facetsTimeTravel/TransferAndLockFacetTimeTravel.sol b/packages/ats/contracts/contracts/test/testTimeTravel/facetsTimeTravel/transferAndLock/TransferAndLockFacetTimeTravel.sol similarity index 65% rename from packages/ats/contracts/contracts/test/testTimeTravel/facetsTimeTravel/TransferAndLockFacetTimeTravel.sol rename to packages/ats/contracts/contracts/test/testTimeTravel/facetsTimeTravel/transferAndLock/TransferAndLockFacetTimeTravel.sol index 9d2b3ca6a..965b9d4bb 100644 --- a/packages/ats/contracts/contracts/test/testTimeTravel/facetsTimeTravel/TransferAndLockFacetTimeTravel.sol +++ b/packages/ats/contracts/contracts/test/testTimeTravel/facetsTimeTravel/transferAndLock/TransferAndLockFacetTimeTravel.sol @@ -1,9 +1,9 @@ // SPDX-License-Identifier: Apache-2.0 pragma solidity >=0.8.0 <0.9.0; -import { TransferAndLockFacet } from "../../../layer_3/transferAndLock/TransferAndLockFacet.sol"; -import { TimeTravelStorageWrapper } from "../timeTravel/TimeTravelStorageWrapper.sol"; -import { LocalContext } from "../../../layer_0/context/LocalContext.sol"; +import { TransferAndLockFacet } from "../../../../layer_3/transferAndLock/standard/TransferAndLockFacet.sol"; +import { TimeTravelStorageWrapper } from "../../timeTravel/TimeTravelStorageWrapper.sol"; +import { LocalContext } from "../../../../layer_0/context/LocalContext.sol"; contract TransferAndLockFacetTimeTravel is TransferAndLockFacet, TimeTravelStorageWrapper { function _blockTimestamp() internal view override(LocalContext, TimeTravelStorageWrapper) returns (uint256) { diff --git a/packages/ats/contracts/contracts/test/testTimeTravel/facetsTimeTravel/transferAndLock/TransferAndLockFixedRateFacetTimeTravel.sol b/packages/ats/contracts/contracts/test/testTimeTravel/facetsTimeTravel/transferAndLock/TransferAndLockFixedRateFacetTimeTravel.sol new file mode 100644 index 000000000..c008acbcf --- /dev/null +++ b/packages/ats/contracts/contracts/test/testTimeTravel/facetsTimeTravel/transferAndLock/TransferAndLockFixedRateFacetTimeTravel.sol @@ -0,0 +1,18 @@ +// SPDX-License-Identifier: Apache-2.0 +pragma solidity >=0.8.0 <0.9.0; + +import { + TransferAndLockFixedRateFacet +} from "../../../../layer_3/transferAndLock/fixedRate/TransferAndLockFixedRateFacet.sol"; +import { TimeTravelStorageWrapper } from "../../timeTravel/TimeTravelStorageWrapper.sol"; +import { LocalContext } from "../../../../layer_0/context/LocalContext.sol"; + +contract TransferAndLockFixedRateFacetTimeTravel is TransferAndLockFixedRateFacet, TimeTravelStorageWrapper { + function _blockTimestamp() internal view override(LocalContext, TimeTravelStorageWrapper) returns (uint256) { + return TimeTravelStorageWrapper._blockTimestamp(); + } + + function _blockNumber() internal view override(LocalContext, TimeTravelStorageWrapper) returns (uint256) { + return TimeTravelStorageWrapper._blockNumber(); + } +} diff --git a/packages/ats/contracts/contracts/test/testTimeTravel/facetsTimeTravel/transferAndLock/TransferAndLockKpiLinkedRateFacetTimeTravel.sol b/packages/ats/contracts/contracts/test/testTimeTravel/facetsTimeTravel/transferAndLock/TransferAndLockKpiLinkedRateFacetTimeTravel.sol new file mode 100644 index 000000000..951c2085c --- /dev/null +++ b/packages/ats/contracts/contracts/test/testTimeTravel/facetsTimeTravel/transferAndLock/TransferAndLockKpiLinkedRateFacetTimeTravel.sol @@ -0,0 +1,18 @@ +// SPDX-License-Identifier: Apache-2.0 +pragma solidity >=0.8.0 <0.9.0; + +import { + TransferAndLockKpiLinkedRateFacet +} from "../../../../layer_3/transferAndLock/kpiLinkedRate/TransferAndLockKpiLinkedRateFacet.sol"; +import { TimeTravelStorageWrapper } from "../../timeTravel/TimeTravelStorageWrapper.sol"; +import { LocalContext } from "../../../../layer_0/context/LocalContext.sol"; + +contract TransferAndLockKpiLinkedRateFacetTimeTravel is TransferAndLockKpiLinkedRateFacet, TimeTravelStorageWrapper { + function _blockTimestamp() internal view override(LocalContext, TimeTravelStorageWrapper) returns (uint256) { + return TimeTravelStorageWrapper._blockTimestamp(); + } + + function _blockNumber() internal view override(LocalContext, TimeTravelStorageWrapper) returns (uint256) { + return TimeTravelStorageWrapper._blockNumber(); + } +} diff --git a/packages/ats/contracts/contracts/test/testTimeTravel/facetsTimeTravel/transferAndLock/TransferAndLockSustainabilityPerformanceTargetRateFacetTimeTravel.sol b/packages/ats/contracts/contracts/test/testTimeTravel/facetsTimeTravel/transferAndLock/TransferAndLockSustainabilityPerformanceTargetRateFacetTimeTravel.sol new file mode 100644 index 000000000..f56b3af8c --- /dev/null +++ b/packages/ats/contracts/contracts/test/testTimeTravel/facetsTimeTravel/transferAndLock/TransferAndLockSustainabilityPerformanceTargetRateFacetTimeTravel.sol @@ -0,0 +1,21 @@ +// SPDX-License-Identifier: Apache-2.0 +pragma solidity >=0.8.0 <0.9.0; + +import { + TransferAndLockSustainabilityPerformanceTargetRateFacet +} from "../../../../layer_3/transferAndLock/sustainabilityPerformanceTargetRate/TransferAndLockSustainabilityPerformanceTargetRateFacet.sol"; +import { TimeTravelStorageWrapper } from "../../timeTravel/TimeTravelStorageWrapper.sol"; +import { LocalContext } from "../../../../layer_0/context/LocalContext.sol"; + +contract TransferAndLockSustainabilityPerformanceTargetRateFacetTimeTravel is + TransferAndLockSustainabilityPerformanceTargetRateFacet, + TimeTravelStorageWrapper +{ + function _blockTimestamp() internal view override(LocalContext, TimeTravelStorageWrapper) returns (uint256) { + return TimeTravelStorageWrapper._blockTimestamp(); + } + + function _blockNumber() internal view override(LocalContext, TimeTravelStorageWrapper) returns (uint256) { + return TimeTravelStorageWrapper._blockNumber(); + } +} diff --git a/packages/ats/contracts/coverage-combine.sh b/packages/ats/contracts/coverage-combine.sh new file mode 100755 index 000000000..72e8420a8 --- /dev/null +++ b/packages/ats/contracts/coverage-combine.sh @@ -0,0 +1,64 @@ +#!/usr/bin/env bash +set -euo pipefail + +# Directory where the script is executed +SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" + +# Monorepo root +ROOT_DIR="$(git rev-parse --show-toplevel)" +cd "$ROOT_DIR" + +WORKSPACE="packages/ats/contracts" +WORKSPACE_COVERAGE="$WORKSPACE/coverage" + +CACHE_DIR="$ROOT_DIR/coverage-cache" +FINAL_COVERAGE_DIR="$SCRIPT_DIR/coverage" + +declare -A TESTS=( + ["layer_1"]="layer1" + ["factory"]="factory" + ["resolver"]="resolver" + ["resolverProxy"]="resolverProxy" +) + +for DIR in "${!TESTS[@]}"; do + CACHE_SUBDIR="$CACHE_DIR/${TESTS[$DIR]}" + echo "Running coverage for $DIR ..." + + mkdir -p "$CACHE_SUBDIR" + + NODE_OPTIONS="--max-old-space-size=8192" \ + npm exec --workspace "$WORKSPACE" -- \ + hardhat coverage \ + --testfiles "test/contracts/unit/$DIR/**/*.ts" + + # Move lcov from workspace + mv "$ROOT_DIR/$WORKSPACE_COVERAGE/coverage-final.json" "$CACHE_SUBDIR/lcov.json" + + # Move HTML from workspace + mkdir -p "$CACHE_SUBDIR/html" + mv "$ROOT_DIR/$WORKSPACE_COVERAGE"/* "$CACHE_SUBDIR/html/" || true + + echo "Coverage for $DIR completed." +done + +# Combine lcovs in root +cd "$ROOT_DIR" +npm exec --workspace "$WORKSPACE" -- \ + istanbul-combine-updated \ + -d "$FINAL_COVERAGE_DIR" \ + -p summary \ + -r lcov \ + -r html \ + -b "$ROOT_DIR/$WORKSPACE" \ + "$CACHE_DIR/factory/lcov.json" \ + "$CACHE_DIR/layer1/lcov.json" \ + "$CACHE_DIR/resolverProxy/lcov.json" \ + "$CACHE_DIR/resolver/lcov.json" + +echo "Combined coverage generated at $FINAL_COVERAGE_DIR" + +# Clean temporary directory +echo "Cleaning temporary directory..." +rm -rf "$CACHE_DIR" +echo "βœ“ Directory $CACHE_DIR deleted" diff --git a/packages/ats/contracts/deployments/hedera-testnet/newBlr-2026-01-07T14-49-51.json b/packages/ats/contracts/deployments/hedera-testnet/newBlr-2026-01-07T14-49-51.json new file mode 100644 index 000000000..79ef8d39d --- /dev/null +++ b/packages/ats/contracts/deployments/hedera-testnet/newBlr-2026-01-07T14-49-51.json @@ -0,0 +1,2349 @@ +{ + "network": "hedera-testnet", + "timestamp": "2026-01-07T14:49:48.606Z", + "deployer": "0x97C50bb12E1C6284cF2855cdba95c5D60AEE44CF", + "infrastructure": { + "proxyAdmin": { + "address": "0x6D7Bb249B7DEbF6CE1D49809e640B204FDE85598", + "contractId": "0.0.7575048" + }, + "blr": { + "implementation": "0xB4Aa8872C5e2c52d83bbbF642D86ea3532CebB83", + "implementationContractId": "0.0.7575049", + "proxy": "0x7D52230BAa8681b2Ca501747259163A63102ba4B", + "proxyContractId": "0.0.7575050" + }, + "factory": { + "implementation": "0x07E10a6FD48b468590129553a4Dd1442178Fa88b", + "implementationContractId": "0.0.7575482", + "proxy": "0xB1Ef04741B7c07c51110Ec6259C47CB98d896BeD", + "proxyContractId": "0.0.7575483" + } + }, + "facets": [ + { + "name": "AccessControlFacet", + "address": "0xc08a9c6E26E9da82f4f6f1DD46A21cba80e42dCf", + "contractId": "0.0.7575053", + "key": "0x011768a41cb4fe76a26f444eec15d81a0d84e919a36336d72c6539cf41c0fcf6" + }, + { + "name": "AccessControlFixedRateFacet", + "address": "0xa2865c42fE8c0Ca25a8F4B6f6A59eb886B95B1Fc", + "contractId": "0.0.7575056", + "key": "0xb35ad81b5769c62538fe6a90e40db8be624645f77c1738ce582ede5da399ecb2" + }, + { + "name": "AccessControlKpiLinkedRateFacet", + "address": "0xC88bfb717d47087177cf7a8FC7d648232368242F", + "contractId": "0.0.7575059", + "key": "0x465c95eea6723a1645e5399789cee702b19d0bcd0ad3f894270aa25488fb4ab9" + }, + { + "name": "AccessControlSustainabilityPerformanceTargetRateFacet", + "address": "0xb60eb2E13244cF21a57ED79Da4Ce8Ab7d7529F4d", + "contractId": "0.0.7575066", + "key": "0x9d13e61abd630355ccae4279993868d7cf3b04d4368a0fedcefe6fec3fabaa0c" + }, + { + "name": "AdjustBalancesFacet", + "address": "0x829254d3D71340ac6B20efbD396c254A33104C3C", + "contractId": "0.0.7575068", + "key": "0x2bbe9fb018f1e7dd12b4442154e7fdfd75aec7b0a65d07debf49de4ece5fe8b8" + }, + { + "name": "AdjustBalancesFixedRateFacet", + "address": "0x74a53e14d6545c0Ac2aC23649064CC705E754638", + "contractId": "0.0.7575073", + "key": "0xa7e8f6d5c4b3a2e1f9d8c7b6a5e4f3d2c1b9a8e7f6d5c4b3a2e1f9d8c7b6a5e4" + }, + { + "name": "AdjustBalancesKpiLinkedRateFacet", + "address": "0x694eEAe0D132E85EAb7276023421B51E32B775ca", + "contractId": "0.0.7575074", + "key": "0xb8f9e7d6c5b4a3e2f1d9c8b7a6e5f4d3c2b1a9e8f7d6c5b4a3e2f1d9c8b7a6e5" + }, + { + "name": "AdjustBalancesSustainabilityPerformanceTargetRateFacet", + "address": "0x86aA1E6EBcf63010fA14Ff9ff3dcE0b04a794d84", + "contractId": "0.0.7575077", + "key": "0xc9e1f8d7c6b5a4e3f2d1c9b8a7e6f5d4c3b2a1e9f8d7c6b5a4e3f2d1c9b8a7e6" + }, + { + "name": "BondUSAFacet", + "address": "0x7a43ee7E8BC21D9FF4fe0f1D2213e7AcDd239453", + "contractId": "0.0.7575078", + "key": "0xe6594ee8f54f346ab25268fdc7955031a6b06102355e1446353d89ab1d593de3" + }, + { + "name": "BondUSAFixedRateFacet", + "address": "0x93f8728B6cE21F4e86612BB7C125B22BE5C11FB8", + "contractId": "0.0.7575079", + "key": "0xd55d8787d23b78e70dada1ade45b8758f5c027e2cddf3556606c07d388ce159a" + }, + { + "name": "BondUSAKpiLinkedRateFacet", + "address": "0x11617c7B442A8180AA9ad9Ae0a5329523d93b2b7", + "contractId": "0.0.7575081", + "key": "0x99c145ff21354eb7b25cb096873143fa3d3aba98457b96bcd13f1d1f2b9bf28c" + }, + { + "name": "BondUSAReadFacet", + "address": "0xA240c494000924bEd8e392073B71B062dBEf84C4", + "contractId": "0.0.7575082", + "key": "0x624866e79d4c0a78a8dc32cbce49563cdf86eba627bd05a9821dbaa1674ac231" + }, + { + "name": "BondUSAReadFixedRateFacet", + "address": "0xd6b5d9B52501fE1D9f2CB5ea95e3E0F2200eC472", + "contractId": "0.0.7575083", + "key": "0xd5d703d15aa25ad6419288846269dcbba84f489f1c986be2c919f84c042b8c24" + }, + { + "name": "BondUSAReadKpiLinkedRateFacet", + "address": "0x8017BaCe9f044f9dfB0fc111C5D908A7F2385159", + "contractId": "0.0.7575087", + "key": "0xcced91a2a03bf45bd62730a7f4703ee2d762f8ebccff315c7145258265f73249" + }, + { + "name": "BondUSAReadSustainabilityPerformanceTargetRateFacet", + "address": "0x56Bb9F9E60663B7E2e0b575e31d075A6ccd88bDF", + "contractId": "0.0.7575088", + "key": "0x339d458f2928ef5148317aab39e4375a27e6c531d2e5b9de2d4fb23ad0e8b504" + }, + { + "name": "BondUSASustainabilityPerformanceTargetRateFacet", + "address": "0xCCCBe75C1c062Be5d867ec1398C6d45D6dCD2213", + "contractId": "0.0.7575090", + "key": "0x8048a878c656dcf3886e69ad27a9272a4fb9499299ab5f0e1b6c99ac3b1130f8" + }, + { + "name": "CapFacet", + "address": "0xDb3a007f1E79c7FC18cffF1BA6147dfC1000dB0f", + "contractId": "0.0.7575092", + "key": "0xfb3f8aac36661b5540c571d821c80dc9db7ede5ca2a4204ee562b3356f0c026b" + }, + { + "name": "CapFixedRateFacet", + "address": "0xd5e98b1c64eE9C8263A1CDA2B8515c90C2eEc78C", + "contractId": "0.0.7575093", + "key": "0x288b5a4b82f38369168fd49de3e5e68c76fc0394c2e89817b70a65368ba4dcf7" + }, + { + "name": "CapKpiLinkedRateFacet", + "address": "0x1b204FaC8260a361C058e9e8BE7771db7ceAE055", + "contractId": "0.0.7575097", + "key": "0xdc8cc0612bf886bcc1666e31c5de3392bee78451de7213b01fe78d560a804435" + }, + { + "name": "CapSustainabilityPerformanceTargetRateFacet", + "address": "0xFA176385A7876CacE67c44B495F0149E8Fd85f21", + "contractId": "0.0.7575099", + "key": "0xa321c5301bbccd760c5aaf08286a67948cb7d49be22c17f12aa163b324a276d0" + }, + { + "name": "ClearingActionsFacet", + "address": "0x497F6f92bFbeE7eE9f8Fc93d6753E6714C0B2798", + "contractId": "0.0.7575101", + "key": "0x5472dfc5c92ad7a8651518ea7d3854d3b6494e5bcaa19f91cd61bf93bf6f2a74" + }, + { + "name": "ClearingActionsFixedRateFacet", + "address": "0xB0088E19b24EAa1413e0dB9a9f895D49A6908029", + "contractId": "0.0.7575102", + "key": "0x497fbb5ba36b9a6b791669e513c877ebfe079b61e0eb37afbd19b696266a0223" + }, + { + "name": "ClearingActionsKpiLinkedRateFacet", + "address": "0x5Da97dC2FeB25b0115DE590FaAb00501e3FB8440", + "contractId": "0.0.7575104", + "key": "0x4960adcd566163ba9edaee816f8739f1c788cace28ad805c136644de52929faa" + }, + { + "name": "ClearingActionsSustainabilityPerformanceTargetRateFacet", + "address": "0x1Fb8Cad8635a430a241a03A93b53fd28047148CA", + "contractId": "0.0.7575105", + "key": "0xae9d6d2e1d9a660994e89e185ab5a3439d2def9baa6ba47fdf854ce0a29a5033" + }, + { + "name": "ClearingHoldCreationFacet", + "address": "0x9285388579ED1e16814De1b5aFc39eDCf77D7B30", + "contractId": "0.0.7575107", + "key": "0x44f99a141c434fac20d69e7511932ee344d5b37b61851976c83a5df4ca468152" + }, + { + "name": "ClearingHoldCreationFixedRateFacet", + "address": "0x0683bcB1F234C28eC7E448511E77F6939849465F", + "contractId": "0.0.7575108", + "key": "0xf4d60b90b7a9edb9598b8c4aa2a4477e3a65750eab2cce564385f35d882a23c3" + }, + { + "name": "ClearingHoldCreationKpiLinkedRateFacet", + "address": "0x981F1380e18D05f58759E270711D3D92b67cC33A", + "contractId": "0.0.7575111", + "key": "0x1ba40338a89cd18f2799a3e6a86f0be118236340eeff5a19a19a08d3d6e3d08c" + }, + { + "name": "ClearingHoldCreationSustainabilityPerformanceTargetRateFacet", + "address": "0x77558a788b36952Ae5927b5091B6Dd3C3a789955", + "contractId": "0.0.7575112", + "key": "0x0e59e36a2b1298d11c3612c3203c6d45cb185879383f5a22617c4f49495c070d" + }, + { + "name": "ClearingReadFacet", + "address": "0x73788B70Cbd8649465Bb2E8a6708Cbf5Db2dFf96", + "contractId": "0.0.7575113", + "key": "0xebb2e29bdf4edaf4ca66a3f9b7735087f9d0474d56d856e53c94ef00596c0b1e" + }, + { + "name": "ClearingReadFixedRateFacet", + "address": "0x14E71963bE1258895b44Fefda292A5C1C76a7c0B", + "contractId": "0.0.7575114", + "key": "0xcd312e798e5b62ec98cc7c8ac3547a640f68ee74e351b73397be02dab3d5b14f" + }, + { + "name": "ClearingReadKpiLinkedRateFacet", + "address": "0xdc1FFA7AdB9253019B9eDA60619A42FFC975094d", + "contractId": "0.0.7575115", + "key": "0x3740ea12ff1c9c37f216ba72884079bcaabe99f51cdd9b019be5b218ba5db0e2" + }, + { + "name": "ClearingReadSustainabilityPerformanceTargetRateFacet", + "address": "0xc122954DB098023Ff28f7633Ce132A57167Cc242", + "contractId": "0.0.7575116", + "key": "0xa188d3ee426a514ccfe03470d196ed29da48de0ae59898d9b5a30ec680515a11" + }, + { + "name": "ClearingRedeemFacet", + "address": "0x3aC35b57B60c579FE95bbD38ec918b6c158101C3", + "contractId": "0.0.7575118", + "key": "0xb341e7aa749da43976c189209de51ccdf838af9f964cd27340b914d5b2aeba97" + }, + { + "name": "ClearingRedeemFixedRateFacet", + "address": "0x780871C37aaB88064eEde9C6749043B4a6aF157d", + "contractId": "0.0.7575120", + "key": "0xa8edf3401d5e3f8e9a45b0992984a31a2522a24ed793e5e7980f8d66508473c9" + }, + { + "name": "ClearingRedeemKpiLinkedRateFacet", + "address": "0x237b992021705267993DC1B26F6aEF5953Fd5Cf5", + "contractId": "0.0.7575121", + "key": "0xc38aaff0161104c594b7a323af3facf5beb1e304b730fcbee09f5eed74b11375" + }, + { + "name": "ClearingRedeemSustainabilityPerformanceTargetRateFacet", + "address": "0xB3211d7d80086C203bDd0e915237Be4f692B8023", + "contractId": "0.0.7575123", + "key": "0xc4731d62375990b9721357983c8f6acf3fdc78d7814919c187607f653b768d5d" + }, + { + "name": "ClearingTransferFacet", + "address": "0xDa8137a4921bA7B65A00e70563E5f992cF039678", + "contractId": "0.0.7575124", + "key": "0x7399d03db62430bec60ca2c3eacf98b1b7e2253f17593ef7a226d759442e0928" + }, + { + "name": "ClearingTransferFixedRateFacet", + "address": "0xa4de3C25E6766B9737AEE17C6E25fD1d3531C165", + "contractId": "0.0.7575125", + "key": "0x1ba056fe3e7ef86779515a9e7f364e84af0f60eb5f4175ac6d6e6e3f4c05fffb" + }, + { + "name": "ClearingTransferKpiLinkedRateFacet", + "address": "0xaF382713513e9908365468Bed9b22BF0ACA6931F", + "contractId": "0.0.7575127", + "key": "0x1b229a6d3b8a8ecba97d1e7c2c4a89c4cf71b9b5852317278f57384d728f8bde" + }, + { + "name": "ClearingTransferSustainabilityPerformanceTargetRateFacet", + "address": "0x1A198BB82fcef280fB7e8E82047a6f74fEF7f368", + "contractId": "0.0.7575131", + "key": "0x7e29efe8ee5285a43acddbe766fd9219266a74cb24ed3331b4e350d8e263d0c7" + }, + { + "name": "ControlListFacet", + "address": "0xa5a4EefbE87F229c73e2177E37d67831AD491B7A", + "contractId": "0.0.7575132", + "key": "0xfbb1491bfcecd95f79409bd5a4b69a4ba1e5573573372f5d2d66c11e3016414c" + }, + { + "name": "ControlListFixedRateFacet", + "address": "0xfc6E7835818A83D69212eEC9ef6803662Be86BbD", + "contractId": "0.0.7575133", + "key": "0x083b7e0957ebd3a0f69bf432ce05d94c1848cbdbf0e66664919c4803b14dfdf8" + }, + { + "name": "ControlListKpiLinkedRateFacet", + "address": "0xD062F2cF4A667C7830B26D66e2a9f5b26d76C037", + "contractId": "0.0.7575135", + "key": "0xaaa80b13f9a051b7f9546e92763bedfbe259f511da870cbb1133fe0e79c8eac5" + }, + { + "name": "ControlListSustainabilityPerformanceTargetRateFacet", + "address": "0x551E4Db8d0ED2e31a9F3C902E25239889230830c", + "contractId": "0.0.7575136", + "key": "0xe3fbab5a4ccf7a873a9601bf5494c43f6e4b53218ff8310ec97811471397b3cf" + }, + { + "name": "CorporateActionsFacet", + "address": "0x24F62675b3D851c597a9E96276BcEaDd665bB0BC", + "contractId": "0.0.7575138", + "key": "0x3cc74200ccfb5d585a6d170f8824979dbf1b592e0a41eef41cf6d86cf4882077" + }, + { + "name": "CorporateActionsFixedRateFacet", + "address": "0xC8036Fd4bc9e2af1315AA7Be881C080101d5d4C2", + "contractId": "0.0.7575140", + "key": "0xd2c0415cebdbb6dcaf014ce92df6bcae060743c622fd7ce954105b71954e0424" + }, + { + "name": "CorporateActionsKpiLinkedRateFacet", + "address": "0x08f4aEa7A74eB08C641CBDf4b1bda792f94CFf07", + "contractId": "0.0.7575142", + "key": "0xf86b1190fb42cc572ccdeac774fdf968c303079b8c5eceaeb1c9f4f9089bb6be" + }, + { + "name": "CorporateActionsSustainabilityPerformanceTargetRateFacet", + "address": "0xD2c45125f800678BeaCD8B004bf6c241C986725E", + "contractId": "0.0.7575145", + "key": "0xa4a23267cb0a22c52bd05b12e644136bc38b7ac51218a0cb3aed166697caa79e" + }, + { + "name": "DiamondCutFacet", + "address": "0x6aB51b29929E91E749872C5bC70e82e43557abad", + "contractId": "0.0.7575148", + "key": "" + }, + { + "name": "DiamondFacet", + "address": "0x4dB7cAF82D03D19b9D6A7919D9B6B14C9d0c6a7e", + "contractId": "0.0.7575151", + "key": "0x1b5212ea37fb29e99afa2812a5d7d7e662a477424d3de1a18cc3871a2ee94d78" + }, + { + "name": "DiamondLoupeFacet", + "address": "0xB2680A79082cAe57593bA1d01cDadD3F75C2ea9a", + "contractId": "0.0.7575154", + "key": "" + }, + { + "name": "EquityUSAFacet", + "address": "0x0DB07659662A7B916964B2fF9745D933044250c5", + "contractId": "0.0.7575157", + "key": "0xfe85fe0513f5a5676011f59495ae16b2b93c981c190e99e61903e5603542c810" + }, + { + "name": "ERC1410IssuerFacet", + "address": "0x2d723C8EAE4445B32400Ef45523AaEf4A8e6bc5b", + "contractId": "0.0.7575160", + "key": "0x6e82b75f32c9647cc00b4c3eabbef5a82677f3e91d5d196eb4dd6a0365941344" + }, + { + "name": "ERC1410IssuerFixedRateFacet", + "address": "0x8Ba65a6E5859527E5d7499F001EE7338D3ea8410", + "contractId": "0.0.7575163", + "key": "0xb9c76f134ffdac743e817a2726bdf9f28a48dfea1f9f54b1066e4e0de68f2a06" + }, + { + "name": "ERC1410IssuerKpiLinkedRateFacet", + "address": "0xf49589e4054B147b7B7c44949712C55dbD44b7AF", + "contractId": "0.0.7575167", + "key": "0x97246e7c6950bcc047f6ea198308a7f304bca9f3f13d2ce5d7fdeee9cc9e0828" + }, + { + "name": "ERC1410IssuerSustainabilityPerformanceTargetRateFacet", + "address": "0xD813036edB4bC5485E6FDaaea97aA3Ad3F2EF582", + "contractId": "0.0.7575169", + "key": "0x4d5a3964d29183253487011c31ec3e09977b5eded43c8a3a222a2e53f4282f61" + }, + { + "name": "ERC1410ManagementFacet", + "address": "0xCc3294E140f70d07e002F3dCdA4aEef059C13F4d", + "contractId": "0.0.7575170", + "key": "0x232f8686795d3f197681faf0d8db05655e759f62d709d56b97e5d9cfff29dbf5" + }, + { + "name": "ERC1410ManagementFixedRateFacet", + "address": "0xA8B8f92778B5073cD046E0912f29dbeCA063cCb4", + "contractId": "0.0.7575173", + "key": "0xf616851e84bfcfb3b33a8cc54c54c34e9168ba2b8d233a0b3daacee27f0266ca" + }, + { + "name": "ERC1410ManagementKpiLinkedRateFacet", + "address": "0xcBDA366A27531F6bFe1e96023a6d1882820101D9", + "contractId": "0.0.7575174", + "key": "0x831449a00c9cf218fe471b13f84f7109b57ad4b1202d4ed93009ee3d53276a2f" + }, + { + "name": "ERC1410ManagementSustainabilityPerformanceTargetRateFacet", + "address": "0x23c6d1835476f305d3C08E97516cd79DFb6a1a71", + "contractId": "0.0.7575175", + "key": "0x6768fcc73686ddd306656061b0e415208ded041927d9935de3747583559d0c5e" + }, + { + "name": "ERC1410ReadFacet", + "address": "0xAc65718406C19C871F905F1cFba0B718a604728c", + "contractId": "0.0.7575177", + "key": "0x5eb2734b83ea80c3eb63463a6192b30ab2526cb7a073f0abfda1a404c92ae497" + }, + { + "name": "ERC1410ReadFixedRateFacet", + "address": "0x6b1a7F5C6ce65A6aC07EBC8cd20f65775f07c41D", + "contractId": "0.0.7575178", + "key": "0x289451d28da5d8ff4e7759db6b1c418b7871f0d6ad63bf7f75cd411f3d79686d" + }, + { + "name": "ERC1410ReadKpiLinkedRateFacet", + "address": "0x2369cbCBD7b8074e98B8257a6805116Ac70BA1a0", + "contractId": "0.0.7575179", + "key": "0x696d9b2b17b535f70254309692c77475c258c27dfa6853bbecc611bc350136cd" + }, + { + "name": "ERC1410ReadSustainabilityPerformanceTargetRateFacet", + "address": "0x8C7Ded36E87c6953A601215dF2be4252c16B3e7f", + "contractId": "0.0.7575181", + "key": "0x7c15e98edcc41b3177b8cfff7055cd57b47000fd843fce22e7ead13f07e346b6" + }, + { + "name": "ERC1410TokenHolderFacet", + "address": "0xd0D50B9D778F3BAcE120DbECD15Ac82cBe1D16FB", + "contractId": "0.0.7575184", + "key": "0x0466bf860d23f1ecbc25f364735e0dc3830d236f09182599831730ddd2792caa" + }, + { + "name": "ERC1410TokenHolderFixedRateFacet", + "address": "0xD5dF2a76e9fa8720dA98cEEFbDe806271e164874", + "contractId": "0.0.7575189", + "key": "0xfd248a6ee4af07046520c6ec6f9b61a009db5407ec2f967775040cd67b66f08d" + }, + { + "name": "ERC1410TokenHolderKpiLinkedRateFacet", + "address": "0x175f93A0C8C795aeb3c61f1fBa98517658B185e2", + "contractId": "0.0.7575191", + "key": "0x463e4b758e14b6cdc1dd053ae3df476d527be8131eb3b41c64b4cf8019855237" + }, + { + "name": "ERC1410TokenHolderSustainabilityPerformanceTargetRateFacet", + "address": "0x548cebe3e25DCA1cD9aE3C992C1d4E3bbBd0FB56", + "contractId": "0.0.7575193", + "key": "0x6e21f1ca6d12f08b0d36f08711a48500d02dcf7edd2e8b87e4de350b98df4822" + }, + { + "name": "ERC1594Facet", + "address": "0x68C9ab8C09694b8531616B8648082D756E46ca43", + "contractId": "0.0.7575194", + "key": "0xcb70773e8163595d8bd906e277adeb3935976ad802ee8c29face3dfb0263291f" + }, + { + "name": "ERC1594FixedRateFacet", + "address": "0x2bc1187653e8F3a72feBb856E7Ec2CEc4821a2AA", + "contractId": "0.0.7575195", + "key": "0x7a8f3e6d2c4b1a9e5f7d8c6b4a2e1f9d7c5b3a1e9f7d5c3b1a9e7f5d3c1b9e7f" + }, + { + "name": "ERC1594KpiLinkedRateFacet", + "address": "0x019699C2ca21bE84d4E8be30387d5BC4549e80B9", + "contractId": "0.0.7575198", + "key": "0x1b4e7a9d3f5c2e8a6d4b9f7e5c3a1d8f6e4c2a9d7f5e3c1b8f6d4e2c9a7f5d3e" + }, + { + "name": "ERC1594SustainabilityPerformanceTargetRateFacet", + "address": "0x20A8Cfc4305AA4B549DBB9409552A1b4f040d32D", + "contractId": "0.0.7575200", + "key": "0x2c5f8a3d6e9b1f4c7a2e5d8b1f4c7a2e5d8b1f4c7a2e5d8b1f4c7a2e5d8b1f4c" + }, + { + "name": "ERC1643Facet", + "address": "0x1Fb7af93F828E7449EAa3F1E839Ee94B9a9044dA", + "contractId": "0.0.7575201", + "key": "0x24543637956a3076689f171d3932b10f22d40f3785d53acebb340f37bed01625" + }, + { + "name": "ERC1643FixedRateFacet", + "address": "0x718466c14a973d6d3613040486109f36a8d46f74", + "contractId": "0.0.7575204", + "key": "0x3d6e9f1c5a8b2e7f4d9c6a3e1f8d5c2a9f6e3d1c8f5e2d9c6f3e1d8c5f2d9c6f" + }, + { + "name": "ERC1643KpiLinkedRateFacet", + "address": "0xDAb5A6B6a3e0700F5e125FA38252B0D915e11cd8", + "contractId": "0.0.7575208", + "key": "0x4e7f1a2d5c8e3f6a9d2e5f8c1d4a7e2f5c8d1e4f7c2e5d8f1e4c7d2f5e8d1f4e" + }, + { + "name": "ERC1643SustainabilityPerformanceTargetRateFacet", + "address": "0xCE694E269f523ef756f07A0fDc522aC63CC30DBa", + "contractId": "0.0.7575210", + "key": "0x5f8d2a3e6c9f1d4e7a2f5c8d1e4f7c2e5d8f1e4c7d2f5e8d1f4c7e2d5f8d1f4c" + }, + { + "name": "ERC1644Facet", + "address": "0x4502D9297Ebb3f1565a0a27354b99CE8Eb551f13", + "contractId": "0.0.7575213", + "key": "0xf1da2ed271d62ba0b6597874c96fb6ed7d929e5ec679f4ad8c2c516c72f6736d" + }, + { + "name": "ERC1644FixedRateFacet", + "address": "0x8555f0f0EB14522c47039645cE6068A13fc34DBA", + "contractId": "0.0.7575219", + "key": "0x6f9e3d1c8a5f2e9d6c3f1e8d5c2f9e6d3f1e8c5f2d9e6c3f1d8e5c2f9d6e3f1d" + }, + { + "name": "ERC1644KpiLinkedRateFacet", + "address": "0xC34520966bDAed515A126d0259E48A495E0A1164", + "contractId": "0.0.7575222", + "key": "0x7a1f4e2d5c8f3e6d9c2f5e8d1f4c7e2d5f8c1f4e7d2e5f8c1e4d7c2f5d8e1f4c" + }, + { + "name": "ERC1644SustainabilityPerformanceTargetRateFacet", + "address": "0xC64733CD5dB919315D0C09C94936270a3ba8184e", + "contractId": "0.0.7575224", + "key": "0x8b2f5e3d6f9c2e5d8f1e4c7d2e5f8d1f4c7e2d5f8d1f4c7e2d5f8d1f4c7e2d5f" + }, + { + "name": "ERC20Facet", + "address": "0x0a10c451BBd27f78c6b9202CE68Da402228e2153", + "contractId": "0.0.7575227", + "key": "0x064c883089ba1a596d9146c7aaa73c19ef8825f374c67a9538787c3d12e68dc5" + }, + { + "name": "ERC20FixedRateFacet", + "address": "0x8Dd4b0e19568cadf256f2020047b3aA1E60C66Db", + "contractId": "0.0.7575230", + "key": "0x3e4f428a95dadb9b2d5121c4067c845270879ee5e180e4c4d03ad40f00160376" + }, + { + "name": "ERC20KpiLinkedRateFacet", + "address": "0x6fd74d3FdF70C28432b4046ef3DA339579798e5A", + "contractId": "0.0.7575231", + "key": "0xe4565636726032d04f6d265d3ee61c2f046ea49ecb39f4ca68dd4f65713e9620" + }, + { + "name": "ERC20PermitFacet", + "address": "0xbfF1D11A35Ff5Df9d67cF50146A5EF6C4F7A0096", + "contractId": "0.0.7575232", + "key": "0xef05f0313623d32145212ed45620c8b2c8c294b3d6955cf26f3d1b0569fbc1fa" + }, + { + "name": "ERC20PermitFixedRateFacet", + "address": "0x2da744Ce95BF426ED50Cc5F87B78fC386668ADfD", + "contractId": "0.0.7575233", + "key": "0xc85b8a95de0375d3b552d368932ecaeb9fe85d470eb1e89bc29040cb35d168a3" + }, + { + "name": "ERC20PermitKpiLinkedRateFacet", + "address": "0x390808AF3A9FDA16f5485c4267c8543a6204fb05", + "contractId": "0.0.7575235", + "key": "0x468437a5a7a128b245fb2c3ac08cf17e5f2a6983dece41309b58fffa1fca80a9" + }, + { + "name": "ERC20PermitSustainabilityPerformanceTargetRateFacet", + "address": "0xa1eD8B90671Ebf6eBA9a600967f23aE5899058f7", + "contractId": "0.0.7575236", + "key": "0x3bf8d35ad3c3320d95184dd4f9a0bfc2e56b151318d9d27eefa74461d24f5c61" + }, + { + "name": "ERC20SustainabilityPerformanceTargetRateFacet", + "address": "0x741dc4ed6f01D931C67C0f2587A1D2aE0f220BcB", + "contractId": "0.0.7575237", + "key": "0x002a101a46899eecb6af6a76839f76be301e6292a6a5d3eb7a1bae4a0d3574ee" + }, + { + "name": "ERC20VotesFacet", + "address": "0x371bC3bb686a95f8c9Aa8927da7B087cC6f8a3fc", + "contractId": "0.0.7575238", + "key": "0x5cbfbaa435e19a43530a00ac685c9b5252862a94af2053667ded44642a0d9f4c" + }, + { + "name": "ERC20VotesFixedRateFacet", + "address": "0xa807c8dfBeE6360018090912080D6aab0dF5B7e0", + "contractId": "0.0.7575241", + "key": "0xce2bc140ce5298990432f0332c33ccaa813a89e3bc3c0589eb30eabe005d2742" + }, + { + "name": "ERC20VotesKpiLinkedRateFacet", + "address": "0x3943A0d70E8fA85D168fEfEaf1BD9a81DE3B7735", + "contractId": "0.0.7575245", + "key": "0x9d720cb6c08dff4ea63b2b4f3908fa551321fdc478de6b46a67ba5ecb46f82fc" + }, + { + "name": "ERC20VotesSustainabilityPerformanceTargetRateFacet", + "address": "0x8C3b42B5D306EB31cF037daF0f2a77C53dB708b2", + "contractId": "0.0.7575247", + "key": "0x9d7e0002a7ae9c94734d62ac85bb1cd4c333dd6c5fb308a7a2b60dd77dfa9d44" + }, + { + "name": "ERC3643BatchFacet", + "address": "0xc41EcA2eb405B7635329526EdFEdC1a211F2cBcF", + "contractId": "0.0.7575250", + "key": "0x00332311d9f0c311b31b87399043a90feb10341fcbb4d7f4ed6e3c0072a3c392" + }, + { + "name": "ERC3643BatchFixedRateFacet", + "address": "0x9808570494339085E39820cF1b4b4856EDF71A3E", + "contractId": "0.0.7575251", + "key": "0x3563ac36f573b2e288846d3437686b6a5137a7c9b5cbcd027816db63e07d4138" + }, + { + "name": "ERC3643BatchKpiLinkedRateFacet", + "address": "0xB0E7AdCD6C55Bf03346D4C3ad20dcd04f560b919", + "contractId": "0.0.7575252", + "key": "0xdf3ace3e8d3a434ee6c69da03060d81e1c8c217c16fad43a2819c0bc545253ae" + }, + { + "name": "ERC3643BatchSustainabilityPerformanceTargetRateFacet", + "address": "0x792EB8731BC1Ef08395aa9dE5Ae1C7479821a44f", + "contractId": "0.0.7575253", + "key": "0x500c4c5bff9db733228f1df9b6e818bf8fab883422d3fbe971c036b513e983d9" + }, + { + "name": "ERC3643ManagementFacet", + "address": "0xC5376ea061301ec4DD35de97902b6F0fC0D22F78", + "contractId": "0.0.7575255", + "key": "0xae7b7d0da6ac02e802a8d85aa821dd5cb84e8448836471680f744f64b678a073" + }, + { + "name": "ERC3643ManagementFixedRateFacet", + "address": "0x00DDe0e5Bd55d2a34029208EC050aBbD029dFa1F", + "contractId": "0.0.7575257", + "key": "0xb82ec3e8b1d44871bbfe25257f4e57b7d9778bc578af2f0ce9ef218f6b897797" + }, + { + "name": "ERC3643ManagementKpiLinkedRateFacet", + "address": "0x4F6e72b75b235D04d50c70D07BCE7B502d08d7bF", + "contractId": "0.0.7575261", + "key": "0x649facd691e27202b46bb9e328ca96c6f6dc0aeefdd6cfc15707ee162b7d5103" + }, + { + "name": "ERC3643ManagementSustainabilityPerformanceTargetRateFacet", + "address": "0x4347e94Ebc18ec1629ade4AeC74B16DDF33505A6", + "contractId": "0.0.7575263", + "key": "0x324a20f20a55098c207cd0bc42498561962995b82918d6a9697320c42c5b11fa" + }, + { + "name": "ERC3643OperationsFacet", + "address": "0x3a3111e77EB63790CfB076418a038e3c3F184bAF", + "contractId": "0.0.7575265", + "key": "0xe30b6b8e9e62fb8f017c940c7ffac12709f7ef6ae90beac5570fab25c7384e9c" + }, + { + "name": "ERC3643OperationsFixedRateFacet", + "address": "0xD8dD894d0E9E349e8818EF40C1B50c828557360e", + "contractId": "0.0.7575268", + "key": "0x6524c4b11c24bcfff0472462572cdfbe5c671cad2df1ac54402e8a7b4dc3ee02" + }, + { + "name": "ERC3643OperationsKpiLinkedRateFacet", + "address": "0x4657E320A00E2E1f576C9AB7C345C835Fb36fA36", + "contractId": "0.0.7575269", + "key": "0x87b7a50a7578f2499b459e665b6b7b809ac635280a2157d21fc5de0fc4b54715" + }, + { + "name": "ERC3643OperationsSustainabilityPerformanceTargetRateFacet", + "address": "0xf970c0d8D9ADf1d0BDf20c3DeE4fD2507b3D9B06", + "contractId": "0.0.7575271", + "key": "0xbe85d38775742687362efc4fc0ffed08044614079fc51bbf7b0f29e11d3ffafa" + }, + { + "name": "ERC3643ReadFacet", + "address": "0xfb04e682914787FE6b8866A904C4DF50174C6982", + "contractId": "0.0.7575273", + "key": "0x7743c4e9ff26ef34c3c482d2c12dabe076035eb44bf1c736722f04c33c20ef6a" + }, + { + "name": "ERC3643ReadFixedRateFacet", + "address": "0xdA88aF25D3856a6cBC5a56D1F74e062958482449", + "contractId": "0.0.7575275", + "key": "0x53569c2059b40a4ccb6382b2180607da114ff92bfa263d7489ec7face7c4cc1f" + }, + { + "name": "ERC3643ReadKpiLinkedRateFacet", + "address": "0x6c1A12Df67e452BFA1C345FA264e2C57435796FF", + "contractId": "0.0.7575277", + "key": "0x68ba78621a8627653774f3b9800b77ac34bd334ecc2dc4d933f9e30d6197194f" + }, + { + "name": "ERC3643ReadSustainabilityPerformanceTargetRateFacet", + "address": "0xd2cf302Cd847D6f3B586FC092B3a538B128bC6A3", + "contractId": "0.0.7575281", + "key": "0x2fc56e8abd44d0dc70cf8876ea454caab82a906ec6333516c1feb4de9b4cb4f8" + }, + { + "name": "ExternalControlListManagementFacet", + "address": "0x246ABb725FA19f1618ca81a93Fb921af3c8DF3de", + "contractId": "0.0.7575285", + "key": "0x490196911bc65200514fb4568861a36670854901dffa91bc27577664fdace575" + }, + { + "name": "ExternalControlListManagementFixedRateFacet", + "address": "0x38460b890c1C4BA8aaa2890857998B09B60E4A22", + "contractId": "0.0.7575287", + "key": "0xdb213fa4fc549f5bc27fc79e6094fe6a26e303e8eabc8a86a8de7bb307d570d8" + }, + { + "name": "ExternalControlListManagementKpiLinkedRateFacet", + "address": "0x531cD44dC991CFA71d261d79c2C94C0Bfd372D86", + "contractId": "0.0.7575290", + "key": "0x9ecec5a17142ae1072721e064f5e9a3f0795a2bea57673f40a9440b8adec0052" + }, + { + "name": "ExternalControlListManagementSustainabilityPerformanceTargetRateFacet", + "address": "0xa21106c80a398d630aaA45e4e183f99Ba069bb1e", + "contractId": "0.0.7575291", + "key": "0x2c56accbf6faf923cd323935455dac00c2ddffe08f0becdf49d515e4b4d355af" + }, + { + "name": "ExternalKycListManagementFacet", + "address": "0x817D4C1468567f4ec92C789DA0EeE032D1a55867", + "contractId": "0.0.7575293", + "key": "0x32f05e55195d945105aff8ac4b041d4680824578bd72c6a34e4aa906a59237f1" + }, + { + "name": "ExternalKycListManagementFixedRateFacet", + "address": "0x4a718Bbe7133748e34789DA4D8680A7c92d57C7e", + "contractId": "0.0.7575296", + "key": "0x4f9cf8c8583a46a60ec88a37a07f91d915dba024a57bdb729a4805603f5c40b2" + }, + { + "name": "ExternalKycListManagementKpiLinkedRateFacet", + "address": "0x1f6740e68569d93FD01b12BE6E5442668F113B71", + "contractId": "0.0.7575297", + "key": "0xc15c973cec2d75a95d94522af2dc05c535be214a6cce368887f7e7d3ead3a491" + }, + { + "name": "ExternalKycListManagementSustainabilityPerformanceTargetRateFacet", + "address": "0x40979145E610eb180b98FB0D0BFCECB630A111AF", + "contractId": "0.0.7575300", + "key": "0x0fcfeebcf118ca3c39fbed0e2a527a866cac42bbd3fcad5f9b4f755ef97f3aa9" + }, + { + "name": "ExternalPauseManagementFacet", + "address": "0x1DDBdcF62272BC6292E2EC933f80910b5E46EFe5", + "contractId": "0.0.7575302", + "key": "0x158025f9e40c5d145e7915a14d5e97459728d98c715d8329359e305df737ee3c" + }, + { + "name": "ExternalPauseManagementFixedRateFacet", + "address": "0xb2633fA74df5483946428816c80D2E527329b8f2", + "contractId": "0.0.7575303", + "key": "0x752307e5e93ea6e9b979833cf52e6043f71fd4b983ec32aa685f9b160594e326" + }, + { + "name": "ExternalPauseManagementKpiLinkedRateFacet", + "address": "0x681A43d4efff27ecD3157D2acA2ccCFD5c5Fad65", + "contractId": "0.0.7575304", + "key": "0x549d7aab8deeb4a493aa9765937da4290840d4a6fe04399ef4bb818694d9aee4" + }, + { + "name": "ExternalPauseManagementSustainabilityPerformanceTargetRateFacet", + "address": "0xF22E2BBB1dD4Dd06573AE23F488Ea8F8690EEe0d", + "contractId": "0.0.7575309", + "key": "0x07846b678053cbd4be5d9d3929fa9af5ab76bb508a0f7957f5239302aad45bc3" + }, + { + "name": "FixedRateFacet", + "address": "0xD60222D9345663dBC44AB499BE6A49d86B3264bd", + "contractId": "0.0.7575311", + "key": "0x2871e1c37f7423765d88b16528db7e80ad8e2bae5ab5d55e26659840c1d6b504" + }, + { + "name": "FreezeFacet", + "address": "0xdd7bF0487f418901Ecb7B8f52f92a1B7f90a3A33", + "contractId": "0.0.7575313", + "key": "0x49f765e7155d979a148049c2a0ebed5e028b11799061897a255f99314f0bd3f1" + }, + { + "name": "FreezeFixedRateFacet", + "address": "0xdA2B4F0d11027ea740bB79B8E1c831B0F60F05f9", + "contractId": "0.0.7575317", + "key": "0xad6f49f17db4659e78d7c82e5414ef50b6bfddf3f3e15adc3d0a0e958f696841" + }, + { + "name": "FreezeKpiLinkedRateFacet", + "address": "0xF0E397ad211F48bE42f516583aa054828abFFB7e", + "contractId": "0.0.7575319", + "key": "0xb03614fe7a4412f420f88bc18fc39ab43459dbfdbbdbd0a8e109356b0928272e" + }, + { + "name": "FreezeSustainabilityPerformanceTargetRateFacet", + "address": "0x9244DAFAc2eb2F1E0202bbEA953CB4BD045db826", + "contractId": "0.0.7575320", + "key": "0x25ca5cbe52a82389e142792fdab2ffc58f224f2628f9a92a3f717134cbe229e4" + }, + { + "name": "HoldManagementFacet", + "address": "0x20D2ABd763A811103b28a5059C18BA5D137d4C14", + "contractId": "0.0.7575322", + "key": "0x6c7216c5c52bc8f5019fc2fb333eb5e518e647fd82c807ed7c2a1fe4a03a3860" + }, + { + "name": "HoldManagementFixedRateFacet", + "address": "0x4Cc76fbdFBE2f616633e6F75Ae5D8C103292472b", + "contractId": "0.0.7575325", + "key": "0xed113dc152639988cc04869ce8c061c4a3350fe3826e16fc37960453a8d20b50" + }, + { + "name": "HoldManagementKpiLinkedRateFacet", + "address": "0x97C44E903A0fb2FD70Bd404D2f3eb60A083a69fE", + "contractId": "0.0.7575327", + "key": "0xed86feb6fdd55e6a056bda1a5b7149c2d0d6d7d024625b67aa2c567ba0ef2b9e" + }, + { + "name": "HoldManagementSustainabilityPerformanceTargetRateFacet", + "address": "0x9eBBe167d106d2451c02a554116949246e567f86", + "contractId": "0.0.7575330", + "key": "0x4574524c203fbcc0f5b9f08bcd2b9a9d47c5a9cf3a30eeb540a93a33a8a2f834" + }, + { + "name": "HoldReadFacet", + "address": "0x8650E6696500E1f8a87850eAaC28Cb5247852489", + "contractId": "0.0.7575331", + "key": "0xd8a2714462c01975a075ccd4be2588934afd8074afef746fac089b757b803851" + }, + { + "name": "HoldReadFixedRateFacet", + "address": "0xD22e7470BA81EBA3D68e8545c5852762C1944CE8", + "contractId": "0.0.7575333", + "key": "0xcf1b5b7fa2ca417ea3b952a93a6157f237fce01f4944d27160e5101f05335e52" + }, + { + "name": "HoldReadKpiLinkedRateFacet", + "address": "0x784Cf70eBa565Af112578f9D936C8c7A4eDe9b52", + "contractId": "0.0.7575337", + "key": "0x6b896f9725e5d4f4b5f8cff875e71b5f3284000a933f6ab32c01cdd5f71306d6" + }, + { + "name": "HoldReadSustainabilityPerformanceTargetRateFacet", + "address": "0x2cC22F22D65EB64A6f4e214F0E00FBA0C9B495C4", + "contractId": "0.0.7575341", + "key": "0x8e7113391652a4d3d8feb1d90990cd06ee33dc67a640b4400f8bfb9fae4f91b2" + }, + { + "name": "HoldTokenHolderFacet", + "address": "0x11646AEFCb5Fbf56FE470CD3F8158dA4905B89DE", + "contractId": "0.0.7575342", + "key": "0x87b17a3ce9a86872f21469d26f005543a22ef5729998559f4ad433d5c4253f3e" + }, + { + "name": "HoldTokenHolderFixedRateFacet", + "address": "0x707bfCeb9CBBc6f74f232A7fCaF763ae5ffAeeB9", + "contractId": "0.0.7575344", + "key": "0x0d354aad4576c421c121516a105362711db178c6f0d6e0159d68d9f3ebbda486" + }, + { + "name": "HoldTokenHolderKpiLinkedRateFacet", + "address": "0xE5EFE8a020E98F17D04336605Fd6Bc986f03f9A7", + "contractId": "0.0.7575347", + "key": "0x09f3820ce986997421b684b2482b6d982f31b5ed27a0d72e2aece5ffb3c8fd39" + }, + { + "name": "HoldTokenHolderSustainabilityPerformanceTargetRateFacet", + "address": "0xfa91ECB929a9c6b8761E71DDD3990b350EeE793A", + "contractId": "0.0.7575350", + "key": "0x28ae4d4cdc1846ba348a31e222161d8343223560c1875fe3efcad8c5dd5f81e0" + }, + { + "name": "KpiLinkedRateFacet", + "address": "0xe3bc060Ae14896F5A22CF5F30F061E1b9547F22b", + "contractId": "0.0.7575352", + "key": "0x92999bd0329d03e46274ce7743ebe0060df95286df4fa7b354937b7d21757d22" + }, + { + "name": "KpisSustainabilityPerformanceTargetRateFacet", + "address": "0xB5aAab3FB63acC2Ecf7DA59FDc74015012E6b3Bd", + "contractId": "0.0.7575354", + "key": "" + }, + { + "name": "KycFacet", + "address": "0x1B08f245d45710cc2e87146ba44F3F64783A40c2", + "contractId": "0.0.7575357", + "key": "0xf516a0f6b4726244ae916c590cd26c2b593d7d448e46e43714fb9f9435c46e32" + }, + { + "name": "KycFixedRateFacet", + "address": "0xc5751fF2617EEE2Bb4CB1028a01930E7AE7d26d0", + "contractId": "0.0.7575360", + "key": "0x76145b42d3591928a90298dbd705c8cdb33be9f5eee50f649fb58ed3f36b9f04" + }, + { + "name": "KycKpiLinkedRateFacet", + "address": "0x44c388037420FbC5562397097fdBF4942A9ae179", + "contractId": "0.0.7575361", + "key": "0x9cf03144d37b7b92d5b438e1f037a64ebdc48c2891bc4b475a15a1cf833574d0" + }, + { + "name": "KycSustainabilityPerformanceTargetRateFacet", + "address": "0x06c38dB41f4Aa9d9B7A767ba374CcbbF1A04c56F", + "contractId": "0.0.7575363", + "key": "0x1cb818916342973b46841d2ca9543c702bf6380fb0fc179f356139aa142379c3" + }, + { + "name": "LockFacet", + "address": "0x722d4F66D3a30DfEf3857d93127f638Bd1da1c48", + "contractId": "0.0.7575364", + "key": "0xf1364345b3db5ebe5808f2d2d2aaecb9cdb4fddacad1534033060ebc886fc1e9" + }, + { + "name": "LockFixedRateFacet", + "address": "0xE8ABd0dA933fCA3Ab73fbac983b7C30A0A380c15", + "contractId": "0.0.7575367", + "key": "0x053d181bbb93fc7807aafeac901706f74ec5767053695d2b769bf0fdcf065e4d" + }, + { + "name": "LockKpiLinkedRateFacet", + "address": "0xb14A71dFEe08Bfa432845c43b6E48DbE53331507", + "contractId": "0.0.7575368", + "key": "0x04caf3f62f31b8b1edd96c39948d89098fd83c1a1b5b76aa39927cf7ad8e9d42" + }, + { + "name": "LockSustainabilityPerformanceTargetRateFacet", + "address": "0xB0FB182A476a4E812506517E4cB869fb800b0026", + "contractId": "0.0.7575372", + "key": "0xe73c2eecf92b5b8eb7ecc89b379f70193694f2906188318c3407458267385b82" + }, + { + "name": "PauseFacet", + "address": "0x0102948e0ae796DF52BEe3a849C677a34103c085", + "contractId": "0.0.7575375", + "key": "0x9429fd9ef38f89f41bd9ec33fd5c94b287ed1c27a98938da43835ac761b2f92c" + }, + { + "name": "PauseFixedRateFacet", + "address": "0xCDa16B8AE86D1b05aa5E900a34aefe397305CF7E", + "contractId": "0.0.7575376", + "key": "0x9fd7fc8200742d120881c0cf0a0541bae13e372519d986a5169b23b82ea06f12" + }, + { + "name": "PauseKpiLinkedRateFacet", + "address": "0x01559ad9A70E15211b9E5Ff2fbf7CB4F20Ce7E61", + "contractId": "0.0.7575377", + "key": "0x77ff7dc4f2d4a0cb28f09307895b94478d6655e7a545222f97b753a6c90a8f71" + }, + { + "name": "PauseSustainabilityPerformanceTargetRateFacet", + "address": "0xe22d6Fa5c461076848Fb3b92d78BE16FCba28923", + "contractId": "0.0.7575381", + "key": "0xa16c7f2d6b5ab7f05dd30bd562ac9f3005fe21e3b2bde131733e37c0d42046ee" + }, + { + "name": "ProceedRecipientsFacet", + "address": "0x3b3D1C725a0DE4EAAF585205e884ec75b7b23dea", + "contractId": "0.0.7575383", + "key": "0x87f4b676bf89cd24a01a78fd8e7fb2102c2f6d034be73d16402f7297e0ae625b" + }, + { + "name": "ProceedRecipientsFixedRateFacet", + "address": "0x1f48D7BDe0856CfA6FD29d3D44859B7bA6F6DA84", + "contractId": "0.0.7575386", + "key": "0xd1f2e9d8c7b6a5e4f3d2c1b9a8e7f6d5c4b3a2e1f9d8c7b6a5e4f3d2c1b9a8e7" + }, + { + "name": "ProceedRecipientsKpiLinkedRateFacet", + "address": "0xD52D62f694BAc8E8865f41e98cDebA2A05166F79", + "contractId": "0.0.7575389", + "key": "0xe2f3e1d9c8b7a6e5f4d3c2b1a9e8f7d6c5b4a3e2f1d9c8b7a6e5f4d3c2b1a9e8" + }, + { + "name": "ProceedRecipientsSustainabilityPerformanceTargetRateFacet", + "address": "0x20E695F4A33c5970b93D3aF56cc4dA1d25669B5D", + "contractId": "0.0.7575395", + "key": "0xf3e4f2e1d9c8b7a6e5f4d3c2b1a9e8f7d6c5b4a3e2f1d9c8b7a6e5f4d3c2b1a9" + }, + { + "name": "ProtectedPartitionsFacet", + "address": "0x60C40990b22b134e977D5D9Fe2695444197e9851", + "contractId": "0.0.7575397", + "key": "0x6d65d2938c05a4d952aff0845c1baa5bea04d4544db74f8b3b26004d1d58d58f" + }, + { + "name": "ProtectedPartitionsFixedRateFacet", + "address": "0x8D5FC333165f6F1Cf21f00Eeb27308127dEA5719", + "contractId": "0.0.7575398", + "key": "0x1f8166e21922daee7192ddd5f8a1ce657013d69d412a4e4f5848ab75f1ca8db3" + }, + { + "name": "ProtectedPartitionsKpiLinkedRateFacet", + "address": "0x72c156B6973398BD4b56E0F7132E856565f2C157", + "contractId": "0.0.7575399", + "key": "0x665aad7ee148905a0af716acbc6abd8f408eadce853caf3f84528a9810ffc436" + }, + { + "name": "ProtectedPartitionsSustainabilityPerformanceTargetRateFacet", + "address": "0x09cE38dE91AcC9d06491D36231bde9608cCf7c4C", + "contractId": "0.0.7575400", + "key": "0x088ec2750f42a30fde9383e74f4148ce5df963263d426deffc1d29fff61a6538" + }, + { + "name": "ScheduledBalanceAdjustmentsFacet", + "address": "0x1125353A2e0d4d7269c328096dD396cfb40d8FCA", + "contractId": "0.0.7575402", + "key": "0xc418e67a48260d700e5f85863ad6fa6593206a4385728f8baba1572d631535e0" + }, + { + "name": "ScheduledBalanceAdjustmentsFixedRateFacet", + "address": "0xc7F08f7c1BCC71739058B5d679bFfE70c140A319", + "contractId": "0.0.7575405", + "key": "0xb3336a1ececdcd807fd6e81cc57e9392c75bf3fd303a2f5df0b11c0dda87ce7f" + }, + { + "name": "ScheduledBalanceAdjustmentsKpiLinkedRateFacet", + "address": "0x978f23476F0F4537f18DdcD22a6Ec3201119C17B", + "contractId": "0.0.7575407", + "key": "0x3da33aed4e04baa1b9c39bd96d0bc7be51ecaa1468eff7f632c29fb134644cb4" + }, + { + "name": "ScheduledBalanceAdjustmentsSustainabilityPerformanceTargetRateFacet", + "address": "0x8144f6BEca57723a6Aa75D31457daBFe7d7E7414", + "contractId": "0.0.7575410", + "key": "0x1168df5bb8a348d137af6e29915c261dc82c495f72484a046ac4f750899625f4" + }, + { + "name": "ScheduledCouponListingFacet", + "address": "0x226AC8AA826b08C66444b0C88cEB0c0366ec0434", + "contractId": "0.0.7575412", + "key": "0x6cc7645ae5bcd122875ce8bd150bd28dda6374546c4c2421e5ae4fdeedb3ab30" + }, + { + "name": "ScheduledCouponListingFixedRateFacet", + "address": "0xAb311e790A4459761F83781557315cd5756ab1bA", + "contractId": "0.0.7575416", + "key": "0x9c249eccb68ce7eae5f58a9b4fbe1f3b6a6f2a644b36c3f1b3559077b4f4e266" + }, + { + "name": "ScheduledCouponListingKpiLinkedRateFacet", + "address": "0x90aFdE11e89E2906Ad87cd5816486d3778A057fb", + "contractId": "0.0.7575417", + "key": "0x9f42d2f2ae6efad6d2acf0399ec9e5a1bed9e41c68a86b58f1de78da4fe3c598" + }, + { + "name": "ScheduledCouponListingSustainabilityPerformanceTargetRateFacet", + "address": "0xeb61E8b22E4C8c06FA501BD400950B7bB9768d1C", + "contractId": "0.0.7575418", + "key": "0x85c0dee450a5a4657a9de39ca4ba19881b079d55d5bb64641d52f59bea709ba8" + }, + { + "name": "ScheduledCrossOrderedTasksFacet", + "address": "0xef3954a447e5b8fF1007F38552429A91ffBBAB64", + "contractId": "0.0.7575420", + "key": "0xa4934195ab83f1497ce5fc99b68d0f41694716bcfba5f232aa6c8e0d4d504f08" + }, + { + "name": "ScheduledCrossOrderedTasksFixedRateFacet", + "address": "0x350649BAc55eb6b68EcE1f2D35CE1b3361C2Bc37", + "contractId": "0.0.7575421", + "key": "0x1312a5fa6cd5c7128015b199c47eacbf1636ef5cf437c0ee84c619dfbd372ca0" + }, + { + "name": "ScheduledCrossOrderedTasksKpiLinkedRateFacet", + "address": "0xAB022d79A11D3F636F6B29f3Ee79579c142D37eB", + "contractId": "0.0.7575422", + "key": "0x04d20e52e58dbadedfcf6c373a826fc5f7c665fd6caf67c8a65a9e777a8b70ec" + }, + { + "name": "ScheduledCrossOrderedTasksSustainabilityPerformanceTargetRateFacet", + "address": "0x5d53586b1c6f1d6988d47F900dae6FB548b4777F", + "contractId": "0.0.7575424", + "key": "0x23d3302e505d889e80b20005bf316ccd7cbbd3c547a7305d600e8f0d9bc73267" + }, + { + "name": "ScheduledSnapshotsFacet", + "address": "0xAa648F0D811e58C08188DB954CC5ABe2D5122703", + "contractId": "0.0.7575425", + "key": "0x100f681e33d02a1124c2c05a537a1229eca89767c5e6e8720066ca74bfb85793" + }, + { + "name": "ScheduledSnapshotsFixedRateFacet", + "address": "0x8B5e3e517E47a0161E20061e1DF0Abc2918b6dd8", + "contractId": "0.0.7575426", + "key": "0xe3f0d8c05423e6bf8dc42fb776a1ce265739fc66f9b501077b207a0c2a56cab6" + }, + { + "name": "ScheduledSnapshotsKpiLinkedRateFacet", + "address": "0xE1A9a09805c1Be225246A74e167D98f5F754b45E", + "contractId": "0.0.7575427", + "key": "0xbfb6dd5a6beac6604a320b8363bc0da4093ba327dd037970ad82d422b0d88526" + }, + { + "name": "ScheduledSnapshotsSustainabilityPerformanceTargetRateFacet", + "address": "0xDA2BF2B116C95afCFF92121760fB101d88A876B0", + "contractId": "0.0.7575428", + "key": "0x99a85df534e32a3b9fce8e80f0cc30d6703e578eb5c641ab2d9e95530d046b4b" + }, + { + "name": "SnapshotsFacet", + "address": "0x440102D04Eb1Ae6e966a0A539Eb2D909dab6e7Ab", + "contractId": "0.0.7575431", + "key": "0x9a3fc46d83536ef6b87eb4fec37302bfd1a7c18e81ea2da853b911b44cf5b0cf" + }, + { + "name": "SnapshotsFixedRateFacet", + "address": "0x10c553c274Aa3f8AE12497f7782C4A4BBBF32bC1", + "contractId": "0.0.7575433", + "key": "0xf9b2659fdf4231d426bc34cef93a8b3f42e5cfaf762f65dbf6537ab3e5ee8348" + }, + { + "name": "SnapshotsKpiLinkedRateFacet", + "address": "0x069ce60e38cC0b8439A8fa7d8C0bAc45B829612B", + "contractId": "0.0.7575435", + "key": "0x9c0a9b3a98c7e535e4b1a0749f01f63ea94b600fbee8df56d7c18a1f3043ee20" + }, + { + "name": "SnapshotsSustainabilityPerformanceTargetRateFacet", + "address": "0xCe70B18B3Fd11acac26Afc8F05DA2F0BbDfbdA67", + "contractId": "0.0.7575437", + "key": "0xbcc6255960c1cbe69dae32f7db730d14a35fdb81d91cc7e637e5af4d229bcbbe" + }, + { + "name": "SsiManagementFacet", + "address": "0x47932FB9Ccf6F6A18760D66680fF04597e4e836f", + "contractId": "0.0.7575439", + "key": "0x77c35dccfcdc80370e925aae86871ef8bc71db0b8e082c073cda906e89bb610e" + }, + { + "name": "SsiManagementFixedRateFacet", + "address": "0x534a88865c251e02ef480B8381A1fDa87964BA4A", + "contractId": "0.0.7575441", + "key": "0xd3c3eb4fde853b08d2509769f85fbcc3147edd847e1e8da89c805628293effb2" + }, + { + "name": "SsiManagementKpiLinkedRateFacet", + "address": "0x64A838A44c5F507Db498359F8AEe7569423268A6", + "contractId": "0.0.7575446", + "key": "0xac0a01362676a7a1370879903993e04310cb7a3b60fc327072dcf7a00ce50e5a" + }, + { + "name": "SsiManagementSustainabilityPerformanceTargetRateFacet", + "address": "0x767Fc6D63Eb2471a861555a032BC6e4AD17EA048", + "contractId": "0.0.7575450", + "key": "0x5de367269fd9e98ceb172f263a954ee471605474013e206e00340c5914046c8b" + }, + { + "name": "SustainabilityPerformanceTargetRateFacet", + "address": "0xC1BCfCB3D827C0CA64d767b25CF4a2411BF59AE2", + "contractId": "0.0.7575451", + "key": "0xa261a7434029a925924f47ccea7fbe12af1e56efd74e8f1d8ac23bec19a27e49" + }, + { + "name": "TransferAndLockFacet", + "address": "0x54B217260C8705Cd14C3aE30AE24f57292F1bd40", + "contractId": "0.0.7575454", + "key": "0xd9b300e6bf7a143b8fd8cf1d4ab050e691c862bf0f57a7d49cc08c60efe68d08" + }, + { + "name": "TransferAndLockFixedRateFacet", + "address": "0x7E086e10184d5C724C0E6ae9645d8f52Ad30Bf1D", + "contractId": "0.0.7575456", + "key": "0x8c3d5e9f2a6b1c4d7e8f9a2b3c4d5e6f7a8b9c0d1e2f3a4b5c6d7e8f9a0b1c2d" + }, + { + "name": "TransferAndLockKpiLinkedRateFacet", + "address": "0x224fEE564A7e07aF9e52Af6f7FAD51A45710c647", + "contractId": "0.0.7575459", + "key": "0x3e5f7a9b1c2d4e6f8a9b0c1d2e3f4a5b6c7d8e9f0a1b2c3d4e5f6a7b8c9d0e1f" + }, + { + "name": "TransferAndLockSustainabilityPerformanceTargetRateFacet", + "address": "0xa03C4eF357b8f3BBd22B1259C13040d75Cf410f8", + "contractId": "0.0.7575460", + "key": "0x9d1e3f5a7b9c0d2e4f6a8b0c1d3e5f7a9b0c2d4e6f8a9b1c3d5e7f9a0b2c4d6e" + } + ], + "configurations": { + "equity": { + "configId": "0x0000000000000000000000000000000000000000000000000000000000000001", + "version": 1, + "facetCount": 43, + "facets": [ + { + "facetName": "AccessControlFacet", + "key": "0x011768a41cb4fe76a26f444eec15d81a0d84e919a36336d72c6539cf41c0fcf6", + "address": "0xc08a9c6E26E9da82f4f6f1DD46A21cba80e42dCf" + }, + { + "facetName": "CapFacet", + "key": "0xfb3f8aac36661b5540c571d821c80dc9db7ede5ca2a4204ee562b3356f0c026b", + "address": "0xDb3a007f1E79c7FC18cffF1BA6147dfC1000dB0f" + }, + { + "facetName": "ControlListFacet", + "key": "0xfbb1491bfcecd95f79409bd5a4b69a4ba1e5573573372f5d2d66c11e3016414c", + "address": "0xa5a4EefbE87F229c73e2177E37d67831AD491B7A" + }, + { + "facetName": "CorporateActionsFacet", + "key": "0x3cc74200ccfb5d585a6d170f8824979dbf1b592e0a41eef41cf6d86cf4882077", + "address": "0x24F62675b3D851c597a9E96276BcEaDd665bB0BC" + }, + { + "facetName": "DiamondFacet", + "key": "0x1b5212ea37fb29e99afa2812a5d7d7e662a477424d3de1a18cc3871a2ee94d78", + "address": "0x4dB7cAF82D03D19b9D6A7919D9B6B14C9d0c6a7e" + }, + { + "facetName": "ERC20Facet", + "key": "0x064c883089ba1a596d9146c7aaa73c19ef8825f374c67a9538787c3d12e68dc5", + "address": "0x0a10c451BBd27f78c6b9202CE68Da402228e2153" + }, + { + "facetName": "FreezeFacet", + "key": "0x49f765e7155d979a148049c2a0ebed5e028b11799061897a255f99314f0bd3f1", + "address": "0xdd7bF0487f418901Ecb7B8f52f92a1B7f90a3A33" + }, + { + "facetName": "KycFacet", + "key": "0xf516a0f6b4726244ae916c590cd26c2b593d7d448e46e43714fb9f9435c46e32", + "address": "0x1B08f245d45710cc2e87146ba44F3F64783A40c2" + }, + { + "facetName": "PauseFacet", + "key": "0x9429fd9ef38f89f41bd9ec33fd5c94b287ed1c27a98938da43835ac761b2f92c", + "address": "0x0102948e0ae796DF52BEe3a849C677a34103c085" + }, + { + "facetName": "SnapshotsFacet", + "key": "0x9a3fc46d83536ef6b87eb4fec37302bfd1a7c18e81ea2da853b911b44cf5b0cf", + "address": "0x440102D04Eb1Ae6e966a0A539Eb2D909dab6e7Ab" + }, + { + "facetName": "ERC1410IssuerFacet", + "key": "0x6e82b75f32c9647cc00b4c3eabbef5a82677f3e91d5d196eb4dd6a0365941344", + "address": "0x2d723C8EAE4445B32400Ef45523AaEf4A8e6bc5b" + }, + { + "facetName": "ERC1410ManagementFacet", + "key": "0x232f8686795d3f197681faf0d8db05655e759f62d709d56b97e5d9cfff29dbf5", + "address": "0xCc3294E140f70d07e002F3dCdA4aEef059C13F4d" + }, + { + "facetName": "ERC1410ReadFacet", + "key": "0x5eb2734b83ea80c3eb63463a6192b30ab2526cb7a073f0abfda1a404c92ae497", + "address": "0xAc65718406C19C871F905F1cFba0B718a604728c" + }, + { + "facetName": "ERC1410TokenHolderFacet", + "key": "0x0466bf860d23f1ecbc25f364735e0dc3830d236f09182599831730ddd2792caa", + "address": "0xd0D50B9D778F3BAcE120DbECD15Ac82cBe1D16FB" + }, + { + "facetName": "ERC1594Facet", + "key": "0xcb70773e8163595d8bd906e277adeb3935976ad802ee8c29face3dfb0263291f", + "address": "0x68C9ab8C09694b8531616B8648082D756E46ca43" + }, + { + "facetName": "ERC1643Facet", + "key": "0x24543637956a3076689f171d3932b10f22d40f3785d53acebb340f37bed01625", + "address": "0x1Fb7af93F828E7449EAa3F1E839Ee94B9a9044dA" + }, + { + "facetName": "ERC1644Facet", + "key": "0xf1da2ed271d62ba0b6597874c96fb6ed7d929e5ec679f4ad8c2c516c72f6736d", + "address": "0x4502D9297Ebb3f1565a0a27354b99CE8Eb551f13" + }, + { + "facetName": "ERC20PermitFacet", + "key": "0xef05f0313623d32145212ed45620c8b2c8c294b3d6955cf26f3d1b0569fbc1fa", + "address": "0xbfF1D11A35Ff5Df9d67cF50146A5EF6C4F7A0096" + }, + { + "facetName": "ERC20VotesFacet", + "key": "0x5cbfbaa435e19a43530a00ac685c9b5252862a94af2053667ded44642a0d9f4c", + "address": "0x371bC3bb686a95f8c9Aa8927da7B087cC6f8a3fc" + }, + { + "facetName": "ERC3643BatchFacet", + "key": "0x00332311d9f0c311b31b87399043a90feb10341fcbb4d7f4ed6e3c0072a3c392", + "address": "0xc41EcA2eb405B7635329526EdFEdC1a211F2cBcF" + }, + { + "facetName": "ERC3643ManagementFacet", + "key": "0xae7b7d0da6ac02e802a8d85aa821dd5cb84e8448836471680f744f64b678a073", + "address": "0xC5376ea061301ec4DD35de97902b6F0fC0D22F78" + }, + { + "facetName": "ERC3643OperationsFacet", + "key": "0xe30b6b8e9e62fb8f017c940c7ffac12709f7ef6ae90beac5570fab25c7384e9c", + "address": "0x3a3111e77EB63790CfB076418a038e3c3F184bAF" + }, + { + "facetName": "ERC3643ReadFacet", + "key": "0x7743c4e9ff26ef34c3c482d2c12dabe076035eb44bf1c736722f04c33c20ef6a", + "address": "0xfb04e682914787FE6b8866A904C4DF50174C6982" + }, + { + "facetName": "ClearingActionsFacet", + "key": "0x5472dfc5c92ad7a8651518ea7d3854d3b6494e5bcaa19f91cd61bf93bf6f2a74", + "address": "0x497F6f92bFbeE7eE9f8Fc93d6753E6714C0B2798" + }, + { + "facetName": "ClearingHoldCreationFacet", + "key": "0x44f99a141c434fac20d69e7511932ee344d5b37b61851976c83a5df4ca468152", + "address": "0x9285388579ED1e16814De1b5aFc39eDCf77D7B30" + }, + { + "facetName": "ClearingReadFacet", + "key": "0xebb2e29bdf4edaf4ca66a3f9b7735087f9d0474d56d856e53c94ef00596c0b1e", + "address": "0x73788B70Cbd8649465Bb2E8a6708Cbf5Db2dFf96" + }, + { + "facetName": "ClearingRedeemFacet", + "key": "0xb341e7aa749da43976c189209de51ccdf838af9f964cd27340b914d5b2aeba97", + "address": "0x3aC35b57B60c579FE95bbD38ec918b6c158101C3" + }, + { + "facetName": "ClearingTransferFacet", + "key": "0x7399d03db62430bec60ca2c3eacf98b1b7e2253f17593ef7a226d759442e0928", + "address": "0xDa8137a4921bA7B65A00e70563E5f992cF039678" + }, + { + "facetName": "HoldManagementFacet", + "key": "0x6c7216c5c52bc8f5019fc2fb333eb5e518e647fd82c807ed7c2a1fe4a03a3860", + "address": "0x20D2ABd763A811103b28a5059C18BA5D137d4C14" + }, + { + "facetName": "HoldReadFacet", + "key": "0xd8a2714462c01975a075ccd4be2588934afd8074afef746fac089b757b803851", + "address": "0x8650E6696500E1f8a87850eAaC28Cb5247852489" + }, + { + "facetName": "HoldTokenHolderFacet", + "key": "0x87b17a3ce9a86872f21469d26f005543a22ef5729998559f4ad433d5c4253f3e", + "address": "0x11646AEFCb5Fbf56FE470CD3F8158dA4905B89DE" + }, + { + "facetName": "ExternalControlListManagementFacet", + "key": "0x490196911bc65200514fb4568861a36670854901dffa91bc27577664fdace575", + "address": "0x246ABb725FA19f1618ca81a93Fb921af3c8DF3de" + }, + { + "facetName": "ExternalKycListManagementFacet", + "key": "0x32f05e55195d945105aff8ac4b041d4680824578bd72c6a34e4aa906a59237f1", + "address": "0x817D4C1468567f4ec92C789DA0EeE032D1a55867" + }, + { + "facetName": "ExternalPauseManagementFacet", + "key": "0x158025f9e40c5d145e7915a14d5e97459728d98c715d8329359e305df737ee3c", + "address": "0x1DDBdcF62272BC6292E2EC933f80910b5E46EFe5" + }, + { + "facetName": "AdjustBalancesFacet", + "key": "0x2bbe9fb018f1e7dd12b4442154e7fdfd75aec7b0a65d07debf49de4ece5fe8b8", + "address": "0x829254d3D71340ac6B20efbD396c254A33104C3C" + }, + { + "facetName": "LockFacet", + "key": "0xf1364345b3db5ebe5808f2d2d2aaecb9cdb4fddacad1534033060ebc886fc1e9", + "address": "0x722d4F66D3a30DfEf3857d93127f638Bd1da1c48" + }, + { + "facetName": "ProtectedPartitionsFacet", + "key": "0x6d65d2938c05a4d952aff0845c1baa5bea04d4544db74f8b3b26004d1d58d58f", + "address": "0x60C40990b22b134e977D5D9Fe2695444197e9851" + }, + { + "facetName": "ScheduledBalanceAdjustmentsFacet", + "key": "0xc418e67a48260d700e5f85863ad6fa6593206a4385728f8baba1572d631535e0", + "address": "0x1125353A2e0d4d7269c328096dD396cfb40d8FCA" + }, + { + "facetName": "ScheduledCrossOrderedTasksFacet", + "key": "0xa4934195ab83f1497ce5fc99b68d0f41694716bcfba5f232aa6c8e0d4d504f08", + "address": "0xef3954a447e5b8fF1007F38552429A91ffBBAB64" + }, + { + "facetName": "ScheduledSnapshotsFacet", + "key": "0x100f681e33d02a1124c2c05a537a1229eca89767c5e6e8720066ca74bfb85793", + "address": "0xAa648F0D811e58C08188DB954CC5ABe2D5122703" + }, + { + "facetName": "SsiManagementFacet", + "key": "0x77c35dccfcdc80370e925aae86871ef8bc71db0b8e082c073cda906e89bb610e", + "address": "0x47932FB9Ccf6F6A18760D66680fF04597e4e836f" + }, + { + "facetName": "TransferAndLockFacet", + "key": "0xd9b300e6bf7a143b8fd8cf1d4ab050e691c862bf0f57a7d49cc08c60efe68d08", + "address": "0x54B217260C8705Cd14C3aE30AE24f57292F1bd40" + }, + { + "facetName": "EquityUSAFacet", + "key": "0xfe85fe0513f5a5676011f59495ae16b2b93c981c190e99e61903e5603542c810", + "address": "0x0DB07659662A7B916964B2fF9745D933044250c5" + } + ] + }, + "bond": { + "configId": "0x0000000000000000000000000000000000000000000000000000000000000002", + "version": 1, + "facetCount": 46, + "facets": [ + { + "facetName": "AccessControlFacet", + "key": "0x011768a41cb4fe76a26f444eec15d81a0d84e919a36336d72c6539cf41c0fcf6", + "address": "0xc08a9c6E26E9da82f4f6f1DD46A21cba80e42dCf" + }, + { + "facetName": "CapFacet", + "key": "0xfb3f8aac36661b5540c571d821c80dc9db7ede5ca2a4204ee562b3356f0c026b", + "address": "0xDb3a007f1E79c7FC18cffF1BA6147dfC1000dB0f" + }, + { + "facetName": "ControlListFacet", + "key": "0xfbb1491bfcecd95f79409bd5a4b69a4ba1e5573573372f5d2d66c11e3016414c", + "address": "0xa5a4EefbE87F229c73e2177E37d67831AD491B7A" + }, + { + "facetName": "CorporateActionsFacet", + "key": "0x3cc74200ccfb5d585a6d170f8824979dbf1b592e0a41eef41cf6d86cf4882077", + "address": "0x24F62675b3D851c597a9E96276BcEaDd665bB0BC" + }, + { + "facetName": "DiamondFacet", + "key": "0x1b5212ea37fb29e99afa2812a5d7d7e662a477424d3de1a18cc3871a2ee94d78", + "address": "0x4dB7cAF82D03D19b9D6A7919D9B6B14C9d0c6a7e" + }, + { + "facetName": "ERC20Facet", + "key": "0x064c883089ba1a596d9146c7aaa73c19ef8825f374c67a9538787c3d12e68dc5", + "address": "0x0a10c451BBd27f78c6b9202CE68Da402228e2153" + }, + { + "facetName": "FreezeFacet", + "key": "0x49f765e7155d979a148049c2a0ebed5e028b11799061897a255f99314f0bd3f1", + "address": "0xdd7bF0487f418901Ecb7B8f52f92a1B7f90a3A33" + }, + { + "facetName": "KycFacet", + "key": "0xf516a0f6b4726244ae916c590cd26c2b593d7d448e46e43714fb9f9435c46e32", + "address": "0x1B08f245d45710cc2e87146ba44F3F64783A40c2" + }, + { + "facetName": "PauseFacet", + "key": "0x9429fd9ef38f89f41bd9ec33fd5c94b287ed1c27a98938da43835ac761b2f92c", + "address": "0x0102948e0ae796DF52BEe3a849C677a34103c085" + }, + { + "facetName": "SnapshotsFacet", + "key": "0x9a3fc46d83536ef6b87eb4fec37302bfd1a7c18e81ea2da853b911b44cf5b0cf", + "address": "0x440102D04Eb1Ae6e966a0A539Eb2D909dab6e7Ab" + }, + { + "facetName": "ERC1410IssuerFacet", + "key": "0x6e82b75f32c9647cc00b4c3eabbef5a82677f3e91d5d196eb4dd6a0365941344", + "address": "0x2d723C8EAE4445B32400Ef45523AaEf4A8e6bc5b" + }, + { + "facetName": "ERC1410ManagementFacet", + "key": "0x232f8686795d3f197681faf0d8db05655e759f62d709d56b97e5d9cfff29dbf5", + "address": "0xCc3294E140f70d07e002F3dCdA4aEef059C13F4d" + }, + { + "facetName": "ERC1410ReadFacet", + "key": "0x5eb2734b83ea80c3eb63463a6192b30ab2526cb7a073f0abfda1a404c92ae497", + "address": "0xAc65718406C19C871F905F1cFba0B718a604728c" + }, + { + "facetName": "ERC1410TokenHolderFacet", + "key": "0x0466bf860d23f1ecbc25f364735e0dc3830d236f09182599831730ddd2792caa", + "address": "0xd0D50B9D778F3BAcE120DbECD15Ac82cBe1D16FB" + }, + { + "facetName": "ERC1594Facet", + "key": "0xcb70773e8163595d8bd906e277adeb3935976ad802ee8c29face3dfb0263291f", + "address": "0x68C9ab8C09694b8531616B8648082D756E46ca43" + }, + { + "facetName": "ERC1643Facet", + "key": "0x24543637956a3076689f171d3932b10f22d40f3785d53acebb340f37bed01625", + "address": "0x1Fb7af93F828E7449EAa3F1E839Ee94B9a9044dA" + }, + { + "facetName": "ERC1644Facet", + "key": "0xf1da2ed271d62ba0b6597874c96fb6ed7d929e5ec679f4ad8c2c516c72f6736d", + "address": "0x4502D9297Ebb3f1565a0a27354b99CE8Eb551f13" + }, + { + "facetName": "ERC20PermitFacet", + "key": "0xef05f0313623d32145212ed45620c8b2c8c294b3d6955cf26f3d1b0569fbc1fa", + "address": "0xbfF1D11A35Ff5Df9d67cF50146A5EF6C4F7A0096" + }, + { + "facetName": "ERC20VotesFacet", + "key": "0x5cbfbaa435e19a43530a00ac685c9b5252862a94af2053667ded44642a0d9f4c", + "address": "0x371bC3bb686a95f8c9Aa8927da7B087cC6f8a3fc" + }, + { + "facetName": "ERC3643BatchFacet", + "key": "0x00332311d9f0c311b31b87399043a90feb10341fcbb4d7f4ed6e3c0072a3c392", + "address": "0xc41EcA2eb405B7635329526EdFEdC1a211F2cBcF" + }, + { + "facetName": "ERC3643ManagementFacet", + "key": "0xae7b7d0da6ac02e802a8d85aa821dd5cb84e8448836471680f744f64b678a073", + "address": "0xC5376ea061301ec4DD35de97902b6F0fC0D22F78" + }, + { + "facetName": "ERC3643OperationsFacet", + "key": "0xe30b6b8e9e62fb8f017c940c7ffac12709f7ef6ae90beac5570fab25c7384e9c", + "address": "0x3a3111e77EB63790CfB076418a038e3c3F184bAF" + }, + { + "facetName": "ERC3643ReadFacet", + "key": "0x7743c4e9ff26ef34c3c482d2c12dabe076035eb44bf1c736722f04c33c20ef6a", + "address": "0xfb04e682914787FE6b8866A904C4DF50174C6982" + }, + { + "facetName": "ClearingActionsFacet", + "key": "0x5472dfc5c92ad7a8651518ea7d3854d3b6494e5bcaa19f91cd61bf93bf6f2a74", + "address": "0x497F6f92bFbeE7eE9f8Fc93d6753E6714C0B2798" + }, + { + "facetName": "ClearingHoldCreationFacet", + "key": "0x44f99a141c434fac20d69e7511932ee344d5b37b61851976c83a5df4ca468152", + "address": "0x9285388579ED1e16814De1b5aFc39eDCf77D7B30" + }, + { + "facetName": "ClearingReadFacet", + "key": "0xebb2e29bdf4edaf4ca66a3f9b7735087f9d0474d56d856e53c94ef00596c0b1e", + "address": "0x73788B70Cbd8649465Bb2E8a6708Cbf5Db2dFf96" + }, + { + "facetName": "ClearingRedeemFacet", + "key": "0xb341e7aa749da43976c189209de51ccdf838af9f964cd27340b914d5b2aeba97", + "address": "0x3aC35b57B60c579FE95bbD38ec918b6c158101C3" + }, + { + "facetName": "ClearingTransferFacet", + "key": "0x7399d03db62430bec60ca2c3eacf98b1b7e2253f17593ef7a226d759442e0928", + "address": "0xDa8137a4921bA7B65A00e70563E5f992cF039678" + }, + { + "facetName": "HoldManagementFacet", + "key": "0x6c7216c5c52bc8f5019fc2fb333eb5e518e647fd82c807ed7c2a1fe4a03a3860", + "address": "0x20D2ABd763A811103b28a5059C18BA5D137d4C14" + }, + { + "facetName": "HoldReadFacet", + "key": "0xd8a2714462c01975a075ccd4be2588934afd8074afef746fac089b757b803851", + "address": "0x8650E6696500E1f8a87850eAaC28Cb5247852489" + }, + { + "facetName": "HoldTokenHolderFacet", + "key": "0x87b17a3ce9a86872f21469d26f005543a22ef5729998559f4ad433d5c4253f3e", + "address": "0x11646AEFCb5Fbf56FE470CD3F8158dA4905B89DE" + }, + { + "facetName": "ExternalControlListManagementFacet", + "key": "0x490196911bc65200514fb4568861a36670854901dffa91bc27577664fdace575", + "address": "0x246ABb725FA19f1618ca81a93Fb921af3c8DF3de" + }, + { + "facetName": "ExternalKycListManagementFacet", + "key": "0x32f05e55195d945105aff8ac4b041d4680824578bd72c6a34e4aa906a59237f1", + "address": "0x817D4C1468567f4ec92C789DA0EeE032D1a55867" + }, + { + "facetName": "ExternalPauseManagementFacet", + "key": "0x158025f9e40c5d145e7915a14d5e97459728d98c715d8329359e305df737ee3c", + "address": "0x1DDBdcF62272BC6292E2EC933f80910b5E46EFe5" + }, + { + "facetName": "AdjustBalancesFacet", + "key": "0x2bbe9fb018f1e7dd12b4442154e7fdfd75aec7b0a65d07debf49de4ece5fe8b8", + "address": "0x829254d3D71340ac6B20efbD396c254A33104C3C" + }, + { + "facetName": "LockFacet", + "key": "0xf1364345b3db5ebe5808f2d2d2aaecb9cdb4fddacad1534033060ebc886fc1e9", + "address": "0x722d4F66D3a30DfEf3857d93127f638Bd1da1c48" + }, + { + "facetName": "ProceedRecipientsFacet", + "key": "0x87f4b676bf89cd24a01a78fd8e7fb2102c2f6d034be73d16402f7297e0ae625b", + "address": "0x3b3D1C725a0DE4EAAF585205e884ec75b7b23dea" + }, + { + "facetName": "ProtectedPartitionsFacet", + "key": "0x6d65d2938c05a4d952aff0845c1baa5bea04d4544db74f8b3b26004d1d58d58f", + "address": "0x60C40990b22b134e977D5D9Fe2695444197e9851" + }, + { + "facetName": "ScheduledBalanceAdjustmentsFacet", + "key": "0xc418e67a48260d700e5f85863ad6fa6593206a4385728f8baba1572d631535e0", + "address": "0x1125353A2e0d4d7269c328096dD396cfb40d8FCA" + }, + { + "facetName": "ScheduledCrossOrderedTasksFacet", + "key": "0xa4934195ab83f1497ce5fc99b68d0f41694716bcfba5f232aa6c8e0d4d504f08", + "address": "0xef3954a447e5b8fF1007F38552429A91ffBBAB64" + }, + { + "facetName": "ScheduledCouponListingFacet", + "key": "0x6cc7645ae5bcd122875ce8bd150bd28dda6374546c4c2421e5ae4fdeedb3ab30", + "address": "0x226AC8AA826b08C66444b0C88cEB0c0366ec0434" + }, + { + "facetName": "ScheduledSnapshotsFacet", + "key": "0x100f681e33d02a1124c2c05a537a1229eca89767c5e6e8720066ca74bfb85793", + "address": "0xAa648F0D811e58C08188DB954CC5ABe2D5122703" + }, + { + "facetName": "SsiManagementFacet", + "key": "0x77c35dccfcdc80370e925aae86871ef8bc71db0b8e082c073cda906e89bb610e", + "address": "0x47932FB9Ccf6F6A18760D66680fF04597e4e836f" + }, + { + "facetName": "TransferAndLockFacet", + "key": "0xd9b300e6bf7a143b8fd8cf1d4ab050e691c862bf0f57a7d49cc08c60efe68d08", + "address": "0x54B217260C8705Cd14C3aE30AE24f57292F1bd40" + }, + { + "facetName": "BondUSAFacet", + "key": "0xe6594ee8f54f346ab25268fdc7955031a6b06102355e1446353d89ab1d593de3", + "address": "0x7a43ee7E8BC21D9FF4fe0f1D2213e7AcDd239453" + }, + { + "facetName": "BondUSAReadFacet", + "key": "0x624866e79d4c0a78a8dc32cbce49563cdf86eba627bd05a9821dbaa1674ac231", + "address": "0xA240c494000924bEd8e392073B71B062dBEf84C4" + } + ] + }, + "bondFixedRate": { + "configId": "0x0000000000000000000000000000000000000000000000000000000000000003", + "version": 1, + "facetCount": 47, + "facets": [ + { + "facetName": "AccessControlFixedRateFacet", + "key": "0xb35ad81b5769c62538fe6a90e40db8be624645f77c1738ce582ede5da399ecb2", + "address": "0xa2865c42fE8c0Ca25a8F4B6f6A59eb886B95B1Fc" + }, + { + "facetName": "CapFixedRateFacet", + "key": "0x288b5a4b82f38369168fd49de3e5e68c76fc0394c2e89817b70a65368ba4dcf7", + "address": "0xd5e98b1c64eE9C8263A1CDA2B8515c90C2eEc78C" + }, + { + "facetName": "ControlListFixedRateFacet", + "key": "0x083b7e0957ebd3a0f69bf432ce05d94c1848cbdbf0e66664919c4803b14dfdf8", + "address": "0xfc6E7835818A83D69212eEC9ef6803662Be86BbD" + }, + { + "facetName": "CorporateActionsFixedRateFacet", + "key": "0xd2c0415cebdbb6dcaf014ce92df6bcae060743c622fd7ce954105b71954e0424", + "address": "0xC8036Fd4bc9e2af1315AA7Be881C080101d5d4C2" + }, + { + "facetName": "DiamondFacet", + "key": "0x1b5212ea37fb29e99afa2812a5d7d7e662a477424d3de1a18cc3871a2ee94d78", + "address": "0x4dB7cAF82D03D19b9D6A7919D9B6B14C9d0c6a7e" + }, + { + "facetName": "ERC20FixedRateFacet", + "key": "0x3e4f428a95dadb9b2d5121c4067c845270879ee5e180e4c4d03ad40f00160376", + "address": "0x8Dd4b0e19568cadf256f2020047b3aA1E60C66Db" + }, + { + "facetName": "FreezeFixedRateFacet", + "key": "0xad6f49f17db4659e78d7c82e5414ef50b6bfddf3f3e15adc3d0a0e958f696841", + "address": "0xdA2B4F0d11027ea740bB79B8E1c831B0F60F05f9" + }, + { + "facetName": "KycFixedRateFacet", + "key": "0x76145b42d3591928a90298dbd705c8cdb33be9f5eee50f649fb58ed3f36b9f04", + "address": "0xc5751fF2617EEE2Bb4CB1028a01930E7AE7d26d0" + }, + { + "facetName": "PauseFixedRateFacet", + "key": "0x9fd7fc8200742d120881c0cf0a0541bae13e372519d986a5169b23b82ea06f12", + "address": "0xCDa16B8AE86D1b05aa5E900a34aefe397305CF7E" + }, + { + "facetName": "SnapshotsFixedRateFacet", + "key": "0xf9b2659fdf4231d426bc34cef93a8b3f42e5cfaf762f65dbf6537ab3e5ee8348", + "address": "0x10c553c274Aa3f8AE12497f7782C4A4BBBF32bC1" + }, + { + "facetName": "ERC1410IssuerFixedRateFacet", + "key": "0xb9c76f134ffdac743e817a2726bdf9f28a48dfea1f9f54b1066e4e0de68f2a06", + "address": "0x8Ba65a6E5859527E5d7499F001EE7338D3ea8410" + }, + { + "facetName": "ERC1410ManagementFixedRateFacet", + "key": "0xf616851e84bfcfb3b33a8cc54c54c34e9168ba2b8d233a0b3daacee27f0266ca", + "address": "0xA8B8f92778B5073cD046E0912f29dbeCA063cCb4" + }, + { + "facetName": "ERC1410ReadFixedRateFacet", + "key": "0x289451d28da5d8ff4e7759db6b1c418b7871f0d6ad63bf7f75cd411f3d79686d", + "address": "0x6b1a7F5C6ce65A6aC07EBC8cd20f65775f07c41D" + }, + { + "facetName": "ERC1410TokenHolderFixedRateFacet", + "key": "0xfd248a6ee4af07046520c6ec6f9b61a009db5407ec2f967775040cd67b66f08d", + "address": "0xD5dF2a76e9fa8720dA98cEEFbDe806271e164874" + }, + { + "facetName": "ERC1594FixedRateFacet", + "key": "0x7a8f3e6d2c4b1a9e5f7d8c6b4a2e1f9d7c5b3a1e9f7d5c3b1a9e7f5d3c1b9e7f", + "address": "0x2bc1187653e8F3a72feBb856E7Ec2CEc4821a2AA" + }, + { + "facetName": "ERC1643FixedRateFacet", + "key": "0x3d6e9f1c5a8b2e7f4d9c6a3e1f8d5c2a9f6e3d1c8f5e2d9c6f3e1d8c5f2d9c6f", + "address": "0x718466c14a973d6d3613040486109f36a8d46f74" + }, + { + "facetName": "ERC1644FixedRateFacet", + "key": "0x6f9e3d1c8a5f2e9d6c3f1e8d5c2f9e6d3f1e8c5f2d9e6c3f1d8e5c2f9d6e3f1d", + "address": "0x8555f0f0EB14522c47039645cE6068A13fc34DBA" + }, + { + "facetName": "ERC20PermitFixedRateFacet", + "key": "0xc85b8a95de0375d3b552d368932ecaeb9fe85d470eb1e89bc29040cb35d168a3", + "address": "0x2da744Ce95BF426ED50Cc5F87B78fC386668ADfD" + }, + { + "facetName": "ERC20VotesFixedRateFacet", + "key": "0xce2bc140ce5298990432f0332c33ccaa813a89e3bc3c0589eb30eabe005d2742", + "address": "0xa807c8dfBeE6360018090912080D6aab0dF5B7e0" + }, + { + "facetName": "ERC3643BatchFixedRateFacet", + "key": "0x3563ac36f573b2e288846d3437686b6a5137a7c9b5cbcd027816db63e07d4138", + "address": "0x9808570494339085E39820cF1b4b4856EDF71A3E" + }, + { + "facetName": "ERC3643ManagementFixedRateFacet", + "key": "0xb82ec3e8b1d44871bbfe25257f4e57b7d9778bc578af2f0ce9ef218f6b897797", + "address": "0x00DDe0e5Bd55d2a34029208EC050aBbD029dFa1F" + }, + { + "facetName": "ERC3643OperationsFixedRateFacet", + "key": "0x6524c4b11c24bcfff0472462572cdfbe5c671cad2df1ac54402e8a7b4dc3ee02", + "address": "0xD8dD894d0E9E349e8818EF40C1B50c828557360e" + }, + { + "facetName": "ERC3643ReadFixedRateFacet", + "key": "0x53569c2059b40a4ccb6382b2180607da114ff92bfa263d7489ec7face7c4cc1f", + "address": "0xdA88aF25D3856a6cBC5a56D1F74e062958482449" + }, + { + "facetName": "ClearingActionsFixedRateFacet", + "key": "0x497fbb5ba36b9a6b791669e513c877ebfe079b61e0eb37afbd19b696266a0223", + "address": "0xB0088E19b24EAa1413e0dB9a9f895D49A6908029" + }, + { + "facetName": "ClearingHoldCreationFixedRateFacet", + "key": "0xf4d60b90b7a9edb9598b8c4aa2a4477e3a65750eab2cce564385f35d882a23c3", + "address": "0x0683bcB1F234C28eC7E448511E77F6939849465F" + }, + { + "facetName": "ClearingReadFixedRateFacet", + "key": "0xcd312e798e5b62ec98cc7c8ac3547a640f68ee74e351b73397be02dab3d5b14f", + "address": "0x14E71963bE1258895b44Fefda292A5C1C76a7c0B" + }, + { + "facetName": "ClearingRedeemFixedRateFacet", + "key": "0xa8edf3401d5e3f8e9a45b0992984a31a2522a24ed793e5e7980f8d66508473c9", + "address": "0x780871C37aaB88064eEde9C6749043B4a6aF157d" + }, + { + "facetName": "ClearingTransferFixedRateFacet", + "key": "0x1ba056fe3e7ef86779515a9e7f364e84af0f60eb5f4175ac6d6e6e3f4c05fffb", + "address": "0xa4de3C25E6766B9737AEE17C6E25fD1d3531C165" + }, + { + "facetName": "HoldManagementFixedRateFacet", + "key": "0xed113dc152639988cc04869ce8c061c4a3350fe3826e16fc37960453a8d20b50", + "address": "0x4Cc76fbdFBE2f616633e6F75Ae5D8C103292472b" + }, + { + "facetName": "HoldReadFixedRateFacet", + "key": "0xcf1b5b7fa2ca417ea3b952a93a6157f237fce01f4944d27160e5101f05335e52", + "address": "0xD22e7470BA81EBA3D68e8545c5852762C1944CE8" + }, + { + "facetName": "HoldTokenHolderFixedRateFacet", + "key": "0x0d354aad4576c421c121516a105362711db178c6f0d6e0159d68d9f3ebbda486", + "address": "0x707bfCeb9CBBc6f74f232A7fCaF763ae5ffAeeB9" + }, + { + "facetName": "ExternalControlListManagementFixedRateFacet", + "key": "0xdb213fa4fc549f5bc27fc79e6094fe6a26e303e8eabc8a86a8de7bb307d570d8", + "address": "0x38460b890c1C4BA8aaa2890857998B09B60E4A22" + }, + { + "facetName": "ExternalKycListManagementFixedRateFacet", + "key": "0x4f9cf8c8583a46a60ec88a37a07f91d915dba024a57bdb729a4805603f5c40b2", + "address": "0x4a718Bbe7133748e34789DA4D8680A7c92d57C7e" + }, + { + "facetName": "ExternalPauseManagementFixedRateFacet", + "key": "0x752307e5e93ea6e9b979833cf52e6043f71fd4b983ec32aa685f9b160594e326", + "address": "0xb2633fA74df5483946428816c80D2E527329b8f2" + }, + { + "facetName": "AdjustBalancesFixedRateFacet", + "key": "0xa7e8f6d5c4b3a2e1f9d8c7b6a5e4f3d2c1b9a8e7f6d5c4b3a2e1f9d8c7b6a5e4", + "address": "0x74a53e14d6545c0Ac2aC23649064CC705E754638" + }, + { + "facetName": "LockFixedRateFacet", + "key": "0x053d181bbb93fc7807aafeac901706f74ec5767053695d2b769bf0fdcf065e4d", + "address": "0xE8ABd0dA933fCA3Ab73fbac983b7C30A0A380c15" + }, + { + "facetName": "ProceedRecipientsFixedRateFacet", + "key": "0xd1f2e9d8c7b6a5e4f3d2c1b9a8e7f6d5c4b3a2e1f9d8c7b6a5e4f3d2c1b9a8e7", + "address": "0x1f48D7BDe0856CfA6FD29d3D44859B7bA6F6DA84" + }, + { + "facetName": "ProtectedPartitionsFixedRateFacet", + "key": "0x1f8166e21922daee7192ddd5f8a1ce657013d69d412a4e4f5848ab75f1ca8db3", + "address": "0x8D5FC333165f6F1Cf21f00Eeb27308127dEA5719" + }, + { + "facetName": "ScheduledBalanceAdjustmentsFixedRateFacet", + "key": "0xb3336a1ececdcd807fd6e81cc57e9392c75bf3fd303a2f5df0b11c0dda87ce7f", + "address": "0xc7F08f7c1BCC71739058B5d679bFfE70c140A319" + }, + { + "facetName": "ScheduledCrossOrderedTasksFixedRateFacet", + "key": "0x1312a5fa6cd5c7128015b199c47eacbf1636ef5cf437c0ee84c619dfbd372ca0", + "address": "0x350649BAc55eb6b68EcE1f2D35CE1b3361C2Bc37" + }, + { + "facetName": "ScheduledCouponListingFixedRateFacet", + "key": "0x9c249eccb68ce7eae5f58a9b4fbe1f3b6a6f2a644b36c3f1b3559077b4f4e266", + "address": "0xAb311e790A4459761F83781557315cd5756ab1bA" + }, + { + "facetName": "ScheduledSnapshotsFixedRateFacet", + "key": "0xe3f0d8c05423e6bf8dc42fb776a1ce265739fc66f9b501077b207a0c2a56cab6", + "address": "0x8B5e3e517E47a0161E20061e1DF0Abc2918b6dd8" + }, + { + "facetName": "SsiManagementFixedRateFacet", + "key": "0xd3c3eb4fde853b08d2509769f85fbcc3147edd847e1e8da89c805628293effb2", + "address": "0x534a88865c251e02ef480B8381A1fDa87964BA4A" + }, + { + "facetName": "TransferAndLockFixedRateFacet", + "key": "0x8c3d5e9f2a6b1c4d7e8f9a2b3c4d5e6f7a8b9c0d1e2f3a4b5c6d7e8f9a0b1c2d", + "address": "0x7E086e10184d5C724C0E6ae9645d8f52Ad30Bf1D" + }, + { + "facetName": "FixedRateFacet", + "key": "0x2871e1c37f7423765d88b16528db7e80ad8e2bae5ab5d55e26659840c1d6b504", + "address": "0xD60222D9345663dBC44AB499BE6A49d86B3264bd" + }, + { + "facetName": "BondUSAFixedRateFacet", + "key": "0xd55d8787d23b78e70dada1ade45b8758f5c027e2cddf3556606c07d388ce159a", + "address": "0x93f8728B6cE21F4e86612BB7C125B22BE5C11FB8" + }, + { + "facetName": "BondUSAReadFixedRateFacet", + "key": "0xd5d703d15aa25ad6419288846269dcbba84f489f1c986be2c919f84c042b8c24", + "address": "0xd6b5d9B52501fE1D9f2CB5ea95e3E0F2200eC472" + } + ] + }, + "bondKpiLinkedRate": { + "configId": "0x0000000000000000000000000000000000000000000000000000000000000004", + "version": 1, + "facetCount": 47, + "facets": [ + { + "facetName": "AccessControlKpiLinkedRateFacet", + "key": "0x465c95eea6723a1645e5399789cee702b19d0bcd0ad3f894270aa25488fb4ab9", + "address": "0xC88bfb717d47087177cf7a8FC7d648232368242F" + }, + { + "facetName": "CapKpiLinkedRateFacet", + "key": "0xdc8cc0612bf886bcc1666e31c5de3392bee78451de7213b01fe78d560a804435", + "address": "0x1b204FaC8260a361C058e9e8BE7771db7ceAE055" + }, + { + "facetName": "ControlListKpiLinkedRateFacet", + "key": "0xaaa80b13f9a051b7f9546e92763bedfbe259f511da870cbb1133fe0e79c8eac5", + "address": "0xD062F2cF4A667C7830B26D66e2a9f5b26d76C037" + }, + { + "facetName": "CorporateActionsKpiLinkedRateFacet", + "key": "0xf86b1190fb42cc572ccdeac774fdf968c303079b8c5eceaeb1c9f4f9089bb6be", + "address": "0x08f4aEa7A74eB08C641CBDf4b1bda792f94CFf07" + }, + { + "facetName": "DiamondFacet", + "key": "0x1b5212ea37fb29e99afa2812a5d7d7e662a477424d3de1a18cc3871a2ee94d78", + "address": "0x4dB7cAF82D03D19b9D6A7919D9B6B14C9d0c6a7e" + }, + { + "facetName": "ERC20KpiLinkedRateFacet", + "key": "0xe4565636726032d04f6d265d3ee61c2f046ea49ecb39f4ca68dd4f65713e9620", + "address": "0x6fd74d3FdF70C28432b4046ef3DA339579798e5A" + }, + { + "facetName": "FreezeKpiLinkedRateFacet", + "key": "0xb03614fe7a4412f420f88bc18fc39ab43459dbfdbbdbd0a8e109356b0928272e", + "address": "0xF0E397ad211F48bE42f516583aa054828abFFB7e" + }, + { + "facetName": "KycKpiLinkedRateFacet", + "key": "0x9cf03144d37b7b92d5b438e1f037a64ebdc48c2891bc4b475a15a1cf833574d0", + "address": "0x44c388037420FbC5562397097fdBF4942A9ae179" + }, + { + "facetName": "PauseKpiLinkedRateFacet", + "key": "0x77ff7dc4f2d4a0cb28f09307895b94478d6655e7a545222f97b753a6c90a8f71", + "address": "0x01559ad9A70E15211b9E5Ff2fbf7CB4F20Ce7E61" + }, + { + "facetName": "SnapshotsKpiLinkedRateFacet", + "key": "0x9c0a9b3a98c7e535e4b1a0749f01f63ea94b600fbee8df56d7c18a1f3043ee20", + "address": "0x069ce60e38cC0b8439A8fa7d8C0bAc45B829612B" + }, + { + "facetName": "ERC1410IssuerKpiLinkedRateFacet", + "key": "0x97246e7c6950bcc047f6ea198308a7f304bca9f3f13d2ce5d7fdeee9cc9e0828", + "address": "0xf49589e4054B147b7B7c44949712C55dbD44b7AF" + }, + { + "facetName": "ERC1410ManagementKpiLinkedRateFacet", + "key": "0x831449a00c9cf218fe471b13f84f7109b57ad4b1202d4ed93009ee3d53276a2f", + "address": "0xcBDA366A27531F6bFe1e96023a6d1882820101D9" + }, + { + "facetName": "ERC1410ReadKpiLinkedRateFacet", + "key": "0x696d9b2b17b535f70254309692c77475c258c27dfa6853bbecc611bc350136cd", + "address": "0x2369cbCBD7b8074e98B8257a6805116Ac70BA1a0" + }, + { + "facetName": "ERC1410TokenHolderKpiLinkedRateFacet", + "key": "0x463e4b758e14b6cdc1dd053ae3df476d527be8131eb3b41c64b4cf8019855237", + "address": "0x175f93A0C8C795aeb3c61f1fBa98517658B185e2" + }, + { + "facetName": "ERC1594KpiLinkedRateFacet", + "key": "0x1b4e7a9d3f5c2e8a6d4b9f7e5c3a1d8f6e4c2a9d7f5e3c1b8f6d4e2c9a7f5d3e", + "address": "0x019699C2ca21bE84d4E8be30387d5BC4549e80B9" + }, + { + "facetName": "ERC1643KpiLinkedRateFacet", + "key": "0x4e7f1a2d5c8e3f6a9d2e5f8c1d4a7e2f5c8d1e4f7c2e5d8f1e4c7d2f5e8d1f4e", + "address": "0xDAb5A6B6a3e0700F5e125FA38252B0D915e11cd8" + }, + { + "facetName": "ERC1644KpiLinkedRateFacet", + "key": "0x7a1f4e2d5c8f3e6d9c2f5e8d1f4c7e2d5f8c1f4e7d2e5f8c1e4d7c2f5d8e1f4c", + "address": "0xC34520966bDAed515A126d0259E48A495E0A1164" + }, + { + "facetName": "ERC20PermitKpiLinkedRateFacet", + "key": "0x468437a5a7a128b245fb2c3ac08cf17e5f2a6983dece41309b58fffa1fca80a9", + "address": "0x390808AF3A9FDA16f5485c4267c8543a6204fb05" + }, + { + "facetName": "ERC20VotesKpiLinkedRateFacet", + "key": "0x9d720cb6c08dff4ea63b2b4f3908fa551321fdc478de6b46a67ba5ecb46f82fc", + "address": "0x3943A0d70E8fA85D168fEfEaf1BD9a81DE3B7735" + }, + { + "facetName": "ERC3643BatchKpiLinkedRateFacet", + "key": "0xdf3ace3e8d3a434ee6c69da03060d81e1c8c217c16fad43a2819c0bc545253ae", + "address": "0xB0E7AdCD6C55Bf03346D4C3ad20dcd04f560b919" + }, + { + "facetName": "ERC3643ManagementKpiLinkedRateFacet", + "key": "0x649facd691e27202b46bb9e328ca96c6f6dc0aeefdd6cfc15707ee162b7d5103", + "address": "0x4F6e72b75b235D04d50c70D07BCE7B502d08d7bF" + }, + { + "facetName": "ERC3643OperationsKpiLinkedRateFacet", + "key": "0x87b7a50a7578f2499b459e665b6b7b809ac635280a2157d21fc5de0fc4b54715", + "address": "0x4657E320A00E2E1f576C9AB7C345C835Fb36fA36" + }, + { + "facetName": "ERC3643ReadKpiLinkedRateFacet", + "key": "0x68ba78621a8627653774f3b9800b77ac34bd334ecc2dc4d933f9e30d6197194f", + "address": "0x6c1A12Df67e452BFA1C345FA264e2C57435796FF" + }, + { + "facetName": "ClearingActionsKpiLinkedRateFacet", + "key": "0x4960adcd566163ba9edaee816f8739f1c788cace28ad805c136644de52929faa", + "address": "0x5Da97dC2FeB25b0115DE590FaAb00501e3FB8440" + }, + { + "facetName": "ClearingHoldCreationKpiLinkedRateFacet", + "key": "0x1ba40338a89cd18f2799a3e6a86f0be118236340eeff5a19a19a08d3d6e3d08c", + "address": "0x981F1380e18D05f58759E270711D3D92b67cC33A" + }, + { + "facetName": "ClearingReadKpiLinkedRateFacet", + "key": "0x3740ea12ff1c9c37f216ba72884079bcaabe99f51cdd9b019be5b218ba5db0e2", + "address": "0xdc1FFA7AdB9253019B9eDA60619A42FFC975094d" + }, + { + "facetName": "ClearingRedeemKpiLinkedRateFacet", + "key": "0xc38aaff0161104c594b7a323af3facf5beb1e304b730fcbee09f5eed74b11375", + "address": "0x237b992021705267993DC1B26F6aEF5953Fd5Cf5" + }, + { + "facetName": "ClearingTransferKpiLinkedRateFacet", + "key": "0x1b229a6d3b8a8ecba97d1e7c2c4a89c4cf71b9b5852317278f57384d728f8bde", + "address": "0xaF382713513e9908365468Bed9b22BF0ACA6931F" + }, + { + "facetName": "HoldManagementKpiLinkedRateFacet", + "key": "0xed86feb6fdd55e6a056bda1a5b7149c2d0d6d7d024625b67aa2c567ba0ef2b9e", + "address": "0x97C44E903A0fb2FD70Bd404D2f3eb60A083a69fE" + }, + { + "facetName": "HoldReadKpiLinkedRateFacet", + "key": "0x6b896f9725e5d4f4b5f8cff875e71b5f3284000a933f6ab32c01cdd5f71306d6", + "address": "0x784Cf70eBa565Af112578f9D936C8c7A4eDe9b52" + }, + { + "facetName": "HoldTokenHolderKpiLinkedRateFacet", + "key": "0x09f3820ce986997421b684b2482b6d982f31b5ed27a0d72e2aece5ffb3c8fd39", + "address": "0xE5EFE8a020E98F17D04336605Fd6Bc986f03f9A7" + }, + { + "facetName": "ExternalControlListManagementKpiLinkedRateFacet", + "key": "0x9ecec5a17142ae1072721e064f5e9a3f0795a2bea57673f40a9440b8adec0052", + "address": "0x531cD44dC991CFA71d261d79c2C94C0Bfd372D86" + }, + { + "facetName": "ExternalKycListManagementKpiLinkedRateFacet", + "key": "0xc15c973cec2d75a95d94522af2dc05c535be214a6cce368887f7e7d3ead3a491", + "address": "0x1f6740e68569d93FD01b12BE6E5442668F113B71" + }, + { + "facetName": "ExternalPauseManagementKpiLinkedRateFacet", + "key": "0x549d7aab8deeb4a493aa9765937da4290840d4a6fe04399ef4bb818694d9aee4", + "address": "0x681A43d4efff27ecD3157D2acA2ccCFD5c5Fad65" + }, + { + "facetName": "AdjustBalancesKpiLinkedRateFacet", + "key": "0xb8f9e7d6c5b4a3e2f1d9c8b7a6e5f4d3c2b1a9e8f7d6c5b4a3e2f1d9c8b7a6e5", + "address": "0x694eEAe0D132E85EAb7276023421B51E32B775ca" + }, + { + "facetName": "LockKpiLinkedRateFacet", + "key": "0x04caf3f62f31b8b1edd96c39948d89098fd83c1a1b5b76aa39927cf7ad8e9d42", + "address": "0xb14A71dFEe08Bfa432845c43b6E48DbE53331507" + }, + { + "facetName": "ProceedRecipientsKpiLinkedRateFacet", + "key": "0xe2f3e1d9c8b7a6e5f4d3c2b1a9e8f7d6c5b4a3e2f1d9c8b7a6e5f4d3c2b1a9e8", + "address": "0xD52D62f694BAc8E8865f41e98cDebA2A05166F79" + }, + { + "facetName": "ProtectedPartitionsKpiLinkedRateFacet", + "key": "0x665aad7ee148905a0af716acbc6abd8f408eadce853caf3f84528a9810ffc436", + "address": "0x72c156B6973398BD4b56E0F7132E856565f2C157" + }, + { + "facetName": "ScheduledBalanceAdjustmentsKpiLinkedRateFacet", + "key": "0x3da33aed4e04baa1b9c39bd96d0bc7be51ecaa1468eff7f632c29fb134644cb4", + "address": "0x978f23476F0F4537f18DdcD22a6Ec3201119C17B" + }, + { + "facetName": "ScheduledCrossOrderedTasksKpiLinkedRateFacet", + "key": "0x04d20e52e58dbadedfcf6c373a826fc5f7c665fd6caf67c8a65a9e777a8b70ec", + "address": "0xAB022d79A11D3F636F6B29f3Ee79579c142D37eB" + }, + { + "facetName": "ScheduledCouponListingKpiLinkedRateFacet", + "key": "0x9f42d2f2ae6efad6d2acf0399ec9e5a1bed9e41c68a86b58f1de78da4fe3c598", + "address": "0x90aFdE11e89E2906Ad87cd5816486d3778A057fb" + }, + { + "facetName": "ScheduledSnapshotsKpiLinkedRateFacet", + "key": "0xbfb6dd5a6beac6604a320b8363bc0da4093ba327dd037970ad82d422b0d88526", + "address": "0xE1A9a09805c1Be225246A74e167D98f5F754b45E" + }, + { + "facetName": "SsiManagementKpiLinkedRateFacet", + "key": "0xac0a01362676a7a1370879903993e04310cb7a3b60fc327072dcf7a00ce50e5a", + "address": "0x64A838A44c5F507Db498359F8AEe7569423268A6" + }, + { + "facetName": "TransferAndLockKpiLinkedRateFacet", + "key": "0x3e5f7a9b1c2d4e6f8a9b0c1d2e3f4a5b6c7d8e9f0a1b2c3d4e5f6a7b8c9d0e1f", + "address": "0x224fEE564A7e07aF9e52Af6f7FAD51A45710c647" + }, + { + "facetName": "KpiLinkedRateFacet", + "key": "0x92999bd0329d03e46274ce7743ebe0060df95286df4fa7b354937b7d21757d22", + "address": "0xe3bc060Ae14896F5A22CF5F30F061E1b9547F22b" + }, + { + "facetName": "BondUSAKpiLinkedRateFacet", + "key": "0x99c145ff21354eb7b25cb096873143fa3d3aba98457b96bcd13f1d1f2b9bf28c", + "address": "0x11617c7B442A8180AA9ad9Ae0a5329523d93b2b7" + }, + { + "facetName": "BondUSAReadKpiLinkedRateFacet", + "key": "0xcced91a2a03bf45bd62730a7f4703ee2d762f8ebccff315c7145258265f73249", + "address": "0x8017BaCe9f044f9dfB0fc111C5D908A7F2385159" + } + ] + }, + "bondSustainabilityPerformanceTargetRate": { + "configId": "0x0000000000000000000000000000000000000000000000000000000000000005", + "version": 1, + "facetCount": 47, + "facets": [ + { + "facetName": "AccessControlSustainabilityPerformanceTargetRateFacet", + "key": "0x9d13e61abd630355ccae4279993868d7cf3b04d4368a0fedcefe6fec3fabaa0c", + "address": "0xb60eb2E13244cF21a57ED79Da4Ce8Ab7d7529F4d" + }, + { + "facetName": "CapSustainabilityPerformanceTargetRateFacet", + "key": "0xa321c5301bbccd760c5aaf08286a67948cb7d49be22c17f12aa163b324a276d0", + "address": "0xFA176385A7876CacE67c44B495F0149E8Fd85f21" + }, + { + "facetName": "ControlListSustainabilityPerformanceTargetRateFacet", + "key": "0xe3fbab5a4ccf7a873a9601bf5494c43f6e4b53218ff8310ec97811471397b3cf", + "address": "0x551E4Db8d0ED2e31a9F3C902E25239889230830c" + }, + { + "facetName": "CorporateActionsSustainabilityPerformanceTargetRateFacet", + "key": "0xa4a23267cb0a22c52bd05b12e644136bc38b7ac51218a0cb3aed166697caa79e", + "address": "0xD2c45125f800678BeaCD8B004bf6c241C986725E" + }, + { + "facetName": "DiamondFacet", + "key": "0x1b5212ea37fb29e99afa2812a5d7d7e662a477424d3de1a18cc3871a2ee94d78", + "address": "0x4dB7cAF82D03D19b9D6A7919D9B6B14C9d0c6a7e" + }, + { + "facetName": "ERC20SustainabilityPerformanceTargetRateFacet", + "key": "0x002a101a46899eecb6af6a76839f76be301e6292a6a5d3eb7a1bae4a0d3574ee", + "address": "0x741dc4ed6f01D931C67C0f2587A1D2aE0f220BcB" + }, + { + "facetName": "FreezeSustainabilityPerformanceTargetRateFacet", + "key": "0x25ca5cbe52a82389e142792fdab2ffc58f224f2628f9a92a3f717134cbe229e4", + "address": "0x9244DAFAc2eb2F1E0202bbEA953CB4BD045db826" + }, + { + "facetName": "KycSustainabilityPerformanceTargetRateFacet", + "key": "0x1cb818916342973b46841d2ca9543c702bf6380fb0fc179f356139aa142379c3", + "address": "0x06c38dB41f4Aa9d9B7A767ba374CcbbF1A04c56F" + }, + { + "facetName": "PauseSustainabilityPerformanceTargetRateFacet", + "key": "0xa16c7f2d6b5ab7f05dd30bd562ac9f3005fe21e3b2bde131733e37c0d42046ee", + "address": "0xe22d6Fa5c461076848Fb3b92d78BE16FCba28923" + }, + { + "facetName": "SnapshotsSustainabilityPerformanceTargetRateFacet", + "key": "0xbcc6255960c1cbe69dae32f7db730d14a35fdb81d91cc7e637e5af4d229bcbbe", + "address": "0xCe70B18B3Fd11acac26Afc8F05DA2F0BbDfbdA67" + }, + { + "facetName": "ERC1410IssuerSustainabilityPerformanceTargetRateFacet", + "key": "0x4d5a3964d29183253487011c31ec3e09977b5eded43c8a3a222a2e53f4282f61", + "address": "0xD813036edB4bC5485E6FDaaea97aA3Ad3F2EF582" + }, + { + "facetName": "ERC1410ManagementSustainabilityPerformanceTargetRateFacet", + "key": "0x6768fcc73686ddd306656061b0e415208ded041927d9935de3747583559d0c5e", + "address": "0x23c6d1835476f305d3C08E97516cd79DFb6a1a71" + }, + { + "facetName": "ERC1410ReadSustainabilityPerformanceTargetRateFacet", + "key": "0x7c15e98edcc41b3177b8cfff7055cd57b47000fd843fce22e7ead13f07e346b6", + "address": "0x8C7Ded36E87c6953A601215dF2be4252c16B3e7f" + }, + { + "facetName": "ERC1410TokenHolderSustainabilityPerformanceTargetRateFacet", + "key": "0x6e21f1ca6d12f08b0d36f08711a48500d02dcf7edd2e8b87e4de350b98df4822", + "address": "0x548cebe3e25DCA1cD9aE3C992C1d4E3bbBd0FB56" + }, + { + "facetName": "ERC1594SustainabilityPerformanceTargetRateFacet", + "key": "0x2c5f8a3d6e9b1f4c7a2e5d8b1f4c7a2e5d8b1f4c7a2e5d8b1f4c7a2e5d8b1f4c", + "address": "0x20A8Cfc4305AA4B549DBB9409552A1b4f040d32D" + }, + { + "facetName": "ERC1643SustainabilityPerformanceTargetRateFacet", + "key": "0x5f8d2a3e6c9f1d4e7a2f5c8d1e4f7c2e5d8f1e4c7d2f5e8d1f4c7e2d5f8d1f4c", + "address": "0xCE694E269f523ef756f07A0fDc522aC63CC30DBa" + }, + { + "facetName": "ERC1644SustainabilityPerformanceTargetRateFacet", + "key": "0x8b2f5e3d6f9c2e5d8f1e4c7d2e5f8d1f4c7e2d5f8d1f4c7e2d5f8d1f4c7e2d5f", + "address": "0xC64733CD5dB919315D0C09C94936270a3ba8184e" + }, + { + "facetName": "ERC20PermitSustainabilityPerformanceTargetRateFacet", + "key": "0x3bf8d35ad3c3320d95184dd4f9a0bfc2e56b151318d9d27eefa74461d24f5c61", + "address": "0xa1eD8B90671Ebf6eBA9a600967f23aE5899058f7" + }, + { + "facetName": "ERC20VotesSustainabilityPerformanceTargetRateFacet", + "key": "0x9d7e0002a7ae9c94734d62ac85bb1cd4c333dd6c5fb308a7a2b60dd77dfa9d44", + "address": "0x8C3b42B5D306EB31cF037daF0f2a77C53dB708b2" + }, + { + "facetName": "ERC3643BatchSustainabilityPerformanceTargetRateFacet", + "key": "0x500c4c5bff9db733228f1df9b6e818bf8fab883422d3fbe971c036b513e983d9", + "address": "0x792EB8731BC1Ef08395aa9dE5Ae1C7479821a44f" + }, + { + "facetName": "ERC3643ManagementSustainabilityPerformanceTargetRateFacet", + "key": "0x324a20f20a55098c207cd0bc42498561962995b82918d6a9697320c42c5b11fa", + "address": "0x4347e94Ebc18ec1629ade4AeC74B16DDF33505A6" + }, + { + "facetName": "ERC3643OperationsSustainabilityPerformanceTargetRateFacet", + "key": "0xbe85d38775742687362efc4fc0ffed08044614079fc51bbf7b0f29e11d3ffafa", + "address": "0xf970c0d8D9ADf1d0BDf20c3DeE4fD2507b3D9B06" + }, + { + "facetName": "ERC3643ReadSustainabilityPerformanceTargetRateFacet", + "key": "0x2fc56e8abd44d0dc70cf8876ea454caab82a906ec6333516c1feb4de9b4cb4f8", + "address": "0xd2cf302Cd847D6f3B586FC092B3a538B128bC6A3" + }, + { + "facetName": "ClearingActionsSustainabilityPerformanceTargetRateFacet", + "key": "0xae9d6d2e1d9a660994e89e185ab5a3439d2def9baa6ba47fdf854ce0a29a5033", + "address": "0x1Fb8Cad8635a430a241a03A93b53fd28047148CA" + }, + { + "facetName": "ClearingHoldCreationSustainabilityPerformanceTargetRateFacet", + "key": "0x0e59e36a2b1298d11c3612c3203c6d45cb185879383f5a22617c4f49495c070d", + "address": "0x77558a788b36952Ae5927b5091B6Dd3C3a789955" + }, + { + "facetName": "ClearingReadSustainabilityPerformanceTargetRateFacet", + "key": "0xa188d3ee426a514ccfe03470d196ed29da48de0ae59898d9b5a30ec680515a11", + "address": "0xc122954DB098023Ff28f7633Ce132A57167Cc242" + }, + { + "facetName": "ClearingRedeemSustainabilityPerformanceTargetRateFacet", + "key": "0xc4731d62375990b9721357983c8f6acf3fdc78d7814919c187607f653b768d5d", + "address": "0xB3211d7d80086C203bDd0e915237Be4f692B8023" + }, + { + "facetName": "ClearingTransferSustainabilityPerformanceTargetRateFacet", + "key": "0x7e29efe8ee5285a43acddbe766fd9219266a74cb24ed3331b4e350d8e263d0c7", + "address": "0x1A198BB82fcef280fB7e8E82047a6f74fEF7f368" + }, + { + "facetName": "HoldManagementSustainabilityPerformanceTargetRateFacet", + "key": "0x4574524c203fbcc0f5b9f08bcd2b9a9d47c5a9cf3a30eeb540a93a33a8a2f834", + "address": "0x9eBBe167d106d2451c02a554116949246e567f86" + }, + { + "facetName": "HoldReadSustainabilityPerformanceTargetRateFacet", + "key": "0x8e7113391652a4d3d8feb1d90990cd06ee33dc67a640b4400f8bfb9fae4f91b2", + "address": "0x2cC22F22D65EB64A6f4e214F0E00FBA0C9B495C4" + }, + { + "facetName": "HoldTokenHolderSustainabilityPerformanceTargetRateFacet", + "key": "0x28ae4d4cdc1846ba348a31e222161d8343223560c1875fe3efcad8c5dd5f81e0", + "address": "0xfa91ECB929a9c6b8761E71DDD3990b350EeE793A" + }, + { + "facetName": "ExternalControlListManagementSustainabilityPerformanceTargetRateFacet", + "key": "0x2c56accbf6faf923cd323935455dac00c2ddffe08f0becdf49d515e4b4d355af", + "address": "0xa21106c80a398d630aaA45e4e183f99Ba069bb1e" + }, + { + "facetName": "ExternalKycListManagementSustainabilityPerformanceTargetRateFacet", + "key": "0x0fcfeebcf118ca3c39fbed0e2a527a866cac42bbd3fcad5f9b4f755ef97f3aa9", + "address": "0x40979145E610eb180b98FB0D0BFCECB630A111AF" + }, + { + "facetName": "ExternalPauseManagementSustainabilityPerformanceTargetRateFacet", + "key": "0x07846b678053cbd4be5d9d3929fa9af5ab76bb508a0f7957f5239302aad45bc3", + "address": "0xF22E2BBB1dD4Dd06573AE23F488Ea8F8690EEe0d" + }, + { + "facetName": "AdjustBalancesSustainabilityPerformanceTargetRateFacet", + "key": "0xc9e1f8d7c6b5a4e3f2d1c9b8a7e6f5d4c3b2a1e9f8d7c6b5a4e3f2d1c9b8a7e6", + "address": "0x86aA1E6EBcf63010fA14Ff9ff3dcE0b04a794d84" + }, + { + "facetName": "LockSustainabilityPerformanceTargetRateFacet", + "key": "0xe73c2eecf92b5b8eb7ecc89b379f70193694f2906188318c3407458267385b82", + "address": "0xB0FB182A476a4E812506517E4cB869fb800b0026" + }, + { + "facetName": "ProceedRecipientsSustainabilityPerformanceTargetRateFacet", + "key": "0xf3e4f2e1d9c8b7a6e5f4d3c2b1a9e8f7d6c5b4a3e2f1d9c8b7a6e5f4d3c2b1a9", + "address": "0x20E695F4A33c5970b93D3aF56cc4dA1d25669B5D" + }, + { + "facetName": "ProtectedPartitionsSustainabilityPerformanceTargetRateFacet", + "key": "0x088ec2750f42a30fde9383e74f4148ce5df963263d426deffc1d29fff61a6538", + "address": "0x09cE38dE91AcC9d06491D36231bde9608cCf7c4C" + }, + { + "facetName": "ScheduledBalanceAdjustmentsSustainabilityPerformanceTargetRateFacet", + "key": "0x1168df5bb8a348d137af6e29915c261dc82c495f72484a046ac4f750899625f4", + "address": "0x8144f6BEca57723a6Aa75D31457daBFe7d7E7414" + }, + { + "facetName": "ScheduledCrossOrderedTasksSustainabilityPerformanceTargetRateFacet", + "key": "0x23d3302e505d889e80b20005bf316ccd7cbbd3c547a7305d600e8f0d9bc73267", + "address": "0x5d53586b1c6f1d6988d47F900dae6FB548b4777F" + }, + { + "facetName": "ScheduledCouponListingSustainabilityPerformanceTargetRateFacet", + "key": "0x85c0dee450a5a4657a9de39ca4ba19881b079d55d5bb64641d52f59bea709ba8", + "address": "0xeb61E8b22E4C8c06FA501BD400950B7bB9768d1C" + }, + { + "facetName": "ScheduledSnapshotsSustainabilityPerformanceTargetRateFacet", + "key": "0x99a85df534e32a3b9fce8e80f0cc30d6703e578eb5c641ab2d9e95530d046b4b", + "address": "0xDA2BF2B116C95afCFF92121760fB101d88A876B0" + }, + { + "facetName": "SsiManagementSustainabilityPerformanceTargetRateFacet", + "key": "0x5de367269fd9e98ceb172f263a954ee471605474013e206e00340c5914046c8b", + "address": "0x767Fc6D63Eb2471a861555a032BC6e4AD17EA048" + }, + { + "facetName": "TransferAndLockSustainabilityPerformanceTargetRateFacet", + "key": "0x9d1e3f5a7b9c0d2e4f6a8b0c1d3e5f7a9b0c2d4e6f8a9b1c3d5e7f9a0b2c4d6e", + "address": "0xa03C4eF357b8f3BBd22B1259C13040d75Cf410f8" + }, + { + "facetName": "SustainabilityPerformanceTargetRateFacet", + "key": "0xa261a7434029a925924f47ccea7fbe12af1e56efd74e8f1d8ac23bec19a27e49", + "address": "0xC1BCfCB3D827C0CA64d767b25CF4a2411BF59AE2" + }, + { + "facetName": "BondUSASustainabilityPerformanceTargetRateFacet", + "key": "0x8048a878c656dcf3886e69ad27a9272a4fb9499299ab5f0e1b6c99ac3b1130f8", + "address": "0xCCCBe75C1c062Be5d867ec1398C6d45D6dCD2213" + }, + { + "facetName": "BondUSAReadSustainabilityPerformanceTargetRateFacet", + "key": "0x339d458f2928ef5148317aab39e4375a27e6c531d2e5b9de2d4fb23ad0e8b504", + "address": "0x56Bb9F9E60663B7E2e0b575e31d075A6ccd88bDF" + } + ] + } + }, + "summary": { + "totalContracts": 3, + "totalFacets": 188, + "totalConfigurations": 5, + "deploymentTime": 2404921, + "gasUsed": "431213638", + "success": true + }, + "helpers": {} +} diff --git a/packages/ats/contracts/deployments/hedera-testnet/newBlr-2026-01-08T13-03-55.json b/packages/ats/contracts/deployments/hedera-testnet/newBlr-2026-01-08T13-03-55.json new file mode 100644 index 000000000..2fb4ad0ea --- /dev/null +++ b/packages/ats/contracts/deployments/hedera-testnet/newBlr-2026-01-08T13-03-55.json @@ -0,0 +1,2349 @@ +{ + "network": "hedera-testnet", + "timestamp": "2026-01-08T13:03:53.878Z", + "deployer": "0x97C50bb12E1C6284cF2855cdba95c5D60AEE44CF", + "infrastructure": { + "proxyAdmin": { + "address": "0x9cA93b20C15c4854B2114a61562D1FA916a7B8a8", + "contractId": "0.0.7583568" + }, + "blr": { + "implementation": "0x843B35FfC49bce4f9499930A0A5EaaE22C5A9CAF", + "implementationContractId": "0.0.7583569", + "proxy": "0xAeaE9e625Fb1d5b81ae486911Ca1a81389B161a0", + "proxyContractId": "0.0.7583570" + }, + "factory": { + "implementation": "0x6D821017A87f2d99548E1FC26419Cde238C4A831", + "implementationContractId": "0.0.7583964", + "proxy": "0x97271c521c98cE0BE55e289860724703200A82fB", + "proxyContractId": "0.0.7583965" + } + }, + "facets": [ + { + "name": "AccessControlFacet", + "address": "0xA99B7C048B916C17e25d957F306541b16f96cF1C", + "contractId": "0.0.7583572", + "key": "0x011768a41cb4fe76a26f444eec15d81a0d84e919a36336d72c6539cf41c0fcf6" + }, + { + "name": "AccessControlFixedRateFacet", + "address": "0x29dEfd75874493b8D73096dFc9aF5d6F9a3153a9", + "contractId": "0.0.7583573", + "key": "0xb35ad81b5769c62538fe6a90e40db8be624645f77c1738ce582ede5da399ecb2" + }, + { + "name": "AccessControlKpiLinkedRateFacet", + "address": "0x07699963A3Ff5342379D580ad2c3C68f30534809", + "contractId": "0.0.7583574", + "key": "0x465c95eea6723a1645e5399789cee702b19d0bcd0ad3f894270aa25488fb4ab9" + }, + { + "name": "AccessControlSustainabilityPerformanceTargetRateFacet", + "address": "0x243C6be611db641F366e0E3e20b2b96996A5dA06", + "contractId": "0.0.7583575", + "key": "0x9d13e61abd630355ccae4279993868d7cf3b04d4368a0fedcefe6fec3fabaa0c" + }, + { + "name": "AdjustBalancesFacet", + "address": "0x616104a7f6dB2A10579705a56e82D1b4EE78a679", + "contractId": "0.0.7583576", + "key": "0x2bbe9fb018f1e7dd12b4442154e7fdfd75aec7b0a65d07debf49de4ece5fe8b8" + }, + { + "name": "AdjustBalancesFixedRateFacet", + "address": "0x8F9d2D9414090A725fC9a9278C71e948B70Aa9FE", + "contractId": "0.0.7583577", + "key": "0xa7e8f6d5c4b3a2e1f9d8c7b6a5e4f3d2c1b9a8e7f6d5c4b3a2e1f9d8c7b6a5e4" + }, + { + "name": "AdjustBalancesKpiLinkedRateFacet", + "address": "0x68c51dC9BA530D1E06539Ca53a714649086FFA9a", + "contractId": "0.0.7583579", + "key": "0xb8f9e7d6c5b4a3e2f1d9c8b7a6e5f4d3c2b1a9e8f7d6c5b4a3e2f1d9c8b7a6e5" + }, + { + "name": "AdjustBalancesSustainabilityPerformanceTargetRateFacet", + "address": "0x569e998f399FaE8D2387162628BFcD5174b38402", + "contractId": "0.0.7583580", + "key": "0xc9e1f8d7c6b5a4e3f2d1c9b8a7e6f5d4c3b2a1e9f8d7c6b5a4e3f2d1c9b8a7e6" + }, + { + "name": "BondUSAFacet", + "address": "0x98230eAA8E75dfBf5b625c17568D6Dd21e31f07B", + "contractId": "0.0.7583581", + "key": "0xe6594ee8f54f346ab25268fdc7955031a6b06102355e1446353d89ab1d593de3" + }, + { + "name": "BondUSAFixedRateFacet", + "address": "0x4EbDa06Ce0a8f60BA1A69393F6fEF504CF213575", + "contractId": "0.0.7583585", + "key": "0xd55d8787d23b78e70dada1ade45b8758f5c027e2cddf3556606c07d388ce159a" + }, + { + "name": "BondUSAKpiLinkedRateFacet", + "address": "0xF50bfFC90f88d7B59C1503249770C07Bd2c3f49C", + "contractId": "0.0.7583589", + "key": "0x99c145ff21354eb7b25cb096873143fa3d3aba98457b96bcd13f1d1f2b9bf28c" + }, + { + "name": "BondUSAReadFacet", + "address": "0x9DfE8fcceCD16f7e51dECd3e6A0351F46cd6Cfa3", + "contractId": "0.0.7583592", + "key": "0x624866e79d4c0a78a8dc32cbce49563cdf86eba627bd05a9821dbaa1674ac231" + }, + { + "name": "BondUSAReadFixedRateFacet", + "address": "0xc723F9752DCeBd61245c5525F7f250B1FCa79682", + "contractId": "0.0.7583594", + "key": "0xd5d703d15aa25ad6419288846269dcbba84f489f1c986be2c919f84c042b8c24" + }, + { + "name": "BondUSAReadKpiLinkedRateFacet", + "address": "0x08D68235B9DA7dA11D85fe8df8c0396EAc8314e7", + "contractId": "0.0.7583598", + "key": "0xcced91a2a03bf45bd62730a7f4703ee2d762f8ebccff315c7145258265f73249" + }, + { + "name": "BondUSAReadSustainabilityPerformanceTargetRateFacet", + "address": "0xc0347a9b2eddbe35d153E0C56b4c68342D0D7349", + "contractId": "0.0.7583600", + "key": "0x339d458f2928ef5148317aab39e4375a27e6c531d2e5b9de2d4fb23ad0e8b504" + }, + { + "name": "BondUSASustainabilityPerformanceTargetRateFacet", + "address": "0xe90c1D467CFf5f712e5FDE6A27D374eA5e2B3068", + "contractId": "0.0.7583604", + "key": "0x8048a878c656dcf3886e69ad27a9272a4fb9499299ab5f0e1b6c99ac3b1130f8" + }, + { + "name": "CapFacet", + "address": "0x13C6A24091a15684b990342f400314f5dA646dC3", + "contractId": "0.0.7583608", + "key": "0xfb3f8aac36661b5540c571d821c80dc9db7ede5ca2a4204ee562b3356f0c026b" + }, + { + "name": "CapFixedRateFacet", + "address": "0x60475665B66b3188F8a60087a40f114ef308B352", + "contractId": "0.0.7583609", + "key": "0x288b5a4b82f38369168fd49de3e5e68c76fc0394c2e89817b70a65368ba4dcf7" + }, + { + "name": "CapKpiLinkedRateFacet", + "address": "0x81Bf337f975723ed1bfc936a926Eb70767bd956c", + "contractId": "0.0.7583610", + "key": "0xdc8cc0612bf886bcc1666e31c5de3392bee78451de7213b01fe78d560a804435" + }, + { + "name": "CapSustainabilityPerformanceTargetRateFacet", + "address": "0x43D25E88CAF9Ed428D2997B174373B4Ed5d5dF92", + "contractId": "0.0.7583612", + "key": "0xa321c5301bbccd760c5aaf08286a67948cb7d49be22c17f12aa163b324a276d0" + }, + { + "name": "ClearingActionsFacet", + "address": "0x5d3066B50154Cc8A42D876A4809fAaD04bd8D17a", + "contractId": "0.0.7583614", + "key": "0x5472dfc5c92ad7a8651518ea7d3854d3b6494e5bcaa19f91cd61bf93bf6f2a74" + }, + { + "name": "ClearingActionsFixedRateFacet", + "address": "0x3B4A6AF905DD232B05ca53A97D852ca250FC22A0", + "contractId": "0.0.7583616", + "key": "0x497fbb5ba36b9a6b791669e513c877ebfe079b61e0eb37afbd19b696266a0223" + }, + { + "name": "ClearingActionsKpiLinkedRateFacet", + "address": "0xd6BeFd99d0A67EC2f13d8D82b3c5d629e2773c1F", + "contractId": "0.0.7583617", + "key": "0x4960adcd566163ba9edaee816f8739f1c788cace28ad805c136644de52929faa" + }, + { + "name": "ClearingActionsSustainabilityPerformanceTargetRateFacet", + "address": "0x1197A77029404FfA4A2Cf13CF7244c54e74322E7", + "contractId": "0.0.7583618", + "key": "0xae9d6d2e1d9a660994e89e185ab5a3439d2def9baa6ba47fdf854ce0a29a5033" + }, + { + "name": "ClearingHoldCreationFacet", + "address": "0xf5A1716191F56336A73eb13EA0EeDA391De01fFc", + "contractId": "0.0.7583620", + "key": "0x44f99a141c434fac20d69e7511932ee344d5b37b61851976c83a5df4ca468152" + }, + { + "name": "ClearingHoldCreationFixedRateFacet", + "address": "0xE6044E5b4E855483F603a865c362556E311476d0", + "contractId": "0.0.7583622", + "key": "0xf4d60b90b7a9edb9598b8c4aa2a4477e3a65750eab2cce564385f35d882a23c3" + }, + { + "name": "ClearingHoldCreationKpiLinkedRateFacet", + "address": "0xeAE7ffde876F56A9af461EE181BF6a148cD848a3", + "contractId": "0.0.7583624", + "key": "0x1ba40338a89cd18f2799a3e6a86f0be118236340eeff5a19a19a08d3d6e3d08c" + }, + { + "name": "ClearingHoldCreationSustainabilityPerformanceTargetRateFacet", + "address": "0x99726551D5E724e16fe4C4CD60eeacbc8d74475c", + "contractId": "0.0.7583625", + "key": "0x0e59e36a2b1298d11c3612c3203c6d45cb185879383f5a22617c4f49495c070d" + }, + { + "name": "ClearingReadFacet", + "address": "0x21eDCb85a4587cBf501f91fd861e68B479A5a08c", + "contractId": "0.0.7583626", + "key": "0xebb2e29bdf4edaf4ca66a3f9b7735087f9d0474d56d856e53c94ef00596c0b1e" + }, + { + "name": "ClearingReadFixedRateFacet", + "address": "0x54066ee65B9DEA28dC2c7CF6EC05d4AE7B8Ad39e", + "contractId": "0.0.7583628", + "key": "0xcd312e798e5b62ec98cc7c8ac3547a640f68ee74e351b73397be02dab3d5b14f" + }, + { + "name": "ClearingReadKpiLinkedRateFacet", + "address": "0x204A30CECF0486E1d482645FEa2DcFB2d0B367E0", + "contractId": "0.0.7583629", + "key": "0x3740ea12ff1c9c37f216ba72884079bcaabe99f51cdd9b019be5b218ba5db0e2" + }, + { + "name": "ClearingReadSustainabilityPerformanceTargetRateFacet", + "address": "0x54F1Bc7e6A183D959f0e3017FC84075E083cdbcf", + "contractId": "0.0.7583631", + "key": "0xa188d3ee426a514ccfe03470d196ed29da48de0ae59898d9b5a30ec680515a11" + }, + { + "name": "ClearingRedeemFacet", + "address": "0x6aB25BF318D3975660e75B2A4db2e79692D0a07e", + "contractId": "0.0.7583633", + "key": "0xb341e7aa749da43976c189209de51ccdf838af9f964cd27340b914d5b2aeba97" + }, + { + "name": "ClearingRedeemFixedRateFacet", + "address": "0xe289b14F18146c338298B4C1E53232Ed33EFdC39", + "contractId": "0.0.7583634", + "key": "0xa8edf3401d5e3f8e9a45b0992984a31a2522a24ed793e5e7980f8d66508473c9" + }, + { + "name": "ClearingRedeemKpiLinkedRateFacet", + "address": "0x98AEF6995eE5E4F605dBb2bCD215794D999aFd2a", + "contractId": "0.0.7583635", + "key": "0xc38aaff0161104c594b7a323af3facf5beb1e304b730fcbee09f5eed74b11375" + }, + { + "name": "ClearingRedeemSustainabilityPerformanceTargetRateFacet", + "address": "0x34beAb4385d33B7bEfDC4458FBDc4b49F8cC1C18", + "contractId": "0.0.7583636", + "key": "0xc4731d62375990b9721357983c8f6acf3fdc78d7814919c187607f653b768d5d" + }, + { + "name": "ClearingTransferFacet", + "address": "0x855ed519A7f10A02b9C8075fc094084cE34BAeAf", + "contractId": "0.0.7583638", + "key": "0x7399d03db62430bec60ca2c3eacf98b1b7e2253f17593ef7a226d759442e0928" + }, + { + "name": "ClearingTransferFixedRateFacet", + "address": "0x9438f67D6AC1ECa4aFeC600CB3ba899B1A5E96D4", + "contractId": "0.0.7583639", + "key": "0x1ba056fe3e7ef86779515a9e7f364e84af0f60eb5f4175ac6d6e6e3f4c05fffb" + }, + { + "name": "ClearingTransferKpiLinkedRateFacet", + "address": "0x2fb995FE4c0cda38d8b2160B575A3af5Dc0F166c", + "contractId": "0.0.7583640", + "key": "0x1b229a6d3b8a8ecba97d1e7c2c4a89c4cf71b9b5852317278f57384d728f8bde" + }, + { + "name": "ClearingTransferSustainabilityPerformanceTargetRateFacet", + "address": "0x877AA069B02235F49C23348e926C01d3A6b3b545", + "contractId": "0.0.7583641", + "key": "0x7e29efe8ee5285a43acddbe766fd9219266a74cb24ed3331b4e350d8e263d0c7" + }, + { + "name": "ControlListFacet", + "address": "0x8E612cBB6aaBf4EaA5a1Bc25f7BBD3614Bc7eF57", + "contractId": "0.0.7583642", + "key": "0xfbb1491bfcecd95f79409bd5a4b69a4ba1e5573573372f5d2d66c11e3016414c" + }, + { + "name": "ControlListFixedRateFacet", + "address": "0xeBB9913990Dca821A7a3BF657A1f1434b9CBf846", + "contractId": "0.0.7583643", + "key": "0x083b7e0957ebd3a0f69bf432ce05d94c1848cbdbf0e66664919c4803b14dfdf8" + }, + { + "name": "ControlListKpiLinkedRateFacet", + "address": "0x70aEB92868C4ca29DA3f71F587b24cFB8dbf6054", + "contractId": "0.0.7583646", + "key": "0xaaa80b13f9a051b7f9546e92763bedfbe259f511da870cbb1133fe0e79c8eac5" + }, + { + "name": "ControlListSustainabilityPerformanceTargetRateFacet", + "address": "0x3eEd0c78627E8EFeF1618953938F4Ab784e7517F", + "contractId": "0.0.7583647", + "key": "0xe3fbab5a4ccf7a873a9601bf5494c43f6e4b53218ff8310ec97811471397b3cf" + }, + { + "name": "CorporateActionsFacet", + "address": "0x4A60066A0d24052e9A7831CEAaA3ab0f9027C2dA", + "contractId": "0.0.7583648", + "key": "0x3cc74200ccfb5d585a6d170f8824979dbf1b592e0a41eef41cf6d86cf4882077" + }, + { + "name": "CorporateActionsFixedRateFacet", + "address": "0x5A920cA633c5db2773a3e47123D3fCb4e176d6a4", + "contractId": "0.0.7583649", + "key": "0xd2c0415cebdbb6dcaf014ce92df6bcae060743c622fd7ce954105b71954e0424" + }, + { + "name": "CorporateActionsKpiLinkedRateFacet", + "address": "0x1b8b3Db89A5f87cAF34E08a3fDa3Fc6ECf972dfE", + "contractId": "0.0.7583651", + "key": "0xf86b1190fb42cc572ccdeac774fdf968c303079b8c5eceaeb1c9f4f9089bb6be" + }, + { + "name": "CorporateActionsSustainabilityPerformanceTargetRateFacet", + "address": "0xDd5cEC5fdeEbf648d5Da154CF2Eab14f94C16Fb3", + "contractId": "0.0.7583654", + "key": "0xa4a23267cb0a22c52bd05b12e644136bc38b7ac51218a0cb3aed166697caa79e" + }, + { + "name": "DiamondCutFacet", + "address": "0xc2Fb205ffED3863a5da504d7ec3be35C8BC72873", + "contractId": "0.0.7583656", + "key": "" + }, + { + "name": "DiamondFacet", + "address": "0xBD106b930A5747F33ae4f361883984BEe2d90236", + "contractId": "0.0.7583662", + "key": "0x1b5212ea37fb29e99afa2812a5d7d7e662a477424d3de1a18cc3871a2ee94d78" + }, + { + "name": "DiamondLoupeFacet", + "address": "0x86D9d17f560DeF7b375B64b69C1cd24aA2380816", + "contractId": "0.0.7583669", + "key": "" + }, + { + "name": "EquityUSAFacet", + "address": "0x4699C791d37f5049748c1918fC3826a2445Af7a1", + "contractId": "0.0.7583670", + "key": "0xfe85fe0513f5a5676011f59495ae16b2b93c981c190e99e61903e5603542c810" + }, + { + "name": "ERC1410IssuerFacet", + "address": "0x9dcE05825c42c870c6D8D938E913bfae39F4a475", + "contractId": "0.0.7583671", + "key": "0x6e82b75f32c9647cc00b4c3eabbef5a82677f3e91d5d196eb4dd6a0365941344" + }, + { + "name": "ERC1410IssuerFixedRateFacet", + "address": "0xD777bE0a3D9481875811ADd92266897999a41c6C", + "contractId": "0.0.7583673", + "key": "0xb9c76f134ffdac743e817a2726bdf9f28a48dfea1f9f54b1066e4e0de68f2a06" + }, + { + "name": "ERC1410IssuerKpiLinkedRateFacet", + "address": "0x6FF2e1f9c82b18CED5c911145334fDa218435009", + "contractId": "0.0.7583676", + "key": "0x97246e7c6950bcc047f6ea198308a7f304bca9f3f13d2ce5d7fdeee9cc9e0828" + }, + { + "name": "ERC1410IssuerSustainabilityPerformanceTargetRateFacet", + "address": "0x2588B727124904d39A91E50666156C7dA7f12A7B", + "contractId": "0.0.7583678", + "key": "0x4d5a3964d29183253487011c31ec3e09977b5eded43c8a3a222a2e53f4282f61" + }, + { + "name": "ERC1410ManagementFacet", + "address": "0xD2022e8Cb8E0aB5970162d8696394008a76f33c8", + "contractId": "0.0.7583679", + "key": "0x232f8686795d3f197681faf0d8db05655e759f62d709d56b97e5d9cfff29dbf5" + }, + { + "name": "ERC1410ManagementFixedRateFacet", + "address": "0xD572EDE6F558ecC856B87b2577d2ddbeD5436B25", + "contractId": "0.0.7583682", + "key": "0xf616851e84bfcfb3b33a8cc54c54c34e9168ba2b8d233a0b3daacee27f0266ca" + }, + { + "name": "ERC1410ManagementKpiLinkedRateFacet", + "address": "0x608FF329edEaAD9bCB7A9283Dfb16D57f93f0AbE", + "contractId": "0.0.7583683", + "key": "0x831449a00c9cf218fe471b13f84f7109b57ad4b1202d4ed93009ee3d53276a2f" + }, + { + "name": "ERC1410ManagementSustainabilityPerformanceTargetRateFacet", + "address": "0xB5ac33A3E6dE58292849BD26D84126f5D321a649", + "contractId": "0.0.7583687", + "key": "0x6768fcc73686ddd306656061b0e415208ded041927d9935de3747583559d0c5e" + }, + { + "name": "ERC1410ReadFacet", + "address": "0xFA20c0f24035D329Ac6A31bd34Cc39D40164D56b", + "contractId": "0.0.7583688", + "key": "0x5eb2734b83ea80c3eb63463a6192b30ab2526cb7a073f0abfda1a404c92ae497" + }, + { + "name": "ERC1410ReadFixedRateFacet", + "address": "0x844DFA92F7992968Fa70eBc704774E0D1cC22108", + "contractId": "0.0.7583689", + "key": "0x289451d28da5d8ff4e7759db6b1c418b7871f0d6ad63bf7f75cd411f3d79686d" + }, + { + "name": "ERC1410ReadKpiLinkedRateFacet", + "address": "0xBe2d46845a94588664f20cCB083B5533Ce3d497a", + "contractId": "0.0.7583690", + "key": "0x696d9b2b17b535f70254309692c77475c258c27dfa6853bbecc611bc350136cd" + }, + { + "name": "ERC1410ReadSustainabilityPerformanceTargetRateFacet", + "address": "0xa79e903298b7a898d16a57f3314D408f94a70ca5", + "contractId": "0.0.7583691", + "key": "0x7c15e98edcc41b3177b8cfff7055cd57b47000fd843fce22e7ead13f07e346b6" + }, + { + "name": "ERC1410TokenHolderFacet", + "address": "0x9E43D8b040D9b38F75e98D71653D655FFe2e36e2", + "contractId": "0.0.7583695", + "key": "0x0466bf860d23f1ecbc25f364735e0dc3830d236f09182599831730ddd2792caa" + }, + { + "name": "ERC1410TokenHolderFixedRateFacet", + "address": "0x9c7dbe0cD88FdAB78feA9779b86ea25f9E4C3AbE", + "contractId": "0.0.7583696", + "key": "0xfd248a6ee4af07046520c6ec6f9b61a009db5407ec2f967775040cd67b66f08d" + }, + { + "name": "ERC1410TokenHolderKpiLinkedRateFacet", + "address": "0xA1dfDD2371d696F9761C8A14046285c6aC2d3aA5", + "contractId": "0.0.7583699", + "key": "0x463e4b758e14b6cdc1dd053ae3df476d527be8131eb3b41c64b4cf8019855237" + }, + { + "name": "ERC1410TokenHolderSustainabilityPerformanceTargetRateFacet", + "address": "0x7ee78FDeA99F9F64062E06beD09A9EF6D97905D9", + "contractId": "0.0.7583700", + "key": "0x6e21f1ca6d12f08b0d36f08711a48500d02dcf7edd2e8b87e4de350b98df4822" + }, + { + "name": "ERC1594Facet", + "address": "0x996DaAC14777c70Bd85C1b1fc1C039565f4b9B59", + "contractId": "0.0.7583703", + "key": "0xcb70773e8163595d8bd906e277adeb3935976ad802ee8c29face3dfb0263291f" + }, + { + "name": "ERC1594FixedRateFacet", + "address": "0xFb4F1E79A83697233eC618f347763d091660a27c", + "contractId": "0.0.7583704", + "key": "0x7a8f3e6d2c4b1a9e5f7d8c6b4a2e1f9d7c5b3a1e9f7d5c3b1a9e7f5d3c1b9e7f" + }, + { + "name": "ERC1594KpiLinkedRateFacet", + "address": "0x1Ffdc9b5a18D3AbE1E8CFB4A7d88b91bce6F3f0f", + "contractId": "0.0.7583705", + "key": "0x1b4e7a9d3f5c2e8a6d4b9f7e5c3a1d8f6e4c2a9d7f5e3c1b8f6d4e2c9a7f5d3e" + }, + { + "name": "ERC1594SustainabilityPerformanceTargetRateFacet", + "address": "0xAF5B28274a38996423D8aCD5A14232f5e2805bF7", + "contractId": "0.0.7583706", + "key": "0x2c5f8a3d6e9b1f4c7a2e5d8b1f4c7a2e5d8b1f4c7a2e5d8b1f4c7a2e5d8b1f4c" + }, + { + "name": "ERC1643Facet", + "address": "0x5Ca66a434BB3dc23CB69c7ADe226816cA354e9a7", + "contractId": "0.0.7583708", + "key": "0x24543637956a3076689f171d3932b10f22d40f3785d53acebb340f37bed01625" + }, + { + "name": "ERC1643FixedRateFacet", + "address": "0xa807533D9Fff5E3004ca28d04e7B4Ca4983AF446", + "contractId": "0.0.7583709", + "key": "0x3d6e9f1c5a8b2e7f4d9c6a3e1f8d5c2a9f6e3d1c8f5e2d9c6f3e1d8c5f2d9c6f" + }, + { + "name": "ERC1643KpiLinkedRateFacet", + "address": "0xB451d3E9Bdc121d46c1EA276C0B790799b6b533b", + "contractId": "0.0.7583710", + "key": "0x4e7f1a2d5c8e3f6a9d2e5f8c1d4a7e2f5c8d1e4f7c2e5d8f1e4c7d2f5e8d1f4e" + }, + { + "name": "ERC1643SustainabilityPerformanceTargetRateFacet", + "address": "0xfC8772d3D07D21440b8d2EE14a86c7671BaC10eC", + "contractId": "0.0.7583711", + "key": "0x5f8d2a3e6c9f1d4e7a2f5c8d1e4f7c2e5d8f1e4c7d2f5e8d1f4c7e2d5f8d1f4c" + }, + { + "name": "ERC1644Facet", + "address": "0xCD8DaF89798257f6b2cA8f4d88e757d2B7D6C022", + "contractId": "0.0.7583712", + "key": "0xf1da2ed271d62ba0b6597874c96fb6ed7d929e5ec679f4ad8c2c516c72f6736d" + }, + { + "name": "ERC1644FixedRateFacet", + "address": "0x9657AD156b3c7dAE400fA5F388AF7b0dc33d0b99", + "contractId": "0.0.7583714", + "key": "0x6f9e3d1c8a5f2e9d6c3f1e8d5c2f9e6d3f1e8c5f2d9e6c3f1d8e5c2f9d6e3f1d" + }, + { + "name": "ERC1644KpiLinkedRateFacet", + "address": "0x0C52f105dfd9ba1748D81d9b7BeF6972A142a0b1", + "contractId": "0.0.7583716", + "key": "0x7a1f4e2d5c8f3e6d9c2f5e8d1f4c7e2d5f8c1f4e7d2e5f8c1e4d7c2f5d8e1f4c" + }, + { + "name": "ERC1644SustainabilityPerformanceTargetRateFacet", + "address": "0xCCACc97Da57E889A959F597f2EB0a58E21fedC00", + "contractId": "0.0.7583719", + "key": "0x8b2f5e3d6f9c2e5d8f1e4c7d2e5f8d1f4c7e2d5f8d1f4c7e2d5f8d1f4c7e2d5f" + }, + { + "name": "ERC20Facet", + "address": "0x42E2D2ba63373511B373b7201070896e1EcF09b5", + "contractId": "0.0.7583723", + "key": "0x064c883089ba1a596d9146c7aaa73c19ef8825f374c67a9538787c3d12e68dc5" + }, + { + "name": "ERC20FixedRateFacet", + "address": "0x9825920DFa32521052831c2A8BDBFb6B60288E8C", + "contractId": "0.0.7583725", + "key": "0x3e4f428a95dadb9b2d5121c4067c845270879ee5e180e4c4d03ad40f00160376" + }, + { + "name": "ERC20KpiLinkedRateFacet", + "address": "0x1C6C4b69eCB4a78634EC7F8A955Acf7147722E5c", + "contractId": "0.0.7583734", + "key": "0xe4565636726032d04f6d265d3ee61c2f046ea49ecb39f4ca68dd4f65713e9620" + }, + { + "name": "ERC20PermitFacet", + "address": "0x315713a48018CF1D590B6d1b80e4cDb36D16b2db", + "contractId": "0.0.7583738", + "key": "0xef05f0313623d32145212ed45620c8b2c8c294b3d6955cf26f3d1b0569fbc1fa" + }, + { + "name": "ERC20PermitFixedRateFacet", + "address": "0x4859f70E5c9fa90FE0A33fa2D90122cc33a25FE7", + "contractId": "0.0.7583741", + "key": "0xc85b8a95de0375d3b552d368932ecaeb9fe85d470eb1e89bc29040cb35d168a3" + }, + { + "name": "ERC20PermitKpiLinkedRateFacet", + "address": "0xC8aCC123e40b5B53AC7BC578F9064671E3acdE8c", + "contractId": "0.0.7583743", + "key": "0x468437a5a7a128b245fb2c3ac08cf17e5f2a6983dece41309b58fffa1fca80a9" + }, + { + "name": "ERC20PermitSustainabilityPerformanceTargetRateFacet", + "address": "0xf2416a2827CA1baF5488ECe9d4C9B25Dc5A17222", + "contractId": "0.0.7583745", + "key": "0x3bf8d35ad3c3320d95184dd4f9a0bfc2e56b151318d9d27eefa74461d24f5c61" + }, + { + "name": "ERC20SustainabilityPerformanceTargetRateFacet", + "address": "0x3Ef6caC829760eC09f2832E759048FCba9F941db", + "contractId": "0.0.7583747", + "key": "0x002a101a46899eecb6af6a76839f76be301e6292a6a5d3eb7a1bae4a0d3574ee" + }, + { + "name": "ERC20VotesFacet", + "address": "0xF96779505aaDA18d665d198B6Da06B2065E27CFA", + "contractId": "0.0.7583751", + "key": "0x5cbfbaa435e19a43530a00ac685c9b5252862a94af2053667ded44642a0d9f4c" + }, + { + "name": "ERC20VotesFixedRateFacet", + "address": "0x0d3c7c4DEDA7eE7c3250E5A5932934A2314b0c07", + "contractId": "0.0.7583752", + "key": "0xce2bc140ce5298990432f0332c33ccaa813a89e3bc3c0589eb30eabe005d2742" + }, + { + "name": "ERC20VotesKpiLinkedRateFacet", + "address": "0x4Ce163bD0aa19b911946D0C62338534a4dbb335f", + "contractId": "0.0.7583758", + "key": "0x9d720cb6c08dff4ea63b2b4f3908fa551321fdc478de6b46a67ba5ecb46f82fc" + }, + { + "name": "ERC20VotesSustainabilityPerformanceTargetRateFacet", + "address": "0x693C7717D1327AD9D0c8D4D04b5832554c910FFB", + "contractId": "0.0.7583759", + "key": "0x9d7e0002a7ae9c94734d62ac85bb1cd4c333dd6c5fb308a7a2b60dd77dfa9d44" + }, + { + "name": "ERC3643BatchFacet", + "address": "0x25efBdB6B17cc942d2a8D9dA133BDbd0e93a4b46", + "contractId": "0.0.7583761", + "key": "0x00332311d9f0c311b31b87399043a90feb10341fcbb4d7f4ed6e3c0072a3c392" + }, + { + "name": "ERC3643BatchFixedRateFacet", + "address": "0x7643a23CADD8D777FD03f960F5c54B15F97Ac9D0", + "contractId": "0.0.7583762", + "key": "0x3563ac36f573b2e288846d3437686b6a5137a7c9b5cbcd027816db63e07d4138" + }, + { + "name": "ERC3643BatchKpiLinkedRateFacet", + "address": "0x0a786F5ca1B7828E29e7e5A525B1B8eFa2F2EE75", + "contractId": "0.0.7583763", + "key": "0xdf3ace3e8d3a434ee6c69da03060d81e1c8c217c16fad43a2819c0bc545253ae" + }, + { + "name": "ERC3643BatchSustainabilityPerformanceTargetRateFacet", + "address": "0x0518DD2cBD41974cfAA617E9Ba3c36db1a016036", + "contractId": "0.0.7583765", + "key": "0x500c4c5bff9db733228f1df9b6e818bf8fab883422d3fbe971c036b513e983d9" + }, + { + "name": "ERC3643ManagementFacet", + "address": "0xe9F9af22F6C112D95Bb1Fa56919877112B10559f", + "contractId": "0.0.7583767", + "key": "0xae7b7d0da6ac02e802a8d85aa821dd5cb84e8448836471680f744f64b678a073" + }, + { + "name": "ERC3643ManagementFixedRateFacet", + "address": "0xEAc96935E75B05f5A36c5d7f22D768ea984765d6", + "contractId": "0.0.7583768", + "key": "0xb82ec3e8b1d44871bbfe25257f4e57b7d9778bc578af2f0ce9ef218f6b897797" + }, + { + "name": "ERC3643ManagementKpiLinkedRateFacet", + "address": "0xD3D3D47150F07E9b8b12A98Bf920949384738E32", + "contractId": "0.0.7583770", + "key": "0x649facd691e27202b46bb9e328ca96c6f6dc0aeefdd6cfc15707ee162b7d5103" + }, + { + "name": "ERC3643ManagementSustainabilityPerformanceTargetRateFacet", + "address": "0x825E23c9B31CDDD413b8CeCfB3407CaB323a8B06", + "contractId": "0.0.7583772", + "key": "0x324a20f20a55098c207cd0bc42498561962995b82918d6a9697320c42c5b11fa" + }, + { + "name": "ERC3643OperationsFacet", + "address": "0x122744A1ad55E525053803c563F1C397305B55F3", + "contractId": "0.0.7583774", + "key": "0xe30b6b8e9e62fb8f017c940c7ffac12709f7ef6ae90beac5570fab25c7384e9c" + }, + { + "name": "ERC3643OperationsFixedRateFacet", + "address": "0xA708168c0a17A3e0fAA54A2d30c6dCA1c54302AB", + "contractId": "0.0.7583775", + "key": "0x6524c4b11c24bcfff0472462572cdfbe5c671cad2df1ac54402e8a7b4dc3ee02" + }, + { + "name": "ERC3643OperationsKpiLinkedRateFacet", + "address": "0x971EAe5cF5c2901E9C17483A3B943a2CA9d5b076", + "contractId": "0.0.7583777", + "key": "0x87b7a50a7578f2499b459e665b6b7b809ac635280a2157d21fc5de0fc4b54715" + }, + { + "name": "ERC3643OperationsSustainabilityPerformanceTargetRateFacet", + "address": "0xC563c736524389975BcB070d41d8824711B1D2CE", + "contractId": "0.0.7583779", + "key": "0xbe85d38775742687362efc4fc0ffed08044614079fc51bbf7b0f29e11d3ffafa" + }, + { + "name": "ERC3643ReadFacet", + "address": "0xfa443Ff79f21CCf5E912d66c2c045dA427E3D4A0", + "contractId": "0.0.7583782", + "key": "0x7743c4e9ff26ef34c3c482d2c12dabe076035eb44bf1c736722f04c33c20ef6a" + }, + { + "name": "ERC3643ReadFixedRateFacet", + "address": "0x79202023700fBf29d8B3598aeB9c77655F1794AB", + "contractId": "0.0.7583783", + "key": "0x53569c2059b40a4ccb6382b2180607da114ff92bfa263d7489ec7face7c4cc1f" + }, + { + "name": "ERC3643ReadKpiLinkedRateFacet", + "address": "0x1049DA0FDBe4Cb26241aC907bB411228D0758467", + "contractId": "0.0.7583784", + "key": "0x68ba78621a8627653774f3b9800b77ac34bd334ecc2dc4d933f9e30d6197194f" + }, + { + "name": "ERC3643ReadSustainabilityPerformanceTargetRateFacet", + "address": "0x4Ba3793C27b04Fb71046cA485A5Ecd125FD35087", + "contractId": "0.0.7583785", + "key": "0x2fc56e8abd44d0dc70cf8876ea454caab82a906ec6333516c1feb4de9b4cb4f8" + }, + { + "name": "ExternalControlListManagementFacet", + "address": "0xce7bA57d8859FB8d7cB97311f6B8e09DFF21268C", + "contractId": "0.0.7583786", + "key": "0x490196911bc65200514fb4568861a36670854901dffa91bc27577664fdace575" + }, + { + "name": "ExternalControlListManagementFixedRateFacet", + "address": "0xC5b6679DF423dE54bc011E372d2Ad18abe724e8F", + "contractId": "0.0.7583791", + "key": "0xdb213fa4fc549f5bc27fc79e6094fe6a26e303e8eabc8a86a8de7bb307d570d8" + }, + { + "name": "ExternalControlListManagementKpiLinkedRateFacet", + "address": "0x429f7C9875b9d1880365b4DEe60e0EE50D622c7b", + "contractId": "0.0.7583792", + "key": "0x9ecec5a17142ae1072721e064f5e9a3f0795a2bea57673f40a9440b8adec0052" + }, + { + "name": "ExternalControlListManagementSustainabilityPerformanceTargetRateFacet", + "address": "0x03C64F4101b4cdaafB05a39D303B7FEC4674490D", + "contractId": "0.0.7583794", + "key": "0x2c56accbf6faf923cd323935455dac00c2ddffe08f0becdf49d515e4b4d355af" + }, + { + "name": "ExternalKycListManagementFacet", + "address": "0xE5233315BA7c8D5a9A89D783bb77D3113414FE34", + "contractId": "0.0.7583796", + "key": "0x32f05e55195d945105aff8ac4b041d4680824578bd72c6a34e4aa906a59237f1" + }, + { + "name": "ExternalKycListManagementFixedRateFacet", + "address": "0x374CCcd5969900a3B97bD68F099101C3555052FA", + "contractId": "0.0.7583797", + "key": "0x4f9cf8c8583a46a60ec88a37a07f91d915dba024a57bdb729a4805603f5c40b2" + }, + { + "name": "ExternalKycListManagementKpiLinkedRateFacet", + "address": "0xF2378e23e4F4fC3E1dC7D5a0D039aD4B116036B1", + "contractId": "0.0.7583798", + "key": "0xc15c973cec2d75a95d94522af2dc05c535be214a6cce368887f7e7d3ead3a491" + }, + { + "name": "ExternalKycListManagementSustainabilityPerformanceTargetRateFacet", + "address": "0x63E5915Ae59b48a88F28CFd9EDeF34739BC2A736", + "contractId": "0.0.7583800", + "key": "0x0fcfeebcf118ca3c39fbed0e2a527a866cac42bbd3fcad5f9b4f755ef97f3aa9" + }, + { + "name": "ExternalPauseManagementFacet", + "address": "0x94513EFDC543A8e5868D596170791b34967a06A7", + "contractId": "0.0.7583802", + "key": "0x158025f9e40c5d145e7915a14d5e97459728d98c715d8329359e305df737ee3c" + }, + { + "name": "ExternalPauseManagementFixedRateFacet", + "address": "0x353abdd8f8C87dDf32D8c1B7BC5eF8Dd50e44643", + "contractId": "0.0.7583803", + "key": "0x752307e5e93ea6e9b979833cf52e6043f71fd4b983ec32aa685f9b160594e326" + }, + { + "name": "ExternalPauseManagementKpiLinkedRateFacet", + "address": "0xD898acE6d5CC6003a310d6282c651f8df6cc12B2", + "contractId": "0.0.7583805", + "key": "0x549d7aab8deeb4a493aa9765937da4290840d4a6fe04399ef4bb818694d9aee4" + }, + { + "name": "ExternalPauseManagementSustainabilityPerformanceTargetRateFacet", + "address": "0x2226d9b982420aCB8f5f17AdE48677f6f1d9aBDC", + "contractId": "0.0.7583807", + "key": "0x07846b678053cbd4be5d9d3929fa9af5ab76bb508a0f7957f5239302aad45bc3" + }, + { + "name": "FixedRateFacet", + "address": "0x444E40E72a1B5B587766B4Cbb490cE0cea00Ca62", + "contractId": "0.0.7583808", + "key": "0x2871e1c37f7423765d88b16528db7e80ad8e2bae5ab5d55e26659840c1d6b504" + }, + { + "name": "FreezeFacet", + "address": "0x9b1CD55B7CbfacbAb180A920E1790a091eA30bA6", + "contractId": "0.0.7583811", + "key": "0x49f765e7155d979a148049c2a0ebed5e028b11799061897a255f99314f0bd3f1" + }, + { + "name": "FreezeFixedRateFacet", + "address": "0x00827b530592cC93e86b523859A607D6114ca7Ae", + "contractId": "0.0.7583812", + "key": "0xad6f49f17db4659e78d7c82e5414ef50b6bfddf3f3e15adc3d0a0e958f696841" + }, + { + "name": "FreezeKpiLinkedRateFacet", + "address": "0xAc29F8327106abd92c884662e07DA5209653e040", + "contractId": "0.0.7583815", + "key": "0xb03614fe7a4412f420f88bc18fc39ab43459dbfdbbdbd0a8e109356b0928272e" + }, + { + "name": "FreezeSustainabilityPerformanceTargetRateFacet", + "address": "0x2fAF173083F754c13Be8a5dDe5C7810c13529720", + "contractId": "0.0.7583816", + "key": "0x25ca5cbe52a82389e142792fdab2ffc58f224f2628f9a92a3f717134cbe229e4" + }, + { + "name": "HoldManagementFacet", + "address": "0xE9bc66E15af74a5199db0b017Fd909761b211329", + "contractId": "0.0.7583817", + "key": "0x6c7216c5c52bc8f5019fc2fb333eb5e518e647fd82c807ed7c2a1fe4a03a3860" + }, + { + "name": "HoldManagementFixedRateFacet", + "address": "0xA1Bf104574E6155Bd5DC8aeDE359B6e65d786F8c", + "contractId": "0.0.7583820", + "key": "0xed113dc152639988cc04869ce8c061c4a3350fe3826e16fc37960453a8d20b50" + }, + { + "name": "HoldManagementKpiLinkedRateFacet", + "address": "0xA2Be61e1F8F843398e2Dc7e2d775f0a9E3fD4A9A", + "contractId": "0.0.7583823", + "key": "0xed86feb6fdd55e6a056bda1a5b7149c2d0d6d7d024625b67aa2c567ba0ef2b9e" + }, + { + "name": "HoldManagementSustainabilityPerformanceTargetRateFacet", + "address": "0x9654bCb0E2Ed53C1253F4346cc193Dda3cC791A4", + "contractId": "0.0.7583826", + "key": "0x4574524c203fbcc0f5b9f08bcd2b9a9d47c5a9cf3a30eeb540a93a33a8a2f834" + }, + { + "name": "HoldReadFacet", + "address": "0x978cD2477003a08ccbE4F1E77EAd1111eA82c7F1", + "contractId": "0.0.7583829", + "key": "0xd8a2714462c01975a075ccd4be2588934afd8074afef746fac089b757b803851" + }, + { + "name": "HoldReadFixedRateFacet", + "address": "0x7663875CA80C71a2A53d7b59d9d302606D2D374e", + "contractId": "0.0.7583831", + "key": "0xcf1b5b7fa2ca417ea3b952a93a6157f237fce01f4944d27160e5101f05335e52" + }, + { + "name": "HoldReadKpiLinkedRateFacet", + "address": "0x8c4859D9B89A8ad10ed009f47313e6898b4A39dC", + "contractId": "0.0.7583836", + "key": "0x6b896f9725e5d4f4b5f8cff875e71b5f3284000a933f6ab32c01cdd5f71306d6" + }, + { + "name": "HoldReadSustainabilityPerformanceTargetRateFacet", + "address": "0x26618f4a991B31BeA76fC5EEe4D7eDb8347c7511", + "contractId": "0.0.7583839", + "key": "0x8e7113391652a4d3d8feb1d90990cd06ee33dc67a640b4400f8bfb9fae4f91b2" + }, + { + "name": "HoldTokenHolderFacet", + "address": "0x7e9e50e4432676A754da292d4904544F2c8Be4D3", + "contractId": "0.0.7583843", + "key": "0x87b17a3ce9a86872f21469d26f005543a22ef5729998559f4ad433d5c4253f3e" + }, + { + "name": "HoldTokenHolderFixedRateFacet", + "address": "0x4FeE5E4042172Cc819bCa86AB02Bc53c1632311f", + "contractId": "0.0.7583848", + "key": "0x0d354aad4576c421c121516a105362711db178c6f0d6e0159d68d9f3ebbda486" + }, + { + "name": "HoldTokenHolderKpiLinkedRateFacet", + "address": "0xD252d4F2B09dEE951EB153f3Ab3421D7dd0997F3", + "contractId": "0.0.7583851", + "key": "0x09f3820ce986997421b684b2482b6d982f31b5ed27a0d72e2aece5ffb3c8fd39" + }, + { + "name": "HoldTokenHolderSustainabilityPerformanceTargetRateFacet", + "address": "0xE863ea52Aa899C7aae7DEbc26148499Da5560EF2", + "contractId": "0.0.7583855", + "key": "0x28ae4d4cdc1846ba348a31e222161d8343223560c1875fe3efcad8c5dd5f81e0" + }, + { + "name": "KpiLinkedRateFacet", + "address": "0x8C48E7Ab14790E6f418bb23093229D0DA49A0940", + "contractId": "0.0.7583857", + "key": "0x92999bd0329d03e46274ce7743ebe0060df95286df4fa7b354937b7d21757d22" + }, + { + "name": "KpisSustainabilityPerformanceTargetRateFacet", + "address": "0xE9C1d11b55E574E95e14Eb7Eae631998ee2783aF", + "contractId": "0.0.7583860", + "key": "" + }, + { + "name": "KycFacet", + "address": "0xcAE65B5859B8dD9fdE78210926d430fa63d2c83e", + "contractId": "0.0.7583861", + "key": "0xf516a0f6b4726244ae916c590cd26c2b593d7d448e46e43714fb9f9435c46e32" + }, + { + "name": "KycFixedRateFacet", + "address": "0xED5e616d96E8c32aC8678C691500794e24Bce892", + "contractId": "0.0.7583863", + "key": "0x76145b42d3591928a90298dbd705c8cdb33be9f5eee50f649fb58ed3f36b9f04" + }, + { + "name": "KycKpiLinkedRateFacet", + "address": "0x5648825E924D1b00FD2b588D1Dd618Dd6A786942", + "contractId": "0.0.7583865", + "key": "0x9cf03144d37b7b92d5b438e1f037a64ebdc48c2891bc4b475a15a1cf833574d0" + }, + { + "name": "KycSustainabilityPerformanceTargetRateFacet", + "address": "0xa6f92F40Db42c1018081491066b94eF204Cf8554", + "contractId": "0.0.7583867", + "key": "0x1cb818916342973b46841d2ca9543c702bf6380fb0fc179f356139aa142379c3" + }, + { + "name": "LockFacet", + "address": "0xCd82c1Ae846Af21E1Dc9D56FFA262f5DC939116F", + "contractId": "0.0.7583868", + "key": "0xf1364345b3db5ebe5808f2d2d2aaecb9cdb4fddacad1534033060ebc886fc1e9" + }, + { + "name": "LockFixedRateFacet", + "address": "0xaAf41b2c6cdE2659a359dB9Ac31ad952aF372c5f", + "contractId": "0.0.7583871", + "key": "0x053d181bbb93fc7807aafeac901706f74ec5767053695d2b769bf0fdcf065e4d" + }, + { + "name": "LockKpiLinkedRateFacet", + "address": "0x9c08c1D1597Ea9926b619Cc701C31ff6dc180F80", + "contractId": "0.0.7583874", + "key": "0x04caf3f62f31b8b1edd96c39948d89098fd83c1a1b5b76aa39927cf7ad8e9d42" + }, + { + "name": "LockSustainabilityPerformanceTargetRateFacet", + "address": "0x035b643668c030C912CBFcebf2e2c31e246D64Be", + "contractId": "0.0.7583876", + "key": "0xe73c2eecf92b5b8eb7ecc89b379f70193694f2906188318c3407458267385b82" + }, + { + "name": "PauseFacet", + "address": "0x5876B09d44643Fc835a82595380964e16429Cc91", + "contractId": "0.0.7583877", + "key": "0x9429fd9ef38f89f41bd9ec33fd5c94b287ed1c27a98938da43835ac761b2f92c" + }, + { + "name": "PauseFixedRateFacet", + "address": "0xdD4E5BE68D0a7fa083F0f0C00867e0A06bB78A1a", + "contractId": "0.0.7583880", + "key": "0x9fd7fc8200742d120881c0cf0a0541bae13e372519d986a5169b23b82ea06f12" + }, + { + "name": "PauseKpiLinkedRateFacet", + "address": "0x406959bfCA28a971140976F6C2Cc0D851Fc40b7d", + "contractId": "0.0.7583881", + "key": "0x77ff7dc4f2d4a0cb28f09307895b94478d6655e7a545222f97b753a6c90a8f71" + }, + { + "name": "PauseSustainabilityPerformanceTargetRateFacet", + "address": "0x8d01795cAa87860ADf6ed341808d928f357D9d4d", + "contractId": "0.0.7583883", + "key": "0xa16c7f2d6b5ab7f05dd30bd562ac9f3005fe21e3b2bde131733e37c0d42046ee" + }, + { + "name": "ProceedRecipientsFacet", + "address": "0x8A5acfF93EE277f691c9ef155763B57D0E8d2868", + "contractId": "0.0.7583885", + "key": "0x87f4b676bf89cd24a01a78fd8e7fb2102c2f6d034be73d16402f7297e0ae625b" + }, + { + "name": "ProceedRecipientsFixedRateFacet", + "address": "0x1De466195B772D7d9aC5552bA8B1824AD69b0987", + "contractId": "0.0.7583886", + "key": "0xd1f2e9d8c7b6a5e4f3d2c1b9a8e7f6d5c4b3a2e1f9d8c7b6a5e4f3d2c1b9a8e7" + }, + { + "name": "ProceedRecipientsKpiLinkedRateFacet", + "address": "0x55aB7C0fFcEc1C8d8a702BefB40FDe2A97076CeD", + "contractId": "0.0.7583888", + "key": "0xe2f3e1d9c8b7a6e5f4d3c2b1a9e8f7d6c5b4a3e2f1d9c8b7a6e5f4d3c2b1a9e8" + }, + { + "name": "ProceedRecipientsSustainabilityPerformanceTargetRateFacet", + "address": "0xB7Ff6338B8e875993fCDE0cda5867dd2DdB92f58", + "contractId": "0.0.7583889", + "key": "0xf3e4f2e1d9c8b7a6e5f4d3c2b1a9e8f7d6c5b4a3e2f1d9c8b7a6e5f4d3c2b1a9" + }, + { + "name": "ProtectedPartitionsFacet", + "address": "0xEA1fDD2AA40fc692edac546414BF6Ce2506a4AEC", + "contractId": "0.0.7583890", + "key": "0x6d65d2938c05a4d952aff0845c1baa5bea04d4544db74f8b3b26004d1d58d58f" + }, + { + "name": "ProtectedPartitionsFixedRateFacet", + "address": "0x7AA684500E84246E3ee0D2Ccf4269665AD065821", + "contractId": "0.0.7583891", + "key": "0x1f8166e21922daee7192ddd5f8a1ce657013d69d412a4e4f5848ab75f1ca8db3" + }, + { + "name": "ProtectedPartitionsKpiLinkedRateFacet", + "address": "0xcE5eC29496fc632ccDa9090028d41AC4C2D0EA1A", + "contractId": "0.0.7583893", + "key": "0x665aad7ee148905a0af716acbc6abd8f408eadce853caf3f84528a9810ffc436" + }, + { + "name": "ProtectedPartitionsSustainabilityPerformanceTargetRateFacet", + "address": "0xa80f686e977cEeD4BBa350a40baE16F6156D6ABa", + "contractId": "0.0.7583894", + "key": "0x088ec2750f42a30fde9383e74f4148ce5df963263d426deffc1d29fff61a6538" + }, + { + "name": "ScheduledBalanceAdjustmentsFacet", + "address": "0x1f5F86A4f6F4E95eCc2961D378b53ae1BCD3f08b", + "contractId": "0.0.7583896", + "key": "0xc418e67a48260d700e5f85863ad6fa6593206a4385728f8baba1572d631535e0" + }, + { + "name": "ScheduledBalanceAdjustmentsFixedRateFacet", + "address": "0xD886c2BA56DF4E2EbC8bd6B1E14256620aa7dEdB", + "contractId": "0.0.7583897", + "key": "0xb3336a1ececdcd807fd6e81cc57e9392c75bf3fd303a2f5df0b11c0dda87ce7f" + }, + { + "name": "ScheduledBalanceAdjustmentsKpiLinkedRateFacet", + "address": "0x5Cd53249224fbe1ff336CFB4Df29405A3ddB5424", + "contractId": "0.0.7583899", + "key": "0x3da33aed4e04baa1b9c39bd96d0bc7be51ecaa1468eff7f632c29fb134644cb4" + }, + { + "name": "ScheduledBalanceAdjustmentsSustainabilityPerformanceTargetRateFacet", + "address": "0x791f56553a86f8CEFC76D5D0e40C1718E1104575", + "contractId": "0.0.7583901", + "key": "0x1168df5bb8a348d137af6e29915c261dc82c495f72484a046ac4f750899625f4" + }, + { + "name": "ScheduledCouponListingFacet", + "address": "0xA352B0B47d60fcB6C346A3e78Da4baB96BF4cF55", + "contractId": "0.0.7583902", + "key": "0x6cc7645ae5bcd122875ce8bd150bd28dda6374546c4c2421e5ae4fdeedb3ab30" + }, + { + "name": "ScheduledCouponListingFixedRateFacet", + "address": "0xEbB7Bf03b5aD2C6171E0208FafCce43EBC9E6d7A", + "contractId": "0.0.7583903", + "key": "0x9c249eccb68ce7eae5f58a9b4fbe1f3b6a6f2a644b36c3f1b3559077b4f4e266" + }, + { + "name": "ScheduledCouponListingKpiLinkedRateFacet", + "address": "0xc9dCbf806644323e4d7cb8ca01c6F9F7fB210125", + "contractId": "0.0.7583904", + "key": "0x9f42d2f2ae6efad6d2acf0399ec9e5a1bed9e41c68a86b58f1de78da4fe3c598" + }, + { + "name": "ScheduledCouponListingSustainabilityPerformanceTargetRateFacet", + "address": "0xA0096F91781030792B3eD4a83DC064493Cd3E4Ff", + "contractId": "0.0.7583905", + "key": "0x85c0dee450a5a4657a9de39ca4ba19881b079d55d5bb64641d52f59bea709ba8" + }, + { + "name": "ScheduledCrossOrderedTasksFacet", + "address": "0x390d9592bBD7cb760C2E6249D148b5bB334a16c6", + "contractId": "0.0.7583907", + "key": "0xa4934195ab83f1497ce5fc99b68d0f41694716bcfba5f232aa6c8e0d4d504f08" + }, + { + "name": "ScheduledCrossOrderedTasksFixedRateFacet", + "address": "0x835fd9f110fD31C850fd6E82B87D9a92486485eD", + "contractId": "0.0.7583908", + "key": "0x1312a5fa6cd5c7128015b199c47eacbf1636ef5cf437c0ee84c619dfbd372ca0" + }, + { + "name": "ScheduledCrossOrderedTasksKpiLinkedRateFacet", + "address": "0xD4d4FE292F97Fe2a8ef2A81daB2fFE1fE532C0E6", + "contractId": "0.0.7583910", + "key": "0x04d20e52e58dbadedfcf6c373a826fc5f7c665fd6caf67c8a65a9e777a8b70ec" + }, + { + "name": "ScheduledCrossOrderedTasksSustainabilityPerformanceTargetRateFacet", + "address": "0x0b9dBe4399f99d5F48f0BBB57F57810746c4e074", + "contractId": "0.0.7583911", + "key": "0x23d3302e505d889e80b20005bf316ccd7cbbd3c547a7305d600e8f0d9bc73267" + }, + { + "name": "ScheduledSnapshotsFacet", + "address": "0x3baBfdB475Ee577227B5064f08B640392c253837", + "contractId": "0.0.7583913", + "key": "0x100f681e33d02a1124c2c05a537a1229eca89767c5e6e8720066ca74bfb85793" + }, + { + "name": "ScheduledSnapshotsFixedRateFacet", + "address": "0x193981ccc39beB9b6c90326C403EbbAb51D284a9", + "contractId": "0.0.7583914", + "key": "0xe3f0d8c05423e6bf8dc42fb776a1ce265739fc66f9b501077b207a0c2a56cab6" + }, + { + "name": "ScheduledSnapshotsKpiLinkedRateFacet", + "address": "0x585e17bf09A8Be3C5D2988A4B96d81a59aEC3a2E", + "contractId": "0.0.7583916", + "key": "0xbfb6dd5a6beac6604a320b8363bc0da4093ba327dd037970ad82d422b0d88526" + }, + { + "name": "ScheduledSnapshotsSustainabilityPerformanceTargetRateFacet", + "address": "0x7D3219858E0beA9e90c8EE49a02c242dB1D07f69", + "contractId": "0.0.7583917", + "key": "0x99a85df534e32a3b9fce8e80f0cc30d6703e578eb5c641ab2d9e95530d046b4b" + }, + { + "name": "SnapshotsFacet", + "address": "0x033F7dAd6750aebFd366f5C4A1B4ad6406256927", + "contractId": "0.0.7583919", + "key": "0x9a3fc46d83536ef6b87eb4fec37302bfd1a7c18e81ea2da853b911b44cf5b0cf" + }, + { + "name": "SnapshotsFixedRateFacet", + "address": "0x340cc76F5e5513cE67c02D05Ba0868819080e0bD", + "contractId": "0.0.7583921", + "key": "0xf9b2659fdf4231d426bc34cef93a8b3f42e5cfaf762f65dbf6537ab3e5ee8348" + }, + { + "name": "SnapshotsKpiLinkedRateFacet", + "address": "0x0d68889dc3c1168c044c1Fe8686e9BA63A330743", + "contractId": "0.0.7583922", + "key": "0x9c0a9b3a98c7e535e4b1a0749f01f63ea94b600fbee8df56d7c18a1f3043ee20" + }, + { + "name": "SnapshotsSustainabilityPerformanceTargetRateFacet", + "address": "0x91B950F9506288cF5dEA3b9351c2308EDAa97CB4", + "contractId": "0.0.7583924", + "key": "0xbcc6255960c1cbe69dae32f7db730d14a35fdb81d91cc7e637e5af4d229bcbbe" + }, + { + "name": "SsiManagementFacet", + "address": "0x8A40316d32e8bB07974CA55565778Db72a6C3f88", + "contractId": "0.0.7583926", + "key": "0x77c35dccfcdc80370e925aae86871ef8bc71db0b8e082c073cda906e89bb610e" + }, + { + "name": "SsiManagementFixedRateFacet", + "address": "0xC0776921CBf1B87A6501468B869C82e0cE175E85", + "contractId": "0.0.7583928", + "key": "0xd3c3eb4fde853b08d2509769f85fbcc3147edd847e1e8da89c805628293effb2" + }, + { + "name": "SsiManagementKpiLinkedRateFacet", + "address": "0xaF2eDC8bB75C1395Fe960ac323C069f841FEb26F", + "contractId": "0.0.7583929", + "key": "0xac0a01362676a7a1370879903993e04310cb7a3b60fc327072dcf7a00ce50e5a" + }, + { + "name": "SsiManagementSustainabilityPerformanceTargetRateFacet", + "address": "0xcff388f44Ec407b010456B8D8cA150A01CbF516a", + "contractId": "0.0.7583930", + "key": "0x5de367269fd9e98ceb172f263a954ee471605474013e206e00340c5914046c8b" + }, + { + "name": "SustainabilityPerformanceTargetRateFacet", + "address": "0x0048805d2fC2B15f1F172af29cafc4319618f04b", + "contractId": "0.0.7583931", + "key": "0xa261a7434029a925924f47ccea7fbe12af1e56efd74e8f1d8ac23bec19a27e49" + }, + { + "name": "TransferAndLockFacet", + "address": "0xcDf0162579bFdEe059414d27713F3f61c40B5F37", + "contractId": "0.0.7583933", + "key": "0xd9b300e6bf7a143b8fd8cf1d4ab050e691c862bf0f57a7d49cc08c60efe68d08" + }, + { + "name": "TransferAndLockFixedRateFacet", + "address": "0x4eEdFC5d97D023af7F6E6f5Da9ec23982420E1F8", + "contractId": "0.0.7583935", + "key": "0x8c3d5e9f2a6b1c4d7e8f9a2b3c4d5e6f7a8b9c0d1e2f3a4b5c6d7e8f9a0b1c2d" + }, + { + "name": "TransferAndLockKpiLinkedRateFacet", + "address": "0x7474D7A893BBE5912e360C126fFaC8F98CF81660", + "contractId": "0.0.7583936", + "key": "0x3e5f7a9b1c2d4e6f8a9b0c1d2e3f4a5b6c7d8e9f0a1b2c3d4e5f6a7b8c9d0e1f" + }, + { + "name": "TransferAndLockSustainabilityPerformanceTargetRateFacet", + "address": "0xb1B30d51aC49eCd46693732f8db0F737B9E46ca4", + "contractId": "0.0.7583937", + "key": "0x9d1e3f5a7b9c0d2e4f6a8b0c1d3e5f7a9b0c2d4e6f8a9b1c3d5e7f9a0b2c4d6e" + } + ], + "configurations": { + "equity": { + "configId": "0x0000000000000000000000000000000000000000000000000000000000000001", + "version": 1, + "facetCount": 43, + "facets": [ + { + "facetName": "AccessControlFacet", + "key": "0x011768a41cb4fe76a26f444eec15d81a0d84e919a36336d72c6539cf41c0fcf6", + "address": "0xA99B7C048B916C17e25d957F306541b16f96cF1C" + }, + { + "facetName": "CapFacet", + "key": "0xfb3f8aac36661b5540c571d821c80dc9db7ede5ca2a4204ee562b3356f0c026b", + "address": "0x13C6A24091a15684b990342f400314f5dA646dC3" + }, + { + "facetName": "ControlListFacet", + "key": "0xfbb1491bfcecd95f79409bd5a4b69a4ba1e5573573372f5d2d66c11e3016414c", + "address": "0x8E612cBB6aaBf4EaA5a1Bc25f7BBD3614Bc7eF57" + }, + { + "facetName": "CorporateActionsFacet", + "key": "0x3cc74200ccfb5d585a6d170f8824979dbf1b592e0a41eef41cf6d86cf4882077", + "address": "0x4A60066A0d24052e9A7831CEAaA3ab0f9027C2dA" + }, + { + "facetName": "DiamondFacet", + "key": "0x1b5212ea37fb29e99afa2812a5d7d7e662a477424d3de1a18cc3871a2ee94d78", + "address": "0xBD106b930A5747F33ae4f361883984BEe2d90236" + }, + { + "facetName": "ERC20Facet", + "key": "0x064c883089ba1a596d9146c7aaa73c19ef8825f374c67a9538787c3d12e68dc5", + "address": "0x42E2D2ba63373511B373b7201070896e1EcF09b5" + }, + { + "facetName": "FreezeFacet", + "key": "0x49f765e7155d979a148049c2a0ebed5e028b11799061897a255f99314f0bd3f1", + "address": "0x9b1CD55B7CbfacbAb180A920E1790a091eA30bA6" + }, + { + "facetName": "KycFacet", + "key": "0xf516a0f6b4726244ae916c590cd26c2b593d7d448e46e43714fb9f9435c46e32", + "address": "0xcAE65B5859B8dD9fdE78210926d430fa63d2c83e" + }, + { + "facetName": "PauseFacet", + "key": "0x9429fd9ef38f89f41bd9ec33fd5c94b287ed1c27a98938da43835ac761b2f92c", + "address": "0x5876B09d44643Fc835a82595380964e16429Cc91" + }, + { + "facetName": "SnapshotsFacet", + "key": "0x9a3fc46d83536ef6b87eb4fec37302bfd1a7c18e81ea2da853b911b44cf5b0cf", + "address": "0x033F7dAd6750aebFd366f5C4A1B4ad6406256927" + }, + { + "facetName": "ERC1410IssuerFacet", + "key": "0x6e82b75f32c9647cc00b4c3eabbef5a82677f3e91d5d196eb4dd6a0365941344", + "address": "0x9dcE05825c42c870c6D8D938E913bfae39F4a475" + }, + { + "facetName": "ERC1410ManagementFacet", + "key": "0x232f8686795d3f197681faf0d8db05655e759f62d709d56b97e5d9cfff29dbf5", + "address": "0xD2022e8Cb8E0aB5970162d8696394008a76f33c8" + }, + { + "facetName": "ERC1410ReadFacet", + "key": "0x5eb2734b83ea80c3eb63463a6192b30ab2526cb7a073f0abfda1a404c92ae497", + "address": "0xFA20c0f24035D329Ac6A31bd34Cc39D40164D56b" + }, + { + "facetName": "ERC1410TokenHolderFacet", + "key": "0x0466bf860d23f1ecbc25f364735e0dc3830d236f09182599831730ddd2792caa", + "address": "0x9E43D8b040D9b38F75e98D71653D655FFe2e36e2" + }, + { + "facetName": "ERC1594Facet", + "key": "0xcb70773e8163595d8bd906e277adeb3935976ad802ee8c29face3dfb0263291f", + "address": "0x996DaAC14777c70Bd85C1b1fc1C039565f4b9B59" + }, + { + "facetName": "ERC1643Facet", + "key": "0x24543637956a3076689f171d3932b10f22d40f3785d53acebb340f37bed01625", + "address": "0x5Ca66a434BB3dc23CB69c7ADe226816cA354e9a7" + }, + { + "facetName": "ERC1644Facet", + "key": "0xf1da2ed271d62ba0b6597874c96fb6ed7d929e5ec679f4ad8c2c516c72f6736d", + "address": "0xCD8DaF89798257f6b2cA8f4d88e757d2B7D6C022" + }, + { + "facetName": "ERC20PermitFacet", + "key": "0xef05f0313623d32145212ed45620c8b2c8c294b3d6955cf26f3d1b0569fbc1fa", + "address": "0x315713a48018CF1D590B6d1b80e4cDb36D16b2db" + }, + { + "facetName": "ERC20VotesFacet", + "key": "0x5cbfbaa435e19a43530a00ac685c9b5252862a94af2053667ded44642a0d9f4c", + "address": "0xF96779505aaDA18d665d198B6Da06B2065E27CFA" + }, + { + "facetName": "ERC3643BatchFacet", + "key": "0x00332311d9f0c311b31b87399043a90feb10341fcbb4d7f4ed6e3c0072a3c392", + "address": "0x25efBdB6B17cc942d2a8D9dA133BDbd0e93a4b46" + }, + { + "facetName": "ERC3643ManagementFacet", + "key": "0xae7b7d0da6ac02e802a8d85aa821dd5cb84e8448836471680f744f64b678a073", + "address": "0xe9F9af22F6C112D95Bb1Fa56919877112B10559f" + }, + { + "facetName": "ERC3643OperationsFacet", + "key": "0xe30b6b8e9e62fb8f017c940c7ffac12709f7ef6ae90beac5570fab25c7384e9c", + "address": "0x122744A1ad55E525053803c563F1C397305B55F3" + }, + { + "facetName": "ERC3643ReadFacet", + "key": "0x7743c4e9ff26ef34c3c482d2c12dabe076035eb44bf1c736722f04c33c20ef6a", + "address": "0xfa443Ff79f21CCf5E912d66c2c045dA427E3D4A0" + }, + { + "facetName": "ClearingActionsFacet", + "key": "0x5472dfc5c92ad7a8651518ea7d3854d3b6494e5bcaa19f91cd61bf93bf6f2a74", + "address": "0x5d3066B50154Cc8A42D876A4809fAaD04bd8D17a" + }, + { + "facetName": "ClearingHoldCreationFacet", + "key": "0x44f99a141c434fac20d69e7511932ee344d5b37b61851976c83a5df4ca468152", + "address": "0xf5A1716191F56336A73eb13EA0EeDA391De01fFc" + }, + { + "facetName": "ClearingReadFacet", + "key": "0xebb2e29bdf4edaf4ca66a3f9b7735087f9d0474d56d856e53c94ef00596c0b1e", + "address": "0x21eDCb85a4587cBf501f91fd861e68B479A5a08c" + }, + { + "facetName": "ClearingRedeemFacet", + "key": "0xb341e7aa749da43976c189209de51ccdf838af9f964cd27340b914d5b2aeba97", + "address": "0x6aB25BF318D3975660e75B2A4db2e79692D0a07e" + }, + { + "facetName": "ClearingTransferFacet", + "key": "0x7399d03db62430bec60ca2c3eacf98b1b7e2253f17593ef7a226d759442e0928", + "address": "0x855ed519A7f10A02b9C8075fc094084cE34BAeAf" + }, + { + "facetName": "HoldManagementFacet", + "key": "0x6c7216c5c52bc8f5019fc2fb333eb5e518e647fd82c807ed7c2a1fe4a03a3860", + "address": "0xE9bc66E15af74a5199db0b017Fd909761b211329" + }, + { + "facetName": "HoldReadFacet", + "key": "0xd8a2714462c01975a075ccd4be2588934afd8074afef746fac089b757b803851", + "address": "0x978cD2477003a08ccbE4F1E77EAd1111eA82c7F1" + }, + { + "facetName": "HoldTokenHolderFacet", + "key": "0x87b17a3ce9a86872f21469d26f005543a22ef5729998559f4ad433d5c4253f3e", + "address": "0x7e9e50e4432676A754da292d4904544F2c8Be4D3" + }, + { + "facetName": "ExternalControlListManagementFacet", + "key": "0x490196911bc65200514fb4568861a36670854901dffa91bc27577664fdace575", + "address": "0xce7bA57d8859FB8d7cB97311f6B8e09DFF21268C" + }, + { + "facetName": "ExternalKycListManagementFacet", + "key": "0x32f05e55195d945105aff8ac4b041d4680824578bd72c6a34e4aa906a59237f1", + "address": "0xE5233315BA7c8D5a9A89D783bb77D3113414FE34" + }, + { + "facetName": "ExternalPauseManagementFacet", + "key": "0x158025f9e40c5d145e7915a14d5e97459728d98c715d8329359e305df737ee3c", + "address": "0x94513EFDC543A8e5868D596170791b34967a06A7" + }, + { + "facetName": "AdjustBalancesFacet", + "key": "0x2bbe9fb018f1e7dd12b4442154e7fdfd75aec7b0a65d07debf49de4ece5fe8b8", + "address": "0x616104a7f6dB2A10579705a56e82D1b4EE78a679" + }, + { + "facetName": "LockFacet", + "key": "0xf1364345b3db5ebe5808f2d2d2aaecb9cdb4fddacad1534033060ebc886fc1e9", + "address": "0xCd82c1Ae846Af21E1Dc9D56FFA262f5DC939116F" + }, + { + "facetName": "ProtectedPartitionsFacet", + "key": "0x6d65d2938c05a4d952aff0845c1baa5bea04d4544db74f8b3b26004d1d58d58f", + "address": "0xEA1fDD2AA40fc692edac546414BF6Ce2506a4AEC" + }, + { + "facetName": "ScheduledBalanceAdjustmentsFacet", + "key": "0xc418e67a48260d700e5f85863ad6fa6593206a4385728f8baba1572d631535e0", + "address": "0x1f5F86A4f6F4E95eCc2961D378b53ae1BCD3f08b" + }, + { + "facetName": "ScheduledCrossOrderedTasksFacet", + "key": "0xa4934195ab83f1497ce5fc99b68d0f41694716bcfba5f232aa6c8e0d4d504f08", + "address": "0x390d9592bBD7cb760C2E6249D148b5bB334a16c6" + }, + { + "facetName": "ScheduledSnapshotsFacet", + "key": "0x100f681e33d02a1124c2c05a537a1229eca89767c5e6e8720066ca74bfb85793", + "address": "0x3baBfdB475Ee577227B5064f08B640392c253837" + }, + { + "facetName": "SsiManagementFacet", + "key": "0x77c35dccfcdc80370e925aae86871ef8bc71db0b8e082c073cda906e89bb610e", + "address": "0x8A40316d32e8bB07974CA55565778Db72a6C3f88" + }, + { + "facetName": "TransferAndLockFacet", + "key": "0xd9b300e6bf7a143b8fd8cf1d4ab050e691c862bf0f57a7d49cc08c60efe68d08", + "address": "0xcDf0162579bFdEe059414d27713F3f61c40B5F37" + }, + { + "facetName": "EquityUSAFacet", + "key": "0xfe85fe0513f5a5676011f59495ae16b2b93c981c190e99e61903e5603542c810", + "address": "0x4699C791d37f5049748c1918fC3826a2445Af7a1" + } + ] + }, + "bond": { + "configId": "0x0000000000000000000000000000000000000000000000000000000000000002", + "version": 1, + "facetCount": 46, + "facets": [ + { + "facetName": "AccessControlFacet", + "key": "0x011768a41cb4fe76a26f444eec15d81a0d84e919a36336d72c6539cf41c0fcf6", + "address": "0xA99B7C048B916C17e25d957F306541b16f96cF1C" + }, + { + "facetName": "CapFacet", + "key": "0xfb3f8aac36661b5540c571d821c80dc9db7ede5ca2a4204ee562b3356f0c026b", + "address": "0x13C6A24091a15684b990342f400314f5dA646dC3" + }, + { + "facetName": "ControlListFacet", + "key": "0xfbb1491bfcecd95f79409bd5a4b69a4ba1e5573573372f5d2d66c11e3016414c", + "address": "0x8E612cBB6aaBf4EaA5a1Bc25f7BBD3614Bc7eF57" + }, + { + "facetName": "CorporateActionsFacet", + "key": "0x3cc74200ccfb5d585a6d170f8824979dbf1b592e0a41eef41cf6d86cf4882077", + "address": "0x4A60066A0d24052e9A7831CEAaA3ab0f9027C2dA" + }, + { + "facetName": "DiamondFacet", + "key": "0x1b5212ea37fb29e99afa2812a5d7d7e662a477424d3de1a18cc3871a2ee94d78", + "address": "0xBD106b930A5747F33ae4f361883984BEe2d90236" + }, + { + "facetName": "ERC20Facet", + "key": "0x064c883089ba1a596d9146c7aaa73c19ef8825f374c67a9538787c3d12e68dc5", + "address": "0x42E2D2ba63373511B373b7201070896e1EcF09b5" + }, + { + "facetName": "FreezeFacet", + "key": "0x49f765e7155d979a148049c2a0ebed5e028b11799061897a255f99314f0bd3f1", + "address": "0x9b1CD55B7CbfacbAb180A920E1790a091eA30bA6" + }, + { + "facetName": "KycFacet", + "key": "0xf516a0f6b4726244ae916c590cd26c2b593d7d448e46e43714fb9f9435c46e32", + "address": "0xcAE65B5859B8dD9fdE78210926d430fa63d2c83e" + }, + { + "facetName": "PauseFacet", + "key": "0x9429fd9ef38f89f41bd9ec33fd5c94b287ed1c27a98938da43835ac761b2f92c", + "address": "0x5876B09d44643Fc835a82595380964e16429Cc91" + }, + { + "facetName": "SnapshotsFacet", + "key": "0x9a3fc46d83536ef6b87eb4fec37302bfd1a7c18e81ea2da853b911b44cf5b0cf", + "address": "0x033F7dAd6750aebFd366f5C4A1B4ad6406256927" + }, + { + "facetName": "ERC1410IssuerFacet", + "key": "0x6e82b75f32c9647cc00b4c3eabbef5a82677f3e91d5d196eb4dd6a0365941344", + "address": "0x9dcE05825c42c870c6D8D938E913bfae39F4a475" + }, + { + "facetName": "ERC1410ManagementFacet", + "key": "0x232f8686795d3f197681faf0d8db05655e759f62d709d56b97e5d9cfff29dbf5", + "address": "0xD2022e8Cb8E0aB5970162d8696394008a76f33c8" + }, + { + "facetName": "ERC1410ReadFacet", + "key": "0x5eb2734b83ea80c3eb63463a6192b30ab2526cb7a073f0abfda1a404c92ae497", + "address": "0xFA20c0f24035D329Ac6A31bd34Cc39D40164D56b" + }, + { + "facetName": "ERC1410TokenHolderFacet", + "key": "0x0466bf860d23f1ecbc25f364735e0dc3830d236f09182599831730ddd2792caa", + "address": "0x9E43D8b040D9b38F75e98D71653D655FFe2e36e2" + }, + { + "facetName": "ERC1594Facet", + "key": "0xcb70773e8163595d8bd906e277adeb3935976ad802ee8c29face3dfb0263291f", + "address": "0x996DaAC14777c70Bd85C1b1fc1C039565f4b9B59" + }, + { + "facetName": "ERC1643Facet", + "key": "0x24543637956a3076689f171d3932b10f22d40f3785d53acebb340f37bed01625", + "address": "0x5Ca66a434BB3dc23CB69c7ADe226816cA354e9a7" + }, + { + "facetName": "ERC1644Facet", + "key": "0xf1da2ed271d62ba0b6597874c96fb6ed7d929e5ec679f4ad8c2c516c72f6736d", + "address": "0xCD8DaF89798257f6b2cA8f4d88e757d2B7D6C022" + }, + { + "facetName": "ERC20PermitFacet", + "key": "0xef05f0313623d32145212ed45620c8b2c8c294b3d6955cf26f3d1b0569fbc1fa", + "address": "0x315713a48018CF1D590B6d1b80e4cDb36D16b2db" + }, + { + "facetName": "ERC20VotesFacet", + "key": "0x5cbfbaa435e19a43530a00ac685c9b5252862a94af2053667ded44642a0d9f4c", + "address": "0xF96779505aaDA18d665d198B6Da06B2065E27CFA" + }, + { + "facetName": "ERC3643BatchFacet", + "key": "0x00332311d9f0c311b31b87399043a90feb10341fcbb4d7f4ed6e3c0072a3c392", + "address": "0x25efBdB6B17cc942d2a8D9dA133BDbd0e93a4b46" + }, + { + "facetName": "ERC3643ManagementFacet", + "key": "0xae7b7d0da6ac02e802a8d85aa821dd5cb84e8448836471680f744f64b678a073", + "address": "0xe9F9af22F6C112D95Bb1Fa56919877112B10559f" + }, + { + "facetName": "ERC3643OperationsFacet", + "key": "0xe30b6b8e9e62fb8f017c940c7ffac12709f7ef6ae90beac5570fab25c7384e9c", + "address": "0x122744A1ad55E525053803c563F1C397305B55F3" + }, + { + "facetName": "ERC3643ReadFacet", + "key": "0x7743c4e9ff26ef34c3c482d2c12dabe076035eb44bf1c736722f04c33c20ef6a", + "address": "0xfa443Ff79f21CCf5E912d66c2c045dA427E3D4A0" + }, + { + "facetName": "ClearingActionsFacet", + "key": "0x5472dfc5c92ad7a8651518ea7d3854d3b6494e5bcaa19f91cd61bf93bf6f2a74", + "address": "0x5d3066B50154Cc8A42D876A4809fAaD04bd8D17a" + }, + { + "facetName": "ClearingHoldCreationFacet", + "key": "0x44f99a141c434fac20d69e7511932ee344d5b37b61851976c83a5df4ca468152", + "address": "0xf5A1716191F56336A73eb13EA0EeDA391De01fFc" + }, + { + "facetName": "ClearingReadFacet", + "key": "0xebb2e29bdf4edaf4ca66a3f9b7735087f9d0474d56d856e53c94ef00596c0b1e", + "address": "0x21eDCb85a4587cBf501f91fd861e68B479A5a08c" + }, + { + "facetName": "ClearingRedeemFacet", + "key": "0xb341e7aa749da43976c189209de51ccdf838af9f964cd27340b914d5b2aeba97", + "address": "0x6aB25BF318D3975660e75B2A4db2e79692D0a07e" + }, + { + "facetName": "ClearingTransferFacet", + "key": "0x7399d03db62430bec60ca2c3eacf98b1b7e2253f17593ef7a226d759442e0928", + "address": "0x855ed519A7f10A02b9C8075fc094084cE34BAeAf" + }, + { + "facetName": "HoldManagementFacet", + "key": "0x6c7216c5c52bc8f5019fc2fb333eb5e518e647fd82c807ed7c2a1fe4a03a3860", + "address": "0xE9bc66E15af74a5199db0b017Fd909761b211329" + }, + { + "facetName": "HoldReadFacet", + "key": "0xd8a2714462c01975a075ccd4be2588934afd8074afef746fac089b757b803851", + "address": "0x978cD2477003a08ccbE4F1E77EAd1111eA82c7F1" + }, + { + "facetName": "HoldTokenHolderFacet", + "key": "0x87b17a3ce9a86872f21469d26f005543a22ef5729998559f4ad433d5c4253f3e", + "address": "0x7e9e50e4432676A754da292d4904544F2c8Be4D3" + }, + { + "facetName": "ExternalControlListManagementFacet", + "key": "0x490196911bc65200514fb4568861a36670854901dffa91bc27577664fdace575", + "address": "0xce7bA57d8859FB8d7cB97311f6B8e09DFF21268C" + }, + { + "facetName": "ExternalKycListManagementFacet", + "key": "0x32f05e55195d945105aff8ac4b041d4680824578bd72c6a34e4aa906a59237f1", + "address": "0xE5233315BA7c8D5a9A89D783bb77D3113414FE34" + }, + { + "facetName": "ExternalPauseManagementFacet", + "key": "0x158025f9e40c5d145e7915a14d5e97459728d98c715d8329359e305df737ee3c", + "address": "0x94513EFDC543A8e5868D596170791b34967a06A7" + }, + { + "facetName": "AdjustBalancesFacet", + "key": "0x2bbe9fb018f1e7dd12b4442154e7fdfd75aec7b0a65d07debf49de4ece5fe8b8", + "address": "0x616104a7f6dB2A10579705a56e82D1b4EE78a679" + }, + { + "facetName": "LockFacet", + "key": "0xf1364345b3db5ebe5808f2d2d2aaecb9cdb4fddacad1534033060ebc886fc1e9", + "address": "0xCd82c1Ae846Af21E1Dc9D56FFA262f5DC939116F" + }, + { + "facetName": "ProceedRecipientsFacet", + "key": "0x87f4b676bf89cd24a01a78fd8e7fb2102c2f6d034be73d16402f7297e0ae625b", + "address": "0x8A5acfF93EE277f691c9ef155763B57D0E8d2868" + }, + { + "facetName": "ProtectedPartitionsFacet", + "key": "0x6d65d2938c05a4d952aff0845c1baa5bea04d4544db74f8b3b26004d1d58d58f", + "address": "0xEA1fDD2AA40fc692edac546414BF6Ce2506a4AEC" + }, + { + "facetName": "ScheduledBalanceAdjustmentsFacet", + "key": "0xc418e67a48260d700e5f85863ad6fa6593206a4385728f8baba1572d631535e0", + "address": "0x1f5F86A4f6F4E95eCc2961D378b53ae1BCD3f08b" + }, + { + "facetName": "ScheduledCrossOrderedTasksFacet", + "key": "0xa4934195ab83f1497ce5fc99b68d0f41694716bcfba5f232aa6c8e0d4d504f08", + "address": "0x390d9592bBD7cb760C2E6249D148b5bB334a16c6" + }, + { + "facetName": "ScheduledCouponListingFacet", + "key": "0x6cc7645ae5bcd122875ce8bd150bd28dda6374546c4c2421e5ae4fdeedb3ab30", + "address": "0xA352B0B47d60fcB6C346A3e78Da4baB96BF4cF55" + }, + { + "facetName": "ScheduledSnapshotsFacet", + "key": "0x100f681e33d02a1124c2c05a537a1229eca89767c5e6e8720066ca74bfb85793", + "address": "0x3baBfdB475Ee577227B5064f08B640392c253837" + }, + { + "facetName": "SsiManagementFacet", + "key": "0x77c35dccfcdc80370e925aae86871ef8bc71db0b8e082c073cda906e89bb610e", + "address": "0x8A40316d32e8bB07974CA55565778Db72a6C3f88" + }, + { + "facetName": "TransferAndLockFacet", + "key": "0xd9b300e6bf7a143b8fd8cf1d4ab050e691c862bf0f57a7d49cc08c60efe68d08", + "address": "0xcDf0162579bFdEe059414d27713F3f61c40B5F37" + }, + { + "facetName": "BondUSAFacet", + "key": "0xe6594ee8f54f346ab25268fdc7955031a6b06102355e1446353d89ab1d593de3", + "address": "0x98230eAA8E75dfBf5b625c17568D6Dd21e31f07B" + }, + { + "facetName": "BondUSAReadFacet", + "key": "0x624866e79d4c0a78a8dc32cbce49563cdf86eba627bd05a9821dbaa1674ac231", + "address": "0x9DfE8fcceCD16f7e51dECd3e6A0351F46cd6Cfa3" + } + ] + }, + "bondFixedRate": { + "configId": "0x0000000000000000000000000000000000000000000000000000000000000003", + "version": 1, + "facetCount": 47, + "facets": [ + { + "facetName": "AccessControlFixedRateFacet", + "key": "0xb35ad81b5769c62538fe6a90e40db8be624645f77c1738ce582ede5da399ecb2", + "address": "0x29dEfd75874493b8D73096dFc9aF5d6F9a3153a9" + }, + { + "facetName": "CapFixedRateFacet", + "key": "0x288b5a4b82f38369168fd49de3e5e68c76fc0394c2e89817b70a65368ba4dcf7", + "address": "0x60475665B66b3188F8a60087a40f114ef308B352" + }, + { + "facetName": "ControlListFixedRateFacet", + "key": "0x083b7e0957ebd3a0f69bf432ce05d94c1848cbdbf0e66664919c4803b14dfdf8", + "address": "0xeBB9913990Dca821A7a3BF657A1f1434b9CBf846" + }, + { + "facetName": "CorporateActionsFixedRateFacet", + "key": "0xd2c0415cebdbb6dcaf014ce92df6bcae060743c622fd7ce954105b71954e0424", + "address": "0x5A920cA633c5db2773a3e47123D3fCb4e176d6a4" + }, + { + "facetName": "DiamondFacet", + "key": "0x1b5212ea37fb29e99afa2812a5d7d7e662a477424d3de1a18cc3871a2ee94d78", + "address": "0xBD106b930A5747F33ae4f361883984BEe2d90236" + }, + { + "facetName": "ERC20FixedRateFacet", + "key": "0x3e4f428a95dadb9b2d5121c4067c845270879ee5e180e4c4d03ad40f00160376", + "address": "0x9825920DFa32521052831c2A8BDBFb6B60288E8C" + }, + { + "facetName": "FreezeFixedRateFacet", + "key": "0xad6f49f17db4659e78d7c82e5414ef50b6bfddf3f3e15adc3d0a0e958f696841", + "address": "0x00827b530592cC93e86b523859A607D6114ca7Ae" + }, + { + "facetName": "KycFixedRateFacet", + "key": "0x76145b42d3591928a90298dbd705c8cdb33be9f5eee50f649fb58ed3f36b9f04", + "address": "0xED5e616d96E8c32aC8678C691500794e24Bce892" + }, + { + "facetName": "PauseFixedRateFacet", + "key": "0x9fd7fc8200742d120881c0cf0a0541bae13e372519d986a5169b23b82ea06f12", + "address": "0xdD4E5BE68D0a7fa083F0f0C00867e0A06bB78A1a" + }, + { + "facetName": "SnapshotsFixedRateFacet", + "key": "0xf9b2659fdf4231d426bc34cef93a8b3f42e5cfaf762f65dbf6537ab3e5ee8348", + "address": "0x340cc76F5e5513cE67c02D05Ba0868819080e0bD" + }, + { + "facetName": "ERC1410IssuerFixedRateFacet", + "key": "0xb9c76f134ffdac743e817a2726bdf9f28a48dfea1f9f54b1066e4e0de68f2a06", + "address": "0xD777bE0a3D9481875811ADd92266897999a41c6C" + }, + { + "facetName": "ERC1410ManagementFixedRateFacet", + "key": "0xf616851e84bfcfb3b33a8cc54c54c34e9168ba2b8d233a0b3daacee27f0266ca", + "address": "0xD572EDE6F558ecC856B87b2577d2ddbeD5436B25" + }, + { + "facetName": "ERC1410ReadFixedRateFacet", + "key": "0x289451d28da5d8ff4e7759db6b1c418b7871f0d6ad63bf7f75cd411f3d79686d", + "address": "0x844DFA92F7992968Fa70eBc704774E0D1cC22108" + }, + { + "facetName": "ERC1410TokenHolderFixedRateFacet", + "key": "0xfd248a6ee4af07046520c6ec6f9b61a009db5407ec2f967775040cd67b66f08d", + "address": "0x9c7dbe0cD88FdAB78feA9779b86ea25f9E4C3AbE" + }, + { + "facetName": "ERC1594FixedRateFacet", + "key": "0x7a8f3e6d2c4b1a9e5f7d8c6b4a2e1f9d7c5b3a1e9f7d5c3b1a9e7f5d3c1b9e7f", + "address": "0xFb4F1E79A83697233eC618f347763d091660a27c" + }, + { + "facetName": "ERC1643FixedRateFacet", + "key": "0x3d6e9f1c5a8b2e7f4d9c6a3e1f8d5c2a9f6e3d1c8f5e2d9c6f3e1d8c5f2d9c6f", + "address": "0xa807533D9Fff5E3004ca28d04e7B4Ca4983AF446" + }, + { + "facetName": "ERC1644FixedRateFacet", + "key": "0x6f9e3d1c8a5f2e9d6c3f1e8d5c2f9e6d3f1e8c5f2d9e6c3f1d8e5c2f9d6e3f1d", + "address": "0x9657AD156b3c7dAE400fA5F388AF7b0dc33d0b99" + }, + { + "facetName": "ERC20PermitFixedRateFacet", + "key": "0xc85b8a95de0375d3b552d368932ecaeb9fe85d470eb1e89bc29040cb35d168a3", + "address": "0x4859f70E5c9fa90FE0A33fa2D90122cc33a25FE7" + }, + { + "facetName": "ERC20VotesFixedRateFacet", + "key": "0xce2bc140ce5298990432f0332c33ccaa813a89e3bc3c0589eb30eabe005d2742", + "address": "0x0d3c7c4DEDA7eE7c3250E5A5932934A2314b0c07" + }, + { + "facetName": "ERC3643BatchFixedRateFacet", + "key": "0x3563ac36f573b2e288846d3437686b6a5137a7c9b5cbcd027816db63e07d4138", + "address": "0x7643a23CADD8D777FD03f960F5c54B15F97Ac9D0" + }, + { + "facetName": "ERC3643ManagementFixedRateFacet", + "key": "0xb82ec3e8b1d44871bbfe25257f4e57b7d9778bc578af2f0ce9ef218f6b897797", + "address": "0xEAc96935E75B05f5A36c5d7f22D768ea984765d6" + }, + { + "facetName": "ERC3643OperationsFixedRateFacet", + "key": "0x6524c4b11c24bcfff0472462572cdfbe5c671cad2df1ac54402e8a7b4dc3ee02", + "address": "0xA708168c0a17A3e0fAA54A2d30c6dCA1c54302AB" + }, + { + "facetName": "ERC3643ReadFixedRateFacet", + "key": "0x53569c2059b40a4ccb6382b2180607da114ff92bfa263d7489ec7face7c4cc1f", + "address": "0x79202023700fBf29d8B3598aeB9c77655F1794AB" + }, + { + "facetName": "ClearingActionsFixedRateFacet", + "key": "0x497fbb5ba36b9a6b791669e513c877ebfe079b61e0eb37afbd19b696266a0223", + "address": "0x3B4A6AF905DD232B05ca53A97D852ca250FC22A0" + }, + { + "facetName": "ClearingHoldCreationFixedRateFacet", + "key": "0xf4d60b90b7a9edb9598b8c4aa2a4477e3a65750eab2cce564385f35d882a23c3", + "address": "0xE6044E5b4E855483F603a865c362556E311476d0" + }, + { + "facetName": "ClearingReadFixedRateFacet", + "key": "0xcd312e798e5b62ec98cc7c8ac3547a640f68ee74e351b73397be02dab3d5b14f", + "address": "0x54066ee65B9DEA28dC2c7CF6EC05d4AE7B8Ad39e" + }, + { + "facetName": "ClearingRedeemFixedRateFacet", + "key": "0xa8edf3401d5e3f8e9a45b0992984a31a2522a24ed793e5e7980f8d66508473c9", + "address": "0xe289b14F18146c338298B4C1E53232Ed33EFdC39" + }, + { + "facetName": "ClearingTransferFixedRateFacet", + "key": "0x1ba056fe3e7ef86779515a9e7f364e84af0f60eb5f4175ac6d6e6e3f4c05fffb", + "address": "0x9438f67D6AC1ECa4aFeC600CB3ba899B1A5E96D4" + }, + { + "facetName": "HoldManagementFixedRateFacet", + "key": "0xed113dc152639988cc04869ce8c061c4a3350fe3826e16fc37960453a8d20b50", + "address": "0xA1Bf104574E6155Bd5DC8aeDE359B6e65d786F8c" + }, + { + "facetName": "HoldReadFixedRateFacet", + "key": "0xcf1b5b7fa2ca417ea3b952a93a6157f237fce01f4944d27160e5101f05335e52", + "address": "0x7663875CA80C71a2A53d7b59d9d302606D2D374e" + }, + { + "facetName": "HoldTokenHolderFixedRateFacet", + "key": "0x0d354aad4576c421c121516a105362711db178c6f0d6e0159d68d9f3ebbda486", + "address": "0x4FeE5E4042172Cc819bCa86AB02Bc53c1632311f" + }, + { + "facetName": "ExternalControlListManagementFixedRateFacet", + "key": "0xdb213fa4fc549f5bc27fc79e6094fe6a26e303e8eabc8a86a8de7bb307d570d8", + "address": "0xC5b6679DF423dE54bc011E372d2Ad18abe724e8F" + }, + { + "facetName": "ExternalKycListManagementFixedRateFacet", + "key": "0x4f9cf8c8583a46a60ec88a37a07f91d915dba024a57bdb729a4805603f5c40b2", + "address": "0x374CCcd5969900a3B97bD68F099101C3555052FA" + }, + { + "facetName": "ExternalPauseManagementFixedRateFacet", + "key": "0x752307e5e93ea6e9b979833cf52e6043f71fd4b983ec32aa685f9b160594e326", + "address": "0x353abdd8f8C87dDf32D8c1B7BC5eF8Dd50e44643" + }, + { + "facetName": "AdjustBalancesFixedRateFacet", + "key": "0xa7e8f6d5c4b3a2e1f9d8c7b6a5e4f3d2c1b9a8e7f6d5c4b3a2e1f9d8c7b6a5e4", + "address": "0x8F9d2D9414090A725fC9a9278C71e948B70Aa9FE" + }, + { + "facetName": "LockFixedRateFacet", + "key": "0x053d181bbb93fc7807aafeac901706f74ec5767053695d2b769bf0fdcf065e4d", + "address": "0xaAf41b2c6cdE2659a359dB9Ac31ad952aF372c5f" + }, + { + "facetName": "ProceedRecipientsFixedRateFacet", + "key": "0xd1f2e9d8c7b6a5e4f3d2c1b9a8e7f6d5c4b3a2e1f9d8c7b6a5e4f3d2c1b9a8e7", + "address": "0x1De466195B772D7d9aC5552bA8B1824AD69b0987" + }, + { + "facetName": "ProtectedPartitionsFixedRateFacet", + "key": "0x1f8166e21922daee7192ddd5f8a1ce657013d69d412a4e4f5848ab75f1ca8db3", + "address": "0x7AA684500E84246E3ee0D2Ccf4269665AD065821" + }, + { + "facetName": "ScheduledBalanceAdjustmentsFixedRateFacet", + "key": "0xb3336a1ececdcd807fd6e81cc57e9392c75bf3fd303a2f5df0b11c0dda87ce7f", + "address": "0xD886c2BA56DF4E2EbC8bd6B1E14256620aa7dEdB" + }, + { + "facetName": "ScheduledCrossOrderedTasksFixedRateFacet", + "key": "0x1312a5fa6cd5c7128015b199c47eacbf1636ef5cf437c0ee84c619dfbd372ca0", + "address": "0x835fd9f110fD31C850fd6E82B87D9a92486485eD" + }, + { + "facetName": "ScheduledCouponListingFixedRateFacet", + "key": "0x9c249eccb68ce7eae5f58a9b4fbe1f3b6a6f2a644b36c3f1b3559077b4f4e266", + "address": "0xEbB7Bf03b5aD2C6171E0208FafCce43EBC9E6d7A" + }, + { + "facetName": "ScheduledSnapshotsFixedRateFacet", + "key": "0xe3f0d8c05423e6bf8dc42fb776a1ce265739fc66f9b501077b207a0c2a56cab6", + "address": "0x193981ccc39beB9b6c90326C403EbbAb51D284a9" + }, + { + "facetName": "SsiManagementFixedRateFacet", + "key": "0xd3c3eb4fde853b08d2509769f85fbcc3147edd847e1e8da89c805628293effb2", + "address": "0xC0776921CBf1B87A6501468B869C82e0cE175E85" + }, + { + "facetName": "TransferAndLockFixedRateFacet", + "key": "0x8c3d5e9f2a6b1c4d7e8f9a2b3c4d5e6f7a8b9c0d1e2f3a4b5c6d7e8f9a0b1c2d", + "address": "0x4eEdFC5d97D023af7F6E6f5Da9ec23982420E1F8" + }, + { + "facetName": "FixedRateFacet", + "key": "0x2871e1c37f7423765d88b16528db7e80ad8e2bae5ab5d55e26659840c1d6b504", + "address": "0x444E40E72a1B5B587766B4Cbb490cE0cea00Ca62" + }, + { + "facetName": "BondUSAFixedRateFacet", + "key": "0xd55d8787d23b78e70dada1ade45b8758f5c027e2cddf3556606c07d388ce159a", + "address": "0x4EbDa06Ce0a8f60BA1A69393F6fEF504CF213575" + }, + { + "facetName": "BondUSAReadFixedRateFacet", + "key": "0xd5d703d15aa25ad6419288846269dcbba84f489f1c986be2c919f84c042b8c24", + "address": "0xc723F9752DCeBd61245c5525F7f250B1FCa79682" + } + ] + }, + "bondKpiLinkedRate": { + "configId": "0x0000000000000000000000000000000000000000000000000000000000000004", + "version": 1, + "facetCount": 47, + "facets": [ + { + "facetName": "AccessControlKpiLinkedRateFacet", + "key": "0x465c95eea6723a1645e5399789cee702b19d0bcd0ad3f894270aa25488fb4ab9", + "address": "0x07699963A3Ff5342379D580ad2c3C68f30534809" + }, + { + "facetName": "CapKpiLinkedRateFacet", + "key": "0xdc8cc0612bf886bcc1666e31c5de3392bee78451de7213b01fe78d560a804435", + "address": "0x81Bf337f975723ed1bfc936a926Eb70767bd956c" + }, + { + "facetName": "ControlListKpiLinkedRateFacet", + "key": "0xaaa80b13f9a051b7f9546e92763bedfbe259f511da870cbb1133fe0e79c8eac5", + "address": "0x70aEB92868C4ca29DA3f71F587b24cFB8dbf6054" + }, + { + "facetName": "CorporateActionsKpiLinkedRateFacet", + "key": "0xf86b1190fb42cc572ccdeac774fdf968c303079b8c5eceaeb1c9f4f9089bb6be", + "address": "0x1b8b3Db89A5f87cAF34E08a3fDa3Fc6ECf972dfE" + }, + { + "facetName": "DiamondFacet", + "key": "0x1b5212ea37fb29e99afa2812a5d7d7e662a477424d3de1a18cc3871a2ee94d78", + "address": "0xBD106b930A5747F33ae4f361883984BEe2d90236" + }, + { + "facetName": "ERC20KpiLinkedRateFacet", + "key": "0xe4565636726032d04f6d265d3ee61c2f046ea49ecb39f4ca68dd4f65713e9620", + "address": "0x1C6C4b69eCB4a78634EC7F8A955Acf7147722E5c" + }, + { + "facetName": "FreezeKpiLinkedRateFacet", + "key": "0xb03614fe7a4412f420f88bc18fc39ab43459dbfdbbdbd0a8e109356b0928272e", + "address": "0xAc29F8327106abd92c884662e07DA5209653e040" + }, + { + "facetName": "KycKpiLinkedRateFacet", + "key": "0x9cf03144d37b7b92d5b438e1f037a64ebdc48c2891bc4b475a15a1cf833574d0", + "address": "0x5648825E924D1b00FD2b588D1Dd618Dd6A786942" + }, + { + "facetName": "PauseKpiLinkedRateFacet", + "key": "0x77ff7dc4f2d4a0cb28f09307895b94478d6655e7a545222f97b753a6c90a8f71", + "address": "0x406959bfCA28a971140976F6C2Cc0D851Fc40b7d" + }, + { + "facetName": "SnapshotsKpiLinkedRateFacet", + "key": "0x9c0a9b3a98c7e535e4b1a0749f01f63ea94b600fbee8df56d7c18a1f3043ee20", + "address": "0x0d68889dc3c1168c044c1Fe8686e9BA63A330743" + }, + { + "facetName": "ERC1410IssuerKpiLinkedRateFacet", + "key": "0x97246e7c6950bcc047f6ea198308a7f304bca9f3f13d2ce5d7fdeee9cc9e0828", + "address": "0x6FF2e1f9c82b18CED5c911145334fDa218435009" + }, + { + "facetName": "ERC1410ManagementKpiLinkedRateFacet", + "key": "0x831449a00c9cf218fe471b13f84f7109b57ad4b1202d4ed93009ee3d53276a2f", + "address": "0x608FF329edEaAD9bCB7A9283Dfb16D57f93f0AbE" + }, + { + "facetName": "ERC1410ReadKpiLinkedRateFacet", + "key": "0x696d9b2b17b535f70254309692c77475c258c27dfa6853bbecc611bc350136cd", + "address": "0xBe2d46845a94588664f20cCB083B5533Ce3d497a" + }, + { + "facetName": "ERC1410TokenHolderKpiLinkedRateFacet", + "key": "0x463e4b758e14b6cdc1dd053ae3df476d527be8131eb3b41c64b4cf8019855237", + "address": "0xA1dfDD2371d696F9761C8A14046285c6aC2d3aA5" + }, + { + "facetName": "ERC1594KpiLinkedRateFacet", + "key": "0x1b4e7a9d3f5c2e8a6d4b9f7e5c3a1d8f6e4c2a9d7f5e3c1b8f6d4e2c9a7f5d3e", + "address": "0x1Ffdc9b5a18D3AbE1E8CFB4A7d88b91bce6F3f0f" + }, + { + "facetName": "ERC1643KpiLinkedRateFacet", + "key": "0x4e7f1a2d5c8e3f6a9d2e5f8c1d4a7e2f5c8d1e4f7c2e5d8f1e4c7d2f5e8d1f4e", + "address": "0xB451d3E9Bdc121d46c1EA276C0B790799b6b533b" + }, + { + "facetName": "ERC1644KpiLinkedRateFacet", + "key": "0x7a1f4e2d5c8f3e6d9c2f5e8d1f4c7e2d5f8c1f4e7d2e5f8c1e4d7c2f5d8e1f4c", + "address": "0x0C52f105dfd9ba1748D81d9b7BeF6972A142a0b1" + }, + { + "facetName": "ERC20PermitKpiLinkedRateFacet", + "key": "0x468437a5a7a128b245fb2c3ac08cf17e5f2a6983dece41309b58fffa1fca80a9", + "address": "0xC8aCC123e40b5B53AC7BC578F9064671E3acdE8c" + }, + { + "facetName": "ERC20VotesKpiLinkedRateFacet", + "key": "0x9d720cb6c08dff4ea63b2b4f3908fa551321fdc478de6b46a67ba5ecb46f82fc", + "address": "0x4Ce163bD0aa19b911946D0C62338534a4dbb335f" + }, + { + "facetName": "ERC3643BatchKpiLinkedRateFacet", + "key": "0xdf3ace3e8d3a434ee6c69da03060d81e1c8c217c16fad43a2819c0bc545253ae", + "address": "0x0a786F5ca1B7828E29e7e5A525B1B8eFa2F2EE75" + }, + { + "facetName": "ERC3643ManagementKpiLinkedRateFacet", + "key": "0x649facd691e27202b46bb9e328ca96c6f6dc0aeefdd6cfc15707ee162b7d5103", + "address": "0xD3D3D47150F07E9b8b12A98Bf920949384738E32" + }, + { + "facetName": "ERC3643OperationsKpiLinkedRateFacet", + "key": "0x87b7a50a7578f2499b459e665b6b7b809ac635280a2157d21fc5de0fc4b54715", + "address": "0x971EAe5cF5c2901E9C17483A3B943a2CA9d5b076" + }, + { + "facetName": "ERC3643ReadKpiLinkedRateFacet", + "key": "0x68ba78621a8627653774f3b9800b77ac34bd334ecc2dc4d933f9e30d6197194f", + "address": "0x1049DA0FDBe4Cb26241aC907bB411228D0758467" + }, + { + "facetName": "ClearingActionsKpiLinkedRateFacet", + "key": "0x4960adcd566163ba9edaee816f8739f1c788cace28ad805c136644de52929faa", + "address": "0xd6BeFd99d0A67EC2f13d8D82b3c5d629e2773c1F" + }, + { + "facetName": "ClearingHoldCreationKpiLinkedRateFacet", + "key": "0x1ba40338a89cd18f2799a3e6a86f0be118236340eeff5a19a19a08d3d6e3d08c", + "address": "0xeAE7ffde876F56A9af461EE181BF6a148cD848a3" + }, + { + "facetName": "ClearingReadKpiLinkedRateFacet", + "key": "0x3740ea12ff1c9c37f216ba72884079bcaabe99f51cdd9b019be5b218ba5db0e2", + "address": "0x204A30CECF0486E1d482645FEa2DcFB2d0B367E0" + }, + { + "facetName": "ClearingRedeemKpiLinkedRateFacet", + "key": "0xc38aaff0161104c594b7a323af3facf5beb1e304b730fcbee09f5eed74b11375", + "address": "0x98AEF6995eE5E4F605dBb2bCD215794D999aFd2a" + }, + { + "facetName": "ClearingTransferKpiLinkedRateFacet", + "key": "0x1b229a6d3b8a8ecba97d1e7c2c4a89c4cf71b9b5852317278f57384d728f8bde", + "address": "0x2fb995FE4c0cda38d8b2160B575A3af5Dc0F166c" + }, + { + "facetName": "HoldManagementKpiLinkedRateFacet", + "key": "0xed86feb6fdd55e6a056bda1a5b7149c2d0d6d7d024625b67aa2c567ba0ef2b9e", + "address": "0xA2Be61e1F8F843398e2Dc7e2d775f0a9E3fD4A9A" + }, + { + "facetName": "HoldReadKpiLinkedRateFacet", + "key": "0x6b896f9725e5d4f4b5f8cff875e71b5f3284000a933f6ab32c01cdd5f71306d6", + "address": "0x8c4859D9B89A8ad10ed009f47313e6898b4A39dC" + }, + { + "facetName": "HoldTokenHolderKpiLinkedRateFacet", + "key": "0x09f3820ce986997421b684b2482b6d982f31b5ed27a0d72e2aece5ffb3c8fd39", + "address": "0xD252d4F2B09dEE951EB153f3Ab3421D7dd0997F3" + }, + { + "facetName": "ExternalControlListManagementKpiLinkedRateFacet", + "key": "0x9ecec5a17142ae1072721e064f5e9a3f0795a2bea57673f40a9440b8adec0052", + "address": "0x429f7C9875b9d1880365b4DEe60e0EE50D622c7b" + }, + { + "facetName": "ExternalKycListManagementKpiLinkedRateFacet", + "key": "0xc15c973cec2d75a95d94522af2dc05c535be214a6cce368887f7e7d3ead3a491", + "address": "0xF2378e23e4F4fC3E1dC7D5a0D039aD4B116036B1" + }, + { + "facetName": "ExternalPauseManagementKpiLinkedRateFacet", + "key": "0x549d7aab8deeb4a493aa9765937da4290840d4a6fe04399ef4bb818694d9aee4", + "address": "0xD898acE6d5CC6003a310d6282c651f8df6cc12B2" + }, + { + "facetName": "AdjustBalancesKpiLinkedRateFacet", + "key": "0xb8f9e7d6c5b4a3e2f1d9c8b7a6e5f4d3c2b1a9e8f7d6c5b4a3e2f1d9c8b7a6e5", + "address": "0x68c51dC9BA530D1E06539Ca53a714649086FFA9a" + }, + { + "facetName": "LockKpiLinkedRateFacet", + "key": "0x04caf3f62f31b8b1edd96c39948d89098fd83c1a1b5b76aa39927cf7ad8e9d42", + "address": "0x9c08c1D1597Ea9926b619Cc701C31ff6dc180F80" + }, + { + "facetName": "ProceedRecipientsKpiLinkedRateFacet", + "key": "0xe2f3e1d9c8b7a6e5f4d3c2b1a9e8f7d6c5b4a3e2f1d9c8b7a6e5f4d3c2b1a9e8", + "address": "0x55aB7C0fFcEc1C8d8a702BefB40FDe2A97076CeD" + }, + { + "facetName": "ProtectedPartitionsKpiLinkedRateFacet", + "key": "0x665aad7ee148905a0af716acbc6abd8f408eadce853caf3f84528a9810ffc436", + "address": "0xcE5eC29496fc632ccDa9090028d41AC4C2D0EA1A" + }, + { + "facetName": "ScheduledBalanceAdjustmentsKpiLinkedRateFacet", + "key": "0x3da33aed4e04baa1b9c39bd96d0bc7be51ecaa1468eff7f632c29fb134644cb4", + "address": "0x5Cd53249224fbe1ff336CFB4Df29405A3ddB5424" + }, + { + "facetName": "ScheduledCrossOrderedTasksKpiLinkedRateFacet", + "key": "0x04d20e52e58dbadedfcf6c373a826fc5f7c665fd6caf67c8a65a9e777a8b70ec", + "address": "0xD4d4FE292F97Fe2a8ef2A81daB2fFE1fE532C0E6" + }, + { + "facetName": "ScheduledCouponListingKpiLinkedRateFacet", + "key": "0x9f42d2f2ae6efad6d2acf0399ec9e5a1bed9e41c68a86b58f1de78da4fe3c598", + "address": "0xc9dCbf806644323e4d7cb8ca01c6F9F7fB210125" + }, + { + "facetName": "ScheduledSnapshotsKpiLinkedRateFacet", + "key": "0xbfb6dd5a6beac6604a320b8363bc0da4093ba327dd037970ad82d422b0d88526", + "address": "0x585e17bf09A8Be3C5D2988A4B96d81a59aEC3a2E" + }, + { + "facetName": "SsiManagementKpiLinkedRateFacet", + "key": "0xac0a01362676a7a1370879903993e04310cb7a3b60fc327072dcf7a00ce50e5a", + "address": "0xaF2eDC8bB75C1395Fe960ac323C069f841FEb26F" + }, + { + "facetName": "TransferAndLockKpiLinkedRateFacet", + "key": "0x3e5f7a9b1c2d4e6f8a9b0c1d2e3f4a5b6c7d8e9f0a1b2c3d4e5f6a7b8c9d0e1f", + "address": "0x7474D7A893BBE5912e360C126fFaC8F98CF81660" + }, + { + "facetName": "KpiLinkedRateFacet", + "key": "0x92999bd0329d03e46274ce7743ebe0060df95286df4fa7b354937b7d21757d22", + "address": "0x8C48E7Ab14790E6f418bb23093229D0DA49A0940" + }, + { + "facetName": "BondUSAKpiLinkedRateFacet", + "key": "0x99c145ff21354eb7b25cb096873143fa3d3aba98457b96bcd13f1d1f2b9bf28c", + "address": "0xF50bfFC90f88d7B59C1503249770C07Bd2c3f49C" + }, + { + "facetName": "BondUSAReadKpiLinkedRateFacet", + "key": "0xcced91a2a03bf45bd62730a7f4703ee2d762f8ebccff315c7145258265f73249", + "address": "0x08D68235B9DA7dA11D85fe8df8c0396EAc8314e7" + } + ] + }, + "bondSustainabilityPerformanceTargetRate": { + "configId": "0x0000000000000000000000000000000000000000000000000000000000000005", + "version": 1, + "facetCount": 47, + "facets": [ + { + "facetName": "AccessControlSustainabilityPerformanceTargetRateFacet", + "key": "0x9d13e61abd630355ccae4279993868d7cf3b04d4368a0fedcefe6fec3fabaa0c", + "address": "0x243C6be611db641F366e0E3e20b2b96996A5dA06" + }, + { + "facetName": "CapSustainabilityPerformanceTargetRateFacet", + "key": "0xa321c5301bbccd760c5aaf08286a67948cb7d49be22c17f12aa163b324a276d0", + "address": "0x43D25E88CAF9Ed428D2997B174373B4Ed5d5dF92" + }, + { + "facetName": "ControlListSustainabilityPerformanceTargetRateFacet", + "key": "0xe3fbab5a4ccf7a873a9601bf5494c43f6e4b53218ff8310ec97811471397b3cf", + "address": "0x3eEd0c78627E8EFeF1618953938F4Ab784e7517F" + }, + { + "facetName": "CorporateActionsSustainabilityPerformanceTargetRateFacet", + "key": "0xa4a23267cb0a22c52bd05b12e644136bc38b7ac51218a0cb3aed166697caa79e", + "address": "0xDd5cEC5fdeEbf648d5Da154CF2Eab14f94C16Fb3" + }, + { + "facetName": "DiamondFacet", + "key": "0x1b5212ea37fb29e99afa2812a5d7d7e662a477424d3de1a18cc3871a2ee94d78", + "address": "0xBD106b930A5747F33ae4f361883984BEe2d90236" + }, + { + "facetName": "ERC20SustainabilityPerformanceTargetRateFacet", + "key": "0x002a101a46899eecb6af6a76839f76be301e6292a6a5d3eb7a1bae4a0d3574ee", + "address": "0x3Ef6caC829760eC09f2832E759048FCba9F941db" + }, + { + "facetName": "FreezeSustainabilityPerformanceTargetRateFacet", + "key": "0x25ca5cbe52a82389e142792fdab2ffc58f224f2628f9a92a3f717134cbe229e4", + "address": "0x2fAF173083F754c13Be8a5dDe5C7810c13529720" + }, + { + "facetName": "KycSustainabilityPerformanceTargetRateFacet", + "key": "0x1cb818916342973b46841d2ca9543c702bf6380fb0fc179f356139aa142379c3", + "address": "0xa6f92F40Db42c1018081491066b94eF204Cf8554" + }, + { + "facetName": "PauseSustainabilityPerformanceTargetRateFacet", + "key": "0xa16c7f2d6b5ab7f05dd30bd562ac9f3005fe21e3b2bde131733e37c0d42046ee", + "address": "0x8d01795cAa87860ADf6ed341808d928f357D9d4d" + }, + { + "facetName": "SnapshotsSustainabilityPerformanceTargetRateFacet", + "key": "0xbcc6255960c1cbe69dae32f7db730d14a35fdb81d91cc7e637e5af4d229bcbbe", + "address": "0x91B950F9506288cF5dEA3b9351c2308EDAa97CB4" + }, + { + "facetName": "ERC1410IssuerSustainabilityPerformanceTargetRateFacet", + "key": "0x4d5a3964d29183253487011c31ec3e09977b5eded43c8a3a222a2e53f4282f61", + "address": "0x2588B727124904d39A91E50666156C7dA7f12A7B" + }, + { + "facetName": "ERC1410ManagementSustainabilityPerformanceTargetRateFacet", + "key": "0x6768fcc73686ddd306656061b0e415208ded041927d9935de3747583559d0c5e", + "address": "0xB5ac33A3E6dE58292849BD26D84126f5D321a649" + }, + { + "facetName": "ERC1410ReadSustainabilityPerformanceTargetRateFacet", + "key": "0x7c15e98edcc41b3177b8cfff7055cd57b47000fd843fce22e7ead13f07e346b6", + "address": "0xa79e903298b7a898d16a57f3314D408f94a70ca5" + }, + { + "facetName": "ERC1410TokenHolderSustainabilityPerformanceTargetRateFacet", + "key": "0x6e21f1ca6d12f08b0d36f08711a48500d02dcf7edd2e8b87e4de350b98df4822", + "address": "0x7ee78FDeA99F9F64062E06beD09A9EF6D97905D9" + }, + { + "facetName": "ERC1594SustainabilityPerformanceTargetRateFacet", + "key": "0x2c5f8a3d6e9b1f4c7a2e5d8b1f4c7a2e5d8b1f4c7a2e5d8b1f4c7a2e5d8b1f4c", + "address": "0xAF5B28274a38996423D8aCD5A14232f5e2805bF7" + }, + { + "facetName": "ERC1643SustainabilityPerformanceTargetRateFacet", + "key": "0x5f8d2a3e6c9f1d4e7a2f5c8d1e4f7c2e5d8f1e4c7d2f5e8d1f4c7e2d5f8d1f4c", + "address": "0xfC8772d3D07D21440b8d2EE14a86c7671BaC10eC" + }, + { + "facetName": "ERC1644SustainabilityPerformanceTargetRateFacet", + "key": "0x8b2f5e3d6f9c2e5d8f1e4c7d2e5f8d1f4c7e2d5f8d1f4c7e2d5f8d1f4c7e2d5f", + "address": "0xCCACc97Da57E889A959F597f2EB0a58E21fedC00" + }, + { + "facetName": "ERC20PermitSustainabilityPerformanceTargetRateFacet", + "key": "0x3bf8d35ad3c3320d95184dd4f9a0bfc2e56b151318d9d27eefa74461d24f5c61", + "address": "0xf2416a2827CA1baF5488ECe9d4C9B25Dc5A17222" + }, + { + "facetName": "ERC20VotesSustainabilityPerformanceTargetRateFacet", + "key": "0x9d7e0002a7ae9c94734d62ac85bb1cd4c333dd6c5fb308a7a2b60dd77dfa9d44", + "address": "0x693C7717D1327AD9D0c8D4D04b5832554c910FFB" + }, + { + "facetName": "ERC3643BatchSustainabilityPerformanceTargetRateFacet", + "key": "0x500c4c5bff9db733228f1df9b6e818bf8fab883422d3fbe971c036b513e983d9", + "address": "0x0518DD2cBD41974cfAA617E9Ba3c36db1a016036" + }, + { + "facetName": "ERC3643ManagementSustainabilityPerformanceTargetRateFacet", + "key": "0x324a20f20a55098c207cd0bc42498561962995b82918d6a9697320c42c5b11fa", + "address": "0x825E23c9B31CDDD413b8CeCfB3407CaB323a8B06" + }, + { + "facetName": "ERC3643OperationsSustainabilityPerformanceTargetRateFacet", + "key": "0xbe85d38775742687362efc4fc0ffed08044614079fc51bbf7b0f29e11d3ffafa", + "address": "0xC563c736524389975BcB070d41d8824711B1D2CE" + }, + { + "facetName": "ERC3643ReadSustainabilityPerformanceTargetRateFacet", + "key": "0x2fc56e8abd44d0dc70cf8876ea454caab82a906ec6333516c1feb4de9b4cb4f8", + "address": "0x4Ba3793C27b04Fb71046cA485A5Ecd125FD35087" + }, + { + "facetName": "ClearingActionsSustainabilityPerformanceTargetRateFacet", + "key": "0xae9d6d2e1d9a660994e89e185ab5a3439d2def9baa6ba47fdf854ce0a29a5033", + "address": "0x1197A77029404FfA4A2Cf13CF7244c54e74322E7" + }, + { + "facetName": "ClearingHoldCreationSustainabilityPerformanceTargetRateFacet", + "key": "0x0e59e36a2b1298d11c3612c3203c6d45cb185879383f5a22617c4f49495c070d", + "address": "0x99726551D5E724e16fe4C4CD60eeacbc8d74475c" + }, + { + "facetName": "ClearingReadSustainabilityPerformanceTargetRateFacet", + "key": "0xa188d3ee426a514ccfe03470d196ed29da48de0ae59898d9b5a30ec680515a11", + "address": "0x54F1Bc7e6A183D959f0e3017FC84075E083cdbcf" + }, + { + "facetName": "ClearingRedeemSustainabilityPerformanceTargetRateFacet", + "key": "0xc4731d62375990b9721357983c8f6acf3fdc78d7814919c187607f653b768d5d", + "address": "0x34beAb4385d33B7bEfDC4458FBDc4b49F8cC1C18" + }, + { + "facetName": "ClearingTransferSustainabilityPerformanceTargetRateFacet", + "key": "0x7e29efe8ee5285a43acddbe766fd9219266a74cb24ed3331b4e350d8e263d0c7", + "address": "0x877AA069B02235F49C23348e926C01d3A6b3b545" + }, + { + "facetName": "HoldManagementSustainabilityPerformanceTargetRateFacet", + "key": "0x4574524c203fbcc0f5b9f08bcd2b9a9d47c5a9cf3a30eeb540a93a33a8a2f834", + "address": "0x9654bCb0E2Ed53C1253F4346cc193Dda3cC791A4" + }, + { + "facetName": "HoldReadSustainabilityPerformanceTargetRateFacet", + "key": "0x8e7113391652a4d3d8feb1d90990cd06ee33dc67a640b4400f8bfb9fae4f91b2", + "address": "0x26618f4a991B31BeA76fC5EEe4D7eDb8347c7511" + }, + { + "facetName": "HoldTokenHolderSustainabilityPerformanceTargetRateFacet", + "key": "0x28ae4d4cdc1846ba348a31e222161d8343223560c1875fe3efcad8c5dd5f81e0", + "address": "0xE863ea52Aa899C7aae7DEbc26148499Da5560EF2" + }, + { + "facetName": "ExternalControlListManagementSustainabilityPerformanceTargetRateFacet", + "key": "0x2c56accbf6faf923cd323935455dac00c2ddffe08f0becdf49d515e4b4d355af", + "address": "0x03C64F4101b4cdaafB05a39D303B7FEC4674490D" + }, + { + "facetName": "ExternalKycListManagementSustainabilityPerformanceTargetRateFacet", + "key": "0x0fcfeebcf118ca3c39fbed0e2a527a866cac42bbd3fcad5f9b4f755ef97f3aa9", + "address": "0x63E5915Ae59b48a88F28CFd9EDeF34739BC2A736" + }, + { + "facetName": "ExternalPauseManagementSustainabilityPerformanceTargetRateFacet", + "key": "0x07846b678053cbd4be5d9d3929fa9af5ab76bb508a0f7957f5239302aad45bc3", + "address": "0x2226d9b982420aCB8f5f17AdE48677f6f1d9aBDC" + }, + { + "facetName": "AdjustBalancesSustainabilityPerformanceTargetRateFacet", + "key": "0xc9e1f8d7c6b5a4e3f2d1c9b8a7e6f5d4c3b2a1e9f8d7c6b5a4e3f2d1c9b8a7e6", + "address": "0x569e998f399FaE8D2387162628BFcD5174b38402" + }, + { + "facetName": "LockSustainabilityPerformanceTargetRateFacet", + "key": "0xe73c2eecf92b5b8eb7ecc89b379f70193694f2906188318c3407458267385b82", + "address": "0x035b643668c030C912CBFcebf2e2c31e246D64Be" + }, + { + "facetName": "ProceedRecipientsSustainabilityPerformanceTargetRateFacet", + "key": "0xf3e4f2e1d9c8b7a6e5f4d3c2b1a9e8f7d6c5b4a3e2f1d9c8b7a6e5f4d3c2b1a9", + "address": "0xB7Ff6338B8e875993fCDE0cda5867dd2DdB92f58" + }, + { + "facetName": "ProtectedPartitionsSustainabilityPerformanceTargetRateFacet", + "key": "0x088ec2750f42a30fde9383e74f4148ce5df963263d426deffc1d29fff61a6538", + "address": "0xa80f686e977cEeD4BBa350a40baE16F6156D6ABa" + }, + { + "facetName": "ScheduledBalanceAdjustmentsSustainabilityPerformanceTargetRateFacet", + "key": "0x1168df5bb8a348d137af6e29915c261dc82c495f72484a046ac4f750899625f4", + "address": "0x791f56553a86f8CEFC76D5D0e40C1718E1104575" + }, + { + "facetName": "ScheduledCrossOrderedTasksSustainabilityPerformanceTargetRateFacet", + "key": "0x23d3302e505d889e80b20005bf316ccd7cbbd3c547a7305d600e8f0d9bc73267", + "address": "0x0b9dBe4399f99d5F48f0BBB57F57810746c4e074" + }, + { + "facetName": "ScheduledCouponListingSustainabilityPerformanceTargetRateFacet", + "key": "0x85c0dee450a5a4657a9de39ca4ba19881b079d55d5bb64641d52f59bea709ba8", + "address": "0xA0096F91781030792B3eD4a83DC064493Cd3E4Ff" + }, + { + "facetName": "ScheduledSnapshotsSustainabilityPerformanceTargetRateFacet", + "key": "0x99a85df534e32a3b9fce8e80f0cc30d6703e578eb5c641ab2d9e95530d046b4b", + "address": "0x7D3219858E0beA9e90c8EE49a02c242dB1D07f69" + }, + { + "facetName": "SsiManagementSustainabilityPerformanceTargetRateFacet", + "key": "0x5de367269fd9e98ceb172f263a954ee471605474013e206e00340c5914046c8b", + "address": "0xcff388f44Ec407b010456B8D8cA150A01CbF516a" + }, + { + "facetName": "TransferAndLockSustainabilityPerformanceTargetRateFacet", + "key": "0x9d1e3f5a7b9c0d2e4f6a8b0c1d3e5f7a9b0c2d4e6f8a9b1c3d5e7f9a0b2c4d6e", + "address": "0xb1B30d51aC49eCd46693732f8db0F737B9E46ca4" + }, + { + "facetName": "SustainabilityPerformanceTargetRateFacet", + "key": "0xa261a7434029a925924f47ccea7fbe12af1e56efd74e8f1d8ac23bec19a27e49", + "address": "0x0048805d2fC2B15f1F172af29cafc4319618f04b" + }, + { + "facetName": "BondUSASustainabilityPerformanceTargetRateFacet", + "key": "0x8048a878c656dcf3886e69ad27a9272a4fb9499299ab5f0e1b6c99ac3b1130f8", + "address": "0xe90c1D467CFf5f712e5FDE6A27D374eA5e2B3068" + }, + { + "facetName": "BondUSAReadSustainabilityPerformanceTargetRateFacet", + "key": "0x339d458f2928ef5148317aab39e4375a27e6c531d2e5b9de2d4fb23ad0e8b504", + "address": "0xc0347a9b2eddbe35d153E0C56b4c68342D0D7349" + } + ] + } + }, + "summary": { + "totalContracts": 3, + "totalFacets": 188, + "totalConfigurations": 5, + "deploymentTime": 2661490, + "gasUsed": "431222504", + "success": true + }, + "helpers": {} +} diff --git a/packages/ats/contracts/deployments/hedera-testnet/newBlr-2026-01-09T08-40-53.json b/packages/ats/contracts/deployments/hedera-testnet/newBlr-2026-01-09T08-40-53.json new file mode 100644 index 000000000..06d47f889 --- /dev/null +++ b/packages/ats/contracts/deployments/hedera-testnet/newBlr-2026-01-09T08-40-53.json @@ -0,0 +1,2349 @@ +{ + "network": "hedera-testnet", + "timestamp": "2026-01-09T08:40:50.515Z", + "deployer": "0x97C50bb12E1C6284cF2855cdba95c5D60AEE44CF", + "infrastructure": { + "proxyAdmin": { + "address": "0xeA4a8bFFD07d6b71e5096322154679b7f28505B1", + "contractId": "0.0.7590888" + }, + "blr": { + "implementation": "0x617F8575306c07E114053DDF03eDcCd37d604e5C", + "implementationContractId": "0.0.7590889", + "proxy": "0xbb1254cFeA7901382C61815166277854286a73D5", + "proxyContractId": "0.0.7590890" + }, + "factory": { + "implementation": "0xf6cF8766056C25F13fA1a08e51f24d39095a0068", + "implementationContractId": "0.0.7591239", + "proxy": "0xca4C4aA3fAC3C1fBb374Ca5a1C08fb61970f8D86", + "proxyContractId": "0.0.7591242" + } + }, + "facets": [ + { + "name": "AccessControlFacet", + "address": "0x6B858546c53C441142f6870015F3D246C6c2818a", + "contractId": "0.0.7590892", + "key": "0x011768a41cb4fe76a26f444eec15d81a0d84e919a36336d72c6539cf41c0fcf6" + }, + { + "name": "AccessControlFixedRateFacet", + "address": "0x5f18F482Ae253b04f2Ce2725aa735eb9884639C8", + "contractId": "0.0.7590893", + "key": "0xb35ad81b5769c62538fe6a90e40db8be624645f77c1738ce582ede5da399ecb2" + }, + { + "name": "AccessControlKpiLinkedRateFacet", + "address": "0x5977BA5aDaAd6df6A46261e022AECBEC1A3a433A", + "contractId": "0.0.7590896", + "key": "0x465c95eea6723a1645e5399789cee702b19d0bcd0ad3f894270aa25488fb4ab9" + }, + { + "name": "AccessControlSustainabilityPerformanceTargetRateFacet", + "address": "0xba9739A99bEc0E59f70D5Ee1B48f48aA33e21BBF", + "contractId": "0.0.7590897", + "key": "0x9d13e61abd630355ccae4279993868d7cf3b04d4368a0fedcefe6fec3fabaa0c" + }, + { + "name": "AdjustBalancesFacet", + "address": "0x9b502948585c00AAd08558D535aC5dB16286B5Dd", + "contractId": "0.0.7590898", + "key": "0x2bbe9fb018f1e7dd12b4442154e7fdfd75aec7b0a65d07debf49de4ece5fe8b8" + }, + { + "name": "AdjustBalancesFixedRateFacet", + "address": "0x7515C5090a7ac1C281bB62DaFd7262F7114329Fd", + "contractId": "0.0.7590899", + "key": "0xa7e8f6d5c4b3a2e1f9d8c7b6a5e4f3d2c1b9a8e7f6d5c4b3a2e1f9d8c7b6a5e4" + }, + { + "name": "AdjustBalancesKpiLinkedRateFacet", + "address": "0x379042de4BA73Acad1E6Dab359Edde874dc58413", + "contractId": "0.0.7590900", + "key": "0xb8f9e7d6c5b4a3e2f1d9c8b7a6e5f4d3c2b1a9e8f7d6c5b4a3e2f1d9c8b7a6e5" + }, + { + "name": "AdjustBalancesSustainabilityPerformanceTargetRateFacet", + "address": "0xb7b3dfD9deBB50Af9111Fd90446aB02f4D61E054", + "contractId": "0.0.7590901", + "key": "0xc9e1f8d7c6b5a4e3f2d1c9b8a7e6f5d4c3b2a1e9f8d7c6b5a4e3f2d1c9b8a7e6" + }, + { + "name": "BondUSAFacet", + "address": "0x859759cAd19172aF0F7E86f5884231a9d6CE9e14", + "contractId": "0.0.7590903", + "key": "0xe6594ee8f54f346ab25268fdc7955031a6b06102355e1446353d89ab1d593de3" + }, + { + "name": "BondUSAFixedRateFacet", + "address": "0x594394e5e75f8cA0BB502D342Df544963BaF1a0b", + "contractId": "0.0.7590904", + "key": "0xd55d8787d23b78e70dada1ade45b8758f5c027e2cddf3556606c07d388ce159a" + }, + { + "name": "BondUSAKpiLinkedRateFacet", + "address": "0x3541be91dea0539Dce519AAF3378866870ddE6d9", + "contractId": "0.0.7590905", + "key": "0x99c145ff21354eb7b25cb096873143fa3d3aba98457b96bcd13f1d1f2b9bf28c" + }, + { + "name": "BondUSAReadFacet", + "address": "0x3427a45102E86de59D0e607632Bc085c4289e377", + "contractId": "0.0.7590906", + "key": "0x624866e79d4c0a78a8dc32cbce49563cdf86eba627bd05a9821dbaa1674ac231" + }, + { + "name": "BondUSAReadFixedRateFacet", + "address": "0xf282863265C10071D961C3BaA3b182764A0549fF", + "contractId": "0.0.7590907", + "key": "0xd5d703d15aa25ad6419288846269dcbba84f489f1c986be2c919f84c042b8c24" + }, + { + "name": "BondUSAReadKpiLinkedRateFacet", + "address": "0x092Ed5F65B49b6916Ec14Fa480E718509DFd8554", + "contractId": "0.0.7590909", + "key": "0xcced91a2a03bf45bd62730a7f4703ee2d762f8ebccff315c7145258265f73249" + }, + { + "name": "BondUSAReadSustainabilityPerformanceTargetRateFacet", + "address": "0x1923016FA697dD2dBaBA394294813F87CA65f999", + "contractId": "0.0.7590911", + "key": "0x339d458f2928ef5148317aab39e4375a27e6c531d2e5b9de2d4fb23ad0e8b504" + }, + { + "name": "BondUSASustainabilityPerformanceTargetRateFacet", + "address": "0x1D16f76033FB573FC7Ef80A7d298b2f376F04453", + "contractId": "0.0.7590913", + "key": "0x8048a878c656dcf3886e69ad27a9272a4fb9499299ab5f0e1b6c99ac3b1130f8" + }, + { + "name": "CapFacet", + "address": "0xa721015E81ebB3f8Ca1341aAa591D501066e09f1", + "contractId": "0.0.7590914", + "key": "0xfb3f8aac36661b5540c571d821c80dc9db7ede5ca2a4204ee562b3356f0c026b" + }, + { + "name": "CapFixedRateFacet", + "address": "0xC97098712D4C91fbB14B78C852F97012F399B346", + "contractId": "0.0.7590915", + "key": "0x288b5a4b82f38369168fd49de3e5e68c76fc0394c2e89817b70a65368ba4dcf7" + }, + { + "name": "CapKpiLinkedRateFacet", + "address": "0x9050bF79E7D9880E012057C05D889580a5De06F9", + "contractId": "0.0.7590916", + "key": "0xdc8cc0612bf886bcc1666e31c5de3392bee78451de7213b01fe78d560a804435" + }, + { + "name": "CapSustainabilityPerformanceTargetRateFacet", + "address": "0x46655BCcc44c32Eb038dF8D06818BdA6696327b5", + "contractId": "0.0.7590918", + "key": "0xa321c5301bbccd760c5aaf08286a67948cb7d49be22c17f12aa163b324a276d0" + }, + { + "name": "ClearingActionsFacet", + "address": "0xD8381F37923a6BE9938FF52E3558A5d037240833", + "contractId": "0.0.7590919", + "key": "0x5472dfc5c92ad7a8651518ea7d3854d3b6494e5bcaa19f91cd61bf93bf6f2a74" + }, + { + "name": "ClearingActionsFixedRateFacet", + "address": "0xAA3b4E2B8189e9384eA91B9262B67f26AeCb0f03", + "contractId": "0.0.7590920", + "key": "0x497fbb5ba36b9a6b791669e513c877ebfe079b61e0eb37afbd19b696266a0223" + }, + { + "name": "ClearingActionsKpiLinkedRateFacet", + "address": "0x590b672bf0d7d2aAd6973ea119143bcbBD605493", + "contractId": "0.0.7590921", + "key": "0x4960adcd566163ba9edaee816f8739f1c788cace28ad805c136644de52929faa" + }, + { + "name": "ClearingActionsSustainabilityPerformanceTargetRateFacet", + "address": "0x6b164F44DA8f5FeDbe55a471253338CfAC58E682", + "contractId": "0.0.7590923", + "key": "0xae9d6d2e1d9a660994e89e185ab5a3439d2def9baa6ba47fdf854ce0a29a5033" + }, + { + "name": "ClearingHoldCreationFacet", + "address": "0xC3224B48a81a9ec205AF8935dbdAAa326DBF01bD", + "contractId": "0.0.7590926", + "key": "0x44f99a141c434fac20d69e7511932ee344d5b37b61851976c83a5df4ca468152" + }, + { + "name": "ClearingHoldCreationFixedRateFacet", + "address": "0x6bf3eB9a1AC97D1E67f5F67d2205605Bc98EF6b4", + "contractId": "0.0.7590928", + "key": "0xf4d60b90b7a9edb9598b8c4aa2a4477e3a65750eab2cce564385f35d882a23c3" + }, + { + "name": "ClearingHoldCreationKpiLinkedRateFacet", + "address": "0xBf67FE9fe880F114c1f74b928fa0601C34B012b2", + "contractId": "0.0.7590930", + "key": "0x1ba40338a89cd18f2799a3e6a86f0be118236340eeff5a19a19a08d3d6e3d08c" + }, + { + "name": "ClearingHoldCreationSustainabilityPerformanceTargetRateFacet", + "address": "0xCA652Ac837E7324E1197dA3e66318b31DCB40D6F", + "contractId": "0.0.7590931", + "key": "0x0e59e36a2b1298d11c3612c3203c6d45cb185879383f5a22617c4f49495c070d" + }, + { + "name": "ClearingReadFacet", + "address": "0xeD3D618AEF04B77625946343071A144475A75156", + "contractId": "0.0.7590932", + "key": "0xebb2e29bdf4edaf4ca66a3f9b7735087f9d0474d56d856e53c94ef00596c0b1e" + }, + { + "name": "ClearingReadFixedRateFacet", + "address": "0x08f8506B96b22D9F37Ac2C3D1DcC1c684d2a1B3b", + "contractId": "0.0.7590934", + "key": "0xcd312e798e5b62ec98cc7c8ac3547a640f68ee74e351b73397be02dab3d5b14f" + }, + { + "name": "ClearingReadKpiLinkedRateFacet", + "address": "0xFBF71BD825b5fdA4EAb5f7cC028D5c0986563F26", + "contractId": "0.0.7590935", + "key": "0x3740ea12ff1c9c37f216ba72884079bcaabe99f51cdd9b019be5b218ba5db0e2" + }, + { + "name": "ClearingReadSustainabilityPerformanceTargetRateFacet", + "address": "0x9e6338457e9b8a18F3524ff8991Bc635236B2Af4", + "contractId": "0.0.7590936", + "key": "0xa188d3ee426a514ccfe03470d196ed29da48de0ae59898d9b5a30ec680515a11" + }, + { + "name": "ClearingRedeemFacet", + "address": "0xDFd020a782793d6a4b77710b359BDAd160D7c948", + "contractId": "0.0.7590937", + "key": "0xb341e7aa749da43976c189209de51ccdf838af9f964cd27340b914d5b2aeba97" + }, + { + "name": "ClearingRedeemFixedRateFacet", + "address": "0xf82782B7F35459a1Da9Db9B005C4bd947aa3E8B9", + "contractId": "0.0.7590939", + "key": "0xa8edf3401d5e3f8e9a45b0992984a31a2522a24ed793e5e7980f8d66508473c9" + }, + { + "name": "ClearingRedeemKpiLinkedRateFacet", + "address": "0x59F22bA95BD38C0e81Aaf20128A2b331162DC548", + "contractId": "0.0.7590941", + "key": "0xc38aaff0161104c594b7a323af3facf5beb1e304b730fcbee09f5eed74b11375" + }, + { + "name": "ClearingRedeemSustainabilityPerformanceTargetRateFacet", + "address": "0x61929fDb68816650C4789CD4B85C0ECe76ca2dad", + "contractId": "0.0.7590942", + "key": "0xc4731d62375990b9721357983c8f6acf3fdc78d7814919c187607f653b768d5d" + }, + { + "name": "ClearingTransferFacet", + "address": "0xeCc17a077a21C9eb6D2127E70fDE0Da8992f5eaA", + "contractId": "0.0.7590944", + "key": "0x7399d03db62430bec60ca2c3eacf98b1b7e2253f17593ef7a226d759442e0928" + }, + { + "name": "ClearingTransferFixedRateFacet", + "address": "0x401E2E2A222A128Fd5922649280aDa7aD969052F", + "contractId": "0.0.7590946", + "key": "0x1ba056fe3e7ef86779515a9e7f364e84af0f60eb5f4175ac6d6e6e3f4c05fffb" + }, + { + "name": "ClearingTransferKpiLinkedRateFacet", + "address": "0x4A4AAe350953AB929b5b1D23d63B3700c4E6a217", + "contractId": "0.0.7590948", + "key": "0x1b229a6d3b8a8ecba97d1e7c2c4a89c4cf71b9b5852317278f57384d728f8bde" + }, + { + "name": "ClearingTransferSustainabilityPerformanceTargetRateFacet", + "address": "0x8973576C1A70E0E37284482d13a1e103CdDd708D", + "contractId": "0.0.7590949", + "key": "0x7e29efe8ee5285a43acddbe766fd9219266a74cb24ed3331b4e350d8e263d0c7" + }, + { + "name": "ControlListFacet", + "address": "0x9860025326A6c960f34A0dcF10D368356EDFa607", + "contractId": "0.0.7590950", + "key": "0xfbb1491bfcecd95f79409bd5a4b69a4ba1e5573573372f5d2d66c11e3016414c" + }, + { + "name": "ControlListFixedRateFacet", + "address": "0x2cC3AFbd132F6b62d871fB9355DFe13be1929FA0", + "contractId": "0.0.7590951", + "key": "0x083b7e0957ebd3a0f69bf432ce05d94c1848cbdbf0e66664919c4803b14dfdf8" + }, + { + "name": "ControlListKpiLinkedRateFacet", + "address": "0x6d398d6Cc2A0B4CA74Daa728b035F90084f85949", + "contractId": "0.0.7590952", + "key": "0xaaa80b13f9a051b7f9546e92763bedfbe259f511da870cbb1133fe0e79c8eac5" + }, + { + "name": "ControlListSustainabilityPerformanceTargetRateFacet", + "address": "0x123d2247231C4F05aeb69B1046B17F7013a83f7D", + "contractId": "0.0.7590953", + "key": "0xe3fbab5a4ccf7a873a9601bf5494c43f6e4b53218ff8310ec97811471397b3cf" + }, + { + "name": "CorporateActionsFacet", + "address": "0x96d7d28D1B1Cfc1A9135ECAaBd2B9c62ba2fFA74", + "contractId": "0.0.7590954", + "key": "0x3cc74200ccfb5d585a6d170f8824979dbf1b592e0a41eef41cf6d86cf4882077" + }, + { + "name": "CorporateActionsFixedRateFacet", + "address": "0x85dDD406bA86c620F9703Dc392Bd82934159B25E", + "contractId": "0.0.7590956", + "key": "0xd2c0415cebdbb6dcaf014ce92df6bcae060743c622fd7ce954105b71954e0424" + }, + { + "name": "CorporateActionsKpiLinkedRateFacet", + "address": "0x1ad7b0b131767CD45f52E9e0724648345762a336", + "contractId": "0.0.7590957", + "key": "0xf86b1190fb42cc572ccdeac774fdf968c303079b8c5eceaeb1c9f4f9089bb6be" + }, + { + "name": "CorporateActionsSustainabilityPerformanceTargetRateFacet", + "address": "0x5B8419f2920b20554BEe66E59223bb06eDD60741", + "contractId": "0.0.7590958", + "key": "0xa4a23267cb0a22c52bd05b12e644136bc38b7ac51218a0cb3aed166697caa79e" + }, + { + "name": "DiamondCutFacet", + "address": "0xB4646321B4873e9e21A6E143d32521EAD7C1230C", + "contractId": "0.0.7590959", + "key": "" + }, + { + "name": "DiamondFacet", + "address": "0x29D17a297087Ee3be9996b9c2468EbC1b77e9CcE", + "contractId": "0.0.7590960", + "key": "0x1b5212ea37fb29e99afa2812a5d7d7e662a477424d3de1a18cc3871a2ee94d78" + }, + { + "name": "DiamondLoupeFacet", + "address": "0xbDAa49A9dFd4Aa1A27AddBE2cf90D6F00922abF2", + "contractId": "0.0.7590961", + "key": "" + }, + { + "name": "EquityUSAFacet", + "address": "0xc669321785579be6601BbD3039d6E23a6f310158", + "contractId": "0.0.7590965", + "key": "0xfe85fe0513f5a5676011f59495ae16b2b93c981c190e99e61903e5603542c810" + }, + { + "name": "ERC1410IssuerFacet", + "address": "0x0dC2DEb2fDE5Caf90Ac39f5436A249a8f6902981", + "contractId": "0.0.7590968", + "key": "0x6e82b75f32c9647cc00b4c3eabbef5a82677f3e91d5d196eb4dd6a0365941344" + }, + { + "name": "ERC1410IssuerFixedRateFacet", + "address": "0x3804280896a11C10fE41c7bB900d4f72f53f6Cb7", + "contractId": "0.0.7590971", + "key": "0xb9c76f134ffdac743e817a2726bdf9f28a48dfea1f9f54b1066e4e0de68f2a06" + }, + { + "name": "ERC1410IssuerKpiLinkedRateFacet", + "address": "0x77d3118b4f2040A4A2c84a023D5f6b7c39adc234", + "contractId": "0.0.7590972", + "key": "0x97246e7c6950bcc047f6ea198308a7f304bca9f3f13d2ce5d7fdeee9cc9e0828" + }, + { + "name": "ERC1410IssuerSustainabilityPerformanceTargetRateFacet", + "address": "0xF3529405b203Aa0B4D5D39CBA6F4361d47c58c87", + "contractId": "0.0.7590973", + "key": "0x4d5a3964d29183253487011c31ec3e09977b5eded43c8a3a222a2e53f4282f61" + }, + { + "name": "ERC1410ManagementFacet", + "address": "0xC9415758CF8F650Dc829cB85bE9BFE9AD8875E5a", + "contractId": "0.0.7590976", + "key": "0x232f8686795d3f197681faf0d8db05655e759f62d709d56b97e5d9cfff29dbf5" + }, + { + "name": "ERC1410ManagementFixedRateFacet", + "address": "0xf9430A7A1898999D149C7Ac494A1234778385f4b", + "contractId": "0.0.7590977", + "key": "0xf616851e84bfcfb3b33a8cc54c54c34e9168ba2b8d233a0b3daacee27f0266ca" + }, + { + "name": "ERC1410ManagementKpiLinkedRateFacet", + "address": "0xddFCA146223D470967BBA44d2c87b6133f8BA590", + "contractId": "0.0.7590978", + "key": "0x831449a00c9cf218fe471b13f84f7109b57ad4b1202d4ed93009ee3d53276a2f" + }, + { + "name": "ERC1410ManagementSustainabilityPerformanceTargetRateFacet", + "address": "0xc029Ad98adD6540494ABe8D7Ca8F538F899a3214", + "contractId": "0.0.7590980", + "key": "0x6768fcc73686ddd306656061b0e415208ded041927d9935de3747583559d0c5e" + }, + { + "name": "ERC1410ReadFacet", + "address": "0x85c4094CC1602F49F90c857E24305c70f6Aff831", + "contractId": "0.0.7590981", + "key": "0x5eb2734b83ea80c3eb63463a6192b30ab2526cb7a073f0abfda1a404c92ae497" + }, + { + "name": "ERC1410ReadFixedRateFacet", + "address": "0xCFf971dA6f5994aa8D7f125D341da0CCBE4136D1", + "contractId": "0.0.7590982", + "key": "0x289451d28da5d8ff4e7759db6b1c418b7871f0d6ad63bf7f75cd411f3d79686d" + }, + { + "name": "ERC1410ReadKpiLinkedRateFacet", + "address": "0x53b77AA804cEA0FE6a4222E0bAfBf6E07aF79E09", + "contractId": "0.0.7590983", + "key": "0x696d9b2b17b535f70254309692c77475c258c27dfa6853bbecc611bc350136cd" + }, + { + "name": "ERC1410ReadSustainabilityPerformanceTargetRateFacet", + "address": "0xe3BB409E0cDCf59bE1866262fD6354a1B07aDf6A", + "contractId": "0.0.7590984", + "key": "0x7c15e98edcc41b3177b8cfff7055cd57b47000fd843fce22e7ead13f07e346b6" + }, + { + "name": "ERC1410TokenHolderFacet", + "address": "0x38796e2f3f07bd948cca2edC3855060C2681a0Bb", + "contractId": "0.0.7590985", + "key": "0x0466bf860d23f1ecbc25f364735e0dc3830d236f09182599831730ddd2792caa" + }, + { + "name": "ERC1410TokenHolderFixedRateFacet", + "address": "0x94FDD4F519071216843d123E0ae49e8d262d7259", + "contractId": "0.0.7590986", + "key": "0xfd248a6ee4af07046520c6ec6f9b61a009db5407ec2f967775040cd67b66f08d" + }, + { + "name": "ERC1410TokenHolderKpiLinkedRateFacet", + "address": "0x166928078b3C16938e04039285ea054B9873dd2F", + "contractId": "0.0.7590987", + "key": "0x463e4b758e14b6cdc1dd053ae3df476d527be8131eb3b41c64b4cf8019855237" + }, + { + "name": "ERC1410TokenHolderSustainabilityPerformanceTargetRateFacet", + "address": "0xf063B9021753577fbC450631c6005Cd7C5a0Fd96", + "contractId": "0.0.7590989", + "key": "0x6e21f1ca6d12f08b0d36f08711a48500d02dcf7edd2e8b87e4de350b98df4822" + }, + { + "name": "ERC1594Facet", + "address": "0xFbE185079C4f28E646337e866Ba380AFE3b652aE", + "contractId": "0.0.7590991", + "key": "0xcb70773e8163595d8bd906e277adeb3935976ad802ee8c29face3dfb0263291f" + }, + { + "name": "ERC1594FixedRateFacet", + "address": "0x6160b4BCfB4Fb132cF6Ce6E4AC150F747Da41aa8", + "contractId": "0.0.7590992", + "key": "0x7a8f3e6d2c4b1a9e5f7d8c6b4a2e1f9d7c5b3a1e9f7d5c3b1a9e7f5d3c1b9e7f" + }, + { + "name": "ERC1594KpiLinkedRateFacet", + "address": "0x61D234AB3aEd4D0b89fc6f48bdc0EE5229e5230F", + "contractId": "0.0.7590994", + "key": "0x1b4e7a9d3f5c2e8a6d4b9f7e5c3a1d8f6e4c2a9d7f5e3c1b8f6d4e2c9a7f5d3e" + }, + { + "name": "ERC1594SustainabilityPerformanceTargetRateFacet", + "address": "0x3c84C4C3D9a5719804F2f7C8BF7fB462Ca6eDE0a", + "contractId": "0.0.7590995", + "key": "0x2c5f8a3d6e9b1f4c7a2e5d8b1f4c7a2e5d8b1f4c7a2e5d8b1f4c7a2e5d8b1f4c" + }, + { + "name": "ERC1643Facet", + "address": "0x3b11D16F4bbc8b6075bdbc605E32488c0cfF54B1", + "contractId": "0.0.7590996", + "key": "0x24543637956a3076689f171d3932b10f22d40f3785d53acebb340f37bed01625" + }, + { + "name": "ERC1643FixedRateFacet", + "address": "0x81F695DE30F3E8A714E180e8461AB25a026398B2", + "contractId": "0.0.7590999", + "key": "0x3d6e9f1c5a8b2e7f4d9c6a3e1f8d5c2a9f6e3d1c8f5e2d9c6f3e1d8c5f2d9c6f" + }, + { + "name": "ERC1643KpiLinkedRateFacet", + "address": "0x5d4062b54406a3bb2a48C6724d0d7f6E0651aBF0", + "contractId": "0.0.7591000", + "key": "0x4e7f1a2d5c8e3f6a9d2e5f8c1d4a7e2f5c8d1e4f7c2e5d8f1e4c7d2f5e8d1f4e" + }, + { + "name": "ERC1643SustainabilityPerformanceTargetRateFacet", + "address": "0xD84b125b01731Da2b60917D80540041fc6c0743E", + "contractId": "0.0.7591001", + "key": "0x5f8d2a3e6c9f1d4e7a2f5c8d1e4f7c2e5d8f1e4c7d2f5e8d1f4c7e2d5f8d1f4c" + }, + { + "name": "ERC1644Facet", + "address": "0x0B8Dc20320C4a1b63Ded576bF811a88666491A09", + "contractId": "0.0.7591003", + "key": "0xf1da2ed271d62ba0b6597874c96fb6ed7d929e5ec679f4ad8c2c516c72f6736d" + }, + { + "name": "ERC1644FixedRateFacet", + "address": "0x797117eAFCd83F21F1c365607180C9bFb24f3B03", + "contractId": "0.0.7591004", + "key": "0x6f9e3d1c8a5f2e9d6c3f1e8d5c2f9e6d3f1e8c5f2d9e6c3f1d8e5c2f9d6e3f1d" + }, + { + "name": "ERC1644KpiLinkedRateFacet", + "address": "0x123d4306e98A232C42f467f70645AAA4A5CFc0B5", + "contractId": "0.0.7591005", + "key": "0x7a1f4e2d5c8f3e6d9c2f5e8d1f4c7e2d5f8c1f4e7d2e5f8c1e4d7c2f5d8e1f4c" + }, + { + "name": "ERC1644SustainabilityPerformanceTargetRateFacet", + "address": "0x28f08613Cdf66E6BF362e75d38F6067722670e8C", + "contractId": "0.0.7591006", + "key": "0x8b2f5e3d6f9c2e5d8f1e4c7d2e5f8d1f4c7e2d5f8d1f4c7e2d5f8d1f4c7e2d5f" + }, + { + "name": "ERC20Facet", + "address": "0x4499f0297E6aeA3e97838504F3dfF33c2C258e0B", + "contractId": "0.0.7591007", + "key": "0x064c883089ba1a596d9146c7aaa73c19ef8825f374c67a9538787c3d12e68dc5" + }, + { + "name": "ERC20FixedRateFacet", + "address": "0x07D31754F8EA7E03ec664c250c3557104cAA5fdd", + "contractId": "0.0.7591009", + "key": "0x3e4f428a95dadb9b2d5121c4067c845270879ee5e180e4c4d03ad40f00160376" + }, + { + "name": "ERC20KpiLinkedRateFacet", + "address": "0xBfd24915cE1a7F41807E5c1951af7052b51BA4Dd", + "contractId": "0.0.7591010", + "key": "0xe4565636726032d04f6d265d3ee61c2f046ea49ecb39f4ca68dd4f65713e9620" + }, + { + "name": "ERC20PermitFacet", + "address": "0x129B4245D6C7E8cfA13308f794c2275158593cFC", + "contractId": "0.0.7591011", + "key": "0xef05f0313623d32145212ed45620c8b2c8c294b3d6955cf26f3d1b0569fbc1fa" + }, + { + "name": "ERC20PermitFixedRateFacet", + "address": "0x01b70b0363F357E6d891Ea178af2622C0A5a5cEB", + "contractId": "0.0.7591012", + "key": "0xc85b8a95de0375d3b552d368932ecaeb9fe85d470eb1e89bc29040cb35d168a3" + }, + { + "name": "ERC20PermitKpiLinkedRateFacet", + "address": "0x51E5ac371076BF207c8FFbB6F34225F71B0ab10C", + "contractId": "0.0.7591013", + "key": "0x468437a5a7a128b245fb2c3ac08cf17e5f2a6983dece41309b58fffa1fca80a9" + }, + { + "name": "ERC20PermitSustainabilityPerformanceTargetRateFacet", + "address": "0x6174626dB7BEf0b1FcA2c560c230D8679eeb60Ce", + "contractId": "0.0.7591014", + "key": "0x3bf8d35ad3c3320d95184dd4f9a0bfc2e56b151318d9d27eefa74461d24f5c61" + }, + { + "name": "ERC20SustainabilityPerformanceTargetRateFacet", + "address": "0x55Ad66ccF60E8e7349565E1153C91eFAA821ab0C", + "contractId": "0.0.7591015", + "key": "0x002a101a46899eecb6af6a76839f76be301e6292a6a5d3eb7a1bae4a0d3574ee" + }, + { + "name": "ERC20VotesFacet", + "address": "0xda90323d002829a5Da5E4d1b3C53Bbfa992268Bf", + "contractId": "0.0.7591017", + "key": "0x5cbfbaa435e19a43530a00ac685c9b5252862a94af2053667ded44642a0d9f4c" + }, + { + "name": "ERC20VotesFixedRateFacet", + "address": "0x9809107EaE1578Cbe343db82550edE92A528B77F", + "contractId": "0.0.7591019", + "key": "0xce2bc140ce5298990432f0332c33ccaa813a89e3bc3c0589eb30eabe005d2742" + }, + { + "name": "ERC20VotesKpiLinkedRateFacet", + "address": "0x9F3225e9490cc1DA2b6F0A5908DD607Ce63829BB", + "contractId": "0.0.7591020", + "key": "0x9d720cb6c08dff4ea63b2b4f3908fa551321fdc478de6b46a67ba5ecb46f82fc" + }, + { + "name": "ERC20VotesSustainabilityPerformanceTargetRateFacet", + "address": "0xD44848e3B3F324A4B0D7Af497eA89996254F00aF", + "contractId": "0.0.7591021", + "key": "0x9d7e0002a7ae9c94734d62ac85bb1cd4c333dd6c5fb308a7a2b60dd77dfa9d44" + }, + { + "name": "ERC3643BatchFacet", + "address": "0xe40b7819B7A93E7Aa2D8D056153F1A679D54e64d", + "contractId": "0.0.7591024", + "key": "0x00332311d9f0c311b31b87399043a90feb10341fcbb4d7f4ed6e3c0072a3c392" + }, + { + "name": "ERC3643BatchFixedRateFacet", + "address": "0x98db44B69462c38E332590f8C5fFD8Cee5c3882c", + "contractId": "0.0.7591025", + "key": "0x3563ac36f573b2e288846d3437686b6a5137a7c9b5cbcd027816db63e07d4138" + }, + { + "name": "ERC3643BatchKpiLinkedRateFacet", + "address": "0xD7a94983B10bB5F303651AbCea4E6fB9EC6e3395", + "contractId": "0.0.7591026", + "key": "0xdf3ace3e8d3a434ee6c69da03060d81e1c8c217c16fad43a2819c0bc545253ae" + }, + { + "name": "ERC3643BatchSustainabilityPerformanceTargetRateFacet", + "address": "0x42a34CFCB93756a79dEBB7690c1d12a4E7a1Ad88", + "contractId": "0.0.7591028", + "key": "0x500c4c5bff9db733228f1df9b6e818bf8fab883422d3fbe971c036b513e983d9" + }, + { + "name": "ERC3643ManagementFacet", + "address": "0xe48FCACf8a1d1873c3bbDF28B1877BCEe53763C0", + "contractId": "0.0.7591030", + "key": "0xae7b7d0da6ac02e802a8d85aa821dd5cb84e8448836471680f744f64b678a073" + }, + { + "name": "ERC3643ManagementFixedRateFacet", + "address": "0x504bf13670Ac96Be091632596bD6fB29fDC2F26d", + "contractId": "0.0.7591032", + "key": "0xb82ec3e8b1d44871bbfe25257f4e57b7d9778bc578af2f0ce9ef218f6b897797" + }, + { + "name": "ERC3643ManagementKpiLinkedRateFacet", + "address": "0x3e2FFdC188Bd8108d3a1dC1742b0585c82568FB6", + "contractId": "0.0.7591034", + "key": "0x649facd691e27202b46bb9e328ca96c6f6dc0aeefdd6cfc15707ee162b7d5103" + }, + { + "name": "ERC3643ManagementSustainabilityPerformanceTargetRateFacet", + "address": "0x037D4388384B38C7aB1DD68Ef35fFe2a58C92Ecb", + "contractId": "0.0.7591035", + "key": "0x324a20f20a55098c207cd0bc42498561962995b82918d6a9697320c42c5b11fa" + }, + { + "name": "ERC3643OperationsFacet", + "address": "0xFCad555fDFB51A5eCB9282F7815DD7a68Cee84D1", + "contractId": "0.0.7591037", + "key": "0xe30b6b8e9e62fb8f017c940c7ffac12709f7ef6ae90beac5570fab25c7384e9c" + }, + { + "name": "ERC3643OperationsFixedRateFacet", + "address": "0x3C29386784DDa3f8083F63805061A0053a546157", + "contractId": "0.0.7591038", + "key": "0x6524c4b11c24bcfff0472462572cdfbe5c671cad2df1ac54402e8a7b4dc3ee02" + }, + { + "name": "ERC3643OperationsKpiLinkedRateFacet", + "address": "0x112c59946F76781E3b50b1F58745CDB516148B88", + "contractId": "0.0.7591040", + "key": "0x87b7a50a7578f2499b459e665b6b7b809ac635280a2157d21fc5de0fc4b54715" + }, + { + "name": "ERC3643OperationsSustainabilityPerformanceTargetRateFacet", + "address": "0x15c81CC2E32fAd2c2C605e7e1c44Cf52A59D414e", + "contractId": "0.0.7591041", + "key": "0xbe85d38775742687362efc4fc0ffed08044614079fc51bbf7b0f29e11d3ffafa" + }, + { + "name": "ERC3643ReadFacet", + "address": "0x8efF1BCA4B29E861a0B331Da98aB051C294025ce", + "contractId": "0.0.7591042", + "key": "0x7743c4e9ff26ef34c3c482d2c12dabe076035eb44bf1c736722f04c33c20ef6a" + }, + { + "name": "ERC3643ReadFixedRateFacet", + "address": "0xD688F1452B2e537F167CF09492F43F34FcA5b1eE", + "contractId": "0.0.7591044", + "key": "0x53569c2059b40a4ccb6382b2180607da114ff92bfa263d7489ec7face7c4cc1f" + }, + { + "name": "ERC3643ReadKpiLinkedRateFacet", + "address": "0xf377C9613B80d661CF4eCf153fAbFdabC6C62a80", + "contractId": "0.0.7591045", + "key": "0x68ba78621a8627653774f3b9800b77ac34bd334ecc2dc4d933f9e30d6197194f" + }, + { + "name": "ERC3643ReadSustainabilityPerformanceTargetRateFacet", + "address": "0xa005997A28670560f335cAa1Ce0F8210aCE6b1C7", + "contractId": "0.0.7591046", + "key": "0x2fc56e8abd44d0dc70cf8876ea454caab82a906ec6333516c1feb4de9b4cb4f8" + }, + { + "name": "ExternalControlListManagementFacet", + "address": "0x7F2e59fbD2eD70D4A5776789458aE58A03B69D02", + "contractId": "0.0.7591047", + "key": "0x490196911bc65200514fb4568861a36670854901dffa91bc27577664fdace575" + }, + { + "name": "ExternalControlListManagementFixedRateFacet", + "address": "0xE0E9024Ec542e8AFafB55e8966eBD531E96bB8e1", + "contractId": "0.0.7591048", + "key": "0xdb213fa4fc549f5bc27fc79e6094fe6a26e303e8eabc8a86a8de7bb307d570d8" + }, + { + "name": "ExternalControlListManagementKpiLinkedRateFacet", + "address": "0x7f1618aF9f108BF7520143a7eba99F8A2231A832", + "contractId": "0.0.7591049", + "key": "0x9ecec5a17142ae1072721e064f5e9a3f0795a2bea57673f40a9440b8adec0052" + }, + { + "name": "ExternalControlListManagementSustainabilityPerformanceTargetRateFacet", + "address": "0x159c88787a0Ed2B5082FED5De5af120E5FE21606", + "contractId": "0.0.7591051", + "key": "0x2c56accbf6faf923cd323935455dac00c2ddffe08f0becdf49d515e4b4d355af" + }, + { + "name": "ExternalKycListManagementFacet", + "address": "0xF29eFB1f632c3f4445FdE450717aDB8FA5364365", + "contractId": "0.0.7591053", + "key": "0x32f05e55195d945105aff8ac4b041d4680824578bd72c6a34e4aa906a59237f1" + }, + { + "name": "ExternalKycListManagementFixedRateFacet", + "address": "0xC448B00BF892cdF84cff092ea0d41f016a504A47", + "contractId": "0.0.7591054", + "key": "0x4f9cf8c8583a46a60ec88a37a07f91d915dba024a57bdb729a4805603f5c40b2" + }, + { + "name": "ExternalKycListManagementKpiLinkedRateFacet", + "address": "0x2309EdaE6E4CE23C110C45CEE0AF3D9eb6027299", + "contractId": "0.0.7591056", + "key": "0xc15c973cec2d75a95d94522af2dc05c535be214a6cce368887f7e7d3ead3a491" + }, + { + "name": "ExternalKycListManagementSustainabilityPerformanceTargetRateFacet", + "address": "0x0cD375Ac28F1eF7a0eD51375a23CC75AD6D55eA8", + "contractId": "0.0.7591058", + "key": "0x0fcfeebcf118ca3c39fbed0e2a527a866cac42bbd3fcad5f9b4f755ef97f3aa9" + }, + { + "name": "ExternalPauseManagementFacet", + "address": "0xfca24188706Cab9aAeD4D7f9F0cb9DF24673a23a", + "contractId": "0.0.7591059", + "key": "0x158025f9e40c5d145e7915a14d5e97459728d98c715d8329359e305df737ee3c" + }, + { + "name": "ExternalPauseManagementFixedRateFacet", + "address": "0x3eA0cCC64dF4730cfC99170bAEc667108AB56cCB", + "contractId": "0.0.7591062", + "key": "0x752307e5e93ea6e9b979833cf52e6043f71fd4b983ec32aa685f9b160594e326" + }, + { + "name": "ExternalPauseManagementKpiLinkedRateFacet", + "address": "0x3709Ba73983180d63f805818A464c289a827508F", + "contractId": "0.0.7591064", + "key": "0x549d7aab8deeb4a493aa9765937da4290840d4a6fe04399ef4bb818694d9aee4" + }, + { + "name": "ExternalPauseManagementSustainabilityPerformanceTargetRateFacet", + "address": "0x5d65cA79B09678202eb0b8617c08ae7A79f2c20B", + "contractId": "0.0.7591066", + "key": "0x07846b678053cbd4be5d9d3929fa9af5ab76bb508a0f7957f5239302aad45bc3" + }, + { + "name": "FixedRateFacet", + "address": "0xcD54CbA2bc6B1C26E42f0F2Cc94d75336CFD9dea", + "contractId": "0.0.7591067", + "key": "0x2871e1c37f7423765d88b16528db7e80ad8e2bae5ab5d55e26659840c1d6b504" + }, + { + "name": "FreezeFacet", + "address": "0x2b6DDe4991e4e9F5c37ce0b1B95875b8Dcc27898", + "contractId": "0.0.7591068", + "key": "0x49f765e7155d979a148049c2a0ebed5e028b11799061897a255f99314f0bd3f1" + }, + { + "name": "FreezeFixedRateFacet", + "address": "0x4D4d42bDa28023c7cba0d6a60641c635B7C2bad8", + "contractId": "0.0.7591069", + "key": "0xad6f49f17db4659e78d7c82e5414ef50b6bfddf3f3e15adc3d0a0e958f696841" + }, + { + "name": "FreezeKpiLinkedRateFacet", + "address": "0xB59FCf6478eE022F0fdC353a173bEF0D01B62B2B", + "contractId": "0.0.7591071", + "key": "0xb03614fe7a4412f420f88bc18fc39ab43459dbfdbbdbd0a8e109356b0928272e" + }, + { + "name": "FreezeSustainabilityPerformanceTargetRateFacet", + "address": "0xED7F9682647Cd59A93e81587dA750D348bE47aB5", + "contractId": "0.0.7591072", + "key": "0x25ca5cbe52a82389e142792fdab2ffc58f224f2628f9a92a3f717134cbe229e4" + }, + { + "name": "HoldManagementFacet", + "address": "0x25bC6cB958236029bb0061E68CF13a8ae0E4a5F0", + "contractId": "0.0.7591074", + "key": "0x6c7216c5c52bc8f5019fc2fb333eb5e518e647fd82c807ed7c2a1fe4a03a3860" + }, + { + "name": "HoldManagementFixedRateFacet", + "address": "0x6B1b13670a64705AcEcc2790DE491Eb52B5dd743", + "contractId": "0.0.7591075", + "key": "0xed113dc152639988cc04869ce8c061c4a3350fe3826e16fc37960453a8d20b50" + }, + { + "name": "HoldManagementKpiLinkedRateFacet", + "address": "0x8b37C2909286CEd741Ffa9F9A706262Caf07Bb28", + "contractId": "0.0.7591077", + "key": "0xed86feb6fdd55e6a056bda1a5b7149c2d0d6d7d024625b67aa2c567ba0ef2b9e" + }, + { + "name": "HoldManagementSustainabilityPerformanceTargetRateFacet", + "address": "0x40C98A1878661e07dC476d57087537d0943EE9aD", + "contractId": "0.0.7591078", + "key": "0x4574524c203fbcc0f5b9f08bcd2b9a9d47c5a9cf3a30eeb540a93a33a8a2f834" + }, + { + "name": "HoldReadFacet", + "address": "0xb853cE1D8145696133B2bA052D29fE61A1E22726", + "contractId": "0.0.7591079", + "key": "0xd8a2714462c01975a075ccd4be2588934afd8074afef746fac089b757b803851" + }, + { + "name": "HoldReadFixedRateFacet", + "address": "0xAe47786E46CDe512F696354570cd032C400C06EC", + "contractId": "0.0.7591081", + "key": "0xcf1b5b7fa2ca417ea3b952a93a6157f237fce01f4944d27160e5101f05335e52" + }, + { + "name": "HoldReadKpiLinkedRateFacet", + "address": "0x79717644E5CED3aF756c8C180Ef3e9013B0A0739", + "contractId": "0.0.7591082", + "key": "0x6b896f9725e5d4f4b5f8cff875e71b5f3284000a933f6ab32c01cdd5f71306d6" + }, + { + "name": "HoldReadSustainabilityPerformanceTargetRateFacet", + "address": "0x0A6B4ecf82e7450FB11336834D6220f0D17290F1", + "contractId": "0.0.7591084", + "key": "0x8e7113391652a4d3d8feb1d90990cd06ee33dc67a640b4400f8bfb9fae4f91b2" + }, + { + "name": "HoldTokenHolderFacet", + "address": "0xa8215EE098f49Fb4eFA3711f8Bc7a42a42315CE6", + "contractId": "0.0.7591085", + "key": "0x87b17a3ce9a86872f21469d26f005543a22ef5729998559f4ad433d5c4253f3e" + }, + { + "name": "HoldTokenHolderFixedRateFacet", + "address": "0xDA77A80a7507052f8911eB39d79fe0352720D059", + "contractId": "0.0.7591086", + "key": "0x0d354aad4576c421c121516a105362711db178c6f0d6e0159d68d9f3ebbda486" + }, + { + "name": "HoldTokenHolderKpiLinkedRateFacet", + "address": "0x341feEc8EC4f484e123D15E14D48c26C6f000ABc", + "contractId": "0.0.7591087", + "key": "0x09f3820ce986997421b684b2482b6d982f31b5ed27a0d72e2aece5ffb3c8fd39" + }, + { + "name": "HoldTokenHolderSustainabilityPerformanceTargetRateFacet", + "address": "0xf3D42BAeDF16b787843D5Df50185E3b4372359d1", + "contractId": "0.0.7591089", + "key": "0x28ae4d4cdc1846ba348a31e222161d8343223560c1875fe3efcad8c5dd5f81e0" + }, + { + "name": "KpiLinkedRateFacet", + "address": "0x6a688cb96d610bb4d3051fE8CE27CdD7036daB31", + "contractId": "0.0.7591090", + "key": "0x92999bd0329d03e46274ce7743ebe0060df95286df4fa7b354937b7d21757d22" + }, + { + "name": "KpisSustainabilityPerformanceTargetRateFacet", + "address": "0x70Cab249054E1aD4D206BC5Aa2e883a8F38FE8CA", + "contractId": "0.0.7591092", + "key": "" + }, + { + "name": "KycFacet", + "address": "0xdfEC98Bd972Ec4EbA966D73c520045Ca7622cA20", + "contractId": "0.0.7591093", + "key": "0xf516a0f6b4726244ae916c590cd26c2b593d7d448e46e43714fb9f9435c46e32" + }, + { + "name": "KycFixedRateFacet", + "address": "0xF4B9e32BAe7e5f9C92806BDD6B358A533cDd1bA4", + "contractId": "0.0.7591094", + "key": "0x76145b42d3591928a90298dbd705c8cdb33be9f5eee50f649fb58ed3f36b9f04" + }, + { + "name": "KycKpiLinkedRateFacet", + "address": "0x508433F37d70Cf728187918CEE516509125a5EAF", + "contractId": "0.0.7591095", + "key": "0x9cf03144d37b7b92d5b438e1f037a64ebdc48c2891bc4b475a15a1cf833574d0" + }, + { + "name": "KycSustainabilityPerformanceTargetRateFacet", + "address": "0xE5d984AC5ABD21f2AC49B1bDB79fed7110715F7b", + "contractId": "0.0.7591096", + "key": "0x1cb818916342973b46841d2ca9543c702bf6380fb0fc179f356139aa142379c3" + }, + { + "name": "LockFacet", + "address": "0x191147c58f09298bE39778CFa867fCA084E536CA", + "contractId": "0.0.7591098", + "key": "0xf1364345b3db5ebe5808f2d2d2aaecb9cdb4fddacad1534033060ebc886fc1e9" + }, + { + "name": "LockFixedRateFacet", + "address": "0xb39CFE0Db5b4782a5C4cC7002352091ac3Adc719", + "contractId": "0.0.7591099", + "key": "0x053d181bbb93fc7807aafeac901706f74ec5767053695d2b769bf0fdcf065e4d" + }, + { + "name": "LockKpiLinkedRateFacet", + "address": "0x0b30812F9d9cad01c0Ddf83B3AB673c8a8a5Fd1C", + "contractId": "0.0.7591101", + "key": "0x04caf3f62f31b8b1edd96c39948d89098fd83c1a1b5b76aa39927cf7ad8e9d42" + }, + { + "name": "LockSustainabilityPerformanceTargetRateFacet", + "address": "0xdE780AD9Bf2CBEf7Ad7651ea87838112a6F9A236", + "contractId": "0.0.7591103", + "key": "0xe73c2eecf92b5b8eb7ecc89b379f70193694f2906188318c3407458267385b82" + }, + { + "name": "PauseFacet", + "address": "0x7bE5f6aD2B652Ba5C639a5052dDfe79Dfa529d14", + "contractId": "0.0.7591105", + "key": "0x9429fd9ef38f89f41bd9ec33fd5c94b287ed1c27a98938da43835ac761b2f92c" + }, + { + "name": "PauseFixedRateFacet", + "address": "0x11262cc0913A59562d8322B994dFCF22Eea1818D", + "contractId": "0.0.7591106", + "key": "0x9fd7fc8200742d120881c0cf0a0541bae13e372519d986a5169b23b82ea06f12" + }, + { + "name": "PauseKpiLinkedRateFacet", + "address": "0xea48D3B8d399fb90aA7Ecf70420479D133813b1F", + "contractId": "0.0.7591107", + "key": "0x77ff7dc4f2d4a0cb28f09307895b94478d6655e7a545222f97b753a6c90a8f71" + }, + { + "name": "PauseSustainabilityPerformanceTargetRateFacet", + "address": "0x2CA4B9F67E762A2a0dF93A4b1bC514e5E6043267", + "contractId": "0.0.7591108", + "key": "0xa16c7f2d6b5ab7f05dd30bd562ac9f3005fe21e3b2bde131733e37c0d42046ee" + }, + { + "name": "ProceedRecipientsFacet", + "address": "0xcD7d18a54cbbB332B98EBdC2f871a86899519f91", + "contractId": "0.0.7591109", + "key": "0x87f4b676bf89cd24a01a78fd8e7fb2102c2f6d034be73d16402f7297e0ae625b" + }, + { + "name": "ProceedRecipientsFixedRateFacet", + "address": "0x72747B5Ff207433C0995A7634f0efdD469bAfDDc", + "contractId": "0.0.7591110", + "key": "0xd1f2e9d8c7b6a5e4f3d2c1b9a8e7f6d5c4b3a2e1f9d8c7b6a5e4f3d2c1b9a8e7" + }, + { + "name": "ProceedRecipientsKpiLinkedRateFacet", + "address": "0x6083196470f54b6E4516259ABA9Aa45D413f73a7", + "contractId": "0.0.7591111", + "key": "0xe2f3e1d9c8b7a6e5f4d3c2b1a9e8f7d6c5b4a3e2f1d9c8b7a6e5f4d3c2b1a9e8" + }, + { + "name": "ProceedRecipientsSustainabilityPerformanceTargetRateFacet", + "address": "0xC3a1538EB62Cf544813bd5cEe080903A963bDf1b", + "contractId": "0.0.7591112", + "key": "0xf3e4f2e1d9c8b7a6e5f4d3c2b1a9e8f7d6c5b4a3e2f1d9c8b7a6e5f4d3c2b1a9" + }, + { + "name": "ProtectedPartitionsFacet", + "address": "0xd837085bCEBFf074B6E2319cF54316A3A47AC08b", + "contractId": "0.0.7591113", + "key": "0x6d65d2938c05a4d952aff0845c1baa5bea04d4544db74f8b3b26004d1d58d58f" + }, + { + "name": "ProtectedPartitionsFixedRateFacet", + "address": "0xd9cD83c8c9f90C5E81C9f7e9170827cF8F9121f6", + "contractId": "0.0.7591117", + "key": "0x1f8166e21922daee7192ddd5f8a1ce657013d69d412a4e4f5848ab75f1ca8db3" + }, + { + "name": "ProtectedPartitionsKpiLinkedRateFacet", + "address": "0x9A50708f390bbcB107c1483073F525F1a254B966", + "contractId": "0.0.7591118", + "key": "0x665aad7ee148905a0af716acbc6abd8f408eadce853caf3f84528a9810ffc436" + }, + { + "name": "ProtectedPartitionsSustainabilityPerformanceTargetRateFacet", + "address": "0x002434E63FB979995B6Ca5B8E97e33BEeadfa169", + "contractId": "0.0.7591119", + "key": "0x088ec2750f42a30fde9383e74f4148ce5df963263d426deffc1d29fff61a6538" + }, + { + "name": "ScheduledBalanceAdjustmentsFacet", + "address": "0x901e3c7d5774BfE789335A7B494ecd786529efcB", + "contractId": "0.0.7591120", + "key": "0xc418e67a48260d700e5f85863ad6fa6593206a4385728f8baba1572d631535e0" + }, + { + "name": "ScheduledBalanceAdjustmentsFixedRateFacet", + "address": "0xA6e5b4d40173067ADadb0C560C93f66fBfB3A2fE", + "contractId": "0.0.7591122", + "key": "0xb3336a1ececdcd807fd6e81cc57e9392c75bf3fd303a2f5df0b11c0dda87ce7f" + }, + { + "name": "ScheduledBalanceAdjustmentsKpiLinkedRateFacet", + "address": "0x6E4Aad35A1Ba1Ce48A76f10BAC1bf52883A6d90B", + "contractId": "0.0.7591124", + "key": "0x3da33aed4e04baa1b9c39bd96d0bc7be51ecaa1468eff7f632c29fb134644cb4" + }, + { + "name": "ScheduledBalanceAdjustmentsSustainabilityPerformanceTargetRateFacet", + "address": "0x8857166d612Fc06fF4f8fA16be1320598b0F19Cf", + "contractId": "0.0.7591126", + "key": "0x1168df5bb8a348d137af6e29915c261dc82c495f72484a046ac4f750899625f4" + }, + { + "name": "ScheduledCouponListingFacet", + "address": "0x46c10911ADA6F69F453d6D9c30C17d25aAB7F48c", + "contractId": "0.0.7591127", + "key": "0x6cc7645ae5bcd122875ce8bd150bd28dda6374546c4c2421e5ae4fdeedb3ab30" + }, + { + "name": "ScheduledCouponListingFixedRateFacet", + "address": "0x1CE892806Ba0661aBD87C899788C76949DAfBd26", + "contractId": "0.0.7591128", + "key": "0x9c249eccb68ce7eae5f58a9b4fbe1f3b6a6f2a644b36c3f1b3559077b4f4e266" + }, + { + "name": "ScheduledCouponListingKpiLinkedRateFacet", + "address": "0xe8B3217796a5952B62501F3539d4c381Cb90f87E", + "contractId": "0.0.7591131", + "key": "0x9f42d2f2ae6efad6d2acf0399ec9e5a1bed9e41c68a86b58f1de78da4fe3c598" + }, + { + "name": "ScheduledCouponListingSustainabilityPerformanceTargetRateFacet", + "address": "0x8650509dEa4b8CCf7320De12abc79279A3F5314F", + "contractId": "0.0.7591133", + "key": "0x85c0dee450a5a4657a9de39ca4ba19881b079d55d5bb64641d52f59bea709ba8" + }, + { + "name": "ScheduledCrossOrderedTasksFacet", + "address": "0x9Da0F996bB226399091Ce4A84f7a930e6d342f6F", + "contractId": "0.0.7591135", + "key": "0xa4934195ab83f1497ce5fc99b68d0f41694716bcfba5f232aa6c8e0d4d504f08" + }, + { + "name": "ScheduledCrossOrderedTasksFixedRateFacet", + "address": "0x2c10C3F99a556AFe22326f0316F812E60D5332d8", + "contractId": "0.0.7591136", + "key": "0x1312a5fa6cd5c7128015b199c47eacbf1636ef5cf437c0ee84c619dfbd372ca0" + }, + { + "name": "ScheduledCrossOrderedTasksKpiLinkedRateFacet", + "address": "0x7BA48bBbaC4c882e1B7DB2Ea589D33F35846d718", + "contractId": "0.0.7591139", + "key": "0x04d20e52e58dbadedfcf6c373a826fc5f7c665fd6caf67c8a65a9e777a8b70ec" + }, + { + "name": "ScheduledCrossOrderedTasksSustainabilityPerformanceTargetRateFacet", + "address": "0x2b93A28248FEe250cbBB00F28Ecfc22E2D27dECD", + "contractId": "0.0.7591141", + "key": "0x23d3302e505d889e80b20005bf316ccd7cbbd3c547a7305d600e8f0d9bc73267" + }, + { + "name": "ScheduledSnapshotsFacet", + "address": "0xE080f7983046516D79A34bfC83E86B195C48702f", + "contractId": "0.0.7591142", + "key": "0x100f681e33d02a1124c2c05a537a1229eca89767c5e6e8720066ca74bfb85793" + }, + { + "name": "ScheduledSnapshotsFixedRateFacet", + "address": "0xC95080cBf6cfdEa3863ac955eDAe0E4Ca380DbD3", + "contractId": "0.0.7591146", + "key": "0xe3f0d8c05423e6bf8dc42fb776a1ce265739fc66f9b501077b207a0c2a56cab6" + }, + { + "name": "ScheduledSnapshotsKpiLinkedRateFacet", + "address": "0xB65E47ec24D31E2CEdcE07bAFb6fe70c979B934c", + "contractId": "0.0.7591150", + "key": "0xbfb6dd5a6beac6604a320b8363bc0da4093ba327dd037970ad82d422b0d88526" + }, + { + "name": "ScheduledSnapshotsSustainabilityPerformanceTargetRateFacet", + "address": "0xbc12eB96669519575452fAe2172272FBc682656c", + "contractId": "0.0.7591152", + "key": "0x99a85df534e32a3b9fce8e80f0cc30d6703e578eb5c641ab2d9e95530d046b4b" + }, + { + "name": "SnapshotsFacet", + "address": "0x15465550D2A9350534959237B418c17a419e765d", + "contractId": "0.0.7591153", + "key": "0x9a3fc46d83536ef6b87eb4fec37302bfd1a7c18e81ea2da853b911b44cf5b0cf" + }, + { + "name": "SnapshotsFixedRateFacet", + "address": "0x133559AE4456986b5FD793dDCF1C159180433d8a", + "contractId": "0.0.7591154", + "key": "0xf9b2659fdf4231d426bc34cef93a8b3f42e5cfaf762f65dbf6537ab3e5ee8348" + }, + { + "name": "SnapshotsKpiLinkedRateFacet", + "address": "0x0884836cd508D8208EE628BC09b994baf21429D3", + "contractId": "0.0.7591156", + "key": "0x9c0a9b3a98c7e535e4b1a0749f01f63ea94b600fbee8df56d7c18a1f3043ee20" + }, + { + "name": "SnapshotsSustainabilityPerformanceTargetRateFacet", + "address": "0x10124745dE1C78D7b86043EDddcF7187A2374c24", + "contractId": "0.0.7591158", + "key": "0xbcc6255960c1cbe69dae32f7db730d14a35fdb81d91cc7e637e5af4d229bcbbe" + }, + { + "name": "SsiManagementFacet", + "address": "0x14400fe0df12413b5afB3858C670c82E87C39Bd4", + "contractId": "0.0.7591160", + "key": "0x77c35dccfcdc80370e925aae86871ef8bc71db0b8e082c073cda906e89bb610e" + }, + { + "name": "SsiManagementFixedRateFacet", + "address": "0xdA026b991f307e4733021622720345CF06Fd4e54", + "contractId": "0.0.7591162", + "key": "0xd3c3eb4fde853b08d2509769f85fbcc3147edd847e1e8da89c805628293effb2" + }, + { + "name": "SsiManagementKpiLinkedRateFacet", + "address": "0x1eD6e33ae690086096afddF2217Cb879d48e5d05", + "contractId": "0.0.7591163", + "key": "0xac0a01362676a7a1370879903993e04310cb7a3b60fc327072dcf7a00ce50e5a" + }, + { + "name": "SsiManagementSustainabilityPerformanceTargetRateFacet", + "address": "0x34eC836Bb38B1Ae66e3e97D33c0A658771b1392a", + "contractId": "0.0.7591166", + "key": "0x5de367269fd9e98ceb172f263a954ee471605474013e206e00340c5914046c8b" + }, + { + "name": "SustainabilityPerformanceTargetRateFacet", + "address": "0xe850afa94cF270A055e591C370250402Dd20A3eB", + "contractId": "0.0.7591171", + "key": "0xa261a7434029a925924f47ccea7fbe12af1e56efd74e8f1d8ac23bec19a27e49" + }, + { + "name": "TransferAndLockFacet", + "address": "0x00D128bb580553b13580A33bEe6EC018aB3AF1F0", + "contractId": "0.0.7591174", + "key": "0xd9b300e6bf7a143b8fd8cf1d4ab050e691c862bf0f57a7d49cc08c60efe68d08" + }, + { + "name": "TransferAndLockFixedRateFacet", + "address": "0x4AE6BBA3dd1f47D60efa26df7c9ffA25B6cd8835", + "contractId": "0.0.7591176", + "key": "0x8c3d5e9f2a6b1c4d7e8f9a2b3c4d5e6f7a8b9c0d1e2f3a4b5c6d7e8f9a0b1c2d" + }, + { + "name": "TransferAndLockKpiLinkedRateFacet", + "address": "0xf6Fa229c4e8B54930021cF5506603fBd009153f9", + "contractId": "0.0.7591177", + "key": "0x3e5f7a9b1c2d4e6f8a9b0c1d2e3f4a5b6c7d8e9f0a1b2c3d4e5f6a7b8c9d0e1f" + }, + { + "name": "TransferAndLockSustainabilityPerformanceTargetRateFacet", + "address": "0xAa918478F6750E820CfdA70D49eA2E12965ba65E", + "contractId": "0.0.7591181", + "key": "0x9d1e3f5a7b9c0d2e4f6a8b0c1d3e5f7a9b0c2d4e6f8a9b1c3d5e7f9a0b2c4d6e" + } + ], + "configurations": { + "equity": { + "configId": "0x0000000000000000000000000000000000000000000000000000000000000001", + "version": 1, + "facetCount": 43, + "facets": [ + { + "facetName": "AccessControlFacet", + "key": "0x011768a41cb4fe76a26f444eec15d81a0d84e919a36336d72c6539cf41c0fcf6", + "address": "0x6B858546c53C441142f6870015F3D246C6c2818a" + }, + { + "facetName": "CapFacet", + "key": "0xfb3f8aac36661b5540c571d821c80dc9db7ede5ca2a4204ee562b3356f0c026b", + "address": "0xa721015E81ebB3f8Ca1341aAa591D501066e09f1" + }, + { + "facetName": "ControlListFacet", + "key": "0xfbb1491bfcecd95f79409bd5a4b69a4ba1e5573573372f5d2d66c11e3016414c", + "address": "0x9860025326A6c960f34A0dcF10D368356EDFa607" + }, + { + "facetName": "CorporateActionsFacet", + "key": "0x3cc74200ccfb5d585a6d170f8824979dbf1b592e0a41eef41cf6d86cf4882077", + "address": "0x96d7d28D1B1Cfc1A9135ECAaBd2B9c62ba2fFA74" + }, + { + "facetName": "DiamondFacet", + "key": "0x1b5212ea37fb29e99afa2812a5d7d7e662a477424d3de1a18cc3871a2ee94d78", + "address": "0x29D17a297087Ee3be9996b9c2468EbC1b77e9CcE" + }, + { + "facetName": "ERC20Facet", + "key": "0x064c883089ba1a596d9146c7aaa73c19ef8825f374c67a9538787c3d12e68dc5", + "address": "0x4499f0297E6aeA3e97838504F3dfF33c2C258e0B" + }, + { + "facetName": "FreezeFacet", + "key": "0x49f765e7155d979a148049c2a0ebed5e028b11799061897a255f99314f0bd3f1", + "address": "0x2b6DDe4991e4e9F5c37ce0b1B95875b8Dcc27898" + }, + { + "facetName": "KycFacet", + "key": "0xf516a0f6b4726244ae916c590cd26c2b593d7d448e46e43714fb9f9435c46e32", + "address": "0xdfEC98Bd972Ec4EbA966D73c520045Ca7622cA20" + }, + { + "facetName": "PauseFacet", + "key": "0x9429fd9ef38f89f41bd9ec33fd5c94b287ed1c27a98938da43835ac761b2f92c", + "address": "0x7bE5f6aD2B652Ba5C639a5052dDfe79Dfa529d14" + }, + { + "facetName": "SnapshotsFacet", + "key": "0x9a3fc46d83536ef6b87eb4fec37302bfd1a7c18e81ea2da853b911b44cf5b0cf", + "address": "0x15465550D2A9350534959237B418c17a419e765d" + }, + { + "facetName": "ERC1410IssuerFacet", + "key": "0x6e82b75f32c9647cc00b4c3eabbef5a82677f3e91d5d196eb4dd6a0365941344", + "address": "0x0dC2DEb2fDE5Caf90Ac39f5436A249a8f6902981" + }, + { + "facetName": "ERC1410ManagementFacet", + "key": "0x232f8686795d3f197681faf0d8db05655e759f62d709d56b97e5d9cfff29dbf5", + "address": "0xC9415758CF8F650Dc829cB85bE9BFE9AD8875E5a" + }, + { + "facetName": "ERC1410ReadFacet", + "key": "0x5eb2734b83ea80c3eb63463a6192b30ab2526cb7a073f0abfda1a404c92ae497", + "address": "0x85c4094CC1602F49F90c857E24305c70f6Aff831" + }, + { + "facetName": "ERC1410TokenHolderFacet", + "key": "0x0466bf860d23f1ecbc25f364735e0dc3830d236f09182599831730ddd2792caa", + "address": "0x38796e2f3f07bd948cca2edC3855060C2681a0Bb" + }, + { + "facetName": "ERC1594Facet", + "key": "0xcb70773e8163595d8bd906e277adeb3935976ad802ee8c29face3dfb0263291f", + "address": "0xFbE185079C4f28E646337e866Ba380AFE3b652aE" + }, + { + "facetName": "ERC1643Facet", + "key": "0x24543637956a3076689f171d3932b10f22d40f3785d53acebb340f37bed01625", + "address": "0x3b11D16F4bbc8b6075bdbc605E32488c0cfF54B1" + }, + { + "facetName": "ERC1644Facet", + "key": "0xf1da2ed271d62ba0b6597874c96fb6ed7d929e5ec679f4ad8c2c516c72f6736d", + "address": "0x0B8Dc20320C4a1b63Ded576bF811a88666491A09" + }, + { + "facetName": "ERC20PermitFacet", + "key": "0xef05f0313623d32145212ed45620c8b2c8c294b3d6955cf26f3d1b0569fbc1fa", + "address": "0x129B4245D6C7E8cfA13308f794c2275158593cFC" + }, + { + "facetName": "ERC20VotesFacet", + "key": "0x5cbfbaa435e19a43530a00ac685c9b5252862a94af2053667ded44642a0d9f4c", + "address": "0xda90323d002829a5Da5E4d1b3C53Bbfa992268Bf" + }, + { + "facetName": "ERC3643BatchFacet", + "key": "0x00332311d9f0c311b31b87399043a90feb10341fcbb4d7f4ed6e3c0072a3c392", + "address": "0xe40b7819B7A93E7Aa2D8D056153F1A679D54e64d" + }, + { + "facetName": "ERC3643ManagementFacet", + "key": "0xae7b7d0da6ac02e802a8d85aa821dd5cb84e8448836471680f744f64b678a073", + "address": "0xe48FCACf8a1d1873c3bbDF28B1877BCEe53763C0" + }, + { + "facetName": "ERC3643OperationsFacet", + "key": "0xe30b6b8e9e62fb8f017c940c7ffac12709f7ef6ae90beac5570fab25c7384e9c", + "address": "0xFCad555fDFB51A5eCB9282F7815DD7a68Cee84D1" + }, + { + "facetName": "ERC3643ReadFacet", + "key": "0x7743c4e9ff26ef34c3c482d2c12dabe076035eb44bf1c736722f04c33c20ef6a", + "address": "0x8efF1BCA4B29E861a0B331Da98aB051C294025ce" + }, + { + "facetName": "ClearingActionsFacet", + "key": "0x5472dfc5c92ad7a8651518ea7d3854d3b6494e5bcaa19f91cd61bf93bf6f2a74", + "address": "0xD8381F37923a6BE9938FF52E3558A5d037240833" + }, + { + "facetName": "ClearingHoldCreationFacet", + "key": "0x44f99a141c434fac20d69e7511932ee344d5b37b61851976c83a5df4ca468152", + "address": "0xC3224B48a81a9ec205AF8935dbdAAa326DBF01bD" + }, + { + "facetName": "ClearingReadFacet", + "key": "0xebb2e29bdf4edaf4ca66a3f9b7735087f9d0474d56d856e53c94ef00596c0b1e", + "address": "0xeD3D618AEF04B77625946343071A144475A75156" + }, + { + "facetName": "ClearingRedeemFacet", + "key": "0xb341e7aa749da43976c189209de51ccdf838af9f964cd27340b914d5b2aeba97", + "address": "0xDFd020a782793d6a4b77710b359BDAd160D7c948" + }, + { + "facetName": "ClearingTransferFacet", + "key": "0x7399d03db62430bec60ca2c3eacf98b1b7e2253f17593ef7a226d759442e0928", + "address": "0xeCc17a077a21C9eb6D2127E70fDE0Da8992f5eaA" + }, + { + "facetName": "HoldManagementFacet", + "key": "0x6c7216c5c52bc8f5019fc2fb333eb5e518e647fd82c807ed7c2a1fe4a03a3860", + "address": "0x25bC6cB958236029bb0061E68CF13a8ae0E4a5F0" + }, + { + "facetName": "HoldReadFacet", + "key": "0xd8a2714462c01975a075ccd4be2588934afd8074afef746fac089b757b803851", + "address": "0xb853cE1D8145696133B2bA052D29fE61A1E22726" + }, + { + "facetName": "HoldTokenHolderFacet", + "key": "0x87b17a3ce9a86872f21469d26f005543a22ef5729998559f4ad433d5c4253f3e", + "address": "0xa8215EE098f49Fb4eFA3711f8Bc7a42a42315CE6" + }, + { + "facetName": "ExternalControlListManagementFacet", + "key": "0x490196911bc65200514fb4568861a36670854901dffa91bc27577664fdace575", + "address": "0x7F2e59fbD2eD70D4A5776789458aE58A03B69D02" + }, + { + "facetName": "ExternalKycListManagementFacet", + "key": "0x32f05e55195d945105aff8ac4b041d4680824578bd72c6a34e4aa906a59237f1", + "address": "0xF29eFB1f632c3f4445FdE450717aDB8FA5364365" + }, + { + "facetName": "ExternalPauseManagementFacet", + "key": "0x158025f9e40c5d145e7915a14d5e97459728d98c715d8329359e305df737ee3c", + "address": "0xfca24188706Cab9aAeD4D7f9F0cb9DF24673a23a" + }, + { + "facetName": "AdjustBalancesFacet", + "key": "0x2bbe9fb018f1e7dd12b4442154e7fdfd75aec7b0a65d07debf49de4ece5fe8b8", + "address": "0x9b502948585c00AAd08558D535aC5dB16286B5Dd" + }, + { + "facetName": "LockFacet", + "key": "0xf1364345b3db5ebe5808f2d2d2aaecb9cdb4fddacad1534033060ebc886fc1e9", + "address": "0x191147c58f09298bE39778CFa867fCA084E536CA" + }, + { + "facetName": "ProtectedPartitionsFacet", + "key": "0x6d65d2938c05a4d952aff0845c1baa5bea04d4544db74f8b3b26004d1d58d58f", + "address": "0xd837085bCEBFf074B6E2319cF54316A3A47AC08b" + }, + { + "facetName": "ScheduledBalanceAdjustmentsFacet", + "key": "0xc418e67a48260d700e5f85863ad6fa6593206a4385728f8baba1572d631535e0", + "address": "0x901e3c7d5774BfE789335A7B494ecd786529efcB" + }, + { + "facetName": "ScheduledCrossOrderedTasksFacet", + "key": "0xa4934195ab83f1497ce5fc99b68d0f41694716bcfba5f232aa6c8e0d4d504f08", + "address": "0x9Da0F996bB226399091Ce4A84f7a930e6d342f6F" + }, + { + "facetName": "ScheduledSnapshotsFacet", + "key": "0x100f681e33d02a1124c2c05a537a1229eca89767c5e6e8720066ca74bfb85793", + "address": "0xE080f7983046516D79A34bfC83E86B195C48702f" + }, + { + "facetName": "SsiManagementFacet", + "key": "0x77c35dccfcdc80370e925aae86871ef8bc71db0b8e082c073cda906e89bb610e", + "address": "0x14400fe0df12413b5afB3858C670c82E87C39Bd4" + }, + { + "facetName": "TransferAndLockFacet", + "key": "0xd9b300e6bf7a143b8fd8cf1d4ab050e691c862bf0f57a7d49cc08c60efe68d08", + "address": "0x00D128bb580553b13580A33bEe6EC018aB3AF1F0" + }, + { + "facetName": "EquityUSAFacet", + "key": "0xfe85fe0513f5a5676011f59495ae16b2b93c981c190e99e61903e5603542c810", + "address": "0xc669321785579be6601BbD3039d6E23a6f310158" + } + ] + }, + "bond": { + "configId": "0x0000000000000000000000000000000000000000000000000000000000000002", + "version": 1, + "facetCount": 46, + "facets": [ + { + "facetName": "AccessControlFacet", + "key": "0x011768a41cb4fe76a26f444eec15d81a0d84e919a36336d72c6539cf41c0fcf6", + "address": "0x6B858546c53C441142f6870015F3D246C6c2818a" + }, + { + "facetName": "CapFacet", + "key": "0xfb3f8aac36661b5540c571d821c80dc9db7ede5ca2a4204ee562b3356f0c026b", + "address": "0xa721015E81ebB3f8Ca1341aAa591D501066e09f1" + }, + { + "facetName": "ControlListFacet", + "key": "0xfbb1491bfcecd95f79409bd5a4b69a4ba1e5573573372f5d2d66c11e3016414c", + "address": "0x9860025326A6c960f34A0dcF10D368356EDFa607" + }, + { + "facetName": "CorporateActionsFacet", + "key": "0x3cc74200ccfb5d585a6d170f8824979dbf1b592e0a41eef41cf6d86cf4882077", + "address": "0x96d7d28D1B1Cfc1A9135ECAaBd2B9c62ba2fFA74" + }, + { + "facetName": "DiamondFacet", + "key": "0x1b5212ea37fb29e99afa2812a5d7d7e662a477424d3de1a18cc3871a2ee94d78", + "address": "0x29D17a297087Ee3be9996b9c2468EbC1b77e9CcE" + }, + { + "facetName": "ERC20Facet", + "key": "0x064c883089ba1a596d9146c7aaa73c19ef8825f374c67a9538787c3d12e68dc5", + "address": "0x4499f0297E6aeA3e97838504F3dfF33c2C258e0B" + }, + { + "facetName": "FreezeFacet", + "key": "0x49f765e7155d979a148049c2a0ebed5e028b11799061897a255f99314f0bd3f1", + "address": "0x2b6DDe4991e4e9F5c37ce0b1B95875b8Dcc27898" + }, + { + "facetName": "KycFacet", + "key": "0xf516a0f6b4726244ae916c590cd26c2b593d7d448e46e43714fb9f9435c46e32", + "address": "0xdfEC98Bd972Ec4EbA966D73c520045Ca7622cA20" + }, + { + "facetName": "PauseFacet", + "key": "0x9429fd9ef38f89f41bd9ec33fd5c94b287ed1c27a98938da43835ac761b2f92c", + "address": "0x7bE5f6aD2B652Ba5C639a5052dDfe79Dfa529d14" + }, + { + "facetName": "SnapshotsFacet", + "key": "0x9a3fc46d83536ef6b87eb4fec37302bfd1a7c18e81ea2da853b911b44cf5b0cf", + "address": "0x15465550D2A9350534959237B418c17a419e765d" + }, + { + "facetName": "ERC1410IssuerFacet", + "key": "0x6e82b75f32c9647cc00b4c3eabbef5a82677f3e91d5d196eb4dd6a0365941344", + "address": "0x0dC2DEb2fDE5Caf90Ac39f5436A249a8f6902981" + }, + { + "facetName": "ERC1410ManagementFacet", + "key": "0x232f8686795d3f197681faf0d8db05655e759f62d709d56b97e5d9cfff29dbf5", + "address": "0xC9415758CF8F650Dc829cB85bE9BFE9AD8875E5a" + }, + { + "facetName": "ERC1410ReadFacet", + "key": "0x5eb2734b83ea80c3eb63463a6192b30ab2526cb7a073f0abfda1a404c92ae497", + "address": "0x85c4094CC1602F49F90c857E24305c70f6Aff831" + }, + { + "facetName": "ERC1410TokenHolderFacet", + "key": "0x0466bf860d23f1ecbc25f364735e0dc3830d236f09182599831730ddd2792caa", + "address": "0x38796e2f3f07bd948cca2edC3855060C2681a0Bb" + }, + { + "facetName": "ERC1594Facet", + "key": "0xcb70773e8163595d8bd906e277adeb3935976ad802ee8c29face3dfb0263291f", + "address": "0xFbE185079C4f28E646337e866Ba380AFE3b652aE" + }, + { + "facetName": "ERC1643Facet", + "key": "0x24543637956a3076689f171d3932b10f22d40f3785d53acebb340f37bed01625", + "address": "0x3b11D16F4bbc8b6075bdbc605E32488c0cfF54B1" + }, + { + "facetName": "ERC1644Facet", + "key": "0xf1da2ed271d62ba0b6597874c96fb6ed7d929e5ec679f4ad8c2c516c72f6736d", + "address": "0x0B8Dc20320C4a1b63Ded576bF811a88666491A09" + }, + { + "facetName": "ERC20PermitFacet", + "key": "0xef05f0313623d32145212ed45620c8b2c8c294b3d6955cf26f3d1b0569fbc1fa", + "address": "0x129B4245D6C7E8cfA13308f794c2275158593cFC" + }, + { + "facetName": "ERC20VotesFacet", + "key": "0x5cbfbaa435e19a43530a00ac685c9b5252862a94af2053667ded44642a0d9f4c", + "address": "0xda90323d002829a5Da5E4d1b3C53Bbfa992268Bf" + }, + { + "facetName": "ERC3643BatchFacet", + "key": "0x00332311d9f0c311b31b87399043a90feb10341fcbb4d7f4ed6e3c0072a3c392", + "address": "0xe40b7819B7A93E7Aa2D8D056153F1A679D54e64d" + }, + { + "facetName": "ERC3643ManagementFacet", + "key": "0xae7b7d0da6ac02e802a8d85aa821dd5cb84e8448836471680f744f64b678a073", + "address": "0xe48FCACf8a1d1873c3bbDF28B1877BCEe53763C0" + }, + { + "facetName": "ERC3643OperationsFacet", + "key": "0xe30b6b8e9e62fb8f017c940c7ffac12709f7ef6ae90beac5570fab25c7384e9c", + "address": "0xFCad555fDFB51A5eCB9282F7815DD7a68Cee84D1" + }, + { + "facetName": "ERC3643ReadFacet", + "key": "0x7743c4e9ff26ef34c3c482d2c12dabe076035eb44bf1c736722f04c33c20ef6a", + "address": "0x8efF1BCA4B29E861a0B331Da98aB051C294025ce" + }, + { + "facetName": "ClearingActionsFacet", + "key": "0x5472dfc5c92ad7a8651518ea7d3854d3b6494e5bcaa19f91cd61bf93bf6f2a74", + "address": "0xD8381F37923a6BE9938FF52E3558A5d037240833" + }, + { + "facetName": "ClearingHoldCreationFacet", + "key": "0x44f99a141c434fac20d69e7511932ee344d5b37b61851976c83a5df4ca468152", + "address": "0xC3224B48a81a9ec205AF8935dbdAAa326DBF01bD" + }, + { + "facetName": "ClearingReadFacet", + "key": "0xebb2e29bdf4edaf4ca66a3f9b7735087f9d0474d56d856e53c94ef00596c0b1e", + "address": "0xeD3D618AEF04B77625946343071A144475A75156" + }, + { + "facetName": "ClearingRedeemFacet", + "key": "0xb341e7aa749da43976c189209de51ccdf838af9f964cd27340b914d5b2aeba97", + "address": "0xDFd020a782793d6a4b77710b359BDAd160D7c948" + }, + { + "facetName": "ClearingTransferFacet", + "key": "0x7399d03db62430bec60ca2c3eacf98b1b7e2253f17593ef7a226d759442e0928", + "address": "0xeCc17a077a21C9eb6D2127E70fDE0Da8992f5eaA" + }, + { + "facetName": "HoldManagementFacet", + "key": "0x6c7216c5c52bc8f5019fc2fb333eb5e518e647fd82c807ed7c2a1fe4a03a3860", + "address": "0x25bC6cB958236029bb0061E68CF13a8ae0E4a5F0" + }, + { + "facetName": "HoldReadFacet", + "key": "0xd8a2714462c01975a075ccd4be2588934afd8074afef746fac089b757b803851", + "address": "0xb853cE1D8145696133B2bA052D29fE61A1E22726" + }, + { + "facetName": "HoldTokenHolderFacet", + "key": "0x87b17a3ce9a86872f21469d26f005543a22ef5729998559f4ad433d5c4253f3e", + "address": "0xa8215EE098f49Fb4eFA3711f8Bc7a42a42315CE6" + }, + { + "facetName": "ExternalControlListManagementFacet", + "key": "0x490196911bc65200514fb4568861a36670854901dffa91bc27577664fdace575", + "address": "0x7F2e59fbD2eD70D4A5776789458aE58A03B69D02" + }, + { + "facetName": "ExternalKycListManagementFacet", + "key": "0x32f05e55195d945105aff8ac4b041d4680824578bd72c6a34e4aa906a59237f1", + "address": "0xF29eFB1f632c3f4445FdE450717aDB8FA5364365" + }, + { + "facetName": "ExternalPauseManagementFacet", + "key": "0x158025f9e40c5d145e7915a14d5e97459728d98c715d8329359e305df737ee3c", + "address": "0xfca24188706Cab9aAeD4D7f9F0cb9DF24673a23a" + }, + { + "facetName": "AdjustBalancesFacet", + "key": "0x2bbe9fb018f1e7dd12b4442154e7fdfd75aec7b0a65d07debf49de4ece5fe8b8", + "address": "0x9b502948585c00AAd08558D535aC5dB16286B5Dd" + }, + { + "facetName": "LockFacet", + "key": "0xf1364345b3db5ebe5808f2d2d2aaecb9cdb4fddacad1534033060ebc886fc1e9", + "address": "0x191147c58f09298bE39778CFa867fCA084E536CA" + }, + { + "facetName": "ProceedRecipientsFacet", + "key": "0x87f4b676bf89cd24a01a78fd8e7fb2102c2f6d034be73d16402f7297e0ae625b", + "address": "0xcD7d18a54cbbB332B98EBdC2f871a86899519f91" + }, + { + "facetName": "ProtectedPartitionsFacet", + "key": "0x6d65d2938c05a4d952aff0845c1baa5bea04d4544db74f8b3b26004d1d58d58f", + "address": "0xd837085bCEBFf074B6E2319cF54316A3A47AC08b" + }, + { + "facetName": "ScheduledBalanceAdjustmentsFacet", + "key": "0xc418e67a48260d700e5f85863ad6fa6593206a4385728f8baba1572d631535e0", + "address": "0x901e3c7d5774BfE789335A7B494ecd786529efcB" + }, + { + "facetName": "ScheduledCrossOrderedTasksFacet", + "key": "0xa4934195ab83f1497ce5fc99b68d0f41694716bcfba5f232aa6c8e0d4d504f08", + "address": "0x9Da0F996bB226399091Ce4A84f7a930e6d342f6F" + }, + { + "facetName": "ScheduledCouponListingFacet", + "key": "0x6cc7645ae5bcd122875ce8bd150bd28dda6374546c4c2421e5ae4fdeedb3ab30", + "address": "0x46c10911ADA6F69F453d6D9c30C17d25aAB7F48c" + }, + { + "facetName": "ScheduledSnapshotsFacet", + "key": "0x100f681e33d02a1124c2c05a537a1229eca89767c5e6e8720066ca74bfb85793", + "address": "0xE080f7983046516D79A34bfC83E86B195C48702f" + }, + { + "facetName": "SsiManagementFacet", + "key": "0x77c35dccfcdc80370e925aae86871ef8bc71db0b8e082c073cda906e89bb610e", + "address": "0x14400fe0df12413b5afB3858C670c82E87C39Bd4" + }, + { + "facetName": "TransferAndLockFacet", + "key": "0xd9b300e6bf7a143b8fd8cf1d4ab050e691c862bf0f57a7d49cc08c60efe68d08", + "address": "0x00D128bb580553b13580A33bEe6EC018aB3AF1F0" + }, + { + "facetName": "BondUSAFacet", + "key": "0xe6594ee8f54f346ab25268fdc7955031a6b06102355e1446353d89ab1d593de3", + "address": "0x859759cAd19172aF0F7E86f5884231a9d6CE9e14" + }, + { + "facetName": "BondUSAReadFacet", + "key": "0x624866e79d4c0a78a8dc32cbce49563cdf86eba627bd05a9821dbaa1674ac231", + "address": "0x3427a45102E86de59D0e607632Bc085c4289e377" + } + ] + }, + "bondFixedRate": { + "configId": "0x0000000000000000000000000000000000000000000000000000000000000003", + "version": 1, + "facetCount": 47, + "facets": [ + { + "facetName": "AccessControlFixedRateFacet", + "key": "0xb35ad81b5769c62538fe6a90e40db8be624645f77c1738ce582ede5da399ecb2", + "address": "0x5f18F482Ae253b04f2Ce2725aa735eb9884639C8" + }, + { + "facetName": "CapFixedRateFacet", + "key": "0x288b5a4b82f38369168fd49de3e5e68c76fc0394c2e89817b70a65368ba4dcf7", + "address": "0xC97098712D4C91fbB14B78C852F97012F399B346" + }, + { + "facetName": "ControlListFixedRateFacet", + "key": "0x083b7e0957ebd3a0f69bf432ce05d94c1848cbdbf0e66664919c4803b14dfdf8", + "address": "0x2cC3AFbd132F6b62d871fB9355DFe13be1929FA0" + }, + { + "facetName": "CorporateActionsFixedRateFacet", + "key": "0xd2c0415cebdbb6dcaf014ce92df6bcae060743c622fd7ce954105b71954e0424", + "address": "0x85dDD406bA86c620F9703Dc392Bd82934159B25E" + }, + { + "facetName": "DiamondFacet", + "key": "0x1b5212ea37fb29e99afa2812a5d7d7e662a477424d3de1a18cc3871a2ee94d78", + "address": "0x29D17a297087Ee3be9996b9c2468EbC1b77e9CcE" + }, + { + "facetName": "ERC20FixedRateFacet", + "key": "0x3e4f428a95dadb9b2d5121c4067c845270879ee5e180e4c4d03ad40f00160376", + "address": "0x07D31754F8EA7E03ec664c250c3557104cAA5fdd" + }, + { + "facetName": "FreezeFixedRateFacet", + "key": "0xad6f49f17db4659e78d7c82e5414ef50b6bfddf3f3e15adc3d0a0e958f696841", + "address": "0x4D4d42bDa28023c7cba0d6a60641c635B7C2bad8" + }, + { + "facetName": "KycFixedRateFacet", + "key": "0x76145b42d3591928a90298dbd705c8cdb33be9f5eee50f649fb58ed3f36b9f04", + "address": "0xF4B9e32BAe7e5f9C92806BDD6B358A533cDd1bA4" + }, + { + "facetName": "PauseFixedRateFacet", + "key": "0x9fd7fc8200742d120881c0cf0a0541bae13e372519d986a5169b23b82ea06f12", + "address": "0x11262cc0913A59562d8322B994dFCF22Eea1818D" + }, + { + "facetName": "SnapshotsFixedRateFacet", + "key": "0xf9b2659fdf4231d426bc34cef93a8b3f42e5cfaf762f65dbf6537ab3e5ee8348", + "address": "0x133559AE4456986b5FD793dDCF1C159180433d8a" + }, + { + "facetName": "ERC1410IssuerFixedRateFacet", + "key": "0xb9c76f134ffdac743e817a2726bdf9f28a48dfea1f9f54b1066e4e0de68f2a06", + "address": "0x3804280896a11C10fE41c7bB900d4f72f53f6Cb7" + }, + { + "facetName": "ERC1410ManagementFixedRateFacet", + "key": "0xf616851e84bfcfb3b33a8cc54c54c34e9168ba2b8d233a0b3daacee27f0266ca", + "address": "0xf9430A7A1898999D149C7Ac494A1234778385f4b" + }, + { + "facetName": "ERC1410ReadFixedRateFacet", + "key": "0x289451d28da5d8ff4e7759db6b1c418b7871f0d6ad63bf7f75cd411f3d79686d", + "address": "0xCFf971dA6f5994aa8D7f125D341da0CCBE4136D1" + }, + { + "facetName": "ERC1410TokenHolderFixedRateFacet", + "key": "0xfd248a6ee4af07046520c6ec6f9b61a009db5407ec2f967775040cd67b66f08d", + "address": "0x94FDD4F519071216843d123E0ae49e8d262d7259" + }, + { + "facetName": "ERC1594FixedRateFacet", + "key": "0x7a8f3e6d2c4b1a9e5f7d8c6b4a2e1f9d7c5b3a1e9f7d5c3b1a9e7f5d3c1b9e7f", + "address": "0x6160b4BCfB4Fb132cF6Ce6E4AC150F747Da41aa8" + }, + { + "facetName": "ERC1643FixedRateFacet", + "key": "0x3d6e9f1c5a8b2e7f4d9c6a3e1f8d5c2a9f6e3d1c8f5e2d9c6f3e1d8c5f2d9c6f", + "address": "0x81F695DE30F3E8A714E180e8461AB25a026398B2" + }, + { + "facetName": "ERC1644FixedRateFacet", + "key": "0x6f9e3d1c8a5f2e9d6c3f1e8d5c2f9e6d3f1e8c5f2d9e6c3f1d8e5c2f9d6e3f1d", + "address": "0x797117eAFCd83F21F1c365607180C9bFb24f3B03" + }, + { + "facetName": "ERC20PermitFixedRateFacet", + "key": "0xc85b8a95de0375d3b552d368932ecaeb9fe85d470eb1e89bc29040cb35d168a3", + "address": "0x01b70b0363F357E6d891Ea178af2622C0A5a5cEB" + }, + { + "facetName": "ERC20VotesFixedRateFacet", + "key": "0xce2bc140ce5298990432f0332c33ccaa813a89e3bc3c0589eb30eabe005d2742", + "address": "0x9809107EaE1578Cbe343db82550edE92A528B77F" + }, + { + "facetName": "ERC3643BatchFixedRateFacet", + "key": "0x3563ac36f573b2e288846d3437686b6a5137a7c9b5cbcd027816db63e07d4138", + "address": "0x98db44B69462c38E332590f8C5fFD8Cee5c3882c" + }, + { + "facetName": "ERC3643ManagementFixedRateFacet", + "key": "0xb82ec3e8b1d44871bbfe25257f4e57b7d9778bc578af2f0ce9ef218f6b897797", + "address": "0x504bf13670Ac96Be091632596bD6fB29fDC2F26d" + }, + { + "facetName": "ERC3643OperationsFixedRateFacet", + "key": "0x6524c4b11c24bcfff0472462572cdfbe5c671cad2df1ac54402e8a7b4dc3ee02", + "address": "0x3C29386784DDa3f8083F63805061A0053a546157" + }, + { + "facetName": "ERC3643ReadFixedRateFacet", + "key": "0x53569c2059b40a4ccb6382b2180607da114ff92bfa263d7489ec7face7c4cc1f", + "address": "0xD688F1452B2e537F167CF09492F43F34FcA5b1eE" + }, + { + "facetName": "ClearingActionsFixedRateFacet", + "key": "0x497fbb5ba36b9a6b791669e513c877ebfe079b61e0eb37afbd19b696266a0223", + "address": "0xAA3b4E2B8189e9384eA91B9262B67f26AeCb0f03" + }, + { + "facetName": "ClearingHoldCreationFixedRateFacet", + "key": "0xf4d60b90b7a9edb9598b8c4aa2a4477e3a65750eab2cce564385f35d882a23c3", + "address": "0x6bf3eB9a1AC97D1E67f5F67d2205605Bc98EF6b4" + }, + { + "facetName": "ClearingReadFixedRateFacet", + "key": "0xcd312e798e5b62ec98cc7c8ac3547a640f68ee74e351b73397be02dab3d5b14f", + "address": "0x08f8506B96b22D9F37Ac2C3D1DcC1c684d2a1B3b" + }, + { + "facetName": "ClearingRedeemFixedRateFacet", + "key": "0xa8edf3401d5e3f8e9a45b0992984a31a2522a24ed793e5e7980f8d66508473c9", + "address": "0xf82782B7F35459a1Da9Db9B005C4bd947aa3E8B9" + }, + { + "facetName": "ClearingTransferFixedRateFacet", + "key": "0x1ba056fe3e7ef86779515a9e7f364e84af0f60eb5f4175ac6d6e6e3f4c05fffb", + "address": "0x401E2E2A222A128Fd5922649280aDa7aD969052F" + }, + { + "facetName": "HoldManagementFixedRateFacet", + "key": "0xed113dc152639988cc04869ce8c061c4a3350fe3826e16fc37960453a8d20b50", + "address": "0x6B1b13670a64705AcEcc2790DE491Eb52B5dd743" + }, + { + "facetName": "HoldReadFixedRateFacet", + "key": "0xcf1b5b7fa2ca417ea3b952a93a6157f237fce01f4944d27160e5101f05335e52", + "address": "0xAe47786E46CDe512F696354570cd032C400C06EC" + }, + { + "facetName": "HoldTokenHolderFixedRateFacet", + "key": "0x0d354aad4576c421c121516a105362711db178c6f0d6e0159d68d9f3ebbda486", + "address": "0xDA77A80a7507052f8911eB39d79fe0352720D059" + }, + { + "facetName": "ExternalControlListManagementFixedRateFacet", + "key": "0xdb213fa4fc549f5bc27fc79e6094fe6a26e303e8eabc8a86a8de7bb307d570d8", + "address": "0xE0E9024Ec542e8AFafB55e8966eBD531E96bB8e1" + }, + { + "facetName": "ExternalKycListManagementFixedRateFacet", + "key": "0x4f9cf8c8583a46a60ec88a37a07f91d915dba024a57bdb729a4805603f5c40b2", + "address": "0xC448B00BF892cdF84cff092ea0d41f016a504A47" + }, + { + "facetName": "ExternalPauseManagementFixedRateFacet", + "key": "0x752307e5e93ea6e9b979833cf52e6043f71fd4b983ec32aa685f9b160594e326", + "address": "0x3eA0cCC64dF4730cfC99170bAEc667108AB56cCB" + }, + { + "facetName": "AdjustBalancesFixedRateFacet", + "key": "0xa7e8f6d5c4b3a2e1f9d8c7b6a5e4f3d2c1b9a8e7f6d5c4b3a2e1f9d8c7b6a5e4", + "address": "0x7515C5090a7ac1C281bB62DaFd7262F7114329Fd" + }, + { + "facetName": "LockFixedRateFacet", + "key": "0x053d181bbb93fc7807aafeac901706f74ec5767053695d2b769bf0fdcf065e4d", + "address": "0xb39CFE0Db5b4782a5C4cC7002352091ac3Adc719" + }, + { + "facetName": "ProceedRecipientsFixedRateFacet", + "key": "0xd1f2e9d8c7b6a5e4f3d2c1b9a8e7f6d5c4b3a2e1f9d8c7b6a5e4f3d2c1b9a8e7", + "address": "0x72747B5Ff207433C0995A7634f0efdD469bAfDDc" + }, + { + "facetName": "ProtectedPartitionsFixedRateFacet", + "key": "0x1f8166e21922daee7192ddd5f8a1ce657013d69d412a4e4f5848ab75f1ca8db3", + "address": "0xd9cD83c8c9f90C5E81C9f7e9170827cF8F9121f6" + }, + { + "facetName": "ScheduledBalanceAdjustmentsFixedRateFacet", + "key": "0xb3336a1ececdcd807fd6e81cc57e9392c75bf3fd303a2f5df0b11c0dda87ce7f", + "address": "0xA6e5b4d40173067ADadb0C560C93f66fBfB3A2fE" + }, + { + "facetName": "ScheduledCrossOrderedTasksFixedRateFacet", + "key": "0x1312a5fa6cd5c7128015b199c47eacbf1636ef5cf437c0ee84c619dfbd372ca0", + "address": "0x2c10C3F99a556AFe22326f0316F812E60D5332d8" + }, + { + "facetName": "ScheduledCouponListingFixedRateFacet", + "key": "0x9c249eccb68ce7eae5f58a9b4fbe1f3b6a6f2a644b36c3f1b3559077b4f4e266", + "address": "0x1CE892806Ba0661aBD87C899788C76949DAfBd26" + }, + { + "facetName": "ScheduledSnapshotsFixedRateFacet", + "key": "0xe3f0d8c05423e6bf8dc42fb776a1ce265739fc66f9b501077b207a0c2a56cab6", + "address": "0xC95080cBf6cfdEa3863ac955eDAe0E4Ca380DbD3" + }, + { + "facetName": "SsiManagementFixedRateFacet", + "key": "0xd3c3eb4fde853b08d2509769f85fbcc3147edd847e1e8da89c805628293effb2", + "address": "0xdA026b991f307e4733021622720345CF06Fd4e54" + }, + { + "facetName": "TransferAndLockFixedRateFacet", + "key": "0x8c3d5e9f2a6b1c4d7e8f9a2b3c4d5e6f7a8b9c0d1e2f3a4b5c6d7e8f9a0b1c2d", + "address": "0x4AE6BBA3dd1f47D60efa26df7c9ffA25B6cd8835" + }, + { + "facetName": "FixedRateFacet", + "key": "0x2871e1c37f7423765d88b16528db7e80ad8e2bae5ab5d55e26659840c1d6b504", + "address": "0xcD54CbA2bc6B1C26E42f0F2Cc94d75336CFD9dea" + }, + { + "facetName": "BondUSAFixedRateFacet", + "key": "0xd55d8787d23b78e70dada1ade45b8758f5c027e2cddf3556606c07d388ce159a", + "address": "0x594394e5e75f8cA0BB502D342Df544963BaF1a0b" + }, + { + "facetName": "BondUSAReadFixedRateFacet", + "key": "0xd5d703d15aa25ad6419288846269dcbba84f489f1c986be2c919f84c042b8c24", + "address": "0xf282863265C10071D961C3BaA3b182764A0549fF" + } + ] + }, + "bondKpiLinkedRate": { + "configId": "0x0000000000000000000000000000000000000000000000000000000000000004", + "version": 1, + "facetCount": 47, + "facets": [ + { + "facetName": "AccessControlKpiLinkedRateFacet", + "key": "0x465c95eea6723a1645e5399789cee702b19d0bcd0ad3f894270aa25488fb4ab9", + "address": "0x5977BA5aDaAd6df6A46261e022AECBEC1A3a433A" + }, + { + "facetName": "CapKpiLinkedRateFacet", + "key": "0xdc8cc0612bf886bcc1666e31c5de3392bee78451de7213b01fe78d560a804435", + "address": "0x9050bF79E7D9880E012057C05D889580a5De06F9" + }, + { + "facetName": "ControlListKpiLinkedRateFacet", + "key": "0xaaa80b13f9a051b7f9546e92763bedfbe259f511da870cbb1133fe0e79c8eac5", + "address": "0x6d398d6Cc2A0B4CA74Daa728b035F90084f85949" + }, + { + "facetName": "CorporateActionsKpiLinkedRateFacet", + "key": "0xf86b1190fb42cc572ccdeac774fdf968c303079b8c5eceaeb1c9f4f9089bb6be", + "address": "0x1ad7b0b131767CD45f52E9e0724648345762a336" + }, + { + "facetName": "DiamondFacet", + "key": "0x1b5212ea37fb29e99afa2812a5d7d7e662a477424d3de1a18cc3871a2ee94d78", + "address": "0x29D17a297087Ee3be9996b9c2468EbC1b77e9CcE" + }, + { + "facetName": "ERC20KpiLinkedRateFacet", + "key": "0xe4565636726032d04f6d265d3ee61c2f046ea49ecb39f4ca68dd4f65713e9620", + "address": "0xBfd24915cE1a7F41807E5c1951af7052b51BA4Dd" + }, + { + "facetName": "FreezeKpiLinkedRateFacet", + "key": "0xb03614fe7a4412f420f88bc18fc39ab43459dbfdbbdbd0a8e109356b0928272e", + "address": "0xB59FCf6478eE022F0fdC353a173bEF0D01B62B2B" + }, + { + "facetName": "KycKpiLinkedRateFacet", + "key": "0x9cf03144d37b7b92d5b438e1f037a64ebdc48c2891bc4b475a15a1cf833574d0", + "address": "0x508433F37d70Cf728187918CEE516509125a5EAF" + }, + { + "facetName": "PauseKpiLinkedRateFacet", + "key": "0x77ff7dc4f2d4a0cb28f09307895b94478d6655e7a545222f97b753a6c90a8f71", + "address": "0xea48D3B8d399fb90aA7Ecf70420479D133813b1F" + }, + { + "facetName": "SnapshotsKpiLinkedRateFacet", + "key": "0x9c0a9b3a98c7e535e4b1a0749f01f63ea94b600fbee8df56d7c18a1f3043ee20", + "address": "0x0884836cd508D8208EE628BC09b994baf21429D3" + }, + { + "facetName": "ERC1410IssuerKpiLinkedRateFacet", + "key": "0x97246e7c6950bcc047f6ea198308a7f304bca9f3f13d2ce5d7fdeee9cc9e0828", + "address": "0x77d3118b4f2040A4A2c84a023D5f6b7c39adc234" + }, + { + "facetName": "ERC1410ManagementKpiLinkedRateFacet", + "key": "0x831449a00c9cf218fe471b13f84f7109b57ad4b1202d4ed93009ee3d53276a2f", + "address": "0xddFCA146223D470967BBA44d2c87b6133f8BA590" + }, + { + "facetName": "ERC1410ReadKpiLinkedRateFacet", + "key": "0x696d9b2b17b535f70254309692c77475c258c27dfa6853bbecc611bc350136cd", + "address": "0x53b77AA804cEA0FE6a4222E0bAfBf6E07aF79E09" + }, + { + "facetName": "ERC1410TokenHolderKpiLinkedRateFacet", + "key": "0x463e4b758e14b6cdc1dd053ae3df476d527be8131eb3b41c64b4cf8019855237", + "address": "0x166928078b3C16938e04039285ea054B9873dd2F" + }, + { + "facetName": "ERC1594KpiLinkedRateFacet", + "key": "0x1b4e7a9d3f5c2e8a6d4b9f7e5c3a1d8f6e4c2a9d7f5e3c1b8f6d4e2c9a7f5d3e", + "address": "0x61D234AB3aEd4D0b89fc6f48bdc0EE5229e5230F" + }, + { + "facetName": "ERC1643KpiLinkedRateFacet", + "key": "0x4e7f1a2d5c8e3f6a9d2e5f8c1d4a7e2f5c8d1e4f7c2e5d8f1e4c7d2f5e8d1f4e", + "address": "0x5d4062b54406a3bb2a48C6724d0d7f6E0651aBF0" + }, + { + "facetName": "ERC1644KpiLinkedRateFacet", + "key": "0x7a1f4e2d5c8f3e6d9c2f5e8d1f4c7e2d5f8c1f4e7d2e5f8c1e4d7c2f5d8e1f4c", + "address": "0x123d4306e98A232C42f467f70645AAA4A5CFc0B5" + }, + { + "facetName": "ERC20PermitKpiLinkedRateFacet", + "key": "0x468437a5a7a128b245fb2c3ac08cf17e5f2a6983dece41309b58fffa1fca80a9", + "address": "0x51E5ac371076BF207c8FFbB6F34225F71B0ab10C" + }, + { + "facetName": "ERC20VotesKpiLinkedRateFacet", + "key": "0x9d720cb6c08dff4ea63b2b4f3908fa551321fdc478de6b46a67ba5ecb46f82fc", + "address": "0x9F3225e9490cc1DA2b6F0A5908DD607Ce63829BB" + }, + { + "facetName": "ERC3643BatchKpiLinkedRateFacet", + "key": "0xdf3ace3e8d3a434ee6c69da03060d81e1c8c217c16fad43a2819c0bc545253ae", + "address": "0xD7a94983B10bB5F303651AbCea4E6fB9EC6e3395" + }, + { + "facetName": "ERC3643ManagementKpiLinkedRateFacet", + "key": "0x649facd691e27202b46bb9e328ca96c6f6dc0aeefdd6cfc15707ee162b7d5103", + "address": "0x3e2FFdC188Bd8108d3a1dC1742b0585c82568FB6" + }, + { + "facetName": "ERC3643OperationsKpiLinkedRateFacet", + "key": "0x87b7a50a7578f2499b459e665b6b7b809ac635280a2157d21fc5de0fc4b54715", + "address": "0x112c59946F76781E3b50b1F58745CDB516148B88" + }, + { + "facetName": "ERC3643ReadKpiLinkedRateFacet", + "key": "0x68ba78621a8627653774f3b9800b77ac34bd334ecc2dc4d933f9e30d6197194f", + "address": "0xf377C9613B80d661CF4eCf153fAbFdabC6C62a80" + }, + { + "facetName": "ClearingActionsKpiLinkedRateFacet", + "key": "0x4960adcd566163ba9edaee816f8739f1c788cace28ad805c136644de52929faa", + "address": "0x590b672bf0d7d2aAd6973ea119143bcbBD605493" + }, + { + "facetName": "ClearingHoldCreationKpiLinkedRateFacet", + "key": "0x1ba40338a89cd18f2799a3e6a86f0be118236340eeff5a19a19a08d3d6e3d08c", + "address": "0xBf67FE9fe880F114c1f74b928fa0601C34B012b2" + }, + { + "facetName": "ClearingReadKpiLinkedRateFacet", + "key": "0x3740ea12ff1c9c37f216ba72884079bcaabe99f51cdd9b019be5b218ba5db0e2", + "address": "0xFBF71BD825b5fdA4EAb5f7cC028D5c0986563F26" + }, + { + "facetName": "ClearingRedeemKpiLinkedRateFacet", + "key": "0xc38aaff0161104c594b7a323af3facf5beb1e304b730fcbee09f5eed74b11375", + "address": "0x59F22bA95BD38C0e81Aaf20128A2b331162DC548" + }, + { + "facetName": "ClearingTransferKpiLinkedRateFacet", + "key": "0x1b229a6d3b8a8ecba97d1e7c2c4a89c4cf71b9b5852317278f57384d728f8bde", + "address": "0x4A4AAe350953AB929b5b1D23d63B3700c4E6a217" + }, + { + "facetName": "HoldManagementKpiLinkedRateFacet", + "key": "0xed86feb6fdd55e6a056bda1a5b7149c2d0d6d7d024625b67aa2c567ba0ef2b9e", + "address": "0x8b37C2909286CEd741Ffa9F9A706262Caf07Bb28" + }, + { + "facetName": "HoldReadKpiLinkedRateFacet", + "key": "0x6b896f9725e5d4f4b5f8cff875e71b5f3284000a933f6ab32c01cdd5f71306d6", + "address": "0x79717644E5CED3aF756c8C180Ef3e9013B0A0739" + }, + { + "facetName": "HoldTokenHolderKpiLinkedRateFacet", + "key": "0x09f3820ce986997421b684b2482b6d982f31b5ed27a0d72e2aece5ffb3c8fd39", + "address": "0x341feEc8EC4f484e123D15E14D48c26C6f000ABc" + }, + { + "facetName": "ExternalControlListManagementKpiLinkedRateFacet", + "key": "0x9ecec5a17142ae1072721e064f5e9a3f0795a2bea57673f40a9440b8adec0052", + "address": "0x7f1618aF9f108BF7520143a7eba99F8A2231A832" + }, + { + "facetName": "ExternalKycListManagementKpiLinkedRateFacet", + "key": "0xc15c973cec2d75a95d94522af2dc05c535be214a6cce368887f7e7d3ead3a491", + "address": "0x2309EdaE6E4CE23C110C45CEE0AF3D9eb6027299" + }, + { + "facetName": "ExternalPauseManagementKpiLinkedRateFacet", + "key": "0x549d7aab8deeb4a493aa9765937da4290840d4a6fe04399ef4bb818694d9aee4", + "address": "0x3709Ba73983180d63f805818A464c289a827508F" + }, + { + "facetName": "AdjustBalancesKpiLinkedRateFacet", + "key": "0xb8f9e7d6c5b4a3e2f1d9c8b7a6e5f4d3c2b1a9e8f7d6c5b4a3e2f1d9c8b7a6e5", + "address": "0x379042de4BA73Acad1E6Dab359Edde874dc58413" + }, + { + "facetName": "LockKpiLinkedRateFacet", + "key": "0x04caf3f62f31b8b1edd96c39948d89098fd83c1a1b5b76aa39927cf7ad8e9d42", + "address": "0x0b30812F9d9cad01c0Ddf83B3AB673c8a8a5Fd1C" + }, + { + "facetName": "ProceedRecipientsKpiLinkedRateFacet", + "key": "0xe2f3e1d9c8b7a6e5f4d3c2b1a9e8f7d6c5b4a3e2f1d9c8b7a6e5f4d3c2b1a9e8", + "address": "0x6083196470f54b6E4516259ABA9Aa45D413f73a7" + }, + { + "facetName": "ProtectedPartitionsKpiLinkedRateFacet", + "key": "0x665aad7ee148905a0af716acbc6abd8f408eadce853caf3f84528a9810ffc436", + "address": "0x9A50708f390bbcB107c1483073F525F1a254B966" + }, + { + "facetName": "ScheduledBalanceAdjustmentsKpiLinkedRateFacet", + "key": "0x3da33aed4e04baa1b9c39bd96d0bc7be51ecaa1468eff7f632c29fb134644cb4", + "address": "0x6E4Aad35A1Ba1Ce48A76f10BAC1bf52883A6d90B" + }, + { + "facetName": "ScheduledCrossOrderedTasksKpiLinkedRateFacet", + "key": "0x04d20e52e58dbadedfcf6c373a826fc5f7c665fd6caf67c8a65a9e777a8b70ec", + "address": "0x7BA48bBbaC4c882e1B7DB2Ea589D33F35846d718" + }, + { + "facetName": "ScheduledCouponListingKpiLinkedRateFacet", + "key": "0x9f42d2f2ae6efad6d2acf0399ec9e5a1bed9e41c68a86b58f1de78da4fe3c598", + "address": "0xe8B3217796a5952B62501F3539d4c381Cb90f87E" + }, + { + "facetName": "ScheduledSnapshotsKpiLinkedRateFacet", + "key": "0xbfb6dd5a6beac6604a320b8363bc0da4093ba327dd037970ad82d422b0d88526", + "address": "0xB65E47ec24D31E2CEdcE07bAFb6fe70c979B934c" + }, + { + "facetName": "SsiManagementKpiLinkedRateFacet", + "key": "0xac0a01362676a7a1370879903993e04310cb7a3b60fc327072dcf7a00ce50e5a", + "address": "0x1eD6e33ae690086096afddF2217Cb879d48e5d05" + }, + { + "facetName": "TransferAndLockKpiLinkedRateFacet", + "key": "0x3e5f7a9b1c2d4e6f8a9b0c1d2e3f4a5b6c7d8e9f0a1b2c3d4e5f6a7b8c9d0e1f", + "address": "0xf6Fa229c4e8B54930021cF5506603fBd009153f9" + }, + { + "facetName": "KpiLinkedRateFacet", + "key": "0x92999bd0329d03e46274ce7743ebe0060df95286df4fa7b354937b7d21757d22", + "address": "0x6a688cb96d610bb4d3051fE8CE27CdD7036daB31" + }, + { + "facetName": "BondUSAKpiLinkedRateFacet", + "key": "0x99c145ff21354eb7b25cb096873143fa3d3aba98457b96bcd13f1d1f2b9bf28c", + "address": "0x3541be91dea0539Dce519AAF3378866870ddE6d9" + }, + { + "facetName": "BondUSAReadKpiLinkedRateFacet", + "key": "0xcced91a2a03bf45bd62730a7f4703ee2d762f8ebccff315c7145258265f73249", + "address": "0x092Ed5F65B49b6916Ec14Fa480E718509DFd8554" + } + ] + }, + "bondSustainabilityPerformanceTargetRate": { + "configId": "0x0000000000000000000000000000000000000000000000000000000000000005", + "version": 1, + "facetCount": 47, + "facets": [ + { + "facetName": "AccessControlSustainabilityPerformanceTargetRateFacet", + "key": "0x9d13e61abd630355ccae4279993868d7cf3b04d4368a0fedcefe6fec3fabaa0c", + "address": "0xba9739A99bEc0E59f70D5Ee1B48f48aA33e21BBF" + }, + { + "facetName": "CapSustainabilityPerformanceTargetRateFacet", + "key": "0xa321c5301bbccd760c5aaf08286a67948cb7d49be22c17f12aa163b324a276d0", + "address": "0x46655BCcc44c32Eb038dF8D06818BdA6696327b5" + }, + { + "facetName": "ControlListSustainabilityPerformanceTargetRateFacet", + "key": "0xe3fbab5a4ccf7a873a9601bf5494c43f6e4b53218ff8310ec97811471397b3cf", + "address": "0x123d2247231C4F05aeb69B1046B17F7013a83f7D" + }, + { + "facetName": "CorporateActionsSustainabilityPerformanceTargetRateFacet", + "key": "0xa4a23267cb0a22c52bd05b12e644136bc38b7ac51218a0cb3aed166697caa79e", + "address": "0x5B8419f2920b20554BEe66E59223bb06eDD60741" + }, + { + "facetName": "DiamondFacet", + "key": "0x1b5212ea37fb29e99afa2812a5d7d7e662a477424d3de1a18cc3871a2ee94d78", + "address": "0x29D17a297087Ee3be9996b9c2468EbC1b77e9CcE" + }, + { + "facetName": "ERC20SustainabilityPerformanceTargetRateFacet", + "key": "0x002a101a46899eecb6af6a76839f76be301e6292a6a5d3eb7a1bae4a0d3574ee", + "address": "0x55Ad66ccF60E8e7349565E1153C91eFAA821ab0C" + }, + { + "facetName": "FreezeSustainabilityPerformanceTargetRateFacet", + "key": "0x25ca5cbe52a82389e142792fdab2ffc58f224f2628f9a92a3f717134cbe229e4", + "address": "0xED7F9682647Cd59A93e81587dA750D348bE47aB5" + }, + { + "facetName": "KycSustainabilityPerformanceTargetRateFacet", + "key": "0x1cb818916342973b46841d2ca9543c702bf6380fb0fc179f356139aa142379c3", + "address": "0xE5d984AC5ABD21f2AC49B1bDB79fed7110715F7b" + }, + { + "facetName": "PauseSustainabilityPerformanceTargetRateFacet", + "key": "0xa16c7f2d6b5ab7f05dd30bd562ac9f3005fe21e3b2bde131733e37c0d42046ee", + "address": "0x2CA4B9F67E762A2a0dF93A4b1bC514e5E6043267" + }, + { + "facetName": "SnapshotsSustainabilityPerformanceTargetRateFacet", + "key": "0xbcc6255960c1cbe69dae32f7db730d14a35fdb81d91cc7e637e5af4d229bcbbe", + "address": "0x10124745dE1C78D7b86043EDddcF7187A2374c24" + }, + { + "facetName": "ERC1410IssuerSustainabilityPerformanceTargetRateFacet", + "key": "0x4d5a3964d29183253487011c31ec3e09977b5eded43c8a3a222a2e53f4282f61", + "address": "0xF3529405b203Aa0B4D5D39CBA6F4361d47c58c87" + }, + { + "facetName": "ERC1410ManagementSustainabilityPerformanceTargetRateFacet", + "key": "0x6768fcc73686ddd306656061b0e415208ded041927d9935de3747583559d0c5e", + "address": "0xc029Ad98adD6540494ABe8D7Ca8F538F899a3214" + }, + { + "facetName": "ERC1410ReadSustainabilityPerformanceTargetRateFacet", + "key": "0x7c15e98edcc41b3177b8cfff7055cd57b47000fd843fce22e7ead13f07e346b6", + "address": "0xe3BB409E0cDCf59bE1866262fD6354a1B07aDf6A" + }, + { + "facetName": "ERC1410TokenHolderSustainabilityPerformanceTargetRateFacet", + "key": "0x6e21f1ca6d12f08b0d36f08711a48500d02dcf7edd2e8b87e4de350b98df4822", + "address": "0xf063B9021753577fbC450631c6005Cd7C5a0Fd96" + }, + { + "facetName": "ERC1594SustainabilityPerformanceTargetRateFacet", + "key": "0x2c5f8a3d6e9b1f4c7a2e5d8b1f4c7a2e5d8b1f4c7a2e5d8b1f4c7a2e5d8b1f4c", + "address": "0x3c84C4C3D9a5719804F2f7C8BF7fB462Ca6eDE0a" + }, + { + "facetName": "ERC1643SustainabilityPerformanceTargetRateFacet", + "key": "0x5f8d2a3e6c9f1d4e7a2f5c8d1e4f7c2e5d8f1e4c7d2f5e8d1f4c7e2d5f8d1f4c", + "address": "0xD84b125b01731Da2b60917D80540041fc6c0743E" + }, + { + "facetName": "ERC1644SustainabilityPerformanceTargetRateFacet", + "key": "0x8b2f5e3d6f9c2e5d8f1e4c7d2e5f8d1f4c7e2d5f8d1f4c7e2d5f8d1f4c7e2d5f", + "address": "0x28f08613Cdf66E6BF362e75d38F6067722670e8C" + }, + { + "facetName": "ERC20PermitSustainabilityPerformanceTargetRateFacet", + "key": "0x3bf8d35ad3c3320d95184dd4f9a0bfc2e56b151318d9d27eefa74461d24f5c61", + "address": "0x6174626dB7BEf0b1FcA2c560c230D8679eeb60Ce" + }, + { + "facetName": "ERC20VotesSustainabilityPerformanceTargetRateFacet", + "key": "0x9d7e0002a7ae9c94734d62ac85bb1cd4c333dd6c5fb308a7a2b60dd77dfa9d44", + "address": "0xD44848e3B3F324A4B0D7Af497eA89996254F00aF" + }, + { + "facetName": "ERC3643BatchSustainabilityPerformanceTargetRateFacet", + "key": "0x500c4c5bff9db733228f1df9b6e818bf8fab883422d3fbe971c036b513e983d9", + "address": "0x42a34CFCB93756a79dEBB7690c1d12a4E7a1Ad88" + }, + { + "facetName": "ERC3643ManagementSustainabilityPerformanceTargetRateFacet", + "key": "0x324a20f20a55098c207cd0bc42498561962995b82918d6a9697320c42c5b11fa", + "address": "0x037D4388384B38C7aB1DD68Ef35fFe2a58C92Ecb" + }, + { + "facetName": "ERC3643OperationsSustainabilityPerformanceTargetRateFacet", + "key": "0xbe85d38775742687362efc4fc0ffed08044614079fc51bbf7b0f29e11d3ffafa", + "address": "0x15c81CC2E32fAd2c2C605e7e1c44Cf52A59D414e" + }, + { + "facetName": "ERC3643ReadSustainabilityPerformanceTargetRateFacet", + "key": "0x2fc56e8abd44d0dc70cf8876ea454caab82a906ec6333516c1feb4de9b4cb4f8", + "address": "0xa005997A28670560f335cAa1Ce0F8210aCE6b1C7" + }, + { + "facetName": "ClearingActionsSustainabilityPerformanceTargetRateFacet", + "key": "0xae9d6d2e1d9a660994e89e185ab5a3439d2def9baa6ba47fdf854ce0a29a5033", + "address": "0x6b164F44DA8f5FeDbe55a471253338CfAC58E682" + }, + { + "facetName": "ClearingHoldCreationSustainabilityPerformanceTargetRateFacet", + "key": "0x0e59e36a2b1298d11c3612c3203c6d45cb185879383f5a22617c4f49495c070d", + "address": "0xCA652Ac837E7324E1197dA3e66318b31DCB40D6F" + }, + { + "facetName": "ClearingReadSustainabilityPerformanceTargetRateFacet", + "key": "0xa188d3ee426a514ccfe03470d196ed29da48de0ae59898d9b5a30ec680515a11", + "address": "0x9e6338457e9b8a18F3524ff8991Bc635236B2Af4" + }, + { + "facetName": "ClearingRedeemSustainabilityPerformanceTargetRateFacet", + "key": "0xc4731d62375990b9721357983c8f6acf3fdc78d7814919c187607f653b768d5d", + "address": "0x61929fDb68816650C4789CD4B85C0ECe76ca2dad" + }, + { + "facetName": "ClearingTransferSustainabilityPerformanceTargetRateFacet", + "key": "0x7e29efe8ee5285a43acddbe766fd9219266a74cb24ed3331b4e350d8e263d0c7", + "address": "0x8973576C1A70E0E37284482d13a1e103CdDd708D" + }, + { + "facetName": "HoldManagementSustainabilityPerformanceTargetRateFacet", + "key": "0x4574524c203fbcc0f5b9f08bcd2b9a9d47c5a9cf3a30eeb540a93a33a8a2f834", + "address": "0x40C98A1878661e07dC476d57087537d0943EE9aD" + }, + { + "facetName": "HoldReadSustainabilityPerformanceTargetRateFacet", + "key": "0x8e7113391652a4d3d8feb1d90990cd06ee33dc67a640b4400f8bfb9fae4f91b2", + "address": "0x0A6B4ecf82e7450FB11336834D6220f0D17290F1" + }, + { + "facetName": "HoldTokenHolderSustainabilityPerformanceTargetRateFacet", + "key": "0x28ae4d4cdc1846ba348a31e222161d8343223560c1875fe3efcad8c5dd5f81e0", + "address": "0xf3D42BAeDF16b787843D5Df50185E3b4372359d1" + }, + { + "facetName": "ExternalControlListManagementSustainabilityPerformanceTargetRateFacet", + "key": "0x2c56accbf6faf923cd323935455dac00c2ddffe08f0becdf49d515e4b4d355af", + "address": "0x159c88787a0Ed2B5082FED5De5af120E5FE21606" + }, + { + "facetName": "ExternalKycListManagementSustainabilityPerformanceTargetRateFacet", + "key": "0x0fcfeebcf118ca3c39fbed0e2a527a866cac42bbd3fcad5f9b4f755ef97f3aa9", + "address": "0x0cD375Ac28F1eF7a0eD51375a23CC75AD6D55eA8" + }, + { + "facetName": "ExternalPauseManagementSustainabilityPerformanceTargetRateFacet", + "key": "0x07846b678053cbd4be5d9d3929fa9af5ab76bb508a0f7957f5239302aad45bc3", + "address": "0x5d65cA79B09678202eb0b8617c08ae7A79f2c20B" + }, + { + "facetName": "AdjustBalancesSustainabilityPerformanceTargetRateFacet", + "key": "0xc9e1f8d7c6b5a4e3f2d1c9b8a7e6f5d4c3b2a1e9f8d7c6b5a4e3f2d1c9b8a7e6", + "address": "0xb7b3dfD9deBB50Af9111Fd90446aB02f4D61E054" + }, + { + "facetName": "LockSustainabilityPerformanceTargetRateFacet", + "key": "0xe73c2eecf92b5b8eb7ecc89b379f70193694f2906188318c3407458267385b82", + "address": "0xdE780AD9Bf2CBEf7Ad7651ea87838112a6F9A236" + }, + { + "facetName": "ProceedRecipientsSustainabilityPerformanceTargetRateFacet", + "key": "0xf3e4f2e1d9c8b7a6e5f4d3c2b1a9e8f7d6c5b4a3e2f1d9c8b7a6e5f4d3c2b1a9", + "address": "0xC3a1538EB62Cf544813bd5cEe080903A963bDf1b" + }, + { + "facetName": "ProtectedPartitionsSustainabilityPerformanceTargetRateFacet", + "key": "0x088ec2750f42a30fde9383e74f4148ce5df963263d426deffc1d29fff61a6538", + "address": "0x002434E63FB979995B6Ca5B8E97e33BEeadfa169" + }, + { + "facetName": "ScheduledBalanceAdjustmentsSustainabilityPerformanceTargetRateFacet", + "key": "0x1168df5bb8a348d137af6e29915c261dc82c495f72484a046ac4f750899625f4", + "address": "0x8857166d612Fc06fF4f8fA16be1320598b0F19Cf" + }, + { + "facetName": "ScheduledCrossOrderedTasksSustainabilityPerformanceTargetRateFacet", + "key": "0x23d3302e505d889e80b20005bf316ccd7cbbd3c547a7305d600e8f0d9bc73267", + "address": "0x2b93A28248FEe250cbBB00F28Ecfc22E2D27dECD" + }, + { + "facetName": "ScheduledCouponListingSustainabilityPerformanceTargetRateFacet", + "key": "0x85c0dee450a5a4657a9de39ca4ba19881b079d55d5bb64641d52f59bea709ba8", + "address": "0x8650509dEa4b8CCf7320De12abc79279A3F5314F" + }, + { + "facetName": "ScheduledSnapshotsSustainabilityPerformanceTargetRateFacet", + "key": "0x99a85df534e32a3b9fce8e80f0cc30d6703e578eb5c641ab2d9e95530d046b4b", + "address": "0xbc12eB96669519575452fAe2172272FBc682656c" + }, + { + "facetName": "SsiManagementSustainabilityPerformanceTargetRateFacet", + "key": "0x5de367269fd9e98ceb172f263a954ee471605474013e206e00340c5914046c8b", + "address": "0x34eC836Bb38B1Ae66e3e97D33c0A658771b1392a" + }, + { + "facetName": "TransferAndLockSustainabilityPerformanceTargetRateFacet", + "key": "0x9d1e3f5a7b9c0d2e4f6a8b0c1d3e5f7a9b0c2d4e6f8a9b1c3d5e7f9a0b2c4d6e", + "address": "0xAa918478F6750E820CfdA70D49eA2E12965ba65E" + }, + { + "facetName": "SustainabilityPerformanceTargetRateFacet", + "key": "0xa261a7434029a925924f47ccea7fbe12af1e56efd74e8f1d8ac23bec19a27e49", + "address": "0xe850afa94cF270A055e591C370250402Dd20A3eB" + }, + { + "facetName": "BondUSASustainabilityPerformanceTargetRateFacet", + "key": "0x8048a878c656dcf3886e69ad27a9272a4fb9499299ab5f0e1b6c99ac3b1130f8", + "address": "0x1D16f76033FB573FC7Ef80A7d298b2f376F04453" + }, + { + "facetName": "BondUSAReadSustainabilityPerformanceTargetRateFacet", + "key": "0x339d458f2928ef5148317aab39e4375a27e6c531d2e5b9de2d4fb23ad0e8b504", + "address": "0x1923016FA697dD2dBaBA394294813F87CA65f999" + } + ] + } + }, + "summary": { + "totalContracts": 3, + "totalFacets": 188, + "totalConfigurations": 5, + "deploymentTime": 2537789, + "gasUsed": "431213212", + "success": true + }, + "helpers": {} +} diff --git a/packages/ats/contracts/deployments/hedera-testnet/newBlr-2026-01-22T11-09-49.json b/packages/ats/contracts/deployments/hedera-testnet/newBlr-2026-01-22T11-09-49.json new file mode 100644 index 000000000..0e365a642 --- /dev/null +++ b/packages/ats/contracts/deployments/hedera-testnet/newBlr-2026-01-22T11-09-49.json @@ -0,0 +1,2403 @@ +{ + "network": "hedera-testnet", + "timestamp": "2026-01-22T11:09:47.752Z", + "deployer": "0xab64B33040083c9F810F766378e7380ad5E1B6FB", + "infrastructure": { + "proxyAdmin": { + "address": "0x76220dAa89df1d0be4C6997Dc401FCB98A586F6a", + "contractId": "0.0.7707872" + }, + "blr": { + "implementation": "0xd53A586C1b11a5E7c34912a466e97c02Ad2d5786", + "implementationContractId": "0.0.7707873", + "proxy": "0xEFEF4CAe9642631Cfc6d997D6207Ee48fa78fe42", + "proxyContractId": "0.0.7707874" + }, + "factory": { + "implementation": "0x3803219f13E23998FdDCa67AdA60EeB8E62eEEA8", + "implementationContractId": "0.0.7708430", + "proxy": "0x5fA65CA30d1984701F10476664327f97c864A9D3", + "proxyContractId": "0.0.7708432" + } + }, + "facets": [ + { + "name": "AccessControlFacet", + "address": "0xFBc8a584144e2b5EF3A64b282DD409fBcAB3b6d8", + "contractId": "0.0.7707875", + "key": "0x011768a41cb4fe76a26f444eec15d81a0d84e919a36336d72c6539cf41c0fcf6" + }, + { + "name": "AccessControlFixedRateFacet", + "address": "0x8BA115C3efF61a1A35DC791689bd92442feae4dC", + "contractId": "0.0.7707876", + "key": "0xb35ad81b5769c62538fe6a90e40db8be624645f77c1738ce582ede5da399ecb2" + }, + { + "name": "AccessControlKpiLinkedRateFacet", + "address": "0x9ea97745CAAeA8893b8201183f7189009ec91a77", + "contractId": "0.0.7707879", + "key": "0x465c95eea6723a1645e5399789cee702b19d0bcd0ad3f894270aa25488fb4ab9" + }, + { + "name": "AccessControlSustainabilityPerformanceTargetRateFacet", + "address": "0x3114b59C636B474448080fdca4d0F3BeF70AC6C7", + "contractId": "0.0.7707881", + "key": "0x9d13e61abd630355ccae4279993868d7cf3b04d4368a0fedcefe6fec3fabaa0c" + }, + { + "name": "AdjustBalancesFacet", + "address": "0x6F4FEA21A9D13551ddbCEAF5E1f7c8997cb8f89A", + "contractId": "0.0.7707884", + "key": "0x2bbe9fb018f1e7dd12b4442154e7fdfd75aec7b0a65d07debf49de4ece5fe8b8" + }, + { + "name": "AdjustBalancesFixedRateFacet", + "address": "0xF2714719C0079f42308F74c0d33439780e528210", + "contractId": "0.0.7707887", + "key": "0xa7e8f6d5c4b3a2e1f9d8c7b6a5e4f3d2c1b9a8e7f6d5c4b3a2e1f9d8c7b6a5e4" + }, + { + "name": "AdjustBalancesKpiLinkedRateFacet", + "address": "0x3fd5b5fC783C482F96e7caa9EA55A9677a0CfD3B", + "contractId": "0.0.7707889", + "key": "0xb8f9e7d6c5b4a3e2f1d9c8b7a6e5f4d3c2b1a9e8f7d6c5b4a3e2f1d9c8b7a6e5" + }, + { + "name": "AdjustBalancesSustainabilityPerformanceTargetRateFacet", + "address": "0xf335085be99733C3beb9D963D0166CC0d9807167", + "contractId": "0.0.7707894", + "key": "0xc9e1f8d7c6b5a4e3f2d1c9b8a7e6f5d4c3b2a1e9f8d7c6b5a4e3f2d1c9b8a7e6" + }, + { + "name": "BondUSAFacet", + "address": "0x6F5D42bC570CB5adcfe4E2df3560660a156b397e", + "contractId": "0.0.7707895", + "key": "0xe6594ee8f54f346ab25268fdc7955031a6b06102355e1446353d89ab1d593de3" + }, + { + "name": "BondUSAFixedRateFacet", + "address": "0x6A3CDA8c906A69695d39730aF37E5719a631e0ba", + "contractId": "0.0.7707897", + "key": "0xd55d8787d23b78e70dada1ade45b8758f5c027e2cddf3556606c07d388ce159a" + }, + { + "name": "BondUSAKpiLinkedRateFacet", + "address": "0x5502A84e5D57bE1502B56998718074f94bA670f8", + "contractId": "0.0.7707903", + "key": "0x99c145ff21354eb7b25cb096873143fa3d3aba98457b96bcd13f1d1f2b9bf28c" + }, + { + "name": "BondUSAReadFacet", + "address": "0x1481BC45C7DF91B00865e34B73D8550FF2928A73", + "contractId": "0.0.7707908", + "key": "0x624866e79d4c0a78a8dc32cbce49563cdf86eba627bd05a9821dbaa1674ac231" + }, + { + "name": "BondUSAReadFixedRateFacet", + "address": "0xc8F1693A4960562b381726f8f879E9cEfdb4F6F3", + "contractId": "0.0.7707913", + "key": "0xd5d703d15aa25ad6419288846269dcbba84f489f1c986be2c919f84c042b8c24" + }, + { + "name": "BondUSAReadKpiLinkedRateFacet", + "address": "0x04233F4b869F354785857D046848295Ea733a3d6", + "contractId": "0.0.7707917", + "key": "0xcced91a2a03bf45bd62730a7f4703ee2d762f8ebccff315c7145258265f73249" + }, + { + "name": "BondUSAReadSustainabilityPerformanceTargetRateFacet", + "address": "0xb5FF43b9186Fa67973E28804a3E2C6A29820C230", + "contractId": "0.0.7707919", + "key": "0x339d458f2928ef5148317aab39e4375a27e6c531d2e5b9de2d4fb23ad0e8b504" + }, + { + "name": "BondUSASustainabilityPerformanceTargetRateFacet", + "address": "0x21afc2C10ae889ccFEC45CEF8379F6b7bdE938e2", + "contractId": "0.0.7707923", + "key": "0x8048a878c656dcf3886e69ad27a9272a4fb9499299ab5f0e1b6c99ac3b1130f8" + }, + { + "name": "CapFacet", + "address": "0xBfF6B66c0e7de7c1d613b28a4049D72d67E175EE", + "contractId": "0.0.7707931", + "key": "0xfb3f8aac36661b5540c571d821c80dc9db7ede5ca2a4204ee562b3356f0c026b" + }, + { + "name": "CapFixedRateFacet", + "address": "0x2Ec232420A3c29BE31312C1f14e0f695B1DC0596", + "contractId": "0.0.7707938", + "key": "0x288b5a4b82f38369168fd49de3e5e68c76fc0394c2e89817b70a65368ba4dcf7" + }, + { + "name": "CapKpiLinkedRateFacet", + "address": "0x67f2d98d9E8301A5a572AF40C6070b5b0AEeB270", + "contractId": "0.0.7707942", + "key": "0xdc8cc0612bf886bcc1666e31c5de3392bee78451de7213b01fe78d560a804435" + }, + { + "name": "CapSustainabilityPerformanceTargetRateFacet", + "address": "0x97426D5B94A5CEaB32E5E02bbAA4bDf3179cfaC0", + "contractId": "0.0.7707946", + "key": "0xa321c5301bbccd760c5aaf08286a67948cb7d49be22c17f12aa163b324a276d0" + }, + { + "name": "ClearingActionsFacet", + "address": "0x8ff1B6821560826Dc5972Ebd3275eBE417c426dB", + "contractId": "0.0.7707950", + "key": "0x5472dfc5c92ad7a8651518ea7d3854d3b6494e5bcaa19f91cd61bf93bf6f2a74" + }, + { + "name": "ClearingActionsFixedRateFacet", + "address": "0x72e9f9E9a4CDaC1fFdDE435b207B9c9F71DEF3dB", + "contractId": "0.0.7707951", + "key": "0x497fbb5ba36b9a6b791669e513c877ebfe079b61e0eb37afbd19b696266a0223" + }, + { + "name": "ClearingActionsKpiLinkedRateFacet", + "address": "0x4d0Eb5Cd49F4ADBEBfeF8787036156eA15211AA8", + "contractId": "0.0.7707952", + "key": "0x4960adcd566163ba9edaee816f8739f1c788cace28ad805c136644de52929faa" + }, + { + "name": "ClearingActionsSustainabilityPerformanceTargetRateFacet", + "address": "0xa844da6de64478887776519EEb89E26372905E6A", + "contractId": "0.0.7707956", + "key": "0xae9d6d2e1d9a660994e89e185ab5a3439d2def9baa6ba47fdf854ce0a29a5033" + }, + { + "name": "ClearingHoldCreationFacet", + "address": "0xb01fBEB87Bb3294FEb06B4A9F955285467eD22a2", + "contractId": "0.0.7707958", + "key": "0x44f99a141c434fac20d69e7511932ee344d5b37b61851976c83a5df4ca468152" + }, + { + "name": "ClearingHoldCreationFixedRateFacet", + "address": "0xaa022D107033A11963f0Eb52f9D717dfF431131F", + "contractId": "0.0.7707959", + "key": "0xf4d60b90b7a9edb9598b8c4aa2a4477e3a65750eab2cce564385f35d882a23c3" + }, + { + "name": "ClearingHoldCreationKpiLinkedRateFacet", + "address": "0xCFa2dEe775A28ae056f4e432A5A968FA234264DD", + "contractId": "0.0.7707961", + "key": "0x1ba40338a89cd18f2799a3e6a86f0be118236340eeff5a19a19a08d3d6e3d08c" + }, + { + "name": "ClearingHoldCreationSustainabilityPerformanceTargetRateFacet", + "address": "0x8CbC476982f6164a15ede5c9081b71815FA4D794", + "contractId": "0.0.7707964", + "key": "0x0e59e36a2b1298d11c3612c3203c6d45cb185879383f5a22617c4f49495c070d" + }, + { + "name": "ClearingReadFacet", + "address": "0xdF43ECaeA815F461E93aAf1B0721D098DC055DBA", + "contractId": "0.0.7707966", + "key": "0xebb2e29bdf4edaf4ca66a3f9b7735087f9d0474d56d856e53c94ef00596c0b1e" + }, + { + "name": "ClearingReadFixedRateFacet", + "address": "0xCDCDDd4558b54181EbF78D502A536506dC7Bb3f4", + "contractId": "0.0.7707967", + "key": "0xcd312e798e5b62ec98cc7c8ac3547a640f68ee74e351b73397be02dab3d5b14f" + }, + { + "name": "ClearingReadKpiLinkedRateFacet", + "address": "0x4CC243AF787D8Eb0e6A773B70EeBdC367FB74219", + "contractId": "0.0.7707972", + "key": "0x3740ea12ff1c9c37f216ba72884079bcaabe99f51cdd9b019be5b218ba5db0e2" + }, + { + "name": "ClearingReadSustainabilityPerformanceTargetRateFacet", + "address": "0x1A71aC2A273D93aF22064c1b2979c3D4ecB59683", + "contractId": "0.0.7707975", + "key": "0xa188d3ee426a514ccfe03470d196ed29da48de0ae59898d9b5a30ec680515a11" + }, + { + "name": "ClearingRedeemFacet", + "address": "0x26835009f2F6268f3ADdBe490A6e30834BAa03f2", + "contractId": "0.0.7707978", + "key": "0xb341e7aa749da43976c189209de51ccdf838af9f964cd27340b914d5b2aeba97" + }, + { + "name": "ClearingRedeemFixedRateFacet", + "address": "0x2bFD1290F6acf669674aCA8E782a8E28170b1e03", + "contractId": "0.0.7707981", + "key": "0xa8edf3401d5e3f8e9a45b0992984a31a2522a24ed793e5e7980f8d66508473c9" + }, + { + "name": "ClearingRedeemKpiLinkedRateFacet", + "address": "0xEB1Cf9d8A47D15F662196cfC365AEaA3A6450A97", + "contractId": "0.0.7707983", + "key": "0xc38aaff0161104c594b7a323af3facf5beb1e304b730fcbee09f5eed74b11375" + }, + { + "name": "ClearingRedeemSustainabilityPerformanceTargetRateFacet", + "address": "0xe26cE3c86872b4AcDF643F93621cAB968f6d3e65", + "contractId": "0.0.7707986", + "key": "0xc4731d62375990b9721357983c8f6acf3fdc78d7814919c187607f653b768d5d" + }, + { + "name": "ClearingTransferFacet", + "address": "0x27DAaa2f3D770853E79af427be6Ce68F37A99e79", + "contractId": "0.0.7707988", + "key": "0x7399d03db62430bec60ca2c3eacf98b1b7e2253f17593ef7a226d759442e0928" + }, + { + "name": "ClearingTransferFixedRateFacet", + "address": "0x9eBc96D39b7150E1323417821D2596aa187A62Cd", + "contractId": "0.0.7707989", + "key": "0x1ba056fe3e7ef86779515a9e7f364e84af0f60eb5f4175ac6d6e6e3f4c05fffb" + }, + { + "name": "ClearingTransferKpiLinkedRateFacet", + "address": "0x6B5e6fDD9a1ae157FBCe92A4cB3431c26728A6d8", + "contractId": "0.0.7707992", + "key": "0x1b229a6d3b8a8ecba97d1e7c2c4a89c4cf71b9b5852317278f57384d728f8bde" + }, + { + "name": "ClearingTransferSustainabilityPerformanceTargetRateFacet", + "address": "0xBeE3de8498E369039AB09874e8E314Cd69251fbb", + "contractId": "0.0.7707994", + "key": "0x7e29efe8ee5285a43acddbe766fd9219266a74cb24ed3331b4e350d8e263d0c7" + }, + { + "name": "ControlListFacet", + "address": "0xE7f6913739AfC7914E11AEC506B2Ea7C5F6e0144", + "contractId": "0.0.7707998", + "key": "0xfbb1491bfcecd95f79409bd5a4b69a4ba1e5573573372f5d2d66c11e3016414c" + }, + { + "name": "ControlListFixedRateFacet", + "address": "0xfc55fA0a9A7770dF528E160AeFAFba8190734988", + "contractId": "0.0.7708002", + "key": "0x083b7e0957ebd3a0f69bf432ce05d94c1848cbdbf0e66664919c4803b14dfdf8" + }, + { + "name": "ControlListKpiLinkedRateFacet", + "address": "0xb90AC9876B0157DE787ac718C4e29F0F7BD6891E", + "contractId": "0.0.7708006", + "key": "0xaaa80b13f9a051b7f9546e92763bedfbe259f511da870cbb1133fe0e79c8eac5" + }, + { + "name": "ControlListSustainabilityPerformanceTargetRateFacet", + "address": "0x64756172d3255F2641D3B1829651acF9b5605dee", + "contractId": "0.0.7708008", + "key": "0xe3fbab5a4ccf7a873a9601bf5494c43f6e4b53218ff8310ec97811471397b3cf" + }, + { + "name": "CorporateActionsFacet", + "address": "0x84144F295023a67d663cE0C1F281A91162b97c48", + "contractId": "0.0.7708010", + "key": "0x3cc74200ccfb5d585a6d170f8824979dbf1b592e0a41eef41cf6d86cf4882077" + }, + { + "name": "CorporateActionsFixedRateFacet", + "address": "0x01284Fd89d54494cA3147165311dbdE8574DD1A1", + "contractId": "0.0.7708012", + "key": "0xd2c0415cebdbb6dcaf014ce92df6bcae060743c622fd7ce954105b71954e0424" + }, + { + "name": "CorporateActionsKpiLinkedRateFacet", + "address": "0xd4CfAD160e3d838c503Cc0D76e35594744E472CD", + "contractId": "0.0.7708013", + "key": "0xf86b1190fb42cc572ccdeac774fdf968c303079b8c5eceaeb1c9f4f9089bb6be" + }, + { + "name": "CorporateActionsSustainabilityPerformanceTargetRateFacet", + "address": "0xD6f74120F25E9a8f81007D7f286B5B7Dfa6B5B37", + "contractId": "0.0.7708015", + "key": "0xa4a23267cb0a22c52bd05b12e644136bc38b7ac51218a0cb3aed166697caa79e" + }, + { + "name": "DiamondCutFacet", + "address": "0x2315FFdcA71c3aC7F10aaA692d6eEe9820137Ab2", + "contractId": "0.0.7708017", + "key": "0xb66fc45b2670ed2c4ce03061121e6c8e53bce06e161f95afad8e57671b64fca8" + }, + { + "name": "DiamondFacet", + "address": "0x3Aca51Adfd4c9a6FE2E48F37C1996A9Eb9274Bda", + "contractId": "0.0.7708019", + "key": "0x1b5212ea37fb29e99afa2812a5d7d7e662a477424d3de1a18cc3871a2ee94d78" + }, + { + "name": "DiamondLoupeFacet", + "address": "0x88406AB9f917b939e310cA719BBf4402b2Dd9480", + "contractId": "0.0.7708020", + "key": "0x086a1dd0b9bfa39267d1de30445a8edeb3a1f50c8a0a82c91f9dee3608e83567" + }, + { + "name": "EquityUSAFacet", + "address": "0xE4EC04dE5117a975E888A822955B6F450bc3db8A", + "contractId": "0.0.7708024", + "key": "0xfe85fe0513f5a5676011f59495ae16b2b93c981c190e99e61903e5603542c810" + }, + { + "name": "ERC1410IssuerFacet", + "address": "0x05Bd35eFe6867448AE918E3Da7f0ef6d630cd1F4", + "contractId": "0.0.7708027", + "key": "0x6e82b75f32c9647cc00b4c3eabbef5a82677f3e91d5d196eb4dd6a0365941344" + }, + { + "name": "ERC1410IssuerFixedRateFacet", + "address": "0x6367fEf7766a31C8601785d767D9AC9dEe3e76c7", + "contractId": "0.0.7708032", + "key": "0xb9c76f134ffdac743e817a2726bdf9f28a48dfea1f9f54b1066e4e0de68f2a06" + }, + { + "name": "ERC1410IssuerKpiLinkedRateFacet", + "address": "0x3348A02e4ad481996f645facf5dC4C489E4cc21f", + "contractId": "0.0.7708037", + "key": "0x97246e7c6950bcc047f6ea198308a7f304bca9f3f13d2ce5d7fdeee9cc9e0828" + }, + { + "name": "ERC1410IssuerSustainabilityPerformanceTargetRateFacet", + "address": "0xAf781b97d12969e3a00799A8a52c4bd13c095Eb0", + "contractId": "0.0.7708040", + "key": "0x4d5a3964d29183253487011c31ec3e09977b5eded43c8a3a222a2e53f4282f61" + }, + { + "name": "ERC1410ManagementFacet", + "address": "0xd522F61738c4aF2503F28035C61602EAD433D43c", + "contractId": "0.0.7708044", + "key": "0x232f8686795d3f197681faf0d8db05655e759f62d709d56b97e5d9cfff29dbf5" + }, + { + "name": "ERC1410ManagementFixedRateFacet", + "address": "0xd7D9B4c202664aFbBA35182522c882449D930935", + "contractId": "0.0.7708047", + "key": "0xf616851e84bfcfb3b33a8cc54c54c34e9168ba2b8d233a0b3daacee27f0266ca" + }, + { + "name": "ERC1410ManagementKpiLinkedRateFacet", + "address": "0x4800F7E439190f042E5bFafd7d3BDee97b78b748", + "contractId": "0.0.7708049", + "key": "0x831449a00c9cf218fe471b13f84f7109b57ad4b1202d4ed93009ee3d53276a2f" + }, + { + "name": "ERC1410ManagementSustainabilityPerformanceTargetRateFacet", + "address": "0xF12b9EBAe37a69B353EE4A6fC5C84f93f6Ae10A9", + "contractId": "0.0.7708051", + "key": "0x6768fcc73686ddd306656061b0e415208ded041927d9935de3747583559d0c5e" + }, + { + "name": "ERC1410ReadFacet", + "address": "0x9B8bD74FdFbdE73B271a4C7C2dB59D22e2661a35", + "contractId": "0.0.7708052", + "key": "0x5eb2734b83ea80c3eb63463a6192b30ab2526cb7a073f0abfda1a404c92ae497" + }, + { + "name": "ERC1410ReadFixedRateFacet", + "address": "0xB89cC49d835a8F41d327BD7bF76B70F85EDA0283", + "contractId": "0.0.7708058", + "key": "0x289451d28da5d8ff4e7759db6b1c418b7871f0d6ad63bf7f75cd411f3d79686d" + }, + { + "name": "ERC1410ReadKpiLinkedRateFacet", + "address": "0xBe83574e36D00e5327C3dCf8275A4C41A6d8538E", + "contractId": "0.0.7708062", + "key": "0x696d9b2b17b535f70254309692c77475c258c27dfa6853bbecc611bc350136cd" + }, + { + "name": "ERC1410ReadSustainabilityPerformanceTargetRateFacet", + "address": "0x1c5152A1f0afAFD50e0cCb7E8EC825F3a9eDB8b4", + "contractId": "0.0.7708064", + "key": "0x7c15e98edcc41b3177b8cfff7055cd57b47000fd843fce22e7ead13f07e346b6" + }, + { + "name": "ERC1410TokenHolderFacet", + "address": "0x40125007B72026A74b7600F44a929C66f6D8D822", + "contractId": "0.0.7708069", + "key": "0x0466bf860d23f1ecbc25f364735e0dc3830d236f09182599831730ddd2792caa" + }, + { + "name": "ERC1410TokenHolderFixedRateFacet", + "address": "0x437709B9fFB8C71D78Bb64D2AF3B4fc35c9D6816", + "contractId": "0.0.7708070", + "key": "0xfd248a6ee4af07046520c6ec6f9b61a009db5407ec2f967775040cd67b66f08d" + }, + { + "name": "ERC1410TokenHolderKpiLinkedRateFacet", + "address": "0xf1aCaafa7B997D51d96611eEf1f1351300669562", + "contractId": "0.0.7708071", + "key": "0x463e4b758e14b6cdc1dd053ae3df476d527be8131eb3b41c64b4cf8019855237" + }, + { + "name": "ERC1410TokenHolderSustainabilityPerformanceTargetRateFacet", + "address": "0xbd7e4C4B2f1387A8948A355eB95CE0e49A42f894", + "contractId": "0.0.7708072", + "key": "0x6e21f1ca6d12f08b0d36f08711a48500d02dcf7edd2e8b87e4de350b98df4822" + }, + { + "name": "ERC1594Facet", + "address": "0x71067d3F29e6BC1c01026cC8E825D02ab7aB2a98", + "contractId": "0.0.7708074", + "key": "0xcb70773e8163595d8bd906e277adeb3935976ad802ee8c29face3dfb0263291f" + }, + { + "name": "ERC1594FixedRateFacet", + "address": "0x108e3117f567972E6C5E6Dd1B95dC6821E85aB23", + "contractId": "0.0.7708077", + "key": "0x7a8f3e6d2c4b1a9e5f7d8c6b4a2e1f9d7c5b3a1e9f7d5c3b1a9e7f5d3c1b9e7f" + }, + { + "name": "ERC1594KpiLinkedRateFacet", + "address": "0xb55041dd988c398115EAbC2A1005db31D65C275b", + "contractId": "0.0.7708079", + "key": "0x1b4e7a9d3f5c2e8a6d4b9f7e5c3a1d8f6e4c2a9d7f5e3c1b8f6d4e2c9a7f5d3e" + }, + { + "name": "ERC1594SustainabilityPerformanceTargetRateFacet", + "address": "0x0dA9690B7b6846563A3F3C715ec5e18c6476eb32", + "contractId": "0.0.7708081", + "key": "0x2c5f8a3d6e9b1f4c7a2e5d8b1f4c7a2e5d8b1f4c7a2e5d8b1f4c7a2e5d8b1f4c" + }, + { + "name": "ERC1643Facet", + "address": "0x5B964bb5aDA74b4929BdAF089437869b8b7Ce2EF", + "contractId": "0.0.7708084", + "key": "0x24543637956a3076689f171d3932b10f22d40f3785d53acebb340f37bed01625" + }, + { + "name": "ERC1643FixedRateFacet", + "address": "0x67EDED8DA74d009902B22EDbdf2e93Bd5C0acAd5", + "contractId": "0.0.7708087", + "key": "0x3d6e9f1c5a8b2e7f4d9c6a3e1f8d5c2a9f6e3d1c8f5e2d9c6f3e1d8c5f2d9c6f" + }, + { + "name": "ERC1643KpiLinkedRateFacet", + "address": "0xc4AFd7406F541ec793353b53E03859Ec9D910984", + "contractId": "0.0.7708090", + "key": "0x4e7f1a2d5c8e3f6a9d2e5f8c1d4a7e2f5c8d1e4f7c2e5d8f1e4c7d2f5e8d1f4e" + }, + { + "name": "ERC1643SustainabilityPerformanceTargetRateFacet", + "address": "0xb5079c6C57DA16EB4B8484A193e46a291BA8bdfA", + "contractId": "0.0.7708091", + "key": "0x5f8d2a3e6c9f1d4e7a2f5c8d1e4f7c2e5d8f1e4c7d2f5e8d1f4c7e2d5f8d1f4c" + }, + { + "name": "ERC1644Facet", + "address": "0xde25f8445a897918d335E9F44FB69cc829096859", + "contractId": "0.0.7708093", + "key": "0xf1da2ed271d62ba0b6597874c96fb6ed7d929e5ec679f4ad8c2c516c72f6736d" + }, + { + "name": "ERC1644FixedRateFacet", + "address": "0xBB33Aa250372504fEee74972bBB7aa54A2b03D41", + "contractId": "0.0.7708094", + "key": "0x6f9e3d1c8a5f2e9d6c3f1e8d5c2f9e6d3f1e8c5f2d9e6c3f1d8e5c2f9d6e3f1d" + }, + { + "name": "ERC1644KpiLinkedRateFacet", + "address": "0xf0315e54CB8E352F6ce25AB4B5fa9Ac7082E1a33", + "contractId": "0.0.7708095", + "key": "0x7a1f4e2d5c8f3e6d9c2f5e8d1f4c7e2d5f8c1f4e7d2e5f8c1e4d7c2f5d8e1f4c" + }, + { + "name": "ERC1644SustainabilityPerformanceTargetRateFacet", + "address": "0x1e69ee4EEe11b2827a111b2EE9Da3fC83b1261c8", + "contractId": "0.0.7708099", + "key": "0x8b2f5e3d6f9c2e5d8f1e4c7d2e5f8d1f4c7e2d5f8d1f4c7e2d5f8d1f4c7e2d5f" + }, + { + "name": "ERC20Facet", + "address": "0x80c26B58a6cC753CBF3DaBE335A7e73e0989e78C", + "contractId": "0.0.7708103", + "key": "0x064c883089ba1a596d9146c7aaa73c19ef8825f374c67a9538787c3d12e68dc5" + }, + { + "name": "ERC20FixedRateFacet", + "address": "0x0a382c39293062ddA996b643ec5c26A4d74FCe31", + "contractId": "0.0.7708105", + "key": "0x3e4f428a95dadb9b2d5121c4067c845270879ee5e180e4c4d03ad40f00160376" + }, + { + "name": "ERC20KpiLinkedRateFacet", + "address": "0x1E9B31fA0E0D856E540D1E4d1b0C229357316a76", + "contractId": "0.0.7708108", + "key": "0xe4565636726032d04f6d265d3ee61c2f046ea49ecb39f4ca68dd4f65713e9620" + }, + { + "name": "ERC20PermitFacet", + "address": "0x446976aAb738686859302b832f1573c4CfdE38eb", + "contractId": "0.0.7708113", + "key": "0xef05f0313623d32145212ed45620c8b2c8c294b3d6955cf26f3d1b0569fbc1fa" + }, + { + "name": "ERC20PermitFixedRateFacet", + "address": "0x6f2136A67acd5761063F078392df137Fad41a1ae", + "contractId": "0.0.7708117", + "key": "0xc85b8a95de0375d3b552d368932ecaeb9fe85d470eb1e89bc29040cb35d168a3" + }, + { + "name": "ERC20PermitKpiLinkedRateFacet", + "address": "0xaAAdE8B0Edbbd2B0c9817E336fD54BF4372CD33c", + "contractId": "0.0.7708122", + "key": "0x468437a5a7a128b245fb2c3ac08cf17e5f2a6983dece41309b58fffa1fca80a9" + }, + { + "name": "ERC20PermitSustainabilityPerformanceTargetRateFacet", + "address": "0xa1dA61Be7f93E0eC2950E02e6B0fa5636AE5c1f0", + "contractId": "0.0.7708124", + "key": "0x3bf8d35ad3c3320d95184dd4f9a0bfc2e56b151318d9d27eefa74461d24f5c61" + }, + { + "name": "ERC20SustainabilityPerformanceTargetRateFacet", + "address": "0x45744350B58b28d9329D7be14317E2Cd62B75f40", + "contractId": "0.0.7708129", + "key": "0x002a101a46899eecb6af6a76839f76be301e6292a6a5d3eb7a1bae4a0d3574ee" + }, + { + "name": "ERC20VotesFacet", + "address": "0xaD879aA503Ed721E44Be34D292679156c3B32eFE", + "contractId": "0.0.7708132", + "key": "0x5cbfbaa435e19a43530a00ac685c9b5252862a94af2053667ded44642a0d9f4c" + }, + { + "name": "ERC20VotesFixedRateFacet", + "address": "0xA3d8902B723fA45a7bbBf0f7CBA5f8bFFd8016B0", + "contractId": "0.0.7708135", + "key": "0xce2bc140ce5298990432f0332c33ccaa813a89e3bc3c0589eb30eabe005d2742" + }, + { + "name": "ERC20VotesKpiLinkedRateFacet", + "address": "0xF912B6BC71E69dFc8bc6C7C7d73A31e943Ab6431", + "contractId": "0.0.7708136", + "key": "0x9d720cb6c08dff4ea63b2b4f3908fa551321fdc478de6b46a67ba5ecb46f82fc" + }, + { + "name": "ERC20VotesSustainabilityPerformanceTargetRateFacet", + "address": "0x45fDdb94835819ce42Eb011a06B67B8a24ca1757", + "contractId": "0.0.7708138", + "key": "0x9d7e0002a7ae9c94734d62ac85bb1cd4c333dd6c5fb308a7a2b60dd77dfa9d44" + }, + { + "name": "ERC3643BatchFacet", + "address": "0xc4b20A751CbD54b7666f5d9B0551ADea885b36bC", + "contractId": "0.0.7708142", + "key": "0x00332311d9f0c311b31b87399043a90feb10341fcbb4d7f4ed6e3c0072a3c392" + }, + { + "name": "ERC3643BatchFixedRateFacet", + "address": "0x6B1c2B25c1Eed6bB75F5a31059f136eDc1088986", + "contractId": "0.0.7708145", + "key": "0x3563ac36f573b2e288846d3437686b6a5137a7c9b5cbcd027816db63e07d4138" + }, + { + "name": "ERC3643BatchKpiLinkedRateFacet", + "address": "0x538C3c31DC33903B676E20846dcBA74a9ba0B0a8", + "contractId": "0.0.7708149", + "key": "0xdf3ace3e8d3a434ee6c69da03060d81e1c8c217c16fad43a2819c0bc545253ae" + }, + { + "name": "ERC3643BatchSustainabilityPerformanceTargetRateFacet", + "address": "0x1E8Cfc6e5C652BDbfed1f090a8Fbc6A23165EAD9", + "contractId": "0.0.7708150", + "key": "0x500c4c5bff9db733228f1df9b6e818bf8fab883422d3fbe971c036b513e983d9" + }, + { + "name": "ERC3643ManagementFacet", + "address": "0x3b04E01B853Babb2aE62Be045E33fbF3A993E8bB", + "contractId": "0.0.7708152", + "key": "0xae7b7d0da6ac02e802a8d85aa821dd5cb84e8448836471680f744f64b678a073" + }, + { + "name": "ERC3643ManagementFixedRateFacet", + "address": "0x08E94ECA4612643Adfe009e082EAC81354F9793A", + "contractId": "0.0.7708153", + "key": "0xb82ec3e8b1d44871bbfe25257f4e57b7d9778bc578af2f0ce9ef218f6b897797" + }, + { + "name": "ERC3643ManagementKpiLinkedRateFacet", + "address": "0x5d24A07A827907d465839f8105536856d6720d18", + "contractId": "0.0.7708155", + "key": "0x649facd691e27202b46bb9e328ca96c6f6dc0aeefdd6cfc15707ee162b7d5103" + }, + { + "name": "ERC3643ManagementSustainabilityPerformanceTargetRateFacet", + "address": "0x0394e106bA41cbDd42fcC18e7c08746F0C7106c1", + "contractId": "0.0.7708157", + "key": "0x324a20f20a55098c207cd0bc42498561962995b82918d6a9697320c42c5b11fa" + }, + { + "name": "ERC3643OperationsFacet", + "address": "0xa1f6D6afA26eABe6CF3120482e2b1715Dabf2D56", + "contractId": "0.0.7708158", + "key": "0xe30b6b8e9e62fb8f017c940c7ffac12709f7ef6ae90beac5570fab25c7384e9c" + }, + { + "name": "ERC3643OperationsFixedRateFacet", + "address": "0xc4a4F17724D5C956e75b33E17E2AdE2611300867", + "contractId": "0.0.7708159", + "key": "0x6524c4b11c24bcfff0472462572cdfbe5c671cad2df1ac54402e8a7b4dc3ee02" + }, + { + "name": "ERC3643OperationsKpiLinkedRateFacet", + "address": "0x6Bf8999e7B429cB1bDa8A1798A2330E050b238A4", + "contractId": "0.0.7708161", + "key": "0x87b7a50a7578f2499b459e665b6b7b809ac635280a2157d21fc5de0fc4b54715" + }, + { + "name": "ERC3643OperationsSustainabilityPerformanceTargetRateFacet", + "address": "0x3aba830c240a4C2BF92F22a67271bebEBbCfCE62", + "contractId": "0.0.7708162", + "key": "0xbe85d38775742687362efc4fc0ffed08044614079fc51bbf7b0f29e11d3ffafa" + }, + { + "name": "ERC3643ReadFacet", + "address": "0xf40750Bbbc2507c951D77BDE332Cc9D39Ad49a37", + "contractId": "0.0.7708163", + "key": "0x7743c4e9ff26ef34c3c482d2c12dabe076035eb44bf1c736722f04c33c20ef6a" + }, + { + "name": "ERC3643ReadFixedRateFacet", + "address": "0x25fFAC625eA2555DE97EAe8a23cef2D6Edc2Ae80", + "contractId": "0.0.7708164", + "key": "0x53569c2059b40a4ccb6382b2180607da114ff92bfa263d7489ec7face7c4cc1f" + }, + { + "name": "ERC3643ReadKpiLinkedRateFacet", + "address": "0x5737FD6Bc59a3FaEb2D1eF1edfbF678e1610417f", + "contractId": "0.0.7708165", + "key": "0x68ba78621a8627653774f3b9800b77ac34bd334ecc2dc4d933f9e30d6197194f" + }, + { + "name": "ERC3643ReadSustainabilityPerformanceTargetRateFacet", + "address": "0x3faa5D6b69dF136e1c30D96Ce24316e237a35B5b", + "contractId": "0.0.7708167", + "key": "0x2fc56e8abd44d0dc70cf8876ea454caab82a906ec6333516c1feb4de9b4cb4f8" + }, + { + "name": "ExternalControlListManagementFacet", + "address": "0x935d90A445A090De253770b67eD7fcdA072afcF4", + "contractId": "0.0.7708168", + "key": "0x490196911bc65200514fb4568861a36670854901dffa91bc27577664fdace575" + }, + { + "name": "ExternalControlListManagementFixedRateFacet", + "address": "0x9641bF0359c69E09C2D04DFFfD9b48Af02508E39", + "contractId": "0.0.7708169", + "key": "0xdb213fa4fc549f5bc27fc79e6094fe6a26e303e8eabc8a86a8de7bb307d570d8" + }, + { + "name": "ExternalControlListManagementKpiLinkedRateFacet", + "address": "0x20043C78e9901c73012Ec294060286b568484F47", + "contractId": "0.0.7708170", + "key": "0x9ecec5a17142ae1072721e064f5e9a3f0795a2bea57673f40a9440b8adec0052" + }, + { + "name": "ExternalControlListManagementSustainabilityPerformanceTargetRateFacet", + "address": "0xCfb7f02cD8c1438DDeBdeea4e51B009f38831833", + "contractId": "0.0.7708172", + "key": "0x2c56accbf6faf923cd323935455dac00c2ddffe08f0becdf49d515e4b4d355af" + }, + { + "name": "ExternalKycListManagementFacet", + "address": "0x29E02810dD4672fa6ab9Fcb8fc71ace507FBC37D", + "contractId": "0.0.7708173", + "key": "0x32f05e55195d945105aff8ac4b041d4680824578bd72c6a34e4aa906a59237f1" + }, + { + "name": "ExternalKycListManagementFixedRateFacet", + "address": "0x85c0EE806eABA33b7e0AA932eD9B55890ba74C77", + "contractId": "0.0.7708175", + "key": "0x4f9cf8c8583a46a60ec88a37a07f91d915dba024a57bdb729a4805603f5c40b2" + }, + { + "name": "ExternalKycListManagementKpiLinkedRateFacet", + "address": "0x9EbD9570CeEB7e7d458Dd33e0D7feb3F8CD3ADe9", + "contractId": "0.0.7708176", + "key": "0xc15c973cec2d75a95d94522af2dc05c535be214a6cce368887f7e7d3ead3a491" + }, + { + "name": "ExternalKycListManagementSustainabilityPerformanceTargetRateFacet", + "address": "0xb58b7D50BfEFEe8493dF7a7009b8910aD4445Fd9", + "contractId": "0.0.7708177", + "key": "0x0fcfeebcf118ca3c39fbed0e2a527a866cac42bbd3fcad5f9b4f755ef97f3aa9" + }, + { + "name": "ExternalPauseManagementFacet", + "address": "0xA3a442fEeA624993b811752E610917c607e73be2", + "contractId": "0.0.7708178", + "key": "0x158025f9e40c5d145e7915a14d5e97459728d98c715d8329359e305df737ee3c" + }, + { + "name": "ExternalPauseManagementFixedRateFacet", + "address": "0x57315a4bB73d90C8a5c5c504A0315d4140425300", + "contractId": "0.0.7708179", + "key": "0x752307e5e93ea6e9b979833cf52e6043f71fd4b983ec32aa685f9b160594e326" + }, + { + "name": "ExternalPauseManagementKpiLinkedRateFacet", + "address": "0x3528055FD632c10874AB4752A01dFe9A39f048be", + "contractId": "0.0.7708181", + "key": "0x549d7aab8deeb4a493aa9765937da4290840d4a6fe04399ef4bb818694d9aee4" + }, + { + "name": "ExternalPauseManagementSustainabilityPerformanceTargetRateFacet", + "address": "0x60D694ccF4cc85972af749B0AbBD0B4B21cc2071", + "contractId": "0.0.7708183", + "key": "0x07846b678053cbd4be5d9d3929fa9af5ab76bb508a0f7957f5239302aad45bc3" + }, + { + "name": "FixedRateFacet", + "address": "0x631286d96424128087e2Bc7b243CAB1ae2032A3d", + "contractId": "0.0.7708185", + "key": "0x2871e1c37f7423765d88b16528db7e80ad8e2bae5ab5d55e26659840c1d6b504" + }, + { + "name": "FreezeFacet", + "address": "0x394268eC838D2d94826bF31d77B740800ba3cFEc", + "contractId": "0.0.7708189", + "key": "0x49f765e7155d979a148049c2a0ebed5e028b11799061897a255f99314f0bd3f1" + }, + { + "name": "FreezeFixedRateFacet", + "address": "0xe729D58D85Db01F400e023F3B3c0c5aE1E3D2C80", + "contractId": "0.0.7708191", + "key": "0xad6f49f17db4659e78d7c82e5414ef50b6bfddf3f3e15adc3d0a0e958f696841" + }, + { + "name": "FreezeKpiLinkedRateFacet", + "address": "0x9240A8DFCA4C195F860044Cd6050E0fd9652396f", + "contractId": "0.0.7708194", + "key": "0xb03614fe7a4412f420f88bc18fc39ab43459dbfdbbdbd0a8e109356b0928272e" + }, + { + "name": "FreezeSustainabilityPerformanceTargetRateFacet", + "address": "0xf2b306706a0F3Ee45443242E6019334800299EBE", + "contractId": "0.0.7708196", + "key": "0x25ca5cbe52a82389e142792fdab2ffc58f224f2628f9a92a3f717134cbe229e4" + }, + { + "name": "HoldManagementFacet", + "address": "0x8C1744E229ac7264AB7ff8424550cA601904aEed", + "contractId": "0.0.7708200", + "key": "0x6c7216c5c52bc8f5019fc2fb333eb5e518e647fd82c807ed7c2a1fe4a03a3860" + }, + { + "name": "HoldManagementFixedRateFacet", + "address": "0xCC990F4A762acEc1da0C05Dd89a39c7fa5e96177", + "contractId": "0.0.7708206", + "key": "0xed113dc152639988cc04869ce8c061c4a3350fe3826e16fc37960453a8d20b50" + }, + { + "name": "HoldManagementKpiLinkedRateFacet", + "address": "0x6C9522dc817c10498D03642e60a71d8178dDd094", + "contractId": "0.0.7708211", + "key": "0xed86feb6fdd55e6a056bda1a5b7149c2d0d6d7d024625b67aa2c567ba0ef2b9e" + }, + { + "name": "HoldManagementSustainabilityPerformanceTargetRateFacet", + "address": "0xDC32788f13C6EE8e0Fb5a20A749b56dBa08f698B", + "contractId": "0.0.7708216", + "key": "0x4574524c203fbcc0f5b9f08bcd2b9a9d47c5a9cf3a30eeb540a93a33a8a2f834" + }, + { + "name": "HoldReadFacet", + "address": "0x83Eeb1544B64523156b7d50Aaa78aE2EA95cdD85", + "contractId": "0.0.7708218", + "key": "0xd8a2714462c01975a075ccd4be2588934afd8074afef746fac089b757b803851" + }, + { + "name": "HoldReadFixedRateFacet", + "address": "0x45a651cc2B50FB2443Ae441D1d9C79Dd641ce541", + "contractId": "0.0.7708224", + "key": "0xcf1b5b7fa2ca417ea3b952a93a6157f237fce01f4944d27160e5101f05335e52" + }, + { + "name": "HoldReadKpiLinkedRateFacet", + "address": "0xd5bA16f1631D028a368f4CfD3c72161839F4c18f", + "contractId": "0.0.7708232", + "key": "0x6b896f9725e5d4f4b5f8cff875e71b5f3284000a933f6ab32c01cdd5f71306d6" + }, + { + "name": "HoldReadSustainabilityPerformanceTargetRateFacet", + "address": "0xE690486d1cF9b94d15810A448e75d8f423Ee16f9", + "contractId": "0.0.7708238", + "key": "0x8e7113391652a4d3d8feb1d90990cd06ee33dc67a640b4400f8bfb9fae4f91b2" + }, + { + "name": "HoldTokenHolderFacet", + "address": "0x170e1749EEE7c2390f89983f802849e2523D7239", + "contractId": "0.0.7708242", + "key": "0x87b17a3ce9a86872f21469d26f005543a22ef5729998559f4ad433d5c4253f3e" + }, + { + "name": "HoldTokenHolderFixedRateFacet", + "address": "0xA0c2401c12508EB2797eff849925DF1604e9C6b5", + "contractId": "0.0.7708245", + "key": "0x0d354aad4576c421c121516a105362711db178c6f0d6e0159d68d9f3ebbda486" + }, + { + "name": "HoldTokenHolderKpiLinkedRateFacet", + "address": "0xff6A22A0eF9004535ED0f6C4F00Fe2db7A0fA642", + "contractId": "0.0.7708248", + "key": "0x09f3820ce986997421b684b2482b6d982f31b5ed27a0d72e2aece5ffb3c8fd39" + }, + { + "name": "HoldTokenHolderSustainabilityPerformanceTargetRateFacet", + "address": "0x8E2AEEE8a10e28c4594B234F34bc0d9B2Bd9E7D8", + "contractId": "0.0.7708250", + "key": "0x28ae4d4cdc1846ba348a31e222161d8343223560c1875fe3efcad8c5dd5f81e0" + }, + { + "name": "KpiLinkedRateFacet", + "address": "0x03108f98EE26bb91915bA178C8bA4B05f76e71a0", + "contractId": "0.0.7708255", + "key": "0x92999bd0329d03e46274ce7743ebe0060df95286df4fa7b354937b7d21757d22" + }, + { + "name": "KpisSustainabilityPerformanceTargetRateFacet", + "address": "0x067c0F71633Fb5b67520cBbd261770FE16C39738", + "contractId": "0.0.7708261", + "key": "0xb668a0e99ee4bce486604d5a7097a4e5d837d1736e0cf43b190b56d0adea78b9" + }, + { + "name": "KycFacet", + "address": "0x855A8D0CA21DDBB5B73Bb0C9DDFdeC89C755D4b0", + "contractId": "0.0.7708263", + "key": "0xf516a0f6b4726244ae916c590cd26c2b593d7d448e46e43714fb9f9435c46e32" + }, + { + "name": "KycFixedRateFacet", + "address": "0x0A418fbb471dE96Cb6dBE692C3737e34BA7B62B1", + "contractId": "0.0.7708267", + "key": "0x76145b42d3591928a90298dbd705c8cdb33be9f5eee50f649fb58ed3f36b9f04" + }, + { + "name": "KycKpiLinkedRateFacet", + "address": "0xD035503635E72b4551A664122a5FE5b674131E0F", + "contractId": "0.0.7708269", + "key": "0x9cf03144d37b7b92d5b438e1f037a64ebdc48c2891bc4b475a15a1cf833574d0" + }, + { + "name": "KycSustainabilityPerformanceTargetRateFacet", + "address": "0x5e3EeE8cF2e7843a5b9D5025E912c0DeDD377DbD", + "contractId": "0.0.7708270", + "key": "0x1cb818916342973b46841d2ca9543c702bf6380fb0fc179f356139aa142379c3" + }, + { + "name": "LockFacet", + "address": "0xfc8B8596bddbFFb546AB079c91C6e564101600A1", + "contractId": "0.0.7708272", + "key": "0xf1364345b3db5ebe5808f2d2d2aaecb9cdb4fddacad1534033060ebc886fc1e9" + }, + { + "name": "LockFixedRateFacet", + "address": "0x0139Db685Cf9F9448917ff8BE82f3Fde31034d1e", + "contractId": "0.0.7708274", + "key": "0x053d181bbb93fc7807aafeac901706f74ec5767053695d2b769bf0fdcf065e4d" + }, + { + "name": "LockKpiLinkedRateFacet", + "address": "0x6Dc7E51A4a70ae4633B59E5B574867dba42121FF", + "contractId": "0.0.7708275", + "key": "0x04caf3f62f31b8b1edd96c39948d89098fd83c1a1b5b76aa39927cf7ad8e9d42" + }, + { + "name": "LockSustainabilityPerformanceTargetRateFacet", + "address": "0xAce15eC36556d3e37e75B4D1C2E3e8C81A006817", + "contractId": "0.0.7708278", + "key": "0xe73c2eecf92b5b8eb7ecc89b379f70193694f2906188318c3407458267385b82" + }, + { + "name": "NoncesFacet", + "address": "0xB9873A154a10E038c5165b07aa6B398C4E75059f", + "contractId": "0.0.7708280", + "key": "0xb235fd4aa74228c048d55d58514cd3393ef934423864ef7ddca6d302041c2bd1" + }, + { + "name": "NoncesFixedRateFacet", + "address": "0x34E1ee5d65178E93D855Ac29ebD759DeCD0c067A", + "contractId": "0.0.7708282", + "key": "0xb13c3f8e56b31e6f487b3586c2eafb6f13c33bf6b0063a62f31fb386b0dab046" + }, + { + "name": "NoncesKpiLinkedRateFacet", + "address": "0x952F589339a1eeAB1F23594e50DdF9A99373bb86", + "contractId": "0.0.7708284", + "key": "0xc267b98bd9bdee7ecfccb0929874a128cc0814cf4bd67274423368452b324dc6" + }, + { + "name": "NoncesSustainabilityPerformanceTargetRateFacet", + "address": "0xd2f6188327210FE75794d19B63Ff34C3a14ca7f8", + "contractId": "0.0.7708285", + "key": "0x631217f1fdd4036273035308e6637d8cdef1927db4eef0af68e5aac13a70892e" + }, + { + "name": "PauseFacet", + "address": "0xE4Da82445Ea67002c0E92FdD8B12093d8E094B89", + "contractId": "0.0.7708286", + "key": "0x9429fd9ef38f89f41bd9ec33fd5c94b287ed1c27a98938da43835ac761b2f92c" + }, + { + "name": "PauseFixedRateFacet", + "address": "0x4c8eB34c8e34c9273f02AB896478881B63EadA9F", + "contractId": "0.0.7708287", + "key": "0x9fd7fc8200742d120881c0cf0a0541bae13e372519d986a5169b23b82ea06f12" + }, + { + "name": "PauseKpiLinkedRateFacet", + "address": "0x0328C3F333bE5F602dc5e3696DC7dd30Fe511f11", + "contractId": "0.0.7708288", + "key": "0x77ff7dc4f2d4a0cb28f09307895b94478d6655e7a545222f97b753a6c90a8f71" + }, + { + "name": "PauseSustainabilityPerformanceTargetRateFacet", + "address": "0x774b46759f0E917AC3F4c3188E776Ee5863b9465", + "contractId": "0.0.7708289", + "key": "0xa16c7f2d6b5ab7f05dd30bd562ac9f3005fe21e3b2bde131733e37c0d42046ee" + }, + { + "name": "ProceedRecipientsFacet", + "address": "0xb6F372FAFFec24a912d9669a224A3097d29ae70B", + "contractId": "0.0.7708291", + "key": "0x87f4b676bf89cd24a01a78fd8e7fb2102c2f6d034be73d16402f7297e0ae625b" + }, + { + "name": "ProceedRecipientsFixedRateFacet", + "address": "0xF88436Fc10BA7fDA85c300A5348C387Cc1993aE0", + "contractId": "0.0.7708292", + "key": "0xd1f2e9d8c7b6a5e4f3d2c1b9a8e7f6d5c4b3a2e1f9d8c7b6a5e4f3d2c1b9a8e7" + }, + { + "name": "ProceedRecipientsKpiLinkedRateFacet", + "address": "0xdc0A1dA98B958AD2eE8f914E0030e966f3819177", + "contractId": "0.0.7708295", + "key": "0xe2f3e1d9c8b7a6e5f4d3c2b1a9e8f7d6c5b4a3e2f1d9c8b7a6e5f4d3c2b1a9e8" + }, + { + "name": "ProceedRecipientsSustainabilityPerformanceTargetRateFacet", + "address": "0x787463F71a5649d9e1831af278A964caEa104C66", + "contractId": "0.0.7708296", + "key": "0xf3e4f2e1d9c8b7a6e5f4d3c2b1a9e8f7d6c5b4a3e2f1d9c8b7a6e5f4d3c2b1a9" + }, + { + "name": "ProtectedPartitionsFacet", + "address": "0x996c699DfCED721c924C0B1e84F15f88BBE96cFB", + "contractId": "0.0.7708297", + "key": "0x6d65d2938c05a4d952aff0845c1baa5bea04d4544db74f8b3b26004d1d58d58f" + }, + { + "name": "ProtectedPartitionsFixedRateFacet", + "address": "0x99f9Ae4eBd6e5B365d48b61E09f3E8034e3246b4", + "contractId": "0.0.7708298", + "key": "0x1f8166e21922daee7192ddd5f8a1ce657013d69d412a4e4f5848ab75f1ca8db3" + }, + { + "name": "ProtectedPartitionsKpiLinkedRateFacet", + "address": "0x1e110c473F348C3F1Dc9eFA4115EeeEdbabf7ECc", + "contractId": "0.0.7708300", + "key": "0x665aad7ee148905a0af716acbc6abd8f408eadce853caf3f84528a9810ffc436" + }, + { + "name": "ProtectedPartitionsSustainabilityPerformanceTargetRateFacet", + "address": "0xa125E3E4b12169C072E6A83f32B98f290E8D72f6", + "contractId": "0.0.7708302", + "key": "0x088ec2750f42a30fde9383e74f4148ce5df963263d426deffc1d29fff61a6538" + }, + { + "name": "ScheduledBalanceAdjustmentsFacet", + "address": "0x7015dc71311A2345752139cfe6f0e7b2bde0D794", + "contractId": "0.0.7708303", + "key": "0xc418e67a48260d700e5f85863ad6fa6593206a4385728f8baba1572d631535e0" + }, + { + "name": "ScheduledBalanceAdjustmentsFixedRateFacet", + "address": "0x5D696C9fd2b7eDE843546343aDacFBcdA2aEd3cF", + "contractId": "0.0.7708305", + "key": "0xb3336a1ececdcd807fd6e81cc57e9392c75bf3fd303a2f5df0b11c0dda87ce7f" + }, + { + "name": "ScheduledBalanceAdjustmentsKpiLinkedRateFacet", + "address": "0xEDc3ba797e83a3E13910b5D390C80a2E86914E1D", + "contractId": "0.0.7708306", + "key": "0x3da33aed4e04baa1b9c39bd96d0bc7be51ecaa1468eff7f632c29fb134644cb4" + }, + { + "name": "ScheduledBalanceAdjustmentsSustainabilityPerformanceTargetRateFacet", + "address": "0x4e71Dc431Ce5c9845F8c69445f79271976FC4D40", + "contractId": "0.0.7708307", + "key": "0x1168df5bb8a348d137af6e29915c261dc82c495f72484a046ac4f750899625f4" + }, + { + "name": "ScheduledCouponListingFacet", + "address": "0x1f8F284177ee5F354Efd7c6466A43bf066312289", + "contractId": "0.0.7708309", + "key": "0x6cc7645ae5bcd122875ce8bd150bd28dda6374546c4c2421e5ae4fdeedb3ab30" + }, + { + "name": "ScheduledCouponListingFixedRateFacet", + "address": "0xE551Ea3fAdD9DEb9781deC668781Be561659bC05", + "contractId": "0.0.7708312", + "key": "0x9c249eccb68ce7eae5f58a9b4fbe1f3b6a6f2a644b36c3f1b3559077b4f4e266" + }, + { + "name": "ScheduledCouponListingKpiLinkedRateFacet", + "address": "0xf1B252a60906f564E99436243e934f1d587C7fD4", + "contractId": "0.0.7708313", + "key": "0x9f42d2f2ae6efad6d2acf0399ec9e5a1bed9e41c68a86b58f1de78da4fe3c598" + }, + { + "name": "ScheduledCouponListingSustainabilityPerformanceTargetRateFacet", + "address": "0x8B139C8F243f99261F7fc8f9395cd1995c879f8D", + "contractId": "0.0.7708316", + "key": "0x85c0dee450a5a4657a9de39ca4ba19881b079d55d5bb64641d52f59bea709ba8" + }, + { + "name": "ScheduledCrossOrderedTasksFacet", + "address": "0x7721e27520918b220119e4d1F7935AD64a8e646C", + "contractId": "0.0.7708323", + "key": "0xa4934195ab83f1497ce5fc99b68d0f41694716bcfba5f232aa6c8e0d4d504f08" + }, + { + "name": "ScheduledCrossOrderedTasksFixedRateFacet", + "address": "0x677574ab5c5D6956AbA8F94c4FDd8Fe10a89D693", + "contractId": "0.0.7708329", + "key": "0x1312a5fa6cd5c7128015b199c47eacbf1636ef5cf437c0ee84c619dfbd372ca0" + }, + { + "name": "ScheduledCrossOrderedTasksKpiLinkedRateFacet", + "address": "0x347ad695dEC93180AC6E83bB1C0f31Cf11807713", + "contractId": "0.0.7708334", + "key": "0x04d20e52e58dbadedfcf6c373a826fc5f7c665fd6caf67c8a65a9e777a8b70ec" + }, + { + "name": "ScheduledCrossOrderedTasksSustainabilityPerformanceTargetRateFacet", + "address": "0x9d2bCfad08Fcc0225Fb71dd3E2c442ef8cd7e554", + "contractId": "0.0.7708336", + "key": "0x23d3302e505d889e80b20005bf316ccd7cbbd3c547a7305d600e8f0d9bc73267" + }, + { + "name": "ScheduledSnapshotsFacet", + "address": "0x0F39f3c194F16A219d592e861ce3806e3B505C36", + "contractId": "0.0.7708339", + "key": "0x100f681e33d02a1124c2c05a537a1229eca89767c5e6e8720066ca74bfb85793" + }, + { + "name": "ScheduledSnapshotsFixedRateFacet", + "address": "0xdA43E0C84E282c9662D97c1e9667170aAf0c751A", + "contractId": "0.0.7708343", + "key": "0xe3f0d8c05423e6bf8dc42fb776a1ce265739fc66f9b501077b207a0c2a56cab6" + }, + { + "name": "ScheduledSnapshotsKpiLinkedRateFacet", + "address": "0x84fF1abCCB02b190bD224711C0e49E76Cc8C28A1", + "contractId": "0.0.7708346", + "key": "0xbfb6dd5a6beac6604a320b8363bc0da4093ba327dd037970ad82d422b0d88526" + }, + { + "name": "ScheduledSnapshotsSustainabilityPerformanceTargetRateFacet", + "address": "0xC415fc3056Fc4319D641AD2805121F29D7751Ada", + "contractId": "0.0.7708348", + "key": "0x99a85df534e32a3b9fce8e80f0cc30d6703e578eb5c641ab2d9e95530d046b4b" + }, + { + "name": "SnapshotsFacet", + "address": "0x3910eDDab03D91DEC9c50d241B491A8C21FD0682", + "contractId": "0.0.7708349", + "key": "0x9a3fc46d83536ef6b87eb4fec37302bfd1a7c18e81ea2da853b911b44cf5b0cf" + }, + { + "name": "SnapshotsFixedRateFacet", + "address": "0x30025C1719A4121D6147548bC1b44738eA2B14Ac", + "contractId": "0.0.7708353", + "key": "0xf9b2659fdf4231d426bc34cef93a8b3f42e5cfaf762f65dbf6537ab3e5ee8348" + }, + { + "name": "SnapshotsKpiLinkedRateFacet", + "address": "0x59393ba976bd76d9BCA1099D812964c9A4cecC9E", + "contractId": "0.0.7708357", + "key": "0x9c0a9b3a98c7e535e4b1a0749f01f63ea94b600fbee8df56d7c18a1f3043ee20" + }, + { + "name": "SnapshotsSustainabilityPerformanceTargetRateFacet", + "address": "0xFA7a7Dc16a0Ec1Eb828B2441174A46F29b850797", + "contractId": "0.0.7708361", + "key": "0xbcc6255960c1cbe69dae32f7db730d14a35fdb81d91cc7e637e5af4d229bcbbe" + }, + { + "name": "SsiManagementFacet", + "address": "0x9f6921FF8609e0B627a626Edc25928b8D05610ea", + "contractId": "0.0.7708365", + "key": "0x77c35dccfcdc80370e925aae86871ef8bc71db0b8e082c073cda906e89bb610e" + }, + { + "name": "SsiManagementFixedRateFacet", + "address": "0x8997b2022479C050a084f4BC70A20aABBcA0483F", + "contractId": "0.0.7708370", + "key": "0xd3c3eb4fde853b08d2509769f85fbcc3147edd847e1e8da89c805628293effb2" + }, + { + "name": "SsiManagementKpiLinkedRateFacet", + "address": "0x1347c94A5cC2BFC013F53654eCEf8b19B8c70511", + "contractId": "0.0.7708377", + "key": "0xac0a01362676a7a1370879903993e04310cb7a3b60fc327072dcf7a00ce50e5a" + }, + { + "name": "SsiManagementSustainabilityPerformanceTargetRateFacet", + "address": "0x2Cbabff934825A5203F623b2e3949ece26De408F", + "contractId": "0.0.7708381", + "key": "0x5de367269fd9e98ceb172f263a954ee471605474013e206e00340c5914046c8b" + }, + { + "name": "SustainabilityPerformanceTargetRateFacet", + "address": "0x0254cB208068C7B5F7003C0a54Dc2Fdc3bDec416", + "contractId": "0.0.7708384", + "key": "0xa261a7434029a925924f47ccea7fbe12af1e56efd74e8f1d8ac23bec19a27e49" + }, + { + "name": "TransferAndLockFacet", + "address": "0x57Fb13493Ce5c672F4fCf8502b3e343Cb11b3880", + "contractId": "0.0.7708386", + "key": "0xd9b300e6bf7a143b8fd8cf1d4ab050e691c862bf0f57a7d49cc08c60efe68d08" + }, + { + "name": "TransferAndLockFixedRateFacet", + "address": "0x8145330F7d28B892dA9d079aFC98AF7d38DD3B65", + "contractId": "0.0.7708388", + "key": "0x8c3d5e9f2a6b1c4d7e8f9a2b3c4d5e6f7a8b9c0d1e2f3a4b5c6d7e8f9a0b1c2d" + }, + { + "name": "TransferAndLockKpiLinkedRateFacet", + "address": "0x762A8c0652dfA946A86e34077a1B984E9e57836E", + "contractId": "0.0.7708390", + "key": "0x3e5f7a9b1c2d4e6f8a9b0c1d2e3f4a5b6c7d8e9f0a1b2c3d4e5f6a7b8c9d0e1f" + }, + { + "name": "TransferAndLockSustainabilityPerformanceTargetRateFacet", + "address": "0x39785F067Be400FD71C1e12a930Be3f752146F65", + "contractId": "0.0.7708392", + "key": "0x9d1e3f5a7b9c0d2e4f6a8b0c1d3e5f7a9b0c2d4e6f8a9b1c3d5e7f9a0b2c4d6e" + } + ], + "configurations": { + "equity": { + "configId": "0x0000000000000000000000000000000000000000000000000000000000000001", + "version": 1, + "facetCount": 44, + "facets": [ + { + "facetName": "AccessControlFacet", + "key": "0x011768a41cb4fe76a26f444eec15d81a0d84e919a36336d72c6539cf41c0fcf6", + "address": "0xFBc8a584144e2b5EF3A64b282DD409fBcAB3b6d8" + }, + { + "facetName": "CapFacet", + "key": "0xfb3f8aac36661b5540c571d821c80dc9db7ede5ca2a4204ee562b3356f0c026b", + "address": "0xBfF6B66c0e7de7c1d613b28a4049D72d67E175EE" + }, + { + "facetName": "ControlListFacet", + "key": "0xfbb1491bfcecd95f79409bd5a4b69a4ba1e5573573372f5d2d66c11e3016414c", + "address": "0xE7f6913739AfC7914E11AEC506B2Ea7C5F6e0144" + }, + { + "facetName": "CorporateActionsFacet", + "key": "0x3cc74200ccfb5d585a6d170f8824979dbf1b592e0a41eef41cf6d86cf4882077", + "address": "0x84144F295023a67d663cE0C1F281A91162b97c48" + }, + { + "facetName": "DiamondFacet", + "key": "0x1b5212ea37fb29e99afa2812a5d7d7e662a477424d3de1a18cc3871a2ee94d78", + "address": "0x3Aca51Adfd4c9a6FE2E48F37C1996A9Eb9274Bda" + }, + { + "facetName": "ERC20Facet", + "key": "0x064c883089ba1a596d9146c7aaa73c19ef8825f374c67a9538787c3d12e68dc5", + "address": "0x80c26B58a6cC753CBF3DaBE335A7e73e0989e78C" + }, + { + "facetName": "FreezeFacet", + "key": "0x49f765e7155d979a148049c2a0ebed5e028b11799061897a255f99314f0bd3f1", + "address": "0x394268eC838D2d94826bF31d77B740800ba3cFEc" + }, + { + "facetName": "KycFacet", + "key": "0xf516a0f6b4726244ae916c590cd26c2b593d7d448e46e43714fb9f9435c46e32", + "address": "0x855A8D0CA21DDBB5B73Bb0C9DDFdeC89C755D4b0" + }, + { + "facetName": "PauseFacet", + "key": "0x9429fd9ef38f89f41bd9ec33fd5c94b287ed1c27a98938da43835ac761b2f92c", + "address": "0xE4Da82445Ea67002c0E92FdD8B12093d8E094B89" + }, + { + "facetName": "SnapshotsFacet", + "key": "0x9a3fc46d83536ef6b87eb4fec37302bfd1a7c18e81ea2da853b911b44cf5b0cf", + "address": "0x3910eDDab03D91DEC9c50d241B491A8C21FD0682" + }, + { + "facetName": "ERC1410IssuerFacet", + "key": "0x6e82b75f32c9647cc00b4c3eabbef5a82677f3e91d5d196eb4dd6a0365941344", + "address": "0x05Bd35eFe6867448AE918E3Da7f0ef6d630cd1F4" + }, + { + "facetName": "ERC1410ManagementFacet", + "key": "0x232f8686795d3f197681faf0d8db05655e759f62d709d56b97e5d9cfff29dbf5", + "address": "0xd522F61738c4aF2503F28035C61602EAD433D43c" + }, + { + "facetName": "ERC1410ReadFacet", + "key": "0x5eb2734b83ea80c3eb63463a6192b30ab2526cb7a073f0abfda1a404c92ae497", + "address": "0x9B8bD74FdFbdE73B271a4C7C2dB59D22e2661a35" + }, + { + "facetName": "ERC1410TokenHolderFacet", + "key": "0x0466bf860d23f1ecbc25f364735e0dc3830d236f09182599831730ddd2792caa", + "address": "0x40125007B72026A74b7600F44a929C66f6D8D822" + }, + { + "facetName": "ERC1594Facet", + "key": "0xcb70773e8163595d8bd906e277adeb3935976ad802ee8c29face3dfb0263291f", + "address": "0x71067d3F29e6BC1c01026cC8E825D02ab7aB2a98" + }, + { + "facetName": "ERC1643Facet", + "key": "0x24543637956a3076689f171d3932b10f22d40f3785d53acebb340f37bed01625", + "address": "0x5B964bb5aDA74b4929BdAF089437869b8b7Ce2EF" + }, + { + "facetName": "ERC1644Facet", + "key": "0xf1da2ed271d62ba0b6597874c96fb6ed7d929e5ec679f4ad8c2c516c72f6736d", + "address": "0xde25f8445a897918d335E9F44FB69cc829096859" + }, + { + "facetName": "ERC20PermitFacet", + "key": "0xef05f0313623d32145212ed45620c8b2c8c294b3d6955cf26f3d1b0569fbc1fa", + "address": "0x446976aAb738686859302b832f1573c4CfdE38eb" + }, + { + "facetName": "NoncesFacet", + "key": "0xb235fd4aa74228c048d55d58514cd3393ef934423864ef7ddca6d302041c2bd1", + "address": "0xB9873A154a10E038c5165b07aa6B398C4E75059f" + }, + { + "facetName": "ERC20VotesFacet", + "key": "0x5cbfbaa435e19a43530a00ac685c9b5252862a94af2053667ded44642a0d9f4c", + "address": "0xaD879aA503Ed721E44Be34D292679156c3B32eFE" + }, + { + "facetName": "ERC3643BatchFacet", + "key": "0x00332311d9f0c311b31b87399043a90feb10341fcbb4d7f4ed6e3c0072a3c392", + "address": "0xc4b20A751CbD54b7666f5d9B0551ADea885b36bC" + }, + { + "facetName": "ERC3643ManagementFacet", + "key": "0xae7b7d0da6ac02e802a8d85aa821dd5cb84e8448836471680f744f64b678a073", + "address": "0x3b04E01B853Babb2aE62Be045E33fbF3A993E8bB" + }, + { + "facetName": "ERC3643OperationsFacet", + "key": "0xe30b6b8e9e62fb8f017c940c7ffac12709f7ef6ae90beac5570fab25c7384e9c", + "address": "0xa1f6D6afA26eABe6CF3120482e2b1715Dabf2D56" + }, + { + "facetName": "ERC3643ReadFacet", + "key": "0x7743c4e9ff26ef34c3c482d2c12dabe076035eb44bf1c736722f04c33c20ef6a", + "address": "0xf40750Bbbc2507c951D77BDE332Cc9D39Ad49a37" + }, + { + "facetName": "ClearingActionsFacet", + "key": "0x5472dfc5c92ad7a8651518ea7d3854d3b6494e5bcaa19f91cd61bf93bf6f2a74", + "address": "0x8ff1B6821560826Dc5972Ebd3275eBE417c426dB" + }, + { + "facetName": "ClearingHoldCreationFacet", + "key": "0x44f99a141c434fac20d69e7511932ee344d5b37b61851976c83a5df4ca468152", + "address": "0xb01fBEB87Bb3294FEb06B4A9F955285467eD22a2" + }, + { + "facetName": "ClearingReadFacet", + "key": "0xebb2e29bdf4edaf4ca66a3f9b7735087f9d0474d56d856e53c94ef00596c0b1e", + "address": "0xdF43ECaeA815F461E93aAf1B0721D098DC055DBA" + }, + { + "facetName": "ClearingRedeemFacet", + "key": "0xb341e7aa749da43976c189209de51ccdf838af9f964cd27340b914d5b2aeba97", + "address": "0x26835009f2F6268f3ADdBe490A6e30834BAa03f2" + }, + { + "facetName": "ClearingTransferFacet", + "key": "0x7399d03db62430bec60ca2c3eacf98b1b7e2253f17593ef7a226d759442e0928", + "address": "0x27DAaa2f3D770853E79af427be6Ce68F37A99e79" + }, + { + "facetName": "HoldManagementFacet", + "key": "0x6c7216c5c52bc8f5019fc2fb333eb5e518e647fd82c807ed7c2a1fe4a03a3860", + "address": "0x8C1744E229ac7264AB7ff8424550cA601904aEed" + }, + { + "facetName": "HoldReadFacet", + "key": "0xd8a2714462c01975a075ccd4be2588934afd8074afef746fac089b757b803851", + "address": "0x83Eeb1544B64523156b7d50Aaa78aE2EA95cdD85" + }, + { + "facetName": "HoldTokenHolderFacet", + "key": "0x87b17a3ce9a86872f21469d26f005543a22ef5729998559f4ad433d5c4253f3e", + "address": "0x170e1749EEE7c2390f89983f802849e2523D7239" + }, + { + "facetName": "ExternalControlListManagementFacet", + "key": "0x490196911bc65200514fb4568861a36670854901dffa91bc27577664fdace575", + "address": "0x935d90A445A090De253770b67eD7fcdA072afcF4" + }, + { + "facetName": "ExternalKycListManagementFacet", + "key": "0x32f05e55195d945105aff8ac4b041d4680824578bd72c6a34e4aa906a59237f1", + "address": "0x29E02810dD4672fa6ab9Fcb8fc71ace507FBC37D" + }, + { + "facetName": "ExternalPauseManagementFacet", + "key": "0x158025f9e40c5d145e7915a14d5e97459728d98c715d8329359e305df737ee3c", + "address": "0xA3a442fEeA624993b811752E610917c607e73be2" + }, + { + "facetName": "AdjustBalancesFacet", + "key": "0x2bbe9fb018f1e7dd12b4442154e7fdfd75aec7b0a65d07debf49de4ece5fe8b8", + "address": "0x6F4FEA21A9D13551ddbCEAF5E1f7c8997cb8f89A" + }, + { + "facetName": "LockFacet", + "key": "0xf1364345b3db5ebe5808f2d2d2aaecb9cdb4fddacad1534033060ebc886fc1e9", + "address": "0xfc8B8596bddbFFb546AB079c91C6e564101600A1" + }, + { + "facetName": "ProtectedPartitionsFacet", + "key": "0x6d65d2938c05a4d952aff0845c1baa5bea04d4544db74f8b3b26004d1d58d58f", + "address": "0x996c699DfCED721c924C0B1e84F15f88BBE96cFB" + }, + { + "facetName": "ScheduledBalanceAdjustmentsFacet", + "key": "0xc418e67a48260d700e5f85863ad6fa6593206a4385728f8baba1572d631535e0", + "address": "0x7015dc71311A2345752139cfe6f0e7b2bde0D794" + }, + { + "facetName": "ScheduledCrossOrderedTasksFacet", + "key": "0xa4934195ab83f1497ce5fc99b68d0f41694716bcfba5f232aa6c8e0d4d504f08", + "address": "0x7721e27520918b220119e4d1F7935AD64a8e646C" + }, + { + "facetName": "ScheduledSnapshotsFacet", + "key": "0x100f681e33d02a1124c2c05a537a1229eca89767c5e6e8720066ca74bfb85793", + "address": "0x0F39f3c194F16A219d592e861ce3806e3B505C36" + }, + { + "facetName": "SsiManagementFacet", + "key": "0x77c35dccfcdc80370e925aae86871ef8bc71db0b8e082c073cda906e89bb610e", + "address": "0x9f6921FF8609e0B627a626Edc25928b8D05610ea" + }, + { + "facetName": "TransferAndLockFacet", + "key": "0xd9b300e6bf7a143b8fd8cf1d4ab050e691c862bf0f57a7d49cc08c60efe68d08", + "address": "0x57Fb13493Ce5c672F4fCf8502b3e343Cb11b3880" + }, + { + "facetName": "EquityUSAFacet", + "key": "0xfe85fe0513f5a5676011f59495ae16b2b93c981c190e99e61903e5603542c810", + "address": "0xE4EC04dE5117a975E888A822955B6F450bc3db8A" + } + ] + }, + "bond": { + "configId": "0x0000000000000000000000000000000000000000000000000000000000000002", + "version": 1, + "facetCount": 47, + "facets": [ + { + "facetName": "AccessControlFacet", + "key": "0x011768a41cb4fe76a26f444eec15d81a0d84e919a36336d72c6539cf41c0fcf6", + "address": "0xFBc8a584144e2b5EF3A64b282DD409fBcAB3b6d8" + }, + { + "facetName": "CapFacet", + "key": "0xfb3f8aac36661b5540c571d821c80dc9db7ede5ca2a4204ee562b3356f0c026b", + "address": "0xBfF6B66c0e7de7c1d613b28a4049D72d67E175EE" + }, + { + "facetName": "ControlListFacet", + "key": "0xfbb1491bfcecd95f79409bd5a4b69a4ba1e5573573372f5d2d66c11e3016414c", + "address": "0xE7f6913739AfC7914E11AEC506B2Ea7C5F6e0144" + }, + { + "facetName": "CorporateActionsFacet", + "key": "0x3cc74200ccfb5d585a6d170f8824979dbf1b592e0a41eef41cf6d86cf4882077", + "address": "0x84144F295023a67d663cE0C1F281A91162b97c48" + }, + { + "facetName": "DiamondFacet", + "key": "0x1b5212ea37fb29e99afa2812a5d7d7e662a477424d3de1a18cc3871a2ee94d78", + "address": "0x3Aca51Adfd4c9a6FE2E48F37C1996A9Eb9274Bda" + }, + { + "facetName": "ERC20Facet", + "key": "0x064c883089ba1a596d9146c7aaa73c19ef8825f374c67a9538787c3d12e68dc5", + "address": "0x80c26B58a6cC753CBF3DaBE335A7e73e0989e78C" + }, + { + "facetName": "FreezeFacet", + "key": "0x49f765e7155d979a148049c2a0ebed5e028b11799061897a255f99314f0bd3f1", + "address": "0x394268eC838D2d94826bF31d77B740800ba3cFEc" + }, + { + "facetName": "KycFacet", + "key": "0xf516a0f6b4726244ae916c590cd26c2b593d7d448e46e43714fb9f9435c46e32", + "address": "0x855A8D0CA21DDBB5B73Bb0C9DDFdeC89C755D4b0" + }, + { + "facetName": "PauseFacet", + "key": "0x9429fd9ef38f89f41bd9ec33fd5c94b287ed1c27a98938da43835ac761b2f92c", + "address": "0xE4Da82445Ea67002c0E92FdD8B12093d8E094B89" + }, + { + "facetName": "SnapshotsFacet", + "key": "0x9a3fc46d83536ef6b87eb4fec37302bfd1a7c18e81ea2da853b911b44cf5b0cf", + "address": "0x3910eDDab03D91DEC9c50d241B491A8C21FD0682" + }, + { + "facetName": "ERC1410IssuerFacet", + "key": "0x6e82b75f32c9647cc00b4c3eabbef5a82677f3e91d5d196eb4dd6a0365941344", + "address": "0x05Bd35eFe6867448AE918E3Da7f0ef6d630cd1F4" + }, + { + "facetName": "ERC1410ManagementFacet", + "key": "0x232f8686795d3f197681faf0d8db05655e759f62d709d56b97e5d9cfff29dbf5", + "address": "0xd522F61738c4aF2503F28035C61602EAD433D43c" + }, + { + "facetName": "ERC1410ReadFacet", + "key": "0x5eb2734b83ea80c3eb63463a6192b30ab2526cb7a073f0abfda1a404c92ae497", + "address": "0x9B8bD74FdFbdE73B271a4C7C2dB59D22e2661a35" + }, + { + "facetName": "ERC1410TokenHolderFacet", + "key": "0x0466bf860d23f1ecbc25f364735e0dc3830d236f09182599831730ddd2792caa", + "address": "0x40125007B72026A74b7600F44a929C66f6D8D822" + }, + { + "facetName": "ERC1594Facet", + "key": "0xcb70773e8163595d8bd906e277adeb3935976ad802ee8c29face3dfb0263291f", + "address": "0x71067d3F29e6BC1c01026cC8E825D02ab7aB2a98" + }, + { + "facetName": "ERC1643Facet", + "key": "0x24543637956a3076689f171d3932b10f22d40f3785d53acebb340f37bed01625", + "address": "0x5B964bb5aDA74b4929BdAF089437869b8b7Ce2EF" + }, + { + "facetName": "ERC1644Facet", + "key": "0xf1da2ed271d62ba0b6597874c96fb6ed7d929e5ec679f4ad8c2c516c72f6736d", + "address": "0xde25f8445a897918d335E9F44FB69cc829096859" + }, + { + "facetName": "ERC20PermitFacet", + "key": "0xef05f0313623d32145212ed45620c8b2c8c294b3d6955cf26f3d1b0569fbc1fa", + "address": "0x446976aAb738686859302b832f1573c4CfdE38eb" + }, + { + "facetName": "NoncesFacet", + "key": "0xb235fd4aa74228c048d55d58514cd3393ef934423864ef7ddca6d302041c2bd1", + "address": "0xB9873A154a10E038c5165b07aa6B398C4E75059f" + }, + { + "facetName": "ERC20VotesFacet", + "key": "0x5cbfbaa435e19a43530a00ac685c9b5252862a94af2053667ded44642a0d9f4c", + "address": "0xaD879aA503Ed721E44Be34D292679156c3B32eFE" + }, + { + "facetName": "ERC3643BatchFacet", + "key": "0x00332311d9f0c311b31b87399043a90feb10341fcbb4d7f4ed6e3c0072a3c392", + "address": "0xc4b20A751CbD54b7666f5d9B0551ADea885b36bC" + }, + { + "facetName": "ERC3643ManagementFacet", + "key": "0xae7b7d0da6ac02e802a8d85aa821dd5cb84e8448836471680f744f64b678a073", + "address": "0x3b04E01B853Babb2aE62Be045E33fbF3A993E8bB" + }, + { + "facetName": "ERC3643OperationsFacet", + "key": "0xe30b6b8e9e62fb8f017c940c7ffac12709f7ef6ae90beac5570fab25c7384e9c", + "address": "0xa1f6D6afA26eABe6CF3120482e2b1715Dabf2D56" + }, + { + "facetName": "ERC3643ReadFacet", + "key": "0x7743c4e9ff26ef34c3c482d2c12dabe076035eb44bf1c736722f04c33c20ef6a", + "address": "0xf40750Bbbc2507c951D77BDE332Cc9D39Ad49a37" + }, + { + "facetName": "ClearingActionsFacet", + "key": "0x5472dfc5c92ad7a8651518ea7d3854d3b6494e5bcaa19f91cd61bf93bf6f2a74", + "address": "0x8ff1B6821560826Dc5972Ebd3275eBE417c426dB" + }, + { + "facetName": "ClearingHoldCreationFacet", + "key": "0x44f99a141c434fac20d69e7511932ee344d5b37b61851976c83a5df4ca468152", + "address": "0xb01fBEB87Bb3294FEb06B4A9F955285467eD22a2" + }, + { + "facetName": "ClearingReadFacet", + "key": "0xebb2e29bdf4edaf4ca66a3f9b7735087f9d0474d56d856e53c94ef00596c0b1e", + "address": "0xdF43ECaeA815F461E93aAf1B0721D098DC055DBA" + }, + { + "facetName": "ClearingRedeemFacet", + "key": "0xb341e7aa749da43976c189209de51ccdf838af9f964cd27340b914d5b2aeba97", + "address": "0x26835009f2F6268f3ADdBe490A6e30834BAa03f2" + }, + { + "facetName": "ClearingTransferFacet", + "key": "0x7399d03db62430bec60ca2c3eacf98b1b7e2253f17593ef7a226d759442e0928", + "address": "0x27DAaa2f3D770853E79af427be6Ce68F37A99e79" + }, + { + "facetName": "HoldManagementFacet", + "key": "0x6c7216c5c52bc8f5019fc2fb333eb5e518e647fd82c807ed7c2a1fe4a03a3860", + "address": "0x8C1744E229ac7264AB7ff8424550cA601904aEed" + }, + { + "facetName": "HoldReadFacet", + "key": "0xd8a2714462c01975a075ccd4be2588934afd8074afef746fac089b757b803851", + "address": "0x83Eeb1544B64523156b7d50Aaa78aE2EA95cdD85" + }, + { + "facetName": "HoldTokenHolderFacet", + "key": "0x87b17a3ce9a86872f21469d26f005543a22ef5729998559f4ad433d5c4253f3e", + "address": "0x170e1749EEE7c2390f89983f802849e2523D7239" + }, + { + "facetName": "ExternalControlListManagementFacet", + "key": "0x490196911bc65200514fb4568861a36670854901dffa91bc27577664fdace575", + "address": "0x935d90A445A090De253770b67eD7fcdA072afcF4" + }, + { + "facetName": "ExternalKycListManagementFacet", + "key": "0x32f05e55195d945105aff8ac4b041d4680824578bd72c6a34e4aa906a59237f1", + "address": "0x29E02810dD4672fa6ab9Fcb8fc71ace507FBC37D" + }, + { + "facetName": "ExternalPauseManagementFacet", + "key": "0x158025f9e40c5d145e7915a14d5e97459728d98c715d8329359e305df737ee3c", + "address": "0xA3a442fEeA624993b811752E610917c607e73be2" + }, + { + "facetName": "AdjustBalancesFacet", + "key": "0x2bbe9fb018f1e7dd12b4442154e7fdfd75aec7b0a65d07debf49de4ece5fe8b8", + "address": "0x6F4FEA21A9D13551ddbCEAF5E1f7c8997cb8f89A" + }, + { + "facetName": "LockFacet", + "key": "0xf1364345b3db5ebe5808f2d2d2aaecb9cdb4fddacad1534033060ebc886fc1e9", + "address": "0xfc8B8596bddbFFb546AB079c91C6e564101600A1" + }, + { + "facetName": "ProceedRecipientsFacet", + "key": "0x87f4b676bf89cd24a01a78fd8e7fb2102c2f6d034be73d16402f7297e0ae625b", + "address": "0xb6F372FAFFec24a912d9669a224A3097d29ae70B" + }, + { + "facetName": "ProtectedPartitionsFacet", + "key": "0x6d65d2938c05a4d952aff0845c1baa5bea04d4544db74f8b3b26004d1d58d58f", + "address": "0x996c699DfCED721c924C0B1e84F15f88BBE96cFB" + }, + { + "facetName": "ScheduledBalanceAdjustmentsFacet", + "key": "0xc418e67a48260d700e5f85863ad6fa6593206a4385728f8baba1572d631535e0", + "address": "0x7015dc71311A2345752139cfe6f0e7b2bde0D794" + }, + { + "facetName": "ScheduledCrossOrderedTasksFacet", + "key": "0xa4934195ab83f1497ce5fc99b68d0f41694716bcfba5f232aa6c8e0d4d504f08", + "address": "0x7721e27520918b220119e4d1F7935AD64a8e646C" + }, + { + "facetName": "ScheduledCouponListingFacet", + "key": "0x6cc7645ae5bcd122875ce8bd150bd28dda6374546c4c2421e5ae4fdeedb3ab30", + "address": "0x1f8F284177ee5F354Efd7c6466A43bf066312289" + }, + { + "facetName": "ScheduledSnapshotsFacet", + "key": "0x100f681e33d02a1124c2c05a537a1229eca89767c5e6e8720066ca74bfb85793", + "address": "0x0F39f3c194F16A219d592e861ce3806e3B505C36" + }, + { + "facetName": "SsiManagementFacet", + "key": "0x77c35dccfcdc80370e925aae86871ef8bc71db0b8e082c073cda906e89bb610e", + "address": "0x9f6921FF8609e0B627a626Edc25928b8D05610ea" + }, + { + "facetName": "TransferAndLockFacet", + "key": "0xd9b300e6bf7a143b8fd8cf1d4ab050e691c862bf0f57a7d49cc08c60efe68d08", + "address": "0x57Fb13493Ce5c672F4fCf8502b3e343Cb11b3880" + }, + { + "facetName": "BondUSAFacet", + "key": "0xe6594ee8f54f346ab25268fdc7955031a6b06102355e1446353d89ab1d593de3", + "address": "0x6F5D42bC570CB5adcfe4E2df3560660a156b397e" + }, + { + "facetName": "BondUSAReadFacet", + "key": "0x624866e79d4c0a78a8dc32cbce49563cdf86eba627bd05a9821dbaa1674ac231", + "address": "0x1481BC45C7DF91B00865e34B73D8550FF2928A73" + } + ] + }, + "bondFixedRate": { + "configId": "0x0000000000000000000000000000000000000000000000000000000000000003", + "version": 1, + "facetCount": 48, + "facets": [ + { + "facetName": "AccessControlFixedRateFacet", + "key": "0xb35ad81b5769c62538fe6a90e40db8be624645f77c1738ce582ede5da399ecb2", + "address": "0x8BA115C3efF61a1A35DC791689bd92442feae4dC" + }, + { + "facetName": "CapFixedRateFacet", + "key": "0x288b5a4b82f38369168fd49de3e5e68c76fc0394c2e89817b70a65368ba4dcf7", + "address": "0x2Ec232420A3c29BE31312C1f14e0f695B1DC0596" + }, + { + "facetName": "ControlListFixedRateFacet", + "key": "0x083b7e0957ebd3a0f69bf432ce05d94c1848cbdbf0e66664919c4803b14dfdf8", + "address": "0xfc55fA0a9A7770dF528E160AeFAFba8190734988" + }, + { + "facetName": "CorporateActionsFixedRateFacet", + "key": "0xd2c0415cebdbb6dcaf014ce92df6bcae060743c622fd7ce954105b71954e0424", + "address": "0x01284Fd89d54494cA3147165311dbdE8574DD1A1" + }, + { + "facetName": "DiamondFacet", + "key": "0x1b5212ea37fb29e99afa2812a5d7d7e662a477424d3de1a18cc3871a2ee94d78", + "address": "0x3Aca51Adfd4c9a6FE2E48F37C1996A9Eb9274Bda" + }, + { + "facetName": "ERC20FixedRateFacet", + "key": "0x3e4f428a95dadb9b2d5121c4067c845270879ee5e180e4c4d03ad40f00160376", + "address": "0x0a382c39293062ddA996b643ec5c26A4d74FCe31" + }, + { + "facetName": "FreezeFixedRateFacet", + "key": "0xad6f49f17db4659e78d7c82e5414ef50b6bfddf3f3e15adc3d0a0e958f696841", + "address": "0xe729D58D85Db01F400e023F3B3c0c5aE1E3D2C80" + }, + { + "facetName": "KycFixedRateFacet", + "key": "0x76145b42d3591928a90298dbd705c8cdb33be9f5eee50f649fb58ed3f36b9f04", + "address": "0x0A418fbb471dE96Cb6dBE692C3737e34BA7B62B1" + }, + { + "facetName": "PauseFixedRateFacet", + "key": "0x9fd7fc8200742d120881c0cf0a0541bae13e372519d986a5169b23b82ea06f12", + "address": "0x4c8eB34c8e34c9273f02AB896478881B63EadA9F" + }, + { + "facetName": "SnapshotsFixedRateFacet", + "key": "0xf9b2659fdf4231d426bc34cef93a8b3f42e5cfaf762f65dbf6537ab3e5ee8348", + "address": "0x30025C1719A4121D6147548bC1b44738eA2B14Ac" + }, + { + "facetName": "ERC1410IssuerFixedRateFacet", + "key": "0xb9c76f134ffdac743e817a2726bdf9f28a48dfea1f9f54b1066e4e0de68f2a06", + "address": "0x6367fEf7766a31C8601785d767D9AC9dEe3e76c7" + }, + { + "facetName": "ERC1410ManagementFixedRateFacet", + "key": "0xf616851e84bfcfb3b33a8cc54c54c34e9168ba2b8d233a0b3daacee27f0266ca", + "address": "0xd7D9B4c202664aFbBA35182522c882449D930935" + }, + { + "facetName": "ERC1410ReadFixedRateFacet", + "key": "0x289451d28da5d8ff4e7759db6b1c418b7871f0d6ad63bf7f75cd411f3d79686d", + "address": "0xB89cC49d835a8F41d327BD7bF76B70F85EDA0283" + }, + { + "facetName": "ERC1410TokenHolderFixedRateFacet", + "key": "0xfd248a6ee4af07046520c6ec6f9b61a009db5407ec2f967775040cd67b66f08d", + "address": "0x437709B9fFB8C71D78Bb64D2AF3B4fc35c9D6816" + }, + { + "facetName": "ERC1594FixedRateFacet", + "key": "0x7a8f3e6d2c4b1a9e5f7d8c6b4a2e1f9d7c5b3a1e9f7d5c3b1a9e7f5d3c1b9e7f", + "address": "0x108e3117f567972E6C5E6Dd1B95dC6821E85aB23" + }, + { + "facetName": "ERC1643FixedRateFacet", + "key": "0x3d6e9f1c5a8b2e7f4d9c6a3e1f8d5c2a9f6e3d1c8f5e2d9c6f3e1d8c5f2d9c6f", + "address": "0x67EDED8DA74d009902B22EDbdf2e93Bd5C0acAd5" + }, + { + "facetName": "ERC1644FixedRateFacet", + "key": "0x6f9e3d1c8a5f2e9d6c3f1e8d5c2f9e6d3f1e8c5f2d9e6c3f1d8e5c2f9d6e3f1d", + "address": "0xBB33Aa250372504fEee74972bBB7aa54A2b03D41" + }, + { + "facetName": "ERC20PermitFixedRateFacet", + "key": "0xc85b8a95de0375d3b552d368932ecaeb9fe85d470eb1e89bc29040cb35d168a3", + "address": "0x6f2136A67acd5761063F078392df137Fad41a1ae" + }, + { + "facetName": "NoncesFixedRateFacet", + "key": "0xb13c3f8e56b31e6f487b3586c2eafb6f13c33bf6b0063a62f31fb386b0dab046", + "address": "0x34E1ee5d65178E93D855Ac29ebD759DeCD0c067A" + }, + { + "facetName": "ERC20VotesFixedRateFacet", + "key": "0xce2bc140ce5298990432f0332c33ccaa813a89e3bc3c0589eb30eabe005d2742", + "address": "0xA3d8902B723fA45a7bbBf0f7CBA5f8bFFd8016B0" + }, + { + "facetName": "ERC3643BatchFixedRateFacet", + "key": "0x3563ac36f573b2e288846d3437686b6a5137a7c9b5cbcd027816db63e07d4138", + "address": "0x6B1c2B25c1Eed6bB75F5a31059f136eDc1088986" + }, + { + "facetName": "ERC3643ManagementFixedRateFacet", + "key": "0xb82ec3e8b1d44871bbfe25257f4e57b7d9778bc578af2f0ce9ef218f6b897797", + "address": "0x08E94ECA4612643Adfe009e082EAC81354F9793A" + }, + { + "facetName": "ERC3643OperationsFixedRateFacet", + "key": "0x6524c4b11c24bcfff0472462572cdfbe5c671cad2df1ac54402e8a7b4dc3ee02", + "address": "0xc4a4F17724D5C956e75b33E17E2AdE2611300867" + }, + { + "facetName": "ERC3643ReadFixedRateFacet", + "key": "0x53569c2059b40a4ccb6382b2180607da114ff92bfa263d7489ec7face7c4cc1f", + "address": "0x25fFAC625eA2555DE97EAe8a23cef2D6Edc2Ae80" + }, + { + "facetName": "ClearingActionsFixedRateFacet", + "key": "0x497fbb5ba36b9a6b791669e513c877ebfe079b61e0eb37afbd19b696266a0223", + "address": "0x72e9f9E9a4CDaC1fFdDE435b207B9c9F71DEF3dB" + }, + { + "facetName": "ClearingHoldCreationFixedRateFacet", + "key": "0xf4d60b90b7a9edb9598b8c4aa2a4477e3a65750eab2cce564385f35d882a23c3", + "address": "0xaa022D107033A11963f0Eb52f9D717dfF431131F" + }, + { + "facetName": "ClearingReadFixedRateFacet", + "key": "0xcd312e798e5b62ec98cc7c8ac3547a640f68ee74e351b73397be02dab3d5b14f", + "address": "0xCDCDDd4558b54181EbF78D502A536506dC7Bb3f4" + }, + { + "facetName": "ClearingRedeemFixedRateFacet", + "key": "0xa8edf3401d5e3f8e9a45b0992984a31a2522a24ed793e5e7980f8d66508473c9", + "address": "0x2bFD1290F6acf669674aCA8E782a8E28170b1e03" + }, + { + "facetName": "ClearingTransferFixedRateFacet", + "key": "0x1ba056fe3e7ef86779515a9e7f364e84af0f60eb5f4175ac6d6e6e3f4c05fffb", + "address": "0x9eBc96D39b7150E1323417821D2596aa187A62Cd" + }, + { + "facetName": "HoldManagementFixedRateFacet", + "key": "0xed113dc152639988cc04869ce8c061c4a3350fe3826e16fc37960453a8d20b50", + "address": "0xCC990F4A762acEc1da0C05Dd89a39c7fa5e96177" + }, + { + "facetName": "HoldReadFixedRateFacet", + "key": "0xcf1b5b7fa2ca417ea3b952a93a6157f237fce01f4944d27160e5101f05335e52", + "address": "0x45a651cc2B50FB2443Ae441D1d9C79Dd641ce541" + }, + { + "facetName": "HoldTokenHolderFixedRateFacet", + "key": "0x0d354aad4576c421c121516a105362711db178c6f0d6e0159d68d9f3ebbda486", + "address": "0xA0c2401c12508EB2797eff849925DF1604e9C6b5" + }, + { + "facetName": "ExternalControlListManagementFixedRateFacet", + "key": "0xdb213fa4fc549f5bc27fc79e6094fe6a26e303e8eabc8a86a8de7bb307d570d8", + "address": "0x9641bF0359c69E09C2D04DFFfD9b48Af02508E39" + }, + { + "facetName": "ExternalKycListManagementFixedRateFacet", + "key": "0x4f9cf8c8583a46a60ec88a37a07f91d915dba024a57bdb729a4805603f5c40b2", + "address": "0x85c0EE806eABA33b7e0AA932eD9B55890ba74C77" + }, + { + "facetName": "ExternalPauseManagementFixedRateFacet", + "key": "0x752307e5e93ea6e9b979833cf52e6043f71fd4b983ec32aa685f9b160594e326", + "address": "0x57315a4bB73d90C8a5c5c504A0315d4140425300" + }, + { + "facetName": "AdjustBalancesFixedRateFacet", + "key": "0xa7e8f6d5c4b3a2e1f9d8c7b6a5e4f3d2c1b9a8e7f6d5c4b3a2e1f9d8c7b6a5e4", + "address": "0xF2714719C0079f42308F74c0d33439780e528210" + }, + { + "facetName": "LockFixedRateFacet", + "key": "0x053d181bbb93fc7807aafeac901706f74ec5767053695d2b769bf0fdcf065e4d", + "address": "0x0139Db685Cf9F9448917ff8BE82f3Fde31034d1e" + }, + { + "facetName": "ProceedRecipientsFixedRateFacet", + "key": "0xd1f2e9d8c7b6a5e4f3d2c1b9a8e7f6d5c4b3a2e1f9d8c7b6a5e4f3d2c1b9a8e7", + "address": "0xF88436Fc10BA7fDA85c300A5348C387Cc1993aE0" + }, + { + "facetName": "ProtectedPartitionsFixedRateFacet", + "key": "0x1f8166e21922daee7192ddd5f8a1ce657013d69d412a4e4f5848ab75f1ca8db3", + "address": "0x99f9Ae4eBd6e5B365d48b61E09f3E8034e3246b4" + }, + { + "facetName": "ScheduledBalanceAdjustmentsFixedRateFacet", + "key": "0xb3336a1ececdcd807fd6e81cc57e9392c75bf3fd303a2f5df0b11c0dda87ce7f", + "address": "0x5D696C9fd2b7eDE843546343aDacFBcdA2aEd3cF" + }, + { + "facetName": "ScheduledCrossOrderedTasksFixedRateFacet", + "key": "0x1312a5fa6cd5c7128015b199c47eacbf1636ef5cf437c0ee84c619dfbd372ca0", + "address": "0x677574ab5c5D6956AbA8F94c4FDd8Fe10a89D693" + }, + { + "facetName": "ScheduledCouponListingFixedRateFacet", + "key": "0x9c249eccb68ce7eae5f58a9b4fbe1f3b6a6f2a644b36c3f1b3559077b4f4e266", + "address": "0xE551Ea3fAdD9DEb9781deC668781Be561659bC05" + }, + { + "facetName": "ScheduledSnapshotsFixedRateFacet", + "key": "0xe3f0d8c05423e6bf8dc42fb776a1ce265739fc66f9b501077b207a0c2a56cab6", + "address": "0xdA43E0C84E282c9662D97c1e9667170aAf0c751A" + }, + { + "facetName": "SsiManagementFixedRateFacet", + "key": "0xd3c3eb4fde853b08d2509769f85fbcc3147edd847e1e8da89c805628293effb2", + "address": "0x8997b2022479C050a084f4BC70A20aABBcA0483F" + }, + { + "facetName": "TransferAndLockFixedRateFacet", + "key": "0x8c3d5e9f2a6b1c4d7e8f9a2b3c4d5e6f7a8b9c0d1e2f3a4b5c6d7e8f9a0b1c2d", + "address": "0x8145330F7d28B892dA9d079aFC98AF7d38DD3B65" + }, + { + "facetName": "FixedRateFacet", + "key": "0x2871e1c37f7423765d88b16528db7e80ad8e2bae5ab5d55e26659840c1d6b504", + "address": "0x631286d96424128087e2Bc7b243CAB1ae2032A3d" + }, + { + "facetName": "BondUSAFixedRateFacet", + "key": "0xd55d8787d23b78e70dada1ade45b8758f5c027e2cddf3556606c07d388ce159a", + "address": "0x6A3CDA8c906A69695d39730aF37E5719a631e0ba" + }, + { + "facetName": "BondUSAReadFixedRateFacet", + "key": "0xd5d703d15aa25ad6419288846269dcbba84f489f1c986be2c919f84c042b8c24", + "address": "0xc8F1693A4960562b381726f8f879E9cEfdb4F6F3" + } + ] + }, + "bondKpiLinkedRate": { + "configId": "0x0000000000000000000000000000000000000000000000000000000000000004", + "version": 1, + "facetCount": 48, + "facets": [ + { + "facetName": "AccessControlKpiLinkedRateFacet", + "key": "0x465c95eea6723a1645e5399789cee702b19d0bcd0ad3f894270aa25488fb4ab9", + "address": "0x9ea97745CAAeA8893b8201183f7189009ec91a77" + }, + { + "facetName": "CapKpiLinkedRateFacet", + "key": "0xdc8cc0612bf886bcc1666e31c5de3392bee78451de7213b01fe78d560a804435", + "address": "0x67f2d98d9E8301A5a572AF40C6070b5b0AEeB270" + }, + { + "facetName": "ControlListKpiLinkedRateFacet", + "key": "0xaaa80b13f9a051b7f9546e92763bedfbe259f511da870cbb1133fe0e79c8eac5", + "address": "0xb90AC9876B0157DE787ac718C4e29F0F7BD6891E" + }, + { + "facetName": "CorporateActionsKpiLinkedRateFacet", + "key": "0xf86b1190fb42cc572ccdeac774fdf968c303079b8c5eceaeb1c9f4f9089bb6be", + "address": "0xd4CfAD160e3d838c503Cc0D76e35594744E472CD" + }, + { + "facetName": "DiamondFacet", + "key": "0x1b5212ea37fb29e99afa2812a5d7d7e662a477424d3de1a18cc3871a2ee94d78", + "address": "0x3Aca51Adfd4c9a6FE2E48F37C1996A9Eb9274Bda" + }, + { + "facetName": "ERC20KpiLinkedRateFacet", + "key": "0xe4565636726032d04f6d265d3ee61c2f046ea49ecb39f4ca68dd4f65713e9620", + "address": "0x1E9B31fA0E0D856E540D1E4d1b0C229357316a76" + }, + { + "facetName": "FreezeKpiLinkedRateFacet", + "key": "0xb03614fe7a4412f420f88bc18fc39ab43459dbfdbbdbd0a8e109356b0928272e", + "address": "0x9240A8DFCA4C195F860044Cd6050E0fd9652396f" + }, + { + "facetName": "KycKpiLinkedRateFacet", + "key": "0x9cf03144d37b7b92d5b438e1f037a64ebdc48c2891bc4b475a15a1cf833574d0", + "address": "0xD035503635E72b4551A664122a5FE5b674131E0F" + }, + { + "facetName": "PauseKpiLinkedRateFacet", + "key": "0x77ff7dc4f2d4a0cb28f09307895b94478d6655e7a545222f97b753a6c90a8f71", + "address": "0x0328C3F333bE5F602dc5e3696DC7dd30Fe511f11" + }, + { + "facetName": "SnapshotsKpiLinkedRateFacet", + "key": "0x9c0a9b3a98c7e535e4b1a0749f01f63ea94b600fbee8df56d7c18a1f3043ee20", + "address": "0x59393ba976bd76d9BCA1099D812964c9A4cecC9E" + }, + { + "facetName": "ERC1410IssuerKpiLinkedRateFacet", + "key": "0x97246e7c6950bcc047f6ea198308a7f304bca9f3f13d2ce5d7fdeee9cc9e0828", + "address": "0x3348A02e4ad481996f645facf5dC4C489E4cc21f" + }, + { + "facetName": "ERC1410ManagementKpiLinkedRateFacet", + "key": "0x831449a00c9cf218fe471b13f84f7109b57ad4b1202d4ed93009ee3d53276a2f", + "address": "0x4800F7E439190f042E5bFafd7d3BDee97b78b748" + }, + { + "facetName": "ERC1410ReadKpiLinkedRateFacet", + "key": "0x696d9b2b17b535f70254309692c77475c258c27dfa6853bbecc611bc350136cd", + "address": "0xBe83574e36D00e5327C3dCf8275A4C41A6d8538E" + }, + { + "facetName": "ERC1410TokenHolderKpiLinkedRateFacet", + "key": "0x463e4b758e14b6cdc1dd053ae3df476d527be8131eb3b41c64b4cf8019855237", + "address": "0xf1aCaafa7B997D51d96611eEf1f1351300669562" + }, + { + "facetName": "ERC1594KpiLinkedRateFacet", + "key": "0x1b4e7a9d3f5c2e8a6d4b9f7e5c3a1d8f6e4c2a9d7f5e3c1b8f6d4e2c9a7f5d3e", + "address": "0xb55041dd988c398115EAbC2A1005db31D65C275b" + }, + { + "facetName": "ERC1643KpiLinkedRateFacet", + "key": "0x4e7f1a2d5c8e3f6a9d2e5f8c1d4a7e2f5c8d1e4f7c2e5d8f1e4c7d2f5e8d1f4e", + "address": "0xc4AFd7406F541ec793353b53E03859Ec9D910984" + }, + { + "facetName": "ERC1644KpiLinkedRateFacet", + "key": "0x7a1f4e2d5c8f3e6d9c2f5e8d1f4c7e2d5f8c1f4e7d2e5f8c1e4d7c2f5d8e1f4c", + "address": "0xf0315e54CB8E352F6ce25AB4B5fa9Ac7082E1a33" + }, + { + "facetName": "ERC20PermitKpiLinkedRateFacet", + "key": "0x468437a5a7a128b245fb2c3ac08cf17e5f2a6983dece41309b58fffa1fca80a9", + "address": "0xaAAdE8B0Edbbd2B0c9817E336fD54BF4372CD33c" + }, + { + "facetName": "NoncesKpiLinkedRateFacet", + "key": "0xc267b98bd9bdee7ecfccb0929874a128cc0814cf4bd67274423368452b324dc6", + "address": "0x952F589339a1eeAB1F23594e50DdF9A99373bb86" + }, + { + "facetName": "ERC20VotesKpiLinkedRateFacet", + "key": "0x9d720cb6c08dff4ea63b2b4f3908fa551321fdc478de6b46a67ba5ecb46f82fc", + "address": "0xF912B6BC71E69dFc8bc6C7C7d73A31e943Ab6431" + }, + { + "facetName": "ERC3643BatchKpiLinkedRateFacet", + "key": "0xdf3ace3e8d3a434ee6c69da03060d81e1c8c217c16fad43a2819c0bc545253ae", + "address": "0x538C3c31DC33903B676E20846dcBA74a9ba0B0a8" + }, + { + "facetName": "ERC3643ManagementKpiLinkedRateFacet", + "key": "0x649facd691e27202b46bb9e328ca96c6f6dc0aeefdd6cfc15707ee162b7d5103", + "address": "0x5d24A07A827907d465839f8105536856d6720d18" + }, + { + "facetName": "ERC3643OperationsKpiLinkedRateFacet", + "key": "0x87b7a50a7578f2499b459e665b6b7b809ac635280a2157d21fc5de0fc4b54715", + "address": "0x6Bf8999e7B429cB1bDa8A1798A2330E050b238A4" + }, + { + "facetName": "ERC3643ReadKpiLinkedRateFacet", + "key": "0x68ba78621a8627653774f3b9800b77ac34bd334ecc2dc4d933f9e30d6197194f", + "address": "0x5737FD6Bc59a3FaEb2D1eF1edfbF678e1610417f" + }, + { + "facetName": "ClearingActionsKpiLinkedRateFacet", + "key": "0x4960adcd566163ba9edaee816f8739f1c788cace28ad805c136644de52929faa", + "address": "0x4d0Eb5Cd49F4ADBEBfeF8787036156eA15211AA8" + }, + { + "facetName": "ClearingHoldCreationKpiLinkedRateFacet", + "key": "0x1ba40338a89cd18f2799a3e6a86f0be118236340eeff5a19a19a08d3d6e3d08c", + "address": "0xCFa2dEe775A28ae056f4e432A5A968FA234264DD" + }, + { + "facetName": "ClearingReadKpiLinkedRateFacet", + "key": "0x3740ea12ff1c9c37f216ba72884079bcaabe99f51cdd9b019be5b218ba5db0e2", + "address": "0x4CC243AF787D8Eb0e6A773B70EeBdC367FB74219" + }, + { + "facetName": "ClearingRedeemKpiLinkedRateFacet", + "key": "0xc38aaff0161104c594b7a323af3facf5beb1e304b730fcbee09f5eed74b11375", + "address": "0xEB1Cf9d8A47D15F662196cfC365AEaA3A6450A97" + }, + { + "facetName": "ClearingTransferKpiLinkedRateFacet", + "key": "0x1b229a6d3b8a8ecba97d1e7c2c4a89c4cf71b9b5852317278f57384d728f8bde", + "address": "0x6B5e6fDD9a1ae157FBCe92A4cB3431c26728A6d8" + }, + { + "facetName": "HoldManagementKpiLinkedRateFacet", + "key": "0xed86feb6fdd55e6a056bda1a5b7149c2d0d6d7d024625b67aa2c567ba0ef2b9e", + "address": "0x6C9522dc817c10498D03642e60a71d8178dDd094" + }, + { + "facetName": "HoldReadKpiLinkedRateFacet", + "key": "0x6b896f9725e5d4f4b5f8cff875e71b5f3284000a933f6ab32c01cdd5f71306d6", + "address": "0xd5bA16f1631D028a368f4CfD3c72161839F4c18f" + }, + { + "facetName": "HoldTokenHolderKpiLinkedRateFacet", + "key": "0x09f3820ce986997421b684b2482b6d982f31b5ed27a0d72e2aece5ffb3c8fd39", + "address": "0xff6A22A0eF9004535ED0f6C4F00Fe2db7A0fA642" + }, + { + "facetName": "ExternalControlListManagementKpiLinkedRateFacet", + "key": "0x9ecec5a17142ae1072721e064f5e9a3f0795a2bea57673f40a9440b8adec0052", + "address": "0x20043C78e9901c73012Ec294060286b568484F47" + }, + { + "facetName": "ExternalKycListManagementKpiLinkedRateFacet", + "key": "0xc15c973cec2d75a95d94522af2dc05c535be214a6cce368887f7e7d3ead3a491", + "address": "0x9EbD9570CeEB7e7d458Dd33e0D7feb3F8CD3ADe9" + }, + { + "facetName": "ExternalPauseManagementKpiLinkedRateFacet", + "key": "0x549d7aab8deeb4a493aa9765937da4290840d4a6fe04399ef4bb818694d9aee4", + "address": "0x3528055FD632c10874AB4752A01dFe9A39f048be" + }, + { + "facetName": "AdjustBalancesKpiLinkedRateFacet", + "key": "0xb8f9e7d6c5b4a3e2f1d9c8b7a6e5f4d3c2b1a9e8f7d6c5b4a3e2f1d9c8b7a6e5", + "address": "0x3fd5b5fC783C482F96e7caa9EA55A9677a0CfD3B" + }, + { + "facetName": "LockKpiLinkedRateFacet", + "key": "0x04caf3f62f31b8b1edd96c39948d89098fd83c1a1b5b76aa39927cf7ad8e9d42", + "address": "0x6Dc7E51A4a70ae4633B59E5B574867dba42121FF" + }, + { + "facetName": "ProceedRecipientsKpiLinkedRateFacet", + "key": "0xe2f3e1d9c8b7a6e5f4d3c2b1a9e8f7d6c5b4a3e2f1d9c8b7a6e5f4d3c2b1a9e8", + "address": "0xdc0A1dA98B958AD2eE8f914E0030e966f3819177" + }, + { + "facetName": "ProtectedPartitionsKpiLinkedRateFacet", + "key": "0x665aad7ee148905a0af716acbc6abd8f408eadce853caf3f84528a9810ffc436", + "address": "0x1e110c473F348C3F1Dc9eFA4115EeeEdbabf7ECc" + }, + { + "facetName": "ScheduledBalanceAdjustmentsKpiLinkedRateFacet", + "key": "0x3da33aed4e04baa1b9c39bd96d0bc7be51ecaa1468eff7f632c29fb134644cb4", + "address": "0xEDc3ba797e83a3E13910b5D390C80a2E86914E1D" + }, + { + "facetName": "ScheduledCrossOrderedTasksKpiLinkedRateFacet", + "key": "0x04d20e52e58dbadedfcf6c373a826fc5f7c665fd6caf67c8a65a9e777a8b70ec", + "address": "0x347ad695dEC93180AC6E83bB1C0f31Cf11807713" + }, + { + "facetName": "ScheduledCouponListingKpiLinkedRateFacet", + "key": "0x9f42d2f2ae6efad6d2acf0399ec9e5a1bed9e41c68a86b58f1de78da4fe3c598", + "address": "0xf1B252a60906f564E99436243e934f1d587C7fD4" + }, + { + "facetName": "ScheduledSnapshotsKpiLinkedRateFacet", + "key": "0xbfb6dd5a6beac6604a320b8363bc0da4093ba327dd037970ad82d422b0d88526", + "address": "0x84fF1abCCB02b190bD224711C0e49E76Cc8C28A1" + }, + { + "facetName": "SsiManagementKpiLinkedRateFacet", + "key": "0xac0a01362676a7a1370879903993e04310cb7a3b60fc327072dcf7a00ce50e5a", + "address": "0x1347c94A5cC2BFC013F53654eCEf8b19B8c70511" + }, + { + "facetName": "TransferAndLockKpiLinkedRateFacet", + "key": "0x3e5f7a9b1c2d4e6f8a9b0c1d2e3f4a5b6c7d8e9f0a1b2c3d4e5f6a7b8c9d0e1f", + "address": "0x762A8c0652dfA946A86e34077a1B984E9e57836E" + }, + { + "facetName": "KpiLinkedRateFacet", + "key": "0x92999bd0329d03e46274ce7743ebe0060df95286df4fa7b354937b7d21757d22", + "address": "0x03108f98EE26bb91915bA178C8bA4B05f76e71a0" + }, + { + "facetName": "BondUSAKpiLinkedRateFacet", + "key": "0x99c145ff21354eb7b25cb096873143fa3d3aba98457b96bcd13f1d1f2b9bf28c", + "address": "0x5502A84e5D57bE1502B56998718074f94bA670f8" + }, + { + "facetName": "BondUSAReadKpiLinkedRateFacet", + "key": "0xcced91a2a03bf45bd62730a7f4703ee2d762f8ebccff315c7145258265f73249", + "address": "0x04233F4b869F354785857D046848295Ea733a3d6" + } + ] + }, + "bondSustainabilityPerformanceTargetRate": { + "configId": "0x0000000000000000000000000000000000000000000000000000000000000005", + "version": 1, + "facetCount": 49, + "facets": [ + { + "facetName": "AccessControlSustainabilityPerformanceTargetRateFacet", + "key": "0x9d13e61abd630355ccae4279993868d7cf3b04d4368a0fedcefe6fec3fabaa0c", + "address": "0x3114b59C636B474448080fdca4d0F3BeF70AC6C7" + }, + { + "facetName": "CapSustainabilityPerformanceTargetRateFacet", + "key": "0xa321c5301bbccd760c5aaf08286a67948cb7d49be22c17f12aa163b324a276d0", + "address": "0x97426D5B94A5CEaB32E5E02bbAA4bDf3179cfaC0" + }, + { + "facetName": "ControlListSustainabilityPerformanceTargetRateFacet", + "key": "0xe3fbab5a4ccf7a873a9601bf5494c43f6e4b53218ff8310ec97811471397b3cf", + "address": "0x64756172d3255F2641D3B1829651acF9b5605dee" + }, + { + "facetName": "CorporateActionsSustainabilityPerformanceTargetRateFacet", + "key": "0xa4a23267cb0a22c52bd05b12e644136bc38b7ac51218a0cb3aed166697caa79e", + "address": "0xD6f74120F25E9a8f81007D7f286B5B7Dfa6B5B37" + }, + { + "facetName": "DiamondFacet", + "key": "0x1b5212ea37fb29e99afa2812a5d7d7e662a477424d3de1a18cc3871a2ee94d78", + "address": "0x3Aca51Adfd4c9a6FE2E48F37C1996A9Eb9274Bda" + }, + { + "facetName": "ERC20SustainabilityPerformanceTargetRateFacet", + "key": "0x002a101a46899eecb6af6a76839f76be301e6292a6a5d3eb7a1bae4a0d3574ee", + "address": "0x45744350B58b28d9329D7be14317E2Cd62B75f40" + }, + { + "facetName": "FreezeSustainabilityPerformanceTargetRateFacet", + "key": "0x25ca5cbe52a82389e142792fdab2ffc58f224f2628f9a92a3f717134cbe229e4", + "address": "0xf2b306706a0F3Ee45443242E6019334800299EBE" + }, + { + "facetName": "KycSustainabilityPerformanceTargetRateFacet", + "key": "0x1cb818916342973b46841d2ca9543c702bf6380fb0fc179f356139aa142379c3", + "address": "0x5e3EeE8cF2e7843a5b9D5025E912c0DeDD377DbD" + }, + { + "facetName": "PauseSustainabilityPerformanceTargetRateFacet", + "key": "0xa16c7f2d6b5ab7f05dd30bd562ac9f3005fe21e3b2bde131733e37c0d42046ee", + "address": "0x774b46759f0E917AC3F4c3188E776Ee5863b9465" + }, + { + "facetName": "SnapshotsSustainabilityPerformanceTargetRateFacet", + "key": "0xbcc6255960c1cbe69dae32f7db730d14a35fdb81d91cc7e637e5af4d229bcbbe", + "address": "0xFA7a7Dc16a0Ec1Eb828B2441174A46F29b850797" + }, + { + "facetName": "ERC1410IssuerSustainabilityPerformanceTargetRateFacet", + "key": "0x4d5a3964d29183253487011c31ec3e09977b5eded43c8a3a222a2e53f4282f61", + "address": "0xAf781b97d12969e3a00799A8a52c4bd13c095Eb0" + }, + { + "facetName": "ERC1410ManagementSustainabilityPerformanceTargetRateFacet", + "key": "0x6768fcc73686ddd306656061b0e415208ded041927d9935de3747583559d0c5e", + "address": "0xF12b9EBAe37a69B353EE4A6fC5C84f93f6Ae10A9" + }, + { + "facetName": "ERC1410ReadSustainabilityPerformanceTargetRateFacet", + "key": "0x7c15e98edcc41b3177b8cfff7055cd57b47000fd843fce22e7ead13f07e346b6", + "address": "0x1c5152A1f0afAFD50e0cCb7E8EC825F3a9eDB8b4" + }, + { + "facetName": "ERC1410TokenHolderSustainabilityPerformanceTargetRateFacet", + "key": "0x6e21f1ca6d12f08b0d36f08711a48500d02dcf7edd2e8b87e4de350b98df4822", + "address": "0xbd7e4C4B2f1387A8948A355eB95CE0e49A42f894" + }, + { + "facetName": "ERC1594SustainabilityPerformanceTargetRateFacet", + "key": "0x2c5f8a3d6e9b1f4c7a2e5d8b1f4c7a2e5d8b1f4c7a2e5d8b1f4c7a2e5d8b1f4c", + "address": "0x0dA9690B7b6846563A3F3C715ec5e18c6476eb32" + }, + { + "facetName": "ERC1643SustainabilityPerformanceTargetRateFacet", + "key": "0x5f8d2a3e6c9f1d4e7a2f5c8d1e4f7c2e5d8f1e4c7d2f5e8d1f4c7e2d5f8d1f4c", + "address": "0xb5079c6C57DA16EB4B8484A193e46a291BA8bdfA" + }, + { + "facetName": "ERC1644SustainabilityPerformanceTargetRateFacet", + "key": "0x8b2f5e3d6f9c2e5d8f1e4c7d2e5f8d1f4c7e2d5f8d1f4c7e2d5f8d1f4c7e2d5f", + "address": "0x1e69ee4EEe11b2827a111b2EE9Da3fC83b1261c8" + }, + { + "facetName": "ERC20PermitSustainabilityPerformanceTargetRateFacet", + "key": "0x3bf8d35ad3c3320d95184dd4f9a0bfc2e56b151318d9d27eefa74461d24f5c61", + "address": "0xa1dA61Be7f93E0eC2950E02e6B0fa5636AE5c1f0" + }, + { + "facetName": "NoncesSustainabilityPerformanceTargetRateFacet", + "key": "0x631217f1fdd4036273035308e6637d8cdef1927db4eef0af68e5aac13a70892e", + "address": "0xd2f6188327210FE75794d19B63Ff34C3a14ca7f8" + }, + { + "facetName": "ERC20VotesSustainabilityPerformanceTargetRateFacet", + "key": "0x9d7e0002a7ae9c94734d62ac85bb1cd4c333dd6c5fb308a7a2b60dd77dfa9d44", + "address": "0x45fDdb94835819ce42Eb011a06B67B8a24ca1757" + }, + { + "facetName": "ERC3643BatchSustainabilityPerformanceTargetRateFacet", + "key": "0x500c4c5bff9db733228f1df9b6e818bf8fab883422d3fbe971c036b513e983d9", + "address": "0x1E8Cfc6e5C652BDbfed1f090a8Fbc6A23165EAD9" + }, + { + "facetName": "ERC3643ManagementSustainabilityPerformanceTargetRateFacet", + "key": "0x324a20f20a55098c207cd0bc42498561962995b82918d6a9697320c42c5b11fa", + "address": "0x0394e106bA41cbDd42fcC18e7c08746F0C7106c1" + }, + { + "facetName": "ERC3643OperationsSustainabilityPerformanceTargetRateFacet", + "key": "0xbe85d38775742687362efc4fc0ffed08044614079fc51bbf7b0f29e11d3ffafa", + "address": "0x3aba830c240a4C2BF92F22a67271bebEBbCfCE62" + }, + { + "facetName": "ERC3643ReadSustainabilityPerformanceTargetRateFacet", + "key": "0x2fc56e8abd44d0dc70cf8876ea454caab82a906ec6333516c1feb4de9b4cb4f8", + "address": "0x3faa5D6b69dF136e1c30D96Ce24316e237a35B5b" + }, + { + "facetName": "ClearingActionsSustainabilityPerformanceTargetRateFacet", + "key": "0xae9d6d2e1d9a660994e89e185ab5a3439d2def9baa6ba47fdf854ce0a29a5033", + "address": "0xa844da6de64478887776519EEb89E26372905E6A" + }, + { + "facetName": "ClearingHoldCreationSustainabilityPerformanceTargetRateFacet", + "key": "0x0e59e36a2b1298d11c3612c3203c6d45cb185879383f5a22617c4f49495c070d", + "address": "0x8CbC476982f6164a15ede5c9081b71815FA4D794" + }, + { + "facetName": "ClearingReadSustainabilityPerformanceTargetRateFacet", + "key": "0xa188d3ee426a514ccfe03470d196ed29da48de0ae59898d9b5a30ec680515a11", + "address": "0x1A71aC2A273D93aF22064c1b2979c3D4ecB59683" + }, + { + "facetName": "ClearingRedeemSustainabilityPerformanceTargetRateFacet", + "key": "0xc4731d62375990b9721357983c8f6acf3fdc78d7814919c187607f653b768d5d", + "address": "0xe26cE3c86872b4AcDF643F93621cAB968f6d3e65" + }, + { + "facetName": "ClearingTransferSustainabilityPerformanceTargetRateFacet", + "key": "0x7e29efe8ee5285a43acddbe766fd9219266a74cb24ed3331b4e350d8e263d0c7", + "address": "0xBeE3de8498E369039AB09874e8E314Cd69251fbb" + }, + { + "facetName": "HoldManagementSustainabilityPerformanceTargetRateFacet", + "key": "0x4574524c203fbcc0f5b9f08bcd2b9a9d47c5a9cf3a30eeb540a93a33a8a2f834", + "address": "0xDC32788f13C6EE8e0Fb5a20A749b56dBa08f698B" + }, + { + "facetName": "HoldReadSustainabilityPerformanceTargetRateFacet", + "key": "0x8e7113391652a4d3d8feb1d90990cd06ee33dc67a640b4400f8bfb9fae4f91b2", + "address": "0xE690486d1cF9b94d15810A448e75d8f423Ee16f9" + }, + { + "facetName": "HoldTokenHolderSustainabilityPerformanceTargetRateFacet", + "key": "0x28ae4d4cdc1846ba348a31e222161d8343223560c1875fe3efcad8c5dd5f81e0", + "address": "0x8E2AEEE8a10e28c4594B234F34bc0d9B2Bd9E7D8" + }, + { + "facetName": "ExternalControlListManagementSustainabilityPerformanceTargetRateFacet", + "key": "0x2c56accbf6faf923cd323935455dac00c2ddffe08f0becdf49d515e4b4d355af", + "address": "0xCfb7f02cD8c1438DDeBdeea4e51B009f38831833" + }, + { + "facetName": "ExternalKycListManagementSustainabilityPerformanceTargetRateFacet", + "key": "0x0fcfeebcf118ca3c39fbed0e2a527a866cac42bbd3fcad5f9b4f755ef97f3aa9", + "address": "0xb58b7D50BfEFEe8493dF7a7009b8910aD4445Fd9" + }, + { + "facetName": "ExternalPauseManagementSustainabilityPerformanceTargetRateFacet", + "key": "0x07846b678053cbd4be5d9d3929fa9af5ab76bb508a0f7957f5239302aad45bc3", + "address": "0x60D694ccF4cc85972af749B0AbBD0B4B21cc2071" + }, + { + "facetName": "AdjustBalancesSustainabilityPerformanceTargetRateFacet", + "key": "0xc9e1f8d7c6b5a4e3f2d1c9b8a7e6f5d4c3b2a1e9f8d7c6b5a4e3f2d1c9b8a7e6", + "address": "0xf335085be99733C3beb9D963D0166CC0d9807167" + }, + { + "facetName": "LockSustainabilityPerformanceTargetRateFacet", + "key": "0xe73c2eecf92b5b8eb7ecc89b379f70193694f2906188318c3407458267385b82", + "address": "0xAce15eC36556d3e37e75B4D1C2E3e8C81A006817" + }, + { + "facetName": "ProceedRecipientsSustainabilityPerformanceTargetRateFacet", + "key": "0xf3e4f2e1d9c8b7a6e5f4d3c2b1a9e8f7d6c5b4a3e2f1d9c8b7a6e5f4d3c2b1a9", + "address": "0x787463F71a5649d9e1831af278A964caEa104C66" + }, + { + "facetName": "ProtectedPartitionsSustainabilityPerformanceTargetRateFacet", + "key": "0x088ec2750f42a30fde9383e74f4148ce5df963263d426deffc1d29fff61a6538", + "address": "0xa125E3E4b12169C072E6A83f32B98f290E8D72f6" + }, + { + "facetName": "ScheduledBalanceAdjustmentsSustainabilityPerformanceTargetRateFacet", + "key": "0x1168df5bb8a348d137af6e29915c261dc82c495f72484a046ac4f750899625f4", + "address": "0x4e71Dc431Ce5c9845F8c69445f79271976FC4D40" + }, + { + "facetName": "ScheduledCrossOrderedTasksSustainabilityPerformanceTargetRateFacet", + "key": "0x23d3302e505d889e80b20005bf316ccd7cbbd3c547a7305d600e8f0d9bc73267", + "address": "0x9d2bCfad08Fcc0225Fb71dd3E2c442ef8cd7e554" + }, + { + "facetName": "ScheduledCouponListingSustainabilityPerformanceTargetRateFacet", + "key": "0x85c0dee450a5a4657a9de39ca4ba19881b079d55d5bb64641d52f59bea709ba8", + "address": "0x8B139C8F243f99261F7fc8f9395cd1995c879f8D" + }, + { + "facetName": "ScheduledSnapshotsSustainabilityPerformanceTargetRateFacet", + "key": "0x99a85df534e32a3b9fce8e80f0cc30d6703e578eb5c641ab2d9e95530d046b4b", + "address": "0xC415fc3056Fc4319D641AD2805121F29D7751Ada" + }, + { + "facetName": "SsiManagementSustainabilityPerformanceTargetRateFacet", + "key": "0x5de367269fd9e98ceb172f263a954ee471605474013e206e00340c5914046c8b", + "address": "0x2Cbabff934825A5203F623b2e3949ece26De408F" + }, + { + "facetName": "TransferAndLockSustainabilityPerformanceTargetRateFacet", + "key": "0x9d1e3f5a7b9c0d2e4f6a8b0c1d3e5f7a9b0c2d4e6f8a9b1c3d5e7f9a0b2c4d6e", + "address": "0x39785F067Be400FD71C1e12a930Be3f752146F65" + }, + { + "facetName": "SustainabilityPerformanceTargetRateFacet", + "key": "0xa261a7434029a925924f47ccea7fbe12af1e56efd74e8f1d8ac23bec19a27e49", + "address": "0x0254cB208068C7B5F7003C0a54Dc2Fdc3bDec416" + }, + { + "facetName": "KpisSustainabilityPerformanceTargetRateFacet", + "key": "0xb668a0e99ee4bce486604d5a7097a4e5d837d1736e0cf43b190b56d0adea78b9", + "address": "0x067c0F71633Fb5b67520cBbd261770FE16C39738" + }, + { + "facetName": "BondUSASustainabilityPerformanceTargetRateFacet", + "key": "0x8048a878c656dcf3886e69ad27a9272a4fb9499299ab5f0e1b6c99ac3b1130f8", + "address": "0x21afc2C10ae889ccFEC45CEF8379F6b7bdE938e2" + }, + { + "facetName": "BondUSAReadSustainabilityPerformanceTargetRateFacet", + "key": "0x339d458f2928ef5148317aab39e4375a27e6c531d2e5b9de2d4fb23ad0e8b504", + "address": "0xb5FF43b9186Fa67973E28804a3E2C6A29820C230" + } + ] + } + }, + "summary": { + "totalContracts": 3, + "totalFacets": 192, + "totalConfigurations": 5, + "deploymentTime": 2473353, + "gasUsed": "434776639", + "success": true + }, + "helpers": {} +} diff --git a/packages/ats/contracts/deployments/hedera-testnet_2025-12-09_13-47-08.json b/packages/ats/contracts/deployments/hedera-testnet_2025-12-09_13-47-08.json new file mode 100644 index 000000000..cb7416e45 --- /dev/null +++ b/packages/ats/contracts/deployments/hedera-testnet_2025-12-09_13-47-08.json @@ -0,0 +1,783 @@ +{ + "network": "hedera-testnet", + "timestamp": "2025-12-09T12:47:07.347Z", + "deployer": "0xab64B33040083c9F810F766378e7380ad5E1B6FB", + "infrastructure": { + "proxyAdmin": { + "address": "0xE5ebB0990c841857fe43D6e0A8375F2991b265c0", + "contractId": "0.0.7408333" + }, + "blr": { + "implementation": "0x5bB4ac140695C34d3DCb916338882Ef5aB4b6a4B", + "implementationContractId": "0.0.7408335", + "proxy": "0xE13eFc5f5d8252958cA787a1F6665C63Fbd02A48", + "proxyContractId": "0.0.7408337" + }, + "factory": { + "implementation": "0x6d0E2D077dfB469BD21ECD9FaC3b3E00a42d0A4b", + "implementationContractId": "0.0.7408497", + "proxy": "0x0BC59c70933DA04C8556259BB8E78AbF7db4dC22", + "proxyContractId": "0.0.7408499" + } + }, + "facets": [ + { + "name": "AccessControlFacet", + "address": "0x1e4dc70f026DcBF98D6308F84aae40Ee4E716C45", + "contractId": "0.0.7408339", + "key": "0x011768a41cb4fe76a26f444eec15d81a0d84e919a36336d72c6539cf41c0fcf6" + }, + { + "name": "AdjustBalancesFacet", + "address": "0x7B8E53963F9e2fEAE8398Af5c7C4E0Eb2a07e311", + "contractId": "0.0.7408341", + "key": "0x2bbe9fb018f1e7dd12b4442154e7fdfd75aec7b0a65d07debf49de4ece5fe8b8" + }, + { + "name": "BondUSAFacet", + "address": "0x3C24197E05f13271Aa124121321606b2EB69C134", + "contractId": "0.0.7408342", + "key": "0x09c1d80a160a7250b5fabc46d06a7fa4067e6d7292047c5024584b43f17d55ef" + }, + { + "name": "BondUSAReadFacet", + "address": "0x050cD53CAFa1093648c30B809CAC78aC24A30243", + "contractId": "0.0.7408344", + "key": "0xe7ca0b805514da05524faf33d2d9d9432bf1dfa53096073a7267041cfdfb6d68" + }, + { + "name": "CapFacet", + "address": "0x1d0e7E09f1BC70A9d53B33158FD0A94711c16735", + "contractId": "0.0.7408347", + "key": "0xfb3f8aac36661b5540c571d821c80dc9db7ede5ca2a4204ee562b3356f0c026b" + }, + { + "name": "ClearingActionsFacet", + "address": "0x04E5dfF795ef3d65879f7C595917206EC0DbB991", + "contractId": "0.0.7408349", + "key": "0x5472dfc5c92ad7a8651518ea7d3854d3b6494e5bcaa19f91cd61bf93bf6f2a74" + }, + { + "name": "ClearingHoldCreationFacet", + "address": "0x2254E1eaD3723BB5bcd86Db17674Dfb4Ed97d5F3", + "contractId": "0.0.7408351", + "key": "0x44f99a141c434fac20d69e7511932ee344d5b37b61851976c83a5df4ca468152" + }, + { + "name": "ClearingReadFacet", + "address": "0x9b7Fa43d87F73305e8e5A1FE5f6A056b94085cab", + "contractId": "0.0.7408355", + "key": "0xebb2e29bdf4edaf4ca66a3f9b7735087f9d0474d56d856e53c94ef00596c0b1e" + }, + { + "name": "ClearingRedeemFacet", + "address": "0xBC8C5EaE5656d830dEBa23B3991f1f2427bA8070", + "contractId": "0.0.7408361", + "key": "0xb341e7aa749da43976c189209de51ccdf838af9f964cd27340b914d5b2aeba97" + }, + { + "name": "ClearingTransferFacet", + "address": "0x8B51EC3170a71857eb0452c22eA6571fDf24b0bF", + "contractId": "0.0.7408365", + "key": "0x7399d03db62430bec60ca2c3eacf98b1b7e2253f17593ef7a226d759442e0928" + }, + { + "name": "ControlListFacet", + "address": "0x4fce95aBDcE74095197c0e87F6DFE5a0e251AB7c", + "contractId": "0.0.7408368", + "key": "0xfbb1491bfcecd95f79409bd5a4b69a4ba1e5573573372f5d2d66c11e3016414c" + }, + { + "name": "CorporateActionsFacet", + "address": "0x840723F9263BD2B19e133D64AF32EFF7DBcA3481", + "contractId": "0.0.7408372", + "key": "0x3cc74200ccfb5d585a6d170f8824979dbf1b592e0a41eef41cf6d86cf4882077" + }, + { + "name": "DiamondCutFacet", + "address": "0xaa3d2c949FfEf0433D2b75b36C72dea0198d80d8", + "contractId": "0.0.7408373", + "key": "" + }, + { + "name": "DiamondFacet", + "address": "0x1a8c369B60EA9d5929e7Cca64CB3F11B29907154", + "contractId": "0.0.7408378", + "key": "0x1b5212ea37fb29e99afa2812a5d7d7e662a477424d3de1a18cc3871a2ee94d78" + }, + { + "name": "DiamondLoupeFacet", + "address": "0x6c22af6AaB9925b85e96FF6F1FAdC2Da75C0f2a4", + "contractId": "0.0.7408381", + "key": "" + }, + { + "name": "EquityUSAFacet", + "address": "0x46F72A8253796E16A8d98CF176246da77f94E3Cb", + "contractId": "0.0.7408382", + "key": "0xfe85fe0513f5a5676011f59495ae16b2b93c981c190e99e61903e5603542c810" + }, + { + "name": "ERC1410IssuerFacet", + "address": "0x5976bc12Ccc4Fac7BBb4f7187Ce635d33b13cA81", + "contractId": "0.0.7408384", + "key": "0x6e82b75f32c9647cc00b4c3eabbef5a82677f3e91d5d196eb4dd6a0365941344" + }, + { + "name": "ERC1410ManagementFacet", + "address": "0x8D8Ea0E0fd85CF8f11027A09A07763af24F98077", + "contractId": "0.0.7408385", + "key": "0x232f8686795d3f197681faf0d8db05655e759f62d709d56b97e5d9cfff29dbf5" + }, + { + "name": "ERC1410ReadFacet", + "address": "0xD8346f57F9d6bd491aFa112060606Da120b20d1A", + "contractId": "0.0.7408386", + "key": "0x5eb2734b83ea80c3eb63463a6192b30ab2526cb7a073f0abfda1a404c92ae497" + }, + { + "name": "ERC1410TokenHolderFacet", + "address": "0xE09ef2c1B164BD2A1F30136B22320ac58bD08cd1", + "contractId": "0.0.7408389", + "key": "0x0466bf860d23f1ecbc25f364735e0dc3830d236f09182599831730ddd2792caa" + }, + { + "name": "ERC1594Facet", + "address": "0xaf1E4B5f67B8319ce09bC28148A7229839Be20ad", + "contractId": "0.0.7408392", + "key": "0xcb70773e8163595d8bd906e277adeb3935976ad802ee8c29face3dfb0263291f" + }, + { + "name": "ERC1643Facet", + "address": "0xAd1eAB6D3957053076998aa1d11F3589AF1D219d", + "contractId": "0.0.7408394", + "key": "0x24543637956a3076689f171d3932b10f22d40f3785d53acebb340f37bed01625" + }, + { + "name": "ERC1644Facet", + "address": "0x6a65A6BCBAC04f9e1b5e1993F6c03b6F865928D9", + "contractId": "0.0.7408399", + "key": "0xf1da2ed271d62ba0b6597874c96fb6ed7d929e5ec679f4ad8c2c516c72f6736d" + }, + { + "name": "ERC20Facet", + "address": "0xa5A4aFAfaBd45C6F99d2dab3028f9bB2c9981c2f", + "contractId": "0.0.7408404", + "key": "0x064c883089ba1a596d9146c7aaa73c19ef8825f374c67a9538787c3d12e68dc5" + }, + { + "name": "ERC20PermitFacet", + "address": "0xe4ce7AEfc3DD10B8445BBe474C3C19cd1bca9629", + "contractId": "0.0.7408406", + "key": "0xef05f0313623d32145212ed45620c8b2c8c294b3d6955cf26f3d1b0569fbc1fa" + }, + { + "name": "ERC20VotesFacet", + "address": "0xbDf2b9ab57197Da542EaA868e7cbB51646B28f9B", + "contractId": "0.0.7408408", + "key": "0x5cbfbaa435e19a43530a00ac685c9b5252862a94af2053667ded44642a0d9f4c" + }, + { + "name": "ERC3643BatchFacet", + "address": "0x08EB3cF7e6cf2eA0F39Dd1605bE89Bb460912757", + "contractId": "0.0.7408410", + "key": "0x9e671b494908a7523ee4e531ae7b7076b84f1c675d31346a9697f0ff4695f249" + }, + { + "name": "ERC3643ManagementFacet", + "address": "0xC2A8cdcbe13D87c22693d2c102f12721c3B33da2", + "contractId": "0.0.7408411", + "key": "0x06d7f1ffc912a9e44e5d742aa1c1eff596d0fabf91a1d0fb1c3ac0fba01f1773" + }, + { + "name": "ERC3643OperationsFacet", + "address": "0xd3Bd659D0504a87ad08aAe9a1988B1c5920CD316", + "contractId": "0.0.7408414", + "key": "0x39de33e56c92afe3cd7ece00d0ff8a0df512878690719e48c17d5b54604d2de2" + }, + { + "name": "ERC3643ReadFacet", + "address": "0xCDa629636aE1cA4E407cD3a5a73ad533cd39d0a4", + "contractId": "0.0.7408415", + "key": "0xf1a7f92f11da0b048b6417201459d4e1eaef0e112e0d58d5bd6ee4481e5394c7" + }, + { + "name": "ExternalControlListManagementFacet", + "address": "0x2Be257d8dE090A75112467c6A2185fd11Fb9Bec7", + "contractId": "0.0.7408416", + "key": "0xb28d59e89fa116cebe06d8de737191b637a49d95f7d8d947d47ac000463e7c71" + }, + { + "name": "ExternalKycListManagementFacet", + "address": "0xc999937b0B96762498f0B86b82f57440099A75d3", + "contractId": "0.0.7408417", + "key": "0x8676785f4d841823214e8ee8c497b3336a210be7559f5571c590249f6203e821" + }, + { + "name": "ExternalPauseManagementFacet", + "address": "0x539910917Ebdfa667EE5fc36A02c6803706378DA", + "contractId": "0.0.7408418", + "key": "0xadd2e196c17b4f607e327e46341eedbbbc3dce86ac90ceb3e7244b0a5f8590ac" + }, + { + "name": "FreezeFacet", + "address": "0x686f5c383EaB9Ec1Ec8E96171457CB562D58A219", + "contractId": "0.0.7408423", + "key": "0x49f765e7155d979a148049c2a0ebed5e028b11799061897a255f99314f0bd3f1" + }, + { + "name": "HoldManagementFacet", + "address": "0xd3f39f04D5Cc5e43e6cfC122d6444505C95532C9", + "contractId": "0.0.7408426", + "key": "0xaab5a0e0978ad146ca8dc61d16bab0212224eadf68bd08e3c66600ee4f59c12a" + }, + { + "name": "HoldReadFacet", + "address": "0x6200096542CB40faa8794873710024B92C071D94", + "contractId": "0.0.7408428", + "key": "0xd8a2714462c01975a075ccd4be2588934afd8074afef746fac089b757b803851" + }, + { + "name": "HoldTokenHolderFacet", + "address": "0x9FeE1dBFe7a065d12583c1f88c921a22Afde9F33", + "contractId": "0.0.7408431", + "key": "0x87b17a3ce9a86872f21469d26f005543a22ef5729998559f4ad433d5c4253f3e" + }, + { + "name": "KycFacet", + "address": "0x2e7cABe461C87b95F7fF9A003f20f107c90e0567", + "contractId": "0.0.7408432", + "key": "0xf516a0f6b4726244ae916c590cd26c2b593d7d448e46e43714fb9f9435c46e32" + }, + { + "name": "LockFacet", + "address": "0xBE4a79db28856a052dAC5fdBd42115BE91B72562", + "contractId": "0.0.7408435", + "key": "0xf1364345b3db5ebe5808f2d2d2aaecb9cdb4fddacad1534033060ebc886fc1e9" + }, + { + "name": "PauseFacet", + "address": "0x147E4776AB3f32AFE0A374733bcf55c7148d24fa", + "contractId": "0.0.7408439", + "key": "0x9429fd9ef38f89f41bd9ec33fd5c94b287ed1c27a98938da43835ac761b2f92c" + }, + { + "name": "ProceedRecipientsFacet", + "address": "0xdcfc4d9De6Bd9ea0E75712edD6A032884a672E94", + "contractId": "0.0.7408445", + "key": "0x87f4b676bf89cd24a01a78fd8e7fb2102c2f6d034be73d16402f7297e0ae625b" + }, + { + "name": "ProtectedPartitionsFacet", + "address": "0x8F02514610Af057e06D0C71B070549130a2a0E24", + "contractId": "0.0.7408448", + "key": "0x6d65d2938c05a4d952aff0845c1baa5bea04d4544db74f8b3b26004d1d58d58f" + }, + { + "name": "ScheduledBalanceAdjustmentsFacet", + "address": "0xAd8107F5c9C4c5F8801277dbb6421D9121C02C89", + "contractId": "0.0.7408449", + "key": "0xc418e67a48260d700e5f85863ad6fa6593206a4385728f8baba1572d631535e0" + }, + { + "name": "ScheduledCrossOrderedTasksFacet", + "address": "0x6e1Ec66aB27cD04bcCA1F4B7DF54Bba0c8D46823", + "contractId": "0.0.7408451", + "key": "0xa4934195ab83f1497ce5fc99b68d0f41694716bcfba5f232aa6c8e0d4d504f08" + }, + { + "name": "ScheduledSnapshotsFacet", + "address": "0x6D9fFEd8adf25fb15189a75B2C16B64f7dEbF6cb", + "contractId": "0.0.7408457", + "key": "0x100f681e33d02a1124c2c05a537a1229eca89767c5e6e8720066ca74bfb85793" + }, + { + "name": "SnapshotsFacet", + "address": "0x28Ff3a01933452aF0a9E85D2624E1ec2D9E81a45", + "contractId": "0.0.7408463", + "key": "0x9a3fc46d83536ef6b87eb4fec37302bfd1a7c18e81ea2da853b911b44cf5b0cf" + }, + { + "name": "SsiManagementFacet", + "address": "0x1eD7372C336f684A1dd8De7858475e406037E443", + "contractId": "0.0.7408469", + "key": "0x46df6aaf3742e0cbad136a74fb679b686e087dcc3a3d92d1c4ce2f3ef1b508a0" + }, + { + "name": "TransferAndLockFacet", + "address": "0x14df4e218ff4Ec3DB83B95041E90bef8A99f86fE", + "contractId": "0.0.7408476", + "key": "0xd9b300e6bf7a143b8fd8cf1d4ab050e691c862bf0f57a7d49cc08c60efe68d08" + } + ], + "configurations": { + "equity": { + "configId": "0x0000000000000000000000000000000000000000000000000000000000000001", + "version": 1, + "facetCount": 44, + "facets": [ + { + "facetName": "AccessControlFacet", + "key": "0x011768a41cb4fe76a26f444eec15d81a0d84e919a36336d72c6539cf41c0fcf6", + "address": "0x1e4dc70f026DcBF98D6308F84aae40Ee4E716C45" + }, + { + "facetName": "CapFacet", + "key": "0xfb3f8aac36661b5540c571d821c80dc9db7ede5ca2a4204ee562b3356f0c026b", + "address": "0x1d0e7E09f1BC70A9d53B33158FD0A94711c16735" + }, + { + "facetName": "ControlListFacet", + "key": "0xfbb1491bfcecd95f79409bd5a4b69a4ba1e5573573372f5d2d66c11e3016414c", + "address": "0x4fce95aBDcE74095197c0e87F6DFE5a0e251AB7c" + }, + { + "facetName": "CorporateActionsFacet", + "key": "0x3cc74200ccfb5d585a6d170f8824979dbf1b592e0a41eef41cf6d86cf4882077", + "address": "0x840723F9263BD2B19e133D64AF32EFF7DBcA3481" + }, + { + "facetName": "DiamondFacet", + "key": "0x1b5212ea37fb29e99afa2812a5d7d7e662a477424d3de1a18cc3871a2ee94d78", + "address": "0x1a8c369B60EA9d5929e7Cca64CB3F11B29907154" + }, + { + "facetName": "ERC20Facet", + "key": "0x064c883089ba1a596d9146c7aaa73c19ef8825f374c67a9538787c3d12e68dc5", + "address": "0xa5A4aFAfaBd45C6F99d2dab3028f9bB2c9981c2f" + }, + { + "facetName": "FreezeFacet", + "key": "0x49f765e7155d979a148049c2a0ebed5e028b11799061897a255f99314f0bd3f1", + "address": "0x686f5c383EaB9Ec1Ec8E96171457CB562D58A219" + }, + { + "facetName": "KycFacet", + "key": "0xf516a0f6b4726244ae916c590cd26c2b593d7d448e46e43714fb9f9435c46e32", + "address": "0x2e7cABe461C87b95F7fF9A003f20f107c90e0567" + }, + { + "facetName": "PauseFacet", + "key": "0x9429fd9ef38f89f41bd9ec33fd5c94b287ed1c27a98938da43835ac761b2f92c", + "address": "0x147E4776AB3f32AFE0A374733bcf55c7148d24fa" + }, + { + "facetName": "SnapshotsFacet", + "key": "0x9a3fc46d83536ef6b87eb4fec37302bfd1a7c18e81ea2da853b911b44cf5b0cf", + "address": "0x28Ff3a01933452aF0a9E85D2624E1ec2D9E81a45" + }, + { + "facetName": "ERC1410IssuerFacet", + "key": "0x6e82b75f32c9647cc00b4c3eabbef5a82677f3e91d5d196eb4dd6a0365941344", + "address": "0x5976bc12Ccc4Fac7BBb4f7187Ce635d33b13cA81" + }, + { + "facetName": "ERC1410ManagementFacet", + "key": "0x232f8686795d3f197681faf0d8db05655e759f62d709d56b97e5d9cfff29dbf5", + "address": "0x8D8Ea0E0fd85CF8f11027A09A07763af24F98077" + }, + { + "facetName": "ERC1410ReadFacet", + "key": "0x5eb2734b83ea80c3eb63463a6192b30ab2526cb7a073f0abfda1a404c92ae497", + "address": "0xD8346f57F9d6bd491aFa112060606Da120b20d1A" + }, + { + "facetName": "ERC1410TokenHolderFacet", + "key": "0x0466bf860d23f1ecbc25f364735e0dc3830d236f09182599831730ddd2792caa", + "address": "0xE09ef2c1B164BD2A1F30136B22320ac58bD08cd1" + }, + { + "facetName": "ERC1594Facet", + "key": "0xcb70773e8163595d8bd906e277adeb3935976ad802ee8c29face3dfb0263291f", + "address": "0xaf1E4B5f67B8319ce09bC28148A7229839Be20ad" + }, + { + "facetName": "ERC1643Facet", + "key": "0x24543637956a3076689f171d3932b10f22d40f3785d53acebb340f37bed01625", + "address": "0xAd1eAB6D3957053076998aa1d11F3589AF1D219d" + }, + { + "facetName": "ERC1644Facet", + "key": "0xf1da2ed271d62ba0b6597874c96fb6ed7d929e5ec679f4ad8c2c516c72f6736d", + "address": "0x6a65A6BCBAC04f9e1b5e1993F6c03b6F865928D9" + }, + { + "facetName": "ERC20PermitFacet", + "key": "0xef05f0313623d32145212ed45620c8b2c8c294b3d6955cf26f3d1b0569fbc1fa", + "address": "0xe4ce7AEfc3DD10B8445BBe474C3C19cd1bca9629" + }, + { + "facetName": "ERC20VotesFacet", + "key": "0x5cbfbaa435e19a43530a00ac685c9b5252862a94af2053667ded44642a0d9f4c", + "address": "0xbDf2b9ab57197Da542EaA868e7cbB51646B28f9B" + }, + { + "facetName": "ERC3643BatchFacet", + "key": "0x9e671b494908a7523ee4e531ae7b7076b84f1c675d31346a9697f0ff4695f249", + "address": "0x08EB3cF7e6cf2eA0F39Dd1605bE89Bb460912757" + }, + { + "facetName": "ERC3643ManagementFacet", + "key": "0x06d7f1ffc912a9e44e5d742aa1c1eff596d0fabf91a1d0fb1c3ac0fba01f1773", + "address": "0xC2A8cdcbe13D87c22693d2c102f12721c3B33da2" + }, + { + "facetName": "ERC3643OperationsFacet", + "key": "0x39de33e56c92afe3cd7ece00d0ff8a0df512878690719e48c17d5b54604d2de2", + "address": "0xd3Bd659D0504a87ad08aAe9a1988B1c5920CD316" + }, + { + "facetName": "ERC3643ReadFacet", + "key": "0xf1a7f92f11da0b048b6417201459d4e1eaef0e112e0d58d5bd6ee4481e5394c7", + "address": "0xCDa629636aE1cA4E407cD3a5a73ad533cd39d0a4" + }, + { + "facetName": "ClearingActionsFacet", + "key": "0x5472dfc5c92ad7a8651518ea7d3854d3b6494e5bcaa19f91cd61bf93bf6f2a74", + "address": "0x04E5dfF795ef3d65879f7C595917206EC0DbB991" + }, + { + "facetName": "ClearingHoldCreationFacet", + "key": "0x44f99a141c434fac20d69e7511932ee344d5b37b61851976c83a5df4ca468152", + "address": "0x2254E1eaD3723BB5bcd86Db17674Dfb4Ed97d5F3" + }, + { + "facetName": "ClearingReadFacet", + "key": "0xebb2e29bdf4edaf4ca66a3f9b7735087f9d0474d56d856e53c94ef00596c0b1e", + "address": "0x9b7Fa43d87F73305e8e5A1FE5f6A056b94085cab" + }, + { + "facetName": "ClearingRedeemFacet", + "key": "0xb341e7aa749da43976c189209de51ccdf838af9f964cd27340b914d5b2aeba97", + "address": "0xBC8C5EaE5656d830dEBa23B3991f1f2427bA8070" + }, + { + "facetName": "ClearingTransferFacet", + "key": "0x7399d03db62430bec60ca2c3eacf98b1b7e2253f17593ef7a226d759442e0928", + "address": "0x8B51EC3170a71857eb0452c22eA6571fDf24b0bF" + }, + { + "facetName": "HoldManagementFacet", + "key": "0xaab5a0e0978ad146ca8dc61d16bab0212224eadf68bd08e3c66600ee4f59c12a", + "address": "0xd3f39f04D5Cc5e43e6cfC122d6444505C95532C9" + }, + { + "facetName": "HoldReadFacet", + "key": "0xd8a2714462c01975a075ccd4be2588934afd8074afef746fac089b757b803851", + "address": "0x6200096542CB40faa8794873710024B92C071D94" + }, + { + "facetName": "HoldTokenHolderFacet", + "key": "0x87b17a3ce9a86872f21469d26f005543a22ef5729998559f4ad433d5c4253f3e", + "address": "0x9FeE1dBFe7a065d12583c1f88c921a22Afde9F33" + }, + { + "facetName": "ExternalControlListManagementFacet", + "key": "0xb28d59e89fa116cebe06d8de737191b637a49d95f7d8d947d47ac000463e7c71", + "address": "0x2Be257d8dE090A75112467c6A2185fd11Fb9Bec7" + }, + { + "facetName": "ExternalKycListManagementFacet", + "key": "0x8676785f4d841823214e8ee8c497b3336a210be7559f5571c590249f6203e821", + "address": "0xc999937b0B96762498f0B86b82f57440099A75d3" + }, + { + "facetName": "ExternalPauseManagementFacet", + "key": "0xadd2e196c17b4f607e327e46341eedbbbc3dce86ac90ceb3e7244b0a5f8590ac", + "address": "0x539910917Ebdfa667EE5fc36A02c6803706378DA" + }, + { + "facetName": "AdjustBalancesFacet", + "key": "0x2bbe9fb018f1e7dd12b4442154e7fdfd75aec7b0a65d07debf49de4ece5fe8b8", + "address": "0x7B8E53963F9e2fEAE8398Af5c7C4E0Eb2a07e311" + }, + { + "facetName": "LockFacet", + "key": "0xf1364345b3db5ebe5808f2d2d2aaecb9cdb4fddacad1534033060ebc886fc1e9", + "address": "0xBE4a79db28856a052dAC5fdBd42115BE91B72562" + }, + { + "facetName": "ProceedRecipientsFacet", + "key": "0x87f4b676bf89cd24a01a78fd8e7fb2102c2f6d034be73d16402f7297e0ae625b", + "address": "0xdcfc4d9De6Bd9ea0E75712edD6A032884a672E94" + }, + { + "facetName": "ProtectedPartitionsFacet", + "key": "0x6d65d2938c05a4d952aff0845c1baa5bea04d4544db74f8b3b26004d1d58d58f", + "address": "0x8F02514610Af057e06D0C71B070549130a2a0E24" + }, + { + "facetName": "ScheduledBalanceAdjustmentsFacet", + "key": "0xc418e67a48260d700e5f85863ad6fa6593206a4385728f8baba1572d631535e0", + "address": "0xAd8107F5c9C4c5F8801277dbb6421D9121C02C89" + }, + { + "facetName": "ScheduledCrossOrderedTasksFacet", + "key": "0xa4934195ab83f1497ce5fc99b68d0f41694716bcfba5f232aa6c8e0d4d504f08", + "address": "0x6e1Ec66aB27cD04bcCA1F4B7DF54Bba0c8D46823" + }, + { + "facetName": "ScheduledSnapshotsFacet", + "key": "0x100f681e33d02a1124c2c05a537a1229eca89767c5e6e8720066ca74bfb85793", + "address": "0x6D9fFEd8adf25fb15189a75B2C16B64f7dEbF6cb" + }, + { + "facetName": "SsiManagementFacet", + "key": "0x46df6aaf3742e0cbad136a74fb679b686e087dcc3a3d92d1c4ce2f3ef1b508a0", + "address": "0x1eD7372C336f684A1dd8De7858475e406037E443" + }, + { + "facetName": "TransferAndLockFacet", + "key": "0xd9b300e6bf7a143b8fd8cf1d4ab050e691c862bf0f57a7d49cc08c60efe68d08", + "address": "0x14df4e218ff4Ec3DB83B95041E90bef8A99f86fE" + }, + { + "facetName": "EquityUSAFacet", + "key": "0xfe85fe0513f5a5676011f59495ae16b2b93c981c190e99e61903e5603542c810", + "address": "0x46F72A8253796E16A8d98CF176246da77f94E3Cb" + } + ] + }, + "bond": { + "configId": "0x0000000000000000000000000000000000000000000000000000000000000002", + "version": 1, + "facetCount": 45, + "facets": [ + { + "facetName": "AccessControlFacet", + "key": "0x011768a41cb4fe76a26f444eec15d81a0d84e919a36336d72c6539cf41c0fcf6", + "address": "0x1e4dc70f026DcBF98D6308F84aae40Ee4E716C45" + }, + { + "facetName": "CapFacet", + "key": "0xfb3f8aac36661b5540c571d821c80dc9db7ede5ca2a4204ee562b3356f0c026b", + "address": "0x1d0e7E09f1BC70A9d53B33158FD0A94711c16735" + }, + { + "facetName": "ControlListFacet", + "key": "0xfbb1491bfcecd95f79409bd5a4b69a4ba1e5573573372f5d2d66c11e3016414c", + "address": "0x4fce95aBDcE74095197c0e87F6DFE5a0e251AB7c" + }, + { + "facetName": "CorporateActionsFacet", + "key": "0x3cc74200ccfb5d585a6d170f8824979dbf1b592e0a41eef41cf6d86cf4882077", + "address": "0x840723F9263BD2B19e133D64AF32EFF7DBcA3481" + }, + { + "facetName": "DiamondFacet", + "key": "0x1b5212ea37fb29e99afa2812a5d7d7e662a477424d3de1a18cc3871a2ee94d78", + "address": "0x1a8c369B60EA9d5929e7Cca64CB3F11B29907154" + }, + { + "facetName": "ERC20Facet", + "key": "0x064c883089ba1a596d9146c7aaa73c19ef8825f374c67a9538787c3d12e68dc5", + "address": "0xa5A4aFAfaBd45C6F99d2dab3028f9bB2c9981c2f" + }, + { + "facetName": "FreezeFacet", + "key": "0x49f765e7155d979a148049c2a0ebed5e028b11799061897a255f99314f0bd3f1", + "address": "0x686f5c383EaB9Ec1Ec8E96171457CB562D58A219" + }, + { + "facetName": "KycFacet", + "key": "0xf516a0f6b4726244ae916c590cd26c2b593d7d448e46e43714fb9f9435c46e32", + "address": "0x2e7cABe461C87b95F7fF9A003f20f107c90e0567" + }, + { + "facetName": "PauseFacet", + "key": "0x9429fd9ef38f89f41bd9ec33fd5c94b287ed1c27a98938da43835ac761b2f92c", + "address": "0x147E4776AB3f32AFE0A374733bcf55c7148d24fa" + }, + { + "facetName": "SnapshotsFacet", + "key": "0x9a3fc46d83536ef6b87eb4fec37302bfd1a7c18e81ea2da853b911b44cf5b0cf", + "address": "0x28Ff3a01933452aF0a9E85D2624E1ec2D9E81a45" + }, + { + "facetName": "ERC1410IssuerFacet", + "key": "0x6e82b75f32c9647cc00b4c3eabbef5a82677f3e91d5d196eb4dd6a0365941344", + "address": "0x5976bc12Ccc4Fac7BBb4f7187Ce635d33b13cA81" + }, + { + "facetName": "ERC1410ManagementFacet", + "key": "0x232f8686795d3f197681faf0d8db05655e759f62d709d56b97e5d9cfff29dbf5", + "address": "0x8D8Ea0E0fd85CF8f11027A09A07763af24F98077" + }, + { + "facetName": "ERC1410ReadFacet", + "key": "0x5eb2734b83ea80c3eb63463a6192b30ab2526cb7a073f0abfda1a404c92ae497", + "address": "0xD8346f57F9d6bd491aFa112060606Da120b20d1A" + }, + { + "facetName": "ERC1410TokenHolderFacet", + "key": "0x0466bf860d23f1ecbc25f364735e0dc3830d236f09182599831730ddd2792caa", + "address": "0xE09ef2c1B164BD2A1F30136B22320ac58bD08cd1" + }, + { + "facetName": "ERC1594Facet", + "key": "0xcb70773e8163595d8bd906e277adeb3935976ad802ee8c29face3dfb0263291f", + "address": "0xaf1E4B5f67B8319ce09bC28148A7229839Be20ad" + }, + { + "facetName": "ERC1643Facet", + "key": "0x24543637956a3076689f171d3932b10f22d40f3785d53acebb340f37bed01625", + "address": "0xAd1eAB6D3957053076998aa1d11F3589AF1D219d" + }, + { + "facetName": "ERC1644Facet", + "key": "0xf1da2ed271d62ba0b6597874c96fb6ed7d929e5ec679f4ad8c2c516c72f6736d", + "address": "0x6a65A6BCBAC04f9e1b5e1993F6c03b6F865928D9" + }, + { + "facetName": "ERC20PermitFacet", + "key": "0xef05f0313623d32145212ed45620c8b2c8c294b3d6955cf26f3d1b0569fbc1fa", + "address": "0xe4ce7AEfc3DD10B8445BBe474C3C19cd1bca9629" + }, + { + "facetName": "ERC20VotesFacet", + "key": "0x5cbfbaa435e19a43530a00ac685c9b5252862a94af2053667ded44642a0d9f4c", + "address": "0xbDf2b9ab57197Da542EaA868e7cbB51646B28f9B" + }, + { + "facetName": "ERC3643BatchFacet", + "key": "0x9e671b494908a7523ee4e531ae7b7076b84f1c675d31346a9697f0ff4695f249", + "address": "0x08EB3cF7e6cf2eA0F39Dd1605bE89Bb460912757" + }, + { + "facetName": "ERC3643ManagementFacet", + "key": "0x06d7f1ffc912a9e44e5d742aa1c1eff596d0fabf91a1d0fb1c3ac0fba01f1773", + "address": "0xC2A8cdcbe13D87c22693d2c102f12721c3B33da2" + }, + { + "facetName": "ERC3643OperationsFacet", + "key": "0x39de33e56c92afe3cd7ece00d0ff8a0df512878690719e48c17d5b54604d2de2", + "address": "0xd3Bd659D0504a87ad08aAe9a1988B1c5920CD316" + }, + { + "facetName": "ERC3643ReadFacet", + "key": "0xf1a7f92f11da0b048b6417201459d4e1eaef0e112e0d58d5bd6ee4481e5394c7", + "address": "0xCDa629636aE1cA4E407cD3a5a73ad533cd39d0a4" + }, + { + "facetName": "ClearingActionsFacet", + "key": "0x5472dfc5c92ad7a8651518ea7d3854d3b6494e5bcaa19f91cd61bf93bf6f2a74", + "address": "0x04E5dfF795ef3d65879f7C595917206EC0DbB991" + }, + { + "facetName": "ClearingHoldCreationFacet", + "key": "0x44f99a141c434fac20d69e7511932ee344d5b37b61851976c83a5df4ca468152", + "address": "0x2254E1eaD3723BB5bcd86Db17674Dfb4Ed97d5F3" + }, + { + "facetName": "ClearingReadFacet", + "key": "0xebb2e29bdf4edaf4ca66a3f9b7735087f9d0474d56d856e53c94ef00596c0b1e", + "address": "0x9b7Fa43d87F73305e8e5A1FE5f6A056b94085cab" + }, + { + "facetName": "ClearingRedeemFacet", + "key": "0xb341e7aa749da43976c189209de51ccdf838af9f964cd27340b914d5b2aeba97", + "address": "0xBC8C5EaE5656d830dEBa23B3991f1f2427bA8070" + }, + { + "facetName": "ClearingTransferFacet", + "key": "0x7399d03db62430bec60ca2c3eacf98b1b7e2253f17593ef7a226d759442e0928", + "address": "0x8B51EC3170a71857eb0452c22eA6571fDf24b0bF" + }, + { + "facetName": "HoldManagementFacet", + "key": "0xaab5a0e0978ad146ca8dc61d16bab0212224eadf68bd08e3c66600ee4f59c12a", + "address": "0xd3f39f04D5Cc5e43e6cfC122d6444505C95532C9" + }, + { + "facetName": "HoldReadFacet", + "key": "0xd8a2714462c01975a075ccd4be2588934afd8074afef746fac089b757b803851", + "address": "0x6200096542CB40faa8794873710024B92C071D94" + }, + { + "facetName": "HoldTokenHolderFacet", + "key": "0x87b17a3ce9a86872f21469d26f005543a22ef5729998559f4ad433d5c4253f3e", + "address": "0x9FeE1dBFe7a065d12583c1f88c921a22Afde9F33" + }, + { + "facetName": "ExternalControlListManagementFacet", + "key": "0xb28d59e89fa116cebe06d8de737191b637a49d95f7d8d947d47ac000463e7c71", + "address": "0x2Be257d8dE090A75112467c6A2185fd11Fb9Bec7" + }, + { + "facetName": "ExternalKycListManagementFacet", + "key": "0x8676785f4d841823214e8ee8c497b3336a210be7559f5571c590249f6203e821", + "address": "0xc999937b0B96762498f0B86b82f57440099A75d3" + }, + { + "facetName": "ExternalPauseManagementFacet", + "key": "0xadd2e196c17b4f607e327e46341eedbbbc3dce86ac90ceb3e7244b0a5f8590ac", + "address": "0x539910917Ebdfa667EE5fc36A02c6803706378DA" + }, + { + "facetName": "AdjustBalancesFacet", + "key": "0x2bbe9fb018f1e7dd12b4442154e7fdfd75aec7b0a65d07debf49de4ece5fe8b8", + "address": "0x7B8E53963F9e2fEAE8398Af5c7C4E0Eb2a07e311" + }, + { + "facetName": "LockFacet", + "key": "0xf1364345b3db5ebe5808f2d2d2aaecb9cdb4fddacad1534033060ebc886fc1e9", + "address": "0xBE4a79db28856a052dAC5fdBd42115BE91B72562" + }, + { + "facetName": "ProceedRecipientsFacet", + "key": "0x87f4b676bf89cd24a01a78fd8e7fb2102c2f6d034be73d16402f7297e0ae625b", + "address": "0xdcfc4d9De6Bd9ea0E75712edD6A032884a672E94" + }, + { + "facetName": "ProtectedPartitionsFacet", + "key": "0x6d65d2938c05a4d952aff0845c1baa5bea04d4544db74f8b3b26004d1d58d58f", + "address": "0x8F02514610Af057e06D0C71B070549130a2a0E24" + }, + { + "facetName": "ScheduledBalanceAdjustmentsFacet", + "key": "0xc418e67a48260d700e5f85863ad6fa6593206a4385728f8baba1572d631535e0", + "address": "0xAd8107F5c9C4c5F8801277dbb6421D9121C02C89" + }, + { + "facetName": "ScheduledCrossOrderedTasksFacet", + "key": "0xa4934195ab83f1497ce5fc99b68d0f41694716bcfba5f232aa6c8e0d4d504f08", + "address": "0x6e1Ec66aB27cD04bcCA1F4B7DF54Bba0c8D46823" + }, + { + "facetName": "ScheduledSnapshotsFacet", + "key": "0x100f681e33d02a1124c2c05a537a1229eca89767c5e6e8720066ca74bfb85793", + "address": "0x6D9fFEd8adf25fb15189a75B2C16B64f7dEbF6cb" + }, + { + "facetName": "SsiManagementFacet", + "key": "0x46df6aaf3742e0cbad136a74fb679b686e087dcc3a3d92d1c4ce2f3ef1b508a0", + "address": "0x1eD7372C336f684A1dd8De7858475e406037E443" + }, + { + "facetName": "TransferAndLockFacet", + "key": "0xd9b300e6bf7a143b8fd8cf1d4ab050e691c862bf0f57a7d49cc08c60efe68d08", + "address": "0x14df4e218ff4Ec3DB83B95041E90bef8A99f86fE" + }, + { + "facetName": "BondUSAFacet", + "key": "0x09c1d80a160a7250b5fabc46d06a7fa4067e6d7292047c5024584b43f17d55ef", + "address": "0x3C24197E05f13271Aa124121321606b2EB69C134" + }, + { + "facetName": "BondUSAReadFacet", + "key": "0xe7ca0b805514da05524faf33d2d9d9432bf1dfa53096073a7267041cfdfb6d68", + "address": "0x050cD53CAFa1093648c30B809CAC78aC24A30243" + } + ] + } + }, + "summary": { + "totalContracts": 3, + "totalFacets": 48, + "totalConfigurations": 2, + "deploymentTime": 649654, + "gasUsed": "123711058", + "success": true + }, + "helpers": {} +} diff --git a/packages/ats/contracts/hardhat.config.ts b/packages/ats/contracts/hardhat.config.ts index 6458a7460..3338684dd 100644 --- a/packages/ats/contracts/hardhat.config.ts +++ b/packages/ats/contracts/hardhat.config.ts @@ -317,6 +317,10 @@ const config: HardhatUserConfig = { }, dodoc: { runOnCompile: false, + outputDir: "./docs/api", + freshOutput: true, + include: ["contracts"], + exclude: ["contracts/test", "contracts/mocks", "node_modules"], }, }; diff --git a/packages/ats/contracts/package.json b/packages/ats/contracts/package.json index 29762a34a..7291ebc5e 100644 --- a/packages/ats/contracts/package.json +++ b/packages/ats/contracts/package.json @@ -1,6 +1,6 @@ { "name": "@hashgraph/asset-tokenization-contracts", - "version": "3.1.0", + "version": "4.0.0", "repository": "https://github.com/hashgraph/asset-tokenization-studio", "type": "commonjs", "main": "./build/typechain-types/index.js", @@ -59,31 +59,48 @@ "lint:js": "eslint .", "lint:js:fix": "eslint . --fix", "generate:registry": "npx ts-node scripts/tools/generateRegistry.ts", - "deploy": "npm run build && npx ts-node -r tsconfig-paths/register scripts/cli/standalone.ts", - "deploy:local": "NETWORK=local npm run deploy", - "deploy:local:auto": "npx hardhat node > hardhat-node.log 2>&1 & sleep 3 && npm run deploy:local; kill $!", - "deploy:hedera:local": "NETWORK=hedera-local npm run deploy", - "deploy:hedera:previewnet": "NETWORK=hedera-previewnet npm run deploy", - "deploy:hedera:testnet": "NETWORK=hedera-testnet npm run deploy", - "deploy:hedera:mainnet": "NETWORK=hedera-mainnet npm run deploy", - "upgrade": "npm run build && npx ts-node -r tsconfig-paths/register scripts/cli/upgrade.ts", - "upgrade:local": "NETWORK=local npm run upgrade", - "upgrade:hedera:local": "NETWORK=hedera-local npm run upgrade", - "upgrade:testnet": "NETWORK=hedera-testnet npm run upgrade", - "upgrade:mainnet": "NETWORK=hedera-mainnet npm run upgrade", - "upgrade:previewnet": "NETWORK=hedera-previewnet npm run upgrade", - "upgrade:tup": "npx ts-node -r tsconfig-paths/register scripts/cli/upgradeTup.ts", + "deploy:newBlr": "npm run build && npx ts-node -r tsconfig-paths/register scripts/cli/deploySystemWithNewBlr.ts", + "deploy:newBlr:local": "NETWORK=local npm run deploy:newBlr", + "deploy:newBlr:local:auto": "npx hardhat node > hardhat-node.log 2>&1 & sleep 3 && npm run deploy:newBlr:local; kill $!", + "deploy:newBlr:hedera:local": "NETWORK=hedera-local npm run deploy:newBlr", + "deploy:newBlr:hedera:previewnet": "NETWORK=hedera-previewnet npm run deploy:newBlr", + "deploy:newBlr:hedera:testnet": "NETWORK=hedera-testnet npm run deploy:newBlr", + "deploy:newBlr:hedera:mainnet": "NETWORK=hedera-mainnet npm run deploy:newBlr", + "deploy:existingBlr": "npm run build && npx ts-node -r tsconfig-paths/register scripts/cli/deploySystemWithExistingBlr.ts", + "deploy:existingBlr:local": "NETWORK=local npm run deploy:existingBlr", + "deploy:existingBlr:hedera:local": "NETWORK=hedera-local npm run deploy:existingBlr", + "deploy:existingBlr:hedera:previewnet": "NETWORK=hedera-previewnet npm run deploy:existingBlr", + "deploy:existingBlr:hedera:testnet": "NETWORK=hedera-testnet npm run deploy:existingBlr", + "deploy:existingBlr:hedera:mainnet": "NETWORK=hedera-mainnet npm run deploy:existingBlr", + "upgrade:configs": "npm run build && npx ts-node -r tsconfig-paths/register scripts/cli/upgradeConfigurations.ts", + "upgrade:configs:local": "NETWORK=local npm run upgrade:configs", + "upgrade:configs:hedera:local": "NETWORK=hedera-local npm run upgrade:configs", + "upgrade:configs:hedera:previewnet": "NETWORK=hedera-previewnet npm run upgrade:configs", + "upgrade:configs:hedera:testnet": "NETWORK=hedera-testnet npm run upgrade:configs", + "upgrade:configs:hedera:mainnet": "NETWORK=hedera-mainnet npm run upgrade:configs", + "upgrade:tup": "npm run build && npx ts-node -r tsconfig-paths/register scripts/cli/upgradeTupProxies.ts", "upgrade:tup:local": "NETWORK=local npm run upgrade:tup", - "upgrade:tup:hedera-local": "NETWORK=hedera-local npm run upgrade:tup", - "upgrade:tup:testnet": "NETWORK=hedera-testnet npm run upgrade:tup", - "upgrade:tup:mainnet": "NETWORK=hedera-mainnet npm run upgrade:tup", - "upgrade:tup:previewnet": "NETWORK=hedera-previewnet npm run upgrade:tup", + "upgrade:tup:hedera:local": "NETWORK=hedera-local npm run upgrade:tup", + "upgrade:tup:hedera:previewnet": "NETWORK=hedera-previewnet npm run upgrade:tup", + "upgrade:tup:hedera:testnet": "NETWORK=hedera-testnet npm run upgrade:tup", + "upgrade:tup:hedera:mainnet": "NETWORK=hedera-mainnet npm run upgrade:tup", + "deploy": "npm run deploy:newBlr", + "deploy:local": "npm run deploy:newBlr:local", + "deploy:hedera:local": "npm run deploy:newBlr:hedera:local", + "deploy:hedera:previewnet": "npm run deploy:newBlr:hedera:previewnet", + "deploy:hedera:testnet": "npm run deploy:newBlr:hedera:testnet", + "deploy:hedera:mainnet": "npm run deploy:newBlr:hedera:mainnet", + "upgrade": "npm run upgrade:configs", + "upgrade:local": "npm run upgrade:configs:local", + "upgrade:hedera:local": "npm run upgrade:configs:hedera:local", + "upgrade:testnet": "npm run upgrade:configs:hedera:testnet", + "upgrade:mainnet": "npm run upgrade:configs:hedera:mainnet", + "upgrade:previewnet": "npm run upgrade:configs:hedera:previewnet", "local:hardhat": "npx hardhat node", - "deploy:hardhat": "npx hardhat run scripts/cli/hardhat.ts", - "compile": "npx hardhat compile", - "compile:traces": "npx hardhat --show-stack-traces compile", - "compile:force": "npx hardhat compile --force", - "compile:forceBuild": "npx hardhat compile --force && npm run build", + "compile": "NODE_OPTIONS='--max-old-space-size=8192' npx hardhat compile", + "compile:traces": "NODE_OPTIONS='--max-old-space-size=8192' npx hardhat --show-stack-traces compile", + "compile:force": "NODE_OPTIONS='--max-old-space-size=8192' npx hardhat compile --force", + "compile:forceBuild": "NODE_OPTIONS='--max-old-space-size=8192' npx hardhat compile --force && npm run build", "typechain": "npx hardhat typechain", "clean:cache": "npx hardhat clean", "test": "bash -c 'npx hardhat test $(find test/contracts/unit test/scripts -name \"*.test.ts\")'", @@ -107,6 +124,8 @@ "test:coverage:factory": "npx hardhat coverage --testfiles 'test/contracts/unit/factory/**/*.ts'", "test:coverage:resolver": "npx hardhat coverage --testfiles 'test/contracts/unit/resolver/**/*.ts'", "test:coverage:resolverProxy": "npx hardhat coverage --testfiles 'test/contracts/unit/resolverProxy/**/*.ts'", + "test:coverage:docker": "CONCURRENCY=12 DOCKERIZED=true NODE_OPTIONS='--max-old-space-size=8192' npx ts-node scripts/tools/runParallelCoverageDocker.ts", + "docker:build": "docker build -t ats-contracts-coverage -f Dockerfile.coverage ../../.. ", "test:ci": "npm run test", "size": "npx hardhat size-contracts", "keccak256": "npx hardhat keccak256", @@ -144,12 +163,16 @@ "chai": "^4.4.0", "dotenv": "^16.0.3", "glob": "^11.0.3", - "hardhat": "^v2.26.3", + "hardhat": "^v2.28.2", "hardhat-abi-exporter": "^2.11.0", "hardhat-contract-sizer": "^2.10.0", "hardhat-dependency-compiler": "^1.2.1", "hardhat-gas-reporter": "^1.0.8", - "solidity-coverage": "^0.8.14", + "istanbul-combine": "^0.3.0", + "nyc": "^17.1.0", + "prettier": "^3.5.3", + "prettier-plugin-solidity": "^1.4.2", + "solidity-coverage": "^0.8.17", "ts-node": "^10.9.1", "tsc-alias": "^1.8.16", "tsconfig-paths": "^4.2.0", diff --git a/packages/ats/contracts/scripts/DEVELOPER_GUIDE.md b/packages/ats/contracts/scripts/DEVELOPER_GUIDE.md index 2f2a9a3ea..a8dc0564c 100644 --- a/packages/ats/contracts/scripts/DEVELOPER_GUIDE.md +++ b/packages/ats/contracts/scripts/DEVELOPER_GUIDE.md @@ -121,49 +121,32 @@ const resolverKey = facetDef.resolverKey.value; // Looked up from registry ## Quick Start - Using the CLI -### Hardhat Mode - -Deploy using Hardhat's built-in ethers and network configuration: - -```bash -# Default network (from hardhat.config.ts) -npm run deploy:hardhat - -# Specific network -npm run deploy:hardhat -- --network hedera-testnet -npm run deploy:hardhat -- --network hedera-mainnet -npm run deploy:hardhat -- --network hardhat # Local in-memory -``` - -**When to use**: Working within Hardhat project, need access to Hardhat tasks/helpers. - -### Standalone Mode - -Deploy without Hardhat runtime (~3x faster startup): +Deploy to different networks using the unified CLI: ```bash -# Default to hedera-testnet -npm run deploy +# Local testing (requires running Hardhat node) +npm run deploy:local -# Specific network +# Hedera networks npm run deploy:hedera:testnet npm run deploy:hedera:mainnet +npm run deploy:hedera:previewnet ``` -**When to use**: Production deployments, CI/CD pipelines, faster iteration cycles. +**Note**: The `NETWORK` environment variable is required (no default fallback). ### Network Configuration -Both modes read from `.env` files for network configuration: +The CLI reads from `.env` files for network configuration: ```bash -# Required environment variables -HEDERA_TESTNET_RPC_URL=https://testnet.hashio.io/api -HEDERA_TESTNET_PRIVATE_KEY=0x... -HEDERA_TESTNET_MIRROR_NODE_URL=https://testnet.mirrornode.hedera.com +# Required environment variables (pattern: {NETWORK}_*) +HEDERA_TESTNET_JSON_RPC_ENDPOINT=https://testnet.hashio.io/api +HEDERA_TESTNET_PRIVATE_KEY_0=0x... +HEDERA_TESTNET_MIRROR_NODE_ENDPOINT=https://testnet.mirrornode.hedera.com ``` -See [Configuration.ts](/Users/work/Projects/asset-tokenization-studio/packages/ats/contracts/scripts/infrastructure/config.ts) for all network options. +See [Configuration.ts](../Configuration.ts) for all network options. --- @@ -483,11 +466,40 @@ Add exports to [domain/index.ts](domain/index.ts): ```typescript // Fund configuration +export * from "./factory/deployFundToken"; export { createFundConfiguration } from "./fund/createConfiguration"; export { FUND_CONFIG_ID } from "./constants"; ``` -### Step 4: Deploy Custom Facets (if any) +### Step 4: Add factory + +Add 'deployFundToken.ts' factory to [domain/factory](domain/factory/deployFundToken.ts): + +### Step 5: Add to workflows scripts + +Add new asset to + +- [domain/workflows/deploySystemWithExistingBlr](domain/factory/workflows/deploySystemWithExistingBlr.ts): +- [domain/workflows/deploySystemWithNewBlr](domain/factory/workflows/deploySystemWithNewBlr.ts): + +### Step 6: Add to checkpoint scripts + +Add new asset to + +- [infrastructure/checkpoint/utils](infrastructure/checkpoint/utils.ts): +- [infrastructure/types/checkpoint](infrastructure/types/checkpoint.ts): + +### Step 7: (Only for Testing) Add token fixture + +Add new fixture to + +- [test/fixture/tokens](test/fixture/tokens/fund.fixture.ts): + +Add fixture to index + +- [test/fixture/index](test/fixture/index.ts): + +### Step 8: Deploy Custom Facets (if any) If you have fund-specific facets, deploy them: @@ -509,7 +521,7 @@ console.log("Fund facets deployed:", { }); ``` -### Step 5: Register All Facets +### Step 9: Register All Facets Register both common facets and fund-specific facets: @@ -540,7 +552,7 @@ const result = await registerFacets(blr, { **Note**: Registering an already-registered facet is safe and will update to the new address. -### Step 6: Create Initial Configuration +### Step 10: Create Initial Configuration Create the first version of your fund configuration: @@ -575,7 +587,7 @@ if (result.success) { } ``` -### Step 7: Update Workflows (Optional) +### Step 11: Update Workflows (Optional) If you want to include your new asset in complete deployment workflows, update [workflows/deployCompleteSystem.ts](workflows/deployCompleteSystem.ts): @@ -597,7 +609,7 @@ output.configurations.fund = { }; ``` -### Step 8: Verify +### Step 12: Verify Verify your new asset configuration: @@ -622,6 +634,13 @@ When creating a new asset, touch these files: - [ ] `domain/constants.ts` - Add `FUND_CONFIG_ID` - [ ] `domain/fund/createConfiguration.ts` - Create module with `FUND_FACETS` array - [ ] `domain/index.ts` - Export `createFundConfiguration` and `FUND_CONFIG_ID` +- [ ] `domain/factory/deployFund.ts` +- [ ] `infrastructure/checkpoint/utils.ts` +- [ ] `infrastructure/types/checkpoint.ts` +- [ ] `workflows/deploySystemWithExistingBlr.ts` - Add to deployment workflow +- [ ] `workflows/deploySystemWithNewBlr.ts` - Add to deployment workflow +- [ ] `tests/fixtures/tokens/fund.fixture.ts` +- [ ] `tests/fixtures/index.ts` - [ ] `contracts/layer_3/jurisdiction/usa/FundUSAFacet.sol` - Implement custom facets (if needed) - [ ] `workflows/deployCompleteSystem.ts` - Add to deployment workflow (optional) @@ -1419,6 +1438,40 @@ export async function deployAndRegisterCustomFacets(signer: Signer, blr: Contrac --- +### Type Declaration Patterns + +Two patterns are used for TypeScript types in this codebase: + +**Co-located (default)**: Define types in the same file as the function that uses them. + +```typescript +// operations/blrDeployment.ts +export interface DeployBlrOptions { ... } +export interface DeployBlrResult { ... } +export async function deployBlr(...): Promise { ... } +``` + +**Centralized**: Import from `types/` when shared across 3+ files. + +```typescript +// operations/blrConfigurations.ts +import type { ConfigurationData, ConfigurationError } from "../types"; +``` + +**When to use each:** + +| Use Co-located | Use Centralized | +| ------------------------ | ------------------------ | +| Type used by 1-2 files | Type used by 3+ files | +| Specific to one function | Core infrastructure type | +| May evolve with feature | Stable, rarely changes | + +**Rule of thumb**: Start co-located. Extract to `types/` only when you need to import into a 3rd file. + +See [`types/core.ts:9-30`](infrastructure/types/core.ts#L9-L30) for detailed guidelines. + +--- + ## Troubleshooting ### "Facet not found in registry" diff --git a/packages/ats/contracts/scripts/README.md b/packages/ats/contracts/scripts/README.md index 3cc3f0fad..db7e1a075 100644 --- a/packages/ats/contracts/scripts/README.md +++ b/packages/ats/contracts/scripts/README.md @@ -17,21 +17,19 @@ This README provides comprehensive reference documentation for the deployment sy **Before deploying:** -- **πŸ”΄ Network flag required**: Must explicitly specify `--network ` when using Hardhat deployment -- **πŸ”΄ Double dash required**: Use `--` before network flag when using npm scripts (e.g., `npm run deploy:hardhat -- --network hedera-testnet`) +- **πŸ”΄ NETWORK required**: Must set `NETWORK` environment variable (no default fallback) - **πŸ”΄ Environment setup**: Real networks require `.env` configuration (RPC endpoint + private key) - **πŸ”΄ Gas costs**: Full deployment costs ~$20-50 on testnet, ensure sufficient balance - **πŸ”΄ Time commitment**: Real network deployments take 5-10 minutes due to transaction confirmations **Quick Command Reference:** -| Command | Use Case | Requirements | -| ---------------------------------------------------- | ------------------------ | --------------------------- | -| `npm run deploy:hardhat -- --network hardhat` | In-memory testing | Hardhat project | -| `npm run deploy:hardhat -- --network hedera-testnet` | Testnet deployment | Hardhat + `.env` | -| `npm run deploy` | Standalone deployment | Compiled artifacts + `.env` | -| `npm run deploy:hedera:testnet` | Testnet shortcut | `.env` configured | -| `npm run generate:registry` | Update contract metadata | Contracts compiled | +| Command | Use Case | Requirements | +| ------------------------------- | ------------------------ | -------------------- | +| `npm run deploy:local` | Local testing | Hardhat node running | +| `npm run deploy:hedera:testnet` | Testnet deployment | `.env` configured | +| `npm run deploy:hedera:mainnet` | Mainnet deployment | `.env` configured | +| `npm run generate:registry` | Update contract metadata | Contracts compiled | --- @@ -445,8 +443,6 @@ import type { DeploymentResult } from "@scripts/infrastructure"; ## Quick Start -> **Note**: We'll use Hardhat deployment as the primary example. For standalone deployment (no Hardhat runtime), see [Usage Modes](#usage-modes). - ### Step 1: Setup Environment **From contracts directory** (`packages/ats/contracts/`): @@ -455,10 +451,13 @@ import type { DeploymentResult } from "@scripts/infrastructure"; cp .env.sample .env ``` -**For in-memory testing** (hardhat network): +**For local testing** (local Hardhat node): -- No `.env` configuration needed -- Uses Hardhat's built-in accounts +```bash +# Uses test accounts, minimal .env configuration +LOCAL_JSON_RPC_ENDPOINT='http://127.0.0.1:8545' +LOCAL_PRIVATE_KEY_0='0xac0974bec39a17e36ba4a6b4d238ff944bacb478cbed5efcae784d7bf4f2ff80' +``` **For real networks** (testnet/mainnet), edit `.env`: @@ -471,21 +470,21 @@ HEDERA_TESTNET_MIRROR_NODE_ENDPOINT='https://testnet.mirrornode.hedera.com' HEDERA_TESTNET_PRIVATE_KEY_0='0x...' # Optional: TimeTravel mode (testing only) -USE_TIME_TRAVEL=false +USE_TIMETRAVEL=false ``` ### Step 2: Deploy ```bash -# In-memory test network (fast, no .env needed) -npm run deploy:hardhat -- --network hardhat +# Local test network (requires running Hardhat node) +npm run deploy:local # Testnet (requires .env configuration) -npm run deploy:hardhat -- --network hedera-testnet +npm run deploy:hedera:testnet # Other networks -npm run deploy:hardhat -- --network hedera-mainnet -npm run deploy:hardhat -- --network hedera-previewnet +npm run deploy:hedera:mainnet +npm run deploy:hedera:previewnet ``` ### Step 3: Verify Deployment @@ -524,7 +523,7 @@ rm deployments/{network}/.checkpoints/*.json # Deploy fresh (adjust network as needed) npm run deploy:hedera:testnet npm run deploy:hedera:mainnet -npm run deploy:hardhat -- --network hardhat +npm run deploy:local ``` **Why?** Partial configurations can't be resumed reliably. See [Troubleshooting](#when-deployment-fails) for details. @@ -533,13 +532,52 @@ npm run deploy:hardhat -- --network hardhat ## Usage Modes -The deployment system supports three modes: +The deployment system provides multiple CLI entry points for different deployment scenarios: + +| Mode | Entry Point | Signer Source | Use Case | Command | +| ------------------------- | ------------------------------------------------------------------------ | -------------------- | ------------------------------------------ | --------------------------------------------------------------------------- | +| **Deploy (New BLR)** | [cli/deploySystemWithNewBlr.ts](cli/deploySystemWithNewBlr.ts) | `ethers.Wallet` | Full deployment with new BLR | `npm run deploy:newBlr` or `npm run deploy:hedera:testnet` | +| **Deploy (Existing BLR)** | [cli/deploySystemWithExistingBlr.ts](cli/deploySystemWithExistingBlr.ts) | `ethers.Wallet` | Deploy tokens with existing BLR | `npm run deploy:existingBlr` or `npm run deploy:existingBlr:hedera:testnet` | +| **Upgrade Configs** | [cli/upgradeConfigurations.ts](cli/upgradeConfigurations.ts) | `ethers.Wallet` | Create new facet versions & configurations | `npm run upgrade:configs` or `npm run upgrade:configs:hedera:testnet` | +| **Upgrade TUP Proxies** | [cli/upgradeTupProxies.ts](cli/upgradeTupProxies.ts) | `ethers.Wallet` | Upgrade BLR/Factory implementations | `npm run upgrade:tup` or `npm run upgrade:tup:hedera:testnet` | +| **Module** | Import in your code | Any ethers.js Signer | Custom scripts, programmatic deployment | See example below | + +### CLI Shared Utilities + +All CLI entry points use reusable utilities from the `cli/shared/` directory to standardize environment validation and network configuration: + +#### `cli/shared/network.ts` + +- **`requireNetworkSigner()`** - Validates NETWORK environment variable and creates an ethers.js Signer + - Supports networks: `local`, `hedera-local`, `hedera-previewnet`, `hedera-testnet`, `hedera-mainnet` + - Loads private key from environment (e.g., `LOCAL_PRIVATE_KEY_0`, `HEDERA_TESTNET_PRIVATE_KEY_0`) + - Returns configured ethers.js Signer ready for contract interactions + +#### `cli/shared/validation.ts` + +- **`requireValidAddress(name)`** - Validates required Ethereum addresses from environment variables + - Throws error if address is missing or invalid format + - Example: `requireValidAddress('BLR_ADDRESS')` + +- **`validateOptionalAddress(name)`** - Validates optional Ethereum addresses + - Returns undefined if not set, validated address if present + - Example: `validateOptionalAddress('PROXY_ADDRESSES')` -| Mode | Entry Point | Signer Source | Use Case | Command | -| -------------- | -------------------------------------- | --------------------- | ----------------------------------------- | --------------------------------------------------- | -| **Hardhat** | [cli/hardhat.ts](cli/hardhat.ts) | `ethers.getSigners()` | Hardhat project deployment | `npm run deploy:hardhat -- --network ` | -| **Standalone** | [cli/standalone.ts](cli/standalone.ts) | `ethers.Wallet` | No Hardhat dependency, ~3x faster startup | `npm run deploy` or `npm run deploy:hedera:testnet` | -| **Module** | Import in your code | Any ethers.js Signer | Custom scripts, programmatic deployment | See example below | +- **`parseOptionalAddressList(envVar)`** - Parses comma-separated address lists + - Splits string and validates each address format + - Example: `parseOptionalAddressList('0xabc...,0xdef...')` + +- **`requireEnvVar(name, fallback?)`** - Validates required string environment variables + - Throws error if missing and no fallback provided + - Example: `requireEnvVar('BLR_ADDRESS')` + +- **`parseBooleanEnv(envVar, default?)`** - Parses boolean flags from environment + - Handles 'true', '1', 'yes' as true; others as false + - Example: `parseBooleanEnv('DEPLOY_NEW_BLR_IMPL', false)` + +- **`parseIntEnv(envVar, default?)`** - Parses integer values from environment + - Validates numeric format + - Example: `parseIntEnv('CONFIRMATIONS', 1)` ### Import as Module @@ -584,7 +622,7 @@ The upgrade workflow allows you to deploy new facet versions and update existing **Basic upgrade:** ```bash -BLR_ADDRESS= npm run upgrade:testnet +BLR_ADDRESS= npm run upgrade:configs:hedera:testnet ``` **Upgrade with proxy updates:** @@ -592,7 +630,7 @@ BLR_ADDRESS= npm run upgrade:testnet ```bash BLR_ADDRESS=0x123... \ PROXY_ADDRESSES=0xabc...,0xdef... \ -npm run upgrade:testnet +npm run upgrade:configs:hedera:testnet ``` **Upgrade only equity:** @@ -600,7 +638,7 @@ npm run upgrade:testnet ```bash BLR_ADDRESS=0x123... \ CONFIGURATIONS=equity \ -npm run upgrade:testnet +npm run upgrade:configs:hedera:testnet ``` **Environment Variables:** @@ -620,7 +658,7 @@ npm run upgrade:testnet ### Output -Upgrade results are saved to `upgrades/{network}_{timestamp}.json`: +Upgrade results are saved to `deployments/{network}/upgrade-configs-{timestamp}.json`: ```json { @@ -651,7 +689,7 @@ Upgrades use checkpoint-based resumability: ```bash # Upgrade will automatically resume if previous attempt failed -BLR_ADDRESS=0x123... npm run upgrade:testnet +BLR_ADDRESS=0x123... npm run upgrade:configs:hedera:testnet ``` ### Troubleshooting @@ -698,7 +736,7 @@ export PROXY_ADMIN=0x... # ProxyAdmin contract address export BLR_PROXY=0x... # BLR proxy to upgrade export DEPLOY_NEW_BLR_IMPL=true # Deploy new implementation -npm run upgrade:tup:testnet +npm run upgrade:tup:hedera:testnet ``` **Pattern B: Upgrade to existing implementation** @@ -708,7 +746,7 @@ export PROXY_ADMIN=0x... export BLR_PROXY=0x... export BLR_IMPLEMENTATION=0x... # Address of pre-deployed implementation -npm run upgrade:tup:testnet +npm run upgrade:tup:hedera:testnet ``` ### CLI Usage @@ -716,19 +754,19 @@ npm run upgrade:tup:testnet **Upgrade BLR on testnet** ```bash -npm run upgrade:tup:testnet +npm run upgrade:tup:hedera:testnet ``` **Upgrade Factory on testnet** ```bash -FACTORY_PROXY=0x... npm run upgrade:tup:testnet +FACTORY_PROXY=0x... npm run upgrade:tup:hedera:testnet ``` **Upgrade both BLR and Factory** ```bash -BLR_PROXY=0x... FACTORY_PROXY=0x... npm run upgrade:tup:testnet +BLR_PROXY=0x... FACTORY_PROXY=0x... npm run upgrade:tup:hedera:testnet ``` **Upgrade with existing implementations** @@ -738,7 +776,7 @@ BLR_PROXY=0x... \ BLR_IMPLEMENTATION=0x... \ FACTORY_PROXY=0x... \ FACTORY_IMPLEMENTATION=0x... \ -npm run upgrade:tup:testnet +npm run upgrade:tup:hedera:testnet ``` ### Environment Variables @@ -766,7 +804,7 @@ npm run upgrade:tup:testnet ### Output -Results are saved to `deployments/{network}/{network}-upgrade-tup-{timestamp}.json`: +Results are saved to `deployments/{network}/upgrade-tup-{timestamp}.json`: ```json { @@ -806,10 +844,10 @@ For long-running upgrades on slow networks, checkpoints automatically resume on ```bash # Initial attempt (may fail) -BLR_PROXY=0x... npm run upgrade:tup:testnet +BLR_PROXY=0x... npm run upgrade:tup:hedera:testnet # Fix the issue, then retry - workflow resumes automatically -BLR_PROXY=0x... npm run upgrade:tup:testnet +BLR_PROXY=0x... npm run upgrade:tup:hedera:testnet ``` Progress is tracked in `deployments/{network}/.checkpoints/` and automatically cleaned up on success. @@ -846,15 +884,14 @@ Progress is tracked in `deployments/{network}/.checkpoints/` and automatically c Use the same workflow across networks: -```bash -# Testnet -BLR_PROXY=0xTestnetBLR... DEPLOY_NEW_BLR_IMPL=true npm run upgrade:tup:testnet - # Previewnet (after validation) + BLR_PROXY=0xPreviewnetBLR... DEPLOY_NEW_BLR_IMPL=true npm run upgrade:tup:previewnet # Mainnet (after production testing) + BLR_PROXY=0xMainnetBLR... DEPLOY_NEW_BLR_IMPL=true npm run upgrade:tup:mainnet + ``` ### Difference from Upgrading Configurations @@ -874,97 +911,96 @@ BLR_PROXY=0xMainnetBLR... DEPLOY_NEW_BLR_IMPL=true npm run upgrade:tup:mainnet ## Directory Structure ``` + scripts/ -β”œβ”€β”€ infrastructure/ # Generic deployment infrastructure -β”‚ β”œβ”€β”€ index.ts # Public API exports -β”‚ β”œβ”€β”€ types.ts # Shared type definitions -β”‚ β”œβ”€β”€ constants.ts # Infrastructure constants -β”‚ β”œβ”€β”€ config.ts # Network configuration -β”‚ β”œβ”€β”€ registryFactory.ts # Registry helpers factory -β”‚ β”‚ -β”‚ β”œβ”€β”€ providers/ # Framework adapters -β”‚ β”‚ β”œβ”€β”€ index.ts -β”‚ β”‚ β”œβ”€β”€ hardhatProvider.ts -β”‚ β”‚ └── standaloneProvider.ts -β”‚ β”‚ -β”‚ β”œβ”€β”€ operations/ # Atomic deployment operations -β”‚ β”‚ β”œβ”€β”€ deployContract.ts -β”‚ β”‚ β”œβ”€β”€ deployProxy.ts -β”‚ β”‚ β”œβ”€β”€ upgradeProxy.ts -β”‚ β”‚ β”œβ”€β”€ blrDeployment.ts -β”‚ β”‚ β”œβ”€β”€ blrConfigurations.ts -β”‚ β”‚ β”œβ”€β”€ facetDeployment.ts -β”‚ β”‚ β”œβ”€β”€ proxyAdminDeployment.ts -β”‚ β”‚ β”œβ”€β”€ registerFacets.ts -β”‚ β”‚ β”œβ”€β”€ verifyDeployment.ts -β”‚ β”‚ └── generateRegistryPipeline.ts # Registry generation pipeline -β”‚ β”‚ -β”‚ └── utils/ # Generic utilities -β”‚ β”œβ”€β”€ validation.ts -β”‚ β”œβ”€β”€ logging.ts -β”‚ β”œβ”€β”€ transaction.ts -β”‚ └── naming.ts +β”œβ”€β”€ infrastructure/ # Generic deployment infrastructure +β”‚ β”œβ”€β”€ index.ts # Public API exports +β”‚ β”œβ”€β”€ types.ts # Shared type definitions +β”‚ β”œβ”€β”€ constants.ts # Infrastructure constants +β”‚ β”œβ”€β”€ config.ts # Network configuration +β”‚ β”œβ”€β”€ registryFactory.ts # Registry helpers factory +β”‚ β”‚ +β”‚ β”œβ”€β”€ signer.ts # Network signer utilities +β”‚ β”‚ +β”‚ β”œβ”€β”€ operations/ # Atomic deployment operations +β”‚ β”‚ β”œβ”€β”€ deployContract.ts +β”‚ β”‚ β”œβ”€β”€ deployProxy.ts +β”‚ β”‚ β”œβ”€β”€ upgradeProxy.ts +β”‚ β”‚ β”œβ”€β”€ blrDeployment.ts +β”‚ β”‚ β”œβ”€β”€ blrConfigurations.ts +β”‚ β”‚ β”œβ”€β”€ facetDeployment.ts +β”‚ β”‚ β”œβ”€β”€ proxyAdminDeployment.ts +β”‚ β”‚ β”œβ”€β”€ registerFacets.ts +β”‚ β”‚ β”œβ”€β”€ verifyDeployment.ts +β”‚ β”‚ └── generateRegistryPipeline.ts # Registry generation pipeline +β”‚ β”‚ +β”‚ └── utils/ # Generic utilities +β”‚ β”œβ”€β”€ validation.ts +β”‚ β”œβ”€β”€ logging.ts +β”‚ β”œβ”€β”€ transaction.ts +β”‚ └── naming.ts β”‚ -β”œβ”€β”€ domain/ # ATS-specific business logic -β”‚ β”œβ”€β”€ index.ts # Public API exports -β”‚ β”œβ”€β”€ constants.ts # ATS constants (roles, regulations, etc.) -β”‚ β”œβ”€β”€ atsRegistry.ts # ATS registry with helpers -β”‚ β”œβ”€β”€ atsRegistry.data.ts # Auto-generated registry data -β”‚ β”‚ -β”‚ β”œβ”€β”€ equity/ # Equity token logic -β”‚ β”‚ └── createConfiguration.ts -β”‚ β”‚ -β”‚ β”œβ”€β”€ bond/ # Bond token logic -β”‚ β”‚ └── createConfiguration.ts -β”‚ β”‚ -β”‚ └── factory/ # Factory logic -β”‚ β”œβ”€β”€ deploy.ts -β”‚ └── deployToken.ts +β”œβ”€β”€ domain/ # ATS-specific business logic +β”‚ β”œβ”€β”€ index.ts # Public API exports +β”‚ β”œβ”€β”€ constants.ts # ATS constants (roles, regulations, etc.) +β”‚ β”œβ”€β”€ atsRegistry.ts # ATS registry with helpers +β”‚ β”œβ”€β”€ atsRegistry.data.ts # Auto-generated registry data +β”‚ β”‚ +β”‚ β”œβ”€β”€ equity/ # Equity token logic +β”‚ β”‚ └── createConfiguration.ts +β”‚ β”‚ +β”‚ β”œβ”€β”€ bond/ # Bond token logic +β”‚ β”‚ └── createConfiguration.ts +β”‚ β”‚ +β”‚ └── factory/ # Factory logic +β”‚ β”œβ”€β”€ deploy.ts +β”‚ └── deployToken.ts β”‚ -β”œβ”€β”€ workflows/ # End-to-end orchestration -β”‚ β”œβ”€β”€ deploySystemWithNewBlr.ts -β”‚ └── deploySystemWithExistingBlr.ts +β”œβ”€β”€ workflows/ # End-to-end orchestration +β”‚ β”œβ”€β”€ deploySystemWithNewBlr.ts +β”‚ └── deploySystemWithExistingBlr.ts β”‚ -β”œβ”€β”€ cli/ # Command-line entry points -β”‚ β”œβ”€β”€ hardhat.ts # Hardhat-based deployment CLI -β”‚ └── standalone.ts # Standalone deployment CLI +β”œβ”€β”€ cli/ # Command-line entry points +β”‚ β”œβ”€β”€ deploy.ts # Main deployment CLI +β”‚ β”œβ”€β”€ upgrade.ts # Configuration upgrade CLI +β”‚ └── upgradeTup.ts # TUP proxy upgrade CLI β”‚ -β”œβ”€β”€ tools/ # Code generation tools -β”‚ β”œβ”€β”€ generateRegistry.ts # Registry generation CLI -β”‚ β”œβ”€β”€ scanner/ -β”‚ β”‚ └── metadataExtractor.ts # Extract metadata from Solidity -β”‚ └── generators/ -β”‚ └── registryGenerator.ts # Generate TypeScript registry code +β”œβ”€β”€ tools/ # Code generation tools +β”‚ β”œβ”€β”€ generateRegistry.ts # Registry generation CLI +β”‚ β”œβ”€β”€ scanner/ +β”‚ β”‚ └── metadataExtractor.ts # Extract metadata from Solidity +β”‚ └── generators/ +β”‚ └── registryGenerator.ts # Generate TypeScript registry code β”‚ -└── index.ts # Root exports -``` +└── index.ts # Root exports ---- +```` -### 1. Providers +--- -Providers abstract framework-specific deployment logic. +### 1. Network Signer -**HardhatProvider** (Hardhat-dependent): +The `createNetworkSigner` function creates an ethers.js Signer from network configuration: ```typescript -import { HardhatProvider } from "./core/providers"; +import { createNetworkSigner } from "@scripts/infrastructure"; -const provider = new HardhatProvider(); -const signer = await provider.getSigner(); -const factory = await provider.getFactory("AccessControlFacet"); -``` +// Creates signer using getNetworkConfig() for RPC URL +// and getPrivateKey() for private key from environment +const { signer, address } = await createNetworkSigner("hedera-testnet"); -**StandaloneProvider** (Framework-agnostic): +console.log(`Deployer: ${address}`); +```` -```typescript -import { StandaloneProvider } from "./core/providers"; +Environment variables follow the pattern: -const provider = new StandaloneProvider({ - rpcUrl: "https://testnet.hashio.io/api", - privateKey: "0x...", - artifactsPath: "./artifacts", // optional -}); +- `{NETWORK}_JSON_RPC_ENDPOINT` - RPC URL +- `{NETWORK}_PRIVATE_KEY_0` - Deployer private key + +```bash +# .env +HEDERA_TESTNET_JSON_RPC_ENDPOINT='https://testnet.hashio.io/api' +HEDERA_TESTNET_PRIVATE_KEY_0='0x...' ``` ### 2. Contract Instance Pattern @@ -1206,6 +1242,34 @@ async function createBondConfiguration( ## Troubleshooting +### Parallel Tests Running Slowly (8+ minutes instead of 2 minutes) + +**Symptom:** `npm run ats:contracts:test:parallel` takes 8+ minutes instead of ~2 minutes. + +**Root Cause:** Static imports from barrel exports (`@scripts/infrastructure`) cause eager loading of the entire module graph, including typechain (~400 generated files). In parallel tests, each worker loads modules independently, multiplying the overhead. + +**Solution:** Use dynamic imports for modules that would trigger heavy typechain loading: + +```typescript +// ❌ SLOW: Static import loads entire barrel (including typechain consumers) +import { GAS_LIMIT, ok, err } from "@scripts/infrastructure"; + +// βœ… FAST: Dynamic import defers loading until function execution +const { GAS_LIMIT } = await import("@scripts/infrastructure"); +const { ok, err } = await import("@scripts/infrastructure"); +``` + +**Why this works:** + +- Static imports execute at module load time (before any test runs) +- Dynamic imports execute only when the containing function is called +- Most test files never call functions that need these imports +- Result: Workers initialize faster, tests complete in ~2 minutes + +**Affected file:** `infrastructure/operations/blrConfigurations.ts` + +**Prevention:** When adding new exports to `@scripts/infrastructure` barrel that import from `@contract-types`, consider whether downstream files need dynamic imports to maintain test performance. + ### "Cannot find module 'hardhat'" This means you're trying to use Hardhat's `ethers.getSigners()` from a non-Hardhat project. Use `ethers.Wallet` instead: @@ -1230,18 +1294,14 @@ npm run compile ### "No signers available" -**In Hardhat context**, ensure you're running in Hardhat context: +Ensure you have configured the correct private key in your `.env` file: ```bash -npx hardhat run scripts/cli/hardhat.ts -``` - -**In Standalone context**, provide a valid private key: +# For testnet +HEDERA_TESTNET_PRIVATE_KEY_0='0x...' -```typescript -import { ethers } from "ethers"; -const provider = new ethers.providers.JsonRpcProvider("..."); -const signer = new ethers.Wallet(process.env.PRIVATE_KEY!, provider); // Must be valid hex private key +# For local +LOCAL_PRIVATE_KEY_0='0xac0974bec39a17e36ba4a6b4d238ff944bacb478cbed5efcae784d7bf4f2ff80' ``` ### When Deployment Fails @@ -1257,7 +1317,7 @@ rm deployments/{network}/.checkpoints/*.json # 2. Deploy with new contracts (adjust for your network) npm run deploy:hedera:testnet npm run deploy:hedera:mainnet -npm run deploy:hardhat -- --network hardhat +npm run deploy:local ``` This will deploy: diff --git a/packages/ats/contracts/scripts/cli/deploySystemWithExistingBlr.ts b/packages/ats/contracts/scripts/cli/deploySystemWithExistingBlr.ts new file mode 100644 index 000000000..4114202ca --- /dev/null +++ b/packages/ats/contracts/scripts/cli/deploySystemWithExistingBlr.ts @@ -0,0 +1,103 @@ +#!/usr/bin/env node +// SPDX-License-Identifier: Apache-2.0 + +/** + * CLI entry point for deploying ATS system with an existing BusinessLogicResolver (BLR). + * + * This script provides a command-line interface for deploying system components + * (facets, configurations, Factory) against an existing BLR infrastructure. + * + * Useful for: + * - Deploying new configurations to existing BLR + * - Multi-tenant scenarios with shared infrastructure + * - Partial deployments in phased rollouts + * - Testing facet updates against stable BLR instance + * + * Configuration via environment variables: + * NETWORK - Target network name (required) + * {NETWORK}_PRIVATE_KEY_0 - Private key for deployer account + * BLR_ADDRESS - Address of existing BLR proxy (required) + * USE_TIMETRAVEL - Enable TimeTravel mode (default: false) + * DEPLOY_FACTORY - Deploy Factory contract (default: true) + * BATCH_SIZE - Number of facets per batch (optional, uses default if not set) + * CONFIRMATIONS - Number of confirmations to wait (optional, uses network default) + * + * Usage: + * NETWORK=hedera-testnet BLR_ADDRESS=0x123... npm run deploy:existingBlr + * NETWORK=local BLR_ADDRESS=0x123... DEPLOY_FACTORY=false npm run deploy:existingBlr + * NETWORK=hedera-testnet BLR_ADDRESS=0x123... USE_TIMETRAVEL=true npm run deploy:existingBlr + * + * @module cli/deploySystemWithExistingBlr + */ + +import { deploySystemWithExistingBlr } from "../workflows/deploySystemWithExistingBlr"; +import { info, success, error } from "@scripts/infrastructure"; +import { requireNetworkSigner, requireValidAddress, parseBooleanEnv, parseIntEnv } from "./shared"; + +/** + * Main deployment function for existing BLR. + */ +async function main() { + // Get network from environment (required) + const { network, signer, address } = await requireNetworkSigner(); + + // Get required BLR address + const blrAddress = requireValidAddress(process.env.BLR_ADDRESS, "BLR_ADDRESS"); + + const useTimeTravel = parseBooleanEnv("USE_TIMETRAVEL", false); + const deployFactory = parseBooleanEnv("DEPLOY_FACTORY", true); + const batchSize = parseIntEnv("BATCH_SIZE", 0); // 0 = use workflow default + const confirmations = parseIntEnv("CONFIRMATIONS", 0); // 0 = use network default + + info(`πŸš€ Starting ATS deployment with existing BLR`); + info("---"); + info(`πŸ“‘ Network: ${network}`); + info(`πŸ‘€ Deployer: ${address}`); + info(`πŸ”— Existing BLR: ${blrAddress}`); + info(`⏰ TimeTravel: ${useTimeTravel ? "enabled" : "disabled"}`); + info(`🏭 Deploy Factory: ${deployFactory ? "yes" : "no"}`); + if (batchSize > 0) { + info(`πŸ“Š Batch Size: ${batchSize}`); + } + if (confirmations > 0) { + info(`⏳ Confirmations: ${confirmations}`); + } + info("---"); + + try { + // Deploy system with existing BLR + const output = await deploySystemWithExistingBlr(signer, network, blrAddress, { + useTimeTravel, + deployFactory, + ...(batchSize > 0 && { batchSize }), + ...(confirmations > 0 && { confirmations }), + saveOutput: true, + }); + + info("---"); + success("βœ… Deployment completed successfully!"); + info("---"); + info("πŸ“‹ Deployment Summary:"); + info(` Existing BLR Proxy: ${blrAddress}`); + info(` ProxyAdmin: ${output.infrastructure.proxyAdmin.address}`); + info(` Factory Proxy: ${output.infrastructure.factory.proxy}`); + info(` Total Facets: ${output.facets.length}`); + info(` Equity Config Version: ${output.configurations.equity.version}`); + info(` Bond Config Version: ${output.configurations.bond.version}`); + info(` Total Contracts: ${output.summary.totalContracts}`); + + process.exit(0); + } catch (err) { + error("❌ Deployment failed:", err); + process.exit(1); + } +} + +export { main }; + +if (require.main === module) { + main().catch((err) => { + error("❌ Fatal error:", err); + process.exit(1); + }); +} diff --git a/packages/ats/contracts/scripts/cli/deploySystemWithNewBlr.ts b/packages/ats/contracts/scripts/cli/deploySystemWithNewBlr.ts new file mode 100644 index 000000000..3c42c45c1 --- /dev/null +++ b/packages/ats/contracts/scripts/cli/deploySystemWithNewBlr.ts @@ -0,0 +1,84 @@ +#!/usr/bin/env node +// SPDX-License-Identifier: Apache-2.0 + +/** + * CLI entry point for ATS deployment. + * + * This script provides a non-interactive command-line interface for deploying + * the complete ATS system using plain ethers.js without requiring Hardhat. + * + * Configuration via environment variables: + * NETWORK - Target network name (required) + * {NETWORK}_PRIVATE_KEY_0 - Private key for deployer account + * USE_TIMETRAVEL - Enable TimeTravel mode (default: false) + * + * Usage: + * NETWORK=hedera-testnet npm run deploy + * or + * npm run deploy:hedera:testnet + * + * @module cli/deploySystemWithNewBlr + */ + +import { deploySystemWithNewBlr } from "../workflows/deploySystemWithNewBlr"; +import { DEFAULT_BATCH_SIZE, info, success, error } from "@scripts/infrastructure"; +import { requireNetworkSigner, parseBooleanEnv, parseIntEnv } from "./shared"; + +/** + * Main deployment function for standalone environment. + */ +async function main() { + // Get network from environment (required) + const { network, signer, address } = await requireNetworkSigner(); + + const useTimeTravel = parseBooleanEnv("USE_TIMETRAVEL", false); + const partialBatchDeploy = parseBooleanEnv("PARTIAL_BATCH_DEPLOY", false); + const batchSize = parseIntEnv("BATCH_SIZE", DEFAULT_BATCH_SIZE); + + info(`πŸš€ Starting ATS deployment`); + info("---"); + info(`πŸ“‘ Network: ${network}`); + info(`⏰ TimeTravel: ${useTimeTravel ? "enabled" : "disabled"}`); + info(`πŸ“¦ PartialBatchDeploy: ${partialBatchDeploy ? "enabled" : "disabled"}`); + info(`πŸ“Š Batch Size: ${batchSize}`); + info("---"); + + try { + // Use signer from network configuration + info(`πŸ‘€ Deployer: ${address}`); + + // Deploy system with new BLR + const output = await deploySystemWithNewBlr(signer, network, { + useTimeTravel, + partialBatchDeploy, + batchSize, + saveOutput: true, + }); + + info("---"); + success("βœ… Deployment completed successfully!"); + info("---"); + info("πŸ“‹ Deployment Summary:"); + info(` ProxyAdmin: ${output.infrastructure.proxyAdmin.address}`); + info(` BLR Proxy: ${output.infrastructure.blr.proxy}`); + info(` Factory Proxy: ${output.infrastructure.factory.proxy}`); + info(` Total Facets: ${output.facets.length}`); + info(` Equity Config Version: ${output.configurations.equity.version}`); + info(` Bond Config Version: ${output.configurations.bond.version}`); + info(` Total Contracts: ${output.summary.totalContracts}`); + + process.exit(0); + } catch (err) { + error("❌ Deployment failed:", err); + process.exit(1); + } +} + +export { main }; + +if (require.main === module) { + main().catch((err) => { + error("❌ Fatal error:", err); + process.exit(1); + }); +} diff --git a/packages/ats/contracts/scripts/cli/hardhat.ts b/packages/ats/contracts/scripts/cli/hardhat.ts deleted file mode 100644 index fe020121a..000000000 --- a/packages/ats/contracts/scripts/cli/hardhat.ts +++ /dev/null @@ -1,100 +0,0 @@ -#!/usr/bin/env node -// SPDX-License-Identifier: Apache-2.0 - -/** - * Hardhat CLI entry point for ATS deployment. - * - * This script provides a command-line interface for deploying the complete - * ATS system from within a Hardhat project. It reads configuration from the - * Hardhat runtime environment and uses Hardhat's ethers integration. - * - * Usage (from within Hardhat project): - * npx ts-node scripts/cli/hardhat.ts - * or - * npm run deploy - * - * @module cli/hardhat - */ - -import { deploySystemWithNewBlr } from "../workflows/deploySystemWithNewBlr"; -import { getNetworkConfig, getAllNetworks, DEFAULT_BATCH_SIZE } from "@scripts/infrastructure"; - -/** - * Main deployment function for Hardhat environment. - */ -async function main() { - // Get network from Hardhat config - const hre = await import("hardhat"); - const networkName = hre.network.name; - - console.log(`πŸš€ Starting ATS deployment on network: ${networkName}`); - console.log("=".repeat(60)); - - // Validate network configuration - const availableNetworks = getAllNetworks(); - if (!availableNetworks.includes(networkName)) { - console.error(`❌ Network '${networkName}' not configured in Configuration.ts`); - console.log(`Available networks: ${availableNetworks.join(", ")}`); - process.exit(1); - } - - // Get network config - const networkConfig = getNetworkConfig(networkName); - console.log(`πŸ“‘ RPC URL: ${networkConfig.jsonRpcUrl}`); - - // Get signer from Hardhat runtime - const signers = await hre.ethers.getSigners(); - if (signers.length === 0) { - console.error("❌ No signers available from Hardhat"); - process.exit(1); - } - const signer = signers[0]; - console.log(`πŸ‘€ Deployer: ${await signer.getAddress()}`); - - // Check for TimeTravel mode from environment - const useTimeTravel = process.env.USE_TIME_TRAVEL === "true"; - - // Check for PartialBatchDeploy mode from environment - const partialBatchDeploy = process.env.PARTIAL_BATCH_DEPLOY === "true"; - - // Get batch size from environment or use DEFAULT_BATCH_SIZE constant - const batchSize = process.env.BATCH_SIZE ? parseInt(process.env.BATCH_SIZE) : DEFAULT_BATCH_SIZE; - - try { - // Deploy system with new BLR - const output = await deploySystemWithNewBlr(signer, networkName, { - useTimeTravel, - partialBatchDeploy, - batchSize, - saveOutput: true, - }); - - console.log("\n" + "=".repeat(60)); - console.log("βœ… Deployment completed successfully!"); - console.log("=".repeat(60)); - console.log("\nπŸ“‹ Deployment Summary:"); - console.log(` ProxyAdmin: ${output.infrastructure.proxyAdmin.address}`); - console.log(` BLR Proxy: ${output.infrastructure.blr.proxy}`); - console.log(` Factory Proxy: ${output.infrastructure.factory.proxy}`); - console.log(` Total Facets: ${output.facets.length}`); - console.log(` Equity Config Version: ${output.configurations.equity.version}`); - console.log(` Bond Config Version: ${output.configurations.bond.version}`); - console.log(` Total Contracts: ${output.summary.totalContracts}`); - - process.exit(0); - } catch (error) { - console.error("\n❌ Deployment failed:"); - console.error(error); - process.exit(1); - } -} - -// Run if called directly -if (require.main === module) { - main().catch((error) => { - console.error(error); - process.exit(1); - }); -} - -export { main }; diff --git a/packages/ats/contracts/scripts/cli/shared/index.ts b/packages/ats/contracts/scripts/cli/shared/index.ts new file mode 100644 index 000000000..adab83e5b --- /dev/null +++ b/packages/ats/contracts/scripts/cli/shared/index.ts @@ -0,0 +1,9 @@ +// SPDX-License-Identifier: Apache-2.0 + +/** + * Shared CLI utilities. + * @module cli/shared + */ + +export * from "./network"; +export * from "./validation"; diff --git a/packages/ats/contracts/scripts/cli/shared/network.ts b/packages/ats/contracts/scripts/cli/shared/network.ts new file mode 100644 index 000000000..39df9a862 --- /dev/null +++ b/packages/ats/contracts/scripts/cli/shared/network.ts @@ -0,0 +1,57 @@ +#!/usr/bin/env node +// SPDX-License-Identifier: Apache-2.0 + +/** + * CLI utilities for network handling with user-friendly exit behavior. + * + * This is the CLI LAYER - functions call process.exit() with helpful error + * messages for terminal users. For programmatic use where you need try/catch + * error handling, use the infrastructure layer directly. + * + * @module cli/shared/network + */ + +import { Signer } from "ethers"; +import { getAllNetworks, createNetworkSigner, info, error } from "@scripts/infrastructure"; + +/** + * Result of requiring a network signer from CLI environment. + * + * Extends the infrastructure's NetworkSignerResult with the network name + * for CLI logging and output purposes. + */ +export interface CliNetworkSignerResult { + /** Network identifier from NETWORK env var */ + network: string; + /** The ethers.js Signer instance */ + signer: Signer; + /** The signer's resolved address */ + address: string; +} + +/** + * Parse and validate NETWORK environment variable, then create a signer. + * Exits process with helpful error if validation fails. + * + * @returns Network name, signer, and deployer address + */ +export async function requireNetworkSigner(): Promise { + const network = process.env.NETWORK; + + if (!network) { + error("❌ Missing NETWORK environment variable."); + const availableNetworks = getAllNetworks(); + info(`Available networks: ${availableNetworks.join(", ")}`); + process.exit(1); + } + + const availableNetworks = getAllNetworks(); + if (!availableNetworks.includes(network)) { + error(`❌ Network '${network}' not configured in Configuration.ts`); + info(`Available networks: ${availableNetworks.join(", ")}`); + process.exit(1); + } + + const { signer, address } = await createNetworkSigner(network); + return { network, signer, address }; +} diff --git a/packages/ats/contracts/scripts/cli/shared/validation.ts b/packages/ats/contracts/scripts/cli/shared/validation.ts new file mode 100644 index 000000000..206038b2c --- /dev/null +++ b/packages/ats/contracts/scripts/cli/shared/validation.ts @@ -0,0 +1,141 @@ +// SPDX-License-Identifier: Apache-2.0 + +/** + * CLI validation utilities with user-friendly exit behavior. + * + * This is the CLI LAYER - functions call process.exit() with helpful error + * messages for terminal users. Use these in CLI entry points where you want + * the script to terminate with a clear error message on invalid input. + * + * For programmatic use in workflows/operations that need try/catch error + * handling, use infrastructure/utils/validation.ts which throws errors. + * + * @example + * ```typescript + * // CLI pattern: exit on error + * import { requireValidAddress, parseBooleanEnv } from "./cli/shared"; + * + * const proxyAddress = requireValidAddress(process.env.PROXY_ADDRESS, "PROXY_ADDRESS"); + * const dryRun = parseBooleanEnv("DRY_RUN", false); + * ``` + * + * @module cli/shared/validation + */ + +import { error, isValidAddress } from "@scripts/infrastructure"; + +/** + * Require and validate an Ethereum address from environment variable. + * Exits process if missing or invalid. + * + * @param value - The address value (may be undefined) + * @param name - Human-readable name for error messages + * @returns The validated address + */ +export function requireValidAddress(value: string | undefined, name: string): string { + if (!value) { + error(`❌ Missing ${name}`); + process.exit(1); + } + + if (!isValidAddress(value)) { + error(`❌ Invalid ${name}: ${value}`); + error(`Must be a valid Ethereum address (0x...)`); + process.exit(1); + } + + return value; +} + +/** + * Validate an optional Ethereum address (only if provided). + * Exits process if provided but invalid. + * + * @param value - The address value (may be undefined) + * @param name - Human-readable name for error messages + * @returns The validated address or undefined + */ +export function validateOptionalAddress(value: string | undefined, name: string): string | undefined { + if (!value) return undefined; + + if (!isValidAddress(value)) { + error(`❌ Invalid ${name}: ${value}`); + error(`Must be a valid Ethereum address (0x...)`); + process.exit(1); + } + + return value; +} + +/** + * Parse a comma-separated list of addresses from environment variable. + * Validates each address if list is non-empty. + * + * @param envValue - Raw environment variable value + * @param name - Human-readable name for error messages + * @returns Array of validated addresses, or undefined if empty + */ +export function parseOptionalAddressList(envValue: string | undefined, name: string): string[] | undefined { + if (!envValue) return undefined; + + const addresses = envValue + .split(",") + .map((addr) => addr.trim()) + .filter((addr) => addr.length > 0); + + if (addresses.length === 0) return undefined; + + for (const addr of addresses) { + if (!isValidAddress(addr)) { + error(`❌ Invalid address in ${name}: ${addr}`); + error(`All addresses must be valid Ethereum addresses (0x...)`); + process.exit(1); + } + } + + return addresses; +} + +/** + * Require an environment variable to be present. + * Exits process if missing. + * + * @param name - Environment variable name + * @param description - Human-readable description for error message + * @returns The environment variable value + */ +export function requireEnvVar(name: string, description?: string): string { + const value = process.env[name]; + if (!value) { + error(`❌ Missing ${name} environment variable${description ? ` (${description})` : ""}`); + process.exit(1); + } + return value; +} + +/** + * Parse a boolean environment variable. + * + * @param name - Environment variable name + * @param defaultValue - Default value if not set + * @returns Boolean value + */ +export function parseBooleanEnv(name: string, defaultValue = false): boolean { + const value = process.env[name]; + if (!value) return defaultValue; + return value.toLowerCase() === "true"; +} + +/** + * Parse an integer environment variable. + * + * @param name - Environment variable name + * @param defaultValue - Default value if not set or invalid + * @returns Integer value + */ +export function parseIntEnv(name: string, defaultValue: number): number { + const value = process.env[name]; + if (!value) return defaultValue; + const parsed = parseInt(value, 10); + return isNaN(parsed) ? defaultValue : parsed; +} diff --git a/packages/ats/contracts/scripts/cli/standalone.ts b/packages/ats/contracts/scripts/cli/standalone.ts deleted file mode 100644 index 823e61410..000000000 --- a/packages/ats/contracts/scripts/cli/standalone.ts +++ /dev/null @@ -1,110 +0,0 @@ -#!/usr/bin/env node -// SPDX-License-Identifier: Apache-2.0 - -/** - * Standalone CLI entry point for ATS deployment. - * - * This script provides a non-interactive command-line interface for deploying - * the complete ATS system using plain ethers.js without requiring Hardhat. - * - * Configuration via environment variables: - * NETWORK - Target network name (default: hedera-testnet) - * {NETWORK}_PRIVATE_KEY_0 - Private key for deployer account - * USE_TIMETRAVEL - Enable TimeTravel mode (default: false) - * - * Usage: - * npm run deploy - * or - * npm run deploy:hedera:testnet - * - * @module cli/standalone - */ - -import { deploySystemWithNewBlr } from "../workflows/deploySystemWithNewBlr"; -import { getAllNetworks, getNetworkConfig, DEFAULT_BATCH_SIZE } from "@scripts/infrastructure"; -import { Wallet, providers } from "ethers"; - -/** - * Main deployment function for standalone environment. - */ -async function main() { - // Get network from environment - const network = process.env.NETWORK || "hedera-testnet"; - const useTimeTravel = process.env.USE_TIMETRAVEL === "true"; - const partialBatchDeploy = process.env.PARTIAL_BATCH_DEPLOY === "true"; - const batchSize = process.env.BATCH_SIZE ? parseInt(process.env.BATCH_SIZE) : DEFAULT_BATCH_SIZE; - - console.log(`πŸš€ Starting ATS deployment (standalone mode)`); - console.log("=".repeat(60)); - console.log(`πŸ“‘ Network: ${network}`); - console.log(`⏰ TimeTravel: ${useTimeTravel ? "enabled" : "disabled"}`); - console.log(`πŸ“¦ PartialBatchDeploy: ${partialBatchDeploy ? "enabled" : "disabled"}`); - console.log(`πŸ”’ Batch Size: ${batchSize}`); - console.log("=".repeat(60)); - - // Validate network configuration - const availableNetworks = getAllNetworks(); - if (!availableNetworks.includes(network)) { - console.error(`❌ Network '${network}' not configured in Configuration.ts`); - console.log(`Available networks: ${availableNetworks.join(", ")}`); - process.exit(1); - } - - try { - // Get network configuration - const networkConfig = getNetworkConfig(network); - - // Get private key from environment - const networkPrefix = network.toUpperCase().replace(/-/g, "_"); - const privateKey = process.env[`${networkPrefix}_PRIVATE_KEY_0`]; - - if (!privateKey) { - console.error( - `❌ Missing private key for network '${network}'. Set ${networkPrefix}_PRIVATE_KEY_0 environment variable.`, - ); - process.exit(1); - } - - // Create provider and signer - const provider = new providers.JsonRpcProvider(networkConfig.jsonRpcUrl); - const signer = new Wallet(privateKey, provider); - - console.log(`πŸ‘€ Deployer: ${await signer.getAddress()}`); - - // Deploy system with new BLR - const output = await deploySystemWithNewBlr(signer, network, { - useTimeTravel, - partialBatchDeploy, - batchSize, - saveOutput: true, - }); - - console.log("\n" + "=".repeat(60)); - console.log("βœ… Deployment completed successfully!"); - console.log("=".repeat(60)); - console.log("\nπŸ“‹ Deployment Summary:"); - console.log(` ProxyAdmin: ${output.infrastructure.proxyAdmin.address}`); - console.log(` BLR Proxy: ${output.infrastructure.blr.proxy}`); - console.log(` Factory Proxy: ${output.infrastructure.factory.proxy}`); - console.log(` Total Facets: ${output.facets.length}`); - console.log(` Equity Config Version: ${output.configurations.equity.version}`); - console.log(` Bond Config Version: ${output.configurations.bond.version}`); - console.log(` Total Contracts: ${output.summary.totalContracts}`); - - process.exit(0); - } catch (error) { - console.error("\n❌ Deployment failed:"); - console.error(error); - process.exit(1); - } -} - -// Run if called directly -if (require.main === module) { - main().catch((error) => { - console.error(error); - process.exit(1); - }); -} - -export { main }; diff --git a/packages/ats/contracts/scripts/cli/upgrade.ts b/packages/ats/contracts/scripts/cli/upgrade.ts deleted file mode 100644 index fbb9286a8..000000000 --- a/packages/ats/contracts/scripts/cli/upgrade.ts +++ /dev/null @@ -1,195 +0,0 @@ -#!/usr/bin/env node -// SPDX-License-Identifier: Apache-2.0 - -/** - * CLI entry point for upgrading ATS configurations. - * - * This script provides a command-line interface for upgrading existing - * configurations by deploying new facets and creating new configuration versions - * without redeploying the entire infrastructure. - * - * Configuration via environment variables: - * NETWORK - Target network name (default: hedera-testnet) - * {NETWORK}_PRIVATE_KEY_0 - Private key for deployer account - * BLR_ADDRESS - Address of existing BusinessLogicResolver (required) - * PROXY_ADDRESSES - Comma-separated list of proxy addresses to update (optional) - * CONFIGURATIONS - Which configs to create: 'equity', 'bond', or 'both' (default: 'both') - * USE_TIMETRAVEL - Enable TimeTravel mode (default: false) - * - * Usage: - * BLR_ADDRESS=0x123... npm run upgrade:testnet - * BLR_ADDRESS=0x123... PROXY_ADDRESSES=0xabc...,0xdef... npm run upgrade:testnet - * BLR_ADDRESS=0x123... CONFIGURATIONS=equity npm run upgrade:testnet - * - * @module cli/upgrade - */ - -import { upgradeConfigurations } from "../workflows/upgradeConfigurations"; -import { getAllNetworks, getNetworkConfig, DEFAULT_BATCH_SIZE } from "@scripts/infrastructure"; -import { Wallet, providers, ethers } from "ethers"; - -/** - * Main upgrade function for standalone environment. - */ -async function main() { - // Get configuration from environment - const network = process.env.NETWORK || "hedera-testnet"; - const blrAddress = process.env.BLR_ADDRESS; - const proxyAddressesStr = process.env.PROXY_ADDRESSES; - const configurationsStr = process.env.CONFIGURATIONS || "both"; - const useTimeTravel = process.env.USE_TIMETRAVEL === "true"; - const batchSize = process.env.BATCH_SIZE ? parseInt(process.env.BATCH_SIZE) : DEFAULT_BATCH_SIZE; - - // Parse proxy addresses - const proxyAddresses = proxyAddressesStr - ? proxyAddressesStr - .split(",") - .map((addr) => addr.trim()) - .filter((addr) => addr.length > 0) - : undefined; - - // Validate configurations parameter - const configurations = configurationsStr as "equity" | "bond" | "both"; - if (!["equity", "bond", "both"].includes(configurations)) { - console.error(`❌ Invalid CONFIGURATIONS value: ${configurationsStr}`); - console.error(` Must be one of: equity, bond, both`); - process.exit(1); - } - - console.log(`πŸ”„ Starting ATS configuration upgrade`); - console.log("=".repeat(60)); - console.log(`πŸ“‘ Network: ${network}`); - console.log(`🏭 BLR Address: ${blrAddress || "NOT PROVIDED"}`); - console.log(`πŸ“¦ Configurations: ${configurations}`); - console.log(`⏰ TimeTravel: ${useTimeTravel ? "enabled" : "disabled"}`); - console.log(`πŸ”’ Batch Size: ${batchSize}`); - if (proxyAddresses && proxyAddresses.length > 0) { - console.log(`πŸ”— Proxy Updates: ${proxyAddresses.length} proxies`); - } - console.log("=".repeat(60)); - - // Validate BLR address - if (!blrAddress) { - console.error(`❌ Missing BLR_ADDRESS environment variable`); - console.error(` Usage: BLR_ADDRESS=0x123... npm run upgrade:${network.replace("hedera-", "")}`); - process.exit(1); - } - - if (!ethers.utils.isAddress(blrAddress)) { - console.error(`❌ Invalid BLR address: ${blrAddress}`); - console.error(` Must be a valid Ethereum address (0x...)`); - process.exit(1); - } - - // Validate proxy addresses if provided - if (proxyAddresses) { - for (const addr of proxyAddresses) { - if (!ethers.utils.isAddress(addr)) { - console.error(`❌ Invalid proxy address: ${addr}`); - console.error(` All addresses must be valid Ethereum addresses (0x...)`); - process.exit(1); - } - } - } - - // Validate network configuration - const availableNetworks = getAllNetworks(); - if (!availableNetworks.includes(network)) { - console.error(`❌ Network '${network}' not configured in Configuration.ts`); - console.log(`Available networks: ${availableNetworks.join(", ")}`); - process.exit(1); - } - - try { - // Get network configuration - const networkConfig = getNetworkConfig(network); - - // Get private key from environment - const networkPrefix = network.toUpperCase().replace(/-/g, "_"); - const privateKey = process.env[`${networkPrefix}_PRIVATE_KEY_0`]; - - if (!privateKey) { - console.error( - `❌ Missing private key for network '${network}'. Set ${networkPrefix}_PRIVATE_KEY_0 environment variable.`, - ); - process.exit(1); - } - - // Create provider and signer - const provider = new providers.JsonRpcProvider(networkConfig.jsonRpcUrl); - const signer = new Wallet(privateKey, provider); - - console.log(`πŸ‘€ Deployer: ${await signer.getAddress()}`); - console.log(`πŸ’° Balance: ${ethers.utils.formatEther(await provider.getBalance(await signer.getAddress()))} ETH`); - console.log(""); - - // Upgrade configurations - const output = await upgradeConfigurations(signer, network, { - blrAddress, - configurations, - proxyAddresses, - useTimeTravel, - batchSize, - saveOutput: true, - }); - - console.log("\n" + "=".repeat(60)); - console.log("βœ… Upgrade completed successfully!"); - console.log("=".repeat(60)); - console.log("\nπŸ“‹ Upgrade Summary:"); - console.log(` BLR Address: ${output.blr.address} (external)`); - console.log(` Facets Deployed: ${output.summary.totalFacetsDeployed}`); - console.log(` Configurations Created: ${output.summary.configurationsCreated}`); - - if (output.configurations.equity) { - console.log( - ` Equity Config: v${output.configurations.equity.version} (${output.configurations.equity.facetCount} facets)`, - ); - } - if (output.configurations.bond) { - console.log( - ` Bond Config: v${output.configurations.bond.version} (${output.configurations.bond.facetCount} facets)`, - ); - } - - if (output.proxyUpdates && output.proxyUpdates.length > 0) { - console.log(` Proxies Updated: ${output.summary.proxiesUpdated}/${output.proxyUpdates.length}`); - if (output.summary.proxiesFailed > 0) { - console.log(` ⚠️ Proxies Failed: ${output.summary.proxiesFailed}`); - } - } - - console.log(` Gas Used: ${output.summary.gasUsed}`); - console.log(` Time: ${(output.summary.deploymentTime / 1000).toFixed(2)}s`); - console.log(""); - - if (output.proxyUpdates && output.proxyUpdates.length > 0) { - console.log("πŸ“ Proxy Update Details:"); - for (const update of output.proxyUpdates) { - const status = update.success ? "βœ…" : "❌"; - const version = update.success ? `v${update.previousVersion} β†’ v${update.newVersion}` : "failed"; - console.log(` ${status} ${update.proxyAddress}: ${version}`); - if (!update.success && update.error) { - console.log(` Error: ${update.error}`); - } - } - console.log(""); - } - - process.exit(0); - } catch (error) { - console.error("\n❌ Upgrade failed:"); - console.error(error); - process.exit(1); - } -} - -// Run if called directly -if (require.main === module) { - main().catch((error) => { - console.error(error); - process.exit(1); - }); -} - -export { main }; diff --git a/packages/ats/contracts/scripts/cli/upgradeConfigurations.ts b/packages/ats/contracts/scripts/cli/upgradeConfigurations.ts new file mode 100644 index 000000000..e384fb7e7 --- /dev/null +++ b/packages/ats/contracts/scripts/cli/upgradeConfigurations.ts @@ -0,0 +1,139 @@ +#!/usr/bin/env node +// SPDX-License-Identifier: Apache-2.0 + +/** + * CLI entry point for upgrading ATS configurations. + * + * This script provides a command-line interface for upgrading existing + * configurations by deploying new facets and creating new configuration versions + * without redeploying the entire infrastructure. + * + * Configuration via environment variables: + * NETWORK - Target network name (required) + * {NETWORK}_PRIVATE_KEY_0 - Private key for deployer account + * BLR_ADDRESS - Address of existing BusinessLogicResolver (required) + * PROXY_ADDRESSES - Comma-separated list of proxy addresses to update (optional) + * CONFIGURATIONS - Which configs to create: 'equity', 'bond', or 'both' (default: 'both') + * USE_TIMETRAVEL - Enable TimeTravel mode (default: false) + * + * Usage: + * NETWORK=hedera-testnet BLR_ADDRESS=0x123... npm run upgrade + * NETWORK=hedera-testnet BLR_ADDRESS=0x123... PROXY_ADDRESSES=0xabc...,0xdef... npm run upgrade + * NETWORK=hedera-testnet BLR_ADDRESS=0x123... CONFIGURATIONS=equity npm run upgrade + * + * @module cli/upgradeConfigurations + */ + +import { upgradeConfigurations } from "../workflows/upgradeConfigurations"; +import { DEFAULT_BATCH_SIZE, info, success, error, warn } from "@scripts/infrastructure"; +import { + requireNetworkSigner, + requireValidAddress, + parseOptionalAddressList, + parseBooleanEnv, + parseIntEnv, +} from "./shared"; +import { ethers } from "ethers"; + +/** + * Main upgrade function for standalone environment. + */ +async function main() { + // Get network from environment (required) + const { network, signer, address } = await requireNetworkSigner(); + + const blrAddress = requireValidAddress(process.env.BLR_ADDRESS, "BLR_ADDRESS"); + const proxyAddresses = parseOptionalAddressList(process.env.PROXY_ADDRESSES, "PROXY_ADDRESSES"); + const configurationsStr = process.env.CONFIGURATIONS || "both"; + const useTimeTravel = parseBooleanEnv("USE_TIMETRAVEL", false); + const batchSize = parseIntEnv("BATCH_SIZE", DEFAULT_BATCH_SIZE); + + // Validate configurations parameter + const configurations = configurationsStr as "equity" | "bond" | "both"; + if (!["equity", "bond", "both"].includes(configurations)) { + error(`❌ Invalid CONFIGURATIONS value: ${configurationsStr}`); + error(`Must be one of: equity, bond, both`); + process.exit(1); + } + + info(`πŸ”„ Starting ATS configuration upgrade`); + info("---"); + info(`πŸ“‘ Network: ${network}`); + info(`πŸ“ BLR Address: ${blrAddress}`); + info(`βš™οΈ Configurations: ${configurations}`); + info(`⏰ TimeTravel: ${useTimeTravel ? "enabled" : "disabled"}`); + info(`πŸ“Š Batch Size: ${batchSize}`); + if (proxyAddresses && proxyAddresses.length > 0) { + info(`Proxy Updates: ${proxyAddresses.length} proxies`); + } + info("---"); + + try { + // Use signer from network configuration + info(`πŸ‘€ Deployer: ${address}`); + info(`πŸ’° Balance: ${ethers.utils.formatEther(await signer.provider!.getBalance(address))} ETH`); + + // Upgrade configurations + const output = await upgradeConfigurations(signer, network, { + blrAddress, + configurations, + proxyAddresses, + useTimeTravel, + batchSize, + saveOutput: true, + }); + + info("---"); + success("βœ… Upgrade completed successfully!"); + info("---"); + info("πŸ“‹ Upgrade Summary:"); + info(` BLR Address: ${output.blr.address} (external)`); + info(` Facets Deployed: ${output.summary.totalFacetsDeployed}`); + info(` Configurations Created: ${output.summary.configurationsCreated}`); + + if (output.configurations.equity) { + info( + ` Equity Config: v${output.configurations.equity.version} (${output.configurations.equity.facetCount} facets)`, + ); + } + if (output.configurations.bond) { + info(` Bond Config: v${output.configurations.bond.version} (${output.configurations.bond.facetCount} facets)`); + } + + if (output.proxyUpdates && output.proxyUpdates.length > 0) { + info(` Proxies Updated: ${output.summary.proxiesUpdated}/${output.proxyUpdates.length}`); + if (output.summary.proxiesFailed > 0) { + warn(`⚠️ Proxies Failed: ${output.summary.proxiesFailed}`); + } + } + + info(` Gas Used: ${output.summary.gasUsed}`); + info(` Time: ${(output.summary.deploymentTime / 1000).toFixed(2)}s`); + + if (output.proxyUpdates && output.proxyUpdates.length > 0) { + info("πŸ“ Proxy Update Details:"); + for (const update of output.proxyUpdates) { + const status = update.success ? "βœ…" : "❌"; + const version = update.success ? `v${update.previousVersion} β†’ v${update.newVersion}` : "failed"; + info(` ${status} ${update.proxyAddress}: ${version}`); + if (!update.success && update.error) { + info(` Error: ${update.error}`); + } + } + } + + process.exit(0); + } catch (err) { + error("❌ Upgrade failed:", err); + process.exit(1); + } +} + +export { main }; + +if (require.main === module) { + main().catch((err) => { + error("❌ Fatal error:", err); + process.exit(1); + }); +} diff --git a/packages/ats/contracts/scripts/cli/upgradeTup.ts b/packages/ats/contracts/scripts/cli/upgradeTup.ts deleted file mode 100755 index 0c8da4924..000000000 --- a/packages/ats/contracts/scripts/cli/upgradeTup.ts +++ /dev/null @@ -1,173 +0,0 @@ -#!/usr/bin/env node -// SPDX-License-Identifier: Apache-2.0 - -/** - * CLI entry point for upgrading TUP (TransparentUpgradeableProxy) contracts. - * - * This script provides a command-line interface for upgrading BLR and/or Factory - * proxy implementations without redeploying the ProxyAdmin itself. - * - * Configuration via environment variables: - * NETWORK - Target network name (default: hedera-testnet) - * {NETWORK}_PRIVATE_KEY_0 - Private key for deployer account - * PROXY_ADMIN_ADDRESS - Address of ProxyAdmin contract (required) - * BLR_PROXY - Address of BLR proxy (optional if only upgrading Factory) - * FACTORY_PROXY - Address of Factory proxy (optional if only upgrading BLR) - * DEPLOY_NEW_BLR_IMPL - Deploy new BLR implementation (true/false) - * DEPLOY_NEW_FACTORY_IMPL - Deploy new Factory implementation (true/false) - * BLR_IMPLEMENTATION - Use existing BLR implementation address - * FACTORY_IMPLEMENTATION - Use existing Factory implementation address - * BLR_INIT_DATA - Initialization data for BLR upgradeAndCall (optional) - * FACTORY_INIT_DATA - Initialization data for Factory upgradeAndCall (optional) - * - * Usage: - * PROXY_ADMIN_ADDRESS=0x123... DEPLOY_NEW_BLR_IMPL=true npm run upgrade:tup:testnet - * PROXY_ADMIN_ADDRESS=0x123... BLR_IMPLEMENTATION=0xabc... npm run upgrade:tup:testnet - * PROXY_ADMIN_ADDRESS=0x123... BLR_PROXY=0x111... FACTORY_PROXY=0x222... npm run upgrade:tup:testnet - * - * @module cli/upgradeTup - */ - -import { upgradeTupProxies } from "../workflows/upgradeTupProxies"; -import { getAllNetworks, getNetworkConfig } from "@scripts/infrastructure"; -import { Wallet, providers, ethers } from "ethers"; - -async function main() { - // Get configuration from environment - const network = process.env.NETWORK || "hedera-testnet"; - const proxyAdminAddress = process.env.PROXY_ADMIN_ADDRESS; - const blrProxyAddress = process.env.BLR_PROXY; - const factoryProxyAddress = process.env.FACTORY_PROXY; - const deployNewBlrImpl = process.env.DEPLOY_NEW_BLR_IMPL === "true"; - const deployNewFactoryImpl = process.env.DEPLOY_NEW_FACTORY_IMPL === "true"; - const blrImplementationAddress = process.env.BLR_IMPLEMENTATION; - const factoryImplementationAddress = process.env.FACTORY_IMPLEMENTATION; - const blrInitData = process.env.BLR_INIT_DATA; - const factoryInitData = process.env.FACTORY_INIT_DATA; - - console.log(`πŸ”„ Starting TUP Proxy Upgrade`); - console.log("=".repeat(60)); - console.log(`πŸ“‘ Network: ${network}`); - console.log(`πŸ” ProxyAdmin: ${proxyAdminAddress || "NOT PROVIDED"}`); - if (blrProxyAddress) { - console.log(` BLR Proxy: ${blrProxyAddress}`); - console.log(` Deploy: ${deployNewBlrImpl}, Implementation: ${blrImplementationAddress || "None"}`); - } - if (factoryProxyAddress) { - console.log(` Factory Proxy: ${factoryProxyAddress}`); - console.log(` Deploy: ${deployNewFactoryImpl}, Implementation: ${factoryImplementationAddress || "None"}`); - } - console.log("=".repeat(60)); - - // Validate required address - if (!proxyAdminAddress) { - console.error(`❌ Missing PROXY_ADMIN_ADDRESS environment variable`); - console.error(` Usage: PROXY_ADMIN_ADDRESS=0x123... npm run upgrade:tup:${network.replace("hedera-", "")}`); - process.exit(1); - } - - if (!ethers.utils.isAddress(proxyAdminAddress)) { - console.error(`❌ Invalid ProxyAdmin address: ${proxyAdminAddress}`); - console.error(` Must be a valid Ethereum address (0x...)`); - process.exit(1); - } - - // Validate addresses if provided - const addressesToValidate: Array<[string, string]> = []; - - if (blrProxyAddress) { - addressesToValidate.push([blrProxyAddress, "BLR proxy"]); - } - if (factoryProxyAddress) { - addressesToValidate.push([factoryProxyAddress, "Factory proxy"]); - } - if (blrImplementationAddress) { - addressesToValidate.push([blrImplementationAddress, "BLR implementation"]); - } - if (factoryImplementationAddress) { - addressesToValidate.push([factoryImplementationAddress, "Factory implementation"]); - } - - for (const [addr, name] of addressesToValidate) { - if (!ethers.utils.isAddress(addr)) { - console.error(`❌ Invalid ${name} address: ${addr}`); - console.error(` All addresses must be valid Ethereum addresses (0x...)`); - process.exit(1); - } - } - - // Validate network configuration - const availableNetworks = getAllNetworks(); - if (!availableNetworks.includes(network)) { - console.error(`❌ Network '${network}' not configured in Configuration.ts`); - console.log(`Available networks: ${availableNetworks.join(", ")}`); - process.exit(1); - } - - // Get network config and create signer - const networkConfig = getNetworkConfig(network); - - const privateKeyEnvVar = `${network.toUpperCase().replace(/-/g, "_")}_PRIVATE_KEY_0`; - const privateKey = process.env[privateKeyEnvVar]; - - if (!privateKey) { - console.error(`❌ Missing private key environment variable: ${privateKeyEnvVar}`); - console.error(` Set it with: export ${privateKeyEnvVar}=0x...`); - process.exit(1); - } - - const provider = new providers.JsonRpcProvider(networkConfig.jsonRpcUrl); - const signer = new Wallet(privateKey, provider); - - console.log(`\nπŸ‘€ Deployer: ${await signer.getAddress()}\n`); - - try { - const result = await upgradeTupProxies(signer, network, { - proxyAdminAddress, - blrProxyAddress, - factoryProxyAddress, - deployNewBlrImpl, - deployNewFactoryImpl, - blrImplementationAddress, - factoryImplementationAddress, - blrInitData, - factoryInitData, - }); - - console.log(`\nβœ“ Upgrade completed successfully!`); - console.log(` Proxies upgraded: ${result.summary.proxiesUpgraded}`); - console.log(` Proxies failed: ${result.summary.proxiesFailed}`); - console.log(` Total time: ${(result.summary.deploymentTime / 1000).toFixed(2)}s`); - console.log(` Total gas: ${result.summary.gasUsed}`); - - if (result.blrUpgrade) { - console.log(`\n BLR: ${result.blrUpgrade.upgraded ? "upgraded" : "unchanged"}`); - if (result.blrUpgrade.transactionHash) { - console.log(` TX: ${result.blrUpgrade.transactionHash}`); - } - } - - if (result.factoryUpgrade) { - console.log(` Factory: ${result.factoryUpgrade.upgraded ? "upgraded" : "unchanged"}`); - if (result.factoryUpgrade.transactionHash) { - console.log(` TX: ${result.factoryUpgrade.transactionHash}`); - } - } - - process.exit(0); - } catch (error) { - console.error(`\n❌ Upgrade failed: ${error instanceof Error ? error.message : String(error)}`); - - if (error instanceof Error && error.stack) { - console.error(`\nStack trace:`); - console.error(error.stack); - } - - process.exit(1); - } -} - -main().catch((err) => { - console.error("Fatal error:", err); - process.exit(1); -}); diff --git a/packages/ats/contracts/scripts/cli/upgradeTupProxies.ts b/packages/ats/contracts/scripts/cli/upgradeTupProxies.ts new file mode 100755 index 000000000..921dbdc48 --- /dev/null +++ b/packages/ats/contracts/scripts/cli/upgradeTupProxies.ts @@ -0,0 +1,121 @@ +#!/usr/bin/env node +// SPDX-License-Identifier: Apache-2.0 + +/** + * CLI entry point for upgrading TUP (TransparentUpgradeableProxy) contracts. + * + * This script provides a command-line interface for upgrading BLR and/or Factory + * proxy implementations without redeploying the ProxyAdmin itself. + * + * Configuration via environment variables: + * NETWORK - Target network name (required) + * {NETWORK}_PRIVATE_KEY_0 - Private key for deployer account + * PROXY_ADMIN_ADDRESS - Address of ProxyAdmin contract (required) + * BLR_PROXY - Address of BLR proxy (optional if only upgrading Factory) + * FACTORY_PROXY - Address of Factory proxy (optional if only upgrading BLR) + * DEPLOY_NEW_BLR_IMPL - Deploy new BLR implementation (true/false) + * DEPLOY_NEW_FACTORY_IMPL - Deploy new Factory implementation (true/false) + * BLR_IMPLEMENTATION - Use existing BLR implementation address + * FACTORY_IMPLEMENTATION - Use existing Factory implementation address + * BLR_INIT_DATA - Initialization data for BLR upgradeAndCall (optional) + * FACTORY_INIT_DATA - Initialization data for Factory upgradeAndCall (optional) + * + * Usage: + * NETWORK=hedera-testnet PROXY_ADMIN_ADDRESS=0x123... DEPLOY_NEW_BLR_IMPL=true npm run upgrade:tup + * NETWORK=hedera-testnet PROXY_ADMIN_ADDRESS=0x123... BLR_IMPLEMENTATION=0xabc... npm run upgrade:tup + * NETWORK=hedera-testnet PROXY_ADMIN_ADDRESS=0x123... BLR_PROXY=0x111... FACTORY_PROXY=0x222... npm run upgrade:tup + * + * @module cli/upgradeTupProxies + */ + +import { upgradeTupProxies } from "../workflows/upgradeTupProxies"; +import { info, success, error } from "@scripts/infrastructure"; +import { requireNetworkSigner, requireValidAddress, validateOptionalAddress, parseBooleanEnv } from "./shared"; + +async function main() { + // Get network from environment (required) + const { network, signer, address } = await requireNetworkSigner(); + + const proxyAdminAddress = requireValidAddress(process.env.PROXY_ADMIN_ADDRESS, "PROXY_ADMIN_ADDRESS"); + const blrProxyAddress = validateOptionalAddress(process.env.BLR_PROXY, "BLR proxy"); + const factoryProxyAddress = validateOptionalAddress(process.env.FACTORY_PROXY, "Factory proxy"); + const deployNewBlrImpl = parseBooleanEnv("DEPLOY_NEW_BLR_IMPL", false); + const deployNewFactoryImpl = parseBooleanEnv("DEPLOY_NEW_FACTORY_IMPL", false); + const blrImplementationAddress = validateOptionalAddress(process.env.BLR_IMPLEMENTATION, "BLR implementation"); + const factoryImplementationAddress = validateOptionalAddress( + process.env.FACTORY_IMPLEMENTATION, + "Factory implementation", + ); + const blrInitData = process.env.BLR_INIT_DATA; + const factoryInitData = process.env.FACTORY_INIT_DATA; + + info(`πŸ”„ Starting TUP Proxy Upgrade`); + info("---"); + info(`πŸ“‘ Network: ${network}`); + info(`πŸ”‘ ProxyAdmin: ${proxyAdminAddress}`); + if (blrProxyAddress) { + info(` BLR Proxy: ${blrProxyAddress}`); + info(` Deploy: ${deployNewBlrImpl}, Implementation: ${blrImplementationAddress || "None"}`); + } + if (factoryProxyAddress) { + info(` Factory Proxy: ${factoryProxyAddress}`); + info(` Deploy: ${deployNewFactoryImpl}, Implementation: ${factoryImplementationAddress || "None"}`); + } + info("---"); + + info(`πŸ‘€ Deployer: ${address}`); + + try { + const result = await upgradeTupProxies(signer, network, { + proxyAdminAddress, + blrProxyAddress, + factoryProxyAddress, + deployNewBlrImpl, + deployNewFactoryImpl, + blrImplementationAddress, + factoryImplementationAddress, + blrInitData, + factoryInitData, + }); + + success(`βœ… Upgrade completed successfully!`); + info("πŸ“‹ Summary:"); + info(` Proxies upgraded: ${result.summary.proxiesUpgraded}`); + info(` Proxies failed: ${result.summary.proxiesFailed}`); + info(` Total time: ${(result.summary.deploymentTime / 1000).toFixed(2)}s`); + info(` Total gas: ${result.summary.gasUsed}`); + + if (result.blrUpgrade) { + info(`πŸ“¦ BLR: ${result.blrUpgrade.upgraded ? "βœ… upgraded" : "unchanged"}`); + if (result.blrUpgrade.transactionHash) { + info(` TX: ${result.blrUpgrade.transactionHash}`); + } + } + + if (result.factoryUpgrade) { + info(`🏭 Factory: ${result.factoryUpgrade.upgraded ? "βœ… upgraded" : "unchanged"}`); + if (result.factoryUpgrade.transactionHash) { + info(` TX: ${result.factoryUpgrade.transactionHash}`); + } + } + + process.exit(0); + } catch (err) { + error(`❌ Upgrade failed: ${err instanceof Error ? err.message : String(err)}`); + + if (err instanceof Error && err.stack) { + error(`Stack trace:\n${err.stack}`); + } + + process.exit(1); + } +} + +export { main }; + +if (require.main === module) { + main().catch((err) => { + error("❌ Fatal error:", err); + process.exit(1); + }); +} diff --git a/packages/ats/contracts/scripts/domain/atsRegistry.data.ts b/packages/ats/contracts/scripts/domain/atsRegistry.data.ts index 1950ff2f6..d3ed4f90f 100644 --- a/packages/ats/contracts/scripts/domain/atsRegistry.data.ts +++ b/packages/ats/contracts/scripts/domain/atsRegistry.data.ts @@ -10,8 +10,8 @@ * * Import from '@scripts/domain' instead of this file directly. * - * Generated: 2025-12-01T14:53:46.712Z - * Facets: 49 + * Generated: 2026-01-21T15:11:01.440Z + * Facets: 193 * Infrastructure: 2 * * @module domain/atsRegistry.data @@ -21,28 +21,100 @@ import { FacetDefinition, ContractDefinition, StorageWrapperDefinition } from "@ import { AccessControlFacet__factory, AccessControlFacetTimeTravel__factory, + AccessControlFixedRateFacet__factory, + AccessControlFixedRateFacetTimeTravel__factory, + AccessControlKpiLinkedRateFacet__factory, + AccessControlKpiLinkedRateFacetTimeTravel__factory, + AccessControlSustainabilityPerformanceTargetRateFacet__factory, + AccessControlSustainabilityPerformanceTargetRateFacetTimeTravel__factory, AdjustBalancesFacet__factory, AdjustBalancesFacetTimeTravel__factory, + AdjustBalancesFixedRateFacet__factory, + AdjustBalancesFixedRateFacetTimeTravel__factory, + AdjustBalancesKpiLinkedRateFacet__factory, + AdjustBalancesKpiLinkedRateFacetTimeTravel__factory, + AdjustBalancesSustainabilityPerformanceTargetRateFacet__factory, + AdjustBalancesSustainabilityPerformanceTargetRateFacetTimeTravel__factory, BondUSAFacet__factory, BondUSAFacetTimeTravel__factory, + BondUSAFixedRateFacet__factory, + BondUSAFixedRateFacetTimeTravel__factory, + BondUSAKpiLinkedRateFacet__factory, + BondUSAKpiLinkedRateFacetTimeTravel__factory, BondUSAReadFacet__factory, BondUSAReadFacetTimeTravel__factory, + BondUSAReadFixedRateFacet__factory, + BondUSAReadFixedRateFacetTimeTravel__factory, + BondUSAReadKpiLinkedRateFacet__factory, + BondUSAReadKpiLinkedRateFacetTimeTravel__factory, + BondUSAReadSustainabilityPerformanceTargetRateFacet__factory, + BondUSAReadSustainabilityPerformanceTargetRateFacetTimeTravel__factory, + BondUSASustainabilityPerformanceTargetRateFacet__factory, + BondUSASustainabilityPerformanceTargetRateFacetTimeTravel__factory, CapFacet__factory, CapFacetTimeTravel__factory, + CapFixedRateFacet__factory, + CapFixedRateFacetTimeTravel__factory, + CapKpiLinkedRateFacet__factory, + CapKpiLinkedRateFacetTimeTravel__factory, + CapSustainabilityPerformanceTargetRateFacet__factory, + CapSustainabilityPerformanceTargetRateFacetTimeTravel__factory, ClearingActionsFacet__factory, ClearingActionsFacetTimeTravel__factory, + ClearingActionsFixedRateFacet__factory, + ClearingActionsFixedRateFacetTimeTravel__factory, + ClearingActionsKpiLinkedRateFacet__factory, + ClearingActionsKpiLinkedRateFacetTimeTravel__factory, + ClearingActionsSustainabilityPerformanceTargetRateFacet__factory, + ClearingActionsSustainabilityPerformanceTargetRateFacetTimeTravel__factory, ClearingHoldCreationFacet__factory, ClearingHoldCreationFacetTimeTravel__factory, + ClearingHoldCreationFixedRateFacet__factory, + ClearingHoldCreationFixedRateFacetTimeTravel__factory, + ClearingHoldCreationKpiLinkedRateFacet__factory, + ClearingHoldCreationKpiLinkedRateFacetTimeTravel__factory, + ClearingHoldCreationSustainabilityPerformanceTargetRateFacet__factory, + ClearingHoldCreationSustainabilityPerformanceTargetRateFacetTimeTravel__factory, ClearingReadFacet__factory, ClearingReadFacetTimeTravel__factory, + ClearingReadFixedRateFacet__factory, + ClearingReadFixedRateFacetTimeTravel__factory, + ClearingReadKpiLinkedRateFacet__factory, + ClearingReadKpiLinkedRateFacetTimeTravel__factory, + ClearingReadSustainabilityPerformanceTargetRateFacet__factory, + ClearingReadSustainabilityPerformanceTargetRateFacetTimeTravel__factory, ClearingRedeemFacet__factory, ClearingRedeemFacetTimeTravel__factory, + ClearingRedeemFixedRateFacet__factory, + ClearingRedeemFixedRateFacetTimeTravel__factory, + ClearingRedeemKpiLinkedRateFacet__factory, + ClearingRedeemKpiLinkedRateFacetTimeTravel__factory, + ClearingRedeemSustainabilityPerformanceTargetRateFacet__factory, + ClearingRedeemSustainabilityPerformanceTargetRateFacetTimeTravel__factory, ClearingTransferFacet__factory, ClearingTransferFacetTimeTravel__factory, + ClearingTransferFixedRateFacet__factory, + ClearingTransferFixedRateFacetTimeTravel__factory, + ClearingTransferKpiLinkedRateFacet__factory, + ClearingTransferKpiLinkedRateFacetTimeTravel__factory, + ClearingTransferSustainabilityPerformanceTargetRateFacet__factory, + ClearingTransferSustainabilityPerformanceTargetRateFacetTimeTravel__factory, ControlListFacet__factory, ControlListFacetTimeTravel__factory, + ControlListFixedRateFacet__factory, + ControlListFixedRateFacetTimeTravel__factory, + ControlListKpiLinkedRateFacet__factory, + ControlListKpiLinkedRateFacetTimeTravel__factory, + ControlListSustainabilityPerformanceTargetRateFacet__factory, + ControlListSustainabilityPerformanceTargetRateFacetTimeTravel__factory, CorporateActionsFacet__factory, CorporateActionsFacetTimeTravel__factory, + CorporateActionsFixedRateFacet__factory, + CorporateActionsFixedRateFacetTimeTravel__factory, + CorporateActionsKpiLinkedRateFacet__factory, + CorporateActionsKpiLinkedRateFacetTimeTravel__factory, + CorporateActionsSustainabilityPerformanceTargetRateFacet__factory, + CorporateActionsSustainabilityPerformanceTargetRateFacetTimeTravel__factory, DiamondCutFacet__factory, DiamondCutFacetTimeTravel__factory, DiamondFacet__factory, @@ -51,71 +123,287 @@ import { DiamondLoupeFacetTimeTravel__factory, ERC1410IssuerFacet__factory, ERC1410IssuerFacetTimeTravel__factory, + ERC1410IssuerFixedRateFacet__factory, + ERC1410IssuerFixedRateFacetTimeTravel__factory, + ERC1410IssuerKpiLinkedRateFacet__factory, + ERC1410IssuerKpiLinkedRateFacetTimeTravel__factory, + ERC1410IssuerSustainabilityPerformanceTargetRateFacet__factory, + ERC1410IssuerSustainabilityPerformanceTargetRateFacetTimeTravel__factory, ERC1410ManagementFacet__factory, ERC1410ManagementFacetTimeTravel__factory, + ERC1410ManagementFixedRateFacet__factory, + ERC1410ManagementFixedRateFacetTimeTravel__factory, + ERC1410ManagementKpiLinkedRateFacet__factory, + ERC1410ManagementKpiLinkedRateFacetTimeTravel__factory, + ERC1410ManagementSustainabilityPerformanceTargetRateFacet__factory, + ERC1410ManagementSustainabilityPerformanceTargetRateFacetTimeTravel__factory, ERC1410ReadFacet__factory, ERC1410ReadFacetTimeTravel__factory, + ERC1410ReadFixedRateFacet__factory, + ERC1410ReadFixedRateFacetTimeTravel__factory, + ERC1410ReadKpiLinkedRateFacet__factory, + ERC1410ReadKpiLinkedRateFacetTimeTravel__factory, + ERC1410ReadSustainabilityPerformanceTargetRateFacet__factory, + ERC1410ReadSustainabilityPerformanceTargetRateFacetTimeTravel__factory, ERC1410TokenHolderFacet__factory, ERC1410TokenHolderFacetTimeTravel__factory, + ERC1410TokenHolderFixedRateFacet__factory, + ERC1410TokenHolderFixedRateFacetTimeTravel__factory, + ERC1410TokenHolderKpiLinkedRateFacet__factory, + ERC1410TokenHolderKpiLinkedRateFacetTimeTravel__factory, + ERC1410TokenHolderSustainabilityPerformanceTargetRateFacet__factory, + ERC1410TokenHolderSustainabilityPerformanceTargetRateFacetTimeTravel__factory, ERC1594Facet__factory, ERC1594FacetTimeTravel__factory, + ERC1594FixedRateFacet__factory, + ERC1594FixedRateFacetTimeTravel__factory, + ERC1594KpiLinkedRateFacet__factory, + ERC1594KpiLinkedRateFacetTimeTravel__factory, + ERC1594SustainabilityPerformanceTargetRateFacet__factory, + ERC1594SustainabilityPerformanceTargetRateFacetTimeTravel__factory, ERC1643Facet__factory, ERC1643FacetTimeTravel__factory, + ERC1643FixedRateFacet__factory, + ERC1643FixedRateFacetTimeTravel__factory, + ERC1643KpiLinkedRateFacet__factory, + ERC1643KpiLinkedRateFacetTimeTravel__factory, + ERC1643SustainabilityPerformanceTargetRateFacet__factory, + ERC1643SustainabilityPerformanceTargetRateFacetTimeTravel__factory, ERC1644Facet__factory, ERC1644FacetTimeTravel__factory, + ERC1644FixedRateFacet__factory, + ERC1644FixedRateFacetTimeTravel__factory, + ERC1644KpiLinkedRateFacet__factory, + ERC1644KpiLinkedRateFacetTimeTravel__factory, + ERC1644SustainabilityPerformanceTargetRateFacet__factory, + ERC1644SustainabilityPerformanceTargetRateFacetTimeTravel__factory, ERC20Facet__factory, ERC20FacetTimeTravel__factory, + ERC20FixedRateFacet__factory, + ERC20FixedRateFacetTimeTravel__factory, + ERC20KpiLinkedRateFacet__factory, + ERC20KpiLinkedRateFacetTimeTravel__factory, ERC20PermitFacet__factory, ERC20PermitFacetTimeTravel__factory, + ERC20PermitFixedRateFacet__factory, + ERC20PermitFixedRateFacetTimeTravel__factory, + ERC20PermitKpiLinkedRateFacet__factory, + ERC20PermitKpiLinkedRateFacetTimeTravel__factory, + ERC20PermitSustainabilityPerformanceTargetRateFacet__factory, + ERC20PermitSustainabilityPerformanceTargetRateFacetTimeTravel__factory, + ERC20SustainabilityPerformanceTargetRateFacet__factory, + ERC20SustainabilityPerformanceTargetRateFacetTimeTravel__factory, ERC20VotesFacet__factory, ERC20VotesFacetTimeTravel__factory, + ERC20VotesFixedRateFacet__factory, + ERC20VotesFixedRateFacetTimeTravel__factory, + ERC20VotesKpiLinkedRateFacet__factory, + ERC20VotesKpiLinkedRateFacetTimeTravel__factory, + ERC20VotesSustainabilityPerformanceTargetRateFacet__factory, + ERC20VotesSustainabilityPerformanceTargetRateFacetTimeTravel__factory, ERC3643BatchFacet__factory, ERC3643BatchFacetTimeTravel__factory, + ERC3643BatchFixedRateFacet__factory, + ERC3643BatchFixedRateFacetTimeTravel__factory, + ERC3643BatchKpiLinkedRateFacet__factory, + ERC3643BatchKpiLinkedRateFacetTimeTravel__factory, + ERC3643BatchSustainabilityPerformanceTargetRateFacet__factory, + ERC3643BatchSustainabilityPerformanceTargetRateFacetTimeTravel__factory, ERC3643ManagementFacet__factory, ERC3643ManagementFacetTimeTravel__factory, + ERC3643ManagementFixedRateFacet__factory, + ERC3643ManagementFixedRateFacetTimeTravel__factory, + ERC3643ManagementKpiLinkedRateFacet__factory, + ERC3643ManagementKpiLinkedRateFacetTimeTravel__factory, + ERC3643ManagementSustainabilityPerformanceTargetRateFacet__factory, + ERC3643ManagementSustainabilityPerformanceTargetRateFacetTimeTravel__factory, ERC3643OperationsFacet__factory, ERC3643OperationsFacetTimeTravel__factory, + ERC3643OperationsFixedRateFacet__factory, + ERC3643OperationsFixedRateFacetTimeTravel__factory, + ERC3643OperationsKpiLinkedRateFacet__factory, + ERC3643OperationsKpiLinkedRateFacetTimeTravel__factory, + ERC3643OperationsSustainabilityPerformanceTargetRateFacet__factory, + ERC3643OperationsSustainabilityPerformanceTargetRateFacetTimeTravel__factory, ERC3643ReadFacet__factory, ERC3643ReadFacetTimeTravel__factory, + ERC3643ReadFixedRateFacet__factory, + ERC3643ReadFixedRateFacetTimeTravel__factory, + ERC3643ReadKpiLinkedRateFacet__factory, + ERC3643ReadKpiLinkedRateFacetTimeTravel__factory, + ERC3643ReadSustainabilityPerformanceTargetRateFacet__factory, + ERC3643ReadSustainabilityPerformanceTargetRateFacetTimeTravel__factory, EquityUSAFacet__factory, EquityUSAFacetTimeTravel__factory, ExternalControlListManagementFacet__factory, ExternalControlListManagementFacetTimeTravel__factory, + ExternalControlListManagementFixedRateFacet__factory, + ExternalControlListManagementFixedRateFacetTimeTravel__factory, + ExternalControlListManagementKpiLinkedRateFacet__factory, + ExternalControlListManagementKpiLinkedRateFacetTimeTravel__factory, + ExternalControlListManagementSustainabilityPerformanceTargetRateFacet__factory, + ExternalControlListManagementSustainabilityPerformanceTargetRateFacetTimeTravel__factory, ExternalKycListManagementFacet__factory, ExternalKycListManagementFacetTimeTravel__factory, + ExternalKycListManagementFixedRateFacet__factory, + ExternalKycListManagementFixedRateFacetTimeTravel__factory, + ExternalKycListManagementKpiLinkedRateFacet__factory, + ExternalKycListManagementKpiLinkedRateFacetTimeTravel__factory, + ExternalKycListManagementSustainabilityPerformanceTargetRateFacet__factory, + ExternalKycListManagementSustainabilityPerformanceTargetRateFacetTimeTravel__factory, ExternalPauseManagementFacet__factory, ExternalPauseManagementFacetTimeTravel__factory, + ExternalPauseManagementFixedRateFacet__factory, + ExternalPauseManagementFixedRateFacetTimeTravel__factory, + ExternalPauseManagementKpiLinkedRateFacet__factory, + ExternalPauseManagementKpiLinkedRateFacetTimeTravel__factory, + ExternalPauseManagementSustainabilityPerformanceTargetRateFacet__factory, + ExternalPauseManagementSustainabilityPerformanceTargetRateFacetTimeTravel__factory, + FixedRateFacet__factory, + FixedRateFacetTimeTravel__factory, FreezeFacet__factory, FreezeFacetTimeTravel__factory, + FreezeFixedRateFacet__factory, + FreezeFixedRateFacetTimeTravel__factory, + FreezeKpiLinkedRateFacet__factory, + FreezeKpiLinkedRateFacetTimeTravel__factory, + FreezeSustainabilityPerformanceTargetRateFacet__factory, + FreezeSustainabilityPerformanceTargetRateFacetTimeTravel__factory, HoldManagementFacet__factory, HoldManagementFacetTimeTravel__factory, + HoldManagementFixedRateFacet__factory, + HoldManagementFixedRateFacetTimeTravel__factory, + HoldManagementKpiLinkedRateFacet__factory, + HoldManagementKpiLinkedRateFacetTimeTravel__factory, + HoldManagementSustainabilityPerformanceTargetRateFacet__factory, + HoldManagementSustainabilityPerformanceTargetRateFacetTimeTravel__factory, HoldReadFacet__factory, HoldReadFacetTimeTravel__factory, + HoldReadFixedRateFacet__factory, + HoldReadFixedRateFacetTimeTravel__factory, + HoldReadKpiLinkedRateFacet__factory, + HoldReadKpiLinkedRateFacetTimeTravel__factory, + HoldReadSustainabilityPerformanceTargetRateFacet__factory, + HoldReadSustainabilityPerformanceTargetRateFacetTimeTravel__factory, HoldTokenHolderFacet__factory, HoldTokenHolderFacetTimeTravel__factory, + HoldTokenHolderFixedRateFacet__factory, + HoldTokenHolderFixedRateFacetTimeTravel__factory, + HoldTokenHolderKpiLinkedRateFacet__factory, + HoldTokenHolderKpiLinkedRateFacetTimeTravel__factory, + HoldTokenHolderSustainabilityPerformanceTargetRateFacet__factory, + HoldTokenHolderSustainabilityPerformanceTargetRateFacetTimeTravel__factory, + KpiLinkedRateFacet__factory, + KpiLinkedRateFacetTimeTravel__factory, + KpisSustainabilityPerformanceTargetRateFacet__factory, + KpisSustainabilityPerformanceTargetRateFacetTimeTravel__factory, KycFacet__factory, KycFacetTimeTravel__factory, + KycFixedRateFacet__factory, + KycFixedRateFacetTimeTravel__factory, + KycKpiLinkedRateFacet__factory, + KycKpiLinkedRateFacetTimeTravel__factory, + KycSustainabilityPerformanceTargetRateFacet__factory, + KycSustainabilityPerformanceTargetRateFacetTimeTravel__factory, LockFacet__factory, LockFacetTimeTravel__factory, + LockFixedRateFacet__factory, + LockFixedRateFacetTimeTravel__factory, + LockKpiLinkedRateFacet__factory, + LockKpiLinkedRateFacetTimeTravel__factory, + LockSustainabilityPerformanceTargetRateFacet__factory, + LockSustainabilityPerformanceTargetRateFacetTimeTravel__factory, + NoncesFacet__factory, + NoncesFacetTimeTravel__factory, + NoncesFixedRateFacet__factory, + NoncesFixedRateFacetTimeTravel__factory, + NoncesKpiLinkedRateFacet__factory, + NoncesKpiLinkedRateFacetTimeTravel__factory, + NoncesSustainabilityPerformanceTargetRateFacet__factory, + NoncesSustainabilityPerformanceTargetRateFacetTimeTravel__factory, PauseFacet__factory, PauseFacetTimeTravel__factory, + PauseFixedRateFacet__factory, + PauseFixedRateFacetTimeTravel__factory, + PauseKpiLinkedRateFacet__factory, + PauseKpiLinkedRateFacetTimeTravel__factory, + PauseSustainabilityPerformanceTargetRateFacet__factory, + PauseSustainabilityPerformanceTargetRateFacetTimeTravel__factory, ProceedRecipientsFacet__factory, ProceedRecipientsFacetTimeTravel__factory, + ProceedRecipientsFixedRateFacet__factory, + ProceedRecipientsFixedRateFacetTimeTravel__factory, + ProceedRecipientsKpiLinkedRateFacet__factory, + ProceedRecipientsKpiLinkedRateFacetTimeTravel__factory, + ProceedRecipientsSustainabilityPerformanceTargetRateFacet__factory, + ProceedRecipientsSustainabilityPerformanceTargetRateFacetTimeTravel__factory, ProtectedPartitionsFacet__factory, ProtectedPartitionsFacetTimeTravel__factory, + ProtectedPartitionsFixedRateFacet__factory, + ProtectedPartitionsFixedRateFacetTimeTravel__factory, + ProtectedPartitionsKpiLinkedRateFacet__factory, + ProtectedPartitionsKpiLinkedRateFacetTimeTravel__factory, + ProtectedPartitionsSustainabilityPerformanceTargetRateFacet__factory, + ProtectedPartitionsSustainabilityPerformanceTargetRateFacetTimeTravel__factory, ScheduledBalanceAdjustmentsFacet__factory, ScheduledBalanceAdjustmentsFacetTimeTravel__factory, + ScheduledBalanceAdjustmentsFixedRateFacet__factory, + ScheduledBalanceAdjustmentsFixedRateFacetTimeTravel__factory, + ScheduledBalanceAdjustmentsKpiLinkedRateFacet__factory, + ScheduledBalanceAdjustmentsKpiLinkedRateFacetTimeTravel__factory, + ScheduledBalanceAdjustmentsSustainabilityPerformanceTargetRateFacet__factory, + ScheduledBalanceAdjustmentsSustainabilityPerformanceTargetRateFacetTimeTravel__factory, + ScheduledCouponListingFacet__factory, + ScheduledCouponListingFacetTimeTravel__factory, + ScheduledCouponListingFixedRateFacet__factory, + ScheduledCouponListingFixedRateFacetTimeTravel__factory, + ScheduledCouponListingKpiLinkedRateFacet__factory, + ScheduledCouponListingKpiLinkedRateFacetTimeTravel__factory, + ScheduledCouponListingSustainabilityPerformanceTargetRateFacet__factory, + ScheduledCouponListingSustainabilityPerformanceTargetRateFacetTimeTravel__factory, ScheduledCrossOrderedTasksFacet__factory, ScheduledCrossOrderedTasksFacetTimeTravel__factory, + ScheduledCrossOrderedTasksFixedRateFacet__factory, + ScheduledCrossOrderedTasksFixedRateFacetTimeTravel__factory, + ScheduledCrossOrderedTasksKpiLinkedRateFacet__factory, + ScheduledCrossOrderedTasksKpiLinkedRateFacetTimeTravel__factory, + ScheduledCrossOrderedTasksSustainabilityPerformanceTargetRateFacet__factory, + ScheduledCrossOrderedTasksSustainabilityPerformanceTargetRateFacetTimeTravel__factory, ScheduledSnapshotsFacet__factory, ScheduledSnapshotsFacetTimeTravel__factory, + ScheduledSnapshotsFixedRateFacet__factory, + ScheduledSnapshotsFixedRateFacetTimeTravel__factory, + ScheduledSnapshotsKpiLinkedRateFacet__factory, + ScheduledSnapshotsKpiLinkedRateFacetTimeTravel__factory, + ScheduledSnapshotsSustainabilityPerformanceTargetRateFacet__factory, + ScheduledSnapshotsSustainabilityPerformanceTargetRateFacetTimeTravel__factory, SnapshotsFacet__factory, SnapshotsFacetTimeTravel__factory, + SnapshotsFixedRateFacet__factory, + SnapshotsFixedRateFacetTimeTravel__factory, + SnapshotsKpiLinkedRateFacet__factory, + SnapshotsKpiLinkedRateFacetTimeTravel__factory, + SnapshotsSustainabilityPerformanceTargetRateFacet__factory, + SnapshotsSustainabilityPerformanceTargetRateFacetTimeTravel__factory, SsiManagementFacet__factory, SsiManagementFacetTimeTravel__factory, + SsiManagementFixedRateFacet__factory, + SsiManagementFixedRateFacetTimeTravel__factory, + SsiManagementKpiLinkedRateFacet__factory, + SsiManagementKpiLinkedRateFacetTimeTravel__factory, + SsiManagementSustainabilityPerformanceTargetRateFacet__factory, + SsiManagementSustainabilityPerformanceTargetRateFacetTimeTravel__factory, + SustainabilityPerformanceTargetRateFacet__factory, + SustainabilityPerformanceTargetRateFacetTimeTravel__factory, TimeTravelFacet__factory, TransferAndLockFacet__factory, TransferAndLockFacetTimeTravel__factory, + TransferAndLockFixedRateFacet__factory, + TransferAndLockFixedRateFacetTimeTravel__factory, + TransferAndLockKpiLinkedRateFacet__factory, + TransferAndLockKpiLinkedRateFacetTimeTravel__factory, + TransferAndLockSustainabilityPerformanceTargetRateFacet__factory, + TransferAndLockSustainabilityPerformanceTargetRateFacetTimeTravel__factory, } from "@contract-types"; /** @@ -128,17 +416,55 @@ export const FACET_REGISTRY: Record = { name: "_ACCESS_CONTROL_RESOLVER_KEY", value: "0x011768a41cb4fe76a26f444eec15d81a0d84e919a36336d72c6539cf41c0fcf6", }, - inheritance: ["AccessControl", "IStaticFunctionSelectors"], + inheritance: ["AccessControlFacetBase", "Common"], methods: [ - { name: "applyRoles", signature: "applyRoles(bytes32[],bool[],address)", selector: "0xfcfffeec" }, - { name: "getRoleCountFor", signature: "getRoleCountFor(address)", selector: "0x8fa9b4fe" }, - { name: "getRoleMemberCount", signature: "getRoleMemberCount(bytes32)", selector: "0xca15c873" }, - { name: "getRoleMembers", signature: "getRoleMembers(bytes32,uint256,uint256)", selector: "0x2a861f57" }, - { name: "getRolesFor", signature: "getRolesFor(address,uint256,uint256)", selector: "0xa28cf9a9" }, - { name: "grantRole", signature: "grantRole(bytes32,address)", selector: "0x2f2ff15d" }, - { name: "hasRole", signature: "hasRole(bytes32,address)", selector: "0x91d14854" }, - { name: "renounceRole", signature: "renounceRole(bytes32)", selector: "0x8bb9c5bf" }, - { name: "revokeRole", signature: "revokeRole(bytes32,address)", selector: "0xd547741f" }, + { + name: "applyRoles", + signature: "function applyRoles(bytes32[] _roles, bool[] _actives, address _account) returns (bool success_)", + selector: "0xfcfffeec", + }, + { + name: "getRoleCountFor", + signature: "function getRoleCountFor(address _account) view returns (uint256 roleCount_)", + selector: "0x8fa9b4fe", + }, + { + name: "getRoleMemberCount", + signature: "function getRoleMemberCount(bytes32 _role) view returns (uint256 memberCount_)", + selector: "0xca15c873", + }, + { + name: "getRoleMembers", + signature: + "function getRoleMembers(bytes32 _role, uint256 _pageIndex, uint256 _pageLength) view returns (address[] members_)", + selector: "0x2a861f57", + }, + { + name: "getRolesFor", + signature: + "function getRolesFor(address _account, uint256 _pageIndex, uint256 _pageLength) view returns (bytes32[] roles_)", + selector: "0xa28cf9a9", + }, + { + name: "grantRole", + signature: "function grantRole(bytes32 _role, address _account) returns (bool success_)", + selector: "0x2f2ff15d", + }, + { + name: "hasRole", + signature: "function hasRole(bytes32 _role, address _account) view returns (bool)", + selector: "0x91d14854", + }, + { + name: "renounceRole", + signature: "function renounceRole(bytes32 _role) returns (bool success_)", + selector: "0x8bb9c5bf", + }, + { + name: "revokeRole", + signature: "function revokeRole(bytes32 _role, address _account) returns (bool success_)", + selector: "0xd547741f", + }, ], events: [ { @@ -169,2056 +495,11452 @@ export const FACET_REGISTRY: Record = { signature: "AccountNotAssignedToRole(bytes32,address)", selector: "0x3ad9a7ae", }, + { name: "ExpirationNotReached", signature: "ExpirationNotReached()", selector: "0x92899bcd" }, { name: "RolesNotApplied", signature: "RolesNotApplied(bytes32[],bool[],address)", selector: "0xaa4b6234" }, ], factory: (signer, useTimeTravel = false) => useTimeTravel ? new AccessControlFacetTimeTravel__factory(signer) : new AccessControlFacet__factory(signer), }, - AdjustBalancesFacet: { - name: "AdjustBalancesFacet", - resolverKey: { - name: "_BALANCE_ADJUSTMENTS_RESOLVER_KEY", - value: "0x2bbe9fb018f1e7dd12b4442154e7fdfd75aec7b0a65d07debf49de4ece5fe8b8", - }, - inheritance: ["AdjustBalances", "IStaticFunctionSelectors"], - methods: [{ name: "adjustBalances", signature: "adjustBalances(uint256,uint8)", selector: "0xe2d77e44" }], - factory: (signer, useTimeTravel = false) => - useTimeTravel ? new AdjustBalancesFacetTimeTravel__factory(signer) : new AdjustBalancesFacet__factory(signer), - }, - - BondUSAFacet: { - name: "BondUSAFacet", + AccessControlFixedRateFacet: { + name: "AccessControlFixedRateFacet", resolverKey: { - name: "_BOND_RESOLVER_KEY", - value: "0x09c1d80a160a7250b5fabc46d06a7fa4067e6d7292047c5024584b43f17d55ef", + name: "_ACCESS_CONTROL_FIXED_RATE_RESOLVER_KEY", + value: "0xb35ad81b5769c62538fe6a90e40db8be624645f77c1738ce582ede5da399ecb2", }, - inheritance: ["BondUSA", "IStaticFunctionSelectors"], + inheritance: ["AccessControlFacetBase", "CommonFixedInterestRate"], methods: [ { - name: "_initialize_bondUSA", - signature: "_initialize_bondUSA(IBondRead.BondDetailsData,RegulationData,AdditionalSecurityData)", - selector: "0x653458ea", + name: "applyRoles", + signature: "function applyRoles(bytes32[] _roles, bool[] _actives, address _account) returns (bool success_)", + selector: "0xfcfffeec", }, - { name: "fullRedeemAtMaturity", signature: "fullRedeemAtMaturity(address)", selector: "0xd0db5fb2" }, { - name: "redeemAtMaturityByPartition", - signature: "redeemAtMaturityByPartition(address,bytes32,uint256)", - selector: "0x8a647211", + name: "getRoleCountFor", + signature: "function getRoleCountFor(address _account) view returns (uint256 roleCount_)", + selector: "0x8fa9b4fe", }, - { name: "setCoupon", signature: "setCoupon(IBondRead.Coupon)", selector: "0x94218ed1" }, - { name: "updateMaturityDate", signature: "updateMaturityDate(uint256)", selector: "0xc7a6ca35" }, - ], - factory: (signer, useTimeTravel = false) => - useTimeTravel ? new BondUSAFacetTimeTravel__factory(signer) : new BondUSAFacet__factory(signer), - }, - - BondUSAReadFacet: { - name: "BondUSAReadFacet", - resolverKey: { - name: "_BOND_READ_RESOLVER_KEY", - value: "0xe7ca0b805514da05524faf33d2d9d9432bf1dfa53096073a7267041cfdfb6d68", - }, - inheritance: ["BondRead", "Security"], - methods: [ - { name: "getBondDetails", signature: "getBondDetails()", selector: "0x4ce02414" }, - { name: "getCoupon", signature: "getCoupon(uint256)", selector: "0x936e3169" }, - { name: "getCouponAmountFor", signature: "getCouponAmountFor(uint256,address)", selector: "0x439efc2e" }, - { name: "getCouponCount", signature: "getCouponCount()", selector: "0x468bb240" }, - { name: "getCouponFor", signature: "getCouponFor(uint256,address)", selector: "0xbba7b56d" }, - { name: "getCouponHolders", signature: "getCouponHolders(uint256,uint256,uint256)", selector: "0xa92e8371" }, - { name: "getPrincipalFor", signature: "getPrincipalFor(address)", selector: "0x6f131c78" }, - { name: "getSecurityHolders", signature: "getSecurityHolders(uint256,uint256)", selector: "0x81438d2f" }, - { name: "getSecurityRegulationData", signature: "getSecurityRegulationData()", selector: "0x8fda5afe" }, - { name: "getTotalCouponHolders", signature: "getTotalCouponHolders(uint256)", selector: "0xec116ae3" }, - { name: "getTotalSecurityHolders", signature: "getTotalSecurityHolders()", selector: "0xbd007c8f" }, - ], - factory: (signer, useTimeTravel = false) => - useTimeTravel ? new BondUSAReadFacetTimeTravel__factory(signer) : new BondUSAReadFacet__factory(signer), - }, - - CapFacet: { - name: "CapFacet", - resolverKey: { - name: "_CAP_RESOLVER_KEY", - value: "0xfb3f8aac36661b5540c571d821c80dc9db7ede5ca2a4204ee562b3356f0c026b", - }, - inheritance: ["Cap", "IStaticFunctionSelectors"], - methods: [ - { name: "getMaxSupply", signature: "getMaxSupply()", selector: "0x4c0f38c2" }, - { name: "getMaxSupplyByPartition", signature: "getMaxSupplyByPartition(bytes32)", selector: "0x79f3653f" }, - { name: "initialize_Cap", signature: "initialize_Cap(uint256,PartitionCap[])", selector: "0x91aa5bcb" }, - { name: "setMaxSupply", signature: "setMaxSupply(uint256)", selector: "0x6f8b44b0" }, { - name: "setMaxSupplyByPartition", - signature: "setMaxSupplyByPartition(bytes32,uint256)", - selector: "0x99b69647", + name: "getRoleMemberCount", + signature: "function getRoleMemberCount(bytes32 _role) view returns (uint256 memberCount_)", + selector: "0xca15c873", }, - ], - factory: (signer, useTimeTravel = false) => - useTimeTravel ? new CapFacetTimeTravel__factory(signer) : new CapFacet__factory(signer), - }, - - ClearingActionsFacet: { - name: "ClearingActionsFacet", - resolverKey: { - name: "_CLEARING_ACTIONS_RESOLVER_KEY", - value: "0x5472dfc5c92ad7a8651518ea7d3854d3b6494e5bcaa19f91cd61bf93bf6f2a74", - }, - inheritance: ["ClearingActions", "IStaticFunctionSelectors"], - methods: [ - { name: "activateClearing", signature: "activateClearing()", selector: "0xab2d18a9" }, { - name: "approveClearingOperationByPartition", - signature: "approveClearingOperationByPartition(IClearing.ClearingOperationIdentifier)", - selector: "0xd4f8a256", + name: "getRoleMembers", + signature: + "function getRoleMembers(bytes32 _role, uint256 _pageIndex, uint256 _pageLength) view returns (address[] members_)", + selector: "0x2a861f57", }, { - name: "cancelClearingOperationByPartition", - signature: "cancelClearingOperationByPartition(IClearing.ClearingOperationIdentifier)", - selector: "0x41a35702", + name: "getRolesFor", + signature: + "function getRolesFor(address _account, uint256 _pageIndex, uint256 _pageLength) view returns (bytes32[] roles_)", + selector: "0xa28cf9a9", }, - { name: "deactivateClearing", signature: "deactivateClearing()", selector: "0x65c21860" }, - { name: "initializeClearing", signature: "initializeClearing(bool)", selector: "0x86a0b46a" }, - { name: "isClearingActivated", signature: "isClearingActivated()", selector: "0x4b4d8990" }, { - name: "reclaimClearingOperationByPartition", - signature: "reclaimClearingOperationByPartition(IClearing.ClearingOperationIdentifier)", - selector: "0x5b4fda23", + name: "grantRole", + signature: "function grantRole(bytes32 _role, address _account) returns (bool success_)", + selector: "0x2f2ff15d", + }, + { + name: "hasRole", + signature: "function hasRole(bytes32 _role, address _account) view returns (bool)", + selector: "0x91d14854", + }, + { + name: "renounceRole", + signature: "function renounceRole(bytes32 _role) returns (bool success_)", + selector: "0x8bb9c5bf", + }, + { + name: "revokeRole", + signature: "function revokeRole(bytes32 _role, address _account) returns (bool success_)", + selector: "0xd547741f", }, ], events: [ { - name: "ClearingActivated", - signature: "ClearingActivated(address)", - topic0: "0x569080e4e18c204a1d28f09348d781d7cfb170428b2fd33e1f9b7df132674e15", + name: "RoleGranted", + signature: "RoleGranted(address,address,bytes32)", + topic0: "0x03b5d550f3da9dfe316fa35cbecc4cee6d2febeaeee1432f30504bd9ce3780a8", }, { - name: "ClearingDeactivated", - signature: "ClearingDeactivated(address)", - topic0: "0xdb053585e5b33d19247ef59f5b465bcbb9774e6e5ce23932a7e3ffe829cd80a1", + name: "RoleRenounced", + signature: "RoleRenounced(address,bytes32)", + topic0: "0x77aa8a1aed5eadc41a8f14bcf15358ebcf49ff5263b7887e215b4b3915a10a8f", }, { - name: "ClearingOperationApproved", - signature: "ClearingOperationApproved(address,address,bytes32,uint256,IClearing.ClearingOperationType,bytes)", - topic0: "0x02f980b59ce0d0d56d120ea10fd65c1761039caa1b51c65ab99a770ecbf956e9", + name: "RoleRevoked", + signature: "RoleRevoked(address,address,bytes32)", + topic0: "0xd1c3e214f7584ab57912c23f3cead20e310547c9823c8bc891ba162e35622734", }, { - name: "ClearingOperationCanceled", - signature: "ClearingOperationCanceled(address,address,bytes32,uint256,IClearing.ClearingOperationType)", - topic0: "0x730f579c3f3d2d652106a07acfb467c6ad517dde94018569f5a1def7c0c4a0ad", + name: "RolesApplied", + signature: "RolesApplied(bytes32[],bool[],address)", + topic0: "0x4267fc5085e309828a2ec01d2d3a5ad76fa27eee7beada466b9cd88872fea422", }, + ], + errors: [ + { name: "AccountAssignedToRole", signature: "AccountAssignedToRole(bytes32,address)", selector: "0xa6006e94" }, { - name: "ClearingOperationReclaimed", - signature: "ClearingOperationReclaimed(address,address,bytes32,uint256,IClearing.ClearingOperationType)", - topic0: "0x0732b59e2bff7ce1143581074f475d0ac1c2f9f702f6380def68b47959e48f7a", + name: "AccountNotAssignedToRole", + signature: "AccountNotAssignedToRole(bytes32,address)", + selector: "0x3ad9a7ae", }, + { name: "ExpirationNotReached", signature: "ExpirationNotReached()", selector: "0x92899bcd" }, + { name: "InterestRateIsFixed", signature: "InterestRateIsFixed()", selector: "0x849d4eb8" }, + { name: "RolesNotApplied", signature: "RolesNotApplied(bytes32[],bool[],address)", selector: "0xaa4b6234" }, ], factory: (signer, useTimeTravel = false) => - useTimeTravel ? new ClearingActionsFacetTimeTravel__factory(signer) : new ClearingActionsFacet__factory(signer), + useTimeTravel + ? new AccessControlFixedRateFacetTimeTravel__factory(signer) + : new AccessControlFixedRateFacet__factory(signer), }, - ClearingHoldCreationFacet: { - name: "ClearingHoldCreationFacet", + AccessControlKpiLinkedRateFacet: { + name: "AccessControlKpiLinkedRateFacet", resolverKey: { - name: "_CLEARING_HOLDCREATION_RESOLVER_KEY", - value: "0x44f99a141c434fac20d69e7511932ee344d5b37b61851976c83a5df4ca468152", + name: "_ACCESS_CONTROL_KPI_LINKED_RATE_RESOLVER_KEY", + value: "0x465c95eea6723a1645e5399789cee702b19d0bcd0ad3f894270aa25488fb4ab9", }, - inheritance: ["ClearingHoldCreation", "IStaticFunctionSelectors"], + inheritance: ["AccessControlFacetBase", "CommonKpiLinkedInterestRate"], methods: [ { - name: "clearingCreateHoldByPartition", - signature: "clearingCreateHoldByPartition(ClearingOperation,Hold)", - selector: "0x05a3c905", + name: "applyRoles", + signature: "function applyRoles(bytes32[] _roles, bool[] _actives, address _account) returns (bool success_)", + selector: "0xfcfffeec", }, { - name: "clearingCreateHoldFromByPartition", - signature: "clearingCreateHoldFromByPartition(ClearingOperationFrom,Hold)", - selector: "0xa30c2f61", + name: "getRoleCountFor", + signature: "function getRoleCountFor(address _account) view returns (uint256 roleCount_)", + selector: "0x8fa9b4fe", }, { - name: "getClearingCreateHoldForByPartition", - signature: "getClearingCreateHoldForByPartition(bytes32,address,uint256)", - selector: "0x190eb09b", + name: "getRoleMemberCount", + signature: "function getRoleMemberCount(bytes32 _role) view returns (uint256 memberCount_)", + selector: "0xca15c873", }, { - name: "operatorClearingCreateHoldByPartition", - signature: "operatorClearingCreateHoldByPartition(ClearingOperationFrom,Hold)", - selector: "0xdf3a3dbd", + name: "getRoleMembers", + signature: + "function getRoleMembers(bytes32 _role, uint256 _pageIndex, uint256 _pageLength) view returns (address[] members_)", + selector: "0x2a861f57", }, { - name: "protectedClearingCreateHoldByPartition", - signature: "protectedClearingCreateHoldByPartition(ProtectedClearingOperation,Hold,bytes)", - selector: "0x7a9efadf", + name: "getRolesFor", + signature: + "function getRolesFor(address _account, uint256 _pageIndex, uint256 _pageLength) view returns (bytes32[] roles_)", + selector: "0xa28cf9a9", }, - ], - factory: (signer, useTimeTravel = false) => - useTimeTravel - ? new ClearingHoldCreationFacetTimeTravel__factory(signer) - : new ClearingHoldCreationFacet__factory(signer), - }, - - ClearingReadFacet: { - name: "ClearingReadFacet", - resolverKey: { - name: "_CLEARING_READ_RESOLVER_KEY", - value: "0xebb2e29bdf4edaf4ca66a3f9b7735087f9d0474d56d856e53c94ef00596c0b1e", - }, - inheritance: ["ClearingRead", "IStaticFunctionSelectors"], - methods: [ - { name: "getClearedAmountFor", signature: "getClearedAmountFor(address)", selector: "0x46f8bc94" }, { - name: "getClearedAmountForByPartition", - signature: "getClearedAmountForByPartition(bytes32,address)", - selector: "0xfed5a7d4", + name: "grantRole", + signature: "function grantRole(bytes32 _role, address _account) returns (bool success_)", + selector: "0x2f2ff15d", }, { - name: "getClearingCountForByPartition", - signature: "getClearingCountForByPartition(bytes32,address,ClearingOperationType)", - selector: "0xe62b11d9", + name: "hasRole", + signature: "function hasRole(bytes32 _role, address _account) view returns (bool)", + selector: "0x91d14854", }, { - name: "getClearingsIdForByPartition", - signature: "getClearingsIdForByPartition(bytes32,address,ClearingOperationType,uint256,uint256)", - selector: "0x88cab4f2", + name: "renounceRole", + signature: "function renounceRole(bytes32 _role) returns (bool success_)", + selector: "0x8bb9c5bf", }, { - name: "getClearingThirdParty", - signature: "getClearingThirdParty(bytes32,address,ClearingOperationType,uint256)", - selector: "0x6a452e1d", + name: "revokeRole", + signature: "function revokeRole(bytes32 _role, address _account) returns (bool success_)", + selector: "0xd547741f", }, ], - factory: (signer, useTimeTravel = false) => - useTimeTravel ? new ClearingReadFacetTimeTravel__factory(signer) : new ClearingReadFacet__factory(signer), - }, - - ClearingRedeemFacet: { - name: "ClearingRedeemFacet", - resolverKey: { - name: "_CLEARING_REDEEM_RESOLVER_KEY", - value: "0xb341e7aa749da43976c189209de51ccdf838af9f964cd27340b914d5b2aeba97", - }, - inheritance: ["ClearingRedeem", "IStaticFunctionSelectors"], - methods: [ + events: [ { - name: "clearingRedeemByPartition", - signature: "clearingRedeemByPartition(ClearingOperation,uint256)", - selector: "0x6fd29928", + name: "RoleGranted", + signature: "RoleGranted(address,address,bytes32)", + topic0: "0x03b5d550f3da9dfe316fa35cbecc4cee6d2febeaeee1432f30504bd9ce3780a8", }, { - name: "clearingRedeemFromByPartition", - signature: "clearingRedeemFromByPartition(ClearingOperationFrom,uint256)", - selector: "0x695c46eb", + name: "RoleRenounced", + signature: "RoleRenounced(address,bytes32)", + topic0: "0x77aa8a1aed5eadc41a8f14bcf15358ebcf49ff5263b7887e215b4b3915a10a8f", }, { - name: "getClearingRedeemForByPartition", - signature: "getClearingRedeemForByPartition(bytes32,address,uint256)", - selector: "0x4ac3d940", + name: "RoleRevoked", + signature: "RoleRevoked(address,address,bytes32)", + topic0: "0xd1c3e214f7584ab57912c23f3cead20e310547c9823c8bc891ba162e35622734", }, { - name: "operatorClearingRedeemByPartition", - signature: "operatorClearingRedeemByPartition(ClearingOperationFrom,uint256)", - selector: "0xf5d203e9", + name: "RolesApplied", + signature: "RolesApplied(bytes32[],bool[],address)", + topic0: "0x4267fc5085e309828a2ec01d2d3a5ad76fa27eee7beada466b9cd88872fea422", }, + ], + errors: [ + { name: "AccountAssignedToRole", signature: "AccountAssignedToRole(bytes32,address)", selector: "0xa6006e94" }, { - name: "protectedClearingRedeemByPartition", - signature: "protectedClearingRedeemByPartition(ProtectedClearingOperation,uint256,bytes)", - selector: "0x33826bc1", + name: "AccountNotAssignedToRole", + signature: "AccountNotAssignedToRole(bytes32,address)", + selector: "0x3ad9a7ae", }, + { name: "ExpirationNotReached", signature: "ExpirationNotReached()", selector: "0x92899bcd" }, + { name: "InterestRateIsKpiLinked", signature: "InterestRateIsKpiLinked()", selector: "0x68eba14f" }, + { name: "RolesNotApplied", signature: "RolesNotApplied(bytes32[],bool[],address)", selector: "0xaa4b6234" }, ], factory: (signer, useTimeTravel = false) => - useTimeTravel ? new ClearingRedeemFacetTimeTravel__factory(signer) : new ClearingRedeemFacet__factory(signer), + useTimeTravel + ? new AccessControlKpiLinkedRateFacetTimeTravel__factory(signer) + : new AccessControlKpiLinkedRateFacet__factory(signer), }, - ClearingTransferFacet: { - name: "ClearingTransferFacet", + AccessControlSustainabilityPerformanceTargetRateFacet: { + name: "AccessControlSustainabilityPerformanceTargetRateFacet", resolverKey: { - name: "_CLEARING_TRANSFER_RESOLVER_KEY", - value: "0x7399d03db62430bec60ca2c3eacf98b1b7e2253f17593ef7a226d759442e0928", + name: "_ACCESS_CONTROL_SUSTAINABILITY_PERFORMANCE_TARGET_RATE_RESOLVER_KEY", + value: "0x9d13e61abd630355ccae4279993868d7cf3b04d4368a0fedcefe6fec3fabaa0c", }, - inheritance: ["ClearingTransfer", "IStaticFunctionSelectors"], + inheritance: ["AccessControlFacetBase", "CommonSustainabilityPerformanceTargetInterestRate"], methods: [ { - name: "clearingTransferByPartition", - signature: "clearingTransferByPartition(ClearingOperation,uint256,address)", - selector: "0x104fad9b", + name: "applyRoles", + signature: "function applyRoles(bytes32[] _roles, bool[] _actives, address _account) returns (bool success_)", + selector: "0xfcfffeec", }, { - name: "clearingTransferFromByPartition", - signature: "clearingTransferFromByPartition(ClearingOperationFrom,uint256,address)", - selector: "0x8aaad9e1", + name: "getRoleCountFor", + signature: "function getRoleCountFor(address _account) view returns (uint256 roleCount_)", + selector: "0x8fa9b4fe", }, { - name: "getClearingTransferForByPartition", - signature: "getClearingTransferForByPartition(bytes32,address,uint256)", - selector: "0x6f438552", + name: "getRoleMemberCount", + signature: "function getRoleMemberCount(bytes32 _role) view returns (uint256 memberCount_)", + selector: "0xca15c873", }, { - name: "operatorClearingTransferByPartition", - signature: "operatorClearingTransferByPartition(ClearingOperationFrom,uint256,address)", - selector: "0xb403da58", + name: "getRoleMembers", + signature: + "function getRoleMembers(bytes32 _role, uint256 _pageIndex, uint256 _pageLength) view returns (address[] members_)", + selector: "0x2a861f57", }, { - name: "protectedClearingTransferByPartition", - signature: "protectedClearingTransferByPartition(ProtectedClearingOperation,uint256,address,bytes)", - selector: "0x1b4edef0", + name: "getRolesFor", + signature: + "function getRolesFor(address _account, uint256 _pageIndex, uint256 _pageLength) view returns (bytes32[] roles_)", + selector: "0xa28cf9a9", }, - ], - factory: (signer, useTimeTravel = false) => - useTimeTravel ? new ClearingTransferFacetTimeTravel__factory(signer) : new ClearingTransferFacet__factory(signer), - }, - - ControlListFacet: { - name: "ControlListFacet", - resolverKey: { - name: "_CONTROL_LIST_RESOLVER_KEY", - value: "0xfbb1491bfcecd95f79409bd5a4b69a4ba1e5573573372f5d2d66c11e3016414c", - }, - inheritance: ["ControlList", "IStaticFunctionSelectors"], - methods: [ - { name: "addToControlList", signature: "addToControlList(address)", selector: "0xe8204966" }, - { name: "getControlListCount", signature: "getControlListCount()", selector: "0x6b5d2ea5" }, - { name: "getControlListMembers", signature: "getControlListMembers(uint256,uint256)", selector: "0xcad7e56b" }, - { name: "getControlListType", signature: "getControlListType()", selector: "0x1d46c292" }, - { name: "initialize_ControlList", signature: "initialize_ControlList(bool)", selector: "0xf88bd9f2" }, - { name: "isInControlList", signature: "isInControlList(address)", selector: "0xfd5b071b" }, - { name: "removeFromControlList", signature: "removeFromControlList(address)", selector: "0x47b52d3b" }, - ], - events: [ { - name: "AddedToControlList", - signature: "AddedToControlList(address,address)", - topic0: "0x5af5dacbf5ee5519e494e4ef1304293dfca9b64fc96860222581d0524c5a5621", + name: "grantRole", + signature: "function grantRole(bytes32 _role, address _account) returns (bool success_)", + selector: "0x2f2ff15d", }, { - name: "RemovedFromControlList", - signature: "RemovedFromControlList(address,address)", - topic0: "0x745acaacce1108849ac3b5a8667c1fd5044b5515e7d7507952493ba6a1b96d37", + name: "hasRole", + signature: "function hasRole(bytes32 _role, address _account) view returns (bool)", + selector: "0x91d14854", }, - ], - errors: [ - { name: "ListedAccount", signature: "ListedAccount(address)", selector: "0x1a4a04ba" }, - { name: "UnlistedAccount", signature: "UnlistedAccount(address)", selector: "0x4c463ddc" }, - ], - factory: (signer, useTimeTravel = false) => - useTimeTravel ? new ControlListFacetTimeTravel__factory(signer) : new ControlListFacet__factory(signer), - }, - - CorporateActionsFacet: { - name: "CorporateActionsFacet", - resolverKey: { - name: "_CORPORATE_ACTIONS_RESOLVER_KEY", - value: "0x3cc74200ccfb5d585a6d170f8824979dbf1b592e0a41eef41cf6d86cf4882077", - }, - inheritance: ["CorporateActions", "IStaticFunctionSelectors"], - methods: [ - { name: "addCorporateAction", signature: "addCorporateAction(bytes32,bytes)", selector: "0xd9e4d92c" }, - { name: "getCorporateAction", signature: "getCorporateAction(bytes32)", selector: "0x911181da" }, - { name: "getCorporateActionCount", signature: "getCorporateActionCount()", selector: "0x8859794c" }, { - name: "getCorporateActionCountByType", - signature: "getCorporateActionCountByType(bytes32)", - selector: "0x539b4e0b", + name: "renounceRole", + signature: "function renounceRole(bytes32 _role) returns (bool success_)", + selector: "0x8bb9c5bf", }, - { name: "getCorporateActionIds", signature: "getCorporateActionIds(uint256,uint256)", selector: "0x1b56ea1e" }, { - name: "getCorporateActionIdsByType", - signature: "getCorporateActionIdsByType(bytes32,uint256,uint256)", - selector: "0xe73bbddb", + name: "revokeRole", + signature: "function revokeRole(bytes32 _role, address _account) returns (bool success_)", + selector: "0xd547741f", }, ], events: [ { - name: "CorporateActionAdded", - signature: "CorporateActionAdded(address,bytes32,bytes32,uint256,bytes)", - topic0: "0x5874a7cfb402f641e9d5e7fe4da2993095f1d4d397e7291daa27fd6c29dd3f1a", + name: "RoleGranted", + signature: "RoleGranted(address,address,bytes32)", + topic0: "0x03b5d550f3da9dfe316fa35cbecc4cee6d2febeaeee1432f30504bd9ce3780a8", }, - ], - errors: [ { - name: "DuplicatedCorporateAction", - signature: "DuplicatedCorporateAction(bytes32,bytes)", - selector: "0x3266e9e3", - }, - ], - factory: (signer, useTimeTravel = false) => - useTimeTravel ? new CorporateActionsFacetTimeTravel__factory(signer) : new CorporateActionsFacet__factory(signer), - }, - - DiamondCutFacet: { - name: "DiamondCutFacet", - resolverKey: { - name: "_DIAMOND_CUT_RESOLVER_KEY", - value: "0xb66fc45b2670ed2c4ce03061121e6c8e53bce06e161f95afad8e57671b64fca8", - }, - inheritance: ["IDiamondCut", "ResolverProxyUnstructured"], - methods: [ - { name: "getConfigInfo", signature: "getConfigInfo()", selector: "0x78a1bf05" }, - { name: "updateConfig", signature: "updateConfig(bytes32,uint256)", selector: "0x0b3bad61" }, - { name: "updateConfigVersion", signature: "updateConfigVersion(uint256)", selector: "0x002eeb22" }, - { - name: "updateResolver", - signature: "updateResolver(IBusinessLogicResolver,bytes32,uint256)", - selector: "0x9ed84e40", - }, - ], - events: [ - { - name: "PartitionsProtected", - signature: "PartitionsProtected(address)", - topic0: "0x990fbe2c0a8b93cc7974d7ab6416266441112d61fa0989af94a79de43dda48ff", + name: "RoleRenounced", + signature: "RoleRenounced(address,bytes32)", + topic0: "0x77aa8a1aed5eadc41a8f14bcf15358ebcf49ff5263b7887e215b4b3915a10a8f", }, { - name: "PartitionsUnProtected", - signature: "PartitionsUnProtected(address)", - topic0: "0xd556aabec0a33d5b3b9b8c739af1745b14ba2abecc20c3c080fd4ac6143e8525", + name: "RoleRevoked", + signature: "RoleRevoked(address,address,bytes32)", + topic0: "0xd1c3e214f7584ab57912c23f3cead20e310547c9823c8bc891ba162e35622734", }, { - name: "ProtectedRedeemFrom", - signature: "ProtectedRedeemFrom(bytes32,address,address,uint256,uint256,uint256,bytes)", - topic0: "0xac2a7d7fcbf24c034d113f94d7ccf1df23cb94932becc61aa96ab060df6f101b", + name: "RolesApplied", + signature: "RolesApplied(bytes32[],bool[],address)", + topic0: "0x4267fc5085e309828a2ec01d2d3a5ad76fa27eee7beada466b9cd88872fea422", }, + ], + errors: [ + { name: "AccountAssignedToRole", signature: "AccountAssignedToRole(bytes32,address)", selector: "0xa6006e94" }, { - name: "ProtectedTransferFrom", - signature: "ProtectedTransferFrom(bytes32,address,address,address,uint256,uint256,uint256,bytes)", - topic0: "0x2abbd5300acea8488bc2d0777cfb860f38dee76badd52ff8b36d3dec0f5fdb6c", + name: "AccountNotAssignedToRole", + signature: "AccountNotAssignedToRole(bytes32,address)", + selector: "0x3ad9a7ae", }, + { name: "ExpirationNotReached", signature: "ExpirationNotReached()", selector: "0x92899bcd" }, { - name: "RoleAdminChanged", - signature: "RoleAdminChanged(bytes32,bytes32,bytes32)", - topic0: "0xbd79b86ffe0ab8e8776151514217cd7cacd52c909f66475c3af44e129f0b00ff", + name: "InterestRateIsSustainabilityPerformanceTarget", + signature: "InterestRateIsSustainabilityPerformanceTarget()", + selector: "0x15a15b0a", }, + { name: "RolesNotApplied", signature: "RolesNotApplied(bytes32[],bool[],address)", selector: "0xaa4b6234" }, + ], + factory: (signer, useTimeTravel = false) => + useTimeTravel + ? new AccessControlSustainabilityPerformanceTargetRateFacetTimeTravel__factory(signer) + : new AccessControlSustainabilityPerformanceTargetRateFacet__factory(signer), + }, + + AdjustBalancesFacet: { + name: "AdjustBalancesFacet", + resolverKey: { + name: "_BALANCE_ADJUSTMENTS_RESOLVER_KEY", + value: "0x2bbe9fb018f1e7dd12b4442154e7fdfd75aec7b0a65d07debf49de4ece5fe8b8", + }, + inheritance: ["AdjustBalancesFacetBase", "Common"], + methods: [ { - name: "TokenPaused", - signature: "TokenPaused(address)", - topic0: "0xf017c0de579727a3cd3ee18077ee8b4c43bf21892985952d1d5a0d52f983502d", + name: "adjustBalances", + signature: "function adjustBalances(uint256 factor, uint8 decimals) returns (bool success_)", + selector: "0xe2d77e44", }, + ], + errors: [{ name: "ExpirationNotReached", signature: "ExpirationNotReached()", selector: "0x92899bcd" }], + factory: (signer, useTimeTravel = false) => + useTimeTravel ? new AdjustBalancesFacetTimeTravel__factory(signer) : new AdjustBalancesFacet__factory(signer), + }, + + AdjustBalancesFixedRateFacet: { + name: "AdjustBalancesFixedRateFacet", + resolverKey: { + name: "_BALANCE_ADJUSTMENTS_FIXED_RATE_RESOLVER_KEY", + value: "0xa7e8f6d5c4b3a2e1f9d8c7b6a5e4f3d2c1b9a8e7f6d5c4b3a2e1f9d8c7b6a5e4", + }, + inheritance: ["AdjustBalancesFacetBase", "CommonFixedInterestRate"], + methods: [ { - name: "TokenUnpaused", - signature: "TokenUnpaused(address)", - topic0: "0xf38578ed892ce2ce655ca8ae03c73464ad74915a1331a9b4085e637534daeedf", + name: "adjustBalances", + signature: "function adjustBalances(uint256 factor, uint8 decimals) returns (bool success_)", + selector: "0xe2d77e44", }, ], errors: [ - { name: "AccountHasNoRole", signature: "AccountHasNoRole(address,bytes32)", selector: "0xa1180aad" }, - { name: "AccountHasNoRoles", signature: "AccountHasNoRoles(address,bytes32[])", selector: "0x90e55392" }, - { name: "AccountIsBlocked", signature: "AccountIsBlocked(address)", selector: "0x796c1f0d" }, - { - name: "AllBusinessLogicKeysMustBeenInformed", - signature: "AllBusinessLogicKeysMustBeenInformed()", - selector: "0x7d1960b7", - }, - { name: "BusinessLogicKeyDuplicated", signature: "BusinessLogicKeyDuplicated(bytes32)", selector: "0x193c9b12" }, - { name: "BusinessLogicNotActive", signature: "BusinessLogicNotActive(bytes32)", selector: "0x4649536d" }, - { - name: "BusinessLogicVersionDoesNotExist", - signature: "BusinessLogicVersionDoesNotExist(uint256)", - selector: "0x0f5ce4d0", - }, { name: "ExpirationNotReached", signature: "ExpirationNotReached()", selector: "0x92899bcd" }, + { name: "InterestRateIsFixed", signature: "InterestRateIsFixed()", selector: "0x849d4eb8" }, + ], + factory: (signer, useTimeTravel = false) => + useTimeTravel + ? new AdjustBalancesFixedRateFacetTimeTravel__factory(signer) + : new AdjustBalancesFixedRateFacet__factory(signer), + }, + + AdjustBalancesKpiLinkedRateFacet: { + name: "AdjustBalancesKpiLinkedRateFacet", + resolverKey: { + name: "_BALANCE_ADJUSTMENTS_KPI_LINKED_RATE_RESOLVER_KEY", + value: "0xb8f9e7d6c5b4a3e2f1d9c8b7a6e5f4d3c2b1a9e8f7d6c5b4a3e2f1d9c8b7a6e5", + }, + inheritance: ["AdjustBalancesFacetBase", "CommonKpiLinkedInterestRate"], + methods: [ { - name: "PartitionsAreProtectedAndNoRole", - signature: "PartitionsAreProtectedAndNoRole(address,bytes32)", - selector: "0x55347310", + name: "adjustBalances", + signature: "function adjustBalances(uint256 factor, uint8 decimals) returns (bool success_)", + selector: "0xe2d77e44", }, - { name: "PartitionsAreUnProtected", signature: "PartitionsAreUnProtected()", selector: "0x05681565" }, + ], + errors: [ + { name: "ExpirationNotReached", signature: "ExpirationNotReached()", selector: "0x92899bcd" }, + { name: "InterestRateIsKpiLinked", signature: "InterestRateIsKpiLinked()", selector: "0x68eba14f" }, + ], + factory: (signer, useTimeTravel = false) => + useTimeTravel + ? new AdjustBalancesKpiLinkedRateFacetTimeTravel__factory(signer) + : new AdjustBalancesKpiLinkedRateFacet__factory(signer), + }, + + AdjustBalancesSustainabilityPerformanceTargetRateFacet: { + name: "AdjustBalancesSustainabilityPerformanceTargetRateFacet", + resolverKey: { + name: "_BALANCE_ADJUSTMENTS_SUSTAINABILITY_PERFORMANCE_TARGET_RATE_RESOLVER_KEY", + value: "0xc9e1f8d7c6b5a4e3f2d1c9b8a7e6f5d4c3b2a1e9f8d7c6b5a4e3f2d1c9b8a7e6", + }, + inheritance: ["AdjustBalancesFacetBase", "CommonSustainabilityPerformanceTargetInterestRate"], + methods: [ { - name: "RolesAndActivesLengthMismatch", - signature: "RolesAndActivesLengthMismatch(uint256,uint256)", - selector: "0x365ff1a4", + name: "adjustBalances", + signature: "function adjustBalances(uint256 factor, uint8 decimals) returns (bool success_)", + selector: "0xe2d77e44", }, - { name: "TokenIsPaused", signature: "TokenIsPaused()", selector: "0x649815a5" }, - { name: "TokenIsUnpaused", signature: "TokenIsUnpaused()", selector: "0x72058d69" }, - { name: "WrongSignature", signature: "WrongSignature()", selector: "0x356a4418" }, + ], + errors: [ + { name: "ExpirationNotReached", signature: "ExpirationNotReached()", selector: "0x92899bcd" }, { - name: "ZeroKeyNotValidForBusinessLogic", - signature: "ZeroKeyNotValidForBusinessLogic()", - selector: "0x7da728b1", + name: "InterestRateIsSustainabilityPerformanceTarget", + signature: "InterestRateIsSustainabilityPerformanceTarget()", + selector: "0x15a15b0a", }, ], factory: (signer, useTimeTravel = false) => - useTimeTravel ? new DiamondCutFacetTimeTravel__factory(signer) : new DiamondCutFacet__factory(signer), + useTimeTravel + ? new AdjustBalancesSustainabilityPerformanceTargetRateFacetTimeTravel__factory(signer) + : new AdjustBalancesSustainabilityPerformanceTargetRateFacet__factory(signer), }, - DiamondFacet: { - name: "DiamondFacet", + BondUSAFacet: { + name: "BondUSAFacet", resolverKey: { - name: "_DIAMOND_RESOLVER_KEY", - value: "0x1b5212ea37fb29e99afa2812a5d7d7e662a477424d3de1a18cc3871a2ee94d78", + name: "_BOND_VARIABLE_RATE_RESOLVER_KEY", + value: "0xe6594ee8f54f346ab25268fdc7955031a6b06102355e1446353d89ab1d593de3", }, - inheritance: ["IDiamond", "DiamondCutFacet", "DiamondLoupeFacet"], + inheritance: ["BondUSAFacetBase", "Common"], methods: [ - { name: "getConfigInfo", signature: "getConfigInfo()", selector: "0x78a1bf05" }, - { name: "getFacet", signature: "getFacet(bytes32)", selector: "0xe317d12f" }, - { name: "getFacetAddress", signature: "getFacetAddress(bytes4)", selector: "0x7a070c2d" }, - { name: "getFacetAddresses", signature: "getFacetAddresses()", selector: "0x3bed2f49" }, { - name: "getFacetAddressesByPage", - signature: "getFacetAddressesByPage(uint256,uint256)", - selector: "0x9fea53e7", + name: "_initialize_bondUSA", + signature: + "function _initialize_bondUSA(tuple(bytes3 currency, uint256 nominalValue, uint8 nominalValueDecimals, uint256 startingDate, uint256 maturityDate) _bondDetailsData, tuple(uint8 regulationType, uint8 regulationSubType, uint256 dealSize, uint8 accreditedInvestors, uint256 maxNonAccreditedInvestors, uint8 manualInvestorVerification, uint8 internationalInvestors, uint8 resaleHoldPeriod) _regulationData, tuple(bool countriesControlListType, string listOfCountries, string info) _additionalSecurityData)", + selector: "0x86d59729", }, - { name: "getFacetIdBySelector", signature: "getFacetIdBySelector(bytes4)", selector: "0xb3fd6894" }, - { name: "getFacetIds", signature: "getFacetIds()", selector: "0xcd25d535" }, - { name: "getFacetIdsByPage", signature: "getFacetIdsByPage(uint256,uint256)", selector: "0x20202e6d" }, - { name: "getFacets", signature: "getFacets()", selector: "0x662ea47d" }, - { name: "getFacetsByPage", signature: "getFacetsByPage(uint256,uint256)", selector: "0xbf02c5b9" }, - { name: "getFacetSelectors", signature: "getFacetSelectors(bytes32)", selector: "0x8214de3e" }, { - name: "getFacetSelectorsByPage", - signature: "getFacetSelectorsByPage(bytes32,uint256,uint256)", - selector: "0x39a9e956", + name: "fullRedeemAtMaturity", + signature: "function fullRedeemAtMaturity(address _tokenHolder)", + selector: "0xd0db5fb2", }, - { name: "getFacetSelectorsLength", signature: "getFacetSelectorsLength(bytes32)", selector: "0xca1f70ec" }, - { name: "getFacetsLength", signature: "getFacetsLength()", selector: "0x430720f9" }, - { name: "supportsInterface", signature: "supportsInterface(bytes4)", selector: "0x01ffc9a7" }, - { name: "updateConfig", signature: "updateConfig(bytes32,uint256)", selector: "0x0b3bad61" }, - { name: "updateConfigVersion", signature: "updateConfigVersion(uint256)", selector: "0x002eeb22" }, { - name: "updateResolver", - signature: "updateResolver(IBusinessLogicResolver,bytes32,uint256)", - selector: "0x9ed84e40", + name: "redeemAtMaturityByPartition", + signature: "function redeemAtMaturityByPartition(address _tokenHolder, bytes32 _partition, uint256 _amount)", + selector: "0x8a647211", + }, + { + name: "setCoupon", + signature: + "function setCoupon(tuple(uint256 recordDate, uint256 executionDate, uint256 startDate, uint256 endDate, uint256 fixingDate, uint256 rate, uint8 rateDecimals, uint8 rateStatus) _newCoupon) returns (uint256 couponID_)", + selector: "0xb16fd0cc", + }, + { + name: "updateMaturityDate", + signature: "function updateMaturityDate(uint256 _newMaturityDate) returns (bool success_)", + selector: "0xc7a6ca35", }, ], events: [ { - name: "PartitionsProtected", - signature: "PartitionsProtected(address)", - topic0: "0x990fbe2c0a8b93cc7974d7ab6416266441112d61fa0989af94a79de43dda48ff", + name: "MaturityDateUpdated", + signature: "MaturityDateUpdated(address,uint256,uint256)", + topic0: "0x2e73bd0100c5816065f3ccb1e56ff5a3c5fefe2ee0ea490cc32c50004d59ff6f", }, + ], + errors: [{ name: "ExpirationNotReached", signature: "ExpirationNotReached()", selector: "0x92899bcd" }], + factory: (signer, useTimeTravel = false) => + useTimeTravel ? new BondUSAFacetTimeTravel__factory(signer) : new BondUSAFacet__factory(signer), + }, + + BondUSAFixedRateFacet: { + name: "BondUSAFixedRateFacet", + resolverKey: { + name: "_BOND_FIXED_RATE_RESOLVER_KEY", + value: "0xd55d8787d23b78e70dada1ade45b8758f5c027e2cddf3556606c07d388ce159a", + }, + inheritance: ["BondUSAFacetBase", "CommonFixedInterestRate"], + methods: [ { - name: "PartitionsUnProtected", - signature: "PartitionsUnProtected(address)", - topic0: "0xd556aabec0a33d5b3b9b8c739af1745b14ba2abecc20c3c080fd4ac6143e8525", + name: "_initialize_bondUSA", + signature: + "function _initialize_bondUSA(tuple(bytes3 currency, uint256 nominalValue, uint8 nominalValueDecimals, uint256 startingDate, uint256 maturityDate) _bondDetailsData, tuple(uint8 regulationType, uint8 regulationSubType, uint256 dealSize, uint8 accreditedInvestors, uint256 maxNonAccreditedInvestors, uint8 manualInvestorVerification, uint8 internationalInvestors, uint8 resaleHoldPeriod) _regulationData, tuple(bool countriesControlListType, string listOfCountries, string info) _additionalSecurityData)", + selector: "0x86d59729", }, { - name: "ProtectedRedeemFrom", - signature: "ProtectedRedeemFrom(bytes32,address,address,uint256,uint256,uint256,bytes)", - topic0: "0xac2a7d7fcbf24c034d113f94d7ccf1df23cb94932becc61aa96ab060df6f101b", + name: "fullRedeemAtMaturity", + signature: "function fullRedeemAtMaturity(address _tokenHolder)", + selector: "0xd0db5fb2", }, { - name: "ProtectedTransferFrom", - signature: "ProtectedTransferFrom(bytes32,address,address,address,uint256,uint256,uint256,bytes)", - topic0: "0x2abbd5300acea8488bc2d0777cfb860f38dee76badd52ff8b36d3dec0f5fdb6c", + name: "redeemAtMaturityByPartition", + signature: "function redeemAtMaturityByPartition(address _tokenHolder, bytes32 _partition, uint256 _amount)", + selector: "0x8a647211", }, { - name: "RoleAdminChanged", - signature: "RoleAdminChanged(bytes32,bytes32,bytes32)", - topic0: "0xbd79b86ffe0ab8e8776151514217cd7cacd52c909f66475c3af44e129f0b00ff", + name: "setCoupon", + signature: + "function setCoupon(tuple(uint256 recordDate, uint256 executionDate, uint256 startDate, uint256 endDate, uint256 fixingDate, uint256 rate, uint8 rateDecimals, uint8 rateStatus) _newCoupon) returns (uint256 couponID_)", + selector: "0xb16fd0cc", }, { - name: "TokenPaused", - signature: "TokenPaused(address)", - topic0: "0xf017c0de579727a3cd3ee18077ee8b4c43bf21892985952d1d5a0d52f983502d", + name: "updateMaturityDate", + signature: "function updateMaturityDate(uint256 _newMaturityDate) returns (bool success_)", + selector: "0xc7a6ca35", }, + ], + events: [ { - name: "TokenUnpaused", - signature: "TokenUnpaused(address)", - topic0: "0xf38578ed892ce2ce655ca8ae03c73464ad74915a1331a9b4085e637534daeedf", + name: "MaturityDateUpdated", + signature: "MaturityDateUpdated(address,uint256,uint256)", + topic0: "0x2e73bd0100c5816065f3ccb1e56ff5a3c5fefe2ee0ea490cc32c50004d59ff6f", }, ], errors: [ - { name: "AccountHasNoRole", signature: "AccountHasNoRole(address,bytes32)", selector: "0xa1180aad" }, - { name: "AccountHasNoRoles", signature: "AccountHasNoRoles(address,bytes32[])", selector: "0x90e55392" }, - { name: "AccountIsBlocked", signature: "AccountIsBlocked(address)", selector: "0x796c1f0d" }, + { name: "ExpirationNotReached", signature: "ExpirationNotReached()", selector: "0x92899bcd" }, + { name: "InterestRateIsFixed", signature: "InterestRateIsFixed()", selector: "0x849d4eb8" }, + ], + factory: (signer, useTimeTravel = false) => + useTimeTravel ? new BondUSAFixedRateFacetTimeTravel__factory(signer) : new BondUSAFixedRateFacet__factory(signer), + }, + + BondUSAKpiLinkedRateFacet: { + name: "BondUSAKpiLinkedRateFacet", + resolverKey: { + name: "_BOND_KPI_LINKED_RATE_RESOLVER_KEY", + value: "0x99c145ff21354eb7b25cb096873143fa3d3aba98457b96bcd13f1d1f2b9bf28c", + }, + inheritance: ["BondUSAFacetBase", "CommonKpiLinkedInterestRate"], + methods: [ { - name: "AllBusinessLogicKeysMustBeenInformed", - signature: "AllBusinessLogicKeysMustBeenInformed()", - selector: "0x7d1960b7", + name: "_initialize_bondUSA", + signature: + "function _initialize_bondUSA(tuple(bytes3 currency, uint256 nominalValue, uint8 nominalValueDecimals, uint256 startingDate, uint256 maturityDate) _bondDetailsData, tuple(uint8 regulationType, uint8 regulationSubType, uint256 dealSize, uint8 accreditedInvestors, uint256 maxNonAccreditedInvestors, uint8 manualInvestorVerification, uint8 internationalInvestors, uint8 resaleHoldPeriod) _regulationData, tuple(bool countriesControlListType, string listOfCountries, string info) _additionalSecurityData)", + selector: "0x86d59729", }, - { name: "BusinessLogicKeyDuplicated", signature: "BusinessLogicKeyDuplicated(bytes32)", selector: "0x193c9b12" }, - { name: "BusinessLogicNotActive", signature: "BusinessLogicNotActive(bytes32)", selector: "0x4649536d" }, { - name: "BusinessLogicVersionDoesNotExist", - signature: "BusinessLogicVersionDoesNotExist(uint256)", - selector: "0x0f5ce4d0", + name: "fullRedeemAtMaturity", + signature: "function fullRedeemAtMaturity(address _tokenHolder)", + selector: "0xd0db5fb2", }, - { name: "ExpirationNotReached", signature: "ExpirationNotReached()", selector: "0x92899bcd" }, { - name: "PartitionsAreProtectedAndNoRole", - signature: "PartitionsAreProtectedAndNoRole(address,bytes32)", - selector: "0x55347310", + name: "redeemAtMaturityByPartition", + signature: "function redeemAtMaturityByPartition(address _tokenHolder, bytes32 _partition, uint256 _amount)", + selector: "0x8a647211", }, - { name: "PartitionsAreUnProtected", signature: "PartitionsAreUnProtected()", selector: "0x05681565" }, { - name: "RolesAndActivesLengthMismatch", - signature: "RolesAndActivesLengthMismatch(uint256,uint256)", - selector: "0x365ff1a4", + name: "setCoupon", + signature: + "function setCoupon(tuple(uint256 recordDate, uint256 executionDate, uint256 startDate, uint256 endDate, uint256 fixingDate, uint256 rate, uint8 rateDecimals, uint8 rateStatus) _newCoupon) returns (uint256 couponID_)", + selector: "0xb16fd0cc", }, - { name: "TokenIsPaused", signature: "TokenIsPaused()", selector: "0x649815a5" }, - { name: "TokenIsUnpaused", signature: "TokenIsUnpaused()", selector: "0x72058d69" }, - { name: "WrongSignature", signature: "WrongSignature()", selector: "0x356a4418" }, { - name: "ZeroKeyNotValidForBusinessLogic", - signature: "ZeroKeyNotValidForBusinessLogic()", - selector: "0x7da728b1", + name: "updateMaturityDate", + signature: "function updateMaturityDate(uint256 _newMaturityDate) returns (bool success_)", + selector: "0xc7a6ca35", + }, + ], + events: [ + { + name: "MaturityDateUpdated", + signature: "MaturityDateUpdated(address,uint256,uint256)", + topic0: "0x2e73bd0100c5816065f3ccb1e56ff5a3c5fefe2ee0ea490cc32c50004d59ff6f", }, ], + errors: [ + { name: "ExpirationNotReached", signature: "ExpirationNotReached()", selector: "0x92899bcd" }, + { name: "InterestRateIsKpiLinked", signature: "InterestRateIsKpiLinked()", selector: "0x68eba14f" }, + ], factory: (signer, useTimeTravel = false) => - useTimeTravel ? new DiamondFacetTimeTravel__factory(signer) : new DiamondFacet__factory(signer), + useTimeTravel + ? new BondUSAKpiLinkedRateFacetTimeTravel__factory(signer) + : new BondUSAKpiLinkedRateFacet__factory(signer), }, - DiamondLoupeFacet: { - name: "DiamondLoupeFacet", + BondUSAReadFacet: { + name: "BondUSAReadFacet", resolverKey: { - name: "_DIAMOND_LOUPE_RESOLVER_KEY", - value: "0x086a1dd0b9bfa39267d1de30445a8edeb3a1f50c8a0a82c91f9dee3608e83567", + name: "_BOND_VARIABLE_READ_RESOLVER_KEY", + value: "0x624866e79d4c0a78a8dc32cbce49563cdf86eba627bd05a9821dbaa1674ac231", }, - inheritance: ["IDiamondLoupe", "IERC165", "ResolverProxyUnstructured"], + inheritance: ["BondUSAReadFacetBase", "Common"], methods: [ - { name: "getFacet", signature: "getFacet(bytes32)", selector: "0xe317d12f" }, - { name: "getFacetAddress", signature: "getFacetAddress(bytes4)", selector: "0x7a070c2d" }, - { name: "getFacetAddresses", signature: "getFacetAddresses()", selector: "0x3bed2f49" }, { - name: "getFacetAddressesByPage", - signature: "getFacetAddressesByPage(uint256,uint256)", - selector: "0x9fea53e7", + name: "getBondDetails", + signature: + "function getBondDetails() view returns (tuple(bytes3 currency, uint256 nominalValue, uint8 nominalValueDecimals, uint256 startingDate, uint256 maturityDate) bondDetailsData_)", + selector: "0x4ce02414", }, - { name: "getFacetIdBySelector", signature: "getFacetIdBySelector(bytes4)", selector: "0xb3fd6894" }, - { name: "getFacetIds", signature: "getFacetIds()", selector: "0xcd25d535" }, - { name: "getFacetIdsByPage", signature: "getFacetIdsByPage(uint256,uint256)", selector: "0x20202e6d" }, - { name: "getFacets", signature: "getFacets()", selector: "0x662ea47d" }, - { name: "getFacetsByPage", signature: "getFacetsByPage(uint256,uint256)", selector: "0xbf02c5b9" }, - { name: "getFacetSelectors", signature: "getFacetSelectors(bytes32)", selector: "0x8214de3e" }, { - name: "getFacetSelectorsByPage", - signature: "getFacetSelectorsByPage(bytes32,uint256,uint256)", - selector: "0x39a9e956", + name: "getCoupon", + signature: + "function getCoupon(uint256 _couponID) view returns (tuple(tuple(uint256 recordDate, uint256 executionDate, uint256 startDate, uint256 endDate, uint256 fixingDate, uint256 rate, uint8 rateDecimals, uint8 rateStatus) coupon, uint256 snapshotId) registeredCoupon_)", + selector: "0x936e3169", }, - { name: "getFacetSelectorsLength", signature: "getFacetSelectorsLength(bytes32)", selector: "0xca1f70ec" }, - { name: "getFacetsLength", signature: "getFacetsLength()", selector: "0x430720f9" }, - { name: "supportsInterface", signature: "supportsInterface(bytes4)", selector: "0x01ffc9a7" }, - ], - events: [ { - name: "PartitionsProtected", - signature: "PartitionsProtected(address)", - topic0: "0x990fbe2c0a8b93cc7974d7ab6416266441112d61fa0989af94a79de43dda48ff", + name: "getCouponAmountFor", + signature: + "function getCouponAmountFor(uint256 _couponID, address _account) view returns (tuple(uint256 numerator, uint256 denominator, bool recordDateReached) couponAmountFor_)", + selector: "0x439efc2e", }, { - name: "PartitionsUnProtected", - signature: "PartitionsUnProtected(address)", - topic0: "0xd556aabec0a33d5b3b9b8c739af1745b14ba2abecc20c3c080fd4ac6143e8525", + name: "getCouponCount", + signature: "function getCouponCount() view returns (uint256 couponCount_)", + selector: "0x468bb240", }, { - name: "ProtectedRedeemFrom", - signature: "ProtectedRedeemFrom(bytes32,address,address,uint256,uint256,uint256,bytes)", - topic0: "0xac2a7d7fcbf24c034d113f94d7ccf1df23cb94932becc61aa96ab060df6f101b", + name: "getCouponFor", + signature: + "function getCouponFor(uint256 _couponID, address _account) view returns (tuple(uint256 tokenBalance, uint8 decimals, bool recordDateReached, tuple(uint256 recordDate, uint256 executionDate, uint256 startDate, uint256 endDate, uint256 fixingDate, uint256 rate, uint8 rateDecimals, uint8 rateStatus) coupon) couponFor_)", + selector: "0xbba7b56d", }, { - name: "ProtectedTransferFrom", - signature: "ProtectedTransferFrom(bytes32,address,address,address,uint256,uint256,uint256,bytes)", - topic0: "0x2abbd5300acea8488bc2d0777cfb860f38dee76badd52ff8b36d3dec0f5fdb6c", + name: "getCouponFromOrderedListAt", + signature: "function getCouponFromOrderedListAt(uint256 _pos) view returns (uint256 couponID_)", + selector: "0x65a88a2c", }, { - name: "RoleAdminChanged", - signature: "RoleAdminChanged(bytes32,bytes32,bytes32)", - topic0: "0xbd79b86ffe0ab8e8776151514217cd7cacd52c909f66475c3af44e129f0b00ff", + name: "getCouponHolders", + signature: + "function getCouponHolders(uint256 _couponID, uint256 _pageIndex, uint256 _pageLength) view returns (address[] holders_)", + selector: "0xa92e8371", }, { - name: "TokenPaused", - signature: "TokenPaused(address)", - topic0: "0xf017c0de579727a3cd3ee18077ee8b4c43bf21892985952d1d5a0d52f983502d", + name: "getCouponsOrderedList", + signature: + "function getCouponsOrderedList(uint256 _pageIndex, uint256 _pageLength) view returns (uint256[] couponIDs_)", + selector: "0xd7133de1", }, { - name: "TokenUnpaused", - signature: "TokenUnpaused(address)", - topic0: "0xf38578ed892ce2ce655ca8ae03c73464ad74915a1331a9b4085e637534daeedf", + name: "getCouponsOrderedListTotal", + signature: "function getCouponsOrderedListTotal() view returns (uint256 total_)", + selector: "0xee1d26eb", }, - ], - errors: [ - { name: "AccountHasNoRole", signature: "AccountHasNoRole(address,bytes32)", selector: "0xa1180aad" }, - { name: "AccountHasNoRoles", signature: "AccountHasNoRoles(address,bytes32[])", selector: "0x90e55392" }, - { name: "AccountIsBlocked", signature: "AccountIsBlocked(address)", selector: "0x796c1f0d" }, { - name: "AllBusinessLogicKeysMustBeenInformed", - signature: "AllBusinessLogicKeysMustBeenInformed()", - selector: "0x7d1960b7", + name: "getPrincipalFor", + signature: + "function getPrincipalFor(address _account) view returns (tuple(uint256 numerator, uint256 denominator) principalFor_)", + selector: "0x6f131c78", }, - { name: "BusinessLogicKeyDuplicated", signature: "BusinessLogicKeyDuplicated(bytes32)", selector: "0x193c9b12" }, - { name: "BusinessLogicNotActive", signature: "BusinessLogicNotActive(bytes32)", selector: "0x4649536d" }, { - name: "BusinessLogicVersionDoesNotExist", - signature: "BusinessLogicVersionDoesNotExist(uint256)", - selector: "0x0f5ce4d0", + name: "getSecurityHolders", + signature: + "function getSecurityHolders(uint256 _pageIndex, uint256 _pageLength) view returns (address[] holders_)", + selector: "0x81438d2f", }, - { name: "ExpirationNotReached", signature: "ExpirationNotReached()", selector: "0x92899bcd" }, { - name: "PartitionsAreProtectedAndNoRole", - signature: "PartitionsAreProtectedAndNoRole(address,bytes32)", - selector: "0x55347310", + name: "getSecurityRegulationData", + signature: + "function getSecurityRegulationData() pure returns (tuple(tuple(uint8 regulationType, uint8 regulationSubType, uint256 dealSize, uint8 accreditedInvestors, uint256 maxNonAccreditedInvestors, uint8 manualInvestorVerification, uint8 internationalInvestors, uint8 resaleHoldPeriod) regulationData, tuple(bool countriesControlListType, string listOfCountries, string info) additionalSecurityData) securityRegulationData_)", + selector: "0x8fda5afe", }, - { name: "PartitionsAreUnProtected", signature: "PartitionsAreUnProtected()", selector: "0x05681565" }, { - name: "RolesAndActivesLengthMismatch", - signature: "RolesAndActivesLengthMismatch(uint256,uint256)", - selector: "0x365ff1a4", + name: "getTotalCouponHolders", + signature: "function getTotalCouponHolders(uint256 _couponID) view returns (uint256)", + selector: "0xec116ae3", }, - { name: "TokenIsPaused", signature: "TokenIsPaused()", selector: "0x649815a5" }, - { name: "TokenIsUnpaused", signature: "TokenIsUnpaused()", selector: "0x72058d69" }, - { name: "WrongSignature", signature: "WrongSignature()", selector: "0x356a4418" }, { - name: "ZeroKeyNotValidForBusinessLogic", - signature: "ZeroKeyNotValidForBusinessLogic()", - selector: "0x7da728b1", + name: "getTotalSecurityHolders", + signature: "function getTotalSecurityHolders() view returns (uint256)", + selector: "0xbd007c8f", }, ], + errors: [{ name: "ExpirationNotReached", signature: "ExpirationNotReached()", selector: "0x92899bcd" }], factory: (signer, useTimeTravel = false) => - useTimeTravel ? new DiamondLoupeFacetTimeTravel__factory(signer) : new DiamondLoupeFacet__factory(signer), + useTimeTravel ? new BondUSAReadFacetTimeTravel__factory(signer) : new BondUSAReadFacet__factory(signer), }, - EquityUSAFacet: { - name: "EquityUSAFacet", + BondUSAReadFixedRateFacet: { + name: "BondUSAReadFixedRateFacet", resolverKey: { - name: "_EQUITY_RESOLVER_KEY", - value: "0xfe85fe0513f5a5676011f59495ae16b2b93c981c190e99e61903e5603542c810", + name: "_BOND_FIXED_READ_RESOLVER_KEY", + value: "0xd5d703d15aa25ad6419288846269dcbba84f489f1c986be2c919f84c042b8c24", }, - inheritance: ["EquityUSA", "IStaticFunctionSelectors"], + inheritance: ["BondUSAReadFacetBase", "CommonFixedInterestRate"], methods: [ { - name: "_initialize_equityUSA", - signature: "_initialize_equityUSA(EquityDetailsData,RegulationData,AdditionalSecurityData)", - selector: "0xd0299703", + name: "getBondDetails", + signature: + "function getBondDetails() view returns (tuple(bytes3 currency, uint256 nominalValue, uint8 nominalValueDecimals, uint256 startingDate, uint256 maturityDate) bondDetailsData_)", + selector: "0x4ce02414", }, - { name: "getDividendAmountFor", signature: "getDividendAmountFor(uint256,address)", selector: "0xd258b2f1" }, - { name: "getDividendHolders", signature: "getDividendHolders(uint256,uint256,uint256)", selector: "0xeba3918e" }, - { name: "getDividends", signature: "getDividends(uint256)", selector: "0x3837ac88" }, - { name: "getDividendsCount", signature: "getDividendsCount()", selector: "0x9e676952" }, - { name: "getDividendsFor", signature: "getDividendsFor(uint256,address)", selector: "0x323e22da" }, - { name: "getEquityDetails", signature: "getEquityDetails()", selector: "0xefcdcad8" }, { - name: "getScheduledBalanceAdjustment", - signature: "getScheduledBalanceAdjustment(uint256)", - selector: "0x3d5338e8", + name: "getCoupon", + signature: + "function getCoupon(uint256 _couponID) view returns (tuple(tuple(uint256 recordDate, uint256 executionDate, uint256 startDate, uint256 endDate, uint256 fixingDate, uint256 rate, uint8 rateDecimals, uint8 rateStatus) coupon, uint256 snapshotId) registeredCoupon_)", + selector: "0x936e3169", }, { - name: "getScheduledBalanceAdjustmentCount", - signature: "getScheduledBalanceAdjustmentCount()", - selector: "0x7c62c7fc", + name: "getCouponAmountFor", + signature: + "function getCouponAmountFor(uint256 _couponID, address _account) view returns (tuple(uint256 numerator, uint256 denominator, bool recordDateReached) couponAmountFor_)", + selector: "0x439efc2e", }, - { name: "getSecurityHolders", signature: "getSecurityHolders(uint256,uint256)", selector: "0x81438d2f" }, - { name: "getSecurityRegulationData", signature: "getSecurityRegulationData()", selector: "0x8fda5afe" }, - { name: "getTotalDividendHolders", signature: "getTotalDividendHolders(uint256)", selector: "0xd61a022b" }, - { name: "getTotalSecurityHolders", signature: "getTotalSecurityHolders()", selector: "0xbd007c8f" }, - { name: "getTotalVotingHolders", signature: "getTotalVotingHolders(uint256)", selector: "0x92c51818" }, - { name: "getVoting", signature: "getVoting(uint256)", selector: "0x3afc7282" }, - { name: "getVotingCount", signature: "getVotingCount()", selector: "0x9c2aab5e" }, - { name: "getVotingFor", signature: "getVotingFor(uint256,address)", selector: "0x7633eccf" }, - { name: "getVotingHolders", signature: "getVotingHolders(uint256,uint256,uint256)", selector: "0x009f64ac" }, - { name: "setDividends", signature: "setDividends(Dividend)", selector: "0xa6817476" }, { - name: "setScheduledBalanceAdjustment", - signature: "setScheduledBalanceAdjustment(ScheduledBalanceAdjustment)", - selector: "0x50ebcebf", + name: "getCouponCount", + signature: "function getCouponCount() view returns (uint256 couponCount_)", + selector: "0x468bb240", + }, + { + name: "getCouponFor", + signature: + "function getCouponFor(uint256 _couponID, address _account) view returns (tuple(uint256 tokenBalance, uint8 decimals, bool recordDateReached, tuple(uint256 recordDate, uint256 executionDate, uint256 startDate, uint256 endDate, uint256 fixingDate, uint256 rate, uint8 rateDecimals, uint8 rateStatus) coupon) couponFor_)", + selector: "0xbba7b56d", + }, + { + name: "getCouponFromOrderedListAt", + signature: "function getCouponFromOrderedListAt(uint256 _pos) view returns (uint256 couponID_)", + selector: "0x65a88a2c", + }, + { + name: "getCouponHolders", + signature: + "function getCouponHolders(uint256 _couponID, uint256 _pageIndex, uint256 _pageLength) view returns (address[] holders_)", + selector: "0xa92e8371", + }, + { + name: "getCouponsOrderedList", + signature: + "function getCouponsOrderedList(uint256 _pageIndex, uint256 _pageLength) view returns (uint256[] couponIDs_)", + selector: "0xd7133de1", + }, + { + name: "getCouponsOrderedListTotal", + signature: "function getCouponsOrderedListTotal() view returns (uint256 total_)", + selector: "0xee1d26eb", + }, + { + name: "getPrincipalFor", + signature: + "function getPrincipalFor(address _account) view returns (tuple(uint256 numerator, uint256 denominator) principalFor_)", + selector: "0x6f131c78", + }, + { + name: "getSecurityHolders", + signature: + "function getSecurityHolders(uint256 _pageIndex, uint256 _pageLength) view returns (address[] holders_)", + selector: "0x81438d2f", + }, + { + name: "getSecurityRegulationData", + signature: + "function getSecurityRegulationData() pure returns (tuple(tuple(uint8 regulationType, uint8 regulationSubType, uint256 dealSize, uint8 accreditedInvestors, uint256 maxNonAccreditedInvestors, uint8 manualInvestorVerification, uint8 internationalInvestors, uint8 resaleHoldPeriod) regulationData, tuple(bool countriesControlListType, string listOfCountries, string info) additionalSecurityData) securityRegulationData_)", + selector: "0x8fda5afe", + }, + { + name: "getTotalCouponHolders", + signature: "function getTotalCouponHolders(uint256 _couponID) view returns (uint256)", + selector: "0xec116ae3", + }, + { + name: "getTotalSecurityHolders", + signature: "function getTotalSecurityHolders() view returns (uint256)", + selector: "0xbd007c8f", }, - { name: "setVoting", signature: "setVoting(Voting)", selector: "0x99f97b27" }, + ], + errors: [ + { name: "ExpirationNotReached", signature: "ExpirationNotReached()", selector: "0x92899bcd" }, + { name: "InterestRateIsFixed", signature: "InterestRateIsFixed()", selector: "0x849d4eb8" }, ], factory: (signer, useTimeTravel = false) => - useTimeTravel ? new EquityUSAFacetTimeTravel__factory(signer) : new EquityUSAFacet__factory(signer), + useTimeTravel + ? new BondUSAReadFixedRateFacetTimeTravel__factory(signer) + : new BondUSAReadFixedRateFacet__factory(signer), }, - ERC1410IssuerFacet: { - name: "ERC1410IssuerFacet", + BondUSAReadKpiLinkedRateFacet: { + name: "BondUSAReadKpiLinkedRateFacet", resolverKey: { - name: "_ERC1410_ISSUER_RESOLVER_KEY", - value: "0x6e82b75f32c9647cc00b4c3eabbef5a82677f3e91d5d196eb4dd6a0365941344", + name: "_BOND_KPI_LINKED_READ_RESOLVER_KEY", + value: "0xcced91a2a03bf45bd62730a7f4703ee2d762f8ebccff315c7145258265f73249", }, - inheritance: ["IStaticFunctionSelectors", "ERC1410Issuer"], - methods: [{ name: "issueByPartition", signature: "issueByPartition(IssueData)", selector: "0x10e8a062" }], + inheritance: ["BondUSAReadFacetBase", "CommonKpiLinkedInterestRate"], + methods: [ + { + name: "getBondDetails", + signature: + "function getBondDetails() view returns (tuple(bytes3 currency, uint256 nominalValue, uint8 nominalValueDecimals, uint256 startingDate, uint256 maturityDate) bondDetailsData_)", + selector: "0x4ce02414", + }, + { + name: "getCoupon", + signature: + "function getCoupon(uint256 _couponID) view returns (tuple(tuple(uint256 recordDate, uint256 executionDate, uint256 startDate, uint256 endDate, uint256 fixingDate, uint256 rate, uint8 rateDecimals, uint8 rateStatus) coupon, uint256 snapshotId) registeredCoupon_)", + selector: "0x936e3169", + }, + { + name: "getCouponAmountFor", + signature: + "function getCouponAmountFor(uint256 _couponID, address _account) view returns (tuple(uint256 numerator, uint256 denominator, bool recordDateReached) couponAmountFor_)", + selector: "0x439efc2e", + }, + { + name: "getCouponCount", + signature: "function getCouponCount() view returns (uint256 couponCount_)", + selector: "0x468bb240", + }, + { + name: "getCouponFor", + signature: + "function getCouponFor(uint256 _couponID, address _account) view returns (tuple(uint256 tokenBalance, uint8 decimals, bool recordDateReached, tuple(uint256 recordDate, uint256 executionDate, uint256 startDate, uint256 endDate, uint256 fixingDate, uint256 rate, uint8 rateDecimals, uint8 rateStatus) coupon) couponFor_)", + selector: "0xbba7b56d", + }, + { + name: "getCouponFromOrderedListAt", + signature: "function getCouponFromOrderedListAt(uint256 _pos) view returns (uint256 couponID_)", + selector: "0x65a88a2c", + }, + { + name: "getCouponHolders", + signature: + "function getCouponHolders(uint256 _couponID, uint256 _pageIndex, uint256 _pageLength) view returns (address[] holders_)", + selector: "0xa92e8371", + }, + { + name: "getCouponsOrderedList", + signature: + "function getCouponsOrderedList(uint256 _pageIndex, uint256 _pageLength) view returns (uint256[] couponIDs_)", + selector: "0xd7133de1", + }, + { + name: "getCouponsOrderedListTotal", + signature: "function getCouponsOrderedListTotal() view returns (uint256 total_)", + selector: "0xee1d26eb", + }, + { + name: "getPrincipalFor", + signature: + "function getPrincipalFor(address _account) view returns (tuple(uint256 numerator, uint256 denominator) principalFor_)", + selector: "0x6f131c78", + }, + { + name: "getSecurityHolders", + signature: + "function getSecurityHolders(uint256 _pageIndex, uint256 _pageLength) view returns (address[] holders_)", + selector: "0x81438d2f", + }, + { + name: "getSecurityRegulationData", + signature: + "function getSecurityRegulationData() pure returns (tuple(tuple(uint8 regulationType, uint8 regulationSubType, uint256 dealSize, uint8 accreditedInvestors, uint256 maxNonAccreditedInvestors, uint8 manualInvestorVerification, uint8 internationalInvestors, uint8 resaleHoldPeriod) regulationData, tuple(bool countriesControlListType, string listOfCountries, string info) additionalSecurityData) securityRegulationData_)", + selector: "0x8fda5afe", + }, + { + name: "getTotalCouponHolders", + signature: "function getTotalCouponHolders(uint256 _couponID) view returns (uint256)", + selector: "0xec116ae3", + }, + { + name: "getTotalSecurityHolders", + signature: "function getTotalSecurityHolders() view returns (uint256)", + selector: "0xbd007c8f", + }, + ], + errors: [ + { name: "ExpirationNotReached", signature: "ExpirationNotReached()", selector: "0x92899bcd" }, + { name: "InterestRateIsKpiLinked", signature: "InterestRateIsKpiLinked()", selector: "0x68eba14f" }, + ], factory: (signer, useTimeTravel = false) => - useTimeTravel ? new ERC1410IssuerFacetTimeTravel__factory(signer) : new ERC1410IssuerFacet__factory(signer), + useTimeTravel + ? new BondUSAReadKpiLinkedRateFacetTimeTravel__factory(signer) + : new BondUSAReadKpiLinkedRateFacet__factory(signer), }, - ERC1410ManagementFacet: { - name: "ERC1410ManagementFacet", - description: "Facet implementing privileged ERC1410 operations including controller transfers, operator actions,", + BondUSAReadSustainabilityPerformanceTargetRateFacet: { + name: "BondUSAReadSustainabilityPerformanceTargetRateFacet", resolverKey: { - name: "_ERC1410_MANAGEMENT_RESOLVER_KEY", - value: "0x232f8686795d3f197681faf0d8db05655e759f62d709d56b97e5d9cfff29dbf5", + name: "_BOND_SUSTAINABILITY_PERFORMANCE_TARGET_READ_RESOLVER_KEY", + value: "0x339d458f2928ef5148317aab39e4375a27e6c531d2e5b9de2d4fb23ad0e8b504", }, - inheritance: ["IStaticFunctionSelectors", "ERC1410Management"], + inheritance: ["BondUSAReadFacetBase", "CommonSustainabilityPerformanceTargetInterestRate"], methods: [ { - name: "controllerRedeemByPartition", - signature: "controllerRedeemByPartition(bytes32,address,uint256,bytes,bytes)", - selector: "0xb84777cc", + name: "getBondDetails", + signature: + "function getBondDetails() view returns (tuple(bytes3 currency, uint256 nominalValue, uint8 nominalValueDecimals, uint256 startingDate, uint256 maturityDate) bondDetailsData_)", + selector: "0x4ce02414", }, { - name: "controllerTransferByPartition", - signature: "controllerTransferByPartition(bytes32,address,address,uint256,bytes,bytes)", - selector: "0xfb78befa", + name: "getCoupon", + signature: + "function getCoupon(uint256 _couponID) view returns (tuple(tuple(uint256 recordDate, uint256 executionDate, uint256 startDate, uint256 endDate, uint256 fixingDate, uint256 rate, uint8 rateDecimals, uint8 rateStatus) coupon, uint256 snapshotId) registeredCoupon_)", + selector: "0x936e3169", }, - { name: "initialize_ERC1410", signature: "initialize_ERC1410(bool)", selector: "0x7b1df196" }, { - name: "operatorRedeemByPartition", - signature: "operatorRedeemByPartition(bytes32,address,uint256,bytes,bytes)", - selector: "0x13d557bc", + name: "getCouponAmountFor", + signature: + "function getCouponAmountFor(uint256 _couponID, address _account) view returns (tuple(uint256 numerator, uint256 denominator, bool recordDateReached) couponAmountFor_)", + selector: "0x439efc2e", }, { - name: "operatorTransferByPartition", - signature: "operatorTransferByPartition(OperatorTransferData)", - selector: "0x53a6a0a2", + name: "getCouponCount", + signature: "function getCouponCount() view returns (uint256 couponCount_)", + selector: "0x468bb240", }, { - name: "protectedRedeemFromByPartition", - signature: "protectedRedeemFromByPartition(bytes32,address,uint256,uint256,uint256,bytes)", - selector: "0xc98d9723", + name: "getCouponFor", + signature: + "function getCouponFor(uint256 _couponID, address _account) view returns (tuple(uint256 tokenBalance, uint8 decimals, bool recordDateReached, tuple(uint256 recordDate, uint256 executionDate, uint256 startDate, uint256 endDate, uint256 fixingDate, uint256 rate, uint8 rateDecimals, uint8 rateStatus) coupon) couponFor_)", + selector: "0xbba7b56d", }, { - name: "protectedTransferFromByPartition", - signature: "protectedTransferFromByPartition(bytes32,address,address,uint256,uint256,uint256,bytes)", - selector: "0x12e41c0a", + name: "getCouponFromOrderedListAt", + signature: "function getCouponFromOrderedListAt(uint256 _pos) view returns (uint256 couponID_)", + selector: "0x65a88a2c", + }, + { + name: "getCouponHolders", + signature: + "function getCouponHolders(uint256 _couponID, uint256 _pageIndex, uint256 _pageLength) view returns (address[] holders_)", + selector: "0xa92e8371", + }, + { + name: "getCouponsOrderedList", + signature: + "function getCouponsOrderedList(uint256 _pageIndex, uint256 _pageLength) view returns (uint256[] couponIDs_)", + selector: "0xd7133de1", + }, + { + name: "getCouponsOrderedListTotal", + signature: "function getCouponsOrderedListTotal() view returns (uint256 total_)", + selector: "0xee1d26eb", + }, + { + name: "getPrincipalFor", + signature: + "function getPrincipalFor(address _account) view returns (tuple(uint256 numerator, uint256 denominator) principalFor_)", + selector: "0x6f131c78", + }, + { + name: "getSecurityHolders", + signature: + "function getSecurityHolders(uint256 _pageIndex, uint256 _pageLength) view returns (address[] holders_)", + selector: "0x81438d2f", + }, + { + name: "getSecurityRegulationData", + signature: + "function getSecurityRegulationData() pure returns (tuple(tuple(uint8 regulationType, uint8 regulationSubType, uint256 dealSize, uint8 accreditedInvestors, uint256 maxNonAccreditedInvestors, uint8 manualInvestorVerification, uint8 internationalInvestors, uint8 resaleHoldPeriod) regulationData, tuple(bool countriesControlListType, string listOfCountries, string info) additionalSecurityData) securityRegulationData_)", + selector: "0x8fda5afe", + }, + { + name: "getTotalCouponHolders", + signature: "function getTotalCouponHolders(uint256 _couponID) view returns (uint256)", + selector: "0xec116ae3", + }, + { + name: "getTotalSecurityHolders", + signature: "function getTotalSecurityHolders() view returns (uint256)", + selector: "0xbd007c8f", + }, + ], + errors: [ + { name: "ExpirationNotReached", signature: "ExpirationNotReached()", selector: "0x92899bcd" }, + { + name: "InterestRateIsSustainabilityPerformanceTarget", + signature: "InterestRateIsSustainabilityPerformanceTarget()", + selector: "0x15a15b0a", }, ], factory: (signer, useTimeTravel = false) => useTimeTravel - ? new ERC1410ManagementFacetTimeTravel__factory(signer) - : new ERC1410ManagementFacet__factory(signer), + ? new BondUSAReadSustainabilityPerformanceTargetRateFacetTimeTravel__factory(signer) + : new BondUSAReadSustainabilityPerformanceTargetRateFacet__factory(signer), }, - ERC1410ReadFacet: { - name: "ERC1410ReadFacet", + BondUSASustainabilityPerformanceTargetRateFacet: { + name: "BondUSASustainabilityPerformanceTargetRateFacet", resolverKey: { - name: "_ERC1410_READ_RESOLVER_KEY", - value: "0x5eb2734b83ea80c3eb63463a6192b30ab2526cb7a073f0abfda1a404c92ae497", + name: "_BOND_SUSTAINABILITY_PERFORMANCE_TARGET_RATE_RESOLVER_KEY", + value: "0x8048a878c656dcf3886e69ad27a9272a4fb9499299ab5f0e1b6c99ac3b1130f8", }, - inheritance: ["IStaticFunctionSelectors", "ERC1410Read"], + inheritance: ["BondUSAFacetBase", "CommonSustainabilityPerformanceTargetInterestRate"], methods: [ - { name: "balanceOf", signature: "balanceOf(address)", selector: "0x70a08231" }, - { name: "balanceOfAt", signature: "balanceOfAt(address,uint256)", selector: "0x4ee2cd7e" }, - { name: "balanceOfByPartition", signature: "balanceOfByPartition(bytes32,address)", selector: "0x30e82803" }, { - name: "canRedeemByPartition", - signature: "canRedeemByPartition(address,bytes32,uint256,bytes,bytes)", - selector: "0x7b7322c4", + name: "_initialize_bondUSA", + signature: + "function _initialize_bondUSA(tuple(bytes3 currency, uint256 nominalValue, uint8 nominalValueDecimals, uint256 startingDate, uint256 maturityDate) _bondDetailsData, tuple(uint8 regulationType, uint8 regulationSubType, uint256 dealSize, uint8 accreditedInvestors, uint256 maxNonAccreditedInvestors, uint8 manualInvestorVerification, uint8 internationalInvestors, uint8 resaleHoldPeriod) _regulationData, tuple(bool countriesControlListType, string listOfCountries, string info) _additionalSecurityData)", + selector: "0x86d59729", }, { - name: "canTransferByPartition", - signature: "canTransferByPartition(address,address,bytes32,uint256,bytes,bytes)", - selector: "0xa7b518b1", + name: "fullRedeemAtMaturity", + signature: "function fullRedeemAtMaturity(address _tokenHolder)", + selector: "0xd0db5fb2", }, - { name: "isMultiPartition", signature: "isMultiPartition()", selector: "0xbd09cc54" }, - { name: "isOperator", signature: "isOperator(address,address)", selector: "0xb6363cf2" }, { - name: "isOperatorForPartition", - signature: "isOperatorForPartition(bytes32,address,address)", - selector: "0x6d77cad6", + name: "redeemAtMaturityByPartition", + signature: "function redeemAtMaturityByPartition(address _tokenHolder, bytes32 _partition, uint256 _amount)", + selector: "0x8a647211", + }, + { + name: "setCoupon", + signature: + "function setCoupon(tuple(uint256 recordDate, uint256 executionDate, uint256 startDate, uint256 endDate, uint256 fixingDate, uint256 rate, uint8 rateDecimals, uint8 rateStatus) _newCoupon) returns (uint256 couponID_)", + selector: "0xb16fd0cc", + }, + { + name: "updateMaturityDate", + signature: "function updateMaturityDate(uint256 _newMaturityDate) returns (bool success_)", + selector: "0xc7a6ca35", + }, + ], + events: [ + { + name: "MaturityDateUpdated", + signature: "MaturityDateUpdated(address,uint256,uint256)", + topic0: "0x2e73bd0100c5816065f3ccb1e56ff5a3c5fefe2ee0ea490cc32c50004d59ff6f", + }, + ], + errors: [ + { name: "ExpirationNotReached", signature: "ExpirationNotReached()", selector: "0x92899bcd" }, + { + name: "InterestRateIsSustainabilityPerformanceTarget", + signature: "InterestRateIsSustainabilityPerformanceTarget()", + selector: "0x15a15b0a", }, - { name: "partitionsOf", signature: "partitionsOf(address)", selector: "0x740ab8f4" }, - { name: "totalSupply", signature: "totalSupply()", selector: "0x18160ddd" }, - { name: "totalSupplyByPartition", signature: "totalSupplyByPartition(bytes32)", selector: "0xa26734dc" }, ], factory: (signer, useTimeTravel = false) => - useTimeTravel ? new ERC1410ReadFacetTimeTravel__factory(signer) : new ERC1410ReadFacet__factory(signer), + useTimeTravel + ? new BondUSASustainabilityPerformanceTargetRateFacetTimeTravel__factory(signer) + : new BondUSASustainabilityPerformanceTargetRateFacet__factory(signer), }, - ERC1410TokenHolderFacet: { - name: "ERC1410TokenHolderFacet", + CapFacet: { + name: "CapFacet", resolverKey: { - name: "_ERC1410_TOKEN_HOLDER_RESOLVER_KEY", - value: "0x0466bf860d23f1ecbc25f364735e0dc3830d236f09182599831730ddd2792caa", + name: "_CAP_RESOLVER_KEY", + value: "0xfb3f8aac36661b5540c571d821c80dc9db7ede5ca2a4204ee562b3356f0c026b", }, - inheritance: ["IStaticFunctionSelectors", "ERC1410TokenHolder"], + inheritance: ["CapFacetBase", "Common"], methods: [ - { name: "authorizeOperator", signature: "authorizeOperator(address)", selector: "0x959b8c3f" }, { - name: "authorizeOperatorByPartition", - signature: "authorizeOperatorByPartition(bytes32,address)", - selector: "0x103ef9e1", + name: "getMaxSupply", + signature: "function getMaxSupply() view returns (uint256 maxSupply_)", + selector: "0x4c0f38c2", }, - { name: "redeemByPartition", signature: "redeemByPartition(bytes32,uint256,bytes)", selector: "0x62eb0068" }, - { name: "revokeOperator", signature: "revokeOperator(address)", selector: "0xfad8b32a" }, { - name: "revokeOperatorByPartition", - signature: "revokeOperatorByPartition(bytes32,address)", - selector: "0x168ecec5", + name: "getMaxSupplyByPartition", + signature: "function getMaxSupplyByPartition(bytes32 _partition) view returns (uint256 maxSupply_)", + selector: "0x79f3653f", }, { - name: "transferByPartition", - signature: "transferByPartition(bytes32,BasicTransferInfo,bytes)", - selector: "0xbb4f2f08", + name: "initialize_Cap", + signature: + "function initialize_Cap(uint256 maxSupply, tuple(bytes32 partition, uint256 maxSupply)[] partitionCap)", + selector: "0x56210c4e", + }, + { + name: "setMaxSupply", + signature: "function setMaxSupply(uint256 _maxSupply) returns (bool success_)", + selector: "0x6f8b44b0", + }, + { + name: "setMaxSupplyByPartition", + signature: "function setMaxSupplyByPartition(bytes32 _partition, uint256 _maxSupply) returns (bool success_)", + selector: "0x99b69647", }, - { name: "triggerAndSyncAll", signature: "triggerAndSyncAll(bytes32,address,address)", selector: "0x6afb79db" }, ], + errors: [{ name: "ExpirationNotReached", signature: "ExpirationNotReached()", selector: "0x92899bcd" }], factory: (signer, useTimeTravel = false) => - useTimeTravel - ? new ERC1410TokenHolderFacetTimeTravel__factory(signer) - : new ERC1410TokenHolderFacet__factory(signer), + useTimeTravel ? new CapFacetTimeTravel__factory(signer) : new CapFacet__factory(signer), }, - ERC1594Facet: { - name: "ERC1594Facet", + CapFixedRateFacet: { + name: "CapFixedRateFacet", resolverKey: { - name: "_ERC1594_RESOLVER_KEY", - value: "0xcb70773e8163595d8bd906e277adeb3935976ad802ee8c29face3dfb0263291f", + name: "_CAP_FIXED_RATE_RESOLVER_KEY", + value: "0x288b5a4b82f38369168fd49de3e5e68c76fc0394c2e89817b70a65368ba4dcf7", }, - inheritance: ["ERC1594", "IStaticFunctionSelectors"], + inheritance: ["CapFacetBase", "CommonFixedInterestRate"], methods: [ - { name: "canTransfer", signature: "canTransfer(address,uint256,bytes)", selector: "0x1badb25c" }, - { name: "canTransferFrom", signature: "canTransferFrom(address,address,uint256,bytes)", selector: "0x122eb575" }, - { name: "initialize_ERC1594", signature: "initialize_ERC1594()", selector: "0x9be12cea" }, - { name: "isIssuable", signature: "isIssuable()", selector: "0x2f1cae85" }, - { name: "issue", signature: "issue(address,uint256,bytes)", selector: "0xbb3acde9" }, - { name: "redeem", signature: "redeem(uint256,bytes)", selector: "0xe77c646d" }, - { name: "redeemFrom", signature: "redeemFrom(address,uint256,bytes)", selector: "0x9675193c" }, { - name: "transferFromWithData", - signature: "transferFromWithData(address,address,uint256,bytes)", - selector: "0xee532f31", + name: "getMaxSupply", + signature: "function getMaxSupply() view returns (uint256 maxSupply_)", + selector: "0x4c0f38c2", + }, + { + name: "getMaxSupplyByPartition", + signature: "function getMaxSupplyByPartition(bytes32 _partition) view returns (uint256 maxSupply_)", + selector: "0x79f3653f", + }, + { + name: "initialize_Cap", + signature: + "function initialize_Cap(uint256 maxSupply, tuple(bytes32 partition, uint256 maxSupply)[] partitionCap)", + selector: "0x56210c4e", + }, + { + name: "setMaxSupply", + signature: "function setMaxSupply(uint256 _maxSupply) returns (bool success_)", + selector: "0x6f8b44b0", + }, + { + name: "setMaxSupplyByPartition", + signature: "function setMaxSupplyByPartition(bytes32 _partition, uint256 _maxSupply) returns (bool success_)", + selector: "0x99b69647", }, - { name: "transferWithData", signature: "transferWithData(address,uint256,bytes)", selector: "0x2535f762" }, + ], + errors: [ + { name: "ExpirationNotReached", signature: "ExpirationNotReached()", selector: "0x92899bcd" }, + { name: "InterestRateIsFixed", signature: "InterestRateIsFixed()", selector: "0x849d4eb8" }, ], factory: (signer, useTimeTravel = false) => - useTimeTravel ? new ERC1594FacetTimeTravel__factory(signer) : new ERC1594Facet__factory(signer), + useTimeTravel ? new CapFixedRateFacetTimeTravel__factory(signer) : new CapFixedRateFacet__factory(signer), }, - ERC1643Facet: { - name: "ERC1643Facet", + CapKpiLinkedRateFacet: { + name: "CapKpiLinkedRateFacet", resolverKey: { - name: "_ERC1643_RESOLVER_KEY", - value: "0x24543637956a3076689f171d3932b10f22d40f3785d53acebb340f37bed01625", + name: "_CAP_KPI_LINKED_RATE_RESOLVER_KEY", + value: "0xdc8cc0612bf886bcc1666e31c5de3392bee78451de7213b01fe78d560a804435", }, - inheritance: ["ERC1643", "IStaticFunctionSelectors"], + inheritance: ["CapFacetBase", "CommonKpiLinkedInterestRate"], methods: [ - { name: "getAllDocuments", signature: "getAllDocuments()", selector: "0x9fa5f50b" }, - { name: "getDocument", signature: "getDocument(bytes32)", selector: "0xb10d6b41" }, - { name: "removeDocument", signature: "removeDocument(bytes32)", selector: "0xc3501848" }, - { name: "setDocument", signature: "setDocument(bytes32,string,bytes32)", selector: "0x010648ca" }, - ], - events: [ { - name: "DocumentRemoved", - signature: "DocumentRemoved(bytes32,string,bytes32)", - topic0: "0x3d9bba27d3e360d8c80645beed7e991454a8271bf6f269a24f7782be0f0d0654", + name: "getMaxSupply", + signature: "function getMaxSupply() view returns (uint256 maxSupply_)", + selector: "0x4c0f38c2", }, { - name: "DocumentUpdated", - signature: "DocumentUpdated(bytes32,string,bytes32)", - topic0: "0xb4c22d60cd550a815744f04e3ff5278bf19684565ee00e2b084041b6024bd6f6", + name: "getMaxSupplyByPartition", + signature: "function getMaxSupplyByPartition(bytes32 _partition) view returns (uint256 maxSupply_)", + selector: "0x79f3653f", + }, + { + name: "initialize_Cap", + signature: + "function initialize_Cap(uint256 maxSupply, tuple(bytes32 partition, uint256 maxSupply)[] partitionCap)", + selector: "0x56210c4e", + }, + { + name: "setMaxSupply", + signature: "function setMaxSupply(uint256 _maxSupply) returns (bool success_)", + selector: "0x6f8b44b0", + }, + { + name: "setMaxSupplyByPartition", + signature: "function setMaxSupplyByPartition(bytes32 _partition, uint256 _maxSupply) returns (bool success_)", + selector: "0x99b69647", }, ], errors: [ - { name: "DocumentDoesNotExist", signature: "DocumentDoesNotExist(bytes32)", selector: "0xc2e54650" }, - { name: "EmptyHASH", signature: "EmptyHASH()", selector: "0x402e72be" }, - { name: "EmptyName", signature: "EmptyName()", selector: "0x2ef13105" }, - { name: "EmptyURI", signature: "EmptyURI()", selector: "0xd07b00d6" }, + { name: "ExpirationNotReached", signature: "ExpirationNotReached()", selector: "0x92899bcd" }, + { name: "InterestRateIsKpiLinked", signature: "InterestRateIsKpiLinked()", selector: "0x68eba14f" }, ], factory: (signer, useTimeTravel = false) => - useTimeTravel ? new ERC1643FacetTimeTravel__factory(signer) : new ERC1643Facet__factory(signer), + useTimeTravel ? new CapKpiLinkedRateFacetTimeTravel__factory(signer) : new CapKpiLinkedRateFacet__factory(signer), }, - ERC1644Facet: { - name: "ERC1644Facet", + CapSustainabilityPerformanceTargetRateFacet: { + name: "CapSustainabilityPerformanceTargetRateFacet", resolverKey: { - name: "_ERC1644_RESOLVER_KEY", - value: "0xf1da2ed271d62ba0b6597874c96fb6ed7d929e5ec679f4ad8c2c516c72f6736d", + name: "_CAP_SUSTAINABILITY_PERFORMANCE_TARGET_RATE_RESOLVER_KEY", + value: "0xa321c5301bbccd760c5aaf08286a67948cb7d49be22c17f12aa163b324a276d0", }, - inheritance: ["ERC1644", "IStaticFunctionSelectors"], + inheritance: ["CapFacetBase", "CommonSustainabilityPerformanceTargetInterestRate"], methods: [ - { name: "controllerRedeem", signature: "controllerRedeem(address,uint256,bytes,bytes)", selector: "0x2bc6acc3" }, { - name: "controllerTransfer", - signature: "controllerTransfer(address,address,uint256,bytes,bytes)", - selector: "0xf282527a", + name: "getMaxSupply", + signature: "function getMaxSupply() view returns (uint256 maxSupply_)", + selector: "0x4c0f38c2", }, - { name: "finalizeControllable", signature: "finalizeControllable()", selector: "0xa213934f" }, - { name: "initialize_ERC1644", signature: "initialize_ERC1644(bool)", selector: "0xaa4ea38e" }, - { name: "isControllable", signature: "isControllable()", selector: "0x4c783bf5" }, - ], - factory: (signer, useTimeTravel = false) => - useTimeTravel ? new ERC1644FacetTimeTravel__factory(signer) : new ERC1644Facet__factory(signer), - }, - - ERC20Facet: { - name: "ERC20Facet", - resolverKey: { - name: "_ERC20_RESOLVER_KEY", - value: "0x064c883089ba1a596d9146c7aaa73c19ef8825f374c67a9538787c3d12e68dc5", - }, - inheritance: ["ERC20", "IStaticFunctionSelectors"], - methods: [ - { name: "allowance", signature: "allowance(address,address)", selector: "0xdd62ed3e" }, - { name: "approve", signature: "approve(address,uint256)", selector: "0x095ea7b3" }, - { name: "decimals", signature: "decimals()", selector: "0x313ce567" }, - { name: "decimalsAt", signature: "decimalsAt(uint256)", selector: "0x771918ca" }, - { name: "decreaseAllowance", signature: "decreaseAllowance(address,uint256)", selector: "0xa457c2d7" }, - { name: "getERC20Metadata", signature: "getERC20Metadata()", selector: "0x8e649195" }, - { name: "increaseAllowance", signature: "increaseAllowance(address,uint256)", selector: "0x39509351" }, - { name: "initialize_ERC20", signature: "initialize_ERC20(ERC20Metadata)", selector: "0xab0de864" }, - { name: "name", signature: "name()", selector: "0x06fdde03" }, - { name: "symbol", signature: "symbol()", selector: "0x95d89b41" }, - { name: "transfer", signature: "transfer(address,uint256)", selector: "0xa9059cbb" }, - { name: "transferFrom", signature: "transferFrom(address,address,uint256)", selector: "0x23b872dd" }, - ], - factory: (signer, useTimeTravel = false) => - useTimeTravel ? new ERC20FacetTimeTravel__factory(signer) : new ERC20Facet__factory(signer), - }, - - ERC20PermitFacet: { - name: "ERC20PermitFacet", - resolverKey: { - name: "_ERC20PERMIT_RESOLVER_KEY", - value: "0xef05f0313623d32145212ed45620c8b2c8c294b3d6955cf26f3d1b0569fbc1fa", - }, - inheritance: ["ERC20Permit", "IStaticFunctionSelectors"], - methods: [ - { name: "DOMAIN_SEPARATOR", signature: "DOMAIN_SEPARATOR()", selector: "0x3644e515" }, - { name: "initialize_ERC20Permit", signature: "initialize_ERC20Permit()", selector: "0x70d162dc" }, - { name: "nonces", signature: "nonces(address)", selector: "0x7ecebe00" }, { - name: "permit", - signature: "permit(address,address,uint256,uint256,uint8,bytes32,bytes32)", - selector: "0xd505accf", + name: "getMaxSupplyByPartition", + signature: "function getMaxSupplyByPartition(bytes32 _partition) view returns (uint256 maxSupply_)", + selector: "0x79f3653f", + }, + { + name: "initialize_Cap", + signature: + "function initialize_Cap(uint256 maxSupply, tuple(bytes32 partition, uint256 maxSupply)[] partitionCap)", + selector: "0x56210c4e", + }, + { + name: "setMaxSupply", + signature: "function setMaxSupply(uint256 _maxSupply) returns (bool success_)", + selector: "0x6f8b44b0", + }, + { + name: "setMaxSupplyByPartition", + signature: "function setMaxSupplyByPartition(bytes32 _partition, uint256 _maxSupply) returns (bool success_)", + selector: "0x99b69647", }, ], errors: [ - { name: "ERC2612ExpiredSignature", signature: "ERC2612ExpiredSignature(uint256)", selector: "0x62791302" }, - { name: "ERC2612InvalidSigner", signature: "ERC2612InvalidSigner(address,address)", selector: "0x4b800e46" }, - ], - factory: (signer, useTimeTravel = false) => - useTimeTravel ? new ERC20PermitFacetTimeTravel__factory(signer) : new ERC20PermitFacet__factory(signer), - }, - - ERC20VotesFacet: { - name: "ERC20VotesFacet", - resolverKey: { - name: "_ERC20VOTES_RESOLVER_KEY", - value: "0x5cbfbaa435e19a43530a00ac685c9b5252862a94af2053667ded44642a0d9f4c", - }, - inheritance: ["ERC20Votes", "IStaticFunctionSelectors"], - methods: [ - { name: "checkpoints", signature: "checkpoints(address,uint256)", selector: "0x0cdfebfa" }, - { name: "clock", signature: "clock()", selector: "0x91ddadf4" }, - { name: "CLOCK_MODE", signature: "CLOCK_MODE()", selector: "0x4bf5d7e9" }, - { name: "delegate", signature: "delegate(address)", selector: "0x5c19a95c" }, - { name: "delegates", signature: "delegates(address)", selector: "0x587cde1e" }, - { name: "getPastTotalSupply", signature: "getPastTotalSupply(uint256)", selector: "0x8e539e8c" }, - { name: "getPastVotes", signature: "getPastVotes(address,uint256)", selector: "0x3a46b1a8" }, - { name: "getVotes", signature: "getVotes(address)", selector: "0x9ab24eb0" }, - { name: "initialize_ERC20Votes", signature: "initialize_ERC20Votes(bool)", selector: "0x65fa0b29" }, - { name: "isActivated", signature: "isActivated()", selector: "0x4a8c1fb4" }, - { name: "numCheckpoints", signature: "numCheckpoints(address)", selector: "0x6fcfff45" }, - ], - errors: [ + { name: "ExpirationNotReached", signature: "ExpirationNotReached()", selector: "0x92899bcd" }, { - name: "AbafChangeForBlockForbidden", - signature: "AbafChangeForBlockForbidden(uint256)", - selector: "0x5a2afdff", + name: "InterestRateIsSustainabilityPerformanceTarget", + signature: "InterestRateIsSustainabilityPerformanceTarget()", + selector: "0x15a15b0a", }, ], factory: (signer, useTimeTravel = false) => - useTimeTravel ? new ERC20VotesFacetTimeTravel__factory(signer) : new ERC20VotesFacet__factory(signer), + useTimeTravel + ? new CapSustainabilityPerformanceTargetRateFacetTimeTravel__factory(signer) + : new CapSustainabilityPerformanceTargetRateFacet__factory(signer), }, - ERC3643BatchFacet: { - name: "ERC3643BatchFacet", + ClearingActionsFacet: { + name: "ClearingActionsFacet", resolverKey: { - name: "_ERC3643_BATCH_RESOLVER_KEY", - value: "0x9e671b494908a7523ee4e531ae7b7076b84f1c675d31346a9697f0ff4695f249", + name: "_CLEARING_ACTIONS_RESOLVER_KEY", + value: "0x5472dfc5c92ad7a8651518ea7d3854d3b6494e5bcaa19f91cd61bf93bf6f2a74", }, - inheritance: ["ERC3643Batch", "IStaticFunctionSelectors"], + inheritance: ["ClearingActionsFacetBase", "Common"], methods: [ - { name: "batchBurn", signature: "batchBurn(address[],uint256[])", selector: "0x4a6cc677" }, { - name: "batchForcedTransfer", - signature: "batchForcedTransfer(address[],address[],uint256[])", - selector: "0x42a47abc", + name: "activateClearing", + signature: "function activateClearing() returns (bool success_)", + selector: "0xab2d18a9", }, - { name: "batchMint", signature: "batchMint(address[],uint256[])", selector: "0x68573107" }, - { name: "batchTransfer", signature: "batchTransfer(address[],uint256[])", selector: "0x88d695b2" }, - ], - factory: (signer, useTimeTravel = false) => - useTimeTravel ? new ERC3643BatchFacetTimeTravel__factory(signer) : new ERC3643BatchFacet__factory(signer), - }, - - ERC3643ManagementFacet: { - name: "ERC3643ManagementFacet", - resolverKey: { - name: "_ERC3643_MANAGEMENT_RESOLVER_KEY", - value: "0x06d7f1ffc912a9e44e5d742aa1c1eff596d0fabf91a1d0fb1c3ac0fba01f1773", - }, - inheritance: ["IStaticFunctionSelectors", "ERC3643Management"], - methods: [ - { name: "addAgent", signature: "addAgent(address)", selector: "0x84e79842" }, - { name: "initialize_ERC3643", signature: "initialize_ERC3643(address,address)", selector: "0xc047bb6c" }, - { name: "recoveryAddress", signature: "recoveryAddress(address,address,address)", selector: "0x9285948a" }, - { name: "removeAgent", signature: "removeAgent(address)", selector: "0x97a6278e" }, - { name: "setCompliance", signature: "setCompliance(address)", selector: "0xf8981789" }, - { name: "setIdentityRegistry", signature: "setIdentityRegistry(address)", selector: "0xcbf3f861" }, - { name: "setName", signature: "setName(string)", selector: "0xc47f0027" }, - { name: "setOnchainID", signature: "setOnchainID(address)", selector: "0x3d1ddc5b" }, - { name: "setSymbol", signature: "setSymbol(string)", selector: "0xb84c8246" }, - ], - events: [ { - name: "AgentAdded", - signature: "AgentAdded(address)", - topic0: "0xf68e73cec97f2d70aa641fb26e87a4383686e2efacb648f2165aeb02ac562ec5", + name: "approveClearingOperationByPartition", + signature: + "function approveClearingOperationByPartition(tuple(uint8 clearingOperationType, bytes32 partition, address tokenHolder, uint256 clearingId) _clearingOperationIdentifier) returns (bool success_, bytes32 partition_)", + selector: "0xd849cea2", }, { - name: "AgentRemoved", - signature: "AgentRemoved(address)", - topic0: "0xed9c8ad8d5a0a66898ea49d2956929c93ae2e8bd50281b2ed897c5d1a6737e0b", + name: "cancelClearingOperationByPartition", + signature: + "function cancelClearingOperationByPartition(tuple(uint8 clearingOperationType, bytes32 partition, address tokenHolder, uint256 clearingId) _clearingOperationIdentifier) returns (bool success_)", + selector: "0x679141fb", }, { - name: "IdentityRegistryAdded", - signature: "IdentityRegistryAdded(address)", - topic0: "0xd2be862d755bca7e0d39772b2cab3a5578da9c285f69199f4c063c2294a7f36c", + name: "deactivateClearing", + signature: "function deactivateClearing() returns (bool success_)", + selector: "0x65c21860", }, { - name: "RecoverySuccess", - signature: "RecoverySuccess(address,address,address)", - topic0: "0xf0c9129a94f30f1caaceb63e44b9811d0a3edf1d6c23757f346093af5553fed0", + name: "initializeClearing", + signature: "function initializeClearing(bool _clearingActive)", + selector: "0x86a0b46a", }, { - name: "UpdatedTokenInformation", - signature: "UpdatedTokenInformation(string,string,uint8,string,address)", - topic0: "0x6a1105ac8148a3c319adbc369f9072573e8a11d3a3d195e067e7c40767ec54d1", + name: "isClearingActivated", + signature: "function isClearingActivated() view returns (bool)", + selector: "0x4b4d8990", }, - ], - errors: [ - { name: "AddressNotVerified", signature: "AddressNotVerified()", selector: "0x209d2853" }, - { name: "CannotRecoverWallet", signature: "CannotRecoverWallet()", selector: "0x505389ae" }, - { name: "ComplianceCallFailed", signature: "ComplianceCallFailed()", selector: "0x67fba102" }, - { name: "ComplianceNotAllowed", signature: "ComplianceNotAllowed()", selector: "0x66eb1b54" }, - { name: "IdentityRegistryCallFailed", signature: "IdentityRegistryCallFailed()", selector: "0xad87849e" }, { - name: "InputAmountsArrayLengthMismatch", - signature: "InputAmountsArrayLengthMismatch()", - selector: "0x64f13710", + name: "reclaimClearingOperationByPartition", + signature: + "function reclaimClearingOperationByPartition(tuple(uint8 clearingOperationType, bytes32 partition, address tokenHolder, uint256 clearingId) _clearingOperationIdentifier) returns (bool success_)", + selector: "0x67e57fe2", }, - { name: "InputBoolArrayLengthMismatch", signature: "InputBoolArrayLengthMismatch()", selector: "0x07ac0eb9" }, - { name: "WalletRecovered", signature: "WalletRecovered()", selector: "0xf9f9bcf9" }, - ], - factory: (signer, useTimeTravel = false) => - useTimeTravel - ? new ERC3643ManagementFacetTimeTravel__factory(signer) - : new ERC3643ManagementFacet__factory(signer), - }, - - ERC3643OperationsFacet: { - name: "ERC3643OperationsFacet", - resolverKey: { - name: "_ERC3643_OPERATIONS_RESOLVER_KEY", - value: "0x39de33e56c92afe3cd7ece00d0ff8a0df512878690719e48c17d5b54604d2de2", - }, - inheritance: ["IStaticFunctionSelectors", "ERC3643Operations"], - methods: [ - { name: "burn", signature: "burn(address,uint256)", selector: "0x9dc29fac" }, - { name: "forcedTransfer", signature: "forcedTransfer(address,address,uint256)", selector: "0x9fc1d0e7" }, - { name: "mint", signature: "mint(address,uint256)", selector: "0x40c10f19" }, ], - factory: (signer, useTimeTravel = false) => - useTimeTravel - ? new ERC3643OperationsFacetTimeTravel__factory(signer) - : new ERC3643OperationsFacet__factory(signer), - }, - - ERC3643ReadFacet: { - name: "ERC3643ReadFacet", - resolverKey: { - name: "_ERC3643_READ_RESOLVER_KEY", - value: "0xf1a7f92f11da0b048b6417201459d4e1eaef0e112e0d58d5bd6ee4481e5394c7", - }, - inheritance: ["IStaticFunctionSelectors", "ERC3643Read"], - methods: [ - { name: "compliance", signature: "compliance()", selector: "0x6290865d" }, - { name: "identityRegistry", signature: "identityRegistry()", selector: "0x134e18f4" }, - { name: "isAddressRecovered", signature: "isAddressRecovered(address)", selector: "0x1b997ec2" }, - { name: "isAgent", signature: "isAgent(address)", selector: "0x1ffbb064" }, - { name: "onchainID", signature: "onchainID()", selector: "0xaba63705" }, - { name: "version", signature: "version()", selector: "0x54fd4d50" }, + events: [ + { + name: "ClearingActivated", + signature: "ClearingActivated(address)", + topic0: "0x569080e4e18c204a1d28f09348d781d7cfb170428b2fd33e1f9b7df132674e15", + }, + { + name: "ClearingDeactivated", + signature: "ClearingDeactivated(address)", + topic0: "0xdb053585e5b33d19247ef59f5b465bcbb9774e6e5ce23932a7e3ffe829cd80a1", + }, + { + name: "ClearingOperationApproved", + signature: "ClearingOperationApproved(address,address,bytes32,uint256,IClearing.ClearingOperationType,bytes)", + topic0: "0x02f980b59ce0d0d56d120ea10fd65c1761039caa1b51c65ab99a770ecbf956e9", + }, + { + name: "ClearingOperationCanceled", + signature: "ClearingOperationCanceled(address,address,bytes32,uint256,IClearing.ClearingOperationType)", + topic0: "0x730f579c3f3d2d652106a07acfb467c6ad517dde94018569f5a1def7c0c4a0ad", + }, + { + name: "ClearingOperationReclaimed", + signature: "ClearingOperationReclaimed(address,address,bytes32,uint256,IClearing.ClearingOperationType)", + topic0: "0x0732b59e2bff7ce1143581074f475d0ac1c2f9f702f6380def68b47959e48f7a", + }, ], + errors: [{ name: "ExpirationNotReached", signature: "ExpirationNotReached()", selector: "0x92899bcd" }], factory: (signer, useTimeTravel = false) => - useTimeTravel ? new ERC3643ReadFacetTimeTravel__factory(signer) : new ERC3643ReadFacet__factory(signer), + useTimeTravel ? new ClearingActionsFacetTimeTravel__factory(signer) : new ClearingActionsFacet__factory(signer), }, - ExternalControlListManagementFacet: { - name: "ExternalControlListManagementFacet", + ClearingActionsFixedRateFacet: { + name: "ClearingActionsFixedRateFacet", resolverKey: { - name: "_CONTROL_LIST_MANAGEMENT_RESOLVER_KEY", - value: "0xb28d59e89fa116cebe06d8de737191b637a49d95f7d8d947d47ac000463e7c71", + name: "_CLEARING_ACTIONS_FIXED_RATE_RESOLVER_KEY", + value: "0x497fbb5ba36b9a6b791669e513c877ebfe079b61e0eb37afbd19b696266a0223", }, - inheritance: ["ExternalControlListManagement", "IStaticFunctionSelectors"], + inheritance: ["ClearingActionsFacetBase", "CommonFixedInterestRate"], methods: [ - { name: "addExternalControlList", signature: "addExternalControlList(address)", selector: "0x995e4649" }, - { name: "getExternalControlListsCount", signature: "getExternalControlListsCount()", selector: "0x9bec4167" }, { - name: "getExternalControlListsMembers", - signature: "getExternalControlListsMembers(uint256,uint256)", - selector: "0xc4aa9df3", + name: "activateClearing", + signature: "function activateClearing() returns (bool success_)", + selector: "0xab2d18a9", }, { - name: "initialize_ExternalControlLists", - signature: "initialize_ExternalControlLists(address[])", - selector: "0x0a0a114f", + name: "approveClearingOperationByPartition", + signature: + "function approveClearingOperationByPartition(tuple(uint8 clearingOperationType, bytes32 partition, address tokenHolder, uint256 clearingId) _clearingOperationIdentifier) returns (bool success_, bytes32 partition_)", + selector: "0xd849cea2", }, - { name: "isExternalControlList", signature: "isExternalControlList(address)", selector: "0x07c44711" }, - { name: "removeExternalControlList", signature: "removeExternalControlList(address)", selector: "0xb8913387" }, { - name: "updateExternalControlLists", - signature: "updateExternalControlLists(address[],bool[])", - selector: "0x0ba2b922", + name: "cancelClearingOperationByPartition", + signature: + "function cancelClearingOperationByPartition(tuple(uint8 clearingOperationType, bytes32 partition, address tokenHolder, uint256 clearingId) _clearingOperationIdentifier) returns (bool success_)", + selector: "0x679141fb", }, - ], - events: [ { - name: "AddedToExternalControlLists", - signature: "AddedToExternalControlLists(address,address)", - topic0: "0x3d65de474cd161ee7f82f178e1edc66856cbd5f71f6fb8da9149d8c4b8af24cb", + name: "deactivateClearing", + signature: "function deactivateClearing() returns (bool success_)", + selector: "0x65c21860", }, { - name: "ExternalControlListsUpdated", - signature: "ExternalControlListsUpdated(address,address[],bool[])", - topic0: "0xf33492ee91b93cacfde1a1273fb2fe62ca266ca3e8abd548ea55c38559e0d27d", + name: "initializeClearing", + signature: "function initializeClearing(bool _clearingActive)", + selector: "0x86a0b46a", }, { - name: "RemovedFromExternalControlLists", - signature: "RemovedFromExternalControlLists(address,address)", - topic0: "0xe4058444c388a9cf0c802f605695e3600e235e37a4af77aab2bb582e214e453d", + name: "isClearingActivated", + signature: "function isClearingActivated() view returns (bool)", + selector: "0x4b4d8990", }, - ], - errors: [ { - name: "ExternalControlListsNotUpdated", - signature: "ExternalControlListsNotUpdated(address[],bool[])", - selector: "0xbd29da3f", + name: "reclaimClearingOperationByPartition", + signature: + "function reclaimClearingOperationByPartition(tuple(uint8 clearingOperationType, bytes32 partition, address tokenHolder, uint256 clearingId) _clearingOperationIdentifier) returns (bool success_)", + selector: "0x67e57fe2", }, - { name: "ListedControlList", signature: "ListedControlList(address)", selector: "0x67a1e319" }, - { name: "UnlistedControlList", signature: "UnlistedControlList(address)", selector: "0x6b4e1917" }, ], - factory: (signer, useTimeTravel = false) => - useTimeTravel - ? new ExternalControlListManagementFacetTimeTravel__factory(signer) - : new ExternalControlListManagementFacet__factory(signer), - }, - - ExternalKycListManagementFacet: { - name: "ExternalKycListManagementFacet", - resolverKey: { - name: "_KYC_MANAGEMENT_RESOLVER_KEY", - value: "0x8676785f4d841823214e8ee8c497b3336a210be7559f5571c590249f6203e821", - }, - inheritance: ["ExternalKycListManagement", "IStaticFunctionSelectors"], - methods: [ - { name: "addExternalKycList", signature: "addExternalKycList(address)", selector: "0x7570e044" }, - { name: "getExternalKycListsCount", signature: "getExternalKycListsCount()", selector: "0xd17e889e" }, + events: [ { - name: "getExternalKycListsMembers", - signature: "getExternalKycListsMembers(uint256,uint256)", - selector: "0x999a2459", + name: "ClearingActivated", + signature: "ClearingActivated(address)", + topic0: "0x569080e4e18c204a1d28f09348d781d7cfb170428b2fd33e1f9b7df132674e15", }, { - name: "initialize_ExternalKycLists", - signature: "initialize_ExternalKycLists(address[])", - selector: "0x3ac7fadc", + name: "ClearingDeactivated", + signature: "ClearingDeactivated(address)", + topic0: "0xdb053585e5b33d19247ef59f5b465bcbb9774e6e5ce23932a7e3ffe829cd80a1", }, - { name: "isExternalKycList", signature: "isExternalKycList(address)", selector: "0x20991e17" }, - { name: "isExternallyGranted", signature: "isExternallyGranted(address,IKyc.KycStatus)", selector: "0xd3567130" }, - { name: "removeExternalKycList", signature: "removeExternalKycList(address)", selector: "0x16c94d54" }, - { name: "updateExternalKycLists", signature: "updateExternalKycLists(address[],bool[])", selector: "0xc391576d" }, - ], - events: [ { - name: "AddedToExternalKycLists", - signature: "AddedToExternalKycLists(address,address)", - topic0: "0xbcae4970725fd3096fd0bf87438db521acff164a7290d244ac387de859944b3a", + name: "ClearingOperationApproved", + signature: "ClearingOperationApproved(address,address,bytes32,uint256,IClearing.ClearingOperationType,bytes)", + topic0: "0x02f980b59ce0d0d56d120ea10fd65c1761039caa1b51c65ab99a770ecbf956e9", }, { - name: "ExternalKycListsUpdated", - signature: "ExternalKycListsUpdated(address,address[],bool[])", - topic0: "0xd601f143a291315a9f9c93550bb5299d09b105676ef1a06edcd38df1a9390fbc", + name: "ClearingOperationCanceled", + signature: "ClearingOperationCanceled(address,address,bytes32,uint256,IClearing.ClearingOperationType)", + topic0: "0x730f579c3f3d2d652106a07acfb467c6ad517dde94018569f5a1def7c0c4a0ad", }, { - name: "RemovedFromExternalKycLists", - signature: "RemovedFromExternalKycLists(address,address)", - topic0: "0xf5b81cc6909f27c20ccf2b32d6f34bc169fc165d0d4ea1db1c5f392fca56765f", + name: "ClearingOperationReclaimed", + signature: "ClearingOperationReclaimed(address,address,bytes32,uint256,IClearing.ClearingOperationType)", + topic0: "0x0732b59e2bff7ce1143581074f475d0ac1c2f9f702f6380def68b47959e48f7a", }, ], errors: [ - { - name: "ExternalKycListsNotUpdated", - signature: "ExternalKycListsNotUpdated(address[],bool[])", - selector: "0x8a85ec02", - }, - { name: "ListedKycList", signature: "ListedKycList(address)", selector: "0x91c6b79d" }, - { name: "UnlistedKycList", signature: "UnlistedKycList(address)", selector: "0xf5cc4d79" }, + { name: "ExpirationNotReached", signature: "ExpirationNotReached()", selector: "0x92899bcd" }, + { name: "InterestRateIsFixed", signature: "InterestRateIsFixed()", selector: "0x849d4eb8" }, ], factory: (signer, useTimeTravel = false) => useTimeTravel - ? new ExternalKycListManagementFacetTimeTravel__factory(signer) - : new ExternalKycListManagementFacet__factory(signer), + ? new ClearingActionsFixedRateFacetTimeTravel__factory(signer) + : new ClearingActionsFixedRateFacet__factory(signer), }, - ExternalPauseManagementFacet: { - name: "ExternalPauseManagementFacet", + ClearingActionsKpiLinkedRateFacet: { + name: "ClearingActionsKpiLinkedRateFacet", resolverKey: { - name: "_PAUSE_MANAGEMENT_RESOLVER_KEY", - value: "0xadd2e196c17b4f607e327e46341eedbbbc3dce86ac90ceb3e7244b0a5f8590ac", + name: "_CLEARING_ACTIONS_KPI_LINKED_RATE_RESOLVER_KEY", + value: "0x4960adcd566163ba9edaee816f8739f1c788cace28ad805c136644de52929faa", }, - inheritance: ["ExternalPauseManagement", "IStaticFunctionSelectors"], + inheritance: ["ClearingActionsFacetBase", "CommonKpiLinkedInterestRate"], methods: [ - { name: "addExternalPause", signature: "addExternalPause(address)", selector: "0xd438cff1" }, - { name: "getExternalPausesCount", signature: "getExternalPausesCount()", selector: "0x1e2bc3a6" }, { - name: "getExternalPausesMembers", - signature: "getExternalPausesMembers(uint256,uint256)", - selector: "0x5b175a35", + name: "activateClearing", + signature: "function activateClearing() returns (bool success_)", + selector: "0xab2d18a9", }, - { name: "initialize_ExternalPauses", signature: "initialize_ExternalPauses(address[])", selector: "0x8f88d0d5" }, - { name: "isExternalPause", signature: "isExternalPause(address)", selector: "0xe26e35be" }, - { name: "removeExternalPause", signature: "removeExternalPause(address)", selector: "0x9648d912" }, - { name: "updateExternalPauses", signature: "updateExternalPauses(address[],bool[])", selector: "0x361d714a" }, - ], + { + name: "approveClearingOperationByPartition", + signature: + "function approveClearingOperationByPartition(tuple(uint8 clearingOperationType, bytes32 partition, address tokenHolder, uint256 clearingId) _clearingOperationIdentifier) returns (bool success_, bytes32 partition_)", + selector: "0xd849cea2", + }, + { + name: "cancelClearingOperationByPartition", + signature: + "function cancelClearingOperationByPartition(tuple(uint8 clearingOperationType, bytes32 partition, address tokenHolder, uint256 clearingId) _clearingOperationIdentifier) returns (bool success_)", + selector: "0x679141fb", + }, + { + name: "deactivateClearing", + signature: "function deactivateClearing() returns (bool success_)", + selector: "0x65c21860", + }, + { + name: "initializeClearing", + signature: "function initializeClearing(bool _clearingActive)", + selector: "0x86a0b46a", + }, + { + name: "isClearingActivated", + signature: "function isClearingActivated() view returns (bool)", + selector: "0x4b4d8990", + }, + { + name: "reclaimClearingOperationByPartition", + signature: + "function reclaimClearingOperationByPartition(tuple(uint8 clearingOperationType, bytes32 partition, address tokenHolder, uint256 clearingId) _clearingOperationIdentifier) returns (bool success_)", + selector: "0x67e57fe2", + }, + ], + events: [ + { + name: "ClearingActivated", + signature: "ClearingActivated(address)", + topic0: "0x569080e4e18c204a1d28f09348d781d7cfb170428b2fd33e1f9b7df132674e15", + }, + { + name: "ClearingDeactivated", + signature: "ClearingDeactivated(address)", + topic0: "0xdb053585e5b33d19247ef59f5b465bcbb9774e6e5ce23932a7e3ffe829cd80a1", + }, + { + name: "ClearingOperationApproved", + signature: "ClearingOperationApproved(address,address,bytes32,uint256,IClearing.ClearingOperationType,bytes)", + topic0: "0x02f980b59ce0d0d56d120ea10fd65c1761039caa1b51c65ab99a770ecbf956e9", + }, + { + name: "ClearingOperationCanceled", + signature: "ClearingOperationCanceled(address,address,bytes32,uint256,IClearing.ClearingOperationType)", + topic0: "0x730f579c3f3d2d652106a07acfb467c6ad517dde94018569f5a1def7c0c4a0ad", + }, + { + name: "ClearingOperationReclaimed", + signature: "ClearingOperationReclaimed(address,address,bytes32,uint256,IClearing.ClearingOperationType)", + topic0: "0x0732b59e2bff7ce1143581074f475d0ac1c2f9f702f6380def68b47959e48f7a", + }, + ], + errors: [ + { name: "ExpirationNotReached", signature: "ExpirationNotReached()", selector: "0x92899bcd" }, + { name: "InterestRateIsKpiLinked", signature: "InterestRateIsKpiLinked()", selector: "0x68eba14f" }, + ], + factory: (signer, useTimeTravel = false) => + useTimeTravel + ? new ClearingActionsKpiLinkedRateFacetTimeTravel__factory(signer) + : new ClearingActionsKpiLinkedRateFacet__factory(signer), + }, + + ClearingActionsSustainabilityPerformanceTargetRateFacet: { + name: "ClearingActionsSustainabilityPerformanceTargetRateFacet", + resolverKey: { + name: "_CLEARING_ACTIONS_SUSTAINABILITY_PERFORMANCE_TARGET_RATE_RESOLVER_KEY", + value: "0xae9d6d2e1d9a660994e89e185ab5a3439d2def9baa6ba47fdf854ce0a29a5033", + }, + inheritance: ["ClearingActionsFacetBase", "CommonSustainabilityPerformanceTargetInterestRate"], + methods: [ + { + name: "activateClearing", + signature: "function activateClearing() returns (bool success_)", + selector: "0xab2d18a9", + }, + { + name: "approveClearingOperationByPartition", + signature: + "function approveClearingOperationByPartition(tuple(uint8 clearingOperationType, bytes32 partition, address tokenHolder, uint256 clearingId) _clearingOperationIdentifier) returns (bool success_, bytes32 partition_)", + selector: "0xd849cea2", + }, + { + name: "cancelClearingOperationByPartition", + signature: + "function cancelClearingOperationByPartition(tuple(uint8 clearingOperationType, bytes32 partition, address tokenHolder, uint256 clearingId) _clearingOperationIdentifier) returns (bool success_)", + selector: "0x679141fb", + }, + { + name: "deactivateClearing", + signature: "function deactivateClearing() returns (bool success_)", + selector: "0x65c21860", + }, + { + name: "initializeClearing", + signature: "function initializeClearing(bool _clearingActive)", + selector: "0x86a0b46a", + }, + { + name: "isClearingActivated", + signature: "function isClearingActivated() view returns (bool)", + selector: "0x4b4d8990", + }, + { + name: "reclaimClearingOperationByPartition", + signature: + "function reclaimClearingOperationByPartition(tuple(uint8 clearingOperationType, bytes32 partition, address tokenHolder, uint256 clearingId) _clearingOperationIdentifier) returns (bool success_)", + selector: "0x67e57fe2", + }, + ], events: [ { - name: "AddedToExternalPauses", - signature: "AddedToExternalPauses(address,address)", - topic0: "0x3e5aaed9f36a606341d49642168dd1094c2394f06760d24cb81c89d0a8210c0b", + name: "ClearingActivated", + signature: "ClearingActivated(address)", + topic0: "0x569080e4e18c204a1d28f09348d781d7cfb170428b2fd33e1f9b7df132674e15", + }, + { + name: "ClearingDeactivated", + signature: "ClearingDeactivated(address)", + topic0: "0xdb053585e5b33d19247ef59f5b465bcbb9774e6e5ce23932a7e3ffe829cd80a1", + }, + { + name: "ClearingOperationApproved", + signature: "ClearingOperationApproved(address,address,bytes32,uint256,IClearing.ClearingOperationType,bytes)", + topic0: "0x02f980b59ce0d0d56d120ea10fd65c1761039caa1b51c65ab99a770ecbf956e9", + }, + { + name: "ClearingOperationCanceled", + signature: "ClearingOperationCanceled(address,address,bytes32,uint256,IClearing.ClearingOperationType)", + topic0: "0x730f579c3f3d2d652106a07acfb467c6ad517dde94018569f5a1def7c0c4a0ad", + }, + { + name: "ClearingOperationReclaimed", + signature: "ClearingOperationReclaimed(address,address,bytes32,uint256,IClearing.ClearingOperationType)", + topic0: "0x0732b59e2bff7ce1143581074f475d0ac1c2f9f702f6380def68b47959e48f7a", + }, + ], + errors: [ + { name: "ExpirationNotReached", signature: "ExpirationNotReached()", selector: "0x92899bcd" }, + { + name: "InterestRateIsSustainabilityPerformanceTarget", + signature: "InterestRateIsSustainabilityPerformanceTarget()", + selector: "0x15a15b0a", + }, + ], + factory: (signer, useTimeTravel = false) => + useTimeTravel + ? new ClearingActionsSustainabilityPerformanceTargetRateFacetTimeTravel__factory(signer) + : new ClearingActionsSustainabilityPerformanceTargetRateFacet__factory(signer), + }, + + ClearingHoldCreationFacet: { + name: "ClearingHoldCreationFacet", + resolverKey: { + name: "_CLEARING_HOLDCREATION_RESOLVER_KEY", + value: "0x44f99a141c434fac20d69e7511932ee344d5b37b61851976c83a5df4ca468152", + }, + inheritance: ["ClearingHoldCreationFacetBase", "Common"], + methods: [ + { + name: "clearingCreateHoldByPartition", + signature: + "function clearingCreateHoldByPartition(tuple(bytes32 partition, uint256 expirationTimestamp, bytes data) _clearingOperation, tuple(uint256 amount, uint256 expirationTimestamp, address escrow, address to, bytes data) _hold) returns (bool success_, uint256 clearingId_)", + selector: "0x6ceae590", + }, + { + name: "clearingCreateHoldFromByPartition", + signature: + "function clearingCreateHoldFromByPartition(tuple(tuple(bytes32 partition, uint256 expirationTimestamp, bytes data) clearingOperation, address from, bytes operatorData) _clearingOperationFrom, tuple(uint256 amount, uint256 expirationTimestamp, address escrow, address to, bytes data) _hold) returns (bool success_, uint256 clearingId_)", + selector: "0x5f1cf8c9", + }, + { + name: "getClearingCreateHoldForByPartition", + signature: + "function getClearingCreateHoldForByPartition(bytes32 _partition, address _tokenHolder, uint256 _clearingId) view returns (tuple(uint256 amount, uint256 expirationTimestamp, bytes data, address holdEscrow, uint256 holdExpirationTimestamp, address holdTo, bytes holdData, bytes operatorData, uint8 operatorType) clearingHoldCreationData_)", + selector: "0x190eb09b", + }, + { + name: "operatorClearingCreateHoldByPartition", + signature: + "function operatorClearingCreateHoldByPartition(tuple(tuple(bytes32 partition, uint256 expirationTimestamp, bytes data) clearingOperation, address from, bytes operatorData) _clearingOperationFrom, tuple(uint256 amount, uint256 expirationTimestamp, address escrow, address to, bytes data) _hold) returns (bool success_, uint256 clearingId_)", + selector: "0x7ab0c73f", + }, + { + name: "protectedClearingCreateHoldByPartition", + signature: + "function protectedClearingCreateHoldByPartition(tuple(tuple(bytes32 partition, uint256 expirationTimestamp, bytes data) clearingOperation, address from, uint256 deadline, uint256 nonce) _protectedClearingOperation, tuple(uint256 amount, uint256 expirationTimestamp, address escrow, address to, bytes data) _hold, bytes _signature) returns (bool success_, uint256 clearingId_)", + selector: "0x9b646ab9", + }, + ], + errors: [{ name: "ExpirationNotReached", signature: "ExpirationNotReached()", selector: "0x92899bcd" }], + factory: (signer, useTimeTravel = false) => + useTimeTravel + ? new ClearingHoldCreationFacetTimeTravel__factory(signer) + : new ClearingHoldCreationFacet__factory(signer), + }, + + ClearingHoldCreationFixedRateFacet: { + name: "ClearingHoldCreationFixedRateFacet", + resolverKey: { + name: "_CLEARING_HOLDCREATION_FIXED_RATE_RESOLVER_KEY", + value: "0xf4d60b90b7a9edb9598b8c4aa2a4477e3a65750eab2cce564385f35d882a23c3", + }, + inheritance: ["ClearingHoldCreationFacetBase", "CommonFixedInterestRate"], + methods: [ + { + name: "clearingCreateHoldByPartition", + signature: + "function clearingCreateHoldByPartition(tuple(bytes32 partition, uint256 expirationTimestamp, bytes data) _clearingOperation, tuple(uint256 amount, uint256 expirationTimestamp, address escrow, address to, bytes data) _hold) returns (bool success_, uint256 clearingId_)", + selector: "0x6ceae590", + }, + { + name: "clearingCreateHoldFromByPartition", + signature: + "function clearingCreateHoldFromByPartition(tuple(tuple(bytes32 partition, uint256 expirationTimestamp, bytes data) clearingOperation, address from, bytes operatorData) _clearingOperationFrom, tuple(uint256 amount, uint256 expirationTimestamp, address escrow, address to, bytes data) _hold) returns (bool success_, uint256 clearingId_)", + selector: "0x5f1cf8c9", + }, + { + name: "getClearingCreateHoldForByPartition", + signature: + "function getClearingCreateHoldForByPartition(bytes32 _partition, address _tokenHolder, uint256 _clearingId) view returns (tuple(uint256 amount, uint256 expirationTimestamp, bytes data, address holdEscrow, uint256 holdExpirationTimestamp, address holdTo, bytes holdData, bytes operatorData, uint8 operatorType) clearingHoldCreationData_)", + selector: "0x190eb09b", + }, + { + name: "operatorClearingCreateHoldByPartition", + signature: + "function operatorClearingCreateHoldByPartition(tuple(tuple(bytes32 partition, uint256 expirationTimestamp, bytes data) clearingOperation, address from, bytes operatorData) _clearingOperationFrom, tuple(uint256 amount, uint256 expirationTimestamp, address escrow, address to, bytes data) _hold) returns (bool success_, uint256 clearingId_)", + selector: "0x7ab0c73f", + }, + { + name: "protectedClearingCreateHoldByPartition", + signature: + "function protectedClearingCreateHoldByPartition(tuple(tuple(bytes32 partition, uint256 expirationTimestamp, bytes data) clearingOperation, address from, uint256 deadline, uint256 nonce) _protectedClearingOperation, tuple(uint256 amount, uint256 expirationTimestamp, address escrow, address to, bytes data) _hold, bytes _signature) returns (bool success_, uint256 clearingId_)", + selector: "0x9b646ab9", + }, + ], + errors: [ + { name: "ExpirationNotReached", signature: "ExpirationNotReached()", selector: "0x92899bcd" }, + { name: "InterestRateIsFixed", signature: "InterestRateIsFixed()", selector: "0x849d4eb8" }, + ], + factory: (signer, useTimeTravel = false) => + useTimeTravel + ? new ClearingHoldCreationFixedRateFacetTimeTravel__factory(signer) + : new ClearingHoldCreationFixedRateFacet__factory(signer), + }, + + ClearingHoldCreationKpiLinkedRateFacet: { + name: "ClearingHoldCreationKpiLinkedRateFacet", + resolverKey: { + name: "_CLEARING_HOLDCREATION_KPI_LINKED_RATE_RESOLVER_KEY", + value: "0x1ba40338a89cd18f2799a3e6a86f0be118236340eeff5a19a19a08d3d6e3d08c", + }, + inheritance: ["ClearingHoldCreationFacetBase", "CommonKpiLinkedInterestRate"], + methods: [ + { + name: "clearingCreateHoldByPartition", + signature: + "function clearingCreateHoldByPartition(tuple(bytes32 partition, uint256 expirationTimestamp, bytes data) _clearingOperation, tuple(uint256 amount, uint256 expirationTimestamp, address escrow, address to, bytes data) _hold) returns (bool success_, uint256 clearingId_)", + selector: "0x6ceae590", + }, + { + name: "clearingCreateHoldFromByPartition", + signature: + "function clearingCreateHoldFromByPartition(tuple(tuple(bytes32 partition, uint256 expirationTimestamp, bytes data) clearingOperation, address from, bytes operatorData) _clearingOperationFrom, tuple(uint256 amount, uint256 expirationTimestamp, address escrow, address to, bytes data) _hold) returns (bool success_, uint256 clearingId_)", + selector: "0x5f1cf8c9", + }, + { + name: "getClearingCreateHoldForByPartition", + signature: + "function getClearingCreateHoldForByPartition(bytes32 _partition, address _tokenHolder, uint256 _clearingId) view returns (tuple(uint256 amount, uint256 expirationTimestamp, bytes data, address holdEscrow, uint256 holdExpirationTimestamp, address holdTo, bytes holdData, bytes operatorData, uint8 operatorType) clearingHoldCreationData_)", + selector: "0x190eb09b", + }, + { + name: "operatorClearingCreateHoldByPartition", + signature: + "function operatorClearingCreateHoldByPartition(tuple(tuple(bytes32 partition, uint256 expirationTimestamp, bytes data) clearingOperation, address from, bytes operatorData) _clearingOperationFrom, tuple(uint256 amount, uint256 expirationTimestamp, address escrow, address to, bytes data) _hold) returns (bool success_, uint256 clearingId_)", + selector: "0x7ab0c73f", + }, + { + name: "protectedClearingCreateHoldByPartition", + signature: + "function protectedClearingCreateHoldByPartition(tuple(tuple(bytes32 partition, uint256 expirationTimestamp, bytes data) clearingOperation, address from, uint256 deadline, uint256 nonce) _protectedClearingOperation, tuple(uint256 amount, uint256 expirationTimestamp, address escrow, address to, bytes data) _hold, bytes _signature) returns (bool success_, uint256 clearingId_)", + selector: "0x9b646ab9", + }, + ], + errors: [ + { name: "ExpirationNotReached", signature: "ExpirationNotReached()", selector: "0x92899bcd" }, + { name: "InterestRateIsKpiLinked", signature: "InterestRateIsKpiLinked()", selector: "0x68eba14f" }, + ], + factory: (signer, useTimeTravel = false) => + useTimeTravel + ? new ClearingHoldCreationKpiLinkedRateFacetTimeTravel__factory(signer) + : new ClearingHoldCreationKpiLinkedRateFacet__factory(signer), + }, + + ClearingHoldCreationSustainabilityPerformanceTargetRateFacet: { + name: "ClearingHoldCreationSustainabilityPerformanceTargetRateFacet", + resolverKey: { + name: "_CLEARING_HOLDCREATION_SUSTAINABILITY_PERFORMANCE_TARGET_RATE_RESOLVER_KEY", + value: "0x0e59e36a2b1298d11c3612c3203c6d45cb185879383f5a22617c4f49495c070d", + }, + inheritance: ["ClearingHoldCreationFacetBase", "CommonSustainabilityPerformanceTargetInterestRate"], + methods: [ + { + name: "clearingCreateHoldByPartition", + signature: + "function clearingCreateHoldByPartition(tuple(bytes32 partition, uint256 expirationTimestamp, bytes data) _clearingOperation, tuple(uint256 amount, uint256 expirationTimestamp, address escrow, address to, bytes data) _hold) returns (bool success_, uint256 clearingId_)", + selector: "0x6ceae590", + }, + { + name: "clearingCreateHoldFromByPartition", + signature: + "function clearingCreateHoldFromByPartition(tuple(tuple(bytes32 partition, uint256 expirationTimestamp, bytes data) clearingOperation, address from, bytes operatorData) _clearingOperationFrom, tuple(uint256 amount, uint256 expirationTimestamp, address escrow, address to, bytes data) _hold) returns (bool success_, uint256 clearingId_)", + selector: "0x5f1cf8c9", + }, + { + name: "getClearingCreateHoldForByPartition", + signature: + "function getClearingCreateHoldForByPartition(bytes32 _partition, address _tokenHolder, uint256 _clearingId) view returns (tuple(uint256 amount, uint256 expirationTimestamp, bytes data, address holdEscrow, uint256 holdExpirationTimestamp, address holdTo, bytes holdData, bytes operatorData, uint8 operatorType) clearingHoldCreationData_)", + selector: "0x190eb09b", + }, + { + name: "operatorClearingCreateHoldByPartition", + signature: + "function operatorClearingCreateHoldByPartition(tuple(tuple(bytes32 partition, uint256 expirationTimestamp, bytes data) clearingOperation, address from, bytes operatorData) _clearingOperationFrom, tuple(uint256 amount, uint256 expirationTimestamp, address escrow, address to, bytes data) _hold) returns (bool success_, uint256 clearingId_)", + selector: "0x7ab0c73f", + }, + { + name: "protectedClearingCreateHoldByPartition", + signature: + "function protectedClearingCreateHoldByPartition(tuple(tuple(bytes32 partition, uint256 expirationTimestamp, bytes data) clearingOperation, address from, uint256 deadline, uint256 nonce) _protectedClearingOperation, tuple(uint256 amount, uint256 expirationTimestamp, address escrow, address to, bytes data) _hold, bytes _signature) returns (bool success_, uint256 clearingId_)", + selector: "0x9b646ab9", + }, + ], + errors: [ + { name: "ExpirationNotReached", signature: "ExpirationNotReached()", selector: "0x92899bcd" }, + { + name: "InterestRateIsSustainabilityPerformanceTarget", + signature: "InterestRateIsSustainabilityPerformanceTarget()", + selector: "0x15a15b0a", + }, + ], + factory: (signer, useTimeTravel = false) => + useTimeTravel + ? new ClearingHoldCreationSustainabilityPerformanceTargetRateFacetTimeTravel__factory(signer) + : new ClearingHoldCreationSustainabilityPerformanceTargetRateFacet__factory(signer), + }, + + ClearingReadFacet: { + name: "ClearingReadFacet", + resolverKey: { + name: "_CLEARING_READ_RESOLVER_KEY", + value: "0xebb2e29bdf4edaf4ca66a3f9b7735087f9d0474d56d856e53c94ef00596c0b1e", + }, + inheritance: ["ClearingReadFacetBase", "Common"], + methods: [ + { + name: "getClearedAmountFor", + signature: "function getClearedAmountFor(address _tokenHolder) view returns (uint256 amount_)", + selector: "0x46f8bc94", + }, + { + name: "getClearedAmountForByPartition", + signature: + "function getClearedAmountForByPartition(bytes32 _partition, address _tokenHolder) view returns (uint256 amount_)", + selector: "0xfed5a7d4", + }, + { + name: "getClearingCountForByPartition", + signature: + "function getClearingCountForByPartition(bytes32 _partition, address _tokenHolder, uint8 _clearingOperationType) view returns (uint256 clearingCount_)", + selector: "0xcab70f17", + }, + { + name: "getClearingThirdParty", + signature: + "function getClearingThirdParty(bytes32 _partition, address _tokenHolder, uint8 _clearingOpeartionType, uint256 _clearingId) view returns (address thirdParty_)", + selector: "0x2714916d", + }, + { + name: "getClearingsIdForByPartition", + signature: + "function getClearingsIdForByPartition(bytes32 _partition, address _tokenHolder, uint8 _clearingOperationType, uint256 _pageIndex, uint256 _pageLength) view returns (uint256[] clearingsId_)", + selector: "0xcf38dab5", + }, + ], + errors: [{ name: "ExpirationNotReached", signature: "ExpirationNotReached()", selector: "0x92899bcd" }], + factory: (signer, useTimeTravel = false) => + useTimeTravel ? new ClearingReadFacetTimeTravel__factory(signer) : new ClearingReadFacet__factory(signer), + }, + + ClearingReadFixedRateFacet: { + name: "ClearingReadFixedRateFacet", + resolverKey: { + name: "_CLEARING_READ_FIXED_RATE_RESOLVER_KEY", + value: "0xcd312e798e5b62ec98cc7c8ac3547a640f68ee74e351b73397be02dab3d5b14f", + }, + inheritance: ["ClearingReadFacetBase", "CommonFixedInterestRate"], + methods: [ + { + name: "getClearedAmountFor", + signature: "function getClearedAmountFor(address _tokenHolder) view returns (uint256 amount_)", + selector: "0x46f8bc94", + }, + { + name: "getClearedAmountForByPartition", + signature: + "function getClearedAmountForByPartition(bytes32 _partition, address _tokenHolder) view returns (uint256 amount_)", + selector: "0xfed5a7d4", + }, + { + name: "getClearingCountForByPartition", + signature: + "function getClearingCountForByPartition(bytes32 _partition, address _tokenHolder, uint8 _clearingOperationType) view returns (uint256 clearingCount_)", + selector: "0xcab70f17", + }, + { + name: "getClearingThirdParty", + signature: + "function getClearingThirdParty(bytes32 _partition, address _tokenHolder, uint8 _clearingOpeartionType, uint256 _clearingId) view returns (address thirdParty_)", + selector: "0x2714916d", + }, + { + name: "getClearingsIdForByPartition", + signature: + "function getClearingsIdForByPartition(bytes32 _partition, address _tokenHolder, uint8 _clearingOperationType, uint256 _pageIndex, uint256 _pageLength) view returns (uint256[] clearingsId_)", + selector: "0xcf38dab5", + }, + ], + errors: [ + { name: "ExpirationNotReached", signature: "ExpirationNotReached()", selector: "0x92899bcd" }, + { name: "InterestRateIsFixed", signature: "InterestRateIsFixed()", selector: "0x849d4eb8" }, + ], + factory: (signer, useTimeTravel = false) => + useTimeTravel + ? new ClearingReadFixedRateFacetTimeTravel__factory(signer) + : new ClearingReadFixedRateFacet__factory(signer), + }, + + ClearingReadKpiLinkedRateFacet: { + name: "ClearingReadKpiLinkedRateFacet", + resolverKey: { + name: "_CLEARING_READ_KPI_LINKED_RATE_RESOLVER_KEY", + value: "0x3740ea12ff1c9c37f216ba72884079bcaabe99f51cdd9b019be5b218ba5db0e2", + }, + inheritance: ["ClearingReadFacetBase", "CommonKpiLinkedInterestRate"], + methods: [ + { + name: "getClearedAmountFor", + signature: "function getClearedAmountFor(address _tokenHolder) view returns (uint256 amount_)", + selector: "0x46f8bc94", + }, + { + name: "getClearedAmountForByPartition", + signature: + "function getClearedAmountForByPartition(bytes32 _partition, address _tokenHolder) view returns (uint256 amount_)", + selector: "0xfed5a7d4", + }, + { + name: "getClearingCountForByPartition", + signature: + "function getClearingCountForByPartition(bytes32 _partition, address _tokenHolder, uint8 _clearingOperationType) view returns (uint256 clearingCount_)", + selector: "0xcab70f17", + }, + { + name: "getClearingThirdParty", + signature: + "function getClearingThirdParty(bytes32 _partition, address _tokenHolder, uint8 _clearingOpeartionType, uint256 _clearingId) view returns (address thirdParty_)", + selector: "0x2714916d", + }, + { + name: "getClearingsIdForByPartition", + signature: + "function getClearingsIdForByPartition(bytes32 _partition, address _tokenHolder, uint8 _clearingOperationType, uint256 _pageIndex, uint256 _pageLength) view returns (uint256[] clearingsId_)", + selector: "0xcf38dab5", + }, + ], + errors: [ + { name: "ExpirationNotReached", signature: "ExpirationNotReached()", selector: "0x92899bcd" }, + { name: "InterestRateIsKpiLinked", signature: "InterestRateIsKpiLinked()", selector: "0x68eba14f" }, + ], + factory: (signer, useTimeTravel = false) => + useTimeTravel + ? new ClearingReadKpiLinkedRateFacetTimeTravel__factory(signer) + : new ClearingReadKpiLinkedRateFacet__factory(signer), + }, + + ClearingReadSustainabilityPerformanceTargetRateFacet: { + name: "ClearingReadSustainabilityPerformanceTargetRateFacet", + resolverKey: { + name: "_CLEARING_READ_SUSTAINABILITY_PERFORMANCE_TARGET_RATE_RESOLVER_KEY", + value: "0xa188d3ee426a514ccfe03470d196ed29da48de0ae59898d9b5a30ec680515a11", + }, + inheritance: ["ClearingReadFacetBase", "CommonSustainabilityPerformanceTargetInterestRate"], + methods: [ + { + name: "getClearedAmountFor", + signature: "function getClearedAmountFor(address _tokenHolder) view returns (uint256 amount_)", + selector: "0x46f8bc94", + }, + { + name: "getClearedAmountForByPartition", + signature: + "function getClearedAmountForByPartition(bytes32 _partition, address _tokenHolder) view returns (uint256 amount_)", + selector: "0xfed5a7d4", + }, + { + name: "getClearingCountForByPartition", + signature: + "function getClearingCountForByPartition(bytes32 _partition, address _tokenHolder, uint8 _clearingOperationType) view returns (uint256 clearingCount_)", + selector: "0xcab70f17", + }, + { + name: "getClearingThirdParty", + signature: + "function getClearingThirdParty(bytes32 _partition, address _tokenHolder, uint8 _clearingOpeartionType, uint256 _clearingId) view returns (address thirdParty_)", + selector: "0x2714916d", + }, + { + name: "getClearingsIdForByPartition", + signature: + "function getClearingsIdForByPartition(bytes32 _partition, address _tokenHolder, uint8 _clearingOperationType, uint256 _pageIndex, uint256 _pageLength) view returns (uint256[] clearingsId_)", + selector: "0xcf38dab5", + }, + ], + errors: [ + { name: "ExpirationNotReached", signature: "ExpirationNotReached()", selector: "0x92899bcd" }, + { + name: "InterestRateIsSustainabilityPerformanceTarget", + signature: "InterestRateIsSustainabilityPerformanceTarget()", + selector: "0x15a15b0a", + }, + ], + factory: (signer, useTimeTravel = false) => + useTimeTravel + ? new ClearingReadSustainabilityPerformanceTargetRateFacetTimeTravel__factory(signer) + : new ClearingReadSustainabilityPerformanceTargetRateFacet__factory(signer), + }, + + ClearingRedeemFacet: { + name: "ClearingRedeemFacet", + resolverKey: { + name: "_CLEARING_REDEEM_RESOLVER_KEY", + value: "0xb341e7aa749da43976c189209de51ccdf838af9f964cd27340b914d5b2aeba97", + }, + inheritance: ["ClearingRedeemFacetBase", "Common"], + methods: [ + { + name: "clearingRedeemByPartition", + signature: + "function clearingRedeemByPartition(tuple(bytes32 partition, uint256 expirationTimestamp, bytes data) _clearingOperation, uint256 _amount) returns (bool success_, uint256 clearingId_)", + selector: "0x39921b12", + }, + { + name: "clearingRedeemFromByPartition", + signature: + "function clearingRedeemFromByPartition(tuple(tuple(bytes32 partition, uint256 expirationTimestamp, bytes data) clearingOperation, address from, bytes operatorData) _clearingOperationFrom, uint256 _amount) returns (bool success_, uint256 clearingId_)", + selector: "0x35114a78", + }, + { + name: "getClearingRedeemForByPartition", + signature: + "function getClearingRedeemForByPartition(bytes32 _partition, address _tokenHolder, uint256 _clearingId) view returns (tuple(uint256 amount, uint256 expirationTimestamp, bytes data, bytes operatorData, uint8 operatorType) clearingRedeemData_)", + selector: "0x4ac3d940", + }, + { + name: "operatorClearingRedeemByPartition", + signature: + "function operatorClearingRedeemByPartition(tuple(tuple(bytes32 partition, uint256 expirationTimestamp, bytes data) clearingOperation, address from, bytes operatorData) _clearingOperationFrom, uint256 _amount) returns (bool success_, uint256 clearingId_)", + selector: "0xc1d6d5a0", + }, + { + name: "protectedClearingRedeemByPartition", + signature: + "function protectedClearingRedeemByPartition(tuple(tuple(bytes32 partition, uint256 expirationTimestamp, bytes data) clearingOperation, address from, uint256 deadline, uint256 nonce) _protectedClearingOperation, uint256 _amount, bytes _signature) returns (bool success_, uint256 clearingId_)", + selector: "0x498f1f65", + }, + ], + errors: [{ name: "ExpirationNotReached", signature: "ExpirationNotReached()", selector: "0x92899bcd" }], + factory: (signer, useTimeTravel = false) => + useTimeTravel ? new ClearingRedeemFacetTimeTravel__factory(signer) : new ClearingRedeemFacet__factory(signer), + }, + + ClearingRedeemFixedRateFacet: { + name: "ClearingRedeemFixedRateFacet", + resolverKey: { + name: "_CLEARING_REDEEM_FIXED_RATE_RESOLVER_KEY", + value: "0xa8edf3401d5e3f8e9a45b0992984a31a2522a24ed793e5e7980f8d66508473c9", + }, + inheritance: ["ClearingRedeemFacetBase", "CommonFixedInterestRate"], + methods: [ + { + name: "clearingRedeemByPartition", + signature: + "function clearingRedeemByPartition(tuple(bytes32 partition, uint256 expirationTimestamp, bytes data) _clearingOperation, uint256 _amount) returns (bool success_, uint256 clearingId_)", + selector: "0x39921b12", + }, + { + name: "clearingRedeemFromByPartition", + signature: + "function clearingRedeemFromByPartition(tuple(tuple(bytes32 partition, uint256 expirationTimestamp, bytes data) clearingOperation, address from, bytes operatorData) _clearingOperationFrom, uint256 _amount) returns (bool success_, uint256 clearingId_)", + selector: "0x35114a78", + }, + { + name: "getClearingRedeemForByPartition", + signature: + "function getClearingRedeemForByPartition(bytes32 _partition, address _tokenHolder, uint256 _clearingId) view returns (tuple(uint256 amount, uint256 expirationTimestamp, bytes data, bytes operatorData, uint8 operatorType) clearingRedeemData_)", + selector: "0x4ac3d940", + }, + { + name: "operatorClearingRedeemByPartition", + signature: + "function operatorClearingRedeemByPartition(tuple(tuple(bytes32 partition, uint256 expirationTimestamp, bytes data) clearingOperation, address from, bytes operatorData) _clearingOperationFrom, uint256 _amount) returns (bool success_, uint256 clearingId_)", + selector: "0xc1d6d5a0", + }, + { + name: "protectedClearingRedeemByPartition", + signature: + "function protectedClearingRedeemByPartition(tuple(tuple(bytes32 partition, uint256 expirationTimestamp, bytes data) clearingOperation, address from, uint256 deadline, uint256 nonce) _protectedClearingOperation, uint256 _amount, bytes _signature) returns (bool success_, uint256 clearingId_)", + selector: "0x498f1f65", + }, + ], + errors: [ + { name: "ExpirationNotReached", signature: "ExpirationNotReached()", selector: "0x92899bcd" }, + { name: "InterestRateIsFixed", signature: "InterestRateIsFixed()", selector: "0x849d4eb8" }, + ], + factory: (signer, useTimeTravel = false) => + useTimeTravel + ? new ClearingRedeemFixedRateFacetTimeTravel__factory(signer) + : new ClearingRedeemFixedRateFacet__factory(signer), + }, + + ClearingRedeemKpiLinkedRateFacet: { + name: "ClearingRedeemKpiLinkedRateFacet", + resolverKey: { + name: "_CLEARING_REDEEM_KPI_LINKED_RATE_RESOLVER_KEY", + value: "0xc38aaff0161104c594b7a323af3facf5beb1e304b730fcbee09f5eed74b11375", + }, + inheritance: ["ClearingRedeemFacetBase", "CommonKpiLinkedInterestRate"], + methods: [ + { + name: "clearingRedeemByPartition", + signature: + "function clearingRedeemByPartition(tuple(bytes32 partition, uint256 expirationTimestamp, bytes data) _clearingOperation, uint256 _amount) returns (bool success_, uint256 clearingId_)", + selector: "0x39921b12", + }, + { + name: "clearingRedeemFromByPartition", + signature: + "function clearingRedeemFromByPartition(tuple(tuple(bytes32 partition, uint256 expirationTimestamp, bytes data) clearingOperation, address from, bytes operatorData) _clearingOperationFrom, uint256 _amount) returns (bool success_, uint256 clearingId_)", + selector: "0x35114a78", + }, + { + name: "getClearingRedeemForByPartition", + signature: + "function getClearingRedeemForByPartition(bytes32 _partition, address _tokenHolder, uint256 _clearingId) view returns (tuple(uint256 amount, uint256 expirationTimestamp, bytes data, bytes operatorData, uint8 operatorType) clearingRedeemData_)", + selector: "0x4ac3d940", + }, + { + name: "operatorClearingRedeemByPartition", + signature: + "function operatorClearingRedeemByPartition(tuple(tuple(bytes32 partition, uint256 expirationTimestamp, bytes data) clearingOperation, address from, bytes operatorData) _clearingOperationFrom, uint256 _amount) returns (bool success_, uint256 clearingId_)", + selector: "0xc1d6d5a0", + }, + { + name: "protectedClearingRedeemByPartition", + signature: + "function protectedClearingRedeemByPartition(tuple(tuple(bytes32 partition, uint256 expirationTimestamp, bytes data) clearingOperation, address from, uint256 deadline, uint256 nonce) _protectedClearingOperation, uint256 _amount, bytes _signature) returns (bool success_, uint256 clearingId_)", + selector: "0x498f1f65", + }, + ], + errors: [ + { name: "ExpirationNotReached", signature: "ExpirationNotReached()", selector: "0x92899bcd" }, + { name: "InterestRateIsKpiLinked", signature: "InterestRateIsKpiLinked()", selector: "0x68eba14f" }, + ], + factory: (signer, useTimeTravel = false) => + useTimeTravel + ? new ClearingRedeemKpiLinkedRateFacetTimeTravel__factory(signer) + : new ClearingRedeemKpiLinkedRateFacet__factory(signer), + }, + + ClearingRedeemSustainabilityPerformanceTargetRateFacet: { + name: "ClearingRedeemSustainabilityPerformanceTargetRateFacet", + resolverKey: { + name: "_CLEARING_REDEEM_SUSTAINABILITY_PERFORMANCE_TARGET_RATE_RESOLVER_KEY", + value: "0xc4731d62375990b9721357983c8f6acf3fdc78d7814919c187607f653b768d5d", + }, + inheritance: ["ClearingRedeemFacetBase", "CommonSustainabilityPerformanceTargetInterestRate"], + methods: [ + { + name: "clearingRedeemByPartition", + signature: + "function clearingRedeemByPartition(tuple(bytes32 partition, uint256 expirationTimestamp, bytes data) _clearingOperation, uint256 _amount) returns (bool success_, uint256 clearingId_)", + selector: "0x39921b12", + }, + { + name: "clearingRedeemFromByPartition", + signature: + "function clearingRedeemFromByPartition(tuple(tuple(bytes32 partition, uint256 expirationTimestamp, bytes data) clearingOperation, address from, bytes operatorData) _clearingOperationFrom, uint256 _amount) returns (bool success_, uint256 clearingId_)", + selector: "0x35114a78", + }, + { + name: "getClearingRedeemForByPartition", + signature: + "function getClearingRedeemForByPartition(bytes32 _partition, address _tokenHolder, uint256 _clearingId) view returns (tuple(uint256 amount, uint256 expirationTimestamp, bytes data, bytes operatorData, uint8 operatorType) clearingRedeemData_)", + selector: "0x4ac3d940", + }, + { + name: "operatorClearingRedeemByPartition", + signature: + "function operatorClearingRedeemByPartition(tuple(tuple(bytes32 partition, uint256 expirationTimestamp, bytes data) clearingOperation, address from, bytes operatorData) _clearingOperationFrom, uint256 _amount) returns (bool success_, uint256 clearingId_)", + selector: "0xc1d6d5a0", + }, + { + name: "protectedClearingRedeemByPartition", + signature: + "function protectedClearingRedeemByPartition(tuple(tuple(bytes32 partition, uint256 expirationTimestamp, bytes data) clearingOperation, address from, uint256 deadline, uint256 nonce) _protectedClearingOperation, uint256 _amount, bytes _signature) returns (bool success_, uint256 clearingId_)", + selector: "0x498f1f65", + }, + ], + errors: [ + { name: "ExpirationNotReached", signature: "ExpirationNotReached()", selector: "0x92899bcd" }, + { + name: "InterestRateIsSustainabilityPerformanceTarget", + signature: "InterestRateIsSustainabilityPerformanceTarget()", + selector: "0x15a15b0a", + }, + ], + factory: (signer, useTimeTravel = false) => + useTimeTravel + ? new ClearingRedeemSustainabilityPerformanceTargetRateFacetTimeTravel__factory(signer) + : new ClearingRedeemSustainabilityPerformanceTargetRateFacet__factory(signer), + }, + + ClearingTransferFacet: { + name: "ClearingTransferFacet", + resolverKey: { + name: "_CLEARING_TRANSFER_RESOLVER_KEY", + value: "0x7399d03db62430bec60ca2c3eacf98b1b7e2253f17593ef7a226d759442e0928", + }, + inheritance: ["ClearingTransferFacetBase", "Common"], + methods: [ + { + name: "clearingTransferByPartition", + signature: + "function clearingTransferByPartition(tuple(bytes32 partition, uint256 expirationTimestamp, bytes data) _clearingOperation, uint256 _amount, address _to) returns (bool success_, uint256 clearingId_)", + selector: "0xde32aaa8", + }, + { + name: "clearingTransferFromByPartition", + signature: + "function clearingTransferFromByPartition(tuple(tuple(bytes32 partition, uint256 expirationTimestamp, bytes data) clearingOperation, address from, bytes operatorData) _clearingOperationFrom, uint256 _amount, address _to) returns (bool success_, uint256 clearingId_)", + selector: "0x5c829d67", + }, + { + name: "getClearingTransferForByPartition", + signature: + "function getClearingTransferForByPartition(bytes32 _partition, address _tokenHolder, uint256 _clearingId) view returns (tuple(uint256 amount, uint256 expirationTimestamp, address destination, bytes data, bytes operatorData, uint8 operatorType) clearingTransferData_)", + selector: "0x6f438552", + }, + { + name: "operatorClearingTransferByPartition", + signature: + "function operatorClearingTransferByPartition(tuple(tuple(bytes32 partition, uint256 expirationTimestamp, bytes data) clearingOperation, address from, bytes operatorData) _clearingOperationFrom, uint256 _amount, address _to) returns (bool success_, uint256 clearingId_)", + selector: "0x2ba8508d", + }, + { + name: "protectedClearingTransferByPartition", + signature: + "function protectedClearingTransferByPartition(tuple(tuple(bytes32 partition, uint256 expirationTimestamp, bytes data) clearingOperation, address from, uint256 deadline, uint256 nonce) _protectedClearingOperation, uint256 _amount, address _to, bytes _signature) returns (bool success_, uint256 clearingId_)", + selector: "0x1f4eef27", + }, + ], + errors: [{ name: "ExpirationNotReached", signature: "ExpirationNotReached()", selector: "0x92899bcd" }], + factory: (signer, useTimeTravel = false) => + useTimeTravel ? new ClearingTransferFacetTimeTravel__factory(signer) : new ClearingTransferFacet__factory(signer), + }, + + ClearingTransferFixedRateFacet: { + name: "ClearingTransferFixedRateFacet", + resolverKey: { + name: "_CLEARING_TRANSFER_FIXED_RATE_RESOLVER_KEY", + value: "0x1ba056fe3e7ef86779515a9e7f364e84af0f60eb5f4175ac6d6e6e3f4c05fffb", + }, + inheritance: ["ClearingTransferFacetBase", "CommonFixedInterestRate"], + methods: [ + { + name: "clearingTransferByPartition", + signature: + "function clearingTransferByPartition(tuple(bytes32 partition, uint256 expirationTimestamp, bytes data) _clearingOperation, uint256 _amount, address _to) returns (bool success_, uint256 clearingId_)", + selector: "0xde32aaa8", + }, + { + name: "clearingTransferFromByPartition", + signature: + "function clearingTransferFromByPartition(tuple(tuple(bytes32 partition, uint256 expirationTimestamp, bytes data) clearingOperation, address from, bytes operatorData) _clearingOperationFrom, uint256 _amount, address _to) returns (bool success_, uint256 clearingId_)", + selector: "0x5c829d67", + }, + { + name: "getClearingTransferForByPartition", + signature: + "function getClearingTransferForByPartition(bytes32 _partition, address _tokenHolder, uint256 _clearingId) view returns (tuple(uint256 amount, uint256 expirationTimestamp, address destination, bytes data, bytes operatorData, uint8 operatorType) clearingTransferData_)", + selector: "0x6f438552", + }, + { + name: "operatorClearingTransferByPartition", + signature: + "function operatorClearingTransferByPartition(tuple(tuple(bytes32 partition, uint256 expirationTimestamp, bytes data) clearingOperation, address from, bytes operatorData) _clearingOperationFrom, uint256 _amount, address _to) returns (bool success_, uint256 clearingId_)", + selector: "0x2ba8508d", + }, + { + name: "protectedClearingTransferByPartition", + signature: + "function protectedClearingTransferByPartition(tuple(tuple(bytes32 partition, uint256 expirationTimestamp, bytes data) clearingOperation, address from, uint256 deadline, uint256 nonce) _protectedClearingOperation, uint256 _amount, address _to, bytes _signature) returns (bool success_, uint256 clearingId_)", + selector: "0x1f4eef27", + }, + ], + errors: [ + { name: "ExpirationNotReached", signature: "ExpirationNotReached()", selector: "0x92899bcd" }, + { name: "InterestRateIsFixed", signature: "InterestRateIsFixed()", selector: "0x849d4eb8" }, + ], + factory: (signer, useTimeTravel = false) => + useTimeTravel + ? new ClearingTransferFixedRateFacetTimeTravel__factory(signer) + : new ClearingTransferFixedRateFacet__factory(signer), + }, + + ClearingTransferKpiLinkedRateFacet: { + name: "ClearingTransferKpiLinkedRateFacet", + resolverKey: { + name: "_CLEARING_TRANSFER_KPI_LINKED_RATE_RESOLVER_KEY", + value: "0x1b229a6d3b8a8ecba97d1e7c2c4a89c4cf71b9b5852317278f57384d728f8bde", + }, + inheritance: ["ClearingTransferFacetBase", "CommonKpiLinkedInterestRate"], + methods: [ + { + name: "clearingTransferByPartition", + signature: + "function clearingTransferByPartition(tuple(bytes32 partition, uint256 expirationTimestamp, bytes data) _clearingOperation, uint256 _amount, address _to) returns (bool success_, uint256 clearingId_)", + selector: "0xde32aaa8", + }, + { + name: "clearingTransferFromByPartition", + signature: + "function clearingTransferFromByPartition(tuple(tuple(bytes32 partition, uint256 expirationTimestamp, bytes data) clearingOperation, address from, bytes operatorData) _clearingOperationFrom, uint256 _amount, address _to) returns (bool success_, uint256 clearingId_)", + selector: "0x5c829d67", + }, + { + name: "getClearingTransferForByPartition", + signature: + "function getClearingTransferForByPartition(bytes32 _partition, address _tokenHolder, uint256 _clearingId) view returns (tuple(uint256 amount, uint256 expirationTimestamp, address destination, bytes data, bytes operatorData, uint8 operatorType) clearingTransferData_)", + selector: "0x6f438552", + }, + { + name: "operatorClearingTransferByPartition", + signature: + "function operatorClearingTransferByPartition(tuple(tuple(bytes32 partition, uint256 expirationTimestamp, bytes data) clearingOperation, address from, bytes operatorData) _clearingOperationFrom, uint256 _amount, address _to) returns (bool success_, uint256 clearingId_)", + selector: "0x2ba8508d", + }, + { + name: "protectedClearingTransferByPartition", + signature: + "function protectedClearingTransferByPartition(tuple(tuple(bytes32 partition, uint256 expirationTimestamp, bytes data) clearingOperation, address from, uint256 deadline, uint256 nonce) _protectedClearingOperation, uint256 _amount, address _to, bytes _signature) returns (bool success_, uint256 clearingId_)", + selector: "0x1f4eef27", + }, + ], + errors: [ + { name: "ExpirationNotReached", signature: "ExpirationNotReached()", selector: "0x92899bcd" }, + { name: "InterestRateIsKpiLinked", signature: "InterestRateIsKpiLinked()", selector: "0x68eba14f" }, + ], + factory: (signer, useTimeTravel = false) => + useTimeTravel + ? new ClearingTransferKpiLinkedRateFacetTimeTravel__factory(signer) + : new ClearingTransferKpiLinkedRateFacet__factory(signer), + }, + + ClearingTransferSustainabilityPerformanceTargetRateFacet: { + name: "ClearingTransferSustainabilityPerformanceTargetRateFacet", + resolverKey: { + name: "_CLEARING_TRANSFER_SUSTAINABILITY_PERFORMANCE_TARGET_RATE_RESOLVER_KEY", + value: "0x7e29efe8ee5285a43acddbe766fd9219266a74cb24ed3331b4e350d8e263d0c7", + }, + inheritance: ["ClearingTransferFacetBase", "CommonSustainabilityPerformanceTargetInterestRate"], + methods: [ + { + name: "clearingTransferByPartition", + signature: + "function clearingTransferByPartition(tuple(bytes32 partition, uint256 expirationTimestamp, bytes data) _clearingOperation, uint256 _amount, address _to) returns (bool success_, uint256 clearingId_)", + selector: "0xde32aaa8", + }, + { + name: "clearingTransferFromByPartition", + signature: + "function clearingTransferFromByPartition(tuple(tuple(bytes32 partition, uint256 expirationTimestamp, bytes data) clearingOperation, address from, bytes operatorData) _clearingOperationFrom, uint256 _amount, address _to) returns (bool success_, uint256 clearingId_)", + selector: "0x5c829d67", + }, + { + name: "getClearingTransferForByPartition", + signature: + "function getClearingTransferForByPartition(bytes32 _partition, address _tokenHolder, uint256 _clearingId) view returns (tuple(uint256 amount, uint256 expirationTimestamp, address destination, bytes data, bytes operatorData, uint8 operatorType) clearingTransferData_)", + selector: "0x6f438552", + }, + { + name: "operatorClearingTransferByPartition", + signature: + "function operatorClearingTransferByPartition(tuple(tuple(bytes32 partition, uint256 expirationTimestamp, bytes data) clearingOperation, address from, bytes operatorData) _clearingOperationFrom, uint256 _amount, address _to) returns (bool success_, uint256 clearingId_)", + selector: "0x2ba8508d", + }, + { + name: "protectedClearingTransferByPartition", + signature: + "function protectedClearingTransferByPartition(tuple(tuple(bytes32 partition, uint256 expirationTimestamp, bytes data) clearingOperation, address from, uint256 deadline, uint256 nonce) _protectedClearingOperation, uint256 _amount, address _to, bytes _signature) returns (bool success_, uint256 clearingId_)", + selector: "0x1f4eef27", + }, + ], + errors: [ + { name: "ExpirationNotReached", signature: "ExpirationNotReached()", selector: "0x92899bcd" }, + { + name: "InterestRateIsSustainabilityPerformanceTarget", + signature: "InterestRateIsSustainabilityPerformanceTarget()", + selector: "0x15a15b0a", + }, + ], + factory: (signer, useTimeTravel = false) => + useTimeTravel + ? new ClearingTransferSustainabilityPerformanceTargetRateFacetTimeTravel__factory(signer) + : new ClearingTransferSustainabilityPerformanceTargetRateFacet__factory(signer), + }, + + ControlListFacet: { + name: "ControlListFacet", + resolverKey: { + name: "_CONTROL_LIST_RESOLVER_KEY", + value: "0xfbb1491bfcecd95f79409bd5a4b69a4ba1e5573573372f5d2d66c11e3016414c", + }, + inheritance: ["ControlListFacetBase", "Common"], + methods: [ + { + name: "addToControlList", + signature: "function addToControlList(address _account) returns (bool success_)", + selector: "0xe8204966", + }, + { + name: "getControlListCount", + signature: "function getControlListCount() view returns (uint256 controlListCount_)", + selector: "0x6b5d2ea5", + }, + { + name: "getControlListMembers", + signature: + "function getControlListMembers(uint256 _pageIndex, uint256 _pageLength) view returns (address[] members_)", + selector: "0xcad7e56b", + }, + { + name: "getControlListType", + signature: "function getControlListType() view returns (bool)", + selector: "0x1d46c292", + }, + { + name: "initialize_ControlList", + signature: "function initialize_ControlList(bool _isWhiteList)", + selector: "0xf88bd9f2", + }, + { + name: "isInControlList", + signature: "function isInControlList(address _account) view returns (bool)", + selector: "0xfd5b071b", + }, + { + name: "removeFromControlList", + signature: "function removeFromControlList(address _account) returns (bool success_)", + selector: "0x47b52d3b", + }, + ], + events: [ + { + name: "AddedToControlList", + signature: "AddedToControlList(address,address)", + topic0: "0x5af5dacbf5ee5519e494e4ef1304293dfca9b64fc96860222581d0524c5a5621", + }, + { + name: "RemovedFromControlList", + signature: "RemovedFromControlList(address,address)", + topic0: "0x745acaacce1108849ac3b5a8667c1fd5044b5515e7d7507952493ba6a1b96d37", + }, + ], + errors: [ + { name: "ExpirationNotReached", signature: "ExpirationNotReached()", selector: "0x92899bcd" }, + { name: "ListedAccount", signature: "ListedAccount(address)", selector: "0x1a4a04ba" }, + { name: "UnlistedAccount", signature: "UnlistedAccount(address)", selector: "0x4c463ddc" }, + ], + factory: (signer, useTimeTravel = false) => + useTimeTravel ? new ControlListFacetTimeTravel__factory(signer) : new ControlListFacet__factory(signer), + }, + + ControlListFixedRateFacet: { + name: "ControlListFixedRateFacet", + resolverKey: { + name: "_CONTROL_LIST_FIXED_RATE_RESOLVER_KEY", + value: "0x083b7e0957ebd3a0f69bf432ce05d94c1848cbdbf0e66664919c4803b14dfdf8", + }, + inheritance: ["ControlListFacetBase", "CommonFixedInterestRate"], + methods: [ + { + name: "addToControlList", + signature: "function addToControlList(address _account) returns (bool success_)", + selector: "0xe8204966", + }, + { + name: "getControlListCount", + signature: "function getControlListCount() view returns (uint256 controlListCount_)", + selector: "0x6b5d2ea5", + }, + { + name: "getControlListMembers", + signature: + "function getControlListMembers(uint256 _pageIndex, uint256 _pageLength) view returns (address[] members_)", + selector: "0xcad7e56b", + }, + { + name: "getControlListType", + signature: "function getControlListType() view returns (bool)", + selector: "0x1d46c292", + }, + { + name: "initialize_ControlList", + signature: "function initialize_ControlList(bool _isWhiteList)", + selector: "0xf88bd9f2", + }, + { + name: "isInControlList", + signature: "function isInControlList(address _account) view returns (bool)", + selector: "0xfd5b071b", + }, + { + name: "removeFromControlList", + signature: "function removeFromControlList(address _account) returns (bool success_)", + selector: "0x47b52d3b", + }, + ], + events: [ + { + name: "AddedToControlList", + signature: "AddedToControlList(address,address)", + topic0: "0x5af5dacbf5ee5519e494e4ef1304293dfca9b64fc96860222581d0524c5a5621", + }, + { + name: "RemovedFromControlList", + signature: "RemovedFromControlList(address,address)", + topic0: "0x745acaacce1108849ac3b5a8667c1fd5044b5515e7d7507952493ba6a1b96d37", + }, + ], + errors: [ + { name: "ExpirationNotReached", signature: "ExpirationNotReached()", selector: "0x92899bcd" }, + { name: "InterestRateIsFixed", signature: "InterestRateIsFixed()", selector: "0x849d4eb8" }, + { name: "ListedAccount", signature: "ListedAccount(address)", selector: "0x1a4a04ba" }, + { name: "UnlistedAccount", signature: "UnlistedAccount(address)", selector: "0x4c463ddc" }, + ], + factory: (signer, useTimeTravel = false) => + useTimeTravel + ? new ControlListFixedRateFacetTimeTravel__factory(signer) + : new ControlListFixedRateFacet__factory(signer), + }, + + ControlListKpiLinkedRateFacet: { + name: "ControlListKpiLinkedRateFacet", + resolverKey: { + name: "_CONTROL_LIST_KPI_LINKED_RATE_RESOLVER_KEY", + value: "0xaaa80b13f9a051b7f9546e92763bedfbe259f511da870cbb1133fe0e79c8eac5", + }, + inheritance: ["ControlListFacetBase", "CommonKpiLinkedInterestRate"], + methods: [ + { + name: "addToControlList", + signature: "function addToControlList(address _account) returns (bool success_)", + selector: "0xe8204966", + }, + { + name: "getControlListCount", + signature: "function getControlListCount() view returns (uint256 controlListCount_)", + selector: "0x6b5d2ea5", + }, + { + name: "getControlListMembers", + signature: + "function getControlListMembers(uint256 _pageIndex, uint256 _pageLength) view returns (address[] members_)", + selector: "0xcad7e56b", + }, + { + name: "getControlListType", + signature: "function getControlListType() view returns (bool)", + selector: "0x1d46c292", + }, + { + name: "initialize_ControlList", + signature: "function initialize_ControlList(bool _isWhiteList)", + selector: "0xf88bd9f2", + }, + { + name: "isInControlList", + signature: "function isInControlList(address _account) view returns (bool)", + selector: "0xfd5b071b", + }, + { + name: "removeFromControlList", + signature: "function removeFromControlList(address _account) returns (bool success_)", + selector: "0x47b52d3b", + }, + ], + events: [ + { + name: "AddedToControlList", + signature: "AddedToControlList(address,address)", + topic0: "0x5af5dacbf5ee5519e494e4ef1304293dfca9b64fc96860222581d0524c5a5621", + }, + { + name: "RemovedFromControlList", + signature: "RemovedFromControlList(address,address)", + topic0: "0x745acaacce1108849ac3b5a8667c1fd5044b5515e7d7507952493ba6a1b96d37", + }, + ], + errors: [ + { name: "ExpirationNotReached", signature: "ExpirationNotReached()", selector: "0x92899bcd" }, + { name: "InterestRateIsKpiLinked", signature: "InterestRateIsKpiLinked()", selector: "0x68eba14f" }, + { name: "ListedAccount", signature: "ListedAccount(address)", selector: "0x1a4a04ba" }, + { name: "UnlistedAccount", signature: "UnlistedAccount(address)", selector: "0x4c463ddc" }, + ], + factory: (signer, useTimeTravel = false) => + useTimeTravel + ? new ControlListKpiLinkedRateFacetTimeTravel__factory(signer) + : new ControlListKpiLinkedRateFacet__factory(signer), + }, + + ControlListSustainabilityPerformanceTargetRateFacet: { + name: "ControlListSustainabilityPerformanceTargetRateFacet", + resolverKey: { + name: "_CONTROL_LIST_SUSTAINABILITY_PERFORMANCE_TARGET_RATE_RESOLVER_KEY", + value: "0xe3fbab5a4ccf7a873a9601bf5494c43f6e4b53218ff8310ec97811471397b3cf", + }, + inheritance: ["ControlListFacetBase", "CommonSustainabilityPerformanceTargetInterestRate"], + methods: [ + { + name: "addToControlList", + signature: "function addToControlList(address _account) returns (bool success_)", + selector: "0xe8204966", + }, + { + name: "getControlListCount", + signature: "function getControlListCount() view returns (uint256 controlListCount_)", + selector: "0x6b5d2ea5", + }, + { + name: "getControlListMembers", + signature: + "function getControlListMembers(uint256 _pageIndex, uint256 _pageLength) view returns (address[] members_)", + selector: "0xcad7e56b", + }, + { + name: "getControlListType", + signature: "function getControlListType() view returns (bool)", + selector: "0x1d46c292", + }, + { + name: "initialize_ControlList", + signature: "function initialize_ControlList(bool _isWhiteList)", + selector: "0xf88bd9f2", + }, + { + name: "isInControlList", + signature: "function isInControlList(address _account) view returns (bool)", + selector: "0xfd5b071b", + }, + { + name: "removeFromControlList", + signature: "function removeFromControlList(address _account) returns (bool success_)", + selector: "0x47b52d3b", + }, + ], + events: [ + { + name: "AddedToControlList", + signature: "AddedToControlList(address,address)", + topic0: "0x5af5dacbf5ee5519e494e4ef1304293dfca9b64fc96860222581d0524c5a5621", + }, + { + name: "RemovedFromControlList", + signature: "RemovedFromControlList(address,address)", + topic0: "0x745acaacce1108849ac3b5a8667c1fd5044b5515e7d7507952493ba6a1b96d37", + }, + ], + errors: [ + { name: "ExpirationNotReached", signature: "ExpirationNotReached()", selector: "0x92899bcd" }, + { + name: "InterestRateIsSustainabilityPerformanceTarget", + signature: "InterestRateIsSustainabilityPerformanceTarget()", + selector: "0x15a15b0a", + }, + { name: "ListedAccount", signature: "ListedAccount(address)", selector: "0x1a4a04ba" }, + { name: "UnlistedAccount", signature: "UnlistedAccount(address)", selector: "0x4c463ddc" }, + ], + factory: (signer, useTimeTravel = false) => + useTimeTravel + ? new ControlListSustainabilityPerformanceTargetRateFacetTimeTravel__factory(signer) + : new ControlListSustainabilityPerformanceTargetRateFacet__factory(signer), + }, + + CorporateActionsFacet: { + name: "CorporateActionsFacet", + resolverKey: { + name: "_CORPORATE_ACTIONS_RESOLVER_KEY", + value: "0x3cc74200ccfb5d585a6d170f8824979dbf1b592e0a41eef41cf6d86cf4882077", + }, + inheritance: ["CorporateActionsFacetBase", "Common"], + methods: [ + { + name: "actionContentHashExists", + signature: "function actionContentHashExists(bytes32 _contentHash) view returns (bool)", + selector: "0x14f1d784", + }, + { + name: "addCorporateAction", + signature: + "function addCorporateAction(bytes32 _actionType, bytes _data) returns (bytes32 corporateActionId_, uint256 corporateActionIdByType_)", + selector: "0xd9e4d92c", + }, + { + name: "getCorporateAction", + signature: + "function getCorporateAction(bytes32 _corporateActionId) view returns (bytes32 actionType_, uint256 actionTypeId_, bytes data_)", + selector: "0x911181da", + }, + { + name: "getCorporateActionCount", + signature: "function getCorporateActionCount() view returns (uint256 corporateActionCount_)", + selector: "0x8859794c", + }, + { + name: "getCorporateActionCountByType", + signature: + "function getCorporateActionCountByType(bytes32 _actionType) view returns (uint256 corporateActionCount_)", + selector: "0x539b4e0b", + }, + { + name: "getCorporateActionIds", + signature: + "function getCorporateActionIds(uint256 _pageIndex, uint256 _pageLength) view returns (bytes32[] corporateActionIds_)", + selector: "0x1b56ea1e", + }, + { + name: "getCorporateActionIdsByType", + signature: + "function getCorporateActionIdsByType(bytes32 _actionType, uint256 _pageIndex, uint256 _pageLength) view returns (bytes32[] corporateActionIds_)", + selector: "0xe73bbddb", + }, + ], + events: [ + { + name: "CorporateActionAdded", + signature: "CorporateActionAdded(address,bytes32,bytes32,uint256,bytes)", + topic0: "0x5874a7cfb402f641e9d5e7fe4da2993095f1d4d397e7291daa27fd6c29dd3f1a", + }, + ], + errors: [ + { + name: "DuplicatedCorporateAction", + signature: "DuplicatedCorporateAction(bytes32,bytes)", + selector: "0x3266e9e3", + }, + { name: "ExpirationNotReached", signature: "ExpirationNotReached()", selector: "0x92899bcd" }, + ], + factory: (signer, useTimeTravel = false) => + useTimeTravel ? new CorporateActionsFacetTimeTravel__factory(signer) : new CorporateActionsFacet__factory(signer), + }, + + CorporateActionsFixedRateFacet: { + name: "CorporateActionsFixedRateFacet", + resolverKey: { + name: "_CORPORATE_ACTIONS_FIXED_RATE_RESOLVER_KEY", + value: "0xd2c0415cebdbb6dcaf014ce92df6bcae060743c622fd7ce954105b71954e0424", + }, + inheritance: ["CorporateActionsFacetBase", "CommonFixedInterestRate"], + methods: [ + { + name: "actionContentHashExists", + signature: "function actionContentHashExists(bytes32 _contentHash) view returns (bool)", + selector: "0x14f1d784", + }, + { + name: "addCorporateAction", + signature: + "function addCorporateAction(bytes32 _actionType, bytes _data) returns (bytes32 corporateActionId_, uint256 corporateActionIdByType_)", + selector: "0xd9e4d92c", + }, + { + name: "getCorporateAction", + signature: + "function getCorporateAction(bytes32 _corporateActionId) view returns (bytes32 actionType_, uint256 actionTypeId_, bytes data_)", + selector: "0x911181da", + }, + { + name: "getCorporateActionCount", + signature: "function getCorporateActionCount() view returns (uint256 corporateActionCount_)", + selector: "0x8859794c", + }, + { + name: "getCorporateActionCountByType", + signature: + "function getCorporateActionCountByType(bytes32 _actionType) view returns (uint256 corporateActionCount_)", + selector: "0x539b4e0b", + }, + { + name: "getCorporateActionIds", + signature: + "function getCorporateActionIds(uint256 _pageIndex, uint256 _pageLength) view returns (bytes32[] corporateActionIds_)", + selector: "0x1b56ea1e", + }, + { + name: "getCorporateActionIdsByType", + signature: + "function getCorporateActionIdsByType(bytes32 _actionType, uint256 _pageIndex, uint256 _pageLength) view returns (bytes32[] corporateActionIds_)", + selector: "0xe73bbddb", + }, + ], + events: [ + { + name: "CorporateActionAdded", + signature: "CorporateActionAdded(address,bytes32,bytes32,uint256,bytes)", + topic0: "0x5874a7cfb402f641e9d5e7fe4da2993095f1d4d397e7291daa27fd6c29dd3f1a", + }, + ], + errors: [ + { + name: "DuplicatedCorporateAction", + signature: "DuplicatedCorporateAction(bytes32,bytes)", + selector: "0x3266e9e3", + }, + { name: "ExpirationNotReached", signature: "ExpirationNotReached()", selector: "0x92899bcd" }, + { name: "InterestRateIsFixed", signature: "InterestRateIsFixed()", selector: "0x849d4eb8" }, + ], + factory: (signer, useTimeTravel = false) => + useTimeTravel + ? new CorporateActionsFixedRateFacetTimeTravel__factory(signer) + : new CorporateActionsFixedRateFacet__factory(signer), + }, + + CorporateActionsKpiLinkedRateFacet: { + name: "CorporateActionsKpiLinkedRateFacet", + resolverKey: { + name: "_CORPORATE_ACTIONS_KPI_LINKED_RATE_RESOLVER_KEY", + value: "0xf86b1190fb42cc572ccdeac774fdf968c303079b8c5eceaeb1c9f4f9089bb6be", + }, + inheritance: ["CorporateActionsFacetBase", "CommonKpiLinkedInterestRate"], + methods: [ + { + name: "actionContentHashExists", + signature: "function actionContentHashExists(bytes32 _contentHash) view returns (bool)", + selector: "0x14f1d784", + }, + { + name: "addCorporateAction", + signature: + "function addCorporateAction(bytes32 _actionType, bytes _data) returns (bytes32 corporateActionId_, uint256 corporateActionIdByType_)", + selector: "0xd9e4d92c", + }, + { + name: "getCorporateAction", + signature: + "function getCorporateAction(bytes32 _corporateActionId) view returns (bytes32 actionType_, uint256 actionTypeId_, bytes data_)", + selector: "0x911181da", + }, + { + name: "getCorporateActionCount", + signature: "function getCorporateActionCount() view returns (uint256 corporateActionCount_)", + selector: "0x8859794c", + }, + { + name: "getCorporateActionCountByType", + signature: + "function getCorporateActionCountByType(bytes32 _actionType) view returns (uint256 corporateActionCount_)", + selector: "0x539b4e0b", + }, + { + name: "getCorporateActionIds", + signature: + "function getCorporateActionIds(uint256 _pageIndex, uint256 _pageLength) view returns (bytes32[] corporateActionIds_)", + selector: "0x1b56ea1e", + }, + { + name: "getCorporateActionIdsByType", + signature: + "function getCorporateActionIdsByType(bytes32 _actionType, uint256 _pageIndex, uint256 _pageLength) view returns (bytes32[] corporateActionIds_)", + selector: "0xe73bbddb", + }, + ], + events: [ + { + name: "CorporateActionAdded", + signature: "CorporateActionAdded(address,bytes32,bytes32,uint256,bytes)", + topic0: "0x5874a7cfb402f641e9d5e7fe4da2993095f1d4d397e7291daa27fd6c29dd3f1a", + }, + ], + errors: [ + { + name: "DuplicatedCorporateAction", + signature: "DuplicatedCorporateAction(bytes32,bytes)", + selector: "0x3266e9e3", + }, + { name: "ExpirationNotReached", signature: "ExpirationNotReached()", selector: "0x92899bcd" }, + { name: "InterestRateIsKpiLinked", signature: "InterestRateIsKpiLinked()", selector: "0x68eba14f" }, + ], + factory: (signer, useTimeTravel = false) => + useTimeTravel + ? new CorporateActionsKpiLinkedRateFacetTimeTravel__factory(signer) + : new CorporateActionsKpiLinkedRateFacet__factory(signer), + }, + + CorporateActionsSustainabilityPerformanceTargetRateFacet: { + name: "CorporateActionsSustainabilityPerformanceTargetRateFacet", + resolverKey: { + name: "_CORPORATE_ACTIONS_SUSTAINABILITY_PERFORMANCE_TARGET_RATE_RESOLVER_KEY", + value: "0xa4a23267cb0a22c52bd05b12e644136bc38b7ac51218a0cb3aed166697caa79e", + }, + inheritance: ["CorporateActionsFacetBase", "CommonSustainabilityPerformanceTargetInterestRate"], + methods: [ + { + name: "actionContentHashExists", + signature: "function actionContentHashExists(bytes32 _contentHash) view returns (bool)", + selector: "0x14f1d784", + }, + { + name: "addCorporateAction", + signature: + "function addCorporateAction(bytes32 _actionType, bytes _data) returns (bytes32 corporateActionId_, uint256 corporateActionIdByType_)", + selector: "0xd9e4d92c", + }, + { + name: "getCorporateAction", + signature: + "function getCorporateAction(bytes32 _corporateActionId) view returns (bytes32 actionType_, uint256 actionTypeId_, bytes data_)", + selector: "0x911181da", + }, + { + name: "getCorporateActionCount", + signature: "function getCorporateActionCount() view returns (uint256 corporateActionCount_)", + selector: "0x8859794c", + }, + { + name: "getCorporateActionCountByType", + signature: + "function getCorporateActionCountByType(bytes32 _actionType) view returns (uint256 corporateActionCount_)", + selector: "0x539b4e0b", + }, + { + name: "getCorporateActionIds", + signature: + "function getCorporateActionIds(uint256 _pageIndex, uint256 _pageLength) view returns (bytes32[] corporateActionIds_)", + selector: "0x1b56ea1e", + }, + { + name: "getCorporateActionIdsByType", + signature: + "function getCorporateActionIdsByType(bytes32 _actionType, uint256 _pageIndex, uint256 _pageLength) view returns (bytes32[] corporateActionIds_)", + selector: "0xe73bbddb", + }, + ], + events: [ + { + name: "CorporateActionAdded", + signature: "CorporateActionAdded(address,bytes32,bytes32,uint256,bytes)", + topic0: "0x5874a7cfb402f641e9d5e7fe4da2993095f1d4d397e7291daa27fd6c29dd3f1a", + }, + ], + errors: [ + { + name: "DuplicatedCorporateAction", + signature: "DuplicatedCorporateAction(bytes32,bytes)", + selector: "0x3266e9e3", + }, + { name: "ExpirationNotReached", signature: "ExpirationNotReached()", selector: "0x92899bcd" }, + { + name: "InterestRateIsSustainabilityPerformanceTarget", + signature: "InterestRateIsSustainabilityPerformanceTarget()", + selector: "0x15a15b0a", + }, + ], + factory: (signer, useTimeTravel = false) => + useTimeTravel + ? new CorporateActionsSustainabilityPerformanceTargetRateFacetTimeTravel__factory(signer) + : new CorporateActionsSustainabilityPerformanceTargetRateFacet__factory(signer), + }, + + DiamondCutFacet: { + name: "DiamondCutFacet", + resolverKey: { + name: "_DIAMOND_CUT_RESOLVER_KEY", + value: "0xb66fc45b2670ed2c4ce03061121e6c8e53bce06e161f95afad8e57671b64fca8", + }, + inheritance: ["IDiamondCut", "ResolverProxyUnstructured"], + methods: [ + { + name: "getConfigInfo", + signature: + "function getConfigInfo() view returns (address resolver_, bytes32 configurationId_, uint256 version_)", + selector: "0x78a1bf05", + }, + { + name: "updateConfig", + signature: "function updateConfig(bytes32 _newConfigurationId, uint256 _newVersion)", + selector: "0x0b3bad61", + }, + { + name: "updateConfigVersion", + signature: "function updateConfigVersion(uint256 _newVersion)", + selector: "0x002eeb22", + }, + { + name: "updateResolver", + signature: "function updateResolver(address _newResolver, bytes32 _newConfigurationId, uint256 _newVersion)", + selector: "0xe5d3a872", + }, + ], + factory: (signer, useTimeTravel = false) => + useTimeTravel ? new DiamondCutFacetTimeTravel__factory(signer) : new DiamondCutFacet__factory(signer), + }, + + DiamondFacet: { + name: "DiamondFacet", + resolverKey: { + name: "_DIAMOND_RESOLVER_KEY", + value: "0x1b5212ea37fb29e99afa2812a5d7d7e662a477424d3de1a18cc3871a2ee94d78", + }, + inheritance: ["IDiamond", "DiamondCutFacet", "DiamondLoupeFacet"], + methods: [ + { + name: "getConfigInfo", + signature: + "function getConfigInfo() view returns (address resolver_, bytes32 configurationId_, uint256 version_)", + selector: "0x78a1bf05", + }, + { + name: "getFacet", + signature: + "function getFacet(bytes32 _facetId) view returns (tuple(bytes32 id, address addr, bytes4[] selectors, bytes4[] interfaceIds) facet_)", + selector: "0xe317d12f", + }, + { + name: "getFacetAddress", + signature: "function getFacetAddress(bytes4 _selector) view returns (address facetAddress_)", + selector: "0x7a070c2d", + }, + { + name: "getFacetAddresses", + signature: "function getFacetAddresses() view returns (address[] facetAddresses_)", + selector: "0x3bed2f49", + }, + { + name: "getFacetAddressesByPage", + signature: + "function getFacetAddressesByPage(uint256 _pageIndex, uint256 _pageLength) view returns (address[] facetAddresses_)", + selector: "0x9fea53e7", + }, + { + name: "getFacetIdBySelector", + signature: "function getFacetIdBySelector(bytes4 _selector) view returns (bytes32 facetId_)", + selector: "0xb3fd6894", + }, + { + name: "getFacetIds", + signature: "function getFacetIds() view returns (bytes32[] facetIds_)", + selector: "0xcd25d535", + }, + { + name: "getFacetIdsByPage", + signature: + "function getFacetIdsByPage(uint256 _pageIndex, uint256 _pageLength) view returns (bytes32[] facetIds_)", + selector: "0x20202e6d", + }, + { + name: "getFacetSelectors", + signature: "function getFacetSelectors(bytes32 _facetId) view returns (bytes4[] facetSelectors_)", + selector: "0x8214de3e", + }, + { + name: "getFacetSelectorsByPage", + signature: + "function getFacetSelectorsByPage(bytes32 _facetId, uint256 _pageIndex, uint256 _pageLength) view returns (bytes4[] facetSelectors_)", + selector: "0x39a9e956", + }, + { + name: "getFacetSelectorsLength", + signature: "function getFacetSelectorsLength(bytes32 _facetId) view returns (uint256 facetSelectorsLength_)", + selector: "0xca1f70ec", + }, + { + name: "getFacets", + signature: + "function getFacets() view returns (tuple(bytes32 id, address addr, bytes4[] selectors, bytes4[] interfaceIds)[] facets_)", + selector: "0x662ea47d", + }, + { + name: "getFacetsByPage", + signature: + "function getFacetsByPage(uint256 _pageIndex, uint256 _pageLength) view returns (tuple(bytes32 id, address addr, bytes4[] selectors, bytes4[] interfaceIds)[] facets_)", + selector: "0xbf02c5b9", + }, + { + name: "getFacetsLength", + signature: "function getFacetsLength() view returns (uint256 facetsLength_)", + selector: "0x430720f9", + }, + { + name: "supportsInterface", + signature: "function supportsInterface(bytes4 _interfaceId) view returns (bool)", + selector: "0x01ffc9a7", + }, + { + name: "updateConfig", + signature: "function updateConfig(bytes32 _newConfigurationId, uint256 _newVersion)", + selector: "0x0b3bad61", + }, + { + name: "updateConfigVersion", + signature: "function updateConfigVersion(uint256 _newVersion)", + selector: "0x002eeb22", + }, + { + name: "updateResolver", + signature: "function updateResolver(address _newResolver, bytes32 _newConfigurationId, uint256 _newVersion)", + selector: "0xe5d3a872", + }, + ], + factory: (signer, useTimeTravel = false) => + useTimeTravel ? new DiamondFacetTimeTravel__factory(signer) : new DiamondFacet__factory(signer), + }, + + DiamondLoupeFacet: { + name: "DiamondLoupeFacet", + resolverKey: { + name: "_DIAMOND_LOUPE_RESOLVER_KEY", + value: "0x086a1dd0b9bfa39267d1de30445a8edeb3a1f50c8a0a82c91f9dee3608e83567", + }, + inheritance: ["IDiamondLoupe", "IERC165", "ResolverProxyUnstructured"], + methods: [ + { + name: "getFacet", + signature: + "function getFacet(bytes32 _facetId) view returns (tuple(bytes32 id, address addr, bytes4[] selectors, bytes4[] interfaceIds) facet_)", + selector: "0xe317d12f", + }, + { + name: "getFacetAddress", + signature: "function getFacetAddress(bytes4 _selector) view returns (address facetAddress_)", + selector: "0x7a070c2d", + }, + { + name: "getFacetAddresses", + signature: "function getFacetAddresses() view returns (address[] facetAddresses_)", + selector: "0x3bed2f49", + }, + { + name: "getFacetAddressesByPage", + signature: + "function getFacetAddressesByPage(uint256 _pageIndex, uint256 _pageLength) view returns (address[] facetAddresses_)", + selector: "0x9fea53e7", + }, + { + name: "getFacetIdBySelector", + signature: "function getFacetIdBySelector(bytes4 _selector) view returns (bytes32 facetId_)", + selector: "0xb3fd6894", + }, + { + name: "getFacetIds", + signature: "function getFacetIds() view returns (bytes32[] facetIds_)", + selector: "0xcd25d535", + }, + { + name: "getFacetIdsByPage", + signature: + "function getFacetIdsByPage(uint256 _pageIndex, uint256 _pageLength) view returns (bytes32[] facetIds_)", + selector: "0x20202e6d", + }, + { + name: "getFacetSelectors", + signature: "function getFacetSelectors(bytes32 _facetId) view returns (bytes4[] facetSelectors_)", + selector: "0x8214de3e", + }, + { + name: "getFacetSelectorsByPage", + signature: + "function getFacetSelectorsByPage(bytes32 _facetId, uint256 _pageIndex, uint256 _pageLength) view returns (bytes4[] facetSelectors_)", + selector: "0x39a9e956", + }, + { + name: "getFacetSelectorsLength", + signature: "function getFacetSelectorsLength(bytes32 _facetId) view returns (uint256 facetSelectorsLength_)", + selector: "0xca1f70ec", + }, + { + name: "getFacets", + signature: + "function getFacets() view returns (tuple(bytes32 id, address addr, bytes4[] selectors, bytes4[] interfaceIds)[] facets_)", + selector: "0x662ea47d", + }, + { + name: "getFacetsByPage", + signature: + "function getFacetsByPage(uint256 _pageIndex, uint256 _pageLength) view returns (tuple(bytes32 id, address addr, bytes4[] selectors, bytes4[] interfaceIds)[] facets_)", + selector: "0xbf02c5b9", + }, + { + name: "getFacetsLength", + signature: "function getFacetsLength() view returns (uint256 facetsLength_)", + selector: "0x430720f9", + }, + { + name: "supportsInterface", + signature: "function supportsInterface(bytes4 _interfaceId) view returns (bool)", + selector: "0x01ffc9a7", + }, + ], + factory: (signer, useTimeTravel = false) => + useTimeTravel ? new DiamondLoupeFacetTimeTravel__factory(signer) : new DiamondLoupeFacet__factory(signer), + }, + + EquityUSAFacet: { + name: "EquityUSAFacet", + resolverKey: { + name: "_EQUITY_RESOLVER_KEY", + value: "0xfe85fe0513f5a5676011f59495ae16b2b93c981c190e99e61903e5603542c810", + }, + inheritance: ["EquityUSA", "IStaticFunctionSelectors"], + methods: [ + { + name: "_initialize_equityUSA", + signature: + "function _initialize_equityUSA(tuple(bool votingRight, bool informationRight, bool liquidationRight, bool subscriptionRight, bool conversionRight, bool redemptionRight, bool putRight, uint8 dividendRight, bytes3 currency, uint256 nominalValue, uint8 nominalValueDecimals) _equityDetailsData, tuple(uint8 regulationType, uint8 regulationSubType, uint256 dealSize, uint8 accreditedInvestors, uint256 maxNonAccreditedInvestors, uint8 manualInvestorVerification, uint8 internationalInvestors, uint8 resaleHoldPeriod) _regulationData, tuple(bool countriesControlListType, string listOfCountries, string info) _additionalSecurityData)", + selector: "0x8c505179", + }, + { + name: "getDividendAmountFor", + signature: + "function getDividendAmountFor(uint256 _dividendID, address _account) view returns (tuple(uint256 numerator, uint256 denominator, bool recordDateReached) dividendAmountFor_)", + selector: "0xd258b2f1", + }, + { + name: "getDividendHolders", + signature: + "function getDividendHolders(uint256 _dividendID, uint256 _pageIndex, uint256 _pageLength) view returns (address[] holders_)", + selector: "0xeba3918e", + }, + { + name: "getDividends", + signature: + "function getDividends(uint256 _dividendID) view returns (tuple(tuple(uint256 recordDate, uint256 executionDate, uint256 amount, uint8 amountDecimals) dividend, uint256 snapshotId) registeredDividend_)", + selector: "0x3837ac88", + }, + { + name: "getDividendsCount", + signature: "function getDividendsCount() view returns (uint256 dividendCount_)", + selector: "0x9e676952", + }, + { + name: "getDividendsFor", + signature: + "function getDividendsFor(uint256 _dividendID, address _account) view returns (tuple(uint256 tokenBalance, uint256 amount, uint8 amountDecimals, uint256 recordDate, uint256 executionDate, uint8 decimals, bool recordDateReached) dividendFor_)", + selector: "0x323e22da", + }, + { + name: "getEquityDetails", + signature: + "function getEquityDetails() view returns (tuple(bool votingRight, bool informationRight, bool liquidationRight, bool subscriptionRight, bool conversionRight, bool redemptionRight, bool putRight, uint8 dividendRight, bytes3 currency, uint256 nominalValue, uint8 nominalValueDecimals) equityDetailsData_)", + selector: "0xefcdcad8", + }, + { + name: "getScheduledBalanceAdjustment", + signature: + "function getScheduledBalanceAdjustment(uint256 _balanceAdjustmentID) view returns (tuple(uint256 executionDate, uint256 factor, uint8 decimals) balanceAdjustment_)", + selector: "0x3d5338e8", + }, + { + name: "getScheduledBalanceAdjustmentCount", + signature: "function getScheduledBalanceAdjustmentCount() view returns (uint256 balanceAdjustmentCount_)", + selector: "0x7c62c7fc", + }, + { + name: "getSecurityHolders", + signature: + "function getSecurityHolders(uint256 _pageIndex, uint256 _pageLength) view returns (address[] holders_)", + selector: "0x81438d2f", + }, + { + name: "getSecurityRegulationData", + signature: + "function getSecurityRegulationData() pure returns (tuple(tuple(uint8 regulationType, uint8 regulationSubType, uint256 dealSize, uint8 accreditedInvestors, uint256 maxNonAccreditedInvestors, uint8 manualInvestorVerification, uint8 internationalInvestors, uint8 resaleHoldPeriod) regulationData, tuple(bool countriesControlListType, string listOfCountries, string info) additionalSecurityData) securityRegulationData_)", + selector: "0x8fda5afe", + }, + { + name: "getTotalDividendHolders", + signature: "function getTotalDividendHolders(uint256 _dividendID) view returns (uint256)", + selector: "0xd61a022b", + }, + { + name: "getTotalSecurityHolders", + signature: "function getTotalSecurityHolders() view returns (uint256)", + selector: "0xbd007c8f", + }, + { + name: "getTotalVotingHolders", + signature: "function getTotalVotingHolders(uint256 _voteID) view returns (uint256)", + selector: "0x92c51818", + }, + { + name: "getVoting", + signature: + "function getVoting(uint256 _voteID) view returns (tuple(tuple(uint256 recordDate, bytes data) voting, uint256 snapshotId) registeredVoting_)", + selector: "0x3afc7282", + }, + { + name: "getVotingCount", + signature: "function getVotingCount() view returns (uint256 votingCount_)", + selector: "0x9c2aab5e", + }, + { + name: "getVotingFor", + signature: + "function getVotingFor(uint256 _voteID, address _account) view returns (tuple(uint256 tokenBalance, uint256 recordDate, bytes data, uint8 decimals, bool recordDateReached) votingFor_)", + selector: "0x7633eccf", + }, + { + name: "getVotingHolders", + signature: + "function getVotingHolders(uint256 _voteID, uint256 _pageIndex, uint256 _pageLength) view returns (address[] holders_)", + selector: "0x009f64ac", + }, + { + name: "setDividends", + signature: + "function setDividends(tuple(uint256 recordDate, uint256 executionDate, uint256 amount, uint8 amountDecimals) _newDividend) returns (uint256 dividendID_)", + selector: "0x1129e1c1", + }, + { + name: "setScheduledBalanceAdjustment", + signature: + "function setScheduledBalanceAdjustment(tuple(uint256 executionDate, uint256 factor, uint8 decimals) _newBalanceAdjustment) returns (uint256 balanceAdjustmentID_)", + selector: "0xd1661084", + }, + { + name: "setVoting", + signature: "function setVoting(tuple(uint256 recordDate, bytes data) _newVoting) returns (uint256 voteID_)", + selector: "0x5adaa49e", + }, + ], + errors: [{ name: "ExpirationNotReached", signature: "ExpirationNotReached()", selector: "0x92899bcd" }], + factory: (signer, useTimeTravel = false) => + useTimeTravel ? new EquityUSAFacetTimeTravel__factory(signer) : new EquityUSAFacet__factory(signer), + }, + + ERC1410IssuerFacet: { + name: "ERC1410IssuerFacet", + resolverKey: { + name: "_ERC1410_ISSUER_RESOLVER_KEY", + value: "0x6e82b75f32c9647cc00b4c3eabbef5a82677f3e91d5d196eb4dd6a0365941344", + }, + inheritance: ["ERC1410IssuerFacetBase", "Common"], + methods: [ + { + name: "issueByPartition", + signature: + "function issueByPartition(tuple(bytes32 partition, address tokenHolder, uint256 value, bytes data) _issueData)", + selector: "0x18180262", + }, + ], + errors: [{ name: "ExpirationNotReached", signature: "ExpirationNotReached()", selector: "0x92899bcd" }], + factory: (signer, useTimeTravel = false) => + useTimeTravel ? new ERC1410IssuerFacetTimeTravel__factory(signer) : new ERC1410IssuerFacet__factory(signer), + }, + + ERC1410IssuerFixedRateFacet: { + name: "ERC1410IssuerFixedRateFacet", + resolverKey: { + name: "_ERC1410_ISSUER_FIXED_RATE_RESOLVER_KEY", + value: "0xb9c76f134ffdac743e817a2726bdf9f28a48dfea1f9f54b1066e4e0de68f2a06", + }, + inheritance: ["ERC1410IssuerFacetBase", "CommonFixedInterestRate"], + methods: [ + { + name: "issueByPartition", + signature: + "function issueByPartition(tuple(bytes32 partition, address tokenHolder, uint256 value, bytes data) _issueData)", + selector: "0x18180262", + }, + ], + errors: [ + { name: "ExpirationNotReached", signature: "ExpirationNotReached()", selector: "0x92899bcd" }, + { name: "InterestRateIsFixed", signature: "InterestRateIsFixed()", selector: "0x849d4eb8" }, + ], + factory: (signer, useTimeTravel = false) => + useTimeTravel + ? new ERC1410IssuerFixedRateFacetTimeTravel__factory(signer) + : new ERC1410IssuerFixedRateFacet__factory(signer), + }, + + ERC1410IssuerKpiLinkedRateFacet: { + name: "ERC1410IssuerKpiLinkedRateFacet", + resolverKey: { + name: "_ERC1410_ISSUER_KPI_LINKED_RATE_RESOLVER_KEY", + value: "0x97246e7c6950bcc047f6ea198308a7f304bca9f3f13d2ce5d7fdeee9cc9e0828", + }, + inheritance: ["ERC1410IssuerFacetBase", "CommonKpiLinkedInterestRate"], + methods: [ + { + name: "issueByPartition", + signature: + "function issueByPartition(tuple(bytes32 partition, address tokenHolder, uint256 value, bytes data) _issueData)", + selector: "0x18180262", + }, + ], + errors: [ + { name: "ExpirationNotReached", signature: "ExpirationNotReached()", selector: "0x92899bcd" }, + { name: "InterestRateIsKpiLinked", signature: "InterestRateIsKpiLinked()", selector: "0x68eba14f" }, + ], + factory: (signer, useTimeTravel = false) => + useTimeTravel + ? new ERC1410IssuerKpiLinkedRateFacetTimeTravel__factory(signer) + : new ERC1410IssuerKpiLinkedRateFacet__factory(signer), + }, + + ERC1410IssuerSustainabilityPerformanceTargetRateFacet: { + name: "ERC1410IssuerSustainabilityPerformanceTargetRateFacet", + resolverKey: { + name: "_ERC1410_ISSUER_SUSTAINABILITY_PERFORMANCE_TARGET_RATE_RESOLVER_KEY", + value: "0x4d5a3964d29183253487011c31ec3e09977b5eded43c8a3a222a2e53f4282f61", + }, + inheritance: ["ERC1410IssuerFacetBase", "CommonSustainabilityPerformanceTargetInterestRate"], + methods: [ + { + name: "issueByPartition", + signature: + "function issueByPartition(tuple(bytes32 partition, address tokenHolder, uint256 value, bytes data) _issueData)", + selector: "0x18180262", + }, + ], + errors: [ + { name: "ExpirationNotReached", signature: "ExpirationNotReached()", selector: "0x92899bcd" }, + { + name: "InterestRateIsSustainabilityPerformanceTarget", + signature: "InterestRateIsSustainabilityPerformanceTarget()", + selector: "0x15a15b0a", + }, + ], + factory: (signer, useTimeTravel = false) => + useTimeTravel + ? new ERC1410IssuerSustainabilityPerformanceTargetRateFacetTimeTravel__factory(signer) + : new ERC1410IssuerSustainabilityPerformanceTargetRateFacet__factory(signer), + }, + + ERC1410ManagementFacet: { + name: "ERC1410ManagementFacet", + resolverKey: { + name: "_ERC1410_MANAGEMENT_RESOLVER_KEY", + value: "0x232f8686795d3f197681faf0d8db05655e759f62d709d56b97e5d9cfff29dbf5", + }, + inheritance: ["ERC1410ManagementFacetBase", "Common"], + methods: [ + { + name: "controllerRedeemByPartition", + signature: + "function controllerRedeemByPartition(bytes32 _partition, address _tokenHolder, uint256 _value, bytes _data, bytes _operatorData)", + selector: "0xb84777cc", + }, + { + name: "controllerTransferByPartition", + signature: + "function controllerTransferByPartition(bytes32 _partition, address _from, address _to, uint256 _value, bytes _data, bytes _operatorData) returns (bytes32)", + selector: "0xfb78befa", + }, + { + name: "initialize_ERC1410", + signature: "function initialize_ERC1410(bool _multiPartition)", + selector: "0x7b1df196", + }, + { + name: "operatorRedeemByPartition", + signature: + "function operatorRedeemByPartition(bytes32 _partition, address _tokenHolder, uint256 _value, bytes _data, bytes _operatorData)", + selector: "0x13d557bc", + }, + { + name: "operatorTransferByPartition", + signature: + "function operatorTransferByPartition(tuple(bytes32 partition, address from, address to, uint256 value, bytes data, bytes operatorData) _operatorTransferData) returns (bytes32)", + selector: "0x6b9894fe", + }, + { + name: "protectedRedeemFromByPartition", + signature: + "function protectedRedeemFromByPartition(bytes32 _partition, address _from, uint256 _amount, tuple(uint256 deadline, uint256 nounce, bytes signature) _protectionData)", + selector: "0x7756e22e", + }, + { + name: "protectedTransferFromByPartition", + signature: + "function protectedTransferFromByPartition(bytes32 _partition, address _from, address _to, uint256 _amount, tuple(uint256 deadline, uint256 nounce, bytes signature) _protectionData) returns (bytes32)", + selector: "0x99b5ef4a", + }, + ], + errors: [{ name: "ExpirationNotReached", signature: "ExpirationNotReached()", selector: "0x92899bcd" }], + factory: (signer, useTimeTravel = false) => + useTimeTravel + ? new ERC1410ManagementFacetTimeTravel__factory(signer) + : new ERC1410ManagementFacet__factory(signer), + }, + + ERC1410ManagementFixedRateFacet: { + name: "ERC1410ManagementFixedRateFacet", + resolverKey: { + name: "_ERC1410_MANAGEMENT_FIXED_RATE_RESOLVER_KEY", + value: "0xf616851e84bfcfb3b33a8cc54c54c34e9168ba2b8d233a0b3daacee27f0266ca", + }, + inheritance: ["ERC1410ManagementFacetBase", "CommonFixedInterestRate"], + methods: [ + { + name: "controllerRedeemByPartition", + signature: + "function controllerRedeemByPartition(bytes32 _partition, address _tokenHolder, uint256 _value, bytes _data, bytes _operatorData)", + selector: "0xb84777cc", + }, + { + name: "controllerTransferByPartition", + signature: + "function controllerTransferByPartition(bytes32 _partition, address _from, address _to, uint256 _value, bytes _data, bytes _operatorData) returns (bytes32)", + selector: "0xfb78befa", + }, + { + name: "initialize_ERC1410", + signature: "function initialize_ERC1410(bool _multiPartition)", + selector: "0x7b1df196", + }, + { + name: "operatorRedeemByPartition", + signature: + "function operatorRedeemByPartition(bytes32 _partition, address _tokenHolder, uint256 _value, bytes _data, bytes _operatorData)", + selector: "0x13d557bc", + }, + { + name: "operatorTransferByPartition", + signature: + "function operatorTransferByPartition(tuple(bytes32 partition, address from, address to, uint256 value, bytes data, bytes operatorData) _operatorTransferData) returns (bytes32)", + selector: "0x6b9894fe", + }, + { + name: "protectedRedeemFromByPartition", + signature: + "function protectedRedeemFromByPartition(bytes32 _partition, address _from, uint256 _amount, tuple(uint256 deadline, uint256 nounce, bytes signature) _protectionData)", + selector: "0x7756e22e", + }, + { + name: "protectedTransferFromByPartition", + signature: + "function protectedTransferFromByPartition(bytes32 _partition, address _from, address _to, uint256 _amount, tuple(uint256 deadline, uint256 nounce, bytes signature) _protectionData) returns (bytes32)", + selector: "0x99b5ef4a", + }, + ], + errors: [ + { name: "ExpirationNotReached", signature: "ExpirationNotReached()", selector: "0x92899bcd" }, + { name: "InterestRateIsFixed", signature: "InterestRateIsFixed()", selector: "0x849d4eb8" }, + ], + factory: (signer, useTimeTravel = false) => + useTimeTravel + ? new ERC1410ManagementFixedRateFacetTimeTravel__factory(signer) + : new ERC1410ManagementFixedRateFacet__factory(signer), + }, + + ERC1410ManagementKpiLinkedRateFacet: { + name: "ERC1410ManagementKpiLinkedRateFacet", + resolverKey: { + name: "_ERC1410_MANAGEMENT_KPI_LINKED_RATE_RESOLVER_KEY", + value: "0x831449a00c9cf218fe471b13f84f7109b57ad4b1202d4ed93009ee3d53276a2f", + }, + inheritance: ["ERC1410ManagementFacetBase", "CommonKpiLinkedInterestRate"], + methods: [ + { + name: "controllerRedeemByPartition", + signature: + "function controllerRedeemByPartition(bytes32 _partition, address _tokenHolder, uint256 _value, bytes _data, bytes _operatorData)", + selector: "0xb84777cc", + }, + { + name: "controllerTransferByPartition", + signature: + "function controllerTransferByPartition(bytes32 _partition, address _from, address _to, uint256 _value, bytes _data, bytes _operatorData) returns (bytes32)", + selector: "0xfb78befa", + }, + { + name: "initialize_ERC1410", + signature: "function initialize_ERC1410(bool _multiPartition)", + selector: "0x7b1df196", + }, + { + name: "operatorRedeemByPartition", + signature: + "function operatorRedeemByPartition(bytes32 _partition, address _tokenHolder, uint256 _value, bytes _data, bytes _operatorData)", + selector: "0x13d557bc", + }, + { + name: "operatorTransferByPartition", + signature: + "function operatorTransferByPartition(tuple(bytes32 partition, address from, address to, uint256 value, bytes data, bytes operatorData) _operatorTransferData) returns (bytes32)", + selector: "0x6b9894fe", + }, + { + name: "protectedRedeemFromByPartition", + signature: + "function protectedRedeemFromByPartition(bytes32 _partition, address _from, uint256 _amount, tuple(uint256 deadline, uint256 nounce, bytes signature) _protectionData)", + selector: "0x7756e22e", + }, + { + name: "protectedTransferFromByPartition", + signature: + "function protectedTransferFromByPartition(bytes32 _partition, address _from, address _to, uint256 _amount, tuple(uint256 deadline, uint256 nounce, bytes signature) _protectionData) returns (bytes32)", + selector: "0x99b5ef4a", + }, + ], + errors: [ + { name: "ExpirationNotReached", signature: "ExpirationNotReached()", selector: "0x92899bcd" }, + { name: "InterestRateIsKpiLinked", signature: "InterestRateIsKpiLinked()", selector: "0x68eba14f" }, + ], + factory: (signer, useTimeTravel = false) => + useTimeTravel + ? new ERC1410ManagementKpiLinkedRateFacetTimeTravel__factory(signer) + : new ERC1410ManagementKpiLinkedRateFacet__factory(signer), + }, + + ERC1410ManagementSustainabilityPerformanceTargetRateFacet: { + name: "ERC1410ManagementSustainabilityPerformanceTargetRateFacet", + resolverKey: { + name: "_ERC1410_MANAGEMENT_SUSTAINABILITY_PERFORMANCE_TARGET_RATE_RESOLVER_KEY", + value: "0x6768fcc73686ddd306656061b0e415208ded041927d9935de3747583559d0c5e", + }, + inheritance: ["ERC1410ManagementFacetBase", "CommonSustainabilityPerformanceTargetInterestRate"], + methods: [ + { + name: "controllerRedeemByPartition", + signature: + "function controllerRedeemByPartition(bytes32 _partition, address _tokenHolder, uint256 _value, bytes _data, bytes _operatorData)", + selector: "0xb84777cc", + }, + { + name: "controllerTransferByPartition", + signature: + "function controllerTransferByPartition(bytes32 _partition, address _from, address _to, uint256 _value, bytes _data, bytes _operatorData) returns (bytes32)", + selector: "0xfb78befa", + }, + { + name: "initialize_ERC1410", + signature: "function initialize_ERC1410(bool _multiPartition)", + selector: "0x7b1df196", + }, + { + name: "operatorRedeemByPartition", + signature: + "function operatorRedeemByPartition(bytes32 _partition, address _tokenHolder, uint256 _value, bytes _data, bytes _operatorData)", + selector: "0x13d557bc", + }, + { + name: "operatorTransferByPartition", + signature: + "function operatorTransferByPartition(tuple(bytes32 partition, address from, address to, uint256 value, bytes data, bytes operatorData) _operatorTransferData) returns (bytes32)", + selector: "0x6b9894fe", + }, + { + name: "protectedRedeemFromByPartition", + signature: + "function protectedRedeemFromByPartition(bytes32 _partition, address _from, uint256 _amount, tuple(uint256 deadline, uint256 nounce, bytes signature) _protectionData)", + selector: "0x7756e22e", + }, + { + name: "protectedTransferFromByPartition", + signature: + "function protectedTransferFromByPartition(bytes32 _partition, address _from, address _to, uint256 _amount, tuple(uint256 deadline, uint256 nounce, bytes signature) _protectionData) returns (bytes32)", + selector: "0x99b5ef4a", + }, + ], + errors: [ + { name: "ExpirationNotReached", signature: "ExpirationNotReached()", selector: "0x92899bcd" }, + { + name: "InterestRateIsSustainabilityPerformanceTarget", + signature: "InterestRateIsSustainabilityPerformanceTarget()", + selector: "0x15a15b0a", + }, + ], + factory: (signer, useTimeTravel = false) => + useTimeTravel + ? new ERC1410ManagementSustainabilityPerformanceTargetRateFacetTimeTravel__factory(signer) + : new ERC1410ManagementSustainabilityPerformanceTargetRateFacet__factory(signer), + }, + + ERC1410ReadFacet: { + name: "ERC1410ReadFacet", + resolverKey: { + name: "_ERC1410_READ_RESOLVER_KEY", + value: "0x5eb2734b83ea80c3eb63463a6192b30ab2526cb7a073f0abfda1a404c92ae497", + }, + inheritance: ["ERC1410ReadFacetBase", "Common"], + methods: [ + { + name: "balanceOf", + signature: "function balanceOf(address _tokenHolder) view returns (uint256)", + selector: "0x70a08231", + }, + { + name: "balanceOfAt", + signature: "function balanceOfAt(address _tokenHolder, uint256 _timestamp) view returns (uint256)", + selector: "0x4ee2cd7e", + }, + { + name: "balanceOfByPartition", + signature: "function balanceOfByPartition(bytes32 _partition, address _tokenHolder) view returns (uint256)", + selector: "0x30e82803", + }, + { + name: "canRedeemByPartition", + signature: + "function canRedeemByPartition(address _from, bytes32 _partition, uint256 _value, bytes _data, bytes _operatorData) view returns (bool, bytes1, bytes32)", + selector: "0x7b7322c4", + }, + { + name: "canTransferByPartition", + signature: + "function canTransferByPartition(address _from, address _to, bytes32 _partition, uint256 _value, bytes _data, bytes _operatorData) view returns (bool, bytes1, bytes32)", + selector: "0xa7b518b1", + }, + { + name: "isMultiPartition", + signature: "function isMultiPartition() view returns (bool)", + selector: "0xbd09cc54", + }, + { + name: "isOperator", + signature: "function isOperator(address _operator, address _tokenHolder) view returns (bool)", + selector: "0xb6363cf2", + }, + { + name: "isOperatorForPartition", + signature: + "function isOperatorForPartition(bytes32 _partition, address _operator, address _tokenHolder) view returns (bool)", + selector: "0x6d77cad6", + }, + { + name: "partitionsOf", + signature: "function partitionsOf(address _tokenHolder) view returns (bytes32[])", + selector: "0x740ab8f4", + }, + { name: "totalSupply", signature: "function totalSupply() view returns (uint256)", selector: "0x18160ddd" }, + { + name: "totalSupplyByPartition", + signature: "function totalSupplyByPartition(bytes32 _partition) view returns (uint256)", + selector: "0xa26734dc", + }, + ], + errors: [{ name: "ExpirationNotReached", signature: "ExpirationNotReached()", selector: "0x92899bcd" }], + factory: (signer, useTimeTravel = false) => + useTimeTravel ? new ERC1410ReadFacetTimeTravel__factory(signer) : new ERC1410ReadFacet__factory(signer), + }, + + ERC1410ReadFixedRateFacet: { + name: "ERC1410ReadFixedRateFacet", + resolverKey: { + name: "_ERC1410_READ_FIXED_RATE_RESOLVER_KEY", + value: "0x289451d28da5d8ff4e7759db6b1c418b7871f0d6ad63bf7f75cd411f3d79686d", + }, + inheritance: ["ERC1410ReadFacetBase", "CommonFixedInterestRate"], + methods: [ + { + name: "balanceOf", + signature: "function balanceOf(address _tokenHolder) view returns (uint256)", + selector: "0x70a08231", + }, + { + name: "balanceOfAt", + signature: "function balanceOfAt(address _tokenHolder, uint256 _timestamp) view returns (uint256)", + selector: "0x4ee2cd7e", + }, + { + name: "balanceOfByPartition", + signature: "function balanceOfByPartition(bytes32 _partition, address _tokenHolder) view returns (uint256)", + selector: "0x30e82803", + }, + { + name: "canRedeemByPartition", + signature: + "function canRedeemByPartition(address _from, bytes32 _partition, uint256 _value, bytes _data, bytes _operatorData) view returns (bool, bytes1, bytes32)", + selector: "0x7b7322c4", + }, + { + name: "canTransferByPartition", + signature: + "function canTransferByPartition(address _from, address _to, bytes32 _partition, uint256 _value, bytes _data, bytes _operatorData) view returns (bool, bytes1, bytes32)", + selector: "0xa7b518b1", + }, + { + name: "isMultiPartition", + signature: "function isMultiPartition() view returns (bool)", + selector: "0xbd09cc54", + }, + { + name: "isOperator", + signature: "function isOperator(address _operator, address _tokenHolder) view returns (bool)", + selector: "0xb6363cf2", + }, + { + name: "isOperatorForPartition", + signature: + "function isOperatorForPartition(bytes32 _partition, address _operator, address _tokenHolder) view returns (bool)", + selector: "0x6d77cad6", + }, + { + name: "partitionsOf", + signature: "function partitionsOf(address _tokenHolder) view returns (bytes32[])", + selector: "0x740ab8f4", + }, + { name: "totalSupply", signature: "function totalSupply() view returns (uint256)", selector: "0x18160ddd" }, + { + name: "totalSupplyByPartition", + signature: "function totalSupplyByPartition(bytes32 _partition) view returns (uint256)", + selector: "0xa26734dc", + }, + ], + errors: [ + { name: "ExpirationNotReached", signature: "ExpirationNotReached()", selector: "0x92899bcd" }, + { name: "InterestRateIsFixed", signature: "InterestRateIsFixed()", selector: "0x849d4eb8" }, + ], + factory: (signer, useTimeTravel = false) => + useTimeTravel + ? new ERC1410ReadFixedRateFacetTimeTravel__factory(signer) + : new ERC1410ReadFixedRateFacet__factory(signer), + }, + + ERC1410ReadKpiLinkedRateFacet: { + name: "ERC1410ReadKpiLinkedRateFacet", + resolverKey: { + name: "_ERC1410_READ_KPI_LINKED_RATE_RESOLVER_KEY", + value: "0x696d9b2b17b535f70254309692c77475c258c27dfa6853bbecc611bc350136cd", + }, + inheritance: ["ERC1410ReadFacetBase", "CommonKpiLinkedInterestRate"], + methods: [ + { + name: "balanceOf", + signature: "function balanceOf(address _tokenHolder) view returns (uint256)", + selector: "0x70a08231", + }, + { + name: "balanceOfAt", + signature: "function balanceOfAt(address _tokenHolder, uint256 _timestamp) view returns (uint256)", + selector: "0x4ee2cd7e", + }, + { + name: "balanceOfByPartition", + signature: "function balanceOfByPartition(bytes32 _partition, address _tokenHolder) view returns (uint256)", + selector: "0x30e82803", + }, + { + name: "canRedeemByPartition", + signature: + "function canRedeemByPartition(address _from, bytes32 _partition, uint256 _value, bytes _data, bytes _operatorData) view returns (bool, bytes1, bytes32)", + selector: "0x7b7322c4", + }, + { + name: "canTransferByPartition", + signature: + "function canTransferByPartition(address _from, address _to, bytes32 _partition, uint256 _value, bytes _data, bytes _operatorData) view returns (bool, bytes1, bytes32)", + selector: "0xa7b518b1", + }, + { + name: "isMultiPartition", + signature: "function isMultiPartition() view returns (bool)", + selector: "0xbd09cc54", + }, + { + name: "isOperator", + signature: "function isOperator(address _operator, address _tokenHolder) view returns (bool)", + selector: "0xb6363cf2", + }, + { + name: "isOperatorForPartition", + signature: + "function isOperatorForPartition(bytes32 _partition, address _operator, address _tokenHolder) view returns (bool)", + selector: "0x6d77cad6", + }, + { + name: "partitionsOf", + signature: "function partitionsOf(address _tokenHolder) view returns (bytes32[])", + selector: "0x740ab8f4", + }, + { name: "totalSupply", signature: "function totalSupply() view returns (uint256)", selector: "0x18160ddd" }, + { + name: "totalSupplyByPartition", + signature: "function totalSupplyByPartition(bytes32 _partition) view returns (uint256)", + selector: "0xa26734dc", + }, + ], + errors: [ + { name: "ExpirationNotReached", signature: "ExpirationNotReached()", selector: "0x92899bcd" }, + { name: "InterestRateIsKpiLinked", signature: "InterestRateIsKpiLinked()", selector: "0x68eba14f" }, + ], + factory: (signer, useTimeTravel = false) => + useTimeTravel + ? new ERC1410ReadKpiLinkedRateFacetTimeTravel__factory(signer) + : new ERC1410ReadKpiLinkedRateFacet__factory(signer), + }, + + ERC1410ReadSustainabilityPerformanceTargetRateFacet: { + name: "ERC1410ReadSustainabilityPerformanceTargetRateFacet", + resolverKey: { + name: "_ERC1410_READ_SUSTAINABILITY_PERFORMANCE_TARGET_RATE_RESOLVER_KEY", + value: "0x7c15e98edcc41b3177b8cfff7055cd57b47000fd843fce22e7ead13f07e346b6", + }, + inheritance: ["ERC1410ReadFacetBase", "CommonSustainabilityPerformanceTargetInterestRate"], + methods: [ + { + name: "balanceOf", + signature: "function balanceOf(address _tokenHolder) view returns (uint256)", + selector: "0x70a08231", + }, + { + name: "balanceOfAt", + signature: "function balanceOfAt(address _tokenHolder, uint256 _timestamp) view returns (uint256)", + selector: "0x4ee2cd7e", + }, + { + name: "balanceOfByPartition", + signature: "function balanceOfByPartition(bytes32 _partition, address _tokenHolder) view returns (uint256)", + selector: "0x30e82803", + }, + { + name: "canRedeemByPartition", + signature: + "function canRedeemByPartition(address _from, bytes32 _partition, uint256 _value, bytes _data, bytes _operatorData) view returns (bool, bytes1, bytes32)", + selector: "0x7b7322c4", + }, + { + name: "canTransferByPartition", + signature: + "function canTransferByPartition(address _from, address _to, bytes32 _partition, uint256 _value, bytes _data, bytes _operatorData) view returns (bool, bytes1, bytes32)", + selector: "0xa7b518b1", + }, + { + name: "isMultiPartition", + signature: "function isMultiPartition() view returns (bool)", + selector: "0xbd09cc54", + }, + { + name: "isOperator", + signature: "function isOperator(address _operator, address _tokenHolder) view returns (bool)", + selector: "0xb6363cf2", + }, + { + name: "isOperatorForPartition", + signature: + "function isOperatorForPartition(bytes32 _partition, address _operator, address _tokenHolder) view returns (bool)", + selector: "0x6d77cad6", + }, + { + name: "partitionsOf", + signature: "function partitionsOf(address _tokenHolder) view returns (bytes32[])", + selector: "0x740ab8f4", + }, + { name: "totalSupply", signature: "function totalSupply() view returns (uint256)", selector: "0x18160ddd" }, + { + name: "totalSupplyByPartition", + signature: "function totalSupplyByPartition(bytes32 _partition) view returns (uint256)", + selector: "0xa26734dc", + }, + ], + errors: [ + { name: "ExpirationNotReached", signature: "ExpirationNotReached()", selector: "0x92899bcd" }, + { + name: "InterestRateIsSustainabilityPerformanceTarget", + signature: "InterestRateIsSustainabilityPerformanceTarget()", + selector: "0x15a15b0a", + }, + ], + factory: (signer, useTimeTravel = false) => + useTimeTravel + ? new ERC1410ReadSustainabilityPerformanceTargetRateFacetTimeTravel__factory(signer) + : new ERC1410ReadSustainabilityPerformanceTargetRateFacet__factory(signer), + }, + + ERC1410TokenHolderFacet: { + name: "ERC1410TokenHolderFacet", + resolverKey: { + name: "_ERC1410_TOKEN_HOLDER_RESOLVER_KEY", + value: "0x0466bf860d23f1ecbc25f364735e0dc3830d236f09182599831730ddd2792caa", + }, + inheritance: ["ERC1410TokenHolderFacetBase", "Common"], + methods: [ + { name: "authorizeOperator", signature: "function authorizeOperator(address _operator)", selector: "0x959b8c3f" }, + { + name: "authorizeOperatorByPartition", + signature: "function authorizeOperatorByPartition(bytes32 _partition, address _operator)", + selector: "0x103ef9e1", + }, + { + name: "redeemByPartition", + signature: "function redeemByPartition(bytes32 _partition, uint256 _value, bytes _data)", + selector: "0x62eb0068", + }, + { name: "revokeOperator", signature: "function revokeOperator(address _operator)", selector: "0xfad8b32a" }, + { + name: "revokeOperatorByPartition", + signature: "function revokeOperatorByPartition(bytes32 _partition, address _operator)", + selector: "0x168ecec5", + }, + { + name: "transferByPartition", + signature: + "function transferByPartition(bytes32 _partition, tuple(address to, uint256 value) _basicTransferInfo, bytes _data) returns (bytes32)", + selector: "0x3bc9bcd8", + }, + { + name: "triggerAndSyncAll", + signature: "function triggerAndSyncAll(bytes32 _partition, address _from, address _to)", + selector: "0x6afb79db", + }, + ], + errors: [{ name: "ExpirationNotReached", signature: "ExpirationNotReached()", selector: "0x92899bcd" }], + factory: (signer, useTimeTravel = false) => + useTimeTravel + ? new ERC1410TokenHolderFacetTimeTravel__factory(signer) + : new ERC1410TokenHolderFacet__factory(signer), + }, + + ERC1410TokenHolderFixedRateFacet: { + name: "ERC1410TokenHolderFixedRateFacet", + resolverKey: { + name: "_ERC1410_TOKEN_HOLDER_FIXED_RATE_RESOLVER_KEY", + value: "0xfd248a6ee4af07046520c6ec6f9b61a009db5407ec2f967775040cd67b66f08d", + }, + inheritance: ["ERC1410TokenHolderFacetBase", "CommonFixedInterestRate"], + methods: [ + { name: "authorizeOperator", signature: "function authorizeOperator(address _operator)", selector: "0x959b8c3f" }, + { + name: "authorizeOperatorByPartition", + signature: "function authorizeOperatorByPartition(bytes32 _partition, address _operator)", + selector: "0x103ef9e1", + }, + { + name: "redeemByPartition", + signature: "function redeemByPartition(bytes32 _partition, uint256 _value, bytes _data)", + selector: "0x62eb0068", + }, + { name: "revokeOperator", signature: "function revokeOperator(address _operator)", selector: "0xfad8b32a" }, + { + name: "revokeOperatorByPartition", + signature: "function revokeOperatorByPartition(bytes32 _partition, address _operator)", + selector: "0x168ecec5", + }, + { + name: "transferByPartition", + signature: + "function transferByPartition(bytes32 _partition, tuple(address to, uint256 value) _basicTransferInfo, bytes _data) returns (bytes32)", + selector: "0x3bc9bcd8", + }, + { + name: "triggerAndSyncAll", + signature: "function triggerAndSyncAll(bytes32 _partition, address _from, address _to)", + selector: "0x6afb79db", + }, + ], + errors: [ + { name: "ExpirationNotReached", signature: "ExpirationNotReached()", selector: "0x92899bcd" }, + { name: "InterestRateIsFixed", signature: "InterestRateIsFixed()", selector: "0x849d4eb8" }, + ], + factory: (signer, useTimeTravel = false) => + useTimeTravel + ? new ERC1410TokenHolderFixedRateFacetTimeTravel__factory(signer) + : new ERC1410TokenHolderFixedRateFacet__factory(signer), + }, + + ERC1410TokenHolderKpiLinkedRateFacet: { + name: "ERC1410TokenHolderKpiLinkedRateFacet", + resolverKey: { + name: "_ERC1410_TOKEN_HOLDER_KPI_LINKED_RATE_RESOLVER_KEY", + value: "0x463e4b758e14b6cdc1dd053ae3df476d527be8131eb3b41c64b4cf8019855237", + }, + inheritance: ["ERC1410TokenHolderFacetBase", "CommonKpiLinkedInterestRate"], + methods: [ + { name: "authorizeOperator", signature: "function authorizeOperator(address _operator)", selector: "0x959b8c3f" }, + { + name: "authorizeOperatorByPartition", + signature: "function authorizeOperatorByPartition(bytes32 _partition, address _operator)", + selector: "0x103ef9e1", + }, + { + name: "redeemByPartition", + signature: "function redeemByPartition(bytes32 _partition, uint256 _value, bytes _data)", + selector: "0x62eb0068", + }, + { name: "revokeOperator", signature: "function revokeOperator(address _operator)", selector: "0xfad8b32a" }, + { + name: "revokeOperatorByPartition", + signature: "function revokeOperatorByPartition(bytes32 _partition, address _operator)", + selector: "0x168ecec5", + }, + { + name: "transferByPartition", + signature: + "function transferByPartition(bytes32 _partition, tuple(address to, uint256 value) _basicTransferInfo, bytes _data) returns (bytes32)", + selector: "0x3bc9bcd8", + }, + { + name: "triggerAndSyncAll", + signature: "function triggerAndSyncAll(bytes32 _partition, address _from, address _to)", + selector: "0x6afb79db", + }, + ], + errors: [ + { name: "ExpirationNotReached", signature: "ExpirationNotReached()", selector: "0x92899bcd" }, + { name: "InterestRateIsKpiLinked", signature: "InterestRateIsKpiLinked()", selector: "0x68eba14f" }, + ], + factory: (signer, useTimeTravel = false) => + useTimeTravel + ? new ERC1410TokenHolderKpiLinkedRateFacetTimeTravel__factory(signer) + : new ERC1410TokenHolderKpiLinkedRateFacet__factory(signer), + }, + + ERC1410TokenHolderSustainabilityPerformanceTargetRateFacet: { + name: "ERC1410TokenHolderSustainabilityPerformanceTargetRateFacet", + resolverKey: { + name: "_ERC1410_TOKEN_HOLDER_SUSTAINABILITY_PERFORMANCE_TARGET_RATE_RESOLVER_KEY", + value: "0x6e21f1ca6d12f08b0d36f08711a48500d02dcf7edd2e8b87e4de350b98df4822", + }, + inheritance: ["ERC1410TokenHolderFacetBase", "CommonSustainabilityPerformanceTargetInterestRate"], + methods: [ + { name: "authorizeOperator", signature: "function authorizeOperator(address _operator)", selector: "0x959b8c3f" }, + { + name: "authorizeOperatorByPartition", + signature: "function authorizeOperatorByPartition(bytes32 _partition, address _operator)", + selector: "0x103ef9e1", + }, + { + name: "redeemByPartition", + signature: "function redeemByPartition(bytes32 _partition, uint256 _value, bytes _data)", + selector: "0x62eb0068", + }, + { name: "revokeOperator", signature: "function revokeOperator(address _operator)", selector: "0xfad8b32a" }, + { + name: "revokeOperatorByPartition", + signature: "function revokeOperatorByPartition(bytes32 _partition, address _operator)", + selector: "0x168ecec5", + }, + { + name: "transferByPartition", + signature: + "function transferByPartition(bytes32 _partition, tuple(address to, uint256 value) _basicTransferInfo, bytes _data) returns (bytes32)", + selector: "0x3bc9bcd8", + }, + { + name: "triggerAndSyncAll", + signature: "function triggerAndSyncAll(bytes32 _partition, address _from, address _to)", + selector: "0x6afb79db", + }, + ], + errors: [ + { name: "ExpirationNotReached", signature: "ExpirationNotReached()", selector: "0x92899bcd" }, + { + name: "InterestRateIsSustainabilityPerformanceTarget", + signature: "InterestRateIsSustainabilityPerformanceTarget()", + selector: "0x15a15b0a", + }, + ], + factory: (signer, useTimeTravel = false) => + useTimeTravel + ? new ERC1410TokenHolderSustainabilityPerformanceTargetRateFacetTimeTravel__factory(signer) + : new ERC1410TokenHolderSustainabilityPerformanceTargetRateFacet__factory(signer), + }, + + ERC1594Facet: { + name: "ERC1594Facet", + resolverKey: { + name: "_ERC1594_RESOLVER_KEY", + value: "0xcb70773e8163595d8bd906e277adeb3935976ad802ee8c29face3dfb0263291f", + }, + inheritance: ["ERC1594FacetBase", "Common"], + methods: [ + { + name: "canTransfer", + signature: + "function canTransfer(address _to, uint256 _value, bytes _data) view returns (bool, bytes1, bytes32)", + selector: "0x1badb25c", + }, + { + name: "canTransferFrom", + signature: + "function canTransferFrom(address _from, address _to, uint256 _value, bytes _data) view returns (bool, bytes1, bytes32)", + selector: "0x122eb575", + }, + { name: "initialize_ERC1594", signature: "function initialize_ERC1594()", selector: "0x9be12cea" }, + { name: "isIssuable", signature: "function isIssuable() view returns (bool)", selector: "0x2f1cae85" }, + { + name: "issue", + signature: "function issue(address _tokenHolder, uint256 _value, bytes _data)", + selector: "0xbb3acde9", + }, + { name: "redeem", signature: "function redeem(uint256 _value, bytes _data)", selector: "0xe77c646d" }, + { + name: "redeemFrom", + signature: "function redeemFrom(address _tokenHolder, uint256 _value, bytes _data)", + selector: "0x9675193c", + }, + { + name: "transferFromWithData", + signature: "function transferFromWithData(address _from, address _to, uint256 _value, bytes _data)", + selector: "0xee532f31", + }, + { + name: "transferWithData", + signature: "function transferWithData(address _to, uint256 _value, bytes _data)", + selector: "0x2535f762", + }, + ], + events: [ + { + name: "TransferFromWithData", + signature: "TransferFromWithData(address,address,address,uint256,bytes)", + topic0: "0x7d32874c3a67d8bea4a75c3d32f8fda3b1d5c767d4d42b96710a820b22e31957", + }, + { + name: "TransferWithData", + signature: "TransferWithData(address,address,uint256,bytes)", + topic0: "0xe68ca1ec8e8e022357047aae1f96036cbb808c6dc2bbbfbd3bde507ab21098c4", + }, + ], + errors: [{ name: "ExpirationNotReached", signature: "ExpirationNotReached()", selector: "0x92899bcd" }], + factory: (signer, useTimeTravel = false) => + useTimeTravel ? new ERC1594FacetTimeTravel__factory(signer) : new ERC1594Facet__factory(signer), + }, + + ERC1594FixedRateFacet: { + name: "ERC1594FixedRateFacet", + resolverKey: { + name: "_ERC1594_FIXED_RATE_RESOLVER_KEY", + value: "0x7a8f3e6d2c4b1a9e5f7d8c6b4a2e1f9d7c5b3a1e9f7d5c3b1a9e7f5d3c1b9e7f", + }, + inheritance: ["ERC1594FacetBase", "CommonFixedInterestRate"], + methods: [ + { + name: "canTransfer", + signature: + "function canTransfer(address _to, uint256 _value, bytes _data) view returns (bool, bytes1, bytes32)", + selector: "0x1badb25c", + }, + { + name: "canTransferFrom", + signature: + "function canTransferFrom(address _from, address _to, uint256 _value, bytes _data) view returns (bool, bytes1, bytes32)", + selector: "0x122eb575", + }, + { name: "initialize_ERC1594", signature: "function initialize_ERC1594()", selector: "0x9be12cea" }, + { name: "isIssuable", signature: "function isIssuable() view returns (bool)", selector: "0x2f1cae85" }, + { + name: "issue", + signature: "function issue(address _tokenHolder, uint256 _value, bytes _data)", + selector: "0xbb3acde9", + }, + { name: "redeem", signature: "function redeem(uint256 _value, bytes _data)", selector: "0xe77c646d" }, + { + name: "redeemFrom", + signature: "function redeemFrom(address _tokenHolder, uint256 _value, bytes _data)", + selector: "0x9675193c", + }, + { + name: "transferFromWithData", + signature: "function transferFromWithData(address _from, address _to, uint256 _value, bytes _data)", + selector: "0xee532f31", + }, + { + name: "transferWithData", + signature: "function transferWithData(address _to, uint256 _value, bytes _data)", + selector: "0x2535f762", + }, + ], + events: [ + { + name: "TransferFromWithData", + signature: "TransferFromWithData(address,address,address,uint256,bytes)", + topic0: "0x7d32874c3a67d8bea4a75c3d32f8fda3b1d5c767d4d42b96710a820b22e31957", + }, + { + name: "TransferWithData", + signature: "TransferWithData(address,address,uint256,bytes)", + topic0: "0xe68ca1ec8e8e022357047aae1f96036cbb808c6dc2bbbfbd3bde507ab21098c4", + }, + ], + errors: [ + { name: "ExpirationNotReached", signature: "ExpirationNotReached()", selector: "0x92899bcd" }, + { name: "InterestRateIsFixed", signature: "InterestRateIsFixed()", selector: "0x849d4eb8" }, + ], + factory: (signer, useTimeTravel = false) => + useTimeTravel ? new ERC1594FixedRateFacetTimeTravel__factory(signer) : new ERC1594FixedRateFacet__factory(signer), + }, + + ERC1594KpiLinkedRateFacet: { + name: "ERC1594KpiLinkedRateFacet", + resolverKey: { + name: "_ERC1594_KPI_LINKED_RATE_RESOLVER_KEY", + value: "0x1b4e7a9d3f5c2e8a6d4b9f7e5c3a1d8f6e4c2a9d7f5e3c1b8f6d4e2c9a7f5d3e", + }, + inheritance: ["ERC1594FacetBase", "CommonKpiLinkedInterestRate"], + methods: [ + { + name: "canTransfer", + signature: + "function canTransfer(address _to, uint256 _value, bytes _data) view returns (bool, bytes1, bytes32)", + selector: "0x1badb25c", + }, + { + name: "canTransferFrom", + signature: + "function canTransferFrom(address _from, address _to, uint256 _value, bytes _data) view returns (bool, bytes1, bytes32)", + selector: "0x122eb575", + }, + { name: "initialize_ERC1594", signature: "function initialize_ERC1594()", selector: "0x9be12cea" }, + { name: "isIssuable", signature: "function isIssuable() view returns (bool)", selector: "0x2f1cae85" }, + { + name: "issue", + signature: "function issue(address _tokenHolder, uint256 _value, bytes _data)", + selector: "0xbb3acde9", + }, + { name: "redeem", signature: "function redeem(uint256 _value, bytes _data)", selector: "0xe77c646d" }, + { + name: "redeemFrom", + signature: "function redeemFrom(address _tokenHolder, uint256 _value, bytes _data)", + selector: "0x9675193c", + }, + { + name: "transferFromWithData", + signature: "function transferFromWithData(address _from, address _to, uint256 _value, bytes _data)", + selector: "0xee532f31", + }, + { + name: "transferWithData", + signature: "function transferWithData(address _to, uint256 _value, bytes _data)", + selector: "0x2535f762", + }, + ], + events: [ + { + name: "TransferFromWithData", + signature: "TransferFromWithData(address,address,address,uint256,bytes)", + topic0: "0x7d32874c3a67d8bea4a75c3d32f8fda3b1d5c767d4d42b96710a820b22e31957", + }, + { + name: "TransferWithData", + signature: "TransferWithData(address,address,uint256,bytes)", + topic0: "0xe68ca1ec8e8e022357047aae1f96036cbb808c6dc2bbbfbd3bde507ab21098c4", + }, + ], + errors: [ + { name: "ExpirationNotReached", signature: "ExpirationNotReached()", selector: "0x92899bcd" }, + { name: "InterestRateIsKpiLinked", signature: "InterestRateIsKpiLinked()", selector: "0x68eba14f" }, + ], + factory: (signer, useTimeTravel = false) => + useTimeTravel + ? new ERC1594KpiLinkedRateFacetTimeTravel__factory(signer) + : new ERC1594KpiLinkedRateFacet__factory(signer), + }, + + ERC1594SustainabilityPerformanceTargetRateFacet: { + name: "ERC1594SustainabilityPerformanceTargetRateFacet", + resolverKey: { + name: "_ERC1594_SUSTAINABILITY_PERFORMANCE_TARGET_RATE_RESOLVER_KEY", + value: "0x2c5f8a3d6e9b1f4c7a2e5d8b1f4c7a2e5d8b1f4c7a2e5d8b1f4c7a2e5d8b1f4c", + }, + inheritance: ["ERC1594FacetBase", "CommonSustainabilityPerformanceTargetInterestRate"], + methods: [ + { + name: "canTransfer", + signature: + "function canTransfer(address _to, uint256 _value, bytes _data) view returns (bool, bytes1, bytes32)", + selector: "0x1badb25c", + }, + { + name: "canTransferFrom", + signature: + "function canTransferFrom(address _from, address _to, uint256 _value, bytes _data) view returns (bool, bytes1, bytes32)", + selector: "0x122eb575", + }, + { name: "initialize_ERC1594", signature: "function initialize_ERC1594()", selector: "0x9be12cea" }, + { name: "isIssuable", signature: "function isIssuable() view returns (bool)", selector: "0x2f1cae85" }, + { + name: "issue", + signature: "function issue(address _tokenHolder, uint256 _value, bytes _data)", + selector: "0xbb3acde9", + }, + { name: "redeem", signature: "function redeem(uint256 _value, bytes _data)", selector: "0xe77c646d" }, + { + name: "redeemFrom", + signature: "function redeemFrom(address _tokenHolder, uint256 _value, bytes _data)", + selector: "0x9675193c", + }, + { + name: "transferFromWithData", + signature: "function transferFromWithData(address _from, address _to, uint256 _value, bytes _data)", + selector: "0xee532f31", + }, + { + name: "transferWithData", + signature: "function transferWithData(address _to, uint256 _value, bytes _data)", + selector: "0x2535f762", + }, + ], + events: [ + { + name: "TransferFromWithData", + signature: "TransferFromWithData(address,address,address,uint256,bytes)", + topic0: "0x7d32874c3a67d8bea4a75c3d32f8fda3b1d5c767d4d42b96710a820b22e31957", + }, + { + name: "TransferWithData", + signature: "TransferWithData(address,address,uint256,bytes)", + topic0: "0xe68ca1ec8e8e022357047aae1f96036cbb808c6dc2bbbfbd3bde507ab21098c4", + }, + ], + errors: [ + { name: "ExpirationNotReached", signature: "ExpirationNotReached()", selector: "0x92899bcd" }, + { + name: "InterestRateIsSustainabilityPerformanceTarget", + signature: "InterestRateIsSustainabilityPerformanceTarget()", + selector: "0x15a15b0a", + }, + ], + factory: (signer, useTimeTravel = false) => + useTimeTravel + ? new ERC1594SustainabilityPerformanceTargetRateFacetTimeTravel__factory(signer) + : new ERC1594SustainabilityPerformanceTargetRateFacet__factory(signer), + }, + + ERC1643Facet: { + name: "ERC1643Facet", + resolverKey: { + name: "_ERC1643_RESOLVER_KEY", + value: "0x24543637956a3076689f171d3932b10f22d40f3785d53acebb340f37bed01625", + }, + inheritance: ["ERC1643FacetBase", "Common"], + methods: [ + { + name: "getAllDocuments", + signature: "function getAllDocuments() view returns (bytes32[])", + selector: "0x9fa5f50b", + }, + { + name: "getDocument", + signature: "function getDocument(bytes32 _name) view returns (string, bytes32, uint256)", + selector: "0xb10d6b41", + }, + { name: "removeDocument", signature: "function removeDocument(bytes32 _name)", selector: "0xc3501848" }, + { + name: "setDocument", + signature: "function setDocument(bytes32 _name, string _uri, bytes32 _documentHash)", + selector: "0x010648ca", + }, + ], + events: [ + { + name: "DocumentRemoved", + signature: "DocumentRemoved(bytes32,string,bytes32)", + topic0: "0x3d9bba27d3e360d8c80645beed7e991454a8271bf6f269a24f7782be0f0d0654", + }, + { + name: "DocumentUpdated", + signature: "DocumentUpdated(bytes32,string,bytes32)", + topic0: "0xb4c22d60cd550a815744f04e3ff5278bf19684565ee00e2b084041b6024bd6f6", + }, + ], + errors: [ + { name: "DocumentDoesNotExist", signature: "DocumentDoesNotExist(bytes32)", selector: "0xc2e54650" }, + { name: "EmptyHASH", signature: "EmptyHASH()", selector: "0x402e72be" }, + { name: "EmptyName", signature: "EmptyName()", selector: "0x2ef13105" }, + { name: "EmptyURI", signature: "EmptyURI()", selector: "0xd07b00d6" }, + { name: "ExpirationNotReached", signature: "ExpirationNotReached()", selector: "0x92899bcd" }, + ], + factory: (signer, useTimeTravel = false) => + useTimeTravel ? new ERC1643FacetTimeTravel__factory(signer) : new ERC1643Facet__factory(signer), + }, + + ERC1643FixedRateFacet: { + name: "ERC1643FixedRateFacet", + resolverKey: { + name: "_ERC1643_FIXED_RATE_RESOLVER_KEY", + value: "0x3d6e9f1c5a8b2e7f4d9c6a3e1f8d5c2a9f6e3d1c8f5e2d9c6f3e1d8c5f2d9c6f", + }, + inheritance: ["ERC1643FacetBase", "CommonFixedInterestRate"], + methods: [ + { + name: "getAllDocuments", + signature: "function getAllDocuments() view returns (bytes32[])", + selector: "0x9fa5f50b", + }, + { + name: "getDocument", + signature: "function getDocument(bytes32 _name) view returns (string, bytes32, uint256)", + selector: "0xb10d6b41", + }, + { name: "removeDocument", signature: "function removeDocument(bytes32 _name)", selector: "0xc3501848" }, + { + name: "setDocument", + signature: "function setDocument(bytes32 _name, string _uri, bytes32 _documentHash)", + selector: "0x010648ca", + }, + ], + events: [ + { + name: "DocumentRemoved", + signature: "DocumentRemoved(bytes32,string,bytes32)", + topic0: "0x3d9bba27d3e360d8c80645beed7e991454a8271bf6f269a24f7782be0f0d0654", + }, + { + name: "DocumentUpdated", + signature: "DocumentUpdated(bytes32,string,bytes32)", + topic0: "0xb4c22d60cd550a815744f04e3ff5278bf19684565ee00e2b084041b6024bd6f6", + }, + ], + errors: [ + { name: "DocumentDoesNotExist", signature: "DocumentDoesNotExist(bytes32)", selector: "0xc2e54650" }, + { name: "EmptyHASH", signature: "EmptyHASH()", selector: "0x402e72be" }, + { name: "EmptyName", signature: "EmptyName()", selector: "0x2ef13105" }, + { name: "EmptyURI", signature: "EmptyURI()", selector: "0xd07b00d6" }, + { name: "ExpirationNotReached", signature: "ExpirationNotReached()", selector: "0x92899bcd" }, + { name: "InterestRateIsFixed", signature: "InterestRateIsFixed()", selector: "0x849d4eb8" }, + ], + factory: (signer, useTimeTravel = false) => + useTimeTravel ? new ERC1643FixedRateFacetTimeTravel__factory(signer) : new ERC1643FixedRateFacet__factory(signer), + }, + + ERC1643KpiLinkedRateFacet: { + name: "ERC1643KpiLinkedRateFacet", + resolverKey: { + name: "_ERC1643_KPI_LINKED_RATE_RESOLVER_KEY", + value: "0x4e7f1a2d5c8e3f6a9d2e5f8c1d4a7e2f5c8d1e4f7c2e5d8f1e4c7d2f5e8d1f4e", + }, + inheritance: ["ERC1643FacetBase", "CommonKpiLinkedInterestRate"], + methods: [ + { + name: "getAllDocuments", + signature: "function getAllDocuments() view returns (bytes32[])", + selector: "0x9fa5f50b", + }, + { + name: "getDocument", + signature: "function getDocument(bytes32 _name) view returns (string, bytes32, uint256)", + selector: "0xb10d6b41", + }, + { name: "removeDocument", signature: "function removeDocument(bytes32 _name)", selector: "0xc3501848" }, + { + name: "setDocument", + signature: "function setDocument(bytes32 _name, string _uri, bytes32 _documentHash)", + selector: "0x010648ca", + }, + ], + events: [ + { + name: "DocumentRemoved", + signature: "DocumentRemoved(bytes32,string,bytes32)", + topic0: "0x3d9bba27d3e360d8c80645beed7e991454a8271bf6f269a24f7782be0f0d0654", + }, + { + name: "DocumentUpdated", + signature: "DocumentUpdated(bytes32,string,bytes32)", + topic0: "0xb4c22d60cd550a815744f04e3ff5278bf19684565ee00e2b084041b6024bd6f6", + }, + ], + errors: [ + { name: "DocumentDoesNotExist", signature: "DocumentDoesNotExist(bytes32)", selector: "0xc2e54650" }, + { name: "EmptyHASH", signature: "EmptyHASH()", selector: "0x402e72be" }, + { name: "EmptyName", signature: "EmptyName()", selector: "0x2ef13105" }, + { name: "EmptyURI", signature: "EmptyURI()", selector: "0xd07b00d6" }, + { name: "ExpirationNotReached", signature: "ExpirationNotReached()", selector: "0x92899bcd" }, + { name: "InterestRateIsKpiLinked", signature: "InterestRateIsKpiLinked()", selector: "0x68eba14f" }, + ], + factory: (signer, useTimeTravel = false) => + useTimeTravel + ? new ERC1643KpiLinkedRateFacetTimeTravel__factory(signer) + : new ERC1643KpiLinkedRateFacet__factory(signer), + }, + + ERC1643SustainabilityPerformanceTargetRateFacet: { + name: "ERC1643SustainabilityPerformanceTargetRateFacet", + resolverKey: { + name: "_ERC1643_SUSTAINABILITY_PERFORMANCE_TARGET_RATE_RESOLVER_KEY", + value: "0x5f8d2a3e6c9f1d4e7a2f5c8d1e4f7c2e5d8f1e4c7d2f5e8d1f4c7e2d5f8d1f4c", + }, + inheritance: ["ERC1643FacetBase", "CommonSustainabilityPerformanceTargetInterestRate"], + methods: [ + { + name: "getAllDocuments", + signature: "function getAllDocuments() view returns (bytes32[])", + selector: "0x9fa5f50b", + }, + { + name: "getDocument", + signature: "function getDocument(bytes32 _name) view returns (string, bytes32, uint256)", + selector: "0xb10d6b41", + }, + { name: "removeDocument", signature: "function removeDocument(bytes32 _name)", selector: "0xc3501848" }, + { + name: "setDocument", + signature: "function setDocument(bytes32 _name, string _uri, bytes32 _documentHash)", + selector: "0x010648ca", + }, + ], + events: [ + { + name: "DocumentRemoved", + signature: "DocumentRemoved(bytes32,string,bytes32)", + topic0: "0x3d9bba27d3e360d8c80645beed7e991454a8271bf6f269a24f7782be0f0d0654", + }, + { + name: "DocumentUpdated", + signature: "DocumentUpdated(bytes32,string,bytes32)", + topic0: "0xb4c22d60cd550a815744f04e3ff5278bf19684565ee00e2b084041b6024bd6f6", + }, + ], + errors: [ + { name: "DocumentDoesNotExist", signature: "DocumentDoesNotExist(bytes32)", selector: "0xc2e54650" }, + { name: "EmptyHASH", signature: "EmptyHASH()", selector: "0x402e72be" }, + { name: "EmptyName", signature: "EmptyName()", selector: "0x2ef13105" }, + { name: "EmptyURI", signature: "EmptyURI()", selector: "0xd07b00d6" }, + { name: "ExpirationNotReached", signature: "ExpirationNotReached()", selector: "0x92899bcd" }, + { + name: "InterestRateIsSustainabilityPerformanceTarget", + signature: "InterestRateIsSustainabilityPerformanceTarget()", + selector: "0x15a15b0a", + }, + ], + factory: (signer, useTimeTravel = false) => + useTimeTravel + ? new ERC1643SustainabilityPerformanceTargetRateFacetTimeTravel__factory(signer) + : new ERC1643SustainabilityPerformanceTargetRateFacet__factory(signer), + }, + + ERC1644Facet: { + name: "ERC1644Facet", + resolverKey: { + name: "_ERC1644_RESOLVER_KEY", + value: "0xf1da2ed271d62ba0b6597874c96fb6ed7d929e5ec679f4ad8c2c516c72f6736d", + }, + inheritance: ["ERC1644FacetBase", "Common"], + methods: [ + { + name: "controllerRedeem", + signature: "function controllerRedeem(address _tokenHolder, uint256 _value, bytes _data, bytes _operatorData)", + selector: "0x2bc6acc3", + }, + { + name: "controllerTransfer", + signature: + "function controllerTransfer(address _from, address _to, uint256 _value, bytes _data, bytes _operatorData)", + selector: "0xf282527a", + }, + { name: "finalizeControllable", signature: "function finalizeControllable()", selector: "0xa213934f" }, + { + name: "initialize_ERC1644", + signature: "function initialize_ERC1644(bool _controllable)", + selector: "0xaa4ea38e", + }, + { name: "isControllable", signature: "function isControllable() view returns (bool)", selector: "0x4c783bf5" }, + ], + errors: [{ name: "ExpirationNotReached", signature: "ExpirationNotReached()", selector: "0x92899bcd" }], + factory: (signer, useTimeTravel = false) => + useTimeTravel ? new ERC1644FacetTimeTravel__factory(signer) : new ERC1644Facet__factory(signer), + }, + + ERC1644FixedRateFacet: { + name: "ERC1644FixedRateFacet", + resolverKey: { + name: "_ERC1644_FIXED_RATE_RESOLVER_KEY", + value: "0x6f9e3d1c8a5f2e9d6c3f1e8d5c2f9e6d3f1e8c5f2d9e6c3f1d8e5c2f9d6e3f1d", + }, + inheritance: ["ERC1644FacetBase", "CommonFixedInterestRate"], + methods: [ + { + name: "controllerRedeem", + signature: "function controllerRedeem(address _tokenHolder, uint256 _value, bytes _data, bytes _operatorData)", + selector: "0x2bc6acc3", + }, + { + name: "controllerTransfer", + signature: + "function controllerTransfer(address _from, address _to, uint256 _value, bytes _data, bytes _operatorData)", + selector: "0xf282527a", + }, + { name: "finalizeControllable", signature: "function finalizeControllable()", selector: "0xa213934f" }, + { + name: "initialize_ERC1644", + signature: "function initialize_ERC1644(bool _controllable)", + selector: "0xaa4ea38e", + }, + { name: "isControllable", signature: "function isControllable() view returns (bool)", selector: "0x4c783bf5" }, + ], + errors: [ + { name: "ExpirationNotReached", signature: "ExpirationNotReached()", selector: "0x92899bcd" }, + { name: "InterestRateIsFixed", signature: "InterestRateIsFixed()", selector: "0x849d4eb8" }, + ], + factory: (signer, useTimeTravel = false) => + useTimeTravel ? new ERC1644FixedRateFacetTimeTravel__factory(signer) : new ERC1644FixedRateFacet__factory(signer), + }, + + ERC1644KpiLinkedRateFacet: { + name: "ERC1644KpiLinkedRateFacet", + resolverKey: { + name: "_ERC1644_KPI_LINKED_RATE_RESOLVER_KEY", + value: "0x7a1f4e2d5c8f3e6d9c2f5e8d1f4c7e2d5f8c1f4e7d2e5f8c1e4d7c2f5d8e1f4c", + }, + inheritance: ["ERC1644FacetBase", "CommonKpiLinkedInterestRate"], + methods: [ + { + name: "controllerRedeem", + signature: "function controllerRedeem(address _tokenHolder, uint256 _value, bytes _data, bytes _operatorData)", + selector: "0x2bc6acc3", + }, + { + name: "controllerTransfer", + signature: + "function controllerTransfer(address _from, address _to, uint256 _value, bytes _data, bytes _operatorData)", + selector: "0xf282527a", + }, + { name: "finalizeControllable", signature: "function finalizeControllable()", selector: "0xa213934f" }, + { + name: "initialize_ERC1644", + signature: "function initialize_ERC1644(bool _controllable)", + selector: "0xaa4ea38e", + }, + { name: "isControllable", signature: "function isControllable() view returns (bool)", selector: "0x4c783bf5" }, + ], + errors: [ + { name: "ExpirationNotReached", signature: "ExpirationNotReached()", selector: "0x92899bcd" }, + { name: "InterestRateIsKpiLinked", signature: "InterestRateIsKpiLinked()", selector: "0x68eba14f" }, + ], + factory: (signer, useTimeTravel = false) => + useTimeTravel + ? new ERC1644KpiLinkedRateFacetTimeTravel__factory(signer) + : new ERC1644KpiLinkedRateFacet__factory(signer), + }, + + ERC1644SustainabilityPerformanceTargetRateFacet: { + name: "ERC1644SustainabilityPerformanceTargetRateFacet", + resolverKey: { + name: "_ERC1644_SUSTAINABILITY_PERFORMANCE_TARGET_RATE_RESOLVER_KEY", + value: "0x8b2f5e3d6f9c2e5d8f1e4c7d2e5f8d1f4c7e2d5f8d1f4c7e2d5f8d1f4c7e2d5f", + }, + inheritance: ["ERC1644FacetBase", "CommonSustainabilityPerformanceTargetInterestRate"], + methods: [ + { + name: "controllerRedeem", + signature: "function controllerRedeem(address _tokenHolder, uint256 _value, bytes _data, bytes _operatorData)", + selector: "0x2bc6acc3", + }, + { + name: "controllerTransfer", + signature: + "function controllerTransfer(address _from, address _to, uint256 _value, bytes _data, bytes _operatorData)", + selector: "0xf282527a", + }, + { name: "finalizeControllable", signature: "function finalizeControllable()", selector: "0xa213934f" }, + { + name: "initialize_ERC1644", + signature: "function initialize_ERC1644(bool _controllable)", + selector: "0xaa4ea38e", + }, + { name: "isControllable", signature: "function isControllable() view returns (bool)", selector: "0x4c783bf5" }, + ], + errors: [ + { name: "ExpirationNotReached", signature: "ExpirationNotReached()", selector: "0x92899bcd" }, + { + name: "InterestRateIsSustainabilityPerformanceTarget", + signature: "InterestRateIsSustainabilityPerformanceTarget()", + selector: "0x15a15b0a", + }, + ], + factory: (signer, useTimeTravel = false) => + useTimeTravel + ? new ERC1644SustainabilityPerformanceTargetRateFacetTimeTravel__factory(signer) + : new ERC1644SustainabilityPerformanceTargetRateFacet__factory(signer), + }, + + ERC20Facet: { + name: "ERC20Facet", + resolverKey: { + name: "_ERC20_RESOLVER_KEY", + value: "0x064c883089ba1a596d9146c7aaa73c19ef8825f374c67a9538787c3d12e68dc5", + }, + inheritance: ["ERC20FacetBase", "Common"], + methods: [ + { + name: "allowance", + signature: "function allowance(address owner, address spender) view returns (uint256)", + selector: "0xdd62ed3e", + }, + { + name: "approve", + signature: "function approve(address spender, uint256 value) returns (bool)", + selector: "0x095ea7b3", + }, + { name: "decimals", signature: "function decimals() view returns (uint8)", selector: "0x313ce567" }, + { + name: "decimalsAt", + signature: "function decimalsAt(uint256 _timestamp) view returns (uint8)", + selector: "0x771918ca", + }, + { + name: "decreaseAllowance", + signature: "function decreaseAllowance(address spender, uint256 subtractedValue) returns (bool)", + selector: "0xa457c2d7", + }, + { + name: "getERC20Metadata", + signature: + "function getERC20Metadata() view returns (tuple(tuple(string name, string symbol, string isin, uint8 decimals) info, uint8 securityType))", + selector: "0x8e649195", + }, + { + name: "increaseAllowance", + signature: "function increaseAllowance(address spender, uint256 addedValue) returns (bool)", + selector: "0x39509351", + }, + { + name: "initialize_ERC20", + signature: + "function initialize_ERC20(tuple(tuple(string name, string symbol, string isin, uint8 decimals) info, uint8 securityType) erc20Metadata)", + selector: "0xe04fb235", + }, + { name: "name", signature: "function name() view returns (string)", selector: "0x06fdde03" }, + { name: "symbol", signature: "function symbol() view returns (string)", selector: "0x95d89b41" }, + { + name: "transfer", + signature: "function transfer(address to, uint256 amount) returns (bool)", + selector: "0xa9059cbb", + }, + { + name: "transferFrom", + signature: "function transferFrom(address from, address to, uint256 amount) returns (bool)", + selector: "0x23b872dd", + }, + ], + errors: [{ name: "ExpirationNotReached", signature: "ExpirationNotReached()", selector: "0x92899bcd" }], + factory: (signer, useTimeTravel = false) => + useTimeTravel ? new ERC20FacetTimeTravel__factory(signer) : new ERC20Facet__factory(signer), + }, + + ERC20FixedRateFacet: { + name: "ERC20FixedRateFacet", + resolverKey: { + name: "_ERC20_FIXED_RATE_RESOLVER_KEY", + value: "0x3e4f428a95dadb9b2d5121c4067c845270879ee5e180e4c4d03ad40f00160376", + }, + inheritance: ["ERC20FacetBase", "CommonFixedInterestRate"], + methods: [ + { + name: "allowance", + signature: "function allowance(address owner, address spender) view returns (uint256)", + selector: "0xdd62ed3e", + }, + { + name: "approve", + signature: "function approve(address spender, uint256 value) returns (bool)", + selector: "0x095ea7b3", + }, + { name: "decimals", signature: "function decimals() view returns (uint8)", selector: "0x313ce567" }, + { + name: "decimalsAt", + signature: "function decimalsAt(uint256 _timestamp) view returns (uint8)", + selector: "0x771918ca", + }, + { + name: "decreaseAllowance", + signature: "function decreaseAllowance(address spender, uint256 subtractedValue) returns (bool)", + selector: "0xa457c2d7", + }, + { + name: "getERC20Metadata", + signature: + "function getERC20Metadata() view returns (tuple(tuple(string name, string symbol, string isin, uint8 decimals) info, uint8 securityType))", + selector: "0x8e649195", + }, + { + name: "increaseAllowance", + signature: "function increaseAllowance(address spender, uint256 addedValue) returns (bool)", + selector: "0x39509351", + }, + { + name: "initialize_ERC20", + signature: + "function initialize_ERC20(tuple(tuple(string name, string symbol, string isin, uint8 decimals) info, uint8 securityType) erc20Metadata)", + selector: "0xe04fb235", + }, + { name: "name", signature: "function name() view returns (string)", selector: "0x06fdde03" }, + { name: "symbol", signature: "function symbol() view returns (string)", selector: "0x95d89b41" }, + { + name: "transfer", + signature: "function transfer(address to, uint256 amount) returns (bool)", + selector: "0xa9059cbb", + }, + { + name: "transferFrom", + signature: "function transferFrom(address from, address to, uint256 amount) returns (bool)", + selector: "0x23b872dd", + }, + ], + errors: [ + { name: "ExpirationNotReached", signature: "ExpirationNotReached()", selector: "0x92899bcd" }, + { name: "InterestRateIsFixed", signature: "InterestRateIsFixed()", selector: "0x849d4eb8" }, + ], + factory: (signer, useTimeTravel = false) => + useTimeTravel ? new ERC20FixedRateFacetTimeTravel__factory(signer) : new ERC20FixedRateFacet__factory(signer), + }, + + ERC20KpiLinkedRateFacet: { + name: "ERC20KpiLinkedRateFacet", + resolverKey: { + name: "_ERC20_KPI_LINKED_RATE_RESOLVER_KEY", + value: "0xe4565636726032d04f6d265d3ee61c2f046ea49ecb39f4ca68dd4f65713e9620", + }, + inheritance: ["ERC20FacetBase", "CommonKpiLinkedInterestRate"], + methods: [ + { + name: "allowance", + signature: "function allowance(address owner, address spender) view returns (uint256)", + selector: "0xdd62ed3e", + }, + { + name: "approve", + signature: "function approve(address spender, uint256 value) returns (bool)", + selector: "0x095ea7b3", + }, + { name: "decimals", signature: "function decimals() view returns (uint8)", selector: "0x313ce567" }, + { + name: "decimalsAt", + signature: "function decimalsAt(uint256 _timestamp) view returns (uint8)", + selector: "0x771918ca", + }, + { + name: "decreaseAllowance", + signature: "function decreaseAllowance(address spender, uint256 subtractedValue) returns (bool)", + selector: "0xa457c2d7", + }, + { + name: "getERC20Metadata", + signature: + "function getERC20Metadata() view returns (tuple(tuple(string name, string symbol, string isin, uint8 decimals) info, uint8 securityType))", + selector: "0x8e649195", + }, + { + name: "increaseAllowance", + signature: "function increaseAllowance(address spender, uint256 addedValue) returns (bool)", + selector: "0x39509351", + }, + { + name: "initialize_ERC20", + signature: + "function initialize_ERC20(tuple(tuple(string name, string symbol, string isin, uint8 decimals) info, uint8 securityType) erc20Metadata)", + selector: "0xe04fb235", + }, + { name: "name", signature: "function name() view returns (string)", selector: "0x06fdde03" }, + { name: "symbol", signature: "function symbol() view returns (string)", selector: "0x95d89b41" }, + { + name: "transfer", + signature: "function transfer(address to, uint256 amount) returns (bool)", + selector: "0xa9059cbb", + }, + { + name: "transferFrom", + signature: "function transferFrom(address from, address to, uint256 amount) returns (bool)", + selector: "0x23b872dd", + }, + ], + errors: [ + { name: "ExpirationNotReached", signature: "ExpirationNotReached()", selector: "0x92899bcd" }, + { name: "InterestRateIsKpiLinked", signature: "InterestRateIsKpiLinked()", selector: "0x68eba14f" }, + ], + factory: (signer, useTimeTravel = false) => + useTimeTravel + ? new ERC20KpiLinkedRateFacetTimeTravel__factory(signer) + : new ERC20KpiLinkedRateFacet__factory(signer), + }, + + ERC20PermitFacet: { + name: "ERC20PermitFacet", + resolverKey: { + name: "_ERC20PERMIT_RESOLVER_KEY", + value: "0xef05f0313623d32145212ed45620c8b2c8c294b3d6955cf26f3d1b0569fbc1fa", + }, + inheritance: ["ERC20PermitFacetBase", "Common"], + methods: [ + { + name: "DOMAIN_SEPARATOR", + signature: "function DOMAIN_SEPARATOR() view returns (bytes32)", + selector: "0x3644e515", + }, + { + name: "permit", + signature: + "function permit(address owner, address spender, uint256 value, uint256 deadline, uint8 v, bytes32 r, bytes32 s)", + selector: "0xd505accf", + }, + ], + errors: [ + { name: "ERC2612ExpiredSignature", signature: "ERC2612ExpiredSignature(uint256)", selector: "0x62791302" }, + { name: "ERC2612InvalidSigner", signature: "ERC2612InvalidSigner(address,address)", selector: "0x4b800e46" }, + { name: "ExpirationNotReached", signature: "ExpirationNotReached()", selector: "0x92899bcd" }, + ], + factory: (signer, useTimeTravel = false) => + useTimeTravel ? new ERC20PermitFacetTimeTravel__factory(signer) : new ERC20PermitFacet__factory(signer), + }, + + ERC20PermitFixedRateFacet: { + name: "ERC20PermitFixedRateFacet", + resolverKey: { + name: "_ERC20PERMIT_FIXED_RATE_RESOLVER_KEY", + value: "0xc85b8a95de0375d3b552d368932ecaeb9fe85d470eb1e89bc29040cb35d168a3", + }, + inheritance: ["ERC20PermitFacetBase", "CommonFixedInterestRate"], + methods: [ + { + name: "DOMAIN_SEPARATOR", + signature: "function DOMAIN_SEPARATOR() view returns (bytes32)", + selector: "0x3644e515", + }, + { + name: "permit", + signature: + "function permit(address owner, address spender, uint256 value, uint256 deadline, uint8 v, bytes32 r, bytes32 s)", + selector: "0xd505accf", + }, + ], + errors: [ + { name: "ERC2612ExpiredSignature", signature: "ERC2612ExpiredSignature(uint256)", selector: "0x62791302" }, + { name: "ERC2612InvalidSigner", signature: "ERC2612InvalidSigner(address,address)", selector: "0x4b800e46" }, + { name: "ExpirationNotReached", signature: "ExpirationNotReached()", selector: "0x92899bcd" }, + { name: "InterestRateIsFixed", signature: "InterestRateIsFixed()", selector: "0x849d4eb8" }, + ], + factory: (signer, useTimeTravel = false) => + useTimeTravel + ? new ERC20PermitFixedRateFacetTimeTravel__factory(signer) + : new ERC20PermitFixedRateFacet__factory(signer), + }, + + ERC20PermitKpiLinkedRateFacet: { + name: "ERC20PermitKpiLinkedRateFacet", + resolverKey: { + name: "_ERC20PERMIT_KPI_LINKED_RATE_RESOLVER_KEY", + value: "0x468437a5a7a128b245fb2c3ac08cf17e5f2a6983dece41309b58fffa1fca80a9", + }, + inheritance: ["ERC20PermitFacetBase", "CommonKpiLinkedInterestRate"], + methods: [ + { + name: "DOMAIN_SEPARATOR", + signature: "function DOMAIN_SEPARATOR() view returns (bytes32)", + selector: "0x3644e515", + }, + { + name: "permit", + signature: + "function permit(address owner, address spender, uint256 value, uint256 deadline, uint8 v, bytes32 r, bytes32 s)", + selector: "0xd505accf", + }, + ], + errors: [ + { name: "ERC2612ExpiredSignature", signature: "ERC2612ExpiredSignature(uint256)", selector: "0x62791302" }, + { name: "ERC2612InvalidSigner", signature: "ERC2612InvalidSigner(address,address)", selector: "0x4b800e46" }, + { name: "ExpirationNotReached", signature: "ExpirationNotReached()", selector: "0x92899bcd" }, + { name: "InterestRateIsKpiLinked", signature: "InterestRateIsKpiLinked()", selector: "0x68eba14f" }, + ], + factory: (signer, useTimeTravel = false) => + useTimeTravel + ? new ERC20PermitKpiLinkedRateFacetTimeTravel__factory(signer) + : new ERC20PermitKpiLinkedRateFacet__factory(signer), + }, + + ERC20PermitSustainabilityPerformanceTargetRateFacet: { + name: "ERC20PermitSustainabilityPerformanceTargetRateFacet", + resolverKey: { + name: "_ERC20PERMIT_SUSTAINABILITY_PERFORMANCE_TARGET_RATE_RESOLVER_KEY", + value: "0x3bf8d35ad3c3320d95184dd4f9a0bfc2e56b151318d9d27eefa74461d24f5c61", + }, + inheritance: ["ERC20PermitFacetBase", "CommonSustainabilityPerformanceTargetInterestRate"], + methods: [ + { + name: "DOMAIN_SEPARATOR", + signature: "function DOMAIN_SEPARATOR() view returns (bytes32)", + selector: "0x3644e515", + }, + { + name: "permit", + signature: + "function permit(address owner, address spender, uint256 value, uint256 deadline, uint8 v, bytes32 r, bytes32 s)", + selector: "0xd505accf", + }, + ], + errors: [ + { name: "ERC2612ExpiredSignature", signature: "ERC2612ExpiredSignature(uint256)", selector: "0x62791302" }, + { name: "ERC2612InvalidSigner", signature: "ERC2612InvalidSigner(address,address)", selector: "0x4b800e46" }, + { name: "ExpirationNotReached", signature: "ExpirationNotReached()", selector: "0x92899bcd" }, + { + name: "InterestRateIsSustainabilityPerformanceTarget", + signature: "InterestRateIsSustainabilityPerformanceTarget()", + selector: "0x15a15b0a", + }, + ], + factory: (signer, useTimeTravel = false) => + useTimeTravel + ? new ERC20PermitSustainabilityPerformanceTargetRateFacetTimeTravel__factory(signer) + : new ERC20PermitSustainabilityPerformanceTargetRateFacet__factory(signer), + }, + + ERC20SustainabilityPerformanceTargetRateFacet: { + name: "ERC20SustainabilityPerformanceTargetRateFacet", + resolverKey: { + name: "_ERC20_SUSTAINABILITY_PERFORMANCE_TARGET_RATE_RESOLVER_KEY", + value: "0x002a101a46899eecb6af6a76839f76be301e6292a6a5d3eb7a1bae4a0d3574ee", + }, + inheritance: ["ERC20FacetBase", "CommonSustainabilityPerformanceTargetInterestRate"], + methods: [ + { + name: "allowance", + signature: "function allowance(address owner, address spender) view returns (uint256)", + selector: "0xdd62ed3e", + }, + { + name: "approve", + signature: "function approve(address spender, uint256 value) returns (bool)", + selector: "0x095ea7b3", + }, + { name: "decimals", signature: "function decimals() view returns (uint8)", selector: "0x313ce567" }, + { + name: "decimalsAt", + signature: "function decimalsAt(uint256 _timestamp) view returns (uint8)", + selector: "0x771918ca", + }, + { + name: "decreaseAllowance", + signature: "function decreaseAllowance(address spender, uint256 subtractedValue) returns (bool)", + selector: "0xa457c2d7", + }, + { + name: "getERC20Metadata", + signature: + "function getERC20Metadata() view returns (tuple(tuple(string name, string symbol, string isin, uint8 decimals) info, uint8 securityType))", + selector: "0x8e649195", + }, + { + name: "increaseAllowance", + signature: "function increaseAllowance(address spender, uint256 addedValue) returns (bool)", + selector: "0x39509351", + }, + { + name: "initialize_ERC20", + signature: + "function initialize_ERC20(tuple(tuple(string name, string symbol, string isin, uint8 decimals) info, uint8 securityType) erc20Metadata)", + selector: "0xe04fb235", + }, + { name: "name", signature: "function name() view returns (string)", selector: "0x06fdde03" }, + { name: "symbol", signature: "function symbol() view returns (string)", selector: "0x95d89b41" }, + { + name: "transfer", + signature: "function transfer(address to, uint256 amount) returns (bool)", + selector: "0xa9059cbb", + }, + { + name: "transferFrom", + signature: "function transferFrom(address from, address to, uint256 amount) returns (bool)", + selector: "0x23b872dd", + }, + ], + errors: [ + { name: "ExpirationNotReached", signature: "ExpirationNotReached()", selector: "0x92899bcd" }, + { + name: "InterestRateIsSustainabilityPerformanceTarget", + signature: "InterestRateIsSustainabilityPerformanceTarget()", + selector: "0x15a15b0a", + }, + ], + factory: (signer, useTimeTravel = false) => + useTimeTravel + ? new ERC20SustainabilityPerformanceTargetRateFacetTimeTravel__factory(signer) + : new ERC20SustainabilityPerformanceTargetRateFacet__factory(signer), + }, + + ERC20VotesFacet: { + name: "ERC20VotesFacet", + resolverKey: { + name: "_ERC20VOTES_RESOLVER_KEY", + value: "0x5cbfbaa435e19a43530a00ac685c9b5252862a94af2053667ded44642a0d9f4c", + }, + inheritance: ["ERC20VotesFacetBase", "Common"], + methods: [ + { name: "CLOCK_MODE", signature: "function CLOCK_MODE() view returns (string)", selector: "0x4bf5d7e9" }, + { + name: "checkpoints", + signature: + "function checkpoints(address _account, uint256 _pos) view returns (tuple(uint256 from, uint256 value))", + selector: "0x0cdfebfa", + }, + { name: "clock", signature: "function clock() view returns (uint48)", selector: "0x91ddadf4" }, + { name: "delegate", signature: "function delegate(address _delegatee)", selector: "0x5c19a95c" }, + { + name: "delegates", + signature: "function delegates(address _account) view returns (address)", + selector: "0x587cde1e", + }, + { + name: "getPastTotalSupply", + signature: "function getPastTotalSupply(uint256 _timepoint) view returns (uint256)", + selector: "0x8e539e8c", + }, + { + name: "getPastVotes", + signature: "function getPastVotes(address _account, uint256 _timepoint) view returns (uint256)", + selector: "0x3a46b1a8", + }, + { + name: "getVotes", + signature: "function getVotes(address _account) view returns (uint256)", + selector: "0x9ab24eb0", + }, + { + name: "initialize_ERC20Votes", + signature: "function initialize_ERC20Votes(bool _activated)", + selector: "0x65fa0b29", + }, + { name: "isActivated", signature: "function isActivated() view returns (bool)", selector: "0x4a8c1fb4" }, + { + name: "numCheckpoints", + signature: "function numCheckpoints(address _account) view returns (uint256)", + selector: "0x6fcfff45", + }, + ], + errors: [ + { + name: "AbafChangeForBlockForbidden", + signature: "AbafChangeForBlockForbidden(uint256)", + selector: "0x5a2afdff", + }, + { name: "ExpirationNotReached", signature: "ExpirationNotReached()", selector: "0x92899bcd" }, + ], + factory: (signer, useTimeTravel = false) => + useTimeTravel ? new ERC20VotesFacetTimeTravel__factory(signer) : new ERC20VotesFacet__factory(signer), + }, + + ERC20VotesFixedRateFacet: { + name: "ERC20VotesFixedRateFacet", + resolverKey: { + name: "_ERC20VOTES_FIXED_RATE_RESOLVER_KEY", + value: "0xce2bc140ce5298990432f0332c33ccaa813a89e3bc3c0589eb30eabe005d2742", + }, + inheritance: ["ERC20VotesFacetBase", "CommonFixedInterestRate"], + methods: [ + { name: "CLOCK_MODE", signature: "function CLOCK_MODE() view returns (string)", selector: "0x4bf5d7e9" }, + { + name: "checkpoints", + signature: + "function checkpoints(address _account, uint256 _pos) view returns (tuple(uint256 from, uint256 value))", + selector: "0x0cdfebfa", + }, + { name: "clock", signature: "function clock() view returns (uint48)", selector: "0x91ddadf4" }, + { name: "delegate", signature: "function delegate(address _delegatee)", selector: "0x5c19a95c" }, + { + name: "delegates", + signature: "function delegates(address _account) view returns (address)", + selector: "0x587cde1e", + }, + { + name: "getPastTotalSupply", + signature: "function getPastTotalSupply(uint256 _timepoint) view returns (uint256)", + selector: "0x8e539e8c", + }, + { + name: "getPastVotes", + signature: "function getPastVotes(address _account, uint256 _timepoint) view returns (uint256)", + selector: "0x3a46b1a8", + }, + { + name: "getVotes", + signature: "function getVotes(address _account) view returns (uint256)", + selector: "0x9ab24eb0", + }, + { + name: "initialize_ERC20Votes", + signature: "function initialize_ERC20Votes(bool _activated)", + selector: "0x65fa0b29", + }, + { name: "isActivated", signature: "function isActivated() view returns (bool)", selector: "0x4a8c1fb4" }, + { + name: "numCheckpoints", + signature: "function numCheckpoints(address _account) view returns (uint256)", + selector: "0x6fcfff45", + }, + ], + errors: [ + { + name: "AbafChangeForBlockForbidden", + signature: "AbafChangeForBlockForbidden(uint256)", + selector: "0x5a2afdff", + }, + { name: "ExpirationNotReached", signature: "ExpirationNotReached()", selector: "0x92899bcd" }, + { name: "InterestRateIsFixed", signature: "InterestRateIsFixed()", selector: "0x849d4eb8" }, + ], + factory: (signer, useTimeTravel = false) => + useTimeTravel + ? new ERC20VotesFixedRateFacetTimeTravel__factory(signer) + : new ERC20VotesFixedRateFacet__factory(signer), + }, + + ERC20VotesKpiLinkedRateFacet: { + name: "ERC20VotesKpiLinkedRateFacet", + resolverKey: { + name: "_ERC20VOTES_KPI_LINKED_RATE_RESOLVER_KEY", + value: "0x9d720cb6c08dff4ea63b2b4f3908fa551321fdc478de6b46a67ba5ecb46f82fc", + }, + inheritance: ["ERC20VotesFacetBase", "CommonKpiLinkedInterestRate"], + methods: [ + { name: "CLOCK_MODE", signature: "function CLOCK_MODE() view returns (string)", selector: "0x4bf5d7e9" }, + { + name: "checkpoints", + signature: + "function checkpoints(address _account, uint256 _pos) view returns (tuple(uint256 from, uint256 value))", + selector: "0x0cdfebfa", + }, + { name: "clock", signature: "function clock() view returns (uint48)", selector: "0x91ddadf4" }, + { name: "delegate", signature: "function delegate(address _delegatee)", selector: "0x5c19a95c" }, + { + name: "delegates", + signature: "function delegates(address _account) view returns (address)", + selector: "0x587cde1e", + }, + { + name: "getPastTotalSupply", + signature: "function getPastTotalSupply(uint256 _timepoint) view returns (uint256)", + selector: "0x8e539e8c", + }, + { + name: "getPastVotes", + signature: "function getPastVotes(address _account, uint256 _timepoint) view returns (uint256)", + selector: "0x3a46b1a8", + }, + { + name: "getVotes", + signature: "function getVotes(address _account) view returns (uint256)", + selector: "0x9ab24eb0", + }, + { + name: "initialize_ERC20Votes", + signature: "function initialize_ERC20Votes(bool _activated)", + selector: "0x65fa0b29", + }, + { name: "isActivated", signature: "function isActivated() view returns (bool)", selector: "0x4a8c1fb4" }, + { + name: "numCheckpoints", + signature: "function numCheckpoints(address _account) view returns (uint256)", + selector: "0x6fcfff45", + }, + ], + errors: [ + { + name: "AbafChangeForBlockForbidden", + signature: "AbafChangeForBlockForbidden(uint256)", + selector: "0x5a2afdff", + }, + { name: "ExpirationNotReached", signature: "ExpirationNotReached()", selector: "0x92899bcd" }, + { name: "InterestRateIsKpiLinked", signature: "InterestRateIsKpiLinked()", selector: "0x68eba14f" }, + ], + factory: (signer, useTimeTravel = false) => + useTimeTravel + ? new ERC20VotesKpiLinkedRateFacetTimeTravel__factory(signer) + : new ERC20VotesKpiLinkedRateFacet__factory(signer), + }, + + ERC20VotesSustainabilityPerformanceTargetRateFacet: { + name: "ERC20VotesSustainabilityPerformanceTargetRateFacet", + resolverKey: { + name: "_ERC20VOTES_SUSTAINABILITY_PERFORMANCE_TARGET_RATE_RESOLVER_KEY", + value: "0x9d7e0002a7ae9c94734d62ac85bb1cd4c333dd6c5fb308a7a2b60dd77dfa9d44", + }, + inheritance: ["ERC20VotesFacetBase", "CommonSustainabilityPerformanceTargetInterestRate"], + methods: [ + { name: "CLOCK_MODE", signature: "function CLOCK_MODE() view returns (string)", selector: "0x4bf5d7e9" }, + { + name: "checkpoints", + signature: + "function checkpoints(address _account, uint256 _pos) view returns (tuple(uint256 from, uint256 value))", + selector: "0x0cdfebfa", + }, + { name: "clock", signature: "function clock() view returns (uint48)", selector: "0x91ddadf4" }, + { name: "delegate", signature: "function delegate(address _delegatee)", selector: "0x5c19a95c" }, + { + name: "delegates", + signature: "function delegates(address _account) view returns (address)", + selector: "0x587cde1e", + }, + { + name: "getPastTotalSupply", + signature: "function getPastTotalSupply(uint256 _timepoint) view returns (uint256)", + selector: "0x8e539e8c", + }, + { + name: "getPastVotes", + signature: "function getPastVotes(address _account, uint256 _timepoint) view returns (uint256)", + selector: "0x3a46b1a8", + }, + { + name: "getVotes", + signature: "function getVotes(address _account) view returns (uint256)", + selector: "0x9ab24eb0", + }, + { + name: "initialize_ERC20Votes", + signature: "function initialize_ERC20Votes(bool _activated)", + selector: "0x65fa0b29", + }, + { name: "isActivated", signature: "function isActivated() view returns (bool)", selector: "0x4a8c1fb4" }, + { + name: "numCheckpoints", + signature: "function numCheckpoints(address _account) view returns (uint256)", + selector: "0x6fcfff45", + }, + ], + errors: [ + { + name: "AbafChangeForBlockForbidden", + signature: "AbafChangeForBlockForbidden(uint256)", + selector: "0x5a2afdff", + }, + { name: "ExpirationNotReached", signature: "ExpirationNotReached()", selector: "0x92899bcd" }, + { + name: "InterestRateIsSustainabilityPerformanceTarget", + signature: "InterestRateIsSustainabilityPerformanceTarget()", + selector: "0x15a15b0a", + }, + ], + factory: (signer, useTimeTravel = false) => + useTimeTravel + ? new ERC20VotesSustainabilityPerformanceTargetRateFacetTimeTravel__factory(signer) + : new ERC20VotesSustainabilityPerformanceTargetRateFacet__factory(signer), + }, + + ERC3643BatchFacet: { + name: "ERC3643BatchFacet", + resolverKey: { + name: "_ERC3643_BATCH_RESOLVER_KEY", + value: "0x00332311d9f0c311b31b87399043a90feb10341fcbb4d7f4ed6e3c0072a3c392", + }, + inheritance: ["ERC3643BatchFacetBase", "Common"], + methods: [ + { + name: "batchBurn", + signature: "function batchBurn(address[] _userAddresses, uint256[] _amounts)", + selector: "0x4a6cc677", + }, + { + name: "batchForcedTransfer", + signature: "function batchForcedTransfer(address[] _fromList, address[] _toList, uint256[] _amounts)", + selector: "0x42a47abc", + }, + { + name: "batchMint", + signature: "function batchMint(address[] _toList, uint256[] _amounts)", + selector: "0x68573107", + }, + { + name: "batchTransfer", + signature: "function batchTransfer(address[] _toList, uint256[] _amounts)", + selector: "0x88d695b2", + }, + ], + errors: [{ name: "ExpirationNotReached", signature: "ExpirationNotReached()", selector: "0x92899bcd" }], + factory: (signer, useTimeTravel = false) => + useTimeTravel ? new ERC3643BatchFacetTimeTravel__factory(signer) : new ERC3643BatchFacet__factory(signer), + }, + + ERC3643BatchFixedRateFacet: { + name: "ERC3643BatchFixedRateFacet", + resolverKey: { + name: "_ERC3643_BATCH_FIXED_RATE_RESOLVER_KEY", + value: "0x3563ac36f573b2e288846d3437686b6a5137a7c9b5cbcd027816db63e07d4138", + }, + inheritance: ["ERC3643BatchFacetBase", "CommonFixedInterestRate"], + methods: [ + { + name: "batchBurn", + signature: "function batchBurn(address[] _userAddresses, uint256[] _amounts)", + selector: "0x4a6cc677", + }, + { + name: "batchForcedTransfer", + signature: "function batchForcedTransfer(address[] _fromList, address[] _toList, uint256[] _amounts)", + selector: "0x42a47abc", + }, + { + name: "batchMint", + signature: "function batchMint(address[] _toList, uint256[] _amounts)", + selector: "0x68573107", + }, + { + name: "batchTransfer", + signature: "function batchTransfer(address[] _toList, uint256[] _amounts)", + selector: "0x88d695b2", + }, + ], + errors: [ + { name: "ExpirationNotReached", signature: "ExpirationNotReached()", selector: "0x92899bcd" }, + { name: "InterestRateIsFixed", signature: "InterestRateIsFixed()", selector: "0x849d4eb8" }, + ], + factory: (signer, useTimeTravel = false) => + useTimeTravel + ? new ERC3643BatchFixedRateFacetTimeTravel__factory(signer) + : new ERC3643BatchFixedRateFacet__factory(signer), + }, + + ERC3643BatchKpiLinkedRateFacet: { + name: "ERC3643BatchKpiLinkedRateFacet", + resolverKey: { + name: "_ERC3643_BATCH_KPI_LINKED_RATE_RESOLVER_KEY", + value: "0xdf3ace3e8d3a434ee6c69da03060d81e1c8c217c16fad43a2819c0bc545253ae", + }, + inheritance: ["ERC3643BatchFacetBase", "CommonKpiLinkedInterestRate"], + methods: [ + { + name: "batchBurn", + signature: "function batchBurn(address[] _userAddresses, uint256[] _amounts)", + selector: "0x4a6cc677", + }, + { + name: "batchForcedTransfer", + signature: "function batchForcedTransfer(address[] _fromList, address[] _toList, uint256[] _amounts)", + selector: "0x42a47abc", + }, + { + name: "batchMint", + signature: "function batchMint(address[] _toList, uint256[] _amounts)", + selector: "0x68573107", + }, + { + name: "batchTransfer", + signature: "function batchTransfer(address[] _toList, uint256[] _amounts)", + selector: "0x88d695b2", + }, + ], + errors: [ + { name: "ExpirationNotReached", signature: "ExpirationNotReached()", selector: "0x92899bcd" }, + { name: "InterestRateIsKpiLinked", signature: "InterestRateIsKpiLinked()", selector: "0x68eba14f" }, + ], + factory: (signer, useTimeTravel = false) => + useTimeTravel + ? new ERC3643BatchKpiLinkedRateFacetTimeTravel__factory(signer) + : new ERC3643BatchKpiLinkedRateFacet__factory(signer), + }, + + ERC3643BatchSustainabilityPerformanceTargetRateFacet: { + name: "ERC3643BatchSustainabilityPerformanceTargetRateFacet", + resolverKey: { + name: "_ERC3643_BATCH_SUSTAINABILITY_PERFORMANCE_TARGET_RATE_RESOLVER_KEY", + value: "0x500c4c5bff9db733228f1df9b6e818bf8fab883422d3fbe971c036b513e983d9", + }, + inheritance: ["ERC3643BatchFacetBase", "CommonSustainabilityPerformanceTargetInterestRate"], + methods: [ + { + name: "batchBurn", + signature: "function batchBurn(address[] _userAddresses, uint256[] _amounts)", + selector: "0x4a6cc677", + }, + { + name: "batchForcedTransfer", + signature: "function batchForcedTransfer(address[] _fromList, address[] _toList, uint256[] _amounts)", + selector: "0x42a47abc", + }, + { + name: "batchMint", + signature: "function batchMint(address[] _toList, uint256[] _amounts)", + selector: "0x68573107", + }, + { + name: "batchTransfer", + signature: "function batchTransfer(address[] _toList, uint256[] _amounts)", + selector: "0x88d695b2", + }, + ], + errors: [ + { name: "ExpirationNotReached", signature: "ExpirationNotReached()", selector: "0x92899bcd" }, + { + name: "InterestRateIsSustainabilityPerformanceTarget", + signature: "InterestRateIsSustainabilityPerformanceTarget()", + selector: "0x15a15b0a", + }, + ], + factory: (signer, useTimeTravel = false) => + useTimeTravel + ? new ERC3643BatchSustainabilityPerformanceTargetRateFacetTimeTravel__factory(signer) + : new ERC3643BatchSustainabilityPerformanceTargetRateFacet__factory(signer), + }, + + ERC3643ManagementFacet: { + name: "ERC3643ManagementFacet", + resolverKey: { + name: "_ERC3643_MANAGEMENT_RESOLVER_KEY", + value: "0xae7b7d0da6ac02e802a8d85aa821dd5cb84e8448836471680f744f64b678a073", + }, + inheritance: ["ERC3643ManagementFacetBase", "Common"], + methods: [ + { name: "addAgent", signature: "function addAgent(address _agent)", selector: "0x84e79842" }, + { + name: "initialize_ERC3643", + signature: "function initialize_ERC3643(address _compliance, address _identityRegistry)", + selector: "0xc047bb6c", + }, + { + name: "recoveryAddress", + signature: + "function recoveryAddress(address _lostWallet, address _newWallet, address _investorOnchainID) returns (bool success_)", + selector: "0x9285948a", + }, + { name: "removeAgent", signature: "function removeAgent(address _agent)", selector: "0x97a6278e" }, + { name: "setCompliance", signature: "function setCompliance(address _compliance)", selector: "0xf8981789" }, + { + name: "setIdentityRegistry", + signature: "function setIdentityRegistry(address _identityRegistry)", + selector: "0xcbf3f861", + }, + { name: "setName", signature: "function setName(string _name)", selector: "0xc47f0027" }, + { name: "setOnchainID", signature: "function setOnchainID(address _onchainID)", selector: "0x3d1ddc5b" }, + { name: "setSymbol", signature: "function setSymbol(string _symbol)", selector: "0xb84c8246" }, + ], + events: [ + { + name: "AgentAdded", + signature: "AgentAdded(address)", + topic0: "0xf68e73cec97f2d70aa641fb26e87a4383686e2efacb648f2165aeb02ac562ec5", + }, + { + name: "AgentRemoved", + signature: "AgentRemoved(address)", + topic0: "0xed9c8ad8d5a0a66898ea49d2956929c93ae2e8bd50281b2ed897c5d1a6737e0b", + }, + { + name: "IdentityRegistryAdded", + signature: "IdentityRegistryAdded(address)", + topic0: "0xd2be862d755bca7e0d39772b2cab3a5578da9c285f69199f4c063c2294a7f36c", + }, + { + name: "RecoverySuccess", + signature: "RecoverySuccess(address,address,address)", + topic0: "0xf0c9129a94f30f1caaceb63e44b9811d0a3edf1d6c23757f346093af5553fed0", + }, + { + name: "UpdatedTokenInformation", + signature: "UpdatedTokenInformation(string,string,uint8,string,address)", + topic0: "0x6a1105ac8148a3c319adbc369f9072573e8a11d3a3d195e067e7c40767ec54d1", + }, + ], + errors: [ + { name: "AddressNotVerified", signature: "AddressNotVerified()", selector: "0x209d2853" }, + { name: "CannotRecoverWallet", signature: "CannotRecoverWallet()", selector: "0x505389ae" }, + { name: "ComplianceCallFailed", signature: "ComplianceCallFailed()", selector: "0x67fba102" }, + { name: "ComplianceNotAllowed", signature: "ComplianceNotAllowed()", selector: "0x66eb1b54" }, + { name: "ExpirationNotReached", signature: "ExpirationNotReached()", selector: "0x92899bcd" }, + { name: "IdentityRegistryCallFailed", signature: "IdentityRegistryCallFailed()", selector: "0xad87849e" }, + { + name: "InputAmountsArrayLengthMismatch", + signature: "InputAmountsArrayLengthMismatch()", + selector: "0x64f13710", + }, + { name: "InputBoolArrayLengthMismatch", signature: "InputBoolArrayLengthMismatch()", selector: "0x07ac0eb9" }, + { name: "WalletRecovered", signature: "WalletRecovered()", selector: "0xf9f9bcf9" }, + ], + factory: (signer, useTimeTravel = false) => + useTimeTravel + ? new ERC3643ManagementFacetTimeTravel__factory(signer) + : new ERC3643ManagementFacet__factory(signer), + }, + + ERC3643ManagementFixedRateFacet: { + name: "ERC3643ManagementFixedRateFacet", + resolverKey: { + name: "_ERC3643_MANAGEMENT_FIXED_RATE_RESOLVER_KEY", + value: "0xb82ec3e8b1d44871bbfe25257f4e57b7d9778bc578af2f0ce9ef218f6b897797", + }, + inheritance: ["ERC3643ManagementFacetBase", "CommonFixedInterestRate"], + methods: [ + { name: "addAgent", signature: "function addAgent(address _agent)", selector: "0x84e79842" }, + { + name: "initialize_ERC3643", + signature: "function initialize_ERC3643(address _compliance, address _identityRegistry)", + selector: "0xc047bb6c", + }, + { + name: "recoveryAddress", + signature: + "function recoveryAddress(address _lostWallet, address _newWallet, address _investorOnchainID) returns (bool success_)", + selector: "0x9285948a", + }, + { name: "removeAgent", signature: "function removeAgent(address _agent)", selector: "0x97a6278e" }, + { name: "setCompliance", signature: "function setCompliance(address _compliance)", selector: "0xf8981789" }, + { + name: "setIdentityRegistry", + signature: "function setIdentityRegistry(address _identityRegistry)", + selector: "0xcbf3f861", + }, + { name: "setName", signature: "function setName(string _name)", selector: "0xc47f0027" }, + { name: "setOnchainID", signature: "function setOnchainID(address _onchainID)", selector: "0x3d1ddc5b" }, + { name: "setSymbol", signature: "function setSymbol(string _symbol)", selector: "0xb84c8246" }, + ], + events: [ + { + name: "AgentAdded", + signature: "AgentAdded(address)", + topic0: "0xf68e73cec97f2d70aa641fb26e87a4383686e2efacb648f2165aeb02ac562ec5", + }, + { + name: "AgentRemoved", + signature: "AgentRemoved(address)", + topic0: "0xed9c8ad8d5a0a66898ea49d2956929c93ae2e8bd50281b2ed897c5d1a6737e0b", + }, + { + name: "IdentityRegistryAdded", + signature: "IdentityRegistryAdded(address)", + topic0: "0xd2be862d755bca7e0d39772b2cab3a5578da9c285f69199f4c063c2294a7f36c", + }, + { + name: "RecoverySuccess", + signature: "RecoverySuccess(address,address,address)", + topic0: "0xf0c9129a94f30f1caaceb63e44b9811d0a3edf1d6c23757f346093af5553fed0", + }, + { + name: "UpdatedTokenInformation", + signature: "UpdatedTokenInformation(string,string,uint8,string,address)", + topic0: "0x6a1105ac8148a3c319adbc369f9072573e8a11d3a3d195e067e7c40767ec54d1", + }, + ], + errors: [ + { name: "AddressNotVerified", signature: "AddressNotVerified()", selector: "0x209d2853" }, + { name: "CannotRecoverWallet", signature: "CannotRecoverWallet()", selector: "0x505389ae" }, + { name: "ComplianceCallFailed", signature: "ComplianceCallFailed()", selector: "0x67fba102" }, + { name: "ComplianceNotAllowed", signature: "ComplianceNotAllowed()", selector: "0x66eb1b54" }, + { name: "ExpirationNotReached", signature: "ExpirationNotReached()", selector: "0x92899bcd" }, + { name: "IdentityRegistryCallFailed", signature: "IdentityRegistryCallFailed()", selector: "0xad87849e" }, + { + name: "InputAmountsArrayLengthMismatch", + signature: "InputAmountsArrayLengthMismatch()", + selector: "0x64f13710", + }, + { name: "InputBoolArrayLengthMismatch", signature: "InputBoolArrayLengthMismatch()", selector: "0x07ac0eb9" }, + { name: "InterestRateIsFixed", signature: "InterestRateIsFixed()", selector: "0x849d4eb8" }, + { name: "WalletRecovered", signature: "WalletRecovered()", selector: "0xf9f9bcf9" }, + ], + factory: (signer, useTimeTravel = false) => + useTimeTravel + ? new ERC3643ManagementFixedRateFacetTimeTravel__factory(signer) + : new ERC3643ManagementFixedRateFacet__factory(signer), + }, + + ERC3643ManagementKpiLinkedRateFacet: { + name: "ERC3643ManagementKpiLinkedRateFacet", + resolverKey: { + name: "_ERC3643_MANAGEMENT_KPI_LINKED_RATE_RESOLVER_KEY", + value: "0x649facd691e27202b46bb9e328ca96c6f6dc0aeefdd6cfc15707ee162b7d5103", + }, + inheritance: ["ERC3643ManagementFacetBase", "CommonKpiLinkedInterestRate"], + methods: [ + { name: "addAgent", signature: "function addAgent(address _agent)", selector: "0x84e79842" }, + { + name: "initialize_ERC3643", + signature: "function initialize_ERC3643(address _compliance, address _identityRegistry)", + selector: "0xc047bb6c", + }, + { + name: "recoveryAddress", + signature: + "function recoveryAddress(address _lostWallet, address _newWallet, address _investorOnchainID) returns (bool success_)", + selector: "0x9285948a", + }, + { name: "removeAgent", signature: "function removeAgent(address _agent)", selector: "0x97a6278e" }, + { name: "setCompliance", signature: "function setCompliance(address _compliance)", selector: "0xf8981789" }, + { + name: "setIdentityRegistry", + signature: "function setIdentityRegistry(address _identityRegistry)", + selector: "0xcbf3f861", + }, + { name: "setName", signature: "function setName(string _name)", selector: "0xc47f0027" }, + { name: "setOnchainID", signature: "function setOnchainID(address _onchainID)", selector: "0x3d1ddc5b" }, + { name: "setSymbol", signature: "function setSymbol(string _symbol)", selector: "0xb84c8246" }, + ], + events: [ + { + name: "AgentAdded", + signature: "AgentAdded(address)", + topic0: "0xf68e73cec97f2d70aa641fb26e87a4383686e2efacb648f2165aeb02ac562ec5", + }, + { + name: "AgentRemoved", + signature: "AgentRemoved(address)", + topic0: "0xed9c8ad8d5a0a66898ea49d2956929c93ae2e8bd50281b2ed897c5d1a6737e0b", + }, + { + name: "IdentityRegistryAdded", + signature: "IdentityRegistryAdded(address)", + topic0: "0xd2be862d755bca7e0d39772b2cab3a5578da9c285f69199f4c063c2294a7f36c", + }, + { + name: "RecoverySuccess", + signature: "RecoverySuccess(address,address,address)", + topic0: "0xf0c9129a94f30f1caaceb63e44b9811d0a3edf1d6c23757f346093af5553fed0", + }, + { + name: "UpdatedTokenInformation", + signature: "UpdatedTokenInformation(string,string,uint8,string,address)", + topic0: "0x6a1105ac8148a3c319adbc369f9072573e8a11d3a3d195e067e7c40767ec54d1", + }, + ], + errors: [ + { name: "AddressNotVerified", signature: "AddressNotVerified()", selector: "0x209d2853" }, + { name: "CannotRecoverWallet", signature: "CannotRecoverWallet()", selector: "0x505389ae" }, + { name: "ComplianceCallFailed", signature: "ComplianceCallFailed()", selector: "0x67fba102" }, + { name: "ComplianceNotAllowed", signature: "ComplianceNotAllowed()", selector: "0x66eb1b54" }, + { name: "ExpirationNotReached", signature: "ExpirationNotReached()", selector: "0x92899bcd" }, + { name: "IdentityRegistryCallFailed", signature: "IdentityRegistryCallFailed()", selector: "0xad87849e" }, + { + name: "InputAmountsArrayLengthMismatch", + signature: "InputAmountsArrayLengthMismatch()", + selector: "0x64f13710", + }, + { name: "InputBoolArrayLengthMismatch", signature: "InputBoolArrayLengthMismatch()", selector: "0x07ac0eb9" }, + { name: "InterestRateIsKpiLinked", signature: "InterestRateIsKpiLinked()", selector: "0x68eba14f" }, + { name: "WalletRecovered", signature: "WalletRecovered()", selector: "0xf9f9bcf9" }, + ], + factory: (signer, useTimeTravel = false) => + useTimeTravel + ? new ERC3643ManagementKpiLinkedRateFacetTimeTravel__factory(signer) + : new ERC3643ManagementKpiLinkedRateFacet__factory(signer), + }, + + ERC3643ManagementSustainabilityPerformanceTargetRateFacet: { + name: "ERC3643ManagementSustainabilityPerformanceTargetRateFacet", + resolverKey: { + name: "_ERC3643_MANAGEMENT_SUSTAINABILITY_PERFORMANCE_TARGET_RATE_RESOLVER_KEY", + value: "0x324a20f20a55098c207cd0bc42498561962995b82918d6a9697320c42c5b11fa", + }, + inheritance: ["ERC3643ManagementFacetBase", "CommonSustainabilityPerformanceTargetInterestRate"], + methods: [ + { name: "addAgent", signature: "function addAgent(address _agent)", selector: "0x84e79842" }, + { + name: "initialize_ERC3643", + signature: "function initialize_ERC3643(address _compliance, address _identityRegistry)", + selector: "0xc047bb6c", + }, + { + name: "recoveryAddress", + signature: + "function recoveryAddress(address _lostWallet, address _newWallet, address _investorOnchainID) returns (bool success_)", + selector: "0x9285948a", + }, + { name: "removeAgent", signature: "function removeAgent(address _agent)", selector: "0x97a6278e" }, + { name: "setCompliance", signature: "function setCompliance(address _compliance)", selector: "0xf8981789" }, + { + name: "setIdentityRegistry", + signature: "function setIdentityRegistry(address _identityRegistry)", + selector: "0xcbf3f861", + }, + { name: "setName", signature: "function setName(string _name)", selector: "0xc47f0027" }, + { name: "setOnchainID", signature: "function setOnchainID(address _onchainID)", selector: "0x3d1ddc5b" }, + { name: "setSymbol", signature: "function setSymbol(string _symbol)", selector: "0xb84c8246" }, + ], + events: [ + { + name: "AgentAdded", + signature: "AgentAdded(address)", + topic0: "0xf68e73cec97f2d70aa641fb26e87a4383686e2efacb648f2165aeb02ac562ec5", + }, + { + name: "AgentRemoved", + signature: "AgentRemoved(address)", + topic0: "0xed9c8ad8d5a0a66898ea49d2956929c93ae2e8bd50281b2ed897c5d1a6737e0b", + }, + { + name: "IdentityRegistryAdded", + signature: "IdentityRegistryAdded(address)", + topic0: "0xd2be862d755bca7e0d39772b2cab3a5578da9c285f69199f4c063c2294a7f36c", + }, + { + name: "RecoverySuccess", + signature: "RecoverySuccess(address,address,address)", + topic0: "0xf0c9129a94f30f1caaceb63e44b9811d0a3edf1d6c23757f346093af5553fed0", + }, + { + name: "UpdatedTokenInformation", + signature: "UpdatedTokenInformation(string,string,uint8,string,address)", + topic0: "0x6a1105ac8148a3c319adbc369f9072573e8a11d3a3d195e067e7c40767ec54d1", + }, + ], + errors: [ + { name: "AddressNotVerified", signature: "AddressNotVerified()", selector: "0x209d2853" }, + { name: "CannotRecoverWallet", signature: "CannotRecoverWallet()", selector: "0x505389ae" }, + { name: "ComplianceCallFailed", signature: "ComplianceCallFailed()", selector: "0x67fba102" }, + { name: "ComplianceNotAllowed", signature: "ComplianceNotAllowed()", selector: "0x66eb1b54" }, + { name: "ExpirationNotReached", signature: "ExpirationNotReached()", selector: "0x92899bcd" }, + { name: "IdentityRegistryCallFailed", signature: "IdentityRegistryCallFailed()", selector: "0xad87849e" }, + { + name: "InputAmountsArrayLengthMismatch", + signature: "InputAmountsArrayLengthMismatch()", + selector: "0x64f13710", + }, + { name: "InputBoolArrayLengthMismatch", signature: "InputBoolArrayLengthMismatch()", selector: "0x07ac0eb9" }, + { + name: "InterestRateIsSustainabilityPerformanceTarget", + signature: "InterestRateIsSustainabilityPerformanceTarget()", + selector: "0x15a15b0a", + }, + { name: "WalletRecovered", signature: "WalletRecovered()", selector: "0xf9f9bcf9" }, + ], + factory: (signer, useTimeTravel = false) => + useTimeTravel + ? new ERC3643ManagementSustainabilityPerformanceTargetRateFacetTimeTravel__factory(signer) + : new ERC3643ManagementSustainabilityPerformanceTargetRateFacet__factory(signer), + }, + + ERC3643OperationsFacet: { + name: "ERC3643OperationsFacet", + resolverKey: { + name: "_ERC3643_OPERATIONS_RESOLVER_KEY", + value: "0xe30b6b8e9e62fb8f017c940c7ffac12709f7ef6ae90beac5570fab25c7384e9c", + }, + inheritance: ["ERC3643OperationsFacetBase", "Common"], + methods: [ + { name: "burn", signature: "function burn(address _userAddress, uint256 _amount)", selector: "0x9dc29fac" }, + { + name: "forcedTransfer", + signature: "function forcedTransfer(address _from, address _to, uint256 _amount) returns (bool)", + selector: "0x9fc1d0e7", + }, + { name: "mint", signature: "function mint(address _to, uint256 _amount)", selector: "0x40c10f19" }, + ], + errors: [{ name: "ExpirationNotReached", signature: "ExpirationNotReached()", selector: "0x92899bcd" }], + factory: (signer, useTimeTravel = false) => + useTimeTravel + ? new ERC3643OperationsFacetTimeTravel__factory(signer) + : new ERC3643OperationsFacet__factory(signer), + }, + + ERC3643OperationsFixedRateFacet: { + name: "ERC3643OperationsFixedRateFacet", + resolverKey: { + name: "_ERC3643_OPERATIONS_FIXED_RATE_RESOLVER_KEY", + value: "0x6524c4b11c24bcfff0472462572cdfbe5c671cad2df1ac54402e8a7b4dc3ee02", + }, + inheritance: ["ERC3643OperationsFacetBase", "CommonFixedInterestRate"], + methods: [ + { name: "burn", signature: "function burn(address _userAddress, uint256 _amount)", selector: "0x9dc29fac" }, + { + name: "forcedTransfer", + signature: "function forcedTransfer(address _from, address _to, uint256 _amount) returns (bool)", + selector: "0x9fc1d0e7", + }, + { name: "mint", signature: "function mint(address _to, uint256 _amount)", selector: "0x40c10f19" }, + ], + errors: [ + { name: "ExpirationNotReached", signature: "ExpirationNotReached()", selector: "0x92899bcd" }, + { name: "InterestRateIsFixed", signature: "InterestRateIsFixed()", selector: "0x849d4eb8" }, + ], + factory: (signer, useTimeTravel = false) => + useTimeTravel + ? new ERC3643OperationsFixedRateFacetTimeTravel__factory(signer) + : new ERC3643OperationsFixedRateFacet__factory(signer), + }, + + ERC3643OperationsKpiLinkedRateFacet: { + name: "ERC3643OperationsKpiLinkedRateFacet", + resolverKey: { + name: "_ERC3643_OPERATIONS_KPI_LINKED_RATE_RESOLVER_KEY", + value: "0x87b7a50a7578f2499b459e665b6b7b809ac635280a2157d21fc5de0fc4b54715", + }, + inheritance: ["ERC3643OperationsFacetBase", "CommonKpiLinkedInterestRate"], + methods: [ + { name: "burn", signature: "function burn(address _userAddress, uint256 _amount)", selector: "0x9dc29fac" }, + { + name: "forcedTransfer", + signature: "function forcedTransfer(address _from, address _to, uint256 _amount) returns (bool)", + selector: "0x9fc1d0e7", + }, + { name: "mint", signature: "function mint(address _to, uint256 _amount)", selector: "0x40c10f19" }, + ], + errors: [ + { name: "ExpirationNotReached", signature: "ExpirationNotReached()", selector: "0x92899bcd" }, + { name: "InterestRateIsKpiLinked", signature: "InterestRateIsKpiLinked()", selector: "0x68eba14f" }, + ], + factory: (signer, useTimeTravel = false) => + useTimeTravel + ? new ERC3643OperationsKpiLinkedRateFacetTimeTravel__factory(signer) + : new ERC3643OperationsKpiLinkedRateFacet__factory(signer), + }, + + ERC3643OperationsSustainabilityPerformanceTargetRateFacet: { + name: "ERC3643OperationsSustainabilityPerformanceTargetRateFacet", + resolverKey: { + name: "_ERC3643_OPERATIONS_SUSTAINABILITY_PERFORMANCE_TARGET_RATE_RESOLVER_KEY", + value: "0xbe85d38775742687362efc4fc0ffed08044614079fc51bbf7b0f29e11d3ffafa", + }, + inheritance: ["ERC3643OperationsFacetBase", "CommonSustainabilityPerformanceTargetInterestRate"], + methods: [ + { name: "burn", signature: "function burn(address _userAddress, uint256 _amount)", selector: "0x9dc29fac" }, + { + name: "forcedTransfer", + signature: "function forcedTransfer(address _from, address _to, uint256 _amount) returns (bool)", + selector: "0x9fc1d0e7", + }, + { name: "mint", signature: "function mint(address _to, uint256 _amount)", selector: "0x40c10f19" }, + ], + errors: [ + { name: "ExpirationNotReached", signature: "ExpirationNotReached()", selector: "0x92899bcd" }, + { + name: "InterestRateIsSustainabilityPerformanceTarget", + signature: "InterestRateIsSustainabilityPerformanceTarget()", + selector: "0x15a15b0a", + }, + ], + factory: (signer, useTimeTravel = false) => + useTimeTravel + ? new ERC3643OperationsSustainabilityPerformanceTargetRateFacetTimeTravel__factory(signer) + : new ERC3643OperationsSustainabilityPerformanceTargetRateFacet__factory(signer), + }, + + ERC3643ReadFacet: { + name: "ERC3643ReadFacet", + resolverKey: { + name: "_ERC3643_READ_RESOLVER_KEY", + value: "0x7743c4e9ff26ef34c3c482d2c12dabe076035eb44bf1c736722f04c33c20ef6a", + }, + inheritance: ["ERC3643ReadFacetBase", "Common"], + methods: [ + { name: "compliance", signature: "function compliance() view returns (address)", selector: "0x6290865d" }, + { + name: "identityRegistry", + signature: "function identityRegistry() view returns (address)", + selector: "0x134e18f4", + }, + { + name: "isAddressRecovered", + signature: "function isAddressRecovered(address _wallet) view returns (bool)", + selector: "0x1b997ec2", + }, + { name: "isAgent", signature: "function isAgent(address _agent) view returns (bool)", selector: "0x1ffbb064" }, + { name: "onchainID", signature: "function onchainID() view returns (address)", selector: "0xaba63705" }, + { name: "version", signature: "function version() view returns (string)", selector: "0x54fd4d50" }, + ], + errors: [{ name: "ExpirationNotReached", signature: "ExpirationNotReached()", selector: "0x92899bcd" }], + factory: (signer, useTimeTravel = false) => + useTimeTravel ? new ERC3643ReadFacetTimeTravel__factory(signer) : new ERC3643ReadFacet__factory(signer), + }, + + ERC3643ReadFixedRateFacet: { + name: "ERC3643ReadFixedRateFacet", + resolverKey: { + name: "_ERC3643_READ_FIXED_RATE_RESOLVER_KEY", + value: "0x53569c2059b40a4ccb6382b2180607da114ff92bfa263d7489ec7face7c4cc1f", + }, + inheritance: ["ERC3643ReadFacetBase", "CommonFixedInterestRate"], + methods: [ + { name: "compliance", signature: "function compliance() view returns (address)", selector: "0x6290865d" }, + { + name: "identityRegistry", + signature: "function identityRegistry() view returns (address)", + selector: "0x134e18f4", + }, + { + name: "isAddressRecovered", + signature: "function isAddressRecovered(address _wallet) view returns (bool)", + selector: "0x1b997ec2", + }, + { name: "isAgent", signature: "function isAgent(address _agent) view returns (bool)", selector: "0x1ffbb064" }, + { name: "onchainID", signature: "function onchainID() view returns (address)", selector: "0xaba63705" }, + { name: "version", signature: "function version() view returns (string)", selector: "0x54fd4d50" }, + ], + errors: [ + { name: "ExpirationNotReached", signature: "ExpirationNotReached()", selector: "0x92899bcd" }, + { name: "InterestRateIsFixed", signature: "InterestRateIsFixed()", selector: "0x849d4eb8" }, + ], + factory: (signer, useTimeTravel = false) => + useTimeTravel + ? new ERC3643ReadFixedRateFacetTimeTravel__factory(signer) + : new ERC3643ReadFixedRateFacet__factory(signer), + }, + + ERC3643ReadKpiLinkedRateFacet: { + name: "ERC3643ReadKpiLinkedRateFacet", + resolverKey: { + name: "_ERC3643_READ_KPI_LINKED_RATE_RESOLVER_KEY", + value: "0x68ba78621a8627653774f3b9800b77ac34bd334ecc2dc4d933f9e30d6197194f", + }, + inheritance: ["ERC3643ReadFacetBase", "CommonKpiLinkedInterestRate"], + methods: [ + { name: "compliance", signature: "function compliance() view returns (address)", selector: "0x6290865d" }, + { + name: "identityRegistry", + signature: "function identityRegistry() view returns (address)", + selector: "0x134e18f4", + }, + { + name: "isAddressRecovered", + signature: "function isAddressRecovered(address _wallet) view returns (bool)", + selector: "0x1b997ec2", + }, + { name: "isAgent", signature: "function isAgent(address _agent) view returns (bool)", selector: "0x1ffbb064" }, + { name: "onchainID", signature: "function onchainID() view returns (address)", selector: "0xaba63705" }, + { name: "version", signature: "function version() view returns (string)", selector: "0x54fd4d50" }, + ], + errors: [ + { name: "ExpirationNotReached", signature: "ExpirationNotReached()", selector: "0x92899bcd" }, + { name: "InterestRateIsKpiLinked", signature: "InterestRateIsKpiLinked()", selector: "0x68eba14f" }, + ], + factory: (signer, useTimeTravel = false) => + useTimeTravel + ? new ERC3643ReadKpiLinkedRateFacetTimeTravel__factory(signer) + : new ERC3643ReadKpiLinkedRateFacet__factory(signer), + }, + + ERC3643ReadSustainabilityPerformanceTargetRateFacet: { + name: "ERC3643ReadSustainabilityPerformanceTargetRateFacet", + resolverKey: { + name: "_ERC3643_READ_SUSTAINABILITY_PERFORMANCE_TARGET_RATE_RESOLVER_KEY", + value: "0x2fc56e8abd44d0dc70cf8876ea454caab82a906ec6333516c1feb4de9b4cb4f8", + }, + inheritance: ["ERC3643ReadFacetBase", "CommonSustainabilityPerformanceTargetInterestRate"], + methods: [ + { name: "compliance", signature: "function compliance() view returns (address)", selector: "0x6290865d" }, + { + name: "identityRegistry", + signature: "function identityRegistry() view returns (address)", + selector: "0x134e18f4", + }, + { + name: "isAddressRecovered", + signature: "function isAddressRecovered(address _wallet) view returns (bool)", + selector: "0x1b997ec2", + }, + { name: "isAgent", signature: "function isAgent(address _agent) view returns (bool)", selector: "0x1ffbb064" }, + { name: "onchainID", signature: "function onchainID() view returns (address)", selector: "0xaba63705" }, + { name: "version", signature: "function version() view returns (string)", selector: "0x54fd4d50" }, + ], + errors: [ + { name: "ExpirationNotReached", signature: "ExpirationNotReached()", selector: "0x92899bcd" }, + { + name: "InterestRateIsSustainabilityPerformanceTarget", + signature: "InterestRateIsSustainabilityPerformanceTarget()", + selector: "0x15a15b0a", + }, + ], + factory: (signer, useTimeTravel = false) => + useTimeTravel + ? new ERC3643ReadSustainabilityPerformanceTargetRateFacetTimeTravel__factory(signer) + : new ERC3643ReadSustainabilityPerformanceTargetRateFacet__factory(signer), + }, + + ExternalControlListManagementFacet: { + name: "ExternalControlListManagementFacet", + resolverKey: { + name: "_EXTERNAL_CONTROL_LIST_RESOLVER_KEY", + value: "0x490196911bc65200514fb4568861a36670854901dffa91bc27577664fdace575", + }, + inheritance: ["ExternalControlListManagementFacetBase", "Common"], + methods: [ + { + name: "addExternalControlList", + signature: "function addExternalControlList(address _controlList) returns (bool success_)", + selector: "0x995e4649", + }, + { + name: "getExternalControlListsCount", + signature: "function getExternalControlListsCount() view returns (uint256 externalControlListsCount_)", + selector: "0x9bec4167", + }, + { + name: "getExternalControlListsMembers", + signature: + "function getExternalControlListsMembers(uint256 _pageIndex, uint256 _pageLength) view returns (address[] members_)", + selector: "0xc4aa9df3", + }, + { + name: "initialize_ExternalControlLists", + signature: "function initialize_ExternalControlLists(address[] _controlLists)", + selector: "0x0a0a114f", + }, + { + name: "isExternalControlList", + signature: "function isExternalControlList(address _controlList) view returns (bool)", + selector: "0x07c44711", + }, + { + name: "removeExternalControlList", + signature: "function removeExternalControlList(address _controlList) returns (bool success_)", + selector: "0xb8913387", + }, + { + name: "updateExternalControlLists", + signature: + "function updateExternalControlLists(address[] _controlLists, bool[] _actives) returns (bool success_)", + selector: "0x0ba2b922", + }, + ], + events: [ + { + name: "AddedToExternalControlLists", + signature: "AddedToExternalControlLists(address,address)", + topic0: "0x3d65de474cd161ee7f82f178e1edc66856cbd5f71f6fb8da9149d8c4b8af24cb", + }, + { + name: "ExternalControlListsUpdated", + signature: "ExternalControlListsUpdated(address,address[],bool[])", + topic0: "0xf33492ee91b93cacfde1a1273fb2fe62ca266ca3e8abd548ea55c38559e0d27d", + }, + { + name: "RemovedFromExternalControlLists", + signature: "RemovedFromExternalControlLists(address,address)", + topic0: "0xe4058444c388a9cf0c802f605695e3600e235e37a4af77aab2bb582e214e453d", + }, + ], + errors: [ + { name: "ExpirationNotReached", signature: "ExpirationNotReached()", selector: "0x92899bcd" }, + { + name: "ExternalControlListsNotUpdated", + signature: "ExternalControlListsNotUpdated(address[],bool[])", + selector: "0xbd29da3f", + }, + { name: "ListedControlList", signature: "ListedControlList(address)", selector: "0x67a1e319" }, + { name: "UnlistedControlList", signature: "UnlistedControlList(address)", selector: "0x6b4e1917" }, + ], + factory: (signer, useTimeTravel = false) => + useTimeTravel + ? new ExternalControlListManagementFacetTimeTravel__factory(signer) + : new ExternalControlListManagementFacet__factory(signer), + }, + + ExternalControlListManagementFixedRateFacet: { + name: "ExternalControlListManagementFixedRateFacet", + resolverKey: { + name: "_EXTERNAL_CONTROL_LIST_FIXED_RATE_RESOLVER_KEY", + value: "0xdb213fa4fc549f5bc27fc79e6094fe6a26e303e8eabc8a86a8de7bb307d570d8", + }, + inheritance: ["ExternalControlListManagementFacetBase", "CommonFixedInterestRate"], + methods: [ + { + name: "addExternalControlList", + signature: "function addExternalControlList(address _controlList) returns (bool success_)", + selector: "0x995e4649", + }, + { + name: "getExternalControlListsCount", + signature: "function getExternalControlListsCount() view returns (uint256 externalControlListsCount_)", + selector: "0x9bec4167", + }, + { + name: "getExternalControlListsMembers", + signature: + "function getExternalControlListsMembers(uint256 _pageIndex, uint256 _pageLength) view returns (address[] members_)", + selector: "0xc4aa9df3", + }, + { + name: "initialize_ExternalControlLists", + signature: "function initialize_ExternalControlLists(address[] _controlLists)", + selector: "0x0a0a114f", + }, + { + name: "isExternalControlList", + signature: "function isExternalControlList(address _controlList) view returns (bool)", + selector: "0x07c44711", + }, + { + name: "removeExternalControlList", + signature: "function removeExternalControlList(address _controlList) returns (bool success_)", + selector: "0xb8913387", + }, + { + name: "updateExternalControlLists", + signature: + "function updateExternalControlLists(address[] _controlLists, bool[] _actives) returns (bool success_)", + selector: "0x0ba2b922", + }, + ], + events: [ + { + name: "AddedToExternalControlLists", + signature: "AddedToExternalControlLists(address,address)", + topic0: "0x3d65de474cd161ee7f82f178e1edc66856cbd5f71f6fb8da9149d8c4b8af24cb", + }, + { + name: "ExternalControlListsUpdated", + signature: "ExternalControlListsUpdated(address,address[],bool[])", + topic0: "0xf33492ee91b93cacfde1a1273fb2fe62ca266ca3e8abd548ea55c38559e0d27d", + }, + { + name: "RemovedFromExternalControlLists", + signature: "RemovedFromExternalControlLists(address,address)", + topic0: "0xe4058444c388a9cf0c802f605695e3600e235e37a4af77aab2bb582e214e453d", + }, + ], + errors: [ + { name: "ExpirationNotReached", signature: "ExpirationNotReached()", selector: "0x92899bcd" }, + { + name: "ExternalControlListsNotUpdated", + signature: "ExternalControlListsNotUpdated(address[],bool[])", + selector: "0xbd29da3f", + }, + { name: "InterestRateIsFixed", signature: "InterestRateIsFixed()", selector: "0x849d4eb8" }, + { name: "ListedControlList", signature: "ListedControlList(address)", selector: "0x67a1e319" }, + { name: "UnlistedControlList", signature: "UnlistedControlList(address)", selector: "0x6b4e1917" }, + ], + factory: (signer, useTimeTravel = false) => + useTimeTravel + ? new ExternalControlListManagementFixedRateFacetTimeTravel__factory(signer) + : new ExternalControlListManagementFixedRateFacet__factory(signer), + }, + + ExternalControlListManagementKpiLinkedRateFacet: { + name: "ExternalControlListManagementKpiLinkedRateFacet", + resolverKey: { + name: "_EXTERNAL_CONTROL_LIST_KPI_LINKED_RATE_RESOLVER_KEY", + value: "0x9ecec5a17142ae1072721e064f5e9a3f0795a2bea57673f40a9440b8adec0052", + }, + inheritance: ["ExternalControlListManagementFacetBase", "CommonKpiLinkedInterestRate"], + methods: [ + { + name: "addExternalControlList", + signature: "function addExternalControlList(address _controlList) returns (bool success_)", + selector: "0x995e4649", + }, + { + name: "getExternalControlListsCount", + signature: "function getExternalControlListsCount() view returns (uint256 externalControlListsCount_)", + selector: "0x9bec4167", + }, + { + name: "getExternalControlListsMembers", + signature: + "function getExternalControlListsMembers(uint256 _pageIndex, uint256 _pageLength) view returns (address[] members_)", + selector: "0xc4aa9df3", + }, + { + name: "initialize_ExternalControlLists", + signature: "function initialize_ExternalControlLists(address[] _controlLists)", + selector: "0x0a0a114f", + }, + { + name: "isExternalControlList", + signature: "function isExternalControlList(address _controlList) view returns (bool)", + selector: "0x07c44711", + }, + { + name: "removeExternalControlList", + signature: "function removeExternalControlList(address _controlList) returns (bool success_)", + selector: "0xb8913387", + }, + { + name: "updateExternalControlLists", + signature: + "function updateExternalControlLists(address[] _controlLists, bool[] _actives) returns (bool success_)", + selector: "0x0ba2b922", + }, + ], + events: [ + { + name: "AddedToExternalControlLists", + signature: "AddedToExternalControlLists(address,address)", + topic0: "0x3d65de474cd161ee7f82f178e1edc66856cbd5f71f6fb8da9149d8c4b8af24cb", + }, + { + name: "ExternalControlListsUpdated", + signature: "ExternalControlListsUpdated(address,address[],bool[])", + topic0: "0xf33492ee91b93cacfde1a1273fb2fe62ca266ca3e8abd548ea55c38559e0d27d", + }, + { + name: "RemovedFromExternalControlLists", + signature: "RemovedFromExternalControlLists(address,address)", + topic0: "0xe4058444c388a9cf0c802f605695e3600e235e37a4af77aab2bb582e214e453d", + }, + ], + errors: [ + { name: "ExpirationNotReached", signature: "ExpirationNotReached()", selector: "0x92899bcd" }, + { + name: "ExternalControlListsNotUpdated", + signature: "ExternalControlListsNotUpdated(address[],bool[])", + selector: "0xbd29da3f", + }, + { name: "InterestRateIsKpiLinked", signature: "InterestRateIsKpiLinked()", selector: "0x68eba14f" }, + { name: "ListedControlList", signature: "ListedControlList(address)", selector: "0x67a1e319" }, + { name: "UnlistedControlList", signature: "UnlistedControlList(address)", selector: "0x6b4e1917" }, + ], + factory: (signer, useTimeTravel = false) => + useTimeTravel + ? new ExternalControlListManagementKpiLinkedRateFacetTimeTravel__factory(signer) + : new ExternalControlListManagementKpiLinkedRateFacet__factory(signer), + }, + + ExternalControlListManagementSustainabilityPerformanceTargetRateFacet: { + name: "ExternalControlListManagementSustainabilityPerformanceTargetRateFacet", + resolverKey: { + name: "_EXTERNAL_CONTROL_LIST_SUSTAINABILITY_PERFORMANCE_TARGET_RATE_RESOLVER_KEY", + value: "0x2c56accbf6faf923cd323935455dac00c2ddffe08f0becdf49d515e4b4d355af", + }, + inheritance: ["ExternalControlListManagementFacetBase", "CommonSustainabilityPerformanceTargetInterestRate"], + methods: [ + { + name: "addExternalControlList", + signature: "function addExternalControlList(address _controlList) returns (bool success_)", + selector: "0x995e4649", + }, + { + name: "getExternalControlListsCount", + signature: "function getExternalControlListsCount() view returns (uint256 externalControlListsCount_)", + selector: "0x9bec4167", + }, + { + name: "getExternalControlListsMembers", + signature: + "function getExternalControlListsMembers(uint256 _pageIndex, uint256 _pageLength) view returns (address[] members_)", + selector: "0xc4aa9df3", + }, + { + name: "initialize_ExternalControlLists", + signature: "function initialize_ExternalControlLists(address[] _controlLists)", + selector: "0x0a0a114f", + }, + { + name: "isExternalControlList", + signature: "function isExternalControlList(address _controlList) view returns (bool)", + selector: "0x07c44711", + }, + { + name: "removeExternalControlList", + signature: "function removeExternalControlList(address _controlList) returns (bool success_)", + selector: "0xb8913387", + }, + { + name: "updateExternalControlLists", + signature: + "function updateExternalControlLists(address[] _controlLists, bool[] _actives) returns (bool success_)", + selector: "0x0ba2b922", + }, + ], + events: [ + { + name: "AddedToExternalControlLists", + signature: "AddedToExternalControlLists(address,address)", + topic0: "0x3d65de474cd161ee7f82f178e1edc66856cbd5f71f6fb8da9149d8c4b8af24cb", + }, + { + name: "ExternalControlListsUpdated", + signature: "ExternalControlListsUpdated(address,address[],bool[])", + topic0: "0xf33492ee91b93cacfde1a1273fb2fe62ca266ca3e8abd548ea55c38559e0d27d", + }, + { + name: "RemovedFromExternalControlLists", + signature: "RemovedFromExternalControlLists(address,address)", + topic0: "0xe4058444c388a9cf0c802f605695e3600e235e37a4af77aab2bb582e214e453d", + }, + ], + errors: [ + { name: "ExpirationNotReached", signature: "ExpirationNotReached()", selector: "0x92899bcd" }, + { + name: "ExternalControlListsNotUpdated", + signature: "ExternalControlListsNotUpdated(address[],bool[])", + selector: "0xbd29da3f", + }, + { + name: "InterestRateIsSustainabilityPerformanceTarget", + signature: "InterestRateIsSustainabilityPerformanceTarget()", + selector: "0x15a15b0a", + }, + { name: "ListedControlList", signature: "ListedControlList(address)", selector: "0x67a1e319" }, + { name: "UnlistedControlList", signature: "UnlistedControlList(address)", selector: "0x6b4e1917" }, + ], + factory: (signer, useTimeTravel = false) => + useTimeTravel + ? new ExternalControlListManagementSustainabilityPerformanceTargetRateFacetTimeTravel__factory(signer) + : new ExternalControlListManagementSustainabilityPerformanceTargetRateFacet__factory(signer), + }, + + ExternalKycListManagementFacet: { + name: "ExternalKycListManagementFacet", + resolverKey: { + name: "_EXTERNAL_KYC_LIST_RESOLVER_KEY", + value: "0x32f05e55195d945105aff8ac4b041d4680824578bd72c6a34e4aa906a59237f1", + }, + inheritance: ["ExternalKycListManagementFacetBase", "Common"], + methods: [ + { + name: "addExternalKycList", + signature: "function addExternalKycList(address _kycLists) returns (bool success_)", + selector: "0x7570e044", + }, + { + name: "getExternalKycListsCount", + signature: "function getExternalKycListsCount() view returns (uint256 externalKycListsCount_)", + selector: "0xd17e889e", + }, + { + name: "getExternalKycListsMembers", + signature: + "function getExternalKycListsMembers(uint256 _pageIndex, uint256 _pageLength) view returns (address[] members_)", + selector: "0x999a2459", + }, + { + name: "initialize_ExternalKycLists", + signature: "function initialize_ExternalKycLists(address[] _kycLists)", + selector: "0x3ac7fadc", + }, + { + name: "isExternalKycList", + signature: "function isExternalKycList(address _kycList) view returns (bool)", + selector: "0x20991e17", + }, + { + name: "isExternallyGranted", + signature: "function isExternallyGranted(address _account, uint8 _kycStatus) view returns (bool)", + selector: "0x1d7d5749", + }, + { + name: "removeExternalKycList", + signature: "function removeExternalKycList(address _kycLists) returns (bool success_)", + selector: "0x16c94d54", + }, + { + name: "updateExternalKycLists", + signature: "function updateExternalKycLists(address[] _kycLists, bool[] _actives) returns (bool success_)", + selector: "0xc391576d", + }, + ], + events: [ + { + name: "AddedToExternalKycLists", + signature: "AddedToExternalKycLists(address,address)", + topic0: "0xbcae4970725fd3096fd0bf87438db521acff164a7290d244ac387de859944b3a", + }, + { + name: "ExternalKycListsUpdated", + signature: "ExternalKycListsUpdated(address,address[],bool[])", + topic0: "0xd601f143a291315a9f9c93550bb5299d09b105676ef1a06edcd38df1a9390fbc", + }, + { + name: "RemovedFromExternalKycLists", + signature: "RemovedFromExternalKycLists(address,address)", + topic0: "0xf5b81cc6909f27c20ccf2b32d6f34bc169fc165d0d4ea1db1c5f392fca56765f", + }, + ], + errors: [ + { name: "ExpirationNotReached", signature: "ExpirationNotReached()", selector: "0x92899bcd" }, + { + name: "ExternalKycListsNotUpdated", + signature: "ExternalKycListsNotUpdated(address[],bool[])", + selector: "0x8a85ec02", + }, + { name: "ListedKycList", signature: "ListedKycList(address)", selector: "0x91c6b79d" }, + { name: "UnlistedKycList", signature: "UnlistedKycList(address)", selector: "0xf5cc4d79" }, + ], + factory: (signer, useTimeTravel = false) => + useTimeTravel + ? new ExternalKycListManagementFacetTimeTravel__factory(signer) + : new ExternalKycListManagementFacet__factory(signer), + }, + + ExternalKycListManagementFixedRateFacet: { + name: "ExternalKycListManagementFixedRateFacet", + resolverKey: { + name: "_EXTERNAL_KYC_LIST_FIXED_RATE_RESOLVER_KEY", + value: "0x4f9cf8c8583a46a60ec88a37a07f91d915dba024a57bdb729a4805603f5c40b2", + }, + inheritance: ["ExternalKycListManagementFacetBase", "CommonFixedInterestRate"], + methods: [ + { + name: "addExternalKycList", + signature: "function addExternalKycList(address _kycLists) returns (bool success_)", + selector: "0x7570e044", + }, + { + name: "getExternalKycListsCount", + signature: "function getExternalKycListsCount() view returns (uint256 externalKycListsCount_)", + selector: "0xd17e889e", + }, + { + name: "getExternalKycListsMembers", + signature: + "function getExternalKycListsMembers(uint256 _pageIndex, uint256 _pageLength) view returns (address[] members_)", + selector: "0x999a2459", + }, + { + name: "initialize_ExternalKycLists", + signature: "function initialize_ExternalKycLists(address[] _kycLists)", + selector: "0x3ac7fadc", + }, + { + name: "isExternalKycList", + signature: "function isExternalKycList(address _kycList) view returns (bool)", + selector: "0x20991e17", + }, + { + name: "isExternallyGranted", + signature: "function isExternallyGranted(address _account, uint8 _kycStatus) view returns (bool)", + selector: "0x1d7d5749", + }, + { + name: "removeExternalKycList", + signature: "function removeExternalKycList(address _kycLists) returns (bool success_)", + selector: "0x16c94d54", + }, + { + name: "updateExternalKycLists", + signature: "function updateExternalKycLists(address[] _kycLists, bool[] _actives) returns (bool success_)", + selector: "0xc391576d", + }, + ], + events: [ + { + name: "AddedToExternalKycLists", + signature: "AddedToExternalKycLists(address,address)", + topic0: "0xbcae4970725fd3096fd0bf87438db521acff164a7290d244ac387de859944b3a", + }, + { + name: "ExternalKycListsUpdated", + signature: "ExternalKycListsUpdated(address,address[],bool[])", + topic0: "0xd601f143a291315a9f9c93550bb5299d09b105676ef1a06edcd38df1a9390fbc", + }, + { + name: "RemovedFromExternalKycLists", + signature: "RemovedFromExternalKycLists(address,address)", + topic0: "0xf5b81cc6909f27c20ccf2b32d6f34bc169fc165d0d4ea1db1c5f392fca56765f", + }, + ], + errors: [ + { name: "ExpirationNotReached", signature: "ExpirationNotReached()", selector: "0x92899bcd" }, + { + name: "ExternalKycListsNotUpdated", + signature: "ExternalKycListsNotUpdated(address[],bool[])", + selector: "0x8a85ec02", + }, + { name: "InterestRateIsFixed", signature: "InterestRateIsFixed()", selector: "0x849d4eb8" }, + { name: "ListedKycList", signature: "ListedKycList(address)", selector: "0x91c6b79d" }, + { name: "UnlistedKycList", signature: "UnlistedKycList(address)", selector: "0xf5cc4d79" }, + ], + factory: (signer, useTimeTravel = false) => + useTimeTravel + ? new ExternalKycListManagementFixedRateFacetTimeTravel__factory(signer) + : new ExternalKycListManagementFixedRateFacet__factory(signer), + }, + + ExternalKycListManagementKpiLinkedRateFacet: { + name: "ExternalKycListManagementKpiLinkedRateFacet", + resolverKey: { + name: "_EXTERNAL_KYC_LIST_KPI_LINKED_RATE_RESOLVER_KEY", + value: "0xc15c973cec2d75a95d94522af2dc05c535be214a6cce368887f7e7d3ead3a491", + }, + inheritance: ["ExternalKycListManagementFacetBase", "CommonKpiLinkedInterestRate"], + methods: [ + { + name: "addExternalKycList", + signature: "function addExternalKycList(address _kycLists) returns (bool success_)", + selector: "0x7570e044", + }, + { + name: "getExternalKycListsCount", + signature: "function getExternalKycListsCount() view returns (uint256 externalKycListsCount_)", + selector: "0xd17e889e", + }, + { + name: "getExternalKycListsMembers", + signature: + "function getExternalKycListsMembers(uint256 _pageIndex, uint256 _pageLength) view returns (address[] members_)", + selector: "0x999a2459", + }, + { + name: "initialize_ExternalKycLists", + signature: "function initialize_ExternalKycLists(address[] _kycLists)", + selector: "0x3ac7fadc", + }, + { + name: "isExternalKycList", + signature: "function isExternalKycList(address _kycList) view returns (bool)", + selector: "0x20991e17", + }, + { + name: "isExternallyGranted", + signature: "function isExternallyGranted(address _account, uint8 _kycStatus) view returns (bool)", + selector: "0x1d7d5749", + }, + { + name: "removeExternalKycList", + signature: "function removeExternalKycList(address _kycLists) returns (bool success_)", + selector: "0x16c94d54", + }, + { + name: "updateExternalKycLists", + signature: "function updateExternalKycLists(address[] _kycLists, bool[] _actives) returns (bool success_)", + selector: "0xc391576d", + }, + ], + events: [ + { + name: "AddedToExternalKycLists", + signature: "AddedToExternalKycLists(address,address)", + topic0: "0xbcae4970725fd3096fd0bf87438db521acff164a7290d244ac387de859944b3a", + }, + { + name: "ExternalKycListsUpdated", + signature: "ExternalKycListsUpdated(address,address[],bool[])", + topic0: "0xd601f143a291315a9f9c93550bb5299d09b105676ef1a06edcd38df1a9390fbc", + }, + { + name: "RemovedFromExternalKycLists", + signature: "RemovedFromExternalKycLists(address,address)", + topic0: "0xf5b81cc6909f27c20ccf2b32d6f34bc169fc165d0d4ea1db1c5f392fca56765f", + }, + ], + errors: [ + { name: "ExpirationNotReached", signature: "ExpirationNotReached()", selector: "0x92899bcd" }, + { + name: "ExternalKycListsNotUpdated", + signature: "ExternalKycListsNotUpdated(address[],bool[])", + selector: "0x8a85ec02", + }, + { name: "InterestRateIsKpiLinked", signature: "InterestRateIsKpiLinked()", selector: "0x68eba14f" }, + { name: "ListedKycList", signature: "ListedKycList(address)", selector: "0x91c6b79d" }, + { name: "UnlistedKycList", signature: "UnlistedKycList(address)", selector: "0xf5cc4d79" }, + ], + factory: (signer, useTimeTravel = false) => + useTimeTravel + ? new ExternalKycListManagementKpiLinkedRateFacetTimeTravel__factory(signer) + : new ExternalKycListManagementKpiLinkedRateFacet__factory(signer), + }, + + ExternalKycListManagementSustainabilityPerformanceTargetRateFacet: { + name: "ExternalKycListManagementSustainabilityPerformanceTargetRateFacet", + resolverKey: { + name: "_EXTERNAL_KYC_LIST_SUSTAINABILITY_PERFORMANCE_TARGET_RATE_RESOLVER_KEY", + value: "0x0fcfeebcf118ca3c39fbed0e2a527a866cac42bbd3fcad5f9b4f755ef97f3aa9", + }, + inheritance: ["ExternalKycListManagementFacetBase", "CommonSustainabilityPerformanceTargetInterestRate"], + methods: [ + { + name: "addExternalKycList", + signature: "function addExternalKycList(address _kycLists) returns (bool success_)", + selector: "0x7570e044", + }, + { + name: "getExternalKycListsCount", + signature: "function getExternalKycListsCount() view returns (uint256 externalKycListsCount_)", + selector: "0xd17e889e", + }, + { + name: "getExternalKycListsMembers", + signature: + "function getExternalKycListsMembers(uint256 _pageIndex, uint256 _pageLength) view returns (address[] members_)", + selector: "0x999a2459", + }, + { + name: "initialize_ExternalKycLists", + signature: "function initialize_ExternalKycLists(address[] _kycLists)", + selector: "0x3ac7fadc", + }, + { + name: "isExternalKycList", + signature: "function isExternalKycList(address _kycList) view returns (bool)", + selector: "0x20991e17", + }, + { + name: "isExternallyGranted", + signature: "function isExternallyGranted(address _account, uint8 _kycStatus) view returns (bool)", + selector: "0x1d7d5749", + }, + { + name: "removeExternalKycList", + signature: "function removeExternalKycList(address _kycLists) returns (bool success_)", + selector: "0x16c94d54", + }, + { + name: "updateExternalKycLists", + signature: "function updateExternalKycLists(address[] _kycLists, bool[] _actives) returns (bool success_)", + selector: "0xc391576d", + }, + ], + events: [ + { + name: "AddedToExternalKycLists", + signature: "AddedToExternalKycLists(address,address)", + topic0: "0xbcae4970725fd3096fd0bf87438db521acff164a7290d244ac387de859944b3a", + }, + { + name: "ExternalKycListsUpdated", + signature: "ExternalKycListsUpdated(address,address[],bool[])", + topic0: "0xd601f143a291315a9f9c93550bb5299d09b105676ef1a06edcd38df1a9390fbc", + }, + { + name: "RemovedFromExternalKycLists", + signature: "RemovedFromExternalKycLists(address,address)", + topic0: "0xf5b81cc6909f27c20ccf2b32d6f34bc169fc165d0d4ea1db1c5f392fca56765f", + }, + ], + errors: [ + { name: "ExpirationNotReached", signature: "ExpirationNotReached()", selector: "0x92899bcd" }, + { + name: "ExternalKycListsNotUpdated", + signature: "ExternalKycListsNotUpdated(address[],bool[])", + selector: "0x8a85ec02", + }, + { + name: "InterestRateIsSustainabilityPerformanceTarget", + signature: "InterestRateIsSustainabilityPerformanceTarget()", + selector: "0x15a15b0a", + }, + { name: "ListedKycList", signature: "ListedKycList(address)", selector: "0x91c6b79d" }, + { name: "UnlistedKycList", signature: "UnlistedKycList(address)", selector: "0xf5cc4d79" }, + ], + factory: (signer, useTimeTravel = false) => + useTimeTravel + ? new ExternalKycListManagementSustainabilityPerformanceTargetRateFacetTimeTravel__factory(signer) + : new ExternalKycListManagementSustainabilityPerformanceTargetRateFacet__factory(signer), + }, + + ExternalPauseManagementFacet: { + name: "ExternalPauseManagementFacet", + resolverKey: { + name: "_EXTERNAL_PAUSE_RESOLVER_KEY", + value: "0x158025f9e40c5d145e7915a14d5e97459728d98c715d8329359e305df737ee3c", + }, + inheritance: ["ExternalPauseManagementFacetBase", "Common"], + methods: [ + { + name: "addExternalPause", + signature: "function addExternalPause(address _pause) returns (bool success_)", + selector: "0xd438cff1", + }, + { + name: "getExternalPausesCount", + signature: "function getExternalPausesCount() view returns (uint256 externalPausesCount_)", + selector: "0x1e2bc3a6", + }, + { + name: "getExternalPausesMembers", + signature: + "function getExternalPausesMembers(uint256 _pageIndex, uint256 _pageLength) view returns (address[] members_)", + selector: "0x5b175a35", + }, + { + name: "initialize_ExternalPauses", + signature: "function initialize_ExternalPauses(address[] _pauses)", + selector: "0x8f88d0d5", + }, + { + name: "isExternalPause", + signature: "function isExternalPause(address _pause) view returns (bool)", + selector: "0xe26e35be", + }, + { + name: "removeExternalPause", + signature: "function removeExternalPause(address _pause) returns (bool success_)", + selector: "0x9648d912", + }, + { + name: "updateExternalPauses", + signature: "function updateExternalPauses(address[] _pauses, bool[] _actives) returns (bool success_)", + selector: "0x361d714a", + }, + ], + events: [ + { + name: "AddedToExternalPauses", + signature: "AddedToExternalPauses(address,address)", + topic0: "0x3e5aaed9f36a606341d49642168dd1094c2394f06760d24cb81c89d0a8210c0b", + }, + { + name: "ExternalPausesUpdated", + signature: "ExternalPausesUpdated(address,address[],bool[])", + topic0: "0x75a050d52d69209d464c91f8503b1f3e0aa6bb70550a3884bc19c53c25882878", + }, + { + name: "RemovedFromExternalPauses", + signature: "RemovedFromExternalPauses(address,address)", + topic0: "0x3c9c4b708af23d4bd4eb63d45714a3f61f17ae8f0ece3a182c38d15667b965c8", + }, + ], + errors: [ + { name: "ExpirationNotReached", signature: "ExpirationNotReached()", selector: "0x92899bcd" }, + { + name: "ExternalPausesNotUpdated", + signature: "ExternalPausesNotUpdated(address[],bool[])", + selector: "0x2d931b36", + }, + { name: "ListedPause", signature: "ListedPause(address)", selector: "0x267b9ec9" }, + { name: "UnlistedPause", signature: "UnlistedPause(address)", selector: "0x3281637c" }, + ], + factory: (signer, useTimeTravel = false) => + useTimeTravel + ? new ExternalPauseManagementFacetTimeTravel__factory(signer) + : new ExternalPauseManagementFacet__factory(signer), + }, + + ExternalPauseManagementFixedRateFacet: { + name: "ExternalPauseManagementFixedRateFacet", + resolverKey: { + name: "_EXTERNAL_PAUSE_FIXED_RATE_RESOLVER_KEY", + value: "0x752307e5e93ea6e9b979833cf52e6043f71fd4b983ec32aa685f9b160594e326", + }, + inheritance: ["ExternalPauseManagementFacetBase", "CommonFixedInterestRate"], + methods: [ + { + name: "addExternalPause", + signature: "function addExternalPause(address _pause) returns (bool success_)", + selector: "0xd438cff1", + }, + { + name: "getExternalPausesCount", + signature: "function getExternalPausesCount() view returns (uint256 externalPausesCount_)", + selector: "0x1e2bc3a6", + }, + { + name: "getExternalPausesMembers", + signature: + "function getExternalPausesMembers(uint256 _pageIndex, uint256 _pageLength) view returns (address[] members_)", + selector: "0x5b175a35", + }, + { + name: "initialize_ExternalPauses", + signature: "function initialize_ExternalPauses(address[] _pauses)", + selector: "0x8f88d0d5", + }, + { + name: "isExternalPause", + signature: "function isExternalPause(address _pause) view returns (bool)", + selector: "0xe26e35be", + }, + { + name: "removeExternalPause", + signature: "function removeExternalPause(address _pause) returns (bool success_)", + selector: "0x9648d912", + }, + { + name: "updateExternalPauses", + signature: "function updateExternalPauses(address[] _pauses, bool[] _actives) returns (bool success_)", + selector: "0x361d714a", + }, + ], + events: [ + { + name: "AddedToExternalPauses", + signature: "AddedToExternalPauses(address,address)", + topic0: "0x3e5aaed9f36a606341d49642168dd1094c2394f06760d24cb81c89d0a8210c0b", + }, + { + name: "ExternalPausesUpdated", + signature: "ExternalPausesUpdated(address,address[],bool[])", + topic0: "0x75a050d52d69209d464c91f8503b1f3e0aa6bb70550a3884bc19c53c25882878", + }, + { + name: "RemovedFromExternalPauses", + signature: "RemovedFromExternalPauses(address,address)", + topic0: "0x3c9c4b708af23d4bd4eb63d45714a3f61f17ae8f0ece3a182c38d15667b965c8", + }, + ], + errors: [ + { name: "ExpirationNotReached", signature: "ExpirationNotReached()", selector: "0x92899bcd" }, + { + name: "ExternalPausesNotUpdated", + signature: "ExternalPausesNotUpdated(address[],bool[])", + selector: "0x2d931b36", + }, + { name: "InterestRateIsFixed", signature: "InterestRateIsFixed()", selector: "0x849d4eb8" }, + { name: "ListedPause", signature: "ListedPause(address)", selector: "0x267b9ec9" }, + { name: "UnlistedPause", signature: "UnlistedPause(address)", selector: "0x3281637c" }, + ], + factory: (signer, useTimeTravel = false) => + useTimeTravel + ? new ExternalPauseManagementFixedRateFacetTimeTravel__factory(signer) + : new ExternalPauseManagementFixedRateFacet__factory(signer), + }, + + ExternalPauseManagementKpiLinkedRateFacet: { + name: "ExternalPauseManagementKpiLinkedRateFacet", + resolverKey: { + name: "_EXTERNAL_PAUSE_KPI_LINKED_RATE_RESOLVER_KEY", + value: "0x549d7aab8deeb4a493aa9765937da4290840d4a6fe04399ef4bb818694d9aee4", + }, + inheritance: ["ExternalPauseManagementFacetBase", "CommonKpiLinkedInterestRate"], + methods: [ + { + name: "addExternalPause", + signature: "function addExternalPause(address _pause) returns (bool success_)", + selector: "0xd438cff1", + }, + { + name: "getExternalPausesCount", + signature: "function getExternalPausesCount() view returns (uint256 externalPausesCount_)", + selector: "0x1e2bc3a6", + }, + { + name: "getExternalPausesMembers", + signature: + "function getExternalPausesMembers(uint256 _pageIndex, uint256 _pageLength) view returns (address[] members_)", + selector: "0x5b175a35", + }, + { + name: "initialize_ExternalPauses", + signature: "function initialize_ExternalPauses(address[] _pauses)", + selector: "0x8f88d0d5", + }, + { + name: "isExternalPause", + signature: "function isExternalPause(address _pause) view returns (bool)", + selector: "0xe26e35be", + }, + { + name: "removeExternalPause", + signature: "function removeExternalPause(address _pause) returns (bool success_)", + selector: "0x9648d912", + }, + { + name: "updateExternalPauses", + signature: "function updateExternalPauses(address[] _pauses, bool[] _actives) returns (bool success_)", + selector: "0x361d714a", + }, + ], + events: [ + { + name: "AddedToExternalPauses", + signature: "AddedToExternalPauses(address,address)", + topic0: "0x3e5aaed9f36a606341d49642168dd1094c2394f06760d24cb81c89d0a8210c0b", + }, + { + name: "ExternalPausesUpdated", + signature: "ExternalPausesUpdated(address,address[],bool[])", + topic0: "0x75a050d52d69209d464c91f8503b1f3e0aa6bb70550a3884bc19c53c25882878", + }, + { + name: "RemovedFromExternalPauses", + signature: "RemovedFromExternalPauses(address,address)", + topic0: "0x3c9c4b708af23d4bd4eb63d45714a3f61f17ae8f0ece3a182c38d15667b965c8", + }, + ], + errors: [ + { name: "ExpirationNotReached", signature: "ExpirationNotReached()", selector: "0x92899bcd" }, + { + name: "ExternalPausesNotUpdated", + signature: "ExternalPausesNotUpdated(address[],bool[])", + selector: "0x2d931b36", + }, + { name: "InterestRateIsKpiLinked", signature: "InterestRateIsKpiLinked()", selector: "0x68eba14f" }, + { name: "ListedPause", signature: "ListedPause(address)", selector: "0x267b9ec9" }, + { name: "UnlistedPause", signature: "UnlistedPause(address)", selector: "0x3281637c" }, + ], + factory: (signer, useTimeTravel = false) => + useTimeTravel + ? new ExternalPauseManagementKpiLinkedRateFacetTimeTravel__factory(signer) + : new ExternalPauseManagementKpiLinkedRateFacet__factory(signer), + }, + + ExternalPauseManagementSustainabilityPerformanceTargetRateFacet: { + name: "ExternalPauseManagementSustainabilityPerformanceTargetRateFacet", + resolverKey: { + name: "_EXTERNAL_PAUSE_SUSTAINABILITY_PERFORMANCE_TARGET_RATE_RESOLVER_KEY", + value: "0x07846b678053cbd4be5d9d3929fa9af5ab76bb508a0f7957f5239302aad45bc3", + }, + inheritance: ["ExternalPauseManagementFacetBase", "CommonSustainabilityPerformanceTargetInterestRate"], + methods: [ + { + name: "addExternalPause", + signature: "function addExternalPause(address _pause) returns (bool success_)", + selector: "0xd438cff1", + }, + { + name: "getExternalPausesCount", + signature: "function getExternalPausesCount() view returns (uint256 externalPausesCount_)", + selector: "0x1e2bc3a6", + }, + { + name: "getExternalPausesMembers", + signature: + "function getExternalPausesMembers(uint256 _pageIndex, uint256 _pageLength) view returns (address[] members_)", + selector: "0x5b175a35", + }, + { + name: "initialize_ExternalPauses", + signature: "function initialize_ExternalPauses(address[] _pauses)", + selector: "0x8f88d0d5", + }, + { + name: "isExternalPause", + signature: "function isExternalPause(address _pause) view returns (bool)", + selector: "0xe26e35be", + }, + { + name: "removeExternalPause", + signature: "function removeExternalPause(address _pause) returns (bool success_)", + selector: "0x9648d912", + }, + { + name: "updateExternalPauses", + signature: "function updateExternalPauses(address[] _pauses, bool[] _actives) returns (bool success_)", + selector: "0x361d714a", + }, + ], + events: [ + { + name: "AddedToExternalPauses", + signature: "AddedToExternalPauses(address,address)", + topic0: "0x3e5aaed9f36a606341d49642168dd1094c2394f06760d24cb81c89d0a8210c0b", + }, + { + name: "ExternalPausesUpdated", + signature: "ExternalPausesUpdated(address,address[],bool[])", + topic0: "0x75a050d52d69209d464c91f8503b1f3e0aa6bb70550a3884bc19c53c25882878", + }, + { + name: "RemovedFromExternalPauses", + signature: "RemovedFromExternalPauses(address,address)", + topic0: "0x3c9c4b708af23d4bd4eb63d45714a3f61f17ae8f0ece3a182c38d15667b965c8", + }, + ], + errors: [ + { name: "ExpirationNotReached", signature: "ExpirationNotReached()", selector: "0x92899bcd" }, + { + name: "ExternalPausesNotUpdated", + signature: "ExternalPausesNotUpdated(address[],bool[])", + selector: "0x2d931b36", + }, + { + name: "InterestRateIsSustainabilityPerformanceTarget", + signature: "InterestRateIsSustainabilityPerformanceTarget()", + selector: "0x15a15b0a", + }, + { name: "ListedPause", signature: "ListedPause(address)", selector: "0x267b9ec9" }, + { name: "UnlistedPause", signature: "UnlistedPause(address)", selector: "0x3281637c" }, + ], + factory: (signer, useTimeTravel = false) => + useTimeTravel + ? new ExternalPauseManagementSustainabilityPerformanceTargetRateFacetTimeTravel__factory(signer) + : new ExternalPauseManagementSustainabilityPerformanceTargetRateFacet__factory(signer), + }, + + FixedRateFacet: { + name: "FixedRateFacet", + resolverKey: { + name: "_FIXED_RATE_RESOLVER_KEY", + value: "0x2871e1c37f7423765d88b16528db7e80ad8e2bae5ab5d55e26659840c1d6b504", + }, + inheritance: ["FixedRate", "IStaticFunctionSelectors"], + methods: [ + { + name: "getRate", + signature: "function getRate() view returns (uint256 rate_, uint8 decimals_)", + selector: "0x679aefce", + }, + { + name: "initialize_FixedRate", + signature: "function initialize_FixedRate(tuple(uint256 rate, uint8 rateDecimals) _initData)", + selector: "0xd51e10d5", + }, + { + name: "setRate", + signature: "function setRate(uint256 _newRate, uint8 _newRateDecimals)", + selector: "0xd1923502", + }, + ], + events: [ + { + name: "RateUpdated", + signature: "RateUpdated(address,uint256,uint8)", + topic0: "0xa7fd66e9450da5029fb2dfd59586274386eb4c169bfc873e265aa29d3df59424", + }, + ], + errors: [ + { name: "ExpirationNotReached", signature: "ExpirationNotReached()", selector: "0x92899bcd" }, + { name: "InterestRateIsFixed", signature: "InterestRateIsFixed()", selector: "0x849d4eb8" }, + ], + factory: (signer, useTimeTravel = false) => + useTimeTravel ? new FixedRateFacetTimeTravel__factory(signer) : new FixedRateFacet__factory(signer), + }, + + FreezeFacet: { + name: "FreezeFacet", + resolverKey: { + name: "_FREEZE_RESOLVER_KEY", + value: "0x49f765e7155d979a148049c2a0ebed5e028b11799061897a255f99314f0bd3f1", + }, + inheritance: ["FreezeFacetBase", "Common"], + methods: [ + { + name: "batchFreezePartialTokens", + signature: "function batchFreezePartialTokens(address[] _userAddresses, uint256[] _amounts)", + selector: "0xfc7e5fa8", + }, + { + name: "batchSetAddressFrozen", + signature: "function batchSetAddressFrozen(address[] _userAddresses, bool[] _freeze)", + selector: "0x1a7af379", + }, + { + name: "batchUnfreezePartialTokens", + signature: "function batchUnfreezePartialTokens(address[] _userAddresses, uint256[] _amounts)", + selector: "0x4710362d", + }, + { + name: "freezePartialTokens", + signature: "function freezePartialTokens(address _userAddress, uint256 _amount)", + selector: "0x125c4a33", + }, + { + name: "getFrozenTokens", + signature: "function getFrozenTokens(address _userAddress) view returns (uint256)", + selector: "0x158b1a57", + }, + { + name: "setAddressFrozen", + signature: "function setAddressFrozen(address _userAddress, bool _freezStatus)", + selector: "0xc69c09cf", + }, + { + name: "unfreezePartialTokens", + signature: "function unfreezePartialTokens(address _userAddress, uint256 _amount)", + selector: "0x1fe56f7d", + }, + ], + events: [ + { + name: "AddressFrozen", + signature: "AddressFrozen(address,bool,address)", + topic0: "0x7fa523c84ab8d7fc5b72f08b9e46dbbf10c39e119a075b3e317002d14bc9f436", + }, + { + name: "TokensFrozen", + signature: "TokensFrozen(address,uint256,bytes32)", + topic0: "0xd736f88140588a48bf2ce0d40c8ed9eea7d10162e5667cf5054c78ac9a28b2e2", + }, + { + name: "TokensUnfrozen", + signature: "TokensUnfrozen(address,uint256,bytes32)", + topic0: "0x8b0e34ce56cda141218491fb231baf3165de0352a77ac6f07e7583b301d9452d", + }, + ], + errors: [{ name: "ExpirationNotReached", signature: "ExpirationNotReached()", selector: "0x92899bcd" }], + factory: (signer, useTimeTravel = false) => + useTimeTravel ? new FreezeFacetTimeTravel__factory(signer) : new FreezeFacet__factory(signer), + }, + + FreezeFixedRateFacet: { + name: "FreezeFixedRateFacet", + resolverKey: { + name: "_FREEZE_FIXED_RATE_RESOLVER_KEY", + value: "0xad6f49f17db4659e78d7c82e5414ef50b6bfddf3f3e15adc3d0a0e958f696841", + }, + inheritance: ["FreezeFacetBase", "CommonFixedInterestRate"], + methods: [ + { + name: "batchFreezePartialTokens", + signature: "function batchFreezePartialTokens(address[] _userAddresses, uint256[] _amounts)", + selector: "0xfc7e5fa8", + }, + { + name: "batchSetAddressFrozen", + signature: "function batchSetAddressFrozen(address[] _userAddresses, bool[] _freeze)", + selector: "0x1a7af379", + }, + { + name: "batchUnfreezePartialTokens", + signature: "function batchUnfreezePartialTokens(address[] _userAddresses, uint256[] _amounts)", + selector: "0x4710362d", + }, + { + name: "freezePartialTokens", + signature: "function freezePartialTokens(address _userAddress, uint256 _amount)", + selector: "0x125c4a33", + }, + { + name: "getFrozenTokens", + signature: "function getFrozenTokens(address _userAddress) view returns (uint256)", + selector: "0x158b1a57", + }, + { + name: "setAddressFrozen", + signature: "function setAddressFrozen(address _userAddress, bool _freezStatus)", + selector: "0xc69c09cf", + }, + { + name: "unfreezePartialTokens", + signature: "function unfreezePartialTokens(address _userAddress, uint256 _amount)", + selector: "0x1fe56f7d", + }, + ], + events: [ + { + name: "AddressFrozen", + signature: "AddressFrozen(address,bool,address)", + topic0: "0x7fa523c84ab8d7fc5b72f08b9e46dbbf10c39e119a075b3e317002d14bc9f436", + }, + { + name: "TokensFrozen", + signature: "TokensFrozen(address,uint256,bytes32)", + topic0: "0xd736f88140588a48bf2ce0d40c8ed9eea7d10162e5667cf5054c78ac9a28b2e2", + }, + { + name: "TokensUnfrozen", + signature: "TokensUnfrozen(address,uint256,bytes32)", + topic0: "0x8b0e34ce56cda141218491fb231baf3165de0352a77ac6f07e7583b301d9452d", + }, + ], + errors: [ + { name: "ExpirationNotReached", signature: "ExpirationNotReached()", selector: "0x92899bcd" }, + { name: "InterestRateIsFixed", signature: "InterestRateIsFixed()", selector: "0x849d4eb8" }, + ], + factory: (signer, useTimeTravel = false) => + useTimeTravel ? new FreezeFixedRateFacetTimeTravel__factory(signer) : new FreezeFixedRateFacet__factory(signer), + }, + + FreezeKpiLinkedRateFacet: { + name: "FreezeKpiLinkedRateFacet", + resolverKey: { + name: "_FREEZE_KPI_LINKED_RATE_RESOLVER_KEY", + value: "0xb03614fe7a4412f420f88bc18fc39ab43459dbfdbbdbd0a8e109356b0928272e", + }, + inheritance: ["FreezeFacetBase", "CommonKpiLinkedInterestRate"], + methods: [ + { + name: "batchFreezePartialTokens", + signature: "function batchFreezePartialTokens(address[] _userAddresses, uint256[] _amounts)", + selector: "0xfc7e5fa8", + }, + { + name: "batchSetAddressFrozen", + signature: "function batchSetAddressFrozen(address[] _userAddresses, bool[] _freeze)", + selector: "0x1a7af379", + }, + { + name: "batchUnfreezePartialTokens", + signature: "function batchUnfreezePartialTokens(address[] _userAddresses, uint256[] _amounts)", + selector: "0x4710362d", + }, + { + name: "freezePartialTokens", + signature: "function freezePartialTokens(address _userAddress, uint256 _amount)", + selector: "0x125c4a33", + }, + { + name: "getFrozenTokens", + signature: "function getFrozenTokens(address _userAddress) view returns (uint256)", + selector: "0x158b1a57", + }, + { + name: "setAddressFrozen", + signature: "function setAddressFrozen(address _userAddress, bool _freezStatus)", + selector: "0xc69c09cf", + }, + { + name: "unfreezePartialTokens", + signature: "function unfreezePartialTokens(address _userAddress, uint256 _amount)", + selector: "0x1fe56f7d", + }, + ], + events: [ + { + name: "AddressFrozen", + signature: "AddressFrozen(address,bool,address)", + topic0: "0x7fa523c84ab8d7fc5b72f08b9e46dbbf10c39e119a075b3e317002d14bc9f436", + }, + { + name: "TokensFrozen", + signature: "TokensFrozen(address,uint256,bytes32)", + topic0: "0xd736f88140588a48bf2ce0d40c8ed9eea7d10162e5667cf5054c78ac9a28b2e2", + }, + { + name: "TokensUnfrozen", + signature: "TokensUnfrozen(address,uint256,bytes32)", + topic0: "0x8b0e34ce56cda141218491fb231baf3165de0352a77ac6f07e7583b301d9452d", + }, + ], + errors: [ + { name: "ExpirationNotReached", signature: "ExpirationNotReached()", selector: "0x92899bcd" }, + { name: "InterestRateIsKpiLinked", signature: "InterestRateIsKpiLinked()", selector: "0x68eba14f" }, + ], + factory: (signer, useTimeTravel = false) => + useTimeTravel + ? new FreezeKpiLinkedRateFacetTimeTravel__factory(signer) + : new FreezeKpiLinkedRateFacet__factory(signer), + }, + + FreezeSustainabilityPerformanceTargetRateFacet: { + name: "FreezeSustainabilityPerformanceTargetRateFacet", + resolverKey: { + name: "_FREEZE_SUSTAINABILITY_PERFORMANCE_TARGET_RATE_RESOLVER_KEY", + value: "0x25ca5cbe52a82389e142792fdab2ffc58f224f2628f9a92a3f717134cbe229e4", + }, + inheritance: ["FreezeFacetBase", "CommonSustainabilityPerformanceTargetInterestRate"], + methods: [ + { + name: "batchFreezePartialTokens", + signature: "function batchFreezePartialTokens(address[] _userAddresses, uint256[] _amounts)", + selector: "0xfc7e5fa8", + }, + { + name: "batchSetAddressFrozen", + signature: "function batchSetAddressFrozen(address[] _userAddresses, bool[] _freeze)", + selector: "0x1a7af379", + }, + { + name: "batchUnfreezePartialTokens", + signature: "function batchUnfreezePartialTokens(address[] _userAddresses, uint256[] _amounts)", + selector: "0x4710362d", + }, + { + name: "freezePartialTokens", + signature: "function freezePartialTokens(address _userAddress, uint256 _amount)", + selector: "0x125c4a33", + }, + { + name: "getFrozenTokens", + signature: "function getFrozenTokens(address _userAddress) view returns (uint256)", + selector: "0x158b1a57", + }, + { + name: "setAddressFrozen", + signature: "function setAddressFrozen(address _userAddress, bool _freezStatus)", + selector: "0xc69c09cf", + }, + { + name: "unfreezePartialTokens", + signature: "function unfreezePartialTokens(address _userAddress, uint256 _amount)", + selector: "0x1fe56f7d", + }, + ], + events: [ + { + name: "AddressFrozen", + signature: "AddressFrozen(address,bool,address)", + topic0: "0x7fa523c84ab8d7fc5b72f08b9e46dbbf10c39e119a075b3e317002d14bc9f436", + }, + { + name: "TokensFrozen", + signature: "TokensFrozen(address,uint256,bytes32)", + topic0: "0xd736f88140588a48bf2ce0d40c8ed9eea7d10162e5667cf5054c78ac9a28b2e2", + }, + { + name: "TokensUnfrozen", + signature: "TokensUnfrozen(address,uint256,bytes32)", + topic0: "0x8b0e34ce56cda141218491fb231baf3165de0352a77ac6f07e7583b301d9452d", + }, + ], + errors: [ + { name: "ExpirationNotReached", signature: "ExpirationNotReached()", selector: "0x92899bcd" }, + { + name: "InterestRateIsSustainabilityPerformanceTarget", + signature: "InterestRateIsSustainabilityPerformanceTarget()", + selector: "0x15a15b0a", + }, + ], + factory: (signer, useTimeTravel = false) => + useTimeTravel + ? new FreezeSustainabilityPerformanceTargetRateFacetTimeTravel__factory(signer) + : new FreezeSustainabilityPerformanceTargetRateFacet__factory(signer), + }, + + HoldManagementFacet: { + name: "HoldManagementFacet", + resolverKey: { + name: "_HOLD_RESOLVER_KEY", + value: "0x6c7216c5c52bc8f5019fc2fb333eb5e518e647fd82c807ed7c2a1fe4a03a3860", + }, + inheritance: ["HoldManagementFacetBase", "Common"], + methods: [ + { + name: "controllerCreateHoldByPartition", + signature: + "function controllerCreateHoldByPartition(bytes32 _partition, address _from, tuple(uint256 amount, uint256 expirationTimestamp, address escrow, address to, bytes data) _hold, bytes _operatorData) returns (bool success_, uint256 holdId_)", + selector: "0x5f3d8171", + }, + { + name: "operatorCreateHoldByPartition", + signature: + "function operatorCreateHoldByPartition(bytes32 _partition, address _from, tuple(uint256 amount, uint256 expirationTimestamp, address escrow, address to, bytes data) _hold, bytes _operatorData) returns (bool success_, uint256 holdId_)", + selector: "0xc6062c3c", + }, + { + name: "protectedCreateHoldByPartition", + signature: + "function protectedCreateHoldByPartition(bytes32 _partition, address _from, tuple(tuple(uint256 amount, uint256 expirationTimestamp, address escrow, address to, bytes data) hold, uint256 deadline, uint256 nonce) _protectedHold, bytes _signature) returns (bool success_, uint256 holdId_)", + selector: "0xc17f3554", + }, + ], + events: [ + { + name: "ControllerHeldByPartition", + signature: "ControllerHeldByPartition(address,address,bytes32,uint256,Hold,bytes)", + topic0: "0xf6f3741306d730c309f18e6262f05de4790259d916f67334766f2f71dbf00b11", + }, + { + name: "OperatorHeldByPartition", + signature: "OperatorHeldByPartition(address,address,bytes32,uint256,Hold,bytes)", + topic0: "0xecb0a532842468318362280a5b81ec910b4d495202a817fc545fd2b7628559e4", + }, + { + name: "ProtectedHeldByPartition", + signature: "ProtectedHeldByPartition(address,address,bytes32,uint256,Hold,bytes)", + topic0: "0xdf892a9d471e7ee25020da7f5f096608aadc1cbdf9aacb751bf1b83eb97a8d58", + }, + ], + errors: [{ name: "ExpirationNotReached", signature: "ExpirationNotReached()", selector: "0x92899bcd" }], + factory: (signer, useTimeTravel = false) => + useTimeTravel ? new HoldManagementFacetTimeTravel__factory(signer) : new HoldManagementFacet__factory(signer), + }, + + HoldManagementFixedRateFacet: { + name: "HoldManagementFixedRateFacet", + resolverKey: { + name: "_HOLD_FIXED_RATE_RESOLVER_KEY", + value: "0xed113dc152639988cc04869ce8c061c4a3350fe3826e16fc37960453a8d20b50", + }, + inheritance: ["HoldManagementFacetBase", "CommonFixedInterestRate"], + methods: [ + { + name: "controllerCreateHoldByPartition", + signature: + "function controllerCreateHoldByPartition(bytes32 _partition, address _from, tuple(uint256 amount, uint256 expirationTimestamp, address escrow, address to, bytes data) _hold, bytes _operatorData) returns (bool success_, uint256 holdId_)", + selector: "0x5f3d8171", + }, + { + name: "operatorCreateHoldByPartition", + signature: + "function operatorCreateHoldByPartition(bytes32 _partition, address _from, tuple(uint256 amount, uint256 expirationTimestamp, address escrow, address to, bytes data) _hold, bytes _operatorData) returns (bool success_, uint256 holdId_)", + selector: "0xc6062c3c", + }, + { + name: "protectedCreateHoldByPartition", + signature: + "function protectedCreateHoldByPartition(bytes32 _partition, address _from, tuple(tuple(uint256 amount, uint256 expirationTimestamp, address escrow, address to, bytes data) hold, uint256 deadline, uint256 nonce) _protectedHold, bytes _signature) returns (bool success_, uint256 holdId_)", + selector: "0xc17f3554", + }, + ], + events: [ + { + name: "ControllerHeldByPartition", + signature: "ControllerHeldByPartition(address,address,bytes32,uint256,Hold,bytes)", + topic0: "0xf6f3741306d730c309f18e6262f05de4790259d916f67334766f2f71dbf00b11", + }, + { + name: "OperatorHeldByPartition", + signature: "OperatorHeldByPartition(address,address,bytes32,uint256,Hold,bytes)", + topic0: "0xecb0a532842468318362280a5b81ec910b4d495202a817fc545fd2b7628559e4", + }, + { + name: "ProtectedHeldByPartition", + signature: "ProtectedHeldByPartition(address,address,bytes32,uint256,Hold,bytes)", + topic0: "0xdf892a9d471e7ee25020da7f5f096608aadc1cbdf9aacb751bf1b83eb97a8d58", + }, + ], + errors: [ + { name: "ExpirationNotReached", signature: "ExpirationNotReached()", selector: "0x92899bcd" }, + { name: "InterestRateIsFixed", signature: "InterestRateIsFixed()", selector: "0x849d4eb8" }, + ], + factory: (signer, useTimeTravel = false) => + useTimeTravel + ? new HoldManagementFixedRateFacetTimeTravel__factory(signer) + : new HoldManagementFixedRateFacet__factory(signer), + }, + + HoldManagementKpiLinkedRateFacet: { + name: "HoldManagementKpiLinkedRateFacet", + resolverKey: { + name: "_HOLD_KPI_LINKED_RATE_RESOLVER_KEY", + value: "0xed86feb6fdd55e6a056bda1a5b7149c2d0d6d7d024625b67aa2c567ba0ef2b9e", + }, + inheritance: ["HoldManagementFacetBase", "CommonKpiLinkedInterestRate"], + methods: [ + { + name: "controllerCreateHoldByPartition", + signature: + "function controllerCreateHoldByPartition(bytes32 _partition, address _from, tuple(uint256 amount, uint256 expirationTimestamp, address escrow, address to, bytes data) _hold, bytes _operatorData) returns (bool success_, uint256 holdId_)", + selector: "0x5f3d8171", + }, + { + name: "operatorCreateHoldByPartition", + signature: + "function operatorCreateHoldByPartition(bytes32 _partition, address _from, tuple(uint256 amount, uint256 expirationTimestamp, address escrow, address to, bytes data) _hold, bytes _operatorData) returns (bool success_, uint256 holdId_)", + selector: "0xc6062c3c", + }, + { + name: "protectedCreateHoldByPartition", + signature: + "function protectedCreateHoldByPartition(bytes32 _partition, address _from, tuple(tuple(uint256 amount, uint256 expirationTimestamp, address escrow, address to, bytes data) hold, uint256 deadline, uint256 nonce) _protectedHold, bytes _signature) returns (bool success_, uint256 holdId_)", + selector: "0xc17f3554", + }, + ], + events: [ + { + name: "ControllerHeldByPartition", + signature: "ControllerHeldByPartition(address,address,bytes32,uint256,Hold,bytes)", + topic0: "0xf6f3741306d730c309f18e6262f05de4790259d916f67334766f2f71dbf00b11", + }, + { + name: "OperatorHeldByPartition", + signature: "OperatorHeldByPartition(address,address,bytes32,uint256,Hold,bytes)", + topic0: "0xecb0a532842468318362280a5b81ec910b4d495202a817fc545fd2b7628559e4", + }, + { + name: "ProtectedHeldByPartition", + signature: "ProtectedHeldByPartition(address,address,bytes32,uint256,Hold,bytes)", + topic0: "0xdf892a9d471e7ee25020da7f5f096608aadc1cbdf9aacb751bf1b83eb97a8d58", + }, + ], + errors: [ + { name: "ExpirationNotReached", signature: "ExpirationNotReached()", selector: "0x92899bcd" }, + { name: "InterestRateIsKpiLinked", signature: "InterestRateIsKpiLinked()", selector: "0x68eba14f" }, + ], + factory: (signer, useTimeTravel = false) => + useTimeTravel + ? new HoldManagementKpiLinkedRateFacetTimeTravel__factory(signer) + : new HoldManagementKpiLinkedRateFacet__factory(signer), + }, + + HoldManagementSustainabilityPerformanceTargetRateFacet: { + name: "HoldManagementSustainabilityPerformanceTargetRateFacet", + resolverKey: { + name: "_HOLD_SUSTAINABILITY_PERFORMANCE_TARGET_RATE_RESOLVER_KEY", + value: "0x4574524c203fbcc0f5b9f08bcd2b9a9d47c5a9cf3a30eeb540a93a33a8a2f834", + }, + inheritance: ["HoldManagementFacetBase", "CommonSustainabilityPerformanceTargetInterestRate"], + methods: [ + { + name: "controllerCreateHoldByPartition", + signature: + "function controllerCreateHoldByPartition(bytes32 _partition, address _from, tuple(uint256 amount, uint256 expirationTimestamp, address escrow, address to, bytes data) _hold, bytes _operatorData) returns (bool success_, uint256 holdId_)", + selector: "0x5f3d8171", + }, + { + name: "operatorCreateHoldByPartition", + signature: + "function operatorCreateHoldByPartition(bytes32 _partition, address _from, tuple(uint256 amount, uint256 expirationTimestamp, address escrow, address to, bytes data) _hold, bytes _operatorData) returns (bool success_, uint256 holdId_)", + selector: "0xc6062c3c", + }, + { + name: "protectedCreateHoldByPartition", + signature: + "function protectedCreateHoldByPartition(bytes32 _partition, address _from, tuple(tuple(uint256 amount, uint256 expirationTimestamp, address escrow, address to, bytes data) hold, uint256 deadline, uint256 nonce) _protectedHold, bytes _signature) returns (bool success_, uint256 holdId_)", + selector: "0xc17f3554", + }, + ], + events: [ + { + name: "ControllerHeldByPartition", + signature: "ControllerHeldByPartition(address,address,bytes32,uint256,Hold,bytes)", + topic0: "0xf6f3741306d730c309f18e6262f05de4790259d916f67334766f2f71dbf00b11", + }, + { + name: "OperatorHeldByPartition", + signature: "OperatorHeldByPartition(address,address,bytes32,uint256,Hold,bytes)", + topic0: "0xecb0a532842468318362280a5b81ec910b4d495202a817fc545fd2b7628559e4", + }, + { + name: "ProtectedHeldByPartition", + signature: "ProtectedHeldByPartition(address,address,bytes32,uint256,Hold,bytes)", + topic0: "0xdf892a9d471e7ee25020da7f5f096608aadc1cbdf9aacb751bf1b83eb97a8d58", + }, + ], + errors: [ + { name: "ExpirationNotReached", signature: "ExpirationNotReached()", selector: "0x92899bcd" }, + { + name: "InterestRateIsSustainabilityPerformanceTarget", + signature: "InterestRateIsSustainabilityPerformanceTarget()", + selector: "0x15a15b0a", + }, + ], + factory: (signer, useTimeTravel = false) => + useTimeTravel + ? new HoldManagementSustainabilityPerformanceTargetRateFacetTimeTravel__factory(signer) + : new HoldManagementSustainabilityPerformanceTargetRateFacet__factory(signer), + }, + + HoldReadFacet: { + name: "HoldReadFacet", + resolverKey: { + name: "_HOLD_READ_RESOLVER_KEY", + value: "0xd8a2714462c01975a075ccd4be2588934afd8074afef746fac089b757b803851", + }, + inheritance: ["HoldReadFacetBase", "Common"], + methods: [ + { + name: "getHeldAmountFor", + signature: "function getHeldAmountFor(address _tokenHolder) view returns (uint256 amount_)", + selector: "0x8493aabb", + }, + { + name: "getHeldAmountForByPartition", + signature: + "function getHeldAmountForByPartition(bytes32 _partition, address _tokenHolder) view returns (uint256 amount_)", + selector: "0x4d60fdc5", + }, + { + name: "getHoldCountForByPartition", + signature: + "function getHoldCountForByPartition(bytes32 _partition, address _tokenHolder) view returns (uint256 holdCount_)", + selector: "0xcecb3899", + }, + { + name: "getHoldForByPartition", + signature: + "function getHoldForByPartition(tuple(bytes32 partition, address tokenHolder, uint256 holdId) _holdIdentifier) view returns (uint256 amount_, uint256 expirationTimestamp_, address escrow_, address destination_, bytes data_, bytes operatorData_, uint8 thirdPartyType_)", + selector: "0x8d41523d", + }, + { + name: "getHoldThirdParty", + signature: + "function getHoldThirdParty(tuple(bytes32 partition, address tokenHolder, uint256 holdId) _holdIdentifier) view returns (address)", + selector: "0x3c36a695", + }, + { + name: "getHoldsIdForByPartition", + signature: + "function getHoldsIdForByPartition(bytes32 _partition, address _tokenHolder, uint256 _pageIndex, uint256 _pageLength) view returns (uint256[] holdsId_)", + selector: "0xeb89899d", + }, + ], + errors: [{ name: "ExpirationNotReached", signature: "ExpirationNotReached()", selector: "0x92899bcd" }], + factory: (signer, useTimeTravel = false) => + useTimeTravel ? new HoldReadFacetTimeTravel__factory(signer) : new HoldReadFacet__factory(signer), + }, + + HoldReadFixedRateFacet: { + name: "HoldReadFixedRateFacet", + resolverKey: { + name: "_HOLD_READ_FIXED_RATE_RESOLVER_KEY", + value: "0xcf1b5b7fa2ca417ea3b952a93a6157f237fce01f4944d27160e5101f05335e52", + }, + inheritance: ["HoldReadFacetBase", "CommonFixedInterestRate"], + methods: [ + { + name: "getHeldAmountFor", + signature: "function getHeldAmountFor(address _tokenHolder) view returns (uint256 amount_)", + selector: "0x8493aabb", + }, + { + name: "getHeldAmountForByPartition", + signature: + "function getHeldAmountForByPartition(bytes32 _partition, address _tokenHolder) view returns (uint256 amount_)", + selector: "0x4d60fdc5", + }, + { + name: "getHoldCountForByPartition", + signature: + "function getHoldCountForByPartition(bytes32 _partition, address _tokenHolder) view returns (uint256 holdCount_)", + selector: "0xcecb3899", + }, + { + name: "getHoldForByPartition", + signature: + "function getHoldForByPartition(tuple(bytes32 partition, address tokenHolder, uint256 holdId) _holdIdentifier) view returns (uint256 amount_, uint256 expirationTimestamp_, address escrow_, address destination_, bytes data_, bytes operatorData_, uint8 thirdPartyType_)", + selector: "0x8d41523d", + }, + { + name: "getHoldThirdParty", + signature: + "function getHoldThirdParty(tuple(bytes32 partition, address tokenHolder, uint256 holdId) _holdIdentifier) view returns (address)", + selector: "0x3c36a695", + }, + { + name: "getHoldsIdForByPartition", + signature: + "function getHoldsIdForByPartition(bytes32 _partition, address _tokenHolder, uint256 _pageIndex, uint256 _pageLength) view returns (uint256[] holdsId_)", + selector: "0xeb89899d", + }, + ], + errors: [ + { name: "ExpirationNotReached", signature: "ExpirationNotReached()", selector: "0x92899bcd" }, + { name: "InterestRateIsFixed", signature: "InterestRateIsFixed()", selector: "0x849d4eb8" }, + ], + factory: (signer, useTimeTravel = false) => + useTimeTravel + ? new HoldReadFixedRateFacetTimeTravel__factory(signer) + : new HoldReadFixedRateFacet__factory(signer), + }, + + HoldReadKpiLinkedRateFacet: { + name: "HoldReadKpiLinkedRateFacet", + resolverKey: { + name: "_HOLD_READ_KPI_LINKED_RATE_RESOLVER_KEY", + value: "0x6b896f9725e5d4f4b5f8cff875e71b5f3284000a933f6ab32c01cdd5f71306d6", + }, + inheritance: ["HoldReadFacetBase", "CommonKpiLinkedInterestRate"], + methods: [ + { + name: "getHeldAmountFor", + signature: "function getHeldAmountFor(address _tokenHolder) view returns (uint256 amount_)", + selector: "0x8493aabb", + }, + { + name: "getHeldAmountForByPartition", + signature: + "function getHeldAmountForByPartition(bytes32 _partition, address _tokenHolder) view returns (uint256 amount_)", + selector: "0x4d60fdc5", + }, + { + name: "getHoldCountForByPartition", + signature: + "function getHoldCountForByPartition(bytes32 _partition, address _tokenHolder) view returns (uint256 holdCount_)", + selector: "0xcecb3899", + }, + { + name: "getHoldForByPartition", + signature: + "function getHoldForByPartition(tuple(bytes32 partition, address tokenHolder, uint256 holdId) _holdIdentifier) view returns (uint256 amount_, uint256 expirationTimestamp_, address escrow_, address destination_, bytes data_, bytes operatorData_, uint8 thirdPartyType_)", + selector: "0x8d41523d", + }, + { + name: "getHoldThirdParty", + signature: + "function getHoldThirdParty(tuple(bytes32 partition, address tokenHolder, uint256 holdId) _holdIdentifier) view returns (address)", + selector: "0x3c36a695", + }, + { + name: "getHoldsIdForByPartition", + signature: + "function getHoldsIdForByPartition(bytes32 _partition, address _tokenHolder, uint256 _pageIndex, uint256 _pageLength) view returns (uint256[] holdsId_)", + selector: "0xeb89899d", + }, + ], + errors: [ + { name: "ExpirationNotReached", signature: "ExpirationNotReached()", selector: "0x92899bcd" }, + { name: "InterestRateIsKpiLinked", signature: "InterestRateIsKpiLinked()", selector: "0x68eba14f" }, + ], + factory: (signer, useTimeTravel = false) => + useTimeTravel + ? new HoldReadKpiLinkedRateFacetTimeTravel__factory(signer) + : new HoldReadKpiLinkedRateFacet__factory(signer), + }, + + HoldReadSustainabilityPerformanceTargetRateFacet: { + name: "HoldReadSustainabilityPerformanceTargetRateFacet", + resolverKey: { + name: "_HOLD_READ_SUSTAINABILITY_PERFORMANCE_TARGET_RATE_RESOLVER_KEY", + value: "0x8e7113391652a4d3d8feb1d90990cd06ee33dc67a640b4400f8bfb9fae4f91b2", + }, + inheritance: ["HoldReadFacetBase", "CommonSustainabilityPerformanceTargetInterestRate"], + methods: [ + { + name: "getHeldAmountFor", + signature: "function getHeldAmountFor(address _tokenHolder) view returns (uint256 amount_)", + selector: "0x8493aabb", + }, + { + name: "getHeldAmountForByPartition", + signature: + "function getHeldAmountForByPartition(bytes32 _partition, address _tokenHolder) view returns (uint256 amount_)", + selector: "0x4d60fdc5", + }, + { + name: "getHoldCountForByPartition", + signature: + "function getHoldCountForByPartition(bytes32 _partition, address _tokenHolder) view returns (uint256 holdCount_)", + selector: "0xcecb3899", + }, + { + name: "getHoldForByPartition", + signature: + "function getHoldForByPartition(tuple(bytes32 partition, address tokenHolder, uint256 holdId) _holdIdentifier) view returns (uint256 amount_, uint256 expirationTimestamp_, address escrow_, address destination_, bytes data_, bytes operatorData_, uint8 thirdPartyType_)", + selector: "0x8d41523d", + }, + { + name: "getHoldThirdParty", + signature: + "function getHoldThirdParty(tuple(bytes32 partition, address tokenHolder, uint256 holdId) _holdIdentifier) view returns (address)", + selector: "0x3c36a695", + }, + { + name: "getHoldsIdForByPartition", + signature: + "function getHoldsIdForByPartition(bytes32 _partition, address _tokenHolder, uint256 _pageIndex, uint256 _pageLength) view returns (uint256[] holdsId_)", + selector: "0xeb89899d", + }, + ], + errors: [ + { name: "ExpirationNotReached", signature: "ExpirationNotReached()", selector: "0x92899bcd" }, + { + name: "InterestRateIsSustainabilityPerformanceTarget", + signature: "InterestRateIsSustainabilityPerformanceTarget()", + selector: "0x15a15b0a", + }, + ], + factory: (signer, useTimeTravel = false) => + useTimeTravel + ? new HoldReadSustainabilityPerformanceTargetRateFacetTimeTravel__factory(signer) + : new HoldReadSustainabilityPerformanceTargetRateFacet__factory(signer), + }, + + HoldTokenHolderFacet: { + name: "HoldTokenHolderFacet", + resolverKey: { + name: "_HOLD_TOKEN_HOLDER_RESOLVER_KEY", + value: "0x87b17a3ce9a86872f21469d26f005543a22ef5729998559f4ad433d5c4253f3e", + }, + inheritance: ["HoldTokenHolderFacetBase", "Common"], + methods: [ + { + name: "createHoldByPartition", + signature: + "function createHoldByPartition(bytes32 _partition, tuple(uint256 amount, uint256 expirationTimestamp, address escrow, address to, bytes data) _hold) returns (bool success_, uint256 holdId_)", + selector: "0x5d23449e", + }, + { + name: "createHoldFromByPartition", + signature: + "function createHoldFromByPartition(bytes32 _partition, address _from, tuple(uint256 amount, uint256 expirationTimestamp, address escrow, address to, bytes data) _hold, bytes _operatorData) returns (bool success_, uint256 holdId_)", + selector: "0x2361f007", + }, + { + name: "executeHoldByPartition", + signature: + "function executeHoldByPartition(tuple(bytes32 partition, address tokenHolder, uint256 holdId) _holdIdentifier, address _to, uint256 _amount) returns (bool success_, bytes32 partition_)", + selector: "0x25fe8720", + }, + { + name: "reclaimHoldByPartition", + signature: + "function reclaimHoldByPartition(tuple(bytes32 partition, address tokenHolder, uint256 holdId) _holdIdentifier) returns (bool success_)", + selector: "0xb437969e", + }, + { + name: "releaseHoldByPartition", + signature: + "function releaseHoldByPartition(tuple(bytes32 partition, address tokenHolder, uint256 holdId) _holdIdentifier, uint256 _amount) returns (bool success_)", + selector: "0xf8bafc1c", + }, + ], + events: [ + { + name: "HeldByPartition", + signature: "HeldByPartition(address,address,bytes32,uint256,Hold,bytes)", + topic0: "0x8aaecda291be1880bb8f1b74d739076b63e172f3758535440d4781002a135663", + }, + { + name: "HeldFromByPartition", + signature: "HeldFromByPartition(address,address,bytes32,uint256,Hold,bytes)", + topic0: "0x89e7674560e6cad671bf2d392a62a88b25b960e62476504e038081c3aabe7ece", + }, + { + name: "HoldByPartitionExecuted", + signature: "HoldByPartitionExecuted(address,bytes32,uint256,uint256,address)", + topic0: "0x4fb20409d1b2a56fa4c5b29c11d9b1e148649db67860c5648a8a86f35edf8582", + }, + { + name: "HoldByPartitionReclaimed", + signature: "HoldByPartitionReclaimed(address,address,bytes32,uint256,uint256)", + topic0: "0xee0ec155026031ca64823d8fbf00832ff3f96c7da0994432ddc1a32c72022a09", + }, + { + name: "HoldByPartitionReleased", + signature: "HoldByPartitionReleased(address,bytes32,uint256,uint256)", + topic0: "0x6c167944f4b372d42d168efc93004d7e517cb82a501d67490af33f95530ca50e", + }, + ], + errors: [{ name: "ExpirationNotReached", signature: "ExpirationNotReached()", selector: "0x92899bcd" }], + factory: (signer, useTimeTravel = false) => + useTimeTravel ? new HoldTokenHolderFacetTimeTravel__factory(signer) : new HoldTokenHolderFacet__factory(signer), + }, + + HoldTokenHolderFixedRateFacet: { + name: "HoldTokenHolderFixedRateFacet", + resolverKey: { + name: "_HOLD_TOKEN_HOLDER_FIXED_RATE_RESOLVER_KEY", + value: "0x0d354aad4576c421c121516a105362711db178c6f0d6e0159d68d9f3ebbda486", + }, + inheritance: ["HoldTokenHolderFacetBase", "CommonFixedInterestRate"], + methods: [ + { + name: "createHoldByPartition", + signature: + "function createHoldByPartition(bytes32 _partition, tuple(uint256 amount, uint256 expirationTimestamp, address escrow, address to, bytes data) _hold) returns (bool success_, uint256 holdId_)", + selector: "0x5d23449e", + }, + { + name: "createHoldFromByPartition", + signature: + "function createHoldFromByPartition(bytes32 _partition, address _from, tuple(uint256 amount, uint256 expirationTimestamp, address escrow, address to, bytes data) _hold, bytes _operatorData) returns (bool success_, uint256 holdId_)", + selector: "0x2361f007", + }, + { + name: "executeHoldByPartition", + signature: + "function executeHoldByPartition(tuple(bytes32 partition, address tokenHolder, uint256 holdId) _holdIdentifier, address _to, uint256 _amount) returns (bool success_, bytes32 partition_)", + selector: "0x25fe8720", + }, + { + name: "reclaimHoldByPartition", + signature: + "function reclaimHoldByPartition(tuple(bytes32 partition, address tokenHolder, uint256 holdId) _holdIdentifier) returns (bool success_)", + selector: "0xb437969e", + }, + { + name: "releaseHoldByPartition", + signature: + "function releaseHoldByPartition(tuple(bytes32 partition, address tokenHolder, uint256 holdId) _holdIdentifier, uint256 _amount) returns (bool success_)", + selector: "0xf8bafc1c", + }, + ], + events: [ + { + name: "HeldByPartition", + signature: "HeldByPartition(address,address,bytes32,uint256,Hold,bytes)", + topic0: "0x8aaecda291be1880bb8f1b74d739076b63e172f3758535440d4781002a135663", + }, + { + name: "HeldFromByPartition", + signature: "HeldFromByPartition(address,address,bytes32,uint256,Hold,bytes)", + topic0: "0x89e7674560e6cad671bf2d392a62a88b25b960e62476504e038081c3aabe7ece", + }, + { + name: "HoldByPartitionExecuted", + signature: "HoldByPartitionExecuted(address,bytes32,uint256,uint256,address)", + topic0: "0x4fb20409d1b2a56fa4c5b29c11d9b1e148649db67860c5648a8a86f35edf8582", + }, + { + name: "HoldByPartitionReclaimed", + signature: "HoldByPartitionReclaimed(address,address,bytes32,uint256,uint256)", + topic0: "0xee0ec155026031ca64823d8fbf00832ff3f96c7da0994432ddc1a32c72022a09", + }, + { + name: "HoldByPartitionReleased", + signature: "HoldByPartitionReleased(address,bytes32,uint256,uint256)", + topic0: "0x6c167944f4b372d42d168efc93004d7e517cb82a501d67490af33f95530ca50e", + }, + ], + errors: [ + { name: "ExpirationNotReached", signature: "ExpirationNotReached()", selector: "0x92899bcd" }, + { name: "InterestRateIsFixed", signature: "InterestRateIsFixed()", selector: "0x849d4eb8" }, + ], + factory: (signer, useTimeTravel = false) => + useTimeTravel + ? new HoldTokenHolderFixedRateFacetTimeTravel__factory(signer) + : new HoldTokenHolderFixedRateFacet__factory(signer), + }, + + HoldTokenHolderKpiLinkedRateFacet: { + name: "HoldTokenHolderKpiLinkedRateFacet", + resolverKey: { + name: "_HOLD_TOKEN_HOLDER_KPI_LINKED_RATE_RESOLVER_KEY", + value: "0x09f3820ce986997421b684b2482b6d982f31b5ed27a0d72e2aece5ffb3c8fd39", + }, + inheritance: ["HoldTokenHolderFacetBase", "CommonKpiLinkedInterestRate"], + methods: [ + { + name: "createHoldByPartition", + signature: + "function createHoldByPartition(bytes32 _partition, tuple(uint256 amount, uint256 expirationTimestamp, address escrow, address to, bytes data) _hold) returns (bool success_, uint256 holdId_)", + selector: "0x5d23449e", + }, + { + name: "createHoldFromByPartition", + signature: + "function createHoldFromByPartition(bytes32 _partition, address _from, tuple(uint256 amount, uint256 expirationTimestamp, address escrow, address to, bytes data) _hold, bytes _operatorData) returns (bool success_, uint256 holdId_)", + selector: "0x2361f007", + }, + { + name: "executeHoldByPartition", + signature: + "function executeHoldByPartition(tuple(bytes32 partition, address tokenHolder, uint256 holdId) _holdIdentifier, address _to, uint256 _amount) returns (bool success_, bytes32 partition_)", + selector: "0x25fe8720", + }, + { + name: "reclaimHoldByPartition", + signature: + "function reclaimHoldByPartition(tuple(bytes32 partition, address tokenHolder, uint256 holdId) _holdIdentifier) returns (bool success_)", + selector: "0xb437969e", + }, + { + name: "releaseHoldByPartition", + signature: + "function releaseHoldByPartition(tuple(bytes32 partition, address tokenHolder, uint256 holdId) _holdIdentifier, uint256 _amount) returns (bool success_)", + selector: "0xf8bafc1c", + }, + ], + events: [ + { + name: "HeldByPartition", + signature: "HeldByPartition(address,address,bytes32,uint256,Hold,bytes)", + topic0: "0x8aaecda291be1880bb8f1b74d739076b63e172f3758535440d4781002a135663", + }, + { + name: "HeldFromByPartition", + signature: "HeldFromByPartition(address,address,bytes32,uint256,Hold,bytes)", + topic0: "0x89e7674560e6cad671bf2d392a62a88b25b960e62476504e038081c3aabe7ece", + }, + { + name: "HoldByPartitionExecuted", + signature: "HoldByPartitionExecuted(address,bytes32,uint256,uint256,address)", + topic0: "0x4fb20409d1b2a56fa4c5b29c11d9b1e148649db67860c5648a8a86f35edf8582", + }, + { + name: "HoldByPartitionReclaimed", + signature: "HoldByPartitionReclaimed(address,address,bytes32,uint256,uint256)", + topic0: "0xee0ec155026031ca64823d8fbf00832ff3f96c7da0994432ddc1a32c72022a09", + }, + { + name: "HoldByPartitionReleased", + signature: "HoldByPartitionReleased(address,bytes32,uint256,uint256)", + topic0: "0x6c167944f4b372d42d168efc93004d7e517cb82a501d67490af33f95530ca50e", + }, + ], + errors: [ + { name: "ExpirationNotReached", signature: "ExpirationNotReached()", selector: "0x92899bcd" }, + { name: "InterestRateIsKpiLinked", signature: "InterestRateIsKpiLinked()", selector: "0x68eba14f" }, + ], + factory: (signer, useTimeTravel = false) => + useTimeTravel + ? new HoldTokenHolderKpiLinkedRateFacetTimeTravel__factory(signer) + : new HoldTokenHolderKpiLinkedRateFacet__factory(signer), + }, + + HoldTokenHolderSustainabilityPerformanceTargetRateFacet: { + name: "HoldTokenHolderSustainabilityPerformanceTargetRateFacet", + resolverKey: { + name: "_HOLD_TOKEN_HOLDER_SUSTAINABILITY_PERFORMANCE_TARGET_RATE_RESOLVER_KEY", + value: "0x28ae4d4cdc1846ba348a31e222161d8343223560c1875fe3efcad8c5dd5f81e0", + }, + inheritance: ["HoldTokenHolderFacetBase", "CommonSustainabilityPerformanceTargetInterestRate"], + methods: [ + { + name: "createHoldByPartition", + signature: + "function createHoldByPartition(bytes32 _partition, tuple(uint256 amount, uint256 expirationTimestamp, address escrow, address to, bytes data) _hold) returns (bool success_, uint256 holdId_)", + selector: "0x5d23449e", + }, + { + name: "createHoldFromByPartition", + signature: + "function createHoldFromByPartition(bytes32 _partition, address _from, tuple(uint256 amount, uint256 expirationTimestamp, address escrow, address to, bytes data) _hold, bytes _operatorData) returns (bool success_, uint256 holdId_)", + selector: "0x2361f007", + }, + { + name: "executeHoldByPartition", + signature: + "function executeHoldByPartition(tuple(bytes32 partition, address tokenHolder, uint256 holdId) _holdIdentifier, address _to, uint256 _amount) returns (bool success_, bytes32 partition_)", + selector: "0x25fe8720", + }, + { + name: "reclaimHoldByPartition", + signature: + "function reclaimHoldByPartition(tuple(bytes32 partition, address tokenHolder, uint256 holdId) _holdIdentifier) returns (bool success_)", + selector: "0xb437969e", + }, + { + name: "releaseHoldByPartition", + signature: + "function releaseHoldByPartition(tuple(bytes32 partition, address tokenHolder, uint256 holdId) _holdIdentifier, uint256 _amount) returns (bool success_)", + selector: "0xf8bafc1c", + }, + ], + events: [ + { + name: "HeldByPartition", + signature: "HeldByPartition(address,address,bytes32,uint256,Hold,bytes)", + topic0: "0x8aaecda291be1880bb8f1b74d739076b63e172f3758535440d4781002a135663", + }, + { + name: "HeldFromByPartition", + signature: "HeldFromByPartition(address,address,bytes32,uint256,Hold,bytes)", + topic0: "0x89e7674560e6cad671bf2d392a62a88b25b960e62476504e038081c3aabe7ece", + }, + { + name: "HoldByPartitionExecuted", + signature: "HoldByPartitionExecuted(address,bytes32,uint256,uint256,address)", + topic0: "0x4fb20409d1b2a56fa4c5b29c11d9b1e148649db67860c5648a8a86f35edf8582", + }, + { + name: "HoldByPartitionReclaimed", + signature: "HoldByPartitionReclaimed(address,address,bytes32,uint256,uint256)", + topic0: "0xee0ec155026031ca64823d8fbf00832ff3f96c7da0994432ddc1a32c72022a09", + }, + { + name: "HoldByPartitionReleased", + signature: "HoldByPartitionReleased(address,bytes32,uint256,uint256)", + topic0: "0x6c167944f4b372d42d168efc93004d7e517cb82a501d67490af33f95530ca50e", + }, + ], + errors: [ + { name: "ExpirationNotReached", signature: "ExpirationNotReached()", selector: "0x92899bcd" }, + { + name: "InterestRateIsSustainabilityPerformanceTarget", + signature: "InterestRateIsSustainabilityPerformanceTarget()", + selector: "0x15a15b0a", + }, + ], + factory: (signer, useTimeTravel = false) => + useTimeTravel + ? new HoldTokenHolderSustainabilityPerformanceTargetRateFacetTimeTravel__factory(signer) + : new HoldTokenHolderSustainabilityPerformanceTargetRateFacet__factory(signer), + }, + + KpiLinkedRateFacet: { + name: "KpiLinkedRateFacet", + resolverKey: { + name: "_KPI_LINKED_RATE_RESOLVER_KEY", + value: "0x92999bd0329d03e46274ce7743ebe0060df95286df4fa7b354937b7d21757d22", + }, + inheritance: ["KpiLinkedRate", "IStaticFunctionSelectors"], + methods: [ + { + name: "getImpactData", + signature: + "function getImpactData() view returns (tuple(uint256 maxDeviationCap, uint256 baseLine, uint256 maxDeviationFloor, uint8 impactDataDecimals, uint256 adjustmentPrecision) impactData_)", + selector: "0x24bffca8", + }, + { + name: "getInterestRate", + signature: + "function getInterestRate() view returns (tuple(uint256 maxRate, uint256 baseRate, uint256 minRate, uint256 startPeriod, uint256 startRate, uint256 missedPenalty, uint256 reportPeriod, uint8 rateDecimals) interestRate_)", + selector: "0x5257b566", + }, + { + name: "getKpiOracle", + signature: "function getKpiOracle() view returns (address kpiOracle_)", + selector: "0x507ff519", + }, + { + name: "initialize_KpiLinkedRate", + signature: + "function initialize_KpiLinkedRate(tuple(uint256 maxRate, uint256 baseRate, uint256 minRate, uint256 startPeriod, uint256 startRate, uint256 missedPenalty, uint256 reportPeriod, uint8 rateDecimals) _interestRate, tuple(uint256 maxDeviationCap, uint256 baseLine, uint256 maxDeviationFloor, uint8 impactDataDecimals, uint256 adjustmentPrecision) _impactData, address kpiOracle)", + selector: "0x9a613933", + }, + { + name: "setImpactData", + signature: + "function setImpactData(tuple(uint256 maxDeviationCap, uint256 baseLine, uint256 maxDeviationFloor, uint8 impactDataDecimals, uint256 adjustmentPrecision) _newImpactData)", + selector: "0x9ce6e100", + }, + { + name: "setInterestRate", + signature: + "function setInterestRate(tuple(uint256 maxRate, uint256 baseRate, uint256 minRate, uint256 startPeriod, uint256 startRate, uint256 missedPenalty, uint256 reportPeriod, uint8 rateDecimals) _newInterestRate)", + selector: "0x9a833a5b", + }, + { name: "setKpiOracle", signature: "function setKpiOracle(address _kpiOracle)", selector: "0xa6a7e233" }, + ], + events: [ + { + name: "ImpactDataUpdated", + signature: "ImpactDataUpdated(address,ImpactData)", + topic0: "0x1332416d8a331208a5df15d5aca3cfdb455372a2258e35f219261cf3a2f50cdb", + }, + { + name: "InterestRateUpdated", + signature: "InterestRateUpdated(address,InterestRate)", + topic0: "0xed3c060bc037e2b9f05c9d552119ccb2cf7499562ac630370d20178beb1583e7", + }, + { + name: "KpiOracleUpdated", + signature: "KpiOracleUpdated(address,address)", + topic0: "0xb1508b1e352d7d662c2797f56b267cd7f96db139d0ba747ffa2d007bf8a8e823", + }, + ], + errors: [ + { name: "ExpirationNotReached", signature: "ExpirationNotReached()", selector: "0x92899bcd" }, + { name: "InterestRateIsKpiLinked", signature: "InterestRateIsKpiLinked()", selector: "0x68eba14f" }, + { name: "KpiOracleCalledFailed", signature: "KpiOracleCalledFailed()", selector: "0x75d7804c" }, + { name: "WrongImpactDataValues", signature: "WrongImpactDataValues(ImpactData)", selector: "0xb90540b6" }, + { name: "WrongInterestRateValues", signature: "WrongInterestRateValues(InterestRate)", selector: "0xf2973d16" }, + ], + factory: (signer, useTimeTravel = false) => + useTimeTravel ? new KpiLinkedRateFacetTimeTravel__factory(signer) : new KpiLinkedRateFacet__factory(signer), + }, + + KpisSustainabilityPerformanceTargetRateFacet: { + name: "KpisSustainabilityPerformanceTargetRateFacet", + resolverKey: { + name: "_KPIS_LATEST_SUSTAINABILITY_PERFORMANCE_TARGET_RATE_RESOLVER_KEY", + value: "0xb668a0e99ee4bce486604d5a7097a4e5d837d1736e0cf43b190b56d0adea78b9", + }, + inheritance: ["KpisFacetBase", "CommonSustainabilityPerformanceTargetInterestRate"], + methods: [ + { + name: "addKpiData", + signature: "function addKpiData(uint256 _date, uint256 _value, address _project)", + selector: "0x0de2be70", + }, + { + name: "getLatestKpiData", + signature: + "function getLatestKpiData(uint256 _from, uint256 _to, address _project) view returns (uint256 value_, bool exists_)", + selector: "0xfc7f5cb3", + }, + { + name: "getMinDate", + signature: "function getMinDate() view returns (uint256 minDate_)", + selector: "0x48de6fa7", + }, + { + name: "isCheckPointDate", + signature: "function isCheckPointDate(uint256 _date, address _project) view returns (bool exists_)", + selector: "0x8078ccd5", + }, + ], + events: [ + { + name: "KpiDataAdded", + signature: "KpiDataAdded(address,uint256,uint256)", + topic0: "0xb14d0e5a6665e6c690dc5c7ffc777323768a449038bc6bfed9986ecd52547303", + }, + ], + errors: [ + { name: "ExpirationNotReached", signature: "ExpirationNotReached()", selector: "0x92899bcd" }, + { + name: "InterestRateIsSustainabilityPerformanceTarget", + signature: "InterestRateIsSustainabilityPerformanceTarget()", + selector: "0x15a15b0a", + }, + { name: "InvalidDate", signature: "InvalidDate(uint256,uint256,uint256)", selector: "0x1addb674" }, + { name: "InvalidDateRange", signature: "InvalidDateRange(uint256,uint256)", selector: "0x8914d40b" }, + { name: "KpiDataAlreadyExists", signature: "KpiDataAlreadyExists(uint256)", selector: "0x74efd82c" }, + ], + factory: (signer, useTimeTravel = false) => + useTimeTravel + ? new KpisSustainabilityPerformanceTargetRateFacetTimeTravel__factory(signer) + : new KpisSustainabilityPerformanceTargetRateFacet__factory(signer), + }, + + KycFacet: { + name: "KycFacet", + resolverKey: { + name: "_KYC_RESOLVER_KEY", + value: "0xf516a0f6b4726244ae916c590cd26c2b593d7d448e46e43714fb9f9435c46e32", + }, + inheritance: ["KycFacetBase", "Common"], + methods: [ + { + name: "activateInternalKyc", + signature: "function activateInternalKyc() returns (bool success_)", + selector: "0xfbb08f50", + }, + { + name: "deactivateInternalKyc", + signature: "function deactivateInternalKyc() returns (bool success_)", + selector: "0x4a5df31d", + }, + { + name: "getKycAccountsCount", + signature: "function getKycAccountsCount(uint8 _kycStatus) view returns (uint256 kycAccountsCount_)", + selector: "0x5b712c4b", + }, + { + name: "getKycAccountsData", + signature: + "function getKycAccountsData(uint8 _kycStatus, uint256 _pageIndex, uint256 _pageLength) view returns (address[] accounts_, tuple(uint256 validFrom, uint256 validTo, string vcId, address issuer, uint8 status)[] kycData_)", + selector: "0x00497afb", + }, + { + name: "getKycFor", + signature: + "function getKycFor(address _account) view returns (tuple(uint256 validFrom, uint256 validTo, string vcId, address issuer, uint8 status) kyc_)", + selector: "0x41322840", + }, + { + name: "getKycStatusFor", + signature: "function getKycStatusFor(address _account) view returns (uint8 kycStatus_)", + selector: "0xe788a736", + }, + { + name: "grantKyc", + signature: + "function grantKyc(address _account, string _vcId, uint256 _validFrom, uint256 _validTo, address _issuer) returns (bool success_)", + selector: "0x81bea54d", + }, + { + name: "initializeInternalKyc", + signature: "function initializeInternalKyc(bool _internalKycActivated)", + selector: "0xdf353624", + }, + { + name: "isInternalKycActivated", + signature: "function isInternalKycActivated() view returns (bool)", + selector: "0x90b6c798", + }, + { + name: "revokeKyc", + signature: "function revokeKyc(address _account) returns (bool success_)", + selector: "0x12283191", + }, + ], + events: [ + { + name: "InternalKycStatusUpdated", + signature: "InternalKycStatusUpdated(address,bool)", + topic0: "0xa9f463ccc72d9e8aa9a317345756d652481f06b5ddf8aa4057f38086024a168c", + }, + { + name: "KycGranted", + signature: "KycGranted(address,address)", + topic0: "0x0cc42ba172587888529a0b89cc75bd6914b337cf10757fd80e3246330e55ad94", + }, + { + name: "KycRevoked", + signature: "KycRevoked(address,address)", + topic0: "0x5d9279616441228548cfb67f31b7b9b131fd30de1b3c54a6dd0062a74ce638a6", + }, + ], + errors: [ + { name: "ExpirationNotReached", signature: "ExpirationNotReached()", selector: "0x92899bcd" }, + { name: "InvalidDates", signature: "InvalidDates()", selector: "0xd937486c" }, + { name: "InvalidKycStatus", signature: "InvalidKycStatus()", selector: "0xfc855b1b" }, + { name: "InvalidZeroAddress", signature: "InvalidZeroAddress()", selector: "0xf6b2911f" }, + { name: "KycIsNotGranted", signature: "KycIsNotGranted()", selector: "0xd5209e15" }, + ], + factory: (signer, useTimeTravel = false) => + useTimeTravel ? new KycFacetTimeTravel__factory(signer) : new KycFacet__factory(signer), + }, + + KycFixedRateFacet: { + name: "KycFixedRateFacet", + resolverKey: { + name: "_KYC_FIXED_RATE_RESOLVER_KEY", + value: "0x76145b42d3591928a90298dbd705c8cdb33be9f5eee50f649fb58ed3f36b9f04", + }, + inheritance: ["KycFacetBase", "CommonFixedInterestRate"], + methods: [ + { + name: "activateInternalKyc", + signature: "function activateInternalKyc() returns (bool success_)", + selector: "0xfbb08f50", + }, + { + name: "deactivateInternalKyc", + signature: "function deactivateInternalKyc() returns (bool success_)", + selector: "0x4a5df31d", + }, + { + name: "getKycAccountsCount", + signature: "function getKycAccountsCount(uint8 _kycStatus) view returns (uint256 kycAccountsCount_)", + selector: "0x5b712c4b", + }, + { + name: "getKycAccountsData", + signature: + "function getKycAccountsData(uint8 _kycStatus, uint256 _pageIndex, uint256 _pageLength) view returns (address[] accounts_, tuple(uint256 validFrom, uint256 validTo, string vcId, address issuer, uint8 status)[] kycData_)", + selector: "0x00497afb", + }, + { + name: "getKycFor", + signature: + "function getKycFor(address _account) view returns (tuple(uint256 validFrom, uint256 validTo, string vcId, address issuer, uint8 status) kyc_)", + selector: "0x41322840", + }, + { + name: "getKycStatusFor", + signature: "function getKycStatusFor(address _account) view returns (uint8 kycStatus_)", + selector: "0xe788a736", + }, + { + name: "grantKyc", + signature: + "function grantKyc(address _account, string _vcId, uint256 _validFrom, uint256 _validTo, address _issuer) returns (bool success_)", + selector: "0x81bea54d", + }, + { + name: "initializeInternalKyc", + signature: "function initializeInternalKyc(bool _internalKycActivated)", + selector: "0xdf353624", + }, + { + name: "isInternalKycActivated", + signature: "function isInternalKycActivated() view returns (bool)", + selector: "0x90b6c798", + }, + { + name: "revokeKyc", + signature: "function revokeKyc(address _account) returns (bool success_)", + selector: "0x12283191", + }, + ], + events: [ + { + name: "InternalKycStatusUpdated", + signature: "InternalKycStatusUpdated(address,bool)", + topic0: "0xa9f463ccc72d9e8aa9a317345756d652481f06b5ddf8aa4057f38086024a168c", + }, + { + name: "KycGranted", + signature: "KycGranted(address,address)", + topic0: "0x0cc42ba172587888529a0b89cc75bd6914b337cf10757fd80e3246330e55ad94", + }, + { + name: "KycRevoked", + signature: "KycRevoked(address,address)", + topic0: "0x5d9279616441228548cfb67f31b7b9b131fd30de1b3c54a6dd0062a74ce638a6", + }, + ], + errors: [ + { name: "ExpirationNotReached", signature: "ExpirationNotReached()", selector: "0x92899bcd" }, + { name: "InterestRateIsFixed", signature: "InterestRateIsFixed()", selector: "0x849d4eb8" }, + { name: "InvalidDates", signature: "InvalidDates()", selector: "0xd937486c" }, + { name: "InvalidKycStatus", signature: "InvalidKycStatus()", selector: "0xfc855b1b" }, + { name: "InvalidZeroAddress", signature: "InvalidZeroAddress()", selector: "0xf6b2911f" }, + { name: "KycIsNotGranted", signature: "KycIsNotGranted()", selector: "0xd5209e15" }, + ], + factory: (signer, useTimeTravel = false) => + useTimeTravel ? new KycFixedRateFacetTimeTravel__factory(signer) : new KycFixedRateFacet__factory(signer), + }, + + KycKpiLinkedRateFacet: { + name: "KycKpiLinkedRateFacet", + resolverKey: { + name: "_KYC_KPI_LINKED_RATE_RESOLVER_KEY", + value: "0x9cf03144d37b7b92d5b438e1f037a64ebdc48c2891bc4b475a15a1cf833574d0", + }, + inheritance: ["KycFacetBase", "CommonKpiLinkedInterestRate"], + methods: [ + { + name: "activateInternalKyc", + signature: "function activateInternalKyc() returns (bool success_)", + selector: "0xfbb08f50", + }, + { + name: "deactivateInternalKyc", + signature: "function deactivateInternalKyc() returns (bool success_)", + selector: "0x4a5df31d", + }, + { + name: "getKycAccountsCount", + signature: "function getKycAccountsCount(uint8 _kycStatus) view returns (uint256 kycAccountsCount_)", + selector: "0x5b712c4b", + }, + { + name: "getKycAccountsData", + signature: + "function getKycAccountsData(uint8 _kycStatus, uint256 _pageIndex, uint256 _pageLength) view returns (address[] accounts_, tuple(uint256 validFrom, uint256 validTo, string vcId, address issuer, uint8 status)[] kycData_)", + selector: "0x00497afb", + }, + { + name: "getKycFor", + signature: + "function getKycFor(address _account) view returns (tuple(uint256 validFrom, uint256 validTo, string vcId, address issuer, uint8 status) kyc_)", + selector: "0x41322840", + }, + { + name: "getKycStatusFor", + signature: "function getKycStatusFor(address _account) view returns (uint8 kycStatus_)", + selector: "0xe788a736", + }, + { + name: "grantKyc", + signature: + "function grantKyc(address _account, string _vcId, uint256 _validFrom, uint256 _validTo, address _issuer) returns (bool success_)", + selector: "0x81bea54d", + }, + { + name: "initializeInternalKyc", + signature: "function initializeInternalKyc(bool _internalKycActivated)", + selector: "0xdf353624", + }, + { + name: "isInternalKycActivated", + signature: "function isInternalKycActivated() view returns (bool)", + selector: "0x90b6c798", + }, + { + name: "revokeKyc", + signature: "function revokeKyc(address _account) returns (bool success_)", + selector: "0x12283191", + }, + ], + events: [ + { + name: "InternalKycStatusUpdated", + signature: "InternalKycStatusUpdated(address,bool)", + topic0: "0xa9f463ccc72d9e8aa9a317345756d652481f06b5ddf8aa4057f38086024a168c", + }, + { + name: "KycGranted", + signature: "KycGranted(address,address)", + topic0: "0x0cc42ba172587888529a0b89cc75bd6914b337cf10757fd80e3246330e55ad94", + }, + { + name: "KycRevoked", + signature: "KycRevoked(address,address)", + topic0: "0x5d9279616441228548cfb67f31b7b9b131fd30de1b3c54a6dd0062a74ce638a6", + }, + ], + errors: [ + { name: "ExpirationNotReached", signature: "ExpirationNotReached()", selector: "0x92899bcd" }, + { name: "InterestRateIsKpiLinked", signature: "InterestRateIsKpiLinked()", selector: "0x68eba14f" }, + { name: "InvalidDates", signature: "InvalidDates()", selector: "0xd937486c" }, + { name: "InvalidKycStatus", signature: "InvalidKycStatus()", selector: "0xfc855b1b" }, + { name: "InvalidZeroAddress", signature: "InvalidZeroAddress()", selector: "0xf6b2911f" }, + { name: "KycIsNotGranted", signature: "KycIsNotGranted()", selector: "0xd5209e15" }, + ], + factory: (signer, useTimeTravel = false) => + useTimeTravel ? new KycKpiLinkedRateFacetTimeTravel__factory(signer) : new KycKpiLinkedRateFacet__factory(signer), + }, + + KycSustainabilityPerformanceTargetRateFacet: { + name: "KycSustainabilityPerformanceTargetRateFacet", + resolverKey: { + name: "_KYC_SUSTAINABILITY_PERFORMANCE_TARGET_RATE_RESOLVER_KEY", + value: "0x1cb818916342973b46841d2ca9543c702bf6380fb0fc179f356139aa142379c3", + }, + inheritance: ["KycFacetBase", "CommonSustainabilityPerformanceTargetInterestRate"], + methods: [ + { + name: "activateInternalKyc", + signature: "function activateInternalKyc() returns (bool success_)", + selector: "0xfbb08f50", + }, + { + name: "deactivateInternalKyc", + signature: "function deactivateInternalKyc() returns (bool success_)", + selector: "0x4a5df31d", + }, + { + name: "getKycAccountsCount", + signature: "function getKycAccountsCount(uint8 _kycStatus) view returns (uint256 kycAccountsCount_)", + selector: "0x5b712c4b", + }, + { + name: "getKycAccountsData", + signature: + "function getKycAccountsData(uint8 _kycStatus, uint256 _pageIndex, uint256 _pageLength) view returns (address[] accounts_, tuple(uint256 validFrom, uint256 validTo, string vcId, address issuer, uint8 status)[] kycData_)", + selector: "0x00497afb", + }, + { + name: "getKycFor", + signature: + "function getKycFor(address _account) view returns (tuple(uint256 validFrom, uint256 validTo, string vcId, address issuer, uint8 status) kyc_)", + selector: "0x41322840", + }, + { + name: "getKycStatusFor", + signature: "function getKycStatusFor(address _account) view returns (uint8 kycStatus_)", + selector: "0xe788a736", + }, + { + name: "grantKyc", + signature: + "function grantKyc(address _account, string _vcId, uint256 _validFrom, uint256 _validTo, address _issuer) returns (bool success_)", + selector: "0x81bea54d", + }, + { + name: "initializeInternalKyc", + signature: "function initializeInternalKyc(bool _internalKycActivated)", + selector: "0xdf353624", + }, + { + name: "isInternalKycActivated", + signature: "function isInternalKycActivated() view returns (bool)", + selector: "0x90b6c798", + }, + { + name: "revokeKyc", + signature: "function revokeKyc(address _account) returns (bool success_)", + selector: "0x12283191", + }, + ], + events: [ + { + name: "InternalKycStatusUpdated", + signature: "InternalKycStatusUpdated(address,bool)", + topic0: "0xa9f463ccc72d9e8aa9a317345756d652481f06b5ddf8aa4057f38086024a168c", + }, + { + name: "KycGranted", + signature: "KycGranted(address,address)", + topic0: "0x0cc42ba172587888529a0b89cc75bd6914b337cf10757fd80e3246330e55ad94", + }, + { + name: "KycRevoked", + signature: "KycRevoked(address,address)", + topic0: "0x5d9279616441228548cfb67f31b7b9b131fd30de1b3c54a6dd0062a74ce638a6", + }, + ], + errors: [ + { name: "ExpirationNotReached", signature: "ExpirationNotReached()", selector: "0x92899bcd" }, + { + name: "InterestRateIsSustainabilityPerformanceTarget", + signature: "InterestRateIsSustainabilityPerformanceTarget()", + selector: "0x15a15b0a", + }, + { name: "InvalidDates", signature: "InvalidDates()", selector: "0xd937486c" }, + { name: "InvalidKycStatus", signature: "InvalidKycStatus()", selector: "0xfc855b1b" }, + { name: "InvalidZeroAddress", signature: "InvalidZeroAddress()", selector: "0xf6b2911f" }, + { name: "KycIsNotGranted", signature: "KycIsNotGranted()", selector: "0xd5209e15" }, + ], + factory: (signer, useTimeTravel = false) => + useTimeTravel + ? new KycSustainabilityPerformanceTargetRateFacetTimeTravel__factory(signer) + : new KycSustainabilityPerformanceTargetRateFacet__factory(signer), + }, + + LockFacet: { + name: "LockFacet", + resolverKey: { + name: "_LOCK_RESOLVER_KEY", + value: "0xf1364345b3db5ebe5808f2d2d2aaecb9cdb4fddacad1534033060ebc886fc1e9", + }, + inheritance: ["LockFacetBase", "Common"], + methods: [ + { + name: "getLockCountFor", + signature: "function getLockCountFor(address _tokenHolder) view returns (uint256 lockCount_)", + selector: "0x4f131ba4", + }, + { + name: "getLockCountForByPartition", + signature: + "function getLockCountForByPartition(bytes32 _partition, address _tokenHolder) view returns (uint256 lockCount_)", + selector: "0x3b193d92", + }, + { + name: "getLockFor", + signature: + "function getLockFor(address _tokenHolder, uint256 _lockId) view returns (uint256 amount_, uint256 expirationTimestamp_)", + selector: "0x6f14b024", + }, + { + name: "getLockForByPartition", + signature: + "function getLockForByPartition(bytes32 _partition, address _tokenHolder, uint256 _lockId) view returns (uint256 amount_, uint256 expirationTimestamp_)", + selector: "0xa9acfccb", + }, + { + name: "getLockedAmountFor", + signature: "function getLockedAmountFor(address _tokenHolder) view returns (uint256 amount_)", + selector: "0x36e74467", + }, + { + name: "getLockedAmountForByPartition", + signature: + "function getLockedAmountForByPartition(bytes32 _partition, address _tokenHolder) view returns (uint256 amount_)", + selector: "0x6e1c55ba", + }, + { + name: "getLocksIdFor", + signature: + "function getLocksIdFor(address _tokenHolder, uint256 _pageIndex, uint256 _pageLength) view returns (uint256[] locksId_)", + selector: "0xd2d2b9fc", + }, + { + name: "getLocksIdForByPartition", + signature: + "function getLocksIdForByPartition(bytes32 _partition, address _tokenHolder, uint256 _pageIndex, uint256 _pageLength) view returns (uint256[] locksId_)", + selector: "0x3ea8b59d", + }, + { + name: "lock", + signature: + "function lock(uint256 _amount, address _tokenHolder, uint256 _expirationTimestamp) returns (bool success_, uint256 lockId_)", + selector: "0xcf27cfc4", + }, + { + name: "lockByPartition", + signature: + "function lockByPartition(bytes32 _partition, uint256 _amount, address _tokenHolder, uint256 _expirationTimestamp) returns (bool success_, uint256 lockId_)", + selector: "0x7a87884e", + }, + { + name: "release", + signature: "function release(uint256 _lockId, address _tokenHolder) returns (bool success_)", + selector: "0x8124fea6", + }, + { + name: "releaseByPartition", + signature: + "function releaseByPartition(bytes32 _partition, uint256 _lockId, address _tokenHolder) returns (bool success_)", + selector: "0xdc6a3e75", + }, + ], + events: [ + { + name: "LockByPartitionReleased", + signature: "LockByPartitionReleased(address,address,bytes32,uint256)", + topic0: "0x6b9cdd97822563ef24ac6b58b361df36a653662e434bb96e40fa50ae5c9de688", + }, + { + name: "LockedByPartition", + signature: "LockedByPartition(address,address,bytes32,uint256,uint256,uint256)", + topic0: "0x1f36cfc418f72043825aa85b5d279c03191ab83364af0ec5f170d67f1a7ba152", + }, + ], + errors: [{ name: "ExpirationNotReached", signature: "ExpirationNotReached()", selector: "0x92899bcd" }], + factory: (signer, useTimeTravel = false) => + useTimeTravel ? new LockFacetTimeTravel__factory(signer) : new LockFacet__factory(signer), + }, + + LockFixedRateFacet: { + name: "LockFixedRateFacet", + resolverKey: { + name: "_LOCK_FIXED_RATE_RESOLVER_KEY", + value: "0x053d181bbb93fc7807aafeac901706f74ec5767053695d2b769bf0fdcf065e4d", + }, + inheritance: ["LockFacetBase", "CommonFixedInterestRate"], + methods: [ + { + name: "getLockCountFor", + signature: "function getLockCountFor(address _tokenHolder) view returns (uint256 lockCount_)", + selector: "0x4f131ba4", + }, + { + name: "getLockCountForByPartition", + signature: + "function getLockCountForByPartition(bytes32 _partition, address _tokenHolder) view returns (uint256 lockCount_)", + selector: "0x3b193d92", + }, + { + name: "getLockFor", + signature: + "function getLockFor(address _tokenHolder, uint256 _lockId) view returns (uint256 amount_, uint256 expirationTimestamp_)", + selector: "0x6f14b024", + }, + { + name: "getLockForByPartition", + signature: + "function getLockForByPartition(bytes32 _partition, address _tokenHolder, uint256 _lockId) view returns (uint256 amount_, uint256 expirationTimestamp_)", + selector: "0xa9acfccb", + }, + { + name: "getLockedAmountFor", + signature: "function getLockedAmountFor(address _tokenHolder) view returns (uint256 amount_)", + selector: "0x36e74467", + }, + { + name: "getLockedAmountForByPartition", + signature: + "function getLockedAmountForByPartition(bytes32 _partition, address _tokenHolder) view returns (uint256 amount_)", + selector: "0x6e1c55ba", + }, + { + name: "getLocksIdFor", + signature: + "function getLocksIdFor(address _tokenHolder, uint256 _pageIndex, uint256 _pageLength) view returns (uint256[] locksId_)", + selector: "0xd2d2b9fc", + }, + { + name: "getLocksIdForByPartition", + signature: + "function getLocksIdForByPartition(bytes32 _partition, address _tokenHolder, uint256 _pageIndex, uint256 _pageLength) view returns (uint256[] locksId_)", + selector: "0x3ea8b59d", + }, + { + name: "lock", + signature: + "function lock(uint256 _amount, address _tokenHolder, uint256 _expirationTimestamp) returns (bool success_, uint256 lockId_)", + selector: "0xcf27cfc4", + }, + { + name: "lockByPartition", + signature: + "function lockByPartition(bytes32 _partition, uint256 _amount, address _tokenHolder, uint256 _expirationTimestamp) returns (bool success_, uint256 lockId_)", + selector: "0x7a87884e", + }, + { + name: "release", + signature: "function release(uint256 _lockId, address _tokenHolder) returns (bool success_)", + selector: "0x8124fea6", + }, + { + name: "releaseByPartition", + signature: + "function releaseByPartition(bytes32 _partition, uint256 _lockId, address _tokenHolder) returns (bool success_)", + selector: "0xdc6a3e75", + }, + ], + events: [ + { + name: "LockByPartitionReleased", + signature: "LockByPartitionReleased(address,address,bytes32,uint256)", + topic0: "0x6b9cdd97822563ef24ac6b58b361df36a653662e434bb96e40fa50ae5c9de688", + }, + { + name: "LockedByPartition", + signature: "LockedByPartition(address,address,bytes32,uint256,uint256,uint256)", + topic0: "0x1f36cfc418f72043825aa85b5d279c03191ab83364af0ec5f170d67f1a7ba152", + }, + ], + errors: [ + { name: "ExpirationNotReached", signature: "ExpirationNotReached()", selector: "0x92899bcd" }, + { name: "InterestRateIsFixed", signature: "InterestRateIsFixed()", selector: "0x849d4eb8" }, + ], + factory: (signer, useTimeTravel = false) => + useTimeTravel ? new LockFixedRateFacetTimeTravel__factory(signer) : new LockFixedRateFacet__factory(signer), + }, + + LockKpiLinkedRateFacet: { + name: "LockKpiLinkedRateFacet", + resolverKey: { + name: "_LOCK_KPI_LINKED_RATE_RESOLVER_KEY", + value: "0x04caf3f62f31b8b1edd96c39948d89098fd83c1a1b5b76aa39927cf7ad8e9d42", + }, + inheritance: ["LockFacetBase", "CommonKpiLinkedInterestRate"], + methods: [ + { + name: "getLockCountFor", + signature: "function getLockCountFor(address _tokenHolder) view returns (uint256 lockCount_)", + selector: "0x4f131ba4", + }, + { + name: "getLockCountForByPartition", + signature: + "function getLockCountForByPartition(bytes32 _partition, address _tokenHolder) view returns (uint256 lockCount_)", + selector: "0x3b193d92", + }, + { + name: "getLockFor", + signature: + "function getLockFor(address _tokenHolder, uint256 _lockId) view returns (uint256 amount_, uint256 expirationTimestamp_)", + selector: "0x6f14b024", + }, + { + name: "getLockForByPartition", + signature: + "function getLockForByPartition(bytes32 _partition, address _tokenHolder, uint256 _lockId) view returns (uint256 amount_, uint256 expirationTimestamp_)", + selector: "0xa9acfccb", + }, + { + name: "getLockedAmountFor", + signature: "function getLockedAmountFor(address _tokenHolder) view returns (uint256 amount_)", + selector: "0x36e74467", + }, + { + name: "getLockedAmountForByPartition", + signature: + "function getLockedAmountForByPartition(bytes32 _partition, address _tokenHolder) view returns (uint256 amount_)", + selector: "0x6e1c55ba", + }, + { + name: "getLocksIdFor", + signature: + "function getLocksIdFor(address _tokenHolder, uint256 _pageIndex, uint256 _pageLength) view returns (uint256[] locksId_)", + selector: "0xd2d2b9fc", + }, + { + name: "getLocksIdForByPartition", + signature: + "function getLocksIdForByPartition(bytes32 _partition, address _tokenHolder, uint256 _pageIndex, uint256 _pageLength) view returns (uint256[] locksId_)", + selector: "0x3ea8b59d", + }, + { + name: "lock", + signature: + "function lock(uint256 _amount, address _tokenHolder, uint256 _expirationTimestamp) returns (bool success_, uint256 lockId_)", + selector: "0xcf27cfc4", + }, + { + name: "lockByPartition", + signature: + "function lockByPartition(bytes32 _partition, uint256 _amount, address _tokenHolder, uint256 _expirationTimestamp) returns (bool success_, uint256 lockId_)", + selector: "0x7a87884e", + }, + { + name: "release", + signature: "function release(uint256 _lockId, address _tokenHolder) returns (bool success_)", + selector: "0x8124fea6", + }, + { + name: "releaseByPartition", + signature: + "function releaseByPartition(bytes32 _partition, uint256 _lockId, address _tokenHolder) returns (bool success_)", + selector: "0xdc6a3e75", + }, + ], + events: [ + { + name: "LockByPartitionReleased", + signature: "LockByPartitionReleased(address,address,bytes32,uint256)", + topic0: "0x6b9cdd97822563ef24ac6b58b361df36a653662e434bb96e40fa50ae5c9de688", + }, + { + name: "LockedByPartition", + signature: "LockedByPartition(address,address,bytes32,uint256,uint256,uint256)", + topic0: "0x1f36cfc418f72043825aa85b5d279c03191ab83364af0ec5f170d67f1a7ba152", + }, + ], + errors: [ + { name: "ExpirationNotReached", signature: "ExpirationNotReached()", selector: "0x92899bcd" }, + { name: "InterestRateIsKpiLinked", signature: "InterestRateIsKpiLinked()", selector: "0x68eba14f" }, + ], + factory: (signer, useTimeTravel = false) => + useTimeTravel + ? new LockKpiLinkedRateFacetTimeTravel__factory(signer) + : new LockKpiLinkedRateFacet__factory(signer), + }, + + LockSustainabilityPerformanceTargetRateFacet: { + name: "LockSustainabilityPerformanceTargetRateFacet", + resolverKey: { + name: "_LOCK_SUSTAINABILITY_PERFORMANCE_TARGET_RATE_RESOLVER_KEY", + value: "0xe73c2eecf92b5b8eb7ecc89b379f70193694f2906188318c3407458267385b82", + }, + inheritance: ["LockFacetBase", "CommonSustainabilityPerformanceTargetInterestRate"], + methods: [ + { + name: "getLockCountFor", + signature: "function getLockCountFor(address _tokenHolder) view returns (uint256 lockCount_)", + selector: "0x4f131ba4", + }, + { + name: "getLockCountForByPartition", + signature: + "function getLockCountForByPartition(bytes32 _partition, address _tokenHolder) view returns (uint256 lockCount_)", + selector: "0x3b193d92", + }, + { + name: "getLockFor", + signature: + "function getLockFor(address _tokenHolder, uint256 _lockId) view returns (uint256 amount_, uint256 expirationTimestamp_)", + selector: "0x6f14b024", + }, + { + name: "getLockForByPartition", + signature: + "function getLockForByPartition(bytes32 _partition, address _tokenHolder, uint256 _lockId) view returns (uint256 amount_, uint256 expirationTimestamp_)", + selector: "0xa9acfccb", + }, + { + name: "getLockedAmountFor", + signature: "function getLockedAmountFor(address _tokenHolder) view returns (uint256 amount_)", + selector: "0x36e74467", + }, + { + name: "getLockedAmountForByPartition", + signature: + "function getLockedAmountForByPartition(bytes32 _partition, address _tokenHolder) view returns (uint256 amount_)", + selector: "0x6e1c55ba", + }, + { + name: "getLocksIdFor", + signature: + "function getLocksIdFor(address _tokenHolder, uint256 _pageIndex, uint256 _pageLength) view returns (uint256[] locksId_)", + selector: "0xd2d2b9fc", + }, + { + name: "getLocksIdForByPartition", + signature: + "function getLocksIdForByPartition(bytes32 _partition, address _tokenHolder, uint256 _pageIndex, uint256 _pageLength) view returns (uint256[] locksId_)", + selector: "0x3ea8b59d", + }, + { + name: "lock", + signature: + "function lock(uint256 _amount, address _tokenHolder, uint256 _expirationTimestamp) returns (bool success_, uint256 lockId_)", + selector: "0xcf27cfc4", + }, + { + name: "lockByPartition", + signature: + "function lockByPartition(bytes32 _partition, uint256 _amount, address _tokenHolder, uint256 _expirationTimestamp) returns (bool success_, uint256 lockId_)", + selector: "0x7a87884e", + }, + { + name: "release", + signature: "function release(uint256 _lockId, address _tokenHolder) returns (bool success_)", + selector: "0x8124fea6", + }, + { + name: "releaseByPartition", + signature: + "function releaseByPartition(bytes32 _partition, uint256 _lockId, address _tokenHolder) returns (bool success_)", + selector: "0xdc6a3e75", + }, + ], + events: [ + { + name: "LockByPartitionReleased", + signature: "LockByPartitionReleased(address,address,bytes32,uint256)", + topic0: "0x6b9cdd97822563ef24ac6b58b361df36a653662e434bb96e40fa50ae5c9de688", + }, + { + name: "LockedByPartition", + signature: "LockedByPartition(address,address,bytes32,uint256,uint256,uint256)", + topic0: "0x1f36cfc418f72043825aa85b5d279c03191ab83364af0ec5f170d67f1a7ba152", + }, + ], + errors: [ + { name: "ExpirationNotReached", signature: "ExpirationNotReached()", selector: "0x92899bcd" }, + { + name: "InterestRateIsSustainabilityPerformanceTarget", + signature: "InterestRateIsSustainabilityPerformanceTarget()", + selector: "0x15a15b0a", + }, + ], + factory: (signer, useTimeTravel = false) => + useTimeTravel + ? new LockSustainabilityPerformanceTargetRateFacetTimeTravel__factory(signer) + : new LockSustainabilityPerformanceTargetRateFacet__factory(signer), + }, + + NoncesFacet: { + name: "NoncesFacet", + resolverKey: { + name: "_NONCES_RESOLVER_KEY", + value: "0xb235fd4aa74228c048d55d58514cd3393ef934423864ef7ddca6d302041c2bd1", + }, + inheritance: ["NoncesFacetBase", "Common"], + methods: [ + { name: "nonces", signature: "function nonces(address owner) view returns (uint256)", selector: "0x7ecebe00" }, + ], + errors: [{ name: "ExpirationNotReached", signature: "ExpirationNotReached()", selector: "0x92899bcd" }], + factory: (signer, useTimeTravel = false) => + useTimeTravel ? new NoncesFacetTimeTravel__factory(signer) : new NoncesFacet__factory(signer), + }, + + NoncesFixedRateFacet: { + name: "NoncesFixedRateFacet", + resolverKey: { + name: "_NONCES_FIXED_RATE_RESOLVER_KEY", + value: "0xb13c3f8e56b31e6f487b3586c2eafb6f13c33bf6b0063a62f31fb386b0dab046", + }, + inheritance: ["NoncesFacetBase", "CommonFixedInterestRate"], + methods: [ + { name: "nonces", signature: "function nonces(address owner) view returns (uint256)", selector: "0x7ecebe00" }, + ], + errors: [ + { name: "ExpirationNotReached", signature: "ExpirationNotReached()", selector: "0x92899bcd" }, + { name: "InterestRateIsFixed", signature: "InterestRateIsFixed()", selector: "0x849d4eb8" }, + ], + factory: (signer, useTimeTravel = false) => + useTimeTravel ? new NoncesFixedRateFacetTimeTravel__factory(signer) : new NoncesFixedRateFacet__factory(signer), + }, + + NoncesKpiLinkedRateFacet: { + name: "NoncesKpiLinkedRateFacet", + resolverKey: { + name: "_NONCES_KPI_LINKED_RATE_RESOLVER_KEY", + value: "0xc267b98bd9bdee7ecfccb0929874a128cc0814cf4bd67274423368452b324dc6", + }, + inheritance: ["NoncesFacetBase", "CommonKpiLinkedInterestRate"], + methods: [ + { name: "nonces", signature: "function nonces(address owner) view returns (uint256)", selector: "0x7ecebe00" }, + ], + errors: [ + { name: "ExpirationNotReached", signature: "ExpirationNotReached()", selector: "0x92899bcd" }, + { name: "InterestRateIsKpiLinked", signature: "InterestRateIsKpiLinked()", selector: "0x68eba14f" }, + ], + factory: (signer, useTimeTravel = false) => + useTimeTravel + ? new NoncesKpiLinkedRateFacetTimeTravel__factory(signer) + : new NoncesKpiLinkedRateFacet__factory(signer), + }, + + NoncesSustainabilityPerformanceTargetRateFacet: { + name: "NoncesSustainabilityPerformanceTargetRateFacet", + resolverKey: { + name: "_NONCES_SUSTAINABILITY_PERFORMANCE_TARGET_RATE_RESOLVER_KEY", + value: "0x631217f1fdd4036273035308e6637d8cdef1927db4eef0af68e5aac13a70892e", + }, + inheritance: ["NoncesFacetBase", "CommonSustainabilityPerformanceTargetInterestRate"], + methods: [ + { name: "nonces", signature: "function nonces(address owner) view returns (uint256)", selector: "0x7ecebe00" }, + ], + errors: [ + { name: "ExpirationNotReached", signature: "ExpirationNotReached()", selector: "0x92899bcd" }, + { + name: "InterestRateIsSustainabilityPerformanceTarget", + signature: "InterestRateIsSustainabilityPerformanceTarget()", + selector: "0x15a15b0a", + }, + ], + factory: (signer, useTimeTravel = false) => + useTimeTravel + ? new NoncesSustainabilityPerformanceTargetRateFacetTimeTravel__factory(signer) + : new NoncesSustainabilityPerformanceTargetRateFacet__factory(signer), + }, + + PauseFacet: { + name: "PauseFacet", + resolverKey: { + name: "_PAUSE_RESOLVER_KEY", + value: "0x9429fd9ef38f89f41bd9ec33fd5c94b287ed1c27a98938da43835ac761b2f92c", + }, + inheritance: ["PauseFacetBase", "Common"], + methods: [ + { name: "isPaused", signature: "function isPaused() view returns (bool)", selector: "0xb187bd26" }, + { name: "pause", signature: "function pause() returns (bool success_)", selector: "0x8456cb59" }, + { name: "unpause", signature: "function unpause() returns (bool success_)", selector: "0x3f4ba83a" }, + ], + errors: [{ name: "ExpirationNotReached", signature: "ExpirationNotReached()", selector: "0x92899bcd" }], + factory: (signer, useTimeTravel = false) => + useTimeTravel ? new PauseFacetTimeTravel__factory(signer) : new PauseFacet__factory(signer), + }, + + PauseFixedRateFacet: { + name: "PauseFixedRateFacet", + resolverKey: { + name: "_PAUSE_FIXED_RATE_RESOLVER_KEY", + value: "0x9fd7fc8200742d120881c0cf0a0541bae13e372519d986a5169b23b82ea06f12", + }, + inheritance: ["PauseFacetBase", "CommonFixedInterestRate"], + methods: [ + { name: "isPaused", signature: "function isPaused() view returns (bool)", selector: "0xb187bd26" }, + { name: "pause", signature: "function pause() returns (bool success_)", selector: "0x8456cb59" }, + { name: "unpause", signature: "function unpause() returns (bool success_)", selector: "0x3f4ba83a" }, + ], + errors: [ + { name: "ExpirationNotReached", signature: "ExpirationNotReached()", selector: "0x92899bcd" }, + { name: "InterestRateIsFixed", signature: "InterestRateIsFixed()", selector: "0x849d4eb8" }, + ], + factory: (signer, useTimeTravel = false) => + useTimeTravel ? new PauseFixedRateFacetTimeTravel__factory(signer) : new PauseFixedRateFacet__factory(signer), + }, + + PauseKpiLinkedRateFacet: { + name: "PauseKpiLinkedRateFacet", + resolverKey: { + name: "_PAUSE_KPI_LINKED_RATE_RESOLVER_KEY", + value: "0x77ff7dc4f2d4a0cb28f09307895b94478d6655e7a545222f97b753a6c90a8f71", + }, + inheritance: ["PauseFacetBase", "CommonKpiLinkedInterestRate"], + methods: [ + { name: "isPaused", signature: "function isPaused() view returns (bool)", selector: "0xb187bd26" }, + { name: "pause", signature: "function pause() returns (bool success_)", selector: "0x8456cb59" }, + { name: "unpause", signature: "function unpause() returns (bool success_)", selector: "0x3f4ba83a" }, + ], + errors: [ + { name: "ExpirationNotReached", signature: "ExpirationNotReached()", selector: "0x92899bcd" }, + { name: "InterestRateIsKpiLinked", signature: "InterestRateIsKpiLinked()", selector: "0x68eba14f" }, + ], + factory: (signer, useTimeTravel = false) => + useTimeTravel + ? new PauseKpiLinkedRateFacetTimeTravel__factory(signer) + : new PauseKpiLinkedRateFacet__factory(signer), + }, + + PauseSustainabilityPerformanceTargetRateFacet: { + name: "PauseSustainabilityPerformanceTargetRateFacet", + resolverKey: { + name: "_PAUSE_SUSTAINABILITY_PERFORMANCE_TARGET_RATE_RESOLVER_KEY", + value: "0xa16c7f2d6b5ab7f05dd30bd562ac9f3005fe21e3b2bde131733e37c0d42046ee", + }, + inheritance: ["PauseFacetBase", "CommonSustainabilityPerformanceTargetInterestRate"], + methods: [ + { name: "isPaused", signature: "function isPaused() view returns (bool)", selector: "0xb187bd26" }, + { name: "pause", signature: "function pause() returns (bool success_)", selector: "0x8456cb59" }, + { name: "unpause", signature: "function unpause() returns (bool success_)", selector: "0x3f4ba83a" }, + ], + errors: [ + { name: "ExpirationNotReached", signature: "ExpirationNotReached()", selector: "0x92899bcd" }, + { + name: "InterestRateIsSustainabilityPerformanceTarget", + signature: "InterestRateIsSustainabilityPerformanceTarget()", + selector: "0x15a15b0a", + }, + ], + factory: (signer, useTimeTravel = false) => + useTimeTravel + ? new PauseSustainabilityPerformanceTargetRateFacetTimeTravel__factory(signer) + : new PauseSustainabilityPerformanceTargetRateFacet__factory(signer), + }, + + ProceedRecipientsFacet: { + name: "ProceedRecipientsFacet", + resolverKey: { + name: "_PROCEED_RECIPIENTS_RESOLVER_KEY", + value: "0x87f4b676bf89cd24a01a78fd8e7fb2102c2f6d034be73d16402f7297e0ae625b", + }, + inheritance: ["ProceedRecipientsFacetBase", "Common"], + methods: [ + { + name: "addProceedRecipient", + signature: "function addProceedRecipient(address _proceedRecipient, bytes _data)", + selector: "0x298f6222", + }, + { + name: "getProceedRecipientData", + signature: "function getProceedRecipientData(address _proceedRecipient) view returns (bytes)", + selector: "0x94c39122", + }, + { + name: "getProceedRecipients", + signature: + "function getProceedRecipients(uint256 _pageIndex, uint256 _pageLength) view returns (address[] proceedRecipients_)", + selector: "0x0a4f7d71", + }, + { + name: "getProceedRecipientsCount", + signature: "function getProceedRecipientsCount() view returns (uint256)", + selector: "0x03db0e0d", + }, + { + name: "initialize_ProceedRecipients", + signature: "function initialize_ProceedRecipients(address[] _proceedRecipients, bytes[] _data)", + selector: "0x9005379e", + }, + { + name: "isProceedRecipient", + signature: "function isProceedRecipient(address _proceedRecipient) view returns (bool)", + selector: "0xb9b6def1", + }, + { + name: "removeProceedRecipient", + signature: "function removeProceedRecipient(address _proceedRecipient)", + selector: "0x1f9810c8", + }, + { + name: "updateProceedRecipientData", + signature: "function updateProceedRecipientData(address _proceedRecipient, bytes _data)", + selector: "0x654141cf", + }, + ], + events: [ + { + name: "ProceedRecipientAdded", + signature: "ProceedRecipientAdded(address,address,bytes)", + topic0: "0x95ea4c59332446575a504e49eab7549792d2378816950a0b6efb509e4df77b95", + }, + { + name: "ProceedRecipientDataUpdated", + signature: "ProceedRecipientDataUpdated(address,address,bytes)", + topic0: "0xd3ca7f6e7e6927a35494a3d41bf1b250b7388cb459b84f19db41a7069a70f109", + }, + { + name: "ProceedRecipientRemoved", + signature: "ProceedRecipientRemoved(address,address)", + topic0: "0x63204e4d4571f38dab60d621fa9e61d1a9430f6fe93627d35474eba0f7ca86e6", + }, + ], + errors: [ + { name: "ExpirationNotReached", signature: "ExpirationNotReached()", selector: "0x92899bcd" }, + { + name: "ProceedRecipientAlreadyExists", + signature: "ProceedRecipientAlreadyExists(address)", + selector: "0xb7fd3b5b", + }, + { name: "ProceedRecipientNotFound", signature: "ProceedRecipientNotFound(address)", selector: "0x664dc89c" }, + ], + factory: (signer, useTimeTravel = false) => + useTimeTravel + ? new ProceedRecipientsFacetTimeTravel__factory(signer) + : new ProceedRecipientsFacet__factory(signer), + }, + + ProceedRecipientsFixedRateFacet: { + name: "ProceedRecipientsFixedRateFacet", + resolverKey: { + name: "_PROCEED_RECIPIENTS_FIXED_RATE_RESOLVER_KEY", + value: "0xd1f2e9d8c7b6a5e4f3d2c1b9a8e7f6d5c4b3a2e1f9d8c7b6a5e4f3d2c1b9a8e7", + }, + inheritance: ["ProceedRecipientsFacetBase", "CommonFixedInterestRate"], + methods: [ + { + name: "addProceedRecipient", + signature: "function addProceedRecipient(address _proceedRecipient, bytes _data)", + selector: "0x298f6222", + }, + { + name: "getProceedRecipientData", + signature: "function getProceedRecipientData(address _proceedRecipient) view returns (bytes)", + selector: "0x94c39122", + }, + { + name: "getProceedRecipients", + signature: + "function getProceedRecipients(uint256 _pageIndex, uint256 _pageLength) view returns (address[] proceedRecipients_)", + selector: "0x0a4f7d71", + }, + { + name: "getProceedRecipientsCount", + signature: "function getProceedRecipientsCount() view returns (uint256)", + selector: "0x03db0e0d", + }, + { + name: "initialize_ProceedRecipients", + signature: "function initialize_ProceedRecipients(address[] _proceedRecipients, bytes[] _data)", + selector: "0x9005379e", + }, + { + name: "isProceedRecipient", + signature: "function isProceedRecipient(address _proceedRecipient) view returns (bool)", + selector: "0xb9b6def1", + }, + { + name: "removeProceedRecipient", + signature: "function removeProceedRecipient(address _proceedRecipient)", + selector: "0x1f9810c8", + }, + { + name: "updateProceedRecipientData", + signature: "function updateProceedRecipientData(address _proceedRecipient, bytes _data)", + selector: "0x654141cf", + }, + ], + events: [ + { + name: "ProceedRecipientAdded", + signature: "ProceedRecipientAdded(address,address,bytes)", + topic0: "0x95ea4c59332446575a504e49eab7549792d2378816950a0b6efb509e4df77b95", + }, + { + name: "ProceedRecipientDataUpdated", + signature: "ProceedRecipientDataUpdated(address,address,bytes)", + topic0: "0xd3ca7f6e7e6927a35494a3d41bf1b250b7388cb459b84f19db41a7069a70f109", + }, + { + name: "ProceedRecipientRemoved", + signature: "ProceedRecipientRemoved(address,address)", + topic0: "0x63204e4d4571f38dab60d621fa9e61d1a9430f6fe93627d35474eba0f7ca86e6", + }, + ], + errors: [ + { name: "ExpirationNotReached", signature: "ExpirationNotReached()", selector: "0x92899bcd" }, + { name: "InterestRateIsFixed", signature: "InterestRateIsFixed()", selector: "0x849d4eb8" }, + { + name: "ProceedRecipientAlreadyExists", + signature: "ProceedRecipientAlreadyExists(address)", + selector: "0xb7fd3b5b", + }, + { name: "ProceedRecipientNotFound", signature: "ProceedRecipientNotFound(address)", selector: "0x664dc89c" }, + ], + factory: (signer, useTimeTravel = false) => + useTimeTravel + ? new ProceedRecipientsFixedRateFacetTimeTravel__factory(signer) + : new ProceedRecipientsFixedRateFacet__factory(signer), + }, + + ProceedRecipientsKpiLinkedRateFacet: { + name: "ProceedRecipientsKpiLinkedRateFacet", + resolverKey: { + name: "_PROCEED_RECIPIENTS_KPI_LINKED_RATE_RESOLVER_KEY", + value: "0xe2f3e1d9c8b7a6e5f4d3c2b1a9e8f7d6c5b4a3e2f1d9c8b7a6e5f4d3c2b1a9e8", + }, + inheritance: ["ProceedRecipientsFacetBase", "CommonKpiLinkedInterestRate"], + methods: [ + { + name: "addProceedRecipient", + signature: "function addProceedRecipient(address _proceedRecipient, bytes _data)", + selector: "0x298f6222", + }, + { + name: "getProceedRecipientData", + signature: "function getProceedRecipientData(address _proceedRecipient) view returns (bytes)", + selector: "0x94c39122", + }, + { + name: "getProceedRecipients", + signature: + "function getProceedRecipients(uint256 _pageIndex, uint256 _pageLength) view returns (address[] proceedRecipients_)", + selector: "0x0a4f7d71", + }, + { + name: "getProceedRecipientsCount", + signature: "function getProceedRecipientsCount() view returns (uint256)", + selector: "0x03db0e0d", + }, + { + name: "initialize_ProceedRecipients", + signature: "function initialize_ProceedRecipients(address[] _proceedRecipients, bytes[] _data)", + selector: "0x9005379e", + }, + { + name: "isProceedRecipient", + signature: "function isProceedRecipient(address _proceedRecipient) view returns (bool)", + selector: "0xb9b6def1", + }, + { + name: "removeProceedRecipient", + signature: "function removeProceedRecipient(address _proceedRecipient)", + selector: "0x1f9810c8", + }, + { + name: "updateProceedRecipientData", + signature: "function updateProceedRecipientData(address _proceedRecipient, bytes _data)", + selector: "0x654141cf", + }, + ], + events: [ + { + name: "ProceedRecipientAdded", + signature: "ProceedRecipientAdded(address,address,bytes)", + topic0: "0x95ea4c59332446575a504e49eab7549792d2378816950a0b6efb509e4df77b95", + }, + { + name: "ProceedRecipientDataUpdated", + signature: "ProceedRecipientDataUpdated(address,address,bytes)", + topic0: "0xd3ca7f6e7e6927a35494a3d41bf1b250b7388cb459b84f19db41a7069a70f109", + }, + { + name: "ProceedRecipientRemoved", + signature: "ProceedRecipientRemoved(address,address)", + topic0: "0x63204e4d4571f38dab60d621fa9e61d1a9430f6fe93627d35474eba0f7ca86e6", + }, + ], + errors: [ + { name: "ExpirationNotReached", signature: "ExpirationNotReached()", selector: "0x92899bcd" }, + { name: "InterestRateIsKpiLinked", signature: "InterestRateIsKpiLinked()", selector: "0x68eba14f" }, + { + name: "ProceedRecipientAlreadyExists", + signature: "ProceedRecipientAlreadyExists(address)", + selector: "0xb7fd3b5b", + }, + { name: "ProceedRecipientNotFound", signature: "ProceedRecipientNotFound(address)", selector: "0x664dc89c" }, + ], + factory: (signer, useTimeTravel = false) => + useTimeTravel + ? new ProceedRecipientsKpiLinkedRateFacetTimeTravel__factory(signer) + : new ProceedRecipientsKpiLinkedRateFacet__factory(signer), + }, + + ProceedRecipientsSustainabilityPerformanceTargetRateFacet: { + name: "ProceedRecipientsSustainabilityPerformanceTargetRateFacet", + resolverKey: { + name: "_PROCEED_RECIPIENTS_SUSTAINABILITY_PERFORMANCE_TARGET_RATE_RESOLVER_KEY", + value: "0xf3e4f2e1d9c8b7a6e5f4d3c2b1a9e8f7d6c5b4a3e2f1d9c8b7a6e5f4d3c2b1a9", + }, + inheritance: ["ProceedRecipientsFacetBase", "CommonSustainabilityPerformanceTargetInterestRate"], + methods: [ + { + name: "addProceedRecipient", + signature: "function addProceedRecipient(address _proceedRecipient, bytes _data)", + selector: "0x298f6222", + }, + { + name: "getProceedRecipientData", + signature: "function getProceedRecipientData(address _proceedRecipient) view returns (bytes)", + selector: "0x94c39122", + }, + { + name: "getProceedRecipients", + signature: + "function getProceedRecipients(uint256 _pageIndex, uint256 _pageLength) view returns (address[] proceedRecipients_)", + selector: "0x0a4f7d71", + }, + { + name: "getProceedRecipientsCount", + signature: "function getProceedRecipientsCount() view returns (uint256)", + selector: "0x03db0e0d", + }, + { + name: "initialize_ProceedRecipients", + signature: "function initialize_ProceedRecipients(address[] _proceedRecipients, bytes[] _data)", + selector: "0x9005379e", + }, + { + name: "isProceedRecipient", + signature: "function isProceedRecipient(address _proceedRecipient) view returns (bool)", + selector: "0xb9b6def1", + }, + { + name: "removeProceedRecipient", + signature: "function removeProceedRecipient(address _proceedRecipient)", + selector: "0x1f9810c8", + }, + { + name: "updateProceedRecipientData", + signature: "function updateProceedRecipientData(address _proceedRecipient, bytes _data)", + selector: "0x654141cf", + }, + ], + events: [ + { + name: "ProceedRecipientAdded", + signature: "ProceedRecipientAdded(address,address,bytes)", + topic0: "0x95ea4c59332446575a504e49eab7549792d2378816950a0b6efb509e4df77b95", + }, + { + name: "ProceedRecipientDataUpdated", + signature: "ProceedRecipientDataUpdated(address,address,bytes)", + topic0: "0xd3ca7f6e7e6927a35494a3d41bf1b250b7388cb459b84f19db41a7069a70f109", + }, + { + name: "ProceedRecipientRemoved", + signature: "ProceedRecipientRemoved(address,address)", + topic0: "0x63204e4d4571f38dab60d621fa9e61d1a9430f6fe93627d35474eba0f7ca86e6", + }, + ], + errors: [ + { name: "ExpirationNotReached", signature: "ExpirationNotReached()", selector: "0x92899bcd" }, + { + name: "InterestRateIsSustainabilityPerformanceTarget", + signature: "InterestRateIsSustainabilityPerformanceTarget()", + selector: "0x15a15b0a", + }, + { + name: "ProceedRecipientAlreadyExists", + signature: "ProceedRecipientAlreadyExists(address)", + selector: "0xb7fd3b5b", + }, + { name: "ProceedRecipientNotFound", signature: "ProceedRecipientNotFound(address)", selector: "0x664dc89c" }, + ], + factory: (signer, useTimeTravel = false) => + useTimeTravel + ? new ProceedRecipientsSustainabilityPerformanceTargetRateFacetTimeTravel__factory(signer) + : new ProceedRecipientsSustainabilityPerformanceTargetRateFacet__factory(signer), + }, + + ProtectedPartitionsFacet: { + name: "ProtectedPartitionsFacet", + resolverKey: { + name: "_PROTECTED_PARTITIONS_RESOLVER_KEY", + value: "0x6d65d2938c05a4d952aff0845c1baa5bea04d4544db74f8b3b26004d1d58d58f", + }, + inheritance: ["ProtectedPartitionsFacetBase", "Common"], + methods: [ + { + name: "arePartitionsProtected", + signature: "function arePartitionsProtected() view returns (bool)", + selector: "0xa151c19f", + }, + { + name: "calculateRoleForPartition", + signature: "function calculateRoleForPartition(bytes32 partition) pure returns (bytes32 role)", + selector: "0xcb4da6fc", + }, + { + name: "initialize_ProtectedPartitions", + signature: "function initialize_ProtectedPartitions(bool _protectPartitions) returns (bool success_)", + selector: "0x90c032cc", + }, + { + name: "protectPartitions", + signature: "function protectPartitions() returns (bool success_)", + selector: "0x6c5fde55", + }, + { + name: "unprotectPartitions", + signature: "function unprotectPartitions() returns (bool success_)", + selector: "0x1277b323", + }, + ], + errors: [{ name: "ExpirationNotReached", signature: "ExpirationNotReached()", selector: "0x92899bcd" }], + factory: (signer, useTimeTravel = false) => + useTimeTravel + ? new ProtectedPartitionsFacetTimeTravel__factory(signer) + : new ProtectedPartitionsFacet__factory(signer), + }, + + ProtectedPartitionsFixedRateFacet: { + name: "ProtectedPartitionsFixedRateFacet", + resolverKey: { + name: "_PROTECTED_PARTITIONS_FIXED_RATE_RESOLVER_KEY", + value: "0x1f8166e21922daee7192ddd5f8a1ce657013d69d412a4e4f5848ab75f1ca8db3", + }, + inheritance: ["ProtectedPartitionsFacetBase", "CommonFixedInterestRate"], + methods: [ + { + name: "arePartitionsProtected", + signature: "function arePartitionsProtected() view returns (bool)", + selector: "0xa151c19f", + }, + { + name: "calculateRoleForPartition", + signature: "function calculateRoleForPartition(bytes32 partition) pure returns (bytes32 role)", + selector: "0xcb4da6fc", + }, + { + name: "initialize_ProtectedPartitions", + signature: "function initialize_ProtectedPartitions(bool _protectPartitions) returns (bool success_)", + selector: "0x90c032cc", + }, + { + name: "protectPartitions", + signature: "function protectPartitions() returns (bool success_)", + selector: "0x6c5fde55", + }, + { + name: "unprotectPartitions", + signature: "function unprotectPartitions() returns (bool success_)", + selector: "0x1277b323", + }, + ], + errors: [ + { name: "ExpirationNotReached", signature: "ExpirationNotReached()", selector: "0x92899bcd" }, + { name: "InterestRateIsFixed", signature: "InterestRateIsFixed()", selector: "0x849d4eb8" }, + ], + factory: (signer, useTimeTravel = false) => + useTimeTravel + ? new ProtectedPartitionsFixedRateFacetTimeTravel__factory(signer) + : new ProtectedPartitionsFixedRateFacet__factory(signer), + }, + + ProtectedPartitionsKpiLinkedRateFacet: { + name: "ProtectedPartitionsKpiLinkedRateFacet", + resolverKey: { + name: "_PROTECTED_PARTITIONS_KPI_LINKED_RATE_RESOLVER_KEY", + value: "0x665aad7ee148905a0af716acbc6abd8f408eadce853caf3f84528a9810ffc436", + }, + inheritance: ["ProtectedPartitionsFacetBase", "CommonKpiLinkedInterestRate"], + methods: [ + { + name: "arePartitionsProtected", + signature: "function arePartitionsProtected() view returns (bool)", + selector: "0xa151c19f", + }, + { + name: "calculateRoleForPartition", + signature: "function calculateRoleForPartition(bytes32 partition) pure returns (bytes32 role)", + selector: "0xcb4da6fc", + }, + { + name: "initialize_ProtectedPartitions", + signature: "function initialize_ProtectedPartitions(bool _protectPartitions) returns (bool success_)", + selector: "0x90c032cc", + }, + { + name: "protectPartitions", + signature: "function protectPartitions() returns (bool success_)", + selector: "0x6c5fde55", + }, + { + name: "unprotectPartitions", + signature: "function unprotectPartitions() returns (bool success_)", + selector: "0x1277b323", + }, + ], + errors: [ + { name: "ExpirationNotReached", signature: "ExpirationNotReached()", selector: "0x92899bcd" }, + { name: "InterestRateIsKpiLinked", signature: "InterestRateIsKpiLinked()", selector: "0x68eba14f" }, + ], + factory: (signer, useTimeTravel = false) => + useTimeTravel + ? new ProtectedPartitionsKpiLinkedRateFacetTimeTravel__factory(signer) + : new ProtectedPartitionsKpiLinkedRateFacet__factory(signer), + }, + + ProtectedPartitionsSustainabilityPerformanceTargetRateFacet: { + name: "ProtectedPartitionsSustainabilityPerformanceTargetRateFacet", + resolverKey: { + name: "_PROTECTED_PARTITIONS_SUSTAINABILITY_PERFORMANCE_TARGET_RATE_RESOLVER_KEY", + value: "0x088ec2750f42a30fde9383e74f4148ce5df963263d426deffc1d29fff61a6538", + }, + inheritance: ["ProtectedPartitionsFacetBase", "CommonSustainabilityPerformanceTargetInterestRate"], + methods: [ + { + name: "arePartitionsProtected", + signature: "function arePartitionsProtected() view returns (bool)", + selector: "0xa151c19f", + }, + { + name: "calculateRoleForPartition", + signature: "function calculateRoleForPartition(bytes32 partition) pure returns (bytes32 role)", + selector: "0xcb4da6fc", + }, + { + name: "initialize_ProtectedPartitions", + signature: "function initialize_ProtectedPartitions(bool _protectPartitions) returns (bool success_)", + selector: "0x90c032cc", + }, + { + name: "protectPartitions", + signature: "function protectPartitions() returns (bool success_)", + selector: "0x6c5fde55", + }, + { + name: "unprotectPartitions", + signature: "function unprotectPartitions() returns (bool success_)", + selector: "0x1277b323", + }, + ], + errors: [ + { name: "ExpirationNotReached", signature: "ExpirationNotReached()", selector: "0x92899bcd" }, + { + name: "InterestRateIsSustainabilityPerformanceTarget", + signature: "InterestRateIsSustainabilityPerformanceTarget()", + selector: "0x15a15b0a", + }, + ], + factory: (signer, useTimeTravel = false) => + useTimeTravel + ? new ProtectedPartitionsSustainabilityPerformanceTargetRateFacetTimeTravel__factory(signer) + : new ProtectedPartitionsSustainabilityPerformanceTargetRateFacet__factory(signer), + }, + + ScheduledBalanceAdjustmentsFacet: { + name: "ScheduledBalanceAdjustmentsFacet", + resolverKey: { + name: "_SCHEDULED_BALANCE_ADJUSTMENTS_RESOLVER_KEY", + value: "0xc418e67a48260d700e5f85863ad6fa6593206a4385728f8baba1572d631535e0", + }, + inheritance: ["ScheduledBalanceAdjustmentsFacetBase", "Common"], + methods: [ + { + name: "getScheduledBalanceAdjustments", + signature: + "function getScheduledBalanceAdjustments(uint256 _pageIndex, uint256 _pageLength) view returns (tuple(uint256 scheduledTimestamp, bytes data)[] scheduledBalanceAdjustment_)", + selector: "0xcb884d41", + }, + { + name: "scheduledBalanceAdjustmentCount", + signature: "function scheduledBalanceAdjustmentCount() view returns (uint256)", + selector: "0x2de241e3", + }, + ], + errors: [{ name: "ExpirationNotReached", signature: "ExpirationNotReached()", selector: "0x92899bcd" }], + factory: (signer, useTimeTravel = false) => + useTimeTravel + ? new ScheduledBalanceAdjustmentsFacetTimeTravel__factory(signer) + : new ScheduledBalanceAdjustmentsFacet__factory(signer), + }, + + ScheduledBalanceAdjustmentsFixedRateFacet: { + name: "ScheduledBalanceAdjustmentsFixedRateFacet", + resolverKey: { + name: "_SCHEDULED_BALANCE_ADJUSTMENTS_FIXED_RATE_RESOLVER_KEY", + value: "0xb3336a1ececdcd807fd6e81cc57e9392c75bf3fd303a2f5df0b11c0dda87ce7f", + }, + inheritance: ["ScheduledBalanceAdjustmentsFacetBase", "CommonFixedInterestRate"], + methods: [ + { + name: "getScheduledBalanceAdjustments", + signature: + "function getScheduledBalanceAdjustments(uint256 _pageIndex, uint256 _pageLength) view returns (tuple(uint256 scheduledTimestamp, bytes data)[] scheduledBalanceAdjustment_)", + selector: "0xcb884d41", + }, + { + name: "scheduledBalanceAdjustmentCount", + signature: "function scheduledBalanceAdjustmentCount() view returns (uint256)", + selector: "0x2de241e3", + }, + ], + errors: [ + { name: "ExpirationNotReached", signature: "ExpirationNotReached()", selector: "0x92899bcd" }, + { name: "InterestRateIsFixed", signature: "InterestRateIsFixed()", selector: "0x849d4eb8" }, + ], + factory: (signer, useTimeTravel = false) => + useTimeTravel + ? new ScheduledBalanceAdjustmentsFixedRateFacetTimeTravel__factory(signer) + : new ScheduledBalanceAdjustmentsFixedRateFacet__factory(signer), + }, + + ScheduledBalanceAdjustmentsKpiLinkedRateFacet: { + name: "ScheduledBalanceAdjustmentsKpiLinkedRateFacet", + resolverKey: { + name: "_SCHEDULED_BALANCE_ADJUSTMENTS_KPI_LINKED_RATE_RESOLVER_KEY", + value: "0x3da33aed4e04baa1b9c39bd96d0bc7be51ecaa1468eff7f632c29fb134644cb4", + }, + inheritance: ["ScheduledBalanceAdjustmentsFacetBase", "CommonKpiLinkedInterestRate"], + methods: [ + { + name: "getScheduledBalanceAdjustments", + signature: + "function getScheduledBalanceAdjustments(uint256 _pageIndex, uint256 _pageLength) view returns (tuple(uint256 scheduledTimestamp, bytes data)[] scheduledBalanceAdjustment_)", + selector: "0xcb884d41", + }, + { + name: "scheduledBalanceAdjustmentCount", + signature: "function scheduledBalanceAdjustmentCount() view returns (uint256)", + selector: "0x2de241e3", + }, + ], + errors: [ + { name: "ExpirationNotReached", signature: "ExpirationNotReached()", selector: "0x92899bcd" }, + { name: "InterestRateIsKpiLinked", signature: "InterestRateIsKpiLinked()", selector: "0x68eba14f" }, + ], + factory: (signer, useTimeTravel = false) => + useTimeTravel + ? new ScheduledBalanceAdjustmentsKpiLinkedRateFacetTimeTravel__factory(signer) + : new ScheduledBalanceAdjustmentsKpiLinkedRateFacet__factory(signer), + }, + + ScheduledBalanceAdjustmentsSustainabilityPerformanceTargetRateFacet: { + name: "ScheduledBalanceAdjustmentsSustainabilityPerformanceTargetRateFacet", + resolverKey: { + name: "_SCHEDULED_BALANCE_ADJUSTMENTS_SUSTAINABILITY_PERFORMANCE_TARGET_RATE_RESOLVER_KEY", + value: "0x1168df5bb8a348d137af6e29915c261dc82c495f72484a046ac4f750899625f4", + }, + inheritance: ["ScheduledBalanceAdjustmentsFacetBase", "CommonSustainabilityPerformanceTargetInterestRate"], + methods: [ + { + name: "getScheduledBalanceAdjustments", + signature: + "function getScheduledBalanceAdjustments(uint256 _pageIndex, uint256 _pageLength) view returns (tuple(uint256 scheduledTimestamp, bytes data)[] scheduledBalanceAdjustment_)", + selector: "0xcb884d41", + }, + { + name: "scheduledBalanceAdjustmentCount", + signature: "function scheduledBalanceAdjustmentCount() view returns (uint256)", + selector: "0x2de241e3", + }, + ], + errors: [ + { name: "ExpirationNotReached", signature: "ExpirationNotReached()", selector: "0x92899bcd" }, + { + name: "InterestRateIsSustainabilityPerformanceTarget", + signature: "InterestRateIsSustainabilityPerformanceTarget()", + selector: "0x15a15b0a", + }, + ], + factory: (signer, useTimeTravel = false) => + useTimeTravel + ? new ScheduledBalanceAdjustmentsSustainabilityPerformanceTargetRateFacetTimeTravel__factory(signer) + : new ScheduledBalanceAdjustmentsSustainabilityPerformanceTargetRateFacet__factory(signer), + }, + + ScheduledCouponListingFacet: { + name: "ScheduledCouponListingFacet", + resolverKey: { + name: "_SCHEDULED_COUPON_LISTING_RESOLVER_KEY", + value: "0x6cc7645ae5bcd122875ce8bd150bd28dda6374546c4c2421e5ae4fdeedb3ab30", + }, + inheritance: ["ScheduledCouponListingFacetBase", "Common"], + methods: [ + { + name: "getScheduledCouponListing", + signature: + "function getScheduledCouponListing(uint256 _pageIndex, uint256 _pageLength) view returns (tuple(uint256 scheduledTimestamp, bytes data)[] scheduledCouponListing_)", + selector: "0x2fcfe49c", + }, + { + name: "scheduledCouponListingCount", + signature: "function scheduledCouponListingCount() view returns (uint256)", + selector: "0x80a84271", + }, + ], + errors: [{ name: "ExpirationNotReached", signature: "ExpirationNotReached()", selector: "0x92899bcd" }], + factory: (signer, useTimeTravel = false) => + useTimeTravel + ? new ScheduledCouponListingFacetTimeTravel__factory(signer) + : new ScheduledCouponListingFacet__factory(signer), + }, + + ScheduledCouponListingFixedRateFacet: { + name: "ScheduledCouponListingFixedRateFacet", + resolverKey: { + name: "_SCHEDULED_COUPON_LISTING_FIXED_RATE_RESOLVER_KEY", + value: "0x9c249eccb68ce7eae5f58a9b4fbe1f3b6a6f2a644b36c3f1b3559077b4f4e266", + }, + inheritance: ["ScheduledCouponListingFacetBase", "CommonFixedInterestRate"], + methods: [ + { + name: "getScheduledCouponListing", + signature: + "function getScheduledCouponListing(uint256 _pageIndex, uint256 _pageLength) view returns (tuple(uint256 scheduledTimestamp, bytes data)[] scheduledCouponListing_)", + selector: "0x2fcfe49c", + }, + { + name: "scheduledCouponListingCount", + signature: "function scheduledCouponListingCount() view returns (uint256)", + selector: "0x80a84271", + }, + ], + errors: [ + { name: "ExpirationNotReached", signature: "ExpirationNotReached()", selector: "0x92899bcd" }, + { name: "InterestRateIsFixed", signature: "InterestRateIsFixed()", selector: "0x849d4eb8" }, + ], + factory: (signer, useTimeTravel = false) => + useTimeTravel + ? new ScheduledCouponListingFixedRateFacetTimeTravel__factory(signer) + : new ScheduledCouponListingFixedRateFacet__factory(signer), + }, + + ScheduledCouponListingKpiLinkedRateFacet: { + name: "ScheduledCouponListingKpiLinkedRateFacet", + resolverKey: { + name: "_SCHEDULED_COUPON_LISTING_KPI_LINKED_RATE_RESOLVER_KEY", + value: "0x9f42d2f2ae6efad6d2acf0399ec9e5a1bed9e41c68a86b58f1de78da4fe3c598", + }, + inheritance: ["ScheduledCouponListingFacetBase", "CommonKpiLinkedInterestRate"], + methods: [ + { + name: "getScheduledCouponListing", + signature: + "function getScheduledCouponListing(uint256 _pageIndex, uint256 _pageLength) view returns (tuple(uint256 scheduledTimestamp, bytes data)[] scheduledCouponListing_)", + selector: "0x2fcfe49c", + }, + { + name: "scheduledCouponListingCount", + signature: "function scheduledCouponListingCount() view returns (uint256)", + selector: "0x80a84271", + }, + ], + errors: [ + { name: "ExpirationNotReached", signature: "ExpirationNotReached()", selector: "0x92899bcd" }, + { name: "InterestRateIsKpiLinked", signature: "InterestRateIsKpiLinked()", selector: "0x68eba14f" }, + ], + factory: (signer, useTimeTravel = false) => + useTimeTravel + ? new ScheduledCouponListingKpiLinkedRateFacetTimeTravel__factory(signer) + : new ScheduledCouponListingKpiLinkedRateFacet__factory(signer), + }, + + ScheduledCouponListingSustainabilityPerformanceTargetRateFacet: { + name: "ScheduledCouponListingSustainabilityPerformanceTargetRateFacet", + resolverKey: { + name: "_SCHEDULED_COUPON_LISTING_SUSTAINABILITY_PERFORMANCE_TARGET_RATE_RESOLVER_KEY", + value: "0x85c0dee450a5a4657a9de39ca4ba19881b079d55d5bb64641d52f59bea709ba8", + }, + inheritance: ["ScheduledCouponListingFacetBase", "CommonSustainabilityPerformanceTargetInterestRate"], + methods: [ + { + name: "getScheduledCouponListing", + signature: + "function getScheduledCouponListing(uint256 _pageIndex, uint256 _pageLength) view returns (tuple(uint256 scheduledTimestamp, bytes data)[] scheduledCouponListing_)", + selector: "0x2fcfe49c", + }, + { + name: "scheduledCouponListingCount", + signature: "function scheduledCouponListingCount() view returns (uint256)", + selector: "0x80a84271", + }, + ], + errors: [ + { name: "ExpirationNotReached", signature: "ExpirationNotReached()", selector: "0x92899bcd" }, + { + name: "InterestRateIsSustainabilityPerformanceTarget", + signature: "InterestRateIsSustainabilityPerformanceTarget()", + selector: "0x15a15b0a", + }, + ], + factory: (signer, useTimeTravel = false) => + useTimeTravel + ? new ScheduledCouponListingSustainabilityPerformanceTargetRateFacetTimeTravel__factory(signer) + : new ScheduledCouponListingSustainabilityPerformanceTargetRateFacet__factory(signer), + }, + + ScheduledCrossOrderedTasksFacet: { + name: "ScheduledCrossOrderedTasksFacet", + resolverKey: { + name: "_SCHEDULED_TASKS_RESOLVER_KEY", + value: "0xa4934195ab83f1497ce5fc99b68d0f41694716bcfba5f232aa6c8e0d4d504f08", + }, + inheritance: ["ScheduledCrossOrderedTasksFacetBase", "Common"], + methods: [ + { + name: "getScheduledCrossOrderedTasks", + signature: + "function getScheduledCrossOrderedTasks(uint256 _pageIndex, uint256 _pageLength) view returns (tuple(uint256 scheduledTimestamp, bytes data)[] scheduledCrossOrderedTask_)", + selector: "0x72ed9041", + }, + { + name: "scheduledCrossOrderedTaskCount", + signature: "function scheduledCrossOrderedTaskCount() view returns (uint256)", + selector: "0x46883133", + }, + { + name: "triggerPendingScheduledCrossOrderedTasks", + signature: "function triggerPendingScheduledCrossOrderedTasks() returns (uint256)", + selector: "0x32194dbb", + }, + { + name: "triggerScheduledCrossOrderedTasks", + signature: "function triggerScheduledCrossOrderedTasks(uint256 _max) returns (uint256)", + selector: "0x5be4a143", + }, + ], + errors: [{ name: "ExpirationNotReached", signature: "ExpirationNotReached()", selector: "0x92899bcd" }], + factory: (signer, useTimeTravel = false) => + useTimeTravel + ? new ScheduledCrossOrderedTasksFacetTimeTravel__factory(signer) + : new ScheduledCrossOrderedTasksFacet__factory(signer), + }, + + ScheduledCrossOrderedTasksFixedRateFacet: { + name: "ScheduledCrossOrderedTasksFixedRateFacet", + resolverKey: { + name: "_SCHEDULED_CROSS_ORDERED_TASKS_FIXED_RATE_RESOLVER_KEY", + value: "0x1312a5fa6cd5c7128015b199c47eacbf1636ef5cf437c0ee84c619dfbd372ca0", + }, + inheritance: ["ScheduledCrossOrderedTasksFacetBase", "CommonFixedInterestRate"], + methods: [ + { + name: "getScheduledCrossOrderedTasks", + signature: + "function getScheduledCrossOrderedTasks(uint256 _pageIndex, uint256 _pageLength) view returns (tuple(uint256 scheduledTimestamp, bytes data)[] scheduledCrossOrderedTask_)", + selector: "0x72ed9041", + }, + { + name: "scheduledCrossOrderedTaskCount", + signature: "function scheduledCrossOrderedTaskCount() view returns (uint256)", + selector: "0x46883133", + }, + { + name: "triggerPendingScheduledCrossOrderedTasks", + signature: "function triggerPendingScheduledCrossOrderedTasks() returns (uint256)", + selector: "0x32194dbb", + }, + { + name: "triggerScheduledCrossOrderedTasks", + signature: "function triggerScheduledCrossOrderedTasks(uint256 _max) returns (uint256)", + selector: "0x5be4a143", + }, + ], + errors: [ + { name: "ExpirationNotReached", signature: "ExpirationNotReached()", selector: "0x92899bcd" }, + { name: "InterestRateIsFixed", signature: "InterestRateIsFixed()", selector: "0x849d4eb8" }, + ], + factory: (signer, useTimeTravel = false) => + useTimeTravel + ? new ScheduledCrossOrderedTasksFixedRateFacetTimeTravel__factory(signer) + : new ScheduledCrossOrderedTasksFixedRateFacet__factory(signer), + }, + + ScheduledCrossOrderedTasksKpiLinkedRateFacet: { + name: "ScheduledCrossOrderedTasksKpiLinkedRateFacet", + resolverKey: { + name: "_SCHEDULED_CROSS_ORDERED_TASKS_KPI_LINKED_RATE_RESOLVER_KEY", + value: "0x04d20e52e58dbadedfcf6c373a826fc5f7c665fd6caf67c8a65a9e777a8b70ec", + }, + inheritance: ["ScheduledCrossOrderedTasksFacetBase", "CommonKpiLinkedInterestRate"], + methods: [ + { + name: "getScheduledCrossOrderedTasks", + signature: + "function getScheduledCrossOrderedTasks(uint256 _pageIndex, uint256 _pageLength) view returns (tuple(uint256 scheduledTimestamp, bytes data)[] scheduledCrossOrderedTask_)", + selector: "0x72ed9041", + }, + { + name: "scheduledCrossOrderedTaskCount", + signature: "function scheduledCrossOrderedTaskCount() view returns (uint256)", + selector: "0x46883133", + }, + { + name: "triggerPendingScheduledCrossOrderedTasks", + signature: "function triggerPendingScheduledCrossOrderedTasks() returns (uint256)", + selector: "0x32194dbb", + }, + { + name: "triggerScheduledCrossOrderedTasks", + signature: "function triggerScheduledCrossOrderedTasks(uint256 _max) returns (uint256)", + selector: "0x5be4a143", + }, + ], + errors: [ + { name: "ExpirationNotReached", signature: "ExpirationNotReached()", selector: "0x92899bcd" }, + { name: "InterestRateIsKpiLinked", signature: "InterestRateIsKpiLinked()", selector: "0x68eba14f" }, + ], + factory: (signer, useTimeTravel = false) => + useTimeTravel + ? new ScheduledCrossOrderedTasksKpiLinkedRateFacetTimeTravel__factory(signer) + : new ScheduledCrossOrderedTasksKpiLinkedRateFacet__factory(signer), + }, + + ScheduledCrossOrderedTasksSustainabilityPerformanceTargetRateFacet: { + name: "ScheduledCrossOrderedTasksSustainabilityPerformanceTargetRateFacet", + resolverKey: { + name: "_SCHEDULED_CROSS_ORDERED_TASKS_SUSTAINABILITY_PERFORMANCE_TARGET_RATE_RESOLVER_KEY", + value: "0x23d3302e505d889e80b20005bf316ccd7cbbd3c547a7305d600e8f0d9bc73267", + }, + inheritance: ["ScheduledCrossOrderedTasksFacetBase", "CommonSustainabilityPerformanceTargetInterestRate"], + methods: [ + { + name: "getScheduledCrossOrderedTasks", + signature: + "function getScheduledCrossOrderedTasks(uint256 _pageIndex, uint256 _pageLength) view returns (tuple(uint256 scheduledTimestamp, bytes data)[] scheduledCrossOrderedTask_)", + selector: "0x72ed9041", + }, + { + name: "scheduledCrossOrderedTaskCount", + signature: "function scheduledCrossOrderedTaskCount() view returns (uint256)", + selector: "0x46883133", + }, + { + name: "triggerPendingScheduledCrossOrderedTasks", + signature: "function triggerPendingScheduledCrossOrderedTasks() returns (uint256)", + selector: "0x32194dbb", + }, + { + name: "triggerScheduledCrossOrderedTasks", + signature: "function triggerScheduledCrossOrderedTasks(uint256 _max) returns (uint256)", + selector: "0x5be4a143", + }, + ], + errors: [ + { name: "ExpirationNotReached", signature: "ExpirationNotReached()", selector: "0x92899bcd" }, + { + name: "InterestRateIsSustainabilityPerformanceTarget", + signature: "InterestRateIsSustainabilityPerformanceTarget()", + selector: "0x15a15b0a", + }, + ], + factory: (signer, useTimeTravel = false) => + useTimeTravel + ? new ScheduledCrossOrderedTasksSustainabilityPerformanceTargetRateFacetTimeTravel__factory(signer) + : new ScheduledCrossOrderedTasksSustainabilityPerformanceTargetRateFacet__factory(signer), + }, + + ScheduledSnapshotsFacet: { + name: "ScheduledSnapshotsFacet", + resolverKey: { + name: "_SCHEDULED_SNAPSHOTS_RESOLVER_KEY", + value: "0x100f681e33d02a1124c2c05a537a1229eca89767c5e6e8720066ca74bfb85793", + }, + inheritance: ["ScheduledSnapshotsFacetBase", "Common"], + methods: [ + { + name: "getScheduledSnapshots", + signature: + "function getScheduledSnapshots(uint256 _pageIndex, uint256 _pageLength) view returns (tuple(uint256 scheduledTimestamp, bytes data)[] scheduledSnapshot_)", + selector: "0xca21c53a", + }, + { + name: "scheduledSnapshotCount", + signature: "function scheduledSnapshotCount() view returns (uint256)", + selector: "0xa19e91fe", + }, + ], + errors: [{ name: "ExpirationNotReached", signature: "ExpirationNotReached()", selector: "0x92899bcd" }], + factory: (signer, useTimeTravel = false) => + useTimeTravel + ? new ScheduledSnapshotsFacetTimeTravel__factory(signer) + : new ScheduledSnapshotsFacet__factory(signer), + }, + + ScheduledSnapshotsFixedRateFacet: { + name: "ScheduledSnapshotsFixedRateFacet", + resolverKey: { + name: "_SCHEDULED_SNAPSHOTS_FIXED_RATE_RESOLVER_KEY", + value: "0xe3f0d8c05423e6bf8dc42fb776a1ce265739fc66f9b501077b207a0c2a56cab6", + }, + inheritance: ["ScheduledSnapshotsFacetBase", "CommonFixedInterestRate"], + methods: [ + { + name: "getScheduledSnapshots", + signature: + "function getScheduledSnapshots(uint256 _pageIndex, uint256 _pageLength) view returns (tuple(uint256 scheduledTimestamp, bytes data)[] scheduledSnapshot_)", + selector: "0xca21c53a", + }, + { + name: "scheduledSnapshotCount", + signature: "function scheduledSnapshotCount() view returns (uint256)", + selector: "0xa19e91fe", + }, + ], + errors: [ + { name: "ExpirationNotReached", signature: "ExpirationNotReached()", selector: "0x92899bcd" }, + { name: "InterestRateIsFixed", signature: "InterestRateIsFixed()", selector: "0x849d4eb8" }, + ], + factory: (signer, useTimeTravel = false) => + useTimeTravel + ? new ScheduledSnapshotsFixedRateFacetTimeTravel__factory(signer) + : new ScheduledSnapshotsFixedRateFacet__factory(signer), + }, + + ScheduledSnapshotsKpiLinkedRateFacet: { + name: "ScheduledSnapshotsKpiLinkedRateFacet", + resolverKey: { + name: "_SCHEDULED_SNAPSHOTS_KPI_LINKED_RATE_RESOLVER_KEY", + value: "0xbfb6dd5a6beac6604a320b8363bc0da4093ba327dd037970ad82d422b0d88526", + }, + inheritance: ["ScheduledSnapshotsFacetBase", "CommonKpiLinkedInterestRate"], + methods: [ + { + name: "getScheduledSnapshots", + signature: + "function getScheduledSnapshots(uint256 _pageIndex, uint256 _pageLength) view returns (tuple(uint256 scheduledTimestamp, bytes data)[] scheduledSnapshot_)", + selector: "0xca21c53a", + }, + { + name: "scheduledSnapshotCount", + signature: "function scheduledSnapshotCount() view returns (uint256)", + selector: "0xa19e91fe", + }, + ], + errors: [ + { name: "ExpirationNotReached", signature: "ExpirationNotReached()", selector: "0x92899bcd" }, + { name: "InterestRateIsKpiLinked", signature: "InterestRateIsKpiLinked()", selector: "0x68eba14f" }, + ], + factory: (signer, useTimeTravel = false) => + useTimeTravel + ? new ScheduledSnapshotsKpiLinkedRateFacetTimeTravel__factory(signer) + : new ScheduledSnapshotsKpiLinkedRateFacet__factory(signer), + }, + + ScheduledSnapshotsSustainabilityPerformanceTargetRateFacet: { + name: "ScheduledSnapshotsSustainabilityPerformanceTargetRateFacet", + resolverKey: { + name: "_SCHEDULED_SNAPSHOTS_SUSTAINABILITY_PERFORMANCE_TARGET_RATE_RESOLVER_KEY", + value: "0x99a85df534e32a3b9fce8e80f0cc30d6703e578eb5c641ab2d9e95530d046b4b", + }, + inheritance: ["ScheduledSnapshotsFacetBase", "CommonSustainabilityPerformanceTargetInterestRate"], + methods: [ + { + name: "getScheduledSnapshots", + signature: + "function getScheduledSnapshots(uint256 _pageIndex, uint256 _pageLength) view returns (tuple(uint256 scheduledTimestamp, bytes data)[] scheduledSnapshot_)", + selector: "0xca21c53a", + }, + { + name: "scheduledSnapshotCount", + signature: "function scheduledSnapshotCount() view returns (uint256)", + selector: "0xa19e91fe", + }, + ], + errors: [ + { name: "ExpirationNotReached", signature: "ExpirationNotReached()", selector: "0x92899bcd" }, + { + name: "InterestRateIsSustainabilityPerformanceTarget", + signature: "InterestRateIsSustainabilityPerformanceTarget()", + selector: "0x15a15b0a", + }, + ], + factory: (signer, useTimeTravel = false) => + useTimeTravel + ? new ScheduledSnapshotsSustainabilityPerformanceTargetRateFacetTimeTravel__factory(signer) + : new ScheduledSnapshotsSustainabilityPerformanceTargetRateFacet__factory(signer), + }, + + SnapshotsFacet: { + name: "SnapshotsFacet", + resolverKey: { + name: "_SNAPSHOTS_RESOLVER_KEY", + value: "0x9a3fc46d83536ef6b87eb4fec37302bfd1a7c18e81ea2da853b911b44cf5b0cf", + }, + inheritance: ["SnapshotsFacetBase", "Common"], + methods: [ + { + name: "balanceOfAtSnapshot", + signature: + "function balanceOfAtSnapshot(uint256 _snapshotID, address _tokenHolder) view returns (uint256 balance_)", + selector: "0x8e00ae2e", + }, + { + name: "balanceOfAtSnapshotByPartition", + signature: + "function balanceOfAtSnapshotByPartition(bytes32 _partition, uint256 _snapshotID, address _tokenHolder) view returns (uint256 balance_)", + selector: "0xe002bcdf", + }, + { + name: "clearedBalanceOfAtSnapshot", + signature: + "function clearedBalanceOfAtSnapshot(uint256 _snapshotID, address _tokenHolder) view returns (uint256 balance_)", + selector: "0x2bc16e9b", + }, + { + name: "clearedBalanceOfAtSnapshotByPartition", + signature: + "function clearedBalanceOfAtSnapshotByPartition(bytes32 _partition, uint256 _snapshotID, address _tokenHolder) view returns (uint256 balance_)", + selector: "0x386e1405", + }, + { + name: "decimalsAtSnapshot", + signature: "function decimalsAtSnapshot(uint256 _snapshotID) view returns (uint8 decimals_)", + selector: "0x69ed346f", + }, + { + name: "frozenBalanceOfAtSnapshot", + signature: + "function frozenBalanceOfAtSnapshot(uint256 _snapshotID, address _tokenHolder) view returns (uint256 balance_)", + selector: "0x5e6c70ec", + }, + { + name: "frozenBalanceOfAtSnapshotByPartition", + signature: + "function frozenBalanceOfAtSnapshotByPartition(bytes32 _partition, uint256 _snapshotID, address _tokenHolder) view returns (uint256 balance_)", + selector: "0x0749c323", + }, + { + name: "getTokenHoldersAtSnapshot", + signature: + "function getTokenHoldersAtSnapshot(uint256 _snapshotID, uint256 _pageIndex, uint256 _pageLength) view returns (address[] holders_)", + selector: "0xd22a73df", + }, + { + name: "getTotalTokenHoldersAtSnapshot", + signature: "function getTotalTokenHoldersAtSnapshot(uint256 _snapshotID) view returns (uint256)", + selector: "0x867126e1", + }, + { + name: "heldBalanceOfAtSnapshot", + signature: + "function heldBalanceOfAtSnapshot(uint256 _snapshotID, address _tokenHolder) view returns (uint256 balance_)", + selector: "0xb52e39aa", + }, + { + name: "heldBalanceOfAtSnapshotByPartition", + signature: + "function heldBalanceOfAtSnapshotByPartition(bytes32 _partition, uint256 _snapshotID, address _tokenHolder) view returns (uint256 balance_)", + selector: "0x977a3a71", + }, + { + name: "lockedBalanceOfAtSnapshot", + signature: + "function lockedBalanceOfAtSnapshot(uint256 _snapshotID, address _tokenHolder) view returns (uint256 balance_)", + selector: "0xd9e6f164", + }, + { + name: "lockedBalanceOfAtSnapshotByPartition", + signature: + "function lockedBalanceOfAtSnapshotByPartition(bytes32 _partition, uint256 _snapshotID, address _tokenHolder) view returns (uint256 balance_)", + selector: "0x4a13f5d0", + }, + { + name: "partitionsOfAtSnapshot", + signature: + "function partitionsOfAtSnapshot(uint256 _snapshotID, address _tokenHolder) view returns (bytes32[])", + selector: "0x09e84301", + }, + { + name: "takeSnapshot", + signature: "function takeSnapshot() returns (uint256 snapshotID_)", + selector: "0xb3d3d37e", + }, + { + name: "totalSupplyAtSnapshot", + signature: "function totalSupplyAtSnapshot(uint256 _snapshotID) view returns (uint256 totalSupply_)", + selector: "0xda35f8f6", + }, + { + name: "totalSupplyAtSnapshotByPartition", + signature: + "function totalSupplyAtSnapshotByPartition(bytes32 _partition, uint256 _snapshotID) view returns (uint256 totalSupply_)", + selector: "0x9657ddb9", + }, + ], + errors: [{ name: "ExpirationNotReached", signature: "ExpirationNotReached()", selector: "0x92899bcd" }], + factory: (signer, useTimeTravel = false) => + useTimeTravel ? new SnapshotsFacetTimeTravel__factory(signer) : new SnapshotsFacet__factory(signer), + }, + + SnapshotsFixedRateFacet: { + name: "SnapshotsFixedRateFacet", + resolverKey: { + name: "_SNAPSHOTS_FIXED_RATE_RESOLVER_KEY", + value: "0xf9b2659fdf4231d426bc34cef93a8b3f42e5cfaf762f65dbf6537ab3e5ee8348", + }, + inheritance: ["SnapshotsFacetBase", "CommonFixedInterestRate"], + methods: [ + { + name: "balanceOfAtSnapshot", + signature: + "function balanceOfAtSnapshot(uint256 _snapshotID, address _tokenHolder) view returns (uint256 balance_)", + selector: "0x8e00ae2e", + }, + { + name: "balanceOfAtSnapshotByPartition", + signature: + "function balanceOfAtSnapshotByPartition(bytes32 _partition, uint256 _snapshotID, address _tokenHolder) view returns (uint256 balance_)", + selector: "0xe002bcdf", + }, + { + name: "clearedBalanceOfAtSnapshot", + signature: + "function clearedBalanceOfAtSnapshot(uint256 _snapshotID, address _tokenHolder) view returns (uint256 balance_)", + selector: "0x2bc16e9b", + }, + { + name: "clearedBalanceOfAtSnapshotByPartition", + signature: + "function clearedBalanceOfAtSnapshotByPartition(bytes32 _partition, uint256 _snapshotID, address _tokenHolder) view returns (uint256 balance_)", + selector: "0x386e1405", + }, + { + name: "decimalsAtSnapshot", + signature: "function decimalsAtSnapshot(uint256 _snapshotID) view returns (uint8 decimals_)", + selector: "0x69ed346f", + }, + { + name: "frozenBalanceOfAtSnapshot", + signature: + "function frozenBalanceOfAtSnapshot(uint256 _snapshotID, address _tokenHolder) view returns (uint256 balance_)", + selector: "0x5e6c70ec", + }, + { + name: "frozenBalanceOfAtSnapshotByPartition", + signature: + "function frozenBalanceOfAtSnapshotByPartition(bytes32 _partition, uint256 _snapshotID, address _tokenHolder) view returns (uint256 balance_)", + selector: "0x0749c323", + }, + { + name: "getTokenHoldersAtSnapshot", + signature: + "function getTokenHoldersAtSnapshot(uint256 _snapshotID, uint256 _pageIndex, uint256 _pageLength) view returns (address[] holders_)", + selector: "0xd22a73df", + }, + { + name: "getTotalTokenHoldersAtSnapshot", + signature: "function getTotalTokenHoldersAtSnapshot(uint256 _snapshotID) view returns (uint256)", + selector: "0x867126e1", + }, + { + name: "heldBalanceOfAtSnapshot", + signature: + "function heldBalanceOfAtSnapshot(uint256 _snapshotID, address _tokenHolder) view returns (uint256 balance_)", + selector: "0xb52e39aa", + }, + { + name: "heldBalanceOfAtSnapshotByPartition", + signature: + "function heldBalanceOfAtSnapshotByPartition(bytes32 _partition, uint256 _snapshotID, address _tokenHolder) view returns (uint256 balance_)", + selector: "0x977a3a71", + }, + { + name: "lockedBalanceOfAtSnapshot", + signature: + "function lockedBalanceOfAtSnapshot(uint256 _snapshotID, address _tokenHolder) view returns (uint256 balance_)", + selector: "0xd9e6f164", + }, + { + name: "lockedBalanceOfAtSnapshotByPartition", + signature: + "function lockedBalanceOfAtSnapshotByPartition(bytes32 _partition, uint256 _snapshotID, address _tokenHolder) view returns (uint256 balance_)", + selector: "0x4a13f5d0", + }, + { + name: "partitionsOfAtSnapshot", + signature: + "function partitionsOfAtSnapshot(uint256 _snapshotID, address _tokenHolder) view returns (bytes32[])", + selector: "0x09e84301", + }, + { + name: "takeSnapshot", + signature: "function takeSnapshot() returns (uint256 snapshotID_)", + selector: "0xb3d3d37e", + }, + { + name: "totalSupplyAtSnapshot", + signature: "function totalSupplyAtSnapshot(uint256 _snapshotID) view returns (uint256 totalSupply_)", + selector: "0xda35f8f6", + }, + { + name: "totalSupplyAtSnapshotByPartition", + signature: + "function totalSupplyAtSnapshotByPartition(bytes32 _partition, uint256 _snapshotID) view returns (uint256 totalSupply_)", + selector: "0x9657ddb9", + }, + ], + errors: [ + { name: "ExpirationNotReached", signature: "ExpirationNotReached()", selector: "0x92899bcd" }, + { name: "InterestRateIsFixed", signature: "InterestRateIsFixed()", selector: "0x849d4eb8" }, + ], + factory: (signer, useTimeTravel = false) => + useTimeTravel + ? new SnapshotsFixedRateFacetTimeTravel__factory(signer) + : new SnapshotsFixedRateFacet__factory(signer), + }, + + SnapshotsKpiLinkedRateFacet: { + name: "SnapshotsKpiLinkedRateFacet", + resolverKey: { + name: "_SNAPSHOTS_KPI_LINKED_RATE_RESOLVER_KEY", + value: "0x9c0a9b3a98c7e535e4b1a0749f01f63ea94b600fbee8df56d7c18a1f3043ee20", + }, + inheritance: ["SnapshotsFacetBase", "CommonKpiLinkedInterestRate"], + methods: [ + { + name: "balanceOfAtSnapshot", + signature: + "function balanceOfAtSnapshot(uint256 _snapshotID, address _tokenHolder) view returns (uint256 balance_)", + selector: "0x8e00ae2e", + }, + { + name: "balanceOfAtSnapshotByPartition", + signature: + "function balanceOfAtSnapshotByPartition(bytes32 _partition, uint256 _snapshotID, address _tokenHolder) view returns (uint256 balance_)", + selector: "0xe002bcdf", + }, + { + name: "clearedBalanceOfAtSnapshot", + signature: + "function clearedBalanceOfAtSnapshot(uint256 _snapshotID, address _tokenHolder) view returns (uint256 balance_)", + selector: "0x2bc16e9b", + }, + { + name: "clearedBalanceOfAtSnapshotByPartition", + signature: + "function clearedBalanceOfAtSnapshotByPartition(bytes32 _partition, uint256 _snapshotID, address _tokenHolder) view returns (uint256 balance_)", + selector: "0x386e1405", + }, + { + name: "decimalsAtSnapshot", + signature: "function decimalsAtSnapshot(uint256 _snapshotID) view returns (uint8 decimals_)", + selector: "0x69ed346f", + }, + { + name: "frozenBalanceOfAtSnapshot", + signature: + "function frozenBalanceOfAtSnapshot(uint256 _snapshotID, address _tokenHolder) view returns (uint256 balance_)", + selector: "0x5e6c70ec", + }, + { + name: "frozenBalanceOfAtSnapshotByPartition", + signature: + "function frozenBalanceOfAtSnapshotByPartition(bytes32 _partition, uint256 _snapshotID, address _tokenHolder) view returns (uint256 balance_)", + selector: "0x0749c323", + }, + { + name: "getTokenHoldersAtSnapshot", + signature: + "function getTokenHoldersAtSnapshot(uint256 _snapshotID, uint256 _pageIndex, uint256 _pageLength) view returns (address[] holders_)", + selector: "0xd22a73df", + }, + { + name: "getTotalTokenHoldersAtSnapshot", + signature: "function getTotalTokenHoldersAtSnapshot(uint256 _snapshotID) view returns (uint256)", + selector: "0x867126e1", + }, + { + name: "heldBalanceOfAtSnapshot", + signature: + "function heldBalanceOfAtSnapshot(uint256 _snapshotID, address _tokenHolder) view returns (uint256 balance_)", + selector: "0xb52e39aa", + }, + { + name: "heldBalanceOfAtSnapshotByPartition", + signature: + "function heldBalanceOfAtSnapshotByPartition(bytes32 _partition, uint256 _snapshotID, address _tokenHolder) view returns (uint256 balance_)", + selector: "0x977a3a71", + }, + { + name: "lockedBalanceOfAtSnapshot", + signature: + "function lockedBalanceOfAtSnapshot(uint256 _snapshotID, address _tokenHolder) view returns (uint256 balance_)", + selector: "0xd9e6f164", + }, + { + name: "lockedBalanceOfAtSnapshotByPartition", + signature: + "function lockedBalanceOfAtSnapshotByPartition(bytes32 _partition, uint256 _snapshotID, address _tokenHolder) view returns (uint256 balance_)", + selector: "0x4a13f5d0", + }, + { + name: "partitionsOfAtSnapshot", + signature: + "function partitionsOfAtSnapshot(uint256 _snapshotID, address _tokenHolder) view returns (bytes32[])", + selector: "0x09e84301", + }, + { + name: "takeSnapshot", + signature: "function takeSnapshot() returns (uint256 snapshotID_)", + selector: "0xb3d3d37e", + }, + { + name: "totalSupplyAtSnapshot", + signature: "function totalSupplyAtSnapshot(uint256 _snapshotID) view returns (uint256 totalSupply_)", + selector: "0xda35f8f6", + }, + { + name: "totalSupplyAtSnapshotByPartition", + signature: + "function totalSupplyAtSnapshotByPartition(bytes32 _partition, uint256 _snapshotID) view returns (uint256 totalSupply_)", + selector: "0x9657ddb9", + }, + ], + errors: [ + { name: "ExpirationNotReached", signature: "ExpirationNotReached()", selector: "0x92899bcd" }, + { name: "InterestRateIsKpiLinked", signature: "InterestRateIsKpiLinked()", selector: "0x68eba14f" }, + ], + factory: (signer, useTimeTravel = false) => + useTimeTravel + ? new SnapshotsKpiLinkedRateFacetTimeTravel__factory(signer) + : new SnapshotsKpiLinkedRateFacet__factory(signer), + }, + + SnapshotsSustainabilityPerformanceTargetRateFacet: { + name: "SnapshotsSustainabilityPerformanceTargetRateFacet", + resolverKey: { + name: "_SNAPSHOTS_SUSTAINABILITY_PERFORMANCE_TARGET_RATE_RESOLVER_KEY", + value: "0xbcc6255960c1cbe69dae32f7db730d14a35fdb81d91cc7e637e5af4d229bcbbe", + }, + inheritance: ["SnapshotsFacetBase", "CommonSustainabilityPerformanceTargetInterestRate"], + methods: [ + { + name: "balanceOfAtSnapshot", + signature: + "function balanceOfAtSnapshot(uint256 _snapshotID, address _tokenHolder) view returns (uint256 balance_)", + selector: "0x8e00ae2e", + }, + { + name: "balanceOfAtSnapshotByPartition", + signature: + "function balanceOfAtSnapshotByPartition(bytes32 _partition, uint256 _snapshotID, address _tokenHolder) view returns (uint256 balance_)", + selector: "0xe002bcdf", + }, + { + name: "clearedBalanceOfAtSnapshot", + signature: + "function clearedBalanceOfAtSnapshot(uint256 _snapshotID, address _tokenHolder) view returns (uint256 balance_)", + selector: "0x2bc16e9b", + }, + { + name: "clearedBalanceOfAtSnapshotByPartition", + signature: + "function clearedBalanceOfAtSnapshotByPartition(bytes32 _partition, uint256 _snapshotID, address _tokenHolder) view returns (uint256 balance_)", + selector: "0x386e1405", + }, + { + name: "decimalsAtSnapshot", + signature: "function decimalsAtSnapshot(uint256 _snapshotID) view returns (uint8 decimals_)", + selector: "0x69ed346f", + }, + { + name: "frozenBalanceOfAtSnapshot", + signature: + "function frozenBalanceOfAtSnapshot(uint256 _snapshotID, address _tokenHolder) view returns (uint256 balance_)", + selector: "0x5e6c70ec", + }, + { + name: "frozenBalanceOfAtSnapshotByPartition", + signature: + "function frozenBalanceOfAtSnapshotByPartition(bytes32 _partition, uint256 _snapshotID, address _tokenHolder) view returns (uint256 balance_)", + selector: "0x0749c323", + }, + { + name: "getTokenHoldersAtSnapshot", + signature: + "function getTokenHoldersAtSnapshot(uint256 _snapshotID, uint256 _pageIndex, uint256 _pageLength) view returns (address[] holders_)", + selector: "0xd22a73df", + }, + { + name: "getTotalTokenHoldersAtSnapshot", + signature: "function getTotalTokenHoldersAtSnapshot(uint256 _snapshotID) view returns (uint256)", + selector: "0x867126e1", + }, + { + name: "heldBalanceOfAtSnapshot", + signature: + "function heldBalanceOfAtSnapshot(uint256 _snapshotID, address _tokenHolder) view returns (uint256 balance_)", + selector: "0xb52e39aa", + }, + { + name: "heldBalanceOfAtSnapshotByPartition", + signature: + "function heldBalanceOfAtSnapshotByPartition(bytes32 _partition, uint256 _snapshotID, address _tokenHolder) view returns (uint256 balance_)", + selector: "0x977a3a71", + }, + { + name: "lockedBalanceOfAtSnapshot", + signature: + "function lockedBalanceOfAtSnapshot(uint256 _snapshotID, address _tokenHolder) view returns (uint256 balance_)", + selector: "0xd9e6f164", + }, + { + name: "lockedBalanceOfAtSnapshotByPartition", + signature: + "function lockedBalanceOfAtSnapshotByPartition(bytes32 _partition, uint256 _snapshotID, address _tokenHolder) view returns (uint256 balance_)", + selector: "0x4a13f5d0", + }, + { + name: "partitionsOfAtSnapshot", + signature: + "function partitionsOfAtSnapshot(uint256 _snapshotID, address _tokenHolder) view returns (bytes32[])", + selector: "0x09e84301", + }, + { + name: "takeSnapshot", + signature: "function takeSnapshot() returns (uint256 snapshotID_)", + selector: "0xb3d3d37e", }, { - name: "ExternalPausesUpdated", - signature: "ExternalPausesUpdated(address,address[],bool[])", - topic0: "0x75a050d52d69209d464c91f8503b1f3e0aa6bb70550a3884bc19c53c25882878", + name: "totalSupplyAtSnapshot", + signature: "function totalSupplyAtSnapshot(uint256 _snapshotID) view returns (uint256 totalSupply_)", + selector: "0xda35f8f6", }, { - name: "RemovedFromExternalPauses", - signature: "RemovedFromExternalPauses(address,address)", - topic0: "0x3c9c4b708af23d4bd4eb63d45714a3f61f17ae8f0ece3a182c38d15667b965c8", + name: "totalSupplyAtSnapshotByPartition", + signature: + "function totalSupplyAtSnapshotByPartition(bytes32 _partition, uint256 _snapshotID) view returns (uint256 totalSupply_)", + selector: "0x9657ddb9", }, ], errors: [ + { name: "ExpirationNotReached", signature: "ExpirationNotReached()", selector: "0x92899bcd" }, { - name: "ExternalPausesNotUpdated", - signature: "ExternalPausesNotUpdated(address[],bool[])", - selector: "0x2d931b36", + name: "InterestRateIsSustainabilityPerformanceTarget", + signature: "InterestRateIsSustainabilityPerformanceTarget()", + selector: "0x15a15b0a", }, - { name: "ListedPause", signature: "ListedPause(address)", selector: "0x267b9ec9" }, - { name: "UnlistedPause", signature: "UnlistedPause(address)", selector: "0x3281637c" }, ], factory: (signer, useTimeTravel = false) => useTimeTravel - ? new ExternalPauseManagementFacetTimeTravel__factory(signer) - : new ExternalPauseManagementFacet__factory(signer), + ? new SnapshotsSustainabilityPerformanceTargetRateFacetTimeTravel__factory(signer) + : new SnapshotsSustainabilityPerformanceTargetRateFacet__factory(signer), }, - FreezeFacet: { - name: "FreezeFacet", + SsiManagementFacet: { + name: "SsiManagementFacet", resolverKey: { - name: "_FREEZE_RESOLVER_KEY", - value: "0x49f765e7155d979a148049c2a0ebed5e028b11799061897a255f99314f0bd3f1", + name: "_SSI_RESOLVER_KEY", + value: "0x77c35dccfcdc80370e925aae86871ef8bc71db0b8e082c073cda906e89bb610e", }, - inheritance: ["Freeze", "IStaticFunctionSelectors"], + inheritance: ["SsiManagementFacetBase", "Common"], methods: [ { - name: "batchFreezePartialTokens", - signature: "batchFreezePartialTokens(address[],uint256[])", - selector: "0xfc7e5fa8", + name: "addIssuer", + signature: "function addIssuer(address _issuer) returns (bool success_)", + selector: "0x20694db0", }, - { name: "batchSetAddressFrozen", signature: "batchSetAddressFrozen(address[],bool[])", selector: "0x1a7af379" }, { - name: "batchUnfreezePartialTokens", - signature: "batchUnfreezePartialTokens(address[],uint256[])", - selector: "0x4710362d", + name: "getIssuerListCount", + signature: "function getIssuerListCount() view returns (uint256 issuerListCount_)", + selector: "0x600b2940", + }, + { + name: "getIssuerListMembers", + signature: + "function getIssuerListMembers(uint256 _pageIndex, uint256 _pageLength) view returns (address[] members_)", + selector: "0x25ab0545", + }, + { + name: "getRevocationRegistryAddress", + signature: "function getRevocationRegistryAddress() view returns (address revocationRegistryAddress_)", + selector: "0x12023976", + }, + { name: "isIssuer", signature: "function isIssuer(address _issuer) view returns (bool)", selector: "0x877b9a67" }, + { + name: "removeIssuer", + signature: "function removeIssuer(address _issuer) returns (bool success_)", + selector: "0x47bc7093", + }, + { + name: "setRevocationRegistryAddress", + signature: "function setRevocationRegistryAddress(address _revocationRegistryAddress) returns (bool success_)", + selector: "0xbb3daeaf", }, - { name: "freezePartialTokens", signature: "freezePartialTokens(address,uint256)", selector: "0x125c4a33" }, - { name: "getFrozenTokens", signature: "getFrozenTokens(address)", selector: "0x158b1a57" }, - { name: "setAddressFrozen", signature: "setAddressFrozen(address,bool)", selector: "0xc69c09cf" }, - { name: "unfreezePartialTokens", signature: "unfreezePartialTokens(address,uint256)", selector: "0x1fe56f7d" }, ], events: [ { - name: "AddressFrozen", - signature: "AddressFrozen(address,bool,address)", - topic0: "0x7fa523c84ab8d7fc5b72f08b9e46dbbf10c39e119a075b3e317002d14bc9f436", + name: "AddedToIssuerList", + signature: "AddedToIssuerList(address,address)", + topic0: "0xed6cc767c5020f64eb4771044d11fede90f485f88204a7f6d62fb608e5615ca8", }, { - name: "TokensFrozen", - signature: "TokensFrozen(address,uint256,bytes32)", - topic0: "0xd736f88140588a48bf2ce0d40c8ed9eea7d10162e5667cf5054c78ac9a28b2e2", + name: "RemovedFromIssuerList", + signature: "RemovedFromIssuerList(address,address)", + topic0: "0x98978a12ff5bdb777720d9d8bb2cdad050bdfbc2c467144649b14cdc45df52ba", }, { - name: "TokensUnfrozen", - signature: "TokensUnfrozen(address,uint256,bytes32)", - topic0: "0x8b0e34ce56cda141218491fb231baf3165de0352a77ac6f07e7583b301d9452d", + name: "RevocationRegistryUpdated", + signature: "RevocationRegistryUpdated(address,address)", + topic0: "0x9b205171467d972c41c09cf31cce60bcca69d24714df66590528a49e9d9dcef7", }, ], + errors: [ + { name: "AccountIsNotIssuer", signature: "AccountIsNotIssuer(address)", selector: "0xcd324f53" }, + { name: "ExpirationNotReached", signature: "ExpirationNotReached()", selector: "0x92899bcd" }, + { name: "ListedIssuer", signature: "ListedIssuer(address)", selector: "0xcb2beece" }, + { name: "UnlistedIssuer", signature: "UnlistedIssuer(address)", selector: "0xd1243a92" }, + ], factory: (signer, useTimeTravel = false) => - useTimeTravel ? new FreezeFacetTimeTravel__factory(signer) : new FreezeFacet__factory(signer), + useTimeTravel ? new SsiManagementFacetTimeTravel__factory(signer) : new SsiManagementFacet__factory(signer), }, - HoldManagementFacet: { - name: "HoldManagementFacet", + SsiManagementFixedRateFacet: { + name: "SsiManagementFixedRateFacet", resolverKey: { - name: "_HOLD_MANAGEMENT_RESOLVER_KEY", - value: "0xaab5a0e0978ad146ca8dc61d16bab0212224eadf68bd08e3c66600ee4f59c12a", + name: "_SSI_FIXED_RATE_RESOLVER_KEY", + value: "0xd3c3eb4fde853b08d2509769f85fbcc3147edd847e1e8da89c805628293effb2", }, - inheritance: ["IStaticFunctionSelectors", "HoldManagement"], + inheritance: ["SsiManagementFacetBase", "CommonFixedInterestRate"], methods: [ { - name: "controllerCreateHoldByPartition", - signature: "controllerCreateHoldByPartition(bytes32,address,Hold,bytes)", - selector: "0xd601e2f8", + name: "addIssuer", + signature: "function addIssuer(address _issuer) returns (bool success_)", + selector: "0x20694db0", }, { - name: "operatorCreateHoldByPartition", - signature: "operatorCreateHoldByPartition(bytes32,address,Hold,bytes)", - selector: "0x049e5d89", + name: "getIssuerListCount", + signature: "function getIssuerListCount() view returns (uint256 issuerListCount_)", + selector: "0x600b2940", }, { - name: "protectedCreateHoldByPartition", - signature: "protectedCreateHoldByPartition(bytes32,address,ProtectedHold,bytes)", - selector: "0xfea5ee4c", + name: "getIssuerListMembers", + signature: + "function getIssuerListMembers(uint256 _pageIndex, uint256 _pageLength) view returns (address[] members_)", + selector: "0x25ab0545", }, - ], - events: [ { - name: "ControllerHeldByPartition", - signature: "ControllerHeldByPartition(address,address,bytes32,uint256,Hold,bytes)", - topic0: "0xf6f3741306d730c309f18e6262f05de4790259d916f67334766f2f71dbf00b11", + name: "getRevocationRegistryAddress", + signature: "function getRevocationRegistryAddress() view returns (address revocationRegistryAddress_)", + selector: "0x12023976", }, + { name: "isIssuer", signature: "function isIssuer(address _issuer) view returns (bool)", selector: "0x877b9a67" }, { - name: "OperatorHeldByPartition", - signature: "OperatorHeldByPartition(address,address,bytes32,uint256,Hold,bytes)", - topic0: "0xecb0a532842468318362280a5b81ec910b4d495202a817fc545fd2b7628559e4", + name: "removeIssuer", + signature: "function removeIssuer(address _issuer) returns (bool success_)", + selector: "0x47bc7093", }, { - name: "ProtectedHeldByPartition", - signature: "ProtectedHeldByPartition(address,address,bytes32,uint256,Hold,bytes)", - topic0: "0xdf892a9d471e7ee25020da7f5f096608aadc1cbdf9aacb751bf1b83eb97a8d58", + name: "setRevocationRegistryAddress", + signature: "function setRevocationRegistryAddress(address _revocationRegistryAddress) returns (bool success_)", + selector: "0xbb3daeaf", }, ], - factory: (signer, useTimeTravel = false) => - useTimeTravel ? new HoldManagementFacetTimeTravel__factory(signer) : new HoldManagementFacet__factory(signer), - }, - - HoldReadFacet: { - name: "HoldReadFacet", - resolverKey: { - name: "_HOLD_READ_RESOLVER_KEY", - value: "0xd8a2714462c01975a075ccd4be2588934afd8074afef746fac089b757b803851", - }, - inheritance: ["IStaticFunctionSelectors", "HoldRead"], - methods: [ - { name: "getHeldAmountFor", signature: "getHeldAmountFor(address)", selector: "0x8493aabb" }, + events: [ { - name: "getHeldAmountForByPartition", - signature: "getHeldAmountForByPartition(bytes32,address)", - selector: "0x4d60fdc5", + name: "AddedToIssuerList", + signature: "AddedToIssuerList(address,address)", + topic0: "0xed6cc767c5020f64eb4771044d11fede90f485f88204a7f6d62fb608e5615ca8", }, { - name: "getHoldCountForByPartition", - signature: "getHoldCountForByPartition(bytes32,address)", - selector: "0xcecb3899", + name: "RemovedFromIssuerList", + signature: "RemovedFromIssuerList(address,address)", + topic0: "0x98978a12ff5bdb777720d9d8bb2cdad050bdfbc2c467144649b14cdc45df52ba", }, - { name: "getHoldForByPartition", signature: "getHoldForByPartition(HoldIdentifier)", selector: "0x4fa0b1f2" }, { - name: "getHoldsIdForByPartition", - signature: "getHoldsIdForByPartition(bytes32,address,uint256,uint256)", - selector: "0xeb89899d", + name: "RevocationRegistryUpdated", + signature: "RevocationRegistryUpdated(address,address)", + topic0: "0x9b205171467d972c41c09cf31cce60bcca69d24714df66590528a49e9d9dcef7", }, - { name: "getHoldThirdParty", signature: "getHoldThirdParty(HoldIdentifier)", selector: "0x1c771f2b" }, + ], + errors: [ + { name: "AccountIsNotIssuer", signature: "AccountIsNotIssuer(address)", selector: "0xcd324f53" }, + { name: "ExpirationNotReached", signature: "ExpirationNotReached()", selector: "0x92899bcd" }, + { name: "InterestRateIsFixed", signature: "InterestRateIsFixed()", selector: "0x849d4eb8" }, + { name: "ListedIssuer", signature: "ListedIssuer(address)", selector: "0xcb2beece" }, + { name: "UnlistedIssuer", signature: "UnlistedIssuer(address)", selector: "0xd1243a92" }, ], factory: (signer, useTimeTravel = false) => - useTimeTravel ? new HoldReadFacetTimeTravel__factory(signer) : new HoldReadFacet__factory(signer), + useTimeTravel + ? new SsiManagementFixedRateFacetTimeTravel__factory(signer) + : new SsiManagementFixedRateFacet__factory(signer), }, - HoldTokenHolderFacet: { - name: "HoldTokenHolderFacet", + SsiManagementKpiLinkedRateFacet: { + name: "SsiManagementKpiLinkedRateFacet", resolverKey: { - name: "_HOLD_TOKEN_HOLDER_RESOLVER_KEY", - value: "0x87b17a3ce9a86872f21469d26f005543a22ef5729998559f4ad433d5c4253f3e", + name: "_SSI_KPI_LINKED_RATE_RESOLVER_KEY", + value: "0xac0a01362676a7a1370879903993e04310cb7a3b60fc327072dcf7a00ce50e5a", }, - inheritance: ["IStaticFunctionSelectors", "HoldTokenHolder"], + inheritance: ["SsiManagementFacetBase", "CommonKpiLinkedInterestRate"], methods: [ - { name: "createHoldByPartition", signature: "createHoldByPartition(bytes32,Hold)", selector: "0xae4bcf8a" }, { - name: "createHoldFromByPartition", - signature: "createHoldFromByPartition(bytes32,address,Hold,bytes)", - selector: "0x30b2e862", + name: "addIssuer", + signature: "function addIssuer(address _issuer) returns (bool success_)", + selector: "0x20694db0", }, { - name: "executeHoldByPartition", - signature: "executeHoldByPartition(HoldIdentifier,address,uint256)", - selector: "0x37034df4", + name: "getIssuerListCount", + signature: "function getIssuerListCount() view returns (uint256 issuerListCount_)", + selector: "0x600b2940", }, - { name: "reclaimHoldByPartition", signature: "reclaimHoldByPartition(HoldIdentifier)", selector: "0x8e302e47" }, { - name: "releaseHoldByPartition", - signature: "releaseHoldByPartition(HoldIdentifier,uint256)", - selector: "0x2dc66830", + name: "getIssuerListMembers", + signature: + "function getIssuerListMembers(uint256 _pageIndex, uint256 _pageLength) view returns (address[] members_)", + selector: "0x25ab0545", }, - ], - events: [ { - name: "HeldByPartition", - signature: "HeldByPartition(address,address,bytes32,uint256,Hold,bytes)", - topic0: "0x8aaecda291be1880bb8f1b74d739076b63e172f3758535440d4781002a135663", + name: "getRevocationRegistryAddress", + signature: "function getRevocationRegistryAddress() view returns (address revocationRegistryAddress_)", + selector: "0x12023976", }, + { name: "isIssuer", signature: "function isIssuer(address _issuer) view returns (bool)", selector: "0x877b9a67" }, { - name: "HeldFromByPartition", - signature: "HeldFromByPartition(address,address,bytes32,uint256,Hold,bytes)", - topic0: "0x89e7674560e6cad671bf2d392a62a88b25b960e62476504e038081c3aabe7ece", + name: "removeIssuer", + signature: "function removeIssuer(address _issuer) returns (bool success_)", + selector: "0x47bc7093", }, { - name: "HoldByPartitionExecuted", - signature: "HoldByPartitionExecuted(address,bytes32,uint256,uint256,address)", - topic0: "0x4fb20409d1b2a56fa4c5b29c11d9b1e148649db67860c5648a8a86f35edf8582", + name: "setRevocationRegistryAddress", + signature: "function setRevocationRegistryAddress(address _revocationRegistryAddress) returns (bool success_)", + selector: "0xbb3daeaf", + }, + ], + events: [ + { + name: "AddedToIssuerList", + signature: "AddedToIssuerList(address,address)", + topic0: "0xed6cc767c5020f64eb4771044d11fede90f485f88204a7f6d62fb608e5615ca8", }, { - name: "HoldByPartitionReclaimed", - signature: "HoldByPartitionReclaimed(address,address,bytes32,uint256,uint256)", - topic0: "0xee0ec155026031ca64823d8fbf00832ff3f96c7da0994432ddc1a32c72022a09", + name: "RemovedFromIssuerList", + signature: "RemovedFromIssuerList(address,address)", + topic0: "0x98978a12ff5bdb777720d9d8bb2cdad050bdfbc2c467144649b14cdc45df52ba", }, { - name: "HoldByPartitionReleased", - signature: "HoldByPartitionReleased(address,bytes32,uint256,uint256)", - topic0: "0x6c167944f4b372d42d168efc93004d7e517cb82a501d67490af33f95530ca50e", + name: "RevocationRegistryUpdated", + signature: "RevocationRegistryUpdated(address,address)", + topic0: "0x9b205171467d972c41c09cf31cce60bcca69d24714df66590528a49e9d9dcef7", }, ], + errors: [ + { name: "AccountIsNotIssuer", signature: "AccountIsNotIssuer(address)", selector: "0xcd324f53" }, + { name: "ExpirationNotReached", signature: "ExpirationNotReached()", selector: "0x92899bcd" }, + { name: "InterestRateIsKpiLinked", signature: "InterestRateIsKpiLinked()", selector: "0x68eba14f" }, + { name: "ListedIssuer", signature: "ListedIssuer(address)", selector: "0xcb2beece" }, + { name: "UnlistedIssuer", signature: "UnlistedIssuer(address)", selector: "0xd1243a92" }, + ], factory: (signer, useTimeTravel = false) => - useTimeTravel ? new HoldTokenHolderFacetTimeTravel__factory(signer) : new HoldTokenHolderFacet__factory(signer), + useTimeTravel + ? new SsiManagementKpiLinkedRateFacetTimeTravel__factory(signer) + : new SsiManagementKpiLinkedRateFacet__factory(signer), }, - KycFacet: { - name: "KycFacet", + SsiManagementSustainabilityPerformanceTargetRateFacet: { + name: "SsiManagementSustainabilityPerformanceTargetRateFacet", resolverKey: { - name: "_KYC_RESOLVER_KEY", - value: "0xf516a0f6b4726244ae916c590cd26c2b593d7d448e46e43714fb9f9435c46e32", + name: "_SSI_SUSTAINABILITY_PERFORMANCE_TARGET_RATE_RESOLVER_KEY", + value: "0x5de367269fd9e98ceb172f263a954ee471605474013e206e00340c5914046c8b", }, - inheritance: ["Kyc", "IStaticFunctionSelectors"], + inheritance: ["SsiManagementFacetBase", "CommonSustainabilityPerformanceTargetInterestRate"], methods: [ - { name: "activateInternalKyc", signature: "activateInternalKyc()", selector: "0xfbb08f50" }, - { name: "deactivateInternalKyc", signature: "deactivateInternalKyc()", selector: "0x4a5df31d" }, - { name: "getKycAccountsCount", signature: "getKycAccountsCount(KycStatus)", selector: "0x73106fa0" }, { - name: "getKycAccountsData", - signature: "getKycAccountsData(KycStatus,uint256,uint256)", - selector: "0xabe354e6", + name: "addIssuer", + signature: "function addIssuer(address _issuer) returns (bool success_)", + selector: "0x20694db0", + }, + { + name: "getIssuerListCount", + signature: "function getIssuerListCount() view returns (uint256 issuerListCount_)", + selector: "0x600b2940", + }, + { + name: "getIssuerListMembers", + signature: + "function getIssuerListMembers(uint256 _pageIndex, uint256 _pageLength) view returns (address[] members_)", + selector: "0x25ab0545", + }, + { + name: "getRevocationRegistryAddress", + signature: "function getRevocationRegistryAddress() view returns (address revocationRegistryAddress_)", + selector: "0x12023976", + }, + { name: "isIssuer", signature: "function isIssuer(address _issuer) view returns (bool)", selector: "0x877b9a67" }, + { + name: "removeIssuer", + signature: "function removeIssuer(address _issuer) returns (bool success_)", + selector: "0x47bc7093", + }, + { + name: "setRevocationRegistryAddress", + signature: "function setRevocationRegistryAddress(address _revocationRegistryAddress) returns (bool success_)", + selector: "0xbb3daeaf", }, - { name: "getKycFor", signature: "getKycFor(address)", selector: "0x41322840" }, - { name: "getKycStatusFor", signature: "getKycStatusFor(address)", selector: "0xe788a736" }, - { name: "grantKyc", signature: "grantKyc(address,string,uint256,uint256,address)", selector: "0x81bea54d" }, - { name: "initializeInternalKyc", signature: "initializeInternalKyc(bool)", selector: "0xdf353624" }, - { name: "isInternalKycActivated", signature: "isInternalKycActivated()", selector: "0x90b6c798" }, - { name: "revokeKyc", signature: "revokeKyc(address)", selector: "0x12283191" }, ], events: [ { - name: "InternalKycStatusUpdated", - signature: "InternalKycStatusUpdated(address,bool)", - topic0: "0xa9f463ccc72d9e8aa9a317345756d652481f06b5ddf8aa4057f38086024a168c", + name: "AddedToIssuerList", + signature: "AddedToIssuerList(address,address)", + topic0: "0xed6cc767c5020f64eb4771044d11fede90f485f88204a7f6d62fb608e5615ca8", }, { - name: "KycGranted", - signature: "KycGranted(address,address)", - topic0: "0x0cc42ba172587888529a0b89cc75bd6914b337cf10757fd80e3246330e55ad94", + name: "RemovedFromIssuerList", + signature: "RemovedFromIssuerList(address,address)", + topic0: "0x98978a12ff5bdb777720d9d8bb2cdad050bdfbc2c467144649b14cdc45df52ba", }, { - name: "KycRevoked", - signature: "KycRevoked(address,address)", - topic0: "0x5d9279616441228548cfb67f31b7b9b131fd30de1b3c54a6dd0062a74ce638a6", + name: "RevocationRegistryUpdated", + signature: "RevocationRegistryUpdated(address,address)", + topic0: "0x9b205171467d972c41c09cf31cce60bcca69d24714df66590528a49e9d9dcef7", }, ], errors: [ - { name: "InvalidDates", signature: "InvalidDates()", selector: "0xd937486c" }, - { name: "InvalidKycStatus", signature: "InvalidKycStatus()", selector: "0xfc855b1b" }, - { name: "InvalidZeroAddress", signature: "InvalidZeroAddress()", selector: "0xf6b2911f" }, - { name: "KycIsNotGranted", signature: "KycIsNotGranted()", selector: "0xd5209e15" }, + { name: "AccountIsNotIssuer", signature: "AccountIsNotIssuer(address)", selector: "0xcd324f53" }, + { name: "ExpirationNotReached", signature: "ExpirationNotReached()", selector: "0x92899bcd" }, + { + name: "InterestRateIsSustainabilityPerformanceTarget", + signature: "InterestRateIsSustainabilityPerformanceTarget()", + selector: "0x15a15b0a", + }, + { name: "ListedIssuer", signature: "ListedIssuer(address)", selector: "0xcb2beece" }, + { name: "UnlistedIssuer", signature: "UnlistedIssuer(address)", selector: "0xd1243a92" }, ], factory: (signer, useTimeTravel = false) => - useTimeTravel ? new KycFacetTimeTravel__factory(signer) : new KycFacet__factory(signer), + useTimeTravel + ? new SsiManagementSustainabilityPerformanceTargetRateFacetTimeTravel__factory(signer) + : new SsiManagementSustainabilityPerformanceTargetRateFacet__factory(signer), }, - LockFacet: { - name: "LockFacet", + SustainabilityPerformanceTargetRateFacet: { + name: "SustainabilityPerformanceTargetRateFacet", resolverKey: { - name: "_LOCK_RESOLVER_KEY", - value: "0xf1364345b3db5ebe5808f2d2d2aaecb9cdb4fddacad1534033060ebc886fc1e9", + name: "_SUSTAINABILITY_PERFORMANCE_TARGET_RATE_RESOLVER_KEY", + value: "0xa261a7434029a925924f47ccea7fbe12af1e56efd74e8f1d8ac23bec19a27e49", }, - inheritance: ["Lock", "IStaticFunctionSelectors"], + inheritance: ["SustainabilityPerformanceTargetRate", "IStaticFunctionSelectors"], methods: [ - { name: "getLockCountFor", signature: "getLockCountFor(address)", selector: "0x4f131ba4" }, { - name: "getLockCountForByPartition", - signature: "getLockCountForByPartition(bytes32,address)", - selector: "0x3b193d92", + name: "getImpactDataFor", + signature: + "function getImpactDataFor(address _project) view returns (tuple(uint256 baseLine, uint8 baseLineMode, uint256 deltaRate, uint8 impactDataMode) impactData_)", + selector: "0xb8cf9d2a", }, - { name: "getLockedAmountFor", signature: "getLockedAmountFor(address)", selector: "0x36e74467" }, { - name: "getLockedAmountForByPartition", - signature: "getLockedAmountForByPartition(bytes32,address)", - selector: "0x6e1c55ba", + name: "getInterestRate", + signature: + "function getInterestRate() view returns (tuple(uint256 baseRate, uint256 startPeriod, uint256 startRate, uint8 rateDecimals) interestRate_)", + selector: "0x5257b566", }, - { name: "getLockFor", signature: "getLockFor(address,uint256)", selector: "0x6f14b024" }, { - name: "getLockForByPartition", - signature: "getLockForByPartition(bytes32,address,uint256)", - selector: "0xa9acfccb", + name: "initialize_SustainabilityPerformanceTargetRate", + signature: + "function initialize_SustainabilityPerformanceTargetRate(tuple(uint256 baseRate, uint256 startPeriod, uint256 startRate, uint8 rateDecimals) _interestRate, tuple(uint256 baseLine, uint8 baseLineMode, uint256 deltaRate, uint8 impactDataMode)[] _impactData, address[] _projects)", + selector: "0xe2ebedda", }, - { name: "getLocksIdFor", signature: "getLocksIdFor(address,uint256,uint256)", selector: "0xd2d2b9fc" }, { - name: "getLocksIdForByPartition", - signature: "getLocksIdForByPartition(bytes32,address,uint256,uint256)", - selector: "0x3ea8b59d", + name: "setImpactData", + signature: + "function setImpactData(tuple(uint256 baseLine, uint8 baseLineMode, uint256 deltaRate, uint8 impactDataMode)[] _newImpactData, address[] _projects)", + selector: "0x3c200ec4", }, - { name: "lock", signature: "lock(uint256,address,uint256)", selector: "0xcf27cfc4" }, { - name: "lockByPartition", - signature: "lockByPartition(bytes32,uint256,address,uint256)", - selector: "0x7a87884e", + name: "setInterestRate", + signature: + "function setInterestRate(tuple(uint256 baseRate, uint256 startPeriod, uint256 startRate, uint8 rateDecimals) _newInterestRate)", + selector: "0xd7a0d0e8", }, - { name: "release", signature: "release(uint256,address)", selector: "0x8124fea6" }, - { name: "releaseByPartition", signature: "releaseByPartition(bytes32,uint256,address)", selector: "0xdc6a3e75" }, ], events: [ { - name: "LockByPartitionReleased", - signature: "LockByPartitionReleased(address,address,bytes32,uint256)", - topic0: "0x6b9cdd97822563ef24ac6b58b361df36a653662e434bb96e40fa50ae5c9de688", + name: "ImpactDataUpdated", + signature: "ImpactDataUpdated(address,ImpactData[],address[])", + topic0: "0x8ac5147acc7918904f238d103d9306aaa3208ad0a679f15a37f43e6767a8aa03", }, { - name: "LockedByPartition", - signature: "LockedByPartition(address,address,bytes32,uint256,uint256,uint256)", - topic0: "0x1f36cfc418f72043825aa85b5d279c03191ab83364af0ec5f170d67f1a7ba152", + name: "InterestRateUpdated", + signature: "InterestRateUpdated(address,InterestRate)", + topic0: "0xed3c060bc037e2b9f05c9d552119ccb2cf7499562ac630370d20178beb1583e7", }, ], - factory: (signer, useTimeTravel = false) => - useTimeTravel ? new LockFacetTimeTravel__factory(signer) : new LockFacet__factory(signer), - }, - - PauseFacet: { - name: "PauseFacet", - resolverKey: { - name: "_PAUSE_RESOLVER_KEY", - value: "0x9429fd9ef38f89f41bd9ec33fd5c94b287ed1c27a98938da43835ac761b2f92c", - }, - inheritance: ["Pause", "IStaticFunctionSelectors"], - methods: [ - { name: "isPaused", signature: "isPaused()", selector: "0xb187bd26" }, - { name: "pause", signature: "pause()", selector: "0x8456cb59" }, - { name: "unpause", signature: "unpause()", selector: "0x3f4ba83a" }, + errors: [ + { name: "ExpirationNotReached", signature: "ExpirationNotReached()", selector: "0x92899bcd" }, + { + name: "InterestRateIsSustainabilityPerformanceTarget", + signature: "InterestRateIsSustainabilityPerformanceTarget()", + selector: "0x15a15b0a", + }, + { name: "NotExistingProject", signature: "NotExistingProject(address)", selector: "0x2f850995" }, + { + name: "ProvidedListsLengthMismatch", + signature: "ProvidedListsLengthMismatch(uint256,uint256)", + selector: "0x4470462b", + }, ], factory: (signer, useTimeTravel = false) => - useTimeTravel ? new PauseFacetTimeTravel__factory(signer) : new PauseFacet__factory(signer), + useTimeTravel + ? new SustainabilityPerformanceTargetRateFacetTimeTravel__factory(signer) + : new SustainabilityPerformanceTargetRateFacet__factory(signer), }, - ProceedRecipientsFacet: { - name: "ProceedRecipientsFacet", + TimeTravelFacet: { + name: "TimeTravelFacet", resolverKey: { - name: "_PROCEED_RECIPIENTS_RESOLVER_KEY", - value: "0x87f4b676bf89cd24a01a78fd8e7fb2102c2f6d034be73d16402f7297e0ae625b", + name: "_TIME_TRAVEL_RESOLVER_KEY", + value: "0xba344464ddfb79287323340a7abdc770d353bd7dfd2695345419903dbb9918c8", }, - inheritance: ["ProceedRecipients", "IStaticFunctionSelectors"], + inheritance: ["IStaticFunctionSelectors", "ITimeTravel", "TimeTravelStorageWrapper"], methods: [ - { name: "addProceedRecipient", signature: "addProceedRecipient(address,bytes)", selector: "0x298f6222" }, - { name: "getProceedRecipientData", signature: "getProceedRecipientData(address)", selector: "0x94c39122" }, - { name: "getProceedRecipients", signature: "getProceedRecipients(uint256,uint256)", selector: "0x0a4f7d71" }, - { name: "getProceedRecipientsCount", signature: "getProceedRecipientsCount()", selector: "0x03db0e0d" }, + { name: "blockTimestamp", signature: "function blockTimestamp() view returns (uint256)", selector: "0xadb61832" }, { - name: "initialize_ProceedRecipients", - signature: "initialize_ProceedRecipients(address[],bytes[])", - selector: "0x9005379e", + name: "changeSystemBlocknumber", + signature: "function changeSystemBlocknumber(uint256 _newSystemBlocknumber)", + selector: "0x4dd6b375", }, - { name: "isProceedRecipient", signature: "isProceedRecipient(address)", selector: "0xb9b6def1" }, - { name: "removeProceedRecipient", signature: "removeProceedRecipient(address)", selector: "0x1f9810c8" }, { - name: "updateProceedRecipientData", - signature: "updateProceedRecipientData(address,bytes)", - selector: "0x654141cf", + name: "changeSystemTimestamp", + signature: "function changeSystemTimestamp(uint256 newTimestamp)", + selector: "0xc0f0f67e", + }, + { + name: "checkBlockChainid", + signature: "function checkBlockChainid(uint256 chainId) pure", + selector: "0xd939398c", }, + { name: "resetSystemBlocknumber", signature: "function resetSystemBlocknumber()", selector: "0x64b677a4" }, + { name: "resetSystemTimestamp", signature: "function resetSystemTimestamp()", selector: "0x8f145250" }, ], events: [ { - name: "ProceedRecipientAdded", - signature: "ProceedRecipientAdded(address,address,bytes)", - topic0: "0x95ea4c59332446575a504e49eab7549792d2378816950a0b6efb509e4df77b95", + name: "SystemBlocknumberChanged", + signature: "SystemBlocknumberChanged(uint256,uint256)", + topic0: "0x96395610c0c23ab4b071bdeae9633f3d54760b0c64cc38868c72e80d6543b987", }, { - name: "ProceedRecipientDataUpdated", - signature: "ProceedRecipientDataUpdated(address,address,bytes)", - topic0: "0xd3ca7f6e7e6927a35494a3d41bf1b250b7388cb459b84f19db41a7069a70f109", + name: "SystemBlocknumberReset", + signature: "SystemBlocknumberReset()", + topic0: "0x5e1c9b0e188d9a34c3abf05ea5456e54965689aff2ae15b6f1f549dd116e927f", }, { - name: "ProceedRecipientRemoved", - signature: "ProceedRecipientRemoved(address,address)", - topic0: "0x63204e4d4571f38dab60d621fa9e61d1a9430f6fe93627d35474eba0f7ca86e6", + name: "SystemTimestampChanged", + signature: "SystemTimestampChanged(uint256,uint256)", + topic0: "0x42ae45afbacb5d1779b65d1bf0fe5ed8ea40e9dd166cc8b80bcb3fa2daf222a1", }, - ], - errors: [ { - name: "ProceedRecipientAlreadyExists", - signature: "ProceedRecipientAlreadyExists(address)", - selector: "0xb7fd3b5b", + name: "SystemTimestampReset", + signature: "SystemTimestampReset()", + topic0: "0x93e7a31ca0d8810d390d6a3fc6ad83d230a5677c142d9aea7331a87794d11c11", }, - { name: "ProceedRecipientNotFound", signature: "ProceedRecipientNotFound(address)", selector: "0x664dc89c" }, ], - factory: (signer, useTimeTravel = false) => - useTimeTravel - ? new ProceedRecipientsFacetTimeTravel__factory(signer) - : new ProceedRecipientsFacet__factory(signer), + errors: [ + { name: "ExpirationNotReached", signature: "ExpirationNotReached()", selector: "0x92899bcd" }, + { name: "InvalidBlocknumber", signature: "InvalidBlocknumber(uint256)", selector: "0x769a518c" }, + { name: "InvalidTimestamp", signature: "InvalidTimestamp(uint256)", selector: "0x25c20828" }, + { name: "WrongChainId", signature: "WrongChainId()", selector: "0x5f87bc00" }, + ], + factory: (signer) => new TimeTravelFacet__factory(signer), }, - ProtectedPartitionsFacet: { - name: "ProtectedPartitionsFacet", + TransferAndLockFacet: { + name: "TransferAndLockFacet", resolverKey: { - name: "_PROTECTED_PARTITIONS_RESOLVER_KEY", - value: "0x6d65d2938c05a4d952aff0845c1baa5bea04d4544db74f8b3b26004d1d58d58f", + name: "_TRANSFER_AND_LOCK_RESOLVER_KEY", + value: "0xd9b300e6bf7a143b8fd8cf1d4ab050e691c862bf0f57a7d49cc08c60efe68d08", }, - inheritance: ["ProtectedPartitions", "IStaticFunctionSelectors"], + inheritance: ["TransferAndLockFacetBase", "Common"], methods: [ - { name: "arePartitionsProtected", signature: "arePartitionsProtected()", selector: "0xa151c19f" }, - { name: "calculateRoleForPartition", signature: "calculateRoleForPartition(bytes32)", selector: "0xcb4da6fc" }, - { name: "getNounceFor", signature: "getNounceFor(address)", selector: "0x9f6b67c2" }, { - name: "initialize_ProtectedPartitions", - signature: "initialize_ProtectedPartitions(bool)", - selector: "0x90c032cc", + name: "transferAndLock", + signature: + "function transferAndLock(address _to, uint256 _amount, bytes _data, uint256 _expirationTimestamp) returns (bool success_, uint256 lockId_)", + selector: "0x0e92b90b", + }, + { + name: "transferAndLockByPartition", + signature: + "function transferAndLockByPartition(bytes32 _partition, address _to, uint256 _amount, bytes _data, uint256 _expirationTimestamp) returns (bool success_, uint256 lockId_)", + selector: "0x3bd407b9", + }, + ], + events: [ + { + name: "PartitionTransferredAndLocked", + signature: "PartitionTransferredAndLocked(bytes32,address,address,uint256,bytes,uint256,uint256)", + topic0: "0xc2b09c570c5d1b74fb7cc5594554d1aa9fe25ad5b037856dfd980f3bbe17dda9", }, - { name: "protectPartitions", signature: "protectPartitions()", selector: "0x6c5fde55" }, - { name: "unprotectPartitions", signature: "unprotectPartitions()", selector: "0x1277b323" }, ], + errors: [{ name: "ExpirationNotReached", signature: "ExpirationNotReached()", selector: "0x92899bcd" }], factory: (signer, useTimeTravel = false) => - useTimeTravel - ? new ProtectedPartitionsFacetTimeTravel__factory(signer) - : new ProtectedPartitionsFacet__factory(signer), + useTimeTravel ? new TransferAndLockFacetTimeTravel__factory(signer) : new TransferAndLockFacet__factory(signer), }, - ScheduledBalanceAdjustmentsFacet: { - name: "ScheduledBalanceAdjustmentsFacet", + TransferAndLockFixedRateFacet: { + name: "TransferAndLockFixedRateFacet", resolverKey: { - name: "_SCHEDULED_BALANCE_ADJUSTMENTS_RESOLVER_KEY", - value: "0xc418e67a48260d700e5f85863ad6fa6593206a4385728f8baba1572d631535e0", + name: "_TRANSFER_AND_LOCK_FIXED_RATE_RESOLVER_KEY", + value: "0x8c3d5e9f2a6b1c4d7e8f9a2b3c4d5e6f7a8b9c0d1e2f3a4b5c6d7e8f9a0b1c2d", }, - inheritance: ["ScheduledBalanceAdjustments", "IStaticFunctionSelectors"], + inheritance: ["TransferAndLockFacetBase", "CommonFixedInterestRate"], methods: [ { - name: "getScheduledBalanceAdjustments", - signature: "getScheduledBalanceAdjustments(uint256,uint256)", - selector: "0xcb884d41", + name: "transferAndLock", + signature: + "function transferAndLock(address _to, uint256 _amount, bytes _data, uint256 _expirationTimestamp) returns (bool success_, uint256 lockId_)", + selector: "0x0e92b90b", }, { - name: "scheduledBalanceAdjustmentCount", - signature: "scheduledBalanceAdjustmentCount()", - selector: "0x2de241e3", + name: "transferAndLockByPartition", + signature: + "function transferAndLockByPartition(bytes32 _partition, address _to, uint256 _amount, bytes _data, uint256 _expirationTimestamp) returns (bool success_, uint256 lockId_)", + selector: "0x3bd407b9", + }, + ], + events: [ + { + name: "PartitionTransferredAndLocked", + signature: "PartitionTransferredAndLocked(bytes32,address,address,uint256,bytes,uint256,uint256)", + topic0: "0xc2b09c570c5d1b74fb7cc5594554d1aa9fe25ad5b037856dfd980f3bbe17dda9", }, ], + errors: [ + { name: "ExpirationNotReached", signature: "ExpirationNotReached()", selector: "0x92899bcd" }, + { name: "InterestRateIsFixed", signature: "InterestRateIsFixed()", selector: "0x849d4eb8" }, + ], factory: (signer, useTimeTravel = false) => useTimeTravel - ? new ScheduledBalanceAdjustmentsFacetTimeTravel__factory(signer) - : new ScheduledBalanceAdjustmentsFacet__factory(signer), + ? new TransferAndLockFixedRateFacetTimeTravel__factory(signer) + : new TransferAndLockFixedRateFacet__factory(signer), }, - ScheduledCrossOrderedTasksFacet: { - name: "ScheduledCrossOrderedTasksFacet", + TransferAndLockKpiLinkedRateFacet: { + name: "TransferAndLockKpiLinkedRateFacet", resolverKey: { - name: "_SCHEDULED_TASKS_RESOLVER_KEY", - value: "0xa4934195ab83f1497ce5fc99b68d0f41694716bcfba5f232aa6c8e0d4d504f08", + name: "_TRANSFER_AND_LOCK_KPI_LINKED_RATE_RESOLVER_KEY", + value: "0x3e5f7a9b1c2d4e6f8a9b0c1d2e3f4a5b6c7d8e9f0a1b2c3d4e5f6a7b8c9d0e1f", }, - inheritance: ["ScheduledCrossOrderedTasks", "IStaticFunctionSelectors"], + inheritance: ["TransferAndLockFacetBase", "CommonKpiLinkedInterestRate"], methods: [ { - name: "getScheduledCrossOrderedTasks", - signature: "getScheduledCrossOrderedTasks(uint256,uint256)", - selector: "0x72ed9041", + name: "transferAndLock", + signature: + "function transferAndLock(address _to, uint256 _amount, bytes _data, uint256 _expirationTimestamp) returns (bool success_, uint256 lockId_)", + selector: "0x0e92b90b", }, - { name: "scheduledCrossOrderedTaskCount", signature: "scheduledCrossOrderedTaskCount()", selector: "0x46883133" }, { - name: "triggerPendingScheduledCrossOrderedTasks", - signature: "triggerPendingScheduledCrossOrderedTasks()", - selector: "0x32194dbb", + name: "transferAndLockByPartition", + signature: + "function transferAndLockByPartition(bytes32 _partition, address _to, uint256 _amount, bytes _data, uint256 _expirationTimestamp) returns (bool success_, uint256 lockId_)", + selector: "0x3bd407b9", }, + ], + events: [ { - name: "triggerScheduledCrossOrderedTasks", - signature: "triggerScheduledCrossOrderedTasks(uint256)", - selector: "0x5be4a143", + name: "PartitionTransferredAndLocked", + signature: "PartitionTransferredAndLocked(bytes32,address,address,uint256,bytes,uint256,uint256)", + topic0: "0xc2b09c570c5d1b74fb7cc5594554d1aa9fe25ad5b037856dfd980f3bbe17dda9", }, ], + errors: [ + { name: "ExpirationNotReached", signature: "ExpirationNotReached()", selector: "0x92899bcd" }, + { name: "InterestRateIsKpiLinked", signature: "InterestRateIsKpiLinked()", selector: "0x68eba14f" }, + ], factory: (signer, useTimeTravel = false) => useTimeTravel - ? new ScheduledCrossOrderedTasksFacetTimeTravel__factory(signer) - : new ScheduledCrossOrderedTasksFacet__factory(signer), + ? new TransferAndLockKpiLinkedRateFacetTimeTravel__factory(signer) + : new TransferAndLockKpiLinkedRateFacet__factory(signer), }, - ScheduledSnapshotsFacet: { - name: "ScheduledSnapshotsFacet", + TransferAndLockSustainabilityPerformanceTargetRateFacet: { + name: "TransferAndLockSustainabilityPerformanceTargetRateFacet", resolverKey: { - name: "_SCHEDULED_SNAPSHOTS_RESOLVER_KEY", - value: "0x100f681e33d02a1124c2c05a537a1229eca89767c5e6e8720066ca74bfb85793", + name: "_TRANSFER_AND_LOCK_SUSTAINABILITY_PERFORMANCE_TARGET_RATE_RESOLVER_KEY", + value: "0x9d1e3f5a7b9c0d2e4f6a8b0c1d3e5f7a9b0c2d4e6f8a9b1c3d5e7f9a0b2c4d6e", }, - inheritance: ["ScheduledSnapshots", "IStaticFunctionSelectors"], + inheritance: ["TransferAndLockFacetBase", "CommonSustainabilityPerformanceTargetInterestRate"], methods: [ - { name: "getScheduledSnapshots", signature: "getScheduledSnapshots(uint256,uint256)", selector: "0xca21c53a" }, - { name: "scheduledSnapshotCount", signature: "scheduledSnapshotCount()", selector: "0xa19e91fe" }, + { + name: "transferAndLock", + signature: + "function transferAndLock(address _to, uint256 _amount, bytes _data, uint256 _expirationTimestamp) returns (bool success_, uint256 lockId_)", + selector: "0x0e92b90b", + }, + { + name: "transferAndLockByPartition", + signature: + "function transferAndLockByPartition(bytes32 _partition, address _to, uint256 _amount, bytes _data, uint256 _expirationTimestamp) returns (bool success_, uint256 lockId_)", + selector: "0x3bd407b9", + }, + ], + events: [ + { + name: "PartitionTransferredAndLocked", + signature: "PartitionTransferredAndLocked(bytes32,address,address,uint256,bytes,uint256,uint256)", + topic0: "0xc2b09c570c5d1b74fb7cc5594554d1aa9fe25ad5b037856dfd980f3bbe17dda9", + }, + ], + errors: [ + { name: "ExpirationNotReached", signature: "ExpirationNotReached()", selector: "0x92899bcd" }, + { + name: "InterestRateIsSustainabilityPerformanceTarget", + signature: "InterestRateIsSustainabilityPerformanceTarget()", + selector: "0x15a15b0a", + }, ], factory: (signer, useTimeTravel = false) => useTimeTravel - ? new ScheduledSnapshotsFacetTimeTravel__factory(signer) - : new ScheduledSnapshotsFacet__factory(signer), + ? new TransferAndLockSustainabilityPerformanceTargetRateFacetTimeTravel__factory(signer) + : new TransferAndLockSustainabilityPerformanceTargetRateFacet__factory(signer), }, +}; - SnapshotsFacet: { - name: "SnapshotsFacet", - resolverKey: { - name: "_SNAPSHOTS_RESOLVER_KEY", - value: "0x9a3fc46d83536ef6b87eb4fec37302bfd1a7c18e81ea2da853b911b44cf5b0cf", - }, - inheritance: ["Snapshots", "IStaticFunctionSelectors"], +/** + * Total number of facets in the registry. + */ +export const TOTAL_FACETS = 193 as const; + +/** + * Registry of non-facet infrastructure contracts (BusinessLogicResolver, Factory, etc.). + * These are core system contracts that are not Diamond facets. + */ +export const INFRASTRUCTURE_CONTRACTS: Record = { + BusinessLogicResolver: { + name: "BusinessLogicResolver", + inheritance: ["IBusinessLogicResolver", "DiamondCutManager"], methods: [ - { name: "balanceOfAtSnapshot", signature: "balanceOfAtSnapshot(uint256,address)", selector: "0x8e00ae2e" }, { - name: "balanceOfAtSnapshotByPartition", - signature: "balanceOfAtSnapshotByPartition(bytes32,uint256,address)", - selector: "0xe002bcdf", + name: "addSelectorsToBlacklist", + signature: "function addSelectorsToBlacklist(bytes32 _configurationId, bytes4[] _selectors)", + selector: "0xe87c5d71", }, { - name: "clearedBalanceOfAtSnapshot", - signature: "clearedBalanceOfAtSnapshot(uint256,address)", - selector: "0x2bc16e9b", + name: "applyRoles", + signature: "function applyRoles(bytes32[] _roles, bool[] _actives, address _account) returns (bool success_)", + selector: "0xfcfffeec", }, { - name: "clearedBalanceOfAtSnapshotByPartition", - signature: "clearedBalanceOfAtSnapshotByPartition(bytes32,uint256,address)", - selector: "0x386e1405", + name: "cancelBatchConfiguration", + signature: "function cancelBatchConfiguration(bytes32 _configurationId)", + selector: "0xc5977c1f", }, - { name: "decimalsAtSnapshot", signature: "decimalsAtSnapshot(uint256)", selector: "0x69ed346f" }, { - name: "frozenBalanceOfAtSnapshot", - signature: "frozenBalanceOfAtSnapshot(uint256,address)", - selector: "0x5e6c70ec", + name: "checkResolverProxyConfigurationRegistered", + signature: + "function checkResolverProxyConfigurationRegistered(bytes32 _configurationId, uint256 _version) view", + selector: "0xc595992a", }, { - name: "frozenBalanceOfAtSnapshotByPartition", - signature: "frozenBalanceOfAtSnapshotByPartition(bytes32,uint256,address)", - selector: "0x0749c323", + name: "createBatchConfiguration", + signature: + "function createBatchConfiguration(bytes32 _configurationId, tuple(bytes32 id, uint256 version)[] _facetConfigurations, bool _isLastBatch)", + selector: "0xf4ec1fe4", }, { - name: "getTokenHoldersAtSnapshot", - signature: "getTokenHoldersAtSnapshot(uint256,uint256,uint256)", - selector: "0xd22a73df", + name: "createConfiguration", + signature: + "function createConfiguration(bytes32 _configurationId, tuple(bytes32 id, uint256 version)[] _facetConfigurations)", + selector: "0xf4d2a095", }, { - name: "getTotalTokenHoldersAtSnapshot", - signature: "getTotalTokenHoldersAtSnapshot(uint256)", - selector: "0x867126e1", + name: "getBusinessLogicCount", + signature: "function getBusinessLogicCount() view returns (uint256 businessLogicCount_)", + selector: "0x8373989d", }, { - name: "heldBalanceOfAtSnapshot", - signature: "heldBalanceOfAtSnapshot(uint256,address)", - selector: "0xb52e39aa", + name: "getBusinessLogicKeys", + signature: + "function getBusinessLogicKeys(uint256 _pageIndex, uint256 _pageLength) view returns (bytes32[] businessLogicKeys_)", + selector: "0xe7e936ee", }, { - name: "heldBalanceOfAtSnapshotByPartition", - signature: "heldBalanceOfAtSnapshotByPartition(bytes32,uint256,address)", - selector: "0x977a3a71", + name: "getConfigurations", + signature: + "function getConfigurations(uint256 _pageIndex, uint256 _pageLength) view returns (bytes32[] configurationIds_)", + selector: "0xd826514c", }, { - name: "lockedBalanceOfAtSnapshot", - signature: "lockedBalanceOfAtSnapshot(uint256,address)", - selector: "0xd9e6f164", + name: "getConfigurationsLength", + signature: "function getConfigurationsLength() view returns (uint256 configurationsLength_)", + selector: "0x55ff30e3", }, { - name: "lockedBalanceOfAtSnapshotByPartition", - signature: "lockedBalanceOfAtSnapshotByPartition(bytes32,uint256,address)", - selector: "0x4a13f5d0", + name: "getFacetAddressByConfigurationIdVersionAndFacetId", + signature: + "function getFacetAddressByConfigurationIdVersionAndFacetId(bytes32 _configurationId, uint256 _version, bytes32 _facetId) view returns (address facetAddress_)", + selector: "0xcb17c131", }, - { name: "partitionsOfAtSnapshot", signature: "partitionsOfAtSnapshot(uint256,address)", selector: "0x09e84301" }, - { name: "takeSnapshot", signature: "takeSnapshot()", selector: "0xb3d3d37e" }, - { name: "totalSupplyAtSnapshot", signature: "totalSupplyAtSnapshot(uint256)", selector: "0xda35f8f6" }, { - name: "totalSupplyAtSnapshotByPartition", - signature: "totalSupplyAtSnapshotByPartition(bytes32,uint256)", - selector: "0x9657ddb9", + name: "getFacetAddressesByConfigurationIdAndVersion", + signature: + "function getFacetAddressesByConfigurationIdAndVersion(bytes32 _configurationId, uint256 _version, uint256 _pageIndex, uint256 _pageLength) view returns (address[] facetAddresses_)", + selector: "0x10933836", }, - ], - factory: (signer, useTimeTravel = false) => - useTimeTravel ? new SnapshotsFacetTimeTravel__factory(signer) : new SnapshotsFacet__factory(signer), - }, - - SsiManagementFacet: { - name: "SsiManagementFacet", - resolverKey: { - name: "_SSI_MANAGEMENT_RESOLVER_KEY", - value: "0x46df6aaf3742e0cbad136a74fb679b686e087dcc3a3d92d1c4ce2f3ef1b508a0", - }, - inheritance: ["SsiManagement", "IStaticFunctionSelectors"], - methods: [ - { name: "addIssuer", signature: "addIssuer(address)", selector: "0x20694db0" }, - { name: "getIssuerListCount", signature: "getIssuerListCount()", selector: "0x600b2940" }, - { name: "getIssuerListMembers", signature: "getIssuerListMembers(uint256,uint256)", selector: "0x25ab0545" }, - { name: "getRevocationRegistryAddress", signature: "getRevocationRegistryAddress()", selector: "0x12023976" }, - { name: "isIssuer", signature: "isIssuer(address)", selector: "0x877b9a67" }, - { name: "removeIssuer", signature: "removeIssuer(address)", selector: "0x47bc7093" }, { - name: "setRevocationRegistryAddress", - signature: "setRevocationRegistryAddress(address)", - selector: "0xbb3daeaf", + name: "getFacetByConfigurationIdVersionAndFacetId", + signature: + "function getFacetByConfigurationIdVersionAndFacetId(bytes32 _configurationId, uint256 _version, bytes32 _facetId) view returns (tuple(bytes32 id, address addr, bytes4[] selectors, bytes4[] interfaceIds) facet_)", + selector: "0x9e6030d1", }, - ], - events: [ { - name: "AddedToIssuerList", - signature: "AddedToIssuerList(address,address)", - topic0: "0xed6cc767c5020f64eb4771044d11fede90f485f88204a7f6d62fb608e5615ca8", + name: "getFacetIdByConfigurationIdVersionAndSelector", + signature: + "function getFacetIdByConfigurationIdVersionAndSelector(bytes32 _configurationId, uint256 _version, bytes4 _selector) view returns (bytes32 facetId_)", + selector: "0x6204479f", }, { - name: "RemovedFromIssuerList", - signature: "RemovedFromIssuerList(address,address)", - topic0: "0x98978a12ff5bdb777720d9d8bb2cdad050bdfbc2c467144649b14cdc45df52ba", + name: "getFacetIdsByConfigurationIdAndVersion", + signature: + "function getFacetIdsByConfigurationIdAndVersion(bytes32 _configurationId, uint256 _version, uint256 _pageIndex, uint256 _pageLength) view returns (bytes32[] facetIds_)", + selector: "0xe5ccd17c", }, { - name: "RevocationRegistryUpdated", - signature: "RevocationRegistryUpdated(address,address)", - topic0: "0x9b205171467d972c41c09cf31cce60bcca69d24714df66590528a49e9d9dcef7", + name: "getFacetSelectorsByConfigurationIdVersionAndFacetId", + signature: + "function getFacetSelectorsByConfigurationIdVersionAndFacetId(bytes32 _configurationId, uint256 _version, bytes32 _facetId, uint256 _pageIndex, uint256 _pageLength) view returns (bytes4[] facetSelectors_)", + selector: "0x45613a52", }, - ], - errors: [ - { name: "AccountIsNotIssuer", signature: "AccountIsNotIssuer(address)", selector: "0xcd324f53" }, - { name: "ListedIssuer", signature: "ListedIssuer(address)", selector: "0xcb2beece" }, - { name: "UnlistedIssuer", signature: "UnlistedIssuer(address)", selector: "0xd1243a92" }, - ], - factory: (signer, useTimeTravel = false) => - useTimeTravel ? new SsiManagementFacetTimeTravel__factory(signer) : new SsiManagementFacet__factory(signer), - }, - - TimeTravelFacet: { - name: "TimeTravelFacet", - resolverKey: { - name: "_TIME_TRAVEL_RESOLVER_KEY", - value: "0xba344464ddfb79287323340a7abdc770d353bd7dfd2695345419903dbb9918c8", - }, - inheritance: ["IStaticFunctionSelectors", "ITimeTravel", "TimeTravelStorageWrapper"], - methods: [ - { name: "blockTimestamp", signature: "blockTimestamp()", selector: "0xadb61832" }, - { name: "changeSystemBlocknumber", signature: "changeSystemBlocknumber(uint256)", selector: "0x4dd6b375" }, - { name: "changeSystemTimestamp", signature: "changeSystemTimestamp(uint256)", selector: "0xc0f0f67e" }, - { name: "checkBlockChainid", signature: "checkBlockChainid(uint256)", selector: "0xd939398c" }, - { name: "resetSystemBlocknumber", signature: "resetSystemBlocknumber()", selector: "0x64b677a4" }, - { name: "resetSystemTimestamp", signature: "resetSystemTimestamp()", selector: "0x8f145250" }, - ], - events: [ { - name: "SystemBlocknumberChanged", - signature: "SystemBlocknumberChanged(uint256,uint256)", - topic0: "0x96395610c0c23ab4b071bdeae9633f3d54760b0c64cc38868c72e80d6543b987", + name: "getFacetSelectorsLengthByConfigurationIdVersionAndFacetId", + signature: + "function getFacetSelectorsLengthByConfigurationIdVersionAndFacetId(bytes32 _configurationId, uint256 _version, bytes32 _facetId) view returns (uint256 facetSelectorsLength_)", + selector: "0xf1d3d2f9", }, { - name: "SystemBlocknumberReset", - signature: "SystemBlocknumberReset()", - topic0: "0x5e1c9b0e188d9a34c3abf05ea5456e54965689aff2ae15b6f1f549dd116e927f", + name: "getFacetsByConfigurationIdAndVersion", + signature: + "function getFacetsByConfigurationIdAndVersion(bytes32 _configurationId, uint256 _version, uint256 _pageIndex, uint256 _pageLength) view returns (tuple(bytes32 id, address addr, bytes4[] selectors, bytes4[] interfaceIds)[] facets_)", + selector: "0x6118ce2b", + }, + { + name: "getFacetsLengthByConfigurationIdAndVersion", + signature: + "function getFacetsLengthByConfigurationIdAndVersion(bytes32 _configurationId, uint256 _version) view returns (uint256 facetsLength_)", + selector: "0x45348bd8", }, { - name: "SystemTimestampChanged", - signature: "SystemTimestampChanged(uint256,uint256)", - topic0: "0x42ae45afbacb5d1779b65d1bf0fe5ed8ea40e9dd166cc8b80bcb3fa2daf222a1", + name: "getLatestVersion", + signature: "function getLatestVersion() view returns (uint256 latestVersion_)", + selector: "0x0e6d1de9", }, { - name: "SystemTimestampReset", - signature: "SystemTimestampReset()", - topic0: "0x93e7a31ca0d8810d390d6a3fc6ad83d230a5677c142d9aea7331a87794d11c11", + name: "getLatestVersionByConfiguration", + signature: + "function getLatestVersionByConfiguration(bytes32 _configurationId) view returns (uint256 latestVersion_)", + selector: "0x5bf316cf", }, - ], - errors: [ - { name: "ExpirationNotReached", signature: "ExpirationNotReached()", selector: "0x92899bcd" }, - { name: "InvalidBlocknumber", signature: "InvalidBlocknumber(uint256)", selector: "0x769a518c" }, - { name: "InvalidTimestamp", signature: "InvalidTimestamp(uint256)", selector: "0x25c20828" }, - { name: "WrongChainId", signature: "WrongChainId()", selector: "0x5f87bc00" }, - ], - factory: (signer) => new TimeTravelFacet__factory(signer), - }, - - TransferAndLockFacet: { - name: "TransferAndLockFacet", - resolverKey: { - name: "_TRANSFER_AND_LOCK_RESOLVER_KEY", - value: "0xd9b300e6bf7a143b8fd8cf1d4ab050e691c862bf0f57a7d49cc08c60efe68d08", - }, - inheritance: ["TransferAndLock", "IStaticFunctionSelectors"], - methods: [ { - name: "protectedTransferAndLock", - signature: "protectedTransferAndLock(TransferAndLockStruct,uint256,uint256,bytes)", - selector: "0xaf33faac", + name: "getRoleCountFor", + signature: "function getRoleCountFor(address _account) view returns (uint256 roleCount_)", + selector: "0x8fa9b4fe", }, { - name: "protectedTransferAndLockByPartition", - signature: "protectedTransferAndLockByPartition(bytes32,TransferAndLockStruct,uint256,uint256,bytes)", - selector: "0xbd2951ce", + name: "getRoleMemberCount", + signature: "function getRoleMemberCount(bytes32 _role) view returns (uint256 memberCount_)", + selector: "0xca15c873", }, - { name: "transferAndLock", signature: "transferAndLock(address,uint256,bytes,uint256)", selector: "0x0e92b90b" }, { - name: "transferAndLockByPartition", - signature: "transferAndLockByPartition(bytes32,address,uint256,bytes,uint256)", - selector: "0x3bd407b9", + name: "getRoleMembers", + signature: + "function getRoleMembers(bytes32 _role, uint256 _pageIndex, uint256 _pageLength) view returns (address[] members_)", + selector: "0x2a861f57", }, - ], - factory: (signer, useTimeTravel = false) => - useTimeTravel ? new TransferAndLockFacetTimeTravel__factory(signer) : new TransferAndLockFacet__factory(signer), - }, -}; - -/** - * Total number of facets in the registry. - */ -export const TOTAL_FACETS = 49 as const; - -/** - * Registry of non-facet infrastructure contracts (BusinessLogicResolver, Factory, etc.). - * These are core system contracts that are not Diamond facets. - */ -export const INFRASTRUCTURE_CONTRACTS: Record = { - BusinessLogicResolver: { - name: "BusinessLogicResolver", - inheritance: ["IBusinessLogicResolver", "DiamondCutManager"], - methods: [ { - name: "addSelectorsToBlacklist", - signature: "addSelectorsToBlacklist(bytes32,bytes4[])", - selector: "0xe87c5d71", + name: "getRolesFor", + signature: + "function getRolesFor(address _account, uint256 _pageIndex, uint256 _pageLength) view returns (bytes32[] roles_)", + selector: "0xa28cf9a9", }, - { name: "getBusinessLogicCount", signature: "getBusinessLogicCount()", selector: "0x8373989d" }, - { name: "getBusinessLogicKeys", signature: "getBusinessLogicKeys(uint256,uint256)", selector: "0xe7e936ee" }, - { name: "getLatestVersion", signature: "getLatestVersion()", selector: "0x0e6d1de9" }, { name: "getSelectorsBlacklist", - signature: "getSelectorsBlacklist(bytes32,uint256,uint256)", + signature: + "function getSelectorsBlacklist(bytes32 _configurationId, uint256 _pageIndex, uint256 _pageLength) view returns (bytes4[] selectors_)", selector: "0xbf3af9ea", }, - { name: "getVersionStatus", signature: "getVersionStatus(uint256)", selector: "0x65b24dfc" }, + { + name: "getVersionStatus", + signature: "function getVersionStatus(uint256 _version) view returns (uint8 status_)", + selector: "0x65b24dfc", + }, + { + name: "grantRole", + signature: "function grantRole(bytes32 _role, address _account) returns (bool success_)", + selector: "0x2f2ff15d", + }, + { + name: "hasRole", + signature: "function hasRole(bytes32 _role, address _account) view returns (bool)", + selector: "0x91d14854", + }, { name: "initialize_BusinessLogicResolver", - signature: "initialize_BusinessLogicResolver()", + signature: "function initialize_BusinessLogicResolver() returns (bool success_)", selector: "0xb86ffa1a", }, + { name: "isPaused", signature: "function isPaused() view returns (bool)", selector: "0xb187bd26" }, + { + name: "isResolverProxyConfigurationRegistered", + signature: + "function isResolverProxyConfigurationRegistered(bytes32 _configurationId, uint256 _version) view returns (bool isRegistered_)", + selector: "0x2b85c192", + }, + { name: "pause", signature: "function pause() returns (bool success_)", selector: "0x8456cb59" }, { name: "registerBusinessLogics", - signature: "registerBusinessLogics(BusinessLogicRegistryData[])", - selector: "0x6302f4c4", + signature: + "function registerBusinessLogics(tuple(bytes32 businessLogicKey, address businessLogicAddress)[] _businessLogics)", + selector: "0xb0f57ddb", }, { name: "removeSelectorsFromBlacklist", - signature: "removeSelectorsFromBlacklist(bytes32,bytes4[])", + signature: "function removeSelectorsFromBlacklist(bytes32 _configurationId, bytes4[] _selectors)", selector: "0xcccae751", }, + { + name: "renounceRole", + signature: "function renounceRole(bytes32 _role) returns (bool success_)", + selector: "0x8bb9c5bf", + }, { name: "resolveBusinessLogicByVersion", - signature: "resolveBusinessLogicByVersion(bytes32,uint256)", + signature: + "function resolveBusinessLogicByVersion(bytes32 _businessLogicKey, uint256 _version) view returns (address businessLogicAddress_)", selector: "0x9f77ad81", }, - { name: "resolveLatestBusinessLogic", signature: "resolveLatestBusinessLogic(bytes32)", selector: "0xbbced3bb" }, + { + name: "resolveLatestBusinessLogic", + signature: + "function resolveLatestBusinessLogic(bytes32 _businessLogicKey) view returns (address businessLogicAddress_)", + selector: "0xbbced3bb", + }, + { + name: "resolveResolverProxyCall", + signature: + "function resolveResolverProxyCall(bytes32 _configurationId, uint256 _version, bytes4 _selector) view returns (address facetAddress_)", + selector: "0xb9ec2620", + }, + { + name: "resolveSupportsInterface", + signature: + "function resolveSupportsInterface(bytes32 _configurationId, uint256 _version, bytes4 _interfaceId) view returns (bool exists_)", + selector: "0x99ecdbd0", + }, + { + name: "revokeRole", + signature: "function revokeRole(bytes32 _role, address _account) returns (bool success_)", + selector: "0xd547741f", + }, + { name: "unpause", signature: "function unpause() returns (bool success_)", selector: "0x3f4ba83a" }, ], errors: [{ name: "Unimplemented", signature: "Unimplemented()", selector: "0x6e128399" }], }, Factory: { name: "Factory", - inheritance: ["IFactory", "LocalContext"], + inheritance: ["IFactory", "Common"], methods: [ - { name: "deployBond", signature: "deployBond(BondData,FactoryRegulationData)", selector: "0x5010503b" }, - { name: "deployEquity", signature: "deployEquity(EquityData,FactoryRegulationData)", selector: "0x7c03575b" }, + { + name: "deployBond", + signature: + "function deployBond(tuple(tuple(bool arePartitionsProtected, bool isMultiPartition, address resolver, tuple(bytes32 key, uint256 version) resolverProxyConfiguration, tuple(bytes32 role, address[] members)[] rbacs, bool isControllable, bool isWhiteList, uint256 maxSupply, tuple(string name, string symbol, string isin, uint8 decimals) erc20MetadataInfo, bool clearingActive, bool internalKycActivated, address[] externalPauses, address[] externalControlLists, address[] externalKycLists, bool erc20VotesActivated, address compliance, address identityRegistry) security, tuple(bytes3 currency, uint256 nominalValue, uint8 nominalValueDecimals, uint256 startingDate, uint256 maturityDate) bondDetails, address[] proceedRecipients, bytes[] proceedRecipientsData) _bondData, tuple(uint8 regulationType, uint8 regulationSubType, tuple(bool countriesControlListType, string listOfCountries, string info) additionalSecurityData) _factoryRegulationData) returns (address bondAddress_)", + selector: "0x5133f0e0", + }, + { + name: "deployBondFixedRate", + signature: + "function deployBondFixedRate(tuple(tuple(tuple(bool arePartitionsProtected, bool isMultiPartition, address resolver, tuple(bytes32 key, uint256 version) resolverProxyConfiguration, tuple(bytes32 role, address[] members)[] rbacs, bool isControllable, bool isWhiteList, uint256 maxSupply, tuple(string name, string symbol, string isin, uint8 decimals) erc20MetadataInfo, bool clearingActive, bool internalKycActivated, address[] externalPauses, address[] externalControlLists, address[] externalKycLists, bool erc20VotesActivated, address compliance, address identityRegistry) security, tuple(bytes3 currency, uint256 nominalValue, uint8 nominalValueDecimals, uint256 startingDate, uint256 maturityDate) bondDetails, address[] proceedRecipients, bytes[] proceedRecipientsData) bondData, tuple(uint8 regulationType, uint8 regulationSubType, tuple(bool countriesControlListType, string listOfCountries, string info) additionalSecurityData) factoryRegulationData, tuple(uint256 rate, uint8 rateDecimals) fixedRateData) _bondFixedRateData) returns (address bondAddress_)", + selector: "0x7c55cfdc", + }, + { + name: "deployBondKpiLinkedRate", + signature: + "function deployBondKpiLinkedRate(tuple(tuple(tuple(bool arePartitionsProtected, bool isMultiPartition, address resolver, tuple(bytes32 key, uint256 version) resolverProxyConfiguration, tuple(bytes32 role, address[] members)[] rbacs, bool isControllable, bool isWhiteList, uint256 maxSupply, tuple(string name, string symbol, string isin, uint8 decimals) erc20MetadataInfo, bool clearingActive, bool internalKycActivated, address[] externalPauses, address[] externalControlLists, address[] externalKycLists, bool erc20VotesActivated, address compliance, address identityRegistry) security, tuple(bytes3 currency, uint256 nominalValue, uint8 nominalValueDecimals, uint256 startingDate, uint256 maturityDate) bondDetails, address[] proceedRecipients, bytes[] proceedRecipientsData) bondData, tuple(uint8 regulationType, uint8 regulationSubType, tuple(bool countriesControlListType, string listOfCountries, string info) additionalSecurityData) factoryRegulationData, tuple(uint256 maxRate, uint256 baseRate, uint256 minRate, uint256 startPeriod, uint256 startRate, uint256 missedPenalty, uint256 reportPeriod, uint8 rateDecimals) interestRate, tuple(uint256 maxDeviationCap, uint256 baseLine, uint256 maxDeviationFloor, uint8 impactDataDecimals, uint256 adjustmentPrecision) impactData, address kpiOracle) _bondKpiLinkedRateData) returns (address bondAddress_)", + selector: "0x16a2b067", + }, + { + name: "deployBondSustainabilityPerformanceTargetRate", + signature: + "function deployBondSustainabilityPerformanceTargetRate(tuple(tuple(tuple(bool arePartitionsProtected, bool isMultiPartition, address resolver, tuple(bytes32 key, uint256 version) resolverProxyConfiguration, tuple(bytes32 role, address[] members)[] rbacs, bool isControllable, bool isWhiteList, uint256 maxSupply, tuple(string name, string symbol, string isin, uint8 decimals) erc20MetadataInfo, bool clearingActive, bool internalKycActivated, address[] externalPauses, address[] externalControlLists, address[] externalKycLists, bool erc20VotesActivated, address compliance, address identityRegistry) security, tuple(bytes3 currency, uint256 nominalValue, uint8 nominalValueDecimals, uint256 startingDate, uint256 maturityDate) bondDetails, address[] proceedRecipients, bytes[] proceedRecipientsData) bondData, tuple(uint8 regulationType, uint8 regulationSubType, tuple(bool countriesControlListType, string listOfCountries, string info) additionalSecurityData) factoryRegulationData, tuple(uint256 baseRate, uint256 startPeriod, uint256 startRate, uint8 rateDecimals) interestRate, tuple(uint256 baseLine, uint8 baseLineMode, uint256 deltaRate, uint8 impactDataMode)[] impactData, address[] projects) _bondSustainabilityPerformanceTargetRateData) returns (address bondAddress_)", + selector: "0x5bdc1ceb", + }, + { + name: "deployEquity", + signature: + "function deployEquity(tuple(tuple(bool arePartitionsProtected, bool isMultiPartition, address resolver, tuple(bytes32 key, uint256 version) resolverProxyConfiguration, tuple(bytes32 role, address[] members)[] rbacs, bool isControllable, bool isWhiteList, uint256 maxSupply, tuple(string name, string symbol, string isin, uint8 decimals) erc20MetadataInfo, bool clearingActive, bool internalKycActivated, address[] externalPauses, address[] externalControlLists, address[] externalKycLists, bool erc20VotesActivated, address compliance, address identityRegistry) security, tuple(bool votingRight, bool informationRight, bool liquidationRight, bool subscriptionRight, bool conversionRight, bool redemptionRight, bool putRight, uint8 dividendRight, bytes3 currency, uint256 nominalValue, uint8 nominalValueDecimals) equityDetails) _equityData, tuple(uint8 regulationType, uint8 regulationSubType, tuple(bool countriesControlListType, string listOfCountries, string info) additionalSecurityData) _factoryRegulationData) returns (address equityAddress_)", + selector: "0xfb3c59d8", + }, { name: "getAppliedRegulationData", - signature: "getAppliedRegulationData(RegulationType,RegulationSubType)", - selector: "0x7a0191e3", + signature: + "function getAppliedRegulationData(uint8 _regulationType, uint8 _regulationSubType) pure returns (tuple(uint8 regulationType, uint8 regulationSubType, uint256 dealSize, uint8 accreditedInvestors, uint256 maxNonAccreditedInvestors, uint8 manualInvestorVerification, uint8 internationalInvestors, uint8 resaleHoldPeriod) regulationData_)", + selector: "0x7b5208d0", }, ], }, @@ -2238,878 +11960,725 @@ export const TOTAL_INFRASTRUCTURE_CONTRACTS = 2 as const; export const STORAGE_WRAPPER_REGISTRY: Record = { AccessControlStorageWrapper: { name: "AccessControlStorageWrapper", - inheritance: ["IAccessControlStorageWrapper", "LocalContext", "BusinessLogicResolverWrapper"], - methods: [ - { name: "_applyRoles", signature: "_applyRoles(bytes32[],bool[],address)", selector: "0xb4628c56" }, - { name: "_checkAnyRole", signature: "_checkAnyRole(bytes32[],address)", selector: "0xe066fd1b" }, - { name: "_checkRole", signature: "_checkRole(bytes32,address)", selector: "0x5b7b2c38" }, - { - name: "_checkSameRolesAndActivesLength", - signature: "_checkSameRolesAndActivesLength(uint256,uint256)", - selector: "0x61b5dd02", - }, - { name: "_getRoleAdmin", signature: "_getRoleAdmin(bytes32)", selector: "0x2ec227cd" }, - { name: "_getRoleCountFor", signature: "_getRoleCountFor(address)", selector: "0x2044d9ad" }, - { name: "_getRoleMemberCount", signature: "_getRoleMemberCount(bytes32)", selector: "0xa313bee3" }, - { name: "_getRoleMembers", signature: "_getRoleMembers(bytes32,uint256,uint256)", selector: "0xd8d2aeb8" }, - { name: "_getRolesFor", signature: "_getRolesFor(address,uint256,uint256)", selector: "0x9984117f" }, - { name: "_grant", signature: "_grant(RoleDataStorage,bytes32,address)", selector: "0xea3bbdd8" }, - { name: "_grantRole", signature: "_grantRole(bytes32,address)", selector: "0xce2cc1d0" }, - { name: "_has", signature: "_has(RoleDataStorage,bytes32,address)", selector: "0xd74566ee" }, - { name: "_hasAnyRole", signature: "_hasAnyRole(bytes32[],address)", selector: "0x27adf61d" }, - { name: "_hasRole", signature: "_hasRole(bytes32,address)", selector: "0x1cd1731c" }, - { name: "_remove", signature: "_remove(RoleDataStorage,bytes32,address)", selector: "0xe4e0818e" }, - { name: "_revokeRole", signature: "_revokeRole(bytes32,address)", selector: "0x2c95bd23" }, - { name: "_rolesStorage", signature: "_rolesStorage()", selector: "0xd7b699df" }, - ], + inheritance: ["IAccessControlStorageWrapper", "ResolverProxyStorageWrapper", "BusinessLogicResolverWrapper"], + methods: [], }, BondStorageWrapper: { name: "BondStorageWrapper", inheritance: ["IBondStorageWrapper", "ERC20PermitStorageWrapper"], - methods: [ - { name: "_bondStorage", signature: "_bondStorage()", selector: "0x64ccfd52" }, - { name: "_checkMaturityDate", signature: "_checkMaturityDate(uint256)", selector: "0xb9a83231" }, - { name: "_getBondDetails", signature: "_getBondDetails()", selector: "0xdfa65894" }, - { name: "_getCoupon", signature: "_getCoupon(uint256)", selector: "0x39b68379" }, - { name: "_getCouponAmountFor", signature: "_getCouponAmountFor(uint256,address)", selector: "0xe744f18d" }, - { name: "_getCouponCount", signature: "_getCouponCount()", selector: "0x293fbc5a" }, - { name: "_getCouponFor", signature: "_getCouponFor(uint256,address)", selector: "0x2abd54cf" }, - { name: "_getCouponHolders", signature: "_getCouponHolders(uint256,uint256,uint256)", selector: "0xb2962e11" }, - { name: "_getMaturityDate", signature: "_getMaturityDate()", selector: "0xa1522f44" }, - { name: "_getPrincipalFor", signature: "_getPrincipalFor(address)", selector: "0xc8e42efe" }, - { name: "_getTotalCouponHolders", signature: "_getTotalCouponHolders(uint256)", selector: "0xfba7a1ab" }, - { name: "_initCoupon", signature: "_initCoupon(bool,bytes32,bytes)", selector: "0x744faa4f" }, - { name: "_setCoupon", signature: "_setCoupon(IBondRead.Coupon)", selector: "0xf9d474a4" }, - { name: "_setMaturityDate", signature: "_setMaturityDate(uint256)", selector: "0x1c73e162" }, - { name: "_storeBondDetails", signature: "_storeBondDetails(IBondRead.BondDetailsData)", selector: "0x9b11f1cd" }, + methods: [], + }, + + BondStorageWrapperFixedInterestRate: { + name: "BondStorageWrapperFixedInterestRate", + inheritance: ["InternalsFixedInterestRate", "Common"], + methods: [], + errors: [{ name: "InterestRateIsFixed", signature: "InterestRateIsFixed()", selector: "0x849d4eb8" }], + }, + + BondStorageWrapperKpiLinkedInterestRate: { + name: "BondStorageWrapperKpiLinkedInterestRate", + inheritance: ["InternalsKpiLinkedInterestRate", "BondStorageWrapperFixingDateInterestRate"], + methods: [], + errors: [{ name: "InterestRateIsKpiLinked", signature: "InterestRateIsKpiLinked()", selector: "0x68eba14f" }], + }, + + BondStorageWrapperSustainabilityPerformanceTargetInterestRate: { + name: "BondStorageWrapperSustainabilityPerformanceTargetInterestRate", + inheritance: ["ProceedRecipientsStorageWrapperSustainabilityPerformanceTargetInterestRate"], + methods: [], + errors: [ + { + name: "InterestRateIsSustainabilityPerformanceTarget", + signature: "InterestRateIsSustainabilityPerformanceTarget()", + selector: "0x15a15b0a", + }, ], }, ControlListStorageWrapper: { name: "ControlListStorageWrapper", inheritance: ["IControlListStorageWrapper", "ExternalControlListManagementStorageWrapper"], - methods: [ - { name: "_addToControlList", signature: "_addToControlList(address)", selector: "0xa5908e16" }, - { name: "_checkControlList", signature: "_checkControlList(address)", selector: "0xaf8bea2e" }, - { name: "_controlListStorage", signature: "_controlListStorage()", selector: "0xa58e5348" }, - { name: "_getControlListCount", signature: "_getControlListCount()", selector: "0xa9577198" }, - { name: "_getControlListMembers", signature: "_getControlListMembers(uint256,uint256)", selector: "0x2591bd58" }, - { name: "_getControlListType", signature: "_getControlListType()", selector: "0x5831dfcf" }, - { name: "_isAbleToAccess", signature: "_isAbleToAccess(address)", selector: "0xff55072e" }, - { name: "_isInControlList", signature: "_isInControlList(address)", selector: "0xcb2e0d1b" }, - { name: "_removeFromControlList", signature: "_removeFromControlList(address)", selector: "0x00f0016e" }, - ], + methods: [], }, CorporateActionsStorageWrapper: { name: "CorporateActionsStorageWrapper", inheritance: ["ClearingStorageWrapper1"], - methods: [ - { name: "_addCorporateAction", signature: "_addCorporateAction(bytes32,bytes)", selector: "0xb2a57bb4" }, - { name: "_checkDates", signature: "_checkDates(uint256,uint256)", selector: "0x970b0e20" }, + methods: [], + }, + + EquityStorageWrapper: { + name: "EquityStorageWrapper", + inheritance: ["IEquityStorageWrapper", "BondStorageWrapper"], + methods: [], + }, + + ERC1410BasicStorageWrapper: { + name: "ERC1410BasicStorageWrapper", + inheritance: ["IERC1410StorageWrapper", "ERC20StorageWrapper1"], + methods: [], + }, + + ERC1410OperatorStorageWrapper: { + name: "ERC1410OperatorStorageWrapper", + inheritance: ["ERC1410BasicStorageWrapper"], + methods: [], + }, + + ERC1410ProtectedPartitionsStorageWrapper: { + name: "ERC1410ProtectedPartitionsStorageWrapper", + inheritance: ["ERC1644StorageWrapper"], + methods: [], + }, + + ERC1410StandardStorageWrapper: { + name: "ERC1410StandardStorageWrapper", + inheritance: ["ERC1410OperatorStorageWrapper"], + methods: [], + }, + + ERC1594StorageWrapper: { + name: "ERC1594StorageWrapper", + inheritance: ["IERC1594StorageWrapper", "CapStorageWrapper2"], + methods: [], + }, + + ERC1644StorageWrapper: { + name: "ERC1644StorageWrapper", + inheritance: ["IERC1644StorageWrapper", "ERC3643StorageWrapper2"], + methods: [], + }, + + ERC20PermitStorageWrapper: { + name: "ERC20PermitStorageWrapper", + inheritance: ["ERC20VotesStorageWrapper"], + methods: [], + }, + + ERC20VotesStorageWrapper: { + name: "ERC20VotesStorageWrapper", + inheritance: ["ERC1594StorageWrapper"], + methods: [], + events: [ { - name: "_checkMatchingActionType", - signature: "_checkMatchingActionType(bytes32,uint256)", - selector: "0xdc6505eb", + name: "DelegateChanged", + signature: "DelegateChanged(address,address,address)", + topic0: "0x3134e8a2e6d97e929a7e54011ea5485d7d196dd5f0ba4d4ef95803e8e3fc257f", }, - { name: "_corporateActionsStorage", signature: "_corporateActionsStorage()", selector: "0x327c5438" }, - { name: "_getCorporateAction", signature: "_getCorporateAction(bytes32)", selector: "0x7905b020" }, - { name: "_getCorporateActionCount", signature: "_getCorporateActionCount()", selector: "0x284c2e17" }, { - name: "_getCorporateActionCountByType", - signature: "_getCorporateActionCountByType(bytes32)", - selector: "0xcdef9970", + name: "DelegateVotesChanged", + signature: "DelegateVotesChanged(address,uint256,uint256)", + topic0: "0xdec2bacdd2f05b59de34da9b523dff8be42e5e38e818c82fdb0bae774387a724", }, - { name: "_getCorporateActionData", signature: "_getCorporateActionData(bytes32)", selector: "0x1b957d68" }, - { name: "_getCorporateActionIds", signature: "_getCorporateActionIds(uint256,uint256)", selector: "0x27b71643" }, + ], + }, + + ExternalControlListManagementStorageWrapper: { + name: "ExternalControlListManagementStorageWrapper", + inheritance: ["ProtectedPartitionsStorageWrapper"], + methods: [], + }, + + ExternalKycListManagementStorageWrapper: { + name: "ExternalKycListManagementStorageWrapper", + inheritance: ["ExternalListManagementStorageWrapper"], + methods: [], + }, + + ExternalListManagementStorageWrapper: { + name: "ExternalListManagementStorageWrapper", + inheritance: ["SsiManagementStorageWrapper"], + methods: [], + errors: [{ name: "ZeroAddressNotAllowed", signature: "ZeroAddressNotAllowed()", selector: "0x8579befe" }], + }, + + ExternalPauseManagementStorageWrapper: { + name: "ExternalPauseManagementStorageWrapper", + inheritance: ["ControlListStorageWrapper"], + methods: [], + }, + + FixedRateStorageWrapper: { + name: "FixedRateStorageWrapper", + inheritance: ["SustainabilityPerformanceTargetRateStorageWrapper"], + methods: [], + }, + + IAccessControlStorageWrapper: { + name: "IAccessControlStorageWrapper", + methods: [], + events: [ { - name: "_getCorporateActionIdsByType", - signature: "_getCorporateActionIdsByType(bytes32,uint256,uint256)", - selector: "0x4875409d", + name: "RoleAdminChanged", + signature: "RoleAdminChanged(bytes32,bytes32,bytes32)", + topic0: "0xbd79b86ffe0ab8e8776151514217cd7cacd52c909f66475c3af44e129f0b00ff", }, + ], + errors: [ + { name: "AccountHasNoRole", signature: "AccountHasNoRole(address,bytes32)", selector: "0xa1180aad" }, + { name: "AccountHasNoRoles", signature: "AccountHasNoRoles(address,bytes32[])", selector: "0x90e55392" }, { - name: "_getCorporateActionResult", - signature: "_getCorporateActionResult(bytes32,uint256)", - selector: "0x1ec609e1", + name: "RolesAndActivesLengthMismatch", + signature: "RolesAndActivesLengthMismatch(uint256,uint256)", + selector: "0x365ff1a4", }, + ], + }, + + IAdjustBalancesStorageWrapper: { + name: "IAdjustBalancesStorageWrapper", + methods: [], + events: [ { - name: "_getCorporateActionResultCount", - signature: "_getCorporateActionResultCount(bytes32)", - selector: "0x136c8ba2", + name: "AdjustmentBalanceSet", + signature: "AdjustmentBalanceSet(address,uint256,uint8)", + topic0: "0x312510931206ef5f91f1ef19e1a01253812b7201fb8b2d5d4afa056cce53e34a", }, - { name: "_getUintResultAt", signature: "_getUintResultAt(bytes32,uint256)", selector: "0xcef779ad" }, + ], + errors: [{ name: "FactorIsZero", signature: "FactorIsZero()", selector: "0x936e9b6d" }], + }, + + IBondStorageWrapper: { + name: "IBondStorageWrapper", + methods: [], + events: [ { - name: "_updateCorporateActionResult", - signature: "_updateCorporateActionResult(bytes32,uint256,bytes)", - selector: "0x626cff9a", + name: "CouponSet", + signature: "CouponSet(bytes32,uint256,address,IBondRead.Coupon)", + topic0: "0x1d6989dd898a107b9d5cee785b926348c7339560721a818c4013b3cca11c137f", }, ], + errors: [ + { name: "BondMaturityDateWrong", signature: "BondMaturityDateWrong()", selector: "0x67d08758" }, + { name: "CouponCreationFailed", signature: "CouponCreationFailed()", selector: "0x3a11c78b" }, + ], }, - EquityStorageWrapper: { - name: "EquityStorageWrapper", - inheritance: ["IEquityStorageWrapper", "BondStorageWrapper"], - methods: [ - { name: "_equityStorage", signature: "_equityStorage()", selector: "0xd722ce84" }, - { name: "_getDividendAmountFor", signature: "_getDividendAmountFor(uint256,address)", selector: "0xd35ad27b" }, + ICapStorageWrapper: { + name: "ICapStorageWrapper", + methods: [], + events: [ { - name: "_getDividendHolders", - signature: "_getDividendHolders(uint256,uint256,uint256)", - selector: "0x64527984", + name: "MaxSupplyByPartitionSet", + signature: "MaxSupplyByPartitionSet(address,bytes32,uint256,uint256)", + topic0: "0x9c0c8826170fa45c79bf64a2913df8ccc3e77407aba502d85946253332a4d749", }, - { name: "_getDividends", signature: "_getDividends(uint256)", selector: "0x7aa532eb" }, - { name: "_getDividendsCount", signature: "_getDividendsCount()", selector: "0xd55edb1c" }, - { name: "_getDividendsFor", signature: "_getDividendsFor(uint256,address)", selector: "0x5a1270c7" }, - { name: "_getEquityDetails", signature: "_getEquityDetails()", selector: "0x3571999f" }, { - name: "_getScheduledBalanceAdjusment", - signature: "_getScheduledBalanceAdjusment(uint256)", - selector: "0xb2106163", + name: "MaxSupplySet", + signature: "MaxSupplySet(address,uint256,uint256)", + topic0: "0xccc3b7560f9d81f26c619129ba9fa74ded9a6edb555a04655baaeca673e0a809", }, + ], + errors: [ + { name: "MaxSupplyReached", signature: "MaxSupplyReached(uint256)", selector: "0xf9f84915" }, { - name: "_getScheduledBalanceAdjustmentsCount", - signature: "_getScheduledBalanceAdjustmentsCount()", - selector: "0xa1387389", + name: "MaxSupplyReachedForPartition", + signature: "MaxSupplyReachedForPartition(bytes32,uint256)", + selector: "0x57c004a9", }, { - name: "_getSnapshotBalanceForIfDateReached", - signature: "_getSnapshotBalanceForIfDateReached(uint256,uint256,address)", - selector: "0x7c51c4f3", + name: "NewMaxSupplyByPartitionTooHigh", + signature: "NewMaxSupplyByPartitionTooHigh(bytes32,uint256,uint256)", + selector: "0x21aa64a7", }, - { name: "_getTotalDividendHolders", signature: "_getTotalDividendHolders(uint256)", selector: "0x21ec1ebd" }, - { name: "_getTotalVotingHolders", signature: "_getTotalVotingHolders(uint256)", selector: "0xafc8970d" }, - { name: "_getVoting", signature: "_getVoting(uint256)", selector: "0x5be81dd8" }, - { name: "_getVotingCount", signature: "_getVotingCount()", selector: "0x76255491" }, - { name: "_getVotingFor", signature: "_getVotingFor(uint256,address)", selector: "0xe43142ce" }, - { name: "_getVotingHolders", signature: "_getVotingHolders(uint256,uint256,uint256)", selector: "0x60b33e03" }, + { name: "NewMaxSupplyCannotBeZero", signature: "NewMaxSupplyCannotBeZero()", selector: "0x76f138fb" }, { - name: "_initBalanceAdjustment", - signature: "_initBalanceAdjustment(bool,bytes32,bytes)", - selector: "0x4910464f", + name: "NewMaxSupplyForPartitionTooLow", + signature: "NewMaxSupplyForPartitionTooLow(bytes32,uint256,uint256)", + selector: "0x820c68a8", }, - { name: "_initDividend", signature: "_initDividend(bool,bytes32,bytes)", selector: "0x89c22cef" }, - { name: "_initVotingRights", signature: "_initVotingRights(bool,bytes32,bytes)", selector: "0xdd9c8705" }, - { name: "_setDividends", signature: "_setDividends(IEquity.Dividend)", selector: "0x1433fb7c" }, + { name: "NewMaxSupplyTooLow", signature: "NewMaxSupplyTooLow(uint256,uint256)", selector: "0x98c2b03b" }, + ], + }, + + IClearingStorageWrapper: { + name: "IClearingStorageWrapper", + methods: [], + events: [ { - name: "_setScheduledBalanceAdjustment", - signature: "_setScheduledBalanceAdjustment(IEquity.ScheduledBalanceAdjustment)", - selector: "0x417ebf51", + name: "ClearedHoldByPartition", + signature: "ClearedHoldByPartition(address,address,bytes32,uint256,Hold,uint256,bytes,bytes)", + topic0: "0xecba87eb6d871a001547362d9a9bb69ae25dd165858d73fe5cc600a705f3f3a0", }, - { name: "_setVoting", signature: "_setVoting(IEquity.Voting)", selector: "0xfb29cb04" }, { - name: "_storeEquityDetails", - signature: "_storeEquityDetails(IEquity.EquityDetailsData)", - selector: "0xd2a1d568", + name: "ClearedHoldFromByPartition", + signature: "ClearedHoldFromByPartition(address,address,bytes32,uint256,Hold,uint256,bytes,bytes)", + topic0: "0xc8f249767e17c28ab7d211bf631a717a0ee7f840405af4618f625a7659bf7f63", }, - ], - }, - - ERC1410BasicStorageWrapper: { - name: "ERC1410BasicStorageWrapper", - inheritance: ["IERC1410StorageWrapper", "ERC20StorageWrapper1"], - methods: [ - { name: "_addPartitionTo", signature: "_addPartitionTo(uint256,address,bytes32)", selector: "0x3c1a5e22" }, { - name: "_afterTokenTransfer", - signature: "_afterTokenTransfer(bytes32,address,address,uint256)", - selector: "0x91823775", + name: "ClearedOperatorHoldByPartition", + signature: "ClearedOperatorHoldByPartition(address,address,bytes32,uint256,Hold,uint256,bytes,bytes)", + topic0: "0xa9683588d7eb6dd41a2a62f56bd396a439f9e506ac7ca2efa031bcc5f99b4651", }, { - name: "_beforeTokenTransfer", - signature: "_beforeTokenTransfer(bytes32,address,address,uint256)", - selector: "0x594330fa", + name: "ClearedOperatorRedeemByPartition", + signature: "ClearedOperatorRedeemByPartition(address,address,bytes32,uint256,uint256,uint256,bytes,bytes)", + topic0: "0xfec64ec403134db0b1e479976a765b3e364f24c765f7c73ce9bf4b31e13ed3c8", }, { - name: "_transferByPartition", - signature: "_transferByPartition(address,BasicTransferInfo,bytes32,bytes,address,bytes)", - selector: "0xf860e9b7", + name: "ClearedOperatorTransferByPartition", + signature: + "ClearedOperatorTransferByPartition(address,address,address,bytes32,uint256,uint256,uint256,bytes,bytes)", + topic0: "0x8d9578064c4e2cadfe39cab8d79866d9e1c16956b958c6cbaedcec51f80d234a", + }, + { + name: "ClearedRedeemByPartition", + signature: "ClearedRedeemByPartition(address,address,bytes32,uint256,uint256,uint256,bytes,bytes)", + topic0: "0x7aaaa46250ad330b8cea62db34f608101d55300f94dd9b5ddbe83142bb51dc5f", + }, + { + name: "ClearedRedeemFromByPartition", + signature: "ClearedRedeemFromByPartition(address,address,bytes32,uint256,uint256,uint256,bytes,bytes)", + topic0: "0x376e6c31cfecec25cc3fede988557cb98dee3c5ffa5976b48a0b614b84c45d79", + }, + { + name: "ClearedTransferByPartition", + signature: "ClearedTransferByPartition(address,address,address,bytes32,uint256,uint256,uint256,bytes,bytes)", + topic0: "0x3d9505d4e04c873230c8ad112ce725e8338ab4fa6c98a7699ea41d4d63c2758f", }, - ], - }, - - ERC1410OperatorStorageWrapper: { - name: "ERC1410OperatorStorageWrapper", - inheritance: ["ERC1410BasicStorageWrapper"], - methods: [ - { name: "_authorizeOperator", signature: "_authorizeOperator(address)", selector: "0x8f08a5cf" }, { - name: "_authorizeOperatorByPartition", - signature: "_authorizeOperatorByPartition(bytes32,address)", - selector: "0x0bc9aef3", + name: "ClearedTransferFromByPartition", + signature: + "ClearedTransferFromByPartition(address,address,address,bytes32,uint256,uint256,uint256,bytes,bytes)", + topic0: "0x374f3552ea6ef855812358112ab8344010038fd2d56b9f47a1d9cb0320c275a2", }, - { name: "_checkOperator", signature: "_checkOperator(bytes32,address)", selector: "0x9a6711de" }, - { name: "_erc1410operatorStorage", signature: "_erc1410operatorStorage()", selector: "0xc6152c9c" }, - { name: "_isAuthorized", signature: "_isAuthorized(bytes32,address,address)", selector: "0x4fdbb54c" }, - { name: "_isOperator", signature: "_isOperator(address,address)", selector: "0x4602b470" }, { - name: "_isOperatorForPartition", - signature: "_isOperatorForPartition(bytes32,address,address)", - selector: "0xb14e7bc1", + name: "ProtectedClearedHoldByPartition", + signature: "ProtectedClearedHoldByPartition(address,address,bytes32,uint256,Hold,uint256,bytes,bytes)", + topic0: "0x7fd4d7541b7da42375ec1b3f05c454acb77234a17c2f4349c102add4bc61e306", }, { - name: "_operatorTransferByPartition", - signature: "_operatorTransferByPartition(OperatorTransferData)", - selector: "0x19659369", + name: "ProtectedClearedRedeemByPartition", + signature: "ProtectedClearedRedeemByPartition(address,address,bytes32,uint256,uint256,uint256,bytes,bytes)", + topic0: "0xdd233f03eaed8aec1fe549f12e218c32dc2e73b3d5777bdeb33afa43e2fa2230", }, - { name: "_revokeOperator", signature: "_revokeOperator(address)", selector: "0x14baa953" }, { - name: "_revokeOperatorByPartition", - signature: "_revokeOperatorByPartition(bytes32,address)", - selector: "0x0c90ed1c", + name: "ProtectedClearedTransferByPartition", + signature: + "ProtectedClearedTransferByPartition(address,address,address,bytes32,uint256,uint256,uint256,bytes,bytes)", + topic0: "0x8aea721bf4270b3b07d0974586b57ecd35862ae7a8b733530161d941489283f1", }, ], }, - ERC1410ProtectedPartitionsStorageWrapper: { - name: "ERC1410ProtectedPartitionsStorageWrapper", - inheritance: ["ERC1644StorageWrapper"], - methods: [ + IControlListStorageWrapper: { + name: "IControlListStorageWrapper", + methods: [], + errors: [{ name: "AccountIsBlocked", signature: "AccountIsBlocked(address)", selector: "0x796c1f0d" }], + }, + + ICorporateActionsStorageWrapper: { + name: "ICorporateActionsStorageWrapper", + methods: [], + errors: [ + { name: "WrongDates", signature: "WrongDates(uint256,uint256)", selector: "0x1c94559c" }, + { name: "WrongIndexForAction", signature: "WrongIndexForAction(uint256,bytes32)", selector: "0xd3924f4e" }, + ], + }, + + IEquityStorageWrapper: { + name: "IEquityStorageWrapper", + methods: [], + events: [ + { + name: "DividendSet", + signature: "DividendSet(bytes32,uint256,address,uint256,uint256,uint256,uint8)", + topic0: "0xc849cd6d345b059ab830e5aa8ab5e38bd118833e14bcdfea70231b0e5c072a12", + }, + { + name: "ScheduledBalanceAdjustmentSet", + signature: "ScheduledBalanceAdjustmentSet(bytes32,uint256,address,uint256,uint256,uint256)", + topic0: "0x71cd63a6f86ff487645dcceb29d3eac904f16d7006cfa7b1da3ea951a77a9666", + }, { - name: "_protectedRedeemFromByPartition", - signature: "_protectedRedeemFromByPartition(bytes32,address,uint256,uint256,uint256,bytes)", - selector: "0x6d27f455", + name: "VotingSet", + signature: "VotingSet(bytes32,uint256,address,uint256,bytes)", + topic0: "0x5ca20e6ec9818c8d574ae3452d46ed4c9dc9d8df2ffa263150507c7e9124ac2f", }, + ], + errors: [ { - name: "_protectedTransferFromByPartition", - signature: "_protectedTransferFromByPartition(bytes32,address,address,uint256,uint256,uint256,bytes)", - selector: "0xfac1472b", + name: "BalanceAdjustmentCreationFailed", + signature: "BalanceAdjustmentCreationFailed()", + selector: "0x0c68e660", }, + { name: "DividendCreationFailed", signature: "DividendCreationFailed()", selector: "0x409bf2d2" }, + { name: "VotingRightsCreationFailed", signature: "VotingRightsCreationFailed()", selector: "0x0cc16600" }, ], }, - ERC1410StandardStorageWrapper: { - name: "ERC1410StandardStorageWrapper", - inheritance: ["ERC1410OperatorStorageWrapper"], - methods: [ - { name: "_addPartitionTo", signature: "_addPartitionTo(uint256,address,bytes32)", selector: "0x3c1a5e22" }, - { - name: "_adjustTotalAndMaxSupplyForPartition", - signature: "_adjustTotalAndMaxSupplyForPartition(bytes32)", - selector: "0xa631f0c2", - }, - { name: "_balanceOfAdjusted", signature: "_balanceOfAdjusted(address)", selector: "0x908e04a4" }, - { name: "_balanceOfAdjustedAt", signature: "_balanceOfAdjustedAt(address,uint256)", selector: "0x3f7cb27c" }, - { - name: "_balanceOfByPartitionAdjusted", - signature: "_balanceOfByPartitionAdjusted(bytes32,address)", - selector: "0x77e986ce", - }, + IERC1410StorageWrapper: { + name: "IERC1410StorageWrapper", + methods: [], + events: [ { - name: "_balanceOfByPartitionAdjustedAt", - signature: "_balanceOfByPartitionAdjustedAt(bytes32,address,uint256)", - selector: "0xc589a51a", + name: "AuthorizedOperator", + signature: "AuthorizedOperator(address,address)", + topic0: "0xf4caeb2d6ca8932a215a353d0703c326ec2d81fc68170f320eb2ab49e9df61f9", }, { - name: "_beforeTokenTransfer", - signature: "_beforeTokenTransfer(bytes32,address,address,uint256)", - selector: "0x594330fa", + name: "AuthorizedOperatorByPartition", + signature: "AuthorizedOperatorByPartition(bytes32,address,address)", + topic0: "0x3646a897c70797ecc134b0adc32f471b07bf1d6f451133b0384badab531e3fd6", }, { - name: "_getLabafByUserAndPartition", - signature: "_getLabafByUserAndPartition(bytes32,address)", - selector: "0xde03ae12", + name: "IssuedByPartition", + signature: "IssuedByPartition(bytes32,address,address,uint256,bytes)", + topic0: "0x5af1c8f424b104b6ba4e3c0885f2ed9fef04a9b1ea39cd9ed362432105c0791a", }, - { name: "_getTotalBalance", signature: "_getTotalBalance(address)", selector: "0xc5930def" }, { - name: "_getTotalBalanceForAdjustedAt", - signature: "_getTotalBalanceForAdjustedAt(address,uint256)", - selector: "0xd215b5a7", + name: "RedeemedByPartition", + signature: "RedeemedByPartition(bytes32,address,address,uint256,bytes,bytes)", + topic0: "0xa4f62471c9bdf88115b97203943c74c59b655913ee5ee592706d84ef53fb6be2", }, { - name: "_getTotalBalanceForByPartitionAdjusted", - signature: "_getTotalBalanceForByPartitionAdjusted(bytes32,address)", - selector: "0xb56339d6", + name: "RevokedOperator", + signature: "RevokedOperator(address,address)", + topic0: "0x50546e66e5f44d728365dc3908c63bc5cfeeab470722c1677e3073a6ac294aa1", }, { - name: "_increaseTotalSupplyByPartition", - signature: "_increaseTotalSupplyByPartition(bytes32,uint256)", - selector: "0x27709fb8", + name: "RevokedOperatorByPartition", + signature: "RevokedOperatorByPartition(bytes32,address,address)", + topic0: "0x3b287c4f1bab4df949b33bceacef984f544dc5d5479930d00e4ee8c9d8dd96f2", }, - { name: "_issueByPartition", signature: "_issueByPartition(IssueData)", selector: "0x7223b2bb" }, { - name: "_redeemByPartition", - signature: "_redeemByPartition(bytes32,address,address,uint256,bytes,bytes)", - selector: "0x625b8e60", + name: "TransferByPartition", + signature: "TransferByPartition(bytes32,address,address,address,uint256,bytes,bytes)", + topic0: "0xff4e9a26af4eb73b8bacfaa4abd4fea03d9448e7b912dc5ff4019048875aa2d4", }, + ], + errors: [ { - name: "_reduceTotalSupplyByPartition", - signature: "_reduceTotalSupplyByPartition(bytes32,uint256)", - selector: "0xd763680b", + name: "InsufficientBalance", + signature: "InsufficientBalance(address,uint256,uint256,bytes32)", + selector: "0x5d6824c4", }, + { name: "InvalidPartition", signature: "InvalidPartition(address,bytes32)", selector: "0xbf84f4ec" }, + { name: "NotAllowedInMultiPartitionMode", signature: "NotAllowedInMultiPartitionMode()", selector: "0x76d08f88" }, { - name: "_syncBalanceAdjustments", - signature: "_syncBalanceAdjustments(bytes32,address,address)", - selector: "0xea18fc33", + name: "PartitionNotAllowedInSinglePartitionMode", + signature: "PartitionNotAllowedInSinglePartitionMode(bytes32)", + selector: "0xb96d9539", }, - { name: "_totalSupplyAdjusted", signature: "_totalSupplyAdjusted()", selector: "0xe20eacdd" }, - { name: "_totalSupplyAdjustedAt", signature: "_totalSupplyAdjustedAt(uint256)", selector: "0xd38c22d8" }, + { name: "Unauthorized", signature: "Unauthorized(address,address,bytes32)", selector: "0x1e09743f" }, + { name: "ZeroPartition", signature: "ZeroPartition()", selector: "0x4a6f30c3" }, + { name: "ZeroValue", signature: "ZeroValue()", selector: "0x7c946ed7" }, + ], + }, + + IERC1594StorageWrapper: { + name: "IERC1594StorageWrapper", + methods: [], + events: [ { - name: "_totalSupplyByPartitionAdjusted", - signature: "_totalSupplyByPartitionAdjusted(bytes32)", - selector: "0xa047058c", + name: "Issued", + signature: "Issued(address,address,uint256,bytes)", + topic0: "0x0e9905d62635f049c2f4e11678ebf9dc3d1f8c4a653e290759b772e47ba00d00", }, - { name: "_triggerAndSyncAll", signature: "_triggerAndSyncAll(bytes32,address,address)", selector: "0x46db8b21" }, - { name: "_updateAccountSnapshot", signature: "_updateAccountSnapshot(address,bytes32)", selector: "0x79f34fd4" }, - { name: "_updateTokenHolderSnapshot", signature: "_updateTokenHolderSnapshot(address)", selector: "0xec13fe0b" }, - { name: "_updateTotalSupplySnapshot", signature: "_updateTotalSupplySnapshot(bytes32)", selector: "0x5b18f4fe" }, { - name: "_updateTotalTokenHolderSnapshot", - signature: "_updateTotalTokenHolderSnapshot()", - selector: "0x329e21f0", + name: "Redeemed", + signature: "Redeemed(address,address,uint256,bytes)", + topic0: "0xb7d0d6b60740753e9f16692a2f479472a1385aec2420fa43225b02f2ffa1afe7", }, - { name: "_validateParams", signature: "_validateParams(bytes32,uint256)", selector: "0x3e969ef5" }, ], }, - ERC1594StorageWrapper: { - name: "ERC1594StorageWrapper", - inheritance: ["IERC1594StorageWrapper", "CapStorageWrapper2"], - methods: [ + IERC1644StorageWrapper: { + name: "IERC1644StorageWrapper", + methods: [], + events: [ { - name: "_businessLogicChecks", - signature: "_businessLogicChecks(bool,address,uint256,bytes32)", - selector: "0x2fc94919", + name: "ControllerRedemption", + signature: "ControllerRedemption(address,address,uint256,bytes,bytes)", + topic0: "0x876b7cb47aa150b3a5516188b19ed308752ad4d0ae9a702543353b78163f7589", }, { - name: "_checkCanRedeemFromByPartition", - signature: "_checkCanRedeemFromByPartition(address,bytes32,uint256,bytes,bytes)", - selector: "0xa1db13d8", + name: "ControllerTransfer", + signature: "ControllerTransfer(address,address,address,uint256,bytes,bytes)", + topic0: "0x6bf62b4b9c7b768275122bf70d429efc398a056d669b1efdf6c3976346246d7d", }, { - name: "_checkCanTransferFromByPartition", - signature: "_checkCanTransferFromByPartition(address,address,bytes32,uint256,bytes,bytes)", - selector: "0x0273a79a", + name: "FinalizedControllerFeature", + signature: "FinalizedControllerFeature(address)", + topic0: "0x08a9c42b6917e90aff41cebfd6d2815b241dc3555d2482d792eeada3fe7df6fd", }, - { name: "_checkCompliance", signature: "_checkCompliance(address,address,bool)", selector: "0x5f8ec698" }, - { name: "_checkIdentity", signature: "_checkIdentity(address,address)", selector: "0xeb15dcae" }, - { name: "_checkIssuable", signature: "_checkIssuable()", selector: "0xcde079d2" }, - { name: "_erc1594Storage", signature: "_erc1594Storage()", selector: "0xcc0d2667" }, - { name: "_genericChecks", signature: "_genericChecks()", selector: "0x9b52cf7c" }, - { name: "_initialize_ERC1594", signature: "_initialize_ERC1594()", selector: "0xc8386725" }, + ], + errors: [{ name: "TokenIsNotControllable", signature: "TokenIsNotControllable()", selector: "0xf4b7b072" }], + }, + + IERC20StorageWrapper: { + name: "IERC20StorageWrapper", + methods: [], + events: [ { - name: "_isAbleToRedeemFromByPartition", - signature: "_isAbleToRedeemFromByPartition(address,bytes32,uint256,bytes,bytes)", - selector: "0x68779803", + name: "Approval", + signature: "Approval(address,address,uint256)", + topic0: "0x8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925", }, { - name: "_isAbleToTransferFromByPartition", - signature: "_isAbleToTransferFromByPartition(address,address,bytes32,uint256,bytes,bytes)", - selector: "0xaab4383b", + name: "Transfer", + signature: "Transfer(address,address,uint256)", + topic0: "0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef", }, - { name: "_isCompliant", signature: "_isCompliant(address,address,uint256,bool)", selector: "0xde080ce4" }, - { name: "_isIdentified", signature: "_isIdentified(address,address)", selector: "0x159f48b4" }, - { name: "_isIssuable", signature: "_isIssuable()", selector: "0x367e587b" }, - { name: "_issue", signature: "_issue(address,uint256,bytes)", selector: "0x7d452eec" }, - { name: "_redeem", signature: "_redeem(uint256,bytes)", selector: "0x9a228bbc" }, - { name: "_redeemFrom", signature: "_redeemFrom(address,uint256,bytes)", selector: "0x32f262eb" }, + ], + errors: [ + { name: "InsufficientAllowance", signature: "InsufficientAllowance(address,address)", selector: "0xf180d8f9" }, + { name: "SpenderWithZeroAddress", signature: "SpenderWithZeroAddress()", selector: "0x80e32d8f" }, + { name: "ZeroOwnerAddress", signature: "ZeroOwnerAddress()", selector: "0x42cad957" }, ], }, - ERC1644StorageWrapper: { - name: "ERC1644StorageWrapper", - inheritance: ["IERC1644StorageWrapper", "ERC3643StorageWrapper2"], - methods: [ - { name: "_checkControllable", signature: "_checkControllable()", selector: "0xb41746a6" }, + IERC3643StorageWrapper: { + name: "IERC3643StorageWrapper", + methods: [], + events: [ { - name: "_controllerRedeem", - signature: "_controllerRedeem(address,uint256,bytes,bytes)", - selector: "0x225dd841", + name: "ComplianceAdded", + signature: "ComplianceAdded(address)", + topic0: "0x7f3a888862559648ec01d97deb7b5012bff86dc91e654a1de397170db40e35b6", }, + ], + errors: [ { - name: "_controllerTransfer", - signature: "_controllerTransfer(address,address,uint256,bytes,bytes)", - selector: "0x51673fb4", + name: "InsufficientFrozenBalance", + signature: "InsufficientFrozenBalance(address,uint256,uint256,bytes32)", + selector: "0xefafde54", }, - { name: "_erc1644Storage", signature: "_erc1644Storage()", selector: "0xf6a4c594" }, - { name: "_finalizeControllable", signature: "_finalizeControllable()", selector: "0x1153e570" }, - { name: "_isControllable", signature: "_isControllable()", selector: "0x5ad249fc" }, ], }, - ERC20PermitStorageWrapper: { - name: "ERC20PermitStorageWrapper", - inheritance: ["ERC20VotesStorageWrapper"], - methods: [ - { name: "_DOMAIN_SEPARATOR", signature: "_DOMAIN_SEPARATOR()", selector: "0xdc0c81b5" }, - { name: "_erc20PermitStorage", signature: "_erc20PermitStorage()", selector: "0x027c0b9a" }, + IPauseStorageWrapper: { + name: "IPauseStorageWrapper", + methods: [], + events: [ { - name: "_permit", - signature: "_permit(address,address,uint256,uint256,uint8,bytes32,bytes32)", - selector: "0x2997f119", + name: "TokenPaused", + signature: "TokenPaused(address)", + topic0: "0xf017c0de579727a3cd3ee18077ee8b4c43bf21892985952d1d5a0d52f983502d", + }, + { + name: "TokenUnpaused", + signature: "TokenUnpaused(address)", + topic0: "0xf38578ed892ce2ce655ca8ae03c73464ad74915a1331a9b4085e637534daeedf", }, ], + errors: [ + { name: "TokenIsPaused", signature: "TokenIsPaused()", selector: "0x649815a5" }, + { name: "TokenIsUnpaused", signature: "TokenIsUnpaused()", selector: "0x72058d69" }, + ], }, - ERC20VotesStorageWrapper: { - name: "ERC20VotesStorageWrapper", - inheritance: ["ERC1594StorageWrapper"], - methods: [ - { name: "_add", signature: "_add(uint256,uint256)", selector: "0x3d0316c3" }, + IProtectedPartitionsStorageWrapper: { + name: "IProtectedPartitionsStorageWrapper", + methods: [], + events: [ { - name: "_afterTokenTransfer", - signature: "_afterTokenTransfer(bytes32,address,address,uint256)", - selector: "0x91823775", + name: "PartitionsProtected", + signature: "PartitionsProtected(address)", + topic0: "0x990fbe2c0a8b93cc7974d7ab6416266441112d61fa0989af94a79de43dda48ff", }, { - name: "_calculateFactorBetween", - signature: "_calculateFactorBetween(uint256,uint256)", - selector: "0x0a26c25f", + name: "PartitionsUnProtected", + signature: "PartitionsUnProtected(address)", + topic0: "0xd556aabec0a33d5b3b9b8c739af1745b14ba2abecc20c3c080fd4ac6143e8525", }, - { name: "_checkpoints", signature: "_checkpoints(address,uint256)", selector: "0x9d654e74" }, { - name: "_checkpointsLookup", - signature: "_checkpointsLookup(IERC20Votes.Checkpoint[],uint256)", - selector: "0x86a272a4", + name: "ProtectedRedeemFrom", + signature: "ProtectedRedeemFrom(bytes32,address,address,uint256,uint256,uint256,bytes)", + topic0: "0xac2a7d7fcbf24c034d113f94d7ccf1df23cb94932becc61aa96ab060df6f101b", }, - { name: "_clock", signature: "_clock()", selector: "0x32bdbe3f" }, - { name: "_CLOCK_MODE", signature: "_CLOCK_MODE()", selector: "0xc980d5f5" }, - { name: "_delegate", signature: "_delegate(address)", selector: "0xf13101e9" }, - { name: "_delegates", signature: "_delegates(address)", selector: "0x42239927" }, - { name: "_erc20VotesStorage", signature: "_erc20VotesStorage()", selector: "0x199208ad" }, - { name: "_getPastTotalSupply", signature: "_getPastTotalSupply(uint256)", selector: "0x1fba5479" }, - { name: "_getPastVotes", signature: "_getPastVotes(address,uint256)", selector: "0x58317e59" }, - { name: "_getVotes", signature: "_getVotes(address)", selector: "0xc6c66a0a" }, { - name: "_getVotesAdjusted", - signature: "_getVotesAdjusted(uint256,IERC20Votes.Checkpoint[])", - selector: "0x7ee325f3", + name: "ProtectedTransferFrom", + signature: "ProtectedTransferFrom(bytes32,address,address,address,uint256,uint256,uint256,bytes)", + topic0: "0x2abbd5300acea8488bc2d0777cfb860f38dee76badd52ff8b36d3dec0f5fdb6c", }, - { name: "_hashTypedDataV4", signature: "_hashTypedDataV4(bytes32)", selector: "0xc8f1ecd8" }, - { name: "_isActivated", signature: "_isActivated()", selector: "0x717cc228" }, - { name: "_moveVotingPower", signature: "_moveVotingPower(address,address,uint256)", selector: "0x82851b84" }, - { name: "_numCheckpoints", signature: "_numCheckpoints(address)", selector: "0x51bc76cc" }, - { name: "_setActivate", signature: "_setActivate(bool)", selector: "0xdbd6e830" }, - { name: "_subtract", signature: "_subtract(uint256,uint256)", selector: "0x880bf496" }, - { name: "_takeAbafCheckpoint", signature: "_takeAbafCheckpoint()", selector: "0x3910625e" }, + ], + errors: [ { - name: "_writeCheckpoint", - signature: "_writeCheckpoint(IERC20Votes.Checkpoint[],function(uint256,uint256)", - selector: "0xade2877a", + name: "PartitionsAreProtectedAndNoRole", + signature: "PartitionsAreProtectedAndNoRole(address,bytes32)", + selector: "0x55347310", }, + { name: "PartitionsAreUnProtected", signature: "PartitionsAreUnProtected()", selector: "0x05681565" }, + { name: "WrongSignature", signature: "WrongSignature()", selector: "0x356a4418" }, ], + }, + + ISnapshotsStorageWrapper: { + name: "ISnapshotsStorageWrapper", + methods: [], events: [ { - name: "DelegateChanged", - signature: "DelegateChanged(address,address,address)", - topic0: "0x3134e8a2e6d97e929a7e54011ea5485d7d196dd5f0ba4d4ef95803e8e3fc257f", + name: "SnapshotTaken", + signature: "SnapshotTaken(address,uint256)", + topic0: "0xd252178ed4aae4bc61be5bc8161b97bca1aae7b7fbde4523d5f4498cfca42763", }, { - name: "DelegateVotesChanged", - signature: "DelegateVotesChanged(address,uint256,uint256)", - topic0: "0xdec2bacdd2f05b59de34da9b523dff8be42e5e38e818c82fdb0bae774387a724", + name: "SnapshotTriggered", + signature: "SnapshotTriggered(uint256)", + topic0: "0x0eec0abde2b179159e265a3659aa23e6c815e932b49ed19684a9717c1db37c8f", }, ], - }, - - ExternalControlListManagementStorageWrapper: { - name: "ExternalControlListManagementStorageWrapper", - inheritance: ["ProtectedPartitionsStorageWrapper"], - methods: [ - { name: "_isExternallyAuthorized", signature: "_isExternallyAuthorized(address)", selector: "0x68daeeac" }, + errors: [ + { name: "SnapshotIdDoesNotExists", signature: "SnapshotIdDoesNotExists(uint256)", selector: "0x8e81eb83" }, + { name: "SnapshotIdNull", signature: "SnapshotIdNull()", selector: "0xf128004d" }, ], }, - ExternalKycListManagementStorageWrapper: { - name: "ExternalKycListManagementStorageWrapper", - inheritance: ["ExternalListManagementStorageWrapper"], - methods: [ + ITimeTravelStorageWrapper: { + name: "ITimeTravelStorageWrapper", + description: "Interface for the TimeTravelStorageWrapper contract", + methods: [], + events: [ { - name: "_isExternallyGranted", - signature: "_isExternallyGranted(address,IKyc.KycStatus)", - selector: "0x94f4bbd4", + name: "SystemBlocknumberChanged", + signature: "SystemBlocknumberChanged(uint256,uint256)", + topic0: "0x96395610c0c23ab4b071bdeae9633f3d54760b0c64cc38868c72e80d6543b987", + }, + { + name: "SystemBlocknumberReset", + signature: "SystemBlocknumberReset()", + topic0: "0x5e1c9b0e188d9a34c3abf05ea5456e54965689aff2ae15b6f1f549dd116e927f", }, - ], - }, - - ExternalListManagementStorageWrapper: { - name: "ExternalListManagementStorageWrapper", - inheritance: ["SsiManagementStorageWrapper"], - methods: [ - { name: "_addExternalList", signature: "_addExternalList(bytes32,address)", selector: "0x7b548517" }, - { name: "_externalListStorage", signature: "_externalListStorage(bytes32)", selector: "0x4c938df7" }, - { name: "_getExternalListsCount", signature: "_getExternalListsCount(bytes32)", selector: "0x91794627" }, { - name: "_getExternalListsMembers", - signature: "_getExternalListsMembers(bytes32,uint256,uint256)", - selector: "0x0d7b7d12", + name: "SystemTimestampChanged", + signature: "SystemTimestampChanged(uint256,uint256)", + topic0: "0x42ae45afbacb5d1779b65d1bf0fe5ed8ea40e9dd166cc8b80bcb3fa2daf222a1", }, - { name: "_isExternalList", signature: "_isExternalList(bytes32,address)", selector: "0x3d8252dd" }, - { name: "_removeExternalList", signature: "_removeExternalList(bytes32,address)", selector: "0x2787a016" }, { - name: "_updateExternalLists", - signature: "_updateExternalLists(bytes32,address[],bool[])", - selector: "0x7b9dc6c3", + name: "SystemTimestampReset", + signature: "SystemTimestampReset()", + topic0: "0x93e7a31ca0d8810d390d6a3fc6ad83d230a5677c142d9aea7331a87794d11c11", }, ], + errors: [ + { name: "InvalidBlocknumber", signature: "InvalidBlocknumber(uint256)", selector: "0x769a518c" }, + { name: "InvalidTimestamp", signature: "InvalidTimestamp(uint256)", selector: "0x25c20828" }, + { name: "WrongChainId", signature: "WrongChainId()", selector: "0x5f87bc00" }, + ], }, - ExternalPauseManagementStorageWrapper: { - name: "ExternalPauseManagementStorageWrapper", - inheritance: ["ControlListStorageWrapper"], - methods: [{ name: "_isExternallyPaused", signature: "_isExternallyPaused()", selector: "0xb654e4bc" }], + KpiLinkedRateStorageWrapper: { + name: "KpiLinkedRateStorageWrapper", + inheritance: ["PauseStorageWrapper"], + methods: [], + }, + + KpisStorageWrapper: { + name: "KpisStorageWrapper", + inheritance: ["InternalsSustainabilityPerformanceTargetInterestRate", "BondStorageWrapperFixingDateInterestRate"], + methods: [], }, KycStorageWrapper: { name: "KycStorageWrapper", inheritance: ["ExternalKycListManagementStorageWrapper"], - methods: [ - { name: "_checkValidDates", signature: "_checkValidDates(uint256,uint256)", selector: "0xfbf50be9" }, - { - name: "_checkValidKycStatus", - signature: "_checkValidKycStatus(IKyc.KycStatus,address)", - selector: "0x76481097", - }, - { name: "_getKycAccountsCount", signature: "_getKycAccountsCount(IKyc.KycStatus)", selector: "0x26f8e0eb" }, - { - name: "_getKycAccountsData", - signature: "_getKycAccountsData(IKyc.KycStatus,uint256,uint256)", - selector: "0xcb518137", - }, - { name: "_getKycFor", signature: "_getKycFor(address)", selector: "0xd996d468" }, - { name: "_getKycStatusFor", signature: "_getKycStatusFor(address)", selector: "0x9fe699ed" }, - { name: "_grantKyc", signature: "_grantKyc(address,string,uint256,uint256,address)", selector: "0x9de277f6" }, - { name: "_isInternalKycActivated", signature: "_isInternalKycActivated()", selector: "0x38166e5e" }, - { name: "_kycStorage", signature: "_kycStorage()", selector: "0xa3dafeee" }, - { name: "_revokeKyc", signature: "_revokeKyc(address)", selector: "0x8d603d1e" }, - { name: "_setInternalKyc", signature: "_setInternalKyc(bool)", selector: "0x648def8f" }, - { name: "_verifyKycStatus", signature: "_verifyKycStatus(IKyc.KycStatus,address)", selector: "0x8b2c4e12" }, - ], + methods: [], + }, + + NonceStorageWrapper: { + name: "NonceStorageWrapper", + inheritance: ["Internals"], + methods: [], }, PauseStorageWrapper: { name: "PauseStorageWrapper", inheritance: ["IPauseStorageWrapper", "ExternalPauseManagementStorageWrapper"], - methods: [ - { name: "_checkPaused", signature: "_checkPaused()", selector: "0x4bd325e4" }, - { name: "_checkUnpaused", signature: "_checkUnpaused()", selector: "0x8482eff5" }, - { name: "_isPaused", signature: "_isPaused()", selector: "0xe2684f08" }, - { name: "_pauseStorage", signature: "_pauseStorage()", selector: "0x7719d6c5" }, - { name: "_setPause", signature: "_setPause(bool)", selector: "0x69cc2731" }, - ], + methods: [], }, ProceedRecipientsStorageWrapper: { name: "ProceedRecipientsStorageWrapper", inheritance: ["TotalBalancesStorageWrapper"], - methods: [ - { name: "_addProceedRecipient", signature: "_addProceedRecipient(address,bytes)", selector: "0x9fd61d20" }, - { name: "_getProceedRecipientData", signature: "_getProceedRecipientData(address)", selector: "0x36ec9fbe" }, - { name: "_proceedRecipientsDataStorage", signature: "_proceedRecipientsDataStorage()", selector: "0xd6abf4ee" }, - { name: "_removeProceedRecipient", signature: "_removeProceedRecipient(address)", selector: "0x8761abcc" }, - { - name: "_removeProceedRecipientData", - signature: "_removeProceedRecipientData(address)", - selector: "0x7d31cdb5", - }, - { - name: "_setProceedRecipientData", - signature: "_setProceedRecipientData(address,bytes)", - selector: "0x2792769b", - }, - ], + methods: [], + }, + + ProceedRecipientsStorageWrapperSustainabilityPerformanceTargetInterestRate: { + name: "ProceedRecipientsStorageWrapperSustainabilityPerformanceTargetInterestRate", + inheritance: ["KpisStorageWrapper"], + methods: [], }, ProtectedPartitionsStorageWrapper: { name: "ProtectedPartitionsStorageWrapper", inheritance: ["IProtectedPartitionsStorageWrapper", "KycStorageWrapper"], - methods: [ - { name: "_arePartitionsProtected", signature: "_arePartitionsProtected()", selector: "0xce391cb1" }, - { name: "_calculateRoleForPartition", signature: "_calculateRoleForPartition(bytes32)", selector: "0x0f56b295" }, - { - name: "_checkClearingCreateHoldSignature", - signature: "_checkClearingCreateHoldSignature(IClearing.ProtectedClearingOperation,Hold,bytes)", - selector: "0xd99754cc", - }, - { - name: "_checkClearingRedeemSignature", - signature: "_checkClearingRedeemSignature(IClearing.ProtectedClearingOperation,uint256,bytes)", - selector: "0x2bd0774c", - }, - { - name: "_checkClearingTransferSignature", - signature: "_checkClearingTransferSignature(IClearing.ProtectedClearingOperation,uint256,address,bytes)", - selector: "0x8f85bed1", - }, - { - name: "_checkCreateHoldSignature", - signature: "_checkCreateHoldSignature(bytes32,address,ProtectedHold,bytes)", - selector: "0x4ede2067", - }, - { name: "_checkProtectedPartitions", signature: "_checkProtectedPartitions()", selector: "0xed6f719a" }, - { - name: "_checkRedeemSignature", - signature: "_checkRedeemSignature(bytes32,address,uint256,uint256,uint256,bytes)", - selector: "0x2546b4b4", - }, - { name: "_checkRoleForPartition", signature: "_checkRoleForPartition(bytes32,address)", selector: "0x67323be5" }, - { - name: "_checkTransferSignature", - signature: "_checkTransferSignature(bytes32,address,address,uint256,uint256,uint256,bytes)", - selector: "0x6ee3d1e2", - }, - { name: "_checkValidPartition", signature: "_checkValidPartition(bytes32)", selector: "0x836740a4" }, - { name: "_getNounceFor", signature: "_getNounceFor(address)", selector: "0x795a18cb" }, - { - name: "_isClearingCreateHoldSignatureValid", - signature: "_isClearingCreateHoldSignatureValid(IClearing.ProtectedClearingOperation,Hold,bytes)", - selector: "0xc2b1c4f2", - }, - { - name: "_isClearingRedeemSignatureValid", - signature: "_isClearingRedeemSignatureValid(IClearing.ProtectedClearingOperation,uint256,bytes)", - selector: "0xdf96c66c", - }, - { - name: "_isClearingTransferSignatureValid", - signature: "_isClearingTransferSignatureValid(IClearing.ProtectedClearingOperation,address,uint256,bytes)", - selector: "0xd5d548fb", - }, - { - name: "_isCreateHoldSignatureValid", - signature: "_isCreateHoldSignatureValid(bytes32,address,ProtectedHold,bytes)", - selector: "0x8797484a", - }, - { - name: "_isRedeemSignatureValid", - signature: "_isRedeemSignatureValid(bytes32,address,uint256,uint256,uint256,bytes)", - selector: "0x21058b93", - }, - { - name: "_isTransferSignatureValid", - signature: "_isTransferSignatureValid(bytes32,address,address,uint256,uint256,uint256,bytes)", - selector: "0x30a87935", - }, - { name: "_protectedPartitionsRole", signature: "_protectedPartitionsRole(bytes32)", selector: "0xde41fe7d" }, - { name: "_protectedPartitionsStorage", signature: "_protectedPartitionsStorage()", selector: "0x00840cb7" }, - { name: "_setNounce", signature: "_setNounce(uint256,address)", selector: "0x17f2f955" }, - { name: "_setProtectedPartitions", signature: "_setProtectedPartitions(bool)", selector: "0x9259c0a2" }, - ], + methods: [], + }, + + ResolverProxyStorageWrapper: { + name: "ResolverProxyStorageWrapper", + inheritance: ["NonceStorageWrapper"], + methods: [], }, ScheduledBalanceAdjustmentsStorageWrapper: { name: "ScheduledBalanceAdjustmentsStorageWrapper", + inheritance: ["ScheduledCouponListingStorageWrapper"], + methods: [], + }, + + ScheduledCouponListingStorageWrapper: { + name: "ScheduledCouponListingStorageWrapper", inheritance: ["ScheduledSnapshotsStorageWrapper"], - methods: [ - { - name: "_addScheduledBalanceAdjustment", - signature: "_addScheduledBalanceAdjustment(uint256,bytes)", - selector: "0xefa50553", - }, - { name: "_adjustBalances", signature: "_adjustBalances(uint256,uint8)", selector: "0x0b95889f" }, - { - name: "_getPendingScheduledBalanceAdjustmentsAt", - signature: "_getPendingScheduledBalanceAdjustmentsAt(uint256)", - selector: "0xd94bb76b", - }, - { - name: "_getScheduledBalanceAdjustmentCount", - signature: "_getScheduledBalanceAdjustmentCount()", - selector: "0xaf3b3395", - }, - { - name: "_getScheduledBalanceAdjustments", - signature: "_getScheduledBalanceAdjustments(uint256,uint256)", - selector: "0x1457b0a6", - }, - { - name: "_onScheduledBalanceAdjustmentTriggered", - signature: "_onScheduledBalanceAdjustmentTriggered(uint256,uint256,ScheduledTask)", - selector: "0x5a7f6a32", - }, - { - name: "_scheduledBalanceAdjustmentStorage", - signature: "_scheduledBalanceAdjustmentStorage()", - selector: "0xd4961ce3", - }, - { - name: "_triggerScheduledBalanceAdjustments", - signature: "_triggerScheduledBalanceAdjustments(uint256)", - selector: "0x7e38bedb", - }, - ], + methods: [], }, ScheduledCrossOrderedTasksStorageWrapper: { name: "ScheduledCrossOrderedTasksStorageWrapper", inheritance: ["ScheduledBalanceAdjustmentsStorageWrapper"], - methods: [ - { - name: "_addScheduledCrossOrderedTask", - signature: "_addScheduledCrossOrderedTask(uint256,bytes)", - selector: "0x4bf21cbc", - }, - { - name: "_getScheduledCrossOrderedTaskCount", - signature: "_getScheduledCrossOrderedTaskCount()", - selector: "0x0fbff5da", - }, - { - name: "_getScheduledCrossOrderedTasks", - signature: "_getScheduledCrossOrderedTasks(uint256,uint256)", - selector: "0xe7c080ed", - }, - { - name: "_onScheduledCrossOrderedTaskTriggered", - signature: "_onScheduledCrossOrderedTaskTriggered(uint256,uint256,ScheduledTask)", - selector: "0xc9ad94ce", - }, - { - name: "_scheduledCrossOrderedTaskStorage", - signature: "_scheduledCrossOrderedTaskStorage()", - selector: "0xe62b4b77", - }, - { - name: "_triggerScheduledCrossOrderedTasks", - signature: "_triggerScheduledCrossOrderedTasks(uint256)", - selector: "0xa3608e20", - }, - ], + methods: [], + }, + + ScheduledCrossOrderedTasksStorageWrapperFixingDateInterestRate: { + name: "ScheduledCrossOrderedTasksStorageWrapperFixingDateInterestRate", + inheritance: ["Common"], + methods: [], }, ScheduledSnapshotsStorageWrapper: { name: "ScheduledSnapshotsStorageWrapper", inheritance: ["ScheduledTasksCommon"], - methods: [ - { name: "_addScheduledSnapshot", signature: "_addScheduledSnapshot(uint256,bytes)", selector: "0xc8e13c78" }, - { name: "_getScheduledSnapshotCount", signature: "_getScheduledSnapshotCount()", selector: "0xe76117a8" }, - { name: "_getScheduledSnapshots", signature: "_getScheduledSnapshots(uint256,uint256)", selector: "0x5bd160e9" }, - { - name: "_onScheduledSnapshotTriggered", - signature: "_onScheduledSnapshotTriggered(uint256,uint256,ScheduledTask)", - selector: "0x437c47f7", - }, - { name: "_scheduledSnapshotStorage", signature: "_scheduledSnapshotStorage()", selector: "0x3b412ed0" }, - { name: "_triggerScheduledSnapshots", signature: "_triggerScheduledSnapshots(uint256)", selector: "0x1e79f595" }, - ], + methods: [], }, SecurityStorageWrapper: { name: "SecurityStorageWrapper", inheritance: ["EquityStorageWrapper"], - methods: [ - { name: "_getSecurityRegulationData", signature: "_getSecurityRegulationData()", selector: "0x6e000fa6" }, - { - name: "_initializeSecurity", - signature: "_initializeSecurity(RegulationData,AdditionalSecurityData)", - selector: "0x8d93918e", - }, - { name: "_securityStorage", signature: "_securityStorage()", selector: "0x641844e3" }, - { - name: "_storeRegulationData", - signature: "_storeRegulationData(RegulationData,AdditionalSecurityData)", - selector: "0x2012644c", - }, - ], + methods: [], }, SsiManagementStorageWrapper: { name: "SsiManagementStorageWrapper", inheritance: ["AccessControlStorageWrapper"], - methods: [ - { name: "_addIssuer", signature: "_addIssuer(address)", selector: "0x498ce1f3" }, - { name: "_checkIssuer", signature: "_checkIssuer(address)", selector: "0x3eeb8f18" }, - { name: "_getIssuerListCount", signature: "_getIssuerListCount()", selector: "0x3020266b" }, - { name: "_getIssuerListMembers", signature: "_getIssuerListMembers(uint256,uint256)", selector: "0xf197fdd3" }, - { name: "_getRevocationRegistryAddress", signature: "_getRevocationRegistryAddress()", selector: "0x83ae00db" }, - { name: "_isIssuer", signature: "_isIssuer(address)", selector: "0x8ca488a6" }, - { name: "_removeIssuer", signature: "_removeIssuer(address)", selector: "0xed85057a" }, - { - name: "_setRevocationRegistryAddress", - signature: "_setRevocationRegistryAddress(address)", - selector: "0x1b44629a", - }, - { name: "_ssiManagementStorage", signature: "_ssiManagementStorage()", selector: "0xf5bb6aff" }, - ], + methods: [], + }, + + SustainabilityPerformanceTargetRateStorageWrapper: { + name: "SustainabilityPerformanceTargetRateStorageWrapper", + inheritance: ["KpiLinkedRateStorageWrapper"], + methods: [], }, TimeTravelStorageWrapper: { name: "TimeTravelStorageWrapper", inheritance: ["ITimeTravelStorageWrapper", "LocalContext"], - methods: [ - { name: "_blockNumber", signature: "_blockNumber()", selector: "0xd7e0e975" }, - { name: "_blockTimestamp", signature: "_blockTimestamp()", selector: "0xc63aa3e7" }, - { name: "_changeSystemBlocknumber", signature: "_changeSystemBlocknumber(uint256)", selector: "0xcd07760e" }, - { name: "_changeSystemTimestamp", signature: "_changeSystemTimestamp(uint256)", selector: "0x03af8af9" }, - { name: "_checkBlockChainid", signature: "_checkBlockChainid(uint256)", selector: "0x7f3ceeb8" }, - { name: "_resetSystemBlocknumber", signature: "_resetSystemBlocknumber()", selector: "0xc329fd29" }, - { name: "_resetSystemTimestamp", signature: "_resetSystemTimestamp()", selector: "0x7cb0f2d8" }, - ], + methods: [], }, TotalBalancesStorageWrapper: { name: "TotalBalancesStorageWrapper", - inheritance: ["PauseStorageWrapper"], - methods: [ - { name: "_getTotalBalance", signature: "_getTotalBalance(address)", selector: "0xc5930def" }, - { - name: "_getTotalBalanceForAdjustedAt", - signature: "_getTotalBalanceForAdjustedAt(address,uint256)", - selector: "0xd215b5a7", - }, - { - name: "_getTotalBalanceForByPartitionAdjusted", - signature: "_getTotalBalanceForByPartitionAdjusted(bytes32,address)", - selector: "0xb56339d6", - }, - { - name: "_getTotalBalanceOfAtSnapshot", - signature: "_getTotalBalanceOfAtSnapshot(uint256,address)", - selector: "0xc18cf802", - }, - { - name: "_getTotalBalanceOfAtSnapshotByPartition", - signature: "_getTotalBalanceOfAtSnapshotByPartition(bytes32,uint256,address)", - selector: "0x64eaa333", - }, - ], - }, - - TransferAndLockStorageWrapper: { - name: "TransferAndLockStorageWrapper", - inheritance: ["ITransferAndLockStorageWrapper", "SecurityStorageWrapper"], - methods: [ - { - name: "_checkTransferAndLockByPartitionSignature", - signature: - "_checkTransferAndLockByPartitionSignature(bytes32,ITransferAndLock.TransferAndLockStruct,uint256,uint256,bytes)", - selector: "0xa89ed8df", - }, - { - name: "_checkTransferAndLockSignature", - signature: "_checkTransferAndLockSignature(ITransferAndLock.TransferAndLockStruct,uint256,uint256,bytes)", - selector: "0x8a1708d9", - }, - { - name: "_isTransferAndLockByPartitionSignatureValid", - signature: - "_isTransferAndLockByPartitionSignatureValid(bytes32,ITransferAndLock.TransferAndLockStruct,uint256,uint256,bytes)", - selector: "0x8b429f59", - }, - { - name: "_isTransferAndLockSignatureValid", - signature: "_isTransferAndLockSignatureValid(ITransferAndLock.TransferAndLockStruct,uint256,uint256,bytes)", - selector: "0x6274de2d", - }, - { - name: "_protectedTransferAndLock", - signature: "_protectedTransferAndLock(ITransferAndLock.TransferAndLockStruct,uint256,uint256,bytes)", - selector: "0x108b43ed", - }, - { - name: "_protectedTransferAndLockByPartition", - signature: - "_protectedTransferAndLockByPartition(bytes32,ITransferAndLock.TransferAndLockStruct,uint256,uint256,bytes)", - selector: "0x472a5931", - }, - ], + inheritance: ["FixedRateStorageWrapper"], + methods: [], }, }; /** * Total number of storage wrapper contracts in the registry. */ -export const TOTAL_STORAGE_WRAPPERS = 29 as const; +export const TOTAL_STORAGE_WRAPPERS = 57 as const; /** * All role identifiers extracted from contracts. @@ -3128,8 +12697,10 @@ export const ROLES = { _DEFAULT_ADMIN_ROLE: "0x0000000000000000000000000000000000000000000000000000000000000000", _DOCUMENTER_ROLE: "0x83ace103a76d3729b4ba1350ad27522bbcda9a1a589d1e5091f443e76abccf41", _FREEZE_MANAGER_ROLE: "0xd0e5294c1fc630933e135c5b668c5d577576754d33964d700bbbcdbfd7e1361b", + _INTEREST_RATE_MANAGER_ROLE: "0xa174f099c94c902831d8b8a07810700505da86a76ea0bcb7629884ef26cf682e", _INTERNAL_KYC_MANAGER_ROLE: "0x3916c5c9e68488134c2ee70660332559707c133d0a295a25971da4085441522e", _ISSUER_ROLE: "0x4be32e8849414d19186807008dabd451c1d87dae5f8e22f32f5ce94d486da842", + _KPI_MANAGER_ROLE: "0x441e549cc2c88d01fa80bd9e7b40412d3106214149223501aa25d4fa23bf306d", _KYC_MANAGER_ROLE: "0x8ebae577938c1afa7fb3dc7b06459c79c86ffd2ac9805b6da92ee4cbbf080449", _KYC_ROLE: "0x6fbd421e041603fa367357d79ffc3b2f9fd37a6fc4eec661aa5537a9ae75f93d", _LOCKER_ROLE: "0xd8aa8c6f92fe8ac3f3c0f88216e25f7c08b3a6c374b4452a04d200c29786ce88", @@ -3148,4 +12719,4 @@ export const ROLES = { /** * Total number of unique roles in the registry. */ -export const TOTAL_ROLES = 28 as const; +export const TOTAL_ROLES = 30 as const; diff --git a/packages/ats/contracts/scripts/domain/bond/createConfiguration.ts b/packages/ats/contracts/scripts/domain/bond/createConfiguration.ts index 4443fadc9..a21b1e56d 100644 --- a/packages/ats/contracts/scripts/domain/bond/createConfiguration.ts +++ b/packages/ats/contracts/scripts/domain/bond/createConfiguration.ts @@ -20,7 +20,8 @@ import { OperationResult, DEFAULT_BATCH_SIZE, } from "@scripts/infrastructure"; -import { BOND_CONFIG_ID, atsRegistry } from "@scripts/domain"; +import { BOND_CONFIG_ID } from "../constants"; +import { atsRegistry } from "../atsRegistry"; /** * Bond-specific facets list (41 facets total). @@ -55,6 +56,7 @@ const BOND_FACETS = [ "ERC1643Facet", "ERC1644Facet", "ERC20PermitFacet", + "NoncesFacet", "ERC20VotesFacet", "ERC3643BatchFacet", "ERC3643ManagementFacet", @@ -83,6 +85,7 @@ const BOND_FACETS = [ "ProtectedPartitionsFacet", "ScheduledBalanceAdjustmentsFacet", "ScheduledCrossOrderedTasksFacet", + "ScheduledCouponListingFacet", "ScheduledSnapshotsFacet", "SsiManagementFacet", "TransferAndLockFacet", diff --git a/packages/ats/contracts/scripts/domain/bondFixedRate/createConfiguration.ts b/packages/ats/contracts/scripts/domain/bondFixedRate/createConfiguration.ts new file mode 100644 index 000000000..d673acf59 --- /dev/null +++ b/packages/ats/contracts/scripts/domain/bondFixedRate/createConfiguration.ts @@ -0,0 +1,186 @@ +// SPDX-License-Identifier: Apache-2.0 + +/** + * Bond token configuration module. + * + * Creates bond token configuration in BusinessLogicResolver by calling + * the generic infrastructure operation with bond-specific facet list and config ID. + * + * This is a thin wrapper around the generic createConfiguration() operation, + * providing bond-specific facet list and configuration ID. + * + * @module domain/bondFixedRate/createConfiguration + */ + +import { Contract } from "ethers"; +import { + ConfigurationData, + ConfigurationError, + createBatchConfiguration, + OperationResult, + DEFAULT_BATCH_SIZE, +} from "@scripts/infrastructure"; +import { BOND_FIXED_RATE_CONFIG_ID, atsRegistry } from "@scripts/domain"; + +/** + * Bond-specific facets list (41 facets total). + * + * This is an explicit positive list of all facets required for bond tokens. + * Includes all common facets plus BondUSAFacet (NOT EquityUSAFacet). + * + * Note: DiamondFacet combines DiamondCutFacet + DiamondLoupeFacet functionality, + * so we only include DiamondFacet to avoid selector collisions. + * + * Updated to match origin/develop feature parity (all facets registered). + */ +const BOND_FIXED_RATE_FACETS = [ + // Core Functionality (10 - DiamondFacet combines DiamondCutFacet + DiamondLoupeFacet) + "AccessControlFixedRateFacet", + "CapFixedRateFacet", + "ControlListFixedRateFacet", + "CorporateActionsFixedRateFacet", + "DiamondFacet", // Combined: includes DiamondCutFacet + DiamondLoupeFacet functionality + "ERC20FixedRateFacet", + "FreezeFixedRateFacet", + "KycFixedRateFacet", + "PauseFixedRateFacet", + "SnapshotsFixedRateFacet", + + // ERC Standards + "ERC1410IssuerFixedRateFacet", + "ERC1410ManagementFixedRateFacet", + "ERC1410ReadFixedRateFacet", + "ERC1410TokenHolderFixedRateFacet", + "ERC1594FixedRateFacet", + "ERC1643FixedRateFacet", + "ERC1644FixedRateFacet", + "ERC20PermitFixedRateFacet", + "NoncesFixedRateFacet", + "ERC20VotesFixedRateFacet", + "ERC3643BatchFixedRateFacet", + "ERC3643ManagementFixedRateFacet", + "ERC3643OperationsFixedRateFacet", + "ERC3643ReadFixedRateFacet", + + // Clearing & Settlement + "ClearingActionsFixedRateFacet", + "ClearingHoldCreationFixedRateFacet", + "ClearingReadFixedRateFacet", + "ClearingRedeemFixedRateFacet", + "ClearingTransferFixedRateFacet", + "HoldManagementFixedRateFacet", + "HoldReadFixedRateFacet", + "HoldTokenHolderFixedRateFacet", + + // External Management + "ExternalControlListManagementFixedRateFacet", + "ExternalKycListManagementFixedRateFacet", + "ExternalPauseManagementFixedRateFacet", + + // Advanced Features + "AdjustBalancesFixedRateFacet", + "LockFixedRateFacet", + "ProceedRecipientsFixedRateFacet", + "ProtectedPartitionsFixedRateFacet", + "ScheduledBalanceAdjustmentsFixedRateFacet", + "ScheduledCrossOrderedTasksFixedRateFacet", + "ScheduledCouponListingFixedRateFacet", + "ScheduledSnapshotsFixedRateFacet", + "SsiManagementFixedRateFacet", + "TransferAndLockFixedRateFacet", + + //Interest Rate + "FixedRateFacet", + + // Jurisdiction-Specific + "BondUSAFixedRateFacet", + "BondUSAReadFixedRateFacet", +] as const; + +/** + * Create bond token configuration in BusinessLogicResolver. + * + * Thin wrapper that calls the generic core operation with bond-specific data: + * - Configuration ID: BOND_CONFIG_ID + * - Facet list: BOND_FACETS (43 facets) + * + * All implementation logic is handled by the generic createConfiguration() + * operation in core/operations/blrConfigurations.ts. + * + * @param blrContract - BusinessLogicResolver contract instance + * @param facetAddresses - Map of facet names to their deployed addresses + * @param useTimeTravel - Whether to use TimeTravel variants (default: false) + * @param partialBatchDeploy - Whether this is a partial batch deployment (default: false) + * @param batchSize - Number of facets per batch (default: DEFAULT_BATCH_SIZE) + * @param confirmations - Number of confirmations to wait for (default: 0 for test environments) + * @returns Promise resolving to operation result + * + * @example + * ```typescript + * import { BusinessLogicResolver__factory } from '@contract-types' + * + * // Get BLR contract instance + * const blr = BusinessLogicResolver__factory.connect('0x1234...', signer) + * + * // Create bond configuration + * const result = await createBondConfiguration( + * blr, + * { + * 'AccessControlFacet': '0xabc...', + * 'BondUSAFacet': '0xdef...', + * // ... more facets + * }, + * false, + * false, + * 15, + * 0 + * ) + * + * if (result.success) { + * console.log(`Bond config version: ${result.data.version}`) + * console.log(`Registered ${result.data.facetKeys.length} facets`) + * } else { + * console.error(`Failed: ${result.error} - ${result.message}`) + * } + * ``` + */ +export async function createBondFixedRateConfiguration( + blrContract: Contract, + facetAddresses: Record, + useTimeTravel: boolean = false, + partialBatchDeploy: boolean = false, + batchSize: number = DEFAULT_BATCH_SIZE, + confirmations: number = 0, +): Promise> { + // Get facet names based on time travel mode + // Include TimeTravelFacet when useTimeTravel=true to provide time manipulation functions + const baseFacets = useTimeTravel ? [...BOND_FIXED_RATE_FACETS, "TimeTravelFacet"] : BOND_FIXED_RATE_FACETS; + + const facetNames = useTimeTravel + ? baseFacets.map((name) => (name === "TimeTravelFacet" || name.endsWith("TimeTravel") ? name : `${name}TimeTravel`)) + : baseFacets; + + // Build facet data with resolver keys from registry + const facets = facetNames.map((name) => { + // Strip "TimeTravel" suffix to get base name for registry lookup + const baseName = name.replace(/TimeTravel$/, ""); + + const facetDef = atsRegistry.getFacetDefinition(baseName); + if (!facetDef?.resolverKey?.value) { + throw new Error(`No resolver key found for facet: ${baseName}`); + } + return { + facetName: name, + resolverKey: facetDef.resolverKey.value, + address: facetAddresses[name], + }; + }); + + return createBatchConfiguration(blrContract, { + configurationId: BOND_FIXED_RATE_CONFIG_ID, + facets, + partialBatchDeploy, + batchSize, + confirmations, + }); +} diff --git a/packages/ats/contracts/scripts/domain/bondKpiLinkedRate/createConfiguration.ts b/packages/ats/contracts/scripts/domain/bondKpiLinkedRate/createConfiguration.ts new file mode 100644 index 000000000..6217e628e --- /dev/null +++ b/packages/ats/contracts/scripts/domain/bondKpiLinkedRate/createConfiguration.ts @@ -0,0 +1,186 @@ +// SPDX-License-Identifier: Apache-2.0 + +/** + * Bond token configuration module. + * + * Creates bond token configuration in BusinessLogicResolver by calling + * the generic infrastructure operation with bond-specific facet list and config ID. + * + * This is a thin wrapper around the generic createConfiguration() operation, + * providing bond-specific facet list and configuration ID. + * + * @module domain/bondKpiLinkedRate/createConfiguration + */ + +import { Contract } from "ethers"; +import { + ConfigurationData, + ConfigurationError, + createBatchConfiguration, + OperationResult, + DEFAULT_BATCH_SIZE, +} from "@scripts/infrastructure"; +import { BOND_KPI_LINKED_RATE_CONFIG_ID, atsRegistry } from "@scripts/domain"; + +/** + * Bond-specific facets list (41 facets total). + * + * This is an explicit positive list of all facets required for bond tokens. + * Includes all common facets plus BondUSAFacet (NOT EquityUSAFacet). + * + * Note: DiamondFacet combines DiamondCutFacet + DiamondLoupeFacet functionality, + * so we only include DiamondFacet to avoid selector collisions. + * + * Updated to match origin/develop feature parity (all facets registered). + */ +const BOND_KPI_LINKED_RATE_FACETS = [ + // Core Functionality (10 - DiamondFacet combines DiamondCutFacet + DiamondLoupeFacet) + "AccessControlKpiLinkedRateFacet", + "CapKpiLinkedRateFacet", + "ControlListKpiLinkedRateFacet", + "CorporateActionsKpiLinkedRateFacet", + "DiamondFacet", // Combined: includes DiamondCutFacet + DiamondLoupeFacet functionality + "ERC20KpiLinkedRateFacet", + "FreezeKpiLinkedRateFacet", + "KycKpiLinkedRateFacet", + "PauseKpiLinkedRateFacet", + "SnapshotsKpiLinkedRateFacet", + + // ERC Standards + "ERC1410IssuerKpiLinkedRateFacet", + "ERC1410ManagementKpiLinkedRateFacet", + "ERC1410ReadKpiLinkedRateFacet", + "ERC1410TokenHolderKpiLinkedRateFacet", + "ERC1594KpiLinkedRateFacet", + "ERC1643KpiLinkedRateFacet", + "ERC1644KpiLinkedRateFacet", + "ERC20PermitKpiLinkedRateFacet", + "NoncesKpiLinkedRateFacet", + "ERC20VotesKpiLinkedRateFacet", + "ERC3643BatchKpiLinkedRateFacet", + "ERC3643ManagementKpiLinkedRateFacet", + "ERC3643OperationsKpiLinkedRateFacet", + "ERC3643ReadKpiLinkedRateFacet", + + // Clearing & Settlement + "ClearingActionsKpiLinkedRateFacet", + "ClearingHoldCreationKpiLinkedRateFacet", + "ClearingReadKpiLinkedRateFacet", + "ClearingRedeemKpiLinkedRateFacet", + "ClearingTransferKpiLinkedRateFacet", + "HoldManagementKpiLinkedRateFacet", + "HoldReadKpiLinkedRateFacet", + "HoldTokenHolderKpiLinkedRateFacet", + + // External Management + "ExternalControlListManagementKpiLinkedRateFacet", + "ExternalKycListManagementKpiLinkedRateFacet", + "ExternalPauseManagementKpiLinkedRateFacet", + + // Advanced Features + "AdjustBalancesKpiLinkedRateFacet", + "LockKpiLinkedRateFacet", + "ProceedRecipientsKpiLinkedRateFacet", + "ProtectedPartitionsKpiLinkedRateFacet", + "ScheduledBalanceAdjustmentsKpiLinkedRateFacet", + "ScheduledCrossOrderedTasksKpiLinkedRateFacet", + "ScheduledCouponListingKpiLinkedRateFacet", + "ScheduledSnapshotsKpiLinkedRateFacet", + "SsiManagementKpiLinkedRateFacet", + "TransferAndLockKpiLinkedRateFacet", + + //Interest Rate + "KpiLinkedRateFacet", + + // Jurisdiction-Specific + "BondUSAKpiLinkedRateFacet", + "BondUSAReadKpiLinkedRateFacet", +] as const; + +/** + * Create bond token configuration in BusinessLogicResolver. + * + * Thin wrapper that calls the generic core operation with bond-specific data: + * - Configuration ID: BOND_CONFIG_ID + * - Facet list: BOND_FACETS (43 facets) + * + * All implementation logic is handled by the generic createConfiguration() + * operation in core/operations/blrConfigurations.ts. + * + * @param blrContract - BusinessLogicResolver contract instance + * @param facetAddresses - Map of facet names to their deployed addresses + * @param useTimeTravel - Whether to use TimeTravel variants (default: false) + * @param partialBatchDeploy - Whether this is a partial batch deployment (default: false) + * @param batchSize - Number of facets per batch (default: DEFAULT_BATCH_SIZE) + * @param confirmations - Number of confirmations to wait for (default: 0 for test environments) + * @returns Promise resolving to operation result + * + * @example + * ```typescript + * import { BusinessLogicResolver__factory } from '@contract-types' + * + * // Get BLR contract instance + * const blr = BusinessLogicResolver__factory.connect('0x1234...', signer) + * + * // Create bond configuration + * const result = await createBondConfiguration( + * blr, + * { + * 'AccessControlFacet': '0xabc...', + * 'BondUSAFacet': '0xdef...', + * // ... more facets + * }, + * false, + * false, + * 15, + * 0 + * ) + * + * if (result.success) { + * console.log(`Bond config version: ${result.data.version}`) + * console.log(`Registered ${result.data.facetKeys.length} facets`) + * } else { + * console.error(`Failed: ${result.error} - ${result.message}`) + * } + * ``` + */ +export async function createBondKpiLinkedRateConfiguration( + blrContract: Contract, + facetAddresses: Record, + useTimeTravel: boolean = false, + partialBatchDeploy: boolean = false, + batchSize: number = DEFAULT_BATCH_SIZE, + confirmations: number = 0, +): Promise> { + // Get facet names based on time travel mode + // Include TimeTravelFacet when useTimeTravel=true to provide time manipulation functions + const baseFacets = useTimeTravel ? [...BOND_KPI_LINKED_RATE_FACETS, "TimeTravelFacet"] : BOND_KPI_LINKED_RATE_FACETS; + + const facetNames = useTimeTravel + ? baseFacets.map((name) => (name === "TimeTravelFacet" || name.endsWith("TimeTravel") ? name : `${name}TimeTravel`)) + : baseFacets; + + // Build facet data with resolver keys from registry + const facets = facetNames.map((name) => { + // Strip "TimeTravel" suffix to get base name for registry lookup + const baseName = name.replace(/TimeTravel$/, ""); + + const facetDef = atsRegistry.getFacetDefinition(baseName); + if (!facetDef?.resolverKey?.value) { + throw new Error(`No resolver key found for facet: ${baseName}`); + } + return { + facetName: name, + resolverKey: facetDef.resolverKey.value, + address: facetAddresses[name], + }; + }); + + return createBatchConfiguration(blrContract, { + configurationId: BOND_KPI_LINKED_RATE_CONFIG_ID, + facets, + partialBatchDeploy, + batchSize, + confirmations, + }); +} diff --git a/packages/ats/contracts/scripts/domain/bondSustainabilityPerformanceTargetRate/createConfiguration.ts b/packages/ats/contracts/scripts/domain/bondSustainabilityPerformanceTargetRate/createConfiguration.ts new file mode 100644 index 000000000..5d7fbc7ad --- /dev/null +++ b/packages/ats/contracts/scripts/domain/bondSustainabilityPerformanceTargetRate/createConfiguration.ts @@ -0,0 +1,189 @@ +// SPDX-License-Identifier: Apache-2.0 + +/** + * Bond token configuration module. + * + * Creates bond token configuration in BusinessLogicResolver by calling + * the generic infrastructure operation with bond-specific facet list and config ID. + * + * This is a thin wrapper around the generic createConfiguration() operation, + * providing bond-specific facet list and configuration ID. + * + * @module domain/bondSustainabilityPerformanceTargetRate/createConfiguration + */ + +import { Contract } from "ethers"; +import { + ConfigurationData, + ConfigurationError, + createBatchConfiguration, + OperationResult, + DEFAULT_BATCH_SIZE, +} from "@scripts/infrastructure"; +import { BOND_SUSTAINABILITY_PERFORMANCE_TARGET_RATE_CONFIG_ID, atsRegistry } from "@scripts/domain"; + +/** + * Bond-specific facets list (41 facets total). + * + * This is an explicit positive list of all facets required for bond tokens. + * Includes all common facets plus BondUSAFacet (NOT EquityUSAFacet). + * + * Note: DiamondFacet combines DiamondCutFacet + DiamondLoupeFacet functionality, + * so we only include DiamondFacet to avoid selector collisions. + * + * Updated to match origin/develop feature parity (all facets registered). + */ +const BOND_SUSTAINABILITY_PERFORMANCE_TARGET_RATE_FACETS = [ + // Core Functionality (10 - DiamondFacet combines DiamondCutFacet + DiamondLoupeFacet) + "AccessControlSustainabilityPerformanceTargetRateFacet", + "CapSustainabilityPerformanceTargetRateFacet", + "ControlListSustainabilityPerformanceTargetRateFacet", + "CorporateActionsSustainabilityPerformanceTargetRateFacet", + "DiamondFacet", // Combined: includes DiamondCutFacet + DiamondLoupeFacet functionality + "ERC20SustainabilityPerformanceTargetRateFacet", + "FreezeSustainabilityPerformanceTargetRateFacet", + "KycSustainabilityPerformanceTargetRateFacet", + "PauseSustainabilityPerformanceTargetRateFacet", + "SnapshotsSustainabilityPerformanceTargetRateFacet", + + // ERC Standards + "ERC1410IssuerSustainabilityPerformanceTargetRateFacet", + "ERC1410ManagementSustainabilityPerformanceTargetRateFacet", + "ERC1410ReadSustainabilityPerformanceTargetRateFacet", + "ERC1410TokenHolderSustainabilityPerformanceTargetRateFacet", + "ERC1594SustainabilityPerformanceTargetRateFacet", + "ERC1643SustainabilityPerformanceTargetRateFacet", + "ERC1644SustainabilityPerformanceTargetRateFacet", + "ERC20PermitSustainabilityPerformanceTargetRateFacet", + "NoncesSustainabilityPerformanceTargetRateFacet", + "ERC20VotesSustainabilityPerformanceTargetRateFacet", + "ERC3643BatchSustainabilityPerformanceTargetRateFacet", + "ERC3643ManagementSustainabilityPerformanceTargetRateFacet", + "ERC3643OperationsSustainabilityPerformanceTargetRateFacet", + "ERC3643ReadSustainabilityPerformanceTargetRateFacet", + + // Clearing & Settlement + "ClearingActionsSustainabilityPerformanceTargetRateFacet", + "ClearingHoldCreationSustainabilityPerformanceTargetRateFacet", + "ClearingReadSustainabilityPerformanceTargetRateFacet", + "ClearingRedeemSustainabilityPerformanceTargetRateFacet", + "ClearingTransferSustainabilityPerformanceTargetRateFacet", + "HoldManagementSustainabilityPerformanceTargetRateFacet", + "HoldReadSustainabilityPerformanceTargetRateFacet", + "HoldTokenHolderSustainabilityPerformanceTargetRateFacet", + + // External Management + "ExternalControlListManagementSustainabilityPerformanceTargetRateFacet", + "ExternalKycListManagementSustainabilityPerformanceTargetRateFacet", + "ExternalPauseManagementSustainabilityPerformanceTargetRateFacet", + + // Advanced Features + "AdjustBalancesSustainabilityPerformanceTargetRateFacet", + "LockSustainabilityPerformanceTargetRateFacet", + "ProceedRecipientsSustainabilityPerformanceTargetRateFacet", + "ProtectedPartitionsSustainabilityPerformanceTargetRateFacet", + "ScheduledBalanceAdjustmentsSustainabilityPerformanceTargetRateFacet", + "ScheduledCrossOrderedTasksSustainabilityPerformanceTargetRateFacet", + "ScheduledCouponListingSustainabilityPerformanceTargetRateFacet", + "ScheduledSnapshotsSustainabilityPerformanceTargetRateFacet", + "SsiManagementSustainabilityPerformanceTargetRateFacet", + "TransferAndLockSustainabilityPerformanceTargetRateFacet", + + //Interest Rate + "SustainabilityPerformanceTargetRateFacet", + "KpisSustainabilityPerformanceTargetRateFacet", + + // Jurisdiction-Specific + "BondUSASustainabilityPerformanceTargetRateFacet", + "BondUSAReadSustainabilityPerformanceTargetRateFacet", +] as const; + +/** + * Create bond token configuration in BusinessLogicResolver. + * + * Thin wrapper that calls the generic core operation with bond-specific data: + * - Configuration ID: BOND_CONFIG_ID + * - Facet list: BOND_FACETS (43 facets) + * + * All implementation logic is handled by the generic createConfiguration() + * operation in core/operations/blrConfigurations.ts. + * + * @param blrContract - BusinessLogicResolver contract instance + * @param facetAddresses - Map of facet names to their deployed addresses + * @param useTimeTravel - Whether to use TimeTravel variants (default: false) + * @param partialBatchDeploy - Whether this is a partial batch deployment (default: false) + * @param batchSize - Number of facets per batch (default: DEFAULT_BATCH_SIZE) + * @param confirmations - Number of confirmations to wait for (default: 0 for test environments) + * @returns Promise resolving to operation result + * + * @example + * ```typescript + * import { BusinessLogicResolver__factory } from '@contract-types' + * + * // Get BLR contract instance + * const blr = BusinessLogicResolver__factory.connect('0x1234...', signer) + * + * // Create bond configuration + * const result = await createBondConfiguration( + * blr, + * { + * 'AccessControlFacet': '0xabc...', + * 'BondUSAFacet': '0xdef...', + * // ... more facets + * }, + * false, + * false, + * 15, + * 0 + * ) + * + * if (result.success) { + * console.log(`Bond config version: ${result.data.version}`) + * console.log(`Registered ${result.data.facetKeys.length} facets`) + * } else { + * console.error(`Failed: ${result.error} - ${result.message}`) + * } + * ``` + */ +export async function createBondSustainabilityPerformanceTargetRateConfiguration( + blrContract: Contract, + facetAddresses: Record, + useTimeTravel: boolean = false, + partialBatchDeploy: boolean = false, + batchSize: number = DEFAULT_BATCH_SIZE, + confirmations: number = 0, +): Promise> { + // Get facet names based on time travel mode + // Include TimeTravelFacet when useTimeTravel=true to provide time manipulation functions + const baseFacets = useTimeTravel + ? [...BOND_SUSTAINABILITY_PERFORMANCE_TARGET_RATE_FACETS, "TimeTravelFacet"] + : BOND_SUSTAINABILITY_PERFORMANCE_TARGET_RATE_FACETS; + + const facetNames = useTimeTravel + ? baseFacets.map((name) => (name === "TimeTravelFacet" || name.endsWith("TimeTravel") ? name : `${name}TimeTravel`)) + : baseFacets; + + // Build facet data with resolver keys from registry + const facets = facetNames.map((name) => { + // Strip "TimeTravel" suffix to get base name for registry lookup + const baseName = name.replace(/TimeTravel$/, ""); + + const facetDef = atsRegistry.getFacetDefinition(baseName); + if (!facetDef?.resolverKey?.value) { + throw new Error(`No resolver key found for facet: ${baseName}`); + } + return { + facetName: name, + resolverKey: facetDef.resolverKey.value, + address: facetAddresses[name], + }; + }); + + return createBatchConfiguration(blrContract, { + configurationId: BOND_SUSTAINABILITY_PERFORMANCE_TARGET_RATE_CONFIG_ID, + facets, + partialBatchDeploy, + batchSize, + confirmations, + }); +} diff --git a/packages/ats/contracts/scripts/domain/constants.ts b/packages/ats/contracts/scripts/domain/constants.ts index d2b382da8..db89d3ec5 100644 --- a/packages/ats/contracts/scripts/domain/constants.ts +++ b/packages/ats/contracts/scripts/domain/constants.ts @@ -25,13 +25,38 @@ export const EQUITY_CONFIG_ID = "0x0000000000000000000000000000000000000000000000000000000000000001"; /** - * Bond configuration ID. + * Bond Variable Rate configuration ID. * * bytes32(uint256(2)) = 0x00...02 - * Used by BusinessLogicResolver to identify bond facet configuration. + * Used by BusinessLogicResolver to identify bond variable rate facet configuration. */ export const BOND_CONFIG_ID = "0x0000000000000000000000000000000000000000000000000000000000000002"; +/** + * Bond Fixed Rate configuration ID. + * + * bytes32(uint256(3)) = 0x00...03 + * Used by BusinessLogicResolver to identify bond fixed rate facet configuration. + */ +export const BOND_FIXED_RATE_CONFIG_ID = "0x0000000000000000000000000000000000000000000000000000000000000003"; + +/** + * Bond Kpi Linked Rate configuration ID. + * + * bytes32(uint256(3)) = 0x00...04 + * Used by BusinessLogicResolver to identify bond kpi linked rate facet configuration. + */ +export const BOND_KPI_LINKED_RATE_CONFIG_ID = "0x0000000000000000000000000000000000000000000000000000000000000004"; + +/** + * Bond Kpi Sustainability Performance Target Rate configuration ID. + * + * bytes32(uint256(3)) = 0x00...05 + * Used by BusinessLogicResolver to identify bond sustainability performance target rate facet configuration. + */ +export const BOND_SUSTAINABILITY_PERFORMANCE_TARGET_RATE_CONFIG_ID = + "0x0000000000000000000000000000000000000000000000000000000000000005"; + // ============================================================================ // ATS-Specific Contract Names // ============================================================================ @@ -55,7 +80,7 @@ export const ATS_CONTRACTS = { * * These types provide type-safe access to roles from the auto-generated registry. */ -import { ROLES } from "@scripts/domain"; +import { ROLES } from "./atsRegistry.data"; export type AtsRoleName = keyof typeof ROLES; export type AtsRoleHash = (typeof ROLES)[AtsRoleName]; @@ -130,3 +155,5 @@ export const CURRENCIES = { CHF: "0x434846", // Swiss Franc JPY: "0x4a5059", // Japanese Yen } as const; + +export const FACET_REGISTRATION_BATCH_SIZE = 20; diff --git a/packages/ats/contracts/scripts/domain/equity/createConfiguration.ts b/packages/ats/contracts/scripts/domain/equity/createConfiguration.ts index 6dafa5224..0401b93c9 100644 --- a/packages/ats/contracts/scripts/domain/equity/createConfiguration.ts +++ b/packages/ats/contracts/scripts/domain/equity/createConfiguration.ts @@ -20,7 +20,8 @@ import { createBatchConfiguration, DEFAULT_BATCH_SIZE, } from "@scripts/infrastructure"; -import { EQUITY_CONFIG_ID, atsRegistry } from "@scripts/domain"; +import { EQUITY_CONFIG_ID } from "../constants"; +import { atsRegistry } from "../atsRegistry"; /** * Equity-specific facets list (41 facets total). @@ -55,6 +56,7 @@ const EQUITY_FACETS = [ "ERC1643Facet", "ERC1644Facet", "ERC20PermitFacet", + "NoncesFacet", "ERC20VotesFacet", "ERC3643BatchFacet", "ERC3643ManagementFacet", @@ -79,7 +81,6 @@ const EQUITY_FACETS = [ // Advanced Features (9) "AdjustBalancesFacet", "LockFacet", - "ProceedRecipientsFacet", "ProtectedPartitionsFacet", "ScheduledBalanceAdjustmentsFacet", "ScheduledCrossOrderedTasksFacet", diff --git a/packages/ats/contracts/scripts/domain/factory/deployBondFixedRateToken.ts b/packages/ats/contracts/scripts/domain/factory/deployBondFixedRateToken.ts new file mode 100644 index 000000000..062be40e4 --- /dev/null +++ b/packages/ats/contracts/scripts/domain/factory/deployBondFixedRateToken.ts @@ -0,0 +1,175 @@ +import { ethers } from "ethers"; +import type { ResolverProxy } from "@contract-types"; +import { ResolverProxy__factory } from "@contract-types"; +import { GAS_LIMIT } from "@scripts/infrastructure"; +import { + ATS_ROLES, + BOND_FIXED_RATE_CONFIG_ID, + DeployBondFromFactoryParams, + FactoryRegulationDataParams, + Rbac, +} from "@scripts/domain"; + +// ============================================================================ +// Types +// ============================================================================ + +export interface FixedRateParams { + rate: number; + rateDecimals: number; +} + +// ============================================================================ +// Main Functions +// ============================================================================ + +/** + * Deploy a bond token using the Factory contract. + * + * This function constructs the required data structures and calls the factory's + * deployBond method to create a new bond token with a diamond proxy. + * + * @param bondData - Bond deployment parameters + * @returns Deployed ResolverProxy (diamond) contract instance + * + * @example + * ```typescript + * const bond = await deployBondFromFactory({ + * adminAccount: deployer.address, + * isWhiteList: true, + * isControllable: true, + * isMultiPartition: false, + * name: 'My Bond', + * symbol: 'MBND', + * decimals: 18, + * isin: 'US0378331005', + * votingRight: true, + * // ... other params + * regulationType: RegulationType.REG_S, + * regulationSubType: RegulationSubType.NONE, + * factory: factoryContract, + * businessLogicResolver: blrAddress, + * }); + * ``` + */ +export async function deployBondFixedRateFromFactory( + bondDataParams: DeployBondFromFactoryParams, + regulationTypeParams: FactoryRegulationDataParams, + fixedRate: FixedRateParams, +): Promise { + const { + factory, + adminAccount, + securityData: securityDataParams, + bondDetails: bondDetailsParams, + proceedRecipients, + proceedRecipientsData, + } = bondDataParams; + + const { rate, rateDecimals } = fixedRate; + + // Build RBAC array with admin + const rbacs: Rbac[] = [ + { + role: ATS_ROLES._DEFAULT_ADMIN_ROLE, + members: [adminAccount], + }, + ...securityDataParams.rbacs, + ]; + + // Build resolver proxy configuration + const resolverProxyConfiguration = { + key: BOND_FIXED_RATE_CONFIG_ID, + version: 1, + }; + + // Build security data structure + const securityData = { + arePartitionsProtected: securityDataParams.arePartitionsProtected, + isMultiPartition: securityDataParams.isMultiPartition, + resolver: securityDataParams.resolver, + resolverProxyConfiguration, + rbacs, + isControllable: securityDataParams.isControllable, + isWhiteList: securityDataParams.isWhiteList, + maxSupply: securityDataParams.maxSupply, + erc20MetadataInfo: { + name: securityDataParams.erc20MetadataInfo.name, + symbol: securityDataParams.erc20MetadataInfo.symbol, + isin: securityDataParams.erc20MetadataInfo.isin, + decimals: securityDataParams.erc20MetadataInfo.decimals, + }, + clearingActive: securityDataParams.clearingActive, + internalKycActivated: securityDataParams.internalKycActivated, + erc20VotesActivated: securityDataParams.erc20VotesActivated, + externalPauses: securityDataParams.externalPauses, + externalControlLists: securityDataParams.externalControlLists, + externalKycLists: securityDataParams.externalKycLists, + compliance: securityDataParams.compliance, + identityRegistry: securityDataParams.identityRegistry, + }; + + // Build bond details structure + const bondDetails = { + currency: bondDetailsParams.currency, + nominalValue: bondDetailsParams.nominalValue, + nominalValueDecimals: bondDetailsParams.nominalValueDecimals, + startingDate: bondDetailsParams.startingDate || Math.floor(Date.now() / 1000), + maturityDate: bondDetailsParams.maturityDate || 0, + }; + + // Build bond data + const bondData = { + security: securityData, + bondDetails, + proceedRecipients: proceedRecipients, + proceedRecipientsData: proceedRecipientsData, + }; + + // Build regulation data + const factoryRegulationData = { + regulationType: regulationTypeParams.regulationType, + regulationSubType: regulationTypeParams.regulationSubType, + additionalSecurityData: { + countriesControlListType: regulationTypeParams.additionalSecurityData.countriesControlListType, + listOfCountries: regulationTypeParams.additionalSecurityData.listOfCountries, + info: regulationTypeParams.additionalSecurityData.info, + }, + }; + + const fixedRateData = { + rate: rate, + rateDecimals: rateDecimals, + }; + + const bondFixedRateData = { + bondData: bondData, + factoryRegulationData: factoryRegulationData, + fixedRateData: fixedRateData, + }; + + // Deploy bond token via factory + const tx = await factory.deployBondFixedRate(bondFixedRateData, { + gasLimit: GAS_LIMIT.high, + }); + const receipt = await tx.wait(); + + // Find BondDeployed event to get diamond address + const event = receipt.events?.find((e) => e.event === "BondFixedRateDeployed"); + if (!event || !event.args) { + throw new Error( + `BondFixedRateDeployed event not found in deployment transaction. Events: ${JSON.stringify( + receipt.events?.map((e) => e.event), + )}`, + ); + } + + const diamondAddress = event.args.diamondProxyAddress || event.args[1]; + + if (!diamondAddress || diamondAddress === ethers.constants.AddressZero) { + throw new Error(`Invalid diamond address from event. Args: ${JSON.stringify(event.args)}`); + } + + // Return diamond proxy as ResolverProxy contract + return ResolverProxy__factory.connect(diamondAddress, factory.signer); +} diff --git a/packages/ats/contracts/scripts/domain/factory/deployBondKpiLinkedRateToken.ts b/packages/ats/contracts/scripts/domain/factory/deployBondKpiLinkedRateToken.ts new file mode 100644 index 000000000..0e30efc25 --- /dev/null +++ b/packages/ats/contracts/scripts/domain/factory/deployBondKpiLinkedRateToken.ts @@ -0,0 +1,186 @@ +import { ethers } from "ethers"; +import type { ResolverProxy } from "@contract-types"; +import { ResolverProxy__factory } from "@contract-types"; +import { GAS_LIMIT } from "@scripts/infrastructure"; +import { + ATS_ROLES, + BOND_KPI_LINKED_RATE_CONFIG_ID, + DeployBondFromFactoryParams, + FactoryRegulationDataParams, + Rbac, +} from "@scripts/domain"; + +// ============================================================================ +// Types +// ============================================================================ + +export interface InterestRateParams { + maxRate: number; + baseRate: number; + minRate: number; + startPeriod: number; + startRate: number; + missedPenalty: number; + reportPeriod: number; + rateDecimals: number; +} + +export interface ImpactDataParams { + maxDeviationCap: number; + baseLine: number; + maxDeviationFloor: number; + impactDataDecimals: number; + adjustmentPrecision: number; +} + +// ============================================================================ +// Main Functions +// ============================================================================ + +/** + * Deploy a bond token using the Factory contract. + * + * This function constructs the required data structures and calls the factory's + * deployBond method to create a new bond token with a diamond proxy. + * + * @param bondData - Bond deployment parameters + * @returns Deployed ResolverProxy (diamond) contract instance + * + * @example + * ```typescript + * const bond = await deployBondFromFactory({ + * adminAccount: deployer.address, + * isWhiteList: true, + * isControllable: true, + * isMultiPartition: false, + * name: 'My Bond', + * symbol: 'MBND', + * decimals: 18, + * isin: 'US0378331005', + * votingRight: true, + * // ... other params + * regulationType: RegulationType.REG_S, + * regulationSubType: RegulationSubType.NONE, + * factory: factoryContract, + * businessLogicResolver: blrAddress, + * }); + * ``` + */ +export async function deployBondKpiLinkedRateFromFactory( + bondDataParams: DeployBondFromFactoryParams, + regulationTypeParams: FactoryRegulationDataParams, + interestRateParams: InterestRateParams, + impactDataParams: ImpactDataParams, + kpiOracle: string, +): Promise { + const { + factory, + adminAccount, + securityData: securityDataParams, + bondDetails: bondDetailsParams, + proceedRecipients, + proceedRecipientsData, + } = bondDataParams; + + // Build RBAC array with admin + const rbacs: Rbac[] = [ + { + role: ATS_ROLES._DEFAULT_ADMIN_ROLE, + members: [adminAccount], + }, + ...securityDataParams.rbacs, + ]; + + // Build resolver proxy configuration + const resolverProxyConfiguration = { + key: BOND_KPI_LINKED_RATE_CONFIG_ID, + version: 1, + }; + + // Build security data structure + const securityData = { + arePartitionsProtected: securityDataParams.arePartitionsProtected, + isMultiPartition: securityDataParams.isMultiPartition, + resolver: securityDataParams.resolver, + resolverProxyConfiguration, + rbacs, + isControllable: securityDataParams.isControllable, + isWhiteList: securityDataParams.isWhiteList, + maxSupply: securityDataParams.maxSupply, + erc20MetadataInfo: { + name: securityDataParams.erc20MetadataInfo.name, + symbol: securityDataParams.erc20MetadataInfo.symbol, + isin: securityDataParams.erc20MetadataInfo.isin, + decimals: securityDataParams.erc20MetadataInfo.decimals, + }, + clearingActive: securityDataParams.clearingActive, + internalKycActivated: securityDataParams.internalKycActivated, + erc20VotesActivated: securityDataParams.erc20VotesActivated, + externalPauses: securityDataParams.externalPauses, + externalControlLists: securityDataParams.externalControlLists, + externalKycLists: securityDataParams.externalKycLists, + compliance: securityDataParams.compliance, + identityRegistry: securityDataParams.identityRegistry, + }; + + // Build bond details structure + const bondDetails = { + currency: bondDetailsParams.currency, + nominalValue: bondDetailsParams.nominalValue, + nominalValueDecimals: bondDetailsParams.nominalValueDecimals, + startingDate: bondDetailsParams.startingDate || Math.floor(Date.now() / 1000), + maturityDate: bondDetailsParams.maturityDate || 0, + }; + + // Build bond data + const bondData = { + security: securityData, + bondDetails, + proceedRecipients: proceedRecipients, + proceedRecipientsData: proceedRecipientsData, + }; + + // Build regulation data + const factoryRegulationData = { + regulationType: regulationTypeParams.regulationType, + regulationSubType: regulationTypeParams.regulationSubType, + additionalSecurityData: { + countriesControlListType: regulationTypeParams.additionalSecurityData.countriesControlListType, + listOfCountries: regulationTypeParams.additionalSecurityData.listOfCountries, + info: regulationTypeParams.additionalSecurityData.info, + }, + }; + + const bondKpiLinkedRateData = { + bondData: bondData, + factoryRegulationData: factoryRegulationData, + interestRate: interestRateParams, + impactData: impactDataParams, + kpiOracle, + }; + + // Deploy bond token via factory + const tx = await factory.deployBondKpiLinkedRate(bondKpiLinkedRateData, { + gasLimit: GAS_LIMIT.high, + }); + const receipt = await tx.wait(); + + // Find BondDeployed event to get diamond address + const event = receipt.events?.find((e) => e.event === "BondKpiLinkedRateDeployed"); + if (!event || !event.args) { + throw new Error( + `BondKpiLinkedRateDeployed event not found in deployment transaction. Events: ${JSON.stringify( + receipt.events?.map((e) => e.event), + )}`, + ); + } + + const diamondAddress = event.args.diamondProxyAddress || event.args[1]; + + if (!diamondAddress || diamondAddress === ethers.constants.AddressZero) { + throw new Error(`Invalid diamond address from event. Args: ${JSON.stringify(event.args)}`); + } + + // Return diamond proxy as ResolverProxy contract + return ResolverProxy__factory.connect(diamondAddress, factory.signer); +} diff --git a/packages/ats/contracts/scripts/domain/factory/deployBondSustainabilityPerformanceTargetRateToken.ts b/packages/ats/contracts/scripts/domain/factory/deployBondSustainabilityPerformanceTargetRateToken.ts new file mode 100644 index 000000000..356d979e4 --- /dev/null +++ b/packages/ats/contracts/scripts/domain/factory/deployBondSustainabilityPerformanceTargetRateToken.ts @@ -0,0 +1,181 @@ +import { ethers } from "ethers"; +import type { ResolverProxy } from "@contract-types"; +import { ResolverProxy__factory } from "@contract-types"; +import { GAS_LIMIT } from "@scripts/infrastructure"; +import { + ATS_ROLES, + BOND_SUSTAINABILITY_PERFORMANCE_TARGET_RATE_CONFIG_ID, + DeployBondFromFactoryParams, + FactoryRegulationDataParams, + Rbac, +} from "@scripts/domain"; + +// ============================================================================ +// Types +// ============================================================================ + +export interface InterestRateParamsSPT { + baseRate: number; + startPeriod: number; + startRate: number; + rateDecimals: number; +} + +export interface ImpactDataParamsSPT { + baseLine: number; + baseLineMode: number; + deltaRate: number; + impactDataMode: number; +} + +// ============================================================================ +// Main Functions +// ============================================================================ + +/** + * Deploy a bond token using the Factory contract. + * + * This function constructs the required data structures and calls the factory's + * deployBond method to create a new bond token with a diamond proxy. + * + * @param bondData - Bond deployment parameters + * @returns Deployed ResolverProxy (diamond) contract instance + * + * @example + * ```typescript + * const bond = await deployBondFromFactory({ + * adminAccount: deployer.address, + * isWhiteList: true, + * isControllable: true, + * isMultiPartition: false, + * name: 'My Bond', + * symbol: 'MBND', + * decimals: 18, + * isin: 'US0378331005', + * votingRight: true, + * // ... other params + * regulationType: RegulationType.REG_S, + * regulationSubType: RegulationSubType.NONE, + * factory: factoryContract, + * businessLogicResolver: blrAddress, + * }); + * ``` + */ +export async function deployBondSustainabilityPerformanceTargetRateFromFactory( + bondDataParams: DeployBondFromFactoryParams, + regulationTypeParams: FactoryRegulationDataParams, + interestRateParams: InterestRateParamsSPT, + impactDataParams: ImpactDataParamsSPT[], + projects: string[], +): Promise { + const { + factory, + adminAccount, + securityData: securityDataParams, + bondDetails: bondDetailsParams, + proceedRecipients, + proceedRecipientsData, + } = bondDataParams; + + // Build RBAC array with admin + const rbacs: Rbac[] = [ + { + role: ATS_ROLES._DEFAULT_ADMIN_ROLE, + members: [adminAccount], + }, + ...securityDataParams.rbacs, + ]; + + // Build resolver proxy configuration + const resolverProxyConfiguration = { + key: BOND_SUSTAINABILITY_PERFORMANCE_TARGET_RATE_CONFIG_ID, + version: 1, + }; + + // Build security data structure + const securityData = { + arePartitionsProtected: securityDataParams.arePartitionsProtected, + isMultiPartition: securityDataParams.isMultiPartition, + resolver: securityDataParams.resolver, + resolverProxyConfiguration, + rbacs, + isControllable: securityDataParams.isControllable, + isWhiteList: securityDataParams.isWhiteList, + maxSupply: securityDataParams.maxSupply, + erc20MetadataInfo: { + name: securityDataParams.erc20MetadataInfo.name, + symbol: securityDataParams.erc20MetadataInfo.symbol, + isin: securityDataParams.erc20MetadataInfo.isin, + decimals: securityDataParams.erc20MetadataInfo.decimals, + }, + clearingActive: securityDataParams.clearingActive, + internalKycActivated: securityDataParams.internalKycActivated, + erc20VotesActivated: securityDataParams.erc20VotesActivated, + externalPauses: securityDataParams.externalPauses, + externalControlLists: securityDataParams.externalControlLists, + externalKycLists: securityDataParams.externalKycLists, + compliance: securityDataParams.compliance, + identityRegistry: securityDataParams.identityRegistry, + }; + + // Build bond details structure + const bondDetails = { + currency: bondDetailsParams.currency, + nominalValue: bondDetailsParams.nominalValue, + nominalValueDecimals: bondDetailsParams.nominalValueDecimals, + startingDate: bondDetailsParams.startingDate || Math.floor(Date.now() / 1000), + maturityDate: bondDetailsParams.maturityDate || 0, + }; + + // Build bond data + const bondData = { + security: securityData, + bondDetails, + proceedRecipients: proceedRecipients, + proceedRecipientsData: proceedRecipientsData, + }; + + // Build regulation data + const factoryRegulationData = { + regulationType: regulationTypeParams.regulationType, + regulationSubType: regulationTypeParams.regulationSubType, + additionalSecurityData: { + countriesControlListType: regulationTypeParams.additionalSecurityData.countriesControlListType, + listOfCountries: regulationTypeParams.additionalSecurityData.listOfCountries, + info: regulationTypeParams.additionalSecurityData.info, + }, + }; + + const bondSustainabilityPerformanceTargetRateData = { + bondData: bondData, + factoryRegulationData: factoryRegulationData, + interestRate: interestRateParams, + impactData: impactDataParams, + projects: projects, + }; + + // Deploy bond token via factory + const tx = await factory.deployBondSustainabilityPerformanceTargetRate(bondSustainabilityPerformanceTargetRateData, { + gasLimit: GAS_LIMIT.high, + }); + const receipt = await tx.wait(); + + // Find BondDeployed event to get diamond address + const event = receipt.events?.find((e) => e.event === "BondSustainabilityPerformanceTargetRateDeployed"); + if (!event || !event.args) { + throw new Error( + `BondSustainabilityPerformanceTargetRateDeployed event not found in deployment transaction. Events: ${JSON.stringify( + receipt.events?.map((e) => e.event), + )}`, + ); + } + + const diamondAddress = event.args.diamondProxyAddress || event.args[1]; + + if (!diamondAddress || diamondAddress === ethers.constants.AddressZero) { + throw new Error(`Invalid diamond address from event. Args: ${JSON.stringify(event.args)}`); + } + + // Return diamond proxy as ResolverProxy contract + return ResolverProxy__factory.connect(diamondAddress, factory.signer); +} diff --git a/packages/ats/contracts/scripts/domain/factory/deployBondToken.ts b/packages/ats/contracts/scripts/domain/factory/deployBondToken.ts index e9523f8fa..125c7bc72 100644 --- a/packages/ats/contracts/scripts/domain/factory/deployBondToken.ts +++ b/packages/ats/contracts/scripts/domain/factory/deployBondToken.ts @@ -2,14 +2,8 @@ import { ethers } from "ethers"; import type { IFactory, ResolverProxy } from "@contract-types"; import { ResolverProxy__factory } from "@contract-types"; import { GAS_LIMIT } from "@scripts/infrastructure"; -import { - ATS_ROLES, - BOND_CONFIG_ID, - BondDetailsDataParams, - FactoryRegulationDataParams, - Rbac, - SecurityDataParams, -} from "@scripts/domain"; +import { ATS_ROLES, BOND_CONFIG_ID } from "../constants"; +import { BondDetailsDataParams, FactoryRegulationDataParams, Rbac, SecurityDataParams } from "./types"; // ============================================================================ // Types diff --git a/packages/ats/contracts/scripts/domain/factory/deployEquityToken.ts b/packages/ats/contracts/scripts/domain/factory/deployEquityToken.ts index 147304c4d..a9706307f 100644 --- a/packages/ats/contracts/scripts/domain/factory/deployEquityToken.ts +++ b/packages/ats/contracts/scripts/domain/factory/deployEquityToken.ts @@ -2,14 +2,8 @@ import { ethers } from "ethers"; import type { IFactory, ResolverProxy } from "@contract-types"; import { ResolverProxy__factory } from "@contract-types"; import { GAS_LIMIT } from "@scripts/infrastructure"; -import { - ATS_ROLES, - EQUITY_CONFIG_ID, - EquityDetailsDataParams, - FactoryRegulationDataParams, - Rbac, - SecurityDataParams, -} from "@scripts/domain"; +import { ATS_ROLES, EQUITY_CONFIG_ID } from "../constants"; +import { EquityDetailsDataParams, FactoryRegulationDataParams, Rbac, SecurityDataParams } from "./types"; // ============================================================================ // Types diff --git a/packages/ats/contracts/scripts/domain/factory/types.ts b/packages/ats/contracts/scripts/domain/factory/types.ts index 614dd300c..4eab5812c 100644 --- a/packages/ats/contracts/scripts/domain/factory/types.ts +++ b/packages/ats/contracts/scripts/domain/factory/types.ts @@ -1,7 +1,8 @@ import { ethers } from "ethers"; -import { AtsRoleName, AtsRoleHash } from "@scripts/domain"; +import { AtsRoleName, AtsRoleHash } from "../constants"; export interface Rbac { - role: AtsRoleName | AtsRoleHash; + // eslint-disable-next-line @typescript-eslint/ban-types + role: AtsRoleName | AtsRoleHash | (string & {}); members: string[]; } @@ -97,6 +98,11 @@ export interface FactoryRegulationDataParams { }; } +export interface FixedRateDataParams { + rate: number; + rateDecimals: number; +} + export enum SecurityType { BOND = 0, EQUITY = 1, diff --git a/packages/ats/contracts/scripts/domain/index.ts b/packages/ats/contracts/scripts/domain/index.ts index 26c18e358..0a6a9950f 100644 --- a/packages/ats/contracts/scripts/domain/index.ts +++ b/packages/ats/contracts/scripts/domain/index.ts @@ -24,21 +24,15 @@ * ``` */ -// Domain registry data (auto-generated) - MUST be first, others depend on it +// Domain registry data (auto-generated) export * from "./atsRegistry.data"; -// Domain constants (depends on ROLES from registry.data) +// Domain constants export * from "./constants"; // Domain registry (ATS-specific contract registry helpers) export * from "./atsRegistry"; -// Equity configuration -export * from "./equity/createConfiguration"; - -// Bond configuration -export * from "./bond/createConfiguration"; - // Factory deployment and types export * from "./factory/deploy"; export * from "./factory/types"; @@ -46,3 +40,21 @@ export * from "./factory/types"; // Token deployment from factory export * from "./factory/deployEquityToken"; export * from "./factory/deployBondToken"; +export * from "./factory/deployBondFixedRateToken"; +export * from "./factory/deployBondKpiLinkedRateToken"; +export * from "./factory/deployBondSustainabilityPerformanceTargetRateToken"; + +// Equity configuration +export * from "./equity/createConfiguration"; + +// Bond Variable Rate configuration +export * from "./bond/createConfiguration"; + +// Bond Fixed Rate configuration +export * from "./bondFixedRate/createConfiguration"; + +// Bond Kpi Linked Rate configuration +export * from "./bondKpiLinkedRate/createConfiguration"; + +// Bond Sustainability Performance Target Rate configuration +export * from "./bondSustainabilityPerformanceTargetRate/createConfiguration"; diff --git a/packages/ats/contracts/scripts/infrastructure/checkpoint/utils.ts b/packages/ats/contracts/scripts/infrastructure/checkpoint/utils.ts index 955717466..4eeed884e 100644 --- a/packages/ats/contracts/scripts/infrastructure/checkpoint/utils.ts +++ b/packages/ats/contracts/scripts/infrastructure/checkpoint/utils.ts @@ -45,7 +45,13 @@ export function checkpointToDeploymentOutput(checkpoint: DeploymentCheckpoint): if (!steps.facets || steps.facets.size === 0) { throw new Error("Checkpoint missing facet deployments"); } - if (!steps.configurations?.equity || !steps.configurations?.bond) { + if ( + !steps.configurations?.equity || + !steps.configurations?.bond || + !steps.configurations?.bondFixedRate || + !steps.configurations?.bondKpiLinkedRate || + !steps.configurations?.bondSustainabilityPerformanceTargetRate + ) { throw new Error("Checkpoint missing configurations"); } @@ -109,12 +115,30 @@ export function checkpointToDeploymentOutput(checkpoint: DeploymentCheckpoint): facetCount: steps.configurations.bond.facetCount, facets: [], // Will be populated in actual workflow }, + bondFixedRate: { + configId: steps.configurations.bondFixedRate.configId, + version: steps.configurations.bondFixedRate.version, + facetCount: steps.configurations.bondFixedRate.facetCount, + facets: [], // Will be populated in actual workflow + }, + bondKpiLinkedRate: { + configId: steps.configurations.bondKpiLinkedRate.configId, + version: steps.configurations.bondKpiLinkedRate.version, + facetCount: steps.configurations.bondKpiLinkedRate.facetCount, + facets: [], // Will be populated in actual workflow + }, + bondSustainabilityPerformanceTargetRate: { + configId: steps.configurations.bondSustainabilityPerformanceTargetRate.configId, + version: steps.configurations.bondSustainabilityPerformanceTargetRate.version, + facetCount: steps.configurations.bondSustainabilityPerformanceTargetRate.facetCount, + facets: [], // Will be populated in actual workflow + }, }, summary: { totalContracts: 3 + steps.facets.size, // ProxyAdmin + BLR + Factory + facets totalFacets: steps.facets.size, - totalConfigurations: 2, + totalConfigurations: 3, deploymentTime: endTime - start, gasUsed: totalGasUsed.toString(), success: checkpoint.status === "completed", @@ -123,6 +147,9 @@ export function checkpointToDeploymentOutput(checkpoint: DeploymentCheckpoint): helpers: { getEquityFacets: () => [], getBondFacets: () => [], + getBondFixedRateFacets: () => [], + getBondKpiLinkedRateFacets: () => [], + getBondSustainabilityPerformanceTargetRateFacets: () => [], }, }; } @@ -158,6 +185,10 @@ export function getStepName(step: number, workflowType: WorkflowType = "newBlr") case 5: return "Bond Configuration"; case 6: + return "Bond Fixed Rate Configuration"; + case 7: + return "Bond KpiLinked Rate Configuration"; + case 8: return "Factory"; default: return `Unknown Step ${step}`; @@ -208,6 +239,10 @@ export function getStepName(step: number, workflowType: WorkflowType = "newBlr") case 4: return "Bond Configuration"; case 5: + return "Bond Fixed Rate Configuration"; + case 6: + return "Bond KpiLinked Rate Configuration"; + case 7: return "Factory"; default: return `Unknown Step ${step}`; @@ -224,13 +259,13 @@ export function getStepName(step: number, workflowType: WorkflowType = "newBlr") export function getTotalSteps(workflowType: WorkflowType = "newBlr"): number { switch (workflowType) { case "newBlr": - return 7; + return 8; case "existingBlr": - return 6; + return 7; case "upgradeConfigurations": return 5; // Facets, Register, Equity, Bond, Proxy Updates default: - return 7; + return 8; } } diff --git a/packages/ats/contracts/scripts/infrastructure/config.ts b/packages/ats/contracts/scripts/infrastructure/config.ts index 1c70eafbc..c31b18fed 100644 --- a/packages/ats/contracts/scripts/infrastructure/config.ts +++ b/packages/ats/contracts/scripts/infrastructure/config.ts @@ -180,6 +180,29 @@ export function getPrivateKeys(network: string): string[] { return allKeys[resolvedNetwork] || []; } +/** + * Get a single private key for a network by index. + * + * Convenience wrapper around getPrivateKeys() for getting a specific key. + * Resolves network aliases for backward compatibility. + * + * @param network - Network identifier (e.g., 'hedera-testnet', 'local') + * @param index - Key index (default: 0) + * @returns Private key string, or undefined if not found + * + * @example + * ```typescript + * const privateKey = getPrivateKey('hedera-testnet'); + * if (!privateKey) { + * throw new Error('Set HEDERA_TESTNET_PRIVATE_KEY_0 in .env'); + * } + * ``` + */ +export function getPrivateKey(network: string, index: number = 0): string | undefined { + const keys = getPrivateKeys(network); + return keys[index]; +} + /** * Get deployed contract address for a network. * diff --git a/packages/ats/contracts/scripts/infrastructure/constants.ts b/packages/ats/contracts/scripts/infrastructure/constants.ts index d76f7df9e..7ad8ebf08 100644 --- a/packages/ats/contracts/scripts/infrastructure/constants.ts +++ b/packages/ats/contracts/scripts/infrastructure/constants.ts @@ -251,7 +251,6 @@ export const DEPLOYMENT_OUTPUT_DIR = "./deployments"; /** * Deployment output file naming pattern. */ -export const DEPLOYMENT_OUTPUT_PATTERN = "{network}_{timestamp}.json"; // * Time periods (in seconds and milliseconds) export const TIME_PERIODS_S = { diff --git a/packages/ats/contracts/scripts/infrastructure/index.ts b/packages/ats/contracts/scripts/infrastructure/index.ts index b947b20b2..fd26dab7d 100644 --- a/packages/ats/contracts/scripts/infrastructure/index.ts +++ b/packages/ats/contracts/scripts/infrastructure/index.ts @@ -24,9 +24,10 @@ */ // ============================================================================ -// Types +// Types (consolidated in types/ folder) // ============================================================================ +// Core types export type { RegistryProvider, FacetDefinition, @@ -36,8 +37,6 @@ export type { DeploymentResult, UpgradeProxyOptions, UpgradeProxyResult, - CreateConfigOptions, - CreateConfigResult, OperationResult, SignerOptions, AnyDeploymentOutput, @@ -61,10 +60,20 @@ export type { WorkflowType, AtsWorkflowType, ResumeOptions, -} from "./types/checkpoint"; +} from "./types"; // Type guards -export { isSaveSuccess, isSaveFailure, isAtsWorkflow } from "./types/checkpoint"; +export { isSaveSuccess, isSaveFailure, isAtsWorkflow } from "./types"; + +// BLR configuration types +export type { + FacetConfiguration, + BatchFacetConfiguration, + CreateBlrConfigurationResult, + ConfigurationError, + ConfigurationData, + FacetConfigurationData, +} from "./types"; // ============================================================================ // Constants @@ -88,7 +97,6 @@ export { PROXY_CONTRACTS, ENV_VAR_PATTERNS, DEPLOYMENT_OUTPUT_DIR, - DEPLOYMENT_OUTPUT_PATTERN, ATS_WORKFLOW_DESCRIPTORS, WORKFLOW_DESCRIPTORS, registerWorkflowDescriptor, @@ -112,7 +120,14 @@ export { // Configuration // ============================================================================ -export { getNetworkConfig, getAllNetworks } from "./config"; +export { getNetworkConfig, getAllNetworks, getPrivateKey, getPrivateKeys } from "./config"; + +// ============================================================================ +// Signer +// ============================================================================ + +export { createNetworkSigner } from "./signer"; +export type { NetworkSignerResult } from "./signer"; export { getDeploymentConfig, @@ -141,13 +156,7 @@ export { registerFacets, type RegisterFacetsOptions, type RegisterFacetsResult } export { registerAdditionalFacets, type RegisterAdditionalFacetsOptions } from "./operations/registerAdditionalFacets"; -export { - createBatchConfiguration, - type FacetConfiguration, - type CreateBlrConfigurationResult, - type ConfigurationData, - type ConfigurationError, -} from "./operations/blrConfigurations"; +export { createBatchConfiguration } from "./operations/blrConfigurations"; export { deployBlr, type DeployBlrOptions, type DeployBlrResult } from "./operations/blrDeployment"; @@ -193,7 +202,7 @@ export { // Utilities // ============================================================================ -export { validateAddress, validateBytes32 } from "./utils/validation"; +export { isValidAddress, validateAddress, isValidBytes32, validateBytes32 } from "./utils/validation"; export { saveDeploymentOutput, diff --git a/packages/ats/contracts/scripts/infrastructure/operations/blrConfigurations.ts b/packages/ats/contracts/scripts/infrastructure/operations/blrConfigurations.ts index 0ff7d0da2..c44f16d75 100644 --- a/packages/ats/contracts/scripts/infrastructure/operations/blrConfigurations.ts +++ b/packages/ats/contracts/scripts/infrastructure/operations/blrConfigurations.ts @@ -9,9 +9,26 @@ * These are generic operations that work with any configuration ID and facet set. * Domain-specific configuration creation (equity, bond) is handled by modules. * + * ## Performance Note: Dynamic Imports + * + * This file uses dynamic imports (`await import()`) for some `@scripts/infrastructure` + * modules instead of static imports. This is intentional for parallel test performance. + * + * **Why:** The barrel export (`@scripts/infrastructure/index.ts`) re-exports from files + * that import `@contract-types` (typechain). When Node.js loads the barrel, it eagerly + * loads ALL re-exported modules, triggering typechain loading (~400 generated files). + * + * In parallel tests, each worker loads modules independently: + * - Static imports: N workers Γ— full module graph = 4x+ slowdown + * - Dynamic imports: Modules loaded only when functions are called (lazy) + * + * **Measured impact:** Static imports caused tests to run in 8+ minutes vs 2 minutes. + * + * @see README.md "Troubleshooting > Parallel Tests Running Slowly" for details * @module core/operations/blrConfigurations */ +import { Contract } from "ethers"; import { BusinessLogicResolver } from "@contract-types"; import { DEFAULT_TRANSACTION_TIMEOUT, @@ -28,62 +45,8 @@ import { isInstantMiningNetwork, } from "@scripts/infrastructure"; -/** - * Facet configuration for BLR. - */ -export interface FacetConfiguration { - /** Facet name */ - facetName: string; - - /** Function selectors this facet handles */ - selectors: string[]; -} - -/** - * Batch facet configuration structure for contract calls. - * This matches the IDiamondCutManager.FacetConfigurationStruct interface. - */ -export interface BatchFacetConfiguration { - /** Facet ID (keccak256 hash of facet name) */ - id: string; - - /** Facet version */ - version: number; -} - -/** - * Result of BLR configuration. - * - * Used by the deployBlrWithFacets workflow helper. - */ -export interface CreateBlrConfigurationResult { - /** Whether configuration succeeded */ - success: boolean; - - /** BLR address */ - blrAddress: string; - - /** Configuration ID */ - configurationId: string; - - /** Configuration version created */ - version?: number; - - /** Number of facets configured */ - facetCount: number; - - /** Transaction hash (only if success=true) */ - transactionHash?: string; - - /** Block number (only if success=true) */ - blockNumber?: number; - - /** Gas used (only if success=true) */ - gasUsed?: number; - - /** Error message (only if success=false) */ - error?: string; -} +// Types imported from centralized types module +import type { BatchFacetConfiguration, ConfigurationData, ConfigurationError, FacetConfigurationData } from "../types"; /** * Get the latest configuration version for a configuration ID. @@ -139,45 +102,6 @@ export async function configurationExists(blr: BusinessLogicResolver, configurat } } -// ============================================================================ -// Configuration Creation (Generic Operation for BLR Configurations) -// ============================================================================ - -/** - * Error types for configuration operations. - */ -export type ConfigurationError = - | "EMPTY_FACET_LIST" - | "INVALID_ADDRESS" - | "INVALID_CONFIG_ID" - | "FACET_NOT_FOUND" - | "TRANSACTION_FAILED" - | "EVENT_PARSE_FAILED"; - -/** - * Configuration data returned on success. - */ -export interface ConfigurationData { - /** Configuration ID */ - configurationId: string; - - /** Configuration version */ - version: number; - - /** Facet keys and addresses */ - facetKeys: Array<{ - facetName: string; - key: string; - address: string; - }>; - - /** Transaction hash */ - transactionHash: string; - - /** Block number */ - blockNumber: number; -} - // ============================================================================ // Batch Processing Functions // ============================================================================ @@ -342,7 +266,7 @@ export async function sendBatchConfiguration( info(` Confirmations to wait: ${confirmations}`); try { - // Import GAS_LIMIT constants + // Dynamic import for parallel test performance (see module JSDoc for explanation) const { GAS_LIMIT } = await import("@scripts/infrastructure"); const txResponse = await blrContract.createBatchConfiguration(configId, configurations, finalBatch, { @@ -408,20 +332,6 @@ export async function sendBatchConfiguration( * }) * ``` */ -/** - * Facet data for configuration creation. - */ -export interface FacetConfigurationData { - /** Base facet name (e.g., 'AccessControlFacet') */ - facetName: string; - - /** Resolver key (bytes32) for the facet */ - resolverKey: string; - - /** Deployed facet address */ - address: string; -} - export async function createBatchConfiguration( blrContract: Contract, options: { @@ -453,6 +363,7 @@ export async function createBatchConfiguration( confirmations = 0, } = options; + // Dynamic imports for parallel test performance (see module JSDoc for explanation) const { info } = await import("@scripts/infrastructure"); const { ok, err } = await import("@scripts/infrastructure"); @@ -513,6 +424,7 @@ export async function createBatchConfiguration( const configVersion = await blrContract.getLatestVersionByConfiguration(configurationId); const actualVersion = configVersion.toNumber(); + // Dynamic import for parallel test performance (see module JSDoc) const { success: logSuccess } = await import("../utils/logging"); logSuccess("Batch configuration completed successfully", { configurationId, @@ -529,6 +441,7 @@ export async function createBatchConfiguration( blockNumber: 0, }); } catch (error) { + // Dynamic import for parallel test performance (see module JSDoc) const { error: logError } = await import("../utils/logging"); const errorMessage = error instanceof Error ? error.message : String(error); @@ -539,6 +452,3 @@ export async function createBatchConfiguration( return err("TRANSACTION_FAILED", errorMessage, error); } } - -// Re-export Contract type for convenience -type Contract = import("ethers").Contract; diff --git a/packages/ats/contracts/scripts/infrastructure/operations/generateRegistryPipeline.ts b/packages/ats/contracts/scripts/infrastructure/operations/generateRegistryPipeline.ts index bdac4feb3..321d6be46 100644 --- a/packages/ats/contracts/scripts/infrastructure/operations/generateRegistryPipeline.ts +++ b/packages/ats/contracts/scripts/infrastructure/operations/generateRegistryPipeline.ts @@ -28,8 +28,23 @@ */ import * as path from "path"; -import { ContractFile } from "../../tools/scanner/contractFinder"; -import { ContractMetadata } from "../../tools/scanner/metadataExtractor"; +import { + ContractFile, + ContractMetadata, + findAllContracts, + categorizeContracts, + pairTimeTravelVariants, + extractMetadata, + detectCategory, + detectLayer, + generateRegistry, + generateSummary, + extractRoles, + extractResolverKeys, + writeFile as writeToFileFn, + readFile, + findSolidityFiles, +} from "@scripts/tools"; import { LogLevel, configureLogger, section, info, success, warn, table } from "@scripts/infrastructure"; /** @@ -39,6 +54,9 @@ export interface RegistryGenerationConfig { /** Path to contracts directory (required) */ contractsPath: string; + /** Path to artifacts directory (required) */ + artifactPath: string; + /** Glob patterns to include (default: ['**\/*.sol']) */ includePaths?: string[]; @@ -163,6 +181,7 @@ export const DEFAULT_REGISTRY_CONFIG: Required< Omit > & { mockContractPaths: string[] } = { contractsPath: "./contracts", + artifactPath: "./artifacts/contracts", includePaths: ["**/*.sol"], excludePaths: ["**/test/**", "**/tests/**", "**/mocks/**", "**/mock/**", "**/*.t.sol", "**/*.s.sol"], resolverKeyPaths: ["**/constants/resolverKeys.sol", "**/layer_*/constants/resolverKeys.sol"], @@ -231,15 +250,6 @@ export async function generateRegistryPipeline( ): Promise { const startTime = Date.now(); - // Import dependencies lazily to avoid circular dependencies - const { findAllContracts, categorizeContracts, pairTimeTravelVariants } = await import( - "../../tools/scanner/contractFinder" - ); - const { extractMetadata, detectCategory, detectLayer } = await import("../../tools/scanner/metadataExtractor"); - const { generateRegistry, generateSummary } = await import("../../tools/generators/registryGenerator"); - const { extractRoles, extractResolverKeys } = await import("../../tools/utils/solidityUtils"); - const { writeFile: writeToFileFn, readFile, findSolidityFiles } = await import("../../tools/utils/fileUtils"); - // Merge with defaults const fullConfig: Required = { ...DEFAULT_REGISTRY_CONFIG, @@ -268,9 +278,14 @@ export async function generateRegistryPipeline( ? fullConfig.contractsPath : path.resolve(process.cwd(), fullConfig.contractsPath); + info(`Scanning: ${fullConfig.artifactPath}`); + const artifactDir = path.isAbsolute(fullConfig.artifactPath) + ? fullConfig.artifactPath + : path.resolve(process.cwd(), fullConfig.artifactPath); + // Step 1: Find all contracts info("Step 1: Discovering contracts..."); - const allContracts = findAllContracts(contractsDir); + const allContracts = findAllContracts(contractsDir, artifactDir); info(` Found ${allContracts.length} contract files`); // Step 2: Categorize contracts @@ -366,31 +381,8 @@ export async function generateRegistryPipeline( if (fullConfig.includeStorageWrappers) { info("Step 5.5: Extracting Storage Wrapper metadata..."); - const storageWrapperFiles = allSolidityFiles.filter((filePath) => filePath.endsWith("StorageWrapper.sol")); - - const storageWrapperContracts = storageWrapperFiles - .map((filePath) => { - const source = readFile(filePath); - const contractNames = allContracts.find((c) => c.filePath === filePath)?.contractNames; - if (!contractNames || contractNames.length === 0) return null; - - const primaryContract = contractNames.find((name) => name.endsWith("StorageWrapper")) || contractNames[0]; - - // Filter out interface StorageWrappers - if (primaryContract.startsWith("I") && primaryContract.endsWith("StorageWrapper")) { - return null; - } - - return { - filePath, - relativePath: filePath.replace(contractsDir + "/", ""), - directory: path.dirname(filePath), - fileName: path.basename(filePath, ".sol"), - contractNames, - primaryContract, - source, - }; - }) + const storageWrapperContracts = allContracts + .filter((contract) => contract.filePath.endsWith("StorageWrapper.sol")) .filter((c): c is NonNullable => c !== null); storageWrapperMetadata = storageWrapperContracts.map((contract) => diff --git a/packages/ats/contracts/scripts/infrastructure/operations/registerAdditionalFacets.ts b/packages/ats/contracts/scripts/infrastructure/operations/registerAdditionalFacets.ts index f99744df8..fb01ecbcf 100644 --- a/packages/ats/contracts/scripts/infrastructure/operations/registerAdditionalFacets.ts +++ b/packages/ats/contracts/scripts/infrastructure/operations/registerAdditionalFacets.ts @@ -30,6 +30,7 @@ import { } from "@scripts/infrastructure"; import { BusinessLogicResolver__factory } from "@contract-types"; import type { RegisterFacetsResult, FacetRegistrationData } from "./registerFacets"; +import { FACET_REGISTRATION_BATCH_SIZE } from "../../domain/constants"; /** * Options for registering additional facets. @@ -305,21 +306,42 @@ export async function registerAdditionalFacets( const businessLogics = Array.from(mergedFacetsMap.values()).map((facet) => ({ businessLogicKey: facet.key, businessLogicAddress: facet.address, + businessLogicName: facet.name, })); - const tx = await blr.registerBusinessLogics(businessLogics, overrides); + const iterations = businessLogics.length / FACET_REGISTRATION_BATCH_SIZE; + const transactionHashes = []; + const blockNumbers = []; + const transactionGas = []; - info(` Registration transaction sent: ${tx.hash}`); + for (let i = 0; i <= iterations; i++) { + const businessLogicsSlice = businessLogics.slice( + i * FACET_REGISTRATION_BATCH_SIZE, + (i + 1) * FACET_REGISTRATION_BATCH_SIZE, + ); + const tx = await blr.registerBusinessLogics(businessLogicsSlice, overrides); + + info(`Registration transaction sent: ${tx.hash}`); + + const receipt = await waitForTransaction(tx, 1, DEFAULT_TRANSACTION_TIMEOUT); + transactionHashes.push(receipt.transactionHash); + blockNumbers.push(receipt.blockNumber); + transactionGas.push(receipt.gasUsed.toNumber()); - const receipt = await waitForTransaction(tx, 1, DEFAULT_TRANSACTION_TIMEOUT); + const gasUsed = formatGasUsage(receipt, tx.gasLimit); + debug(gasUsed); - const gasUsed = formatGasUsage(receipt, tx.gasLimit); - debug(` ${gasUsed}`); + const registeredSlice = businessLogicsSlice.map((f) => f.businessLogicName); + + for (const facetName of registeredSlice.values()) { + if (facetName) { + registered.push(facetName); + } + } - // Track registered facets - for (const facet of mergedFacetsMap.values()) { - if (facet.name) { - registered.push(facet.name); + success(`Successfully registered ${registeredSlice.length} facets`); + for (const facetName of registeredSlice) { + info(` βœ“ ${facetName}`); } } @@ -349,9 +371,9 @@ export async function registerAdditionalFacets( blrAddress, registered, failed, - transactionHash: receipt.transactionHash, - blockNumber: receipt.blockNumber, - gasUsed: receipt.gasUsed.toNumber(), + transactionHashes, + blockNumbers, + transactionGas, }; } catch (err) { const errorMessage = extractRevertReason(err); diff --git a/packages/ats/contracts/scripts/infrastructure/operations/registerFacets.ts b/packages/ats/contracts/scripts/infrastructure/operations/registerFacets.ts index 9be7bea86..0c25a267f 100644 --- a/packages/ats/contracts/scripts/infrastructure/operations/registerFacets.ts +++ b/packages/ats/contracts/scripts/infrastructure/operations/registerFacets.ts @@ -23,7 +23,9 @@ import { validateAddress, waitForTransaction, warn, + GAS_LIMIT, } from "@scripts/infrastructure"; +import { FACET_REGISTRATION_BATCH_SIZE } from "../../domain/constants"; /** * Facet data for registration in BLR. @@ -70,13 +72,13 @@ export interface RegisterFacetsResult { failed: string[]; /** Transaction hash (only if success=true) */ - transactionHash?: string; + transactionHashes?: string[]; /** Block number (only if success=true) */ - blockNumber?: number; + blockNumbers?: number[]; /** Gas used (only if success=true) */ - gasUsed?: number; + transactionGas?: number[]; /** Error message (only if success=false) */ error?: string; @@ -209,22 +211,39 @@ export async function registerFacets( const businessLogics = validFacets.map((facet) => ({ businessLogicKey: facet.resolverKey, businessLogicAddress: facet.address, + businessLogicName: facet.name, })); - const tx = await blr.registerBusinessLogics(businessLogics, overrides); + const iterations = businessLogics.length / FACET_REGISTRATION_BATCH_SIZE; + const transactionHashes = []; + const blockNumbers = []; + const transactionGas = []; - info(`Registration transaction sent: ${tx.hash}`); + for (let i = 0; i <= iterations; i++) { + const businessLogicsSlice = businessLogics.slice( + i * FACET_REGISTRATION_BATCH_SIZE, + (i + 1) * FACET_REGISTRATION_BATCH_SIZE, + ); + const tx = await blr.registerBusinessLogics(businessLogicsSlice, { gasLimit: GAS_LIMIT.high, ...overrides }); + + info(`Registration transaction sent: ${tx.hash}`); - const receipt = await waitForTransaction(tx, 1, DEFAULT_TRANSACTION_TIMEOUT); + const receipt = await waitForTransaction(tx, 1, DEFAULT_TRANSACTION_TIMEOUT); + transactionHashes.push(receipt.transactionHash); + blockNumbers.push(receipt.blockNumber); + transactionGas.push(receipt.gasUsed.toNumber()); - const gasUsed = formatGasUsage(receipt, tx.gasLimit); - debug(gasUsed); + const gasUsed = formatGasUsage(receipt, tx.gasLimit); + debug(gasUsed); - registered.push(...validFacets.map((f) => f.name)); + const registeredSlice = businessLogicsSlice.map((f) => f.businessLogicName); - success(`Successfully registered ${registered.length} facets`); - for (const facetName of registered) { - info(` βœ“ ${facetName}`); + registered.push(...registeredSlice); + + success(`Successfully registered ${registeredSlice.length} facets`); + for (const facetName of registeredSlice) { + info(` βœ“ ${facetName}`); + } } if (failed.length > 0) { @@ -239,9 +258,9 @@ export async function registerFacets( blrAddress, registered, failed, - transactionHash: receipt.transactionHash, - blockNumber: receipt.blockNumber, - gasUsed: receipt.gasUsed.toNumber(), + transactionHashes, + blockNumbers, + transactionGas, }; } catch (err) { const errorMessage = extractRevertReason(err); @@ -256,54 +275,3 @@ export async function registerFacets( }; } } - -/** - * Register a single facet in BLR. - * - * Convenience function for registering one facet at a time. - * - * **Note:** Caller must provide the resolver key for the facet. - * - * @param blr - Typed BusinessLogicResolver contract instance - * @param facetName - Facet name - * @param facetAddress - Facet deployed address - * @param resolverKey - Resolver key (bytes32) for the facet - * @param overrides - Transaction overrides - * @returns Registration result - * - * @example - * ```typescript - * import { BusinessLogicResolver__factory } from '@contract-types' - * import { atsRegistry } from '@scripts/domain' - * - * const blr = BusinessLogicResolver__factory.connect('0x123...', signer) - * - * // Look up resolver key from registry - * const resolverKey = atsRegistry.getFacetDefinition('AccessControlFacet').resolverKey.value - * - * const result = await registerFacet( - * blr, - * 'AccessControlFacet', - * '0xabc...', - * resolverKey - * ) - * ``` - */ -export async function registerFacet( - blr: BusinessLogicResolver, - facetName: string, - facetAddress: string, - resolverKey: string, - overrides: Overrides = {}, -): Promise { - return registerFacets(blr, { - facets: [ - { - name: facetName, - address: facetAddress, - resolverKey, - }, - ], - overrides, - }); -} diff --git a/packages/ats/contracts/scripts/infrastructure/signer.ts b/packages/ats/contracts/scripts/infrastructure/signer.ts new file mode 100644 index 000000000..6211a7a5c --- /dev/null +++ b/packages/ats/contracts/scripts/infrastructure/signer.ts @@ -0,0 +1,89 @@ +// SPDX-License-Identifier: Apache-2.0 + +/** + * Network signer utilities for the infrastructure layer. + * + * This is the INFRASTRUCTURE LAYER - provides low-level signer creation + * when the network name is already known and validated. + * + * For CLI entry points that need to read NETWORK from environment variables + * and validate it with user-friendly error messages, use cli/shared/network.ts + * which wraps these utilities with CLI-friendly patterns. + * + * @example + * ```typescript + * // Infrastructure: use when network is already known + * import { createNetworkSigner } from "@scripts/infrastructure"; + * const { signer, address } = await createNetworkSigner("hedera-testnet"); + * + * // CLI: use when reading from environment + * import { requireNetworkSigner } from "./cli/shared"; + * const { network, signer, address } = await requireNetworkSigner(); + * ``` + * + * @module infrastructure/signer + */ + +import { Wallet, providers, Signer } from "ethers"; +import { getNetworkConfig, getPrivateKey } from "./config"; +import { error } from "./utils/logging"; + +/** + * Result of creating a network signer. + */ +export interface NetworkSignerResult { + /** The ethers.js Signer instance */ + signer: Signer; + /** The signer's address (resolved) */ + address: string; +} + +/** + * Creates a signer for a specific network using configuration and environment variables. + * + * Uses: + * - `getNetworkConfig(network)` to get RPC URL from Configuration.ts + * - `getPrivateKey(network, index)` to get private key from environment + * + * @param network - Network identifier (e.g., 'hedera-testnet', 'local') + * @param keyIndex - Private key index (default: 0) + * @returns Promise resolving to signer and address + * @throws Exits process with code 1 if private key not found + * + * @example + * ```typescript + * import { createNetworkSigner } from "@scripts/infrastructure"; + * + * const network = process.env.NETWORK || "hedera-testnet"; + * const { signer, address } = await createNetworkSigner(network); + * + * console.log(`Deployer: ${address}`); + * ``` + * + * @example + * ```typescript + * // Using a different key index + * const { signer, address } = await createNetworkSigner("hedera-testnet", 1); + * // Uses HEDERA_TESTNET_PRIVATE_KEY_1 + * ``` + */ +export async function createNetworkSigner(network: string, keyIndex: number = 0): Promise { + // Get network config (RPC URL) + const networkConfig = getNetworkConfig(network); + + // Get private key from environment + const privateKey = getPrivateKey(network, keyIndex); + + if (!privateKey) { + const envVarName = `${network.toUpperCase().replace(/-/g, "_")}_PRIVATE_KEY_${keyIndex}`; + error(`❌ Missing private key. Set ${envVarName} in .env file.`); + process.exit(1); + } + + // Create provider and signer + const provider = new providers.JsonRpcProvider(networkConfig.jsonRpcUrl); + const signer = new Wallet(privateKey, provider); + const address = await signer.getAddress(); + + return { signer, address }; +} diff --git a/packages/ats/contracts/scripts/infrastructure/types/blr.ts b/packages/ats/contracts/scripts/infrastructure/types/blr.ts new file mode 100644 index 000000000..447d82185 --- /dev/null +++ b/packages/ats/contracts/scripts/infrastructure/types/blr.ts @@ -0,0 +1,116 @@ +// SPDX-License-Identifier: Apache-2.0 + +/** + * BLR (Business Logic Resolver) configuration types. + * + * Types for creating and managing configurations in the BusinessLogicResolver + * that define which facets are used for different token types. + * + * @module infrastructure/types/blr + */ + +/** + * Facet configuration for BLR. + */ +export interface FacetConfiguration { + /** Facet name */ + facetName: string; + + /** Function selectors this facet handles */ + selectors: string[]; +} + +/** + * Batch facet configuration structure for contract calls. + * This matches the IDiamondCutManager.FacetConfigurationStruct interface. + */ +export interface BatchFacetConfiguration { + /** Facet ID (keccak256 hash of facet name) */ + id: string; + + /** Facet version */ + version: number; +} + +/** + * Result of BLR configuration. + * + * Used by the deployBlrWithFacets workflow helper. + */ +export interface CreateBlrConfigurationResult { + /** Whether configuration succeeded */ + success: boolean; + + /** BLR address */ + blrAddress: string; + + /** Configuration ID */ + configurationId: string; + + /** Configuration version created */ + version?: number; + + /** Number of facets configured */ + facetCount: number; + + /** Transaction hash (only if success=true) */ + transactionHash?: string; + + /** Block number (only if success=true) */ + blockNumber?: number; + + /** Gas used (only if success=true) */ + gasUsed?: number; + + /** Error message (only if success=false) */ + error?: string; +} + +/** + * Error types for configuration operations. + */ +export type ConfigurationError = + | "EMPTY_FACET_LIST" + | "INVALID_ADDRESS" + | "INVALID_CONFIG_ID" + | "FACET_NOT_FOUND" + | "TRANSACTION_FAILED" + | "EVENT_PARSE_FAILED"; + +/** + * Configuration data returned on success. + */ +export interface ConfigurationData { + /** Configuration ID */ + configurationId: string; + + /** Configuration version */ + version: number; + + /** Facet keys and addresses */ + facetKeys: Array<{ + facetName: string; + key: string; + address: string; + }>; + + /** Transaction hash */ + transactionHash: string; + + /** Block number */ + blockNumber: number; +} + +/** + * Facet data for configuration creation. + */ +export interface FacetConfigurationData { + /** Base facet name (e.g., 'AccessControlFacet') */ + facetName: string; + + /** Resolver key (bytes32) for the facet */ + resolverKey: string; + + /** Deployed facet address */ + address: string; +} diff --git a/packages/ats/contracts/scripts/infrastructure/types/checkpoint.ts b/packages/ats/contracts/scripts/infrastructure/types/checkpoint.ts index 2ea3288e3..7d7f12581 100644 --- a/packages/ats/contracts/scripts/infrastructure/types/checkpoint.ts +++ b/packages/ats/contracts/scripts/infrastructure/types/checkpoint.ts @@ -164,6 +164,12 @@ export interface DeploymentCheckpoint { equity?: ConfigurationResult; /** Bond configuration */ bond?: ConfigurationResult; + /** Bond Fixed Rate configuration */ + bondFixedRate?: ConfigurationResult; + /** Bond KpiLinked Rate configuration */ + bondKpiLinkedRate?: ConfigurationResult; + /** Bond Sustainability Performance Target Rate configuration */ + bondSustainabilityPerformanceTargetRate?: ConfigurationResult; }; /** Factory deployment (step 6) */ @@ -310,7 +316,7 @@ export interface ResumeOptions { // Type Guards // ============================================================================ -import type { SaveResult } from "../types"; +import type { SaveResult } from "./core"; /** * Type guard for SaveResult success case. diff --git a/packages/ats/contracts/scripts/infrastructure/types.ts b/packages/ats/contracts/scripts/infrastructure/types/core.ts similarity index 96% rename from packages/ats/contracts/scripts/infrastructure/types.ts rename to packages/ats/contracts/scripts/infrastructure/types/core.ts index 05113f2d3..c8cc5df53 100644 --- a/packages/ats/contracts/scripts/infrastructure/types.ts +++ b/packages/ats/contracts/scripts/infrastructure/types/core.ts @@ -30,8 +30,8 @@ * @module core/types */ -import { Contract, ContractFactory, Signer, Wallet, Overrides, ContractReceipt, providers } from "ethers"; -import type { WorkflowType } from "./types/checkpoint"; +import { Contract, ContractFactory, Signer, Wallet, Overrides, providers } from "ethers"; +import type { WorkflowType } from "./checkpoint"; /** * Method definition with full signature and selector. @@ -426,52 +426,6 @@ export interface UpgradeProxyResult { * Import from there if needed. */ -/** - * Options for creating a configuration in BusinessLogicResolver - */ -export interface CreateConfigOptions { - /** Address of BusinessLogicResolver */ - blrAddress: string; - - /** Configuration ID (bytes32) */ - configId: string; - - /** Facet IDs (in order) */ - facetIds: string[]; - - /** Facet versions (corresponding to facetIds) */ - facetVersions: number[]; - - /** Network */ - network?: string; - - /** Transaction overrides */ - overrides?: Overrides; -} - -/** - * Result of creating a configuration - */ -export interface CreateConfigResult { - /** BLR address */ - blrAddress: string; - - /** Configuration ID */ - configId: string; - - /** Configuration version number */ - configVersion: number; - - /** Included facets */ - facets: Array<{ - id: string; - version: number; - }>; - - /** Creation transaction receipt */ - receipt: ContractReceipt; -} - /** * NOTE: High-level deployment module types are defined in their respective * module files rather than in this central types file. This design decision @@ -782,6 +736,9 @@ export interface DeploymentOutputType { configurations: { equity: ConfigurationMetadata; bond: ConfigurationMetadata; + bondFixedRate: ConfigurationMetadata; + bondKpiLinkedRate: ConfigurationMetadata; + bondSustainabilityPerformanceTargetRate: ConfigurationMetadata; }; summary: { totalContracts: number; @@ -794,6 +751,9 @@ export interface DeploymentOutputType { helpers: { getEquityFacets(): FacetMetadata[]; getBondFacets(): FacetMetadata[]; + getBondFixedRateFacets(): FacetMetadata[]; + getBondKpiLinkedRateFacets(): FacetMetadata[]; + getBondSustainabilityPerformanceTargetRateFacets(): FacetMetadata[]; }; } diff --git a/packages/ats/contracts/scripts/infrastructure/types/index.ts b/packages/ats/contracts/scripts/infrastructure/types/index.ts new file mode 100644 index 000000000..1a305e679 --- /dev/null +++ b/packages/ats/contracts/scripts/infrastructure/types/index.ts @@ -0,0 +1,83 @@ +// SPDX-License-Identifier: Apache-2.0 + +/** + * Unified type exports for infrastructure layer. + * + * This module re-exports all types from the types/ folder, providing a single + * entry point for type imports. + * + * @module infrastructure/types + * + * @example + * ```typescript + * // Import from types barrel + * import { OperationResult, ConfigurationData, DeploymentCheckpoint } from '@scripts/infrastructure/types' + * + * // Or through infrastructure barrel (recommended) + * import { OperationResult, ConfigurationData, DeploymentCheckpoint } from '@scripts/infrastructure' + * ``` + */ + +// ============================================================================ +// Core Types +// ============================================================================ + +export type { + MethodDefinition, + EventDefinition, + ErrorDefinition, + FacetDefinition, + RegistryProvider, + ContractDefinition, + StorageWrapperDefinition, + NetworkConfig, + DeploymentResult, + UpgradeProxyOptions, + UpgradeProxyResult, + OperationResult, + DeepPartial, + SignerOptions, + FacetMetadata, + ConfigurationMetadata, + ProxyUpdateMetadata, + DeployedContractMetadata, + DeploymentOutputType, + DeploymentWithExistingBlrOutputType, + UpgradeConfigurationsOutputType, + UpgradeTupProxiesOutputType, + AnyDeploymentOutput, + SaveDeploymentOptions, + SaveResult, + LoadDeploymentOptions, +} from "./core"; + +export { ok, err, createSigner, createSignerFromEnv } from "./core"; + +// ============================================================================ +// Checkpoint Types +// ============================================================================ + +export type { + DeployedContract, + ConfigurationResult, + CheckpointStatus, + AtsWorkflowType, + WorkflowType, + DeploymentCheckpoint, + ResumeOptions, +} from "./checkpoint"; + +export { isSaveSuccess, isSaveFailure, isAtsWorkflow } from "./checkpoint"; + +// ============================================================================ +// BLR Configuration Types +// ============================================================================ + +export type { + FacetConfiguration, + BatchFacetConfiguration, + CreateBlrConfigurationResult, + ConfigurationError, + ConfigurationData, + FacetConfigurationData, +} from "./blr"; diff --git a/packages/ats/contracts/scripts/infrastructure/utils/validation.ts b/packages/ats/contracts/scripts/infrastructure/utils/validation.ts index ec8d74eef..f393df423 100644 --- a/packages/ats/contracts/scripts/infrastructure/utils/validation.ts +++ b/packages/ats/contracts/scripts/infrastructure/utils/validation.ts @@ -1,12 +1,28 @@ // SPDX-License-Identifier: Apache-2.0 /** - * Validation utilities for ATS deployment system. + * Core validation utilities for ATS deployment system. * - * Provides reusable validation functions for addresses, contract IDs, - * and other common input validation needs. + * This is the INFRASTRUCTURE LAYER - functions throw errors for programmatic + * error handling in workflows and operations. Use try/catch to handle validation + * failures gracefully. * - * @module core/utils/validation + * For CLI entry points that need user-friendly exit behavior with process.exit(), + * use cli/shared/validation.ts which wraps these utilities with CLI-friendly patterns. + * + * @example + * ```typescript + * // Infrastructure pattern: throw/catch + * import { validateAddress, isValidAddress } from "@scripts/infrastructure"; + * + * try { + * validateAddress(userInput, "proxyAddress"); + * } catch (error) { + * return { success: false, error: error.message }; + * } + * ``` + * + * @module infrastructure/utils/validation */ import { ethers } from "ethers"; diff --git a/packages/ats/contracts/scripts/tools/generateRegistry.ts b/packages/ats/contracts/scripts/tools/generateRegistry.ts index 9089c0bfd..55ed342d6 100644 --- a/packages/ats/contracts/scripts/tools/generateRegistry.ts +++ b/packages/ats/contracts/scripts/tools/generateRegistry.ts @@ -78,6 +78,7 @@ async function main(): Promise { const result = await generateRegistryPipeline( { contractsPath: path.join(__dirname, "../../contracts"), + artifactPath: path.join(__dirname, "../../artifacts/contracts"), outputPath: options.output, facetsOnly: options.facetsOnly, logLevel: logLevelStr as any, diff --git a/packages/ats/contracts/scripts/tools/index.ts b/packages/ats/contracts/scripts/tools/index.ts new file mode 100644 index 000000000..4d1937225 --- /dev/null +++ b/packages/ats/contracts/scripts/tools/index.ts @@ -0,0 +1,119 @@ +// SPDX-License-Identifier: Apache-2.0 + +/** + * Tools layer exports for contract registry generation. + * + * This module provides utilities for scanning Solidity contracts, + * extracting metadata, and generating TypeScript registries. + * + * @module tools + * + * @example + * ```typescript + * // Import from tools layer + * import { + * findAllContracts, + * categorizeContracts, + * extractMetadata, + * generateRegistry, + * extractRoles, + * extractResolverKeys + * } from '@scripts/tools' + * ``` + */ + +// ============================================================================ +// Contract Scanner +// ============================================================================ + +export type { ContractFile, CategorizedContracts } from "./scanner/contractFinder"; + +export { + findAllContracts, + categorizeContracts, + pairTimeTravelVariants, + findTimeTravelPair, +} from "./scanner/contractFinder"; + +// ============================================================================ +// Metadata Extractor +// ============================================================================ + +export type { ContractMetadata } from "./scanner/metadataExtractor"; + +export { + extractMetadata, + detectLayer, + detectCategory, + generateDescription, + inferDependencies, +} from "./scanner/metadataExtractor"; + +// ============================================================================ +// Registry Generator +// ============================================================================ + +export { generateRegistry, generateSummary } from "./generators/registryGenerator"; + +// ============================================================================ +// File Utilities +// ============================================================================ + +export { + findFiles, + findSolidityFiles, + readFile, + writeFile, + getRelativePath, + getPathSegment, + fileExists, +} from "./utils/fileUtils"; + +// ============================================================================ +// ABI Validator (Internal utilities, exported for advanced use cases) +// ============================================================================ + +export { loadABI, extractMethodsFromABI, validateAndMerge } from "./utils/abiValidator"; + +// ============================================================================ +// Solidity Utilities +// ============================================================================ + +export type { RoleDefinition, ResolverKeyDefinition } from "./utils/solidityUtils"; + +export { + // Contract structure + extractContractNames, + extractInheritance, + extractImports, + extractSolidityVersion, + implementsInterface, + // Naming utilities + isFacetName, + isTimeTravelVariant, + getBaseName, + // Roles and keys + extractRoles, + extractResolverKeys, + extractFacetResolverKeyImport, + // Methods + extractPublicMethods, + extractAllMethods, + extractPublicMethodsWithInheritance, + extractFunctionSignature, + // Events + extractEvents, + extractEventsWithInheritance, + extractEventSignature, + // Errors + extractErrors, + extractErrorsWithInheritance, + extractErrorSignature, + // Signatures and selectors + normalizeType, + parseParameterTypes, + calculateSelector, + calculateTopic0, + // Natspec + extractNatspecDescription, +} from "./utils/solidityUtils"; diff --git a/packages/ats/contracts/scripts/tools/runParallelCoverageDocker.ts b/packages/ats/contracts/scripts/tools/runParallelCoverageDocker.ts new file mode 100644 index 000000000..7282731ae --- /dev/null +++ b/packages/ats/contracts/scripts/tools/runParallelCoverageDocker.ts @@ -0,0 +1,299 @@ +import fs from "fs"; +import path from "path"; +import { execSync, spawn } from "child_process"; +import { glob } from "glob"; +// Configuration +const REPO_ROOT = process.cwd(); +const TEMP_DIR = path.join(REPO_ROOT, ".coverage_parallel_temp"); +const COVERAGE_DIR = path.join(REPO_ROOT, "coverage"); +const CONCURRENCY = parseInt(process.env.CONCURRENCY || "2", 10); +const DOCKER_IMAGE = "ats-contracts-coverage"; // Add missing DOCKER_IMAGE constant +/** + * Builds the Docker image based on Dockerfile.coverage + */ +function buildDockerImage(): number { + const start = Date.now(); + console.log("🐳 Building Docker image from Dockerfile.coverage..."); + try { + execSync("npm run docker:build", { + cwd: REPO_ROOT, + stdio: "inherit", + }); + const duration = Date.now() - start; + console.log(`βœ… Docker image built successfully in ${(duration / 1000).toFixed(2)}s.`); + return duration; + } catch (error) { + console.error("❌ Error building Docker image:", error); + process.exit(1); + } +} +/** + * Finds all test files in the project + */ +async function findTestFiles(): Promise { + // Adjust the glob pattern according to your project structure + const files = await glob("test/contracts/**/*.ts", { cwd: REPO_ROOT }); + return files.map((f) => path.join(REPO_ROOT, f)); +} +/** + * Runs a single coverage test + */ +function runCoverageForTestFile(testFile: string, workerId: number): Promise<{ reportPath: string; duration: number }> { + return new Promise((resolve, reject) => { + const start = Date.now(); + const relativeTestFile = path.relative(REPO_ROOT, testFile); + const workerDir = path.join(TEMP_DIR, `worker_${workerId}`); + const workerCoverageDir = path.join(workerDir, "coverage"); + console.log(`[Worker ${workerId}] πŸš€ Starting coverage for ${relativeTestFile}...`); + // Docker paths + const dockerTestFile = `/usr/src/app/packages/ats/contracts/${relativeTestFile}`; + // Ensure local directories exist + if (!fs.existsSync(workerCoverageDir)) { + fs.mkdirSync(workerCoverageDir, { recursive: true }); + } + // Docker run command - fixed volume paths + const dockerCmd = [ + "docker", + "run", + "--rm", + "-v", + `${workerCoverageDir}:/usr/src/temp/coverage-workers/worker_${workerId}/coverage`, + DOCKER_IMAGE, + "npx", + "hardhat", + "coverage", + "--testfiles", + dockerTestFile, + ]; + console.log(`[Worker ${workerId}] Running: ${dockerCmd.join(" ")}`); + const child = spawn(dockerCmd[0], dockerCmd.slice(1), { + cwd: REPO_ROOT, + env: { + ...process.env, + NODE_ENV: "test", + TS_NODE_TRANSPILE_ONLY: "true", + }, + stdio: "pipe", + }); + child.stdout.on("data", (data) => { + const line = data.toString(); + if (line.trim()) console.log(`[Worker ${workerId}] ${line.trim()}`); + }); + child.stderr.on("data", (data) => { + const line = data.toString(); + if (line.trim()) console.log(`[Worker ${workerId}] ${line.trim()}`); + }); + child.on("close", (code) => { + const duration = Date.now() - start; + if (code !== 0) { + reject(new Error(`Docker command failed with exit code ${code}`)); + return; + } + // Copy the coverage report from Docker to local + const defaultReport = path.join(REPO_ROOT, "coverage", "coverage-final.json"); + if (fs.existsSync(defaultReport)) { + const destReport = path.join(workerCoverageDir, "coverage-final.json"); + fs.copyFileSync(defaultReport, destReport); + resolve({ reportPath: destReport, duration }); + } else { + resolve({ reportPath: "", duration }); + } + }); + child.on("error", (error) => { + reject(error); + }); + }); +} +/** + * Merges the coverage reports from all workers + */ +function mergeReports(reportPaths: string[]): void { + if (reportPaths.length === 0) { + console.log("⚠️ No reports found to merge."); + return; + } + console.log("πŸ“Š Merging coverage reports..."); + // Logic based on context [2] + const mergedReportPath = path.join(COVERAGE_DIR, "coverage-final.json"); + // nyc merge expects a directory + const mergeTempDir = path.join(TEMP_DIR, "merge_input"); + if (!fs.existsSync(mergeTempDir)) fs.mkdirSync(mergeTempDir, { recursive: true }); + reportPaths.forEach((reportPath, idx) => { + if (fs.existsSync(reportPath)) { + fs.copyFileSync(reportPath, path.join(mergeTempDir, `report-${idx}.json`)); + } + }); + try { + // Execute merge + const mergeCommand = `npx nyc merge ${mergeTempDir} ${mergedReportPath}`; + console.log(`Executing: ${mergeCommand}`); + execSync(mergeCommand, { cwd: REPO_ROOT }); + // Generate final HTML and text report + const reportCommand = `npx nyc report --reporter=html --reporter=text --temp-dir ${COVERAGE_DIR}`; + console.log(`Generating final report: ${reportCommand}`); + execSync(reportCommand, { cwd: REPO_ROOT }); + console.log(`βœ… Merged report generated at ${mergedReportPath}`); + } catch (error) { + console.error("❌ Error during coverage merging:", error); + } +} +/** + * Main orchestration function - Enhanced version with optimized test ordering + */ +async function runParallelCoverageDocker() { + const totalStart = Date.now(); + console.log(`🏁 Starting parallel coverage with concurrency: ${CONCURRENCY}`); + // 1. Generate Docker image (user requirement) + const dockerBuildDuration = buildDockerImage(); + // 2. Cleanup and preparation + if (fs.existsSync(TEMP_DIR)) { + fs.rmSync(TEMP_DIR, { recursive: true, force: true }); + } + fs.mkdirSync(TEMP_DIR, { recursive: true }); + // Create cache and artifacts directories if needed + const cacheDirs = [ + "packages/ats/contracts/cache", + "packages/ats/contracts/artifacts", + "packages/ats/contracts/typechain-types", + ]; + cacheDirs.forEach((dir) => { + const fullPath = path.join(REPO_ROOT, dir); + if (!fs.existsSync(fullPath)) { + fs.mkdirSync(fullPath, { recursive: true }); + } + }); + // 3. Get tests + const testFiles = await findTestFiles(); + console.log(`πŸ“ Found ${testFiles.length} test files.`); + // 3.1. Optimization: Sort by historical duration (longest to shortest) + // Based on the duration data you provided + console.log("πŸš€ Sorting tests by historical duration (longest first) to optimize execution..."); + // Define the historical durations for each test file + const historicalDurations: Record = { + "test/contracts/unit/layer_1/protectedPartitions/protectedPartitions.test.ts": 1734.36, + "test/contracts/unit/resolver/diamondCutManager.test.ts": 975.8, + "test/contracts/unit/layer_1/ERC3643/erc3643.test.ts": 736.79, + "test/contracts/unit/layer_1/bond/bond.test.ts": 505.81, + "test/contracts/unit/layer_1/ERC1400/ERC20Permit/erc20Permit.test.ts": 499.2, + "test/contracts/unit/layer_1/clearing/clearing.test.ts": 484.06, + "test/contracts/unit/factory/trex/factory.test.ts": 416.47, + "test/contracts/unit/layer_1/securityUSA/securityUSA.test.ts": 401.69, + "test/contracts/unit/layer_1/ERC1400/ERC1410/erc1410.test.ts": 346.26, + "test/contracts/unit/layer_1/hold/hold.test.ts": 339.45, + "test/contracts/unit/layer_1/lock/lock.test.ts": 334.54, + "test/contracts/unit/layer_1/cap/cap.test.ts": 330.2, + "test/contracts/unit/factory/factory.test.ts": 327.69, + "test/contracts/unit/resolver/diamondLoupeFacet.test.ts": 316.36, + "test/contracts/unit/layer_1/scheduledTasks/scheduledSnapshots/scheduledSnapshots.test.ts": 316.2, + "test/contracts/unit/layer_1/ERC1400/ERC20/erc20.test.ts": 317.74, + "test/contracts/unit/layer_1/ERC1400/ERC1594/erc1594.test.ts": 310.12, + "test/contracts/unit/layer_1/scheduledTasks/scheduledTasks/scheduledTasks.test.ts": 304.57, + "test/contracts/unit/layer_1/adjustBalances/adjustBalances.test.ts": 306.66, + "test/contracts/unit/layer_1/ERC1400/ERC1644/erc1644.test.ts": 306.07, + "test/contracts/unit/layer_1/accessControl/accessControl.test.ts": 300.91, + "test/contracts/unit/layer_1/controlList/controlList.test.ts": 291.66, + "test/contracts/unit/layer_1/transferAndLock/transferAndLock.test.ts": 291.68, + "test/contracts/unit/layer_1/equity/equity.test.ts": 289.11, + "test/contracts/unit/layer_1/kyc/kyc.test.ts": 290.21, + "test/contracts/unit/layer_1/externalControlLists/externalControlList.test.ts": 287.93, + "test/contracts/unit/layer_1/pause/pause.test.ts": 287.93, + "test/contracts/unit/layer_1/corporateActions/corporateActions.test.ts": 285.9, + "test/contracts/unit/layer_1/externalKycLists/externalKycList.test.ts": 285.81, + "test/contracts/unit/layer_1/proceedRecipients/proceedRecipients.test.ts": 285.32, + "test/contracts/unit/layer_1/externalPauses/externalPause.test.ts": 282.86, + "test/contracts/unit/layer_1/snapshots/snapshots.test.ts": 279.96, + "test/contracts/unit/layer_1/ERC1400/ERC1643/erc1643.test.ts": 270.74, + "test/contracts/unit/layer_1/ssi/ssi.test.ts": 270.26, + "test/contracts/unit/layer_1/security/security.test.ts": 263.7, + "test/contracts/unit/timeTravel/timeTravel.test.ts": 258.68, + "test/contracts/unit/factory/trex/fixtures/deploy-full-suite.fixture.ts": 235.55, + "test/contracts/unit/resolverProxy/resolverProxy.test.ts": 232.17, + "test/contracts/unit/resolver/BusinessLogicResolver.test.ts": 231.53, + "test/contracts/unit/factory/regulation.test.ts": 228.54, + "test/contracts/unit/layer_1/ERC1400/ERC20Votes/erc20Votes.test.ts": 302.54, + "test/contracts/unit/layer_1/scheduledTasks/scheduledBalanceAdjustments/scheduledBalanceAdjustments.test.ts": 303.5, + }; + + // Sort test files by historical duration (longest first) + testFiles.sort((a, b) => { + const relativeA = path.relative(REPO_ROOT, a); + const relativeB = path.relative(REPO_ROOT, b); + const durationA = historicalDurations[relativeA] || 0; + const durationB = historicalDurations[relativeB] || 0; + return durationB - durationA; + }); + + // 4. EjecuciΓ³n en paralelo con mejor manejo de async + const workerPromises: Promise<{ reportPath: string; duration: number }>[] = []; + const workerResults: { testName: string; duration: string }[] = []; + + for (let i = 0; i < testFiles.length; i++) { + const testFile = testFiles[i]; + const workerId = i + 1; + const testName = path.relative(REPO_ROOT, testFile); + + // Control de concurrencia + if (workerPromises.length >= CONCURRENCY) { + await Promise.race(workerPromises); + } + + const promise = runCoverageForTestFile(testFile, workerId) + .then((result) => { + if (result.reportPath) { + console.log(`[Worker ${workerId}] βœ… Completed coverage for ${testName}`); + } + workerResults.push({ + testName, + duration: `${(result.duration / 1000).toFixed(2)}s`, + }); + return result; + }) + .catch((error) => { + console.error(`[Worker ${workerId}] ❌ Failed:`, error); + workerResults.push({ + testName, + duration: "FAILED", + }); + return { reportPath: "", duration: 0 }; + }) + .finally(() => { + // Remove completed promise from tracking + const index = workerPromises.indexOf(promise); + if (index > -1) { + workerPromises.splice(index, 1); + } + }); + + workerPromises.push(promise); + } + + // Wait for all remaining workers to complete + const finalResults = await Promise.all(workerPromises); + + // 5. FusiΓ³n de resultados + const allReports = finalResults.map((r) => r.reportPath).filter(Boolean); + mergeReports(allReports as string[]); + + // 6. Limpieza final + console.log("🧹 Cleaning up temporary workspace..."); + try { + fs.rmSync(TEMP_DIR, { recursive: true, force: true }); + } catch (error) { + console.error("Error cleaning up:", error); + } + + const totalDuration = Date.now() - totalStart; + + // 7. Mostrar tabla de resultados + console.log("\nπŸ“Š Execution Summary:"); + const summaryTable = [ + { Item: "Docker Image Build", Duration: `${(dockerBuildDuration / 1000).toFixed(2)}s` }, + ...workerResults.map((r) => ({ Item: `Test: ${r.testName}`, Duration: r.duration })), + { Item: "Total Execution Time", Duration: `${(totalDuration / 1000).toFixed(2)}s` }, + ]; + console.table(summaryTable); + + console.log("🏁 Process finished."); +} + +runParallelCoverageDocker().catch(console.error); diff --git a/packages/ats/contracts/scripts/tools/scanner/contractFinder.ts b/packages/ats/contracts/scripts/tools/scanner/contractFinder.ts index a4a0775d3..736f04612 100644 --- a/packages/ats/contracts/scripts/tools/scanner/contractFinder.ts +++ b/packages/ats/contracts/scripts/tools/scanner/contractFinder.ts @@ -34,8 +34,18 @@ export interface ContractFile { /** Source code content */ source: string; + + artifactData: HardhatArtifact; } +export interface HardhatArtifact { + contractName: string; + sourceName: string; + abi: any[]; + bytecode: string; + deployedBytecode: string; + metadata?: string; +} /** * Categorized contracts by type. */ @@ -68,7 +78,7 @@ export interface CategorizedContracts { * @param contractsDir - Absolute path to contracts directory * @returns Array of discovered contract files */ -export function findAllContracts(contractsDir: string): ContractFile[] { +export function findAllContracts(contractsDir: string, artifactDir: string): ContractFile[] { const solidityFiles = findSolidityFiles(contractsDir); const contracts: ContractFile[] = []; @@ -85,18 +95,21 @@ export function findAllContracts(contractsDir: string): ContractFile[] { const directory = path.dirname(filePath); const fileName = path.basename(filePath, ".sol"); - // Primary contract usually matches filename - const primaryContract = contractNames.find((name) => name === fileName) || contractNames[0]; - - contracts.push({ - filePath, - relativePath, - directory, - fileName, - contractNames, - primaryContract, - source, - }); + for (const contractName of contractNames) { + const artifactPath = path.join(artifactDir, relativePath, `${contractName}.json`); + const artifactData: HardhatArtifact = JSON.parse(readFile(artifactPath)); + + contracts.push({ + filePath, + relativePath, + directory, + fileName, + contractNames, // Keep all contract names for context + primaryContract: contractName, // Each contract is its own primary + source, + artifactData, + }); + } } return contracts; diff --git a/packages/ats/contracts/scripts/tools/scanner/metadataExtractor.ts b/packages/ats/contracts/scripts/tools/scanner/metadataExtractor.ts index c67c23b3b..ebfddb2f1 100644 --- a/packages/ats/contracts/scripts/tools/scanner/metadataExtractor.ts +++ b/packages/ats/contracts/scripts/tools/scanner/metadataExtractor.ts @@ -14,9 +14,7 @@ import { extractInheritance, extractSolidityVersion, extractFacetResolverKeyImport, - extractPublicMethods, extractAllMethods, - extractPublicMethodsWithInheritance, extractEvents, extractEventsWithInheritance, extractErrors, @@ -24,7 +22,7 @@ import { extractNatspecDescription, type RoleDefinition, } from "../utils/solidityUtils"; -import { loadABI, extractMethodsFromABI, validateAndMerge } from "../utils/abiValidator"; +import { extractMethodsFromABI } from "../utils/abiValidator"; import { MethodDefinition, EventDefinition, ErrorDefinition } from "../../infrastructure/types"; /** @@ -112,23 +110,15 @@ export function extractMetadata( // - Facets: Extract from entire inheritance chain (excluding static methods) // - StorageWrappers: Extract ALL methods (internal/private/public) // - Other contracts: Extract only public/external methods - let methods: MethodDefinition[]; - if (name.endsWith("Facet") && allContracts) { - methods = extractPublicMethodsWithInheritance(contract.source, name, allContracts); - } else if (name.endsWith("StorageWrapper")) { + + let methods: MethodDefinition[] = []; + + if (name.endsWith("StorageWrapper")) { methods = extractAllMethods(contract.source); - } else { - methods = extractPublicMethods(contract.source); } - // Validate methods against ABI if available // This provides 100% accurate signatures from compiled artifacts - const contractsDir = path.dirname(contract.filePath); - const abi = loadABI(name, contractsDir); - if (abi) { - const abiMethods = extractMethodsFromABI(abi); - methods = validateAndMerge(methods, abiMethods, name); - } + methods = extractMethodsFromABI(contract.artifactData.abi); // Extract events based on contract type: // - Facets: Extract from entire inheritance chain diff --git a/packages/ats/contracts/scripts/tools/utils/abiValidator.ts b/packages/ats/contracts/scripts/tools/utils/abiValidator.ts index 3bb002957..1e87e589b 100644 --- a/packages/ats/contracts/scripts/tools/utils/abiValidator.ts +++ b/packages/ats/contracts/scripts/tools/utils/abiValidator.ts @@ -8,11 +8,11 @@ * * @module tools/utils/abiValidator */ - +import { ethers } from "ethers"; import * as fs from "fs"; import * as path from "path"; import { MethodDefinition } from "../../infrastructure/types"; -import { calculateSelector } from "./solidityUtils"; +import { id } from "ethers/lib/utils"; /** * Load compiled ABI from Hardhat artifacts. @@ -72,20 +72,23 @@ function findArtifactPath(dir: string, contractName: string): string | undefined * @param abi - Contract ABI * @returns Map of method name to signature details */ -export function extractMethodsFromABI(abi: any[]): Map { - const methods = new Map(); - - for (const item of abi) { - if (item.type === "function") { +export function extractMethodsFromABI(abi: any[]): MethodDefinition[] { + const STATIC_METHODS_TO_EXCLUDE = new Set([ + "getStaticFunctionSelectors", + "getStaticInterfaceIds", + "getStaticResolverKey", + ]); + + const methods: MethodDefinition[] = []; + const iface = new ethers.utils.Interface(abi); + const functions = iface.functions; + for (const item of Object.values(functions)) { + if (!STATIC_METHODS_TO_EXCLUDE.has(item.name)) { const name = item.name; - const inputs = item.inputs || []; - - // Build canonical signature - const types = inputs.map((input: any) => input.type); - const signature = `${name}(${types.join(",")})`; - const selector = calculateSelector(signature); + const signature = item.format("full"); + const selector = id(item.format("sighash")).substring(0, 10); - methods.set(name, { signature, selector }); + methods.push({ name, signature, selector }); } } @@ -105,30 +108,9 @@ export function extractMethodsFromABI(abi: any[]): Map | undefined, - contractName: string, -): MethodDefinition[] { - // If no ABI, return regex results as-is - if (!abiMethods || abiMethods.size === 0) { - return regexMethods; - } - - // Use ABI as source of truth +export function validateAndMerge(abiMethods: Map): MethodDefinition[] { const result: MethodDefinition[] = []; - const regexMethodMap = new Map(regexMethods.map((m) => [m.name, m])); - for (const [name, abiMethod] of abiMethods.entries()) { - const regexMethod = regexMethodMap.get(name); - - // Warn if signatures mismatch - if (regexMethod && regexMethod.signature !== abiMethod.signature) { - console.warn(`[ABI Validation] Signature mismatch for ${contractName}.${name}:`); - console.warn(` Regex: ${regexMethod.signature}`); - console.warn(` ABI: ${abiMethod.signature}`); - } - result.push({ name, signature: abiMethod.signature, diff --git a/packages/ats/contracts/scripts/tools/utils/solidityUtils.ts b/packages/ats/contracts/scripts/tools/utils/solidityUtils.ts index 05d19f8d8..2c0165a3a 100644 --- a/packages/ats/contracts/scripts/tools/utils/solidityUtils.ts +++ b/packages/ats/contracts/scripts/tools/utils/solidityUtils.ts @@ -36,11 +36,21 @@ const BASE_CLASSES_TO_EXCLUDE = new Set([ * @returns Array of contract names */ export function extractContractNames(source: string): string[] { + // Remove single-line comments (// ...) + let cleanSource = source.replace(/\/\/.*$/gm, ""); + + // Remove multi-line comments (/* ... */) + cleanSource = cleanSource.replace(/\/\*[\s\S]*?\*\//g, ""); + + // Remove natspec comments (/// ... and /** ... */) + cleanSource = cleanSource.replace(/\/\/\/.*$/gm, ""); + cleanSource = cleanSource.replace(/\/\*\*[\s\S]*?\*\//g, ""); + const contractRegex = /(?:abstract\s+)?(?:contract|interface|library)\s+(\w+)/g; const matches: string[] = []; let match; - while ((match = contractRegex.exec(source)) !== null) { + while ((match = contractRegex.exec(cleanSource)) !== null) { matches.push(match[1]); } diff --git a/packages/ats/contracts/scripts/workflows/deploySystemWithExistingBlr.ts b/packages/ats/contracts/scripts/workflows/deploySystemWithExistingBlr.ts index 4af13eb25..c8d915647 100644 --- a/packages/ats/contracts/scripts/workflows/deploySystemWithExistingBlr.ts +++ b/packages/ats/contracts/scripts/workflows/deploySystemWithExistingBlr.ts @@ -32,20 +32,130 @@ import { saveDeploymentOutput, type DeploymentCheckpoint, type ResumeOptions, - type DeploymentWithExistingBlrOutputType, formatCheckpointStatus, getStepName, toConfigurationData, convertCheckpointFacets, } from "@scripts/infrastructure"; -import { atsRegistry, deployFactory, createEquityConfiguration, createBondConfiguration } from "@scripts/domain"; +import { + atsRegistry, + deployFactory, + createEquityConfiguration, + createBondConfiguration, + createBondFixedRateConfiguration, + createBondKpiLinkedRateConfiguration, + createBondSustainabilityPerformanceTargetRateConfiguration, +} from "@scripts/domain"; + import { BusinessLogicResolver__factory } from "@contract-types"; /** * Deployment output structure (compatible with deployCompleteSystem). - * Re-exported from infrastructure for backward compatibility. */ -export type DeploymentWithExistingBlrOutput = DeploymentWithExistingBlrOutputType; +export interface DeploymentWithExistingBlrOutput { + /** Network name (testnet, mainnet, etc.) */ + network: string; + + /** ISO timestamp of deployment */ + timestamp: string; + + /** Deployer address */ + deployer: string; + + /** Infrastructure contracts */ + infrastructure: { + proxyAdmin: { + address: string; + contractId?: string; + }; + blr: { + implementation: string; + implementationContractId?: string; + proxy: string; + proxyContractId?: string; + isExternal: true; // Marker to indicate BLR was not deployed here + }; + factory: { + implementation: string; + implementationContractId?: string; + proxy: string; + proxyContractId?: string; + }; + }; + + /** Deployed facets */ + facets: Array<{ + name: string; + address: string; + contractId?: string; + key: string; + }>; + + /** Token configurations */ + configurations: { + equity: { + configId: string; + version: number; + facetCount: number; + facets: Array<{ + facetName: string; + key: string; + address: string; + }>; + }; + bond: { + configId: string; + version: number; + facetCount: number; + facets: Array<{ + facetName: string; + key: string; + address: string; + }>; + }; + bondFixedRate: { + configId: string; + version: number; + facetCount: number; + facets: Array<{ + facetName: string; + key: string; + address: string; + }>; + }; + bondKpiLinkedRate: { + configId: string; + version: number; + facetCount: number; + facets: Array<{ + facetName: string; + key: string; + address: string; + }>; + }; + bondSustainabilityPerformanceTargetRate: { + configId: string; + version: number; + facetCount: number; + facets: Array<{ + facetName: string; + key: string; + address: string; + }>; + }; + }; + + /** Deployment summary */ + summary: { + totalContracts: number; + totalFacets: number; + totalConfigurations: number; + deploymentTime: number; + gasUsed: string; + success: boolean; + skippedSteps: string[]; // Steps that were skipped + }; +} /** * Options for deploying with existing BLR. @@ -444,7 +554,7 @@ export async function deploySystemWithExistingBlr( throw new Error(`Facet registration failed: ${registerResult.error}`); } - totalGasUsed += registerResult.gasUsed || 0; + totalGasUsed += registerResult.transactionGas?.reduce((sum, gas) => sum + gas, 0) ?? 0; info(`βœ… Registered ${registerResult.registered.length} facets in BLR`); if (registerResult.failed.length > 0) { @@ -464,11 +574,22 @@ export async function deploySystemWithExistingBlr( // Steps 3 & 4: Create configurations (optional - controlled by createConfigurations flag) let equityConfig: Awaited> | undefined; let bondConfig: Awaited> | undefined; + let bondFixedRateConfig: Awaited> | undefined; + let bondKpiLinkedRateConfig: Awaited> | undefined; + let bondSustainabilityPerformanceTargetRateConfig: + | Awaited> + | undefined; if (shouldCreateConfigurations) { if (Object.keys(facetAddresses).length === 0) { info("\n⚠️ Step 5/6: Skipping configurations (no facets deployed)..."); - skippedSteps.push("Equity configuration", "Bond configuration"); + skippedSteps.push( + "Equity configuration", + "Bond configuration", + "Bond Fixed Rate configuration", + "Bond Kpi Linked Rate configuration", + "Bond Sustainability Performance Target Rate configuration", + ); } else { // Get BLR contract instance const blrContract = BusinessLogicResolver__factory.connect(blrAddress, signer); @@ -557,10 +678,161 @@ export async function deploySystemWithExistingBlr( checkpoint.currentStep = 4; await checkpointManager.saveCheckpoint(checkpoint); } + + // Step 5: Create Bond Fixed Rate Configuration + if (checkpoint.steps.configurations?.bondFixedRate && checkpoint.currentStep >= 5) { + info("\nβœ“ Step 5b/6: Bond Fixed Rate configuration already created (resuming)"); + const bondFixedRateConfigData = checkpoint.steps.configurations.bondFixedRate; + info(`βœ… Bond Fixed Rate Config ID: ${bondFixedRateConfigData.configId}`); + info(`βœ… Bond Fixed Rate Version: ${bondFixedRateConfigData.version}`); + info(`βœ… Bond Fixed Rate Facets: ${bondFixedRateConfigData.facetCount}`); + + // Use converter to reconstruct full ConfigurationData from checkpoint + bondFixedRateConfig = toConfigurationData(bondFixedRateConfigData); + } else { + info("\n🏦 Step 5b/6: Creating Bond Fixed Rate configuration..."); + + bondFixedRateConfig = await createBondFixedRateConfiguration( + blrContract, + facetAddresses, + useTimeTravel, + false, + batchSize, + confirmations, + ); + + if (!bondFixedRateConfig.success) { + throw new Error( + `Bond Fixed Rate config creation failed: ${bondFixedRateConfig.error} - ${bondFixedRateConfig.message}`, + ); + } + + info(`βœ… Bond Fixed Rate Config ID: ${bondFixedRateConfig.data.configurationId}`); + info(`βœ… Bond Fixed Rate Version: ${bondFixedRateConfig.data.version}`); + info(`βœ… Bond Fixed Rate Facets: ${bondFixedRateConfig.data.facetKeys.length}`); + + // Save checkpoint + checkpoint.steps.configurations!.bondFixedRate = { + configId: bondFixedRateConfig.data.configurationId, + version: bondFixedRateConfig.data.version, + facetCount: bondFixedRateConfig.data.facetKeys.length, + txHash: "", + }; + checkpoint.currentStep = 5; + await checkpointManager.saveCheckpoint(checkpoint); + } + + // Step 6: Create Bond KpiLinked Rate Configuration + if (checkpoint.steps.configurations?.bondKpiLinkedRate && checkpoint.currentStep >= 5) { + info("\nβœ“ Step 5b/6: Bond KpiLinked Rate configuration already created (resuming)"); + const bondKpiLinkedRateConfigData = checkpoint.steps.configurations.bondKpiLinkedRate; + info(`βœ… Bond KpiLinked Rate Config ID: ${bondKpiLinkedRateConfigData.configId}`); + info(`βœ… Bond KpiLinked Rate Version: ${bondKpiLinkedRateConfigData.version}`); + info(`βœ… Bond KpiLinked Rate Facets: ${bondKpiLinkedRateConfigData.facetCount}`); + + // Use converter to reconstruct full ConfigurationData from checkpoint + bondKpiLinkedRateConfig = toConfigurationData(bondKpiLinkedRateConfigData); + } else { + info("\n🏦 Step 6b/7: Creating Bond configuration..."); + + bondKpiLinkedRateConfig = await createBondKpiLinkedRateConfiguration( + blrContract, + facetAddresses, + useTimeTravel, + false, + batchSize, + confirmations, + ); + + if (!bondKpiLinkedRateConfig.success) { + throw new Error( + `Bond KpiLinked Rate config creation failed: ${bondKpiLinkedRateConfig.error} - ${bondKpiLinkedRateConfig.message}`, + ); + } + + info(`βœ… Bond KpiLinked Rate Config ID: ${bondKpiLinkedRateConfig.data.configurationId}`); + info(`βœ… Bond KpiLinked Rate Version: ${bondKpiLinkedRateConfig.data.version}`); + info(`βœ… Bond KpiLinked Rate Facets: ${bondKpiLinkedRateConfig.data.facetKeys.length}`); + + // Save checkpoint + checkpoint.steps.configurations!.bondKpiLinkedRate = { + configId: bondKpiLinkedRateConfig.data.configurationId, + version: bondKpiLinkedRateConfig.data.version, + facetCount: bondKpiLinkedRateConfig.data.facetKeys.length, + txHash: "", + }; + checkpoint.currentStep = 6; + await checkpointManager.saveCheckpoint(checkpoint); + } + + // Step 7: Create Bond Sustainability Performance Target Rate Configuration + if (checkpoint.steps.configurations?.bondSustainabilityPerformanceTargetRate && checkpoint.currentStep >= 6) { + info("\nβœ“ Step 5c/6: Bond Sustainability Performance Target Rate configuration already created (resuming)"); + const bondSustainabilityPerformanceTargetRateConfigData = + checkpoint.steps.configurations.bondSustainabilityPerformanceTargetRate; + info( + `βœ… Bond Sustainability Performance Target Rate Config ID: ${bondSustainabilityPerformanceTargetRateConfigData.configId}`, + ); + info( + `βœ… Bond Sustainability Performance Target Rate Version: ${bondSustainabilityPerformanceTargetRateConfigData.version}`, + ); + info( + `βœ… Bond Sustainability Performance Target Rate Facets: ${bondSustainabilityPerformanceTargetRateConfigData.facetCount}`, + ); + + // Use converter to reconstruct full ConfigurationData from checkpoint + bondSustainabilityPerformanceTargetRateConfig = toConfigurationData( + bondSustainabilityPerformanceTargetRateConfigData, + ); + } else { + info("\n🏦 Step 7b/8: Creating Bond Sustainability Performance Target Rate configuration..."); + + bondSustainabilityPerformanceTargetRateConfig = + await createBondSustainabilityPerformanceTargetRateConfiguration( + blrContract, + facetAddresses, + useTimeTravel, + false, + batchSize, + confirmations, + ); + + if (!bondSustainabilityPerformanceTargetRateConfig.success) { + throw new Error( + `Bond Sustainability Performance Target Rate config creation failed: ${bondSustainabilityPerformanceTargetRateConfig.error} - ${bondSustainabilityPerformanceTargetRateConfig.message}`, + ); + } + + info( + `βœ… Bond Sustainability Performance Target Rate Config ID: ${bondSustainabilityPerformanceTargetRateConfig.data.configurationId}`, + ); + info( + `βœ… Bond Sustainability Performance Target Rate Version: ${bondSustainabilityPerformanceTargetRateConfig.data.version}`, + ); + info( + `βœ… Bond Sustainability Performance Target Rate Facets: ${bondSustainabilityPerformanceTargetRateConfig.data.facetKeys.length}`, + ); + + // Save checkpoint + checkpoint.steps.configurations!.bondSustainabilityPerformanceTargetRate = { + configId: bondSustainabilityPerformanceTargetRateConfig.data.configurationId, + version: bondSustainabilityPerformanceTargetRateConfig.data.version, + facetCount: bondSustainabilityPerformanceTargetRateConfig.data.facetKeys.length, + txHash: "", + }; + checkpoint.currentStep = 7; + await checkpointManager.saveCheckpoint(checkpoint); + } } } else { - info("\nπŸ’Ό Step 5/6: Skipping configurations..."); - skippedSteps.push("Equity configuration", "Bond configuration"); + info("\nπŸ’Ό Step 6/7: Skipping configurations..."); + skippedSteps.push( + "Equity configuration", + "Bond configuration", + "Bond Fixed Rate configuration", + "Bond KpiLinked Rate configuration", + "Bond Sustainability Performance Target Rate configuration", + ); } // Step 5: Deploy Factory (optional - controlled by deployFactory flag) @@ -568,7 +840,7 @@ export async function deploySystemWithExistingBlr( if (shouldDeployFactory) { if (checkpoint.steps.factory && checkpoint.currentStep >= 5) { - info("\nβœ“ Step 6/6: Factory already deployed (resuming)"); + info("\nβœ“ Step 7/7: Factory already deployed (resuming)"); // Reconstruct DeployFactoryResult from checkpoint (with placeholder proxyResult) const proxyAdminAddr = checkpoint.steps.proxyAdmin?.address || proxyAdmin.address; factoryResult = { @@ -616,7 +888,7 @@ export async function deploySystemWithExistingBlr( await checkpointManager.saveCheckpoint(checkpoint); } } else { - info("\n🏭 Step 6/6: Skipping Factory deployment..."); + info("\n🏭 Step 7/7: Skipping Factory deployment..."); skippedSteps.push("Factory deployment"); } @@ -671,12 +943,30 @@ export async function deploySystemWithExistingBlr( const bondFacet = bondConfig?.success ? bondConfig.data.facetKeys.find((bf) => bf.address === facetAddress) : undefined; + const bondFixedRateFacet = bondFixedRateConfig?.success + ? bondFixedRateConfig.data.facetKeys.find((bf) => bf.address === facetAddress) + : undefined; + const bondKpiLinkedRateFacet = bondKpiLinkedRateConfig?.success + ? bondKpiLinkedRateConfig.data.facetKeys.find((bf) => bf.address === facetAddress) + : undefined; + const bondSustainabilityPerformanceTargetRateFacet = + bondSustainabilityPerformanceTargetRateConfig?.success + ? bondSustainabilityPerformanceTargetRateConfig.data.facetKeys.find( + (bf) => bf.address === facetAddress, + ) + : undefined; return { name: facetName, address: facetAddress, contractId: await getContractId(facetAddress), - key: equityFacet?.key || bondFacet?.key || "", + key: + equityFacet?.key || + bondFacet?.key || + bondFixedRateFacet?.key || + bondKpiLinkedRateFacet?.key || + bondSustainabilityPerformanceTargetRateFacet?.key || + "", }; }), ) @@ -711,12 +1001,59 @@ export async function deploySystemWithExistingBlr( facetCount: 0, facets: [], }, + bondFixedRate: + bondFixedRateConfig && bondFixedRateConfig.success + ? { + configId: bondFixedRateConfig.data.configurationId, + version: bondFixedRateConfig.data.version, + facetCount: bondFixedRateConfig.data.facetKeys.length, + facets: bondFixedRateConfig.data.facetKeys, + } + : { + configId: "N/A (Not created)", + version: 0, + facetCount: 0, + facets: [], + }, + bondKpiLinkedRate: + bondKpiLinkedRateConfig && bondKpiLinkedRateConfig.success + ? { + configId: bondKpiLinkedRateConfig.data.configurationId, + version: bondKpiLinkedRateConfig.data.version, + facetCount: bondKpiLinkedRateConfig.data.facetKeys.length, + facets: bondKpiLinkedRateConfig.data.facetKeys, + } + : { + configId: "N/A (Not created)", + version: 0, + facetCount: 0, + facets: [], + }, + bondSustainabilityPerformanceTargetRate: + bondSustainabilityPerformanceTargetRateConfig && bondSustainabilityPerformanceTargetRateConfig.success + ? { + configId: bondSustainabilityPerformanceTargetRateConfig.data.configurationId, + version: bondSustainabilityPerformanceTargetRateConfig.data.version, + facetCount: bondSustainabilityPerformanceTargetRateConfig.data.facetKeys.length, + facets: bondSustainabilityPerformanceTargetRateConfig.data.facetKeys, + } + : { + configId: "N/A (Not created)", + version: 0, + facetCount: 0, + facets: [], + }, }, summary: { totalContracts: 1 + (factoryResult ? 1 : 0), // ProxyAdmin + Factory (if deployed) totalFacets: facetsResult?.deployed.size || 0, - totalConfigurations: (equityConfig ? 1 : 0) + (bondConfig ? 1 : 0), + totalConfigurations: + (equityConfig ? 1 : 0) + + (bondConfig ? 1 : 0) + + (bondFixedRateConfig ? 1 : 0) + + (bondKpiLinkedRateConfig ? 1 : 0) + + (bondSustainabilityPerformanceTargetRateConfig ? 1 : 0), deploymentTime: endTime - startTime, gasUsed: totalGasUsed.toString(), success: true, diff --git a/packages/ats/contracts/scripts/workflows/deploySystemWithNewBlr.ts b/packages/ats/contracts/scripts/workflows/deploySystemWithNewBlr.ts index 15b8d9fff..93bde9f7c 100644 --- a/packages/ats/contracts/scripts/workflows/deploySystemWithNewBlr.ts +++ b/packages/ats/contracts/scripts/workflows/deploySystemWithNewBlr.ts @@ -39,8 +39,20 @@ import { convertCheckpointFacets, isSuccess, } from "@scripts/infrastructure"; -import { atsRegistry, deployFactory, createEquityConfiguration, createBondConfiguration } from "@scripts/domain"; -import { BusinessLogicResolver__factory, ProxyAdmin__factory } from "@contract-types"; +import { + atsRegistry, + deployFactory, + createEquityConfiguration, + createBondConfiguration, + createBondFixedRateConfiguration, + createBondKpiLinkedRateConfiguration, + createBondSustainabilityPerformanceTargetRateConfiguration, +} from "@scripts/domain"; +import { + BusinessLogicResolver__factory, + IStaticFunctionSelectors__factory, + ProxyAdmin__factory, +} from "@contract-types"; /** * Complete deployment output structure. @@ -383,26 +395,30 @@ export async function deploySystemWithNewBlr( info("\nπŸ“ Step 4/7: Registering facets in BLR..."); // Prepare facets with resolver keys from registry - const facetsToRegister = Array.from(facetsResult.deployed.entries()).map(([facetName, deploymentResult]) => { - if (!deploymentResult.address) { - throw new Error(`No address for facet: ${facetName}`); - } + const facetsToRegister = await Promise.all( + Array.from(facetsResult.deployed.entries()).map(async ([facetName, deploymentResult]) => { + if (!deploymentResult.address) { + throw new Error(`No address for facet: ${facetName}`); + } - // Strip "TimeTravel" suffix to get canonical name - const baseName = facetName.replace(/TimeTravel$/, ""); + // Strip "TimeTravel" suffix to get canonical name + const baseName = facetName.replace(/TimeTravel$/, ""); + // deploymentResult.address + const staticSelector = IStaticFunctionSelectors__factory.connect(deploymentResult.address, signer); + const resolverKey = await staticSelector.getStaticResolverKey(); + // Look up resolver key from registry - // Look up resolver key from registry - const definition = atsRegistry.getFacetDefinition(baseName); - if (!definition || !definition.resolverKey?.value) { - throw new Error(`Facet ${baseName} not found in registry or missing resolver key`); - } + if (!resolverKey) { + throw new Error(`Facet ${baseName} not found in registry or missing resolver key`); + } - return { - name: facetName, - address: deploymentResult.address, - resolverKey: definition.resolverKey.value, - }; - }); + return { + name: facetName, + address: deploymentResult.address, + resolverKey: resolverKey, + }; + }), + ); const registerResult = await registerFacets(blrContract, { facets: facetsToRegister, @@ -412,7 +428,7 @@ export async function deploySystemWithNewBlr( throw new Error(`Facet registration failed: ${registerResult.error}`); } - totalGasUsed += registerResult.gasUsed || 0; + totalGasUsed += registerResult.transactionGas?.reduce((sum, gas) => sum + gas, 0) ?? 0; info(`βœ… Registered ${registerResult.registered.length} facets in BLR`); if (registerResult.failed.length > 0) { @@ -522,11 +538,163 @@ export async function deploySystemWithNewBlr( await checkpointManager.saveCheckpoint(checkpoint); } - // Step 6: Deploy Factory + // Step 6: Create Bond Fixed Rate configuration + let bondFixedRateConfig: Awaited>; + + if (checkpoint.steps.configurations?.bondFixedRate && checkpoint.currentStep >= 5) { + info("\nβœ“ Step 6/7: Bond FixedRate configuration already created (resuming)"); + const bondFixedRateConfigData = checkpoint.steps.configurations.bondFixedRate; + info(`βœ… Bond FixedRate Config ID: ${bondFixedRateConfigData.configId}`); + info(`βœ… Bond FixedRate Version: ${bondFixedRateConfigData.version}`); + info(`βœ… Bond FixedRate Facets: ${bondFixedRateConfigData.facetCount}`); + + // Use converter to reconstruct full ConfigurationData from checkpoint + bondFixedRateConfig = toConfigurationData(bondFixedRateConfigData); + } else { + info("\n🏦 Step 6/7: Creating Bond FixedRate FixedRateconfiguration..."); + + bondFixedRateConfig = await createBondFixedRateConfiguration( + blrContract, + facetAddresses, + useTimeTravel, + partialBatchDeploy, + batchSize, + confirmations, + ); + + if (!bondFixedRateConfig.success) { + throw new Error( + `Bond FixedRate config creation failed: ${bondFixedRateConfig.error} - ${bondFixedRateConfig.message}`, + ); + } + + info(`βœ… Bond FixedRate Config ID: ${bondFixedRateConfig.data.configurationId}`); + info(`βœ… Bond FixedRate Version: ${bondFixedRateConfig.data.version}`); + info(`βœ… Bond FixedRate Facets: ${bondFixedRateConfig.data.facetKeys.length}`); + + // Save checkpoint + checkpoint.steps.configurations!.bondFixedRate = { + configId: bondFixedRateConfig.data.configurationId, + version: bondFixedRateConfig.data.version, + facetCount: bondFixedRateConfig.data.facetKeys.length, + txHash: "", // createBondFixedRateConfiguration doesn't return tx hash currently + }; + checkpoint.currentStep = 5; + await checkpointManager.saveCheckpoint(checkpoint); + } + + // Step 7: Create Bond KpiLinked Rate configuration + let bondKpiLinkedRateConfig: Awaited>; + + if (checkpoint.steps.configurations?.bondKpiLinkedRate && checkpoint.currentStep >= 5) { + info("\nβœ“ Step 7/8: Bond KpiLinkedRate configuration already created (resuming)"); + const bondKpiLinkedRateConfigData = checkpoint.steps.configurations.bondKpiLinkedRate; + info(`βœ… Bond KpiLinkedRate Config ID: ${bondKpiLinkedRateConfigData.configId}`); + info(`βœ… Bond KpiLinkedRate Version: ${bondKpiLinkedRateConfigData.version}`); + info(`βœ… Bond KpiLinkedRate Facets: ${bondKpiLinkedRateConfigData.facetCount}`); + + // Use converter to reconstruct full ConfigurationData from checkpoint + bondKpiLinkedRateConfig = toConfigurationData(bondKpiLinkedRateConfigData); + } else { + info("\n🏦 Step 6/7: Creating Bond KpiLinkedRate KpiLinkedRateconfiguration..."); + + bondKpiLinkedRateConfig = await createBondKpiLinkedRateConfiguration( + blrContract, + facetAddresses, + useTimeTravel, + partialBatchDeploy, + batchSize, + confirmations, + ); + + if (!bondKpiLinkedRateConfig.success) { + throw new Error( + `Bond KpiLinkedRate config creation failed: ${bondKpiLinkedRateConfig.error} - ${bondKpiLinkedRateConfig.message}`, + ); + } + + info(`βœ… Bond KpiLinkedRate Config ID: ${bondKpiLinkedRateConfig.data.configurationId}`); + info(`βœ… Bond KpiLinkedRate Version: ${bondKpiLinkedRateConfig.data.version}`); + info(`βœ… Bond KpiLinkedRate Facets: ${bondKpiLinkedRateConfig.data.facetKeys.length}`); + + // Save checkpoint + checkpoint.steps.configurations!.bondKpiLinkedRate = { + configId: bondKpiLinkedRateConfig.data.configurationId, + version: bondKpiLinkedRateConfig.data.version, + facetCount: bondKpiLinkedRateConfig.data.facetKeys.length, + txHash: "", // createBondKpiLinkedRateConfiguration doesn't return tx hash currently + }; + checkpoint.currentStep = 6; + await checkpointManager.saveCheckpoint(checkpoint); + } + + // Step 8: Create Bond Sustainability Performance Target Rate configuration + let bondSustainabilityPerformanceTargetRateConfig: Awaited< + ReturnType + >; + + if (checkpoint.steps.configurations?.bondSustainabilityPerformanceTargetRate && checkpoint.currentStep >= 6) { + info("\nβœ“ Step 8/9: Bond Sustainability Performance Target Rate configuration already created (resuming)"); + const bondSustainabilityPerformanceTargetRateConfigData = + checkpoint.steps.configurations.bondSustainabilityPerformanceTargetRate; + info( + `βœ… Bond Sustainability Performance Target Rate Config ID: ${bondSustainabilityPerformanceTargetRateConfigData.configId}`, + ); + info( + `βœ… Bond Sustainability Performance Target Rate Version: ${bondSustainabilityPerformanceTargetRateConfigData.version}`, + ); + info( + `βœ… Bond Sustainability Performance Target Rate Facets: ${bondSustainabilityPerformanceTargetRateConfigData.facetCount}`, + ); + + // Use converter to reconstruct full ConfigurationData from checkpoint + bondSustainabilityPerformanceTargetRateConfig = toConfigurationData( + bondSustainabilityPerformanceTargetRateConfigData, + ); + } else { + info("\n🏦 Step 8/9: Creating Bond Sustainability Performance Target Rate configuration..."); + + bondSustainabilityPerformanceTargetRateConfig = await createBondSustainabilityPerformanceTargetRateConfiguration( + blrContract, + facetAddresses, + useTimeTravel, + partialBatchDeploy, + batchSize, + confirmations, + ); + + if (!bondSustainabilityPerformanceTargetRateConfig.success) { + throw new Error( + `Bond Sustainability Performance Target Rate config creation failed: ${bondSustainabilityPerformanceTargetRateConfig.error} - ${bondSustainabilityPerformanceTargetRateConfig.message}`, + ); + } + + info( + `βœ… Bond Sustainability Performance Target Rate Config ID: ${bondSustainabilityPerformanceTargetRateConfig.data.configurationId}`, + ); + info( + `βœ… Bond Sustainability Performance Target Rate Version: ${bondSustainabilityPerformanceTargetRateConfig.data.version}`, + ); + info( + `βœ… Bond Sustainability Performance Target Rate Facets: ${bondSustainabilityPerformanceTargetRateConfig.data.facetKeys.length}`, + ); + + // Save checkpoint + checkpoint.steps.configurations!.bondSustainabilityPerformanceTargetRate = { + configId: bondSustainabilityPerformanceTargetRateConfig.data.configurationId, + version: bondSustainabilityPerformanceTargetRateConfig.data.version, + facetCount: bondSustainabilityPerformanceTargetRateConfig.data.facetKeys.length, + txHash: "", // createBondSustainabilityPerformanceTargetRateConfiguration doesn't return tx hash currently + }; + checkpoint.currentStep = 7; + await checkpointManager.saveCheckpoint(checkpoint); + } + + // Step 8: Deploy Factory let factoryResult: Awaited>; - if (checkpoint.steps.factory && checkpoint.currentStep >= 6) { - info("\nβœ“ Step 7/7: Factory already deployed (resuming)"); + if (checkpoint.steps.factory && checkpoint.currentStep >= 7) { + info("\nβœ“ Step 8/8: Factory already deployed (resuming)"); // Reconstruct DeployFactoryResult from checkpoint (with placeholder proxyResult) const proxyAdminAddr = checkpoint.steps.proxyAdmin?.address || proxyAdmin.address; factoryResult = { @@ -613,12 +781,28 @@ export async function deploySystemWithNewBlr( const bondFacet = isSuccess(bondConfig) ? bondConfig.data.facetKeys.find((bf) => bf.address === facetAddress) : undefined; + const bondFixedRateFacet = isSuccess(bondFixedRateConfig) + ? bondFixedRateConfig.data.facetKeys.find((bf) => bf.address === facetAddress) + : undefined; + const bondKpiLinkedRateFacet = isSuccess(bondKpiLinkedRateConfig) + ? bondKpiLinkedRateConfig.data.facetKeys.find((bf) => bf.address === facetAddress) + : undefined; + const bondSustainabilityPerformanceTargetRateFacet = isSuccess(bondSustainabilityPerformanceTargetRateConfig) + ? bondSustainabilityPerformanceTargetRateConfig.data.facetKeys.find((bf) => bf.address === facetAddress) + : undefined; + const staticFunctionSelectors = IStaticFunctionSelectors__factory.connect(facetAddress, signer); return { name: facetName, address: facetAddress, contractId: await getContractId(facetAddress), - key: equityFacet?.key || bondFacet?.key || "", + key: + equityFacet?.key || + bondFacet?.key || + bondFixedRateFacet?.key || + bondKpiLinkedRateFacet?.key || + bondSustainabilityPerformanceTargetRateFacet?.key || + (await staticFunctionSelectors.getStaticResolverKey()), }; }), ), @@ -650,12 +834,51 @@ export async function deploySystemWithNewBlr( facetCount: 0, facets: [], }, + bondFixedRate: isSuccess(bondFixedRateConfig) + ? { + configId: bondFixedRateConfig.data.configurationId, + version: bondFixedRateConfig.data.version, + facetCount: bondFixedRateConfig.data.facetKeys.length, + facets: bondFixedRateConfig.data.facetKeys, + } + : { + configId: "", + version: 0, + facetCount: 0, + facets: [], + }, + bondKpiLinkedRate: isSuccess(bondKpiLinkedRateConfig) + ? { + configId: bondKpiLinkedRateConfig.data.configurationId, + version: bondKpiLinkedRateConfig.data.version, + facetCount: bondKpiLinkedRateConfig.data.facetKeys.length, + facets: bondKpiLinkedRateConfig.data.facetKeys, + } + : { + configId: "", + version: 0, + facetCount: 0, + facets: [], + }, + bondSustainabilityPerformanceTargetRate: isSuccess(bondSustainabilityPerformanceTargetRateConfig) + ? { + configId: bondSustainabilityPerformanceTargetRateConfig.data.configurationId, + version: bondSustainabilityPerformanceTargetRateConfig.data.version, + facetCount: bondSustainabilityPerformanceTargetRateConfig.data.facetKeys.length, + facets: bondSustainabilityPerformanceTargetRateConfig.data.facetKeys, + } + : { + configId: "", + version: 0, + facetCount: 0, + facets: [], + }, }, summary: { totalContracts: 3, // ProxyAdmin, BLR, Factory totalFacets: facetsResult.deployed.size, - totalConfigurations: 2, // Equity + Bond + totalConfigurations: 5, // Equity + Bond + BondFixedRate + BondKpiLinkedRate + BondSustainabilityPerformanceTargetRate deploymentTime: Date.now() - startTime, gasUsed: totalGasUsed.toString(), success: true, @@ -674,6 +897,26 @@ export async function deploySystemWithNewBlr( const bondKeys = new Set(bondConfig.data.facetKeys.map((f) => f.key)); return output.facets.filter((facet) => bondKeys.has(facet.key)); }, + getBondFixedRateFacets() { + // Use type guard to safely access .data property + if (!isSuccess(bondFixedRateConfig)) return []; + const bondFixedRateKeys = new Set(bondFixedRateConfig.data.facetKeys.map((f) => f.key)); + return output.facets.filter((facet) => bondFixedRateKeys.has(facet.key)); + }, + getBondKpiLinkedRateFacets() { + // Use type guard to safely access .data property + if (!isSuccess(bondKpiLinkedRateConfig)) return []; + const bondKpiLinkedRateKeys = new Set(bondKpiLinkedRateConfig.data.facetKeys.map((f) => f.key)); + return output.facets.filter((facet) => bondKpiLinkedRateKeys.has(facet.key)); + }, + getBondSustainabilityPerformanceTargetRateFacets() { + // Use type guard to safely access .data property + if (!isSuccess(bondSustainabilityPerformanceTargetRateConfig)) return []; + const bondSustainabilityPerformanceTargetRateKeys = new Set( + bondSustainabilityPerformanceTargetRateConfig.data.facetKeys.map((f) => f.key), + ); + return output.facets.filter((facet) => bondSustainabilityPerformanceTargetRateKeys.has(facet.key)); + }, }, }; diff --git a/packages/ats/contracts/scripts/workflows/upgradeConfigurations.ts b/packages/ats/contracts/scripts/workflows/upgradeConfigurations.ts index 8c40dc442..ef7683ffc 100644 --- a/packages/ats/contracts/scripts/workflows/upgradeConfigurations.ts +++ b/packages/ats/contracts/scripts/workflows/upgradeConfigurations.ts @@ -15,9 +15,6 @@ * @module workflows/upgradeConfigurations */ -import { promises as fs } from "fs"; -import { dirname } from "path"; - import { ContractFactory, Signer } from "ethers"; import { z } from "zod"; @@ -26,7 +23,6 @@ import { registerFacets, updateResolverProxyVersion, getResolverProxyConfigInfo, - success, info, warn, error as logError, @@ -42,7 +38,7 @@ import { formatCheckpointStatus, getStepName, validateAddress, - generateTimestamp, + saveDeploymentOutput, } from "@scripts/infrastructure"; import { atsRegistry, createEquityConfiguration, createBondConfiguration } from "@scripts/domain"; import { BusinessLogicResolver__factory } from "@contract-types"; @@ -594,7 +590,7 @@ async function registerFacetsPhase(ctx: UpgradePhaseContext): Promise { throw new Error(`Facet registration failed: ${registerResult.error}`); } - ctx.totalGasUsed += registerResult.gasUsed || 0; + ctx.totalGasUsed += registerResult.transactionGas?.reduce((sum, gas) => sum + gas, 0) ?? 0; info(`βœ… Registered ${registerResult.registered.length} facets in BLR`); if (registerResult.failed.length > 0) { @@ -1112,11 +1108,17 @@ export async function upgradeConfigurations( // Save output to file if requested if (saveOutput) { - const timestamp = generateTimestamp(); - const finalOutputPath = outputPath || `deployments/${network}/${network}-upgrade-${timestamp}.json`; - - await saveUpgradeOutput(output, finalOutputPath); - info(`\nπŸ’Ύ Upgrade output saved: ${finalOutputPath}`); + const result = await saveDeploymentOutput({ + network, + workflow: "upgradeConfigurations", + data: output, + customPath: outputPath, + }); + if (result.success) { + info(`\nπŸ’Ύ Upgrade output saved: ${result.filepath}`); + } else { + warn(`\n⚠️ Warning: Could not save upgrade output: ${result.error}`); + } } // Print summary @@ -1162,24 +1164,3 @@ export async function upgradeConfigurations( throw error; } } - -// ============================================================================ -// Helpers -// ============================================================================ - -/** - * Save upgrade output to JSON file. - * - * @param output - Upgrade output - * @param filePath - File path to save to - */ -async function saveUpgradeOutput(output: UpgradeConfigurationsOutput, filePath: string): Promise { - try { - const dir = dirname(filePath); - await fs.mkdir(dir, { recursive: true }); - await fs.writeFile(filePath, JSON.stringify(output, null, 2), "utf-8"); - success("Upgrade output saved", { path: filePath }); - } catch (error) { - warn(`Warning: Could not save upgrade output: ${error}`); - } -} diff --git a/packages/ats/contracts/scripts/workflows/upgradeTupProxies.ts b/packages/ats/contracts/scripts/workflows/upgradeTupProxies.ts index c8d9d81ee..c201a9d7c 100644 --- a/packages/ats/contracts/scripts/workflows/upgradeTupProxies.ts +++ b/packages/ats/contracts/scripts/workflows/upgradeTupProxies.ts @@ -111,13 +111,10 @@ import { type UpgradeTupProxiesOutputType, type UpgradeProxyResult, validateAddress, - generateTimestamp, + saveDeploymentOutput, } from "@scripts/infrastructure"; import { ProxyAdmin__factory, BusinessLogicResolver__factory, Factory__factory } from "@contract-types"; -import { promises as fs } from "fs"; -import { dirname } from "path"; - // ============================================================================ // Constants // ============================================================================ @@ -767,15 +764,17 @@ export async function upgradeTupProxies( await ctx.checkpointManager.saveCheckpoint(ctx.checkpoint); if (saveOutput) { - const outputDir = outputPath ? dirname(outputPath) : `deployments/${network}`; - await fs.mkdir(outputDir, { recursive: true }); - - const timestamp = generateTimestamp(); - const filename = `${network}-upgrade-tup-${timestamp}.json`; - const filepath = outputPath || `${outputDir}/${filename}`; - - await fs.writeFile(filepath, JSON.stringify(output, null, 2)); - info(`Upgrade output saved to: ${filepath}`); + const result = await saveDeploymentOutput({ + network, + workflow: "upgradeTupProxies", + data: output, + customPath: outputPath, + }); + if (result.success) { + info(`Upgrade output saved to: ${result.filepath}`); + } else { + warn(`Warning: Could not save upgrade output: ${result.error}`); + } } if (deleteOnSuccess) { diff --git a/packages/ats/contracts/tasks/compile.ts b/packages/ats/contracts/tasks/compile.ts index 100bc9a4b..d993d7c39 100644 --- a/packages/ats/contracts/tasks/compile.ts +++ b/packages/ats/contracts/tasks/compile.ts @@ -68,6 +68,14 @@ task("erc3643-clone-interfaces", async (_, hre) => { original: "contracts/layer_1/interfaces/ERC1400/IERC20.sol:IERC20", removeImports: false, }, + // Coupon Interest Rates interfaces + { original: "IFixedRate" }, + { original: "IKpi" }, + { original: "IKpiLinkedRate" }, + { + original: "IScheduledCouponListing", + removeImports: false, + }, ]; const normalized = interfacesToClone.map((i) => ({ @@ -80,6 +88,10 @@ task("erc3643-clone-interfaces", async (_, hre) => { const constants = [ { src: "layer_3/constants/regulation", dst: "regulation" }, { src: "layer_1/constants/roles", dst: "roles" }, + { + src: "layer_2/interfaces/scheduledTasks/scheduledTasksCommon/IScheduledTasksCommon", + dst: "IScheduledTasksCommon", + }, ]; function rewriteImports(source: string): string { diff --git a/packages/ats/contracts/tasks/deploy.ts b/packages/ats/contracts/tasks/deploy.ts index 4c7ff5e4f..5c5c0454f 100644 --- a/packages/ats/contracts/tasks/deploy.ts +++ b/packages/ats/contracts/tasks/deploy.ts @@ -262,6 +262,7 @@ task( scheduledSnapshotsFacet, scheduledBalanceAdjustmentsFacet, scheduledCrossOrderedTasksFacet, + scheduledCouponListingFacet, corporateActionsFacet, lockFacet, holdReadFacet, @@ -324,6 +325,7 @@ task( "Scheduled Snapshots Facet": scheduledSnapshotsFacet.address, "Scheduled Balance Adjustments Facet": scheduledBalanceAdjustmentsFacet.address, "Scheduled Cross Ordered Tasks Facet": scheduledCrossOrderedTasksFacet.address, + "Scheduled Coupon Listing Facet": scheduledCouponListingFacet.address, "Corporate Actions Facet": corporateActionsFacet.address, "Lock Facet": lockFacet.address, "Hold Read Facet": holdReadFacet.address, diff --git a/packages/ats/contracts/test/contracts/unit/factory/factory.test.ts b/packages/ats/contracts/test/contracts/unit/factory/factory.test.ts index 9c1b8ad28..3e120f824 100644 --- a/packages/ats/contracts/test/contracts/unit/factory/factory.test.ts +++ b/packages/ats/contracts/test/contracts/unit/factory/factory.test.ts @@ -3,11 +3,11 @@ import { ethers } from "hardhat"; import { SignerWithAddress } from "@nomiclabs/hardhat-ethers/signers"; import { BusinessLogicResolver, + IFactory, type AccessControl, type ControlList, type ERC1644, type ERC20, - type Factory, } from "@contract-types"; import { loadFixture } from "@nomicfoundation/hardhat-network-helpers"; import { deployAtsInfrastructureFixture } from "@test"; @@ -21,6 +21,9 @@ import { GAS_LIMIT, ATS_ROLES, BOND_CONFIG_ID, + BOND_FIXED_RATE_CONFIG_ID, + BOND_KPI_LINKED_RATE_CONFIG_ID, + BOND_SUSTAINABILITY_PERFORMANCE_TARGET_RATE_CONFIG_ID, } from "@scripts"; import { Rbac, SecurityType } from "@scripts/domain"; import { getBondDetails } from "@test"; @@ -36,7 +39,7 @@ describe("Factory Tests", () => { const listOfCountries = "ES,FR,CH"; const info = "info"; - let factory: Factory; + let factory: IFactory; let businessLogicResolver: BusinessLogicResolver; let accessControlFacet: AccessControl; let controlListFacet: ControlList; @@ -86,6 +89,376 @@ describe("Factory Tests", () => { await loadFixture(deployFactoryFixture); }); + describe("Modifier Tests - Comprehensive Coverage", () => { + describe("checkResolver modifier", () => { + it("GIVEN empty resolver (address(0)) WHEN deploying equity THEN reverts with EmptyResolver", async () => { + const equityData = { + security: getSecurityData(businessLogicResolver, { + rbacs: init_rbacs, + }), + equityDetails: getEquityDetails(), + }; + equityData.security.resolver = ADDRESS_ZERO; + equityData.security.resolverProxyConfiguration = { + key: EQUITY_CONFIG_ID, + version: 1, + }; + + await expect(factory.deployEquity(equityData, getRegulationData())).to.be.rejectedWith("EmptyResolver"); + }); + + it("GIVEN empty resolver WHEN deploying bond THEN reverts with EmptyResolver", async () => { + const bondData = { + security: getSecurityData(businessLogicResolver, { + rbacs: init_rbacs, + }), + bondDetails: await getBondDetails(), + proceedRecipients: [], + proceedRecipientsData: [], + }; + bondData.security.resolver = ADDRESS_ZERO; + bondData.security.resolverProxyConfiguration = { + key: BOND_CONFIG_ID, + version: 1, + }; + + await expect(factory.deployBond(bondData, getRegulationData())).to.be.rejectedWith("EmptyResolver"); + }); + + it("GIVEN valid resolver WHEN deploying equity THEN passes checkResolver validation", async () => { + const equityData = { + security: getSecurityData(businessLogicResolver, { + rbacs: init_rbacs, + }), + equityDetails: getEquityDetails(), + }; + equityData.security.resolverProxyConfiguration = { + key: EQUITY_CONFIG_ID, + version: 1, + }; + + await expect(factory.deployEquity(equityData, getRegulationData())).to.emit(factory, "EquityDeployed"); + }); + }); + + describe("checkISIN modifier", () => { + it("GIVEN ISIN with length < 12 WHEN deploying equity THEN reverts with WrongISIN", async () => { + const equityData = { + security: getSecurityData(businessLogicResolver, { + erc20MetadataInfo: { isin: "US037833100" }, // 11 characters + rbacs: init_rbacs, + }), + equityDetails: getEquityDetails(), + }; + equityData.security.resolverProxyConfiguration = { + key: EQUITY_CONFIG_ID, + version: 1, + }; + + await expect(factory.deployEquity(equityData, getRegulationData())).to.be.rejectedWith("WrongISIN"); + }); + + it("GIVEN ISIN with length > 12 WHEN deploying equity THEN reverts with WrongISIN", async () => { + const equityData = { + security: getSecurityData(businessLogicResolver, { + erc20MetadataInfo: { isin: "US03783310051" }, // 13 characters + rbacs: init_rbacs, + }), + equityDetails: getEquityDetails(), + }; + equityData.security.resolverProxyConfiguration = { + key: EQUITY_CONFIG_ID, + version: 1, + }; + + await expect(factory.deployEquity(equityData, getRegulationData())).to.be.rejectedWith("WrongISIN"); + }); + + it("GIVEN empty ISIN WHEN deploying bond THEN reverts with WrongISIN", async () => { + const bondData = { + security: getSecurityData(businessLogicResolver, { + erc20MetadataInfo: { isin: "" }, + rbacs: init_rbacs, + }), + bondDetails: await getBondDetails(), + proceedRecipients: [], + proceedRecipientsData: [], + }; + bondData.security.resolverProxyConfiguration = { + key: BOND_CONFIG_ID, + version: 1, + }; + + await expect(factory.deployBond(bondData, getRegulationData())).to.be.rejectedWith("WrongISIN"); + }); + + it("GIVEN invalid ISIN checksum WHEN deploying equity THEN reverts with WrongISIN", async () => { + const equityData = { + security: getSecurityData(businessLogicResolver, { + erc20MetadataInfo: { isin: "US0378331009" }, // Wrong checksum digit + rbacs: init_rbacs, + }), + equityDetails: getEquityDetails(), + }; + equityData.security.resolverProxyConfiguration = { + key: EQUITY_CONFIG_ID, + version: 1, + }; + + await expect(factory.deployEquity(equityData, getRegulationData())).to.be.rejectedWith("WrongISIN"); + }); + + it("GIVEN valid ISIN WHEN deploying bond THEN passes checkISIN validation", async () => { + const bondData = { + security: getSecurityData(businessLogicResolver, { + rbacs: init_rbacs, + }), + bondDetails: await getBondDetails(), + proceedRecipients: [], + proceedRecipientsData: [], + }; + bondData.security.resolverProxyConfiguration = { + key: BOND_CONFIG_ID, + version: 1, + }; + + await expect(factory.deployBond(bondData, getRegulationData())).to.emit(factory, "BondDeployed"); + }); + }); + + describe("checkAdmins modifier", () => { + it("GIVEN rbacs with empty members array for admin role WHEN deploying equity THEN reverts with NoInitialAdmins", async () => { + const emptyAdminRbacs: Rbac[] = [ + { + role: ATS_ROLES._DEFAULT_ADMIN_ROLE, + members: [], + }, + ]; + + const equityData = { + security: getSecurityData(businessLogicResolver, { + rbacs: emptyAdminRbacs, + }), + equityDetails: getEquityDetails(), + }; + equityData.security.resolverProxyConfiguration = { + key: EQUITY_CONFIG_ID, + version: 1, + }; + + await expect(factory.deployEquity(equityData, getRegulationData())).to.be.rejectedWith("NoInitialAdmins"); + }); + + it("GIVEN rbacs with only zero address as admin WHEN deploying bond THEN reverts with NoInitialAdmins", async () => { + const zeroAddressAdminRbacs: Rbac[] = [ + { + role: ATS_ROLES._DEFAULT_ADMIN_ROLE, + members: [ADDRESS_ZERO], + }, + ]; + + const bondData = { + security: getSecurityData(businessLogicResolver, { + rbacs: zeroAddressAdminRbacs, + }), + bondDetails: await getBondDetails(), + proceedRecipients: [], + proceedRecipientsData: [], + }; + bondData.security.resolverProxyConfiguration = { + key: BOND_CONFIG_ID, + version: 1, + }; + + await expect(factory.deployBond(bondData, getRegulationData())).to.be.rejectedWith("NoInitialAdmins"); + }); + + it("GIVEN rbacs with no admin role WHEN deploying equity THEN reverts with NoInitialAdmins", async () => { + const noAdminRbacs: Rbac[] = [ + { + role: ATS_ROLES._CONTROL_LIST_ROLE, + members: [signer_A.address], + }, + ]; + + const equityData = { + security: getSecurityData(businessLogicResolver, { + rbacs: noAdminRbacs, + }), + equityDetails: getEquityDetails(), + }; + equityData.security.resolverProxyConfiguration = { + key: EQUITY_CONFIG_ID, + version: 1, + }; + + await expect(factory.deployEquity(equityData, getRegulationData())).to.be.rejectedWith("NoInitialAdmins"); + }); + + it("GIVEN rbacs with admin role having valid address after zero address WHEN deploying equity THEN passes validation", async () => { + const mixedAdminRbacs: Rbac[] = [ + { + role: ATS_ROLES._DEFAULT_ADMIN_ROLE, + members: [ADDRESS_ZERO, signer_A.address], + }, + ]; + + const equityData = { + security: getSecurityData(businessLogicResolver, { + rbacs: mixedAdminRbacs, + }), + equityDetails: getEquityDetails(), + }; + equityData.security.resolverProxyConfiguration = { + key: EQUITY_CONFIG_ID, + version: 1, + }; + + await expect(factory.deployEquity(equityData, getRegulationData())).to.emit(factory, "EquityDeployed"); + }); + + it("GIVEN rbacs with multiple roles where admin role is last WHEN deploying bond THEN passes validation", async () => { + const orderedRbacs: Rbac[] = [ + { + role: ATS_ROLES._CONTROL_LIST_ROLE, + members: [signer_A.address], + }, + { + role: ATS_ROLES._DEFAULT_ADMIN_ROLE, + members: [signer_B.address], + }, + ]; + + const bondData = { + security: getSecurityData(businessLogicResolver, { + rbacs: orderedRbacs, + }), + bondDetails: await getBondDetails(), + proceedRecipients: [], + proceedRecipientsData: [], + }; + bondData.security.resolverProxyConfiguration = { + key: BOND_CONFIG_ID, + version: 1, + }; + + await expect(factory.deployBond(bondData, getRegulationData())).to.emit(factory, "BondDeployed"); + }); + }); + + describe("checkRegulation modifier", () => { + it("GIVEN NONE regulation type with non-NONE subtype WHEN deploying equity THEN reverts with RegulationTypeAndSubTypeForbidden", async () => { + const equityData = { + security: getSecurityData(businessLogicResolver, { + rbacs: init_rbacs, + }), + equityDetails: getEquityDetails(), + }; + equityData.security.resolverProxyConfiguration = { + key: EQUITY_CONFIG_ID, + version: 1, + }; + + const invalidRegulationData = getRegulationData({ + regulationType: RegulationType.NONE, + regulationSubType: RegulationSubType.REG_D_506_B, + }); + + await expect(factory.deployEquity(equityData, invalidRegulationData)) + .to.be.revertedWithCustomError(factory, "RegulationTypeAndSubTypeForbidden") + .withArgs(RegulationType.NONE, RegulationSubType.REG_D_506_B); + }); + + it("GIVEN non-NONE regulation type with NONE subtype WHEN deploying bond THEN reverts with RegulationTypeAndSubTypeForbidden", async () => { + const bondData = { + security: getSecurityData(businessLogicResolver, { + rbacs: init_rbacs, + }), + bondDetails: await getBondDetails(), + proceedRecipients: [], + proceedRecipientsData: [], + }; + bondData.security.resolverProxyConfiguration = { + key: BOND_CONFIG_ID, + version: 1, + }; + + const invalidRegulationData = getRegulationData({ + regulationType: RegulationType.REG_D, + regulationSubType: RegulationSubType.NONE, + }); + + await expect(factory.deployBond(bondData, invalidRegulationData)) + .to.be.revertedWithCustomError(factory, "RegulationTypeAndSubTypeForbidden") + .withArgs(RegulationType.REG_D, RegulationSubType.NONE); + }); + + it("GIVEN REG_S with REG_D_506_B subtype WHEN deploying equity THEN reverts with RegulationTypeAndSubTypeForbidden", async () => { + const equityData = { + security: getSecurityData(businessLogicResolver, { + rbacs: init_rbacs, + }), + equityDetails: getEquityDetails(), + }; + equityData.security.resolverProxyConfiguration = { + key: EQUITY_CONFIG_ID, + version: 1, + }; + + const invalidRegulationData = getRegulationData({ + regulationType: RegulationType.REG_S, + regulationSubType: RegulationSubType.REG_D_506_B, + }); + + await expect(factory.deployEquity(equityData, invalidRegulationData)) + .to.be.revertedWithCustomError(factory, "RegulationTypeAndSubTypeForbidden") + .withArgs(RegulationType.REG_S, RegulationSubType.REG_D_506_B); + }); + + it("GIVEN valid regulation type and subtype combination WHEN deploying equity THEN passes validation", async () => { + const equityData = { + security: getSecurityData(businessLogicResolver, { + rbacs: init_rbacs, + }), + equityDetails: getEquityDetails(), + }; + equityData.security.resolverProxyConfiguration = { + key: EQUITY_CONFIG_ID, + version: 1, + }; + + const validRegulationData = getRegulationData({ + regulationType: RegulationType.REG_D, + regulationSubType: RegulationSubType.REG_D_506_C, + }); + + await expect(factory.deployEquity(equityData, validRegulationData)).to.emit(factory, "EquityDeployed"); + }); + + it("GIVEN REG_S/NONE regulation combination WHEN deploying bond THEN passes validation", async () => { + const bondData = { + security: getSecurityData(businessLogicResolver, { + rbacs: init_rbacs, + }), + bondDetails: await getBondDetails(), + proceedRecipients: [], + proceedRecipientsData: [], + }; + bondData.security.resolverProxyConfiguration = { + key: BOND_CONFIG_ID, + version: 1, + }; + + const regSRegulationData = getRegulationData({ + regulationType: RegulationType.REG_S, + regulationSubType: RegulationSubType.NONE, + }); + + await expect(factory.deployBond(bondData, regSRegulationData)).to.emit(factory, "BondDeployed"); + }); + }); + }); + describe("Equity tests", () => { it("GIVEN an empty Resolver WHEN deploying a new resolverProxy THEN transaction fails", async () => { const equityData = { @@ -209,9 +582,10 @@ describe("Factory Tests", () => { const factoryRegulationData = getRegulationData(); - await expect(factory.deployEquity(equityData, factoryRegulationData)).to.emit(factory, "EquityDeployed"); + const tx = factory.deployEquity(equityData, factoryRegulationData); + await expect(tx).to.emit(factory, "EquityDeployed"); - const result = await factory.deployEquity(equityData, factoryRegulationData); + const result = await tx; const events = (await result.wait()).events!; const deployedEquityEvent = events.find((e) => e.event == "EquityDeployed"); const equityAddress = deployedEquityEvent!.args!.equityAddress; @@ -364,9 +738,11 @@ describe("Factory Tests", () => { const factoryRegulationData = getRegulationData(); - await expect(factory.deployBond(bondData, factoryRegulationData)).to.emit(factory, "BondDeployed"); + const tx = factory.deployBond(bondData, factoryRegulationData); - const result = await factory.deployBond(bondData, factoryRegulationData); + await expect(tx).to.emit(factory, "BondDeployed"); + + const result = await tx; const events = (await result.wait()).events!; const deployedBondEvent = events.find((e) => e.event == "BondDeployed"); const bondAddress = deployedBondEvent!.args!.bondAddress; @@ -469,4 +845,991 @@ describe("Factory Tests", () => { .withArgs(RegulationType.REG_S, RegulationSubType.REG_D_506_C); }); }); + + describe("getAppliedRegulationData tests", () => { + it("GIVEN a valid regulation type and subtype WHEN calling getAppliedRegulationData THEN returns regulation data", async () => { + const regulationType = RegulationType.REG_D; + const regulationSubType = RegulationSubType.REG_D_506_B; + + const regulationData = await factory.getAppliedRegulationData(regulationType, regulationSubType); + + expect(regulationData.regulationType).to.equal(regulationType); + expect(regulationData.regulationSubType).to.equal(regulationSubType); + }); + + it("GIVEN REG_D with 506_C subtype WHEN calling getAppliedRegulationData THEN returns correct data", async () => { + const regulationType = RegulationType.REG_D; + const regulationSubType = RegulationSubType.REG_D_506_C; + + const regulationData = await factory.getAppliedRegulationData(regulationType, regulationSubType); + + expect(regulationData.regulationType).to.equal(regulationType); + expect(regulationData.regulationSubType).to.equal(regulationSubType); + }); + + it("GIVEN REG_S regulation type WHEN calling getAppliedRegulationData THEN returns correct data", async () => { + const regulationType = RegulationType.REG_S; + const regulationSubType = RegulationSubType.NONE; + + const regulationData = await factory.getAppliedRegulationData(regulationType, regulationSubType); + + expect(regulationData.regulationType).to.equal(regulationType); + expect(regulationData.regulationSubType).to.equal(regulationSubType); + }); + }); + + describe("ISIN validation edge cases", () => { + it("GIVEN an ISIN with length less than 12 WHEN deploying equity THEN transaction fails with WrongISIN", async () => { + const equityData = { + security: getSecurityData(businessLogicResolver, { + erc20MetadataInfo: { isin: "US037833100" }, // 11 characters - too short + rbacs: init_rbacs, + }), + equityDetails: getEquityDetails(), + }; + equityData.security.resolverProxyConfiguration = { + key: EQUITY_CONFIG_ID, + version: 1, + }; + + const factoryRegulationData = getRegulationData(); + + await expect(factory.deployEquity(equityData, factoryRegulationData)).to.be.rejectedWith("WrongISIN"); + }); + + it("GIVEN an ISIN with length greater than 12 WHEN deploying equity THEN transaction fails with WrongISIN", async () => { + const equityData = { + security: getSecurityData(businessLogicResolver, { + erc20MetadataInfo: { isin: "US03783310051" }, // 13 characters - too long + rbacs: init_rbacs, + }), + equityDetails: getEquityDetails(), + }; + equityData.security.resolverProxyConfiguration = { + key: EQUITY_CONFIG_ID, + version: 1, + }; + + const factoryRegulationData = getRegulationData(); + + await expect(factory.deployEquity(equityData, factoryRegulationData)).to.be.rejectedWith("WrongISIN"); + }); + + it("GIVEN an empty ISIN WHEN deploying equity THEN transaction fails with WrongISIN", async () => { + const equityData = { + security: getSecurityData(businessLogicResolver, { + erc20MetadataInfo: { isin: "" }, // Empty string + rbacs: init_rbacs, + }), + equityDetails: getEquityDetails(), + }; + equityData.security.resolverProxyConfiguration = { + key: EQUITY_CONFIG_ID, + version: 1, + }; + + const factoryRegulationData = getRegulationData(); + + await expect(factory.deployEquity(equityData, factoryRegulationData)).to.be.rejectedWith("WrongISIN"); + }); + + it("GIVEN an ISIN with wrong length WHEN deploying bond THEN transaction fails with WrongISIN", async () => { + const bondData = { + security: getSecurityData(businessLogicResolver, { + erc20MetadataInfo: { isin: "SHORT" }, // Too short + rbacs: init_rbacs, + }), + bondDetails: await getBondDetails(), + proceedRecipients: [], + proceedRecipientsData: [], + }; + bondData.security.resolverProxyConfiguration = { + key: BOND_CONFIG_ID, + version: 1, + }; + + const factoryRegulationData = getRegulationData(); + + await expect(factory.deployBond(bondData, factoryRegulationData)).to.be.rejectedWith("WrongISIN"); + }); + }); + + describe("Bond with Fixed Rate tests", () => { + it("GIVEN proper BondFixedRateData WHEN deploying a new bond with fixed rate THEN transaction succeeds", async () => { + const bondFixedRateData = { + bondData: { + security: getSecurityData(businessLogicResolver, { + rbacs: init_rbacs, + }), + bondDetails: await getBondDetails(), + proceedRecipients: [], + proceedRecipientsData: [], + }, + factoryRegulationData: getRegulationData(), + fixedRateData: { + rate: 500, // 5% with 2 decimals + rateDecimals: 2, + }, + }; + + bondFixedRateData.bondData.security.resolverProxyConfiguration = { + key: BOND_FIXED_RATE_CONFIG_ID, + version: 1, + }; + + const tx = factory.deployBondFixedRate(bondFixedRateData); + await expect(tx).to.emit(factory, "BondFixedRateDeployed"); + + const result = await tx; + const events = (await result.wait()).events!; + const deployedBondEvent = events.find((e) => e.event == "BondFixedRateDeployed"); + const bondAddress = deployedBondEvent!.args!.bondAddress; + + // Verify fixed rate was set + const fixedRateFacet = await ethers.getContractAt("FixedRate", bondAddress); + const [rate, decimals] = await fixedRateFacet.getRate(); + expect(rate).to.equal(bondFixedRateData.fixedRateData.rate); + expect(decimals).to.equal(bondFixedRateData.fixedRateData.rateDecimals); + }); + + it("GIVEN empty resolver WHEN deploying BondFixedRate THEN transaction fails", async () => { + const bondFixedRateData = { + bondData: { + security: getSecurityData(businessLogicResolver, { + rbacs: init_rbacs, + }), + bondDetails: await getBondDetails(), + proceedRecipients: [], + proceedRecipientsData: [], + }, + factoryRegulationData: getRegulationData(), + fixedRateData: { + rate: 500, + rateDecimals: 2, + }, + }; + + bondFixedRateData.bondData.security.resolver = ADDRESS_ZERO; + bondFixedRateData.bondData.security.resolverProxyConfiguration = { + key: BOND_FIXED_RATE_CONFIG_ID, + version: 1, + }; + + await expect(factory.deployBondFixedRate(bondFixedRateData)).to.be.rejectedWith("EmptyResolver"); + }); + + it("GIVEN wrong ISIN WHEN deploying BondFixedRate THEN transaction fails", async () => { + const bondFixedRateData = { + bondData: { + security: getSecurityData(businessLogicResolver, { + erc20MetadataInfo: { isin: "invalid_isin" }, + rbacs: init_rbacs, + }), + bondDetails: await getBondDetails(), + proceedRecipients: [], + proceedRecipientsData: [], + }, + factoryRegulationData: getRegulationData(), + fixedRateData: { + rate: 500, + rateDecimals: 2, + }, + }; + + bondFixedRateData.bondData.security.resolverProxyConfiguration = { + key: BOND_FIXED_RATE_CONFIG_ID, + version: 1, + }; + + await expect(factory.deployBondFixedRate(bondFixedRateData)).to.be.rejectedWith("WrongISIN"); + }); + + it("GIVEN no admin WHEN deploying BondFixedRate THEN transaction fails", async () => { + const bondFixedRateData = { + bondData: { + security: getSecurityData(businessLogicResolver), + bondDetails: await getBondDetails(), + proceedRecipients: [], + proceedRecipientsData: [], + }, + factoryRegulationData: getRegulationData(), + fixedRateData: { + rate: 500, + rateDecimals: 2, + }, + }; + + bondFixedRateData.bondData.security.resolverProxyConfiguration = { + key: BOND_FIXED_RATE_CONFIG_ID, + version: 1, + }; + + await expect(factory.deployBondFixedRate(bondFixedRateData)).to.be.rejectedWith("NoInitialAdmins"); + }); + + it("GIVEN wrong regulation type WHEN deploying BondFixedRate THEN transaction fails", async () => { + const bondFixedRateData = { + bondData: { + security: getSecurityData(businessLogicResolver, { + rbacs: init_rbacs, + }), + bondDetails: await getBondDetails(), + proceedRecipients: [], + proceedRecipientsData: [], + }, + factoryRegulationData: getRegulationData({ + regulationType: RegulationType.NONE, + regulationSubType: RegulationSubType.REG_D_506_B, + }), + fixedRateData: { + rate: 500, + rateDecimals: 2, + }, + }; + + bondFixedRateData.bondData.security.resolverProxyConfiguration = { + key: BOND_FIXED_RATE_CONFIG_ID, + version: 1, + }; + + await expect(factory.deployBondFixedRate(bondFixedRateData)) + .to.be.revertedWithCustomError(factory, "RegulationTypeAndSubTypeForbidden") + .withArgs(RegulationType.NONE, RegulationSubType.REG_D_506_B); + }); + }); + + describe("Bond with KPI Linked Rate tests", () => { + it("GIVEN proper BondKpiLinkedRateData WHEN deploying a new bond with KPI linked rate THEN transaction succeeds", async () => { + const bondKpiLinkedRateData = { + bondData: { + security: getSecurityData(businessLogicResolver, { + rbacs: init_rbacs, + }), + bondDetails: await getBondDetails(), + proceedRecipients: [], + proceedRecipientsData: [], + }, + factoryRegulationData: getRegulationData(), + interestRate: { + maxRate: 1000, // 10% + baseRate: 500, // 5% + minRate: 100, // 1% + startPeriod: Math.floor(Date.now() / 1000) + 86400, + startRate: 500, + missedPenalty: 50, + reportPeriod: 86400 * 30, // 30 days + rateDecimals: 2, + }, + impactData: { + maxDeviationCap: 150, + baseLine: 100, + maxDeviationFloor: 50, + impactDataDecimals: 2, + adjustmentPrecision: 100, + }, + kpiOracle: signer_A.address, + }; + + bondKpiLinkedRateData.bondData.security.resolverProxyConfiguration = { + key: BOND_KPI_LINKED_RATE_CONFIG_ID, + version: 1, + }; + + const tx = factory.deployBondKpiLinkedRate(bondKpiLinkedRateData); + await expect(tx).to.emit(factory, "BondKpiLinkedRateDeployed"); + + const result = await tx; + const events = (await result.wait()).events!; + const deployedBondEvent = events.find((e) => e.event == "BondKpiLinkedRateDeployed"); + const bondAddress = deployedBondEvent!.args!.bondAddress; + + // Verify KPI linked rate was set + const kpiLinkedRateFacet = await ethers.getContractAt("KpiLinkedRate", bondAddress); + const interestRate = await kpiLinkedRateFacet.getInterestRate(); + expect(interestRate.maxRate).to.equal(bondKpiLinkedRateData.interestRate.maxRate); + expect(interestRate.baseRate).to.equal(bondKpiLinkedRateData.interestRate.baseRate); + expect(interestRate.minRate).to.equal(bondKpiLinkedRateData.interestRate.minRate); + + const impactData = await kpiLinkedRateFacet.getImpactData(); + expect(impactData.maxDeviationCap).to.equal(bondKpiLinkedRateData.impactData.maxDeviationCap); + expect(impactData.baseLine).to.equal(bondKpiLinkedRateData.impactData.baseLine); + expect(impactData.maxDeviationFloor).to.equal(bondKpiLinkedRateData.impactData.maxDeviationFloor); + }); + + it("GIVEN invalid interest rate (minRate > baseRate) WHEN deploying bond THEN transaction fails", async () => { + const bondKpiLinkedRateData = { + bondData: { + security: getSecurityData(businessLogicResolver, { + rbacs: init_rbacs, + }), + bondDetails: await getBondDetails(), + proceedRecipients: [], + proceedRecipientsData: [], + }, + factoryRegulationData: getRegulationData(), + interestRate: { + maxRate: 1000, + baseRate: 500, + minRate: 600, // minRate > baseRate - INVALID + startPeriod: Math.floor(Date.now() / 1000) + 86400, + startRate: 500, + missedPenalty: 50, + reportPeriod: 86400 * 30, + rateDecimals: 2, + }, + impactData: { + maxDeviationCap: 150, + baseLine: 100, + maxDeviationFloor: 50, + impactDataDecimals: 2, + adjustmentPrecision: 100, + }, + kpiOracle: signer_A.address, + }; + + bondKpiLinkedRateData.bondData.security.resolverProxyConfiguration = { + key: BOND_KPI_LINKED_RATE_CONFIG_ID, + version: 1, + }; + + await expect(factory.deployBondKpiLinkedRate(bondKpiLinkedRateData)).to.be.revertedWithCustomError( + factory, + "WrongInterestRateValues", + ); + }); + + it("GIVEN invalid interest rate (baseRate > maxRate) WHEN deploying bond THEN transaction fails", async () => { + const bondKpiLinkedRateData = { + bondData: { + security: getSecurityData(businessLogicResolver, { + rbacs: init_rbacs, + }), + bondDetails: await getBondDetails(), + proceedRecipients: [], + proceedRecipientsData: [], + }, + factoryRegulationData: getRegulationData(), + interestRate: { + maxRate: 400, + baseRate: 500, // baseRate > maxRate - INVALID + minRate: 100, + startPeriod: Math.floor(Date.now() / 1000) + 86400, + startRate: 500, + missedPenalty: 50, + reportPeriod: 86400 * 30, + rateDecimals: 2, + }, + impactData: { + maxDeviationCap: 150, + baseLine: 100, + maxDeviationFloor: 50, + impactDataDecimals: 2, + adjustmentPrecision: 100, + }, + kpiOracle: signer_A.address, + }; + + bondKpiLinkedRateData.bondData.security.resolverProxyConfiguration = { + key: BOND_KPI_LINKED_RATE_CONFIG_ID, + version: 1, + }; + + await expect(factory.deployBondKpiLinkedRate(bondKpiLinkedRateData)).to.be.revertedWithCustomError( + factory, + "WrongInterestRateValues", + ); + }); + + it("GIVEN invalid impact data (maxDeviationFloor > baseLine) WHEN deploying bond THEN transaction fails", async () => { + const bondKpiLinkedRateData = { + bondData: { + security: getSecurityData(businessLogicResolver, { + rbacs: init_rbacs, + }), + bondDetails: await getBondDetails(), + proceedRecipients: [], + proceedRecipientsData: [], + }, + factoryRegulationData: getRegulationData(), + interestRate: { + maxRate: 1000, + baseRate: 500, + minRate: 100, + startPeriod: Math.floor(Date.now() / 1000) + 86400, + startRate: 500, + missedPenalty: 50, + reportPeriod: 86400 * 30, + rateDecimals: 2, + }, + impactData: { + maxDeviationCap: 150, + baseLine: 100, + maxDeviationFloor: 120, // maxDeviationFloor > baseLine - INVALID + impactDataDecimals: 2, + adjustmentPrecision: 100, + }, + kpiOracle: signer_A.address, + }; + + bondKpiLinkedRateData.bondData.security.resolverProxyConfiguration = { + key: BOND_KPI_LINKED_RATE_CONFIG_ID, + version: 1, + }; + + await expect(factory.deployBondKpiLinkedRate(bondKpiLinkedRateData)).to.be.revertedWithCustomError( + factory, + "WrongImpactDataValues", + ); + }); + + it("GIVEN invalid impact data (baseLine > maxDeviationCap) WHEN deploying bond THEN transaction fails", async () => { + const bondKpiLinkedRateData = { + bondData: { + security: getSecurityData(businessLogicResolver, { + rbacs: init_rbacs, + }), + bondDetails: await getBondDetails(), + proceedRecipients: [], + proceedRecipientsData: [], + }, + factoryRegulationData: getRegulationData(), + interestRate: { + maxRate: 1000, + baseRate: 500, + minRate: 100, + startPeriod: Math.floor(Date.now() / 1000) + 86400, + startRate: 500, + missedPenalty: 50, + reportPeriod: 86400 * 30, + rateDecimals: 2, + }, + impactData: { + maxDeviationCap: 90, + baseLine: 100, // baseLine > maxDeviationCap - INVALID + maxDeviationFloor: 50, + impactDataDecimals: 2, + adjustmentPrecision: 100, + }, + kpiOracle: signer_A.address, + }; + + bondKpiLinkedRateData.bondData.security.resolverProxyConfiguration = { + key: BOND_KPI_LINKED_RATE_CONFIG_ID, + version: 1, + }; + + await expect(factory.deployBondKpiLinkedRate(bondKpiLinkedRateData)).to.be.revertedWithCustomError( + factory, + "WrongImpactDataValues", + ); + }); + + it("GIVEN empty resolver WHEN deploying BondKpiLinkedRate THEN transaction fails", async () => { + const bondKpiLinkedRateData = { + bondData: { + security: getSecurityData(businessLogicResolver, { + rbacs: init_rbacs, + }), + bondDetails: await getBondDetails(), + proceedRecipients: [], + proceedRecipientsData: [], + }, + factoryRegulationData: getRegulationData(), + interestRate: { + maxRate: 1000, + baseRate: 500, + minRate: 100, + startPeriod: Math.floor(Date.now() / 1000) + 86400, + startRate: 500, + missedPenalty: 50, + reportPeriod: 86400 * 30, + rateDecimals: 2, + }, + impactData: { + maxDeviationCap: 150, + baseLine: 100, + maxDeviationFloor: 50, + impactDataDecimals: 2, + adjustmentPrecision: 100, + }, + kpiOracle: signer_A.address, + }; + + bondKpiLinkedRateData.bondData.security.resolver = ADDRESS_ZERO; + bondKpiLinkedRateData.bondData.security.resolverProxyConfiguration = { + key: BOND_KPI_LINKED_RATE_CONFIG_ID, + version: 1, + }; + + await expect(factory.deployBondKpiLinkedRate(bondKpiLinkedRateData)).to.be.rejectedWith("EmptyResolver"); + }); + + it("GIVEN wrong ISIN WHEN deploying BondKpiLinkedRate THEN transaction fails", async () => { + const bondKpiLinkedRateData = { + bondData: { + security: getSecurityData(businessLogicResolver, { + erc20MetadataInfo: { isin: "invalid_isin" }, + rbacs: init_rbacs, + }), + bondDetails: await getBondDetails(), + proceedRecipients: [], + proceedRecipientsData: [], + }, + factoryRegulationData: getRegulationData(), + interestRate: { + maxRate: 1000, + baseRate: 500, + minRate: 100, + startPeriod: Math.floor(Date.now() / 1000) + 86400, + startRate: 500, + missedPenalty: 50, + reportPeriod: 86400 * 30, + rateDecimals: 2, + }, + impactData: { + maxDeviationCap: 150, + baseLine: 100, + maxDeviationFloor: 50, + impactDataDecimals: 2, + adjustmentPrecision: 100, + }, + kpiOracle: signer_A.address, + }; + + bondKpiLinkedRateData.bondData.security.resolverProxyConfiguration = { + key: BOND_KPI_LINKED_RATE_CONFIG_ID, + version: 1, + }; + + await expect(factory.deployBondKpiLinkedRate(bondKpiLinkedRateData)).to.be.rejectedWith("WrongISIN"); + }); + + it("GIVEN no admin WHEN deploying BondKpiLinkedRate THEN transaction fails", async () => { + const bondKpiLinkedRateData = { + bondData: { + security: getSecurityData(businessLogicResolver), + bondDetails: await getBondDetails(), + proceedRecipients: [], + proceedRecipientsData: [], + }, + factoryRegulationData: getRegulationData(), + interestRate: { + maxRate: 1000, + baseRate: 500, + minRate: 100, + startPeriod: Math.floor(Date.now() / 1000) + 86400, + startRate: 500, + missedPenalty: 50, + reportPeriod: 86400 * 30, + rateDecimals: 2, + }, + impactData: { + maxDeviationCap: 150, + baseLine: 100, + maxDeviationFloor: 50, + impactDataDecimals: 2, + adjustmentPrecision: 100, + }, + kpiOracle: signer_A.address, + }; + + bondKpiLinkedRateData.bondData.security.resolverProxyConfiguration = { + key: BOND_KPI_LINKED_RATE_CONFIG_ID, + version: 1, + }; + + await expect(factory.deployBondKpiLinkedRate(bondKpiLinkedRateData)).to.be.rejectedWith("NoInitialAdmins"); + }); + + it("GIVEN wrong regulation type WHEN deploying BondKpiLinkedRate THEN transaction fails", async () => { + const bondKpiLinkedRateData = { + bondData: { + security: getSecurityData(businessLogicResolver, { + rbacs: init_rbacs, + }), + bondDetails: await getBondDetails(), + proceedRecipients: [], + proceedRecipientsData: [], + }, + factoryRegulationData: getRegulationData({ + regulationType: RegulationType.REG_D, + regulationSubType: RegulationSubType.NONE, + }), + interestRate: { + maxRate: 1000, + baseRate: 500, + minRate: 100, + startPeriod: Math.floor(Date.now() / 1000) + 86400, + startRate: 500, + missedPenalty: 50, + reportPeriod: 86400 * 30, + rateDecimals: 2, + }, + impactData: { + maxDeviationCap: 150, + baseLine: 100, + maxDeviationFloor: 50, + impactDataDecimals: 2, + adjustmentPrecision: 100, + }, + kpiOracle: signer_A.address, + }; + + bondKpiLinkedRateData.bondData.security.resolverProxyConfiguration = { + key: BOND_KPI_LINKED_RATE_CONFIG_ID, + version: 1, + }; + + await expect(factory.deployBondKpiLinkedRate(bondKpiLinkedRateData)) + .to.be.revertedWithCustomError(factory, "RegulationTypeAndSubTypeForbidden") + .withArgs(RegulationType.REG_D, RegulationSubType.NONE); + }); + }); + + describe("Bond with Sustainability Performance Target Rate tests", () => { + it("GIVEN proper BondSustainabilityPerformanceTargetRateData WHEN deploying bond THEN transaction succeeds", async () => { + const bondSustainabilityData = { + bondData: { + security: getSecurityData(businessLogicResolver, { + rbacs: init_rbacs, + }), + bondDetails: await getBondDetails(), + proceedRecipients: [signer_A.address], + proceedRecipientsData: ["0x"], + }, + factoryRegulationData: getRegulationData(), + interestRate: { + baseRate: 500, + startPeriod: Math.floor(Date.now() / 1000) + 86400, + startRate: 500, + rateDecimals: 2, + }, + impactData: [ + { + baseLine: 100, + baseLineMode: 0, // MINIMUM + deltaRate: 50, + impactDataMode: 0, // PENALTY + }, + ], + projects: [signer_A.address], + }; + + bondSustainabilityData.bondData.security.resolverProxyConfiguration = { + key: BOND_SUSTAINABILITY_PERFORMANCE_TARGET_RATE_CONFIG_ID, + version: 1, + }; + + const tx = factory.deployBondSustainabilityPerformanceTargetRate(bondSustainabilityData); + await expect(tx).to.emit(factory, "BondSustainabilityPerformanceTargetRateDeployed"); + + const result = await tx; + const events = (await result.wait()).events!; + const deployedBondEvent = events.find((e) => e.event == "BondSustainabilityPerformanceTargetRateDeployed"); + const bondAddress = deployedBondEvent!.args!.bondAddress; + + // Verify sustainability rate was set + const sustainabilityRateFacet = await ethers.getContractAt("SustainabilityPerformanceTargetRate", bondAddress); + const interestRate = await sustainabilityRateFacet.getInterestRate(); + expect(interestRate.baseRate).to.equal(bondSustainabilityData.interestRate.baseRate); + expect(interestRate.startRate).to.equal(bondSustainabilityData.interestRate.startRate); + expect(interestRate.rateDecimals).to.equal(bondSustainabilityData.interestRate.rateDecimals); + }); + + it("GIVEN empty resolver WHEN deploying BondSustainabilityPerformanceTargetRate THEN transaction fails", async () => { + const bondSustainabilityData = { + bondData: { + security: getSecurityData(businessLogicResolver, { + rbacs: init_rbacs, + }), + bondDetails: await getBondDetails(), + proceedRecipients: [signer_A.address], + proceedRecipientsData: ["0x"], + }, + factoryRegulationData: getRegulationData(), + interestRate: { + baseRate: 500, + startPeriod: Math.floor(Date.now() / 1000) + 86400, + startRate: 500, + rateDecimals: 2, + }, + impactData: [ + { + baseLine: 100, + baseLineMode: 0, + deltaRate: 50, + impactDataMode: 0, + }, + ], + projects: [signer_A.address], + }; + + bondSustainabilityData.bondData.security.resolver = ADDRESS_ZERO; + bondSustainabilityData.bondData.security.resolverProxyConfiguration = { + key: BOND_SUSTAINABILITY_PERFORMANCE_TARGET_RATE_CONFIG_ID, + version: 1, + }; + + await expect(factory.deployBondSustainabilityPerformanceTargetRate(bondSustainabilityData)).to.be.rejectedWith( + "EmptyResolver", + ); + }); + + it("GIVEN wrong ISIN WHEN deploying BondSustainabilityPerformanceTargetRate THEN transaction fails", async () => { + const bondSustainabilityData = { + bondData: { + security: getSecurityData(businessLogicResolver, { + erc20MetadataInfo: { isin: "invalid_isin" }, + rbacs: init_rbacs, + }), + bondDetails: await getBondDetails(), + proceedRecipients: [signer_A.address], + proceedRecipientsData: ["0x"], + }, + factoryRegulationData: getRegulationData(), + interestRate: { + baseRate: 500, + startPeriod: Math.floor(Date.now() / 1000) + 86400, + startRate: 500, + rateDecimals: 2, + }, + impactData: [ + { + baseLine: 100, + baseLineMode: 0, + deltaRate: 50, + impactDataMode: 0, + }, + ], + projects: [signer_A.address], + }; + + bondSustainabilityData.bondData.security.resolverProxyConfiguration = { + key: BOND_SUSTAINABILITY_PERFORMANCE_TARGET_RATE_CONFIG_ID, + version: 1, + }; + + await expect(factory.deployBondSustainabilityPerformanceTargetRate(bondSustainabilityData)).to.be.rejectedWith( + "WrongISIN", + ); + }); + + it("GIVEN no admin WHEN deploying BondSustainabilityPerformanceTargetRate THEN transaction fails", async () => { + const bondSustainabilityData = { + bondData: { + security: getSecurityData(businessLogicResolver), + bondDetails: await getBondDetails(), + proceedRecipients: [signer_A.address], + proceedRecipientsData: ["0x"], + }, + factoryRegulationData: getRegulationData(), + interestRate: { + baseRate: 500, + startPeriod: Math.floor(Date.now() / 1000) + 86400, + startRate: 500, + rateDecimals: 2, + }, + impactData: [ + { + baseLine: 100, + baseLineMode: 0, + deltaRate: 50, + impactDataMode: 0, + }, + ], + projects: [signer_A.address], + }; + + bondSustainabilityData.bondData.security.resolverProxyConfiguration = { + key: BOND_SUSTAINABILITY_PERFORMANCE_TARGET_RATE_CONFIG_ID, + version: 1, + }; + + await expect(factory.deployBondSustainabilityPerformanceTargetRate(bondSustainabilityData)).to.be.rejectedWith( + "NoInitialAdmins", + ); + }); + + it("GIVEN wrong regulation type WHEN deploying BondSustainabilityPerformanceTargetRate THEN transaction fails", async () => { + const bondSustainabilityData = { + bondData: { + security: getSecurityData(businessLogicResolver, { + rbacs: init_rbacs, + }), + bondDetails: await getBondDetails(), + proceedRecipients: [signer_A.address], + proceedRecipientsData: ["0x"], + }, + factoryRegulationData: getRegulationData({ + regulationType: RegulationType.NONE, + regulationSubType, + additionalSecurityData: { + countriesControlListType, + listOfCountries, + info, + }, + }), + interestRate: { + baseRate: 500, + startPeriod: Math.floor(Date.now() / 1000) + 86400, + startRate: 500, + rateDecimals: 2, + }, + impactData: [ + { + baseLine: 100, + baseLineMode: 0, + deltaRate: 50, + impactDataMode: 0, + }, + ], + projects: [signer_A.address], + }; + + bondSustainabilityData.bondData.security.resolverProxyConfiguration = { + key: BOND_SUSTAINABILITY_PERFORMANCE_TARGET_RATE_CONFIG_ID, + version: 1, + }; + + await expect(factory.deployBondSustainabilityPerformanceTargetRate(bondSustainabilityData)) + .to.be.revertedWithCustomError(factory, "RegulationTypeAndSubTypeForbidden") + .withArgs(RegulationType.NONE, regulationSubType); + }); + }); + + describe("checkAdmins edge cases", () => { + it("GIVEN rbacs with empty members array for admin role WHEN deploying equity THEN transaction fails", async () => { + const emptyAdminRbacs: Rbac[] = [ + { + role: ATS_ROLES._DEFAULT_ADMIN_ROLE, + members: [], // Empty members array + }, + ]; + + const equityData = { + security: getSecurityData(businessLogicResolver, { + rbacs: emptyAdminRbacs, + }), + equityDetails: getEquityDetails(), + }; + equityData.security.resolverProxyConfiguration = { + key: EQUITY_CONFIG_ID, + version: 1, + }; + + const factoryRegulationData = getRegulationData(); + + await expect(factory.deployEquity(equityData, factoryRegulationData)).to.be.rejectedWith("NoInitialAdmins"); + }); + + it("GIVEN rbacs with only zero address as admin WHEN deploying equity THEN transaction fails", async () => { + const zeroAddressAdminRbacs: Rbac[] = [ + { + role: ATS_ROLES._DEFAULT_ADMIN_ROLE, + members: [ADDRESS_ZERO], // Only zero address + }, + ]; + + const equityData = { + security: getSecurityData(businessLogicResolver, { + rbacs: zeroAddressAdminRbacs, + }), + equityDetails: getEquityDetails(), + }; + equityData.security.resolverProxyConfiguration = { + key: EQUITY_CONFIG_ID, + version: 1, + }; + + const factoryRegulationData = getRegulationData(); + + await expect(factory.deployEquity(equityData, factoryRegulationData)).to.be.rejectedWith("NoInitialAdmins"); + }); + + it("GIVEN rbacs with multiple roles but no admin role WHEN deploying equity THEN transaction fails", async () => { + const noAdminRbacs: Rbac[] = [ + { + role: ATS_ROLES._CONTROL_LIST_ROLE, + members: [signer_A.address], + }, + { + role: ATS_ROLES._ISSUER_ROLE, + members: [signer_B.address], + }, + ]; + + const equityData = { + security: getSecurityData(businessLogicResolver, { + rbacs: noAdminRbacs, + }), + equityDetails: getEquityDetails(), + }; + equityData.security.resolverProxyConfiguration = { + key: EQUITY_CONFIG_ID, + version: 1, + }; + + const factoryRegulationData = getRegulationData(); + + await expect(factory.deployEquity(equityData, factoryRegulationData)).to.be.rejectedWith("NoInitialAdmins"); + }); + + it("GIVEN rbacs with admin role having zero address followed by valid address WHEN deploying equity THEN transaction succeeds", async () => { + const mixedAdminRbacs: Rbac[] = [ + { + role: ATS_ROLES._DEFAULT_ADMIN_ROLE, + members: [ADDRESS_ZERO, signer_A.address], // Zero address first, then valid address + }, + ]; + + const equityData = { + security: getSecurityData(businessLogicResolver, { + rbacs: mixedAdminRbacs, + }), + equityDetails: getEquityDetails(), + }; + equityData.security.resolverProxyConfiguration = { + key: EQUITY_CONFIG_ID, + version: 1, + }; + + const factoryRegulationData = getRegulationData(); + + await expect(factory.deployEquity(equityData, factoryRegulationData)).to.emit(factory, "EquityDeployed"); + }); + + it("GIVEN rbacs with non-admin roles followed by admin role WHEN deploying bond THEN transaction succeeds", async () => { + const orderedRbacs: Rbac[] = [ + { + role: ATS_ROLES._CONTROL_LIST_ROLE, + members: [signer_A.address], + }, + { + role: ATS_ROLES._ISSUER_ROLE, + members: [signer_B.address], + }, + { + role: ATS_ROLES._DEFAULT_ADMIN_ROLE, + members: [signer_A.address], + }, + ]; + + const bondData = { + security: getSecurityData(businessLogicResolver, { + rbacs: orderedRbacs, + }), + bondDetails: await getBondDetails(), + proceedRecipients: [], + proceedRecipientsData: [], + }; + bondData.security.resolverProxyConfiguration = { + key: BOND_CONFIG_ID, + version: 1, + }; + + const factoryRegulationData = getRegulationData(); + + await expect(factory.deployBond(bondData, factoryRegulationData)).to.emit(factory, "BondDeployed"); + }); + }); }); diff --git a/packages/ats/contracts/test/contracts/unit/factory/regulation.test.ts b/packages/ats/contracts/test/contracts/unit/factory/regulation.test.ts new file mode 100644 index 000000000..268b8c0b5 --- /dev/null +++ b/packages/ats/contracts/test/contracts/unit/factory/regulation.test.ts @@ -0,0 +1,364 @@ +import { expect } from "chai"; +import { ethers } from "hardhat"; +import { MockedRegulation } from "@contract-types"; + +describe("Regulation Tests", () => { + let regulationHelper: MockedRegulation; + + // Enum values + const RegulationType = { NONE: 0, REG_S: 1, REG_D: 2 }; + const RegulationSubType = { NONE: 0, REG_D_506_B: 1, REG_D_506_C: 2 }; + const AccreditedInvestors = { NONE: 0, ACCREDITATION_REQUIRED: 1 }; + const ManualInvestorVerification = { + NOTHING_TO_VERIFY: 0, + VERIFICATION_INVESTORS_FINANCIAL_DOCUMENTS_REQUIRED: 1, + }; + const InternationalInvestors = { NOT_ALLOWED: 0, ALLOWED: 1 }; + const ResaleHoldPeriod = { NOT_APPLICABLE: 0, APPLICABLE_FROM_6_MOTHS_TO_1_YEAR: 1 }; + + beforeEach(async () => { + const MockedRegulationFactory = await ethers.getContractFactory("MockedRegulation"); + regulationHelper = await MockedRegulationFactory.deploy(); + await regulationHelper.deployed(); + }); + + describe("buildRegulationData", () => { + it("GIVEN REG_S type WHEN buildRegulationData THEN returns correct REG_S data", async () => { + const result = await regulationHelper.testBuildRegulationData(RegulationType.REG_S, RegulationSubType.NONE); + + expect(result.regulationType).to.equal(RegulationType.REG_S); + expect(result.regulationSubType).to.equal(RegulationSubType.NONE); + expect(result.dealSize).to.equal(0); + expect(result.accreditedInvestors).to.equal(AccreditedInvestors.ACCREDITATION_REQUIRED); + expect(result.maxNonAccreditedInvestors).to.equal(0); + expect(result.manualInvestorVerification).to.equal( + ManualInvestorVerification.VERIFICATION_INVESTORS_FINANCIAL_DOCUMENTS_REQUIRED, + ); + expect(result.internationalInvestors).to.equal(InternationalInvestors.ALLOWED); + expect(result.resaleHoldPeriod).to.equal(ResaleHoldPeriod.NOT_APPLICABLE); + }); + + it("GIVEN REG_D 506_B type WHEN buildRegulationData THEN returns correct REG_D 506_B data", async () => { + const result = await regulationHelper.testBuildRegulationData( + RegulationType.REG_D, + RegulationSubType.REG_D_506_B, + ); + + expect(result.regulationType).to.equal(RegulationType.REG_D); + expect(result.regulationSubType).to.equal(RegulationSubType.REG_D_506_B); + expect(result.dealSize).to.equal(0); + expect(result.accreditedInvestors).to.equal(AccreditedInvestors.ACCREDITATION_REQUIRED); + expect(result.maxNonAccreditedInvestors).to.equal(35); + expect(result.manualInvestorVerification).to.equal( + ManualInvestorVerification.VERIFICATION_INVESTORS_FINANCIAL_DOCUMENTS_REQUIRED, + ); + expect(result.internationalInvestors).to.equal(InternationalInvestors.NOT_ALLOWED); + expect(result.resaleHoldPeriod).to.equal(ResaleHoldPeriod.APPLICABLE_FROM_6_MOTHS_TO_1_YEAR); + }); + + it("GIVEN REG_D 506_C type WHEN buildRegulationData THEN returns correct REG_D 506_C data", async () => { + const result = await regulationHelper.testBuildRegulationData( + RegulationType.REG_D, + RegulationSubType.REG_D_506_C, + ); + + expect(result.regulationType).to.equal(RegulationType.REG_D); + expect(result.regulationSubType).to.equal(RegulationSubType.REG_D_506_C); + expect(result.dealSize).to.equal(0); + expect(result.accreditedInvestors).to.equal(AccreditedInvestors.ACCREDITATION_REQUIRED); + expect(result.maxNonAccreditedInvestors).to.equal(0); + expect(result.manualInvestorVerification).to.equal( + ManualInvestorVerification.VERIFICATION_INVESTORS_FINANCIAL_DOCUMENTS_REQUIRED, + ); + expect(result.internationalInvestors).to.equal(InternationalInvestors.NOT_ALLOWED); + expect(result.resaleHoldPeriod).to.equal(ResaleHoldPeriod.APPLICABLE_FROM_6_MOTHS_TO_1_YEAR); + }); + }); + + describe("buildDealSize", () => { + it("GIVEN REG_S WHEN buildDealSize THEN returns REG_S deal size", async () => { + const result = await regulationHelper.testBuildDealSize(RegulationType.REG_S, RegulationSubType.NONE); + expect(result).to.equal(0); + }); + + it("GIVEN REG_D 506_B WHEN buildDealSize THEN returns REG_D 506_B deal size", async () => { + const result = await regulationHelper.testBuildDealSize(RegulationType.REG_D, RegulationSubType.REG_D_506_B); + expect(result).to.equal(0); + }); + + it("GIVEN REG_D 506_C WHEN buildDealSize THEN returns REG_D 506_C deal size", async () => { + const result = await regulationHelper.testBuildDealSize(RegulationType.REG_D, RegulationSubType.REG_D_506_C); + expect(result).to.equal(0); + }); + }); + + describe("buildAccreditedInvestors", () => { + it("GIVEN REG_S WHEN buildAccreditedInvestors THEN returns REG_S accredited investors", async () => { + const result = await regulationHelper.testBuildAccreditedInvestors(RegulationType.REG_S, RegulationSubType.NONE); + expect(result).to.equal(AccreditedInvestors.ACCREDITATION_REQUIRED); + }); + + it("GIVEN REG_D 506_B WHEN buildAccreditedInvestors THEN returns REG_D 506_B accredited investors", async () => { + const result = await regulationHelper.testBuildAccreditedInvestors( + RegulationType.REG_D, + RegulationSubType.REG_D_506_B, + ); + expect(result).to.equal(AccreditedInvestors.ACCREDITATION_REQUIRED); + }); + + it("GIVEN REG_D 506_C WHEN buildAccreditedInvestors THEN returns REG_D 506_C accredited investors", async () => { + const result = await regulationHelper.testBuildAccreditedInvestors( + RegulationType.REG_D, + RegulationSubType.REG_D_506_C, + ); + expect(result).to.equal(AccreditedInvestors.ACCREDITATION_REQUIRED); + }); + }); + + describe("buildMaxNonAccreditedInvestors", () => { + it("GIVEN REG_S WHEN buildMaxNonAccreditedInvestors THEN returns REG_S max non-accredited investors", async () => { + const result = await regulationHelper.testBuildMaxNonAccreditedInvestors( + RegulationType.REG_S, + RegulationSubType.NONE, + ); + expect(result).to.equal(0); + }); + + it("GIVEN REG_D 506_B WHEN buildMaxNonAccreditedInvestors THEN returns REG_D 506_B max non-accredited investors", async () => { + const result = await regulationHelper.testBuildMaxNonAccreditedInvestors( + RegulationType.REG_D, + RegulationSubType.REG_D_506_B, + ); + expect(result).to.equal(35); + }); + + it("GIVEN REG_D 506_C WHEN buildMaxNonAccreditedInvestors THEN returns REG_D 506_C max non-accredited investors", async () => { + const result = await regulationHelper.testBuildMaxNonAccreditedInvestors( + RegulationType.REG_D, + RegulationSubType.REG_D_506_C, + ); + expect(result).to.equal(0); + }); + }); + + describe("buildManualInvestorVerification", () => { + it("GIVEN REG_S WHEN buildManualInvestorVerification THEN returns REG_S manual investor verification", async () => { + const result = await regulationHelper.testBuildManualInvestorVerification( + RegulationType.REG_S, + RegulationSubType.NONE, + ); + expect(result).to.equal(ManualInvestorVerification.VERIFICATION_INVESTORS_FINANCIAL_DOCUMENTS_REQUIRED); + }); + + it("GIVEN REG_D 506_B WHEN buildManualInvestorVerification THEN returns REG_D 506_B manual investor verification", async () => { + const result = await regulationHelper.testBuildManualInvestorVerification( + RegulationType.REG_D, + RegulationSubType.REG_D_506_B, + ); + expect(result).to.equal(ManualInvestorVerification.VERIFICATION_INVESTORS_FINANCIAL_DOCUMENTS_REQUIRED); + }); + + it("GIVEN REG_D 506_C WHEN buildManualInvestorVerification THEN returns REG_D 506_C manual investor verification", async () => { + const result = await regulationHelper.testBuildManualInvestorVerification( + RegulationType.REG_D, + RegulationSubType.REG_D_506_C, + ); + expect(result).to.equal(ManualInvestorVerification.VERIFICATION_INVESTORS_FINANCIAL_DOCUMENTS_REQUIRED); + }); + }); + + describe("buildInternationalInvestors", () => { + it("GIVEN REG_S WHEN buildInternationalInvestors THEN returns REG_S international investors", async () => { + const result = await regulationHelper.testBuildInternationalInvestors( + RegulationType.REG_S, + RegulationSubType.NONE, + ); + expect(result).to.equal(InternationalInvestors.ALLOWED); + }); + + it("GIVEN REG_D 506_B WHEN buildInternationalInvestors THEN returns REG_D 506_B international investors", async () => { + const result = await regulationHelper.testBuildInternationalInvestors( + RegulationType.REG_D, + RegulationSubType.REG_D_506_B, + ); + expect(result).to.equal(InternationalInvestors.NOT_ALLOWED); + }); + + it("GIVEN REG_D 506_C WHEN buildInternationalInvestors THEN returns REG_D 506_C international investors", async () => { + const result = await regulationHelper.testBuildInternationalInvestors( + RegulationType.REG_D, + RegulationSubType.REG_D_506_C, + ); + expect(result).to.equal(InternationalInvestors.NOT_ALLOWED); + }); + }); + + describe("buildResaleHoldPeriod", () => { + it("GIVEN REG_S WHEN buildResaleHoldPeriod THEN returns REG_S resale hold period", async () => { + const result = await regulationHelper.testBuildResaleHoldPeriod(RegulationType.REG_S, RegulationSubType.NONE); + expect(result).to.equal(ResaleHoldPeriod.NOT_APPLICABLE); + }); + + it("GIVEN REG_D 506_B WHEN buildResaleHoldPeriod THEN returns REG_D 506_B resale hold period", async () => { + const result = await regulationHelper.testBuildResaleHoldPeriod( + RegulationType.REG_D, + RegulationSubType.REG_D_506_B, + ); + expect(result).to.equal(ResaleHoldPeriod.APPLICABLE_FROM_6_MOTHS_TO_1_YEAR); + }); + + it("GIVEN REG_D 506_C WHEN buildResaleHoldPeriod THEN returns REG_D 506_C resale hold period", async () => { + const result = await regulationHelper.testBuildResaleHoldPeriod( + RegulationType.REG_D, + RegulationSubType.REG_D_506_C, + ); + expect(result).to.equal(ResaleHoldPeriod.APPLICABLE_FROM_6_MOTHS_TO_1_YEAR); + }); + }); + + describe("checkRegulationTypeAndSubType", () => { + it("GIVEN valid REG_S type and NONE subtype WHEN checkRegulationTypeAndSubType THEN does not revert", async () => { + await expect(regulationHelper.testCheckRegulationTypeAndSubType(RegulationType.REG_S, RegulationSubType.NONE)).to + .not.be.reverted; + }); + + it("GIVEN valid REG_D type and 506_B subtype WHEN checkRegulationTypeAndSubType THEN does not revert", async () => { + await expect( + regulationHelper.testCheckRegulationTypeAndSubType(RegulationType.REG_D, RegulationSubType.REG_D_506_B), + ).to.not.be.reverted; + }); + + it("GIVEN valid REG_D type and 506_C subtype WHEN checkRegulationTypeAndSubType THEN does not revert", async () => { + await expect( + regulationHelper.testCheckRegulationTypeAndSubType(RegulationType.REG_D, RegulationSubType.REG_D_506_C), + ).to.not.be.reverted; + }); + + it("GIVEN invalid REG_S type and non-NONE subtype WHEN checkRegulationTypeAndSubType THEN reverts", async () => { + await expect( + regulationHelper.testCheckRegulationTypeAndSubType(RegulationType.REG_S, RegulationSubType.REG_D_506_B), + ).to.be.revertedWithCustomError(regulationHelper, "RegulationTypeAndSubTypeForbidden"); + }); + + it("GIVEN invalid REG_D type and NONE subtype WHEN checkRegulationTypeAndSubType THEN reverts", async () => { + await expect( + regulationHelper.testCheckRegulationTypeAndSubType(RegulationType.REG_D, RegulationSubType.NONE), + ).to.be.revertedWithCustomError(regulationHelper, "RegulationTypeAndSubTypeForbidden"); + }); + + it("GIVEN invalid NONE type WHEN checkRegulationTypeAndSubType THEN reverts", async () => { + await expect( + regulationHelper.testCheckRegulationTypeAndSubType(RegulationType.NONE, RegulationSubType.NONE), + ).to.be.revertedWithCustomError(regulationHelper, "RegulationTypeAndSubTypeForbidden"); + }); + }); + + describe("isValidTypeAndSubType", () => { + it("GIVEN valid REG_S and NONE WHEN isValidTypeAndSubType THEN returns true", async () => { + const result = await regulationHelper.testIsValidTypeAndSubType(RegulationType.REG_S, RegulationSubType.NONE); + expect(result).to.be.true; + }); + + it("GIVEN valid REG_D and 506_B WHEN isValidTypeAndSubType THEN returns true", async () => { + const result = await regulationHelper.testIsValidTypeAndSubType( + RegulationType.REG_D, + RegulationSubType.REG_D_506_B, + ); + expect(result).to.be.true; + }); + + it("GIVEN valid REG_D and 506_C WHEN isValidTypeAndSubType THEN returns true", async () => { + const result = await regulationHelper.testIsValidTypeAndSubType( + RegulationType.REG_D, + RegulationSubType.REG_D_506_C, + ); + expect(result).to.be.true; + }); + + it("GIVEN invalid REG_S and 506_B WHEN isValidTypeAndSubType THEN returns false", async () => { + const result = await regulationHelper.testIsValidTypeAndSubType( + RegulationType.REG_S, + RegulationSubType.REG_D_506_B, + ); + expect(result).to.be.false; + }); + + it("GIVEN invalid REG_D and NONE WHEN isValidTypeAndSubType THEN returns false", async () => { + const result = await regulationHelper.testIsValidTypeAndSubType(RegulationType.REG_D, RegulationSubType.NONE); + expect(result).to.be.false; + }); + + it("GIVEN invalid NONE types WHEN isValidTypeAndSubType THEN returns false", async () => { + const result = await regulationHelper.testIsValidTypeAndSubType(RegulationType.NONE, RegulationSubType.NONE); + expect(result).to.be.false; + }); + }); + + describe("isValidTypeAndSubTypeForRegS", () => { + it("GIVEN valid REG_S and NONE WHEN isValidTypeAndSubTypeForRegS THEN returns true", async () => { + const result = await regulationHelper.testIsValidTypeAndSubTypeForRegS( + RegulationType.REG_S, + RegulationSubType.NONE, + ); + expect(result).to.be.true; + }); + + it("GIVEN invalid REG_S and non-NONE WHEN isValidTypeAndSubTypeForRegS THEN returns false", async () => { + const result = await regulationHelper.testIsValidTypeAndSubTypeForRegS( + RegulationType.REG_S, + RegulationSubType.REG_D_506_B, + ); + expect(result).to.be.false; + }); + + it("GIVEN invalid REG_D WHEN isValidTypeAndSubTypeForRegS THEN returns false", async () => { + const result = await regulationHelper.testIsValidTypeAndSubTypeForRegS( + RegulationType.REG_D, + RegulationSubType.REG_D_506_B, + ); + expect(result).to.be.false; + }); + }); + + describe("isValidTypeAndSubTypeForRegD", () => { + it("GIVEN valid REG_D and 506_B WHEN isValidTypeAndSubTypeForRegD THEN returns true", async () => { + const result = await regulationHelper.testIsValidTypeAndSubTypeForRegD( + RegulationType.REG_D, + RegulationSubType.REG_D_506_B, + ); + expect(result).to.be.true; + }); + + it("GIVEN valid REG_D and 506_C WHEN isValidTypeAndSubTypeForRegD THEN returns true", async () => { + const result = await regulationHelper.testIsValidTypeAndSubTypeForRegD( + RegulationType.REG_D, + RegulationSubType.REG_D_506_C, + ); + expect(result).to.be.true; + }); + + it("GIVEN invalid REG_D and NONE WHEN isValidTypeAndSubTypeForRegD THEN returns false", async () => { + const result = await regulationHelper.testIsValidTypeAndSubTypeForRegD( + RegulationType.REG_D, + RegulationSubType.NONE, + ); + expect(result).to.be.false; + }); + + it("GIVEN invalid REG_S WHEN isValidTypeAndSubTypeForRegD THEN returns false", async () => { + const result = await regulationHelper.testIsValidTypeAndSubTypeForRegD( + RegulationType.REG_S, + RegulationSubType.NONE, + ); + expect(result).to.be.false; + }); + + it("GIVEN invalid NONE type WHEN isValidTypeAndSubTypeForRegD THEN returns false", async () => { + const result = await regulationHelper.testIsValidTypeAndSubTypeForRegD( + RegulationType.NONE, + RegulationSubType.NONE, + ); + expect(result).to.be.false; + }); + }); +}); diff --git a/packages/ats/contracts/test/contracts/unit/factory/trex/factory.test.ts b/packages/ats/contracts/test/contracts/unit/factory/trex/factory.test.ts index 116efabdf..d2ff0c574 100644 --- a/packages/ats/contracts/test/contracts/unit/factory/trex/factory.test.ts +++ b/packages/ats/contracts/test/contracts/unit/factory/trex/factory.test.ts @@ -98,6 +98,12 @@ describe("TREX Factory Tests", () => { await loadFixture(deployTrexSuiteFixture); }); + describe("Disabled deployTREXSuite", () => { + it("GIVEN any parameters WHEN calling deployTREXSuite THEN it does nothing (disabled)", async () => { + await factoryAts.connect(deployer).deployTREXSuite("test-salt", tokenDetails, claimDetails); + }); + }); + describe("Equity tests", () => { it("GIVEN a consumed salt WHEN reusing it THEN transaction reverts with token already deployed", async () => { const equityData = { @@ -321,6 +327,468 @@ describe("TREX Factory Tests", () => { const suiteDetails = await factoryAts.getToken("salt-equity"); expect(suiteDetails).to.not.equal(ADDRESS_ZERO); }); + + it("GIVEN rbacs with existing TREX_OWNER_ROLE matching tRexOwner WHEN deploying equity THEN SecurityDeploymentLib handles owner match", async () => { + const equityData = { + security: getSecurityData(businessLogicResolver, { + rbacs: [ + { + role: ATS_ROLES._TREX_OWNER_ROLE, + members: [deployer.address], + }, + { + role: ATS_ROLES._DEFAULT_ADMIN_ROLE, + members: [deployer.address], + }, + ], + }), + equityDetails: getEquityDetails(), + }; + equityData.security.resolverProxyConfiguration = { + key: EQUITY_CONFIG_ID, + version: 1, + }; + + tokenDetails.owner = deployer.address; + const factoryRegulationData = getRegulationData(); + + const deploymentResult = await factoryAts + .connect(deployer) + .deployTREXSuiteAtsEquity( + "salt-equity-owner-match", + tokenDetails, + claimDetails, + equityData, + factoryRegulationData, + ); + + const deploymentReceipt = await deploymentResult.wait(); + + const trexSuiteDeployedEvent = deploymentReceipt.events?.find((event) => event.event === "TREXSuiteDeployed"); + expect(trexSuiteDeployedEvent).to.not.be.undefined; + }); + + it("GIVEN compliance modules with settings WHEN deploying equity THEN TREXBaseDeploymentLib handles compliance settings", async () => { + const equityData = { + security: getSecurityData(businessLogicResolver, { + rbacs: init_rbacs, + }), + equityDetails: getEquityDetails(), + }; + equityData.security.resolverProxyConfiguration = { + key: EQUITY_CONFIG_ID, + version: 1, + }; + + const factoryRegulationData = getRegulationData(); + + // Deploy a real compliance module contract + const MockComplianceModule = await ethers.getContractFactory("MockComplianceModule"); + const complianceModule = await MockComplianceModule.deploy(); + await complianceModule.deployed(); + + // Encode the setConfig function call with value 100 + const setConfigData = complianceModule.interface.encodeFunctionData("setConfig", [100]); + + tokenDetails.complianceModules = [complianceModule.address]; + tokenDetails.complianceSettings = [setConfigData]; + + const deploymentResult = await factoryAts + .connect(deployer) + .deployTREXSuiteAtsEquity( + "salt-equity-compliance", + tokenDetails, + claimDetails, + equityData, + factoryRegulationData, + ); + + const deploymentReceipt = await deploymentResult.wait(); + + const trexSuiteDeployedEvent = deploymentReceipt.events?.find((event) => event.event === "TREXSuiteDeployed"); + expect(trexSuiteDeployedEvent).to.not.be.undefined; + + // Reset for next tests + tokenDetails.complianceModules = []; + tokenDetails.complianceSettings = []; + }); + + it("GIVEN rbacs with TREX_OWNER_ROLE but different member WHEN deploying equity THEN owner is added to rbacs", async () => { + const [, , , , , otherUser] = await ethers.getSigners(); + const rbacWithDifferentOwner = [ + { + role: ATS_ROLES._TREX_OWNER_ROLE, + members: [otherUser.address], + }, + ]; + + const equityData = { + security: getSecurityData(businessLogicResolver, { + rbacs: rbacWithDifferentOwner, + }), + equityDetails: getEquityDetails(), + }; + equityData.security.resolverProxyConfiguration = { + key: EQUITY_CONFIG_ID, + version: 1, + }; + + const factoryRegulationData = getRegulationData(); + + const deploymentResult = await factoryAts + .connect(deployer) + .deployTREXSuiteAtsEquity( + "salt-equity-diff-owner", + tokenDetails, + claimDetails, + equityData, + factoryRegulationData, + ); + + const deploymentReceipt = await deploymentResult.wait(); + const trexSuiteDeployedEvent = deploymentReceipt.events?.find((event) => event.event === "TREXSuiteDeployed"); + expect(trexSuiteDeployedEvent).to.not.be.undefined; + }); + + it("GIVEN existing compliance address WHEN deploying equity THEN uses existing compliance", async () => { + // Deploy compliance proxy WITHOUT initializing - let factory use it as-is + const ModularComplianceProxy = await ethers.getContractFactory("ModularComplianceProxy"); + const compliance = await ModularComplianceProxy.deploy( + trexDeployment.authorities.trexImplementationAuthority.address, + ); + await compliance.deployed(); + + // Transfer ownership to factory so it can manage the uninitialized compliance + const complianceContract = await ethers.getContractAt("ModularCompliance", compliance.address); + await complianceContract.transferOwnership(factoryAts.address); + + const equityData = { + security: getSecurityData(businessLogicResolver, { + rbacs: init_rbacs, + compliance: compliance.address, + }), + equityDetails: getEquityDetails(), + }; + equityData.security.resolverProxyConfiguration = { + key: EQUITY_CONFIG_ID, + version: 1, + }; + + const factoryRegulationData = getRegulationData(); + + const deploymentResult = await factoryAts + .connect(deployer) + .deployTREXSuiteAtsEquity( + "salt-equity-existing-compliance", + tokenDetails, + claimDetails, + equityData, + factoryRegulationData, + ); + + const deploymentReceipt = await deploymentResult.wait(); + const trexSuiteDeployedEvent = deploymentReceipt.events?.find((event) => event.event === "TREXSuiteDeployed"); + expect(trexSuiteDeployedEvent).to.not.be.undefined; + }); + + it("GIVEN existing IRS address in tokenDetails WHEN deploying equity THEN uses existing IRS", async () => { + // Deploy IRS proxy WITHOUT initializing - let factory use it as-is + const IdentityRegistryStorageProxy = await ethers.getContractFactory("IdentityRegistryStorageProxy"); + const irs = await IdentityRegistryStorageProxy.deploy( + trexDeployment.authorities.trexImplementationAuthority.address, + ); + await irs.deployed(); + + // Transfer ownership to factory so it can bind the identity registry + const irsContract = await ethers.getContractAt("IdentityRegistryStorage", irs.address); + await irsContract.transferOwnership(factoryAts.address); + + tokenDetails.irs = irs.address; + + const equityData = { + security: getSecurityData(businessLogicResolver, { + rbacs: init_rbacs, + }), + equityDetails: getEquityDetails(), + }; + equityData.security.resolverProxyConfiguration = { + key: EQUITY_CONFIG_ID, + version: 1, + }; + + const factoryRegulationData = getRegulationData(); + + const deploymentResult = await factoryAts + .connect(deployer) + .deployTREXSuiteAtsEquity( + "salt-equity-existing-irs", + tokenDetails, + claimDetails, + equityData, + factoryRegulationData, + ); + + const deploymentReceipt = await deploymentResult.wait(); + const trexSuiteDeployedEvent = deploymentReceipt.events?.find((event) => event.event === "TREXSuiteDeployed"); + expect(trexSuiteDeployedEvent).to.not.be.undefined; + + // Reset for next tests + tokenDetails.irs = ethers.constants.AddressZero; + }); + + it("GIVEN existing identity registry WHEN deploying equity THEN uses existing IR", async () => { + // First deploy a complete TREX suite to get a valid IR + const equityDataFirst = { + security: getSecurityData(businessLogicResolver, { + rbacs: init_rbacs, + }), + equityDetails: getEquityDetails(), + }; + equityDataFirst.security.resolverProxyConfiguration = { + key: EQUITY_CONFIG_ID, + version: 1, + }; + + const factoryRegulationData = getRegulationData(); + + const firstDeployment = await factoryAts + .connect(deployer) + .deployTREXSuiteAtsEquity( + "salt-equity-first-for-ir", + tokenDetails, + claimDetails, + equityDataFirst, + factoryRegulationData, + ); + + await firstDeployment.wait(); + + // Get the token address from factory and query its IR + const firstToken = await factoryAts.getToken("salt-equity-first-for-ir"); + const firstTokenContract = await ethers.getContractAt("IERC3643", firstToken); + const firstIR = await firstTokenContract.identityRegistry(); + + // Verify firstIR is valid + expect(firstIR).to.not.equal(ethers.constants.AddressZero); + expect(firstIR).to.not.be.undefined; + + // Transfer ownership of the IR and its components to factory so they can be reused + const firstIRContract = await ethers.getContractAt("OwnableUpgradeable", firstIR); + await firstIRContract.connect(deployer).transferOwnership(factoryAts.address); + + // Get TIR and CTR from the IR and transfer their ownership too + const ir = await ethers.getContractAt( + "@tokenysolutions/t-rex/contracts/registry/interface/IIdentityRegistry.sol:IIdentityRegistry", + firstIR, + ); + const tirAddress = await ir.issuersRegistry(); + const ctrAddress = await ir.topicsRegistry(); + const irsAddress = await ir.identityStorage(); + const tirContract = await ethers.getContractAt("OwnableUpgradeable", tirAddress); + const ctrContract = await ethers.getContractAt("OwnableUpgradeable", ctrAddress); + const irsContract = await ethers.getContractAt("OwnableUpgradeable", irsAddress); + await tirContract.connect(deployer).transferOwnership(factoryAts.address); + await ctrContract.connect(deployer).transferOwnership(factoryAts.address); + await irsContract.connect(deployer).transferOwnership(factoryAts.address); + + // Create tokenDetails for second deployment with empty irAgents + // since the IR already has its agents configured + const tokenDetailsExistingIR = { + ...tokenDetails, + irAgents: [], // Don't add agents since IR already has them + }; + + // Now deploy with existing IR + const equityData = { + security: getSecurityData(businessLogicResolver, { + rbacs: init_rbacs, + identityRegistry: firstIR, + }), + equityDetails: getEquityDetails(), + }; + equityData.security.resolverProxyConfiguration = { + key: EQUITY_CONFIG_ID, + version: 1, + }; + + const deploymentResult = await factoryAts + .connect(deployer) + .deployTREXSuiteAtsEquity( + "salt-equity-existing-ir", + tokenDetailsExistingIR, + claimDetails, + equityData, + factoryRegulationData, + ); + + const deploymentReceipt = await deploymentResult.wait(); + const trexSuiteDeployedEvent = deploymentReceipt.events?.find((event) => event.event === "TREXSuiteDeployed"); + + // Verify the event was emitted + expect(trexSuiteDeployedEvent).to.not.be.undefined; + }); + + it("GIVEN existing ONCHAINID in tokenDetails WHEN deploying equity THEN uses existing token ID", async () => { + // Create an identity first + const identity = await ethers.deployContract("Identity", [deployer.address, true]); + await identity.deployed(); + + tokenDetails.ONCHAINID = identity.address; + + const equityData = { + security: getSecurityData(businessLogicResolver, { + rbacs: init_rbacs, + }), + equityDetails: getEquityDetails(), + }; + equityData.security.resolverProxyConfiguration = { + key: EQUITY_CONFIG_ID, + version: 1, + }; + + const factoryRegulationData = getRegulationData(); + + const deploymentResult = await factoryAts + .connect(deployer) + .deployTREXSuiteAtsEquity( + "salt-equity-existing-onchainid", + tokenDetails, + claimDetails, + equityData, + factoryRegulationData, + ); + + const deploymentReceipt = await deploymentResult.wait(); + const trexSuiteDeployedEvent = deploymentReceipt.events?.find((event) => event.event === "TREXSuiteDeployed"); + expect(trexSuiteDeployedEvent).to.not.be.undefined; + + // Reset for next tests + tokenDetails.ONCHAINID = ethers.constants.AddressZero; + }); + + it("GIVEN more modules than settings WHEN deploying equity THEN handles modules without settings", async () => { + const MockComplianceModule = await ethers.getContractFactory("MockComplianceModule"); + const module1 = await MockComplianceModule.deploy(); + await module1.deployed(); + const module2 = await MockComplianceModule.deploy(); + await module2.deployed(); + + // Only one setting for two modules + const setConfigData = module1.interface.encodeFunctionData("setConfig", [100]); + + tokenDetails.complianceModules = [module1.address, module2.address]; + tokenDetails.complianceSettings = [setConfigData]; // Only one setting + + const equityData = { + security: getSecurityData(businessLogicResolver, { + rbacs: init_rbacs, + }), + equityDetails: getEquityDetails(), + }; + equityData.security.resolverProxyConfiguration = { + key: EQUITY_CONFIG_ID, + version: 1, + }; + + const factoryRegulationData = getRegulationData(); + + const deploymentResult = await factoryAts + .connect(deployer) + .deployTREXSuiteAtsEquity( + "salt-equity-partial-settings", + tokenDetails, + claimDetails, + equityData, + factoryRegulationData, + ); + + const deploymentReceipt = await deploymentResult.wait(); + const trexSuiteDeployedEvent = deploymentReceipt.events?.find((event) => event.event === "TREXSuiteDeployed"); + expect(trexSuiteDeployedEvent).to.not.be.undefined; + + // Reset for next tests + tokenDetails.complianceModules = []; + tokenDetails.complianceSettings = []; + }); + + it("GIVEN claim topics WHEN deploying equity THEN adds claim topics to CTR", async () => { + const equityData = { + security: getSecurityData(businessLogicResolver, { + rbacs: init_rbacs, + }), + equityDetails: getEquityDetails(), + }; + equityData.security.resolverProxyConfiguration = { + key: EQUITY_CONFIG_ID, + version: 1, + }; + + const factoryRegulationData = getRegulationData(); + + // Add claim topics to test line 88 + claimDetails.claimTopics = [1, 2, 3]; + + const deploymentResult = await factoryAts + .connect(deployer) + .deployTREXSuiteAtsEquity( + "salt-equity-with-claim-topics", + tokenDetails, + claimDetails, + equityData, + factoryRegulationData, + ); + + const deploymentReceipt = await deploymentResult.wait(); + const trexSuiteDeployedEvent = deploymentReceipt.events?.find((event) => event.event === "TREXSuiteDeployed"); + expect(trexSuiteDeployedEvent).to.not.be.undefined; + + // Reset for next tests + claimDetails.claimTopics = []; + }); + + it("GIVEN trusted issuers WHEN deploying equity THEN adds issuers to TIR", async () => { + const equityData = { + security: getSecurityData(businessLogicResolver, { + rbacs: init_rbacs, + }), + equityDetails: getEquityDetails(), + }; + equityData.security.resolverProxyConfiguration = { + key: EQUITY_CONFIG_ID, + version: 1, + }; + + const factoryRegulationData = getRegulationData(); + + // Deploy claim issuer for testing line 91 + const ClaimIssuer = await ethers.getContractFactory("ClaimIssuer"); + const claimIssuer = await ClaimIssuer.deploy(deployer.address); + await claimIssuer.deployed(); + + // Add claim topics and issuer + claimDetails.claimTopics = [1]; + claimDetails.issuers = [claimIssuer.address]; + claimDetails.issuerClaims = [[1]]; + + const deploymentResult = await factoryAts + .connect(deployer) + .deployTREXSuiteAtsEquity( + "salt-equity-with-issuers", + tokenDetails, + claimDetails, + equityData, + factoryRegulationData, + ); + + const deploymentReceipt = await deploymentResult.wait(); + const trexSuiteDeployedEvent = deploymentReceipt.events?.find((event) => event.event === "TREXSuiteDeployed"); + expect(trexSuiteDeployedEvent).to.not.be.undefined; + + // Reset for next tests + claimDetails.claimTopics = []; + claimDetails.issuers = []; + claimDetails.issuerClaims = []; + }); }); describe("Bond tests", () => { @@ -487,7 +955,7 @@ describe("TREX Factory Tests", () => { ).to.be.revertedWith("max 30 module actions at deployment"); }); - it("GIVEN correct data WHEN deploying bond THEN deployment succeeds and events are emitted", async () => { + it("GIVEN more compliance settings than modules WHEN deploying bond THEN reverts with invalid compliance pattern", async () => { const bondData = { security: getSecurityData(businessLogicResolver, { rbacs: init_rbacs, @@ -503,11 +971,112 @@ describe("TREX Factory Tests", () => { const factoryRegulationData = getRegulationData(); - const deploymentResult = await factoryAts - .connect(deployer) - .deployTREXSuiteAtsBond("salt-bond", tokenDetails, claimDetails, bondData, factoryRegulationData); - - const deploymentReceipt = await deploymentResult.wait(); + // Create 2 modules but 3 settings (more settings than modules) + const mockModule1 = ethers.Wallet.createRandom().address; + const mockModule2 = ethers.Wallet.createRandom().address; + tokenDetails.complianceModules = [mockModule1, mockModule2]; + tokenDetails.complianceSettings = [ + "0x1234000000000000000000000000000000000000000000000000000000000000", + "0x5678000000000000000000000000000000000000000000000000000000000000", + "0x9abc000000000000000000000000000000000000000000000000000000000000", + ]; + + await expect( + factoryAts + .connect(deployer) + .deployTREXSuiteAtsBond("salt-bond-invalid", tokenDetails, claimDetails, bondData, factoryRegulationData), + ).to.be.revertedWith("invalid compliance pattern"); + }); + + it("GIVEN module already bound WHEN deploying bond THEN skips adding duplicate module", async () => { + const bondData = { + security: getSecurityData(businessLogicResolver, { + rbacs: init_rbacs, + }), + bondDetails: await getBondDetails(), + proceedRecipients: [], + proceedRecipientsData: [], + }; + bondData.security.resolverProxyConfiguration = { + key: BOND_CONFIG_ID, + version: 1, + }; + + const factoryRegulationData = getRegulationData(); + + // Deploy first bond with a module + const mockModule = await (await ethers.getContractFactory("MockComplianceModule")).deploy(); + tokenDetails.complianceModules = [mockModule.address]; + tokenDetails.complianceSettings = []; + + await factoryAts + .connect(deployer) + .deployTREXSuiteAtsBond("salt-bond-first-module", tokenDetails, claimDetails, bondData, factoryRegulationData); + + const firstToken = await factoryAts.getToken("salt-bond-first-module"); + const firstTokenContract = await ethers.getContractAt("IERC3643", firstToken); + const compliance = await firstTokenContract.compliance(); + + // Transfer compliance ownership to factory so it can be reused + const complianceContract = await ethers.getContractAt("OwnableUpgradeable", compliance); + await complianceContract.connect(deployer).transferOwnership(factoryAts.address); + + // Now deploy second bond reusing the same compliance and same module + const secondBondData = { + security: getSecurityData(businessLogicResolver, { + rbacs: init_rbacs, + compliance: compliance, // Reuse existing compliance + }), + bondDetails: await getBondDetails(), + proceedRecipients: [], + proceedRecipientsData: [], + }; + secondBondData.security.resolverProxyConfiguration = { + key: BOND_CONFIG_ID, + version: 1, + }; + + // Try to add the same module again - it should be skipped since already bound + await factoryAts + .connect(deployer) + .deployTREXSuiteAtsBond( + "salt-bond-second-module", + tokenDetails, + claimDetails, + secondBondData, + factoryRegulationData, + ); + + const secondToken = await factoryAts.getToken("salt-bond-second-module"); + expect(secondToken).to.not.equal(ADDRESS_ZERO); + + // Verify both tokens use same compliance + const secondTokenContract = await ethers.getContractAt("IERC3643", secondToken); + const secondCompliance = await secondTokenContract.compliance(); + expect(secondCompliance).to.equal(compliance); + }); + + it("GIVEN correct data WHEN deploying bond THEN deployment succeeds and events are emitted", async () => { + const bondData = { + security: getSecurityData(businessLogicResolver, { + rbacs: init_rbacs, + }), + bondDetails: await getBondDetails(), + proceedRecipients: [], + proceedRecipientsData: [], + }; + bondData.security.resolverProxyConfiguration = { + key: BOND_CONFIG_ID, + version: 1, + }; + + const factoryRegulationData = getRegulationData(); + + const deploymentResult = await factoryAts + .connect(deployer) + .deployTREXSuiteAtsBond("salt-bond", tokenDetails, claimDetails, bondData, factoryRegulationData); + + const deploymentReceipt = await deploymentResult.wait(); const trexSuiteDeployedEvent = deploymentReceipt.events?.find((event) => event.event === "TREXSuiteDeployed"); expect(trexSuiteDeployedEvent).to.not.be.undefined; @@ -544,5 +1113,521 @@ describe("TREX Factory Tests", () => { const suiteDetails = await factoryAts.getToken("salt-bond"); expect(suiteDetails).to.not.equal(ADDRESS_ZERO); }); + + it("GIVEN rbacs with existing TREX_OWNER_ROLE matching tRexOwner WHEN deploying bond THEN SecurityDeploymentLib handles owner match", async () => { + const bondData = { + security: getSecurityData(businessLogicResolver, { + rbacs: [ + { + role: ATS_ROLES._TREX_OWNER_ROLE, + members: [deployer.address], + }, + { + role: ATS_ROLES._DEFAULT_ADMIN_ROLE, + members: [deployer.address], + }, + ], + }), + bondDetails: await getBondDetails(), + proceedRecipients: [], + proceedRecipientsData: [], + }; + bondData.security.resolverProxyConfiguration = { + key: BOND_CONFIG_ID, + version: 1, + }; + + tokenDetails.owner = deployer.address; + const factoryRegulationData = getRegulationData(); + + const deploymentResult = await factoryAts + .connect(deployer) + .deployTREXSuiteAtsBond("salt-bond-owner-match", tokenDetails, claimDetails, bondData, factoryRegulationData); + + const deploymentReceipt = await deploymentResult.wait(); + + const trexSuiteDeployedEvent = deploymentReceipt.events?.find((event) => event.event === "TREXSuiteDeployed"); + expect(trexSuiteDeployedEvent).to.not.be.undefined; + }); + + it("GIVEN compliance modules with settings WHEN deploying bond THEN TREXBaseDeploymentLib handles compliance settings", async () => { + const bondData = { + security: getSecurityData(businessLogicResolver, { + rbacs: init_rbacs, + }), + bondDetails: await getBondDetails(), + proceedRecipients: [], + proceedRecipientsData: [], + }; + bondData.security.resolverProxyConfiguration = { + key: BOND_CONFIG_ID, + version: 1, + }; + + const factoryRegulationData = getRegulationData(); + + // Deploy a real compliance module contract + const MockComplianceModule = await ethers.getContractFactory("MockComplianceModule"); + const complianceModule = await MockComplianceModule.deploy(); + await complianceModule.deployed(); + + // Encode the setConfig function call with value 100 + const setConfigData = complianceModule.interface.encodeFunctionData("setConfig", [100]); + + tokenDetails.complianceModules = [complianceModule.address]; + tokenDetails.complianceSettings = [setConfigData]; + + const deploymentResult = await factoryAts + .connect(deployer) + .deployTREXSuiteAtsBond("salt-bond-compliance", tokenDetails, claimDetails, bondData, factoryRegulationData); + + const deploymentReceipt = await deploymentResult.wait(); + + const trexSuiteDeployedEvent = deploymentReceipt.events?.find((event) => event.event === "TREXSuiteDeployed"); + expect(trexSuiteDeployedEvent).to.not.be.undefined; + + // Reset for next tests + tokenDetails.complianceModules = []; + tokenDetails.complianceSettings = []; + }); + + it("GIVEN rbacs with TREX_OWNER_ROLE but different member WHEN deploying bond THEN owner is added to rbacs", async () => { + const [, , , , , otherUser] = await ethers.getSigners(); + const rbacWithDifferentOwner = [ + { + role: ATS_ROLES._TREX_OWNER_ROLE, + members: [otherUser.address], + }, + ]; + + const bondData = { + security: getSecurityData(businessLogicResolver, { + rbacs: rbacWithDifferentOwner, + }), + bondDetails: await getBondDetails(), + proceedRecipients: [], + proceedRecipientsData: [], + }; + bondData.security.resolverProxyConfiguration = { + key: BOND_CONFIG_ID, + version: 1, + }; + + const factoryRegulationData = getRegulationData(); + + const deploymentResult = await factoryAts + .connect(deployer) + .deployTREXSuiteAtsBond("salt-bond-diff-owner", tokenDetails, claimDetails, bondData, factoryRegulationData); + + const deploymentReceipt = await deploymentResult.wait(); + const trexSuiteDeployedEvent = deploymentReceipt.events?.find((event) => event.event === "TREXSuiteDeployed"); + expect(trexSuiteDeployedEvent).to.not.be.undefined; + }); + + it("GIVEN existing compliance address WHEN deploying bond THEN uses existing compliance", async () => { + // Deploy compliance proxy WITHOUT initializing - let factory use it as-is + const ModularComplianceProxy = await ethers.getContractFactory("ModularComplianceProxy"); + const compliance = await ModularComplianceProxy.deploy( + trexDeployment.authorities.trexImplementationAuthority.address, + ); + await compliance.deployed(); + + // Transfer ownership to factory so it can manage the uninitialized compliance + const complianceContract = await ethers.getContractAt("ModularCompliance", compliance.address); + await complianceContract.transferOwnership(factoryAts.address); + + const bondData = { + security: getSecurityData(businessLogicResolver, { + rbacs: init_rbacs, + compliance: compliance.address, + }), + bondDetails: await getBondDetails(), + proceedRecipients: [], + proceedRecipientsData: [], + }; + bondData.security.resolverProxyConfiguration = { + key: BOND_CONFIG_ID, + version: 1, + }; + + const factoryRegulationData = getRegulationData(); + + const deploymentResult = await factoryAts + .connect(deployer) + .deployTREXSuiteAtsBond( + "salt-bond-existing-compliance", + tokenDetails, + claimDetails, + bondData, + factoryRegulationData, + ); + + const deploymentReceipt = await deploymentResult.wait(); + const trexSuiteDeployedEvent = deploymentReceipt.events?.find((event) => event.event === "TREXSuiteDeployed"); + expect(trexSuiteDeployedEvent).to.not.be.undefined; + }); + + it("GIVEN existing IRS address in tokenDetails WHEN deploying bond THEN uses existing IRS", async () => { + // Deploy IRS proxy WITHOUT initializing - let factory use it as-is + const IdentityRegistryStorageProxy = await ethers.getContractFactory("IdentityRegistryStorageProxy"); + const irs = await IdentityRegistryStorageProxy.deploy( + trexDeployment.authorities.trexImplementationAuthority.address, + ); + await irs.deployed(); + + // Transfer ownership to factory so it can bind the identity registry + const irsContract = await ethers.getContractAt("IdentityRegistryStorage", irs.address); + await irsContract.transferOwnership(factoryAts.address); + + tokenDetails.irs = irs.address; + + const bondData = { + security: getSecurityData(businessLogicResolver, { + rbacs: init_rbacs, + }), + bondDetails: await getBondDetails(), + proceedRecipients: [], + proceedRecipientsData: [], + }; + bondData.security.resolverProxyConfiguration = { + key: BOND_CONFIG_ID, + version: 1, + }; + + const factoryRegulationData = getRegulationData(); + + const deploymentResult = await factoryAts + .connect(deployer) + .deployTREXSuiteAtsBond("salt-bond-existing-irs", tokenDetails, claimDetails, bondData, factoryRegulationData); + + const deploymentReceipt = await deploymentResult.wait(); + const trexSuiteDeployedEvent = deploymentReceipt.events?.find((event) => event.event === "TREXSuiteDeployed"); + expect(trexSuiteDeployedEvent).to.not.be.undefined; + + // Reset for next tests + tokenDetails.irs = ethers.constants.AddressZero; + }); + + it("GIVEN existing identity registry WHEN deploying bond THEN uses existing IR", async () => { + // First deploy a complete TREX suite to get a valid IR + const bondDataFirst = { + security: getSecurityData(businessLogicResolver, { + rbacs: init_rbacs, + }), + bondDetails: await getBondDetails(), + proceedRecipients: [], + proceedRecipientsData: [], + }; + bondDataFirst.security.resolverProxyConfiguration = { + key: BOND_CONFIG_ID, + version: 1, + }; + + const factoryRegulationData = getRegulationData(); + + const firstDeployment = await factoryAts + .connect(deployer) + .deployTREXSuiteAtsBond( + "salt-bond-first-for-ir", + tokenDetails, + claimDetails, + bondDataFirst, + factoryRegulationData, + ); + + await firstDeployment.wait(); + + // Get the token address from factory and query its IR + const firstToken = await factoryAts.getToken("salt-bond-first-for-ir"); + const firstTokenContract = await ethers.getContractAt("IERC3643", firstToken); + const firstIR = await firstTokenContract.identityRegistry(); + + // Verify firstIR is valid + expect(firstIR).to.not.equal(ethers.constants.AddressZero); + expect(firstIR).to.not.be.undefined; + + // Transfer ownership of the IR and its components to factory so they can be reused + const firstIRContract = await ethers.getContractAt("OwnableUpgradeable", firstIR); + await firstIRContract.connect(deployer).transferOwnership(factoryAts.address); + + // Get TIR and CTR from the IR and transfer their ownership too + const ir = await ethers.getContractAt( + "@tokenysolutions/t-rex/contracts/registry/interface/IIdentityRegistry.sol:IIdentityRegistry", + firstIR, + ); + const tirAddress = await ir.issuersRegistry(); + const ctrAddress = await ir.topicsRegistry(); + const irsAddress = await ir.identityStorage(); + const tirContract = await ethers.getContractAt("OwnableUpgradeable", tirAddress); + const ctrContract = await ethers.getContractAt("OwnableUpgradeable", ctrAddress); + const irsContract = await ethers.getContractAt("OwnableUpgradeable", irsAddress); + await tirContract.connect(deployer).transferOwnership(factoryAts.address); + await ctrContract.connect(deployer).transferOwnership(factoryAts.address); + await irsContract.connect(deployer).transferOwnership(factoryAts.address); + + // Create tokenDetails for second deployment with empty irAgents + // since the IR already has its agents configured + const tokenDetailsExistingIR = { + ...tokenDetails, + irAgents: [], // Don't add agents since IR already has them + }; + + // Now deploy with existing IR + const bondData = { + security: getSecurityData(businessLogicResolver, { + rbacs: init_rbacs, + identityRegistry: firstIR, + }), + bondDetails: await getBondDetails(), + proceedRecipients: [], + proceedRecipientsData: [], + }; + bondData.security.resolverProxyConfiguration = { + key: BOND_CONFIG_ID, + version: 1, + }; + + const deploymentResult = await factoryAts + .connect(deployer) + .deployTREXSuiteAtsBond( + "salt-bond-existing-ir", + tokenDetailsExistingIR, + claimDetails, + bondData, + factoryRegulationData, + ); + + const deploymentReceipt = await deploymentResult.wait(); + const trexSuiteDeployedEvent = deploymentReceipt.events?.find((event) => event.event === "TREXSuiteDeployed"); + + // Verify the event was emitted + expect(trexSuiteDeployedEvent).to.not.be.undefined; + }); + + it("GIVEN existing ONCHAINID in tokenDetails WHEN deploying bond THEN uses existing token ID", async () => { + const identity = await ethers.deployContract("Identity", [deployer.address, true]); + await identity.deployed(); + + tokenDetails.ONCHAINID = identity.address; + + const bondData = { + security: getSecurityData(businessLogicResolver, { + rbacs: init_rbacs, + }), + bondDetails: await getBondDetails(), + proceedRecipients: [], + proceedRecipientsData: [], + }; + bondData.security.resolverProxyConfiguration = { + key: BOND_CONFIG_ID, + version: 1, + }; + + const factoryRegulationData = getRegulationData(); + + const deploymentResult = await factoryAts + .connect(deployer) + .deployTREXSuiteAtsBond( + "salt-bond-existing-onchainid", + tokenDetails, + claimDetails, + bondData, + factoryRegulationData, + ); + + const deploymentReceipt = await deploymentResult.wait(); + const trexSuiteDeployedEvent = deploymentReceipt.events?.find((event) => event.event === "TREXSuiteDeployed"); + expect(trexSuiteDeployedEvent).to.not.be.undefined; + + // Reset for next tests + tokenDetails.ONCHAINID = ethers.constants.AddressZero; + }); + + it("GIVEN more modules than settings WHEN deploying bond THEN handles modules without settings", async () => { + const MockComplianceModule = await ethers.getContractFactory("MockComplianceModule"); + const module1 = await MockComplianceModule.deploy(); + await module1.deployed(); + const module2 = await MockComplianceModule.deploy(); + await module2.deployed(); + + // Only one setting for two modules + const setConfigData = module1.interface.encodeFunctionData("setConfig", [100]); + + tokenDetails.complianceModules = [module1.address, module2.address]; + tokenDetails.complianceSettings = [setConfigData]; // Only one setting + + const bondData = { + security: getSecurityData(businessLogicResolver, { + rbacs: init_rbacs, + }), + bondDetails: await getBondDetails(), + proceedRecipients: [], + proceedRecipientsData: [], + }; + bondData.security.resolverProxyConfiguration = { + key: BOND_CONFIG_ID, + version: 1, + }; + + const factoryRegulationData = getRegulationData(); + + const deploymentResult = await factoryAts + .connect(deployer) + .deployTREXSuiteAtsBond( + "salt-bond-partial-settings", + tokenDetails, + claimDetails, + bondData, + factoryRegulationData, + ); + + const deploymentReceipt = await deploymentResult.wait(); + const trexSuiteDeployedEvent = deploymentReceipt.events?.find((event) => event.event === "TREXSuiteDeployed"); + expect(trexSuiteDeployedEvent).to.not.be.undefined; + + // Reset for next tests + tokenDetails.complianceModules = []; + tokenDetails.complianceSettings = []; + }); + }); + + describe("Administrative functions tests", () => { + let otherAccount: SignerWithAddress; + + beforeEach(async () => { + [, otherAccount] = await ethers.getSigners(); + }); + + describe("recoverContractOwnership", () => { + it("GIVEN non-owner caller WHEN calling recoverContractOwnership THEN transaction reverts", async () => { + await expect( + factoryAts.connect(otherAccount).recoverContractOwnership(factory.address, otherAccount.address), + ).to.be.revertedWith("Ownable: caller is not the owner"); + }); + + it("GIVEN owner caller WHEN calling recoverContractOwnership THEN ownership is transferred", async () => { + // Deploy a mock ownable contract + const MockOwnable = await ethers.getContractFactory("TREXFactoryAts", { + libraries: { + TREXBondDeploymentLib: (await (await ethers.getContractFactory("TREXBondDeploymentLib")).deploy()).address, + TREXEquityDeploymentLib: (await (await ethers.getContractFactory("TREXEquityDeploymentLib")).deploy()) + .address, + }, + }); + const mockContract = await MockOwnable.connect(deployer).deploy( + trexDeployment.authorities.trexImplementationAuthority.address, + trexDeployment.factories.identityFactory.address, + factory.address, + ); + await mockContract.deployed(); + + // Transfer ownership to factory first + await mockContract.transferOwnership(factoryAts.address); + + // Recover ownership using factoryAts + await factoryAts.connect(deployer).recoverContractOwnership(mockContract.address, otherAccount.address); + + expect(await mockContract.owner()).to.equal(otherAccount.address); + }); + }); + + describe("setImplementationAuthority", () => { + it("GIVEN non-owner caller WHEN calling setImplementationAuthority THEN transaction reverts", async () => { + await expect( + factoryAts + .connect(otherAccount) + .setImplementationAuthority(trexDeployment.authorities.trexImplementationAuthority.address), + ).to.be.revertedWith("Ownable: caller is not the owner"); + }); + + it("GIVEN zero address WHEN calling setImplementationAuthority THEN transaction reverts", async () => { + await expect(factoryAts.connect(deployer).setImplementationAuthority(ADDRESS_ZERO)).to.be.revertedWith( + "invalid argument - zero address", + ); + }); + + it("GIVEN incomplete implementation authority WHEN calling setImplementationAuthority THEN transaction reverts", async () => { + // Deploy a mock incomplete implementation authority + const IncompleteAuthority = await ethers.getContractFactory("MockIncompleteImplementationAuthority"); + const incompleteAuthority = await IncompleteAuthority.deploy(); + await incompleteAuthority.deployed(); + + await expect( + factoryAts.connect(deployer).setImplementationAuthority(incompleteAuthority.address), + ).to.be.revertedWith("invalid Implementation Authority"); + }); + + it("GIVEN valid implementation authority WHEN calling setImplementationAuthority THEN authority is set and event is emitted", async () => { + const newAuthority = trexDeployment.authorities.trexImplementationAuthority.address; + + const tx = await factoryAts.connect(deployer).setImplementationAuthority(newAuthority); + + expect(await factoryAts.getImplementationAuthority()).to.equal(newAuthority); + await expect(tx).to.emit(factoryAts, "ImplementationAuthoritySet").withArgs(newAuthority); + }); + }); + + describe("setIdFactory", () => { + it("GIVEN non-owner caller WHEN calling setIdFactory THEN transaction reverts", async () => { + await expect( + factoryAts.connect(otherAccount).setIdFactory(trexDeployment.factories.identityFactory.address), + ).to.be.revertedWith("Ownable: caller is not the owner"); + }); + + it("GIVEN zero address WHEN calling setIdFactory THEN transaction reverts", async () => { + await expect(factoryAts.connect(deployer).setIdFactory(ADDRESS_ZERO)).to.be.revertedWith( + "invalid argument - zero address", + ); + }); + + it("GIVEN valid id factory address WHEN calling setIdFactory THEN factory is set and event is emitted", async () => { + const newIdFactory = trexDeployment.factories.identityFactory.address; + + const tx = await factoryAts.connect(deployer).setIdFactory(newIdFactory); + + expect(await factoryAts.getIdFactory()).to.equal(newIdFactory); + await expect(tx).to.emit(factoryAts, "IdFactorySet").withArgs(newIdFactory); + }); + }); + + describe("setAtsFactory", () => { + it("GIVEN non-owner caller WHEN calling setAtsFactory THEN transaction reverts", async () => { + await expect(factoryAts.connect(otherAccount).setAtsFactory(factory.address)).to.be.revertedWith( + "Ownable: caller is not the owner", + ); + }); + + it("GIVEN zero address WHEN calling setAtsFactory THEN transaction reverts", async () => { + await expect(factoryAts.connect(deployer).setAtsFactory(ADDRESS_ZERO)).to.be.revertedWith( + "invalid argument - zero address", + ); + }); + + it("GIVEN valid ats factory address WHEN calling setAtsFactory THEN factory is set", async () => { + const newAtsFactory = factory.address; + + await factoryAts.connect(deployer).setAtsFactory(newAtsFactory); + + // Note: There's no getter for atsFactory, but we can verify by checking it doesn't revert + await expect(factoryAts.connect(deployer).setAtsFactory(newAtsFactory)).to.not.be.reverted; + }); + }); + + describe("Getter functions", () => { + it("GIVEN deployed factory WHEN calling getImplementationAuthority THEN correct address is returned", async () => { + const authority = await factoryAts.getImplementationAuthority(); + expect(authority).to.equal(trexDeployment.authorities.trexImplementationAuthority.address); + }); + + it("GIVEN deployed factory WHEN calling getIdFactory THEN correct address is returned", async () => { + const idFactory = await factoryAts.getIdFactory(); + expect(idFactory).to.equal(trexDeployment.factories.identityFactory.address); + }); + + it("GIVEN non-existent salt WHEN calling getToken THEN zero address is returned", async () => { + const tokenAddress = await factoryAts.getToken("non-existent-salt"); + expect(tokenAddress).to.equal(ADDRESS_ZERO); + }); + }); }); }); diff --git a/packages/ats/contracts/test/contracts/unit/layer_1/ERC1400/ERC1410/erc1410.test.ts b/packages/ats/contracts/test/contracts/unit/layer_1/ERC1400/ERC1410/erc1410.test.ts index 5a492d768..ed5b1217e 100644 --- a/packages/ats/contracts/test/contracts/unit/layer_1/ERC1400/ERC1410/erc1410.test.ts +++ b/packages/ats/contracts/test/contracts/unit/layer_1/ERC1400/ERC1410/erc1410.test.ts @@ -1,31 +1,41 @@ import { expect } from "chai"; -import { ethers } from "hardhat"; +import { ethers, network } from "hardhat"; import { BigNumber } from "ethers"; import { SignerWithAddress } from "@nomiclabs/hardhat-ethers/signers.js"; import { type ResolverProxy, - type Pause, + type PauseFacet, type AccessControl, type Equity, - type ControlList, type IERC1410, - Kyc, - SsiManagement, - ERC20, - ERC1594, - ERC1644, - AdjustBalances, + KycFacet, + SsiManagementFacet, + ERC20Facet, + ERC1594Facet, + ERC1644Facet, + AdjustBalancesFacet, Cap, IClearing, - ISnapshots, + SnapshotsFacet, TimeTravelFacet, + ControlListFacet, + ProtectedPartitionsFacet, + DiamondCutFacet, } from "@contract-types"; import { grantRoleAndPauseToken } from "@test"; import { loadFixture } from "@nomicfoundation/hardhat-network-helpers"; import { ClearingActionsFacet } from "@contract-types"; import { deployEquityTokenFixture } from "@test"; import { executeRbac, MAX_UINT256 } from "@test"; -import { ZERO, EMPTY_STRING, ATS_ROLES, ADDRESS_ZERO, dateToUnixTimestamp, EIP1066_CODES } from "@scripts"; +import { + ZERO, + EMPTY_STRING, + ATS_ROLES, + ADDRESS_ZERO, + dateToUnixTimestamp, + EIP1066_CODES, + DEFAULT_PARTITION, +} from "@scripts"; const amount = 1; const balanceOf_C_Original = 2 * amount; @@ -75,6 +85,13 @@ interface BalanceAdjustedValues { decimals: number; metadata?: any; } +const packedData = ethers.utils.defaultAbiCoder.encode( + ["bytes32", "bytes32"], + [ATS_ROLES._PROTECTED_PARTITIONS_PARTICIPANT_ROLE, DEFAULT_PARTITION], +); +const packedDataWithoutPrefix = packedData.slice(2); + +const ProtectedPartitionRole_1 = ethers.utils.keccak256("0x" + packedDataWithoutPrefix); describe("ERC1410 Tests", () => { let diamond: ResolverProxy; @@ -86,19 +103,20 @@ describe("ERC1410 Tests", () => { let erc1410Facet: IERC1410; let accessControlFacet: AccessControl; - let pauseFacet: Pause; + let pauseFacet: PauseFacet; let equityFacet: Equity; - let controlList: ControlList; + let controlList: ControlListFacet; let capFacet: Cap; - let erc20Facet: ERC20; - let erc1594Facet: ERC1594; - let erc1644Facet: ERC1644; - let adjustBalancesFacet: AdjustBalances; - let kycFacet: Kyc; - let ssiManagementFacet: SsiManagement; + let erc20Facet: ERC20Facet; + let erc1594Facet: ERC1594Facet; + let erc1644Facet: ERC1644Facet; + let adjustBalancesFacet: AdjustBalancesFacet; + let kycFacet: KycFacet; + let ssiManagementFacet: SsiManagementFacet; let clearingActionsFacet: ClearingActionsFacet; - let snapshotsFacet: ISnapshots; + let snapshotsFacet: SnapshotsFacet; let timeTravelFacet: TimeTravelFacet; + let diamondCutFacet: DiamondCutFacet; async function setPreBalanceAdjustment(singlePartition?: boolean) { await grantRolesToAccounts(); @@ -339,18 +357,19 @@ describe("ERC1410 Tests", () => { erc1410Facet = await ethers.getContractAt("IERC1410", diamond.address); - adjustBalancesFacet = await ethers.getContractAt("AdjustBalances", diamond.address); - pauseFacet = await ethers.getContractAt("Pause", diamond.address); - capFacet = await ethers.getContractAt("Cap", diamond.address); - erc20Facet = await ethers.getContractAt("ERC20", diamond.address); - erc1594Facet = await ethers.getContractAt("ERC1594", diamond.address); - erc1644Facet = await ethers.getContractAt("ERC1644", diamond.address); + adjustBalancesFacet = await ethers.getContractAt("AdjustBalancesFacet", diamond.address); + pauseFacet = await ethers.getContractAt("PauseFacet", diamond.address); + capFacet = await ethers.getContractAt("CapFacet", diamond.address); + erc20Facet = await ethers.getContractAt("ERC20Facet", diamond.address); + erc1594Facet = await ethers.getContractAt("ERC1594Facet", diamond.address); + erc1644Facet = await ethers.getContractAt("ERC1644Facet", diamond.address); equityFacet = await ethers.getContractAt("Equity", diamond.address); - kycFacet = await ethers.getContractAt("Kyc", diamond.address, signer_B); - ssiManagementFacet = await ethers.getContractAt("SsiManagement", diamond.address); - controlList = await ethers.getContractAt("ControlList", diamond.address, signer_A); + kycFacet = await ethers.getContractAt("KycFacet", diamond.address, signer_B); + ssiManagementFacet = await ethers.getContractAt("SsiManagementFacet", diamond.address); + controlList = await ethers.getContractAt("ControlListFacet", diamond.address, signer_A); clearingActionsFacet = await ethers.getContractAt("ClearingActionsFacet", diamond.address, signer_A); - snapshotsFacet = await ethers.getContractAt("ISnapshots", diamond.address); + snapshotsFacet = await ethers.getContractAt("SnapshotsFacet", diamond.address); + diamondCutFacet = await ethers.getContractAt("DiamondCutFacet", diamond.address); capFacet = await ethers.getContractAt("Cap", diamond.address); @@ -398,7 +417,21 @@ describe("ERC1410 Tests", () => { role: ATS_ROLES._CLEARING_ROLE, members: [signer_A.address], }; - return [rbacPause, corporateActionPause, rbacKyc, rbacSsi, rbacClearingRole]; + return [ + rbacPause, + corporateActionPause, + rbacKyc, + rbacSsi, + rbacClearingRole, + { + role: ProtectedPartitionRole_1, + members: [signer_B.address, signer_A.address], + }, + { + role: ATS_ROLES._CONTROL_LIST_ROLE, + members: [signer_B.address], + }, + ]; } describe("Multi partition ", () => { @@ -425,6 +458,31 @@ describe("ERC1410 Tests", () => { clearingInterface = await ethers.getContractAt("IClearing", diamond.address); }); + it("GIVEN an initialized contract WHEN trying to initialize it again THEN transaction fails with AlreadyInitialized", async () => { + await expect(erc1410Facet.initialize_ERC1410(true)).to.be.rejectedWith("AlreadyInitialized"); + }); + + it("GIVEN a multi-partition token WHEN checking isMultiPartition THEN returns true", async () => { + const isMulti = await erc1410Facet.isMultiPartition(); + expect(isMulti).to.be.equal(true); + }); + + it("GIVEN an account with balance WHEN checking balanceOfAt for a past timestamp THEN returns the balance at that timestamp", async () => { + // Schedule a snapshot + await accessControlFacet.connect(signer_A).grantRole(ATS_ROLES._SNAPSHOT_ROLE, signer_C.address); + const currentTime = await timeTravelFacet.blockTimestamp(); + const snapshotTime = currentTime.add(100); + await snapshotsFacet.connect(signer_C).takeSnapshot(); + + // Advance time to snapshot + await timeTravelFacet.changeSystemTimestamp(snapshotTime); + const erc1410ReadFacet = await ethers.getContractAt("ERC1410ReadFacet", diamond.address); + // Check balance at snapshot time + const balanceAt = await erc1410ReadFacet.balanceOfAt(signer_C.address, snapshotTime); + const currentBalance = await erc1410ReadFacet.balanceOf(signer_C.address); + expect(balanceAt).to.be.equal(currentBalance); + }); + it("GIVEN an account WHEN authorizing and revoking operators THEN transaction succeeds", async () => { await erc1410Facet.issueByPartition({ partition: _PARTITION_ID, @@ -477,6 +535,110 @@ describe("ERC1410 Tests", () => { expect(isOperatorByPartition_E).to.be.equal(false); }); + it("GIVEN a paused token WHEN authorizeOperator THEN transaction fails with TokenIsPaused", async () => { + await pauseFacet.connect(signer_B).pause(); + + await expect(erc1410Facet.connect(signer_C).authorizeOperator(signer_D.address)).to.be.revertedWithCustomError( + pauseFacet, + "TokenIsPaused", + ); + }); + + it("GIVEN a paused token WHEN revokeOperator THEN transaction fails with TokenIsPaused", async () => { + await pauseFacet.connect(signer_B).pause(); + + await expect(erc1410Facet.connect(signer_C).revokeOperator(signer_D.address)).to.be.revertedWithCustomError( + pauseFacet, + "TokenIsPaused", + ); + }); + + it("GIVEN a paused token WHEN authorizeOperatorByPartition THEN transaction fails with TokenIsPaused", async () => { + await pauseFacet.connect(signer_B).pause(); + + await expect( + erc1410Facet.connect(signer_C).authorizeOperatorByPartition(_PARTITION_ID_1, signer_D.address), + ).to.be.revertedWithCustomError(pauseFacet, "TokenIsPaused"); + }); + + it("GIVEN a paused token WHEN revokeOperatorByPartition THEN transaction fails with TokenIsPaused", async () => { + await pauseFacet.connect(signer_B).pause(); + + await expect( + erc1410Facet.connect(signer_C).revokeOperatorByPartition(_PARTITION_ID_1, signer_D.address), + ).to.be.revertedWithCustomError(pauseFacet, "TokenIsPaused"); + }); + + it("GIVEN a blocked account WHEN authorizeOperator THEN transaction fails with AccountIsBlocked", async () => { + await controlList.connect(signer_B).addToControlList(signer_C.address); + + await expect(erc1410Facet.connect(signer_C).authorizeOperator(signer_D.address)).to.be.revertedWithCustomError( + controlList, + "AccountIsBlocked", + ); + }); + + it("GIVEN a blocked operator WHEN authorizeOperator THEN transaction fails with AccountIsBlocked", async () => { + await controlList.connect(signer_B).addToControlList(signer_D.address); + + await expect(erc1410Facet.connect(signer_C).authorizeOperator(signer_D.address)).to.be.revertedWithCustomError( + controlList, + "AccountIsBlocked", + ); + }); + + it("GIVEN a blocked account WHEN revokeOperator THEN transaction fails with AccountIsBlocked", async () => { + await controlList.connect(signer_B).addToControlList(signer_C.address); + + await expect(erc1410Facet.connect(signer_C).revokeOperator(signer_D.address)).to.be.revertedWithCustomError( + controlList, + "AccountIsBlocked", + ); + }); + + it("GIVEN a blocked account WHEN authorizeOperatorByPartition THEN transaction fails with AccountIsBlocked", async () => { + await controlList.connect(signer_B).addToControlList(signer_C.address); + + await expect( + erc1410Facet.connect(signer_C).authorizeOperatorByPartition(_PARTITION_ID_1, signer_D.address), + ).to.be.revertedWithCustomError(controlList, "AccountIsBlocked"); + }); + + it("GIVEN a blocked operator WHEN authorizeOperatorByPartition THEN transaction fails with AccountIsBlocked", async () => { + await controlList.connect(signer_B).addToControlList(signer_D.address); + + await expect( + erc1410Facet.connect(signer_C).authorizeOperatorByPartition(_PARTITION_ID_1, signer_D.address), + ).to.be.revertedWithCustomError(controlList, "AccountIsBlocked"); + }); + + it("GIVEN a blocked account WHEN revokeOperatorByPartition THEN transaction fails with AccountIsBlocked", async () => { + await controlList.connect(signer_B).addToControlList(signer_C.address); + + await expect( + erc1410Facet.connect(signer_C).revokeOperatorByPartition(_PARTITION_ID_1, signer_D.address), + ).to.be.revertedWithCustomError(controlList, "AccountIsBlocked"); + }); + + it("GIVEN an account WHEN triggerAndSyncAll THEN transaction succeeds", async () => { + const balanceBefore = await erc1410Facet.balanceOf(signer_C.address); + + await expect( + erc1410Facet.connect(signer_C).triggerAndSyncAll(_PARTITION_ID_1, signer_C.address, signer_D.address), + ).to.not.be.reverted; + + const balanceAfter = await erc1410Facet.balanceOf(signer_C.address); + expect(balanceAfter).to.be.equal(balanceBefore); + }); + + it("GIVEN a paused token WHEN triggerAndSyncAll THEN transaction fails with TokenIsPaused", async () => { + await pauseFacet.connect(signer_B).pause(); + + await expect( + erc1410Facet.connect(signer_C).triggerAndSyncAll(_PARTITION_ID_1, signer_C.address, signer_D.address), + ).to.be.revertedWithCustomError(pauseFacet, "TokenIsPaused"); + }); + it("GIVEN a paused Token WHEN transfer THEN transaction fails with TokenIsPaused", async () => { // Pausing the token await pauseFacet.connect(signer_B).pause(); @@ -971,6 +1133,35 @@ describe("ERC1410 Tests", () => { expect(canRedeem[1]).to.be.equal(EIP1066_CODES.NOT_FOUND_UNEQUAL_OR_OUT_OF_RANGE); }); + it("GIVEN an account WHEN operatorTransferByPartition to address 0 THEN transaction fails with ZeroAddressNotAllowed", async () => { + operatorTransferData.to = ADDRESS_ZERO; + await expect(erc1410Facet.connect(signer_C).operatorTransferByPartition(operatorTransferData)).to.be.rejectedWith( + "ZeroAddressNotAllowed", + ); + }); + + it("GIVEN protected partitions without wildcard role WHEN transferByPartition THEN transaction fails with PartitionsAreProtectedAndNoRole", async () => { + // Initialize protected partitions + const protectedPartitionsFacet = await ethers.getContractAt("ProtectedPartitionsFacet", diamond.address); + await accessControlFacet.connect(signer_A).grantRole(ATS_ROLES._PROTECTED_PARTITIONS_ROLE, signer_A.address); + await protectedPartitionsFacet.connect(signer_A).protectPartitions(); + + await expect( + erc1410Facet.connect(signer_C).transferByPartition(_PARTITION_ID_1, basicTransferInfo, data), + ).to.be.rejectedWith("PartitionsAreProtectedAndNoRole"); + }); + + it("GIVEN protected partitions without wildcard role WHEN redeemByPartition THEN transaction fails with PartitionsAreProtectedAndNoRole", async () => { + // Initialize protected partitions + const protectedPartitionsFacet = await ethers.getContractAt("ProtectedPartitionsFacet", diamond.address); + await accessControlFacet.connect(signer_A).grantRole(ATS_ROLES._PROTECTED_PARTITIONS_ROLE, signer_A.address); + await protectedPartitionsFacet.connect(signer_A).protectPartitions(); + + await expect(erc1410Facet.connect(signer_C).redeemByPartition(_PARTITION_ID_1, amount, data)).to.be.rejectedWith( + "PartitionsAreProtectedAndNoRole", + ); + }); + it("GIVEN an account WHEN transfer THEN transaction succeeds", async () => { // BEFORE SCHEDULED SNAPSHOTS ------------------------------------------------------------------ // Granting Role to account C @@ -1059,7 +1250,7 @@ describe("ERC1410 Tests", () => { // transfer await expect(erc1410Facet.connect(signer_C).transferByPartition(_PARTITION_ID_1, basicTransferInfo, data)) .to.emit(snapshotsFacet, "SnapshotTriggered") - .withArgs(signer_C.address, 1); + .withArgs(1); // check that scheduled snapshots was triggered dividend_1 = await equityFacet.getDividends(1); dividend = await equityFacet.getDividends(2); @@ -1085,7 +1276,7 @@ describe("ERC1410 Tests", () => { // transfer From await expect(erc1410Facet.connect(signer_C).operatorTransferByPartition(operatorTransferData)) .to.emit(snapshotsFacet, "SnapshotTriggered") - .withArgs(signer_C.address, 2); + .withArgs(2); // check that scheduled snapshots was triggered dividend_1 = await equityFacet.getDividends(1); @@ -1196,7 +1387,7 @@ describe("ERC1410 Tests", () => { }), ) .to.emit(snapshotsFacet, "SnapshotTriggered") - .withArgs(signer_A.address, 1); + .withArgs(1); // check that scheduled snapshots was triggered dividend_1 = await equityFacet.getDividends(1); @@ -1285,7 +1476,7 @@ describe("ERC1410 Tests", () => { // transfer await expect(erc1410Facet.connect(signer_C).redeemByPartition(_PARTITION_ID_1, amount, data)) .to.emit(snapshotsFacet, "SnapshotTriggered") - .withArgs(signer_C.address, 1); + .withArgs(1); // check that scheduled snapshots was triggered dividend_1 = await equityFacet.getDividends(1); @@ -1303,7 +1494,7 @@ describe("ERC1410 Tests", () => { .operatorRedeemByPartition(_PARTITION_ID_1, signer_E.address, amount, data, operatorData), ) .to.emit(snapshotsFacet, "SnapshotTriggered") - .withArgs(signer_C.address, 2); + .withArgs(2); // check that scheduled snapshots was triggered dividend_1 = await equityFacet.getDividends(1); @@ -1543,7 +1734,7 @@ describe("ERC1410 Tests", () => { ), ) .to.emit(snapshotsFacet, "SnapshotTriggered") - .withArgs(signer_C.address, 1); + .withArgs(1); // check that scheduled snapshots was triggered dividend_1 = await equityFacet.getDividends(1); @@ -1561,7 +1752,7 @@ describe("ERC1410 Tests", () => { .controllerRedeemByPartition(_PARTITION_ID_1, signer_D.address, amount, data, operatorData), ) .to.emit(snapshotsFacet, "SnapshotTriggered") - .withArgs(signer_C.address, 2); + .withArgs(2); // check that scheduled snapshots was triggered dividend_1 = await equityFacet.getDividends(1); @@ -1570,6 +1761,28 @@ describe("ERC1410 Tests", () => { expect(dividend.snapshotId.toNumber()).to.equal(2); }); + it("GIVEN token is not controllable WHEN controllerTransferByPartition THEN transaction fails with TokenIsNotControllable", async () => { + await accessControlFacet.connect(signer_A).grantRole(ATS_ROLES._CONTROLLER_ROLE, signer_C.address); + await erc1644Facet.connect(signer_A).finalizeControllable(); + + await expect( + erc1410Facet + .connect(signer_C) + .controllerTransferByPartition(_PARTITION_ID_1, signer_C.address, signer_D.address, amount, data, data), + ).to.be.revertedWithCustomError(erc1644Facet, "TokenIsNotControllable"); + }); + + it("GIVEN token is not controllable WHEN controllerRedeemByPartition THEN transaction fails with TokenIsNotControllable", async () => { + await accessControlFacet.connect(signer_A).grantRole(ATS_ROLES._CONTROLLER_ROLE, signer_C.address); + await erc1644Facet.connect(signer_A).finalizeControllable(); + + await expect( + erc1410Facet + .connect(signer_C) + .controllerRedeemByPartition(_PARTITION_ID_1, signer_C.address, amount, data, data), + ).to.be.revertedWithCustomError(erc1644Facet, "TokenIsNotControllable"); + }); + describe("Adjust balances", () => { beforeEach(async () => { operatorTransferData = { @@ -1836,65 +2049,523 @@ describe("ERC1410 Tests", () => { }); }); }); + + it("GIVEN an unprotected partitions equity WHEN performing a protected transfer THEN transaction fails with PartitionsAreUnProtected", async () => { + await expect( + erc1410Facet + .connect(signer_B) + .protectedTransferFromByPartition(DEFAULT_PARTITION, signer_A.address, signer_B.address, amount, { + deadline: 1, + nounce: 0, + signature: "0x1234", + }), + ).to.be.rejectedWith("PartitionsAreUnProtected"); + }); + + it("GIVEN an unprotected partitions equity WHEN performing a protected redeem THEN transaction fails with PartitionsAreUnProtected", async () => { + await expect( + erc1410Facet.connect(signer_B).protectedRedeemFromByPartition(DEFAULT_PARTITION, signer_A.address, amount, { + deadline: 1, + nounce: 0, + signature: "0x1234", + }), + ).to.be.rejectedWith("PartitionsAreUnProtected"); + }); + describe("Protected Partitions Tests", () => { + let protectedPartitionsFacet: ProtectedPartitionsFacet; + let controlListFacet: ControlListFacet; + + async function protectedPartitionsFixture() { + await accessControlFacet.connect(signer_A).grantRole(ATS_ROLES._PROTECTED_PARTITIONS_ROLE, signer_A.address); + await accessControlFacet.connect(signer_A).grantRole(ATS_ROLES._CONTROL_LIST_ROLE, signer_A.address); + await protectedPartitionsFacet.connect(signer_A).protectPartitions(); + await ssiManagementFacet.connect(signer_A).addIssuer(signer_B.address); + await kycFacet.connect(signer_B).grantKyc(signer_B.address, EMPTY_STRING, ZERO, MAX_UINT256, signer_B.address); + await ssiManagementFacet.connect(signer_A).addIssuer(signer_A.address); + await kycFacet.connect(signer_B).grantKyc(signer_A.address, EMPTY_STRING, ZERO, MAX_UINT256, signer_A.address); + } + + beforeEach(async () => { + // Initialize protected partitions + protectedPartitionsFacet = await ethers.getContractAt("ProtectedPartitionsFacet", diamond.address); + controlListFacet = await ethers.getContractAt("ControlListFacet", diamond.address); + await loadFixture(protectedPartitionsFixture); + }); + async function grant_WILD_CARD_ROLE_and_issue_tokens( + wildCard_Account: string, + issue_Account: string, + issue_Amount: number, + issue_Partition: string, + ) { + accessControlFacet = accessControlFacet.connect(signer_A); + await accessControlFacet.grantRole(ATS_ROLES._WILD_CARD_ROLE, wildCard_Account); + + await erc1410Facet.issueByPartition({ + partition: issue_Partition, + tokenHolder: issue_Account, + value: issue_Amount, + data: "0x", + }); + } + it("GIVEN protected partitions without wildcard role WHEN operatorTransferByPartition THEN transaction fails with PartitionsAreProtectedAndNoRole", async () => { + await expect( + erc1410Facet.connect(signer_C).operatorTransferByPartition(operatorTransferData), + ).to.be.rejectedWith("PartitionsAreProtectedAndNoRole"); + }); + + it("GIVEN protected partitions without wildcard role WHEN operatorRedeemByPartition THEN transaction fails with PartitionsAreProtectedAndNoRole", async () => { + await erc1410Facet.connect(signer_E).authorizeOperator(signer_C.address); + + await expect( + erc1410Facet + .connect(signer_C) + .operatorRedeemByPartition(_PARTITION_ID_1, signer_E.address, amount, data, operatorData), + ).to.be.rejectedWith("PartitionsAreProtectedAndNoRole"); + }); + describe("protectedTransferFromByPartition", () => { + it("GIVEN a paused security role WHEN performing a protected transfer THEN transaction fails with Paused", async () => { + await grant_WILD_CARD_ROLE_and_issue_tokens(signer_B.address, signer_B.address, amount, DEFAULT_PARTITION); + + await pauseFacet.connect(signer_B).pause(); + + await expect( + erc1410Facet.protectedTransferFromByPartition( + DEFAULT_PARTITION, + signer_A.address, + signer_B.address, + amount, + { + deadline: MAX_UINT256, + nounce: 1, + signature: "0x1234", + }, + ), + ).to.be.revertedWithCustomError(pauseFacet, "TokenIsPaused"); + }); + + it("GIVEN a security with clearing active WHEN performing a protected transfer THEN transaction fails with ClearingIsActivated", async () => { + await grant_WILD_CARD_ROLE_and_issue_tokens(signer_B.address, signer_B.address, amount, DEFAULT_PARTITION); + await clearingActionsFacet.activateClearing(); + + await expect( + erc1410Facet.protectedTransferFromByPartition( + DEFAULT_PARTITION, + signer_A.address, + signer_B.address, + amount, + { + deadline: MAX_UINT256, + nounce: 1, + signature: "0x1234", + }, + ), + ).to.be.revertedWithCustomError(clearingInterface, "ClearingIsActivated"); + }); + + it("GIVEN a account without the participant role WHEN performing a protected transfer THEN transaction fails with AccountHasNoRole", async () => { + await expect( + erc1410Facet + .connect(signer_C) + .protectedTransferFromByPartition(DEFAULT_PARTITION, signer_A.address, signer_B.address, amount, { + deadline: MAX_UINT256, + nounce: 1, + signature: "0x1234", + }), + ).to.be.rejectedWith("AccountHasNoRole"); + }); + + it("GIVEN a blacklisted account WHEN performing a protected transfer from it THEN transaction fails with AccountIsBlocked", async () => { + await controlListFacet.connect(signer_B).addToControlList(signer_A.address); + + await expect( + erc1410Facet + .connect(signer_B) + .protectedTransferFromByPartition(DEFAULT_PARTITION, signer_A.address, signer_B.address, amount, { + deadline: MAX_UINT256, + nounce: 1, + signature: "0x1234", + }), + ).to.be.revertedWithCustomError(controlListFacet, "AccountIsBlocked"); + }); + + it("GIVEN a blacklisted account WHEN performing a protected transfer to it THEN transaction fails with AccountIsBlocked", async () => { + await controlListFacet.connect(signer_B).addToControlList(signer_B.address); + + await expect( + erc1410Facet + .connect(signer_B) + .protectedTransferFromByPartition(DEFAULT_PARTITION, signer_A.address, signer_B.address, amount, { + deadline: MAX_UINT256, + nounce: 1, + signature: "0x1234", + }), + ).to.be.revertedWithCustomError(controlListFacet, "AccountIsBlocked"); + }); + + it("GIVEN a non kyc account WHEN performing a protected transfer from or to THEN transaction fails with InvalidKycStatus", async () => { + await kycFacet.connect(signer_B).revokeKyc(signer_A.address); + + await expect( + erc1410Facet + .connect(signer_B) + .protectedTransferFromByPartition(DEFAULT_PARTITION, signer_A.address, signer_B.address, amount, { + deadline: MAX_UINT256, + nounce: 1, + signature: "0x1234", + }), + ).to.be.revertedWithCustomError(kycFacet, "InvalidKycStatus"); + + await expect( + erc1410Facet + .connect(signer_B) + .protectedTransferFromByPartition(DEFAULT_PARTITION, signer_B.address, signer_A.address, amount, { + deadline: MAX_UINT256, + nounce: 1, + signature: "0x1234", + }), + ).to.be.revertedWithCustomError(kycFacet, "InvalidKycStatus"); + }); + it("GIVEN a wrong deadline WHEN performing a protected transfer THEN transaction fails with ExpiredDeadline", async () => { + await erc1410Facet.issueByPartition({ + partition: DEFAULT_PARTITION, + tokenHolder: signer_A.address, + value: amount, + data: "0x", + }); + + await expect( + erc1410Facet + .connect(signer_B) + .protectedTransferFromByPartition(DEFAULT_PARTITION, signer_A.address, signer_B.address, amount, { + deadline: 1, + nounce: 1, + signature: "0x1234", + }), + ).to.be.rejectedWith("ExpiredDeadline"); + }); + + it("GIVEN a wrong signature length WHEN performing a protected transfer THEN transaction fails with WrongSignatureLength", async () => { + await erc1410Facet.issueByPartition({ + partition: DEFAULT_PARTITION, + tokenHolder: signer_A.address, + value: amount, + data: "0x", + }); + await expect( + erc1410Facet + .connect(signer_B) + .protectedTransferFromByPartition(DEFAULT_PARTITION, signer_A.address, signer_B.address, amount, { + deadline: MAX_UINT256, + nounce: 1, + signature: "0x01", + }), + ).to.be.rejectedWith("WrongSignatureLength"); + }); + + it("GIVEN a wrong signature WHEN performing a protected transfer THEN transaction fails with WrongSignature", async () => { + await erc1410Facet.issueByPartition({ + partition: DEFAULT_PARTITION, + tokenHolder: signer_A.address, + value: amount, + data: "0x", + }); + await expect( + erc1410Facet + .connect(signer_B) + .protectedTransferFromByPartition(DEFAULT_PARTITION, signer_A.address, signer_B.address, amount, { + deadline: MAX_UINT256, + nounce: 1, + signature: + "0x0011223344112233441122334411223344112233441122334411223344112233441122334411223344112233441122334411223344112233441122334411223344", + }), + ).to.be.rejectedWith("WrongSignature"); + }); + + it("GIVEN a wrong nounce WHEN performing a protected transfer THEN transaction fails with WrongNounce", async () => { + await erc1410Facet.issueByPartition({ + partition: DEFAULT_PARTITION, + tokenHolder: signer_A.address, + value: amount, + data: "0x", + }); + const deadline = MAX_UINT256; + + await expect( + erc1410Facet + .connect(signer_B) + .protectedTransferFromByPartition(DEFAULT_PARTITION, signer_A.address, signer_B.address, amount, { + deadline: deadline, + nounce: 0, + signature: "0x1234", + }), + ).to.be.rejectedWith("WrongNounce"); + }); + }); + + describe("protectedRedeemFromByPartition", () => { + it("GIVEN a paused security role WHEN performing a protected redeem THEN transaction fails with Paused", async () => { + await grant_WILD_CARD_ROLE_and_issue_tokens(signer_B.address, signer_B.address, amount, DEFAULT_PARTITION); + await pauseFacet.connect(signer_B).pause(); + + await expect( + erc1410Facet.protectedRedeemFromByPartition(DEFAULT_PARTITION, signer_A.address, amount, { + deadline: MAX_UINT256, + nounce: 1, + signature: "0x1234", + }), + ).to.be.rejectedWith("TokenIsPaused"); + }); + + it("GIVEN a security with clearing active WHEN performing a protected redeem THEN transaction fails with ClearingIsActivated", async () => { + await grant_WILD_CARD_ROLE_and_issue_tokens(signer_B.address, signer_B.address, amount, DEFAULT_PARTITION); + await clearingActionsFacet.activateClearing(); + + await expect( + erc1410Facet.protectedRedeemFromByPartition(DEFAULT_PARTITION, signer_A.address, amount, { + deadline: MAX_UINT256, + nounce: 1, + signature: "0x1234", + }), + ).to.be.revertedWithCustomError(clearingInterface, "ClearingIsActivated"); + }); + + it("GIVEN a account without the participant role WHEN performing a protected redeem THEN transaction fails with AccountHasNoRole", async () => { + await expect( + erc1410Facet.connect(signer_C).protectedRedeemFromByPartition(DEFAULT_PARTITION, signer_A.address, amount, { + deadline: MAX_UINT256, + nounce: 1, + signature: "0x1234", + }), + ).to.be.rejectedWith("AccountHasNoRole"); + }); + + it("GIVEN a blacklisted account WHEN performing a protected redeem from it THEN transaction fails with AccountIsBlocked", async () => { + await controlListFacet.connect(signer_B).addToControlList(signer_A.address); + + await expect( + erc1410Facet.connect(signer_B).protectedRedeemFromByPartition(DEFAULT_PARTITION, signer_A.address, amount, { + deadline: MAX_UINT256, + nounce: 1, + signature: "0x1234", + }), + ).to.be.rejectedWith("AccountIsBlocked"); + }); + + it("GIVEN a non kyc account WHEN performing a protected redeem from THEN transaction fails with InvalidKycStatus", async () => { + await kycFacet.connect(signer_B).revokeKyc(signer_A.address); + + await expect( + erc1410Facet.connect(signer_B).protectedRedeemFromByPartition(DEFAULT_PARTITION, signer_A.address, amount, { + deadline: MAX_UINT256, + nounce: 1, + signature: "0x1234", + }), + ).to.be.revertedWithCustomError(kycFacet, "InvalidKycStatus"); + }); + + it("GIVEN a wrong deadline WHEN performing a protected redeem THEN transaction fails with ExpiredDeadline", async () => { + await erc1410Facet.issueByPartition({ + partition: DEFAULT_PARTITION, + tokenHolder: signer_A.address, + value: amount, + data: "0x", + }); + await expect( + erc1410Facet.connect(signer_B).protectedRedeemFromByPartition(DEFAULT_PARTITION, signer_A.address, amount, { + deadline: 1, + nounce: 0, + signature: "0x1234", + }), + ).to.be.rejectedWith("ExpiredDeadline"); + }); + it("GIVEN a wrong signature length WHEN performing a protected redeem THEN transaction fails with WrongSignatureLength", async () => { + await erc1410Facet.issueByPartition({ + partition: DEFAULT_PARTITION, + tokenHolder: signer_A.address, + value: amount, + data: "0x", + }); + await expect( + erc1410Facet.connect(signer_B).protectedRedeemFromByPartition(DEFAULT_PARTITION, signer_A.address, amount, { + deadline: MAX_UINT256, + nounce: 1, + signature: "0x01", + }), + ).to.be.rejectedWith("WrongSignatureLength"); + }); + + it("GIVEN a wrong signature WHEN performing a protected redeem THEN transaction fails with WrongSignature", async () => { + await erc1410Facet.issueByPartition({ + partition: DEFAULT_PARTITION, + tokenHolder: signer_A.address, + value: amount, + data: "0x", + }); + await expect( + erc1410Facet.connect(signer_B).protectedRedeemFromByPartition(DEFAULT_PARTITION, signer_A.address, amount, { + deadline: MAX_UINT256, + nounce: 1, + signature: + "0x0011223344112233441122334411223344112233441122334411223344112233441122334411223344112233441122334411223344112233441122334411223344", + }), + ).to.be.rejectedWith("WrongSignature"); + }); + + it("GIVEN a wrong nounce WHEN performing a protected redeem THEN transaction fails with WrongNounce", async () => { + await erc1410Facet.issueByPartition({ + partition: DEFAULT_PARTITION, + tokenHolder: signer_A.address, + value: amount, + data: "0x", + }); + const deadline = MAX_UINT256; + + await expect( + erc1410Facet.connect(signer_B).protectedRedeemFromByPartition(DEFAULT_PARTITION, signer_A.address, amount, { + deadline: deadline, + nounce: 0, + signature: "0x1234", + }), + ).to.be.rejectedWith("WrongNounce"); + }); + + it("GIVEN a correct signature WHEN performing a protected redeem THEN transaction succeeds", async () => { + const deadline = MAX_UINT256; + + const message = { + _partition: DEFAULT_PARTITION, + _from: signer_A.address, + _amount: amount, + _deadline: deadline, + _nounce: 1, + }; + const domain = { + name: (await erc20Facet.getERC20Metadata()).info.name, + version: (await diamondCutFacet.getConfigInfo()).version_.toString(), + chainId: await network.provider.send("eth_chainId"), + verifyingContract: diamond.address, + }; + + const redeemType = { + protectedRedeemFromByPartition: [ + { name: "_partition", type: "bytes32" }, + { name: "_from", type: "address" }, + { name: "_amount", type: "uint256" }, + { name: "_deadline", type: "uint256" }, + { name: "_nounce", type: "uint256" }, + ], + }; + + /*const domainSeparator = + ethers.utils._TypedDataEncoder.hashDomain(domain) + const messageHash = ethers.utils._TypedDataEncoder.hash( + domain, + transferType, + message + )*/ + + // Sign the message hash + const signature = await signer_A._signTypedData(domain, redeemType, message); + + await erc1410Facet.issueByPartition({ + partition: DEFAULT_PARTITION, + tokenHolder: signer_A.address, + value: amount, + data: "0x", + }); + + await erc1410Facet + .connect(signer_B) + .protectedRedeemFromByPartition(DEFAULT_PARTITION, signer_A.address, amount, { + deadline: deadline, + nounce: 1, + signature: signature, + }); + }); + }); + }); }); describe("Single partition ", () => { beforeEach(async () => { await loadFixture(deploySecurityFixtureSinglePartition); }); - it( - "GIVEN initialized erc1410 token " + "WHEN don not use default partition " + "THEN fails with InvalidPartition", - async () => { - await expect(erc1410Facet.transferByPartition(_PARTITION_ID, basicTransferInfo, data)) - .to.be.revertedWithCustomError(erc1410Facet, "PartitionNotAllowedInSinglePartitionMode") - .withArgs(_PARTITION_ID); - await expect( - erc1410Facet.controllerTransferByPartition( - _PARTITION_ID, - signer_C.address, - signer_D.address, - amount, - data, - data, - ), - ) - .to.be.revertedWithCustomError(erc1410Facet, "PartitionNotAllowedInSinglePartitionMode") - .withArgs(_PARTITION_ID); - await expect(erc1410Facet.controllerRedeemByPartition(_PARTITION_ID, signer_D.address, amount, data, data)) - .to.be.revertedWithCustomError(erc1410Facet, "PartitionNotAllowedInSinglePartitionMode") - .withArgs(_PARTITION_ID); - // TODO canTransferByPartition - operatorTransferData.partition = _PARTITION_ID; - operatorTransferData.from = signer_C.address; - operatorTransferData.operatorData = data; - await expect(erc1410Facet.operatorTransferByPartition(operatorTransferData)) - .to.be.revertedWithCustomError(erc1410Facet, "PartitionNotAllowedInSinglePartitionMode") - .withArgs(_PARTITION_ID); - await expect(erc1410Facet.authorizeOperatorByPartition(_PARTITION_ID, signer_C.address)) - .to.be.revertedWithCustomError(erc1410Facet, "PartitionNotAllowedInSinglePartitionMode") - .withArgs(_PARTITION_ID); - await expect(erc1410Facet.revokeOperatorByPartition(_PARTITION_ID, signer_C.address)) - .to.be.revertedWithCustomError(erc1410Facet, "PartitionNotAllowedInSinglePartitionMode") - .withArgs(_PARTITION_ID); - await expect(erc1410Facet.redeemByPartition(_PARTITION_ID, amount, data)) - .to.be.revertedWithCustomError(erc1410Facet, "PartitionNotAllowedInSinglePartitionMode") - .withArgs(_PARTITION_ID); - await expect(erc1410Facet.operatorRedeemByPartition(_PARTITION_ID, signer_C.address, amount, data, data)) - .to.be.revertedWithCustomError(erc1410Facet, "PartitionNotAllowedInSinglePartitionMode") - .withArgs(_PARTITION_ID); - await expect( - erc1410Facet.issueByPartition({ - partition: _PARTITION_ID, - tokenHolder: signer_C.address, - value: amount, - data: data, - }), - ) - .to.be.revertedWithCustomError(erc1410Facet, "PartitionNotAllowedInSinglePartitionMode") - .withArgs(_PARTITION_ID); - // TODO canRedeemByPartition - }, - ); + it("GIVEN an initialized contract WHEN trying to initialize it again THEN transaction fails with AlreadyInitialized", async () => { + await expect(erc1410Facet.initialize_ERC1410(false)).to.be.rejectedWith("AlreadyInitialized"); + }); + + it("GIVEN a single-partition token WHEN checking isMultiPartition THEN returns false", async () => { + const isMulti = await erc1410Facet.isMultiPartition(); + expect(isMulti).to.be.equal(false); + }); + + it("GIVEN an account with balance WHEN checking balanceOfAt for a past timestamp THEN returns the balance at that timestamp", async () => { + // Schedule a snapshot + await accessControlFacet.connect(signer_A).grantRole(ATS_ROLES._SNAPSHOT_ROLE, signer_C.address); + const currentTime = await timeTravelFacet.blockTimestamp(); + const snapshotTime = currentTime.add(100); + await snapshotsFacet.connect(signer_C).takeSnapshot(); + + // Advance time to snapshot + await timeTravelFacet.changeSystemTimestamp(snapshotTime); + + const erc1410ReadFacet = await ethers.getContractAt("ERC1410ReadFacet", diamond.address); + // Check balance at snapshot time + const balanceAt = await erc1410ReadFacet.balanceOfAt(signer_C.address, snapshotTime); + const currentBalance = await erc1410ReadFacet.balanceOf(signer_C.address); + expect(balanceAt).to.be.equal(currentBalance); + }); + + it("GIVEN initialized erc1410 token WHEN don not use default partition THEN fails with InvalidPartition", async () => { + await expect(erc1410Facet.transferByPartition(_PARTITION_ID, basicTransferInfo, data)) + .to.be.revertedWithCustomError(erc1410Facet, "PartitionNotAllowedInSinglePartitionMode") + .withArgs(_PARTITION_ID); + await expect( + erc1410Facet.controllerTransferByPartition( + _PARTITION_ID, + signer_C.address, + signer_D.address, + amount, + data, + data, + ), + ) + .to.be.revertedWithCustomError(erc1410Facet, "PartitionNotAllowedInSinglePartitionMode") + .withArgs(_PARTITION_ID); + await expect(erc1410Facet.controllerRedeemByPartition(_PARTITION_ID, signer_D.address, amount, data, data)) + .to.be.revertedWithCustomError(erc1410Facet, "PartitionNotAllowedInSinglePartitionMode") + .withArgs(_PARTITION_ID); + // TODO canTransferByPartition + operatorTransferData.partition = _PARTITION_ID; + operatorTransferData.from = signer_C.address; + operatorTransferData.operatorData = data; + await expect(erc1410Facet.operatorTransferByPartition(operatorTransferData)) + .to.be.revertedWithCustomError(erc1410Facet, "PartitionNotAllowedInSinglePartitionMode") + .withArgs(_PARTITION_ID); + await expect(erc1410Facet.authorizeOperatorByPartition(_PARTITION_ID, signer_C.address)) + .to.be.revertedWithCustomError(erc1410Facet, "PartitionNotAllowedInSinglePartitionMode") + .withArgs(_PARTITION_ID); + await expect(erc1410Facet.revokeOperatorByPartition(_PARTITION_ID, signer_C.address)) + .to.be.revertedWithCustomError(erc1410Facet, "PartitionNotAllowedInSinglePartitionMode") + .withArgs(_PARTITION_ID); + await expect(erc1410Facet.redeemByPartition(_PARTITION_ID, amount, data)) + .to.be.revertedWithCustomError(erc1410Facet, "PartitionNotAllowedInSinglePartitionMode") + .withArgs(_PARTITION_ID); + await expect(erc1410Facet.operatorRedeemByPartition(_PARTITION_ID, signer_C.address, amount, data, data)) + .to.be.revertedWithCustomError(erc1410Facet, "PartitionNotAllowedInSinglePartitionMode") + .withArgs(_PARTITION_ID); + await expect( + erc1410Facet.issueByPartition({ + partition: _PARTITION_ID, + tokenHolder: signer_C.address, + value: amount, + data: data, + }), + ) + .to.be.revertedWithCustomError(erc1410Facet, "PartitionNotAllowedInSinglePartitionMode") + .withArgs(_PARTITION_ID); + // TODO canRedeemByPartition + }); describe("Issues", async () => { it("GIVEN an account with adjustBalances role WHEN adjustBalances THEN ERC1594 Issue succeeds", async () => { @@ -1980,7 +2651,9 @@ describe("ERC1410 Tests", () => { await adjustBalancesFacet.adjustBalances(adjustFactor, adjustDecimals); // Transaction Partition 1 - await erc1594Facet.connect(signer_A).transferWithData(signer_B.address, amount, "0x"); + await expect(erc1594Facet.connect(signer_A).transferWithData(signer_B.address, amount, "0x")) + .to.emit(erc1594Facet, "TransferWithData") + .withArgs(signer_A.address, signer_B.address, amount, "0x"); // After Transaction Partition 1 Values const after = await getBalanceAdjustedValues(); @@ -2000,8 +2673,11 @@ describe("ERC1410 Tests", () => { await adjustBalancesFacet.adjustBalances(adjustFactor, adjustDecimals); // Transaction Partition 1 - await erc1594Facet.connect(signer_A).transferFromWithData(signer_A.address, signer_B.address, amount, "0x"); - + await expect( + erc1594Facet.connect(signer_A).transferFromWithData(signer_A.address, signer_B.address, amount, "0x"), + ) + .to.emit(erc1594Facet, "TransferFromWithData") + .withArgs(signer_A.address, signer_A.address, signer_B.address, amount, "0x"); // After Transaction Partition 1 Values const after = await getBalanceAdjustedValues(); diff --git a/packages/ats/contracts/test/contracts/unit/layer_1/ERC1400/ERC1594/erc1594.test.ts b/packages/ats/contracts/test/contracts/unit/layer_1/ERC1400/ERC1594/erc1594.test.ts index 2f011f2a8..ed7f2da91 100644 --- a/packages/ats/contracts/test/contracts/unit/layer_1/ERC1400/ERC1594/erc1594.test.ts +++ b/packages/ats/contracts/test/contracts/unit/layer_1/ERC1400/ERC1594/erc1594.test.ts @@ -3,14 +3,14 @@ import { ethers } from "hardhat"; import { SignerWithAddress } from "@nomiclabs/hardhat-ethers/signers.js"; import { type ResolverProxy, - type Pause, - type ERC1594, + type PauseFacet, + type ERC1594Facet, type AccessControl, type ControlList, type IERC1410, - ERC20, - Kyc, - SsiManagement, + ERC20Facet, + KycFacet, + SsiManagementFacet, ClearingActionsFacet, } from "@contract-types"; import { deployEquityTokenFixture } from "@test"; @@ -32,12 +32,12 @@ describe("ERC1594 Tests", () => { let signer_D: SignerWithAddress; let signer_E: SignerWithAddress; - let erc1594Facet: ERC1594; + let erc1594Facet: ERC1594Facet; let accessControlFacet: AccessControl; - let pauseFacet: Pause; + let pauseFacet: PauseFacet; let controlList: ControlList; - let kycFacet: Kyc; - let ssiManagementFacet: SsiManagement; + let kycFacet: KycFacet; + let ssiManagementFacet: SsiManagementFacet; let clearingActionsFacet: ClearingActionsFacet; describe("Multi partition mode", () => { @@ -73,14 +73,14 @@ describe("ERC1594 Tests", () => { ]); accessControlFacet = await ethers.getContractAt("AccessControl", diamond.address); - erc1594Facet = await ethers.getContractAt("ERC1594", diamond.address); + erc1594Facet = await ethers.getContractAt("ERC1594Facet", diamond.address); - pauseFacet = await ethers.getContractAt("Pause", diamond.address); + pauseFacet = await ethers.getContractAt("PauseFacet", diamond.address); controlList = await ethers.getContractAt("ControlList", diamond.address); clearingActionsFacet = await ethers.getContractAt("ClearingActionsFacet", diamond.address, signer_B); - kycFacet = await ethers.getContractAt("Kyc", diamond.address, signer_B); + kycFacet = await ethers.getContractAt("KycFacet", diamond.address, signer_B); accessControlFacet = accessControlFacet.connect(signer_A); await accessControlFacet.grantRole(ATS_ROLES._ISSUER_ROLE, signer_A.address); @@ -152,11 +152,11 @@ describe("ERC1594 Tests", () => { }); describe("Single partition mode", () => { - let erc1594Issuer: ERC1594; - let erc1594Transferor: ERC1594; - let erc1594Approved: ERC1594; + let erc1594Issuer: ERC1594Facet; + let erc1594Transferor: ERC1594Facet; + let erc1594Approved: ERC1594Facet; let erc1410SnapshotFacet: IERC1410; - let erc20Facet: ERC20; + let erc20Facet: ERC20Facet; async function deploySecurityFixtureSinglePartition() { const base = await deployEquityTokenFixture({ @@ -198,19 +198,19 @@ describe("ERC1594 Tests", () => { accessControlFacet = await ethers.getContractAt("AccessControl", diamond.address); - erc1594Facet = await ethers.getContractAt("ERC1594", diamond.address); + erc1594Facet = await ethers.getContractAt("ERC1594Facet", diamond.address); erc1594Issuer = erc1594Facet.connect(signer_C); erc1594Transferor = erc1594Facet.connect(signer_E); erc1594Approved = erc1594Facet.connect(signer_D); - erc20Facet = await ethers.getContractAt("ERC20", diamond.address, signer_E); + erc20Facet = await ethers.getContractAt("ERC20Facet", diamond.address, signer_E); erc1410SnapshotFacet = await ethers.getContractAt("IERC1410", diamond.address); - pauseFacet = await ethers.getContractAt("Pause", diamond.address); + pauseFacet = await ethers.getContractAt("PauseFacet", diamond.address); controlList = await ethers.getContractAt("ControlList", diamond.address); - kycFacet = await ethers.getContractAt("Kyc", diamond.address, signer_B); - ssiManagementFacet = await ethers.getContractAt("SsiManagement", diamond.address, signer_A); + kycFacet = await ethers.getContractAt("KycFacet", diamond.address, signer_B); + ssiManagementFacet = await ethers.getContractAt("SsiManagementFacet", diamond.address, signer_A); accessControlFacet = accessControlFacet.connect(signer_A); await accessControlFacet.grantRole(ATS_ROLES._ISSUER_ROLE, signer_A.address); @@ -691,5 +691,188 @@ describe("ERC1594 Tests", () => { expect(await erc1410SnapshotFacet.totalSupplyByPartition(DEFAULT_PARTITION)).to.be.equal(AMOUNT / 2); }, ); + + describe("Recovered Addresses", () => { + let erc3643ManagementFacet: any; + let erc3643ReadFacet: any; + + beforeEach(async () => { + erc3643ManagementFacet = await ethers.getContractAt("ERC3643ManagementFacet", diamond.address, signer_A); + erc3643ReadFacet = await ethers.getContractAt("ERC3643ReadFacet", diamond.address); + + // Grant AGENT_ROLE to signer_A for recovery operations + await accessControlFacet.grantRole(ATS_ROLES._AGENT_ROLE, signer_A.address); + + // Issue tokens to signer_E and signer_C + await erc1594Issuer.issue(signer_E.address, AMOUNT, DATA); + await kycFacet.grantKyc(signer_C.address, EMPTY_VC_ID, ZERO, MAX_UINT256, signer_E.address); + await erc1594Issuer.issue(signer_C.address, AMOUNT, DATA); + }); + + it("GIVEN a recovered msgSender WHEN redeemFrom THEN transaction fails with WalletRecovered", async () => { + // Approve BEFORE recovering the address + await erc20Facet.connect(signer_E).approve(signer_C.address, AMOUNT / 2); + + // Recover signer_C's address + await erc3643ManagementFacet.recoveryAddress(signer_C.address, signer_D.address, ethers.constants.AddressZero); + + // Verify recovery was successful + expect(await erc3643ReadFacet.isAddressRecovered(signer_C.address)).to.be.true; + + // signer_C is now recovered and cannot call redeemFrom + await expect( + erc1594Facet.connect(signer_C).redeemFrom(signer_E.address, AMOUNT / 2, DATA), + ).to.be.revertedWithCustomError(erc3643ManagementFacet, "WalletRecovered"); + }); + + it("GIVEN a recovered tokenHolder WHEN redeemFrom THEN transaction fails with WalletRecovered", async () => { + // Recover signer_E's address + await erc3643ManagementFacet.recoveryAddress(signer_E.address, signer_D.address, ethers.constants.AddressZero); + + // Verify recovery was successful + expect(await erc3643ReadFacet.isAddressRecovered(signer_E.address)).to.be.true; + + // Try to redeem from recovered address (signer_E) using signer_C + await expect( + erc1594Facet.connect(signer_C).redeemFrom(signer_E.address, AMOUNT / 2, DATA), + ).to.be.revertedWithCustomError(erc3643ManagementFacet, "WalletRecovered"); + }); + }); + + describe("Protected Partitions with Wild Card Role", () => { + let protectedPartitionsFacet: any; + + beforeEach(async () => { + // Deploy a new token with protected partitions + const base = await deployEquityTokenFixture({ + equityDataParams: { + securityData: { + internalKycActivated: true, + maxSupply: MAX_SUPPLY, + arePartitionsProtected: true, + }, + }, + useLoadFixture: false, + }); + + diamond = base.diamond; + signer_A = base.deployer; + signer_B = base.user1; + signer_C = base.user2; + signer_D = base.user3; + signer_E = base.user4; + + await executeRbac(base.accessControlFacet, [ + { + role: ATS_ROLES._ISSUER_ROLE, + members: [signer_C.address], + }, + { + role: ATS_ROLES._KYC_ROLE, + members: [signer_B.address], + }, + { + role: ATS_ROLES._SSI_MANAGER_ROLE, + members: [signer_A.address], + }, + { + role: ATS_ROLES._PROTECTED_PARTITIONS_ROLE, + members: [signer_A.address], + }, + { + role: ATS_ROLES._WILD_CARD_ROLE, + members: [signer_E.address], + }, + ]); + + accessControlFacet = await ethers.getContractAt("AccessControl", diamond.address); + erc1594Facet = await ethers.getContractAt("ERC1594Facet", diamond.address); + erc1594Issuer = erc1594Facet.connect(signer_C); + erc1594Transferor = erc1594Facet.connect(signer_E); + erc20Facet = await ethers.getContractAt("ERC20Facet", diamond.address, signer_E); + erc1410SnapshotFacet = await ethers.getContractAt("IERC1410", diamond.address); + kycFacet = await ethers.getContractAt("KycFacet", diamond.address, signer_B); + ssiManagementFacet = await ethers.getContractAt("SsiManagementFacet", diamond.address, signer_A); + protectedPartitionsFacet = await ethers.getContractAt("ProtectedPartitionsFacet", diamond.address, signer_A); + + // Setup KYC + await ssiManagementFacet.addIssuer(signer_E.address); + await kycFacet.grantKyc(signer_E.address, EMPTY_VC_ID, ZERO, MAX_UINT256, signer_E.address); + await kycFacet.grantKyc(signer_D.address, EMPTY_VC_ID, ZERO, MAX_UINT256, signer_E.address); + + // Protect partitions + await protectedPartitionsFacet.protectPartitions(); + + // Issue tokens to signer_E + await erc1594Issuer.issue(signer_E.address, AMOUNT, DATA); + }); + + it("GIVEN protected partitions and wildcard role WHEN transferWithData THEN transaction succeeds", async () => { + expect(await erc1594Transferor.transferWithData(signer_D.address, AMOUNT / 2, DATA)) + .to.emit(erc1594Transferor, "Transferred") + .withArgs(signer_E.address, signer_D.address, AMOUNT / 2); + + expect(await erc1410SnapshotFacet.balanceOf(signer_E.address)).to.be.equal(AMOUNT / 2); + expect(await erc1410SnapshotFacet.balanceOf(signer_D.address)).to.be.equal(AMOUNT / 2); + }); + + it("GIVEN protected partitions and wildcard role WHEN transferFromWithData THEN transaction succeeds", async () => { + // Issue tokens to signer_C first + await kycFacet.grantKyc(signer_C.address, EMPTY_VC_ID, ZERO, MAX_UINT256, signer_E.address); + await erc1594Issuer.issue(signer_C.address, AMOUNT, DATA); + + // signer_C approves signer_E (who has wildcard role) to transfer + await erc20Facet.connect(signer_C).approve(signer_E.address, AMOUNT / 2); + + expect(await erc1594Transferor.transferFromWithData(signer_C.address, signer_D.address, AMOUNT / 2, DATA)) + .to.emit(erc1594Facet, "Transferred") + .withArgs(signer_C.address, signer_D.address, AMOUNT / 2); + + expect(await erc1410SnapshotFacet.balanceOf(signer_C.address)).to.be.equal(AMOUNT / 2); + expect(await erc1410SnapshotFacet.balanceOf(signer_D.address)).to.be.equal(AMOUNT / 2); + }); + + it("GIVEN protected partitions and wildcard role WHEN redeem THEN transaction succeeds", async () => { + expect(await erc1594Transferor.redeem(AMOUNT / 2, DATA)) + .to.emit(erc1594Transferor, "Redeemed") + .withArgs(ethers.constants.AddressZero, signer_E.address, AMOUNT / 2); + + expect(await erc1410SnapshotFacet.balanceOf(signer_E.address)).to.be.equal(AMOUNT / 2); + expect(await erc1410SnapshotFacet.totalSupply()).to.be.equal(AMOUNT / 2); + }); + + it("GIVEN protected partitions without wildcard role WHEN transferWithData THEN transaction fails with PartitionsAreProtectedAndNoRole", async () => { + // signer_D doesn't have wildcard role + await expect( + erc1594Facet.connect(signer_D).transferWithData(signer_E.address, AMOUNT / 2, DATA), + ).to.be.revertedWithCustomError(erc1594Facet, "PartitionsAreProtectedAndNoRole"); + }); + + it("GIVEN protected partitions without wildcard role WHEN transferFromWithData THEN transaction fails with PartitionsAreProtectedAndNoRole", async () => { + // signer_E approves signer_D (who doesn't have wildcard role) + await erc20Facet.approve(signer_D.address, AMOUNT / 2); + + await expect( + erc1594Facet.connect(signer_D).transferFromWithData(signer_E.address, signer_C.address, AMOUNT / 2, DATA), + ).to.be.revertedWithCustomError(erc1594Facet, "PartitionsAreProtectedAndNoRole"); + }); + + it("GIVEN protected partitions without wildcard role WHEN redeem THEN transaction fails with PartitionsAreProtectedAndNoRole", async () => { + // signer_D doesn't have wildcard role + await expect(erc1594Facet.connect(signer_D).redeem(AMOUNT / 2, DATA)).to.be.revertedWithCustomError( + erc1594Facet, + "PartitionsAreProtectedAndNoRole", + ); + }); + + it("GIVEN protected partitions without wildcard role WHEN redeemFrom THEN transaction fails with PartitionsAreProtectedAndNoRole", async () => { + // signer_E approves signer_D (who doesn't have wildcard role) + await erc20Facet.approve(signer_D.address, AMOUNT / 2); + + await expect( + erc1594Facet.connect(signer_D).redeemFrom(signer_E.address, AMOUNT / 2, DATA), + ).to.be.revertedWithCustomError(erc1594Facet, "PartitionsAreProtectedAndNoRole"); + }); + }); }); }); diff --git a/packages/ats/contracts/test/contracts/unit/layer_1/ERC1400/ERC1643/erc1643.test.ts b/packages/ats/contracts/test/contracts/unit/layer_1/ERC1400/ERC1643/erc1643.test.ts index c469655bf..633ab974d 100644 --- a/packages/ats/contracts/test/contracts/unit/layer_1/ERC1400/ERC1643/erc1643.test.ts +++ b/packages/ats/contracts/test/contracts/unit/layer_1/ERC1400/ERC1643/erc1643.test.ts @@ -1,7 +1,7 @@ import { expect } from "chai"; import { ethers } from "hardhat"; import { SignerWithAddress } from "@nomiclabs/hardhat-ethers/signers.js"; -import { type ResolverProxy, type ERC1643, type Pause, AccessControl } from "@contract-types"; +import { type ResolverProxy, type ERC1643Facet, type PauseFacet, AccessControl } from "@contract-types"; import { loadFixture } from "@nomicfoundation/hardhat-network-helpers"; import { grantRoleAndPauseToken } from "../../../../../common"; import { deployEquityTokenFixture } from "@test"; @@ -21,9 +21,9 @@ describe("ERC1643 Tests", () => { let signer_B: SignerWithAddress; let signer_C: SignerWithAddress; - let erc1643Facet: ERC1643; + let erc1643Facet: ERC1643Facet; let accessControlFacet: AccessControl; - let pauseFacet: Pause; + let pauseFacet: PauseFacet; async function deploySecurityTokenFixture() { const base = await deployEquityTokenFixture(); @@ -40,9 +40,9 @@ describe("ERC1643 Tests", () => { accessControlFacet = await ethers.getContractAt("AccessControl", diamond.address); - erc1643Facet = await ethers.getContractAt("ERC1643", diamond.address); + erc1643Facet = await ethers.getContractAt("ERC1643Facet", diamond.address); - pauseFacet = await ethers.getContractAt("Pause", diamond.address); + pauseFacet = await ethers.getContractAt("PauseFacet", diamond.address); } beforeEach(async () => { @@ -175,4 +175,36 @@ describe("ERC1643 Tests", () => { documents = await erc1643Facet.getAllDocuments(); expect(documents.length).to.equal(0); }); + + it("GIVEN an existing document WHEN setDocument is called again with same name THEN document is updated without adding to docNames array", async () => { + await accessControlFacet.connect(signer_A).grantRole(ATS_ROLES._DOCUMENTER_ROLE, signer_C.address); + + // Add initial document + await erc1643Facet.connect(signer_C).setDocument(documentName_1, documentURI_1, documentHASH_1); + + // Verify document was added + let documents = await erc1643Facet.getAllDocuments(); + expect(documents.length).to.equal(1); + expect(documents[0]).to.equal(documentName_1); + + // Get initial document details + let document = await erc1643Facet.getDocument(documentName_1); + expect(document[0]).to.equal(documentURI_1); + expect(document[1]).to.equal(documentHASH_1); + + // Update the same document with new URI and HASH + await expect(erc1643Facet.connect(signer_C).setDocument(documentName_1, documentURI_2, documentHASH_2)) + .to.emit(erc1643Facet, "DocumentUpdated") + .withArgs(documentName_1, documentURI_2, documentHASH_2); + + // Verify document list length is still 1 (not duplicated) + documents = await erc1643Facet.getAllDocuments(); + expect(documents.length).to.equal(1); + expect(documents[0]).to.equal(documentName_1); + + // Verify document was updated with new values + document = await erc1643Facet.getDocument(documentName_1); + expect(document[0]).to.equal(documentURI_2); + expect(document[1]).to.equal(documentHASH_2); + }); }); diff --git a/packages/ats/contracts/test/contracts/unit/layer_1/ERC1400/ERC1644/erc1644.test.ts b/packages/ats/contracts/test/contracts/unit/layer_1/ERC1400/ERC1644/erc1644.test.ts index 6edacc453..4ad7b8a38 100644 --- a/packages/ats/contracts/test/contracts/unit/layer_1/ERC1400/ERC1644/erc1644.test.ts +++ b/packages/ats/contracts/test/contracts/unit/layer_1/ERC1400/ERC1644/erc1644.test.ts @@ -3,12 +3,12 @@ import { ethers } from "hardhat"; import { SignerWithAddress } from "@nomiclabs/hardhat-ethers/signers.js"; import { type ResolverProxy, - type ERC1644, - type Pause, + type ERC1644Facet, + type PauseFacet, type AccessControl, type IERC1410, - SsiManagement, - Kyc, + SsiManagementFacet, + KycFacet, } from "@contract-types"; import { loadFixture } from "@nomicfoundation/hardhat-network-helpers"; import { grantRoleAndPauseToken } from "../../../../../common"; @@ -28,12 +28,12 @@ describe("ERC1644 Tests", () => { let signer_D: SignerWithAddress; let signer_E: SignerWithAddress; - let erc1644Facet: ERC1644; + let erc1644Facet: ERC1644Facet; let accessControlFacet: AccessControl; - let pauseFacet: Pause; + let pauseFacet: PauseFacet; let erc1410Facet: IERC1410; - let kycFacet: Kyc; - let ssiManagementFacet: SsiManagement; + let kycFacet: KycFacet; + let ssiManagementFacet: SsiManagementFacet; describe("single partition", () => { async function deploySecurityFixtureSinglePartition() { @@ -70,13 +70,13 @@ describe("ERC1644 Tests", () => { accessControlFacet = await ethers.getContractAt("AccessControl", diamond.address); - erc1644Facet = await ethers.getContractAt("ERC1644", diamond.address); + erc1644Facet = await ethers.getContractAt("ERC1644Facet", diamond.address); - pauseFacet = await ethers.getContractAt("Pause", diamond.address); + pauseFacet = await ethers.getContractAt("PauseFacet", diamond.address); erc1410Facet = await ethers.getContractAt("IERC1410", diamond.address, signer_B); - kycFacet = await ethers.getContractAt("Kyc", diamond.address, signer_B); - ssiManagementFacet = await ethers.getContractAt("SsiManagement", diamond.address, signer_A); + kycFacet = await ethers.getContractAt("KycFacet", diamond.address, signer_B); + ssiManagementFacet = await ethers.getContractAt("SsiManagementFacet", diamond.address, signer_A); } beforeEach(async () => { @@ -236,9 +236,9 @@ describe("ERC1644 Tests", () => { accessControlFacet = await ethers.getContractAt("AccessControl", diamond.address); - erc1644Facet = await ethers.getContractAt("ERC1644", diamond.address); + erc1644Facet = await ethers.getContractAt("ERC1644Facet", diamond.address); - pauseFacet = await ethers.getContractAt("Pause", diamond.address); + pauseFacet = await ethers.getContractAt("PauseFacet", diamond.address); } beforeEach(async () => { diff --git a/packages/ats/contracts/test/contracts/unit/layer_1/ERC1400/ERC20/erc20.test.ts b/packages/ats/contracts/test/contracts/unit/layer_1/ERC1400/ERC20/erc20.test.ts index 6a1702c72..7f2d5329f 100644 --- a/packages/ats/contracts/test/contracts/unit/layer_1/ERC1400/ERC20/erc20.test.ts +++ b/packages/ats/contracts/test/contracts/unit/layer_1/ERC1400/ERC20/erc20.test.ts @@ -5,7 +5,7 @@ import { loadFixture } from "@nomicfoundation/hardhat-network-helpers"; import { isinGenerator } from "@thomaschaplin/isin-generator"; import { type ResolverProxy, - type ERC20, + type ERC20Facet, type IERC1410, type Pause, type ControlList, @@ -13,6 +13,8 @@ import { Kyc, SsiManagement, ClearingActionsFacet, + IERC3643, + AccessControlFacet, } from "@contract-types"; import { ATS_ROLES, DEFAULT_PARTITION, EMPTY_STRING, ZERO } from "@scripts"; import { assertObject } from "../../../../../common"; @@ -31,8 +33,8 @@ describe("ERC20 Tests", () => { let signer_C: SignerWithAddress; let signer_D: SignerWithAddress; - let erc20Facet: ERC20; - let erc20FacetBlackList: ERC20; + let erc20Facet: ERC20Facet; + let erc20FacetBlackList: ERC20Facet; let pauseFacet: Pause; let controlListFacet: ControlList; let erc1594Facet: ERC1594; @@ -77,8 +79,8 @@ describe("ERC20 Tests", () => { }, ]); - erc20Facet = await ethers.getContractAt("ERC20", diamond.address); - erc20FacetBlackList = await ethers.getContractAt("ERC20", diamond.address, signer_D); + erc20Facet = await ethers.getContractAt("ERC20Facet", diamond.address); + erc20FacetBlackList = await ethers.getContractAt("ERC20Facet", diamond.address, signer_D); pauseFacet = await ethers.getContractAt("Pause", diamond.address, signer_B); controlListFacet = await ethers.getContractAt("ControlList", diamond.address, signer_A); clearingActionsFacet = await ethers.getContractAt("ClearingActionsFacet", diamond.address, signer_A); @@ -151,8 +153,8 @@ describe("ERC20 Tests", () => { }); describe("Single partition", () => { - let erc20SignerC: ERC20; - let erc20SignerE: ERC20; + let erc20SignerC: ERC20Facet; + let erc20SignerE: ERC20Facet; let erc1410Facet: IERC1410; async function deploySecurityFixtureSinglePartition() { @@ -190,10 +192,10 @@ describe("ERC20 Tests", () => { }, ]); - erc20Facet = await ethers.getContractAt("ERC20", diamond.address); - erc20FacetBlackList = await ethers.getContractAt("ERC20", diamond.address, signer_D); - erc20SignerC = await ethers.getContractAt("ERC20", diamond.address, signer_C); - erc20SignerE = await ethers.getContractAt("ERC20", diamond.address, signer_D); + erc20Facet = await ethers.getContractAt("ERC20Facet", diamond.address); + erc20FacetBlackList = await ethers.getContractAt("ERC20Facet", diamond.address, signer_D); + erc20SignerC = await ethers.getContractAt("ERC20Facet", diamond.address, signer_C); + erc20SignerE = await ethers.getContractAt("ERC20Facet", diamond.address, signer_D); erc1410Facet = await ethers.getContractAt("IERC1410", diamond.address); erc1594Facet = await ethers.getContractAt("ERC1594", diamond.address, signer_B); kycFacet = await ethers.getContractAt("Kyc", diamond.address, signer_B); @@ -364,6 +366,112 @@ describe("ERC20 Tests", () => { ); }); + describe("Wallet Recovery Tests", () => { + let erc3643Facet: IERC3643; + let accessControlFacet: AccessControlFacet; + const ADDRESS_ZERO = ethers.constants.AddressZero; + + beforeEach(async () => { + erc3643Facet = await ethers.getContractAt("IERC3643", diamond.address); + accessControlFacet = await ethers.getContractAt("AccessControlFacet", diamond.address); + }); + + it("GIVEN non-recovered wallets WHEN approve THEN transaction succeeds", async () => { + // Verify both sender and spender are not recovered + const senderRecovered = await erc3643Facet.isAddressRecovered(signer_C.address); + const spenderRecovered = await erc3643Facet.isAddressRecovered(signer_D.address); + expect(senderRecovered).to.be.false; + expect(spenderRecovered).to.be.false; + + // Approve should succeed + await expect(erc20SignerC.approve(signer_D.address, amount / 2)) + .to.emit(erc20SignerC, "Approval") + .withArgs(signer_C.address, signer_D.address, amount / 2); + }); + + it("GIVEN a recovered sender WHEN approve THEN transaction fails with WalletRecovered", async () => { + // Grant AGENT_ROLE to perform recovery + await accessControlFacet.grantRole(ATS_ROLES._AGENT_ROLE, signer_A.address); + + // Recover signer_C's address (no need to redeem - recovery only checks locks/holds/clears) + await erc3643Facet.recoveryAddress(signer_C.address, signer_A.address, ADDRESS_ZERO); + // Verify recovery was successful + expect(await erc3643Facet.isAddressRecovered(signer_C.address)).to.be.true; + + // Approve should fail because sender (signer_C) is recovered + await expect(erc20SignerC.approve(signer_D.address, amount / 2)).to.be.revertedWithCustomError( + erc20SignerC, + "WalletRecovered", + ); + }); + + it("GIVEN a recovered spender WHEN approve THEN transaction fails with WalletRecovered", async () => { + // Grant AGENT_ROLE to perform recovery + await accessControlFacet.grantRole(ATS_ROLES._AGENT_ROLE, signer_A.address); + + // First ensure signer_C is NOT recovered + const senderRecovered = await erc3643Facet.isAddressRecovered(signer_C.address); + expect(senderRecovered).to.be.false; + + // Recover signer_D's address (no need to issue/redeem - recovery only checks locks/holds/clears) + await erc3643Facet.recoveryAddress(signer_D.address, signer_A.address, ADDRESS_ZERO); + + // Verify recovery was successful + expect(await erc3643Facet.isAddressRecovered(signer_D.address)).to.be.true; + + // Approve should fail because spender (signer_D) is recovered + // This should hit the SECOND onlyUnrecoveredAddress modifier (line 26 in ERC20.sol) + await expect(erc20SignerC.approve(signer_D.address, amount / 2)).to.be.revertedWithCustomError( + erc20SignerC, + "WalletRecovered", + ); + }); + }); + + describe("Protected Partitions Role Tests", () => { + let protectedPartitionsFacet: any; + let accessControlFacet: any; + + beforeEach(async () => { + protectedPartitionsFacet = await ethers.getContractAt("ProtectedPartitions", diamond.address); + accessControlFacet = await ethers.getContractAt("AccessControl", diamond.address); + }); + + it("GIVEN protected partitions activated WHEN transfer without role THEN transaction fails with PartitionsAreProtectedAndNoRole", async () => { + // Enable protected partitions + await accessControlFacet.grantRole(ATS_ROLES._PROTECTED_PARTITIONS_ROLE, signer_A.address); + await protectedPartitionsFacet.protectPartitions(); + + // Try transfer without partition-specific role + await expect(erc20SignerC.transfer(signer_D.address, amount / 2)).to.be.revertedWithCustomError( + erc20Facet, + "PartitionsAreProtectedAndNoRole", + ); + }); + + it("GIVEN protected partitions activated WHEN transferFrom without role THEN transaction fails with PartitionsAreProtectedAndNoRole", async () => { + // Enable protected partitions + await accessControlFacet.grantRole(ATS_ROLES._PROTECTED_PARTITIONS_ROLE, signer_A.address); + await protectedPartitionsFacet.protectPartitions(); + + // Approve first + await erc20SignerC.approve(signer_D.address, amount); + + // Try transferFrom without partition-specific role + await expect( + erc20SignerE.transferFrom(signer_C.address, signer_D.address, amount / 2), + ).to.be.revertedWithCustomError(erc20Facet, "PartitionsAreProtectedAndNoRole"); + }); + }); + + describe("decimalsAt", () => { + it("GIVEN an ERC20 token WHEN calling decimalsAt THEN returns correct decimals", async () => { + const currentTimestamp = Math.floor(Date.now() / 1000); + const decimalsValue = await erc20Facet.decimalsAt(currentTimestamp); + expect(decimalsValue).to.equal(6); // Configured decimals in fixture + }); + }); + it("GIVEN a paused ERC20 WHEN running any state changing method THEN transaction fails with TokenIsPaused", async () => { await pauseFacet.pause(); diff --git a/packages/ats/contracts/test/contracts/unit/layer_1/ERC1400/ERC20Permit/erc20Permit.test.ts b/packages/ats/contracts/test/contracts/unit/layer_1/ERC1400/ERC20Permit/erc20Permit.test.ts index 1b982837d..4290e526f 100644 --- a/packages/ats/contracts/test/contracts/unit/layer_1/ERC1400/ERC20Permit/erc20Permit.test.ts +++ b/packages/ats/contracts/test/contracts/unit/layer_1/ERC1400/ERC20Permit/erc20Permit.test.ts @@ -1,7 +1,16 @@ import { expect } from "chai"; import { ethers } from "hardhat"; import { SignerWithAddress } from "@nomiclabs/hardhat-ethers/signers.js"; -import { type ResolverProxy, type Pause, ERC20Permit, ERC20, AccessControl, ControlList } from "@contract-types"; +import { + type ResolverProxy, + type Pause, + ERC20PermitFacet, + NoncesFacet, + ERC20, + AccessControl, + ControlList, + DiamondCutFacet, +} from "@contract-types"; import { ADDRESS_ZERO, ATS_ROLES } from "@scripts"; import { deployEquityTokenFixture, executeRbac, getDltTimestamp } from "@test"; @@ -11,14 +20,13 @@ describe("ERC20Permit Tests", () => { let signer_B: SignerWithAddress; let signer_C: SignerWithAddress; - let erc20PermitFacet: ERC20Permit; + let erc20PermitFacet: ERC20PermitFacet; + let noncesFacet: NoncesFacet; let erc20Facet: ERC20; let pauseFacet: Pause; let accessControlFacet: AccessControl; let controlList: ControlList; - - const CONTRACT_NAME_ERC20PERMIT = "ERC20Permit"; - const CONTRACT_VERSION_ERC20PERMIT = "1.0.0"; + let diamondCutFacet: DiamondCutFacet; beforeEach(async () => { const base = await deployEquityTokenFixture(); @@ -37,25 +45,22 @@ describe("ERC20Permit Tests", () => { accessControlFacet = await ethers.getContractAt("AccessControl", diamond.address); controlList = await ethers.getContractAt("ControlList", diamond.address); - erc20PermitFacet = await ethers.getContractAt("ERC20Permit", diamond.address); + erc20PermitFacet = await ethers.getContractAt("ERC20PermitFacet", diamond.address); + noncesFacet = await ethers.getContractAt("NoncesFacet", diamond.address); pauseFacet = await ethers.getContractAt("Pause", diamond.address, signer_A); erc20Facet = await ethers.getContractAt("ERC20", diamond.address, signer_A); + diamondCutFacet = await ethers.getContractAt("DiamondCutFacet", diamond.address); }); describe("Single Partition", () => { - describe("Nonces", () => { - it("GIVEN any account WHEN nonces is called THEN the current nonce for that account is returned", async () => { - const nonces = await erc20PermitFacet.nonces(signer_A.address); - expect(nonces).to.equal(0); - }); - }); - describe("Domain Separator", () => { it("GIVEN a deployed contract WHEN DOMAIN_SEPARATOR is called THEN the correct domain separator is returned", async () => { const domainSeparator = await erc20PermitFacet.DOMAIN_SEPARATOR(); + const CONTRACT_NAME = (await erc20Facet.getERC20Metadata()).info.name; + const CONTRACT_VERSION = (await diamondCutFacet.getConfigInfo()).version_.toString(); const domain = { - name: CONTRACT_NAME_ERC20PERMIT, - version: CONTRACT_VERSION_ERC20PERMIT, + name: CONTRACT_NAME, + version: CONTRACT_VERSION, chainId: await ethers.provider.getNetwork().then((n) => n.chainId), verifyingContract: diamond.address, }; @@ -173,12 +178,14 @@ describe("ERC20Permit Tests", () => { }); it("GIVEN a signature from a different owner WHEN permit is called THEN the transaction reverts with ERC2612InvalidSigner", async () => { - const nonce = await erc20PermitFacet.nonces(signer_A.address); + const nonce = await noncesFacet.nonces(signer_A.address); const expiry = (await getDltTimestamp()) + 3600; // 1 hour in the future + const CONTRACT_NAME = (await erc20Facet.getERC20Metadata()).info.name; + const CONTRACT_VERSION = (await diamondCutFacet.getConfigInfo()).version_.toString(); const domain = { - name: CONTRACT_NAME_ERC20PERMIT, - version: CONTRACT_VERSION_ERC20PERMIT, + name: CONTRACT_NAME, + version: CONTRACT_VERSION, chainId: await ethers.provider.getNetwork().then((n) => n.chainId), verifyingContract: diamond.address, }; @@ -210,12 +217,14 @@ describe("ERC20Permit Tests", () => { }); it("GIVEN a valid signature WHEN permit is called THEN the approval succeeds and emits Approval event", async () => { - const nonce = await erc20PermitFacet.nonces(signer_A.address); + const nonce = await noncesFacet.nonces(signer_A.address); const expiry = (await getDltTimestamp()) + 3600; // 1 hour in the future + const CONTRACT_NAME = (await erc20Facet.getERC20Metadata()).info.name; + const CONTRACT_VERSION = (await diamondCutFacet.getConfigInfo()).version_.toString(); const domain = { - name: CONTRACT_NAME_ERC20PERMIT, - version: CONTRACT_VERSION_ERC20PERMIT, + name: CONTRACT_NAME, + version: CONTRACT_VERSION, chainId: await ethers.provider.getNetwork().then((n) => n.chainId), verifyingContract: diamond.address, }; @@ -272,4 +281,54 @@ describe("ERC20Permit Tests", () => { ).to.be.revertedWithCustomError(erc20PermitFacet, "NotAllowedInMultiPartitionMode"); }); }); + + describe("onlyUnrecoveredAddress modifier for permit", () => { + it("GIVEN a recovered owner address WHEN calling permit THEN transaction fails with WalletRecovered", async () => { + const erc3643ManagementFacet = await ethers.getContractAt("ERC3643ManagementFacet", diamond.address); + + // Grant _AGENT_ROLE to recover address + await accessControlFacet.grantRole(ATS_ROLES._AGENT_ROLE, signer_A.address); + + // Recover signer_B (owner) address + await erc3643ManagementFacet.recoveryAddress(signer_B.address, signer_C.address, ADDRESS_ZERO); + + const expiry = (await getDltTimestamp()) + 3600; + + await expect( + erc20PermitFacet.permit( + signer_B.address, + signer_A.address, + 1, + expiry, + 27, + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + ), + ).to.be.revertedWithCustomError(erc20PermitFacet, "WalletRecovered"); + }); + + it("GIVEN a recovered spender address WHEN calling permit THEN transaction fails with WalletRecovered", async () => { + const erc3643ManagementFacet = await ethers.getContractAt("ERC3643ManagementFacet", diamond.address); + + // Grant _AGENT_ROLE to recover address + await accessControlFacet.grantRole(ATS_ROLES._AGENT_ROLE, signer_A.address); + + // Recover signer_C (spender) address + await erc3643ManagementFacet.recoveryAddress(signer_C.address, signer_B.address, ADDRESS_ZERO); + + const expiry = (await getDltTimestamp()) + 3600; + + await expect( + erc20PermitFacet.permit( + signer_A.address, + signer_C.address, + 1, + expiry, + 27, + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + ), + ).to.be.revertedWithCustomError(erc20PermitFacet, "WalletRecovered"); + }); + }); }); diff --git a/packages/ats/contracts/test/contracts/unit/layer_1/ERC1400/ERC20Votes/erc20Votes.test.ts b/packages/ats/contracts/test/contracts/unit/layer_1/ERC1400/ERC20Votes/erc20Votes.test.ts index 705582b09..1a037941c 100644 --- a/packages/ats/contracts/test/contracts/unit/layer_1/ERC1400/ERC20Votes/erc20Votes.test.ts +++ b/packages/ats/contracts/test/contracts/unit/layer_1/ERC1400/ERC20Votes/erc20Votes.test.ts @@ -6,7 +6,7 @@ import { type IERC1410, type Pause, AdjustBalances, - ERC20Votes, + ERC20VotesFacet, EquityUSA, TimeTravelFacet as TimeTravel, } from "@contract-types"; @@ -25,7 +25,7 @@ describe("ERC20Votes Tests", () => { let signer_C: SignerWithAddress; let signer_D: SignerWithAddress; - let erc20VotesFacet: ERC20Votes; + let erc20VotesFacet: ERC20VotesFacet; let pauseFacet: Pause; let erc1410Facet: IERC1410; let adjustBalancesFacet: AdjustBalances; @@ -88,7 +88,7 @@ describe("ERC20Votes Tests", () => { }, ]); - erc20VotesFacet = await ethers.getContractAt("ERC20Votes", diamond.address); + erc20VotesFacet = await ethers.getContractAt("ERC20VotesFacet", diamond.address); pauseFacet = await ethers.getContractAt("Pause", diamond.address, signer_A); erc1410Facet = await ethers.getContractAt("IERC1410", diamond.address, signer_A); adjustBalancesFacet = await ethers.getContractAt("AdjustBalances", diamond.address, signer_A); @@ -107,6 +107,28 @@ describe("ERC20Votes Tests", () => { "AlreadyInitialized", ); }); + + it("GIVEN ERC20Votes activated WHEN calling isActivated THEN returns true", async () => { + const isActivated = await erc20VotesFacet.isActivated(); + expect(isActivated).to.equal(true); + }); + + it("GIVEN ERC20Votes not activated WHEN calling isActivated THEN returns false", async () => { + // Deploy new fixture with erc20VotesActivated = false + const base = await deployEquityTokenFixture({ + equityDataParams: { + securityData: { + isMultiPartition: true, + internalKycActivated: false, + erc20VotesActivated: false, + }, + }, + }); + + const erc20VotesFacetInactive = await ethers.getContractAt("ERC20Votes", base.diamond.address); + const isActivated = await erc20VotesFacetInactive.isActivated(); + expect(isActivated).to.equal(false); + }); }); describe("Clock and Clock Mode", () => { @@ -274,6 +296,10 @@ describe("ERC20Votes Tests", () => { await expect(erc20VotesFacet.getPastVotes(signer_A.address, 100)).to.be.revertedWith("ERC20Votes: future lookup"); }); + it("GIVEN current time WHEN getPastTotalSupply with future timepoint THEN reverts", async () => { + await expect(erc20VotesFacet.getPastTotalSupply(100)).to.be.revertedWith("ERC20Votes: future lookup"); + }); + it("GIVEN delegation at specific block WHEN getPastVotes THEN returns correct historical votes", async () => { const block_1 = 100; const block_2 = 200; @@ -362,8 +388,8 @@ describe("ERC20Votes Tests", () => { await erc20VotesFacet.delegate(signer_B.address); const checkpoint = await erc20VotesFacet.checkpoints(signer_B.address, 0); - expect(checkpoint.fromBlock).to.be.gt(0); - expect(checkpoint.votes).to.equal(amount); + expect(checkpoint.from).to.be.gt(0); + expect(checkpoint.value).to.equal(amount); }); }); @@ -483,4 +509,139 @@ describe("ERC20Votes Tests", () => { await checkVotingPowerAfterAdjustment(); }); }); + + describe("Checkpoints lookup optimization", () => { + beforeEach(async () => { + await timeTravelFacet.changeSystemBlocknumber(1); + await erc1410Facet.issueByPartition({ + partition: DEFAULT_PARTITION, + tokenHolder: signer_A.address, + value: amount, + data: "0x", + }); + }); + + it("GIVEN many checkpoints (>5) WHEN getPastVotes THEN uses optimized binary search with sqrt", async () => { + // First delegate to establish voting power + await timeTravelFacet.changeSystemBlocknumber(50); + await erc20VotesFacet.connect(signer_A).delegate(signer_B.address); + + // Create more than 5 checkpoints to trigger sqrt optimization + let currentBlock = 100; + + for (let i = 0; i < 10; i++) { + await timeTravelFacet.changeSystemBlocknumber(currentBlock); + + // Issue more tokens to create total supply checkpoints + await erc1410Facet.issueByPartition({ + partition: DEFAULT_PARTITION, + tokenHolder: signer_A.address, + value: 100, + data: "0x", + }); + + // Alternate delegation to create checkpoints for different delegates + if (i % 2 === 0) { + await erc20VotesFacet.connect(signer_A).delegate(signer_B.address); + } else { + await erc20VotesFacet.connect(signer_A).delegate(signer_C.address); + } + + currentBlock += 100; + } + + // Move forward to query past votes + await timeTravelFacet.changeSystemBlocknumber(currentBlock + 100); + + // Query votes at various past blocks - this will trigger the sqrt optimization + const pastVotes1 = await erc20VotesFacet.getPastVotes(signer_B.address, 200); + const pastVotes2 = await erc20VotesFacet.getPastVotes(signer_C.address, 400); + const pastVotes3 = await erc20VotesFacet.getPastVotes(signer_B.address, 800); + + // Query past total supply - also triggers sqrt optimization + const pastTotalSupply1 = await erc20VotesFacet.getPastTotalSupply(250); + const pastTotalSupply2 = await erc20VotesFacet.getPastTotalSupply(550); + const pastTotalSupply3 = await erc20VotesFacet.getPastTotalSupply(850); + + // Verify results are reasonable (should have voting power or total supply) + expect(pastVotes1).to.be.gte(0); + expect(pastVotes2).to.be.gte(0); + expect(pastVotes3).to.be.gte(0); + expect(pastTotalSupply1).to.be.gt(0); + expect(pastTotalSupply2).to.be.gt(0); + expect(pastTotalSupply3).to.be.gt(0); + + // Verify the sqrt optimization path is hit by checking edge case where mid block > timepoint + const earlyPastVotes = await erc20VotesFacet.getPastVotes(signer_B.address, 120); + expect(earlyPastVotes).to.be.gte(0); + + // Check number of checkpoints to verify we created enough to trigger optimization + const numCheckpointsB = await erc20VotesFacet.numCheckpoints(signer_B.address); + const numCheckpointsC = await erc20VotesFacet.numCheckpoints(signer_C.address); + expect(numCheckpointsB).to.be.gte(5); + expect(numCheckpointsC).to.be.gte(5); + }); + + it("GIVEN many checkpoints WHEN getPastTotalSupply with timepoint near end THEN correctly retrieves value", async () => { + // Create many checkpoints + let currentBlock = 100; + + for (let i = 0; i < 12; i++) { + await timeTravelFacet.changeSystemBlocknumber(currentBlock); + currentBlock += 50; + + await erc1410Facet.issueByPartition({ + partition: DEFAULT_PARTITION, + tokenHolder: signer_A.address, + value: 50, + data: "0x", + }); + } + + await timeTravelFacet.changeSystemBlocknumber(currentBlock + 100); + + // Query at a timepoint that should hit the lower branch of sqrt optimization + const pastTotalSupply = await erc20VotesFacet.getPastTotalSupply(currentBlock - 100); + expect(pastTotalSupply).to.be.gt(0); + }); + + it("GIVEN empty checkpoints WHEN getPastVotes with timepoint THEN returns zero", async () => { + await timeTravelFacet.changeSystemBlocknumber(1000); + + // Query past votes for an address with no delegation history + const pastVotes = await erc20VotesFacet.getPastVotes(signer_D.address, 500); + expect(pastVotes).to.equal(0); + }); + + it("GIVEN checkpoints WHEN getPastTotalSupply at block 0 THEN returns zero", async () => { + await timeTravelFacet.changeSystemBlocknumber(1); + await erc20VotesFacet.connect(signer_A).delegate(signer_A.address); + + await timeTravelFacet.changeSystemBlocknumber(100); + + // Query total supply before any issuance + const pastTotalSupply = await erc20VotesFacet.getPastTotalSupply(0); + expect(pastTotalSupply).to.equal(0); + }); + + it("GIVEN delegation at early block WHEN getPastVotes at block before ABAF checkpoint THEN returns correct value", async () => { + await timeTravelFacet.changeSystemBlocknumber(10); + + await erc1410Facet.issueByPartition({ + partition: DEFAULT_PARTITION, + tokenHolder: signer_A.address, + value: amount, + data: "0x", + }); + + // Delegate to create voting power + await erc20VotesFacet.connect(signer_A).delegate(signer_A.address); + + // Move to a later block + await timeTravelFacet.changeSystemBlocknumber(100); + + const pastVotes = await erc20VotesFacet.getPastVotes(signer_A.address, 5); + expect(pastVotes).to.equal(0); + }); + }); }); diff --git a/packages/ats/contracts/test/contracts/unit/layer_1/ERC3643/erc3643.test.ts b/packages/ats/contracts/test/contracts/unit/layer_1/ERC3643/erc3643.test.ts index 9d5f39267..fdbfbf641 100644 --- a/packages/ats/contracts/test/contracts/unit/layer_1/ERC3643/erc3643.test.ts +++ b/packages/ats/contracts/test/contracts/unit/layer_1/ERC3643/erc3643.test.ts @@ -5,19 +5,19 @@ import { isinGenerator } from "@thomaschaplin/isin-generator"; import { type ResolverProxy, type ERC20, - type Pause, - Kyc, - type ControlList, - SsiManagement, - ClearingActionsFacet, + type PauseFacet, + type KycFacet, + type ControlListFacet, + type SsiManagementFacet, + type ClearingActionsFacet, type AccessControl, type IERC1410, - AdjustBalances, - Cap, - Equity, - ERC1644, - ERC1594, - Lock, + AdjustBalancesFacet, + CapFacet, + EquityUSAFacet, + ERC1644Facet, + ERC1594Facet, + LockFacet, IHold, ProtectedPartitions, DiamondFacet, @@ -68,19 +68,19 @@ describe("ERC3643 Tests", () => { let erc3643Facet: IERC3643; let erc1410Facet: IERC1410; let timeTravelFacet: TimeTravelFacet; - let adjustBalancesFacet: AdjustBalances; - let capFacet: Cap; - let equityFacet: Equity; + let adjustBalancesFacet: AdjustBalancesFacet; + let capFacet: CapFacet; + let equityFacet: EquityUSAFacet; - let pauseFacet: Pause; - let kycFacet: Kyc; - let controlList: ControlList; + let pauseFacet: PauseFacet; + let kycFacet: KycFacet; + let controlList: ControlListFacet; let clearingActionsFacet: ClearingActionsFacet; - let ssiManagementFacet: SsiManagement; + let ssiManagementFacet: SsiManagementFacet; let accessControlFacet: AccessControl; - let erc1644Facet: ERC1644; - let erc1594Facet: ERC1594; - let lockFacet: Lock; + let erc1644Facet: ERC1644Facet; + let erc1594Facet: ERC1594Facet; + let lockFacet: LockFacet; let clearingFacet: Contract; let holdFacet: IHold; let protectedPartitionsFacet: ProtectedPartitions; @@ -120,6 +120,7 @@ describe("ERC3643 Tests", () => { erc20MetadataInfo: { name, symbol, decimals, isin }, }, }, + useLoadFixture: false, // Avoid nested loadFixture to prevent mock state pollution }); diamond = base.diamond; signer_A = base.deployer; @@ -169,7 +170,7 @@ describe("ERC3643 Tests", () => { erc3643Facet = await ethers.getContractAt("IERC3643", diamond.address); - pauseFacet = await ethers.getContractAt("Pause", diamond.address, signer_B); + pauseFacet = await ethers.getContractAt("PauseFacet", diamond.address, signer_B); erc3643Issuer = erc3643Facet.connect(signer_C); erc3643Transferor = erc3643Facet.connect(signer_E); @@ -177,22 +178,22 @@ describe("ERC3643 Tests", () => { erc20Facet = await ethers.getContractAt("ERC20", diamond.address, signer_E); erc1410SnapshotFacet = await ethers.getContractAt("IERC1410", diamond.address); - controlList = await ethers.getContractAt("ControlList", diamond.address); + controlList = await ethers.getContractAt("ControlListFacet", diamond.address); - kycFacet = await ethers.getContractAt("Kyc", diamond.address, signer_B); - ssiManagementFacet = await ethers.getContractAt("SsiManagement", diamond.address); + kycFacet = await ethers.getContractAt("KycFacet", diamond.address, signer_B); + ssiManagementFacet = await ethers.getContractAt("SsiManagementFacet", diamond.address); erc1410Facet = await ethers.getContractAt("IERC1410", diamond.address); accessControlFacet = await ethers.getContractAt("AccessControl", diamond.address); timeTravelFacet = await ethers.getContractAt("TimeTravelFacet", diamond.address); - adjustBalancesFacet = await ethers.getContractAt("AdjustBalances", diamond.address, signer_A); - capFacet = await ethers.getContractAt("Cap", diamond.address, signer_A); - equityFacet = await ethers.getContractAt("Equity", diamond.address, signer_A); + adjustBalancesFacet = await ethers.getContractAt("AdjustBalancesFacet", diamond.address, signer_A); + capFacet = await ethers.getContractAt("CapFacet", diamond.address, signer_A); + equityFacet = await ethers.getContractAt("EquityUSAFacet", diamond.address, signer_A); clearingActionsFacet = await ethers.getContractAt("ClearingActionsFacet", diamond.address, signer_B); - erc1594Facet = await ethers.getContractAt("ERC1594", diamond.address); - erc1644Facet = await ethers.getContractAt("ERC1644", diamond.address); - lockFacet = await ethers.getContractAt("Lock", diamond.address); - snapshotFacet = await ethers.getContractAt("Snapshots", diamond.address); + erc1594Facet = await ethers.getContractAt("ERC1594Facet", diamond.address); + erc1644Facet = await ethers.getContractAt("ERC1644Facet", diamond.address); + lockFacet = await ethers.getContractAt("LockFacet", diamond.address); + snapshotFacet = await ethers.getContractAt("SnapshotsFacet", diamond.address); const clearingRedeemFacet = await ethers.getContractAt("ClearingRedeemFacet", diamond.address, signer_A); const clearingHoldCreationFacet = await ethers.getContractAt( @@ -253,6 +254,15 @@ describe("ERC3643 Tests", () => { expect(parsed["Config ID"].toLowerCase()).to.equal(configId.toLowerCase()); expect(parsed["Version"]).to.equal(configVersion.toString()); }); + + describe("initialize", () => { + it("GIVEN an already initialized token WHEN attempting to initialize again THEN transaction fails with AlreadyInitialized", async () => { + await expect( + erc3643Facet.initialize_ERC3643(complianceMock.address, identityRegistryMock.address), + ).to.be.rejectedWith("AlreadyInitialized"); + }); + }); + describe("mint", () => { it("GIVEN an account with issuer role WHEN mint THEN transaction succeeds", async () => { // issue succeeds @@ -452,6 +462,38 @@ describe("ERC3643 Tests", () => { expect(snapshot_FrozenBalance_Of_E_3).to.equal(1); expect(snapshot_Total_Supply_3).to.equal(AMOUNT); }); + + it("GIVEN frozen tokens WHEN querying historical snapshot THEN balance and frozen amounts are tracked separately", async () => { + await accessControlFacet.connect(signer_A).grantRole(ATS_ROLES._SNAPSHOT_ROLE, signer_A.address); + + await erc1410Facet.issueByPartition({ + partition: DEFAULT_PARTITION, + tokenHolder: signer_E.address, + value: AMOUNT, + data: "0x", + }); + + // snapshot + await snapshotFacet.connect(signer_A).takeSnapshot(); + + // Freeze some tokens + await freezeFacet.connect(signer_A).freezePartialTokens(signer_E.address, 100); + + // snapshot + await snapshotFacet.connect(signer_A).takeSnapshot(); + + // Check snapshots track balance and frozen separately + const balance1 = await snapshotFacet.balanceOfAtSnapshot(1, signer_E.address); + const frozen1 = await snapshotFacet.frozenBalanceOfAtSnapshot(1, signer_E.address); + const balance2 = await snapshotFacet.balanceOfAtSnapshot(2, signer_E.address); + const frozen2 = await snapshotFacet.frozenBalanceOfAtSnapshot(2, signer_E.address); + + expect(balance1).to.equal(AMOUNT); // Full balance, no frozen + expect(frozen1).to.equal(0); // No frozen tokens yet + expect(balance2).to.equal(AMOUNT - 100); // Balance reduced + expect(frozen2).to.equal(100); // Frozen tokens tracked + expect(balance2.add(frozen2)).to.equal(AMOUNT); // Total remains same + }); }); it("GIVEN a invalid address WHEN attempting to setAddressFrozen THEN transactions revert with ZeroAddressNotAllowed error", async () => { @@ -1287,6 +1329,19 @@ describe("ERC3643 Tests", () => { await expect(erc3643Facet.batchMint(toList, amounts)).to.be.rejectedWith("InputAmountsArrayLengthMismatch"); }); + + it("GIVEN a paused token WHEN batchMint THEN transaction fails with TokenIsPaused", async () => { + await pauseFacet.pause(); + + const mintAmount = AMOUNT / 2; + const toList = [signer_D.address]; + const amounts = [mintAmount]; + + await expect(erc3643Facet.batchMint(toList, amounts)).to.be.revertedWithCustomError( + pauseFacet, + "TokenIsPaused", + ); + }); }); describe("batchTransfer", () => { @@ -1337,6 +1392,67 @@ describe("ERC3643 Tests", () => { "InputAmountsArrayLengthMismatch", ); }); + + it("GIVEN a paused token WHEN batchTransfer THEN transaction fails with TokenIsPaused", async () => { + await pauseFacet.pause(); + + const toList = [signer_F.address]; + const amounts = [transferAmount]; + + await expect(erc3643Facet.connect(signer_E).batchTransfer(toList, amounts)).to.be.revertedWithCustomError( + pauseFacet, + "TokenIsPaused", + ); + }); + + it("GIVEN clearing is activated WHEN batchTransfer THEN transaction fails with ClearingIsActivated", async () => { + await clearingActionsFacet.activateClearing(); + + const toList = [signer_F.address]; + const amounts = [transferAmount]; + + await expect(erc3643Facet.connect(signer_E).batchTransfer(toList, amounts)).to.be.revertedWithCustomError( + clearingFacet, + "ClearingIsActivated", + ); + }); + + it("GIVEN protected partitions without wildcard role WHEN batchTransfer THEN transaction fails with PartitionsAreProtectedAndNoRole", async () => { + await accessControlFacet.grantRole(ATS_ROLES._PROTECTED_PARTITIONS_ROLE, signer_A.address); + await protectedPartitionsFacet.protectPartitions(); + + const toList = [signer_F.address]; + const amounts = [transferAmount]; + + await expect(erc3643Facet.connect(signer_E).batchTransfer(toList, amounts)).to.be.revertedWithCustomError( + clearingFacet, + "PartitionsAreProtectedAndNoRole", + ); + }); + + it("GIVEN non-verified sender WHEN batchTransfer THEN transaction fails with AddressNotVerified", async () => { + await identityRegistryMock.setFlags(false, false); + + const toList = [signer_F.address]; + const amounts = [transferAmount]; + + await expect(erc3643Facet.connect(signer_E).batchTransfer(toList, amounts)).to.be.revertedWithCustomError( + erc3643Facet, + "AddressNotVerified", + ); + }); + + it("GIVEN compliance returns false WHEN batchTransfer THEN transaction fails with ComplianceNotAllowed", async () => { + await complianceMock.setFlags(false, false); + + const toList = [signer_F.address]; + const amounts = [transferAmount]; + + await expect(erc3643Facet.connect(signer_E).batchTransfer(toList, amounts)).to.be.revertedWithCustomError( + erc3643Facet, + "ComplianceNotAllowed", + ); + }); }); describe("batchForcedTransfer", () => { @@ -1390,6 +1506,29 @@ describe("ERC3643 Tests", () => { "InputAmountsArrayLengthMismatch", ); }); + + it("GIVEN toList and amounts with different lengths WHEN batchForcedTransfer THEN transaction fails with InputAmountsArrayLengthMismatch", async () => { + const mintAmount = AMOUNT / 2; + const fromList = [signer_A.address, signer_F.address]; + const toList = [signer_D.address, signer_E.address]; + const amounts = [mintAmount]; + + await expect(erc3643Facet.batchForcedTransfer(fromList, toList, amounts)).to.be.rejectedWith( + "InputAmountsArrayLengthMismatch", + ); + }); + + it("GIVEN a paused token WHEN batchForcedTransfer THEN transaction fails with TokenIsPaused", async () => { + await pauseFacet.pause(); + + const fromList = [signer_F.address]; + const toList = [signer_E.address]; + const amounts = [transferAmount]; + + await expect( + erc3643Facet.connect(signer_A).batchForcedTransfer(fromList, toList, amounts), + ).to.be.revertedWithCustomError(pauseFacet, "TokenIsPaused"); + }); }); describe("batchBurn", () => { @@ -1424,14 +1563,25 @@ describe("ERC3643 Tests", () => { }); it("GIVEN an invalid input amounts array THEN transaction fails with InputAmountsArrayLengthMismatch", async () => { - const mintAmount = AMOUNT / 2; - const toList = [signer_D.address]; - const amounts = [mintAmount, mintAmount]; + const userAddresses = [signer_D.address]; + const amounts = [burnAmount, burnAmount]; - await expect(erc3643Facet.batchTransfer(toList, amounts)).to.be.rejectedWith( + await expect(erc3643Facet.connect(signer_A).batchBurn(userAddresses, amounts)).to.be.rejectedWith( "InputAmountsArrayLengthMismatch", ); }); + + it("GIVEN a paused token WHEN batchBurn THEN transaction fails with TokenIsPaused", async () => { + await pauseFacet.pause(); + + const userAddresses = [signer_D.address]; + const amounts = [burnAmount]; + + await expect(erc3643Facet.connect(signer_A).batchBurn(userAddresses, amounts)).to.be.revertedWithCustomError( + pauseFacet, + "TokenIsPaused", + ); + }); }); describe("batchSetAddressFrozen", () => { @@ -1461,6 +1611,32 @@ describe("ERC3643 Tests", () => { ).to.be.revertedWithCustomError(controlList, "AccountIsBlocked"); }); + it("GIVEN paused token WHEN batchSetAddressFrozen THEN fails with TokenIsPaused", async () => { + const userAddresses = [signer_D.address, signer_E.address]; + // grant KYC to signer_A.address + await kycFacet.grantKyc(signer_A.address, EMPTY_VC_ID, ZERO, MAX_UINT256, signer_E.address); + + await pauseFacet.connect(signer_B).pause(); + + // First, freeze the addresses + await expect(freezeFacet.batchSetAddressFrozen(userAddresses, [true, true])).to.revertedWithCustomError( + pauseFacet, + "TokenIsPaused", + ); + }); + + it("GIVEN invalid address WHEN batchSetAddressFrozen THEN fails with ZeroAddressNotAllowed", async () => { + const userAddresses = [signer_D.address, signer_E.address, ADDRESS_ZERO]; + // grant KYC to signer_A.address + await kycFacet.grantKyc(signer_A.address, EMPTY_VC_ID, ZERO, MAX_UINT256, signer_E.address); + + // First, freeze the addresses + await expect(freezeFacet.batchSetAddressFrozen(userAddresses, [true, true, true])).to.revertedWithCustomError( + freezeFacet, + "ZeroAddressNotAllowed", + ); + }); + it("GIVEN frozen addresses WHEN batchSetAddressFrozen with false THEN transfers from those addresses succeed", async () => { const userAddresses = [signer_D.address, signer_E.address]; // grant KYC to signer_A.address @@ -1597,6 +1773,33 @@ describe("ERC3643 Tests", () => { expect(hasRole).to.equal(true); }); + it("GIVEN an agent WHEN removing agent THEN removeAgent emits AgentRemoved and revokes role", async () => { + await erc3643Facet.addAgent(signer_B.address); + + expect(await erc3643Facet.removeAgent(signer_B.address)) + .to.emit(erc3643Facet, "AgentRemoved") + .withArgs(signer_B.address); + + const hasRole = await accessControlFacet.hasRole(ATS_ROLES._AGENT_ROLE, signer_B.address); + const isAgent = await erc3643Facet.isAgent(signer_B.address); + expect(isAgent).to.equal(false); + expect(hasRole).to.equal(false); + }); + + it("GIVEN a non-agent address WHEN removing agent THEN reverts with AccountNotAssignedToRole", async () => { + await expect(erc3643Facet.removeAgent(signer_C.address)) + .to.be.revertedWithCustomError(accessControlFacet, "AccountNotAssignedToRole") + .withArgs(ATS_ROLES._AGENT_ROLE, signer_C.address); + }); + + it("GIVEN an already-agent address WHEN adding agent again THEN reverts with AccountAssignedToRole", async () => { + await erc3643Facet.addAgent(signer_B.address); + + await expect(erc3643Facet.addAgent(signer_B.address)) + .to.be.revertedWithCustomError(accessControlFacet, "AccountAssignedToRole") + .withArgs(ATS_ROLES._AGENT_ROLE, signer_B.address); + }); + it("GIVEN a user with the agent role WHEN performing actions using ERC-1400 methods succeeds", async () => { await accessControlFacet.grantRole(ATS_ROLES._AGENT_ROLE, signer_B.address); const amount = 1000; @@ -1678,7 +1881,6 @@ describe("ERC3643 Tests", () => { ).to.be.rejectedWith("AccountHasNoRole"); }); it("GIVEN an account without TREX_OWNER role WHEN setCompliance THEN transaction fails with AccountHasNoRole", async () => { - // set compliance fails await expect(erc3643Facet.connect(signer_C).setCompliance(complianceMock.address)).to.be.rejectedWith( "AccountHasNoRole", ); @@ -1702,9 +1904,16 @@ describe("ERC3643 Tests", () => { ); }); - it("GIVEN an account without admin role WHEN addAgent THEN transaction fails with AccountHasNoRole", async () => { - // add agent fails + it("GIVEN an account without admin role WHEN addAgent or removeAgent THEN transaction fails with AccountHasNoRole", async () => { await expect(erc3643Facet.connect(signer_C).addAgent(signer_A.address)).to.be.rejectedWith("AccountHasNoRole"); + await expect(erc3643Facet.connect(signer_C).removeAgent(signer_A.address)).to.be.rejectedWith( + "AccountHasNoRole", + ); + }); + it("GIVEN an account without AGENT_ROLE role WHEN recoveryAddress THEN transaction fails with AccountHasNoRole", async () => { + await expect( + erc3643Facet.connect(signer_C).recoveryAddress(signer_A.address, signer_B.address, signer_C.address), + ).to.be.rejectedWith("AccountHasNoRole"); }); }); @@ -1735,13 +1944,34 @@ describe("ERC3643 Tests", () => { ); }); - it("GIVEN a paused token WHEN attempting to addAgent THEN transactions revert with TokenIsPaused error", async () => { + it("GIVEN a paused token WHEN batchFreezePartialTokens THEN transactions revert with TokenIsPaused error", async () => { + const userAddresses = [signer_D.address, signer_E.address]; + const amounts = [100, 100]; + + await expect(freezeFacet.batchFreezePartialTokens(userAddresses, amounts)).to.be.revertedWithCustomError( + pauseFacet, + "TokenIsPaused", + ); + }); + + it("GIVEN a paused token WHEN batchUnfreezePartialTokens THEN transactions revert with TokenIsPaused error", async () => { + const userAddresses = [signer_D.address, signer_E.address]; + const amounts = [100, 100]; + + await expect(freezeFacet.batchUnfreezePartialTokens(userAddresses, amounts)).to.be.revertedWithCustomError( + pauseFacet, + "TokenIsPaused", + ); + }); + + it("GIVEN a paused token WHEN attempting to addAgent or removeAgent THEN transactions revert with TokenIsPaused error", async () => { await expect(erc3643Facet.addAgent(signer_A.address)).to.be.rejectedWith("TokenIsPaused"); + await expect(erc3643Facet.removeAgent(signer_A.address)).to.be.rejectedWith("TokenIsPaused"); }); it("GIVEN a paused token WHEN attempting to update name or symbol THEN transactions revert with TokenIsPaused error", async () => { await expect(erc3643Facet.setName(newName)).to.be.rejectedWith("TokenIsPaused"); - await expect(erc3643Facet.setName(newSymbol)).to.be.rejectedWith("TokenIsPaused"); + await expect(erc3643Facet.setSymbol(newSymbol)).to.be.rejectedWith("TokenIsPaused"); await expect(erc3643Facet.setOnchainID(onchainId)).to.be.rejectedWith("TokenIsPaused"); await expect(erc3643Facet.setIdentityRegistry(identityRegistryMock.address)).to.be.rejectedWith( "TokenIsPaused", @@ -1828,6 +2058,121 @@ describe("ERC3643 Tests", () => { balance_Before_Partition_1.sub(_AMOUNT).mul(adjustFactor * adjustFactor), ); }); + + it("GIVEN frozen tokens WHEN ABAF changes and freezing again THEN frozen amount adjustment is applied", async () => { + // Grant necessary role for adjustBalances and connect to signer_A + await accessControlFacet.grantRole(ATS_ROLES._ADJUSTMENT_BALANCE_ROLE, signer_A.address); + const adjustBalancesFacetA = adjustBalancesFacet.connect(signer_A); + + const amount = 1000; + await erc1410Facet.issueByPartition({ + partition: DEFAULT_PARTITION, + tokenHolder: signer_E.address, + value: amount, + data: EMPTY_HEX_BYTES, + }); + + // Freeze tokens initially + await freezeFacet.freezePartialTokens(signer_E.address, amount / 2); + + const frozenBefore = await freezeFacet.getFrozenTokens(signer_E.address); + + // Change ABAF + await adjustBalancesFacetA.adjustBalances(2, 1); // 2x adjustment + + // Freeze more tokens - this should trigger _updateTotalFreezeAmountAndLabaf + await erc1410Facet.issueByPartition({ + partition: DEFAULT_PARTITION, + tokenHolder: signer_E.address, + value: amount, + data: EMPTY_HEX_BYTES, + }); + await freezeFacet.freezePartialTokens(signer_E.address, amount / 2); + + const frozenAfter = await freezeFacet.getFrozenTokens(signer_E.address); + + // The previously frozen amount should be adjusted by factor 2 + expect(frozenAfter).to.be.equal(frozenBefore.mul(2).add(amount / 2)); + }); + + it("GIVEN frozen tokens WHEN freezing again without ABAF change THEN factor equals 1", async () => { + const amount = 1000; + await erc1410Facet.issueByPartition({ + partition: DEFAULT_PARTITION, + tokenHolder: signer_E.address, + value: amount, + data: EMPTY_HEX_BYTES, + }); + + // Freeze tokens initially + await freezeFacet.freezePartialTokens(signer_E.address, amount / 2); + + const frozenBefore = await freezeFacet.getFrozenTokens(signer_E.address); + + // Freeze more tokens WITHOUT changing ABAF - this should hit the factor == 1 branch + await freezeFacet.freezePartialTokens(signer_E.address, amount / 4); + + const frozenAfter = await freezeFacet.getFrozenTokens(signer_E.address); + + // The frozen amount should just be sum (no factor adjustment) + expect(frozenAfter).to.be.equal(frozenBefore.add(amount / 4)); + }); + + it("GIVEN frozen tokens by partition WHEN checking total balance THEN frozen tokens are included", async () => { + await accessControlFacet.grantRole(ATS_ROLES._ADJUSTMENT_BALANCE_ROLE, signer_A.address); + await accessControlFacet.grantRole(ATS_ROLES._SNAPSHOT_ROLE, signer_A.address); + + const amount = 1000; + const frozenAmount = 300; + + await erc1410Facet.issueByPartition({ + partition: DEFAULT_PARTITION, + tokenHolder: signer_E.address, + value: amount, + data: EMPTY_HEX_BYTES, + }); + + // Freeze some tokens by partition + await freezeFacet.freezePartialTokens(signer_E.address, frozenAmount); + + // Take a snapshot - this will invoke _getTotalBalanceForByPartitionAdjusted + await snapshotFacet.connect(signer_A).takeSnapshot(); + + // Get balances before ABAF + const frozenBefore = await freezeFacet.getFrozenTokens(signer_E.address); + const freeBefore = await erc1410Facet.balanceOfByPartition(DEFAULT_PARTITION, signer_E.address); + + // Apply ABAF with factor 2 - this internally uses _getTotalBalanceForByPartitionAdjusted to calculate total balance + const decimals = await erc20Facet.decimals(); + await adjustBalancesFacet.connect(signer_A).adjustBalances(2, decimals); + + // Take another snapshot after ABAF to trigger _getTotalBalanceForByPartitionAdjusted again + await snapshotFacet.connect(signer_A).takeSnapshot(); + + // After ABAF, both free and frozen should be doubled + const frozenAfter = await freezeFacet.getFrozenTokens(signer_E.address); + const freeAfter = await erc1410Facet.balanceOfByPartition(DEFAULT_PARTITION, signer_E.address); + + // Verify _getTotalBalanceForByPartitionAdjusted was used: total = free + frozen, then multiplied by factor + expect(frozenAfter).to.equal(frozenBefore.mul(2)); + expect(freeAfter).to.equal(freeBefore.mul(2)); + expect(frozenAfter.add(freeAfter)).to.equal(amount * 2); + + // Verify snapshots captured the total balance including frozen tokens by partition + const snapshot1BalanceByPartition = await snapshotFacet.balanceOfAtSnapshotByPartition( + DEFAULT_PARTITION, + 1, + signer_E.address, + ); + const snapshot2BalanceByPartition = await snapshotFacet.balanceOfAtSnapshotByPartition( + DEFAULT_PARTITION, + 2, + signer_E.address, + ); + + expect(snapshot1BalanceByPartition).to.equal(amount - frozenAmount); + expect(snapshot2BalanceByPartition).to.equal((amount - frozenAmount) * 2); + }); }); describe("Recovery", () => { @@ -1955,15 +2300,11 @@ describe("ERC3643 Tests", () => { await accessControlFacet.grantRole(ProtectedPartitionRole_1, signer_A.address); await protectedPartitionsFacet.protectPartitions(); await expect( - erc1410Facet.protectedTransferFromByPartition( - DEFAULT_PARTITION, - signer_C.address, - signer_B.address, - amount, - MAX_UINT256, - 1, - "0x1234", - ), + erc1410Facet.protectedTransferFromByPartition(DEFAULT_PARTITION, signer_C.address, signer_B.address, amount, { + deadline: MAX_UINT256, + nounce: 1, + signature: "0x1234", + }), ).to.be.revertedWithCustomError(erc3643Facet, "WalletRecovered"); await protectedPartitionsFacet.unprotectPartitions(); const operatorTransferData = { @@ -2017,15 +2358,11 @@ describe("ERC3643 Tests", () => { ); await protectedPartitionsFacet.protectPartitions(); await expect( - erc1410Facet.protectedTransferFromByPartition( - DEFAULT_PARTITION, - signer_B.address, - signer_C.address, - amount, - MAX_UINT256, - 1, - "0x1234", - ), + erc1410Facet.protectedTransferFromByPartition(DEFAULT_PARTITION, signer_B.address, signer_C.address, amount, { + deadline: MAX_UINT256, + nounce: 1, + signature: "0x1234", + }), ).to.be.revertedWithCustomError(erc3643Facet, "WalletRecovered"); await protectedPartitionsFacet.unprotectPartitions(); operatorTransferData.to = signer_C.address; @@ -2083,14 +2420,11 @@ describe("ERC3643 Tests", () => { ); await protectedPartitionsFacet.protectPartitions(); await expect( - erc1410Facet.protectedRedeemFromByPartition( - DEFAULT_PARTITION, - signer_C.address, - amount, - MAX_UINT256, - 1, - "0x1234", - ), + erc1410Facet.protectedRedeemFromByPartition(DEFAULT_PARTITION, signer_C.address, amount, { + deadline: MAX_UINT256, + nounce: 1, + signature: "0x1234", + }), ).to.be.revertedWithCustomError(erc3643Facet, "WalletRecovered"); await protectedPartitionsFacet.unprotectPartitions(); await expect( @@ -2423,6 +2757,13 @@ describe("ERC3643 Tests", () => { "WalletRecovered", ); }); + it("GIVEN a recovered wallet WHEN recoveryAddress THEN transaction fails with WalletRecovered", async () => { + await erc3643Facet.recoveryAddress(signer_A.address, signer_B.address, ADDRESS_ZERO); + + await expect( + erc3643Facet.recoveryAddress(signer_A.address, signer_B.address, ADDRESS_ZERO), + ).to.be.revertedWithCustomError(erc3643Facet, "WalletRecovered"); + }); }); }); @@ -2449,9 +2790,9 @@ describe("ERC3643 Tests", () => { accessControlFacet = await ethers.getContractAt("AccessControl", diamond.address); - pauseFacet = await ethers.getContractAt("Pause", diamond.address); + pauseFacet = await ethers.getContractAt("PauseFacet", diamond.address); - controlList = await ethers.getContractAt("ControlList", diamond.address); + controlList = await ethers.getContractAt("ControlListFacet", diamond.address); erc3643Facet = await ethers.getContractAt("IERC3643", diamond.address); @@ -2552,4 +2893,88 @@ describe("ERC3643 Tests", () => { }); }); }); + + describe("Token is controllable", () => { + async function deployERC3643TokenIsControllableFixture() { + const base = await deployEquityTokenFixture({ + equityDataParams: { + securityData: { + isControllable: false, + maxSupply: MAX_SUPPLY, + }, + }, + }); + diamond = base.diamond; + await executeRbac(base.accessControlFacet, [ + { + role: ATS_ROLES._CONTROLLER_ROLE, + members: [signer_A.address], + }, + { + role: ATS_ROLES._ISSUER_ROLE, + members: [signer_A.address], + }, + { + role: ATS_ROLES._KYC_ROLE, + members: [signer_A.address], + }, + { + role: ATS_ROLES._SSI_MANAGER_ROLE, + members: [signer_A.address], + }, + ]); + accessControlFacet = await ethers.getContractAt("AccessControl", diamond.address); + + pauseFacet = await ethers.getContractAt("PauseFacet", diamond.address); + + controlList = await ethers.getContractAt("ControlListFacet", diamond.address); + + erc3643Facet = await ethers.getContractAt("IERC3643", diamond.address); + erc1594Facet = await ethers.getContractAt("ERC1594Facet", diamond.address); + + clearingActionsFacet = await ethers.getContractAt("ClearingActionsFacet", diamond.address, signer_B); + freezeFacet = await ethers.getContractAt("FreezeFacet", diamond.address); + kycFacet = await ethers.getContractAt("KycFacet", diamond.address, signer_A); + ssiManagementFacet = await ethers.getContractAt("SsiManagementFacet", diamond.address, signer_A); + await ssiManagementFacet.addIssuer(signer_A.address); + await kycFacet.grantKyc(signer_F.address, EMPTY_VC_ID, ZERO, MAX_UINT256, signer_A.address); + await kycFacet.grantKyc(signer_D.address, EMPTY_VC_ID, ZERO, MAX_UINT256, signer_A.address); + + await erc3643Facet.mint(signer_D.address, AMOUNT); + } + + beforeEach(async () => { + await loadFixture(deployERC3643TokenIsControllableFixture); + }); + + it("GIVEN token is not controllable WHEN batchBurn THEN transaction fails with TokenIsNotControllable", async () => { + const userAddresses = [signer_D.address]; + const amounts = [AMOUNT]; + + await expect(erc3643Facet.connect(signer_A).batchBurn(userAddresses, amounts)).to.be.revertedWithCustomError( + erc1594Facet, + "TokenIsNotControllable", + ); + }); + it("GIVEN token is not controllable WHEN batchForcedTransfer THEN transaction fails with TokenIsNotControllable", async () => { + const fromList = [signer_F.address]; + const toList = [signer_E.address]; + const amounts = [AMOUNT]; + + await expect( + erc3643Facet.connect(signer_A).batchForcedTransfer(fromList, toList, amounts), + ).to.be.revertedWithCustomError(erc1594Facet, "TokenIsNotControllable"); + }); + it("GIVEN token is controllable WHEN burning THEN transaction fails with TokenIsNotControllable", async () => { + await expect(erc3643Facet.burn(signer_E.address, AMOUNT)).to.be.revertedWithCustomError( + erc1594Facet, + "TokenIsNotControllable", + ); + }); + it("GIVEN token is controllable WHEN forcedTransfer THEN transaction fails with TokenIsNotControllable", async () => { + await expect( + erc3643Facet.forcedTransfer(signer_E.address, signer_D.address, AMOUNT), + ).to.be.revertedWithCustomError(erc1594Facet, "TokenIsNotControllable"); + }); + }); }); diff --git a/packages/ats/contracts/test/contracts/unit/layer_1/accessControl/accessControl.test.ts b/packages/ats/contracts/test/contracts/unit/layer_1/accessControl/accessControl.test.ts index b809e51c0..d8d7607f6 100644 --- a/packages/ats/contracts/test/contracts/unit/layer_1/accessControl/accessControl.test.ts +++ b/packages/ats/contracts/test/contracts/unit/layer_1/accessControl/accessControl.test.ts @@ -1,6 +1,6 @@ import { expect } from "chai"; import { SignerWithAddress } from "@nomiclabs/hardhat-ethers/signers.js"; -import { type ResolverProxy, type AccessControl, PauseFacet } from "@contract-types"; +import { type ResolverProxy, type AccessControlFacet, PauseFacet } from "@contract-types"; import { ATS_ROLES } from "@scripts"; import { deployEquityTokenFixture } from "@test"; import { executeRbac } from "@test"; @@ -10,7 +10,7 @@ import { loadFixture } from "@nomicfoundation/hardhat-network-helpers"; describe("Access Control Tests", () => { let diamond: ResolverProxy; let pauseFacet: PauseFacet; - let accessControlFacet: AccessControl; + let accessControlFacet: AccessControlFacet; let deployer: SignerWithAddress; let signer_B: SignerWithAddress; let signer_C: SignerWithAddress; @@ -26,7 +26,7 @@ describe("Access Control Tests", () => { }, ]); - accessControlFacet = await ethers.getContractAt("AccessControl", diamond.address); + accessControlFacet = await ethers.getContractAt("AccessControlFacet", diamond.address); deployer = base.deployer; pauseFacet = base.pauseFacet; signer_B = base.user1; @@ -268,4 +268,37 @@ describe("Access Control Tests", () => { expect(rolesFor_C.length).to.equal(roleCountFor_C); expect(rolesFor_C[0].toUpperCase()).to.equal(ATS_ROLES._PAUSER_ROLE.toUpperCase()); }); + + it("GIVEN an account that already has a role WHEN grantRole is called again THEN transaction fails with AccountAssignedToRole", async () => { + // Grant the role first time + await accessControlFacet.connect(deployer).grantRole(ATS_ROLES._PAUSER_ROLE, unknownSigner.address); + + // Verify role was granted + expect(await accessControlFacet.hasRole(ATS_ROLES._PAUSER_ROLE, unknownSigner.address)).to.equal(true); + + // Try to grant the same role again and expect it to fail + await expect(accessControlFacet.connect(deployer).grantRole(ATS_ROLES._PAUSER_ROLE, unknownSigner.address)) + .to.be.revertedWithCustomError(accessControlFacet, "AccountAssignedToRole") + .withArgs(ATS_ROLES._PAUSER_ROLE, unknownSigner.address); + }); + + it("GIVEN an account without a specific role WHEN revokeRole is called THEN transaction fails with AccountNotAssignedToRole", async () => { + // Verify that the account does not have the role + expect(await accessControlFacet.hasRole(ATS_ROLES._PAUSER_ROLE, unknownSigner.address)).to.equal(false); + + // Try to revoke a role that the account doesn't have + await expect(accessControlFacet.connect(deployer).revokeRole(ATS_ROLES._PAUSER_ROLE, unknownSigner.address)) + .to.be.revertedWithCustomError(accessControlFacet, "AccountNotAssignedToRole") + .withArgs(ATS_ROLES._PAUSER_ROLE, unknownSigner.address); + }); + + it("GIVEN an account without a specific role WHEN renounceRole is called THEN transaction fails with AccountNotAssignedToRole", async () => { + // Verify that the account does not have the role + expect(await accessControlFacet.hasRole(ATS_ROLES._PAUSER_ROLE, unknownSigner.address)).to.equal(false); + + // Try to renounce a role that the account doesn't have + await expect(accessControlFacet.connect(unknownSigner).renounceRole(ATS_ROLES._PAUSER_ROLE)) + .to.be.revertedWithCustomError(accessControlFacet, "AccountNotAssignedToRole") + .withArgs(ATS_ROLES._PAUSER_ROLE, unknownSigner.address); + }); }); diff --git a/packages/ats/contracts/test/contracts/unit/layer_1/adjustBalances/adjustBalances.test.ts b/packages/ats/contracts/test/contracts/unit/layer_1/adjustBalances/adjustBalances.test.ts index 8315b6007..90021d9f5 100644 --- a/packages/ats/contracts/test/contracts/unit/layer_1/adjustBalances/adjustBalances.test.ts +++ b/packages/ats/contracts/test/contracts/unit/layer_1/adjustBalances/adjustBalances.test.ts @@ -3,7 +3,7 @@ import { ethers } from "hardhat"; import { SignerWithAddress } from "@nomiclabs/hardhat-ethers/signers.js"; import { type ResolverProxy, - type AdjustBalances, + type AdjustBalancesFacet, type Pause, type IERC1410, type AccessControl, @@ -33,7 +33,7 @@ describe("Adjust Balances Tests", () => { let signer_C: SignerWithAddress; let erc1410Facet: IERC1410; - let adjustBalancesFacet: AdjustBalances; + let adjustBalancesFacet: AdjustBalancesFacet; let accessControlFacet: AccessControl; let pauseFacet: Pause; let equityFacet: Equity; @@ -73,7 +73,7 @@ describe("Adjust Balances Tests", () => { erc1410Facet = await ethers.getContractAt("IERC1410", diamond.address); - adjustBalancesFacet = await ethers.getContractAt("AdjustBalances", diamond.address); + adjustBalancesFacet = await ethers.getContractAt("AdjustBalancesFacet", diamond.address); pauseFacet = await ethers.getContractAt("Pause", diamond.address); diff --git a/packages/ats/contracts/test/contracts/unit/layer_1/bond/bond.test.ts b/packages/ats/contracts/test/contracts/unit/layer_1/bond/bond.test.ts index 662f7e28c..bc9f0c076 100644 --- a/packages/ats/contracts/test/contracts/unit/layer_1/bond/bond.test.ts +++ b/packages/ats/contracts/test/contracts/unit/layer_1/bond/bond.test.ts @@ -4,7 +4,7 @@ import { BigNumber } from "ethers"; import { SignerWithAddress } from "@nomiclabs/hardhat-ethers/signers.js"; import { ResolverProxy, - BondUSA, + BondUSAFacet, AccessControl, Pause, Lock, @@ -22,7 +22,6 @@ import { } from "@contract-types"; import { DEFAULT_PARTITION, - dateToUnixTimestamp, ATS_ROLES, TIME_PERIODS_S, ADDRESS_ZERO, @@ -30,7 +29,7 @@ import { EMPTY_HEX_BYTES, EMPTY_STRING, } from "@scripts"; -import { grantRoleAndPauseToken } from "@test"; +import { getBondDetails, getDltTimestamp, grantRoleAndPauseToken } from "@test"; import { loadFixture } from "@nomicfoundation/hardhat-network-helpers"; import { deployBondTokenFixture } from "@test"; import { executeRbac, MAX_UINT256 } from "@test"; @@ -48,16 +47,23 @@ let couponExecutionDateInSeconds = 0; const couponRate = 50; const couponRateDecimals = 1; const couponPeriod = TIME_PERIODS_S.WEEK; +let couponFixingDateInSeconds = 0; +let couponEndDateInSeconds = 0; +let couponStartDateInSeconds = 0; const EMPTY_VC_ID = EMPTY_STRING; const YEAR_SECONDS = 365 * 24 * 60 * 60; const DECIMALS = 6; +const couponRateStatus = 1; let couponData = { recordDate: couponRecordDateInSeconds.toString(), executionDate: couponExecutionDateInSeconds.toString(), rate: couponRate, rateDecimals: couponRateDecimals, - period: couponPeriod, + startDate: couponStartDateInSeconds.toString(), + endDate: couponEndDateInSeconds.toString(), + fixingDate: couponFixingDateInSeconds.toString(), + rateStatus: couponRateStatus, }; describe("Bond Tests", () => { @@ -67,7 +73,7 @@ describe("Bond Tests", () => { let signer_C: SignerWithAddress; let signer_D: SignerWithAddress; - let bondFacet: BondUSA; + let bondFacet: BondUSAFacet; let bondReadFacet: BondUSAReadFacet; let accessControlFacet: AccessControl; let pauseFacet: Pause; @@ -164,21 +170,56 @@ describe("Bond Tests", () => { await kycFacet.grantKyc(signer_A.address, EMPTY_VC_ID, ZERO, MAX_UINT256, signer_A.address); } - beforeEach(async () => { - startingDate = dateToUnixTimestamp(`2030-01-01T00:00:35Z`); + before(async () => { + const currentTimestamp = await getDltTimestamp(); + startingDate = currentTimestamp + TIME_PERIODS_S.DAY; maturityDate = startingDate + numberOfCoupons * frequency; - couponRecordDateInSeconds = dateToUnixTimestamp(`2030-01-01T00:01:00Z`); - couponExecutionDateInSeconds = dateToUnixTimestamp(`2030-01-01T00:10:00Z`); + }); + + beforeEach(async () => { + const currentTimestamp = await getDltTimestamp(); + couponRecordDateInSeconds = currentTimestamp + 400; + couponExecutionDateInSeconds = currentTimestamp + 1200; + couponFixingDateInSeconds = currentTimestamp + 1200; + couponEndDateInSeconds = couponFixingDateInSeconds - 1; + couponStartDateInSeconds = couponEndDateInSeconds - couponPeriod; couponData = { recordDate: couponRecordDateInSeconds.toString(), executionDate: couponExecutionDateInSeconds.toString(), rate: couponRate, rateDecimals: couponRateDecimals, - period: couponPeriod, + startDate: couponStartDateInSeconds.toString(), + endDate: couponEndDateInSeconds.toString(), + fixingDate: couponFixingDateInSeconds.toString(), + rateStatus: 1, }; await loadFixture(deploySecurityFixture); }); + describe("Initialization", () => { + it("GIVEN an initialized bond WHEN trying to initialize again THEN transaction fails with AlreadyInitialized", async () => { + const regulationData = { + regulationType: 1, // REG_S + regulationSubType: 0, // NONE + dealSize: 0, + accreditedInvestors: 1, // ACCREDITATION_REQUIRED + maxNonAccreditedInvestors: 0, + manualInvestorVerification: 1, // VERIFICATION_INVESTORS_FINANCIAL_DOCUMENTS_REQUIRED + internationalInvestors: 1, // ALLOWED + resaleHoldPeriod: 0, // NOT_APPLICABLE + }; + + const additionalSecurityData = { + countriesControlListType: false, + listOfCountries: "", + info: "", + }; + await expect( + bondFacet._initialize_bondUSA(await getBondDetails(), regulationData, additionalSecurityData), + ).to.be.rejectedWith("AlreadyInitialized"); + }); + }); + describe("Single Partition", () => { it("GIVEN token holder WHEN getting principal For THEN succeeds", async () => { await accessControlFacet.connect(signer_A).grantRole(ATS_ROLES._ISSUER_ROLE, signer_C.address); @@ -370,7 +411,10 @@ describe("Bond Tests", () => { executionDate: couponRecordDateInSeconds.toString(), rate: couponRate, rateDecimals: couponRateDecimals, - period: couponPeriod, + startDate: couponStartDateInSeconds.toString(), + endDate: couponEndDateInSeconds.toString(), + fixingDate: couponFixingDateInSeconds.toString(), + rateStatus: couponRateStatus, }; await expect(bondFacet.connect(signer_C).setCoupon(wrongcouponData_1)).to.be.revertedWithCustomError( @@ -383,7 +427,10 @@ describe("Bond Tests", () => { executionDate: couponExecutionDateInSeconds.toString(), rate: couponRate, rateDecimals: couponRateDecimals, - period: couponPeriod, + startDate: couponStartDateInSeconds.toString(), + endDate: couponEndDateInSeconds.toString(), + fixingDate: couponFixingDateInSeconds.toString(), + rateStatus: couponRateStatus, }; await expect(bondFacet.connect(signer_C).setCoupon(wrongcouponData_2)).to.be.revertedWithCustomError( @@ -397,35 +444,41 @@ describe("Bond Tests", () => { // Create coupon with specific period const customPeriod = 3 * 24 * 60 * 60; // 3 days in seconds + const customStartDate = couponEndDateInSeconds - customPeriod; const customCouponData = { recordDate: couponRecordDateInSeconds.toString(), executionDate: couponExecutionDateInSeconds.toString(), rate: couponRate, rateDecimals: couponRateDecimals, - period: customPeriod, + startDate: customStartDate.toString(), + endDate: couponEndDateInSeconds.toString(), + fixingDate: couponFixingDateInSeconds.toString(), + rateStatus: couponRateStatus, }; // Set coupon and verify event includes period await expect(bondFacet.connect(signer_C).setCoupon(customCouponData)) .to.emit(bondFacet, "CouponSet") - .withArgs( - "0x0000000000000000000000000000000000000000000000000000000000000001", - 1, - signer_C.address, + .withArgs("0x0000000000000000000000000000000000000000000000000000000000000001", 1, signer_C.address, [ couponRecordDateInSeconds, couponExecutionDateInSeconds, + customStartDate, + couponEndDateInSeconds, + couponFixingDateInSeconds, couponRate, couponRateDecimals, - customPeriod, - ); + couponRateStatus, + ]); // Verify coupon data includes period const registeredCoupon = await bondReadFacet.getCoupon(1); - expect(registeredCoupon.coupon.period).to.equal(customPeriod); + expect(registeredCoupon.coupon.endDate).to.equal(couponEndDateInSeconds); + expect(registeredCoupon.coupon.startDate).to.equal(customStartDate); // Verify couponFor data includes period const couponFor = await bondReadFacet.getCouponFor(1, signer_A.address); - expect(couponFor.period).to.equal(customPeriod); + expect(couponFor.coupon.endDate).to.equal(couponEndDateInSeconds); + expect(couponFor.coupon.startDate).to.equal(customStartDate); }); it("GIVEN an account with corporateActions role WHEN setCoupon with period 0 THEN transaction succeeds", async () => { @@ -441,21 +494,24 @@ describe("Bond Tests", () => { executionDate: couponExecutionDateInSeconds.toString(), rate: couponRate, rateDecimals: couponRateDecimals, - period: 0, + startDate: couponEndDateInSeconds.toString(), + endDate: couponEndDateInSeconds.toString(), + fixingDate: couponFixingDateInSeconds.toString(), + rateStatus: couponRateStatus, }; await expect(bondFacet.setCoupon(minValidPeriodCouponData)) .to.emit(bondFacet, "CouponSet") - .withArgs( - "0x0000000000000000000000000000000000000000000000000000000000000001", - 1, - signer_C.address, + .withArgs("0x0000000000000000000000000000000000000000000000000000000000000001", 1, signer_C.address, [ couponRecordDateInSeconds, couponExecutionDateInSeconds, + couponEndDateInSeconds, + couponEndDateInSeconds, + couponFixingDateInSeconds, couponRate, couponRateDecimals, - 0, - ); + couponRateStatus, + ]); }); it("GIVEN an account with corporateActions role WHEN setCoupon THEN transaction succeeds", async () => { @@ -464,16 +520,16 @@ describe("Bond Tests", () => { // set coupon await expect(bondFacet.connect(signer_C).setCoupon(couponData)) .to.emit(bondFacet, "CouponSet") - .withArgs( - "0x0000000000000000000000000000000000000000000000000000000000000001", - 1, - signer_C.address, + .withArgs("0x0000000000000000000000000000000000000000000000000000000000000001", 1, signer_C.address, [ couponRecordDateInSeconds, couponExecutionDateInSeconds, + couponStartDateInSeconds, + couponEndDateInSeconds, + couponFixingDateInSeconds, couponRate, couponRateDecimals, - couponPeriod, - ); + couponRateStatus, + ]); // check list members await expect(bondReadFacet.getCoupon(1000)).to.be.rejectedWith("WrongIndexForAction"); @@ -491,10 +547,20 @@ describe("Bond Tests", () => { expect(coupon.coupon.executionDate).to.equal(couponExecutionDateInSeconds); expect(coupon.coupon.rate).to.equal(couponRate); expect(coupon.coupon.rateDecimals).to.equal(couponRateDecimals); - expect(couponFor.recordDate).to.equal(couponRecordDateInSeconds); - expect(couponFor.executionDate).to.equal(couponExecutionDateInSeconds); - expect(couponFor.rate).to.equal(couponRate); - expect(couponFor.rateDecimals).to.equal(couponRateDecimals); + expect(coupon.coupon.startDate).to.equal(couponStartDateInSeconds); + expect(coupon.coupon.endDate).to.equal(couponEndDateInSeconds); + expect(coupon.coupon.fixingDate).to.equal(couponFixingDateInSeconds); + expect(coupon.coupon.rateStatus).to.equal(couponRateStatus); + + expect(couponFor.coupon.recordDate).to.equal(couponRecordDateInSeconds); + expect(couponFor.coupon.executionDate).to.equal(couponExecutionDateInSeconds); + expect(couponFor.coupon.rate).to.equal(couponRate); + expect(couponFor.coupon.rateDecimals).to.equal(couponRateDecimals); + expect(couponFor.coupon.startDate).to.equal(couponStartDateInSeconds); + expect(couponFor.coupon.endDate).to.equal(couponEndDateInSeconds); + expect(couponFor.coupon.fixingDate).to.equal(couponFixingDateInSeconds); + expect(couponFor.coupon.rateStatus).to.equal(couponRateStatus); + expect(couponFor.tokenBalance).to.equal(0); expect(couponFor.recordDateReached).to.equal(false); expect(couponTotalHolders).to.equal(0); @@ -525,16 +591,16 @@ describe("Bond Tests", () => { // set coupon await expect(bondFacet.connect(signer_C).setCoupon(couponData)) .to.emit(bondFacet, "CouponSet") - .withArgs( - "0x0000000000000000000000000000000000000000000000000000000000000001", - 1, - signer_C.address, + .withArgs("0x0000000000000000000000000000000000000000000000000000000000000001", 1, signer_C.address, [ couponRecordDateInSeconds, couponExecutionDateInSeconds, + couponStartDateInSeconds, + couponEndDateInSeconds, + couponFixingDateInSeconds, couponRate, couponRateDecimals, - couponPeriod, - ); + couponRateStatus, + ]); // check list members await timeTravelFacet.changeSystemTimestamp(couponRecordDateInSeconds + 1); @@ -545,6 +611,7 @@ describe("Bond Tests", () => { const bondDetails = await bondReadFacet.getBondDetails(); const couponTotalHolders = await bondReadFacet.getTotalCouponHolders(1); const couponHolders = await bondReadFacet.getCouponHolders(1, 0, couponTotalHolders); + const period = couponFor.coupon.endDate.sub(couponFor.coupon.startDate); expect(couponFor.tokenBalance).to.equal(TotalAmount); expect(couponFor.recordDateReached).to.equal(true); @@ -553,12 +620,12 @@ describe("Bond Tests", () => { expect(couponHolders).to.have.members([signer_A.address]); expect(couponAmountFor.recordDateReached).to.equal(couponFor.recordDateReached); expect(couponAmountFor.numerator).to.equal( - couponFor.tokenBalance.mul(bondDetails.nominalValue).mul(couponFor.rate).mul(couponFor.period), + couponFor.tokenBalance.mul(bondDetails.nominalValue).mul(couponFor.coupon.rate).mul(period), ); expect(couponAmountFor.denominator).to.equal( - BigNumber.from(10 ** (couponFor.decimals + bondDetails.nominalValueDecimals + couponFor.rateDecimals)).mul( - YEAR_SECONDS, - ), + BigNumber.from( + 10 ** (couponFor.decimals + bondDetails.nominalValueDecimals + couponFor.coupon.rateDecimals), + ).mul(YEAR_SECONDS), ); }); @@ -590,16 +657,16 @@ describe("Bond Tests", () => { // set coupon await expect(bondFacet.connect(signer_C).setCoupon(couponData)) .to.emit(bondFacet, "CouponSet") - .withArgs( - "0x0000000000000000000000000000000000000000000000000000000000000001", - 1, - signer_C.address, + .withArgs("0x0000000000000000000000000000000000000000000000000000000000000001", 1, signer_C.address, [ couponRecordDateInSeconds, couponExecutionDateInSeconds, + couponStartDateInSeconds, + couponEndDateInSeconds, + couponFixingDateInSeconds, couponRate, couponRateDecimals, - couponPeriod, - ); + couponRateStatus, + ]); // check list members await timeTravelFacet.changeSystemTimestamp(couponRecordDateInSeconds + 1); @@ -610,6 +677,7 @@ describe("Bond Tests", () => { const bondDetails = await bondReadFacet.getBondDetails(); const couponTotalHolders = await bondReadFacet.getTotalCouponHolders(1); const couponHolders = await bondReadFacet.getCouponHolders(1, 0, couponTotalHolders); + const period = couponFor.coupon.endDate.sub(couponFor.coupon.startDate); expect(couponFor.tokenBalance).to.equal(TotalAmount); expect(couponFor.recordDateReached).to.equal(true); @@ -618,12 +686,12 @@ describe("Bond Tests", () => { expect(couponHolders).to.have.members([signer_A.address]); expect(couponAmountFor.recordDateReached).to.equal(couponFor.recordDateReached); expect(couponAmountFor.numerator).to.equal( - couponFor.tokenBalance.mul(bondDetails.nominalValue).mul(couponFor.rate).mul(couponFor.period), + couponFor.tokenBalance.mul(bondDetails.nominalValue).mul(couponFor.coupon.rate).mul(period), ); expect(couponAmountFor.denominator).to.equal( - BigNumber.from(10 ** (couponFor.decimals + bondDetails.nominalValueDecimals + couponFor.rateDecimals)).mul( - YEAR_SECONDS, - ), + BigNumber.from( + 10 ** (couponFor.decimals + bondDetails.nominalValueDecimals + couponFor.coupon.rateDecimals), + ).mul(YEAR_SECONDS), ); }); @@ -741,7 +809,7 @@ describe("Bond Tests", () => { const clearingOperation = { partition: DEFAULT_PARTITION, - expirationTimestamp: dateToUnixTimestamp("2030-01-01T00:00:09Z"), + expirationTimestamp: (await getDltTimestamp()) + 500, data: EMPTY_HEX_BYTES, }; @@ -750,16 +818,16 @@ describe("Bond Tests", () => { // set coupon await expect(bondFacet.connect(signer_C).setCoupon(couponData)) .to.emit(bondFacet, "CouponSet") - .withArgs( - "0x0000000000000000000000000000000000000000000000000000000000000001", - 1, - signer_C.address, + .withArgs("0x0000000000000000000000000000000000000000000000000000000000000001", 1, signer_C.address, [ couponRecordDateInSeconds, couponExecutionDateInSeconds, + couponStartDateInSeconds, + couponEndDateInSeconds, + couponFixingDateInSeconds, couponRate, couponRateDecimals, - couponPeriod, - ); + couponRateStatus, + ]); // --- Pre: before record date -> tokenBalance should be 0 and not reached const before = await bondReadFacet.getCouponFor(1, signer_A.address); @@ -778,16 +846,17 @@ describe("Bond Tests", () => { const couponFor = await bondReadFacet.getCouponFor(1, signer_A.address); const couponAmountForAfter = await bondReadFacet.getCouponAmountFor(1, signer_A.address); const bondDetails = await bondReadFacet.getBondDetails(); + const period = couponFor.coupon.endDate.sub(couponFor.coupon.startDate); expect(couponFor.recordDateReached).to.equal(true); expect(couponFor.tokenBalance).to.equal(totalAmount); // normal+cleared+held+locked+frozen expect(couponAmountForAfter.recordDateReached).to.equal(couponFor.recordDateReached); expect(couponAmountForAfter.numerator).to.equal( - couponFor.tokenBalance.mul(bondDetails.nominalValue).mul(couponFor.rate).mul(couponFor.period), + couponFor.tokenBalance.mul(bondDetails.nominalValue).mul(couponFor.coupon.rate).mul(period), ); expect(couponAmountForAfter.denominator).to.equal( - BigNumber.from(10 ** (couponFor.decimals + bondDetails.nominalValueDecimals + couponFor.rateDecimals)).mul( - YEAR_SECONDS, - ), + BigNumber.from( + 10 ** (couponFor.decimals + bondDetails.nominalValueDecimals + couponFor.coupon.rateDecimals), + ).mul(YEAR_SECONDS), ); }); }); @@ -860,5 +929,270 @@ describe("Bond Tests", () => { .to.emit(bondFacet, "RedeemedByPartition") .withArgs(DEFAULT_PARTITION, signer_A.address, signer_A.address, amount, "0x", "0x"); }); + + it("GIVEN a coupon with snapshot WHEN getCouponHolders is called THEN returns token holders from snapshot", async () => { + await deploySecurityFixture(true); + + const TotalAmount = 1000; + await accessControlFacet.connect(signer_A).grantRole(ATS_ROLES._CORPORATE_ACTION_ROLE, signer_A.address); + await accessControlFacet.connect(signer_A).grantRole(ATS_ROLES._ISSUER_ROLE, signer_A.address); + + // Grant KYC to signer_B for issuing tokens later + await kycFacet.connect(signer_B).grantKyc(signer_B.address, EMPTY_VC_ID, ZERO, MAX_UINT256, signer_A.address); + + await erc1410Facet.connect(signer_A).issueByPartition({ + partition: DEFAULT_PARTITION, + tokenHolder: signer_A.address, + value: TotalAmount, + data: "0x", + }); + + couponRecordDateInSeconds = (await getDltTimestamp()) + 1000; + couponExecutionDateInSeconds = (await getDltTimestamp()) + 2000; + + const couponData = { + recordDate: couponRecordDateInSeconds.toString(), + executionDate: couponExecutionDateInSeconds.toString(), + rate: couponRate, + rateDecimals: couponRateDecimals, + startDate: couponStartDateInSeconds.toString(), + endDate: couponEndDateInSeconds.toString(), + fixingDate: couponFixingDateInSeconds.toString(), + rateStatus: couponRateStatus, + }; + + await bondFacet.connect(signer_A).setCoupon(couponData); + + // Time travel past record date + await timeTravelFacet.changeSystemTimestamp(couponRecordDateInSeconds + 1); + + // Trigger scheduled tasks by performing an action (issue more tokens to signer_B) + await erc1410Facet.connect(signer_A).issueByPartition({ + partition: DEFAULT_PARTITION, + tokenHolder: signer_B.address, + value: 500, + data: "0x", + }); + + const coupon = await bondReadFacet.getCoupon(1); + const couponTotalHolders = await bondReadFacet.getTotalCouponHolders(1); + const couponHolders = await bondReadFacet.getCouponHolders(1, 0, couponTotalHolders); + + expect(coupon.snapshotId).to.be.greaterThan(0); // Snapshot should have been taken + expect(couponTotalHolders).to.equal(1); + expect(couponHolders).to.have.members([signer_A.address]); + }); + + it("GIVEN a coupon without snapshot WHEN getCouponFor is called after record date THEN uses current balance", async () => { + await deploySecurityFixture(true); + + const TotalAmount = 1000; + await accessControlFacet.connect(signer_A).grantRole(ATS_ROLES._CORPORATE_ACTION_ROLE, signer_A.address); + await accessControlFacet.connect(signer_A).grantRole(ATS_ROLES._ISSUER_ROLE, signer_A.address); + + await erc1410Facet.connect(signer_A).issueByPartition({ + partition: DEFAULT_PARTITION, + tokenHolder: signer_A.address, + value: TotalAmount, + data: "0x", + }); + + couponRecordDateInSeconds = (await getDltTimestamp()) + 1000; + couponExecutionDateInSeconds = (await getDltTimestamp()) + 2000; + + const couponData = { + recordDate: couponRecordDateInSeconds.toString(), + executionDate: couponExecutionDateInSeconds.toString(), + rate: couponRate, + rateDecimals: couponRateDecimals, + startDate: couponStartDateInSeconds.toString(), + endDate: couponEndDateInSeconds.toString(), + fixingDate: couponFixingDateInSeconds.toString(), + rateStatus: couponRateStatus, + }; + + await bondFacet.connect(signer_A).setCoupon(couponData); + + // Time travel past record date but DON'T trigger snapshot + await timeTravelFacet.changeSystemTimestamp(couponRecordDateInSeconds + 1); + + // Query couponFor without triggering snapshot - should use current balance path + const couponFor = await bondReadFacet.getCouponFor(1, signer_A.address); + const coupon = await bondReadFacet.getCoupon(1); + + expect(coupon.snapshotId).to.equal(0); // No snapshot taken + expect(couponFor.recordDateReached).to.be.true; + expect(couponFor.tokenBalance).to.equal(TotalAmount); + }); + + it("GIVEN a coupon WHEN getCoupon is called THEN decodes coupon data", async () => { + await deploySecurityFixture(true); + + await accessControlFacet.connect(signer_A).grantRole(ATS_ROLES._CORPORATE_ACTION_ROLE, signer_A.address); + + couponRecordDateInSeconds = (await getDltTimestamp()) + 1000; + couponExecutionDateInSeconds = (await getDltTimestamp()) + 2000; + + const couponData = { + recordDate: couponRecordDateInSeconds.toString(), + executionDate: couponExecutionDateInSeconds.toString(), + rate: couponRate, + rateDecimals: couponRateDecimals, + startDate: couponStartDateInSeconds.toString(), + endDate: couponEndDateInSeconds.toString(), + fixingDate: couponFixingDateInSeconds.toString(), + rateStatus: couponRateStatus, + }; + + await bondFacet.connect(signer_A).setCoupon(couponData); + + const coupon = await bondReadFacet.getCoupon(1); + + expect(coupon.coupon.recordDate).to.equal(couponRecordDateInSeconds); + expect(coupon.coupon.executionDate).to.equal(couponExecutionDateInSeconds); + expect(coupon.coupon.rate).to.equal(couponRate); + expect(coupon.coupon.rateDecimals).to.equal(couponRateDecimals); + expect(coupon.coupon.startDate).to.equal(couponStartDateInSeconds); + expect(coupon.coupon.endDate).to.equal(couponEndDateInSeconds); + expect(coupon.coupon.fixingDate).to.equal(couponFixingDateInSeconds); + expect(coupon.coupon.rateStatus).to.equal(couponRateStatus); + }); + + it("GIVEN a non-coupon corporate action WHEN getCouponFor is called THEN transaction fails with WrongActionType", async () => { + await deploySecurityFixture(true); + + await accessControlFacet.connect(signer_A).grantRole(ATS_ROLES._CORPORATE_ACTION_ROLE, signer_A.address); + + couponRecordDateInSeconds = (await getDltTimestamp()) + 1000; + couponExecutionDateInSeconds = (await getDltTimestamp()) + 2000; + + const couponData = { + recordDate: couponRecordDateInSeconds.toString(), + executionDate: couponExecutionDateInSeconds.toString(), + rate: couponRate, + rateDecimals: couponRateDecimals, + startDate: couponStartDateInSeconds.toString(), + endDate: couponEndDateInSeconds.toString(), + fixingDate: couponFixingDateInSeconds.toString(), + rateStatus: couponRateStatus, + }; + + await bondFacet.connect(signer_A).setCoupon(couponData); + + // Try to access with invalid coupon ID (0 would be invalid or different action type) + await expect(bondReadFacet.getCouponFor(999, signer_A.address)).to.be.revertedWithCustomError( + bondReadFacet, + "WrongIndexForAction", + ); + }); + + it("GIVEN a non-coupon corporate action WHEN getCouponAmountFor is called THEN transaction fails with WrongActionType", async () => { + await deploySecurityFixture(true); + + await accessControlFacet.connect(signer_A).grantRole(ATS_ROLES._CORPORATE_ACTION_ROLE, signer_A.address); + + couponRecordDateInSeconds = (await getDltTimestamp()) + 1000; + couponExecutionDateInSeconds = (await getDltTimestamp()) + 2000; + + const couponData = { + recordDate: couponRecordDateInSeconds.toString(), + executionDate: couponExecutionDateInSeconds.toString(), + rate: couponRate, + rateDecimals: couponRateDecimals, + startDate: couponStartDateInSeconds.toString(), + endDate: couponEndDateInSeconds.toString(), + fixingDate: couponFixingDateInSeconds.toString(), + rateStatus: couponRateStatus, + }; + + await bondFacet.connect(signer_A).setCoupon(couponData); + + // Try to access with invalid coupon ID + await expect(bondReadFacet.getCouponAmountFor(999, signer_A.address)).to.be.revertedWithCustomError( + bondReadFacet, + "WrongIndexForAction", + ); + }); + }); + + describe("Uncovered Branch Tests", () => { + it("GIVEN a token holder with zero balance WHEN fullRedeemAtMaturity is called THEN succeeds without redeeming", async () => { + // Create a new user with no tokens + const signers = await ethers.getSigners(); + const newUser = signers[10]; // Use a signer that hasn't been used yet + + // Grant KYC to new user + await kycFacet.grantKyc(newUser.address, EMPTY_VC_ID, ZERO, MAX_UINT256, signer_A.address); + + // Move time past maturity + await timeTravelFacet.changeSystemTimestamp(maturityDate + TIME_PERIODS_S.DAY); + + // Call fullRedeemAtMaturity on account with zero balance (signer_A has _MATURITY_REDEEMER_ROLE) + await expect(bondFacet.connect(signer_A).fullRedeemAtMaturity(newUser.address)).to.not.be.reverted; + }); + + it("GIVEN invalid startDate > endDate WHEN setCoupon THEN transaction fails with WrongDates", async () => { + // Grant corporate action role to signer_C + await accessControlFacet.grantRole(ATS_ROLES._CORPORATE_ACTION_ROLE, signer_C.address); + + const currentTimestamp = await getDltTimestamp(); + const invalidCoupon = { + recordDate: currentTimestamp + TIME_PERIODS_S.DAY, + executionDate: currentTimestamp + TIME_PERIODS_S.DAY * 2, + rate: couponRate, + rateDecimals: couponRateDecimals, + startDate: currentTimestamp + TIME_PERIODS_S.DAY * 3, // startDate > endDate + endDate: currentTimestamp + TIME_PERIODS_S.DAY * 2, + fixingDate: currentTimestamp + TIME_PERIODS_S.DAY, + rateStatus: couponRateStatus, + }; + + await expect(bondFacet.connect(signer_C).setCoupon(invalidCoupon)).to.be.revertedWithCustomError( + bondFacet, + "WrongDates", + ); + }); + + it("GIVEN invalid fixingDate > executionDate WHEN setCoupon THEN transaction fails with WrongDates", async () => { + // Grant corporate action role to signer_C + await accessControlFacet.grantRole(ATS_ROLES._CORPORATE_ACTION_ROLE, signer_C.address); + const currentTimestamp = await getDltTimestamp(); + const invalidCoupon = { + recordDate: currentTimestamp + TIME_PERIODS_S.DAY, + executionDate: currentTimestamp + TIME_PERIODS_S.DAY * 2, + rate: couponRate, + rateDecimals: couponRateDecimals, + startDate: currentTimestamp, + endDate: currentTimestamp + TIME_PERIODS_S.DAY * 3, + fixingDate: currentTimestamp + TIME_PERIODS_S.DAY * 3, // fixingDate > executionDate + rateStatus: couponRateStatus, + }; + + await expect(bondFacet.connect(signer_C).setCoupon(invalidCoupon)).to.be.revertedWithCustomError( + bondFacet, + "WrongDates", + ); + }); + + it("GIVEN fixingDate in the past WHEN setCoupon THEN transaction fails with WrongTimestamp", async () => { + // Grant corporate action role to signer_C + await accessControlFacet.grantRole(ATS_ROLES._CORPORATE_ACTION_ROLE, signer_C.address); + const currentTimestamp = await getDltTimestamp(); + const invalidCoupon = { + recordDate: currentTimestamp + TIME_PERIODS_S.DAY, + executionDate: currentTimestamp + TIME_PERIODS_S.DAY * 2, + rate: couponRate, + rateDecimals: couponRateDecimals, + startDate: currentTimestamp - TIME_PERIODS_S.DAY * 3, + endDate: currentTimestamp + TIME_PERIODS_S.DAY * 3, + fixingDate: currentTimestamp - TIME_PERIODS_S.DAY, // fixingDate in the past + rateStatus: couponRateStatus, + }; + + await expect(bondFacet.connect(signer_C).setCoupon(invalidCoupon)).to.be.revertedWithCustomError( + bondFacet, + "WrongTimestamp", + ); + }); }); }); diff --git a/packages/ats/contracts/test/contracts/unit/layer_1/bond/fixedRate/bondFixedRate.test.ts b/packages/ats/contracts/test/contracts/unit/layer_1/bond/fixedRate/bondFixedRate.test.ts new file mode 100644 index 000000000..605a2ed7c --- /dev/null +++ b/packages/ats/contracts/test/contracts/unit/layer_1/bond/fixedRate/bondFixedRate.test.ts @@ -0,0 +1,120 @@ +import { expect } from "chai"; +import { ethers } from "hardhat"; +import { SignerWithAddress } from "@nomiclabs/hardhat-ethers/signers.js"; +import { ResolverProxy, BondUSAFixedRateFacet, FixedRate, BondUSAReadFacet } from "@contract-types"; +import { dateToUnixTimestamp, ATS_ROLES, TIME_PERIODS_S } from "@scripts"; +import { loadFixture } from "@nomicfoundation/hardhat-network-helpers"; +import { deployBondFixedRateTokenFixture } from "@test"; +import { executeRbac } from "@test"; + +let couponRecordDateInSeconds = 0; +let couponExecutionDateInSeconds = 0; +const couponPeriod = TIME_PERIODS_S.WEEK; +let couponFixingDateInSeconds = 0; +let couponEndDateInSeconds = 0; +let couponStartDateInSeconds = 0; + +let couponData = { + recordDate: couponRecordDateInSeconds.toString(), + executionDate: couponExecutionDateInSeconds.toString(), + rate: 0, + rateDecimals: 0, + startDate: couponStartDateInSeconds.toString(), + endDate: couponEndDateInSeconds.toString(), + fixingDate: couponFixingDateInSeconds.toString(), + rateStatus: 0, +}; + +describe("Bond Fixed Rate Tests", () => { + let diamond: ResolverProxy; + let signer_A: SignerWithAddress; + + let bondFixedRateFacet: BondUSAFixedRateFacet; + let bondReadFacet: BondUSAReadFacet; + let fixedRateFacet: FixedRate; + + async function deploySecurityFixture() { + const base = await deployBondFixedRateTokenFixture(); + + diamond = base.diamond; + signer_A = base.deployer; + + await executeRbac(base.accessControlFacet, [ + { + role: ATS_ROLES._CORPORATE_ACTION_ROLE, + members: [signer_A.address], + }, + ]); + + bondFixedRateFacet = await ethers.getContractAt("BondUSAFixedRateFacetTimeTravel", diamond.address, signer_A); + bondReadFacet = await ethers.getContractAt("BondUSAReadFacetTimeTravel", diamond.address, signer_A); + fixedRateFacet = await ethers.getContractAt("FixedRate", diamond.address, signer_A); + } + + beforeEach(async () => { + couponRecordDateInSeconds = dateToUnixTimestamp(`2030-01-01T00:01:00Z`); + couponExecutionDateInSeconds = dateToUnixTimestamp(`2030-01-01T00:10:00Z`); + couponFixingDateInSeconds = dateToUnixTimestamp(`2030-01-01T00:10:00Z`); + couponEndDateInSeconds = couponFixingDateInSeconds - 1; + couponStartDateInSeconds = couponEndDateInSeconds - couponPeriod; + couponData = { + recordDate: couponRecordDateInSeconds.toString(), + executionDate: couponExecutionDateInSeconds.toString(), + rate: 0, + rateDecimals: 0, + startDate: couponStartDateInSeconds.toString(), + endDate: couponEndDateInSeconds.toString(), + fixingDate: couponFixingDateInSeconds.toString(), + rateStatus: 0, + }; + await loadFixture(deploySecurityFixture); + }); + + it("GIVEN a fixed rate bond WHEN setting a coupon with non pending status THEN transaction fails with InterestRateIsFixed", async () => { + couponData.rateStatus = 1; + + await expect(bondFixedRateFacet.setCoupon(couponData)).to.be.rejectedWith("InterestRateIsFixed"); + }); + + it("GIVEN a fixed rate bond WHEN setting a coupon with rate non 0 THEN transaction fails with InterestRateIsFixed", async () => { + couponData.rate = 1; + + await expect(bondFixedRateFacet.setCoupon(couponData)).to.be.rejectedWith("InterestRateIsFixed"); + }); + + it("GIVEN a fixed rate bond WHEN setting a coupon with rate decimals non 0 THEN transaction fails with InterestRateIsFixed", async () => { + couponData.rateDecimals = 1; + + await expect(bondFixedRateFacet.setCoupon(couponData)).to.be.rejectedWith("InterestRateIsFixed"); + }); + + it("GIVEN a fixed rate bond WHEN setting a coupon with pending status THEN transaction success", async () => { + const fixedRate = await fixedRateFacet.getRate(); + + await expect(bondFixedRateFacet.connect(signer_A).setCoupon(couponData)) + .to.emit(bondFixedRateFacet, "CouponSet") + .withArgs("0x0000000000000000000000000000000000000000000000000000000000000001", 1, signer_A.address, [ + couponRecordDateInSeconds, + couponExecutionDateInSeconds, + couponStartDateInSeconds, + couponEndDateInSeconds, + couponFixingDateInSeconds, + fixedRate.rate_, + fixedRate.decimals_, + 1, + ]); + + const couponCount = await bondReadFacet.getCouponCount(); + expect(couponCount).to.equal(1); + + const registeredCoupon = await bondReadFacet.getCoupon(1); + expect(registeredCoupon.coupon.recordDate).to.equal(couponRecordDateInSeconds); + expect(registeredCoupon.coupon.executionDate).to.equal(couponExecutionDateInSeconds); + expect(registeredCoupon.coupon.startDate).to.equal(couponStartDateInSeconds); + expect(registeredCoupon.coupon.endDate).to.equal(couponEndDateInSeconds); + expect(registeredCoupon.coupon.fixingDate).to.equal(couponFixingDateInSeconds); + expect(registeredCoupon.coupon.rate).to.equal(fixedRate.rate_); + expect(registeredCoupon.coupon.rateDecimals).to.equal(fixedRate.decimals_); + expect(registeredCoupon.coupon.rateStatus).to.equal(1); + }); +}); diff --git a/packages/ats/contracts/test/contracts/unit/layer_1/bond/kpiLinkedRate/bondKpiLinkedRate.test.ts b/packages/ats/contracts/test/contracts/unit/layer_1/bond/kpiLinkedRate/bondKpiLinkedRate.test.ts new file mode 100644 index 000000000..6a00c455f --- /dev/null +++ b/packages/ats/contracts/test/contracts/unit/layer_1/bond/kpiLinkedRate/bondKpiLinkedRate.test.ts @@ -0,0 +1,721 @@ +import { expect } from "chai"; +import { ethers } from "hardhat"; +import { SignerWithAddress } from "@nomiclabs/hardhat-ethers/signers.js"; +import { + ResolverProxy, + BondUSAKpiLinkedRateFacetTimeTravel, + KpiLinkedRateFacetTimeTravel, + BondUSAReadFacetTimeTravel, + TimeTravelFacet, + ERC1594FacetTimeTravel, +} from "@contract-types"; +import { dateToUnixTimestamp, ATS_ROLES, TIME_PERIODS_S, ADDRESS_ZERO } from "@scripts"; +import { loadFixture } from "@nomicfoundation/hardhat-network-helpers"; +import { deployBondKpiLinkedRateTokenFixture, DEFAULT_BOND_KPI_LINKED_RATE_PARAMS, getDltTimestamp } from "@test"; +import { executeRbac } from "@test"; +import { Contract } from "ethers"; + +const couponPeriod = TIME_PERIODS_S.WEEK; +const referenceDate = dateToUnixTimestamp(`2030-01-01T00:01:00Z`); +const amount = 1000; +const YEAR_SECONDS = 365 * 24 * 60 * 60; + +describe("Bond KpiLinked Rate Tests", () => { + let couponRecordDateInSeconds = 0; + let couponExecutionDateInSeconds = 0; + let couponFixingDateInSeconds = 0; + let couponEndDateInSeconds = 0; + let couponStartDateInSeconds = 0; + let newInterestRate = { + maxRate: 0, + baseRate: 0, + minRate: 0, + startPeriod: 0, + startRate: 0, + missedPenalty: 0, + reportPeriod: 0, + rateDecimals: 0, + }; + let newImpactData = { + maxDeviationCap: 0, + baseLine: 0, + maxDeviationFloor: 0, + impactDataDecimals: 0, + adjustmentPrecision: 0, + }; + + let diamond: ResolverProxy; + let signer_A: SignerWithAddress; + + let bondKpiLinkedRateFacet: BondUSAKpiLinkedRateFacetTimeTravel; + let bondReadFacet: BondUSAReadFacetTimeTravel; + let kpiLinkedRateFacet: KpiLinkedRateFacetTimeTravel; + let mockKpiOracle: Contract; + let timeTravelFacet: TimeTravelFacet; + let erc1594Facet: ERC1594FacetTimeTravel; + + let couponData = { + recordDate: couponRecordDateInSeconds.toString(), + executionDate: couponExecutionDateInSeconds.toString(), + rate: 0, + rateDecimals: 0, + startDate: couponStartDateInSeconds.toString(), + endDate: couponEndDateInSeconds.toString(), + fixingDate: couponFixingDateInSeconds.toString(), + rateStatus: 0, + }; + + async function deploySecurityFixture() { + const base = await deployBondKpiLinkedRateTokenFixture(); + + diamond = base.diamond; + signer_A = base.deployer; + + await executeRbac(base.accessControlFacet, [ + { + role: ATS_ROLES._CORPORATE_ACTION_ROLE, + members: [signer_A.address], + }, + { + role: ATS_ROLES._INTEREST_RATE_MANAGER_ROLE, + members: [signer_A.address], + }, + { + role: ATS_ROLES._ISSUER_ROLE, + members: [signer_A.address], + }, + ]); + + bondKpiLinkedRateFacet = await ethers.getContractAt( + "BondUSAKpiLinkedRateFacetTimeTravel", + diamond.address, + signer_A, + ); + bondReadFacet = await ethers.getContractAt("BondUSAReadFacetTimeTravel", diamond.address, signer_A); + kpiLinkedRateFacet = await ethers.getContractAt("KpiLinkedRateFacetTimeTravel", diamond.address, signer_A); + erc1594Facet = await ethers.getContractAt("ERC1594FacetTimeTravel", diamond.address, signer_A); + timeTravelFacet = await ethers.getContractAt("TimeTravelFacet", diamond.address); + + const MockedKpiOracle = await ethers.getContractFactory("MockedKpiOracle"); + mockKpiOracle = await MockedKpiOracle.deploy(); + + await erc1594Facet.issue(signer_A.address, amount, "0x"); + } + + async function setKpiConfiguration(startPeriodOffsetToFixingDate: number) { + couponData = { + startDate: referenceDate.toString(), + endDate: (referenceDate + 100).toString(), + fixingDate: (referenceDate + 200).toString(), + recordDate: (referenceDate + 300).toString(), + executionDate: (referenceDate + 400).toString(), + rate: 0, + rateDecimals: 0, + rateStatus: 0, + }; + + newInterestRate = { + maxRate: 10000, + baseRate: 7500, + minRate: 5000, + startPeriod: parseInt(couponData.fixingDate) + startPeriodOffsetToFixingDate, + startRate: 4000, + missedPenalty: 100, + reportPeriod: 5000, + rateDecimals: 3, + }; + newImpactData = { + maxDeviationCap: 200000, + baseLine: 150000, + maxDeviationFloor: 100000, + impactDataDecimals: 2, + adjustmentPrecision: 2, + }; + + await kpiLinkedRateFacet.connect(signer_A).setInterestRate(newInterestRate); + await kpiLinkedRateFacet.connect(signer_A).setImpactData(newImpactData); + await kpiLinkedRateFacet.connect(signer_A).setKpiOracle(mockKpiOracle.address); + } + + async function checkCouponPostValues( + interestRate: number, + interestRateDecimals: number, + amount: number, + couponID: number, + accountAddress: string, + ) { + const registeredCouponPostFixingDate = await bondReadFacet.getCoupon(couponID); + const couponForPostFixingDate = await bondReadFacet.getCouponFor(couponID, accountAddress); + const couponAmountForPostFixingDate = await bondReadFacet.getCouponAmountFor(couponID, accountAddress); + + const numerator = + BigInt(amount) * + BigInt(DEFAULT_BOND_KPI_LINKED_RATE_PARAMS.nominalValue) * + BigInt(interestRate) * + (BigInt(couponData.endDate) - BigInt(couponData.startDate)); + const denominator = + BigInt(10) ** + (BigInt(couponForPostFixingDate.decimals) + + BigInt(DEFAULT_BOND_KPI_LINKED_RATE_PARAMS.nominalValueDecimals) + + BigInt(interestRateDecimals)) * + BigInt(365 * 24 * 60 * 60); + + expect(registeredCouponPostFixingDate.coupon.rate).to.equal(interestRate); + expect(registeredCouponPostFixingDate.coupon.rateDecimals).to.equal(interestRateDecimals); + expect(registeredCouponPostFixingDate.coupon.rateStatus).to.equal(1); + + expect(couponForPostFixingDate.coupon.rate).to.equal(interestRate); + expect(couponForPostFixingDate.coupon.rateDecimals).to.equal(interestRateDecimals); + expect(couponForPostFixingDate.coupon.rateStatus).to.equal(1); + + expect(couponAmountForPostFixingDate.numerator.toString()).to.equal(numerator.toString()); + expect(couponAmountForPostFixingDate.denominator.toString()).to.equal(denominator.toString()); + } + + function updateCouponDates() { + const newFixingDate = parseInt(couponData.recordDate) + 10; + const newRecordDate = newFixingDate + 100; + const newExecutionDate = newRecordDate + 100; + + couponData.fixingDate = newFixingDate.toString(); + couponData.recordDate = newRecordDate.toString(); + couponData.executionDate = newExecutionDate.toString(); + } + + beforeEach(async () => { + couponRecordDateInSeconds = dateToUnixTimestamp(`2030-01-01T00:01:00Z`); + couponExecutionDateInSeconds = dateToUnixTimestamp(`2030-05-01T00:10:00Z`); + couponFixingDateInSeconds = dateToUnixTimestamp(`2030-03-01T00:10:00Z`); + couponEndDateInSeconds = couponFixingDateInSeconds - 1; + couponStartDateInSeconds = couponEndDateInSeconds - couponPeriod; + couponData = { + recordDate: couponRecordDateInSeconds.toString(), + executionDate: couponExecutionDateInSeconds.toString(), + rate: 0, + rateDecimals: 0, + startDate: couponStartDateInSeconds.toString(), + endDate: couponEndDateInSeconds.toString(), + fixingDate: couponFixingDateInSeconds.toString(), + rateStatus: 0, + }; + await loadFixture(deploySecurityFixture); + }); + describe("KpiLinkedRateFacet", () => { + it("GIVEN a kpiLinked rate bond WHEN setting a coupon with non pending status THEN transaction fails with InterestRateIsKpiLinked", async () => { + couponData.rateStatus = 1; + + await expect(bondKpiLinkedRateFacet.setCoupon(couponData)).to.be.rejectedWith("InterestRateIsKpiLinked"); + }); + + it("GIVEN a kpiLinked rate bond WHEN setting a coupon with rate non 0 THEN transaction fails with InterestRateIsKpiLinked", async () => { + couponData.rate = 1; + + await expect(bondKpiLinkedRateFacet.setCoupon(couponData)).to.be.rejectedWith("InterestRateIsKpiLinked"); + }); + + it("GIVEN a kpiLinked rate bond WHEN setting a coupon with rate decimals non 0 THEN transaction fails with InterestRateIsKpiLinked", async () => { + couponData.rateDecimals = 1; + + await expect(bondKpiLinkedRateFacet.setCoupon(couponData)).to.be.rejectedWith("InterestRateIsKpiLinked"); + }); + + it("GIVEN a kpiLinked rate bond WHEN setting a coupon with pending status THEN transaction success", async () => { + await expect(bondKpiLinkedRateFacet.connect(signer_A).setCoupon(couponData)) + .to.emit(bondKpiLinkedRateFacet, "CouponSet") + .withArgs("0x0000000000000000000000000000000000000000000000000000000000000001", 1, signer_A.address, [ + couponRecordDateInSeconds, + couponExecutionDateInSeconds, + couponStartDateInSeconds, + couponEndDateInSeconds, + couponFixingDateInSeconds, + 0, + 0, + 0, + ]); + + const couponCount = await bondReadFacet.getCouponCount(); + expect(couponCount).to.equal(1); + + const registeredCoupon = await bondReadFacet.getCoupon(1); + expect(registeredCoupon.coupon.recordDate).to.equal(couponRecordDateInSeconds); + expect(registeredCoupon.coupon.executionDate).to.equal(couponExecutionDateInSeconds); + expect(registeredCoupon.coupon.startDate).to.equal(couponStartDateInSeconds); + expect(registeredCoupon.coupon.endDate).to.equal(couponEndDateInSeconds); + expect(registeredCoupon.coupon.fixingDate).to.equal(couponFixingDateInSeconds); + expect(registeredCoupon.coupon.rate).to.equal(0); + expect(registeredCoupon.coupon.rateDecimals).to.equal(0); + expect(registeredCoupon.coupon.rateStatus).to.equal(0); + }); + + it("GIVEN a kpiLinked rate bond WHEN rate is during start Period THEN transaction success and rate is start rate", async () => { + await setKpiConfiguration(10); + + await bondKpiLinkedRateFacet.connect(signer_A).setCoupon(couponData); + + const registeredCouponPreFixingDate = await bondReadFacet.getCoupon(1); + const couponForPreFixingDate = await bondReadFacet.getCouponFor(1, signer_A.address); + const couponAmountForPreFixingDate = await bondReadFacet.getCouponAmountFor(1, signer_A.address); + + expect(registeredCouponPreFixingDate.coupon.rate).to.equal(0); + expect(registeredCouponPreFixingDate.coupon.rateDecimals).to.equal(0); + expect(registeredCouponPreFixingDate.coupon.rateStatus).to.equal(0); + + expect(couponForPreFixingDate.coupon.rate).to.equal(0); + expect(couponForPreFixingDate.coupon.rateDecimals).to.equal(0); + expect(couponForPreFixingDate.coupon.rateStatus).to.equal(0); + + expect(couponAmountForPreFixingDate.numerator).to.equal(0); + expect(couponAmountForPreFixingDate.denominator).to.equal(0); + + await timeTravelFacet.changeSystemTimestamp(couponData.fixingDate + 1); + + await checkCouponPostValues(newInterestRate.startRate, newInterestRate.rateDecimals, amount, 1, signer_A.address); + }); + + it("GIVEN a kpiLinked rate bond with no oracle WHEN rate is calculated THEN transaction success and rate is base rate", async () => { + await setKpiConfiguration(-10); + await kpiLinkedRateFacet.connect(signer_A).setKpiOracle(ADDRESS_ZERO); + + await bondKpiLinkedRateFacet.connect(signer_A).setCoupon(couponData); + + await timeTravelFacet.changeSystemTimestamp(couponData.fixingDate + 1); + + await checkCouponPostValues(newInterestRate.baseRate, newInterestRate.rateDecimals, amount, 1, signer_A.address); + }); + + it("GIVEN a kpiLinked rate bond WHEN no oracle report is found THEN transaction success and rate is previous rate plus penalty", async () => { + await setKpiConfiguration(-10); + + // Test missed penalty when there is a single coupon + await bondKpiLinkedRateFacet.connect(signer_A).setCoupon(couponData); + + await timeTravelFacet.changeSystemTimestamp(parseInt(couponData.recordDate) + 1); + + await checkCouponPostValues( + 0 + newInterestRate.missedPenalty, + newInterestRate.rateDecimals, + amount, + 1, + signer_A.address, + ); + + // Test missed penalty when there are two coupons + updateCouponDates(); + + await bondKpiLinkedRateFacet.connect(signer_A).setCoupon(couponData); + + await timeTravelFacet.changeSystemTimestamp(parseInt(couponData.recordDate) + 1); + + await checkCouponPostValues( + 0 + newInterestRate.missedPenalty, + newInterestRate.rateDecimals, + amount, + 1, + signer_A.address, + ); + + await checkCouponPostValues( + newInterestRate.missedPenalty + newInterestRate.missedPenalty, + newInterestRate.rateDecimals, + amount, + 2, + signer_A.address, + ); + + // Test missed penalty when previous coupon had less decimals + const previousCouponRate = 2 * newInterestRate.missedPenalty; + const previousCouponRateDecimals = newInterestRate.rateDecimals; + + newInterestRate.missedPenalty = previousCouponRate; + newInterestRate.rateDecimals = previousCouponRateDecimals + 1; + + await kpiLinkedRateFacet.connect(signer_A).setInterestRate(newInterestRate); + + updateCouponDates(); + + await bondKpiLinkedRateFacet.connect(signer_A).setCoupon(couponData); + + await timeTravelFacet.changeSystemTimestamp(parseInt(couponData.recordDate) + 1); + + const rate = previousCouponRate * 10 + newInterestRate.missedPenalty; + + await checkCouponPostValues(previousCouponRate / 2, previousCouponRateDecimals, amount, 1, signer_A.address); + + await checkCouponPostValues(previousCouponRate, previousCouponRateDecimals, amount, 2, signer_A.address); + + await checkCouponPostValues(rate, newInterestRate.rateDecimals, amount, 3, signer_A.address); + + // Test missed penalty when previous coupon had more decimals + const previousCouponRate_2 = rate; + const previousCouponRateDecimals_2 = newInterestRate.rateDecimals; + + newInterestRate.missedPenalty = previousCouponRate_2; + newInterestRate.rateDecimals = previousCouponRateDecimals_2 - 1; + + await kpiLinkedRateFacet.connect(signer_A).setInterestRate(newInterestRate); + + updateCouponDates(); + + await bondKpiLinkedRateFacet.connect(signer_A).setCoupon(couponData); + + await timeTravelFacet.changeSystemTimestamp(parseInt(couponData.recordDate) + 1); + + const rate_2 = previousCouponRate_2 / 10 + newInterestRate.missedPenalty; + + await checkCouponPostValues(previousCouponRate / 2, previousCouponRateDecimals, amount, 1, signer_A.address); + + await checkCouponPostValues(previousCouponRate, previousCouponRateDecimals, amount, 2, signer_A.address); + + await checkCouponPostValues(previousCouponRate_2, previousCouponRateDecimals_2, amount, 3, signer_A.address); + + await checkCouponPostValues(rate_2, newInterestRate.rateDecimals, amount, 4, signer_A.address); + }); + + it("GIVEN a kpiLinked rate bond WHEN impact data is above baseline THEN transaction success and rate is calculated", async () => { + await setKpiConfiguration(-10); + + const impactData = newImpactData.baseLine + (newImpactData.maxDeviationCap - newImpactData.baseLine) / 2; + await mockKpiOracle.setKpiValue(impactData); + await mockKpiOracle.setExists(true); + + await bondKpiLinkedRateFacet.connect(signer_A).setCoupon(couponData); + + await timeTravelFacet.changeSystemTimestamp(parseInt(couponData.recordDate) + 1); + + const rate = newInterestRate.baseRate + (newInterestRate.maxRate - newInterestRate.baseRate) / 2; + + await checkCouponPostValues(rate, newInterestRate.rateDecimals, amount, 1, signer_A.address); + + const impactData_2 = 2 * newImpactData.maxDeviationCap; + await mockKpiOracle.setKpiValue(impactData_2); + await mockKpiOracle.setExists(true); + + updateCouponDates(); + + await bondKpiLinkedRateFacet.connect(signer_A).setCoupon(couponData); + await timeTravelFacet.changeSystemTimestamp(parseInt(couponData.recordDate) + 1); + + const rate_2 = newInterestRate.maxRate; + + await checkCouponPostValues(rate_2, newInterestRate.rateDecimals, amount, 2, signer_A.address); + }); + + it("GIVEN a kpiLinked rate bond WHEN impact data is below baseline THEN transaction success and rate is calculated", async () => { + await setKpiConfiguration(-10); + + const impactData = newImpactData.baseLine - (newImpactData.baseLine - newImpactData.maxDeviationFloor) / 2; + await mockKpiOracle.setKpiValue(impactData); + await mockKpiOracle.setExists(true); + + await bondKpiLinkedRateFacet.connect(signer_A).setCoupon(couponData); + + await timeTravelFacet.changeSystemTimestamp(parseInt(couponData.recordDate) + 1); + + const rate = newInterestRate.baseRate - (newInterestRate.baseRate - newInterestRate.minRate) / 2; + + await checkCouponPostValues(rate, newInterestRate.rateDecimals, amount, 1, signer_A.address); + + const impactData_2 = newImpactData.maxDeviationFloor / 2; + await mockKpiOracle.setKpiValue(impactData_2); + await mockKpiOracle.setExists(true); + + updateCouponDates(); + + await bondKpiLinkedRateFacet.connect(signer_A).setCoupon(couponData); + await timeTravelFacet.changeSystemTimestamp(parseInt(couponData.recordDate) + 1); + + const rate_2 = newInterestRate.minRate; + + await checkCouponPostValues(rate_2, newInterestRate.rateDecimals, amount, 2, signer_A.address); + }); + }); + + describe("Bond Read - Ordered List", () => { + let currentBlockTimestamp: number; + + beforeEach(async () => { + currentBlockTimestamp = await getDltTimestamp(); + }); + + describe("getCouponsOrderedListTotal", () => { + it("should return 0 when no coupons have been created", async () => { + const total = await bondReadFacet.getCouponsOrderedListTotal(); + expect(total).to.equal(0); + }); + + it("should return the correct count when coupons exist", async () => { + // Create 3 coupons with fixing dates + const coupon1 = { + recordDate: currentBlockTimestamp + TIME_PERIODS_S.DAY, + executionDate: currentBlockTimestamp + TIME_PERIODS_S.DAY * 2, + rate: 0, + rateDecimals: 0, + startDate: currentBlockTimestamp, + endDate: currentBlockTimestamp + YEAR_SECONDS, + fixingDate: currentBlockTimestamp + TIME_PERIODS_S.DAY, + rateStatus: 0, + }; + + await bondKpiLinkedRateFacet.setCoupon(coupon1); + + const coupon2 = { + recordDate: currentBlockTimestamp + TIME_PERIODS_S.DAY * 3, + executionDate: currentBlockTimestamp + TIME_PERIODS_S.DAY * 4, + rate: 0, + rateDecimals: 0, + startDate: currentBlockTimestamp, + endDate: currentBlockTimestamp + YEAR_SECONDS, + fixingDate: currentBlockTimestamp + TIME_PERIODS_S.DAY * 3, + rateStatus: 0, + }; + + await bondKpiLinkedRateFacet.setCoupon(coupon2); + + const coupon3 = { + recordDate: currentBlockTimestamp + TIME_PERIODS_S.DAY * 5, + executionDate: currentBlockTimestamp + TIME_PERIODS_S.DAY * 6, + rate: 0, + rateDecimals: 0, + startDate: currentBlockTimestamp, + endDate: currentBlockTimestamp + YEAR_SECONDS, + fixingDate: currentBlockTimestamp + TIME_PERIODS_S.DAY * 5, + rateStatus: 0, + }; + + await bondKpiLinkedRateFacet.setCoupon(coupon3); + + // Move time forward past all fixing dates + await timeTravelFacet.changeSystemTimestamp(currentBlockTimestamp + TIME_PERIODS_S.DAY * 6); + + const total = await bondReadFacet.getCouponsOrderedListTotal(); + expect(total).to.equal(3); + }); + }); + + describe("getCouponFromOrderedListAt", () => { + it("should return 0 for invalid position when no coupons exist", async () => { + const couponId = await bondReadFacet.getCouponFromOrderedListAt(0); + expect(couponId).to.equal(0); + }); + + it("should return 0 for position beyond the list", async () => { + // Create 1 coupon + const coupon = { + recordDate: currentBlockTimestamp + TIME_PERIODS_S.DAY, + executionDate: currentBlockTimestamp + TIME_PERIODS_S.DAY * 2, + rate: 0, + rateDecimals: 0, + startDate: currentBlockTimestamp, + endDate: currentBlockTimestamp + YEAR_SECONDS, + fixingDate: currentBlockTimestamp + TIME_PERIODS_S.DAY, + rateStatus: 0, + }; + + await bondKpiLinkedRateFacet.setCoupon(coupon); + + // Move time forward past fixing date + await timeTravelFacet.changeSystemTimestamp(currentBlockTimestamp + TIME_PERIODS_S.DAY * 2); + + // Try to get position 1 (second item) when only 1 exists (index 0) + const couponId = await bondReadFacet.getCouponFromOrderedListAt(1); + expect(couponId).to.equal(0); + }); + + it("should return correct coupon ID at specific position", async () => { + // Create 3 coupons + const coupon1 = { + recordDate: currentBlockTimestamp + TIME_PERIODS_S.DAY, + executionDate: currentBlockTimestamp + TIME_PERIODS_S.DAY * 2, + rate: 0, + rateDecimals: 0, + startDate: currentBlockTimestamp, + endDate: currentBlockTimestamp + YEAR_SECONDS, + fixingDate: currentBlockTimestamp + TIME_PERIODS_S.DAY, + rateStatus: 0, + }; + + const tx1 = await bondKpiLinkedRateFacet.setCoupon(coupon1); + await tx1.wait(); + + const coupon2 = { + recordDate: currentBlockTimestamp + TIME_PERIODS_S.DAY * 3, + executionDate: currentBlockTimestamp + TIME_PERIODS_S.DAY * 4, + rate: 0, + rateDecimals: 0, + startDate: currentBlockTimestamp, + endDate: currentBlockTimestamp + YEAR_SECONDS, + fixingDate: currentBlockTimestamp + TIME_PERIODS_S.DAY * 3, + rateStatus: 0, + }; + + const tx2 = await bondKpiLinkedRateFacet.setCoupon(coupon2); + await tx2.wait(); + + const coupon3 = { + recordDate: currentBlockTimestamp + TIME_PERIODS_S.DAY * 5, + executionDate: currentBlockTimestamp + TIME_PERIODS_S.DAY * 6, + rate: 0, + rateDecimals: 0, + startDate: currentBlockTimestamp, + endDate: currentBlockTimestamp + YEAR_SECONDS, + fixingDate: currentBlockTimestamp + TIME_PERIODS_S.DAY * 5, + rateStatus: 0, + }; + + const tx3 = await bondKpiLinkedRateFacet.setCoupon(coupon3); + await tx3.wait(); + + // Move time forward past all fixing dates so coupons appear in ordered list + await timeTravelFacet.changeSystemTimestamp(currentBlockTimestamp + TIME_PERIODS_S.DAY * 6); + + // Get coupon at position 0 (first coupon) + const couponId0 = await bondReadFacet.getCouponFromOrderedListAt(0); + expect(couponId0).to.equal(1); + + // Get coupon at position 1 (second coupon) + const couponId1 = await bondReadFacet.getCouponFromOrderedListAt(1); + expect(couponId1).to.equal(2); + + // Get coupon at position 2 (third coupon) + const couponId2 = await bondReadFacet.getCouponFromOrderedListAt(2); + expect(couponId2).to.equal(3); + }); + }); + + describe("getCouponsOrderedList", () => { + it("should return empty array when no coupons exist", async () => { + const coupons = await bondReadFacet.getCouponsOrderedList(0, 10); + expect(coupons).to.be.an("array").that.is.empty; + }); + + it("should return all coupons when page size is larger than total", async () => { + // Create 3 coupons + const coupon1 = { + recordDate: currentBlockTimestamp + TIME_PERIODS_S.DAY, + executionDate: currentBlockTimestamp + TIME_PERIODS_S.DAY * 2, + rate: 0, + rateDecimals: 0, + startDate: currentBlockTimestamp, + endDate: currentBlockTimestamp + YEAR_SECONDS, + fixingDate: currentBlockTimestamp + TIME_PERIODS_S.DAY, + rateStatus: 0, + }; + + await bondKpiLinkedRateFacet.setCoupon(coupon1); + + const coupon2 = { + recordDate: currentBlockTimestamp + TIME_PERIODS_S.DAY * 3, + executionDate: currentBlockTimestamp + TIME_PERIODS_S.DAY * 4, + rate: 0, + rateDecimals: 0, + startDate: currentBlockTimestamp, + endDate: currentBlockTimestamp + YEAR_SECONDS, + fixingDate: currentBlockTimestamp + TIME_PERIODS_S.DAY * 3, + rateStatus: 0, + }; + + await bondKpiLinkedRateFacet.setCoupon(coupon2); + + const coupon3 = { + recordDate: currentBlockTimestamp + TIME_PERIODS_S.DAY * 5, + executionDate: currentBlockTimestamp + TIME_PERIODS_S.DAY * 6, + rate: 0, + rateDecimals: 0, + startDate: currentBlockTimestamp, + endDate: currentBlockTimestamp + YEAR_SECONDS, + fixingDate: currentBlockTimestamp + TIME_PERIODS_S.DAY * 5, + rateStatus: 0, + }; + + await bondKpiLinkedRateFacet.setCoupon(coupon3); + + // Move time forward past all fixing dates + await timeTravelFacet.changeSystemTimestamp(currentBlockTimestamp + TIME_PERIODS_S.DAY * 6); + + const coupons = await bondReadFacet.getCouponsOrderedList(0, 10); + expect(coupons).to.be.an("array").with.lengthOf(3); + expect(coupons[0]).to.equal(1); + expect(coupons[1]).to.equal(2); + expect(coupons[2]).to.equal(3); + }); + + it("should return paginated results correctly", async () => { + // Create 5 coupons + for (let i = 0; i < 5; i++) { + const coupon = { + recordDate: currentBlockTimestamp + TIME_PERIODS_S.DAY * (i * 2 + 1), + executionDate: currentBlockTimestamp + TIME_PERIODS_S.DAY * (i * 2 + 2), + rate: 0, + rateDecimals: 0, + startDate: currentBlockTimestamp, + endDate: currentBlockTimestamp + YEAR_SECONDS, + fixingDate: currentBlockTimestamp + TIME_PERIODS_S.DAY * (i * 2 + 1), + rateStatus: 0, + }; + + await bondKpiLinkedRateFacet.setCoupon(coupon); + } + + // Move time forward past all fixing dates + await timeTravelFacet.changeSystemTimestamp(currentBlockTimestamp + TIME_PERIODS_S.DAY * 11); + + // Get first page (2 items) + const page1 = await bondReadFacet.getCouponsOrderedList(0, 2); + expect(page1).to.be.an("array").with.lengthOf(2); + expect(page1[0]).to.equal(1); + expect(page1[1]).to.equal(2); + + // Get second page (2 items) + const page2 = await bondReadFacet.getCouponsOrderedList(1, 2); + expect(page2).to.be.an("array").with.lengthOf(2); + expect(page2[0]).to.equal(3); + expect(page2[1]).to.equal(4); + + // Get third page (1 item remaining) + const page3 = await bondReadFacet.getCouponsOrderedList(2, 2); + expect(page3).to.be.an("array").with.lengthOf(1); + expect(page3[0]).to.equal(5); + + // Get page beyond available data + const page4 = await bondReadFacet.getCouponsOrderedList(3, 2); + expect(page4).to.be.an("array").that.is.empty; + }); + + it("should handle single item per page", async () => { + // Create 3 coupons + for (let i = 0; i < 3; i++) { + const coupon = { + recordDate: currentBlockTimestamp + TIME_PERIODS_S.DAY * (i * 2 + 1), + executionDate: currentBlockTimestamp + TIME_PERIODS_S.DAY * (i * 2 + 2), + rate: 0, + rateDecimals: 0, + startDate: currentBlockTimestamp, + endDate: currentBlockTimestamp + YEAR_SECONDS, + fixingDate: currentBlockTimestamp + TIME_PERIODS_S.DAY * (i * 2 + 1), + rateStatus: 0, + }; + + await bondKpiLinkedRateFacet.setCoupon(coupon); + } + + // Move time forward past all fixing dates + await timeTravelFacet.changeSystemTimestamp(currentBlockTimestamp + TIME_PERIODS_S.DAY * 7); + + // Get page 0 (first item) + const page0 = await bondReadFacet.getCouponsOrderedList(0, 1); + expect(page0).to.be.an("array").with.lengthOf(1); + expect(page0[0]).to.equal(1); + + // Get page 1 (second item) + const page1 = await bondReadFacet.getCouponsOrderedList(1, 1); + expect(page1).to.be.an("array").with.lengthOf(1); + expect(page1[0]).to.equal(2); + + // Get page 2 (third item) + const page2 = await bondReadFacet.getCouponsOrderedList(2, 1); + expect(page2).to.be.an("array").with.lengthOf(1); + expect(page2[0]).to.equal(3); + }); + }); + }); +}); diff --git a/packages/ats/contracts/test/contracts/unit/layer_1/cap/cap.test.ts b/packages/ats/contracts/test/contracts/unit/layer_1/cap/cap.test.ts index 677d3d426..12d94102b 100644 --- a/packages/ats/contracts/test/contracts/unit/layer_1/cap/cap.test.ts +++ b/packages/ats/contracts/test/contracts/unit/layer_1/cap/cap.test.ts @@ -3,7 +3,7 @@ import { ethers } from "hardhat"; import { SignerWithAddress } from "@nomiclabs/hardhat-ethers/signers.js"; import { type ResolverProxy, - type Cap, + type CapFacet, type IERC1410, AccessControl, Pause, @@ -38,7 +38,7 @@ describe("Cap Tests", () => { let signer_B: SignerWithAddress; let signer_C: SignerWithAddress; - let capFacet: Cap; + let capFacet: CapFacet; let accessControlFacet: AccessControl; let pauseFacet: Pause; let erc1410Facet: IERC1410; @@ -81,7 +81,7 @@ describe("Cap Tests", () => { }, ]); - capFacet = await ethers.getContractAt("Cap", diamond.address, signer_A); + capFacet = await ethers.getContractAt("CapFacet", diamond.address, signer_A); pauseFacet = await ethers.getContractAt("Pause", diamond.address, signer_A); erc1410Facet = await ethers.getContractAt("IERC1410", diamond.address, signer_A); kycFacet = await ethers.getContractAt("Kyc", diamond.address, signer_B); diff --git a/packages/ats/contracts/test/contracts/unit/layer_1/clearing/clearing.test.ts b/packages/ats/contracts/test/contracts/unit/layer_1/clearing/clearing.test.ts index 71f1f55aa..328947310 100644 --- a/packages/ats/contracts/test/contracts/unit/layer_1/clearing/clearing.test.ts +++ b/packages/ats/contracts/test/contracts/unit/layer_1/clearing/clearing.test.ts @@ -1,5 +1,5 @@ import { expect } from "chai"; -import { ethers } from "hardhat"; +import { ethers, network } from "hardhat"; import { BigNumber, Contract } from "ethers"; import { SignerWithAddress } from "@nomiclabs/hardhat-ethers/signers.js"; import { loadFixture } from "@nomicfoundation/hardhat-network-helpers"; @@ -9,17 +9,22 @@ import { type ClearingActionsFacet, ClearingActionsFacet__factory, type IHold, - ControlList, + ControlListFacet, Pause, - ERC20, + ERC20Facet, type IERC1410, + type IERC3643, TimeTravelFacet, + NoncesFacet, Kyc, SsiManagement, AccessControl, AdjustBalances, Equity, Snapshots, + ERC3643Management, + ProtectedPartitions, + DiamondCutFacet, } from "@contract-types"; import { ADDRESS_ZERO, ZERO, EMPTY_HEX_BYTES, EMPTY_STRING, dateToUnixTimestamp, ATS_ROLES } from "@scripts"; import { deployEquityTokenFixture, MAX_UINT256 } from "@test"; @@ -100,6 +105,51 @@ describe("Clearing Tests", () => { let signer_D: SignerWithAddress; let signer_E: SignerWithAddress; + function set_initRbacs() { + return [ + { + role: ATS_ROLES._ISSUER_ROLE, + members: [signer_B.address], + }, + { + role: ATS_ROLES._PAUSER_ROLE, + members: [signer_D.address], + }, + { + role: ATS_ROLES._KYC_ROLE, + members: [signer_B.address], + }, + { + role: ATS_ROLES._SSI_MANAGER_ROLE, + members: [signer_A.address], + }, + { + role: ATS_ROLES._CLEARING_ROLE, + members: [signer_A.address], + }, + { + role: ATS_ROLES._CORPORATE_ACTION_ROLE, + members: [signer_B.address], + }, + { + role: ATS_ROLES._CONTROL_LIST_ROLE, + members: [signer_E.address], + }, + { + role: ATS_ROLES._CONTROLLER_ROLE, + members: [signer_C.address], + }, + { + role: ATS_ROLES._PROTECTED_PARTITIONS_ROLE, + members: [signer_B.address], + }, + { + role: ATS_ROLES._AGENT_ROLE, + members: [signer_A.address], + }, + ]; + } + let clearingFacet: Contract; let clearingActionsFacet: ClearingActionsFacet; let holdFacet: IHold; @@ -108,12 +158,17 @@ describe("Clearing Tests", () => { let equityFacet: Equity; let pauseFacet: Pause; let erc1410Facet: IERC1410; - let controlListFacet: ControlList; - let erc20Facet: ERC20; + let controlListFacet: ControlListFacet; + let erc20Facet: ERC20Facet; let timeTravelFacet: TimeTravelFacet; let kycFacet: Kyc; let ssiManagementFacet: SsiManagement; let snapshotFacet: Snapshots; + let erc3643ManagementFacet: ERC3643Management; + let erc3643Facet: IERC3643; + let protectedPartitionsFacet: ProtectedPartitions; + let noncesFacet: NoncesFacet; + let diamondCutFacet: DiamondCutFacet; const ONE_YEAR_IN_SECONDS = 365 * 24 * 60 * 60; let currentTimestamp = 0; @@ -155,12 +210,17 @@ describe("Clearing Tests", () => { adjustBalancesFacet = await ethers.getContractAt("AdjustBalances", diamond.address, signer_A); pauseFacet = await ethers.getContractAt("Pause", diamond.address, signer_D); erc1410Facet = await ethers.getContractAt("IERC1410", diamond.address, signer_B); - controlListFacet = await ethers.getContractAt("ControlList", diamond.address, signer_E); - erc20Facet = await ethers.getContractAt("ERC20", diamond.address, signer_A); + controlListFacet = await ethers.getContractAt("ControlListFacet", diamond.address, signer_E); + erc20Facet = await ethers.getContractAt("ERC20Facet", diamond.address, signer_A); timeTravelFacet = await ethers.getContractAt("TimeTravelFacet", diamond.address, signer_A); kycFacet = await ethers.getContractAt("Kyc", diamond.address, signer_B); ssiManagementFacet = await ethers.getContractAt("SsiManagement", diamond.address, signer_A); snapshotFacet = await ethers.getContractAt("Snapshots", diamond.address); + erc3643ManagementFacet = await ethers.getContractAt("ERC3643ManagementFacet", diamond.address, signer_A); + erc3643Facet = await ethers.getContractAt("IERC3643", diamond.address, signer_A); + protectedPartitionsFacet = await ethers.getContractAt("ProtectedPartitions", diamond.address, signer_A); + noncesFacet = await ethers.getContractAt("NoncesFacet", diamond.address, signer_A); + diamondCutFacet = await ethers.getContractAt("DiamondCutFacet", diamond.address, signer_A); await ssiManagementFacet.connect(signer_A).addIssuer(signer_A.address); await kycFacet.grantKyc(signer_A.address, EMPTY_VC_ID, ZERO, MAX_UINT256, signer_A.address); @@ -562,6 +622,40 @@ describe("Clearing Tests", () => { }); }); + describe("corporate actions integration", () => { + it("GIVEN pending clearing WHEN record date is reached THEN dividends use total balance including cleared amounts", async () => { + await accessControlFacet.connect(signer_A).grantRole(ATS_ROLES._CORPORATE_ACTION_ROLE, signer_A.address); + + const currentTime = await timeTravelFacet.blockTimestamp(); + const recordDate = currentTime.add(100); + const executionDate = recordDate.add(100); + + clearingOperation.expirationTimestamp = executionDate.add(ONE_YEAR_IN_SECONDS).toNumber(); + + await clearingFacet.connect(signer_A).clearingTransferByPartition(clearingOperation, 10, signer_B.address); + + const dividendInput = { + recordDate, + executionDate, + amount: 100, + amountDecimals: 0, + }; + + const dividendId = await equityFacet.connect(signer_A).callStatic.setDividends(dividendInput); + await equityFacet.connect(signer_A).setDividends(dividendInput); + + await timeTravelFacet.changeSystemTimestamp(recordDate.add(1)); + + const dividendFor = await equityFacet.getDividendsFor(dividendId, signer_A.address); + + const currentBalance = await erc1410Facet.balanceOf(signer_A.address); + const clearedAmount = await clearingFacet.getClearedAmountFor(signer_A.address); + + expect(dividendFor.recordDateReached).to.equal(true); + expect(dividendFor.tokenBalance).to.equal(currentBalance.add(clearedAmount)); + }); + }); + describe("Not in clearing mode", () => { it("GIVEN a token not in clearing mode WHEN create clearing THEN transaction fails with ClearingIsDisabled", async () => { await clearingActionsFacet.deactivateClearing(); @@ -715,6 +809,204 @@ describe("Clearing Tests", () => { }); }); + describe("Clearing with zero and minimal amounts", () => { + it("GIVEN a Token WHEN creating clearing with amount 1 THEN transaction succeeds", async () => { + await expect(clearingFacet.clearingTransferByPartition(clearingOperation, 1, signer_B.address)).to.emit( + clearingFacet, + "ClearedTransferByPartition", + ); + + const clearing = await clearingFacet.getClearingTransferForByPartition(_DEFAULT_PARTITION, signer_A.address, 1); + expect(clearing.amount).to.equal(1); + }); + + it("GIVEN a Token WHEN creating clearing redeem with amount 1 THEN transaction succeeds", async () => { + await expect(clearingFacet.clearingRedeemByPartition(clearingOperation, 1)).to.emit( + clearingFacet, + "ClearedRedeemByPartition", + ); + + clearingIdentifier.clearingId = 1; + clearingIdentifier.clearingOperationType = ClearingOperationType.Redeem; + const clearing = await clearingFacet.getClearingRedeemForByPartition(_DEFAULT_PARTITION, signer_A.address, 1); + expect(clearing.amount).to.equal(1); + }); + + it("GIVEN a Token WHEN creating clearing hold with amount 1 THEN transaction succeeds", async () => { + const minimalHold = { + ...hold, + amount: 1, + }; + await expect(clearingFacet.clearingCreateHoldByPartition(clearingOperation, minimalHold)).to.emit( + clearingFacet, + "ClearedHoldByPartition", + ); + + const clearing = await clearingFacet.getClearingCreateHoldForByPartition( + _DEFAULT_PARTITION, + signer_A.address, + 1, + ); + expect(clearing.amount).to.equal(1); + }); + }); + + describe("Clearing read operations edge cases", () => { + it("GIVEN no clearings WHEN getting cleared amounts THEN returns zero", async () => { + const clearedAmount = await clearingFacet.getClearedAmountFor(signer_D.address); + const clearedAmountByPartition = await clearingFacet.getClearedAmountForByPartition( + _DEFAULT_PARTITION, + signer_D.address, + ); + + expect(clearedAmount).to.equal(0); + expect(clearedAmountByPartition).to.equal(0); + }); + + it("GIVEN no clearings WHEN getting clearing counts THEN returns zero", async () => { + const transferCount = await clearingFacet.getClearingCountForByPartition( + _DEFAULT_PARTITION, + signer_D.address, + ClearingOperationType.Transfer, + ); + const redeemCount = await clearingFacet.getClearingCountForByPartition( + _DEFAULT_PARTITION, + signer_D.address, + ClearingOperationType.Redeem, + ); + const holdCreationCount = await clearingFacet.getClearingCountForByPartition( + _DEFAULT_PARTITION, + signer_D.address, + ClearingOperationType.HoldCreation, + ); + + expect(transferCount).to.equal(0); + expect(redeemCount).to.equal(0); + expect(holdCreationCount).to.equal(0); + }); + + it("GIVEN no clearings WHEN getting clearing IDs THEN returns empty array", async () => { + const clearingIds = await clearingFacet.getClearingsIdForByPartition( + _DEFAULT_PARTITION, + signer_D.address, + ClearingOperationType.Transfer, + 0, + 100, + ); + + expect(clearingIds.length).to.equal(0); + }); + }); + + describe("operator clearing operations", () => { + it("GIVEN an authorized operator WHEN creating clearing transfers with different data THEN all succeed", async () => { + await erc1410Facet.connect(signer_A).authorizeOperator(signer_B.address); + + const data1 = "0x1111"; + const data2 = "0x2222"; + const data3 = "0x3333"; + + const clearingOp1 = { ...clearingOperation, data: data1 }; + const clearingOp2 = { ...clearingOperation, data: data2 }; + const clearingOp3 = { ...clearingOperation, data: data3 }; + + await clearingFacet + .connect(signer_B) + .operatorClearingTransferByPartition( + { ...clearingOperationFrom, clearingOperation: clearingOp1 }, + _AMOUNT / 10, + signer_C.address, + ); + await clearingFacet + .connect(signer_B) + .operatorClearingTransferByPartition( + { ...clearingOperationFrom, clearingOperation: clearingOp2 }, + _AMOUNT / 10, + signer_C.address, + ); + await clearingFacet + .connect(signer_B) + .operatorClearingTransferByPartition( + { ...clearingOperationFrom, clearingOperation: clearingOp3 }, + _AMOUNT / 10, + signer_C.address, + ); + + const clearing1 = await clearingFacet.getClearingTransferForByPartition( + _DEFAULT_PARTITION, + signer_A.address, + 1, + ); + const clearing2 = await clearingFacet.getClearingTransferForByPartition( + _DEFAULT_PARTITION, + signer_A.address, + 2, + ); + const clearing3 = await clearingFacet.getClearingTransferForByPartition( + _DEFAULT_PARTITION, + signer_A.address, + 3, + ); + + expect(clearing1.data).to.equal(data1); + expect(clearing2.data).to.equal(data2); + expect(clearing3.data).to.equal(data3); + }); + + it("GIVEN an authorized operator WHEN creating clearing redeems with different operatorData THEN all succeed", async () => { + await erc1410Facet.connect(signer_A).authorizeOperator(signer_B.address); + + const opData1 = "0xaaaa"; + const opData2 = "0xbbbb"; + + await clearingFacet + .connect(signer_B) + .operatorClearingRedeemByPartition({ ...clearingOperationFrom, operatorData: opData1 }, _AMOUNT / 10); + await clearingFacet + .connect(signer_B) + .operatorClearingRedeemByPartition({ ...clearingOperationFrom, operatorData: opData2 }, _AMOUNT / 10); + + const clearing1 = await clearingFacet.getClearingRedeemForByPartition(_DEFAULT_PARTITION, signer_A.address, 1); + const clearing2 = await clearingFacet.getClearingRedeemForByPartition(_DEFAULT_PARTITION, signer_A.address, 2); + + expect(clearing1.operatorData).to.equal(opData1); + expect(clearing2.operatorData).to.equal(opData2); + }); + + it("GIVEN an authorized operator WHEN creating clearing holds THEN holds are created correctly", async () => { + await erc1410Facet.connect(signer_A).authorizeOperator(signer_B.address); + + const hold1 = { + ...hold, + amount: _AMOUNT / 10, + to: signer_C.address, + }; + + const hold2 = { + ...hold, + amount: _AMOUNT / 10, + to: signer_D.address, + }; + + await clearingFacet.connect(signer_B).operatorClearingCreateHoldByPartition(clearingOperationFrom, hold1); + await clearingFacet.connect(signer_B).operatorClearingCreateHoldByPartition(clearingOperationFrom, hold2); + + const clearing1 = await clearingFacet.getClearingCreateHoldForByPartition( + _DEFAULT_PARTITION, + signer_A.address, + 1, + ); + const clearing2 = await clearingFacet.getClearingCreateHoldForByPartition( + _DEFAULT_PARTITION, + signer_A.address, + 2, + ); + + expect(clearing1.holdTo).to.equal(signer_C.address); + expect(clearing2.holdTo).to.equal(signer_D.address); + }); + }); + describe("AccessControl", () => { it("GIVEN an account without clearing role WHEN switching clearing mode THEN transaction fails with AccountHasNoRole", async () => { await expect(clearingActionsFacet.connect(signer_D).activateClearing()).to.be.revertedWithCustomError( @@ -1504,6 +1796,45 @@ describe("Clearing Tests", () => { clearingActionsFacet.reclaimClearingOperationByPartition(clearingIdentifier), ).to.be.revertedWithCustomError(clearingActionsFacet, "ExpirationDateNotReached"); }); + + it("GIVEN a clearing transfer WHEN approveClearingOperationByPartition with wrong partition THEN transaction fails with PartitionNotAllowedInSinglePartitionMode", async () => { + await clearingFacet.connect(signer_A).clearingTransferByPartition(clearingOperation, _AMOUNT, signer_C.address); + + const wrongClearingIdentifier = { + ...clearingIdentifier, + partition: _WRONG_PARTITION, + }; + + await expect( + clearingActionsFacet.approveClearingOperationByPartition(wrongClearingIdentifier), + ).to.be.revertedWithCustomError(clearingActionsFacet, "PartitionNotAllowedInSinglePartitionMode"); + }); + + it("GIVEN a clearing transfer WHEN cancelClearingOperationByPartition with wrong clearingId THEN transaction fails with WrongClearingId", async () => { + await clearingFacet.connect(signer_A).clearingTransferByPartition(clearingOperation, _AMOUNT, signer_C.address); + + const wrongClearingIdentifier = { + ...clearingIdentifier, + clearingId: 999, + }; + + await expect( + clearingActionsFacet.cancelClearingOperationByPartition(wrongClearingIdentifier), + ).to.be.revertedWithCustomError(clearingActionsFacet, "WrongClearingId"); + }); + + it("GIVEN a clearing transfer WHEN reclaimClearingOperationByPartition with unidentified account THEN transaction fails", async () => { + await clearingFacet.connect(signer_A).clearingTransferByPartition(clearingOperation, _AMOUNT, signer_C.address); + + // Revoke identity for signer_A + await kycFacet.connect(signer_B).revokeKyc(signer_A.address); + + // Wait until expiration date + await timeTravelFacet.changeSystemTimestamp(clearingOperation.expirationTimestamp + 1); + + await expect(clearingActionsFacet.connect(signer_A).reclaimClearingOperationByPartition(clearingIdentifier)).to + .be.reverted; + }); }); describe("Create clearing success", () => { @@ -1830,61 +2161,296 @@ describe("Clearing Tests", () => { }); }); - describe("Managing clearing success", () => { - it("GIVEN a Token WHEN clearing operation approved THEN transaction succeeds", async () => { - const balance_A_original = await erc1410Facet.balanceOf(signer_A.address); - const balance_B_original = await erc1410Facet.balanceOf(signer_B.address); - - // Transfer - await clearingFacet.clearingTransferByPartition(clearingOperation, _AMOUNT, signer_B.address); + describe("Edge cases and Additional Scenarios", () => { + it("GIVEN multiple clearings WHEN getClearingsIdForByPartition with pagination THEN returns correct results", async () => { + // Create multiple clearings + for (let i = 0; i < 5; i++) { + await clearingFacet.clearingTransferByPartition(clearingOperation, _AMOUNT / 10, signer_B.address); + } - clearingIdentifier.clearingId = 1; - clearingIdentifier.clearingOperationType = ClearingOperationType.Transfer; + // Test pagination + const clearingIds_page1 = await clearingFacet.getClearingsIdForByPartition( + _DEFAULT_PARTITION, + signer_A.address, + ClearingOperationType.Transfer, + 0, + 3, + ); + const clearingIds_page2 = await clearingFacet.getClearingsIdForByPartition( + _DEFAULT_PARTITION, + signer_A.address, + ClearingOperationType.Transfer, + 1, + 3, + ); - await expect(clearingActionsFacet.approveClearingOperationByPartition(clearingIdentifier)) - .to.emit(clearingActionsFacet, "ClearingOperationApproved") - .withArgs(signer_A.address, signer_A.address, _PARTITION_ID_1, 1, ClearingOperationType.Transfer, "0x"); + expect(clearingIds_page1.length).to.equal(3); + expect(clearingIds_page2.length).to.equal(2); + expect(clearingIds_page1[0]).to.equal(1); + expect(clearingIds_page1[1]).to.equal(2); + expect(clearingIds_page1[2]).to.equal(3); + expect(clearingIds_page2[0]).to.equal(4); + expect(clearingIds_page2[1]).to.equal(5); + }); - const balance_A_final_Transfer = await erc1410Facet.balanceOf(signer_A.address); - const balance_B_final_Transfer = await erc1410Facet.balanceOf(signer_B.address); + it("GIVEN a clearing transfer WHEN checking cleared amounts across different accounts THEN values are correct", async () => { + const amount_A = _AMOUNT; + const amount_B = _AMOUNT * 2; - // Redeem + await clearingFacet + .connect(signer_A) + .clearingTransferByPartition(clearingOperation, amount_A, signer_C.address); + await clearingFacet + .connect(signer_B) + .clearingTransferByPartition(clearingOperation, amount_B, signer_C.address); - await clearingFacet.clearingRedeemByPartition(clearingOperation, _AMOUNT); - clearingIdentifier.clearingOperationType = ClearingOperationType.Redeem; + const clearedAmount_A = await clearingFacet.getClearedAmountFor(signer_A.address); + const clearedAmount_B = await clearingFacet.getClearedAmountFor(signer_B.address); + const clearedAmountByPartition_A = await clearingFacet.getClearedAmountForByPartition( + _DEFAULT_PARTITION, + signer_A.address, + ); + const clearedAmountByPartition_B = await clearingFacet.getClearedAmountForByPartition( + _DEFAULT_PARTITION, + signer_B.address, + ); - await expect(clearingActionsFacet.approveClearingOperationByPartition(clearingIdentifier)) - .to.emit(clearingActionsFacet, "ClearingOperationApproved") - .withArgs(signer_A.address, signer_A.address, _PARTITION_ID_1, 1, ClearingOperationType.Redeem, "0x"); + expect(clearedAmount_A).to.equal(amount_A); + expect(clearedAmount_B).to.equal(amount_B); + expect(clearedAmountByPartition_A).to.equal(amount_A); + expect(clearedAmountByPartition_B).to.equal(amount_B); + }); - const balance_A_final_Redeem = await erc1410Facet.balanceOf(signer_A.address); - const balance_B_final_Redeem = await erc1410Facet.balanceOf(signer_B.address); + it("GIVEN a Token WHEN creating clearing with same parameters multiple times THEN all clearings are created independently", async () => { + const countBefore = await clearingFacet.getClearingCountForByPartition( + _DEFAULT_PARTITION, + signer_A.address, + ClearingOperationType.Transfer, + ); - // HoldCreate - await clearingFacet.clearingCreateHoldByPartition(clearingOperation, hold); + await clearingFacet.clearingTransferByPartition(clearingOperation, _AMOUNT / 2, signer_B.address); + await clearingFacet.clearingTransferByPartition(clearingOperation, _AMOUNT / 2, signer_B.address); + await clearingFacet.clearingTransferByPartition(clearingOperation, _AMOUNT / 2, signer_B.address); - clearingIdentifier.clearingOperationType = ClearingOperationType.HoldCreation; + const countAfter = await clearingFacet.getClearingCountForByPartition( + _DEFAULT_PARTITION, + signer_A.address, + ClearingOperationType.Transfer, + ); - await expect(clearingActionsFacet.approveClearingOperationByPartition(clearingIdentifier)) - .to.emit(clearingActionsFacet, "ClearingOperationApproved") - .withArgs( - signer_A.address, - signer_A.address, - _PARTITION_ID_1, - 1, - ClearingOperationType.HoldCreation, - ethers.utils.defaultAbiCoder.encode(["uint256"], [1]), - ); + expect(countAfter).to.equal(countBefore.add(3)); - const balance_A_final_HoldCreation = await erc1410Facet.balanceOf(signer_A.address); - const balance_B_final_HoldCreation = await erc1410Facet.balanceOf(signer_B.address); + // Verify each clearing is independent + const clearing1 = await clearingFacet.getClearingTransferForByPartition( + _DEFAULT_PARTITION, + signer_A.address, + countBefore.add(1).toNumber(), + ); + const clearing2 = await clearingFacet.getClearingTransferForByPartition( + _DEFAULT_PARTITION, + signer_A.address, + countBefore.add(2).toNumber(), + ); + const clearing3 = await clearingFacet.getClearingTransferForByPartition( + _DEFAULT_PARTITION, + signer_A.address, + countBefore.add(3).toNumber(), + ); - expect(balance_B_final_Transfer.toNumber()).to.equal(balance_B_original.toNumber() + _AMOUNT); - expect(balance_A_final_Transfer.toNumber()).to.equal(balance_A_original.toNumber() - _AMOUNT); - expect(balance_B_final_Redeem.toNumber()).to.equal(balance_B_original.toNumber() + _AMOUNT); - expect(balance_A_final_Redeem.toNumber()).to.equal(balance_A_original.toNumber() - 2 * _AMOUNT); - expect(balance_B_final_HoldCreation.toNumber()).to.equal(balance_B_original.toNumber() + _AMOUNT); - expect(balance_A_final_HoldCreation.toNumber()).to.equal(balance_A_original.toNumber() - 3 * _AMOUNT); + expect(clearing1.amount).to.equal(_AMOUNT / 2); + expect(clearing2.amount).to.equal(_AMOUNT / 2); + expect(clearing3.amount).to.equal(_AMOUNT / 2); + }); + + it("GIVEN mixed clearing operations WHEN checking counts per type THEN counts are accurate", async () => { + await clearingFacet.clearingTransferByPartition(clearingOperation, _AMOUNT / 5, signer_B.address); + await clearingFacet.clearingTransferByPartition(clearingOperation, _AMOUNT / 5, signer_B.address); + await clearingFacet.clearingRedeemByPartition(clearingOperation, _AMOUNT / 5); + await clearingFacet.clearingRedeemByPartition(clearingOperation, _AMOUNT / 5); + await clearingFacet.clearingRedeemByPartition(clearingOperation, _AMOUNT / 5); + await clearingFacet.clearingCreateHoldByPartition(clearingOperation, { + ...hold, + amount: _AMOUNT / 5, + }); + + const transferCount = await clearingFacet.getClearingCountForByPartition( + _DEFAULT_PARTITION, + signer_A.address, + ClearingOperationType.Transfer, + ); + const redeemCount = await clearingFacet.getClearingCountForByPartition( + _DEFAULT_PARTITION, + signer_A.address, + ClearingOperationType.Redeem, + ); + const holdCreationCount = await clearingFacet.getClearingCountForByPartition( + _DEFAULT_PARTITION, + signer_A.address, + ClearingOperationType.HoldCreation, + ); + + expect(transferCount).to.equal(2); + expect(redeemCount).to.equal(3); + expect(holdCreationCount).to.equal(1); + }); + + it("GIVEN a clearing WHEN checking third party type THEN correct type is returned", async () => { + // NULL type (direct) + await clearingFacet.clearingTransferByPartition(clearingOperation, _AMOUNT / 4, signer_B.address); + + // AUTHORIZED type (from) + await erc20Facet.connect(signer_A).increaseAllowance(signer_C.address, _AMOUNT / 4); + await clearingFacet + .connect(signer_C) + .clearingTransferFromByPartition(clearingOperationFrom, _AMOUNT / 4, signer_B.address); + + // OPERATOR type + await erc1410Facet.connect(signer_A).authorizeOperator(signer_C.address); + await clearingFacet + .connect(signer_C) + .operatorClearingTransferByPartition(clearingOperationFrom, _AMOUNT / 4, signer_B.address); + + const thirdParty1 = await clearingFacet.getClearingThirdParty( + _DEFAULT_PARTITION, + signer_A.address, + ClearingOperationType.Transfer, + 1, + ); + const thirdParty2 = await clearingFacet.getClearingThirdParty( + _DEFAULT_PARTITION, + signer_A.address, + ClearingOperationType.Transfer, + 2, + ); + const thirdParty3 = await clearingFacet.getClearingThirdParty( + _DEFAULT_PARTITION, + signer_A.address, + ClearingOperationType.Transfer, + 3, + ); + + expect(thirdParty1).to.equal(ADDRESS_ZERO); // NULL type + expect(thirdParty2).to.equal(signer_C.address); // AUTHORIZED + expect(thirdParty3).to.equal(ADDRESS_ZERO); // OPERATOR (stored differently) + }); + + it("GIVEN a Token WHEN activating and deactivating clearing multiple times THEN status is tracked correctly", async () => { + expect(await clearingActionsFacet.isClearingActivated()).to.equal(true); + + await clearingActionsFacet.deactivateClearing(); + expect(await clearingActionsFacet.isClearingActivated()).to.equal(false); + + await clearingActionsFacet.activateClearing(); + expect(await clearingActionsFacet.isClearingActivated()).to.equal(true); + + await clearingActionsFacet.deactivateClearing(); + expect(await clearingActionsFacet.isClearingActivated()).to.equal(false); + + await clearingActionsFacet.activateClearing(); + expect(await clearingActionsFacet.isClearingActivated()).to.equal(true); + }); + + // it("GIVEN a clearing WHEN expiration timestamp is at current time THEN transaction succeeds", async () => { + // const currentTime = (await ethers.provider.getBlock("latest")).timestamp; + // const clearingOpCurrentTime = { + // ...clearingOperation, + // expirationTimestamp: currentTime + 1, // Add 1 second to ensure it's in the future + // }; + + // // Should succeed with future timestamp + // await expect(clearingFacet.clearingTransferByPartition(clearingOpCurrentTime, _AMOUNT / 10, signer_B.address)) + // .to.not.be.reverted; + // }); + + it("GIVEN expired clearing operations WHEN reclaimClearingOperationByPartition for different types THEN all succeed", async () => { + // Create clearings of all types + await clearingFacet.clearingTransferByPartition(clearingOperation, _AMOUNT / 4, signer_B.address); + await clearingFacet.clearingRedeemByPartition(clearingOperation, _AMOUNT / 4); + await clearingFacet.clearingCreateHoldByPartition(clearingOperation, { + ...hold, + amount: _AMOUNT / 4, + }); + + // Wait for expiration + await timeTravelFacet.changeSystemTimestamp(clearingOperation.expirationTimestamp + 1); + + // Reclaim all + clearingIdentifier.clearingId = 1; + clearingIdentifier.clearingOperationType = ClearingOperationType.Transfer; + await expect(clearingActionsFacet.reclaimClearingOperationByPartition(clearingIdentifier)).to.emit( + clearingActionsFacet, + "ClearingOperationReclaimed", + ); + + clearingIdentifier.clearingOperationType = ClearingOperationType.Redeem; + await expect(clearingActionsFacet.reclaimClearingOperationByPartition(clearingIdentifier)).to.emit( + clearingActionsFacet, + "ClearingOperationReclaimed", + ); + + clearingIdentifier.clearingOperationType = ClearingOperationType.HoldCreation; + await expect(clearingActionsFacet.reclaimClearingOperationByPartition(clearingIdentifier)).to.emit( + clearingActionsFacet, + "ClearingOperationReclaimed", + ); + }); + }); + + describe("Managing clearing success", () => { + it("GIVEN a Token WHEN clearing operation approved THEN transaction succeeds", async () => { + const balance_A_original = await erc1410Facet.balanceOf(signer_A.address); + const balance_B_original = await erc1410Facet.balanceOf(signer_B.address); + + // Transfer + await clearingFacet.clearingTransferByPartition(clearingOperation, _AMOUNT, signer_B.address); + + clearingIdentifier.clearingId = 1; + clearingIdentifier.clearingOperationType = ClearingOperationType.Transfer; + + await expect(clearingActionsFacet.approveClearingOperationByPartition(clearingIdentifier)) + .to.emit(clearingActionsFacet, "ClearingOperationApproved") + .withArgs(signer_A.address, signer_A.address, _PARTITION_ID_1, 1, ClearingOperationType.Transfer, "0x"); + + const balance_A_final_Transfer = await erc1410Facet.balanceOf(signer_A.address); + const balance_B_final_Transfer = await erc1410Facet.balanceOf(signer_B.address); + + // Redeem + + await clearingFacet.clearingRedeemByPartition(clearingOperation, _AMOUNT); + clearingIdentifier.clearingOperationType = ClearingOperationType.Redeem; + + await expect(clearingActionsFacet.approveClearingOperationByPartition(clearingIdentifier)) + .to.emit(clearingActionsFacet, "ClearingOperationApproved") + .withArgs(signer_A.address, signer_A.address, _PARTITION_ID_1, 1, ClearingOperationType.Redeem, "0x"); + + const balance_A_final_Redeem = await erc1410Facet.balanceOf(signer_A.address); + const balance_B_final_Redeem = await erc1410Facet.balanceOf(signer_B.address); + + // HoldCreate + await clearingFacet.clearingCreateHoldByPartition(clearingOperation, hold); + + clearingIdentifier.clearingOperationType = ClearingOperationType.HoldCreation; + + await expect(clearingActionsFacet.approveClearingOperationByPartition(clearingIdentifier)) + .to.emit(clearingActionsFacet, "ClearingOperationApproved") + .withArgs( + signer_A.address, + signer_A.address, + _PARTITION_ID_1, + 1, + ClearingOperationType.HoldCreation, + ethers.utils.defaultAbiCoder.encode(["uint256"], [1]), + ); + + const balance_A_final_HoldCreation = await erc1410Facet.balanceOf(signer_A.address); + const balance_B_final_HoldCreation = await erc1410Facet.balanceOf(signer_B.address); + + expect(balance_B_final_Transfer.toNumber()).to.equal(balance_B_original.toNumber() + _AMOUNT); + expect(balance_A_final_Transfer.toNumber()).to.equal(balance_A_original.toNumber() - _AMOUNT); + expect(balance_B_final_Redeem.toNumber()).to.equal(balance_B_original.toNumber() + _AMOUNT); + expect(balance_A_final_Redeem.toNumber()).to.equal(balance_A_original.toNumber() - 2 * _AMOUNT); + expect(balance_B_final_HoldCreation.toNumber()).to.equal(balance_B_original.toNumber() + _AMOUNT); + expect(balance_A_final_HoldCreation.toNumber()).to.equal(balance_A_original.toNumber() - 3 * _AMOUNT); }); it("GIVEN a Token WHEN clearing operation cancelled THEN transaction succeeds", async () => { @@ -2557,146 +3123,1013 @@ describe("Clearing Tests", () => { }); }); - describe("Multi Partition", async () => { + describe("Common Modifiers", () => { beforeEach(async () => { - await loadFixture(deploySecurityFixtureMultiPartition); + await loadFixture(deploySecurityFixtureSinglePartition); }); - describe("Create clearing with wrong input arguments", async () => { - it("GIVEN a Token WHEN createHoldByPartition for wrong partition THEN transaction fails with InvalidPartition", async () => { - const clearingOperation_wrong_partition = { - ...clearingOperation, - partition: _WRONG_PARTITION, - }; + describe("onlyClearingDisabled modifier", () => { + it("GIVEN clearing is activated WHEN attempting executeHold THEN transaction succeeds (executeHold does not have onlyClearingDisabled modifier)", async () => { + // First create a hold when clearing is not yet activated + await clearingActionsFacet.deactivateClearing(); - const clearingOperationFromB_wrong_partition = { - ...clearingOperationFrom, - clearingOperation: clearingOperation_wrong_partition, - from: signer_B.address, + // Issue tokens to signer_A so they can create a hold + await accessControlFacet.grantRole(ATS_ROLES._ISSUER_ROLE, signer_A.address); + await erc1410Facet.issueByPartition({ + partition: _DEFAULT_PARTITION, + tokenHolder: signer_A.address, + value: 1000, + data: _DATA, + }); + + const holdAmount = 100; + const holdExpirationTimestamp = expirationTimestamp; + const holdEscrow = signer_C.address; + const holdTo = signer_B.address; + const holdData = _DATA; + + const holdToCreate = { + amount: holdAmount, + expirationTimestamp: holdExpirationTimestamp, + escrow: holdEscrow, + to: holdTo, + data: holdData, }; - // Transfers - await expect( - clearingFacet.clearingTransferByPartition(clearingOperation_wrong_partition, _AMOUNT, signer_B.address), - ).to.be.revertedWithCustomError(erc1410Facet, "InvalidPartition"); - await erc1410Facet.authorizeOperator(signer_A.address); - await expect( - clearingFacet.operatorClearingTransferByPartition( - clearingOperationFromB_wrong_partition, - _AMOUNT, - signer_A.address, - ), - ).to.be.revertedWithCustomError(erc1410Facet, "InvalidPartition"); + await holdFacet.connect(signer_A).createHoldByPartition(_DEFAULT_PARTITION, holdToCreate); - // Holds - const hold_wrong = { - ...hold, - amount: _AMOUNT, + // Now activate clearing + await clearingActionsFacet.activateClearing(); + + const holdId = 1; + const holdIdentifierForTest = { + partition: _DEFAULT_PARTITION, + tokenHolder: signer_A.address, + holdId: holdId, }; - await expect( - clearingFacet.clearingCreateHoldByPartition(clearingOperation_wrong_partition, hold_wrong), - ).to.be.revertedWithCustomError(erc1410Facet, "InvalidPartition"); - await expect( - clearingFacet.operatorClearingCreateHoldByPartition(clearingOperationFromB_wrong_partition, hold_wrong), - ).to.be.revertedWithCustomError(erc1410Facet, "InvalidPartition"); - // Redeems + // Execute hold - should succeed because executeHoldByPartition doesn't have onlyClearingDisabled modifier await expect( - clearingFacet.clearingRedeemByPartition(clearingOperation_wrong_partition, _AMOUNT), - ).to.be.revertedWithCustomError(erc1410Facet, "InvalidPartition"); - await expect( - clearingFacet.operatorClearingRedeemByPartition(clearingOperationFromB_wrong_partition, _AMOUNT), - ).to.be.revertedWithCustomError(erc1410Facet, "InvalidPartition"); + holdFacet.connect(signer_C).executeHoldByPartition(holdIdentifierForTest, signer_B.address, holdAmount), + ).to.not.be.reverted; }); - }); - describe("Manage clearing with wrong input arguments", async () => { - it("GIVEN a clearing transfer WHEN approveClearingOperationByPartition with wrong input arguments THEN transaction fails with WrongClearingId", async () => { - await clearingFacet.connect(signer_A).clearingTransferByPartition(clearingOperation, _AMOUNT, signer_C.address); + it("GIVEN clearing is activated WHEN attempting releaseHold THEN transaction succeeds (releaseHold does not have onlyClearingDisabled modifier)", async () => { + // First create a hold when clearing is not yet activated + await clearingActionsFacet.deactivateClearing(); - // Wrong Partition Id - const clearingIdentifier_WrongPartition = { - ...clearingIdentifier, - partition: _WRONG_PARTITION, + // Issue tokens to signer_A so they can create a hold + await accessControlFacet.grantRole(ATS_ROLES._ISSUER_ROLE, signer_A.address); + await erc1410Facet.issueByPartition({ + partition: _DEFAULT_PARTITION, + tokenHolder: signer_A.address, + value: 1000, + data: _DATA, + }); + + const holdAmount = 100; + const holdExpirationTimestamp = expirationTimestamp; + const holdEscrow = signer_C.address; + const holdTo = signer_B.address; + const holdData = _DATA; + + const holdToCreate = { + amount: holdAmount, + expirationTimestamp: holdExpirationTimestamp, + escrow: holdEscrow, + to: holdTo, + data: holdData, }; - await expect( - clearingActionsFacet.approveClearingOperationByPartition(clearingIdentifier_WrongPartition), - ).to.be.revertedWithCustomError(clearingActionsFacet, "WrongClearingId"); + await holdFacet.connect(signer_A).createHoldByPartition(_DEFAULT_PARTITION, holdToCreate); - // Wrong Token Holder - const clearingIdentifier_WrongTokenHolder = { - ...clearingIdentifier, - tokenHolder: signer_B.address, + // Now activate clearing + await clearingActionsFacet.activateClearing(); + + const holdId = 1; + const holdIdentifierForTest = { + partition: _DEFAULT_PARTITION, + tokenHolder: signer_A.address, + holdId: holdId, }; + // Release hold - should succeed because releaseHoldByPartition doesn't have onlyClearingDisabled modifier + await expect(holdFacet.connect(signer_C).releaseHoldByPartition(holdIdentifierForTest, holdAmount)).to.not.be + .reverted; + }); + }); + + describe("validateAddress modifier", () => { + it("GIVEN zero address as destination WHEN calling clearingTransferByPartition THEN transaction fails with ZeroAddressNotAllowed", async () => { await expect( - clearingActionsFacet.approveClearingOperationByPartition(clearingIdentifier_WrongTokenHolder), - ).to.be.revertedWithCustomError(clearingActionsFacet, "WrongClearingId"); + clearingFacet.connect(signer_A).clearingTransferByPartition(clearingOperation, _AMOUNT, ADDRESS_ZERO), + ).to.be.revertedWithCustomError(clearingFacet, "ZeroAddressNotAllowed"); + }); + }); - // Wrong Clearing Id - const clearingIdentifier_ClearingId = { + describe("onlyUninitialized modifier", () => { + it("GIVEN clearing already initialized WHEN calling initializeClearing THEN transaction fails with AlreadyInitialized", async () => { + await expect(clearingActionsFacet.initializeClearing(true)).to.be.revertedWithCustomError( + clearingActionsFacet, + "AlreadyInitialized", + ); + }); + }); + + describe("onlyDefaultPartitionWithSinglePartition modifier", () => { + it("GIVEN non-default partition WHEN calling cancelClearingOperationByPartition THEN transaction fails with PartitionNotAllowedInSinglePartitionMode", async () => { + const wrongPartitionIdentifier = { ...clearingIdentifier, - clearingId: 100, + partition: _WRONG_PARTITION, }; await expect( - clearingActionsFacet.approveClearingOperationByPartition(clearingIdentifier_ClearingId), - ).to.be.revertedWithCustomError(clearingActionsFacet, "WrongClearingId"); - - // Wrong Clearing Operation Type + clearingActionsFacet.cancelClearingOperationByPartition(wrongPartitionIdentifier), + ).to.be.revertedWithCustomError(clearingActionsFacet, "PartitionNotAllowedInSinglePartitionMode"); + }); - const clearingIdentifier_ClearingOperationType = { + it("GIVEN non-default partition WHEN calling reclaimClearingOperationByPartition THEN transaction fails with PartitionNotAllowedInSinglePartitionMode", async () => { + const wrongPartitionIdentifier = { ...clearingIdentifier, - clearingOperationType: ClearingOperationType.Redeem, + partition: _WRONG_PARTITION, }; await expect( - clearingActionsFacet.approveClearingOperationByPartition(clearingIdentifier_ClearingOperationType), - ).to.be.revertedWithCustomError(clearingActionsFacet, "WrongClearingId"); + clearingActionsFacet.reclaimClearingOperationByPartition(wrongPartitionIdentifier), + ).to.be.revertedWithCustomError(clearingActionsFacet, "PartitionNotAllowedInSinglePartitionMode"); }); }); - it("GIVEN a clearing transfer WHEN cancelClearingOperationByPartition with wrong input arguments THEN transaction fails with WrongClearingId", async () => { - await clearingFacet.connect(signer_A).clearingRedeemByPartition(clearingOperation, _AMOUNT); - // Wrong Partition Id - const clearingIdentifier_WrongPartition = { - ...clearingIdentifier, - partition: _WRONG_PARTITION, - }; + describe("onlyUnrecoveredAddress modifier", () => { + describe("clearingCreateHoldByPartition", () => { + it("GIVEN a recovered msgSender WHEN calling clearingCreateHoldByPartition THEN transaction fails with WalletRecovered", async () => { + // Grant _AGENT_ROLE to call recoveryAddress + await accessControlFacet.grantRole(ATS_ROLES._AGENT_ROLE, signer_A.address); + // First recover signer_A's address + await erc3643ManagementFacet.recoveryAddress(signer_A.address, signer_D.address, ADDRESS_ZERO); + + // Try to create clearing hold with recovered address + await expect( + clearingFacet.connect(signer_A).clearingCreateHoldByPartition(clearingOperation, hold), + ).to.be.revertedWithCustomError(clearingFacet, "WalletRecovered"); + }); - await expect( - clearingActionsFacet.cancelClearingOperationByPartition(clearingIdentifier_WrongPartition), - ).to.be.revertedWithCustomError(clearingActionsFacet, "WrongClearingId"); + it("GIVEN a recovered hold.to address WHEN calling clearingCreateHoldByPartition THEN transaction fails with WalletRecovered", async () => { + // Grant _AGENT_ROLE to call recoveryAddress + await accessControlFacet.grantRole(ATS_ROLES._AGENT_ROLE, signer_A.address); + // Recover the hold.to address (signer_C - the actual hold.to) + await erc3643ManagementFacet.recoveryAddress(signer_C.address, signer_D.address, ADDRESS_ZERO); - // Wrong Token Holder - const clearingIdentifier_WrongTokenHolder = { - ...clearingIdentifier, - tokenHolder: signer_B.address, - }; + // Try to create clearing hold with recovered hold.to + await expect( + clearingFacet.connect(signer_A).clearingCreateHoldByPartition(clearingOperation, hold), + ).to.be.revertedWithCustomError(clearingFacet, "WalletRecovered"); + }); + }); - await expect( - clearingActionsFacet.cancelClearingOperationByPartition(clearingIdentifier_WrongTokenHolder), - ).to.be.revertedWithCustomError(clearingActionsFacet, "WrongClearingId"); + describe("clearingCreateHoldFromByPartition", () => { + it("GIVEN a recovered msgSender WHEN calling clearingCreateHoldFromByPartition THEN transaction fails with WalletRecovered", async () => { + await erc1410Facet.connect(signer_B).authorizeOperator(signer_A.address); + await accessControlFacet.grantRole(ATS_ROLES._AGENT_ROLE, signer_A.address); + await erc3643ManagementFacet.recoveryAddress(signer_A.address, signer_D.address, ADDRESS_ZERO); - // Wrong Clearing Id - const clearingIdentifier_ClearingId = { - ...clearingIdentifier, - clearingId: 100, - }; + const clearingOperationFromB = { + ...clearingOperationFrom, + from: signer_B.address, + }; - await expect( - clearingActionsFacet.cancelClearingOperationByPartition(clearingIdentifier_ClearingId), - ).to.be.revertedWithCustomError(clearingActionsFacet, "WrongClearingId"); + await expect( + clearingFacet.connect(signer_A).clearingCreateHoldFromByPartition(clearingOperationFromB, hold), + ).to.be.revertedWithCustomError(clearingFacet, "WalletRecovered"); + }); - // Wrong Clearing Operation Type + it("GIVEN a recovered hold.to WHEN calling clearingCreateHoldFromByPartition THEN transaction fails with WalletRecovered", async () => { + await erc1410Facet.connect(signer_B).authorizeOperator(signer_A.address); + await accessControlFacet.grantRole(ATS_ROLES._AGENT_ROLE, signer_A.address); + // Recover the hold.to address (signer_C) + await erc3643ManagementFacet.recoveryAddress(signer_C.address, signer_D.address, ADDRESS_ZERO); - const clearingIdentifier_ClearingOperationType = { - ...clearingIdentifier, - clearingOperationType: ClearingOperationType.HoldCreation, - }; + const clearingOperationFromB = { + ...clearingOperationFrom, + from: signer_B.address, + }; - await expect( + await expect( + clearingFacet.connect(signer_A).clearingCreateHoldFromByPartition(clearingOperationFromB, hold), + ).to.be.revertedWithCustomError(clearingFacet, "WalletRecovered"); + }); + + it("GIVEN a recovered from address WHEN calling clearingCreateHoldFromByPartition THEN transaction fails with WalletRecovered", async () => { + await erc1410Facet.connect(signer_B).authorizeOperator(signer_A.address); + await accessControlFacet.grantRole(ATS_ROLES._AGENT_ROLE, signer_A.address); + await erc3643ManagementFacet.recoveryAddress(signer_B.address, signer_D.address, ADDRESS_ZERO); + + const clearingOperationFromB = { + ...clearingOperationFrom, + from: signer_B.address, + }; + + await expect( + clearingFacet.connect(signer_A).clearingCreateHoldFromByPartition(clearingOperationFromB, hold), + ).to.be.revertedWithCustomError(clearingFacet, "WalletRecovered"); + }); + }); + + describe("operatorClearingCreateHoldByPartition", () => { + it("GIVEN a recovered msgSender WHEN calling operatorClearingCreateHoldByPartition THEN transaction fails with WalletRecovered", async () => { + await erc1410Facet.connect(signer_B).authorizeOperator(signer_A.address); + await accessControlFacet.grantRole(ATS_ROLES._AGENT_ROLE, signer_A.address); + await erc3643ManagementFacet.recoveryAddress(signer_A.address, signer_D.address, ADDRESS_ZERO); + + const clearingOperationFromB = { + ...clearingOperationFrom, + from: signer_B.address, + }; + + await expect( + clearingFacet.connect(signer_A).operatorClearingCreateHoldByPartition(clearingOperationFromB, hold), + ).to.be.revertedWithCustomError(clearingFacet, "WalletRecovered"); + }); + + it("GIVEN a recovered from address WHEN calling operatorClearingCreateHoldByPartition THEN transaction fails with WalletRecovered", async () => { + await erc1410Facet.connect(signer_B).authorizeOperator(signer_A.address); + await accessControlFacet.grantRole(ATS_ROLES._AGENT_ROLE, signer_A.address); + await erc3643ManagementFacet.recoveryAddress(signer_B.address, signer_D.address, ADDRESS_ZERO); + + const clearingOperationFromB = { + ...clearingOperationFrom, + from: signer_B.address, + }; + + await expect( + clearingFacet.connect(signer_A).operatorClearingCreateHoldByPartition(clearingOperationFromB, hold), + ).to.be.revertedWithCustomError(clearingFacet, "WalletRecovered"); + }); + + it("GIVEN a recovered hold.to WHEN calling operatorClearingCreateHoldByPartition THEN transaction fails with WalletRecovered", async () => { + // Give signer_B some tokens and authorize operator + await accessControlFacet.grantRole(ATS_ROLES._ISSUER_ROLE, signer_A.address); + await erc1410Facet.issueByPartition({ + partition: _DEFAULT_PARTITION, + tokenHolder: signer_B.address, + value: _AMOUNT, + data: _DATA, + }); + await erc1410Facet.connect(signer_B).authorizeOperator(signer_A.address); + await accessControlFacet.grantRole(ATS_ROLES._AGENT_ROLE, signer_A.address); + // Recover the hold.to address (signer_C - the actual hold.to) + await erc3643ManagementFacet.recoveryAddress(signer_C.address, signer_D.address, ADDRESS_ZERO); + + const clearingOperationFromB = { + ...clearingOperationFrom, + from: signer_B.address, + }; + + await expect( + clearingFacet.connect(signer_A).operatorClearingCreateHoldByPartition(clearingOperationFromB, hold), + ).to.be.revertedWithCustomError(clearingFacet, "WalletRecovered"); + }); + }); + + describe("clearingRedeemByPartition", () => { + it("GIVEN a recovered msgSender WHEN calling clearingRedeemByPartition THEN transaction fails with WalletRecovered", async () => { + await accessControlFacet.grantRole(ATS_ROLES._AGENT_ROLE, signer_A.address); + await erc3643ManagementFacet.recoveryAddress(signer_A.address, signer_D.address, ADDRESS_ZERO); + + await expect( + clearingFacet.connect(signer_A).clearingRedeemByPartition(clearingOperation, _AMOUNT), + ).to.be.revertedWithCustomError(clearingFacet, "WalletRecovered"); + }); + }); + + describe("clearingRedeemFromByPartition", () => { + it("GIVEN a recovered msgSender WHEN calling clearingRedeemFromByPartition THEN transaction fails with WalletRecovered", async () => { + await erc1410Facet.connect(signer_B).authorizeOperator(signer_A.address); + await accessControlFacet.grantRole(ATS_ROLES._AGENT_ROLE, signer_A.address); + await erc3643ManagementFacet.recoveryAddress(signer_A.address, signer_D.address, ADDRESS_ZERO); + + const clearingOperationFromB = { + ...clearingOperationFrom, + from: signer_B.address, + }; + + await expect( + clearingFacet.connect(signer_A).clearingRedeemFromByPartition(clearingOperationFromB, _AMOUNT), + ).to.be.revertedWithCustomError(clearingFacet, "WalletRecovered"); + }); + + it("GIVEN a recovered from address WHEN calling clearingRedeemFromByPartition THEN transaction fails with WalletRecovered", async () => { + await erc1410Facet.connect(signer_B).authorizeOperator(signer_A.address); + await accessControlFacet.grantRole(ATS_ROLES._AGENT_ROLE, signer_A.address); + await erc3643ManagementFacet.recoveryAddress(signer_B.address, signer_D.address, ADDRESS_ZERO); + + const clearingOperationFromB = { + ...clearingOperationFrom, + from: signer_B.address, + }; + + await expect( + clearingFacet.connect(signer_A).clearingRedeemFromByPartition(clearingOperationFromB, _AMOUNT), + ).to.be.revertedWithCustomError(clearingFacet, "WalletRecovered"); + }); + }); + + describe("operatorClearingRedeemByPartition", () => { + it("GIVEN a recovered msgSender WHEN calling operatorClearingRedeemByPartition THEN transaction fails with WalletRecovered", async () => { + await erc1410Facet.connect(signer_B).authorizeOperator(signer_A.address); + await accessControlFacet.grantRole(ATS_ROLES._AGENT_ROLE, signer_A.address); + await erc3643ManagementFacet.recoveryAddress(signer_A.address, signer_D.address, ADDRESS_ZERO); + + const clearingOperationFromB = { + ...clearingOperationFrom, + from: signer_B.address, + }; + + await expect( + clearingFacet.connect(signer_A).operatorClearingRedeemByPartition(clearingOperationFromB, _AMOUNT), + ).to.be.revertedWithCustomError(clearingFacet, "WalletRecovered"); + }); + + it("GIVEN a recovered from address WHEN calling operatorClearingRedeemByPartition THEN transaction fails with WalletRecovered", async () => { + await erc1410Facet.connect(signer_B).authorizeOperator(signer_A.address); + await accessControlFacet.grantRole(ATS_ROLES._AGENT_ROLE, signer_A.address); + await erc3643ManagementFacet.recoveryAddress(signer_B.address, signer_D.address, ADDRESS_ZERO); + + const clearingOperationFromB = { + ...clearingOperationFrom, + from: signer_B.address, + }; + + await expect( + clearingFacet.connect(signer_A).operatorClearingRedeemByPartition(clearingOperationFromB, _AMOUNT), + ).to.be.revertedWithCustomError(clearingFacet, "WalletRecovered"); + }); + }); + + describe("clearingTransferByPartition", () => { + it("GIVEN a recovered msgSender WHEN calling clearingTransferByPartition THEN transaction fails with WalletRecovered", async () => { + await accessControlFacet.grantRole(ATS_ROLES._AGENT_ROLE, signer_A.address); + await erc3643ManagementFacet.recoveryAddress(signer_A.address, signer_D.address, ADDRESS_ZERO); + + await expect( + clearingFacet.connect(signer_A).clearingTransferByPartition(clearingOperation, _AMOUNT, signer_B.address), + ).to.be.revertedWithCustomError(clearingFacet, "WalletRecovered"); + }); + + it("GIVEN a recovered to address WHEN calling clearingTransferByPartition THEN transaction fails with WalletRecovered", async () => { + await accessControlFacet.grantRole(ATS_ROLES._AGENT_ROLE, signer_A.address); + await erc3643ManagementFacet.recoveryAddress(signer_B.address, signer_D.address, ADDRESS_ZERO); + + await expect( + clearingFacet.connect(signer_A).clearingTransferByPartition(clearingOperation, _AMOUNT, signer_B.address), + ).to.be.revertedWithCustomError(clearingFacet, "WalletRecovered"); + }); + }); + + describe("clearingTransferFromByPartition", () => { + it("GIVEN a recovered msgSender WHEN calling clearingTransferFromByPartition THEN transaction fails with WalletRecovered", async () => { + await erc1410Facet.connect(signer_B).authorizeOperator(signer_A.address); + await accessControlFacet.grantRole(ATS_ROLES._AGENT_ROLE, signer_A.address); + await erc3643ManagementFacet.recoveryAddress(signer_A.address, signer_D.address, ADDRESS_ZERO); + + const clearingOperationFromB = { + ...clearingOperationFrom, + from: signer_B.address, + }; + + await expect( + clearingFacet + .connect(signer_A) + .clearingTransferFromByPartition(clearingOperationFromB, _AMOUNT, signer_C.address), + ).to.be.revertedWithCustomError(clearingFacet, "WalletRecovered"); + }); + + it("GIVEN a recovered to address WHEN calling clearingTransferFromByPartition THEN transaction fails with WalletRecovered", async () => { + await erc1410Facet.connect(signer_B).authorizeOperator(signer_A.address); + await accessControlFacet.grantRole(ATS_ROLES._AGENT_ROLE, signer_A.address); + await erc3643ManagementFacet.recoveryAddress(signer_C.address, signer_D.address, ADDRESS_ZERO); + + const clearingOperationFromB = { + ...clearingOperationFrom, + from: signer_B.address, + }; + + await expect( + clearingFacet + .connect(signer_A) + .clearingTransferFromByPartition(clearingOperationFromB, _AMOUNT, signer_C.address), + ).to.be.revertedWithCustomError(clearingFacet, "WalletRecovered"); + }); + + it("GIVEN a recovered from address WHEN calling clearingTransferFromByPartition THEN transaction fails with WalletRecovered", async () => { + await erc1410Facet.connect(signer_B).authorizeOperator(signer_A.address); + await accessControlFacet.grantRole(ATS_ROLES._AGENT_ROLE, signer_A.address); + await erc3643ManagementFacet.recoveryAddress(signer_B.address, signer_D.address, ADDRESS_ZERO); + + const clearingOperationFromB = { + ...clearingOperationFrom, + from: signer_B.address, + }; + + await expect( + clearingFacet + .connect(signer_A) + .clearingTransferFromByPartition(clearingOperationFromB, _AMOUNT, signer_C.address), + ).to.be.revertedWithCustomError(clearingFacet, "WalletRecovered"); + }); + }); + + describe("operatorClearingTransferByPartition", () => { + it("GIVEN a recovered msgSender WHEN calling operatorClearingTransferByPartition THEN transaction fails with WalletRecovered", async () => { + await erc1410Facet.connect(signer_B).authorizeOperator(signer_A.address); + await accessControlFacet.grantRole(ATS_ROLES._AGENT_ROLE, signer_A.address); + await erc3643ManagementFacet.recoveryAddress(signer_A.address, signer_D.address, ADDRESS_ZERO); + + const clearingOperationFromB = { + ...clearingOperationFrom, + from: signer_B.address, + }; + + await expect( + clearingFacet + .connect(signer_A) + .operatorClearingTransferByPartition(clearingOperationFromB, _AMOUNT, signer_C.address), + ).to.be.revertedWithCustomError(clearingFacet, "WalletRecovered"); + }); + + it("GIVEN a recovered to address WHEN calling operatorClearingTransferByPartition THEN transaction fails with WalletRecovered", async () => { + await erc1410Facet.connect(signer_B).authorizeOperator(signer_A.address); + await accessControlFacet.grantRole(ATS_ROLES._AGENT_ROLE, signer_A.address); + await erc3643ManagementFacet.recoveryAddress(signer_C.address, signer_D.address, ADDRESS_ZERO); + + const clearingOperationFromB = { + ...clearingOperationFrom, + from: signer_B.address, + }; + + await expect( + clearingFacet + .connect(signer_A) + .operatorClearingTransferByPartition(clearingOperationFromB, _AMOUNT, signer_C.address), + ).to.be.revertedWithCustomError(clearingFacet, "WalletRecovered"); + }); + + it("GIVEN a recovered from address WHEN calling operatorClearingTransferByPartition THEN transaction fails with WalletRecovered", async () => { + await erc1410Facet.connect(signer_B).authorizeOperator(signer_A.address); + await accessControlFacet.grantRole(ATS_ROLES._AGENT_ROLE, signer_A.address); + await erc3643ManagementFacet.recoveryAddress(signer_B.address, signer_D.address, ADDRESS_ZERO); + + const clearingOperationFromB = { + ...clearingOperationFrom, + from: signer_B.address, + }; + + await expect( + clearingFacet + .connect(signer_A) + .operatorClearingTransferByPartition(clearingOperationFromB, _AMOUNT, signer_C.address), + ).to.be.revertedWithCustomError(clearingFacet, "WalletRecovered"); + }); + }); + }); + + describe("onlyUnProtectedPartitionsOrWildCardRole modifier", () => { + beforeEach(async () => { + // Grant _PROTECTED_PARTITIONS_ROLE to call protectPartitions + await accessControlFacet.grantRole(ATS_ROLES._PROTECTED_PARTITIONS_ROLE, signer_A.address); + // Protect partitions + protectedPartitionsFacet = await ethers.getContractAt("ProtectedPartitions", diamond.address); + await protectedPartitionsFacet.protectPartitions(); + }); + + it("GIVEN protected partitions without wildcard role WHEN calling clearingCreateHoldByPartition THEN transaction fails with PartitionsAreProtectedAndNoRole", async () => { + // Try to create clearing hold without having wildcard role + await expect( + clearingFacet.connect(signer_A).clearingCreateHoldByPartition(clearingOperation, hold), + ).to.be.revertedWithCustomError(clearingFacet, "PartitionsAreProtectedAndNoRole"); + }); + + it("GIVEN protected partitions with wildcard role WHEN calling clearingCreateHoldByPartition THEN transaction succeeds", async () => { + // Grant wildcard role to signer_A + await accessControlFacet.grantRole(ATS_ROLES._WILD_CARD_ROLE, signer_A.address); + + // Should succeed now + await expect(clearingFacet.connect(signer_A).clearingCreateHoldByPartition(clearingOperation, hold)).to.not.be + .reverted; + }); + + it("GIVEN protected partitions without wildcard role WHEN calling clearingCreateHoldFromByPartition THEN transaction fails with PartitionsAreProtectedAndNoRole", async () => { + // Grant allowance for clearing from + await erc1410Facet.connect(signer_B).authorizeOperator(signer_A.address); + + const clearingOperationFromB = { + ...clearingOperationFrom, + from: signer_B.address, + }; + + // Try to create clearing hold from without having wildcard role + await expect( + clearingFacet.connect(signer_A).clearingCreateHoldFromByPartition(clearingOperationFromB, hold), + ).to.be.revertedWithCustomError(clearingFacet, "PartitionsAreProtectedAndNoRole"); + }); + + it("GIVEN protected partitions without wildcard role WHEN calling operatorClearingCreateHoldByPartition THEN transaction fails with PartitionsAreProtectedAndNoRole", async () => { + // Make signer_A an operator + await erc1410Facet.connect(signer_B).authorizeOperator(signer_A.address); + + const clearingOperationFromB = { + ...clearingOperationFrom, + from: signer_B.address, + }; + + // Try to create operator clearing hold without having wildcard role + await expect( + clearingFacet.connect(signer_A).operatorClearingCreateHoldByPartition(clearingOperationFromB, hold), + ).to.be.revertedWithCustomError(clearingFacet, "PartitionsAreProtectedAndNoRole"); + }); + + describe("additional clearing methods", () => { + it("GIVEN protected partitions with wildcard role WHEN calling clearingCreateHoldFromByPartition THEN transaction succeeds", async () => { + // Give signer_B some tokens + await accessControlFacet.grantRole(ATS_ROLES._ISSUER_ROLE, signer_A.address); + await erc1410Facet.issueByPartition({ + partition: _DEFAULT_PARTITION, + tokenHolder: signer_B.address, + value: _AMOUNT, + data: _DATA, + }); + await erc1410Facet.connect(signer_B).authorizeOperator(signer_A.address); + await accessControlFacet.grantRole(ATS_ROLES._WILD_CARD_ROLE, signer_A.address); + + const clearingOperationFromB = { + ...clearingOperationFrom, + from: signer_B.address, + }; + + // Need to increase allowance for signer_A from signer_B + await erc20Facet.connect(signer_B).increaseAllowance(signer_A.address, _AMOUNT); + + await clearingFacet.connect(signer_A).clearingCreateHoldFromByPartition(clearingOperationFromB, hold); + }); + + it("GIVEN protected partitions with wildcard role WHEN calling operatorClearingCreateHoldByPartition THEN transaction succeeds", async () => { + await erc1410Facet.connect(signer_B).authorizeOperator(signer_A.address); + await accessControlFacet.grantRole(ATS_ROLES._WILD_CARD_ROLE, signer_A.address); + + const clearingOperationFromB = { + ...clearingOperationFrom, + from: signer_B.address, + }; + + await clearingFacet.connect(signer_A).operatorClearingCreateHoldByPartition(clearingOperationFromB, hold); + }); + + it("GIVEN protected partitions without wildcard role WHEN calling clearingRedeemByPartition THEN transaction fails", async () => { + await expect( + clearingFacet.connect(signer_A).clearingRedeemByPartition(clearingOperation, _AMOUNT), + ).to.be.revertedWithCustomError(clearingFacet, "PartitionsAreProtectedAndNoRole"); + }); + + it("GIVEN protected partitions with wildcard role WHEN calling clearingRedeemByPartition THEN transaction succeeds", async () => { + await accessControlFacet.grantRole(ATS_ROLES._WILD_CARD_ROLE, signer_A.address); + + await clearingFacet.connect(signer_A).clearingRedeemByPartition(clearingOperation, _AMOUNT); + }); + + it("GIVEN protected partitions without wildcard role WHEN calling clearingRedeemFromByPartition THEN transaction fails", async () => { + await erc1410Facet.connect(signer_B).authorizeOperator(signer_A.address); + + const clearingOperationFromB = { + ...clearingOperationFrom, + from: signer_B.address, + }; + + await expect( + clearingFacet.connect(signer_A).clearingRedeemFromByPartition(clearingOperationFromB, _AMOUNT), + ).to.be.revertedWithCustomError(clearingFacet, "PartitionsAreProtectedAndNoRole"); + }); + + it("GIVEN protected partitions with wildcard role WHEN calling clearingRedeemFromByPartition THEN transaction succeeds", async () => { + // Give signer_B some tokens + await accessControlFacet.grantRole(ATS_ROLES._ISSUER_ROLE, signer_A.address); + await erc1410Facet.issueByPartition({ + partition: _DEFAULT_PARTITION, + tokenHolder: signer_B.address, + value: _AMOUNT, + data: _DATA, + }); + await erc1410Facet.connect(signer_B).authorizeOperator(signer_A.address); + await accessControlFacet.grantRole(ATS_ROLES._WILD_CARD_ROLE, signer_A.address); + + const clearingOperationFromB = { + ...clearingOperationFrom, + from: signer_B.address, + }; + + // Need to increase allowance for signer_A from signer_B + await erc20Facet.connect(signer_B).increaseAllowance(signer_A.address, _AMOUNT); + + await clearingFacet.connect(signer_A).clearingRedeemFromByPartition(clearingOperationFromB, _AMOUNT); + }); + + it("GIVEN protected partitions without wildcard role WHEN calling operatorClearingRedeemByPartition THEN transaction fails", async () => { + await erc1410Facet.connect(signer_B).authorizeOperator(signer_A.address); + + const clearingOperationFromB = { + ...clearingOperationFrom, + from: signer_B.address, + }; + + await expect( + clearingFacet.connect(signer_A).operatorClearingRedeemByPartition(clearingOperationFromB, _AMOUNT), + ).to.be.revertedWithCustomError(clearingFacet, "PartitionsAreProtectedAndNoRole"); + }); + + it("GIVEN protected partitions with wildcard role WHEN calling operatorClearingRedeemByPartition THEN transaction succeeds", async () => { + await erc1410Facet.connect(signer_B).authorizeOperator(signer_A.address); + await accessControlFacet.grantRole(ATS_ROLES._WILD_CARD_ROLE, signer_A.address); + + const clearingOperationFromB = { + ...clearingOperationFrom, + from: signer_B.address, + }; + + await clearingFacet.connect(signer_A).operatorClearingRedeemByPartition(clearingOperationFromB, _AMOUNT); + }); + + it("GIVEN protected partitions without wildcard role WHEN calling clearingTransferByPartition THEN transaction fails", async () => { + await expect( + clearingFacet.connect(signer_A).clearingTransferByPartition(clearingOperation, _AMOUNT, signer_B.address), + ).to.be.revertedWithCustomError(clearingFacet, "PartitionsAreProtectedAndNoRole"); + }); + + it("GIVEN protected partitions with wildcard role WHEN calling clearingTransferByPartition THEN transaction succeeds", async () => { + await accessControlFacet.grantRole(ATS_ROLES._WILD_CARD_ROLE, signer_A.address); + + await clearingFacet + .connect(signer_A) + .clearingTransferByPartition(clearingOperation, _AMOUNT, signer_B.address); + }); + + it("GIVEN protected partitions without wildcard role WHEN calling clearingTransferFromByPartition THEN transaction fails", async () => { + await erc1410Facet.connect(signer_B).authorizeOperator(signer_A.address); + + const clearingOperationFromB = { + ...clearingOperationFrom, + from: signer_B.address, + }; + + await expect( + clearingFacet + .connect(signer_A) + .clearingTransferFromByPartition(clearingOperationFromB, _AMOUNT, signer_C.address), + ).to.be.revertedWithCustomError(clearingFacet, "PartitionsAreProtectedAndNoRole"); + }); + + it("GIVEN protected partitions with wildcard role WHEN calling clearingTransferFromByPartition THEN transaction succeeds", async () => { + // Give signer_B some tokens + await accessControlFacet.grantRole(ATS_ROLES._ISSUER_ROLE, signer_A.address); + await erc1410Facet.issueByPartition({ + partition: _DEFAULT_PARTITION, + tokenHolder: signer_B.address, + value: _AMOUNT, + data: _DATA, + }); + await erc1410Facet.connect(signer_B).authorizeOperator(signer_A.address); + await accessControlFacet.grantRole(ATS_ROLES._WILD_CARD_ROLE, signer_A.address); + + const clearingOperationFromB = { + ...clearingOperationFrom, + from: signer_B.address, + }; + + // Need to increase allowance for signer_A from signer_B + await erc20Facet.connect(signer_B).increaseAllowance(signer_A.address, _AMOUNT); + + await clearingFacet + .connect(signer_A) + .clearingTransferFromByPartition(clearingOperationFromB, _AMOUNT, signer_C.address); + }); + + it("GIVEN protected partitions without wildcard role WHEN calling operatorClearingTransferByPartition THEN transaction fails", async () => { + await erc1410Facet.connect(signer_B).authorizeOperator(signer_A.address); + + const clearingOperationFromB = { + ...clearingOperationFrom, + from: signer_B.address, + }; + + await expect( + clearingFacet + .connect(signer_A) + .operatorClearingTransferByPartition(clearingOperationFromB, _AMOUNT, signer_C.address), + ).to.be.revertedWithCustomError(clearingFacet, "PartitionsAreProtectedAndNoRole"); + }); + + it("GIVEN protected partitions with wildcard role WHEN calling operatorClearingTransferByPartition THEN transaction succeeds", async () => { + await erc1410Facet.connect(signer_B).authorizeOperator(signer_A.address); + await accessControlFacet.grantRole(ATS_ROLES._WILD_CARD_ROLE, signer_A.address); + + const clearingOperationFromB = { + ...clearingOperationFrom, + from: signer_B.address, + }; + + await clearingFacet + .connect(signer_A) + .operatorClearingTransferByPartition(clearingOperationFromB, _AMOUNT, signer_C.address); + }); + }); + }); + + describe("onlyProtectedPartitions modifier", () => { + it("GIVEN unprotected partitions WHEN calling protectedClearingTransferByPartition THEN transaction fails with PartitionsAreUnProtected", async () => { + const protectedClearingOperation = { + clearingOperation: clearingOperation, + from: signer_A.address, + deadline: expirationTimestamp, + nonce: 1, + }; + + const signature = "0x1234"; // Dummy signature + + await expect( + clearingFacet.protectedClearingTransferByPartition( + protectedClearingOperation, + _AMOUNT, + signer_B.address, + signature, + ), + ).to.be.revertedWithCustomError(clearingFacet, "PartitionsAreUnProtected"); + }); + + it("GIVEN unprotected partitions WHEN calling protectedClearingRedeemByPartition THEN transaction fails with PartitionsAreUnProtected", async () => { + const protectedClearingOperation = { + clearingOperation: clearingOperation, + from: signer_A.address, + deadline: expirationTimestamp, + nonce: 1, + }; + + const signature = "0x1234"; // Dummy signature + + await expect( + clearingFacet.protectedClearingRedeemByPartition(protectedClearingOperation, _AMOUNT, signature), + ).to.be.revertedWithCustomError(clearingFacet, "PartitionsAreUnProtected"); + }); + + it("GIVEN unprotected partitions WHEN calling protectedClearingCreateHoldByPartition THEN transaction fails with PartitionsAreUnProtected", async () => { + const protectedClearingOperation = { + clearingOperation: clearingOperation, + from: signer_A.address, + deadline: expirationTimestamp, + nonce: 1, + }; + + const signature = "0x1234"; // Dummy signature + + await expect( + clearingFacet.protectedClearingCreateHoldByPartition(protectedClearingOperation, hold, signature), + ).to.be.revertedWithCustomError(clearingFacet, "PartitionsAreUnProtected"); + }); + }); + + describe("onlyUnpaused modifier for protected clearing functions", () => { + beforeEach(async () => { + await pauseFacet.pause(); + }); + + it("GIVEN a paused Token WHEN calling protectedClearingTransferByPartition THEN transaction fails with TokenIsPaused", async () => { + const protectedClearingOperation = { + clearingOperation: clearingOperation, + from: signer_A.address, + deadline: expirationTimestamp, + nonce: 1, + }; + + const signature = "0x1234"; // Dummy signature + + await expect( + clearingFacet.protectedClearingTransferByPartition( + protectedClearingOperation, + _AMOUNT, + signer_B.address, + signature, + ), + ).to.be.revertedWithCustomError(pauseFacet, "TokenIsPaused"); + }); + + it("GIVEN a paused Token WHEN calling protectedClearingRedeemByPartition THEN transaction fails with TokenIsPaused", async () => { + const protectedClearingOperation = { + clearingOperation: clearingOperation, + from: signer_A.address, + deadline: expirationTimestamp, + nonce: 1, + }; + + const signature = "0x1234"; // Dummy signature + + await expect( + clearingFacet.protectedClearingRedeemByPartition(protectedClearingOperation, _AMOUNT, signature), + ).to.be.revertedWithCustomError(pauseFacet, "TokenIsPaused"); + }); + + it("GIVEN a paused Token WHEN calling protectedClearingCreateHoldByPartition THEN transaction fails with TokenIsPaused", async () => { + const protectedClearingOperation = { + clearingOperation: clearingOperation, + from: signer_A.address, + deadline: expirationTimestamp, + nonce: 1, + }; + + const signature = "0x1234"; // Dummy signature + + await expect( + clearingFacet.protectedClearingCreateHoldByPartition(protectedClearingOperation, hold, signature), + ).to.be.revertedWithCustomError(pauseFacet, "TokenIsPaused"); + }); + }); + + describe("onlyUnrecoveredAddress modifier for protectedClearingCreateHoldByPartition", () => { + it("GIVEN a recovered from address WHEN calling protectedClearingCreateHoldByPartition THEN transaction fails with WalletRecovered", async () => { + await accessControlFacet.grantRole(ATS_ROLES._AGENT_ROLE, signer_A.address); + await erc3643ManagementFacet.recoveryAddress(signer_A.address, signer_D.address, ADDRESS_ZERO); + + const protectedClearingOperation = { + clearingOperation: clearingOperation, + from: signer_A.address, + deadline: expirationTimestamp, + nonce: 1, + }; + + const signature = "0x1234"; // Dummy signature + + await expect( + clearingFacet.protectedClearingCreateHoldByPartition(protectedClearingOperation, hold, signature), + ).to.be.revertedWithCustomError(clearingFacet, "WalletRecovered"); + }); + + it("GIVEN a recovered hold.to address WHEN calling protectedClearingCreateHoldByPartition THEN transaction fails with WalletRecovered", async () => { + await accessControlFacet.grantRole(ATS_ROLES._AGENT_ROLE, signer_A.address); + // Recover the hold.to address (signer_C) + await erc3643ManagementFacet.recoveryAddress(signer_C.address, signer_D.address, ADDRESS_ZERO); + + const protectedClearingOperation = { + clearingOperation: clearingOperation, + from: signer_A.address, + deadline: expirationTimestamp, + nonce: 1, + }; + + const signature = "0x1234"; // Dummy signature + + await expect( + clearingFacet.protectedClearingCreateHoldByPartition(protectedClearingOperation, hold, signature), + ).to.be.revertedWithCustomError(clearingFacet, "WalletRecovered"); + }); + }); + }); + + describe("Multi Partition", async () => { + beforeEach(async () => { + await loadFixture(deploySecurityFixtureMultiPartition); + }); + + describe("Create clearing with wrong input arguments", async () => { + it("GIVEN a Token WHEN createHoldByPartition for wrong partition THEN transaction fails with InvalidPartition", async () => { + const clearingOperation_wrong_partition = { + ...clearingOperation, + partition: _WRONG_PARTITION, + }; + + const clearingOperationFromB_wrong_partition = { + ...clearingOperationFrom, + clearingOperation: clearingOperation_wrong_partition, + from: signer_B.address, + }; + + // Transfers + await expect( + clearingFacet.clearingTransferByPartition(clearingOperation_wrong_partition, _AMOUNT, signer_B.address), + ).to.be.revertedWithCustomError(erc1410Facet, "InvalidPartition"); + await erc1410Facet.authorizeOperator(signer_A.address); + await expect( + clearingFacet.operatorClearingTransferByPartition( + clearingOperationFromB_wrong_partition, + _AMOUNT, + signer_A.address, + ), + ).to.be.revertedWithCustomError(erc1410Facet, "InvalidPartition"); + + // Holds + const hold_wrong = { + ...hold, + amount: _AMOUNT, + }; + await expect( + clearingFacet.clearingCreateHoldByPartition(clearingOperation_wrong_partition, hold_wrong), + ).to.be.revertedWithCustomError(erc1410Facet, "InvalidPartition"); + await expect( + clearingFacet.operatorClearingCreateHoldByPartition(clearingOperationFromB_wrong_partition, hold_wrong), + ).to.be.revertedWithCustomError(erc1410Facet, "InvalidPartition"); + + // Redeems + await expect( + clearingFacet.clearingRedeemByPartition(clearingOperation_wrong_partition, _AMOUNT), + ).to.be.revertedWithCustomError(erc1410Facet, "InvalidPartition"); + await expect( + clearingFacet.operatorClearingRedeemByPartition(clearingOperationFromB_wrong_partition, _AMOUNT), + ).to.be.revertedWithCustomError(erc1410Facet, "InvalidPartition"); + }); + }); + + describe("Manage clearing with wrong input arguments", async () => { + it("GIVEN a clearing transfer WHEN approveClearingOperationByPartition with wrong input arguments THEN transaction fails with WrongClearingId", async () => { + await clearingFacet.connect(signer_A).clearingTransferByPartition(clearingOperation, _AMOUNT, signer_C.address); + + // Wrong Partition Id + const clearingIdentifier_WrongPartition = { + ...clearingIdentifier, + partition: _WRONG_PARTITION, + }; + + await expect( + clearingActionsFacet.approveClearingOperationByPartition(clearingIdentifier_WrongPartition), + ).to.be.revertedWithCustomError(clearingActionsFacet, "WrongClearingId"); + + // Wrong Token Holder + const clearingIdentifier_WrongTokenHolder = { + ...clearingIdentifier, + tokenHolder: signer_B.address, + }; + + await expect( + clearingActionsFacet.approveClearingOperationByPartition(clearingIdentifier_WrongTokenHolder), + ).to.be.revertedWithCustomError(clearingActionsFacet, "WrongClearingId"); + + // Wrong Clearing Id + const clearingIdentifier_ClearingId = { + ...clearingIdentifier, + clearingId: 100, + }; + + await expect( + clearingActionsFacet.approveClearingOperationByPartition(clearingIdentifier_ClearingId), + ).to.be.revertedWithCustomError(clearingActionsFacet, "WrongClearingId"); + + // Wrong Clearing Operation Type + + const clearingIdentifier_ClearingOperationType = { + ...clearingIdentifier, + clearingOperationType: ClearingOperationType.Redeem, + }; + + await expect( + clearingActionsFacet.approveClearingOperationByPartition(clearingIdentifier_ClearingOperationType), + ).to.be.revertedWithCustomError(clearingActionsFacet, "WrongClearingId"); + }); + }); + it("GIVEN a clearing transfer WHEN cancelClearingOperationByPartition with wrong input arguments THEN transaction fails with WrongClearingId", async () => { + await clearingFacet.connect(signer_A).clearingRedeemByPartition(clearingOperation, _AMOUNT); + + // Wrong Partition Id + const clearingIdentifier_WrongPartition = { + ...clearingIdentifier, + partition: _WRONG_PARTITION, + }; + + await expect( + clearingActionsFacet.cancelClearingOperationByPartition(clearingIdentifier_WrongPartition), + ).to.be.revertedWithCustomError(clearingActionsFacet, "WrongClearingId"); + + // Wrong Token Holder + const clearingIdentifier_WrongTokenHolder = { + ...clearingIdentifier, + tokenHolder: signer_B.address, + }; + + await expect( + clearingActionsFacet.cancelClearingOperationByPartition(clearingIdentifier_WrongTokenHolder), + ).to.be.revertedWithCustomError(clearingActionsFacet, "WrongClearingId"); + + // Wrong Clearing Id + const clearingIdentifier_ClearingId = { + ...clearingIdentifier, + clearingId: 100, + }; + + await expect( + clearingActionsFacet.cancelClearingOperationByPartition(clearingIdentifier_ClearingId), + ).to.be.revertedWithCustomError(clearingActionsFacet, "WrongClearingId"); + + // Wrong Clearing Operation Type + + const clearingIdentifier_ClearingOperationType = { + ...clearingIdentifier, + clearingOperationType: ClearingOperationType.HoldCreation, + }; + + await expect( clearingActionsFacet.cancelClearingOperationByPartition(clearingIdentifier_ClearingOperationType), ).to.be.revertedWithCustomError(clearingActionsFacet, "WrongClearingId"); }); @@ -2745,5 +4178,1374 @@ describe("Clearing Tests", () => { clearingActionsFacet.reclaimClearingOperationByPartition(clearingIdentifier_ClearingOperationType), ).to.be.revertedWithCustomError(clearingActionsFacet, "WrongClearingId"); }); + + describe("Protected Clearing Operations", () => { + let protectedClearingTransfer: any; + let protectedClearingRedeem: any; + let protectedClearingHoldCreation: any; + let domain: any; + + const clearingTransferType = { + ClearingOperation: [ + { name: "partition", type: "bytes32" }, + { name: "expirationTimestamp", type: "uint256" }, + { name: "data", type: "bytes" }, + ], + ProtectedClearingOperation: [ + { name: "clearingOperation", type: "ClearingOperation" }, + { name: "from", type: "address" }, + { name: "deadline", type: "uint256" }, + { name: "nonce", type: "uint256" }, + ], + protectedClearingTransferByPartition: [ + { name: "_protectedClearingOperation", type: "ProtectedClearingOperation" }, + { name: "_to", type: "address" }, + { name: "_amount", type: "uint256" }, + ], + }; + + const clearingRedeemType = { + ClearingOperation: [ + { name: "partition", type: "bytes32" }, + { name: "expirationTimestamp", type: "uint256" }, + { name: "data", type: "bytes" }, + ], + ProtectedClearingOperation: [ + { name: "clearingOperation", type: "ClearingOperation" }, + { name: "from", type: "address" }, + { name: "deadline", type: "uint256" }, + { name: "nonce", type: "uint256" }, + ], + protectedClearingRedeemByPartition: [ + { name: "_protectedClearingOperation", type: "ProtectedClearingOperation" }, + { name: "_value", type: "uint256" }, + ], + }; + + const clearingHoldType = { + ClearingOperation: [ + { name: "partition", type: "bytes32" }, + { name: "expirationTimestamp", type: "uint256" }, + { name: "data", type: "bytes" }, + ], + ProtectedClearingOperation: [ + { name: "clearingOperation", type: "ClearingOperation" }, + { name: "from", type: "address" }, + { name: "deadline", type: "uint256" }, + { name: "nonce", type: "uint256" }, + ], + Hold: [ + { name: "amount", type: "uint256" }, + { name: "expirationTimestamp", type: "uint256" }, + { name: "escrow", type: "address" }, + { name: "to", type: "address" }, + { name: "data", type: "bytes" }, + ], + protectedClearingCreateHoldByPartition: [ + { name: "_protectedClearingOperation", type: "ProtectedClearingOperation" }, + { name: "_hold", type: "Hold" }, + ], + }; + + async function protectedClearingFixture() { + const base = await deployEquityTokenFixture({ + equityDataParams: { + securityData: { + arePartitionsProtected: true, + clearingActive: true, + }, + }, + }); + diamond = base.diamond; + signer_A = base.deployer; + signer_B = base.user1; + signer_C = base.user2; + signer_D = base.user3; + signer_E = base.user4; + + await executeRbac(base.accessControlFacet, set_initRbacs()); + await setFacets({ diamond }); + } + + beforeEach(async () => { + await loadFixture(protectedClearingFixture); + + const chainId = await network.provider.send("eth_chainId"); + domain = { + name: "ProtectedPartitions", + version: "1.0.0", + chainId: chainId, + verifyingContract: diamond.address, + }; + + protectedClearingTransfer = { + clearingOperation: { + partition: _DEFAULT_PARTITION, + expirationTimestamp: expirationTimestamp, + data: _DATA, + }, + from: signer_A.address, + deadline: MAX_UINT256, + nonce: 1, + }; + + protectedClearingRedeem = { + clearingOperation: { + partition: _DEFAULT_PARTITION, + expirationTimestamp: expirationTimestamp, + data: _DATA, + }, + from: signer_A.address, + deadline: MAX_UINT256, + nonce: 1, + }; + + protectedClearingHoldCreation = { + clearingOperation: { + partition: _DEFAULT_PARTITION, + expirationTimestamp: expirationTimestamp, + data: _DATA, + }, + from: signer_A.address, + deadline: MAX_UINT256, + nonce: 1, + }; + }); + + it("GIVEN a valid signature WHEN calling protectedClearingTransferByPartition THEN transaction succeeds", async () => { + // Setup: Issue tokens to signer_A + await accessControlFacet.grantRole(ATS_ROLES._ISSUER_ROLE, signer_A.address); + await erc1410Facet.issueByPartition({ + partition: _DEFAULT_PARTITION, + tokenHolder: signer_A.address, + value: _AMOUNT, + data: _DATA, + }); + + // Enable protected partitions - grant role first + await accessControlFacet.grantRole(ATS_ROLES._PROTECTED_PARTITIONS_ROLE, signer_A.address); + await protectedPartitionsFacet.protectPartitions(); + + // Grant role for protected partition + const packedData = ethers.utils.defaultAbiCoder.encode( + ["bytes32", "bytes32"], + [ATS_ROLES._PROTECTED_PARTITIONS_PARTICIPANT_ROLE, _DEFAULT_PARTITION], + ); + const packedDataWithoutPrefix = packedData.slice(2); + const protectedPartitionRole = ethers.utils.keccak256("0x" + packedDataWithoutPrefix); + await accessControlFacet.grantRole(protectedPartitionRole, signer_A.address); + + // Get the nonce for signer_A + const nonce = (await noncesFacet.nonces(signer_A.address)).toNumber() + 1; + + const protectedClearingOperation = { + clearingOperation: { + partition: _DEFAULT_PARTITION, + expirationTimestamp: expirationTimestamp, + data: _DATA, + }, + from: signer_A.address, + deadline: expirationTimestamp, + nonce: nonce, + }; + + // Prepare EIP-712 domain + const name = (await erc20Facet.getERC20Metadata()).info.name; + const version = (await diamondCutFacet.getConfigInfo()).version_.toString(); + const chainId = await network.provider.send("eth_chainId"); + + const domain = { + name: name, + version: version, + chainId: parseInt(chainId, 16), + verifyingContract: diamond.address, + }; + + const types = { + ClearingOperation: [ + { name: "partition", type: "bytes32" }, + { name: "expirationTimestamp", type: "uint256" }, + { name: "data", type: "bytes" }, + ], + ProtectedClearingOperation: [ + { name: "clearingOperation", type: "ClearingOperation" }, + { name: "from", type: "address" }, + { name: "deadline", type: "uint256" }, + { name: "nonce", type: "uint256" }, + ], + protectedClearingTransferByPartition: [ + { + name: "_protectedClearingOperation", + type: "ProtectedClearingOperation", + }, + { name: "_amount", type: "uint256" }, + { name: "_to", type: "address" }, + ], + }; + + const message = { + _protectedClearingOperation: protectedClearingOperation, + _amount: _AMOUNT, + _to: signer_C.address, + }; + + // Sign the message + const signature = await signer_A._signTypedData(domain, types, message); + + // Execute the protected clearing transfer + await clearingFacet + .connect(signer_A) + .protectedClearingTransferByPartition(protectedClearingOperation, _AMOUNT, signer_C.address, signature); + + // Check cleared amount + const clearedAmount = await clearingFacet.getClearedAmountForByPartition(_DEFAULT_PARTITION, signer_A.address); + expect(clearedAmount).to.equal(_AMOUNT); + }); + + it("GIVEN a valid signature WHEN calling protectedClearingRedeemByPartition THEN transaction succeeds", async () => { + // Setup: Issue tokens to signer_A + await accessControlFacet.grantRole(ATS_ROLES._ISSUER_ROLE, signer_A.address); + await erc1410Facet.issueByPartition({ + partition: _DEFAULT_PARTITION, + tokenHolder: signer_A.address, + value: _AMOUNT, + data: _DATA, + }); + + // Enable protected partitions - grant role first + await accessControlFacet.grantRole(ATS_ROLES._PROTECTED_PARTITIONS_ROLE, signer_A.address); + await protectedPartitionsFacet.protectPartitions(); + + // Grant role for protected partition + const packedData = ethers.utils.defaultAbiCoder.encode( + ["bytes32", "bytes32"], + [ATS_ROLES._PROTECTED_PARTITIONS_PARTICIPANT_ROLE, _DEFAULT_PARTITION], + ); + const packedDataWithoutPrefix = packedData.slice(2); + const protectedPartitionRole = ethers.utils.keccak256("0x" + packedDataWithoutPrefix); + await accessControlFacet.grantRole(protectedPartitionRole, signer_A.address); + + // Get the nonce for signer_A + const nonce = (await noncesFacet.nonces(signer_A.address)).toNumber() + 1; + + const protectedClearingOperation = { + clearingOperation: { + partition: _DEFAULT_PARTITION, + expirationTimestamp: expirationTimestamp, + data: _DATA, + }, + from: signer_A.address, + deadline: expirationTimestamp, + nonce: nonce, + }; + + // Prepare EIP-712 domain + const name = (await erc20Facet.getERC20Metadata()).info.name; + const version = (await diamondCutFacet.getConfigInfo()).version_.toString(); + const chainId = await network.provider.send("eth_chainId"); + + const domain = { + name: name, + version: version, + chainId: parseInt(chainId, 16), + verifyingContract: diamond.address, + }; + + const types = { + ClearingOperation: [ + { name: "partition", type: "bytes32" }, + { name: "expirationTimestamp", type: "uint256" }, + { name: "data", type: "bytes" }, + ], + ProtectedClearingOperation: [ + { name: "clearingOperation", type: "ClearingOperation" }, + { name: "from", type: "address" }, + { name: "deadline", type: "uint256" }, + { name: "nonce", type: "uint256" }, + ], + protectedClearingRedeemByPartition: [ + { + name: "_protectedClearingOperation", + type: "ProtectedClearingOperation", + }, + { name: "_amount", type: "uint256" }, + ], + }; + + const message = { + _protectedClearingOperation: protectedClearingOperation, + _amount: _AMOUNT, + }; + + // Sign the message + const signature = await signer_A._signTypedData(domain, types, message); + + // Execute the protected clearing redeem + await clearingFacet + .connect(signer_A) + .protectedClearingRedeemByPartition(protectedClearingOperation, _AMOUNT, signature); + + // Check cleared amount + const clearedAmount = await clearingFacet.getClearedAmountForByPartition(_DEFAULT_PARTITION, signer_A.address); + expect(clearedAmount).to.equal(_AMOUNT); + }); + + it("GIVEN a valid signature WHEN calling protectedClearingCreateHoldByPartition THEN transaction succeeds", async () => { + // Setup: Issue tokens to signer_A + await accessControlFacet.grantRole(ATS_ROLES._ISSUER_ROLE, signer_A.address); + await erc1410Facet.issueByPartition({ + partition: _DEFAULT_PARTITION, + tokenHolder: signer_A.address, + value: _AMOUNT, + data: _DATA, + }); + + // Enable protected partitions - grant role first + await accessControlFacet.grantRole(ATS_ROLES._PROTECTED_PARTITIONS_ROLE, signer_A.address); + await protectedPartitionsFacet.protectPartitions(); + + // Grant role for protected partition + const packedData = ethers.utils.defaultAbiCoder.encode( + ["bytes32", "bytes32"], + [ATS_ROLES._PROTECTED_PARTITIONS_PARTICIPANT_ROLE, _DEFAULT_PARTITION], + ); + const packedDataWithoutPrefix = packedData.slice(2); + const protectedPartitionRole = ethers.utils.keccak256("0x" + packedDataWithoutPrefix); + await accessControlFacet.grantRole(protectedPartitionRole, signer_A.address); + + // Get the nonce for signer_A + const nonce = (await noncesFacet.nonces(signer_A.address)).toNumber() + 1; + + const protectedClearingOperation = { + clearingOperation: { + partition: _DEFAULT_PARTITION, + expirationTimestamp: expirationTimestamp, + data: _DATA, + }, + from: signer_A.address, + deadline: expirationTimestamp, + nonce: nonce, + }; + + const holdForClearing = { + amount: BigNumber.from(_AMOUNT), + expirationTimestamp: BigNumber.from(expirationTimestamp), + escrow: signer_B.address, + to: signer_C.address, + data: _DATA, + }; + + // Prepare EIP-712 domain + const name = (await erc20Facet.getERC20Metadata()).info.name; + const version = (await diamondCutFacet.getConfigInfo()).version_.toString(); + const chainId = await network.provider.send("eth_chainId"); + + const domain = { + name: name, + version: version, + chainId: parseInt(chainId, 16), + verifyingContract: diamond.address, + }; + + const types = { + ClearingOperation: [ + { name: "partition", type: "bytes32" }, + { name: "expirationTimestamp", type: "uint256" }, + { name: "data", type: "bytes" }, + ], + ProtectedClearingOperation: [ + { name: "clearingOperation", type: "ClearingOperation" }, + { name: "from", type: "address" }, + { name: "deadline", type: "uint256" }, + { name: "nonce", type: "uint256" }, + ], + Hold: [ + { name: "amount", type: "uint256" }, + { name: "expirationTimestamp", type: "uint256" }, + { name: "escrow", type: "address" }, + { name: "to", type: "address" }, + { name: "data", type: "bytes" }, + ], + protectedClearingCreateHoldByPartition: [ + { + name: "_protectedClearingOperation", + type: "ProtectedClearingOperation", + }, + { name: "_hold", type: "Hold" }, + ], + }; + + const message = { + _protectedClearingOperation: protectedClearingOperation, + _hold: holdForClearing, + }; + + // Sign the message + const signature = await signer_A._signTypedData(domain, types, message); + + // Execute the protected clearing create hold + await clearingFacet + .connect(signer_A) + .protectedClearingCreateHoldByPartition(protectedClearingOperation, holdForClearing, signature); + + // Check cleared amount + const clearedAmount = await clearingFacet.getClearedAmountForByPartition(_DEFAULT_PARTITION, signer_A.address); + expect(clearedAmount).to.equal(_AMOUNT); + }); + + describe("Modifier Tests", () => { + describe("protectedClearingTransferByPartition", () => { + it("SHOULD revert WHEN from address is zero (validateAddress modifier)", async () => { + const protectedClearingOperationInvalid = { + clearingOperation: { + partition: _DEFAULT_PARTITION, + expirationTimestamp: expirationTimestamp, + data: _DATA, + }, + from: ethers.constants.AddressZero, // Invalid + deadline: expirationTimestamp, + nonce: 1, + }; + + const chainId = await network.provider.send("eth_chainId"); + const domain = { + name: "ProtectedPartitions", + version: "1.0.0", + chainId: parseInt(chainId, 16), + verifyingContract: diamond.address, + }; + + const types = { + ClearingOperation: [ + { name: "partition", type: "bytes32" }, + { name: "expirationTimestamp", type: "uint256" }, + { name: "data", type: "bytes" }, + ], + ProtectedClearingOperation: [ + { name: "clearingOperation", type: "ClearingOperation" }, + { name: "from", type: "address" }, + { name: "deadline", type: "uint256" }, + { name: "nonce", type: "uint256" }, + ], + protectedClearingTransferByPartition: [ + { name: "_protectedClearingOperation", type: "ProtectedClearingOperation" }, + { name: "_amount", type: "uint256" }, + { name: "_to", type: "address" }, + ], + }; + + const message = { + _protectedClearingOperation: protectedClearingOperationInvalid, + _amount: _AMOUNT, + _to: signer_C.address, + }; + + const sig = await signer_A._signTypedData(domain, types, message); + + await expect( + clearingFacet + .connect(signer_A) + .protectedClearingTransferByPartition( + protectedClearingOperationInvalid, + _AMOUNT, + signer_C.address, + sig, + ), + ).to.be.reverted; + }); + + it("SHOULD revert WHEN to address is zero (validateAddress modifier)", async () => { + await accessControlFacet.grantRole(ATS_ROLES._ISSUER_ROLE, signer_A.address); + await erc1410Facet.issueByPartition({ + partition: _DEFAULT_PARTITION, + tokenHolder: signer_A.address, + value: _AMOUNT, + data: _DATA, + }); + + await accessControlFacet.grantRole(ATS_ROLES._PROTECTED_PARTITIONS_ROLE, signer_A.address); + await protectedPartitionsFacet.protectPartitions(); + + const packedData = ethers.utils.defaultAbiCoder.encode( + ["bytes32", "bytes32"], + [ATS_ROLES._PROTECTED_PARTITIONS_PARTICIPANT_ROLE, _DEFAULT_PARTITION], + ); + const packedDataWithoutPrefix = packedData.slice(2); + const protectedPartitionRole = ethers.utils.keccak256("0x" + packedDataWithoutPrefix); + await accessControlFacet.grantRole(protectedPartitionRole, signer_A.address); + + const nonce = (await noncesFacet.nonces(signer_A.address)).toNumber() + 1; + + const protectedClearingOp = { + clearingOperation: { + partition: _DEFAULT_PARTITION, + expirationTimestamp: expirationTimestamp, + data: _DATA, + }, + from: signer_A.address, + deadline: expirationTimestamp, + nonce: nonce, + }; + + const chainId = await network.provider.send("eth_chainId"); + const domain = { + name: "ProtectedPartitions", + version: "1.0.0", + chainId: parseInt(chainId, 16), + verifyingContract: diamond.address, + }; + + const types = { + ClearingOperation: [ + { name: "partition", type: "bytes32" }, + { name: "expirationTimestamp", type: "uint256" }, + { name: "data", type: "bytes" }, + ], + ProtectedClearingOperation: [ + { name: "clearingOperation", type: "ClearingOperation" }, + { name: "from", type: "address" }, + { name: "deadline", type: "uint256" }, + { name: "nonce", type: "uint256" }, + ], + protectedClearingTransferByPartition: [ + { name: "_protectedClearingOperation", type: "ProtectedClearingOperation" }, + { name: "_amount", type: "uint256" }, + { name: "_to", type: "address" }, + ], + }; + + const message = { + _protectedClearingOperation: protectedClearingOp, + _amount: _AMOUNT, + _to: ethers.constants.AddressZero, // Invalid + }; + + const sig = await signer_A._signTypedData(domain, types, message); + + await expect( + clearingFacet + .connect(signer_A) + .protectedClearingTransferByPartition(protectedClearingOp, _AMOUNT, ethers.constants.AddressZero, sig), + ).to.be.reverted; + }); + + it("SHOULD revert WHEN expiration timestamp is invalid (onlyWithValidExpirationTimestamp modifier)", async () => { + await accessControlFacet.grantRole(ATS_ROLES._ISSUER_ROLE, signer_A.address); + await erc1410Facet.issueByPartition({ + partition: _DEFAULT_PARTITION, + tokenHolder: signer_A.address, + value: _AMOUNT, + data: _DATA, + }); + + await accessControlFacet.grantRole(ATS_ROLES._PROTECTED_PARTITIONS_ROLE, signer_A.address); + await protectedPartitionsFacet.protectPartitions(); + + const packedData = ethers.utils.defaultAbiCoder.encode( + ["bytes32", "bytes32"], + [ATS_ROLES._PROTECTED_PARTITIONS_PARTICIPANT_ROLE, _DEFAULT_PARTITION], + ); + const packedDataWithoutPrefix = packedData.slice(2); + const protectedPartitionRole = ethers.utils.keccak256("0x" + packedDataWithoutPrefix); + await accessControlFacet.grantRole(protectedPartitionRole, signer_A.address); + + const nonce = (await noncesFacet.nonces(signer_A.address)).toNumber() + 1; + + const protectedClearingOp = { + clearingOperation: { + partition: _DEFAULT_PARTITION, + expirationTimestamp: 1, // Expired timestamp + data: _DATA, + }, + from: signer_A.address, + deadline: expirationTimestamp, + nonce: nonce, + }; + + const chainId = await network.provider.send("eth_chainId"); + const domain = { + name: "ProtectedPartitions", + version: "1.0.0", + chainId: parseInt(chainId, 16), + verifyingContract: diamond.address, + }; + + const types = { + ClearingOperation: [ + { name: "partition", type: "bytes32" }, + { name: "expirationTimestamp", type: "uint256" }, + { name: "data", type: "bytes" }, + ], + ProtectedClearingOperation: [ + { name: "clearingOperation", type: "ClearingOperation" }, + { name: "from", type: "address" }, + { name: "deadline", type: "uint256" }, + { name: "nonce", type: "uint256" }, + ], + protectedClearingTransferByPartition: [ + { name: "_protectedClearingOperation", type: "ProtectedClearingOperation" }, + { name: "_amount", type: "uint256" }, + { name: "_to", type: "address" }, + ], + }; + + const message = { + _protectedClearingOperation: protectedClearingOp, + _amount: _AMOUNT, + _to: signer_C.address, + }; + + const sig = await signer_A._signTypedData(domain, types, message); + + await expect( + clearingFacet + .connect(signer_A) + .protectedClearingTransferByPartition(protectedClearingOp, _AMOUNT, signer_C.address, sig), + ).to.be.reverted; + }); + + it("SHOULD revert WHEN missing required role (onlyRole modifier)", async () => { + await accessControlFacet.grantRole(ATS_ROLES._ISSUER_ROLE, signer_A.address); + await erc1410Facet.issueByPartition({ + partition: _DEFAULT_PARTITION, + tokenHolder: signer_A.address, + value: _AMOUNT, + data: _DATA, + }); + + await accessControlFacet.grantRole(ATS_ROLES._PROTECTED_PARTITIONS_ROLE, signer_A.address); + await protectedPartitionsFacet.protectPartitions(); + + // Don't grant protectedPartitionRole + + const nonce = (await noncesFacet.nonces(signer_A.address)).toNumber() + 1; + + const protectedClearingOp = { + clearingOperation: { + partition: _DEFAULT_PARTITION, + expirationTimestamp: expirationTimestamp, + data: _DATA, + }, + from: signer_A.address, + deadline: expirationTimestamp, + nonce: nonce, + }; + + const chainId = await network.provider.send("eth_chainId"); + const domain = { + name: "ProtectedPartitions", + version: "1.0.0", + chainId: parseInt(chainId, 16), + verifyingContract: diamond.address, + }; + + const types = { + ClearingOperation: [ + { name: "partition", type: "bytes32" }, + { name: "expirationTimestamp", type: "uint256" }, + { name: "data", type: "bytes" }, + ], + ProtectedClearingOperation: [ + { name: "clearingOperation", type: "ClearingOperation" }, + { name: "from", type: "address" }, + { name: "deadline", type: "uint256" }, + { name: "nonce", type: "uint256" }, + ], + protectedClearingTransferByPartition: [ + { name: "_protectedClearingOperation", type: "ProtectedClearingOperation" }, + { name: "_amount", type: "uint256" }, + { name: "_to", type: "address" }, + ], + }; + + const message = { + _protectedClearingOperation: protectedClearingOp, + _amount: _AMOUNT, + _to: signer_C.address, + }; + + const sig = await signer_A._signTypedData(domain, types, message); + + await expect( + clearingFacet + .connect(signer_A) + .protectedClearingTransferByPartition(protectedClearingOp, _AMOUNT, signer_C.address, sig), + ).to.be.reverted; + }); + + it("SHOULD revert WHEN clearing not activated (onlyClearingActivated modifier)", async () => { + await accessControlFacet.grantRole(ATS_ROLES._ISSUER_ROLE, signer_A.address); + await erc1410Facet.issueByPartition({ + partition: _DEFAULT_PARTITION, + tokenHolder: signer_A.address, + value: _AMOUNT, + data: _DATA, + }); + + await accessControlFacet.grantRole(ATS_ROLES._PROTECTED_PARTITIONS_ROLE, signer_A.address); + await protectedPartitionsFacet.protectPartitions(); + + const packedData = ethers.utils.defaultAbiCoder.encode( + ["bytes32", "bytes32"], + [ATS_ROLES._PROTECTED_PARTITIONS_PARTICIPANT_ROLE, _DEFAULT_PARTITION], + ); + const packedDataWithoutPrefix = packedData.slice(2); + const protectedPartitionRole = ethers.utils.keccak256("0x" + packedDataWithoutPrefix); + await accessControlFacet.grantRole(protectedPartitionRole, signer_A.address); + + // Activate then deactivate clearing + await clearingActionsFacet.activateClearing(); + await clearingActionsFacet.deactivateClearing(); + + const nonce = (await noncesFacet.nonces(signer_A.address)).toNumber() + 1; + + const protectedClearingOp = { + clearingOperation: { + partition: _DEFAULT_PARTITION, + expirationTimestamp: expirationTimestamp, + data: _DATA, + }, + from: signer_A.address, + deadline: expirationTimestamp, + nonce: nonce, + }; + + const chainId = await network.provider.send("eth_chainId"); + const domain = { + name: "ProtectedPartitions", + version: "1.0.0", + chainId: parseInt(chainId, 16), + verifyingContract: diamond.address, + }; + + const types = { + ClearingOperation: [ + { name: "partition", type: "bytes32" }, + { name: "expirationTimestamp", type: "uint256" }, + { name: "data", type: "bytes" }, + ], + ProtectedClearingOperation: [ + { name: "clearingOperation", type: "ClearingOperation" }, + { name: "from", type: "address" }, + { name: "deadline", type: "uint256" }, + { name: "nonce", type: "uint256" }, + ], + protectedClearingTransferByPartition: [ + { name: "_protectedClearingOperation", type: "ProtectedClearingOperation" }, + { name: "_amount", type: "uint256" }, + { name: "_to", type: "address" }, + ], + }; + + const message = { + _protectedClearingOperation: protectedClearingOp, + _amount: _AMOUNT, + _to: signer_C.address, + }; + + const sig = await signer_A._signTypedData(domain, types, message); + + await expect( + clearingFacet + .connect(signer_A) + .protectedClearingTransferByPartition(protectedClearingOp, _AMOUNT, signer_C.address, sig), + ).to.be.reverted; + }); + }); + + describe("protectedClearingRedeemByPartition", () => { + it("SHOULD revert WHEN from address is zero (validateAddress modifier)", async () => { + const protectedClearingOperationInvalid = { + clearingOperation: { + partition: _DEFAULT_PARTITION, + expirationTimestamp: expirationTimestamp, + data: _DATA, + }, + from: ethers.constants.AddressZero, // Invalid + deadline: expirationTimestamp, + nonce: 1, + }; + + const chainId = await network.provider.send("eth_chainId"); + const domain = { + name: "ProtectedPartitions", + version: "1.0.0", + chainId: parseInt(chainId, 16), + verifyingContract: diamond.address, + }; + + const types = { + ClearingOperation: [ + { name: "partition", type: "bytes32" }, + { name: "expirationTimestamp", type: "uint256" }, + { name: "data", type: "bytes" }, + ], + ProtectedClearingOperation: [ + { name: "clearingOperation", type: "ClearingOperation" }, + { name: "from", type: "address" }, + { name: "deadline", type: "uint256" }, + { name: "nonce", type: "uint256" }, + ], + protectedClearingRedeemByPartition: [ + { name: "_protectedClearingOperation", type: "ProtectedClearingOperation" }, + { name: "_amount", type: "uint256" }, + ], + }; + + const message = { + _protectedClearingOperation: protectedClearingOperationInvalid, + _amount: _AMOUNT, + }; + + const sig = await signer_A._signTypedData(domain, types, message); + + await expect( + clearingFacet + .connect(signer_A) + .protectedClearingRedeemByPartition(protectedClearingOperationInvalid, _AMOUNT, sig), + ).to.be.reverted; + }); + + it("SHOULD revert WHEN clearing not activated (onlyClearingActivated modifier)", async () => { + await accessControlFacet.grantRole(ATS_ROLES._ISSUER_ROLE, signer_A.address); + await erc1410Facet.issueByPartition({ + partition: _DEFAULT_PARTITION, + tokenHolder: signer_A.address, + value: _AMOUNT, + data: _DATA, + }); + + await accessControlFacet.grantRole(ATS_ROLES._PROTECTED_PARTITIONS_ROLE, signer_A.address); + await protectedPartitionsFacet.protectPartitions(); + + const packedData = ethers.utils.defaultAbiCoder.encode( + ["bytes32", "bytes32"], + [ATS_ROLES._PROTECTED_PARTITIONS_PARTICIPANT_ROLE, _DEFAULT_PARTITION], + ); + const packedDataWithoutPrefix = packedData.slice(2); + const protectedPartitionRole = ethers.utils.keccak256("0x" + packedDataWithoutPrefix); + await accessControlFacet.grantRole(protectedPartitionRole, signer_A.address); + + // Activate then deactivate clearing to test the modifier + await clearingActionsFacet.activateClearing(); + await clearingActionsFacet.deactivateClearing(); + + const nonce = (await noncesFacet.nonces(signer_A.address)).toNumber() + 1; + + const protectedClearingOp = { + clearingOperation: { + partition: _DEFAULT_PARTITION, + expirationTimestamp: expirationTimestamp, + data: _DATA, + }, + from: signer_A.address, + deadline: expirationTimestamp, + nonce: nonce, + }; + + const chainId = await network.provider.send("eth_chainId"); + const domain = { + name: "ProtectedPartitions", + version: "1.0.0", + chainId: parseInt(chainId, 16), + verifyingContract: diamond.address, + }; + + const types = { + ClearingOperation: [ + { name: "partition", type: "bytes32" }, + { name: "expirationTimestamp", type: "uint256" }, + { name: "data", type: "bytes" }, + ], + ProtectedClearingOperation: [ + { name: "clearingOperation", type: "ClearingOperation" }, + { name: "from", type: "address" }, + { name: "deadline", type: "uint256" }, + { name: "nonce", type: "uint256" }, + ], + protectedClearingRedeemByPartition: [ + { name: "_protectedClearingOperation", type: "ProtectedClearingOperation" }, + { name: "_amount", type: "uint256" }, + ], + }; + + const message = { + _protectedClearingOperation: protectedClearingOp, + _amount: _AMOUNT, + }; + + const sig = await signer_A._signTypedData(domain, types, message); + + await expect( + clearingFacet.connect(signer_A).protectedClearingRedeemByPartition(protectedClearingOp, _AMOUNT, sig), + ).to.be.reverted; + }); + }); + + describe("protectedClearingCreateHoldByPartition", () => { + it("SHOULD revert WHEN from address is zero (validateAddress modifier)", async () => { + const protectedClearingOperationInvalid = { + clearingOperation: { + partition: _DEFAULT_PARTITION, + expirationTimestamp: expirationTimestamp, + data: _DATA, + }, + from: ethers.constants.AddressZero, // Invalid + deadline: expirationTimestamp, + nonce: 1, + }; + + const holdForClearing = { + amount: _AMOUNT, + expirationTimestamp: expirationTimestamp, + escrow: ethers.constants.AddressZero, + to: signer_C.address, + data: _DATA, + }; + + const chainId = await network.provider.send("eth_chainId"); + const domain = { + name: "ProtectedPartitions", + version: "1.0.0", + chainId: parseInt(chainId, 16), + verifyingContract: diamond.address, + }; + + const types = { + ClearingOperation: [ + { name: "partition", type: "bytes32" }, + { name: "expirationTimestamp", type: "uint256" }, + { name: "data", type: "bytes" }, + ], + ProtectedClearingOperation: [ + { name: "clearingOperation", type: "ClearingOperation" }, + { name: "from", type: "address" }, + { name: "deadline", type: "uint256" }, + { name: "nonce", type: "uint256" }, + ], + Hold: [ + { name: "amount", type: "uint256" }, + { name: "expirationTimestamp", type: "uint256" }, + { name: "escrow", type: "address" }, + { name: "to", type: "address" }, + { name: "data", type: "bytes" }, + ], + protectedClearingCreateHoldByPartition: [ + { name: "_protectedClearingOperation", type: "ProtectedClearingOperation" }, + { name: "_hold", type: "Hold" }, + ], + }; + + const message = { + _protectedClearingOperation: protectedClearingOperationInvalid, + _hold: holdForClearing, + }; + + const sig = await signer_A._signTypedData(domain, types, message); + + await expect( + clearingFacet + .connect(signer_A) + .protectedClearingCreateHoldByPartition(protectedClearingOperationInvalid, holdForClearing, sig), + ).to.be.reverted; + }); + + it("SHOULD revert WHEN clearing not activated (onlyClearingActivated modifier)", async () => { + await accessControlFacet.grantRole(ATS_ROLES._ISSUER_ROLE, signer_A.address); + await erc1410Facet.issueByPartition({ + partition: _DEFAULT_PARTITION, + tokenHolder: signer_A.address, + value: _AMOUNT, + data: _DATA, + }); + + await accessControlFacet.grantRole(ATS_ROLES._PROTECTED_PARTITIONS_ROLE, signer_A.address); + await protectedPartitionsFacet.protectPartitions(); + + const packedData = ethers.utils.defaultAbiCoder.encode( + ["bytes32", "bytes32"], + [ATS_ROLES._PROTECTED_PARTITIONS_PARTICIPANT_ROLE, _DEFAULT_PARTITION], + ); + const packedDataWithoutPrefix = packedData.slice(2); + const protectedPartitionRole = ethers.utils.keccak256("0x" + packedDataWithoutPrefix); + await accessControlFacet.grantRole(protectedPartitionRole, signer_A.address); + + // Activate then deactivate clearing to test the modifier + await clearingActionsFacet.activateClearing(); + await clearingActionsFacet.deactivateClearing(); + + const nonce = (await noncesFacet.nonces(signer_A.address)).toNumber() + 1; + + const protectedClearingOp = { + clearingOperation: { + partition: _DEFAULT_PARTITION, + expirationTimestamp: expirationTimestamp, + data: _DATA, + }, + from: signer_A.address, + deadline: expirationTimestamp, + nonce: nonce, + }; + + const holdForClearing = { + amount: _AMOUNT, + expirationTimestamp: expirationTimestamp, + escrow: ethers.constants.AddressZero, + to: signer_C.address, + data: _DATA, + }; + + const chainId = await network.provider.send("eth_chainId"); + const domain = { + name: "ProtectedPartitions", + version: "1.0.0", + chainId: parseInt(chainId, 16), + verifyingContract: diamond.address, + }; + + const types = { + ClearingOperation: [ + { name: "partition", type: "bytes32" }, + { name: "expirationTimestamp", type: "uint256" }, + { name: "data", type: "bytes" }, + ], + ProtectedClearingOperation: [ + { name: "clearingOperation", type: "ClearingOperation" }, + { name: "from", type: "address" }, + { name: "deadline", type: "uint256" }, + { name: "nonce", type: "uint256" }, + ], + Hold: [ + { name: "amount", type: "uint256" }, + { name: "expirationTimestamp", type: "uint256" }, + { name: "escrow", type: "address" }, + { name: "to", type: "address" }, + { name: "data", type: "bytes" }, + ], + protectedClearingCreateHoldByPartition: [ + { name: "_protectedClearingOperation", type: "ProtectedClearingOperation" }, + { name: "_hold", type: "Hold" }, + ], + }; + + const message = { + _protectedClearingOperation: protectedClearingOp, + _hold: holdForClearing, + }; + + const sig = await signer_A._signTypedData(domain, types, message); + + await expect( + clearingFacet + .connect(signer_A) + .protectedClearingCreateHoldByPartition(protectedClearingOp, holdForClearing, sig), + ).to.be.reverted; + }); + }); + }); + + // Recovery tests following hold.test.ts pattern + it("GIVEN a from user recovering WHEN protectedClearingTransferByPartition THEN transaction fails with WalletRecovered", async () => { + // Setup: Issue tokens to signer_A + await accessControlFacet.grantRole(ATS_ROLES._ISSUER_ROLE, signer_A.address); + await erc1410Facet.issueByPartition({ + partition: _DEFAULT_PARTITION, + tokenHolder: signer_A.address, + value: _AMOUNT, + data: _DATA, + }); + + // Recover signer_A's address to signer_B + await erc3643Facet.recoveryAddress(signer_A.address, signer_B.address, ADDRESS_ZERO); + + const message = { + _protectedClearingOperation: protectedClearingTransfer, + _to: signer_C.address, + _amount: _AMOUNT, + }; + + const signature = await signer_A._signTypedData(domain, clearingTransferType, message); + + await expect( + clearingFacet + .connect(signer_B) + .protectedClearingTransferByPartition(protectedClearingTransfer, _AMOUNT, signer_C.address, signature), + ).to.be.revertedWithCustomError(erc3643Facet, "WalletRecovered"); + }); + + it("GIVEN a to user recovering WHEN protectedClearingTransferByPartition THEN transaction fails with WalletRecovered", async () => { + // Setup: Issue tokens to signer_A + await accessControlFacet.grantRole(ATS_ROLES._ISSUER_ROLE, signer_A.address); + await erc1410Facet.issueByPartition({ + partition: _DEFAULT_PARTITION, + tokenHolder: signer_A.address, + value: _AMOUNT, + data: _DATA, + }); + + // Recover signer_C's address to signer_D + await erc3643Facet.recoveryAddress(signer_C.address, signer_D.address, ADDRESS_ZERO); + + const message = { + _protectedClearingOperation: protectedClearingTransfer, + _to: signer_C.address, + _amount: _AMOUNT, + }; + + const signature = await signer_A._signTypedData(domain, clearingTransferType, message); + + await expect( + clearingFacet + .connect(signer_B) + .protectedClearingTransferByPartition(protectedClearingTransfer, _AMOUNT, signer_C.address, signature), + ).to.be.revertedWithCustomError(erc3643Facet, "WalletRecovered"); + }); + + it("GIVEN missing partition role WHEN protectedClearingRedeemByPartition THEN transaction fails with AccountHasNoRole", async () => { + // Setup: Issue tokens to signer_A + await accessControlFacet.grantRole(ATS_ROLES._ISSUER_ROLE, signer_A.address); + await erc1410Facet.issueByPartition({ + partition: _DEFAULT_PARTITION, + tokenHolder: signer_A.address, + value: _AMOUNT, + data: _DATA, + }); + + // Do NOT grant partition-specific role to signer_B - this will test the onlyRole modifier + + // Try to call - should fail with AccountHasNoRole due to missing partition-specific role + await expect( + clearingFacet + .connect(signer_B) + .protectedClearingRedeemByPartition(protectedClearingRedeem, _AMOUNT, "0x1234"), + ).to.be.revertedWithCustomError(accessControlFacet, "AccountHasNoRole"); + }); + + it("GIVEN a from user recovering WHEN protectedClearingRedeemByPartition THEN transaction fails with WalletRecovered", async () => { + // Setup: Issue tokens to signer_A + await accessControlFacet.grantRole(ATS_ROLES._ISSUER_ROLE, signer_A.address); + await erc1410Facet.issueByPartition({ + partition: _DEFAULT_PARTITION, + tokenHolder: signer_A.address, + value: _AMOUNT, + data: _DATA, + }); + + // Grant partition-specific role to signer_B + const packedData = ethers.utils.defaultAbiCoder.encode( + ["bytes32", "bytes32"], + [ATS_ROLES._PROTECTED_PARTITIONS_PARTICIPANT_ROLE, _DEFAULT_PARTITION], + ); + const packedDataWithoutPrefix = packedData.slice(2); + const protectedPartitionRole = ethers.utils.keccak256("0x" + packedDataWithoutPrefix); + await accessControlFacet.grantRole(protectedPartitionRole, signer_B.address); + + // Recover signer_A's address to signer_B + await erc3643Facet.recoveryAddress(signer_A.address, signer_B.address, ADDRESS_ZERO); + + // Try to call - should hit onlyUnrecoveredAddress before signature validation + await expect( + clearingFacet + .connect(signer_B) + .protectedClearingRedeemByPartition(protectedClearingRedeem, _AMOUNT, "0x1234"), + ).to.be.revertedWithCustomError(clearingFacet, "WalletRecovered"); + }); + + it("GIVEN a from user recovering WHEN protectedClearingCreateHoldByPartition THEN transaction fails with WalletRecovered", async () => { + // Setup: Issue tokens to signer_A + await accessControlFacet.grantRole(ATS_ROLES._ISSUER_ROLE, signer_A.address); + await erc1410Facet.issueByPartition({ + partition: _DEFAULT_PARTITION, + tokenHolder: signer_A.address, + value: _AMOUNT, + data: _DATA, + }); + + // Recover signer_A's address to signer_B + await erc3643Facet.recoveryAddress(signer_A.address, signer_B.address, ADDRESS_ZERO); + + const holdForClearing = { + amount: _AMOUNT, + expirationTimestamp: expirationTimestamp, + escrow: signer_D.address, + to: signer_C.address, + data: _DATA, + }; + + const message = { + _protectedClearingOperation: protectedClearingHoldCreation, + _hold: holdForClearing, + }; + + const signature = await signer_A._signTypedData(domain, clearingHoldType, message); + + await expect( + clearingFacet + .connect(signer_B) + .protectedClearingCreateHoldByPartition(protectedClearingHoldCreation, holdForClearing, signature), + ).to.be.revertedWithCustomError(erc3643Facet, "WalletRecovered"); + }); + + it("GIVEN a to user recovering WHEN protectedClearingCreateHoldByPartition THEN transaction fails with WalletRecovered", async () => { + // Setup: Issue tokens to signer_A + await accessControlFacet.grantRole(ATS_ROLES._ISSUER_ROLE, signer_A.address); + await erc1410Facet.issueByPartition({ + partition: _DEFAULT_PARTITION, + tokenHolder: signer_A.address, + value: _AMOUNT, + data: _DATA, + }); + + // Recover signer_C's address (the "to" address in hold) to signer_D + await erc3643Facet.recoveryAddress(signer_C.address, signer_D.address, ADDRESS_ZERO); + + const holdForClearing = { + amount: _AMOUNT, + expirationTimestamp: expirationTimestamp, + escrow: signer_D.address, + to: signer_C.address, + data: _DATA, + }; + + const message = { + _protectedClearingOperation: protectedClearingHoldCreation, + _hold: holdForClearing, + }; + + const signature = await signer_A._signTypedData(domain, clearingHoldType, message); + + await expect( + clearingFacet + .connect(signer_B) + .protectedClearingCreateHoldByPartition(protectedClearingHoldCreation, holdForClearing, signature), + ).to.be.revertedWithCustomError(erc3643Facet, "WalletRecovered"); + }); + + // Additional tests for missing branch coverage + it("SHOULD revert WHEN expiration timestamp is invalid for protectedClearingRedeemByPartition", async () => { + await accessControlFacet.grantRole(ATS_ROLES._ISSUER_ROLE, signer_A.address); + await erc1410Facet.issueByPartition({ + partition: _DEFAULT_PARTITION, + tokenHolder: signer_A.address, + value: _AMOUNT, + data: _DATA, + }); + + const nonce = (await noncesFacet.nonces(signer_A.address)).toNumber() + 1; + + const protectedClearingOpExpired = { + clearingOperation: { + partition: _DEFAULT_PARTITION, + expirationTimestamp: 1, // Expired timestamp + data: _DATA, + }, + from: signer_A.address, + deadline: MAX_UINT256, + nonce: nonce, + }; + + const message = { + _protectedClearingOperation: protectedClearingOpExpired, + _value: _AMOUNT, + }; + + const signature = await signer_A._signTypedData(domain, clearingRedeemType, message); + + await expect( + clearingFacet + .connect(signer_B) + .protectedClearingRedeemByPartition(protectedClearingOpExpired, _AMOUNT, signature), + ).to.be.reverted; + }); + + it("SHOULD revert WHEN expiration timestamp is invalid for protectedClearingCreateHoldByPartition", async () => { + await accessControlFacet.grantRole(ATS_ROLES._ISSUER_ROLE, signer_A.address); + await erc1410Facet.issueByPartition({ + partition: _DEFAULT_PARTITION, + tokenHolder: signer_A.address, + value: _AMOUNT, + data: _DATA, + }); + + const nonce = (await noncesFacet.nonces(signer_A.address)).toNumber() + 1; + + const protectedClearingOpExpired = { + clearingOperation: { + partition: _DEFAULT_PARTITION, + expirationTimestamp: 1, // Expired timestamp + data: _DATA, + }, + from: signer_A.address, + deadline: MAX_UINT256, + nonce: nonce, + }; + + const holdForClearing = { + amount: _AMOUNT, + expirationTimestamp: expirationTimestamp, + escrow: signer_D.address, + to: signer_C.address, + data: _DATA, + }; + + const message = { + _protectedClearingOperation: protectedClearingOpExpired, + _hold: holdForClearing, + }; + + const signature = await signer_A._signTypedData(domain, clearingHoldType, message); + + await expect( + clearingFacet + .connect(signer_B) + .protectedClearingCreateHoldByPartition(protectedClearingOpExpired, holdForClearing, signature), + ).to.be.reverted; + }); + + it("SHOULD revert WHEN missing required role for protectedClearingCreateHoldByPartition", async () => { + await accessControlFacet.grantRole(ATS_ROLES._ISSUER_ROLE, signer_A.address); + await erc1410Facet.issueByPartition({ + partition: _DEFAULT_PARTITION, + tokenHolder: signer_A.address, + value: _AMOUNT, + data: _DATA, + }); + + // Don't grant the protected partition role for signer_A + const nonce = (await noncesFacet.nonces(signer_A.address)).toNumber() + 1; + + const protectedClearingOp = { + clearingOperation: { + partition: _DEFAULT_PARTITION, + expirationTimestamp: expirationTimestamp, + data: _DATA, + }, + from: signer_A.address, + deadline: MAX_UINT256, + nonce: nonce, + }; + + const holdForClearing = { + amount: _AMOUNT, + expirationTimestamp: expirationTimestamp, + escrow: signer_D.address, + to: signer_C.address, + data: _DATA, + }; + + const message = { + _protectedClearingOperation: protectedClearingOp, + _hold: holdForClearing, + }; + + const signature = await signer_A._signTypedData(domain, clearingHoldType, message); + + await expect( + clearingFacet + .connect(signer_B) + .protectedClearingCreateHoldByPartition(protectedClearingOp, holdForClearing, signature), + ).to.be.reverted; + }); + }); }); }); diff --git a/packages/ats/contracts/test/contracts/unit/layer_1/controlList/controlList.test.ts b/packages/ats/contracts/test/contracts/unit/layer_1/controlList/controlList.test.ts index 401bbc402..bd0c09cde 100644 --- a/packages/ats/contracts/test/contracts/unit/layer_1/controlList/controlList.test.ts +++ b/packages/ats/contracts/test/contracts/unit/layer_1/controlList/controlList.test.ts @@ -129,4 +129,31 @@ describe("Control List Tests", () => { const listType = await controlListFacet.getControlListType(); expect(listType).to.equal(false); }); + + it("GIVEN an account already in control list WHEN addToControlList is called again THEN transaction fails with ListedAccount", async () => { + await accessControlFacet.connect(signer_A).grantRole(ATS_ROLES._CONTROL_LIST_ROLE, signer_B.address); + + // Add account to control list + await controlListFacet.connect(signer_B).addToControlList(signer_C.address); + + // Verify account is in the list + expect(await controlListFacet.isInControlList(signer_C.address)).to.equal(true); + + // Try to add the same account again + await expect(controlListFacet.connect(signer_B).addToControlList(signer_C.address)) + .to.be.revertedWithCustomError(controlListFacet, "ListedAccount") + .withArgs(signer_C.address); + }); + + it("GIVEN an account not in control list WHEN removeFromControlList is called THEN transaction fails with UnlistedAccount", async () => { + await accessControlFacet.connect(signer_A).grantRole(ATS_ROLES._CONTROL_LIST_ROLE, signer_B.address); + + // Verify account is not in the list + expect(await controlListFacet.isInControlList(signer_C.address)).to.equal(false); + + // Try to remove an account that's not in the list + await expect(controlListFacet.connect(signer_B).removeFromControlList(signer_C.address)) + .to.be.revertedWithCustomError(controlListFacet, "UnlistedAccount") + .withArgs(signer_C.address); + }); }); diff --git a/packages/ats/contracts/test/contracts/unit/layer_1/corporateActions/corporateActions.test.ts b/packages/ats/contracts/test/contracts/unit/layer_1/corporateActions/corporateActions.test.ts index 35cc18641..7b10de0ee 100644 --- a/packages/ats/contracts/test/contracts/unit/layer_1/corporateActions/corporateActions.test.ts +++ b/packages/ats/contracts/test/contracts/unit/layer_1/corporateActions/corporateActions.test.ts @@ -68,8 +68,15 @@ describe("Corporate Actions Tests", () => { ); }); - it("GIVEN an account with corporateActions role WHEN addCorporateAction THEN transaction succeeds", async () => { + it("GIVEN an account with corporateActions role WHEN addCorporateAction (two identical CA) THEN transaction first succeeds but second fails with DuplicatedCorporateAction", async () => { await accessControlFacet.connect(signer_A).grantRole(ATS_ROLES._CORPORATE_ACTION_ROLE, signer_C.address); + + const encoded = ethers.utils.defaultAbiCoder.encode(["bytes32", "bytes"], [actionType, actionData]); + + const contentHash = ethers.utils.keccak256(encoded); + + const actionContentHashExistsBefore = await corporateActionsFacet.actionContentHashExists(contentHash); + // add to list await corporateActionsFacet.connect(signer_C).addCorporateAction(actionType, actionData); @@ -79,6 +86,7 @@ describe("Corporate Actions Tests", () => { const listCountByType = await corporateActionsFacet.getCorporateActionCountByType(actionType); const listMembersByType = await corporateActionsFacet.getCorporateActionIdsByType(actionType, 0, listCount); const corporateAction = await corporateActionsFacet.getCorporateAction(corporateActionId_1); + const actionContentHashExistsAfter = await corporateActionsFacet.actionContentHashExists(contentHash); expect(listCount).to.equal(1); expect(listMembers.length).to.equal(listCount); @@ -87,6 +95,13 @@ describe("Corporate Actions Tests", () => { expect(listMembersByType.length).to.equal(listCountByType); expect(listMembersByType[0]).to.equal(corporateActionId_1); expect(corporateAction[0].toUpperCase()).to.equal(actionType.toUpperCase()); - expect(corporateAction[1].toUpperCase()).to.equal(actionData.toUpperCase()); + expect(corporateAction[1]).to.equal(BigInt(listMembersByType[0])); + expect(corporateAction[2].toUpperCase()).to.equal(actionData.toUpperCase()); + expect(actionContentHashExistsBefore).to.be.false; + expect(actionContentHashExistsAfter).to.be.true; + + await expect( + corporateActionsFacet.connect(signer_C).addCorporateAction(actionType, actionData), + ).to.revertedWithCustomError(corporateActionsFacet, "DuplicatedCorporateAction"); }); }); diff --git a/packages/ats/contracts/test/contracts/unit/layer_1/equity/equity.test.ts b/packages/ats/contracts/test/contracts/unit/layer_1/equity/equity.test.ts index 5c3c7a85d..d2dd27f15 100644 --- a/packages/ats/contracts/test/contracts/unit/layer_1/equity/equity.test.ts +++ b/packages/ats/contracts/test/contracts/unit/layer_1/equity/equity.test.ts @@ -24,8 +24,9 @@ import { ZERO, EMPTY_HEX_BYTES, ATS_ROLES, + CURRENCIES, } from "@scripts"; -import { grantRoleAndPauseToken } from "@test"; +import { getEquityDetails, grantRoleAndPauseToken } from "@test"; import { loadFixture } from "@nomicfoundation/hardhat-network-helpers"; import { deployEquityTokenFixture, MAX_UINT256 } from "@test"; import { executeRbac } from "@test"; @@ -120,10 +121,16 @@ describe("Equity Tests", () => { } beforeEach(async () => { - dividendsRecordDateInSeconds = dateToUnixTimestamp("2030-01-01T00:00:10Z"); - dividendsExecutionDateInSeconds = dateToUnixTimestamp("2030-01-01T00:16:40Z"); - votingRecordDateInSeconds = dateToUnixTimestamp("2030-01-01T00:00:10Z"); - balanceAdjustmentExecutionDateInSeconds = dateToUnixTimestamp("2030-01-01T00:00:10Z"); + await loadFixture(deploySecurityFixtureSinglePartition); + + // Use dynamic timestamps based on current block time + const currentTimestamp = await timeTravelFacet.blockTimestamp(); + const ONE_DAY = 86400; // 24 hours in seconds + + dividendsRecordDateInSeconds = currentTimestamp.add(ONE_DAY).toNumber(); + dividendsExecutionDateInSeconds = currentTimestamp.add(ONE_DAY + 1000).toNumber(); + votingRecordDateInSeconds = currentTimestamp.add(ONE_DAY).toNumber(); + balanceAdjustmentExecutionDateInSeconds = currentTimestamp.add(ONE_DAY).toNumber(); votingData = { recordDate: votingRecordDateInSeconds.toString(), @@ -140,11 +147,132 @@ describe("Equity Tests", () => { factor: balanceAdjustmentFactor, decimals: balanceAdjustmentDecimals, }; + }); - await loadFixture(deploySecurityFixtureSinglePartition); + describe("Initialization", () => { + it("GIVEN an initialized equity WHEN trying to initialize again THEN transaction fails with AlreadyInitialized", async () => { + const regulationData = { + regulationType: 1, // REG_S + regulationSubType: 0, // NONE + dealSize: 0, + accreditedInvestors: 1, // ACCREDITATION_REQUIRED + maxNonAccreditedInvestors: 0, + manualInvestorVerification: 1, // VERIFICATION_INVESTORS_FINANCIAL_DOCUMENTS_REQUIRED + internationalInvestors: 1, // ALLOWED + resaleHoldPeriod: 0, // NOT_APPLICABLE + }; + + const additionalSecurityData = { + countriesControlListType: false, + listOfCountries: "", + info: "", + }; + + await expect( + equityFacet._initialize_equityUSA(getEquityDetails(), regulationData, additionalSecurityData), + ).to.be.rejectedWith("AlreadyInitialized"); + }); + + it("GIVEN an equity token WHEN getEquityDetails is called THEN returns correct equity details", async () => { + const equityDetails = await equityFacet.getEquityDetails(); + + expect(equityDetails.nominalValue).to.be.gt(0); + expect(equityDetails.currency).to.equal(CURRENCIES.USD); + }); }); describe("Dividends", () => { + it("GIVEN dividend with executed snapshot WHEN getting dividend holders THEN returns holders from snapshot", async () => { + await accessControlFacet.connect(signer_A).grantRole(ATS_ROLES._CORPORATE_ACTION_ROLE, signer_C.address); + await accessControlFacet.connect(signer_A).grantRole(ATS_ROLES._ISSUER_ROLE, signer_C.address); + await kycFacet.grantKyc(signer_B.address, EMPTY_VC_ID, ZERO, MAX_UINT256, signer_A.address); + + await erc1410Facet.connect(signer_C).issueByPartition({ + partition: DEFAULT_PARTITION, + tokenHolder: signer_A.address, + value: 1000n, + data: "0x", + }); + + await expect(equityFacet.connect(signer_C).setDividends(dividendData)) + .to.emit(equityFacet, "DividendSet") + .withArgs( + "0x0000000000000000000000000000000000000000000000000000000000000001", + 1, + signer_C.address, + dividendsRecordDateInSeconds, + dividendsExecutionDateInSeconds, + dividendsAmountPerEquity, + dividendsAmountDecimalsPerEquity, + ); + + await timeTravelFacet.changeSystemTimestamp(dividendsRecordDateInSeconds + 1); + + await erc1410Facet.connect(signer_C).issueByPartition({ + partition: DEFAULT_PARTITION, + tokenHolder: signer_B.address, + value: 500n, + data: "0x", + }); + + const dividend = await equityFacet.getDividends(1); + expect(dividend.snapshotId).to.not.equal(0); + + // Verify getDividendHolders returns holders from snapshot (line 211-212) + const dividendHolders = await equityFacet.getDividendHolders(1, 0, 99); + expect(dividendHolders).to.have.members([signer_A.address]); + + // Verify getTotalDividendHolders returns count from snapshot (line 222) + const totalHolders = await equityFacet.getTotalDividendHolders(1); + expect(totalHolders).to.equal(1); + + const dividendFor = await equityFacet.getDividendsFor(1, signer_A.address); + expect(dividendFor.tokenBalance).to.equal(1000n); + expect(dividendFor.recordDateReached).to.equal(true); + }); + + it("GIVEN dividend without executed snapshot WHEN getting total dividend holders THEN returns current total holders", async () => { + await accessControlFacet.connect(signer_A).grantRole(ATS_ROLES._CORPORATE_ACTION_ROLE, signer_C.address); + await accessControlFacet.connect(signer_A).grantRole(ATS_ROLES._ISSUER_ROLE, signer_C.address); + + // Issue tokens before creating dividend + await erc1410Facet.connect(signer_C).issueByPartition({ + partition: DEFAULT_PARTITION, + tokenHolder: signer_A.address, + value: 1000n, + data: "0x", + }); + + // Create dividend (schedules a snapshot for recordDate) + await expect(equityFacet.connect(signer_C).setDividends(dividendData)) + .to.emit(equityFacet, "DividendSet") + .withArgs( + "0x0000000000000000000000000000000000000000000000000000000000000001", + 1, + signer_C.address, + dividendsRecordDateInSeconds, + dividendsExecutionDateInSeconds, + dividendsAmountPerEquity, + dividendsAmountDecimalsPerEquity, + ); + + // Travel to after recordDate BUT DON'T trigger any operation + // This keeps snapshotId at 0 + await timeTravelFacet.changeSystemTimestamp(dividendsRecordDateInSeconds + 1); + + // Verify snapshot was NOT executed (snapshotId == 0) + const dividend = await equityFacet.getDividends(1); + expect(dividend.snapshotId).to.equal(0); + + // Get total dividend holders using _getTotalTokenHolders (line 224 in EquityStorageWrapper.sol) + const totalHolders = await equityFacet.getTotalDividendHolders(1); + expect(totalHolders).to.equal(1); + + // Also verify getDividendHolders returns current holders (line 214) + const holders = await equityFacet.getDividendHolders(1, 0, 99); + expect(holders).to.have.members([signer_A.address]); + }); + it("GIVEN an account without corporateActions role WHEN setDividends THEN transaction fails with AccountHasNoRole", async () => { // set dividend fails await expect(equityFacet.connect(signer_C).setDividends(dividendData)).to.be.rejectedWith("AccountHasNoRole"); @@ -166,7 +294,8 @@ describe("Equity Tests", () => { }); it("GIVEN an account with corporateActions role WHEN setDividends with wrong dates THEN transaction fails", async () => { - await timeTravelFacet.changeSystemTimestamp(dateToUnixTimestamp("2030-01-01T00:00:00Z")); + const currentTimestamp = await timeTravelFacet.blockTimestamp(); + await timeTravelFacet.changeSystemTimestamp(currentTimestamp.add(100)); // Granting Role to account C await accessControlFacet.connect(signer_A).grantRole(ATS_ROLES._CORPORATE_ACTION_ROLE, signer_C.address); @@ -184,7 +313,7 @@ describe("Equity Tests", () => { ); const wrongDividendData_2 = { - recordDate: dateToUnixTimestamp("2029-12-31T23:59:59Z").toString(), + recordDate: currentTimestamp.sub(100).toString(), // Past timestamp executionDate: dividendsExecutionDateInSeconds.toString(), amount: dividendsAmountPerEquity, amountDecimals: dividendsAmountDecimalsPerEquity, @@ -414,9 +543,281 @@ describe("Equity Tests", () => { BigNumber.from(10 ** (dividendFor.decimals + dividendFor.amountDecimals)), ); }); + + it("GIVEN frozen tokens WHEN calculating dividends without snapshot THEN frozen tokens are included in dividend calculation", async () => { + await accessControlFacet.grantRole(ATS_ROLES._CORPORATE_ACTION_ROLE, signer_A.address); + await accessControlFacet.grantRole(ATS_ROLES._ISSUER_ROLE, signer_A.address); + await accessControlFacet.grantRole(ATS_ROLES._FREEZE_MANAGER_ROLE, signer_A.address); + + const totalAmount = 1000n; + const frozenAmount = 300n; + + // Issue tokens + await erc1410Facet.issueByPartition({ + partition: DEFAULT_PARTITION, + tokenHolder: signer_A.address, + value: totalAmount, + data: "0x", + }); + + // Freeze some tokens + await freezeFacet.freezePartialTokens(signer_A.address, frozenAmount); + + // Set dividend WITHOUT snapshot (snapshotId will be 0) - this will call _getTotalBalanceForAdjustedAt + const dividendDataNoSnapshot = { + recordDate: dateToUnixTimestamp("2030-01-01T00:00:10Z").toString(), + executionDate: dateToUnixTimestamp("2030-01-01T00:00:20Z").toString(), + amount: 10, + amountDecimals: 0, + }; + await equityFacet.setDividends(dividendDataNoSnapshot); + + // Travel to after record date but before execution date + await timeTravelFacet.changeSystemTimestamp(dateToUnixTimestamp("2030-01-01T00:00:15Z")); + + // Get dividend - this triggers _getTotalBalanceForAdjustedAt which includes frozen tokens + const dividendFor = await equityFacet.getDividendsFor(1, signer_A.address); + + // The total balance should include frozen tokens (700 free + 300 frozen = 1000) + expect(dividendFor.tokenBalance).to.equal(totalAmount); + expect(dividendFor.recordDateReached).to.equal(true); + + // Verify dividend calculation: (tokenBalance * amount) / (10^(decimals + amountDecimals)) + const expectedDividendNumerator = dividendFor.tokenBalance.mul(dividendFor.amount); + const expectedDividendDenominator = BigNumber.from(10 ** (dividendFor.decimals + dividendFor.amountDecimals)); + expectedDividendNumerator.div(expectedDividendDenominator); + + // Also get the dividendAmountFor to verify + const dividendAmountFor = await equityFacet.getDividendAmountFor(1, signer_A.address); + expect(dividendAmountFor.numerator).to.equal(expectedDividendNumerator); + expect(dividendAmountFor.denominator).to.equal(expectedDividendDenominator); + }); }); describe("Voting rights", () => { + it("GIVEN voting with executed snapshot WHEN getting voting holders THEN returns holders from snapshot", async () => { + await accessControlFacet.connect(signer_A).grantRole(ATS_ROLES._CORPORATE_ACTION_ROLE, signer_C.address); + await accessControlFacet.connect(signer_A).grantRole(ATS_ROLES._ISSUER_ROLE, signer_C.address); + await kycFacet.grantKyc(signer_B.address, EMPTY_VC_ID, ZERO, MAX_UINT256, signer_A.address); + + await erc1410Facet.connect(signer_C).issueByPartition({ + partition: DEFAULT_PARTITION, + tokenHolder: signer_A.address, + value: 1000n, + data: "0x", + }); + + await expect(equityFacet.connect(signer_C).setVoting(votingData)) + .to.emit(equityFacet, "VotingSet") + .withArgs( + "0x0000000000000000000000000000000000000000000000000000000000000001", + 1, + signer_C.address, + votingRecordDateInSeconds, + voteData, + ); + + await timeTravelFacet.changeSystemTimestamp(votingRecordDateInSeconds + 1); + + await erc1410Facet.connect(signer_C).issueByPartition({ + partition: DEFAULT_PARTITION, + tokenHolder: signer_B.address, + value: 500n, + data: "0x", + }); + + const voting = await equityFacet.getVoting(1); + expect(voting.snapshotId).to.not.equal(0); + + // Verify getVotingHolders returns holders from snapshot (line 279) + const votingHolders = await equityFacet.getVotingHolders(1, 0, 99); + expect(votingHolders).to.have.members([signer_A.address]); + + // Verify getTotalVotingHolders returns count from snapshot (line 292) + const totalHolders = await equityFacet.getTotalVotingHolders(1); + expect(totalHolders).to.equal(1); + + const votingFor = await equityFacet.getVotingFor(1, signer_A.address); + expect(votingFor.tokenBalance).to.equal(1000n); + expect(votingFor.recordDateReached).to.equal(true); + }); + + it("GIVEN voting without executed snapshot WHEN getting total voting holders THEN returns current total holders", async () => { + await accessControlFacet.connect(signer_A).grantRole(ATS_ROLES._CORPORATE_ACTION_ROLE, signer_C.address); + await accessControlFacet.connect(signer_A).grantRole(ATS_ROLES._ISSUER_ROLE, signer_C.address); + + // Issue tokens before creating voting + await erc1410Facet.connect(signer_C).issueByPartition({ + partition: DEFAULT_PARTITION, + tokenHolder: signer_A.address, + value: 1000n, + data: "0x", + }); + + // Create voting (schedules a snapshot for recordDate) + await expect(equityFacet.connect(signer_C).setVoting(votingData)) + .to.emit(equityFacet, "VotingSet") + .withArgs( + "0x0000000000000000000000000000000000000000000000000000000000000001", + 1, + signer_C.address, + votingRecordDateInSeconds, + voteData, + ); + + // Travel to after recordDate BUT DON'T trigger any operation + // This keeps snapshotId at 0 + await timeTravelFacet.changeSystemTimestamp(votingRecordDateInSeconds + 1); + + // Verify snapshot was NOT executed (snapshotId == 0) + const voting = await equityFacet.getVoting(1); + expect(voting.snapshotId).to.equal(0); + + // Get total voting holders using _getTotalTokenHolders (line 294 in EquityStorageWrapper.sol) + const totalHolders = await equityFacet.getTotalVotingHolders(1); + expect(totalHolders).to.equal(1); + + // Also verify getVotingHolders returns current holders (line 281) + const holders = await equityFacet.getVotingHolders(1, 0, 99); + expect(holders).to.have.members([signer_A.address]); + }); + + it("GIVEN an account without corporateActions role WHEN setVoting THEN transaction fails with AccountHasNoRole", async () => { + // set voting fails + await expect(equityFacet.connect(signer_C).setVoting(votingData)).to.be.rejectedWith("AccountHasNoRole"); + }); + + it("GIVEN a paused Token WHEN setVoting THEN transaction fails with TokenIsPaused", async () => { + // Granting Role to account C and Pause + await grantRoleAndPauseToken( + accessControlFacet, + pauseFacet, + ATS_ROLES._CORPORATE_ACTION_ROLE, + signer_A, + signer_B, + signer_C.address, + ); + + // set voting fails + await expect(equityFacet.connect(signer_C).setVoting(votingData)).to.be.rejectedWith("TokenIsPaused"); + }); + + it("GIVEN an account with corporateActions role WHEN setVoting with invalid timestamp THEN transaction fails with WrongTimestamp", async () => { + const currentTimestamp = await timeTravelFacet.blockTimestamp(); + await timeTravelFacet.changeSystemTimestamp(currentTimestamp.add(100)); + await accessControlFacet.connect(signer_A).grantRole(ATS_ROLES._CORPORATE_ACTION_ROLE, signer_C.address); + + const invalidVotingData = { + recordDate: currentTimestamp.sub(100).toString(), // Past timestamp + data: voteData, + }; + + await expect(equityFacet.connect(signer_C).setVoting(invalidVotingData)).to.be.revertedWithCustomError( + equityFacet, + "WrongTimestamp", + ); + }); + + it("GIVEN voting created WHEN trying to get voting with wrong ID type THEN transaction fails with WrongIndexForAction", async () => { + await accessControlFacet.connect(signer_A).grantRole(ATS_ROLES._CORPORATE_ACTION_ROLE, signer_C.address); + + // Create a voting + await equityFacet.connect(signer_C).setVoting(votingData); + + // Create a dividend to have different action types + await equityFacet.connect(signer_C).setDividends(dividendData); + + // Try to access voting with dividend ID (should fail) + await expect(equityFacet.getVoting(2)).to.be.rejectedWith("WrongIndexForAction"); + + // Try to access voting details with wrong ID (getVotingFor has the modifier) + await expect(equityFacet.getVotingFor(2, signer_A.address)).to.be.rejectedWith("WrongIndexForAction"); + + // Note: getVotingHolders and getTotalVotingHolders don't have onlyMatchingActionType modifier + }); + + it("GIVEN dividends created WHEN trying to get dividend with wrong ID type THEN transaction fails with WrongIndexForAction", async () => { + await accessControlFacet.connect(signer_A).grantRole(ATS_ROLES._CORPORATE_ACTION_ROLE, signer_C.address); + + // Create a dividend + await equityFacet.connect(signer_C).setDividends(dividendData); + + // Create a voting to have different action types + await equityFacet.connect(signer_C).setVoting(votingData); + + // Try to access dividend with voting ID (should fail) + await expect(equityFacet.getDividends(2)).to.be.rejectedWith("WrongIndexForAction"); + await expect(equityFacet.getDividendsFor(2, signer_A.address)).to.be.rejectedWith("WrongIndexForAction"); + await expect(equityFacet.getDividendAmountFor(2, signer_A.address)).to.be.rejectedWith("WrongIndexForAction"); + }); + it("GIVEN an account without corporateActions role WHEN setVoting THEN transaction fails with AccountHasNoRole", async () => { + // set voting fails + await expect(equityFacet.connect(signer_C).setVoting(votingData)).to.be.rejectedWith("AccountHasNoRole"); + }); + + it("GIVEN a paused Token WHEN setVoting THEN transaction fails with TokenIsPaused", async () => { + // Granting Role to account C and Pause + await grantRoleAndPauseToken( + accessControlFacet, + pauseFacet, + ATS_ROLES._CORPORATE_ACTION_ROLE, + signer_A, + signer_B, + signer_C.address, + ); + + // set voting fails + await expect(equityFacet.connect(signer_C).setVoting(votingData)).to.be.rejectedWith("TokenIsPaused"); + }); + + it("GIVEN an account with corporateActions role WHEN setVoting with invalid timestamp THEN transaction fails with WrongTimestamp", async () => { + const currentTimestamp = await timeTravelFacet.blockTimestamp(); + await timeTravelFacet.changeSystemTimestamp(currentTimestamp.add(100)); + await accessControlFacet.connect(signer_A).grantRole(ATS_ROLES._CORPORATE_ACTION_ROLE, signer_C.address); + + const invalidVotingData = { + recordDate: currentTimestamp.sub(100).toString(), // Past timestamp + data: voteData, + }; + + await expect(equityFacet.connect(signer_C).setVoting(invalidVotingData)).to.be.revertedWithCustomError( + equityFacet, + "WrongTimestamp", + ); + }); + + it("GIVEN voting created WHEN trying to get voting with wrong ID type THEN transaction fails with WrongIndexForAction", async () => { + await accessControlFacet.connect(signer_A).grantRole(ATS_ROLES._CORPORATE_ACTION_ROLE, signer_C.address); + + // Create a voting + await equityFacet.connect(signer_C).setVoting(votingData); + + // Create a dividend to have different action types + await equityFacet.connect(signer_C).setDividends(dividendData); + + // Try to access voting with dividend ID (should fail) + await expect(equityFacet.getVoting(2)).to.be.rejectedWith("WrongIndexForAction"); + + // Try to access voting details with wrong ID (getVotingFor has the modifier) + await expect(equityFacet.getVotingFor(2, signer_A.address)).to.be.rejectedWith("WrongIndexForAction"); + + // Note: getVotingHolders and getTotalVotingHolders don't have onlyMatchingActionType modifier + }); + + it("GIVEN dividends created WHEN trying to get dividend with wrong ID type THEN transaction fails with WrongIndexForAction", async () => { + await accessControlFacet.connect(signer_A).grantRole(ATS_ROLES._CORPORATE_ACTION_ROLE, signer_C.address); + + // Create a dividend + await equityFacet.connect(signer_C).setDividends(dividendData); + + // Create a voting to have different action types + await equityFacet.connect(signer_C).setVoting(votingData); + + // Try to access dividend with voting ID (should fail) + await expect(equityFacet.getDividends(2)).to.be.rejectedWith("WrongIndexForAction"); + await expect(equityFacet.getDividendsFor(2, signer_A.address)).to.be.rejectedWith("WrongIndexForAction"); + await expect(equityFacet.getDividendAmountFor(2, signer_A.address)).to.be.rejectedWith("WrongIndexForAction"); + }); it("GIVEN an account without corporateActions role WHEN setVoting THEN transaction fails with AccountHasNoRole", async () => { // set dividend fails await expect(equityFacet.connect(signer_C).setVoting(votingData)).to.be.rejectedWith("AccountHasNoRole"); @@ -542,6 +943,49 @@ describe("Equity Tests", () => { ).to.be.rejectedWith("TokenIsPaused"); }); + it("GIVEN an account with corporateActions role WHEN setScheduledBalanceAdjustment with invalid timestamp THEN transaction fails with WrongTimestamp", async () => { + const currentTimestamp = await timeTravelFacet.blockTimestamp(); + await timeTravelFacet.changeSystemTimestamp(currentTimestamp.add(100)); + await accessControlFacet.connect(signer_A).grantRole(ATS_ROLES._CORPORATE_ACTION_ROLE, signer_C.address); + + const invalidBalanceAdjustmentData = { + executionDate: currentTimestamp.sub(100).toString(), // Past timestamp + factor: balanceAdjustmentFactor, + decimals: balanceAdjustmentDecimals, + }; + + await expect( + equityFacet.connect(signer_C).setScheduledBalanceAdjustment(invalidBalanceAdjustmentData), + ).to.be.revertedWithCustomError(equityFacet, "WrongTimestamp"); + }); + + it("GIVEN an account with corporateActions role WHEN setScheduledBalanceAdjustment with invalid factor THEN transaction fails with FactorIsZero", async () => { + await accessControlFacet.connect(signer_A).grantRole(ATS_ROLES._CORPORATE_ACTION_ROLE, signer_C.address); + + const invalidBalanceAdjustmentData = { + executionDate: balanceAdjustmentExecutionDateInSeconds.toString(), + factor: 0, // Invalid factor: 0 + decimals: balanceAdjustmentDecimals, + }; + + await expect( + equityFacet.connect(signer_C).setScheduledBalanceAdjustment(invalidBalanceAdjustmentData), + ).to.be.revertedWithCustomError(equityFacet, "FactorIsZero"); + }); + + it("GIVEN balance adjustment created WHEN trying to get balance adjustment with wrong ID type THEN transaction fails with WrongIndexForAction", async () => { + await accessControlFacet.connect(signer_A).grantRole(ATS_ROLES._CORPORATE_ACTION_ROLE, signer_C.address); + + // Create a balance adjustment + await equityFacet.connect(signer_C).setScheduledBalanceAdjustment(balanceAdjustmentData); + + // Create a dividend to have different action types + await equityFacet.connect(signer_C).setDividends(dividendData); + + // Try to access balance adjustment with dividend ID (should fail) + await expect(equityFacet.getScheduledBalanceAdjustment(2)).to.be.rejectedWith("WrongIndexForAction"); + }); + it("GIVEN an account with corporateActions role WHEN setBalanceAdjustment THEN transaction succeeds", async () => { // Granting Role to account C await accessControlFacet.connect(signer_A).grantRole(ATS_ROLES._CORPORATE_ACTION_ROLE, signer_C.address); diff --git a/packages/ats/contracts/test/contracts/unit/layer_1/externalControlLists/externalControlList.test.ts b/packages/ats/contracts/test/contracts/unit/layer_1/externalControlLists/externalControlList.test.ts index 496255db2..db5d44c08 100644 --- a/packages/ats/contracts/test/contracts/unit/layer_1/externalControlLists/externalControlList.test.ts +++ b/packages/ats/contracts/test/contracts/unit/layer_1/externalControlLists/externalControlList.test.ts @@ -1,26 +1,43 @@ import { expect } from "chai"; import { ethers } from "hardhat"; import { SignerWithAddress } from "@nomiclabs/hardhat-ethers/signers.js"; -import { ExternalControlListManagement, MockedWhitelist, MockedBlacklist, ResolverProxy } from "@contract-types"; +import { + MockedWhitelist, + MockedBlacklist, + ResolverProxy, + Pause, + ExternalControlListManagementFacet, +} from "@contract-types"; import { loadFixture } from "@nomicfoundation/hardhat-network-helpers"; import { deployEquityTokenFixture } from "@test"; -import { ATS_ROLES, GAS_LIMIT } from "@scripts"; +import { ADDRESS_ZERO, ATS_ROLES, GAS_LIMIT } from "@scripts"; describe("ExternalControlList Management Tests", () => { let signer_A: SignerWithAddress; let signer_B: SignerWithAddress; let diamond: ResolverProxy; - let externalControlListManagement: ExternalControlListManagement; + let externalControlListManagement: ExternalControlListManagementFacet; + let pauseFacet: Pause; + let initMock1: MockedWhitelist; + let initMock2: MockedBlacklist; let externalWhitelistMock1: MockedWhitelist; let externalBlacklistMock1: MockedBlacklist; let externalWhitelistMock2: MockedWhitelist; - async function deployTokenSecurity() { + async function deployExternalControlListTokenSecurity() { + const [deployer] = await ethers.getSigners(); + initMock1 = await (await ethers.getContractFactory("MockedWhitelist", deployer)).deploy(); + await initMock1.deployed(); + initMock2 = await (await ethers.getContractFactory("MockedBlacklist", deployer)).deploy(); + await initMock2.deployed(); + const base = await deployEquityTokenFixture({ + useLoadFixture: false, equityDataParams: { securityData: { isMultiPartition: true, + externalControlLists: [initMock1.address, initMock2.address], }, }, }); @@ -29,13 +46,14 @@ describe("ExternalControlList Management Tests", () => { signer_B = base.user1; externalControlListManagement = await ethers.getContractAt( - "ExternalControlListManagement", + "ExternalControlListManagementFacet", diamond.address, signer_A, ); + pauseFacet = await ethers.getContractAt("Pause", diamond.address, signer_A); - // Grant _CONTROL_LIST_MANAGER_ROLE to signer_A await base.accessControlFacet.grantRole(ATS_ROLES._CONTROL_LIST_MANAGER_ROLE, signer_A.address); + await base.accessControlFacet.grantRole(ATS_ROLES._PAUSER_ROLE, signer_A.address); externalWhitelistMock1 = await (await ethers.getContractFactory("MockedWhitelist", signer_A)).deploy(); await externalWhitelistMock1.deployed(); @@ -55,7 +73,7 @@ describe("ExternalControlList Management Tests", () => { } beforeEach(async () => { - await loadFixture(deployTokenSecurity); + await loadFixture(deployExternalControlListTokenSecurity); }); describe("Add Tests", () => { @@ -63,6 +81,7 @@ describe("ExternalControlList Management Tests", () => { const newControlList = externalWhitelistMock2.address; expect(await externalControlListManagement.isExternalControlList(newControlList)).to.be.false; const initialCount = await externalControlListManagement.getExternalControlListsCount(); + expect(initialCount).to.equal(4); // 2 from init + 2 from fixture await expect( externalControlListManagement.addExternalControlList(newControlList, { gasLimit: GAS_LIMIT.default, @@ -71,7 +90,7 @@ describe("ExternalControlList Management Tests", () => { .to.emit(externalControlListManagement, "AddedToExternalControlLists") .withArgs(signer_A.address, newControlList); expect(await externalControlListManagement.isExternalControlList(newControlList)).to.be.true; - expect(await externalControlListManagement.getExternalControlListsCount()).to.equal(initialCount.add(1)); + expect(await externalControlListManagement.getExternalControlListsCount()).to.equal(5); }); it("GIVEN a listed external control list WHEN adding it again THEN it reverts with ListedControlList", async () => { @@ -82,6 +101,14 @@ describe("ExternalControlList Management Tests", () => { }), ).to.be.revertedWithCustomError(externalControlListManagement, "ListedControlList"); }); + + it("GIVEN an invalid address WHEN adding it THEN it reverts with ZeroAddressNotAllowed", async () => { + await expect( + externalControlListManagement.addExternalControlList(ADDRESS_ZERO, { + gasLimit: GAS_LIMIT.default, + }), + ).to.be.revertedWithCustomError(externalControlListManagement, "ZeroAddressNotAllowed"); + }); }); describe("Remove Tests", () => { @@ -89,6 +116,7 @@ describe("ExternalControlList Management Tests", () => { const controlListToRemove = externalWhitelistMock1.address; expect(await externalControlListManagement.isExternalControlList(controlListToRemove)).to.be.true; const initialCount = await externalControlListManagement.getExternalControlListsCount(); + expect(initialCount).to.equal(4); // 2 from init + 2 from fixture await expect( externalControlListManagement.removeExternalControlList(controlListToRemove, { gasLimit: GAS_LIMIT.default, @@ -97,7 +125,7 @@ describe("ExternalControlList Management Tests", () => { .to.emit(externalControlListManagement, "RemovedFromExternalControlLists") .withArgs(signer_A.address, controlListToRemove); expect(await externalControlListManagement.isExternalControlList(controlListToRemove)).to.be.false; - expect(await externalControlListManagement.getExternalControlListsCount()).to.equal(initialCount.sub(1)); + expect(await externalControlListManagement.getExternalControlListsCount()).to.equal(3); }); it("GIVEN an unlisted external control list WHEN removing THEN it reverts with UnlistedControlList", async () => { @@ -112,12 +140,23 @@ describe("ExternalControlList Management Tests", () => { }); describe("Update Tests", () => { + it("GIVEN invalid address WHEN updated THEN it reverts with ZeroAddressNotAllowed", async () => { + const controlLists = [ADDRESS_ZERO]; + const actives = [true]; + + await expect( + externalControlListManagement.updateExternalControlLists(controlLists, actives, { + gasLimit: GAS_LIMIT.high, + }), + ).to.be.revertedWithCustomError(externalControlListManagement, "ZeroAddressNotAllowed"); + }); + it("GIVEN multiple external control lists WHEN updated THEN their statuses are updated and event is emitted", async () => { expect(await externalControlListManagement.isExternalControlList(externalWhitelistMock1.address)).to.be.true; expect(await externalControlListManagement.isExternalControlList(externalBlacklistMock1.address)).to.be.true; expect(await externalControlListManagement.isExternalControlList(externalWhitelistMock2.address)).to.be.false; const initialCount = await externalControlListManagement.getExternalControlListsCount(); - expect(initialCount).to.equal(2); + expect(initialCount).to.equal(4); // 2 from init + 2 from fixture const controlListsToUpdate = [externalBlacklistMock1.address, externalWhitelistMock2.address]; const activesToUpdate = [false, true]; @@ -133,7 +172,7 @@ describe("ExternalControlList Management Tests", () => { expect(await externalControlListManagement.isExternalControlList(externalWhitelistMock1.address)).to.be.true; expect(await externalControlListManagement.isExternalControlList(externalBlacklistMock1.address)).to.be.false; expect(await externalControlListManagement.isExternalControlList(externalWhitelistMock2.address)).to.be.true; - expect(await externalControlListManagement.getExternalControlListsCount()).to.equal(initialCount.sub(1).add(1)); + expect(await externalControlListManagement.getExternalControlListsCount()).to.equal(4); // Still 4: removed 1, added 1 }); it("GIVEN duplicate addresses with conflicting actives (true then false) WHEN updated THEN it reverts with ContradictoryValuesInArray", async () => { @@ -191,53 +230,107 @@ describe("ExternalControlList Management Tests", () => { it("GIVEN external control lists WHEN getExternalControlListsCount is called THEN it returns the current count", async () => { const initialCount = await externalControlListManagement.getExternalControlListsCount(); - expect(initialCount).to.equal(2); + expect(initialCount).to.equal(4); // 2 from init + 2 from fixture await externalControlListManagement.addExternalControlList(externalWhitelistMock2.address); - expect(await externalControlListManagement.getExternalControlListsCount()).to.equal(initialCount.add(1)); + expect(await externalControlListManagement.getExternalControlListsCount()).to.equal(5); await externalControlListManagement.removeExternalControlList(externalWhitelistMock1.address); - expect(await externalControlListManagement.getExternalControlListsCount()).to.equal(initialCount); + expect(await externalControlListManagement.getExternalControlListsCount()).to.equal(4); await externalControlListManagement.removeExternalControlList(externalBlacklistMock1.address); await externalControlListManagement.removeExternalControlList(externalWhitelistMock2.address); - expect(await externalControlListManagement.getExternalControlListsCount()).to.equal(0); + expect(await externalControlListManagement.getExternalControlListsCount()).to.equal(2); // 2 from init remain }); it("GIVEN external control lists WHEN getExternalControlListsMembers is called THEN it returns paginated members", async () => { - expect(await externalControlListManagement.getExternalControlListsCount()).to.equal(2); + expect(await externalControlListManagement.getExternalControlListsCount()).to.equal(4); // 2 from init + 2 from fixture let membersPage = await externalControlListManagement.getExternalControlListsMembers(0, 1); expect(membersPage).to.have.lengthOf(1); - expect([externalWhitelistMock1.address, externalBlacklistMock1.address]).to.include(membersPage[0]); + expect([ + initMock1.address, + initMock2.address, + externalWhitelistMock1.address, + externalBlacklistMock1.address, + ]).to.include(membersPage[0]); membersPage = await externalControlListManagement.getExternalControlListsMembers(1, 1); expect(membersPage).to.have.lengthOf(1); - expect([externalWhitelistMock1.address, externalBlacklistMock1.address]).to.include(membersPage[0]); + expect([ + initMock1.address, + initMock2.address, + externalWhitelistMock1.address, + externalBlacklistMock1.address, + ]).to.include(membersPage[0]); expect(membersPage[0]).to.not.equal( (await externalControlListManagement.getExternalControlListsMembers(0, 1))[0], ); - let allMembers = await externalControlListManagement.getExternalControlListsMembers(0, 2); - expect(allMembers).to.have.lengthOf(2); + let allMembers = await externalControlListManagement.getExternalControlListsMembers(0, 4); + expect(allMembers).to.have.lengthOf(4); + expect(allMembers).to.contain(initMock1.address); + expect(allMembers).to.contain(initMock2.address); expect(allMembers).to.contain(externalWhitelistMock1.address); expect(allMembers).to.contain(externalBlacklistMock1.address); await externalControlListManagement.addExternalControlList(externalWhitelistMock2.address); - allMembers = await externalControlListManagement.getExternalControlListsMembers(0, 3); - expect(allMembers).to.have.lengthOf(3); + allMembers = await externalControlListManagement.getExternalControlListsMembers(0, 5); + expect(allMembers).to.have.lengthOf(5); + expect(allMembers).to.contain(initMock1.address); + expect(allMembers).to.contain(initMock2.address); expect(allMembers).to.contain(externalWhitelistMock1.address); expect(allMembers).to.contain(externalBlacklistMock1.address); expect(allMembers).to.contain(externalWhitelistMock2.address); - // Adjusting expectation for pagination: getting page 1 (index 1) with length 2 from 3 items - membersPage = await externalControlListManagement.getExternalControlListsMembers(1, 2); - expect(membersPage).to.have.lengthOf(1); // Only the third item remains on the second page (index 1) if pagesize is 2. + membersPage = await externalControlListManagement.getExternalControlListsMembers(1, 3); + expect(membersPage).to.have.lengthOf(2); - membersPage = await externalControlListManagement.getExternalControlListsMembers(3, 1); + membersPage = await externalControlListManagement.getExternalControlListsMembers(5, 1); expect(membersPage).to.have.lengthOf(0); await externalControlListManagement.removeExternalControlList(externalWhitelistMock1.address); await externalControlListManagement.removeExternalControlList(externalBlacklistMock1.address); await externalControlListManagement.removeExternalControlList(externalWhitelistMock2.address); allMembers = await externalControlListManagement.getExternalControlListsMembers(0, 5); - expect(allMembers).to.have.lengthOf(0); + expect(allMembers).to.have.lengthOf(2); // 2 from init remain + }); + }); + + describe("Pause Tests", () => { + it("GIVEN a paused token WHEN addExternalControlList THEN it reverts with TokenIsPaused", async () => { + await pauseFacet.pause(); + const newControlList = externalWhitelistMock2.address; + await expect( + externalControlListManagement.addExternalControlList(newControlList, { + gasLimit: GAS_LIMIT.default, + }), + ).to.be.revertedWithCustomError(externalControlListManagement, "TokenIsPaused"); + }); + + it("GIVEN a paused token WHEN removeExternalControlList THEN it reverts with TokenIsPaused", async () => { + await pauseFacet.pause(); + await expect( + externalControlListManagement.removeExternalControlList(externalWhitelistMock1.address, { + gasLimit: GAS_LIMIT.default, + }), + ).to.be.revertedWithCustomError(externalControlListManagement, "TokenIsPaused"); + }); + + it("GIVEN a paused token WHEN updateExternalControlLists THEN it reverts with TokenIsPaused", async () => { + await pauseFacet.pause(); + const controlLists = [externalWhitelistMock1.address]; + const actives = [false]; + await expect( + externalControlListManagement.updateExternalControlLists(controlLists, actives, { + gasLimit: GAS_LIMIT.high, + }), + ).to.be.revertedWithCustomError(externalControlListManagement, "TokenIsPaused"); + }); + }); + + describe("Initialize Tests", () => { + it("GIVEN an already initialized contract WHEN initialize_ExternalControlLists is called again THEN it reverts with ContractAlreadyInitialized", async () => { + const newControlLists = [externalWhitelistMock2.address]; + await expect( + externalControlListManagement.initialize_ExternalControlLists(newControlLists), + ).to.be.revertedWithCustomError(externalControlListManagement, "AlreadyInitialized"); }); }); diff --git a/packages/ats/contracts/test/contracts/unit/layer_1/externalKycLists/externalKycList.test.ts b/packages/ats/contracts/test/contracts/unit/layer_1/externalKycLists/externalKycList.test.ts index de4691150..fd65f12d5 100644 --- a/packages/ats/contracts/test/contracts/unit/layer_1/externalKycLists/externalKycList.test.ts +++ b/packages/ats/contracts/test/contracts/unit/layer_1/externalKycLists/externalKycList.test.ts @@ -1,9 +1,10 @@ import { expect } from "chai"; import { ethers } from "hardhat"; import { SignerWithAddress } from "@nomiclabs/hardhat-ethers/signers.js"; -import { ATS_ROLES, GAS_LIMIT } from "@scripts"; +import { ADDRESS_ZERO, ATS_ROLES, GAS_LIMIT } from "@scripts"; import { deployEquityTokenFixture } from "@test"; -import { ResolverProxy, ExternalKycListManagement, MockedExternalKycList } from "@contract-types"; + +import { ResolverProxy, ExternalKycListManagementFacet, MockedExternalKycList, Pause } from "@contract-types"; import { loadFixture } from "@nomicfoundation/hardhat-network-helpers"; describe("ExternalKycList Management Tests", () => { @@ -11,15 +12,27 @@ describe("ExternalKycList Management Tests", () => { let signer_A: SignerWithAddress; let signer_B: SignerWithAddress; - let externalKycListManagement: ExternalKycListManagement; + let externalKycListManagement: ExternalKycListManagementFacet; + let pauseFacet: Pause; + let initMock1: MockedExternalKycList; + let initMock2: MockedExternalKycList; let externalKycListMock1: MockedExternalKycList; let externalKycListMock2: MockedExternalKycList; let externalKycListMock3: MockedExternalKycList; - async function deploySecurityFixture() { + + async function deployExternalKycSecurityFixture() { + const [deployer] = await ethers.getSigners(); + initMock1 = await (await ethers.getContractFactory("MockedExternalKycList", deployer)).deploy(); + await initMock1.deployed(); + initMock2 = await (await ethers.getContractFactory("MockedExternalKycList", deployer)).deploy(); + await initMock2.deployed(); + const base = await deployEquityTokenFixture({ + useLoadFixture: false, equityDataParams: { securityData: { isMultiPartition: true, + externalKycLists: [initMock1.address, initMock2.address], }, }, }); @@ -27,8 +40,10 @@ describe("ExternalKycList Management Tests", () => { signer_A = base.deployer; signer_B = base.user1; - externalKycListManagement = await ethers.getContractAt("ExternalKycListManagement", diamond.address, signer_A); + externalKycListManagement = await ethers.getContractAt("ExternalKycListManagementFacet", diamond.address, signer_A); + pauseFacet = await ethers.getContractAt("Pause", diamond.address, signer_A); await base.accessControlFacet.grantRole(ATS_ROLES._KYC_MANAGER_ROLE, signer_A.address); + await base.accessControlFacet.grantRole(ATS_ROLES._PAUSER_ROLE, signer_A.address); externalKycListMock1 = await (await ethers.getContractFactory("MockedExternalKycList", signer_A)).deploy(); await externalKycListMock1.deployed(); @@ -38,12 +53,13 @@ describe("ExternalKycList Management Tests", () => { externalKycListMock3 = await (await ethers.getContractFactory("MockedExternalKycList", signer_A)).deploy(); await externalKycListMock3.deployed(); + // Now we have 2 from initialization + 2 added here = 4 total await externalKycListManagement.addExternalKycList(externalKycListMock1.address, { gasLimit: GAS_LIMIT.default }); await externalKycListManagement.addExternalKycList(externalKycListMock2.address, { gasLimit: GAS_LIMIT.default }); } beforeEach(async () => { - await loadFixture(deploySecurityFixture); + await loadFixture(deployExternalKycSecurityFixture); }); describe("Add Tests", () => { @@ -51,6 +67,7 @@ describe("ExternalKycList Management Tests", () => { const newKycList = externalKycListMock3.address; expect(await externalKycListManagement.isExternalKycList(newKycList)).to.be.false; const initialCount = await externalKycListManagement.getExternalKycListsCount(); + expect(initialCount).to.equal(4); // 2 from init + 2 from fixture await expect( externalKycListManagement.addExternalKycList(newKycList, { gasLimit: GAS_LIMIT.default, @@ -59,7 +76,7 @@ describe("ExternalKycList Management Tests", () => { .to.emit(externalKycListManagement, "AddedToExternalKycLists") .withArgs(signer_A.address, newKycList); expect(await externalKycListManagement.isExternalKycList(newKycList)).to.be.true; - expect(await externalKycListManagement.getExternalKycListsCount()).to.equal(initialCount.add(1)); + expect(await externalKycListManagement.getExternalKycListsCount()).to.equal(5); }); it("GIVEN a listed external kyc WHEN adding it again THEN it reverts with ListedKycList", async () => { @@ -68,6 +85,14 @@ describe("ExternalKycList Management Tests", () => { externalKycListManagement.addExternalKycList(externalKycListMock1.address, { gasLimit: GAS_LIMIT.default }), ).to.be.revertedWithCustomError(externalKycListManagement, "ListedKycList"); }); + + it("GIVEN an invalid address WHEN adding it THEN it reverts with ZeroAddressNotAllowed", async () => { + await expect( + externalKycListManagement.addExternalKycList(ADDRESS_ZERO, { + gasLimit: GAS_LIMIT.default, + }), + ).to.be.revertedWithCustomError(externalKycListManagement, "ZeroAddressNotAllowed"); + }); }); describe("Remove Tests", () => { @@ -75,6 +100,7 @@ describe("ExternalKycList Management Tests", () => { const kycListToRemove = externalKycListMock1.address; expect(await externalKycListManagement.isExternalKycList(kycListToRemove)).to.be.true; const initialCount = await externalKycListManagement.getExternalKycListsCount(); + expect(initialCount).to.equal(4); // 2 from init + 2 from fixture await expect( externalKycListManagement.removeExternalKycList(kycListToRemove, { gasLimit: GAS_LIMIT.default, @@ -83,7 +109,7 @@ describe("ExternalKycList Management Tests", () => { .to.emit(externalKycListManagement, "RemovedFromExternalKycLists") .withArgs(signer_A.address, kycListToRemove); expect(await externalKycListManagement.isExternalKycList(kycListToRemove)).to.be.false; - expect(await externalKycListManagement.getExternalKycListsCount()).to.equal(initialCount.sub(1)); + expect(await externalKycListManagement.getExternalKycListsCount()).to.equal(3); }); it("GIVEN an unlisted external kyc WHEN removing THEN it reverts with UnlistedKycList", async () => { @@ -98,12 +124,23 @@ describe("ExternalKycList Management Tests", () => { }); describe("Update Tests", () => { + it("GIVEN invalid address WHEN updated THEN it reverts with ZeroAddressNotAllowed", async () => { + const kycListsToUpdate = [ADDRESS_ZERO]; + const actives = [true]; + + await expect( + externalKycListManagement.updateExternalKycLists(kycListsToUpdate, actives, { + gasLimit: GAS_LIMIT.high, + }), + ).to.be.revertedWithCustomError(externalKycListManagement, "ZeroAddressNotAllowed"); + }); + it("GIVEN multiple external kyc WHEN updated THEN their statuses are updated and event is emitted", async () => { expect(await externalKycListManagement.isExternalKycList(externalKycListMock1.address)).to.be.true; expect(await externalKycListManagement.isExternalKycList(externalKycListMock2.address)).to.be.true; expect(await externalKycListManagement.isExternalKycList(externalKycListMock3.address)).to.be.false; const initialCount = await externalKycListManagement.getExternalKycListsCount(); - expect(initialCount).to.equal(2); + expect(initialCount).to.equal(4); // 2 from init + 2 from fixture const kycListsToUpdate = [externalKycListMock2.address, externalKycListMock3.address]; const activesToUpdate = [false, true]; @@ -119,7 +156,7 @@ describe("ExternalKycList Management Tests", () => { expect(await externalKycListManagement.isExternalKycList(externalKycListMock1.address)).to.be.true; expect(await externalKycListManagement.isExternalKycList(externalKycListMock2.address)).to.be.false; expect(await externalKycListManagement.isExternalKycList(externalKycListMock3.address)).to.be.true; - expect(await externalKycListManagement.getExternalKycListsCount()).to.equal(initialCount.sub(1).add(1)); + expect(await externalKycListManagement.getExternalKycListsCount()).to.equal(4); // Still 4: removed 1, added 1 }); it("GIVEN duplicate addresses with conflicting actives (true then false) WHEN updated THEN it reverts with ContradictoryValuesInArray", async () => { @@ -177,64 +214,82 @@ describe("ExternalKycList Management Tests", () => { it("GIVEN granted and revoked addresses WHEN isExternallyGranted is called THEN it returns the correct status", async () => { const randomAddress = ethers.Wallet.createRandom().address; - await externalKycListManagement.removeExternalKycList(externalKycListMock2.address, { - gasLimit: GAS_LIMIT.default, - }); + // isExternallyGranted returns true only if ALL active external kyc lists have the same status + // So we need to grant KYC in all 4 active lists (2 from init + 2 from fixture) + expect(await externalKycListManagement.getExternalKycListsCount()).to.equal(4); expect(await externalKycListManagement.isExternallyGranted(randomAddress, 1)).to.be.false; - await externalKycListMock1.grantKyc(randomAddress, { - gasLimit: GAS_LIMIT.default, - }); + // Grant KYC in all 4 active lists + await initMock1.grantKyc(randomAddress, { gasLimit: GAS_LIMIT.default }); + await initMock2.grantKyc(randomAddress, { gasLimit: GAS_LIMIT.default }); + await externalKycListMock1.grantKyc(randomAddress, { gasLimit: GAS_LIMIT.default }); + await externalKycListMock2.grantKyc(randomAddress, { gasLimit: GAS_LIMIT.default }); expect(await externalKycListManagement.isExternallyGranted(randomAddress, 1)).to.be.true; - await externalKycListMock1.revokeKyc(randomAddress, { - gasLimit: GAS_LIMIT.default, - }); + // Revoke KYC in all 4 lists + await initMock1.revokeKyc(randomAddress, { gasLimit: GAS_LIMIT.default }); + await initMock2.revokeKyc(randomAddress, { gasLimit: GAS_LIMIT.default }); + await externalKycListMock1.revokeKyc(randomAddress, { gasLimit: GAS_LIMIT.default }); + await externalKycListMock2.revokeKyc(randomAddress, { gasLimit: GAS_LIMIT.default }); - expect(await externalKycListManagement.isExternallyGranted(randomAddress, 1)).to.be.false; + expect(await externalKycListManagement.isExternallyGranted(randomAddress, 0)).to.be.true; // All have NOT_GRANTED status }); it("GIVEN external kyc lists WHEN getExternalKycListsCount is called THEN it returns the current count", async () => { const initialCount = await externalKycListManagement.getExternalKycListsCount(); - expect(initialCount).to.equal(2); + expect(initialCount).to.equal(4); // 2 from init + 2 from fixture await externalKycListManagement.addExternalKycList(externalKycListMock3.address); - expect(await externalKycListManagement.getExternalKycListsCount()).to.equal(initialCount.add(1)); + expect(await externalKycListManagement.getExternalKycListsCount()).to.equal(5); await externalKycListManagement.removeExternalKycList(externalKycListMock1.address); - expect(await externalKycListManagement.getExternalKycListsCount()).to.equal(initialCount); + expect(await externalKycListManagement.getExternalKycListsCount()).to.equal(4); await externalKycListManagement.removeExternalKycList(externalKycListMock2.address); await externalKycListManagement.removeExternalKycList(externalKycListMock3.address); - expect(await externalKycListManagement.getExternalKycListsCount()).to.equal(0); + expect(await externalKycListManagement.getExternalKycListsCount()).to.equal(2); // 2 from init remain }); it("GIVEN external kyc lists WHEN getExternalKycListsMembers is called THEN it returns paginated members", async () => { - expect(await externalKycListManagement.getExternalKycListsCount()).to.equal(2); + expect(await externalKycListManagement.getExternalKycListsCount()).to.equal(4); // 2 from init + 2 from fixture let membersPage = await externalKycListManagement.getExternalKycListsMembers(0, 1); expect(membersPage).to.have.lengthOf(1); - expect([externalKycListMock1.address, externalKycListMock2.address]).to.include(membersPage[0]); + expect([ + initMock1.address, + initMock2.address, + externalKycListMock1.address, + externalKycListMock2.address, + ]).to.include(membersPage[0]); membersPage = await externalKycListManagement.getExternalKycListsMembers(1, 1); expect(membersPage).to.have.lengthOf(1); - expect([externalKycListMock1.address, externalKycListMock2.address]).to.include(membersPage[0]); + expect([ + initMock1.address, + initMock2.address, + externalKycListMock1.address, + externalKycListMock2.address, + ]).to.include(membersPage[0]); expect(membersPage[0]).to.not.equal((await externalKycListManagement.getExternalKycListsMembers(0, 1))[0]); - let allMembers = await externalKycListManagement.getExternalKycListsMembers(0, 2); - expect(allMembers).to.have.lengthOf(2); + let allMembers = await externalKycListManagement.getExternalKycListsMembers(0, 4); + expect(allMembers).to.have.lengthOf(4); + expect(allMembers).to.contain(initMock1.address); + expect(allMembers).to.contain(initMock2.address); expect(allMembers).to.contain(externalKycListMock1.address); expect(allMembers).to.contain(externalKycListMock2.address); await externalKycListManagement.addExternalKycList(externalKycListMock3.address); - allMembers = await externalKycListManagement.getExternalKycListsMembers(0, 3); - expect(allMembers).to.have.lengthOf(3); + allMembers = await externalKycListManagement.getExternalKycListsMembers(0, 5); + expect(allMembers).to.have.lengthOf(5); + expect(allMembers).to.contain(initMock1.address); + expect(allMembers).to.contain(initMock2.address); expect(allMembers).to.contain(externalKycListMock1.address); expect(allMembers).to.contain(externalKycListMock2.address); expect(allMembers).to.contain(externalKycListMock3.address); - membersPage = await externalKycListManagement.getExternalKycListsMembers(1, 2); - expect(membersPage).to.have.lengthOf(1); - membersPage = await externalKycListManagement.getExternalKycListsMembers(3, 1); - expect(membersPage).to.have.lengthOf(0); + membersPage = await externalKycListManagement.getExternalKycListsMembers(1, 3); + expect(membersPage).to.have.lengthOf(2); // Page 1 with length 3 returns elements 3-4 (2 elements) + membersPage = await externalKycListManagement.getExternalKycListsMembers(5, 1); + expect(membersPage).to.have.lengthOf(0); // Beyond available elements await externalKycListManagement.removeExternalKycList(externalKycListMock1.address); await externalKycListManagement.removeExternalKycList(externalKycListMock2.address); await externalKycListManagement.removeExternalKycList(externalKycListMock3.address); allMembers = await externalKycListManagement.getExternalKycListsMembers(0, 5); - expect(allMembers).to.have.lengthOf(0); + expect(allMembers).to.have.lengthOf(2); // 2 from init remain }); }); @@ -307,4 +362,46 @@ describe("ExternalKycList Management Tests", () => { expect(await externalKycListManagement.isExternalKycList(externalKycListMock2.address)).to.be.true; }); }); + + describe("Pause Tests", () => { + it("GIVEN a paused token WHEN addExternalKycList THEN it reverts with TokenIsPaused", async () => { + await pauseFacet.pause(); + const newKycList = externalKycListMock3.address; + await expect( + externalKycListManagement.addExternalKycList(newKycList, { + gasLimit: GAS_LIMIT.default, + }), + ).to.be.revertedWithCustomError(externalKycListManagement, "TokenIsPaused"); + }); + + it("GIVEN a paused token WHEN removeExternalKycList THEN it reverts with TokenIsPaused", async () => { + await pauseFacet.pause(); + await expect( + externalKycListManagement.removeExternalKycList(externalKycListMock1.address, { + gasLimit: GAS_LIMIT.default, + }), + ).to.be.revertedWithCustomError(externalKycListManagement, "TokenIsPaused"); + }); + + it("GIVEN a paused token WHEN updateExternalKycLists THEN it reverts with TokenIsPaused", async () => { + await pauseFacet.pause(); + const kycLists = [externalKycListMock1.address]; + const actives = [false]; + await expect( + externalKycListManagement.updateExternalKycLists(kycLists, actives, { + gasLimit: GAS_LIMIT.high, + }), + ).to.be.revertedWithCustomError(externalKycListManagement, "TokenIsPaused"); + }); + }); + + describe("Initialize Tests", () => { + it("GIVEN an already initialized contract WHEN initialize_ExternalKycLists is called again THEN it reverts with ContractAlreadyInitialized", async () => { + const newKycLists = [externalKycListMock3.address]; + await expect(externalKycListManagement.initialize_ExternalKycLists(newKycLists)).to.be.revertedWithCustomError( + externalKycListManagement, + "AlreadyInitialized", + ); + }); + }); }); diff --git a/packages/ats/contracts/test/contracts/unit/layer_1/externalPauses/externalPause.test.ts b/packages/ats/contracts/test/contracts/unit/layer_1/externalPauses/externalPause.test.ts index 98ae4eaf1..0dc3c6e56 100644 --- a/packages/ats/contracts/test/contracts/unit/layer_1/externalPauses/externalPause.test.ts +++ b/packages/ats/contracts/test/contracts/unit/layer_1/externalPauses/externalPause.test.ts @@ -2,25 +2,34 @@ import { expect } from "chai"; import { ethers } from "hardhat"; import { SignerWithAddress } from "@nomiclabs/hardhat-ethers/signers.js"; import { loadFixture } from "@nomicfoundation/hardhat-network-helpers"; -import { ATS_ROLES, GAS_LIMIT } from "@scripts"; +import { ADDRESS_ZERO, ATS_ROLES, GAS_LIMIT } from "@scripts"; import { deployEquityTokenFixture } from "@test"; -import { ResolverProxy, ExternalPauseManagement, MockedExternalPause } from "@contract-types"; +import { ResolverProxy, ExternalPauseManagementFacet, MockedExternalPause } from "@contract-types"; describe("ExternalPause Tests", () => { let diamond: ResolverProxy; let signer_A: SignerWithAddress; let signer_B: SignerWithAddress; - let externalPauseManagement: ExternalPauseManagement; + let externalPauseManagement: ExternalPauseManagementFacet; let externalPauseMock1: MockedExternalPause; let externalPauseMock2: MockedExternalPause; let externalPauseMock3: MockedExternalPause; - async function deploySecurityFixture() { + async function deployExternalPauseSecurityFixture() { + const [tempSigner] = await ethers.getSigners(); + const initMock1 = await (await ethers.getContractFactory("MockedExternalPause", tempSigner)).deploy(); + await initMock1.deployed(); + + const initMock2 = await (await ethers.getContractFactory("MockedExternalPause", tempSigner)).deploy(); + await initMock2.deployed(); + const base = await deployEquityTokenFixture({ + useLoadFixture: false, equityDataParams: { securityData: { isMultiPartition: true, + externalPauses: [initMock1.address, initMock2.address], // These trigger the for loop in initialize_ExternalPauses }, }, }); @@ -28,7 +37,7 @@ describe("ExternalPause Tests", () => { signer_A = base.deployer; signer_B = base.user1; - externalPauseManagement = await ethers.getContractAt("ExternalPauseManagement", diamond.address, signer_A); + externalPauseManagement = await ethers.getContractAt("ExternalPauseManagementFacet", diamond.address, signer_A); await base.accessControlFacet.grantRole(ATS_ROLES._PAUSE_MANAGER_ROLE, signer_A.address); @@ -61,7 +70,7 @@ describe("ExternalPause Tests", () => { } beforeEach(async () => { - await loadFixture(deploySecurityFixture); + await loadFixture(deployExternalPauseSecurityFixture); }); describe("Add Tests", () => { @@ -88,6 +97,14 @@ describe("ExternalPause Tests", () => { }), ).to.be.revertedWithCustomError(externalPauseManagement, "ListedPause"); }); + + it("GIVEN an invalid address WHEN adding it THEN it reverts with ZeroAddressNotAllowed", async () => { + await expect( + externalPauseManagement.addExternalPause(ADDRESS_ZERO, { + gasLimit: GAS_LIMIT.default, + }), + ).to.be.revertedWithCustomError(externalPauseManagement, "ZeroAddressNotAllowed"); + }); }); describe("Remove Tests", () => { @@ -118,13 +135,24 @@ describe("ExternalPause Tests", () => { }); describe("Update Tests", () => { + it("GIVEN invalid address WHEN updated THEN it reverts with ZeroAddressNotAllowed", async () => { + const pausesToUpdate = [ADDRESS_ZERO]; + const actives = [true]; + + await expect( + externalPauseManagement.updateExternalPauses(pausesToUpdate, actives, { + gasLimit: GAS_LIMIT.high, + }), + ).to.be.revertedWithCustomError(externalPauseManagement, "ZeroAddressNotAllowed"); + }); + it("GIVEN multiple external pauses WHEN updated THEN their statuses are updated and event is emitted", async () => { // Initial state: mock1=true, mock2=true. Verify. expect(await externalPauseManagement.isExternalPause(externalPauseMock1.address)).to.be.true; expect(await externalPauseManagement.isExternalPause(externalPauseMock2.address)).to.be.true; expect(await externalPauseManagement.isExternalPause(externalPauseMock3.address)).to.be.false; const initialCount = await externalPauseManagement.getExternalPausesCount(); - expect(initialCount).to.equal(2); + expect(initialCount).to.equal(4); // 2 from init + 2 added in fixture const pausesToUpdate = [externalPauseMock2.address, externalPauseMock3.address]; const activesToUpdate = [false, true]; // Corresponds to removing mock2, adding mock3 @@ -141,7 +169,7 @@ describe("ExternalPause Tests", () => { expect(await externalPauseManagement.isExternalPause(externalPauseMock1.address)).to.be.true; // mock1 untouched expect(await externalPauseManagement.isExternalPause(externalPauseMock2.address)).to.be.false; // mock2 removed expect(await externalPauseManagement.isExternalPause(externalPauseMock3.address)).to.be.true; // mock3 added - expect(await externalPauseManagement.getExternalPausesCount()).to.equal(initialCount.sub(1).add(1)); // 2 - 1 + 1 = 2 + expect(await externalPauseManagement.getExternalPausesCount()).to.equal(initialCount.sub(1).add(1)); // 4 - 1 + 1 = 4 }); it("GIVEN duplicate addresses with conflicting actives (true then false) WHEN updated THEN it reverts with ContradictoryValuesInArray", async () => { @@ -199,44 +227,51 @@ describe("ExternalPause Tests", () => { it("GIVEN external pauses WHEN getExternalPausesCount is called THEN it returns the current count", async () => { const initialCount = await externalPauseManagement.getExternalPausesCount(); - expect(initialCount).to.equal(2); // From beforeEach + expect(initialCount).to.equal(4); // 2 from init + 2 from beforeEach await externalPauseManagement.addExternalPause(externalPauseMock3.address); - expect(await externalPauseManagement.getExternalPausesCount()).to.equal(initialCount.add(1)); // 3 + expect(await externalPauseManagement.getExternalPausesCount()).to.equal(initialCount.add(1)); // 5 await externalPauseManagement.removeExternalPause(externalPauseMock1.address); - expect(await externalPauseManagement.getExternalPausesCount()).to.equal(initialCount); // 2 + expect(await externalPauseManagement.getExternalPausesCount()).to.equal(initialCount); // 4 await externalPauseManagement.removeExternalPause(externalPauseMock2.address); await externalPauseManagement.removeExternalPause(externalPauseMock3.address); - expect(await externalPauseManagement.getExternalPausesCount()).to.equal(0); + expect(await externalPauseManagement.getExternalPausesCount()).to.equal(2); // 2 from init remain }); it("GIVEN external pauses WHEN getExternalPausesMembers is called THEN it returns paginated members", async () => { - expect(await externalPauseManagement.getExternalPausesCount()).to.equal(2); // From beforeEach + expect(await externalPauseManagement.getExternalPausesCount()).to.equal(4); // 2 from init + 2 from beforeEach + + // Test pagination - get first member let membersPage = await externalPauseManagement.getExternalPausesMembers(0, 1); expect(membersPage).to.have.lengthOf(1); - expect([externalPauseMock1.address, externalPauseMock2.address]).to.include(membersPage[0]); + const firstMember = membersPage[0]; + + // Test pagination - get second member (should be different from first) membersPage = await externalPauseManagement.getExternalPausesMembers(1, 1); expect(membersPage).to.have.lengthOf(1); - expect([externalPauseMock1.address, externalPauseMock2.address]).to.include(membersPage[0]); - expect(membersPage[0]).to.not.equal((await externalPauseManagement.getExternalPausesMembers(0, 1))[0]); - let allMembers = await externalPauseManagement.getExternalPausesMembers(0, 2); - expect(allMembers).to.have.lengthOf(2); + expect(membersPage[0]).to.not.equal(firstMember); + + // Get all 4 members + let allMembers = await externalPauseManagement.getExternalPausesMembers(0, 4); + expect(allMembers).to.have.lengthOf(4); expect(allMembers).to.contain(externalPauseMock1.address); expect(allMembers).to.contain(externalPauseMock2.address); await externalPauseManagement.addExternalPause(externalPauseMock3.address); - allMembers = await externalPauseManagement.getExternalPausesMembers(0, 3); - expect(allMembers).to.have.lengthOf(3); + allMembers = await externalPauseManagement.getExternalPausesMembers(0, 5); + expect(allMembers).to.have.lengthOf(5); expect(allMembers).to.contain(externalPauseMock1.address); expect(allMembers).to.contain(externalPauseMock2.address); expect(allMembers).to.contain(externalPauseMock3.address); - membersPage = await externalPauseManagement.getExternalPausesMembers(1, 2); - expect(membersPage).to.have.lengthOf(1); - membersPage = await externalPauseManagement.getExternalPausesMembers(3, 1); + + membersPage = await externalPauseManagement.getExternalPausesMembers(1, 3); + expect(membersPage).to.have.lengthOf(2); + + membersPage = await externalPauseManagement.getExternalPausesMembers(5, 1); expect(membersPage).to.have.lengthOf(0); await externalPauseManagement.removeExternalPause(externalPauseMock1.address); await externalPauseManagement.removeExternalPause(externalPauseMock2.address); await externalPauseManagement.removeExternalPause(externalPauseMock3.address); allMembers = await externalPauseManagement.getExternalPausesMembers(0, 5); - expect(allMembers).to.have.lengthOf(0); + expect(allMembers).to.have.lengthOf(2); // 2 from init remain }); }); @@ -352,4 +387,13 @@ describe("ExternalPause Tests", () => { expect(await externalPauseManagement.isExternalPause(externalPauseMock2.address)).to.be.true; }); }); + + describe("Initialize Tests", () => { + it("GIVEN already initialized WHEN initialize_ExternalPauses is called again THEN it reverts with AlreadyInitialized", async () => { + await expect(externalPauseManagement.initialize_ExternalPauses([])).to.be.revertedWithCustomError( + externalPauseManagement, + "AlreadyInitialized", + ); + }); + }); }); diff --git a/packages/ats/contracts/test/contracts/unit/layer_1/hold/hold.test.ts b/packages/ats/contracts/test/contracts/unit/layer_1/hold/hold.test.ts index 815c040ca..855234ad2 100644 --- a/packages/ats/contracts/test/contracts/unit/layer_1/hold/hold.test.ts +++ b/packages/ats/contracts/test/contracts/unit/layer_1/hold/hold.test.ts @@ -1,28 +1,39 @@ import { expect } from "chai"; -import { ethers } from "hardhat"; +import { ethers, network } from "hardhat"; import { SignerWithAddress } from "@nomiclabs/hardhat-ethers/signers.js"; import { loadFixture } from "@nomicfoundation/hardhat-network-helpers"; import { deployEquityTokenFixture } from "@test"; import { executeRbac, MAX_UINT256 } from "@test"; -import { EMPTY_STRING, ATS_ROLES, ZERO, EMPTY_HEX_BYTES, ADDRESS_ZERO, dateToUnixTimestamp } from "@scripts"; +import { + EMPTY_STRING, + ATS_ROLES, + ZERO, + EMPTY_HEX_BYTES, + ADDRESS_ZERO, + dateToUnixTimestamp, + DEFAULT_PARTITION, +} from "@scripts"; import { ResolverProxy, - IHold, - Pause, + PauseFacet, IERC1410, - ControlList, - ERC20, + ControlListFacet, + ERC20Facet, TimeTravelFacet, - Kyc, - SsiManagement, + KycFacet, + SsiManagementFacet, ClearingActionsFacet, Equity, - AccessControl, - Cap, - AdjustBalances, - Lock, - Snapshots, + LockFacet, + SnapshotsFacet, + IERC3643, + ERC1644Facet, + AccessControlFacet, + AdjustBalancesFacet, + CapFacet, + DiamondCutFacet, } from "@contract-types"; +import { Contract } from "ethers"; const _DEFAULT_PARTITION = "0x0000000000000000000000000000000000000000000000000000000000000001"; const _WRONG_PARTITION = "0x0000000000000000000000000000000000000000000000000000000000000321"; @@ -58,21 +69,24 @@ describe("Hold Tests", () => { let signer_D: SignerWithAddress; let signer_E: SignerWithAddress; - let holdFacet: IHold; - let pauseFacet: Pause; - let lock: Lock; + let holdFacet: Contract; + let pauseFacet: PauseFacet; + let lock: LockFacet; let erc1410Facet: IERC1410; - let controlListFacet: ControlList; - let erc20Facet: ERC20; + let controlListFacet: ControlListFacet; + let erc20Facet: ERC20Facet; let timeTravelFacet: TimeTravelFacet; - let kycFacet: Kyc; - let ssiManagementFacet: SsiManagement; + let kycFacet: KycFacet; + let ssiManagementFacet: SsiManagementFacet; let clearingActionsFacet: ClearingActionsFacet; let equityFacet: Equity; - let accessControlFacet: AccessControl; - let capFacet: Cap; - let adjustBalancesFacet: AdjustBalances; - let snapshotFacet: Snapshots; + let accessControlFacet: AccessControlFacet; + let capFacet: CapFacet; + let adjustBalancesFacet: AdjustBalancesFacet; + let snapshotFacet: SnapshotsFacet; + let erc3643Facet: IERC3643; + let erc1644Facet: ERC1644Facet; + let diamondCutFacet: DiamondCutFacet; const ONE_YEAR_IN_SECONDS = 365 * 24 * 60 * 60; let currentTimestamp = 0; @@ -81,6 +95,13 @@ describe("Hold Tests", () => { // eslint-disable-next-line @typescript-eslint/no-explicit-any let hold: any; + const packedData = ethers.utils.defaultAbiCoder.encode( + ["bytes32", "bytes32"], + [ATS_ROLES._PROTECTED_PARTITIONS_PARTICIPANT_ROLE, DEFAULT_PARTITION], + ); + const packedDataWithoutPrefix = packedData.slice(2); + const ProtectedPartitionRole_1 = ethers.utils.keccak256("0x" + packedDataWithoutPrefix); + function set_initRbacs() { return [ { @@ -115,26 +136,59 @@ describe("Hold Tests", () => { role: ATS_ROLES._CONTROLLER_ROLE, members: [signer_C.address], }, + { + role: ATS_ROLES._PROTECTED_PARTITIONS_ROLE, + members: [signer_B.address], + }, + { + role: ATS_ROLES._AGENT_ROLE, + members: [signer_A.address], + }, + { role: ProtectedPartitionRole_1, members: [signer_B.address] }, ]; } async function setFacets({ diamond }: { diamond: ResolverProxy }) { - lock = await ethers.getContractAt("Lock", diamond.address, signer_A); - holdFacet = await ethers.getContractAt("IHold", diamond.address, signer_A); - pauseFacet = await ethers.getContractAt("Pause", diamond.address, signer_D); + const holdManagementFacet = await ethers.getContractAt("HoldManagementFacet", diamond.address, signer_A); + + const holdReadFacet = await ethers.getContractAt("HoldReadFacet", diamond.address, signer_A); + const holdTokenHolderFacet = await ethers.getContractAt("HoldTokenHolderFacet", diamond.address, signer_A); + + const fragmentMap = new Map(); + [ + ...holdManagementFacet.interface.fragments, + ...holdReadFacet.interface.fragments, + ...holdTokenHolderFacet.interface.fragments, + ].forEach((fragment) => { + const key = fragment.format(); + if (!fragmentMap.has(key)) { + fragmentMap.set(key, fragment); + } + }); + + const uniqueFragments = Array.from(fragmentMap.values()); + + holdFacet = new Contract(diamond.address, uniqueFragments, signer_A); + + lock = await ethers.getContractAt("LockFacet", diamond.address, signer_A); + pauseFacet = await ethers.getContractAt("PauseFacet", diamond.address, signer_D); erc1410Facet = await ethers.getContractAt("IERC1410", diamond.address, signer_B); - kycFacet = await ethers.getContractAt("Kyc", diamond.address, signer_B); - ssiManagementFacet = await ethers.getContractAt("SsiManagement", diamond.address, signer_A); + kycFacet = await ethers.getContractAt("KycFacet", diamond.address, signer_B); + ssiManagementFacet = await ethers.getContractAt("SsiManagementFacet", diamond.address, signer_A); equityFacet = await ethers.getContractAt("Equity", diamond.address, signer_A); timeTravelFacet = await ethers.getContractAt("TimeTravelFacet", diamond.address, signer_A); - adjustBalancesFacet = await ethers.getContractAt("AdjustBalances", diamond.address, signer_A); + adjustBalancesFacet = await ethers.getContractAt("AdjustBalancesFacet", diamond.address, signer_A); clearingActionsFacet = await ethers.getContractAt("ClearingActionsFacet", diamond.address, signer_A); - snapshotFacet = await ethers.getContractAt("Snapshots", diamond.address); + snapshotFacet = await ethers.getContractAt("SnapshotsFacet", diamond.address); + + capFacet = await ethers.getContractAt("CapFacet", diamond.address, signer_A); + accessControlFacet = await ethers.getContractAt("AccessControlFacet", diamond.address, signer_A); + erc20Facet = await ethers.getContractAt("ERC20Facet", diamond.address, signer_A); + controlListFacet = await ethers.getContractAt("ControlListFacet", diamond.address, signer_E); + erc3643Facet = await ethers.getContractAt("IERC3643", diamond.address, signer_A); + erc1644Facet = await ethers.getContractAt("ERC1644Facet", diamond.address, signer_A); + diamondCutFacet = await ethers.getContractAt("DiamondCutFacet", diamond.address, signer_A); - capFacet = await ethers.getContractAt("Cap", diamond.address, signer_A); - accessControlFacet = await ethers.getContractAt("AccessControl", diamond.address, signer_A); - erc20Facet = await ethers.getContractAt("ERC20", diamond.address, signer_A); - controlListFacet = await ethers.getContractAt("ControlList", diamond.address, signer_E); // Set the initial RBACs await ssiManagementFacet.connect(signer_A).addIssuer(signer_A.address); await kycFacet.grantKyc(signer_A.address, EMPTY_VC_ID, ZERO, MAX_UINT256, signer_A.address); @@ -452,6 +506,76 @@ describe("Hold Tests", () => { }); describe("Create with wrong input arguments", () => { + it("Given a invalid _from address when createHoldFromByPartition THEN transaction fails with ZeroAddressNotAllowed", async () => { + await erc20Facet.connect(signer_A).approve(signer_B.address, _AMOUNT); + + await expect( + holdFacet + .connect(signer_B) + .createHoldFromByPartition(_DEFAULT_PARTITION, ADDRESS_ZERO, hold, EMPTY_HEX_BYTES), + ).to.be.revertedWithCustomError(holdFacet, "ZeroAddressNotAllowed"); + }); + + it("Given a invalid _from address when operatorCreateHoldByPartition THEN transaction fails with ZeroAddressNotAllowed", async () => { + const hold_wrong = { + amount: _AMOUNT, + expirationTimestamp: expirationTimestamp, + escrow: ADDRESS_ZERO, + to: ADDRESS_ZERO, + data: _DATA, + }; + await expect( + holdFacet + .connect(signer_B) + .operatorCreateHoldByPartition(_DEFAULT_PARTITION, ADDRESS_ZERO, hold_wrong, EMPTY_HEX_BYTES), + ).to.be.revertedWithCustomError(holdFacet, "ZeroAddressNotAllowed"); + }); + + it("Given token with partition protected WHEN operatorCreateHoldByPartition THEN transaction fails with PartitionsAreProtectedAndNoRole", async () => { + const base = await deployEquityTokenFixture({ + equityDataParams: { + securityData: { + isMultiPartition: false, + arePartitionsProtected: true, + }, + }, + }); + await executeRbac(base.accessControlFacet, set_initRbacs()); + diamond = base.diamond; + await setFacets({ diamond }); + const operatorData = "0xab56"; + + await erc1410Facet.connect(signer_A).authorizeOperator(signer_B.address); + await expect( + holdFacet + .connect(signer_B) + .operatorCreateHoldByPartition(_DEFAULT_PARTITION, signer_A.address, hold, operatorData), + ).to.be.rejectedWith("PartitionsAreProtectedAndNoRole"); + }); + + it("Given a invalid _from address when controllerCreateHoldByPartition THEN transaction fails with ZeroAddressNotAllowed", async () => { + const hold_wrong = { + amount: _AMOUNT, + expirationTimestamp: expirationTimestamp, + escrow: ADDRESS_ZERO, + to: ADDRESS_ZERO, + data: _DATA, + }; + await expect( + holdFacet + .connect(signer_B) + .controllerCreateHoldByPartition(_DEFAULT_PARTITION, ADDRESS_ZERO, hold_wrong, EMPTY_HEX_BYTES), + ).to.be.revertedWithCustomError(holdFacet, "ZeroAddressNotAllowed"); + }); + it("Given noControllable token when controllerCreateHoldByPartition THEN transaction fails with TokenIsNotControllable", async () => { + await erc1644Facet.finalizeControllable(); + + await expect( + holdFacet + .connect(signer_C) + .controllerCreateHoldByPartition(_DEFAULT_PARTITION, signer_A.address, hold, EMPTY_HEX_BYTES), + ).to.be.revertedWithCustomError(erc1644Facet, "TokenIsNotControllable"); + }); it("GIVEN a Token WHEN creating hold with amount bigger than balance THEN transaction fails with InsufficientBalance", async () => { const AmountLargerThanBalance = 1000 * _AMOUNT; @@ -495,6 +619,31 @@ describe("Hold Tests", () => { ).to.be.revertedWithCustomError(erc20Facet, "InsufficientBalance"); }); + it("GIVEN msg.sender recovering WHEN createHoldByPartition THEN transaction fails with WalletRecovered", async () => { + await erc3643Facet.recoveryAddress(signer_A.address, signer_B.address, ADDRESS_ZERO); + + await expect(holdFacet.createHoldByPartition(_DEFAULT_PARTITION, hold)).to.be.revertedWithCustomError( + erc3643Facet, + "WalletRecovered", + ); + }); + + it("GIVEN hold.to recovering WHEN createHoldByPartition THEN transaction fails with WalletRecovered", async () => { + const hold_with_destination = { + amount: _AMOUNT, + expirationTimestamp: expirationTimestamp, + escrow: signer_B.address, + to: signer_C.address, + data: _DATA, + }; + + await erc3643Facet.recoveryAddress(signer_C.address, signer_B.address, ADDRESS_ZERO); + + await expect( + holdFacet.createHoldByPartition(_DEFAULT_PARTITION, hold_with_destination), + ).to.be.revertedWithCustomError(erc3643Facet, "WalletRecovered"); + }); + it("GIVEN a Token WHEN createHoldByPartition passing empty escrow THEN transaction fails with ZeroAddressNotAllowed", async () => { const hold_wrong = { amount: _AMOUNT, @@ -696,6 +845,14 @@ describe("Hold Tests", () => { }); describe("Execute with wrong input arguments", () => { + it("GIVEN a wrong hold id WHEN executeHoldByPartition THEN transaction fails with WrongHoldId", async () => { + holdIdentifier.holdId = 999; + + await expect( + holdFacet.connect(signer_B).executeHoldByPartition(holdIdentifier, signer_C.address, 1), + ).to.be.revertedWithCustomError(holdFacet, "WrongHoldId"); + }); + it("GIVEN a wrong escrow id WHEN executeHoldByPartition THEN transaction fails with IsNotEscrow", async () => { await holdFacet.createHoldByPartition(_DEFAULT_PARTITION, hold); @@ -748,6 +905,14 @@ describe("Hold Tests", () => { }); describe("Release with wrong input arguments", () => { + it("GIVEN a wrong hold id WHEN releaseHoldByPartition THEN transaction fails with WrongHoldId", async () => { + holdIdentifier.holdId = 999; + + await expect( + holdFacet.connect(signer_B).releaseHoldByPartition(holdIdentifier, 1), + ).to.be.revertedWithCustomError(holdFacet, "WrongHoldId"); + }); + it("GIVEN a wrong escrow WHEN releaseHoldByPartition THEN transaction fails with IsNotEscrow", async () => { await holdFacet.createHoldByPartition(_DEFAULT_PARTITION, hold); @@ -942,6 +1107,264 @@ describe("Hold Tests", () => { expect(await erc20Facet.allowance(signer_A.address, signer_B.address)).to.be.equal(_AMOUNT); }); + + describe("Protected Create Hold By Partition", () => { + let protectedHold: any; + let domain: any; + + const holdType = { + Hold: [ + { name: "amount", type: "uint256" }, + { name: "expirationTimestamp", type: "uint256" }, + { name: "escrow", type: "address" }, + { name: "to", type: "address" }, + { name: "data", type: "bytes" }, + ], + ProtectedHold: [ + { name: "hold", type: "Hold" }, + { name: "deadline", type: "uint256" }, + { name: "nonce", type: "uint256" }, + ], + protectedCreateHoldByPartition: [ + { name: "_partition", type: "bytes32" }, + { name: "_from", type: "address" }, + { name: "_protectedHold", type: "ProtectedHold" }, + ], + }; + + async function protectedEquityTokenFixture() { + const base = await deployEquityTokenFixture({ + equityDataParams: { + securityData: { + arePartitionsProtected: true, + }, + }, + }); + diamond = base.diamond; + signer_A = base.deployer; + signer_B = base.user1; + signer_C = base.user2; + signer_D = base.user3; + signer_E = base.user4; + + await executeRbac(base.accessControlFacet, set_initRbacs()); + await setFacets({ diamond }); + } + + beforeEach(async () => { + await loadFixture(protectedEquityTokenFixture); + + const name = (await erc20Facet.getERC20Metadata()).info.name; + const version = (await diamondCutFacet.getConfigInfo()).version_.toString(); + const chainId = await network.provider.send("eth_chainId"); + + domain = { + name: name, + version: version, + chainId: chainId, + verifyingContract: diamond.address, + }; + + protectedHold = { + hold: { ...hold }, + deadline: MAX_UINT256, + nonce: 1, + }; + }); + + it("GIVEN a paused Token WHEN protectedCreateHoldByPartition THEN transaction fails with TokenIsPaused", async () => { + await pauseFacet.pause(); + + const message = { + _partition: _DEFAULT_PARTITION, + _from: signer_A.address, + _protectedHold: protectedHold, + }; + const signature = await signer_A._signTypedData(domain, holdType, message); + + await expect( + holdFacet + .connect(signer_B) + .protectedCreateHoldByPartition(_DEFAULT_PARTITION, signer_A.address, protectedHold, signature), + ).to.be.revertedWithCustomError(pauseFacet, "TokenIsPaused"); + }); + + it("GIVEN a token in clearing mode WHEN protectedCreateHoldByPartition THEN transaction fails with ClearingIsActivated", async () => { + await clearingActionsFacet.activateClearing(); + + const message = { + _partition: _DEFAULT_PARTITION, + _from: signer_A.address, + _protectedHold: protectedHold, + }; + const signature = await signer_A._signTypedData(domain, holdType, message); + + await expect( + holdFacet + .connect(signer_B) + .protectedCreateHoldByPartition(_DEFAULT_PARTITION, signer_A.address, protectedHold, signature), + ).to.be.revertedWithCustomError(holdFacet, "ClearingIsActivated"); + }); + + it("GIVEN a zero _from address WHEN protectedCreateHoldByPartition THEN transaction fails with ZeroAddressNotAllowed", async () => { + await expect( + holdFacet + .connect(signer_B) + .protectedCreateHoldByPartition(_DEFAULT_PARTITION, ADDRESS_ZERO, protectedHold, "0x1234"), + ).to.be.revertedWithCustomError(holdFacet, "ZeroAddressNotAllowed"); + }); + + it("GIVEN a zero escrow address WHEN protectedCreateHoldByPartition THEN transaction fails with ZeroAddressNotAllowed", async () => { + protectedHold.hold.escrow = ADDRESS_ZERO; + + await expect( + holdFacet + .connect(signer_B) + .protectedCreateHoldByPartition(_DEFAULT_PARTITION, signer_A.address, protectedHold, "0x1234"), + ).to.be.revertedWithCustomError(holdFacet, "ZeroAddressNotAllowed"); + }); + + it("GIVEN a from user recovering WHEN protectedCreateHoldByPartition THEN transaction fails with WalletRecovered", async () => { + await erc3643Facet.recoveryAddress(signer_A.address, signer_B.address, ADDRESS_ZERO); + + await expect( + holdFacet + .connect(signer_B) + .protectedCreateHoldByPartition(_DEFAULT_PARTITION, signer_A.address, protectedHold, "0x1234"), + ).to.be.revertedWithCustomError(erc3643Facet, "WalletRecovered"); + }); + + it("GIVEN a hold user recovering WHEN protectedCreateHoldByPartition THEN transaction fails with WalletRecovered", async () => { + await erc3643Facet.recoveryAddress(protectedHold.hold.to, signer_B.address, ADDRESS_ZERO); + + await expect( + holdFacet + .connect(signer_B) + .protectedCreateHoldByPartition(_DEFAULT_PARTITION, signer_A.address, protectedHold, "0x1234"), + ).to.be.revertedWithCustomError(erc3643Facet, "WalletRecovered"); + }); + + it("GIVEN a invalid timestamp WHEN protectedCreateHoldByPartition THEN transaction fails with WrongExpirationTimestamp", async () => { + protectedHold.hold.expirationTimestamp = 0; + const message = { + _partition: _DEFAULT_PARTITION, + _from: signer_A.address, + _protectedHold: protectedHold, + }; + // Sign the message hash + const signature = await signer_A._signTypedData(domain, holdType, message); + await expect( + holdFacet + .connect(signer_B) + .protectedCreateHoldByPartition(_DEFAULT_PARTITION, signer_A.address, protectedHold, signature), + ).to.be.revertedWithCustomError(lock, "WrongExpirationTimestamp"); + }); + + it("GIVEN an account without protected partition role WHEN protectedCreateHoldByPartition THEN transaction fails with AccountHasNoRole", async () => { + const message = { + _partition: _DEFAULT_PARTITION, + _from: signer_A.address, + _protectedHold: protectedHold, + }; + const signature = await signer_A._signTypedData(domain, holdType, message); + + await expect( + holdFacet + .connect(signer_C) + .protectedCreateHoldByPartition(_DEFAULT_PARTITION, signer_A.address, protectedHold, signature), + ).to.be.revertedWithCustomError(accessControlFacet, "AccountHasNoRole"); + }); + + it("GIVEN valid parameters and signature WHEN protectedCreateHoldByPartition THEN transaction succeeds", async () => { + const message = { + _partition: _DEFAULT_PARTITION, + _from: signer_A.address, + _protectedHold: protectedHold, + }; + // Sign the message hash + const signature = await signer_A._signTypedData(domain, holdType, message); + await expect( + holdFacet + .connect(signer_B) + .protectedCreateHoldByPartition(_DEFAULT_PARTITION, signer_A.address, protectedHold, signature), + ) + .to.emit(holdFacet, "ProtectedHeldByPartition") + .withArgs( + signer_B.address, + signer_A.address, + _DEFAULT_PARTITION, + 1, + [ + protectedHold.hold.amount, + protectedHold.hold.expirationTimestamp, + protectedHold.hold.escrow, + protectedHold.hold.to, + protectedHold.hold.data, + ], + "0x", + ); + + // Verify hold was created correctly + const heldAmount = await holdFacet.getHeldAmountForByPartition(_DEFAULT_PARTITION, signer_A.address); + expect(heldAmount).to.equal(protectedHold.hold.amount); + + const holdCount = await holdFacet.getHoldCountForByPartition(_DEFAULT_PARTITION, signer_A.address); + expect(holdCount).to.equal(1); + + const retrievedHold = await holdFacet.getHoldForByPartition(holdIdentifier); + expect(retrievedHold.amount_).to.equal(protectedHold.hold.amount); + expect(retrievedHold.escrow_).to.equal(protectedHold.hold.escrow); + expect(retrievedHold.destination_).to.equal(protectedHold.hold.to); + expect(retrievedHold.expirationTimestamp_).to.equal(protectedHold.hold.expirationTimestamp); + expect(retrievedHold.thirdPartyType_).to.equal(ThirdPartyType.PROTECTED); + + const holdThirdParty = await holdFacet.getHoldThirdParty(holdIdentifier); + expect(holdThirdParty).to.equal(ADDRESS_ZERO); + }); + + it("GIVEN a hold with specific destination WHEN protectedCreateHoldByPartition THEN hold is created with correct destination", async () => { + protectedHold.hold.to = signer_C.address; + + const message = { + _partition: _DEFAULT_PARTITION, + _from: signer_A.address, + _protectedHold: protectedHold, + }; + const signature = await signer_A._signTypedData(domain, holdType, message); + + await holdFacet + .connect(signer_B) + .protectedCreateHoldByPartition(_DEFAULT_PARTITION, signer_A.address, protectedHold, signature); + + const retrievedHold = await holdFacet.getHoldForByPartition(holdIdentifier); + expect(retrievedHold.destination_).to.equal(signer_C.address); + }); + + it("GIVEN token without partitionsProtected WHEN protectedCreateHoldByPartition THEN revert with PartitionsAreUnProtected ", async () => { + const base = await deployEquityTokenFixture({ + equityDataParams: { + securityData: { + arePartitionsProtected: false, + }, + }, + }); + + await executeRbac(base.accessControlFacet, set_initRbacs()); + const message = { + _partition: _DEFAULT_PARTITION, + _from: signer_A.address, + _protectedHold: protectedHold, + }; + // Sign the message hash + const signature = await signer_A._signTypedData(domain, holdType, message); + await expect( + holdFacet + .attach(base.diamond.address) + .connect(signer_B) + .protectedCreateHoldByPartition(_DEFAULT_PARTITION, signer_A.address, protectedHold, signature), + ).to.rejectedWith("PartitionsAreUnProtected"); + }); + }); }); describe("Multi-partition", () => { @@ -949,6 +1372,64 @@ describe("Hold Tests", () => { await loadFixture(deploySecurityFixtureMultiPartition); }); + it("Given token with partition protected WHEN createHoldByPartition THEN transaction fails with PartitionsAreProtectedAndNoRole", async () => { + const base = await deployEquityTokenFixture({ + equityDataParams: { + securityData: { + isMultiPartition: true, + arePartitionsProtected: true, + }, + }, + }); + await executeRbac(base.accessControlFacet, set_initRbacs()); + diamond = base.diamond; + await setFacets({ diamond }); + + currentTimestamp = (await ethers.provider.getBlock("latest")).timestamp; + + hold = { + amount: _AMOUNT, + expirationTimestamp: currentTimestamp + ONE_YEAR_IN_SECONDS, + escrow: signer_B.address, + to: ADDRESS_ZERO, + data: _DATA, + }; + + await expect(holdFacet.createHoldByPartition(_DEFAULT_PARTITION, hold)).to.be.rejectedWith( + "PartitionsAreProtectedAndNoRole", + ); + }); + + it("Given token with partition protected WHEN createHoldFromByPartition THEN transaction fails with PartitionsAreProtectedAndNoRole", async () => { + const base = await deployEquityTokenFixture({ + equityDataParams: { + securityData: { + isMultiPartition: true, + arePartitionsProtected: true, + }, + }, + }); + await executeRbac(base.accessControlFacet, set_initRbacs()); + diamond = base.diamond; + await setFacets({ diamond }); + + currentTimestamp = (await ethers.provider.getBlock("latest")).timestamp; + + hold = { + amount: _AMOUNT, + expirationTimestamp: currentTimestamp + ONE_YEAR_IN_SECONDS, + escrow: signer_B.address, + to: ADDRESS_ZERO, + data: _DATA, + }; + + await expect( + holdFacet + .connect(signer_B) + .createHoldFromByPartition(_DEFAULT_PARTITION, signer_A.address, hold, EMPTY_HEX_BYTES), + ).to.be.rejectedWith("PartitionsAreProtectedAndNoRole"); + }); + it("GIVEN a Token WHEN createHoldByPartition for wrong partition THEN transaction fails with InvalidPartition", async () => { await expect(holdFacet.createHoldByPartition(_WRONG_PARTITION, hold)).to.be.revertedWithCustomError( erc1410Facet, diff --git a/packages/ats/contracts/test/contracts/unit/layer_1/interestRates/fixedRate/fixedRate.test.ts b/packages/ats/contracts/test/contracts/unit/layer_1/interestRates/fixedRate/fixedRate.test.ts new file mode 100644 index 000000000..07cfe2bd9 --- /dev/null +++ b/packages/ats/contracts/test/contracts/unit/layer_1/interestRates/fixedRate/fixedRate.test.ts @@ -0,0 +1,89 @@ +import { expect } from "chai"; +import { ethers } from "hardhat"; +import { SignerWithAddress } from "@nomiclabs/hardhat-ethers/signers.js"; +import { type ResolverProxy, Pause, FixedRate } from "@contract-types"; +import { ATS_ROLES } from "@scripts"; +import { loadFixture } from "@nomicfoundation/hardhat-network-helpers"; +import { DEFAULT_BOND_FIXED_RATE_PARAMS, deployBondFixedRateTokenFixture } from "@test"; +import { executeRbac } from "@test"; + +describe("Fixed Rate Tests", () => { + let diamond: ResolverProxy; + let signer_A: SignerWithAddress; + let signer_B: SignerWithAddress; + let signer_C: SignerWithAddress; + + let fixedRateFacet: FixedRate; + let pauseFacet: Pause; + + async function deploySecurityFixtureMultiPartition() { + const base = await deployBondFixedRateTokenFixture(); + diamond = base.diamond; + signer_A = base.deployer; + signer_B = base.user2; + signer_C = base.user3; + + await executeRbac(base.accessControlFacet, [ + { + role: ATS_ROLES._PAUSER_ROLE, + members: [signer_B.address], + }, + { + role: ATS_ROLES._INTEREST_RATE_MANAGER_ROLE, + members: [signer_A.address], + }, + ]); + + fixedRateFacet = await ethers.getContractAt("FixedRate", diamond.address, signer_A); + pauseFacet = await ethers.getContractAt("Pause", diamond.address, signer_A); + } + + beforeEach(async () => { + await loadFixture(deploySecurityFixtureMultiPartition); + }); + + it("GIVEN an initialized contract WHEN trying to initialize it again THEN transaction fails with AlreadyInitialized", async () => { + await expect(fixedRateFacet.initialize_FixedRate({ rate: 1, rateDecimals: 0 })).to.be.rejectedWith( + "AlreadyInitialized", + ); + }); + + describe("Paused", () => { + beforeEach(async () => { + // Pausing the token + await pauseFacet.connect(signer_B).pause(); + }); + + it("GIVEN a paused Token WHEN setFixedRate THEN transaction fails with TokenIsPaused", async () => { + // transfer with data fails + await expect(fixedRateFacet.connect(signer_A).setRate(1, 2)).to.be.rejectedWith("TokenIsPaused"); + }); + }); + + describe("AccessControl", () => { + it("GIVEN an account without interest rate manager role WHEN setFixedRate THEN transaction fails with AccountHasNoRole", async () => { + // add to list fails + await expect(fixedRateFacet.connect(signer_C).setRate(1, 2)).to.be.rejectedWith("AccountHasNoRole"); + }); + }); + + describe("New Interest Rate OK", () => { + it("GIVEN a token WHEN setFixedRate THEN transaction succeeds", async () => { + const newRate = 355; + const newRateDecimals = 3; + + const oldRateValues = await fixedRateFacet.getRate(); + + await expect(fixedRateFacet.connect(signer_A).setRate(newRate, newRateDecimals)) + .to.emit(fixedRateFacet, "RateUpdated") + .withArgs(signer_A.address, newRate, newRateDecimals); + + const newRateValues = await fixedRateFacet.getRate(); + + expect(oldRateValues.rate_).to.equal(DEFAULT_BOND_FIXED_RATE_PARAMS.rate); + expect(oldRateValues.decimals_).to.equal(DEFAULT_BOND_FIXED_RATE_PARAMS.rateDecimals); + expect(newRateValues.rate_).to.equal(newRate); + expect(newRateValues.decimals_).to.equal(newRateDecimals); + }); + }); +}); diff --git a/packages/ats/contracts/test/contracts/unit/layer_1/interestRates/kpiLinkedRate/kpiLinkedRate.test.ts b/packages/ats/contracts/test/contracts/unit/layer_1/interestRates/kpiLinkedRate/kpiLinkedRate.test.ts new file mode 100644 index 000000000..0a3e5bcaa --- /dev/null +++ b/packages/ats/contracts/test/contracts/unit/layer_1/interestRates/kpiLinkedRate/kpiLinkedRate.test.ts @@ -0,0 +1,291 @@ +import { expect } from "chai"; +import { ethers } from "hardhat"; +import { SignerWithAddress } from "@nomiclabs/hardhat-ethers/signers.js"; +import { type ResolverProxy, Pause, KpiLinkedRate } from "@contract-types"; +import { ADDRESS_ZERO, ATS_ROLES } from "@scripts"; +import { loadFixture } from "@nomicfoundation/hardhat-network-helpers"; +import { DEFAULT_BOND_KPI_LINKED_RATE_PARAMS, deployBondKpiLinkedRateTokenFixture } from "@test"; +import { executeRbac } from "@test"; + +describe("Kpi Linked Rate Tests", () => { + let diamond: ResolverProxy; + let signer_A: SignerWithAddress; + let signer_B: SignerWithAddress; + let signer_C: SignerWithAddress; + + let kpiLinkedRateFacet: KpiLinkedRate; + let pauseFacet: Pause; + + async function deploySecurityFixtureMultiPartition() { + const base = await deployBondKpiLinkedRateTokenFixture(); + diamond = base.diamond; + signer_A = base.deployer; + signer_B = base.user2; + signer_C = base.user3; + + await executeRbac(base.accessControlFacet, [ + { + role: ATS_ROLES._PAUSER_ROLE, + members: [signer_B.address], + }, + { + role: ATS_ROLES._INTEREST_RATE_MANAGER_ROLE, + members: [signer_A.address], + }, + ]); + + kpiLinkedRateFacet = await ethers.getContractAt("KpiLinkedRate", diamond.address, signer_A); + pauseFacet = await ethers.getContractAt("Pause", diamond.address, signer_A); + } + + beforeEach(async () => { + await loadFixture(deploySecurityFixtureMultiPartition); + }); + + it("GIVEN an initialized contract WHEN trying to initialize it again THEN transaction fails with AlreadyInitialized", async () => { + await expect( + kpiLinkedRateFacet.initialize_KpiLinkedRate( + { + maxRate: 3, + baseRate: 2, + minRate: 1, + startPeriod: 1000, + startRate: 2, + missedPenalty: 2, + reportPeriod: 5000, + rateDecimals: 1, + }, + { + maxDeviationCap: 1000, + baseLine: 700, + maxDeviationFloor: 300, + impactDataDecimals: 1, + adjustmentPrecision: 3, + }, + ADDRESS_ZERO, + ), + ).to.be.rejectedWith("AlreadyInitialized"); + }); + + describe("Paused", () => { + beforeEach(async () => { + // Pausing the token + await pauseFacet.connect(signer_B).pause(); + }); + + it("GIVEN a paused Token WHEN setInterestRate THEN transaction fails with TokenIsPaused", async () => { + // transfer with data fails + await expect( + kpiLinkedRateFacet.connect(signer_A).setInterestRate({ + maxRate: 3, + baseRate: 2, + minRate: 1, + startPeriod: 1000, + startRate: 2, + missedPenalty: 2, + reportPeriod: 5000, + rateDecimals: 1, + }), + ).to.be.rejectedWith("TokenIsPaused"); + }); + + it("GIVEN a paused Token WHEN setImpactData THEN transaction fails with TokenIsPaused", async () => { + // transfer with data fails + await expect( + kpiLinkedRateFacet.connect(signer_A).setImpactData({ + maxDeviationCap: 1000, + baseLine: 700, + maxDeviationFloor: 300, + impactDataDecimals: 1, + adjustmentPrecision: 3, + }), + ).to.be.rejectedWith("TokenIsPaused"); + }); + + it("GIVEN a paused Token WHEN setKpiOracle THEN transaction fails with TokenIsPaused", async () => { + // transfer with data fails + await expect( + kpiLinkedRateFacet.connect(signer_A).setKpiOracle("0x0000000000000000000000000000000000000001"), + ).to.be.rejectedWith("TokenIsPaused"); + }); + }); + + describe("AccessControl", () => { + it("GIVEN an account without interest rate manager role WHEN setInterestRate THEN transaction fails with AccountHasNoRole", async () => { + // add to list fails + await expect( + kpiLinkedRateFacet.connect(signer_C).setInterestRate({ + maxRate: 3, + baseRate: 2, + minRate: 1, + startPeriod: 1000, + startRate: 2, + missedPenalty: 2, + reportPeriod: 5000, + rateDecimals: 1, + }), + ).to.be.rejectedWith("AccountHasNoRole"); + }); + + it("GIVEN an account without interest rate manager role WHEN setImpactData THEN transaction fails with AccountHasNoRole", async () => { + // add to list fails + await expect( + kpiLinkedRateFacet.connect(signer_C).setImpactData({ + maxDeviationCap: 1000, + baseLine: 700, + maxDeviationFloor: 300, + impactDataDecimals: 1, + adjustmentPrecision: 3, + }), + ).to.be.rejectedWith("AccountHasNoRole"); + }); + + it("GIVEN an account without interest rate manager role WHEN setKpiOracle THEN transaction fails with AccountHasNoRole", async () => { + // add to list fails + await expect( + kpiLinkedRateFacet.connect(signer_C).setKpiOracle("0x0000000000000000000000000000000000000001"), + ).to.be.rejectedWith("AccountHasNoRole"); + }); + }); + + describe("Interest Rate", () => { + it("GIVEN Min Rate larger than Base Rate WHEN setInterestRate THEN transaction fails with WrongInterestRateValues", async () => { + // add to list fails + await expect( + kpiLinkedRateFacet.connect(signer_A).setInterestRate({ + maxRate: 4, + baseRate: 2, + minRate: 3, + startPeriod: 1000, + startRate: 2, + missedPenalty: 2, + reportPeriod: 5000, + rateDecimals: 1, + }), + ).to.be.rejectedWith("WrongInterestRateValues"); + }); + + it("GIVEN Base Rate larger than Max Rate WHEN setInterestRate THEN transaction fails with WrongInterestRateValues", async () => { + // add to list fails + await expect( + kpiLinkedRateFacet.connect(signer_A).setInterestRate({ + maxRate: 4, + baseRate: 5, + minRate: 3, + startPeriod: 1000, + startRate: 2, + missedPenalty: 2, + reportPeriod: 5000, + rateDecimals: 1, + }), + ).to.be.rejectedWith("WrongInterestRateValues"); + }); + + it("GIVEN correct interest rate WHEN setInterestRate THEN transaction succeeds", async () => { + const newInterestRate = { + maxRate: DEFAULT_BOND_KPI_LINKED_RATE_PARAMS.maxRate + 100, + baseRate: DEFAULT_BOND_KPI_LINKED_RATE_PARAMS.baseRate + 100, + minRate: DEFAULT_BOND_KPI_LINKED_RATE_PARAMS.minRate + 100, + startPeriod: DEFAULT_BOND_KPI_LINKED_RATE_PARAMS.startPeriod + 1000, + startRate: DEFAULT_BOND_KPI_LINKED_RATE_PARAMS.startRate + 100, + missedPenalty: DEFAULT_BOND_KPI_LINKED_RATE_PARAMS.missedPenalty + 100, + reportPeriod: DEFAULT_BOND_KPI_LINKED_RATE_PARAMS.reportPeriod + 1000, + rateDecimals: DEFAULT_BOND_KPI_LINKED_RATE_PARAMS.rateDecimals + 1, + }; + + await expect(kpiLinkedRateFacet.connect(signer_A).setInterestRate(newInterestRate)) + .to.emit(kpiLinkedRateFacet, "InterestRateUpdated") + .withArgs(signer_A.address, [ + newInterestRate.maxRate, + newInterestRate.baseRate, + newInterestRate.minRate, + newInterestRate.startPeriod, + newInterestRate.startRate, + newInterestRate.missedPenalty, + newInterestRate.reportPeriod, + newInterestRate.rateDecimals, + ]); + + const interestRate = await kpiLinkedRateFacet.getInterestRate(); + + expect(interestRate.maxRate).to.equal(newInterestRate.maxRate); + expect(interestRate.baseRate).to.equal(newInterestRate.baseRate); + expect(interestRate.minRate).to.equal(newInterestRate.minRate); + expect(interestRate.startPeriod).to.equal(newInterestRate.startPeriod); + expect(interestRate.startRate).to.equal(newInterestRate.startRate); + expect(interestRate.missedPenalty).to.equal(newInterestRate.missedPenalty); + expect(interestRate.reportPeriod).to.equal(newInterestRate.reportPeriod); + expect(interestRate.rateDecimals).to.equal(newInterestRate.rateDecimals); + }); + }); + + describe("Impact Data", () => { + it("GIVEN Max deviation floor larger than Base Line WHEN setImpactData THEN transaction fails with WrongImpactDataValues", async () => { + // add to list fails + await expect( + kpiLinkedRateFacet.connect(signer_A).setImpactData({ + maxDeviationCap: 1000, + baseLine: 700, + maxDeviationFloor: 800, + impactDataDecimals: 1, + adjustmentPrecision: 8, + }), + ).to.be.rejectedWith("WrongImpactDataValues"); + }); + + it("GIVEN Base Line larger than Max Deviation Cap WHEN setImpactData THEN transaction fails with WrongImpactDataValues", async () => { + // add to list fails + await expect( + kpiLinkedRateFacet.connect(signer_A).setImpactData({ + maxDeviationCap: 1000, + baseLine: 7000, + maxDeviationFloor: 800, + impactDataDecimals: 1, + adjustmentPrecision: 8, + }), + ).to.be.rejectedWith("WrongImpactDataValues"); + }); + + it("GIVEN correct impact data WHEN setImpactData THEN transaction succeeds", async () => { + const newImpactData = { + maxDeviationCap: DEFAULT_BOND_KPI_LINKED_RATE_PARAMS.maxDeviationCap + 100, + baseLine: DEFAULT_BOND_KPI_LINKED_RATE_PARAMS.baseLine + 100, + maxDeviationFloor: DEFAULT_BOND_KPI_LINKED_RATE_PARAMS.maxDeviationFloor + 100, + impactDataDecimals: DEFAULT_BOND_KPI_LINKED_RATE_PARAMS.impactDataDecimals + 1, + adjustmentPrecision: DEFAULT_BOND_KPI_LINKED_RATE_PARAMS.adjustmentPrecision + 1, + }; + + await expect(kpiLinkedRateFacet.connect(signer_A).setImpactData(newImpactData)) + .to.emit(kpiLinkedRateFacet, "ImpactDataUpdated") + .withArgs(signer_A.address, [ + newImpactData.maxDeviationCap, + newImpactData.baseLine, + newImpactData.maxDeviationFloor, + newImpactData.impactDataDecimals, + newImpactData.adjustmentPrecision, + ]); + + const impactData = await kpiLinkedRateFacet.getImpactData(); + + expect(impactData.maxDeviationCap).to.equal(newImpactData.maxDeviationCap); + expect(impactData.baseLine).to.equal(newImpactData.baseLine); + expect(impactData.maxDeviationFloor).to.equal(newImpactData.maxDeviationFloor); + expect(impactData.impactDataDecimals).to.equal(newImpactData.impactDataDecimals); + expect(impactData.adjustmentPrecision).to.equal(newImpactData.adjustmentPrecision); + }); + }); + + describe("Kpi Oracle", () => { + it("GIVEN oracle WHEN setKpiOracle THEN transaction succeeds", async () => { + const newOracle = "0x0000000000000000000000000000000000000011"; + + await expect(kpiLinkedRateFacet.connect(signer_A).setKpiOracle(newOracle)) + .to.emit(kpiLinkedRateFacet, "KpiOracleUpdated") + .withArgs(signer_A.address, newOracle); + + const oracle = await kpiLinkedRateFacet.getKpiOracle(); + + expect(oracle).to.equal(newOracle); + }); + }); +}); diff --git a/packages/ats/contracts/test/contracts/unit/layer_1/interestRates/sustainabilityPerformanceTargetRate/sustainabilityPerformanceTargetRate.test.ts b/packages/ats/contracts/test/contracts/unit/layer_1/interestRates/sustainabilityPerformanceTargetRate/sustainabilityPerformanceTargetRate.test.ts new file mode 100644 index 000000000..ab542fc95 --- /dev/null +++ b/packages/ats/contracts/test/contracts/unit/layer_1/interestRates/sustainabilityPerformanceTargetRate/sustainabilityPerformanceTargetRate.test.ts @@ -0,0 +1,398 @@ +import { expect } from "chai"; +import { ethers } from "hardhat"; +import { SignerWithAddress } from "@nomiclabs/hardhat-ethers/signers.js"; +import { + type ResolverProxy, + PauseFacet, + SustainabilityPerformanceTargetRateFacet, + ProceedRecipientsFacet, +} from "@contract-types"; +import { ATS_ROLES, BOND_SUSTAINABILITY_PERFORMANCE_TARGET_RATE_CONFIG_ID } from "@scripts"; +import { loadFixture } from "@nomicfoundation/hardhat-network-helpers"; +import { + DEFAULT_BOND_SUSTAINABILITY_PERFORMANCE_TARGET_RATE_PARAMS, + deployBondSustainabilityPerformanceTargetRateTokenFixture, + deployAtsInfrastructureFixture, +} from "@test"; +import { executeRbac } from "@test"; + +describe("Sustainability Performance Target Rate Tests", () => { + let diamond: ResolverProxy; + let signer_A: SignerWithAddress; + let signer_B: SignerWithAddress; + let signer_C: SignerWithAddress; + let project1: string; + let project2: string; + + let sustainabilityPerformanceTargetRateFacet: SustainabilityPerformanceTargetRateFacet; + let pauseFacet: PauseFacet; + let proceedRecipientsFacet: ProceedRecipientsFacet; + + async function deploySecurityFixtureMultiPartition() { + const base = await deployBondSustainabilityPerformanceTargetRateTokenFixture(); + diamond = base.diamond; + signer_A = base.deployer; + signer_B = base.user2; + signer_C = base.user3; + + // Set up projects + project1 = signer_A.address; + project2 = signer_B.address; + + await executeRbac(base.accessControlFacet, [ + { + role: ATS_ROLES._PAUSER_ROLE, + members: [signer_B.address], + }, + { + role: ATS_ROLES._INTEREST_RATE_MANAGER_ROLE, + members: [signer_A.address], + }, + { + role: ATS_ROLES._PROCEED_RECIPIENT_MANAGER_ROLE, + members: [signer_A.address], + }, + ]); + + sustainabilityPerformanceTargetRateFacet = await ethers.getContractAt( + "SustainabilityPerformanceTargetRateFacet", + diamond.address, + signer_A, + ); + pauseFacet = await ethers.getContractAt("PauseFacet", diamond.address, signer_A); + proceedRecipientsFacet = await ethers.getContractAt("ProceedRecipientsFacet", diamond.address, signer_A); + + await proceedRecipientsFacet.connect(signer_A).addProceedRecipient(project1, "0x"); + await proceedRecipientsFacet.connect(signer_A).addProceedRecipient(project2, "0x"); + } + + beforeEach(async () => { + await loadFixture(deploySecurityFixtureMultiPartition); + }); + + it("GIVEN an initialized contract WHEN trying to initialize it again THEN transaction fails with AlreadyInitialized", async () => { + await expect( + sustainabilityPerformanceTargetRateFacet.initialize_SustainabilityPerformanceTargetRate( + { + baseRate: 50, + startPeriod: 1000, + startRate: 50, + rateDecimals: 1, + }, + [ + { + baseLine: 750, + baseLineMode: 0, + deltaRate: 10, + impactDataMode: 0, + }, + ], + [project1], + ), + ).to.be.rejectedWith("AlreadyInitialized"); + }); + + it("GIVEN mismatched array lengths WHEN initializing THEN transaction fails with ProvidedListsLengthMismatch", async () => { + // Deploy infrastructure to get BLR + const infrastructure = await deployAtsInfrastructureFixture(); + const { blr } = infrastructure; + + // Deploy a raw ResolverProxy without initialization + const ResolverProxyFactory = await ethers.getContractFactory("ResolverProxy"); + const uninitializedDiamond = await ResolverProxyFactory.deploy( + blr.address, + BOND_SUSTAINABILITY_PERFORMANCE_TARGET_RATE_CONFIG_ID, + 1, + [ + { + role: ATS_ROLES._DEFAULT_ADMIN_ROLE, + members: [signer_A.address], + }, + ], + ); + await uninitializedDiamond.deployed(); + + // Get facets for the uninitialized diamond + const uninitializedAccessControl = await ethers.getContractAt( + "AccessControlFacet", + uninitializedDiamond.address, + signer_A, + ); + + // Set up roles + await executeRbac(uninitializedAccessControl, [ + { + role: ATS_ROLES._PROCEED_RECIPIENT_MANAGER_ROLE, + members: [signer_A.address], + }, + ]); + + const uninitializedProceedFacet = await ethers.getContractAt( + "ProceedRecipientsFacet", + uninitializedDiamond.address, + signer_A, + ); + + // Add proceed recipients + await uninitializedProceedFacet.connect(signer_A).addProceedRecipient(project1, "0x"); + + const uninitializedFacet = await ethers.getContractAt( + "SustainabilityPerformanceTargetRateFacet", + uninitializedDiamond.address, + signer_A, + ); + + // Try to initialize with mismatched arrays (2 impact data, 1 project) + await expect( + uninitializedFacet.initialize_SustainabilityPerformanceTargetRate( + { + baseRate: 50, + startPeriod: 1000, + startRate: 50, + rateDecimals: 1, + }, + [ + { + baseLine: 750, + baseLineMode: 0, + deltaRate: 10, + impactDataMode: 0, + }, + { + baseLine: 800, + baseLineMode: 1, + deltaRate: 15, + impactDataMode: 1, + }, + ], + [project1], // Only one project but two impact data entries + ), + ).to.be.rejectedWith("ProvidedListsLengthMismatch"); + }); + + describe("Paused", () => { + beforeEach(async () => { + // Pausing the token + await pauseFacet.connect(signer_B).pause(); + }); + + it("GIVEN a paused Token WHEN setInterestRate THEN transaction fails with TokenIsPaused", async () => { + await expect( + sustainabilityPerformanceTargetRateFacet.connect(signer_A).setInterestRate({ + baseRate: 60, + startPeriod: 2000, + startRate: 60, + rateDecimals: 2, + }), + ).to.be.rejectedWith("TokenIsPaused"); + }); + + it("GIVEN a paused Token WHEN setImpactData THEN transaction fails with TokenIsPaused", async () => { + await expect( + sustainabilityPerformanceTargetRateFacet.connect(signer_A).setImpactData( + [ + { + baseLine: 800, + baseLineMode: 0, + deltaRate: 15, + impactDataMode: 0, + }, + ], + [project1], + ), + ).to.be.rejectedWith("TokenIsPaused"); + }); + }); + + describe("AccessControl", () => { + it("GIVEN an account without interest rate manager role WHEN setInterestRate THEN transaction fails with AccountHasNoRole", async () => { + await expect( + sustainabilityPerformanceTargetRateFacet.connect(signer_C).setInterestRate({ + baseRate: 60, + startPeriod: 2000, + startRate: 60, + rateDecimals: 2, + }), + ).to.be.rejectedWith("AccountHasNoRole"); + }); + + it("GIVEN an account without interest rate manager role WHEN setImpactData THEN transaction fails with AccountHasNoRole", async () => { + await expect( + sustainabilityPerformanceTargetRateFacet.connect(signer_C).setImpactData( + [ + { + baseLine: 800, + baseLineMode: 0, + deltaRate: 15, + impactDataMode: 0, + }, + ], + [project1], + ), + ).to.be.rejectedWith("AccountHasNoRole"); + }); + }); + + describe("Interest Rate", () => { + it("GIVEN correct interest rate WHEN setInterestRate THEN transaction succeeds", async () => { + const newInterestRate = { + baseRate: DEFAULT_BOND_SUSTAINABILITY_PERFORMANCE_TARGET_RATE_PARAMS.baseRate + 10, + startPeriod: DEFAULT_BOND_SUSTAINABILITY_PERFORMANCE_TARGET_RATE_PARAMS.startPeriod + 1000, + startRate: DEFAULT_BOND_SUSTAINABILITY_PERFORMANCE_TARGET_RATE_PARAMS.startRate + 10, + rateDecimals: DEFAULT_BOND_SUSTAINABILITY_PERFORMANCE_TARGET_RATE_PARAMS.rateDecimals + 1, + }; + + await expect(sustainabilityPerformanceTargetRateFacet.connect(signer_A).setInterestRate(newInterestRate)) + .to.emit(sustainabilityPerformanceTargetRateFacet, "InterestRateUpdated") + .withArgs(signer_A.address, [ + newInterestRate.baseRate, + newInterestRate.startPeriod, + newInterestRate.startRate, + newInterestRate.rateDecimals, + ]); + + const interestRate = await sustainabilityPerformanceTargetRateFacet.getInterestRate(); + + expect(interestRate.baseRate).to.equal(newInterestRate.baseRate); + expect(interestRate.startPeriod).to.equal(newInterestRate.startPeriod); + expect(interestRate.startRate).to.equal(newInterestRate.startRate); + expect(interestRate.rateDecimals).to.equal(newInterestRate.rateDecimals); + }); + }); + + describe("Impact Data", () => { + it("GIVEN mismatched array lengths WHEN setImpactData THEN transaction fails with ProvidedListsLengthMismatch", async () => { + await expect( + sustainabilityPerformanceTargetRateFacet.connect(signer_A).setImpactData( + [ + { + baseLine: 800, + baseLineMode: 0, + deltaRate: 15, + impactDataMode: 0, + }, + { + baseLine: 900, + baseLineMode: 1, + deltaRate: 20, + impactDataMode: 1, + }, + ], + [project1], // Only one project but two impact data entries + ), + ).to.be.rejectedWith("ProvidedListsLengthMismatch"); + }); + + it("GIVEN non-existing project WHEN setImpactData THEN transaction fails with NotExistingProject", async () => { + const nonExistingProject = "0x0000000000000000000000000000000000000099"; + + await expect( + sustainabilityPerformanceTargetRateFacet.connect(signer_A).setImpactData( + [ + { + baseLine: 800, + baseLineMode: 0, + deltaRate: 15, + impactDataMode: 0, + }, + ], + [nonExistingProject], + ), + ).to.be.rejectedWith("NotExistingProject"); + }); + + it("GIVEN correct impact data for existing project WHEN setImpactData THEN transaction succeeds", async () => { + const newImpactData = [ + { + baseLine: DEFAULT_BOND_SUSTAINABILITY_PERFORMANCE_TARGET_RATE_PARAMS.baseLine + 100, + baseLineMode: 1, // MAXIMUM + deltaRate: DEFAULT_BOND_SUSTAINABILITY_PERFORMANCE_TARGET_RATE_PARAMS.deltaRate + 5, + impactDataMode: 1, // BONUS + }, + ]; + + const tx = await sustainabilityPerformanceTargetRateFacet + .connect(signer_A) + .setImpactData(newImpactData, [project1]); + + const receipt = await tx.wait(); + + const event = receipt.events!.find((e) => e.event === "ImpactDataUpdated")!; + + const decoded = event.args!.newImpactData[0]; + const operator = event.args!.operator; + const projects = event.args!.projects; + + expect(operator).to.equal(signer_A.address); + expect(projects[0]).to.equal(project1); + + expect(decoded.baseLine).to.equal(newImpactData[0].baseLine); + expect(decoded.baseLineMode).to.equal(newImpactData[0].baseLineMode); + expect(decoded.deltaRate).to.equal(newImpactData[0].deltaRate); + expect(decoded.impactDataMode).to.equal(newImpactData[0].impactDataMode); + + const impactData = await sustainabilityPerformanceTargetRateFacet.getImpactDataFor(project1); + + expect(impactData.baseLine).to.equal(newImpactData[0].baseLine); + expect(impactData.baseLineMode).to.equal(newImpactData[0].baseLineMode); + expect(impactData.deltaRate).to.equal(newImpactData[0].deltaRate); + expect(impactData.impactDataMode).to.equal(newImpactData[0].impactDataMode); + }); + + it("GIVEN multiple projects WHEN setImpactData THEN transaction succeeds for all", async () => { + const newImpactData = [ + { + baseLine: 800, + baseLineMode: 0, // MINIMUM + deltaRate: 15, + impactDataMode: 0, // PENALTY + }, + { + baseLine: 900, + baseLineMode: 1, // MAXIMUM + deltaRate: 20, + impactDataMode: 1, // BONUS + }, + ]; + + const tx = await sustainabilityPerformanceTargetRateFacet + .connect(signer_A) + .setImpactData(newImpactData, [project1, project2]); + + const receipt = await tx.wait(); + + const event = receipt.events!.find((e) => e.event === "ImpactDataUpdated")!; + + const decoded_0 = event.args!.newImpactData[0]; + const decoded_1 = event.args!.newImpactData[1]; + const operator = event.args!.operator; + const projects = event.args!.projects; + + expect(operator).to.equal(signer_A.address); + expect(projects[0]).to.equal(project1); + expect(projects[1]).to.equal(project2); + + expect(decoded_0.baseLine).to.equal(newImpactData[0].baseLine); + expect(decoded_0.baseLineMode).to.equal(newImpactData[0].baseLineMode); + expect(decoded_0.deltaRate).to.equal(newImpactData[0].deltaRate); + expect(decoded_0.impactDataMode).to.equal(newImpactData[0].impactDataMode); + + expect(decoded_1.baseLine).to.equal(newImpactData[1].baseLine); + expect(decoded_1.baseLineMode).to.equal(newImpactData[1].baseLineMode); + expect(decoded_1.deltaRate).to.equal(newImpactData[1].deltaRate); + expect(decoded_1.impactDataMode).to.equal(newImpactData[1].impactDataMode); + + const impactData1 = await sustainabilityPerformanceTargetRateFacet.getImpactDataFor(project1); + expect(impactData1.baseLine).to.equal(newImpactData[0].baseLine); + expect(impactData1.baseLineMode).to.equal(newImpactData[0].baseLineMode); + expect(impactData1.deltaRate).to.equal(newImpactData[0].deltaRate); + expect(impactData1.impactDataMode).to.equal(newImpactData[0].impactDataMode); + + const impactData2 = await sustainabilityPerformanceTargetRateFacet.getImpactDataFor(project2); + expect(impactData2.baseLine).to.equal(newImpactData[1].baseLine); + expect(impactData2.baseLineMode).to.equal(newImpactData[1].baseLineMode); + expect(impactData2.deltaRate).to.equal(newImpactData[1].deltaRate); + expect(impactData2.impactDataMode).to.equal(newImpactData[1].impactDataMode); + }); + }); +}); diff --git a/packages/ats/contracts/test/contracts/unit/layer_1/kpi/kpiLatest/kpiLatest.test.ts b/packages/ats/contracts/test/contracts/unit/layer_1/kpi/kpiLatest/kpiLatest.test.ts new file mode 100644 index 000000000..c9a1e531b --- /dev/null +++ b/packages/ats/contracts/test/contracts/unit/layer_1/kpi/kpiLatest/kpiLatest.test.ts @@ -0,0 +1,257 @@ +import { expect } from "chai"; +import { ethers } from "hardhat"; +import { SignerWithAddress } from "@nomiclabs/hardhat-ethers/signers.js"; +import { KpisFacetBase, PauseFacet, ProceedRecipientsFacet, type ResolverProxy } from "@contract-types"; +import { ATS_ROLES } from "@scripts"; +import { loadFixture } from "@nomicfoundation/hardhat-network-helpers"; +import { deployBondSustainabilityPerformanceTargetRateTokenFixture } from "@test"; +import { executeRbac } from "@test"; + +describe("Kpi Latest Tests", () => { + let diamond: ResolverProxy; + let signer_A: SignerWithAddress; + let signer_B: SignerWithAddress; + let signer_C: SignerWithAddress; + let project1: string; + let project2: string; + + let kpiFacet: KpisFacetBase; + let pauseFacet: PauseFacet; + let proceedRecipientsFacet: ProceedRecipientsFacet; + + async function deploySecurityFixtureMultiPartition() { + const base = await deployBondSustainabilityPerformanceTargetRateTokenFixture(); + diamond = base.diamond; + signer_A = base.deployer; + signer_B = base.user2; + signer_C = base.user3; + + // Set up projects + project1 = signer_A.address; + project2 = signer_B.address; + + await executeRbac(base.accessControlFacet, [ + { + role: ATS_ROLES._PAUSER_ROLE, + members: [signer_B.address], + }, + { + role: ATS_ROLES._INTEREST_RATE_MANAGER_ROLE, + members: [signer_A.address], + }, + { + role: ATS_ROLES._PROCEED_RECIPIENT_MANAGER_ROLE, + members: [signer_A.address], + }, + { + role: ATS_ROLES._KPI_MANAGER_ROLE, + members: [signer_A.address], + }, + ]); + + kpiFacet = await ethers.getContractAt("KpisFacetBase", diamond.address, signer_A); + pauseFacet = await ethers.getContractAt("PauseFacet", diamond.address, signer_A); + proceedRecipientsFacet = await ethers.getContractAt("ProceedRecipientsFacet", diamond.address, signer_A); + + await proceedRecipientsFacet.connect(signer_A).addProceedRecipient(project1, "0x"); + await proceedRecipientsFacet.connect(signer_A).addProceedRecipient(project2, "0x"); + } + + beforeEach(async () => { + await loadFixture(deploySecurityFixtureMultiPartition); + }); + + describe("addKpiData", () => { + it("GIVEN a valid date, value and project WHEN addKpiData is called THEN KPI data is added successfully", async () => { + const date = 1000; + const value = 750; + + await expect(kpiFacet.connect(signer_A).addKpiData(date, value, project1)) + .to.emit(kpiFacet, "KpiDataAdded") + .withArgs(project1, date, value); + + const isCheckpoint = await kpiFacet.isCheckPointDate(date, project1); + expect(isCheckpoint).to.be.true; + }); + + it("GIVEN multiple KPI data entries WHEN addKpiData is called in order THEN all entries are stored correctly", async () => { + const date1 = 1000; + const value1 = 750; + const date2 = 2000; + const value2 = 850; + const date3 = 3000; + const value3 = 950; + + await kpiFacet.connect(signer_A).addKpiData(date1, value1, project1); + await kpiFacet.connect(signer_A).addKpiData(date2, value2, project1); + await kpiFacet.connect(signer_A).addKpiData(date3, value3, project1); + + expect(await kpiFacet.isCheckPointDate(date1, project1)).to.be.true; + expect(await kpiFacet.isCheckPointDate(date2, project1)).to.be.true; + expect(await kpiFacet.isCheckPointDate(date3, project1)).to.be.true; + }); + + it("GIVEN KPI data entries WHEN addKpiData is called out of order THEN entries are stored correctly", async () => { + const date1 = 1000; + const value1 = 750; + const date2 = 3000; + const value2 = 950; + const date3 = 2000; + const value3 = 850; + + await kpiFacet.connect(signer_A).addKpiData(date1, value1, project1); + await kpiFacet.connect(signer_A).addKpiData(date2, value2, project1); + await kpiFacet.connect(signer_A).addKpiData(date3, value3, project1); + + expect(await kpiFacet.isCheckPointDate(date1, project1)).to.be.true; + expect(await kpiFacet.isCheckPointDate(date2, project1)).to.be.true; + expect(await kpiFacet.isCheckPointDate(date3, project1)).to.be.true; + }); + + it("GIVEN different projects WHEN addKpiData is called THEN data is stored separately", async () => { + const date = 1000; + const value1 = 750; + const value2 = 850; + + await kpiFacet.connect(signer_A).addKpiData(date, value1, project1); + await kpiFacet.connect(signer_A).addKpiData(date, value2, project2); + + expect(await kpiFacet.isCheckPointDate(date, project1)).to.be.true; + expect(await kpiFacet.isCheckPointDate(date, project2)).to.be.true; + }); + + it("GIVEN a user without KPI_MANAGER_ROLE WHEN addKpiData is called THEN transaction fails", async () => { + const date = 1000; + const value = 750; + + await expect(kpiFacet.connect(signer_C).addKpiData(date, value, project1)).to.be.rejectedWith("AccountHasNoRole"); + }); + + it("GIVEN a paused contract WHEN addKpiData is called THEN transaction fails with TokenIsPaused", async () => { + await pauseFacet.connect(signer_B).pause(); + + const date = 1000; + const value = 750; + + await expect(kpiFacet.connect(signer_A).addKpiData(date, value, project1)).to.be.rejectedWith("TokenIsPaused"); + }); + + it("GIVEN an already used date WHEN addKpiData is called THEN transaction reverts", async () => { + const date = 1000; + const value1 = 750; + const value2 = 850; + + await kpiFacet.connect(signer_A).addKpiData(date, value1, project1); + + // Try to add data for the same date again - should fail due to assert in _addKpiData + await expect(kpiFacet.connect(signer_A).addKpiData(date, value2, project1)).to.be.reverted; + }); + + it("GIVEN a date before minDate WHEN addKpiData is called THEN transaction fails", async () => { + const invalidDate = 0; + const value = 750; + + await expect(kpiFacet.connect(signer_A).addKpiData(invalidDate, value, project1)).to.be.revertedWithCustomError( + kpiFacet, + "InvalidDate", + ); + }); + }); + + describe("getLatestKpiData", () => { + async function addKpiDataFixture() { + await kpiFacet.connect(signer_A).addKpiData(1000, 750, project1); + await kpiFacet.connect(signer_A).addKpiData(2000, 850, project1); + await kpiFacet.connect(signer_A).addKpiData(3000, 950, project1); + } + beforeEach(async () => { + await loadFixture(addKpiDataFixture); + }); + + it("GIVEN KPI data exists WHEN getLatestKpiData is called with valid range THEN returns latest value", async () => { + const result = await kpiFacet.getLatestKpiData(500, 2500, project1); + expect(result.exists_).to.be.true; + expect(result.value_).to.equal(850); + }); + + it("GIVEN KPI data exists WHEN getLatestKpiData is called with exact date THEN returns correct value", async () => { + const result = await kpiFacet.getLatestKpiData(500, 3000, project1); + expect(result.exists_).to.be.true; + expect(result.value_).to.equal(950); + }); + + it("GIVEN no KPI data in range WHEN getLatestKpiData is called THEN returns exists false", async () => { + const result = await kpiFacet.getLatestKpiData(3500, 4000, project1); + expect(result.exists_).to.be.false; + expect(result.value_).to.equal(0); + }); + + it("GIVEN from date after checkpoint WHEN getLatestKpiData is called THEN returns exists false", async () => { + const result = await kpiFacet.getLatestKpiData(3500, 4000, project1); + expect(result.exists_).to.be.false; + expect(result.value_).to.equal(0); + }); + + it("GIVEN different projects WHEN getLatestKpiData is called THEN returns project-specific data", async () => { + await kpiFacet.connect(signer_A).addKpiData(1500, 800, project2); + + const result1 = await kpiFacet.getLatestKpiData(500, 2500, project1); + const result2 = await kpiFacet.getLatestKpiData(500, 2500, project2); + + expect(result1.exists_).to.be.true; + expect(result1.value_).to.equal(850); + expect(result2.exists_).to.be.true; + expect(result2.value_).to.equal(800); + }); + + it("GIVEN no KPI data for project WHEN getLatestKpiData is called THEN returns exists false", async () => { + const result = await kpiFacet.getLatestKpiData(500, 2500, project2); + expect(result.exists_).to.be.false; + expect(result.value_).to.equal(0); + }); + }); + + describe("getMinDate", () => { + it("GIVEN a contract WHEN getMinDate is called THEN returns the minimum date", async () => { + const minDate = await kpiFacet.getMinDate(); + expect(minDate.toNumber()).to.be.equal(0); + }); + }); + + describe("isCheckPointDate", () => { + it("GIVEN no KPI data WHEN isCheckPointDate is called THEN returns false", async () => { + const date = 1000; + const isCheckpoint = await kpiFacet.isCheckPointDate(date, project1); + expect(isCheckpoint).to.be.false; + }); + + it("GIVEN KPI data exists at date WHEN isCheckPointDate is called THEN returns true", async () => { + const date = 1000; + await kpiFacet.connect(signer_A).addKpiData(date, 750, project1); + + const isCheckpoint = await kpiFacet.isCheckPointDate(date, project1); + expect(isCheckpoint).to.be.true; + }); + + it("GIVEN KPI data for different project WHEN isCheckPointDate is called THEN returns false", async () => { + const date = 1000; + await kpiFacet.connect(signer_A).addKpiData(date, 750, project1); + + const isCheckpoint = await kpiFacet.isCheckPointDate(date, project2); + expect(isCheckpoint).to.be.false; + }); + + it("GIVEN multiple checkpoints WHEN isCheckPointDate is called THEN returns correct values", async () => { + const date1 = 1000; + const date2 = 2000; + const date3 = 3000; + + await kpiFacet.connect(signer_A).addKpiData(date1, 750, project1); + await kpiFacet.connect(signer_A).addKpiData(date2, 850, project1); + + expect(await kpiFacet.isCheckPointDate(date1, project1)).to.be.true; + expect(await kpiFacet.isCheckPointDate(date2, project1)).to.be.true; + expect(await kpiFacet.isCheckPointDate(date3, project1)).to.be.false; + }); + }); +}); diff --git a/packages/ats/contracts/test/contracts/unit/layer_1/kyc/kyc.test.ts b/packages/ats/contracts/test/contracts/unit/layer_1/kyc/kyc.test.ts index ea23b7d53..e66e5653a 100644 --- a/packages/ats/contracts/test/contracts/unit/layer_1/kyc/kyc.test.ts +++ b/packages/ats/contracts/test/contracts/unit/layer_1/kyc/kyc.test.ts @@ -7,10 +7,10 @@ import { executeRbac } from "@test"; import { ATS_ROLES, ADDRESS_ZERO } from "@scripts"; import { ResolverProxy, - Kyc, - Pause, - SsiManagement, - ExternalKycListManagement, + KycFacet, + PauseFacet, + SsiManagementFacet, + ExternalKycListManagementFacet, MockedT3RevocationRegistry, MockedExternalKycList, TimeTravelFacet, @@ -27,10 +27,10 @@ describe("Kyc Tests", () => { let signer_C: SignerWithAddress; let signer_D: SignerWithAddress; - let kycFacet: Kyc; - let pauseFacet: Pause; - let ssiManagementFacet: SsiManagement; - let externalKycListManagement: ExternalKycListManagement; + let kycFacet: KycFacet; + let pauseFacet: PauseFacet; + let ssiManagementFacet: SsiManagementFacet; + let externalKycListManagement: ExternalKycListManagementFacet; let revocationList: MockedT3RevocationRegistry; let externalKycListMock: MockedExternalKycList; let timeTravelFacet: TimeTravelFacet; @@ -67,10 +67,10 @@ describe("Kyc Tests", () => { members: [signer_C.address], }, ]); - kycFacet = await ethers.getContractAt("Kyc", diamond.address, signer_A); - externalKycListManagement = await ethers.getContractAt("ExternalKycListManagement", diamond.address, signer_A); - pauseFacet = await ethers.getContractAt("Pause", diamond.address, signer_A); - ssiManagementFacet = await ethers.getContractAt("SsiManagement", diamond.address, signer_C); + kycFacet = await ethers.getContractAt("KycFacet", diamond.address, signer_A); + externalKycListManagement = await ethers.getContractAt("ExternalKycListManagementFacet", diamond.address, signer_A); + pauseFacet = await ethers.getContractAt("PauseFacet", diamond.address, signer_A); + ssiManagementFacet = await ethers.getContractAt("SsiManagementFacet", diamond.address, signer_C); timeTravelFacet = await ethers.getContractAt("TimeTravelFacet", diamond.address, signer_A); revocationList = await (await ethers.getContractFactory("MockedT3RevocationRegistry", signer_C)).deploy(); @@ -345,5 +345,19 @@ describe("Kyc Tests", () => { .withArgs(signer_A.address, true); expect(await kycFacet.isInternalKycActivated()).to.be.true; }); + + it("GIVEN a paused Token WHEN activateInternalKyc THEN transaction fails with TokenIsPaused", async () => { + await pauseFacet.pause(); + await expect(kycFacet.activateInternalKyc()).to.be.revertedWithCustomError(kycFacet, "TokenIsPaused"); + }); + + it("GIVEN a paused Token WHEN deactivateInternalKyc THEN transaction fails with TokenIsPaused", async () => { + await pauseFacet.pause(); + await expect(kycFacet.deactivateInternalKyc()).to.be.revertedWithCustomError(kycFacet, "TokenIsPaused"); + }); + + it("GIVEN a VC already initialized WHEN initializeInternalKyc called twice THEN transaction fails with AlreadyInitialized", async () => { + await expect(kycFacet.initializeInternalKyc(true)).to.be.revertedWithCustomError(kycFacet, "AlreadyInitialized"); + }); }); }); diff --git a/packages/ats/contracts/test/contracts/unit/layer_1/lock/lock.test.ts b/packages/ats/contracts/test/contracts/unit/layer_1/lock/lock.test.ts index 9e68c5d8b..66bba2eb1 100644 --- a/packages/ats/contracts/test/contracts/unit/layer_1/lock/lock.test.ts +++ b/packages/ats/contracts/test/contracts/unit/layer_1/lock/lock.test.ts @@ -4,17 +4,17 @@ import { SignerWithAddress } from "@nomiclabs/hardhat-ethers/signers.js"; import { loadFixture } from "@nomicfoundation/hardhat-network-helpers"; import { type ResolverProxy, - type Lock, + type LockFacet, type IERC1410, - Pause, - Kyc, - SsiManagement, - AdjustBalances, + PauseFacet, + KycFacet, + SsiManagementFacet, + AdjustBalancesFacet, AccessControl, Cap, Equity, TimeTravelFacet, - Snapshots, + SnapshotsFacet, } from "@contract-types"; import { deployEquityTokenFixture } from "@test"; @@ -45,13 +45,13 @@ describe("Lock Tests", () => { let signer_C: SignerWithAddress; let signer_D: SignerWithAddress; - let lockFacet: Lock; - let pauseFacet: Pause; + let lockFacet: LockFacet; + let pauseFacet: PauseFacet; let erc1410Facet: IERC1410; - let snapshotFacet: Snapshots; - let kycFacet: Kyc; - let ssiManagementFacet: SsiManagement; - let adjustBalancesFacet: AdjustBalances; + let snapshotFacet: SnapshotsFacet; + let kycFacet: KycFacet; + let ssiManagementFacet: SsiManagementFacet; + let adjustBalancesFacet: AdjustBalancesFacet; let accessControlFacet: AccessControl; let capFacet: Cap; let equityFacet: Equity; @@ -90,16 +90,16 @@ describe("Lock Tests", () => { } async function setFacets({ diamond }: { diamond: ResolverProxy }) { - lockFacet = await ethers.getContractAt("Lock", diamond.address, signer_C); - pauseFacet = await ethers.getContractAt("Pause", diamond.address, signer_D); + lockFacet = await ethers.getContractAt("LockFacet", diamond.address, signer_C); + pauseFacet = await ethers.getContractAt("PauseFacet", diamond.address, signer_D); erc1410Facet = await ethers.getContractAt("IERC1410", diamond.address, signer_B); - kycFacet = await ethers.getContractAt("Kyc", diamond.address, signer_B); - ssiManagementFacet = await ethers.getContractAt("SsiManagement", diamond.address, signer_A); + kycFacet = await ethers.getContractAt("KycFacet", diamond.address, signer_B); + ssiManagementFacet = await ethers.getContractAt("SsiManagementFacet", diamond.address, signer_A); equityFacet = await ethers.getContractAt("Equity", diamond.address, signer_A); timeTravelFacet = await ethers.getContractAt("TimeTravelFacet", diamond.address, signer_A); - adjustBalancesFacet = await ethers.getContractAt("AdjustBalances", diamond.address, signer_A); + adjustBalancesFacet = await ethers.getContractAt("AdjustBalancesFacet", diamond.address, signer_A); capFacet = await ethers.getContractAt("Cap", diamond.address, signer_A); - snapshotFacet = await ethers.getContractAt("Snapshots", diamond.address); + snapshotFacet = await ethers.getContractAt("SnapshotsFacet", diamond.address); accessControlFacet = await ethers.getContractAt("AccessControl", diamond.address, signer_A); diff --git a/packages/ats/contracts/test/contracts/unit/layer_1/nonces/nonces.test.ts b/packages/ats/contracts/test/contracts/unit/layer_1/nonces/nonces.test.ts new file mode 100644 index 000000000..1a2ef042b --- /dev/null +++ b/packages/ats/contracts/test/contracts/unit/layer_1/nonces/nonces.test.ts @@ -0,0 +1,27 @@ +import { expect } from "chai"; +import { ethers } from "hardhat"; +import { SignerWithAddress } from "@nomiclabs/hardhat-ethers/signers.js"; +import { type ResolverProxy, NoncesFacet } from "@contract-types"; +import { deployEquityTokenFixture } from "@test"; + +describe("Nonces Tests", () => { + let diamond: ResolverProxy; + let signer_A: SignerWithAddress; + + let noncesFacet: NoncesFacet; + + beforeEach(async () => { + const base = await deployEquityTokenFixture(); + diamond = base.diamond; + signer_A = base.deployer; + + noncesFacet = await ethers.getContractAt("NoncesFacet", diamond.address); + }); + + describe("Nonces", () => { + it("GIVEN any account WHEN nonces is called THEN the current nonce for that account is returned", async () => { + const nonces = await noncesFacet.nonces(signer_A.address); + expect(nonces).to.equal(0); + }); + }); +}); diff --git a/packages/ats/contracts/test/contracts/unit/layer_1/proceedRecipients/proceedRecipients.test.ts b/packages/ats/contracts/test/contracts/unit/layer_1/proceedRecipients/proceedRecipients.test.ts index 267234df6..3a5290eeb 100644 --- a/packages/ats/contracts/test/contracts/unit/layer_1/proceedRecipients/proceedRecipients.test.ts +++ b/packages/ats/contracts/test/contracts/unit/layer_1/proceedRecipients/proceedRecipients.test.ts @@ -1,8 +1,8 @@ import { expect } from "chai"; import { ethers } from "hardhat"; import { SignerWithAddress } from "@nomiclabs/hardhat-ethers/signers.js"; -import { ProceedRecipients, ResolverProxy, AccessControl, Pause } from "@contract-types"; -import { GAS_LIMIT, ATS_ROLES } from "@scripts"; +import { ProceedRecipientsFacet, ResolverProxy, AccessControl, PauseFacet } from "@contract-types"; +import { GAS_LIMIT, ATS_ROLES, ADDRESS_ZERO } from "@scripts"; import { deployBondTokenFixture } from "@test"; import { loadFixture } from "@nomicfoundation/hardhat-network-helpers"; @@ -16,9 +16,9 @@ describe("Proceed Recipients Tests", () => { let signer_B: SignerWithAddress; let diamond: ResolverProxy; - let proceedRecipientsFacet: ProceedRecipients; + let proceedRecipientsFacet: ProceedRecipientsFacet; let accessControlFacet: AccessControl; - let pauseFacet: Pause; + let pauseFacet: PauseFacet; async function deploySecurityFixtureR() { const base = await deployBondTokenFixture({ @@ -32,10 +32,10 @@ describe("Proceed Recipients Tests", () => { signer_A = base.deployer; signer_B = base.user2; - proceedRecipientsFacet = await ethers.getContractAt("ProceedRecipients", diamond.address, signer_A); + proceedRecipientsFacet = await ethers.getContractAt("ProceedRecipientsFacet", diamond.address, signer_A); accessControlFacet = await ethers.getContractAt("AccessControlFacet", diamond.address, signer_A); - pauseFacet = await ethers.getContractAt("Pause", diamond.address, signer_A); + pauseFacet = await ethers.getContractAt("PauseFacet", diamond.address, signer_A); await accessControlFacet.grantRole(ATS_ROLES._PROCEED_RECIPIENT_MANAGER_ROLE, signer_A.address); @@ -105,6 +105,14 @@ describe("Proceed Recipients Tests", () => { PROCEED_RECIPIENT_1, ]); }); + + it("GIVEN an invalid address WHEN adding it THEN it reverts with ZeroAddressNotAllowed", async () => { + await expect( + proceedRecipientsFacet.addProceedRecipient(ADDRESS_ZERO, PROCEED_RECIPIENT_1_DATA, { + gasLimit: GAS_LIMIT.default, + }), + ).to.be.revertedWithCustomError(proceedRecipientsFacet, "ZeroAddressNotAllowed"); + }); }); describe("Remove Tests", () => { @@ -151,6 +159,14 @@ describe("Proceed Recipients Tests", () => { }); describe("Update Data Tests", () => { + it("GIVEN invalid address WHEN updated THEN it reverts with ZeroAddressNotAllowed", async () => { + await expect( + proceedRecipientsFacet.updateProceedRecipientData(ADDRESS_ZERO, "0x", { + gasLimit: GAS_LIMIT.high, + }), + ).to.be.revertedWithCustomError(proceedRecipientsFacet, "ZeroAddressNotAllowed"); + }); + it("GIVEN a listed proceed recipient WHEN unauthorized user updates its data THEN it reverts with AccountHasNoRole", async () => { await expect( proceedRecipientsFacet diff --git a/packages/ats/contracts/test/contracts/unit/layer_1/protectedPartitions/protectedPartitions.test.ts b/packages/ats/contracts/test/contracts/unit/layer_1/protectedPartitions/protectedPartitions.test.ts index 257794cfe..4a86a4c9a 100644 --- a/packages/ats/contracts/test/contracts/unit/layer_1/protectedPartitions/protectedPartitions.test.ts +++ b/packages/ats/contracts/test/contracts/unit/layer_1/protectedPartitions/protectedPartitions.test.ts @@ -3,18 +3,18 @@ import { ethers, network } from "hardhat"; import { SignerWithAddress } from "@nomiclabs/hardhat-ethers/signers.js"; import { type ResolverProxy, - type Pause, - AccessControl, - ProtectedPartitions, + type PauseFacet, + type AccessControl, + type ProtectedPartitionsFacet, type IERC1410, - ERC1594, - TransferAndLock, - ERC20, - ControlList, - Kyc, - SsiManagement, - IHold, + type ERC1594Facet, + type TransferAndLockFacet, + type ERC20Facet, + type KycFacet, + type SsiManagementFacet, + type IHold, ComplianceMock, + DiamondCutFacet, } from "@contract-types"; import { DEFAULT_PARTITION, ZERO, EMPTY_STRING, ADDRESS_ZERO, ATS_ROLES } from "@scripts"; import { Contract } from "ethers"; @@ -33,8 +33,8 @@ const packedDataWithoutPrefix = packedData.slice(2); const ProtectedPartitionRole_1 = ethers.utils.keccak256("0x" + packedDataWithoutPrefix); const domain = { - name: "ProtectedPartitions", - version: "1.0.0", + name: "", + version: "", chainId: 1, verifyingContract: "", }; @@ -50,15 +50,6 @@ const transferType = { ], }; -const redeemType = { - protectedRedeemFromByPartition: [ - { name: "_partition", type: "bytes32" }, - { name: "_from", type: "address" }, - { name: "_amount", type: "uint256" }, - { name: "_deadline", type: "uint256" }, - { name: "_nounce", type: "uint256" }, - ], -}; const EMPTY_VC_ID = EMPTY_STRING; const holdType = { @@ -209,16 +200,15 @@ describe("ProtectedPartitions Tests", () => { let signer_B: SignerWithAddress; let signer_C: SignerWithAddress; - let protectedPartitionsFacet: ProtectedPartitions; - let pauseFacet: Pause; + let protectedPartitionsFacet: ProtectedPartitionsFacet; + let pauseFacet: PauseFacet; let erc1410Facet: IERC1410; - let erc1594Facet: ERC1594; - let erc20Facet: ERC20; - let transferAndLockFacet: TransferAndLock; - let controlListFacet: ControlList; + let erc1594Facet: ERC1594Facet; + let erc20Facet: ERC20Facet; + let transferAndLockFacet: TransferAndLockFacet; let accessControlFacet: AccessControl; - let kycFacet: Kyc; - let ssiManagementFacet: SsiManagement; + let kycFacet: KycFacet; + let ssiManagementFacet: SsiManagementFacet; let holdFacet: IHold; let clearingFacet: Contract; let protectedHold: ProtectedHoldData; @@ -228,6 +218,7 @@ describe("ProtectedPartitions Tests", () => { let protectedClearingOperation: ProtectedClearingOperationData; let complianceMock: ComplianceMock; let complianceMockAddress: string; + let diamondCutFacet: DiamondCutFacet; async function grant_WILD_CARD_ROLE_and_issue_tokens( wildCard_Account: string, @@ -249,17 +240,38 @@ describe("ProtectedPartitions Tests", () => { } async function setFacets(address: string, compliance?: string) { - protectedPartitionsFacet = await ethers.getContractAt("ProtectedPartitions", address); - pauseFacet = await ethers.getContractAt("Pause", address); + const holdManagementFacet = await ethers.getContractAt("HoldManagementFacet", address, signer_A); + + const holdReadFacet = await ethers.getContractAt("HoldReadFacet", address, signer_A); + const holdTokenHolderFacet = await ethers.getContractAt("HoldTokenHolderFacet", address, signer_A); + + const fragmentMapHold = new Map(); + [ + ...holdManagementFacet.interface.fragments, + ...holdReadFacet.interface.fragments, + ...holdTokenHolderFacet.interface.fragments, + ].forEach((fragment) => { + const key = fragment.format(); + if (!fragmentMapHold.has(key)) { + fragmentMapHold.set(key, fragment); + } + }); + + const uniqueFragmentsHold = Array.from(fragmentMapHold.values()); + + holdFacet = new Contract(address, uniqueFragmentsHold, signer_A) as IHold; + + protectedPartitionsFacet = await ethers.getContractAt("ProtectedPartitionsFacet", address); + pauseFacet = await ethers.getContractAt("PauseFacet", address); erc1410Facet = await ethers.getContractAt("IERC1410", address); - erc1594Facet = await ethers.getContractAt("ERC1594", address); - erc20Facet = await ethers.getContractAt("ERC20", address); - transferAndLockFacet = await ethers.getContractAt("TransferAndLock", address); - controlListFacet = await ethers.getContractAt("ControlList", address); + erc1594Facet = await ethers.getContractAt("ERC1594Facet", address); + erc20Facet = await ethers.getContractAt("ERC20Facet", address); + transferAndLockFacet = await ethers.getContractAt("TransferAndLockFacet", address); accessControlFacet = await ethers.getContractAt("AccessControl", address); - holdFacet = await ethers.getContractAt("IHold", address); - kycFacet = await ethers.getContractAt("Kyc", address); - ssiManagementFacet = await ethers.getContractAt("SsiManagement", address); + kycFacet = await ethers.getContractAt("KycFacet", address); + ssiManagementFacet = await ethers.getContractAt("SsiManagementFacet", address); + diamondCutFacet = await ethers.getContractAt("DiamondCutFacet", address); + const clearingTransferFacet = await ethers.getContractAt("ClearingTransferFacet", address, signer_A); const clearingRedeemFacet = await ethers.getContractAt("ClearingRedeemFacet", address, signer_A); @@ -267,7 +279,7 @@ describe("ProtectedPartitions Tests", () => { const clearingReadFacet = await ethers.getContractAt("ClearingReadFacet", address, signer_A); const clearingActionsFacet = await ethers.getContractAt("ClearingActionsFacet", address, signer_A); - const fragmentMap = new Map(); + const fragmentMapClearing = new Map(); [ ...clearingTransferFacet.interface.fragments, ...clearingRedeemFacet.interface.fragments, @@ -276,14 +288,14 @@ describe("ProtectedPartitions Tests", () => { ...clearingActionsFacet.interface.fragments, ].forEach((fragment) => { const key = fragment.format(); - if (!fragmentMap.has(key)) { - fragmentMap.set(key, fragment); + if (!fragmentMapClearing.has(key)) { + fragmentMapClearing.set(key, fragment); } }); - const uniqueFragments = Array.from(fragmentMap.values()); + const uniqueFragmentsClearing = Array.from(fragmentMapClearing.values()); - clearingFacet = new Contract(address, uniqueFragments, signer_A); + clearingFacet = new Contract(address, uniqueFragmentsClearing, signer_A); if (compliance) { complianceMock = await ethers.getContractAt("ComplianceMock", compliance); @@ -299,6 +311,9 @@ describe("ProtectedPartitions Tests", () => { async function setProtected() { await setFacets(diamond_ProtectedPartitions.address, complianceMockAddress); + + domain.name = (await erc20Facet.getERC20Metadata()).info.name; + domain.version = (await diamondCutFacet.getConfigInfo()).version_.toString(); domain.chainId = await network.provider.send("eth_chainId"); domain.verifyingContract = diamond_ProtectedPartitions.address; await grantKyc(); @@ -355,7 +370,7 @@ describe("ProtectedPartitions Tests", () => { } async function deploySecurityFixtureUnprotectedPartitions() { - const base = await deployEquityTokenFixture(); + const base = await deployEquityTokenFixture({ useLoadFixture: false }); diamond_UnprotectedPartitions = base.diamond; signer_A = base.deployer; signer_B = base.user2; @@ -378,6 +393,7 @@ describe("ProtectedPartitions Tests", () => { compliance: complianceMockAddress, }, }, + useLoadFixture: false, // CRITICAL: avoid nested loadFixture that would erase ComplianceMock }); diamond_ProtectedPartitions = base.diamond; @@ -390,7 +406,7 @@ describe("ProtectedPartitions Tests", () => { } beforeEach(async () => { - await loadFixture(deploySecurityFixtureUnprotectedPartitions); + // await loadFixture(deploySecurityFixtureUnprotectedPartitions); await loadFixture(deploySecurityFixtureProtectedPartitions); const expirationTimestamp = MAX_UINT256; @@ -450,210 +466,6 @@ describe("ProtectedPartitions Tests", () => { ); }); - describe("Generic Transfer check Tests", () => { - it("GIVEN a paused security role WHEN performing a protected transfer THEN transaction fails with Paused", async () => { - await setProtected(); - - await grant_WILD_CARD_ROLE_and_issue_tokens(signer_B.address, signer_B.address, amount, DEFAULT_PARTITION); - - await pauseFacet.connect(signer_B).pause(); - - await expect( - erc1410Facet.protectedTransferFromByPartition( - DEFAULT_PARTITION, - signer_A.address, - signer_B.address, - amount, - MAX_UINT256, - 1, - "0x1234", - ), - ).to.be.revertedWithCustomError(pauseFacet, "TokenIsPaused"); - }); - - it("GIVEN a security with clearing active WHEN performing a protected transfer THEN transaction fails with ClearingIsActivated", async () => { - await setProtected(); - await grant_WILD_CARD_ROLE_and_issue_tokens(signer_B.address, signer_B.address, amount, DEFAULT_PARTITION); - await clearingFacet.activateClearing(); - - await expect( - erc1410Facet.protectedTransferFromByPartition( - DEFAULT_PARTITION, - signer_A.address, - signer_B.address, - amount, - MAX_UINT256, - 1, - "0x1234", - ), - ).to.be.revertedWithCustomError(clearingFacet, "ClearingIsActivated"); - }); - - it("GIVEN a account without the participant role WHEN performing a protected transfer THEN transaction fails with AccountHasNoRole", async () => { - await setProtected(); - - await expect( - erc1410Facet.protectedTransferFromByPartition( - DEFAULT_PARTITION, - signer_A.address, - signer_B.address, - amount, - MAX_UINT256, - 1, - "0x1234", - ), - ).to.be.rejectedWith("AccountHasNoRole"); - }); - - it("GIVEN a blacklisted account WHEN performing a protected transfer from it THEN transaction fails with AccountIsBlocked", async () => { - await setProtected(); - - await controlListFacet.connect(signer_B).addToControlList(signer_A.address); - - await expect( - erc1410Facet - .connect(signer_B) - .protectedTransferFromByPartition( - DEFAULT_PARTITION, - signer_A.address, - signer_B.address, - amount, - MAX_UINT256, - 1, - "0x1234", - ), - ).to.be.revertedWithCustomError(controlListFacet, "AccountIsBlocked"); - }); - - it("GIVEN a blacklisted account WHEN performing a protected transfer to it THEN transaction fails with AccountIsBlocked", async () => { - await setProtected(); - - await controlListFacet.connect(signer_B).addToControlList(signer_B.address); - - await expect( - erc1410Facet - .connect(signer_B) - .protectedTransferFromByPartition( - DEFAULT_PARTITION, - signer_A.address, - signer_B.address, - amount, - MAX_UINT256, - 1, - "0x1234", - ), - ).to.be.revertedWithCustomError(controlListFacet, "AccountIsBlocked"); - }); - - it("GIVEN a non kyc account WHEN performing a protected transfer from or to THEN transaction fails with InvalidKycStatus", async () => { - await setProtected(); - - await kycFacet.connect(signer_B).revokeKyc(signer_A.address); - - await expect( - erc1410Facet - .connect(signer_B) - .protectedTransferFromByPartition( - DEFAULT_PARTITION, - signer_A.address, - signer_B.address, - amount, - MAX_UINT256, - 1, - "0x1234", - ), - ).to.be.revertedWithCustomError(kycFacet, "InvalidKycStatus"); - - await expect( - erc1410Facet - .connect(signer_B) - .protectedTransferFromByPartition( - DEFAULT_PARTITION, - signer_B.address, - signer_A.address, - amount, - MAX_UINT256, - 1, - "0x1234", - ), - ).to.be.revertedWithCustomError(kycFacet, "InvalidKycStatus"); - }); - }); - - describe("Generic Redeem check Tests", () => { - it("GIVEN a paused security role WHEN performing a protected redeem THEN transaction fails with Paused", async () => { - await setProtected(); - await grant_WILD_CARD_ROLE_and_issue_tokens(signer_B.address, signer_B.address, amount, DEFAULT_PARTITION); - await pauseFacet.connect(signer_B).pause(); - - await expect( - erc1410Facet.protectedRedeemFromByPartition( - DEFAULT_PARTITION, - signer_A.address, - amount, - MAX_UINT256, - 1, - "0x1234", - ), - ).to.be.rejectedWith("TokenIsPaused"); - }); - - it("GIVEN a security with clearing active WHEN performing a protected redeem THEN transaction fails with ClearingIsActivated", async () => { - await setProtected(); - await grant_WILD_CARD_ROLE_and_issue_tokens(signer_B.address, signer_B.address, amount, DEFAULT_PARTITION); - await clearingFacet.activateClearing(); - - await expect( - erc1410Facet.protectedRedeemFromByPartition( - DEFAULT_PARTITION, - signer_A.address, - amount, - MAX_UINT256, - 1, - "0x1234", - ), - ).to.be.revertedWithCustomError(clearingFacet, "ClearingIsActivated"); - }); - - it("GIVEN a account without the participant role WHEN performing a protected redeem THEN transaction fails with AccountHasNoRole", async () => { - await setProtected(); - - await expect( - erc1410Facet.protectedRedeemFromByPartition( - DEFAULT_PARTITION, - signer_A.address, - amount, - MAX_UINT256, - 1, - "0x1234", - ), - ).to.be.rejectedWith("AccountHasNoRole"); - }); - - it("GIVEN a blacklisted account WHEN performing a protected redeem from it THEN transaction fails with AccountIsBlocked", async () => { - await setProtected(); - - await controlListFacet.connect(signer_B).addToControlList(signer_A.address); - - await expect( - erc1410Facet - .connect(signer_B) - .protectedRedeemFromByPartition(DEFAULT_PARTITION, signer_A.address, amount, MAX_UINT256, 1, "0x1234"), - ).to.be.rejectedWith("AccountIsBlocked"); - }); - - it("GIVEN a non kyc account WHEN performing a protected redeem from THEN transaction fails with InvalidKycStatus", async () => { - await setProtected(); - await kycFacet.connect(signer_B).revokeKyc(signer_A.address); - - await expect( - erc1410Facet - .connect(signer_B) - .protectedRedeemFromByPartition(DEFAULT_PARTITION, signer_A.address, amount, MAX_UINT256, 1, "0x1234"), - ).to.be.revertedWithCustomError(kycFacet, "InvalidKycStatus"); - }); - }); - describe("Generic Hold check Tests", () => { it("GIVEN a paused security WHEN performing a protected hold THEN transaction fails with Paused", async () => { await setProtected(); @@ -753,31 +565,7 @@ describe("ProtectedPartitions Tests", () => { await protectedPartitionsFacet.protectPartitions(); const partitionsProtectedStatus = await protectedPartitionsFacet.arePartitionsProtected(); - await expect(partitionsProtectedStatus).to.be.true; - }); - - it("GIVEN an unprotected partitions equity WHEN performing a protected transfer THEN transaction fails with PartitionsAreUnProtected", async () => { - await expect( - erc1410Facet - .connect(signer_B) - .protectedTransferFromByPartition( - DEFAULT_PARTITION, - signer_A.address, - signer_B.address, - amount, - 1, - 0, - "0x1234", - ), - ).to.be.rejectedWith("PartitionsAreUnProtected"); - }); - - it("GIVEN an unprotected partitions equity WHEN performing a protected redeem THEN transaction fails with PartitionsAreUnProtected", async () => { - await expect( - erc1410Facet - .connect(signer_B) - .protectedRedeemFromByPartition(DEFAULT_PARTITION, signer_A.address, amount, 1, 0, "0x1234"), - ).to.be.rejectedWith("PartitionsAreUnProtected"); + expect(partitionsProtectedStatus).to.be.true; }); it("GIVEN an unprotected partitions equity WHEN performing a protected hold THEN transaction fails with PartitionsAreUnProtected", async () => { @@ -806,6 +594,11 @@ describe("ProtectedPartitions Tests", () => { expect(partitionsProtectedStatus).to.be.false; }); + it("GIVEN a partition WHEN calculating role for partition THEN returns correct role", async () => { + const role = await protectedPartitionsFacet.calculateRoleForPartition(DEFAULT_PARTITION); + expect(role).to.equal(ProtectedPartitionRole_1); + }); + describe("Transfer Tests", () => { it("GIVEN a protected token WHEN performing a ERC1410 transfer By partition THEN transaction fails with PartitionsAreProtectedAndNoRole", async () => { await expect( @@ -813,14 +606,6 @@ describe("ProtectedPartitions Tests", () => { ).to.be.rejectedWith("PartitionsAreProtectedAndNoRole"); }); - it("GIVEN a protected token WHEN performing an ERC1410 operator transfer By partition THEN transaction fails with PartitionsAreProtectedAndNoRole", async () => { - await erc1410Facet.authorizeOperatorByPartition(DEFAULT_PARTITION, signer_C.address); - - await expect( - erc1410Facet.connect(signer_C).operatorTransferByPartition(operatorTransferData), - ).to.be.rejectedWith("PartitionsAreProtectedAndNoRole"); - }); - it("GIVEN a protected token WHEN performing a ERC1594 transfer with Data THEN transaction fails with PartitionsAreProtectedAndNoRole", async () => { await expect(erc1594Facet.transferWithData(signer_B.address, amount, "0x1234")).to.be.rejectedWith( "PartitionsAreProtectedAndNoRole", @@ -859,97 +644,6 @@ describe("ProtectedPartitions Tests", () => { ).to.be.rejectedWith("PartitionsAreProtectedAndNoRole"); }); - it("GIVEN a wrong deadline WHEN performing a protected transfer THEN transaction fails with ExpiredDeadline", async () => { - await erc1410Facet.connect(signer_B).issueByPartition({ - partition: DEFAULT_PARTITION, - tokenHolder: signer_A.address, - value: amount, - data: "0x", - }); - - await expect( - erc1410Facet - .connect(signer_B) - .protectedTransferFromByPartition( - DEFAULT_PARTITION, - signer_A.address, - signer_B.address, - amount, - 1, - 1, - "0x1234", - ), - ).to.be.rejectedWith("ExpiredDeadline"); - }); - - it("GIVEN a wrong signature length WHEN performing a protected transfer THEN transaction fails with WrongSignatureLength", async () => { - await erc1410Facet.connect(signer_B).issueByPartition({ - partition: DEFAULT_PARTITION, - tokenHolder: signer_A.address, - value: amount, - data: "0x", - }); - await expect( - erc1410Facet - .connect(signer_B) - .protectedTransferFromByPartition( - DEFAULT_PARTITION, - signer_A.address, - signer_B.address, - amount, - MAX_UINT256, - 1, - "0x01", - ), - ).to.be.rejectedWith("WrongSignatureLength"); - }); - - it("GIVEN a wrong signature WHEN performing a protected transfer THEN transaction fails with WrongSignature", async () => { - await erc1410Facet.connect(signer_B).issueByPartition({ - partition: DEFAULT_PARTITION, - tokenHolder: signer_A.address, - value: amount, - data: "0x", - }); - await expect( - erc1410Facet - .connect(signer_B) - .protectedTransferFromByPartition( - DEFAULT_PARTITION, - signer_A.address, - signer_B.address, - amount, - MAX_UINT256, - 1, - "0x0011223344112233441122334411223344112233441122334411223344112233441122334411223344112233441122334411223344112233441122334411223344", - ), - ).to.be.rejectedWith("WrongSignature"); - }); - - it("GIVEN a wrong nounce WHEN performing a protected transfer THEN transaction fails with WrongNounce", async () => { - await erc1410Facet.connect(signer_B).issueByPartition({ - partition: DEFAULT_PARTITION, - tokenHolder: signer_A.address, - value: amount, - data: "0x", - }); - const deadline = MAX_UINT256; - - await expect( - erc1410Facet - .connect(signer_B) - .protectedTransferFromByPartition( - DEFAULT_PARTITION, - signer_A.address, - signer_B.address, - amount, - deadline, - 0, - "0x1234", - ), - ).to.be.rejectedWith("WrongNounce"); - }); - it("GIVEN a protected token and a WILD CARD account WHEN performing a ERC1410 transfer By partition THEN transaction succeeds", async () => { await grant_WILD_CARD_ROLE_and_issue_tokens(signer_B.address, signer_B.address, amount, DEFAULT_PARTITION); @@ -1040,15 +734,11 @@ describe("ProtectedPartitions Tests", () => { await erc1410Facet .connect(signer_B) - .protectedTransferFromByPartition( - DEFAULT_PARTITION, - signer_A.address, - signer_B.address, - amount, - deadline, - 1, - signature, - ); + .protectedTransferFromByPartition(DEFAULT_PARTITION, signer_A.address, signer_B.address, amount, { + deadline: deadline, + nounce: 1, + signature: signature, + }); }); }); @@ -1078,105 +768,6 @@ describe("ProtectedPartitions Tests", () => { "PartitionsAreProtected", ); }); - - it("GIVEN a wrong deadline WHEN performing a protected redeem THEN transaction fails with ExpiredDeadline", async () => { - await erc1410Facet.connect(signer_B).issueByPartition({ - partition: DEFAULT_PARTITION, - tokenHolder: signer_A.address, - value: amount, - data: "0x", - }); - await expect( - erc1410Facet - .connect(signer_B) - .protectedRedeemFromByPartition(DEFAULT_PARTITION, signer_A.address, amount, 1, 0, "0x1234"), - ).to.be.rejectedWith("ExpiredDeadline"); - }); - - it("GIVEN a wrong signature length WHEN performing a protected redeem THEN transaction fails with WrongSignatureLength", async () => { - await erc1410Facet.connect(signer_B).issueByPartition({ - partition: DEFAULT_PARTITION, - tokenHolder: signer_A.address, - value: amount, - data: "0x", - }); - await expect( - erc1410Facet - .connect(signer_B) - .protectedRedeemFromByPartition(DEFAULT_PARTITION, signer_A.address, amount, MAX_UINT256, 1, "0x01"), - ).to.be.rejectedWith("WrongSignatureLength"); - }); - - it("GIVEN a wrong signature WHEN performing a protected redeem THEN transaction fails with WrongSignature", async () => { - await erc1410Facet.connect(signer_B).issueByPartition({ - partition: DEFAULT_PARTITION, - tokenHolder: signer_A.address, - value: amount, - data: "0x", - }); - await expect( - erc1410Facet - .connect(signer_B) - .protectedRedeemFromByPartition( - DEFAULT_PARTITION, - signer_A.address, - amount, - MAX_UINT256, - 1, - "0x0011223344112233441122334411223344112233441122334411223344112233441122334411223344112233441122334411223344112233441122334411223344", - ), - ).to.be.rejectedWith("WrongSignature"); - }); - - it("GIVEN a wrong nounce WHEN performing a protected redeem THEN transaction fails with WrongNounce", async () => { - await erc1410Facet.connect(signer_B).issueByPartition({ - partition: DEFAULT_PARTITION, - tokenHolder: signer_A.address, - value: amount, - data: "0x", - }); - const deadline = MAX_UINT256; - - await expect( - erc1410Facet - .connect(signer_B) - .protectedRedeemFromByPartition(DEFAULT_PARTITION, signer_A.address, amount, deadline, 0, "0x1234"), - ).to.be.rejectedWith("WrongNounce"); - }); - - it("GIVEN a correct signature WHEN performing a protected redeem THEN transaction succeeds", async () => { - const deadline = MAX_UINT256; - - const message = { - _partition: DEFAULT_PARTITION, - _from: signer_A.address, - _amount: amount, - _deadline: deadline, - _nounce: 1, - }; - - /*const domainSeparator = - ethers.utils._TypedDataEncoder.hashDomain(domain) - const messageHash = ethers.utils._TypedDataEncoder.hash( - domain, - transferType, - message - )*/ - - // Sign the message hash - const signature = await signer_A._signTypedData(domain, redeemType, message); - - await erc1410Facet.connect(signer_B).issueByPartition({ - partition: DEFAULT_PARTITION, - tokenHolder: signer_A.address, - value: amount, - data: "0x", - }); - - await erc1410Facet - .connect(signer_B) - .protectedRedeemFromByPartition(DEFAULT_PARTITION, signer_A.address, amount, deadline, 1, signature); - }); }); describe("Hold Tests", () => { @@ -1523,15 +1114,11 @@ describe("ProtectedPartitions Tests", () => { await erc1410Facet .connect(signer_B) - .protectedTransferFromByPartition( - DEFAULT_PARTITION, - signer_A.address, - signer_B.address, - amount, - deadline, - 1, - signature, - ); + .protectedTransferFromByPartition(DEFAULT_PARTITION, signer_A.address, signer_B.address, amount, { + deadline: deadline, + nounce: 1, + signature: signature, + }); expect(await complianceMock.transferredHit()).to.equal(1); }); }); diff --git a/packages/ats/contracts/test/contracts/unit/layer_1/scheduledTasks/scheduledCouponListing/scheduledCouponListing.test.ts b/packages/ats/contracts/test/contracts/unit/layer_1/scheduledTasks/scheduledCouponListing/scheduledCouponListing.test.ts new file mode 100644 index 000000000..9c3f4e7e7 --- /dev/null +++ b/packages/ats/contracts/test/contracts/unit/layer_1/scheduledTasks/scheduledCouponListing/scheduledCouponListing.test.ts @@ -0,0 +1,136 @@ +import { expect } from "chai"; +import { ethers } from "hardhat"; +import { SignerWithAddress } from "@nomiclabs/hardhat-ethers/signers.js"; +import { + type ResolverProxy, + ScheduledCouponListingFacet, + BondUSAKpiLinkedRateFacet, + AccessControl, +} from "@contract-types"; +import { deployBondKpiLinkedRateTokenFixture, getDltTimestamp } from "@test"; +import { loadFixture } from "@nomicfoundation/hardhat-network-helpers"; +import { ATS_ROLES, TIME_PERIODS_S } from "@scripts"; + +describe("ScheduledCouponListing Tests", () => { + let diamond: ResolverProxy; + let signer_A: SignerWithAddress; + + let scheduledCouponListingFacet: ScheduledCouponListingFacet; + let bondFacet: BondUSAKpiLinkedRateFacet; + let accessControlFacet: AccessControl; + + let startingDate = 0; + let maturityDate = 0; + + async function deploySecurityFixture() { + const currentTimestamp = await getDltTimestamp(); + startingDate = currentTimestamp + TIME_PERIODS_S.DAY; + maturityDate = startingDate + TIME_PERIODS_S.YEAR; + + // Deploy KPI-linked bond which uses fixing dates and scheduled coupon listing + const base = await deployBondKpiLinkedRateTokenFixture({ + bondDataParams: { + securityData: { + internalKycActivated: true, + }, + bondDetails: { + startingDate, + maturityDate, + }, + }, + }); + + diamond = base.diamond; + signer_A = base.deployer; + + scheduledCouponListingFacet = await ethers.getContractAt("ScheduledCouponListingFacet", diamond.address); + bondFacet = await ethers.getContractAt("BondUSAKpiLinkedRateFacetTimeTravel", diamond.address); + accessControlFacet = await ethers.getContractAt("AccessControl", diamond.address); + + // Grant corporate action role to signer_A + await accessControlFacet.grantRole(ATS_ROLES._CORPORATE_ACTION_ROLE, signer_A.address); + } + + beforeEach(async () => { + await loadFixture(deploySecurityFixture); + }); + + describe("scheduledCouponListingCount", () => { + it("GIVEN no scheduled coupons WHEN scheduledCouponListingCount THEN returns 0", async () => { + const count = await scheduledCouponListingFacet.scheduledCouponListingCount(); + expect(count).to.equal(0); + }); + + it("GIVEN scheduled coupons WHEN scheduledCouponListingCount THEN returns correct count", async () => { + // Add 3 coupons with fixing dates + for (let i = 0; i < 3; i++) { + const fixingDate = startingDate + TIME_PERIODS_S.MONTH * (i + 1); + const executionDate = fixingDate + TIME_PERIODS_S.WEEK; + + await bondFacet.setCoupon({ + recordDate: fixingDate.toString(), + executionDate: executionDate.toString(), + rate: 0, + rateDecimals: 0, + startDate: (fixingDate - TIME_PERIODS_S.WEEK).toString(), + endDate: fixingDate.toString(), + fixingDate: fixingDate.toString(), + rateStatus: 0, // PENDING status for KPI-linked bonds + }); + } + + const count = await scheduledCouponListingFacet.scheduledCouponListingCount(); + expect(count).to.equal(3); + }); + }); + + describe("getScheduledCouponListing", () => { + beforeEach(async () => { + // Add 5 coupons with fixing dates for pagination testing + for (let i = 0; i < 5; i++) { + const fixingDate = startingDate + TIME_PERIODS_S.MONTH * (i + 1); + const executionDate = fixingDate + TIME_PERIODS_S.WEEK; + + await bondFacet.setCoupon({ + recordDate: fixingDate.toString(), + executionDate: executionDate.toString(), + rate: 0, + rateDecimals: 0, + startDate: (fixingDate - TIME_PERIODS_S.WEEK).toString(), + endDate: fixingDate.toString(), + fixingDate: fixingDate.toString(), + rateStatus: 0, // PENDING status + }); + } + }); + + it("GIVEN scheduled coupons WHEN getScheduledCouponListing with page 0 and length 10 THEN returns all coupons", async () => { + const coupons = await scheduledCouponListingFacet.getScheduledCouponListing(0, 10); + expect(coupons.length).to.equal(5); + }); + + it("GIVEN scheduled coupons WHEN getScheduledCouponListing with page 0 and length 3 THEN returns first 3 coupons", async () => { + const coupons = await scheduledCouponListingFacet.getScheduledCouponListing(0, 3); + expect(coupons.length).to.equal(3); + }); + + it("GIVEN scheduled coupons WHEN getScheduledCouponListing with page 1 and length 3 THEN returns next 2 coupons", async () => { + const coupons = await scheduledCouponListingFacet.getScheduledCouponListing(1, 3); + expect(coupons.length).to.equal(2); + }); + + it("GIVEN scheduled coupons WHEN getScheduledCouponListing with page 2 and length 3 THEN returns empty array", async () => { + const coupons = await scheduledCouponListingFacet.getScheduledCouponListing(2, 3); + expect(coupons.length).to.equal(0); + }); + + it("GIVEN scheduled coupons WHEN getScheduledCouponListing THEN returns tasks with correct structure", async () => { + const coupons = await scheduledCouponListingFacet.getScheduledCouponListing(0, 1); + expect(coupons.length).to.equal(1); + expect(coupons[0]).to.have.property("scheduledTimestamp"); + expect(coupons[0]).to.have.property("data"); + expect(coupons[0].scheduledTimestamp).to.be.gt(0); + expect(coupons[0].data).to.not.equal("0x"); + }); + }); +}); diff --git a/packages/ats/contracts/test/contracts/unit/layer_1/scheduledTasks/scheduledSnapshots/scheduledSnapshots.test.ts b/packages/ats/contracts/test/contracts/unit/layer_1/scheduledTasks/scheduledSnapshots/scheduledSnapshots.test.ts index eb82c5616..d36c47f84 100644 --- a/packages/ats/contracts/test/contracts/unit/layer_1/scheduledTasks/scheduledSnapshots/scheduledSnapshots.test.ts +++ b/packages/ats/contracts/test/contracts/unit/layer_1/scheduledTasks/scheduledSnapshots/scheduledSnapshots.test.ts @@ -3,10 +3,10 @@ import { ethers } from "hardhat"; import { SignerWithAddress } from "@nomiclabs/hardhat-ethers/signers.js"; import { type ResolverProxy, - type Equity, - type ScheduledSnapshots, + type EquityUSAFacet, + type ScheduledSnapshotsFacet, type AccessControl, - ScheduledCrossOrderedTasks, + ScheduledCrossOrderedTasksFacet, TimeTravelFacet, } from "@contract-types"; import { dateToUnixTimestamp, ATS_ROLES } from "@scripts"; @@ -20,9 +20,9 @@ describe("Scheduled Snapshots Tests", () => { let signer_B: SignerWithAddress; let signer_C: SignerWithAddress; - let equityFacet: Equity; - let scheduledSnapshotsFacet: ScheduledSnapshots; - let scheduledTasksFacet: ScheduledCrossOrderedTasks; + let equityFacet: EquityUSAFacet; + let scheduledSnapshotsFacet: ScheduledSnapshotsFacet; + let scheduledTasksFacet: ScheduledCrossOrderedTasksFacet; let accessControlFacet: AccessControl; let timeTravelFacet: TimeTravelFacet; @@ -45,9 +45,9 @@ describe("Scheduled Snapshots Tests", () => { async function setFacets(diamond: ResolverProxy) { accessControlFacet = await ethers.getContractAt("AccessControlFacet", diamond.address, signer_A); - equityFacet = await ethers.getContractAt("Equity", diamond.address, signer_A); - scheduledSnapshotsFacet = await ethers.getContractAt("ScheduledSnapshots", diamond.address, signer_A); - scheduledTasksFacet = await ethers.getContractAt("ScheduledCrossOrderedTasks", diamond.address, signer_A); + equityFacet = await ethers.getContractAt("EquityUSAFacet", diamond.address, signer_A); + scheduledSnapshotsFacet = await ethers.getContractAt("ScheduledSnapshotsFacet", diamond.address, signer_A); + scheduledTasksFacet = await ethers.getContractAt("ScheduledCrossOrderedTasksFacet", diamond.address, signer_A); timeTravelFacet = await ethers.getContractAt("TimeTravelFacet", diamond.address, signer_A); } @@ -108,7 +108,7 @@ describe("Scheduled Snapshots Tests", () => { await timeTravelFacet.changeSystemTimestamp(dividendsRecordDateInSeconds_1 + 1); await expect(scheduledTasksFacet.connect(signer_A).triggerPendingScheduledCrossOrderedTasks()) .to.emit(scheduledSnapshotsFacet, "SnapshotTriggered") - .withArgs(signer_A.address, 1); + .withArgs(1); scheduledSnapshotCount = await scheduledSnapshotsFacet.scheduledSnapshotCount(); scheduledSnapshots = await scheduledSnapshotsFacet.getScheduledSnapshots(0, 100); @@ -124,7 +124,7 @@ describe("Scheduled Snapshots Tests", () => { await timeTravelFacet.changeSystemTimestamp(dividendsRecordDateInSeconds_2 + 1); await expect(scheduledTasksFacet.connect(signer_A).triggerScheduledCrossOrderedTasks(100)) .to.emit(scheduledSnapshotsFacet, "SnapshotTriggered") - .withArgs(signer_A.address, 2); + .withArgs(2); scheduledSnapshotCount = await scheduledSnapshotsFacet.scheduledSnapshotCount(); scheduledSnapshots = await scheduledSnapshotsFacet.getScheduledSnapshots(0, 100); @@ -138,7 +138,7 @@ describe("Scheduled Snapshots Tests", () => { await timeTravelFacet.changeSystemTimestamp(dividendsRecordDateInSeconds_3 + 1); await expect(scheduledTasksFacet.connect(signer_A).triggerScheduledCrossOrderedTasks(0)) .to.emit(scheduledSnapshotsFacet, "SnapshotTriggered") - .withArgs(signer_A.address, 3); + .withArgs(3); scheduledSnapshotCount = await scheduledSnapshotsFacet.scheduledSnapshotCount(); scheduledSnapshots = await scheduledSnapshotsFacet.getScheduledSnapshots(0, 100); diff --git a/packages/ats/contracts/test/contracts/unit/layer_1/snapshots/snapshots.test.ts b/packages/ats/contracts/test/contracts/unit/layer_1/snapshots/snapshots.test.ts index 81cb00324..53637f1da 100644 --- a/packages/ats/contracts/test/contracts/unit/layer_1/snapshots/snapshots.test.ts +++ b/packages/ats/contracts/test/contracts/unit/layer_1/snapshots/snapshots.test.ts @@ -13,6 +13,8 @@ import { Kyc, Equity, TimeTravelFacet, + FreezeFacet, + ClearingTransferFacet, } from "@contract-types"; import { ZERO, EMPTY_STRING, ADDRESS_ZERO, dateToUnixTimestamp, ATS_ROLES } from "@scripts"; import { grantRoleAndPauseToken } from "@test"; @@ -50,6 +52,8 @@ describe("Snapshots Tests", () => { let ssiManagementFacet: SsiManagement; let equityFacet: Equity; let timeTravelFacet: TimeTravelFacet; + let freezeFacet: FreezeFacet; + let clearingTransferFacet: ClearingTransferFacet; async function deploySecurityFixtureMultiPartition() { const base = await deployEquityTokenFixture({ @@ -83,6 +87,8 @@ describe("Snapshots Tests", () => { ssiManagementFacet = await ethers.getContractAt("SsiManagement", diamond.address, signer_A); equityFacet = await ethers.getContractAt("Equity", diamond.address); timeTravelFacet = await ethers.getContractAt("TimeTravelFacet", diamond.address); + freezeFacet = await ethers.getContractAt("FreezeFacet", diamond.address); + clearingTransferFacet = await ethers.getContractAt("ClearingTransferFacet", diamond.address); } function set_initRbacs(): any[] { @@ -107,6 +113,18 @@ describe("Snapshots Tests", () => { role: ATS_ROLES._SSI_MANAGER_ROLE, members: [signer_A.address], }, + { + role: ATS_ROLES._FREEZE_MANAGER_ROLE, + members: [signer_B.address], + }, + { + role: ATS_ROLES._CLEARING_ROLE, + members: [signer_B.address], + }, + { + role: ATS_ROLES._CLEARING_VALIDATOR_ROLE, + members: [signer_B.address], + }, ]; } @@ -470,6 +488,243 @@ describe("Snapshots Tests", () => { expect(snapshot_TokenHolders_2).to.have.members([signer_A.address, signer_C.address]); }); + it("GIVEN snapshot exists WHEN querying cleared balances THEN returns correct values", async () => { + const base = await deployEquityTokenFixture({ + equityDataParams: { + securityData: { + isMultiPartition: true, + clearingActive: true, + }, + }, + }); + const diamond = base.diamond; + + await executeRbac(base.accessControlFacet, set_initRbacs()); + await setFacets(diamond); + await accessControlFacet.connect(signer_A).grantRole(ATS_ROLES._SNAPSHOT_ROLE, signer_C.address); + await accessControlFacet.connect(signer_A).grantRole(ATS_ROLES._ISSUER_ROLE, signer_A.address); + + await ssiManagementFacet.addIssuer(signer_A.address); + await kycFacet.grantKyc(signer_C.address, EMPTY_VC_ID, ZERO, MAX_UINT256, signer_A.address); + await kycFacet.grantKyc(signer_A.address, EMPTY_VC_ID, ZERO, MAX_UINT256, signer_A.address); + + // Issue tokens to signer_C in two partitions + await erc1410Facet.connect(signer_A).issueByPartition({ + partition: _PARTITION_ID_1, + tokenHolder: signer_C.address, + value: balanceOf_C_Original, + data: "0x", + }); + + await erc1410Facet.connect(signer_A).issueByPartition({ + partition: _PARTITION_ID_2, + tokenHolder: signer_C.address, + value: amount, + data: "0x", + }); + + // Take snapshot before clearing + await snapshotFacet.connect(signer_C).takeSnapshot(); + + const clearedBalance_C_1 = await snapshotFacet.clearedBalanceOfAtSnapshot(1, signer_C.address); + const clearedBalance_C_1_Partition_1 = await snapshotFacet.clearedBalanceOfAtSnapshotByPartition( + _PARTITION_ID_1, + 1, + signer_C.address, + ); + const clearedBalance_C_1_Partition_2 = await snapshotFacet.clearedBalanceOfAtSnapshotByPartition( + _PARTITION_ID_2, + 1, + signer_C.address, + ); + + expect(clearedBalance_C_1).to.equal(0); + expect(clearedBalance_C_1_Partition_1).to.equal(0); + expect(clearedBalance_C_1_Partition_2).to.equal(0); + + // Create clearing transfer in partition 1 + const clearedAmount_Partition_1 = 800; + await clearingTransferFacet.connect(signer_C).clearingTransferByPartition( + { + partition: _PARTITION_ID_1, + expirationTimestamp: MAX_UINT256, + data: "0x", + }, + clearedAmount_Partition_1, + signer_A.address, + ); + + // Create clearing transfer in partition 2 + const clearedAmount_Partition_2 = 500; + await clearingTransferFacet.connect(signer_C).clearingTransferByPartition( + { + partition: _PARTITION_ID_2, + expirationTimestamp: MAX_UINT256, + data: "0x", + }, + clearedAmount_Partition_2, + signer_A.address, + ); + + // Take snapshot after clearing + await snapshotFacet.connect(signer_C).takeSnapshot(); + + const clearedBalance_C_2 = await snapshotFacet.clearedBalanceOfAtSnapshot(2, signer_C.address); + const clearedBalance_C_2_Partition_1 = await snapshotFacet.clearedBalanceOfAtSnapshotByPartition( + _PARTITION_ID_1, + 2, + signer_C.address, + ); + const clearedBalance_C_2_Partition_2 = await snapshotFacet.clearedBalanceOfAtSnapshotByPartition( + _PARTITION_ID_2, + 2, + signer_C.address, + ); + + expect(clearedBalance_C_2).to.equal(clearedAmount_Partition_1 + clearedAmount_Partition_2); + expect(clearedBalance_C_2_Partition_1).to.equal(clearedAmount_Partition_1); + expect(clearedBalance_C_2_Partition_2).to.equal(clearedAmount_Partition_2); + + // Verify that cleared balances reduce the available balance + const currentBalance_C = await erc1410Facet.balanceOf(signer_C.address); + expect(currentBalance_C).to.equal( + balanceOf_C_Original + amount - clearedAmount_Partition_1 - clearedAmount_Partition_2, + ); + + const currentBalance_C_Partition_1 = await erc1410Facet.balanceOfByPartition(_PARTITION_ID_1, signer_C.address); + expect(currentBalance_C_Partition_1).to.equal(balanceOf_C_Original - clearedAmount_Partition_1); + + const currentBalance_C_Partition_2 = await erc1410Facet.balanceOfByPartition(_PARTITION_ID_2, signer_C.address); + expect(currentBalance_C_Partition_2).to.equal(amount - clearedAmount_Partition_2); + }); + + it("GIVEN snapshot exists WHEN querying frozen balances THEN returns correct values", async () => { + const base = await deployEquityTokenFixture({ + equityDataParams: { + securityData: { + isMultiPartition: false, + }, + }, + }); + const diamond = base.diamond; + + await executeRbac(base.accessControlFacet, set_initRbacs()); + await setFacets(diamond); + + await accessControlFacet.connect(signer_A).grantRole(ATS_ROLES._SNAPSHOT_ROLE, signer_C.address); + await accessControlFacet.connect(signer_A).grantRole(ATS_ROLES._ISSUER_ROLE, signer_A.address); + + await ssiManagementFacet.addIssuer(signer_A.address); + await kycFacet.grantKyc(signer_C.address, EMPTY_VC_ID, ZERO, MAX_UINT256, signer_A.address); + await kycFacet.grantKyc(signer_A.address, EMPTY_VC_ID, ZERO, MAX_UINT256, signer_A.address); + + await erc1410Facet.connect(signer_A).issueByPartition({ + partition: _PARTITION_ID_1, + tokenHolder: signer_C.address, + value: balanceOf_C_Original, + data: "0x", + }); + + await snapshotFacet.connect(signer_C).takeSnapshot(); + + const frozenBalance_C_1 = await snapshotFacet.frozenBalanceOfAtSnapshot(1, signer_C.address); + const frozenBalance_C_1_Partition_1 = await snapshotFacet.frozenBalanceOfAtSnapshotByPartition( + _PARTITION_ID_1, + 1, + signer_C.address, + ); + + expect(frozenBalance_C_1).to.equal(0); + expect(frozenBalance_C_1_Partition_1).to.equal(0); + + // Freeze some tokens + const frozenAmount = 500; + await freezeFacet.connect(signer_B).freezePartialTokens(signer_C.address, frozenAmount); + + // Take snapshot after freezing + await snapshotFacet.connect(signer_C).takeSnapshot(); + + const frozenBalance_C_2 = await snapshotFacet.frozenBalanceOfAtSnapshot(2, signer_C.address); + const frozenBalance_C_2_Partition_1 = await snapshotFacet.frozenBalanceOfAtSnapshotByPartition( + _PARTITION_ID_1, + 2, + signer_C.address, + ); + + expect(frozenBalance_C_2).to.equal(frozenAmount); + expect(frozenBalance_C_2_Partition_1).to.equal(frozenAmount); + + // Verify current frozen balance + const currentFrozenBalance = await freezeFacet.getFrozenTokens(signer_C.address); + expect(currentFrozenBalance).to.equal(frozenAmount); + + // Verify free balance is reduced + const currentFreeBalance = await erc1410Facet.balanceOf(signer_C.address); + expect(currentFreeBalance).to.equal(balanceOf_C_Original - frozenAmount); + }); + + it("GIVEN multiple snapshots WHEN querying token holders pagination THEN returns correct holders list", async () => { + await accessControlFacet.connect(signer_A).grantRole(ATS_ROLES._SNAPSHOT_ROLE, signer_C.address); + await accessControlFacet.connect(signer_A).grantRole(ATS_ROLES._ISSUER_ROLE, signer_A.address); + + await ssiManagementFacet.addIssuer(signer_A.address); + await kycFacet.grantKyc(signer_C.address, EMPTY_VC_ID, ZERO, MAX_UINT256, signer_A.address); + await kycFacet.grantKyc(signer_A.address, EMPTY_VC_ID, ZERO, MAX_UINT256, signer_A.address); + await kycFacet.grantKyc(signer_B.address, EMPTY_VC_ID, ZERO, MAX_UINT256, signer_A.address); + + await erc1410Facet.connect(signer_A).issueByPartition({ + partition: _PARTITION_ID_1, + tokenHolder: signer_C.address, + value: balanceOf_C_Original, + data: "0x", + }); + + await erc1410Facet.connect(signer_A).issueByPartition({ + partition: _PARTITION_ID_1, + tokenHolder: signer_A.address, + value: amount, + data: "0x", + }); + + await erc1410Facet.connect(signer_A).issueByPartition({ + partition: _PARTITION_ID_1, + tokenHolder: signer_B.address, + value: amount, + data: "0x", + }); + + await snapshotFacet.connect(signer_C).takeSnapshot(); + + const totalHolders = await snapshotFacet.getTotalTokenHoldersAtSnapshot(1); + expect(totalHolders).to.equal(3); + + // Test pagination - get 2 holders per page + const holders_page_0 = await snapshotFacet.getTokenHoldersAtSnapshot(1, 0, 2); + expect(holders_page_0.length).to.equal(2); + // Verify page 0 contains 2 of the expected holders + const expectedHolders = [signer_C.address, signer_A.address, signer_B.address]; + holders_page_0.forEach((holder) => { + expect(expectedHolders).to.include(holder); + }); + + const holders_page_1 = await snapshotFacet.getTokenHoldersAtSnapshot(1, 1, 2); + expect(holders_page_1.length).to.equal(1); + // Verify page 1 contains 1 of the expected holders + holders_page_1.forEach((holder) => { + expect(expectedHolders).to.include(holder); + }); + + // Combine all holders from both pages + const allHolders = [...holders_page_0, ...holders_page_1]; + const uniqueHolders = [...new Set(allHolders)]; + expect(uniqueHolders.length).to.equal(2); + + // Get all holders in one call to verify consistency + const allHolders_single_call = await snapshotFacet.getTokenHoldersAtSnapshot(1, 0, 10); + expect(allHolders_single_call.length).to.equal(3); + expect(allHolders_single_call).to.have.members([signer_C.address, signer_A.address, signer_B.address]); + }); + describe("Scheduled tasks", async () => { it("GIVEN an account with snapshot role WHEN takeSnapshot THEN scheduled tasks get executed succeeds", async () => { await accessControlFacet.connect(signer_A).grantRole(ATS_ROLES._SNAPSHOT_ROLE, signer_A.address); diff --git a/packages/ats/contracts/test/contracts/unit/layer_1/ssi/ssi.test.ts b/packages/ats/contracts/test/contracts/unit/layer_1/ssi/ssi.test.ts index 631a21b1d..e9d029c4e 100644 --- a/packages/ats/contracts/test/contracts/unit/layer_1/ssi/ssi.test.ts +++ b/packages/ats/contracts/test/contracts/unit/layer_1/ssi/ssi.test.ts @@ -2,7 +2,7 @@ import { expect } from "chai"; import { ethers } from "hardhat"; import { SignerWithAddress } from "@nomiclabs/hardhat-ethers/signers.js"; import { loadFixture } from "@nomicfoundation/hardhat-network-helpers"; -import { type ResolverProxy, Pause, SsiManagement, MockedT3RevocationRegistry } from "@contract-types"; +import { type ResolverProxy, PauseFacet, SsiManagementFacet, MockedT3RevocationRegistry } from "@contract-types"; import { ATS_ROLES } from "@scripts"; import { deployEquityTokenFixture } from "@test"; import { executeRbac } from "@test"; @@ -13,8 +13,8 @@ describe("SSI Tests", () => { let signer_B: SignerWithAddress; let signer_C: SignerWithAddress; - let pauseFacet: Pause; - let ssiManagementFacet: SsiManagement; + let pauseFacet: PauseFacet; + let ssiManagementFacet: SsiManagementFacet; let revocationList: MockedT3RevocationRegistry; async function deploySecurityFixture() { @@ -34,8 +34,8 @@ describe("SSI Tests", () => { members: [signer_C.address], }, ]); - pauseFacet = await ethers.getContractAt("Pause", diamond.address, signer_A); - ssiManagementFacet = await ethers.getContractAt("SsiManagement", diamond.address, signer_C); + pauseFacet = await ethers.getContractAt("PauseFacet", diamond.address, signer_A); + ssiManagementFacet = await ethers.getContractAt("SsiManagementFacet", diamond.address, signer_C); revocationList = await (await ethers.getContractFactory("MockedT3RevocationRegistry", signer_C)).deploy(); await revocationList.deployed(); } diff --git a/packages/ats/contracts/test/contracts/unit/layer_1/transferAndLock/transferAndLock.test.ts b/packages/ats/contracts/test/contracts/unit/layer_1/transferAndLock/transferAndLock.test.ts index 88ddf5198..76fc51acc 100644 --- a/packages/ats/contracts/test/contracts/unit/layer_1/transferAndLock/transferAndLock.test.ts +++ b/packages/ats/contracts/test/contracts/unit/layer_1/transferAndLock/transferAndLock.test.ts @@ -3,12 +3,12 @@ import { ethers } from "hardhat"; import { SignerWithAddress } from "@nomiclabs/hardhat-ethers/signers.js"; import { type ResolverProxy, - type Lock, - Pause, + type LockFacet, + type PauseFacet, type IERC1410, - TransferAndLock, - SsiManagement, - Kyc, + type TransferAndLockFacet, + type SsiManagementFacet, + type KycFacet, } from "@contract-types"; import { ZERO, EMPTY_STRING, ATS_ROLES } from "@scripts"; import { loadFixture } from "@nomicfoundation/hardhat-network-helpers"; @@ -27,12 +27,12 @@ describe("Transfer and lock Tests", () => { let signer_C: SignerWithAddress; let signer_D: SignerWithAddress; - let lockFacet: Lock; - let transferAndLockFacet: TransferAndLock; - let pauseFacet: Pause; + let lockFacet: LockFacet; + let transferAndLockFacet: TransferAndLockFacet; + let pauseFacet: PauseFacet; let erc1410Facet: IERC1410; - let kycFacet: Kyc; - let ssiManagementFacet: SsiManagement; + let kycFacet: KycFacet; + let ssiManagementFacet: SsiManagementFacet; const ONE_YEAR_IN_SECONDS = 365 * 24 * 60 * 60; let currentTimestamp = 0; @@ -64,12 +64,12 @@ describe("Transfer and lock Tests", () => { } async function setFacets({ diamond }: { diamond: ResolverProxy }) { - lockFacet = await ethers.getContractAt("Lock", diamond.address, signer_C); - transferAndLockFacet = await ethers.getContractAt("TransferAndLock", diamond.address, signer_C); - pauseFacet = await ethers.getContractAt("Pause", diamond.address, signer_D); + lockFacet = await ethers.getContractAt("LockFacet", diamond.address, signer_C); + transferAndLockFacet = await ethers.getContractAt("TransferAndLockFacet", diamond.address, signer_C); + pauseFacet = await ethers.getContractAt("PauseFacet", diamond.address, signer_D); erc1410Facet = await ethers.getContractAt("IERC1410", diamond.address); - kycFacet = await ethers.getContractAt("Kyc", diamond.address, signer_B); - ssiManagementFacet = await ethers.getContractAt("SsiManagement", diamond.address, signer_A); + kycFacet = await ethers.getContractAt("KycFacet", diamond.address, signer_B); + ssiManagementFacet = await ethers.getContractAt("SsiManagementFacet", diamond.address, signer_A); await ssiManagementFacet.connect(signer_A).addIssuer(signer_A.address); await kycFacet.grantKyc(signer_A.address, EMPTY_VC_ID, ZERO, MAX_UINT256, signer_A.address); await kycFacet.grantKyc(signer_C.address, EMPTY_VC_ID, ZERO, MAX_UINT256, signer_A.address); @@ -248,7 +248,7 @@ describe("Transfer and lock Tests", () => { }); describe("multi-partition transactions arent enabled", () => { - it("GIVEN a token with multi-partition enabled GIVEN transferAndLockByPartition THEN fails with NotAllowedInMultiPartitionMode", async () => { + it("GIVEN a token with multi-partition disabled GIVEN transferAndLockByPartition with non-default partition THEN fails with PartitionNotAllowedInSinglePartitionMode", async () => { await expect( transferAndLockFacet.transferAndLockByPartition( _NON_DEFAULT_PARTITION, diff --git a/packages/ats/contracts/test/contracts/unit/resolver/BusinessLogicResolver.test.ts b/packages/ats/contracts/test/contracts/unit/resolver/BusinessLogicResolver.test.ts index 270ccec54..15334277b 100644 --- a/packages/ats/contracts/test/contracts/unit/resolver/BusinessLogicResolver.test.ts +++ b/packages/ats/contracts/test/contracts/unit/resolver/BusinessLogicResolver.test.ts @@ -79,6 +79,22 @@ describe("BusinessLogicResolver", () => { businessLogicResolver.connect(signer_C).registerBusinessLogics(BUSINESS_LOGIC_KEYS.slice(0, 2)), ).to.be.rejectedWith("AccountHasNoRole"); }); + + it("GIVEN an account without admin role WHEN adding selectors to blacklist THEN transaction fails with AccountHasNoRole", async () => { + const blackListedSelectors = ["0x8456cb59"]; // pause() selector + + await expect( + businessLogicResolver.connect(signer_C).addSelectorsToBlacklist(EQUITY_CONFIG_ID, blackListedSelectors), + ).to.be.rejectedWith("AccountHasNoRole"); + }); + + it("GIVEN an account without admin role WHEN removing selectors from blacklist THEN transaction fails with AccountHasNoRole", async () => { + const blackListedSelectors = ["0x8456cb59"]; // pause() selector + + await expect( + businessLogicResolver.connect(signer_C).removeSelectorsFromBlacklist(EQUITY_CONFIG_ID, blackListedSelectors), + ).to.be.rejectedWith("AccountHasNoRole"); + }); }); describe("Business Logic Resolver functionality", () => { @@ -119,14 +135,6 @@ describe("BusinessLogicResolver", () => { ); }); - it("GIVEN a list of logics WHEN registerBusinessLogics THEN Fails if some key is not informed with AllBusinessLogicKeysMustBeenInformed", async () => { - await businessLogicResolver.registerBusinessLogics([BUSINESS_LOGIC_KEYS[0]]); - - await expect(businessLogicResolver.registerBusinessLogics([BUSINESS_LOGIC_KEYS[1]])).to.be.rejectedWith( - "AllBusinessLogicKeysMustBeenInformed", - ); - }); - it("GIVEN an empty registry WHEN registerBusinessLogics THEN queries responds with correct values", async () => { const LATEST_VERSION = 1; const BUSINESS_LOGICS_TO_REGISTER = BUSINESS_LOGIC_KEYS.slice(0, 2); @@ -160,6 +168,16 @@ describe("BusinessLogicResolver", () => { ); }); + it("GIVEN a list of logics WHEN registerBusinessLogics in batch THEN success", async () => { + await businessLogicResolver.registerBusinessLogics(BUSINESS_LOGIC_KEYS.slice(0, 2)); + await businessLogicResolver.registerBusinessLogics(BUSINESS_LOGIC_KEYS.slice(2, BUSINESS_LOGIC_KEYS.length)); + + expect(await businessLogicResolver.getBusinessLogicCount()).is.equal(BUSINESS_LOGIC_KEYS.length); + expect(await businessLogicResolver.getBusinessLogicKeys(0, BUSINESS_LOGIC_KEYS.length)).is.deep.equal( + BUSINESS_LOGIC_KEYS.map((businessLogic) => businessLogic.businessLogicKey), + ); + }); + it("GIVEN an registry with 1 version WHEN registerBusinessLogics with different keys THEN queries responds with correct values", async () => { await businessLogicResolver.registerBusinessLogics(BUSINESS_LOGIC_KEYS.slice(0, 2)); @@ -216,5 +234,28 @@ describe("BusinessLogicResolver", () => { await businessLogicResolver.removeSelectorsFromBlacklist(EQUITY_CONFIG_ID, blackListedSelectors); expect(await businessLogicResolver.getSelectorsBlacklist(EQUITY_CONFIG_ID, 0, 100)).to.deep.equal([]); }); + + it("GIVEN a selector already in blacklist WHEN adding it again THEN it should not be duplicated", async () => { + const blackListedSelectors = ["0x8456cb59"]; // pause() selector + + await businessLogicResolver.addSelectorsToBlacklist(EQUITY_CONFIG_ID, blackListedSelectors); + expect(await businessLogicResolver.getSelectorsBlacklist(EQUITY_CONFIG_ID, 0, 100)).to.deep.equal( + blackListedSelectors, + ); + + // Add the same selector again + await businessLogicResolver.addSelectorsToBlacklist(EQUITY_CONFIG_ID, blackListedSelectors); + expect(await businessLogicResolver.getSelectorsBlacklist(EQUITY_CONFIG_ID, 0, 100)).to.deep.equal( + blackListedSelectors, + ); + }); + + it("GIVEN a selector not in blacklist WHEN removing it THEN nothing changes", async () => { + const blackListedSelectors = ["0x8456cb59"]; // pause() selector + + // Remove a selector that doesn't exist + await businessLogicResolver.removeSelectorsFromBlacklist(EQUITY_CONFIG_ID, blackListedSelectors); + expect(await businessLogicResolver.getSelectorsBlacklist(EQUITY_CONFIG_ID, 0, 100)).to.deep.equal([]); + }); }); }); diff --git a/packages/ats/contracts/test/contracts/unit/resolver/diamondCutManager.test.ts b/packages/ats/contracts/test/contracts/unit/resolver/diamondCutManager.test.ts index 83d3069f0..5c3fa602d 100644 --- a/packages/ats/contracts/test/contracts/unit/resolver/diamondCutManager.test.ts +++ b/packages/ats/contracts/test/contracts/unit/resolver/diamondCutManager.test.ts @@ -1,4 +1,3 @@ -//import { loadFixture } from '@nomicfoundation/hardhat-network-helpers' import { expect } from "chai"; import { SignerWithAddress } from "@nomiclabs/hardhat-ethers/signers.js"; import { @@ -12,15 +11,23 @@ import { AccessControlFacet__factory, Pause__factory, } from "@contract-types"; -import { ATS_ROLES, BOND_CONFIG_ID, EQUITY_CONFIG_ID } from "@scripts"; +import { + ATS_ROLES, + BOND_CONFIG_ID, + BOND_FIXED_RATE_CONFIG_ID, + BOND_KPI_LINKED_RATE_CONFIG_ID, + BOND_SUSTAINABILITY_PERFORMANCE_TARGET_RATE_CONFIG_ID, + EQUITY_CONFIG_ID, +} from "@scripts"; import { deployAtsInfrastructureFixture } from "@test"; +import { loadFixture } from "@nomicfoundation/hardhat-network-helpers"; // Test-specific configuration IDs for negative test cases // These are separate from EQUITY_CONFIG_ID/BOND_CONFIG_ID to avoid conflicts const TEST_CONFIG_IDS = { - PAUSE_TEST: "0x0000000000000000000000000000000000000000000000000000000000000003", - PAUSE_BATCH_TEST: "0x0000000000000000000000000000000000000000000000000000000000000004", - BLACKLIST_TEST: "0x0000000000000000000000000000000000000000000000000000000000000005", + PAUSE_TEST: "0x0000000000000000000000000000000000000000000000000000000000000004", + PAUSE_BATCH_TEST: "0x0000000000000000000000000000000000000000000000000000000000000005", + BLACKLIST_TEST: "0x0000000000000000000000000000000000000000000000000000000000000006", }; describe("DiamondCutManager", () => { @@ -33,10 +40,17 @@ describe("DiamondCutManager", () => { let pause: Pause; let equityFacetIdList: string[] = []; let bondFacetIdList: string[] = []; + let bondFixedRateFacetIdList: string[] = []; + let bondKpiLinkedRateFacetIdList: string[] = []; + let bondSustainabilityPerformanceTargetRateFacetIdList: string[] = []; let equityFacetVersionList: number[] = []; - before(async () => { - const infrastructure = await deployAtsInfrastructureFixture(); + async function atsInfrastructureFixture() { + return await deployAtsInfrastructureFixture(); + } + + beforeEach(async () => { + const infrastructure = await loadFixture(atsInfrastructureFixture); businessLogicResolver = infrastructure.blr; @@ -52,6 +66,11 @@ describe("DiamondCutManager", () => { diamondCutManager = DiamondCutManager__factory.connect(businessLogicResolver.address, signer_A); equityFacetIdList = Object.values(infrastructure.equityFacetKeys); bondFacetIdList = Object.values(infrastructure.bondFacetKeys); + bondFixedRateFacetIdList = Object.values(infrastructure.bondFixedRateFacetKeys); + bondKpiLinkedRateFacetIdList = Object.values(infrastructure.bondKpiLinkedRateFacetKeys); + bondSustainabilityPerformanceTargetRateFacetIdList = Object.values( + infrastructure.bondSustainabilityPerformanceTargetRateFacetKeys, + ); equityFacetVersionList = Array(equityFacetIdList.length).fill(1); }); @@ -60,9 +79,13 @@ describe("DiamondCutManager", () => { if (isPaused) { await pause.connect(signer_B).unpause(); } - // Clean up blacklisted selectors for all test config IDs const pauseSelector = "0x8456cb59"; - const configIdsToCleanup = [EQUITY_CONFIG_ID, TEST_CONFIG_IDS.BLACKLIST_TEST]; + const configIdsToCleanup = [ + EQUITY_CONFIG_ID, + TEST_CONFIG_IDS.PAUSE_TEST, + TEST_CONFIG_IDS.PAUSE_BATCH_TEST, + TEST_CONFIG_IDS.BLACKLIST_TEST, + ]; for (const configId of configIdsToCleanup) { try { @@ -180,7 +203,6 @@ describe("DiamondCutManager", () => { for (let selectorIndex = 0; selectorIndex < selectorsLength; selectorIndex++) { const selectorId = facet.selectors[selectorIndex]; - // Validate against null selector (indicates array length mismatch) expect(selectorId).to.not.equal( nullSelector, `Null selector (0x00000000) found at index ${selectorIndex} in facet ${facet.id} (${facet.addr}). ` + @@ -188,7 +210,6 @@ describe("DiamondCutManager", () => { `The array size is larger than the number of selectors being populated.`, ); - // Validate against getStaticInterfaceIds selector expect(selectorId).to.not.equal( getStaticInterfaceIdsSelector, `getStaticInterfaceIds() selector (${getStaticInterfaceIdsSelector}) should NOT be registered in getStaticFunctionSelectors(). ` + @@ -196,7 +217,6 @@ describe("DiamondCutManager", () => { `This function is part of the IStaticFunctionSelectors interface but should not be exposed as a callable function.`, ); - // Validate against getStaticResolverKey selector expect(selectorId).to.not.equal( getStaticResolverKeySelector, `getStaticResolverKey() selector (${getStaticResolverKeySelector}) should NOT be registered in getStaticFunctionSelectors(). ` + @@ -254,7 +274,17 @@ describe("DiamondCutManager", () => { expect(facetAddresses).to.have.members(facetAddresses_2); const expectedFacetIdList = - configId === EQUITY_CONFIG_ID ? equityFacetIdList : configId === BOND_CONFIG_ID ? bondFacetIdList : null; + configId === EQUITY_CONFIG_ID + ? equityFacetIdList + : configId === BOND_CONFIG_ID + ? bondFacetIdList + : configId == BOND_FIXED_RATE_CONFIG_ID + ? bondFixedRateFacetIdList + : configId == BOND_KPI_LINKED_RATE_CONFIG_ID + ? bondKpiLinkedRateFacetIdList + : configId == BOND_SUSTAINABILITY_PERFORMANCE_TARGET_RATE_CONFIG_ID + ? bondSustainabilityPerformanceTargetRateFacetIdList + : null; if (!expectedFacetIdList) { expect.fail("Unknown configId"); @@ -266,10 +296,16 @@ describe("DiamondCutManager", () => { it("GIVEN a resolver WHEN reading configuration information THEN everything matches", async () => { const configLength = (await diamondCutManager.getConfigurationsLength()).toNumber(); - expect(configLength).to.equal(2); + expect(configLength).to.equal(5); const configIds = await diamondCutManager.getConfigurations(0, configLength); - expect(configIds).to.have.members([EQUITY_CONFIG_ID, BOND_CONFIG_ID]); + expect(configIds).to.have.members([ + EQUITY_CONFIG_ID, + BOND_CONFIG_ID, + BOND_FIXED_RATE_CONFIG_ID, + BOND_KPI_LINKED_RATE_CONFIG_ID, + BOND_SUSTAINABILITY_PERFORMANCE_TARGET_RATE_CONFIG_ID, + ]); for (const configId of configIds) { const configLatestVersion = (await diamondCutManager.getLatestVersionByConfiguration(configId)).toNumber(); @@ -379,9 +415,7 @@ describe("DiamondCutManager", () => { }); it("GIVEN a resolver WHEN adding a new configuration with a duplicated facet THEN fails with DuplicatedFacetInConfiguration", async () => { - // Add a duplicated facet const facetsIds = [...equityFacetIdList, equityFacetIdList[0]]; - // Add a duplicated version const facetVersions = [...equityFacetVersionList, equityFacetVersionList[0]]; const facetConfigurations: IDiamondCutManager.FacetConfigurationStruct[] = []; @@ -413,25 +447,20 @@ describe("DiamondCutManager", () => { const configIds = await batchDiamondCutManager.getConfigurations(0, configLength); expect(configIds).to.have.members([]); - // Temporarily replace the global diamondCutManager to reuse validation functions const originalDiamondCutManager = diamondCutManager; diamondCutManager = batchDiamondCutManager; - for (const configId of [EQUITY_CONFIG_ID, BOND_CONFIG_ID]) { + for (const configId of [EQUITY_CONFIG_ID, BOND_CONFIG_ID, BOND_FIXED_RATE_CONFIG_ID]) { const configLatestVersion = (await batchDiamondCutManager.getLatestVersionByConfiguration(configId)).toNumber(); expect(configLatestVersion).to.equal(0); - // Reuse the existing validation functions await validateConfiguration(configId); - - // Run cancelBatchConfiguration await batchDiamondCutManager.cancelBatchConfiguration(configId); expect(await batchDiamondCutManager.getFacetsLengthByConfigurationIdAndVersion(configId, 1)).to.equal(0); } expect(await batchDiamondCutManager.getConfigurationsLength()).to.equal(0); - // Restore the original diamondCutManager diamondCutManager = originalDiamondCutManager; }); @@ -503,9 +532,7 @@ describe("DiamondCutManager", () => { }); it("GIVEN a resolver WHEN adding a new configuration with a duplicated facet using createBatchConfiguration THEN fails with DuplicatedFacetInConfiguration", async () => { - // Add a duplicated facet const facetsIds = [...equityFacetIdList, equityFacetIdList[0]]; - // Add a duplicated version const facetVersions = [...equityFacetVersionList, equityFacetVersionList[0]]; const facetConfigurations: IDiamondCutManager.FacetConfigurationStruct[] = []; @@ -522,7 +549,7 @@ describe("DiamondCutManager", () => { }); it("GIVEN a resolver WHEN a selector is blacklisted THEN transaction fails with SelectorBlacklisted", async () => { - const blackListedSelectors = ["0x8456cb59"]; // pause() selector + const blackListedSelectors = ["0x8456cb59"]; await businessLogicResolver.addSelectorsToBlacklist(TEST_CONFIG_IDS.BLACKLIST_TEST, blackListedSelectors); @@ -540,4 +567,172 @@ describe("DiamondCutManager", () => { .to.be.revertedWithCustomError(diamondCutManager, "SelectorBlacklisted") .withArgs(blackListedSelectors[0]); }); + + it("GIVEN a resolver WHEN creating configuration on an ongoing batch THEN uses the batch version", async () => { + const testConfigId = "0x0000000000000000000000000000000000000000000000000000000000000010"; + + const firstBatchFacets: IDiamondCutManager.FacetConfigurationStruct[] = [ + { + id: equityFacetIdList[0], + version: 1, + }, + ]; + + await diamondCutManager.connect(signer_A).createBatchConfiguration(testConfigId, firstBatchFacets, false); + + const secondBatchFacets: IDiamondCutManager.FacetConfigurationStruct[] = [ + { + id: equityFacetIdList[1], + version: 1, + }, + ]; + + await diamondCutManager.connect(signer_A).createConfiguration(testConfigId, secondBatchFacets); + + const latestVersion = (await diamondCutManager.getLatestVersionByConfiguration(testConfigId)).toNumber(); + expect(latestVersion).to.equal(1); + + const facetsLength = ( + await diamondCutManager.getFacetsLengthByConfigurationIdAndVersion(testConfigId, 1) + ).toNumber(); + expect(facetsLength).to.equal(2); + }); + + it("GIVEN a resolver and a non admin user WHEN canceling a batch configuration THEN fails with AccountHasNoRole", async () => { + const testConfigId = "0x0000000000000000000000000000000000000000000000000000000000000011"; + + const facetConfigurations: IDiamondCutManager.FacetConfigurationStruct[] = [ + { + id: equityFacetIdList[0], + version: 1, + }, + ]; + + await diamondCutManager.connect(signer_A).createBatchConfiguration(testConfigId, facetConfigurations, false); + + await expect(diamondCutManager.connect(signer_B).cancelBatchConfiguration(testConfigId)).to.be.rejectedWith( + "AccountHasNoRole", + ); + }); + + it("GIVEN a paused resolver WHEN canceling a batch configuration THEN fails with TokenIsPaused", async () => { + const testConfigId = "0x0000000000000000000000000000000000000000000000000000000000000012"; + + const facetConfigurations: IDiamondCutManager.FacetConfigurationStruct[] = [ + { + id: equityFacetIdList[0], + version: 1, + }, + ]; + + await diamondCutManager.connect(signer_A).createBatchConfiguration(testConfigId, facetConfigurations, false); + + await pause.connect(signer_B).pause(); + + await expect(diamondCutManager.connect(signer_A).cancelBatchConfiguration(testConfigId)).to.be.rejectedWith( + "TokenIsPaused", + ); + }); + + it("GIVEN a resolver WHEN canceling a batch configuration with configId at 0 THEN fails with DefaultValueForConfigurationIdNotPermitted", async () => { + await expect( + diamondCutManager + .connect(signer_A) + .cancelBatchConfiguration("0x0000000000000000000000000000000000000000000000000000000000000000"), + ).to.be.rejectedWith("DefaultValueForConfigurationIdNotPermitted"); + }); + + it("GIVEN a configuration WHEN creating a new version (v2) THEN the configuration is already active", async () => { + const testConfigId = "0x0000000000000000000000000000000000000000000000000000000000000013"; + + const firstVersionFacets: IDiamondCutManager.FacetConfigurationStruct[] = [ + { + id: equityFacetIdList[0], + version: 1, + }, + ]; + + await diamondCutManager.connect(signer_A).createConfiguration(testConfigId, firstVersionFacets); + + const version1 = (await diamondCutManager.getLatestVersionByConfiguration(testConfigId)).toNumber(); + expect(version1).to.equal(1); + + const isRegisteredV1 = await diamondCutManager.isResolverProxyConfigurationRegistered(testConfigId, 1); + expect(isRegisteredV1).to.be.true; + + const secondVersionFacets: IDiamondCutManager.FacetConfigurationStruct[] = [ + { + id: equityFacetIdList[1], + version: 1, + }, + ]; + + await diamondCutManager.connect(signer_A).createConfiguration(testConfigId, secondVersionFacets); + + const version2 = (await diamondCutManager.getLatestVersionByConfiguration(testConfigId)).toNumber(); + expect(version2).to.equal(2); + + const isRegisteredV2 = await diamondCutManager.isResolverProxyConfigurationRegistered(testConfigId, 2); + expect(isRegisteredV2).to.be.true; + + const configLength = (await diamondCutManager.getConfigurationsLength()).toNumber(); + const configIds = await diamondCutManager.getConfigurations(0, configLength); + const countOfTestConfigId = configIds.filter((id: string) => id === testConfigId).length; + expect(countOfTestConfigId).to.equal(1); + }); + + it("GIVEN a configuration WHEN querying facets with version 0 THEN uses latest version", async () => { + const configId = EQUITY_CONFIG_ID; + + const facetsWithVersion0 = await diamondCutManager.getFacetsByConfigurationIdAndVersion( + configId, + 0, + 0, + equityFacetIdList.length, + ); + + const facetsWithVersion1 = await diamondCutManager.getFacetsByConfigurationIdAndVersion( + configId, + 1, + 0, + equityFacetIdList.length, + ); + + expect(facetsWithVersion0.length).to.equal(facetsWithVersion1.length); + expect(facetsWithVersion0.length).to.be.greaterThan(0); + + for (let i = 0; i < facetsWithVersion0.length; i++) { + expect(facetsWithVersion0[i].id).to.equal(facetsWithVersion1[i].id); + expect(facetsWithVersion0[i].addr).to.equal(facetsWithVersion1[i].addr); + } + }); + + it("GIVEN a non-existent configuration WHEN checking if registered THEN returns false", async () => { + const nonExistentConfigId = "0x0000000000000000000000000000000000000000000000000000000000000099"; + + const latestVersion = (await diamondCutManager.getLatestVersionByConfiguration(nonExistentConfigId)).toNumber(); + expect(latestVersion).to.equal(0); + + const isRegistered = await diamondCutManager.isResolverProxyConfigurationRegistered(nonExistentConfigId, 1); + expect(isRegistered).to.be.false; + + await expect( + diamondCutManager.checkResolverProxyConfigurationRegistered(nonExistentConfigId, 1), + ).to.be.rejectedWith("ResolverProxyConfigurationNoRegistered"); + }); + + it("GIVEN an existing configuration WHEN checking if registered THEN returns true and does not revert", async () => { + const configId = EQUITY_CONFIG_ID; + + const latestVersion = (await diamondCutManager.getLatestVersionByConfiguration(configId)).toNumber(); + expect(latestVersion).to.equal(1); + + const isRegistered = await diamondCutManager.isResolverProxyConfigurationRegistered(configId, 1); + expect(isRegistered).to.be.true; + + await expect(diamondCutManager.checkResolverProxyConfigurationRegistered(configId, 1)).to.not.be.rejected; + + const isRegisteredV0 = await diamondCutManager.isResolverProxyConfigurationRegistered(configId, 0); + expect(isRegisteredV0).to.be.true; + }); }); diff --git a/packages/ats/contracts/test/contracts/unit/resolver/diamondLoupeFacet.test.ts b/packages/ats/contracts/test/contracts/unit/resolver/diamondLoupeFacet.test.ts new file mode 100644 index 000000000..70d3dbfe8 --- /dev/null +++ b/packages/ats/contracts/test/contracts/unit/resolver/diamondLoupeFacet.test.ts @@ -0,0 +1,341 @@ +import { expect } from "chai"; +import { ethers } from "hardhat"; +import { SignerWithAddress } from "@nomiclabs/hardhat-ethers/signers.js"; +import { DiamondLoupeFacet } from "@contract-types"; +import { deployEquityTokenFixture } from "test/fixtures"; +import { loadFixture } from "@nomicfoundation/hardhat-network-helpers"; + +describe("DiamondLoupeFacet", () => { + let signer_A: SignerWithAddress; + + let diamondLoupe: DiamondLoupeFacet; + + before(async () => { + const base = await loadFixture(deployEquityTokenFixture); + signer_A = base.deployer; + + diamondLoupe = await ethers.getContractAt("DiamondLoupeFacet", base.diamond.address, signer_A); + }); + + describe("getFacets functionality", () => { + it("GIVEN a resolver WHEN getting all facets THEN returns correct facets", async () => { + const facets = await diamondLoupe.getFacets(); + + expect(facets.length).to.be.greaterThan(0); + + for (const facet of facets) { + expect(facet.id).to.exist; + expect(facet.addr).to.exist; + expect(facet.addr).to.not.equal("0x0000000000000000000000000000000000000000"); + expect(facet.selectors).to.exist; + expect(facet.selectors.length).to.be.greaterThan(0); + expect(facet.interfaceIds).to.exist; + } + }); + + it("GIVEN a resolver WHEN getting facets length THEN returns correct count", async () => { + const facetsLength = await diamondLoupe.getFacetsLength(); + const facets = await diamondLoupe.getFacets(); + + expect(facetsLength.toNumber()).to.equal(facets.length); + expect(facetsLength.toNumber()).to.be.greaterThan(0); + }); + + it("GIVEN a resolver WHEN getting facets by page THEN returns paginated results", async () => { + const facetsLength = await diamondLoupe.getFacetsLength(); + const allFacets = await diamondLoupe.getFacets(); + + const pageLength = 2; + const firstPage = await diamondLoupe.getFacetsByPage(0, pageLength); + + expect(firstPage.length).to.equal(Math.min(pageLength, facetsLength.toNumber())); + + for (let i = 0; i < firstPage.length; i++) { + expect(firstPage[i].id).to.equal(allFacets[i].id); + expect(firstPage[i].addr).to.equal(allFacets[i].addr); + } + + if (facetsLength.toNumber() > pageLength) { + const secondPage = await diamondLoupe.getFacetsByPage(pageLength - 1, pageLength); + expect(secondPage.length).to.be.greaterThan(0); + + for (let i = 0; i < secondPage.length && pageLength + i < allFacets.length; i++) { + expect(secondPage[i].id).to.equal(allFacets[pageLength + i].id); + } + } + }); + }); + + describe("getFacetSelectors functionality", () => { + it("GIVEN a resolver WHEN getting facet selectors THEN returns correct selectors", async () => { + const facets = await diamondLoupe.getFacets(); + expect(facets.length).to.be.greaterThan(0); + + const facetId = facets[0].id; + const selectors = await diamondLoupe.getFacetSelectors(facetId); + + expect(selectors.length).to.be.greaterThan(0); + expect(selectors.length).to.equal(facets[0].selectors.length); + expect(selectors).to.have.members(facets[0].selectors); + }); + + it("GIVEN a resolver WHEN getting facet selectors length THEN returns correct count", async () => { + const facets = await diamondLoupe.getFacets(); + const facetId = facets[0].id; + + const selectorsLength = await diamondLoupe.getFacetSelectorsLength(facetId); + const selectors = await diamondLoupe.getFacetSelectors(facetId); + + expect(selectorsLength.toNumber()).to.equal(selectors.length); + expect(selectorsLength.toNumber()).to.be.greaterThan(0); + }); + + it("GIVEN a resolver WHEN getting facet selectors by page THEN returns paginated selectors", async () => { + const facets = await diamondLoupe.getFacets(); + const facetId = facets[0].id; + const allSelectors = await diamondLoupe.getFacetSelectors(facetId); + + const pageLength = 2; + const firstPage = await diamondLoupe.getFacetSelectorsByPage(facetId, 0, pageLength); + + expect(firstPage.length).to.equal(Math.min(pageLength, allSelectors.length)); + + for (let i = 0; i < firstPage.length; i++) { + expect(firstPage[i]).to.equal(allSelectors[i]); + } + }); + }); + + describe("getFacetIds functionality", () => { + it("GIVEN a resolver WHEN getting facet IDs THEN returns all facet IDs", async () => { + const facetIds = await diamondLoupe.getFacetIds(); + const facets = await diamondLoupe.getFacets(); + + expect(facetIds.length).to.equal(facets.length); + + const facetIdsFromFacets = facets.map((f) => f.id); + expect(facetIds).to.have.members(facetIdsFromFacets); + }); + + it("GIVEN a resolver WHEN getting facet IDs by page THEN returns paginated IDs", async () => { + const allIds = await diamondLoupe.getFacetIds(); + const pageLength = 2; + const firstPage = await diamondLoupe.getFacetIdsByPage(0, pageLength); + + expect(firstPage.length).to.equal(Math.min(pageLength, allIds.length)); + + for (let i = 0; i < firstPage.length; i++) { + expect(firstPage[i]).to.equal(allIds[i]); + } + }); + }); + + describe("getFacetAddresses functionality", () => { + it("GIVEN a resolver WHEN getting facet addresses THEN returns all addresses", async () => { + const facetAddresses = await diamondLoupe.getFacetAddresses(); + const facets = await diamondLoupe.getFacets(); + + expect(facetAddresses.length).to.equal(facets.length); + + const addressesFromFacets = facets.map((f) => f.addr); + expect(facetAddresses).to.have.members(addressesFromFacets); + + for (const addr of facetAddresses) { + expect(addr).to.not.equal("0x0000000000000000000000000000000000000000"); + } + }); + + it("GIVEN a resolver WHEN getting facet addresses by page THEN returns paginated addresses", async () => { + const allAddresses = await diamondLoupe.getFacetAddresses(); + const pageLength = 2; + const firstPage = await diamondLoupe.getFacetAddressesByPage(0, pageLength); + + expect(firstPage.length).to.equal(Math.min(pageLength, allAddresses.length)); + + for (let i = 0; i < firstPage.length; i++) { + expect(firstPage[i]).to.equal(allAddresses[i]); + } + }); + }); + + describe("getFacet and getFacetAddress functionality", () => { + it("GIVEN a resolver WHEN getting facet by ID THEN returns correct facet", async () => { + const allFacets = await diamondLoupe.getFacets(); + const testFacetId = allFacets[0].id; + + const facet = await diamondLoupe.getFacet(testFacetId); + + expect(facet.id).to.equal(testFacetId); + expect(facet.addr).to.equal(allFacets[0].addr); + expect(facet.selectors).to.have.members(allFacets[0].selectors); + expect(facet.interfaceIds).to.have.members(allFacets[0].interfaceIds); + }); + + it("GIVEN a resolver WHEN getting facet address by selector THEN returns correct address", async () => { + const allFacets = await diamondLoupe.getFacets(); + const testFacet = allFacets[0]; + const testSelector = testFacet.selectors[0]; + + const facetAddress = await diamondLoupe.getFacetAddress(testSelector); + + expect(facetAddress).to.equal(testFacet.addr); + expect(facetAddress).to.not.equal("0x0000000000000000000000000000000000000000"); + }); + + it("GIVEN a resolver WHEN getting facet ID by selector THEN returns correct ID", async () => { + const allFacets = await diamondLoupe.getFacets(); + const testFacet = allFacets[0]; + const testSelector = testFacet.selectors[0]; + + const facetId = await diamondLoupe.getFacetIdBySelector(testSelector); + + expect(facetId).to.equal(testFacet.id); + }); + + it("GIVEN a resolver WHEN getting facet address for non-existent selector THEN returns zero address", async () => { + const nonExistentSelector = "0x00000001"; + const facetAddress = await diamondLoupe.getFacetAddress(nonExistentSelector); + + expect(facetAddress).to.equal("0x0000000000000000000000000000000000000000"); + }); + }); + + describe("supportsInterface functionality", () => { + it("GIVEN a resolver WHEN checking supported interface THEN returns true for valid interfaces", async () => { + const allFacets = await diamondLoupe.getFacets(); + + for (const facet of allFacets) { + for (const interfaceId of facet.interfaceIds) { + const isSupported = await diamondLoupe.supportsInterface(interfaceId); + expect(isSupported).to.be.true; + } + } + }); + + it("GIVEN a resolver WHEN checking non-existent interface THEN returns false", async () => { + const nonExistentInterfaceId = "0x00000001"; + const isSupported = await diamondLoupe.supportsInterface(nonExistentInterfaceId); + + expect(isSupported).to.be.false; + }); + + it("GIVEN a resolver WHEN checking ERC165 interface THEN returns true", async () => { + const erc165InterfaceId = "0x01ffc9a7"; + const isSupported = await diamondLoupe.supportsInterface(erc165InterfaceId); + + expect(isSupported).to.be.true; + }); + + it("GIVEN a resolver WHEN checking IAccessControl interface THEN returns true", async () => { + const diamondLoupeInterfaceId = "0xd1496c36"; // IAccessControl interface ID + const isSupported = await diamondLoupe.supportsInterface(diamondLoupeInterfaceId); + + expect(isSupported).to.be.true; + }); + }); + + describe("Cross-validation tests", () => { + it("GIVEN a resolver WHEN validating consistency across methods THEN all data matches", async () => { + const facets = await diamondLoupe.getFacets(); + const facetIds = await diamondLoupe.getFacetIds(); + const facetAddresses = await diamondLoupe.getFacetAddresses(); + const facetsLength = await diamondLoupe.getFacetsLength(); + + expect(facets.length).to.equal(facetsLength.toNumber()); + expect(facetIds.length).to.equal(facetsLength.toNumber()); + expect(facetAddresses.length).to.equal(facetsLength.toNumber()); + + for (let i = 0; i < facets.length; i++) { + expect(facets[i].id).to.equal(facetIds[i]); + expect(facets[i].addr).to.equal(facetAddresses[i]); + + const individualFacet = await diamondLoupe.getFacet(facets[i].id); + expect(individualFacet.id).to.equal(facets[i].id); + expect(individualFacet.addr).to.equal(facets[i].addr); + expect(individualFacet.selectors).to.have.members(facets[i].selectors); + + const selectorsLength = await diamondLoupe.getFacetSelectorsLength(facets[i].id); + expect(selectorsLength.toNumber()).to.equal(facets[i].selectors.length); + + const selectors = await diamondLoupe.getFacetSelectors(facets[i].id); + expect(selectors).to.have.members(facets[i].selectors); + + for (const selector of facets[i].selectors) { + const facetAddress = await diamondLoupe.getFacetAddress(selector); + expect(facetAddress).to.equal(facets[i].addr); + + const facetId = await diamondLoupe.getFacetIdBySelector(selector); + expect(facetId).to.equal(facets[i].id); + } + } + }); + + it("GIVEN a resolver WHEN validating selectors THEN no selector is registered multiple times", async () => { + const facets = await diamondLoupe.getFacets(); + const allSelectors: string[] = []; + + for (const facet of facets) { + for (const selector of facet.selectors) { + expect(allSelectors).to.not.include(selector, `Selector ${selector} is registered in multiple facets`); + allSelectors.push(selector); + } + } + + expect(allSelectors.length).to.be.greaterThan(0); + }); + + it("GIVEN a resolver WHEN validating facet IDs THEN no facet ID is registered multiple times", async () => { + const facetIds = await diamondLoupe.getFacetIds(); + const uniqueFacetIds = new Set(facetIds); + + expect(facetIds.length).to.equal(uniqueFacetIds.size, "Some facet IDs are registered multiple times"); + }); + + it("GIVEN a resolver WHEN validating interface IDs THEN all are properly registered", async () => { + const facets = await diamondLoupe.getFacets(); + + for (const facet of facets) { + for (const interfaceId of facet.interfaceIds) { + const isSupported = await diamondLoupe.supportsInterface(interfaceId); + expect(isSupported).to.be.true; + } + } + }); + }); + + describe("Edge cases and boundary tests", () => { + it("GIVEN a resolver WHEN getting facets by page with zero length THEN returns empty array", async () => { + const facets = await diamondLoupe.getFacetsByPage(0, 0); + expect(facets.length).to.equal(0); + }); + + it("GIVEN a resolver WHEN getting facets by page beyond available data THEN returns empty array", async () => { + const facetsLength = await diamondLoupe.getFacetsLength(); + const facets = await diamondLoupe.getFacetsByPage(facetsLength.toNumber() + 100, 10); + expect(facets.length).to.equal(0); + }); + + it("GIVEN a resolver WHEN getting facet selectors by page with zero length THEN returns empty array", async () => { + const allFacets = await diamondLoupe.getFacets(); + const facetId = allFacets[0].id; + + const selectors = await diamondLoupe.getFacetSelectorsByPage(facetId, 0, 0); + expect(selectors.length).to.equal(0); + }); + + it("GIVEN a resolver WHEN getting facet for zero ID THEN returns facet with zero address", async () => { + const zeroId = "0x0000000000000000000000000000000000000000000000000000000000000000"; + const facet = await diamondLoupe.getFacet(zeroId); + + expect(facet.addr).to.equal("0x0000000000000000000000000000000000000000"); + expect(facet.selectors.length).to.equal(0); + }); + + it("GIVEN a resolver WHEN getting large page of facets THEN returns all available", async () => { + const facetsLength = await diamondLoupe.getFacetsLength(); + const largePage = await diamondLoupe.getFacetsByPage(0, 10000); + + expect(largePage.length).to.equal(facetsLength.toNumber()); + }); + }); +}); diff --git a/packages/ats/contracts/test/fixtures/index.ts b/packages/ats/contracts/test/fixtures/index.ts index ffa0eb6a1..2dff43417 100644 --- a/packages/ats/contracts/test/fixtures/index.ts +++ b/packages/ats/contracts/test/fixtures/index.ts @@ -24,6 +24,18 @@ export { deployEquityTokenFixture, DEFAULT_EQUITY_PARAMS, getEquityDetails } fro export { deployBondTokenFixture, DEFAULT_BOND_PARAMS, getBondDetails } from "./tokens/bond.fixture"; +export { deployBondFixedRateTokenFixture, DEFAULT_BOND_FIXED_RATE_PARAMS } from "./tokens/bondFixedRate.fixture"; + +export { + deployBondKpiLinkedRateTokenFixture, + DEFAULT_BOND_KPI_LINKED_RATE_PARAMS, +} from "./tokens/bondKpiLinkedRate.fixture"; + +export { + deployBondSustainabilityPerformanceTargetRateTokenFixture, + DEFAULT_BOND_SUSTAINABILITY_PERFORMANCE_TARGET_RATE_PARAMS, +} from "./tokens/bondSustainabilityPerformanceTargetRate.fixture"; + // Common token utilities export { MAX_UINT256, diff --git a/packages/ats/contracts/test/fixtures/infrastructure.fixture.ts b/packages/ats/contracts/test/fixtures/infrastructure.fixture.ts index fff2e3406..9c1465300 100644 --- a/packages/ats/contracts/test/fixtures/infrastructure.fixture.ts +++ b/packages/ats/contracts/test/fixtures/infrastructure.fixture.ts @@ -102,5 +102,28 @@ export async function deployAtsInfrastructureFixture( }, {} as Record, ), + bondFixedRateFacetKeys: deployment.helpers.getBondFixedRateFacets().reduce( + (acc, f) => { + acc[f.name] = f.key; + return acc; + }, + {} as Record, + ), + bondKpiLinkedRateFacetKeys: deployment.helpers.getBondKpiLinkedRateFacets().reduce( + (acc, f) => { + acc[f.name] = f.key; + return acc; + }, + {} as Record, + ), + bondSustainabilityPerformanceTargetRateFacetKeys: deployment.helpers + .getBondSustainabilityPerformanceTargetRateFacets() + .reduce( + (acc, f) => { + acc[f.name] = f.key; + return acc; + }, + {} as Record, + ), }; } diff --git a/packages/ats/contracts/test/fixtures/tokens/bond.fixture.ts b/packages/ats/contracts/test/fixtures/tokens/bond.fixture.ts index d6b61ff62..e5ce0322f 100644 --- a/packages/ats/contracts/test/fixtures/tokens/bond.fixture.ts +++ b/packages/ats/contracts/test/fixtures/tokens/bond.fixture.ts @@ -10,6 +10,7 @@ import { DeployBondFromFactoryParams, deployBondFromFactory } from "@scripts/dom import { BondDetailsDataParams, FactoryRegulationDataParams } from "@scripts/domain"; import { getRegulationData, getSecurityData } from "./common.fixture"; import { getDltTimestamp } from "@test"; +import { loadFixture } from "@nomicfoundation/hardhat-network-helpers"; /** * Default bond token parameters. @@ -53,11 +54,15 @@ export async function getBondDetails(params?: DeepPartial export async function deployBondTokenFixture({ bondDataParams, regulationTypeParams, + useLoadFixture = true, }: { bondDataParams?: DeepPartial; regulationTypeParams?: DeepPartial; + useLoadFixture?: boolean; } = {}) { - const infrastructure = await deployAtsInfrastructureFixture(); + const infrastructure = useLoadFixture + ? await loadFixture(deployAtsInfrastructureFixture) + : await deployAtsInfrastructureFixture(); const { factory, blr, deployer } = infrastructure; const securityData = getSecurityData(blr, { diff --git a/packages/ats/contracts/test/fixtures/tokens/bondFixedRate.fixture.ts b/packages/ats/contracts/test/fixtures/tokens/bondFixedRate.fixture.ts new file mode 100644 index 000000000..f84018848 --- /dev/null +++ b/packages/ats/contracts/test/fixtures/tokens/bondFixedRate.fixture.ts @@ -0,0 +1,102 @@ +import { deployAtsInfrastructureFixture } from "../infrastructure.fixture"; +import { CURRENCIES, DeepPartial, BOND_FIXED_RATE_CONFIG_ID } from "../../../scripts"; +import { + AccessControlFacet__factory, + PauseFacet__factory, + KycFacet__factory, + ControlListFacet__factory, +} from "@contract-types"; +import { DeployBondFromFactoryParams, FixedRateParams, deployBondFixedRateFromFactory } from "@scripts/domain"; +import { FactoryRegulationDataParams } from "@scripts/domain"; +import { getRegulationData, getSecurityData } from "./common.fixture"; +import { getBondDetails } from "./bond.fixture"; +import { getDltTimestamp } from "@test"; + +/** + * Default bond token parameters. + * Override by passing custom params to fixture functions. + */ +export const DEFAULT_BOND_FIXED_RATE_PARAMS = { + currency: CURRENCIES.USD, + nominalValue: 100, + nominalValueDecimals: 2, + proceedRecipients: [] as string[], + proceedRecipientsData: [] as string[], + startingDate: async () => { + return (await getDltTimestamp()) + 3600; //block.timestamp + 1 hour + }, + rate: 50, + rateDecimals: 1, +} as const; + +/** + * Fixture: Deploy ATS infrastructure + single Bond token + * + * Extends deployAtsInfrastructureFixture with a deployed bond token + * using default parameters (single partition, controllable, internal KYC). + * + * @param tokenParams - Optional custom token parameters (merged with defaults) + * @returns Infrastructure + deployed bond token + connected facets + */ +export async function deployBondFixedRateTokenFixture({ + bondDataParams, + regulationTypeParams, + fixedRateParams, +}: { + bondDataParams?: DeepPartial; + regulationTypeParams?: DeepPartial; + fixedRateParams?: DeepPartial; +} = {}) { + const infrastructure = await deployAtsInfrastructureFixture(); + const { factory, blr, deployer } = infrastructure; + + const securityData = getSecurityData(blr, { + ...bondDataParams?.securityData, + resolverProxyConfiguration: { + key: BOND_FIXED_RATE_CONFIG_ID, + version: 1, + }, + }); + const bondDetails = await getBondDetails(bondDataParams?.bondDetails); + + const diamond = await deployBondFixedRateFromFactory( + { + adminAccount: deployer.address, + factory: factory, + securityData, + bondDetails, + proceedRecipients: [ + ...((bondDataParams?.proceedRecipients as string[]) ?? DEFAULT_BOND_FIXED_RATE_PARAMS.proceedRecipients), + ], + proceedRecipientsData: [ + ...((bondDataParams?.proceedRecipientsData as string[]) ?? + DEFAULT_BOND_FIXED_RATE_PARAMS.proceedRecipientsData), + ], + }, + getRegulationData(regulationTypeParams), + { + rate: fixedRateParams?.rate ?? DEFAULT_BOND_FIXED_RATE_PARAMS.rate, + rateDecimals: fixedRateParams?.rateDecimals ?? DEFAULT_BOND_FIXED_RATE_PARAMS.rateDecimals, + }, + ); + + // Connect commonly used facets to diamond + const accessControlFacet = AccessControlFacet__factory.connect(diamond.address, deployer); + const pauseFacet = PauseFacet__factory.connect(diamond.address, deployer); + const kycFacet = KycFacet__factory.connect(diamond.address, deployer); + const controlListFacet = ControlListFacet__factory.connect(diamond.address, deployer); + + return { + ...infrastructure, + + // Token + diamond, + tokenAddress: diamond.address, + + // Connected facets (most commonly used) + accessControlFacet, + pauseFacet, + kycFacet, + controlListFacet, + }; +} diff --git a/packages/ats/contracts/test/fixtures/tokens/bondKpiLinkedRate.fixture.ts b/packages/ats/contracts/test/fixtures/tokens/bondKpiLinkedRate.fixture.ts new file mode 100644 index 000000000..63b8e7c23 --- /dev/null +++ b/packages/ats/contracts/test/fixtures/tokens/bondKpiLinkedRate.fixture.ts @@ -0,0 +1,140 @@ +import { deployAtsInfrastructureFixture } from "../infrastructure.fixture"; +import { CURRENCIES, DeepPartial, BOND_KPI_LINKED_RATE_CONFIG_ID, ADDRESS_ZERO } from "../../../scripts"; +import { + AccessControlFacet__factory, + PauseFacet__factory, + KycFacet__factory, + ControlListFacet__factory, +} from "@contract-types"; +import { + DeployBondFromFactoryParams, + InterestRateParams, + ImpactDataParams, + deployBondKpiLinkedRateFromFactory, +} from "@scripts/domain"; +import { FactoryRegulationDataParams } from "@scripts/domain"; +import { getRegulationData, getSecurityData } from "./common.fixture"; +import { getBondDetails } from "./bond.fixture"; +import { getDltTimestamp } from "@test"; + +/** + * Default bond token parameters. + * Override by passing custom params to fixture functions. + */ +export const DEFAULT_BOND_KPI_LINKED_RATE_PARAMS = { + currency: CURRENCIES.USD, + nominalValue: 100, + nominalValueDecimals: 2, + proceedRecipients: [] as string[], + proceedRecipientsData: [] as string[], + startingDate: async () => { + return (await getDltTimestamp()) + 3600; //block.timestamp + 1 hour + }, + maxRate: 100, + baseRate: 75, + minRate: 50, + startPeriod: 1000, + startRate: 60, + missedPenalty: 10, + reportPeriod: 2000, + rateDecimals: 1, + maxDeviationCap: 1000, + baseLine: 750, + maxDeviationFloor: 500, + impactDataDecimals: 2, + adjustmentPrecision: 2, + kpiOracle: ADDRESS_ZERO, +} as const; + +/** + * Fixture: Deploy ATS infrastructure + single Bond token + * + * Extends deployAtsInfrastructureFixture with a deployed bond token + * using default parameters (single partition, controllable, internal KYC). + * + * @param tokenParams - Optional custom token parameters (merged with defaults) + * @returns Infrastructure + deployed bond token + connected facets + */ +export async function deployBondKpiLinkedRateTokenFixture({ + bondDataParams, + regulationTypeParams, + interestRateParams, + impactDataParams, + kpiOracle, +}: { + bondDataParams?: DeepPartial; + regulationTypeParams?: DeepPartial; + interestRateParams?: DeepPartial; + impactDataParams?: DeepPartial; + kpiOracle?: string; +} = {}) { + const infrastructure = await deployAtsInfrastructureFixture(); + const { factory, blr, deployer } = infrastructure; + + const securityData = getSecurityData(blr, { + internalKycActivated: false, + ...bondDataParams?.securityData, + resolverProxyConfiguration: { + key: BOND_KPI_LINKED_RATE_CONFIG_ID, + version: 1, + }, + }); + const bondDetails = await getBondDetails(bondDataParams?.bondDetails); + const interestRate = { + maxRate: interestRateParams?.maxRate ?? 0, + baseRate: interestRateParams?.baseRate ?? 0, + minRate: interestRateParams?.minRate ?? 0, + startPeriod: interestRateParams?.startPeriod ?? 0, + startRate: interestRateParams?.startRate ?? 0, + missedPenalty: interestRateParams?.missedPenalty ?? 0, + reportPeriod: interestRateParams?.reportPeriod ?? 0, + rateDecimals: interestRateParams?.rateDecimals ?? 0, + }; + const impactData = { + maxDeviationCap: impactDataParams?.maxDeviationCap ?? 0, + baseLine: impactDataParams?.baseLine ?? 0, + maxDeviationFloor: impactDataParams?.maxDeviationFloor ?? 0, + impactDataDecimals: impactDataParams?.impactDataDecimals ?? 0, + adjustmentPrecision: impactDataParams?.adjustmentPrecision ?? 0, + }; + + const diamond = await deployBondKpiLinkedRateFromFactory( + { + adminAccount: deployer.address, + factory: factory, + securityData, + bondDetails, + proceedRecipients: [ + ...((bondDataParams?.proceedRecipients as string[]) ?? DEFAULT_BOND_KPI_LINKED_RATE_PARAMS.proceedRecipients), + ], + proceedRecipientsData: [ + ...((bondDataParams?.proceedRecipientsData as string[]) ?? + DEFAULT_BOND_KPI_LINKED_RATE_PARAMS.proceedRecipientsData), + ], + }, + getRegulationData(regulationTypeParams), + interestRate, + impactData, + kpiOracle ?? "0x0000000000000000000000000000000000000000", + ); + + // Connect commonly used facets to diamond + const accessControlFacet = AccessControlFacet__factory.connect(diamond.address, deployer); + const pauseFacet = PauseFacet__factory.connect(diamond.address, deployer); + const kycFacet = KycFacet__factory.connect(diamond.address, deployer); + const controlListFacet = ControlListFacet__factory.connect(diamond.address, deployer); + + return { + ...infrastructure, + + // Token + diamond, + tokenAddress: diamond.address, + + // Connected facets (most commonly used) + accessControlFacet, + pauseFacet, + kycFacet, + controlListFacet, + }; +} diff --git a/packages/ats/contracts/test/fixtures/tokens/bondSustainabilityPerformanceTargetRate.fixture.ts b/packages/ats/contracts/test/fixtures/tokens/bondSustainabilityPerformanceTargetRate.fixture.ts new file mode 100644 index 000000000..32ec27413 --- /dev/null +++ b/packages/ats/contracts/test/fixtures/tokens/bondSustainabilityPerformanceTargetRate.fixture.ts @@ -0,0 +1,146 @@ +import { deployAtsInfrastructureFixture } from "../infrastructure.fixture"; +import { + CURRENCIES, + DeepPartial, + BOND_SUSTAINABILITY_PERFORMANCE_TARGET_RATE_CONFIG_ID, + ADDRESS_ZERO, +} from "../../../scripts"; +import { + AccessControlFacet__factory, + PauseFacet__factory, + KycFacet__factory, + ControlListFacet__factory, +} from "@contract-types"; +import { + DeployBondFromFactoryParams, + InterestRateParamsSPT, + ImpactDataParamsSPT, + deployBondSustainabilityPerformanceTargetRateFromFactory, +} from "@scripts/domain"; +import { FactoryRegulationDataParams } from "@scripts/domain"; +import { getRegulationData, getSecurityData } from "./common.fixture"; +import { getBondDetails } from "./bond.fixture"; +import { getDltTimestamp } from "@test"; + +/** + * Default bond sustainability performance target rate token parameters. + * Override by passing custom params to fixture functions. + */ +export const DEFAULT_BOND_SUSTAINABILITY_PERFORMANCE_TARGET_RATE_PARAMS = { + currency: CURRENCIES.USD, + nominalValue: 100, + nominalValueDecimals: 2, + proceedRecipients: [] as string[], + proceedRecipientsData: [] as string[], + startingDate: async () => { + return (await getDltTimestamp()) + 3600; //block.timestamp + 1 hour + }, + baseRate: 50, + startPeriod: 1000, + startRate: 50, + rateDecimals: 1, + baseLine: 750, + baseLineMode: 0, // MINIMUM + deltaRate: 10, + impactDataMode: 0, // PENALTY + projects: [] as string[], +} as const; + +/** + * Fixture: Deploy ATS infrastructure + single Bond Sustainability Performance Target Rate token + * + * Extends deployAtsInfrastructureFixture with a deployed bond token + * using default parameters (single partition, controllable, internal KYC). + * + * @param tokenParams - Optional custom token parameters (merged with defaults) + * @returns Infrastructure + deployed bond token + connected facets + */ +export async function deployBondSustainabilityPerformanceTargetRateTokenFixture({ + bondDataParams, + regulationTypeParams, + interestRateParams, + impactDataParams, + projects, +}: { + bondDataParams?: DeepPartial; + regulationTypeParams?: DeepPartial; + interestRateParams?: DeepPartial; + impactDataParams?: DeepPartial[]; + projects?: string[]; +} = {}) { + const infrastructure = await deployAtsInfrastructureFixture(); + const { factory, blr, deployer } = infrastructure; + + const securityData = getSecurityData(blr, { + internalKycActivated: false, + ...bondDataParams?.securityData, + resolverProxyConfiguration: { + key: BOND_SUSTAINABILITY_PERFORMANCE_TARGET_RATE_CONFIG_ID, + version: 1, + }, + }); + const bondDetails = await getBondDetails(bondDataParams?.bondDetails); + const interestRate = { + baseRate: interestRateParams?.baseRate ?? 0, + startPeriod: interestRateParams?.startPeriod ?? 0, + startRate: interestRateParams?.startRate ?? 0, + rateDecimals: interestRateParams?.rateDecimals ?? 0, + }; + + // Use default project if none provided + const projectsList = projects ?? []; + + // Create impact data array (one per project) + const impactDataArray: ImpactDataParamsSPT[] = projectsList + ? projectsList.map((_, index) => { + const params = impactDataParams?.[index]; + return { + baseLine: params?.baseLine ?? 0, + baseLineMode: params?.baseLineMode ?? 0, + deltaRate: params?.deltaRate ?? 0, + impactDataMode: params?.impactDataMode ?? 0, + }; + }) + : []; + + const diamond = await deployBondSustainabilityPerformanceTargetRateFromFactory( + { + adminAccount: deployer.address, + factory: factory, + securityData, + bondDetails, + proceedRecipients: [ + ...((bondDataParams?.proceedRecipients as string[]) ?? + DEFAULT_BOND_SUSTAINABILITY_PERFORMANCE_TARGET_RATE_PARAMS.proceedRecipients), + ], + proceedRecipientsData: [ + ...((bondDataParams?.proceedRecipientsData as string[]) ?? + DEFAULT_BOND_SUSTAINABILITY_PERFORMANCE_TARGET_RATE_PARAMS.proceedRecipientsData), + ], + }, + getRegulationData(regulationTypeParams), + interestRate, + impactDataArray, + projectsList, + ); + + // Connect commonly used facets to diamond + const accessControlFacet = AccessControlFacet__factory.connect(diamond.address, deployer); + const pauseFacet = PauseFacet__factory.connect(diamond.address, deployer); + const kycFacet = KycFacet__factory.connect(diamond.address, deployer); + const controlListFacet = ControlListFacet__factory.connect(diamond.address, deployer); + + return { + ...infrastructure, + + // Token + diamond, + tokenAddress: diamond.address, + + // Connected facets (most commonly used) + accessControlFacet, + pauseFacet, + kycFacet, + controlListFacet, + }; +} diff --git a/packages/ats/contracts/test/fixtures/tokens/equity.fixture.ts b/packages/ats/contracts/test/fixtures/tokens/equity.fixture.ts index e9bf958d6..652fbd47b 100644 --- a/packages/ats/contracts/test/fixtures/tokens/equity.fixture.ts +++ b/packages/ats/contracts/test/fixtures/tokens/equity.fixture.ts @@ -19,6 +19,7 @@ import { } from "@contract-types"; import { DividendRight, EquityDetailsDataParams, FactoryRegulationDataParams } from "@scripts/domain"; import { getRegulationData, getSecurityData } from "./common.fixture"; +import { loadFixture } from "@nomicfoundation/hardhat-network-helpers"; /** * Default equity token parameters. @@ -66,11 +67,15 @@ export function getEquityDetails(params?: DeepPartial) export async function deployEquityTokenFixture({ equityDataParams, regulationTypeParams, + useLoadFixture = true, }: { equityDataParams?: DeepPartial; regulationTypeParams?: DeepPartial; + useLoadFixture?: boolean; } = {}) { - const infrastructure = await deployAtsInfrastructureFixture(); + const infrastructure = useLoadFixture + ? await loadFixture(deployAtsInfrastructureFixture) + : await deployAtsInfrastructureFixture(); const { factory, blr, deployer } = infrastructure; const securityData = getSecurityData(blr, equityDataParams?.securityData); const equityDetails = getEquityDetails(equityDataParams?.equityDetails); diff --git a/packages/ats/contracts/test/scripts/integration/additionalFacetsRegistration.test.ts b/packages/ats/contracts/test/scripts/integration/additionalFacetsRegistration.test.ts index 65eeacb16..9618338dd 100644 --- a/packages/ats/contracts/test/scripts/integration/additionalFacetsRegistration.test.ts +++ b/packages/ats/contracts/test/scripts/integration/additionalFacetsRegistration.test.ts @@ -108,9 +108,9 @@ describe("registerAdditionalFacets - Integration Tests", () => { // Verify success expect(result.success).to.be.true; expect(result.blrAddress).to.equal(blrAddress); - expect(result.transactionHash).to.exist; - expect(result.blockNumber).to.be.greaterThan(0); - expect(result.gasUsed).to.be.greaterThan(0); + expect(result.transactionHashes).to.exist; + expect(result.blockNumbers).to.exist; + expect(result.transactionGas).to.exist; // Verify registered count includes new facets expect(result.registered.length).to.equal(TEST_SIZES.DUAL); diff --git a/packages/ats/contracts/test/scripts/integration/deploymentSystem.test.ts b/packages/ats/contracts/test/scripts/integration/deploymentSystem.test.ts index 5e086a8f1..365096758 100644 --- a/packages/ats/contracts/test/scripts/integration/deploymentSystem.test.ts +++ b/packages/ats/contracts/test/scripts/integration/deploymentSystem.test.ts @@ -297,7 +297,7 @@ describe("Phase 1 Deployment System - Integration Tests", () => { expect(registerResult.success).to.be.true; expect(registerResult.blrAddress).to.equal(blrResult.proxyAddress); expect(registerResult.registered.length).to.equal(TEST_SIZES.DUAL); - expect(registerResult.transactionHash).to.exist; + expect(registerResult.transactionHashes).to.exist; }); it("should register single facet", async () => { diff --git a/packages/ats/contracts/test/scripts/unit/checkpoint/utils.test.ts b/packages/ats/contracts/test/scripts/unit/checkpoint/utils.test.ts index 9c32ce09f..b6c800338 100644 --- a/packages/ats/contracts/test/scripts/unit/checkpoint/utils.test.ts +++ b/packages/ats/contracts/test/scripts/unit/checkpoint/utils.test.ts @@ -75,6 +75,24 @@ describe("Checkpoint Utilities", () => { facetCount: 43, txHash: "0xpqr678", }, + bondFixedRate: { + configId: "0x0000000000000000000000000000000000000000000000000000000000000003", + version: 1, + facetCount: 47, + txHash: "0xabc789", + }, + bondKpiLinkedRate: { + configId: "0x0000000000000000000000000000000000000000000000000000000000000004", + version: 1, + facetCount: 47, + txHash: "0xdef123", + }, + bondSustainabilityPerformanceTargetRate: { + configId: "0x0000000000000000000000000000000000000000000000000000000000000005", + version: 1, + facetCount: 47, + txHash: "0xghi456", + }, }, factory: { address: "0x5555555555555555555555555555555555555555", @@ -129,11 +147,16 @@ describe("Checkpoint Utilities", () => { ); expect(output.configurations.bond.version).to.equal(1); expect(output.configurations.bond.facetCount).to.equal(43); + expect(output.configurations.bondFixedRate.configId).to.equal( + "0x0000000000000000000000000000000000000000000000000000000000000003", + ); + expect(output.configurations.bondFixedRate.version).to.equal(1); + expect(output.configurations.bondFixedRate.facetCount).to.equal(47); // Summary expect(output.summary.totalContracts).to.equal(5); // ProxyAdmin + BLR + Factory + 2 facets expect(output.summary.totalFacets).to.equal(2); - expect(output.summary.totalConfigurations).to.equal(2); + expect(output.summary.totalConfigurations).to.equal(3); expect(output.summary.success).to.be.true; expect(output.summary.deploymentTime).to.be.a("number"); expect(output.summary.gasUsed).to.equal("1750000"); // 500000 + 450000 + 800000 @@ -216,6 +239,18 @@ describe("Checkpoint Utilities", () => { facetCount: 0, txHash: "0xpqr678", }, + bondFixedRate: { + configId: "0x0000000000000000000000000000000000000000000000000000000000000003", + version: 1, + facetCount: 0, + txHash: "0xabc789", + }, + bondKpiLinkedRate: { + configId: "0x0000000000000000000000000000000000000000000000000000000000000004", + version: 1, + facetCount: 0, + txHash: "0xdef123", + }, }, }, options: {}, @@ -318,7 +353,9 @@ describe("Checkpoint Utilities", () => { expect(getStepName(3, "newBlr")).to.equal("Register Facets"); expect(getStepName(4, "newBlr")).to.equal("Equity Configuration"); expect(getStepName(5, "newBlr")).to.equal("Bond Configuration"); - expect(getStepName(6, "newBlr")).to.equal("Factory"); + expect(getStepName(6, "newBlr")).to.equal("Bond Fixed Rate Configuration"); + expect(getStepName(7, "newBlr")).to.equal("Bond KpiLinked Rate Configuration"); + expect(getStepName(8, "newBlr")).to.equal("Factory"); }); it("should handle unknown step numbers", () => { @@ -334,7 +371,9 @@ describe("Checkpoint Utilities", () => { expect(getStepName(2, "existingBlr")).to.equal("Register Facets"); expect(getStepName(3, "existingBlr")).to.equal("Equity Configuration"); expect(getStepName(4, "existingBlr")).to.equal("Bond Configuration"); - expect(getStepName(5, "existingBlr")).to.equal("Factory"); + expect(getStepName(5, "existingBlr")).to.equal("Bond Fixed Rate Configuration"); + expect(getStepName(6, "existingBlr")).to.equal("Bond KpiLinked Rate Configuration"); + expect(getStepName(7, "existingBlr")).to.equal("Factory"); }); it("should handle unknown step numbers", () => { @@ -345,12 +384,12 @@ describe("Checkpoint Utilities", () => { }); describe("getTotalSteps", () => { - it("should return 7 for newBlr workflow", () => { - expect(getTotalSteps("newBlr")).to.equal(7); + it("should return 8 for newBlr workflow", () => { + expect(getTotalSteps("newBlr")).to.equal(8); }); - it("should return 6 for existingBlr workflow", () => { - expect(getTotalSteps("existingBlr")).to.equal(6); + it("should return 7 for existingBlr workflow", () => { + expect(getTotalSteps("existingBlr")).to.equal(7); }); }); @@ -373,7 +412,7 @@ describe("Checkpoint Utilities", () => { expect(formatted).to.include("Checkpoint: hedera-testnet-1731085200000"); expect(formatted).to.include("Status: in-progress"); - expect(formatted).to.include("Step: 3/7 - Facets"); + expect(formatted).to.include("Step: 3/8 - Facets"); expect(formatted).to.include("Started: 2025-11-08T10:00:00.000Z"); expect(formatted).to.include("Last Update: 2025-11-08T10:05:00.000Z"); expect(formatted).to.not.include("Failed:"); @@ -411,7 +450,7 @@ describe("Checkpoint Utilities", () => { network: "hedera-testnet", deployer: "0x1234567890123456789012345678901234567890", status: "completed", - currentStep: 6, + currentStep: 8, workflowType: "newBlr", startTime: "2025-11-08T10:00:00.000Z", lastUpdate: "2025-11-08T10:15:00.000Z", @@ -422,7 +461,7 @@ describe("Checkpoint Utilities", () => { const formatted = formatCheckpointStatus(checkpoint); expect(formatted).to.include("Status: completed"); - expect(formatted).to.include("Step: 7/7 - Factory"); + expect(formatted).to.include("Step: 9/8 - Factory"); }); it("should format existingBlr workflow correctly", () => { @@ -441,7 +480,7 @@ describe("Checkpoint Utilities", () => { const formatted = formatCheckpointStatus(checkpoint); - expect(formatted).to.include("Step: 2/6 - Facets"); + expect(formatted).to.include("Step: 2/7 - Facets"); }); }); diff --git a/packages/ats/sdk/src/app/usecase/command/security/operations/transfer/ProtectedTransferAndLockByPartitionCommandHandler.unit.test.ts b/packages/ats/contracts/test/unitTests/layer_1/scheduledTasks/scheduledCouponListing/scheduledCouponListing.test.ts similarity index 53% rename from packages/ats/sdk/src/app/usecase/command/security/operations/transfer/ProtectedTransferAndLockByPartitionCommandHandler.unit.test.ts rename to packages/ats/contracts/test/unitTests/layer_1/scheduledTasks/scheduledCouponListing/scheduledCouponListing.test.ts index 1c2cd9eb0..322135314 100644 --- a/packages/ats/sdk/src/app/usecase/command/security/operations/transfer/ProtectedTransferAndLockByPartitionCommandHandler.unit.test.ts +++ b/packages/ats/contracts/test/unitTests/layer_1/scheduledTasks/scheduledCouponListing/scheduledCouponListing.test.ts @@ -203,201 +203,243 @@ */ -import TransactionService from '@service/transaction/TransactionService'; -import { createMock } from '@golevelup/ts-jest'; -import AccountService from '@service/account/AccountService'; +import { expect } from "chai"; +import { ethers } from "hardhat"; +import { SignerWithAddress } from "@nomiclabs/hardhat-ethers/signers.js"; +import { isinGenerator } from "@thomaschaplin/isin-generator"; import { - AccountPropsFixture, - ErrorMsgFixture, - EvmAddressPropsFixture, - TransactionIdFixture, -} from '@test/fixtures/shared/DataFixture'; -import ContractService from '@service/contract/ContractService'; -import EvmAddress from '@domain/context/contract/EvmAddress'; -import ValidationService from '@service/validation/ValidationService'; -import { ErrorCode } from '@core/error/BaseError'; -import { TransferAndLockCommandFixture } from '@test/fixtures/transfer/TransferFixture'; -import { ProtectedTransferAndLockByPartitionCommandHandler } from './ProtectedTransferAndLockByPartitionCommandHandler'; + type ResolverProxy, + type Bond, + type ScheduledCouponListing, + type AccessControl, + ScheduledCrossOrderedTasks, + TimeTravel, + BusinessLogicResolver, + IFactory, + AccessControl__factory, + Bond__factory, + ScheduledCrossOrderedTasks__factory, + ScheduledCouponListing__factory, + TimeTravel__factory, +} from "@typechain"; import { - ProtectedTransferAndLockByPartitionCommand, - ProtectedTransferAndLockByPartitionCommandResponse, -} from './ProtectedTransferAndLockByPartitionCommand'; -import { ProtectedTransferAndLockByPartitionCommandError } from './error/ProtectedTransferAndLockByPartitionCommandError'; -import Account from '@domain/context/account/Account'; -import { Security } from '@domain/context/security/Security'; -import { SecurityPropsFixture } from '@test/fixtures/shared/SecurityFixture'; -import { KycStatus } from '@domain/context/kyc/Kyc'; -import BigDecimal from '@domain/context/shared/BigDecimal'; -import { faker } from '@faker-js/faker/.'; -import SecurityService from '@service/security/SecurityService'; - -describe('RemoveFromControlListCommandHandler', () => { - let handler: ProtectedTransferAndLockByPartitionCommandHandler; - let command: ProtectedTransferAndLockByPartitionCommand; - - const transactionServiceMock = createMock(); - const validationServiceMock = createMock(); - const accountServiceMock = createMock(); - const contractServiceMock = createMock(); - const securityServiceMock = createMock(); - - const evmAddress = new EvmAddress(EvmAddressPropsFixture.create().value); - const transactionId = TransactionIdFixture.create().id; - const errorMsg = ErrorMsgFixture.create().msg; - const account = new Account(AccountPropsFixture.create()); - const security = new Security(SecurityPropsFixture.create()); - - const lockId = faker.string.hexadecimal({ - length: 64, - prefix: '0x', - }); + CORPORATE_ACTION_ROLE, + PAUSER_ROLE, + deployBondFromFactory, + Rbac, + RegulationSubType, + RegulationType, + deployAtsFullInfrastructure, + DeployAtsFullInfrastructureCommand, + dateToUnixTimestamp, + TIME_PERIODS_S, + InterestRateType, +} from "@scripts"; +import { loadFixture } from "@nomicfoundation/hardhat-network-helpers"; + +const numberOfUnits = 1000; +let startingDate = 9999999999; +const numberOfCoupons = 50; +const frequency = TIME_PERIODS_S.DAY; +let maturityDate = startingDate + numberOfCoupons * frequency; +const countriesControlListType = true; +const listOfCountries = "ES,FR,CH"; +const info = "info"; +const interestRateType = InterestRateType.KPI_BASED_PER_COUPON; + +describe("Scheduled Coupon Listing Tests", () => { + let diamond: ResolverProxy; + let signer_A: SignerWithAddress; + let signer_B: SignerWithAddress; + let signer_C: SignerWithAddress; + + let account_A: string; + let account_B: string; + let account_C: string; + + let factory: IFactory; + let businessLogicResolver: BusinessLogicResolver; + let bondFacet: Bond; + let scheduledCouponListingFacet: ScheduledCouponListing; + let scheduledTasksFacet: ScheduledCrossOrderedTasks; + let accessControlFacet: AccessControl; + let timeTravelFacet: TimeTravel; + + async function deploySecurityFixtureSinglePartition() { + const init_rbacs: Rbac[] = set_initRbacs(); + + diamond = await deployBondFromFactory({ + adminAccount: account_A, + isWhiteList: false, + isControllable: true, + arePartitionsProtected: false, + clearingActive: false, + internalKycActivated: true, + isMultiPartition: false, + name: "TEST_AccessControl", + symbol: "TAC", + decimals: 6, + isin: isinGenerator(), + currency: "0x455552", + numberOfUnits, + nominalValue: 100, + startingDate, + maturityDate, + regulationType: RegulationType.REG_S, + regulationSubType: RegulationSubType.NONE, + countriesControlListType, + listOfCountries, + info, + init_rbacs, + businessLogicResolver: businessLogicResolver.address, + factory, + interestRateType, + }); - beforeEach(() => { - handler = new ProtectedTransferAndLockByPartitionCommandHandler( - securityServiceMock, - transactionServiceMock, - accountServiceMock, - validationServiceMock, - contractServiceMock, + await setFacets(diamond); + } + + async function setFacets(diamond: ResolverProxy) { + accessControlFacet = AccessControl__factory.connect(diamond.address, signer_A); + bondFacet = Bond__factory.connect(diamond.address, signer_A); + scheduledCouponListingFacet = ScheduledCouponListing__factory.connect(diamond.address, signer_A); + scheduledTasksFacet = ScheduledCrossOrderedTasks__factory.connect(diamond.address, signer_A); + timeTravelFacet = TimeTravel__factory.connect(diamond.address, signer_A); + } + + function set_initRbacs(): Rbac[] { + const rbacPause: Rbac = { + role: PAUSER_ROLE, + members: [account_B], + }; + return [rbacPause]; + } + + before(async () => { + //mute | mock console.log + console.log = () => {}; + [signer_A, signer_B, signer_C] = await ethers.getSigners(); + account_A = signer_A.address; + account_B = signer_B.address; + account_C = signer_C.address; + + const { ...deployedContracts } = await deployAtsFullInfrastructure( + await DeployAtsFullInfrastructureCommand.newInstance({ + signer: signer_A, + useDeployed: false, + useEnvironment: true, + timeTravelEnabled: true, + }), ); - command = TransferAndLockCommandFixture.create(); - }); - afterEach(() => { - jest.resetAllMocks(); + factory = deployedContracts.factory.contract; + businessLogicResolver = deployedContracts.businessLogicResolver.contract; }); - describe('execute', () => { - describe('error cases', () => { - it('throws ProtectedTransferAndLockByPartitionCommandError when command fails with uncaught error', async () => { - const fakeError = new Error(errorMsg); - - contractServiceMock.getContractEvmAddress.mockRejectedValue(fakeError); - - const resultPromise = handler.execute(command); + beforeEach(async () => { + await loadFixture(deploySecurityFixtureSinglePartition); + }); - await expect(resultPromise).rejects.toBeInstanceOf( - ProtectedTransferAndLockByPartitionCommandError, - ); + afterEach(async () => { + timeTravelFacet.resetSystemTimestamp(); + }); - await expect(resultPromise).rejects.toMatchObject({ - message: expect.stringContaining( - `An error occurred while protected transferring and locking tokens: ${errorMsg}`, - ), - errorCode: ErrorCode.UncaughtCommandError, - }); - }); - }); - describe('success cases', () => { - it('should successfully protected transfer and lock', async () => { - contractServiceMock.getContractEvmAddress.mockResolvedValue(evmAddress); - accountServiceMock.getAccountEvmAddress.mockResolvedValue(evmAddress); - accountServiceMock.getCurrentAccount.mockReturnValue(account); - securityServiceMock.get.mockResolvedValue(security); - - transactionServiceMock - .getHandler() - .protectedTransferAndLockByPartition.mockResolvedValue({ - id: transactionId, - }); - transactionServiceMock.getTransactionResult.mockResolvedValue(lockId); - - const result = await handler.execute(command); - - expect(result).toBeInstanceOf( - ProtectedTransferAndLockByPartitionCommandResponse, - ); - expect(result.payload).toBe(parseInt(lockId, 16)); - expect(result.transactionId).toBe(transactionId); - - expect(contractServiceMock.getContractEvmAddress).toHaveBeenCalledTimes( - 1, - ); - expect(contractServiceMock.getContractEvmAddress).toHaveBeenCalledWith( - command.securityId, - ); - expect(accountServiceMock.getAccountEvmAddress).toHaveBeenCalledTimes( - 2, - ); - expect(accountServiceMock.getAccountEvmAddress).toHaveBeenNthCalledWith( - 1, - command.targetId, - ); - expect(accountServiceMock.getAccountEvmAddress).toHaveBeenNthCalledWith( - 2, - command.sourceId, - ); - - expect(validationServiceMock.checkPause).toHaveBeenCalledTimes(1); - expect(validationServiceMock.checkPause).toHaveBeenCalledWith( - command.securityId, - ); - expect(validationServiceMock.checkDecimals).toHaveBeenCalledTimes(1); - expect(validationServiceMock.checkDecimals).toHaveBeenCalledWith( - security, - command.amount, - ); - expect(validationServiceMock.checkKycAddresses).toHaveBeenCalledTimes( - 1, - ); - expect(validationServiceMock.checkKycAddresses).toHaveBeenCalledWith( - command.securityId, - [command.sourceId, command.targetId], - KycStatus.GRANTED, - ); - expect(validationServiceMock.checkControlList).toHaveBeenCalledTimes(1); - expect(validationServiceMock.checkControlList).toHaveBeenCalledWith( - command.securityId, - evmAddress.toString(), - evmAddress.toString(), - ); - - expect(validationServiceMock.checkBalance).toHaveBeenCalledTimes(1); - expect(validationServiceMock.checkBalance).toHaveBeenCalledWith( - command.securityId, - command.sourceId, - BigDecimal.fromString(command.amount, security.decimals), - ); - - expect(validationServiceMock.checkValidNounce).toHaveBeenCalledTimes(1); - expect(validationServiceMock.checkValidNounce).toHaveBeenCalledWith( - command.securityId, - command.sourceId, - command.nounce, - ); - - expect( - transactionServiceMock.getHandler() - .protectedTransferAndLockByPartition, - ).toHaveBeenCalledTimes(1); - - expect( - transactionServiceMock.getHandler() - .protectedTransferAndLockByPartition, - ).toHaveBeenCalledWith( - evmAddress, - command.partitionId, - BigDecimal.fromString(command.amount, security.decimals), - evmAddress, - evmAddress, - BigDecimal.fromString(command.expirationDate.substring(0, 10)), - BigDecimal.fromString(command.deadline.substring(0, 10)), - BigDecimal.fromString(command.nounce.toString()), - command.signature, - command.securityId, - ); - expect( - transactionServiceMock.getTransactionResult, - ).toHaveBeenCalledTimes(1); - expect( - transactionServiceMock.getTransactionResult, - ).toHaveBeenCalledWith({ - res: { id: transactionId }, - className: ProtectedTransferAndLockByPartitionCommandHandler.name, - position: 1, - numberOfResultsItems: 2, - }); - }); - }); + it("GIVEN a token WHEN triggerCouponListing THEN transaction succeeds", async () => { + await accessControlFacet.connect(signer_A).grantRole(CORPORATE_ACTION_ROLE, account_C); + + // set coupons + const couponsRecordDateInSeconds = dateToUnixTimestamp("2030-01-01T00:00:06Z"); + const couponsExecutionDateInSeconds = dateToUnixTimestamp("2030-01-01T00:01:00Z"); + const couponsStartDateInSeconds = dateToUnixTimestamp("2029-12-31T00:00:00Z"); + const couponsEndDateInSeconds = dateToUnixTimestamp("2029-12-31T00:10:00Z"); + const couponsFixingDateInSeconds_1 = dateToUnixTimestamp("2030-01-01T00:00:06Z"); + const couponsFixingDateInSeconds_2 = dateToUnixTimestamp("2030-01-01T00:00:12Z"); + const couponsFixingDateInSeconds_3 = dateToUnixTimestamp("2030-01-01T00:00:18Z"); + const couponsRate = 1; + const couponRateDecimals = 0; + + const couponData_1 = { + recordDate: couponsRecordDateInSeconds.toString(), + executionDate: couponsExecutionDateInSeconds.toString(), + rate: couponsRate, + startDate: couponsStartDateInSeconds.toString(), + endDate: couponsEndDateInSeconds.toString(), + fixingDate: couponsFixingDateInSeconds_1.toString(), + rateDecimals: couponRateDecimals, + }; + const couponData_2 = { + recordDate: couponsRecordDateInSeconds.toString(), + executionDate: couponsExecutionDateInSeconds.toString(), + rate: couponsRate, + startDate: couponsStartDateInSeconds.toString(), + endDate: couponsEndDateInSeconds.toString(), + fixingDate: couponsFixingDateInSeconds_2.toString(), + rateDecimals: couponRateDecimals, + }; + const couponData_3 = { + recordDate: couponsRecordDateInSeconds.toString(), + executionDate: couponsExecutionDateInSeconds.toString(), + rate: couponsRate, + startDate: couponsStartDateInSeconds.toString(), + endDate: couponsEndDateInSeconds.toString(), + fixingDate: couponsFixingDateInSeconds_3.toString(), + rateDecimals: couponRateDecimals, + }; + await bondFacet.connect(signer_C).setCoupon(couponData_2); + await bondFacet.connect(signer_C).setCoupon(couponData_3); + await bondFacet.connect(signer_C).setCoupon(couponData_1); + + const coupon_2_Id = "0x0000000000000000000000000000000000000000000000000000000000000001"; + const coupon_3_Id = "0x0000000000000000000000000000000000000000000000000000000000000002"; + const coupon_1_Id = "0x0000000000000000000000000000000000000000000000000000000000000003"; + + // check schedled CouponListing + let scheduledCouponListingCount = await scheduledCouponListingFacet.scheduledCouponListingCount(); + let scheduledCouponListing = await scheduledCouponListingFacet.getScheduledCouponListing(0, 100); + + expect(scheduledCouponListingCount).to.equal(3); + expect(scheduledCouponListing.length).to.equal(scheduledCouponListingCount); + expect(scheduledCouponListing[0].scheduledTimestamp.toNumber()).to.equal(couponsFixingDateInSeconds_3); + expect(scheduledCouponListing[0].data).to.equal(coupon_3_Id); + expect(scheduledCouponListing[1].scheduledTimestamp.toNumber()).to.equal(couponsFixingDateInSeconds_2); + expect(scheduledCouponListing[1].data).to.equal(coupon_2_Id); + expect(scheduledCouponListing[2].scheduledTimestamp.toNumber()).to.equal(couponsFixingDateInSeconds_1); + expect(scheduledCouponListing[2].data).to.equal(coupon_1_Id); + + // AFTER FIRST SCHEDULED CouponListing ------------------------------------------------------------------ + await timeTravelFacet.changeSystemTimestamp(couponsFixingDateInSeconds_1 + 1); + await scheduledTasksFacet.connect(signer_A).triggerPendingScheduledCrossOrderedTasks(); + + scheduledCouponListingCount = await scheduledCouponListingFacet.scheduledCouponListingCount(); + scheduledCouponListing = await scheduledCouponListingFacet.getScheduledCouponListing(0, 100); + + expect(scheduledCouponListingCount).to.equal(2); + expect(scheduledCouponListing.length).to.equal(scheduledCouponListingCount); + expect(scheduledCouponListing[0].scheduledTimestamp.toNumber()).to.equal(couponsFixingDateInSeconds_3); + expect(scheduledCouponListing[0].data).to.equal(coupon_3_Id); + expect(scheduledCouponListing[1].scheduledTimestamp.toNumber()).to.equal(couponsFixingDateInSeconds_2); + expect(scheduledCouponListing[1].data).to.equal(coupon_2_Id); + + // AFTER SECOND SCHEDULED CouponListing ------------------------------------------------------------------ + await timeTravelFacet.changeSystemTimestamp(couponsFixingDateInSeconds_2 + 1); + await scheduledTasksFacet.connect(signer_A).triggerScheduledCrossOrderedTasks(100); + + scheduledCouponListingCount = await scheduledCouponListingFacet.scheduledCouponListingCount(); + scheduledCouponListing = await scheduledCouponListingFacet.getScheduledCouponListing(0, 100); + + expect(scheduledCouponListingCount).to.equal(1); + expect(scheduledCouponListing.length).to.equal(scheduledCouponListingCount); + expect(scheduledCouponListing[0].scheduledTimestamp.toNumber()).to.equal(couponsFixingDateInSeconds_3); + expect(scheduledCouponListing[0].data).to.equal(coupon_3_Id); + + // AFTER SECOND SCHEDULED CouponListing ------------------------------------------------------------------ + await timeTravelFacet.changeSystemTimestamp(couponsFixingDateInSeconds_3 + 1); + await scheduledTasksFacet.connect(signer_A).triggerScheduledCrossOrderedTasks(0); + + scheduledCouponListingCount = await scheduledCouponListingFacet.scheduledCouponListingCount(); + scheduledCouponListing = await scheduledCouponListingFacet.getScheduledCouponListing(0, 100); + + expect(scheduledCouponListingCount).to.equal(0); + expect(scheduledCouponListing.length).to.equal(scheduledCouponListingCount); }); }); diff --git a/packages/ats/contracts/tsconfig.json b/packages/ats/contracts/tsconfig.json index 27500bb6b..d804d2ccd 100644 --- a/packages/ats/contracts/tsconfig.json +++ b/packages/ats/contracts/tsconfig.json @@ -21,6 +21,7 @@ "@scripts": ["./scripts/index.ts"], "@scripts/infrastructure": ["./scripts/infrastructure/index.ts"], "@scripts/domain": ["./scripts/domain/index.ts"], + "@scripts/tools": ["./scripts/tools/index.ts"], "@tasks": ["./tasks/index.ts"], "@test": ["./test/index.ts"] } diff --git a/packages/ats/sdk/CHANGELOG.md b/packages/ats/sdk/CHANGELOG.md index 891c1901f..290d7f518 100644 --- a/packages/ats/sdk/CHANGELOG.md +++ b/packages/ats/sdk/CHANGELOG.md @@ -1,5 +1,38 @@ # @hashgraph/asset-tokenization-sdk +## 4.0.0 + +### Major Changes + +- 3ba32c9: Audit issues fixes: compliance with ERC1400 standard, pause bypasses removed, dividends calculations errors fixed, hold data stale data updated, duplicated CA not accepted anymore, batch freeze operations and external lists do not accept zero addresses anymore, gas optimizations +- 6950d41: Code refactor plus Coupon fixing, start and end date added. Four type of bonds exist : standard, fixed rate, kpi linked rate and sustainability performance target rate + +### Minor Changes + +- 902fea1: Added Docusaurus and project documentation, renamed the MP package organization, and added a Claude documentation command. +- 8f7487a: EIP712 standard fixed. Now single name (ERC20 token name) and version (BLR version number) used for all facets methods. Nonce facet created to centralized to nonce per user management. +- cbcc1db: Protected Transfer and Lock methods removed from smart contracts and sdk. + +### Patch Changes + +- 650874b: Set `collectCoverage` to `false` by default and enable it only in CI +- c10a8ee: Replaced the Hashgraph SDK with the Hiero Ledger SDK +- Updated dependencies [3ba32c9] +- Updated dependencies [2d5495e] +- Updated dependencies [902fea1] +- Updated dependencies [1f51771] +- Updated dependencies [dff883d] +- Updated dependencies [b802e88] +- Updated dependencies [6950d41] +- Updated dependencies [7f92cd7] +- Updated dependencies [8f7487a] +- Updated dependencies [c10a8ee] +- Updated dependencies [1ecd8ee] +- Updated dependencies [fa07c70] +- Updated dependencies [c7ff16f] +- Updated dependencies [cbcc1db] + - @hashgraph/asset-tokenization-contracts@4.0.0 + ## 3.1.0 ### Patch Changes diff --git a/packages/ats/sdk/README.md b/packages/ats/sdk/README.md index 52e9b06f7..c4314f648 100644 --- a/packages/ats/sdk/README.md +++ b/packages/ats/sdk/README.md @@ -68,6 +68,10 @@ npm run ats:build # Test +The SDK tests are located in the _**tests**_ folder at the root of the sdk module. + +Before running the tests you will need to create an ".env" file following the ".env.sample" template. + Run SDK tests: ```bash @@ -79,18 +83,6 @@ cd packages/ats/sdk npm test ``` -# Test - -The SDK tests are located in the _**tests**_ folder at the root of the sdk module. - -Before running the tests you will need to create an ".env" file following the ".env.sample" template. - -Then to execute all the tests run this command from the _sdk_ folder: - -``` -npm run test -``` - # Input Ports ## Network @@ -488,7 +480,7 @@ Freezes or unfreezes multiple addresses. Requires the Freeze Manager role. #### setCompliance -Sets the compliance module for a security. Requires the TREX Owner role. +Sets the compliance module for a security. Requires the T-REX Owner role. - Request - securityId: Hedera id of the diamond contract representing the asset @@ -510,7 +502,7 @@ Returns the configured compliance module address (if any) for a security. #### setIdentityRegistry -Sets the identity registry for a security. Requires the TREX Owner role. +Sets the identity registry for a security. Requires the T-REX Owner role. - Request - securityId: Hedera id of the diamond contract representing the asset @@ -534,7 +526,7 @@ Returns the configured identity registry address (if any) for a security. #### addAgent -Adds an agent to the security token. Requires the TREX Owner role. +Adds an agent to the security token. Requires the T-REX Owner role. - Request - securityId: Hedera id of the diamond contract representing the asset @@ -546,7 +538,7 @@ Adds an agent to the security token. Requires the TREX Owner role. #### removeAgent -Removes an agent from the security token. Requires the TREX Owner role. +Removes an agent from the security token. Requires the T-REX Owner role. - Request - securityId: Hedera id of the diamond contract representing the asset @@ -560,7 +552,7 @@ Removes an agent from the security token. Requires the TREX Owner role. #### setName -Updates the token name. Requires the TREX Owner role. +Updates the token name. Requires the T-REX Owner role. - Request - securityId: Hedera id of the diamond contract representing the asset @@ -572,7 +564,7 @@ Updates the token name. Requires the TREX Owner role. #### setSymbol -Updates the token symbol. Requires the TREX Owner role. +Updates the token symbol. Requires the T-REX Owner role. - Request - securityId: Hedera id of the diamond contract representing the asset @@ -584,7 +576,7 @@ Updates the token symbol. Requires the TREX Owner role. #### setOnchainID -Sets the on-chain identity for the token. Requires the TREX Owner role. +Sets the on-chain identity for the token. Requires the T-REX Owner role. - Request - securityId: Hedera id of the diamond contract representing the asset @@ -1430,5 +1422,11 @@ Use the **Factory.getRegulationDetails** method. ### Add and Remove accounts from Control List -- The account applying the roles must have the _β€œControl list Role”_ (check Manage Asset Roles) +- The account applying the roles must have the _"Control list Role"_ (check Manage Asset Roles) - Use the **Security.addToControlList** and **Security.removeFromControlList** methods + +--- + +## πŸ“š Documentation + +For more information about the project, see the [Documentation](https://hashgraph.github.io/asset-tokenization-studio/). diff --git a/packages/ats/sdk/__tests__/fixtures/bond/BondFixture.ts b/packages/ats/sdk/__tests__/fixtures/bond/BondFixture.ts index 5f2447c3f..807f9ba62 100644 --- a/packages/ats/sdk/__tests__/fixtures/bond/BondFixture.ts +++ b/packages/ats/sdk/__tests__/fixtures/bond/BondFixture.ts @@ -1,216 +1,145 @@ // SPDX-License-Identifier: Apache-2.0 -import { CreateBondCommand } from '@command/bond/create/CreateBondCommand'; -import { SetCouponCommand } from '@command/bond/coupon/set/SetCouponCommand'; -import { createFixture } from '../config'; -import { TIME_PERIODS_S } from '@core/Constants'; -import ContractId from '@domain/context/contract/ContractId'; -import { - ContractIdPropFixture, - HederaIdPropsFixture, - PartitionIdFixture, -} from '../shared/DataFixture'; -import { SecurityPropsFixture } from '../shared/SecurityFixture'; -import { UpdateMaturityDateCommand } from '@command/bond/updateMaturityDate/UpdateMaturityDateCommand'; -import { BondDetails } from '@domain/context/bond/BondDetails'; -import { GetCouponQuery } from '@query/bond/coupons/getCoupon/GetCouponQuery'; -import { GetCouponCountQuery } from '@query/bond/coupons/getCouponCount/GetCouponCountQuery'; -import { GetCouponForQuery } from '@query/bond/coupons/getCouponFor/GetCouponForQuery'; -import { GetCouponAmountForQuery } from '@query/bond/coupons/getCouponAmountFor/GetCouponAmountForQuery'; -import { GetPrincipalForQuery } from '@query/bond/get/getPrincipalFor/GetPrincipalForQuery'; -import { GetBondDetailsQuery } from '@query/bond/get/getBondDetails/GetBondDetailsQuery'; -import { HederaId } from '@domain/context/shared/HederaId'; -import CreateBondRequest from '@port/in/request/bond/CreateBondRequest'; +import { CreateBondCommand } from "@command/bond/create/CreateBondCommand"; +import { SetCouponCommand } from "@command/bond/coupon/set/SetCouponCommand"; +import { createFixture } from "../config"; +import { TIME_PERIODS_S } from "@core/Constants"; +import ContractId from "@domain/context/contract/ContractId"; +import { ContractIdPropFixture, HederaIdPropsFixture, PartitionIdFixture } from "../shared/DataFixture"; +import { SecurityPropsFixture } from "../shared/SecurityFixture"; +import { UpdateMaturityDateCommand } from "@command/bond/updateMaturityDate/UpdateMaturityDateCommand"; +import { BondDetails } from "@domain/context/bond/BondDetails"; +import { GetCouponQuery } from "@query/bond/coupons/getCoupon/GetCouponQuery"; +import { GetCouponCountQuery } from "@query/bond/coupons/getCouponCount/GetCouponCountQuery"; +import { GetCouponForQuery } from "@query/bond/coupons/getCouponFor/GetCouponForQuery"; +import { GetCouponAmountForQuery } from "@query/bond/coupons/getCouponAmountFor/GetCouponAmountForQuery"; +import { GetPrincipalForQuery } from "@query/bond/get/getPrincipalFor/GetPrincipalForQuery"; +import { GetBondDetailsQuery } from "@query/bond/get/getBondDetails/GetBondDetailsQuery"; +import { HederaId } from "@domain/context/shared/HederaId"; +import CreateBondRequest from "@port/in/request/bond/CreateBondRequest"; import { CastRegulationSubType, CastRegulationType, RegulationSubType, RegulationType, -} from '@domain/context/factory/RegulationType'; -import { faker } from '@faker-js/faker/.'; -import GetBondDetailsRequest from '@port/in/request/bond/GetBondDetailsRequest'; -import SetCouponRequest from '@port/in/request/bond/SetCouponRequest'; -import GetCouponForRequest from '@port/in/request/bond/GetCouponForRequest'; -import GetPrincipalForRequest from '@port/in/request/bond/GetPrincipalForRequest'; -import GetCouponRequest from '@port/in/request/bond/GetCouponRequest'; -import GetAllCouponsRequest from '@port/in/request/bond/GetAllCouponsRequest'; -import UpdateMaturityDateRequest from '@port/in/request/bond/UpdateMaturityDateRequest'; -import BigDecimal from '@domain/context/shared/BigDecimal'; -import { BigNumber } from 'ethers'; -import { Coupon } from '@domain/context/bond/Coupon'; -import { RedeemAtMaturityByPartitionCommand } from '@command/bond/redeemAtMaturityByPartition/RedeemAtMaturityByPartitionCommand'; -import RedeemAtMaturityByPartitionRequest from '@port/in/request/bond/RedeemAtMaturityByPartitionRequest'; -import { FullRedeemAtMaturityCommand } from '@command/bond/fullRedeemAtMaturity/FullRedeemAtMaturityCommand'; -import FullRedeemAtMaturityRequest from '@port/in/request/bond/FullRedeemAtMaturityRequest'; -import { GetCouponHoldersQuery } from '@query/bond/coupons/getCouponHolders/GetCouponHoldersQuery'; -import { GetTotalCouponHoldersQuery } from '@query/bond/coupons/getTotalCouponHolders/GetTotalCouponHoldersQuery'; -import GetCouponHoldersRequest from '@port/in/request/bond/GetCouponHoldersRequest'; -import GetTotalCouponHoldersRequest from '@port/in/request/bond/GetTotalCouponHoldersRequest'; -import { CreateTrexSuiteBondCommand } from '@command/bond/createTrexSuite/CreateTrexSuiteBondCommand'; +} from "@domain/context/factory/RegulationType"; +import { faker } from "@faker-js/faker/."; +import GetBondDetailsRequest from "@port/in/request/bond/GetBondDetailsRequest"; +import SetCouponRequest from "@port/in/request/bond/SetCouponRequest"; +import GetCouponForRequest from "@port/in/request/bond/GetCouponForRequest"; +import GetPrincipalForRequest from "@port/in/request/bond/GetPrincipalForRequest"; +import GetCouponRequest from "@port/in/request/bond/GetCouponRequest"; +import GetAllCouponsRequest from "@port/in/request/bond/GetAllCouponsRequest"; +import UpdateMaturityDateRequest from "@port/in/request/bond/UpdateMaturityDateRequest"; +import BigDecimal from "@domain/context/shared/BigDecimal"; +import { BigNumber } from "ethers"; +import { Coupon } from "@domain/context/bond/Coupon"; +import { RedeemAtMaturityByPartitionCommand } from "@command/bond/redeemAtMaturityByPartition/RedeemAtMaturityByPartitionCommand"; +import RedeemAtMaturityByPartitionRequest from "@port/in/request/bond/RedeemAtMaturityByPartitionRequest"; +import { FullRedeemAtMaturityCommand } from "@command/bond/fullRedeemAtMaturity/FullRedeemAtMaturityCommand"; +import FullRedeemAtMaturityRequest from "@port/in/request/bond/FullRedeemAtMaturityRequest"; +import { GetCouponHoldersQuery } from "@query/bond/coupons/getCouponHolders/GetCouponHoldersQuery"; +import { GetTotalCouponHoldersQuery } from "@query/bond/coupons/getTotalCouponHolders/GetTotalCouponHoldersQuery"; +import GetCouponHoldersRequest from "@port/in/request/bond/GetCouponHoldersRequest"; +import GetTotalCouponHoldersRequest from "@port/in/request/bond/GetTotalCouponHoldersRequest"; +import { CreateTrexSuiteBondCommand } from "@command/bond/createTrexSuite/CreateTrexSuiteBondCommand"; import { CreateTrexSuiteBondRequest, GetProceedRecipientsCountRequest, GetProceedRecipientsRequest, GetProceedRecipientDataRequest, IsProceedRecipientRequest, -} from 'src'; -import AddProceedRecipientRequest from '@port/in/request/bond/AddProceedRecipientRequest'; -import RemoveProceedRecipientRequest from '@port/in/request/bond/RemoveProceedRecipientRequest'; -import UpdateProceedRecipientDataRequest from '@port/in/request/bond/UpdateProceedRecipientDataRequest'; - -export const SetCouponCommandFixture = createFixture( - (command) => { - command.address.as(() => HederaIdPropsFixture.create().value); - command.recordDate.faker((faker) => - faker.date.future().getTime().toString(), - ); - command.executionDate.faker((faker) => - faker.date.future().getTime().toString(), - ); - command.rate.faker((faker) => - faker.number.int({ min: 100, max: 999 }).toString(), - ); - command.period.faker((faker) => - faker.number.int({ min: 86400, max: 31536000 }).toString(), - ); - }, -); +} from "src"; +import AddProceedRecipientRequest from "@port/in/request/bond/AddProceedRecipientRequest"; +import RemoveProceedRecipientRequest from "@port/in/request/bond/RemoveProceedRecipientRequest"; +import UpdateProceedRecipientDataRequest from "@port/in/request/bond/UpdateProceedRecipientDataRequest"; +import { CastRateStatus, RateStatus } from "@domain/context/bond/RateStatus"; + +export const SetCouponCommandFixture = createFixture((command) => { + command.address.as(() => HederaIdPropsFixture.create().value); + command.recordDate.faker((faker) => faker.date.future().getTime().toString()); + command.executionDate.faker((faker) => faker.date.future().getTime().toString()); + command.rate.faker((faker) => faker.number.int({ min: 100, max: 999 }).toString()); + command.startDate.faker((faker) => faker.date.future().getTime().toString()); + command.endDate.faker((faker) => faker.date.future().getTime().toString()); + command.fixingDate.faker((faker) => faker.date.future().getTime().toString()); +}); -export const CreateBondCommandFixture = createFixture( - (command) => { - command.security.fromFixture(SecurityPropsFixture); - command.currency.faker((faker) => faker.finance.currencyCode()); - command.nominalValue.faker((faker) => - faker.finance.amount({ min: 1, max: 10, dec: 2 }), - ); - command.nominalValueDecimals.faker((faker) => - faker.number.int({ min: 1, max: 5 }), - ); - command.startingDate.faker((faker) => - faker.date.recent().getTime().toString(), - ); - command.maturityDate.faker((faker) => - faker.date.future({ years: 2 }).getTime().toString(), - ); - command.factory?.as( - () => new ContractId(ContractIdPropFixture.create().value), - ); - command.resolver?.as( - () => new ContractId(ContractIdPropFixture.create().value), - ); - command.configId?.as(() => HederaIdPropsFixture.create().value); - command.configVersion?.faker((faker) => - faker.number.int({ min: 1, max: 5 }), - ); - command.diamondOwnerAccount?.as(() => HederaIdPropsFixture.create().value); - command.externalControlListsIds?.as(() => [ - HederaIdPropsFixture.create().value, - ]); - command.externalKycListsIds?.as(() => [ - HederaIdPropsFixture.create().value, - ]); - command.complianceId?.as(() => HederaIdPropsFixture.create().value); - command.identityRegistryId?.as(() => HederaIdPropsFixture.create().value); - command.proceedRecipientsIds?.faker((faker) => [ - HederaIdPropsFixture.create().value, - ]); - command.proceedRecipientsData?.as(() => ['0x0000']); - }, -); +export const CreateBondCommandFixture = createFixture((command) => { + command.security.fromFixture(SecurityPropsFixture); + command.currency.faker((faker) => faker.finance.currencyCode()); + command.nominalValue.faker((faker) => faker.finance.amount({ min: 1, max: 10, dec: 2 })); + command.nominalValueDecimals.faker((faker) => faker.number.int({ min: 1, max: 5 })); + command.startingDate.faker((faker) => faker.date.recent().getTime().toString()); + command.maturityDate.faker((faker) => faker.date.future({ years: 2 }).getTime().toString()); + command.factory?.as(() => new ContractId(ContractIdPropFixture.create().value)); + command.resolver?.as(() => new ContractId(ContractIdPropFixture.create().value)); + command.configId?.as(() => HederaIdPropsFixture.create().value); + command.configVersion?.faker((faker) => faker.number.int({ min: 1, max: 5 })); + command.diamondOwnerAccount?.as(() => HederaIdPropsFixture.create().value); + command.externalControlListsIds?.as(() => [HederaIdPropsFixture.create().value]); + command.externalKycListsIds?.as(() => [HederaIdPropsFixture.create().value]); + command.complianceId?.as(() => HederaIdPropsFixture.create().value); + command.identityRegistryId?.as(() => HederaIdPropsFixture.create().value); + command.proceedRecipientsIds?.faker((faker) => [HederaIdPropsFixture.create().value]); + command.proceedRecipientsData?.as(() => ["0x0000"]); +}); -export const CreateTrexSuiteBondCommandFixture = - createFixture((command) => { - command.salt.faker((faker) => faker.string.alphanumeric({ length: 32 })); - command.owner.faker((faker) => faker.finance.accountName()); - command.irs.faker((faker) => faker.finance.iban()); - command.onchainId.faker((faker) => faker.finance.ethereumAddress()); - command.irAgents.faker((faker) => [faker.finance.ethereumAddress()]); - command.tokenAgents.faker((faker) => [faker.finance.ethereumAddress()]); - command.compliancesModules.faker((faker) => [ - faker.string.alphanumeric({ length: 32 }), - ]); - command.complianceSettings.faker((faker) => [ - faker.string.alphanumeric({ length: 32 }), - ]); - command.claimTopics.faker((faker) => [ - faker.number.int({ min: 1, max: 10 }), - ]); - command.issuers.faker((faker) => [faker.finance.ethereumAddress()]); - command.issuerClaims.faker((faker) => [ - faker.number.int({ min: 1, max: 10 }), - ]); - - command.security.fromFixture(SecurityPropsFixture); - command.currency.faker((faker) => faker.finance.currencyCode()); - command.nominalValue.faker((faker) => - faker.finance.amount({ min: 1, max: 10, dec: 2 }), - ); - command.nominalValueDecimals.faker((faker) => - faker.number.int({ min: 1, max: 5 }), - ); - command.startingDate.faker((faker) => - faker.date.recent().getTime().toString(), - ); - command.maturityDate.faker((faker) => - faker.date.future({ years: 2 }).getTime().toString(), - ); - command.factory.as( - () => new ContractId(ContractIdPropFixture.create().value), - ); - command.resolver.as( - () => new ContractId(ContractIdPropFixture.create().value), - ); - command.configId.as(() => HederaIdPropsFixture.create().value); - command.configVersion.faker((faker) => - faker.number.int({ min: 1, max: 5 }), - ); - command.diamondOwnerAccount.as(() => HederaIdPropsFixture.create().value); - command.externalControlLists?.as(() => [ - HederaIdPropsFixture.create().value, - ]); - command.externalKycLists?.as(() => [HederaIdPropsFixture.create().value]); - command.compliance?.as(() => HederaIdPropsFixture.create().value); - command.identityRegistry?.as(() => HederaIdPropsFixture.create().value); - command.proceedRecipientsIds?.faker((faker) => [ - faker.finance.ethereumAddress(), - ]); - command.proceedRecipientsData?.faker((faker) => [ - faker.string.alphanumeric({ length: 32 }), - ]); - }); +export const CreateTrexSuiteBondCommandFixture = createFixture((command) => { + command.salt.faker((faker) => faker.string.alphanumeric({ length: 32 })); + command.owner.faker((faker) => faker.finance.accountName()); + command.irs.faker((faker) => faker.finance.iban()); + command.onchainId.faker((faker) => faker.finance.ethereumAddress()); + command.irAgents.faker((faker) => [faker.finance.ethereumAddress()]); + command.tokenAgents.faker((faker) => [faker.finance.ethereumAddress()]); + command.compliancesModules.faker((faker) => [faker.string.alphanumeric({ length: 32 })]); + command.complianceSettings.faker((faker) => [faker.string.alphanumeric({ length: 32 })]); + command.claimTopics.faker((faker) => [faker.number.int({ min: 1, max: 10 })]); + command.issuers.faker((faker) => [faker.finance.ethereumAddress()]); + command.issuerClaims.faker((faker) => [faker.number.int({ min: 1, max: 10 })]); + + command.security.fromFixture(SecurityPropsFixture); + command.currency.faker((faker) => faker.finance.currencyCode()); + command.nominalValue.faker((faker) => faker.finance.amount({ min: 1, max: 10, dec: 2 })); + command.nominalValueDecimals.faker((faker) => faker.number.int({ min: 1, max: 5 })); + command.startingDate.faker((faker) => faker.date.recent().getTime().toString()); + command.maturityDate.faker((faker) => faker.date.future({ years: 2 }).getTime().toString()); + command.factory.as(() => new ContractId(ContractIdPropFixture.create().value)); + command.resolver.as(() => new ContractId(ContractIdPropFixture.create().value)); + command.configId.as(() => HederaIdPropsFixture.create().value); + command.configVersion.faker((faker) => faker.number.int({ min: 1, max: 5 })); + command.diamondOwnerAccount.as(() => HederaIdPropsFixture.create().value); + command.externalControlLists?.as(() => [HederaIdPropsFixture.create().value]); + command.externalKycLists?.as(() => [HederaIdPropsFixture.create().value]); + command.compliance?.as(() => HederaIdPropsFixture.create().value); + command.identityRegistry?.as(() => HederaIdPropsFixture.create().value); + command.proceedRecipientsIds?.faker((faker) => [faker.finance.ethereumAddress()]); + command.proceedRecipientsData?.faker((faker) => [faker.string.alphanumeric({ length: 32 })]); +}); -export const UpdateMaturityDateCommandFixture = - createFixture((command) => { - command.maturityDate.faker((faker) => - faker.date.future().getTime().toString(), - ); - command.securityId.as(() => HederaIdPropsFixture.create().value); - }); +export const UpdateMaturityDateCommandFixture = createFixture((command) => { + command.maturityDate.faker((faker) => faker.date.future().getTime().toString()); + command.securityId.as(() => HederaIdPropsFixture.create().value); +}); -export const RedeemAtMaturityByPartitionCommandFixture = - createFixture((command) => { - command.amount.faker((faker) => - faker.number.int({ min: 1, max: 1000 }).toString(), - ); +export const RedeemAtMaturityByPartitionCommandFixture = createFixture( + (command) => { + command.amount.faker((faker) => faker.number.int({ min: 1, max: 1000 }).toString()); command.securityId.as(() => HederaIdPropsFixture.create().value); command.sourceId.as(() => HederaIdPropsFixture.create().value); command.partitionId.as(() => PartitionIdFixture.create().value); - }); + }, +); -export const FullRedeemAtMaturityCommandFixture = - createFixture((command) => { - command.securityId.as(() => HederaIdPropsFixture.create().value); - command.sourceId.as(() => HederaIdPropsFixture.create().value); - }); +export const FullRedeemAtMaturityCommandFixture = createFixture((command) => { + command.securityId.as(() => HederaIdPropsFixture.create().value); + command.sourceId.as(() => HederaIdPropsFixture.create().value); +}); export const BondDetailsFixture = createFixture((props) => { props.currency.faker((faker) => faker.finance.currencyCode()); - props.nominalValue.faker((faker) => - faker.finance.amount({ min: 1, max: 10, dec: 2 }), - ); - props.nominalValueDecimals.faker((faker) => - faker.number.int({ min: 1, max: 5 }), - ); + props.nominalValue.faker((faker) => faker.finance.amount({ min: 1, max: 10, dec: 2 })); + props.nominalValueDecimals.faker((faker) => faker.number.int({ min: 1, max: 5 })); props.startingDate.faker((faker) => faker.date.past()); props.maturityDate.faker((faker) => faker.date.recent()); }); @@ -220,389 +149,290 @@ export const GetCouponQueryFixture = createFixture((query) => { query.couponId.faker((faker) => faker.number.int({ min: 1, max: 999 })); }); -export const GetCouponCountQueryFixture = createFixture( - (query) => { - query.securityId.as(() => HederaIdPropsFixture.create().value); - }, -); +export const GetCouponCountQueryFixture = createFixture((query) => { + query.securityId.as(() => HederaIdPropsFixture.create().value); +}); -export const GetCouponForQueryFixture = createFixture( - (query) => { - query.securityId.as(() => HederaIdPropsFixture.create().value); - query.targetId.as(() => HederaIdPropsFixture.create().value); - query.couponId.faker((faker) => faker.number.int({ min: 1, max: 999 })); - }, -); +export const GetCouponForQueryFixture = createFixture((query) => { + query.securityId.as(() => HederaIdPropsFixture.create().value); + query.targetId.as(() => HederaIdPropsFixture.create().value); + query.couponId.faker((faker) => faker.number.int({ min: 1, max: 999 })); +}); -export const GetCouponAmountForQueryFixture = - createFixture((query) => { - query.securityId.as(() => HederaIdPropsFixture.create().value); - query.targetId.as(() => HederaIdPropsFixture.create().value); - query.couponId.faker((faker) => faker.number.int({ min: 1, max: 999 })); - }); +export const GetCouponAmountForQueryFixture = createFixture((query) => { + query.securityId.as(() => HederaIdPropsFixture.create().value); + query.targetId.as(() => HederaIdPropsFixture.create().value); + query.couponId.faker((faker) => faker.number.int({ min: 1, max: 999 })); +}); -export const GetPrincipalForQueryFixture = createFixture( - (query) => { - query.securityId.as(() => HederaIdPropsFixture.create().value); - query.targetId.as(() => HederaIdPropsFixture.create().value); - }, -); +export const GetPrincipalForQueryFixture = createFixture((query) => { + query.securityId.as(() => HederaIdPropsFixture.create().value); + query.targetId.as(() => HederaIdPropsFixture.create().value); +}); -export const GetBondDetailsQueryFixture = createFixture( - (query) => { - query.bondId.as(() => new HederaId(HederaIdPropsFixture.create().value)); - }, -); +export const GetBondDetailsQueryFixture = createFixture((query) => { + query.bondId.as(() => new HederaId(HederaIdPropsFixture.create().value)); +}); -export const GetCouponHoldersQueryFixture = - createFixture((query) => { - query.securityId.as(() => HederaIdPropsFixture.create().value); - query.couponId.faker((faker) => faker.number.int({ min: 1, max: 10 })); - query.start.faker((faker) => faker.number.int({ min: 1, max: 999 })); - query.end.faker((faker) => faker.number.int({ min: 1, max: 999 })); - }); +export const GetCouponHoldersQueryFixture = createFixture((query) => { + query.securityId.as(() => HederaIdPropsFixture.create().value); + query.couponId.faker((faker) => faker.number.int({ min: 1, max: 10 })); + query.start.faker((faker) => faker.number.int({ min: 1, max: 999 })); + query.end.faker((faker) => faker.number.int({ min: 1, max: 999 })); +}); -export const GetTotalCouponHoldersQueryFixture = - createFixture((query) => { - query.securityId.as(() => HederaIdPropsFixture.create().value); - query.couponId.faker((faker) => faker.number.int({ min: 1, max: 10 })); - }); +export const GetTotalCouponHoldersQueryFixture = createFixture((query) => { + query.securityId.as(() => HederaIdPropsFixture.create().value); + query.couponId.faker((faker) => faker.number.int({ min: 1, max: 10 })); +}); export const CouponFixture = createFixture((props) => { - props.recordTimeStamp.faker((faker) => - faker.date.past().getTime().toString(), + props.recordTimeStamp.faker((faker) => faker.date.past().getTime().toString()); + props.executionTimeStamp.faker((faker) => faker.date.past().getTime().toString()); + props.rate.faker((faker) => new BigDecimal(BigNumber.from(faker.number.int({ min: 1, max: 5 })))); + props.rateDecimals.faker((faker) => faker.number.int({ min: 1, max: 10 })); + props.startTimeStamp.faker((faker) => faker.date.past().getTime().toString()); + props.endTimeStamp.faker((faker) => faker.date.past().getTime().toString()); + props.fixingTimeStamp.faker((faker) => faker.date.past().getTime().toString()); + props.rateStatus.faker((faker) => faker.helpers.arrayElement(Object.values(RateStatus))); +}); + +export const GetCouponHoldersRequestFixture = createFixture((request) => { + request.securityId.as(() => HederaIdPropsFixture.create().value); + request.couponId.faker((faker) => faker.number.int({ min: 1, max: 10 })); + request.start.faker((faker) => faker.number.int({ min: 1, max: 999 })); + request.end.faker((faker) => faker.number.int({ min: 1, max: 999 })); +}); + +export const GetTotalCouponHoldersRequestFixture = createFixture((request) => { + request.securityId.as(() => HederaIdPropsFixture.create().value); + request.couponId.faker((faker) => faker.number.int({ min: 1, max: 10 })); +}); + +export const CreateBondRequestFixture = createFixture((request) => { + request.name.faker((faker) => faker.company.name()); + request.symbol.faker((faker) => faker.string.alpha({ length: 3, casing: "upper" })); + request.isin.faker((faker) => `US${faker.string.numeric(9)}`); + request.decimals.faker((faker) => faker.number.int({ min: 0, max: 18 })); + request.isWhiteList.faker((faker) => faker.datatype.boolean()); + request.isControllable.faker((faker) => faker.datatype.boolean()); + request.arePartitionsProtected.faker((faker) => faker.datatype.boolean()); + request.clearingActive.faker((faker) => faker.datatype.boolean()); + request.internalKycActivated.faker((faker) => faker.datatype.boolean()); + request.isMultiPartition.faker((faker) => faker.datatype.boolean()); + request.numberOfUnits?.as(() => "0"); + const regulationType = CastRegulationType.toNumber( + faker.helpers.arrayElement(Object.values(RegulationType).filter((type) => type !== RegulationType.NONE)), ); - props.executionTimeStamp.faker((faker) => - faker.date.past().getTime().toString(), + request.regulationType?.as(() => regulationType); + request.regulationSubType?.faker((faker) => + regulationType === CastRegulationType.toNumber(RegulationType.REG_S) + ? CastRegulationSubType.toNumber(RegulationSubType.NONE) + : CastRegulationSubType.toNumber( + faker.helpers.arrayElement( + Object.values(RegulationSubType).filter((subType) => subType !== RegulationSubType.NONE), + ), + ), + ); + request.isCountryControlListWhiteList.faker((faker) => faker.datatype.boolean()); + request.countries?.faker((faker) => + faker.helpers + .arrayElements( + Array.from({ length: 5 }, () => faker.location.countryCode({ variant: "alpha-2" })), + { min: 1, max: 5 }, + ) + .join(","), ); - props.rate.faker( + request.info.faker((faker) => faker.lorem.words()); + request.currency.faker((faker) => `0x${Buffer.from(faker.finance.currencyCode()).toString("hex")}`); + request.nominalValue.faker((faker) => faker.finance.amount({ min: 1, max: 10, dec: 2 })); + request.nominalValueDecimals.faker((faker) => faker.number.int({ min: 1, max: 5 })); + let startingDate: Date; + request.startingDate.faker((faker) => { + startingDate = faker.date.recent(); + return startingDate.getTime().toString(); + }); + let maturityDate: Date; + request.maturityDate.faker((faker) => { + maturityDate = faker.date.future({ years: 2 }); + return maturityDate.getTime().toString(); + }); + + request.configId.faker( (faker) => - new BigDecimal(BigNumber.from(faker.number.int({ min: 1, max: 5 }))), + `0x000000000000000000000000000000000000000000000000000000000000000${faker.number.int({ min: 1, max: 9 })}`, ); + request.configVersion.as(() => 1); + request.diamondOwnerAccount?.as(() => HederaIdPropsFixture.create().value); + request.externalPausesIds?.as(() => [HederaIdPropsFixture.create().value]); + request.externalControlListsIds?.as(() => [HederaIdPropsFixture.create().value]); + request.externalKycListsIds?.as(() => [HederaIdPropsFixture.create().value]); + request.complianceId?.as(() => HederaIdPropsFixture.create().value); + request.identityRegistryId?.as(() => HederaIdPropsFixture.create().value); + request.proceedRecipientsIds?.faker((faker) => [HederaIdPropsFixture.create().value]); + request.proceedRecipientsData?.as(() => ["0x0000"]); }); -export const GetCouponHoldersRequestFixture = - createFixture((request) => { - request.securityId.as(() => HederaIdPropsFixture.create().value); - request.couponId.faker((faker) => faker.number.int({ min: 1, max: 10 })); - request.start.faker((faker) => faker.number.int({ min: 1, max: 999 })); - request.end.faker((faker) => faker.number.int({ min: 1, max: 999 })); - }); - -export const GetTotalCouponHoldersRequestFixture = - createFixture((request) => { - request.securityId.as(() => HederaIdPropsFixture.create().value); - request.couponId.faker((faker) => faker.number.int({ min: 1, max: 10 })); - }); +export const GetBondDetailsRequestFixture = createFixture((request) => { + request.bondId.as(() => HederaIdPropsFixture.create().value); +}); -export const CreateBondRequestFixture = createFixture( - (request) => { - request.name.faker((faker) => faker.company.name()); - request.symbol.faker((faker) => - faker.string.alpha({ length: 3, casing: 'upper' }), - ); - request.isin.faker((faker) => `US${faker.string.numeric(9)}`); - request.decimals.faker((faker) => faker.number.int({ min: 0, max: 18 })); - request.isWhiteList.faker((faker) => faker.datatype.boolean()); - request.isControllable.faker((faker) => faker.datatype.boolean()); - request.arePartitionsProtected.faker((faker) => faker.datatype.boolean()); - request.clearingActive.faker((faker) => faker.datatype.boolean()); - request.internalKycActivated.faker((faker) => faker.datatype.boolean()); - request.isMultiPartition.faker((faker) => faker.datatype.boolean()); - request.numberOfUnits?.as(() => '0'); - const regulationType = CastRegulationType.toNumber( - faker.helpers.arrayElement( - Object.values(RegulationType).filter( - (type) => type !== RegulationType.NONE, - ), - ), - ); - request.regulationType?.as(() => regulationType); - request.regulationSubType?.faker((faker) => - regulationType === CastRegulationType.toNumber(RegulationType.REG_S) - ? CastRegulationSubType.toNumber(RegulationSubType.NONE) - : CastRegulationSubType.toNumber( - faker.helpers.arrayElement( - Object.values(RegulationSubType).filter( - (subType) => subType !== RegulationSubType.NONE, - ), - ), - ), - ); - request.isCountryControlListWhiteList.faker((faker) => - faker.datatype.boolean(), - ); - request.countries?.faker((faker) => - faker.helpers - .arrayElements( - Array.from({ length: 5 }, () => - faker.location.countryCode({ variant: 'alpha-2' }), - ), - { min: 1, max: 5 }, - ) - .join(','), - ); - request.info.faker((faker) => faker.lorem.words()); - request.currency.faker( - (faker) => - `0x${Buffer.from(faker.finance.currencyCode()).toString('hex')}`, - ); - request.nominalValue.faker((faker) => - faker.finance.amount({ min: 1, max: 10, dec: 2 }), - ); - request.nominalValueDecimals.faker((faker) => - faker.number.int({ min: 1, max: 5 }), - ); - let startingDate: Date; - request.startingDate.faker((faker) => { - startingDate = faker.date.recent(); - return startingDate.getTime().toString(); - }); - let maturityDate: Date; - request.maturityDate.faker((faker) => { - maturityDate = faker.date.future({ years: 2 }); - return maturityDate.getTime().toString(); - }); - - request.configId.faker( - (faker) => - `0x000000000000000000000000000000000000000000000000000000000000000${faker.number.int({ min: 1, max: 9 })}`, - ); - request.configVersion.as(() => 1); - request.diamondOwnerAccount?.as(() => HederaIdPropsFixture.create().value); - request.externalPausesIds?.as(() => [HederaIdPropsFixture.create().value]); - request.externalControlListsIds?.as(() => [ - HederaIdPropsFixture.create().value, - ]); - request.externalKycListsIds?.as(() => [ - HederaIdPropsFixture.create().value, - ]); - request.complianceId?.as(() => HederaIdPropsFixture.create().value); - request.identityRegistryId?.as(() => HederaIdPropsFixture.create().value); - request.proceedRecipientsIds?.faker((faker) => [ - HederaIdPropsFixture.create().value, - ]); - request.proceedRecipientsData?.as(() => ['0x0000']); - }, -); +export const SetCouponRequestFixture = createFixture((request) => { + request.securityId.as(() => HederaIdPropsFixture.create().value); + request.rate.faker((faker) => faker.number.int({ min: 1, max: 12 }).toString()); + request.recordTimestamp.faker((faker) => faker.date.past().getTime().toString()); + request.executionTimestamp.faker((faker) => faker.date.future().getTime().toString()); + request.startTimestamp.as(() => "0"); + request.endTimestamp.as(() => TIME_PERIODS_S.DAY.toString()); + request.fixingTimestamp.faker((faker) => faker.date.past().getTime().toString()); + request.rateStatus.faker((faker) => CastRateStatus.toNumber(faker.helpers.arrayElement(Object.values(RateStatus)))); +}); -export const GetBondDetailsRequestFixture = - createFixture((request) => { - request.bondId.as(() => HederaIdPropsFixture.create().value); - }); +export const GetCouponForRequestFixture = createFixture((request) => { + request.securityId.as(() => HederaIdPropsFixture.create().value); + request.targetId.as(() => HederaIdPropsFixture.create().value); + request.couponId.faker((faker) => faker.number.int({ min: 1, max: 10 })); +}); -export const SetCouponRequestFixture = createFixture( - (request) => { - request.securityId.as(() => HederaIdPropsFixture.create().value); - request.rate.faker((faker) => - faker.number.int({ min: 1, max: 12 }).toString(), - ); - request.recordTimestamp.faker((faker) => - faker.date.past().getTime().toString(), - ); - request.executionTimestamp.faker((faker) => - faker.date.future().getTime().toString(), - ); - request.period.as(() => TIME_PERIODS_S.DAY.toString()); - }, -); +export const GetPrincipalForRequestFixture = createFixture((request) => { + request.securityId.as(() => HederaIdPropsFixture.create().value); + request.targetId.as(() => HederaIdPropsFixture.create().value); +}); -export const GetCouponForRequestFixture = createFixture( - (request) => { - request.securityId.as(() => HederaIdPropsFixture.create().value); - request.targetId.as(() => HederaIdPropsFixture.create().value); - request.couponId.faker((faker) => faker.number.int({ min: 1, max: 10 })); - }, -); +export const GetCouponRequestFixture = createFixture((request) => { + request.securityId.as(() => HederaIdPropsFixture.create().value); + request.couponId.faker((faker) => faker.number.int({ min: 1, max: 10 })); +}); -export const GetPrincipalForRequestFixture = - createFixture((request) => { - request.securityId.as(() => HederaIdPropsFixture.create().value); - request.targetId.as(() => HederaIdPropsFixture.create().value); - }); +export const GetAllCouponsRequestFixture = createFixture((request) => { + request.securityId.as(() => HederaIdPropsFixture.create().value); +}); -export const GetCouponRequestFixture = createFixture( - (request) => { - request.securityId.as(() => HederaIdPropsFixture.create().value); - request.couponId.faker((faker) => faker.number.int({ min: 1, max: 10 })); - }, -); +export const UpdateMaturityDateRequestFixture = createFixture((request) => { + request.securityId.as(() => HederaIdPropsFixture.create().value); + request.maturityDate.faker((faker) => faker.date.future().getTime().toString()); +}); -export const GetAllCouponsRequestFixture = createFixture( +export const RedeemAtMaturityByPartitionRequestFixture = createFixture( (request) => { + request.amount.faker((faker) => faker.number.int({ min: 1, max: 1000 }).toString()); request.securityId.as(() => HederaIdPropsFixture.create().value); + request.sourceId.as(() => HederaIdPropsFixture.create().value); + request.partitionId.as(() => PartitionIdFixture.create().value); }, ); -export const UpdateMaturityDateRequestFixture = - createFixture((request) => { - request.securityId.as(() => HederaIdPropsFixture.create().value); - request.maturityDate.faker((faker) => - faker.date.future().getTime().toString(), - ); - }); +export const FullRedeemAtMaturityRequestFixture = createFixture((request) => { + request.securityId.as(() => HederaIdPropsFixture.create().value); + request.sourceId.as(() => HederaIdPropsFixture.create().value); +}); -export const RedeemAtMaturityByPartitionRequestFixture = - createFixture((request) => { - request.amount.faker((faker) => - faker.number.int({ min: 1, max: 1000 }).toString(), - ); - request.securityId.as(() => HederaIdPropsFixture.create().value); - request.sourceId.as(() => HederaIdPropsFixture.create().value); - request.partitionId.as(() => PartitionIdFixture.create().value); +export const CreateTrexSuiteBondRequestFixture = createFixture((request) => { + request.salt.faker((faker) => faker.string.alphanumeric({ length: 32 })); + request.owner.faker((faker) => faker.finance.accountName()); + request.irs.faker((faker) => faker.finance.iban()); + request.onchainId.faker((faker) => faker.finance.ethereumAddress()); + request.irAgents.faker((faker) => [faker.finance.ethereumAddress()]); + request.tokenAgents.faker((faker) => [faker.finance.ethereumAddress()]); + request.compliancesModules.faker((faker) => [faker.string.alphanumeric({ length: 32 })]); + request.complianceSettings.faker((faker) => [faker.string.alphanumeric({ length: 32 })]); + request.claimTopics.faker((faker) => [faker.number.int({ min: 1, max: 10 })]); + request.issuers.faker((faker) => [faker.finance.ethereumAddress()]); + request.issuerClaims.faker((faker) => [faker.number.int({ min: 1, max: 10 })]); + request.name.faker((faker) => faker.company.name()); + request.symbol.faker((faker) => faker.string.alpha({ length: 3, casing: "upper" })); + request.isin.faker((faker) => `US${faker.string.numeric(9)}`); + request.decimals.faker((faker) => faker.number.int({ min: 0, max: 18 })); + request.isWhiteList.faker((faker) => faker.datatype.boolean()); + request.isControllable.faker((faker) => faker.datatype.boolean()); + request.arePartitionsProtected.faker((faker) => faker.datatype.boolean()); + request.clearingActive.faker((faker) => faker.datatype.boolean()); + request.internalKycActivated.faker((faker) => faker.datatype.boolean()); + request.isMultiPartition.faker((faker) => faker.datatype.boolean()); + request.numberOfUnits?.as(() => "0"); + const regulationType = CastRegulationType.toNumber( + faker.helpers.arrayElement(Object.values(RegulationType).filter((type) => type !== RegulationType.NONE)), + ); + request.regulationType?.as(() => regulationType); + request.regulationSubType?.faker((faker) => + regulationType === CastRegulationType.toNumber(RegulationType.REG_S) + ? CastRegulationSubType.toNumber(RegulationSubType.NONE) + : CastRegulationSubType.toNumber( + faker.helpers.arrayElement( + Object.values(RegulationSubType).filter((subType) => subType !== RegulationSubType.NONE), + ), + ), + ); + request.isCountryControlListWhiteList.faker((faker) => faker.datatype.boolean()); + request.countries?.faker((faker) => + faker.helpers + .arrayElements( + Array.from({ length: 5 }, () => faker.location.countryCode({ variant: "alpha-2" })), + { min: 1, max: 5 }, + ) + .join(","), + ); + request.info.faker((faker) => faker.lorem.words()); + request.currency.faker((faker) => `0x${Buffer.from(faker.finance.currencyCode()).toString("hex")}`); + request.nominalValue.faker((faker) => faker.finance.amount({ min: 1, max: 10, dec: 2 })); + request.nominalValueDecimals.faker((faker) => faker.number.int({ min: 1, max: 5 })); + let startingDate: Date; + request.startingDate.faker((faker) => { + startingDate = faker.date.recent(); + return startingDate.getTime().toString(); }); - -export const FullRedeemAtMaturityRequestFixture = - createFixture((request) => { - request.securityId.as(() => HederaIdPropsFixture.create().value); - request.sourceId.as(() => HederaIdPropsFixture.create().value); + let maturityDate: Date; + request.maturityDate.faker((faker) => { + maturityDate = faker.date.future({ years: 2 }); + return maturityDate.getTime().toString(); }); -export const CreateTrexSuiteBondRequestFixture = - createFixture((request) => { - request.salt.faker((faker) => faker.string.alphanumeric({ length: 32 })); - request.owner.faker((faker) => faker.finance.accountName()); - request.irs.faker((faker) => faker.finance.iban()); - request.onchainId.faker((faker) => faker.finance.ethereumAddress()); - request.irAgents.faker((faker) => [faker.finance.ethereumAddress()]); - request.tokenAgents.faker((faker) => [faker.finance.ethereumAddress()]); - request.compliancesModules.faker((faker) => [ - faker.string.alphanumeric({ length: 32 }), - ]); - request.complianceSettings.faker((faker) => [ - faker.string.alphanumeric({ length: 32 }), - ]); - request.claimTopics.faker((faker) => [ - faker.number.int({ min: 1, max: 10 }), - ]); - request.issuers.faker((faker) => [faker.finance.ethereumAddress()]); - request.issuerClaims.faker((faker) => [ - faker.number.int({ min: 1, max: 10 }), - ]); - request.name.faker((faker) => faker.company.name()); - request.symbol.faker((faker) => - faker.string.alpha({ length: 3, casing: 'upper' }), - ); - request.isin.faker((faker) => `US${faker.string.numeric(9)}`); - request.decimals.faker((faker) => faker.number.int({ min: 0, max: 18 })); - request.isWhiteList.faker((faker) => faker.datatype.boolean()); - request.isControllable.faker((faker) => faker.datatype.boolean()); - request.arePartitionsProtected.faker((faker) => faker.datatype.boolean()); - request.clearingActive.faker((faker) => faker.datatype.boolean()); - request.internalKycActivated.faker((faker) => faker.datatype.boolean()); - request.isMultiPartition.faker((faker) => faker.datatype.boolean()); - request.numberOfUnits?.as(() => '0'); - const regulationType = CastRegulationType.toNumber( - faker.helpers.arrayElement( - Object.values(RegulationType).filter( - (type) => type !== RegulationType.NONE, - ), - ), - ); - request.regulationType?.as(() => regulationType); - request.regulationSubType?.faker((faker) => - regulationType === CastRegulationType.toNumber(RegulationType.REG_S) - ? CastRegulationSubType.toNumber(RegulationSubType.NONE) - : CastRegulationSubType.toNumber( - faker.helpers.arrayElement( - Object.values(RegulationSubType).filter( - (subType) => subType !== RegulationSubType.NONE, - ), - ), - ), - ); - request.isCountryControlListWhiteList.faker((faker) => - faker.datatype.boolean(), - ); - request.countries?.faker((faker) => - faker.helpers - .arrayElements( - Array.from({ length: 5 }, () => - faker.location.countryCode({ variant: 'alpha-2' }), - ), - { min: 1, max: 5 }, - ) - .join(','), - ); - request.info.faker((faker) => faker.lorem.words()); - request.currency.faker( - (faker) => - `0x${Buffer.from(faker.finance.currencyCode()).toString('hex')}`, - ); - request.nominalValue.faker((faker) => - faker.finance.amount({ min: 1, max: 10, dec: 2 }), - ); - request.nominalValueDecimals.faker((faker) => - faker.number.int({ min: 1, max: 5 }), - ); - let startingDate: Date; - request.startingDate.faker((faker) => { - startingDate = faker.date.recent(); - return startingDate.getTime().toString(); - }); - let maturityDate: Date; - request.maturityDate.faker((faker) => { - maturityDate = faker.date.future({ years: 2 }); - return maturityDate.getTime().toString(); - }); - - request.configId.faker( - (faker) => - `0x000000000000000000000000000000000000000000000000000000000000000${faker.number.int({ min: 1, max: 9 })}`, - ); - request.configVersion.as(() => 1); - request.diamondOwnerAccount?.as(() => HederaIdPropsFixture.create().value); - request.proceedRecipientsIds?.faker((faker) => [ - faker.finance.ethereumAddress(), - ]); - request.proceedRecipientsData?.faker((faker) => ['0x0000']); - request.externalPauses?.as(() => [HederaIdPropsFixture.create().value]); - request.externalControlLists?.as(() => [ - HederaIdPropsFixture.create().value, - ]); - request.externalKycLists?.as(() => [HederaIdPropsFixture.create().value]); - request.complianceId?.as(() => HederaIdPropsFixture.create().value); - request.identityRegistryId?.as(() => HederaIdPropsFixture.create().value); - }); + request.configId.faker( + (faker) => + `0x000000000000000000000000000000000000000000000000000000000000000${faker.number.int({ min: 1, max: 9 })}`, + ); + request.configVersion.as(() => 1); + request.diamondOwnerAccount?.as(() => HederaIdPropsFixture.create().value); + request.proceedRecipientsIds?.faker((faker) => [faker.finance.ethereumAddress()]); + request.proceedRecipientsData?.faker((faker) => ["0x0000"]); + request.externalPauses?.as(() => [HederaIdPropsFixture.create().value]); + request.externalControlLists?.as(() => [HederaIdPropsFixture.create().value]); + request.externalKycLists?.as(() => [HederaIdPropsFixture.create().value]); + request.complianceId?.as(() => HederaIdPropsFixture.create().value); + request.identityRegistryId?.as(() => HederaIdPropsFixture.create().value); +}); -export const AddProceedRecipientRequestFixture = - createFixture((request) => { - request.securityId.as(() => HederaIdPropsFixture.create().value); - request.proceedRecipientId.as(() => HederaIdPropsFixture.create().value); - request.data?.as(() => '0x'); - }); -export const UpdateProceedRecipientDataRequestFixture = - createFixture((request) => { - request.securityId.as(() => HederaIdPropsFixture.create().value); - request.proceedRecipientId.as(() => HederaIdPropsFixture.create().value); - request.data.as(() => '0x'); - }); +export const AddProceedRecipientRequestFixture = createFixture((request) => { + request.securityId.as(() => HederaIdPropsFixture.create().value); + request.proceedRecipientId.as(() => HederaIdPropsFixture.create().value); + request.data?.as(() => "0x"); +}); +export const UpdateProceedRecipientDataRequestFixture = createFixture((request) => { + request.securityId.as(() => HederaIdPropsFixture.create().value); + request.proceedRecipientId.as(() => HederaIdPropsFixture.create().value); + request.data.as(() => "0x"); +}); -export const RemoveProceedRecipientRequestFixture = - createFixture((request) => { - request.securityId.as(() => HederaIdPropsFixture.create().value); - request.proceedRecipientId.as(() => HederaIdPropsFixture.create().value); - }); +export const RemoveProceedRecipientRequestFixture = createFixture((request) => { + request.securityId.as(() => HederaIdPropsFixture.create().value); + request.proceedRecipientId.as(() => HederaIdPropsFixture.create().value); +}); -export const IsProceedRecipientRequestFixture = - createFixture((request) => { - request.securityId.as(() => HederaIdPropsFixture.create().value); - request.proceedRecipientId.as(() => HederaIdPropsFixture.create().value); - }); +export const IsProceedRecipientRequestFixture = createFixture((request) => { + request.securityId.as(() => HederaIdPropsFixture.create().value); + request.proceedRecipientId.as(() => HederaIdPropsFixture.create().value); +}); -export const GetProceedRecipientsRequestFixture = - createFixture((request) => { - request.securityId.as(() => HederaIdPropsFixture.create().value); - request.pageIndex.faker((faker) => faker.number.int({ min: 1, max: 10 })); - request.pageSize.faker((faker) => faker.number.int({ min: 1, max: 50 })); - }); +export const GetProceedRecipientsRequestFixture = createFixture((request) => { + request.securityId.as(() => HederaIdPropsFixture.create().value); + request.pageIndex.faker((faker) => faker.number.int({ min: 1, max: 10 })); + request.pageSize.faker((faker) => faker.number.int({ min: 1, max: 50 })); +}); -export const GetProceedRecipientsCountRequestFixture = - createFixture((request) => { - request.securityId.as(() => HederaIdPropsFixture.create().value); - }); -export const GetProceedRecipientDataRequestFixture = - createFixture((request) => { - request.securityId.as(() => HederaIdPropsFixture.create().value); - request.proceedRecipientId.as(() => HederaIdPropsFixture.create().value); - }); +export const GetProceedRecipientsCountRequestFixture = createFixture((request) => { + request.securityId.as(() => HederaIdPropsFixture.create().value); +}); +export const GetProceedRecipientDataRequestFixture = createFixture((request) => { + request.securityId.as(() => HederaIdPropsFixture.create().value); + request.proceedRecipientId.as(() => HederaIdPropsFixture.create().value); +}); diff --git a/packages/ats/sdk/__tests__/fixtures/corporateActions/CorporateActionsFixture.ts b/packages/ats/sdk/__tests__/fixtures/corporateActions/CorporateActionsFixture.ts new file mode 100644 index 000000000..217ac3cdd --- /dev/null +++ b/packages/ats/sdk/__tests__/fixtures/corporateActions/CorporateActionsFixture.ts @@ -0,0 +1,220 @@ +/* + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "[]" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright [yyyy] [name of copyright owner] + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + +*/ + +import { HederaIdPropsFixture } from "../shared/DataFixture"; +import { createFixture } from "../config"; + +import { ActionContentHashExistsQuery } from "@query/security/actionContentHashExists/ActionContentHashExistsQuery"; +import ActionContentHashExistsRequest from "@port/in/request/security/operations/corporateActions/ActionContentHashExistsRequest"; + +export const ActionContentHashExistsQueryFixture = createFixture((query) => { + query.securityId.as(() => HederaIdPropsFixture.create().value); + query.contentHash.faker((faker) => `0x${faker.string.hexadecimal({ length: 64, prefix: "" })}`); +}); + +export const ActionContentHashExistsRequestFixture = createFixture((request) => { + request.securityId.as(() => HederaIdPropsFixture.create().value); + request.contentHash.faker((faker) => `0x${faker.string.hexadecimal({ length: 64, prefix: "" })}`); +}); diff --git a/packages/ats/sdk/__tests__/fixtures/protectedPartitions/ProtectedPartitionsFixture.ts b/packages/ats/sdk/__tests__/fixtures/protectedPartitions/ProtectedPartitionsFixture.ts index dae55a70e..a9afc5375 100644 --- a/packages/ats/sdk/__tests__/fixtures/protectedPartitions/ProtectedPartitionsFixture.ts +++ b/packages/ats/sdk/__tests__/fixtures/protectedPartitions/ProtectedPartitionsFixture.ts @@ -213,7 +213,6 @@ import ProtectedTransferFromByPartitionRequest from '@port/in/request/security/o import ProtectedRedeemFromByPartitionRequest from '@port/in/request/security/operations/redeem/ProtectedRedeemFromByPartitionRequest'; import PartitionsProtectedRequest from '@port/in/request/security/operations/protectedPartitions/PartitionsProtectedRequest'; import GetNounceRequest from '@port/in/request/security/operations/protectedPartitions/GetNounceRequest'; -import ProtectedTransferAndLockByPartitionRequest from '@port/in/request/security/operations/transfer/ProtectedTransferAndLockByPartitionRequest'; import { ProtectPartitionsCommand } from '@command/security/operations/protectPartitions/ProtectPartitionsCommand'; export const ProtectedTransferFromByPartitionRequestFixture = @@ -267,24 +266,6 @@ export const GetNounceRequestFixture = createFixture( }, ); -export const ProtectedTransferAndLockByPartitionRequestFixture = - createFixture((request) => { - request.securityId.as(() => HederaIdPropsFixture.create().value); - request.partitionId.as(() => PartitionIdFixture.create().value); - request.sourceId.as(() => HederaIdPropsFixture.create().value); - request.targetId.as(() => HederaIdPropsFixture.create().value); - request.amount.faker((faker) => - faker.number.int({ min: 1, max: 10 }).toString(), - ); - request.deadline.faker((faker) => faker.date.future().getTime().toString()); - request.nounce.faker((faker) => - faker.number.int({ min: 0, max: 1000 }).toString(), - ); - request.signature.faker((faker) => - faker.string.hexadecimal({ length: 64, prefix: '0x' }), - ); - }); - export const ProtectPartitionsCommandFixture = createFixture((command) => { command.securityId.as(() => HederaIdPropsFixture.create().value); diff --git a/packages/ats/sdk/__tests__/fixtures/transfer/TransferFixture.ts b/packages/ats/sdk/__tests__/fixtures/transfer/TransferFixture.ts index 3e1f4dd7d..d70ab30dd 100644 --- a/packages/ats/sdk/__tests__/fixtures/transfer/TransferFixture.ts +++ b/packages/ats/sdk/__tests__/fixtures/transfer/TransferFixture.ts @@ -204,7 +204,7 @@ */ import { ProtectedTransferFromByPartitionCommand } from '@command/security/operations/transfer/ProtectedTransferFromByPartitionCommand'; -import { ProtectedTransferAndLockByPartitionCommand } from '@command/security/operations/transfer/ProtectedTransferAndLockByPartitionCommand'; +import { TransferAndLockCommand } from '@command/security/operations/transfer/TransferAndLockCommand'; import { createFixture } from '../config'; import { HederaIdPropsFixture, @@ -217,24 +217,15 @@ import { ForcedTransferCommand } from '@command/security/operations/transfer/For import ForcedTransferRequest from '@port/in/request/security/operations/transfer/ForcedTransferRequest'; export const TransferAndLockCommandFixture = - createFixture((command) => { + createFixture((command) => { command.amount.faker((faker) => faker.number.int({ min: 1, max: 1000 }).toString(), ); command.securityId.as(() => HederaIdPropsFixture.create().value); - command.sourceId.as(() => HederaIdPropsFixture.create().value); command.targetId.as(() => HederaIdPropsFixture.create().value); - command.partitionId.as(() => PartitionIdFixture.create().value); command.expirationDate.faker((faker) => faker.date.future().getTime().toString(), ); - command.deadline.faker((faker) => faker.date.future().getTime().toString()); - command.nounce.faker((faker) => - faker.number.int({ min: 0, max: 1000 }).toString(), - ); - command.signature.faker((faker) => - faker.string.hexadecimal({ length: 64, prefix: '0x' }), - ); }); export const TransferCommandFixture = diff --git a/packages/ats/sdk/__tests__/port/environmentMock.ts b/packages/ats/sdk/__tests__/port/environmentMock.ts index 0cd716718..ba6b70e2d 100644 --- a/packages/ats/sdk/__tests__/port/environmentMock.ts +++ b/packages/ats/sdk/__tests__/port/environmentMock.ts @@ -243,6 +243,7 @@ import { ClearingTransfer, } from "@domain/context/security/Clearing"; import { HoldDetails } from "@domain/context/security/Hold"; +import { RateStatus } from "@domain/context/bond/RateStatus"; //* Mock console.log() method global.console.log = jest.fn(); @@ -509,7 +510,16 @@ function createBondMockImplementation( for (let i = 0; i < numberOfCoupons; i++) { const timeStamp = couponInfo.firstCouponDate + couponInfo.couponFrequency * i; - const coupon = new Coupon(timeStamp, timeStamp, couponInfo.couponRate, couponInfo.couponRateDecimals, 0); + const coupon = new Coupon( + timeStamp, + timeStamp, + couponInfo.couponRate, + couponInfo.couponRateDecimals, + timeStamp, + timeStamp, + timeStamp, + RateStatus.PENDING, + ); coupons.push(coupon); } @@ -1128,7 +1138,7 @@ jest.mock("@port/out/rpc/RPCQueryAdapter", () => { return securityInfo.arePartitionsProtected ?? false; }); - singletonInstance.getNounceFor = jest.fn(async (address: EvmAddress, target: EvmAddress) => { + singletonInstance.getNonceFor = jest.fn(async (address: EvmAddress, target: EvmAddress) => { const account = "0x" + target.toString().toUpperCase().substring(2); return nonces.get(account) ?? new BigDecimal("0").toBigNumber(); }); @@ -1601,13 +1611,25 @@ jest.mock("@port/out/rpc/RPCTransactionAdapter", () => { }); singletonInstance.setCoupon = jest.fn( - async (address: EvmAddress, recordDate: BigDecimal, executionDate: BigDecimal, rate: BigDecimal) => { + async ( + address: EvmAddress, + recordDate: BigDecimal, + executionDate: BigDecimal, + rate: BigDecimal, + startDate: BigDecimal, + endDate: BigDecimal, + fixingDate: BigDecimal, + rateStatus: RateStatus, + ) => { const coupon = new Coupon( parseInt(recordDate.toString()), parseInt(executionDate.toString()), rate, rate.decimals, - 0, + parseInt(startDate.toString()), + parseInt(endDate.toString()), + parseInt(fixingDate.toString()), + rateStatus, ); coupons.push(coupon); return { @@ -1923,50 +1945,6 @@ jest.mock("@port/out/rpc/RPCTransactionAdapter", () => { }, ); - singletonInstance.protectedTransferAndLockByPartition = jest.fn( - async ( - security: EvmAddress, - partitionId: string, - amount: BigDecimal, - sourceId: EvmAddress, - targetId: EvmAddress, - expirationDate: BigDecimal, - deadline: BigDecimal, - nounce: BigDecimal, - signature: string, - ) => { - const account = "0x" + targetId.toString().toUpperCase().substring(2); - - const accountLocks = locks.get(account); - const lockIds = locksIds.get(account); - const lastLockId = lastLockIds.get(account) ?? 0; - - const newLastLockId = lastLockId + 1; - - if (!lockIds) locksIds.set(account, [newLastLockId]); - else { - lockIds.push(newLastLockId); - locksIds.set(account, lockIds); - } - if (!accountLocks) { - const newLock: lock = new Map(); - newLock.set(newLastLockId, [expirationDate.toString(), amount.toString()]); - locks.set(account, newLock); - } else { - accountLocks.set(newLastLockId, [expirationDate.toString(), amount.toString()]); - locks.set(account, accountLocks); - } - - increaseLockedBalance(targetId, amount); - decreaseBalance(sourceId, amount); - - return { - status: "success", - id: transactionId, - } as TransactionResponse; - }, - ); - singletonInstance.grantKyc = jest.fn( async ( security: EvmAddress, @@ -2441,7 +2419,8 @@ jest.mock("@port/out/mirror/MirrorNodeAdapter", () => { MirrorNodeAdapterMock.getContractResults = jest.fn( async (transactionId: string, numberOfResultItems: number, timeout = 15, requestInterval = 2) => { - return ["123", "1"]; + if (numberOfResultItems == 1) return ["1"]; + else return ["123", "1"]; }, ); diff --git a/packages/ats/sdk/__tests__/port/in/Bond.test.ts b/packages/ats/sdk/__tests__/port/in/Bond.test.ts index ceeddd450..c8ff7714f 100644 --- a/packages/ats/sdk/__tests__/port/in/Bond.test.ts +++ b/packages/ats/sdk/__tests__/port/in/Bond.test.ts @@ -37,6 +37,7 @@ import { MirrorNodeAdapter } from "@port/out/mirror/MirrorNodeAdapter"; import { RPCTransactionAdapter } from "@port/out/rpc/RPCTransactionAdapter"; import { Wallet, ethers } from "ethers"; import BaseError from "@core/error/BaseError"; +import { CastRateStatus, RateStatus } from "@domain/context/bond/RateStatus"; SDK.log = { level: "ERROR", transports: new LoggerTransports.Console() }; @@ -169,6 +170,7 @@ describe("πŸ§ͺ Bond test", () => { const couponRate = "3"; const couponRecordDate = startingDate + 30; const couponExecutionDate = startingDate + 35; + const couponFixingDate = startingDate + 25; await Bond.setCoupon( new SetCouponRequest({ @@ -176,7 +178,10 @@ describe("πŸ§ͺ Bond test", () => { rate: couponRate, recordTimestamp: couponRecordDate.toString(), executionTimestamp: couponExecutionDate.toString(), - period: TIME_PERIODS_S.DAY.toString(), + startTimestamp: "0", + endTimestamp: TIME_PERIODS_S.DAY.toString(), + fixingTimestamp: couponFixingDate.toString(), + rateStatus: CastRateStatus.toNumber(RateStatus.SET), }), ); @@ -234,6 +239,7 @@ describe("πŸ§ͺ Bond test", () => { const rate = "1"; const recordTimestamp = Math.ceil(new Date().getTime() / 1000) + 1000; const executionTimestamp = recordTimestamp + 1000; + const couponFixingDate = recordTimestamp - 1000; await Bond.setCoupon( new SetCouponRequest({ @@ -241,7 +247,10 @@ describe("πŸ§ͺ Bond test", () => { rate: rate, recordTimestamp: recordTimestamp.toString(), executionTimestamp: executionTimestamp.toString(), - period: TIME_PERIODS_S.DAY.toString(), + startTimestamp: "0", + endTimestamp: TIME_PERIODS_S.DAY.toString(), + fixingTimestamp: couponFixingDate.toString(), + rateStatus: CastRateStatus.toNumber(RateStatus.PENDING), }), ); diff --git a/packages/ats/sdk/__tests__/port/in/Security.test.ts b/packages/ats/sdk/__tests__/port/in/Security.test.ts index cef4397c8..eaca74d54 100644 --- a/packages/ats/sdk/__tests__/port/in/Security.test.ts +++ b/packages/ats/sdk/__tests__/port/in/Security.test.ts @@ -273,7 +273,6 @@ import { PartitionsProtectedRequest, ProtectedTransferFromByPartitionRequest, ProtectedRedeemFromByPartitionRequest, - ProtectedTransferAndLockByPartitionRequest, ProtectedCreateHoldByPartitionRequest, ExecuteHoldByPartitionRequest, ActivateClearingRequest, @@ -1180,7 +1179,6 @@ describe('πŸ§ͺ Security tests', () => { const issueAmount = '100'; const protectedTransferAmount = '50'; const protectedRedeemAmount = '5'; - const protectedTransferAndLockAmount = '1'; const partitionBytes32 = '0x0000000000000000000000000000000000000000000000000000000000000001'; @@ -1245,24 +1243,6 @@ describe('πŸ§ͺ Security tests', () => { ).payload, ).toBe(true); - expect( - ( - await Security.protectedTransferAndLockByPartition( - new ProtectedTransferAndLockByPartitionRequest({ - securityId: equity.evmDiamondAddress!, - partitionId: partitionBytes32, - sourceId: CLIENT_ACCOUNT_ECDSA_A.evmAddress!.toString(), - targetId: CLIENT_ACCOUNT_ECDSA.evmAddress!.toString(), - expirationDate: '9999999999', - amount: protectedTransferAndLockAmount, - deadline: '9999999999', - nounce: 3, - signature: 'vvvv', - }), - ) - ).payload, - ).toBe(1); - // check if transfer origin account has correct balance securities expect( ( @@ -1277,8 +1257,7 @@ describe('πŸ§ͺ Security tests', () => { ( +issueAmount - +protectedTransferAmount - - +protectedRedeemAmount - - +protectedTransferAndLockAmount + +protectedRedeemAmount ).toString(), ); diff --git a/packages/ats/sdk/jest.config.js b/packages/ats/sdk/jest.config.js index 9e2c77839..7c667b99b 100644 --- a/packages/ats/sdk/jest.config.js +++ b/packages/ats/sdk/jest.config.js @@ -1,34 +1,29 @@ -const { pathsToModuleNameMapper } = require('ts-jest'); -const { compilerOptions } = require('./tsconfig.json'); +const { pathsToModuleNameMapper } = require("ts-jest"); +const { compilerOptions } = require("./tsconfig.json"); module.exports = { - testEnvironment: 'node', - preset: 'ts-jest', - testMatch: ['**/(__tests__|src)/**/*.(test|spec).[jt]s?(x)'], - testPathIgnorePatterns: ['/build/', '/src_old/'], - modulePathIgnorePatterns: ['/build/'], - collectCoverage: true, - coverageDirectory: '../../../coverage/sdk', - collectCoverageFrom: [ - 'src/**/*.ts', - 'src/**/*.mts', - '!src/**/*.d.ts', - '!src/**/*.d.mts', - ], + testEnvironment: "node", + preset: "ts-jest", + testMatch: ["**/(__tests__|src)/**/*.(test|spec).[jt]s?(x)"], + testPathIgnorePatterns: ["/build/", "/src_old/"], + modulePathIgnorePatterns: ["/build/"], + collectCoverage: false, + coverageDirectory: "../../../coverage/sdk", + collectCoverageFrom: ["src/**/*.ts", "src/**/*.mts", "!src/**/*.d.ts", "!src/**/*.d.mts"], transform: { - '^.+\\.ts?$': ['ts-jest', { isolatedModules: true }], - '^.+\\.[t|j]sx?$': 'babel-jest', - '^.+\\.m?js$': 'babel-jest', + "^.+\\.ts?$": ["ts-jest", { isolatedModules: true }], + "^.+\\.[t|j]sx?$": "babel-jest", + "^.+\\.m?js$": "babel-jest", }, transformIgnorePatterns: [ - 'node_modules/(?!(@terminal3/vc_core|@terminal3/ecdsa_vc|did-jwt|@scure/base|@noble/curves|@noble/hashes)/)', + "node_modules/(?!(@terminal3/vc_core|@terminal3/ecdsa_vc|did-jwt|@scure/base|@noble/curves|@noble/hashes)/)", ], - setupFilesAfterEnv: ['./__tests__/jest-setup-file.ts'], + setupFilesAfterEnv: ["./__tests__/jest-setup-file.ts"], testTimeout: 10_000, moduleNameMapper: { ...pathsToModuleNameMapper(compilerOptions.paths, { - prefix: '/', + prefix: "/", }), - '^(\\.{1,2}/.*)\\.(m)?js$': '$1', + "^(\\.{1,2}/.*)\\.(m)?js$": "$1", }, }; diff --git a/packages/ats/sdk/package.json b/packages/ats/sdk/package.json index f7ab7e375..f3df15040 100644 --- a/packages/ats/sdk/package.json +++ b/packages/ats/sdk/package.json @@ -1,7 +1,7 @@ { "name": "@hashgraph/asset-tokenization-sdk", "description": "Asset Tokenization SDK for Hedera", - "version": "3.1.0", + "version": "4.0.0", "repository": "https://github.com/hashgraph/asset-tokenization-studio", "main": "./build/cjs/src/index.js", "module": "./build/esm/src/index.js", diff --git a/packages/ats/sdk/src/app/service/transaction/TransactionService.unit.test.ts b/packages/ats/sdk/src/app/service/transaction/TransactionService.unit.test.ts index 02b556bb3..3390beaf3 100644 --- a/packages/ats/sdk/src/app/service/transaction/TransactionService.unit.test.ts +++ b/packages/ats/sdk/src/app/service/transaction/TransactionService.unit.test.ts @@ -203,21 +203,21 @@ */ -import Injectable from '@core/injectable/Injectable'; -import { createMock } from '@golevelup/ts-jest'; -import { MirrorNodeAdapter } from '@port/out/mirror/MirrorNodeAdapter'; -import TransactionService from './TransactionService'; -import { SetCouponCommandHandler } from '@command/bond/coupon/set/SetCouponCommandHandler'; -import TransactionResponse from '@domain/context/transaction/TransactionResponse'; -import { EmptyResponse } from './error/EmptyResponse'; -import { TransactionResponseFixture } from '@test/fixtures/shared/DataFixture'; -import { InvalidResponse } from '@core/error/InvalidResponse'; -import { faker } from '@faker-js/faker/.'; -import { CreateEquityCommandHandler } from '@command/equity/create/CreateEquityCommandHandler'; -import { CreateBondCommandHandler } from '@command/bond/create/CreateBondCommandHandler'; -import { ADDRESS_LENGTH, BYTES_32_LENGTH } from '@core/Constants'; - -describe('TransactioNService', () => { +import Injectable from "@core/injectable/Injectable"; +import { createMock } from "@golevelup/ts-jest"; +import { MirrorNodeAdapter } from "@port/out/mirror/MirrorNodeAdapter"; +import TransactionService from "./TransactionService"; +import { SetCouponCommandHandler } from "@command/bond/coupon/set/SetCouponCommandHandler"; +import TransactionResponse from "@domain/context/transaction/TransactionResponse"; +import { EmptyResponse } from "./error/EmptyResponse"; +import { TransactionResponseFixture } from "@test/fixtures/shared/DataFixture"; +import { InvalidResponse } from "@core/error/InvalidResponse"; +import { faker } from "@faker-js/faker/."; +import { CreateEquityCommandHandler } from "@command/equity/create/CreateEquityCommandHandler"; +import { CreateBondCommandHandler } from "@command/bond/create/CreateBondCommandHandler"; +import { ADDRESS_LENGTH, BYTES_32_LENGTH } from "@core/Constants"; + +describe("TransactioNService", () => { let service: TransactionService; const position = 1; const numberOfResultsItems = 2; @@ -227,7 +227,7 @@ describe('TransactioNService', () => { const result = faker.number.int({ min: 1, max: 999 }).toString(); beforeEach(() => { - jest.spyOn(Injectable, 'resolve').mockReturnValue(mirrorNodeAdapterMock); + jest.spyOn(Injectable, "resolve").mockReturnValue(mirrorNodeAdapterMock); service = new TransactionService(); }); @@ -235,9 +235,9 @@ describe('TransactioNService', () => { jest.resetAllMocks(); }); - describe('getTransactionResult', () => { - describe('error cases', () => { - it('should throw an error when transaction response id is missing', async () => { + describe("getTransactionResult", () => { + describe("error cases", () => { + it("should throw an error when transaction response id is missing", async () => { const response: TransactionResponse = { id: undefined, }; @@ -250,7 +250,7 @@ describe('TransactioNService', () => { }), ).rejects.toThrow(EmptyResponse); }); - it('should throw an error when transaction response is empty', async () => { + it("should throw an error when transaction response is empty", async () => { mirrorNodeAdapterMock.getContractResults.mockResolvedValue(null); await expect( service.getTransactionResult({ @@ -263,8 +263,8 @@ describe('TransactioNService', () => { }); }); - describe('success cases', () => { - it('should retrieve transaction result from event data', async () => { + describe("success cases", () => { + it("should retrieve transaction result from event data", async () => { await expect( service.getTransactionResult({ res: transactionResponse, @@ -275,8 +275,8 @@ describe('TransactioNService', () => { }), ).resolves.toBe(result); }); - it('should retrieve transaction result from mirror node', async () => { - const results = ['1', result]; + it("should retrieve transaction result from mirror node", async () => { + const results = ["1", result]; mirrorNodeAdapterMock.getContractResults.mockResolvedValue(results); await expect( service.getTransactionResult({ @@ -290,15 +290,12 @@ describe('TransactioNService', () => { transactionResponse.id, numberOfResultsItems, ); - expect(mirrorNodeAdapterMock.getContractResults).toHaveBeenCalledTimes( - 1, - ); + expect(mirrorNodeAdapterMock.getContractResults).toHaveBeenCalledTimes(1); }); - it('should retrieve transaction result for CreateEquityCommandHandler with formatted address', async () => { - const rawResult = - '0'.repeat(BYTES_32_LENGTH - ADDRESS_LENGTH + 2) + '1234567890abcdef'; - const expectedResult = '0x1234567890abcdef'; - const results = ['1', rawResult]; + it("should retrieve transaction result for CreateEquityCommandHandler with formatted address", async () => { + const rawResult = "0".repeat(BYTES_32_LENGTH - ADDRESS_LENGTH + 2) + "1234567890abcdef"; + const expectedResult = "0x1234567890abcdef"; + const results = ["1", rawResult]; mirrorNodeAdapterMock.getContractResults.mockResolvedValue(results); await expect( @@ -314,16 +311,13 @@ describe('TransactioNService', () => { transactionResponse.id, numberOfResultsItems, ); - expect(mirrorNodeAdapterMock.getContractResults).toHaveBeenCalledTimes( - 1, - ); + expect(mirrorNodeAdapterMock.getContractResults).toHaveBeenCalledTimes(1); }); - it('should retrieve transaction result for CreateBondCommandHandler with formatted address', async () => { - const rawResult = - '0'.repeat(BYTES_32_LENGTH - ADDRESS_LENGTH + 2) + 'abcdef1234567890'; - const expectedResult = '0xabcdef1234567890'; - const results = ['1', rawResult]; + it("should retrieve transaction result for CreateBondCommandHandler with formatted address", async () => { + const rawResult = "0".repeat(BYTES_32_LENGTH - ADDRESS_LENGTH + 2) + "abcdef1234567890"; + const expectedResult = "0xabcdef1234567890"; + const results = ["1", rawResult]; mirrorNodeAdapterMock.getContractResults.mockResolvedValue(results); await expect( @@ -339,9 +333,7 @@ describe('TransactioNService', () => { transactionResponse.id, numberOfResultsItems, ); - expect(mirrorNodeAdapterMock.getContractResults).toHaveBeenCalledTimes( - 1, - ); + expect(mirrorNodeAdapterMock.getContractResults).toHaveBeenCalledTimes(1); }); }); }); diff --git a/packages/ats/sdk/src/app/usecase/command/bond/coupon/set/SetCouponCommand.ts b/packages/ats/sdk/src/app/usecase/command/bond/coupon/set/SetCouponCommand.ts index cee0eb249..2bd9f71b1 100644 --- a/packages/ats/sdk/src/app/usecase/command/bond/coupon/set/SetCouponCommand.ts +++ b/packages/ats/sdk/src/app/usecase/command/bond/coupon/set/SetCouponCommand.ts @@ -205,6 +205,7 @@ import { Command } from '@core/command/Command'; import { CommandResponse } from '@core/command/CommandResponse'; +import { RateStatus } from '@domain/context/bond/RateStatus.js'; export class SetCouponCommandResponse implements CommandResponse { constructor( @@ -219,7 +220,10 @@ export class SetCouponCommand extends Command { public readonly recordDate: string, public readonly executionDate: string, public readonly rate: string, - public readonly period: string, + public readonly startDate: string, + public readonly endDate: string, + public readonly fixingDate: string, + public readonly rateStatus: RateStatus, ) { super(); } diff --git a/packages/ats/sdk/src/app/usecase/command/bond/coupon/set/SetCouponCommandHandler.ts b/packages/ats/sdk/src/app/usecase/command/bond/coupon/set/SetCouponCommandHandler.ts index 9bc7bc7b3..09abaad23 100644 --- a/packages/ats/sdk/src/app/usecase/command/bond/coupon/set/SetCouponCommandHandler.ts +++ b/packages/ats/sdk/src/app/usecase/command/bond/coupon/set/SetCouponCommandHandler.ts @@ -203,19 +203,17 @@ */ -import { ICommandHandler } from '@core/command/CommandHandler'; -import { CommandHandler } from '@core/decorator/CommandHandlerDecorator'; -import { SetCouponCommand, SetCouponCommandResponse } from './SetCouponCommand'; -import TransactionService from '@service/transaction/TransactionService'; -import { lazyInject } from '@core/decorator/LazyInjectDecorator'; -import BigDecimal from '@domain/context/shared/BigDecimal'; -import ContractService from '@service/contract/ContractService'; -import { SetCouponCommandError } from './error/SetCouponCommandError'; +import { ICommandHandler } from "@core/command/CommandHandler"; +import { CommandHandler } from "@core/decorator/CommandHandlerDecorator"; +import { SetCouponCommand, SetCouponCommandResponse } from "./SetCouponCommand"; +import TransactionService from "@service/transaction/TransactionService"; +import { lazyInject } from "@core/decorator/LazyInjectDecorator"; +import BigDecimal from "@domain/context/shared/BigDecimal"; +import ContractService from "@service/contract/ContractService"; +import { SetCouponCommandError } from "./error/SetCouponCommandError"; @CommandHandler(SetCouponCommand) -export class SetCouponCommandHandler - implements ICommandHandler -{ +export class SetCouponCommandHandler implements ICommandHandler { constructor( @lazyInject(TransactionService) private readonly transactionService: TransactionService, @@ -225,18 +223,20 @@ export class SetCouponCommandHandler async execute(command: SetCouponCommand): Promise { try { - const { address, recordDate, executionDate, rate, period } = command; + const { address, recordDate, executionDate, rate, startDate, endDate, fixingDate, rateStatus } = command; const handler = this.transactionService.getHandler(); - const securityEvmAddress = - await this.contractService.getContractEvmAddress(address); + const securityEvmAddress = await this.contractService.getContractEvmAddress(address); const res = await handler.setCoupon( securityEvmAddress, BigDecimal.fromString(recordDate), BigDecimal.fromString(executionDate), BigDecimal.fromString(rate), - BigDecimal.fromString(period), + BigDecimal.fromString(startDate), + BigDecimal.fromString(endDate), + BigDecimal.fromString(fixingDate), + rateStatus, address, ); @@ -244,13 +244,11 @@ export class SetCouponCommandHandler res, result: res.response?.couponID, className: SetCouponCommandHandler.name, - position: 1, - numberOfResultsItems: 2, + position: 0, + numberOfResultsItems: 1, }); - return Promise.resolve( - new SetCouponCommandResponse(parseInt(couponId, 16), res.id!), - ); + return Promise.resolve(new SetCouponCommandResponse(parseInt(couponId, 16), res.id!)); } catch (error) { throw new SetCouponCommandError(error as Error); } diff --git a/packages/ats/sdk/src/app/usecase/command/bond/coupon/set/SetCouponCommandHandler.unit.test.ts b/packages/ats/sdk/src/app/usecase/command/bond/coupon/set/SetCouponCommandHandler.unit.test.ts index 7158e8858..94791fcdc 100644 --- a/packages/ats/sdk/src/app/usecase/command/bond/coupon/set/SetCouponCommandHandler.unit.test.ts +++ b/packages/ats/sdk/src/app/usecase/command/bond/coupon/set/SetCouponCommandHandler.unit.test.ts @@ -203,24 +203,24 @@ */ -import { SetCouponCommand, SetCouponCommandResponse } from './SetCouponCommand'; -import { SetCouponCommandHandler } from './SetCouponCommandHandler'; -import BigDecimal from '@domain/context/shared/BigDecimal'; -import { SetCouponCommandFixture } from '@test/fixtures/bond/BondFixture'; -import { createMock } from '@golevelup/ts-jest'; -import TransactionService from '@service/transaction/TransactionService'; +import { SetCouponCommand, SetCouponCommandResponse } from "./SetCouponCommand"; +import { SetCouponCommandHandler } from "./SetCouponCommandHandler"; +import BigDecimal from "@domain/context/shared/BigDecimal"; +import { SetCouponCommandFixture } from "@test/fixtures/bond/BondFixture"; +import { createMock } from "@golevelup/ts-jest"; +import TransactionService from "@service/transaction/TransactionService"; import { CouponIdFixture, ErrorMsgFixture, EvmAddressPropsFixture, TransactionIdFixture, -} from '@test/fixtures/shared/DataFixture'; -import ContractService from '@service/contract/ContractService'; -import EvmAddress from '@domain/context/contract/EvmAddress'; -import { SetCouponCommandError } from './error/SetCouponCommandError'; -import { ErrorCode } from '@core/error/BaseError'; +} from "@test/fixtures/shared/DataFixture"; +import ContractService from "@service/contract/ContractService"; +import EvmAddress from "@domain/context/contract/EvmAddress"; +import { SetCouponCommandError } from "./error/SetCouponCommandError"; +import { ErrorCode } from "@core/error/BaseError"; -describe('SetCouponCommandHandler', () => { +describe("SetCouponCommandHandler", () => { let handler: SetCouponCommandHandler; let command: SetCouponCommand; const transactionServiceMock = createMock(); @@ -232,10 +232,7 @@ describe('SetCouponCommandHandler', () => { const errorMsg = ErrorMsgFixture.create().msg; beforeEach(() => { - handler = new SetCouponCommandHandler( - transactionServiceMock, - contractServiceMock, - ); + handler = new SetCouponCommandHandler(transactionServiceMock, contractServiceMock); command = SetCouponCommandFixture.create(); }); @@ -243,29 +240,25 @@ describe('SetCouponCommandHandler', () => { jest.resetAllMocks(); }); - describe('execute', () => { - describe('error cases', () => { - it('throws SetCouponCommandError when command fails with uncaught error', async () => { + describe("execute", () => { + describe("error cases", () => { + it("throws SetCouponCommandError when command fails with uncaught error", async () => { const fakeError = new Error(errorMsg); contractServiceMock.getContractEvmAddress.mockRejectedValue(fakeError); const resultPromise = handler.execute(command); - await expect(resultPromise).rejects.toBeInstanceOf( - SetCouponCommandError, - ); + await expect(resultPromise).rejects.toBeInstanceOf(SetCouponCommandError); await expect(resultPromise).rejects.toMatchObject({ - message: expect.stringContaining( - `An error occurred while setting the coupon: ${errorMsg}`, - ), + message: expect.stringContaining(`An error occurred while setting the coupon: ${errorMsg}`), errorCode: ErrorCode.UncaughtCommandError, }); }); }); - describe('success cases', () => { - it('successfully sets coupon', async () => { + describe("success cases", () => { + it("successfully sets coupon", async () => { setupContractEvmAddressMock(); setupSuccessfulTransactionMock(); setupSuccesfulTransactionResultMock(); @@ -274,12 +267,8 @@ describe('SetCouponCommandHandler', () => { expectSuccessfulResponse(result); expectTransactionServiceCall(command, evmAddress); - expect( - transactionServiceMock.getHandler().setCoupon, - ).toHaveBeenCalledTimes(1); - expect( - transactionServiceMock.getTransactionResult, - ).toHaveBeenCalledTimes(1); + expect(transactionServiceMock.getHandler().setCoupon).toHaveBeenCalledTimes(1); + expect(transactionServiceMock.getTransactionResult).toHaveBeenCalledTimes(1); }); }); }); @@ -314,7 +303,10 @@ describe('SetCouponCommandHandler', () => { BigDecimal.fromString(command.recordDate), BigDecimal.fromString(command.executionDate), BigDecimal.fromString(command.rate), - BigDecimal.fromString(command.period), + BigDecimal.fromString(command.startDate), + BigDecimal.fromString(command.endDate), + BigDecimal.fromString(command.fixingDate), + command.rateStatus, command.address, ); expect(transactionServiceMock.getTransactionResult).toHaveBeenCalledWith( @@ -325,8 +317,8 @@ describe('SetCouponCommandHandler', () => { }, result: couponId, className: SetCouponCommandHandler.name, - position: 1, - numberOfResultsItems: 2, + position: 0, + numberOfResultsItems: 1, }), ); } diff --git a/packages/ats/sdk/src/app/usecase/command/equity/balanceAdjustments/setScheduledBalanceAdjustment/SetScheduledBalanceAdjustmentCommandHandler.ts b/packages/ats/sdk/src/app/usecase/command/equity/balanceAdjustments/setScheduledBalanceAdjustment/SetScheduledBalanceAdjustmentCommandHandler.ts index b53c52cf7..a3c523dd0 100644 --- a/packages/ats/sdk/src/app/usecase/command/equity/balanceAdjustments/setScheduledBalanceAdjustment/SetScheduledBalanceAdjustmentCommandHandler.ts +++ b/packages/ats/sdk/src/app/usecase/command/equity/balanceAdjustments/setScheduledBalanceAdjustment/SetScheduledBalanceAdjustmentCommandHandler.ts @@ -203,21 +203,21 @@ */ -import { ICommandHandler } from '@core/command/CommandHandler'; -import { CommandHandler } from '@core/decorator/CommandHandlerDecorator'; +import { ICommandHandler } from "@core/command/CommandHandler"; +import { CommandHandler } from "@core/decorator/CommandHandlerDecorator"; import { SetScheduledBalanceAdjustmentCommand, SetScheduledBalanceAdjustmentCommandResponse, -} from './SetScheduledBalanceAdjustmentCommand'; -import TransactionService from '@service/transaction/TransactionService'; -import { lazyInject } from '@core/decorator/LazyInjectDecorator'; -import EvmAddress from '@domain/context/contract/EvmAddress'; -import BigDecimal from '@domain/context/shared/BigDecimal'; -import AccountService from '@service/account/AccountService'; -import { SecurityRole } from '@domain/context/security/SecurityRole'; -import ValidationService from '@service/validation/ValidationService'; -import ContractService from '@service/contract/ContractService'; -import { SetScheduledBalanceAdjustmentCommandError } from './error/SetScheduledBalanceAdjustmentCommandError'; +} from "./SetScheduledBalanceAdjustmentCommand"; +import TransactionService from "@service/transaction/TransactionService"; +import { lazyInject } from "@core/decorator/LazyInjectDecorator"; +import EvmAddress from "@domain/context/contract/EvmAddress"; +import BigDecimal from "@domain/context/shared/BigDecimal"; +import AccountService from "@service/account/AccountService"; +import { SecurityRole } from "@domain/context/security/SecurityRole"; +import ValidationService from "@service/validation/ValidationService"; +import ContractService from "@service/contract/ContractService"; +import { SetScheduledBalanceAdjustmentCommandError } from "./error/SetScheduledBalanceAdjustmentCommandError"; @CommandHandler(SetScheduledBalanceAdjustmentCommand) export class SetScheduledBalanceAdjustmentCommandHandler @@ -234,24 +234,17 @@ export class SetScheduledBalanceAdjustmentCommandHandler private readonly contractService: ContractService, ) {} - async execute( - command: SetScheduledBalanceAdjustmentCommand, - ): Promise { + async execute(command: SetScheduledBalanceAdjustmentCommand): Promise { try { const { securityId, executionDate, factor, decimals } = command; const handler = this.transactionService.getHandler(); const account = this.accountService.getCurrentAccount(); - const securityEvmAddress: EvmAddress = - await this.contractService.getContractEvmAddress(securityId); + const securityEvmAddress: EvmAddress = await this.contractService.getContractEvmAddress(securityId); await this.validationService.checkPause(securityId); - await this.validationService.checkRole( - SecurityRole._CORPORATEACTIONS_ROLE, - account.evmAddress!, - securityId, - ); + await this.validationService.checkRole(SecurityRole._CORPORATEACTIONS_ROLE, account.evmAddress!, securityId); const res = await handler.setScheduledBalanceAdjustment( securityEvmAddress, @@ -261,20 +254,16 @@ export class SetScheduledBalanceAdjustmentCommandHandler securityId, ); - const balanceAdjustmentId = - await this.transactionService.getTransactionResult({ - res, - result: res.response?.balanceAdjustmentID, - className: SetScheduledBalanceAdjustmentCommandHandler.name, - position: 1, - numberOfResultsItems: 2, - }); + const balanceAdjustmentId = await this.transactionService.getTransactionResult({ + res, + result: res.response?.balanceAdjustmentID, + className: SetScheduledBalanceAdjustmentCommandHandler.name, + position: 0, + numberOfResultsItems: 1, + }); return Promise.resolve( - new SetScheduledBalanceAdjustmentCommandResponse( - parseInt(balanceAdjustmentId, 16), - res.id!, - ), + new SetScheduledBalanceAdjustmentCommandResponse(parseInt(balanceAdjustmentId, 16), res.id!), ); } catch (error) { throw new SetScheduledBalanceAdjustmentCommandError(error as Error); diff --git a/packages/ats/sdk/src/app/usecase/command/equity/balanceAdjustments/setScheduledBalanceAdjustment/SetScheduledBalanceAdjustmentCommandHandler.unit.test.ts b/packages/ats/sdk/src/app/usecase/command/equity/balanceAdjustments/setScheduledBalanceAdjustment/SetScheduledBalanceAdjustmentCommandHandler.unit.test.ts index d4f47684e..dbe0e3367 100644 --- a/packages/ats/sdk/src/app/usecase/command/equity/balanceAdjustments/setScheduledBalanceAdjustment/SetScheduledBalanceAdjustmentCommandHandler.unit.test.ts +++ b/packages/ats/sdk/src/app/usecase/command/equity/balanceAdjustments/setScheduledBalanceAdjustment/SetScheduledBalanceAdjustmentCommandHandler.unit.test.ts @@ -203,31 +203,27 @@ */ -import { createMock } from '@golevelup/ts-jest'; -import { SetScheduledBalanceAdjustmentCommandHandler } from './SetScheduledBalanceAdjustmentCommandHandler'; +import { createMock } from "@golevelup/ts-jest"; +import { SetScheduledBalanceAdjustmentCommandHandler } from "./SetScheduledBalanceAdjustmentCommandHandler"; import { SetScheduledBalanceAdjustmentCommand, SetScheduledBalanceAdjustmentCommandResponse, -} from './SetScheduledBalanceAdjustmentCommand'; -import TransactionService from '@service/transaction/TransactionService'; -import ContractService from '@service/contract/ContractService'; -import ValidationService from '@service/validation/ValidationService'; -import EvmAddress from '@domain/context/contract/EvmAddress'; -import { - AccountPropsFixture, - ErrorMsgFixture, - TransactionIdFixture, -} from '@test/fixtures/shared/DataFixture'; -import AccountService from '@service/account/AccountService'; -import { SetScheduledBalanceAdjustmentCommandFixture } from '@test/fixtures/equity/EquityFixture'; -import BigDecimal from '@domain/context/shared/BigDecimal'; -import { SecurityRole } from '@domain/context/security/SecurityRole'; -import Account from '@domain/context/account/Account'; -import { faker } from '@faker-js/faker/.'; -import { SetScheduledBalanceAdjustmentCommandError } from './error/SetScheduledBalanceAdjustmentCommandError'; -import { ErrorCode } from '@core/error/BaseError'; - -describe('SetScheduledBalanceAdjustmentCommandHandler', () => { +} from "./SetScheduledBalanceAdjustmentCommand"; +import TransactionService from "@service/transaction/TransactionService"; +import ContractService from "@service/contract/ContractService"; +import ValidationService from "@service/validation/ValidationService"; +import EvmAddress from "@domain/context/contract/EvmAddress"; +import { AccountPropsFixture, ErrorMsgFixture, TransactionIdFixture } from "@test/fixtures/shared/DataFixture"; +import AccountService from "@service/account/AccountService"; +import { SetScheduledBalanceAdjustmentCommandFixture } from "@test/fixtures/equity/EquityFixture"; +import BigDecimal from "@domain/context/shared/BigDecimal"; +import { SecurityRole } from "@domain/context/security/SecurityRole"; +import Account from "@domain/context/account/Account"; +import { faker } from "@faker-js/faker/."; +import { SetScheduledBalanceAdjustmentCommandError } from "./error/SetScheduledBalanceAdjustmentCommandError"; +import { ErrorCode } from "@core/error/BaseError"; + +describe("SetScheduledBalanceAdjustmentCommandHandler", () => { let handler: SetScheduledBalanceAdjustmentCommandHandler; let command: SetScheduledBalanceAdjustmentCommand; const transactionServiceMock = createMock(); @@ -239,7 +235,7 @@ describe('SetScheduledBalanceAdjustmentCommandHandler', () => { const account = new Account(AccountPropsFixture.create()); const evmAddress = new EvmAddress(account.evmAddress!); const errorMsg = ErrorMsgFixture.create().msg; - const balanceAdjustmentId = '0x' + faker.number.hex(32); + const balanceAdjustmentId = "0x" + faker.number.hex(32); beforeEach(() => { handler = new SetScheduledBalanceAdjustmentCommandHandler( @@ -255,18 +251,16 @@ describe('SetScheduledBalanceAdjustmentCommandHandler', () => { jest.resetAllMocks(); }); - describe('execute', () => { - describe('error cases', () => { - it('throws SetScheduledBalanceAdjustmentCommandError when command fails with uncaught error', async () => { + describe("execute", () => { + describe("error cases", () => { + it("throws SetScheduledBalanceAdjustmentCommandError when command fails with uncaught error", async () => { const fakeError = new Error(errorMsg); contractServiceMock.getContractEvmAddress.mockRejectedValue(fakeError); const resultPromise = handler.execute(command); - await expect(resultPromise).rejects.toBeInstanceOf( - SetScheduledBalanceAdjustmentCommandError, - ); + await expect(resultPromise).rejects.toBeInstanceOf(SetScheduledBalanceAdjustmentCommandError); await expect(resultPromise).rejects.toMatchObject({ message: expect.stringContaining( @@ -276,33 +270,23 @@ describe('SetScheduledBalanceAdjustmentCommandHandler', () => { }); }); }); - describe('success cases', () => { - it('should successfully set scheduled balance adjustment', async () => { + describe("success cases", () => { + it("should successfully set scheduled balance adjustment", async () => { contractServiceMock.getContractEvmAddress.mockResolvedValue(evmAddress); validationServiceMock.checkMaturityDate.mockResolvedValue(undefined); accountServiceMock.getCurrentAccount.mockReturnValue(account); - transactionServiceMock - .getHandler() - .setScheduledBalanceAdjustment.mockResolvedValue({ - id: transactionId, - }); + transactionServiceMock.getHandler().setScheduledBalanceAdjustment.mockResolvedValue({ + id: transactionId, + }); - transactionServiceMock.getTransactionResult.mockResolvedValue( - balanceAdjustmentId, - ); + transactionServiceMock.getTransactionResult.mockResolvedValue(balanceAdjustmentId); const result = await handler.execute(command); - expect(result).toBeInstanceOf( - SetScheduledBalanceAdjustmentCommandResponse, - ); - expect(contractServiceMock.getContractEvmAddress).toHaveBeenCalledTimes( - 1, - ); - expect(contractServiceMock.getContractEvmAddress).toHaveBeenCalledWith( - command.securityId, - ); + expect(result).toBeInstanceOf(SetScheduledBalanceAdjustmentCommandResponse); + expect(contractServiceMock.getContractEvmAddress).toHaveBeenCalledTimes(1); + expect(contractServiceMock.getContractEvmAddress).toHaveBeenCalledWith(command.securityId); expect(validationServiceMock.checkPause).toHaveBeenCalledTimes(1); expect(validationServiceMock.checkRole).toHaveBeenCalledTimes(1); expect(validationServiceMock.checkRole).toHaveBeenCalledWith( @@ -310,25 +294,17 @@ describe('SetScheduledBalanceAdjustmentCommandHandler', () => { evmAddress.toString(), command.securityId, ); - expect( - transactionServiceMock.getTransactionResult, - ).toHaveBeenCalledTimes(1); - expect( - transactionServiceMock.getTransactionResult, - ).toHaveBeenCalledWith( + expect(transactionServiceMock.getTransactionResult).toHaveBeenCalledTimes(1); + expect(transactionServiceMock.getTransactionResult).toHaveBeenCalledWith( expect.objectContaining({ res: { id: transactionId }, className: SetScheduledBalanceAdjustmentCommandHandler.name, - position: 1, - numberOfResultsItems: 2, + position: 0, + numberOfResultsItems: 1, }), ); - expect( - transactionServiceMock.getHandler().setScheduledBalanceAdjustment, - ).toHaveBeenCalledTimes(1); - expect( - transactionServiceMock.getHandler().setScheduledBalanceAdjustment, - ).toHaveBeenCalledWith( + expect(transactionServiceMock.getHandler().setScheduledBalanceAdjustment).toHaveBeenCalledTimes(1); + expect(transactionServiceMock.getHandler().setScheduledBalanceAdjustment).toHaveBeenCalledWith( evmAddress, BigDecimal.fromString(command.executionDate), BigDecimal.fromString(command.factor), diff --git a/packages/ats/sdk/src/app/usecase/command/equity/dividends/set/SetDividendsCommandHandler.ts b/packages/ats/sdk/src/app/usecase/command/equity/dividends/set/SetDividendsCommandHandler.ts index bb5207740..0e590bb2f 100644 --- a/packages/ats/sdk/src/app/usecase/command/equity/dividends/set/SetDividendsCommandHandler.ts +++ b/packages/ats/sdk/src/app/usecase/command/equity/dividends/set/SetDividendsCommandHandler.ts @@ -203,22 +203,17 @@ */ -import { ICommandHandler } from '@core/command/CommandHandler'; -import { CommandHandler } from '@core/decorator/CommandHandlerDecorator'; -import { - SetDividendsCommand, - SetDividendsCommandResponse, -} from './SetDividendsCommand'; -import TransactionService from '@service/transaction/TransactionService'; -import { lazyInject } from '@core/decorator/LazyInjectDecorator'; -import BigDecimal from '@domain/context/shared/BigDecimal'; -import ContractService from '@service/contract/ContractService'; -import { SetDividendsCommandError } from './error/SetDividendsCommandError'; +import { ICommandHandler } from "@core/command/CommandHandler"; +import { CommandHandler } from "@core/decorator/CommandHandlerDecorator"; +import { SetDividendsCommand, SetDividendsCommandResponse } from "./SetDividendsCommand"; +import TransactionService from "@service/transaction/TransactionService"; +import { lazyInject } from "@core/decorator/LazyInjectDecorator"; +import BigDecimal from "@domain/context/shared/BigDecimal"; +import ContractService from "@service/contract/ContractService"; +import { SetDividendsCommandError } from "./error/SetDividendsCommandError"; @CommandHandler(SetDividendsCommand) -export class SetDividendsCommandHandler - implements ICommandHandler -{ +export class SetDividendsCommandHandler implements ICommandHandler { constructor( @lazyInject(TransactionService) private readonly transactionService: TransactionService, @@ -226,15 +221,12 @@ export class SetDividendsCommandHandler private readonly contractService: ContractService, ) {} - async execute( - command: SetDividendsCommand, - ): Promise { + async execute(command: SetDividendsCommand): Promise { try { const { address, recordDate, executionDate, amount } = command; const handler = this.transactionService.getHandler(); - const securityEvmAddress = - await this.contractService.getContractEvmAddress(address); + const securityEvmAddress = await this.contractService.getContractEvmAddress(address); const res = await handler.setDividends( securityEvmAddress, BigDecimal.fromString(recordDate), @@ -247,13 +239,11 @@ export class SetDividendsCommandHandler res, result: res.response?.dividendID, className: SetDividendsCommandHandler.name, - position: 1, - numberOfResultsItems: 2, + position: 0, + numberOfResultsItems: 1, }); - return Promise.resolve( - new SetDividendsCommandResponse(parseInt(dividendId, 16), res.id!), - ); + return Promise.resolve(new SetDividendsCommandResponse(parseInt(dividendId, 16), res.id!)); } catch (error) { throw new SetDividendsCommandError(error as Error); } diff --git a/packages/ats/sdk/src/app/usecase/command/equity/dividends/set/SetDividendsCommandHandler.unit.test.ts b/packages/ats/sdk/src/app/usecase/command/equity/dividends/set/SetDividendsCommandHandler.unit.test.ts index 1d3d86a04..35e6a294b 100644 --- a/packages/ats/sdk/src/app/usecase/command/equity/dividends/set/SetDividendsCommandHandler.unit.test.ts +++ b/packages/ats/sdk/src/app/usecase/command/equity/dividends/set/SetDividendsCommandHandler.unit.test.ts @@ -203,27 +203,20 @@ */ -import { createMock } from '@golevelup/ts-jest'; -import { SetDividendsCommandHandler } from './SetDividendsCommandHandler'; -import { - SetDividendsCommand, - SetDividendsCommandResponse, -} from './SetDividendsCommand'; -import TransactionService from '@service/transaction/TransactionService'; -import ContractService from '@service/contract/ContractService'; -import EvmAddress from '@domain/context/contract/EvmAddress'; -import { - ErrorMsgFixture, - EvmAddressPropsFixture, - TransactionIdFixture, -} from '@test/fixtures/shared/DataFixture'; -import BigDecimal from '@domain/context/shared/BigDecimal'; -import { faker } from '@faker-js/faker/.'; -import { SetDividendsCommandFixture } from '@test/fixtures/equity/EquityFixture'; -import { SetDividendsCommandError } from './error/SetDividendsCommandError'; -import { ErrorCode } from '@core/error/BaseError'; - -describe('SetDividendsCommandHandler', () => { +import { createMock } from "@golevelup/ts-jest"; +import { SetDividendsCommandHandler } from "./SetDividendsCommandHandler"; +import { SetDividendsCommand, SetDividendsCommandResponse } from "./SetDividendsCommand"; +import TransactionService from "@service/transaction/TransactionService"; +import ContractService from "@service/contract/ContractService"; +import EvmAddress from "@domain/context/contract/EvmAddress"; +import { ErrorMsgFixture, EvmAddressPropsFixture, TransactionIdFixture } from "@test/fixtures/shared/DataFixture"; +import BigDecimal from "@domain/context/shared/BigDecimal"; +import { faker } from "@faker-js/faker/."; +import { SetDividendsCommandFixture } from "@test/fixtures/equity/EquityFixture"; +import { SetDividendsCommandError } from "./error/SetDividendsCommandError"; +import { ErrorCode } from "@core/error/BaseError"; + +describe("SetDividendsCommandHandler", () => { let handler: SetDividendsCommandHandler; let command: SetDividendsCommand; const transactionServiceMock = createMock(); @@ -232,14 +225,11 @@ describe('SetDividendsCommandHandler', () => { const transactionId = TransactionIdFixture.create().id; const evmAddress = new EvmAddress(EvmAddressPropsFixture.create().value); - const dividendId = faker.string.hexadecimal({ length: 64, prefix: '0x' }); + const dividendId = faker.string.hexadecimal({ length: 64, prefix: "0x" }); const errorMsg = ErrorMsgFixture.create().msg; beforeEach(() => { - handler = new SetDividendsCommandHandler( - transactionServiceMock, - contractServiceMock, - ); + handler = new SetDividendsCommandHandler(transactionServiceMock, contractServiceMock); command = SetDividendsCommandFixture.create(); }); @@ -247,29 +237,25 @@ describe('SetDividendsCommandHandler', () => { jest.resetAllMocks(); }); - describe('execute', () => { - describe('error cases', () => { - it('throws SetDividendsCommandError when command fails with uncaught error', async () => { + describe("execute", () => { + describe("error cases", () => { + it("throws SetDividendsCommandError when command fails with uncaught error", async () => { const fakeError = new Error(errorMsg); contractServiceMock.getContractEvmAddress.mockRejectedValue(fakeError); const resultPromise = handler.execute(command); - await expect(resultPromise).rejects.toBeInstanceOf( - SetDividendsCommandError, - ); + await expect(resultPromise).rejects.toBeInstanceOf(SetDividendsCommandError); await expect(resultPromise).rejects.toMatchObject({ - message: expect.stringContaining( - `An error occurred while setting the dividends: ${errorMsg}`, - ), + message: expect.stringContaining(`An error occurred while setting the dividends: ${errorMsg}`), errorCode: ErrorCode.UncaughtCommandError, }); }); }); - describe('success cases', () => { - it('should successfully set dividends', async () => { + describe("success cases", () => { + it("should successfully set dividends", async () => { contractServiceMock.getContractEvmAddress.mockResolvedValue(evmAddress); transactionServiceMock.getHandler().setDividends.mockResolvedValue({ @@ -277,38 +263,24 @@ describe('SetDividendsCommandHandler', () => { response: dividendId, }); - transactionServiceMock.getTransactionResult.mockResolvedValue( - dividendId, - ); + transactionServiceMock.getTransactionResult.mockResolvedValue(dividendId); const result = await handler.execute(command); expect(result).toBeInstanceOf(SetDividendsCommandResponse); - expect(contractServiceMock.getContractEvmAddress).toHaveBeenCalledTimes( - 1, - ); - expect(contractServiceMock.getContractEvmAddress).toHaveBeenCalledWith( - command.address, - ); - expect( - transactionServiceMock.getTransactionResult, - ).toHaveBeenCalledTimes(1); - expect( - transactionServiceMock.getTransactionResult, - ).toHaveBeenCalledWith( + expect(contractServiceMock.getContractEvmAddress).toHaveBeenCalledTimes(1); + expect(contractServiceMock.getContractEvmAddress).toHaveBeenCalledWith(command.address); + expect(transactionServiceMock.getTransactionResult).toHaveBeenCalledTimes(1); + expect(transactionServiceMock.getTransactionResult).toHaveBeenCalledWith( expect.objectContaining({ res: { id: transactionId, response: dividendId }, className: SetDividendsCommandHandler.name, - position: 1, - numberOfResultsItems: 2, + position: 0, + numberOfResultsItems: 1, }), ); - expect( - transactionServiceMock.getHandler().setDividends, - ).toHaveBeenCalledTimes(1); - expect( - transactionServiceMock.getHandler().setDividends, - ).toHaveBeenCalledWith( + expect(transactionServiceMock.getHandler().setDividends).toHaveBeenCalledTimes(1); + expect(transactionServiceMock.getHandler().setDividends).toHaveBeenCalledWith( evmAddress, BigDecimal.fromString(command.recordDate), BigDecimal.fromString(command.executionDate), diff --git a/packages/ats/sdk/src/app/usecase/command/equity/votingRights/set/SetVotingRightsCommandHandler.ts b/packages/ats/sdk/src/app/usecase/command/equity/votingRights/set/SetVotingRightsCommandHandler.ts index 72b8de918..25359b062 100644 --- a/packages/ats/sdk/src/app/usecase/command/equity/votingRights/set/SetVotingRightsCommandHandler.ts +++ b/packages/ats/sdk/src/app/usecase/command/equity/votingRights/set/SetVotingRightsCommandHandler.ts @@ -203,22 +203,17 @@ */ -import { ICommandHandler } from '@core/command/CommandHandler'; -import { CommandHandler } from '@core/decorator/CommandHandlerDecorator'; -import { - SetVotingRightsCommand, - SetVotingRightsCommandResponse, -} from './SetVotingRightsCommand'; -import TransactionService from '@service/transaction/TransactionService'; -import { lazyInject } from '@core/decorator/LazyInjectDecorator'; -import BigDecimal from '@domain/context/shared/BigDecimal'; -import ContractService from '@service/contract/ContractService'; -import { SetVotingRightsCommandError } from './error/SetVotingRightsCommandError'; +import { ICommandHandler } from "@core/command/CommandHandler"; +import { CommandHandler } from "@core/decorator/CommandHandlerDecorator"; +import { SetVotingRightsCommand, SetVotingRightsCommandResponse } from "./SetVotingRightsCommand"; +import TransactionService from "@service/transaction/TransactionService"; +import { lazyInject } from "@core/decorator/LazyInjectDecorator"; +import BigDecimal from "@domain/context/shared/BigDecimal"; +import ContractService from "@service/contract/ContractService"; +import { SetVotingRightsCommandError } from "./error/SetVotingRightsCommandError"; @CommandHandler(SetVotingRightsCommand) -export class SetVotingRightsCommandHandler - implements ICommandHandler -{ +export class SetVotingRightsCommandHandler implements ICommandHandler { constructor( @lazyInject(TransactionService) private readonly transactionService: TransactionService, @@ -226,15 +221,12 @@ export class SetVotingRightsCommandHandler private readonly contractService: ContractService, ) {} - async execute( - command: SetVotingRightsCommand, - ): Promise { + async execute(command: SetVotingRightsCommand): Promise { try { const { address, recordDate, data } = command; const handler = this.transactionService.getHandler(); - const securityEvmAddress = - await this.contractService.getContractEvmAddress(address); + const securityEvmAddress = await this.contractService.getContractEvmAddress(address); const res = await handler.setVotingRights( securityEvmAddress, BigDecimal.fromString(recordDate.substring(0, 10)), @@ -246,13 +238,11 @@ export class SetVotingRightsCommandHandler res, result: res.response?.voteId, className: SetVotingRightsCommandHandler.name, - position: 1, - numberOfResultsItems: 2, + position: 0, + numberOfResultsItems: 1, }); - return Promise.resolve( - new SetVotingRightsCommandResponse(parseInt(voteId, 16), res.id!), - ); + return Promise.resolve(new SetVotingRightsCommandResponse(parseInt(voteId, 16), res.id!)); } catch (error) { throw new SetVotingRightsCommandError(error as Error); } diff --git a/packages/ats/sdk/src/app/usecase/command/equity/votingRights/set/SetVotingRightsCommandHandler.unit.test.ts b/packages/ats/sdk/src/app/usecase/command/equity/votingRights/set/SetVotingRightsCommandHandler.unit.test.ts index 64649915f..9f9526021 100644 --- a/packages/ats/sdk/src/app/usecase/command/equity/votingRights/set/SetVotingRightsCommandHandler.unit.test.ts +++ b/packages/ats/sdk/src/app/usecase/command/equity/votingRights/set/SetVotingRightsCommandHandler.unit.test.ts @@ -203,27 +203,20 @@ */ -import { createMock } from '@golevelup/ts-jest'; -import TransactionService from '@service/transaction/TransactionService'; -import ContractService from '@service/contract/ContractService'; -import EvmAddress from '@domain/context/contract/EvmAddress'; -import { - ErrorMsgFixture, - EvmAddressPropsFixture, - TransactionIdFixture, -} from '@test/fixtures/shared/DataFixture'; -import BigDecimal from '@domain/context/shared/BigDecimal'; -import { faker } from '@faker-js/faker/.'; -import { SetVotingRightsCommandFixture } from '@test/fixtures/equity/EquityFixture'; -import { SetVotingRightsCommandHandler } from './SetVotingRightsCommandHandler'; -import { - SetVotingRightsCommand, - SetVotingRightsCommandResponse, -} from './SetVotingRightsCommand'; -import { SetVotingRightsCommandError } from './error/SetVotingRightsCommandError'; -import { ErrorCode } from '@core/error/BaseError'; - -describe('SetVotingRightsCommandHandler', () => { +import { createMock } from "@golevelup/ts-jest"; +import TransactionService from "@service/transaction/TransactionService"; +import ContractService from "@service/contract/ContractService"; +import EvmAddress from "@domain/context/contract/EvmAddress"; +import { ErrorMsgFixture, EvmAddressPropsFixture, TransactionIdFixture } from "@test/fixtures/shared/DataFixture"; +import BigDecimal from "@domain/context/shared/BigDecimal"; +import { faker } from "@faker-js/faker/."; +import { SetVotingRightsCommandFixture } from "@test/fixtures/equity/EquityFixture"; +import { SetVotingRightsCommandHandler } from "./SetVotingRightsCommandHandler"; +import { SetVotingRightsCommand, SetVotingRightsCommandResponse } from "./SetVotingRightsCommand"; +import { SetVotingRightsCommandError } from "./error/SetVotingRightsCommandError"; +import { ErrorCode } from "@core/error/BaseError"; + +describe("SetVotingRightsCommandHandler", () => { let handler: SetVotingRightsCommandHandler; let command: SetVotingRightsCommand; const transactionServiceMock = createMock(); @@ -232,13 +225,10 @@ describe('SetVotingRightsCommandHandler', () => { const transactionId = TransactionIdFixture.create().id; const evmAddress = new EvmAddress(EvmAddressPropsFixture.create().value); const errorMsg = ErrorMsgFixture.create().msg; - const voteId = faker.string.hexadecimal({ length: 64, prefix: '0x' }); + const voteId = faker.string.hexadecimal({ length: 64, prefix: "0x" }); beforeEach(() => { - handler = new SetVotingRightsCommandHandler( - transactionServiceMock, - contractServiceMock, - ); + handler = new SetVotingRightsCommandHandler(transactionServiceMock, contractServiceMock); command = SetVotingRightsCommandFixture.create(); }); @@ -246,29 +236,25 @@ describe('SetVotingRightsCommandHandler', () => { jest.resetAllMocks(); }); - describe('execute', () => { - describe('error cases', () => { - it('throws SetVotingRightsCommandError when command fails with uncaught error', async () => { + describe("execute", () => { + describe("error cases", () => { + it("throws SetVotingRightsCommandError when command fails with uncaught error", async () => { const fakeError = new Error(errorMsg); contractServiceMock.getContractEvmAddress.mockRejectedValue(fakeError); const resultPromise = handler.execute(command); - await expect(resultPromise).rejects.toBeInstanceOf( - SetVotingRightsCommandError, - ); + await expect(resultPromise).rejects.toBeInstanceOf(SetVotingRightsCommandError); await expect(resultPromise).rejects.toMatchObject({ - message: expect.stringContaining( - `An error occurred while setting the voting rights: ${errorMsg}`, - ), + message: expect.stringContaining(`An error occurred while setting the voting rights: ${errorMsg}`), errorCode: ErrorCode.UncaughtCommandError, }); }); }); - describe('success cases', () => { - it('should successfully set voting rights', async () => { + describe("success cases", () => { + it("should successfully set voting rights", async () => { contractServiceMock.getContractEvmAddress.mockResolvedValue(evmAddress); transactionServiceMock.getHandler().setVotingRights.mockResolvedValue({ @@ -281,31 +267,19 @@ describe('SetVotingRightsCommandHandler', () => { const result = await handler.execute(command); expect(result).toBeInstanceOf(SetVotingRightsCommandResponse); - expect(contractServiceMock.getContractEvmAddress).toHaveBeenCalledTimes( - 1, - ); - expect(contractServiceMock.getContractEvmAddress).toHaveBeenCalledWith( - command.address, - ); - expect( - transactionServiceMock.getTransactionResult, - ).toHaveBeenCalledTimes(1); - expect( - transactionServiceMock.getTransactionResult, - ).toHaveBeenCalledWith( + expect(contractServiceMock.getContractEvmAddress).toHaveBeenCalledTimes(1); + expect(contractServiceMock.getContractEvmAddress).toHaveBeenCalledWith(command.address); + expect(transactionServiceMock.getTransactionResult).toHaveBeenCalledTimes(1); + expect(transactionServiceMock.getTransactionResult).toHaveBeenCalledWith( expect.objectContaining({ res: { id: transactionId, response: voteId }, className: SetVotingRightsCommandHandler.name, - position: 1, - numberOfResultsItems: 2, + position: 0, + numberOfResultsItems: 1, }), ); - expect( - transactionServiceMock.getHandler().setVotingRights, - ).toHaveBeenCalledTimes(1); - expect( - transactionServiceMock.getHandler().setVotingRights, - ).toHaveBeenCalledWith( + expect(transactionServiceMock.getHandler().setVotingRights).toHaveBeenCalledTimes(1); + expect(transactionServiceMock.getHandler().setVotingRights).toHaveBeenCalledWith( evmAddress, BigDecimal.fromString(command.recordDate.substring(0, 10)), command.data, diff --git a/packages/ats/sdk/src/app/usecase/command/security/operations/transfer/TransferAndLockCommandHandler.unit.test.ts b/packages/ats/sdk/src/app/usecase/command/security/operations/transfer/TransferAndLockCommandHandler.unit.test.ts index 4d91266a7..1f19d8273 100644 --- a/packages/ats/sdk/src/app/usecase/command/security/operations/transfer/TransferAndLockCommandHandler.unit.test.ts +++ b/packages/ats/sdk/src/app/usecase/command/security/operations/transfer/TransferAndLockCommandHandler.unit.test.ts @@ -260,7 +260,7 @@ describe('TransferAndLockCommandHandler', () => { ); const commandRaw = TransferAndLockCommandFixture.create(); /* eslint-disable-next-line @typescript-eslint/no-unused-vars */ - const { deadline, nounce, signature, ...commandFiltered } = commandRaw; + const { ...commandFiltered } = commandRaw; command = commandFiltered; }); diff --git a/packages/ats/sdk/src/app/usecase/command/security/operations/transfer/ProtectedTransferAndLockByPartitionCommand.ts b/packages/ats/sdk/src/app/usecase/query/security/actionContentHashExists/ActionContentHashExistsQuery.ts similarity index 93% rename from packages/ats/sdk/src/app/usecase/command/security/operations/transfer/ProtectedTransferAndLockByPartitionCommand.ts rename to packages/ats/sdk/src/app/usecase/query/security/actionContentHashExists/ActionContentHashExistsQuery.ts index 99da2f35b..8e11cd6ff 100644 --- a/packages/ats/sdk/src/app/usecase/command/security/operations/transfer/ProtectedTransferAndLockByPartitionCommand.ts +++ b/packages/ats/sdk/src/app/usecase/query/security/actionContentHashExists/ActionContentHashExistsQuery.ts @@ -203,29 +203,17 @@ */ -import { Command } from '@core/command/Command'; -import { CommandResponse } from '@core/command/CommandResponse'; +import { Query } from "@core/query/Query"; +import { QueryResponse } from "@core/query/QueryResponse"; -export class ProtectedTransferAndLockByPartitionCommandResponse - implements CommandResponse -{ - constructor( - public readonly payload: number, - public readonly transactionId: string, - ) {} +export class ActionContentHashExistsQueryResponse implements QueryResponse { + constructor(public readonly payload: boolean) {} } -export class ProtectedTransferAndLockByPartitionCommand extends Command { +export class ActionContentHashExistsQuery extends Query { constructor( public readonly securityId: string, - public readonly partitionId: string, - public readonly amount: string, - public readonly sourceId: string, - public readonly targetId: string, - public readonly expirationDate: string, - public readonly deadline: string, - public readonly nounce: number, - public readonly signature: string, + public readonly contentHash: string, ) { super(); } diff --git a/packages/ats/sdk/src/app/usecase/command/security/operations/transfer/ProtectedTransferAndLockByPartitionCommandHandler.ts b/packages/ats/sdk/src/app/usecase/query/security/actionContentHashExists/ActionContentHashExistsQueryHandler.ts similarity index 73% rename from packages/ats/sdk/src/app/usecase/command/security/operations/transfer/ProtectedTransferAndLockByPartitionCommandHandler.ts rename to packages/ats/sdk/src/app/usecase/query/security/actionContentHashExists/ActionContentHashExistsQueryHandler.ts index f9716e1af..153419135 100644 --- a/packages/ats/sdk/src/app/usecase/command/security/operations/transfer/ProtectedTransferAndLockByPartitionCommandHandler.ts +++ b/packages/ats/sdk/src/app/usecase/query/security/actionContentHashExists/ActionContentHashExistsQueryHandler.ts @@ -203,129 +203,35 @@ */ -import { ICommandHandler } from '@core/command/CommandHandler'; -import { CommandHandler } from '@core/decorator/CommandHandlerDecorator'; -import AccountService from '@service/account/AccountService'; -import SecurityService from '@service/security/SecurityService'; -import { - ProtectedTransferAndLockByPartitionCommand, - ProtectedTransferAndLockByPartitionCommandResponse, -} from './ProtectedTransferAndLockByPartitionCommand'; -import TransactionService from '@service/transaction/TransactionService'; -import { lazyInject } from '@core/decorator/LazyInjectDecorator'; -import BigDecimal from '@domain/context/shared/BigDecimal'; -import EvmAddress from '@domain/context/contract/EvmAddress'; -import ValidationService from '@service/validation/ValidationService'; -import ContractService from '@service/contract/ContractService'; -import { ProtectedTransferAndLockByPartitionCommandError } from './error/ProtectedTransferAndLockByPartitionCommandError'; -import { KycStatus } from '@domain/context/kyc/Kyc'; - -@CommandHandler(ProtectedTransferAndLockByPartitionCommand) -export class ProtectedTransferAndLockByPartitionCommandHandler - implements ICommandHandler -{ +import { ActionContentHashExistsQuery, ActionContentHashExistsQueryResponse } from "./ActionContentHashExistsQuery"; +import { QueryHandler } from "@core/decorator/QueryHandlerDecorator"; +import { IQueryHandler } from "@core/query/QueryHandler"; +import { RPCQueryAdapter } from "@port/out/rpc/RPCQueryAdapter"; +import { lazyInject } from "@core/decorator/LazyInjectDecorator"; +import EvmAddress from "@domain/context/contract/EvmAddress"; +import ContractService from "@service/contract/ContractService"; +import { ActionContentHashExistsQueryError } from "./error/ActionContentHashExistsQueryError"; + +@QueryHandler(ActionContentHashExistsQuery) +export class ActionContentHashExistsQueryHandler implements IQueryHandler { constructor( - @lazyInject(SecurityService) - private readonly securityService: SecurityService, - @lazyInject(TransactionService) - private readonly transactionService: TransactionService, - @lazyInject(AccountService) - private readonly accountService: AccountService, - @lazyInject(ValidationService) - private readonly validationService: ValidationService, + @lazyInject(RPCQueryAdapter) + private readonly queryAdapter: RPCQueryAdapter, @lazyInject(ContractService) private readonly contractService: ContractService, ) {} - async execute( - command: ProtectedTransferAndLockByPartitionCommand, - ): Promise { + async execute(query: ActionContentHashExistsQuery): Promise { try { - const { - securityId, - partitionId, - amount, - sourceId, - targetId, - expirationDate, - deadline, - nounce, - signature, - } = command; - const handler = this.transactionService.getHandler(); - const account = this.accountService.getCurrentAccount(); - const security = await this.securityService.get(securityId); - - const securityEvmAddress: EvmAddress = - await this.contractService.getContractEvmAddress(securityId); - const targetEvmAddress: EvmAddress = - await this.accountService.getAccountEvmAddress(targetId); - const sourceEvmAddress: EvmAddress = - await this.accountService.getAccountEvmAddress(sourceId); - const amountBd: BigDecimal = BigDecimal.fromString( - amount, - security.decimals, - ); - - await this.validationService.checkPause(securityId); - - await this.validationService.checkDecimals(security, amount); - - await this.validationService.checkKycAddresses( - securityId, - [sourceId, targetId], - KycStatus.GRANTED, - ); - - await this.validationService.checkControlList( - securityId, - sourceEvmAddress.toString(), - targetEvmAddress.toString(), - ); - - await this.validationService.checkBalance(securityId, sourceId, amountBd); - - await this.validationService.checkValidNounce( - securityId, - sourceId, - nounce, - ); - - await this.validationService.checkProtectedPartitionRole( - partitionId, - account.id.toString(), - securityId, - ); - - const res = await handler.protectedTransferAndLockByPartition( - securityEvmAddress, - partitionId, - amountBd, - sourceEvmAddress, - targetEvmAddress, - BigDecimal.fromString(expirationDate.substring(0, 10)), - BigDecimal.fromString(deadline.substring(0, 10)), - BigDecimal.fromString(nounce.toString()), - signature, - command.securityId, - ); - - const lockId = await this.transactionService.getTransactionResult({ - res, - result: res.response?.lockId, - className: ProtectedTransferAndLockByPartitionCommandHandler.name, - position: 1, - numberOfResultsItems: 2, - }); - - return Promise.resolve( - new ProtectedTransferAndLockByPartitionCommandResponse( - parseInt(lockId, 16), - res.id!, - ), - ); + const { securityId, contentHash } = query; + + const securityEvmAddress: EvmAddress = await this.contractService.getContractEvmAddress(securityId); + + const res = await this.queryAdapter.actionContentHashExists(securityEvmAddress, contentHash); + + return new ActionContentHashExistsQueryResponse(res); } catch (error) { - throw new ProtectedTransferAndLockByPartitionCommandError(error as Error); + throw new ActionContentHashExistsQueryError(error as Error); } } } diff --git a/packages/ats/sdk/src/app/usecase/query/security/actionContentHashExists/ActionContentHashExistsQueryHandler.unit.test.ts b/packages/ats/sdk/src/app/usecase/query/security/actionContentHashExists/ActionContentHashExistsQueryHandler.unit.test.ts new file mode 100644 index 000000000..3a8b99919 --- /dev/null +++ b/packages/ats/sdk/src/app/usecase/query/security/actionContentHashExists/ActionContentHashExistsQueryHandler.unit.test.ts @@ -0,0 +1,268 @@ +/* + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "[]" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright [yyyy] [name of copyright owner] + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + +*/ + +import { createMock } from "@golevelup/ts-jest"; +import { ErrorMsgFixture, EvmAddressPropsFixture } from "@test/fixtures/shared/DataFixture"; +import { ErrorCode } from "@core/error/BaseError"; +import { RPCQueryAdapter } from "@port/out/rpc/RPCQueryAdapter"; +import EvmAddress from "@domain/context/contract/EvmAddress"; +import ContractService from "@service/contract/ContractService"; +import { ActionContentHashExistsQueryFixture } from "@test/fixtures/corporateActions/CorporateActionsFixture"; +import { ActionContentHashExistsQuery, ActionContentHashExistsQueryResponse } from "./ActionContentHashExistsQuery"; +import { ActionContentHashExistsQueryHandler } from "./ActionContentHashExistsQueryHandler"; +import { ActionContentHashExistsQueryError } from "./error/ActionContentHashExistsQueryError"; + +describe("ActionContentHashExistsQueryHandler", () => { + let handler: ActionContentHashExistsQueryHandler; + let query: ActionContentHashExistsQuery; + + const queryAdapterServiceMock = createMock(); + const contractServiceMock = createMock(); + + const evmAddress = new EvmAddress(EvmAddressPropsFixture.create().value); + const errorMsg = ErrorMsgFixture.create().msg; + + beforeEach(() => { + handler = new ActionContentHashExistsQueryHandler(queryAdapterServiceMock, contractServiceMock); + query = ActionContentHashExistsQueryFixture.create(); + }); + + afterEach(() => { + jest.resetAllMocks(); + }); + + describe("execute", () => { + it("throws ActionContentHashExistsQueryError when query fails with uncaught error", async () => { + const fakeError = new Error(errorMsg); + + contractServiceMock.getContractEvmAddress.mockRejectedValue(fakeError); + + const resultPromise = handler.execute(query); + + await expect(resultPromise).rejects.toBeInstanceOf(ActionContentHashExistsQueryError); + + await expect(resultPromise).rejects.toMatchObject({ + message: expect.stringContaining( + `An error occurred while querying action content hash exists: ${errorMsg}`, + ), + errorCode: ErrorCode.UncaughtQueryError, + }); + }); + + it("should successfully check action content hash exist", async () => { + contractServiceMock.getContractEvmAddress.mockResolvedValueOnce(evmAddress); + + queryAdapterServiceMock.actionContentHashExists.mockResolvedValueOnce(true); + + const result = await handler.execute(query); + + expect(result).toBeInstanceOf(ActionContentHashExistsQueryResponse); + expect(result.payload).toBe(true); + expect(contractServiceMock.getContractEvmAddress).toHaveBeenCalledTimes(1); + expect(contractServiceMock.getContractEvmAddress).toHaveBeenCalledWith(query.securityId); + expect(queryAdapterServiceMock.actionContentHashExists).toHaveBeenCalledWith(evmAddress, query.contentHash); + }); + }); +}); diff --git a/packages/ats/sdk/src/app/usecase/command/security/operations/transfer/error/ProtectedTransferAndLockByPartitionCommandError.ts b/packages/ats/sdk/src/app/usecase/query/security/actionContentHashExists/error/ActionContentHashExistsQueryError.ts similarity index 97% rename from packages/ats/sdk/src/app/usecase/command/security/operations/transfer/error/ProtectedTransferAndLockByPartitionCommandError.ts rename to packages/ats/sdk/src/app/usecase/query/security/actionContentHashExists/error/ActionContentHashExistsQueryError.ts index 4c6ab64de..3a06ac4dc 100644 --- a/packages/ats/sdk/src/app/usecase/command/security/operations/transfer/error/ProtectedTransferAndLockByPartitionCommandError.ts +++ b/packages/ats/sdk/src/app/usecase/query/security/actionContentHashExists/error/ActionContentHashExistsQueryError.ts @@ -203,12 +203,12 @@ */ -import { CommandError } from '@command/error/CommandError'; -import BaseError from '@core/error/BaseError'; +import { QueryError } from "@query/error/QueryError"; +import BaseError from "@core/error/BaseError"; -export class ProtectedTransferAndLockByPartitionCommandError extends CommandError { +export class ActionContentHashExistsQueryError extends QueryError { constructor(error: Error) { - const msg = `An error occurred while protected transferring and locking tokens: ${error.message}`; + const msg = `An error occurred while querying action content hash exists: ${error.message}`; super(msg, error instanceof BaseError ? error.errorCode : undefined); } } diff --git a/packages/ats/sdk/src/app/usecase/query/security/protectedPartitions/getNounce/GetNounceQueryHandler.ts b/packages/ats/sdk/src/app/usecase/query/security/protectedPartitions/getNounce/GetNounceQueryHandler.ts index 65c3b3ab2..243dfb133 100644 --- a/packages/ats/sdk/src/app/usecase/query/security/protectedPartitions/getNounce/GetNounceQueryHandler.ts +++ b/packages/ats/sdk/src/app/usecase/query/security/protectedPartitions/getNounce/GetNounceQueryHandler.ts @@ -203,15 +203,15 @@ */ -import { RPCQueryAdapter } from '@port/out/rpc/RPCQueryAdapter'; -import { QueryHandler } from '@core/decorator/QueryHandlerDecorator'; -import { IQueryHandler } from '@core/query/QueryHandler'; -import { lazyInject } from '@core/decorator/LazyInjectDecorator'; -import { GetNounceQuery, GetNounceQueryResponse } from './GetNounceQuery'; -import AccountService from '@service/account/AccountService'; -import EvmAddress from '@domain/context/contract/EvmAddress'; -import ContractService from '@service/contract/ContractService'; -import { GetNounceQueryError } from './error/GetNounceQueryError'; +import { RPCQueryAdapter } from "@port/out/rpc/RPCQueryAdapter"; +import { QueryHandler } from "@core/decorator/QueryHandlerDecorator"; +import { IQueryHandler } from "@core/query/QueryHandler"; +import { lazyInject } from "@core/decorator/LazyInjectDecorator"; +import { GetNounceQuery, GetNounceQueryResponse } from "./GetNounceQuery"; +import AccountService from "@service/account/AccountService"; +import EvmAddress from "@domain/context/contract/EvmAddress"; +import ContractService from "@service/contract/ContractService"; +import { GetNounceQueryError } from "./error/GetNounceQueryError"; @QueryHandler(GetNounceQuery) export class GetNounceQueryHandler implements IQueryHandler { @@ -228,15 +228,10 @@ export class GetNounceQueryHandler implements IQueryHandler { try { const { securityId, targetId } = query; - const securityEvmAddress: EvmAddress = - await this.contractService.getContractEvmAddress(securityId); - const targetEvmAddress: EvmAddress = - await this.accountService.getAccountEvmAddress(targetId); + const securityEvmAddress: EvmAddress = await this.contractService.getContractEvmAddress(securityId); + const targetEvmAddress: EvmAddress = await this.accountService.getAccountEvmAddress(targetId); - const res = await this.queryAdapter.getNounceFor( - securityEvmAddress, - targetEvmAddress, - ); + const res = await this.queryAdapter.getNonceFor(securityEvmAddress, targetEvmAddress); return new GetNounceQueryResponse(res.toNumber()); } catch (error) { throw new GetNounceQueryError(error as Error); diff --git a/packages/ats/sdk/src/app/usecase/query/security/protectedPartitions/getNounce/GetNounceQueryHandler.unit.test.ts b/packages/ats/sdk/src/app/usecase/query/security/protectedPartitions/getNounce/GetNounceQueryHandler.unit.test.ts index b4d8866ce..da1648dfd 100644 --- a/packages/ats/sdk/src/app/usecase/query/security/protectedPartitions/getNounce/GetNounceQueryHandler.unit.test.ts +++ b/packages/ats/sdk/src/app/usecase/query/security/protectedPartitions/getNounce/GetNounceQueryHandler.unit.test.ts @@ -203,23 +203,20 @@ */ -import { createMock } from '@golevelup/ts-jest'; -import { - ErrorMsgFixture, - EvmAddressPropsFixture, -} from '@test/fixtures/shared/DataFixture'; -import { ErrorCode } from '@core/error/BaseError'; -import { RPCQueryAdapter } from '@port/out/rpc/RPCQueryAdapter'; -import EvmAddress from '@domain/context/contract/EvmAddress'; -import ContractService from '@service/contract/ContractService'; -import { GetNounceQuery, GetNounceQueryResponse } from './GetNounceQuery'; -import { GetNounceQueryHandler } from './GetNounceQueryHandler'; -import AccountService from '@service/account/AccountService'; -import { GetNounceQueryFixture } from '@test/fixtures/protectedPartitions/ProtectedPartitionsFixture'; -import { GetNounceQueryError } from './error/GetNounceQueryError'; -import { BigNumber } from 'ethers'; - -describe('GetNounceQueryHandler', () => { +import { createMock } from "@golevelup/ts-jest"; +import { ErrorMsgFixture, EvmAddressPropsFixture } from "@test/fixtures/shared/DataFixture"; +import { ErrorCode } from "@core/error/BaseError"; +import { RPCQueryAdapter } from "@port/out/rpc/RPCQueryAdapter"; +import EvmAddress from "@domain/context/contract/EvmAddress"; +import ContractService from "@service/contract/ContractService"; +import { GetNounceQuery, GetNounceQueryResponse } from "./GetNounceQuery"; +import { GetNounceQueryHandler } from "./GetNounceQueryHandler"; +import AccountService from "@service/account/AccountService"; +import { GetNounceQueryFixture } from "@test/fixtures/protectedPartitions/ProtectedPartitionsFixture"; +import { GetNounceQueryError } from "./error/GetNounceQueryError"; +import { BigNumber } from "ethers"; + +describe("GetNounceQueryHandler", () => { let handler: GetNounceQueryHandler; let query: GetNounceQuery; @@ -228,17 +225,11 @@ describe('GetNounceQueryHandler', () => { const contractServiceMock = createMock(); const evmAddress = new EvmAddress(EvmAddressPropsFixture.create().value); - const targetEvmAddress = new EvmAddress( - EvmAddressPropsFixture.create().value, - ); + const targetEvmAddress = new EvmAddress(EvmAddressPropsFixture.create().value); const errorMsg = ErrorMsgFixture.create().msg; beforeEach(() => { - handler = new GetNounceQueryHandler( - queryAdapterServiceMock, - accountServiceMock, - contractServiceMock, - ); + handler = new GetNounceQueryHandler(queryAdapterServiceMock, accountServiceMock, contractServiceMock); query = GetNounceQueryFixture.create(); }); @@ -246,8 +237,8 @@ describe('GetNounceQueryHandler', () => { jest.resetAllMocks(); }); - describe('execute', () => { - it('throws GetNounceQueryError when query fails with uncaught error', async () => { + describe("execute", () => { + it("throws GetNounceQueryError when query fails with uncaught error", async () => { const fakeError = new Error(errorMsg); contractServiceMock.getContractEvmAddress.mockRejectedValue(fakeError); @@ -257,42 +248,25 @@ describe('GetNounceQueryHandler', () => { await expect(resultPromise).rejects.toBeInstanceOf(GetNounceQueryError); await expect(resultPromise).rejects.toMatchObject({ - message: expect.stringContaining( - `An error occurred while querying nounce: ${errorMsg}`, - ), + message: expect.stringContaining(`An error occurred while querying nounce: ${errorMsg}`), errorCode: ErrorCode.UncaughtQueryError, }); }); - it('should successfully get nounce', async () => { - contractServiceMock.getContractEvmAddress.mockResolvedValueOnce( - evmAddress, - ); - accountServiceMock.getAccountEvmAddress.mockResolvedValueOnce( - targetEvmAddress, - ); - queryAdapterServiceMock.getNounceFor.mockResolvedValueOnce( - BigNumber.from(1), - ); + it("should successfully get nounce", async () => { + contractServiceMock.getContractEvmAddress.mockResolvedValueOnce(evmAddress); + accountServiceMock.getAccountEvmAddress.mockResolvedValueOnce(targetEvmAddress); + queryAdapterServiceMock.getNonceFor.mockResolvedValueOnce(BigNumber.from(1)); const result = await handler.execute(query); expect(result).toBeInstanceOf(GetNounceQueryResponse); expect(result.payload).toBe(BigNumber.from(1).toNumber()); - expect(contractServiceMock.getContractEvmAddress).toHaveBeenCalledTimes( - 1, - ); + expect(contractServiceMock.getContractEvmAddress).toHaveBeenCalledTimes(1); expect(accountServiceMock.getAccountEvmAddress).toHaveBeenCalledTimes(1); - expect(contractServiceMock.getContractEvmAddress).toHaveBeenCalledWith( - query.securityId, - ); - expect(accountServiceMock.getAccountEvmAddress).toHaveBeenCalledWith( - query.targetId, - ); - expect(queryAdapterServiceMock.getNounceFor).toHaveBeenCalledWith( - evmAddress, - targetEvmAddress, - ); + expect(contractServiceMock.getContractEvmAddress).toHaveBeenCalledWith(query.securityId); + expect(accountServiceMock.getAccountEvmAddress).toHaveBeenCalledWith(query.targetId); + expect(queryAdapterServiceMock.getNonceFor).toHaveBeenCalledWith(evmAddress, targetEvmAddress); }); }); }); diff --git a/packages/ats/sdk/src/core/error/BaseError.ts b/packages/ats/sdk/src/core/error/BaseError.ts index 6e4f274ec..6343af4a9 100644 --- a/packages/ats/sdk/src/core/error/BaseError.ts +++ b/packages/ats/sdk/src/core/error/BaseError.ts @@ -236,6 +236,8 @@ export enum ErrorCode { InvalidVcFormat = '10034', InvalidVcDates = '10036', InvalidTimeUnits = '10037', + InvalidInterestRateType = '10038', + InvalidRateStatus = '10039', // Error codes for Logic Errors (Prefix: 2XXXX) AccountAlreadyInControlList = '20013', diff --git a/packages/ats/sdk/src/core/injectable/kyc/InjectableKyc.ts b/packages/ats/sdk/src/core/injectable/kyc/InjectableKyc.ts index b59f04a07..3bfd10549 100644 --- a/packages/ats/sdk/src/core/injectable/kyc/InjectableKyc.ts +++ b/packages/ats/sdk/src/core/injectable/kyc/InjectableKyc.ts @@ -203,34 +203,35 @@ */ -import { UpdateExternalKycListsCommandHandler } from '@command/security/externalKycLists/updateExternalKycLists/UpdateExternalKycListsCommandHandler'; -import { TOKENS } from '../Tokens'; -import { AddExternalKycListCommandHandler } from '@command/security/externalKycLists/addExternalKycList/AddExternalKycListCommandHandler'; -import { RemoveExternalKycListCommandHandler } from '@command/security/externalKycLists/removeExternalKycList/RemoveExternalKycListCommandHandler'; -import { ActivateInternalKycCommandHandler } from '@command/security/kyc/activateInternalKyc/ActivateInternalKycCommandHandler'; -import { DeactivateInternalKycCommandHandler } from '@command/security/kyc/deactivateInternalKyc/DeactivateInternalKycCommandHandler'; -import { GrantKycCommandHandler } from '@command/security/kyc/grantKyc/GrantKycCommandHandler'; -import { RevokeKycCommandHandler } from '@command/security/kyc/revokeKyc/RevokeKycCommandHandler'; -import { GrantKycMockCommandHandler } from '@command/security/externalKycLists/mock/grantKycMock/GrantKycMockCommandHandler'; -import { RevokeKycMockCommandHandler } from '@command/security/externalKycLists/mock/revokeKycMock/RevokeKycMockCommandHandler'; -import { CreateExternalKycListMockCommandHandler } from '@command/security/externalKycLists/mock/createExternalKycMock/CreateExternalKycMockCommandHandler'; -import { GetKycStatusMockQueryHandler } from '@query/security/externalKycLists/mock/getKycStatusMock/GetKycStatusMockQueryHandler'; -import { GetKycForQueryHandler } from '@query/security/kyc/getKycFor/GetKycForQueryHandler'; -import { GetKycAccountsCountQueryHandler } from '@query/security/kyc/getKycAccountsCount/GetKycAccountsCountQueryHandler'; -import { GetKycAccountsDataQueryHandler } from '@query/security/kyc/getKycAccountsData/GetKycAccountsDataQueryHandler'; -import { GetKycStatusForQueryHandler } from '@query/security/kyc/getKycStatusFor/GetKycStatusForQueryHandler'; -import { GetIssuerListCountQueryHandler } from '@query/security/ssi/getIssuerListCount/GetIssuerListCountQueryHandler'; -import { GetIssuerListMembersQueryHandler } from '@query/security/ssi/getIssuerListMembers/GetIssuerListMembersQueryHandler'; -import { GetRevocationRegistryAddressQueryHandler } from '@query/security/ssi/getRevocationRegistryAddress/GetRevocationRegistryAddressQueryHandler'; -import { IsIssuerQueryHandler } from '@query/security/ssi/isIssuer/IsIssuerQueryHandler'; -import { GetExternalKycListsCountQueryHandler } from '@query/security/externalKycLists/getExternalKycListsCount/GetExternalKycListsCountQueryHandler'; -import { GetExternalKycListsMembersQueryHandler } from '@query/security/externalKycLists/getExternalKycListsMembers/GetExternalKycListsMembersQueryHandler'; -import { IsExternalKycListQueryHandler } from '@query/security/externalKycLists/isExternalKycList/IsExternalKycListQueryHandler'; -import { IsExternallyGrantedQueryHandler } from '@query/security/externalKycLists/isExternallyGranted/IsExternallyGrantedQueryHandler'; -import { IsInternalKycActivatedQueryHandler } from '@query/security/kyc/isInternalKycActivated/IsInternalKycActivatedQueryHandler'; -import { AddIssuerCommandHandler } from '@command/security/ssi/addIssuer/AddIssuerCommandHandler'; -import { RemoveIssuerCommandHandler } from '@command/security/ssi/removeIssuer/RemoveIssuerCommandHandler'; -import { SetRevocationRegistryAddressCommandHandler } from '@command/security/ssi/setRevocationRegistryAddress/SetRevocationRegistryAddressCommandHandler'; +import { UpdateExternalKycListsCommandHandler } from "@command/security/externalKycLists/updateExternalKycLists/UpdateExternalKycListsCommandHandler"; +import { TOKENS } from "../Tokens"; +import { AddExternalKycListCommandHandler } from "@command/security/externalKycLists/addExternalKycList/AddExternalKycListCommandHandler"; +import { RemoveExternalKycListCommandHandler } from "@command/security/externalKycLists/removeExternalKycList/RemoveExternalKycListCommandHandler"; +import { ActivateInternalKycCommandHandler } from "@command/security/kyc/activateInternalKyc/ActivateInternalKycCommandHandler"; +import { DeactivateInternalKycCommandHandler } from "@command/security/kyc/deactivateInternalKyc/DeactivateInternalKycCommandHandler"; +import { GrantKycCommandHandler } from "@command/security/kyc/grantKyc/GrantKycCommandHandler"; +import { RevokeKycCommandHandler } from "@command/security/kyc/revokeKyc/RevokeKycCommandHandler"; +import { GrantKycMockCommandHandler } from "@command/security/externalKycLists/mock/grantKycMock/GrantKycMockCommandHandler"; +import { RevokeKycMockCommandHandler } from "@command/security/externalKycLists/mock/revokeKycMock/RevokeKycMockCommandHandler"; +import { CreateExternalKycListMockCommandHandler } from "@command/security/externalKycLists/mock/createExternalKycMock/CreateExternalKycMockCommandHandler"; +import { GetKycStatusMockQueryHandler } from "@query/security/externalKycLists/mock/getKycStatusMock/GetKycStatusMockQueryHandler"; +import { GetKycForQueryHandler } from "@query/security/kyc/getKycFor/GetKycForQueryHandler"; +import { GetKycAccountsCountQueryHandler } from "@query/security/kyc/getKycAccountsCount/GetKycAccountsCountQueryHandler"; +import { GetKycAccountsDataQueryHandler } from "@query/security/kyc/getKycAccountsData/GetKycAccountsDataQueryHandler"; +import { GetKycStatusForQueryHandler } from "@query/security/kyc/getKycStatusFor/GetKycStatusForQueryHandler"; +import { GetIssuerListCountQueryHandler } from "@query/security/ssi/getIssuerListCount/GetIssuerListCountQueryHandler"; +import { GetIssuerListMembersQueryHandler } from "@query/security/ssi/getIssuerListMembers/GetIssuerListMembersQueryHandler"; +import { GetRevocationRegistryAddressQueryHandler } from "@query/security/ssi/getRevocationRegistryAddress/GetRevocationRegistryAddressQueryHandler"; +import { IsIssuerQueryHandler } from "@query/security/ssi/isIssuer/IsIssuerQueryHandler"; +import { GetExternalKycListsCountQueryHandler } from "@query/security/externalKycLists/getExternalKycListsCount/GetExternalKycListsCountQueryHandler"; +import { GetExternalKycListsMembersQueryHandler } from "@query/security/externalKycLists/getExternalKycListsMembers/GetExternalKycListsMembersQueryHandler"; +import { IsExternalKycListQueryHandler } from "@query/security/externalKycLists/isExternalKycList/IsExternalKycListQueryHandler"; +import { IsExternallyGrantedQueryHandler } from "@query/security/externalKycLists/isExternallyGranted/IsExternallyGrantedQueryHandler"; +import { IsInternalKycActivatedQueryHandler } from "@query/security/kyc/isInternalKycActivated/IsInternalKycActivatedQueryHandler"; +import { AddIssuerCommandHandler } from "@command/security/ssi/addIssuer/AddIssuerCommandHandler"; +import { RemoveIssuerCommandHandler } from "@command/security/ssi/removeIssuer/RemoveIssuerCommandHandler"; +import { SetRevocationRegistryAddressCommandHandler } from "@command/security/ssi/setRevocationRegistryAddress/SetRevocationRegistryAddressCommandHandler"; +import { ActionContentHashExistsQueryHandler } from "@query/security/actionContentHashExists/ActionContentHashExistsQueryHandler"; export const COMMAND_HANDLERS_KYC = [ { @@ -344,4 +345,8 @@ export const QUERY_HANDLERS_KYC = [ token: TOKENS.QUERY_HANDLER, useClass: IsInternalKycActivatedQueryHandler, }, + { + token: TOKENS.QUERY_HANDLER, + useClass: ActionContentHashExistsQueryHandler, + }, ]; diff --git a/packages/ats/sdk/src/core/injectable/transfer/InjectableTransfer.ts b/packages/ats/sdk/src/core/injectable/transfer/InjectableTransfer.ts index dc7b423b2..63dc4d593 100644 --- a/packages/ats/sdk/src/core/injectable/transfer/InjectableTransfer.ts +++ b/packages/ats/sdk/src/core/injectable/transfer/InjectableTransfer.ts @@ -210,7 +210,6 @@ import { ControllerRedeemCommandHandler } from '@command/security/operations/red import { ControllerTransferCommandHandler } from '@command/security/operations/transfer/ControllerTransferCommandHandler'; import { ForcedTransferCommandHandler } from '@command/security/operations/transfer/ForcedTransferCommandHandler'; import { ProtectedTransferFromByPartitionCommandHandler } from '@command/security/operations/transfer/ProtectedTransferFromByPartitionCommandHandler'; -import { ProtectedTransferAndLockByPartitionCommandHandler } from '@command/security/operations/transfer/ProtectedTransferAndLockByPartitionCommandHandler'; import { BatchForcedTransferCommandHandler } from '@command/security/operations/batch/batchForcedTransfer/BatchForcedTransferCommandHandler'; import { BatchTransferCommandHandler } from '@command/security/operations/batch/batchTransfer/BatchTransferCommandHandler'; import { CanTransferByPartitionQueryHandler } from '@query/security/canTransferByPartition/CanTransferByPartitionQueryHandler'; @@ -241,10 +240,6 @@ export const COMMAND_HANDLERS_TRANSFER = [ token: TOKENS.COMMAND_HANDLER, useClass: ProtectedTransferFromByPartitionCommandHandler, }, - { - token: TOKENS.COMMAND_HANDLER, - useClass: ProtectedTransferAndLockByPartitionCommandHandler, - }, { token: TOKENS.COMMAND_HANDLER, useClass: BatchForcedTransferCommandHandler, diff --git a/packages/ats/sdk/src/domain/context/account/PrivateKey.ts b/packages/ats/sdk/src/domain/context/account/PrivateKey.ts index 3c31f7797..936fda060 100644 --- a/packages/ats/sdk/src/domain/context/account/PrivateKey.ts +++ b/packages/ats/sdk/src/domain/context/account/PrivateKey.ts @@ -203,10 +203,10 @@ */ -import KeyProps, { KeyType } from './KeyProps'; -import { PrivateKey as HPrivateKey } from '@hashgraph/sdk'; -import PublicKey from './PublicKey'; -import BaseError from '@core/error/BaseError'; +import KeyProps, { KeyType } from "./KeyProps"; +import { PrivateKey as HPrivateKey } from "@hiero-ledger/sdk"; +import PublicKey from "./PublicKey"; +import BaseError from "@core/error/BaseError"; export default class PrivateKey implements KeyProps { public readonly key: string; diff --git a/packages/ats/sdk/src/domain/context/account/PublicKey.ts b/packages/ats/sdk/src/domain/context/account/PublicKey.ts index 66a6ea752..92380bd83 100644 --- a/packages/ats/sdk/src/domain/context/account/PublicKey.ts +++ b/packages/ats/sdk/src/domain/context/account/PublicKey.ts @@ -203,14 +203,14 @@ */ -import KeyProps, { KeyType } from './KeyProps'; -import { PublicKey as HPublicKey } from '@hashgraph/sdk'; -import BaseError from '@core/error/BaseError'; -import { RuntimeError } from '@core/error/RuntimeError'; +import KeyProps, { KeyType } from "./KeyProps"; +import { PublicKey as HPublicKey } from "@hiero-ledger/sdk"; +import BaseError from "@core/error/BaseError"; +import { RuntimeError } from "@core/error/RuntimeError"; export default class PublicKey implements KeyProps { public static readonly NULL: PublicKey = new PublicKey({ - key: 'null', + key: "null", type: KeyType.NULL, }); @@ -218,12 +218,12 @@ export default class PublicKey implements KeyProps { public readonly type: string; constructor(params: Partial | string) { let key: string, type: string; - if (typeof params === 'string') { + if (typeof params === "string") { key = this.formatKey(params); type = this.getTypeFromLength(key); } else { if (!params.key) { - throw new RuntimeError('Invalid public key'); + throw new RuntimeError("Invalid public key"); } key = this.formatKey(params.key); type = params.type ?? HPublicKey.fromString(key)._key._type; @@ -243,7 +243,7 @@ export default class PublicKey implements KeyProps { } private formatKey(key: string): string { - if (key.length > 0 && key.startsWith('0x')) { + if (key.length > 0 && key.startsWith("0x")) { return key.substring(2); } return key; diff --git a/packages/ats/sdk/src/domain/context/bond/Bond.ts b/packages/ats/sdk/src/domain/context/bond/Bond.ts index 48af2bad4..fa8e28bf9 100644 --- a/packages/ats/sdk/src/domain/context/bond/Bond.ts +++ b/packages/ats/sdk/src/domain/context/bond/Bond.ts @@ -204,7 +204,24 @@ */ import { Security, SecurityProps } from '../security/Security'; +import BaseError from '@core/error/BaseError'; +import { CastRateStatus, RateStatus } from './RateStatus'; +import { InvalidRateStatus} from './error/InvalidRateStatus'; export interface BondProps extends SecurityProps {} -export class Bond extends Security implements BondProps {} +export class Bond extends Security implements BondProps { + public static checkRateStatus(value: number | RateStatus): BaseError[] { + const errorList: BaseError[] = []; + + const length = Object.keys(RateStatus).length; + + if (typeof value !== 'number') { + value = CastRateStatus.toNumber(value); + } + + if (value >= length) errorList.push(new InvalidRateStatus(value)); + + return errorList; + } +} diff --git a/packages/ats/sdk/src/domain/context/bond/Coupon.ts b/packages/ats/sdk/src/domain/context/bond/Coupon.ts index 33883d292..2582594ea 100644 --- a/packages/ats/sdk/src/domain/context/bond/Coupon.ts +++ b/packages/ats/sdk/src/domain/context/bond/Coupon.ts @@ -206,14 +206,18 @@ import ValidatedDomain from '@core/validation/ValidatedArgs'; import BigDecimal from '../shared/BigDecimal'; import { SecurityDate } from '../shared/SecurityDate'; +import { RateStatus } from './RateStatus'; +import { Bond } from './Bond'; export class Coupon extends ValidatedDomain { recordTimeStamp: number; executionTimeStamp: number; rate: BigDecimal; rateDecimals: number; - period: number; - + startTimeStamp: number; + endTimeStamp: number; + fixingTimeStamp: number; + rateStatus: RateStatus; snapshotId?: number; constructor( @@ -221,20 +225,29 @@ export class Coupon extends ValidatedDomain { executionTimeStamp: number, rate: BigDecimal, rateDecimals: number, - period: number, + startTimeStamp: number, + endTimeStamp: number, + fixingTimeStamp: number, + rateStatus: RateStatus, snapshotId?: number, ) { super({ executionTimeStamp: (val) => { return SecurityDate.checkDateTimestamp(val, this.recordTimeStamp); }, + rateStatus: (val) => { + return Bond.checkRateStatus(val); + }, }); this.recordTimeStamp = recordTimeStamp; this.executionTimeStamp = executionTimeStamp; this.rate = rate; this.rateDecimals = rateDecimals; - this.period = period; + this.startTimeStamp = startTimeStamp; + this.endTimeStamp = endTimeStamp; + this.fixingTimeStamp = fixingTimeStamp; + this.rateStatus = rateStatus; this.snapshotId = snapshotId ? snapshotId : undefined; ValidatedDomain.handleValidation(Coupon.name, this); diff --git a/packages/ats/sdk/src/domain/context/bond/RateStatus.ts b/packages/ats/sdk/src/domain/context/bond/RateStatus.ts new file mode 100644 index 000000000..c8e5ec16e --- /dev/null +++ b/packages/ats/sdk/src/domain/context/bond/RateStatus.ts @@ -0,0 +1,221 @@ +/* + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "[]" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright [yyyy] [name of copyright owner] + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + +*/ + +export enum RateStatus { + PENDING = 'PENDING', + SET = 'SET', +} + +export class CastRateStatus { + static fromNumber(id: number): RateStatus { + if (id == 0) return RateStatus.PENDING; + return RateStatus.SET; + } + + static toNumber(value: RateStatus): number { + if (value == RateStatus.PENDING) return 0; + return 1; + } +} diff --git a/packages/ats/sdk/src/domain/context/bond/error/InvalidRateStatus.ts b/packages/ats/sdk/src/domain/context/bond/error/InvalidRateStatus.ts new file mode 100644 index 000000000..8995b26b0 --- /dev/null +++ b/packages/ats/sdk/src/domain/context/bond/error/InvalidRateStatus.ts @@ -0,0 +1,212 @@ +/* + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "[]" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright [yyyy] [name of copyright owner] + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + +*/ + +import BaseError, { ErrorCode } from '@core/error/BaseError'; + +export class InvalidRateStatus extends BaseError { + constructor(value: number) { + super(ErrorCode.InvalidRateStatus, `Rate Status ${value} is not valid`); + } +} diff --git a/packages/ats/sdk/src/domain/context/contract/ContractId.ts b/packages/ats/sdk/src/domain/context/contract/ContractId.ts index 9e785f777..525c94cff 100644 --- a/packages/ats/sdk/src/domain/context/contract/ContractId.ts +++ b/packages/ats/sdk/src/domain/context/contract/ContractId.ts @@ -203,45 +203,37 @@ */ -import { - DelegateContractId, - ContractId as HContractId, - Long, -} from '@hashgraph/sdk'; -import { proto } from '@hashgraph/proto'; -import InvalidKeyForContract from './error/InvalidKeyForContract'; -import BaseError from '@core/error/BaseError'; -import CheckStrings from '@core/checks/strings/CheckStrings'; -import { InvalidContractId } from './error/InvalidContractId'; -import { HederaId } from '../shared/HederaId'; -import LogService from '@service/log/LogService'; +import { DelegateContractId, ContractId as HContractId, Long } from "@hiero-ledger/sdk"; +import { proto } from "@hashgraph/proto"; +import InvalidKeyForContract from "./error/InvalidKeyForContract"; +import BaseError from "@core/error/BaseError"; +import CheckStrings from "@core/checks/strings/CheckStrings"; +import { InvalidContractId } from "./error/InvalidContractId"; +import { HederaId } from "../shared/HederaId"; +import LogService from "@service/log/LogService"; export default class ContractId extends HederaId { public readonly value: string; constructor(value: string) { - if (value.length == 42 && value.startsWith('0x')) { + if (value.length == 42 && value.startsWith("0x")) { throw new InvalidContractId(value); } super(value); } - public static fromProtoBufKey( - key: string, - options: { strict: boolean } = { strict: false }, - ): ContractId { - const normalizedInput = key.replace(/\s/g, ''); - const normalizedHexInput = normalizedInput.replace(/0x/g, '').toLowerCase(); - const keyProto = Buffer.from(normalizedHexInput, 'hex'); + public static fromProtoBufKey(key: string, options: { strict: boolean } = { strict: false }): ContractId { + const normalizedInput = key.replace(/\s/g, ""); + const normalizedHexInput = normalizedInput.replace(/0x/g, "").toLowerCase(); + const keyProto = Buffer.from(normalizedHexInput, "hex"); const out = proto.Key.decode(keyProto); - let id = - out?.contractID?.contractNum || out?.delegatableContractId?.contractNum; + let id = out?.contractID?.contractNum || out?.delegatableContractId?.contractNum; if (options.strict && !id) { throw new InvalidKeyForContract(out); } else if (!id) { id = Long.ZERO; } - return new ContractId('0.0.' + id.toString()); + return new ContractId("0.0." + id.toString()); } public static fromHederaContractId(con: HContractId | DelegateContractId) { @@ -249,9 +241,7 @@ export default class ContractId extends HederaId { } public static fromHederaEthereumAddress(evmAddress: string) { - return new ContractId( - HContractId.fromSolidityAddress(evmAddress).toString(), - ); + return new ContractId(HContractId.fromSolidityAddress(evmAddress).toString()); } public static validate(id: string): BaseError[] { @@ -260,8 +250,7 @@ export default class ContractId extends HederaId { err.push(new InvalidContractId(id)); } else { try { - if (!(id.length == 42 && id.startsWith('0x'))) - HContractId.fromString(id); + if (!(id.length == 42 && id.startsWith("0x"))) HContractId.fromString(id); } catch (error) { LogService.logError(error); err.push(new InvalidContractId(id)); diff --git a/packages/ats/sdk/src/domain/context/factory/FactorySecurityToken.ts b/packages/ats/sdk/src/domain/context/factory/FactorySecurityToken.ts index 215388a3b..28c696bf2 100644 --- a/packages/ats/sdk/src/domain/context/factory/FactorySecurityToken.ts +++ b/packages/ats/sdk/src/domain/context/factory/FactorySecurityToken.ts @@ -221,7 +221,6 @@ export class FactoryEquityToken { export class FactoryBondToken { public security: SecurityData; public bondDetails: BondDetailsData; - public proceedRecipients: string[]; public proceedRecipientsData: string[]; diff --git a/packages/ats/sdk/src/domain/context/factory/ProtectionData.ts b/packages/ats/sdk/src/domain/context/factory/ProtectionData.ts new file mode 100644 index 000000000..7fc1b1179 --- /dev/null +++ b/packages/ats/sdk/src/domain/context/factory/ProtectionData.ts @@ -0,0 +1,211 @@ +/* + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "[]" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright [yyyy] [name of copyright owner] + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + +*/ +import { BigNumber } from "ethers"; + +export class ProtectionData { + public deadline: BigNumber; + public nounce: BigNumber; + public signature: string; +} diff --git a/packages/ats/sdk/src/domain/context/factory/error/InvalidInterestRateType.ts b/packages/ats/sdk/src/domain/context/factory/error/InvalidInterestRateType.ts new file mode 100644 index 000000000..29f2deb64 --- /dev/null +++ b/packages/ats/sdk/src/domain/context/factory/error/InvalidInterestRateType.ts @@ -0,0 +1,215 @@ +/* + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "[]" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright [yyyy] [name of copyright owner] + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + +*/ + +import BaseError, { ErrorCode } from '@core/error/BaseError'; + +export class InvalidInterestRateType extends BaseError { + constructor(value: number) { + super( + ErrorCode.InvalidInterestRateType, + `Interest Rate Type ${value} is not valid`, + ); + } +} diff --git a/packages/ats/sdk/src/domain/context/factory/error/MissingInterestRateType.ts b/packages/ats/sdk/src/domain/context/factory/error/MissingInterestRateType.ts new file mode 100644 index 000000000..e8952aeb2 --- /dev/null +++ b/packages/ats/sdk/src/domain/context/factory/error/MissingInterestRateType.ts @@ -0,0 +1,212 @@ +/* + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "[]" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright [yyyy] [name of copyright owner] + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + +*/ + +import BaseError, { ErrorCode } from '@core/error/BaseError'; + +export class MissingInterestRateType extends BaseError { + constructor() { + super(ErrorCode.EmptyValue, `Interest Rate type is missing`); + } +} diff --git a/packages/ats/sdk/src/domain/context/shared/BigDecimal.ts b/packages/ats/sdk/src/domain/context/shared/BigDecimal.ts index 99efe1665..74a5cda65 100644 --- a/packages/ats/sdk/src/domain/context/shared/BigDecimal.ts +++ b/packages/ats/sdk/src/domain/context/shared/BigDecimal.ts @@ -203,18 +203,13 @@ */ -import { - parseFixed, - FixedNumber, - FixedFormat, - BigNumber, -} from '@ethersproject/bignumber'; -import CheckNums from '@core/checks/numbers/CheckNums'; -import { Long } from '@hashgraph/sdk'; +import { parseFixed, FixedNumber, FixedFormat, BigNumber } from "@ethersproject/bignumber"; +import CheckNums from "@core/checks/numbers/CheckNums"; +import { Long } from "@hiero-ledger/sdk"; export type BigDecimalFormat = string | number | FixedFormat | undefined; -const SEPARATOR = '.'; +const SEPARATOR = "."; export default class BigDecimal implements FixedNumber { readonly _hex: string; readonly _value: string; @@ -246,15 +241,11 @@ export default class BigDecimal implements FixedNumber { #fn: FixedNumber; - public static ZERO: BigDecimal = this.fromString('0', 0); - public static MINUSONE: BigDecimal = this.fromString('-1', 0); + public static ZERO: BigDecimal = this.fromString("0", 0); + public static MINUSONE: BigDecimal = this.fromString("-1", 0); - constructor( - value: string | BigNumber, - format?: BigDecimalFormat, - decimals?: number, - ) { - if (typeof value === 'string') { + constructor(value: string | BigNumber, format?: BigDecimalFormat, decimals?: number) { + if (typeof value === "string") { this.#fn = FixedNumber.fromString(value, format); } else { this.#fn = FixedNumber.fromValue(value, decimals, format); @@ -360,7 +351,7 @@ export default class BigDecimal implements FixedNumber { public toString(): string { let number = this.#fn.toString(); - if (number.endsWith('.0')) { + if (number.endsWith(".0")) { number = number.substring(0, number.length - 2); } return number; @@ -373,21 +364,18 @@ export default class BigDecimal implements FixedNumber { let [int, float] = this.value.split(SEPARATOR); if (float && float.length && float.length > value) { float = float.substring(0, float.length - value); - return BigDecimal.fromString( - `${int}${SEPARATOR}${float}`, - Math.max(float?.length ?? 0, value), - ); + return BigDecimal.fromString(`${int}${SEPARATOR}${float}`, Math.max(float?.length ?? 0, value)); } else { return BigDecimal.fromString(int, Math.max(0, value)); } } private splitNumber(): string[] { - const splitNumber = this.#fn.toString().split('.'); + const splitNumber = this.#fn.toString().split("."); if (splitNumber.length > 1) { - splitNumber[1] = splitNumber[1].padEnd(this.format.decimals, '0'); + splitNumber[1] = splitNumber[1].padEnd(this.format.decimals, "0"); } else { - splitNumber[1] = ''; + splitNumber[1] = ""; } return splitNumber; } @@ -397,7 +385,7 @@ export default class BigDecimal implements FixedNumber { const [, dec] = val.split(SEPARATOR); if (!dec) return 0; if (!CheckNums.isNumber(dec)) return 0; - return (dec as string).replace(/\.0+$/, '').length; + return (dec as string).replace(/\.0+$/, "").length; } public toLong(): Long { @@ -405,10 +393,7 @@ export default class BigDecimal implements FixedNumber { return Long.fromString(number[0] + number[1]); } - static fromString( - value: string, - format?: string | number | FixedFormat | undefined, - ): BigDecimal { + static fromString(value: string, format?: string | number | FixedFormat | undefined): BigDecimal { if (format === undefined) { format = this.getDecimalsFromString(value); } @@ -417,19 +402,15 @@ export default class BigDecimal implements FixedNumber { static fromStringFixed(value: string, decimals: number): BigDecimal { if (value.length < decimals) { - value = '0.' + value.padStart(decimals - value.length + 1, '0'); + value = "0." + value.padStart(decimals - value.length + 1, "0"); } else { const position = value.length - decimals; - value = value.substring(0, position) + '.' + value.substring(position); + value = value.substring(0, position) + "." + value.substring(position); } return new BigDecimal(value, decimals); } - static fromValue( - value: BigNumber, - decimals?: number, - format?: FixedFormat | string | number, - ): BigDecimal { + static fromValue(value: BigNumber, decimals?: number, format?: FixedFormat | string | number): BigDecimal { return new BigDecimal(value, format, decimals); } diff --git a/packages/ats/sdk/src/domain/context/shared/HederaId.ts b/packages/ats/sdk/src/domain/context/shared/HederaId.ts index ccdcef968..d4a21dbd2 100644 --- a/packages/ats/sdk/src/domain/context/shared/HederaId.ts +++ b/packages/ats/sdk/src/domain/context/shared/HederaId.ts @@ -203,14 +203,13 @@ */ -import { AccountId } from '@hashgraph/sdk'; -import { InvalidIdFormat } from './error/InvalidIdFormat'; +import { AccountId } from "@hiero-ledger/sdk"; +import { InvalidIdFormat } from "./error/InvalidIdFormat"; -export const HEDERA_FORMAT_ID_REGEX = - /^(0|(?:[1-9]\d*))\.(0|(?:[1-9]\d*))\.(0|(?:[1-9]\d*))(?:-([a-z]{5}))?$/; +export const HEDERA_FORMAT_ID_REGEX = /^(0|(?:[1-9]\d*))\.(0|(?:[1-9]\d*))\.(0|(?:[1-9]\d*))(?:-([a-z]{5}))?$/; export class HederaId { - public static readonly NULL: HederaId = new HederaId('0.0.0'); + public static readonly NULL: HederaId = new HederaId("0.0.0"); value: string; constructor(value: string) { @@ -221,7 +220,7 @@ export class HederaId { } static from(value?: string): HederaId { - return new HederaId(value ?? ''); + return new HederaId(value ?? ""); } toHederaAddress(): AccountId { @@ -233,6 +232,6 @@ export class HederaId { } isNull(): boolean { - return this.value == '0.0.0'; + return this.value == "0.0.0"; } } diff --git a/packages/ats/sdk/src/port/in/bond/Bond.ts b/packages/ats/sdk/src/port/in/bond/Bond.ts index 8cce5c0f8..a9540680a 100644 --- a/packages/ats/sdk/src/port/in/bond/Bond.ts +++ b/packages/ats/sdk/src/port/in/bond/Bond.ts @@ -62,6 +62,7 @@ import { GetProceedRecipientsCountRequest, GetProceedRecipientsRequest, } from "../request"; +import { CastRateStatus } from "@domain/context/bond/RateStatus"; interface IBondInPort { create(request: CreateBondRequest): Promise<{ security: SecurityViewModel; transactionId: string }>; @@ -185,11 +186,29 @@ class BondInPort implements IBondInPort { @LogError async setCoupon(request: SetCouponRequest): Promise<{ payload: number; transactionId: string }> { - const { rate, recordTimestamp, executionTimestamp, securityId, period } = request; + const { + rate, + recordTimestamp, + executionTimestamp, + securityId, + startTimestamp, + endTimestamp, + fixingTimestamp, + rateStatus, + } = request; ValidatedRequest.handleValidation("SetCouponRequest", request); return await this.commandBus.execute( - new SetCouponCommand(securityId, recordTimestamp, executionTimestamp, rate, period), + new SetCouponCommand( + securityId, + recordTimestamp, + executionTimestamp, + rate, + startTimestamp, + endTimestamp, + fixingTimestamp, + CastRateStatus.fromNumber(rateStatus), + ), ); } @@ -252,7 +271,10 @@ class BondInPort implements IBondInPort { executionDate: new Date(res.coupon.executionTimeStamp * ONE_THOUSAND), rate: res.coupon.rate.toString(), rateDecimals: res.coupon.rateDecimals, - period: res.coupon.period, + startDate: new Date(res.coupon.startTimeStamp * ONE_THOUSAND), + endDate: new Date(res.coupon.endTimeStamp * ONE_THOUSAND), + fixingDate: new Date(res.coupon.fixingTimeStamp * ONE_THOUSAND), + rateStatus: CastRateStatus.toNumber(res.coupon.rateStatus), }; return coupon; diff --git a/packages/ats/sdk/src/port/in/bond/Bond.unit.test.ts b/packages/ats/sdk/src/port/in/bond/Bond.unit.test.ts index b42208825..277a20272 100644 --- a/packages/ats/sdk/src/port/in/bond/Bond.unit.test.ts +++ b/packages/ats/sdk/src/port/in/bond/Bond.unit.test.ts @@ -84,6 +84,7 @@ import { IsProceedRecipientQuery } from "@query/security/proceedRecipient/isProc import { GetProceedRecipientsCountQuery } from "@query/security/proceedRecipient/getProceedRecipientsCount/GetProceedRecipientsCountQuery"; import { GetProceedRecipientDataQuery } from "@query/security/proceedRecipient/getProceedRecipientData/GetProceedRecipientDataQuery"; import { GetProceedRecipientsQuery } from "@query/security/proceedRecipient/getProceedRecipients/GetProceedRecipientsQuery"; +import { CastRateStatus } from "@domain/context/bond/RateStatus"; describe("Bond", () => { let commandBusMock: jest.Mocked; @@ -480,7 +481,10 @@ describe("Bond", () => { setCouponRequest.recordTimestamp, setCouponRequest.executionTimestamp, setCouponRequest.rate, - setCouponRequest.period, + setCouponRequest.startTimestamp, + setCouponRequest.endTimestamp, + setCouponRequest.fixingTimestamp, + CastRateStatus.fromNumber(setCouponRequest.rateStatus), ), ); @@ -501,7 +505,10 @@ describe("Bond", () => { setCouponRequest.recordTimestamp, setCouponRequest.executionTimestamp, setCouponRequest.rate, - setCouponRequest.period, + setCouponRequest.startTimestamp, + setCouponRequest.endTimestamp, + setCouponRequest.fixingTimestamp, + CastRateStatus.fromNumber(setCouponRequest.rateStatus), ), ); }); @@ -857,6 +864,11 @@ describe("Bond", () => { recordDate: new Date(expectedResponse2.coupon.recordTimeStamp * ONE_THOUSAND), executionDate: new Date(expectedResponse2.coupon.executionTimeStamp * ONE_THOUSAND), rate: expectedResponse2.coupon.rate.toString(), + rateDecimals: expectedResponse2.coupon.rateDecimals, + startDate: new Date(expectedResponse2.coupon.startTimeStamp * ONE_THOUSAND), + endDate: new Date(expectedResponse2.coupon.endTimeStamp * ONE_THOUSAND), + fixingDate: new Date(expectedResponse2.coupon.fixingTimeStamp * ONE_THOUSAND), + rateStatus: CastRateStatus.toNumber(expectedResponse2.coupon.rateStatus), }, ]), ); diff --git a/packages/ats/sdk/src/port/in/request/bond/SetCouponRequest.ts b/packages/ats/sdk/src/port/in/request/bond/SetCouponRequest.ts index 8acf0fecd..110a50b65 100644 --- a/packages/ats/sdk/src/port/in/request/bond/SetCouponRequest.ts +++ b/packages/ats/sdk/src/port/in/request/bond/SetCouponRequest.ts @@ -207,26 +207,36 @@ import ValidatedRequest from '@core/validation/ValidatedArgs'; import FormatValidation from '../FormatValidation'; import { SecurityDate } from '@domain/context/shared/SecurityDate'; +import { Bond } from '@domain/context/bond/Bond'; export default class SetCouponRequest extends ValidatedRequest { securityId: string; rate: string; recordTimestamp: string; executionTimestamp: string; - period: string; + startTimestamp: string; + endTimestamp: string; + fixingTimestamp: string; + rateStatus: number; constructor({ securityId, rate, recordTimestamp, executionTimestamp, - period, + startTimestamp, + endTimestamp, + fixingTimestamp, + rateStatus, }: { securityId: string; rate: string; recordTimestamp: string; executionTimestamp: string; - period: string; + startTimestamp: string; + endTimestamp: string; + fixingTimestamp: string; + rateStatus: number; }) { super({ rate: FormatValidation.checkAmount(true), @@ -245,13 +255,32 @@ export default class SetCouponRequest extends ValidatedRequest ); }, securityId: FormatValidation.checkHederaIdFormatOrEvmAddress(), - period: FormatValidation.checkAmount(), + endTimestamp: (val) => { + return SecurityDate.checkDateTimestamp( + parseInt(val), + parseInt(this.startTimestamp), + undefined, + ); + }, + fixingTimestamp: (val) => { + return SecurityDate.checkDateTimestamp( + parseInt(val), + undefined, + parseInt(this.executionTimestamp), + ); + }, + rateStatus: (val) => { + return Bond.checkRateStatus(val); + }, }); this.securityId = securityId; this.rate = rate; this.recordTimestamp = recordTimestamp; this.executionTimestamp = executionTimestamp; - this.period = period; + this.startTimestamp = startTimestamp; + this.endTimestamp = endTimestamp; + this.fixingTimestamp = fixingTimestamp; + this.rateStatus = rateStatus; } } diff --git a/packages/ats/sdk/src/port/in/request/index.ts b/packages/ats/sdk/src/port/in/request/index.ts index e3916c572..0ccdeeace 100644 --- a/packages/ats/sdk/src/port/in/request/index.ts +++ b/packages/ats/sdk/src/port/in/request/index.ts @@ -203,204 +203,204 @@ */ -import IssueRequest from './security/operations/issue/IssueRequest'; -import RedeemRequest from './security/operations/redeem/RedeemRequest'; -import ForceRedeemRequest from './security/operations/redeem/ForceRedeemRequest'; -import CreateEquityRequest from './equity/CreateEquityRequest'; -import CreateBondRequest from './bond/CreateBondRequest'; -import RoleRequest from './security/roles/RoleRequest'; -import ApplyRolesRequest from './security/roles/ApplyRolesRequest'; -import ValidationResponse from '@core/validation/ValidationResponse'; -import TransferRequest from './security/operations/transfer/TransferRequest'; -import TransferAndLockRequest from './security/operations/transfer/TransferAndLockRequest'; -import ForceTransferRequest from './security/operations/transfer/ForceTransferRequest'; -import GetAccountBalanceRequest from './account/GetAccountBalanceRequest'; -import GetAccountInfoRequest from './account/GetAccountInfoRequest'; -import PauseRequest from './security/operations/pause/PauseRequest'; -import ControlListRequest from './security/operations/controlList/ControlListRequest'; -import GetControlListCountRequest from './security/operations/controlList/GetControlListCountRequest'; -import GetControlListMembersRequest from './security/operations/controlList/GetControlListMembersRequest'; -import GetDividendsForRequest from './equity/GetDividendsForRequest'; -import GetDividendsRequest from './equity/GetDividendsRequest'; -import GetAllDividendsRequest from './equity/GetAllDividendsRequest'; -import GetVotingRightsForRequest from './equity/GetVotingRightsForRequest'; -import GetVotingRightsRequest from './equity/GetVotingRightsRequest'; -import GetAllVotingRightsRequest from './equity/GetAllVotingRightsRequest'; -import GetCouponForRequest from './bond/GetCouponForRequest'; -import GetCouponRequest from './bond/GetCouponRequest'; -import GetAllCouponsRequest from './bond/GetAllCouponsRequest'; -import GetRoleCountForRequest from './security/roles/GetRoleCountForRequest'; -import GetRolesForRequest from './security/roles/GetRolesForRequest'; -import GetRoleMemberCountRequest from './security/roles/GetRoleMemberCountRequest'; -import GetRoleMembersRequest from './security/roles/GetRoleMembersRequest'; -import GetSecurityDetailsRequest from './security/GetSecurityDetailsRequest'; -import SetDividendsRequest from './equity/SetDividendsRequest'; -import SetCouponRequest from './bond/SetCouponRequest'; -import SetVotingRightsRequest from './equity/SetVotingRightsRequest'; -import GetBondDetailsRequest from './bond/GetBondDetailsRequest'; -import GetEquityDetailsRequest from './equity/GetEquityDetailsRequest'; -import SetMaxSupplyRequest from './security/operations/cap/SetMaxSupplyRequest'; -import GetMaxSupplyRequest from './security/operations/cap/GetMaxSupplyRequest'; -import GetRegulationDetailsRequest from './factory/GetRegulationDetailsRequest'; -import GetLockedBalanceRequest from './security/operations/lock/GetLockedBalanceRequest'; -import LockRequest from './security/operations/lock/LockRequest'; -import ReleaseRequest from './security/operations/release/ReleaseRequest'; -import GetLockCountRequest from './security/operations/lock/GetLockCountRequest'; -import GetLocksIdRequest from './security/operations/lock/GetLocksIdRequest'; -import GetLockRequest from './security/operations/lock/GetLockRequest'; -import ExecuteHoldByPartitionRequest from './security/operations/hold/ExecuteHoldByPartitionRequest'; - -import GetControlListTypeRequest from './security/operations/controlList/GetControlListTypeRequest'; -import InitializationRequest from './network/InitializationRequest'; -import ConnectRequest from './network/ConnectRequest'; -import GetConfigInfoRequest from './management/GetConfigInfoRequest'; -import UpdateConfigRequest from './management/UpdateConfigRequest'; -import UpdateConfigVersionRequest from './management/UpdateConfigVersionRequest'; -import UpdateResolverRequest from './management/UpdateResolverRequest'; -import UpdateMaturityDateRequest from './bond/UpdateMaturityDateRequest'; -import SetScheduledBalanceAdjustmentRequest from './equity/SetScheduledBalanceAdjustmentRequest'; -import GetScheduledBalanceAdjustmentRequest from './equity/GetScheduledBalanceAdjustmentRequest'; -import GetScheduledBalanceAdjustmentCountRequest from './equity/GetScheduledBalanceAdjustmentsCountRequest'; -import GetAllScheduledBalanceAdjustmentsRequest from './equity/GetAllScheduledBalanceAdjustmentst'; -import GetLastAggregatedBalanceAdjustmentFactorForRequest from './equity/GetLastAggregatedBalanceAdjustmentFactorForRequest'; -import GetAggregatedBalanceAdjustmentFactorRequest from './account/GetAggregatedBalanceAdjustmentFactorRequest'; -import GetLastAggregatedBalanceAdjustmentFactorForByPartitionRequest from './equity/GetLastAggregatedBalanceAdjustmentFactorForByPartitionRequest'; -import ProtectedTransferFromByPartitionRequest from './security/operations/transfer/ProtectedTransferFromByPartitionRequest'; -import ProtectedRedeemFromByPartitionRequest from './security/operations/redeem/ProtectedRedeemFromByPartitionRequest'; -import GetNounceRequest from './security/operations/protectedPartitions/GetNounceRequest'; -import PartitionsProtectedRequest from './security/operations/protectedPartitions/PartitionsProtectedRequest'; -import ProtectedTransferAndLockByPartitionRequest from './security/operations/transfer/ProtectedTransferAndLockByPartitionRequest'; -import CreateHoldByPartitionRequest from './security/operations/hold/CreateHoldByPartition'; -import CreateHoldFromByPartitionRequest from './security/operations/hold/CreateHoldFromByPartition'; -import ControllerCreateHoldByPartitionRequest from './security/operations/hold/ControllerCreateHoldFromByPartition'; -import ProtectedCreateHoldByPartitionRequest from './security/operations/hold/ProtectedCreateHoldFromByPartition'; -import GetHeldAmountForRequest from './security/operations/hold/GetHeldAmountForRequest'; -import GetHeldAmountForByPartitionRequest from './security/operations/hold/GetHeldAmountForByPartitionRequest'; -import GetHoldCountForByPartitionRequest from './security/operations/hold/GetHoldCountForByPartitionRequest'; -import GetHoldsIdForByPartitionRequest from './security/operations/hold/GetHoldsIdForByPartitionRequest'; -import GetHoldForByPartitionRequest from './security/operations/hold/GetHoldForByPartitionRequest'; -import ReleaseHoldByPartitionRequest from './security/operations/release/ReleaseHoldByPartitionRequest'; -import ReclaimHoldByPartitionRequest from './security/operations/hold/ReclaimHoldByPartitionRequest'; -import AddIssuerRequest from './security/ssi/AddIssuerRequest'; -import SetRevocationRegistryAddressRequest from './security/ssi/SetRevocationRegistryAddressRequest'; -import RemoveIssuerRequest from './security/operations/issue/RemoveIssuerRequest'; -import GetRevocationRegistryAddressRequest from './security/ssi/GetRevocationRegistryAddressRequest'; -import GetIssuerListCountRequest from './security/ssi/GetIssuerListCountRequest'; -import GetIssuerListMembersRequest from './security/ssi/GetIssuerListMembersRequest'; -import IsIssuerRequest from './security/operations/issue/IsIssuerRequest'; -import GetKycAccountsCountRequest from './security/kyc/GetKycAccountsCountRequest'; -import GetKycForRequest from './security/kyc/GetKycForRequest'; -import RevokeKycRequest from './security/kyc/RevokeKycRequest'; -import GrantKycRequest from './security/kyc/GrantKycRequest'; -import GetKycAccountsDataRequest from './security/kyc/GetKycAccountsDataRequest'; -import GetKycStatusForRequest from './security/kyc/GetKycStatusForRequest'; -import ActivateClearingRequest from './security/operations/clearing/ActivateClearingRequest'; -import DeactivateClearingRequest from './security/operations/clearing/DeactivateClearingRequest'; -import ClearingTransferByPartitionRequest from './security/operations/clearing/ClearingTransferByPartitionRequest'; -import ClearingTransferFromByPartitionRequest from './security/operations/clearing/ClearingTransferFromByPartitionRequest'; -import ProtectedClearingTransferByPartitionRequest from './security/operations/clearing/ProtectedClearingTransferByPartitionRequest'; -import ApproveClearingOperationByPartitionRequest from './security/operations/clearing/ApproveClearingOperationByPartitionRequest'; -import CancelClearingOperationByPartitionRequest from './security/operations/clearing/CancelClearingOperationByPartitionRequest'; -import ReclaimClearingOperationByPartitionRequest from './security/operations/clearing/ReclaimClearingOperationByPartitionRequest'; -import ClearingRedeemByPartitionRequest from './security/operations/clearing/ClearingRedeemByPartitionRequest'; -import ClearingRedeemFromByPartitionRequest from './security/operations/clearing/ClearingRedeemFromByPartitionRequest'; -import ProtectedClearingRedeemByPartitionRequest from './security/operations/clearing/ProtectedClearingRedeemByPartitionRequest'; -import ClearingCreateHoldByPartitionRequest from './security/operations/clearing/ClearingCreateHoldByPartitionRequest'; -import ClearingCreateHoldFromByPartitionRequest from './security/operations/clearing/ClearingCreateHoldFromByPartitionRequest'; -import ProtectedClearingCreateHoldByPartitionRequest from './security/operations/clearing/ProtectedClearingCreateHoldByPartitionRequest'; -import GetClearedAmountForByPartitionRequest from './security/operations/clearing/GetClearedAmountForByPartitionRequest'; -import GetClearedAmountForRequest from './security/operations/clearing/GetClearedAmountForRequest'; -import GetClearingCountForByPartitionRequest from './security/operations/clearing/GetClearingCountForByPartitionRequest'; -import GetClearingsIdForByPartitionRequest from './security/operations/clearing/GetClearingsIdForByPartitionRequest'; -import IsClearingActivatedRequest from './security/operations/clearing/IsClearingActivatedRequest'; -import OperatorClearingCreateHoldByPartitionRequest from './security/operations/clearing/OperatorClearingCreateHoldByPartitionRequest'; -import OperatorClearingRedeemByPartitionRequest from './security/operations/clearing/OperatorClearingRedeemByPartitionRequest'; -import OperatorClearingTransferByPartitionRequest from './security/operations/clearing/OperatorClearingTransferByPartitionRequest'; -import GetClearingCreateHoldForByPartitionRequest from './security/operations/clearing/GetClearingCreateHoldForByPartitionRequest'; -import GetClearingRedeemForByPartitionRequest from './security/operations/clearing/GetClearingRedeemForByPartitionRequest'; -import GetClearingTransferForByPartitionRequest from './security/operations/clearing/GetClearingTransferForByPartitionRequest'; -import UpdateExternalPausesRequest from './security/externalPauses/UpdateExternalPausesRequest'; -import AddExternalPauseRequest from './security/externalPauses/AddExternalPauseRequest'; -import RemoveExternalPauseRequest from './security/externalPauses/RemoveExternalPauseRequest'; -import IsExternalPauseRequest from './security/externalPauses/IsExternalPauseRequest'; -import GetExternalPausesCountRequest from './security/externalPauses/GetExternalPausesCountRequest'; -import GetExternalPausesMembersRequest from './security/externalPauses/GetExternalPausesMembersRequest'; -import IsPausedMockRequest from './security/externalPauses/mock/IsPausedMockRequest'; -import SetPausedMockRequest from './security/externalPauses/mock/SetPausedMockRequest'; -import UpdateExternalControlListsRequest from './security/externalControlLists/UpdateExternalControlListsRequest'; -import AddExternalControlListRequest from './security/externalControlLists/AddExternalControlListRequest'; -import RemoveExternalControlListRequest from './security/externalControlLists/RemoveExternalControlListRequest'; -import GetExternalControlListsCountRequest from './security/externalControlLists/GetExternalControlListsCountRequest'; -import IsExternalControlListRequest from './security/externalControlLists/IsExternalControlListRequest'; -import GetExternalControlListsMembersRequest from './security/externalControlLists/GetExternalControlListsMembersRequest'; -import AddToBlackListMockRequest from './security/externalControlLists/mock/AddToBlackListMockRequest'; -import AddToWhiteListMockRequest from './security/externalControlLists/mock/AddToWhiteListMockRequest'; -import RemoveFromBlackListMockRequest from './security/externalControlLists/mock/RemoveFromBlackListMockRequest'; -import RemoveFromWhiteListMockRequest from './security/externalControlLists/mock/RemoveFromWhiteListMockRequest'; -import IsAuthorizedBlackListMockRequest from './security/externalControlLists/mock/IsAuthorizedBlackListMockRequest'; -import IsAuthorizedWhiteListMockRequest from './security/externalControlLists/mock/IsAuthorizedWhiteListMockRequest'; -import UpdateExternalKycListsRequest from './security/externalKycLists/UpdateExternalKycListsRequest'; -import AddExternalKycListRequest from './security/externalKycLists/AddExternalKycListRequest'; -import RemoveExternalKycListRequest from './security/externalKycLists/RemoveExternalKycListRequest'; -import GetExternalKycListsCountRequest from './security/externalKycLists/GetExternalKycListsCountRequest'; -import GetExternalKycListsMembersRequest from './security/externalKycLists/GetExternalKycListsMembersRequest'; -import IsExternalKycListRequest from './security/externalKycLists/IsExternalKycListRequest'; -import IsExternallyGrantedRequest from './security/externalKycLists/IsExternallyGrantedRequest'; -import ActivateInternalKycRequest from './security/kyc/ActivateInternalKycRequest'; -import IsInternalKycActivatedRequest from './security/kyc/IsInternalKycActivatedRequest'; -import GrantKycMockRequest from './security/externalKycLists/mock/GrantKycMockRequest'; -import RevokeKycMockRequest from './security/externalKycLists/mock/RevokeKycMockRequest'; -import GetKycStatusMockRequest from './security/externalKycLists/mock/GetKycStatusMockRequest'; -import SetNameRequest from './security/operations/tokeMetadata/SetNameRequest'; -import SetSymbolRequest from './security/operations/tokeMetadata/SetSymbolRequest'; -import SetOnchainIDRequest from './security/operations/tokeMetadata/SetOnchainIDRequest'; -import SetComplianceRequest from './security/compliance/SetComplianceRequest'; -import ComplianceRequest from './security/compliance/ComplianceRequest'; -import SetIdentityRegistryRequest from './security/identityRegistry/SetIdentityRegistryRequest'; -import IdentityRegistryRequest from './security/identityRegistry/IdentityRegistryRequest'; -import OnchainIDRequest from './security/operations/tokeMetadata/OnchainIDRequest'; -import BurnRequest from './security/operations/burn/BurnRequest'; -import MintRequest from './security/operations/mint/MintRequest'; -import RecoveryAddressRequest from './security/operations/recovery/RecoveryAddressRequest'; -import IsAddressRecoveredRequest from './security/operations/recovery/IsAddressRecoveredRequest'; -import ForcedTransferRequest from './security/operations/transfer/ForcedTransferRequest'; -import FreezePartialTokensRequest from './security/operations/freeze/FreezePartialTokensRequest'; -import GetFrozenPartialTokensRequest from './security/operations/freeze/GetFrozenPartialTokensRequest'; -import UnfreezePartialTokensRequest from './security/operations/freeze/UnfreezePartialTokensRequest'; -import AddAgentRequest from './security/operations/agent/AddAgentRequest'; -import RemoveAgentRequest from './security/operations/agent/RemoveAgentRequest'; -import BatchBurnRequest from './security/operations/batch/BatchBurnRequest'; -import BatchForcedTransferRequest from './security/operations/batch/BatchForcedTransferRequest'; -import BatchFreezePartialTokensRequest from './security/operations/batch/BatchFreezePartialTokensRequest'; -import BatchMintRequest from './security/operations/batch/BatchMintRequest'; -import BatchSetAddressFrozenRequest from './security/operations/batch/BatchSetAddressFrozenRequest'; -import BatchTransferRequest from './security/operations/batch/BatchTransferRequest'; -import BatchUnfreezePartialTokensRequest from './security/operations/batch/BatchUnfreezePartialTokensRequest'; -import SetAddressFrozenRequest from './security/operations/freeze/SetAddressFrozenRequest'; -import DeactivateInternalKycRequest from './security/kyc/DeactivateInternalKycRequest'; -import TakeSnapshotRequest from './security/operations/snapshot/TakeSnapshotRequest'; -import RedeemAtMaturityByPartitionRequest from './bond/RedeemAtMaturityByPartitionRequest'; -import FullRedeemAtMaturityRequest from './bond/FullRedeemAtMaturityRequest'; -import GetTokenHoldersAtSnapshotRequest from './security/operations/snapshot/GetTokenHoldersAtSnapshotRequest'; -import GetTotalTokenHoldersAtSnapshotRequest from './security/operations/snapshot/GetTotalTokenHoldersAtSnapshotRequest'; -import GetCouponHoldersRequest from './bond/GetCouponHoldersRequest'; -import GetTotalCouponHoldersRequest from './bond/GetTotalCouponHoldersRequest'; -import GetDividendHoldersRequest from './equity/GetDividendHoldersRequest'; -import GetTotalDividendHoldersRequest from './equity/GetTotalDividendHoldersRequest'; -import GetTotalVotingHoldersRequest from './equity/GetTotalVotingHoldersRequest'; -import GetVotingHoldersRequest from './equity/GetVotingHoldersRequest'; -import GetSecurityHoldersRequest from './security/GetSecurityHoldersRequest'; -import GetTotalSecurityHoldersRequest from './security/GetTotalSecurityHoldersRequest'; -import CreateTrexSuiteEquityRequest from './equity/CreateTrexSuiteEquityRequest'; -import CreateTrexSuiteBondRequest from './bond/CreateTrexSuiteBondRequest'; -import AddProceedRecipientRequest from './bond/AddProceedRecipientRequest'; -import RemoveProceedRecipientRequest from './bond/RemoveProceedRecipientRequest'; -import UpdateProceedRecipientDataRequest from './bond/UpdateProceedRecipientDataRequest'; -import GetProceedRecipientDataRequest from './bond/GetProceedRecipientDataRequest'; -import GetProceedRecipientsCountRequest from './bond/GetProceedRecipientsCountRequest'; -import GetProceedRecipientsRequest from './bond/GetProceedRecipientsRequest'; -import IsProceedRecipientRequest from './bond/IsProceedRecipientRequest'; -import GetPrincipalForRequest from './bond/GetPrincipalForRequest'; +import IssueRequest from "./security/operations/issue/IssueRequest"; +import RedeemRequest from "./security/operations/redeem/RedeemRequest"; +import ForceRedeemRequest from "./security/operations/redeem/ForceRedeemRequest"; +import CreateEquityRequest from "./equity/CreateEquityRequest"; +import CreateBondRequest from "./bond/CreateBondRequest"; +import RoleRequest from "./security/roles/RoleRequest"; +import ApplyRolesRequest from "./security/roles/ApplyRolesRequest"; +import ValidationResponse from "@core/validation/ValidationResponse"; +import TransferRequest from "./security/operations/transfer/TransferRequest"; +import TransferAndLockRequest from "./security/operations/transfer/TransferAndLockRequest"; +import ForceTransferRequest from "./security/operations/transfer/ForceTransferRequest"; +import GetAccountBalanceRequest from "./account/GetAccountBalanceRequest"; +import GetAccountInfoRequest from "./account/GetAccountInfoRequest"; +import PauseRequest from "./security/operations/pause/PauseRequest"; +import ControlListRequest from "./security/operations/controlList/ControlListRequest"; +import GetControlListCountRequest from "./security/operations/controlList/GetControlListCountRequest"; +import GetControlListMembersRequest from "./security/operations/controlList/GetControlListMembersRequest"; +import GetDividendsForRequest from "./equity/GetDividendsForRequest"; +import GetDividendsRequest from "./equity/GetDividendsRequest"; +import GetAllDividendsRequest from "./equity/GetAllDividendsRequest"; +import GetVotingRightsForRequest from "./equity/GetVotingRightsForRequest"; +import GetVotingRightsRequest from "./equity/GetVotingRightsRequest"; +import GetAllVotingRightsRequest from "./equity/GetAllVotingRightsRequest"; +import GetCouponForRequest from "./bond/GetCouponForRequest"; +import GetCouponRequest from "./bond/GetCouponRequest"; +import GetAllCouponsRequest from "./bond/GetAllCouponsRequest"; +import GetRoleCountForRequest from "./security/roles/GetRoleCountForRequest"; +import GetRolesForRequest from "./security/roles/GetRolesForRequest"; +import GetRoleMemberCountRequest from "./security/roles/GetRoleMemberCountRequest"; +import GetRoleMembersRequest from "./security/roles/GetRoleMembersRequest"; +import GetSecurityDetailsRequest from "./security/GetSecurityDetailsRequest"; +import SetDividendsRequest from "./equity/SetDividendsRequest"; +import SetCouponRequest from "./bond/SetCouponRequest"; +import SetVotingRightsRequest from "./equity/SetVotingRightsRequest"; +import GetBondDetailsRequest from "./bond/GetBondDetailsRequest"; +import GetEquityDetailsRequest from "./equity/GetEquityDetailsRequest"; +import SetMaxSupplyRequest from "./security/operations/cap/SetMaxSupplyRequest"; +import GetMaxSupplyRequest from "./security/operations/cap/GetMaxSupplyRequest"; +import GetRegulationDetailsRequest from "./factory/GetRegulationDetailsRequest"; +import GetLockedBalanceRequest from "./security/operations/lock/GetLockedBalanceRequest"; +import LockRequest from "./security/operations/lock/LockRequest"; +import ReleaseRequest from "./security/operations/release/ReleaseRequest"; +import GetLockCountRequest from "./security/operations/lock/GetLockCountRequest"; +import GetLocksIdRequest from "./security/operations/lock/GetLocksIdRequest"; +import GetLockRequest from "./security/operations/lock/GetLockRequest"; +import ExecuteHoldByPartitionRequest from "./security/operations/hold/ExecuteHoldByPartitionRequest"; + +import GetControlListTypeRequest from "./security/operations/controlList/GetControlListTypeRequest"; +import InitializationRequest from "./network/InitializationRequest"; +import ConnectRequest from "./network/ConnectRequest"; +import GetConfigInfoRequest from "./management/GetConfigInfoRequest"; +import UpdateConfigRequest from "./management/UpdateConfigRequest"; +import UpdateConfigVersionRequest from "./management/UpdateConfigVersionRequest"; +import UpdateResolverRequest from "./management/UpdateResolverRequest"; +import UpdateMaturityDateRequest from "./bond/UpdateMaturityDateRequest"; +import SetScheduledBalanceAdjustmentRequest from "./equity/SetScheduledBalanceAdjustmentRequest"; +import GetScheduledBalanceAdjustmentRequest from "./equity/GetScheduledBalanceAdjustmentRequest"; +import GetScheduledBalanceAdjustmentCountRequest from "./equity/GetScheduledBalanceAdjustmentsCountRequest"; +import GetAllScheduledBalanceAdjustmentsRequest from "./equity/GetAllScheduledBalanceAdjustmentst"; +import GetLastAggregatedBalanceAdjustmentFactorForRequest from "./equity/GetLastAggregatedBalanceAdjustmentFactorForRequest"; +import GetAggregatedBalanceAdjustmentFactorRequest from "./account/GetAggregatedBalanceAdjustmentFactorRequest"; +import GetLastAggregatedBalanceAdjustmentFactorForByPartitionRequest from "./equity/GetLastAggregatedBalanceAdjustmentFactorForByPartitionRequest"; +import ProtectedTransferFromByPartitionRequest from "./security/operations/transfer/ProtectedTransferFromByPartitionRequest"; +import ProtectedRedeemFromByPartitionRequest from "./security/operations/redeem/ProtectedRedeemFromByPartitionRequest"; +import GetNounceRequest from "./security/operations/protectedPartitions/GetNounceRequest"; +import PartitionsProtectedRequest from "./security/operations/protectedPartitions/PartitionsProtectedRequest"; +import CreateHoldByPartitionRequest from "./security/operations/hold/CreateHoldByPartition"; +import CreateHoldFromByPartitionRequest from "./security/operations/hold/CreateHoldFromByPartition"; +import ControllerCreateHoldByPartitionRequest from "./security/operations/hold/ControllerCreateHoldFromByPartition"; +import ProtectedCreateHoldByPartitionRequest from "./security/operations/hold/ProtectedCreateHoldFromByPartition"; +import GetHeldAmountForRequest from "./security/operations/hold/GetHeldAmountForRequest"; +import GetHeldAmountForByPartitionRequest from "./security/operations/hold/GetHeldAmountForByPartitionRequest"; +import GetHoldCountForByPartitionRequest from "./security/operations/hold/GetHoldCountForByPartitionRequest"; +import GetHoldsIdForByPartitionRequest from "./security/operations/hold/GetHoldsIdForByPartitionRequest"; +import GetHoldForByPartitionRequest from "./security/operations/hold/GetHoldForByPartitionRequest"; +import ReleaseHoldByPartitionRequest from "./security/operations/release/ReleaseHoldByPartitionRequest"; +import ReclaimHoldByPartitionRequest from "./security/operations/hold/ReclaimHoldByPartitionRequest"; +import AddIssuerRequest from "./security/ssi/AddIssuerRequest"; +import SetRevocationRegistryAddressRequest from "./security/ssi/SetRevocationRegistryAddressRequest"; +import RemoveIssuerRequest from "./security/operations/issue/RemoveIssuerRequest"; +import GetRevocationRegistryAddressRequest from "./security/ssi/GetRevocationRegistryAddressRequest"; +import GetIssuerListCountRequest from "./security/ssi/GetIssuerListCountRequest"; +import GetIssuerListMembersRequest from "./security/ssi/GetIssuerListMembersRequest"; +import IsIssuerRequest from "./security/operations/issue/IsIssuerRequest"; +import GetKycAccountsCountRequest from "./security/kyc/GetKycAccountsCountRequest"; +import GetKycForRequest from "./security/kyc/GetKycForRequest"; +import RevokeKycRequest from "./security/kyc/RevokeKycRequest"; +import GrantKycRequest from "./security/kyc/GrantKycRequest"; +import GetKycAccountsDataRequest from "./security/kyc/GetKycAccountsDataRequest"; +import GetKycStatusForRequest from "./security/kyc/GetKycStatusForRequest"; +import ActivateClearingRequest from "./security/operations/clearing/ActivateClearingRequest"; +import DeactivateClearingRequest from "./security/operations/clearing/DeactivateClearingRequest"; +import ClearingTransferByPartitionRequest from "./security/operations/clearing/ClearingTransferByPartitionRequest"; +import ClearingTransferFromByPartitionRequest from "./security/operations/clearing/ClearingTransferFromByPartitionRequest"; +import ProtectedClearingTransferByPartitionRequest from "./security/operations/clearing/ProtectedClearingTransferByPartitionRequest"; +import ApproveClearingOperationByPartitionRequest from "./security/operations/clearing/ApproveClearingOperationByPartitionRequest"; +import CancelClearingOperationByPartitionRequest from "./security/operations/clearing/CancelClearingOperationByPartitionRequest"; +import ReclaimClearingOperationByPartitionRequest from "./security/operations/clearing/ReclaimClearingOperationByPartitionRequest"; +import ClearingRedeemByPartitionRequest from "./security/operations/clearing/ClearingRedeemByPartitionRequest"; +import ClearingRedeemFromByPartitionRequest from "./security/operations/clearing/ClearingRedeemFromByPartitionRequest"; +import ProtectedClearingRedeemByPartitionRequest from "./security/operations/clearing/ProtectedClearingRedeemByPartitionRequest"; +import ClearingCreateHoldByPartitionRequest from "./security/operations/clearing/ClearingCreateHoldByPartitionRequest"; +import ClearingCreateHoldFromByPartitionRequest from "./security/operations/clearing/ClearingCreateHoldFromByPartitionRequest"; +import ProtectedClearingCreateHoldByPartitionRequest from "./security/operations/clearing/ProtectedClearingCreateHoldByPartitionRequest"; +import GetClearedAmountForByPartitionRequest from "./security/operations/clearing/GetClearedAmountForByPartitionRequest"; +import GetClearedAmountForRequest from "./security/operations/clearing/GetClearedAmountForRequest"; +import GetClearingCountForByPartitionRequest from "./security/operations/clearing/GetClearingCountForByPartitionRequest"; +import GetClearingsIdForByPartitionRequest from "./security/operations/clearing/GetClearingsIdForByPartitionRequest"; +import IsClearingActivatedRequest from "./security/operations/clearing/IsClearingActivatedRequest"; +import OperatorClearingCreateHoldByPartitionRequest from "./security/operations/clearing/OperatorClearingCreateHoldByPartitionRequest"; +import OperatorClearingRedeemByPartitionRequest from "./security/operations/clearing/OperatorClearingRedeemByPartitionRequest"; +import OperatorClearingTransferByPartitionRequest from "./security/operations/clearing/OperatorClearingTransferByPartitionRequest"; +import GetClearingCreateHoldForByPartitionRequest from "./security/operations/clearing/GetClearingCreateHoldForByPartitionRequest"; +import GetClearingRedeemForByPartitionRequest from "./security/operations/clearing/GetClearingRedeemForByPartitionRequest"; +import GetClearingTransferForByPartitionRequest from "./security/operations/clearing/GetClearingTransferForByPartitionRequest"; +import UpdateExternalPausesRequest from "./security/externalPauses/UpdateExternalPausesRequest"; +import AddExternalPauseRequest from "./security/externalPauses/AddExternalPauseRequest"; +import RemoveExternalPauseRequest from "./security/externalPauses/RemoveExternalPauseRequest"; +import IsExternalPauseRequest from "./security/externalPauses/IsExternalPauseRequest"; +import GetExternalPausesCountRequest from "./security/externalPauses/GetExternalPausesCountRequest"; +import GetExternalPausesMembersRequest from "./security/externalPauses/GetExternalPausesMembersRequest"; +import IsPausedMockRequest from "./security/externalPauses/mock/IsPausedMockRequest"; +import SetPausedMockRequest from "./security/externalPauses/mock/SetPausedMockRequest"; +import UpdateExternalControlListsRequest from "./security/externalControlLists/UpdateExternalControlListsRequest"; +import AddExternalControlListRequest from "./security/externalControlLists/AddExternalControlListRequest"; +import RemoveExternalControlListRequest from "./security/externalControlLists/RemoveExternalControlListRequest"; +import GetExternalControlListsCountRequest from "./security/externalControlLists/GetExternalControlListsCountRequest"; +import IsExternalControlListRequest from "./security/externalControlLists/IsExternalControlListRequest"; +import GetExternalControlListsMembersRequest from "./security/externalControlLists/GetExternalControlListsMembersRequest"; +import AddToBlackListMockRequest from "./security/externalControlLists/mock/AddToBlackListMockRequest"; +import AddToWhiteListMockRequest from "./security/externalControlLists/mock/AddToWhiteListMockRequest"; +import RemoveFromBlackListMockRequest from "./security/externalControlLists/mock/RemoveFromBlackListMockRequest"; +import RemoveFromWhiteListMockRequest from "./security/externalControlLists/mock/RemoveFromWhiteListMockRequest"; +import IsAuthorizedBlackListMockRequest from "./security/externalControlLists/mock/IsAuthorizedBlackListMockRequest"; +import IsAuthorizedWhiteListMockRequest from "./security/externalControlLists/mock/IsAuthorizedWhiteListMockRequest"; +import UpdateExternalKycListsRequest from "./security/externalKycLists/UpdateExternalKycListsRequest"; +import AddExternalKycListRequest from "./security/externalKycLists/AddExternalKycListRequest"; +import RemoveExternalKycListRequest from "./security/externalKycLists/RemoveExternalKycListRequest"; +import GetExternalKycListsCountRequest from "./security/externalKycLists/GetExternalKycListsCountRequest"; +import GetExternalKycListsMembersRequest from "./security/externalKycLists/GetExternalKycListsMembersRequest"; +import IsExternalKycListRequest from "./security/externalKycLists/IsExternalKycListRequest"; +import IsExternallyGrantedRequest from "./security/externalKycLists/IsExternallyGrantedRequest"; +import ActivateInternalKycRequest from "./security/kyc/ActivateInternalKycRequest"; +import IsInternalKycActivatedRequest from "./security/kyc/IsInternalKycActivatedRequest"; +import GrantKycMockRequest from "./security/externalKycLists/mock/GrantKycMockRequest"; +import RevokeKycMockRequest from "./security/externalKycLists/mock/RevokeKycMockRequest"; +import GetKycStatusMockRequest from "./security/externalKycLists/mock/GetKycStatusMockRequest"; +import SetNameRequest from "./security/operations/tokeMetadata/SetNameRequest"; +import SetSymbolRequest from "./security/operations/tokeMetadata/SetSymbolRequest"; +import SetOnchainIDRequest from "./security/operations/tokeMetadata/SetOnchainIDRequest"; +import SetComplianceRequest from "./security/compliance/SetComplianceRequest"; +import ComplianceRequest from "./security/compliance/ComplianceRequest"; +import SetIdentityRegistryRequest from "./security/identityRegistry/SetIdentityRegistryRequest"; +import IdentityRegistryRequest from "./security/identityRegistry/IdentityRegistryRequest"; +import OnchainIDRequest from "./security/operations/tokeMetadata/OnchainIDRequest"; +import BurnRequest from "./security/operations/burn/BurnRequest"; +import MintRequest from "./security/operations/mint/MintRequest"; +import RecoveryAddressRequest from "./security/operations/recovery/RecoveryAddressRequest"; +import IsAddressRecoveredRequest from "./security/operations/recovery/IsAddressRecoveredRequest"; +import ForcedTransferRequest from "./security/operations/transfer/ForcedTransferRequest"; +import FreezePartialTokensRequest from "./security/operations/freeze/FreezePartialTokensRequest"; +import GetFrozenPartialTokensRequest from "./security/operations/freeze/GetFrozenPartialTokensRequest"; +import UnfreezePartialTokensRequest from "./security/operations/freeze/UnfreezePartialTokensRequest"; +import AddAgentRequest from "./security/operations/agent/AddAgentRequest"; +import RemoveAgentRequest from "./security/operations/agent/RemoveAgentRequest"; +import BatchBurnRequest from "./security/operations/batch/BatchBurnRequest"; +import BatchForcedTransferRequest from "./security/operations/batch/BatchForcedTransferRequest"; +import BatchFreezePartialTokensRequest from "./security/operations/batch/BatchFreezePartialTokensRequest"; +import BatchMintRequest from "./security/operations/batch/BatchMintRequest"; +import BatchSetAddressFrozenRequest from "./security/operations/batch/BatchSetAddressFrozenRequest"; +import BatchTransferRequest from "./security/operations/batch/BatchTransferRequest"; +import BatchUnfreezePartialTokensRequest from "./security/operations/batch/BatchUnfreezePartialTokensRequest"; +import SetAddressFrozenRequest from "./security/operations/freeze/SetAddressFrozenRequest"; +import DeactivateInternalKycRequest from "./security/kyc/DeactivateInternalKycRequest"; +import TakeSnapshotRequest from "./security/operations/snapshot/TakeSnapshotRequest"; +import RedeemAtMaturityByPartitionRequest from "./bond/RedeemAtMaturityByPartitionRequest"; +import FullRedeemAtMaturityRequest from "./bond/FullRedeemAtMaturityRequest"; +import GetTokenHoldersAtSnapshotRequest from "./security/operations/snapshot/GetTokenHoldersAtSnapshotRequest"; +import GetTotalTokenHoldersAtSnapshotRequest from "./security/operations/snapshot/GetTotalTokenHoldersAtSnapshotRequest"; +import GetCouponHoldersRequest from "./bond/GetCouponHoldersRequest"; +import GetTotalCouponHoldersRequest from "./bond/GetTotalCouponHoldersRequest"; +import GetDividendHoldersRequest from "./equity/GetDividendHoldersRequest"; +import GetTotalDividendHoldersRequest from "./equity/GetTotalDividendHoldersRequest"; +import GetTotalVotingHoldersRequest from "./equity/GetTotalVotingHoldersRequest"; +import GetVotingHoldersRequest from "./equity/GetVotingHoldersRequest"; +import GetSecurityHoldersRequest from "./security/GetSecurityHoldersRequest"; +import GetTotalSecurityHoldersRequest from "./security/GetTotalSecurityHoldersRequest"; +import CreateTrexSuiteEquityRequest from "./equity/CreateTrexSuiteEquityRequest"; +import CreateTrexSuiteBondRequest from "./bond/CreateTrexSuiteBondRequest"; +import AddProceedRecipientRequest from "./bond/AddProceedRecipientRequest"; +import RemoveProceedRecipientRequest from "./bond/RemoveProceedRecipientRequest"; +import UpdateProceedRecipientDataRequest from "./bond/UpdateProceedRecipientDataRequest"; +import GetProceedRecipientDataRequest from "./bond/GetProceedRecipientDataRequest"; +import GetProceedRecipientsCountRequest from "./bond/GetProceedRecipientsCountRequest"; +import GetProceedRecipientsRequest from "./bond/GetProceedRecipientsRequest"; +import IsProceedRecipientRequest from "./bond/IsProceedRecipientRequest"; +import GetPrincipalForRequest from "./bond/GetPrincipalForRequest"; +import ActionContentHashExistsRequest from "./security/operations/corporateActions/ActionContentHashExistsRequest"; export { CreateEquityRequest, @@ -471,7 +471,6 @@ export { ProtectedRedeemFromByPartitionRequest, GetNounceRequest, PartitionsProtectedRequest, - ProtectedTransferAndLockByPartitionRequest, CreateHoldByPartitionRequest, CreateHoldFromByPartitionRequest, ControllerCreateHoldByPartitionRequest, @@ -600,4 +599,5 @@ export { GetProceedRecipientDataRequest, GetProceedRecipientsCountRequest, GetProceedRecipientsRequest, + ActionContentHashExistsRequest, }; diff --git a/packages/ats/sdk/src/port/in/request/security/operations/transfer/ProtectedTransferAndLockByPartitionRequest.ts b/packages/ats/sdk/src/port/in/request/security/operations/corporateActions/ActionContentHashExistsRequest.ts similarity index 88% rename from packages/ats/sdk/src/port/in/request/security/operations/transfer/ProtectedTransferAndLockByPartitionRequest.ts rename to packages/ats/sdk/src/port/in/request/security/operations/corporateActions/ActionContentHashExistsRequest.ts index 717d3cf2b..64fcbd453 100644 --- a/packages/ats/sdk/src/port/in/request/security/operations/transfer/ProtectedTransferAndLockByPartitionRequest.ts +++ b/packages/ats/sdk/src/port/in/request/security/operations/corporateActions/ActionContentHashExistsRequest.ts @@ -203,65 +203,20 @@ */ -import { SecurityDate } from '@domain/context/shared/SecurityDate'; -import ValidatedRequest from '@core/validation/ValidatedArgs'; -import FormatValidation from '@port/in/request/FormatValidation'; +import ValidatedRequest from "@core/validation/ValidatedArgs"; +import FormatValidation from "@port/in/request/FormatValidation"; -export default class ProtectedTransferAndLockByPartitionRequest extends ValidatedRequest { +export default class ActionContentHashExistsRequest extends ValidatedRequest { securityId: string; - partitionId: string; - sourceId: string; - targetId: string; - amount: string; - expirationDate: string; - deadline: string; - nounce: number; - signature: string; - - constructor({ - securityId, - partitionId, - amount, - sourceId, - targetId, - expirationDate, - deadline, - nounce, - signature, - }: { - securityId: string; - partitionId: string; - amount: string; - sourceId: string; - targetId: string; - expirationDate: string; - deadline: string; - nounce: number; - signature: string; - }) { + contentHash: string; + + constructor({ securityId, contentHash }: { securityId: string; contentHash: string }) { super({ securityId: FormatValidation.checkHederaIdFormatOrEvmAddress(), - partitionId: FormatValidation.checkBytes32Format(), - targetId: FormatValidation.checkHederaIdFormatOrEvmAddress(), - sourceId: FormatValidation.checkHederaIdFormatOrEvmAddress(), - amount: FormatValidation.checkAmount(), - deadline: (val) => { - return SecurityDate.checkDateTimestamp( - parseInt(val), - Math.ceil(new Date().getTime() / 1000), - undefined, - ); - }, + contentHash: FormatValidation.checkBytes32Format(), }); this.securityId = securityId; - this.partitionId = partitionId; - this.amount = amount; - this.sourceId = sourceId; - this.targetId = targetId; - this.expirationDate = expirationDate; - this.deadline = deadline; - this.nounce = nounce; - this.signature = signature; + this.contentHash = contentHash; } } diff --git a/packages/ats/sdk/src/port/in/response/CouponViewModel.ts b/packages/ats/sdk/src/port/in/response/CouponViewModel.ts index 082119c9e..e39231ba7 100644 --- a/packages/ats/sdk/src/port/in/response/CouponViewModel.ts +++ b/packages/ats/sdk/src/port/in/response/CouponViewModel.ts @@ -211,6 +211,9 @@ export default interface CouponViewModel extends QueryResponse { executionDate: Date; rate: string; rateDecimals: number; - period: number; + startDate: Date; + endDate: Date; + fixingDate: Date; + rateStatus: number; snapshotId?: number; } diff --git a/packages/ats/sdk/src/port/in/security/corporateActions/CorporateActions.ts b/packages/ats/sdk/src/port/in/security/corporateActions/CorporateActions.ts new file mode 100644 index 000000000..9808307e6 --- /dev/null +++ b/packages/ats/sdk/src/port/in/security/corporateActions/CorporateActions.ts @@ -0,0 +1,235 @@ +/* + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "[]" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright [yyyy] [name of copyright owner] + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + +*/ + +/* eslint-disable @typescript-eslint/no-unused-vars */ +import { LogError } from "@core/decorator/LogErrorDecorator"; +import ValidatedRequest from "@core/validation/ValidatedArgs"; +import { QueryBus } from "@core/query/QueryBus"; +import Injectable from "@core/injectable/Injectable"; +import { CommandBus } from "@core/command/CommandBus"; +import { ActionContentHashExistsQuery } from "@query/security/actionContentHashExists/ActionContentHashExistsQuery"; +import { ActionContentHashExistsRequest } from "../../request"; + +interface ICorporateActionsInPort { + actionContentHashExists(request: ActionContentHashExistsRequest): Promise; +} + +class CorporateActionsInPort implements ICorporateActionsInPort { + constructor( + private readonly commandBus: CommandBus = Injectable.resolve(CommandBus), + private readonly queryBus: QueryBus = Injectable.resolve(QueryBus), + ) {} + + @LogError + async actionContentHashExists(request: ActionContentHashExistsRequest): Promise { + const { securityId, contentHash } = request; + ValidatedRequest.handleValidation("ActionContentHashExistsRequest", request); + + return (await this.queryBus.execute(new ActionContentHashExistsQuery(securityId, contentHash))).payload; + } +} + +const CorporateActions = new CorporateActionsInPort(); +export default CorporateActions; diff --git a/packages/ats/sdk/src/port/in/security/corporateActions/CorporateActions.unit.test.ts b/packages/ats/sdk/src/port/in/security/corporateActions/CorporateActions.unit.test.ts new file mode 100644 index 000000000..92896428b --- /dev/null +++ b/packages/ats/sdk/src/port/in/security/corporateActions/CorporateActions.unit.test.ts @@ -0,0 +1,303 @@ +/* + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "[]" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright [yyyy] [name of copyright owner] + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + +*/ + +import { createMock } from "@golevelup/ts-jest"; +import { ActionContentHashExistsRequest } from "../../request"; +import LogService from "@service/log/LogService"; +import { QueryBus } from "@core/query/QueryBus"; +import ValidatedRequest from "@core/validation/ValidatedArgs"; +import { ValidationError } from "@core/validation/ValidationError"; +import CorporateActions from "./CorporateActions"; + +import { ActionContentHashExistsRequestFixture } from "@test/fixtures/corporateActions/CorporateActionsFixture"; +import { ActionContentHashExistsQuery } from "@query/security/actionContentHashExists/ActionContentHashExistsQuery"; + +describe("Corporate Actions", () => { + let queryBusMock: jest.Mocked; + + let actionContentHashExistsRequest: ActionContentHashExistsRequest; + + let handleValidationSpy: jest.SpyInstance; + + beforeEach(() => { + queryBusMock = createMock(); + + handleValidationSpy = jest.spyOn(ValidatedRequest, "handleValidation"); + jest.spyOn(LogService, "logError").mockImplementation(() => {}); + (CorporateActions as any).queryBus = queryBusMock; + }); + + afterEach(() => { + jest.resetAllMocks(); + jest.restoreAllMocks(); + }); + + describe("ActionContentHashExists", () => { + actionContentHashExistsRequest = new ActionContentHashExistsRequest(ActionContentHashExistsRequestFixture.create()); + + const expectedResponse = { + payload: true, + }; + it("should check action content hash exist successfully", async () => { + queryBusMock.execute.mockResolvedValue(expectedResponse); + + const result = await CorporateActions.actionContentHashExists(actionContentHashExistsRequest); + + expect(handleValidationSpy).toHaveBeenCalledWith( + "ActionContentHashExistsRequest", + actionContentHashExistsRequest, + ); + + expect(queryBusMock.execute).toHaveBeenCalledWith( + new ActionContentHashExistsQuery( + actionContentHashExistsRequest.securityId, + actionContentHashExistsRequest.contentHash, + ), + ); + expect(result).toEqual(expectedResponse.payload); + }); + + it("should throw an error if query execution fails", async () => { + const error = new Error("Query execution failed"); + queryBusMock.execute.mockRejectedValue(error); + + await expect(CorporateActions.actionContentHashExists(actionContentHashExistsRequest)).rejects.toThrow( + "Query execution failed", + ); + + expect(handleValidationSpy).toHaveBeenCalledWith("ActionContentHashExistsRequest", actionContentHashExistsRequest); + + expect(queryBusMock.execute).toHaveBeenCalledWith( + new ActionContentHashExistsQuery( + actionContentHashExistsRequest.securityId, + actionContentHashExistsRequest.contentHash, + ), + ); + }); + + it("should throw error if securityId is invalid", async () => { + actionContentHashExistsRequest = new ActionContentHashExistsRequest({ + ...ActionContentHashExistsRequestFixture.create({ + securityId: "invalid", + }), + }); + + await expect(CorporateActions.actionContentHashExists(actionContentHashExistsRequest)).rejects.toThrow( + ValidationError, + ); + }); + it("should throw error if content hash is invalid", async () => { + actionContentHashExistsRequest = new ActionContentHashExistsRequest({ + ...ActionContentHashExistsRequestFixture.create({ + contentHash: "invalid", + }), + }); + + await expect(CorporateActions.actionContentHashExists(actionContentHashExistsRequest)).rejects.toThrow( + ValidationError, + ); + }); + }); +}); diff --git a/packages/ats/sdk/src/port/in/security/transfer/Transfer.ts b/packages/ats/sdk/src/port/in/security/transfer/Transfer.ts index b205f60d5..e5d3e1a36 100644 --- a/packages/ats/sdk/src/port/in/security/transfer/Transfer.ts +++ b/packages/ats/sdk/src/port/in/security/transfer/Transfer.ts @@ -209,7 +209,6 @@ import { BatchTransferRequest, ForcedTransferRequest, ForceTransferRequest, - ProtectedTransferAndLockByPartitionRequest, ProtectedTransferFromByPartitionRequest, TransferAndLockRequest, TransferRequest, @@ -219,7 +218,6 @@ import { TransferCommand } from '@command/security/operations/transfer/TransferC import { TransferAndLockCommand } from '@command/security/operations/transfer/TransferAndLockCommand'; import { ControllerTransferCommand } from '@command/security/operations/transfer/ControllerTransferCommand'; import { ForcedTransferCommand } from '@command/security/operations/transfer/ForcedTransferCommand'; -import { ProtectedTransferAndLockByPartitionCommand } from '@command/security/operations/transfer/ProtectedTransferAndLockByPartitionCommand'; import { BatchTransferCommand } from '@command/security/operations/batch/batchTransfer/BatchTransferCommand'; import { BatchForcedTransferCommand } from '@command/security/operations/batch/batchForcedTransfer/BatchForcedTransferCommand'; import { ProtectedTransferFromByPartitionCommand } from '@command/security/operations/transfer/ProtectedTransferFromByPartitionCommand'; @@ -244,9 +242,6 @@ export interface ISecurityInPortTransfer { batchForcedTransfer( request: BatchForcedTransferRequest, ): Promise<{ payload: boolean; transactionId: string }>; - protectedTransferAndLockByPartition( - request: ProtectedTransferAndLockByPartitionRequest, - ): Promise<{ payload: number; transactionId: string }>; protectedTransferFromByPartition( request: ProtectedTransferFromByPartitionRequest, ): Promise<{ payload: boolean; transactionId: string }>; @@ -304,41 +299,6 @@ export class SecurityInPortTransfer ); } - @LogError - async protectedTransferAndLockByPartition( - request: ProtectedTransferAndLockByPartitionRequest, - ): Promise<{ payload: number; transactionId: string }> { - const { - securityId, - partitionId, - amount, - targetId, - sourceId, - expirationDate, - deadline, - nounce, - signature, - } = request; - ValidatedRequest.handleValidation( - 'ProtectedTransferAndLockByPartitionRequest', - request, - ); - - return await this.commandBus.execute( - new ProtectedTransferAndLockByPartitionCommand( - securityId, - partitionId, - amount, - sourceId, - targetId, - expirationDate, - deadline, - nounce, - signature, - ), - ); - } - @LogError async batchTransfer( request: BatchTransferRequest, diff --git a/packages/ats/sdk/src/port/in/security/transfer/Transfer.unit.test.ts b/packages/ats/sdk/src/port/in/security/transfer/Transfer.unit.test.ts index 877c34c11..ebbaf4e27 100644 --- a/packages/ats/sdk/src/port/in/security/transfer/Transfer.unit.test.ts +++ b/packages/ats/sdk/src/port/in/security/transfer/Transfer.unit.test.ts @@ -210,7 +210,6 @@ import { BatchTransferRequest, ForcedTransferRequest, ForceTransferRequest, - ProtectedTransferAndLockByPartitionRequest, ProtectedTransferFromByPartitionRequest, TransferAndLockRequest, TransferRequest, @@ -235,11 +234,9 @@ import { TransferCommand } from '@command/security/operations/transfer/TransferC import { TransferAndLockCommand } from '@command/security/operations/transfer/TransferAndLockCommand'; import { ControllerTransferCommand } from '@command/security/operations/transfer/ControllerTransferCommand'; import { - ProtectedTransferAndLockByPartitionRequestFixture, ProtectedTransferFromByPartitionRequestFixture, } from '@test/fixtures/protectedPartitions/ProtectedPartitionsFixture'; import { ProtectedTransferFromByPartitionCommand } from '@command/security/operations/transfer/ProtectedTransferFromByPartitionCommand'; -import { ProtectedTransferAndLockByPartitionCommand } from '@command/security/operations/transfer/ProtectedTransferAndLockByPartitionCommand'; import { BatchForcedTransferResponse, BatchForcedTransferCommand, @@ -264,7 +261,6 @@ describe('Transfer', () => { let forceTransferRequest: ForceTransferRequest; let forcedTransferRequest: ForcedTransferRequest; let protectedTransferFromByPartitionRequest: ProtectedTransferFromByPartitionRequest; - let protectedTransferAndLockByPartitionRequest: ProtectedTransferAndLockByPartitionRequest; let batchTransferRequest: BatchTransferRequest; let batchForcedTransferRequest: BatchForcedTransferRequest; @@ -811,161 +807,6 @@ describe('Transfer', () => { }); }); - describe('protectedTransferAndLockByPartition', () => { - protectedTransferAndLockByPartitionRequest = - new ProtectedTransferAndLockByPartitionRequest( - ProtectedTransferAndLockByPartitionRequestFixture.create(), - ); - - const expectedResponse = { - payload: 1, - transactionId: transactionId, - }; - it('should protected transfer and lock by partition successfully', async () => { - commandBusMock.execute.mockResolvedValue(expectedResponse); - - const result = await Security.protectedTransferAndLockByPartition( - protectedTransferAndLockByPartitionRequest, - ); - - expect(handleValidationSpy).toHaveBeenCalledWith( - 'ProtectedTransferAndLockByPartitionRequest', - protectedTransferAndLockByPartitionRequest, - ); - - expect(commandBusMock.execute).toHaveBeenCalledWith( - new ProtectedTransferAndLockByPartitionCommand( - protectedTransferAndLockByPartitionRequest.securityId, - protectedTransferAndLockByPartitionRequest.partitionId, - protectedTransferAndLockByPartitionRequest.amount, - protectedTransferAndLockByPartitionRequest.sourceId, - protectedTransferAndLockByPartitionRequest.targetId, - protectedTransferAndLockByPartitionRequest.expirationDate, - protectedTransferAndLockByPartitionRequest.deadline, - protectedTransferAndLockByPartitionRequest.nounce, - protectedTransferAndLockByPartitionRequest.signature, - ), - ); - expect(result).toEqual(expectedResponse); - }); - - it('should throw an error if command execution fails', async () => { - const error = new Error('Command execution failed'); - commandBusMock.execute.mockRejectedValue(error); - - await expect( - Security.protectedTransferAndLockByPartition( - protectedTransferAndLockByPartitionRequest, - ), - ).rejects.toThrow('Command execution failed'); - - expect(handleValidationSpy).toHaveBeenCalledWith( - 'ProtectedTransferAndLockByPartitionRequest', - protectedTransferAndLockByPartitionRequest, - ); - - expect(commandBusMock.execute).toHaveBeenCalledWith( - new ProtectedTransferAndLockByPartitionCommand( - protectedTransferAndLockByPartitionRequest.securityId, - protectedTransferAndLockByPartitionRequest.partitionId, - protectedTransferAndLockByPartitionRequest.amount, - protectedTransferAndLockByPartitionRequest.sourceId, - protectedTransferAndLockByPartitionRequest.targetId, - protectedTransferAndLockByPartitionRequest.expirationDate, - protectedTransferAndLockByPartitionRequest.deadline, - protectedTransferAndLockByPartitionRequest.nounce, - protectedTransferAndLockByPartitionRequest.signature, - ), - ); - }); - - it('should throw error if securityId is invalid', async () => { - protectedTransferAndLockByPartitionRequest = - new ProtectedTransferAndLockByPartitionRequest({ - ...ProtectedTransferAndLockByPartitionRequestFixture.create({ - securityId: 'invalid', - }), - }); - - await expect( - Security.protectedTransferAndLockByPartition( - protectedTransferAndLockByPartitionRequest, - ), - ).rejects.toThrow(ValidationError); - }); - it('should throw error if partitionId is invalid', async () => { - protectedTransferAndLockByPartitionRequest = - new ProtectedTransferAndLockByPartitionRequest({ - ...ProtectedTransferAndLockByPartitionRequestFixture.create({ - partitionId: 'invalid', - }), - }); - - await expect( - Security.protectedTransferAndLockByPartition( - protectedTransferAndLockByPartitionRequest, - ), - ).rejects.toThrow(ValidationError); - }); - it('should throw error if sourceId is invalid', async () => { - protectedTransferAndLockByPartitionRequest = - new ProtectedTransferAndLockByPartitionRequest({ - ...ProtectedTransferAndLockByPartitionRequestFixture.create({ - sourceId: 'invalid', - }), - }); - - await expect( - Security.protectedTransferAndLockByPartition( - protectedTransferAndLockByPartitionRequest, - ), - ).rejects.toThrow(ValidationError); - }); - it('should throw error if targetId is invalid', async () => { - protectedTransferAndLockByPartitionRequest = - new ProtectedTransferAndLockByPartitionRequest({ - ...ProtectedTransferAndLockByPartitionRequestFixture.create({ - targetId: 'invalid', - }), - }); - - await expect( - Security.protectedTransferAndLockByPartition( - protectedTransferAndLockByPartitionRequest, - ), - ).rejects.toThrow(ValidationError); - }); - it('should throw error if amount is invalid', async () => { - protectedTransferAndLockByPartitionRequest = - new ProtectedTransferAndLockByPartitionRequest({ - ...ProtectedTransferAndLockByPartitionRequestFixture.create({ - amount: 'invalid', - }), - }); - - await expect( - Security.protectedTransferAndLockByPartition( - protectedTransferAndLockByPartitionRequest, - ), - ).rejects.toThrow(ValidationError); - }); - - it('should throw error if deadline is invalid', async () => { - protectedTransferAndLockByPartitionRequest = - new ProtectedTransferAndLockByPartitionRequest({ - ...ProtectedTransferAndLockByPartitionRequestFixture.create({ - deadline: (Math.ceil(new Date().getTime() / 1000) - 100).toString(), - }), - }); - - await expect( - Security.protectedTransferAndLockByPartition( - protectedTransferAndLockByPartitionRequest, - ), - ).rejects.toThrow(ValidationError); - }); - }); - describe('BatchTransfer', () => { batchTransferRequest = new BatchTransferRequest( BatchTransferRequestFixture.create(), diff --git a/packages/ats/sdk/src/port/out/TransactionAdapter.ts b/packages/ats/sdk/src/port/out/TransactionAdapter.ts index 62e3895dc..7b1befe56 100644 --- a/packages/ats/sdk/src/port/out/TransactionAdapter.ts +++ b/packages/ats/sdk/src/port/out/TransactionAdapter.ts @@ -215,11 +215,12 @@ import EvmAddress from '@domain/context/contract/EvmAddress'; import { BondDetails } from '@domain/context/bond/BondDetails'; import { EquityDetails } from '@domain/context/equity/EquityDetails'; import HWCSettings from '@core/settings/walletConnect/HWCSettings'; -import { ContractId } from '@hashgraph/sdk'; +import { ContractId } from '@hiero-ledger/sdk'; import DfnsSettings from '@core/settings/custodialWalletSettings/DfnsSettings'; import FireblocksSettings from '@core/settings/custodialWalletSettings/FireblocksSettings'; import AWSKMSSettings from '@core/settings/custodialWalletSettings/AWSKMSSettings'; import { ClearingOperationType } from '@domain/context/security/Clearing'; +import { RateStatus } from '@domain/context/bond/RateStatus'; export interface InitializationData { account?: Account; @@ -381,7 +382,10 @@ interface ITransactionAdapter { recordDate: BigDecimal, executionDate: BigDecimal, rate: BigDecimal, - period: BigDecimal, + startDate: BigDecimal, + endDate: BigDecimal, + fixingDate: BigDecimal, + rateStatus: RateStatus, securityId?: ContractId | string, ): Promise>; setDocument( @@ -495,18 +499,6 @@ interface ITransactionAdapter { security: EvmAddress, securityId?: ContractId | string, ): Promise; - protectedTransferAndLockByPartition( - security: EvmAddress, - partitionId: string, - amount: BigDecimal, - sourceId: EvmAddress, - targetId: EvmAddress, - expirationDate: BigDecimal, - deadline: BigDecimal, - nounce: BigDecimal, - signature: string, - securityId?: ContractId | string, - ): Promise>; redeemAtMaturityByPartition( security: EvmAddress, partitionId: string, @@ -1297,7 +1289,10 @@ export default abstract class TransactionAdapter recordDate: BigDecimal, executionDate: BigDecimal, rate: BigDecimal, - period: BigDecimal, + startDate: BigDecimal, + endDate: BigDecimal, + fixingDate: BigDecimal, + rateStatus: RateStatus, securityId?: ContractId | string, ): Promise>; abstract setVotingRights( @@ -1393,18 +1388,6 @@ export default abstract class TransactionAdapter security: EvmAddress, securityId?: ContractId | string, ): Promise>; - abstract protectedTransferAndLockByPartition( - security: EvmAddress, - partitionId: string, - amount: BigDecimal, - sourceId: EvmAddress, - targetId: EvmAddress, - expirationDate: BigDecimal, - deadline: BigDecimal, - nounce: BigDecimal, - signature: string, - securityId?: ContractId | string, - ): Promise>; abstract updateMaturityDate( security: EvmAddress, maturityDate: number, diff --git a/packages/ats/sdk/src/port/out/TransactionResponseEnums.ts b/packages/ats/sdk/src/port/out/TransactionResponseEnums.ts index 3609f2957..1e4e63791 100644 --- a/packages/ats/sdk/src/port/out/TransactionResponseEnums.ts +++ b/packages/ats/sdk/src/port/out/TransactionResponseEnums.ts @@ -206,7 +206,7 @@ /*import { TransactionReceipt, TransactionId -} from '@hashgraph/sdk';*/ +} from '@hiero-ledger/sdk';*/ export enum TransactionType { RECORD, diff --git a/packages/ats/sdk/src/port/out/hs/HederaTransactionAdapter.ts b/packages/ats/sdk/src/port/out/hs/HederaTransactionAdapter.ts index 7f3f565a3..4cc1e1846 100644 --- a/packages/ats/sdk/src/port/out/hs/HederaTransactionAdapter.ts +++ b/packages/ats/sdk/src/port/out/hs/HederaTransactionAdapter.ts @@ -214,7 +214,7 @@ import { ContractId, Signer, Transaction, -} from '@hashgraph/sdk'; +} from '@hiero-ledger/sdk'; import { AccessControlFacet__factory, Bond__factory, @@ -312,6 +312,9 @@ import { import { MissingRegulationSubType } from '@domain/context/factory/error/MissingRegulationSubType'; import { MissingRegulationType } from '@domain/context/factory/error/MissingRegulationType'; import { BaseContract, Contract, ContractTransaction } from 'ethers'; +import { CastRateStatus, RateStatus } from '@domain/context/bond/RateStatus'; +import { ProtectionData } from '@domain/context/factory/ProtectionData'; + export abstract class HederaTransactionAdapter extends TransactionAdapter { mirrorNodes: MirrorNodes; @@ -929,44 +932,6 @@ export abstract class HederaTransactionAdapter extends TransactionAdapter { [targetId.toString()], ); } - protectedTransferAndLockByPartition( - security: EvmAddress, - partitionId: string, - amount: BigDecimal, - sourceId: EvmAddress, - targetId: EvmAddress, - expirationDate: BigDecimal, - deadline: BigDecimal, - nounce: BigDecimal, - signature: string, - securityId: ContractId | string, - ): Promise> { - LogService.logTrace( - `Protected Transfering ${amount} securities from account ${sourceId.toString()} to account ${targetId.toString()} and locking them until ${expirationDate.toString()}`, - ); - - const transferAndLockData: TransferAndLock = { - from: sourceId.toString(), - to: targetId.toString(), - amount: amount.toBigNumber(), - data: '0x', - expirationTimestamp: expirationDate.toBigNumber(), - }; - - return this.executeWithArgs( - new TransferAndLockFacet__factory().attach(security.toString()), - 'protectedTransferAndLockByPartition', - securityId, - GAS.PROTECTED_TRANSFER_AND_LOCK, - [ - partitionId, - transferAndLockData, - deadline.toBigNumber(), - nounce.toBigNumber(), - signature, - ], - ); - } async controllerTransfer( security: EvmAddress, sourceId: EvmAddress, @@ -1089,7 +1054,10 @@ export abstract class HederaTransactionAdapter extends TransactionAdapter { recordDate: BigDecimal, executionDate: BigDecimal, rate: BigDecimal, - period: BigDecimal, + startDate: BigDecimal, + endDate: BigDecimal, + fixingDate: BigDecimal, + rateStatus: RateStatus, securityId: ContractId | string, ): Promise> { LogService.logTrace( @@ -1097,7 +1065,10 @@ export abstract class HederaTransactionAdapter extends TransactionAdapter { recordDate :${recordDate} , executionDate: ${executionDate}, rate : ${rate}, - period: ${period}`, + startDate: ${startDate}, + endDate: ${endDate}, + fixingDate: ${fixingDate}, + rateStatus: ${rateStatus}`, ); const coupon = { @@ -1105,7 +1076,10 @@ export abstract class HederaTransactionAdapter extends TransactionAdapter { executionDate: executionDate.toHexString(), rate: rate.toHexString(), rateDecimals: rate.decimals, - period: period.toHexString(), + startDate: startDate.toBigNumber(), + endDate: endDate.toBigNumber(), + fixingDate: fixingDate.toBigNumber(), + rateStatus: CastRateStatus.toNumber(rateStatus), }; return this.executeWithArgs( new BondUSAFacet__factory().attach(security.toString()), @@ -1501,6 +1475,12 @@ export abstract class HederaTransactionAdapter extends TransactionAdapter { `Protected Redeeming ${amount} securities from account ${sourceId.toString()}`, ); + const protectionData: ProtectionData = { + deadline: deadline.toBigNumber(), + nounce: nounce.toBigNumber(), + signature: signature + } + return this.executeWithArgs( new ERC1410ManagementFacet__factory().attach(security.toString()), 'protectedRedeemFromByPartition', @@ -1510,9 +1490,7 @@ export abstract class HederaTransactionAdapter extends TransactionAdapter { partitionId, sourceId.toString(), amount.toBigNumber(), - deadline.toBigNumber(), - nounce.toBigNumber(), - signature, + protectionData, ], ); } @@ -1531,6 +1509,13 @@ export abstract class HederaTransactionAdapter extends TransactionAdapter { LogService.logTrace( `Protected Transfering ${amount} securities from account ${sourceId.toString()} to account ${targetId.toString()}`, ); + + const protectionData: ProtectionData = { + deadline: deadline.toBigNumber(), + nounce: nounce.toBigNumber(), + signature: signature + } + return this.executeWithArgs( new ERC1410ManagementFacet__factory().attach(security.toString()), 'protectedTransferFromByPartition', @@ -1541,44 +1526,7 @@ export abstract class HederaTransactionAdapter extends TransactionAdapter { sourceId.toString(), targetId.toString(), amount.toBigNumber(), - deadline.toBigNumber(), - nounce.toBigNumber(), - signature, - ], - ); - } - - async protectedTransferAndLock( - security: EvmAddress, - amount: BigDecimal, - sourceId: EvmAddress, - targetId: EvmAddress, - expirationDate: BigDecimal, - deadline: BigDecimal, - nounce: BigDecimal, - signature: string, - securityId: ContractId | string, - ): Promise> { - LogService.logTrace( - `Protected Transfering ${amount} securities from account ${sourceId.toString()} to account ${targetId.toString()} and locking them until ${expirationDate.toString()}`, - ); - const transferAndLockData: TransferAndLock = { - from: sourceId.toString(), - to: targetId.toString(), - amount: amount.toBigNumber(), - data: '0x', - expirationTimestamp: expirationDate.toBigNumber(), - }; - return this.executeWithArgs( - new TransferAndLockFacet__factory().attach(security.toString()), - 'protectedTransferAndLock', - securityId, - GAS.PROTECTED_TRANSFER_AND_LOCK, - [ - transferAndLockData, - deadline.toBigNumber(), - nounce.toBigNumber(), - signature, + protectionData, ], ); } diff --git a/packages/ats/sdk/src/port/out/hs/HederaTransactionResponseAdapter.ts b/packages/ats/sdk/src/port/out/hs/HederaTransactionResponseAdapter.ts index 9e9306f40..1a0dbfbba 100644 --- a/packages/ats/sdk/src/port/out/hs/HederaTransactionResponseAdapter.ts +++ b/packages/ats/sdk/src/port/out/hs/HederaTransactionResponseAdapter.ts @@ -209,7 +209,7 @@ import { TransactionReceipt, TransactionRecord, TransactionResponse as HTransactionResponse, -} from '@hashgraph/sdk'; +} from '@hiero-ledger/sdk'; import TransactionResponse from '@domain/context/transaction/TransactionResponse'; import { TransactionResponseError } from '../error/TransactionResponseError'; import { TransactionType } from '../TransactionResponseEnums'; diff --git a/packages/ats/sdk/src/port/out/hs/hederawalletconnect/HederaWalletConnectTransactionAdapter.ts b/packages/ats/sdk/src/port/out/hs/hederawalletconnect/HederaWalletConnectTransactionAdapter.ts index 7907a27b7..16e904e58 100644 --- a/packages/ats/sdk/src/port/out/hs/hederawalletconnect/HederaWalletConnectTransactionAdapter.ts +++ b/packages/ats/sdk/src/port/out/hs/hederawalletconnect/HederaWalletConnectTransactionAdapter.ts @@ -211,8 +211,8 @@ import { Transaction, TransactionResponse as HTransactionResponse, TransactionResponseJSON, -} from '@hashgraph/sdk'; -import { NetworkName } from '@hashgraph/sdk/lib/client/Client'; +} from '@hiero-ledger/sdk'; +import { NetworkName } from '@hiero-ledger/sdk/lib/client/Client'; import { base64StringToSignatureMap, DAppConnector, diff --git a/packages/ats/sdk/src/port/out/hs/hts/HTSTransactionResponseAdapter.ts b/packages/ats/sdk/src/port/out/hs/hts/HTSTransactionResponseAdapter.ts index 772a353f3..ec43840cc 100644 --- a/packages/ats/sdk/src/port/out/hs/hts/HTSTransactionResponseAdapter.ts +++ b/packages/ats/sdk/src/port/out/hs/hts/HTSTransactionResponseAdapter.ts @@ -211,7 +211,7 @@ import { TransactionReceipt, TransactionRecord, TransactionId, -} from '@hashgraph/sdk'; +} from '@hiero-ledger/sdk'; import TransactionResponse from '@domain/context/transaction/TransactionResponse'; import { TransactionResponseError } from '@port/out/error/TransactionResponseError'; import { TransactionResponseAdapter } from '@port/out/TransactionResponseAdapter'; diff --git a/packages/ats/sdk/src/port/out/hs/hts/custodial/CustodialTransactionAdapter.ts b/packages/ats/sdk/src/port/out/hs/hts/custodial/CustodialTransactionAdapter.ts index 1589e6c3f..5bbf2263a 100644 --- a/packages/ats/sdk/src/port/out/hs/hts/custodial/CustodialTransactionAdapter.ts +++ b/packages/ats/sdk/src/port/out/hs/hts/custodial/CustodialTransactionAdapter.ts @@ -207,7 +207,7 @@ import { Client, Transaction, TransactionResponse as HTransactionResponse, -} from '@hashgraph/sdk'; +} from '@hiero-ledger/sdk'; import { CustodialWalletService, SignatureRequest, diff --git a/packages/ats/sdk/src/port/out/mirror/MirrorNodeAdapter.ts b/packages/ats/sdk/src/port/out/mirror/MirrorNodeAdapter.ts index 7addcec13..df92bbb73 100644 --- a/packages/ats/sdk/src/port/out/mirror/MirrorNodeAdapter.ts +++ b/packages/ats/sdk/src/port/out/mirror/MirrorNodeAdapter.ts @@ -206,7 +206,7 @@ import axios, { AxiosRequestConfig } from 'axios'; import { AxiosInstance } from 'axios'; import { singleton } from 'tsyringe'; -import { PublicKey as HPublicKey } from '@hashgraph/sdk'; +import { PublicKey as HPublicKey } from '@hiero-ledger/sdk'; import { InvalidResponse } from '@core/error/InvalidResponse'; import { REGEX_TRANSACTION } from '../error/TransactionResponseError'; import TransactionResultViewModel from '@port/in/response/TransactionResultViewModel'; diff --git a/packages/ats/sdk/src/port/out/rpc/RPCQueryAdapter.ts b/packages/ats/sdk/src/port/out/rpc/RPCQueryAdapter.ts index 554bc519c..ab2842f0b 100644 --- a/packages/ats/sdk/src/port/out/rpc/RPCQueryAdapter.ts +++ b/packages/ats/sdk/src/port/out/rpc/RPCQueryAdapter.ts @@ -260,6 +260,8 @@ import { ERC3643ReadFacet__factory, TREXFactoryAts__factory, ProceedRecipientsFacet__factory, + CorporateActionsFacet__factory, + NoncesFacet__factory, } from '@hashgraph/asset-tokenization-contracts'; import { ScheduledSnapshot } from '@domain/context/security/ScheduledSnapshot'; import { VotingRights } from '@domain/context/equity/VotingRights'; @@ -293,6 +295,7 @@ import { HoldDetails } from '@domain/context/security/Hold'; import { CouponAmountFor } from '@domain/context/bond/CouponAmountFor'; import {PrincipalFor} from '@domain/context/bond/PrincipalFor'; import { DividendAmountFor } from '@domain/context/equity/DividendAmountFor'; +import { CastRateStatus } from '@domain/context/bond/RateStatus'; import { CouponFor } from '@domain/context/bond/CouponFor'; const LOCAL_JSON_RPC_RELAY_URL = 'http://127.0.0.1:7546/api'; @@ -396,16 +399,16 @@ export class RPCQueryAdapter { ); } - async getNounceFor( + async getNonceFor( address: EvmAddress, target: EvmAddress, ): Promise { LogService.logTrace(`Getting Nounce`); return await this.connect( - ProtectedPartitionsFacet__factory, + NoncesFacet__factory, address.toString(), - ).getNounceFor(target.toString()); + ).nonces(target.toString()); } async partitionsOf( @@ -686,6 +689,7 @@ export class RPCQueryAdapter { address.toString(), ).getBondDetails(); + return new BondDetails( res.currency, new BigDecimal(res.nominalValue.toString()), @@ -918,6 +922,10 @@ export class RPCQueryAdapter { couponInfo.coupon.executionDate.toNumber(), new BigDecimal(couponInfo.coupon.rate.toString()), couponInfo.coupon.rateDecimals, + couponInfo.coupon.startDate.toNumber(), + couponInfo.coupon.endDate.toNumber(), + couponInfo.coupon.fixingDate.toNumber(), + CastRateStatus.fromNumber(couponInfo.coupon.rateStatus), couponInfo.snapshotId.toNumber(), ); } @@ -2143,6 +2151,7 @@ export class RPCQueryAdapter { ).getProceedRecipientsCount() ).toNumber(); } + async getProceedRecipients( address: EvmAddress, page: number, @@ -2156,4 +2165,17 @@ export class RPCQueryAdapter { address.toString(), ).getProceedRecipients(page, pageLength); } + + async actionContentHashExists( + address: EvmAddress, + contentHash: string, + ): Promise { + LogService.logTrace( + `Getting actionContentHashExists for ${contentHash} for the security: ${address.toString()}`, + ); + return await this.connect( + CorporateActionsFacet__factory, + address.toString(), + ).actionContentHashExists(contentHash); + } } diff --git a/packages/ats/sdk/src/port/out/rpc/RPCTransactionAdapter.ts b/packages/ats/sdk/src/port/out/rpc/RPCTransactionAdapter.ts index 7cbb7048f..66d0fbafa 100644 --- a/packages/ats/sdk/src/port/out/rpc/RPCTransactionAdapter.ts +++ b/packages/ats/sdk/src/port/out/rpc/RPCTransactionAdapter.ts @@ -221,7 +221,7 @@ import { MirrorNodes } from '@domain/context/network/MirrorNode'; import { JsonRpcRelays } from '@domain/context/network/JsonRpcRelay'; import { Factories } from '@domain/context/factory/Factories'; import BigDecimal from '@domain/context/shared/BigDecimal'; -import { ContractId } from '@hashgraph/sdk'; +import { ContractId } from '@hiero-ledger/sdk'; import { RPCTransactionResponseAdapter } from './RPCTransactionResponseAdapter'; import { _PARTITION_ID_1, @@ -309,6 +309,8 @@ import { import { SecurityDataBuilder } from '@domain/context/util/SecurityDataBuilder'; import NetworkService from '@service/network/NetworkService'; import MetamaskService from '@service/wallet/metamask/MetamaskService'; +import { CastRateStatus, RateStatus } from '@domain/context/bond/RateStatus'; +import { ProtectionData } from '@domain/context/factory/ProtectionData'; @singleton() export class RPCTransactionAdapter extends TransactionAdapter { @@ -856,7 +858,10 @@ export class RPCTransactionAdapter extends TransactionAdapter { recordDate: BigDecimal, executionDate: BigDecimal, rate: BigDecimal, - period: BigDecimal, + startDate: BigDecimal, + endDate: BigDecimal, + fixingDate: BigDecimal, + rateStatus: RateStatus, securityId?: ContractId | string, ): Promise { LogService.logTrace( @@ -864,14 +869,20 @@ export class RPCTransactionAdapter extends TransactionAdapter { recordDate :${recordDate} , executionDate: ${executionDate}, rate : ${rate}, - period: ${period}`, + rateStatus : ${rateStatus}, + startDate: ${startDate}, + endDate: ${endDate}, + fixingDate: ${fixingDate}`, ); const couponStruct: IBondRead.CouponStruct = { recordDate: recordDate.toBigNumber(), executionDate: executionDate.toBigNumber(), rate: rate.toBigNumber(), rateDecimals: rate.decimals, - period: period.toBigNumber(), + startDate: startDate.toBigNumber(), + endDate: endDate.toBigNumber(), + fixingDate: fixingDate.toBigNumber(), + rateStatus: CastRateStatus.toNumber(rateStatus), }; return this.executeTransaction( @@ -1297,6 +1308,12 @@ export class RPCTransactionAdapter extends TransactionAdapter { `Protected Redeeming ${amount} securities from account ${sourceId.toString()}`, ); + const protectionData: ProtectionData = { + deadline: deadline.toBigNumber(), + nounce: nounce.toBigNumber(), + signature: signature + } + return this.executeTransaction( ERC1410ManagementFacet__factory.connect( security.toString(), @@ -1307,9 +1324,7 @@ export class RPCTransactionAdapter extends TransactionAdapter { partitionId, sourceId.toString(), amount.toBigNumber(), - deadline.toBigNumber(), - nounce.toBigNumber(), - signature, + protectionData, ], GAS.PROTECTED_REDEEM, ); @@ -1329,6 +1344,12 @@ export class RPCTransactionAdapter extends TransactionAdapter { `Protected Transfering ${amount} securities from account ${sourceId.toString()} to account ${targetId.toString()}`, ); + const protectionData: ProtectionData = { + deadline: deadline.toBigNumber(), + nounce: nounce.toBigNumber(), + signature: signature + } + return this.executeTransaction( ERC1410ManagementFacet__factory.connect( security.toString(), @@ -1340,54 +1361,12 @@ export class RPCTransactionAdapter extends TransactionAdapter { sourceId.toString(), targetId.toString(), amount.toBigNumber(), - deadline.toBigNumber(), - nounce.toBigNumber(), - signature, + protectionData, ], GAS.PROTECTED_TRANSFER, ); } - async protectedTransferAndLockByPartition( - security: EvmAddress, - partitionId: string, - amount: BigDecimal, - sourceId: EvmAddress, - targetId: EvmAddress, - expirationDate: BigDecimal, - deadline: BigDecimal, - nounce: BigDecimal, - signature: string, - ): Promise { - LogService.logTrace( - `Protected Transfering ${amount} securities from account ${sourceId.toString()} to account ${targetId.toString()} and locking them until ${expirationDate.toString()}`, - ); - - const transferAndLockData: TransferAndLock = { - from: sourceId.toString(), - to: targetId.toString(), - amount: amount.toBigNumber(), - data: '0x', - expirationTimestamp: expirationDate.toBigNumber(), - }; - - return this.executeTransaction( - TransferAndLockFacet__factory.connect( - security.toString(), - this.getSignerOrProvider(), - ), - 'protectedTransferAndLockByPartition', - [ - partitionId, - transferAndLockData, - deadline.toBigNumber(), - nounce.toBigNumber(), - signature, - ], - GAS.PROTECTED_TRANSFER_AND_LOCK, - ); - } - async createHoldByPartition( security: EvmAddress, partitionId: string, diff --git a/packages/mass-payout/contracts/README.md b/packages/mass-payout/contracts/README.md index e765a1db1..597242f02 100644 --- a/packages/mass-payout/contracts/README.md +++ b/packages/mass-payout/contracts/README.md @@ -86,6 +86,16 @@ These contracts are designed to work with: - Mass Payout SDK for programmatic interaction - Mass Payout frontend and backend applications +--- + +## πŸ“š Documentation + +For more information about the project, see: + +- [Guides](https://github.com/hashgraph/asset-tokenization-studio/tree/main/docs/guides) +- [API Documentation](https://github.com/hashgraph/asset-tokenization-studio/tree/main/docs/api) +- [References](https://github.com/hashgraph/asset-tokenization-studio/tree/main/docs/references) + ## License Apache License 2.0 diff --git a/packages/mass-payout/contracts/contracts/test/testAsset/AssetMock.sol b/packages/mass-payout/contracts/contracts/test/testAsset/AssetMock.sol index 47a646831..fed549a90 100644 --- a/packages/mass-payout/contracts/contracts/test/testAsset/AssetMock.sol +++ b/packages/mass-payout/contracts/contracts/test/testAsset/AssetMock.sol @@ -288,7 +288,7 @@ contract AssetMock is IAssetMock { return; } - function setCoupon(Coupon calldata) external pure returns (bool, uint256) { + function setCoupon(Coupon calldata) external pure returns (uint256) { revert NotImplemented(); } @@ -307,21 +307,25 @@ contract AssetMock is IAssetMock { function getCoupon(uint256) external pure returns (RegisteredCoupon memory registeredCoupon_) { registeredCoupon_.coupon.recordDate = 1753874807; registeredCoupon_.coupon.executionDate = 1753874807; + registeredCoupon_.coupon.startDate = 1; + registeredCoupon_.coupon.endDate = 2592001; + registeredCoupon_.coupon.fixingDate = 1753874808; registeredCoupon_.coupon.rate = 1; - registeredCoupon_.coupon.period = 2592000; registeredCoupon_.coupon.rateDecimals = 1; registeredCoupon_.snapshotId = 1; } function getCouponFor(uint256, address) external pure returns (CouponFor memory couponFor_) { couponFor_.tokenBalance = 3; - couponFor_.rate = 2; - couponFor_.recordDate = 1753874807; - couponFor_.executionDate = 1753874807; - couponFor_.period = 2592000; - couponFor_.rateDecimals = 1; couponFor_.decimals = 2; couponFor_.recordDateReached = true; + couponFor_.coupon.rate = 2; + couponFor_.coupon.recordDate = 1753874807; + couponFor_.coupon.executionDate = 1753874807; + couponFor_.coupon.startDate = 1; + couponFor_.coupon.endDate = 2592001; + couponFor_.coupon.fixingDate = 1753874808; + couponFor_.coupon.rateDecimals = 1; } function getCouponCount() external pure returns (uint256) { @@ -332,15 +336,15 @@ contract AssetMock is IAssetMock { revert NotImplemented(); } - function setDividends(Dividend calldata) external pure returns (bool, uint256) { + function setDividends(Dividend calldata) external pure returns (uint256) { revert NotImplemented(); } - function setVoting(Voting calldata) external pure returns (bool, uint256) { + function setVoting(Voting calldata) external pure returns (uint256) { revert NotImplemented(); } - function setScheduledBalanceAdjustment(ScheduledBalanceAdjustment calldata) external pure returns (bool, uint256) { + function setScheduledBalanceAdjustment(ScheduledBalanceAdjustment calldata) external pure returns (uint256) { revert NotImplemented(); } @@ -517,4 +521,16 @@ contract AssetMock is IAssetMock { function totalSupplyByPartition(bytes32) external pure returns (uint256) { revert NotImplemented(); } + + function getCouponFromOrderedListAt(uint256) external pure returns (uint256) { + revert NotImplemented(); + } + + function getCouponsOrderedList(uint256, uint256) external pure returns (uint256[] memory) { + revert NotImplemented(); + } + + function getCouponsOrderedListTotal() external pure returns (uint256) { + revert NotImplemented(); + } } diff --git a/packages/mass-payout/contracts/hardhat.config.ts b/packages/mass-payout/contracts/hardhat.config.ts index 2a7f1d6db..4028c13cb 100644 --- a/packages/mass-payout/contracts/hardhat.config.ts +++ b/packages/mass-payout/contracts/hardhat.config.ts @@ -214,6 +214,7 @@ import "solidity-coverage"; import Configuration from "@configuration"; import "hardhat/types/config"; +import "@primitivefi/hardhat-dodoc"; declare module "hardhat/types/config" { interface HardhatNetworkUserConfig { @@ -292,6 +293,13 @@ const config: HardhatUserConfig = { mocha: { timeout: 3_000_000, }, + dodoc: { + runOnCompile: false, + outputDir: "./docs/api", + freshOutput: true, + include: ["contracts"], + exclude: ["contracts/test", "contracts/mocks", "node_modules"], + }, }; export default config; diff --git a/packages/mass-payout/contracts/package.json b/packages/mass-payout/contracts/package.json index 08dc4841d..b42f5e8fd 100644 --- a/packages/mass-payout/contracts/package.json +++ b/packages/mass-payout/contracts/package.json @@ -1,5 +1,5 @@ { - "name": "@mass-payout/contracts", + "name": "@hashgraph/mass-payout-contracts", "main": "build/typechain-types/index.js", "types": "build/typechain-types/index.d.ts", "version": "1.0.0", @@ -25,13 +25,14 @@ "slither:analysis": "docker run -t --rm -v /var/run/docker.sock:/var/run/docker.sock -v \"$(pwd)\":\"/home/ethsec/contracts\" -w \"/home/ethsec/contracts\" -u 0:0 trailofbits/eth-security-toolbox /bin/sh -c \"solc-select install 0.8.18 && solc-select use 0.8.18 && slither . --solc-remaps @=node_modules/@\"", "slither:storageLayout": "docker run -t --rm -v /var/run/docker.sock:/var/run/docker.sock -v \"$(pwd)\":\"/home/ethsec/contracts\" -w \"/home/ethsec/contracts\" -u 0:0 trailofbits/eth-security-toolbox /bin/sh -c \"solc-select install 0.8.18 && solc-select use 0.8.18 && slither . --print variable-order --solc-remaps @=node_modules/@\"", "slither:inheritance": "docker run -t --rm -v /var/run/docker.sock:/var/run/docker.sock -v \"$(pwd)\":\"/home/ethsec/contracts\" -w \"/home/ethsec/contracts\" -u 0:0 trailofbits/eth-security-toolbox /bin/sh -c \"solc-select install 0.8.18 && solc-select use 0.8.18 && slither . --print inheritance --solc-remaps @=node_modules/@\"", - "slither:summary": "docker run -t --rm -v /var/run/docker.sock:/var/run/docker.sock -v \"$(pwd)\":\"/home/ethsec/contracts\" -w \"/home/ethsec/contracts\" -u 0:0 trailofbits/eth-security-toolbox /bin/sh -c \"solc-select install 0.8.18 && solc-select use 0.8.18 && slither . --print human-summary --solc-remaps @=node_modules/@\"" + "slither:summary": "docker run -t --rm -v /var/run/docker.sock:/var/run/docker.sock -v \"$(pwd)\":\"/home/ethsec/contracts\" -w \"/home/ethsec/contracts\" -u 0:0 trailofbits/eth-security-toolbox /bin/sh -c \"solc-select install 0.8.18 && solc-select use 0.8.18 && slither . --print human-summary --solc-remaps @=node_modules/@\"", + "doc": "npx hardhat dodoc" }, "dependencies": { "bn.js": "5.2.1" }, "devDependencies": { - "@hashgraph/sdk": "2.64.5", + "@hiero-ledger/sdk": "2.79.0", "@hashgraph/smart-contracts": "github:hashgraph/hedera-smart-contracts#v0.10.1", "@nomicfoundation/hardhat-chai-matchers": "1.0.6", "@nomicfoundation/hardhat-toolbox": "^2.0.2", @@ -40,6 +41,7 @@ "@openzeppelin/contracts": "^5.3.0", "@openzeppelin/contracts-upgradeable": "^4.9.6", "@openzeppelin/hardhat-upgrades": "^1.28.0", + "@primitivefi/hardhat-dodoc": "^0.2.3", "@terminal3/ecdsa_vc": "0.1.21", "@typechain/ethers-v5": "^10.1.0", "@typechain/hardhat": "^6.1.2", diff --git a/packages/mass-payout/sdk/README.md b/packages/mass-payout/sdk/README.md index bdc95c813..12ab3a33e 100644 --- a/packages/mass-payout/sdk/README.md +++ b/packages/mass-payout/sdk/README.md @@ -17,32 +17,32 @@ The Mass Payout SDK provides a simple and efficient way to execute bulk payment ## Installation ```bash -npm install @mass-payout/sdk +npm install @hashgraph/mass-payout-sdk ``` ## Quick Start ```typescript -import { MassPayoutSDK } from '@mass-payout/sdk'; +import { MassPayoutSDK } from "@hashgraph/mass-payout-sdk"; // Initialize the SDK const sdk = new MassPayoutSDK({ - networkType: 'testnet', // or 'mainnet' - operatorId: '0.0.123456', - operatorKey: 'your-private-key', + networkType: "testnet", // or 'mainnet' + operatorId: "0.0.123456", + operatorKey: "your-private-key", }); // Execute a mass payout const payoutResult = await sdk.executeMassPayout({ - tokenId: '0.0.789012', // HTS token ID or null for HBAR + tokenId: "0.0.789012", // HTS token ID or null for HBAR recipients: [ - { accountId: '0.0.111111', amount: '100' }, - { accountId: '0.0.222222', amount: '150' }, - { accountId: '0.0.333333', amount: '200' }, + { accountId: "0.0.111111", amount: "100" }, + { accountId: "0.0.222222", amount: "150" }, + { accountId: "0.0.333333", amount: "200" }, ], }); -console.log('Payout completed:', payoutResult); +console.log("Payout completed:", payoutResult); ``` ## Core Concepts @@ -77,11 +77,21 @@ The SDK follows Domain-Driven Design principles with a clean hexagonal architect ## Dependencies -- @hashgraph/sdk: Hedera SDK for blockchain interactions +- @hiero-ledger/sdk: Hedera SDK for blockchain interactions - @nestjs/common & @nestjs/core: Framework components - class-validator & class-transformer: Data validation and transformation - rxjs: Reactive programming support +--- + +## πŸ“š Documentation + +For more information about the project, see: + +- [Guides](https://github.com/hashgraph/asset-tokenization-studio/tree/main/docs/guides) +- [API Documentation](https://github.com/hashgraph/asset-tokenization-studio/tree/main/docs/api) +- [References](https://github.com/hashgraph/asset-tokenization-studio/tree/main/docs/references) + ## License Apache License 2.0 diff --git a/packages/mass-payout/sdk/package.json b/packages/mass-payout/sdk/package.json index f62138020..7f7b5bbcd 100644 --- a/packages/mass-payout/sdk/package.json +++ b/packages/mass-payout/sdk/package.json @@ -1,5 +1,5 @@ { - "name": "@mass-payout/sdk", + "name": "@hashgraph/mass-payout-sdk", "main": "dist/src/index.js", "types": "dist/src/index.d.ts", "version": "1.0.0", @@ -23,7 +23,7 @@ "prepublishOnly": "npm run build" }, "dependencies": { - "@hashgraph/sdk": "2.66.0", + "@hiero-ledger/sdk": "2.79.0", "@nestjs/common": "10.3.3", "@nestjs/core": "10.3.3", "bn.js": "5.2.1", diff --git a/packages/mass-payout/sdk/src/app/usecase/command/lifeCycleCashFlow/operations/deploy/DeployCommand.ts b/packages/mass-payout/sdk/src/app/usecase/command/lifeCycleCashFlow/operations/deploy/DeployCommand.ts index c68d864be..6355a31a0 100644 --- a/packages/mass-payout/sdk/src/app/usecase/command/lifeCycleCashFlow/operations/deploy/DeployCommand.ts +++ b/packages/mass-payout/sdk/src/app/usecase/command/lifeCycleCashFlow/operations/deploy/DeployCommand.ts @@ -203,8 +203,13 @@ */ -import { Command } from '@core/command/Command'; -import { CommandResponse } from '@core/command/CommandResponse'; +import { Command } from "@core/command/Command"; +import { CommandResponse } from "@core/command/CommandResponse"; + +export interface RbacCommand { + role: string; // bytes32, can be a hex string or string converted to bytes32 + members: string[]; // array of addresses +} export class DeployCommandResponse implements CommandResponse { constructor(public readonly payload: string) {} @@ -214,6 +219,7 @@ export class DeployCommand extends Command { constructor( public readonly asset: string, public readonly paymentToken: string, + public readonly rbac: RbacCommand[], ) { super(); } diff --git a/packages/mass-payout/sdk/src/app/usecase/command/lifeCycleCashFlow/operations/deploy/DeployCommandHandler.ts b/packages/mass-payout/sdk/src/app/usecase/command/lifeCycleCashFlow/operations/deploy/DeployCommandHandler.ts index 9d413391c..c0dacd54a 100644 --- a/packages/mass-payout/sdk/src/app/usecase/command/lifeCycleCashFlow/operations/deploy/DeployCommandHandler.ts +++ b/packages/mass-payout/sdk/src/app/usecase/command/lifeCycleCashFlow/operations/deploy/DeployCommandHandler.ts @@ -203,18 +203,22 @@ */ -import { Logger } from '@nestjs/common'; -import { ICommandHandler } from '@core/command/CommandHandler'; -import { CommandHandler } from '@core/decorator/CommandHandlerDecorator'; -import EvmAddress from '@domain/contract/EvmAddress'; -import ContractService from '@app/services/contract/ContractService'; -import TransactionService from '@app/services/transaction/TransactionService'; +import { Logger } from "@nestjs/common"; +import { ICommandHandler } from "@core/command/CommandHandler"; +import { CommandHandler } from "@core/decorator/CommandHandlerDecorator"; +import EvmAddress from "@domain/contract/EvmAddress"; +import { HEDERA_FORMAT_ID_REGEX } from "@domain/shared/HederaId"; +import ContractService from "@app/services/contract/ContractService"; +import TransactionService from "@app/services/transaction/TransactionService"; import { + RbacCommand, DeployCommand, DeployCommandResponse, -} from '@app/usecase/command/lifeCycleCashFlow/operations/deploy/DeployCommand'; -import { TokenId } from '@hashgraph/sdk'; -import { DeployCommandError } from './error/DeployCommandError'; +} from "@app/usecase/command/lifeCycleCashFlow/operations/deploy/DeployCommand"; +import { TokenId } from "@hiero-ledger/sdk"; +import { DeployCommandError } from "./error/DeployCommandError"; +import { MirrorNodeAdapter } from "@port/out/mirror/MirrorNodeAdapter"; +import RbacPort from "@port/out/hs/types/RbacPort"; @CommandHandler(DeployCommand) export class DeployCommandHandler implements ICommandHandler { @@ -223,28 +227,49 @@ export class DeployCommandHandler implements ICommandHandler { constructor( private readonly transactionService: TransactionService, private readonly contractService: ContractService, + private readonly mirrorNodeAdapter: MirrorNodeAdapter, ) {} async execute(command: DeployCommand): Promise { try { - const { asset, paymentToken } = command; + const { asset, paymentToken, rbac } = command; const handler = this.transactionService.getHandler(); - const assetAddress: EvmAddress = - await this.contractService.getContractEvmAddress(asset); - const paymentTokenAddress = - TokenId.fromString(paymentToken).toSolidityAddress(); + const assetAddress: EvmAddress = await this.contractService.getContractEvmAddress(asset); + const paymentTokenAddress = TokenId.fromString(paymentToken).toSolidityAddress(); const lifeCycleCashFlowAddress = await handler.deploy( assetAddress, new EvmAddress(paymentTokenAddress), + await this.mapRbacCommandToPort(rbac), ); - return Promise.resolve( - new DeployCommandResponse(lifeCycleCashFlowAddress), - ); + return Promise.resolve(new DeployCommandResponse(lifeCycleCashFlowAddress)); } catch (error) { throw new DeployCommandError(error as Error); } } + + async mapRbacCommandToPort(rbac: RbacCommand[]) { + return rbac != undefined && rbac.length > 0 + ? Promise.all( + rbac.map(async (rbacElement) => ({ + role: rbacElement.role, + members: await this.normalizeMembersToEvmAddresses(rbacElement.members), + })), + ) + : []; + } + + async normalizeMembersToEvmAddresses(members) { + return Promise.all( + members.map(async (member) => { + if (HEDERA_FORMAT_ID_REGEX.exec(member)) { + const accountInfo = await this.mirrorNodeAdapter.getAccountInfo(member); + return accountInfo.evmAddress; + } + return member; + }), + ); + } } diff --git a/packages/mass-payout/sdk/src/core/Constants.ts b/packages/mass-payout/sdk/src/core/Constants.ts index 89134161c..230114121 100644 --- a/packages/mass-payout/sdk/src/core/Constants.ts +++ b/packages/mass-payout/sdk/src/core/Constants.ts @@ -202,12 +202,12 @@ limitations under the License. */ -export const COMMAND_METADATA = '__command__'; -export const COMMAND_HANDLER_METADATA = '__commandHandler__'; -export const QUERY_METADATA = '__query__'; -export const QUERY_HANDLER_METADATA = '__queryHandler__'; +export const COMMAND_METADATA = "__command__"; +export const COMMAND_HANDLER_METADATA = "__commandHandler__"; +export const QUERY_METADATA = "__query__"; +export const QUERY_HANDLER_METADATA = "__queryHandler__"; export const LIFE_CYCLE_CASH_FLOW_DEPLOYMENT_GAS = 3_800_000; -export const PROXY_ADMIN_DEPLOYMENT_GAS = 450_000; +export const PROXY_ADMIN_DEPLOYMENT_GAS = 850_000; export const PROXY_DEPLOYMENT_GAS = 2_500_000; export const PAUSE_GAS = 15000000; export const UNPAUSE_GAS = 650000; @@ -220,13 +220,13 @@ export const EXECUTE_AMOUNT_SNAPSHOT_BY_ADDRESSES_GAS = 650000; export const EXECUTE_PERCENTAGE_SNAPSHOT_GAS = 650000; export const EXECUTE_PERCENTAGE_SNAPSHOT_BY_ADDRESSES_GAS = 650000; -export const EVM_ZERO_ADDRESS = '0x0000000000000000000000000000000000000000'; +export const EVM_ZERO_ADDRESS = "0x0000000000000000000000000000000000000000"; // * Generic export const BYTES_32_LENGTH = 32 * 2; export const ADDRESS_LENGTH = 40; export const TOKENS = { - COMMAND_HANDLER: Symbol('CommandHandler'), - QUERY_HANDLER: Symbol('QueryHandler'), + COMMAND_HANDLER: Symbol("CommandHandler"), + QUERY_HANDLER: Symbol("QueryHandler"), }; diff --git a/packages/mass-payout/sdk/src/core/error/BaseError.ts b/packages/mass-payout/sdk/src/core/error/BaseError.ts index d56ac55fe..496616d84 100644 --- a/packages/mass-payout/sdk/src/core/error/BaseError.ts +++ b/packages/mass-payout/sdk/src/core/error/BaseError.ts @@ -205,50 +205,51 @@ export enum ErrorCode { // Error codes for Input Data (Prefix: 1XXXX) - AccountIdInValid = '10001', - ContractKeyInvalid = '10006', - EmptyValue = '10017', - InvalidBase64 = '10011', - InvalidBytes = '10007', - InvalidBytes3 = '10003', - InvalidBytes32 = '10002', - InvalidContractId = '10014', - InvalidEvmAddress = '10023', - InvalidIdFormatHedera = '10009', - InvalidIdFormatHederaIdOrEvmAddress = '10010', - InvalidLength = '10016', - InvalidRange = '10018', - InvalidType = '10015', - InvalidValue = '10021', - ValidationChecks = '10022', + AccountIdInValid = "10001", + ContractKeyInvalid = "10006", + EmptyValue = "10017", + InvalidBase64 = "10011", + InvalidBytes = "10007", + InvalidBytes3 = "10003", + InvalidBytes32 = "10002", + InvalidContractId = "10014", + InvalidEvmAddress = "10023", + InvalidIdFormatHedera = "10009", + InvalidIdFormatHederaIdOrEvmAddress = "10010", + InvalidLength = "10016", + InvalidRange = "10018", + InvalidType = "10015", + InvalidValue = "10021", + InvalidArray = "10019", + ValidationChecks = "10022", // Error codes for Logic Errors (Prefix: 2XXXX) - OperationNotAllowed = '20004', + OperationNotAllowed = "20004", // Error codes for System Errors (Prefix: 3XXXX) - InvalidResponse = '30005', - RuntimeError = '30004', - TransactionNotFound = '30007', - TransactionResultNotFound = '30008', - ErrorRetrievingEvmAddress = '30010', - UnsupportedNetwork = '30012', - EmptyResponse = '30022', - WalletNotSupported = '30023', - UncaughtCommandError = '30024', - UncaughtQueryError = '30025', - NetworkNotSet = '30026', - ExecuteConnectionError = '30027', + InvalidResponse = "30005", + RuntimeError = "30004", + TransactionNotFound = "30007", + TransactionResultNotFound = "30008", + ErrorRetrievingEvmAddress = "30010", + UnsupportedNetwork = "30012", + EmptyResponse = "30022", + WalletNotSupported = "30023", + UncaughtCommandError = "30024", + UncaughtQueryError = "30025", + NetworkNotSet = "30026", + ExecuteConnectionError = "30027", // Error codes for Provider Errors (Prefix: 4XXXX) - SigningError = '40004', - TransactionError = '40005', + SigningError = "40004", + TransactionError = "40005", } export enum ErrorCategory { - InputData = '1', - Logic = '2', - System = '3', - Provider = '4', + InputData = "1", + Logic = "2", + System = "3", + Provider = "4", } export function getErrorCategory(errorCode: ErrorCode): ErrorCategory { diff --git a/packages/mass-payout/sdk/src/domain/account/PrivateKey.ts b/packages/mass-payout/sdk/src/domain/account/PrivateKey.ts index 50f357de9..8b59a9b7f 100644 --- a/packages/mass-payout/sdk/src/domain/account/PrivateKey.ts +++ b/packages/mass-payout/sdk/src/domain/account/PrivateKey.ts @@ -203,9 +203,9 @@ */ -import KeyProps, { KeyType } from './KeyProps'; -import { PrivateKey as HPrivateKey } from '@hashgraph/sdk'; -import PublicKey from './PublicKey'; +import KeyProps, { KeyType } from "./KeyProps"; +import { PrivateKey as HPrivateKey } from "@hiero-ledger/sdk"; +import PublicKey from "./PublicKey"; export default class PrivateKey implements KeyProps { public readonly key: string; diff --git a/packages/mass-payout/sdk/src/domain/account/PublicKey.ts b/packages/mass-payout/sdk/src/domain/account/PublicKey.ts index c00accf75..51873029d 100644 --- a/packages/mass-payout/sdk/src/domain/account/PublicKey.ts +++ b/packages/mass-payout/sdk/src/domain/account/PublicKey.ts @@ -203,13 +203,13 @@ */ -import KeyProps, { KeyType } from './KeyProps'; -import { PublicKey as HPublicKey } from '@hashgraph/sdk'; -import BaseError from '@core/error/BaseError'; +import KeyProps, { KeyType } from "./KeyProps"; +import { PublicKey as HPublicKey } from "@hiero-ledger/sdk"; +import BaseError from "@core/error/BaseError"; export default class PublicKey implements KeyProps { public static readonly NULL: PublicKey = new PublicKey({ - key: 'null', + key: "null", type: KeyType.NULL, }); @@ -217,7 +217,7 @@ export default class PublicKey implements KeyProps { public readonly type: string; constructor(params: Partial | string) { let key: string, type: string; - if (typeof params === 'string') { + if (typeof params === "string") { key = this.formatKey(params); type = this.getTypeFromLength(key); } else { @@ -241,7 +241,7 @@ export default class PublicKey implements KeyProps { } private formatKey(key: string): string { - if (key.length > 0 && key.startsWith('0x')) { + if (key.length > 0 && key.startsWith("0x")) { return key.substring(2); } return key; diff --git a/packages/mass-payout/sdk/src/domain/contract/ContractId.ts b/packages/mass-payout/sdk/src/domain/contract/ContractId.ts index 21bb70adb..1c8cfcb60 100644 --- a/packages/mass-payout/sdk/src/domain/contract/ContractId.ts +++ b/packages/mass-payout/sdk/src/domain/contract/ContractId.ts @@ -203,44 +203,36 @@ */ -import { - DelegateContractId, - ContractId as HContractId, - Long, -} from '@hashgraph/sdk'; -import { proto } from '@hashgraph/proto'; -import InvalidKeyForContract from './error/InvalidKeyForContract'; -import BaseError from '@core/error/BaseError'; -import CheckStrings from '@core/checks/strings/CheckStrings'; -import { InvalidContractId } from './error/InvalidContractId'; -import { HederaId } from '../shared/HederaId'; +import { DelegateContractId, ContractId as HContractId, Long } from "@hiero-ledger/sdk"; +import { proto } from "@hashgraph/proto"; +import InvalidKeyForContract from "./error/InvalidKeyForContract"; +import BaseError from "@core/error/BaseError"; +import CheckStrings from "@core/checks/strings/CheckStrings"; +import { InvalidContractId } from "./error/InvalidContractId"; +import { HederaId } from "../shared/HederaId"; export default class ContractId extends HederaId { public readonly value: string; constructor(value: string) { - if (value.length == 42 && value.startsWith('0x')) { + if (value.length == 42 && value.startsWith("0x")) { throw new InvalidContractId(value); } super(value); } - public static fromProtoBufKey( - key: string, - options: { strict: boolean } = { strict: false }, - ): ContractId { - const normalizedInput = key.replace(/\s/g, ''); - const normalizedHexInput = normalizedInput.replace(/0x/g, '').toLowerCase(); - const keyProto = Buffer.from(normalizedHexInput, 'hex'); + public static fromProtoBufKey(key: string, options: { strict: boolean } = { strict: false }): ContractId { + const normalizedInput = key.replace(/\s/g, ""); + const normalizedHexInput = normalizedInput.replace(/0x/g, "").toLowerCase(); + const keyProto = Buffer.from(normalizedHexInput, "hex"); const out = proto.Key.decode(keyProto); - let id = - out?.contractID?.contractNum || out?.delegatableContractId?.contractNum; + let id = out?.contractID?.contractNum || out?.delegatableContractId?.contractNum; if (options.strict && !id) { throw new InvalidKeyForContract(out); } else if (!id) { id = Long.ZERO; } - return new ContractId('0.0.' + id.toString()); + return new ContractId("0.0." + id.toString()); } public static fromHederaContractId(con: HContractId | DelegateContractId) { @@ -248,9 +240,7 @@ export default class ContractId extends HederaId { } public static fromHederaEthereumAddress(evmAddress: string) { - return new ContractId( - HContractId.fromSolidityAddress(evmAddress).toString(), - ); + return new ContractId(HContractId.fromSolidityAddress(evmAddress).toString()); } public static validate(id: string): BaseError[] { @@ -259,8 +249,7 @@ export default class ContractId extends HederaId { err.push(new InvalidContractId(id)); } else { try { - if (!(id.length == 42 && id.startsWith('0x'))) - HContractId.fromString(id); + if (!(id.length == 42 && id.startsWith("0x"))) HContractId.fromString(id); // eslint-disable-next-line unused-imports/no-unused-vars } catch (error) { err.push(new InvalidContractId(id)); diff --git a/packages/mass-payout/sdk/src/domain/shared/BigDecimal.ts b/packages/mass-payout/sdk/src/domain/shared/BigDecimal.ts index 398c2ac27..0d1298659 100644 --- a/packages/mass-payout/sdk/src/domain/shared/BigDecimal.ts +++ b/packages/mass-payout/sdk/src/domain/shared/BigDecimal.ts @@ -203,18 +203,13 @@ */ -import { - parseFixed, - FixedNumber, - FixedFormat, - BigNumber, -} from '@ethersproject/bignumber'; -import CheckNums from '@core/checks/numbers/CheckNums'; -import { Long } from '@hashgraph/sdk'; +import { parseFixed, FixedNumber, FixedFormat, BigNumber } from "@ethersproject/bignumber"; +import CheckNums from "@core/checks/numbers/CheckNums"; +import { Long } from "@hiero-ledger/sdk"; export type BigDecimalFormat = string | number | FixedFormat | undefined; -const SEPARATOR = '.'; +const SEPARATOR = "."; export default class BigDecimal implements FixedNumber { readonly _hex: string; readonly _value: string; @@ -246,15 +241,11 @@ export default class BigDecimal implements FixedNumber { #fn: FixedNumber; - public static ZERO: BigDecimal = this.fromString('0', 0); - public static MINUSONE: BigDecimal = this.fromString('-1', 0); + public static ZERO: BigDecimal = this.fromString("0", 0); + public static MINUSONE: BigDecimal = this.fromString("-1", 0); - constructor( - value: string | BigNumber, - format?: BigDecimalFormat, - decimals?: number, - ) { - if (typeof value === 'string') { + constructor(value: string | BigNumber, format?: BigDecimalFormat, decimals?: number) { + if (typeof value === "string") { this.#fn = FixedNumber.fromString(value, format); } else { this.#fn = FixedNumber.fromValue(value, decimals, format); @@ -361,7 +352,7 @@ export default class BigDecimal implements FixedNumber { public toString(): string { let number = this.#fn.toString(); - if (number.endsWith('.0')) { + if (number.endsWith(".0")) { number = number.substring(0, number.length - 2); } return number; @@ -374,21 +365,18 @@ export default class BigDecimal implements FixedNumber { let [int, float] = this.value.split(SEPARATOR); if (float && float.length && float.length > value) { float = float.substring(0, float.length - value); - return BigDecimal.fromString( - `${int}${SEPARATOR}${float}`, - Math.max(float?.length ?? 0, value), - ); + return BigDecimal.fromString(`${int}${SEPARATOR}${float}`, Math.max(float?.length ?? 0, value)); } else { return BigDecimal.fromString(int, Math.max(0, value)); } } private splitNumber(): string[] { - const splitNumber = this.#fn.toString().split('.'); + const splitNumber = this.#fn.toString().split("."); if (splitNumber.length > 1) { - splitNumber[1] = splitNumber[1].padEnd(this.format.decimals, '0'); + splitNumber[1] = splitNumber[1].padEnd(this.format.decimals, "0"); } else { - splitNumber[1] = ''; + splitNumber[1] = ""; } return splitNumber; } @@ -398,7 +386,7 @@ export default class BigDecimal implements FixedNumber { const [, dec] = val.split(SEPARATOR); if (!dec) return 0; if (!CheckNums.isNumber(dec)) return 0; - return (dec as string).replace(/\.0+$/, '').length; + return (dec as string).replace(/\.0+$/, "").length; } public toLong(): Long { @@ -406,10 +394,7 @@ export default class BigDecimal implements FixedNumber { return Long.fromString(number[0] + number[1]); } - static fromString( - value: string, - format?: string | number | FixedFormat | undefined, - ): BigDecimal { + static fromString(value: string, format?: string | number | FixedFormat | undefined): BigDecimal { if (format === undefined) { format = this.getDecimalsFromString(value); } @@ -418,19 +403,15 @@ export default class BigDecimal implements FixedNumber { static fromStringFixed(value: string, decimals: number): BigDecimal { if (value.length < decimals) { - value = '0.' + value.padStart(decimals - value.length + 1, '0'); + value = "0." + value.padStart(decimals - value.length + 1, "0"); } else { const position = value.length - decimals; - value = value.substring(0, position) + '.' + value.substring(position); + value = value.substring(0, position) + "." + value.substring(position); } return new BigDecimal(value, decimals); } - static fromValue( - value: BigNumber, - decimals?: number, - format?: FixedFormat | string | number, - ): BigDecimal { + static fromValue(value: BigNumber, decimals?: number, format?: FixedFormat | string | number): BigDecimal { return new BigDecimal(value, format, decimals); } diff --git a/packages/mass-payout/sdk/src/domain/shared/HederaId.ts b/packages/mass-payout/sdk/src/domain/shared/HederaId.ts index ccdcef968..d4a21dbd2 100644 --- a/packages/mass-payout/sdk/src/domain/shared/HederaId.ts +++ b/packages/mass-payout/sdk/src/domain/shared/HederaId.ts @@ -203,14 +203,13 @@ */ -import { AccountId } from '@hashgraph/sdk'; -import { InvalidIdFormat } from './error/InvalidIdFormat'; +import { AccountId } from "@hiero-ledger/sdk"; +import { InvalidIdFormat } from "./error/InvalidIdFormat"; -export const HEDERA_FORMAT_ID_REGEX = - /^(0|(?:[1-9]\d*))\.(0|(?:[1-9]\d*))\.(0|(?:[1-9]\d*))(?:-([a-z]{5}))?$/; +export const HEDERA_FORMAT_ID_REGEX = /^(0|(?:[1-9]\d*))\.(0|(?:[1-9]\d*))\.(0|(?:[1-9]\d*))(?:-([a-z]{5}))?$/; export class HederaId { - public static readonly NULL: HederaId = new HederaId('0.0.0'); + public static readonly NULL: HederaId = new HederaId("0.0.0"); value: string; constructor(value: string) { @@ -221,7 +220,7 @@ export class HederaId { } static from(value?: string): HederaId { - return new HederaId(value ?? ''); + return new HederaId(value ?? ""); } toHederaAddress(): AccountId { @@ -233,6 +232,6 @@ export class HederaId { } isNull(): boolean { - return this.value == '0.0.0'; + return this.value == "0.0.0"; } } diff --git a/packages/mass-payout/sdk/src/index.ts b/packages/mass-payout/sdk/src/index.ts index 572bf24f0..1593714fe 100644 --- a/packages/mass-payout/sdk/src/index.ts +++ b/packages/mass-payout/sdk/src/index.ts @@ -203,23 +203,24 @@ */ /* eslint-disable max-len */ -export { MassPayoutSDK } from './sdk.module'; -export { default as InitializationRequest } from '@port/in/request/network/InitializationRequest'; -export { Network } from '@port/in/network/Network'; -export { SupportedWallets } from '@domain/network/Wallet'; -export { default as ConnectRequest } from '@port/in/request/network/ConnectRequest'; -export { LifeCycleCashFlow } from '@port/in/lifeCycleCashFlow/LifeCycleCashFlow'; -export { default as DeployRequest } from '@port/in/request/lifeCycleCashFlow/DeployRequest'; -export { default as PauseRequest } from '@port/in/request/lifeCycleCashFlow/PauseRequest'; -export { default as UnpauseRequest } from '@port/in/request/lifeCycleCashFlow/UnpauseRequest'; -export { default as IsPausedRequest } from '@port/in/request/lifeCycleCashFlow/IsPausedRequest'; -export { default as GetPaymentTokenRequest } from '@port/in/request/lifeCycleCashFlow/GetPaymentTokenRequest'; -export { default as GetPaymentTokenDecimalsRequest } from '@port/in/request/lifeCycleCashFlow/GetPaymentTokenDecimalsRequest'; -export { default as ExecuteDistributionRequest } from '@port/in/request/lifeCycleCashFlow/ExecuteDistributionRequest'; -export { default as ExecuteDistributionByAddressesRequest } from '@port/in/request/lifeCycleCashFlow/ExecuteDistributionByAddressesRequest'; -export { default as ExecuteBondCashOutRequest } from '@port/in/request/lifeCycleCashFlow/ExecuteBondCashOutRequest'; -export { default as ExecuteBondCashOutByAddressesRequest } from '@port/in/request/lifeCycleCashFlow/ExecuteBondCashOutByAddressesRequest'; -export { default as ExecuteAmountSnapshotRequest } from '@port/in/request/lifeCycleCashFlow/ExecuteAmountSnapshotRequest'; -export { default as ExecuteAmountSnapshotByAddressesRequest } from '@port/in/request/lifeCycleCashFlow/ExecuteAmountSnapshotByAddressesRequest'; -export { default as ExecutePercentageSnapshotRequest } from '@port/in/request/lifeCycleCashFlow/ExecutePercentageSnapshotRequest'; -export { default as ExecutePercentageSnapshotByAddressesRequest } from '@port/in/request/lifeCycleCashFlow/ExecutePercentageSnapshotByAddressesRequest'; +export { MassPayoutSDK } from "./sdk.module"; +export { default as InitializationRequest } from "@port/in/request/network/InitializationRequest"; +export { Network } from "@port/in/network/Network"; +export { SupportedWallets } from "@domain/network/Wallet"; +export { default as ConnectRequest } from "@port/in/request/network/ConnectRequest"; +export { LifeCycleCashFlow } from "@port/in/lifeCycleCashFlow/LifeCycleCashFlow"; +export { default as DeployRequest } from "@port/in/request/lifeCycleCashFlow/DeployRequest"; +export { default as RbacRequest } from "@port/in/request/lifeCycleCashFlow/RbacRequest"; +export { default as PauseRequest } from "@port/in/request/lifeCycleCashFlow/PauseRequest"; +export { default as UnpauseRequest } from "@port/in/request/lifeCycleCashFlow/UnpauseRequest"; +export { default as IsPausedRequest } from "@port/in/request/lifeCycleCashFlow/IsPausedRequest"; +export { default as GetPaymentTokenRequest } from "@port/in/request/lifeCycleCashFlow/GetPaymentTokenRequest"; +export { default as GetPaymentTokenDecimalsRequest } from "@port/in/request/lifeCycleCashFlow/GetPaymentTokenDecimalsRequest"; +export { default as ExecuteDistributionRequest } from "@port/in/request/lifeCycleCashFlow/ExecuteDistributionRequest"; +export { default as ExecuteDistributionByAddressesRequest } from "@port/in/request/lifeCycleCashFlow/ExecuteDistributionByAddressesRequest"; +export { default as ExecuteBondCashOutRequest } from "@port/in/request/lifeCycleCashFlow/ExecuteBondCashOutRequest"; +export { default as ExecuteBondCashOutByAddressesRequest } from "@port/in/request/lifeCycleCashFlow/ExecuteBondCashOutByAddressesRequest"; +export { default as ExecuteAmountSnapshotRequest } from "@port/in/request/lifeCycleCashFlow/ExecuteAmountSnapshotRequest"; +export { default as ExecuteAmountSnapshotByAddressesRequest } from "@port/in/request/lifeCycleCashFlow/ExecuteAmountSnapshotByAddressesRequest"; +export { default as ExecutePercentageSnapshotRequest } from "@port/in/request/lifeCycleCashFlow/ExecutePercentageSnapshotRequest"; +export { default as ExecutePercentageSnapshotByAddressesRequest } from "@port/in/request/lifeCycleCashFlow/ExecutePercentageSnapshotByAddressesRequest"; diff --git a/packages/mass-payout/sdk/src/port/in/lifeCycleCashFlow/LifeCycleCashFlow.ts b/packages/mass-payout/sdk/src/port/in/lifeCycleCashFlow/LifeCycleCashFlow.ts index 1172b479f..059e9fdc2 100644 --- a/packages/mass-payout/sdk/src/port/in/lifeCycleCashFlow/LifeCycleCashFlow.ts +++ b/packages/mass-payout/sdk/src/port/in/lifeCycleCashFlow/LifeCycleCashFlow.ts @@ -203,49 +203,46 @@ */ -import { Injectable } from '@nestjs/common'; -import { LogError } from '@core/decorator/LogErrorDecorator'; -import ValidatedRequest from '@core/validation/ValidatedArgs'; -import { CommandBus } from '@core/command/CommandBus'; -import { QueryBus } from '@core/query/QueryBus'; -import { MirrorNodeAdapter } from '@port/out/mirror/MirrorNodeAdapter'; -import DeployRequest from '@port/in/request/lifeCycleCashFlow/DeployRequest'; -import PauseRequest from '@port/in/request/lifeCycleCashFlow/PauseRequest'; -import UnpauseRequest from '@port/in/request/lifeCycleCashFlow/UnpauseRequest'; -import IsPausedRequest from '@port/in/request/lifeCycleCashFlow/IsPausedRequest'; -import GetPaymentTokenRequest from '@port/in/request/lifeCycleCashFlow/GetPaymentTokenRequest'; -import GetPaymentTokenDecimalsRequest from '@port/in/request/lifeCycleCashFlow/GetPaymentTokenDecimalsRequest'; -import ExecuteDistributionRequest from '@port/in/request/lifeCycleCashFlow/ExecuteDistributionRequest'; -import ExecuteDistributionByAddressesRequest from '@port/in/request/lifeCycleCashFlow/ExecuteDistributionByAddressesRequest'; -import ExecuteBondCashOutRequest from '@port/in/request/lifeCycleCashFlow/ExecuteBondCashOutRequest'; -import ExecuteBondCashOutByAddressesRequest from '@port/in/request/lifeCycleCashFlow/ExecuteBondCashOutByAddressesRequest'; -import ExecuteAmountSnapshotRequest from '@port/in/request/lifeCycleCashFlow/ExecuteAmountSnapshotRequest'; -import ExecutePercentageSnapshotRequest from '@port/in/request/lifeCycleCashFlow/ExecutePercentageSnapshotRequest'; -import ExecuteAmountSnapshotByAddressesRequest from '@port/in/request/lifeCycleCashFlow/ExecuteAmountSnapshotByAddressesRequest'; -import ExecutePercentageSnapshotByAddressesRequest from '@port/in/request/lifeCycleCashFlow/ExecutePercentageSnapshotByAddressesRequest'; -import { DeployCommand } from '@app/usecase/command/lifeCycleCashFlow/operations/deploy/DeployCommand'; -import { PauseCommand } from '@app/usecase/command/lifeCycleCashFlow/operations/pause/PauseCommand'; -import { UnpauseCommand } from '@app/usecase/command/lifeCycleCashFlow/operations/unpause/UnpauseCommand'; -import { IsPausedQuery } from '@app/usecase/query/lifeCycleCashFlow/isPaused/IsPausedQuery'; -import { GetPaymentTokenQuery } from '@app/usecase/query/lifeCycleCashFlow/getPaymentToken/GetPaymentTokenQuery'; -import { GetPaymentTokenDecimalsQuery } from '@app/usecase/query/lifeCycleCashFlow/getPaymentTokenDecimals/GetPaymentTokenDecimalsQuery'; -import { ExecuteDistributionCommand } from '@app/usecase/command/lifeCycleCashFlow/operations/executeDistribution/ExecuteDistributionCommand'; -import { ExecuteDistributionByAddressesCommand } from '@app/usecase/command/lifeCycleCashFlow/operations/executeDistributionByAddresses/ExecuteDistributionByAddressesCommand'; -import { ExecuteBondCashOutCommand } from '@app/usecase/command/lifeCycleCashFlow/operations/executeBondCashOut/ExecuteBondCashOutCommand'; -import { ExecuteBondCashOutByAddressesCommand } from '@app/usecase/command/lifeCycleCashFlow/operations/executeBondCashOutByAddresses/ExecuteBondCashOutByAddressesCommand'; -import { ExecuteAmountSnapshotCommand } from '@app/usecase/command/lifeCycleCashFlow/operations/executeAmountSnapshot/ExecuteAmountSnapshotCommand'; -import { ExecuteAmountSnapshotByAddressesCommand } from '@app/usecase/command/lifeCycleCashFlow/operations/executeAmountSnapshotByAddresses/ExecuteAmountSnapshotByAddressesCommand'; -import { ExecutePercentageSnapshotCommand } from '@app/usecase/command/lifeCycleCashFlow/operations/executePercentageSnapshot/ExecutePercentageSnapshotCommand'; -import { ExecutePercentageSnapshotByAddressesCommand } from '@app/usecase/command/lifeCycleCashFlow/operations/executePercentageSnapshotByAddresses/ExecutePercentageSnapshotByAddressesCommand'; +import { Injectable } from "@nestjs/common"; +import { LogError } from "@core/decorator/LogErrorDecorator"; +import ValidatedRequest from "@core/validation/ValidatedArgs"; +import { CommandBus } from "@core/command/CommandBus"; +import { QueryBus } from "@core/query/QueryBus"; +import { MirrorNodeAdapter } from "@port/out/mirror/MirrorNodeAdapter"; +import DeployRequest from "@port/in/request/lifeCycleCashFlow/DeployRequest"; +import RbacRequest from "@port/in/request/lifeCycleCashFlow/RbacRequest"; +import PauseRequest from "@port/in/request/lifeCycleCashFlow/PauseRequest"; +import UnpauseRequest from "@port/in/request/lifeCycleCashFlow/UnpauseRequest"; +import IsPausedRequest from "@port/in/request/lifeCycleCashFlow/IsPausedRequest"; +import GetPaymentTokenRequest from "@port/in/request/lifeCycleCashFlow/GetPaymentTokenRequest"; +import GetPaymentTokenDecimalsRequest from "@port/in/request/lifeCycleCashFlow/GetPaymentTokenDecimalsRequest"; +import ExecuteDistributionRequest from "@port/in/request/lifeCycleCashFlow/ExecuteDistributionRequest"; +import ExecuteDistributionByAddressesRequest from "@port/in/request/lifeCycleCashFlow/ExecuteDistributionByAddressesRequest"; +import ExecuteBondCashOutRequest from "@port/in/request/lifeCycleCashFlow/ExecuteBondCashOutRequest"; +import ExecuteBondCashOutByAddressesRequest from "@port/in/request/lifeCycleCashFlow/ExecuteBondCashOutByAddressesRequest"; +import ExecuteAmountSnapshotRequest from "@port/in/request/lifeCycleCashFlow/ExecuteAmountSnapshotRequest"; +import ExecutePercentageSnapshotRequest from "@port/in/request/lifeCycleCashFlow/ExecutePercentageSnapshotRequest"; +import ExecuteAmountSnapshotByAddressesRequest from "@port/in/request/lifeCycleCashFlow/ExecuteAmountSnapshotByAddressesRequest"; +import ExecutePercentageSnapshotByAddressesRequest from "@port/in/request/lifeCycleCashFlow/ExecutePercentageSnapshotByAddressesRequest"; +import { DeployCommand, RbacCommand } from "@app/usecase/command/lifeCycleCashFlow/operations/deploy/DeployCommand"; +import { PauseCommand } from "@app/usecase/command/lifeCycleCashFlow/operations/pause/PauseCommand"; +import { UnpauseCommand } from "@app/usecase/command/lifeCycleCashFlow/operations/unpause/UnpauseCommand"; +import { IsPausedQuery } from "@app/usecase/query/lifeCycleCashFlow/isPaused/IsPausedQuery"; +import { GetPaymentTokenQuery } from "@app/usecase/query/lifeCycleCashFlow/getPaymentToken/GetPaymentTokenQuery"; +import { GetPaymentTokenDecimalsQuery } from "@app/usecase/query/lifeCycleCashFlow/getPaymentTokenDecimals/GetPaymentTokenDecimalsQuery"; +import { ExecuteDistributionCommand } from "@app/usecase/command/lifeCycleCashFlow/operations/executeDistribution/ExecuteDistributionCommand"; +import { ExecuteDistributionByAddressesCommand } from "@app/usecase/command/lifeCycleCashFlow/operations/executeDistributionByAddresses/ExecuteDistributionByAddressesCommand"; +import { ExecuteBondCashOutCommand } from "@app/usecase/command/lifeCycleCashFlow/operations/executeBondCashOut/ExecuteBondCashOutCommand"; +import { ExecuteBondCashOutByAddressesCommand } from "@app/usecase/command/lifeCycleCashFlow/operations/executeBondCashOutByAddresses/ExecuteBondCashOutByAddressesCommand"; +import { ExecuteAmountSnapshotCommand } from "@app/usecase/command/lifeCycleCashFlow/operations/executeAmountSnapshot/ExecuteAmountSnapshotCommand"; +import { ExecuteAmountSnapshotByAddressesCommand } from "@app/usecase/command/lifeCycleCashFlow/operations/executeAmountSnapshotByAddresses/ExecuteAmountSnapshotByAddressesCommand"; +import { ExecutePercentageSnapshotCommand } from "@app/usecase/command/lifeCycleCashFlow/operations/executePercentageSnapshot/ExecutePercentageSnapshotCommand"; +import { ExecutePercentageSnapshotByAddressesCommand } from "@app/usecase/command/lifeCycleCashFlow/operations/executePercentageSnapshotByAddresses/ExecutePercentageSnapshotByAddressesCommand"; interface ILifeCycleCashFlowPort { deploy(request: DeployRequest): Promise<{ payload: string }>; - pause( - request: PauseRequest, - ): Promise<{ payload: boolean; transactionId: string }>; - unpause( - request: UnpauseRequest, - ): Promise<{ payload: boolean; transactionId: string }>; + pause(request: PauseRequest): Promise<{ payload: boolean; transactionId: string }>; + unpause(request: UnpauseRequest): Promise<{ payload: boolean; transactionId: string }>; isPaused(request: IsPausedRequest): Promise<{ payload: boolean }>; executeDistribution(request: ExecuteDistributionRequest): Promise<{ failed: string[]; @@ -254,9 +251,7 @@ interface ILifeCycleCashFlowPort { executed: boolean; transactionId: string; }>; - executeDistributionByAddresses( - request: ExecuteDistributionByAddressesRequest, - ): Promise<{ + executeDistributionByAddresses(request: ExecuteDistributionByAddressesRequest): Promise<{ failed: string[]; succeeded: string[]; paidAmount: string[]; @@ -269,9 +264,7 @@ interface ILifeCycleCashFlowPort { executed: boolean; transactionId: string; }>; - executeBondCashOutByAddresses( - request: ExecuteBondCashOutByAddressesRequest, - ): Promise<{ + executeBondCashOutByAddresses(request: ExecuteBondCashOutByAddressesRequest): Promise<{ failed: string[]; succeeded: string[]; paidAmount: string[]; @@ -284,37 +277,27 @@ interface ILifeCycleCashFlowPort { executed: boolean; transactionId: string; }>; - executePercentageSnapshot( - request: ExecutePercentageSnapshotRequest, - ): Promise<{ + executePercentageSnapshot(request: ExecutePercentageSnapshotRequest): Promise<{ failed: string[]; succeeded: string[]; paidAmount: string[]; executed: boolean; transactionId: string; }>; - executeAmountSnapshotByAddresses( - request: ExecuteAmountSnapshotByAddressesRequest, - ): Promise<{ + executeAmountSnapshotByAddresses(request: ExecuteAmountSnapshotByAddressesRequest): Promise<{ failed: string[]; succeeded: string[]; paidAmount: string[]; transactionId: string; }>; - executePercentageSnapshotByAddresses( - request: ExecutePercentageSnapshotByAddressesRequest, - ): Promise<{ + executePercentageSnapshotByAddresses(request: ExecutePercentageSnapshotByAddressesRequest): Promise<{ failed: string[]; succeeded: string[]; paidAmount: string[]; transactionId: string; }>; - getPaymentToken( - request: GetPaymentTokenRequest, - ): Promise<{ payload: string }>; - getPaymentTokenDecimals( - request: GetPaymentTokenDecimalsRequest, - ): Promise<{ payload: number }>; + getPaymentToken(request: GetPaymentTokenRequest): Promise<{ payload: string }>; + getPaymentTokenDecimals(request: GetPaymentTokenDecimalsRequest): Promise<{ payload: number }>; } @Injectable() @@ -327,30 +310,36 @@ export class LifeCycleCashFlow implements ILifeCycleCashFlowPort { @LogError async deploy(request: DeployRequest): Promise<{ payload: string }> { - const { asset, paymentToken } = request; - ValidatedRequest.handleValidation('DeployRequest', request); + const { asset, paymentToken, rbac } = request; + ValidatedRequest.handleValidation("DeployRequest", request); - return await this.commandBus.execute( - new DeployCommand(asset, paymentToken), - ); + const commandRbac = this.mapRbacRequestToCommand(rbac); + + return await this.commandBus.execute(new DeployCommand(asset, paymentToken, commandRbac)); + } + + private mapRbacRequestToCommand(rbac: RbacRequest[]): RbacCommand[] { + return rbac != undefined && rbac.length > 0 + ? rbac.map(({ role, members }) => ({ + role, + members, + })) + : []; } @LogError - async pause( - request: PauseRequest, - ): Promise<{ payload: boolean; transactionId: string }> { + async pause(request: PauseRequest): Promise<{ payload: boolean; transactionId: string }> { const { lifeCycleCashFlow } = request; - ValidatedRequest.handleValidation('PauseRequest', request); + + ValidatedRequest.handleValidation("PauseRequest", request); return await this.commandBus.execute(new PauseCommand(lifeCycleCashFlow)); } @LogError - async unpause( - request: UnpauseRequest, - ): Promise<{ payload: boolean; transactionId: string }> { + async unpause(request: UnpauseRequest): Promise<{ payload: boolean; transactionId: string }> { const { lifeCycleCashFlow } = request; - ValidatedRequest.handleValidation('UnpauseRequest', request); + ValidatedRequest.handleValidation("UnpauseRequest", request); return await this.commandBus.execute(new UnpauseCommand(lifeCycleCashFlow)); } @@ -358,36 +347,25 @@ export class LifeCycleCashFlow implements ILifeCycleCashFlowPort { @LogError async isPaused(request: IsPausedRequest): Promise<{ payload: boolean }> { const { lifeCycleCashFlow } = request; - IsPausedRequest.handleValidation('IsPausedRequest', request); + IsPausedRequest.handleValidation("IsPausedRequest", request); return await this.queryBus.execute(new IsPausedQuery(lifeCycleCashFlow)); } @LogError - async getPaymentToken( - request: GetPaymentTokenRequest, - ): Promise<{ payload: string }> { + async getPaymentToken(request: GetPaymentTokenRequest): Promise<{ payload: string }> { const { lifeCycleCashFlow } = request; - GetPaymentTokenRequest.handleValidation('GetPaymentTokenRequest', request); + GetPaymentTokenRequest.handleValidation("GetPaymentTokenRequest", request); - return await this.queryBus.execute( - new GetPaymentTokenQuery(lifeCycleCashFlow), - ); + return await this.queryBus.execute(new GetPaymentTokenQuery(lifeCycleCashFlow)); } @LogError - async getPaymentTokenDecimals( - request: GetPaymentTokenDecimalsRequest, - ): Promise<{ payload: number }> { + async getPaymentTokenDecimals(request: GetPaymentTokenDecimalsRequest): Promise<{ payload: number }> { const { lifeCycleCashFlow } = request; - GetPaymentTokenDecimalsRequest.handleValidation( - 'GetPaymentTokenDecimalsRequest', - request, - ); + GetPaymentTokenDecimalsRequest.handleValidation("GetPaymentTokenDecimalsRequest", request); - return await this.queryBus.execute( - new GetPaymentTokenDecimalsQuery(lifeCycleCashFlow), - ); + return await this.queryBus.execute(new GetPaymentTokenDecimalsQuery(lifeCycleCashFlow)); } @LogError @@ -398,9 +376,8 @@ export class LifeCycleCashFlow implements ILifeCycleCashFlowPort { executed: boolean; transactionId: string; }> { - const { lifeCycleCashFlow, asset, pageIndex, pageLength, distributionId } = - request; - ValidatedRequest.handleValidation('ExecuteDistributionRequest', request); + const { lifeCycleCashFlow, asset, pageIndex, pageLength, distributionId } = request; + ValidatedRequest.handleValidation("ExecuteDistributionRequest", request); const { payload: tokenDecimals } = await this.getPaymentTokenDecimals( new GetPaymentTokenDecimalsRequest({ @@ -409,31 +386,19 @@ export class LifeCycleCashFlow implements ILifeCycleCashFlowPort { ); return await this.commandBus.execute( - new ExecuteDistributionCommand( - lifeCycleCashFlow, - asset, - pageIndex, - pageLength, - distributionId, - tokenDecimals, - ), + new ExecuteDistributionCommand(lifeCycleCashFlow, asset, pageIndex, pageLength, distributionId, tokenDecimals), ); } @LogError - async executeDistributionByAddresses( - request: ExecuteDistributionByAddressesRequest, - ): Promise<{ + async executeDistributionByAddresses(request: ExecuteDistributionByAddressesRequest): Promise<{ failed: string[]; succeeded: string[]; paidAmount: string[]; transactionId: string; }> { const { lifeCycleCashFlow, asset, holders, distributionId } = request; - ValidatedRequest.handleValidation( - 'ExecuteDistributionByAddressesRequest', - request, - ); + ValidatedRequest.handleValidation("ExecuteDistributionByAddressesRequest", request); const { payload: tokenDecimals } = await this.getPaymentTokenDecimals( new GetPaymentTokenDecimalsRequest({ @@ -442,13 +407,7 @@ export class LifeCycleCashFlow implements ILifeCycleCashFlowPort { ); return await this.commandBus.execute( - new ExecuteDistributionByAddressesCommand( - lifeCycleCashFlow, - asset, - holders, - distributionId, - tokenDecimals, - ), + new ExecuteDistributionByAddressesCommand(lifeCycleCashFlow, asset, holders, distributionId, tokenDecimals), ); } @@ -461,7 +420,7 @@ export class LifeCycleCashFlow implements ILifeCycleCashFlowPort { transactionId: string; }> { const { lifeCycleCashFlow, bond, pageIndex, pageLength } = request; - ValidatedRequest.handleValidation('ExecuteBondCashOutRequest', request); + ValidatedRequest.handleValidation("ExecuteBondCashOutRequest", request); const { payload: tokenDecimals } = await this.getPaymentTokenDecimals( new GetPaymentTokenDecimalsRequest({ @@ -470,30 +429,19 @@ export class LifeCycleCashFlow implements ILifeCycleCashFlowPort { ); return await this.commandBus.execute( - new ExecuteBondCashOutCommand( - lifeCycleCashFlow, - bond, - pageIndex, - pageLength, - tokenDecimals, - ), + new ExecuteBondCashOutCommand(lifeCycleCashFlow, bond, pageIndex, pageLength, tokenDecimals), ); } @LogError - async executeBondCashOutByAddresses( - request: ExecuteBondCashOutByAddressesRequest, - ): Promise<{ + async executeBondCashOutByAddresses(request: ExecuteBondCashOutByAddressesRequest): Promise<{ failed: string[]; succeeded: string[]; paidAmount: string[]; transactionId: string; }> { const { lifeCycleCashFlow, bond, holders } = request; - ValidatedRequest.handleValidation( - 'ExecuteBondCashOutByAddressesRequest', - request, - ); + ValidatedRequest.handleValidation("ExecuteBondCashOutByAddressesRequest", request); const { payload: tokenDecimals } = await this.getPaymentTokenDecimals( new GetPaymentTokenDecimalsRequest({ @@ -502,12 +450,7 @@ export class LifeCycleCashFlow implements ILifeCycleCashFlowPort { ); return await this.commandBus.execute( - new ExecuteBondCashOutByAddressesCommand( - lifeCycleCashFlow, - bond, - holders, - tokenDecimals, - ), + new ExecuteBondCashOutByAddressesCommand(lifeCycleCashFlow, bond, holders, tokenDecimals), ); } @@ -519,15 +462,8 @@ export class LifeCycleCashFlow implements ILifeCycleCashFlowPort { executed: boolean; transactionId: string; }> { - const { - lifeCycleCashFlow, - asset, - snapshotId, - pageIndex, - pageLength, - amount, - } = request; - ValidatedRequest.handleValidation('ExecuteAmountSnapshotRequest', request); + const { lifeCycleCashFlow, asset, snapshotId, pageIndex, pageLength, amount } = request; + ValidatedRequest.handleValidation("ExecuteAmountSnapshotRequest", request); const { payload: tokenDecimals } = await this.getPaymentTokenDecimals( new GetPaymentTokenDecimalsRequest({ @@ -549,19 +485,14 @@ export class LifeCycleCashFlow implements ILifeCycleCashFlowPort { } @LogError - async executeAmountSnapshotByAddresses( - request: ExecuteAmountSnapshotByAddressesRequest, - ): Promise<{ + async executeAmountSnapshotByAddresses(request: ExecuteAmountSnapshotByAddressesRequest): Promise<{ failed: string[]; succeeded: string[]; paidAmount: string[]; transactionId: string; }> { const { lifeCycleCashFlow, asset, snapshotId, holders, amount } = request; - ValidatedRequest.handleValidation( - 'ExecuteAmountSnapshotByAddressesRequest', - request, - ); + ValidatedRequest.handleValidation("ExecuteAmountSnapshotByAddressesRequest", request); const { payload: tokenDecimals } = await this.getPaymentTokenDecimals( new GetPaymentTokenDecimalsRequest({ @@ -570,39 +501,20 @@ export class LifeCycleCashFlow implements ILifeCycleCashFlowPort { ); return await this.commandBus.execute( - new ExecuteAmountSnapshotByAddressesCommand( - lifeCycleCashFlow, - asset, - snapshotId, - holders, - amount, - tokenDecimals, - ), + new ExecuteAmountSnapshotByAddressesCommand(lifeCycleCashFlow, asset, snapshotId, holders, amount, tokenDecimals), ); } @LogError - async executePercentageSnapshot( - request: ExecutePercentageSnapshotRequest, - ): Promise<{ + async executePercentageSnapshot(request: ExecutePercentageSnapshotRequest): Promise<{ failed: string[]; succeeded: string[]; paidAmount: string[]; executed: boolean; transactionId: string; }> { - const { - lifeCycleCashFlow, - asset, - snapshotId, - pageIndex, - pageLength, - percentage, - } = request; - ValidatedRequest.handleValidation( - 'ExecutePercentageSnapshotRequest', - request, - ); + const { lifeCycleCashFlow, asset, snapshotId, pageIndex, pageLength, percentage } = request; + ValidatedRequest.handleValidation("ExecutePercentageSnapshotRequest", request); const { payload: tokenDecimals } = await this.getPaymentTokenDecimals( new GetPaymentTokenDecimalsRequest({ @@ -624,20 +536,14 @@ export class LifeCycleCashFlow implements ILifeCycleCashFlowPort { } @LogError - async executePercentageSnapshotByAddresses( - request: ExecutePercentageSnapshotByAddressesRequest, - ): Promise<{ + async executePercentageSnapshotByAddresses(request: ExecutePercentageSnapshotByAddressesRequest): Promise<{ failed: string[]; succeeded: string[]; paidAmount: string[]; transactionId: string; }> { - const { lifeCycleCashFlow, asset, snapshotId, holders, percentage } = - request; - ValidatedRequest.handleValidation( - 'ExecutePercentageSnapshotByAddressesRequest', - request, - ); + const { lifeCycleCashFlow, asset, snapshotId, holders, percentage } = request; + ValidatedRequest.handleValidation("ExecutePercentageSnapshotByAddressesRequest", request); const { payload: tokenDecimals } = await this.getPaymentTokenDecimals( new GetPaymentTokenDecimalsRequest({ diff --git a/packages/mass-payout/sdk/src/port/in/request/FormatValidation.ts b/packages/mass-payout/sdk/src/port/in/request/FormatValidation.ts index f1c0c03eb..6b0242f1d 100644 --- a/packages/mass-payout/sdk/src/port/in/request/FormatValidation.ts +++ b/packages/mass-payout/sdk/src/port/in/request/FormatValidation.ts @@ -204,30 +204,31 @@ */ /* eslint-disable @typescript-eslint/no-explicit-any */ -import { RequestAccount, RequestPublicKey } from './BaseRequest'; -import { EmptyValue } from '@core/error/EmptyValue'; -import { InvalidLength } from './error/InvalidLength'; -import { InvalidRange } from './error/InvalidRange'; -import { InvalidFormatHedera as InvalidIdFormatHedera } from '@domain/shared/error/InvalidFormatHedera'; -import { InvalidType } from './error/InvalidType'; -import BaseError from '@core/error/BaseError'; -import PublicKey from '@domain/account/PublicKey'; -import CheckStrings from '@core/checks/strings/CheckStrings'; -import CheckNums from '@core/checks/numbers/CheckNums'; -import { AccountIdNotValid } from '@domain/account/error/AccountIdNotValid'; -import BigDecimal from '@domain/shared/BigDecimal'; -import Account from '@domain/account/Account'; -import ContractId from '@domain/contract/ContractId'; -import { EVM_ZERO_ADDRESS } from '@core/Constants'; -import { InvalidEvmAddress } from '@domain/contract/error/InvalidEvmAddress'; -import { InvalidFormatHederaIdOrEvmAddress } from '@domain/shared/error/InvalidFormatHederaIdOrEvmAddress'; -import { InvalidBytes32 } from './error/InvalidBytes32'; -import { InvalidBytes3 } from './error/InvalidBytes3'; -import { HEDERA_FORMAT_ID_REGEX } from '@domain/shared/HederaId'; -import { InvalidBytes } from './error/InvalidBytes'; -import { InvalidBase64 } from './error/InvalidBase64'; -import { InvalidValue } from './error/InvalidValue'; -import InvalidDecimalRange from './error/InvalidDecimalRange'; +import { RequestAccount, RequestPublicKey } from "./BaseRequest"; +import { EmptyValue } from "@core/error/EmptyValue"; +import { InvalidLength } from "./error/InvalidLength"; +import { InvalidRange } from "./error/InvalidRange"; +import { InvalidFormatHedera as InvalidIdFormatHedera } from "@domain/shared/error/InvalidFormatHedera"; +import { InvalidType } from "./error/InvalidType"; +import { InvalidArray } from "./error/InvalidArray"; +import BaseError from "@core/error/BaseError"; +import PublicKey from "@domain/account/PublicKey"; +import CheckStrings from "@core/checks/strings/CheckStrings"; +import CheckNums from "@core/checks/numbers/CheckNums"; +import { AccountIdNotValid } from "@domain/account/error/AccountIdNotValid"; +import BigDecimal from "@domain/shared/BigDecimal"; +import Account from "@domain/account/Account"; +import ContractId from "@domain/contract/ContractId"; +import { EVM_ZERO_ADDRESS } from "@core/Constants"; +import { InvalidEvmAddress } from "@domain/contract/error/InvalidEvmAddress"; +import { InvalidFormatHederaIdOrEvmAddress } from "@domain/shared/error/InvalidFormatHederaIdOrEvmAddress"; +import { InvalidBytes32 } from "./error/InvalidBytes32"; +import { InvalidBytes3 } from "./error/InvalidBytes3"; +import { HEDERA_FORMAT_ID_REGEX } from "@domain/shared/HederaId"; +import { InvalidBytes } from "./error/InvalidBytes"; +import { InvalidBase64 } from "./error/InvalidBase64"; +import { InvalidValue } from "./error/InvalidValue"; +import InvalidDecimalRange from "./error/InvalidDecimalRange"; export default class FormatValidation { public static checkPublicKey = () => { @@ -243,14 +244,10 @@ export default class FormatValidation { }; }; - public static checkString = ({ - max = Number.MAX_VALUE, - min = 0, - emptyCheck = true, - }) => { + public static checkString = ({ max = Number.MAX_VALUE, min = 0, emptyCheck = true }) => { return (val: any): BaseError[] => { const err: BaseError[] = []; - if (typeof val !== 'string') { + if (typeof val !== "string") { err.push(new InvalidType(val)); } else { if (emptyCheck && !CheckStrings.isNotEmpty(val)) { @@ -263,21 +260,17 @@ export default class FormatValidation { }; }; - public static checkNumber = ({ - max, - min, - }: { max?: T; min?: T } = {}) => { + public static checkNumber = ({ max, min }: { max?: T; min?: T } = {}) => { return (val: any): BaseError[] => { const err: BaseError[] = []; const iMax = max || max === 0; const iMin = min || min === 0; const isBigDecimal: boolean = CheckNums.isBigDecimal(val); - if (typeof val !== 'number' && !isBigDecimal) { + if (typeof val !== "number" && !isBigDecimal) { err.push(new InvalidType(val)); } else { let v = val; - if (typeof v !== 'number' && !(v instanceof BigDecimal)) - v = BigDecimal.fromString(v); + if (typeof v !== "number" && !(v instanceof BigDecimal)) v = BigDecimal.fromString(v); if (iMin && !iMax) { if (CheckNums.isLessThan(v, min)) { err.push(new InvalidRange(v, min)); @@ -296,6 +289,61 @@ export default class FormatValidation { }; }; + public static checkArray = ( + itemValidator: (item: T, index: number) => BaseError[], + fieldName: string, + required = true, + ) => { + return (val: unknown): BaseError[] => { + const errors: BaseError[] = []; + + if (val == null) { + if (required) errors.push(new InvalidValue(`${fieldName} is required`)); + return errors; + } + + if (!Array.isArray(val)) { + errors.push(new InvalidArray(val.toString())); + return errors; + } + + for (let i = 0; i < val.length; i++) { + const itemErrors = itemValidator(val[i] as T, i); + errors.push(...itemErrors); + } + + return errors; + }; + }; + + public static checkRbacEntry = () => { + return FormatValidation.checkArray( + (entry: any, index: number): BaseError[] => { + const errors: BaseError[] = []; + + // Validate the role + if (!entry.role) { + errors.push(new InvalidValue(`rbac[${index}].role is required`)); + } else { + errors.push(...FormatValidation.checkBytes32Format()(entry.role)); + } + + // Validate the members array + if (!entry.members) { + errors.push(new InvalidValue(`rbac[${index}].members is required`)); + } else { + errors.push( + ...FormatValidation.checkHederaIdOrEvmAddressArray(entry.members, `rbac[${index}].members`, false), + ); + } + + return errors; + }, + "rbac", // field name + true, // required array + ); + }; + public static checkAccount = () => { return (val: any): void => { const { accountId, publicKey, evmAddress } = val as RequestAccount; @@ -320,7 +368,7 @@ export default class FormatValidation { const err: BaseError[] = []; if (!HEDERA_FORMAT_ID_REGEX.exec(val)) { err.push(new InvalidIdFormatHedera(val)); - } else if (!zeroIsValid && val === '0.0.0') { + } else if (!zeroIsValid && val === "0.0.0") { err.push(new AccountIdNotValid(val)); } return err; @@ -347,10 +395,7 @@ export default class FormatValidation { const err: BaseError[] = []; if (!HEDERA_FORMAT_ID_REGEX.exec(val) && !evmAddressRegEx.exec(val)) { err.push(new InvalidFormatHederaIdOrEvmAddress(val)); - } else if ( - !zeroIsValid && - (val === '0.0.0' || val === EVM_ZERO_ADDRESS) - ) { + } else if (!zeroIsValid && (val === "0.0.0" || val === EVM_ZERO_ADDRESS)) { err.push(new AccountIdNotValid(val)); } return err; @@ -366,13 +411,11 @@ export default class FormatValidation { return err; } const valueDecimals = BigDecimal.getDecimalsFromString(val); - const zero = BigDecimal.fromString('0', valueDecimals); + const zero = BigDecimal.fromString("0", valueDecimals); const value = BigDecimal.fromString(val); - if (zeroIsValid && value.isLowerThan(zero)) - err.push(new InvalidRange(val, '0', undefined)); - else if (!zeroIsValid && value.isLowerOrEqualThan(zero)) - err.push(new InvalidRange(val, '0', undefined)); + if (zeroIsValid && value.isLowerThan(zero)) err.push(new InvalidRange(val, "0", undefined)); + else if (!zeroIsValid && value.isLowerOrEqualThan(zero)) err.push(new InvalidRange(val, "0", undefined)); if (valueDecimals > decimals) { err.push(new InvalidDecimalRange(val, 0, decimals)); @@ -431,17 +474,14 @@ export default class FormatValidation { allowEmpty: boolean = false, ): BaseError[] { if (values.length === 0) { - return allowEmpty - ? [] - : [new InvalidValue(`The list of ${fieldName} cannot be empty`)]; + return allowEmpty ? [] : [new InvalidValue(`The list of ${fieldName} cannot be empty`)]; } const errors: InvalidValue[] = []; const seenValues = new Set(); values.forEach((value) => { - const formatErrors = - FormatValidation.checkHederaIdFormatOrEvmAddress()(value); + const formatErrors = FormatValidation.checkHederaIdFormatOrEvmAddress()(value); errors.push(...formatErrors); if (seenValues.has(value)) { diff --git a/packages/mass-payout/sdk/src/port/in/request/error/InvalidArray.ts b/packages/mass-payout/sdk/src/port/in/request/error/InvalidArray.ts new file mode 100644 index 000000000..2d61874da --- /dev/null +++ b/packages/mass-payout/sdk/src/port/in/request/error/InvalidArray.ts @@ -0,0 +1,212 @@ +/* + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "[]" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright [yyyy] [name of copyright owner] + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + +*/ + +import BaseError, { ErrorCode } from "@core/error/BaseError"; + +export class InvalidArray extends BaseError { + constructor(value: string) { + super(ErrorCode.InvalidArray, `Value ${value} is not valid`); + } +} diff --git a/packages/mass-payout/sdk/src/port/in/request/lifeCycleCashFlow/DeployRequest.ts b/packages/mass-payout/sdk/src/port/in/request/lifeCycleCashFlow/DeployRequest.ts index 922b747dd..ee99b0f07 100644 --- a/packages/mass-payout/sdk/src/port/in/request/lifeCycleCashFlow/DeployRequest.ts +++ b/packages/mass-payout/sdk/src/port/in/request/lifeCycleCashFlow/DeployRequest.ts @@ -203,26 +203,32 @@ */ -import ValidatedRequest from '@core/validation/ValidatedArgs'; -import FormatValidation from '@port/in/request/FormatValidation'; +import ValidatedRequest from "@core/validation/ValidatedArgs"; +import FormatValidation from "@port/in/request/FormatValidation"; +import RbacRequest from "./RbacRequest"; export default class DeployRequest extends ValidatedRequest { asset: string; paymentToken: string; + rbac: RbacRequest[]; constructor({ asset, paymentToken, + rbac = [], }: { asset: string; paymentToken: string; + rbac?: { role: string; members: string[] }[]; }) { super({ asset: FormatValidation.checkHederaIdFormatOrEvmAddress(), paymentToken: FormatValidation.checkHederaIdFormatOrEvmAddress(), + rbac: FormatValidation.checkRbacEntry(), }); this.asset = asset; this.paymentToken = paymentToken; + this.rbac = rbac.map((entry) => new RbacRequest(entry)); } } diff --git a/packages/mass-payout/sdk/src/port/in/request/lifeCycleCashFlow/RbacRequest.ts b/packages/mass-payout/sdk/src/port/in/request/lifeCycleCashFlow/RbacRequest.ts new file mode 100644 index 000000000..aa9caed44 --- /dev/null +++ b/packages/mass-payout/sdk/src/port/in/request/lifeCycleCashFlow/RbacRequest.ts @@ -0,0 +1,222 @@ +/* + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "[]" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright [yyyy] [name of copyright owner] + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + +*/ + +import ValidatedRequest from "@core/validation/ValidatedArgs"; +import FormatValidation from "@port/in/request/FormatValidation"; + +export default class RbacRequest extends ValidatedRequest { + role: string; + members: string[]; + + constructor({ role, members }: { role: string; members: string[] }) { + super({ + role: FormatValidation.checkBytes32Format(), + members: (vals) => FormatValidation.checkHederaIdOrEvmAddressArray(vals, "members", true), + }); + + this.role = role; + this.members = members; + } +} diff --git a/packages/mass-payout/sdk/src/port/out/TransactionAdapter.ts b/packages/mass-payout/sdk/src/port/out/TransactionAdapter.ts index 376e86e6c..5a3f628dd 100644 --- a/packages/mass-payout/sdk/src/port/out/TransactionAdapter.ts +++ b/packages/mass-payout/sdk/src/port/out/TransactionAdapter.ts @@ -207,12 +207,13 @@ /* eslint-disable @typescript-eslint/no-unused-vars */ /* eslint-disable unused-imports/no-unused-vars */ import Account from "@domain/account/Account" -import { ContractId } from "@hashgraph/sdk" +import { ContractId } from "@hiero-ledger/sdk" import { Environment } from "@domain/network/Environment" import DfnsSettings from "@core/settings/custodialWalletSettings/DfnsSettings" import EvmAddress from "@domain/contract/EvmAddress" import BigDecimal from "@domain/shared/BigDecimal" import TransactionResponse from "@domain/transaction/TransactionResponse" +import RbacPort from "./hs/types/RbacPort" export interface InitializationData { account?: Account; @@ -233,7 +234,7 @@ interface ITransactionAdapter { register(input?: Account | DfnsSettings): Promise; stop(): Promise; importAsset(asset: EvmAddress, paymentToken: EvmAddress): Promise; - deploy(asset: EvmAddress, paymentToken: EvmAddress): Promise; + deploy(asset: EvmAddress, paymentToken: EvmAddress, rbac: RbacPort[]): Promise; pause( lifeCycleCashFlow: EvmAddress, lifeCycleCashFlowId: ContractId | string @@ -343,7 +344,7 @@ export default abstract class TransactionAdapter throw new Error("Method not implemented.") } - deploy(asset: EvmAddress, paymentToken: EvmAddress): Promise { + deploy(asset: EvmAddress, paymentToken: EvmAddress, rbac: RbacPort[]): Promise { throw new Error("Method not implemented.") } diff --git a/packages/mass-payout/sdk/src/port/out/hs/HederaTransactionAdapter.ts b/packages/mass-payout/sdk/src/port/out/hs/HederaTransactionAdapter.ts index 031a0bd86..049a4f6c0 100644 --- a/packages/mass-payout/sdk/src/port/out/hs/HederaTransactionAdapter.ts +++ b/packages/mass-payout/sdk/src/port/out/hs/HederaTransactionAdapter.ts @@ -235,8 +235,8 @@ import { FileAppendTransaction, FileCreateTransaction, ContractCreateTransaction, - ContractExecuteTransaction, -} from "@hashgraph/sdk" + ContractExecuteTransaction +} from "@hiero-ledger/sdk" import { Interface } from "ethers/lib/utils.js" import TransactionAdapter from "../TransactionAdapter" import { MirrorNodeAdapter } from "../mirror/MirrorNodeAdapter" @@ -245,10 +245,12 @@ import TransactionResponse from "@domain/transaction/TransactionResponse" import { MirrorNodes } from "@domain/network/MirrorNode" import { JsonRpcRelays } from "@domain/network/JsonRpcRelay" import { TransactionType } from "../TransactionResponseEnums" +import Account from "@domain/account/Account" import EvmAddress from "@domain/contract/EvmAddress" import BigDecimal from "@domain/shared/BigDecimal" +import RbacPort from "./types/RbacPort" import { ethers, BaseContract, ContractTransaction } from "ethers" -import {LifeCycleCashFlow__factory, ProxyAdmin__factory, TransparentUpgradeableProxy__factory} from "@mass-payout/contracts" +import { LifeCycleCashFlow__factory, ProxyAdmin__factory, TransparentUpgradeableProxy__factory } from "@hashgraph/mass-payout-contracts" export abstract class HederaTransactionAdapter extends TransactionAdapter { protected readonly logger = new Logger(HederaTransactionAdapter.name) @@ -337,7 +339,7 @@ export abstract class HederaTransactionAdapter extends TransactionAdapter { throw new Error("Method not implemented.") } - async deploy(asset: EvmAddress, paymentToken: EvmAddress): Promise { + async deploy(asset: EvmAddress, paymentToken: EvmAddress, rbac: RbacPort[]): Promise { const lifeCycleCashFlowBytecodeHex = LifeCycleCashFlow__factory.bytecode.startsWith("0x") ? LifeCycleCashFlow__factory.bytecode.slice(2) @@ -358,24 +360,29 @@ export abstract class HederaTransactionAdapter extends TransactionAdapter { lifeCycleCashFlowContractAddress ) - const ProxyAdminBytecodeHex = ProxyAdmin__factory.bytecode.startsWith("0x") + const proxyAdminBytecodeHex = ProxyAdmin__factory.bytecode.startsWith("0x") ? ProxyAdmin__factory.bytecode.slice(2) : ProxyAdmin__factory.bytecode - const ProxyAdminBytecode = Uint8Array.from( - Buffer.from(ProxyAdminBytecodeHex, "hex") + const initialOwnerEvmAddress = this.getAccount().evmAddress + const abiCoder = new ethers.utils.AbiCoder() + const constructorParamsProxyAdminHex = abiCoder.encode( + ["address"], [initialOwnerEvmAddress] + ) + + const fullBytecodeProxyAdminHex = + "0x" + proxyAdminBytecodeHex + constructorParamsProxyAdminHex.slice(2) + const fullBytecodeProxyAdmin = Uint8Array.from( + Buffer.from(fullBytecodeProxyAdminHex.slice(2), "hex") ) - const ProxyAdminTransaction = new ContractCreateTransaction() - .setBytecode(ProxyAdminBytecode) + const proxyAdminTransaction = new ContractCreateTransaction() + .setBytecode(fullBytecodeProxyAdmin) .setGas(PROXY_ADMIN_DEPLOYMENT_GAS) - const resProxyAdmin = await this.signAndSendTransactionForDeployment( - ProxyAdminTransaction - ) - const proxyAdminAddress = "0x".concat( - resProxyAdmin.contractId.toSolidityAddress() - ) + const resProxyAdmin = + await this.signAndSendTransactionForDeployment(proxyAdminTransaction) + const proxyAdminAddress = "0x".concat(resProxyAdmin.contractId.toSolidityAddress()) this.logger.log("ProxyAdmin:", resProxyAdmin.contractId, proxyAdminAddress) @@ -390,28 +397,28 @@ export abstract class HederaTransactionAdapter extends TransactionAdapter { const callDataHex = iface.encodeFunctionData("initialize", [ asset.value, paymentToken.value.slice(2), + rbac ]) const callDataBytes = Uint8Array.from( Buffer.from(callDataHex.slice(2), "hex") ) - const abiCoder = new ethers.utils.AbiCoder() - const constructorParamsHex = abiCoder.encode( + const constructorParamsProxyHex = abiCoder.encode( ["address", "address", "bytes"], [lifeCycleCashFlowContractAddress, proxyAdminAddress, callDataHex] ) - const fullBytecodeHex = - "0x" + proxyBytecodeHex + constructorParamsHex.slice(2) - const fullBytecode = Uint8Array.from( - Buffer.from(fullBytecodeHex.slice(2), "hex") + const fullBytecodeProxyHex = + "0x" + proxyBytecodeHex + constructorParamsProxyHex.slice(2) + const fullBytecodeProxy = Uint8Array.from( + Buffer.from(fullBytecodeProxyHex.slice(2), "hex") ) - const ProxyTransaction = new ContractCreateTransaction() - .setBytecode(fullBytecode) + const proxyTransaction = new ContractCreateTransaction() + .setBytecode(fullBytecodeProxy) .setGas(PROXY_DEPLOYMENT_GAS) const resProxy = - await this.signAndSendTransactionForDeployment(ProxyTransaction) + await this.signAndSendTransactionForDeployment(proxyTransaction) const proxyAddress = "0x".concat(resProxy.contractId.toSolidityAddress()) this.logger.log("Proxy:", resProxy.contractId, proxyAddress) @@ -715,4 +722,6 @@ export abstract class HederaTransactionAdapter extends TransactionAdapter { abstract signAndSendTransactionForDeployment( transaction: Transaction ): Promise + + abstract getAccount(): Account } diff --git a/packages/mass-payout/sdk/src/port/out/hs/hts/HTSTransactionResponseAdapter.ts b/packages/mass-payout/sdk/src/port/out/hs/hts/HTSTransactionResponseAdapter.ts index 54a5d5804..30bc1bdbf 100644 --- a/packages/mass-payout/sdk/src/port/out/hs/hts/HTSTransactionResponseAdapter.ts +++ b/packages/mass-payout/sdk/src/port/out/hs/hts/HTSTransactionResponseAdapter.ts @@ -211,7 +211,7 @@ import { TransactionReceipt, TransactionRecord, TransactionId, -} from "@hashgraph/sdk" +} from "@hiero-ledger/sdk" import TransactionResponse from "@domain/transaction/TransactionResponse" import { TransactionResponseError } from "../../error/TransactionResponseError" import { TransactionType } from "../../TransactionResponseEnums" diff --git a/packages/mass-payout/sdk/src/port/out/hs/hts/custodial/CustodialTransactionAdapter.ts b/packages/mass-payout/sdk/src/port/out/hs/hts/custodial/CustodialTransactionAdapter.ts index b2d8cb026..7895a8b0c 100644 --- a/packages/mass-payout/sdk/src/port/out/hs/hts/custodial/CustodialTransactionAdapter.ts +++ b/packages/mass-payout/sdk/src/port/out/hs/hts/custodial/CustodialTransactionAdapter.ts @@ -209,7 +209,7 @@ import { Transaction, TransactionReceipt, TransactionResponse as HTransactionResponse, -} from "@hashgraph/sdk" +} from "@hiero-ledger/sdk" import { CustodialWalletService, SignatureRequest, @@ -235,6 +235,7 @@ import { HTSTransactionResponseAdapter } from "../HTSTransactionResponseAdapter" import { HederaId } from "@domain/shared/HederaId" import DfnsSettings from "@core/settings/custodialWalletSettings/DfnsSettings" import { PublickKeyNotFound } from "./error/PublickKeyNotFound" +import { EvmAddressNotFound } from "./error/EvmAddressNotFound" import { UnsupportedNetwork } from "@domain/network/error/UnsupportedNetwork" export abstract class CustodialTransactionAdapter extends HederaTransactionAdapter { @@ -362,10 +363,14 @@ export abstract class CustodialTransactionAdapter extends HederaTransactionAdapt if (!accountMirror.publicKey) { throw new PublickKeyNotFound() } + if (!accountMirror.evmAddress) { + throw new EvmAddressNotFound() + } this.account = new Account({ id: settings.hederaAccountId, publicKey: accountMirror.publicKey, + evmAddress: accountMirror.evmAddress, }) this.initCustodialWalletService(settings) diff --git a/packages/mass-payout/sdk/src/port/out/hs/hts/custodial/error/EvmAddressNotFound.ts b/packages/mass-payout/sdk/src/port/out/hs/hts/custodial/error/EvmAddressNotFound.ts new file mode 100644 index 000000000..3d83001f6 --- /dev/null +++ b/packages/mass-payout/sdk/src/port/out/hs/hts/custodial/error/EvmAddressNotFound.ts @@ -0,0 +1,210 @@ +/* + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "[]" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright [yyyy] [name of copyright owner] + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + +*/ + +export class EvmAddressNotFound extends Error { + constructor() { + super("EvmAddress not found in the mirror node") + } +} diff --git a/packages/mass-payout/sdk/src/port/out/hs/types/RbacPort.ts b/packages/mass-payout/sdk/src/port/out/hs/types/RbacPort.ts new file mode 100644 index 000000000..b12f21816 --- /dev/null +++ b/packages/mass-payout/sdk/src/port/out/hs/types/RbacPort.ts @@ -0,0 +1,209 @@ +/* + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "[]" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright [yyyy] [name of copyright owner] + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + +*/ + +export default interface RbacPort { + role: string; // bytes32 hex + members: string[]; // EVM addresses +} \ No newline at end of file diff --git a/packages/mass-payout/sdk/src/port/out/mirror/MirrorNodeAdapter.ts b/packages/mass-payout/sdk/src/port/out/mirror/MirrorNodeAdapter.ts index 5bbe07093..21e885e22 100644 --- a/packages/mass-payout/sdk/src/port/out/mirror/MirrorNodeAdapter.ts +++ b/packages/mass-payout/sdk/src/port/out/mirror/MirrorNodeAdapter.ts @@ -207,7 +207,7 @@ import { Injectable } from "@nestjs/common" import { Logger } from "@nestjs/common" import axios, { AxiosRequestConfig } from "axios" import { AxiosInstance } from "axios" -import { PublicKey as HPublicKey } from "@hashgraph/sdk" +import { PublicKey as HPublicKey } from "@hiero-ledger/sdk" import { InvalidResponse } from "@core/error/InvalidResponse" import { REGEX_TRANSACTION } from "../error/TransactionResponseError" import TransactionResultViewModel from "@port/in/response/TransactionResultViewModel" diff --git a/packages/mass-payout/sdk/src/port/out/rpc/RPCQueryAdapter.ts b/packages/mass-payout/sdk/src/port/out/rpc/RPCQueryAdapter.ts index 1306380e5..2cd9d14a8 100644 --- a/packages/mass-payout/sdk/src/port/out/rpc/RPCQueryAdapter.ts +++ b/packages/mass-payout/sdk/src/port/out/rpc/RPCQueryAdapter.ts @@ -210,7 +210,7 @@ /* eslint-disable camelcase */ import { Injectable, Logger } from "@nestjs/common" import { ethers } from "ethers" -import { LifeCycleCashFlow__factory } from "@mass-payout/contracts" +import { LifeCycleCashFlow__factory } from "@hashgraph/mass-payout-contracts" import EvmAddress from "@domain/contract/EvmAddress" import NetworkService from "@app/services/network/NetworkService" import { MirrorNodeAdapter } from "../mirror/MirrorNodeAdapter" diff --git a/packages/mass-payout/sdk/test/unit/app/usecases/command/lifecyclecashflow/operations/deploy/DeployCommandHandler.spec.ts b/packages/mass-payout/sdk/test/unit/app/usecases/command/lifecyclecashflow/operations/deploy/DeployCommandHandler.spec.ts index 68d552c5f..bbcbc8df6 100644 --- a/packages/mass-payout/sdk/test/unit/app/usecases/command/lifecyclecashflow/operations/deploy/DeployCommandHandler.spec.ts +++ b/packages/mass-payout/sdk/test/unit/app/usecases/command/lifecyclecashflow/operations/deploy/DeployCommandHandler.spec.ts @@ -203,34 +203,37 @@ */ -import { DeployCommandHandler } from '@app/usecase/command/lifeCycleCashFlow/operations/deploy/DeployCommandHandler'; -import TransactionService from '@app/services/transaction/TransactionService'; -import ContractService from '@app/services/contract/ContractService'; -import EvmAddress from '@domain/contract/EvmAddress'; +import { DeployCommandHandler } from "@app/usecase/command/lifeCycleCashFlow/operations/deploy/DeployCommandHandler"; +import TransactionService from "@app/services/transaction/TransactionService"; +import ContractService from "@app/services/contract/ContractService"; +import EvmAddress from "@domain/contract/EvmAddress"; +import Account from "@domain/account/Account"; import { + RbacCommand, DeployCommand, DeployCommandResponse, -} from '@app/usecase/command/lifeCycleCashFlow/operations/deploy/DeployCommand'; -import { DeployCommandError } from '@app/usecase/command/lifeCycleCashFlow/operations/deploy/error/DeployCommandError'; -import { - EvmAddressPropsFixture, - HederaIdPropsFixture, -} from '../../../../../../../fixture/DataFixture'; +} from "@app/usecase/command/lifeCycleCashFlow/operations/deploy/DeployCommand"; +import { MirrorNodeAdapter } from "@port/out/mirror/MirrorNodeAdapter"; +import { DeployCommandError } from "@app/usecase/command/lifeCycleCashFlow/operations/deploy/error/DeployCommandError"; +import { EvmAddressPropsFixture, HederaIdPropsFixture } from "../../../../../../../fixture/DataFixture"; + +const roleId = "0x0000000000000000000000000000000000000000000000000000000000000001"; +const memberAccountId = "0.0.123456"; +const memberEvmAddress = "0xaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"; -jest.mock('@hashgraph/sdk', () => ({ +jest.mock("@hiero-ledger/sdk", () => ({ TokenId: { fromString: jest.fn().mockReturnValue({ - toSolidityAddress: jest - .fn() - .mockReturnValue('0x1ba302dcf33f7f9fd08be50ddc2bbe44e4cccb3c'), + toSolidityAddress: jest.fn().mockReturnValue("0x1ba302dcf33f7f9fd08be50ddc2bbe44e4cccb3c"), }), }, })); -describe('DeployCommandHandler', () => { +describe("DeployCommandHandler", () => { let handler: DeployCommandHandler; let transactionService: jest.Mocked; let contractService: jest.Mocked; + let mirrorNodeAdapter: jest.Mocked; let mockDeploy: jest.Mock; beforeEach(() => { @@ -244,45 +247,102 @@ describe('DeployCommandHandler', () => { getContractEvmAddress: jest.fn(), } as any; - handler = new DeployCommandHandler(transactionService, contractService); + mirrorNodeAdapter = { + getAccountInfo: jest.fn().mockResolvedValue({ evmAddress: memberEvmAddress }), + } as any; + + handler = new DeployCommandHandler(transactionService, contractService, mirrorNodeAdapter); }); - it('should deploy contract and return DeployCommandResponse', async () => { + it("should deploy contract without rbac and return DeployCommandResponse", async () => { const command: DeployCommand = { asset: HederaIdPropsFixture.create().value, paymentToken: HederaIdPropsFixture.create().value, + rbac: [], } as any; const mockAssetAddress = EvmAddressPropsFixture.create().value; const mockDeployedAddress = EvmAddressPropsFixture.create().value; - contractService.getContractEvmAddress.mockResolvedValue( - new EvmAddress(mockAssetAddress), - ); + contractService.getContractEvmAddress.mockResolvedValue(new EvmAddress(mockAssetAddress)); mockDeploy.mockResolvedValue(mockDeployedAddress); const response = await handler.execute(command); - expect(contractService.getContractEvmAddress).toHaveBeenCalledWith( - command.asset, - ); + expect(contractService.getContractEvmAddress).toHaveBeenCalledWith(command.asset); + expect(mockDeploy).toHaveBeenCalledWith(new EvmAddress(mockAssetAddress), expect.any(EvmAddress), []); + expect(response).toBeInstanceOf(DeployCommandResponse); + expect(response.payload).toBe(mockDeployedAddress); + }); + + it("should deploy contract with rbac and return DeployCommandResponse", async () => { + const rbacMock: RbacCommand[] = [ + { + role: roleId, + members: [memberEvmAddress], + }, + ]; + const command: DeployCommand = { + asset: HederaIdPropsFixture.create().value, + paymentToken: HederaIdPropsFixture.create().value, + rbac: rbacMock, + } as any; + + const mockAssetAddress = EvmAddressPropsFixture.create().value; + const mockDeployedAddress = EvmAddressPropsFixture.create().value; + + contractService.getContractEvmAddress.mockResolvedValue(new EvmAddress(mockAssetAddress)); + mockDeploy.mockResolvedValue(mockDeployedAddress); + + const response = await handler.execute(command); + + expect(contractService.getContractEvmAddress).toHaveBeenCalledWith(command.asset); + expect(mockDeploy).toHaveBeenCalledWith(new EvmAddress(mockAssetAddress), expect.any(EvmAddress), rbacMock); + expect(response).toBeInstanceOf(DeployCommandResponse); + expect(response.payload).toBe(mockDeployedAddress); + }); + + it("should deploy contract with rbac, being the only member in Hedera Id format, and return DeployCommandResponse", async () => { + const rbacMock: RbacCommand[] = [ + { + role: roleId, + members: [memberAccountId], + }, + ]; + const command: DeployCommand = { + asset: HederaIdPropsFixture.create().value, + paymentToken: HederaIdPropsFixture.create().value, + rbac: rbacMock, + } as any; + + const mockAssetAddress = EvmAddressPropsFixture.create().value; + const mockDeployedAddress = EvmAddressPropsFixture.create().value; + + contractService.getContractEvmAddress.mockResolvedValue(new EvmAddress(mockAssetAddress)); + mockDeploy.mockResolvedValue(mockDeployedAddress); + + const response = await handler.execute(command); + + expect(contractService.getContractEvmAddress).toHaveBeenCalledWith(command.asset); expect(mockDeploy).toHaveBeenCalledWith( new EvmAddress(mockAssetAddress), expect.any(EvmAddress), + rbacMock.map((rbac) => ({ + ...rbac, + members: rbac.members.map(() => memberEvmAddress), + })), ); expect(response).toBeInstanceOf(DeployCommandResponse); expect(response.payload).toBe(mockDeployedAddress); }); - it('should wrap errors in DeployCommandError', async () => { + it("should wrap errors in DeployCommandError", async () => { const command: DeployCommand = { asset: HederaIdPropsFixture.create().value, paymentToken: HederaIdPropsFixture.create().value, } as any; - contractService.getContractEvmAddress.mockRejectedValue( - new Error('Error getting contract address'), - ); + contractService.getContractEvmAddress.mockRejectedValue(new Error("Error getting contract address")); await expect(handler.execute(command)).rejects.toThrow(DeployCommandError); }); diff --git a/packages/mass-payout/sdk/test/unit/port/in/lifeCycleCashFlow/LifeCycleCashFlow.spec.ts b/packages/mass-payout/sdk/test/unit/port/in/lifeCycleCashFlow/LifeCycleCashFlow.spec.ts index 89d227e99..a6f41c0d5 100644 --- a/packages/mass-payout/sdk/test/unit/port/in/lifeCycleCashFlow/LifeCycleCashFlow.spec.ts +++ b/packages/mass-payout/sdk/test/unit/port/in/lifeCycleCashFlow/LifeCycleCashFlow.spec.ts @@ -203,17 +203,14 @@ */ -import { LifeCycleCashFlow } from '@port/in/lifeCycleCashFlow/LifeCycleCashFlow'; -import { CommandBus } from '@core/command/CommandBus'; -import { QueryBus } from '@core/query/QueryBus'; -import { MirrorNodeAdapter } from '@port/out/mirror/MirrorNodeAdapter'; -import ValidatedRequest from '@core/validation/ValidatedArgs'; -import { - EvmAddressPropsFixture, - HederaIdPropsFixture, -} from '../../../../fixture/DataFixture'; - -jest.mock('@core/validation/ValidatedArgs', () => { +import { LifeCycleCashFlow } from "@port/in/lifeCycleCashFlow/LifeCycleCashFlow"; +import { CommandBus } from "@core/command/CommandBus"; +import { QueryBus } from "@core/query/QueryBus"; +import { MirrorNodeAdapter } from "@port/out/mirror/MirrorNodeAdapter"; +import ValidatedRequest from "@core/validation/ValidatedArgs"; +import { EvmAddressPropsFixture, HederaIdPropsFixture } from "../../../../fixture/DataFixture"; + +jest.mock("@core/validation/ValidatedArgs", () => { return { __esModule: true, default: class MockValidatedArgs { @@ -222,7 +219,7 @@ jest.mock('@core/validation/ValidatedArgs', () => { }; }); -describe('LifeCycleCashFlow', () => { +describe("LifeCycleCashFlow", () => { let service: LifeCycleCashFlow; let commandBus: jest.Mocked; let queryBus: jest.Mocked; @@ -237,69 +234,67 @@ describe('LifeCycleCashFlow', () => { (ValidatedRequest.handleValidation as jest.Mock).mockClear(); }); - describe('deploy', () => { - it('should validate request and execute DeployCommand', async () => { + describe("deploy", () => { + it("should validate request and execute DeployCommand", async () => { + const rbacMock: any[] = [ + { + role: "0x0000000000000000000000000000000000000000000000000000000000000001", + members: ["0xaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"], + }, + ]; const mockRequest: any = { asset: HederaIdPropsFixture.create().value, paymentToken: HederaIdPropsFixture.create().value, + rbac: rbacMock, }; - const mockResponse = { payload: 'tx123' }; + const mockResponse = { payload: "tx123" }; commandBus.execute.mockResolvedValue(mockResponse); const result = await service.deploy(mockRequest); - expect(ValidatedRequest.handleValidation).toHaveBeenCalledWith( - 'DeployRequest', - mockRequest, - ); + expect(ValidatedRequest.handleValidation).toHaveBeenCalledWith("DeployRequest", mockRequest); expect(commandBus.execute).toHaveBeenCalled(); expect(result).toEqual(mockResponse); }); }); - describe('pause', () => { - it('should validate request and execute PauseCommand', async () => { + describe("pause", () => { + it("should validate request and execute PauseCommand", async () => { const mockRequest: any = { lifeCycleCashFlow: HederaIdPropsFixture.create().value, }; - const mockResponse = { payload: true, transactionId: 'tx123' }; + const mockResponse = { payload: true, transactionId: "tx123" }; commandBus.execute.mockResolvedValue(mockResponse); const result = await service.pause(mockRequest); - expect(ValidatedRequest.handleValidation).toHaveBeenCalledWith( - 'PauseRequest', - mockRequest, - ); + expect(ValidatedRequest.handleValidation).toHaveBeenCalledWith("PauseRequest", mockRequest); expect(commandBus.execute).toHaveBeenCalled(); expect(result).toEqual(mockResponse); }); }); - describe('unpause', () => { - it('should validate request and execute UnpauseCommand', async () => { + describe("unpause", () => { + it("should validate request and execute UnpauseCommand", async () => { const mockRequest: any = { lifeCycleCashFlow: HederaIdPropsFixture.create().value, }; - const mockResponse = { payload: true, transactionId: 'tx123' }; + const mockResponse = { payload: true, transactionId: "tx123" }; commandBus.execute.mockResolvedValue(mockResponse); const result = await service.unpause(mockRequest); - expect(ValidatedRequest.handleValidation).toHaveBeenCalledWith( - 'UnpauseRequest', - mockRequest, - ); + expect(ValidatedRequest.handleValidation).toHaveBeenCalledWith("UnpauseRequest", mockRequest); expect(commandBus.execute).toHaveBeenCalled(); expect(result).toEqual(mockResponse); }); }); - describe('isPaused', () => { - it('should validate request and query IsPaused', async () => { + describe("isPaused", () => { + it("should validate request and query IsPaused", async () => { const mockRequest: any = { lifeCycleCashFlow: HederaIdPropsFixture.create().value, }; @@ -309,32 +304,29 @@ describe('LifeCycleCashFlow', () => { const result = await service.isPaused(mockRequest); - expect(ValidatedRequest.handleValidation).toHaveBeenCalledWith( - 'IsPausedRequest', - mockRequest, - ); + expect(ValidatedRequest.handleValidation).toHaveBeenCalledWith("IsPausedRequest", mockRequest); expect(queryBus.execute).toHaveBeenCalled(); expect(result).toEqual(mockResponse); }); }); - describe('executeDistribution', () => { - it('should validate request and execute ExecuteDistributionCommand', async () => { + describe("executeDistribution", () => { + it("should validate request and execute ExecuteDistributionCommand", async () => { const lifeCycleCashFlow = HederaIdPropsFixture.create().value; const mockRequest: any = { lifeCycleCashFlow: lifeCycleCashFlow, asset: HederaIdPropsFixture.create().value, pageIndex: 1, pageLength: 1, - distributionId: 'dist123', + distributionId: "dist123", }; const mockQueryResponse = { payload: 6 }; const mockCommandResponse = { failed: [EvmAddressPropsFixture.create().value], succeeded: [EvmAddressPropsFixture.create().value], - paidAmount: ['1'], + paidAmount: ["1"], executed: true, - transactionId: 'tx123', + transactionId: "tx123", }; queryBus.execute.mockResolvedValue(mockQueryResponse); @@ -343,21 +335,17 @@ describe('LifeCycleCashFlow', () => { const result = await service.executeDistribution(mockRequest); expect(ValidatedRequest.handleValidation).toHaveBeenCalledTimes(2); - expect(ValidatedRequest.handleValidation).toHaveBeenCalledWith( - 'GetPaymentTokenDecimalsRequest', - { lifeCycleCashFlow: lifeCycleCashFlow }, - ); - expect(ValidatedRequest.handleValidation).toHaveBeenCalledWith( - 'ExecuteDistributionRequest', - mockRequest, - ); + expect(ValidatedRequest.handleValidation).toHaveBeenCalledWith("GetPaymentTokenDecimalsRequest", { + lifeCycleCashFlow: lifeCycleCashFlow, + }); + expect(ValidatedRequest.handleValidation).toHaveBeenCalledWith("ExecuteDistributionRequest", mockRequest); expect(commandBus.execute).toHaveBeenCalled(); expect(result).toEqual(mockCommandResponse); }); }); - describe('executeDistributionByAddresses', () => { - it('should validate request and execute ExecuteDistributionByAddressesCommand', async () => { + describe("executeDistributionByAddresses", () => { + it("should validate request and execute ExecuteDistributionByAddressesCommand", async () => { const lifeCycleCashFlow = HederaIdPropsFixture.create().value; const holder1 = EvmAddressPropsFixture.create().value; const holder2 = EvmAddressPropsFixture.create().value; @@ -365,14 +353,14 @@ describe('LifeCycleCashFlow', () => { lifeCycleCashFlow: lifeCycleCashFlow, asset: HederaIdPropsFixture.create().value, holders: [holder1, holder2], - distributionId: 'dist123', + distributionId: "dist123", }; const mockQueryResponse = { payload: 6 }; const mockCommandResponse = { failed: [holder1], succeeded: [holder2], - paidAmount: ['1'], - transactionId: 'tx123', + paidAmount: ["1"], + transactionId: "tx123", }; queryBus.execute.mockResolvedValue(mockQueryResponse); @@ -381,12 +369,11 @@ describe('LifeCycleCashFlow', () => { const result = await service.executeDistributionByAddresses(mockRequest); expect(ValidatedRequest.handleValidation).toHaveBeenCalledTimes(2); + expect(ValidatedRequest.handleValidation).toHaveBeenCalledWith("GetPaymentTokenDecimalsRequest", { + lifeCycleCashFlow: lifeCycleCashFlow, + }); expect(ValidatedRequest.handleValidation).toHaveBeenCalledWith( - 'GetPaymentTokenDecimalsRequest', - { lifeCycleCashFlow: lifeCycleCashFlow }, - ); - expect(ValidatedRequest.handleValidation).toHaveBeenCalledWith( - 'ExecuteDistributionByAddressesRequest', + "ExecuteDistributionByAddressesRequest", mockRequest, ); expect(commandBus.execute).toHaveBeenCalled(); @@ -394,8 +381,8 @@ describe('LifeCycleCashFlow', () => { }); }); - describe('executeBondCashOut', () => { - it('should validate request and execute ExecuteBondCashOutCommand', async () => { + describe("executeBondCashOut", () => { + it("should validate request and execute ExecuteBondCashOutCommand", async () => { const lifeCycleCashFlow = HederaIdPropsFixture.create().value; const mockRequest: any = { lifeCycleCashFlow: lifeCycleCashFlow, @@ -407,9 +394,9 @@ describe('LifeCycleCashFlow', () => { const mockCommandResponse = { failed: [EvmAddressPropsFixture.create().value], succeeded: [EvmAddressPropsFixture.create().value], - paidAmount: ['1'], + paidAmount: ["1"], executed: true, - transactionId: 'tx123', + transactionId: "tx123", }; queryBus.execute.mockResolvedValue(mockQueryResponse); @@ -418,21 +405,17 @@ describe('LifeCycleCashFlow', () => { const result = await service.executeBondCashOut(mockRequest); expect(ValidatedRequest.handleValidation).toHaveBeenCalledTimes(2); - expect(ValidatedRequest.handleValidation).toHaveBeenCalledWith( - 'GetPaymentTokenDecimalsRequest', - { lifeCycleCashFlow: lifeCycleCashFlow }, - ); - expect(ValidatedRequest.handleValidation).toHaveBeenCalledWith( - 'ExecuteBondCashOutRequest', - mockRequest, - ); + expect(ValidatedRequest.handleValidation).toHaveBeenCalledWith("GetPaymentTokenDecimalsRequest", { + lifeCycleCashFlow: lifeCycleCashFlow, + }); + expect(ValidatedRequest.handleValidation).toHaveBeenCalledWith("ExecuteBondCashOutRequest", mockRequest); expect(commandBus.execute).toHaveBeenCalled(); expect(result).toEqual(mockCommandResponse); }); }); - describe('executeBondCashOutByAddresses', () => { - it('should validate request and execute ExecuteBondCashOutByAddressesCommand', async () => { + describe("executeBondCashOutByAddresses", () => { + it("should validate request and execute ExecuteBondCashOutByAddressesCommand", async () => { const lifeCycleCashFlow = HederaIdPropsFixture.create().value; const holder1 = EvmAddressPropsFixture.create().value; const holder2 = EvmAddressPropsFixture.create().value; @@ -445,8 +428,8 @@ describe('LifeCycleCashFlow', () => { const mockCommandResponse = { failed: [holder1], succeeded: [holder2], - paidAmount: ['1'], - transactionId: 'tx123', + paidAmount: ["1"], + transactionId: "tx123", }; queryBus.execute.mockResolvedValue(mockQueryResponse); @@ -455,12 +438,11 @@ describe('LifeCycleCashFlow', () => { const result = await service.executeBondCashOutByAddresses(mockRequest); expect(ValidatedRequest.handleValidation).toHaveBeenCalledTimes(2); + expect(ValidatedRequest.handleValidation).toHaveBeenCalledWith("GetPaymentTokenDecimalsRequest", { + lifeCycleCashFlow: lifeCycleCashFlow, + }); expect(ValidatedRequest.handleValidation).toHaveBeenCalledWith( - 'GetPaymentTokenDecimalsRequest', - { lifeCycleCashFlow: lifeCycleCashFlow }, - ); - expect(ValidatedRequest.handleValidation).toHaveBeenCalledWith( - 'ExecuteBondCashOutByAddressesRequest', + "ExecuteBondCashOutByAddressesRequest", mockRequest, ); expect(commandBus.execute).toHaveBeenCalled(); @@ -468,24 +450,24 @@ describe('LifeCycleCashFlow', () => { }); }); - describe('executeAmountSnapshot', () => { - it('should validate request and execute ExecuteAmountSnapshot', async () => { + describe("executeAmountSnapshot", () => { + it("should validate request and execute ExecuteAmountSnapshot", async () => { const lifeCycleCashFlow = HederaIdPropsFixture.create().value; const mockRequest: any = { lifeCycleCashFlow: lifeCycleCashFlow, asset: HederaIdPropsFixture.create().value, pageIndex: 1, pageLength: 1, - snapshotId: 'snap123', + snapshotId: "snap123", amount: 1, }; const mockQueryResponse = { payload: 6 }; const mockCommandResponse = { failed: [EvmAddressPropsFixture.create().value], succeeded: [EvmAddressPropsFixture.create().value], - paidAmount: ['1'], + paidAmount: ["1"], executed: true, - transactionId: 'tx123', + transactionId: "tx123", }; queryBus.execute.mockResolvedValue(mockQueryResponse); @@ -494,37 +476,33 @@ describe('LifeCycleCashFlow', () => { const result = await service.executeAmountSnapshot(mockRequest); expect(ValidatedRequest.handleValidation).toHaveBeenCalledTimes(2); - expect(ValidatedRequest.handleValidation).toHaveBeenCalledWith( - 'GetPaymentTokenDecimalsRequest', - { lifeCycleCashFlow: lifeCycleCashFlow }, - ); - expect(ValidatedRequest.handleValidation).toHaveBeenCalledWith( - 'ExecuteAmountSnapshotRequest', - mockRequest, - ); + expect(ValidatedRequest.handleValidation).toHaveBeenCalledWith("GetPaymentTokenDecimalsRequest", { + lifeCycleCashFlow: lifeCycleCashFlow, + }); + expect(ValidatedRequest.handleValidation).toHaveBeenCalledWith("ExecuteAmountSnapshotRequest", mockRequest); expect(commandBus.execute).toHaveBeenCalled(); expect(result).toEqual(mockCommandResponse); }); }); - describe('executePercentageSnapshot', () => { - it('should validate request and execute ExecutePercentageSnapshot', async () => { + describe("executePercentageSnapshot", () => { + it("should validate request and execute ExecutePercentageSnapshot", async () => { const lifeCycleCashFlow = HederaIdPropsFixture.create().value; const mockRequest: any = { lifeCycleCashFlow: lifeCycleCashFlow, asset: HederaIdPropsFixture.create().value, pageIndex: 1, pageLength: 1, - snapshotId: 'snap123', + snapshotId: "snap123", percentage: 20, }; const mockQueryResponse = { payload: 6 }; const mockCommandResponse = { failed: [EvmAddressPropsFixture.create().value], succeeded: [EvmAddressPropsFixture.create().value], - paidAmount: ['1'], + paidAmount: ["1"], executed: true, - transactionId: 'tx123', + transactionId: "tx123", }; queryBus.execute.mockResolvedValue(mockQueryResponse); @@ -533,21 +511,17 @@ describe('LifeCycleCashFlow', () => { const result = await service.executePercentageSnapshot(mockRequest); expect(ValidatedRequest.handleValidation).toHaveBeenCalledTimes(2); - expect(ValidatedRequest.handleValidation).toHaveBeenCalledWith( - 'GetPaymentTokenDecimalsRequest', - { lifeCycleCashFlow: lifeCycleCashFlow }, - ); - expect(ValidatedRequest.handleValidation).toHaveBeenCalledWith( - 'ExecutePercentageSnapshotRequest', - mockRequest, - ); + expect(ValidatedRequest.handleValidation).toHaveBeenCalledWith("GetPaymentTokenDecimalsRequest", { + lifeCycleCashFlow: lifeCycleCashFlow, + }); + expect(ValidatedRequest.handleValidation).toHaveBeenCalledWith("ExecutePercentageSnapshotRequest", mockRequest); expect(commandBus.execute).toHaveBeenCalled(); expect(result).toEqual(mockCommandResponse); }); }); - describe('executeAmountSnapshotByAddresses', () => { - it('should validate request and execute ExecuteAmountSnapshotByAddresses', async () => { + describe("executeAmountSnapshotByAddresses", () => { + it("should validate request and execute ExecuteAmountSnapshotByAddresses", async () => { const lifeCycleCashFlow = HederaIdPropsFixture.create().value; const holder1 = EvmAddressPropsFixture.create().value; const holder2 = EvmAddressPropsFixture.create().value; @@ -555,30 +529,28 @@ describe('LifeCycleCashFlow', () => { lifeCycleCashFlow: lifeCycleCashFlow, asset: HederaIdPropsFixture.create().value, holders: [holder1, holder2], - snapshotId: 'snap123', + snapshotId: "snap123", amount: 1, }; const mockQueryResponse = { payload: 6 }; const mockCommandResponse = { failed: [holder1], succeeded: [holder2], - paidAmount: ['1'], - transactionId: 'tx123', + paidAmount: ["1"], + transactionId: "tx123", }; queryBus.execute.mockResolvedValue(mockQueryResponse); commandBus.execute.mockResolvedValue(mockCommandResponse); - const result = - await service.executeAmountSnapshotByAddresses(mockRequest); + const result = await service.executeAmountSnapshotByAddresses(mockRequest); expect(ValidatedRequest.handleValidation).toHaveBeenCalledTimes(2); + expect(ValidatedRequest.handleValidation).toHaveBeenCalledWith("GetPaymentTokenDecimalsRequest", { + lifeCycleCashFlow: lifeCycleCashFlow, + }); expect(ValidatedRequest.handleValidation).toHaveBeenCalledWith( - 'GetPaymentTokenDecimalsRequest', - { lifeCycleCashFlow: lifeCycleCashFlow }, - ); - expect(ValidatedRequest.handleValidation).toHaveBeenCalledWith( - 'ExecuteAmountSnapshotByAddressesRequest', + "ExecuteAmountSnapshotByAddressesRequest", mockRequest, ); expect(commandBus.execute).toHaveBeenCalled(); @@ -586,15 +558,15 @@ describe('LifeCycleCashFlow', () => { }); }); - describe('executePercentageSnapshotByAddresses', () => { - it('should validate request and execute ExecutePercentageSnapshotByAddresses', async () => { + describe("executePercentageSnapshotByAddresses", () => { + it("should validate request and execute ExecutePercentageSnapshotByAddresses", async () => { const lifeCycleCashFlow = HederaIdPropsFixture.create().value; const holder1 = EvmAddressPropsFixture.create().value; const holder2 = EvmAddressPropsFixture.create().value; const mockRequest: any = { lifeCycleCashFlow: lifeCycleCashFlow, asset: HederaIdPropsFixture.create().value, - snapshotId: 'snap123', + snapshotId: "snap123", holders: [holder1, holder2], percentage: 20, }; @@ -603,23 +575,21 @@ describe('LifeCycleCashFlow', () => { const mockCommandResponse = { failed: [holder1], succeeded: [holder2], - paidAmount: ['1'], - transactionId: 'tx123', + paidAmount: ["1"], + transactionId: "tx123", }; queryBus.execute.mockResolvedValue(mockQueryResponse); commandBus.execute.mockResolvedValue(mockCommandResponse); - const result = - await service.executePercentageSnapshotByAddresses(mockRequest); + const result = await service.executePercentageSnapshotByAddresses(mockRequest); expect(ValidatedRequest.handleValidation).toHaveBeenCalledTimes(2); + expect(ValidatedRequest.handleValidation).toHaveBeenCalledWith("GetPaymentTokenDecimalsRequest", { + lifeCycleCashFlow: lifeCycleCashFlow, + }); expect(ValidatedRequest.handleValidation).toHaveBeenCalledWith( - 'GetPaymentTokenDecimalsRequest', - { lifeCycleCashFlow: lifeCycleCashFlow }, - ); - expect(ValidatedRequest.handleValidation).toHaveBeenCalledWith( - 'ExecutePercentageSnapshotByAddressesRequest', + "ExecutePercentageSnapshotByAddressesRequest", mockRequest, ); expect(commandBus.execute).toHaveBeenCalled(); @@ -627,8 +597,8 @@ describe('LifeCycleCashFlow', () => { }); }); - describe('getPaymentToken', () => { - it('should validate request and execute GetPaymentTokenQuery', async () => { + describe("getPaymentToken", () => { + it("should validate request and execute GetPaymentTokenQuery", async () => { const mockRequest: any = { lifeCycleCashFlow: HederaIdPropsFixture.create().value, }; @@ -638,17 +608,14 @@ describe('LifeCycleCashFlow', () => { const result = await service.getPaymentToken(mockRequest); - expect(ValidatedRequest.handleValidation).toHaveBeenCalledWith( - 'GetPaymentTokenRequest', - mockRequest, - ); + expect(ValidatedRequest.handleValidation).toHaveBeenCalledWith("GetPaymentTokenRequest", mockRequest); expect(queryBus.execute).toHaveBeenCalled(); expect(result).toEqual(mockResponse); }); }); - describe('getPaymentTokenDecimals', () => { - it('should validate request and execute getPaymentTokenDecimalsQuery', async () => { + describe("getPaymentTokenDecimals", () => { + it("should validate request and execute getPaymentTokenDecimalsQuery", async () => { const mockRequest: any = { lifeCycleCashFlow: HederaIdPropsFixture.create().value, }; @@ -658,10 +625,7 @@ describe('LifeCycleCashFlow', () => { const result = await service.getPaymentTokenDecimals(mockRequest); - expect(ValidatedRequest.handleValidation).toHaveBeenCalledWith( - 'GetPaymentTokenDecimalsRequest', - mockRequest, - ); + expect(ValidatedRequest.handleValidation).toHaveBeenCalledWith("GetPaymentTokenDecimalsRequest", mockRequest); expect(queryBus.execute).toHaveBeenCalled(); expect(result).toEqual(mockResponse); }); diff --git a/packages/mass-payout/sdk/test/unit/port/out/hs/HederaTransactionAdapter.spec.ts b/packages/mass-payout/sdk/test/unit/port/out/hs/HederaTransactionAdapter.spec.ts index 3e935c0f6..b3a4d1d14 100644 --- a/packages/mass-payout/sdk/test/unit/port/out/hs/HederaTransactionAdapter.spec.ts +++ b/packages/mass-payout/sdk/test/unit/port/out/hs/HederaTransactionAdapter.spec.ts @@ -203,10 +203,11 @@ */ -import { ContractId, TransactionReceipt } from "@hashgraph/sdk" +import { ContractId, TransactionReceipt } from "@hiero-ledger/sdk" import TransactionResponse from "@domain/transaction/TransactionResponse" import EvmAddress from "@domain/contract/EvmAddress" import BigDecimal from "@domain/shared/BigDecimal" +import Account from "@domain/account/Account" import { HederaTransactionAdapter } from "@port/out/hs/HederaTransactionAdapter" import { MirrorNodeAdapter } from "@port/out/mirror/MirrorNodeAdapter" @@ -220,6 +221,7 @@ import { class TestHederaTransactionAdapter extends HederaTransactionAdapter { public mockSignAndSendTransaction = jest.fn() public mockSignAndSendTransactionForDeployment = jest.fn() + public mockGetAccount = jest.fn() async signAndSendTransaction(): Promise { return this.mockSignAndSendTransaction() @@ -228,6 +230,10 @@ class TestHederaTransactionAdapter extends HederaTransactionAdapter { async signAndSendTransactionForDeployment(): Promise { return this.mockSignAndSendTransactionForDeployment() } + + getAccount(): Account { + return this.mockGetAccount() + } } describe("HederaTransactionAdapter", () => { @@ -267,6 +273,108 @@ describe("HederaTransactionAdapter", () => { }) }) + describe("deploy", () => { + it("should deploy lifecycle without rbac, proxy admin, proxy and return proxy address", async () => { + const asset = new EvmAddress(EvmAddressPropsFixture.create().value) + const paymentToken = new EvmAddress(EvmAddressPropsFixture.create().value) + + // --- mocks --- + const lifecycleContractId = ContractId.fromString("0.0.1001") + const proxyAdminContractId = ContractId.fromString("0.0.1002") + const proxyContractId = ContractId.fromString("0.0.1003") + + jest + .spyOn(adapter as any, "deployLifeCycleCashFlow") + .mockResolvedValue(lifecycleContractId) + + mirrorNodeAdapter.getContractInfo.mockResolvedValue({ + evmAddress: "0x1111111111111111111111111111111111111111", + } as any) + + adapter.mockGetAccount.mockReturnValue({ + evmAddress: "0x2222222222222222222222222222222222222222", + } as any) + + adapter.mockSignAndSendTransactionForDeployment + .mockResolvedValueOnce({ + contractId: proxyAdminContractId, + } as any) + .mockResolvedValueOnce({ + contractId: proxyContractId, + } as any) + + // --- execute --- + const result = await adapter.deploy(asset, paymentToken, []) + + // --- assertions --- + expect(mirrorNodeAdapter.getContractInfo).toHaveBeenCalledWith( + lifecycleContractId.toString() + ) + + expect(adapter.mockSignAndSendTransactionForDeployment).toHaveBeenCalledTimes( + 2 + ) + + expect(result).toBe( + "0x" + proxyContractId.toSolidityAddress() + ) + }) + + it("should deploy lifecycle with rbac, proxy admin, proxy and return proxy address", async () => { + const asset = new EvmAddress(EvmAddressPropsFixture.create().value) + const paymentToken = new EvmAddress(EvmAddressPropsFixture.create().value) + const rbac = [ + { + role: "0x0000000000000000000000000000000000000000000000000000000000000001", + members: [ + "0xaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" + ] + } + ]; + + // --- mocks --- + const lifecycleContractId = ContractId.fromString("0.0.1001") + const proxyAdminContractId = ContractId.fromString("0.0.1002") + const proxyContractId = ContractId.fromString("0.0.1003") + + jest + .spyOn(adapter as any, "deployLifeCycleCashFlow") + .mockResolvedValue(lifecycleContractId) + + mirrorNodeAdapter.getContractInfo.mockResolvedValue({ + evmAddress: "0x1111111111111111111111111111111111111111", + } as any) + + adapter.mockGetAccount.mockReturnValue({ + evmAddress: "0x2222222222222222222222222222222222222222", + } as any) + + adapter.mockSignAndSendTransactionForDeployment + .mockResolvedValueOnce({ + contractId: proxyAdminContractId, + } as any) + .mockResolvedValueOnce({ + contractId: proxyContractId, + } as any) + + // --- execute --- + const result = await adapter.deploy(asset, paymentToken, rbac) + + // --- assertions --- + expect(mirrorNodeAdapter.getContractInfo).toHaveBeenCalledWith( + lifecycleContractId.toString() + ) + + expect(adapter.mockSignAndSendTransactionForDeployment).toHaveBeenCalledTimes( + 2 + ) + + expect(result).toBe( + "0x" + proxyContractId.toSolidityAddress() + ) + }) + }) + describe("pause", () => { it("should call signAndSendTransaction with encoded function data", async () => { const lifeCycleCashFlow = new EvmAddress( diff --git a/packages/mass-payout/sdk/test/unit/port/out/hs/hts/HTSTransactionResponseAdapter.spec.ts b/packages/mass-payout/sdk/test/unit/port/out/hs/hts/HTSTransactionResponseAdapter.spec.ts index 30dd31091..737916cc4 100644 --- a/packages/mass-payout/sdk/test/unit/port/out/hs/hts/HTSTransactionResponseAdapter.spec.ts +++ b/packages/mass-payout/sdk/test/unit/port/out/hs/hts/HTSTransactionResponseAdapter.spec.ts @@ -210,7 +210,7 @@ import { TransactionReceipt, TransactionRecord, TransactionId, -} from "@hashgraph/sdk" +} from "@hiero-ledger/sdk" import TransactionResponse from "@domain/transaction/TransactionResponse" import { TransactionResponseError } from "@port/out/error/TransactionResponseError" import { TransactionType } from "@port/out/TransactionResponseEnums" diff --git a/packages/mass-payout/sdk/test/unit/port/out/hs/hts/custodial/CustodialTransactionAdapter.spec.ts b/packages/mass-payout/sdk/test/unit/port/out/hs/hts/custodial/CustodialTransactionAdapter.spec.ts index d010b6a85..68f29a68c 100644 --- a/packages/mass-payout/sdk/test/unit/port/out/hs/hts/custodial/CustodialTransactionAdapter.spec.ts +++ b/packages/mass-payout/sdk/test/unit/port/out/hs/hts/custodial/CustodialTransactionAdapter.spec.ts @@ -215,11 +215,11 @@ import { PublickKeyNotFound } from "@port/out/hs/hts/custodial/error/PublickKeyN import { SigningError } from "@port/out/error/SigningError" import Account from "@domain/account/Account" import TransactionResponse from "@domain/transaction/TransactionResponse" -import { Client, Transaction, TransactionReceipt } from "@hashgraph/sdk" +import { Client, Transaction, TransactionReceipt } from "@hiero-ledger/sdk" import { CustodialWalletService } from "@hashgraph/hedera-custodians-integration" import DfnsSettings from "@core/settings/custodialWalletSettings/DfnsSettings" -jest.mock("@hashgraph/sdk", () => ({ +jest.mock("@hiero-ledger/sdk", () => ({ Client: { forTestnet: jest.fn(() => ({ setOperatorWith: jest.fn() })), forMainnet: jest.fn(() => ({ setOperatorWith: jest.fn() })), @@ -273,6 +273,7 @@ describe("CustodialTransactionAdapter", () => { it("should register and emit walletPaired", async () => { mockMirrorNodeAdapter.getAccountInfo.mockResolvedValueOnce({ publicKey: { key: "fakePublicKey" }, + evmAddress: "0xFakeEvmAddress", }) const settings = { hederaAccountId: "0.0.123" } as DfnsSettings diff --git a/packages/mass-payout/sdk/test/unit/port/out/rpc/RPCQueryAdapter.spec.ts b/packages/mass-payout/sdk/test/unit/port/out/rpc/RPCQueryAdapter.spec.ts index e9787741b..b60a2f3f8 100644 --- a/packages/mass-payout/sdk/test/unit/port/out/rpc/RPCQueryAdapter.spec.ts +++ b/packages/mass-payout/sdk/test/unit/port/out/rpc/RPCQueryAdapter.spec.ts @@ -209,7 +209,7 @@ import { RPCQueryAdapter } from "@port/out/rpc/RPCQueryAdapter" import NetworkService from "@app/services/network/NetworkService" import { MirrorNodeAdapter } from "@port/out/mirror/MirrorNodeAdapter" import { ethers } from "ethers" -import { LifeCycleCashFlow__factory } from "@mass-payout/contracts" +import { LifeCycleCashFlow__factory } from "@hashgraph/mass-payout-contracts" import EvmAddress from "@domain/contract/EvmAddress" import { EvmAddressPropsFixture, @@ -227,7 +227,7 @@ const mockContract = { getPaymentTokenDecimals: jest.fn(), } -jest.mock("@mass-payout/contracts", () => ({ +jest.mock("@hashgraph/mass-payout-contracts", () => ({ LifeCycleCashFlow__factory: { connect: jest.fn(() => mockContract), }, diff --git a/solhint.config.js b/solhint.config.js index f799bd45d..d63b1e029 100644 --- a/solhint.config.js +++ b/solhint.config.js @@ -5,53 +5,53 @@ */ module.exports = { - extends: 'solhint:recommended', + extends: "solhint:recommended", rules: { // Line length and formatting - 'max-line-length': ['error', 120], - 'max-states-count': ['off', 15], - quotes: ['error', 'double'], // Align with Prettier singleQuote: false + "max-line-length": ["error", 120], + "max-states-count": ["off", 15], + quotes: ["error", "double"], // Align with Prettier singleQuote: false // Code quality and safety - 'no-empty-blocks': 'error', - 'no-unused-vars': 'error', - 'payable-fallback': 'error', - 'reason-string': ['error', { maxLength: 80 }], + "no-empty-blocks": "error", + "no-unused-vars": "error", + "payable-fallback": "error", + "reason-string": ["error", { maxLength: 80 }], // Solidity syntax and style - 'constructor-syntax': 'error', - 'const-name-snakecase': 'error', - 'func-name-mixedcase': 'error', - 'func-param-name-mixedcase': 'error', - 'modifier-name-mixedcase': 'error', - 'private-vars-leading-underscore': ['error', { strict: false }], - 'use-forbidden-name': 'error', - 'var-name-mixedcase': 'error', + "constructor-syntax": "error", + "const-name-snakecase": "error", + "func-name-mixedcase": "error", + "func-param-name-mixedcase": "error", + "modifier-name-mixedcase": "error", + "private-vars-leading-underscore": ["error", { strict: false }], + "use-forbidden-name": "error", + "var-name-mixedcase": "error", // Import and ordering rules - 'imports-on-top': 'error', - 'visibility-modifier-order': 'error', - ordering: 'error', + "imports-on-top": "error", + "visibility-modifier-order": "error", + ordering: "error", // Security rules - 'avoid-call-value': 'error', - 'avoid-sha3': 'error', - 'avoid-suicide': 'error', - 'avoid-throw': 'error', - 'avoid-tx-origin': 'error', - 'check-send-result': 'error', - 'multiple-sends': 'error', - reentrancy: 'error', - 'state-visibility': 'error', + "avoid-call-value": "error", + "avoid-sha3": "error", + "avoid-suicide": "error", + "avoid-throw": "error", + "avoid-tx-origin": "error", + "check-send-result": "error", + "multiple-sends": "error", + reentrancy: "error", + "state-visibility": "error", // Compiler and function rules - 'compiler-version': ['error', '>=0.8.0 <0.9.0'], - 'func-visibility': ['warn', { ignoreConstructors: true }], + "compiler-version": ["error", ">=0.8.0 <0.9.0"], + "func-visibility": ["warn", { ignoreConstructors: true }], // Time-related rules (disabled as commonly needed in DeFi) - 'not-rely-on-time': 'off', + "not-rely-on-time": "off", // Disable verbose documentation warnings to focus on code quality - 'use-natspec': 'off', + "use-natspec": "off", }, };